From a4c9fa14db64deb39de68c461e56c4f5657fead0 Mon Sep 17 00:00:00 2001 From: Steve Landey Date: Sun, 8 Sep 2024 21:50:49 -0700 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20minify=20identifiers=20in=20sea?= =?UTF-8?q?rch.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- src/plugins/static/mermaid.js | 4 ++-- templates/html/static/search.js | 36 ++++++++++++++++----------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 73797ba..4f17342 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ client-nocache: bun build src/clientjs/index.ts --target=browser --outfile=templates/html/static/client.js --minify --sourcemap - bun build src/clientjs/search.ts --target=browser --outfile=templates/html/static/search.js --minify --sourcemap + bun build src/clientjs/search.ts --target=browser --outfile=templates/html/static/search.js --minify-syntax --minify-whitespace --sourcemap bun build src/clientjs/mermaid.ts --target=browser --outfile=src/plugins/static/mermaid.js --minify --sourcemap templates/html/static/client.js: src/clientjs/* diff --git a/src/plugins/static/mermaid.js b/src/plugins/static/mermaid.js index ff23b3c..52011a2 100644 --- a/src/plugins/static/mermaid.js +++ b/src/plugins/static/mermaid.js @@ -1577,5 +1577,5 @@ js-yaml/dist/js-yaml.mjs: (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) */window.addEventListener("dj-onload",()=>{const Z=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;[...document.querySelectorAll("pre code.language-mermaid")].map((J)=>{const Q=J.parentElement;Q.innerHTML=J.innerHTML,Q.className="language-mermaid"}),z_.initialize({theme:Z?"dark":"default",darkMode:Z}),z_.run({querySelector:".language-mermaid"})}); -//# debugId=76DF0B59EA73187C64756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvY2hhbm5lbC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvbGFuZy5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvdW5pdC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY2hhbm5lbHMvdHlwZS5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY2hhbm5lbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NoYW5uZWxzL3JldXNhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb2xvci9oZXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2hzbC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY29sb3Iva2V5d29yZC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY29sb3IvcmdiLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb2xvci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9jaGFuZ2UuanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvcmdiYS5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9jaGFubmVsLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2x1bWluYW5jZS5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9pc19saWdodC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9pc19kYXJrLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2FkanVzdF9jaGFubmVsLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2xpZ2h0ZW4uanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvZGFya2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2FkanVzdC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9taXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvaW52ZXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZG9tcHVyaWZ5L2Rpc3QvcHVyaWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4Lm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstSUlLTVFMSUMubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvaWNvbi9kZWZhdWx0cy5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9jdXN0b21pc2F0aW9ucy9kZWZhdWx0cy5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9pY29uL25hbWUubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvaWNvbi90cmFuc2Zvcm1hdGlvbnMubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvaWNvbi9tZXJnZS5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9pY29uLXNldC90cmVlLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL2ljb24tc2V0L2dldC1pY29uLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL3N2Zy9zaXplLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL3N2Zy9kZWZzLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL3N2Zy9idWlsZC5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9zdmcvaWQubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvc3ZnL2h0bWwubWpzIiwgIm5vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICJub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9pbmRleC5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUwyQ0pPWVdFLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstMjNBVE1aWFYubWpzIiwgIm5vZGVfbW9kdWxlcy9AYnJhaW50cmVlL3Nhbml0aXplLXVybC9kaXN0L2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGJyYWludHJlZS9zYW5pdGl6ZS11cmwvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL251bWJlci5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvbm9kZV9tb2R1bGVzL2ludGVybm1hcC9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRvci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkcmVuLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2pvaW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vcmRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi90ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Rpc3BhdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9tYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9oY2wuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZW91dC5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbnRlcnJ1cHQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyVHdlZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlVmFyeWluZy5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vcmVtb3ZlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3RBbGwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdGV4dC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lbmQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2JydXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0TnVtZXJhbHMuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0UHJlZml4QXV0by5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9vcmRpbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYmFuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29udGludW91cy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9uaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMveWVhci5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9UYWJsZWF1MTAuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyYy5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluZS5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9idW1wLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL25vb3AuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXNDbG9zZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXNPcGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbENsb3NlZC5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbS5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tQ2xvc2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21PcGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhckNsb3NlZC5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9tb25vdG9uZS5qcyIsICJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL3N0ZXAuanMiLCAibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3RyYW5zZm9ybS5qcyIsICJub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvem9vbS5qcyIsICJub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVDcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaENsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hEZWxldGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEdldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fSGFzaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVDbGVhci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc29jSW5kZXhPZi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVEZWxldGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fTGlzdENhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUNsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXBEYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hcENhY2hlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX01hcENhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWVtb2l6ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0NsZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0YWNrU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N0YWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUJhc2VGb3IuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jbG9uZUJ1ZmZlci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19VaW50OEFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQ3JlYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2luaXRDbG9uZU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0xlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2VPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2FmZUdldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NpZ25WYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUaW1lcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1BsYWluT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNZXJnZURlZXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1lcmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9TdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlc3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstMkVEVFdEWUkubWpzIiwgIm5vZGVfbW9kdWxlcy9tYXJrZWQvbGliL21hcmtlZC5lc20uanMiLCAibm9kZV9tb2R1bGVzL3RzLWRlZGVudC9lc20vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLVpJNlYyVUUyLm1qcyIsICJub2RlX21vZHVsZXMvcm91Z2hqcy9idW5kbGVkL3JvdWdoLmVzbS5qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstUk9LWVVWQ1UubWpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RyaW1tZWRFbmRJbmRleC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVHJpbS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvTnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9GaW5pdGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b0ludGVnZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fV2Vha01hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL25vb3AuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlFYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGaW5kSW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmFOLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0cmljdEluZGV4T2YuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUluZGV4T2YuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlJbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Fzc2lnbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0tleS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tZW1vaXplQ2FwcGVkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0cmluZ1RvUGF0aC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nhc3RQYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvS2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9nZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlQdXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzRmxhdHRlbmFibGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZsYXR0ZW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mbGF0dGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZsYXRSZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTbGljZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNVbmljb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5UmVkdWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ24uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnbkluLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5RmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weVN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0U3ltYm9sc0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlTeW1ib2xzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRBbGxLZXlzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fRGF0YVZpZXcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fUHJvbWlzZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VGFnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2luaXRDbG9uZUFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lRGF0YVZpZXcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVSZWdFeHAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVTeW1ib2wuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faW5pdENsb25lQnlUYWcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNsb25lLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jbG9uZURlZXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb21wYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldENhY2hlQWRkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldENhY2hlSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1NldENhY2hlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5U29tZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jYWNoZUhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbEFycmF5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBUb0FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxCeVRhZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lcXVhbE9iamVjdHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc01hdGNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRNYXRjaERhdGEuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUhhc0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc1BhdGguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXNJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUl0ZXJhdGVlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5QWdncmVnYXRvci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRm9yT3duLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUJhc2VFYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VFYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBZ2dyZWdhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFnZ3JlZ2F0b3IuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ub3cuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9kZWZhdWx0cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRGlmZmVyZW5jZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2RpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sYXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZHJvcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Ryb3BSaWdodC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jYXN0RnVuY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JFYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZWFjaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUV2ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VFdmVyeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2V2ZXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGaWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlRmluZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZpbmRJbmRleC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZpbmQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZmlyc3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL21hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZsYXRNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Zvck93bi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2dyb3VwQnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUd0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VIYXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9oYXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdmFsdWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pbmRleE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFbXB0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNSZWdFeHAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1JlZ0V4cC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VMdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL21hcFZhbHVlcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRXh0cmVtdW0uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9taW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9taW5CeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL25lZ2F0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQaWNrQnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9waWNrQnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNvcnRCeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb21wYXJlQXNjZW5kaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvbXBhcmVNdWx0aXBsZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlT3JkZXJCeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc2NpaVNpemUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdW5pY29kZVNpemUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RyaW5nU2l6ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUGljay5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3BpY2suanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZVJhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcmFuZ2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3JlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3JlamVjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3NpemUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNvbWUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zb21lLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc29ydEJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZVNldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5pcS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3VuaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdW5pcS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3VuaXFCeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3VuaXF1ZUlkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VaaXBPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy96aXBPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9sb2Rhc2guanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9ncmFwaC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvZGF0YS9saXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvZ3JlZWR5LWZhcy5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2FjeWNsaWMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS91dGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvYWRkLWJvcmRlci1zZWdtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2Nvb3JkaW5hdGUtc3lzdGVtLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvbm9ybWFsaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvcmFuay91dGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvcmFuay9mZWFzaWJsZS10cmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2RpamtzdHJhLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2RpamtzdHJhLWFsbC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9maW5kLWN5Y2xlcy5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9mbG95ZC13YXJzaGFsbC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy90b3Bzb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2lzLWFjeWNsaWMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZGZzLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL3Bvc3RvcmRlci5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9wcmVvcmRlci5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9wcmltLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvcmFuay9uZXR3b3JrLXNpbXBsZXguanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9yYW5rL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvbmVzdGluZy1ncmFwaC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cy5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2J1aWxkLWxheWVyLWdyYXBoLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvY3Jvc3MtY291bnQuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9pbml0LW9yZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvYmFyeWNlbnRlci5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL3Jlc29sdmUtY29uZmxpY3RzLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvc29ydC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL3NvcnQtc3ViZ3JhcGguanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL3BhcmVudC1kdW1teS1jaGFpbnMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wb3NpdGlvbi9iay5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL3Bvc2l0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvbGF5b3V0LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9kYWdyZS1DNFlBNDNGMy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLVpBTlFXTkVILm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstQkZTSTJRN1IubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1GMlhGTjNCWS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLVhWT1lPTTJDLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvYzREaWFncmFtLVRIQURHS0RQLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstV1pCSUFUU0subWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1HV0hNRERIQi5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2Zsb3dEaWFncmFtLTQ0Tk9BTUtVLm1qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JlZ2V4LmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3YzNS5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3NoYTEuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NS5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9lckRpYWdyYW0tNjJDQlFWNVkubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1PUUNNNUxIVS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLTJSWVEzUVRCLm1qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvc3ludGF4LXRyZWUuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL3N0cmVhbS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvY3N0LXV0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9lcnJvcnMuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9hc3QtdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL3JlZ2V4cC10by1hc3QvbGliL3NyYy91dGlscy5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdC9saWIvc3JjL2NoYXJhY3Rlci1jbGFzc2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9yZWdleHAtdG8tYXN0L2xpYi9zcmMvcmVnZXhwLXBhcnNlci5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdC9saWIvc3JjL2Jhc2UtcmVnZXhwLXZpc2l0b3IuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL3JlZ2V4cC10by1hc3QvbGliL3NyYy9hcGkuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL3JlZ2V4cC11dGlscy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvZ3JhbW1hci11dGlscy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvbGFuZ3VhZ2VzL2dyYW1tYXItY29uZmlnLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi91dGlscy9saWIvc3JjL3ByaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi91dGlscy9saWIvc3JjL3RpbWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi91dGlscy9saWIvc3JjL3RvLWZhc3QtcHJvcGVydGllcy5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vZ2FzdC9saWIvc3JjL21vZGVsLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9nYXN0L2xpYi9zcmMvdmlzaXRvci5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vZ2FzdC9saWIvc3JjL2hlbHBlcnMuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL2dhc3QvbGliL3NyYy9hcGkuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9ncmFtbWFyL3Jlc3QuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9ncmFtbWFyL2ZpcnN0LmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9mb2xsb3cuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9zY2FuL3JlZ19leHBfcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvc2Nhbi9yZWdfZXhwLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvc2Nhbi9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3NjYW4vdG9rZW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvc2Nhbi9sZXhlcl9lcnJvcnNfcHVibGljLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvc2Nhbi9sZXhlcl9wdWJsaWMuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9zY2FuL3Rva2Vuc19wdWJsaWMuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9lcnJvcnNfcHVibGljLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9yZXNvbHZlci5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIvaW50ZXJwcmV0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9ncmFtbWFyL2xvb2thaGVhZC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIvY2hlY2tzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9nYXN0L2dhc3RfcmVzb2x2ZXJfcHVibGljLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZXhjZXB0aW9uc19wdWJsaWMuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL3JlY292ZXJhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9sbGtfbG9va2FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9sb29rc2FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvY3N0L2NzdC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL2xhbmcvbGFuZ19leHRlbnNpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvY3N0L2NzdF92aXNpdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy90cmVlX2J1aWxkZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL2xleGVyX2FkYXB0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL3JlY29nbml6ZXJfYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9yZWNvZ25pemVyX2VuZ2luZS5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci90cmFpdHMvZXJyb3JfaGFuZGxlci5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci90cmFpdHMvY29udGV4dF9hc3Npc3QuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL2dhc3RfcmVjb3JkZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL3BlcmZfdHJhY2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3V0aWxzL2FwcGx5X21peGlucy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL2NzdC1kdHMtZ2VuL2xpYi9zcmMvbW9kZWwuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL2NzdC1kdHMtZ2VuL2xpYi9zcmMvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluLWFsbHN0YXIvbGliL2F0bi5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi1hbGxzdGFyL2xpYi9kZmEuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4tYWxsc3Rhci9saWIvYWxsLXN0YXItbG9va2FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluLWFsbHN0YXIvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy92c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMvbGliL2VzbS9tYWluLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvY3N0LW5vZGUtYnVpbGRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL2xhbmdpdW0tcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvcGFyc2VyLWJ1aWxkZXItYmFzZS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL2NvbXBsZXRpb24tcGFyc2VyLWJ1aWxkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3BhcnNlci9sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvdG9rZW4tYnVpbGRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL3ZhbHVlLWNvbnZlcnRlci5qcyIsICJub2RlX21vZHVsZXMvdnNjb2RlLWpzb25ycGMvbGliL2NvbW1vbi9yYWwuanMiLCAibm9kZV9tb2R1bGVzL3ZzY29kZS1qc29ucnBjL2xpYi9jb21tb24vaXMuanMiLCAibm9kZV9tb2R1bGVzL3ZzY29kZS1qc29ucnBjL2xpYi9jb21tb24vZXZlbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy92c2NvZGUtanNvbnJwYy9saWIvY29tbW9uL2NhbmNlbGxhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvY2FuY2VsbGF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9wcm9taXNlLXV0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy92c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdGV4dGRvY3VtZW50L2xpYi9lc20vbWFpbi5qcyIsICJub2RlX21vZHVsZXMvdnNjb2RlLXVyaS9saWIvZXNtL2luZGV4Lm1qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvdXJpLXV0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2UvZG9jdW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9yZWZlcmVuY2VzL2xpbmtlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcmVmZXJlbmNlcy9uYW1lLXByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2NvbGxlY3Rpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9yZWZlcmVuY2VzL3Njb3BlLWNvbXB1dGF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9yZWZlcmVuY2VzL3Njb3BlLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9jYWNoaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9yZWZlcmVuY2VzL3Njb3BlLXByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9zZXJpYWxpemVyL2pzb24tc2VyaWFsaXplci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvc2VydmljZS1yZWdpc3RyeS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdmFsaWRhdGlvbi92YWxpZGF0aW9uLXJlZ2lzdHJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi92YWxpZGF0aW9uL2RvY3VtZW50LXZhbGlkYXRvci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL2FzdC1kZXNjcmlwdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3dvcmtzcGFjZS9hc3Qtbm9kZS1sb2NhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2UvY29uZmlndXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvZGlzcG9zYWJsZS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL2RvY3VtZW50LWJ1aWxkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3dvcmtzcGFjZS9pbmRleC1tYW5hZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2Uvd29ya3NwYWNlLW1hbmFnZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3BhcnNlci9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvZG9jdW1lbnRhdGlvbi9qc2RvYy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvZG9jdW1lbnRhdGlvbi9kb2N1bWVudGF0aW9uLXByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9kb2N1bWVudGF0aW9uL2NvbW1lbnQtcHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvYXN5bmMtcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2Uvd29ya3NwYWNlLWxvY2suanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3NlcmlhbGl6ZXIvaHlkcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2RlZmF1bHQtbW9kdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9kZXBlbmRlbmN5LWluamVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvZG9jdW1lbnRhdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvbGFuZ3VhZ2VzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3JlZmVyZW5jZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3NlcmlhbGl6ZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3dvcmtzcGFjZS9maWxlLXN5c3RlbS1wcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvZ3JhbW1hci1sb2FkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi92YWxpZGF0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2UvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9AbWVybWFpZC1qcy9wYXJzZXIvZGlzdC9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1ZMjdNUVozVS5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLU5DTUZUVFVXLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvY2h1bmstNFlGQjVWVUMubWpzIiwgIm5vZGVfbW9kdWxlcy9AbWVybWFpZC1qcy9wYXJzZXIvZGlzdC9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1FUUZMRk1ORS5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLUJJNkVRS09RLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvY2h1bmstRkY3QlFYT0gubWpzIiwgIm5vZGVfbW9kdWxlcy9AbWVybWFpZC1qcy9wYXJzZXIvZGlzdC9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9pbmZvLTQ2RFc2Vko3Lm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvcGFja2V0LVcyR0hWQ1lKLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvcGllLUJFV1Q0UkhFLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvYXJjaGl0ZWN0dXJlLUkzUUZZTUwyLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvZ2l0R3JhcGgtWUNZUEw1N0IubWpzIiwgIm5vZGVfbW9kdWxlcy9AbWVybWFpZC1qcy9wYXJzZXIvZGlzdC9tZXJtYWlkLXBhcnNlci5jb3JlLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvZ2l0R3JhcGhEaWFncmFtLVVMNVVGS0RSLm1qcyIsICJub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzb1dlZWsuanMiLCAibm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdC5qcyIsICJub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2FkdmFuY2VkRm9ybWF0LmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9nYW50dERpYWdyYW0tQVNFSVE0UDUubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9pbmZvRGlhZ3JhbS1ZR0pUUDZBQS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3BpZURpYWdyYW0tT1pYNlhINU0ubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9xdWFkcmFudERpYWdyYW0tVkczNERHS0MubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS94eWNoYXJ0RGlhZ3JhbS1UTVQ3TkxCTi5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3JlcXVpcmVtZW50RGlhZ3JhbS1GUFpCNklKSS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3NlcXVlbmNlRGlhZ3JhbS1LN1U3VTJQVS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUJBVk9HS0ZXLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2xhc3NEaWFncmFtLTRCSFlJSzRJLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstTUtBSUZLVzUubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jbGFzc0RpYWdyYW0tdjItU1BZNlYzMk8ubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1OUUY3TUpBTy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3N0YXRlRGlhZ3JhbS1XRzc2RVdQSy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3N0YXRlRGlhZ3JhbS12Mi1LUjRYVFFMVy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2pvdXJuZXlEaWFncmFtLUc1TEM3VzJLLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvdGltZWxpbmUtZGVmaW5pdGlvbi1LWVFBSVpVWC5tanMiLCAibm9kZV9tb2R1bGVzL2N5dG9zY2FwZS9kaXN0L2N5dG9zY2FwZS5lc20ubWpzIiwgIm5vZGVfbW9kdWxlcy9sYXlvdXQtYmFzZS9sYXlvdXQtYmFzZS5qcyIsICJub2RlX21vZHVsZXMvY29zZS1iYXNlL2Nvc2UtYmFzZS5qcyIsICJub2RlX21vZHVsZXMvY3l0b3NjYXBlLWNvc2UtYmlsa2VudC9jeXRvc2NhcGUtY29zZS1iaWxrZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9taW5kbWFwLWRlZmluaXRpb24tMjZGV0VFN0gubWpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvc3JjL2FsaWduLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvc3JjL2NvbnN0YW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvc3JjL3NhbmtleS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmsvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvc3JjL3NhbmtleUxpbmtIb3Jpem9udGFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9zYW5rZXlEaWFncmFtLUtNTVFETDVLLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvZGlhZ3JhbS1RUzVHVkxVWC5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2Jsb2NrRGlhZ3JhbS1TTEVZTlVOTi5tanMiLCAibm9kZV9tb2R1bGVzL2N5dG9zY2FwZS1mY29zZS9ub2RlX21vZHVsZXMvY29zZS1iYXNlL25vZGVfbW9kdWxlcy9sYXlvdXQtYmFzZS9sYXlvdXQtYmFzZS5qcyIsICJub2RlX21vZHVsZXMvY3l0b3NjYXBlLWZjb3NlL25vZGVfbW9kdWxlcy9jb3NlLWJhc2UvY29zZS1iYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jeXRvc2NhcGUtZmNvc2UvY3l0b3NjYXBlLWZjb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9hcmNoaXRlY3R1cmVEaWFncmFtLVdRR0xLQ1NDLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L21lcm1haWQuY29yZS5tanMiLCAibm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICJzcmMvY2xpZW50anMvbWVybWFpZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsCiAgICAiLyogSU1QT1JUICovXG4vKiBNQUlOICovXG5jb25zdCBDaGFubmVsID0ge1xuICAgIC8qIENMQU1QICovXG4gICAgbWluOiB7XG4gICAgICAgIHI6IDAsXG4gICAgICAgIGc6IDAsXG4gICAgICAgIGI6IDAsXG4gICAgICAgIHM6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGE6IDBcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgICByOiAyNTUsXG4gICAgICAgIGc6IDI1NSxcbiAgICAgICAgYjogMjU1LFxuICAgICAgICBoOiAzNjAsXG4gICAgICAgIHM6IDEwMCxcbiAgICAgICAgbDogMTAwLFxuICAgICAgICBhOiAxXG4gICAgfSxcbiAgICBjbGFtcDoge1xuICAgICAgICByOiAocikgPT4gciA+PSAyNTUgPyAyNTUgOiAociA8IDAgPyAwIDogciksXG4gICAgICAgIGc6IChnKSA9PiBnID49IDI1NSA/IDI1NSA6IChnIDwgMCA/IDAgOiBnKSxcbiAgICAgICAgYjogKGIpID0+IGIgPj0gMjU1ID8gMjU1IDogKGIgPCAwID8gMCA6IGIpLFxuICAgICAgICBoOiAoaCkgPT4gaCAlIDM2MCxcbiAgICAgICAgczogKHMpID0+IHMgPj0gMTAwID8gMTAwIDogKHMgPCAwID8gMCA6IHMpLFxuICAgICAgICBsOiAobCkgPT4gbCA+PSAxMDAgPyAxMDAgOiAobCA8IDAgPyAwIDogbCksXG4gICAgICAgIGE6IChhKSA9PiBhID49IDEgPyAxIDogKGEgPCAwID8gMCA6IGEpXG4gICAgfSxcbiAgICAvKiBDT05WRVJTSU9OICovXG4gICAgLy9TT1VSQ0U6IGh0dHBzOi8vcGxhbmV0Y2FsYy5jb20vNzc3OVxuICAgIHRvTGluZWFyOiAoYykgPT4ge1xuICAgICAgICBjb25zdCBuID0gYyAvIDI1NTtcbiAgICAgICAgcmV0dXJuIGMgPiAuMDM5MjggPyBNYXRoLnBvdygoKG4gKyAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IG4gLyAxMi45MjtcbiAgICB9LFxuICAgIC8vU09VUkNFOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamFja3Nvbi81MzExMjU2XG4gICAgaHVlMnJnYjogKHAsIHEsIHQpID0+IHtcbiAgICAgICAgaWYgKHQgPCAwKVxuICAgICAgICAgICAgdCArPSAxO1xuICAgICAgICBpZiAodCA+IDEpXG4gICAgICAgICAgICB0IC09IDE7XG4gICAgICAgIGlmICh0IDwgMSAvIDYpXG4gICAgICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICAgICAgaWYgKHQgPCAxIC8gMilcbiAgICAgICAgICAgIHJldHVybiBxO1xuICAgICAgICBpZiAodCA8IDIgLyAzKVxuICAgICAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIGhzbDJyZ2I6ICh7IGgsIHMsIGwgfSwgY2hhbm5lbCkgPT4ge1xuICAgICAgICBpZiAoIXMpXG4gICAgICAgICAgICByZXR1cm4gbCAqIDIuNTU7IC8vIEFjaHJvbWF0aWNcbiAgICAgICAgaCAvPSAzNjA7XG4gICAgICAgIHMgLz0gMTAwO1xuICAgICAgICBsIC89IDEwMDtcbiAgICAgICAgY29uc3QgcSA9IChsIDwgLjUpID8gbCAqICgxICsgcykgOiAobCArIHMpIC0gKGwgKiBzKTtcbiAgICAgICAgY29uc3QgcCA9IDIgKiBsIC0gcTtcbiAgICAgICAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgICAgICAgICBjYXNlICdyJzogcmV0dXJuIENoYW5uZWwuaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpICogMjU1O1xuICAgICAgICAgICAgY2FzZSAnZyc6IHJldHVybiBDaGFubmVsLmh1ZTJyZ2IocCwgcSwgaCkgKiAyNTU7XG4gICAgICAgICAgICBjYXNlICdiJzogcmV0dXJuIENoYW5uZWwuaHVlMnJnYihwLCBxLCBoIC0gMSAvIDMpICogMjU1O1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZ2IyaHNsOiAoeyByLCBnLCBiIH0sIGNoYW5uZWwpID0+IHtcbiAgICAgICAgciAvPSAyNTU7XG4gICAgICAgIGcgLz0gMjU1O1xuICAgICAgICBiIC89IDI1NTtcbiAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICBjb25zdCBsID0gKG1heCArIG1pbikgLyAyO1xuICAgICAgICBpZiAoY2hhbm5lbCA9PT0gJ2wnKVxuICAgICAgICAgICAgcmV0dXJuIGwgKiAxMDA7XG4gICAgICAgIGlmIChtYXggPT09IG1pbilcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBBY2hyb21hdGljXG4gICAgICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgICAgIGNvbnN0IHMgPSAobCA+IC41KSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICAgIGlmIChjaGFubmVsID09PSAncycpXG4gICAgICAgICAgICByZXR1cm4gcyAqIDEwMDtcbiAgICAgICAgc3dpdGNoIChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogcmV0dXJuICgoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKSkgKiA2MDtcbiAgICAgICAgICAgIGNhc2UgZzogcmV0dXJuICgoYiAtIHIpIC8gZCArIDIpICogNjA7XG4gICAgICAgICAgICBjYXNlIGI6IHJldHVybiAoKHIgLSBnKSAvIGQgKyA0KSAqIDYwO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIC0xOyAvL1RTQzogVHlwZVNjcmlwdCBpcyBzdHVwaWQgYW5kIGNvbXBsYWlucyBpZiB0aGVyZSBpc24ndCB0aGlzIHVzZWxlc3MgZGVmYXVsdCBzdGF0ZW1lbnRcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWw7XG4iLAogICAgIi8qIE1BSU4gKi9cbmNvbnN0IExhbmcgPSB7XG4gICAgLyogQVBJICovXG4gICAgY2xhbXA6IChudW1iZXIsIGxvd2VyLCB1cHBlcikgPT4ge1xuICAgICAgICBpZiAobG93ZXIgPiB1cHBlcilcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihsb3dlciwgTWF0aC5tYXgodXBwZXIsIG51bWJlcikpO1xuICAgICAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCBudW1iZXIpKTtcbiAgICB9LFxuICAgIHJvdW5kOiAobnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlciAqIDEwMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAwO1xuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IExhbmc7XG4iLAogICAgIi8qIE1BSU4gKi9cbmNvbnN0IFVuaXQgPSB7XG4gICAgLyogQVBJICovXG4gICAgZGVjMmhleDogKGRlYykgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBNYXRoLnJvdW5kKGRlYykudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA+IDEgPyBoZXggOiBgMCR7aGV4fWA7XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVW5pdDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgY2hhbm5lbCBmcm9tICcuL2NoYW5uZWwuanMnO1xuaW1wb3J0IGxhbmcgZnJvbSAnLi9sYW5nLmpzJztcbmltcG9ydCB1bml0IGZyb20gJy4vdW5pdC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBVdGlscyA9IHtcbiAgICBjaGFubmVsLFxuICAgIGxhbmcsXG4gICAgdW5pdFxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVXRpbHM7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBERUMySEVYID0ge307XG5mb3IgKGxldCBpID0gMDsgaSA8PSAyNTU7IGkrKylcbiAgICBERUMySEVYW2ldID0gXy51bml0LmRlYzJoZXgoaSk7IC8vIFBvcHVsYXRpbmcgZHluYW1pY2FsbHksIHN0cmlraW5nIGEgYmFsYW5jZSBiZXR3ZWVuIGNvZGUgc2l6ZSBhbmQgcGVyZm9ybWFuY2VcbmNvbnN0IFRZUEUgPSB7XG4gICAgQUxMOiAwLFxuICAgIFJHQjogMSxcbiAgICBIU0w6IDJcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IERFQzJIRVgsIFRZUEUgfTtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgeyBUWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcbi8qIE1BSU4gKi9cbmNsYXNzIFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICAgICAgdGhpcy50eXBlID0gVFlQRS5BTEw7XG4gICAgfVxuICAgIC8qIEFQSSAqL1xuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG4gICAgc2V0KHR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAmJiB0aGlzLnR5cGUgIT09IHR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnR5cGUgPSBUWVBFLkFMTDtcbiAgICB9XG4gICAgaXModHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSB0eXBlO1xuICAgIH1cbn1cbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVHlwZTtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgVHlwZSBmcm9tICcuL3R5cGUuanMnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG5jbGFzcyBDaGFubmVscyB7XG4gICAgLyogQ09OU1RSVUNUT1IgKi9cbiAgICBjb25zdHJ1Y3RvcihkYXRhLCBjb2xvcikge1xuICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOyAvL1RTQ1xuICAgICAgICB0aGlzLnR5cGUgPSBuZXcgVHlwZSgpO1xuICAgIH1cbiAgICAvKiBBUEkgKi9cbiAgICBzZXQoZGF0YSwgY29sb3IpIHtcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsgLy9UU0NcbiAgICAgICAgdGhpcy50eXBlLnR5cGUgPSBUWVBFLkFMTDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qIEhFTFBFUlMgKi9cbiAgICBfZW5zdXJlSFNMKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwgfSA9IGRhdGE7XG4gICAgICAgIGlmIChoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkYXRhLmggPSBfLmNoYW5uZWwucmdiMmhzbChkYXRhLCAnaCcpO1xuICAgICAgICBpZiAocyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZGF0YS5zID0gXy5jaGFubmVsLnJnYjJoc2woZGF0YSwgJ3MnKTtcbiAgICAgICAgaWYgKGwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGRhdGEubCA9IF8uY2hhbm5lbC5yZ2IyaHNsKGRhdGEsICdsJyk7XG4gICAgfVxuICAgIF9lbnN1cmVSR0IoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IHsgciwgZywgYiB9ID0gZGF0YTtcbiAgICAgICAgaWYgKHIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGRhdGEuciA9IF8uY2hhbm5lbC5oc2wycmdiKGRhdGEsICdyJyk7XG4gICAgICAgIGlmIChnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkYXRhLmcgPSBfLmNoYW5uZWwuaHNsMnJnYihkYXRhLCAnZycpO1xuICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZGF0YS5iID0gXy5jaGFubmVsLmhzbDJyZ2IoZGF0YSwgJ2InKTtcbiAgICB9XG4gICAgLyogR0VUVEVSUyAqL1xuICAgIGdldCByKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCByID0gZGF0YS5yO1xuICAgICAgICBpZiAoIXRoaXMudHlwZS5pcyhUWVBFLkhTTCkgJiYgciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUhTTCgpO1xuICAgICAgICByZXR1cm4gXy5jaGFubmVsLmhzbDJyZ2IoZGF0YSwgJ3InKTtcbiAgICB9XG4gICAgZ2V0IGcoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IGcgPSBkYXRhLmc7XG4gICAgICAgIGlmICghdGhpcy50eXBlLmlzKFRZUEUuSFNMKSAmJiBnICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gZztcbiAgICAgICAgdGhpcy5fZW5zdXJlSFNMKCk7XG4gICAgICAgIHJldHVybiBfLmNoYW5uZWwuaHNsMnJnYihkYXRhLCAnZycpO1xuICAgIH1cbiAgICBnZXQgYigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgYiA9IGRhdGEuYjtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUuaXMoVFlQRS5IU0wpICYmIGIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB0aGlzLl9lbnN1cmVIU0woKTtcbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5oc2wycmdiKGRhdGEsICdiJyk7XG4gICAgfVxuICAgIGdldCBoKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCBoID0gZGF0YS5oO1xuICAgICAgICBpZiAoIXRoaXMudHlwZS5pcyhUWVBFLlJHQikgJiYgaCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIGg7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVJHQigpO1xuICAgICAgICByZXR1cm4gXy5jaGFubmVsLnJnYjJoc2woZGF0YSwgJ2gnKTtcbiAgICB9XG4gICAgZ2V0IHMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IHMgPSBkYXRhLnM7XG4gICAgICAgIGlmICghdGhpcy50eXBlLmlzKFRZUEUuUkdCKSAmJiBzICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgdGhpcy5fZW5zdXJlUkdCKCk7XG4gICAgICAgIHJldHVybiBfLmNoYW5uZWwucmdiMmhzbChkYXRhLCAncycpO1xuICAgIH1cbiAgICBnZXQgbCgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgbCA9IGRhdGEubDtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUuaXMoVFlQRS5SR0IpICYmIGwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICB0aGlzLl9lbnN1cmVSR0IoKTtcbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5yZ2IyaHNsKGRhdGEsICdsJyk7XG4gICAgfVxuICAgIGdldCBhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmE7XG4gICAgfVxuICAgIC8qIFNFVFRFUlMgKi9cbiAgICBzZXQgcihyKSB7XG4gICAgICAgIHRoaXMudHlwZS5zZXQoVFlQRS5SR0IpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEuciA9IHI7XG4gICAgfVxuICAgIHNldCBnKGcpIHtcbiAgICAgICAgdGhpcy50eXBlLnNldChUWVBFLlJHQik7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5nID0gZztcbiAgICB9XG4gICAgc2V0IGIoYikge1xuICAgICAgICB0aGlzLnR5cGUuc2V0KFRZUEUuUkdCKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhLmIgPSBiO1xuICAgIH1cbiAgICBzZXQgaChoKSB7XG4gICAgICAgIHRoaXMudHlwZS5zZXQoVFlQRS5IU0wpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEuaCA9IGg7XG4gICAgfVxuICAgIHNldCBzKHMpIHtcbiAgICAgICAgdGhpcy50eXBlLnNldChUWVBFLkhTTCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5zID0gcztcbiAgICB9XG4gICAgc2V0IGwobCkge1xuICAgICAgICB0aGlzLnR5cGUuc2V0KFRZUEUuSFNMKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhLmwgPSBsO1xuICAgIH1cbiAgICBzZXQgYShhKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5hID0gYTtcbiAgICB9XG59XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxzO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBDaGFubmVscyBmcm9tICcuLy9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBjaGFubmVscyA9IG5ldyBDaGFubmVscyh7IHI6IDAsIGc6IDAsIGI6IDAsIGE6IDAgfSwgJ3RyYW5zcGFyZW50Jyk7XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGNoYW5uZWxzO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDaGFubmVsc1JldXNhYmxlIGZyb20gJy4uL2NoYW5uZWxzL3JldXNhYmxlLmpzJztcbmltcG9ydCB7IERFQzJIRVggfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgSGV4ID0ge1xuICAgIC8qIFZBUklBQkxFUyAqL1xuICAgIHJlOiAvXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgaWYgKGNvbG9yLmNoYXJDb2RlQXQoMCkgIT09IDM1KVxuICAgICAgICAgICAgcmV0dXJuOyAvLyAnIydcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb2xvci5tYXRjaChIZXgucmUpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBoZXggPSBtYXRjaFsxXTtcbiAgICAgICAgY29uc3QgZGVjID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGhleC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGhhc0FscGhhID0gbGVuZ3RoICUgNCA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNGdWxsTGVuZ3RoID0gbGVuZ3RoID4gNDtcbiAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IGlzRnVsbExlbmd0aCA/IDEgOiAxNztcbiAgICAgICAgY29uc3QgYml0cyA9IGlzRnVsbExlbmd0aCA/IDggOiA0O1xuICAgICAgICBjb25zdCBiaXRzT2Zmc2V0ID0gaGFzQWxwaGEgPyAwIDogLTE7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBpc0Z1bGxMZW5ndGggPyAyNTUgOiAxNTtcbiAgICAgICAgcmV0dXJuIENoYW5uZWxzUmV1c2FibGUuc2V0KHtcbiAgICAgICAgICAgIHI6ICgoZGVjID4+IChiaXRzICogKGJpdHNPZmZzZXQgKyAzKSkpICYgbWFzaykgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgZzogKChkZWMgPj4gKGJpdHMgKiAoYml0c09mZnNldCArIDIpKSkgJiBtYXNrKSAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICBiOiAoKGRlYyA+PiAoYml0cyAqIChiaXRzT2Zmc2V0ICsgMSkpKSAmIG1hc2spICogbXVsdGlwbGllcixcbiAgICAgICAgICAgIGE6IGhhc0FscGhhID8gKGRlYyAmIG1hc2spICogbXVsdGlwbGllciAvIDI1NSA6IDFcbiAgICAgICAgfSwgY29sb3IpO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5OiAoY2hhbm5lbHMpID0+IHtcbiAgICAgICAgY29uc3QgeyByLCBnLCBiLCBhIH0gPSBjaGFubmVscztcbiAgICAgICAgaWYgKGEgPCAxKSB7IC8vICNSUkdHQkJBQVxuICAgICAgICAgICAgcmV0dXJuIGAjJHtERUMySEVYW01hdGgucm91bmQocildfSR7REVDMkhFWFtNYXRoLnJvdW5kKGcpXX0ke0RFQzJIRVhbTWF0aC5yb3VuZChiKV19JHtERUMySEVYW01hdGgucm91bmQoYSAqIDI1NSldfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vICNSUkdHQkJcbiAgICAgICAgICAgIHJldHVybiBgIyR7REVDMkhFWFtNYXRoLnJvdW5kKHIpXX0ke0RFQzJIRVhbTWF0aC5yb3VuZChnKV19JHtERUMySEVYW01hdGgucm91bmQoYildfWA7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBIZXg7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgSFNMID0ge1xuICAgIC8qIFZBUklBQkxFUyAqL1xuICAgIHJlOiAvXmhzbGE/XFwoXFxzKj8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmUtP1xcZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZS0/XFxkKyk/JSlcXHMqPyg/Oix8XFxzKVxccyo/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplLT9cXGQrKT8lKSg/Olxccyo/KD86LHxcXC8pXFxzKj9cXCs/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplLT9cXGQrKT8oJSk/KSk/XFxzKj9cXCkkL2ksXG4gICAgaHVlUmU6IC9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLFxuICAgIC8qIEhFTFBFUlMgKi9cbiAgICBfaHVlMmRlZzogKGh1ZSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGh1ZS5tYXRjaChIU0wuaHVlUmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIG51bWJlciwgdW5pdF0gPSBtYXRjaDtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2dyYWQnOiByZXR1cm4gXy5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChudW1iZXIpICogLjkpO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhZCc6IHJldHVybiBfLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KG51bWJlcikgKiAxODAgLyBNYXRoLlBJKTtcbiAgICAgICAgICAgICAgICBjYXNlICd0dXJuJzogcmV0dXJuIF8uY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQobnVtYmVyKSAqIDM2MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoaHVlKSk7XG4gICAgfSxcbiAgICAvKiBBUEkgKi9cbiAgICBwYXJzZTogKGNvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gY29sb3IuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYgKGNoYXJDb2RlICE9PSAxMDQgJiYgY2hhckNvZGUgIT09IDcyKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyAnaCcvJ0gnXG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29sb3IubWF0Y2goSFNMLnJlKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgWywgaCwgcywgbCwgYSwgaXNBbHBoYVBlcmNlbnRhZ2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBDaGFubmVsc1JldXNhYmxlLnNldCh7XG4gICAgICAgICAgICBoOiBIU0wuX2h1ZTJkZWcoaCksXG4gICAgICAgICAgICBzOiBfLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxcbiAgICAgICAgICAgIGw6IF8uY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQobCkpLFxuICAgICAgICAgICAgYTogYSA/IF8uY2hhbm5lbC5jbGFtcC5hKGlzQWxwaGFQZXJjZW50YWdlID8gcGFyc2VGbG9hdChhKSAvIDEwMCA6IHBhcnNlRmxvYXQoYSkpIDogMVxuICAgICAgICB9LCBjb2xvcik7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwsIGEgfSA9IGNoYW5uZWxzO1xuICAgICAgICBpZiAoYSA8IDEpIHsgLy8gSFNMQVxuICAgICAgICAgICAgcmV0dXJuIGBoc2xhKCR7Xy5sYW5nLnJvdW5kKGgpfSwgJHtfLmxhbmcucm91bmQocyl9JSwgJHtfLmxhbmcucm91bmQobCl9JSwgJHthfSlgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBIU0xcbiAgICAgICAgICAgIHJldHVybiBgaHNsKCR7Xy5sYW5nLnJvdW5kKGgpfSwgJHtfLmxhbmcucm91bmQocyl9JSwgJHtfLmxhbmcucm91bmQobCl9JSlgO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgSFNMO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBIZXggZnJvbSAnLi9oZXguanMnO1xuLyogTUFJTiAqL1xuY29uc3QgS2V5d29yZCA9IHtcbiAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICBjb2xvcnM6IHtcbiAgICAgICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgICAgIGFudGlxdWV3aGl0ZTogJyNmYWViZDcnLFxuICAgICAgICBhcXVhOiAnIzAwZmZmZicsXG4gICAgICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICAgICAgYXp1cmU6ICcjZjBmZmZmJyxcbiAgICAgICAgYmVpZ2U6ICcjZjVmNWRjJyxcbiAgICAgICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgICAgIGJsYWNrOiAnIzAwMDAwMCcsXG4gICAgICAgIGJsYW5jaGVkYWxtb25kOiAnI2ZmZWJjZCcsXG4gICAgICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICAgICAgYmx1ZXZpb2xldDogJyM4YTJiZTInLFxuICAgICAgICBicm93bjogJyNhNTJhMmEnLFxuICAgICAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICAgICAgY2FkZXRibHVlOiAnIzVmOWVhMCcsXG4gICAgICAgIGNoYXJ0cmV1c2U6ICcjN2ZmZjAwJyxcbiAgICAgICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgICAgIGNvcmFsOiAnI2ZmN2Y1MCcsXG4gICAgICAgIGNvcm5mbG93ZXJibHVlOiAnIzY0OTVlZCcsXG4gICAgICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICAgICAgY3lhbmFxdWE6ICcjMDBmZmZmJyxcbiAgICAgICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICAgICAgZGFya2N5YW46ICcjMDA4YjhiJyxcbiAgICAgICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgICAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgICAgICBkYXJrZ3JlZW46ICcjMDA2NDAwJyxcbiAgICAgICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgICAgIGRhcmttYWdlbnRhOiAnIzhiMDA4YicsXG4gICAgICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICAgICAgZGFya29yY2hpZDogJyM5OTMyY2MnLFxuICAgICAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICAgICAgZGFya3NlYWdyZWVuOiAnIzhmYmM4ZicsXG4gICAgICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICAgICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrc2xhdGVncmV5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICAgICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgICAgICBkZWVwcGluazogJyNmZjE0OTMnLFxuICAgICAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgICAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgICAgIGRpbWdyZXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgICAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICAgICAgZmxvcmFsd2hpdGU6ICcjZmZmYWYwJyxcbiAgICAgICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICAgICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgICAgICBnYWluc2Jvcm86ICcjZGNkY2RjJyxcbiAgICAgICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgICAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgICAgIGdvbGRlbnJvZDogJyNkYWE1MjAnLFxuICAgICAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgICAgIGdyZWVueWVsbG93OiAnI2FkZmYyZicsXG4gICAgICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICAgICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICAgICAgaG90cGluazogJyNmZjY5YjQnLFxuICAgICAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICAgICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgICAgIGl2b3J5OiAnI2ZmZmZmMCcsXG4gICAgICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICAgICAgbGF3bmdyZWVuOiAnIzdjZmMwMCcsXG4gICAgICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgICAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICAgICAgbGlnaHRjb3JhbDogJyNmMDgwODAnLFxuICAgICAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICAgICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ICcjZmFmYWQyJyxcbiAgICAgICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICAgICAgbGlnaHRncmV5OiAnI2QzZDNkMycsXG4gICAgICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgICAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgICAgICBsaWdodHNlYWdyZWVuOiAnIzIwYjJhYScsXG4gICAgICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgICAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgICAgICBsaWdodHNsYXRlZ3JleTogJyM3Nzg4OTknLFxuICAgICAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgICAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgICAgICBsaW1lOiAnIzAwZmYwMCcsXG4gICAgICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgICAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgICAgICBtYWdlbnRhOiAnI2ZmMDBmZicsXG4gICAgICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgICAgICBtZWRpdW1hcXVhbWFyaW5lOiAnIzY2Y2RhYScsXG4gICAgICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICAgICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgICAgIG1lZGl1bXB1cnBsZTogJyM5MzcwZGInLFxuICAgICAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgICAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICcjMDBmYTlhJyxcbiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgICAgICBtaWRuaWdodGJsdWU6ICcjMTkxOTcwJyxcbiAgICAgICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgICAgICBtb2NjYXNpbjogJyNmZmU0YjUnLFxuICAgICAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgICAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgICAgIG9sZGxhY2U6ICcjZmRmNWU2JyxcbiAgICAgICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICAgICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgICAgIG9yYW5nZTogJyNmZmE1MDAnLFxuICAgICAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICAgICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgICAgIHBhbGVnb2xkZW5yb2Q6ICcjZWVlOGFhJyxcbiAgICAgICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICAgICAgcGFsZXZpb2xldHJlZDogJyNkYjcwOTMnLFxuICAgICAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgICAgICBwZXJ1OiAnI2NkODUzZicsXG4gICAgICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICAgICAgcGx1bTogJyNkZGEwZGQnLFxuICAgICAgICBwb3dkZXJibHVlOiAnI2IwZTBlNicsXG4gICAgICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgICAgICByZWJlY2NhcHVycGxlOiAnIzY2MzM5OScsXG4gICAgICAgIHJlZDogJyNmZjAwMDAnLFxuICAgICAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICAgICAgcm95YWxibHVlOiAnIzQxNjllMScsXG4gICAgICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgICAgICBzYW5keWJyb3duOiAnI2Y0YTQ2MCcsXG4gICAgICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgICAgIHNpZW5uYTogJyNhMDUyMmQnLFxuICAgICAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICAgICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgICAgICBzbGF0ZWJsdWU6ICcjNmE1YWNkJyxcbiAgICAgICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgICAgICBzbm93OiAnI2ZmZmFmYScsXG4gICAgICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgICAgIHRhbjogJyNkMmI0OGMnLFxuICAgICAgICB0ZWFsOiAnIzAwODA4MCcsXG4gICAgICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICAgICAgdHJhbnNwYXJlbnQ6ICcjMDAwMDAwMDAnLFxuICAgICAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICAgICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgICAgIHdoZWF0OiAnI2Y1ZGViMycsXG4gICAgICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICAgICAgeWVsbG93OiAnI2ZmZmYwMCcsXG4gICAgICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbiAgICB9LFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgY29sb3IgPSBjb2xvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBoZXggPSBLZXl3b3JkLmNvbG9yc1tjb2xvcl07XG4gICAgICAgIGlmICghaGV4KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gSGV4LnBhcnNlKGhleCk7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBIZXguc3RyaW5naWZ5KGNoYW5uZWxzKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIEtleXdvcmQuY29sb3JzKSB7XG4gICAgICAgICAgICBpZiAoS2V5d29yZC5jb2xvcnNbbmFtZV0gPT09IGhleClcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgS2V5d29yZDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgQ2hhbm5lbHNSZXVzYWJsZSBmcm9tICcuLi9jaGFubmVscy9yZXVzYWJsZS5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBSR0IgPSB7XG4gICAgLyogVkFSSUFCTEVTICovXG4gICAgcmU6IC9ecmdiYT9cXChcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZVxcZCspPyglPykpXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZVxcZCspPyglPykpXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZVxcZCspPyglPykpKD86XFxzKj8oPzosfFxcLylcXHMqP1xcKz8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmVcXGQrKT8oJT8pKSk/XFxzKj9cXCkkL2ksXG4gICAgLyogQVBJICovXG4gICAgcGFyc2U6IChjb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBjaGFyQ29kZSA9IGNvbG9yLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmIChjaGFyQ29kZSAhPT0gMTE0ICYmIGNoYXJDb2RlICE9PSA4MilcbiAgICAgICAgICAgIHJldHVybjsgLy8gJ3InLydSJ1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbG9yLm1hdGNoKFJHQi5yZSk7XG4gICAgICAgIGlmICghbWF0Y2gpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IFssIHIsIGlzUmVkUGVyY2VudGFnZSwgZywgaXNHcmVlblBlcmNlbnRhZ2UsIGIsIGlzQmx1ZVBlcmNlbnRhZ2UsIGEsIGlzQWxwaGFQZXJjZW50YWdlXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gQ2hhbm5lbHNSZXVzYWJsZS5zZXQoe1xuICAgICAgICAgICAgcjogXy5jaGFubmVsLmNsYW1wLnIoaXNSZWRQZXJjZW50YWdlID8gcGFyc2VGbG9hdChyKSAqIDIuNTUgOiBwYXJzZUZsb2F0KHIpKSxcbiAgICAgICAgICAgIGc6IF8uY2hhbm5lbC5jbGFtcC5nKGlzR3JlZW5QZXJjZW50YWdlID8gcGFyc2VGbG9hdChnKSAqIDIuNTUgOiBwYXJzZUZsb2F0KGcpKSxcbiAgICAgICAgICAgIGI6IF8uY2hhbm5lbC5jbGFtcC5iKGlzQmx1ZVBlcmNlbnRhZ2UgPyBwYXJzZUZsb2F0KGIpICogMi41NSA6IHBhcnNlRmxvYXQoYikpLFxuICAgICAgICAgICAgYTogYSA/IF8uY2hhbm5lbC5jbGFtcC5hKGlzQWxwaGFQZXJjZW50YWdlID8gcGFyc2VGbG9hdChhKSAvIDEwMCA6IHBhcnNlRmxvYXQoYSkpIDogMVxuICAgICAgICB9LCBjb2xvcik7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCB7IHIsIGcsIGIsIGEgfSA9IGNoYW5uZWxzO1xuICAgICAgICBpZiAoYSA8IDEpIHsgLy8gUkdCQVxuICAgICAgICAgICAgcmV0dXJuIGByZ2JhKCR7Xy5sYW5nLnJvdW5kKHIpfSwgJHtfLmxhbmcucm91bmQoZyl9LCAke18ubGFuZy5yb3VuZChiKX0sICR7Xy5sYW5nLnJvdW5kKGEpfSlgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBSR0JcbiAgICAgICAgICAgIHJldHVybiBgcmdiKCR7Xy5sYW5nLnJvdW5kKHIpfSwgJHtfLmxhbmcucm91bmQoZyl9LCAke18ubGFuZy5yb3VuZChiKX0pYDtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IFJHQjtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgSGV4IGZyb20gJy4vaGV4LmpzJztcbmltcG9ydCBIU0wgZnJvbSAnLi9oc2wuanMnO1xuaW1wb3J0IEtleXdvcmQgZnJvbSAnLi9rZXl3b3JkLmpzJztcbmltcG9ydCBSR0IgZnJvbSAnLi9yZ2IuanMnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBDb2xvciA9IHtcbiAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICBmb3JtYXQ6IHtcbiAgICAgICAga2V5d29yZDogS2V5d29yZCxcbiAgICAgICAgaGV4OiBIZXgsXG4gICAgICAgIHJnYjogUkdCLFxuICAgICAgICByZ2JhOiBSR0IsXG4gICAgICAgIGhzbDogSFNMLFxuICAgICAgICBoc2xhOiBIU0xcbiAgICB9LFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0gSGV4LnBhcnNlKGNvbG9yKSB8fCBSR0IucGFyc2UoY29sb3IpIHx8IEhTTC5wYXJzZShjb2xvcikgfHwgS2V5d29yZC5wYXJzZShjb2xvcik7IC8vIENvbG9yIHByb3ZpZGVycyBvcmRlcmVkIHdpdGggcGVyZm9ybWFuY2UgaW4gbWluZFxuICAgICAgICBpZiAoY2hhbm5lbHMpXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiBcIiR7Y29sb3J9XCJgKTtcbiAgICB9LFxuICAgIHN0cmluZ2lmeTogKGNoYW5uZWxzKSA9PiB7XG4gICAgICAgIC8vIFNBU1MgcmV0dXJucyBhIGtleXdvcmQgaWYgcG9zc2libGUsIGJ1dCB3ZSBhdm9pZCBkb2luZyB0aGF0IGFzIGl0J3Mgc2xvd2VyIGFuZCBkb2Vzbid0IHJlYWxseSBhZGQgYW55IHZhbHVlXG4gICAgICAgIGlmICghY2hhbm5lbHMuY2hhbmdlZCAmJiBjaGFubmVscy5jb2xvcilcbiAgICAgICAgICAgIHJldHVybiBjaGFubmVscy5jb2xvcjtcbiAgICAgICAgaWYgKGNoYW5uZWxzLnR5cGUuaXMoVFlQRS5IU0wpIHx8IGNoYW5uZWxzLmRhdGEuciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gSFNMLnN0cmluZ2lmeShjaGFubmVscyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhbm5lbHMuYSA8IDEgfHwgIU51bWJlci5pc0ludGVnZXIoY2hhbm5lbHMucikgfHwgIU51bWJlci5pc0ludGVnZXIoY2hhbm5lbHMuZykgfHwgIU51bWJlci5pc0ludGVnZXIoY2hhbm5lbHMuYikpIHtcbiAgICAgICAgICAgIHJldHVybiBSR0Iuc3RyaW5naWZ5KGNoYW5uZWxzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBIZXguc3RyaW5naWZ5KGNoYW5uZWxzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBjaGFuZ2UgPSAoY29sb3IsIGNoYW5uZWxzKSA9PiB7XG4gICAgY29uc3QgY2ggPSBDb2xvci5wYXJzZShjb2xvcik7XG4gICAgZm9yIChjb25zdCBjIGluIGNoYW5uZWxzKSB7XG4gICAgICAgIGNoW2NdID0gXy5jaGFubmVsLmNsYW1wW2NdKGNoYW5uZWxzW2NdKTtcbiAgICB9XG4gICAgcmV0dXJuIENvbG9yLnN0cmluZ2lmeShjaCk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2U7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbmltcG9ydCBjaGFuZ2UgZnJvbSAnLi9jaGFuZ2UuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgcmdiYSA9IChyLCBnLCBiID0gMCwgYSA9IDEpID0+IHtcbiAgICBpZiAodHlwZW9mIHIgIT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gY2hhbmdlKHIsIHsgYTogZyB9KTtcbiAgICBjb25zdCBjaGFubmVscyA9IENoYW5uZWxzUmV1c2FibGUuc2V0KHtcbiAgICAgICAgcjogXy5jaGFubmVsLmNsYW1wLnIociksXG4gICAgICAgIGc6IF8uY2hhbm5lbC5jbGFtcC5nKGcpLFxuICAgICAgICBiOiBfLmNoYW5uZWwuY2xhbXAuYihiKSxcbiAgICAgICAgYTogXy5jaGFubmVsLmNsYW1wLmEoYSlcbiAgICB9KTtcbiAgICByZXR1cm4gQ29sb3Iuc3RyaW5naWZ5KGNoYW5uZWxzKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IHJnYmE7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGNoYW5uZWwgPSAoY29sb3IsIGNoYW5uZWwpID0+IHtcbiAgICByZXR1cm4gXy5sYW5nLnJvdW5kKENvbG9yLnBhcnNlKGNvbG9yKVtjaGFubmVsXSk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBjaGFubmVsO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG4vKiBNQUlOICovXG4vL1NPVVJDRTogaHR0cHM6Ly9wbGFuZXRjYWxjLmNvbS83Nzc5XG5jb25zdCBsdW1pbmFuY2UgPSAoY29sb3IpID0+IHtcbiAgICBjb25zdCB7IHIsIGcsIGIgfSA9IENvbG9yLnBhcnNlKGNvbG9yKTtcbiAgICBjb25zdCBsdW1pbmFuY2UgPSAuMjEyNiAqIF8uY2hhbm5lbC50b0xpbmVhcihyKSArIC43MTUyICogXy5jaGFubmVsLnRvTGluZWFyKGcpICsgLjA3MjIgKiBfLmNoYW5uZWwudG9MaW5lYXIoYik7XG4gICAgcmV0dXJuIF8ubGFuZy5yb3VuZChsdW1pbmFuY2UpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgbHVtaW5hbmNlO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBsdW1pbmFuY2UgZnJvbSAnLi9sdW1pbmFuY2UuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgaXNMaWdodCA9IChjb2xvcikgPT4ge1xuICAgIHJldHVybiBsdW1pbmFuY2UoY29sb3IpID49IC41O1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgaXNMaWdodDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgaXNMaWdodCBmcm9tICcuL2lzX2xpZ2h0LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGlzRGFyayA9IChjb2xvcikgPT4ge1xuICAgIHJldHVybiAhaXNMaWdodChjb2xvcik7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBpc0Rhcms7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGFkanVzdENoYW5uZWwgPSAoY29sb3IsIGNoYW5uZWwsIGFtb3VudCkgPT4ge1xuICAgIGNvbnN0IGNoYW5uZWxzID0gQ29sb3IucGFyc2UoY29sb3IpO1xuICAgIGNvbnN0IGFtb3VudEN1cnJlbnQgPSBjaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCBhbW91bnROZXh0ID0gXy5jaGFubmVsLmNsYW1wW2NoYW5uZWxdKGFtb3VudEN1cnJlbnQgKyBhbW91bnQpO1xuICAgIGlmIChhbW91bnRDdXJyZW50ICE9PSBhbW91bnROZXh0KVxuICAgICAgICBjaGFubmVsc1tjaGFubmVsXSA9IGFtb3VudE5leHQ7XG4gICAgcmV0dXJuIENvbG9yLnN0cmluZ2lmeShjaGFubmVscyk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBhZGp1c3RDaGFubmVsO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBhZGp1c3RDaGFubmVsIGZyb20gJy4vYWRqdXN0X2NoYW5uZWwuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgbGlnaHRlbiA9IChjb2xvciwgYW1vdW50KSA9PiB7XG4gICAgcmV0dXJuIGFkanVzdENoYW5uZWwoY29sb3IsICdsJywgYW1vdW50KTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGxpZ2h0ZW47XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IGFkanVzdENoYW5uZWwgZnJvbSAnLi9hZGp1c3RfY2hhbm5lbC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBkYXJrZW4gPSAoY29sb3IsIGFtb3VudCkgPT4ge1xuICAgIHJldHVybiBhZGp1c3RDaGFubmVsKGNvbG9yLCAnbCcsIC1hbW91bnQpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgZGFya2VuO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG5pbXBvcnQgY2hhbmdlIGZyb20gJy4vY2hhbmdlLmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGFkanVzdCA9IChjb2xvciwgY2hhbm5lbHMpID0+IHtcbiAgICBjb25zdCBjaCA9IENvbG9yLnBhcnNlKGNvbG9yKTtcbiAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgZm9yIChjb25zdCBjIGluIGNoYW5uZWxzKSB7XG4gICAgICAgIGlmICghY2hhbm5lbHNbY10pXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2hhbmdlc1tjXSA9IGNoW2NdICsgY2hhbm5lbHNbY107XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2UoY29sb3IsIGNoYW5nZXMpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgYWRqdXN0O1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG5pbXBvcnQgcmdiYSBmcm9tICcuL3JnYmEuanMnO1xuLyogTUFJTiAqL1xuLy9TT1VSQ0U6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNzL2RhcnQtc2Fzcy9ibG9iLzc0NTdkMmU5ZTdlNjIzZDk4NDRmZmQwMzdhMDcwY2YzMmQzOWMzNDgvbGliL3NyYy9mdW5jdGlvbnMvY29sb3IuZGFydCNMNzE4LUw3NTZcbmNvbnN0IG1peCA9IChjb2xvcjEsIGNvbG9yMiwgd2VpZ2h0ID0gNTApID0+IHtcbiAgICBjb25zdCB7IHI6IHIxLCBnOiBnMSwgYjogYjEsIGE6IGExIH0gPSBDb2xvci5wYXJzZShjb2xvcjEpO1xuICAgIGNvbnN0IHsgcjogcjIsIGc6IGcyLCBiOiBiMiwgYTogYTIgfSA9IENvbG9yLnBhcnNlKGNvbG9yMik7XG4gICAgY29uc3Qgd2VpZ2h0U2NhbGUgPSB3ZWlnaHQgLyAxMDA7XG4gICAgY29uc3Qgd2VpZ2h0Tm9ybWFsaXplZCA9ICh3ZWlnaHRTY2FsZSAqIDIpIC0gMTtcbiAgICBjb25zdCBhbHBoYURlbHRhID0gYTEgLSBhMjtcbiAgICBjb25zdCB3ZWlnaHQxY29tYmluZWQgPSAoKHdlaWdodE5vcm1hbGl6ZWQgKiBhbHBoYURlbHRhKSA9PT0gLTEpID8gd2VpZ2h0Tm9ybWFsaXplZCA6ICh3ZWlnaHROb3JtYWxpemVkICsgYWxwaGFEZWx0YSkgLyAoMSArIHdlaWdodE5vcm1hbGl6ZWQgKiBhbHBoYURlbHRhKTtcbiAgICBjb25zdCB3ZWlnaHQxID0gKHdlaWdodDFjb21iaW5lZCArIDEpIC8gMjtcbiAgICBjb25zdCB3ZWlnaHQyID0gMSAtIHdlaWdodDE7XG4gICAgY29uc3QgciA9IChyMSAqIHdlaWdodDEpICsgKHIyICogd2VpZ2h0Mik7XG4gICAgY29uc3QgZyA9IChnMSAqIHdlaWdodDEpICsgKGcyICogd2VpZ2h0Mik7XG4gICAgY29uc3QgYiA9IChiMSAqIHdlaWdodDEpICsgKGIyICogd2VpZ2h0Mik7XG4gICAgY29uc3QgYSA9IChhMSAqIHdlaWdodFNjYWxlKSArIChhMiAqICgxIC0gd2VpZ2h0U2NhbGUpKTtcbiAgICByZXR1cm4gcmdiYShyLCBnLCBiLCBhKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IG1peDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vY29sb3IvaW5kZXguanMnO1xuaW1wb3J0IG1peCBmcm9tICcuL21peC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBpbnZlcnQgPSAoY29sb3IsIHdlaWdodCA9IDEwMCkgPT4ge1xuICAgIGNvbnN0IGludmVyc2UgPSBDb2xvci5wYXJzZShjb2xvcik7XG4gICAgaW52ZXJzZS5yID0gMjU1IC0gaW52ZXJzZS5yO1xuICAgIGludmVyc2UuZyA9IDI1NSAtIGludmVyc2UuZztcbiAgICBpbnZlcnNlLmIgPSAyNTUgLSBpbnZlcnNlLmI7XG4gICAgcmV0dXJuIG1peChpbnZlcnNlLCBjb2xvciwgd2VpZ2h0KTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGludmVydDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgaGV4IGZyb20gJy4vcmdiYS5qcyc7IC8vIEFsaWFzXG5pbXBvcnQgcmdiIGZyb20gJy4vcmdiYS5qcyc7IC8vIEFsaWFzXG5pbXBvcnQgcmdiYSBmcm9tICcuL3JnYmEuanMnO1xuaW1wb3J0IGhzbCBmcm9tICcuL2hzbGEuanMnOyAvLyBBbGlhc1xuaW1wb3J0IGhzbGEgZnJvbSAnLi9oc2xhLmpzJztcbmltcG9ydCB0b0tleXdvcmQgZnJvbSAnLi90b19rZXl3b3JkLmpzJztcbmltcG9ydCB0b0hleCBmcm9tICcuL3RvX2hleC5qcyc7XG5pbXBvcnQgdG9SZ2JhIGZyb20gJy4vdG9fcmdiYS5qcyc7XG5pbXBvcnQgdG9Ic2xhIGZyb20gJy4vdG9faHNsYS5qcyc7XG5pbXBvcnQgY2hhbm5lbCBmcm9tICcuL2NoYW5uZWwuanMnO1xuaW1wb3J0IHJlZCBmcm9tICcuL3JlZC5qcyc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi9ncmVlbi5qcyc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuL2JsdWUuanMnO1xuaW1wb3J0IGh1ZSBmcm9tICcuL2h1ZS5qcyc7XG5pbXBvcnQgc2F0dXJhdGlvbiBmcm9tICcuL3NhdHVyYXRpb24uanMnO1xuaW1wb3J0IGxpZ2h0bmVzcyBmcm9tICcuL2xpZ2h0bmVzcy5qcyc7XG5pbXBvcnQgYWxwaGEgZnJvbSAnLi9hbHBoYS5qcyc7XG5pbXBvcnQgb3BhY2l0eSBmcm9tICcuL2FscGhhLmpzJzsgLy8gQWxpYXNcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL2NvbnRyYXN0LmpzJztcbmltcG9ydCBsdW1pbmFuY2UgZnJvbSAnLi9sdW1pbmFuY2UuanMnO1xuaW1wb3J0IGlzRGFyayBmcm9tICcuL2lzX2RhcmsuanMnO1xuaW1wb3J0IGlzTGlnaHQgZnJvbSAnLi9pc19saWdodC5qcyc7XG5pbXBvcnQgaXNUcmFuc3BhcmVudCBmcm9tICcuL2lzX3RyYW5zcGFyZW50LmpzJztcbmltcG9ydCBpc1ZhbGlkIGZyb20gJy4vaXNfdmFsaWQuanMnO1xuaW1wb3J0IHNhdHVyYXRlIGZyb20gJy4vc2F0dXJhdGUuanMnO1xuaW1wb3J0IGRlc2F0dXJhdGUgZnJvbSAnLi9kZXNhdHVyYXRlLmpzJztcbmltcG9ydCBsaWdodGVuIGZyb20gJy4vbGlnaHRlbi5qcyc7XG5pbXBvcnQgZGFya2VuIGZyb20gJy4vZGFya2VuLmpzJztcbmltcG9ydCBvcGFjaWZ5IGZyb20gJy4vb3BhY2lmeS5qcyc7XG5pbXBvcnQgZmFkZUluIGZyb20gJy4vb3BhY2lmeS5qcyc7IC8vIEFsaWFzXG5pbXBvcnQgdHJhbnNwYXJlbnRpemUgZnJvbSAnLi90cmFuc3BhcmVudGl6ZS5qcyc7XG5pbXBvcnQgZmFkZU91dCBmcm9tICcuL3RyYW5zcGFyZW50aXplLmpzJzsgLy8gQWxpYXNcbmltcG9ydCBjb21wbGVtZW50IGZyb20gJy4vY29tcGxlbWVudC5qcyc7XG5pbXBvcnQgZ3JheXNjYWxlIGZyb20gJy4vZ3JheXNjYWxlLmpzJztcbmltcG9ydCBhZGp1c3QgZnJvbSAnLi9hZGp1c3QuanMnO1xuaW1wb3J0IGNoYW5nZSBmcm9tICcuL2NoYW5nZS5qcyc7XG5pbXBvcnQgaW52ZXJ0IGZyb20gJy4vaW52ZXJ0LmpzJztcbmltcG9ydCBtaXggZnJvbSAnLi9taXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4vc2NhbGUuanMnO1xuLyogRVhQT1JUICovXG5leHBvcnQgeyBcbi8qIENSRUFURSAqL1xuaGV4LCByZ2IsIHJnYmEsIGhzbCwgaHNsYSwgXG4vKiBDT05WRVJUICovXG50b0tleXdvcmQsIHRvSGV4LCB0b1JnYmEsIHRvSHNsYSwgXG4vKiBHRVQgLSBDSEFOTkVMICovXG5jaGFubmVsLCByZWQsIGdyZWVuLCBibHVlLCBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEsIG9wYWNpdHksIFxuLyogR0VUIC0gTU9SRSAqL1xuY29udHJhc3QsIGx1bWluYW5jZSwgaXNEYXJrLCBpc0xpZ2h0LCBpc1RyYW5zcGFyZW50LCBpc1ZhbGlkLCBcbi8qIEVESVQgLSBDSEFOTkVMICovXG5zYXR1cmF0ZSwgZGVzYXR1cmF0ZSwgbGlnaHRlbiwgZGFya2VuLCBvcGFjaWZ5LCBmYWRlSW4sIHRyYW5zcGFyZW50aXplLCBmYWRlT3V0LCBjb21wbGVtZW50LCBncmF5c2NhbGUsIFxuLyogRURJVCAtIE1PUkUgKi9cbmFkanVzdCwgY2hhbmdlLCBpbnZlcnQsIG1peCwgc2NhbGUgfTtcbiIsCiAgICAiLyogRVhQT1JUICovXG5leHBvcnQgKiBmcm9tICcuL21ldGhvZHMvaW5kZXguanMnO1xuIiwKICAgICIvKiEgQGxpY2Vuc2UgRE9NUHVyaWZ5IDMuMS42IHwgKGMpIEN1cmU1MyBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgUmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlIDIuMCBhbmQgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgfCBnaXRodWIuY29tL2N1cmU1My9ET01QdXJpZnkvYmxvYi8zLjEuNi9MSUNFTlNFICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkRPTVB1cmlmeSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgY29uc3Qge1xuICAgIGVudHJpZXMsXG4gICAgc2V0UHJvdG90eXBlT2YsXG4gICAgaXNGcm96ZW4sXG4gICAgZ2V0UHJvdG90eXBlT2YsXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG4gIH0gPSBPYmplY3Q7XG4gIGxldCB7XG4gICAgZnJlZXplLFxuICAgIHNlYWwsXG4gICAgY3JlYXRlXG4gIH0gPSBPYmplY3Q7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xuICBsZXQge1xuICAgIGFwcGx5LFxuICAgIGNvbnN0cnVjdFxuICB9ID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3Q7XG4gIGlmICghZnJlZXplKSB7XG4gICAgZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgaWYgKCFzZWFsKSB7XG4gICAgc2VhbCA9IGZ1bmN0aW9uIHNlYWwoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBpZiAoIWFwcGx5KSB7XG4gICAgYXBwbHkgPSBmdW5jdGlvbiBhcHBseShmdW4sIHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bi5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgIH07XG4gIH1cbiAgaWYgKCFjb25zdHJ1Y3QpIHtcbiAgICBjb25zdHJ1Y3QgPSBmdW5jdGlvbiBjb25zdHJ1Y3QoRnVuYywgYXJncykge1xuICAgICAgcmV0dXJuIG5ldyBGdW5jKC4uLmFyZ3MpO1xuICAgIH07XG4gIH1cbiAgY29uc3QgYXJyYXlGb3JFYWNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk7XG4gIGNvbnN0IGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbiAgY29uc3QgYXJyYXlQdXNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gIGNvbnN0IHN0cmluZ1RvTG93ZXJDYXNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKTtcbiAgY29uc3Qgc3RyaW5nVG9TdHJpbmcgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpO1xuICBjb25zdCBzdHJpbmdNYXRjaCA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCk7XG4gIGNvbnN0IHN0cmluZ1JlcGxhY2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG4gIGNvbnN0IHN0cmluZ0luZGV4T2YgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZik7XG4gIGNvbnN0IHN0cmluZ1RyaW0gPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG4gIGNvbnN0IG9iamVjdEhhc093blByb3BlcnR5ID0gdW5hcHBseShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiAgY29uc3QgcmVnRXhwVGVzdCA9IHVuYXBwbHkoUmVnRXhwLnByb3RvdHlwZS50ZXN0KTtcbiAgY29uc3QgdHlwZUVycm9yQ3JlYXRlID0gdW5jb25zdHJ1Y3QoVHlwZUVycm9yKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIHRoaXNBcmcgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBmdW5jdGlvbiB0byBiZSB3cmFwcGVkIGFuZCBjYWxsZWQuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCB0aGlzQXJnIGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiB1bmFwcGx5KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXNBcmcpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGZ1bmN0aW9uIHRoYXQgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gY29uc3RydWN0b3IgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGJlIHdyYXBwZWQgYW5kIGNhbGxlZC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIHVuY29uc3RydWN0KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoZnVuYywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJvcGVydGllcyB0byBhIGxvb2t1cCB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IC0gVGhlIHNldCB0byB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGFkZGVkLlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSAtIFRoZSBhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZSBzZXQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybUNhc2VGdW5jIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBjYXNlIG9mIGVhY2ggZWxlbWVudCBiZWZvcmUgYWRkaW5nIHRvIHRoZSBzZXQuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtb2RpZmllZCBzZXQgd2l0aCBhZGRlZCBlbGVtZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZFRvU2V0KHNldCwgYXJyYXkpIHtcbiAgICBsZXQgdHJhbnNmb3JtQ2FzZUZ1bmMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgLy8gTWFrZSAnaW4nIGFuZCB0cnV0aHkgY2hlY2tzIGxpa2UgQm9vbGVhbihzZXQuY29uc3RydWN0b3IpXG4gICAgICAvLyBpbmRlcGVuZGVudCBvZiBhbnkgcHJvcGVydGllcyBkZWZpbmVkIG9uIE9iamVjdC5wcm90b3R5cGUuXG4gICAgICAvLyBQcmV2ZW50IHByb3RvdHlwZSBzZXR0ZXJzIGZyb20gaW50ZXJjZXB0aW5nIHNldCBhcyBhIHRoaXMgdmFsdWUuXG4gICAgICBzZXRQcm90b3R5cGVPZihzZXQsIG51bGwpO1xuICAgIH1cbiAgICBsZXQgbCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICBsZXQgZWxlbWVudCA9IGFycmF5W2xdO1xuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsY0VsZW1lbnQgPSB0cmFuc2Zvcm1DYXNlRnVuYyhlbGVtZW50KTtcbiAgICAgICAgaWYgKGxjRWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgIC8vIENvbmZpZyBwcmVzZXRzIChlLmcuIHRhZ3MuanMsIGF0dHJzLmpzKSBhcmUgaW1tdXRhYmxlLlxuICAgICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgICBhcnJheVtsXSA9IGxjRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudCA9IGxjRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBhbiBhcnJheSB0byBoYXJkZW4gYWdhaW5zdCBDU1BQXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIGJlIGNsZWFuZWQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gVGhlIGNsZWFuZWQgdmVyc2lvbiBvZiB0aGUgYXJyYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFuQXJyYXkoYXJyYXkpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBpc1Byb3BlcnR5RXhpc3QgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShhcnJheSwgaW5kZXgpO1xuICAgICAgaWYgKCFpc1Byb3BlcnR5RXhpc3QpIHtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYWxsb3cgY2xvbmUgYW4gb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIGNsb25lZC5cbiAgICogQHJldHVybnMge09iamVjdH0gQSBuZXcgb2JqZWN0IHRoYXQgY29waWVzIHRoZSBvcmlnaW5hbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsb25lKG9iamVjdCkge1xuICAgIGNvbnN0IG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVdIG9mIGVudHJpZXMob2JqZWN0KSkge1xuICAgICAgY29uc3QgaXNQcm9wZXJ0eUV4aXN0ID0gb2JqZWN0SGFzT3duUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoaXNQcm9wZXJ0eUV4aXN0KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBjbGVhbkFycmF5KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gY2xvbmUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3T2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGlmIHRoZSBwcm9wIGlzIGZ1bmN0aW9uIG9yIGdldHRlciBhbmQgYmVoYXZlcyBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgdG8gbG9vayB1cCB0aGUgZ2V0dGVyIGZ1bmN0aW9uIGluIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGdldHRlciBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgZ2V0dGVyIGZ1bmN0aW9uIGZvdW5kIGluIHRoZSBwcm90b3R5cGUgY2hhaW4gb3IgYSBmYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGxvb2t1cEdldHRlcihvYmplY3QsIHByb3ApIHtcbiAgICB3aGlsZSAob2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZXNjID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgICBpZiAoZGVzYykge1xuICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZhbGxiYWNrVmFsdWUoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gIH1cblxuICBjb25zdCBodG1sJDEgPSBmcmVlemUoWydhJywgJ2FiYnInLCAnYWNyb255bScsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2JkaScsICdiZG8nLCAnYmlnJywgJ2JsaW5rJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnY29udGVudCcsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RkJywgJ2RlY29yYXRvcicsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZWxlbWVudCcsICdlbScsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb250JywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2knLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGVyJywgJ25hdicsICdub2JyJywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NoYWRvdycsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhY2VyJywgJ3NwYW4nLCAnc3RyaWtlJywgJ3N0cm9uZycsICdzdHlsZScsICdzdWInLCAnc3VtbWFyeScsICdzdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGltZScsICd0cicsICd0cmFjaycsICd0dCcsICd1JywgJ3VsJywgJ3ZhcicsICd2aWRlbycsICd3YnInXSk7XG5cbiAgLy8gU1ZHXG4gIGNvbnN0IHN2ZyQxID0gZnJlZXplKFsnc3ZnJywgJ2EnLCAnYWx0Z2x5cGgnLCAnYWx0Z2x5cGhkZWYnLCAnYWx0Z2x5cGhpdGVtJywgJ2FuaW1hdGVjb2xvcicsICdhbmltYXRlbW90aW9uJywgJ2FuaW1hdGV0cmFuc2Zvcm0nLCAnY2lyY2xlJywgJ2NsaXBwYXRoJywgJ2RlZnMnLCAnZGVzYycsICdlbGxpcHNlJywgJ2ZpbHRlcicsICdmb250JywgJ2cnLCAnZ2x5cGgnLCAnZ2x5cGhyZWYnLCAnaGtlcm4nLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJncmFkaWVudCcsICdtYXJrZXInLCAnbWFzaycsICdtZXRhZGF0YScsICdtcGF0aCcsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxncmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAnc3R5bGUnLCAnc3dpdGNoJywgJ3N5bWJvbCcsICd0ZXh0JywgJ3RleHRwYXRoJywgJ3RpdGxlJywgJ3RyZWYnLCAndHNwYW4nLCAndmlldycsICd2a2VybiddKTtcbiAgY29uc3Qgc3ZnRmlsdGVycyA9IGZyZWV6ZShbJ2ZlQmxlbmQnLCAnZmVDb2xvck1hdHJpeCcsICdmZUNvbXBvbmVudFRyYW5zZmVyJywgJ2ZlQ29tcG9zaXRlJywgJ2ZlQ29udm9sdmVNYXRyaXgnLCAnZmVEaWZmdXNlTGlnaHRpbmcnLCAnZmVEaXNwbGFjZW1lbnRNYXAnLCAnZmVEaXN0YW50TGlnaHQnLCAnZmVEcm9wU2hhZG93JywgJ2ZlRmxvb2QnLCAnZmVGdW5jQScsICdmZUZ1bmNCJywgJ2ZlRnVuY0cnLCAnZmVGdW5jUicsICdmZUdhdXNzaWFuQmx1cicsICdmZUltYWdlJywgJ2ZlTWVyZ2UnLCAnZmVNZXJnZU5vZGUnLCAnZmVNb3JwaG9sb2d5JywgJ2ZlT2Zmc2V0JywgJ2ZlUG9pbnRMaWdodCcsICdmZVNwZWN1bGFyTGlnaHRpbmcnLCAnZmVTcG90TGlnaHQnLCAnZmVUaWxlJywgJ2ZlVHVyYnVsZW5jZSddKTtcblxuICAvLyBMaXN0IG9mIFNWRyBlbGVtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuXG4gIC8vIFdlIHN0aWxsIG5lZWQgdG8ga25vdyB0aGVtIHNvIHRoYXQgd2UgY2FuIGRvIG5hbWVzcGFjZVxuICAvLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbiAgLy8gYWxsb3ctbGlzdC5cbiAgY29uc3Qgc3ZnRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ2FuaW1hdGUnLCAnY29sb3ItcHJvZmlsZScsICdjdXJzb3InLCAnZGlzY2FyZCcsICdmb250LWZhY2UnLCAnZm9udC1mYWNlLWZvcm1hdCcsICdmb250LWZhY2UtbmFtZScsICdmb250LWZhY2Utc3JjJywgJ2ZvbnQtZmFjZS11cmknLCAnZm9yZWlnbm9iamVjdCcsICdoYXRjaCcsICdoYXRjaHBhdGgnLCAnbWVzaCcsICdtZXNoZ3JhZGllbnQnLCAnbWVzaHBhdGNoJywgJ21lc2hyb3cnLCAnbWlzc2luZy1nbHlwaCcsICdzY3JpcHQnLCAnc2V0JywgJ3NvbGlkY29sb3InLCAndW5rbm93bicsICd1c2UnXSk7XG4gIGNvbnN0IG1hdGhNbCQxID0gZnJlZXplKFsnbWF0aCcsICdtZW5jbG9zZScsICdtZXJyb3InLCAnbWZlbmNlZCcsICdtZnJhYycsICdtZ2x5cGgnLCAnbWknLCAnbWxhYmVsZWR0cicsICdtbXVsdGlzY3JpcHRzJywgJ21uJywgJ21vJywgJ21vdmVyJywgJ21wYWRkZWQnLCAnbXBoYW50b20nLCAnbXJvb3QnLCAnbXJvdycsICdtcycsICdtc3BhY2UnLCAnbXNxcnQnLCAnbXN0eWxlJywgJ21zdWInLCAnbXN1cCcsICdtc3Vic3VwJywgJ210YWJsZScsICdtdGQnLCAnbXRleHQnLCAnbXRyJywgJ211bmRlcicsICdtdW5kZXJvdmVyJywgJ21wcmVzY3JpcHRzJ10pO1xuXG4gIC8vIFNpbWlsYXJseSB0byBTVkcsIHdlIHdhbnQgdG8ga25vdyBhbGwgTWF0aE1MIGVsZW1lbnRzLFxuICAvLyBldmVuIHRob3NlIHRoYXQgd2UgZGlzYWxsb3cgYnkgZGVmYXVsdC5cbiAgY29uc3QgbWF0aE1sRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ21hY3Rpb24nLCAnbWFsaWduZ3JvdXAnLCAnbWFsaWdubWFyaycsICdtbG9uZ2RpdicsICdtc2NhcnJpZXMnLCAnbXNjYXJyeScsICdtc2dyb3VwJywgJ21zdGFjaycsICdtc2xpbmUnLCAnbXNyb3cnLCAnc2VtYW50aWNzJywgJ2Fubm90YXRpb24nLCAnYW5ub3RhdGlvbi14bWwnLCAnbXByZXNjcmlwdHMnLCAnbm9uZSddKTtcbiAgY29uc3QgdGV4dCA9IGZyZWV6ZShbJyN0ZXh0J10pO1xuXG4gIGNvbnN0IGh0bWwgPSBmcmVlemUoWydhY2NlcHQnLCAnYWN0aW9uJywgJ2FsaWduJywgJ2FsdCcsICdhdXRvY2FwaXRhbGl6ZScsICdhdXRvY29tcGxldGUnLCAnYXV0b3BpY3R1cmVpbnBpY3R1cmUnLCAnYXV0b3BsYXknLCAnYmFja2dyb3VuZCcsICdiZ2NvbG9yJywgJ2JvcmRlcicsICdjYXB0dXJlJywgJ2NlbGxwYWRkaW5nJywgJ2NlbGxzcGFjaW5nJywgJ2NoZWNrZWQnLCAnY2l0ZScsICdjbGFzcycsICdjbGVhcicsICdjb2xvcicsICdjb2xzJywgJ2NvbHNwYW4nLCAnY29udHJvbHMnLCAnY29udHJvbHNsaXN0JywgJ2Nvb3JkcycsICdjcm9zc29yaWdpbicsICdkYXRldGltZScsICdkZWNvZGluZycsICdkZWZhdWx0JywgJ2RpcicsICdkaXNhYmxlZCcsICdkaXNhYmxlcGljdHVyZWlucGljdHVyZScsICdkaXNhYmxlcmVtb3RlcGxheWJhY2snLCAnZG93bmxvYWQnLCAnZHJhZ2dhYmxlJywgJ2VuY3R5cGUnLCAnZW50ZXJrZXloaW50JywgJ2ZhY2UnLCAnZm9yJywgJ2hlYWRlcnMnLCAnaGVpZ2h0JywgJ2hpZGRlbicsICdoaWdoJywgJ2hyZWYnLCAnaHJlZmxhbmcnLCAnaWQnLCAnaW5wdXRtb2RlJywgJ2ludGVncml0eScsICdpc21hcCcsICdraW5kJywgJ2xhYmVsJywgJ2xhbmcnLCAnbGlzdCcsICdsb2FkaW5nJywgJ2xvb3AnLCAnbG93JywgJ21heCcsICdtYXhsZW5ndGgnLCAnbWVkaWEnLCAnbWV0aG9kJywgJ21pbicsICdtaW5sZW5ndGgnLCAnbXVsdGlwbGUnLCAnbXV0ZWQnLCAnbmFtZScsICdub25jZScsICdub3NoYWRlJywgJ25vdmFsaWRhdGUnLCAnbm93cmFwJywgJ29wZW4nLCAnb3B0aW11bScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3BsYXlzaW5saW5lJywgJ3BvcG92ZXInLCAncG9wb3ZlcnRhcmdldCcsICdwb3BvdmVydGFyZ2V0YWN0aW9uJywgJ3Bvc3RlcicsICdwcmVsb2FkJywgJ3B1YmRhdGUnLCAncmFkaW9ncm91cCcsICdyZWFkb25seScsICdyZWwnLCAncmVxdWlyZWQnLCAncmV2JywgJ3JldmVyc2VkJywgJ3JvbGUnLCAncm93cycsICdyb3dzcGFuJywgJ3NwZWxsY2hlY2snLCAnc2NvcGUnLCAnc2VsZWN0ZWQnLCAnc2hhcGUnLCAnc2l6ZScsICdzaXplcycsICdzcGFuJywgJ3NyY2xhbmcnLCAnc3RhcnQnLCAnc3JjJywgJ3NyY3NldCcsICdzdGVwJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFiaW5kZXgnLCAndGl0bGUnLCAndHJhbnNsYXRlJywgJ3R5cGUnLCAndXNlbWFwJywgJ3ZhbGlnbicsICd2YWx1ZScsICd3aWR0aCcsICd3cmFwJywgJ3htbG5zJywgJ3Nsb3QnXSk7XG4gIGNvbnN0IHN2ZyA9IGZyZWV6ZShbJ2FjY2VudC1oZWlnaHQnLCAnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXNjZW50JywgJ2F0dHJpYnV0ZW5hbWUnLCAnYXR0cmlidXRldHlwZScsICdhemltdXRoJywgJ2Jhc2VmcmVxdWVuY3knLCAnYmFzZWxpbmUtc2hpZnQnLCAnYmVnaW4nLCAnYmlhcycsICdieScsICdjbGFzcycsICdjbGlwJywgJ2NsaXBwYXRodW5pdHMnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvcicsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdjeCcsICdjeScsICdkJywgJ2R4JywgJ2R5JywgJ2RpZmZ1c2Vjb25zdGFudCcsICdkaXJlY3Rpb24nLCAnZGlzcGxheScsICdkaXZpc29yJywgJ2R1cicsICdlZGdlbW9kZScsICdlbGV2YXRpb24nLCAnZW5kJywgJ2ZpbGwnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmaWx0ZXInLCAnZmlsdGVydW5pdHMnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZngnLCAnZnknLCAnZzEnLCAnZzInLCAnZ2x5cGgtbmFtZScsICdnbHlwaHJlZicsICdncmFkaWVudHVuaXRzJywgJ2dyYWRpZW50dHJhbnNmb3JtJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2ltYWdlLXJlbmRlcmluZycsICdpbicsICdpbjInLCAnaycsICdrMScsICdrMicsICdrMycsICdrNCcsICdrZXJuaW5nJywgJ2tleXBvaW50cycsICdrZXlzcGxpbmVzJywgJ2tleXRpbWVzJywgJ2xhbmcnLCAnbGVuZ3RoYWRqdXN0JywgJ2xldHRlci1zcGFjaW5nJywgJ2tlcm5lbG1hdHJpeCcsICdrZXJuZWx1bml0bGVuZ3RoJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ2xvY2FsJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnbWFya2VyaGVpZ2h0JywgJ21hcmtlcnVuaXRzJywgJ21hcmtlcndpZHRoJywgJ21hc2tjb250ZW50dW5pdHMnLCAnbWFza3VuaXRzJywgJ21heCcsICdtYXNrJywgJ21lZGlhJywgJ21ldGhvZCcsICdtb2RlJywgJ21pbicsICduYW1lJywgJ251bW9jdGF2ZXMnLCAnb2Zmc2V0JywgJ29wZXJhdG9yJywgJ29wYWNpdHknLCAnb3JkZXInLCAnb3JpZW50JywgJ29yaWVudGF0aW9uJywgJ29yaWdpbicsICdvdmVyZmxvdycsICdwYWludC1vcmRlcicsICdwYXRoJywgJ3BhdGhsZW5ndGgnLCAncGF0dGVybmNvbnRlbnR1bml0cycsICdwYXR0ZXJudHJhbnNmb3JtJywgJ3BhdHRlcm51bml0cycsICdwb2ludHMnLCAncHJlc2VydmVhbHBoYScsICdwcmVzZXJ2ZWFzcGVjdHJhdGlvJywgJ3ByaW1pdGl2ZXVuaXRzJywgJ3InLCAncngnLCAncnknLCAncmFkaXVzJywgJ3JlZngnLCAncmVmeScsICdyZXBlYXRjb3VudCcsICdyZXBlYXRkdXInLCAncmVzdGFydCcsICdyZXN1bHQnLCAncm90YXRlJywgJ3NjYWxlJywgJ3NlZWQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3NwZWN1bGFyY29uc3RhbnQnLCAnc3BlY3VsYXJleHBvbmVudCcsICdzcHJlYWRtZXRob2QnLCAnc3RhcnRvZmZzZXQnLCAnc3RkZGV2aWF0aW9uJywgJ3N0aXRjaHRpbGVzJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZScsICdzdHJva2Utd2lkdGgnLCAnc3R5bGUnLCAnc3VyZmFjZXNjYWxlJywgJ3N5c3RlbWxhbmd1YWdlJywgJ3RhYmluZGV4JywgJ3RhcmdldHgnLCAndGFyZ2V0eScsICd0cmFuc2Zvcm0nLCAndHJhbnNmb3JtLW9yaWdpbicsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndGV4dGxlbmd0aCcsICd0eXBlJywgJ3UxJywgJ3UyJywgJ3VuaWNvZGUnLCAndmFsdWVzJywgJ3ZpZXdib3gnLCAndmlzaWJpbGl0eScsICd2ZXJzaW9uJywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dpZHRoJywgJ3dvcmQtc3BhY2luZycsICd3cmFwJywgJ3dyaXRpbmctbW9kZScsICd4Y2hhbm5lbHNlbGVjdG9yJywgJ3ljaGFubmVsc2VsZWN0b3InLCAneCcsICd4MScsICd4MicsICd4bWxucycsICd5JywgJ3kxJywgJ3kyJywgJ3onLCAnem9vbWFuZHBhbiddKTtcbiAgY29uc3QgbWF0aE1sID0gZnJlZXplKFsnYWNjZW50JywgJ2FjY2VudHVuZGVyJywgJ2FsaWduJywgJ2JldmVsbGVkJywgJ2Nsb3NlJywgJ2NvbHVtbnNhbGlnbicsICdjb2x1bW5saW5lcycsICdjb2x1bW5zcGFuJywgJ2Rlbm9tYWxpZ24nLCAnZGVwdGgnLCAnZGlyJywgJ2Rpc3BsYXknLCAnZGlzcGxheXN0eWxlJywgJ2VuY29kaW5nJywgJ2ZlbmNlJywgJ2ZyYW1lJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2xhcmdlb3AnLCAnbGVuZ3RoJywgJ2xpbmV0aGlja25lc3MnLCAnbHNwYWNlJywgJ2xxdW90ZScsICdtYXRoYmFja2dyb3VuZCcsICdtYXRoY29sb3InLCAnbWF0aHNpemUnLCAnbWF0aHZhcmlhbnQnLCAnbWF4c2l6ZScsICdtaW5zaXplJywgJ21vdmFibGVsaW1pdHMnLCAnbm90YXRpb24nLCAnbnVtYWxpZ24nLCAnb3BlbicsICdyb3dhbGlnbicsICdyb3dsaW5lcycsICdyb3dzcGFjaW5nJywgJ3Jvd3NwYW4nLCAncnNwYWNlJywgJ3JxdW90ZScsICdzY3JpcHRsZXZlbCcsICdzY3JpcHRtaW5zaXplJywgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJywgJ3NlbGVjdGlvbicsICdzZXBhcmF0b3InLCAnc2VwYXJhdG9ycycsICdzdHJldGNoeScsICdzdWJzY3JpcHRzaGlmdCcsICdzdXBzY3JpcHRzaGlmdCcsICdzeW1tZXRyaWMnLCAndm9mZnNldCcsICd3aWR0aCcsICd4bWxucyddKTtcbiAgY29uc3QgeG1sID0gZnJlZXplKFsneGxpbms6aHJlZicsICd4bWw6aWQnLCAneGxpbms6dGl0bGUnLCAneG1sOnNwYWNlJywgJ3htbG5zOnhsaW5rJ10pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuICBjb25zdCBNVVNUQUNIRV9FWFBSID0gc2VhbCgvXFx7XFx7W1xcd1xcV10qfFtcXHdcXFddKlxcfVxcfS9nbSk7IC8vIFNwZWNpZnkgdGVtcGxhdGUgZGV0ZWN0aW9uIHJlZ2V4IGZvciBTQUZFX0ZPUl9URU1QTEFURVMgbW9kZVxuICBjb25zdCBFUkJfRVhQUiA9IHNlYWwoLzwlW1xcd1xcV10qfFtcXHdcXFddKiU+L2dtKTtcbiAgY29uc3QgVE1QTElUX0VYUFIgPSBzZWFsKC9cXCR7W1xcd1xcV10qfS9nbSk7XG4gIGNvbnN0IERBVEFfQVRUUiA9IHNlYWwoL15kYXRhLVtcXC1cXHcuXFx1MDBCNy1cXHVGRkZGXS8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIGNvbnN0IEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICBjb25zdCBJU19BTExPV0VEX1VSSSA9IHNlYWwoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlxcLV0rKD86W15hLXorLlxcLTpdfCQpKS9pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgKTtcbiAgY29uc3QgSVNfU0NSSVBUX09SX0RBVEEgPSBzZWFsKC9eKD86XFx3K3NjcmlwdHxkYXRhKTovaSk7XG4gIGNvbnN0IEFUVFJfV0hJVEVTUEFDRSA9IHNlYWwoL1tcXHUwMDAwLVxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMjlcXHUyMDVGXFx1MzAwMF0vZyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgKTtcbiAgY29uc3QgRE9DVFlQRV9OQU1FID0gc2VhbCgvXmh0bWwkL2kpO1xuICBjb25zdCBDVVNUT01fRUxFTUVOVCA9IHNlYWwoL15bYS16XVsuXFx3XSooLVsuXFx3XSspKyQvaSk7XG5cbiAgdmFyIEVYUFJFU1NJT05TID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBNVVNUQUNIRV9FWFBSOiBNVVNUQUNIRV9FWFBSLFxuICAgIEVSQl9FWFBSOiBFUkJfRVhQUixcbiAgICBUTVBMSVRfRVhQUjogVE1QTElUX0VYUFIsXG4gICAgREFUQV9BVFRSOiBEQVRBX0FUVFIsXG4gICAgQVJJQV9BVFRSOiBBUklBX0FUVFIsXG4gICAgSVNfQUxMT1dFRF9VUkk6IElTX0FMTE9XRURfVVJJLFxuICAgIElTX1NDUklQVF9PUl9EQVRBOiBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICBBVFRSX1dISVRFU1BBQ0U6IEFUVFJfV0hJVEVTUEFDRSxcbiAgICBET0NUWVBFX05BTUU6IERPQ1RZUEVfTkFNRSxcbiAgICBDVVNUT01fRUxFTUVOVDogQ1VTVE9NX0VMRU1FTlRcbiAgfSk7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9kZVR5cGVcbiAgY29uc3QgTk9ERV9UWVBFID0ge1xuICAgIGVsZW1lbnQ6IDEsXG4gICAgYXR0cmlidXRlOiAyLFxuICAgIHRleHQ6IDMsXG4gICAgY2RhdGFTZWN0aW9uOiA0LFxuICAgIGVudGl0eVJlZmVyZW5jZTogNSxcbiAgICAvLyBEZXByZWNhdGVkXG4gICAgZW50aXR5Tm9kZTogNixcbiAgICAvLyBEZXByZWNhdGVkXG4gICAgcHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjogNyxcbiAgICBjb21tZW50OiA4LFxuICAgIGRvY3VtZW50OiA5LFxuICAgIGRvY3VtZW50VHlwZTogMTAsXG4gICAgZG9jdW1lbnRGcmFnbWVudDogMTEsXG4gICAgbm90YXRpb246IDEyIC8vIERlcHJlY2F0ZWRcbiAgfTtcbiAgY29uc3QgZ2V0R2xvYmFsID0gZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuby1vcCBwb2xpY3kgZm9yIGludGVybmFsIHVzZSBvbmx5LlxuICAgKiBEb24ndCBleHBvcnQgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIHRoaXMgbW9kdWxlIVxuICAgKiBAcGFyYW0ge1RydXN0ZWRUeXBlUG9saWN5RmFjdG9yeX0gdHJ1c3RlZFR5cGVzIFRoZSBwb2xpY3kgZmFjdG9yeS5cbiAgICogQHBhcmFtIHtIVE1MU2NyaXB0RWxlbWVudH0gcHVyaWZ5SG9zdEVsZW1lbnQgVGhlIFNjcmlwdCBlbGVtZW50IHVzZWQgdG8gbG9hZCBET01QdXJpZnkgKHRvIGRldGVybWluZSBwb2xpY3kgbmFtZSBzdWZmaXgpLlxuICAgKiBAcmV0dXJuIHtUcnVzdGVkVHlwZVBvbGljeX0gVGhlIHBvbGljeSBjcmVhdGVkIChvciBudWxsLCBpZiBUcnVzdGVkIFR5cGVzXG4gICAqIGFyZSBub3Qgc3VwcG9ydGVkIG9yIGNyZWF0aW5nIHRoZSBwb2xpY3kgZmFpbGVkKS5cbiAgICovXG4gIGNvbnN0IF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kgPSBmdW5jdGlvbiBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgcHVyaWZ5SG9zdEVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIHRydXN0ZWRUeXBlcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFsbG93IHRoZSBjYWxsZXJzIHRvIGNvbnRyb2wgdGhlIHVuaXF1ZSBwb2xpY3kgbmFtZVxuICAgIC8vIGJ5IGFkZGluZyBhIGRhdGEtdHQtcG9saWN5LXN1ZmZpeCB0byB0aGUgc2NyaXB0IGVsZW1lbnQgd2l0aCB0aGUgRE9NUHVyaWZ5LlxuICAgIC8vIFBvbGljeSBjcmVhdGlvbiB3aXRoIGR1cGxpY2F0ZSBuYW1lcyB0aHJvd3MgaW4gVHJ1c3RlZCBUeXBlcy5cbiAgICBsZXQgc3VmZml4ID0gbnVsbDtcbiAgICBjb25zdCBBVFRSX05BTUUgPSAnZGF0YS10dC1wb2xpY3ktc3VmZml4JztcbiAgICBpZiAocHVyaWZ5SG9zdEVsZW1lbnQgJiYgcHVyaWZ5SG9zdEVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpIHtcbiAgICAgIHN1ZmZpeCA9IHB1cmlmeUhvc3RFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgIH1cbiAgICBjb25zdCBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShwb2xpY3lOYW1lLCB7XG4gICAgICAgIGNyZWF0ZUhUTUwoaHRtbCkge1xuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVTY3JpcHRVUkwoc2NyaXB0VXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHNjcmlwdFVybDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy8gUG9saWN5IGNyZWF0aW9uIGZhaWxlZCAobW9zdCBsaWtlbHkgYW5vdGhlciBET01QdXJpZnkgc2NyaXB0IGhhc1xuICAgICAgLy8gYWxyZWFkeSBydW4pLiBTa2lwIGNyZWF0aW5nIHRoZSBwb2xpY3ksIGFzIHRoaXMgd2lsbCBvbmx5IGNhdXNlIGVycm9yc1xuICAgICAgLy8gaWYgVFQgYXJlIGVuZm9yY2VkLlxuICAgICAgY29uc29sZS53YXJuKCdUcnVzdGVkVHlwZXMgcG9saWN5ICcgKyBwb2xpY3lOYW1lICsgJyBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gY3JlYXRlRE9NUHVyaWZ5KCkge1xuICAgIGxldCB3aW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGdldEdsb2JhbCgpO1xuICAgIGNvbnN0IERPTVB1cmlmeSA9IHJvb3QgPT4gY3JlYXRlRE9NUHVyaWZ5KHJvb3QpO1xuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBsYWJlbCwgZXhwb3NlZCBmb3IgZWFzaWVyIGNoZWNrc1xuICAgICAqIGlmIERPTVB1cmlmeSBpcyB1cCB0byBkYXRlIG9yIG5vdFxuICAgICAqL1xuICAgIERPTVB1cmlmeS52ZXJzaW9uID0gJzMuMS42JztcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgRE9NUHVyaWZ5IHJlbW92ZWQgZHVyaW5nIHNhbml0YXRpb24uXG4gICAgICogRW1wdHkgaWYgbm90aGluZyB3YXMgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuZG9jdW1lbnQpIHtcbiAgICAgIC8vIE5vdCBydW5uaW5nIGluIGEgYnJvd3NlciwgcHJvdmlkZSBhIGZhY3RvcnkgZnVuY3Rpb25cbiAgICAgIC8vIHNvIHRoYXQgeW91IGNhbiBwYXNzIHlvdXIgb3duIFdpbmRvd1xuICAgICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICAgIH1cbiAgICBsZXQge1xuICAgICAgZG9jdW1lbnRcbiAgICB9ID0gd2luZG93O1xuICAgIGNvbnN0IG9yaWdpbmFsRG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gb3JpZ2luYWxEb2N1bWVudC5jdXJyZW50U2NyaXB0O1xuICAgIGNvbnN0IHtcbiAgICAgIERvY3VtZW50RnJhZ21lbnQsXG4gICAgICBIVE1MVGVtcGxhdGVFbGVtZW50LFxuICAgICAgTm9kZSxcbiAgICAgIEVsZW1lbnQsXG4gICAgICBOb2RlRmlsdGVyLFxuICAgICAgTmFtZWROb2RlTWFwID0gd2luZG93Lk5hbWVkTm9kZU1hcCB8fCB3aW5kb3cuTW96TmFtZWRBdHRyTWFwLFxuICAgICAgSFRNTEZvcm1FbGVtZW50LFxuICAgICAgRE9NUGFyc2VyLFxuICAgICAgdHJ1c3RlZFR5cGVzXG4gICAgfSA9IHdpbmRvdztcbiAgICBjb25zdCBFbGVtZW50UHJvdG90eXBlID0gRWxlbWVudC5wcm90b3R5cGU7XG4gICAgY29uc3QgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgICBjb25zdCByZW1vdmUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ3JlbW92ZScpO1xuICAgIGNvbnN0IGdldE5leHRTaWJsaW5nID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICduZXh0U2libGluZycpO1xuICAgIGNvbnN0IGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgICBjb25zdCBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7XG5cbiAgICAvLyBBcyBwZXIgaXNzdWUgIzQ3LCB0aGUgd2ViLWNvbXBvbmVudHMgcmVnaXN0cnkgaXMgaW5oZXJpdGVkIGJ5IGFcbiAgICAvLyBuZXcgZG9jdW1lbnQgY3JlYXRlZCB2aWEgY3JlYXRlSFRNTERvY3VtZW50LiBBcyBwZXIgdGhlIHNwZWNcbiAgICAvLyAoaHR0cDovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3JlYXRpbmctYW5kLXBhc3NpbmctcmVnaXN0cmllcylcbiAgICAvLyBhIG5ldyBlbXB0eSByZWdpc3RyeSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0ZW1wbGF0ZSBjb250ZW50cyBvd25lclxuICAgIC8vIGRvY3VtZW50LCBzbyB3ZSB1c2UgdGhhdCBhcyBvdXIgcGFyZW50IGRvY3VtZW50IHRvIGVuc3VyZSBub3RoaW5nXG4gICAgLy8gaXMgaW5oZXJpdGVkLlxuICAgIGlmICh0eXBlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQgJiYgdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50ID0gdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdHJ1c3RlZFR5cGVzUG9saWN5O1xuICAgIGxldCBlbXB0eUhUTUwgPSAnJztcbiAgICBjb25zdCB7XG4gICAgICBpbXBsZW1lbnRhdGlvbixcbiAgICAgIGNyZWF0ZU5vZGVJdGVyYXRvcixcbiAgICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQsXG4gICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZVxuICAgIH0gPSBkb2N1bWVudDtcbiAgICBjb25zdCB7XG4gICAgICBpbXBvcnROb2RlXG4gICAgfSA9IG9yaWdpbmFsRG9jdW1lbnQ7XG4gICAgbGV0IGhvb2tzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2Ugd2hldGhlciB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgcnVubmluZyB0aGUgZnVsbCBET01QdXJpZnkuXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gdHlwZW9mIGVudHJpZXMgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGdldFBhcmVudE5vZGUgPT09ICdmdW5jdGlvbicgJiYgaW1wbGVtZW50YXRpb24gJiYgaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qge1xuICAgICAgTVVTVEFDSEVfRVhQUixcbiAgICAgIEVSQl9FWFBSLFxuICAgICAgVE1QTElUX0VYUFIsXG4gICAgICBEQVRBX0FUVFIsXG4gICAgICBBUklBX0FUVFIsXG4gICAgICBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICAgIEFUVFJfV0hJVEVTUEFDRSxcbiAgICAgIENVU1RPTV9FTEVNRU5UXG4gICAgfSA9IEVYUFJFU1NJT05TO1xuICAgIGxldCB7XG4gICAgICBJU19BTExPV0VEX1VSSTogSVNfQUxMT1dFRF9VUkkkMVxuICAgIH0gPSBFWFBSRVNTSU9OUztcblxuICAgIC8qKlxuICAgICAqIFdlIGNvbnNpZGVyIHRoZSBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBiZWxvdyB0byBiZSBzYWZlLiBJZGVhbGx5XG4gICAgICogZG9uJ3QgYWRkIGFueSBuZXcgb25lcyBidXQgZmVlbCBmcmVlIHRvIHJlbW92ZSB1bndhbnRlZCBvbmVzLlxuICAgICAqL1xuXG4gICAgLyogYWxsb3dlZCBlbGVtZW50IG5hbWVzICovXG4gICAgbGV0IEFMTE9XRURfVEFHUyA9IG51bGw7XG4gICAgY29uc3QgREVGQVVMVF9BTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLmh0bWwkMSwgLi4uc3ZnJDEsIC4uLnN2Z0ZpbHRlcnMsIC4uLm1hdGhNbCQxLCAuLi50ZXh0XSk7XG5cbiAgICAvKiBBbGxvd2VkIGF0dHJpYnV0ZSBuYW1lcyAqL1xuICAgIGxldCBBTExPV0VEX0FUVFIgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9BVFRSID0gYWRkVG9TZXQoe30sIFsuLi5odG1sLCAuLi5zdmcsIC4uLm1hdGhNbCwgLi4ueG1sXSk7XG5cbiAgICAvKlxuICAgICAqIENvbmZpZ3VyZSBob3cgRE9NUFVyaWZ5IHNob3VsZCBoYW5kbGUgY3VzdG9tIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgY3VzdG9taXplZCBidWlsdC1pbiBlbGVtZW50cy5cbiAgICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSB0YWdOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGN1c3RvbSBlbGVtZW50cylcbiAgICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSBhdHRyaWJ1dGVOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGF0dHJpYnV0ZXMgbm90IG9uIHRoZSBhbGxvdyBsaXN0KVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIGFsbG93IGN1c3RvbSBlbGVtZW50cyBkZXJpdmVkIGZyb20gYnVpbHQtaW5zIGlmIHRoZXkgcGFzcyBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2suIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAgICovXG4gICAgbGV0IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoY3JlYXRlKG51bGwsIHtcbiAgICAgIHRhZ05hbWVDaGVjazoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVOYW1lQ2hlY2s6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LFxuICAgICAgYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiB0YWdzIChvdmVycmlkZXMgQUxMT1dFRF9UQUdTL0FERF9UQUdTKSAqL1xuICAgIGxldCBGT1JCSURfVEFHUyA9IG51bGw7XG5cbiAgICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiBhdHRyaWJ1dGVzIChvdmVycmlkZXMgQUxMT1dFRF9BVFRSL0FERF9BVFRSKSAqL1xuICAgIGxldCBGT1JCSURfQVRUUiA9IG51bGw7XG5cbiAgICAvKiBEZWNpZGUgaWYgQVJJQSBhdHRyaWJ1dGVzIGFyZSBva2F5ICovXG4gICAgbGV0IEFMTE9XX0FSSUFfQVRUUiA9IHRydWU7XG5cbiAgICAvKiBEZWNpZGUgaWYgY3VzdG9tIGRhdGEgYXR0cmlidXRlcyBhcmUgb2theSAqL1xuICAgIGxldCBBTExPV19EQVRBX0FUVFIgPSB0cnVlO1xuXG4gICAgLyogRGVjaWRlIGlmIHVua25vd24gcHJvdG9jb2xzIGFyZSBva2F5ICovXG4gICAgbGV0IEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gZmFsc2U7XG5cbiAgICAvKiBEZWNpZGUgaWYgc2VsZi1jbG9zaW5nIHRhZ3MgaW4gYXR0cmlidXRlcyBhcmUgYWxsb3dlZC5cbiAgICAgKiBVc3VhbGx5IHJlbW92ZWQgZHVlIHRvIGEgbVhTUyBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG4gICAgbGV0IEFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiA9IHRydWU7XG5cbiAgICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZm9yIGNvbW1vbiB0ZW1wbGF0ZSBlbmdpbmVzLlxuICAgICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGRhdGEgYXR0cmlidXRlcywgbXVzdGFjaGVzIGFuZCBFUkJcbiAgICAgKi9cbiAgICBsZXQgU0FGRV9GT1JfVEVNUExBVEVTID0gZmFsc2U7XG5cbiAgICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZXZlbiBmb3IgWE1MIHVzZWQgd2l0aGluIEhUTUwgYW5kIGFsaWtlLlxuICAgICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGNvbW1lbnRzIHdoZW4gY29udGFpbmluZyByaXNreSBjb250ZW50LlxuICAgICAqL1xuICAgIGxldCBTQUZFX0ZPUl9YTUwgPSB0cnVlO1xuXG4gICAgLyogRGVjaWRlIGlmIGRvY3VtZW50IHdpdGggPGh0bWw+Li4uIHNob3VsZCBiZSByZXR1cm5lZCAqL1xuICAgIGxldCBXSE9MRV9ET0NVTUVOVCA9IGZhbHNlO1xuXG4gICAgLyogVHJhY2sgd2hldGhlciBjb25maWcgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBpbnN0YW5jZSBvZiBET01QdXJpZnkuICovXG4gICAgbGV0IFNFVF9DT05GSUcgPSBmYWxzZTtcblxuICAgIC8qIERlY2lkZSBpZiBhbGwgZWxlbWVudHMgKGUuZy4gc3R5bGUsIHNjcmlwdCkgbXVzdCBiZSBjaGlsZHJlbiBvZlxuICAgICAqIGRvY3VtZW50LmJvZHkuIEJ5IGRlZmF1bHQsIGJyb3dzZXJzIG1pZ2h0IG1vdmUgdGhlbSB0byBkb2N1bWVudC5oZWFkICovXG4gICAgbGV0IEZPUkNFX0JPRFkgPSBmYWxzZTtcblxuICAgIC8qIERlY2lkZSBpZiBhIERPTSBgSFRNTEJvZHlFbGVtZW50YCBzaG91bGQgYmUgcmV0dXJuZWQsIGluc3RlYWQgb2YgYSBodG1sXG4gICAgICogc3RyaW5nIChvciBhIFRydXN0ZWRIVE1MIG9iamVjdCBpZiBUcnVzdGVkIFR5cGVzIGFyZSBzdXBwb3J0ZWQpLlxuICAgICAqIElmIGBXSE9MRV9ET0NVTUVOVGAgaXMgZW5hYmxlZCBhIGBIVE1MSHRtbEVsZW1lbnRgIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZFxuICAgICAqL1xuICAgIGxldCBSRVRVUk5fRE9NID0gZmFsc2U7XG5cbiAgICAvKiBEZWNpZGUgaWYgYSBET00gYERvY3VtZW50RnJhZ21lbnRgIHNob3VsZCBiZSByZXR1cm5lZCwgaW5zdGVhZCBvZiBhIGh0bWxcbiAgICAgKiBzdHJpbmcgIChvciBhIFRydXN0ZWRIVE1MIG9iamVjdCBpZiBUcnVzdGVkIFR5cGVzIGFyZSBzdXBwb3J0ZWQpICovXG4gICAgbGV0IFJFVFVSTl9ET01fRlJBR01FTlQgPSBmYWxzZTtcblxuICAgIC8qIFRyeSB0byByZXR1cm4gYSBUcnVzdGVkIFR5cGUgb2JqZWN0IGluc3RlYWQgb2YgYSBzdHJpbmcsIHJldHVybiBhIHN0cmluZyBpblxuICAgICAqIGNhc2UgVHJ1c3RlZCBUeXBlcyBhcmUgbm90IHN1cHBvcnRlZCAgKi9cbiAgICBsZXQgUkVUVVJOX1RSVVNURURfVFlQRSA9IGZhbHNlO1xuXG4gICAgLyogT3V0cHV0IHNob3VsZCBiZSBmcmVlIGZyb20gRE9NIGNsb2JiZXJpbmcgYXR0YWNrcz9cbiAgICAgKiBUaGlzIHNhbml0aXplcyBtYXJrdXBzIG5hbWVkIHdpdGggY29sbGlkaW5nLCBjbG9iYmVyYWJsZSBidWlsdC1pbiBET00gQVBJcy5cbiAgICAgKi9cbiAgICBsZXQgU0FOSVRJWkVfRE9NID0gdHJ1ZTtcblxuICAgIC8qIEFjaGlldmUgZnVsbCBET00gQ2xvYmJlcmluZyBwcm90ZWN0aW9uIGJ5IGlzb2xhdGluZyB0aGUgbmFtZXNwYWNlIG9mIG5hbWVkXG4gICAgICogcHJvcGVydGllcyBhbmQgSlMgdmFyaWFibGVzLCBtaXRpZ2F0aW5nIGF0dGFja3MgdGhhdCBhYnVzZSB0aGUgSFRNTC9ET00gc3BlYyBydWxlcy5cbiAgICAgKlxuICAgICAqIEhUTUwvRE9NIHNwZWMgcnVsZXMgdGhhdCBlbmFibGUgRE9NIENsb2JiZXJpbmc6XG4gICAgICogICAtIE5hbWVkIEFjY2VzcyBvbiBXaW5kb3cgKMKnNy4zLjMpXG4gICAgICogICAtIERPTSBUcmVlIEFjY2Vzc29ycyAowqczLjEuNSlcbiAgICAgKiAgIC0gRm9ybSBFbGVtZW50IFBhcmVudC1DaGlsZCBSZWxhdGlvbnMgKMKnNC4xMC4zKVxuICAgICAqICAgLSBJZnJhbWUgc3JjZG9jIC8gTmVzdGVkIFdpbmRvd1Byb3hpZXMgKMKnNC44LjUpXG4gICAgICogICAtIEhUTUxDb2xsZWN0aW9uICjCpzQuMi4xMC4yKVxuICAgICAqXG4gICAgICogTmFtZXNwYWNlIGlzb2xhdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBwcmVmaXhpbmcgYGlkYCBhbmQgYG5hbWVgIGF0dHJpYnV0ZXNcbiAgICAgKiB3aXRoIGEgY29uc3RhbnQgc3RyaW5nLCBpLmUuLCBgdXNlci1jb250ZW50LWBcbiAgICAgKi9cbiAgICBsZXQgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBmYWxzZTtcbiAgICBjb25zdCBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggPSAndXNlci1jb250ZW50LSc7XG5cbiAgICAvKiBLZWVwIGVsZW1lbnQgY29udGVudCB3aGVuIHJlbW92aW5nIGVsZW1lbnQ/ICovXG4gICAgbGV0IEtFRVBfQ09OVEVOVCA9IHRydWU7XG5cbiAgICAvKiBJZiBhIGBOb2RlYCBpcyBwYXNzZWQgdG8gc2FuaXRpemUoKSwgdGhlbiBwZXJmb3JtcyBzYW5pdGl6YXRpb24gaW4tcGxhY2UgaW5zdGVhZFxuICAgICAqIG9mIGltcG9ydGluZyBpdCBpbnRvIGEgbmV3IERvY3VtZW50IGFuZCByZXR1cm5pbmcgYSBzYW5pdGl6ZWQgY29weSAqL1xuICAgIGxldCBJTl9QTEFDRSA9IGZhbHNlO1xuXG4gICAgLyogQWxsb3cgdXNhZ2Ugb2YgcHJvZmlsZXMgbGlrZSBodG1sLCBzdmcgYW5kIG1hdGhNbCAqL1xuICAgIGxldCBVU0VfUFJPRklMRVMgPSB7fTtcblxuICAgIC8qIFRhZ3MgdG8gaWdub3JlIGNvbnRlbnQgb2Ygd2hlbiBLRUVQX0NPTlRFTlQgaXMgdHJ1ZSAqL1xuICAgIGxldCBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFsnYW5ub3RhdGlvbi14bWwnLCAnYXVkaW8nLCAnY29sZ3JvdXAnLCAnZGVzYycsICdmb3JlaWdub2JqZWN0JywgJ2hlYWQnLCAnaWZyYW1lJywgJ21hdGgnLCAnbWknLCAnbW4nLCAnbW8nLCAnbXMnLCAnbXRleHQnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdwbGFpbnRleHQnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3N2ZycsICd0ZW1wbGF0ZScsICd0aGVhZCcsICd0aXRsZScsICd2aWRlbycsICd4bXAnXSk7XG5cbiAgICAvKiBUYWdzIHRoYXQgYXJlIHNhZmUgZm9yIGRhdGE6IFVSSXMgKi9cbiAgICBsZXQgREFUQV9VUklfVEFHUyA9IG51bGw7XG4gICAgY29uc3QgREVGQVVMVF9EQVRBX1VSSV9UQUdTID0gYWRkVG9TZXQoe30sIFsnYXVkaW8nLCAndmlkZW8nLCAnaW1nJywgJ3NvdXJjZScsICdpbWFnZScsICd0cmFjayddKTtcblxuICAgIC8qIEF0dHJpYnV0ZXMgc2FmZSBmb3IgdmFsdWVzIGxpa2UgXCJqYXZhc2NyaXB0OlwiICovXG4gICAgbGV0IFVSSV9TQUZFX0FUVFJJQlVURVMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyA9IGFkZFRvU2V0KHt9LCBbJ2FsdCcsICdjbGFzcycsICdmb3InLCAnaWQnLCAnbGFiZWwnLCAnbmFtZScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3JvbGUnLCAnc3VtbWFyeScsICd0aXRsZScsICd2YWx1ZScsICdzdHlsZScsICd4bWxucyddKTtcbiAgICBjb25zdCBNQVRITUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuICAgIGNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGNvbnN0IEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xuICAgIC8qIERvY3VtZW50IG5hbWVzcGFjZSAqL1xuICAgIGxldCBOQU1FU1BBQ0UgPSBIVE1MX05BTUVTUEFDRTtcbiAgICBsZXQgSVNfRU1QVFlfSU5QVVQgPSBmYWxzZTtcblxuICAgIC8qIEFsbG93ZWQgWEhUTUwrWE1MIG5hbWVzcGFjZXMgKi9cbiAgICBsZXQgQUxMT1dFRF9OQU1FU1BBQ0VTID0gbnVsbDtcbiAgICBjb25zdCBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUyA9IGFkZFRvU2V0KHt9LCBbTUFUSE1MX05BTUVTUEFDRSwgU1ZHX05BTUVTUEFDRSwgSFRNTF9OQU1FU1BBQ0VdLCBzdHJpbmdUb1N0cmluZyk7XG5cbiAgICAvKiBQYXJzaW5nIG9mIHN0cmljdCBYSFRNTCBkb2N1bWVudHMgKi9cbiAgICBsZXQgUEFSU0VSX01FRElBX1RZUEUgPSBudWxsO1xuICAgIGNvbnN0IFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMgPSBbJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsICd0ZXh0L2h0bWwnXTtcbiAgICBjb25zdCBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFID0gJ3RleHQvaHRtbCc7XG4gICAgbGV0IHRyYW5zZm9ybUNhc2VGdW5jID0gbnVsbDtcblxuICAgIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gY29uZmlnIHRvIHBhc3MgdG8gaG9va3MgKi9cbiAgICBsZXQgQ09ORklHID0gbnVsbDtcblxuICAgIC8qIElkZWFsbHksIGRvIG5vdCB0b3VjaCBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgKi9cbiAgICAvKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICovXG5cbiAgICBjb25zdCBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICBjb25zdCBpc1JlZ2V4T3JGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzUmVnZXhPckZ1bmN0aW9uKHRlc3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRlc3RWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0ZXN0VmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3BhcnNlQ29uZmlnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGNmZyBvcHRpb25hbCBjb25maWcgbGl0ZXJhbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgY29uc3QgX3BhcnNlQ29uZmlnID0gZnVuY3Rpb24gX3BhcnNlQ29uZmlnKCkge1xuICAgICAgbGV0IGNmZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICBpZiAoQ09ORklHICYmIENPTkZJRyA9PT0gY2ZnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gdGFtcGVyaW5nICovXG4gICAgICBpZiAoIWNmZyB8fCB0eXBlb2YgY2ZnICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjZmcgPSB7fTtcbiAgICAgIH1cblxuICAgICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gcHJvdG90eXBlIHBvbGx1dGlvbiAqL1xuICAgICAgY2ZnID0gY2xvbmUoY2ZnKTtcbiAgICAgIFBBUlNFUl9NRURJQV9UWVBFID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xID8gREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA6IGNmZy5QQVJTRVJfTUVESUFfVFlQRTtcblxuICAgICAgLy8gSFRNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzIGFyZSBub3QgY2FzZS1zZW5zaXRpdmUsIGNvbnZlcnRpbmcgdG8gbG93ZXJjYXNlLiBLZWVwaW5nIFhIVE1MIGFzIGlzLlxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgPSBQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgPyBzdHJpbmdUb1N0cmluZyA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuXG4gICAgICAvKiBTZXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG4gICAgICBBTExPV0VEX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX1RBR1MnKSA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0FMTE9XRURfVEFHUztcbiAgICAgIEFMTE9XRURfQVRUUiA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0FMTE9XRURfQVRUUicpID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IERFRkFVTFRfQUxMT1dFRF9BVFRSO1xuICAgICAgQUxMT1dFRF9OQU1FU1BBQ0VTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUxMT1dFRF9OQU1FU1BBQ0VTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfTkFNRVNQQUNFUywgc3RyaW5nVG9TdHJpbmcpIDogREVGQVVMVF9BTExPV0VEX05BTUVTUEFDRVM7XG4gICAgICBVUklfU0FGRV9BVFRSSUJVVEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX1VSSV9TQUZFX0FUVFInKSA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgY2ZnLkFERF9VUklfU0FGRV9BVFRSLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIHRyYW5zZm9ybUNhc2VGdW5jIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICApIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICA6IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUztcbiAgICAgIERBVEFfVVJJX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBRERfREFUQV9VUklfVEFHUycpID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9EQVRBX1VSSV9UQUdTKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICBjZmcuQUREX0RBVEFfVVJJX1RBR1MsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIDogREVGQVVMVF9EQVRBX1VSSV9UQUdTO1xuICAgICAgRk9SQklEX0NPTlRFTlRTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnRk9SQklEX0NPTlRFTlRTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9DT05URU5UUywgdHJhbnNmb3JtQ2FzZUZ1bmMpIDogREVGQVVMVF9GT1JCSURfQ09OVEVOVFM7XG4gICAgICBGT1JCSURfVEFHUyA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0ZPUkJJRF9UQUdTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiB7fTtcbiAgICAgIEZPUkJJRF9BVFRSID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnRk9SQklEX0FUVFInKSA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IHt9O1xuICAgICAgVVNFX1BST0ZJTEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnVVNFX1BST0ZJTEVTJykgPyBjZmcuVVNFX1BST0ZJTEVTIDogZmFsc2U7XG4gICAgICBBTExPV19BUklBX0FUVFIgPSBjZmcuQUxMT1dfQVJJQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgICBBTExPV19EQVRBX0FUVFIgPSBjZmcuQUxMT1dfREFUQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgICBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGNmZy5BTExPV19VTktOT1dOX1BST1RPQ09MUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSID0gY2ZnLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgU0FGRV9GT1JfVEVNUExBVEVTID0gY2ZnLlNBRkVfRk9SX1RFTVBMQVRFUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgU0FGRV9GT1JfWE1MID0gY2ZnLlNBRkVfRk9SX1hNTCAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIFJFVFVSTl9ET00gPSBjZmcuUkVUVVJOX0RPTSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGNmZy5SRVRVUk5fRE9NX0ZSQUdNRU5UIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIEZPUkNFX0JPRFkgPSBjZmcuRk9SQ0VfQk9EWSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgU0FOSVRJWkVfRE9NID0gY2ZnLlNBTklUSVpFX0RPTSAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBjZmcuU0FOSVRJWkVfTkFNRURfUFJPUFMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIEtFRVBfQ09OVEVOVCA9IGNmZy5LRUVQX0NPTlRFTlQgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICAgIElOX1BMQUNFID0gY2ZnLklOX1BMQUNFIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBJU19BTExPV0VEX1VSSSQxID0gY2ZnLkFMTE9XRURfVVJJX1JFR0VYUCB8fCBJU19BTExPV0VEX1VSSTtcbiAgICAgIE5BTUVTUEFDRSA9IGNmZy5OQU1FU1BBQ0UgfHwgSFRNTF9OQU1FU1BBQ0U7XG4gICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORyA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyB8fCB7fTtcbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaztcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgdHlwZW9mIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPT09ICdib29sZWFuJykge1xuICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzO1xuICAgICAgfVxuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICBBTExPV19EQVRBX0FUVFIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIFJFVFVSTl9ET00gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBQYXJzZSBwcm9maWxlIGluZm8gKi9cbiAgICAgIGlmIChVU0VfUFJPRklMRVMpIHtcbiAgICAgICAgQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIHRleHQpO1xuICAgICAgICBBTExPV0VEX0FUVFIgPSBbXTtcbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5odG1sID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBodG1sJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgaHRtbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5zdmcgPT09IHRydWUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIHN2ZyQxKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLm1hdGhNbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgbWF0aE1sJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgbWF0aE1sKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogTWVyZ2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG4gICAgICBpZiAoY2ZnLkFERF9UQUdTKSB7XG4gICAgICAgIGlmIChBTExPV0VEX1RBR1MgPT09IERFRkFVTFRfQUxMT1dFRF9UQUdTKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTID0gY2xvbmUoQUxMT1dFRF9UQUdTKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGNmZy5BRERfVEFHUywgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuICAgICAgaWYgKGNmZy5BRERfQVRUUikge1xuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSID09PSBERUZBVUxUX0FMTE9XRURfQVRUUikge1xuICAgICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBjZmcuQUREX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQUREX1VSSV9TQUZFX0FUVFIpIHtcbiAgICAgICAgYWRkVG9TZXQoVVJJX1NBRkVfQVRUUklCVVRFUywgY2ZnLkFERF9VUklfU0FGRV9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG4gICAgICBpZiAoY2ZnLkZPUkJJRF9DT05URU5UUykge1xuICAgICAgICBpZiAoRk9SQklEX0NPTlRFTlRTID09PSBERUZBVUxUX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgIEZPUkJJRF9DT05URU5UUyA9IGNsb25lKEZPUkJJRF9DT05URU5UUyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVG9TZXQoRk9SQklEX0NPTlRFTlRTLCBjZmcuRk9SQklEX0NPTlRFTlRTLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFkZCAjdGV4dCBpbiBjYXNlIEtFRVBfQ09OVEVOVCBpcyBzZXQgdG8gdHJ1ZSAqL1xuICAgICAgaWYgKEtFRVBfQ09OVEVOVCkge1xuICAgICAgICBBTExPV0VEX1RBR1NbJyN0ZXh0J10gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBBZGQgaHRtbCwgaGVhZCBhbmQgYm9keSB0byBBTExPV0VEX1RBR1MgaW4gY2FzZSBXSE9MRV9ET0NVTUVOVCBpcyB0cnVlICovXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ2h0bWwnLCAnaGVhZCcsICdib2R5J10pO1xuICAgICAgfVxuXG4gICAgICAvKiBBZGQgdGJvZHkgdG8gQUxMT1dFRF9UQUdTIGluIGNhc2UgdGFibGVzIGFyZSBwZXJtaXR0ZWQsIHNlZSAjMjg2LCAjMzY1ICovXG4gICAgICBpZiAoQUxMT1dFRF9UQUdTLnRhYmxlKSB7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWyd0Ym9keSddKTtcbiAgICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgICAgfVxuICAgICAgaWYgKGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWSkge1xuICAgICAgICBpZiAodHlwZW9mIGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSBcImNyZWF0ZUhUTUxcIiBob29rLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgXCJjcmVhdGVTY3JpcHRVUkxcIiBob29rLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5nIFRydXN0ZWRUeXBlcyBwb2xpY3kuXG4gICAgICAgIHRydXN0ZWRUeXBlc1BvbGljeSA9IGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWTtcblxuICAgICAgICAvLyBTaWduIGxvY2FsIHZhcmlhYmxlcyByZXF1aXJlZCBieSBgc2FuaXRpemVgLlxuICAgICAgICBlbXB0eUhUTUwgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCgnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVbmluaXRpYWxpemVkIHBvbGljeSwgYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkb21wdXJpZnkgcG9saWN5LlxuICAgICAgICBpZiAodHJ1c3RlZFR5cGVzUG9saWN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cnVzdGVkVHlwZXNQb2xpY3kgPSBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgY3VycmVudFNjcmlwdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgcG9saWN5IHN1Y2NlZWRlZCBzaWduIGludGVybmFsIHZhcmlhYmxlcy5cbiAgICAgICAgaWYgKHRydXN0ZWRUeXBlc1BvbGljeSAhPT0gbnVsbCAmJiB0eXBlb2YgZW1wdHlIVE1MID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IGZ1cnRoZXIgbWFuaXB1bGF0aW9uIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgICAvLyBOb3QgYXZhaWxhYmxlIGluIElFOCwgU2FmYXJpIDUsIGV0Yy5cbiAgICAgIGlmIChmcmVlemUpIHtcbiAgICAgICAgZnJlZXplKGNmZyk7XG4gICAgICB9XG4gICAgICBDT05GSUcgPSBjZmc7XG4gICAgfTtcbiAgICBjb25zdCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydtaScsICdtbycsICdtbicsICdtcycsICdtdGV4dCddKTtcbiAgICBjb25zdCBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyA9IGFkZFRvU2V0KHt9LCBbJ2ZvcmVpZ25vYmplY3QnLCAnYW5ub3RhdGlvbi14bWwnXSk7XG5cbiAgICAvLyBDZXJ0YWluIGVsZW1lbnRzIGFyZSBhbGxvd2VkIGluIGJvdGggU1ZHIGFuZCBIVE1MXG4gICAgLy8gbmFtZXNwYWNlLiBXZSBuZWVkIHRvIHNwZWNpZnkgdGhlbSBleHBsaWNpdGx5XG4gICAgLy8gc28gdGhhdCB0aGV5IGRvbid0IGdldCBlcnJvbmVvdXNseSBkZWxldGVkIGZyb21cbiAgICAvLyBIVE1MIG5hbWVzcGFjZS5cbiAgICBjb25zdCBDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTID0gYWRkVG9TZXQoe30sIFsndGl0bGUnLCAnc3R5bGUnLCAnZm9udCcsICdhJywgJ3NjcmlwdCddKTtcblxuICAgIC8qIEtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIFNWRyBhbmQgTWF0aE1MIHRhZ3NcbiAgICAgKiBzbyB0aGF0IHdlIGNhbiBwZXJmb3JtIHRoZSBuYW1lc3BhY2UgY2hlY2tzXG4gICAgICogY29ycmVjdGx5LiAqL1xuICAgIGNvbnN0IEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBbLi4uc3ZnJDEsIC4uLnN2Z0ZpbHRlcnMsIC4uLnN2Z0Rpc2FsbG93ZWRdKTtcbiAgICBjb25zdCBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLm1hdGhNbCQxLCAuLi5tYXRoTWxEaXNhbGxvd2VkXSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtFbGVtZW50fSBlbGVtZW50IGEgRE9NIGVsZW1lbnQgd2hvc2UgbmFtZXNwYWNlIGlzIGJlaW5nIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIGZhbHNlIGlmIHRoZSBlbGVtZW50IGhhcyBhXG4gICAgICogIG5hbWVzcGFjZSB0aGF0IGEgc3BlYy1jb21wbGlhbnQgcGFyc2VyIHdvdWxkIG5ldmVyXG4gICAgICogIHJldHVybi4gUmV0dXJuIHRydWUgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbnN0IF9jaGVja1ZhbGlkTmFtZXNwYWNlID0gZnVuY3Rpb24gX2NoZWNrVmFsaWROYW1lc3BhY2UoZWxlbWVudCkge1xuICAgICAgbGV0IHBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgICAgIC8vIEluIEpTRE9NLCBpZiB3ZSdyZSBpbnNpZGUgc2hhZG93IERPTSwgdGhlbiBwYXJlbnROb2RlXG4gICAgICAvLyBjYW4gYmUgbnVsbC4gV2UganVzdCBzaW11bGF0ZSBwYXJlbnQgaW4gdGhpcyBjYXNlLlxuICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC50YWdOYW1lKSB7XG4gICAgICAgIHBhcmVudCA9IHtcbiAgICAgICAgICBuYW1lc3BhY2VVUkk6IE5BTUVTUEFDRSxcbiAgICAgICAgICB0YWdOYW1lOiAndGVtcGxhdGUnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICAgIGNvbnN0IHBhcmVudFRhZ05hbWUgPSBzdHJpbmdUb0xvd2VyQ2FzZShwYXJlbnQudGFnTmFtZSk7XG4gICAgICBpZiAoIUFMTE9XRURfTkFNRVNQQUNFU1tlbGVtZW50Lm5hbWVzcGFjZVVSSV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBIVE1MIG5hbWVzcGFjZSB0byBTVkdcbiAgICAgICAgLy8gaXMgdmlhIDxzdmc+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBNYXRoTUwgdG8gU1ZHIGlzIHZpYWBcbiAgICAgICAgLy8gc3ZnIGlmIHBhcmVudCBpcyBlaXRoZXIgPGFubm90YXRpb24teG1sPiBvciBNYXRoTUxcbiAgICAgICAgLy8gdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHMuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnICYmIChwYXJlbnRUYWdOYW1lID09PSAnYW5ub3RhdGlvbi14bWwnIHx8IE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgaW4gU1ZHXG4gICAgICAgIC8vIHNwZWMuIEFsbCBvdGhlcnMgYXJlIGRpc2FsbG93ZWQgaW4gU1ZHIG5hbWVzcGFjZS5cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gTWF0aE1MXG4gICAgICAgIC8vIGlzIHZpYSA8bWF0aD4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGtpbGxlZC5cbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gTWF0aE1MIGlzIHZpYVxuICAgICAgICAvLyA8bWF0aD4gYW5kIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBNYXRoTUxcbiAgICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBNYXRoTUwgbmFtZXNwYWNlLlxuICAgICAgICByZXR1cm4gQm9vbGVhbihBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gU1ZHIHRvIEhUTUwgaXMgdmlhXG4gICAgICAgIC8vIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzLCBhbmQgZnJvbSBNYXRoTUwgdG8gSFRNTFxuICAgICAgICAvLyBpcyB2aWEgTWF0aE1MIHRleHQgaW50ZWdyYXRpb24gcG9pbnRzXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFICYmICFIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSAmJiAhTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgZGlzYWxsb3cgdGFncyB0aGF0IGFyZSBzcGVjaWZpYyBmb3IgTWF0aE1MXG4gICAgICAgIC8vIG9yIFNWRyBhbmQgc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBIVE1MIG5hbWVzcGFjZVxuICAgICAgICByZXR1cm4gIUFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSAmJiAoQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UU1t0YWdOYW1lXSB8fCAhQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIFhIVE1MIGFuZCBYTUwgZG9jdW1lbnRzIHRoYXQgc3VwcG9ydCBjdXN0b20gbmFtZXNwYWNlc1xuICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJiBBTExPV0VEX05BTUVTUEFDRVNbZWxlbWVudC5uYW1lc3BhY2VVUkldKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29kZSBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwbGFjZSAodGhpcyBtZWFuc1xuICAgICAgLy8gdGhhdCB0aGUgZWxlbWVudCBzb21laG93IGdvdCBuYW1lc3BhY2UgdGhhdCBpcyBub3RcbiAgICAgIC8vIEhUTUwsIFNWRywgTWF0aE1MIG9yIGFsbG93ZWQgdmlhIEFMTE9XRURfTkFNRVNQQUNFUykuXG4gICAgICAvLyBSZXR1cm4gZmFsc2UganVzdCBpbiBjYXNlLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfZm9yY2VSZW1vdmVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgYSBET00gbm9kZVxuICAgICAqL1xuICAgIGNvbnN0IF9mb3JjZVJlbW92ZSA9IGZ1bmN0aW9uIF9mb3JjZVJlbW92ZShub2RlKSB7XG4gICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgZWxlbWVudDogbm9kZVxuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlXG4gICAgICAgIGdldFBhcmVudE5vZGUobm9kZSkucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3JlbW92ZUF0dHJpYnV0ZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lIGFuIEF0dHJpYnV0ZSBuYW1lXG4gICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSBhIERPTSBub2RlXG4gICAgICovXG4gICAgY29uc3QgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbm9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksXG4gICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBudWxsLFxuICAgICAgICAgIGZyb206IG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblxuICAgICAgLy8gV2Ugdm9pZCBhdHRyaWJ1dGUgdmFsdWVzIGZvciB1bnJlbW92YWJsZSBcImlzXCJcIiBhdHRyaWJ1dGVzXG4gICAgICBpZiAobmFtZSA9PT0gJ2lzJyAmJiAhQUxMT1dFRF9BVFRSW25hbWVdKSB7XG4gICAgICAgIGlmIChSRVRVUk5fRE9NIHx8IFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2ZvcmNlUmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9pbml0RG9jdW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZGlydHkgYSBzdHJpbmcgb2YgZGlydHkgbWFya3VwXG4gICAgICogQHJldHVybiB7RG9jdW1lbnR9IGEgRE9NLCBmaWxsZWQgd2l0aCB0aGUgZGlydHkgbWFya3VwXG4gICAgICovXG4gICAgY29uc3QgX2luaXREb2N1bWVudCA9IGZ1bmN0aW9uIF9pbml0RG9jdW1lbnQoZGlydHkpIHtcbiAgICAgIC8qIENyZWF0ZSBhIEhUTUwgZG9jdW1lbnQgKi9cbiAgICAgIGxldCBkb2MgPSBudWxsO1xuICAgICAgbGV0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbnVsbDtcbiAgICAgIGlmIChGT1JDRV9CT0RZKSB7XG4gICAgICAgIGRpcnR5ID0gJzxyZW1vdmU+PC9yZW1vdmU+JyArIGRpcnR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogSWYgRk9SQ0VfQk9EWSBpc24ndCB1c2VkLCBsZWFkaW5nIHdoaXRlc3BhY2UgbmVlZHMgdG8gYmUgcHJlc2VydmVkIG1hbnVhbGx5ICovXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBzdHJpbmdNYXRjaChkaXJ0eSwgL15bXFxyXFxuXFx0IF0rLyk7XG4gICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgICAgfVxuICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJiBOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFJvb3Qgb2YgWEhUTUwgZG9jIG11c3QgY29udGFpbiB4bWxucyBkZWNsYXJhdGlvbiAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvbm9ybWF0aXZlLmh0bWwjc3RyaWN0KVxuICAgICAgICBkaXJ0eSA9ICc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48aGVhZD48L2hlYWQ+PGJvZHk+JyArIGRpcnR5ICsgJzwvYm9keT48L2h0bWw+JztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcnR5UGF5bG9hZCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgLypcbiAgICAgICAqIFVzZSB0aGUgRE9NUGFyc2VyIEFQSSBieSBkZWZhdWx0LCBmYWxsYmFjayBsYXRlciBpZiBuZWVkcyBiZVxuICAgICAgICogRE9NUGFyc2VyIG5vdCB3b3JrIGZvciBzdmcgd2hlbiBoYXMgbXVsdGlwbGUgcm9vdCBlbGVtZW50LlxuICAgICAgICovXG4gICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZGlydHlQYXlsb2FkLCBQQVJTRVJfTUVESUFfVFlQRSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG5cbiAgICAgIC8qIFVzZSBjcmVhdGVIVE1MRG9jdW1lbnQgaW4gY2FzZSBET01QYXJzZXIgaXMgbm90IGF2YWlsYWJsZSAqL1xuICAgICAgaWYgKCFkb2MgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9IElTX0VNUFRZX0lOUFVUID8gZW1wdHlIVE1MIDogZGlydHlQYXlsb2FkO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgLy8gU3ludGF4IGVycm9yIGlmIGRpcnR5UGF5bG9hZCBpcyBpbnZhbGlkIHhtbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5ID0gZG9jLmJvZHkgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGlmIChkaXJ0eSAmJiBsZWFkaW5nV2hpdGVzcGFjZSkge1xuICAgICAgICBib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgLyogV29yayBvbiB3aG9sZSBkb2N1bWVudCBvciBqdXN0IGl0cyBib2R5ICovXG4gICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIFdIT0xFX0RPQ1VNRU5UID8gJ2h0bWwnIDogJ2JvZHknKVswXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBXSE9MRV9ET0NVTUVOVCA/IGRvYy5kb2N1bWVudEVsZW1lbnQgOiBib2R5O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgTm9kZUl0ZXJhdG9yIG9iamVjdCB0aGF0IHlvdSBjYW4gdXNlIHRvIHRyYXZlcnNlIGZpbHRlcmVkIGxpc3RzIG9mIG5vZGVzIG9yIGVsZW1lbnRzIGluIGEgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSByb290IFRoZSByb290IGVsZW1lbnQgb3Igbm9kZSB0byBzdGFydCB0cmF2ZXJzaW5nIG9uLlxuICAgICAqIEByZXR1cm4ge05vZGVJdGVyYXRvcn0gVGhlIGNyZWF0ZWQgTm9kZUl0ZXJhdG9yXG4gICAgICovXG4gICAgY29uc3QgX2NyZWF0ZU5vZGVJdGVyYXRvciA9IGZ1bmN0aW9uIF9jcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LCByb290LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCB8IE5vZGVGaWx0ZXIuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIHwgTm9kZUZpbHRlci5TSE9XX0NEQVRBX1NFQ1RJT04sIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfaXNDbG9iYmVyZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IGVsbSBlbGVtZW50IHRvIGNoZWNrIGZvciBjbG9iYmVyaW5nIGF0dGFja3NcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGNsb2JiZXJlZCwgZmFsc2UgaWYgc2FmZVxuICAgICAqL1xuICAgIGNvbnN0IF9pc0Nsb2JiZXJlZCA9IGZ1bmN0aW9uIF9pc0Nsb2JiZXJlZChlbG0pIHtcbiAgICAgIHJldHVybiBlbG0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQgJiYgKHR5cGVvZiBlbG0ubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0udGV4dENvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHwgIShlbG0uYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHwgdHlwZW9mIGVsbS5yZW1vdmVBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0uaW5zZXJ0QmVmb3JlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0uaGFzQ2hpbGROb2RlcyAhPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBET00gbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG9iamVjdCBvYmplY3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIGEgRE9NIG5vZGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlzIG9iamVjdCBpcyBhIERPTSBub2RlXG4gICAgICovXG4gICAgY29uc3QgX2lzTm9kZSA9IGZ1bmN0aW9uIF9pc05vZGUob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIE5vZGUgPT09ICdmdW5jdGlvbicgJiYgb2JqZWN0IGluc3RhbmNlb2YgTm9kZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2V4ZWN1dGVIb29rXG4gICAgICogRXhlY3V0ZSB1c2VyIGNvbmZpZ3VyYWJsZSBob29rc1xuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSBlbnRyeVBvaW50ICBOYW1lIG9mIHRoZSBob29rJ3MgZW50cnkgcG9pbnRcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBjdXJyZW50Tm9kZSBub2RlIHRvIHdvcmsgb24gd2l0aCB0aGUgaG9va1xuICAgICAqIEBwYXJhbSAge09iamVjdH0gZGF0YSBhZGRpdGlvbmFsIGhvb2sgcGFyYW1ldGVyc1xuICAgICAqL1xuICAgIGNvbnN0IF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgaWYgKCFob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcnJheUZvckVhY2goaG9va3NbZW50cnlQb2ludF0sIGhvb2sgPT4ge1xuICAgICAgICBob29rLmNhbGwoRE9NUHVyaWZ5LCBjdXJyZW50Tm9kZSwgZGF0YSwgQ09ORklHKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfc2FuaXRpemVFbGVtZW50c1xuICAgICAqXG4gICAgICogQHByb3RlY3Qgbm9kZU5hbWVcbiAgICAgKiBAcHJvdGVjdCB0ZXh0Q29udGVudFxuICAgICAqIEBwcm90ZWN0IHJlbW92ZUNoaWxkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gICB7Tm9kZX0gY3VycmVudE5vZGUgdG8gY2hlY2sgZm9yIHBlcm1pc3Npb24gdG8gZXhpc3RcbiAgICAgKiBAcmV0dXJuICB7Qm9vbGVhbn0gdHJ1ZSBpZiBub2RlIHdhcyBraWxsZWQsIGZhbHNlIGlmIGxlZnQgYWxpdmVcbiAgICAgKi9cbiAgICBjb25zdCBfc2FuaXRpemVFbGVtZW50cyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUVsZW1lbnRzKGN1cnJlbnROb2RlKSB7XG4gICAgICBsZXQgY29udGVudCA9IG51bGw7XG5cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcblxuICAgICAgLyogQ2hlY2sgaWYgZWxlbWVudCBpcyBjbG9iYmVyZWQgb3IgY2FuIGNsb2JiZXIgKi9cbiAgICAgIGlmIChfaXNDbG9iYmVyZWQoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBOb3cgbGV0J3MgY2hlY2sgdGhlIGVsZW1lbnQncyB0eXBlIGFuZCBuYW1lICovXG4gICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuXG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLCBjdXJyZW50Tm9kZSwge1xuICAgICAgICB0YWdOYW1lLFxuICAgICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTXG4gICAgICB9KTtcblxuICAgICAgLyogRGV0ZWN0IG1YU1MgYXR0ZW1wdHMgYWJ1c2luZyBuYW1lc3BhY2UgY29uZnVzaW9uICovXG4gICAgICBpZiAoY3VycmVudE5vZGUuaGFzQ2hpbGROb2RlcygpICYmICFfaXNOb2RlKGN1cnJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkKSAmJiByZWdFeHBUZXN0KC88Wy9cXHddL2csIGN1cnJlbnROb2RlLmlubmVySFRNTCkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBhbnkgb2NjdXJyZW5jZSBvZiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAqL1xuICAgICAgaWYgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbikge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogUmVtb3ZlIGFueSBraW5kIG9mIHBvc3NpYmx5IGhhcm1mdWwgY29tbWVudHMgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9YTUwgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5jb21tZW50ICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuZGF0YSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBlbGVtZW50IGlmIGFueXRoaW5nIGZvcmJpZHMgaXRzIHByZXNlbmNlICovXG4gICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY3VzdG9tIGVsZW1lbnQgdG8gaGFuZGxlICovXG4gICAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2lzQmFzaWNDdXN0b21FbGVtZW50KHRhZ05hbWUpKSB7XG4gICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdGFnTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayh0YWdOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEtlZXAgY29udGVudCBleGNlcHQgZm9yIGJhZC1saXN0ZWQgZWxlbWVudHMgKi9cbiAgICAgICAgaWYgKEtFRVBfQ09OVEVOVCAmJiAhRk9SQklEX0NPTlRFTlRTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRDb3VudCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNoaWxkQ291bnQgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZENsb25lID0gY2xvbmVOb2RlKGNoaWxkTm9kZXNbaV0sIHRydWUpO1xuICAgICAgICAgICAgICBjaGlsZENsb25lLl9fcmVtb3ZhbENvdW50ID0gKGN1cnJlbnROb2RlLl9fcmVtb3ZhbENvdW50IHx8IDApICsgMTtcbiAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGRDbG9uZSwgZ2V0TmV4dFNpYmxpbmcoY3VycmVudE5vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIENoZWNrIHdoZXRoZXIgZWxlbWVudCBoYXMgYSB2YWxpZCBuYW1lc3BhY2UgKi9cbiAgICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIV9jaGVja1ZhbGlkTmFtZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogTWFrZSBzdXJlIHRoYXQgb2xkZXIgYnJvd3NlcnMgZG9uJ3QgZ2V0IGZhbGxiYWNrLXRhZyBtWFNTICovXG4gICAgICBpZiAoKHRhZ05hbWUgPT09ICdub3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ25vZW1iZWQnIHx8IHRhZ05hbWUgPT09ICdub2ZyYW1lcycpICYmIHJlZ0V4cFRlc3QoLzxcXC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBTYW5pdGl6ZSBlbGVtZW50IGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUyAmJiBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLnRleHQpIHtcbiAgICAgICAgLyogR2V0IHRoZSBlbGVtZW50J3MgdGV4dCBjb250ZW50ICovXG4gICAgICAgIGNvbnRlbnQgPSBjdXJyZW50Tm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICBjb250ZW50ID0gc3RyaW5nUmVwbGFjZShjb250ZW50LCBleHByLCAnICcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlLnRleHRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgICBlbGVtZW50OiBjdXJyZW50Tm9kZS5jbG9uZU5vZGUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN1cnJlbnROb2RlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2lzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbGNUYWcgTG93ZXJjYXNlIHRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGxjTmFtZSBMb3dlcmNhc2UgYXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIGNvbnN0IF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpIHtcbiAgICAgIC8qIE1ha2Ugc3VyZSBhdHRyaWJ1dGUgY2Fubm90IGNsb2JiZXIgKi9cbiAgICAgIGlmIChTQU5JVElaRV9ET00gJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEFsbG93IHZhbGlkIGRhdGEtKiBhdHRyaWJ1dGVzOiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGFmdGVyIFwiLVwiXG4gICAgICAgICAgKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2VtYmVkZGluZy1jdXN0b20tbm9uLXZpc2libGUtZGF0YS13aXRoLXRoZS1kYXRhLSotYXR0cmlidXRlcylcbiAgICAgICAgICBYTUwtY29tcGF0aWJsZSAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCN4bWwtY29tcGF0aWJsZSBhbmQgaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNkMGU4MDQpXG4gICAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdmFsdWU7IGl0J3MgYWx3YXlzIFVSSSBzYWZlLiAqL1xuICAgICAgaWYgKEFMTE9XX0RBVEFfQVRUUiAmJiAhRk9SQklEX0FUVFJbbGNOYW1lXSAmJiByZWdFeHBUZXN0KERBVEFfQVRUUiwgbGNOYW1lKSkgOyBlbHNlIGlmIChBTExPV19BUklBX0FUVFIgJiYgcmVnRXhwVGVzdChBUklBX0FUVFIsIGxjTmFtZSkpIDsgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAvLyBGaXJzdCBjb25kaXRpb24gZG9lcyBhIHZlcnkgYmFzaWMgY2hlY2sgaWYgYSkgaXQncyBiYXNpY2FsbHkgYSB2YWxpZCBjdXN0b20gZWxlbWVudCB0YWduYW1lIEFORFxuICAgICAgICAvLyBiKSBpZiB0aGUgdGFnTmFtZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICAgIF9pc0Jhc2ljQ3VzdG9tRWxlbWVudChsY1RhZykgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgbGNUYWcpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayhsY1RhZykpICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2ssIGxjTmFtZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKGxjTmFtZSkpIHx8XG4gICAgICAgIC8vIEFsdGVybmF0aXZlLCBzZWNvbmQgY29uZGl0aW9uIGNoZWNrcyBpZiBpdCdzIGFuIGBpc2AtYXR0cmlidXRlLCBBTkRcbiAgICAgICAgLy8gdGhlIHZhbHVlIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrXG4gICAgICAgIGxjTmFtZSA9PT0gJ2lzJyAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdmFsdWUpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayh2YWx1ZSkpKSA7IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBDaGVjayB2YWx1ZSBpcyBzYWZlLiBGaXJzdCwgaXMgYXR0ciBpbmVydD8gSWYgc28sIGlzIHNhZmUgKi9cbiAgICAgIH0gZWxzZSBpZiAoVVJJX1NBRkVfQVRUUklCVVRFU1tsY05hbWVdKSA7IGVsc2UgaWYgKHJlZ0V4cFRlc3QoSVNfQUxMT1dFRF9VUkkkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFLCAnJykpKSA7IGVsc2UgaWYgKChsY05hbWUgPT09ICdzcmMnIHx8IGxjTmFtZSA9PT0gJ3hsaW5rOmhyZWYnIHx8IGxjTmFtZSA9PT0gJ2hyZWYnKSAmJiBsY1RhZyAhPT0gJ3NjcmlwdCcgJiYgc3RyaW5nSW5kZXhPZih2YWx1ZSwgJ2RhdGE6JykgPT09IDAgJiYgREFUQV9VUklfVEFHU1tsY1RhZ10pIDsgZWxzZSBpZiAoQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgJiYgIXJlZ0V4cFRlc3QoSVNfU0NSSVBUX09SX0RBVEEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSwgJycpKSkgOyBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9pc0Jhc2ljQ3VzdG9tRWxlbWVudFxuICAgICAqIGNoZWNrcyBpZiBhdCBsZWFzdCBvbmUgZGFzaCBpcyBpbmNsdWRlZCBpbiB0YWdOYW1lLCBhbmQgaXQncyBub3QgdGhlIGZpcnN0IGNoYXJcbiAgICAgKiBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGNoZWNraW5nIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3ZhbGlkYXRlLWVsZW1lbnQtbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbmFtZSBvZiB0aGUgdGFnIG9mIHRoZSBub2RlIHRvIHNhbml0aXplXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIG5hbWUgbWVldHMgdGhlIGJhc2ljIGNyaXRlcmlhIGZvciBhIGN1c3RvbSBlbGVtZW50LCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICovXG4gICAgY29uc3QgX2lzQmFzaWNDdXN0b21FbGVtZW50ID0gZnVuY3Rpb24gX2lzQmFzaWNDdXN0b21FbGVtZW50KHRhZ05hbWUpIHtcbiAgICAgIHJldHVybiB0YWdOYW1lICE9PSAnYW5ub3RhdGlvbi14bWwnICYmIHN0cmluZ01hdGNoKHRhZ05hbWUsIENVU1RPTV9FTEVNRU5UKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3Nhbml0aXplQXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHByb3RlY3QgYXR0cmlidXRlc1xuICAgICAqIEBwcm90ZWN0IG5vZGVOYW1lXG4gICAgICogQHByb3RlY3QgcmVtb3ZlQXR0cmlidXRlXG4gICAgICogQHByb3RlY3Qgc2V0QXR0cmlidXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBjdXJyZW50Tm9kZSB0byBzYW5pdGl6ZVxuICAgICAqL1xuICAgIGNvbnN0IF9zYW5pdGl6ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiBfc2FuaXRpemVBdHRyaWJ1dGVzKGN1cnJlbnROb2RlKSB7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ2JlZm9yZVNhbml0aXplQXR0cmlidXRlcycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXR0cmlidXRlc1xuICAgICAgfSA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGF0dHJpYnV0ZXM7IGlmIG5vdCB3ZSBtaWdodCBoYXZlIGEgdGV4dCBub2RlICovXG4gICAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaG9va0V2ZW50ID0ge1xuICAgICAgICBhdHRyTmFtZTogJycsXG4gICAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogQUxMT1dFRF9BVFRSXG4gICAgICB9O1xuICAgICAgbGV0IGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDtcblxuICAgICAgLyogR28gYmFja3dhcmRzIG92ZXIgYWxsIGF0dHJpYnV0ZXM7IHNhZmVseSByZW1vdmUgYmFkIG9uZXMgKi9cbiAgICAgIHdoaWxlIChsLS0pIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZXNbbF07XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG5hbWVzcGFjZVVSSSxcbiAgICAgICAgICB2YWx1ZTogYXR0clZhbHVlXG4gICAgICAgIH0gPSBhdHRyO1xuICAgICAgICBjb25zdCBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcbiAgICAgICAgbGV0IHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHJWYWx1ZSA6IHN0cmluZ1RyaW0oYXR0clZhbHVlKTtcblxuICAgICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICAgIGhvb2tFdmVudC5hdHRyTmFtZSA9IGxjTmFtZTtcbiAgICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBob29rRXZlbnQua2VlcEF0dHIgPSB0cnVlO1xuICAgICAgICBob29rRXZlbnQuZm9yY2VLZWVwQXR0ciA9IHVuZGVmaW5lZDsgLy8gQWxsb3dzIGRldmVsb3BlcnMgdG8gc2VlIHRoaXMgaXMgYSBwcm9wZXJ0eSB0aGV5IGNhbiBzZXRcbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgICAgdmFsdWUgPSBob29rRXZlbnQuYXR0clZhbHVlO1xuXG4gICAgICAgIC8qIFdvcmsgYXJvdW5kIGEgc2VjdXJpdHkgaXNzdWUgd2l0aCBjb21tZW50cyBpbnNpZGUgYXR0cmlidXRlcyAqL1xuICAgICAgICBpZiAoU0FGRV9GT1JfWE1MICYmIHJlZ0V4cFRlc3QoLygoLS0hP3xdKT4pfDxcXC8oc3R5bGV8dGl0bGUpL2ksIHZhbHVlKSkge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogRGlkIHRoZSBob29rcyBhcHByb3ZlIG9mIHRoZSBhdHRyaWJ1dGU/ICovXG4gICAgICAgIGlmIChob29rRXZlbnQuZm9yY2VLZWVwQXR0cikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogUmVtb3ZlIGF0dHJpYnV0ZSAqL1xuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcblxuICAgICAgICAvKiBEaWQgdGhlIGhvb2tzIGFwcHJvdmUgb2YgdGhlIGF0dHJpYnV0ZT8gKi9cbiAgICAgICAgaWYgKCFob29rRXZlbnQua2VlcEF0dHIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFdvcmsgYXJvdW5kIGEgc2VjdXJpdHkgaXNzdWUgaW4galF1ZXJ5IDMuMCAqL1xuICAgICAgICBpZiAoIUFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAmJiByZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogU2FuaXRpemUgYXR0cmlidXRlIGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgZXhwciwgJyAnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIElzIGB2YWx1ZWAgdmFsaWQgZm9yIHRoaXMgYXR0cmlidXRlPyAqL1xuICAgICAgICBjb25zdCBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgICAgaWYgKCFfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiB2aWEgbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAgICAgICAgICogUHJlZml4IGlkIGFuZCBuYW1lIGF0dHJpYnV0ZXMgd2l0aCBgdXNlci1jb250ZW50LWBcbiAgICAgICAgICovXG4gICAgICAgIGlmIChTQU5JVElaRV9OQU1FRF9QUk9QUyAmJiAobGNOYW1lID09PSAnaWQnIHx8IGxjTmFtZSA9PT0gJ25hbWUnKSkge1xuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYXR0cmlidXRlIHdpdGggdGhpcyB2YWx1ZVxuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgLy8gUHJlZml4IHRoZSB2YWx1ZSBhbmQgbGF0ZXIgcmUtY3JlYXRlIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FuaXRpemVkIHZhbHVlXG4gICAgICAgICAgdmFsdWUgPSBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggKyB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEhhbmRsZSBhdHRyaWJ1dGVzIHRoYXQgcmVxdWlyZSBUcnVzdGVkIFR5cGVzICovXG4gICAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgJiYgdHlwZW9mIHRydXN0ZWRUeXBlcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRydXN0ZWRUeXBlcy5nZXRBdHRyaWJ1dGVUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZVVSSSkgOyBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1c3RlZFR5cGVzLmdldEF0dHJpYnV0ZVR5cGUobGNUYWcsIGxjTmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnVHJ1c3RlZEhUTUwnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICdUcnVzdGVkU2NyaXB0VVJMJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVTY3JpcHRVUkwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEhhbmRsZSBpbnZhbGlkIGRhdGEtKiBhdHRyaWJ1dGUgc2V0IGJ5IHRyeS1jYXRjaGluZyBpdCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBGYWxsYmFjayB0byBzZXRBdHRyaWJ1dGUoKSBmb3IgYnJvd3Nlci11bnJlY29nbml6ZWQgbmFtZXNwYWNlcyBlLmcuIFwieC1zY2hlbWFcIi4gKi9cbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfaXNDbG9iYmVyZWQoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVBvcChET01QdXJpZnkucmVtb3ZlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuXG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfc2FuaXRpemVTaGFkb3dET01cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0RvY3VtZW50RnJhZ21lbnR9IGZyYWdtZW50IHRvIGl0ZXJhdGUgb3ZlciByZWN1cnNpdmVseVxuICAgICAqL1xuICAgIGNvbnN0IF9zYW5pdGl6ZVNoYWRvd0RPTSA9IGZ1bmN0aW9uIF9zYW5pdGl6ZVNoYWRvd0RPTShmcmFnbWVudCkge1xuICAgICAgbGV0IHNoYWRvd05vZGUgPSBudWxsO1xuICAgICAgY29uc3Qgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlTm9kZUl0ZXJhdG9yKGZyYWdtZW50KTtcblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTScsIGZyYWdtZW50LCBudWxsKTtcbiAgICAgIHdoaWxlIChzaGFkb3dOb2RlID0gc2hhZG93SXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplU2hhZG93Tm9kZScsIHNoYWRvd05vZGUsIG51bGwpO1xuXG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhzaGFkb3dOb2RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogRGVlcCBzaGFkb3cgRE9NIGRldGVjdGVkICovXG4gICAgICAgIGlmIChzaGFkb3dOb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBDaGVjayBhdHRyaWJ1dGVzLCBzYW5pdGl6ZSBpZiBuZWNlc3NhcnkgKi9cbiAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICAgIH1cblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTYW5pdGl6ZVxuICAgICAqIFB1YmxpYyBtZXRob2QgcHJvdmlkaW5nIGNvcmUgc2FuaXRhdGlvbiBmdW5jdGlvbmFsaXR5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIG9iamVjdFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgRE9NUHVyaWZ5LnNhbml0aXplID0gZnVuY3Rpb24gKGRpcnR5KSB7XG4gICAgICBsZXQgY2ZnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICAgIGxldCBpbXBvcnRlZE5vZGUgPSBudWxsO1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIGxldCByZXR1cm5Ob2RlID0gbnVsbDtcbiAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgc3RyaW5nIHRvIHNhbml0aXplLlxuICAgICAgICBETyBOT1QgcmV0dXJuIGVhcmx5LCBhcyB0aGlzIHdpbGwgcmV0dXJuIHRoZSB3cm9uZyB0eXBlIGlmXG4gICAgICAgIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBET00gb2JqZWN0IHJhdGhlciB0aGFuIGEgc3RyaW5nICovXG4gICAgICBJU19FTVBUWV9JTlBVVCA9ICFkaXJ0eTtcbiAgICAgIGlmIChJU19FTVBUWV9JTlBVVCkge1xuICAgICAgICBkaXJ0eSA9ICc8IS0tPic7XG4gICAgICB9XG5cbiAgICAgIC8qIFN0cmluZ2lmeSwgaW4gY2FzZSBkaXJ0eSBpcyBhbiBvYmplY3QgKi9cbiAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnICYmICFfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgICBpZiAodHlwZW9mIGRpcnR5LnRvU3RyaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGlydHkgPSBkaXJ0eS50b1N0cmluZygpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ2RpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCd0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIFJldHVybiBkaXJ0eSBIVE1MIGlmIERPTVB1cmlmeSBjYW5ub3QgcnVuICovXG4gICAgICBpZiAoIURPTVB1cmlmeS5pc1N1cHBvcnRlZCkge1xuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFzc2lnbiBjb25maWcgdmFycyAqL1xuICAgICAgaWYgKCFTRVRfQ09ORklHKSB7XG4gICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgfVxuXG4gICAgICAvKiBDbGVhbiB1cCByZW1vdmVkIGVsZW1lbnRzICovXG4gICAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuXG4gICAgICAvKiBDaGVjayBpZiBkaXJ0eSBpcyBjb3JyZWN0bHkgdHlwZWQgZm9yIElOX1BMQUNFICovXG4gICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBJTl9QTEFDRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgIC8qIERvIHNvbWUgZWFybHkgcHJlLXNhbml0aXphdGlvbiB0byBhdm9pZCB1bnNhZmUgcm9vdCBub2RlcyAqL1xuICAgICAgICBpZiAoZGlydHkubm9kZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZGlydHkubm9kZU5hbWUpO1xuICAgICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ3Jvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGlydHkgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIC8qIElmIGRpcnR5IGlzIGEgRE9NIGVsZW1lbnQsIGFwcGVuZCB0byBhbiBlbXB0eSBkb2N1bWVudCB0byBhdm9pZFxuICAgICAgICAgICBlbGVtZW50cyBiZWluZyBzdHJpcHBlZCBieSB0aGUgcGFyc2VyICovXG4gICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KCc8IS0tLS0+Jyk7XG4gICAgICAgIGltcG9ydGVkTm9kZSA9IGJvZHkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGRpcnR5LCB0cnVlKTtcbiAgICAgICAgaWYgKGltcG9ydGVkTm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLmVsZW1lbnQgJiYgaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgICAvKiBOb2RlIGlzIGFscmVhZHkgYSBib2R5LCB1c2UgYXMgaXMgKi9cbiAgICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGltcG9ydGVkTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtYXBwZW5kXG4gICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChpbXBvcnRlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBFeGl0IGRpcmVjdGx5IGlmIHdlIGhhdmUgbm90aGluZyB0byBkbyAqL1xuICAgICAgICBpZiAoIVJFVFVSTl9ET00gJiYgIVNBRkVfRk9SX1RFTVBMQVRFUyAmJiAhV0hPTEVfRE9DVU1FTlQgJiZcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWluY2x1ZGVzXG4gICAgICAgIGRpcnR5LmluZGV4T2YoJzwnKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzUG9saWN5ICYmIFJFVFVSTl9UUlVTVEVEX1RZUEUgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSkgOiBkaXJ0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGRvY3VtZW50IHRvIHdvcmsgb24gKi9cbiAgICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoZGlydHkpO1xuXG4gICAgICAgIC8qIENoZWNrIHdlIGhhdmUgYSBET00gbm9kZSBmcm9tIHRoZSBkYXRhICovXG4gICAgICAgIGlmICghYm9keSkge1xuICAgICAgICAgIHJldHVybiBSRVRVUk5fRE9NID8gbnVsbCA6IFJFVFVSTl9UUlVTVEVEX1RZUEUgPyBlbXB0eUhUTUwgOiAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBSZW1vdmUgZmlyc3QgZWxlbWVudCBub2RlIChvdXJzKSBpZiBGT1JDRV9CT0RZIGlzIHNldCAqL1xuICAgICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoYm9keS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgLyogR2V0IG5vZGUgaXRlcmF0b3IgKi9cbiAgICAgIGNvbnN0IG5vZGVJdGVyYXRvciA9IF9jcmVhdGVOb2RlSXRlcmF0b3IoSU5fUExBQ0UgPyBkaXJ0eSA6IGJvZHkpO1xuXG4gICAgICAvKiBOb3cgc3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgKi9cbiAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSA9IG5vZGVJdGVyYXRvci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFNoYWRvdyBET00gZGV0ZWN0ZWQsIHNhbml0aXplIGl0ICovXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShjdXJyZW50Tm9kZS5jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMsIHNhbml0aXplIGlmIG5lY2Vzc2FyeSAqL1xuICAgICAgICBfc2FuaXRpemVBdHRyaWJ1dGVzKGN1cnJlbnROb2RlKTtcbiAgICAgIH1cblxuICAgICAgLyogSWYgd2Ugc2FuaXRpemVkIGBkaXJ0eWAgaW4tcGxhY2UsIHJldHVybiBpdC4gKi9cbiAgICAgIGlmIChJTl9QTEFDRSkge1xuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICB9XG5cbiAgICAgIC8qIFJldHVybiBzYW5pdGl6ZWQgc3RyaW5nIG9yIERPTSAqL1xuICAgICAgaWYgKFJFVFVSTl9ET00pIHtcbiAgICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICByZXR1cm5Ob2RlID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudC5jYWxsKGJvZHkub3duZXJEb2N1bWVudCk7XG4gICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICAgICAgcmV0dXJuTm9kZS5hcHBlbmRDaGlsZChib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Ob2RlID0gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3QgfHwgQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3Rtb2RlKSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIEFkb3B0Tm9kZSgpIGlzIG5vdCB1c2VkIGJlY2F1c2UgaW50ZXJuYWwgc3RhdGUgaXMgbm90IHJlc2V0XG4gICAgICAgICAgICAoZS5nLiB0aGUgcGFzdCBuYW1lcyBtYXAgb2YgYSBIVE1MRm9ybUVsZW1lbnQpLCB0aGlzIGlzIHNhZmVcbiAgICAgICAgICAgIGluIHRoZW9yeSBidXQgd2Ugd291bGQgcmF0aGVyIG5vdCByaXNrIGFub3RoZXIgYXR0YWNrIHZlY3Rvci5cbiAgICAgICAgICAgIFRoZSBzdGF0ZSB0aGF0IGlzIGNsb25lZCBieSBpbXBvcnROb2RlKCkgaXMgZXhwbGljaXRseSBkZWZpbmVkXG4gICAgICAgICAgICBieSB0aGUgc3BlY3MuXG4gICAgICAgICAgKi9cbiAgICAgICAgICByZXR1cm5Ob2RlID0gaW1wb3J0Tm9kZS5jYWxsKG9yaWdpbmFsRG9jdW1lbnQsIHJldHVybk5vZGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgICAgfVxuICAgICAgbGV0IHNlcmlhbGl6ZWRIVE1MID0gV0hPTEVfRE9DVU1FTlQgPyBib2R5Lm91dGVySFRNTCA6IGJvZHkuaW5uZXJIVE1MO1xuXG4gICAgICAvKiBTZXJpYWxpemUgZG9jdHlwZSBpZiBhbGxvd2VkICovXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQgJiYgQUxMT1dFRF9UQUdTWychZG9jdHlwZSddICYmIGJvZHkub3duZXJEb2N1bWVudCAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICYmIHJlZ0V4cFRlc3QoRE9DVFlQRV9OQU1FLCBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSkge1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9ICc8IURPQ1RZUEUgJyArIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgKyAnPlxcbicgKyBzZXJpYWxpemVkSFRNTDtcbiAgICAgIH1cblxuICAgICAgLyogU2FuaXRpemUgZmluYWwgc3RyaW5nIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICBzZXJpYWxpemVkSFRNTCA9IHN0cmluZ1JlcGxhY2Uoc2VyaWFsaXplZEhUTUwsIGV4cHIsICcgJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoc2VyaWFsaXplZEhUTUwpIDogc2VyaWFsaXplZEhUTUw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIG9uY2VcbiAgICAgKiBzZXRDb25maWdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGNmZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgIFNFVF9DT05GSUcgPSB0cnVlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSB0aGUgY29uZmlndXJhdGlvblxuICAgICAqIGNsZWFyQ29uZmlnXG4gICAgICpcbiAgICAgKi9cbiAgICBET01QdXJpZnkuY2xlYXJDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBDT05GSUcgPSBudWxsO1xuICAgICAgU0VUX0NPTkZJRyA9IGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIGNoZWNrIGlmIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgKiBVc2VzIGxhc3Qgc2V0IGNvbmZpZywgaWYgYW55LiBPdGhlcndpc2UsIHVzZXMgY29uZmlnIGRlZmF1bHRzLlxuICAgICAqIGlzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gdGFnIFRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHIgQXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cbiAgICBET01QdXJpZnkuaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICh0YWcsIGF0dHIsIHZhbHVlKSB7XG4gICAgICAvKiBJbml0aWFsaXplIHNoYXJlZCBjb25maWcgdmFycyBpZiBuZWNlc3NhcnkuICovXG4gICAgICBpZiAoIUNPTkZJRykge1xuICAgICAgICBfcGFyc2VDb25maWcoe30pO1xuICAgICAgfVxuICAgICAgY29uc3QgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyh0YWcpO1xuICAgICAgY29uc3QgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoYXR0cik7XG4gICAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBZGRIb29rXG4gICAgICogUHVibGljIG1ldGhvZCB0byBhZGQgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICAgKi9cbiAgICBET01QdXJpZnkuYWRkSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50LCBob29rRnVuY3Rpb24pIHtcbiAgICAgIGlmICh0eXBlb2YgaG9va0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gaG9va3NbZW50cnlQb2ludF0gfHwgW107XG4gICAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIG1vcmUgYXJlIHByZXNlbnQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259IHJlbW92ZWQocG9wcGVkKSBob29rXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tzXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgYWxsIERPTVB1cmlmeSBob29rcyBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2tzIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIERPTVB1cmlmeS5yZW1vdmVIb29rcyA9IGZ1bmN0aW9uIChlbnRyeVBvaW50KSB7XG4gICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgaG9va3NbZW50cnlQb2ludF0gPSBbXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlQWxsSG9va3NcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhbGwgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUFsbEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICAgICAgaG9va3MgPSB7fTtcbiAgICB9O1xuICAgIHJldHVybiBET01QdXJpZnk7XG4gIH1cbiAgdmFyIHB1cmlmeSA9IGNyZWF0ZURPTVB1cmlmeSgpO1xuXG4gIHJldHVybiBwdXJpZnk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1cmlmeS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBMZXhpbmcgb3IgcGFyc2luZyBwb3NpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBlcnJvciByZXBvcnRpbmcuXG4gKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUuXG4gKi9cbmNsYXNzIFNvdXJjZUxvY2F0aW9uIHtcbiAgLy8gVGhlICsgcHJlZml4IGluZGljYXRlcyB0aGF0IHRoZXNlIGZpZWxkcyBhcmVuJ3Qgd3JpdGVhYmxlXG4gIC8vIExleGVyIGhvbGRpbmcgdGhlIGlucHV0IHN0cmluZy5cbiAgLy8gU3RhcnQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGluY2x1c2l2ZS5cbiAgLy8gRW5kIG9mZnNldCwgemVyby1iYXNlZCBleGNsdXNpdmUuXG4gIGNvbnN0cnVjdG9yKGxleGVyLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YXJ0ID0gdm9pZCAwO1xuICAgIHRoaXMuZW5kID0gdm9pZCAwO1xuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cbiAgLyoqXG4gICAqIE1lcmdlcyB0d28gYFNvdXJjZUxvY2F0aW9uYHMgZnJvbSBsb2NhdGlvbiBwcm92aWRlcnMsIGdpdmVuIHRoZXkgYXJlXG4gICAqIHByb3ZpZGVkIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UuXG4gICAqIC0gUmV0dXJucyB0aGUgZmlyc3Qgb25lJ3MgbG9jYXRpb24gaWYgb25seSB0aGUgZmlyc3QgaXMgcHJvdmlkZWQuXG4gICAqIC0gUmV0dXJucyBhIG1lcmdlZCByYW5nZSBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGlmIGJvdGggYXJlIHByb3ZpZGVkXG4gICAqICAgYW5kIHRoZWlyIGxleGVycyBtYXRjaC5cbiAgICogLSBPdGhlcndpc2UsIHJldHVybnMgbnVsbC5cbiAgICovXG5cblxuICBzdGF0aWMgcmFuZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmICghc2Vjb25kKSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QubG9jO1xuICAgIH0gZWxzZSBpZiAoIWZpcnN0IHx8ICFmaXJzdC5sb2MgfHwgIXNlY29uZC5sb2MgfHwgZmlyc3QubG9jLmxleGVyICE9PSBzZWNvbmQubG9jLmxleGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbihmaXJzdC5sb2MubGV4ZXIsIGZpcnN0LmxvYy5zdGFydCwgc2Vjb25kLmxvYy5lbmQpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcXVpcmVkIHRvIGJyZWFrIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBUb2tlbiwgTGV4ZXIsIGFuZFxuICogUGFyc2VFcnJvci5cbiAqL1xuXG4vKipcbiAqIFRoZSByZXN1bHRpbmcgdG9rZW4gcmV0dXJuZWQgZnJvbSBgbGV4YC5cbiAqXG4gKiBJdCBjb25zaXN0cyBvZiB0aGUgdG9rZW4gdGV4dCBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gKiBUaGUgcG9zaXRpb24gaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsbHkgYSByYW5nZSBpbiBhbiBpbnB1dCBzdHJpbmcsXG4gKiBidXQgaW5zdGVhZCBvZiByZWZlcmVuY2luZyB0aGUgYmFyZSBpbnB1dCBzdHJpbmcsIHdlIHJlZmVyIHRvIHRoZSBsZXhlci5cbiAqIFRoYXQgd2F5IGl0IGlzIHBvc3NpYmxlIHRvIGF0dGFjaCBleHRyYSBtZXRhZGF0YSB0byB0aGUgaW5wdXQgc3RyaW5nLFxuICogbGlrZSBmb3IgZXhhbXBsZSBhIGZpbGUgbmFtZSBvciBzaW1pbGFyLlxuICpcbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBvcHRpb25hbCwgc28gaXQgaXMgT0sgdG8gY29uc3RydWN0IHN5bnRoZXRpY1xuICogdG9rZW5zIGlmIGFwcHJvcHJpYXRlLiBOb3QgcHJvdmlkaW5nIGF2YWlsYWJsZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBtYXlcbiAqIGxlYWQgdG8gZGVncmFkZWQgZXJyb3IgcmVwb3J0aW5nLCB0aG91Z2guXG4gKi9cbmNsYXNzIFRva2VuIHtcbiAgLy8gZG9uJ3QgZXhwYW5kIHRoZSB0b2tlblxuICAvLyB1c2VkIGluIFxcbm9leHBhbmRcbiAgY29uc3RydWN0b3IodGV4dCwgLy8gdGhlIHRleHQgb2YgdGhpcyB0b2tlblxuICBsb2MpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5sb2MgPSB2b2lkIDA7XG4gICAgdGhpcy5ub2V4cGFuZCA9IHZvaWQgMDtcbiAgICB0aGlzLnRyZWF0QXNSZWxheCA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMubG9jID0gbG9jO1xuICB9XG4gIC8qKlxuICAgKiBHaXZlbiBhIHBhaXIgb2YgdG9rZW5zICh0aGlzIGFuZCBlbmRUb2tlbiksIGNvbXB1dGUgYSBgVG9rZW5gIGVuY29tcGFzc2luZ1xuICAgKiB0aGUgd2hvbGUgaW5wdXQgcmFuZ2UgZW5jbG9zZWQgYnkgdGhlc2UgdHdvLlxuICAgKi9cblxuXG4gIHJhbmdlKGVuZFRva2VuLCAvLyBsYXN0IHRva2VuIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlXG4gIHRleHQgLy8gdGhlIHRleHQgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHRva2VuXG4gICkge1xuICAgIHJldHVybiBuZXcgVG9rZW4odGV4dCwgU291cmNlTG9jYXRpb24ucmFuZ2UodGhpcywgZW5kVG9rZW4pKTtcbiAgfVxuXG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgUGFyc2VFcnJvciBjbGFzcywgd2hpY2ggaXMgdGhlIG1haW4gZXJyb3IgdGhyb3duIGJ5IEthVGVYXG4gKiBmdW5jdGlvbnMgd2hlbiBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcuIFRoaXMgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBpbnRlcm5hbFxuICogZXJyb3JzIGZyb20gZXJyb3JzIGluIHRoZSBleHByZXNzaW9uIHRoYXQgdGhlIHVzZXIgcHJvdmlkZWQuXG4gKlxuICogSWYgcG9zc2libGUsIGEgY2FsbGVyIHNob3VsZCBwcm92aWRlIGEgVG9rZW4gb3IgUGFyc2VOb2RlIHdpdGggaW5mb3JtYXRpb25cbiAqIGFib3V0IHdoZXJlIGluIHRoZSBzb3VyY2Ugc3RyaW5nIHRoZSBwcm9ibGVtIG9jY3VycmVkLlxuICovXG5jbGFzcyBQYXJzZUVycm9yIHtcbiAgLy8gRXJyb3Igc3RhcnQgcG9zaXRpb24gYmFzZWQgb24gcGFzc2VkLWluIFRva2VuIG9yIFBhcnNlTm9kZS5cbiAgLy8gTGVuZ3RoIG9mIGFmZmVjdGVkIHRleHQgYmFzZWQgb24gcGFzc2VkLWluIFRva2VuIG9yIFBhcnNlTm9kZS5cbiAgLy8gVGhlIHVuZGVybHlpbmcgZXJyb3IgbWVzc2FnZSB3aXRob3V0IGFueSBjb250ZXh0IGFkZGVkLlxuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCAvLyBUaGUgZXJyb3IgbWVzc2FnZVxuICB0b2tlbiAvLyBBbiBvYmplY3QgcHJvdmlkaW5nIHBvc2l0aW9uIGluZm9ybWF0aW9uXG4gICkge1xuICAgIHRoaXMubmFtZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBvc2l0aW9uID0gdm9pZCAwO1xuICAgIHRoaXMubGVuZ3RoID0gdm9pZCAwO1xuICAgIHRoaXMucmF3TWVzc2FnZSA9IHZvaWQgMDtcbiAgICB2YXIgZXJyb3IgPSBcIkthVGVYIHBhcnNlIGVycm9yOiBcIiArIG1lc3NhZ2U7XG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBlbmQ7XG4gICAgdmFyIGxvYyA9IHRva2VuICYmIHRva2VuLmxvYztcblxuICAgIGlmIChsb2MgJiYgbG9jLnN0YXJ0IDw9IGxvYy5lbmQpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uLCBtYWtlIHRoZSBlcnJvciBhIGJpdCBmYW5jaWVyXG4gICAgICAvLyBHZXQgdGhlIGlucHV0XG4gICAgICB2YXIgaW5wdXQgPSBsb2MubGV4ZXIuaW5wdXQ7IC8vIFByZXBlbmQgc29tZSBpbmZvcm1hdGlvblxuXG4gICAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICAgIGVuZCA9IGxvYy5lbmQ7XG5cbiAgICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIGVycm9yICs9IFwiIGF0IGVuZCBvZiBpbnB1dDogXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgICAgfSAvLyBVbmRlcmxpbmUgdG9rZW4gaW4gcXVlc3Rpb24gdXNpbmcgY29tYmluaW5nIHVuZGVyc2NvcmVzXG5cblxuICAgICAgdmFyIHVuZGVybGluZWQgPSBpbnB1dC5zbGljZShzdGFydCwgZW5kKS5yZXBsYWNlKC9bXl0vZywgXCIkJlxcdTAzMzJcIik7IC8vIEV4dHJhY3Qgc29tZSBjb250ZXh0IGZyb20gdGhlIGlucHV0IGFuZCBhZGQgaXQgdG8gdGhlIGVycm9yXG5cbiAgICAgIHZhciBsZWZ0O1xuXG4gICAgICBpZiAoc3RhcnQgPiAxNSkge1xuICAgICAgICBsZWZ0ID0gXCLigKZcIiArIGlucHV0LnNsaWNlKHN0YXJ0IC0gMTUsIHN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBpbnB1dC5zbGljZSgwLCBzdGFydCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodDtcblxuICAgICAgaWYgKGVuZCArIDE1IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHJpZ2h0ID0gaW5wdXQuc2xpY2UoZW5kLCBlbmQgKyAxNSkgKyBcIuKAplwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQpO1xuICAgICAgfVxuXG4gICAgICBlcnJvciArPSBsZWZ0ICsgdW5kZXJsaW5lZCArIHJpZ2h0O1xuICAgIH0gLy8gU29tZSBoYWNrZXJ5IHRvIG1ha2UgUGFyc2VFcnJvciBhIHByb3RvdHlwZSBvZiBFcnJvclxuICAgIC8vIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84NDYwNzUzXG4gICAgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICB2YXIgc2VsZiA9IG5ldyBFcnJvcihlcnJvcik7XG4gICAgc2VsZi5uYW1lID0gXCJQYXJzZUVycm9yXCI7IC8vICRGbG93Rml4TWVcblxuICAgIHNlbGYuX19wcm90b19fID0gUGFyc2VFcnJvci5wcm90b3R5cGU7XG4gICAgc2VsZi5wb3NpdGlvbiA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0YXJ0ICE9IG51bGwgJiYgZW5kICE9IG51bGwpIHtcbiAgICAgIHNlbGYubGVuZ3RoID0gZW5kIC0gc3RhcnQ7XG4gICAgfVxuXG4gICAgc2VsZi5yYXdNZXNzYWdlID0gbWVzc2FnZTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG59IC8vICRGbG93Rml4TWUgTW9yZSBoYWNrZXJ5XG5cblxuUGFyc2VFcnJvci5wcm90b3R5cGUuX19wcm90b19fID0gRXJyb3IucHJvdG90eXBlO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWZ1bCBpbiBvdGhlclxuICogZmlsZXMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBhIGxpc3RcbiAqL1xudmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnMobGlzdCwgZWxlbSkge1xuICByZXR1cm4gbGlzdC5pbmRleE9mKGVsZW0pICE9PSAtMTtcbn07XG4vKipcbiAqIFByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlIGlmIGEgc2V0dGluZyBpcyB1bmRlZmluZWRcbiAqIE5PVEU6IENvdWxkbid0IHVzZSBgVGAgYXMgdGhlIG91dHB1dCB0eXBlIGR1ZSB0byBmYWNlYm9vay9mbG93IzUwMjIuXG4gKi9cblxuXG52YXIgZGVmbHQgPSBmdW5jdGlvbiBkZWZsdChzZXR0aW5nLCBkZWZhdWx0SWZVbmRlZmluZWQpIHtcbiAgcmV0dXJuIHNldHRpbmcgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRJZlVuZGVmaW5lZCA6IHNldHRpbmc7XG59OyAvLyBoeXBoZW5hdGUgYW5kIGVzY2FwZSBhZGFwdGVkIGZyb20gRmFjZWJvb2sncyBSZWFjdCB1bmRlciBBcGFjaGUgMiBsaWNlbnNlXG5cblxudmFyIHVwcGVyY2FzZSA9IC8oW0EtWl0pL2c7XG5cbnZhciBoeXBoZW5hdGUgPSBmdW5jdGlvbiBoeXBoZW5hdGUoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSh1cHBlcmNhc2UsIFwiLSQxXCIpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgRVNDQVBFX0xPT0tVUCA9IHtcbiAgXCImXCI6IFwiJmFtcDtcIixcbiAgXCI+XCI6IFwiJmd0O1wiLFxuICBcIjxcIjogXCImbHQ7XCIsXG4gIFwiXFxcIlwiOiBcIiZxdW90O1wiLFxuICBcIidcIjogXCImI3gyNztcIlxufTtcbnZhciBFU0NBUEVfUkVHRVggPSAvWyY+PFwiJ10vZztcbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKHRleHQpIHtcbiAgcmV0dXJuIFN0cmluZyh0ZXh0KS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgbWF0Y2ggPT4gRVNDQVBFX0xPT0tVUFttYXRjaF0pO1xufVxuLyoqXG4gKiBTb21ldGltZXMgd2Ugd2FudCB0byBwdWxsIG91dCB0aGUgaW5uZXJtb3N0IGVsZW1lbnQgb2YgYSBncm91cC4gSW4gbW9zdFxuICogY2FzZXMsIHRoaXMgd2lsbCBqdXN0IGJlIHRoZSBncm91cCBpdHNlbGYsIGJ1dCB3aGVuIG9yZGdyb3VwcyBhbmQgY29sb3JzIGhhdmVcbiAqIGEgc2luZ2xlIGVsZW1lbnQsIHdlIHdhbnQgdG8gcHVsbCB0aGF0IG91dC5cbiAqL1xuXG5cbnZhciBnZXRCYXNlRWxlbSA9IGZ1bmN0aW9uIGdldEJhc2VFbGVtKGdyb3VwKSB7XG4gIGlmIChncm91cC50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICBpZiAoZ3JvdXAuYm9keS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBnZXRCYXNlRWxlbShncm91cC5ib2R5WzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcImNvbG9yXCIpIHtcbiAgICBpZiAoZ3JvdXAuYm9keS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBnZXRCYXNlRWxlbShncm91cC5ib2R5WzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcImZvbnRcIikge1xuICAgIHJldHVybiBnZXRCYXNlRWxlbShncm91cC5ib2R5KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbn07XG4vKipcbiAqIFRlWGJvb2sgYWxnb3JpdGhtcyBvZnRlbiByZWZlcmVuY2UgXCJjaGFyYWN0ZXIgYm94ZXNcIiwgd2hpY2ggYXJlIHNpbXBseSBncm91cHNcbiAqIHdpdGggYSBzaW5nbGUgY2hhcmFjdGVyIGluIHRoZW0uIFRvIGRlY2lkZSBpZiBzb21ldGhpbmcgaXMgYSBjaGFyYWN0ZXIgYm94LFxuICogd2UgZmluZCBpdHMgaW5uZXJtb3N0IGdyb3VwLCBhbmQgc2VlIGlmIGl0IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqL1xuXG5cbnZhciBpc0NoYXJhY3RlckJveCA9IGZ1bmN0aW9uIGlzQ2hhcmFjdGVyQm94KGdyb3VwKSB7XG4gIHZhciBiYXNlRWxlbSA9IGdldEJhc2VFbGVtKGdyb3VwKTsgLy8gVGhlc2UgYXJlIGFsbCB0aGV5IHR5cGVzIG9mIGdyb3VwcyB3aGljaCBob2xkIHNpbmdsZSBjaGFyYWN0ZXJzXG5cbiAgcmV0dXJuIGJhc2VFbGVtLnR5cGUgPT09IFwibWF0aG9yZFwiIHx8IGJhc2VFbGVtLnR5cGUgPT09IFwidGV4dG9yZFwiIHx8IGJhc2VFbGVtLnR5cGUgPT09IFwiYXRvbVwiO1xufTtcblxudmFyIGFzc2VydCA9IGZ1bmN0aW9uIGFzc2VydCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBub24tbnVsbCwgYnV0IGdvdCAnICsgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuLyoqXG4gKiBSZXR1cm4gdGhlIHByb3RvY29sIG9mIGEgVVJMLCBvciBcIl9yZWxhdGl2ZVwiIGlmIHRoZSBVUkwgZG9lcyBub3Qgc3BlY2lmeSBhXG4gKiBwcm90b2NvbCAoYW5kIHRodXMgaXMgcmVsYXRpdmUpLCBvciBgbnVsbGAgaWYgVVJMIGhhcyBpbnZhbGlkIHByb3RvY29sXG4gKiAoc28gc2hvdWxkIGJlIG91dHJpZ2h0IHJlamVjdGVkKS5cbiAqL1xuXG52YXIgcHJvdG9jb2xGcm9tVXJsID0gZnVuY3Rpb24gcHJvdG9jb2xGcm9tVXJsKHVybCkge1xuICAvLyBDaGVjayBmb3IgcG9zc2libGUgbGVhZGluZyBwcm90b2NvbC5cbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZyBzdHJpcHMgbGVhZGluZyB3aGl0ZXNwYWNlXG4gIC8vIChVKzIwKSBvciBDMCBjb250cm9sIChVKzAwLVUrMUYpIGNoYXJhY3RlcnMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gIHZhciBwcm90b2NvbCA9IC9eW1xceDAwLVxceDIwXSooW15cXFxcLyM/XSo/KSg6fCYjMCo1OHwmI3gwKjNhfCZjb2xvbikvaS5leGVjKHVybCk7XG5cbiAgaWYgKCFwcm90b2NvbCkge1xuICAgIHJldHVybiBcIl9yZWxhdGl2ZVwiO1xuICB9IC8vIFJlamVjdCB3ZWlyZCBjb2xvbnNcblxuXG4gIGlmIChwcm90b2NvbFsyXSAhPT0gXCI6XCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBSZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzIGluIHNjaGVtZSBhY2NvcmRpbmcgdG9cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG5cblxuICBpZiAoIS9eW2EtekEtWl1bYS16QS1aMC05K1xcLS5dKiQvLnRlc3QocHJvdG9jb2xbMV0pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTG93ZXJjYXNlIHRoZSBwcm90b2NvbFxuXG5cbiAgcmV0dXJuIHByb3RvY29sWzFdLnRvTG93ZXJDYXNlKCk7XG59O1xudmFyIHV0aWxzID0ge1xuICBjb250YWlucyxcbiAgZGVmbHQsXG4gIGVzY2FwZSxcbiAgaHlwaGVuYXRlLFxuICBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3gsXG4gIHByb3RvY29sRnJvbVVybFxufTtcblxuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuLy8gVE9ETzogYXV0b21hdGljYWxseSBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uXG4vLyBUT0RPOiBjaGVjayBhbGwgcHJvcGVydGllcyBvbiBTZXR0aW5ncyBleGlzdFxuLy8gVE9ETzogY2hlY2sgdGhlIHR5cGUgb2YgYSBwcm9wZXJ0eSBvbiBTZXR0aW5ncyBtYXRjaGVzXG52YXIgU0VUVElOR1NfU0NIRU1BID0ge1xuICBkaXNwbGF5TW9kZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBtYXRoIGluIGRpc3BsYXkgbW9kZSwgd2hpY2ggcHV0cyB0aGUgbWF0aCBpbiBcIiArIFwiZGlzcGxheSBzdHlsZSAoc28gXFxcXGludCBhbmQgXFxcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIFwiICsgXCJjZW50ZXJzIHRoZSBtYXRoIG9uIHRoZSBwYWdlIG9uIGl0cyBvd24gbGluZS5cIixcbiAgICBjbGk6IFwiLWQsIC0tZGlzcGxheS1tb2RlXCJcbiAgfSxcbiAgb3V0cHV0OiB7XG4gICAgdHlwZToge1xuICAgICAgZW51bTogW1wiaHRtbEFuZE1hdGhtbFwiLCBcImh0bWxcIiwgXCJtYXRobWxcIl1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBcIkRldGVybWluZXMgdGhlIG1hcmt1cCBsYW5ndWFnZSBvZiB0aGUgb3V0cHV0LlwiLFxuICAgIGNsaTogXCItRiwgLS1mb3JtYXQgPHR5cGU+XCJcbiAgfSxcbiAgbGVxbm86IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJSZW5kZXIgZGlzcGxheSBtYXRoIGluIGxlcW5vIHN0eWxlIChsZWZ0LWp1c3RpZmllZCB0YWdzKS5cIlxuICB9LFxuICBmbGVxbjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBkaXNwbGF5IG1hdGggZmx1c2ggbGVmdC5cIlxuICB9LFxuICB0aHJvd09uRXJyb3I6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIGNsaTogXCItdCwgLS1uby10aHJvdy1vbi1lcnJvclwiLFxuICAgIGNsaURlc2NyaXB0aW9uOiBcIlJlbmRlciBlcnJvcnMgKGluIHRoZSBjb2xvciBnaXZlbiBieSAtLWVycm9yLWNvbG9yKSBpbnNcIiArIFwidGVhZCBvZiB0aHJvd2luZyBhIFBhcnNlRXJyb3IgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yLlwiXG4gIH0sXG4gIGVycm9yQ29sb3I6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiI2NjMDAwMFwiLFxuICAgIGNsaTogXCItYywgLS1lcnJvci1jb2xvciA8Y29sb3I+XCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiQSBjb2xvciBzdHJpbmcgZ2l2ZW4gaW4gdGhlIGZvcm1hdCAncmdiJyBvciAncnJnZ2JiJyBcIiArIFwiKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIFwiICsgXCItdCBvcHRpb24uXCIsXG4gICAgY2xpUHJvY2Vzc29yOiBjb2xvciA9PiBcIiNcIiArIGNvbG9yXG4gIH0sXG4gIG1hY3Jvczoge1xuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgY2xpOiBcIi1tLCAtLW1hY3JvIDxkZWY+XCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiRGVmaW5lIGN1c3RvbSBtYWNybyBvZiB0aGUgZm9ybSAnXFxcXGZvbzpleHBhbnNpb24nICh1c2UgXCIgKyBcIm11bHRpcGxlIC1tIGFyZ3VtZW50cyBmb3IgbXVsdGlwbGUgbWFjcm9zKS5cIixcbiAgICBjbGlEZWZhdWx0OiBbXSxcbiAgICBjbGlQcm9jZXNzb3I6IChkZWYsIGRlZnMpID0+IHtcbiAgICAgIGRlZnMucHVzaChkZWYpO1xuICAgICAgcmV0dXJuIGRlZnM7XG4gICAgfVxuICB9LFxuICBtaW5SdWxlVGhpY2tuZXNzOiB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTcGVjaWZpZXMgYSBtaW5pbXVtIHRoaWNrbmVzcywgaW4gZW1zLCBmb3IgZnJhY3Rpb24gbGluZXMsXCIgKyBcIiBgXFxcXHNxcnRgIHRvcCBsaW5lcywgYHthcnJheX1gIHZlcnRpY2FsIGxpbmVzLCBgXFxcXGhsaW5lYCwgXCIgKyBcImBcXFxcaGRhc2hsaW5lYCwgYFxcXFx1bmRlcmxpbmVgLCBgXFxcXG92ZXJsaW5lYCwgYW5kIHRoZSBib3JkZXJzIG9mIFwiICsgXCJgXFxcXGZib3hgLCBgXFxcXGJveGVkYCwgYW5kIGBcXFxcZmNvbG9yYm94YC5cIixcbiAgICBwcm9jZXNzb3I6IHQgPT4gTWF0aC5tYXgoMCwgdCksXG4gICAgY2xpOiBcIi0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPlwiLFxuICAgIGNsaVByb2Nlc3NvcjogcGFyc2VGbG9hdFxuICB9LFxuICBjb2xvcklzVGV4dENvbG9yOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiTWFrZXMgXFxcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXFxcdGV4dGNvbG9yLCBcIiArIFwiaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXFxcY29sb3IgbW9kZSBjaGFuZ2UuXCIsXG4gICAgY2xpOiBcIi1iLCAtLWNvbG9yLWlzLXRleHQtY29sb3JcIlxuICB9LFxuICBzdHJpY3Q6IHtcbiAgICB0eXBlOiBbe1xuICAgICAgZW51bTogW1wid2FyblwiLCBcImlnbm9yZVwiLCBcImVycm9yXCJdXG4gICAgfSwgXCJib29sZWFuXCIsIFwiZnVuY3Rpb25cIl0sXG4gICAgZGVzY3JpcHRpb246IFwiVHVybiBvbiBzdHJpY3QgLyBMYVRlWCBmYWl0aGZ1bG5lc3MgbW9kZSwgd2hpY2ggdGhyb3dzIGFuIFwiICsgXCJlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLlwiLFxuICAgIGNsaTogXCItUywgLS1zdHJpY3RcIixcbiAgICBjbGlEZWZhdWx0OiBmYWxzZVxuICB9LFxuICB0cnVzdDoge1xuICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJmdW5jdGlvblwiXSxcbiAgICBkZXNjcmlwdGlvbjogXCJUcnVzdCB0aGUgaW5wdXQsIGVuYWJsaW5nIGFsbCBIVE1MIGZlYXR1cmVzIHN1Y2ggYXMgXFxcXHVybC5cIixcbiAgICBjbGk6IFwiLVQsIC0tdHJ1c3RcIlxuICB9LFxuICBtYXhTaXplOiB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBkZWZhdWx0OiBJbmZpbml0eSxcbiAgICBkZXNjcmlwdGlvbjogXCJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFwiICsgXCJcXFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBcIiArIFwiZWxlbWVudHMgYW5kIHNwYWNlcyBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2VcIixcbiAgICBwcm9jZXNzb3I6IHMgPT4gTWF0aC5tYXgoMCwgcyksXG4gICAgY2xpOiBcIi1zLCAtLW1heC1zaXplIDxuPlwiLFxuICAgIGNsaVByb2Nlc3NvcjogcGFyc2VJbnRcbiAgfSxcbiAgbWF4RXhwYW5kOiB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBkZWZhdWx0OiAxMDAwLFxuICAgIGRlc2NyaXB0aW9uOiBcIkxpbWl0IHRoZSBudW1iZXIgb2YgbWFjcm8gZXhwYW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIFwiICsgXCJudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCBcIiArIFwidGhlIG1hY3JvIGV4cGFuZGVyIHdpbGwgdHJ5IHRvIGZ1bGx5IGV4cGFuZCBhcyBpbiBMYVRlWC5cIixcbiAgICBwcm9jZXNzb3I6IG4gPT4gTWF0aC5tYXgoMCwgbiksXG4gICAgY2xpOiBcIi1lLCAtLW1heC1leHBhbmQgPG4+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBuID0+IG4gPT09IFwiSW5maW5pdHlcIiA/IEluZmluaXR5IDogcGFyc2VJbnQobilcbiAgfSxcbiAgZ2xvYmFsR3JvdXA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBjbGk6IGZhbHNlXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5kZWZhdWx0KSB7XG4gICAgcmV0dXJuIHNjaGVtYS5kZWZhdWx0O1xuICB9XG5cbiAgdmFyIHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgdmFyIGRlZmF1bHRUeXBlID0gQXJyYXkuaXNBcnJheSh0eXBlKSA/IHR5cGVbMF0gOiB0eXBlO1xuXG4gIGlmICh0eXBlb2YgZGVmYXVsdFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRUeXBlLmVudW1bMF07XG4gIH1cblxuICBzd2l0Y2ggKGRlZmF1bHRUeXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuICcnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiAwO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuLyoqXG4gKiBUaGUgbWFpbiBTZXR0aW5ncyBvYmplY3RcbiAqXG4gKiBUaGUgY3VycmVudCBvcHRpb25zIHN0b3JlZCBhcmU6XG4gKiAgLSBkaXNwbGF5TW9kZTogV2hldGhlciB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHlwZXNldCBhcyBpbmxpbmUgbWF0aFxuICogICAgICAgICAgICAgICAgIChmYWxzZSwgdGhlIGRlZmF1bHQpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluXG4gKiAgICAgICAgICAgICAgICAgXFx0ZXh0c3R5bGUgYW5kIGlzIHBsYWNlZCBpbiBhbiBpbmxpbmUtYmxvY2spOyBvciBhcyBkaXNwbGF5XG4gKiAgICAgICAgICAgICAgICAgbWF0aCAodHJ1ZSksIG1lYW5pbmcgdGhhdCB0aGUgbWF0aCBzdGFydHMgaW4gXFxkaXNwbGF5c3R5bGVcbiAqICAgICAgICAgICAgICAgICBhbmQgaXMgcGxhY2VkIGluIGEgYmxvY2sgd2l0aCB2ZXJ0aWNhbCBtYXJnaW4uXG4gKi9cblxuXG5jbGFzcyBTZXR0aW5ncyB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlNb2RlID0gdm9pZCAwO1xuICAgIHRoaXMub3V0cHV0ID0gdm9pZCAwO1xuICAgIHRoaXMubGVxbm8gPSB2b2lkIDA7XG4gICAgdGhpcy5mbGVxbiA9IHZvaWQgMDtcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHZvaWQgMDtcbiAgICB0aGlzLmVycm9yQ29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5tYWNyb3MgPSB2b2lkIDA7XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gdm9pZCAwO1xuICAgIHRoaXMuY29sb3JJc1RleHRDb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLnN0cmljdCA9IHZvaWQgMDtcbiAgICB0aGlzLnRydXN0ID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEV4cGFuZCA9IHZvaWQgMDtcbiAgICB0aGlzLmdsb2JhbEdyb3VwID0gdm9pZCAwO1xuICAgIC8vIGFsbG93IG51bGwgb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgZm9yICh2YXIgcHJvcCBpbiBTRVRUSU5HU19TQ0hFTUEpIHtcbiAgICAgIGlmIChTRVRUSU5HU19TQ0hFTUEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICB2YXIgc2NoZW1hID0gU0VUVElOR1NfU0NIRU1BW3Byb3BdOyAvLyBUT0RPOiB2YWxpZGF0ZSBvcHRpb25zXG4gICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICB0aGlzW3Byb3BdID0gb3B0aW9uc1twcm9wXSAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnByb2Nlc3NvciA/IHNjaGVtYS5wcm9jZXNzb3Iob3B0aW9uc1twcm9wXSkgOiBvcHRpb25zW3Byb3BdIDogZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXBvcnQgbm9uc3RyaWN0IChub24tTGFUZVgtY29tcGF0aWJsZSkgaW5wdXQuXG4gICAqIENhbiBzYWZlbHkgbm90IGJlIGNhbGxlZCBpZiBgdGhpcy5zdHJpY3RgIGlzIGZhbHNlIGluIEphdmFTY3JpcHQuXG4gICAqL1xuXG5cbiAgcmVwb3J0Tm9uc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKSB7XG4gICAgdmFyIHN0cmljdCA9IHRoaXMuc3RyaWN0O1xuXG4gICAgaWYgKHR5cGVvZiBzdHJpY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gQWxsb3cgcmV0dXJuIHZhbHVlIG9mIHN0cmljdCBmdW5jdGlvbiB0byBiZSBib29sZWFuIG9yIHN0cmluZ1xuICAgICAgLy8gKG9yIG51bGwvdW5kZWZpbmVkLCBtZWFuaW5nIG5vIGZ1cnRoZXIgcHJvY2Vzc2luZykuXG4gICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6IFwiICsgKGVycm9yTXNnICsgXCIgW1wiICsgZXJyb3JDb2RlICsgXCJdXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmIChzdHJpY3QgPT09IFwid2FyblwiKSB7XG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6IFwiICsgKGVycm9yTXNnICsgXCIgW1wiICsgZXJyb3JDb2RlICsgXCJdXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd29uJ3QgaGFwcGVuIGluIHR5cGUtc2FmZSBjb2RlXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byBcIiArIChcInVucmVjb2duaXplZCAnXCIgKyBzdHJpY3QgKyBcIic6IFwiICsgZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0byBhcHBseSBzdHJpY3QgKExhVGVYLWFkaGVyaW5nKSBiZWhhdmlvciBmb3IgdW51c3VhbFxuICAgKiBpbnB1dCAobGlrZSBgXFxcXGApLiAgVW5saWtlIGBub25zdHJpY3RgLCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvcjtcbiAgICogaW5zdGVhZCwgXCJlcnJvclwiIHRyYW5zbGF0ZXMgdG8gYSByZXR1cm4gdmFsdWUgb2YgYHRydWVgLCB3aGlsZSBcImlnbm9yZVwiXG4gICAqIHRyYW5zbGF0ZXMgdG8gYSByZXR1cm4gdmFsdWUgb2YgYGZhbHNlYC4gIE1heSBzdGlsbCBwcmludCBhIHdhcm5pbmc6XG4gICAqIFwid2FyblwiIHByaW50cyBhIHdhcm5pbmcgYW5kIHJldHVybnMgYGZhbHNlYC5cbiAgICogVGhpcyBpcyBmb3IgdGhlIHNlY29uZCBjYXRlZ29yeSBvZiBgZXJyb3JDb2RlYHMgbGlzdGVkIGluIHRoZSBSRUFETUUuXG4gICAqL1xuXG5cbiAgdXNlU3RyaWN0QmVoYXZpb3IoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pIHtcbiAgICB2YXIgc3RyaWN0ID0gdGhpcy5zdHJpY3Q7XG5cbiAgICBpZiAodHlwZW9mIHN0cmljdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBBbGxvdyByZXR1cm4gdmFsdWUgb2Ygc3RyaWN0IGZ1bmN0aW9uIHRvIGJlIGJvb2xlYW4gb3Igc3RyaW5nXG4gICAgICAvLyAob3IgbnVsbC91bmRlZmluZWQsIG1lYW5pbmcgbm8gZnVydGhlciBwcm9jZXNzaW5nKS5cbiAgICAgIC8vIEJ1dCBjYXRjaCBhbnkgZXhjZXB0aW9ucyB0aHJvd24gYnkgZnVuY3Rpb24sIHRyZWF0aW5nIHRoZW1cbiAgICAgIC8vIGxpa2UgXCJlcnJvclwiLlxuICAgICAgdHJ5IHtcbiAgICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmljdCA9IFwiZXJyb3JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChzdHJpY3QgPT09IFwid2FyblwiKSB7XG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6IFwiICsgKGVycm9yTXNnICsgXCIgW1wiICsgZXJyb3JDb2RlICsgXCJdXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd29uJ3QgaGFwcGVuIGluIHR5cGUtc2FmZSBjb2RlXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byBcIiArIChcInVucmVjb2duaXplZCAnXCIgKyBzdHJpY3QgKyBcIic6IFwiICsgZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0byB0ZXN0IHBvdGVudGlhbGx5IGRhbmdlcm91cyBpbnB1dCwgYW5kIHJldHVyblxuICAgKiBgdHJ1ZWAgKHRydXN0ZWQpIG9yIGBmYWxzZWAgKHVudHJ1c3RlZCkuICBUaGUgc29sZSBhcmd1bWVudCBgY29udGV4dGBcbiAgICogc2hvdWxkIGJlIGFuIG9iamVjdCB3aXRoIGBjb21tYW5kYCBmaWVsZCBzcGVjaWZ5aW5nIHRoZSByZWxldmFudCBMYVRlWFxuICAgKiBjb21tYW5kIChhcyBhIHN0cmluZyBzdGFydGluZyB3aXRoIGBcXGApLCBhbmQgYW55IG90aGVyIGFyZ3VtZW50cywgZXRjLlxuICAgKiBJZiBgY29udGV4dGAgaGFzIGEgYHVybGAgZmllbGQsIGEgYHByb3RvY29sYCBmaWVsZCB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICogZ2V0IGFkZGVkIGJ5IHRoaXMgZnVuY3Rpb24gKGNoYW5naW5nIHRoZSBzcGVjaWZpZWQgb2JqZWN0KS5cbiAgICovXG5cblxuICBpc1RydXN0ZWQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnVybCAmJiAhY29udGV4dC5wcm90b2NvbCkge1xuICAgICAgdmFyIHByb3RvY29sID0gdXRpbHMucHJvdG9jb2xGcm9tVXJsKGNvbnRleHQudXJsKTtcblxuICAgICAgaWYgKHByb3RvY29sID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnByb3RvY29sID0gcHJvdG9jb2w7XG4gICAgfVxuXG4gICAgdmFyIHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfVxuXG59XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xuY2xhc3MgU3R5bGUge1xuICBjb25zdHJ1Y3RvcihpZCwgc2l6ZSwgY3JhbXBlZCkge1xuICAgIHRoaXMuaWQgPSB2b2lkIDA7XG4gICAgdGhpcy5zaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY3JhbXBlZCA9IHZvaWQgMDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICB0aGlzLmNyYW1wZWQgPSBjcmFtcGVkO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgc3VwZXJzY3JpcHQgZ2l2ZW4gYSBiYXNlIGluIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgKi9cblxuXG4gIHN1cCgpIHtcbiAgICByZXR1cm4gc3R5bGVzW3N1cFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBzdWJzY3JpcHQgZ2l2ZW4gYSBiYXNlIGluIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgKi9cblxuXG4gIHN1YigpIHtcbiAgICByZXR1cm4gc3R5bGVzW3N1Ylt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBudW1lcmF0b3IgZ2l2ZW4gdGhlIGZyYWN0aW9uIGluIHRoZSBjdXJyZW50XG4gICAqIHN0eWxlLlxuICAgKi9cblxuXG4gIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tmcmFjTnVtW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIGZyYWN0aW9uIGRlbm9taW5hdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG5cblxuICBmcmFjRGVuKCkge1xuICAgIHJldHVybiBzdHlsZXNbZnJhY0Rlblt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3JhbXBlZCB2ZXJzaW9uIG9mIGEgc3R5bGUgKGluIHBhcnRpY3VsYXIsIGNyYW1waW5nIGEgY3JhbXBlZCBzdHlsZVxuICAgKiBkb2Vzbid0IGNoYW5nZSB0aGUgc3R5bGUpLlxuICAgKi9cblxuXG4gIGNyYW1wKCkge1xuICAgIHJldHVybiBzdHlsZXNbY3JhbXBbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IG9yIGRpc3BsYXkgdmVyc2lvbiBvZiB0aGlzIHN0eWxlLlxuICAgKi9cblxuXG4gIHRleHQoKSB7XG4gICAgcmV0dXJuIHN0eWxlc1t0ZXh0JDFbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0eWxlIGlzIHRpZ2h0bHkgc3BhY2VkIChzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZSlcbiAgICovXG5cblxuICBpc1RpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnNpemUgPj0gMjtcbiAgfVxuXG59IC8vIEV4cG9ydCBhbiBpbnRlcmZhY2UgZm9yIHR5cGUgY2hlY2tpbmcsIGJ1dCBkb24ndCBleHBvc2UgdGhlIGltcGxlbWVudGF0aW9uLlxuLy8gVGhpcyB3YXksIG5vIG1vcmUgc3R5bGVzIGNhbiBiZSBnZW5lcmF0ZWQuXG5cblxuLy8gSURzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG52YXIgRCA9IDA7XG52YXIgRGMgPSAxO1xudmFyIFQgPSAyO1xudmFyIFRjID0gMztcbnZhciBTID0gNDtcbnZhciBTYyA9IDU7XG52YXIgU1MgPSA2O1xudmFyIFNTYyA9IDc7IC8vIEluc3RhbmNlcyBvZiB0aGUgZGlmZmVyZW50IHN0eWxlc1xuXG52YXIgc3R5bGVzID0gW25ldyBTdHlsZShELCAwLCBmYWxzZSksIG5ldyBTdHlsZShEYywgMCwgdHJ1ZSksIG5ldyBTdHlsZShULCAxLCBmYWxzZSksIG5ldyBTdHlsZShUYywgMSwgdHJ1ZSksIG5ldyBTdHlsZShTLCAyLCBmYWxzZSksIG5ldyBTdHlsZShTYywgMiwgdHJ1ZSksIG5ldyBTdHlsZShTUywgMywgZmFsc2UpLCBuZXcgU3R5bGUoU1NjLCAzLCB0cnVlKV07IC8vIExvb2t1cCB0YWJsZXMgZm9yIHN3aXRjaGluZyBmcm9tIG9uZSBzdHlsZSB0byBhbm90aGVyXG5cbnZhciBzdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbnZhciBzdWIgPSBbU2MsIFNjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgZnJhY051bSA9IFtULCBUYywgUywgU2MsIFNTLCBTU2MsIFNTLCBTU2NdO1xudmFyIGZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgY3JhbXAgPSBbRGMsIERjLCBUYywgVGMsIFNjLCBTYywgU1NjLCBTU2NdO1xudmFyIHRleHQkMSA9IFtELCBEYywgVCwgVGMsIFQsIFRjLCBULCBUY107IC8vIFdlIG9ubHkgZXhwb3J0IHNvbWUgb2YgdGhlIHN0eWxlcy5cblxudmFyIFN0eWxlJDEgPSB7XG4gIERJU1BMQVk6IHN0eWxlc1tEXSxcbiAgVEVYVDogc3R5bGVzW1RdLFxuICBTQ1JJUFQ6IHN0eWxlc1tTXSxcbiAgU0NSSVBUU0NSSVBUOiBzdHlsZXNbU1NdXG59O1xuXG4vKlxuICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIFVuaWNvZGUgc2NyaXB0cyBhbmQgc2NyaXB0IGZhbWlsaWVzIHRoYXQgd2VcbiAqIHN1cHBvcnQuIFRvIGFkZCBuZXcgc2NyaXB0cyBvciBmYW1pbGllcywganVzdCBhZGQgYSBuZXcgZW50cnkgdG8gdGhlXG4gKiBzY3JpcHREYXRhIGFycmF5IGJlbG93LiBBZGRpbmcgc2NyaXB0cyB0byB0aGUgc2NyaXB0RGF0YSBhcnJheSBhbGxvd3NcbiAqIGNoYXJhY3RlcnMgZnJvbSB0aGF0IHNjcmlwdCB0byBhcHBlYXIgaW4gXFx0ZXh0e30gZW52aXJvbm1lbnRzLlxuICovXG5cbi8qKlxuICogRWFjaCBzY3JpcHQgb3Igc2NyaXB0IGZhbWlseSBoYXMgYSBuYW1lIGFuZCBhbiBhcnJheSBvZiBibG9ja3MuXG4gKiBFYWNoIGJsb2NrIGlzIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIHdoaWNoIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZFxuICogZW5kIHBvaW50cyAoaW5jbHVzaXZlKSBvZiBhIGJsb2NrIG9mIFVuaWNvZGUgY29kZXBvaW50cy5cbiAqL1xuXG4vKipcbiAqIFVuaWNvZGUgYmxvY2sgZGF0YSBmb3IgdGhlIGZhbWlsaWVzIG9mIHNjcmlwdHMgd2Ugc3VwcG9ydCBpbiBcXHRleHR7fS5cbiAqIFNjcmlwdHMgb25seSBuZWVkIHRvIGFwcGVhciBoZXJlIGlmIHRoZXkgZG8gbm90IGhhdmUgZm9udCBtZXRyaWNzLlxuICovXG52YXIgc2NyaXB0RGF0YSA9IFt7XG4gIC8vIExhdGluIGNoYXJhY3RlcnMgYmV5b25kIHRoZSBMYXRpbi0xIGNoYXJhY3RlcnMgd2UgaGF2ZSBtZXRyaWNzIGZvci5cbiAgLy8gTmVlZGVkIGZvciBDemVjaCwgSHVuZ2FyaWFuIGFuZCBUdXJraXNoIHRleHQsIGZvciBleGFtcGxlLlxuICBuYW1lOiAnbGF0aW4nLFxuICBibG9ja3M6IFtbMHgwMTAwLCAweDAyNGZdLCAvLyBMYXRpbiBFeHRlbmRlZC1BIGFuZCBMYXRpbiBFeHRlbmRlZC1CXG4gIFsweDAzMDAsIDB4MDM2Zl0gLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIG1hcmtzXG4gIF1cbn0sIHtcbiAgLy8gVGhlIEN5cmlsbGljIHNjcmlwdCB1c2VkIGJ5IFJ1c3NpYW4gYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzLlxuICAvLyBBIEN5cmlsbGljIHN1YnNldCB1c2VkIHRvIGJlIHN1cHBvcnRlZCBhcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgLy8gc3ltYm9scyBpbiBzeW1ib2xzLmpzXG4gIG5hbWU6ICdjeXJpbGxpYycsXG4gIGJsb2NrczogW1sweDA0MDAsIDB4MDRmZl1dXG59LCB7XG4gIC8vIEFybWVuaWFuXG4gIG5hbWU6ICdhcm1lbmlhbicsXG4gIGJsb2NrczogW1sweDA1MzAsIDB4MDU4Rl1dXG59LCB7XG4gIC8vIFRoZSBCcmFobWljIHNjcmlwdHMgb2YgU291dGggYW5kIFNvdXRoZWFzdCBBc2lhXG4gIC8vIERldmFuYWdhcmkgKDA5MDDigJMwOTdGKVxuICAvLyBCZW5nYWxpICgwOTgw4oCTMDlGRilcbiAgLy8gR3VybXVraGkgKDBBMDDigJMwQTdGKVxuICAvLyBHdWphcmF0aSAoMEE4MOKAkzBBRkYpXG4gIC8vIE9yaXlhICgwQjAw4oCTMEI3RilcbiAgLy8gVGFtaWwgKDBCODDigJMwQkZGKVxuICAvLyBUZWx1Z3UgKDBDMDDigJMwQzdGKVxuICAvLyBLYW5uYWRhICgwQzgw4oCTMENGRilcbiAgLy8gTWFsYXlhbGFtICgwRDAw4oCTMEQ3RilcbiAgLy8gU2luaGFsYSAoMEQ4MOKAkzBERkYpXG4gIC8vIFRoYWkgKDBFMDDigJMwRTdGKVxuICAvLyBMYW8gKDBFODDigJMwRUZGKVxuICAvLyBUaWJldGFuICgwRjAw4oCTMEZGRilcbiAgLy8gTXlhbm1hciAoMTAwMOKAkzEwOUYpXG4gIG5hbWU6ICdicmFobWljJyxcbiAgYmxvY2tzOiBbWzB4MDkwMCwgMHgxMDlGXV1cbn0sIHtcbiAgbmFtZTogJ2dlb3JnaWFuJyxcbiAgYmxvY2tzOiBbWzB4MTBBMCwgMHgxMGZmXV1cbn0sIHtcbiAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UuXG4gIC8vIFRoZSBcImtcIiBpbiBjamsgaXMgZm9yIEtvcmVhbiwgYnV0IHdlJ3ZlIHNlcGFyYXRlZCBLb3JlYW4gb3V0XG4gIG5hbWU6IFwiY2prXCIsXG4gIGJsb2NrczogW1sweDMwMDAsIDB4MzBGRl0sIC8vIENKSyBzeW1ib2xzIGFuZCBwdW5jdHVhdGlvbiwgSGlyYWdhbmEsIEthdGFrYW5hXG4gIFsweDRFMDAsIDB4OUZBRl0sIC8vIENKSyBpZGVvZ3JhbXNcbiAgWzB4RkYwMCwgMHhGRjYwXSAvLyBGdWxsd2lkdGggcHVuY3R1YXRpb25cbiAgLy8gVE9ETzogYWRkIGhhbGZ3aWR0aCBLYXRha2FuYSBhbmQgUm9tYW5qaSBnbHlwaHNcbiAgXVxufSwge1xuICAvLyBLb3JlYW5cbiAgbmFtZTogJ2hhbmd1bCcsXG4gIGJsb2NrczogW1sweEFDMDAsIDB4RDdBRl1dXG59XTtcbi8qKlxuICogR2l2ZW4gYSBjb2RlcG9pbnQsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IG9yIHNjcmlwdCBmYW1pbHlcbiAqIGl0IGlzIGZyb20sIG9yIG51bGwgaWYgaXQgaXMgbm90IHBhcnQgb2YgYSBrbm93biBibG9ja1xuICovXG5cbmZ1bmN0aW9uIHNjcmlwdEZyb21Db2RlcG9pbnQoY29kZXBvaW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0RGF0YS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzY3JpcHQgPSBzY3JpcHREYXRhW2ldO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNjcmlwdC5ibG9ja3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgYmxvY2sgPSBzY3JpcHQuYmxvY2tzW19pXTtcblxuICAgICAgaWYgKGNvZGVwb2ludCA+PSBibG9ja1swXSAmJiBjb2RlcG9pbnQgPD0gYmxvY2tbMV0pIHtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5uYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBBIGZsYXR0ZW5lZCB2ZXJzaW9uIG9mIGFsbCB0aGUgc3VwcG9ydGVkIGJsb2NrcyBpbiBhIHNpbmdsZSBhcnJheS5cbiAqIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1ha2Ugc3VwcG9ydGVkQ29kZXBvaW50KCkgZmFzdC5cbiAqL1xuXG52YXIgYWxsQmxvY2tzID0gW107XG5zY3JpcHREYXRhLmZvckVhY2gocyA9PiBzLmJsb2Nrcy5mb3JFYWNoKGIgPT4gYWxsQmxvY2tzLnB1c2goLi4uYikpKTtcbi8qKlxuICogR2l2ZW4gYSBjb2RlcG9pbnQsIHJldHVybiB0cnVlIGlmIGl0IGZhbGxzIHdpdGhpbiBvbmUgb2YgdGhlXG4gKiBzY3JpcHRzIG9yIHNjcmlwdCBmYW1pbGllcyBkZWZpbmVkIGFib3ZlIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogTWljcm8gYmVuY2htYXJrcyBzaG93cyB0aGF0IHRoaXMgaXMgZmFzdGVyIHRoYW5cbiAqIC9bXFx1MzAwMC1cXHUzMEZGXFx1NEUwMC1cXHU5RkFGXFx1RkYwMC1cXHVGRjYwXFx1QUMwMC1cXHVEN0FGXFx1MDkwMC1cXHUxMDlGXS8udGVzdCgpXG4gKiBpbiBGaXJlZm94LCBDaHJvbWUgYW5kIE5vZGUuXG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydGVkQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEJsb2Nrcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChjb2RlcG9pbnQgPj0gYWxsQmxvY2tzW2ldICYmIGNvZGVwb2ludCA8PSBhbGxCbG9ja3NbaSArIDFdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG52YXIgaExpbmVQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSBhIHNxcnQgdmluY3VsdW0uIFByZXZlbnRzIGltYWdlIGNyb3BwaW5nLlxuLy8gVGhlIHZpbmN1bHVtIG9mIGEgXFxzcXJ0IGNhbiBiZSBtYWRlIHRoaWNrZXIgYnkgYSBLYVRlWCByZW5kZXJpbmcgb3B0aW9uLlxuLy8gVGhpbmsgb2YgdmFyaWFibGUgZXh0cmFWaW5jdWx1bSBhcyB0d28gZGV0b3VycyBpbiB0aGUgU1ZHIHBhdGguXG4vLyBUaGUgZGV0b3VyIGJlZ2lucyBhdCB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgYXJlYSBsYWJlbGVkIGV4dHJhVmluY3VsdW0gYmVsb3cuXG4vLyBUaGUgZGV0b3VyIHByb2NlZWRzIG9uZSBleHRyYVZpbmN1bHVtIGRpc3RhbmNlIHVwIGFuZCBzbGlnaHRseSB0byB0aGUgcmlnaHQsXG4vLyBkaXNwbGFjaW5nIHRoZSByYWRpdXNlZCBjb3JuZXIgYmV0d2VlbiBzdXJkIGFuZCB2aW5jdWx1bS4gVGhlIHJhZGl1cyBpc1xuLy8gdHJhdmVyc2VkIGFzIHVzdWFsLCB0aGVuIHRoZSBkZXRvdXIgcmVzdW1lcy4gSXQgZ29lcyByaWdodCwgdG8gdGhlIGVuZCBvZlxuLy8gdGhlIHZlcnkgbG9uZyB2aW5jdWx1bSwgdGhlbiBkb3duIG9uZSBleHRyYVZpbmN1bHVtIGRpc3RhbmNlLFxuLy8gYWZ0ZXIgd2hpY2ggaXQgcmVzdW1lcyByZWd1bGFyIHBhdGggZ2VvbWV0cnkgZm9yIHRoZSByYWRpY2FsLlxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmluY3VsdW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9cbiAgICAgICAgIC/ilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLihpBleHRyYVZpbmN1bHVtXG4gICAgICAgIC8g4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4oaQMC4wNGVtICg0MCB1bml0KSBzdGQgdmluY3VsdW0gdGhpY2tuZXNzXG4gICAgICAgLyAvXG4gICAgICAvIC9cbiAgICAgLyAvXFxcbiAgICAvIC8gc3VyZFxuKi9cblxudmFyIHNxcnRNYWluID0gZnVuY3Rpb24gc3FydE1haW4oZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc3FydE1haW4gcGF0aCBnZW9tZXRyeSBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgcmV0dXJuIFwiTTk1LFwiICsgKDYyMiArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmMtMi43LDAsLTcuMTcsLTIuNywtMTMuNSwtOGMtNS44LC01LjMsLTkuNSwtMTAsLTkuNSwtMTRcXG5jMCwtMiwwLjMsLTMuMywxLC00YzEuMywtMi43LDIzLjgzLC0yMC43LDY3LjUsLTU0XFxuYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMFxcbnMxNzMsMzc4LDE3MywzNzhjMC43LDAsMzUuMywtNzEsMTA0LC0yMTNjNjguNywtMTQyLDEzNy41LC0yODUsMjA2LjUsLTQyOVxcbmM2OSwtMTQ0LDEwNC41LC0yMTcuNywxMDYuNSwtMjIxXFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDIuMDc1ICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzUuMywtOS4zLDEyLC0xNCwyMCwtMTRcXG5INDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkg4NDUuMjcyNFxcbnMtMjI1LjI3Miw0NjcsLTIyNS4yNzIsNDY3cy0yMzUsNDg2LC0yMzUsNDg2Yy0yLjcsNC43LC05LDcsLTE5LDdcXG5jLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3pcXG5NXCIgKyAoODM0ICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMSA9IGZ1bmN0aW9uIHNxcnRTaXplMShleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMSBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUxLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTI2MyxcIiArICg2MDEgKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJjMC43LDAsMTgsMzkuNyw1MiwxMTlcXG5jMzQsNzkuMyw2OC4xNjcsMTU4LjcsMTAyLjUsMjM4YzM0LjMsNzkuMyw1MS44LDExOS4zLDUyLjUsMTIwXFxuYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjdcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gMi4wODQgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNC43LC03LjMsMTEsLTExLDE5LC0xMVxcbkg0MDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxMi4zXFxucy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzJcXG5jLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMVxcbnMtMTA5LC0yNTMsLTEwOSwtMjUzYy03Mi43LC0xNjgsLTEwOS4zLC0yNTIsLTExMCwtMjUyYy0xMC43LDgsLTIyLDE2LjcsLTM0LDI2XFxuYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwelxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMiA9IGZ1bmN0aW9uIHNxcnRTaXplMihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmxcIiArIGV4dHJhVmluY3VsdW0gLyAzLjEzICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiXFxuSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsN1xcbnMtMTIsMCwtMTIsMGMtMS4zLC0zLjMsLTMuNywtMTEuNywtNywtMjVjLTM1LjMsLTEyNS4zLC0xMDYuNywtMzczLjMsLTIxNCwtNzQ0XFxuYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMFxcbmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjJcXG5jNTYsLTE3NS4zLDEyNi4zLC0zOTcuMywyMTEsLTY2NmM4NC43LC0yNjguNywxNTMuOCwtNDg4LjIsMjA3LjUsLTY1OC41XFxuYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41elxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMyA9IGZ1bmN0aW9uIHNxcnRTaXplMyhleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMyBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUzLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTQyNCxcIiArICgyMzk4ICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTRcXG5jMCwtMiwtMTAuNywxNC4zLC0zMiw0OWMtNC43LDcuMywtOS44LDE1LjcsLTE1LjUsMjVjLTUuNyw5LjMsLTkuOCwxNiwtMTIuNSwyMFxcbnMtNSw3LC01LDdjLTQsLTMuMywtOC4zLC03LjcsLTEzLC0xM3MtMTMsLTEzLC0xMywtMTNzNzYsLTEyMiw3NiwtMTIyczc3LC0xMjEsNzcsLTEyMVxcbnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxXFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDQuMjIzICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDBcXG52XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTQuNlxcbnMtODcuMywzNzguNywtMjcyLjYsMTE2NmMtMTg1LjMsNzg3LjMsLTI3OS4zLDExODIuMywtMjgyLDExODVcXG5jLTIsNiwtMTAsOSwtMjQsOVxcbmMtOCwwLC0xMiwtMC43LC0xMiwtMnogTVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcIlxcbmg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemU0ID0gZnVuY3Rpb24gc3FydFNpemU0KGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemU0IGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICByZXR1cm4gXCJNNDczLFwiICsgKDI3MTMgKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbFwiICsgZXh0cmFWaW5jdWx1bSAvIDUuMjk4ICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTcuN1xcbnMtOTAuNSw0NzgsLTI3Ni4yLDE0NjZjLTE4NS43LDk4OCwtMjc5LjUsMTQ4MywtMjgxLjUsMTQ4NWMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDBcXG5jMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2XFxuczc2LC0xNTMsNzYsLTE1M3M3NywtMTUxLDc3LC0xNTFjMC43LDAuNywzNS43LDIwMiwxMDUsNjA0YzY3LjMsNDAwLjcsMTAyLDYwMi43LDEwNCxcXG42MDZ6TVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTcuN3pcIjtcbn07XG5cbnZhciBwaGFzZVBhdGggPSBmdW5jdGlvbiBwaGFzZVBhdGgoeSkge1xuICB2YXIgeCA9IHkgLyAyOyAvLyB4IGNvb3JkaW5hdGUgYXQgdG9wIG9mIGFuZ2xlXG5cbiAgcmV0dXJuIFwiTTQwMDAwMCBcIiArIHkgKyBcIiBIMCBMXCIgKyB4ICsgXCIgMCBsNjUgNDUgTDE0NSBcIiArICh5IC0gODApICsgXCIgSDQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0VGFsbCA9IGZ1bmN0aW9uIHNxcnRUYWxsKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIC8vIHNxcnRUYWxsIGlzIGZyb20gZ2x5cGggVTIzQjcgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICAvLyBPbmUgcGF0aCBlZGdlIGhhcyBhIHZhcmlhYmxlIGxlbmd0aC4gSXQgcnVucyB2ZXJ0aWNhbGx5IGZyb20gdGhlIHZpbmN1bHVtXG4gIC8vIHRvIGEgcG9pbnQgbmVhciAoMTQgdW5pdHMpIHRoZSBib3R0b20gb2YgdGhlIHN1cmQuIFRoZSB2aW5jdWx1bVxuICAvLyBpcyBub3JtYWxseSA0MCB1bml0cyB0aGljay4gU28gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBxdWVzdGlvbiBpczpcbiAgdmFyIHZlcnRTZWdtZW50ID0gdmlld0JveEhlaWdodCAtIDU0IC0gaExpbmVQYWQgLSBleHRyYVZpbmN1bHVtO1xuICByZXR1cm4gXCJNNzAyIFwiICsgKGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIkg0MDAwMDBcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJcXG5INzQydlwiICsgdmVydFNlZ21lbnQgKyBcImwtNCA0LTQgNGMtLjY2Ny43IC0yIDEuNS00IDIuNXMtNC4xNjcgMS44MzMtNi41IDIuNS01LjUgMS05LjUgMVxcbmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzBcXG5jLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjdcXG4yMTkgNjYxIGwyMTggNjYxek03MDIgXCIgKyBoTGluZVBhZCArIFwiSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJINzQyelwiO1xufTtcblxudmFyIHNxcnRQYXRoID0gZnVuY3Rpb24gc3FydFBhdGgoc2l6ZSwgZXh0cmFWaW5jdWx1bSwgdmlld0JveEhlaWdodCkge1xuICBleHRyYVZpbmN1bHVtID0gMTAwMCAqIGV4dHJhVmluY3VsdW07IC8vIENvbnZlcnQgZnJvbSBkb2N1bWVudCBlbXMgdG8gdmlld0JveC5cblxuICB2YXIgcGF0aCA9IFwiXCI7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSBcInNxcnRNYWluXCI6XG4gICAgICBwYXRoID0gc3FydE1haW4oZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUxXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUxKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMlwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTNcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTMoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemU0XCI6XG4gICAgICBwYXRoID0gc3FydFNpemU0KGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRUYWxsXCI6XG4gICAgICBwYXRoID0gc3FydFRhbGwoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQsIHZpZXdCb3hIZWlnaHQpO1xuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59O1xudmFyIGlubmVyUGF0aCA9IGZ1bmN0aW9uIGlubmVyUGF0aChuYW1lLCBoZWlnaHQpIHtcbiAgLy8gVGhlIGlubmVyIHBhcnQgb2Ygc3RyZXRjaHkgdGFsbCBkZWxpbWl0ZXJzXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgXCJcXHUyMzljXCI6XG4gICAgICByZXR1cm4gXCJNMjkxIDAgSDQxNyBWXCIgKyBoZWlnaHQgKyBcIiBIMjkxeiBNMjkxIDAgSDQxNyBWXCIgKyBoZWlnaHQgKyBcIiBIMjkxelwiO1xuXG4gICAgY2FzZSBcIlxcdTIyMjNcIjpcbiAgICAgIHJldHVybiBcIk0xNDUgMCBIMTg4IFZcIiArIGhlaWdodCArIFwiIEgxNDV6IE0xNDUgMCBIMTg4IFZcIiArIGhlaWdodCArIFwiIEgxNDV6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjIyNVwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXogTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXpcIiArIChcIk0zNjcgMCBINDEwIFZcIiArIGhlaWdodCArIFwiIEgzNjd6IE0zNjcgMCBINDEwIFZcIiArIGhlaWdodCArIFwiIEgzNjd6XCIpO1xuXG4gICAgY2FzZSBcIlxcdTIzOWZcIjpcbiAgICAgIHJldHVybiBcIk00NTcgMCBINTgzIFZcIiArIGhlaWdodCArIFwiIEg0NTd6IE00NTcgMCBINTgzIFZcIiArIGhlaWdodCArIFwiIEg0NTd6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNhMlwiOlxuICAgICAgcmV0dXJuIFwiTTMxOSAwIEg0MDMgVlwiICsgaGVpZ2h0ICsgXCIgSDMxOXogTTMxOSAwIEg0MDMgVlwiICsgaGVpZ2h0ICsgXCIgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJcXHUyM2E1XCI6XG4gICAgICByZXR1cm4gXCJNMjYzIDAgSDM0NyBWXCIgKyBoZWlnaHQgKyBcIiBIMjYzeiBNMjYzIDAgSDM0NyBWXCIgKyBoZWlnaHQgKyBcIiBIMjYzelwiO1xuXG4gICAgY2FzZSBcIlxcdTIzYWFcIjpcbiAgICAgIHJldHVybiBcIk0zODQgMCBINTA0IFZcIiArIGhlaWdodCArIFwiIEgzODR6IE0zODQgMCBINTA0IFZcIiArIGhlaWdodCArIFwiIEgzODR6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNkMFwiOlxuICAgICAgcmV0dXJuIFwiTTMxMiAwIEgzNTUgVlwiICsgaGVpZ2h0ICsgXCIgSDMxMnogTTMxMiAwIEgzNTUgVlwiICsgaGVpZ2h0ICsgXCIgSDMxMnpcIjtcblxuICAgIGNhc2UgXCJcXHUyMDE2XCI6XG4gICAgICByZXR1cm4gXCJNMjU3IDAgSDMwMCBWXCIgKyBoZWlnaHQgKyBcIiBIMjU3eiBNMjU3IDAgSDMwMCBWXCIgKyBoZWlnaHQgKyBcIiBIMjU3elwiICsgKFwiTTQ3OCAwIEg1MjEgVlwiICsgaGVpZ2h0ICsgXCIgSDQ3OHogTTQ3OCAwIEg1MjEgVlwiICsgaGVpZ2h0ICsgXCIgSDQ3OHpcIik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG52YXIgcGF0aCA9IHtcbiAgLy8gVGhlIGRvdWJsZWxlZnRhcnJvdyBnZW9tZXRyeSBpcyBmcm9tIGdseXBoIFUrMjFEMCBpbiB0aGUgZm9udCBLYVRlWCBNYWluXG4gIGRvdWJsZWxlZnRhcnJvdzogXCJNMjYyIDE1N1xcbmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuM1xcbiAwLTEyLjIuNS0xNC41IDEuNS0yLjMgMS00LjggNC41LTcuNSAxMC41LTQ5LjMgOTcuMy0xMjEuNyAxNjkuMy0yMTcgMjE2LTI4XFxuIDE0LTU3LjMgMjUtODggMzMtNi43IDItMTEgMy44LTEzIDUuNS0yIDEuNy0zIDQuMi0zIDcuNXMxIDUuOCAzIDcuNVxcbmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41XFxuIDE1Ny41IDkuMyA4IDE1LjMgMTIuMyAxOCAxM2g2YzEyLS43IDE4LTQgMTgtMTAgMC0yLTEuNy03LTUtMTUtMjMuMy00Ni01Mi04N1xcbi04Ni0xMjNsLTEwLTEwaDM5OTczOHYtNDBIMjE4YzMyOCAwIDAgMCAwIDBsLTEwLThjLTI2LjctMjAtNjUuNy00My0xMTctNjkgMi43XFxuLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwelxcbm04IDB2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpcIixcbiAgLy8gZG91YmxlcmlnaHRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjFEMiBpbiBmb250IEthVGVYIE1haW5cbiAgZG91YmxlcmlnaHRhcnJvdzogXCJNMzk5NzM4IDM5MmxcXG4tMTAgMTBjLTM0IDM2LTYyLjcgNzctODYgMTIzLTMuMyA4LTUgMTMuMy01IDE2IDAgNS4zIDYuNyA4IDIwIDggNy4zIDAgMTIuMi0uNVxcbiAxNC41LTEuNSAyLjMtMSA0LjgtNC41IDcuNS0xMC41IDQ5LjMtOTcuMyAxMjEuNy0xNjkuMyAyMTctMjE2IDI4LTE0IDU3LjMtMjUgODhcXG4tMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4XFxuLTE3LjMtMTI4LjItNDcuOC0xODAuNS05MS41LTUyLjMtNDMuNy05My44LTk2LjItMTI0LjUtMTU3LjUtOS4zLTgtMTUuMy0xMi4zLTE4XFxuLTEzaC02Yy0xMiAuNy0xOCA0LTE4IDEwIDAgMiAxLjcgNyA1IDE1IDIzLjMgNDYgNTIgODcgODYgMTIzbDEwIDEwSDB2NDBoMzk5NzgyXFxuYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zXFxuLTEwNyA2NGwtMTAgOEgwdjQwek0wIDE1N3Y0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOTAgaW4gZm9udCBLYVRlWCBNYWluXG4gIGxlZnRhcnJvdzogXCJNNDAwMDAwIDI0MUgxMTBsMy0zYzY4LjctNTIuNyAxMTMuNy0xMjBcXG4gMTM1LTIwMiA0LTE0LjcgNi0yMyA2LTI1IDAtNy4zLTctMTEtMjEtMTEtOCAwLTEzLjIuOC0xNS41IDIuNS0yLjMgMS43LTQuMiA1LjhcXG4tNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0N1xcbmMtMTAgNC0xNiA3LjctMTggMTEgMCA4LjcgNiAxNC4zIDE4IDE3IDQ3LjMgMTguNyA4Ny44IDQ3IDEyMS41IDg1UzE5NiA0NDEuMyAyMDhcXG4gNDkwYy43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjLjMgMS4zIDEgMy4zIDIgNnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zXFxuIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyXFxuIGwtMy0zaDM5OTg5MHpNMTAwIDI0MXY0MGgzOTk5MDB2LTQwelwiLFxuICAvLyBvdmVyYnJhY2UgaXMgZnJvbSBnbHlwaHMgVSsyM0E5LzIzQTgvMjNBNyBpbiBmb250IEthVGVYX1NpemU0LVJlZ3VsYXJcbiAgbGVmdGJyYWNlOiBcIk02IDU0OGwtNi02di0zNWw2LTExYzU2LTEwNCAxMzUuMy0xODEuMyAyMzgtMjMyIDU3LjMtMjguNyAxMTdcXG4tNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43XFxuIDUtNiA5LTEwIDEzLS43IDEtNy4zIDEtMjAgMUg2elwiLFxuICBsZWZ0YnJhY2V1bmRlcjogXCJNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTNcXG4gMzUuMzEzIDUxLjMgODAuODEzIDkzLjggMTM2LjUgMTI3LjUgNTUuNjg4IDMzLjcgMTE3LjE4OCA1NS44IDE4NC41IDY2LjUuNjg4XFxuIDAgMiAuMyA0IDEgMTguNjg4IDIuNyA3NiA0LjMgMTcyIDVoMzk5NDUwdjEyMEg0MjlsLTYtMWMtMTI0LjY4OC04LTIzNS02MS43XFxuLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2elwiLFxuICAvLyBvdmVyZ3JvdXAgaXMgZnJvbSB0aGUgTW5TeW1ib2wgcGFja2FnZSAocHVibGljIGRvbWFpbilcbiAgbGVmdGdyb3VwOiBcIk00MDAwMDAgODBcXG5INDM1QzY0IDgwIDE2OC4zIDIyOS40IDIxIDI2MGMtNS45IDEuMi0xOCAwLTE4IDAtMiAwLTMtMS0zLTN2LTM4Qzc2IDYxIDI1NyAwXFxuIDQzNSAwaDM5OTU2NXpcIixcbiAgbGVmdGdyb3VwdW5kZXI6IFwiTTQwMDAwMCAyNjJcXG5INDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTlcXG4gNDM1IDIxOWgzOTk1NjV6XCIsXG4gIC8vIEhhcnBvb25zIGFyZSBmcm9tIGdseXBoIFUrMjFCRCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhhcnBvb246IFwiTTAgMjY3Yy43IDUuMyAzIDEwIDcgMTRoMzk5OTkzdi00MEg5M2MzLjNcXG4tMy4zIDEwLjItOS41IDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNVxcbi0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43XFxuLTE5NiAyMjgtNi43IDQuNy0xMC43IDgtMTIgMTAtMS4zIDItMiA1LjctMiAxMXptMTAwLTI2djQwaDM5OTkwMHYtNDB6XCIsXG4gIGxlZnRoYXJwb29ucGx1czogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjVcXG4gMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1LTE4LjMgMy0yMS0xLjNcXG4tNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjctMTk2IDIyOC02LjcgNC43XFxuLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHpcXG5tMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIGxlZnRoYXJwb29uZG93bjogXCJNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzM1xcbiA1LjMzMyAxMiAxMGM5MC42NjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMzMzIDEwLjY2NyA2LjMzMyAxNi4zMzMgOSAxNyAyIC42NjcgNVxcbiAxIDkgMWg1YzEwLjY2NyAwIDE2LjY2Ny0yIDE4LTYgMi0yLjY2NyAxLTkuNjY3LTMtMjEtMzItODcuMzMzLTgyLjY2Ny0xNTcuNjY3XFxuLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxelwiLFxuICBsZWZ0aGFycG9vbmRvd25wbHVzOiBcIk03IDQzNWMtNCA0LTYuMyA4LjctNyAxNCAwIDUuMy43IDkgMiAxMXM1LjMgNS4zIDEyXFxuIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjdcXG4tMiAxOC02IDItMi43IDEtOS43LTMtMjEtMzItODcuMy04Mi43LTE1Ny43LTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwSDd6bTkzIDBcXG52NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIGhvb2sgaXMgZnJvbSBnbHlwaCBVKzIxQTkgaW4gZm9udCBLYVRlWCBNYWluXG4gIGxlZnRob29rOiBcIk00MDAwMDAgMjgxIEgxMDNzLTMzLTExLjItNjEtMzMuNVMwIDE5Ny4zIDAgMTY0czE0LjItNjEuMiA0Mi41XFxuLTgzLjVDNzAuOCA1OC4yIDEwNCA0NyAxNDIgNDcgYzE2LjcgMCAyNSA2LjcgMjUgMjAgMCAxMi04LjcgMTguNy0yNiAyMC00MCAzLjNcXG4tNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjFcXG4gNzEuNSAyM2gzOTk4NTl6TTEwMyAyODF2LTQwaDM5OTg5N3Y0MHpcIixcbiAgbGVmdGxpbmVzZWdtZW50OiBcIk00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6XFxuTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcIixcbiAgbGVmdG1hcHN0bzogXCJNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwelxcbk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XCIsXG4gIC8vIHRvZnJvbSBpcyBmcm9tIGdseXBoIFUrMjFDNCBpbiBmb250IEthVGVYIEFNUyBSZWd1bGFyXG4gIGxlZnRUb0Zyb206IFwiTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzXFxuLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5LTcwLTEwMWwtNy04aDM5OTkwNXYtNDBIOTVsNy04XFxuYzI4LjctMzIgNTItNjUuNyA3MC0xMDEgMTAuNy0yMy4zIDE2LTM1LjcgMTYtMzcgMC0uNy03LjctMS0yMy0xaC0yMkMxMTUuNyAyNjUuM1xcbiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpcIixcbiAgbG9uZ2VxdWFsOiBcIk0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwelxcbk0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwelwiLFxuICBtaWRicmFjZTogXCJNMjAwNDI4IDMzNFxcbmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTRcXG4tNTMuMyA4Ni43LTEyMy43IDE1My0yMTEgMTk5LTY2LjcgMzYtMTM3LjMgNTYuMy0yMTIgNjJIMFYyMTRoMTk5NTY4YzE3OC4zLTExLjdcXG4gMzExLjctNzguMyA0MDMtMjAxIDYtOCA5LjctMTIgMTEtMTIgLjctLjcgNi43LTEgMTgtMXMxNy4zLjMgMTggMWMxLjMgMCA1IDQgMTFcXG4gMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpcIixcbiAgbWlkYnJhY2V1bmRlcjogXCJNMTk5NTcyIDIxNFxcbmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTRcXG4gNTMuMy04Ni43IDEyMy43LTE1MyAyMTEtMTk5IDY2LjctMzYgMTM3LjMtNTYuMyAyMTItNjJoMTk5NTY4djEyMEgyMDA0MzJjLTE3OC4zXFxuIDExLjctMzExLjcgNzguMy00MDMgMjAxLTYgOC05LjcgMTItMTEgMTItLjcuNy02LjcgMS0xOCAxcy0xNy4zLS4zLTE4LTFjLTEuMyAwXFxuLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6XCIsXG4gIG9paW50U2l6ZTE6IFwiTTUxMi42IDcxLjZjMjcyLjYgMCAzMjAuMyAxMDYuOCAzMjAuMyAxNzguMiAwIDcwLjgtNDcuNyAxNzcuNlxcbi0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnpcXG5tMzY4LjEgMTc4LjJjMC04Ni40LTYwLjktMjE1LjQtMzY4LjEtMjE1LjQtMzA2LjQgMC0zNjcuMyAxMjktMzY3LjMgMjE1LjQgMCA4NS44XFxuNjAuOSAyMTQuOCAzNjcuMyAyMTQuOCAzMDcuMiAwIDM2OC4xLTEyOSAzNjguMS0yMTQuOHpcIixcbiAgb2lpbnRTaXplMjogXCJNNzU3LjggMTAwLjFjMzg0LjcgMCA0NTEuMSAxMzcuNiA0NTEuMSAyMzAgMCA5MS4zLTY2LjQgMjI4LjhcXG4tNDUxLjEgMjI4LjgtMzg2LjMgMC00NTIuNy0xMzcuNS00NTIuNy0yMjguOCAwLTkyLjQgNjYuNC0yMzAgNDUyLjctMjMwelxcbm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMlxcbmMwIDExMCA4NCAyNzYgNTA0IDI3NnM1MDIuNC0xNjYgNTAyLjQtMjc2elwiLFxuICBvaWlpbnRTaXplMTogXCJNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42XFxuLTQ4MC41IDE3Ny42UzIwMi4xIDMyMC42IDIwMi4xIDI0OS44YzAtNzEuNCA3MC41LTE3OC4yIDQ3OS4zLTE3OC4yelxcbm01MjUuOCAxNzguMmMwLTg2LjQtODYuOC0yMTUuNC01MjUuNy0yMTUuNC00MzcuOSAwLTUyNC43IDEyOS01MjQuNyAyMTUuNCAwXFxuODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44elwiLFxuICBvaWlpbnRTaXplMjogXCJNMTAyMS4yIDUzYzYwMy42IDAgNzA3LjggMTY1LjggNzA3LjggMjc3LjIgMCAxMTAtMTA0LjIgMjc1LjhcXG4tNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3pcXG5tNzcwLjQgMjc3LjFjMC0xMzEuMi0xMjYuNC0zMjcuNi03NzAuNS0zMjcuNlMyNDguNCAxOTguOSAyNDguNCAzMzAuMVxcbmMwIDEzMCAxMjguOCAzMjYuNCA3NzIuNyAzMjYuNHM3NzAuNS0xOTYuNCA3NzAuNS0zMjYuNHpcIixcbiAgcmlnaHRhcnJvdzogXCJNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOFxcbi0xNi43IDMyLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwXFxuIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuN1xcbiAzOS04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NVxcbi00MC41LTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNVxcbi0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3XFxuIDE1MS43IDEzOSAyMDV6bTAgMHY0MGgzOTk5MDB2LTQwelwiLFxuICByaWdodGJyYWNlOiBcIk00MDAwMDAgNTQybFxcbi02IDZoLTE3Yy0xMi43IDAtMTkuMy0uMy0yMC0xLTQtNC03LjMtOC4zLTEwLTEzLTM1LjMtNTEuMy04MC44LTkzLjgtMTM2LjUtMTI3LjVcXG5zLTExNy4yLTU1LjgtMTg0LjUtNjYuNWMtLjcgMC0yLS4zLTQtMS0xOC43LTIuNy03Ni00LjMtMTcyLTVIMFYyMTRoMzk5NTcxbDYgMVxcbmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpcIixcbiAgcmlnaHRicmFjZXVuZGVyOiBcIk0zOTk5OTQgMGw2IDZ2MzVsLTYgMTFjLTU2IDEwNC0xMzUuMyAxODEuMy0yMzggMjMyLTU3LjNcXG4gMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzN1xcbi0xNzQgMi43LTUgNi05IDEwLTEzIC43LTEgNy4zLTEgMjAtMWgxN3pcIixcbiAgcmlnaHRncm91cDogXCJNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDBcXG4gMy0xIDMtM3YtMzhjLTc2LTE1OC0yNTctMjE5LTQzNS0yMTlIMHpcIixcbiAgcmlnaHRncm91cHVuZGVyOiBcIk0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMThcXG4gMCAyIDAgMyAxIDMgM3YzOGMtNzYgMTU4LTI1NyAyMTktNDM1IDIxOUgwelwiLFxuICByaWdodGhhcnBvb246IFwiTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjNcXG4tMy43LTE1LjMtMTEtMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTJcXG4tMTAuNyAwLTE2LjcgMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4XFxuIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbnBsdXM6IFwiTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMtMy43LTE1LjMtMTFcXG4tMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjdcXG4gMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4IDY5LjIgOTIgOTQuNXpcXG5tMCAwdjQwaDM5OTkwMHYtNDB6IG0xMDAgMTk0djQwaDM5OTkwMHYtNDB6bTAgMHY0MGgzOTk5MDB2LTQwelwiLFxuICByaWdodGhhcnBvb25kb3duOiBcIk0zOTk3NDcgNTExYzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjggMTUtMi41czQuNy02LjhcXG4gOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjMgOC41LTUuOCA5LjVcXG4tNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NVxcbi0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd25wbHVzOiBcIk0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjhcXG4gMTUtMi41czQuNy02LjggOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjNcXG4gOC41LTUuOCA5LjUtNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjNcXG4tNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6XFxubTAtMTk0djQwaDQwMDAwMHYtNDB6bTAgMHY0MGg0MDAwMDB2LTQwelwiLFxuICByaWdodGhvb2s6IFwiTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zXFxuIDE1LTQwIDAtMjIuNy05LjgtNDAuNy0yOS41LTU0LTE5LjctMTMuMy00My41LTIxLTcxLjUtMjMtMTcuMy0xLjMtMjYtOC0yNi0yMCAwXFxuLTEzLjMgOC43LTIwIDI2LTIwIDM4IDAgNzEgMTEuMiA5OSAzMy41IDAgMCA3IDUuNiAyMSAxNi43IDE0IDExLjIgMjEgMzMuNSAyMVxcbiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpcIixcbiAgcmlnaHRsaW5lc2VnbWVudDogXCJNMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XFxuTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwelwiLFxuICByaWdodFRvRnJvbTogXCJNNDAwMDAwIDE2N2MtNzAuNy00Mi0xMTgtOTcuNy0xNDItMTY3aC0yM2MtMTUuMyAwLTIzIC4zLTIzXFxuIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMlxcbi01MiA2NS43LTcwIDEwMS0xMC43IDIzLjMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjNjMjQtNjkuMyA3MS4zLTEyNSAxNDJcXG4tMTY3eiBNMTAwIDE0N3Y0MGgzOTk5MDB2LTQwek0wIDM0MXY0MGgzOTk5MDB2LTQwelwiLFxuICAvLyB0d29oZWFkbGVmdGFycm93IGlzIGZyb20gZ2x5cGggVSsyMTlFIGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgdHdvaGVhZGxlZnRhcnJvdzogXCJNMCAxNjdjNjggNDBcXG4gMTE1LjcgOTUuNyAxNDMgMTY3aDIyYzE1LjMgMCAyMy0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OVxcbi03MC0xMDFsLTctOGgxMjVsOSA3YzUwLjcgMzkuMyA4NSA4NiAxMDMgMTQwaDQ2YzAtNC43LTYuMy0xOC43LTE5LTQyLTE4LTM1LjNcXG4tNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTlcXG4tMzcuMzMzIDE5LTQyaC00NmMtMTggNTQtNTIuMyAxMDAuNy0xMDMgMTQwbC05IDdIOTVsNy04YzI4LjctMzIgNTItNjUuNyA3MC0xMDFcXG4gMTAuNy0yMy4zMzMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDcxLjMgNjggMTI3IDAgMTY3elwiLFxuICB0d29oZWFkcmlnaHRhcnJvdzogXCJNNDAwMDAwIDE2N1xcbmMtNjgtNDAtMTE1LjctOTUuNy0xNDMtMTY3aC0yMmMtMTUuMyAwLTIzIC4zLTIzIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuM1xcbiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDJcXG4gMTggMzUuMyA0MCA2Ny4zIDY2IDk2bDkgOUgwdjQwaDM5OTcxNmwtOSA5Yy0yNiAyOC43LTQ4IDYwLjctNjYgOTYtMTIuNyAyMy4zMzNcXG4tMTkgMzcuMzMzLTE5IDQyaDQ2YzE4LTU0IDUyLjMtMTAwLjcgMTAzLTE0MGw5LTdoMTI1bC03IDhjLTI4LjcgMzItNTIgNjUuNy03MFxcbiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3elwiLFxuICAvLyB0aWxkZTEgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGEgZ2x5cGggZnJvbSB0aGUgTW5TeW1ib2wgcGFja2FnZVxuICB0aWxkZTE6IFwiTTIwMCA1NS41MzhjLTc3IDAtMTY4IDczLjk1My0xNzcgNzMuOTUzLTMgMC03XFxuLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDBcXG4gMTE0IDY4IDE5MSA2OCA3OCAwIDE2OC02OCAxNzctNjggNCAwIDcgMiA5IDVsMTIgMTljMSAyLjE3NSAyIDQuMzUgMiA2LjUyNSAwXFxuIDQuMzUtMiA3LjYxMy01IDkuNzg4bC0xOSAxMy4wNWMtOTIgNjMuMDc3LTExNi45MzcgNzUuMzA4LTE4MyA3Ni4xMjhcXG4tNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6XCIsXG4gIC8vIGRpdHRvIHRpbGRlMiwgdGlsZGUzLCAmIHRpbGRlNFxuICB0aWxkZTI6IFwiTTM0NCA1NS4yNjZjLTE0MiAwLTMwMC42MzggODEuMzE2LTMxMS41IDg2LjQxOFxcbi04LjAxIDMuNzYyLTIyLjUgMTAuOTEtMjMuNSA1LjU2MkwxIDEyMGMtMS0yLTEtMy0xLTQgMC01IDMtOSA4LTEwbDE4LjQtOUMxNjAuOVxcbiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNFxcbmMxIDIuMTQgMSAzLjIxIDEgNC4yOCAwIDUuMzQ3LTMgOS42MjYtNyAxMC42OTZsLTIyLjMgMTIuNjIyQzg1Mi42IDE1OC4zNzIgNzUxXFxuIDE4MS40NzYgNjc2IDE4MS40NzZjLTE0OSAwLTE4OS0xMjYuMjEtMzMyLTEyNi4yMXpcIixcbiAgdGlsZGUzOiBcIk03ODYgNTlDNDU3IDU5IDMyIDE3NS4yNDIgMTMgMTc1LjI0MmMtNiAwLTEwLTMuNDU3XFxuLTExLTEwLjM3TC4xNSAxMzhjLTEtNyAzLTEyIDEwLTEzbDE5LjItNi40QzM3OC40IDQwLjcgNjM0LjMgMCA4MDQuMyAwYzMzNyAwXFxuIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3XFxuIDE2LjU5NS02LjY5NyAxNy40OTJsLTIxLjA1MiA3LjMxYy0zNjcuOSA5OC4xNDYtNjA5LjE1IDEyMi42OTYtNzc4LjE1IDEyMi42OTZcXG4gLTMzOCAwLTQwOS0xNTYuNTczLTc0NC0xNTYuNTczelwiLFxuICB0aWxkZTQ6IFwiTTc4NiA1OEM0NTcgNTggMzIgMTc3LjQ4NyAxMyAxNzcuNDg3Yy02IDAtMTAtMy4zNDVcXG4tMTEtMTAuMDM1TC4xNSAxNDNjLTEtNyAzLTEyIDEwLTEzbDIyLTYuN0MzODEuMiAzNSA2MzcuMTUgMCA4MDcuMTUgMGMzMzcgMCA0MDlcXG4gMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTlcXG4gMTQuNDk1bC0yMC43IDUuNTc0Yy0zNjYuODUgOTkuNzktNjA3LjMgMTM5LjM3Mi03NzYuMyAxMzkuMzcyLTMzOCAwLTQwOVxcbiAtMTc1LjIzNi03NDQtMTc1LjIzNnpcIixcbiAgLy8gdmVjIGlzIGZyb20gZ2x5cGggVSsyMEQ3IGluIGZvbnQgS2FUZVggTWFpblxuICB2ZWM6IFwiTTM3NyAyMGMwLTUuMzMzIDEuODMzLTEwIDUuNS0xNFMzOTEgMCAzOTcgMGM0LjY2NyAwIDguNjY3IDEuNjY3IDEyIDVcXG4zLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExXFxuMTAuNjY3IDExIDE4IDAgNi0xIDEwLTMgMTJzLTYuNjY3IDUtMTQgOWMtMjguNjY3IDE0LjY2Ny01My42NjcgMzUuNjY3LTc1IDYzXFxuLTEuMzMzIDEuMzMzLTMuMTY3IDMuNS01LjUgNi41cy00IDQuODMzLTUgNS41Yy0xIC42NjctMi41IDEuMzMzLTQuNSAycy00LjMzMyAxXFxuLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OVxcbkgyMTNsLTE3MS0xYy04LjY2Ny02LTEzLTEyLjMzMy0xMy0xOSAwLTQuNjY3IDQuMzMzLTExLjMzMyAxMy0yMGgzNTlcXG5jLTE2LTI1LjMzMy0yNC00NS0yNC01OXpcIixcbiAgLy8gd2lkZWhhdDEgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGEgZ2x5cGggZnJvbSB0aGUgTW5TeW1ib2wgcGFja2FnZVxuICB3aWRlaGF0MTogXCJNNTI5IDBoNWw1MTkgMTE1YzUgMSA5IDUgOSAxMCAwIDEtMSAyLTEgM2wtNCAyMlxcbmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pcIixcbiAgLy8gZGl0dG8gd2lkZWhhdDIsIHdpZGVoYXQzLCAmIHdpZGVoYXQ0XG4gIHdpZGVoYXQyOiBcIk0xMTgxIDBoMmwxMTcxIDE3NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAyMjBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgd2lkZWhhdDM6IFwiTTExODEgMGgybDExNzEgMjM2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDI4MGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0NDogXCJNMTE4MSAwaDJsMTE3MSAyOTZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMzQwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIC8vIHdpZGVjaGVjayBwYXRocyBhcmUgYWxsIGludmVydGVkIHZlcnNpb25zIG9mIHdpZGVoYXRcbiAgd2lkZWNoZWNrMTogXCJNNTI5LDE1OWg1bDUxOSwtMTE1YzUsLTEsOSwtNSw5LC0xMGMwLC0xLC0xLC0yLC0xLC0zbC00LC0yMmMtMSxcXG4tNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6XCIsXG4gIHdpZGVjaGVjazI6IFwiTTExODEsMjIwaDJsMTE3MSwtMTc2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgd2lkZWNoZWNrMzogXCJNMTE4MSwyODBoMmwxMTcxLC0yMzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2s0OiBcIk0xMTgxLDM0MGgybDExNzEsLTI5NmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIC8vIFRoZSBuZXh0IHRlbiBwYXRocyBzdXBwb3J0IHJlYWN0aW9uIGFycm93cyBmcm9tIHRoZSBtaGNoZW0gcGFja2FnZS5cbiAgLy8gQXJyb3dzIGZvciBcXGNlezwtLT59IGFyZSBvZmZzZXQgZnJvbSB4QXhpcyBieSAwLjIyZXgsIHBlciBtaGNoZW0gaW4gTGFUZVhcbiAgLy8gYmFyYWJvdmVsZWZ0YXJyb3cgaXMgbW9zdGx5IGZyb20gZ2x5cGggVSsyMTkwIGluIGZvbnQgS2FUZVggTWFpblxuICBiYXJhYm92ZWxlZnRhcnJvdzogXCJNNDAwMDAwIDYyMGgtMzk5ODkwbDMgLTNjNjguNyAtNTIuNyAxMTMuNyAtMTIwIDEzNSAtMjAyXFxuYzQgLTE0LjcgNiAtMjMgNiAtMjVjMCAtNy4zIC03IC0xMSAtMjEgLTExYy04IDAgLTEzLjIgMC44IC0xNS41IDIuNVxcbmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMFxcbnMtNzQuMiA2Ni4zIC0xMjEuNSA4NWMtMTAgNCAtMTYgNy43IC0xOCAxMWMwIDguNyA2IDE0LjMgMTggMTdjNDcuMyAxOC43IDg3LjggNDdcXG4xMjEuNSA4NXM1Ni41IDgxLjMgNjguNSAxMzBjMC43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjMC4zIDEuMyAxIDMuMyAyIDZcXG5zMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMVxcbmMwIC0yIC0yIC0xMC4zIC02IC0yNWMtMjAgLTc5LjMgLTY1IC0xNDYuNyAtMTM1IC0yMDJsLTMgLTNoMzk5ODkwelxcbk0xMDAgNjIwdjQwaDM5OTkwMHYtNDB6IE0wIDI0MXY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwelwiLFxuICAvLyByaWdodGFycm93YWJvdmViYXIgaXMgbW9zdGx5IGZyb20gZ2x5cGggVSsyMTkyLCBLYVRlWCBNYWluXG4gIHJpZ2h0YXJyb3dhYm92ZWJhcjogXCJNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOC0xNi43IDMyXFxuLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMFxcbjEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43IDM5XFxuLTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1LTQwLjVcXG4tMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4xNTEuNyAxMzkgMjA1em05NiAzNzloMzk5ODk0djQwSDB6bTAgMGgzOTk5MDR2NDBIMHpcIixcbiAgLy8gVGhlIHNob3J0IGxlZnQgaGFycG9vbiBoYXMgMC41ZW0gKGkuZS4gNTAwIHVuaXRzKSBrZXJuIG9uIHRoZSBsZWZ0IGVuZC5cbiAgLy8gUmVmIGZyb20gbWhjaGVtLnN0eTogXFxybGFwe1xccmFpc2Vib3h7LS4yMmV4fXskXFxrZXJuMC41ZW1cbiAgYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOiBcIk01MDcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMVxcbmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTdcXG5jMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMVxcbmMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LC0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5MzUxLDBsMCwtNDBcXG5jLTM5ODU3MCwwLC0zOTk0MzcsMCwtMzk5NDM3LDB6IE01OTMgNDM1IHY0MCBIMzk5NTAwIHYtNDB6XFxuTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwelwiLFxuICByaWdodGhhcnBvb25hYm92ZXNob3J0YmFyOiBcIk0wLDI0MSBsMCw0MGMzOTkxMjYsMCwzOTk5OTMsMCwzOTk5OTMsMFxcbmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LFxcbi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDZcXG5jLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6XFxuTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpcIixcbiAgc2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uOiBcIk03LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTFcXG5jMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LFxcbjFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFjLTMyLC04Ny4zLC04Mi43LC0xNTcuNyxcXG4tMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTkwNywwbDAsLTQwYy0zOTkxMjYsMCwtMzk5OTkzLDAsLTM5OTk5Mywwelxcbk05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpcIixcbiAgc2hvcnRyaWdodGhhcnBvb25hYm92ZWJhcjogXCJNNTMsMjQxbDAsNDBjMzk4NTcwLDAsMzk5NDM3LDAsMzk5NDM3LDBcXG5jNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSxcXG4tMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2XFxuYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41elxcbk01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6XCJcbn07XG52YXIgdGFsbERlbGltID0gZnVuY3Rpb24gdGFsbERlbGltKGxhYmVsLCBtaWRIZWlnaHQpIHtcbiAgc3dpdGNoIChsYWJlbCkge1xuICAgIGNhc2UgXCJsYnJhY2tcIjpcbiAgICAgIHJldHVybiBcIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IGgzNDcgdi04NFxcbkg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IGg4NHpcIjtcblxuICAgIGNhc2UgXCJyYnJhY2tcIjpcbiAgICAgIHJldHVybiBcIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc1OSBIMCB2ODQgSDM0N3pcXG5NMzQ3IDE3NTkgVjAgSDI2MyBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc1OSBoODR6XCI7XG5cbiAgICBjYXNlIFwidmVydFwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAxNSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1XFxuYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2XCIgKyAtbWlkSGVpZ2h0ICsgXCIgdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1XFxuYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgaDQzelwiO1xuXG4gICAgY2FzZSBcImRvdWJsZXZlcnRcIjpcbiAgICAgIHJldHVybiBcIk0xNDUgMTUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNVxcbmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdlwiICsgLW1pZEhlaWdodCArIFwiIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNVxcbmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGg0M3pcXG5NMzY3IDE1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTVcXG5jMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZcIiArIC1taWRIZWlnaHQgKyBcIiB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTVcXG5jLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTQxMCAxNSBIMzY3IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBoNDN6XCI7XG5cbiAgICBjYXNlIFwibGZsb29yXCI6XG4gICAgICByZXR1cm4gXCJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3MTUgaDI2MyB2ODQgSDMxOXpcXG5NTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzE1IEgzMTl6XCI7XG5cbiAgICBjYXNlIFwicmZsb29yXCI6XG4gICAgICByZXR1cm4gXCJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3OTkgSDAgdi04NCBIMzE5elxcbk1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3MTUgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJsY2VpbFwiOlxuICAgICAgcmV0dXJuIFwiTTQwMyAxNzU5IFY4NCBINjY2IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjYwMiBoODR6XFxuTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjYwMiBoODR6XCI7XG5cbiAgICBjYXNlIFwicmNlaWxcIjpcbiAgICAgIHJldHVybiBcIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcXG5NMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcIjtcblxuICAgIGNhc2UgXCJscGFyZW5cIjpcbiAgICAgIHJldHVybiBcIk04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMVxcbmMtNS4zLDUuMywtMTAuMywxMSwtMTUsMTdjLTI0Mi43LDI5NC43LC0zOTUuMyw2ODIsLTQ1OCwxMTYyYy0yMS4zLDE2My4zLC0zMy4zLDM0OSxcXG4tMzYsNTU3IGwwLFwiICsgKG1pZEhlaWdodCArIDg0KSArIFwiYzAuMiw2LDAsMjYsMCw2MGMyLDE1OS4zLDEwLDMxMC43LDI0LDQ1NGM1My4zLDUyOCwyMTAsXFxuOTQ5LjcsNDcwLDEyNjVjNC43LDYsOS43LDExLjcsMTUsMTdjMC43LDAuNyw3LDEsMTksMWMwLDAsMTgsMCwxOCwwYzQsLTQsNiwtNyw2LC05XFxuYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsXFxuLTU0NC43LC0xMTIuNSwtODgyYy0yLC0xMDQsLTMsLTE2NywtMywtMTg5XFxubDAsLVwiICsgKG1pZEhlaWdodCArIDkyKSArIFwiYzAsLTE2Mi43LDUuNywtMzE0LDE3LC00NTRjMjAuNywtMjcyLDYzLjcsLTUxMywxMjksLTcyM2M2NS4zLFxcbi0yMTAsMTU1LjMsLTM5Ni4zLDI3MCwtNTU5YzYuNywtOS4zLDEwLC0xNS4zLDEwLC0xOHpcIjtcblxuICAgIGNhc2UgXCJycGFyZW5cIjpcbiAgICAgIHJldHVybiBcIk03NiwwYy0xNi43LDAsLTI1LDMsLTI1LDljMCwyLDIsNi4zLDYsMTNjMjEuMywyOC43LDQyLjMsNjAuMyxcXG42Myw5NWM5Ni43LDE1Ni43LDE3Mi44LDMzMi41LDIyOC41LDUyNy41YzU1LjcsMTk1LDkyLjgsNDE2LjUsMTExLjUsNjY0LjVcXG5jMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsXCIgKyAobWlkSGVpZ2h0ICsgOSkgKyBcIlxcbmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NFxcbmMtNTUuNywxOTQuNywtMTMxLjgsMzcwLjMsLTIyOC41LDUyN2MtMjAuNywzNC43LC00MS43LDY2LjMsLTYzLDk1Yy0yLDMuMywtNCw3LC02LDExXFxuYzAsNy4zLDUuNywxMSwxNywxMWMwLDAsMTEsMCwxMSwwYzkuMywwLDE0LjMsLTAuMywxNSwtMWM1LjMsLTUuMywxMC4zLC0xMSwxNSwtMTdcXG5jMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OFxcbmwwLC1cIiArIChtaWRIZWlnaHQgKyAxNDQpICsgXCJjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNyxcXG4tNDcwLC0xMjY1Yy00LjcsLTYsLTkuNywtMTEuNywtMTUsLTE3Yy0wLjcsLTAuNywtNi43LC0xLC0xOCwtMXpcIjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBXZSBzaG91bGQgbm90IGV2ZXIgZ2V0IGhlcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHN0cmV0Y2h5IGRlbGltaXRlci5cIik7XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBkb2N1bWVudCBmcmFnbWVudCwgd2hpY2ggY29udGFpbnMgZWxlbWVudHMsIGJ1dCB3aGVuXG4gKiBwbGFjZWQgaW50byB0aGUgRE9NIGRvZXNuJ3QgaGF2ZSBhbnkgcmVwcmVzZW50YXRpb24gaXRzZWxmLiBJdCBvbmx5IGNvbnRhaW5zXG4gKiBjaGlsZHJlbiBhbmQgZG9lc24ndCBoYXZlIGFueSBET00gbm9kZSBwcm9wZXJ0aWVzLlxuICovXG5jbGFzcyBEb2N1bWVudEZyYWdtZW50IHtcbiAgLy8gSHRtbERvbU5vZGVcbiAgLy8gTmV2ZXIgdXNlZDsgbmVlZGVkIGZvciBzYXRpc2Z5aW5nIGludGVyZmFjZS5cbiAgY29uc3RydWN0b3IoY2hpbGRyZW4pIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5jbGFzc2VzID0gW107XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuICAgIHRoaXMuZGVwdGggPSAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICAgIHRoaXMuc3R5bGUgPSB7fTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gYSBub2RlLiAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmcmFnLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFnO1xuICB9XG4gIC8qKiBDb252ZXJ0IHRoZSBmcmFnbWVudCBpbnRvIEhUTUwgbWFya3VwLiAqL1xuXG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiXCI7IC8vIFNpbXBseSBjb25jYXRlbmF0ZSB0aGUgbWFya3VwIGZvciB0aGUgY2hpbGRyZW4gdG9nZXRoZXIuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgc3RyaW5nLCBzaW1pbGFyIHRvIGlubmVyVGV4dC4gQXBwbGllcyB0b1xuICAgKiBNYXRoRG9tTm9kZSdzIG9ubHkuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIC8vIFRvIGF2b2lkIHRoaXMsIHdlIHdvdWxkIHN1YmNsYXNzIGRvY3VtZW50RnJhZ21lbnQgc2VwYXJhdGVseSBmb3JcbiAgICAvLyBNYXRoTUwsIGJ1dCBwb2x5ZmlsbHMgZm9yIHN1YmNsYXNzaW5nIGlzIGV4cGVuc2l2ZSBwZXIgUFIgMTQ2OS5cbiAgICAvLyAkRmxvd0ZpeE1lOiBPbmx5IHdvcmtzIGZvciBDaGlsZFR5cGUgPSBNYXRoRG9tTm9kZS5cbiAgICB2YXIgdG9UZXh0ID0gY2hpbGQgPT4gY2hpbGQudG9UZXh0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAodG9UZXh0KS5qb2luKFwiXCIpO1xuICB9XG5cbn1cblxuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG52YXIgZm9udE1ldHJpY3NEYXRhID0ge1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2NVwiOiBbMCwgMC42NzUsIDAuMDI1LCAwLCAwLjc1XSxcbiAgICBcIjE3NFwiOiBbMC4xNTU1OSwgMC42OTIyNCwgMCwgMCwgMC45NDY2Nl0sXG4gICAgXCIyNDBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMjk1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjcxMFwiOiBbMCwgMC44MjUsIDAsIDAsIDIuMzMzMzRdLFxuICAgIFwiNzMyXCI6IFswLCAwLjksIDAsIDAsIDIuMzMzMzRdLFxuICAgIFwiNzcwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzFcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI5ODlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMTAwOFwiOiBbMCwgMC40MzA1NiwgMC4wNDAyOCwgMCwgMC42NjY2N10sXG4gICAgXCI4MjQ1XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjg0ODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODQ5OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NTAyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MDNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODUwNFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NTEzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg1OTJcIjogWy0wLjAzNTk4LCAwLjQ2NDAyLCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjAyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDNcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwNlwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDhcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjEwXCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg2MTFcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxOVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjIxXCI6IFstMC4xMzMxMywgMC4zNzc4OCwgMCwgMCwgMS4zODg4OV0sXG4gICAgXCI4NjIyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjI1XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiODYzMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjM0XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2MzVcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzOFwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjM5XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0M1wiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQ0XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0NlwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDdcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg2NDlcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUwXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg2NTFcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUyXCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1M1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTVcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2NlwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjdcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY5XCI6IFstMC4xMzMxMywgMC4zNzc4OCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NzJcIjogWy0wLjA2NCwgMC40MzcsIDAsIDAsIDEuMzM0XSxcbiAgICBcIjg2NzRcIjogWy0wLjA2NCwgMC40MzcsIDAsIDAsIDEuMzM0XSxcbiAgICBcIjg3MDVcIjogWzAsIDAuODI1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcwOFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA5XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiODcyMlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI0XCI6IFswLjA4MTk4LCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjZcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODczM1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOFwiOiBbMC4wMzUxNywgMC41MjIzOSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjg3NDBcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc0MVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI4NzQyXCI6IFswLjI1MTQyLCAwLjc0MTExLCAwLCAwLCAwLjVdLFxuICAgIFwiODc1NlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzU3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NjRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjVcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjlcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzBcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzRcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3OFwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzgyXCI6IFswLjA2MDYyLCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODNcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg2XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODdcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5MFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkxXCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTZcIjogWzAuMDgxOTgsIDAuOTE2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNlwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA3XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDhcIjogWzAuMjUxNDIsIDAuNzU3MjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOVwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODEyXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjVdLFxuICAgIFwiODgxNFwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE1XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTZcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxN1wiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE4XCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTlcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyMlwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIzXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjhcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMwXCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMlwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMzXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDBcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQyXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDNcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0N1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ4XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NThcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODYxXCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjJcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjNcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjRcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjVcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NzJcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg3M1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODc0XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjg4NzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg3N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzlcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg4MlwiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODgzXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODRcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg4XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTBcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODg5MVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODkyXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg5MDFcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwM1wiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA1XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDZcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDlcIjogWy0wLjAzNTk4LCAwLjQ2NDAyLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MTBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzYwNDJdLFxuICAgIFwiODkxMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTEyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MTNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxNFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE1XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxOFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxOVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyMFwiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMS4zMzMzNF0sXG4gICAgXCI4OTIxXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjJcIjogWzAuMzg1NjksIDAuODg1NjksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyM1wiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjdcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyOFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzRcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNVwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM2XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzdcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzOFwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM5XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5NDBcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTk0XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTVcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTQxNlwiOiBbMC4xNTU1OSwgMC42OTIyNCwgMCwgMCwgMC45MDIyMl0sXG4gICAgXCI5NDg0XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ4OFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTJcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDk2XCI6IFswLCAwLjM3Nzg4LCAwLCAwLCAwLjVdLFxuICAgIFwiOTU4NVwiOiBbMC4xOTQ0NCwgMC42ODg4OSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NTg2XCI6IFswLjE5NDQ0LCAwLjc0MTExLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk2MzJcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2MzNcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NTBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTY1MVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjU0XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NjBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTY2MVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjY0XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NzRcIjogWzAuMTExMTEsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTczM1wiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCIxMDAwM1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDAxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDczMVwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDg0NlwiOiBbMC4xOTQ0NCwgMC43NTU4MywgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDg3N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg3OFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4NVwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4NlwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4N1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4OFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4OVwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MFwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MVwiOiBbMC40ODI1NiwgMC45ODI1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MlwiOiBbMC40ODI1NiwgMC45ODI1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkwMVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkwMlwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzM1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNVwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNlwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzN1wiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzOFwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk0OVwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1MFwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1NVwiOiBbMC4yODQ4MSwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1NlwiOiBbMC4yODQ4MSwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1MFwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4yMjIyMl0sXG4gICAgXCI1NzM1MVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI1NzM1MlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1M1wiOiBbMCwgMC40MzA1NiwgMC4wNDAyOCwgMCwgMC42NjY2N10sXG4gICAgXCI1NzM1NlwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1N1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1OFwiOiBbMC40MTk1MSwgMC45MTk1MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1OVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2MVwiOiBbMC40MTk1MSwgMC45MTk1MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2NlwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2N1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2OFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2OVwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3MVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF1cbiAgfSxcbiAgXCJDYWxpZ3JhcGhpYy1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4MzMzLCAwLCAwLjE5NDQ1LCAwLjc5ODQ3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4MzMzLCAwLjAzMDQxLCAwLjEzODg5LCAwLjY1NjgxXSxcbiAgICBcIjY3XCI6IFswLCAwLjY4MzMzLCAwLjA1ODM0LCAwLjEzODg5LCAwLjUyNjUzXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc3MTM5XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjA4OTQ0LCAwLjExMTExLCAwLjUyNzc4XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjA5OTMxLCAwLjExMTExLCAwLjcxODc1XSxcbiAgICBcIjcxXCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjA1OTMsIDAuMTExMTEsIDAuNTk0ODddLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAuMDA5NjUsIDAuMTExMTEsIDAuODQ0NTJdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAuMDczODIsIDAsIDAuNTQ0NTJdLFxuICAgIFwiNzRcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMTg0NzIsIDAuMTY2NjcsIDAuNjc3NzhdLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAuMDE0NDUsIDAuMDU1NTYsIDAuNzYxOTVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDAuNjg5NzJdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDEuMjAwOV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNDczNiwgMC4wODMzNCwgMC44MjA0OV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4xMTExMSwgMC43OTYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42OTU1Nl0sXG4gICAgXCI4MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMCwgMC4xMTExMSwgMC44MTY2N10sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC44NDc1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA3NSwgMC4xMzg4OSwgMC42MDU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4yNTQxNywgMCwgMC41NDQ2NF0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4wODMzNCwgMC42MjU4M10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMCwgMC42MTI3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC45ODc3OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNDY0MywgMC4xMzg4OSwgMC43MTMzXSxcbiAgICBcIjg5XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjY2ODM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjA3OTQ0LCAwLjEzODg5LCAwLjcyNDczXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV1cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjIxNDcxXSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiNTgxMTJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk3NDldLFxuICAgIFwiNTgxMTNcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4M10sXG4gICAgXCI1ODExNFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMzMyOF0sXG4gICAgXCI1ODExNVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjkyM10sXG4gICAgXCI1ODExNlwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDM0M10sXG4gICAgXCI1ODExN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4zMzMwMV0sXG4gICAgXCI1ODExOFwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4zMzQwOV0sXG4gICAgXCI1ODExOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA3M11cbiAgfSxcbiAgXCJNYWluLUJvbGRcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjAyNzhdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0M1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xNTU1NiwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zODMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xNTU1NiwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjYwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2MlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDMwNV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44Njk0NF0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MTgwNV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODE5NF0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43MjM2MV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45MDQxNl0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjczXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjQzNjExXSxcbiAgICBcIjc0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjU5NDQ0XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwMTM4XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjY5MTY2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAxLjA5MTY2XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODYzODhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzg2MTFdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAsIDAsIDAuODYzODhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODYyNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4NDcyXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4NjExLCAwLjAxNTk3LCAwLCAwLjg2OTQ0XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4NjExLCAwLjAxNTk3LCAwLCAxLjE4ODg4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4NjExLCAwLjAyODc1LCAwLCAwLjg2OTQ0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjkyXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTM0NDQsIDAuMDMxOTQsIDAsIDAuNTc1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1OTAyXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI3MDhdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjEwOTAzLCAwLCAwLjM1MTM5XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTU5NywgMCwgMC41NzVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzUxMzldLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDczNjFdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ1MzYxXSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjYwNjk0XSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTU5NywgMCwgMC44MzA1NV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjYwNjk0XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxMjNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44Njg1M10sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzNcIjogWzAuMDI3LCAwLjYzOCwgMCwgMCwgMC44OTRdLFxuICAgIFwiODc3NlwiOiBbMC4wMjQ0NCwgMC41MjQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzgxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODA1XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MTBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgxMVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4ODI2XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MjdcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNFwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM1XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzhcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzOVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NDlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg1M1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU0XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTVcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODkwMFwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg5MDFcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg5MDJcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5OTRcIjogWy0wLjEzODg5LCAwLjM2MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg5OTVcIjogWy0wLjEzODg5LCAwLjM2MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk2NTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMDIyMjJdLFxuICAgIFwiOTY1N1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMDIyMjJdLFxuICAgIFwiOTY2N1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjk3MTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjEwOTI3XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjEwOTI4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU3Mzc2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwXVxuICB9LFxuICBcIk1haW4tQm9sZEl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQxNywgMCwgMC4zODYxMV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjgzMywgMCwgMC45NDQ0NF0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMjg2MSwgMCwgMC45NDQ0NF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC44ODU1NV0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNTgwNiwgMCwgMC40NzMzM10sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzMwNiwgMCwgMC40NzMzM10sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDMzMywgMCwgMC41OTExMV0sXG4gICAgXCI0M1wiOiBbMC4xMDMzMywgMC42MDMzMywgMC4wMzMwNiwgMCwgMC44ODU1NV0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xNDcyMiwgMCwgMCwgMC4zNTU1NV0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMC4wMjYxMSwgMCwgMC40MTQ0NF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xNDcyMiwgMCwgMCwgMC4zNTU1NV0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNTgwNiwgMCwgMC41OTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMC4wNjY5NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNjY5NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI2MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAuMDY4MzMsIDAsIDAuODg1NTVdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDgsIDAsIDAuODg1NTVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY1NTVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MTY2Nl0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC44MjY2Nl0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NzU1NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC43NTY2Nl0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC43MjcyMl0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMC4wNzM0NywgMCwgMC44OTUyN10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjczXCI6IFswLCAwLjY4NjExLCAwLjE1NjgxLCAwLCAwLjQ3MTY2XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4NjExLCAwLjE0NSwgMCwgMC42MTA1NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC44OTQ5OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42OTc3N10sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMS4wNzI3N10sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjc5XCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuNzg3MjFdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODU0OTldLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAuMDI1NTksIDAsIDAuODU5NDRdLFxuICAgIFwiODNcIjogWzAsIDAuNjg2MTEsIDAuMTEyNjQsIDAsIDAuNjQ5OTldLFxuICAgIFwiODRcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzk2MV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44ODA4M10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4xODYyNSwgMCwgMC44NjU1NV0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xODYyNSwgMCwgMS4xNTk5OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC44NjU1NV0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4xOTgwMywgMCwgMC44NjU1NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC43MDg4OF0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjM1NjExXSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjA5OTcyLCAwLCAwLjM1NjExXSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NzA5LCAwLCAwLjU5MTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEzNDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjU5MTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODYxLCAwLCAwLjUzMjIyXSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLjA1MjIyLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4yMTc3OCwgMCwgMC40XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDI2LCAwLCAwLjU5MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTMyNiwgMC4xMTM4NywgMCwgMC4zNTU1NV0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjkzMjYsIDAuMTY3MiwgMCwgMC4zNTU1NV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODYxLCAwLCAwLjI5NjY2XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC45NDQ0NF0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNjQ5OTldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA3ODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDgxNjcsIDAsIDAuNDg2OTRdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLjA5NjM5LCAwLCAwLjM4NV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNjIwNTVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC43Njc3N10sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAuMTI1ODMsIDAsIDAuNTYwNTVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41NjE2Nl0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMTM4ODksIDAsIDAuNDkwNTVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk0ODg4XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MzIyMl0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMDIyNzddLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczNDcyLCAwLjA5MDYyLCAwLCAwLjg4NTU1XSxcbiAgICBcIjIyM1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wOTczNiwgMCwgMC42NjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAuMDk0NTgsIDAsIDAuNTkxMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjM1NTU1XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMS4xNDA1NF0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjgyNjY2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNDYxMSwgMCwgMC4zODVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLjA2NzA5LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMC4wODI3MSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTk0NDQsIDAuMTA0NDQsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA4NTI4LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTExMV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC42OTc3N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTQ0NDRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg4NTU1XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDY2Nl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAuMTUwOTIsIDAsIDAuNzY3NzddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAuMDU2MzIsIDAsIDAuODI2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjEwNzc4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDAuNTkxMTFdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wOTgxMSwgMCwgMS4xODIyMV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMC4xNjc3MiwgMCwgMC42MjA1NV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjA3OTM5LCAwLCAwLjYyMDU1XVxuICB9LFxuICBcIk1haW4tSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjA2OTYxLCAwLCAwLjUxNDQ0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2NjE2LCAwLCAwLjgxNzc3XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLjEzNjM5LCAwLCAwLjgxNzc3XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLjA5Njk0LCAwLCAwLjc2NjY2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLjE2MTk0LCAwLCAwLjQwODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLjAzNjk0LCAwLCAwLjQwODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLjE0OTE3LCAwLCAwLjUxMTExXSxcbiAgICBcIjQzXCI6IFswLjA1NjY3LCAwLjU2MTY3LCAwLjAzNjk0LCAwLCAwLjc2NjY2XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjEwNTU2LCAwLCAwLCAwLjMwNjY3XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQzMDU2LCAwLjAyODI2LCAwLCAwLjM1Nzc4XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEwNTU2LCAwLCAwLCAwLjMwNjY3XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLjE2MTk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU4XCI6IFswLCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU4MiwgMCwgMC4zMDY2N10sXG4gICAgXCI2MVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAuMDY2MTYsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTIyNSwgMCwgMC41MTExMV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wOTU5NywgMCwgMC43NjY2Nl0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NDMzM10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC43MDM4OV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuNjc4MzNdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAuMTMzMDUsIDAsIDAuNjUyNzddLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAuMDg3MjIsIDAsIDAuNzczNjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAuMTU4MDYsIDAsIDAuMzg1NTVdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAuMTQwMjgsIDAsIDAuNTI1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjc2ODg4XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYyNzIyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjg5NjY2XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEwMjU3LCAwLCAwLjY3ODMzXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAzODY4LCAwLCAwLjcyOTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjExOTcyLCAwLCAwLjU2MjIyXSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjcxNTU1XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjE4MzYxLCAwLCAwLjc0MzMzXSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjE4MzYxLCAwLCAwLjk5ODg4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjc0MzMzXSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjE5MzgzLCAwLCAwLjc0MzMzXSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjYxMzMzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE4NzUsIDAsIDAuMzA2NjddLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAuMTA1MjgsIDAsIDAuMzA2NjddLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAuMDY2NDYsIDAsIDAuNTExMTFdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDkyMDgsIDAsIDAuNTExMTFdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAuMDYzMTIsIDAsIDAuNDZdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAuMDU2NTMsIDAsIDAuNDZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC40Nl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjExOTQsIDAsIDAuMzA2NjddLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ2XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wNzY3MSwgMCwgMC41MTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU1MzYsIDAuMTAxOSwgMCwgMC4zMDY2N10sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjU1MzYsIDAuMTQ0NjcsIDAsIDAuMzA2NjddLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC4yNTU1NV0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuODE3NzddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjU2MjIyXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMC4wNjMxMiwgMCwgMC41MTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ2XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC40MjE2Nl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAuMDgyMDgsIDAsIDAuNDA4ODldLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLjA5NDg2LCAwLCAwLjMzMjIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41MzY2Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDZdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjY2NDQ0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMC4xMjA0MiwgMCwgMC40NjM4OV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDg1NTVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjEyMjkyLCAwLCAwLjQwODg5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMTc4NiwgMC4xMTU4NSwgMCwgMC41MTExMV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY2Nzg2LCAwLjEwNDc0LCAwLCAwLjUxMTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzEyOV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDZdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjg4Mjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzE5NCwgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA1MTQsIDAsIDAuNTM2NjZdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjcxNTU1XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41Mjc3OCwgMC4wOTE5NCwgMCwgMC41MTExMV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuOTg0OTldLFxuICAgIFwiMzM5XCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjcxNTU1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNzJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1XSxcbiAgICBcIjE3N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxODJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC45MDI3OF0sXG4gICAgXCIyMTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczMTk0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjIyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCIyNDdcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjUyNzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMS4wMTM4OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42Mjg0NywgMCwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC41Njc3OCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4MjI0XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjgyMjVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIzMFwiOiBbMCwgMC4xMjMsIDAsIDAsIDEuMTcyXSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzE0NDQsIDAuMTUzODIsIDAsIDAuNV0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjg0NjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODQ2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4xMTExMSwgMC40MTY2N10sXG4gICAgXCI4NDcyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjExMTExLCAwLjYzNjQ2XSxcbiAgICBcIjg0NzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODUwMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NTkyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYxNFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjBdLFxuICAgIFwiODYxN1wiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjE4XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMTI2XSxcbiAgICBcIjg2MzZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzN1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQwXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1MlwiOiBbMC4wMTEsIDAuNjcxLCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg2NThcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjYwXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA1NTU2LCAwLjA4MzM0LCAwLjUzMDldLFxuICAgIFwiODcwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA5XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4NzEyXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzE1XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzIyXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjhcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzMwXCI6IFswLjIsIDAuOCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzM2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3NDNcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NFwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ1XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTExMSwgMCwgMC40MTY2N10sXG4gICAgXCI4NzY0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NzFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzNcIjogWy0wLjAyMiwgMC41ODksIDAsIDAsIDAuNzc4XSxcbiAgICBcIjg3NzZcIjogWy0wLjAxNjg4LCAwLjQ4MzEyLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODRcIjogWy0wLjEzMywgMC42NzMsIDAsIDAsIDAuNzc4XSxcbiAgICBcIjg4MDFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDRcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODEwXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MTFcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAxLjBdLFxuICAgIFwiODgyNlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyN1wiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzNFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM5XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg0OVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTFcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODUzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTRcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU2XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTdcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODcyXCI6IFswLjI0OSwgMC43NSwgMCwgMCwgMC44NjddLFxuICAgIFwiODkwMFwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTAxXCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjg5MDRcIjogWzAuMDA1LCAwLjUwNSwgMCwgMCwgMC45XSxcbiAgICBcIjg5NDJcIjogWzAuMDMsIDAuOTAzLCAwLCAwLCAwLjI3OF0sXG4gICAgXCI4OTQzXCI6IFstMC4xOSwgMC4zMTMsIDAsIDAsIDEuMTcyXSxcbiAgICBcIjg5NDVcIjogWy0wLjEsIDAuODIzLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NSwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ1LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1M1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA0ODM1LCAwLCAwLjg2NjRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuODE2OTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuOTM4MTJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMDU0NTEsIDAsIDAuODEwMDddLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjg4ODldLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg2NzNdLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAuMDc3NzgsIDAsIDAuNTExMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAuMTAwNjksIDAsIDAuNjMxMjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuOTcxMThdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzU1NTVdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDEuMTQyMDFdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDAuOTUwMzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODM2NjZdLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNzIzMDldLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAsIDAsIDAuODY4NjFdLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAuMDA0MjEsIDAsIDAuODcyMzVdLFxuICAgIFwiODNcIjogWzAsIDAuNjg2MTEsIDAuMDUzODIsIDAsIDAuNjkyNzFdLFxuICAgIFwiODRcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjM2NjNdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDAuODAwMjddLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMjU1NTUsIDAsIDAuNjc3NzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDEuMDkzMDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMDc3NzgsIDAsIDAuOTQ3MjJdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMjU1NTUsIDAsIDAuNjc0NThdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuNzcyNTddLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjMyODddLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTIwODNdLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTEzNDJdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwOTcyXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NTM2MV0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTEwNDIsIDAsIDAuNTY4MDZdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0NDldLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NzU5XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTMyNiwgMCwgMCwgMC40MDQ4XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTMyNiwgMC4wNjIyLCAwLCAwLjQ3MDgzXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMTg1MiwgMCwgMC42MDM3XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMDg4LCAwLCAwLjM0ODE1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMS4wMzI0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43MTI5Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTg0NzJdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwMDkyXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NDIxM10sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMDMxOTQsIDAsIDAuNTI4N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTMxMjVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQxNTI4XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42ODEwMl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTY2NjZdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAwLjgzMTQ4XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42NTkwM10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjA0MjEzLCAwLCAwLjU1NTA5XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjU2OTRdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44NjcyMl0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjA3NDU4LCAwLCAwLjg0MTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjg2MTEsIDAuMDU0NTEsIDAsIDAuODg1MDddLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY3MDgzXSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjg2MTEsIDAuMTE2NTMsIDAsIDAuNzE0MDJdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4NjExLCAwLjA0ODM1LCAwLCAwLjg3ODldLFxuICAgIFwiOTQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc2MDY0XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzQwMywgMCwgMC42NTk3Ml0sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDYzODksIDAsIDAuNTkwMDNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzODE5LCAwLCAwLjUyMjIyXSxcbiAgICBcIjk0OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41Mjg4Ml0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDYyMTUsIDAsIDAuNTA4MzNdLFxuICAgIFwiOTUxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjZdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAzMTk0LCAwLCAwLjU2MThdLFxuICAgIFwiOTUzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQxMjA0XSxcbiAgICBcIjk1NFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Njc1OV0sXG4gICAgXCI5NTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjcwODNdLFxuICAgIFwiOTU2XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjcwNzg3XSxcbiAgICBcIjk1N1wiOiBbMCwgMC40NDQ0NCwgMC4wNjg5OCwgMCwgMC41NzY4NV0sXG4gICAgXCI5NThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDMwMjEsIDAsIDAuNTA4MzNdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODI0MV0sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjExOF0sXG4gICAgXCI5NjJcIjogWzAuMDk3MjIsIDAuNDQ0NDQsIDAuMDc5MTcsIDAsIDAuNDIzNjFdLFxuICAgIFwiOTYzXCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjY4NTg4XSxcbiAgICBcIjk2NFwiOiBbMCwgMC40NDQ0NCwgMC4xMzQ3MiwgMCwgMC41MjA4M10sXG4gICAgXCI5NjVcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjMwNTVdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjc0NzIyXSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MTgwNV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM3MDQsIDAsIDAuNzU4MzNdLFxuICAgIFwiOTY5XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjcxNzgyXSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42OTE1NV0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNzEyNV0sXG4gICAgXCI5ODJcIjogWzAsIDAuNDQ0NDQsIDAuMDMxOTQsIDAsIDAuOTc1XSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjExOF0sXG4gICAgXCIxMDEzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MzMzXSxcbiAgICBcIjU3NjQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM5MzUyXSxcbiAgICBcIjU3OTExXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjQzODg5XVxuICB9LFxuICBcIk1hdGgtSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzU4NTFdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNzE0NzJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDU1NTYsIDAuODI3OTJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMDU3NjQsIDAuMDgzMzQsIDAuNzM4Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42NDMwNl0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC43ODYyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4wODEyNSwgMC4wNTU1NiwgMC44MzEyNV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4wNzg0NywgMC4xMTExMSwgMC40Mzk1OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMC4wOTYxOCwgMC4xNjY2NywgMC41NTQ1MV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wNTU1NiwgMC44NDkzMV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMC4wMjc3OCwgMC42ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xMDkwMywgMC4wODMzNCwgMC45NzAxNF0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xMDkwMywgMC4wODMzNCwgMC44MDM0N10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NjI3OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42NDIwMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC43OTA1Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMDc3MywgMC4wODMzNCwgMC43NTkyOV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC42MTMyXSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjU4NDM4XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjAyNzc4LCAwLjY4Mjc4XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjIyMjIyLCAwLCAwLjU4MzMzXSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjA4MzM0LCAwLjgyODQ3XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjIyMjIyLCAwLCAwLjU4MDU2XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA4MzM0LCAwLjY4MjY0XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyODU5XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQyOTE3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQzMjc2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMC4xNjY2NywgMC41MjA0OV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY1NjNdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNzY0LCAwLjE2NjY3LCAwLjQ4OTU5XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wMjc3OCwgMC40NzY5N10sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1OTUyLCAwLCAwLCAwLjM0NDUxXSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NTk1MiwgMC4wNTcyNCwgMCwgMC40MTE4MV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDMxNDgsIDAsIDAuNTIwNl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMDE5NjgsIDAuMDgzMzQsIDAuMjk4MzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjg3ODAxXSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42MDAyM10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDg0NzJdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUwMzEzXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wODMzNCwgMC40NDY0MV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAuMDU1NTYsIDAuNDUxMTZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ2ODc1XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMCwgMC4wODMzNCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNTcyNDZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ4NDcyXSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4wMjY5MSwgMC4wODMzNCwgMC43MTU5Ml0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNTcxNTNdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA1NTU2LCAwLjQ5MDI4XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4wNDM5OCwgMC4wNTU1NiwgMC40NjUwNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjYxNTI4XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNzYyNzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLjE2NjY3LCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMC4wNzU2OSwgMC4wODMzNCwgMC43NDIzNl0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAuMDgxMjUsIDAuMDU1NTYsIDAuODMxMjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjc3OTg2XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wNTU1NiwgMC41ODMzM10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuNjY2NjddLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLjExLCAwLjA1NTU2LCAwLjYxMjIyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NzI0XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40MzA1NiwgMC4wMDM3LCAwLjAyNzc4LCAwLjYzOTddLFxuICAgIFwiOTQ2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1Mjc4LCAwLjA4MzM0LCAwLjU2NTYzXSxcbiAgICBcIjk0N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNTU1NiwgMCwgMC41MTc3M10sXG4gICAgXCI5NDhcIjogWzAsIDAuNjk0NDQsIDAuMDM3ODUsIDAuMDU1NTYsIDAuNDQ0NDRdLFxuICAgIFwiOTQ5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjQ2NjMyXSxcbiAgICBcIjk1MFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNzM3OCwgMC4wODMzNCwgMC40Mzc1XSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wNTU1NiwgMC40OTY1M10sXG4gICAgXCI5NTJcIjogWzAsIDAuNjk0NDQsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNDY5NDRdLFxuICAgIFwiOTUzXCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjM1Mzk0XSxcbiAgICBcIjk1NFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCI5NTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTU2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjYwMjU1XSxcbiAgICBcIjk1N1wiOiBbMCwgMC40MzA1NiwgMC4wNjM2NiwgMC4wMjc3OCwgMC40OTM5OF0sXG4gICAgXCI5NThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDQ2MDEsIDAuMTExMTEsIDAuNDM3NV0sXG4gICAgXCI5NTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDg0NzJdLFxuICAgIFwiOTYwXCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjU3MDAzXSxcbiAgICBcIjk2MVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC41MTcwMl0sXG4gICAgXCI5NjJcIjogWzAuMDk3MjIsIDAuNDMwNTYsIDAuMDc5ODYsIDAuMDgzMzQsIDAuMzYyODVdLFxuICAgIFwiOTYzXCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjU3MTQxXSxcbiAgICBcIjk2NFwiOiBbMCwgMC40MzA1NiwgMC4xMTMyLCAwLjAyNzc4LCAwLjQzNzE1XSxcbiAgICBcIjk2NVwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wMjc3OCwgMC41NDAyOF0sXG4gICAgXCI5NjZcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNjU0MTddLFxuICAgIFwiOTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjYyNTY5XSxcbiAgICBcIjk2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzU4OCwgMC4xMTExMSwgMC42NTEzOV0sXG4gICAgXCI5NjlcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNjIyNDVdLFxuICAgIFwiOTc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLjA4MzM0LCAwLjU5MTQ0XSxcbiAgICBcIjk4MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTU4M10sXG4gICAgXCI5ODJcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAsIDAuODI4MTNdLFxuICAgIFwiMTAwOVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC41MTcwMl0sXG4gICAgXCIxMDEzXCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQwNTldLFxuICAgIFwiNTc2NDlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuMzIyNDZdLFxuICAgIFwiNTc5MTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuMzg0MDNdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUJvbGRcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzY2NjddLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDEuMDI5MTJdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMwNTZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDI3NzhdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDI3NzhdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDNcIjogWzAuMTE2NjcsIDAuNjE2NjcsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiNDRcIjogWzAuMTA1NTYsIDAuMTMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMzY2NjddLFxuICAgIFwiNDZcIjogWzAsIDAuMTMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNThcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNTlcIjogWzAuMTA1NTYsIDAuNDU4MzMsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNjFcIjogWy0wLjA5Mzc1LCAwLjQwNjI1LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxOTQ1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY0MTY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMzMDU2XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxOTQ1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2Mzg5XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk3Nzc4XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjgxXCI6IFswLjEwNTU2LCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2Mzg5XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjAxNTI4LCAwLCAwLjczMzM0XSxcbiAgICBcIjg3XCI6IFswLCAwLjY5NDQ0LCAwLjAxNTI4LCAwLCAxLjAzODg5XSxcbiAgICBcIjg4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjg5XCI6IFswLCAwLjY5NDQ0LCAwLjAyNzUsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjcyMjNdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzQzMDZdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzQzMDZdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMTA4MzMsIDAuMDMwNTYsIDAsIDAuNTVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjk5XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ4ODg5XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3NjM5LCAwLCAwLjMzNjExXSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yODYxMV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTMwNTZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC44NjY2N10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU1XSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjM3MjIyXSxcbiAgICBcIjExNVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40MjE2N10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTg5MjksIDAsIDAsIDAuNDA0MTddLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41XSxcbiAgICBcIjExOVwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC43NDQ0NV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDc2MzldLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMC4wNjM4NSwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNDE2OSwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAuMDc5OSwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMC4wODQzMiwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42MDg4OSwgMC4wODc3NiwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQ4MywgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42NzkzNywgMC4wNzc3NCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzM3NTJdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY3NjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjU0MTY3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjgxNiwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLjExOTgzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMC4wOTAzMSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAuMDQ2MDMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wODYxNiwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE0MjA1LCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XVxuICB9LFxuICBcIlNhbnNTZXJpZi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ1XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NTgzNF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjEyNSwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTI1LCAwLjQ0NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMywgMC4zNywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyM10sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTcyMl0sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Njk0NV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42OTQ0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NzVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODFcIjogWzAuMTI1LCAwLjY5NDQ0LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY0NTg0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY4NzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMDEzODksIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMDEzODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODlcIjogWzAsIDAuNjk0NDQsIDAuMDI1LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI4ODg5XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI4ODg5XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNjk0NCwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMCwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuMzQxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjExNlwiOiBbMCwgMC41NzE0MywgMCwgMCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC42ODMzNF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MzQ3Ml0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzI2NTksIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42MDg4OSwgMCwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzMyXCI6IFswLCAwLjY3NjU5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XVxuICB9LFxuICBcIlNjcmlwdC1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjcsIDAuMjI5MjUsIDAsIDAuODAyNTNdLFxuICAgIFwiNjZcIjogWzAsIDAuNywgMC4wNDA4NywgMCwgMC45MDc1N10sXG4gICAgXCI2N1wiOiBbMCwgMC43LCAwLjE2ODksIDAsIDAuNjY2MTldLFxuICAgIFwiNjhcIjogWzAsIDAuNywgMC4wOTM3MSwgMCwgMC43NzQ0M10sXG4gICAgXCI2OVwiOiBbMCwgMC43LCAwLjE4NTgzLCAwLCAwLjU2MTYyXSxcbiAgICBcIjcwXCI6IFswLCAwLjcsIDAuMTM2MzQsIDAsIDAuODk1NDRdLFxuICAgIFwiNzFcIjogWzAsIDAuNywgMC4xNzMyMiwgMCwgMC42MDk2MV0sXG4gICAgXCI3MlwiOiBbMCwgMC43LCAwLjI5Njk0LCAwLCAwLjk2OTE5XSxcbiAgICBcIjczXCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODA5MDddLFxuICAgIFwiNzRcIjogWzAuMjc3NzgsIDAuNywgMC4xOTE4OSwgMCwgMS4wNTE1OV0sXG4gICAgXCI3NVwiOiBbMCwgMC43LCAwLjMxMjU5LCAwLCAwLjkxMzY0XSxcbiAgICBcIjc2XCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODczNzNdLFxuICAgIFwiNzdcIjogWzAsIDAuNywgMC4xNTk4MSwgMCwgMS4wODAzMV0sXG4gICAgXCI3OFwiOiBbMCwgMC43LCAwLjM1MjUsIDAsIDAuOTAxNV0sXG4gICAgXCI3OVwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAwLjczNzg3XSxcbiAgICBcIjgwXCI6IFswLCAwLjcsIDAuMDgwNzgsIDAsIDEuMDEyNjJdLFxuICAgIFwiODFcIjogWzAsIDAuNywgMC4wMzMwNSwgMCwgMC44ODI4Ml0sXG4gICAgXCI4MlwiOiBbMCwgMC43LCAwLjA2MjU5LCAwLCAwLjg1XSxcbiAgICBcIjgzXCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODY3NjddLFxuICAgIFwiODRcIjogWzAsIDAuNywgMC4yOTA4NywgMCwgMC43NDY5N10sXG4gICAgXCI4NVwiOiBbMCwgMC43LCAwLjI1ODE1LCAwLCAwLjc5OTk2XSxcbiAgICBcIjg2XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuNjIyMDRdLFxuICAgIFwiODdcIjogWzAsIDAuNywgMC4yNzUyMywgMCwgMC44MDUzMl0sXG4gICAgXCI4OFwiOiBbMCwgMC43LCAwLjI2MDA2LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg5XCI6IFswLCAwLjcsIDAuMjkzOSwgMCwgMC43MDk2MV0sXG4gICAgXCI5MFwiOiBbMCwgMC43LCAwLjI0MDM3LCAwLCAwLjgyMTJdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjczMlwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzcxXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjgyMTRcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NTkzXCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1OTVcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODY1N1wiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjU5XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MTlcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiODcyMFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIxXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjg3MzBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzM5XCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuMzMzMzNdLFxuICAgIFwiODc0MVwiOiBbLTAuMDA1OTksIDAuNjA2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDdcIjogWzAuMzA2MTIsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDhcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzQ5XCI6IFswLjMwNiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc1MFwiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODg5NlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk3XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OThcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4OTY4XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NjlcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk3MFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcxXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjkxNjhcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDIxNlwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCIxMDIxN1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCIxMDc1MlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1M1wiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1NFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1NlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDc1OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF1cbiAgfSxcbiAgXCJTaXplMi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjQwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjQxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjQ3XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjgxMTExXSxcbiAgICBcIjkxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjkyXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjgxMTExXSxcbiAgICBcIjkzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEyM1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMjVcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjc3MFwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjc3MVwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI4NzIxXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzQ3XCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDhcIjogWzAuODYyLCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDlcIjogWzAuODYyLCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NTBcIjogWzAuODYyMjUsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODg5NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk3XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OThcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5OVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4OTY4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NjlcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTcxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEwMjE2XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwMjE3XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwNzUyXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzUzXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzU0XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzU2XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXVxuICB9LFxuICBcIlNpemUzLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiNDFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiNDdcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMDQ0NDVdLFxuICAgIFwiOTFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiOTJcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMDQ0NDVdLFxuICAgIFwiOTNcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEyNVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjczMlwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzcxXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjg3MzBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NjlcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk3MFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcxXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjkxMTVcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE2XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE3XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjBcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTIxXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIyXCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyM1wiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNVwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjZcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjdcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEyOFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI5XCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzBcIjogWzAsIDAuMywgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMxXCI6IFsxZS0wNSwgMC45LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzM1wiOiBbMC45MDAwMSwgMCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTQzXCI6IFswLjg4NTAyLCAwLjkxNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCIxMDIxNlwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCIxMDIxN1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI1NzM0NFwiOiBbLTAuMDA0OTksIDAuNjA1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjU3MzQ1XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTc2ODBcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODFcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODJcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODNcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdXG4gIH0sXG4gIFwiVHlwZXdyaXRlci1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNlwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzdcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzOVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDBcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQxXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MlwiOiBbMCwgMC41MjA4MywgMCwgMCwgMC41MjVdLFxuICAgIFwiNDNcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NFwiOiBbMC4xMzg4OSwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ1XCI6IFstMC4wODA1NiwgMC41MzA1NSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDZcIjogWzAsIDAuMTI1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0N1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1OVwiOiBbMC4xMzg4OSwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjBcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MVwiOiBbLTAuMTk1NDksIDAuNDE1NjIsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYyXCI6IFstMC4wNTU1NiwgMC41NTU1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODFcIjogWzAuMTM4ODksIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkxXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MlwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTNcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NVwiOiBbMC4wOTUxNCwgMCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwM1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNlwiOiBbMC4yMjIyMiwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMlwiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU1MzU4LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMVwiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjNcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI1XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyN1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE4NFwiOiBbMC4xOTQ0NSwgMCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NjdcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC41NjU5NywgMCwgMCwgMC41MjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2NTU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjUxXCI6IFswLjExMTExLCAwLjIxOTQ0LCAwLCAwLCAwLjUyNV1cbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljcyByZWdhcmRpbmcgZm9udHMgYW5kIGluZGl2aWR1YWwgc3ltYm9scy4gVGhlIHNpZ21hXG4gKiBhbmQgeGkgdmFyaWFibGVzLCBhcyB3ZWxsIGFzIHRoZSBtZXRyaWNNYXAgbWFwIGNvbnRhaW4gZGF0YSBleHRyYWN0ZWQgZnJvbVxuICogVGVYLCBUZVggZm9udCBtZXRyaWNzLCBhbmQgdGhlIFRURiBmaWxlcy4gVGhlc2UgZGF0YSBhcmUgdGhlbiBleHBvc2VkIHZpYSB0aGVcbiAqIGBtZXRyaWNzYCB2YXJpYWJsZSBhbmQgdGhlIGdldENoYXJhY3Rlck1ldHJpY3MgZnVuY3Rpb24uXG4gKi9cbi8vIEluIFRlWCwgdGhlcmUgYXJlIGFjdHVhbGx5IHRocmVlIHNldHMgb2YgZGltZW5zaW9ucywgb25lIGZvciBlYWNoIG9mXG4vLyB0ZXh0c3R5bGUgKHNpemUgaW5kZXggNSBhbmQgaGlnaGVyOiA+PTlwdCksIHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDMgYW5kIDQ6XG4vLyA3LThwdCksIGFuZCBzY3JpcHRzY3JpcHRzdHlsZSAoc2l6ZSBpbmRleCAxIGFuZCAyOiA1LTZwdCkuICBUaGVzZSBhcmVcbi8vIHByb3ZpZGVkIGluIHRoZSBhcnJheXMgYmVsb3csIGluIHRoYXQgb3JkZXIuXG4vL1xuLy8gVGhlIGZvbnQgbWV0cmljcyBhcmUgc3RvcmVkIGluIGZvbnRzIGNtc3kxMCwgY21zeTcsIGFuZCBjbXN5NSByZXNwZWN0aXZlbHkuXG4vLyBUaGlzIHdhcyBkZXRlcm1pbmVkIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBzY3JpcHQ6XG4vL1xuLy8gICAgIGxhdGV4IC1pbnRlcmFjdGlvbj1ub25zdG9wbW9kZSBcXFxuLy8gICAgICdcXGRvY3VtZW50Y2xhc3N7YXJ0aWNsZX1cXHVzZXBhY2thZ2V7YW1zbWF0aH1cXGJlZ2lue2RvY3VtZW50fScgXFxcbi8vICAgICAnJGEkIFxcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcdGV4dGZvbnQyJyBcXFxuLy8gICAgICdcXGV4cGFuZGFmdGVyXFxzaG93XFx0aGVcXHNjcmlwdGZvbnQyJyBcXFxuLy8gICAgICdcXGV4cGFuZGFmdGVyXFxzaG93XFx0aGVcXHNjcmlwdHNjcmlwdGZvbnQyJyBcXFxuLy8gICAgICdcXHN0b3AnXG4vL1xuLy8gVGhlIG1ldHJpY3MgdGhlbXNlbHZlcyB3ZXJlIHJldHJpZXZlZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOlxuLy9cbi8vICAgICB0ZnRvcGwgY21zeTEwXG4vLyAgICAgdGZ0b3BsIGNtc3k3XG4vLyAgICAgdGZ0b3BsIGNtc3k1XG4vL1xuLy8gVGhlIG91dHB1dCBvZiBlYWNoIG9mIHRoZXNlIGNvbW1hbmRzIGlzIHF1aXRlIGxlbmd0aHkuICBUaGUgb25seSBwYXJ0IHdlXG4vLyBjYXJlIGFib3V0IGlzIHRoZSBGT05URElNRU4gc2VjdGlvbi4gRWFjaCB2YWx1ZSBpcyBtZWFzdXJlZCBpbiBFTXMuXG52YXIgc2lnbWFzQW5kWGlzID0ge1xuICBzbGFudDogWzAuMjUwLCAwLjI1MCwgMC4yNTBdLFxuICAvLyBzaWdtYTFcbiAgc3BhY2U6IFswLjAwMCwgMC4wMDAsIDAuMDAwXSxcbiAgLy8gc2lnbWEyXG4gIHN0cmV0Y2g6IFswLjAwMCwgMC4wMDAsIDAuMDAwXSxcbiAgLy8gc2lnbWEzXG4gIHNocmluazogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTRcbiAgeEhlaWdodDogWzAuNDMxLCAwLjQzMSwgMC40MzFdLFxuICAvLyBzaWdtYTVcbiAgcXVhZDogWzEuMDAwLCAxLjE3MSwgMS40NzJdLFxuICAvLyBzaWdtYTZcbiAgZXh0cmFTcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTdcbiAgbnVtMTogWzAuNjc3LCAwLjczMiwgMC45MjVdLFxuICAvLyBzaWdtYThcbiAgbnVtMjogWzAuMzk0LCAwLjM4NCwgMC4zODddLFxuICAvLyBzaWdtYTlcbiAgbnVtMzogWzAuNDQ0LCAwLjQ3MSwgMC41MDRdLFxuICAvLyBzaWdtYTEwXG4gIGRlbm9tMTogWzAuNjg2LCAwLjc1MiwgMS4wMjVdLFxuICAvLyBzaWdtYTExXG4gIGRlbm9tMjogWzAuMzQ1LCAwLjM0NCwgMC41MzJdLFxuICAvLyBzaWdtYTEyXG4gIHN1cDE6IFswLjQxMywgMC41MDMsIDAuNTA0XSxcbiAgLy8gc2lnbWExM1xuICBzdXAyOiBbMC4zNjMsIDAuNDMxLCAwLjQwNF0sXG4gIC8vIHNpZ21hMTRcbiAgc3VwMzogWzAuMjg5LCAwLjI4NiwgMC4yOTRdLFxuICAvLyBzaWdtYTE1XG4gIHN1YjE6IFswLjE1MCwgMC4xNDMsIDAuMjAwXSxcbiAgLy8gc2lnbWExNlxuICBzdWIyOiBbMC4yNDcsIDAuMjg2LCAwLjQwMF0sXG4gIC8vIHNpZ21hMTdcbiAgc3VwRHJvcDogWzAuMzg2LCAwLjM1MywgMC40OTRdLFxuICAvLyBzaWdtYTE4XG4gIHN1YkRyb3A6IFswLjA1MCwgMC4wNzEsIDAuMTAwXSxcbiAgLy8gc2lnbWExOVxuICBkZWxpbTE6IFsyLjM5MCwgMS43MDAsIDEuOTgwXSxcbiAgLy8gc2lnbWEyMFxuICBkZWxpbTI6IFsxLjAxMCwgMS4xNTcsIDEuNDIwXSxcbiAgLy8gc2lnbWEyMVxuICBheGlzSGVpZ2h0OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMjJcbiAgLy8gVGhlc2UgZm9udCBtZXRyaWNzIGFyZSBleHRyYWN0ZWQgZnJvbSBUZVggYnkgdXNpbmcgdGZ0b3BsIG9uIGNtZXgxMC50Zm07XG4gIC8vIHRoZXkgY29ycmVzcG9uZCB0byB0aGUgZm9udCBwYXJhbWV0ZXJzIG9mIHRoZSBleHRlbnNpb24gZm9udHMgKGZhbWlseSAzKS5cbiAgLy8gU2VlIHRoZSBUZVhib29rLCBwYWdlIDQ0MS4gSW4gQU1TVGVYLCB0aGUgZXh0ZW5zaW9uIGZvbnRzIHNjYWxlOyB0b1xuICAvLyBtYXRjaCBjbWV4Nywgd2UnZCB1c2UgY21leDcudGZtIHZhbHVlcyBmb3Igc2NyaXB0IGFuZCBzY3JpcHRzY3JpcHRcbiAgLy8gdmFsdWVzLlxuICBkZWZhdWx0UnVsZVRoaWNrbmVzczogWzAuMDQsIDAuMDQ5LCAwLjA0OV0sXG4gIC8vIHhpODsgY21leDc6IDAuMDQ5XG4gIGJpZ09wU3BhY2luZzE6IFswLjExMSwgMC4xMTEsIDAuMTExXSxcbiAgLy8geGk5XG4gIGJpZ09wU3BhY2luZzI6IFswLjE2NiwgMC4xNjYsIDAuMTY2XSxcbiAgLy8geGkxMFxuICBiaWdPcFNwYWNpbmczOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIHhpMTFcbiAgYmlnT3BTcGFjaW5nNDogWzAuNiwgMC42MTEsIDAuNjExXSxcbiAgLy8geGkxMjsgY21leDc6IDAuNjExXG4gIGJpZ09wU3BhY2luZzU6IFswLjEsIDAuMTQzLCAwLjE0M10sXG4gIC8vIHhpMTM7IGNtZXg3OiAwLjE0M1xuICAvLyBUaGUgXFxzcXJ0IHJ1bGUgd2lkdGggaXMgdGFrZW4gZnJvbSB0aGUgaGVpZ2h0IG9mIHRoZSBzdXJkIGNoYXJhY3Rlci5cbiAgLy8gU2luY2Ugd2UgdXNlIHRoZSBzYW1lIGZvbnQgYXQgYWxsIHNpemVzLCB0aGlzIHRoaWNrbmVzcyBkb2Vzbid0IHNjYWxlLlxuICBzcXJ0UnVsZVRoaWNrbmVzczogWzAuMDQsIDAuMDQsIDAuMDRdLFxuICAvLyBUaGlzIHZhbHVlIGRldGVybWluZXMgaG93IGxhcmdlIGEgcHQgaXMsIGZvciBtZXRyaWNzIHdoaWNoIGFyZSBkZWZpbmVkXG4gIC8vIGluIHRlcm1zIG9mIHB0cy5cbiAgLy8gVGhpcyB2YWx1ZSBpcyBhbHNvIHVzZWQgaW4ga2F0ZXguc2NzczsgaWYgeW91IGNoYW5nZSBpdCBtYWtlIHN1cmUgdGhlXG4gIC8vIHZhbHVlcyBtYXRjaC5cbiAgcHRQZXJFbTogWzEwLjAsIDEwLjAsIDEwLjBdLFxuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiBhZGphY2VudCBgfGAgY29sdW1ucyBpbiBhbiBhcnJheSBkZWZpbml0aW9uLiBGcm9tXG4gIC8vIGBcXHNob3d0aGVcXGRvdWJsZXJ1bGVzZXBgIGluIExhVGVYLiBFcXVhbHMgMi4wIC8gcHRQZXJFbS5cbiAgZG91YmxlUnVsZVNlcDogWzAuMiwgMC4yLCAwLjJdLFxuICAvLyBUaGUgd2lkdGggb2Ygc2VwYXJhdG9yIGxpbmVzIGluIHthcnJheX0gZW52aXJvbm1lbnRzLiBGcm9tXG4gIC8vIGBcXHNob3d0aGVcXGFycmF5cnVsZXdpZHRoYCBpbiBMYVRlWC4gRXF1YWxzIDAuNCAvIHB0UGVyRW0uXG4gIGFycmF5UnVsZVdpZHRoOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFR3byB2YWx1ZXMgZnJvbSBMYVRlWCBzb3VyY2UyZTpcbiAgZmJveHNlcDogWzAuMywgMC4zLCAwLjNdLFxuICAvLyAgICAgICAgMyBwdCAvIHB0UGVyRW1cbiAgZmJveHJ1bGU6IFswLjA0LCAwLjA0LCAwLjA0XSAvLyAwLjQgcHQgLyBwdFBlckVtXG5cbn07IC8vIFRoaXMgbWFwIGNvbnRhaW5zIGEgbWFwcGluZyBmcm9tIGZvbnQgbmFtZSBhbmQgY2hhcmFjdGVyIGNvZGUgdG8gY2hhcmFjdGVyXG4vLyBzaG91bGQgaGF2ZSBMYXRpbi0xIGFuZCBDeXJpbGxpYyBjaGFyYWN0ZXJzLCBidXQgbWF5IG5vdCBkZXBlbmRpbmcgb24gdGhlXG4vLyBvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIG1ldHJpY3MgZG8gbm90IGFjY291bnQgZm9yIGV4dHJhIGhlaWdodCBmcm9tIHRoZVxuLy8gYWNjZW50cy4gIEluIHRoZSBjYXNlIG9mIEN5cmlsbGljIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBib3RoIGFzY2VuZGVycyBhbmRcbi8vIGRlc2NlbmRlcnMgd2UgcHJlZmVyIGFwcHJveGltYXRpb25zIHdpdGggYXNjZW5kZXJzLCBwcmltYXJpbHkgdG8gcHJldmVudFxuLy8gdGhlIGZyYWN0aW9uIGJhciBvciByb290IGxpbmUgZnJvbSBpbnRlcnNlY3RpbmcgdGhlIGdseXBoLlxuLy8gVE9ETyhrZXZpbmIpIGFsbG93IHVuaW9uIG9mIG11bHRpcGxlIGdseXBoIG1ldHJpY3MgZm9yIGJldHRlciBhY2N1cmFjeS5cblxudmFyIGV4dHJhQ2hhcmFjdGVyTWFwID0ge1xuICAvLyBMYXRpbi0xXG4gICfDhSc6ICdBJyxcbiAgJ8OQJzogJ0QnLFxuICAnw54nOiAnbycsXG4gICfDpSc6ICdhJyxcbiAgJ8OwJzogJ2QnLFxuICAnw74nOiAnbycsXG4gIC8vIEN5cmlsbGljXG4gICfQkCc6ICdBJyxcbiAgJ9CRJzogJ0InLFxuICAn0JInOiAnQicsXG4gICfQkyc6ICdGJyxcbiAgJ9CUJzogJ0EnLFxuICAn0JUnOiAnRScsXG4gICfQlic6ICdLJyxcbiAgJ9CXJzogJzMnLFxuICAn0JgnOiAnTicsXG4gICfQmSc6ICdOJyxcbiAgJ9CaJzogJ0snLFxuICAn0JsnOiAnTicsXG4gICfQnCc6ICdNJyxcbiAgJ9CdJzogJ0gnLFxuICAn0J4nOiAnTycsXG4gICfQnyc6ICdOJyxcbiAgJ9CgJzogJ1AnLFxuICAn0KEnOiAnQycsXG4gICfQoic6ICdUJyxcbiAgJ9CjJzogJ3knLFxuICAn0KQnOiAnTycsXG4gICfQpSc6ICdYJyxcbiAgJ9CmJzogJ1UnLFxuICAn0KcnOiAnaCcsXG4gICfQqCc6ICdXJyxcbiAgJ9CpJzogJ1cnLFxuICAn0KonOiAnQicsXG4gICfQqyc6ICdYJyxcbiAgJ9CsJzogJ0InLFxuICAn0K0nOiAnMycsXG4gICfQric6ICdYJyxcbiAgJ9CvJzogJ1InLFxuICAn0LAnOiAnYScsXG4gICfQsSc6ICdiJyxcbiAgJ9CyJzogJ2EnLFxuICAn0LMnOiAncicsXG4gICfQtCc6ICd5JyxcbiAgJ9C1JzogJ2UnLFxuICAn0LYnOiAnbScsXG4gICfQtyc6ICdlJyxcbiAgJ9C4JzogJ24nLFxuICAn0LknOiAnbicsXG4gICfQuic6ICduJyxcbiAgJ9C7JzogJ24nLFxuICAn0LwnOiAnbScsXG4gICfQvSc6ICduJyxcbiAgJ9C+JzogJ28nLFxuICAn0L8nOiAnbicsXG4gICfRgCc6ICdwJyxcbiAgJ9GBJzogJ2MnLFxuICAn0YInOiAnbycsXG4gICfRgyc6ICd5JyxcbiAgJ9GEJzogJ2InLFxuICAn0YUnOiAneCcsXG4gICfRhic6ICduJyxcbiAgJ9GHJzogJ24nLFxuICAn0YgnOiAndycsXG4gICfRiSc6ICd3JyxcbiAgJ9GKJzogJ2EnLFxuICAn0YsnOiAnbScsXG4gICfRjCc6ICdhJyxcbiAgJ9GNJzogJ2UnLFxuICAn0Y4nOiAnbScsXG4gICfRjyc6ICdyJ1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFkZHMgbmV3IGZvbnQgbWV0cmljcyB0byBkZWZhdWx0IG1ldHJpY01hcFxuICogSXQgY2FuIGFsc28gb3ZlcnJpZGUgZXhpc3RpbmcgbWV0cmljc1xuICovXG5mdW5jdGlvbiBzZXRGb250TWV0cmljcyhmb250TmFtZSwgbWV0cmljcykge1xuICBmb250TWV0cmljc0RhdGFbZm9udE5hbWVdID0gbWV0cmljcztcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBsb29raW5nIHVwIGluZm9ybWF0aW9uIGluIHRoZVxuICogbWV0cmljTWFwIHRhYmxlLiBJdCB0YWtlcyBhIGNoYXJhY3RlciBhcyBhIHN0cmluZywgYW5kIGEgZm9udC5cbiAqXG4gKiBOb3RlOiB0aGUgYHdpZHRoYCBwcm9wZXJ0eSBtYXkgYmUgdW5kZWZpbmVkIGlmIGZvbnRNZXRyaWNzRGF0YS5qcyB3YXNuJ3RcbiAqIGJ1aWx0IHVzaW5nIGBNYWtlIGV4dGVuZGVkX21ldHJpY3NgLlxuICovXG5cbmZ1bmN0aW9uIGdldENoYXJhY3Rlck1ldHJpY3MoY2hhcmFjdGVyLCBmb250LCBtb2RlKSB7XG4gIGlmICghZm9udE1ldHJpY3NEYXRhW2ZvbnRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRm9udCBtZXRyaWNzIG5vdCBmb3VuZCBmb3IgZm9udDogXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgdmFyIGNoID0gY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCk7XG4gIHZhciBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcblxuICBpZiAoIW1ldHJpY3MgJiYgY2hhcmFjdGVyWzBdIGluIGV4dHJhQ2hhcmFjdGVyTWFwKSB7XG4gICAgY2ggPSBleHRyYUNoYXJhY3Rlck1hcFtjaGFyYWN0ZXJbMF1dLmNoYXJDb2RlQXQoMCk7XG4gICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVtjaF07XG4gIH1cblxuICBpZiAoIW1ldHJpY3MgJiYgbW9kZSA9PT0gJ3RleHQnKSB7XG4gICAgLy8gV2UgZG9uJ3QgdHlwaWNhbGx5IGhhdmUgZm9udCBtZXRyaWNzIGZvciBBc2lhbiBzY3JpcHRzLlxuICAgIC8vIEJ1dCBzaW5jZSB3ZSBzdXBwb3J0IHRoZW0gaW4gdGV4dCBtb2RlLCB3ZSBuZWVkIHRvIHJldHVyblxuICAgIC8vIHNvbWUgc29ydCBvZiBtZXRyaWNzLlxuICAgIC8vIFNvIGlmIHRoZSBjaGFyYWN0ZXIgaXMgaW4gYSBzY3JpcHQgd2Ugc3VwcG9ydCBidXQgd2VcbiAgICAvLyBkb24ndCBoYXZlIG1ldHJpY3MgZm9yIGl0LCBqdXN0IHVzZSB0aGUgbWV0cmljcyBmb3JcbiAgICAvLyB0aGUgTGF0aW4gY2FwaXRhbCBsZXR0ZXIgTS4gVGhpcyBpcyBjbG9zZSBlbm91Z2ggYmVjYXVzZVxuICAgIC8vIHdlIChjdXJyZW50bHkpIG9ubHkgY2FyZSBhYm91dCB0aGUgaGVpZ2h0IG9mIHRoZSBnbHlwaFxuICAgIC8vIG5vdCBpdHMgd2lkdGguXG4gICAgaWYgKHN1cHBvcnRlZENvZGVwb2ludChjaCkpIHtcbiAgICAgIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bNzddOyAvLyA3NyBpcyB0aGUgY2hhcmNvZGUgZm9yICdNJ1xuICAgIH1cbiAgfVxuXG4gIGlmIChtZXRyaWNzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcHRoOiBtZXRyaWNzWzBdLFxuICAgICAgaGVpZ2h0OiBtZXRyaWNzWzFdLFxuICAgICAgaXRhbGljOiBtZXRyaWNzWzJdLFxuICAgICAgc2tldzogbWV0cmljc1szXSxcbiAgICAgIHdpZHRoOiBtZXRyaWNzWzRdXG4gICAgfTtcbiAgfVxufVxudmFyIGZvbnRNZXRyaWNzQnlTaXplSW5kZXggPSB7fTtcbi8qKlxuICogR2V0IHRoZSBmb250IG1ldHJpY3MgZm9yIGEgZ2l2ZW4gc2l6ZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRHbG9iYWxNZXRyaWNzKHNpemUpIHtcbiAgdmFyIHNpemVJbmRleDtcblxuICBpZiAoc2l6ZSA+PSA1KSB7XG4gICAgc2l6ZUluZGV4ID0gMDtcbiAgfSBlbHNlIGlmIChzaXplID49IDMpIHtcbiAgICBzaXplSW5kZXggPSAxO1xuICB9IGVsc2Uge1xuICAgIHNpemVJbmRleCA9IDI7XG4gIH1cblxuICBpZiAoIWZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XSkge1xuICAgIHZhciBtZXRyaWNzID0gZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdID0ge1xuICAgICAgY3NzRW1QZXJNdTogc2lnbWFzQW5kWGlzLnF1YWRbc2l6ZUluZGV4XSAvIDE4XG4gICAgfTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzaWdtYXNBbmRYaXMpIHtcbiAgICAgIGlmIChzaWdtYXNBbmRYaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBtZXRyaWNzW2tleV0gPSBzaWdtYXNBbmRYaXNba2V5XVtzaXplSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF07XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcHRpb25zIHRoYXQgdGhlIFBhcnNlciBjYXJyaWVzXG4gKiBhcm91bmQgd2l0aCBpdCB3aGlsZSBwYXJzaW5nLiBEYXRhIGlzIGhlbGQgaW4gYW4gYE9wdGlvbnNgIG9iamVjdCwgYW5kIHdoZW5cbiAqIHJlY3Vyc2luZywgYSBuZXcgYE9wdGlvbnNgIG9iamVjdCBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgLndpdGgqYCBhbmRcbiAqIGAucmVzZXRgIGZ1bmN0aW9ucy5cbiAqL1xudmFyIHNpemVTdHlsZU1hcCA9IFsvLyBFYWNoIGVsZW1lbnQgY29udGFpbnMgW3RleHRzaXplLCBzY3JpcHRzaXplLCBzY3JpcHRzY3JpcHRzaXplXS5cbi8vIFRoZSBzaXplIG1hcHBpbmdzIGFyZSB0YWtlbiBmcm9tIFRlWCB3aXRoIFxcbm9ybWFsc2l6ZT0xMHB0LlxuWzEsIDEsIDFdLCAvLyBzaXplMTogWzUsIDUsIDVdICAgICAgICAgICAgICBcXHRpbnlcblsyLCAxLCAxXSwgLy8gc2l6ZTI6IFs2LCA1LCA1XVxuWzMsIDEsIDFdLCAvLyBzaXplMzogWzcsIDUsIDVdICAgICAgICAgICAgICBcXHNjcmlwdHNpemVcbls0LCAyLCAxXSwgLy8gc2l6ZTQ6IFs4LCA2LCA1XSAgICAgICAgICAgICAgXFxmb290bm90ZXNpemVcbls1LCAyLCAxXSwgLy8gc2l6ZTU6IFs5LCA2LCA1XSAgICAgICAgICAgICAgXFxzbWFsbFxuWzYsIDMsIDFdLCAvLyBzaXplNjogWzEwLCA3LCA1XSAgICAgICAgICAgICBcXG5vcm1hbHNpemVcbls3LCA0LCAyXSwgLy8gc2l6ZTc6IFsxMiwgOCwgNl0gICAgICAgICAgICAgXFxsYXJnZVxuWzgsIDYsIDNdLCAvLyBzaXplODogWzE0LjQsIDEwLCA3XSAgICAgICAgICBcXExhcmdlXG5bOSwgNywgNl0sIC8vIHNpemU5OiBbMTcuMjgsIDEyLCAxMF0gICAgICAgIFxcTEFSR0VcblsxMCwgOCwgN10sIC8vIHNpemUxMDogWzIwLjc0LCAxNC40LCAxMl0gICAgIFxcaHVnZVxuWzExLCAxMCwgOV0gLy8gc2l6ZTExOiBbMjQuODgsIDIwLjc0LCAxNy4yOF0gXFxIVUdFXG5dO1xudmFyIHNpemVNdWx0aXBsaWVycyA9IFsvLyBmb250TWV0cmljcy5qczpnZXRHbG9iYWxNZXRyaWNzIGFsc28gdXNlcyBzaXplIGluZGV4ZXMsIHNvIGlmXG4vLyB5b3UgY2hhbmdlIHNpemUgaW5kZXhlcywgY2hhbmdlIHRoYXQgZnVuY3Rpb24uXG4wLjUsIDAuNiwgMC43LCAwLjgsIDAuOSwgMS4wLCAxLjIsIDEuNDQsIDEuNzI4LCAyLjA3NCwgMi40ODhdO1xuXG52YXIgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiBzaXplQXRTdHlsZShzaXplLCBzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc2l6ZSA8IDIgPyBzaXplIDogc2l6ZVN0eWxlTWFwW3NpemUgLSAxXVtzdHlsZS5zaXplIC0gMV07XG59OyAvLyBJbiB0aGVzZSB0eXBlcywgXCJcIiAoZW1wdHkgc3RyaW5nKSBtZWFucyBcIm5vIGNoYW5nZVwiLlxuXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBvcHRpb25zIGNsYXNzLiBJdCBjb250YWlucyB0aGUgY3VycmVudCBzdHlsZSwgc2l6ZSwgY29sb3IsXG4gKiBhbmQgZm9udC5cbiAqXG4gKiBPcHRpb25zIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gVG8gY3JlYXRlIGEgbmV3IE9wdGlvbnMgd2l0aFxuICogZGlmZmVyZW50IHByb3BlcnRpZXMsIGNhbGwgYSBgLmhhdmluZypgIG1ldGhvZC5cbiAqL1xuY2xhc3MgT3B0aW9ucyB7XG4gIC8vIEEgZm9udCBmYW1pbHkgYXBwbGllcyB0byBhIGdyb3VwIG9mIGZvbnRzIChpLmUuIFNhbnNTZXJpZiksIHdoaWxlIGEgZm9udFxuICAvLyByZXByZXNlbnRzIGEgc3BlY2lmaWMgZm9udCAoaS5lLiBTYW5zU2VyaWYgQm9sZCkuXG4gIC8vIFNlZTogaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMzUwL2RpZmZlcmVuY2UtYmV0d2Vlbi10ZXh0cm0tYW5kLW1hdGhybVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBzaXplIGluZGV4LlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5jb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBoYW50b20gPSB2b2lkIDA7XG4gICAgdGhpcy5mb250ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRXZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250U2hhcGUgPSB2b2lkIDA7XG4gICAgdGhpcy5zaXplTXVsdGlwbGllciA9IHZvaWQgMDtcbiAgICB0aGlzLm1heFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gdm9pZCAwO1xuICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSBkYXRhLnN0eWxlO1xuICAgIHRoaXMuY29sb3IgPSBkYXRhLmNvbG9yO1xuICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZSB8fCBPcHRpb25zLkJBU0VTSVpFO1xuICAgIHRoaXMudGV4dFNpemUgPSBkYXRhLnRleHRTaXplIHx8IHRoaXMuc2l6ZTtcbiAgICB0aGlzLnBoYW50b20gPSAhIWRhdGEucGhhbnRvbTtcbiAgICB0aGlzLmZvbnQgPSBkYXRhLmZvbnQgfHwgXCJcIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBkYXRhLmZvbnRGYW1pbHkgfHwgXCJcIjtcbiAgICB0aGlzLmZvbnRXZWlnaHQgPSBkYXRhLmZvbnRXZWlnaHQgfHwgJyc7XG4gICAgdGhpcy5mb250U2hhcGUgPSBkYXRhLmZvbnRTaGFwZSB8fCAnJztcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gc2l6ZU11bHRpcGxpZXJzW3RoaXMuc2l6ZSAtIDFdO1xuICAgIHRoaXMubWF4U2l6ZSA9IGRhdGEubWF4U2l6ZTtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSBkYXRhLm1pblJ1bGVUaGlja25lc3M7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIFwidGhpc1wiLiAgUHJvcGVydGllc1xuICAgKiBmcm9tIFwiZXh0ZW5zaW9uXCIgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG5ldyBvcHRpb25zIG9iamVjdC5cbiAgICovXG5cblxuICBleHRlbmQoZXh0ZW5zaW9uKSB7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBzdHlsZTogdGhpcy5zdHlsZSxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHRleHRTaXplOiB0aGlzLnRleHRTaXplLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBwaGFudG9tOiB0aGlzLnBoYW50b20sXG4gICAgICBmb250OiB0aGlzLmZvbnQsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiB0aGlzLmZvbnRXZWlnaHQsXG4gICAgICBmb250U2hhcGU6IHRoaXMuZm9udFNoYXBlLFxuICAgICAgbWF4U2l6ZTogdGhpcy5tYXhTaXplLFxuICAgICAgbWluUnVsZVRoaWNrbmVzczogdGhpcy5taW5SdWxlVGhpY2tuZXNzXG4gICAgfTtcblxuICAgIGZvciAodmFyIGtleSBpbiBleHRlbnNpb24pIHtcbiAgICAgIGlmIChleHRlbnNpb24uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBkYXRhW2tleV0gPSBleHRlbnNpb25ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wdGlvbnMoZGF0YSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzdHlsZS4gSWYgYHRoaXMuc3R5bGUgPT09IHN0eWxlYCxcbiAgICogcmV0dXJucyBgdGhpc2AuXG4gICAqL1xuXG5cbiAgaGF2aW5nU3R5bGUoc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZSA9PT0gc3R5bGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHNpemU6IHNpemVBdFN0eWxlKHRoaXMudGV4dFNpemUsIHN0eWxlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9ucyBvYmplY3Qgd2l0aCBhIGNyYW1wZWQgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBzdHlsZS4gSWZcbiAgICogdGhlIGN1cnJlbnQgc3R5bGUgaXMgY3JhbXBlZCwgcmV0dXJucyBgdGhpc2AuXG4gICAqL1xuXG5cbiAgaGF2aW5nQ3JhbXBlZFN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLmhhdmluZ1N0eWxlKHRoaXMuc3R5bGUuY3JhbXAoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzaXplIGFuZCBpbiBhdCBsZWFzdCBgXFx0ZXh0c3R5bGVgLlxuICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBhcHByb3ByaWF0ZS5cbiAgICovXG5cblxuICBoYXZpbmdTaXplKHNpemUpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSBzaXplICYmIHRoaXMudGV4dFNpemUgPT09IHNpemUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgICBzdHlsZTogdGhpcy5zdHlsZS50ZXh0KCksXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgIHRleHRTaXplOiBzaXplLFxuICAgICAgICBzaXplTXVsdGlwbGllcjogc2l6ZU11bHRpcGxpZXJzW3NpemUgLSAxXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBMaWtlIGB0aGlzLmhhdmluZ1NpemUoQkFTRVNJWkUpLmhhdmluZ1N0eWxlKHN0eWxlKWAuIElmIGBzdHlsZWAgaXMgb21pdHRlZCxcbiAgICogY2hhbmdlcyB0byBhdCBsZWFzdCBgXFx0ZXh0c3R5bGVgLlxuICAgKi9cblxuXG4gIGhhdmluZ0Jhc2VTdHlsZShzdHlsZSkge1xuICAgIHN0eWxlID0gc3R5bGUgfHwgdGhpcy5zdHlsZS50ZXh0KCk7XG4gICAgdmFyIHdhbnRTaXplID0gc2l6ZUF0U3R5bGUoT3B0aW9ucy5CQVNFU0laRSwgc3R5bGUpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gd2FudFNpemUgJiYgdGhpcy50ZXh0U2l6ZSA9PT0gT3B0aW9ucy5CQVNFU0laRSAmJiB0aGlzLnN0eWxlID09PSBzdHlsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2l6ZTogd2FudFNpemVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBlZmZlY3Qgb2Ygc2l6aW5nIGNoYW5nZXMgc3VjaCBhcyBcXEh1Z2UuXG4gICAqIEtlZXAgdGhlIGVmZmVjdCBvZiB0aGUgY3VycmVudCBzdHlsZSwgc3VjaCBhcyBcXHNjcmlwdHN0eWxlLlxuICAgKi9cblxuXG4gIGhhdmluZ0Jhc2VTaXppbmcoKSB7XG4gICAgdmFyIHNpemU7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3R5bGUuaWQpIHtcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgc2l6ZSA9IDM7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA2OlxuICAgICAgY2FzZSA3OlxuICAgICAgICBzaXplID0gMTsgLy8gbm9ybWFsc2l6ZSBpbiBzY3JpcHRzY3JpcHRzdHlsZVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzaXplID0gNjtcbiAgICAgIC8vIG5vcm1hbHNpemUgaW4gdGV4dHN0eWxlIG9yIGRpc3BsYXlzdHlsZVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBzdHlsZTogdGhpcy5zdHlsZS50ZXh0KCksXG4gICAgICBzaXplOiBzaXplXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAgICovXG5cblxuICB3aXRoQ29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgY29sb3I6IGNvbG9yXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIFwicGhhbnRvbVwiIHNldCB0byB0cnVlLlxuICAgKi9cblxuXG4gIHdpdGhQaGFudG9tKCkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBwaGFudG9tOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbWF0aCBmb250IG9yIG9sZCB0ZXh0IGZvbnQuXG4gICAqIEB0eXBlIHtbdHlwZV19XG4gICAqL1xuXG5cbiAgd2l0aEZvbnQoZm9udCkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdHMgd2l0aCB0aGUgZ2l2ZW4gZm9udEZhbWlseS5cbiAgICovXG5cblxuICB3aXRoVGV4dEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250RmFtaWx5LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuXG5cbiAgd2l0aFRleHRGb250V2VpZ2h0KGZvbnRXZWlnaHQpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFdlaWdodCxcbiAgICAgIGZvbnQ6IFwiXCJcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBmb250IHdlaWdodFxuICAgKi9cblxuXG4gIHdpdGhUZXh0Rm9udFNoYXBlKGZvbnRTaGFwZSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250U2hhcGUsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCBmcm9tIGVuY2xvc2luZyBvcHRpb25zXG4gICAqIGBvbGRPcHRpb25zYCB0byBgdGhpc2AuIFJldHVybnMgYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAgICovXG5cblxuICBzaXppbmdDbGFzc2VzKG9sZE9wdGlvbnMpIHtcbiAgICBpZiAob2xkT3B0aW9ucy5zaXplICE9PSB0aGlzLnNpemUpIHtcbiAgICAgIHJldHVybiBbXCJzaXppbmdcIiwgXCJyZXNldC1zaXplXCIgKyBvbGRPcHRpb25zLnNpemUsIFwic2l6ZVwiICsgdGhpcy5zaXplXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBDU1Mgc2l6aW5nIGNsYXNzZXMgcmVxdWlyZWQgdG8gc3dpdGNoIHRvIHRoZSBiYXNlIHNpemUuIExpa2VcbiAgICogYHRoaXMuaGF2aW5nU2l6ZShCQVNFU0laRSkuc2l6aW5nQ2xhc3Nlcyh0aGlzKWAuXG4gICAqL1xuXG5cbiAgYmFzZVNpemluZ0NsYXNzZXMoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSAhPT0gT3B0aW9ucy5CQVNFU0laRSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIHRoaXMuc2l6ZSwgXCJzaXplXCIgKyBPcHRpb25zLkJBU0VTSVpFXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBmb250IG1ldHJpY3MgZm9yIHRoaXMgc2l6ZS5cbiAgICovXG5cblxuICBmb250TWV0cmljcygpIHtcbiAgICBpZiAoIXRoaXMuX2ZvbnRNZXRyaWNzKSB7XG4gICAgICB0aGlzLl9mb250TWV0cmljcyA9IGdldEdsb2JhbE1ldHJpY3ModGhpcy5zaXplKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZm9udE1ldHJpY3M7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIENTUyBjb2xvciBvZiB0aGUgY3VycmVudCBvcHRpb25zIG9iamVjdFxuICAgKi9cblxuXG4gIGdldENvbG9yKCkge1xuICAgIGlmICh0aGlzLnBoYW50b20pIHtcbiAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICAgIH1cbiAgfVxuXG59XG5cbk9wdGlvbnMuQkFTRVNJWkUgPSA2O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cbi8vIFRodXMsIG11bHRpcGx5aW5nIGEgbGVuZ3RoIGJ5IHRoaXMgbnVtYmVyIGNvbnZlcnRzIHRoZSBsZW5ndGggZnJvbSB1bml0c1xuLy8gaW50byBwdHMuICBEaXZpZGluZyB0aGUgcmVzdWx0IGJ5IHB0UGVyRW0gZ2l2ZXMgdGhlIG51bWJlciBvZiBlbXNcbi8vICphc3N1bWluZyogYSBmb250IHNpemUgb2YgcHRQZXJFbSAobm9ybWFsIHNpemUsIG5vcm1hbCBzdHlsZSkuXG5cbnZhciBwdFBlclVuaXQgPSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0xhVGVYL0xlbmd0aHMgYW5kXG4gIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL2EvODI2M1xuICBcInB0XCI6IDEsXG4gIC8vIFRlWCBwb2ludFxuICBcIm1tXCI6IDcyMjcgLyAyNTQwLFxuICAvLyBtaWxsaW1ldGVyXG4gIFwiY21cIjogNzIyNyAvIDI1NCxcbiAgLy8gY2VudGltZXRlclxuICBcImluXCI6IDcyLjI3LFxuICAvLyBpbmNoXG4gIFwiYnBcIjogODAzIC8gODAwLFxuICAvLyBiaWcgKFBvc3RTY3JpcHQpIHBvaW50c1xuICBcInBjXCI6IDEyLFxuICAvLyBwaWNhXG4gIFwiZGRcIjogMTIzOCAvIDExNTcsXG4gIC8vIGRpZG90XG4gIFwiY2NcIjogMTQ4NTYgLyAxMTU3LFxuICAvLyBjaWNlcm8gKDEyIGRpZG90KVxuICBcIm5kXCI6IDY4NSAvIDY0MixcbiAgLy8gbmV3IGRpZG90XG4gIFwibmNcIjogMTM3MCAvIDEwNyxcbiAgLy8gbmV3IGNpY2VybyAoMTIgbmV3IGRpZG90KVxuICBcInNwXCI6IDEgLyA2NTUzNixcbiAgLy8gc2NhbGVkIHBvaW50IChUZVgncyBpbnRlcm5hbCBzbWFsbGVzdCB1bml0KVxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzQxMzcxXG4gIFwicHhcIjogODAzIC8gODAwIC8vIFxccGRmcHhkaW1lbiBkZWZhdWx0cyB0byAxIGJwIGluIHBkZlRlWCBhbmQgTHVhVGVYXG5cbn07IC8vIERpY3Rpb25hcnkgb2YgcmVsYXRpdmUgdW5pdHMsIGZvciBmYXN0IHZhbGlkaXR5IHRlc3RpbmcuXG5cbnZhciByZWxhdGl2ZVVuaXQgPSB7XG4gIFwiZXhcIjogdHJ1ZSxcbiAgXCJlbVwiOiB0cnVlLFxuICBcIm11XCI6IHRydWVcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB1bml0IChlaXRoZXIgYSBzdHJpbmcgZGVmaW5pbmcgdGhlIHVuaXRcbiAqIG9yIGEgXCJzaXplXCIgcGFyc2Ugbm9kZSBjb250YWluaW5nIGEgdW5pdCBmaWVsZCkgaXMgdmFsaWQuXG4gKi9cbnZhciB2YWxpZFVuaXQgPSBmdW5jdGlvbiB2YWxpZFVuaXQodW5pdCkge1xuICBpZiAodHlwZW9mIHVuaXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICB1bml0ID0gdW5pdC51bml0O1xuICB9XG5cbiAgcmV0dXJuIHVuaXQgaW4gcHRQZXJVbml0IHx8IHVuaXQgaW4gcmVsYXRpdmVVbml0IHx8IHVuaXQgPT09IFwiZXhcIjtcbn07XG4vKlxuICogQ29udmVydCBhIFwic2l6ZVwiIHBhcnNlIG5vZGUgKHdpdGggbnVtZXJpYyBcIm51bWJlclwiIGFuZCBzdHJpbmcgXCJ1bml0XCIgZmllbGRzLFxuICogYXMgcGFyc2VkIGJ5IGZ1bmN0aW9ucy5qcyBhcmdUeXBlIFwic2l6ZVwiKSBpbnRvIGEgQ1NTIGVtIHZhbHVlIGZvciB0aGVcbiAqIGN1cnJlbnQgc3R5bGUvc2NhbGUuICBgb3B0aW9uc2AgZ2l2ZXMgdGhlIGN1cnJlbnQgb3B0aW9ucy5cbiAqL1xuXG52YXIgY2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNpemUoc2l6ZVZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciBzY2FsZTtcblxuICBpZiAoc2l6ZVZhbHVlLnVuaXQgaW4gcHRQZXJVbml0KSB7XG4gICAgLy8gQWJzb2x1dGUgdW5pdHNcbiAgICBzY2FsZSA9IHB0UGVyVW5pdFtzaXplVmFsdWUudW5pdF0gLy8gQ29udmVydCB1bml0IHRvIHB0XG4gICAgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbSAvLyBDb252ZXJ0IHB0IHRvIENTUyBlbVxuICAgIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gVW5zY2FsZSB0byBtYWtlIGFic29sdXRlIHVuaXRzXG4gIH0gZWxzZSBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwibXVcIikge1xuICAgIC8vIGBtdWAgdW5pdHMgc2NhbGUgd2l0aCBzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZS5cbiAgICBzY2FsZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5jc3NFbVBlck11O1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyIHJlbGF0aXZlIHVuaXRzIGFsd2F5cyByZWZlciB0byB0aGUgKnRleHRzdHlsZSogZm9udFxuICAgIC8vIGluIHRoZSBjdXJyZW50IHNpemUuXG4gICAgdmFyIHVuaXRPcHRpb25zO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICAvLyBpc1RpZ2h0KCkgbWVhbnMgY3VycmVudCBzdHlsZSBpcyBzY3JpcHQvc2NyaXB0c2NyaXB0LlxuICAgICAgdW5pdE9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG9wdGlvbnMuc3R5bGUudGV4dCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5pdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gLy8gVE9ETzogSW4gVGVYIHRoZXNlIHVuaXRzIGFyZSByZWxhdGl2ZSB0byB0aGUgcXVhZCBvZiB0aGUgY3VycmVudFxuICAgIC8vICp0ZXh0KiBmb250LCBlLmcuIGNtcjEwLiBLYVRlWCBpbnN0ZWFkIHVzZXMgdmFsdWVzIGZyb20gdGhlXG4gICAgLy8gY29tcGFyYWJseS1zaXplZCAqQ29tcHV0ZXIgTW9kZXJuIHN5bWJvbCogZm9udC4gQXQgMTBwdCwgdGhlc2VcbiAgICAvLyBtYXRjaC4gQXQgN3B0IGFuZCA1cHQsIHRoZXkgZGlmZmVyOiBjbXI3PTEuMTM4ODk0LCBjbXN5Nz0xLjE3MDY0MTtcbiAgICAvLyBjbXI1PTEuMzYxMTMzLCBjbXN5NT0xLjQ3MjI0MS4gQ29uc2lkZXIgJFxcc2NyaXB0c2l6ZSBhXFxrZXJuMWVtYiQuXG4gICAgLy8gVGVYIFxcc2hvd2xpc3RzIHNob3dzIGEga2VybiBvZiAxLjEzODg5ICogZm9udHNpemU7XG4gICAgLy8gS2FUZVggc2hvd3MgYSBrZXJuIG9mIDEuMTcxICogZm9udHNpemUuXG5cblxuICAgIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJleFwiKSB7XG4gICAgICBzY2FsZSA9IHVuaXRPcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgICB9IGVsc2UgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcImVtXCIpIHtcbiAgICAgIHNjYWxlID0gdW5pdE9wdGlvbnMuZm9udE1ldHJpY3MoKS5xdWFkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgc2l6ZVZhbHVlLnVuaXQgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKHVuaXRPcHRpb25zICE9PSBvcHRpb25zKSB7XG4gICAgICBzY2FsZSAqPSB1bml0T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGgubWluKHNpemVWYWx1ZS5udW1iZXIgKiBzY2FsZSwgb3B0aW9ucy5tYXhTaXplKTtcbn07XG4vKipcbiAqIFJvdW5kIGBuYCB0byA0IGRlY2ltYWwgcGxhY2VzLCBvciB0byB0aGUgbmVhcmVzdCAxLzEwLDAwMHRoIGVtLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LYVRlWC9LYVRlWC9wdWxsLzI0NjAuXG4gKi9cblxudmFyIG1ha2VFbSA9IGZ1bmN0aW9uIG1ha2VFbShuKSB7XG4gIHJldHVybiArbi50b0ZpeGVkKDQpICsgXCJlbVwiO1xufTtcblxuLyoqXG4gKiBUaGVzZSBvYmplY3RzIHN0b3JlIHRoZSBkYXRhIGFib3V0IHRoZSBET00gbm9kZXMgd2UgY3JlYXRlLCBhcyB3ZWxsIGFzIHNvbWVcbiAqIGV4dHJhIGRhdGEuIFRoZXkgY2FuIHRoZW4gYmUgdHJhbnNmb3JtZWQgaW50byByZWFsIERPTSBub2RlcyB3aXRoIHRoZVxuICogYHRvTm9kZWAgZnVuY3Rpb24gb3IgSFRNTCBtYXJrdXAgdXNpbmcgYHRvTWFya3VwYC4gVGhleSBhcmUgdXNlZnVsIGZvciBib3RoXG4gKiBzdG9yaW5nIGV4dHJhIHByb3BlcnRpZXMgb24gdGhlIG5vZGVzLCBhcyB3ZWxsIGFzIHByb3ZpZGluZyBhIHdheSB0byBlYXNpbHlcbiAqIHdvcmsgd2l0aCB0aGUgRE9NLlxuICpcbiAqIFNpbWlsYXIgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggTWF0aE1MIG5vZGVzIGV4aXN0IGluIG1hdGhNTFRyZWUuanMuXG4gKlxuICogVE9ETzogcmVmYWN0b3IgYHNwYW5gIGFuZCBgYW5jaG9yYCBpbnRvIGNvbW1vbiBzdXBlcmNsYXNzIHdoZW5cbiAqIHRhcmdldCBlbnZpcm9ubWVudHMgc3VwcG9ydCBjbGFzcyBpbmhlcml0YW5jZVxuICovXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgY2xhc3NOYW1lIGJhc2VkIG9uIGEgbGlzdCBvZiBjbGFzc2VzLiBJbiBhZGRpdGlvbiB0byBqb2luaW5nXG4gKiB3aXRoIHNwYWNlcywgd2UgYWxzbyByZW1vdmUgZW1wdHkgY2xhc3Nlcy5cbiAqL1xudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gY3JlYXRlQ2xhc3MoY2xhc3Nlcykge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoY2xzID0+IGNscykuam9pbihcIiBcIik7XG59O1xuXG52YXIgaW5pdE5vZGUgPSBmdW5jdGlvbiBpbml0Tm9kZShjbGFzc2VzLCBvcHRpb25zLCBzdHlsZSkge1xuICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuICB0aGlzLmRlcHRoID0gMDtcbiAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gIHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgdGhpcy5jbGFzc2VzLnB1c2goXCJtdGlnaHRcIik7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBub2RlXG4gKi9cblxuXG52YXIgdG9Ob2RlID0gZnVuY3Rpb24gdG9Ob2RlKHRhZ05hbWUpIHtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOyAvLyBBcHBseSB0aGUgY2xhc3NcblxuICBub2RlLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7IC8vIEFwcGx5IGlubGluZSBzdHlsZXNcblxuICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG4gICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgIH1cbiAgfSAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cblxuICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgY2hpbGRyZW4sIGFsc28gYXMgSFRNTCBub2Rlc1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZ1xuICovXG5cblxudmFyIHRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAodGFnTmFtZSkge1xuICB2YXIgbWFya3VwID0gXCI8XCIgKyB0YWdOYW1lOyAvLyBBZGQgdGhlIGNsYXNzXG5cbiAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBtYXJrdXAgKz0gXCIgY2xhc3M9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gXCJcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbmNsYXNzIFNwYW4ge1xuICBjb25zdHJ1Y3RvcihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICBpbml0Tm9kZS5jYWxsKHRoaXMsIGNsYXNzZXMsIG9wdGlvbnMsIHN0eWxlKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYW4gYXJiaXRyYXJ5IGF0dHJpYnV0ZSBvbiB0aGUgc3Bhbi4gV2FybmluZzogdXNlIHRoaXMgd2lzZWx5LiBOb3RcbiAgICogYWxsIGJyb3dzZXJzIHN1cHBvcnQgYXR0cmlidXRlcyB0aGUgc2FtZSwgYW5kIGhhdmluZyB0b28gbWFueSBjdXN0b21cbiAgICogYXR0cmlidXRlcyBpcyBwcm9iYWJseSBiYWQuXG4gICAqL1xuXG5cbiAgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gdG9Ob2RlLmNhbGwodGhpcywgXCJzcGFuXCIpO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHRvTWFya3VwLmNhbGwodGhpcywgXCJzcGFuXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxuY2xhc3MgQW5jaG9yIHtcbiAgY29uc3RydWN0b3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgaW5pdE5vZGUuY2FsbCh0aGlzLCBjbGFzc2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgcmV0dXJuIHRvTm9kZS5jYWxsKHRoaXMsIFwiYVwiKTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB0b01hcmt1cC5jYWxsKHRoaXMsIFwiYVwiKTtcbiAgfVxuXG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGFuIGltYWdlIGVtYmVkICg8aW1nPikgZWxlbWVudC5cbiAqL1xuXG5jbGFzcyBJbWcge1xuICBjb25zdHJ1Y3RvcihzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBub2RlLnNyYyA9IHRoaXMuc3JjO1xuICAgIG5vZGUuYWx0ID0gdGhpcy5hbHQ7XG4gICAgbm9kZS5jbGFzc05hbWUgPSBcIm1vcmRcIjsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbm9kZS5zdHlsZVtzdHlsZV0gPSB0aGlzLnN0eWxlW3N0eWxlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIHZhciBtYXJrdXAgPSBcIjxpbWcgc3JjPVxcXCJcIiArIHV0aWxzLmVzY2FwZSh0aGlzLnNyYykgKyBcIlxcXCJcIiArIChcIiBhbHQ9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYWx0KSArIFwiXFxcIlwiKTsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgICB2YXIgc3R5bGVzID0gXCJcIjtcblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCInLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiAnXFx1MDEzMVxcdTAzMDInLFxuICAnw68nOiAnXFx1MDEzMVxcdTAzMDgnLFxuICAnw60nOiAnXFx1MDEzMVxcdTAzMDEnLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogJ1xcdTAxMzFcXHUwMzAwJ1xufTtcbi8qKlxuICogQSBzeW1ib2wgbm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBzeW1ib2wuIEl0IGVpdGhlciByZW5kZXJzXG4gKiB0byBhIHNpbmdsZSB0ZXh0IG5vZGUsIG9yIGEgc3BhbiB3aXRoIGEgc2luZ2xlIHRleHQgbm9kZSBpbiBpdCwgZGVwZW5kaW5nIG9uXG4gKiB3aGV0aGVyIGl0IGhhcyBDU1MgY2xhc3Nlcywgc3R5bGVzLCBvciBuZWVkcyBpdGFsaWMgY29ycmVjdGlvbi5cbiAqL1xuXG5jbGFzcyBTeW1ib2xOb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCwgaGVpZ2h0LCBkZXB0aCwgaXRhbGljLCBza2V3LCB3aWR0aCwgY2xhc3Nlcywgc3R5bGUpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLml0YWxpYyA9IHZvaWQgMDtcbiAgICB0aGlzLnNrZXcgPSB2b2lkIDA7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcbiAgICB0aGlzLmRlcHRoID0gZGVwdGggfHwgMDtcbiAgICB0aGlzLml0YWxpYyA9IGl0YWxpYyB8fCAwO1xuICAgIHRoaXMuc2tldyA9IHNrZXcgfHwgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gMDsgLy8gTWFyayB0ZXh0IGZyb20gbm9uLUxhdGluIHNjcmlwdHMgd2l0aCBzcGVjaWZpYyBjbGFzc2VzIHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gc3BlY2lmeSB3aGljaCBmb250cyB0byB1c2UuICBUaGlzIGFsbG93cyB1cyB0byByZW5kZXIgdGhlc2VcbiAgICAvLyBjaGFyYWN0ZXJzIHdpdGggYSBzZXJpZiBmb250IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGJyb3dzZXIgd291bGRcbiAgICAvLyBlaXRoZXIgZGVmYXVsdCB0byBhIHNhbnMgc2VyaWYgb3IgcmVuZGVyIGEgcGxhY2Vob2xkZXIgY2hhcmFjdGVyLlxuICAgIC8vIFdlIHVzZSBDU1MgY2xhc3MgbmFtZXMgbGlrZSBjamtfZmFsbGJhY2ssIGhhbmd1bF9mYWxsYmFjayBhbmRcbiAgICAvLyBicmFobWljX2ZhbGxiYWNrLiBTZWUgLi91bmljb2RlU2NyaXB0cy5qcyBmb3IgdGhlIHNldCBvZiBwb3NzaWJsZVxuICAgIC8vIHNjcmlwdCBuYW1lc1xuXG4gICAgdmFyIHNjcmlwdCA9IHNjcmlwdEZyb21Db2RlcG9pbnQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgaWYgKHNjcmlwdCkge1xuICAgICAgdGhpcy5jbGFzc2VzLnB1c2goc2NyaXB0ICsgXCJfZmFsbGJhY2tcIik7XG4gICAgfVxuXG4gICAgaWYgKC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkpIHtcbiAgICAgIC8vIGFkZCDEqyB3aGVuIHdlIGFkZCBFeHRlbmRlZCBMYXRpblxuICAgICAgdGhpcy50ZXh0ID0gaUNvbWJpbmF0aW9uc1t0aGlzLnRleHRdO1xuICAgIH1cbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IG5vZGUgb3Igc3BhbiBmcm9tIGEgc3ltYm9sIG5vZGUuIE5vdGUgdGhhdCBhIHNwYW4gaXMgb25seVxuICAgKiBjcmVhdGVkIGlmIGl0IGlzIG5lZWRlZC5cbiAgICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSBtYWtlRW0odGhpcy5pdGFsaWMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3BhbiA9IHNwYW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBzcGFuLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG5cbiAgICAgICAgc3Bhbi5zdHlsZVtzdHlsZV0gPSB0aGlzLnN0eWxlW3N0eWxlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIHJldHVybiBzcGFuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHN5bWJvbCBub2RlLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIC8vIFRPRE8oYWxwZXJ0KTogTW9yZSBkdXBsaWNhdGlvbiB0aGFuIEknZCBsaWtlIGZyb21cbiAgICAvLyBzcGFuLnByb3RvdHlwZS50b01hcmt1cCBhbmQgc3ltYm9sTm9kZS5wcm90b3R5cGUudG9Ob2RlLi4uXG4gICAgdmFyIG5lZWRzU3BhbiA9IGZhbHNlO1xuICAgIHZhciBtYXJrdXAgPSBcIjxzcGFuXCI7XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuICAgICAgbmVlZHNTcGFuID0gdHJ1ZTtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcz1cXFwiXCI7XG4gICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpO1xuICAgICAgbWFya3VwICs9IFwiXFxcIlwiO1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgaWYgKHRoaXMuaXRhbGljID4gMCkge1xuICAgICAgc3R5bGVzICs9IFwibWFyZ2luLXJpZ2h0OlwiICsgdGhpcy5pdGFsaWMgKyBcImVtO1wiO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIHN0eWxlPVxcXCJcIiArIHV0aWxzLmVzY2FwZShzdHlsZXMpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIGVzY2FwZWQgPSB1dGlscy5lc2NhcGUodGhpcy50ZXh0KTtcblxuICAgIGlmIChuZWVkc1NwYW4pIHtcbiAgICAgIG1hcmt1cCArPSBcIj5cIjtcbiAgICAgIG1hcmt1cCArPSBlc2NhcGVkO1xuICAgICAgbWFya3VwICs9IFwiPC9zcGFuPlwiO1xuICAgICAgcmV0dXJuIG1hcmt1cDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVzY2FwZWQ7XG4gICAgfVxuICB9XG5cbn1cbi8qKlxuICogU1ZHIG5vZGVzIGFyZSB1c2VkIHRvIHJlbmRlciBzdHJldGNoeSB3aWRlIGVsZW1lbnRzLlxuICovXG5cbmNsYXNzIFN2Z05vZGUge1xuICBjb25zdHJ1Y3RvcihjaGlsZHJlbiwgYXR0cmlidXRlcykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJzdmdcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCJcIjsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9zdmc+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuXG59XG5jbGFzcyBQYXRoTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHBhdGhOYW1lLCBhbHRlcm5hdGUpIHtcbiAgICB0aGlzLnBhdGhOYW1lID0gdm9pZCAwO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gdm9pZCAwO1xuICAgIHRoaXMucGF0aE5hbWUgPSBwYXRoTmFtZTtcbiAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTsgLy8gVXNlZCBvbmx5IGZvciBcXHNxcnQsIFxccGhhc2UsICYgdGFsbCBkZWxpbXNcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICB2YXIgc3ZnTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwicGF0aFwiKTtcblxuICAgIGlmICh0aGlzLmFsdGVybmF0ZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIHRoaXMuYWx0ZXJuYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIHBhdGhbdGhpcy5wYXRoTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPVxcXCJcIiArIHV0aWxzLmVzY2FwZSh0aGlzLmFsdGVybmF0ZSkgKyBcIlxcXCIvPlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPVxcXCJcIiArIHV0aWxzLmVzY2FwZShwYXRoW3RoaXMucGF0aE5hbWVdKSArIFwiXFxcIi8+XCI7XG4gICAgfVxuICB9XG5cbn1cbmNsYXNzIExpbmVOb2RlIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJsaW5lXCIpOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8bGluZVwiO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCIvPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cblxufVxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sRG9tTm9kZShncm91cCkge1xuICBpZiAoZ3JvdXAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN5bWJvbE5vZGUgYnV0IGdvdCBcIiArIFN0cmluZyhncm91cCkgKyBcIi5cIik7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFNwYW4oZ3JvdXApIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgU3Bhbikge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZmlsZSBob2xkcyBhIGxpc3Qgb2YgYWxsIG5vLWFyZ3VtZW50IGZ1bmN0aW9ucyBhbmQgc2luZ2xlLWNoYXJhY3RlclxuICogc3ltYm9scyAobGlrZSAnYScgb3IgJzsnKS5cbiAqXG4gKiBGb3IgZWFjaCBvZiB0aGUgc3ltYm9scywgdGhlcmUgYXJlIHRocmVlIHByb3BlcnRpZXMgdGhleSBjYW4gaGF2ZTpcbiAqIC0gZm9udCAocmVxdWlyZWQpOiB0aGUgZm9udCB0byBiZSB1c2VkIGZvciB0aGlzIHN5bWJvbC4gRWl0aGVyIFwibWFpblwiICh0aGVcbiAgICAgbm9ybWFsIGZvbnQpLCBvciBcImFtc1wiICh0aGUgYW1zIGZvbnRzKS5cbiAqIC0gZ3JvdXAgKHJlcXVpcmVkKTogdGhlIFBhcnNlTm9kZSBncm91cCB0eXBlIHRoZSBzeW1ib2wgc2hvdWxkIGhhdmUgKGkuZS5cbiAgICAgXCJ0ZXh0b3JkXCIsIFwibWF0aG9yZFwiLCBldGMpLlxuICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0thVGVYL0thVGVYL3dpa2kvRXhhbWluaW5nLVRlWCNncm91cC10eXBlc1xuICogLSByZXBsYWNlOiB0aGUgY2hhcmFjdGVyIHRoYXQgdGhpcyBzeW1ib2wgb3IgZnVuY3Rpb24gc2hvdWxkIGJlXG4gKiAgIHJlcGxhY2VkIHdpdGggKGkuZS4gXCJcXHBoaVwiIGhhcyBhIHJlcGxhY2UgdmFsdWUgb2YgXCJcXHUwM2Q1XCIsIHRoZSBwaGlcbiAqICAgY2hhcmFjdGVyIGluIHRoZSBtYWluIGZvbnQpLlxuICpcbiAqIFRoZSBvdXRlcm1vc3QgbWFwIGluIHRoZSB0YWJsZSBpbmRpY2F0ZXMgd2hhdCBtb2RlIHRoZSBzeW1ib2xzIHNob3VsZCBiZVxuICogYWNjZXB0ZWQgaW4gKGUuZy4gXCJtYXRoXCIgb3IgXCJ0ZXh0XCIpLlxuICovXG4vLyBTb21lIG9mIHRoZXNlIGhhdmUgYSBcIi10b2tlblwiIHN1ZmZpeCBzaW5jZSB0aGVzZSBhcmUgYWxzbyB1c2VkIGFzIGBQYXJzZU5vZGVgXG4vLyB0eXBlcyBmb3IgcmF3IHRleHQgdG9rZW5zLCBhbmQgd2Ugd2FudCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBoaWdoZXItbGV2ZWxcbi8vIGBQYXJzZU5vZGVgIHR5cGVzLiBUaGVzZSBgUGFyc2VOb2RlYHMgYXJlIGNvbnN0cnVjdGVkIHdpdGhpbiBgUGFyc2VyYCBieVxuLy8gbG9va2luZyB1cCB0aGUgYHN5bWJvbHNgIG1hcC5cbnZhciBBVE9NUyA9IHtcbiAgXCJiaW5cIjogMSxcbiAgXCJjbG9zZVwiOiAxLFxuICBcImlubmVyXCI6IDEsXG4gIFwib3BlblwiOiAxLFxuICBcInB1bmN0XCI6IDEsXG4gIFwicmVsXCI6IDFcbn07XG52YXIgTk9OX0FUT01TID0ge1xuICBcImFjY2VudC10b2tlblwiOiAxLFxuICBcIm1hdGhvcmRcIjogMSxcbiAgXCJvcC10b2tlblwiOiAxLFxuICBcInNwYWNpbmdcIjogMSxcbiAgXCJ0ZXh0b3JkXCI6IDFcbn07XG52YXIgc3ltYm9scyA9IHtcbiAgXCJtYXRoXCI6IHt9LFxuICBcInRleHRcIjoge31cbn07XG4vKiogYGFjY2VwdFVuaWNvZGVDaGFyID0gdHJ1ZWAgaXMgb25seSBhcHBsaWNhYmxlIGlmIGByZXBsYWNlYCBpcyBzZXQuICovXG5cbmZ1bmN0aW9uIGRlZmluZVN5bWJvbChtb2RlLCBmb250LCBncm91cCwgcmVwbGFjZSwgbmFtZSwgYWNjZXB0VW5pY29kZUNoYXIpIHtcbiAgc3ltYm9sc1ttb2RlXVtuYW1lXSA9IHtcbiAgICBmb250LFxuICAgIGdyb3VwLFxuICAgIHJlcGxhY2VcbiAgfTtcblxuICBpZiAoYWNjZXB0VW5pY29kZUNoYXIgJiYgcmVwbGFjZSkge1xuICAgIHN5bWJvbHNbbW9kZV1bcmVwbGFjZV0gPSBzeW1ib2xzW21vZGVdW25hbWVdO1xuICB9XG59IC8vIFNvbWUgYWJicmV2aWF0aW9ucyBmb3IgY29tbW9ubHkgdXNlZCBzdHJpbmdzLlxuLy8gVGhpcyBoZWxwcyBtaW5pZnkgdGhlIGNvZGUsIGFuZCBhbHNvIHNwb3R0aW5nIHR5cG9zIHVzaW5nIGpzaGludC5cbi8vIG1vZGVzOlxuXG52YXIgbWF0aCA9IFwibWF0aFwiO1xudmFyIHRleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbnZhciBtYWluID0gXCJtYWluXCI7XG52YXIgYW1zID0gXCJhbXNcIjsgLy8gZ3JvdXBzOlxuXG52YXIgYWNjZW50ID0gXCJhY2NlbnQtdG9rZW5cIjtcbnZhciBiaW4gPSBcImJpblwiO1xudmFyIGNsb3NlID0gXCJjbG9zZVwiO1xudmFyIGlubmVyID0gXCJpbm5lclwiO1xudmFyIG1hdGhvcmQgPSBcIm1hdGhvcmRcIjtcbnZhciBvcCA9IFwib3AtdG9rZW5cIjtcbnZhciBvcGVuID0gXCJvcGVuXCI7XG52YXIgcHVuY3QgPSBcInB1bmN0XCI7XG52YXIgcmVsID0gXCJyZWxcIjtcbnZhciBzcGFjaW5nID0gXCJzcGFjaW5nXCI7XG52YXIgdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjFcIiwgXCJcXFxcZXF1aXZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyN2FcIiwgXCJcXFxccHJlY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3YlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjNjXCIsIFwiXFxcXHNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhNVwiLCBcIlxcXFxwZXJwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyYWFmXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MmFiMFwiLCBcIlxcXFxzdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNDNcIiwgXCJcXFxcc2ltZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjZhXCIsIFwiXFxcXGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjZiXCIsIFwiXFxcXGdnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjRkXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjI1XCIsIFwiXFxcXHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmM4XCIsIFwiXFxcXGJvd3RpZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MVwiLCBcIlxcXFxzcXN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkyXCIsIFwiXFxcXHNxc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIzMjJcIiwgXCJcXFxcZnJvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMGJcIiwgXCJcXFxcbmlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMWRcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmEyXCIsIFwiXFxcXHZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmEzXCIsIFwiXFxcXGRhc2h2XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBiXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUwMDJlXCIsIFwiXFxcXGxkb3RwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIlxcdTIyYzVcIiwgXCJcXFxcY2RvdHBcIik7IC8vIE1pc2MgU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDIzXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDIzXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDI2XCIsIFwiXFxcXCZcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDI2XCIsIFwiXFxcXCZcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTM1XCIsIFwiXFxcXGFsZXBoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwMFwiLCBcIlxcXFxmb3JhbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTBmXCIsIFwiXFxcXGhiYXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjAzXCIsIFwiXFxcXGV4aXN0c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDdcIiwgXCJcXFxcbmFibGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjZkXCIsIFwiXFxcXGZsYXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTEzXCIsIFwiXFxcXGVsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NmVcIiwgXCJcXFxcbmF0dXJhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjNcIiwgXCJcXFxcY2x1YnN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTE4XCIsIFwiXFxcXHdwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2ZlwiLCBcIlxcXFxzaGFycFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjJcIiwgXCJcXFxcZGlhbW9uZHN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTFjXCIsIFwiXFxcXFJlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2MVwiLCBcIlxcXFxoZWFydHN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTExXCIsIFwiXFxcXEltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2MFwiLCBcIlxcXFxzcGFkZXN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGE3XCIsIFwiXFxcXFNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGE3XCIsIFwiXFxcXFNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGI2XCIsIFwiXFxcXFBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGI2XCIsIFwiXFxcXFBcIik7IC8vIE1hdGggYW5kIFRleHRcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjBcIiwgXCJcXFxcdGV4dGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcdGV4dGRhZ2dlcmRibFwiKTsgLy8gTGFyZ2UgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjNiMVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjNiMFwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTI3ZWZcIiwgXCJcXFxccmdyb3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjdlZVwiLCBcIlxcXFxsZ3JvdXBcIiwgdHJ1ZSk7IC8vIEJpbmFyeSBPcGVyYXRvcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEzXCIsIFwiXFxcXG1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI4ZVwiLCBcIlxcXFx1cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5M1wiLCBcIlxcXFxzcWNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTRcIiwgXCJcXFxcc3FjdXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1ZWZcIiwgXCJcXFxcYmlnY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI0MFwiLCBcIlxcXFx3clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MmEzZlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDAyNlwiLCBcIlxcXFxBbmRcIik7IC8vIGZyb20gYW1zbWF0aFxuLy8gQXJyb3cgU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjVcIiwgXCJcXFxcbG9uZ2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjhcIiwgXCJcXFxcTG9uZ2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmNlwiLCBcIlxcXFxsb25ncmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y5XCIsIFwiXFxcXExvbmdyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk0XCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkNFwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmYVwiLCBcIlxcXFxMb25nbGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2ZjXCIsIFwiXFxcXGxvbmdtYXBzdG9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTdcIiwgXCJcXFxcbmVhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFhOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWFhXCIsIFwiXFxcXGhvb2tyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk4XCIsIFwiXFxcXHNlYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYmNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFjMFwiLCBcIlxcXFxyaWdodGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OVwiLCBcIlxcXFxzd2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWJkXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFjMVwiLCBcIlxcXFxyaWdodGhhcnBvb25kb3duXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk2XCIsIFwiXFxcXG53YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxY2NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNmVcIiwgXCJcXFxcbmxlc3NcIiwgdHJ1ZSk7IC8vIFN5bWJvbCBuYW1lcyBwcmVjZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxMFwiLCBcIlxcXFxAbmxlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMTFcIiwgXCJcXFxcQG5sZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY4XCIsIFwiXFxcXGxuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGNcIiwgXCJcXFxcQGx2ZXJ0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODlcIiwgXCJcXFxcbG5hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4MFwiLCBcIlxcXFxucHJlY1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjJlMCB0byBcXG5wcmVjY3VybHllcS4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU4XCIsIFwiXFxcXHByZWNuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjlcIiwgXCJcXFxccHJlY25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMDZcIiwgXCJcXFxcQG5zaG9ydG1pZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI0XCIsIFwiXFxcXG5taWRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhY1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhZFwiLCBcIlxcXFxudkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlYVwiLCBcIlxcXFxudHJpYW5nbGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGFcIiwgXCJcXFxcc3Vic2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMWFcIiwgXCJcXFxcQHZhcnN1YnNldG5lcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWNiXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxN1wiLCBcIlxcXFxAdmFyc3Vic2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZmXCIsIFwiXFxcXG5ndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGVcIiwgXCJcXFxcQG5nZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODhcIiwgXCJcXFxcZ25lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGRcIiwgXCJcXFxcQGd2ZXJ0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU3XCIsIFwiXFxcXGduc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4MVwiLCBcIlxcXFxuc3VjY1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjJlMSB0byBcXG5zdWNjY3VybHllcS4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTFcIiwgXCJcXFxcbnN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYmFcIiwgXCJcXFxcc3VjY25hcHByb3hcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyNDYgdG8gXFxzaW1uZXFxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0NlwiLCBcIlxcXFxuY29uZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI2XCIsIFwiXFxcXG5wYXJhbGxlbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFmXCIsIFwiXFxcXG5WRGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmViXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWRcIiwgXCJcXFxcbnRyaWFuZ2xlcmlnaHRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE4XCIsIFwiXFxcXEBuc3Vwc2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMWJcIiwgXCJcXFxcQHZhcnN1cHNldG5lcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWNjXCIsIFwiXFxcXHN1cHNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFlXCIsIFwiXFxcXG5WZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI1XCIsIFwiXFxcXHByZWNuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxNlwiLCBcIlxcXFxAbnN1YnNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmI0XCIsIFwiXFxcXHVubGhkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5YVwiLCBcIlxcXFxubGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxOWJcIiwgXCJcXFxcbnJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxY2ZcIiwgXCJcXFxcblJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhZVwiLCBcIlxcXFxubGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyNWIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTBmXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViZFwiLCBcIlxcXFx0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1Y2FcIiwgXCJcXFxcbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjRjOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhZVwiLCBcIlxcXFxjaXJjbGVkUlwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhZVwiLCBcIlxcXFxjaXJjbGVkUlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIyMVwiLCBcIlxcXFxtZWFzdXJlZGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjA0XCIsIFwiXFxcXG5leGlzdHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMjdcIiwgXCJcXFxcbWhvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTMyXCIsIFwiXFxcXEZpbnZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxNDFcIiwgXCJcXFxcR2FtZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjAzNVwiLCBcIlxcXFxiYWNrcHJpbWVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1YjJcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViY1wiLCBcIlxcXFxibGFja3RyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVhMFwiLCBcIlxcXFxibGFja3NxdWFyZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjllYlwiLCBcIlxcXFxibGFja2xvemVuZ2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI2MDVcIiwgXCJcXFxcYmlnc3RhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIyMlwiLCBcIlxcXFxzcGhlcmljYWxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIwMVwiLCBcIlxcXFxjb21wbGVtZW50XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBVK0YwIHRvIFxcbWF0aGV0aC4gV2UgbWFwIHRvIEFNUyBmdW5jdGlvbiBcXGV0aFxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTAwZjBcIiwgXCJcXFxcZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBmMFwiLCBcIlxcdTAwZjBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1NzFcIiwgXCJcXFxcZGlhZ3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNTcyXCIsIFwiXFxcXGRpYWdkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWExXCIsIFwiXFxcXHNxdWFyZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVhMVwiLCBcIlxcXFxCb3hcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1Y2FcIiwgXCJcXFxcRGlhbW9uZFwiKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgVStBNSB0byBcXG1hdGh5ZW4uIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFx5ZW5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGE1XCIsIFwiXFxcXHllblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhNVwiLCBcIlxcXFx5ZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MTNcIiwgXCJcXFxcY2hlY2ttYXJrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUyNzEzXCIsIFwiXFxcXGNoZWNrbWFya1wiKTsgLy8gQU1TIEhlYnJld1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzZcIiwgXCJcXFxcYmV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzOFwiLCBcIlxcXFxkYWxldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzdcIiwgXCJcXFxcZ2ltZWxcIiwgdHJ1ZSk7IC8vIEFNUyBHcmVla1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTAzZGRcIiwgXCJcXFxcZGlnYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDNmMFwiLCBcIlxcXFx2YXJrYXBwYVwiKTsgLy8gQU1TIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgb3BlbiwgXCJcXHUyNTBjXCIsIFwiXFxcXEB1bGNvcm5lclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGNsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcQHVyY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgb3BlbiwgXCJcXHUyNTE0XCIsIFwiXFxcXEBsbGNvcm5lclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGNsb3NlLCBcIlxcdTI1MThcIiwgXCJcXFxcQGxyY29ybmVyXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IFJlbGF0aW9uc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2NlwiLCBcIlxcXFxsZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhN2RcIiwgXCJcXFxcbGVxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE5NVwiLCBcIlxcXFxlcXNsYW50bGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjcyXCIsIFwiXFxcXGxlc3NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4NVwiLCBcIlxcXFxsZXNzYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNGFcIiwgXCJcXFxcYXBwcm94ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkNlwiLCBcIlxcXFxsZXNzZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDhcIiwgXCJcXFxcbGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzZcIiwgXCJcXFxcbGVzc2d0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRhXCIsIFwiXFxcXGxlc3NlcWd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYThiXCIsIFwiXFxcXGxlc3NlcXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1MVwiLCBcIlxcXFxkb3RlcWRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUzXCIsIFwiXFxcXHJpc2luZ2RvdHNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUyXCIsIFwiXFxcXGZhbGxpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzZFwiLCBcIlxcXFxiYWNrc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyY2RcIiwgXCJcXFxcYmFja3NpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYzVcIiwgXCJcXFxcc3Vic2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDBcIiwgXCJcXFxcU3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGZcIiwgXCJcXFxcc3FzdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3Y1wiLCBcIlxcXFxwcmVjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRlXCIsIFwiXFxcXGN1cmx5ZXFwcmVjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyN2VcIiwgXCJcXFxccHJlY3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI3XCIsIFwiXFxcXHByZWNhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiMlwiLCBcIlxcXFx2YXJ0cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiNFwiLCBcIlxcXFx0cmlhbmdsZWxlZnRlcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmE4XCIsIFwiXFxcXHZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYWFcIiwgXCJcXFxcVnZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIzMjNcIiwgXCJcXFxcc21hbGxzbWlsZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXHNtYWxsZnJvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0ZlwiLCBcIlxcXFxidW1wZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0ZVwiLCBcIlxcXFxCdW1wZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2N1wiLCBcIlxcXFxnZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhN2VcIiwgXCJcXFxcZ2Vxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE5NlwiLCBcIlxcXFxlcXNsYW50Z3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzNcIiwgXCJcXFxcZ3Ryc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODZcIiwgXCJcXFxcZ3RyYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDdcIiwgXCJcXFxcZ3RyZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDlcIiwgXCJcXFxcZ2dnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzdcIiwgXCJcXFxcZ3RybGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRiXCIsIFwiXFxcXGd0cmVxbGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYThjXCIsIFwiXFxcXGd0cmVxcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1NlwiLCBcIlxcXFxlcWNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1N1wiLCBcIlxcXFxjaXJjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1Y1wiLCBcIlxcXFx0cmlhbmdsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzY1wiLCBcIlxcXFx0aGlja3NpbVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXHRoaWNrYXBwcm94XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYzZcIiwgXCJcXFxcc3Vwc2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDFcIiwgXCJcXFxcU3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOTBcIiwgXCJcXFxcc3FzdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3ZFwiLCBcIlxcXFxzdWNjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRmXCIsIFwiXFxcXGN1cmx5ZXFzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyN2ZcIiwgXCJcXFxcc3VjY3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI4XCIsIFwiXFxcXHN1Y2NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiM1wiLCBcIlxcXFx2YXJ0cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYjVcIiwgXCJcXFxcdHJpYW5nbGVyaWdodGVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYTlcIiwgXCJcXFxcVmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyM1wiLCBcIlxcXFxzaG9ydG1pZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI1XCIsIFwiXFxcXHNob3J0cGFyYWxsZWxcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2Y1wiLCBcIlxcXFxiZXR3ZWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDRcIiwgXCJcXFxccGl0Y2hmb3JrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMWRcIiwgXCJcXFxcdmFycHJvcHRvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTI1YzBcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZWxlZnRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFx0aGVyZWZvcmUgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzNFwiLCBcIlxcXFx0aGVyZWZvcmVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIwZFwiLCBcIlxcXFxiYWNrZXBzaWxvblwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyNWI2XCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVyaWdodFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXGJlY2F1c2UgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzNVwiLCBcIlxcXFxiZWNhdXNlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDhcIiwgXCJcXFxcbGxsZXNzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDlcIiwgXCJcXFxcZ2dndHJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiMlwiLCBcIlxcXFxsaGRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiM1wiLCBcIlxcXFxyaGRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MlwiLCBcIlxcXFxlcXNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJjOFwiLCBcIlxcXFxKb2luXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTFcIiwgXCJcXFxcRG90ZXFcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgT3BlcmF0b3JzXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE0XCIsIFwiXFxcXGRvdHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjIxNlwiLCBcIlxcXFxzbWFsbHNldG1pbnVzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDJcIiwgXCJcXFxcQ2FwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDNcIiwgXCJcXFxcQ3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTJhNWVcIiwgXCJcXFxcZG91YmxlYmFyd2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjI5ZlwiLCBcIlxcXFxib3htaW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjllXCIsIFwiXFxcXGJveHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjN1wiLCBcIlxcXFxkaXZpZGVvbnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYzlcIiwgXCJcXFxcbHRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2FcIiwgXCJcXFxccnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2JcIiwgXCJcXFxcbGVmdHRocmVldGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjY1wiLCBcIlxcXFxyaWdodHRocmVldGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjZlwiLCBcIlxcXFxjdXJseXdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2VcIiwgXCJcXFxcY3VybHl2ZWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjI5ZFwiLCBcIlxcXFxjaXJjbGVkZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjliXCIsIFwiXFxcXGNpcmNsZWRhc3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjNVwiLCBcIlxcXFxjZW50ZXJkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiYVwiLCBcIlxcXFxpbnRlcmNhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQyXCIsIFwiXFxcXGRvdWJsZWNhcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQzXCIsIFwiXFxcXGRvdWJsZWN1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmEwXCIsIFwiXFxcXGJveHRpbWVzXCIsIHRydWUpOyAvLyBBTVMgQXJyb3dzXG4vLyBOb3RlOiB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWUyIHRvIHRoZWlyIG93biBmdW5jdGlvbiBcXHJpZ2h0ZGFzaGFycm93LlxuLy8gV2UnbGwgbWFwIGl0IHRvIEFNUyBmdW5jdGlvbiBcXGRhc2hyaWdodGFycm93LiBJdCBwcm9kdWNlcyB0aGUgc2FtZSBhdG9tLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFlMlwiLCBcIlxcXFxkYXNocmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMCB0byBcXGxlZnRkYXNoYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWUwXCIsIFwiXFxcXGRhc2hsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjN1wiLCBcIlxcXFxsZWZ0bGVmdGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM2XCIsIFwiXFxcXGxlZnRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRhXCIsIFwiXFxcXExsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5ZVwiLCBcIlxcXFx0d29oZWFkbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYTJcIiwgXCJcXFxcbGVmdGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFiXCIsIFwiXFxcXGxvb3BhcnJvd2xlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjYlwiLCBcIlxcXFxsZWZ0cmlnaHRoYXJwb29uc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWI2XCIsIFwiXFxcXGN1cnZlYXJyb3dsZWZ0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJhIHRvIFxcYWN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiYVwiLCBcIlxcXFxjaXJjbGVhcnJvd2xlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiMFwiLCBcIlxcXFxMc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjOFwiLCBcIlxcXFx1cHVwYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmZcIiwgXCJcXFxcdXBoYXJwb29ubGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWMzXCIsIFwiXFxcXGRvd25oYXJwb29ubGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJiNlwiLCBcIlxcXFxvcmlnb2ZcIiwgdHJ1ZSk7IC8vIG5vdCBpbiBmb250XG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJiN1wiLCBcIlxcXFxpbWFnZW9mXCIsIHRydWUpOyAvLyBub3QgaW4gZm9udFxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiOFwiLCBcIlxcXFxtdWx0aW1hcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFkXCIsIFwiXFxcXGxlZnRyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjOVwiLCBcIlxcXFxyaWdodHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzRcIiwgXCJcXFxccmlnaHRsZWZ0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYTBcIiwgXCJcXFxcdHdvaGVhZHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhM1wiLCBcIlxcXFxyaWdodGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFjXCIsIFwiXFxcXGxvb3BhcnJvd3JpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYjdcIiwgXCJcXFxcY3VydmVhcnJvd3JpZ2h0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJiIHRvIFxcY3dvcGVuY2lyY2xlYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJiXCIsIFwiXFxcXGNpcmNsZWFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiMVwiLCBcIlxcXFxSc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjYVwiLCBcIlxcXFxkb3duZG93bmFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJlXCIsIFwiXFxcXHVwaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzJcIiwgXCJcXFxcZG93bmhhcnBvb25yaWdodFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRkXCIsIFwiXFxcXHJpZ2h0c3F1aWdhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRkXCIsIFwiXFxcXGxlYWRzdG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFkYlwiLCBcIlxcXFxScmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJlXCIsIFwiXFxcXHJlc3RyaWN0aW9uXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOFwiLCBcImBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXHRleHRkb2xsYXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXHRleHR1bmRlcnNjb3JlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyMFwiLCBcIlxcXFxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMWVcIiwgXCJcXFxcaW5mdHlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDMyXCIsIFwiXFxcXHByaW1lXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjViM1wiLCBcIlxcXFx0cmlhbmdsZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOTNcIiwgXCJcXFxcR2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzk0XCIsIFwiXFxcXERlbHRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5OFwiLCBcIlxcXFxUaGV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOWJcIiwgXCJcXFxcTGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5ZVwiLCBcIlxcXFxYaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTBcIiwgXCJcXFxcUGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2EzXCIsIFwiXFxcXFNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhNVwiLCBcIlxcXFxVcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhNlwiLCBcIlxcXFxQaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E4XCIsIFwiXFxcXFBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTlcIiwgXCJcXFxcT21lZ2FcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJBXCIsIFwiXFx1MDM5MVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkJcIiwgXCJcXHUwMzkyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiRVwiLCBcIlxcdTAzOTVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJaXCIsIFwiXFx1MDM5NlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUwMzk3XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiSVwiLCBcIlxcdTAzOTlcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJLXCIsIFwiXFx1MDM5QVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIk1cIiwgXCJcXHUwMzlDXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiTlwiLCBcIlxcdTAzOURcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJPXCIsIFwiXFx1MDM5RlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlBcIiwgXCJcXHUwM0ExXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiVFwiLCBcIlxcdTAzQTRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJYXCIsIFwiXFx1MDNBN1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYWNcIiwgXCJcXFxcbmVnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhY1wiLCBcIlxcXFxsbm90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjJhNFwiLCBcIlxcXFx0b3BcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmE1XCIsIFwiXFxcXGJvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcdmFybm90aGluZ1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjFcIiwgXCJcXFxcYWxwaGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2IyXCIsIFwiXFxcXGJldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2IzXCIsIFwiXFxcXGdhbW1hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiNFwiLCBcIlxcXFxkZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZjVcIiwgXCJcXFxcZXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjZcIiwgXCJcXFxcemV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjdcIiwgXCJcXFxcZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiOFwiLCBcIlxcXFx0aGV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjlcIiwgXCJcXFxcaW90YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmFcIiwgXCJcXFxca2FwcGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JiXCIsIFwiXFxcXGxhbWJkYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmNcIiwgXCJcXFxcbXVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JkXCIsIFwiXFxcXG51XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiZVwiLCBcIlxcXFx4aVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmZcIiwgXCJcXFxcb21pY3JvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzBcIiwgXCJcXFxccGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2MxXCIsIFwiXFxcXHJob1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzNcIiwgXCJcXFxcc2lnbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M0XCIsIFwiXFxcXHRhdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzVcIiwgXCJcXFxcdXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZDVcIiwgXCJcXFxccGhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjN1wiLCBcIlxcXFxjaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M4XCIsIFwiXFxcXHBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzlcIiwgXCJcXFxcb21lZ2FcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I1XCIsIFwiXFxcXHZhcmVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2QxXCIsIFwiXFxcXHZhcnRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNkNlwiLCBcIlxcXFx2YXJwaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZjFcIiwgXCJcXFxcdmFycmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjMlwiLCBcIlxcXFx2YXJzaWdtYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzZcIiwgXCJcXFxcdmFycGhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE3XCIsIFwiKlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiK1wiLCBcIitcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTJcIiwgXCItXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM1XCIsIFwiXFxcXGNkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMThcIiwgXCJcXFxcY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBmN1wiLCBcIlxcXFxkaXZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTAwYjFcIiwgXCJcXFxccG1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTAwZDdcIiwgXCJcXFxcdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjlcIiwgXCJcXFxcY2FwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjJhXCIsIFwiXFxcXGN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxNlwiLCBcIlxcXFxzZXRtaW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyN1wiLCBcIlxcXFxsYW5kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXGxvclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyN1wiLCBcIlxcXFx3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyOFwiLCBcIlxcXFx2ZWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjFhXCIsIFwiXFxcXHN1cmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyN2U4XCIsIFwiXFxcXGxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIyMjNcIiwgXCJcXFxcbHZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyMjI1XCIsIFwiXFxcXGxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIj9cIiwgXCI/XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTI3ZTlcIiwgXCJcXFxccmFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTIyMjNcIiwgXCJcXFxccnZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiPVwiLCBcIj1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIjpcIiwgXCI6XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI0NVwiLCBcIlxcXFxjb25nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MFwiLCBcIlxcXFxnZXRzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiXFxcXGd0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHVlMDIwXCIsIFwiXFxcXEBub3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODJcIiwgXCJcXFxcc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4NlwiLCBcIlxcXFxzdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4N1wiLCBcIlxcXFxzdXBzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg5XCIsIFwiXFxcXG5zdXBzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhOFwiLCBcIlxcXFxtb2RlbHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY0XCIsIFwiXFxcXGxlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY0XCIsIFwiXFxcXGxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFxyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHRvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjcwXCIsIFwiXFxcXG5sZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXHNwYWNlXCIpOyAvLyBSZWY6IExhVGVYIFNvdXJjZSAyZTogXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXG5vYnJlYWtzcGFjZX17JVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcIFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCIgXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcbm9icmVha3NwYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHNwYWNpbmcsIG51bGwsIFwiXFxcXG5vYnJlYWtcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgbnVsbCwgXCJcXFxcYWxsb3dicmVha1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCIsXCIsIFwiLFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCI7XCIsIFwiO1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmJjXCIsIFwiXFxcXGJhcndlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYmJcIiwgXCJcXFxcdmVlYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk5XCIsIFwiXFxcXG9kb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTVcIiwgXCJcXFxcb3BsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTdcIiwgXCJcXFxcb3RpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwMlwiLCBcIlxcXFxwYXJ0aWFsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk4XCIsIFwiXFxcXG9zbGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlhXCIsIFwiXFxcXGNpcmNsZWRjaXJjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYTFcIiwgXCJcXFxcYm94ZG90XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyNWIzXCIsIFwiXFxcXGJpZ3RyaWFuZ2xldXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YmRcIiwgXCJcXFxcYmlndHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjJjNFwiLCBcIlxcXFxkaWFtb25kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM2XCIsIFwiXFxcXHN0YXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YzNcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyNWI5XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJ7XCIsIFwiXFxcXHtcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHtcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHRleHRicmFjZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwifVwiLCBcIlxcXFx9XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwifVwiLCBcIlxcXFx9XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwifVwiLCBcIlxcXFx0ZXh0YnJhY2VyaWdodFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIntcIiwgXCJcXFxcbGJyYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIn1cIiwgXCJcXFxccmJyYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiKFwiLCBcIlxcXFxscGFyZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCI8XCIsIFwiXFxcXHRleHRsZXNzXCIsIHRydWUpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIj5cIiwgXCJcXFxcdGV4dGdyZWF0ZXJcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjMwYVwiLCBcIlxcXFxsZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjMwYlwiLCBcIlxcXFxyZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyMzA4XCIsIFwiXFxcXGxjZWlsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTIzMDlcIiwgXCJcXFxccmNlaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjNcIiwgXCJ8XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyM1wiLCBcIlxcXFx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwifFwiLCBcIlxcXFx0ZXh0YmFyXCIsIHRydWUpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcfFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcVmVydFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcdGV4dGJhcmRibFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIn5cIiwgXCJcXFxcdGV4dGFzY2lpdGlsZGVcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXHRleHRiYWNrc2xhc2hcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJeXCIsIFwiXFxcXHRleHRhc2NpaWNpcmN1bVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MVwiLCBcIlxcXFx1cGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWQxXCIsIFwiXFxcXFVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTNcIiwgXCJcXFxcZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWQzXCIsIFwiXFxcXERvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NVwiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkNVwiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjEwXCIsIFwiXFxcXGNvcHJvZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMxXCIsIFwiXFxcXGJpZ3ZlZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMwXCIsIFwiXFxcXGJpZ3dlZGdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDRcIiwgXCJcXFxcYmlndXBsdXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJjMlwiLCBcIlxcXFxiaWdjYXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJjM1wiLCBcIlxcXFxiaWdjdXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyYlwiLCBcIlxcXFxpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyYlwiLCBcIlxcXFxpbnRvcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJjXCIsIFwiXFxcXGlpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyZFwiLCBcIlxcXFxpaWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjBmXCIsIFwiXFxcXHByb2RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMVwiLCBcIlxcXFxzdW1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwMlwiLCBcIlxcXFxiaWdvdGltZXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwMVwiLCBcIlxcXFxiaWdvcGx1c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTAwXCIsIFwiXFxcXGJpZ29kb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyZVwiLCBcIlxcXFxvaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmZcIiwgXCJcXFxcb2lpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIzMFwiLCBcIlxcXFxvaWlpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwNlwiLCBcIlxcXFxiaWdzcWN1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJiXCIsIFwiXFxcXHNtYWxsaW50XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcdGV4dGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbGRvdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxsZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMmVmXCIsIFwiXFxcXEBjZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMmYxXCIsIFwiXFxcXGRkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjJlZVwiLCBcIlxcXFx2YXJ2ZG90c1wiKTsgLy8gXFx2ZG90cyBpcyBhIG1hY3JvXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYVwiLCBcIlxcXFxhY3V0ZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYlwiLCBcIlxcXFxncmF2ZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDBhOFwiLCBcIlxcXFxkZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMDdlXCIsIFwiXFxcXHRpbGRlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM5XCIsIFwiXFxcXGJhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkOFwiLCBcIlxcXFxicmV2ZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjN1wiLCBcIlxcXFxjaGVja1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDA1ZVwiLCBcIlxcXFxoYXRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTIwZDdcIiwgXCJcXFxcdmVjXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ5XCIsIFwiXFxcXGRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkYVwiLCBcIlxcXFxtYXRocmluZ1wiKTsgLy8gXFxpbWF0aCBhbmQgXFxqbWF0aCBzaG91bGQgYmUgaW52YXJpYW50IHRvIFxcbWF0aHJtLCBcXG1hdGhiZiwgZXRjLiwgc28gdXNlIFBVQVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHVlMTMxXCIsIFwiXFxcXEBpbWF0aFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdWUyMzdcIiwgXCJcXFxcQGptYXRoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDEzMVwiLCBcIlxcdTAxMzFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMjM3XCIsIFwiXFx1MDIzN1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAxMzFcIiwgXCJcXFxcaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAyMzdcIiwgXCJcXFxcalwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZGZcIiwgXCJcXFxcc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGU2XCIsIFwiXFxcXGFlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZjhcIiwgXCJcXFxcb1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYzZcIiwgXCJcXFxcQUVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTUyXCIsIFwiXFxcXE9FXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBkOFwiLCBcIlxcXFxPXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNhXCIsIFwiXFxcXCdcIik7IC8vIGFjdXRlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzZcIiwgXCJcXFxcXlwiKTsgLy8gY2lyY3VtZmxleFxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZGNcIiwgXCJcXFxcflwiKTsgLy8gdGlsZGVcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDhcIiwgXCJcXFxcdVwiKTsgLy8gYnJldmVcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ5XCIsIFwiXFxcXC5cIik7IC8vIGRvdCBhYm92ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwYjhcIiwgXCJcXFxcY1wiKTsgLy8gY2VkaWxsYVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZGFcIiwgXCJcXFxcclwiKTsgLy8gcmluZyBhYm92ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzdcIiwgXCJcXFxcdlwiKTsgLy8gY2Fyb25cblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMGE4XCIsICdcXFxcXCInKTsgLy8gZGlhcmVzaXNcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRkXCIsIFwiXFxcXEhcIik7IC8vIGRvdWJsZSBhY3V0ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTI1ZWZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIik7IC8vIFxcYmlnY2lyYyBnbHlwaFxuLy8gVGhlc2UgbGlnYXR1cmVzIGFyZSBkZXRlY3RlZCBhbmQgY3JlYXRlZCBpbiBQYXJzZXIuanMncyBgZm9ybUxpZ2F0dXJlc2AuXG5cbnZhciBsaWdhdHVyZXMgPSB7XG4gIFwiLS1cIjogdHJ1ZSxcbiAgXCItLS1cIjogdHJ1ZSxcbiAgXCJgYFwiOiB0cnVlLFxuICBcIicnXCI6IHRydWVcbn07XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiXFxcXHRleHRlbmRhc2hcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE0XCIsIFwiLS0tXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOFwiLCBcImBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiXFxcXHRleHRxdW90ZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTlcIiwgXCJcXFxcdGV4dHF1b3RlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFjXCIsIFwiYGBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFjXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFkXCIsIFwiJydcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFkXCIsIFwiXFxcXHRleHRxdW90ZWRibHJpZ2h0XCIpOyAvLyAgXFxkZWdyZWUgZnJvbSBnZW5zeW1iIHBhY2thZ2VcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBiMFwiLCBcIlxcXFxkZWdyZWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXHRleHRkZWdyZWVcIiwgdHJ1ZSk7IC8vIFRPRE86IEluIExhVGVYLCBcXHBvdW5kcyBjYW4gZ2VuZXJhdGUgYSBkaWZmZXJlbnQgY2hhcmFjdGVyIGluIHRleHQgYW5kIG1hdGhcbi8vIG1vZGUsIGJ1dCBhbW9uZyBvdXIgZm9udHMsIG9ubHkgTWFpbi1SZWd1bGFyIGRlZmluZXMgdGhpcyBjaGFyYWN0ZXIgXCIxNjNcIi5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFxwb3VuZHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXG1hdGhzdGVybGluZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYTNcIiwgXCJcXFxccG91bmRzXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFx0ZXh0c3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MjBcIiwgXCJcXFxcbWFsdGVzZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpOyAvLyBUaGVyZSBhcmUgbG90cyBvZiBzeW1ib2xzIHdoaWNoIGFyZSB0aGUgc2FtZSwgc28gd2UgYWRkIHRoZW0gaW4gYWZ0ZXJ3YXJkcy5cbi8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gbWF0aCBtb2RlXG5cbnZhciBtYXRoVGV4dFN5bWJvbHMgPSBcIjAxMjM0NTY3ODkvQC5cXFwiXCI7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgbWF0aFRleHRTeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBjaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoaSk7XG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBjaCwgY2gpO1xufSAvLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIHRleHQgbW9kZVxuXG5cbnZhciB0ZXh0U3ltYm9scyA9IFwiMDEyMzQ1Njc4OSFAKigpLT0rXFxcIjs6Py8uLFwiO1xuXG5mb3IgKHZhciBfaSA9IDA7IF9pIDwgdGV4dFN5bWJvbHMubGVuZ3RoOyBfaSsrKSB7XG4gIHZhciBfY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoX2kpO1xuXG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gsIF9jaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxudmFyIGxldHRlcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbGV0dGVycy5sZW5ndGg7IF9pMisrKSB7XG4gIHZhciBfY2gyID0gbGV0dGVycy5jaGFyQXQoX2kyKTtcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMiwgX2NoMik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gyLCBfY2gyKTtcbn0gLy8gQmxhY2tib2FyZCBib2xkIGFuZCBzY3JpcHQgbGV0dGVycyBpbiBVbmljb2RlIHJhbmdlXG5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJDXCIsIFwiXFx1MjEwMlwiKTsgLy8gYmxhY2tib2FyZCBib2xkXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJIXCIsIFwiXFx1MjEwRFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIk5cIiwgXCJcXHUyMTE1XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJQXCIsIFwiXFx1MjExOVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJRXCIsIFwiXFx1MjExQVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlJcIiwgXCJcXHUyMTFEXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJaXCIsIFwiXFx1MjEyNFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJoXCIsIFwiXFx1MjEwRVwiKTsgLy8gaXRhbGljIGgsIFBsYW5jayBjb25zdGFudFxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgbWF0aG9yZCwgXCJoXCIsIFwiXFx1MjEwRVwiKTsgLy8gVGhlIG5leHQgbG9vcCBsb2FkcyB3aWRlIChzdXJyb2dhdGUgcGFpcikgY2hhcmFjdGVycy5cbi8vIFdlIHN1cHBvcnQgc29tZSBsZXR0ZXJzIGluIHRoZSBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbi8vIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbi8vIFNvbWUgZWRpdG9ycyBkbyBub3QgZGVhbCB3ZWxsIHdpdGggd2lkZSBjaGFyYWN0ZXJzLiBTbyBkb24ndCB3cml0ZSB0aGVcbi8vIHN0cmluZyBpbnRvIHRoaXMgZmlsZS4gSW5zdGVhZCwgY3JlYXRlIHRoZSBzdHJpbmcgZnJvbSB0aGUgc3Vycm9nYXRlIHBhaXIuXG5cbnZhciB3aWRlQ2hhciA9IFwiXCI7XG5cbmZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGxldHRlcnMubGVuZ3RoOyBfaTMrKykge1xuICB2YXIgX2NoMyA9IGxldHRlcnMuY2hhckF0KF9pMyk7IC8vIFRoZSBoZXggbnVtYmVycyBpbiB0aGUgbmV4dCBsaW5lIGFyZSBhIHN1cnJvZ2F0ZSBwYWlyLlxuICAvLyAweEQ4MzUgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIGZvciBhbGwgbGV0dGVycyBpbiB0aGUgcmFuZ2Ugd2Ugc3VwcG9ydC5cbiAgLy8gMHhEQzAwIGlzIHRoZSBsb3cgc3Vycm9nYXRlIGZvciBib2xkIEEuXG5cblxuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMDAgKyBfaTMpOyAvLyBBLVogYS16IGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMzQgKyBfaTMpOyAvLyBBLVogYS16IGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REM2OCArIF9pMyk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMDQgKyBfaTMpOyAvLyBBLVogYS16IEZyYWt0dXJcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERENkMgKyBfaTMpOyAvLyBBLVogYS16IGJvbGQgRnJha3R1clxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERBMCArIF9pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIF9pMyk7IC8vIEEtWiBhLXogc2FucyBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTA4ICsgX2kzKTsgLy8gQS1aIGEteiBzYW5zIGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REU3MCArIF9pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcblxuICBpZiAoX2kzIDwgMjYpIHtcbiAgICAvLyBLYVRlWCBmb250cyBoYXZlIG9ubHkgY2FwaXRhbCBsZXR0ZXJzIGZvciBibGFja2JvYXJkIGJvbGQgYW5kIHNjcmlwdC5cbiAgICAvLyBTZWUgZXhjZXB0aW9uIGZvciBrIGJlbG93LlxuICAgIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REQzOCArIF9pMyk7IC8vIEEtWiBkb3VibGUgc3RydWNrXG5cbiAgICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gICAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzlDICsgX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB9IC8vIFRPRE86IEFkZCBib2xkIHNjcmlwdCB3aGVuIGl0IGlzIHN1cHBvcnRlZCBieSBhIEthVGVYIGZvbnQuXG5cbn0gLy8gXCJrXCIgaXMgdGhlIG9ubHkgZG91YmxlIHN0cnVjayBsb3dlciBjYXNlIGxldHRlciBpbiB0aGUgS2FUZVggZm9udHMuXG5cblxud2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImtcIiwgd2lkZUNoYXIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwia1wiLCB3aWRlQ2hhcik7IC8vIE5leHQsIHNvbWUgd2lkZSBjaGFyYWN0ZXIgbnVtZXJhbHNcblxuZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgMTA7IF9pNCsrKSB7XG4gIHZhciBfY2g0ID0gX2k0LnRvU3RyaW5nKCk7XG5cbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkNFICsgX2k0KTsgLy8gMC05IGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRTIgKyBfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIF9pNCk7IC8vIDAtOSBib2xkIHNhbnNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRjYgKyBfaTQpOyAvLyAwLTkgbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiXFx1MDBkMFxcdTAwZGVcXHUwMGZlXCI7XG5cbmZvciAodmFyIF9pNSA9IDA7IF9pNSA8IGV4dHJhTGF0aW4ubGVuZ3RoOyBfaTUrKykge1xuICB2YXIgX2NoNSA9IGV4dHJhTGF0aW4uY2hhckF0KF9pNSk7XG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNSwgX2NoNSk7XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuICogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuICpcbiAqIEZ1bmN0aW9uIHdpZGVDaGFyYWN0ZXJGb250IHRha2VzIGEgd2lkZSBjaGFyYWN0ZXIgYXMgaW5wdXQgYW5kIHJldHVybnNcbiAqIHRoZSBmb250IGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byByZW5kZXIgaXQgcHJvcGVybHkuXG4gKi9cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRobm9ybWFsXCIsIFwidGV4dGl0XCIsIFwiTWF0aC1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWNcbltcIm1hdGhub3JtYWxcIiwgXCJ0ZXh0aXRcIiwgXCJNYXRoLUl0YWxpY1wiXSwgLy8gYS16IGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIEEtWiBib2xkIGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIGEteiBib2xkIGl0YWxpY1xuLy8gTWFwIGZhbmN5IEEtWiBsZXR0ZXJzIHRvIHNjcmlwdCwgbm90IGNhbGxpZ3JhcGhpYy5cbi8vIFRoaXMgYWxpZ25zIHdpdGggdW5pY29kZS1tYXRoIGFuZCBtYXRoIGZvbnRzIChleGNlcHQgQ2FtYnJpYSBNYXRoKS5cbltcIm1hdGhzY3JcIiwgXCJ0ZXh0c2NyXCIsIFwiU2NyaXB0LVJlZ3VsYXJcIl0sIC8vIEEtWiBzY3JpcHRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IHNjcmlwdC4gIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIGEteiBib2xkIHNjcmlwdC4gTm8gZm9udFxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gQS1aIEZyYWt0dXJcbltcIm1hdGhmcmFrXCIsIFwidGV4dGZyYWtcIiwgXCJGcmFrdHVyLVJlZ3VsYXJcIl0sIC8vIGEteiBGcmFrdHVyXG5bXCJtYXRoYmJcIiwgXCJ0ZXh0YmJcIiwgXCJBTVMtUmVndWxhclwiXSwgLy8gQS1aIGRvdWJsZS1zdHJ1Y2tcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBrIGRvdWJsZS1zdHJ1Y2tcbi8vIE5vdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSBib2xkIGZvbnQsIGJ1dCBmb250IG1ldHJpY3MgZm9yIHJlZ3VsYXIgRnJha3R1ci5cbltcIm1hdGhib2xkZnJha1wiLCBcInRleHRib2xkZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gQS1aIGJvbGQgRnJha3R1clxuW1wibWF0aGJvbGRmcmFrXCIsIFwidGV4dGJvbGRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBhLXogYm9sZCBGcmFrdHVyXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gQS1aIHNhbnMtc2VyaWZcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBhLXogc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gQS1aIGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gYS16IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIGEteiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdLCAvLyBBLVogbW9ub3NwYWNlXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl0gLy8gYS16IG1vbm9zcGFjZVxuXTtcbnZhciB3aWRlTnVtZXJhbERhdGEgPSBbW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyAwLTkgYm9sZFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyAwLTkgZG91YmxlLXN0cnVjay4gTm8gS2FUZVggZm9udC5cbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyAwLTkgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gMC05IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdIC8vIDAtOSBtb25vc3BhY2Vcbl07XG52YXIgd2lkZUNoYXJhY3RlckZvbnQgPSBmdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCh3aWRlQ2hhciwgbW9kZSkge1xuICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgY29kZVBvaW50QXQoKS4gU28gd29yayB3aXRoIHRoZSBzdXJyb2dhdGUgcGFpci5cbiAgdmFyIEggPSB3aWRlQ2hhci5jaGFyQ29kZUF0KDApOyAvLyBoaWdoIHN1cnJvZ2F0ZVxuXG4gIHZhciBMID0gd2lkZUNoYXIuY2hhckNvZGVBdCgxKTsgLy8gbG93IHN1cnJvZ2F0ZVxuXG4gIHZhciBjb2RlUG9pbnQgPSAoSCAtIDB4RDgwMCkgKiAweDQwMCArIChMIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIHZhciBqID0gbW9kZSA9PT0gXCJtYXRoXCIgPyAwIDogMTsgLy8gY29sdW1uIGluZGV4IGZvciBDU1MgY2xhc3MuXG5cbiAgaWYgKDB4MUQ0MDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ2QTQpIHtcbiAgICAvLyB3aWRlTGF0aW5MZXR0ZXJEYXRhIGNvbnRhaW5zIGV4YWN0bHkgMjYgY2hhcnMgb24gZWFjaCByb3cuXG4gICAgLy8gU28gd2UgY2FuIGNhbGN1bGF0ZSB0aGUgcmVsZXZhbnQgcm93LiBObyB0cmF2ZXJzZSBuZWNlc3NhcnkuXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFENDAwKSAvIDI2KTtcbiAgICByZXR1cm4gW3dpZGVMYXRpbkxldHRlckRhdGFbaV1bMl0sIHdpZGVMYXRpbkxldHRlckRhdGFbaV1bal1dO1xuICB9IGVsc2UgaWYgKDB4MUQ3Q0UgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFEN0ZGKSB7XG4gICAgLy8gTnVtZXJhbHMsIHRlbiBwZXIgcm93LlxuICAgIHZhciBfaSA9IE1hdGguZmxvb3IoKGNvZGVQb2ludCAtIDB4MUQ3Q0UpIC8gMTApO1xuXG4gICAgcmV0dXJuIFt3aWRlTnVtZXJhbERhdGFbX2ldWzJdLCB3aWRlTnVtZXJhbERhdGFbX2ldW2pdXTtcbiAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPT09IDB4MUQ2QTUgfHwgY29kZVBvaW50ID09PSAweDFENkE2KSB7XG4gICAgLy8gZG90bGVzcyBpIG9yIGpcbiAgICByZXR1cm4gW3dpZGVMYXRpbkxldHRlckRhdGFbMF1bMl0sIHdpZGVMYXRpbkxldHRlckRhdGFbMF1bal1dO1xuICB9IGVsc2UgaWYgKDB4MUQ2QTYgPCBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDwgMHgxRDdDRSkge1xuICAgIC8vIEdyZWVrIGxldHRlcnMuIE5vdCBzdXBwb3J0ZWQsIHlldC5cbiAgICByZXR1cm4gW1wiXCIsIFwiXCJdO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW55IHdpZGUgY2hhcmFjdGVycyBvdXRzaWRlIDFENDAw4oCTMUQ3RkYuXG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6IFwiICsgd2lkZUNoYXIpO1xuICB9XG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogTG9va3MgdXAgdGhlIGdpdmVuIHN5bWJvbCBpbiBmb250TWV0cmljcywgYWZ0ZXIgYXBwbHlpbmcgYW55IHN5bWJvbFxuICogcmVwbGFjZW1lbnRzIGRlZmluZWQgaW4gc3ltYm9sLmpzXG4gKi9cbnZhciBsb29rdXBTeW1ib2wgPSBmdW5jdGlvbiBsb29rdXBTeW1ib2wodmFsdWUsIC8vIFRPRE8oIzk2Myk6IFVzZSBhIHVuaW9uIHR5cGUgZm9yIHRoaXMuXG5mb250TmFtZSwgbW9kZSkge1xuICAvLyBSZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGl0cyByZXBsYWNlZCB2YWx1ZSBmcm9tIHN5bWJvbC5qc1xuICBpZiAoc3ltYm9sc1ttb2RlXVt2YWx1ZV0gJiYgc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG1ldHJpY3M6IGdldENoYXJhY3Rlck1ldHJpY3ModmFsdWUsIGZvbnROYW1lLCBtb2RlKVxuICB9O1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2xOb2RlIGFmdGVyIHRyYW5zbGF0aW9uIHZpYSB0aGUgbGlzdCBvZiBzeW1ib2xzIGluIHN5bWJvbHMuanMuXG4gKiBDb3JyZWN0bHkgcHVsbHMgb3V0IG1ldHJpY3MgZm9yIHRoZSBjaGFyYWN0ZXIsIGFuZCBvcHRpb25hbGx5IHRha2VzIGEgbGlzdCBvZlxuICogY2xhc3NlcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgbm9kZS5cbiAqXG4gKiBUT0RPOiBtYWtlIGFyZ3VtZW50IG9yZGVyIGNsb3NlciB0byBtYWtlU3BhblxuICogVE9ETzogYWRkIGEgc2VwYXJhdGUgYXJndW1lbnQgZm9yIG1hdGggY2xhc3MgKGUuZy4gYG1vcGAsIGBtYmluYCksIHdoaWNoXG4gKiBzaG91bGQgaWYgcHJlc2VudCBjb21lIGZpcnN0IGluIGBjbGFzc2VzYC5cbiAqIFRPRE8oIzk1Myk6IE1ha2UgYG9wdGlvbnNgIG1hbmRhdG9yeSBhbmQgYWx3YXlzIHBhc3MgaXQgaW4uXG4gKi9cblxuXG52YXIgbWFrZVN5bWJvbCA9IGZ1bmN0aW9uIG1ha2VTeW1ib2wodmFsdWUsIGZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBsb29rdXAgPSBsb29rdXBTeW1ib2wodmFsdWUsIGZvbnROYW1lLCBtb2RlKTtcbiAgdmFyIG1ldHJpY3MgPSBsb29rdXAubWV0cmljcztcbiAgdmFsdWUgPSBsb29rdXAudmFsdWU7XG4gIHZhciBzeW1ib2xOb2RlO1xuXG4gIGlmIChtZXRyaWNzKSB7XG4gICAgdmFyIGl0YWxpYyA9IG1ldHJpY3MuaXRhbGljO1xuXG4gICAgaWYgKG1vZGUgPT09IFwidGV4dFwiIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5mb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgICBpdGFsaWMgPSAwO1xuICAgIH1cblxuICAgIHN5bWJvbE5vZGUgPSBuZXcgU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgU3ltYm9sTm9kZSh2YWx1ZSwgMCwgMCwgMCwgMCwgMCwgY2xhc3Nlcyk7XG4gIH1cblxuICBpZiAob3B0aW9ucykge1xuICAgIHN5bWJvbE5vZGUubWF4Rm9udFNpemUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICBzeW1ib2xOb2RlLmNsYXNzZXMucHVzaChcIm10aWdodFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3IgPSBvcHRpb25zLmdldENvbG9yKCk7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIHN5bWJvbE5vZGUuc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ltYm9sTm9kZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sIGluIE1haW4tUmVndWxhciBvciBBTVMtUmVndWxhci5cbiAqIFVzZWQgZm9yIHJlbCwgYmluLCBvcGVuLCBjbG9zZSwgaW5uZXIsIGFuZCBwdW5jdC5cbiAqL1xuXG5cbnZhciBtYXRoc3ltID0gZnVuY3Rpb24gbWF0aHN5bSh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAoY2xhc3NlcyA9PT0gdm9pZCAwKSB7XG4gICAgY2xhc3NlcyA9IFtdO1xuICB9XG5cbiAgLy8gRGVjaWRlIHdoYXQgZm9udCB0byByZW5kZXIgdGhlIHN5bWJvbCBpbiBieSBpdHMgZW50cnkgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUuXG4gIC8vIEhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIHZhbHVlID0gXFwgYmVjYXVzZSB0aGUgXFwgaXMgdXNlZCBhcyBhXG4gIC8vIHRleHRvcmQgaW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBlcnJvcnMgYnV0IGNhbm5vdCBiZSBwYXJzZWQgYXMgYSByZWd1bGFyXG4gIC8vIHRleHQgb3JkaW5hbCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBwcmVzZW50IGFzIGEgc3ltYm9sIGluIHRoZSBzeW1ib2xzXG4gIC8vIHRhYmxlIGZvciB0ZXh0LCBhcyB3ZWxsIGFzIGEgc3BlY2lhbCBjYXNlIGZvciBib2xkc3ltYm9sIGJlY2F1c2UgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGJvbGQgKyBhbmQgLVxuICBpZiAob3B0aW9ucy5mb250ID09PSBcImJvbGRzeW1ib2xcIiAmJiBsb29rdXBTeW1ib2wodmFsdWUsIFwiTWFpbi1Cb2xkXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoW1wibWF0aGJmXCJdKSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXFxcXFwiIHx8IHN5bWJvbHNbbW9kZV1bdmFsdWVdLmZvbnQgPT09IFwibWFpblwiKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHZhbHVlLCBcIkFNUy1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcImFtc3JtXCJdKSk7XG4gIH1cbn07XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggb2YgdGhlIHR3byBmb250IG5hbWVzIChNYWluLUJvbGQgYW5kIE1hdGgtQm9sZEl0YWxpYykgYW5kXG4gKiBjb3JyZXNwb25kaW5nIHN0eWxlIHRhZ3MgKG1hdGhiZiBvciBib2xkc3ltYm9sKSB0byB1c2UgZm9yIGZvbnQgXCJib2xkc3ltYm9sXCIsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHN5bWJvbC4gIFVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YgZm9udE1hcCBmb3IgZm9udFxuICogXCJib2xkc3ltYm9sXCIuXG4gKi9cblxuXG52YXIgYm9sZHN5bWJvbCA9IGZ1bmN0aW9uIGJvbGRzeW1ib2wodmFsdWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMsIHR5cGUpIHtcbiAgaWYgKHR5cGUgIT09IFwidGV4dG9yZFwiICYmIGxvb2t1cFN5bWJvbCh2YWx1ZSwgXCJNYXRoLUJvbGRJdGFsaWNcIiwgbW9kZSkubWV0cmljcykge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUJvbGRJdGFsaWNcIixcbiAgICAgIGZvbnRDbGFzczogXCJib2xkc3ltYm9sXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIFNvbWUgZ2x5cGhzIGRvIG5vdCBleGlzdCBpbiBNYXRoLUJvbGRJdGFsaWMgc28gd2UgbmVlZCB0byB1c2VcbiAgICAvLyBNYWluLUJvbGQgaW5zdGVhZC5cbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGJmXCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBNYWtlcyBlaXRoZXIgYSBtYXRob3JkIG9yIHRleHRvcmQgaW4gdGhlIGNvcnJlY3QgZm9udCBhbmQgY29sb3IuXG4gKi9cblxuXG52YXIgbWFrZU9yZCA9IGZ1bmN0aW9uIG1ha2VPcmQoZ3JvdXAsIG9wdGlvbnMsIHR5cGUpIHtcbiAgdmFyIG1vZGUgPSBncm91cC5tb2RlO1xuICB2YXIgdGV4dCA9IGdyb3VwLnRleHQ7XG4gIHZhciBjbGFzc2VzID0gW1wibW9yZFwiXTsgLy8gTWF0aCBtb2RlIG9yIE9sZCBmb250IChpLmUuIFxccm0pXG5cbiAgdmFyIGlzRm9udCA9IG1vZGUgPT09IFwibWF0aFwiIHx8IG1vZGUgPT09IFwidGV4dFwiICYmIG9wdGlvbnMuZm9udDtcbiAgdmFyIGZvbnRPckZhbWlseSA9IGlzRm9udCA/IG9wdGlvbnMuZm9udCA6IG9wdGlvbnMuZm9udEZhbWlseTtcbiAgdmFyIHdpZGVGb250TmFtZSA9IFwiXCI7XG4gIHZhciB3aWRlRm9udENsYXNzID0gXCJcIjtcblxuICBpZiAodGV4dC5jaGFyQ29kZUF0KDApID09PSAweEQ4MzUpIHtcbiAgICBbd2lkZUZvbnROYW1lLCB3aWRlRm9udENsYXNzXSA9IHdpZGVDaGFyYWN0ZXJGb250KHRleHQsIG1vZGUpO1xuICB9XG5cbiAgaWYgKHdpZGVGb250TmFtZS5sZW5ndGggPiAwKSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIHdpZGVGb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQod2lkZUZvbnRDbGFzcykpO1xuICB9IGVsc2UgaWYgKGZvbnRPckZhbWlseSkge1xuICAgIHZhciBmb250TmFtZTtcbiAgICB2YXIgZm9udENsYXNzZXM7XG5cbiAgICBpZiAoZm9udE9yRmFtaWx5ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgICAgdmFyIGZvbnREYXRhID0gYm9sZHN5bWJvbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAoaXNGb250KSB7XG4gICAgICBmb250TmFtZSA9IGZvbnRNYXBbZm9udE9yRmFtaWx5XS5mb250TmFtZTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvbnROYW1lID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseSwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZV07XG4gICAgfVxuXG4gICAgaWYgKGxvb2t1cFN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSkubWV0cmljcykge1xuICAgICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSk7XG4gICAgfSBlbHNlIGlmIChsaWdhdHVyZXMuaGFzT3duUHJvcGVydHkodGV4dCkgJiYgZm9udE5hbWUuc2xpY2UoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKG1ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgXCJNYXRoLUl0YWxpY1wiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRobm9ybWFsXCJdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5mb250O1xuXG4gICAgaWYgKGZvbnQgPT09IFwiYW1zXCIpIHtcbiAgICAgIHZhciBfZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShcImFtc3JtXCIsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuXG4gICAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCBfZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYWluXCIgfHwgIWZvbnQpIHtcbiAgICAgIHZhciBfZm9udE5hbWUyID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoXCJ0ZXh0cm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9udHMgYWRkZWQgYnkgcGx1Z2luc1xuICAgICAgdmFyIF9mb250TmFtZTMgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTsgLy8gV2UgYWRkIGZvbnQgbmFtZSBhcyBhIGNzcyBjbGFzc1xuXG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTMsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KF9mb250TmFtZTMsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCB0eXBlOiBcIiArIHR5cGUgKyBcIiBpbiBtYWtlT3JkXCIpO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc3Vic2VxdWVudCBzeW1ib2xOb2RlcyBoYXZlIHRoZSBzYW1lIGNsYXNzZXMsIHNrZXcsIG1heEZvbnQsXG4gKiBhbmQgc3R5bGVzLlxuICovXG5cblxudmFyIGNhbkNvbWJpbmUgPSAocHJldiwgbmV4dCkgPT4ge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHByZXYgYW5kIG5leHQgYm90aCBhcmUganVzdCBcIm1iaW5cInMgb3IgXCJtb3JkXCJzIHdlIGRvbid0IGNvbWJpbmUgdGhlbVxuICAvLyBzbyB0aGF0IHRoZSBwcm9wZXIgc3BhY2luZyBjYW4gYmUgcHJlc2VydmVkLlxuXG5cbiAgaWYgKHByZXYuY2xhc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgY2xzID0gcHJldi5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKGNscyA9PT0gXCJtYmluXCIgfHwgY2xzID09PSBcIm1vcmRcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIHN0eWxlIGluIHByZXYuc3R5bGUpIHtcbiAgICBpZiAocHJldi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkgJiYgcHJldi5zdHlsZVtzdHlsZV0gIT09IG5leHQuc3R5bGVbc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX3N0eWxlIGluIG5leHQuc3R5bGUpIHtcbiAgICBpZiAobmV4dC5zdHlsZS5oYXNPd25Qcm9wZXJ0eShfc3R5bGUpICYmIHByZXYuc3R5bGVbX3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtfc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG4gKiBDb21iaW5lIGNvbnNlY3V0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciB0cnlDb21iaW5lQ2hhcnMgPSBjaGFycyA9PiB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgdmFyIHByZXYgPSBjaGFyc1tpXTtcbiAgICB2YXIgbmV4dCA9IGNoYXJzW2kgKyAxXTtcblxuICAgIGlmIChwcmV2IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBuZXh0IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBjYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgbWFrZVNwYW4kMiA9IGZ1bmN0aW9uIG1ha2VTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICB2YXIgc3BhbiA9IG5ldyBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgbWFrZVN2Z1NwYW4gPSAoY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKSA9PiBuZXcgU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpO1xuXG52YXIgbWFrZUxpbmVTcGFuID0gZnVuY3Rpb24gbWFrZUxpbmVTcGFuKGNsYXNzTmFtZSwgb3B0aW9ucywgdGhpY2tuZXNzKSB7XG4gIHZhciBsaW5lID0gbWFrZVNwYW4kMihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBtYWtlRW0obGluZS5oZWlnaHQpO1xuICBsaW5lLm1heEZvbnRTaXplID0gMS4wO1xuICByZXR1cm4gbGluZTtcbn07XG4vKipcbiAqIE1ha2VzIGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBocmVmLCBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sXG4gKiBhbmQgb3B0aW9ucy5cbiAqL1xuXG5cbnZhciBtYWtlQW5jaG9yID0gZnVuY3Rpb24gbWFrZUFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICB2YXIgYW5jaG9yID0gbmV3IEFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbiAgc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59O1xuLyoqXG4gKiBXcmFwcyBncm91cCBpbiBhIHNwYW4gaWYgaXQncyBhIGRvY3VtZW50IGZyYWdtZW50LCBhbGxvd2luZyB0byBhcHBseSBjbGFzc2VzXG4gKiBhbmQgc3R5bGVzXG4gKi9cblxuXG52YXIgd3JhcEZyYWdtZW50ID0gZnVuY3Rpb24gd3JhcEZyYWdtZW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMihbXSwgW2dyb3VwXSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59OyAvLyBUaGVzZSBhcmUgZXhhY3Qgb2JqZWN0IHR5cGVzIHRvIGNhdGNoIHR5cG9zIGluIHRoZSBuYW1lcyBvZiB0aGUgb3B0aW9uYWwgZmllbGRzLlxuXG5cbi8vIENvbXB1dGVzIHRoZSB1cGRhdGVkIGBjaGlsZHJlbmAgbGlzdCBhbmQgdGhlIG92ZXJhbGwgZGVwdGguXG4vL1xuLy8gVGhpcyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1ha2VWTGlzdCBtYWtlcyBpdCBlYXNpZXIgdG8gZW5mb3JjZSB0eXBlIHNhZmV0eSBieVxuLy8gYWxsb3dpbmcgZWFybHkgZXhpdHMgKHJldHVybnMpIGluIHRoZSBsb2dpYy5cbnZhciBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGggPSBmdW5jdGlvbiBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMucG9zaXRpb25UeXBlID09PSBcImluZGl2aWR1YWxTaGlmdFwiKSB7XG4gICAgdmFyIG9sZENoaWxkcmVuID0gcGFyYW1zLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZHJlbiA9IFtvbGRDaGlsZHJlblswXV07IC8vIEFkZCBpbiBrZXJucyB0byB0aGUgbGlzdCBvZiBwYXJhbXMuY2hpbGRyZW4gdG8gZ2V0IGVhY2ggZWxlbWVudCB0byBiZVxuICAgIC8vIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3Qgc3BlY2lmaWVkIHNoaWZ0XG5cbiAgICB2YXIgX2RlcHRoID0gLW9sZENoaWxkcmVuWzBdLnNoaWZ0IC0gb2xkQ2hpbGRyZW5bMF0uZWxlbS5kZXB0aDtcblxuICAgIHZhciBjdXJyUG9zID0gX2RlcHRoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRpZmYgPSAtb2xkQ2hpbGRyZW5baV0uc2hpZnQgLSBjdXJyUG9zIC0gb2xkQ2hpbGRyZW5baV0uZWxlbS5kZXB0aDtcbiAgICAgIHZhciBzaXplID0gZGlmZiAtIChvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5oZWlnaHQgKyBvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5kZXB0aCk7XG4gICAgICBjdXJyUG9zID0gY3VyclBvcyArIGRpZmY7XG4gICAgICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemVcbiAgICAgIH0pO1xuICAgICAgY2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGhcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgdmVydGljYWwgbGlzdCBieSBzdGFja2luZyBlbGVtZW50cyBhbmQga2VybnMgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gKiBBbGxvd3MgZm9yIG1hbnkgZGlmZmVyZW50IHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgcG9zaXRpb25pbmcgbWV0aG9kLlxuICpcbiAqIFNlZSBWTGlzdFBhcmFtIGRvY3VtZW50YXRpb24gYWJvdmUuXG4gKi9cblxuXG52YXIgbWFrZVZMaXN0ID0gZnVuY3Rpb24gbWFrZVZMaXN0KHBhcmFtcywgb3B0aW9ucykge1xuICB2YXIge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlcHRoXG4gIH0gPSBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKTsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG4gIHZhciBwc3RydXRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJlbGVtXCIpIHtcbiAgICAgIHZhciBlbGVtID0gY2hpbGQuZWxlbTtcbiAgICAgIHBzdHJ1dFNpemUgPSBNYXRoLm1heChwc3RydXRTaXplLCBlbGVtLm1heEZvbnRTaXplLCBlbGVtLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHN0cnV0U2l6ZSArPSAyO1xuICB2YXIgcHN0cnV0ID0gbWFrZVNwYW4kMihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbShwc3RydXRTaXplKTsgLy8gQ3JlYXRlIGEgbmV3IGxpc3Qgb2YgYWN0dWFsIGNoaWxkcmVuIGF0IHRoZSBjb3JyZWN0IG9mZnNldHNcblxuICB2YXIgcmVhbENoaWxkcmVuID0gW107XG4gIHZhciBtaW5Qb3MgPSBkZXB0aDtcbiAgdmFyIG1heFBvcyA9IGRlcHRoO1xuICB2YXIgY3VyclBvcyA9IGRlcHRoO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGNoaWxkcmVuLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW5bX2kyXTtcblxuICAgIGlmIChfY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIpIHtcbiAgICAgIGN1cnJQb3MgKz0gX2NoaWxkLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZWxlbSA9IF9jaGlsZC5lbGVtO1xuICAgICAgdmFyIGNsYXNzZXMgPSBfY2hpbGQud3JhcHBlckNsYXNzZXMgfHwgW107XG4gICAgICB2YXIgc3R5bGUgPSBfY2hpbGQud3JhcHBlclN0eWxlIHx8IHt9O1xuICAgICAgdmFyIGNoaWxkV3JhcCA9IG1ha2VTcGFuJDIoY2xhc3NlcywgW3BzdHJ1dCwgX2VsZW1dLCB1bmRlZmluZWQsIHN0eWxlKTtcbiAgICAgIGNoaWxkV3JhcC5zdHlsZS50b3AgPSBtYWtlRW0oLXBzdHJ1dFNpemUgLSBjdXJyUG9zIC0gX2VsZW0uZGVwdGgpO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdFwiXSwgcmVhbENoaWxkcmVuKTtcbiAgdmxpc3Quc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKG1heFBvcyk7IC8vIEEgc2Vjb25kIHJvdyBpcyB1c2VkIGlmIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIHZsaXN0J3MgZGVwdGguXG5cbiAgdmFyIHJvd3M7XG5cbiAgaWYgKG1pblBvcyA8IDApIHtcbiAgICAvLyBXZSB3aWxsIGRlZmluZSBkZXB0aCBpbiBhbiBlbXB0eSBzcGFuIHdpdGggZGlzcGxheTogdGFibGUtY2VsbC5cbiAgICAvLyBJdCBzaG91bGQgcmVuZGVyIHdpdGggdGhlIGhlaWdodCB0aGF0IHdlIGRlZmluZS4gQnV0IENocm9tZSwgaW5cbiAgICAvLyBjb250ZW50ZWRpdGFibGUgbW9kZSBvbmx5LCB0cmVhdHMgdGhhdCBzcGFuIGFzIGlmIGl0IGNvbnRhaW5zIHNvbWVcbiAgICAvLyB0ZXh0IGNvbnRlbnQuIEFuZCB0aGF0IG1pbi1oZWlnaHQgb3Zlci1yaWRlcyBvdXIgZGVzaXJlZCBoZWlnaHQuXG4gICAgLy8gU28gd2UgcHV0IGFub3RoZXIgZW1wdHkgc3BhbiBpbnNpZGUgdGhlIGRlcHRoIHN0cnV0IHNwYW4uXG4gICAgdmFyIGVtcHR5U3BhbiA9IG1ha2VTcGFuJDIoW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IG1ha2VTcGFuJDIoW1widmxpc3RcIl0sIFtlbXB0eVNwYW5dKTtcbiAgICBkZXB0aFN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbSgtbWluUG9zKTsgLy8gU2FmYXJpIHdhbnRzIHRoZSBmaXJzdCByb3cgdG8gaGF2ZSBpbmxpbmUgY29udGVudDsgb3RoZXJ3aXNlIGl0XG4gICAgLy8gcHV0cyB0aGUgYm90dG9tIG9mIHRoZSAqc2Vjb25kKiByb3cgb24gdGhlIGJhc2VsaW5lLlxuXG4gICAgdmFyIHRvcFN0cnV0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdC1zXCJdLCBbbmV3IFN5bWJvbE5vZGUoXCJcXHUyMDBiXCIpXSk7XG4gICAgcm93cyA9IFttYWtlU3BhbiQyKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgbWFrZVNwYW4kMihbXCJ2bGlzdC1yXCJdLCBbZGVwdGhTdHJ1dF0pXTtcbiAgfSBlbHNlIHtcbiAgICByb3dzID0gW21ha2VTcGFuJDIoW1widmxpc3QtclwiXSwgW3ZsaXN0XSldO1xuICB9XG5cbiAgdmFyIHZ0YWJsZSA9IG1ha2VTcGFuJDIoW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgbWFrZUdsdWUgPSAobWVhc3VyZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgLy8gTWFrZSBhbiBlbXB0eSBzcGFuIGZvciB0aGUgc3BhY2VcbiAgdmFyIHJ1bGUgPSBtYWtlU3BhbiQyKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IGNhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNpemUpO1xuICByZXR1cm4gcnVsZTtcbn07IC8vIFRha2VzIGZvbnQgb3B0aW9ucywgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZvbnRMb29rdXAgbmFtZVxuXG5cbnZhciByZXRyaWV2ZVRleHRGb250TmFtZSA9IGZ1bmN0aW9uIHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnRGYW1pbHksIGZvbnRXZWlnaHQsIGZvbnRTaGFwZSkge1xuICB2YXIgYmFzZUZvbnROYW1lID0gXCJcIjtcblxuICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHtcbiAgICBjYXNlIFwiYW1zcm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiQU1TXCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ0ZXh0cm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiTWFpblwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHNmXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlNhbnNTZXJpZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHR0XCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlR5cGV3cml0ZXJcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJhc2VGb250TmFtZSA9IGZvbnRGYW1pbHk7XG4gICAgLy8gdXNlIGZvbnRzIGFkZGVkIGJ5IGEgcGx1Z2luXG4gIH1cblxuICB2YXIgZm9udFN0eWxlc05hbWU7XG5cbiAgaWYgKGZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIgJiYgZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRJdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkl0YWxpY1wiO1xuICB9IGVsc2Uge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJSZWd1bGFyXCI7XG4gIH1cblxuICByZXR1cm4gYmFzZUZvbnROYW1lICsgXCItXCIgKyBmb250U3R5bGVzTmFtZTtcbn07XG4vKipcbiAqIE1hcHMgVGVYIGZvbnQgY29tbWFuZHMgdG8gb2JqZWN0cyBjb250YWluaW5nOlxuICogLSB2YXJpYW50OiBzdHJpbmcgdXNlZCBmb3IgXCJtYXRodmFyaWFudFwiIGF0dHJpYnV0ZSBpbiBidWlsZE1hdGhNTC5qc1xuICogLSBmb250TmFtZTogdGhlIFwic3R5bGVcIiBwYXJhbWV0ZXIgdG8gZm9udE1ldHJpY3MuZ2V0Q2hhcmFjdGVyTWV0cmljc1xuICovXG4vLyBBIG1hcCBiZXR3ZWVuIHRleCBmb250IGNvbW1hbmRzIGFuIE1hdGhNTCBtYXRodmFyaWFudCBhdHRyaWJ1dGUgdmFsdWVzXG5cblxudmFyIGZvbnRNYXAgPSB7XG4gIC8vIHN0eWxlc1xuICBcIm1hdGhiZlwiOiB7XG4gICAgdmFyaWFudDogXCJib2xkXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCJcbiAgfSxcbiAgXCJtYXRocm1cIjoge1xuICAgIHZhcmlhbnQ6IFwibm9ybWFsXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1SZWd1bGFyXCJcbiAgfSxcbiAgXCJ0ZXh0aXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICBcIm1hdGhpdFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYWluLUl0YWxpY1wiXG4gIH0sXG4gIFwibWF0aG5vcm1hbFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiXG4gIH0sXG4gIC8vIFwiYm9sZHN5bWJvbFwiIGlzIG1pc3NpbmcgYmVjYXVzZSB0aGV5IHJlcXVpcmUgdGhlIHVzZSBvZiBtdWx0aXBsZSBmb250czpcbiAgLy8gTWF0aC1Cb2xkSXRhbGljIGFuZCBNYWluLUJvbGQuICBUaGlzIGlzIGhhbmRsZWQgYnkgYSBzcGVjaWFsIGNhc2UgaW5cbiAgLy8gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYm9sZHN5bWJvbC5cbiAgLy8gZmFtaWxpZXNcbiAgXCJtYXRoYmJcIjoge1xuICAgIHZhcmlhbnQ6IFwiZG91YmxlLXN0cnVja1wiLFxuICAgIGZvbnROYW1lOiBcIkFNUy1SZWd1bGFyXCJcbiAgfSxcbiAgXCJtYXRoY2FsXCI6IHtcbiAgICB2YXJpYW50OiBcInNjcmlwdFwiLFxuICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhmcmFrXCI6IHtcbiAgICB2YXJpYW50OiBcImZyYWt0dXJcIixcbiAgICBmb250TmFtZTogXCJGcmFrdHVyLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzY3JcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiU2NyaXB0LVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzZlwiOiB7XG4gICAgdmFyaWFudDogXCJzYW5zLXNlcmlmXCIsXG4gICAgZm9udE5hbWU6IFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGh0dFwiOiB7XG4gICAgdmFyaWFudDogXCJtb25vc3BhY2VcIixcbiAgICBmb250TmFtZTogXCJUeXBld3JpdGVyLVJlZ3VsYXJcIlxuICB9XG59O1xudmFyIHN2Z0RhdGEgPSB7XG4gIC8vICAgcGF0aCwgd2lkdGgsIGhlaWdodFxuICB2ZWM6IFtcInZlY1wiLCAwLjQ3MSwgMC43MTRdLFxuICAvLyB2YWx1ZXMgZnJvbSB0aGUgZm9udCBnbHlwaFxuICBvaWludFNpemUxOiBbXCJvaWludFNpemUxXCIsIDAuOTU3LCAwLjQ5OV0sXG4gIC8vIG92YWwgdG8gb3ZlcmxheSB0aGUgaW50ZWdyYW5kXG4gIG9paW50U2l6ZTI6IFtcIm9paW50U2l6ZTJcIiwgMS40NzIsIDAuNjU5XSxcbiAgb2lpaW50U2l6ZTE6IFtcIm9paWludFNpemUxXCIsIDEuMzA0LCAwLjQ5OV0sXG4gIG9paWludFNpemUyOiBbXCJvaWlpbnRTaXplMlwiLCAxLjk4LCAwLjY1OV1cbn07XG5cbnZhciBzdGF0aWNTdmcgPSBmdW5jdGlvbiBzdGF0aWNTdmcodmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICB2YXIgW3BhdGhOYW1lLCB3aWR0aCwgaGVpZ2h0XSA9IHN2Z0RhdGFbdmFsdWVdO1xuICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiBtYWtlRW0od2lkdGgpLFxuICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgIC8vIE92ZXJyaWRlIENTUyBydWxlIGAua2F0ZXggc3ZnIHsgd2lkdGg6IDEwMCUgfWBcbiAgICBcInN0eWxlXCI6IFwid2lkdGg6XCIgKyBtYWtlRW0od2lkdGgpLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IG1ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgYnVpbGRDb21tb24gPSB7XG4gIGZvbnRNYXAsXG4gIG1ha2VTeW1ib2wsXG4gIG1hdGhzeW0sXG4gIG1ha2VTcGFuOiBtYWtlU3BhbiQyLFxuICBtYWtlU3ZnU3BhbixcbiAgbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQsXG4gIHdyYXBGcmFnbWVudCxcbiAgbWFrZVZMaXN0LFxuICBtYWtlT3JkLFxuICBtYWtlR2x1ZSxcbiAgc3RhdGljU3ZnLFxuICBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnNcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHNwYWNlcyBiZXR3ZWVuIGRpZmZlcmVudCBjbGFzc2VzIG9mIGF0b21zLlxuICovXG52YXIgdGhpbnNwYWNlID0ge1xuICBudW1iZXI6IDMsXG4gIHVuaXQ6IFwibXVcIlxufTtcbnZhciBtZWRpdW1zcGFjZSA9IHtcbiAgbnVtYmVyOiA0LFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgdGhpY2tzcGFjZSA9IHtcbiAgbnVtYmVyOiA1LFxuICB1bml0OiBcIm11XCJcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuXG4vLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIGRpc3BsYXkgYW5kIHRleHQgc3R5bGVzXG52YXIgc3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1iaW46IHtcbiAgICBtb3JkOiBtZWRpdW1zcGFjZSxcbiAgICBtb3A6IG1lZGl1bXNwYWNlLFxuICAgIG1vcGVuOiBtZWRpdW1zcGFjZSxcbiAgICBtaW5uZXI6IG1lZGl1bXNwYWNlXG4gIH0sXG4gIG1yZWw6IHtcbiAgICBtb3JkOiB0aGlja3NwYWNlLFxuICAgIG1vcDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaWNrc3BhY2VcbiAgfSxcbiAgbW9wZW46IHt9LFxuICBtY2xvc2U6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbWNsb3NlOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbWlubmVyOiB7XG4gICAgbW9yZDogdGhpbnNwYWNlLFxuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1iaW46IG1lZGl1bXNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaW5zcGFjZSxcbiAgICBtcHVuY3Q6IHRoaW5zcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9XG59OyAvLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIHNjcmlwdCBhbmQgc2NyaXB0c2NyaXB0IHN0eWxlc1xuXG52YXIgdGlnaHRTcGFjaW5ncyA9IHtcbiAgbW9yZDoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7fSxcbiAgbXJlbDoge30sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbXB1bmN0OiB7fSxcbiAgbWlubmVyOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfVxufTtcblxuLyoqIENvbnRleHQgcHJvdmlkZWQgdG8gZnVuY3Rpb24gaGFuZGxlcnMgZm9yIGVycm9yIG1lc3NhZ2VzLiAqL1xuLy8gTm90ZTogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHJldHVybiB0eXBlIHVuaW9uIHdpbGwgY2F1c2UgYSBmbG93IGVycm9yLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zNjYzLlxuLy8gTW9yZSBnZW5lcmFsIHZlcnNpb24gb2YgYEh0bWxCdWlsZGVyYCBmb3Igbm9kZXMgKGUuZy4gXFxzdW0sIGFjY2VudCB0eXBlcylcbi8vIHdob3NlIHByZXNlbmNlIGltcGFjdHMgc3VwZXIvc3Vic2NyaXB0aW5nLiBJbiB0aGlzIGNhc2UsIFBhcnNlTm9kZTxcInN1cHN1YlwiPlxuLy8gZGVsZWdhdGVzIGl0cyBIVE1MIGJ1aWxkaW5nIHRvIHRoZSBIdG1sQnVpbGRlciBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIG5vZGVzLlxuXG4vKipcbiAqIEZpbmFsIGZ1bmN0aW9uIHNwZWMgZm9yIHVzZSBhdCBwYXJzZSB0aW1lLlxuICogVGhpcyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIGBGdW5jdGlvblByb3BTcGVjYCwgZXhjZXB0IGl0XG4gKiAxLiBpbmNsdWRlcyB0aGUgZnVuY3Rpb24gaGFuZGxlciwgYW5kXG4gKiAyLiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGV4Y2VwdCBhcmdUeXBlcy5cbiAqIEl0IGlzIGdlbmVyYXRlZCBieSBgZGVmaW5lRnVuY3Rpb24oKWAgYmVsb3cuXG4gKi9cblxuLyoqXG4gKiBBbGwgcmVnaXN0ZXJlZCBmdW5jdGlvbnMuXG4gKiBgZnVuY3Rpb25zLmpzYCBqdXN0IGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeS5cbiAqL1xudmFyIF9mdW5jdGlvbnMgPSB7fTtcbi8qKlxuICogQWxsIEhUTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX2h0bWxHcm91cEJ1aWxkZXJzID0ge307XG4vKipcbiAqIEFsbCBNYXRoTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX21hdGhtbEdyb3VwQnVpbGRlcnMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHtcbiAgICB0eXBlLFxuICAgIG5hbWVzLFxuICAgIHByb3BzLFxuICAgIGhhbmRsZXIsXG4gICAgaHRtbEJ1aWxkZXIsXG4gICAgbWF0aG1sQnVpbGRlclxuICB9ID0gX3JlZjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGZ1bmN0aW9uc1xuICB2YXIgZGF0YSA9IHtcbiAgICB0eXBlLFxuICAgIG51bUFyZ3M6IHByb3BzLm51bUFyZ3MsXG4gICAgYXJnVHlwZXM6IHByb3BzLmFyZ1R5cGVzLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiAhIXByb3BzLmFsbG93ZWRJbkFyZ3VtZW50LFxuICAgIGFsbG93ZWRJblRleHQ6ICEhcHJvcHMuYWxsb3dlZEluVGV4dCxcbiAgICBhbGxvd2VkSW5NYXRoOiBwcm9wcy5hbGxvd2VkSW5NYXRoID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMuYWxsb3dlZEluTWF0aCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IHByb3BzLm51bU9wdGlvbmFsQXJncyB8fCAwLFxuICAgIGluZml4OiAhIXByb3BzLmluZml4LFxuICAgIHByaW1pdGl2ZTogISFwcm9wcy5wcmltaXRpdmUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBodG1sQnVpbGRlcixcbiAgICBtYXRobWxCdWlsZGVyXG4gIH0gPSBfcmVmMjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcblxuICAgIGhhbmRsZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBuZXZlciBiZSBjYWxsZWQuJyk7XG4gICAgfSxcblxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59XG52YXIgbm9ybWFsaXplQXJndW1lbnQgPSBmdW5jdGlvbiBub3JtYWxpemVBcmd1bWVudChhcmcpIHtcbiAgcmV0dXJuIGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIgJiYgYXJnLmJvZHkubGVuZ3RoID09PSAxID8gYXJnLmJvZHlbMF0gOiBhcmc7XG59OyAvLyBTaW5jZSB0aGUgY29ycmVzcG9uZGluZyBidWlsZEhUTUwvYnVpbGRNYXRoTUwgZnVuY3Rpb24gZXhwZWN0cyBhXG4vLyBsaXN0IG9mIGVsZW1lbnRzLCB3ZSBub3JtYWxpemUgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBhcmd1bWVudHNcblxudmFyIG9yZGFyZ3VtZW50ID0gZnVuY3Rpb24gb3JkYXJndW1lbnQoYXJnKSB7XG4gIHJldHVybiBhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiID8gYXJnLmJvZHkgOiBbYXJnXTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cbnZhciBtYWtlU3BhbiQxID0gYnVpbGRDb21tb24ubWFrZVNwYW47IC8vIEJpbmFyeSBhdG9tcyAoZmlyc3QgY2xhc3MgYG1iaW5gKSBjaGFuZ2UgaW50byBvcmRpbmFyeSBhdG9tcyAoYG1vcmRgKVxuLy8gZGVwZW5kaW5nIG9uIHRoZWlyIHN1cnJvdW5kaW5ncy4gU2VlIFRlWGJvb2sgcGcuIDQ0Mi00NDYsIFJ1bGVzIDUgYW5kIDYsXG4vLyBhbmQgdGhlIHRleHQgYmVmb3JlIFJ1bGUgMTkuXG5cbnZhciBiaW5MZWZ0Q2FuY2VsbGVyID0gW1wibGVmdG1vc3RcIiwgXCJtYmluXCIsIFwibW9wZW5cIiwgXCJtcmVsXCIsIFwibW9wXCIsIFwibXB1bmN0XCJdO1xudmFyIGJpblJpZ2h0Q2FuY2VsbGVyID0gW1wicmlnaHRtb3N0XCIsIFwibXJlbFwiLCBcIm1jbG9zZVwiLCBcIm1wdW5jdFwiXTtcbnZhciBzdHlsZU1hcCQxID0ge1xuICBcImRpc3BsYXlcIjogU3R5bGUkMS5ESVNQTEFZLFxuICBcInRleHRcIjogU3R5bGUkMS5URVhULFxuICBcInNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn07XG52YXIgRG9tRW51bSA9IHtcbiAgbW9yZDogXCJtb3JkXCIsXG4gIG1vcDogXCJtb3BcIixcbiAgbWJpbjogXCJtYmluXCIsXG4gIG1yZWw6IFwibXJlbFwiLFxuICBtb3BlbjogXCJtb3BlblwiLFxuICBtY2xvc2U6IFwibWNsb3NlXCIsXG4gIG1wdW5jdDogXCJtcHVuY3RcIixcbiAgbWlubmVyOiBcIm1pbm5lclwiXG59O1xuXG4vKipcbiAqIFRha2UgYSBsaXN0IG9mIG5vZGVzLCBidWlsZCB0aGVtIGluIG9yZGVyLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUgYnVpbHRcbiAqIG5vZGVzLiBkb2N1bWVudEZyYWdtZW50cyBhcmUgZmxhdHRlbmVkIGludG8gdGhlaXIgY29udGVudHMsIHNvIHRoZVxuICogcmV0dXJuZWQgbGlzdCBjb250YWlucyBubyBmcmFnbWVudHMuIGBpc1JlYWxHcm91cGAgaXMgdHJ1ZSBpZiBgZXhwcmVzc2lvbmBcbiAqIGlzIGEgcmVhbCBncm91cCAobm8gYXRvbXMgd2lsbCBiZSBhZGRlZCBvbiBlaXRoZXIgc2lkZSksIGFzIG9wcG9zZWQgdG9cbiAqIGEgcGFydGlhbCBncm91cCAoZS5nLiBvbmUgY3JlYXRlZCBieSBcXGNvbG9yKS4gYHN1cnJvdW5kaW5nYCBpcyBhbiBhcnJheVxuICogY29uc2lzdGluZyB0eXBlIG9mIG5vZGVzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGVmdCBhbmQgcmlnaHQuXG4gKi9cbnZhciBidWlsZEV4cHJlc3Npb24kMSA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc1JlYWxHcm91cCwgc3Vycm91bmRpbmcpIHtcbiAgaWYgKHN1cnJvdW5kaW5nID09PSB2b2lkIDApIHtcbiAgICBzdXJyb3VuZGluZyA9IFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIC8vIFBhcnNlIGV4cHJlc3Npb25zIGludG8gYGdyb3Vwc2AuXG4gIHZhciBncm91cHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb3V0cHV0ID0gYnVpbGRHcm91cCQxKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IG91dHB1dC5jaGlsZHJlbjtcbiAgICAgIGdyb3Vwcy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzLnB1c2gob3V0cHV0KTtcbiAgICB9XG4gIH0gLy8gQ29tYmluZSBjb25zZWN1dGl2ZSBkb21UcmVlLnN5bWJvbE5vZGVzIGludG8gYSBzaW5nbGUgc3ltYm9sTm9kZS5cblxuXG4gIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhncm91cHMpOyAvLyBJZiBgZXhwcmVzc2lvbmAgaXMgYSBwYXJ0aWFsIGdyb3VwLCBsZXQgdGhlIHBhcmVudCBoYW5kbGUgc3BhY2luZ3NcbiAgLy8gdG8gYXZvaWQgcHJvY2Vzc2luZyBncm91cHMgbXVsdGlwbGUgdGltZXMuXG5cbiAgaWYgKCFpc1JlYWxHcm91cCkge1xuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICB2YXIgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBub2RlID0gZXhwcmVzc2lvblswXTtcblxuICAgIGlmIChub2RlLnR5cGUgPT09IFwic2l6aW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKG5vZGUuc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3R5bGluZ1wiKSB7XG4gICAgICBnbHVlT3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGVNYXAkMVtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzBdIHx8IFwibGVmdG1vc3RcIl0sIFtdLCBvcHRpb25zKTtcbiAgdmFyIGR1bW15TmV4dCA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzFdIHx8IFwicmlnaHRtb3N0XCJdLCBbXSwgb3B0aW9ucyk7IC8vIFRPRE86IFRoZXNlIGNvZGUgYXNzdW1lcyB0aGF0IGEgbm9kZSdzIG1hdGggY2xhc3MgaXMgdGhlIGZpcnN0IGVsZW1lbnRcbiAgLy8gb2YgaXRzIGBjbGFzc2VzYCBhcnJheS4gQSBsYXRlciBjbGVhbnVwIHNob3VsZCBlbnN1cmUgdGhpcywgZm9yXG4gIC8vIGluc3RhbmNlIGJ5IGNoYW5naW5nIHRoZSBzaWduYXR1cmUgb2YgYG1ha2VTcGFuYC5cbiAgLy8gQmVmb3JlIGRldGVybWluaW5nIHdoYXQgc3BhY2VzIHRvIGluc2VydCwgcGVyZm9ybSBiaW4gY2FuY2VsbGF0aW9uLlxuICAvLyBCaW5hcnkgb3BlcmF0b3JzIGNoYW5nZSB0byBvcmRpbmFyeSBzeW1ib2xzIGluIHNvbWUgY29udGV4dHMuXG5cbiAgdmFyIGlzUm9vdCA9IGlzUmVhbEdyb3VwID09PSBcInJvb3RcIjtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgKG5vZGUsIHByZXYpID0+IHtcbiAgICB2YXIgcHJldlR5cGUgPSBwcmV2LmNsYXNzZXNbMF07XG4gICAgdmFyIHR5cGUgPSBub2RlLmNsYXNzZXNbMF07XG5cbiAgICBpZiAocHJldlR5cGUgPT09IFwibWJpblwiICYmIHV0aWxzLmNvbnRhaW5zKGJpblJpZ2h0Q2FuY2VsbGVyLCB0eXBlKSkge1xuICAgICAgcHJldi5jbGFzc2VzWzBdID0gXCJtb3JkXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5MZWZ0Q2FuY2VsbGVyLCBwcmV2VHlwZSkpIHtcbiAgICAgIG5vZGUuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQsIGlzUm9vdCk7XG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIChub2RlLCBwcmV2KSA9PiB7XG4gICAgdmFyIHByZXZUeXBlID0gZ2V0VHlwZU9mRG9tVHJlZShwcmV2KTtcbiAgICB2YXIgdHlwZSA9IGdldFR5cGVPZkRvbVRyZWUobm9kZSk7IC8vICdtdGlnaHQnIGluZGljYXRlcyB0aGF0IHRoZSBub2RlIGlzIHNjcmlwdCBvciBzY3JpcHRzY3JpcHQgc3R5bGUuXG5cbiAgICB2YXIgc3BhY2UgPSBwcmV2VHlwZSAmJiB0eXBlID8gbm9kZS5oYXNDbGFzcyhcIm10aWdodFwiKSA/IHRpZ2h0U3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogc3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogbnVsbDtcblxuICAgIGlmIChzcGFjZSkge1xuICAgICAgLy8gSW5zZXJ0IGdsdWUgKHNwYWNpbmcpIGFmdGVyIHRoZSBgcHJldmAuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUdsdWUoc3BhY2UsIGdsdWVPcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0LCBpc1Jvb3QpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCwgaXNSb290KSB7XG4gIGlmIChuZXh0KSB7XG4gICAgLy8gdGVtcG9yYXJpbHkgYXBwZW5kIHRoZSByaWdodCBub2RlLCBpZiBleGlzdHNcbiAgICBub2Rlcy5wdXNoKG5leHQpO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgIHZhciBwYXJ0aWFsR3JvdXAgPSBjaGVja1BhcnRpYWxHcm91cChub2RlKTtcblxuICAgIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICAgIC8vIFJlY3Vyc2l2ZSBERlNcbiAgICAgIC8vICRGbG93Rml4TWU6IG1ha2Ugbm9kZXMgYSAkUmVhZE9ubHlBcnJheSBieSByZXR1cm5pbmcgYSBuZXcgYXJyYXlcbiAgICAgIHRyYXZlcnNlTm9uU3BhY2VOb2RlcyhwYXJ0aWFsR3JvdXAuY2hpbGRyZW4sIGNhbGxiYWNrLCBwcmV2LCBudWxsLCBpc1Jvb3QpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICB2YXIgbm9uc3BhY2UgPSAhbm9kZS5oYXNDbGFzcyhcIm1zcGFjZVwiKTtcblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKG5vZGUsIHByZXYubm9kZSk7XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKHByZXYuaW5zZXJ0QWZ0ZXIpIHtcbiAgICAgICAgICBwcmV2Lmluc2VydEFmdGVyKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGF0IGZyb250XG4gICAgICAgICAgbm9kZXMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgcHJldi5ub2RlID0gbm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzUm9vdCAmJiBub2RlLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgcHJldi5ub2RlID0gbWFrZVNwYW4kMShbXCJsZWZ0bW9zdFwiXSk7IC8vIHRyZWF0IGxpa2UgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICB9XG5cbiAgICBwcmV2Lmluc2VydEFmdGVyID0gKGluZGV4ID0+IG4gPT4ge1xuICAgICAgbm9kZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgbik7XG4gICAgICBpKys7XG4gICAgfSkoaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBjaGVja1BhcnRpYWxHcm91cCA9IGZ1bmN0aW9uIGNoZWNrUGFydGlhbEdyb3VwKG5vZGUpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBBbmNob3IgfHwgbm9kZSBpbnN0YW5jZW9mIFNwYW4gJiYgbm9kZS5oYXNDbGFzcyhcImVuY2xvc2luZ1wiKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gY2hlY2tQYXJ0aWFsR3JvdXAobm9kZSk7XG5cbiAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcnRpYWxHcm91cC5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGlmIChzaWRlID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgcmV0dXJuIGdldE91dGVybW9zdE5vZGUoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIFwicmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuWzBdLCBcImxlZnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59OyAvLyBSZXR1cm4gbWF0aCBhdG9tIGNsYXNzIChtY2xhc3MpIG9mIGEgZG9tVHJlZS5cbi8vIElmIGBzaWRlYCBpcyBnaXZlbiwgaXQgd2lsbCBnZXQgdGhlIHR5cGUgb2YgdGhlIG91dGVybW9zdCBub2RlIGF0IGdpdmVuIHNpZGUuXG5cblxudmFyIGdldFR5cGVPZkRvbVRyZWUgPSBmdW5jdGlvbiBnZXRUeXBlT2ZEb21UcmVlKG5vZGUsIHNpZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc2lkZSkge1xuICAgIG5vZGUgPSBnZXRPdXRlcm1vc3ROb2RlKG5vZGUsIHNpZGUpO1xuICB9IC8vIFRoaXMgbWFrZXMgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgYXMgdG8gd2hlcmUgdGhlIHR5cGUgb2YgYXRvbVxuICAvLyBhcHBlYXJzLiAgV2Ugc2hvdWxkIGRvIGEgYmV0dGVyIGpvYiBvZiBlbmZvcmNpbmcgdGhpcy5cblxuXG4gIHJldHVybiBEb21FbnVtW25vZGUuY2xhc3Nlc1swXV0gfHwgbnVsbDtcbn07XG52YXIgbWFrZU51bGxEZWxpbWl0ZXIgPSBmdW5jdGlvbiBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBtb3JlQ2xhc3NlcyA9IFtcIm51bGxkZWxpbWl0ZXJcIl0uY29uY2F0KG9wdGlvbnMuYmFzZVNpemluZ0NsYXNzZXMoKSk7XG4gIHJldHVybiBtYWtlU3BhbiQxKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkR3JvdXAkMSA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIGlmICghZ3JvdXApIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMSgpO1xuICB9XG5cbiAgaWYgKF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IG1ha2VTcGFuJDEob3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSwgW2dyb3VwTm9kZV0sIG9wdGlvbnMpO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBOb2RlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBtYWtlU3BhbiQxKFtcImJhc2VcIl0sIGNoaWxkcmVuLCBvcHRpb25zKTsgLy8gQWRkIHN0cnV0LCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHRvcCBvZiB0aGUgSFRNTCBlbGVtZW50IGZhbGxzIGF0XG4gIC8vIHRoZSBoZWlnaHQgb2YgdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgYm90dG9tIG9mIHRoZSBIVE1MIGVsZW1lbnRcbiAgLy8gZmFsbHMgYXQgdGhlIGRlcHRoIG9mIHRoZSBleHByZXNzaW9uLlxuXG4gIHZhciBzdHJ1dCA9IG1ha2VTcGFuJDEoW1wic3RydXRcIl0pO1xuICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoKTtcblxuICBpZiAoYm9keS5kZXB0aCkge1xuICAgIHN0cnV0LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSBtYWtlRW0oLWJvZHkuZGVwdGgpO1xuICB9XG5cbiAgYm9keS5jaGlsZHJlbi51bnNoaWZ0KHN0cnV0KTtcbiAgcmV0dXJuIGJvZHk7XG59XG4vKipcbiAqIFRha2UgYW4gZW50aXJlIHBhcnNlIHRyZWUsIGFuZCBidWlsZCBpdCBpbnRvIGFuIGFwcHJvcHJpYXRlIHNldCBvZiBIVE1MXG4gKiBub2Rlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKSB7XG4gIC8vIFN0cmlwIG9mZiBvdXRlciB0YWcgd3JhcHBlciBmb3IgcHJvY2Vzc2luZyBiZWxvdy5cbiAgdmFyIHRhZyA9IG51bGw7XG5cbiAgaWYgKHRyZWUubGVuZ3RoID09PSAxICYmIHRyZWVbMF0udHlwZSA9PT0gXCJ0YWdcIikge1xuICAgIHRhZyA9IHRyZWVbMF0udGFnO1xuICAgIHRyZWUgPSB0cmVlWzBdLmJvZHk7XG4gIH0gLy8gQnVpbGQgdGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGluIHRoZSB0cmVlXG5cblxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbiQxKHRyZWUsIG9wdGlvbnMsIFwicm9vdFwiKTtcbiAgdmFyIGVxbk51bTtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDIgJiYgZXhwcmVzc2lvblsxXS5oYXNDbGFzcyhcInRhZ1wiKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggYXV0b21hdGljIGVxdWF0aW9uIG51bWJlcnMsIGUuZy4ge2dhdGhlcn0uXG4gICAgZXFuTnVtID0gZXhwcmVzc2lvbi5wb3AoKTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IFtdOyAvLyBDcmVhdGUgb25lIGJhc2Ugbm9kZSBmb3IgZWFjaCBjaHVuayBiZXR3ZWVuIHBvdGVudGlhbCBsaW5lIGJyZWFrcy5cbiAgLy8gVGhlIFRlWEJvb2sgW3AuMTczXSBzYXlzIFwiQSBmb3JtdWxhIHdpbGwgYmUgYnJva2VuIG9ubHkgYWZ0ZXIgYVxuICAvLyByZWxhdGlvbiBzeW1ib2wgbGlrZSAkPSQgb3IgJDwkIG9yICRcXHJpZ2h0YXJyb3ckLCBvciBhZnRlciBhIGJpbmFyeVxuICAvLyBvcGVyYXRpb24gc3ltYm9sIGxpa2UgJCskIG9yICQtJCBvciAkXFx0aW1lcyQsIHdoZXJlIHRoZSByZWxhdGlvbiBvclxuICAvLyBiaW5hcnkgb3BlcmF0aW9uIGlzIG9uIHRoZSBgYG91dGVyIGxldmVsJycgb2YgdGhlIGZvcm11bGEgKGkuZS4sIG5vdFxuICAvLyBlbmNsb3NlZCBpbiB7Li4ufSBhbmQgbm90IHBhcnQgb2YgYW4gXFxvdmVyIGNvbnN0cnVjdGlvbikuXCJcblxuICB2YXIgcGFydHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgaWYgKGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtYmluXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtcmVsXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJhbGxvd2JyZWFrXCIpKSB7XG4gICAgICAvLyBQdXQgYW55IHBvc3Qtb3BlcmF0b3IgZ2x1ZSBvbiBzYW1lIGxpbmUgYXMgb3BlcmF0b3IuXG4gICAgICAvLyBXYXRjaCBmb3IgXFxub2JyZWFrIGFsb25nIHRoZSB3YXksIGFuZCBzdG9wIGF0IFxcbmV3bGluZS5cbiAgICAgIHZhciBub2JyZWFrID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGggLSAxICYmIGV4cHJlc3Npb25baSArIDFdLmhhc0NsYXNzKFwibXNwYWNlXCIpICYmICFleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibm9icmVha1wiKSkge1xuICAgICAgICAgIG5vYnJlYWsgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIERvbid0IGFsbG93IGJyZWFrIGlmIFxcbm9icmVhayBhbW9uZyB0aGUgcG9zdC1vcGVyYXRvciBnbHVlLlxuXG5cbiAgICAgIGlmICghbm9icmVhaykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gICAgICAgIHBhcnRzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgLy8gV3JpdGUgdGhlIGxpbmUgZXhjZXB0IHRoZSBuZXdsaW5lXG4gICAgICBwYXJ0cy5wb3AoKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfSAvLyBQdXQgdGhlIG5ld2xpbmUgYXQgdGhlIHRvcCBsZXZlbFxuXG5cbiAgICAgIGNoaWxkcmVuLnB1c2goZXhwcmVzc2lvbltpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gIH0gLy8gTm93LCBpZiB0aGVyZSB3YXMgYSB0YWcsIGJ1aWxkIGl0IHRvbyBhbmQgYXBwZW5kIGl0IGFzIGEgZmluYWwgY2hpbGQuXG5cblxuICB2YXIgdGFnQ2hpbGQ7XG5cbiAgaWYgKHRhZykge1xuICAgIHRhZ0NoaWxkID0gYnVpbGRIVE1MVW5icmVha2FibGUoYnVpbGRFeHByZXNzaW9uJDEodGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfSBlbHNlIGlmIChlcW5OdW0pIHtcbiAgICBjaGlsZHJlbi5wdXNoKGVxbk51bSk7XG4gIH1cblxuICB2YXIgaHRtbE5vZGUgPSBtYWtlU3BhbiQxKFtcImthdGV4LWh0bWxcIl0sIGNoaWxkcmVuKTtcbiAgaHRtbE5vZGUuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpOyAvLyBBZGp1c3QgdGhlIHN0cnV0IG9mIHRoZSB0YWcgdG8gYmUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFsbCBjaGlsZHJlblxuICAvLyAodGhlIGhlaWdodCBvZiB0aGUgZW5jbG9zaW5nIGh0bWxOb2RlKSBmb3IgcHJvcGVyIHZlcnRpY2FsIGFsaWdubWVudC5cblxuICBpZiAodGFnQ2hpbGQpIHtcbiAgICB2YXIgc3RydXQgPSB0YWdDaGlsZC5jaGlsZHJlblswXTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGgpO1xuXG4gICAgaWYgKGh0bWxOb2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1odG1sTm9kZS5kZXB0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWxOb2RlO1xufVxuXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgZGF0YSBhYm91dCBNYXRoTUwgbm9kZXMuIFRoaXMgaXMgdGhlIE1hdGhNTCBlcXVpdmFsZW50XG4gKiBvZiB0aGUgdHlwZXMgaW4gZG9tVHJlZS5qcy4gU2luY2UgTWF0aE1MIGhhbmRsZXMgaXRzIG93biByZW5kZXJpbmcsIGFuZFxuICogc2luY2Ugd2UncmUgbWFpbmx5IHVzaW5nIE1hdGhNTCB0byBpbXByb3ZlIGFjY2Vzc2liaWxpdHksIHdlIGRvbid0IG1hbmFnZVxuICogYW55IG9mIHRoZSBzdHlsaW5nIHN0YXRlIHRoYXQgdGhlIHBsYWluIERPTSBub2RlcyBkby5cbiAqXG4gKiBUaGUgYHRvTm9kZWAgYW5kIGB0b01hcmt1cGAgZnVuY3Rpb25zIHdvcmsgc2ltaWxhcmx5IHRvIGhvdyB0aGV5IGRvIGluXG4gKiBkb21UcmVlLmpzLCBjcmVhdGluZyBuYW1lc3BhY2VkIERPTSBub2RlcyBhbmQgSFRNTCB0ZXh0IG1hcmt1cCByZXNwZWN0aXZlbHkuXG4gKi9cbmZ1bmN0aW9uIG5ld0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBnZW5lcmFsIHB1cnBvc2UgTWF0aE1MIG5vZGUgb2YgYW55IHR5cGUuIFRoZVxuICogY29uc3RydWN0b3IgcmVxdWlyZXMgdGhlIHR5cGUgb2Ygbm9kZSB0byBjcmVhdGUgKGZvciBleGFtcGxlLCBgXCJtb1wiYCBvclxuICogYFwibXNwYWNlXCJgLCBjb3JyZXNwb25kaW5nIHRvIGA8bW8+YCBhbmQgYDxtc3BhY2U+YCB0YWdzKS5cbiAqL1xuXG5jbGFzcyBNYXRoTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNoaWxkcmVuLCBjbGFzc2VzKSB7XG4gICAgdGhpcy50eXBlID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLiBNYXRoTUwgZGVwZW5kcyBvbiBhdHRyaWJ1dGVzIHRvIGNvbnZleSBhXG4gICAqIHNlbWFudGljIGNvbnRlbnQsIHNvIHRoaXMgaXMgdXNlZCBoZWF2aWx5LlxuICAgKi9cblxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLlxuICAgKi9cblxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgbm9kZS5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcyA9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIjwvXCIgKyB0aGlzLnR5cGUgKyBcIj5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBzdHJpbmcsIHNpbWlsYXIgdG8gaW5uZXJUZXh0LCBidXQgZXNjYXBlZC5cbiAgICovXG5cblxuICB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnRvVGV4dCgpKS5qb2luKFwiXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBwaWVjZSBvZiB0ZXh0LlxuICovXG5cbmNsYXNzIFRleHROb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dCBub2RlIGludG8gYSBET00gdGV4dCBub2RlLlxuICAgKi9cblxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGVzY2FwZWQgSFRNTCBtYXJrdXBcbiAgICogKHJlcHJlc2VudGluZyB0aGUgdGV4dCBpdHNlbGYpLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB1dGlscy5lc2NhcGUodGhpcy50b1RleHQoKSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIHN0cmluZ1xuICAgKiAocmVwcmVzZW50aW5nIHRoZSB0ZXh0IGl0c2VsZikuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnRleHQ7XG4gIH1cblxufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYWNlLCBidXQgbWF5IHJlbmRlciBhcyA8bXNwYWNlLi4uLz4gb3IgYXMgdGV4dCxcbiAqIGRlcGVuZGluZyBvbiB0aGUgd2lkdGguXG4gKi9cblxuY2xhc3MgU3BhY2VOb2RlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3Iod2lkdGgpIHtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMuY2hhcmFjdGVyID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDsgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELU1hdGhNTDItMjAwMDAzMjgvY2hhcHRlcjYuaHRtbFxuICAgIC8vIGZvciBhIHRhYmxlIG9mIHNwYWNlLWxpa2UgY2hhcmFjdGVycy4gIFdlIHVzZSBVbmljb2RlXG4gICAgLy8gcmVwcmVzZW50YXRpb25zIGluc3RlYWQgb2YgJkxvbmdOYW1lczsgYXMgaXQncyBub3QgY2xlYXIgaG93IHRvXG4gICAgLy8gbWFrZSB0aGUgbGF0dGVyIHZpYSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZS5cblxuICAgIGlmICh3aWR0aCA+PSAwLjA1NTU1ICYmIHdpZHRoIDw9IDAuMDU1NTYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDBhXCI7IC8vICZWZXJ5VGhpblNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gMC4xNjY2ICYmIHdpZHRoIDw9IDAuMTY2Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcIjsgLy8gJlRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjIyMiAmJiB3aWR0aCA8PSAwLjIyMjMpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XCI7IC8vICZNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjc3NyAmJiB3aWR0aCA8PSAwLjI3NzgpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XFx1MjAwYVwiOyAvLyAmVGhpY2tTcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjA1NTU2ICYmIHdpZHRoIDw9IC0wLjA1NTU1KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwYVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjE2NjcgJiYgd2lkdGggPD0gLTAuMTY2Nikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjIyMjMgJiYgd2lkdGggPD0gLTAuMjIyMikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwNWZcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZU1lZGl1bVNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gLTAuMjc3OCAmJiB3aWR0aCA8PSAtMC4yNzc3KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVGhpY2tTcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY2hhcmFjdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsIFwibXNwYWNlXCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0odGhpcy53aWR0aCkpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgbWFrZUVtKHRoaXMud2lkdGgpICsgXCJcXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIgXCI7XG4gICAgfVxuICB9XG5cbn1cblxudmFyIG1hdGhNTFRyZWUgPSB7XG4gIE1hdGhOb2RlLFxuICBUZXh0Tm9kZSxcbiAgU3BhY2VOb2RlLFxuICBuZXdEb2N1bWVudEZyYWdtZW50XG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb252ZXJ0cyBhIHBhcnNlIHRyZWUgaW50byBhIGNvcnJlc3BvbmRpbmcgTWF0aE1MIHRyZWUuIFRoZSBtYWluXG4gKiBlbnRyeSBwb2ludCBpcyB0aGUgYGJ1aWxkTWF0aE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlIGZyb20gdGhlXG4gKiBwYXJzZXIuXG4gKi9cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzeW1ib2xzW21vZGVdW3RleHRdICYmIHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZSAmJiB0ZXh0LmNoYXJDb2RlQXQoMCkgIT09IDB4RDgzNSAmJiAhKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBvcHRpb25zICYmIChvcHRpb25zLmZvbnRGYW1pbHkgJiYgb3B0aW9ucy5mb250RmFtaWx5LnNsaWNlKDQsIDYpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zbGljZSg0LCA2KSA9PT0gXCJ0dFwiKSkpIHtcbiAgICB0ZXh0ID0gc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleHQpO1xufTtcbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4gYXJyYXkgb2Ygbm9kZXMgaW4gYW4gPG1yb3c+IG5vZGUgaWYgbmVlZGVkLCBpLmUuLFxuICogdW5sZXNzIHRoZSBhcnJheSBoYXMgbGVuZ3RoIDEuICBBbHdheXMgcmV0dXJucyBhIHNpbmdsZSBub2RlLlxuICovXG5cbnZhciBtYWtlUm93ID0gZnVuY3Rpb24gbWFrZVJvdyhib2R5KSB7XG4gIGlmIChib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBib2R5WzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgYm9keSk7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIG1hdGggdmFyaWFudCBhcyBhIHN0cmluZyBvciBudWxsIGlmIG5vbmUgaXMgcmVxdWlyZWQuXG4gKi9cblxudmFyIGdldFZhcmlhbnQgPSBmdW5jdGlvbiBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIEhhbmRsZSBcXHRleHQuLi4gZm9udCBzcGVjaWZpZXJzIGFzIGJlc3Qgd2UgY2FuLlxuICAvLyBNYXRoTUwgaGFzIGEgbGltaXRlZCBsaXN0IG9mIGFsbG93YWJsZSBtYXRodmFyaWFudCBzcGVjaWZpZXJzOyBzZWVcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL01hdGhNTDMvY2hhcHRlcjMuaHRtbCNwcmVzbS5jb21tYXR0XG4gIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHNmXCIpIHtcbiAgICBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWJvbGQtaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZi1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgICAgcmV0dXJuIFwiYm9sZC1zYW5zLXNlcmlmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIHJldHVybiBcIml0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfVxuXG4gIHZhciBmb250ID0gb3B0aW9ucy5mb250O1xuXG4gIGlmICghZm9udCB8fCBmb250ID09PSBcIm1hdGhub3JtYWxcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBncm91cC5tb2RlO1xuXG4gIGlmIChmb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJib2xkc3ltYm9sXCIpIHtcbiAgICByZXR1cm4gZ3JvdXAudHlwZSA9PT0gXCJ0ZXh0b3JkXCIgPyBcImJvbGRcIiA6IFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGJiXCIpIHtcbiAgICByZXR1cm4gXCJkb3VibGUtc3RydWNrXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoZnJha1wiKSB7XG4gICAgcmV0dXJuIFwiZnJha3R1clwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHNjclwiIHx8IGZvbnQgPT09IFwibWF0aGNhbFwiKSB7XG4gICAgLy8gTWF0aE1MIG1ha2VzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gc2NyaXB0IGFuZCBjYWxsaWdyYXBoaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlKSB7XG4gICAgdGV4dCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIGdyb3VwLnR5cGUgPT09IFwibW9cIikge1xuICAgICAgLy8gV2hlbiBUZVggd3JpdGVycyB3YW50IHRvIHN1cHByZXNzIHNwYWNpbmcgb24gYW4gb3BlcmF0b3IsXG4gICAgICAvLyB0aGV5IG9mdGVuIHB1dCB0aGUgb3BlcmF0b3IgYnkgaXRzZWxmIGluc2lkZSBicmFjZXMuXG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtncm91cF07XG4gIH1cblxuICB2YXIgZ3JvdXBzID0gW107XG4gIHZhciBsYXN0R3JvdXA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9ncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvbltpXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoX2dyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUgJiYgbGFzdEdyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICBsYXN0R3JvdXAuY2hpbGRyZW4ucHVzaCguLi5fZ3JvdXAuY2hpbGRyZW4pO1xuICAgICAgICBjb250aW51ZTsgLy8gQ29uY2F0ZW5hdGUgYWRqYWNlbnQgPG1uPnNcbiAgICAgIH0gZWxzZSBpZiAoX2dyb3VwLnR5cGUgPT09ICdtbicgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgbGFzdEdyb3VwLmNoaWxkcmVuLnB1c2goLi4uX2dyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgY29udGludWU7IC8vIENvbmNhdGVuYXRlIDxtbj4uLi48L21uPiBmb2xsb3dlZCBieSA8bWk+LjwvbWk+XG4gICAgICB9IGVsc2UgaWYgKF9ncm91cC50eXBlID09PSAnbWknICYmIF9ncm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIGxhc3RHcm91cC5jaGlsZHJlbi5wdXNoKC4uLl9ncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobGFzdEdyb3VwLnR5cGUgPT09ICdtaScgJiYgbGFzdEdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgbGFzdENoaWxkID0gbGFzdEdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQgaW5zdGFuY2VvZiBUZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gJ1xcdTAzMzgnICYmIChfZ3JvdXAudHlwZSA9PT0gJ21vJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21pJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21uJykpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgaWYgKF9jaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIF9jaGlsZC50ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIE92ZXJsYXkgd2l0aCBjb21iaW5pbmcgY2hhcmFjdGVyIGxvbmcgc29saWR1c1xuICAgICAgICAgICAgX2NoaWxkLnRleHQgPSBfY2hpbGQudGV4dC5zbGljZSgwLCAxKSArIFwiXFx1MDMzOFwiICsgX2NoaWxkLnRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICBncm91cHMucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ3JvdXBzLnB1c2goX2dyb3VwKTtcbiAgICBsYXN0R3JvdXAgPSBfZ3JvdXA7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufTtcbi8qKlxuICogRXF1aXZhbGVudCB0byBidWlsZEV4cHJlc3Npb24sIGJ1dCB3cmFwcyB0aGUgZWxlbWVudHMgaW4gYW4gPG1yb3c+XG4gKiBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUuICBSZXR1cm5zIGEgc2luZ2xlIG5vZGUgaW5zdGVhZCBvZiBhbiBhcnJheS5cbiAqL1xuXG52YXIgYnVpbGRFeHByZXNzaW9uUm93ID0gZnVuY3Rpb24gYnVpbGRFeHByZXNzaW9uUm93KGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApIHtcbiAgcmV0dXJuIG1ha2VSb3coYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApKTtcbn07XG4vKipcbiAqIFRha2VzIGEgZ3JvdXAgZnJvbSB0aGUgcGFyc2VyIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZ3JvdXBCdWlsZGVycyBmdW5jdGlvblxuICogb24gaXQgdG8gcHJvZHVjZSBhIE1hdGhNTCBub2RlLlxuICovXG5cbnZhciBidWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucykge1xuICBpZiAoIWdyb3VwKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiKTtcbiAgfVxuXG4gIGlmIChfbWF0aG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBpc0Rpc3BsYXlNb2RlLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBUT0RPOiBNYWtlIGEgcGFzcyB0aHJ1IHRoZSBNYXRoTUwgc2ltaWxhciB0byBidWlsZEhUTUwudHJhdmVyc2VOb25TcGFjZU5vZGVzXG4gIC8vIGFuZCBhZGQgc3BhY2luZyBub2Rlcy4gVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBhZGphY2VudCB0byBtYXRoIG9wZXJhdG9yc1xuICAvLyBsaWtlIFxcc2luIG9yIFxcbGltIG9yIHRvIHN1YnN1cCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbWF0aCBvcGVyYXRvcnMuXG4gIC8vIE1hdGhNTCB0YWtlcyBjYXJlIG9mIHRoZSBvdGhlciBzcGFjaW5nIGlzc3Vlcy5cbiAgLy8gV3JhcCB1cCB0aGUgZXhwcmVzc2lvbiBpbiBhbiBtcm93IHNvIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgc2VtYW50aWNzXG4gIC8vIHRhZyBjb3JyZWN0bHksIHVubGVzcyBpdCdzIGEgc2luZ2xlIDxtcm93PiBvciA8bXRhYmxlPi5cblxuICB2YXIgd3JhcHBlcjtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEgJiYgZXhwcmVzc2lvblswXSBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIHV0aWxzLmNvbnRhaW5zKFtcIm1yb3dcIiwgXCJtdGFibGVcIl0sIGV4cHJlc3Npb25bMF0udHlwZSkpIHtcbiAgICB3cmFwcGVyID0gZXhwcmVzc2lvblswXTtcbiAgfSBlbHNlIHtcbiAgICB3cmFwcGVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIsIGV4cHJlc3Npb24pO1xuICB9IC8vIEJ1aWxkIGEgVGVYIGFubm90YXRpb24gb2YgdGhlIHNvdXJjZVxuXG5cbiAgdmFyIGFubm90YXRpb24gPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcImFubm90YXRpb25cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleEV4cHJlc3Npb24pXSk7XG4gIGFubm90YXRpb24uc2V0QXR0cmlidXRlKFwiZW5jb2RpbmdcIiwgXCJhcHBsaWNhdGlvbi94LXRleFwiKTtcbiAgdmFyIHNlbWFudGljcyA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwic2VtYW50aWNzXCIsIFt3cmFwcGVyLCBhbm5vdGF0aW9uXSk7XG4gIHZhciBtYXRoID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtYXRoXCIsIFtzZW1hbnRpY3NdKTtcbiAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIik7XG5cbiAgaWYgKGlzRGlzcGxheU1vZGUpIHtcbiAgICBtYXRoLnNldEF0dHJpYnV0ZShcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcbiAgfSAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuXG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBmb3JNYXRobWxPbmx5ID8gXCJrYXRleFwiIDogXCJrYXRleC1tYXRobWxcIjsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3Bhbihbd3JhcHBlckNsYXNzXSwgW21hdGhdKTtcbn1cblxudmFyIG9wdGlvbnNGcm9tU2V0dGluZ3MgPSBmdW5jdGlvbiBvcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKSB7XG4gIHJldHVybiBuZXcgT3B0aW9ucyh7XG4gICAgc3R5bGU6IHNldHRpbmdzLmRpc3BsYXlNb2RlID8gU3R5bGUkMS5ESVNQTEFZIDogU3R5bGUkMS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBkaXNwbGF5V3JhcCA9IGZ1bmN0aW9uIGRpc3BsYXlXcmFwKG5vZGUsIHNldHRpbmdzKSB7XG4gIGlmIChzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgIHZhciBjbGFzc2VzID0gW1wia2F0ZXgtZGlzcGxheVwiXTtcblxuICAgIGlmIChzZXR0aW5ncy5sZXFubykge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwibGVxbm9cIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmZsZXFuKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJmbGVxblwiKTtcbiAgICB9XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgW25vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIGJ1aWxkVHJlZSA9IGZ1bmN0aW9uIGJ1aWxkVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIHRydWUpO1xuICB9IGVsc2UgaWYgKHNldHRpbmdzLm91dHB1dCA9PT0gXCJodG1sXCIpIHtcbiAgICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRoTUxOb2RlID0gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIGZhbHNlKTtcblxuICAgIHZhciBfaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG5cbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW21hdGhNTE5vZGUsIF9odG1sTm9kZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbnZhciBidWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gIHZhciBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIHJldHVybiBkaXNwbGF5V3JhcChrYXRleE5vZGUsIHNldHRpbmdzKTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gYnVpbGRNYXRoTUwuanMgYW5kIGJ1aWxkSFRNTC5qc1xuICogZm9yIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgcmVuZGVyZWQgZnJvbSBTVkcgZmlsZXNcbiAqIGFuZCBvdGhlciBDU1MgdHJpY2tlcnkuXG4gKi9cbnZhciBzdHJldGNoeUNvZGVQb2ludCA9IHtcbiAgd2lkZWhhdDogXCJeXCIsXG4gIHdpZGVjaGVjazogXCLLh1wiLFxuICB3aWRldGlsZGU6IFwiflwiLFxuICB1dGlsZGU6IFwiflwiLFxuICBvdmVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgdW5kZXJsZWZ0YXJyb3c6IFwiXFx1MjE5MFwiLFxuICB4bGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgb3ZlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB4cmlnaHRhcnJvdzogXCJcXHUyMTkyXCIsXG4gIHVuZGVyYnJhY2U6IFwiXFx1MjNkZlwiLFxuICBvdmVyYnJhY2U6IFwiXFx1MjNkZVwiLFxuICBvdmVyZ3JvdXA6IFwiXFx1MjNlMFwiLFxuICB1bmRlcmdyb3VwOiBcIlxcdTIzZTFcIixcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBcIlxcdTIxOTRcIixcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHhsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIE92ZXJyaWdodGFycm93OiBcIlxcdTIxZDJcIixcbiAgeFJpZ2h0YXJyb3c6IFwiXFx1MjFkMlwiLFxuICBvdmVybGVmdGhhcnBvb246IFwiXFx1MjFiY1wiLFxuICB4bGVmdGhhcnBvb251cDogXCJcXHUyMWJjXCIsXG4gIG92ZXJyaWdodGhhcnBvb246IFwiXFx1MjFjMFwiLFxuICB4cmlnaHRoYXJwb29udXA6IFwiXFx1MjFjMFwiLFxuICB4TGVmdGFycm93OiBcIlxcdTIxZDBcIixcbiAgeExlZnRyaWdodGFycm93OiBcIlxcdTIxZDRcIixcbiAgeGhvb2tsZWZ0YXJyb3c6IFwiXFx1MjFhOVwiLFxuICB4aG9va3JpZ2h0YXJyb3c6IFwiXFx1MjFhYVwiLFxuICB4bWFwc3RvOiBcIlxcdTIxYTZcIixcbiAgeHJpZ2h0aGFycG9vbmRvd246IFwiXFx1MjFjMVwiLFxuICB4bGVmdGhhcnBvb25kb3duOiBcIlxcdTIxYmRcIixcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBcIlxcdTIxY2NcIixcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBcIlxcdTIxY2JcIixcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFwiXFx1MjE5ZVwiLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFwiXFx1MjFhMFwiLFxuICB4bG9uZ2VxdWFsOiBcIj1cIixcbiAgeHRvZnJvbTogXCJcXHUyMWM0XCIsXG4gIHhyaWdodGxlZnRhcnJvd3M6IFwiXFx1MjFjNFwiLFxuICB4cmlnaHRlcXVpbGlicml1bTogXCJcXHUyMWNjXCIsXG4gIC8vIE5vdCBhIHBlcmZlY3QgbWF0Y2guXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFwiXFx1MjFjYlwiLFxuICAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG4gIFwiXFxcXGNkcmlnaHRhcnJvd1wiOiBcIlxcdTIxOTJcIixcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogXCJcXHUyMTkwXCIsXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFwiPVwiXG59O1xuXG52YXIgbWF0aE1Mbm9kZSA9IGZ1bmN0aW9uIG1hdGhNTG5vZGUobGFiZWwpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShzdHJldGNoeUNvZGVQb2ludFtsYWJlbC5yZXBsYWNlKC9eXFxcXC8sICcnKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgXCJcXFxcY2RyaWdodGFycm93XCI6IFtbXCJyaWdodGFycm93XCJdLCAzLjAsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgLy8gQ0QgbWlud3dpZHRoMi41cGNcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogW1tcImxlZnRhcnJvd1wiXSwgMy4wLCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIE92ZXJyaWdodGFycm93OiBbW1wiZG91YmxlcmlnaHRhcnJvd1wiXSwgMC44ODgsIDU2MCwgXCJ4TWF4WU1pblwiXSxcbiAgeFJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4TGVmdGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNaW5ZTWluXCJdLFxuICBvdmVybGVmdGhhcnBvb246IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29udXA6IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29uZG93bjogW1tcImxlZnRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgb3ZlcnJpZ2h0aGFycG9vbjogW1tcInJpZ2h0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeHJpZ2h0aGFycG9vbnVwOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29uZG93bjogW1tcInJpZ2h0aGFycG9vbmRvd25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhsb25nZXF1YWw6IFtbXCJsb25nZXF1YWxcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFtbXCJsb25nZXF1YWxcIl0sIDMuMCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZGxlZnRhcnJvdzogW1tcInR3b2hlYWRsZWZ0YXJyb3dcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIHh0d29oZWFkcmlnaHRhcnJvdzogW1tcInR3b2hlYWRyaWdodGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNYXhZTWluXCJdLFxuICBvdmVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgb3ZlcmJyYWNlOiBbW1wibGVmdGJyYWNlXCIsIFwibWlkYnJhY2VcIiwgXCJyaWdodGJyYWNlXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVyYnJhY2U6IFtbXCJsZWZ0YnJhY2V1bmRlclwiLCBcIm1pZGJyYWNldW5kZXJcIiwgXCJyaWdodGJyYWNldW5kZXJcIl0sIDEuNiwgNTQ4XSxcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dcIl0sIDAuODg4LCA1MjJdLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAxLjc1LCA1MjJdLFxuICB4TGVmdHJpZ2h0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIiwgXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjc1LCA1NjBdLFxuICB4cmlnaHRsZWZ0aGFycG9vbnM6IFtbXCJsZWZ0aGFycG9vbmRvd25wbHVzXCIsIFwicmlnaHRoYXJwb29ucGx1c1wiXSwgMS43NSwgNzE2XSxcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25wbHVzXCIsIFwicmlnaHRoYXJwb29uZG93bnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhob29rbGVmdGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRob29rXCJdLCAxLjA4LCA1MjJdLFxuICB4aG9va3JpZ2h0YXJyb3c6IFtbXCJsZWZ0aG9va1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuMDgsIDUyMl0sXG4gIG92ZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICB1bmRlcmxpbmVzZWdtZW50OiBbW1wibGVmdGxpbmVzZWdtZW50XCIsIFwicmlnaHRsaW5lc2VnbWVudFwiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJncm91cDogW1tcImxlZnRncm91cFwiLCBcInJpZ2h0Z3JvdXBcIl0sIDAuODg4LCAzNDJdLFxuICB1bmRlcmdyb3VwOiBbW1wibGVmdGdyb3VwdW5kZXJcIiwgXCJyaWdodGdyb3VwdW5kZXJcIl0sIDAuODg4LCAzNDJdLFxuICB4bWFwc3RvOiBbW1wibGVmdG1hcHN0b1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuNSwgNTIyXSxcbiAgeHRvZnJvbTogW1tcImxlZnRUb0Zyb21cIiwgXCJyaWdodFRvRnJvbVwiXSwgMS43NSwgNTI4XSxcbiAgLy8gVGhlIG5leHQgdGhyZWUgYXJyb3dzIGFyZSBmcm9tIHRoZSBtaGNoZW0gcGFja2FnZS5cbiAgLy8gSW4gbWhjaGVtLnN0eSwgbWluLWxlbmd0aCBpcyAyLjBlbS4gQnV0IHRoZXNlIGFycm93cyBtaWdodCBhcHBlYXIgaW4gdGhlXG4gIC8vIGRvY3VtZW50IGFzIFxceHJpZ2h0YXJyb3cgb3IgXFx4cmlnaHRsZWZ0aGFycG9vbnMuIFRob3NlIGhhdmVcbiAgLy8gbWluLWxlbmd0aCA9IDEuNzVlbSwgc28gd2Ugc2V0IG1pbi1sZW5ndGggb24gdGhlc2UgbmV4dCB0aHJlZSB0byBtYXRjaC5cbiAgeHJpZ2h0bGVmdGFycm93czogW1tcImJhcmFib3ZlbGVmdGFycm93XCIsIFwicmlnaHRhcnJvd2Fib3ZlYmFyXCJdLCAxLjc1LCA5MDFdLFxuICB4cmlnaHRlcXVpbGlicml1bTogW1tcImJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vblwiLCBcInJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXJcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFtbXCJzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb25cIiwgXCJzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyXCJdLCAxLjc1LCA3MTZdXG59O1xuXG52YXIgZ3JvdXBMZW5ndGggPSBmdW5jdGlvbiBncm91cExlbmd0aChhcmcpIHtcbiAgaWYgKGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICByZXR1cm4gYXJnLmJvZHkubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG52YXIgc3ZnU3BhbiA9IGZ1bmN0aW9uIHN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICBmdW5jdGlvbiBidWlsZFN2Z1NwYW5fKCkge1xuICAgIHZhciB2aWV3Qm94V2lkdGggPSA0MDAwMDA7IC8vIGRlZmF1bHRcblxuICAgIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIndpZGVoYXRcIiwgXCJ3aWRlY2hlY2tcIiwgXCJ3aWRldGlsZGVcIiwgXCJ1dGlsZGVcIl0sIGxhYmVsKSkge1xuICAgICAgLy8gRWFjaCB0eXBlIGluIHRoZSBgaWZgIHN0YXRlbWVudCBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlIFBhcnNlTm9kZVxuICAgICAgLy8gdHlwZXMgYmVsb3cuIFRoaXMgbmFycm93aW5nIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyBgZ3JwLmJhc2VgLlxuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgdmFyIGdycCA9IGdyb3VwOyAvLyBUaGVyZSBhcmUgZm91ciBTVkcgaW1hZ2VzIGF2YWlsYWJsZSBmb3IgZWFjaCBmdW5jdGlvbi5cbiAgICAgIC8vIENob29zZSBhIHRhbGxlciBpbWFnZSB3aGVuIHRoZXJlIGFyZSBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICAgIHZhciBudW1DaGFycyA9IGdyb3VwTGVuZ3RoKGdycC5iYXNlKTtcbiAgICAgIHZhciB2aWV3Qm94SGVpZ2h0O1xuICAgICAgdmFyIHBhdGhOYW1lO1xuXG4gICAgICB2YXIgX2hlaWdodDtcblxuICAgICAgaWYgKG51bUNoYXJzID4gNSkge1xuICAgICAgICBpZiAobGFiZWwgPT09IFwid2lkZWhhdFwiIHx8IGxhYmVsID09PSBcIndpZGVjaGVja1wiKSB7XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IDQyMDtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSAyMzY0O1xuICAgICAgICAgIF9oZWlnaHQgPSAwLjQyO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBcIjRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gMzEyO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNDA7XG4gICAgICAgICAgX2hlaWdodCA9IDAuMzQ7XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlNFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW1nSW5kZXggPSBbMSwgMSwgMiwgMiwgMywgM11bbnVtQ2hhcnNdO1xuXG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgMTA2MiwgMjM2NCwgMjM2NCwgMjM2NF1baW1nSW5kZXhdO1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSBbMCwgMjM5LCAzMDAsIDM2MCwgNDIwXVtpbWdJbmRleF07XG4gICAgICAgICAgX2hlaWdodCA9IFswLCAwLjI0LCAwLjMsIDAuMywgMC4zNiwgMC40Ml1baW1nSW5kZXhdO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBpbWdJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgNjAwLCAxMDMzLCAyMzM5LCAyMzQwXVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyNjAsIDI4NiwgMzA2LCAzMTJdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjYsIDAuMjg2LCAwLjMsIDAuMzA2LCAwLjM0XVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlXCIgKyBpbWdJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gICAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodCksXG4gICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodCxcbiAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwibm9uZVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhbnMgPSBbXTtcbiAgICAgIHZhciBkYXRhID0ga2F0ZXhJbWFnZXNEYXRhW2xhYmVsXTtcbiAgICAgIHZhciBbcGF0aHMsIF9taW5XaWR0aCwgX3ZpZXdCb3hIZWlnaHRdID0gZGF0YTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgUGF0aE5vZGUocGF0aHNbaV0pO1xuXG4gICAgICAgIHZhciBfc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtfcGF0aF0sIHtcbiAgICAgICAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodDIpLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oX2hlaWdodDIpO1xuICAgICAgICAgIHNwYW5zLnB1c2goX3NwYW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCJdLCBzcGFucywgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgIGhlaWdodDogX2hlaWdodDJcbiAgICAgIH07XG4gICAgfVxuICB9IC8vIGJ1aWxkU3ZnU3Bhbl8oKVxuXG5cbiAgdmFyIHtcbiAgICBzcGFuLFxuICAgIG1pbldpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gYnVpbGRTdmdTcGFuXygpOyAvLyBOb3RlIHRoYXQgd2UgYXJlIHJldHVybmluZyBzcGFuLmRlcHRoID0gMC5cbiAgLy8gQW55IGFkanVzdG1lbnRzIHJlbGF0aXZlIHRvIHRoZSBiYXNlbGluZSBtdXN0IGJlIGRvbmUgaW4gYnVpbGRIVE1MLlxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuXG4gIGlmIChtaW5XaWR0aCA+IDApIHtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gbWFrZUVtKG1pbldpZHRoKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGVuY2xvc2VTcGFuID0gZnVuY3Rpb24gZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB0b3BQYWQsIGJvdHRvbVBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBcXGZib3gsIG9yIFxcYW5nbFxuICB2YXIgaW1nO1xuICB2YXIgdG90YWxIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIHRvcFBhZCArIGJvdHRvbVBhZDtcblxuICBpZiAoL2Zib3h8Y29sb3J8YW5nbC8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHRvdGFsSGVpZ2h0KVxuICAgIH0pO1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaW1nLmhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICBpbWcuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgcmV0dXJuIGltZztcbn07XG5cbnZhciBzdHJldGNoeSA9IHtcbiAgZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGUsXG4gIHN2Z1NwYW5cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBub2RlIGlzIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGl0IHdpdGggc3RyaWN0ZXJcbiAqIHR5cGluZy4gVGhyb3dzIGlmIHRoZSBub2RlJ3MgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZVR5cGUobm9kZSwgdHlwZSkge1xuICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSB0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFwiICsgdHlwZSArIFwiLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9IC8vICRGbG93Rml4TWUsID49MC4xMjVcblxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICB2YXIgdHlwZWROb2RlID0gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKTtcblxuICBpZiAoIXR5cGVkTm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKSB7XG4gIGlmIChub2RlICYmIChub2RlLnR5cGUgPT09IFwiYXRvbVwiIHx8IE5PTl9BVE9NUy5oYXNPd25Qcm9wZXJ0eShub2RlLnR5cGUpKSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seSBcImFjY2VudFwiLCBidXRcbi8vIGFsc28gXCJzdXBzdWJcIiBzaW5jZSBhbiBhY2NlbnQgY2FuIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG52YXIgaHRtbEJ1aWxkZXIkYSA9IChncnAsIG9wdGlvbnMpID0+IHtcbiAgLy8gQWNjZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBydWxlIDEyLlxuICB2YXIgYmFzZTtcbiAgdmFyIGdyb3VwO1xuICB2YXIgc3VwU3ViR3JvdXA7XG5cbiAgaWYgKGdycCAmJiBncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIG91ciBiYXNlIGlzIGEgY2hhcmFjdGVyIGJveCwgYW5kIHdlIGhhdmUgc3VwZXJzY3JpcHRzIGFuZFxuICAgIC8vIHN1YnNjcmlwdHMsIHRoZSBzdXBzdWIgd2lsbCBkZWZlciB0byB1cy4gSW4gcGFydGljdWxhciwgd2Ugd2FudFxuICAgIC8vIHRvIGF0dGFjaCB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHRvIHRoZSBpbm5lciBib2R5IChzb1xuICAgIC8vIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgd29uJ3QgYmVcbiAgICAvLyBhZmZlY3RlZCBieSB0aGUgaGVpZ2h0IG9mIHRoZSBhY2NlbnQpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnlcbiAgICAvLyBzdGlja2luZyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiwgYW5kXG4gICAgLy8gcmVuZGVyaW5nIHRoYXQsIHdoaWxlIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgdGhlIGFjY2VudCBpcy5cbiAgICAvLyBUaGUgcmVhbCBhY2NlbnQgZ3JvdXAgaXMgdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiYWNjZW50XCIpOyAvLyBUaGUgY2hhcmFjdGVyIGJveCBpcyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGdyb3VwXG5cbiAgICBiYXNlID0gZ3JvdXAuYmFzZTsgLy8gU3RpY2sgdGhlIGNoYXJhY3RlciBib3ggaW50byB0aGUgYmFzZSBvZiB0aGUgc3Vwc3ViIGdyb3VwXG5cbiAgICBncnAuYmFzZSA9IGJhc2U7IC8vIFJlcmVuZGVyIHRoZSBzdXBzdWIgZ3JvdXAgd2l0aCBpdHMgbmV3IGJhc2UsIGFuZCBzdG9yZSB0aGF0XG4gICAgLy8gcmVzdWx0LlxuXG4gICAgc3VwU3ViR3JvdXAgPSBhc3NlcnRTcGFuKGJ1aWxkR3JvdXAkMShncnAsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgZ3JwLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRHcm91cCQxKGJhc2UsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBEb2VzIHRoZSBhY2NlbnQgbmVlZCB0byBzaGlmdCBmb3IgdGhlIHNrZXcgb2YgYSBjaGFyYWN0ZXI/XG5cbiAgdmFyIG11c3RTaGlmdCA9IGdyb3VwLmlzU2hpZnR5ICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJhc2UpOyAvLyBDYWxjdWxhdGUgdGhlIHNrZXcgb2YgdGhlIGFjY2VudC4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgbGluZSBcIklmIHRoZVxuICAvLyBudWNsZXVzIGlzIG5vdCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGxldCBzID0gMDsgb3RoZXJ3aXNlIHNldCBzIHRvIHRoZVxuICAvLyBrZXJuIGFtb3VudCBmb3IgdGhlIG51Y2xldXMgZm9sbG93ZWQgYnkgdGhlIFxcc2tld2NoYXIgb2YgaXRzIGZvbnQuXCJcbiAgLy8gTm90ZSB0aGF0IG91ciBza2V3IG1ldHJpY3MgYXJlIGp1c3QgdGhlIGtlcm4gYmV0d2VlbiBlYWNoIGNoYXJhY3RlclxuICAvLyBhbmQgdGhlIHNrZXdjaGFyLlxuXG4gIHZhciBza2V3ID0gMDtcblxuICBpZiAobXVzdFNoaWZ0KSB7XG4gICAgLy8gSWYgdGhlIGJhc2UgaXMgYSBjaGFyYWN0ZXIgYm94LCB0aGVuIHdlIHdhbnQgdGhlIHNrZXcgb2YgdGhlXG4gICAgLy8gaW5uZXJtb3N0IGNoYXJhY3Rlci4gVG8gZG8gdGhhdCwgd2UgZmluZCB0aGUgaW5uZXJtb3N0IGNoYXJhY3RlcjpcbiAgICB2YXIgYmFzZUNoYXIgPSB1dGlscy5nZXRCYXNlRWxlbShiYXNlKTsgLy8gVGhlbiwgd2UgcmVuZGVyIGl0cyBncm91cCB0byBnZXQgdGhlIHN5bWJvbCBpbnNpZGUgaXRcblxuICAgIHZhciBiYXNlR3JvdXAgPSBidWlsZEdyb3VwJDEoYmFzZUNoYXIsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBGaW5hbGx5LCB3ZSBwdWxsIHRoZSBza2V3IG9mZiBvZiB0aGUgc3ltYm9sLlxuXG4gICAgc2tldyA9IGFzc2VydFN5bWJvbERvbU5vZGUoYmFzZUdyb3VwKS5za2V3OyAvLyBOb3RlIHRoYXQgd2Ugbm93IHRocm93IGF3YXkgYmFzZUdyb3VwLCBiZWNhdXNlIHRoZSBsYXllcnMgd2VcbiAgICAvLyByZW1vdmVkIHdpdGggZ2V0QmFzZUVsZW0gbWlnaHQgY29udGFpbiB0aGluZ3MgbGlrZSBcXGNvbG9yIHdoaWNoXG4gICAgLy8gd2UgY2FuJ3QgZ2V0IHJpZCBvZi5cbiAgICAvLyBUT0RPKGVtaWx5KTogRmluZCBhIGJldHRlciB3YXkgdG8gZ2V0IHRoZSBza2V3XG4gIH1cblxuICB2YXIgYWNjZW50QmVsb3cgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcY1wiOyAvLyBjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCB0aGUgYWNjZW50XG5cbiAgdmFyIGNsZWFyYW5jZSA9IGFjY2VudEJlbG93ID8gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoIDogTWF0aC5taW4oYm9keS5oZWlnaHQsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTsgLy8gQnVpbGQgdGhlIGFjY2VudFxuXG4gIHZhciBhY2NlbnRCb2R5O1xuXG4gIGlmICghZ3JvdXAuaXNTdHJldGNoeSkge1xuICAgIHZhciBhY2NlbnQ7XG4gICAgdmFyIHdpZHRoO1xuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx2ZWNcIikge1xuICAgICAgLy8gQmVmb3JlIHZlcnNpb24gMC45LCBcXHZlYyB1c2VkIHRoZSBjb21iaW5pbmcgZm9udCBnbHlwaCBVKzIwRDcuXG4gICAgICAvLyBCdXQgYnJvd3NlcnMsIGVzcGVjaWFsbHkgU2FmYXJpLCBhcmUgbm90IGNvbnNpc3RlbnQgaW4gaG93IHRoZXlcbiAgICAgIC8vIHJlbmRlciBjb21iaW5pbmcgY2hhcmFjdGVycyB3aGVuIG5vdCBwcmVjZWRlZCBieSBhIGNoYXJhY3Rlci5cbiAgICAgIC8vIFNvIG5vdyB3ZSB1c2UgYW4gU1ZHLlxuICAgICAgLy8gSWYgU2FmYXJpIHJlZm9ybXMsIHdlIHNob3VsZCBjb25zaWRlciByZXZlcnRpbmcgdG8gdGhlIGdseXBoLlxuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKFwidmVjXCIsIG9wdGlvbnMpO1xuICAgICAgd2lkdGggPSBidWlsZENvbW1vbi5zdmdEYXRhLnZlY1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24ubWFrZU9yZCh7XG4gICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgIHRleHQ6IGdyb3VwLmxhYmVsXG4gICAgICB9LCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICBhY2NlbnQgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGFjY2VudCk7IC8vIFJlbW92ZSB0aGUgaXRhbGljIGNvcnJlY3Rpb24gb2YgdGhlIGFjY2VudCwgYmVjYXVzZSBpdCBvbmx5IHNlcnZlcyB0b1xuICAgICAgLy8gc2hpZnQgdGhlIGFjY2VudCBvdmVyIHRvIGEgcGxhY2Ugd2UgZG9uJ3Qgd2FudC5cblxuICAgICAgYWNjZW50Lml0YWxpYyA9IDA7XG4gICAgICB3aWR0aCA9IGFjY2VudC53aWR0aDtcblxuICAgICAgaWYgKGFjY2VudEJlbG93KSB7XG4gICAgICAgIGNsZWFyYW5jZSArPSBhY2NlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFjY2VudC1ib2R5XCJdLCBbYWNjZW50XSk7IC8vIFwiRnVsbFwiIGFjY2VudHMgZXhwYW5kIHRoZSB3aWR0aCBvZiB0aGUgcmVzdWx0aW5nIHN5bWJvbCB0byBiZVxuICAgIC8vIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgYWNjZW50LCBhbmQgb3ZlcmxhcCBkaXJlY3RseSBvbnRvIHRoZVxuICAgIC8vIGNoYXJhY3RlciB3aXRob3V0IGFueSB2ZXJ0aWNhbCBvZmZzZXQuXG5cbiAgICB2YXIgYWNjZW50RnVsbCA9IGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiO1xuXG4gICAgaWYgKGFjY2VudEZ1bGwpIHtcbiAgICAgIGFjY2VudEJvZHkuY2xhc3Nlcy5wdXNoKCdhY2NlbnQtZnVsbCcpO1xuICAgICAgY2xlYXJhbmNlID0gYm9keS5oZWlnaHQ7XG4gICAgfSAvLyBTaGlmdCB0aGUgYWNjZW50IG92ZXIgYnkgdGhlIHNrZXcuXG5cblxuICAgIHZhciBsZWZ0ID0gc2tldzsgLy8gQ1NTIGRlZmluZXMgYC5rYXRleCAuYWNjZW50IC5hY2NlbnQtYm9keTpub3QoLmFjY2VudC1mdWxsKSB7IHdpZHRoOiAwIH1gXG4gICAgLy8gc28gdGhhdCB0aGUgYWNjZW50IGRvZXNuJ3QgY29udHJpYnV0ZSB0byB0aGUgYm91bmRpbmcgYm94LlxuICAgIC8vIFdlIG5lZWQgdG8gc2hpZnQgdGhlIGNoYXJhY3RlciBieSBpdHMgd2lkdGggKGVmZmVjdGl2ZWx5IGhhbGZcbiAgICAvLyBpdHMgd2lkdGgpIHRvIGNvbXBlbnNhdGUuXG5cbiAgICBpZiAoIWFjY2VudEZ1bGwpIHtcbiAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkuc3R5bGUubGVmdCA9IG1ha2VFbShsZWZ0KTsgLy8gXFx0ZXh0Y2lyY2xlZCB1c2VzIHRoZSBcXGJpZ2NpcmMgZ2x5cGgsIHNvIGl0IG5lZWRzIHNvbWVcbiAgICAvLyB2ZXJ0aWNhbCBhZGp1c3RtZW50IHRvIG1hdGNoIExhVGVYLlxuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiKSB7XG4gICAgICBhY2NlbnRCb2R5LnN0eWxlLnRvcCA9IFwiLjJlbVwiO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLWNsZWFyYW5jZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdLFxuICAgICAgICB3cmFwcGVyU3R5bGU6IHNrZXcgPiAwID8ge1xuICAgICAgICAgIHdpZHRoOiBcImNhbGMoMTAwJSAtIFwiICsgbWFrZUVtKDIgKiBza2V3KSArIFwiKVwiLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbSgyICogc2tldylcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkOSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGFjY2VudCA9PiBcIlxcXFxcIiArIGFjY2VudCkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGJhc2UgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkYSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ5XG59KTsgLy8gVGV4dC1tb2RlIGFjY2VudHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFwiLFxuICBuYW1lczogW1wiXFxcXCdcIiwgXCJcXFxcYFwiLCBcIlxcXFxeXCIsIFwiXFxcXH5cIiwgXCJcXFxcPVwiLCBcIlxcXFx1XCIsIFwiXFxcXC5cIiwgJ1xcXFxcIicsIFwiXFxcXGNcIiwgXCJcXFxcclwiLCBcIlxcXFxIXCIsIFwiXFxcXHZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWUsXG4gICAgLy8gdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgYXJnVHlwZXM6IFtcInByaW1pdGl2ZVwiXVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgbW9kZSA9IGNvbnRleHQucGFyc2VyLm1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgIGNvbnRleHQucGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRBY2NlbnRzXCIsIFwiTGFUZVgncyBhY2NlbnQgXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiB0ZXh0IG1vZGVcIik7XG4gICAgICBtb2RlID0gXCJ0ZXh0XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgbGFiZWw6IGNvbnRleHQuZnVuY05hbWUsXG4gICAgICBpc1N0cmV0Y2h5OiBmYWxzZSxcbiAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciRhLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDlcbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxlZnRhcnJvd1wiLCBcIlxcXFx1bmRlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcdW5kZXJsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmdyb3VwXCIsIFwiXFxcXHVuZGVybGluZXNlZ21lbnRcIiwgXCJcXFxcdXRpbGRlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBUcmVhdCB1bmRlciBhY2NlbnRzIG11Y2ggbGlrZSB1bmRlcmxpbmVzLlxuICAgIHZhciBpbm5lckdyb3VwID0gYnVpbGRHcm91cCQxKGdyb3VwLmJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGtlcm4gPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdXRpbGRlXCIgPyAwLjEyIDogMDsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl1cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJhY2NlbnR1bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uXG52YXIgcGFkZGVkTm9kZSA9IGdyb3VwID0+IHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgZ3JvdXAgPyBbZ3JvdXBdIDogW10pO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiKzAuNmVtXCIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjAuM2VtXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIFN0cmV0Y2h5IGFycm93cyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50XG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInhBcnJvd1wiLFxuICBuYW1lczogW1wiXFxcXHhsZWZ0YXJyb3dcIiwgXCJcXFxceHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRhcnJvd1wiLCBcIlxcXFx4UmlnaHRhcnJvd1wiLCBcIlxcXFx4bGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRyaWdodGFycm93XCIsIFwiXFxcXHhob29rbGVmdGFycm93XCIsIFwiXFxcXHhob29rcmlnaHRhcnJvd1wiLCBcIlxcXFx4bWFwc3RvXCIsIFwiXFxcXHhyaWdodGhhcnBvb25kb3duXCIsIFwiXFxcXHhyaWdodGhhcnBvb251cFwiLCBcIlxcXFx4bGVmdGhhcnBvb25kb3duXCIsIFwiXFxcXHhsZWZ0aGFycG9vbnVwXCIsIFwiXFxcXHhyaWdodGxlZnRoYXJwb29uc1wiLCBcIlxcXFx4bGVmdHJpZ2h0aGFycG9vbnNcIiwgXCJcXFxceGxvbmdlcXVhbFwiLCBcIlxcXFx4dHdvaGVhZHJpZ2h0YXJyb3dcIiwgXCJcXFxceHR3b2hlYWRsZWZ0YXJyb3dcIiwgXCJcXFxceHRvZnJvbVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSB0byBzdXBwb3J0IHRoZSBtaGNoZW0gZXh0ZW5zaW9uLlxuICAvLyBEaXJlY3QgdXNlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXNjb3VyYWdlZCBhbmQgbWF5IGJyZWFrIHNvbWVkYXkuXG4gIFwiXFxcXHhyaWdodGxlZnRhcnJvd3NcIiwgXCJcXFxceHJpZ2h0ZXF1aWxpYnJpdW1cIiwgXCJcXFxceGxlZnRlcXVpbGlicml1bVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSBvbmx5IHRvIHN1cHBvcnQgdGhlIHtDRH0gZW52aXJvbm1lbnQuXG4gIFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIiwgXCJcXFxcXFxcXGNkbGVmdGFycm93XCIsIFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIC8vIEZsb3cgaXMgdW5hYmxlIHRvIGNvcnJlY3RseSBpbmZlciB0aGUgdHlwZSBvZiBgZ3JvdXBgLCBldmVuIHRob3VnaCBpdCdzXG4gIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwYXNzZWQtaW4gYHR5cGVgIGFib3ZlLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIHZhciBhcnJvd1ByZWZpeCA9IGdyb3VwLmxhYmVsLnNsaWNlKDAsIDIpID09PSBcIlxcXFx4XCIgPyBcInhcIiA6IFwiY2RcIjtcbiAgICB1cHBlckdyb3VwLmNsYXNzZXMucHVzaChhcnJvd1ByZWZpeCArIFwiLWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5iZWxvdywgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgbG93ZXJHcm91cC5jbGFzc2VzLnB1c2goYXJyb3dQcmVmaXggKyBcIi1hcnJvdy1wYWRcIik7XG4gICAgfVxuXG4gICAgdmFyIGFycm93Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBSZSBzaGlmdDogTm90ZSB0aGF0IHN0cmV0Y2h5LnN2Z1NwYW4gcmV0dXJuZWQgYXJyb3dCb2R5LmRlcHRoID0gMC5cbiAgICAvLyBUaGUgcG9pbnQgd2Ugd2FudCBvbiB0aGUgbWF0aCBheGlzIGlzIGF0IDAuNSAqIGFycm93Qm9keS5oZWlnaHQuXG5cbiAgICB2YXIgYXJyb3dTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIDAuNSAqIGFycm93Qm9keS5oZWlnaHQ7IC8vIDIgbXUga2Vybi4gUmVmOiBhbXNtYXRoLmR0eDogIzdcXGlmMCMyXFxlbHNlXFxta2VybiMybXVcXGZpXG5cbiAgICB2YXIgdXBwZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAtIDAuNSAqIGFycm93Qm9keS5oZWlnaHQgLSAwLjExMTsgLy8gMC4xMTEgZW0gPSAyIG11XG5cbiAgICBpZiAodXBwZXJHcm91cC5kZXB0aCA+IDAuMjUgfHwgZ3JvdXAubGFiZWwgPT09IFwiXFxcXHhsZWZ0ZXF1aWxpYnJpdW1cIikge1xuICAgICAgdXBwZXJTaGlmdCAtPSB1cHBlckdyb3VwLmRlcHRoOyAvLyBzaGlmdCB1cCBpZiBkZXB0aCBlbmNyb2FjaGVzXG4gICAgfSAvLyBHZW5lcmF0ZSB0aGUgdmxpc3RcblxuXG4gICAgdmFyIHZsaXN0O1xuXG4gICAgaWYgKGxvd2VyR3JvdXApIHtcbiAgICAgIHZhciBsb3dlclNoaWZ0ID0gLW9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICsgbG93ZXJHcm91cC5oZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0ICsgMC4xMTE7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdXBwZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogdXBwZXJTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYXJyb3dCb2R5LFxuICAgICAgICAgIHNoaWZ0OiBhcnJvd1NoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsb3dlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiBsb3dlclNoaWZ0XG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXJlbFwiLCBcIngtYXJyb3dcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYXJyb3dOb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgYXJyb3dOb2RlLnNldEF0dHJpYnV0ZShcIm1pbnNpemVcIiwgZ3JvdXAubGFiZWwuY2hhckF0KDApID09PSBcInhcIiA/IFwiMS43NWVtXCIgOiBcIjMuMGVtXCIpO1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAgIHZhciB1cHBlck5vZGUgPSBwYWRkZWROb2RlKGJ1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuXG4gICAgICBpZiAoZ3JvdXAuYmVsb3cpIHtcbiAgICAgICAgdmFyIGxvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJvdmVyXCIsIFthcnJvd05vZGUsIGxvd2VyTm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCB1cHBlck5vZGVdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICB2YXIgX2xvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuXG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2Fycm93Tm9kZSwgX2xvd2VyTm9kZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAvLyBQYXJzZXIuanMgdGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50LlxuICAgICAgbm9kZSA9IHBhZGRlZE5vZGUoKTtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vdmVyXCIsIFthcnJvd05vZGUsIG5vZGVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxudmFyIG1ha2VTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW47XG5cbmZ1bmN0aW9uIGh0bWxCdWlsZGVyJDkoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtYWtlU3BhbihbZ3JvdXAubWNsYXNzXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBtYXRobWxCdWlsZGVyJDgoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwLjA1NTZlbVwiOyAvLyAxIG11IGlzIHRoZSBtb3N0IGxpa2VseSBvcHRpb25cblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLndpZHRoID0gXCIrMC4xMTExZW1cIjtcbiAgICB9IC8vIE1hdGhNTCA8bW8+IGRlZmF1bHQgc3BhY2UgaXMgNS8xOCBlbSwgc28gPG1yZWw+IG5lZWRzIG5vIGFjdGlvbi5cbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL01hdGhNTC9FbGVtZW50L21vXG5cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSAvLyBNYXRoIGNsYXNzIGNvbW1hbmRzIGV4Y2VwdCBcXG1hdGhvcFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRob3JkXCIsIFwiXFxcXG1hdGhiaW5cIiwgXCJcXFxcbWF0aHJlbFwiLCBcIlxcXFxtYXRob3BlblwiLCBcIlxcXFxtYXRoY2xvc2VcIiwgXCJcXFxcbWF0aHB1bmN0XCIsIFwiXFxcXG1hdGhpbm5lclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBcIm1cIiArIGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcbnZhciBiaW5yZWxDbGFzcyA9IGFyZyA9PiB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhhcmdzWzBdKSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGFyZ3NbMV0pXG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYmFzZUFyZyA9IGFyZ3NbMV07XG4gICAgdmFyIHNoaWZ0ZWRBcmcgPSBhcmdzWzBdO1xuICAgIHZhciBtY2xhc3M7XG5cbiAgICBpZiAoZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIpIHtcbiAgICAgIC8vIExhVGVYIGFwcGxpZXMgXFxiaW5yZWwgc3BhY2luZyB0byBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuXG4gICAgICBtY2xhc3MgPSBiaW5yZWxDbGFzcyhiYXNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWNsYXNzID0gXCJtcmVsXCI7IC8vIGZvciBcXHN0YWNrcmVsXG4gICAgfVxuXG4gICAgdmFyIGJhc2VPcCA9IHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IGJhc2VBcmcubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIGFsd2F5c0hhbmRsZVN1cFN1YjogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0Jhc2VTaGlmdDogZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChiYXNlQXJnKVxuICAgIH07XG4gICAgdmFyIHN1cHN1YiA9IHtcbiAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICBtb2RlOiBzaGlmdGVkQXJnLm1vZGUsXG4gICAgICBiYXNlOiBiYXNlT3AsXG4gICAgICBzdXA6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gbnVsbCA6IHNoaWZ0ZWRBcmcsXG4gICAgICBzdWI6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gc2hpZnRlZEFyZyA6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3MsXG4gICAgICBib2R5OiBbc3Vwc3ViXSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiB1dGlscy5pc0NoYXJhY3RlckJveChzdXBzdWIpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcblxuLy8gXFxwbWIgaXMgYSBzaW11bGF0aW9uIG9mIGJvbGQgZm9udC5cbi8vIFRoZSB2ZXJzaW9uIG9mIFxccG1iIGluIGFtYnN5LnN0eSB3b3JrcyBieSB0eXBlc2V0dGluZyB0aHJlZSBjb3BpZXNcbi8vIHdpdGggc21hbGwgb2Zmc2V0cy4gV2UgdXNlIENTUyB0ZXh0LXNoYWRvdy5cbi8vIEl0J3MgYSBoYWNrLiBOb3QgYXMgZ29vZCBhcyBhIHJlYWwgYm9sZCBmb250LiBCZXR0ZXIgdGhhbiBub3RoaW5nLlxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInBtYlwiLFxuICBuYW1lczogW1wiXFxcXHBtYlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicG1iXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChhcmdzWzBdKVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKTtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gICAgbm9kZS5zdHlsZS50ZXh0U2hhZG93ID0gXCIwLjAyZW0gMC4wMWVtIDAuMDRweFwiO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIHN0eWxlKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIHN0eWxlKTsgLy8gV3JhcCB3aXRoIGFuIDxtc3R5bGU+IGVsZW1lbnQuXG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwidGV4dC1zaGFkb3c6IDAuMDJlbSAwLjAxZW0gMC4wNHB4XCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY2RBcnJvd0Z1bmN0aW9uTmFtZSA9IHtcbiAgXCI+XCI6IFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIixcbiAgXCI8XCI6IFwiXFxcXFxcXFxjZGxlZnRhcnJvd1wiLFxuICBcIj1cIjogXCJcXFxcXFxcXGNkbG9uZ2VxdWFsXCIsXG4gIFwiQVwiOiBcIlxcXFx1cGFycm93XCIsXG4gIFwiVlwiOiBcIlxcXFxkb3duYXJyb3dcIixcbiAgXCJ8XCI6IFwiXFxcXFZlcnRcIixcbiAgXCIuXCI6IFwibm8gYXJyb3dcIlxufTtcblxudmFyIG5ld0NlbGwgPSAoKSA9PiB7XG4gIC8vIENyZWF0ZSBhbiBlbXB0eSBjZWxsLCB0byBiZSBmaWxsZWQgYmVsb3cgd2l0aCBwYXJzZSBub2Rlcy5cbiAgLy8gVGhlIHBhcnNlVHJlZSBmcm9tIHRoaXMgbW9kdWxlIG11c3QgYmUgY29uc3RydWN0ZWQgbGlrZSB0aGVcbiAgLy8gb25lIGNyZWF0ZWQgYnkgcGFyc2VBcnJheSgpLCBzbyBhbiBlbXB0eSBDRCBjZWxsIG11c3RcbiAgLy8gYmUgYSBQYXJzZU5vZGU8XCJzdHlsaW5nXCI+LiBBbmQgQ0QgaXMgYWx3YXlzIGRpc3BsYXlzdHlsZS5cbiAgLy8gU28gdGhlc2UgdmFsdWVzIGFyZSBmaXhlZCBhbmQgZmxvdyBjYW4gZG8gaW1wbGljaXQgdHlwaW5nLlxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgIGJvZHk6IFtdLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIHN0eWxlOiBcImRpc3BsYXlcIlxuICB9O1xufTtcblxudmFyIGlzU3RhcnRPZkFycm93ID0gbm9kZSA9PiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09IFwidGV4dG9yZFwiICYmIG5vZGUudGV4dCA9PT0gXCJAXCI7XG59O1xuXG52YXIgaXNMYWJlbEVuZCA9IChub2RlLCBlbmRDaGFyKSA9PiB7XG4gIHJldHVybiAobm9kZS50eXBlID09PSBcIm1hdGhvcmRcIiB8fCBub2RlLnR5cGUgPT09IFwiYXRvbVwiKSAmJiBub2RlLnRleHQgPT09IGVuZENoYXI7XG59O1xuXG5mdW5jdGlvbiBjZEFycm93KGFycm93Q2hhciwgbGFiZWxzLCBwYXJzZXIpIHtcbiAgLy8gUmV0dXJuIGEgcGFyc2UgdHJlZSBvZiBhbiBhcnJvdyBhbmQgaXRzIGxhYmVscy5cbiAgLy8gVGhpcyBhY3RzIGluIGEgd2F5IHNpbWlsYXIgdG8gYSBtYWNybyBleHBhbnNpb24uXG4gIHZhciBmdW5jTmFtZSA9IGNkQXJyb3dGdW5jdGlvbk5hbWVbYXJyb3dDaGFyXTtcblxuICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RyaWdodGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RsZWZ0YXJyb3dcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbGFiZWxzWzBdXSwgW2xhYmVsc1sxXV0pO1xuXG4gICAgY2FzZSBcIlxcXFx1cGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxkb3duYXJyb3dcIjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGxlZnRMYWJlbCA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkbGVmdFwiLCBbbGFiZWxzWzBdXSwgW10pO1xuICAgICAgICB2YXIgYmFyZUFycm93ID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIHRleHQ6IGZ1bmNOYW1lLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGZhbWlseTogXCJyZWxcIlxuICAgICAgICB9O1xuICAgICAgICB2YXIgc2l6ZWRBcnJvdyA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFtiYXJlQXJyb3ddLCBbXSk7XG4gICAgICAgIHZhciByaWdodExhYmVsID0gcGFyc2VyLmNhbGxGdW5jdGlvbihcIlxcXFxcXFxcY2RyaWdodFwiLCBbbGFiZWxzWzFdXSwgW10pO1xuICAgICAgICB2YXIgYXJyb3dHcm91cCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW2xlZnRMYWJlbCwgc2l6ZWRBcnJvdywgcmlnaHRMYWJlbF1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkcGFyZW50XCIsIFthcnJvd0dyb3VwXSwgW10pO1xuICAgICAgfVxuXG4gICAgY2FzZSBcIlxcXFxcXFxcY2Rsb25nZXF1YWxcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiLCBbXSwgW10pO1xuXG4gICAgY2FzZSBcIlxcXFxWZXJ0XCI6XG4gICAgICB7XG4gICAgICAgIHZhciBhcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxWZXJ0XCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFthcnJvd10sIFtdKTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgdGV4dDogXCIgXCIsXG4gICAgICAgIG1vZGU6IFwibWF0aFwiXG4gICAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ0QocGFyc2VyKSB7XG4gIC8vIEdldCB0aGUgYXJyYXkncyBwYXJzZSBub2RlcyB3aXRoIFxcXFwgdGVtcG9yYXJpbHkgbWFwcGVkIHRvIFxcY3IuXG4gIHZhciBwYXJzZWRSb3dzID0gW107XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3JcIiwgXCJcXFxcXFxcXFxcXFxyZWxheFwiKTtcbiAgcGFyc2VyLmd1bGxldC5iZWdpbkdyb3VwKCk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIC8vIEdldCB0aGUgcGFyc2Ugbm9kZXMgZm9yIHRoZSBuZXh0IHJvdy5cbiAgICBwYXJzZWRSb3dzLnB1c2gocGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcXFxcXFwiKSk7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIiB8fCBuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgaWYgKHBhcnNlZFJvd3NbcGFyc2VkUm93cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFyc2VkUm93cy5wb3AoKTsgLy8gZmluYWwgcm93IGVuZGVkIGluIFxcXFxcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXhwZWN0ZWQgXFxcXFxcXFwgb3IgXFxcXGNyIG9yIFxcXFxlbmRcIiwgcGFyc2VyLm5leHRUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddOyAvLyBMb29wIHRocnUgdGhlIHBhcnNlIG5vZGVzLiBDb2xsZWN0IHRoZW0gaW50byBjZWxscyBhbmQgYXJyb3dzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyc2VkUm93cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIFN0YXJ0IGEgbmV3IHJvdy5cbiAgICB2YXIgcm93Tm9kZXMgPSBwYXJzZWRSb3dzW2ldOyAvLyBDcmVhdGUgdGhlIGZpcnN0IGNlbGwuXG5cbiAgICB2YXIgY2VsbCA9IG5ld0NlbGwoKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93Tm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghaXNTdGFydE9mQXJyb3cocm93Tm9kZXNbal0pKSB7XG4gICAgICAgIC8vIElmIGEgcGFyc2VOb2RlIGlzIG5vdCBhbiBhcnJvdywgaXQgZ29lcyBpbnRvIGEgY2VsbC5cbiAgICAgICAgY2VsbC5ib2R5LnB1c2gocm93Tm9kZXNbal0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUGFyc2Ugbm9kZSBqIGlzIGFuIFwiQFwiLCB0aGUgc3RhcnQgb2YgYW4gYXJyb3cuXG4gICAgICAgIC8vIEJlZm9yZSBzdGFydGluZyBvbiB0aGUgYXJyb3csIHB1c2ggdGhlIGNlbGwgaW50byBgcm93YC5cbiAgICAgICAgcm93LnB1c2goY2VsbCk7IC8vIE5vdyBjb2xsZWN0IHBhcnNlTm9kZXMgaW50byBhbiBhcnJvdy5cbiAgICAgICAgLy8gVGhlIGNoYXJhY3RlciBhZnRlciBcIkBcIiBkZWZpbmVzIHRoZSBhcnJvdyB0eXBlLlxuXG4gICAgICAgIGogKz0gMTtcbiAgICAgICAgdmFyIGFycm93Q2hhciA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKHJvd05vZGVzW2pdKS50ZXh0OyAvLyBDcmVhdGUgdHdvIGVtcHR5IGxhYmVsIG5vZGVzLiBXZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlbS5cblxuICAgICAgICB2YXIgbGFiZWxzID0gbmV3IEFycmF5KDIpO1xuICAgICAgICBsYWJlbHNbMF0gPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGxhYmVsc1sxXSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW11cbiAgICAgICAgfTsgLy8gUHJvY2VzcyB0aGUgYXJyb3cuXG5cbiAgICAgICAgaWYgKFwiPXwuXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIDsgZWxzZSBpZiAoXCI8PkFWXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIHtcbiAgICAgICAgICAvLyBGb3VyIGFycm93cywgYEA+Pj5gLCBgQDw8PGAsIGBAQUFBYCwgYW5kIGBAVlZWYCwgZWFjaCB0YWtlXG4gICAgICAgICAgLy8gdHdvIG9wdGlvbmFsIGxhYmVscy4gRS5nLiB0aGUgcmlnaHQtcG9pbnQgYXJyb3cgc3ludGF4IGlzXG4gICAgICAgICAgLy8gcmVhbGx5OiAgQD57b3B0aW9uYWwgbGFiZWx9PntvcHRpb25hbCBsYWJlbH0+XG4gICAgICAgICAgLy8gQ29sbGVjdCBwYXJzZU5vZGVzIGludG8gbGFiZWxzLlxuICAgICAgICAgIGZvciAodmFyIGxhYmVsTnVtID0gMDsgbGFiZWxOdW0gPCAyOyBsYWJlbE51bSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5MYWJlbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IHJvd05vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIGlmIChpc0xhYmVsRW5kKHJvd05vZGVzW2tdLCBhcnJvd0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgaW5MYWJlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGogPSBrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkFycm93KHJvd05vZGVzW2tdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxhYmVsc1tsYWJlbE51bV0uYm9keS5wdXNoKHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluTGFiZWwpIHtcbiAgICAgICAgICAgICAgLy8gaXNMYWJlbEVuZCBuZXZlciByZXR1cm5lZCBhIHRydWUuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBvbmUgb2YgXFxcIjw+QVY9fC5cXFwiIGFmdGVyIEBcIiwgcm93Tm9kZXNbal0pO1xuICAgICAgICB9IC8vIE5vdyBqb2luIHRoZSBhcnJvdyB0byBpdHMgbGFiZWxzLlxuXG5cbiAgICAgICAgdmFyIGFycm93ID0gY2RBcnJvdyhhcnJvd0NoYXIsIGxhYmVscywgcGFyc2VyKTsgLy8gV3JhcCB0aGUgYXJyb3cgaW4gIFBhcnNlTm9kZTxcInN0eWxpbmdcIj4uXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBtYXRjaCBwYXJzZUFycmF5KCkgYmVoYXZpb3IuXG5cbiAgICAgICAgdmFyIHdyYXBwZWRBcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICBib2R5OiBbYXJyb3ddLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIHN0eWxlOiBcImRpc3BsYXlcIiAvLyBDRCBpcyBhbHdheXMgZGlzcGxheXN0eWxlLlxuXG4gICAgICAgIH07XG4gICAgICAgIHJvdy5wdXNoKHdyYXBwZWRBcnJvdyk7IC8vIEluIENEJ3Mgc3ludGF4LCBjZWxscyBhcmUgaW1wbGljaXQuIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgdGhhdFxuICAgICAgICAvLyBpcyBub3QgYW4gYXJyb3cgZ2V0cyBjb2xsZWN0ZWQgaW50byBhIGNlbGwuIFNvIGNyZWF0ZSBhbiBlbXB0eVxuICAgICAgICAvLyBjZWxsIG5vdy4gSXQgd2lsbCBjb2xsZWN0IHVwY29taW5nIHBhcnNlTm9kZXMuXG5cbiAgICAgICAgY2VsbCA9IG5ld0NlbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgIC8vIEV2ZW4tbnVtYmVyZWQgcm93cyBjb25zaXN0IG9mOiBjZWxsLCBhcnJvdywgY2VsbCwgYXJyb3csIC4uLiBjZWxsXG4gICAgICAvLyBUaGUgbGFzdCBjZWxsIGlzIG5vdCB5ZXQgcHVzaGVkIGludG8gYHJvd2AsIHNvOlxuICAgICAgcm93LnB1c2goY2VsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9kZC1udW1iZXJlZCByb3dzIGNvbnNpc3Qgb2Y6IHZlcnQgYXJyb3csIGVtcHR5IGNlbGwsIC4uLiB2ZXJ0IGFycm93XG4gICAgICAvLyBSZW1vdmUgdGhlIGVtcHR5IGNlbGwgdGhhdCB3YXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHJvd2AuXG4gICAgICByb3cuc2hpZnQoKTtcbiAgICB9XG5cbiAgICByb3cgPSBbXTtcbiAgICBib2R5LnB1c2gocm93KTtcbiAgfSAvLyBFbmQgcm93IGdyb3VwXG5cblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7IC8vIEVuZCBhcnJheSBncm91cCBkZWZpbmluZyBcXFxcXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBkZWZpbmUgY29sdW1uIHNlcGFyYXRpb24uXG5cbiAgdmFyIGNvbHMgPSBuZXcgQXJyYXkoYm9keVswXS5sZW5ndGgpLmZpbGwoe1xuICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICBhbGlnbjogXCJjXCIsXG4gICAgcHJlZ2FwOiAwLjI1LFxuICAgIC8vIENEIHBhY2thZ2Ugc2V0cyBcXGVuc2tpcCBiZXR3ZWVuIGNvbHVtbnMuXG4gICAgcG9zdGdhcDogMC4yNSAvLyBTbyBwcmUgYW5kIHBvc3QgZWFjaCBnZXQgaGFsZiBhbiBcXGVuc2tpcCwgaS5lLiAwLjI1ZW0uXG5cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIGJvZHksXG4gICAgYXJyYXlzdHJldGNoOiAxLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICByb3dHYXBzOiBbbnVsbF0sXG4gICAgY29scyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZTogXCJDRFwiLFxuICAgIGhMaW5lc0JlZm9yZVJvdzogbmV3IEFycmF5KGJvZHkubGVuZ3RoICsgMSkuZmlsbChbXSlcbiAgfTtcbn0gLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXG4vLyBUaGV5IGFyZSBoZXJlIG9ubHkgZm9yIGludGVybmFsIHVzZSBieSB0aGUge0NEfSBlbnZpcm9ubWVudCBpbiBwbGFjaW5nIGxhYmVsc1xuLy8gbmV4dCB0byB2ZXJ0aWNhbCBhcnJvd3MuXG4vLyBXZSBkb24ndCBuZWVkIGFueSBzdWNoIGZ1bmN0aW9ucyBmb3IgaG9yaXpvbnRhbCBhcnJvd3MgYmVjYXVzZSB3ZSBjYW4gcmV1c2Vcbi8vIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGV4dGVuc2libGUgYXJyb3dzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY2RsYWJlbFwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxjZGxlZnRcIiwgXCJcXFxcXFxcXGNkcmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNkbGFiZWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2lkZTogZnVuY05hbWUuc2xpY2UoNCksXG4gICAgICBsYWJlbDogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgdmFyIGxhYmVsID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5sYWJlbCwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGxhYmVsLmNsYXNzZXMucHVzaChcImNkLWxhYmVsLVwiICsgZ3JvdXAuc2lkZSk7XG4gICAgbGFiZWwuc3R5bGUuYm90dG9tID0gbWFrZUVtKDAuOCAtIGxhYmVsLmRlcHRoKTsgLy8gWmVybyBvdXQgbGFiZWwgaGVpZ2h0ICYgZGVwdGgsIHNvIHZlcnRpY2FsIGFsaWduIG9mIGFycm93IGlzIHNldFxuICAgIC8vIGJ5IHRoZSBhcnJvdyBoZWlnaHQsIG5vdCBieSB0aGUgbGFiZWwuXG5cbiAgICBsYWJlbC5oZWlnaHQgPSAwO1xuICAgIGxhYmVsLmRlcHRoID0gMDtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5sYWJlbCwgb3B0aW9ucyldKTtcbiAgICBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbbGFiZWxdKTtcbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBcIik7XG5cbiAgICBpZiAoZ3JvdXAuc2lkZSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIi0xd2lkdGhcIik7XG4gICAgfSAvLyBXZSBoYXZlIHRvIGd1ZXNzIGF0IHZlcnRpY2FsIGFsaWdubWVudC4gV2Uga25vdyB0aGUgYXJyb3cgaXMgMS44ZW0gdGFsbCxcbiAgICAvLyBCdXQgd2UgZG9uJ3Qga25vdyB0aGUgaGVpZ2h0IG9yIGRlcHRoIG9mIHRoZSBsYWJlbC5cblxuXG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwidm9mZnNldFwiLCBcIjAuN2VtXCIpO1xuICAgIGxhYmVsID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgW2xhYmVsXSk7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIFwiZmFsc2VcIik7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIxXCIpO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGNkcGFyZW50XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZyYWdtZW50OiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFdyYXAgdGhlIHZlcnRpY2FsIGFycm93IGFuZCBpdHMgbGFiZWxzLlxuICAgIC8vIFRoZSBwYXJlbnQgZ2V0cyBwb3NpdGlvbjogcmVsYXRpdmUuIFRoZSBjaGlsZCBnZXRzIHBvc2l0aW9uOiBhYnNvbHV0ZS5cbiAgICAvLyBTbyBDU1MgY2FuIGxvY2F0ZSB0aGUgbGFiZWwgY29ycmVjdGx5LlxuICAgIHZhciBwYXJlbnQgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRHcm91cCQxKGdyb3VwLmZyYWdtZW50LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgcGFyZW50LmNsYXNzZXMucHVzaChcImNkLXZlcnQtYXJyb3dcIik7XG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5mcmFnbWVudCwgb3B0aW9ucyldKTtcbiAgfVxuXG59KTtcblxuLy8gezEyM30gYW5kIGNvbnZlcnRzIGludG8gc3ltYm9sIHdpdGggY29kZSAxMjMuICBJdCBpcyB1c2VkIGJ5IHRoZSAqbWFjcm8qXG4vLyBcXGNoYXIgZGVmaW5lZCBpbiBtYWNyb3MuanMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gIG5hbWVzOiBbXCJcXFxcQGNoYXJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBhcmcgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpO1xuICAgIHZhciBncm91cCA9IGFyZy5ib2R5O1xuICAgIHZhciBudW1iZXIgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnROb2RlVHlwZShncm91cFtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgbnVtYmVyICs9IG5vZGUudGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IHBhcnNlSW50KG51bWJlcik7XG4gICAgdmFyIHRleHQ7XG5cbiAgICBpZiAoaXNOYU4oY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7IC8vIElmIHdlIGRyb3AgSUUgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBjb2RlIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAgIC8vIHRleHQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKVxuICAgIH0gZWxzZSBpZiAoY29kZSA8IDAgfHwgY29kZSA+PSAweDEwZmZmZikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcQGNoYXIgd2l0aCBpbnZhbGlkIGNvZGUgcG9pbnQgXCIgKyBudW1iZXIpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA8PSAweGZmZmYpIHtcbiAgICAgIHRleHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW50byBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICBjb2RlIC09IDB4MTAwMDA7XG4gICAgICB0ZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweGQ4MDAsIChjb2RlICYgMHgzZmYpICsgMHhkYzAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHRleHQ6IHRleHRcbiAgICB9O1xuICB9XG5cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkOCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ3ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvcikpO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAuY29sb3IpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjb2xvclwiLFxuICBuYW1lczogW1wiXFxcXHRleHRjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwib3JpZ2luYWxcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgY29sb3IsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBicmVha09uVG9rZW5UZXh0XG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5cbi8vIFJvdyBicmVha3Mgd2l0aGluIHRhYnVsYXIgZW52aXJvbm1lbnRzLCBhbmQgbGluZSBicmVha3MgYXQgdG9wIGxldmVsXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjclwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc2l6ZSA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCkudGV4dCA9PT0gXCJbXCIgPyBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSkgOiBudWxsO1xuICAgIHZhciBuZXdMaW5lID0gIXBhcnNlci5zZXR0aW5ncy5kaXNwbGF5TW9kZSB8fCAhcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZSxcbiAgICAgIHNpemU6IHNpemUgJiYgYXNzZXJ0Tm9kZVR5cGUoc2l6ZSwgXCJzaXplXCIpLnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zcGFjZVwiKTtcblxuICAgIGlmIChncm91cC5uZXdMaW5lKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmVicmVha1wiLCBcIm5ld2xpbmVcIik7XG5cbiAgICAgIGlmIChncm91cC5zaXplKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBnbG9iYWxNYXAgPSB7XG4gIFwiXFxcXGdsb2JhbFwiOiBcIlxcXFxnbG9iYWxcIixcbiAgXCJcXFxcbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxkZWZcIjogXCJcXFxcZ2RlZlwiLFxuICBcIlxcXFxnZGVmXCI6IFwiXFxcXGdkZWZcIixcbiAgXCJcXFxcZWRlZlwiOiBcIlxcXFx4ZGVmXCIsXG4gIFwiXFxcXHhkZWZcIjogXCJcXFxceGRlZlwiLFxuICBcIlxcXFxsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGxldFwiLFxuICBcIlxcXFxmdXR1cmVsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGZ1dHVyZVwiXG59O1xuXG52YXIgY2hlY2tDb250cm9sU2VxdWVuY2UgPSB0b2sgPT4ge1xuICB2YXIgbmFtZSA9IHRvay50ZXh0O1xuXG4gIGlmICgvXig/OltcXFxce30kJiNeX118RU9GKSQvLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59O1xuXG52YXIgZ2V0UkhTID0gcGFyc2VyID0+IHtcbiAgdmFyIHRvayA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcblxuICBpZiAodG9rLnRleHQgPT09IFwiPVwiKSB7XG4gICAgLy8gY29uc3VtZSBvcHRpb25hbCBlcXVhbHNcbiAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAvLyBjb25zdW1lIG9uZSBvcHRpb25hbCBzcGFjZVxuICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2s7XG59O1xuXG52YXIgbGV0Q29tbWFuZCA9IChwYXJzZXIsIG5hbWUsIHRvaywgZ2xvYmFsKSA9PiB7XG4gIHZhciBtYWNybyA9IHBhcnNlci5ndWxsZXQubWFjcm9zLmdldCh0b2sudGV4dCk7XG5cbiAgaWYgKG1hY3JvID09IG51bGwpIHtcbiAgICAvLyBkb24ndCBleHBhbmQgaXQgbGF0ZXIgZXZlbiBpZiBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBkZWZpbmVkXG4gICAgLy8gZS5nLiwgXFxsZXRcXGZvbz1cXGZyYWMgXFxkZWZcXGZyYWN7XFxyZWxheH0gXFxmcmFjMTJcbiAgICB0b2subm9leHBhbmQgPSB0cnVlO1xuICAgIG1hY3JvID0ge1xuICAgICAgdG9rZW5zOiBbdG9rXSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAvLyByZXByb2R1Y2UgdGhlIHNhbWUgYmVoYXZpb3IgaW4gZXhwYW5zaW9uXG4gICAgICB1bmV4cGFuZGFibGU6ICFwYXJzZXIuZ3VsbGV0LmlzRXhwYW5kYWJsZSh0b2sudGV4dClcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KG5hbWUsIG1hY3JvLCBnbG9iYWwpO1xufTsgLy8gPGFzc2lnbm1lbnQ+IC0+IDxub24tbWFjcm8gYXNzaWdubWVudD58PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+IC0+IDxzaW1wbGUgYXNzaWdubWVudD58XFxnbG9iYWw8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bWFjcm8gYXNzaWdubWVudD4gLT4gPGRlZmluaXRpb24+fDxwcmVmaXg+PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8cHJlZml4PiAtPiBcXGdsb2JhbHxcXGxvbmd8XFxvdXRlclxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGdsb2JhbFwiLCBcIlxcXFxsb25nXCIsIFwiXFxcXFxcXFxnbG9iYWxsb25nXCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICB2YXIgdG9rZW4gPSBwYXJzZXIuZmV0Y2goKTtcblxuICAgIGlmIChnbG9iYWxNYXBbdG9rZW4udGV4dF0pIHtcbiAgICAgIC8vIEthVGVYIGRvZXNuJ3QgaGF2ZSBcXHBhciwgc28gaWdub3JlIFxcbG9uZ1xuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxnbG9iYWxcIiB8fCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxvbmdcIikge1xuICAgICAgICB0b2tlbi50ZXh0ID0gZ2xvYmFsTWFwW3Rva2VuLnRleHRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJpbnRlcm5hbFwiKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdG9rZW4gYWZ0ZXIgbWFjcm8gcHJlZml4XCIsIHRva2VuKTtcbiAgfVxuXG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6IFxcZGVmLCBcXGdkZWYsIFxcZWRlZiwgXFx4ZGVmXG4vLyA8ZGVmaW5pdGlvbj4gLT4gPGRlZj48Y29udHJvbCBzZXF1ZW5jZT48ZGVmaW5pdGlvbiB0ZXh0PlxuLy8gPGRlZj4gLT4gXFxkZWZ8XFxnZGVmfFxcZWRlZnxcXHhkZWZcbi8vIDxkZWZpbml0aW9uIHRleHQ+IC0+IDxwYXJhbWV0ZXIgdGV4dD48bGVmdCBicmFjZT48YmFsYW5jZWQgdGV4dD48cmlnaHQgYnJhY2U+XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGRlZlwiLCBcIlxcXFxnZGVmXCIsIFwiXFxcXGVkZWZcIiwgXCJcXFxceGRlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMikge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIHZhciBuYW1lID0gdG9rLnRleHQ7XG5cbiAgICBpZiAoL14oPzpbXFxcXHt9JCYjXl9dfEVPRikkLy50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICAgIH1cblxuICAgIHZhciBudW1BcmdzID0gMDtcbiAgICB2YXIgaW5zZXJ0O1xuICAgIHZhciBkZWxpbWl0ZXJzID0gW1tdXTsgLy8gPHBhcmFtZXRlciB0ZXh0PiBjb250YWlucyBubyBicmFjZXNcblxuICAgIHdoaWxlIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgLy8gSWYgdGhlIHZlcnkgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIDxwYXJhbWV0ZXIgdGV4dD4gaXMgIywgc28gdGhhdFxuICAgICAgICAvLyB0aGlzICMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgeywgVGVYIHdpbGwgYmVoYXZlIGFzIGlmIHRoZSB7XG4gICAgICAgIC8vIGhhZCBiZWVuIGluc2VydGVkIGF0IHRoZSByaWdodCBlbmQgb2YgYm90aCB0aGUgcGFyYW1ldGVyIHRleHRcbiAgICAgICAgLy8gYW5kIHRoZSByZXBsYWNlbWVudCB0ZXh0LlxuICAgICAgICBpZiAocGFyc2VyLmd1bGxldC5mdXR1cmUoKS50ZXh0ID09PSBcIntcIikge1xuICAgICAgICAgIGluc2VydCA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCk7XG4gICAgICAgICAgZGVsaW1pdGVyc1tudW1BcmdzXS5wdXNoKFwie1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBBIHBhcmFtZXRlciwgdGhlIGZpcnN0IGFwcGVhcmFuY2Ugb2YgIyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDEsXG4gICAgICAgIC8vIHRoZSBuZXh0IGJ5IDIsIGFuZCBzbyBvbjsgdXAgdG8gbmluZSAj4oCZcyBhcmUgYWxsb3dlZFxuXG5cbiAgICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmICghL15bMS05XSQvLnRlc3QodG9rLnRleHQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBcXFwiXCIgKyB0b2sudGV4dCArIFwiXFxcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZUludCh0b2sudGV4dCkgIT09IG51bUFyZ3MgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBcmd1bWVudCBudW1iZXIgXFxcIlwiICsgdG9rLnRleHQgKyBcIlxcXCIgb3V0IG9mIG9yZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtQXJncysrO1xuICAgICAgICBkZWxpbWl0ZXJzLnB1c2goW10pO1xuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvblwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGltaXRlcnNbbnVtQXJnc10ucHVzaCh0b2sudGV4dCk7XG4gICAgICB9XG4gICAgfSAvLyByZXBsYWNlbWVudCB0ZXh0LCBlbmNsb3NlZCBpbiAneycgYW5kICd9JyBhbmQgcHJvcGVybHkgbmVzdGVkXG5cblxuICAgIHZhciB7XG4gICAgICB0b2tlbnNcbiAgICB9ID0gcGFyc2VyLmd1bGxldC5jb25zdW1lQXJnKCk7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICB0b2tlbnMudW5zaGlmdChpbnNlcnQpO1xuICAgIH1cblxuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcZWRlZlwiIHx8IGZ1bmNOYW1lID09PSBcIlxcXFx4ZGVmXCIpIHtcbiAgICAgIHRva2VucyA9IHBhcnNlci5ndWxsZXQuZXhwYW5kVG9rZW5zKHRva2Vucyk7XG4gICAgICB0b2tlbnMucmV2ZXJzZSgpOyAvLyB0byBmaXQgaW4gd2l0aCBzdGFjayBvcmRlclxuICAgIH0gLy8gRmluYWwgYXJnIGlzIHRoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvXG5cblxuICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgICB0b2tlbnMsXG4gICAgICBudW1BcmdzLFxuICAgICAgZGVsaW1pdGVyc1xuICAgIH0sIGZ1bmNOYW1lID09PSBnbG9iYWxNYXBbZnVuY05hbWVdKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyA8c2ltcGxlIGFzc2lnbm1lbnQ+IC0+IDxsZXQgYXNzaWdubWVudD5cbi8vIDxsZXQgYXNzaWdubWVudD4gLT4gXFxmdXR1cmVsZXQ8Y29udHJvbCBzZXF1ZW5jZT48dG9rZW4+PHRva2VuPlxuLy8gICAgIHwgXFxsZXQ8Y29udHJvbCBzZXF1ZW5jZT48ZXF1YWxzPjxvbmUgb3B0aW9uYWwgc3BhY2U+PHRva2VuPlxuLy8gPGVxdWFscz4gLT4gPG9wdGlvbmFsIHNwYWNlcz58PG9wdGlvbmFsIHNwYWNlcz49XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGxldFwiLCBcIlxcXFxcXFxcZ2xvYmFsbGV0XCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIG5hbWUgPSBjaGVja0NvbnRyb2xTZXF1ZW5jZShwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCkpO1xuICAgIHBhcnNlci5ndWxsZXQuY29uc3VtZVNwYWNlcygpO1xuICAgIHZhciB0b2sgPSBnZXRSSFMocGFyc2VyKTtcbiAgICBsZXRDb21tYW5kKHBhcnNlciwgbmFtZSwgdG9rLCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxldFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyByZWY6IGh0dHBzOi8vd3d3LnR1Zy5vcmcvVFVHYm9hdC90YjA5LTMvdGIyMmJlY2h0b2xzaGVpbS5wZGZcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxcZnV0dXJlbGV0XCIsIFwiXFxcXFxcXFxnbG9iYWxmdXR1cmVcIiAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbmFtZSA9IGNoZWNrQ29udHJvbFNlcXVlbmNlKHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKSk7XG4gICAgdmFyIG1pZGRsZSA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIGxldENvbW1hbmQocGFyc2VyLCBuYW1lLCB0b2ssIGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcZ2xvYmFsZnV0dXJlXCIpO1xuICAgIHBhcnNlci5ndWxsZXQucHVzaFRva2VuKHRvayk7XG4gICAgcGFyc2VyLmd1bGxldC5wdXNoVG9rZW4obWlkZGxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBtZXRyaWNzIGZvciBhIGdpdmVuIHN5bWJvbCBhbmQgZm9udCwgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gKGkuZS5cbiAqIGFmdGVyIGZvbGxvd2luZyByZXBsYWNlbWVudCBmcm9tIHN5bWJvbHMuanMpXG4gKi9cbnZhciBnZXRNZXRyaWNzID0gZnVuY3Rpb24gZ2V0TWV0cmljcyhzeW1ib2wsIGZvbnQsIG1vZGUpIHtcbiAgdmFyIHJlcGxhY2UgPSBzeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzeW1ib2xzLm1hdGhbc3ltYm9sXS5yZXBsYWNlO1xuICB2YXIgbWV0cmljcyA9IGdldENoYXJhY3Rlck1ldHJpY3MocmVwbGFjZSB8fCBzeW1ib2wsIGZvbnQsIG1vZGUpO1xuXG4gIGlmICghbWV0cmljcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN5bWJvbCBcIiArIHN5bWJvbCArIFwiIGFuZCBmb250IHNpemUgXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgcmV0dXJuIG1ldHJpY3M7XG59O1xuLyoqXG4gKiBQdXRzIGEgZGVsaW1pdGVyIHNwYW4gaW4gYSBnaXZlbiBzdHlsZSwgYW5kIGFkZHMgYXBwcm9wcmlhdGUgaGVpZ2h0LCBkZXB0aCxcbiAqIGFuZCBtYXhGb250U2l6ZXMuXG4gKi9cblxuXG52YXIgc3R5bGVXcmFwID0gZnVuY3Rpb24gc3R5bGVXcmFwKGRlbGltLCB0b1N0eWxlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUodG9TdHlsZSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3Nlcy5jb25jYXQobmV3T3B0aW9ucy5zaXppbmdDbGFzc2VzKG9wdGlvbnMpKSwgW2RlbGltXSwgb3B0aW9ucyk7XG4gIHZhciBkZWxpbVNpemVNdWx0aXBsaWVyID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uaGVpZ2h0ICo9IGRlbGltU2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uZGVwdGggKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5tYXhGb250U2l6ZSA9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGNlbnRlclNwYW4gPSBmdW5jdGlvbiBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoc3R5bGUpO1xuICB2YXIgc2hpZnQgPSAoMSAtIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyKSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICBzcGFuLmNsYXNzZXMucHVzaChcImRlbGltY2VudGVyXCIpO1xuICBzcGFuLnN0eWxlLnRvcCA9IG1ha2VFbShzaGlmdCk7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlU21hbGxEZWxpbSA9IGZ1bmN0aW9uIG1ha2VTbWFsbERlbGltKGRlbGltLCBzdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciB0ZXh0ID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChkZWxpbSwgXCJNYWluLVJlZ3VsYXJcIiwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKHRleHQsIHN0eWxlLCBvcHRpb25zLCBjbGFzc2VzKTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyU3BhbihzcGFuLCBvcHRpb25zLCBzdHlsZSk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIHN5bWJvbCBpbiB0aGUgZ2l2ZW4gZm9udCBzaXplIChub3RlIHNpemUgaXMgYW4gaW50ZWdlcilcbiAqL1xuXG5cbnZhciBtYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlTGFyZ2VEZWxpbSA9IGZ1bmN0aW9uIG1ha2VMYXJnZURlbGltKGRlbGltLCBzaXplLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgdmFyIGlubmVyID0gbWF0aHJtU2l6ZShkZWxpbSwgc2l6ZSwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBTdHlsZSQxLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIFN0eWxlJDEuVEVYVCk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIE1ha2UgYSBzcGFuIGZyb20gYSBmb250IGdseXBoIHdpdGggdGhlIGdpdmVuIG9mZnNldCBhbmQgaW4gdGhlIGdpdmVuIGZvbnQuXG4gKiBUaGlzIGlzIHVzZWQgaW4gbWFrZVN0YWNrZWREZWxpbSB0byBtYWtlIHRoZSBzdGFja2luZyBwaWVjZXMgZm9yIHRoZSBkZWxpbWl0ZXIuXG4gKi9cblxuXG52YXIgbWFrZUdseXBoU3BhbiA9IGZ1bmN0aW9uIG1ha2VHbHlwaFNwYW4oc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgY29ybmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdpbm5lclwiLCBzaXplQ2xhc3NdLCBbYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZENvbW1vbi5tYWtlU3ltYm9sKHN5bWJvbCwgZm9udCwgbW9kZSldKV0pOyAvLyBTaW5jZSB0aGlzIHdpbGwgYmUgcGFzc2VkIGludG8gYG1ha2VWTGlzdGAgaW4gdGhlIGVuZCwgd3JhcCB0aGUgZWxlbWVudFxuICAvLyBpbiB0aGUgYXBwcm9wcmlhdGUgdGFnIHRoYXQgVkxpc3QgdXNlcy5cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgIGVsZW06IGNvcm5lclxuICB9O1xufTtcblxudmFyIG1ha2VJbm5lciA9IGZ1bmN0aW9uIG1ha2VJbm5lcihjaCwgaGVpZ2h0LCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgaW5uZXIgcGFydCBvZiBhIHRhbGwgc3RhY2tlZCBkZWxpbWl0ZXIuXG4gIHZhciB3aWR0aCA9IGZvbnRNZXRyaWNzRGF0YVsnU2l6ZTQtUmVndWxhciddW2NoLmNoYXJDb2RlQXQoMCldID8gZm9udE1ldHJpY3NEYXRhWydTaXplNC1SZWd1bGFyJ11bY2guY2hhckNvZGVBdCgwKV1bNF0gOiBmb250TWV0cmljc0RhdGFbJ1NpemUxLVJlZ3VsYXInXVtjaC5jaGFyQ29kZUF0KDApXVs0XTtcbiAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoXCJpbm5lclwiLCBpbm5lclBhdGgoY2gsIE1hdGgucm91bmQoMTAwMCAqIGhlaWdodCkpKTtcbiAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICBcIndpZHRoXCI6IG1ha2VFbSh3aWR0aCksXG4gICAgXCJoZWlnaHRcIjogbWFrZUVtKGhlaWdodCksXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIG1ha2VFbSh3aWR0aCksXG4gICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgMTAwMCAqIHdpZHRoICsgXCIgXCIgKyBNYXRoLnJvdW5kKDEwMDAgKiBoZWlnaHQpLFxuICAgIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiOiBcInhNaW5ZTWluXCJcbiAgfSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImVsZW1cIixcbiAgICBlbGVtOiBzcGFuXG4gIH07XG59OyAvLyBIZWxwZXJzIGZvciBtYWtlU3RhY2tlZERlbGltXG5cblxudmFyIGxhcEluRW1zID0gMC4wMDg7XG52YXIgbGFwID0ge1xuICB0eXBlOiBcImtlcm5cIixcbiAgc2l6ZTogLTEgKiBsYXBJbkVtc1xufTtcbnZhciB2ZXJ0cyA9IFtcInxcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcdmVydFwiXTtcbnZhciBkb3VibGVWZXJ0cyA9IFtcIlxcXFx8XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXFZlcnRcIl07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgbWFrZVN0YWNrZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodFRvdGFsLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gVGhlcmUgYXJlIGZvdXIgcGFydHMsIHRoZSB0b3AsIGFuIG9wdGlvbmFsIG1pZGRsZSwgYSByZXBlYXRlZCBwYXJ0LCBhbmQgYVxuICAvLyBib3R0b20uXG4gIHZhciB0b3A7XG4gIHZhciBtaWRkbGU7XG4gIHZhciByZXBlYXQ7XG4gIHZhciBib3R0b207XG4gIHZhciBzdmdMYWJlbCA9IFwiXCI7XG4gIHZhciB2aWV3Qm94V2lkdGggPSAwO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzZDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnModmVydHMsIGRlbGltKSkge1xuICAgIHJlcGVhdCA9IFwiXFx1MjIyM1wiO1xuICAgIHN2Z0xhYmVsID0gXCJ2ZXJ0XCI7XG4gICAgdmlld0JveFdpZHRoID0gMzMzO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKGRvdWJsZVZlcnRzLCBkZWxpbSkpIHtcbiAgICByZXBlYXQgPSBcIlxcdTIyMjVcIjtcbiAgICBzdmdMYWJlbCA9IFwiZG91YmxldmVydFwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDU1NjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJbXCIgfHwgZGVsaW0gPT09IFwiXFxcXGxicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM2ExXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2EyXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EzXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJsYnJhY2tcIjtcbiAgICB2aWV3Qm94V2lkdGggPSA2Njc7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhNFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhNVwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhNlwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgICBzdmdMYWJlbCA9IFwicmJyYWNrXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBhXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA4XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTFcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTJcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBiXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA5XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTRcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTVcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOWJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOWRcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxwYXJlblwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDg3NTtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCIpXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJwYXJlblwiKSB7XG4gICAgdG9wID0gXCJcXHUyMzllXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMzlmXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EwXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJycGFyZW5cIjtcbiAgICB2aWV3Qm94V2lkdGggPSA4NzU7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHtcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbGJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTdcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYThcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXH1cIiB8fCBkZWxpbSA9PT0gXCJcXFxccmJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYWJcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYWRcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxncm91cFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZWVcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhN1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhYVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlZlwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsbW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxybW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IC8vIEdldCB0aGUgbWV0cmljcyBvZiB0aGUgZm91ciBzZWN0aW9uc1xuXG5cbiAgdmFyIHRvcE1ldHJpY3MgPSBnZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBnZXRNZXRyaWNzKHJlcGVhdCwgZm9udCwgbW9kZSk7XG4gIHZhciByZXBlYXRIZWlnaHRUb3RhbCA9IHJlcGVhdE1ldHJpY3MuaGVpZ2h0ICsgcmVwZWF0TWV0cmljcy5kZXB0aDtcbiAgdmFyIGJvdHRvbU1ldHJpY3MgPSBnZXRNZXRyaWNzKGJvdHRvbSwgZm9udCwgbW9kZSk7XG4gIHZhciBib3R0b21IZWlnaHRUb3RhbCA9IGJvdHRvbU1ldHJpY3MuaGVpZ2h0ICsgYm90dG9tTWV0cmljcy5kZXB0aDtcbiAgdmFyIG1pZGRsZUhlaWdodFRvdGFsID0gMDtcbiAgdmFyIG1pZGRsZUZhY3RvciA9IDE7XG5cbiAgaWYgKG1pZGRsZSAhPT0gbnVsbCkge1xuICAgIHZhciBtaWRkbGVNZXRyaWNzID0gZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWxhdGUgdGhlIG1pbmltYWwgaGVpZ2h0IHRoYXQgdGhlIGRlbGltaXRlciBjYW4gaGF2ZS5cbiAgLy8gSXQgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIHRvcCwgYm90dG9tLCBhbmQgb3B0aW9uYWwgbWlkZGxlIGNvbWJpbmVkLlxuXG5cbiAgdmFyIG1pbkhlaWdodCA9IHRvcEhlaWdodFRvdGFsICsgYm90dG9tSGVpZ2h0VG90YWwgKyBtaWRkbGVIZWlnaHRUb3RhbDsgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgcmVwZWF0IHN5bWJvbCB3ZSB3aWxsIG5lZWRcblxuICB2YXIgcmVwZWF0Q291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGhlaWdodFRvdGFsIC0gbWluSGVpZ2h0KSAvIChtaWRkbGVGYWN0b3IgKiByZXBlYXRIZWlnaHRUb3RhbCkpKTsgLy8gQ29tcHV0ZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkZWxpbWl0ZXIgaW5jbHVkaW5nIGFsbCB0aGUgc3ltYm9sc1xuXG4gIHZhciByZWFsSGVpZ2h0VG90YWwgPSBtaW5IZWlnaHQgKyByZXBlYXRDb3VudCAqIG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBUaGUgY2VudGVyIG9mIHRoZSBkZWxpbWl0ZXIgaXMgcGxhY2VkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGF4aXMuIE5vdGVcbiAgLy8gdGhhdCBpbiB0aGlzIGNvbnRleHQsIFwiY2VudGVyXCIgbWVhbnMgdGhhdCB0aGUgZGVsaW1pdGVyIHNob3VsZCBiZVxuICAvLyBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMgaW4gdGhlIGN1cnJlbnQgc3R5bGUsIHdoaWxlIG5vcm1hbGx5IGl0IGlzXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0ZXh0c3R5bGUuXG5cbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgYXhpc0hlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB9IC8vIENhbGN1bGF0ZSB0aGUgZGVwdGhcblxuXG4gIHZhciBkZXB0aCA9IHJlYWxIZWlnaHRUb3RhbCAvIDIgLSBheGlzSGVpZ2h0OyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBwaWVjZXMgb2YgdGhlIHN0YWNrZWQgZGVsaW1pdGVyXG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgaWYgKHN2Z0xhYmVsLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJbnN0ZWFkIG9mIHN0YWNraW5nIGdseXBocywgY3JlYXRlIGEgc2luZ2xlIFNWRy5cbiAgICAvLyBUaGlzIGV2YWRlcyBicm93c2VyIHByb2JsZW1zIHdpdGggaW1wcmVjaXNlIHBvc2l0aW9uaW5nIG9mIHNwYW5zLlxuICAgIHZhciBtaWRIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsO1xuICAgIHZhciB2aWV3Qm94SGVpZ2h0ID0gTWF0aC5yb3VuZChyZWFsSGVpZ2h0VG90YWwgKiAxMDAwKTtcbiAgICB2YXIgcGF0aFN0ciA9IHRhbGxEZWxpbShzdmdMYWJlbCwgTWF0aC5yb3VuZChtaWRIZWlnaHQgKiAxMDAwKSk7XG4gICAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoc3ZnTGFiZWwsIHBhdGhTdHIpO1xuICAgIHZhciB3aWR0aCA9ICh2aWV3Qm94V2lkdGggLyAxMDAwKS50b0ZpeGVkKDMpICsgXCJlbVwiO1xuICAgIHZhciBoZWlnaHQgPSAodmlld0JveEhlaWdodCAvIDEwMDApLnRvRml4ZWQoMykgKyBcImVtXCI7XG4gICAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgXCJ3aWR0aFwiOiB3aWR0aCxcbiAgICAgIFwiaGVpZ2h0XCI6IGhlaWdodCxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodFxuICAgIH0pO1xuICAgIHZhciB3cmFwcGVyID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmddLCBvcHRpb25zKTtcbiAgICB3cmFwcGVyLmhlaWdodCA9IHZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuICAgIHdyYXBwZXIuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICB3cmFwcGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICBzdGFjay5wdXNoKHtcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogd3JhcHBlclxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0YWNrIGdseXBoc1xuICAgIC8vIFN0YXJ0IGJ5IGFkZGluZyB0aGUgYm90dG9tIHN5bWJvbFxuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbihib3R0b20sIGZvbnQsIG1vZGUpKTtcbiAgICBzdGFjay5wdXNoKGxhcCk7IC8vIG92ZXJsYXBcblxuICAgIGlmIChtaWRkbGUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBtaWRkbGUgc2VjdGlvbiB3aWxsIGJlIGFuIFNWRy4gTWFrZSBpdCBhbiBleHRyYSAwLjAxNmVtIHRhbGwuXG4gICAgICAvLyBXZSdsbCBvdmVybGFwIGJ5IDAuMDA4ZW0gYXQgdG9wIGFuZCBib3R0b20uXG4gICAgICB2YXIgaW5uZXJIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsICsgMiAqIGxhcEluRW1zO1xuICAgICAgc3RhY2sucHVzaChtYWtlSW5uZXIocmVwZWF0LCBpbm5lckhlaWdodCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgICAgLy8gc2VjdGlvbnNcbiAgICAgIHZhciBfaW5uZXJIZWlnaHQgPSAocmVhbEhlaWdodFRvdGFsIC0gdG9wSGVpZ2h0VG90YWwgLSBib3R0b21IZWlnaHRUb3RhbCAtIG1pZGRsZUhlaWdodFRvdGFsKSAvIDIgKyAyICogbGFwSW5FbXM7XG5cbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7IC8vIE5vdyBpbnNlcnQgdGhlIG1pZGRsZSBvZiB0aGUgYnJhY2UuXG5cbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3BhbihtaWRkbGUsIGZvbnQsIG1vZGUpKTtcbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7XG4gICAgfSAvLyBBZGQgdGhlIHRvcCBzeW1ib2xcblxuXG4gICAgc3RhY2sucHVzaChsYXApO1xuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbih0b3AsIGZvbnQsIG1vZGUpKTtcbiAgfSAvLyBGaW5hbGx5LCBidWlsZCB0aGUgdmxpc3RcblxuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoU3R5bGUkMS5URVhUKTtcbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgcG9zaXRpb25EYXRhOiBkZXB0aCxcbiAgICBjaGlsZHJlbjogc3RhY2tcbiAgfSwgbmV3T3B0aW9ucyk7XG4gIHJldHVybiBzdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgU3R5bGUkMS5URVhULCBvcHRpb25zLCBjbGFzc2VzKTtcbn07IC8vIEFsbCBzdXJkcyBoYXZlIDAuMDhlbSBwYWRkaW5nIGFib3ZlIHRoZSB2aW5jdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgc3FydFN2ZyA9IGZ1bmN0aW9uIHNxcnRTdmcoc3FydE5hbWUsIGhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucykge1xuICB2YXIgcGF0aCA9IHNxcnRQYXRoKHNxcnROYW1lLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IFBhdGhOb2RlKHNxcnROYW1lLCBwYXRoKTtcbiAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoTm9kZV0sIHtcbiAgICAvLyBOb3RlOiAxMDAwOjEgcmF0aW8gb2Ygdmlld0JveCB0byBkb2N1bWVudCBlbSB3aWR0aC5cbiAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICBcImhlaWdodFwiOiBtYWtlRW0oaGVpZ2h0KSxcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmN1bHVtLlxuICAvLyBJZiBTZXR0aW5ncy5taW5SdWxlVGhpY2tuZXNzIGlzIGxhcmdlciB0aGFuIHRoYXQsIHdlIGFkZCBleHRyYVZpbmN1bHVtLlxuXG4gIHZhciBleHRyYVZpbmN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmN1bHVtLiBCdXQgdGhhdCBwYWRkaW5nIGlzIG5vdFxuICAvLyBpbmNsdWRlZCBpbiB0aGUgVGVYLWxpa2UgYGhlaWdodGAgdXNlZCBmb3IgY2FsY3VsYXRpb24gb2ZcbiAgLy8gdmVydGljYWwgYWxpZ25tZW50LiBTbyB0ZXhIZWlnaHQgPSBzcGFuLmhlaWdodCA8IHNwYW4uc3R5bGUuaGVpZ2h0LlxuXG4gIGlmIChkZWxpbS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICAvLyBHZXQgYW4gU1ZHIHRoYXQgaXMgZGVyaXZlZCBmcm9tIGdseXBoIFUrMjIxQSBpbiBmb250IEthVGVYLU1haW4uXG4gICAgLy8gMTAwMCB1bml0IG5vcm1hbCBnbHlwaCBoZWlnaHQuXG4gICAgdmlld0JveEhlaWdodCA9IDEwMDAgKyAxMDAwICogZXh0cmFWaW5jdWx1bSArIHZiUGFkO1xuXG4gICAgaWYgKGhlaWdodCA8IDEuMCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAxLjA7IC8vIG1pbWljIGEgXFx0ZXh0Zm9udCByYWRpY2FsXG4gICAgfSBlbHNlIGlmIChoZWlnaHQgPCAxLjQpIHtcbiAgICAgIHNpemVNdWx0aXBsaWVyID0gMC43OyAvLyBtaW1pYyBhIFxcc2NyaXB0Zm9udCByYWRpY2FsXG4gICAgfVxuXG4gICAgc3BhbkhlaWdodCA9ICgxLjAgKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW4gPSBzcXJ0U3ZnKFwic3FydE1haW5cIiwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluY3VsdW0pIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbkhlaWdodCA9IChzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV0gKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMS4wMmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wIC8gc2l6ZU11bHRpcGxpZXI7IC8vIDEuMCBmcm9tIHRoZSBmb250LlxuICB9IGVsc2Uge1xuICAgIC8vIFRhbGwgc3FydC4gSW4gVGVYLCB0aGlzIHdvdWxkIGJlIHN0YWNrZWQgdXNpbmcgbXVsdGlwbGUgZ2x5cGhzLlxuICAgIC8vIFdlJ2xsIHVzZSBhIHNpbmdsZSBTVkcgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZy5cbiAgICBzcGFuSGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5jdWx1bSArIGVtUGFkO1xuICAgIHRleEhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluY3VsdW0pICsgdmJQYWQ7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0VGFsbFwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oc3BhbkhlaWdodCk7XG4gIHJldHVybiB7XG4gICAgc3BhbixcbiAgICBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmN1bHVtKSAqIHNpemVNdWx0aXBsaWVyXG4gIH07XG59OyAvLyBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgZGVsaW1pdGVycywgZGVsaW1pdGVycyB0aGF0IHN0YWNrIHdoZW4gdGhleSBiZWNvbWVcbi8vIHRvbyBsYXJnZVxuXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiXFxcXHN1cmRcIl07IC8vIGRlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2tcblxudmFyIHN0YWNrQWx3YXlzRGVsaW1pdGVycyA9IFtcIlxcXFx1cGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcInxcIiwgXCJcXFxcfFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcbFZlcnRcIiwgXCJcXFxcclZlcnRcIiwgXCJcXFxcbGdyb3VwXCIsIFwiXFxcXHJncm91cFwiLCBcIlxcdTI3ZWVcIiwgXCJcXHUyN2VmXCIsIFwiXFxcXGxtb3VzdGFjaGVcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCBcIlxcdTIzYjBcIiwgXCJcXHUyM2IxXCJdOyAvLyBhbmQgZGVsaW1pdGVycyB0aGF0IG5ldmVyIHN0YWNrXG5cbnZhciBzdGFja05ldmVyRGVsaW1pdGVycyA9IFtcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcXFxyYW5nbGVcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiXTsgLy8gTWV0cmljcyBvZiB0aGUgZGlmZmVyZW50IHNpemVzLiBGb3VuZCBieSBsb29raW5nIGF0IFRlWCdzIG91dHB1dCBvZlxuLy8gJFxcYmlnbHwgLy8gXFxCaWdsfCBcXGJpZ2dsfCBcXEJpZ2dsfCBcXHNob3dsaXN0cyRcbi8vIFVzZWQgdG8gY3JlYXRlIHN0YWNrZWQgZGVsaW1pdGVycyBvZiBhcHByb3ByaWF0ZSBzaXplcyBpbiBtYWtlU2l6ZWREZWxpbS5cblxudmFyIHNpemVUb01heEhlaWdodCA9IFswLCAxLjIsIDEuOCwgMi40LCAzLjBdO1xuLyoqXG4gKiBVc2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiBhIHNwZWNpZmljIHNpemUsIHdoZXJlIGBzaXplYCBpcyAxLCAyLCAzLCBvciA0LlxuICovXG5cbnZhciBtYWtlU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTaXplZERlbGltKGRlbGltLCBzaXplLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIDwgYW5kID4gdHVybiBpbnRvIFxcbGFuZ2xlIGFuZCBcXHJhbmdsZSBpbiBkZWxpbWl0ZXJzXG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBTaXplZCBkZWxpbWl0ZXJzIGFyZSBuZXZlciBjZW50ZXJlZC5cblxuXG4gIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pIHx8IHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICByZXR1cm4gbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBzaXplVG9NYXhIZWlnaHRbc2l6ZV0sIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIklsbGVnYWwgZGVsaW1pdGVyOiAnXCIgKyBkZWxpbSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBzZXF1ZW5jZXMgb2YgZGVsaW1pdGVyIHNpemVzIHRoYXQgdGhlIGRlbGltaXRlcnNcbiAqIGZvbGxvdyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgZGVsaW1pdGVyLiBUaGlzIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBjdXN0b21cbiAqIHNpemVkIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY3JlYXRlIGEgc21hbGwsIGxhcmdlLCBvciBzdGFja2VkXG4gKiBkZWxpbWl0ZXIuXG4gKlxuICogSW4gcmVhbCBUZVgsIHRoZXNlIHNlcXVlbmNlcyBhcmVuJ3QgZXhwbGljaXRseSBkZWZpbmVkLCBidXQgYXJlIGluc3RlYWRcbiAqIGRlZmluZWQgaW5zaWRlIHRoZSBmb250IG1ldHJpY3MuIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHRocmVlIHNlcXVlbmNlcyB0aGF0XG4gKiBhcmUgcG9zc2libGUgZm9yIHRoZSBkZWxpbWl0ZXJzIHRoYXQgVGVYIGRlZmluZXMsIGl0IGlzIGVhc2llciB0byBqdXN0IGVuY29kZVxuICogdGhlbSBleHBsaWNpdGx5IGhlcmUuXG4gKi9cblxuXG4vLyBEZWxpbWl0ZXJzIHRoYXQgbmV2ZXIgc3RhY2sgdHJ5IHNtYWxsIGRlbGltaXRlcnMgYW5kIGxhcmdlIGRlbGltaXRlcnMgb25seVxudmFyIHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDFcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAyXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogM1xufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDRcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrIHRyeSB0aGUgc21hbGwgZGVsaW1pdGVycyBmaXJzdCwgdGhlbiBzdGFja1xuXG52YXIgc3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgc3RhY2sgd2hlbiBsYXJnZSB0cnkgdGhlIHNtYWxsIGFuZCB0aGVuIGxhcmdlIGRlbGltaXRlcnMsIGFuZFxuLy8gc3RhY2sgYWZ0ZXJ3YXJkc1xuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dO1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgdXNlZCBpbiBhIGRlbGltaXRlciBiYXNlZCBvbiB3aGF0IGtpbmQgb2YgZGVsaW1pdGVyIGl0IGlzLlxuICogVE9ETygjOTYzKSBVc2UgbW9yZSBzcGVjaWZpYyBmb250IGZhbWlseSByZXR1cm4gdHlwZSBvbmNlIHRoYXQgaXMgaW50cm9kdWNlZC5cbiAqL1xuXG52YXIgZGVsaW1UeXBlVG9Gb250ID0gZnVuY3Rpb24gZGVsaW1UeXBlVG9Gb250KHR5cGUpIHtcbiAgaWYgKHR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIFwiTWFpbi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gXCJTaXplXCIgKyB0eXBlLnNpemUgKyBcIi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcInN0YWNrXCIpIHtcbiAgICByZXR1cm4gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIHN1cHBvcnQgZm9yIGRlbGltIHR5cGUgJ1wiICsgdHlwZS50eXBlICsgXCInIGhlcmUuXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUcmF2ZXJzZSBhIHNlcXVlbmNlIG9mIHR5cGVzIG9mIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoYXQga2luZCBvZiBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiB0aGUgZ2l2ZW4gaGVpZ2h0K2RlcHRoLlxuICovXG5cblxudmFyIHRyYXZlcnNlU2VxdWVuY2UgPSBmdW5jdGlvbiB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKSB7XG4gIC8vIEhlcmUsIHdlIGNob29zZSB0aGUgaW5kZXggd2Ugc2hvdWxkIHN0YXJ0IGF0IGluIHRoZSBzZXF1ZW5jZXMuIEluIHNtYWxsZXJcbiAgLy8gc2l6ZXMgKHdoaWNoIGNvcnJlc3BvbmQgdG8gbGFyZ2VyIG51bWJlcnMgaW4gc3R5bGUuc2l6ZSkgd2Ugc3RhcnQgZWFybGllclxuICAvLyBpbiB0aGUgc2VxdWVuY2UuIFRodXMsIHNjcmlwdHNjcmlwdCBzdGFydHMgYXQgaW5kZXggMy0zPTAsIHNjcmlwdCBzdGFydHNcbiAgLy8gYXQgaW5kZXggMy0yPTEsIHRleHQgc3RhcnRzIGF0IDMtMT0yLCBhbmQgZGlzcGxheSBzdGFydHMgYXQgbWluKDIsMy0wKT0yXG4gIHZhciBzdGFydCA9IE1hdGgubWluKDIsIDMgLSBvcHRpb25zLnN0eWxlLnNpemUpO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNlcXVlbmNlW2ldLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgdGhlIGxhc3QgZGVsaW1pdGVyLCBzbyB3ZSBqdXN0IGJyZWFrIHRoZSBsb29wIG5vdy5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBtZXRyaWNzID0gZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIG1ha2VDdXN0b21TaXplZERlbGltID0gZnVuY3Rpb24gbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBEZWNpZGUgd2hhdCBzZXF1ZW5jZSB0byB1c2VcblxuXG4gIHZhciBzZXF1ZW5jZTtcblxuICBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHNlcXVlbmNlID0gc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTGFyZ2VEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrQWx3YXlzRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gLy8gTG9vayB0aHJvdWdoIHRoZSBzZXF1ZW5jZVxuXG5cbiAgdmFyIGRlbGltVHlwZSA9IHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpOyAvLyBHZXQgdGhlIGRlbGltaXRlciBmcm9tIGZvbnQgZ2x5cGhzLlxuICAvLyBEZXBlbmRpbmcgb24gdGhlIHNlcXVlbmNlIGVsZW1lbnQgd2UgZGVjaWRlZCBvbiwgY2FsbCB0aGVcbiAgLy8gYXBwcm9wcmlhdGUgZnVuY3Rpb24uXG5cbiAgaWYgKGRlbGltVHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gbWFrZVNtYWxsRGVsaW0oZGVsaW0sIGRlbGltVHlwZS5zdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgcmV0dXJuIG1ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgICB9XG59O1xuLyoqXG4gKiBNYWtlIGEgZGVsaW1pdGVyIGZvciB1c2Ugd2l0aCBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLCBnaXZlbiBhIGhlaWdodCBhbmQgZGVwdGhcbiAqIG9mIGFuIGV4cHJlc3Npb24gdGhhdCB0aGUgZGVsaW1pdGVycyBzdXJyb3VuZC5cbiAqL1xuXG5cbnZhciBtYWtlTGVmdFJpZ2h0RGVsaW0gPSBmdW5jdGlvbiBtYWtlTGVmdFJpZ2h0RGVsaW0oZGVsaW0sIGhlaWdodCwgZGVwdGgsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gV2UgYWx3YXlzIGNlbnRlciBcXGxlZnQvXFxyaWdodCBkZWxpbWl0ZXJzLCBzbyB0aGUgYXhpcyBpcyBhbHdheXMgc2hpZnRlZFxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICogb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gVGFrZW4gZnJvbSBUZVggc291cmNlLCB0ZXgud2ViLCBmdW5jdGlvbiBtYWtlX2xlZnRfcmlnaHRcblxuICB2YXIgZGVsaW1pdGVyRmFjdG9yID0gOTAxO1xuICB2YXIgZGVsaW1pdGVyRXh0ZW5kID0gNS4wIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gIHZhciBtYXhEaXN0RnJvbUF4aXMgPSBNYXRoLm1heChoZWlnaHQgLSBheGlzSGVpZ2h0LCBkZXB0aCArIGF4aXNIZWlnaHQpO1xuICB2YXIgdG90YWxIZWlnaHQgPSBNYXRoLm1heCggLy8gSW4gcmVhbCBUZVgsIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSB1c2luZyBpbnRlZ3JhbCB2YWx1ZXMgd2hpY2ggYXJlXG4gIC8vIDY1NTM2IHBlciBwdCwgb3IgNjU1MzYwIHBlciBlbS4gU28sIHRoZSBkaXZpc2lvbiBoZXJlIHRydW5jYXRlcyBpblxuICAvLyBUZVggYnV0IGRvZXNuJ3QgaGVyZSwgcHJvZHVjaW5nIGRpZmZlcmVudCByZXN1bHRzLiBJZiB3ZSB3YW50ZWQgdG9cbiAgLy8gZXhhY3RseSBtYXRjaCBUZVgncyBjYWxjdWxhdGlvbiwgd2UgY291bGQgZG9cbiAgLy8gICBNYXRoLmZsb29yKDY1NTM2MCAqIG1heERpc3RGcm9tQXhpcyAvIDUwMCkgKlxuICAvLyAgICBkZWxpbWl0ZXJGYWN0b3IgLyA2NTUzNjBcbiAgLy8gKFRvIHNlZSB0aGUgZGlmZmVyZW5jZSwgY29tcGFyZVxuICAvLyAgICB4Xnt4XntcXGxlZnQoXFxydWxlezAuMWVtfXswLjY4ZW19XFxyaWdodCl9fVxuICAvLyBpbiBUZVggYW5kIEthVGVYKVxuICBtYXhEaXN0RnJvbUF4aXMgLyA1MDAgKiBkZWxpbWl0ZXJGYWN0b3IsIDIgKiBtYXhEaXN0RnJvbUF4aXMgLSBkZWxpbWl0ZXJFeHRlbmQpOyAvLyBGaW5hbGx5LCB3ZSBkZWZlciB0byBgbWFrZUN1c3RvbVNpemVkRGVsaW1gIHdpdGggb3VyIGNhbGN1bGF0ZWQgdG90YWxcbiAgLy8gaGVpZ2h0XG5cbiAgcmV0dXJuIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCB0b3RhbEhlaWdodCwgdHJ1ZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG59O1xuXG52YXIgZGVsaW1pdGVyID0ge1xuICBzcXJ0SW1hZ2U6IG1ha2VTcXJ0SW1hZ2UsXG4gIHNpemVkRGVsaW06IG1ha2VTaXplZERlbGltLFxuICBzaXplVG9NYXhIZWlnaHQ6IHNpemVUb01heEhlaWdodCxcbiAgY3VzdG9tU2l6ZWREZWxpbTogbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn07XG5cbi8vIEV4dHJhIGRhdGEgbmVlZGVkIGZvciB0aGUgZGVsaW1pdGVyIGhhbmRsZXIgZG93biBiZWxvd1xudmFyIGRlbGltaXRlclNpemVzID0ge1xuICBcIlxcXFxiaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiA0XG4gIH1cbn07XG52YXIgZGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiPFwiLCBcIj5cIiwgXCJcXFxcbGFuZ2xlXCIsIFwiXFx1MjdlOFwiLCBcIlxcXFxyYW5nbGVcIiwgXCJcXHUyN2U5XCIsIFwiXFxcXGx0XCIsIFwiXFxcXGd0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN2VlXCIsIFwiXFx1MjdlZlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM2IwXCIsIFwiXFx1MjNiMVwiLCBcIi9cIiwgXCJcXFxcYmFja3NsYXNoXCIsIFwifFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXHxcIiwgXCJcXFxcVmVydFwiLCBcIlxcXFx1cGFycm93XCIsIFwiXFxcXFVwYXJyb3dcIiwgXCJcXFxcZG93bmFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcIi5cIl07XG5cbi8vIERlbGltaXRlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNoZWNrRGVsaW1pdGVyKGRlbGltLCBjb250ZXh0KSB7XG4gIHZhciBzeW1EZWxpbSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoZGVsaW0pO1xuXG4gIGlmIChzeW1EZWxpbSAmJiB1dGlscy5jb250YWlucyhkZWxpbWl0ZXJzLCBzeW1EZWxpbS50ZXh0KSkge1xuICAgIHJldHVybiBzeW1EZWxpbTtcbiAgfSBlbHNlIGlmIChzeW1EZWxpbSkge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXIgJ1wiICsgc3ltRGVsaW0udGV4dCArIFwiJyBhZnRlciAnXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCInXCIsIGRlbGltKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJ1wiICsgZGVsaW0udHlwZSArIFwiJ1wiLCBkZWxpbSk7XG4gIH1cbn1cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImRlbGltc2l6aW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcYmlnbFwiLCBcIlxcXFxCaWdsXCIsIFwiXFxcXGJpZ2dsXCIsIFwiXFxcXEJpZ2dsXCIsIFwiXFxcXGJpZ3JcIiwgXCJcXFxcQmlnclwiLCBcIlxcXFxiaWdnclwiLCBcIlxcXFxCaWdnclwiLCBcIlxcXFxiaWdtXCIsIFwiXFxcXEJpZ21cIiwgXCJcXFxcYmlnZ21cIiwgXCJcXFxcQmlnZ21cIiwgXCJcXFxcYmlnXCIsIFwiXFxcXEJpZ1wiLCBcIlxcXFxiaWdnXCIsIFwiXFxcXEJpZ2dcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wicHJpbWl0aXZlXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIHN0aWxsIGNvdW50IGFzIGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGRvbid0XG4gICAgICAvLyBzaG93IGFueXRoaW5nLlxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdKTtcbiAgICB9IC8vIFVzZSBkZWxpbWl0ZXIuc2l6ZWREZWxpbSB0byBnZW5lcmF0ZSB0aGUgZGVsaW1pdGVyLlxuXG5cbiAgICByZXR1cm4gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIGdyb3VwLnNpemUsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtncm91cC5tY2xhc3NdKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZ3JvdXAgPT4ge1xuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltICE9PSBcIi5cIikge1xuICAgICAgY2hpbGRyZW4ucHVzaChtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSkpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBjaGlsZHJlbik7XG5cbiAgICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICAvLyBPbmx5IHNvbWUgb2YgdGhlIGRlbGltc2l6aW5nIGZ1bmN0aW9ucyBhY3QgYXMgZmVuY2VzLCBhbmQgdGhleVxuICAgICAgLy8gcmV0dXJuIFwibW9wZW5cIiBvciBcIm1jbG9zZVwiIG1jbGFzcy5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFeHBsaWNpdGx5IGRpc2FibGUgZmVuY2luZyBpZiBpdCdzIG5vdCBhIGZlbmNlLCB0byBvdmVycmlkZSB0aGVcbiAgICAgIC8vIGRlZmF1bHRzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcImZhbHNlXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBzaXplID0gbWFrZUVtKGRlbGltaXRlci5zaXplVG9NYXhIZWlnaHRbZ3JvdXAuc2l6ZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWluc2l6ZVwiLCBzaXplKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1heHNpemVcIiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxcXHJpZ2h0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodC1yaWdodFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KS50ZXh0LFxuICAgICAgY29sb3IgLy8gdW5kZWZpbmVkIGlmIG5vdCBzZXQgdmlhIFxcY29sb3JcblxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICBuYW1lczogW1wiXFxcXGxlZnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcbiAgICB2YXIgcGFyc2VyID0gY29udGV4dC5wYXJzZXI7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuXG4gICAgKytwYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIHBhcnNlRXhwcmVzc2lvbiBzdG9wcyBiZWZvcmUgJ1xcXFxyaWdodCdcblxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgLS1wYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIENoZWNrIHRoZSBuZXh0IHRva2VuXG5cbiAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXHJpZ2h0XCIsIGZhbHNlKTtcbiAgICB2YXIgcmlnaHQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImxlZnRyaWdodC1yaWdodFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keSxcbiAgICAgIGxlZnQ6IGRlbGltLnRleHQsXG4gICAgICByaWdodDogcmlnaHQuZGVsaW0sXG4gICAgICByaWdodENvbG9yOiByaWdodC5jb2xvclxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApOyAvLyBCdWlsZCB0aGUgaW5uZXIgZXhwcmVzc2lvblxuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5sZWZ0ICE9PSBcIi5cIikge1xuICAgICAgdmFyIGxlZnROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoZ3JvdXAubGVmdCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIGxlZnROb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGlubmVyLnVuc2hpZnQobGVmdE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5yaWdodCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciByaWdodE5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5yaWdodCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG5cbiAgICAgIGlmIChncm91cC5yaWdodENvbG9yKSB7XG4gICAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAucmlnaHRDb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGlubmVyLnB1c2gocmlnaHROb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyhpbm5lcik7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1pZGRsZVwiLFxuICBuYW1lczogW1wiXFxcXG1pZGRsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuXG4gICAgaWYgKCFjb250ZXh0LnBhcnNlci5sZWZ0cmlnaHREZXB0aCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbWlkZGxlIHdpdGhvdXQgcHJlY2VkaW5nIFxcXFxsZWZ0XCIsIGRlbGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtaWRkbGVcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWlkZGxlRGVsaW07XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICBtaWRkbGVEZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkZGxlRGVsaW0gPSBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgMSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW10pO1xuICAgICAgdmFyIGlzTWlkZGxlID0ge1xuICAgICAgICBkZWxpbTogZ3JvdXAuZGVsaW0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH07IC8vIFByb3BlcnR5IGBpc01pZGRsZWAgbm90IGRlZmluZWQgb24gYHNwYW5gLiBJdCBpcyBvbmx5IHVzZWQgaW5cbiAgICAgIC8vIHRoaXMgZmlsZSBhYm92ZS5cbiAgICAgIC8vIFRPRE86IEZpeCB0aGlzIHZpb2xhdGlvbiBvZiB0aGUgYHNwYW5gIHR5cGUgYW5kIHBvc3NpYmx5IHJlbmFtZVxuICAgICAgLy8gdGhpbmdzIHNpbmNlIGBpc01pZGRsZWAgc291bmRzIGxpa2UgYSBib29sZWFuLCBidXQgaXMgYSBzdHJ1Y3QuXG4gICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIG1pZGRsZURlbGltLmlzTWlkZGxlID0gaXNNaWRkbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pZGRsZURlbGltO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBBIEZpcmVmb3ggXFxtaWRkbGUgd2lsbCBzdHJldGNoIGEgY2hhcmFjdGVyIHZlcnRpY2FsbHkgb25seSBpZiBpdFxuICAgIC8vIGlzIGluIHRoZSBmZW5jZSBwYXJ0IG9mIHRoZSBvcGVyYXRvciBkaWN0aW9uYXJ5IGF0OlxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwzL2FwcGVuZGl4Yy5odG1sLlxuICAgIC8vIFNvIHdlIG5lZWQgdG8gYXZvaWQgVSsyMjIzIGFuZCB1c2UgcGxhaW4gXCJ8XCIgaW5zdGVhZC5cbiAgICB2YXIgdGV4dE5vZGUgPSBncm91cC5kZWxpbSA9PT0gXCJcXFxcdmVydFwiIHx8IGdyb3VwLmRlbGltID09PSBcInxcIiA/IG1ha2VUZXh0KFwifFwiLCBcInRleHRcIikgOiBtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSk7XG4gICAgdmFyIG1pZGRsZU5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0Tm9kZV0pO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpOyAvLyBNYXRoTUwgZ2l2ZXMgNS8xOGVtIHNwYWNpbmcgdG8gZWFjaCA8bW8+IGVsZW1lbnQuXG4gICAgLy8gXFxtaWRkbGUgc2hvdWxkIGdldCBkZWxpbWl0ZXIgc3BhY2luZyBpbnN0ZWFkLlxuXG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgcmV0dXJuIG1pZGRsZU5vZGU7XG4gIH1cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkNyA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBcXGNhbmNlbCwgXFxiY2FuY2VsLCBcXHhjYW5jZWwsIFxcc291dCwgXFxmYm94LCBcXGNvbG9yYm94LCBcXGZjb2xvcmJveCwgXFxwaGFzZVxuICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAvLyB0aGVtIGluIGEgc3Bhbi5cbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuICB2YXIgc2NhbGUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB2YXIgaW1nO1xuICB2YXIgaW1nU2hpZnQgPSAwOyAvLyBJbiB0aGUgTGFUZVggY2FuY2VsIHBhY2thZ2UsIGxpbmUgZ2VvbWV0cnkgaXMgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzdWJqZWN0IGlzIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCwgb3IgdmljZSB2ZXJzYS5cbiAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgd2lkdGggb2YgYSBncm91cCwgc28gYXMgYSBwcm94eSwgd2UgdGVzdCBpZlxuICAvLyB0aGUgc3ViamVjdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuIFRoaXMgY2FwdHVyZXMgbW9zdCBvZiB0aGVcbiAgLy8gc3ViamVjdHMgdGhhdCBzaG91bGQgZ2V0IHRoZSBcInRhbGxcIiB0cmVhdG1lbnQuXG5cbiAgdmFyIGlzU2luZ2xlQ2hhciA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGdyb3VwLmJvZHkpO1xuXG4gIGlmIChsYWJlbCA9PT0gXCJzb3V0XCIpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBcInNvdXRcIl0pO1xuICAgIGltZy5oZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MgLyBzY2FsZTtcbiAgICBpbWdTaGlmdCA9IC0wLjUgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgfSBlbHNlIGlmIChsYWJlbCA9PT0gXCJwaGFzZVwiKSB7XG4gICAgLy8gU2V0IGEgY291cGxlIG9mIGRpbWVuc2lvbnMgZnJvbSB0aGUgc3RlaW5tZXR6IHBhY2thZ2UuXG4gICAgdmFyIGxpbmVXZWlnaHQgPSBjYWxjdWxhdGVTaXplKHtcbiAgICAgIG51bWJlcjogMC42LFxuICAgICAgdW5pdDogXCJwdFwiXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdmFyIGNsZWFyYW5jZSA9IGNhbGN1bGF0ZVNpemUoe1xuICAgICAgbnVtYmVyOiAwLjM1LFxuICAgICAgdW5pdDogXCJleFwiXG4gICAgfSwgb3B0aW9ucyk7IC8vIFByZXZlbnQgc2l6ZSBjaGFuZ2VzIGxpa2UgXFxIdWdlIGZyb20gYWZmZWN0aW5nIGxpbmUgdGhpY2tuZXNzXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpO1xuICAgIHNjYWxlID0gc2NhbGUgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIHZhciBhbmdsZUhlaWdodCA9IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZVdlaWdodCArIGNsZWFyYW5jZTsgLy8gUmVzZXJ2ZSBhIGxlZnQgcGFkIGZvciB0aGUgYW5nbGUuXG5cbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IG1ha2VFbShhbmdsZUhlaWdodCAvIDIgKyBsaW5lV2VpZ2h0KTsgLy8gQ3JlYXRlIGFuIFNWR1xuXG4gICAgdmFyIHZpZXdCb3hIZWlnaHQgPSBNYXRoLmZsb29yKDEwMDAgKiBhbmdsZUhlaWdodCAqIHNjYWxlKTtcbiAgICB2YXIgcGF0aCA9IHBoYXNlUGF0aCh2aWV3Qm94SGVpZ2h0KTtcbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtuZXcgUGF0aE5vZGUoXCJwaGFzZVwiLCBwYXRoKV0sIHtcbiAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHZpZXdCb3hIZWlnaHQgLyAxMDAwKSxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCA0MDAwMDAgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwieE1pbllNaW4gc2xpY2VcIlxuICAgIH0pOyAvLyBXcmFwIGl0IGluIGEgc3BhbiB3aXRoIG92ZXJmbG93OiBoaWRkZW4uXG5cbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXCJoaWRlLXRhaWxcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gICAgaW1nLnN0eWxlLmhlaWdodCA9IG1ha2VFbShhbmdsZUhlaWdodCk7XG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGxpbmVXZWlnaHQgKyBjbGVhcmFuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gQWRkIGhvcml6b250YWwgcGFkZGluZ1xuICAgIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgICAgaWYgKCFpc1NpbmdsZUNoYXIpIHtcbiAgICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiY2FuY2VsLXBhZFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYW5nbHBhZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYm94cGFkXCIpO1xuICAgIH0gLy8gQWRkIHZlcnRpY2FsIHBhZGRpbmdcblxuXG4gICAgdmFyIHRvcFBhZCA9IDA7XG4gICAgdmFyIGJvdHRvbVBhZCA9IDA7XG4gICAgdmFyIHJ1bGVUaGlja25lc3MgPSAwOyAvLyByZWY6IGNhbmNlbCBwYWNrYWdlOiBcXGFkdmFuY2VcXHRvdGFsaGVpZ2h0MlxccEAgJSBcIisyXCJcblxuICAgIGlmICgvYm94Ly50ZXN0KGxhYmVsKSkge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICAgICApO1xuICAgICAgdG9wUGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICAgIGJvdHRvbVBhZCA9IHRvcFBhZDtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcywgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzKTtcbiAgICAgIHRvcFBhZCA9IDQgKiBydWxlVGhpY2tuZXNzOyAvLyBnYXAgPSAzIMOXIGxpbmUsIHBsdXMgdGhlIGxpbmUgaXRzZWxmLlxuXG4gICAgICBib3R0b21QYWQgPSBNYXRoLm1heCgwLCAwLjI1IC0gaW5uZXIuZGVwdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3BQYWQgPSBpc1NpbmdsZUNoYXIgPyAwLjIgOiAwO1xuICAgICAgYm90dG9tUGFkID0gdG9wUGFkO1xuICAgIH1cblxuICAgIGltZyA9IHN0cmV0Y2h5LmVuY2xvc2VTcGFuKGlubmVyLCBsYWJlbCwgdG9wUGFkLCBib3R0b21QYWQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJXaWR0aCA9IG1ha2VFbShydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIiAmJiBydWxlVGhpY2tuZXNzICE9PSAwLjA0OSkge1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gbWFrZUVtKHJ1bGVUaGlja25lc3MpO1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgfVxuXG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGJvdHRvbVBhZDtcblxuICAgIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBncm91cC5iYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICAgIGlmIChncm91cC5ib3JkZXJDb2xvcikge1xuICAgICAgICBpbWcuc3R5bGUuYm9yZGVyQ29sb3IgPSBncm91cC5ib3JkZXJDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdmxpc3Q7XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gUHV0IHRoZSBjb2xvciBiYWNrZ3JvdW5kIGJlaGluZCBpbm5lcjtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNsYXNzZXMgPSAvY2FuY2VsfHBoYXNlLy50ZXN0KGxhYmVsKSA/IFtcInN2Zy1hbGlnblwiXSA6IFtdO1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gV3JpdGUgdGhlIFxcY2FuY2VsIHN0cm9rZSBvbiB0b3Agb2YgaW5uZXIuXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogY2xhc3Nlc1xuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgIC8vIFRoZSBjYW5jZWwgcGFja2FnZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBjYW5jZWwgbGluZXMgYWRkIHRoZWlyIGhlaWdodFxuICAgIC8vIHRvIHRoZSBleHByZXNzaW9uLCBidXQgdGVzdHMgc2hvdyB0aGF0IGlzbid0IGhvdyBpdCBhY3R1YWxseSB3b3Jrcy5cbiAgICB2bGlzdC5oZWlnaHQgPSBpbm5lci5oZWlnaHQ7XG4gICAgdmxpc3QuZGVwdGggPSBpbm5lci5kZXB0aDtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSAmJiAhaXNTaW5nbGVDaGFyKSB7XG4gICAgLy8gY2FuY2VsIGRvZXMgbm90IGNyZWF0ZSBob3JpeiBzcGFjZSBmb3IgaXRzIGxpbmUgZXh0ZW5zaW9uLlxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwiY2FuY2VsLWxhcFwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ2ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBmYm94c2VwID0gMDtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5sYWJlbC5pbmRleE9mKFwiY29sb3Jib3hcIikgPiAtMSA/IFwibXBhZGRlZFwiIDogXCJtZW5jbG9zZVwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gIHN3aXRjaCAoZ3JvdXAubGFiZWwpIHtcbiAgICBjYXNlIFwiXFxcXGNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInVwZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYmNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxwaGFzZVwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInBoYXNvcmFuZ2xlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYW5nbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImFjdHVhcmlhbFwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxmY29sb3Jib3hcIjpcbiAgICBjYXNlIFwiXFxcXGNvbG9yYm94XCI6XG4gICAgICAvLyA8bWVuY2xvc2U+IGRvZXNuJ3QgaGF2ZSBhIGdvb2Qgbm90YXRpb24gb3B0aW9uLiBTbyB1c2UgPG1wYWRkZWQ+XG4gICAgICAvLyBpbnN0ZWFkLiBTZXQgc29tZSBhdHRyaWJ1dGVzIHRoYXQgY29tZSBpbmNsdWRlZCB3aXRoIDxtZW5jbG9zZT4uXG4gICAgICBmYm94c2VwID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIDIgKiBmYm94c2VwICsgXCJwdFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIGZib3hzZXAgKyBcInB0XCIpOyAvL1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgZmJveHNlcCArIFwicHRcIik7XG5cbiAgICAgIGlmIChncm91cC5sYWJlbCA9PT0gXCJcXFxcZmNvbG9yYm94XCIpIHtcbiAgICAgICAgdmFyIHRoayA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gdXNlciBvdmVycmlkZVxuICAgICAgICApO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiBcIiArIHRoayArIFwiZW0gc29saWQgXCIgKyBTdHJpbmcoZ3JvdXAuYm9yZGVyQ29sb3IpKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHhjYW5jZWxcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJ1cGRpYWdvbmFsc3RyaWtlIGRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgZ3JvdXAuYmFja2dyb3VuZENvbG9yKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjIsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3JkZXJDb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcImhib3hcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGZib3hcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIiwgXCJcXFxccGhhc2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjQ7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDcsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNlxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGFuZ2xcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wiaGJveFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGFuZ2xcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGVudmlyb25tZW50cy5cbiAqIGBlbnZpcm9ubWVudHMuanNgIGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeSB2aWEgYGVudmlyb25tZW50cy5qc2AuXG4gKi9cbnZhciBfZW52aXJvbm1lbnRzID0ge307XG5mdW5jdGlvbiBkZWZpbmVFbnZpcm9ubWVudChfcmVmKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBuYW1lcyxcbiAgICBwcm9wcyxcbiAgICBoYW5kbGVyLFxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBlbnZpcm9ubWVudHMuXG4gIHZhciBkYXRhID0ge1xuICAgIHR5cGUsXG4gICAgbnVtQXJnczogcHJvcHMubnVtQXJncyB8fCAwLFxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlLFxuICAgIG51bU9wdGlvbmFsQXJnczogMCxcbiAgICBoYW5kbGVyXG4gIH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgIC8vIFRPRE86IFRoZSB2YWx1ZSB0eXBlIG9mIF9lbnZpcm9ubWVudHMgc2hvdWxkIGJlIGEgdHlwZSB1bmlvbiBvZiBhbGxcbiAgICAvLyBwb3NzaWJsZSBgRW52U3BlYzw+YCBwb3NzaWJpbGl0aWVzIGluc3RlYWQgb2YgYEVudlNwZWM8Kj5gLCB3aGljaCBpc1xuICAgIC8vIGFuIGV4aXN0ZW50aWFsIHR5cGUuXG4gICAgX2Vudmlyb25tZW50c1tuYW1lc1tpXV0gPSBkYXRhO1xuICB9XG5cbiAgaWYgKGh0bWxCdWlsZGVyKSB7XG4gICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gIH1cblxuICBpZiAobWF0aG1sQnVpbGRlcikge1xuICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgfVxufVxuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGdsb2JhbC9idWlsdC1pbiBtYWNyb3MuXG4gKiBgbWFjcm9zLmpzYCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkgdmlhIGBtYWNyb3MuanNgLlxuICovXG52YXIgX21hY3JvcyA9IHt9OyAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG9uZSBkYXkgYWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgYW5kIGRvIG1vcmUgdGhpbmdzLlxuXG5mdW5jdGlvbiBkZWZpbmVNYWNybyhuYW1lLCBib2R5KSB7XG4gIF9tYWNyb3NbbmFtZV0gPSBib2R5O1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRITGluZXMocGFyc2VyKSB7XG4gIC8vIFJldHVybiBhbiBhcnJheS4gVGhlIGFycmF5IGxlbmd0aCA9IG51bWJlciBvZiBobGluZXMuXG4gIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdGVsbHMgaWYgdGhlIGxpbmUgaXMgZGFzaGVkLlxuICB2YXIgaGxpbmVJbmZvID0gW107XG4gIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gIHZhciBueHQgPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuXG4gIGlmIChueHQgPT09IFwiXFxcXHJlbGF4XCIpIHtcbiAgICAvLyBcXHJlbGF4IGlzIGFuIGFydGlmYWN0IG9mIHRoZSBcXGNyIG1hY3JvIGJlbG93XG4gICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICAgIG54dCA9IHBhcnNlci5mZXRjaCgpLnRleHQ7XG4gIH1cblxuICB3aGlsZSAobnh0ID09PSBcIlxcXFxobGluZVwiIHx8IG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpIHtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIGhsaW5lSW5mby5wdXNoKG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpO1xuICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgbnh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcbiAgfVxuXG4gIHJldHVybiBobGluZUluZm87XG59XG5cbnZhciB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCA9IGNvbnRleHQgPT4ge1xuICB2YXIgc2V0dGluZ3MgPSBjb250ZXh0LnBhcnNlci5zZXR0aW5ncztcblxuICBpZiAoIXNldHRpbmdzLmRpc3BsYXlNb2RlKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7XCIgKyBjb250ZXh0LmVudk5hbWUgKyBcIn0gY2FuIGJlIHVzZWQgb25seSBpblwiICsgXCIgZGlzcGxheSBtb2RlLlwiKTtcbiAgfVxufTsgLy8gYXV0b1RhZyAoYW4gYXJndW1lbnQgdG8gcGFyc2VBcnJheSkgY2FuIGJlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6XG4vLyAqIHVuZGVmaW5lZDogUmVndWxhciAobm90LXRvcC1sZXZlbCkgYXJyYXk7IG5vIHRhZ3Mgb24gZWFjaCByb3dcbi8vICogdHJ1ZTogQXV0b21hdGljIGVxdWF0aW9uIG51bWJlcmluZywgb3ZlcnJpZGFibGUgYnkgXFx0YWdcbi8vICogZmFsc2U6IFRhZ3MgYWxsb3dlZCBvbiBlYWNoIHJvdywgYnV0IG5vIGF1dG9tYXRpYyBudW1iZXJpbmdcbi8vIFRoaXMgZnVuY3Rpb24gKmRvZXNuJ3QqIHdvcmsgd2l0aCB0aGUgXCJzcGxpdFwiIGVudmlyb25tZW50IG5hbWUuXG5cblxuZnVuY3Rpb24gZ2V0QXV0b1RhZyhuYW1lKSB7XG4gIGlmIChuYW1lLmluZGV4T2YoXCJlZFwiKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbmFtZS5pbmRleE9mKFwiKlwiKSA9PT0gLTE7XG4gIH0gLy8gcmV0dXJuIHVuZGVmaW5lZDtcblxufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIge1xuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgYWRkSm90LFxuICAgIGNvbHMsXG4gICAgYXJyYXlzdHJldGNoLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlLFxuICAgIGF1dG9UYWcsXG4gICAgc2luZ2xlUm93LFxuICAgIGVtcHR5U2luZ2xlUm93LFxuICAgIG1heE51bUNvbHMsXG4gICAgbGVxbm9cbiAgfSA9IF9yZWY7XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuXG4gIGlmICghc2luZ2xlUm93KSB7XG4gICAgLy8gXFxjciBpcyBlcXVpdmFsZW50IHRvIFxcXFwgd2l0aG91dCB0aGUgb3B0aW9uYWwgc2l6ZSBhcmd1bWVudCAoc2VlIGJlbG93KVxuICAgIC8vIFRPRE86IHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aGVuIFxcY3IgaXMgdXNlZCBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG4gICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNyXCIsIFwiXFxcXFxcXFxcXFxccmVsYXhcIik7XG4gIH0gLy8gR2V0IGN1cnJlbnQgYXJyYXlzdHJldGNoIGlmIGl0J3Mgbm90IHNldCBieSB0aGUgZW52aXJvbm1lbnRcblxuXG4gIGlmICghYXJyYXlzdHJldGNoKSB7XG4gICAgdmFyIHN0cmV0Y2ggPSBwYXJzZXIuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KFwiXFxcXGFycmF5c3RyZXRjaFwiKTtcblxuICAgIGlmIChzdHJldGNoID09IG51bGwpIHtcbiAgICAgIC8vIERlZmF1bHQgXFxhcnJheXN0cmV0Y2ggZnJvbSBsdHRhYi5kdHhcbiAgICAgIGFycmF5c3RyZXRjaCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5c3RyZXRjaCA9IHBhcnNlRmxvYXQoc3RyZXRjaCk7XG5cbiAgICAgIGlmICghYXJyYXlzdHJldGNoIHx8IGFycmF5c3RyZXRjaCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107XG4gIHZhciB0YWdzID0gYXV0b1RhZyAhPSBudWxsID8gW10gOiB1bmRlZmluZWQ7IC8vIGFtc21hdGggdXNlcyBcXGdsb2JhbFxcQGVxbnN3dHJ1ZSBhbmQgXFxnbG9iYWxcXEBlcW5zd2ZhbHNlIHRvIHJlcHJlc2VudFxuICAvLyB3aGV0aGVyIHRoaXMgcm93IHNob3VsZCBoYXZlIGFuIGVxdWF0aW9uIG51bWJlci4gIFNpbXVsYXRlIHRoaXMgd2l0aFxuICAvLyBhIFxcQGVxbnN3IG1hY3JvIHNldCB0byAxIG9yIDAuXG5cbiAgZnVuY3Rpb24gYmVnaW5Sb3coKSB7XG4gICAgaWYgKGF1dG9UYWcpIHtcbiAgICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxAZXFuc3dcIiwgXCIxXCIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZFJvdygpIHtcbiAgICBpZiAodGFncykge1xuICAgICAgaWYgKHBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICAgICAgdGFncy5wdXNoKHBhcnNlci5zdWJwYXJzZShbbmV3IFRva2VuKFwiXFxcXGRmQHRhZ1wiKV0pKTtcbiAgICAgICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGRmQHRhZ1wiLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFncy5wdXNoKEJvb2xlYW4oYXV0b1RhZykgJiYgcGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXEBlcW5zd1wiKSA9PT0gXCIxXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJlZ2luUm93KCk7IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgc2luZ2xlUm93ID8gXCJcXFxcZW5kXCIgOiBcIlxcXFxcXFxcXCIpO1xuICAgIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjZWxsID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBjZWxsXG4gICAgfTtcblxuICAgIGlmIChzdHlsZSkge1xuICAgICAgY2VsbCA9IHtcbiAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIikge1xuICAgICAgaWYgKG1heE51bUNvbHMgJiYgcm93Lmxlbmd0aCA9PT0gbWF4TnVtQ29scykge1xuICAgICAgICBpZiAoc2luZ2xlUm93IHx8IGNvbFNlcGFyYXRpb25UeXBlKSB7XG4gICAgICAgICAgLy8ge2VxdWF0aW9ufSBvciB7c3BsaXR9XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJlwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB7YXJyYXl9IGVudmlyb25tZW50XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInRleHRFbnZcIiwgXCJUb28gZmV3IGNvbHVtbnMgXCIgKyBcInNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgZW5kUm93KCk7IC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS4gIEhvd2V2ZXIsIEFNUyBlbnZpcm9ubWVudHMga2VlcCB0aGVcbiAgICAgIC8vIGVtcHR5IHJvdyBpZiBpdCdzIHRoZSBvbmx5IG9uZS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cblxuICAgICAgaWYgKHJvdy5sZW5ndGggPT09IDEgJiYgY2VsbC50eXBlID09PSBcInN0eWxpbmdcIiAmJiBjZWxsLmJvZHlbMF0uYm9keS5sZW5ndGggPT09IDAgJiYgKGJvZHkubGVuZ3RoID4gMSB8fCAhZW1wdHlTaW5nbGVSb3cpKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICB2YXIgc2l6ZSA9IHZvaWQgMDsgLy8gXFxkZWZcXExldEB7XFxsZXRcXFxcXFxtYXRoQGNyfVxuICAgICAgLy8gXFxkZWZcXG1hdGhAY3J7Li4uXFxtYXRoQGNyQH1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQHtcXG5ld0BpZm5leHRjaGFyW1xcbWF0aEBjckBAe1xcbWF0aEBjckBAW1xcekBdfX1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBbIzFdey4uLlxcbWF0aEBjckBAQC4uLn1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBAe1xcY3J9XG5cbiAgICAgIGlmIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwiIFwiKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJvd0dhcHMucHVzaChzaXplID8gc2l6ZS52YWx1ZSA6IG51bGwpO1xuICAgICAgZW5kUm93KCk7IC8vIGNoZWNrIGZvciBcXGhsaW5lKHMpIGZvbGxvd2luZyB0aGUgcm93IHNlcGFyYXRvclxuXG4gICAgICBoTGluZXNCZWZvcmVSb3cucHVzaChnZXRITGluZXMocGFyc2VyKSk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIGJvZHkucHVzaChyb3cpO1xuICAgICAgYmVnaW5Sb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCAmIG9yIFxcXFxcXFxcIG9yIFxcXFxjciBvciBcXFxcZW5kXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgIH1cbiAgfSAvLyBFbmQgY2VsbCBncm91cFxuXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBFbmQgYXJyYXkgZ3JvdXAgZGVmaW5pbmcgXFxjclxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaCxcbiAgICBib2R5LFxuICAgIGNvbHMsXG4gICAgcm93R2FwcyxcbiAgICBoc2tpcEJlZm9yZUFuZEFmdGVyLFxuICAgIGhMaW5lc0JlZm9yZVJvdyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZSxcbiAgICB0YWdzLFxuICAgIGxlcW5vXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zbGljZSgwLCAxKSA9PT0gXCJkXCIpIHtcbiAgICByZXR1cm4gXCJkaXNwbGF5XCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG59XG5cbnZhciBodG1sQnVpbGRlciQ2ID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHI7XG4gIHZhciBjO1xuICB2YXIgbnIgPSBncm91cC5ib2R5Lmxlbmd0aDtcbiAgdmFyIGhMaW5lc0JlZm9yZVJvdyA9IGdyb3VwLmhMaW5lc0JlZm9yZVJvdztcbiAgdmFyIG5jID0gMDtcbiAgdmFyIGJvZHkgPSBuZXcgQXJyYXkobnIpO1xuICB2YXIgaGxpbmVzID0gW107XG4gIHZhciBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoIC8vIEZyb20gTGFUZVggXFxzaG93dGhlXFxhcnJheXJ1bGV3aWR0aC4gRXF1YWxzIDAuMDQgZW0uXG4gIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5hcnJheVJ1bGVXaWR0aCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICk7IC8vIEhvcml6b250YWwgc3BhY2luZ1xuXG4gIHZhciBwdCA9IDEgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgdmFyIGFycmF5Y29sc2VwID0gNSAqIHB0OyAvLyBkZWZhdWx0IHZhbHVlLCBpLmUuIFxcYXJyYXljb2xzZXAgaW4gYXJ0aWNsZS5jbHNcblxuICBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgJiYgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwic21hbGxcIikge1xuICAgIC8vIFdlJ3JlIGluIGEge3NtYWxsbWF0cml4fS4gRGVmYXVsdCBjb2x1bW4gc3BhY2UgaXMgXFx0aGlja3NwYWNlLFxuICAgIC8vIGkuZS4gNS8xOGVtID0gMC4yNzc4ZW0sIHBlciBhbXNtYXRoLmR0eCBmb3Ige3NtYWxsbWF0cml4fS5cbiAgICAvLyBCdXQgdGhhdCBuZWVkcyBhZGp1c3RtZW50IGJlY2F1c2UgTGFUZVggYXBwbGllcyBcXHNjcmlwdHN0eWxlIHRvIHRoZVxuICAgIC8vIGVudGlyZSBhcnJheSwgaW5jbHVkaW5nIHRoZSBjb2xzcGFjZSwgYnV0IHRoaXMgZnVuY3Rpb24gYXBwbGllc1xuICAgIC8vIFxcc2NyaXB0c3R5bGUgb25seSBpbnNpZGUgZWFjaCBlbGVtZW50LlxuICAgIHZhciBsb2NhbE11bHRpcGxpZXIgPSBvcHRpb25zLmhhdmluZ1N0eWxlKFN0eWxlJDEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtcbiAgICBhcnJheWNvbHNlcCA9IDAuMjc3OCAqIChsb2NhbE11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyKTtcbiAgfSAvLyBWZXJ0aWNhbCBzcGFjaW5nXG5cblxuICB2YXIgYmFzZWxpbmVza2lwID0gZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIiA/IGNhbGN1bGF0ZVNpemUoe1xuICAgIG51bWJlcjogMyxcbiAgICB1bml0OiBcImV4XCJcbiAgfSwgb3B0aW9ucykgOiAxMiAqIHB0OyAvLyBzZWUgc2l6ZTEwLmNsb1xuICAvLyBEZWZhdWx0IFxcam90IGZyb20gbHRtYXRoLmR0eFxuICAvLyBUT0RPKGVkZW1haW5lKTogYWxsb3cgb3ZlcnJpZGluZyBcXGpvdCB2aWEgXFxzZXRsZW5ndGggKCM2ODcpXG5cbiAgdmFyIGpvdCA9IDMgKiBwdDtcbiAgdmFyIGFycmF5c2tpcCA9IGdyb3VwLmFycmF5c3RyZXRjaCAqIGJhc2VsaW5lc2tpcDtcbiAgdmFyIGFyc3RydXRIZWlnaHQgPSAwLjcgKiBhcnJheXNraXA7IC8vIFxcc3RydXRib3ggaW4gbHRmc3N0cmMuZHR4IGFuZFxuXG4gIHZhciBhcnN0cnV0RGVwdGggPSAwLjMgKiBhcnJheXNraXA7IC8vIFxcQGFyc3RydXRib3ggaW4gbHR0YWIuZHR4XG5cbiAgdmFyIHRvdGFsSGVpZ2h0ID0gMDsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocykgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXksIGlmIGFueS5cblxuICBmdW5jdGlvbiBzZXRITGluZVBvcyhobGluZXNJbkdhcCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGxpbmVzSW5HYXAubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB0b3RhbEhlaWdodCArPSAwLjI1O1xuICAgICAgfVxuXG4gICAgICBobGluZXMucHVzaCh7XG4gICAgICAgIHBvczogdG90YWxIZWlnaHQsXG4gICAgICAgIGlzRGFzaGVkOiBobGluZXNJbkdhcFtpXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93WzBdKTtcblxuICBmb3IgKHIgPSAwOyByIDwgZ3JvdXAuYm9keS5sZW5ndGg7ICsrcikge1xuICAgIHZhciBpbnJvdyA9IGdyb3VwLmJvZHlbcl07XG4gICAgdmFyIGhlaWdodCA9IGFyc3RydXRIZWlnaHQ7IC8vIFxcQGFycmF5IGFkZHMgYW4gXFxAYXJzdHJ1dFxuXG4gICAgdmFyIGRlcHRoID0gYXJzdHJ1dERlcHRoOyAvLyB0byBlYWNoIHRvdyAodmlhIHRoZSB0ZW1wbGF0ZSlcblxuICAgIGlmIChuYyA8IGlucm93Lmxlbmd0aCkge1xuICAgICAgbmMgPSBpbnJvdy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG91dHJvdyA9IG5ldyBBcnJheShpbnJvdy5sZW5ndGgpO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGlucm93Lmxlbmd0aDsgKytjKSB7XG4gICAgICB2YXIgZWx0ID0gYnVpbGRHcm91cCQxKGlucm93W2NdLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGRlcHRoIDwgZWx0LmRlcHRoKSB7XG4gICAgICAgIGRlcHRoID0gZWx0LmRlcHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGVpZ2h0IDwgZWx0LmhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSBlbHQuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBvdXRyb3dbY10gPSBlbHQ7XG4gICAgfVxuXG4gICAgdmFyIHJvd0dhcCA9IGdyb3VwLnJvd0dhcHNbcl07XG4gICAgdmFyIGdhcCA9IDA7XG5cbiAgICBpZiAocm93R2FwKSB7XG4gICAgICBnYXAgPSBjYWxjdWxhdGVTaXplKHJvd0dhcCwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChnYXAgPiAwKSB7XG4gICAgICAgIC8vIFxcQGFyZ2FycmF5Y3JcbiAgICAgICAgZ2FwICs9IGFyc3RydXREZXB0aDtcblxuICAgICAgICBpZiAoZGVwdGggPCBnYXApIHtcbiAgICAgICAgICBkZXB0aCA9IGdhcDsgLy8gXFxAeGFyZ2FycmF5Y3JcbiAgICAgICAgfVxuXG4gICAgICAgIGdhcCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBJbiBBTVMgbXVsdGlsaW5lIGVudmlyb25tZW50cyBzdWNoIGFzIGFsaWduZWQgYW5kIGdhdGhlcmVkLCByb3dzXG4gICAgLy8gY29ycmVzcG9uZCB0byBsaW5lcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBcXGpvdCBhZGRlZCB0byB0aGVcbiAgICAvLyBcXGJhc2VsaW5lc2tpcCB2aWEgXFxvcGVudXAuXG5cblxuICAgIGlmIChncm91cC5hZGRKb3QpIHtcbiAgICAgIGRlcHRoICs9IGpvdDtcbiAgICB9XG5cbiAgICBvdXRyb3cuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG91dHJvdy5kZXB0aCA9IGRlcHRoO1xuICAgIHRvdGFsSGVpZ2h0ICs9IGhlaWdodDtcbiAgICBvdXRyb3cucG9zID0gdG90YWxIZWlnaHQ7XG4gICAgdG90YWxIZWlnaHQgKz0gZGVwdGggKyBnYXA7IC8vIFxcQHlhcmdhcnJheWNyXG5cbiAgICBib2R5W3JdID0gb3V0cm93OyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSwgaWYgYW55LlxuXG4gICAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93W3IgKyAxXSk7XG4gIH1cblxuICB2YXIgb2Zmc2V0ID0gdG90YWxIZWlnaHQgLyAyICsgb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHZhciBjb2xEZXNjcmlwdGlvbnMgPSBncm91cC5jb2xzIHx8IFtdO1xuICB2YXIgY29scyA9IFtdO1xuICB2YXIgY29sU2VwO1xuICB2YXIgY29sRGVzY3JOdW07XG4gIHZhciB0YWdTcGFucyA9IFtdO1xuXG4gIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3Muc29tZSh0YWcgPT4gdGFnKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggbWFudWFsIHRhZ3MgYW5kL29yIGF1dG9tYXRpYyBlcXVhdGlvbiBudW1iZXJzLlxuICAgIC8vIENyZWF0ZSBub2RlKHMpLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHRyaWdnZXIgQ1NTIGNvdW50ZXIgaW5jcmVtZW50LlxuICAgIGZvciAociA9IDA7IHIgPCBucjsgKytyKSB7XG4gICAgICB2YXIgcncgPSBib2R5W3JdO1xuICAgICAgdmFyIHNoaWZ0ID0gcncucG9zIC0gb2Zmc2V0O1xuICAgICAgdmFyIHRhZyA9IGdyb3VwLnRhZ3Nbcl07XG4gICAgICB2YXIgdGFnU3BhbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKHRhZyA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBhdXRvbWF0aWMgbnVtYmVyaW5nXG4gICAgICAgIHRhZ1NwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJlcW4tbnVtXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gXFxub251bWJlci9cXG5vdGFnIG9yIHN0YXJyZWQgZW52aXJvbm1lbnRcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYW51YWwgXFx0YWdcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBidWlsZEV4cHJlc3Npb24kMSh0YWcsIG9wdGlvbnMsIHRydWUpLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdGFnU3Bhbi5kZXB0aCA9IHJ3LmRlcHRoO1xuICAgICAgdGFnU3Bhbi5oZWlnaHQgPSBydy5oZWlnaHQ7XG4gICAgICB0YWdTcGFucy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHRhZ1NwYW4sXG4gICAgICAgIHNoaWZ0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGMgPSAwLCBjb2xEZXNjck51bSA9IDA7IC8vIENvbnRpbnVlIHdoaWxlIGVpdGhlciB0aGVyZSBhcmUgbW9yZSBjb2x1bW5zIG9yIG1vcmUgY29sdW1uXG4gIC8vIGRlc2NyaXB0aW9ucywgc28gdHJhaWxpbmcgc2VwYXJhdG9ycyBkb24ndCBnZXQgbG9zdC5cbiAgYyA8IG5jIHx8IGNvbERlc2NyTnVtIDwgY29sRGVzY3JpcHRpb25zLmxlbmd0aDsgKytjLCArK2NvbERlc2NyTnVtKSB7XG4gICAgdmFyIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICB2YXIgZmlyc3RTZXBhcmF0b3IgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGNvbERlc2NyLnR5cGUgPT09IFwic2VwYXJhdG9yXCIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc2VwYXJhdG9yIGluIGEgcm93LCBhZGQgYSBzcGFjZVxuICAgICAgLy8gYmV0d2VlbiB0aGVtLlxuICAgICAgaWYgKCFmaXJzdFNlcGFyYXRvcikge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBtYWtlRW0ob3B0aW9ucy5mb250TWV0cmljcygpLmRvdWJsZVJ1bGVTZXApO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFN0eWxlID0gbGluZVR5cGU7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5tYXJnaW4gPSBcIjAgXCIgKyBtYWtlRW0oLXJ1bGVUaGlja25lc3MgLyAyKTtcblxuICAgICAgICB2YXIgX3NoaWZ0ID0gdG90YWxIZWlnaHQgLSBvZmZzZXQ7XG5cbiAgICAgICAgaWYgKF9zaGlmdCkge1xuICAgICAgICAgIHNlcGFyYXRvci5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1fc2hpZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgc2VwYXJhdG9yIHR5cGU6IFwiICsgY29sRGVzY3Iuc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgY29sRGVzY3JOdW0rKztcbiAgICAgIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICAgIGZpcnN0U2VwYXJhdG9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGMgPj0gbmMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBzZXB3aWR0aCA9IHZvaWQgMDtcblxuICAgIGlmIChjID4gMCB8fCBncm91cC5oc2tpcEJlZm9yZUFuZEFmdGVyKSB7XG4gICAgICBzZXB3aWR0aCA9IHV0aWxzLmRlZmx0KGNvbERlc2NyLnByZWdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbCA9IFtdO1xuXG4gICAgZm9yIChyID0gMDsgciA8IG5yOyArK3IpIHtcbiAgICAgIHZhciByb3cgPSBib2R5W3JdO1xuICAgICAgdmFyIGVsZW0gPSByb3dbY107XG5cbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9zaGlmdDIgPSByb3cucG9zIC0gb2Zmc2V0O1xuXG4gICAgICBlbGVtLmRlcHRoID0gcm93LmRlcHRoO1xuICAgICAgZWxlbS5oZWlnaHQgPSByb3cuaGVpZ2h0O1xuICAgICAgY29sLnB1c2goe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogZWxlbSxcbiAgICAgICAgc2hpZnQ6IF9zaGlmdDJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogY29sXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiY29sLWFsaWduLVwiICsgKGNvbERlc2NyLmFsaWduIHx8IFwiY1wiKV0sIFtjb2xdKTtcbiAgICBjb2xzLnB1c2goY29sKTtcblxuICAgIGlmIChjIDwgbmMgLSAxIHx8IGdyb3VwLmhza2lwQmVmb3JlQW5kQWZ0ZXIpIHtcbiAgICAgIHNlcHdpZHRoID0gdXRpbHMuZGVmbHQoY29sRGVzY3IucG9zdGdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHRhZ1NwYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcW5OdW1Db2wgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IHRhZ1NwYW5zXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgZXFuTnVtQ29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGFnXCJdLCBbZXFuTnVtQ29sXSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChbYm9keSwgZXFuTnVtQ29sXSk7XG4gIH1cbn07XG5cbnZhciBhbGlnbk1hcCA9IHtcbiAgYzogXCJjZW50ZXIgXCIsXG4gIGw6IFwibGVmdCBcIixcbiAgcjogXCJyaWdodCBcIlxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkNSA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHRibCA9IFtdO1xuICB2YXIgZ2x1ZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtdLCBbXCJtdHItZ2x1ZVwiXSk7XG4gIHZhciB0YWcgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSwgW1wibW1sLWVxbi1udW1cIl0pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAuYm9keS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBydyA9IGdyb3VwLmJvZHlbaV07XG4gICAgdmFyIHJvdyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBydy5sZW5ndGg7IGorKykge1xuICAgICAgcm93LnB1c2gobmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW2J1aWxkR3JvdXAocndbal0sIG9wdGlvbnMpXSkpO1xuICAgIH1cblxuICAgIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3NbaV0pIHtcbiAgICAgIHJvdy51bnNoaWZ0KGdsdWUpO1xuICAgICAgcm93LnB1c2goZ2x1ZSk7XG5cbiAgICAgIGlmIChncm91cC5sZXFubykge1xuICAgICAgICByb3cudW5zaGlmdCh0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93LnB1c2godGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YmwucHVzaChuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10clwiLCByb3cpKTtcbiAgfVxuXG4gIHZhciB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRhYmxlXCIsIHRibCk7IC8vIFNldCBjb2x1bW4gYWxpZ25tZW50LCByb3cgc3BhY2luZywgY29sdW1uIHNwYWNpbmcsIGFuZFxuICAvLyBhcnJheSBsaW5lcyBieSBzZXR0aW5nIGF0dHJpYnV0ZXMgb24gdGhlIHRhYmxlIGVsZW1lbnQuXG4gIC8vIFNldCB0aGUgcm93IHNwYWNpbmcuIEluIE1hdGhNTCwgd2Ugc3BlY2lmeSBhIGdhcCBkaXN0YW5jZS5cbiAgLy8gV2UgZG8gbm90IHVzZSByb3dHYXBbXSBiZWNhdXNlIE1hdGhNTCBhdXRvbWF0aWNhbGx5IGluY3JlYXNlc1xuICAvLyBjZWxsIGhlaWdodCB3aXRoIHRoZSBoZWlnaHQvZGVwdGggb2YgdGhlIGVsZW1lbnQgY29udGVudC5cbiAgLy8gTGFUZVggXFxhcnJheXN0cmV0Y2ggbXVsdGlwbGllcyB0aGUgcm93IGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlLlxuICAvLyBXZSBzaW11bGF0ZSB0aGlzIGJ5IGFkZGluZyAoYXJyYXlzdHJldGNoIC0gMSllbSB0byB0aGUgZ2FwLiBUaGlzXG4gIC8vIGRvZXMgYSByZWFzb25hYmxlIGpvYiBvZiBhZGp1c3RpbmcgYXJyYXlzIGNvbnRhaW5pbmcgMSBlbSB0YWxsIGNvbnRlbnQuXG4gIC8vIFRoZSAwLjE2IGFuZCAwLjA5IHZhbHVlcyBhcmUgZm91bmQgZW1waXJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGxpbmVzLlxuXG4gIHZhciBnYXAgPSBncm91cC5hcnJheXN0cmV0Y2ggPT09IDAuNSA/IDAuMSAvLyB7c21hbGxtYXRyaXh9LCB7c3ViYXJyYXl9XG4gIDogMC4xNiArIGdyb3VwLmFycmF5c3RyZXRjaCAtIDEgKyAoZ3JvdXAuYWRkSm90ID8gMC4wOSA6IDApO1xuICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFjaW5nXCIsIG1ha2VFbShnYXApKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzICYmIGdyb3VwLmNvbHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZpbmQgY29sdW1uIGFsaWdubWVudCwgY29sdW1uIHNwYWNpbmcsIGFuZCAgdmVydGljYWwgbGluZXMuXG4gICAgdmFyIGNvbHMgPSBncm91cC5jb2xzO1xuICAgIHZhciBjb2x1bW5MaW5lcyA9IFwiXCI7XG4gICAgdmFyIHByZXZUeXBlV2FzQWxpZ24gPSBmYWxzZTtcbiAgICB2YXIgaVN0YXJ0ID0gMDtcbiAgICB2YXIgaUVuZCA9IGNvbHMubGVuZ3RoO1xuXG4gICAgaWYgKGNvbHNbMF0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJ0b3AgXCI7XG4gICAgICBpU3RhcnQgPSAxO1xuICAgIH1cblxuICAgIGlmIChjb2xzW2NvbHMubGVuZ3RoIC0gMV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJib3R0b20gXCI7XG4gICAgICBpRW5kIC09IDE7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSBpU3RhcnQ7IF9pIDwgaUVuZDsgX2krKykge1xuICAgICAgaWYgKGNvbHNbX2ldLnR5cGUgPT09IFwiYWxpZ25cIikge1xuICAgICAgICBhbGlnbiArPSBhbGlnbk1hcFtjb2xzW19pXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tfaV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgICAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IHNpbmdsZSBsaW5lcyBiZXR3ZWVuIGNlbGxzLlxuICAgICAgICAvLyBTbyB3ZSByZWFkIG9ubHkgdGhlIGZpcnN0IG9mIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMuXG4gICAgICAgIGlmIChwcmV2VHlwZVdhc0FsaWduKSB7XG4gICAgICAgICAgY29sdW1uTGluZXMgKz0gY29sc1tfaV0uc2VwYXJhdG9yID09PSBcInxcIiA/IFwic29saWQgXCIgOiBcImRhc2hlZCBcIjtcbiAgICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5hbGlnblwiLCBhbGlnbi50cmltKCkpO1xuXG4gICAgaWYgKC9bc2RdLy50ZXN0KGNvbHVtbkxpbmVzKSkge1xuICAgICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1ubGluZXNcIiwgY29sdW1uTGluZXMudHJpbSgpKTtcbiAgICB9XG4gIH0gLy8gU2V0IGNvbHVtbiBzcGFjaW5nLlxuXG5cbiAgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcImFsaWduXCIpIHtcbiAgICB2YXIgX2NvbHMgPSBncm91cC5jb2xzIHx8IFtdO1xuXG4gICAgdmFyIHNwYWNpbmcgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMTsgX2kyIDwgX2NvbHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgc3BhY2luZyArPSBfaTIgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIgfHwgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiZ2F0aGVyXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIikge1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbnNwYWNpbmdcIiwgXCIwLjVlbVwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMWVtXCIpO1xuICB9IC8vIEFkZHJlc3MgXFxobGluZSBhbmQgXFxoZGFzaGxpbmVcblxuXG4gIHZhciByb3dMaW5lcyA9IFwiXCI7XG4gIHZhciBobGluZXMgPSBncm91cC5oTGluZXNCZWZvcmVSb3c7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1swXS5sZW5ndGggPiAwID8gXCJsZWZ0IFwiIDogXCJcIjtcbiAgbWVuY2xvc2UgKz0gaGxpbmVzW2hsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggPiAwID8gXCJyaWdodCBcIiA6IFwiXCI7XG5cbiAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgaGxpbmVzLmxlbmd0aCAtIDE7IF9pMysrKSB7XG4gICAgcm93TGluZXMgKz0gaGxpbmVzW19pM10ubGVuZ3RoID09PSAwID8gXCJub25lIFwiIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgbGluZSBiZXR3ZWVuIHJvd3MuIFJlYWQgb25lIGVsZW1lbnQuXG4gICAgOiBobGluZXNbX2kzXVswXSA/IFwiZGFzaGVkIFwiIDogXCJzb2xpZCBcIjtcbiAgfVxuXG4gIGlmICgvW3NkXS8udGVzdChyb3dMaW5lcykpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dsaW5lc1wiLCByb3dMaW5lcy50cmltKCkpO1xuICB9XG5cbiAgaWYgKG1lbmNsb3NlICE9PSBcIlwiKSB7XG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1lbmNsb3NlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIG1lbmNsb3NlLnRyaW0oKSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuYXJyYXlzdHJldGNoICYmIGdyb3VwLmFycmF5c3RyZXRjaCA8IDEpIHtcbiAgICAvLyBBIHNtYWxsIGFycmF5LiBXcmFwIGluIHNjcmlwdHN0eWxlIHNvIHJvdyBnYXAgaXMgbm90IHRvbyBsYXJnZS5cbiAgICB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcInNjcmlwdGxldmVsXCIsIFwiMVwiKTtcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn07IC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBhbGlnbiwgYWxpZ24qLCBhbGlnbmVkLCBhbGlnbmF0LCBhbGlnbmF0KiwgYWxpZ25lZGF0LlxuXG5cbnZhciBhbGlnbmVkSGFuZGxlciA9IGZ1bmN0aW9uIGFsaWduZWRIYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgaWYgKGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiZWRcIikgPT09IC0xKSB7XG4gICAgdmFsaWRhdGVBbXNFbnZpcm9ubWVudENvbnRleHQoY29udGV4dCk7XG4gIH1cblxuICB2YXIgY29scyA9IFtdO1xuICB2YXIgc2VwYXJhdGlvblR5cGUgPSBjb250ZXh0LmVudk5hbWUuaW5kZXhPZihcImF0XCIpID4gLTEgPyBcImFsaWduYXRcIiA6IFwiYWxpZ25cIjtcbiAgdmFyIGlzU3BsaXQgPSBjb250ZXh0LmVudk5hbWUgPT09IFwic3BsaXRcIjtcbiAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHtcbiAgICBjb2xzLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICBhdXRvVGFnOiBpc1NwbGl0ID8gdW5kZWZpbmVkIDogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgIGVtcHR5U2luZ2xlUm93OiB0cnVlLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlOiBzZXBhcmF0aW9uVHlwZSxcbiAgICBtYXhOdW1Db2xzOiBpc1NwbGl0ID8gMiA6IHVuZGVmaW5lZCxcbiAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG5cbiAgaWYgKGFyZ3NbMF0gJiYgYXJnc1swXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NbMF0uYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRleHRvcmQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLmJvZHlbaV0sIFwidGV4dG9yZFwiKTtcbiAgICAgIGFyZzAgKz0gdGV4dG9yZC50ZXh0O1xuICAgIH1cblxuICAgIG51bU1hdGhzID0gTnVtYmVyKGFyZzApO1xuICAgIG51bUNvbHMgPSBudW1NYXRocyAqIDI7XG4gIH1cblxuICB2YXIgaXNBbGlnbmVkID0gIW51bUNvbHM7XG4gIHJlcy5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgIGZvciAodmFyIF9pNCA9IDE7IF9pNCA8IHJvdy5sZW5ndGg7IF9pNCArPSAyKSB7XG4gICAgICAvLyBNb2RpZnkgb3JkZ3JvdXAgbm9kZSB3aXRoaW4gc3R5bGluZyBub2RlXG4gICAgICB2YXIgc3R5bGluZyA9IGFzc2VydE5vZGVUeXBlKHJvd1tfaTRdLCBcInN0eWxpbmdcIik7XG4gICAgICB2YXIgb3JkZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShzdHlsaW5nLmJvZHlbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgICBvcmRncm91cC5ib2R5LnVuc2hpZnQoZW1wdHlHcm91cCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FsaWduZWQpIHtcbiAgICAgIC8vIENhc2UgMVxuICAgICAgdmFyIGN1ck1hdGhzID0gcm93Lmxlbmd0aCAvIDI7XG5cbiAgICAgIGlmIChudW1NYXRocyA8IGN1ck1hdGhzKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBudW1Db2xzOyArK19pNSkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNSAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTUgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTVdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgLy8gU2luY2Ugbm8gdHlwZXMgYXJlIHNwZWNpZmllZCBhYm92ZSwgdGhlIHR3byBwb3NzaWJpbGl0aWVzIGFyZVxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIHdyYXBwZWQgaW4ge30gb3IgW10sIGluIHdoaWNoIGNhc2UgUGFyc2VyJ3NcbiAgICAvLyAgIHBhcnNlR3JvdXAoKSByZXR1cm5zIGFuIFwib3JkZ3JvdXBcIiB3cmFwcGluZyBzb21lIHN5bWJvbCBub2RlLlxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIGEgYmFyZSBzeW1ib2wgbm9kZS5cbiAgICB2YXIgc3ltTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoYXJnc1swXSk7XG4gICAgdmFyIGNvbGFsaWduID0gc3ltTm9kZSA/IFthcmdzWzBdXSA6IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIikuYm9keTtcbiAgICB2YXIgY29scyA9IGNvbGFsaWduLm1hcChmdW5jdGlvbiAobmRlKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKG5kZSk7XG4gICAgICB2YXIgY2EgPSBub2RlLnRleHQ7XG5cbiAgICAgIGlmIChcImxjclwiLmluZGV4T2YoY2EpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgICBhbGlnbjogY2FcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY2EgPT09IFwifFwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhcmF0b3JcIixcbiAgICAgICAgICBzZXBhcmF0b3I6IFwifFwiXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcIjpcIlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IHRydWUsXG4gICAgICAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcbiAgICAgIG1heE51bUNvbHM6IGNvbHMubGVuZ3RoXG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcmVzLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBUaGUgbWF0cml4IGVudmlyb25tZW50cyBvZiBhbXNtYXRoIGJ1aWxkcyBvbiB0aGUgYXJyYXkgZW52aXJvbm1lbnRcbi8vIG9mIExhVGVYLCB3aGljaCBpcyBkaXNjdXNzZWQgYWJvdmUuXG4vLyBUaGUgbWF0aHRvb2xzIHBhY2thZ2UgYWRkcyBzdGFycmVkIHZlcnNpb25zIG9mIHRoZSBzYW1lIGVudmlyb25tZW50cy5cbi8vIFRoZXNlIGhhdmUgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gY2hvb3NlIGxlZnR8Y2VudGVyfHJpZ2h0IGp1c3RpZmljYXRpb24uXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wibWF0cml4XCIsIFwicG1hdHJpeFwiLCBcImJtYXRyaXhcIiwgXCJCbWF0cml4XCIsIFwidm1hdHJpeFwiLCBcIlZtYXRyaXhcIiwgXCJtYXRyaXgqXCIsIFwicG1hdHJpeCpcIiwgXCJibWF0cml4KlwiLCBcIkJtYXRyaXgqXCIsIFwidm1hdHJpeCpcIiwgXCJWbWF0cml4KlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lLnJlcGxhY2UoXCIqXCIsIFwiXCIpXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgY29sQWxpZ24gPSBcImNcIjtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogY29sQWxpZ25cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIGlmIChjb250ZXh0LmVudk5hbWUuY2hhckF0KGNvbnRleHQuZW52TmFtZS5sZW5ndGggLSAxKSA9PT0gXCIqXCIpIHtcbiAgICAgIC8vIEl0J3Mgb25lIG9mIHRoZSBtYXRodG9vbHMgc3RhcnJlZCBmdW5jdGlvbnMuXG4gICAgICAvLyBQYXJzZSB0aGUgb3B0aW9uYWwgYWxpZ25tZW50IGFyZ3VtZW50LlxuICAgICAgdmFyIHBhcnNlciA9IGNvbnRleHQucGFyc2VyO1xuICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcblxuICAgICAgaWYgKHBhcnNlci5mZXRjaCgpLnRleHQgPT09IFwiW1wiKSB7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgICAgIGNvbEFsaWduID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNvbEFsaWduKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGwgb3IgYyBvciByXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgICAgcGFyc2VyLmV4cGVjdChcIl1cIik7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBheWxvYWQuY29scyA9IFt7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTsgLy8gUG9wdWxhdGUgY29scyB3aXRoIHRoZSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW4gYWxpZ25tZW50IHNwZWNzLlxuXG4gICAgdmFyIG51bUNvbHMgPSBNYXRoLm1heCgwLCAuLi5yZXMuYm9keS5tYXAocm93ID0+IHJvdy5sZW5ndGgpKTtcbiAgICByZXMuY29scyA9IG5ldyBBcnJheShudW1Db2xzKS5maWxsKHtcbiAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgIH0pO1xuICAgIHJldHVybiBkZWxpbWl0ZXJzID8ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogZGVsaW1pdGVyc1swXSxcbiAgICAgIHJpZ2h0OiBkZWxpbWl0ZXJzWzFdLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkIC8vIFxccmlnaHQgdW5pbmZsdWVuY2VkIGJ5IFxcY29sb3IgaW4gYXJyYXlcblxuICAgIH0gOiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInNtYWxsbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgXCJzY3JpcHRcIik7XG4gICAgcmVzLmNvbFNlcGFyYXRpb25UeXBlID0gXCJzbWFsbFwiO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInN1YmFycmF5XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcblxuICAgIGlmIChjb2xzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHMsXG4gICAgICBoc2tpcEJlZm9yZUFuZEFmdGVyOiBmYWxzZSxcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwic2NyaXB0XCIpO1xuXG4gICAgaWYgKHJlcy5ib2R5Lmxlbmd0aCA+IDAgJiYgcmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBBIGNhc2VzIGVudmlyb25tZW50IChpbiBhbXNtYXRoLnN0eSkgaXMgYWxtb3N0IGVxdWl2YWxlbnQgdG9cbi8vIFxcZGVmXFxhcnJheXN0cmV0Y2h7MS4yfSVcbi8vIFxcbGVmdFxce1xcYmVnaW57YXJyYXl9e0B7fWxAe1xccXVhZH1sQHt9fSDigKYgXFxlbmR7YXJyYXl9XFxyaWdodC5cbi8vIHtkY2FzZXN9IGlzIGEge2Nhc2VzfSBlbnZpcm9ubWVudCB3aGVyZSBjZWxscyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLFxuLy8gYXMgZGVmaW5lZCBpbiBtYXRodG9vbHMuc3R5LlxuLy8ge3JjYXNlc30gaXMgYW5vdGhlciBtYXRodG9vbHMgZW52aXJvbm1lbnQuIEl0J3MgYnJhY2UgaXMgb24gdGhlIHJpZ2h0IHNpZGUuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiY2FzZXNcIiwgXCJkY2FzZXNcIiwgXCJyY2FzZXNcIiwgXCJkcmNhc2VzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMS4yLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJsXCIsXG4gICAgICAgIHByZWdhcDogMCxcbiAgICAgICAgLy8gVE9ETyhrZXZpbmIpIGdldCB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIG1ldHJpY3MgZm9yIFRFWFQgc3R5bGUgd2hpY2ggaXMgd2hhdCB3ZSB3ZXJlXG4gICAgICAgIC8vIGRvaW5nIGJlZm9yZS4gIEJlZm9yZSBhdHRlbXB0aW5nIHRvIGdldCB0aGUgY3VycmVudCBzdHlsZSB3ZVxuICAgICAgICAvLyBzaG91bGQgbG9vayBhdCBUZVgncyBiZWhhdmlvciBlc3BlY2lhbGx5IGZvciBcXG92ZXIgYW5kIG1hdHJpY2VzLlxuICAgICAgICBwb3N0Z2FwOiAxLjBcbiAgICAgICAgLyogMWVtIHF1YWQgKi9cblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICBwb3N0Z2FwOiAwXG4gICAgICB9XVxuICAgIH07XG4gICAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHBheWxvYWQsIGRDZWxsU3R5bGUoY29udGV4dC5lbnZOYW1lKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiclwiKSA+IC0xID8gXCIuXCIgOiBcIlxcXFx7XCIsXG4gICAgICByaWdodDogY29udGV4dC5lbnZOYW1lLmluZGV4T2YoXCJyXCIpID4gLTEgPyBcIlxcXFx9XCIgOiBcIi5cIixcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEluIHRoZSBhbGlnbiBlbnZpcm9ubWVudCwgb25lIHVzZXMgYW1wZXJzYW5kcywgJiwgdG8gc3BlY2lmeSBudW1iZXIgb2Zcbi8vIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCB0byBsb2NhdGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggY29sdW1uLlxuLy8gYWxpZ24gZ2V0cyBhdXRvbWF0aWMgbnVtYmVyaW5nLiBhbGlnbiogYW5kIGFsaWduZWQgZG8gbm90LlxuLy8gVGhlIGFsaWduZWRhdCBlbnZpcm9ubWVudCBjYW4gYmUgdXNlZCBpbiBtYXRoIG1vZGUuXG4vLyBOb3RlIHRoYXQgd2UgYXNzdW1lIFxcbm9tYWxsaW5lc2tpcGxpbWl0IHRvIGJlIHplcm8sXG4vLyBzbyB0aGF0IFxcc3RydXRAIGlzIHRoZSBzYW1lIGFzIFxcc3RydXQuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiYWxpZ25cIiwgXCJhbGlnbipcIiwgXCJhbGlnbmVkXCIsIFwic3BsaXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEEgZ2F0aGVyZWQgZW52aXJvbm1lbnQgaXMgbGlrZSBhbiBhcnJheSBlbnZpcm9ubWVudCB3aXRoIG9uZSBjZW50ZXJlZFxuLy8gY29sdW1uLCBidXQgd2hlcmUgcm93cyBhcmUgY29uc2lkZXJlZCBsaW5lcyBzbyBnZXQgXFxqb3QgbGluZSBzcGFjaW5nXG4vLyBhbmQgY29udGVudHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJnYXRoZXJlZFwiLCBcImdhdGhlclwiLCBcImdhdGhlcipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbXCJnYXRoZXJcIiwgXCJnYXRoZXIqXCJdLCBjb250ZXh0LmVudk5hbWUpKSB7XG4gICAgICB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dChjb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJjXCJcbiAgICAgIH1dLFxuICAgICAgYWRkSm90OiB0cnVlLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGU6IFwiZ2F0aGVyXCIsXG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIGxlcW5vOiBjb250ZXh0LnBhcnNlci5zZXR0aW5ncy5sZXFub1xuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduYXRcIiwgXCJhbGlnbmF0KlwiLCBcImFsaWduZWRhdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGFsaWduZWRIYW5kbGVyLFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiZXF1YXRpb25cIiwgXCJlcXVhdGlvbipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIHNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIG1heE51bUNvbHM6IDEsXG4gICAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgICB9O1xuICAgIHJldHVybiBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwiZGlzcGxheVwiKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiQ0RcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiBwYXJzZUNEKGNvbnRleHQucGFyc2VyKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXG5vbnVtYmVyXCIsIFwiXFxcXGdkZWZcXFxcQGVxbnN3ezB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm90YWdcIiwgXCJcXFxcbm9udW1iZXJcIik7IC8vIENhdGNoIFxcaGxpbmUgb3V0c2lkZSBhcnJheSBlbnZpcm9ubWVudFxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoaXMgaXMuXG4gIG5hbWVzOiBbXCJcXFxcaGxpbmVcIiwgXCJcXFxcaGRhc2hsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoY29udGV4dC5mdW5jTmFtZSArIFwiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50XCIpO1xuICB9XG5cbn0pO1xuXG52YXIgZW52aXJvbm1lbnRzID0gX2Vudmlyb25tZW50cztcblxuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICBuYW1lczogW1wiXFxcXGJlZ2luXCIsIFwiXFxcXGVuZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ0ZXh0XCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIG5hbWVHcm91cCA9IGFyZ3NbMF07XG5cbiAgICBpZiAobmFtZUdyb3VwLnR5cGUgIT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIWVudmlyb25tZW50cy5oYXNPd25Qcm9wZXJ0eShlbnZOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIk5vIHN1Y2ggZW52aXJvbm1lbnQ6IFwiICsgZW52TmFtZSwgbmFtZUdyb3VwKTtcbiAgICAgIH0gLy8gQnVpbGQgdGhlIGVudmlyb25tZW50IG9iamVjdC4gQXJndW1lbnRzIGFuZCBvdGhlciBpbmZvcm1hdGlvbiB3aWxsXG4gICAgICAvLyBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYmVnaW4gYW5kIGVuZCBtZXRob2RzIHVzaW5nIHByb3BlcnRpZXMuXG5cblxuICAgICAgdmFyIGVudiA9IGVudmlyb25tZW50c1tlbnZOYW1lXTtcbiAgICAgIHZhciB7XG4gICAgICAgIGFyZ3M6IF9hcmdzLFxuICAgICAgICBvcHRBcmdzXG4gICAgICB9ID0gcGFyc2VyLnBhcnNlQXJndW1lbnRzKFwiXFxcXGJlZ2lue1wiICsgZW52TmFtZSArIFwifVwiLCBlbnYpO1xuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lLFxuICAgICAgICBwYXJzZXJcbiAgICAgIH07XG4gICAgICB2YXIgcmVzdWx0ID0gZW52LmhhbmRsZXIoY29udGV4dCwgX2FyZ3MsIG9wdEFyZ3MpO1xuICAgICAgcGFyc2VyLmV4cGVjdChcIlxcXFxlbmRcIiwgZmFsc2UpO1xuICAgICAgdmFyIGVuZE5hbWVUb2tlbiA9IHBhcnNlci5uZXh0VG9rZW47XG4gICAgICB2YXIgZW5kID0gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgaWYgKGVuZC5uYW1lICE9PSBlbnZOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZSwgXCJlbnZpcm9ubWVudFwiIGhhbmRsZXIgcmV0dXJucyBhbiBlbnZpcm9ubWVudCBQYXJzZU5vZGVcblxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVudmlyb25tZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG5hbWU6IGVudk5hbWUsXG4gICAgICBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG52YXIgaHRtbEJ1aWxkZXIkNSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1swXSk7XG4gICAgdmFyIGZ1bmMgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmdW5jIGluIGZvbnRBbGlhc2VzKSB7XG4gICAgICBmdW5jID0gZm9udEFsaWFzZXNbZnVuY107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBmdW5jLnNsaWNlKDEpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXGJvbGRzeW1ib2xcIiwgXCJcXFxcYm1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJCb3ggPSB1dGlscy5pc0NoYXJhY3RlckJveChib2R5KTsgLy8gYW1zYnN5LnN0eSdzIFxcYm9sZHN5bWJvbCB1c2VzIFxcYmlucmVsIHNwYWNpbmcgdG8gaW5oZXJpdCB0aGVcbiAgICAvLyBhcmd1bWVudCdzIGJpbnxyZWx8b3JkIHN0YXR1c1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYm9keSksXG4gICAgICBib2R5OiBbe1xuICAgICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGZvbnQ6IFwiYm9sZHN5bWJvbFwiLFxuICAgICAgICBib2R5XG4gICAgICB9XSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiBpc0NoYXJhY3RlckJveFxuICAgIH07XG4gIH1cbn0pOyAvLyBPbGQgZm9udCBjaGFuZ2luZyBmdW5jdGlvbnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxybVwiLCBcIlxcXFxzZlwiLCBcIlxcXFx0dFwiLCBcIlxcXFxiZlwiLCBcIlxcXFxpdFwiLCBcIlxcXFxjYWxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMywgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIGJyZWFrT25Ub2tlblRleHRcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIHtcbiAgICAgIG1vZGVcbiAgICB9ID0gcGFyc2VyO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTtcbiAgICB2YXIgc3R5bGUgPSBcIm1hdGhcIiArIGZ1bmNOYW1lLnNsaWNlKDEpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBmb250OiBzdHlsZSxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgYm9keVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuXG52YXIgYWRqdXN0U3R5bGUgPSAoc2l6ZSwgb3JpZ2luYWxTdHlsZSkgPT4ge1xuICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgdGhpcyBmcmFjdGlvbiBzaG91bGQgYmUgaW4gYmFzZWQgb24gdGhlXG4gIC8vIGZ1bmN0aW9uIHVzZWRcbiAgdmFyIHN0eWxlID0gb3JpZ2luYWxTdHlsZTtcblxuICBpZiAoc2l6ZSA9PT0gXCJkaXNwbGF5XCIpIHtcbiAgICAvLyBHZXQgZGlzcGxheSBzdHlsZSBhcyBhIGRlZmF1bHQuXG4gICAgLy8gSWYgaW5jb21pbmcgc3R5bGUgaXMgc3ViL3N1cCwgdXNlIHN0eWxlLnRleHQoKSB0byBnZXQgY29ycmVjdCBzaXplLlxuICAgIHN0eWxlID0gc3R5bGUuaWQgPj0gU3R5bGUkMS5TQ1JJUFQuaWQgPyBzdHlsZS50ZXh0KCkgOiBTdHlsZSQxLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUpIHtcbiAgICAvLyBXZSdyZSBpbiBhIFxcdGZyYWMgYnV0IGluY29taW5nIHN0eWxlIGlzIGRpc3BsYXlzdHlsZSwgc286XG4gICAgc3R5bGUgPSBTdHlsZSQxLlRFWFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQ7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIgaHRtbEJ1aWxkZXIkNCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBGcmFjdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZXMgNDQ0LTQ0NSwgcnVsZXMgMTUoYS1lKS5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRHcm91cCQxKGdyb3VwLm51bWVyLCBuZXdPcHRpb25zLCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgLy8gXFxjZnJhYyBpbnNlcnRzIGEgXFxzdHJ1dCBpbnRvIHRoZSBudW1lcmF0b3IuXG4gICAgLy8gR2V0IFxcc3RydXQgZGltZW5zaW9ucyBmcm9tIFRlWGJvb2sgcGFnZSAzNTMuXG4gICAgdmFyIGhTdHJ1dCA9IDguNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIHZhciBkU3RydXQgPSAzLjUgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICBudW1lcm0uaGVpZ2h0ID0gbnVtZXJtLmhlaWdodCA8IGhTdHJ1dCA/IGhTdHJ1dCA6IG51bWVybS5oZWlnaHQ7XG4gICAgbnVtZXJtLmRlcHRoID0gbnVtZXJtLmRlcHRoIDwgZFN0cnV0ID8gZFN0cnV0IDogbnVtZXJtLmRlcHRoO1xuICB9XG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoZHN0eWxlKTtcbiAgdmFyIGRlbm9tbSA9IGJ1aWxkR3JvdXAkMShncm91cC5kZW5vbSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG4gIHZhciBydWxlO1xuICB2YXIgcnVsZVdpZHRoO1xuICB2YXIgcnVsZVNwYWNpbmc7XG5cbiAgaWYgKGdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgICAgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucywgcnVsZVdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcImZyYWMtbGluZVwiLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBydWxlV2lkdGggPSBydWxlLmhlaWdodDtcbiAgICBydWxlU3BhY2luZyA9IHJ1bGUuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHJ1bGUgPSBudWxsO1xuICAgIHJ1bGVXaWR0aCA9IDA7XG4gICAgcnVsZVNwYWNpbmcgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gIH0gLy8gUnVsZSAxNWJcblxuXG4gIHZhciBudW1TaGlmdDtcbiAgdmFyIGNsZWFyYW5jZTtcbiAgdmFyIGRlbm9tU2hpZnQ7XG5cbiAgaWYgKHN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTE7XG4gIH0gZWxzZSBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFQpLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9IGVsc2Uge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTI7XG4gIH1cblxuICB2YXIgbGVmdERlbGltO1xuICB2YXIgcmlnaHREZWxpbTtcblxuICBpZiAoZ3JvdXAubGVmdERlbGltID09IG51bGwpIHtcbiAgICBsZWZ0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtb3BlblwiXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAubGVmdERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtb3BlblwiXSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgcmlnaHREZWxpbSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdKTsgLy8gemVybyB3aWR0aCBmb3IgXFxjZnJhY1xuICB9IGVsc2UgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gPT0gbnVsbCkge1xuICAgIHJpZ2h0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtY2xvc2VcIl0pO1xuICB9IGVsc2Uge1xuICAgIHJpZ2h0RGVsaW0gPSBkZWxpbWl0ZXIuY3VzdG9tU2l6ZWREZWxpbShncm91cC5yaWdodERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0uY29uY2F0KG5ld09wdGlvbnMuc2l6aW5nQ2xhc3NlcyhvcHRpb25zKSksIFtsZWZ0RGVsaW0sIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1mcmFjXCJdLCBbZnJhY10pLCByaWdodERlbGltXSwgb3B0aW9ucyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQzID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZnJhY1wiLCBbYnVpbGRHcm91cChncm91cC5udW1lciwgb3B0aW9ucyksIGJ1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG9wdGlvbnMpXSk7XG5cbiAgaWYgKCFncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsaW5ldGhpY2tuZXNzXCIsIFwiMHB4XCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICB2YXIgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgbWFrZUVtKHJ1bGVXaWR0aCkpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG5cbiAgaWYgKHN0eWxlLnNpemUgIT09IG9wdGlvbnMuc3R5bGUuc2l6ZSkge1xuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbbm9kZV0pO1xuICAgIHZhciBpc0Rpc3BsYXkgPSBzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIGlzRGlzcGxheSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjBcIik7XG4gIH1cblxuICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwgfHwgZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgdmFyIHdpdGhEZWxpbXMgPSBbXTtcblxuICAgIGlmIChncm91cC5sZWZ0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIGxlZnRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLmxlZnREZWxpbS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKSldKTtcbiAgICAgIGxlZnRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gobGVmdE9wKTtcbiAgICB9XG5cbiAgICB3aXRoRGVsaW1zLnB1c2gobm9kZSk7XG5cbiAgICBpZiAoZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmlnaHRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLnJpZ2h0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICByaWdodE9wLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHdpdGhEZWxpbXMucHVzaChyaWdodE9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyh3aXRoRGVsaW1zKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxkZnJhY1wiLCBcIlxcXFxmcmFjXCIsIFwiXFxcXHRmcmFjXCIsIFwiXFxcXGRiaW5vbVwiLCBcIlxcXFxiaW5vbVwiLCBcIlxcXFx0Ymlub21cIiwgXCJcXFxcXFxcXGF0b3BmcmFjXCIsIC8vIGNhbuKAmXQgYmUgZW50ZXJlZCBkaXJlY3RseVxuICBcIlxcXFxcXFxcYnJhY2VmcmFjXCIsIFwiXFxcXFxcXFxicmFja2ZyYWNcIiAvLyBkaXR0b1xuICBdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluQXJndW1lbnQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplLFxuICAgICAgYmFyU2l6ZTogbnVsbFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ0LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDNcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxjZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb250aW51ZWQ6IHRydWUsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZTogdHJ1ZSxcbiAgICAgIGxlZnREZWxpbTogbnVsbCxcbiAgICAgIHJpZ2h0RGVsaW06IG51bGwsXG4gICAgICBzaXplOiBcImRpc3BsYXlcIixcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9XG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWYzO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoLFxuICAgICAgdG9rZW5cbiAgICB9O1xuICB9XG5cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwibWF0aFwiLCBcInNpemVcIiwgXCJ0ZXh0XCIsIFwibWF0aFwiLCBcIm1hdGhcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0LCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgbGVmdE5vZGUuZmFtaWx5ID09PSBcIm9wZW5cIiA/IGRlbGltRnJvbVZhbHVlKGxlZnROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgcmlnaHROb2RlID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1sxXSk7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSByaWdodE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgcmlnaHROb2RlLmZhbWlseSA9PT0gXCJjbG9zZVwiID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGFyZ3NbM107XG5cbiAgICBpZiAoc3R5bC50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgIGlmIChzdHlsLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdGV4dE9yZCA9IGFzc2VydE5vZGVUeXBlKHN0eWwuYm9keVswXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcih0ZXh0T3JkLnRleHQpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bCA9IGFzc2VydE5vZGVUeXBlKHN0eWwsIFwidGV4dG9yZFwiKTtcbiAgICAgIHNpemUgPSBzdHlsQXJyYXlbTnVtYmVyKHN0eWwudGV4dCldO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImdlbmZyYWNcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbnVtZXIsXG4gICAgICBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlblxuICAgIH07XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICBuYW1lczogW1wiXFxcXFxcXFxhYm92ZWZyYWNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhcmdUeXBlczogW1wibWF0aFwiLCBcInNpemVcIiwgXCJtYXRoXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmNiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBiYXJTaXplID0gYXNzZXJ0KGFzc2VydE5vZGVUeXBlKGFyZ3NbMV0sIFwiaW5maXhcIikuc2l6ZSk7XG4gICAgdmFyIGRlbm9tID0gYXJnc1syXTtcbiAgICB2YXIgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyLFxuICAgICAgZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTtcblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxuLy8gYWxzbyBcInN1cHN1YlwiIHNpbmNlIGFuIG92ZXIvdW5kZXJicmFjZSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cbnZhciBodG1sQnVpbGRlciQzID0gKGdycCwgb3B0aW9ucykgPT4ge1xuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlOyAvLyBQdWxsIG91dCB0aGUgYFBhcnNlTm9kZTxcImhvcml6QnJhY2VcIj5gIGlmIGBncnBgIGlzIGEgXCJzdXBzdWJcIiBub2RlLlxuXG4gIHZhciBzdXBTdWJHcm91cDtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIFJlZjogTGFUZVggc291cmNlMmU6IH19fX1cXGxpbWl0c31cbiAgICAvLyBpLmUuIExhVGVYIHRyZWF0cyB0aGUgYnJhY2Ugc2ltaWxhciB0byBhbiBvcCBhbmQgcGFzc2VzIGl0XG4gICAgLy8gd2l0aCBcXGxpbWl0cywgc28gd2UgbmVlZCB0byBhc3NpZ24gc3Vwc3ViIHN0eWxlLlxuICAgIHN1cFN1Ykdyb3VwID0gZ3JwLnN1cCA/IGJ1aWxkR3JvdXAkMShncnAuc3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucykgOiBidWlsZEdyb3VwJDEoZ3JwLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkR3JvdXAkMShncm91cC5iYXNlLCBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShTdHlsZSQxLkRJU1BMQVkpKTsgLy8gQ3JlYXRlIHRoZSBzdHJldGNoeSBlbGVtZW50XG5cbiAgdmFyIGJyYWNlQm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zICAgICAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgLy8gVGhpcyBmaXJzdCB2bGlzdCBjb250YWlucyB0aGUgY29udGVudCBhbmQgdGhlIGJyYWNlOiAgIGVxdWF0aW9uXG5cbiAgdmFyIHZsaXN0O1xuXG4gIGlmIChncm91cC5pc092ZXIpIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAwLjFcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9IGVsc2Uge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgIHBvc2l0aW9uRGF0YTogYm9keS5kZXB0aCArIDAuMSArIGJyYWNlQm9keS5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gIH1cblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBUbyB3cml0ZSB0aGUgc3Vwc3ViLCB3cmFwIHRoZSBmaXJzdCB2bGlzdCBpbiBhbm90aGVyIHZsaXN0OlxuICAgIC8vIFRoZXkgY2FuJ3QgYWxsIGdvIGluIHRoZSBzYW1lIHZsaXN0LCBiZWNhdXNlIHRoZSBub3RlIG1pZ2h0IGJlXG4gICAgLy8gd2lkZXIgdGhhbiB0aGUgZXF1YXRpb24uIFdlIHdhbnQgdGhlIGVxdWF0aW9uIHRvIGNvbnRyb2wgdGhlXG4gICAgLy8gYnJhY2Ugd2lkdGguXG4gICAgLy8gICAgICBub3RlICAgICAgICAgIGxvbmcgbm90ZSAgICAgICAgICAgbG9uZyBub3RlXG4gICAgLy8gICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJMgICBvciAgICDilI/ilIHilIHilIHilJMgICAgIG5vdCAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgICAvLyAgICBlcXVhdGlvbiAgICAgICAgICAgZXFuICAgICAgICAgICAgICAgICBlcW5cbiAgICB2YXIgdlNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5pc092ZXIpIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiB2U3Bhbi5kZXB0aCArIDAuMiArIHN1cFN1Ykdyb3VwLmhlaWdodCArIHN1cFN1Ykdyb3VwLmRlcHRoLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBzdXBTdWJHcm91cFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgICAgc2l6ZTogMC4yXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB2U3BhblxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkMiA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IHN0cmV0Y2h5Lm1hdGhNTG5vZGUoZ3JvdXAubGFiZWwpO1xuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbn07IC8vIEhvcml6b250YWwgc3RyZXRjaHkgYnJhY2VzXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImhvcml6QnJhY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVyYnJhY2VcIiwgXCJcXFxcdW5kZXJicmFjZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDMsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMlxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxocmVmXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxocmVmXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZixcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUFuY2hvcihncm91cC5ocmVmLCBbXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBNYXRoTm9kZSkpIHtcbiAgICAgIG1hdGggPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFttYXRoXSk7XG4gICAgfVxuXG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGdyb3VwLmhyZWYpO1xuICAgIHJldHVybiBtYXRoO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcdXJsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInVybFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcdXJsXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFx1cmxcIik7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhyZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gaHJlZltpXTtcblxuICAgICAgaWYgKGMgPT09IFwiflwiKSB7XG4gICAgICAgIGMgPSBcIlxcXFx0ZXh0YXNjaWl0aWxkZVwiO1xuICAgICAgfVxuXG4gICAgICBjaGFycy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBjXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYm9keSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBcIlxcXFx0ZXh0dHRcIixcbiAgICAgIGJvZHk6IGNoYXJzXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWYsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveCwgYXMgaW5cbi8vIFxcdmNlbnRlcntcXGhib3h7JFxcZnJhY3thK2J9e1xcZGZyYWN7Y317ZH19JH19XG4vLyBUaGlzIGZ1bmN0aW9uIGJ5IGl0c2VsZiBkb2Vzbid0IGRvIGFueXRoaW5nIGJ1dCBwcmV2ZW50IGEgc29mdCBsaW5lIGJyZWFrLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaGJveFwiLFxuICBuYW1lczogW1wiXFxcXGhib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJoYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxDbGFzc1wiLCBcIlxcXFxodG1sSWRcIiwgXCJcXFxcaHRtbFN0eWxlXCIsIFwiXFxcXGh0bWxEYXRhXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInJhd1wiLCBcIm9yaWdpbmFsXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmO1xuICAgIHZhciB2YWx1ZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwicmF3XCIpLnN0cmluZztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImh0bWxFeHRlbnNpb25cIiwgXCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZVwiKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ1c3RDb250ZXh0O1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGh0bWxDbGFzc1wiOlxuICAgICAgICBhdHRyaWJ1dGVzLmNsYXNzID0gdmFsdWU7XG4gICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICBjb21tYW5kOiBcIlxcXFxodG1sQ2xhc3NcIixcbiAgICAgICAgICBjbGFzczogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcaHRtbElkXCI6XG4gICAgICAgIGF0dHJpYnV0ZXMuaWQgPSB2YWx1ZTtcbiAgICAgICAgdHJ1c3RDb250ZXh0ID0ge1xuICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxJZFwiLFxuICAgICAgICAgIGlkOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxodG1sU3R5bGVcIjpcbiAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IHZhbHVlO1xuICAgICAgICB0cnVzdENvbnRleHQgPSB7XG4gICAgICAgICAgY29tbWFuZDogXCJcXFxcaHRtbFN0eWxlXCIsXG4gICAgICAgICAgc3R5bGU6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGh0bWxEYXRhXCI6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleVZhbCA9IGRhdGFbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXFxcaHRtbERhdGFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJkYXRhLVwiICsga2V5VmFsWzBdLnRyaW0oKV0gPSBrZXlWYWxbMV0udHJpbSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxEYXRhXCIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh0cnVzdENvbnRleHQpKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGZ1bmNOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgdmFyIGNsYXNzZXMgPSBbXCJlbmNsb3NpbmdcIl07XG5cbiAgICBpZiAoZ3JvdXAuYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgY2xhc3Nlcy5wdXNoKC4uLmdyb3VwLmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9cXHMrLykpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgZWxlbWVudHMsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiBncm91cC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0ciAhPT0gXCJjbGFzc1wiICYmIGdyb3VwLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYXR0ciwgZ3JvdXAuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sbWF0aG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGh0bWw6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pLFxuICAgICAgbWF0aG1sOiBvcmRhcmd1bWVudChhcmdzWzFdKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5odG1sLCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG5cbnZhciBzaXplRGF0YSA9IGZ1bmN0aW9uIHNpemVEYXRhKHN0cikge1xuICBpZiAoL15bLStdPyAqKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspJC8udGVzdChzdHIpKSB7XG4gICAgLy8gc3RyIGlzIGEgbnVtYmVyIHdpdGggbm8gdW5pdCBzcGVjaWZpZWQuXG4gICAgLy8gZGVmYXVsdCB1bml0IGlzIGJwLCBwZXIgZ3JhcGhpeCBwYWNrYWdlLlxuICAgIHJldHVybiB7XG4gICAgICBudW1iZXI6ICtzdHIsXG4gICAgICB1bml0OiBcImJwXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC8oWy0rXT8pICooXFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhzdHIpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIHNpemU6ICdcIiArIHN0ciArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIHdpZHRoID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLjksXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9OyAvLyBzb3J0YSBjaGFyYWN0ZXIgc2l6ZWQuXG5cbiAgICB2YXIgdG90YWxoZWlnaHQgPSB7XG4gICAgICBudW1iZXI6IDAsXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9O1xuICAgIHZhciBhbHQgPSBcIlwiO1xuXG4gICAgaWYgKG9wdEFyZ3NbMF0pIHtcbiAgICAgIHZhciBhdHRyaWJ1dGVTdHIgPSBhc3NlcnROb2RlVHlwZShvcHRBcmdzWzBdLCBcInJhd1wiKS5zdHJpbmc7IC8vIFBhcnNlci5qcyBkb2VzIG5vdCBwYXJzZSBrZXkvdmFsdWUgcGFpcnMuIFdlIGdldCBhIHN0cmluZy5cblxuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTdHIuc3BsaXQoXCIsXCIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleVZhbCA9IGF0dHJpYnV0ZXNbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgIGlmIChrZXlWYWwubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGtleVZhbFsxXS50cmltKCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleVZhbFswXS50cmltKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhbHRcIjpcbiAgICAgICAgICAgICAgYWx0ID0gc3RyO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgICAgICAgIHdpZHRoID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IHNpemVEYXRhKHN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQga2V5OiAnXCIgKyBrZXlWYWxbMF0gKyBcIicgaW4gXFxcXGluY2x1ZGVncmFwaGljcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNyYyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmIChhbHQgPT09IFwiXCIpIHtcbiAgICAgIC8vIE5vIGFsdCBnaXZlbi4gVXNlIHRoZSBmaWxlIG5hbWUuIFN0cmlwIGF3YXkgdGhlIHBhdGguXG4gICAgICBhbHQgPSBzcmM7XG4gICAgICBhbHQgPSBhbHQucmVwbGFjZSgvXi4qW1xcXFwvXS8sICcnKTtcbiAgICAgIGFsdCA9IGFsdC5zdWJzdHJpbmcoMCwgYWx0Lmxhc3RJbmRleE9mKCcuJykpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIixcbiAgICAgIHVybDogc3JjXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbHQ6IGFsdCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgdG90YWxoZWlnaHQ6IHRvdGFsaGVpZ2h0LFxuICAgICAgc3JjOiBzcmNcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGhlaWdodCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgaWYgKGdyb3VwLnRvdGFsaGVpZ2h0Lm51bWJlciA+IDApIHtcbiAgICAgIGRlcHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC50b3RhbGhlaWdodCwgb3B0aW9ucykgLSBoZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogbWFrZUVtKGhlaWdodCArIGRlcHRoKVxuICAgIH07XG5cbiAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IG1ha2VFbSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHRoID4gMCkge1xuICAgICAgc3R5bGUudmVydGljYWxBbGlnbiA9IG1ha2VFbSgtZGVwdGgpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IEltZyhncm91cC5zcmMsIGdyb3VwLmFsdCwgc3R5bGUpO1xuICAgIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG5vZGUuZGVwdGggPSBkZXB0aDtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIG1ha2VFbSgtZGVwdGgpKTtcbiAgICB9XG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0ICsgZGVwdGgpKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgbWFrZUVtKHdpZHRoKSk7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgZ3JvdXAuc3JjKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwia2VyblwiLFxuICBuYW1lczogW1wiXFxcXGtlcm5cIiwgXCJcXFxcbWtlcm5cIiwgXCJcXFxcaHNraXBcIiwgXCJcXFxcbXNraXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiXSxcbiAgICBwcmltaXRpdmU6IHRydWUsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaXplID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuXG4gICAgaWYgKHBhcnNlci5zZXR0aW5ncy5zdHJpY3QpIHtcbiAgICAgIHZhciBtYXRoRnVuY3Rpb24gPSBmdW5jTmFtZVsxXSA9PT0gJ20nOyAvLyBcXG1rZXJuLCBcXG1za2lwXG5cbiAgICAgIHZhciBtdVVuaXQgPSBzaXplLnZhbHVlLnVuaXQgPT09ICdtdSc7XG5cbiAgICAgIGlmIChtYXRoRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKCFtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgXCIgKyAoXCJub3QgXCIgKyBzaXplLnZhbHVlLnVuaXQgKyBcIiB1bml0c1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyLm1vZGUgIT09IFwibWF0aFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRVbml0c1wiLCBcIkxhVGVYJ3MgXCIgKyBmdW5jTmFtZSArIFwiIHdvcmtzIG9ubHkgaW4gbWF0aCBtb2RlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAhbWF0aEZ1bmN0aW9uXG4gICAgICAgIGlmIChtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaW1lbnNpb246IHNpemUudmFsdWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VHbHVlKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBkaW1lbnNpb24gPSBjYWxjdWxhdGVTaXplKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlNwYWNlTm9kZShkaW1lbnNpb24pO1xuICB9XG5cbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGFwXCIsXG4gIG5hbWVzOiBbXCJcXFxcbWF0aGxsYXBcIiwgXCJcXFxcbWF0aHJsYXBcIiwgXCJcXFxcbWF0aGNsYXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBtYXRobGxhcCwgbWF0aHJsYXAsIG1hdGhjbGFwXG4gICAgdmFyIGlubmVyO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCA9PT0gXCJjbGFwXCIpIHtcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly93d3cubWF0aC5sc3UuZWR1L35hcGVybGlzL3B1YmxpY2F0aW9ucy9tYXRoY2xhcC9cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTsgLy8gd3JhcCwgc2luY2UgQ1NTIHdpbGwgY2VudGVyIGEgLmNsYXAgPiAuaW5uZXIgPiBzcGFuXG5cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiaW5uZXJcIl0sIFtpbm5lcl0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cbiAgICAvLyBUaGlzIGNvZGUgcmVzb2x2ZWQgaXNzdWUgIzExNTNcblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0obm9kZS5oZWlnaHQgKyBub2RlLmRlcHRoKTtcblxuICAgIGlmIChub2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1ub2RlLmRlcHRoKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuLnVuc2hpZnQoc3RydXQpOyAvLyBOZXh0LCBwcmV2ZW50IHZlcnRpY2FsIG1pc3BsYWNlbWVudCB3aGVuIG5leHQgdG8gc29tZXRoaW5nIHRhbGwuXG4gICAgLy8gVGhpcyBjb2RlIHJlc29sdmVzIGlzc3VlICMxMjM0XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGhpbmJveFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInZib3hcIl0sIFtub2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCAhPT0gXCJybGFwXCIpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBncm91cC5hbGlnbm1lbnQgPT09IFwibGxhcFwiID8gXCItMVwiIDogXCItMC41XCI7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBvZmZzZXQgKyBcIndpZHRoXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIwcHhcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3R5bGluZ1wiLFxuICBuYW1lczogW1wiXFxcXChcIiwgXCIkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBvdXRlck1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICBwYXJzZXIuc3dpdGNoTW9kZShcIm1hdGhcIik7XG4gICAgdmFyIGNsb3NlID0gZnVuY05hbWUgPT09IFwiXFxcXChcIiA/IFwiXFxcXClcIiA6IFwiJFwiO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgY2xvc2UpO1xuICAgIHBhcnNlci5leHBlY3QoY2xvc2UpO1xuICAgIHBhcnNlci5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzdHlsZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQ2hlY2sgZm9yIGV4dHJhIGNsb3NpbmcgbWF0aCBkZWxpbWl0ZXJzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFwpXCIsIFwiXFxcXF1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJNaXNtYXRjaGVkIFwiICsgY29udGV4dC5mdW5jTmFtZSk7XG4gIH1cblxufSk7XG5cbnZhciBjaG9vc2VNYXRoU3R5bGUgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIFN0eWxlJDEuRElTUExBWS5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLmRpc3BsYXk7XG5cbiAgICBjYXNlIFN0eWxlJDEuVEVYVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnRleHQ7XG5cbiAgICBjYXNlIFN0eWxlJDEuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBTdHlsZSQxLlNDUklQVFNDUklQVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnNjcmlwdHNjcmlwdDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZ3JvdXAudGV4dDtcbiAgfVxufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRoY2hvaWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDQsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZGlzcGxheTogb3JkYXJndW1lbnQoYXJnc1swXSksXG4gICAgICB0ZXh0OiBvcmRhcmd1bWVudChhcmdzWzFdKSxcbiAgICAgIHNjcmlwdDogb3JkYXJndW1lbnQoYXJnc1syXSksXG4gICAgICBzY3JpcHRzY3JpcHQ6IG9yZGFyZ3VtZW50KGFyZ3NbM10pXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGJvZHksIG9wdGlvbnMpO1xuICB9XG59KTtcblxudmFyIGFzc2VtYmxlU3VwU3ViID0gKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgc3R5bGUsIHNsYW50LCBiYXNlU2hpZnQpID0+IHtcbiAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYmFzZV0pO1xuICB2YXIgc3ViSXNTaW5nbGVDaGFyYWN0ZXIgPSBzdWJHcm91cCAmJiB1dGlscy5pc0NoYXJhY3RlckJveChzdWJHcm91cCk7XG4gIHZhciBzdWI7XG4gIHZhciBzdXA7IC8vIFdlIG1hbnVhbGx5IGhhdmUgdG8gaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIFRoaXMsXG4gIC8vIGFzaWRlIGZyb20gdGhlIGtlcm4gY2FsY3VsYXRpb25zLCBpcyBjb3BpZWQgZnJvbSBzdXBzdWIuXG5cbiAgaWYgKHN1cEdyb3VwKSB7XG4gICAgdmFyIGVsZW0gPSBidWlsZEdyb3VwJDEoc3VwR3JvdXAsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUuc3VwKCkpLCBvcHRpb25zKTtcbiAgICBzdXAgPSB7XG4gICAgICBlbGVtLFxuICAgICAga2VybjogTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczIC0gZWxlbS5kZXB0aClcbiAgICB9O1xuICB9XG5cbiAgaWYgKHN1Ykdyb3VwKSB7XG4gICAgdmFyIF9lbGVtID0gYnVpbGRHcm91cCQxKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3ViKSB7XG4gICAgdmFyIHRvcCA9IGJhc2UuaGVpZ2h0IC0gYmFzZVNoaWZ0OyAvLyBTaGlmdCB0aGUgbGltaXRzIGJ5IHRoZSBzbGFudCBvZiB0aGUgc3ltYm9sLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBhcmUgc3VwcG9zZWQgdG8gc2hpZnQgdGhlIGxpbWl0cyBieSAxLzIgb2YgdGhlIHNsYW50LFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSBhcmUgY2VudGVyaW5nIHRoZSBsaW1pdHMgYWRkaW5nIGEgZnVsbCBzbGFudCBvZlxuICAgIC8vIG1hcmdpbiB3aWxsIHNoaWZ0IGJ5IDEvMiB0aGF0LlxuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IHRvcCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBjYXNlIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciAodGhpcyB3b3VsZCBtZWFuIHRoZVxuICAgIC8vIHN1cHN1YiB3YXMgc2VuZGluZyB1cyBhIGdyb3VwIHdpdGggbm8gc3VwZXJzY3JpcHQgb3JcbiAgICAvLyBzdWJzY3JpcHQpIGJ1dCBiZSBzYWZlLlxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gW2ZpbmFsR3JvdXBdO1xuXG4gIGlmIChzdWIgJiYgc2xhbnQgIT09IDAgJiYgIXN1YklzU2luZ2xlQ2hhcmFjdGVyKSB7XG4gICAgLy8gQSBuZWdhdGl2ZSBtYXJnaW4tbGVmdCB3YXMgYXBwbGllZCB0byB0aGUgbG93ZXIgbGltaXQuXG4gICAgLy8gQXZvaWQgYW4gb3ZlcmxhcCBieSBwbGFjaW5nIGEgc3BhY2VyIG9uIHRoZSBsZWZ0IG9uIHRoZSBncm91cC5cbiAgICB2YXIgc3BhY2VyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgc3BhY2VyLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNsYW50KTtcbiAgICBwYXJ0cy51bnNoaWZ0KHNwYWNlcik7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCIsIFwib3AtbGltaXRzXCJdLCBwYXJ0cywgb3B0aW9ucyk7XG59O1xuXG4vLyBMaW1pdHMsIHN5bWJvbHNcbi8vIE1vc3Qgb3BlcmF0b3JzIGhhdmUgYSBsYXJnZSBzdWNjZXNzb3Igc3ltYm9sLCBidXQgdGhlc2UgZG9uJ3QuXG52YXIgbm9TdWNjZXNzb3IgPSBbXCJcXFxcc21hbGxpbnRcIl07IC8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5IFwib3BcIiwgYnV0IGFsc29cbi8vIFwic3Vwc3ViXCIgc2luY2Ugc29tZSBvZiB0aGVtIChsaWtlIFxcaW50KSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cblxudmFyIGh0bWxCdWlsZGVyJDIgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUgJiYgZ3JvdXAuc3ltYm9sICYmICF1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAvLyBNb3N0IHN5bWJvbCBvcGVyYXRvcnMgZ2V0IGxhcmdlciBpbiBkaXNwbGF5c3R5bGUgKHJ1bGUgMTMpXG4gICAgbGFyZ2UgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBzeW1ib2wsIGNyZWF0ZSB0aGUgc3ltYm9sLlxuICAgIHZhciBmb250TmFtZSA9IGxhcmdlID8gXCJTaXplMi1SZWd1bGFyXCIgOiBcIlNpemUxLVJlZ3VsYXJcIjtcbiAgICB2YXIgc3Rhc2ggPSBcIlwiO1xuXG4gICAgaWYgKGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpIHtcbiAgICAgIC8vIE5vIGZvbnQgZ2x5cGhzIHlldCwgc28gdXNlIGEgZ2x5cGggdy9vIHRoZSBvdmFsLlxuICAgICAgLy8gVE9ETzogV2hlbiBmb250IGdseXBocyBhcmUgYXZhaWxhYmxlLCBkZWxldGUgdGhpcyBjb2RlLlxuICAgICAgc3Rhc2ggPSBncm91cC5uYW1lLnNsaWNlKDEpO1xuICAgICAgZ3JvdXAubmFtZSA9IHN0YXNoID09PSBcIm9paW50XCIgPyBcIlxcXFxpaW50XCIgOiBcIlxcXFxpaWludFwiO1xuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLm5hbWUsIGZvbnROYW1lLCBcIm1hdGhcIiwgb3B0aW9ucywgW1wibW9wXCIsIFwib3Atc3ltYm9sXCIsIGxhcmdlID8gXCJsYXJnZS1vcFwiIDogXCJzbWFsbC1vcFwiXSk7XG5cbiAgICBpZiAoc3Rhc2gubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2UncmUgaW4gXFxvaWludCBvciBcXG9paWludC4gT3ZlcmxheSB0aGUgb3ZhbC5cbiAgICAgIC8vIFRPRE86IFdoZW4gZm9udCBnbHlwaHMgYXJlIGF2YWlsYWJsZSwgZGVsZXRlIHRoaXMgY29kZS5cbiAgICAgIHZhciBpdGFsaWMgPSBiYXNlLml0YWxpYztcbiAgICAgIHZhciBvdmFsID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKHN0YXNoICsgXCJTaXplXCIgKyAobGFyZ2UgPyBcIjJcIiA6IFwiMVwiKSwgb3B0aW9ucyk7XG4gICAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBiYXNlLFxuICAgICAgICAgIHNoaWZ0OiAwXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBvdmFsLFxuICAgICAgICAgIHNoaWZ0OiBsYXJnZSA/IDAuMDggOiAwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIGdyb3VwLm5hbWUgPSBcIlxcXFxcIiArIHN0YXNoO1xuICAgICAgYmFzZS5jbGFzc2VzLnVuc2hpZnQoXCJtb3BcIik7IC8vICRGbG93Rml4TWVcblxuICAgICAgYmFzZS5pdGFsaWMgPSBpdGFsaWM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgbGlzdCwgY29tcG9zZSB0aGF0IGxpc3QuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG5cbiAgICBpZiAoaW5uZXIubGVuZ3RoID09PSAxICYmIGlubmVyWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGlubmVyLCBvcHRpb25zKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgdGV4dCBvcGVyYXRvci4gQnVpbGQgdGhlIHRleHQgZnJvbSB0aGVcbiAgICAvLyBvcGVyYXRvcidzIG5hbWUuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paWludFwiKSAmJiAhZ3JvdXAuc3VwcHJlc3NCYXNlU2hpZnQpIHtcbiAgICAvLyBXZSBzdXBwcmVzcyB0aGUgc2hpZnQgb2YgdGhlIGJhc2Ugb2YgXFxvdmVyc2V0IGFuZCBcXHVuZGVyc2V0LiBPdGhlcndpc2UsXG4gICAgLy8gc2hpZnQgdGhlIHN5bWJvbCBzbyBpdHMgY2VudGVyIGxpZXMgb24gdGhlIGF4aXMgKHJ1bGUgMTMpLiBJdFxuICAgIC8vIGFwcGVhcnMgdGhhdCBvdXIgZm9udHMgaGF2ZSB0aGUgY2VudGVycyBvZiB0aGUgc3ltYm9scyBhbHJlYWR5XG4gICAgLy8gYWxtb3N0IG9uIHRoZSBheGlzLCBzbyB0aGVzZSBudW1iZXJzIGFyZSB2ZXJ5IHNtYWxsLiBOb3RlIHdlXG4gICAgLy8gZG9uJ3QgYWN0dWFsbHkgYXBwbHkgdGhpcyBoZXJlLCBidXQgaW5zdGVhZCBpdCBpcyB1c2VkIGVpdGhlciBpblxuICAgIC8vIHRoZSB2bGlzdCBjcmVhdGlvbiBvciBzZXBhcmF0ZWx5IHdoZW4gdGhlcmUgYXJlIG5vIGxpbWl0cy5cbiAgICBiYXNlU2hpZnQgPSAoYmFzZS5oZWlnaHQgLSBiYXNlLmRlcHRoKSAvIDIgLSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDsgLy8gVGhlIHNsYW50IG9mIHRoZSBzeW1ib2wgaXMganVzdCBpdHMgaXRhbGljIGNvcnJlY3Rpb24uXG4gICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2xhbnQgPSBiYXNlLml0YWxpYztcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2VTaGlmdCkge1xuICAgICAgYmFzZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgIGJhc2Uuc3R5bGUudG9wID0gbWFrZUVtKGJhc2VTaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDEgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIG5vZGU7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW1ib2wuIEp1c3QgYWRkIHRoZSBzeW1ib2wuXG4gICAgbm9kZSA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5uYW1lLCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXJnZW9wXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZXJhdG9yIHdpdGggY2hpbGRyZW4uIEFkZCB0aGVtLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtb1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtaVwiLCBbbmV3IFRleHROb2RlKGdyb3VwLm5hbWUuc2xpY2UoMSkpXSk7IC8vIEFwcGVuZCBhbiA8bW8+JkFwcGx5RnVuY3Rpb247PC9tbz4uXG4gICAgLy8gcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvUkVDLU1hdGhNTC9jaGFwM18yLmh0bWwjc2VjMy4yLjRcblxuICAgIHZhciBvcGVyYXRvciA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMmMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJjMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMmMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyYzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MmEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MmEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJhMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MmEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJhMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyYzBcIiwgXCJcXHUyMmMxXCIsIFwiXFx1MjJjMlwiLCBcIlxcdTIyYzNcIiwgXCJcXHUyYTAwXCIsIFwiXFx1MmEwMVwiLCBcIlxcdTJhMDJcIiwgXCJcXHUyYTA0XCIsIFwiXFx1MmEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJCaWdPcHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIFRoZXJlIGFyZSAyIGZsYWdzIGZvciBvcGVyYXRvcnM7IHdoZXRoZXIgdGhleSBwcm9kdWNlIGxpbWl0cyBpblxuLy8gZGlzcGxheXN0eWxlLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzeW1ib2xzIGFuZCBzaG91bGQgZ3JvdyBpblxuLy8gZGlzcGxheXN0eWxlLiBUaGVzZSBmb3VyIGdyb3VwcyBjb3ZlciB0aGUgZm91ciBwb3NzaWJsZSBjaG9pY2VzLlxuXG52YXIgc2luZ2xlQ2hhckludGVncmFscyA9IHtcbiAgXCJcXHUyMjJiXCI6IFwiXFxcXGludFwiLFxuICBcIlxcdTIyMmNcIjogXCJcXFxcaWludFwiLFxuICBcIlxcdTIyMmRcIjogXCJcXFxcaWlpbnRcIixcbiAgXCJcXHUyMjJlXCI6IFwiXFxcXG9pbnRcIixcbiAgXCJcXHUyMjJmXCI6IFwiXFxcXG9paW50XCIsXG4gIFwiXFx1MjIzMFwiOiBcIlxcXFxvaWlpbnRcIlxufTsgLy8gTm8gbGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxhcmNzaW5cIiwgXCJcXFxcYXJjY29zXCIsIFwiXFxcXGFyY3RhblwiLCBcIlxcXFxhcmN0Z1wiLCBcIlxcXFxhcmNjdGdcIiwgXCJcXFxcYXJnXCIsIFwiXFxcXGNoXCIsIFwiXFxcXGNvc1wiLCBcIlxcXFxjb3NlY1wiLCBcIlxcXFxjb3NoXCIsIFwiXFxcXGNvdFwiLCBcIlxcXFxjb3RnXCIsIFwiXFxcXGNvdGhcIiwgXCJcXFxcY3NjXCIsIFwiXFxcXGN0Z1wiLCBcIlxcXFxjdGhcIiwgXCJcXFxcZGVnXCIsIFwiXFxcXGRpbVwiLCBcIlxcXFxleHBcIiwgXCJcXFxcaG9tXCIsIFwiXFxcXGtlclwiLCBcIlxcXFxsZ1wiLCBcIlxcXFxsblwiLCBcIlxcXFxsb2dcIiwgXCJcXFxcc2VjXCIsIFwiXFxcXHNpblwiLCBcIlxcXFxzaW5oXCIsIFwiXFxcXHNoXCIsIFwiXFxcXHRhblwiLCBcIlxcXFx0YW5oXCIsIFwiXFxcXHRnXCIsIFwiXFxcXHRoXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBMaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGRldFwiLCBcIlxcXFxnY2RcIiwgXCJcXFxcaW5mXCIsIFwiXFxcXGxpbVwiLCBcIlxcXFxtYXhcIiwgXCJcXFxcbWluXCIsIFwiXFxcXFByXCIsIFwiXFxcXHN1cFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJiXCIsIFwiXFx1MjIyY1wiLCBcIlxcdTIyMmRcIiwgXCJcXHUyMjJlXCIsIFwiXFx1MjIyZlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjU7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJJbnRlZ3JhbHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7XG5cbi8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5XG4vLyBcIm9wZXJhdG9ybmFtZVwiLCBidXQgYWxzbyAgXCJzdXBzdWJcIiBzaW5jZSBcXG9wZXJhdG9ybmFtZSogY2FuXG4vLyBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxudmFyIGh0bWxCdWlsZGVyJDEgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgICBoYXNMaW1pdHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgfVxuXG4gIHZhciBiYXNlO1xuXG4gIGlmIChncm91cC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICB2YXIgYm9keSA9IGdyb3VwLmJvZHkubWFwKGNoaWxkID0+IHtcbiAgICAgIC8vICRGbG93Rml4TWU6IENoZWNrIGlmIHRoZSBub2RlIGhhcyBhIHN0cmluZyBgdGV4dGAgcHJvcGVydHkuXG4gICAgICB2YXIgY2hpbGRUZXh0ID0gY2hpbGQudGV4dDtcblxuICAgICAgaWYgKHR5cGVvZiBjaGlsZFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiBjaGlsZC5tb2RlLFxuICAgICAgICAgIHRleHQ6IGNoaWxkVGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDb25zb2xpZGF0ZSBmdW5jdGlvbiBuYW1lcyBpbnRvIHN5bWJvbCBjaGFyYWN0ZXJzLlxuXG4gICAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgICAvLyBQZXIgYW1zb3BuIHBhY2thZ2UsXG4gICAgICAgIC8vIGNoYW5nZSBtaW51cyB0byBoeXBoZW4gYW5kIFxcYXN0IHRvIGFzdGVyaXNrXG4gICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBleHByZXNzaW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBbXSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaGFzTGltaXRzKSB7XG4gICAgcmV0dXJuIGFzc2VtYmxlU3VwU3ViKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgb3B0aW9ucy5zdHlsZSwgMCwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoZSBzdGVwcyB0YWtlbiBoZXJlIGFyZSBzaW1pbGFyIHRvIHRoZSBodG1sIHZlcnNpb24uXG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aEZvbnQoXCJtYXRocm1cIikpOyAvLyBJcyBleHByZXNzaW9uIGEgc3RyaW5nIG9yIGhhcyBpdCBzb21ldGhpbmcgbGlrZSBhIGZyYWN0aW9uP1xuXG4gIHZhciBpc0FsbFN0cmluZyA9IHRydWU7IC8vIGRlZmF1bHRcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGV4cHJlc3Npb25baV07XG5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIG1hdGhNTFRyZWUuU3BhY2VOb2RlKSA7IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKG5vZGUgPT4gbm9kZS50b1RleHQoKSkuam9pbihcIlwiKTtcbiAgICBleHByZXNzaW9uID0gW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHdvcmQpXTtcbiAgfVxuXG4gIHZhciBpZGVudGlmaWVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBleHByZXNzaW9uKTtcbiAgaWRlbnRpZmllci5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCBcIm5vcm1hbFwiKTsgLy8gXFx1MjA2MSBpcyB0aGUgc2FtZSBhcyAmQXBwbHlGdW5jdGlvbjtcbiAgLy8gcmVmOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2NoYXJzZXRzL3JlZl9odG1sX2VudGl0aWVzX2EuYXNwXG5cbiAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoXCJcXHUyMDYxXCIsIFwidGV4dFwiKV0pO1xuXG4gIGlmIChncm91cC5wYXJlbnRJc1N1cFN1Yikge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVAXCIsIFwiXFxcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDEsXG4gIG1hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3BlcmF0b3JuYW1lXCIsIFwiXFxcXEBpZnN0YXJcXFxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcXFxvcGVyYXRvcm5hbWVAXCIpO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJvcmRncm91cFwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKGdyb3VwLnNlbWlzaW1wbGUpIHtcbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSksIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3ZlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVybGluZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE92ZXJsaW5lcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZyA0NDMsIFJ1bGUgOS5cbiAgICAvLyBCdWlsZCB0aGUgaW5uZXIgZ3JvdXAgaW4gdGhlIGNyYW1wZWQgc3R5bGUuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIENyZWF0ZSB0aGUgbGluZSBhYm92ZSB0aGUgYm9keVxuXG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJvdmVybGluZS1saW5lXCIsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zXG5cbiAgICB2YXIgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbGluZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJvdmVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBvcGVyYXRvciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx1MjAzZVwiKV0pO1xuICAgIG9wZXJhdG9yLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwidHJ1ZVwiKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSwgZmFsc2UpOyAvLyBcXHBoYW50b20gaXNuJ3Qgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBlbGVtZW50cyBpdCBjb250YWlucy5cbiAgICAvLyBTZWUgXCJjb2xvclwiIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYyLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICBub2RlLmhlaWdodCA9IDA7XG4gICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5baV0uaGVpZ2h0ID0gMDtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5kZXB0aCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBTZWUgc21hc2ggZm9yIGNvbW1lbnQgcmU6IHVzZSBvZiBtYWtlVkxpc3RcblxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXHNtYXNoIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYzLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidnBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhQaGFudG9tKCkpXSk7XG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwicmxhcFwiXSwgW2lubmVyLCBmaXhdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGFtb3VudCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKS52YWx1ZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicmFpc2Vib3hcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZHk6IGFtb3VudCxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgdmFyIGR5ID0gY2FsY3VsYXRlU2l6ZShncm91cC5keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogLWR5LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxccmVsYXhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImludGVybmFsXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZVxuICAgIH07XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaGlmdCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIHdpZHRoID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuICAgIHZhciBoZWlnaHQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcInNpemVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicnVsZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzaGlmdDogc2hpZnQgJiYgYXNzZXJ0Tm9kZVR5cGUoc2hpZnQsIFwic2l6ZVwiKS52YWx1ZSxcbiAgICAgIHdpZHRoOiB3aWR0aC52YWx1ZSxcbiAgICAgIGhlaWdodDogaGVpZ2h0LnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0od2lkdGgpO1xuICAgIHJ1bGUuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSBtYWtlRW0oaGVpZ2h0KTtcbiAgICBydWxlLnN0eWxlLmJvdHRvbSA9IG1ha2VFbShzaGlmdCk7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7XG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5jb2xvciAmJiBvcHRpb25zLmdldENvbG9yKCkgfHwgXCJibGFja1wiO1xuICAgIHZhciBydWxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJtYXRoYmFja2dyb3VuZFwiLCBjb2xvcik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0od2lkdGgpKTtcbiAgICBydWxlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0KSk7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oc2hpZnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImRlcHRoXCIsIG1ha2VFbSgtc2hpZnQpKTtcbiAgICB9XG5cbiAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxufSk7XG5cbmZ1bmN0aW9uIHNpemluZ0dyb3VwKHZhbHVlLCBvcHRpb25zLCBiYXNlT3B0aW9ucykge1xuICB2YXIgaW5uZXIgPSBidWlsZEV4cHJlc3Npb24kMSh2YWx1ZSwgb3B0aW9ucywgZmFsc2UpO1xuICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gQWRkIHNpemUtcmVzZXR0aW5nIGNsYXNzZXMgdG8gdGhlIGlubmVyIGxpc3QgYW5kIHNldCBtYXhGb250U2l6ZVxuICAvLyBtYW51YWxseS4gSGFuZGxlIG5lc3RlZCBzaXplIGNoYW5nZXMuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSBpbm5lcltpXS5jbGFzc2VzLmluZGV4T2YoXCJzaXppbmdcIik7XG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5uZXJbaV0uY2xhc3Nlcywgb3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID09PSBcInJlc2V0LXNpemVcIiArIG9wdGlvbnMuc2l6ZSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBzaXplIGNoYW5nZTogZS5nLiwgaW5uZXJbaV0gaXMgdGhlIFwiYlwiIGluXG4gICAgICAvLyBgXFxIdWdlIGEgXFxzbWFsbCBiYC4gT3ZlcnJpZGUgdGhlIG9sZCBzaXplICh0aGUgYHJlc2V0LWAgY2xhc3MpXG4gICAgICAvLyBidXQgbm90IHRoZSBuZXcgc2l6ZS5cbiAgICAgIGlubmVyW2ldLmNsYXNzZXNbcG9zICsgMV0gPSBcInJlc2V0LXNpemVcIiArIGJhc2VPcHRpb25zLnNpemU7XG4gICAgfVxuXG4gICAgaW5uZXJbaV0uaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgaW5uZXJbaV0uZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoaW5uZXIpO1xufVxudmFyIHNpemVGdW5jcyA9IFtcIlxcXFx0aW55XCIsIFwiXFxcXHNpeHB0c2l6ZVwiLCBcIlxcXFxzY3JpcHRzaXplXCIsIFwiXFxcXGZvb3Rub3Rlc2l6ZVwiLCBcIlxcXFxzbWFsbFwiLCBcIlxcXFxub3JtYWxzaXplXCIsIFwiXFxcXGxhcmdlXCIsIFwiXFxcXExhcmdlXCIsIFwiXFxcXExBUkdFXCIsIFwiXFxcXGh1Z2VcIiwgXCJcXFxcSHVnZVwiXTtcbnZhciBodG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBIYW5kbGUgc2l6aW5nIG9wZXJhdG9ycyBsaWtlIFxcSHVnZS4gUmVhbCBUZVggZG9lc24ndCBhY3R1YWxseSBhbGxvd1xuICAvLyB0aGVzZSBmdW5jdGlvbnMgaW5zaWRlIG9mIG1hdGggZXhwcmVzc2lvbnMsIHNvIHdlIGRvIHNvbWUgc3BlY2lhbFxuICAvLyBoYW5kbGluZy5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUoZ3JvdXAuc2l6ZSk7XG4gIHJldHVybiBzaXppbmdHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKTtcbn07XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic2l6aW5nXCIsXG4gIG5hbWVzOiBzaXplRnVuY3MsXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6aW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzaXplIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYWJvdmVcbiAgICAgIHNpemU6IHNpemVGdW5jcy5pbmRleE9mKGZ1bmNOYW1lKSArIDEsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTsgLy8gVE9ETyhlbWlseSk6IFRoaXMgZG9lc24ndCBwcm9kdWNlIHRoZSBjb3JyZWN0IHNpemUgZm9yIG5lc3RlZCBzaXplXG4gICAgLy8gY2hhbmdlcywgYmVjYXVzZSB3ZSBkb24ndCBrZWVwIHN0YXRlIG9mIHdoYXQgc3R5bGUgd2UncmUgY3VycmVudGx5XG4gICAgLy8gaW4sIHNvIHdlIGNhbid0IHJlc2V0IHRoZSBzaXplIHRvIG5vcm1hbCBiZWZvcmUgY2hhbmdpbmcgaXQuICBOb3dcbiAgICAvLyB0aGF0IHdlJ3JlIHBhc3NpbmcgYW4gb3B0aW9ucyBwYXJhbWV0ZXIgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZml4XG4gICAgLy8gdGhpcy5cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHNpemVcIiwgbWFrZUVtKG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIHNtYXNoLCB3aXRoIG9wdGlvbmFsIFt0Yl0sIGFzIGluIEFNU1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNtYXNoXCIsXG4gIG5hbWVzOiBbXCJcXFxcc21hc2hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncywgb3B0QXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5LFxuICAgICAgc21hc2hIZWlnaHQsXG4gICAgICBzbWFzaERlcHRoXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTtcblxuICAgIGlmICghZ3JvdXAuc21hc2hIZWlnaHQgJiYgIWdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zbWFzaEhlaWdodCkge1xuICAgICAgbm9kZS5oZWlnaHQgPSAwOyAvLyBJbiBvcmRlciB0byBpbmZsdWVuY2UgbWFrZVZMaXN0LCB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjaGlsZHJlbi5cblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIG5vZGUuZGVwdGggPSAwO1xuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW19pXS5kZXB0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3ZlIHJlc2V0IHRoZSBUZVgtbGlrZSBoZWlnaHQgYW5kIGRlcHRoIHZhbHVlcy5cbiAgICAvLyBCdXQgdGhlIHNwYW4gc3RpbGwgaGFzIGFuIEhUTUwgbGluZSBoZWlnaHQuXG4gICAgLy8gbWFrZVZMaXN0IGFwcGxpZXMgXCJkaXNwbGF5OiB0YWJsZS1jZWxsXCIsIHdoaWNoIHByZXZlbnRzIHRoZSBicm93c2VyXG4gICAgLy8gZnJvbSBhY3Rpbmcgb24gdGhhdCBsaW5lIGhlaWdodC4gU28gd2UnbGwgY2FsbCBtYWtlVkxpc3Qgbm93LlxuXG5cbiAgICB2YXIgc21hc2hlZE5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gRm9yIHNwYWNpbmcsIFRlWCB0cmVhdHMgXFxocGhhbnRvbSBhcyBhIG1hdGggZ3JvdXAgKHNhbWUgc3BhY2luZyBhcyBvcmQpLlxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtzbWFzaGVkTm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzcXJ0XCIsXG4gIG5hbWVzOiBbXCJcXFxcc3FydFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgaW5kZXggPSBvcHRBcmdzWzBdO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzcXJ0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTcXVhcmUgcm9vdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgUnVsZSAxMS5cbiAgICAvLyBGaXJzdCwgd2UgZG8gdGhlIHNhbWUgc3RlcHMgYXMgaW4gb3ZlcmxpbmUgdG8gYnVpbGQgdGhlIGlubmVyIGdyb3VwXG4gICAgLy8gYW5kIGxpbmVcbiAgICB2YXIgaW5uZXIgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7XG5cbiAgICBpZiAoaW5uZXIuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAvLyBSZW5kZXIgYSBzbWFsbCBzdXJkLlxuICAgICAgaW5uZXIuaGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG5cbiAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChpbm5lciwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSBzaXplIGZvciB0aGUgXFxzdXJkIGRlbGltaXRlclxuXG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7XG4gICAgdmFyIHRoZXRhID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgcGhpID0gdGhldGE7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pZCA8IFN0eWxlJDEuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIHtcbiAgICAgIHNwYW46IGltZyxcbiAgICAgIHJ1bGVXaWR0aCxcbiAgICAgIGFkdmFuY2VXaWR0aFxuICAgIH0gPSBkZWxpbWl0ZXIuc3FydEltYWdlKG1pbkRlbGltaXRlckhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlbGltRGVwdGggPSBpbWcuaGVpZ2h0IC0gcnVsZVdpZHRoOyAvLyBBZGp1c3QgdGhlIGNsZWFyYW5jZSBiYXNlZCBvbiB0aGUgZGVsaW1pdGVyIHNpemVcblxuICAgIGlmIChkZWxpbURlcHRoID4gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyBsaW5lQ2xlYXJhbmNlKSB7XG4gICAgICBsaW5lQ2xlYXJhbmNlID0gKGxpbmVDbGVhcmFuY2UgKyBkZWxpbURlcHRoIC0gaW5uZXIuaGVpZ2h0IC0gaW5uZXIuZGVwdGgpIC8gMjtcbiAgICB9IC8vIFNoaWZ0IHRoZSBzcXJ0IGltYWdlXG5cblxuICAgIHZhciBpbWdTaGlmdCA9IGltZy5oZWlnaHQgLSBpbm5lci5oZWlnaHQgLSBsaW5lQ2xlYXJhbmNlIC0gcnVsZVdpZHRoO1xuICAgIGlubmVyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gbWFrZUVtKGFkdmFuY2VXaWR0aCk7IC8vIE92ZXJsYXkgdGhlIGltYWdlIGFuZCB0aGUgYXJndW1lbnQuXG5cbiAgICB2YXIgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLShpbm5lci5oZWlnaHQgKyBpbWdTaGlmdClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZ1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogcnVsZVdpZHRoXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFncm91cC5pbmRleCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIG9wdGlvbmFsIHJvb3QgaW5kZXhcbiAgICAgIC8vIFRoZSBpbmRleCBpcyBhbHdheXMgaW4gc2NyaXB0c2NyaXB0IHN0eWxlXG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFRTQ1JJUFQpO1xuICAgICAgdmFyIHJvb3RtID0gYnVpbGRHcm91cCQxKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHtcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH0gPSBncm91cDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG5cbn0pO1xuXG52YXIgc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBTdHlsZSQxLkRJU1BMQVksXG4gIFwidGV4dFwiOiBTdHlsZSQxLlRFWFQsXG4gIFwic2NyaXB0XCI6IFN0eWxlJDEuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVFNDUklQVFxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcZGlzcGxheXN0eWxlXCIsIFwiXFxcXHRleHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzY3JpcHRzdHlsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIC8vIHBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTsgLy8gVE9ETzogUmVmYWN0b3IgdG8gYXZvaWQgZHVwbGljYXRpbmcgc3R5bGVNYXAgaW4gbXVsdGlwbGUgcGxhY2VzIChlLmcuXG4gICAgLy8gaGVyZSBhbmQgaW4gYnVpbGRIVE1MIGFuZCBkZS1kdXBlIHRoZSBlbnVtZXJhdGlvbiBvZiBhbGwgdGhlIHN0eWxlcykuXG4gICAgLy8gJEZsb3dGaXhNZTogVGhlIG5hbWVzIGFib3ZlIGV4YWN0bHkgbWF0Y2ggdGhlIHN0eWxlcy5cblxuICAgIHZhciBzdHlsZSA9IGZ1bmNOYW1lLnNsaWNlKDEsIGZ1bmNOYW1lLmxlbmd0aCAtIDUpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHRvIHVzZSBieSBwdWxsaW5nIG91dCB0aGUgc3R5bGUgZnJvbVxuICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgIHN0eWxlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHlsZSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBnLiA0NDIsIFJ1bGUgMy5cbiAgICB2YXIgbmV3U3R5bGUgPSBzdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgd2UncmUgY2hhbmdpbmcgdG8uXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBodG1sQnVpbGRlckRlbGVnYXRlID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucykge1xuICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgaWYgKCFiYXNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wXCIpIHtcbiAgICAvLyBPcGVyYXRvcnMgaGFuZGxlIHN1cHN1YnMgZGlmZmVyZW50bHkgd2hlbiB0aGV5IGhhdmUgbGltaXRzXG4gICAgLy8gKGUuZy4gYFxcZGlzcGxheXN0eWxlXFxzdW1fMl4zYClcbiAgICB2YXIgZGVsZWdhdGUgPSBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gaHRtbEJ1aWxkZXIkMiA6IG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSB7XG4gICAgdmFyIF9kZWxlZ2F0ZSA9IGJhc2UuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBodG1sQnVpbGRlciQxIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiYWNjZW50XCIpIHtcbiAgICByZXR1cm4gdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZS5iYXNlKSA/IGh0bWxCdWlsZGVyJGEgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICB2YXIgaXNTdXAgPSAhZ3JvdXAuc3ViO1xuICAgIHJldHVybiBpc1N1cCA9PT0gYmFzZS5pc092ZXIgPyBodG1sQnVpbGRlciQzIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsgLy8gU3VwZXIgc2NyaXB0cyBhbmQgc3Vic2NyaXB0cywgd2hvc2UgcHJlY2lzZSBwbGFjZW1lbnQgY2FuIGRlcGVuZCBvbiBvdGhlclxuLy8gZnVuY3Rpb25zIHRoYXQgcHJlY2VkZSB0aGVtLlxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInN1cHN1YlwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGJ1aWxkZXJEZWxlZ2F0ZSkge1xuICAgICAgcmV0dXJuIGJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGJhc2U6IHZhbHVlQmFzZSxcbiAgICAgIHN1cDogdmFsdWVTdXAsXG4gICAgICBzdWI6IHZhbHVlU3ViXG4gICAgfSA9IGdyb3VwO1xuICAgIHZhciBiYXNlID0gYnVpbGRHcm91cCQxKHZhbHVlQmFzZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN1cG07XG4gICAgdmFyIHN1Ym07XG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7IC8vIFJ1bGUgMThhXG5cbiAgICB2YXIgc3VwU2hpZnQgPSAwO1xuICAgIHZhciBzdWJTaGlmdCA9IDA7XG4gICAgdmFyIGlzQ2hhcmFjdGVyQm94ID0gdmFsdWVCYXNlICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KHZhbHVlQmFzZSk7XG5cbiAgICBpZiAodmFsdWVTdXApIHtcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1cCgpKTtcbiAgICAgIHN1cG0gPSBidWlsZEdyb3VwJDEodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkR3JvdXAkMSh2YWx1ZVN1YiwgX25ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gYmFzZS5kZXB0aCArIF9uZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3ViRHJvcCAqIF9uZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIH1cbiAgICB9IC8vIFJ1bGUgMThjXG5cblxuICAgIHZhciBtaW5TdXBTaGlmdDtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkpIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAxO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zdHlsZS5jcmFtcGVkKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDI7XG4gICAgfSAvLyBzY3JpcHRzcGFjZSBpcyBhIGZvbnQtc2l6ZS1pbmRlcGVuZGVudCBzaXplLCBzbyBzY2FsZSBpdFxuICAgIC8vIGFwcHJvcHJpYXRlbHkgZm9yIHVzZSBhcyB0aGUgbWFyZ2luUmlnaHQuXG5cblxuICAgIHZhciBtdWx0aXBsaWVyID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbWFyZ2luUmlnaHQgPSBtYWtlRW0oMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllcik7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBudWxsO1xuXG4gICAgaWYgKHN1Ym0pIHtcbiAgICAgIC8vIFN1YnNjcmlwdHMgc2hvdWxkbid0IGJlIHNoaWZ0ZWQgYnkgdGhlIGJhc2UncyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAgIC8vIEFjY291bnQgZm9yIHRoYXQgYnkgc2hpZnRpbmcgdGhlIHN1YnNjcmlwdCBiYWNrIHRoZSBhcHByb3ByaWF0ZVxuICAgICAgLy8gYW1vdW50LiBOb3RlIHdlIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSBiYXNlIGlzIGEgc2luZ2xlIHN5bWJvbC5cbiAgICAgIHZhciBpc09paW50ID0gZ3JvdXAuYmFzZSAmJiBncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiAmJiBncm91cC5iYXNlLm5hbWUgJiYgKGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5iYXNlLm5hbWUgPT09IFwiXFxcXG9paWludFwiKTtcblxuICAgICAgaWYgKGJhc2UgaW5zdGFuY2VvZiBTeW1ib2xOb2RlIHx8IGlzT2lpbnQpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBtYXJnaW5MZWZ0ID0gbWFrZUVtKC1iYXNlLml0YWxpYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN1cHN1YjtcblxuICAgIGlmIChzdXBtICYmIHN1Ym0pIHtcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdWJTaGlmdCA9IE1hdGgubWF4KHN1YlNoaWZ0LCBtZXRyaWNzLnN1YjIpO1xuICAgICAgdmFyIHJ1bGVXaWR0aCA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7IC8vIFJ1bGUgMThlXG5cbiAgICAgIHZhciBtYXhXaWR0aCA9IDQgKiBydWxlV2lkdGg7XG5cbiAgICAgIGlmIChzdXBTaGlmdCAtIHN1cG0uZGVwdGggLSAoc3VibS5oZWlnaHQgLSBzdWJTaGlmdCkgPCBtYXhXaWR0aCkge1xuICAgICAgICBzdWJTaGlmdCA9IG1heFdpZHRoIC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCkgKyBzdWJtLmhlaWdodDtcbiAgICAgICAgdmFyIHBzaSA9IDAuOCAqIG1ldHJpY3MueEhlaWdodCAtIChzdXBTaGlmdCAtIHN1cG0uZGVwdGgpO1xuXG4gICAgICAgIGlmIChwc2kgPiAwKSB7XG4gICAgICAgICAgc3VwU2hpZnQgKz0gcHNpO1xuICAgICAgICAgIHN1YlNoaWZ0IC09IHBzaTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmxpc3RFbGVtID0gW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Ym0sXG4gICAgICAgIHNoaWZ0OiBzdWJTaGlmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IHZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdWJtKSB7XG4gICAgICAvLyBSdWxlIDE4YlxuICAgICAgc3ViU2hpZnQgPSBNYXRoLm1heChzdWJTaGlmdCwgbWV0cmljcy5zdWIxLCBzdWJtLmhlaWdodCAtIDAuOCAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICB2YXIgX3ZsaXN0RWxlbSA9IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdWJtLFxuICAgICAgICBtYXJnaW5MZWZ0LFxuICAgICAgICBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiBzdWJTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IF92bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VwbSkge1xuICAgICAgLy8gUnVsZSAxOGMsIGRcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiAtc3VwU2hpZnQsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgICAgbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBJcyB0aGUgaW5uZXIgZ3JvdXAgYSByZWxldmFudCBob3Jpem9uYWwgYnJhY2U/XG4gICAgdmFyIGlzQnJhY2UgPSBmYWxzZTtcbiAgICB2YXIgaXNPdmVyO1xuICAgIHZhciBpc1N1cDtcblxuICAgIGlmIChncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICAgIGlzU3VwID0gISFncm91cC5zdXA7XG5cbiAgICAgIGlmIChpc1N1cCA9PT0gZ3JvdXAuYmFzZS5pc092ZXIpIHtcbiAgICAgICAgaXNCcmFjZSA9IHRydWU7XG4gICAgICAgIGlzT3ZlciA9IGdyb3VwLmJhc2UuaXNPdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncm91cC5iYXNlICYmIChncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiB8fCBncm91cC5iYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpKSB7XG4gICAgICBncm91cC5iYXNlLnBhcmVudElzU3VwU3ViID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKV07XG5cbiAgICBpZiAoZ3JvdXAuc3ViKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkR3JvdXAoZ3JvdXAuc3ViLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnN1cCkge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEdyb3VwKGdyb3VwLnN1cCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhciBub2RlVHlwZTtcblxuICAgIGlmIChpc0JyYWNlKSB7XG4gICAgICBub2RlVHlwZSA9IGlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCI7XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3ViKSB7XG4gICAgICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGJhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibW92ZXJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtc3VwXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3VwKSB7XG4gICAgICB2YXIgX2Jhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcFwiICYmIF9iYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YikpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiICYmIF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoX2Jhc2UubGltaXRzIHx8IG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIgJiYgX2Jhc2UyLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlMi5saW1pdHMpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlVHlwZSA9IFwibXN1YnN1cFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShub2RlVHlwZSwgY2hpbGRyZW4pO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWF0aHN5bShncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zLCBbXCJtXCIgKyBncm91cC5mYW1pbHldKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbi8vIFwibWF0aG9yZFwiIGFuZCBcInRleHRvcmRcIiBQYXJzZU5vZGVzIGNyZWF0ZWQgaW4gUGFyc2VyLmpzIGZyb20gc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJtYXRob3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG1ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpO1xuICAgIHZhciB2YXJpYW50ID0gZ2V0VmFyaWFudChncm91cCwgb3B0aW9ucykgfHwgXCJub3JtYWxcIjtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5tb2RlID09PSAndGV4dCcpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmICgvWzAtOV0vLnRlc3QoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1uXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmIChncm91cC50ZXh0ID09PSBcIlxcXFxwcmltZVwiKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBbdGV4dF0pO1xuICAgIH1cblxuICAgIGlmICh2YXJpYW50ICE9PSBkZWZhdWx0VmFyaWFudFtub2RlLnR5cGVdKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY3NzU3BhY2UgPSB7XG4gIFwiXFxcXG5vYnJlYWtcIjogXCJub2JyZWFrXCIsXG4gIFwiXFxcXGFsbG93YnJlYWtcIjogXCJhbGxvd2JyZWFrXCJcbn07IC8vIEEgbG9va3VwIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3BhY2luZyBmdW5jdGlvbi9zeW1ib2wgc2hvdWxkIGJlXG4vLyB0cmVhdGVkIGxpa2UgYSByZWd1bGFyIHNwYWNlIGNoYXJhY3Rlci4gIElmIGEgc3ltYm9sIG9yIGNvbW1hbmQgaXMgYSBrZXlcbi8vIGluIHRoaXMgdGFibGUsIHRoZW4gaXQgc2hvdWxkIGJlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBGdXJ0aGVybW9yZSxcbi8vIHRoZSBhc3NvY2lhdGVkIHZhbHVlIG1heSBoYXZlIGEgYGNsYXNzTmFtZWAgc3BlY2lmeWluZyBhbiBleHRyYSBDU1MgY2xhc3Ncbi8vIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBgc3BhbmAuXG5cbnZhciByZWd1bGFyU3BhY2UgPSB7XG4gIFwiIFwiOiB7fSxcbiAgXCJcXFxcIFwiOiB7fSxcbiAgXCJ+XCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH0sXG4gIFwiXFxcXHNwYWNlXCI6IHt9LFxuICBcIlxcXFxub2JyZWFrc3BhY2VcIjoge1xuICAgIGNsYXNzTmFtZTogXCJub2JyZWFrXCJcbiAgfVxufTsgLy8gUGFyc2VOb2RlPFwic3BhY2luZ1wiPiBjcmVhdGVkIGluIFBhcnNlci5qcyBmcm9tIHRoZSBcInNwYWNpbmdcIiBzeW1ib2wgR3JvdXBzIGluXG4vLyBzcmMvc3ltYm9scy5qcy5cblxuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwic3BhY2luZ1wiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChyZWd1bGFyU3BhY2UuaGFzT3duUHJvcGVydHkoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTAwYTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBwYWQgPSAoKSA9PiB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBbbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdHJcIiwgW3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMpXSksIHBhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cblxufSk7XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJcXFxcZW1waFwiKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiID8gb3B0aW9ucy53aXRoVGV4dEZvbnRTaGFwZShcInRleHR1cFwiKSA6IG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUoXCJ0ZXh0aXRcIik7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRTaGFwZSh0ZXh0Rm9udFNoYXBlc1tmb250XSk7XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIiwgXCJcXFxcZW1waFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ0ZXh0XCJdLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KSxcbiAgICAgIGZvbnQ6IGZ1bmNOYW1lXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9uc1dpdGhGb250KGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGlubmVyLCBuZXdPcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInVuZGVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFVuZGVybGluZXMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcgNDQzLCBSdWxlIDEwLlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cC5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKTsgLy8gQ3JlYXRlIHRoZSBsaW5lIHRvIGdvIGJlbG93IHRoZSBib2R5XG5cbiAgICB2YXIgbGluZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcInVuZGVybGluZS1saW5lXCIsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zXG5cbiAgICB2YXIgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBsaW5lXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAzICogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ1bmRlcmxpbmVcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM2VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInZjZW50ZXJcIixcbiAgbmFtZXM6IFtcIlxcXFx2Y2VudGVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcIm9yaWdpbmFsXCJdLFxuICAgIC8vIEluIExhVGVYLCBcXHZjZW50ZXIgY2FuIGFjdCBvbmx5IG9uIGEgYm94LlxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZjZW50ZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYm9keSA9IGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICAgIHZhciBkeSA9IDAuNSAqIChib2R5LmhlaWdodCAtIGF4aXNIZWlnaHQgLSAoYm9keS5kZXB0aCArIGF4aXNIZWlnaHQpKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBkeSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gd2F5IHRvIGRvIHRoaXMgaW4gTWF0aE1MLlxuICAgIC8vIFdyaXRlIGEgY2xhc3MgYXMgYSBicmVhZGNydW1iIGluIGNhc2Ugc29tZSBwb3N0LXByb2Nlc3NvciB3YW50c1xuICAgIC8vIHRvIHBlcmZvcm0gYSB2Y2VudGVyIGFkanVzdG1lbnQuXG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0sIFtcInZjZW50ZXJcIl0pO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidmVyYlwiLFxuICBuYW1lczogW1wiXFxcXHZlcmJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgLy8gXFx2ZXJiIGFuZCBcXHZlcmIqIGFyZSBkZWFsdCB3aXRoIGRpcmVjdGx5IGluIFBhcnNlci5qcy5cbiAgICAvLyBJZiB3ZSBlbmQgdXAgaGVyZSwgaXQncyBiZWNhdXNlIG9mIGEgZmFpbHVyZSB0byBtYXRjaCB0aGUgdHdvIGRlbGltaXRlcnNcbiAgICAvLyBpbiB0aGUgcmVnZXggaW4gTGV4ZXIuanMuICBMYVRlWCByYWlzZXMgdGhlIGZvbGxvd2luZyBlcnJvciB3aGVuIFxcdmVyYiBpc1xuICAgIC8vIHRlcm1pbmF0ZWQgYnkgZW5kIG9mIGxpbmUgKG9yIGZpbGUpLlxuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHZlcmIgZW5kZWQgYnkgZW5kIG9mIGxpbmUgaW5zdGVhZCBvZiBtYXRjaGluZyBkZWxpbWl0ZXJcIik7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG1ha2VWZXJiKGdyb3VwKTtcbiAgICB2YXIgYm9keSA9IFtdOyAvLyBcXHZlcmIgZW50ZXJzIHRleHQgbW9kZSBhbmQgdGhlcmVmb3JlIGlzIHNpemVkIGxpa2UgXFx0ZXh0c3R5bGVcblxuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnRleHQoKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gdGV4dFtpXTtcblxuICAgICAgaWYgKGMgPT09ICd+Jykge1xuICAgICAgICBjID0gJ1xcXFx0ZXh0YXNjaWl0aWxkZSc7XG4gICAgICB9XG5cbiAgICAgIGJvZHkucHVzaChidWlsZENvbW1vbi5tYWtlU3ltYm9sKGMsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCIsIGdyb3VwLm1vZGUsIG5ld09wdGlvbnMsIFtcIm1vcmRcIiwgXCJ0ZXh0dHRcIl0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0uY29uY2F0KG5ld09wdGlvbnMuc2l6aW5nQ2xhc3NlcyhvcHRpb25zKSksIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhib2R5KSwgbmV3T3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciB0ZXh0ID0gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUobWFrZVZlcmIoZ3JvdXApKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW3RleHRdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibW9ub3NwYWNlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxudmFyIG1ha2VWZXJiID0gZ3JvdXAgPT4gZ3JvdXAuYm9keS5yZXBsYWNlKC8gL2csIGdyb3VwLnN0YXIgPyAnXFx1MjQyMycgOiAnXFx4QTAnKTtcblxuLyoqIEluY2x1ZGUgdGhpcyB0byBlbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiAqL1xudmFyIGZ1bmN0aW9ucyA9IF9mdW5jdGlvbnM7XG5cbi8qKlxuICogVGhlIExleGVyIGNsYXNzIGhhbmRsZXMgdG9rZW5pemluZyB0aGUgaW5wdXQgaW4gdmFyaW91cyB3YXlzLiBTaW5jZSBvdXJcbiAqIHBhcnNlciBleHBlY3RzIHVzIHRvIGJlIGFibGUgdG8gYmFja3RyYWNrLCB0aGUgbGV4ZXIgYWxsb3dzIGxleGluZyBmcm9tIGFueVxuICogZ2l2ZW4gc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogSXRzIG1haW4gZXhwb3NlZCBmdW5jdGlvbiBpcyB0aGUgYGxleGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcG9zaXRpb24gdG9cbiAqIGxleCBmcm9tIGFuZCBhIHR5cGUgb2YgdG9rZW4gdG8gbGV4LiBJdCBkZWZlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGBfaW5uZXJMZXhgXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgdmFyaW91cyBgX2lubmVyTGV4YCBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgYWN0dWFsIGxleGluZyBvZiBkaWZmZXJlbnRcbiAqIGtpbmRzLlxuICovXG5cbi8qIFRoZSBmb2xsb3dpbmcgdG9rZW5SZWdleFxuICogLSBtYXRjaGVzIHR5cGljYWwgd2hpdGVzcGFjZSAoYnV0IG5vdCBOQlNQIGV0Yy4pIHVzaW5nIGl0cyBmaXJzdCBncm91cFxuICogLSBkb2VzIG5vdCBtYXRjaCBhbnkgY29udHJvbCBjaGFyYWN0ZXIgXFx4MDAtXFx4MWYgZXhjZXB0IHdoaXRlc3BhY2VcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYSBiYXJlIGJhY2tzbGFzaFxuICogLSBtYXRjaGVzIGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGp1c3QgbWVudGlvbmVkXG4gKiAtIGRvZXMgbm90IG1hdGNoIHRoZSBCTVAgcHJpdmF0ZSB1c2UgYXJlYSBcXHVFMDAwLVxcdUY4RkZcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYmFyZSBzdXJyb2dhdGUgY29kZSB1bml0c1xuICogLSBtYXRjaGVzIGFueSBCTVAgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgdGhvc2UganVzdCBkZXNjcmliZWRcbiAqIC0gbWF0Y2hlcyBhbnkgdmFsaWQgVW5pY29kZSBzdXJyb2dhdGUgcGFpclxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGxldHRlcnMgdGhlbiB3aGl0ZXNwYWNlXG4gKiAtIG1hdGNoZXMgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYW55IEJNUCBjaGFyYWN0ZXJcbiAqIENhcHR1cmluZyBncm91cHM6XG4gKiAgIFsxXSByZWd1bGFyIHdoaXRlc3BhY2VcbiAqICAgWzJdIGJhY2tzbGFzaCBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlXG4gKiAgIFszXSBhbnl0aGluZyBlbHNlLCB3aGljaCBtYXkgaW5jbHVkZTpcbiAqICAgICBbNF0gbGVmdCBjaGFyYWN0ZXIgb2YgXFx2ZXJiKlxuICogICAgIFs1XSBsZWZ0IGNoYXJhY3RlciBvZiBcXHZlcmJcbiAqICAgICBbNl0gYmFja3NsYXNoIGZvbGxvd2VkIGJ5IHdvcmQsIGV4Y2x1ZGluZyBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZVxuICogSnVzdCBiZWNhdXNlIHRoZSBMZXhlciBtYXRjaGVzIHNvbWV0aGluZyBkb2Vzbid0IG1lYW4gaXQncyB2YWxpZCBpbnB1dDpcbiAqIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGZ1bmN0aW9uIG9yIHN5bWJvbCBkZWZpbml0aW9uLCB0aGUgUGFyc2VyIHdpbGxcbiAqIHN0aWxsIHJlamVjdCB0aGUgaW5wdXQuXG4gKi9cbnZhciBzcGFjZVJlZ2V4U3RyaW5nID0gXCJbIFxcclxcblxcdF1cIjtcbnZhciBjb250cm9sV29yZFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFthLXpBLVpAXStcIjtcbnZhciBjb250cm9sU3ltYm9sUmVnZXhTdHJpbmcgPSBcIlxcXFxcXFxcW15cXHVEODAwLVxcdURGRkZdXCI7XG52YXIgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXhTdHJpbmcgPSBcIihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIipcIjtcbnZhciBjb250cm9sU3BhY2VSZWdleFN0cmluZyA9IFwiXFxcXFxcXFwoXFxufFsgXFxyXFx0XStcXG4/KVsgXFxyXFx0XSpcIjtcbnZhciBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgPSBcIltcXHUwMzAwLVxcdTAzNmZdXCI7XG52YXIgY29tYmluaW5nRGlhY3JpdGljYWxNYXJrc0VuZFJlZ2V4ID0gbmV3IFJlZ0V4cChjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIiskXCIpO1xudmFyIHRva2VuUmVnZXhTdHJpbmcgPSBcIihcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIispfFwiICsgKCAvLyB3aGl0ZXNwYWNlXG5jb250cm9sU3BhY2VSZWdleFN0cmluZyArIFwifFwiKSArIC8vIFxcd2hpdGVzcGFjZVxuXCIoWyEtXFxcXFtcXFxcXS1cXHUyMDI3XFx1MjAyQS1cXHVEN0ZGXFx1RjkwMC1cXHVGRkZGXVwiICsgKCAvLyBzaW5nbGUgY29kZXBvaW50XG5jb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIipcIikgKyAvLyAuLi5wbHVzIGFjY2VudHNcblwifFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl1cIiArICggLy8gc3Vycm9nYXRlIHBhaXJcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8XFxcXFxcXFx2ZXJiXFxcXCooW15dKS4qP1xcXFw0XCIgKyAvLyBcXHZlcmIqXG5cInxcXFxcXFxcXHZlcmIoW14qYS16QS1aXSkuKj9cXFxcNVwiICsgKCAvLyBcXHZlcmIgdW5zdGFycmVkXG5cInxcIiArIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nKSArICggLy8gXFxtYWNyb05hbWUgKyBzcGFjZXNcblwifFwiICsgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nICsgXCIpXCIpOyAvLyBcXFxcLCBcXCcsIGV0Yy5cblxuLyoqIE1haW4gTGV4ZXIgY2xhc3MgKi9cblxuY2xhc3MgTGV4ZXIge1xuICAvLyBDYXRlZ29yeSBjb2Rlcy4gVGhlIGxleGVyIG9ubHkgc3VwcG9ydHMgY29tbWVudCBjaGFyYWN0ZXJzICgxNCkgZm9yIG5vdy5cbiAgLy8gTWFjcm9FeHBhbmRlciBhZGRpdGlvbmFsbHkgZGlzdGluZ3Vpc2hlcyBhY3RpdmUgKDEzKS5cbiAgY29uc3RydWN0b3IoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5pbnB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IHZvaWQgMDtcbiAgICB0aGlzLmNhdGNvZGVzID0gdm9pZCAwO1xuICAgIC8vIFNlcGFyYXRlIGFjY2VudHMgZnJvbSBjaGFyYWN0ZXJzXG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRva2VuUmVnZXggPSBuZXcgUmVnRXhwKHRva2VuUmVnZXhTdHJpbmcsICdnJyk7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHtcbiAgICAgIFwiJVwiOiAxNCxcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICBcIn5cIjogMTMgLy8gYWN0aXZlIGNoYXJhY3RlclxuXG4gICAgfTtcbiAgfVxuXG4gIHNldENhdGNvZGUoY2hhciwgY29kZSkge1xuICAgIHRoaXMuY2F0Y29kZXNbY2hhcl0gPSBjb2RlO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGxleGVzIGEgc2luZ2xlIHRva2VuLlxuICAgKi9cblxuXG4gIGxleCgpIHtcbiAgICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuICAgIHZhciBwb3MgPSB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4O1xuXG4gICAgaWYgKHBvcyA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFRva2VuKFwiRU9GXCIsIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBwb3MsIHBvcykpO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IHRoaXMudG9rZW5SZWdleC5leGVjKGlucHV0KTtcblxuICAgIGlmIChtYXRjaCA9PT0gbnVsbCB8fCBtYXRjaC5pbmRleCAhPT0gcG9zKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbNl0gfHwgbWF0Y2hbM10gfHwgKG1hdGNoWzJdID8gXCJcXFxcIFwiIDogXCIgXCIpO1xuXG4gICAgaWYgKHRoaXMuY2F0Y29kZXNbdGV4dF0gPT09IDE0KSB7XG4gICAgICAvLyBjb21tZW50IGNoYXJhY3RlclxuICAgICAgdmFyIG5sSW5kZXggPSBpbnB1dC5pbmRleE9mKCdcXG4nLCB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KTtcblxuICAgICAgaWYgKG5sSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXggPSBpbnB1dC5sZW5ndGg7IC8vIEVPRlxuXG4gICAgICAgIHRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwiY29tbWVudEF0RW5kXCIsIFwiJSBjb21tZW50IGhhcyBubyB0ZXJtaW5hdGluZyBuZXdsaW5lOyBMYVRlWCB3b3VsZCBcIiArIFwiZmFpbCBiZWNhdXNlIG9mIGNvbW1lbnRpbmcgdGhlIGVuZCBvZiBtYXRoIG1vZGUgKGUuZy4gJClcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4ID0gbmxJbmRleCArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVG9rZW4odGV4dCwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCkpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBBIGBOYW1lc3BhY2VgIHJlZmVycyB0byBhIHNwYWNlIG9mIG5hbWVhYmxlIHRoaW5ncyBsaWtlIG1hY3JvcyBvciBsZW5ndGhzLFxuICogd2hpY2ggY2FuIGJlIGBzZXRgIGVpdGhlciBnbG9iYWxseSBvciBsb2NhbCB0byBhIG5lc3RlZCBncm91cCwgdXNpbmcgYW5cbiAqIHVuZG8gc3RhY2sgc2ltaWxhciB0byBob3cgVGVYIGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuICogUGVyZm9ybWFuY2Utd2lzZSwgYGdldGAgYW5kIGxvY2FsIGBzZXRgIHRha2UgY29uc3RhbnQgdGltZSwgd2hpbGUgZ2xvYmFsXG4gKiBgc2V0YCB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGVwdGggb2YgZ3JvdXAgbmVzdGluZy5cbiAqL1xuY2xhc3MgTmFtZXNwYWNlIHtcbiAgLyoqXG4gICAqIEJvdGggYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3Qgb2ZcbiAgICogYnVpbHQtaW4gbWFwcGluZ3Mgd2hpY2ggbmV2ZXIgY2hhbmdlLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogb2YgaW5pdGlhbCAoZ2xvYmFsLWxldmVsKSBtYXBwaW5ncywgd2hpY2ggd2lsbCBjb25zdGFudGx5IGNoYW5nZVxuICAgKiBhY2NvcmRpbmcgdG8gYW55IGdsb2JhbC90b3AtbGV2ZWwgYHNldGBzIGRvbmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihidWlsdGlucywgZ2xvYmFsTWFjcm9zKSB7XG4gICAgaWYgKGJ1aWx0aW5zID09PSB2b2lkIDApIHtcbiAgICAgIGJ1aWx0aW5zID0ge307XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbE1hY3JvcyA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWxNYWNyb3MgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5idWlsdGlucyA9IHZvaWQgMDtcbiAgICB0aGlzLnVuZGVmU3RhY2sgPSB2b2lkIDA7XG4gICAgdGhpcy5jdXJyZW50ID0gZ2xvYmFsTWFjcm9zO1xuICAgIHRoaXMuYnVpbHRpbnMgPSBidWlsdGlucztcbiAgICB0aGlzLnVuZGVmU3RhY2sgPSBbXTtcbiAgfVxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgbmVzdGVkIGdyb3VwLCBhZmZlY3RpbmcgZnV0dXJlIGxvY2FsIGBzZXRgcy5cbiAgICovXG5cblxuICBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMudW5kZWZTdGFjay5wdXNoKHt9KTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgbmVzdGVkIGdyb3VwLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGUgZ3JvdXAgYmVnYW4uXG4gICAqL1xuXG5cbiAgZW5kR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5iYWxhbmNlZCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb246IGF0dGVtcHQgXCIgKyBcInRvIHBvcCBnbG9iYWwgbmFtZXNwYWNlOyBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWdcIik7XG4gICAgfVxuXG4gICAgdmFyIHVuZGVmcyA9IHRoaXMudW5kZWZTdGFjay5wb3AoKTtcblxuICAgIGZvciAodmFyIHVuZGVmIGluIHVuZGVmcykge1xuICAgICAgaWYgKHVuZGVmcy5oYXNPd25Qcm9wZXJ0eSh1bmRlZikpIHtcbiAgICAgICAgaWYgKHVuZGVmc1t1bmRlZl0gPT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRbdW5kZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFt1bmRlZl0gPSB1bmRlZnNbdW5kZWZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFbmRzIGFsbCBjdXJyZW50bHkgbmVzdGVkIGdyb3VwcyAoaWYgYW55KSwgcmVzdG9yaW5nIHZhbHVlcyBiZWZvcmUgdGhlXG4gICAqIGdyb3VwcyBiZWdhbi4gIFVzZWZ1bCBpbiBjYXNlIG9mIGFuIGVycm9yIGluIHRoZSBtaWRkbGUgb2YgcGFyc2luZy5cbiAgICovXG5cblxuICBlbmRHcm91cHMoKSB7XG4gICAgd2hpbGUgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmVuZEdyb3VwKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEZXRlY3Qgd2hldGhlciBgbmFtZWAgaGFzIGEgZGVmaW5pdGlvbi4gIEVxdWl2YWxlbnQgdG9cbiAgICogYGdldChuYW1lKSAhPSBudWxsYC5cbiAgICovXG5cblxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgdGhpcy5idWlsdGlucy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlcmUgaXMgbm8gdmFsdWUuXG4gICAqXG4gICAqIE5vdGU6IERvIG5vdCB1c2UgYGlmIChuYW1lc3BhY2UuZ2V0KC4uLikpYCB0byBkZXRlY3Qgd2hldGhlciBhIG1hY3JvXG4gICAqIGlzIGRlZmluZWQsIGFzIHRoZSBkZWZpbml0aW9uIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nIHdoaWNoIGV2YWx1YXRlc1xuICAgKiB0byBgZmFsc2VgIGluIEphdmFTY3JpcHQuICBVc2UgYGlmIChuYW1lc3BhY2UuZ2V0KC4uLikgIT0gbnVsbClgIG9yXG4gICAqIGBpZiAobmFtZXNwYWNlLmhhcyguLi4pKWAuXG4gICAqL1xuXG5cbiAgZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqIEEgdmFsdWUgb2YgdW5kZWZpbmVkIG1lYW5zIHRvIGRlbGV0ZSBleGlzdGluZyBkZWZpbml0aW9ucy5cbiAgICovXG5cblxuICBzZXQobmFtZSwgdmFsdWUsIGdsb2JhbCkge1xuICAgIGlmIChnbG9iYWwgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbCkge1xuICAgICAgLy8gR2xvYmFsIHNldCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaW4gYWxsIGdyb3Vwcy4gIFNpbXVsYXRlIHRoaXNcbiAgICAgIC8vIGJ5IGRlc3Ryb3lpbmcgYW55IHVuZG9zIGN1cnJlbnRseSBzY2hlZHVsZWQgZm9yIHRoaXMgbmFtZSxcbiAgICAgIC8vIGFuZCBhZGRpbmcgYW4gdW5kbyB3aXRoIHRoZSAqbmV3KiB2YWx1ZSAoaW4gY2FzZSBpdCBsYXRlciBnZXRzXG4gICAgICAvLyBsb2NhbGx5IHJlc2V0IHdpdGhpbiB0aGlzIGVudmlyb25tZW50KS5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bmRlZlN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnVuZGVmU3RhY2tbaV1bbmFtZV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aCAtIDFdW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVuZG8gdGhpcyBzZXQgYXQgZW5kIG9mIHRoaXMgZ3JvdXAgKHBvc3NpYmx5IHRvIGB1bmRlZmluZWRgKSxcbiAgICAgIC8vIHVubGVzcyBhbiB1bmRvIGlzIGFscmVhZHkgaW4gcGxhY2UsIGluIHdoaWNoIGNhc2UgdGhhdCBvbGRlclxuICAgICAgLy8gdmFsdWUgaXMgdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgdmFyIHRvcCA9IHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0b3AgJiYgIXRvcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB0b3BbbmFtZV0gPSB0aGlzLmN1cnJlbnRbbmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKlxuICogUHJlZGVmaW5lZCBtYWNyb3MgZm9yIEthVGVYLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgc29tZSBjb21tYW5kcyBpbiB0ZXJtcyBvZiBvdGhlcnMuXG4gKi9cbnZhciBtYWNyb3MgPSBfbWFjcm9zO1xuLy8gbWFjcm8gdG9vbHNcblxuZGVmaW5lTWFjcm8oXCJcXFxcbm9leHBhbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVGhlIGV4cGFuc2lvbiBpcyB0aGUgdG9rZW4gaXRzZWxmOyBidXQgdGhhdCB0b2tlbiBpcyBpbnRlcnByZXRlZFxuICAvLyBhcyBpZiBpdHMgbWVhbmluZyB3ZXJlIOKAmFxccmVsYXjigJkgaWYgaXQgaXMgYSBjb250cm9sIHNlcXVlbmNlIHRoYXRcbiAgLy8gd291bGQgb3JkaW5hcmlseSBiZSBleHBhbmRlZCBieSBUZVjigJlzIGV4cGFuc2lvbiBydWxlcy5cbiAgdmFyIHQgPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgaWYgKGNvbnRleHQuaXNFeHBhbmRhYmxlKHQudGV4dCkpIHtcbiAgICB0Lm5vZXhwYW5kID0gdHJ1ZTtcbiAgICB0LnRyZWF0QXNSZWxheCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRva2VuczogW3RdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXhwYW5kYWZ0ZXJcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVGVYIGZpcnN0IHJlYWRzIHRoZSB0b2tlbiB0aGF0IGNvbWVzIGltbWVkaWF0ZWx5IGFmdGVyIFxcZXhwYW5kYWZ0ZXIsXG4gIC8vIHdpdGhvdXQgZXhwYW5kaW5nIGl0OyBsZXTigJlzIGNhbGwgdGhpcyB0b2tlbiB0LiBUaGVuIFRlWCByZWFkcyB0aGVcbiAgLy8gdG9rZW4gdGhhdCBjb21lcyBhZnRlciB0IChhbmQgcG9zc2libHkgbW9yZSB0b2tlbnMsIGlmIHRoYXQgdG9rZW5cbiAgLy8gaGFzIGFuIGFyZ3VtZW50KSwgcmVwbGFjaW5nIGl0IGJ5IGl0cyBleHBhbnNpb24uIEZpbmFsbHkgVGVYIHB1dHNcbiAgLy8gdCBiYWNrIGluIGZyb250IG9mIHRoYXQgZXhwYW5zaW9uLlxuICB2YXIgdCA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgY29udGV4dC5leHBhbmRPbmNlKHRydWUpOyAvLyBleHBhbmQgb25seSBhbiBleHBhbmRhYmxlIHRva2VuXG5cbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IFt0XSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBmaXJzdG9mdHdveyMxfXsjMn0gZXhwYW5kcyB0byAjMSwgc2tpcHBpbmcgIzJcbi8vIFRlWCBzb3VyY2U6IFxcbG9uZ1xcZGVmXFxAZmlyc3RvZnR3byMxIzJ7IzF9XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBmaXJzdG9mdHdvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAc2Vjb25kb2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMyLCBza2lwcGluZyAjMVxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBzZWNvbmRvZnR3byMxIzJ7IzJ9XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBzZWNvbmRvZnR3b1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMik7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQGlmbmV4dGNoYXJ7IzF9eyMyfXsjM30gbG9va3MgYWhlYWQgdG8gdGhlIG5leHQgKHVuZXhwYW5kZWQpXG4vLyBzeW1ib2wgdGhhdCBpc24ndCBhIHNwYWNlLCBjb25zdW1pbmcgYW55IHNwYWNlcyBidXQgbm90IGNvbnN1bWluZyB0aGVcbi8vIGZpcnN0IG5vbnNwYWNlIGNoYXJhY3Rlci4gIElmIHRoYXQgbm9uc3BhY2UgY2hhcmFjdGVyIG1hdGNoZXMgIzEsIHRoZW5cbi8vIHRoZSBtYWNybyBleHBhbmRzIHRvICMyOyBvdGhlcndpc2UsIGl0IGV4cGFuZHMgdG8gIzMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZm5leHRjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygzKTsgLy8gc3ltYm9sLCBpZiwgZWxzZVxuXG4gIGNvbnRleHQuY29uc3VtZVNwYWNlcygpO1xuICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICBpZiAoYXJnc1swXS5sZW5ndGggPT09IDEgJiYgYXJnc1swXVswXS50ZXh0ID09PSBuZXh0VG9rZW4udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzJdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMYVRlWCdzIFxcQGlmc3RhcnsjMX17IzJ9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKSBzeW1ib2wuXG4vLyBJZiBpdCBpcyBgKmAsIHRoZW4gaXQgY29uc3VtZXMgdGhlIHN5bWJvbCwgYW5kIHRoZSBtYWNybyBleHBhbmRzIHRvICMxO1xuLy8gb3RoZXJ3aXNlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMiAod2l0aG91dCBjb25zdW1pbmcgdGhlIHN5bWJvbCkuXG4vLyBUZVggc291cmNlOiBcXGRlZlxcQGlmc3RhciMxe1xcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZnN0YXJcIiwgXCJcXFxcQGlmbmV4dGNoYXIgKntcXFxcQGZpcnN0b2Z0d297IzF9fVwiKTsgLy8gTGFUZVgncyBcXFRleHRPck1hdGh7IzF9eyMyfSBleHBhbmRzIHRvICMxIGluIHRleHQgbW9kZSwgIzIgaW4gbWF0aCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXFRleHRPck1hdGhcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG52YXIgZGlnaXRUb051bWJlciA9IHtcbiAgXCIwXCI6IDAsXG4gIFwiMVwiOiAxLFxuICBcIjJcIjogMixcbiAgXCIzXCI6IDMsXG4gIFwiNFwiOiA0LFxuICBcIjVcIjogNSxcbiAgXCI2XCI6IDYsXG4gIFwiN1wiOiA3LFxuICBcIjhcIjogOCxcbiAgXCI5XCI6IDksXG4gIFwiYVwiOiAxMCxcbiAgXCJBXCI6IDEwLFxuICBcImJcIjogMTEsXG4gIFwiQlwiOiAxMSxcbiAgXCJjXCI6IDEyLFxuICBcIkNcIjogMTIsXG4gIFwiZFwiOiAxMyxcbiAgXCJEXCI6IDEzLFxuICBcImVcIjogMTQsXG4gIFwiRVwiOiAxNCxcbiAgXCJmXCI6IDE1LFxuICBcIkZcIjogMTVcbn07IC8vIFRlWCBcXGNoYXIgbWFrZXMgYSBsaXRlcmFsIGNoYXJhY3RlciAoY2F0Y29kZSAxMikgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3Jtczpcbi8vIChzZWUgVGhlIFRlWEJvb2ssIHAuIDQzKVxuLy8gICBcXGNoYXIxMjMgIC0tIGRlY2ltYWxcbi8vICAgXFxjaGFyJzEyMyAtLSBvY3RhbFxuLy8gICBcXGNoYXJcIjEyMyAtLSBoZXhcbi8vICAgXFxjaGFyYHggICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiAoaS5lLiBpc24ndCBhY3RpdmUpXG4vLyAgIFxcY2hhcmBcXHggIC0tIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIChlLmcuICUpXG4vLyBUaGVzZSBhbGwgcmVmZXIgdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBmb250LCBzbyB3ZSB0dXJuIHRoZW0gaW50byBzcGVjaWFsXG4vLyBjYWxscyB0byBhIGZ1bmN0aW9uIFxcQGNoYXIgZGVhbHQgd2l0aCBpbiB0aGUgUGFyc2VyLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIGJhc2U7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICBpZiAodG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICBiYXNlID0gODtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSAnXCInKSB7XG4gICAgYmFzZSA9IDE2O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiYFwiKSB7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udGV4dFswXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgxKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiRU9GXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgwKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZSA9IDEwO1xuICB9XG5cbiAgaWYgKGJhc2UpIHtcbiAgICAvLyBQYXJzZSBhIG51bWJlciBpbiB0aGUgZ2l2ZW4gYmFzZSwgc3RhcnRpbmcgd2l0aCBmaXJzdCBgdG9rZW5gLlxuICAgIG51bWJlciA9IGRpZ2l0VG9OdW1iZXJbdG9rZW4udGV4dF07XG5cbiAgICBpZiAobnVtYmVyID09IG51bGwgfHwgbnVtYmVyID49IGJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBiYXNlLVwiICsgYmFzZSArIFwiIGRpZ2l0IFwiICsgdG9rZW4udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIGRpZ2l0O1xuXG4gICAgd2hpbGUgKChkaWdpdCA9IGRpZ2l0VG9OdW1iZXJbY29udGV4dC5mdXR1cmUoKS50ZXh0XSkgIT0gbnVsbCAmJiBkaWdpdCA8IGJhc2UpIHtcbiAgICAgIG51bWJlciAqPSBiYXNlO1xuICAgICAgbnVtYmVyICs9IGRpZ2l0O1xuICAgICAgY29udGV4dC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBcIlxcXFxAY2hhcntcIiArIG51bWJlciArIFwifVwiO1xufSk7IC8vIFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXXtkZWZpbml0aW9ufVxuLy8gXFxyZW5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFRPRE86IE9wdGlvbmFsIGFyZ3VtZW50czogXFxuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3NdW2RlZmF1bHRde2RlZmluaXRpb259XG5cbnZhciBuZXdjb21tYW5kID0gKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSykgPT4ge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuXG4gIGlmIChhcmcubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZCdzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBhcmdbMF0udGV4dDtcbiAgdmFyIGV4aXN0cyA9IGNvbnRleHQuaXNEZWZpbmVkKG5hbWUpO1xuXG4gIGlmIChleGlzdHMgJiYgIWV4aXN0c09LKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSBcIiArIChuYW1lICsgXCI7IHVzZSBcXFxccmVuZXdjb21tYW5kXCIpKTtcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFub25leGlzdHNPSykge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHJlbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gd2hlbiBjb21tYW5kIFwiICsgbmFtZSArIFwiIFwiICsgXCJkb2VzIG5vdCB5ZXQgZXhpc3Q7IHVzZSBcXFxcbmV3Y29tbWFuZFwiKTtcbiAgfVxuXG4gIHZhciBudW1BcmdzID0gMDtcbiAgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuXG4gIGlmIChhcmcubGVuZ3RoID09PSAxICYmIGFyZ1swXS50ZXh0ID09PSBcIltcIikge1xuICAgIHZhciBhcmdUZXh0ID0gJyc7XG4gICAgdmFyIHRva2VuID0gY29udGV4dC5leHBhbmROZXh0VG9rZW4oKTtcblxuICAgIHdoaWxlICh0b2tlbi50ZXh0ICE9PSBcIl1cIiAmJiB0b2tlbi50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgcHJvcGVybHkgZXhwYW5kIGFyZywgZS5nLiwgaWdub3JlIHt9c1xuICAgICAgYXJnVGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuICAgIH1cblxuICAgIGlmICghYXJnVGV4dC5tYXRjaCgvXlxccypbMC05XStcXHMqJC8pKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogXCIgKyBhcmdUZXh0KTtcbiAgICB9XG5cbiAgICBudW1BcmdzID0gcGFyc2VJbnQoYXJnVGV4dCk7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICB0b2tlbnM6IGFyZyxcbiAgICBudW1BcmdzXG4gIH0pO1xuICByZXR1cm4gJyc7XG59O1xuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXdjb21tYW5kXCIsIGNvbnRleHQgPT4gbmV3Y29tbWFuZChjb250ZXh0LCBmYWxzZSwgdHJ1ZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVuZXdjb21tYW5kXCIsIGNvbnRleHQgPT4gbmV3Y29tbWFuZChjb250ZXh0LCB0cnVlLCBmYWxzZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgY29udGV4dCA9PiBuZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUpKTsgLy8gdGVybWluYWwgKGNvbnNvbGUpIHRvb2xzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG1lc3NhZ2VcIiwgY29udGV4dCA9PiB7XG4gIHZhciBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gIGNvbnNvbGUubG9nKGFyZy5yZXZlcnNlKCkubWFwKHRva2VuID0+IHRva2VuLnRleHQpLmpvaW4oXCJcIikpO1xuICByZXR1cm4gJyc7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGVycm1lc3NhZ2VcIiwgY29udGV4dCA9PiB7XG4gIHZhciBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gIGNvbnNvbGUuZXJyb3IoYXJnLnJldmVyc2UoKS5tYXAodG9rZW4gPT4gdG9rZW4udGV4dCkuam9pbihcIlwiKSk7XG4gIHJldHVybiAnJztcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2hvd1wiLCBjb250ZXh0ID0+IHtcbiAgdmFyIHRvayA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIG5hbWUgPSB0b2sudGV4dDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmxvZyh0b2ssIGNvbnRleHQubWFjcm9zLmdldChuYW1lKSwgZnVuY3Rpb25zW25hbWVdLCBzeW1ib2xzLm1hdGhbbmFtZV0sIHN5bWJvbHMudGV4dFtuYW1lXSk7XG4gIHJldHVybiAnJztcbn0pOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBHcm91cGluZ1xuLy8gXFxsZXRcXGJncm91cD17IFxcbGV0XFxlZ3JvdXA9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxiZ3JvdXBcIiwgXCJ7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZWdyb3VwXCIsIFwifVwiKTsgLy8gU3ltYm9scyBmcm9tIGxhdGV4Lmx0eDpcbi8vIFxcZGVmfntcXG5vYnJlYWtzcGFjZXt9fVxuLy8gXFxkZWZcXGxxe2B9XG4vLyBcXGRlZlxccnF7J31cbi8vIFxcZGVmIFxcYWEge1xcciBhfVxuLy8gXFxkZWYgXFxBQSB7XFxyIEF9XG5cbmRlZmluZU1hY3JvKFwiflwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxscVwiLCBcImBcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxycVwiLCBcIidcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhYVwiLCBcIlxcXFxyIGFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBQVwiLCBcIlxcXFxyIEFcIik7IC8vIENvcHlyaWdodCAoQykgYW5kIHJlZ2lzdGVyZWQgKFIpIHN5bWJvbHMuIFVzZSByYXcgc3ltYm9sIGluIE1hdGhNTC5cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRjb3B5cmlnaHR9e1xcdGV4dGNpcmNsZWR7Y319XG4vLyBcXERlY2xhcmVUZXh0Q29tbWFuZERlZmF1bHR7XFx0ZXh0cmVnaXN0ZXJlZH17XFx0ZXh0Y2lyY2xlZHslXG4vLyAgICAgIFxcY2hlY2tAbWF0aGZvbnRzXFxmb250c2l6ZVxcc2ZAc2l6ZVxcekBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udCBSfX1cbi8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFxjb3B5cmlnaHR9eyVcbi8vICAgIFxcaWZtbW9kZXtcXG5mc3NAdGV4dHtcXHRleHRjb3B5cmlnaHR9fVxcZWxzZVxcdGV4dGNvcHlyaWdodFxcZml9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRleHRjb3B5cmlnaHRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke2N9fXtcXFxcY2hhcmDCqX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb3B5cmlnaHRcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxcdGV4dGNvcHlyaWdodH17XFxcXHRleHR7XFxcXHRleHRjb3B5cmlnaHR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRleHRyZWdpc3RlcmVkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFx0ZXh0Y2lyY2xlZHtcXFxcc2NyaXB0c2l6ZSBSfX17XFxcXGNoYXJgwq59XCIpOyAvLyBDaGFyYWN0ZXJzIG9taXR0ZWQgZnJvbSBVbmljb2RlIHJhbmdlIDFENDAw4oCTMUQ3RkZcblxuZGVmaW5lTWFjcm8oXCJcXHUyMTJDXCIsIFwiXFxcXG1hdGhzY3J7Qn1cIik7IC8vIHNjcmlwdFxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMzBcIiwgXCJcXFxcbWF0aHNjcntFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEzMVwiLCBcIlxcXFxtYXRoc2Nye0Z9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTBCXCIsIFwiXFxcXG1hdGhzY3J7SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMTBcIiwgXCJcXFxcbWF0aHNjcntJfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMlwiLCBcIlxcXFxtYXRoc2Nye0x9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMzXCIsIFwiXFxcXG1hdGhzY3J7TX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMUJcIiwgXCJcXFxcbWF0aHNjcntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyRFwiLCBcIlxcXFxtYXRoZnJha3tDfVwiKTsgLy8gRnJha3R1clxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMENcIiwgXCJcXFxcbWF0aGZyYWt7SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMjhcIiwgXCJcXFxcbWF0aGZyYWt7Wn1cIik7IC8vIERlZmluZSBcXEJiYmsgd2l0aCBhIG1hY3JvIHRoYXQgd29ya3MgaW4gYm90aCBIVE1MIGFuZCBNYXRoTUwuXG5cbmRlZmluZU1hY3JvKFwiXFxcXEJiYmtcIiwgXCJcXFxcQmJie2t9XCIpOyAvLyBVbmljb2RlIG1pZGRsZSBkb3Rcbi8vIFRoZSBLYVRlWCBmb250cyBkbyBub3QgY29udGFpbiBVKzAwQjcuIEluc3RlYWQsIFxcY2RvdHAgZGlzcGxheXNcbi8vIHRoZSBkb3QgYXQgVSsyMkM1IGFuZCBnaXZlcyBpdCBwdW5jdCBzcGFjaW5nLlxuXG5kZWZpbmVNYWNybyhcIlxcdTAwYjdcIiwgXCJcXFxcY2RvdHBcIik7IC8vIFxcbGxhcCBhbmQgXFxybGFwIHJlbmRlciB0aGVpciBjb250ZW50cyBpbiB0ZXh0IG1vZGVcblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxhcFwiLCBcIlxcXFxtYXRobGxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxybGFwXCIsIFwiXFxcXG1hdGhybGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsYXBcIiwgXCJcXFxcbWF0aGNsYXB7XFxcXHRleHRybXsjMX19XCIpOyAvLyBcXG1hdGhzdHJ1dCBmcm9tIHRoZSBUZVhib29rLCBwIDM2MFxuXG5kZWZpbmVNYWNybyhcIlxcXFxtYXRoc3RydXRcIiwgXCJcXFxcdnBoYW50b217KH1cIik7IC8vIFxcdW5kZXJiYXIgZnJvbSBUZVhib29rIHAgMzUzXG5cbmRlZmluZU1hY3JvKFwiXFxcXHVuZGVyYmFyXCIsIFwiXFxcXHVuZGVybGluZXtcXFxcdGV4dHsjMX19XCIpOyAvLyBcXG5vdCBpcyBkZWZpbmVkIGJ5IGJhc2UvZm9udG1hdGgubHR4IHZpYVxuLy8gXFxEZWNsYXJlTWF0aFN5bWJvbHtcXG5vdH17XFxtYXRocmVsfXtzeW1ib2xzfXtcIjM2fVxuLy8gSXQncyB0aHVzIHRyZWF0ZWQgbGlrZSBhIFxcbWF0aHJlbCwgYnV0IGRlZmluZWQgYnkgYSBzeW1ib2wgdGhhdCBoYXMgemVyb1xuLy8gd2lkdGggYnV0IGV4dGVuZHMgdG8gdGhlIHJpZ2h0LiAgV2UgdXNlIFxccmxhcCB0byBnZXQgdGhhdCBzcGFjaW5nLlxuLy8gRm9yIE1hdGhNTCB3ZSB3cml0ZSBVKzAzMzggaGVyZS4gYnVpbGRNYXRoTUwuanMgd2lsbCB0aGVuIGRvIHRoZSBvdmVybGF5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RcIiwgJ1xcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbWF0aHJsYXBcXFxcQG5vdH19e1xcXFxjaGFyXCIzMzh9Jyk7IC8vIE5lZ2F0ZWQgc3ltYm9scyBmcm9tIGJhc2UvZm9udG1hdGgubHR4OlxuLy8gXFxkZWZcXG5lcXtcXG5vdD19IFxcbGV0XFxuZT1cXG5lcVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxuLy8gICBcXG5vdGlue1xcbWF0aHJlbHtcXG1AdGhcXG1hdGhwYWxldHRlXFxjQG5jZWxcXGlufX1cbi8vIFxcZGVmXFxjQG5jZWwjMSMye1xcbUB0aFxcb29hbGlnbnskXFxoZmlsIzFcXG1rZXJuMW11L1xcaGZpbCRcXGNyY3IkIzEjMiR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG5vdD19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiaB9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5lXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI2MFwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RpblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHt7XFxcXGlufVxcXFxtYXRobGxhcHsvXFxcXG1za2lwMW11fX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiIl9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwOVwiLCBcIlxcXFxub3RpblwiKTsgLy8gVW5pY29kZSBzdGFja2VkIHJlbGF0aW9uc1xuXG5kZWZpbmVNYWNybyhcIlxcdTIyNThcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxca2VybnstMWVtfVxcXFxyYWlzZWJveHswLjRlbX17JFxcXFxzY3JpcHRzaXplXFxcXGZyb3duJH19XCIgKyBcIn17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjU5XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx3ZWRnZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcdmVlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1QX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVCXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcc2NyaXB0c2l6ZVxcXFxzdGFyfXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUJ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte2RlZn19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVFXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17bX19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVGXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueT99ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVGfX1cIik7IC8vIE1pc2MgVW5pY29kZVxuXG5kZWZpbmVNYWNybyhcIlxcdTI3QzJcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjAzQ1wiLCBcIlxcXFxtYXRoY2xvc2V7IVxcXFxta2Vybi0wLjhtdSF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjBDXCIsIFwiXFxcXG5vdG5pXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFDXCIsIFwiXFxcXHVsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFEXCIsIFwiXFxcXHVyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFFXCIsIFwiXFxcXGxsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFGXCIsIFwiXFxcXGxyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUwMEE5XCIsIFwiXFxcXGNvcHlyaWdodFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MDBBRVwiLCBcIlxcXFx0ZXh0cmVnaXN0ZXJlZFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1RkUwRlwiLCBcIlxcXFx0ZXh0cmVnaXN0ZXJlZFwiKTsgLy8gVGhlIEthVGVYIGZvbnRzIGhhdmUgY29ybmVycyBhdCBjb2RlcG9pbnRzIHRoYXQgZG9uJ3QgbWF0Y2ggVW5pY29kZS5cbi8vIEZvciBNYXRoTUwgcHVycG9zZXMsIHVzZSB0aGUgVW5pY29kZSBjb2RlIHBvaW50LlxuXG5kZWZpbmVNYWNybyhcIlxcXFx1bGNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHVsY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWN9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHVyY29ybmVyXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdXJjb3JuZXJ9e1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjMxZH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGxjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsbGNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFlfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxscmNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGxyY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWZ9fVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTGFUZVhfMs61XG4vLyBcXHZkb3Rze1xcdmJveHtcXGJhc2VsaW5lc2tpcDRcXHBAICBcXGxpbmVza2lwbGltaXRcXHpAXG4vLyBcXGtlcm42XFxwQFxcaGJveHsufVxcaGJveHsufVxcaGJveHsufX19XG4vLyBXZSdsbCBjYWxsIFxcdmFydmRvdHMsIHdoaWNoIGdldHMgYSBnbHlwaCBmcm9tIHN5bWJvbHMuanMuXG4vLyBUaGUgemVyby13aWR0aCBydWxlIGdldHMgdXMgYW4gZXF1aXZhbGVudCB0byB0aGUgdmVydGljYWwgNnB0IGtlcm4uXG5cbmRlZmluZU1hY3JvKFwiXFxcXHZkb3RzXCIsIFwiXFxcXG1hdGhvcmR7XFxcXHZhcnZkb3RzXFxcXHJ1bGV7MHB0fXsxNXB0fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyZWVcIiwgXCJcXFxcdmRvdHNcIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGFtc21hdGguc3R5XG4vLyBodHRwOi8vbWlycm9ycy5jb25jZXJ0cGFzcy5jb20vdGV4LWFyY2hpdmUvbWFjcm9zL2xhdGV4L3JlcXVpcmVkL2Ftc21hdGgvYW1zbWF0aC5wZGZcbi8vIEl0YWxpYyBHcmVlayBjYXBpdGFsIGxldHRlcnMuICBBTVMgZGVmaW5lcyB0aGVzZSB3aXRoIFxcRGVjbGFyZU1hdGhTeW1ib2wsXG4vLyBidXQgdGhleSBhcmUgZXF1aXZhbGVudCB0byBcXG1hdGhpdHtcXExldHRlcn0uXG5cbmRlZmluZU1hY3JvKFwiXFxcXHZhckdhbW1hXCIsIFwiXFxcXG1hdGhpdHtcXFxcR2FtbWF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyRGVsdGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxEZWx0YX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJUaGV0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXFRoZXRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhckxhbWJkYVwiLCBcIlxcXFxtYXRoaXR7XFxcXExhbWJkYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJYaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFhpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyU2lnbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxTaWdtYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJVcHNpbG9uXCIsIFwiXFxcXG1hdGhpdHtcXFxcVXBzaWxvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQaGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUHNpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUHNpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhck9tZWdhXCIsIFwiXFxcXG1hdGhpdHtcXFxcT21lZ2F9XCIpOyAvL1xcbmV3Y29tbWFuZHtcXHN1YnN0YWNrfVsxXXtcXHN1YmFycmF5e2N9IzFcXGVuZHN1YmFycmF5fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxzdWJzdGFja1wiLCBcIlxcXFxiZWdpbntzdWJhcnJheX17Y30jMVxcXFxlbmR7c3ViYXJyYXl9XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXGNvbG9ufXtcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbm9uc2NyaXB0XG4vLyBcXG1rZXJuLVxcdGhpbm11c2tpcHs6fVxcbXNraXA2bXVwbHVzMW11XFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25cIiwgXCJcXFxcbm9icmVha1xcXFxtc2tpcDJtdVxcXFxtYXRocHVuY3R7fVwiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4tM211fXtcXFxcbWtlcm4tM211fXt9e317On1cXFxcbXNraXA2bXVcXFxccmVsYXhcIik7IC8vIFxcbmV3Y29tbWFuZHtcXGJveGVkfVsxXXtcXGZib3h7XFxtQHRoJFxcZGlzcGxheXN0eWxlIzEkfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcYm94ZWRcIiwgXCJcXFxcZmJveHskXFxcXGRpc3BsYXlzdHlsZXsjMX0kfVwiKTsgLy8gXFxkZWZcXGlmZntcXERPVFNCXFw7XFxMb25nbGVmdHJpZ2h0YXJyb3dcXDt9XG4vLyBcXGRlZlxcaW1wbGllc3tcXERPVFNCXFw7XFxMb25ncmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVkYnl7XFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcO31cblxuZGVmaW5lTWFjcm8oXCJcXFxcaWZmXCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRyaWdodGFycm93XFxcXDtcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbXBsaWVzXCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ3JpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZWRieVwiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdsZWZ0YXJyb3dcXFxcO1wiKTsgLy8gQU1TTWF0aCdzIGF1dG9tYXRpYyBcXGRvdHMsIGJhc2VkIG9uIFxcbWRvdHNAQCBtYWNyby5cblxudmFyIGRvdHNCeVRva2VuID0ge1xuICAnLCc6ICdcXFxcZG90c2MnLFxuICAnXFxcXG5vdCc6ICdcXFxcZG90c2InLFxuICAvLyBcXGtleWJpbkAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnKyc6ICdcXFxcZG90c2InLFxuICAnPSc6ICdcXFxcZG90c2InLFxuICAnPCc6ICdcXFxcZG90c2InLFxuICAnPic6ICdcXFxcZG90c2InLFxuICAnLSc6ICdcXFxcZG90c2InLFxuICAnKic6ICdcXFxcZG90c2InLFxuICAnOic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxET1RTQjpcbiAgJ1xcXFxET1RTQic6ICdcXFxcZG90c2InLFxuICAnXFxcXGNvcHJvZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3ZlZSc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3dlZGdlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndXBsdXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdjYXAnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdjdXAnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxwcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcc3VtJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnb3RpbWVzJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnb3BsdXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvZG90JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnc3FjdXAnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxBbmQnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25ncmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdHJpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxMb25nbGVmdHJpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbWFwc3RvJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcaG9va3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxkb3RlcSc6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRoYmluOlxuICAnXFxcXG1hdGhiaW4nOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcbWF0aHJlbDpcbiAgJ1xcXFxtYXRocmVsJzogJ1xcXFxkb3RzYicsXG4gICdcXFxccmVsYmFyJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcUmVsYmFyJzogJ1xcXFxkb3RzYicsXG4gICdcXFxceHJpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4bGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNJOlxuICAnXFxcXERPVFNJJzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcb2ludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlkb3RzaW50JzogJ1xcXFxkb3RzaScsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNYOlxuICAnXFxcXERPVFNYJzogJ1xcXFxkb3RzeCdcbn07XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRPRE86IElmIHVzZWQgaW4gdGV4dCBtb2RlLCBzaG91bGQgZXhwYW5kIHRvIFxcdGV4dGVsbGlwc2lzLlxuICAvLyBIb3dldmVyLCBpbiBLYVRlWCwgXFx0ZXh0ZWxsaXBzaXMgYW5kIFxcbGRvdHMgYmVoYXZlIHRoZSBzYW1lXG4gIC8vIChpbiB0ZXh0IG1vZGUpLCBhbmQgaXQncyB1bmxpa2VseSB3ZSdkIHNlZSBhbnkgb2YgdGhlIG1hdGggY29tbWFuZHNcbiAgLy8gdGhhdCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIFxcZG90cyB3aGVuIGluIHRleHQgbW9kZS4gIFNvIGZpbmUgZm9yIG5vd1xuICAvLyAodW50aWwgd2Ugc3VwcG9ydCBcXGlmbW1vZGUgLi4uIFxcZWxzZSAuLi4gXFxmaSkuXG4gIHZhciB0aGVkb3RzID0gJ1xcXFxkb3Rzbyc7XG4gIHZhciBuZXh0ID0gY29udGV4dC5leHBhbmRBZnRlckZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gZG90c0J5VG9rZW4pIHtcbiAgICB0aGVkb3RzID0gZG90c0J5VG9rZW5bbmV4dF07XG4gIH0gZWxzZSBpZiAobmV4dC5zbGljZSgwLCA0KSA9PT0gJ1xcXFxub3QnKSB7XG4gICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICB9IGVsc2UgaWYgKG5leHQgaW4gc3ltYm9scy5tYXRoKSB7XG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFsnYmluJywgJ3JlbCddLCBzeW1ib2xzLm1hdGhbbmV4dF0uZ3JvdXApKSB7XG4gICAgICB0aGVkb3RzID0gJ1xcXFxkb3RzYic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoZWRvdHM7XG59KTtcbnZhciBzcGFjZUFmdGVyRG90cyA9IHtcbiAgLy8gXFxyaWdodGRlbGltQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcpJzogdHJ1ZSxcbiAgJ10nOiB0cnVlLFxuICAnXFxcXHJicmFjayc6IHRydWUsXG4gICdcXFxcfSc6IHRydWUsXG4gICdcXFxccmJyYWNlJzogdHJ1ZSxcbiAgJ1xcXFxyYW5nbGUnOiB0cnVlLFxuICAnXFxcXHJjZWlsJzogdHJ1ZSxcbiAgJ1xcXFxyZmxvb3InOiB0cnVlLFxuICAnXFxcXHJncm91cCc6IHRydWUsXG4gICdcXFxccm1vdXN0YWNoZSc6IHRydWUsXG4gICdcXFxccmlnaHQnOiB0cnVlLFxuICAnXFxcXGJpZ3InOiB0cnVlLFxuICAnXFxcXGJpZ2dyJzogdHJ1ZSxcbiAgJ1xcXFxCaWdyJzogdHJ1ZSxcbiAgJ1xcXFxCaWdncic6IHRydWUsXG4gIC8vIFxcZXh0cmFAIGFsc28gdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICckJzogdHJ1ZSxcbiAgLy8gXFxleHRyYXBAIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJzsnOiB0cnVlLFxuICAnLic6IHRydWUsXG4gICcsJzogdHJ1ZVxufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzY1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDsgLy8gXFxkb3RzYyB1c2VzIFxcZXh0cmFAIGJ1dCBub3QgXFxleHRyYXBALCBpbnN0ZWFkIHNwZWNpYWxseSBjaGVja2luZyBmb3JcbiAgLy8gJzsnIGFuZCAnLicsIGJ1dCBkb2Vzbid0IGNoZWNrIGZvciAnLCcuXG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMgJiYgbmV4dCAhPT0gJywnKSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxjZG90c1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cykge1xuICAgIHJldHVybiBcIlxcXFxAY2RvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxAY2RvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzYlwiLCBcIlxcXFxjZG90c1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNtXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2lcIiwgXCJcXFxcIVxcXFxjZG90c1wiKTsgLy8gYW1zbWF0aCBkb2Vzbid0IGFjdHVhbGx5IGRlZmluZSBcXGRvdHN4LCBidXQgXFxkb3RzIGZvbGxvd2VkIGJ5IGEgbWFjcm9cbi8vIHN0YXJ0aW5nIHdpdGggXFxET1RTWCBpbXBsaWVzIFxcZG90c28sIGFuZCB0aGVuIFxcZXh0cmFAIGRldGVjdHMgdGhpcyBjYXNlXG4vLyBhbmQgZm9yY2VzIHRoZSBhZGRlZCBgXFwsYC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcZG90c3hcIiwgXCJcXFxcbGRvdHNcXFxcLFwiKTsgLy8gXFxsZXRcXERPVFNJXFxyZWxheFxuLy8gXFxsZXRcXERPVFNCXFxyZWxheFxuLy8gXFxsZXRcXERPVFNYXFxyZWxheFxuXG5kZWZpbmVNYWNybyhcIlxcXFxET1RTSVwiLCBcIlxcXFxyZWxheFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERPVFNCXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU1hcIiwgXCJcXFxccmVsYXhcIik7IC8vIFNwYWNpbmcsIGJhc2VkIG9uIGFtc21hdGguc3R5J3Mgb3ZlcnJpZGUgb2YgTGFUZVggZGVmYXVsdHNcbi8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFx0bXNwYWNlfVszXXslXG4vLyAgIFxcaWZtbW9kZVxcbXNraXAjMSMyXFxlbHNlXFxrZXJuIzEjM1xcZmlcXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFx0bXNwYWNlXCIsIFwiXFxcXFRleHRPck1hdGh7XFxcXGtlcm4jMSMzfXtcXFxcbXNraXAjMSMyfVxcXFxyZWxheFwiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwsfXtcXHRtc3BhY2UrXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCxcIiwgXCJcXFxcdG1zcGFjZSt7M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXHRoaW5zcGFjZVxcLFxuXG5kZWZpbmVNYWNybyhcIlxcXFx0aGluc3BhY2VcIiwgXCJcXFxcLFwiKTsgLy8gXFxkZWZcXD57XFxtc2tpcFxcbWVkbXVza2lwfVxuLy8gXFxyZW5ld2NvbW1hbmR7XFw6fXtcXHRtc3BhY2UrXFxtZWRtdXNraXB7LjIyMjJlbX19XG4vLyBUT0RPOiBcXD4gYW5kIG1hdGggbW9kZSBvZiBcXDogc2hvdWxkIHVzZSBcXG1lZG11c2tpcCA9IDRtdSBwbHVzIDJtdSBtaW51cyA0bXVcblxuZGVmaW5lTWFjcm8oXCJcXFxcPlwiLCBcIlxcXFxtc2tpcHs0bXV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcOlwiLCBcIlxcXFx0bXNwYWNlK3s0bXV9ey4yMjIyZW19XCIpOyAvLyBcXGxldFxcbWVkc3BhY2VcXDpcblxuZGVmaW5lTWFjcm8oXCJcXFxcbWVkc3BhY2VcIiwgXCJcXFxcOlwiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFw7fXtcXHRtc3BhY2UrXFx0aGlja211c2tpcHsuMjc3N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpY2ttdXNraXAgPSA1bXUgcGx1cyA1bXVcblxuZGVmaW5lTWFjcm8oXCJcXFxcO1wiLCBcIlxcXFx0bXNwYWNlK3s1bXV9ey4yNzc3ZW19XCIpOyAvLyBcXGxldFxcdGhpY2tzcGFjZVxcO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0aGlja3NwYWNlXCIsIFwiXFxcXDtcIik7IC8vIFxccmVuZXdjb21tYW5ke1xcIX17XFx0bXNwYWNlLVxcdGhpbm11c2tpcHsuMTY2N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpbm11c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFwhXCIsIFwiXFxcXHRtc3BhY2UtezNtdX17LjE2NjdlbX1cIik7IC8vIFxcbGV0XFxuZWd0aGluc3BhY2VcXCFcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVndGhpbnNwYWNlXCIsIFwiXFxcXCFcIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ21lZHNwYWNlfXtcXHRtc3BhY2UtXFxtZWRtdXNraXB7LjIyMjJlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXG1lZG11c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWdtZWRzcGFjZVwiLCBcIlxcXFx0bXNwYWNlLXs0bXV9ey4yMjIyZW19XCIpOyAvLyBcXG5ld2NvbW1hbmR7XFxuZWd0aGlja3NwYWNlfXtcXHRtc3BhY2UtXFx0aGlja211c2tpcHsuMjc3N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpY2ttdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVndGhpY2tzcGFjZVwiLCBcIlxcXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX1cIik7IC8vIFxcZGVmXFxlbnNwYWNle1xca2Vybi41ZW0gfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlbnNwYWNlXCIsIFwiXFxcXGtlcm4uNWVtIFwiKTsgLy8gXFxkZWZcXGVuc2tpcHtcXGhza2lwLjVlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc2tpcFwiLCBcIlxcXFxoc2tpcC41ZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxdWFke1xcaHNraXAxZW1cXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxxdWFkXCIsIFwiXFxcXGhza2lwMWVtXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxccXF1YWR7XFxoc2tpcDJlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHFxdWFkXCIsIFwiXFxcXGhza2lwMmVtXFxcXHJlbGF4XCIpOyAvLyBcXHRhZ0BpbkBkaXNwbGF5IGZvcm0gb2YgXFx0YWdcblxuZGVmaW5lTWFjcm8oXCJcXFxcdGFnXCIsIFwiXFxcXEBpZnN0YXJcXFxcdGFnQGxpdGVyYWxcXFxcdGFnQHBhcmVuXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGFnQHBhcmVuXCIsIFwiXFxcXHRhZ0BsaXRlcmFseyh7IzF9KX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAbGl0ZXJhbFwiLCBjb250ZXh0ID0+IHtcbiAgaWYgKGNvbnRleHQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIk11bHRpcGxlIFxcXFx0YWdcIik7XG4gIH1cblxuICByZXR1cm4gXCJcXFxcZ2RlZlxcXFxkZkB0YWd7XFxcXHRleHR7IzF9fVwiO1xufSk7IC8vIFxccmVuZXdjb21tYW5ke1xcYm1vZH17XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwXFxta2VybjVtdVxcbWF0aGJpblxuLy8gICB7XFxvcGVyYXRvckBmb250IG1vZH1cXHBlbmFsdHk5MDBcbi8vICAgXFxta2VybjVtdVxcbm9uc2NyaXB0XFxtc2tpcC1cXG1lZG11c2tpcH1cbi8vIFxcbmV3Y29tbWFuZHtcXHBvZH1bMV17XFxhbGxvd2JyZWFrXG4vLyAgIFxcaWZAZGlzcGxheVxcbWtlcm4xOG11XFxlbHNlXFxta2VybjhtdVxcZmkoIzEpfVxuLy8gXFxyZW5ld2NvbW1hbmR7XFxwbW9kfVsxXXtcXHBvZHt7XFxvcGVyYXRvckBmb250IG1vZH1cXG1rZXJuNm11IzF9fVxuLy8gXFxuZXdjb21tYW5ke1xcbW9kfVsxXXtcXGFsbG93YnJlYWtcXGlmQGRpc3BsYXlcXG1rZXJuMThtdVxuLy8gICBcXGVsc2VcXG1rZXJuMTJtdVxcZml7XFxvcGVyYXRvckBmb250IG1vZH1cXCxcXCwjMX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFxibW9kXCIsIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1za2lwMW11fXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDVtdX17XFxcXG1za2lwNW11fVwiICsgXCJcXFxcbWF0aGJpbntcXFxccm0gbW9kfVwiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccG9kXCIsIFwiXFxcXGFsbG93YnJlYWtcIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuMThtdX17XFxcXG1rZXJuOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX0oIzEpXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccG1vZFwiLCBcIlxcXFxwb2R7e1xcXFxybSBtb2R9XFxcXG1rZXJuNm11IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbW9kXCIsIFwiXFxcXGFsbG93YnJlYWtcIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuMThtdX17XFxcXG1rZXJuMTJtdX17XFxcXG1rZXJuMTJtdX17XFxcXG1rZXJuMTJtdX1cIiArIFwie1xcXFxybSBtb2R9XFxcXCxcXFxcLCMxXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWCBzb3VyY2UyZVxuLy8gXFxleHBhbmRhZnRlclxcbGV0XFxleHBhbmRhZnRlclxcQG5vcm1hbGNyXG4vLyAgICAgXFxjc25hbWVcXGV4cGFuZGFmdGVyXFxAZ29iYmxlXFxzdHJpbmdcXFxcIFxcZW5kY3NuYW1lXG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxuZXdsaW5le1xcQG5vcm1hbGNyXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3bGluZVwiLCBcIlxcXFxcXFxcXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxudmFyIGxhdGV4UmFpc2VBID0gbWFrZUVtKGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJUXCIuY2hhckNvZGVBdCgwKV1bMV0gLSAwLjcgKiBmb250TWV0cmljc0RhdGFbJ01haW4tUmVndWxhciddW1wiQVwiLmNoYXJDb2RlQXQoMCldWzFdKTtcbmRlZmluZU1hY3JvKFwiXFxcXExhVGVYXCIsIFwiXFxcXHRleHRybXtcXFxcaHRtbEBtYXRobWx7XCIgKyAoXCJMXFxcXGtlcm4tLjM2ZW1cXFxccmFpc2Vib3h7XCIgKyBsYXRleFJhaXNlQSArIFwifXtcXFxcc2NyaXB0c3R5bGUgQX1cIikgKyBcIlxcXFxrZXJuLS4xNWVtXFxcXFRlWH17TGFUZVh9fVwiKTsgLy8gTmV3IEthVGVYIGxvZ28gYmFzZWQgb24gdHdlYWtpbmcgTGFUZVggbG9nb1xuXG5kZWZpbmVNYWNybyhcIlxcXFxLYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiS1xcXFxrZXJuLS4xN2VtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0thVGVYfX1cIik7IC8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmRcXGhzcGFjZXtcXEBpZnN0YXJcXEBoc3BhY2VyXFxAaHNwYWNlfVxuLy8gXFxkZWZcXEBoc3BhY2UjMXtcXGhza2lwICAjMVxccmVsYXh9XG4vLyBcXGRlZlxcQGhzcGFjZXIjMXtcXHZydWxlIFxcQHdpZHRoXFx6QFxcbm9icmVha1xuLy8gICAgICAgICAgICAgICAgIFxcaHNraXAgIzFcXGhza2lwIFxcekBza2lwfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxoc3BhY2VcIiwgXCJcXFxcQGlmc3RhclxcXFxAaHNwYWNlclxcXFxAaHNwYWNlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQGhzcGFjZVwiLCBcIlxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VyXCIsIFwiXFxcXHJ1bGV7MHB0fXswcHR9XFxcXGhza2lwICMxXFxcXHJlbGF4XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtYXRodG9vbHMuc3R5XG4vL1xccHJvdmlkZWNvbW1hbmRcXG9yZGluYXJ5Y29sb257On1cblxuZGVmaW5lTWFjcm8oXCJcXFxcb3JkaW5hcnljb2xvblwiLCBcIjpcIik7IC8vXFxkZWZcXHZjZW50Y29sb257XFxtYXRocmVse1xcbWF0aG9wXFxvcmRpbmFyeWNvbG9ufX1cbi8vVE9ETyhlZGVtYWluZSk6IE5vdCB5ZXQgY2VudGVyZWQuIEZpeCB2aWEgXFxyYWlzZWJveCBvciAjNzI2XG5cbmRlZmluZU1hY3JvKFwiXFxcXHZjZW50Y29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcbWF0aG9wXFxcXG9yZGluYXJ5Y29sb259XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcZGJsY29sb257XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tLjltdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGRibGNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0uOW11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcY29sb25lcXF7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fT19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjU0fX1cIik7IC8vIOKJlFxuLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXFxe1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fT19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiM2R9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXF7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcbWF0aHJlbHstfX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIxMn19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25lcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcZGJsY29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIxMn19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcZXFxY29sb257PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjU1fX1cIik7IC8vIOKJlVxuLy8gXFxwcm92aWRlY29tbWFuZCpcXEVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxFcXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7PVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzZFxcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxY29sb257XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcbWF0aHJlbHstfVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzl9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXEVxY29sb257XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIxMlxcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uYXBwcm94e1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmFwcHJveFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGFwcHJveH19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjI0OH19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25hcHByb3h7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbmFwcHJveFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjI0OH19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcY29sb25zaW17XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uc2ltXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcc2ltfX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2FcXFxcY2hhclxcXCIyMjNjfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbnNpbXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19XG5cbmRlZmluZU1hY3JvKFwiXFxcXENvbG9uc2ltXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcZGJsY29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzdcXFxcY2hhclxcXCIyMjNjfX1cIik7IC8vIFNvbWUgVW5pY29kZSBjaGFyYWN0ZXJzIGFyZSBpbXBsZW1lbnRlZCB3aXRoIG1hY3JvcyB0byBtYXRodG9vbHMgZnVuY3Rpb25zLlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzdcIiwgXCJcXFxcZGJsY29sb25cIik7IC8vIDo6XG5cbmRlZmluZU1hY3JvKFwiXFx1MjIzOVwiLCBcIlxcXFxlcWNvbG9uXCIpOyAvLyAtOlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTRcIiwgXCJcXFxcY29sb25lcXFcIik7IC8vIDo9XG5cbmRlZmluZU1hY3JvKFwiXFx1MjI1NVwiLCBcIlxcXFxlcXFjb2xvblwiKTsgLy8gPTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyQTc0XCIsIFwiXFxcXENvbG9uZXFxXCIpOyAvLyA6Oj1cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGNvbG9uZXF1YWxzLnN0eVxuLy8gQWx0ZXJuYXRlIG5hbWVzIGZvciBtYXRodG9vbHMncyBtYWNyb3M6XG5cbmRlZmluZU1hY3JvKFwiXFxcXHJhdGlvXCIsIFwiXFxcXHZjZW50Y29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9uXCIsIFwiXFxcXGRibGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcXVhbHNcIiwgXCJcXFxcY29sb25lcXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9uZXF1YWxzXCIsIFwiXFxcXENvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25cIiwgXCJcXFxcZXFxY29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlcXVhbHNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25taW51c1wiLCBcIlxcXFxjb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbm1pbnVzXCIsIFwiXFxcXENvbG9uZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW51c2NvbG9uXCIsIFwiXFxcXGVxY29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW51c2NvbG9uY29sb25cIiwgXCJcXFxcRXFjb2xvblwiKTsgLy8gXFxjb2xvbmFwcHJveCBuYW1lIGlzIHNhbWUgaW4gbWF0aHRvb2xzIGFuZCBjb2xvbmVxdWFscy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmFwcHJveFwiLCBcIlxcXFxDb2xvbmFwcHJveFwiKTsgLy8gXFxjb2xvbnNpbSBuYW1lIGlzIHNhbWUgaW4gbWF0aHRvb2xzIGFuZCBjb2xvbmVxdWFscy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbnNpbVwiLCBcIlxcXFxDb2xvbnNpbVwiKTsgLy8gQWRkaXRpb25hbCBtYWNyb3MsIGltcGxlbWVudGVkIGJ5IGFuYWxvZ3kgd2l0aCBtYXRodG9vbHMgZGVmaW5pdGlvbnM6XG5cbmRlZmluZU1hY3JvKFwiXFxcXHNpbWNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXHNpbVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXHNpbVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYXBwcm94Y29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcYXBwcm94XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uY29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcYXBwcm94XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn1cIik7IC8vIFByZXNlbnQgaW4gbmV3dHhtYXRoLCBweGZvbnRzIGFuZCB0eGZvbnRzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5vdG5pXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxub3RcXFxcbml9e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyMEN9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxpbXN1cFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2xpbVxcXFwsc3VwfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxpbWluZlwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2xpbVxcXFwsaW5mfVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRnJvbSBhbXNvcG4uc3R5XG5cbmRlZmluZU1hY3JvKFwiXFxcXGluamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2lualxcXFwsbGltfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHByb2psaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntwcm9qXFxcXCxsaW19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFybGltc3VwXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXG92ZXJsaW5le2xpbX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFybGltaW5mXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXHVuZGVybGluZXtsaW19fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcmluamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFx1bmRlcnJpZ2h0YXJyb3d7bGltfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJwcm9qbGltXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXHVuZGVybGVmdGFycm93e2xpbX19XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBNYXRoTUwgYWx0ZXJuYXRlcyBmb3IgS2FUZVggZ2x5cGhzIGluIHRoZSBVbmljb2RlIHByaXZhdGUgYXJlYVxuXG5kZWZpbmVNYWNybyhcIlxcXFxndmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBndmVydG5lcXF9e1xcdTIyNjl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHZlcnRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbHZlcnRuZXFxfXtcXHUyMjY4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5nZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmdlcXF9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXNsYW50XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmdlcXNsYW50fXtcXHUyMjcxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5sZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmxlcXF9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXNsYW50XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmxlcXNsYW50fXtcXHUyMjcwfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zaG9ydG1pZFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zaG9ydG1pZH174oikfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zaG9ydHBhcmFsbGVsXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0cGFyYWxsZWx9e+KIpn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc3Vic2V0ZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnN1YnNldGVxcX17XFx1MjI4OH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc3Vwc2V0ZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnN1cHNldGVxcX17XFx1MjI4OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdWJzZXRuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXF9e+KKin1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdWJzZXRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vic2V0bmVxcX174quLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1cHNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcX174oqLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1cHNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdXBzZXRuZXFxfXviq4x9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hdGhcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBpbWF0aH17XFx1MDEzMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxqbWF0aFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGptYXRofXtcXHUwMjM3fVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RtYXJ5cmQgYW5kIHNlbWFudGljXG4vLyBUaGUgc3RtYXJ5cmQgYW5kIHNlbWFudGljIHBhY2thZ2VzIHJlbmRlciB0aGUgbmV4dCBmb3VyIGl0ZW1zIGJ5IGNhbGxpbmcgYVxuLy8gZ2x5cGguIFRob3NlIGdseXBocyBkbyBub3QgZXhpc3QgaW4gdGhlIEthVGVYIGZvbnRzLiBIZW5jZSB0aGUgbWFjcm9zLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxsbGJyYWNrZXRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRob3BlbntbXFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1MjdlNn19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccnJicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVdfX1cIiArIFwie1xcXFxtYXRoY2xvc2V7XFxcXGNoYXJgXFx1MjdlN319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyN2U2XCIsIFwiXFxcXGxsYnJhY2tldFwiKTsgLy8gYmxhY2tib2FyZCBib2xkIFtcblxuZGVmaW5lTWFjcm8oXCJcXHUyN2U3XCIsIFwiXFxcXHJyYnJhY2tldFwiKTsgLy8gYmxhY2tib2FyZCBib2xkIF1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbEJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57XFxcXHtcXFxcbWtlcm4tMy4ybXVbfX1cIiArIFwie1xcXFxtYXRob3BlbntcXFxcY2hhcmBcXHUyOTgzfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQnJhY2VcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRoY2xvc2V7XVxcXFxta2Vybi0zLjJtdVxcXFx9fX1cIiArIFwie1xcXFxtYXRoY2xvc2V7XFxcXGNoYXJgXFx1Mjk4NH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyOTgzXCIsIFwiXFxcXGxCcmFjZVwiKTsgLy8gYmxhY2tib2FyZCBib2xkIHtcblxuZGVmaW5lTWFjcm8oXCJcXHUyOTg0XCIsIFwiXFxcXHJCcmFjZVwiKTsgLy8gYmxhY2tib2FyZCBib2xkIH1cbi8vIFRPRE86IENyZWF0ZSB2YXJpYWJsZSBzaXplZCB2ZXJzaW9ucyBvZiB0aGUgbGFzdCB0d28gaXRlbXMuIEkgYmVsaWV2ZSB0aGF0XG4vLyB3aWxsIHJlcXVpcmUgbmV3IGZvbnQgZ2x5cGhzLlxuLy8gVGhlIHN0bWFyeXJkIGZ1bmN0aW9uIGBcXG1pbnVzb2AgcHJvdmlkZXMgYSBcIlBsaW1zb2xsXCIgc3ltYm9sIHRoYXRcbi8vIHN1cGVyaW1wb3NlcyB0aGUgY2hhcmFjdGVycyBcXGNpcmMgYW5kIFxcbWF0aG1pbnVzLiBVc2VkIGluIGNoZW1pc3RyeS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNvXCIsIFwiXFxcXG1hdGhiaW57XFxcXGh0bWxAbWF0aG1se1wiICsgXCJ7XFxcXG1hdGhybGFwe1xcXFxtYXRoY2hvaWNle1xcXFxrZXJuezAuMTQ1ZW19fXtcXFxca2VybnswLjE0NWVtfX1cIiArIFwie1xcXFxrZXJuezAuMTAxNWVtfX17XFxcXGtlcm57MC4wNzI1ZW19fVxcXFxjaXJjfXstfX19XCIgKyBcIntcXFxcY2hhcmDiprV9fVwiKTtcbmRlZmluZU1hY3JvKFwi4qa1XCIsIFwiXFxcXG1pbnVzb1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gdGV4dmMuc3R5XG4vLyBUaGUgdGV4dmMgcGFja2FnZSBjb250YWlucyBtYWNyb3MgYXZhaWxhYmxlIGluIG1lZGlhd2lraSBwYWdlcy5cbi8vIFdlIG9taXQgdGhlIGZ1bmN0aW9ucyBkZXByZWNhdGVkIGF0XG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWxwOkRpc3BsYXlpbmdfYV9mb3JtdWxhI0RlcHJlY2F0ZWRfc3ludGF4XG4vLyBXZSBhbHNvIG9taXQgdGV4dmMncyBcXE8sIHdoaWNoIGNvbmZsaWN0cyB3aXRoIFxcdGV4dHtcXE99XG5cbmRlZmluZU1hY3JvKFwiXFxcXGRhcnJcIiwgXCJcXFxcZG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZEFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYXJyXCIsIFwiXFxcXERvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhbmdcIiwgXCJcXFxcbGFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmFuZ1wiLCBcIlxcXFxyYW5nbGVcIik7XG5kZWZpbmVNYWNybyhcIlxcXFx1YXJyXCIsIFwiXFxcXHVwYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFx1QXJyXCIsIFwiXFxcXFVwYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxVYXJyXCIsIFwiXFxcXFVwYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxOXCIsIFwiXFxcXG1hdGhiYntOfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFJcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcWlwiLCBcIlxcXFxtYXRoYmJ7Wn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhbGVmXCIsIFwiXFxcXGFsZXBoXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZnN5bVwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFscGhhXCIsIFwiXFxcXG1hdGhybXtBfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEJldGFcIiwgXCJcXFxcbWF0aHJte0J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYnVsbFwiLCBcIlxcXFxidWxsZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxDaGlcIiwgXCJcXFxcbWF0aHJte1h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY2x1YnNcIiwgXCJcXFxcY2x1YnN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjbnVtc1wiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxDb21wbGV4XCIsIFwiXFxcXG1hdGhiYntDfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERhZ2dlclwiLCBcIlxcXFxkZGFnZ2VyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZGlhbW9uZHNcIiwgXCJcXFxcZGlhbW9uZHN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlbXB0eVwiLCBcIlxcXFxlbXB0eXNldFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEVwc2lsb25cIiwgXCJcXFxcbWF0aHJte0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRXRhXCIsIFwiXFxcXG1hdGhybXtIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGV4aXN0XCIsIFwiXFxcXGV4aXN0c1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGhhcnJcIiwgXCJcXFxcbGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoQXJyXCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcSGFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGhlYXJ0c1wiLCBcIlxcXFxoZWFydHN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbWFnZVwiLCBcIlxcXFxJbVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGluZmluXCIsIFwiXFxcXGluZnR5XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcSW90YVwiLCBcIlxcXFxtYXRocm17SX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpc2luXCIsIFwiXFxcXGluXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcS2FwcGFcIiwgXCJcXFxcbWF0aHJte0t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGFyclwiLCBcIlxcXFxsZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsQXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXExhcnJcIiwgXCJcXFxcTGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJhcnJcIiwgXCJcXFxcbGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsckFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXExyYXJyXCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTXVcIiwgXCJcXFxcbWF0aHJte019XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmF0bnVtc1wiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxOdVwiLCBcIlxcXFxtYXRocm17Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxPbWljcm9uXCIsIFwiXFxcXG1hdGhybXtPfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsdXNtblwiLCBcIlxcXFxwbVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhcnJcIiwgXCJcXFxccmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJBcnJcIiwgXCJcXFxcUmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFJhcnJcIiwgXCJcXFxcUmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlYWxcIiwgXCJcXFxcUmVcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsc1wiLCBcIlxcXFxtYXRoYmJ7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSZWFsc1wiLCBcIlxcXFxtYXRoYmJ7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSaG9cIiwgXCJcXFxcbWF0aHJte1B9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2RvdFwiLCBcIlxcXFxjZG90XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2VjdFwiLCBcIlxcXFxTXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3BhZGVzXCIsIFwiXFxcXHNwYWRlc3VpdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1YlwiLCBcIlxcXFxzdWJzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJlXCIsIFwiXFxcXHN1YnNldGVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3VwZVwiLCBcIlxcXFxzdXBzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFRhdVwiLCBcIlxcXFxtYXRocm17VH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0aGV0YXN5bVwiLCBcIlxcXFx2YXJ0aGV0YVwiKTsgLy8gVE9ETzogZGVmaW5lTWFjcm8oXCJcXFxcdmFyY29wcGFcIiwgXCJcXFxcXFxtYm94e1xcXFxjb3BwYX1cIik7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHdlaWVycFwiLCBcIlxcXFx3cFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpldGFcIiwgXCJcXFxcbWF0aHJte1p9XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBzdGF0bWF0aC5zdHlcbi8vIGh0dHBzOi8vY3Rhbi5tYXRoLmlsbGlub2lzLmVkdS9tYWNyb3MvbGF0ZXgvY29udHJpYi9zdGF0bWF0aC9zdGF0bWF0aC5wZGZcblxuZGVmaW5lTWFjcm8oXCJcXFxcYXJnbWluXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7YXJnXFxcXCxtaW59XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYXJnbWF4XCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7YXJnXFxcXCxtYXh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccGxpbVwiLCBcIlxcXFxET1RTQlxcXFxtYXRob3B7XFxcXG9wZXJhdG9ybmFtZXtwbGltfX1cXFxcbGltaXRzXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBicmFrZXQuc3R5XG4vLyBodHRwOi8vY3Rhbi5tYXRoLndhc2hpbmd0b24uZWR1L3RleC1hcmNoaXZlL21hY3Jvcy9sYXRleC9jb250cmliL2JyYWtldC9icmFrZXQucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGJyYVwiLCBcIlxcXFxtYXRoaW5uZXJ7XFxcXGxhbmdsZXsjMX18fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGtldFwiLCBcIlxcXFxtYXRoaW5uZXJ7fHsjMX1cXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJyYWtldFwiLCBcIlxcXFxtYXRoaW5uZXJ7XFxcXGxhbmdsZXsjMX1cXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEJyYVwiLCBcIlxcXFxsZWZ0XFxcXGxhbmdsZSMxXFxcXHJpZ2h0fFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEtldFwiLCBcIlxcXFxsZWZ0fCMxXFxcXHJpZ2h0XFxcXHJhbmdsZVwiKTtcblxudmFyIGJyYWtldEhlbHBlciA9IG9uZSA9PiBjb250ZXh0ID0+IHtcbiAgdmFyIGxlZnQgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBtaWRkbGUgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBtaWRkbGVEb3VibGUgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciByaWdodCA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgdmFyIG9sZE1pZGRsZSA9IGNvbnRleHQubWFjcm9zLmdldChcInxcIik7XG4gIHZhciBvbGRNaWRkbGVEb3VibGUgPSBjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcfFwiKTtcbiAgY29udGV4dC5tYWNyb3MuYmVnaW5Hcm91cCgpO1xuXG4gIHZhciBtaWRNYWNybyA9IGRvdWJsZSA9PiBjb250ZXh0ID0+IHtcbiAgICBpZiAob25lKSB7XG4gICAgICAvLyBPbmx5IG1vZGlmeSB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgfCBvciBcXHxcbiAgICAgIGNvbnRleHQubWFjcm9zLnNldChcInxcIiwgb2xkTWlkZGxlKTtcblxuICAgICAgaWYgKG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICAgICAgY29udGV4dC5tYWNyb3Muc2V0KFwiXFxcXHxcIiwgb2xkTWlkZGxlRG91YmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZG91YmxlZCA9IGRvdWJsZTtcblxuICAgIGlmICghZG91YmxlICYmIG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICAgIC8vIE1pbWljIFxcQGlmbmV4dGNoYXJcbiAgICAgIHZhciBuZXh0VG9rZW4gPSBjb250ZXh0LmZ1dHVyZSgpO1xuXG4gICAgICBpZiAobmV4dFRva2VuLnRleHQgPT09IFwifFwiKSB7XG4gICAgICAgIGNvbnRleHQucG9wVG9rZW4oKTtcbiAgICAgICAgZG91YmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogZG91YmxlZCA/IG1pZGRsZURvdWJsZSA6IG1pZGRsZSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9O1xuXG4gIGNvbnRleHQubWFjcm9zLnNldChcInxcIiwgbWlkTWFjcm8oZmFsc2UpKTtcblxuICBpZiAobWlkZGxlRG91YmxlLmxlbmd0aCkge1xuICAgIGNvbnRleHQubWFjcm9zLnNldChcIlxcXFx8XCIsIG1pZE1hY3JvKHRydWUpKTtcbiAgfVxuXG4gIHZhciBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBleHBhbmRlZCA9IGNvbnRleHQuZXhwYW5kVG9rZW5zKFsuLi5yaWdodCwgLi4uYXJnLCAuLi5sZWZ0IC8vIHJldmVyc2VkXG4gIF0pO1xuICBjb250ZXh0Lm1hY3Jvcy5lbmRHcm91cCgpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogZXhwYW5kZWQucmV2ZXJzZSgpLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJyYUBrZXRcIiwgYnJha2V0SGVscGVyKGZhbHNlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxicmFAc2V0XCIsIGJyYWtldEhlbHBlcih0cnVlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxCcmFrZXRcIiwgXCJcXFxcYnJhQGtldHtcXFxcbGVmdFxcXFxsYW5nbGV9XCIgKyBcIntcXFxcLFxcXFxtaWRkbGVcXFxcdmVydFxcXFwsfXtcXFxcLFxcXFxtaWRkbGVcXFxcdmVydFxcXFwsfXtcXFxccmlnaHRcXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFNldFwiLCBcIlxcXFxicmFAc2V0e1xcXFxsZWZ0XFxcXHtcXFxcOn1cIiArIFwie1xcXFw7XFxcXG1pZGRsZVxcXFx2ZXJ0XFxcXDt9e1xcXFw7XFxcXG1pZGRsZVxcXFxWZXJ0XFxcXDt9e1xcXFw6XFxcXHJpZ2h0XFxcXH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2V0XCIsIFwiXFxcXGJyYUBzZXR7XFxcXHtcXFxcLH17XFxcXG1pZH17fXtcXFxcLFxcXFx9fVwiKTsgLy8gaGFzIG5vIHN1cHBvcnQgZm9yIHNwZWNpYWwgfHwgb3IgXFx8XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBhY3R1YXJpYWxhbmdsZS5kdHhcblxuZGVmaW5lTWFjcm8oXCJcXFxcYW5nbG5cIiwgXCJ7XFxcXGFuZ2wgbn1cIik7IC8vIEN1c3RvbSBLaGFuIEFjYWRlbXkgY29sb3JzLCBzaG91bGQgYmUgbW92ZWQgdG8gYW4gb3B0aW9uYWwgcGFja2FnZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxibHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzY0OTVlZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3JhbmdlXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYTUwMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccGlua1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNkZjAwMzB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyZWVuXCIsIFwiXFxcXHRleHRjb2xvcnsjIzI4YWU3Yn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheVwiLCBcIlxcXFx0ZXh0Y29sb3J7Z3JheX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIOKAnGd1bGxldOKAnSB3aGVyZSBtYWNyb3MgYXJlIGV4cGFuZGVkXG4gKiB1bnRpbCBvbmx5IG5vbi1tYWNybyB0b2tlbnMgcmVtYWluLlxuICovXG4vLyBMaXN0IG9mIGNvbW1hbmRzIHRoYXQgYWN0IGxpa2UgbWFjcm9zIGJ1dCBhcmVuJ3QgZGVmaW5lZCBhcyBhIG1hY3JvLFxuLy8gZnVuY3Rpb24sIG9yIHN5bWJvbC4gIFVzZWQgaW4gYGlzRGVmaW5lZGAuXG52YXIgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJeXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIl9cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiXFxcXGxpbWl0c1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbm9saW1pdHNcIjogdHJ1ZSAvLyBQYXJzZXIuanNcblxufTtcbmNsYXNzIE1hY3JvRXhwYW5kZXIge1xuICBjb25zdHJ1Y3RvcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlKG1hY3Jvcywgc2V0dGluZ3MubWFjcm9zKTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuc3RhY2sgPSBbXTsgLy8gY29udGFpbnMgdG9rZW5zIGluIFJFVkVSU0Ugb3JkZXJcbiAgfVxuICAvKipcbiAgICogRmVlZCBhIG5ldyBpbnB1dCBzdHJpbmcgdG8gdGhlIHNhbWUgTWFjcm9FeHBhbmRlclxuICAgKiAod2l0aCBleGlzdGluZyBtYWNyb3MgZXRjLikuXG4gICAqL1xuXG5cbiAgZmVlZChpbnB1dCkge1xuICAgIHRoaXMubGV4ZXIgPSBuZXcgTGV4ZXIoaW5wdXQsIHRoaXMuc2V0dGluZ3MpO1xuICB9XG4gIC8qKlxuICAgKiBTd2l0Y2hlcyBiZXR3ZWVuIFwidGV4dFwiIGFuZCBcIm1hdGhcIiBtb2Rlcy5cbiAgICovXG5cblxuICBzd2l0Y2hNb2RlKG5ld01vZGUpIHtcbiAgICB0aGlzLm1vZGUgPSBuZXdNb2RlO1xuICB9XG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG5cblxuICBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMubWFjcm9zLmJlZ2luR3JvdXAoKTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgZ3JvdXAgbmVzdGluZyB3aXRoaW4gYWxsIG5hbWVzcGFjZXMuXG4gICAqL1xuXG5cbiAgZW5kR3JvdXAoKSB7XG4gICAgdGhpcy5tYWNyb3MuZW5kR3JvdXAoKTtcbiAgfVxuICAvKipcbiAgICogRW5kcyBhbGwgY3VycmVudGx5IG5lc3RlZCBncm91cHMgKGlmIGFueSksIHJlc3RvcmluZyB2YWx1ZXMgYmVmb3JlIHRoZVxuICAgKiBncm91cHMgYmVnYW4uICBVc2VmdWwgaW4gY2FzZSBvZiBhbiBlcnJvciBpbiB0aGUgbWlkZGxlIG9mIHBhcnNpbmcuXG4gICAqL1xuXG5cbiAgZW5kR3JvdXBzKCkge1xuICAgIHRoaXMubWFjcm9zLmVuZEdyb3VwcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aG91dCBleHBhbmRpbmcgaXQuXG4gICAqIFNpbWlsYXIgaW4gYmVoYXZpb3IgdG8gVGVYJ3MgYFxcZnV0dXJlbGV0YC5cbiAgICovXG5cblxuICBmdXR1cmUoKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgbmV4dCB1bmV4cGFuZGVkIHRva2VuLlxuICAgKi9cblxuXG4gIHBvcFRva2VuKCkge1xuICAgIHRoaXMuZnV0dXJlKCk7IC8vIGVuc3VyZSBub24tZW1wdHkgc3RhY2tcblxuICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBnaXZlbiB0b2tlbiB0byB0aGUgdG9rZW4gc3RhY2suICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGdldCBiZSB1c2VkXG4gICAqIHRvIHB1dCBiYWNrIGEgdG9rZW4gcmV0dXJuZWQgZnJvbSBvbmUgb2YgdGhlIG90aGVyIG1ldGhvZHMuXG4gICAqL1xuXG5cbiAgcHVzaFRva2VuKHRva2VuKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKHRva2VuKTtcbiAgfVxuICAvKipcbiAgICogQXBwZW5kIGFuIGFycmF5IG9mIHRva2VucyB0byB0aGUgdG9rZW4gc3RhY2suXG4gICAqL1xuXG5cbiAgcHVzaFRva2Vucyh0b2tlbnMpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2goLi4udG9rZW5zKTtcbiAgfVxuICAvKipcbiAgICogRmluZCBhbiBtYWNybyBhcmd1bWVudCB3aXRob3V0IGV4cGFuZGluZyB0b2tlbnMgYW5kIGFwcGVuZCB0aGUgYXJyYXkgb2ZcbiAgICogdG9rZW5zIHRvIHRoZSB0b2tlbiBzdGFjay4gVXNlcyBUb2tlbiBhcyBhIGNvbnRhaW5lciBmb3IgdGhlIHJlc3VsdC5cbiAgICovXG5cblxuICBzY2FuQXJndW1lbnQoaXNPcHRpb25hbCkge1xuICAgIHZhciBzdGFydDtcbiAgICB2YXIgZW5kO1xuICAgIHZhciB0b2tlbnM7XG5cbiAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7IC8vIFxcQGlmbmV4dGNoYXIgZ29iYmxlcyBhbnkgc3BhY2UgZm9sbG93aW5nIGl0XG5cbiAgICAgIGlmICh0aGlzLmZ1dHVyZSgpLnRleHQgIT09IFwiW1wiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzdGFydCA9IHRoaXMucG9wVG9rZW4oKTsgLy8gZG9uJ3QgaW5jbHVkZSBbIGluIHRva2Vuc1xuXG4gICAgICAoe1xuICAgICAgICB0b2tlbnMsXG4gICAgICAgIGVuZFxuICAgICAgfSA9IHRoaXMuY29uc3VtZUFyZyhbXCJdXCJdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7XG4gICAgICAgIHRva2VucyxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZFxuICAgICAgfSA9IHRoaXMuY29uc3VtZUFyZygpKTtcbiAgICB9IC8vIGluZGljYXRlIHRoZSBlbmQgb2YgYW4gYXJndW1lbnRcblxuXG4gICAgdGhpcy5wdXNoVG9rZW4obmV3IFRva2VuKFwiRU9GXCIsIGVuZC5sb2MpKTtcbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICByZXR1cm4gc3RhcnQucmFuZ2UoZW5kLCBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbGwgZm9sbG93aW5nIHNwYWNlIHRva2Vucywgd2l0aG91dCBleHBhbnNpb24uXG4gICAqL1xuXG5cbiAgY29uc3VtZVNwYWNlcygpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgdG9rZW4gPSB0aGlzLmZ1dHVyZSgpO1xuXG4gICAgICBpZiAodG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbiBhcmd1bWVudCBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheVxuICAgKiBvZiB0b2tlbnMgYW5kIHN0YXJ0L2VuZCB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lQXJnKGRlbGltcykge1xuICAgIC8vIFRoZSBhcmd1bWVudCBmb3IgYSBkZWxpbWl0ZWQgcGFyYW1ldGVyIGlzIHRoZSBzaG9ydGVzdCAocG9zc2libHlcbiAgICAvLyBlbXB0eSkgc2VxdWVuY2Ugb2YgdG9rZW5zIHdpdGggcHJvcGVybHkgbmVzdGVkIHsuLi59IGdyb3VwcyB0aGF0IGlzXG4gICAgLy8gZm9sbG93ZWQgLi4uIGJ5IHRoaXMgcGFydGljdWxhciBsaXN0IG9mIG5vbi1wYXJhbWV0ZXIgdG9rZW5zLlxuICAgIC8vIFRoZSBhcmd1bWVudCBmb3IgYW4gdW5kZWxpbWl0ZWQgcGFyYW1ldGVyIGlzIHRoZSBuZXh0IG5vbmJsYW5rXG4gICAgLy8gdG9rZW4sIHVubGVzcyB0aGF0IHRva2VuIGlzIOKAmHvigJksIHdoZW4gdGhlIGFyZ3VtZW50IHdpbGwgYmUgdGhlXG4gICAgLy8gZW50aXJlIHsuLi59IGdyb3VwIHRoYXQgZm9sbG93cy5cbiAgICB2YXIgdG9rZW5zID0gW107XG4gICAgdmFyIGlzRGVsaW1pdGVkID0gZGVsaW1zICYmIGRlbGltcy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFpc0RlbGltaXRlZCkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBiZXR3ZWVuIGFyZ3VtZW50cy4gIEFzIHRoZSBUZVhib29rIHNheXM6XG4gICAgICAvLyBcIkFmdGVyIHlvdSBoYXZlIHNhaWQg4oCYXFxkZWZcXHJvdyMxIzJ7Li4ufeKAmSwgeW91IGFyZSBhbGxvd2VkIHRvXG4gICAgICAvLyAgcHV0IHNwYWNlcyBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgKGUuZy4sIOKAmFxccm93IHggbuKAmSksIGJlY2F1c2VcbiAgICAgIC8vICBUZVggZG9lc27igJl0IHVzZSBzaW5nbGUgc3BhY2VzIGFzIHVuZGVsaW1pdGVkIGFyZ3VtZW50cy5cIlxuICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5mdXR1cmUoKTtcbiAgICB2YXIgdG9rO1xuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIG1hdGNoID0gMDtcblxuICAgIGRvIHtcbiAgICAgIHRvayA9IHRoaXMucG9wVG9rZW4oKTtcbiAgICAgIHRva2Vucy5wdXNoKHRvayk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgKytkZXB0aDtcbiAgICAgIH0gZWxzZSBpZiAodG9rLnRleHQgPT09IFwifVwiKSB7XG4gICAgICAgIC0tZGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXh0cmEgfVwiLCB0b2spO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRvay50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudFwiICsgXCIsIGV4cGVjdGVkICdcIiArIChkZWxpbXMgJiYgaXNEZWxpbWl0ZWQgPyBkZWxpbXNbbWF0Y2hdIDogXCJ9XCIpICsgXCInXCIsIHRvayk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWxpbXMgJiYgaXNEZWxpbWl0ZWQpIHtcbiAgICAgICAgaWYgKChkZXB0aCA9PT0gMCB8fCBkZXB0aCA9PT0gMSAmJiBkZWxpbXNbbWF0Y2hdID09PSBcIntcIikgJiYgdG9rLnRleHQgPT09IGRlbGltc1ttYXRjaF0pIHtcbiAgICAgICAgICArK21hdGNoO1xuXG4gICAgICAgICAgaWYgKG1hdGNoID09PSBkZWxpbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBpbmNsdWRlIGRlbGltcyBpbiB0b2tlbnNcbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoLW1hdGNoLCBtYXRjaCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0Y2ggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZGVwdGggIT09IDAgfHwgaXNEZWxpbWl0ZWQpOyAvLyBJZiB0aGUgYXJndW1lbnQgZm91bmQgLi4uIGhhcyB0aGUgZm9ybSDigJh7PG5lc3RlZCB0b2tlbnM+feKAmSxcbiAgICAvLyAuLi4gdGhlIG91dGVybW9zdCBicmFjZXMgZW5jbG9zaW5nIHRoZSBhcmd1bWVudCBhcmUgcmVtb3ZlZFxuXG5cbiAgICBpZiAoc3RhcnQudGV4dCA9PT0gXCJ7XCIgJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50ZXh0ID09PSBcIn1cIikge1xuICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgdG9rZW5zLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgb3JkZXJcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnMsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZDogdG9rXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiAoZGVsaW1pdGVkKSBhcmd1bWVudHMgZnJvbSB0aGUgdG9rZW5cbiAgICogc3RyZWFtIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAqL1xuXG5cbiAgY29uc3VtZUFyZ3MobnVtQXJncywgZGVsaW1pdGVycykge1xuICAgIGlmIChkZWxpbWl0ZXJzKSB7XG4gICAgICBpZiAoZGVsaW1pdGVycy5sZW5ndGggIT09IG51bUFyZ3MgKyAxKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVGhlIGxlbmd0aCBvZiBkZWxpbWl0ZXJzIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmdzIVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbGltcyA9IGRlbGltaXRlcnNbMF07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG5cbiAgICAgICAgaWYgKGRlbGltc1tpXSAhPT0gdG9rLnRleHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVzZSBvZiB0aGUgbWFjcm8gZG9lc24ndCBtYXRjaCBpdHMgZGVmaW5pdGlvblwiLCB0b2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBudW1BcmdzOyBfaSsrKSB7XG4gICAgICBhcmdzLnB1c2godGhpcy5jb25zdW1lQXJnKGRlbGltaXRlcnMgJiYgZGVsaW1pdGVyc1tfaSArIDFdKS50b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgYGV4cGFuc2lvbkNvdW50YCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC5cbiAgICogVGhyb3cgYW4gZXJyb3IgaWYgaXQgZXhjZWVkcyBgbWF4RXhwYW5kYC5cbiAgICovXG5cblxuICBjb3VudEV4cGFuc2lvbihhbW91bnQpIHtcbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50ICs9IGFtb3VudDtcblxuICAgIGlmICh0aGlzLmV4cGFuc2lvbkNvdW50ID4gdGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgZXhwYW5zaW9uczogaW5maW5pdGUgbG9vcCBvciBcIiArIFwibmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZ1wiKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgbmV4dCB0b2tlbiBvbmx5IG9uY2UgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIElmIHRoZSB0b2tlbiBpcyBleHBhbmRlZCwgdGhlIHJlc3VsdGluZyB0b2tlbnMgd2lsbCBiZSBwdXNoZWQgb250b1xuICAgKiB0aGUgc3RhY2sgaW4gcmV2ZXJzZSBvcmRlciwgYW5kIHRoZSBudW1iZXIgb2Ygc3VjaCB0b2tlbnMgd2lsbCBiZVxuICAgKiByZXR1cm5lZC4gIFRoaXMgbnVtYmVyIG1pZ2h0IGJlIHplcm8gb3IgcG9zaXRpdmUuXG4gICAqXG4gICAqIElmIG5vdCwgdGhlIHJldHVybiB2YWx1ZSBpcyBgZmFsc2VgLCBhbmQgdGhlIG5leHQgdG9rZW4gcmVtYWlucyBhdCB0aGVcbiAgICogdG9wIG9mIHRoZSBzdGFjay5cbiAgICpcbiAgICogSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXh0IHRva2VuIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssXG4gICAqIG9yIHRoZSBzdGFjayB3aWxsIGJlIGVtcHR5IChpbiBjYXNlIG9mIGVtcHR5IGV4cGFuc2lvblxuICAgKiBhbmQgbm8gb3RoZXIgdG9rZW5zKS5cbiAgICpcbiAgICogVXNlZCB0byBpbXBsZW1lbnQgYGV4cGFuZEFmdGVyRnV0dXJlYCBhbmQgYGV4cGFuZE5leHRUb2tlbmAuXG4gICAqXG4gICAqIElmIGV4cGFuZGFibGVPbmx5LCBvbmx5IGV4cGFuZGFibGUgdG9rZW5zIGFyZSBleHBhbmRlZCBhbmRcbiAgICogYW4gdW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2UgcmVzdWx0cyBpbiBhbiBlcnJvci5cbiAgICovXG5cblxuICBleHBhbmRPbmNlKGV4cGFuZGFibGVPbmx5KSB7XG4gICAgdmFyIHRvcFRva2VuID0gdGhpcy5wb3BUb2tlbigpO1xuICAgIHZhciBuYW1lID0gdG9wVG9rZW4udGV4dDtcbiAgICB2YXIgZXhwYW5zaW9uID0gIXRvcFRva2VuLm5vZXhwYW5kID8gdGhpcy5fZ2V0RXhwYW5zaW9uKG5hbWUpIDogbnVsbDtcblxuICAgIGlmIChleHBhbnNpb24gPT0gbnVsbCB8fCBleHBhbmRhYmxlT25seSAmJiBleHBhbnNpb24udW5leHBhbmRhYmxlKSB7XG4gICAgICBpZiAoZXhwYW5kYWJsZU9ubHkgJiYgZXhwYW5zaW9uID09IG51bGwgJiYgbmFtZVswXSA9PT0gXCJcXFxcXCIgJiYgIXRoaXMuaXNEZWZpbmVkKG5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2U6IFwiICsgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHVzaFRva2VuKHRvcFRva2VuKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvdW50RXhwYW5zaW9uKDEpO1xuICAgIHZhciB0b2tlbnMgPSBleHBhbnNpb24udG9rZW5zO1xuICAgIHZhciBhcmdzID0gdGhpcy5jb25zdW1lQXJncyhleHBhbnNpb24ubnVtQXJncywgZXhwYW5zaW9uLmRlbGltaXRlcnMpO1xuXG4gICAgaWYgKGV4cGFuc2lvbi5udW1BcmdzKSB7XG4gICAgICAvLyBwYXN0ZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgdGhlIHBsYWNlaG9sZGVyc1xuICAgICAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKCk7IC8vIG1ha2UgYSBzaGFsbG93IGNvcHlcblxuICAgICAgZm9yICh2YXIgaSA9IHRva2Vucy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgdG9rID0gdG9rZW5zW2ldO1xuXG4gICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5XCIsIHRvayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rID0gdG9rZW5zWy0taV07IC8vIG5leHQgdG9rZW4gb24gc3RhY2tcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIC8vICMjIOKGkiAjXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTsgLy8gZHJvcCBmaXJzdCAjXG4gICAgICAgICAgfSBlbHNlIGlmICgvXlsxLTldJC8udGVzdCh0b2sudGV4dCkpIHtcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyIHdpdGggdGhlIGluZGljYXRlZCBhcmd1bWVudFxuICAgICAgICAgICAgdG9rZW5zLnNwbGljZShpLCAyLCAuLi5hcmdzWyt0b2sudGV4dCAtIDFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJOb3QgYSB2YWxpZCBhcmd1bWVudCBudW1iZXJcIiwgdG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIENvbmNhdGVuYXRlIGV4cGFuc2lvbiBvbnRvIHRvcCBvZiBzdGFjay5cblxuXG4gICAgdGhpcy5wdXNoVG9rZW5zKHRva2Vucyk7XG4gICAgcmV0dXJuIHRva2Vucy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgbmV4dCB0b2tlbiBvbmx5IG9uY2UgKGlmIHBvc3NpYmxlKSwgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nXG4gICAqIHRvcCB0b2tlbiBvbiB0aGUgc3RhY2sgKHdpdGhvdXQgcmVtb3ZpbmcgYW55dGhpbmcgZnJvbSB0aGUgc3RhY2spLlxuICAgKiBTaW1pbGFyIGluIGJlaGF2aW9yIHRvIFRlWCdzIGBcXGV4cGFuZGFmdGVyXFxmdXR1cmVsZXRgLlxuICAgKiBFcXVpdmFsZW50IHRvIGV4cGFuZE9uY2UoKSBmb2xsb3dlZCBieSBmdXR1cmUoKS5cbiAgICovXG5cblxuICBleHBhbmRBZnRlckZ1dHVyZSgpIHtcbiAgICB0aGlzLmV4cGFuZE9uY2UoKTtcbiAgICByZXR1cm4gdGhpcy5mdXR1cmUoKTtcbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZXhwYW5kIGZpcnN0IHRva2VuLCB0aGVuIHJldHVybiBmaXJzdCBub24tZXhwYW5kYWJsZSB0b2tlbi5cbiAgICovXG5cblxuICBleHBhbmROZXh0VG9rZW4oKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMuZXhwYW5kT25jZSgpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBmdWxseSBleHBhbmRlZFxuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnN0YWNrLnBvcCgpOyAvLyB0aGUgdG9rZW4gYWZ0ZXIgXFxub2V4cGFuZCBpcyBpbnRlcnByZXRlZCBhcyBpZiBpdHMgbWVhbmluZ1xuICAgICAgICAvLyB3ZXJlIOKAmFxccmVsYXjigJlcblxuICAgICAgICBpZiAodG9rZW4udHJlYXRBc1JlbGF4KSB7XG4gICAgICAgICAgdG9rZW4udGV4dCA9IFwiXFxcXHJlbGF4XCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgfSAvLyBGbG93IHVuYWJsZSB0byBmaWd1cmUgb3V0IHRoYXQgdGhpcyBwYXRod2F5IGlzIGltcG9zc2libGUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4MDhcblxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucywgb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG5cblxuICBleHBhbmRNYWNybyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFjcm9zLmhhcyhuYW1lKSA/IHRoaXMuZXhwYW5kVG9rZW5zKFtuZXcgVG9rZW4obmFtZSldKSA6IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiB0b2tlbiBzdHJlYW0gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2ZcbiAgICogdG9rZW5zLiAgTm90ZSB0aGF0IHRoZSBpbnB1dCB0b2tlbnMgYXJlIGluIHJldmVyc2Ugb3JkZXIsIGJ1dCB0aGVcbiAgICogb3V0cHV0IHRva2VucyBhcmUgaW4gZm9yd2FyZCBvcmRlci5cbiAgICovXG5cblxuICBleHBhbmRUb2tlbnModG9rZW5zKSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHZhciBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2Vucyh0b2tlbnMpO1xuXG4gICAgd2hpbGUgKHRoaXMuc3RhY2subGVuZ3RoID4gb2xkU3RhY2tMZW5ndGgpIHtcbiAgICAgIC8vIEV4cGFuZCBvbmx5IGV4cGFuZGFibGUgdG9rZW5zXG4gICAgICBpZiAodGhpcy5leHBhbmRPbmNlKHRydWUpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBmdWxseSBleHBhbmRlZFxuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmICh0b2tlbi50cmVhdEFzUmVsYXgpIHtcbiAgICAgICAgICAvLyB0aGUgZXhwYW5zaW9uIG9mIFxcbm9leHBhbmQgaXMgdGhlIHRva2VuIGl0c2VsZlxuICAgICAgICAgIHRva2VuLm5vZXhwYW5kID0gZmFsc2U7XG4gICAgICAgICAgdG9rZW4udHJlYXRBc1JlbGF4ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXQucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfSAvLyBDb3VudCBhbGwgb2YgdGhlc2UgdG9rZW5zIGFzIGFkZGl0aW9uYWwgZXhwYW5zaW9ucywgdG8gcHJldmVudFxuICAgIC8vIGV4cG9uZW50aWFsIGJsb3d1cCBmcm9tIGxpbmVhcmx5IG1hbnkgXFxlZGVmJ3MuXG5cblxuICAgIHRoaXMuY291bnRFeHBhbnNpb24ob3V0cHV0Lmxlbmd0aCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHN0cmluZyxcbiAgICogb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG5cblxuICBleHBhbmRNYWNyb0FzVGV4dChuYW1lKSB7XG4gICAgdmFyIHRva2VucyA9IHRoaXMuZXhwYW5kTWFjcm8obmFtZSk7XG5cbiAgICBpZiAodG9rZW5zKSB7XG4gICAgICByZXR1cm4gdG9rZW5zLm1hcCh0b2tlbiA9PiB0b2tlbi50ZXh0KS5qb2luKFwiXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhwYW5kZWQgbWFjcm8gYXMgYSByZXZlcnNlZCBhcnJheSBvZiB0b2tlbnMgYW5kIGEgbWFjcm9cbiAgICogYXJndW1lbnQgY291bnQuICBPciByZXR1cm5zIGBudWxsYCBpZiBubyBzdWNoIG1hY3JvLlxuICAgKi9cblxuXG4gIF9nZXRFeHBhbnNpb24obmFtZSkge1xuICAgIHZhciBkZWZpbml0aW9uID0gdGhpcy5tYWNyb3MuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSAvLyBJZiBhIHNpbmdsZSBjaGFyYWN0ZXIgaGFzIGFuIGFzc29jaWF0ZWQgY2F0Y29kZSBvdGhlciB0aGFuIDEzXG4gICAgLy8gKGFjdGl2ZSBjaGFyYWN0ZXIpLCB0aGVuIGRvbid0IGV4cGFuZCBpdC5cblxuXG4gICAgaWYgKG5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY2F0Y29kZSA9IHRoaXMubGV4ZXIuY2F0Y29kZXNbbmFtZV07XG5cbiAgICAgIGlmIChjYXRjb2RlICE9IG51bGwgJiYgY2F0Y29kZSAhPT0gMTMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBleHBhbnNpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gZGVmaW5pdGlvbih0aGlzKSA6IGRlZmluaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGV4cGFuc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIG51bUFyZ3MgPSAwO1xuXG4gICAgICBpZiAoZXhwYW5zaW9uLmluZGV4T2YoXCIjXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJvZHlMZXhlciA9IG5ldyBMZXhlcihleHBhbnNpb24sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcblxuICAgICAgd2hpbGUgKHRvay50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHRvayk7XG4gICAgICAgIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgdXNpbmcgcHVzaCBhbmQgcG9wXG5cbiAgICAgIHZhciBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICBudW1BcmdzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV4cGFuZGVkO1xuICAgIH1cblxuICAgIHJldHVybiBleHBhbnNpb247XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBjdXJyZW50bHkgXCJkZWZpbmVkXCIgKGhhcyBzb21lXG4gICAqIGZ1bmN0aW9uYWxpdHkpLCBtZWFuaW5nIHRoYXQgaXQncyBhIG1hY3JvIChpbiB0aGUgY3VycmVudCBncm91cCksXG4gICAqIGEgZnVuY3Rpb24sIGEgc3ltYm9sLCBvciBvbmUgb2YgdGhlIHNwZWNpYWwgY29tbWFuZHMgbGlzdGVkIGluXG4gICAqIGBpbXBsaWNpdENvbW1hbmRzYC5cbiAgICovXG5cblxuICBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgZnVuY3Rpb25zLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHN5bWJvbHMubWF0aC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGV4cGFuZGFibGUuXG4gICAqL1xuXG5cbiAgaXNFeHBhbmRhYmxlKG5hbWUpIHtcbiAgICB2YXIgbWFjcm8gPSB0aGlzLm1hY3Jvcy5nZXQobmFtZSk7XG4gICAgcmV0dXJuIG1hY3JvICE9IG51bGwgPyB0eXBlb2YgbWFjcm8gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1hY3JvID09PSBcImZ1bmN0aW9uXCIgfHwgIW1hY3JvLnVuZXhwYW5kYWJsZSA6IGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhZnVuY3Rpb25zW25hbWVdLnByaW1pdGl2ZTtcbiAgfVxuXG59XG5cbi8vIEhlbHBlcnMgZm9yIFBhcnNlci5qcyBoYW5kbGluZyBvZiBVbmljb2RlIChzdWJ8c3VwZXIpc2NyaXB0IGNoYXJhY3RlcnMuXG52YXIgdW5pY29kZVN1YlJlZ0V4ID0gL15b4oKK4oKL4oKM4oKN4oKO4oKA4oKB4oKC4oKD4oKE4oKF4oKG4oKH4oKI4oKJ4oKQ4oKR4oKV4bWi4rG84oKW4oKX4oKY4oKZ4oKS4oKa4bWj4oKb4oKc4bWk4bWl4oKT4bWm4bWn4bWo4bWp4bWqXS87XG52YXIgdVN1YnNBbmRTdXBzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICfigoonOiAnKycsXG4gICfigosnOiAnLScsXG4gICfigownOiAnPScsXG4gICfigo0nOiAnKCcsXG4gICfigo4nOiAnKScsXG4gICfigoAnOiAnMCcsXG4gICfigoEnOiAnMScsXG4gICfigoInOiAnMicsXG4gICfigoMnOiAnMycsXG4gICfigoQnOiAnNCcsXG4gICfigoUnOiAnNScsXG4gICfigoYnOiAnNicsXG4gICfigocnOiAnNycsXG4gICfigognOiAnOCcsXG4gICfigoknOiAnOScsXG4gICdcXHUyMDkwJzogJ2EnLFxuICAnXFx1MjA5MSc6ICdlJyxcbiAgJ1xcdTIwOTUnOiAnaCcsXG4gICdcXHUxRDYyJzogJ2knLFxuICAnXFx1MkM3Qyc6ICdqJyxcbiAgJ1xcdTIwOTYnOiAnaycsXG4gICdcXHUyMDk3JzogJ2wnLFxuICAnXFx1MjA5OCc6ICdtJyxcbiAgJ1xcdTIwOTknOiAnbicsXG4gICdcXHUyMDkyJzogJ28nLFxuICAnXFx1MjA5QSc6ICdwJyxcbiAgJ1xcdTFENjMnOiAncicsXG4gICdcXHUyMDlCJzogJ3MnLFxuICAnXFx1MjA5Qyc6ICd0JyxcbiAgJ1xcdTFENjQnOiAndScsXG4gICdcXHUxRDY1JzogJ3YnLFxuICAnXFx1MjA5Myc6ICd4JyxcbiAgJ1xcdTFENjYnOiAnzrInLFxuICAnXFx1MUQ2Nyc6ICfOsycsXG4gICdcXHUxRDY4JzogJ8+BJyxcbiAgJ1xcdTFENjknOiAnXFx1MDNkNScsXG4gICdcXHUxRDZBJzogJ8+HJyxcbiAgJ+KBuic6ICcrJyxcbiAgJ+KBuyc6ICctJyxcbiAgJ+KBvCc6ICc9JyxcbiAgJ+KBvSc6ICcoJyxcbiAgJ+KBvic6ICcpJyxcbiAgJ+KBsCc6ICcwJyxcbiAgJ8K5JzogJzEnLFxuICAnwrInOiAnMicsXG4gICfCsyc6ICczJyxcbiAgJ+KBtCc6ICc0JyxcbiAgJ+KBtSc6ICc1JyxcbiAgJ+KBtic6ICc2JyxcbiAgJ+KBtyc6ICc3JyxcbiAgJ+KBuCc6ICc4JyxcbiAgJ+KBuSc6ICc5JyxcbiAgJ1xcdTFEMkMnOiAnQScsXG4gICdcXHUxRDJFJzogJ0InLFxuICAnXFx1MUQzMCc6ICdEJyxcbiAgJ1xcdTFEMzEnOiAnRScsXG4gICdcXHUxRDMzJzogJ0cnLFxuICAnXFx1MUQzNCc6ICdIJyxcbiAgJ1xcdTFEMzUnOiAnSScsXG4gICdcXHUxRDM2JzogJ0onLFxuICAnXFx1MUQzNyc6ICdLJyxcbiAgJ1xcdTFEMzgnOiAnTCcsXG4gICdcXHUxRDM5JzogJ00nLFxuICAnXFx1MUQzQSc6ICdOJyxcbiAgJ1xcdTFEM0MnOiAnTycsXG4gICdcXHUxRDNFJzogJ1AnLFxuICAnXFx1MUQzRic6ICdSJyxcbiAgJ1xcdTFENDAnOiAnVCcsXG4gICdcXHUxRDQxJzogJ1UnLFxuICAnXFx1MkM3RCc6ICdWJyxcbiAgJ1xcdTFENDInOiAnVycsXG4gICdcXHUxRDQzJzogJ2EnLFxuICAnXFx1MUQ0Nyc6ICdiJyxcbiAgJ1xcdTFEOUMnOiAnYycsXG4gICdcXHUxRDQ4JzogJ2QnLFxuICAnXFx1MUQ0OSc6ICdlJyxcbiAgJ1xcdTFEQTAnOiAnZicsXG4gICdcXHUxRDREJzogJ2cnLFxuICAnXFx1MDJCMCc6ICdoJyxcbiAgJ1xcdTIwNzEnOiAnaScsXG4gICdcXHUwMkIyJzogJ2onLFxuICAnXFx1MUQ0Ric6ICdrJyxcbiAgJ1xcdTAyRTEnOiAnbCcsXG4gICdcXHUxRDUwJzogJ20nLFxuICAnXFx1MjA3Ric6ICduJyxcbiAgJ1xcdTFENTInOiAnbycsXG4gICdcXHUxRDU2JzogJ3AnLFxuICAnXFx1MDJCMyc6ICdyJyxcbiAgJ1xcdTAyRTInOiAncycsXG4gICdcXHUxRDU3JzogJ3QnLFxuICAnXFx1MUQ1OCc6ICd1JyxcbiAgJ1xcdTFENUInOiAndicsXG4gICdcXHUwMkI3JzogJ3cnLFxuICAnXFx1MDJFMyc6ICd4JyxcbiAgJ1xcdTAyQjgnOiAneScsXG4gICdcXHUxREJCJzogJ3onLFxuICAnXFx1MUQ1RCc6ICfOsicsXG4gICdcXHUxRDVFJzogJ86zJyxcbiAgJ1xcdTFENUYnOiAnzrQnLFxuICAnXFx1MUQ2MCc6ICdcXHUwM2Q1JyxcbiAgJ1xcdTFENjEnOiAnz4cnLFxuICAnXFx1MURCRic6ICfOuCdcbn0pO1xuXG4vKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOjAgKi9cblxudmFyIHVuaWNvZGVBY2NlbnRzID0ge1xuICBcIsyBXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcJ1wiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxhY3V0ZVwiXG4gIH0sXG4gIFwizIBcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxgXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGdyYXZlXCJcbiAgfSxcbiAgXCLMiFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXFxcXCJcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcZGRvdFwiXG4gIH0sXG4gIFwizINcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFx+XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXHRpbGRlXCJcbiAgfSxcbiAgXCLMhFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXD1cIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYmFyXCJcbiAgfSxcbiAgXCLMhlwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXHVcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYnJldmVcIlxuICB9LFxuICBcIsyMXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcdlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxjaGVja1wiXG4gIH0sXG4gIFwizIJcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxeXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGhhdFwiXG4gIH0sXG4gIFwizIdcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFwuXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGRvdFwiXG4gIH0sXG4gIFwizIpcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxyXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXG1hdGhyaW5nXCJcbiAgfSxcbiAgXCLMi1wiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXEhcIlxuICB9LFxuICBcIsynXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcY1wiXG4gIH1cbn07XG52YXIgdW5pY29kZVN5bWJvbHMgPSB7XG4gIFwiw6FcIjogXCJhzIFcIixcbiAgXCLDoFwiOiBcImHMgFwiLFxuICBcIsOkXCI6IFwiYcyIXCIsXG4gIFwix59cIjogXCJhzIjMhFwiLFxuICBcIsOjXCI6IFwiYcyDXCIsXG4gIFwixIFcIjogXCJhzIRcIixcbiAgXCLEg1wiOiBcImHMhlwiLFxuICBcIuG6r1wiOiBcImHMhsyBXCIsXG4gIFwi4bqxXCI6IFwiYcyGzIBcIixcbiAgXCLhurVcIjogXCJhzIbMg1wiLFxuICBcIseOXCI6IFwiYcyMXCIsXG4gIFwiw6JcIjogXCJhzIJcIixcbiAgXCLhuqVcIjogXCJhzILMgVwiLFxuICBcIuG6p1wiOiBcImHMgsyAXCIsXG4gIFwi4bqrXCI6IFwiYcyCzINcIixcbiAgXCLIp1wiOiBcImHMh1wiLFxuICBcIsehXCI6IFwiYcyHzIRcIixcbiAgXCLDpVwiOiBcImHMilwiLFxuICBcIse7XCI6IFwiYcyKzIFcIixcbiAgXCLhuINcIjogXCJizIdcIixcbiAgXCLEh1wiOiBcImPMgVwiLFxuICBcIuG4iVwiOiBcImPMp8yBXCIsXG4gIFwixI1cIjogXCJjzIxcIixcbiAgXCLEiVwiOiBcImPMglwiLFxuICBcIsSLXCI6IFwiY8yHXCIsXG4gIFwiw6dcIjogXCJjzKdcIixcbiAgXCLEj1wiOiBcImTMjFwiLFxuICBcIuG4i1wiOiBcImTMh1wiLFxuICBcIuG4kVwiOiBcImTMp1wiLFxuICBcIsOpXCI6IFwiZcyBXCIsXG4gIFwiw6hcIjogXCJlzIBcIixcbiAgXCLDq1wiOiBcImXMiFwiLFxuICBcIuG6vVwiOiBcImXMg1wiLFxuICBcIsSTXCI6IFwiZcyEXCIsXG4gIFwi4biXXCI6IFwiZcyEzIFcIixcbiAgXCLhuJVcIjogXCJlzITMgFwiLFxuICBcIsSVXCI6IFwiZcyGXCIsXG4gIFwi4bidXCI6IFwiZcynzIZcIixcbiAgXCLEm1wiOiBcImXMjFwiLFxuICBcIsOqXCI6IFwiZcyCXCIsXG4gIFwi4bq/XCI6IFwiZcyCzIFcIixcbiAgXCLhu4FcIjogXCJlzILMgFwiLFxuICBcIuG7hVwiOiBcImXMgsyDXCIsXG4gIFwixJdcIjogXCJlzIdcIixcbiAgXCLIqVwiOiBcImXMp1wiLFxuICBcIuG4n1wiOiBcImbMh1wiLFxuICBcIse1XCI6IFwiZ8yBXCIsXG4gIFwi4bihXCI6IFwiZ8yEXCIsXG4gIFwixJ9cIjogXCJnzIZcIixcbiAgXCLHp1wiOiBcImfMjFwiLFxuICBcIsSdXCI6IFwiZ8yCXCIsXG4gIFwixKFcIjogXCJnzIdcIixcbiAgXCLEo1wiOiBcImfMp1wiLFxuICBcIuG4p1wiOiBcImjMiFwiLFxuICBcIsifXCI6IFwiaMyMXCIsXG4gIFwixKVcIjogXCJozIJcIixcbiAgXCLhuKNcIjogXCJozIdcIixcbiAgXCLhuKlcIjogXCJozKdcIixcbiAgXCLDrVwiOiBcImnMgVwiLFxuICBcIsOsXCI6IFwiacyAXCIsXG4gIFwiw69cIjogXCJpzIhcIixcbiAgXCLhuK9cIjogXCJpzIjMgVwiLFxuICBcIsSpXCI6IFwiacyDXCIsXG4gIFwixKtcIjogXCJpzIRcIixcbiAgXCLErVwiOiBcImnMhlwiLFxuICBcIseQXCI6IFwiacyMXCIsXG4gIFwiw65cIjogXCJpzIJcIixcbiAgXCLHsFwiOiBcImrMjFwiLFxuICBcIsS1XCI6IFwiasyCXCIsXG4gIFwi4bixXCI6IFwia8yBXCIsXG4gIFwix6lcIjogXCJrzIxcIixcbiAgXCLEt1wiOiBcImvMp1wiLFxuICBcIsS6XCI6IFwibMyBXCIsXG4gIFwixL5cIjogXCJszIxcIixcbiAgXCLEvFwiOiBcImzMp1wiLFxuICBcIuG4v1wiOiBcIm3MgVwiLFxuICBcIuG5gVwiOiBcIm3Mh1wiLFxuICBcIsWEXCI6IFwibsyBXCIsXG4gIFwix7lcIjogXCJuzIBcIixcbiAgXCLDsVwiOiBcIm7Mg1wiLFxuICBcIsWIXCI6IFwibsyMXCIsXG4gIFwi4bmFXCI6IFwibsyHXCIsXG4gIFwixYZcIjogXCJuzKdcIixcbiAgXCLDs1wiOiBcIm/MgVwiLFxuICBcIsOyXCI6IFwib8yAXCIsXG4gIFwiw7ZcIjogXCJvzIhcIixcbiAgXCLIq1wiOiBcIm/MiMyEXCIsXG4gIFwiw7VcIjogXCJvzINcIixcbiAgXCLhuY1cIjogXCJvzIPMgVwiLFxuICBcIuG5j1wiOiBcIm/Mg8yIXCIsXG4gIFwiyK1cIjogXCJvzIPMhFwiLFxuICBcIsWNXCI6IFwib8yEXCIsXG4gIFwi4bmTXCI6IFwib8yEzIFcIixcbiAgXCLhuZFcIjogXCJvzITMgFwiLFxuICBcIsWPXCI6IFwib8yGXCIsXG4gIFwix5JcIjogXCJvzIxcIixcbiAgXCLDtFwiOiBcIm/MglwiLFxuICBcIuG7kVwiOiBcIm/MgsyBXCIsXG4gIFwi4buTXCI6IFwib8yCzIBcIixcbiAgXCLhu5dcIjogXCJvzILMg1wiLFxuICBcIsivXCI6IFwib8yHXCIsXG4gIFwiyLFcIjogXCJvzIfMhFwiLFxuICBcIsWRXCI6IFwib8yLXCIsXG4gIFwi4bmVXCI6IFwicMyBXCIsXG4gIFwi4bmXXCI6IFwicMyHXCIsXG4gIFwixZVcIjogXCJyzIFcIixcbiAgXCLFmVwiOiBcInLMjFwiLFxuICBcIuG5mVwiOiBcInLMh1wiLFxuICBcIsWXXCI6IFwicsynXCIsXG4gIFwixZtcIjogXCJzzIFcIixcbiAgXCLhuaVcIjogXCJzzIHMh1wiLFxuICBcIsWhXCI6IFwic8yMXCIsXG4gIFwi4bmnXCI6IFwic8yMzIdcIixcbiAgXCLFnVwiOiBcInPMglwiLFxuICBcIuG5oVwiOiBcInPMh1wiLFxuICBcIsWfXCI6IFwic8ynXCIsXG4gIFwi4bqXXCI6IFwidMyIXCIsXG4gIFwixaVcIjogXCJ0zIxcIixcbiAgXCLhuatcIjogXCJ0zIdcIixcbiAgXCLFo1wiOiBcInTMp1wiLFxuICBcIsO6XCI6IFwidcyBXCIsXG4gIFwiw7lcIjogXCJ1zIBcIixcbiAgXCLDvFwiOiBcInXMiFwiLFxuICBcIseYXCI6IFwidcyIzIFcIixcbiAgXCLHnFwiOiBcInXMiMyAXCIsXG4gIFwix5ZcIjogXCJ1zIjMhFwiLFxuICBcIseaXCI6IFwidcyIzIxcIixcbiAgXCLFqVwiOiBcInXMg1wiLFxuICBcIuG5uVwiOiBcInXMg8yBXCIsXG4gIFwixatcIjogXCJ1zIRcIixcbiAgXCLhubtcIjogXCJ1zITMiFwiLFxuICBcIsWtXCI6IFwidcyGXCIsXG4gIFwix5RcIjogXCJ1zIxcIixcbiAgXCLDu1wiOiBcInXMglwiLFxuICBcIsWvXCI6IFwidcyKXCIsXG4gIFwixbFcIjogXCJ1zItcIixcbiAgXCLhub1cIjogXCJ2zINcIixcbiAgXCLhuoNcIjogXCJ3zIFcIixcbiAgXCLhuoFcIjogXCJ3zIBcIixcbiAgXCLhuoVcIjogXCJ3zIhcIixcbiAgXCLFtVwiOiBcInfMglwiLFxuICBcIuG6h1wiOiBcInfMh1wiLFxuICBcIuG6mFwiOiBcInfMilwiLFxuICBcIuG6jVwiOiBcInjMiFwiLFxuICBcIuG6i1wiOiBcInjMh1wiLFxuICBcIsO9XCI6IFwiecyBXCIsXG4gIFwi4buzXCI6IFwiecyAXCIsXG4gIFwiw79cIjogXCJ5zIhcIixcbiAgXCLhu7lcIjogXCJ5zINcIixcbiAgXCLIs1wiOiBcInnMhFwiLFxuICBcIsW3XCI6IFwiecyCXCIsXG4gIFwi4bqPXCI6IFwiecyHXCIsXG4gIFwi4bqZXCI6IFwiecyKXCIsXG4gIFwixbpcIjogXCJ6zIFcIixcbiAgXCLFvlwiOiBcInrMjFwiLFxuICBcIuG6kVwiOiBcInrMglwiLFxuICBcIsW8XCI6IFwiesyHXCIsXG4gIFwiw4FcIjogXCJBzIFcIixcbiAgXCLDgFwiOiBcIkHMgFwiLFxuICBcIsOEXCI6IFwiQcyIXCIsXG4gIFwix55cIjogXCJBzIjMhFwiLFxuICBcIsODXCI6IFwiQcyDXCIsXG4gIFwixIBcIjogXCJBzIRcIixcbiAgXCLEglwiOiBcIkHMhlwiLFxuICBcIuG6rlwiOiBcIkHMhsyBXCIsXG4gIFwi4bqwXCI6IFwiQcyGzIBcIixcbiAgXCLhurRcIjogXCJBzIbMg1wiLFxuICBcIseNXCI6IFwiQcyMXCIsXG4gIFwiw4JcIjogXCJBzIJcIixcbiAgXCLhuqRcIjogXCJBzILMgVwiLFxuICBcIuG6plwiOiBcIkHMgsyAXCIsXG4gIFwi4bqqXCI6IFwiQcyCzINcIixcbiAgXCLIplwiOiBcIkHMh1wiLFxuICBcIsegXCI6IFwiQcyHzIRcIixcbiAgXCLDhVwiOiBcIkHMilwiLFxuICBcIse6XCI6IFwiQcyKzIFcIixcbiAgXCLhuIJcIjogXCJCzIdcIixcbiAgXCLEhlwiOiBcIkPMgVwiLFxuICBcIuG4iFwiOiBcIkPMp8yBXCIsXG4gIFwixIxcIjogXCJDzIxcIixcbiAgXCLEiFwiOiBcIkPMglwiLFxuICBcIsSKXCI6IFwiQ8yHXCIsXG4gIFwiw4dcIjogXCJDzKdcIixcbiAgXCLEjlwiOiBcIkTMjFwiLFxuICBcIuG4ilwiOiBcIkTMh1wiLFxuICBcIuG4kFwiOiBcIkTMp1wiLFxuICBcIsOJXCI6IFwiRcyBXCIsXG4gIFwiw4hcIjogXCJFzIBcIixcbiAgXCLDi1wiOiBcIkXMiFwiLFxuICBcIuG6vFwiOiBcIkXMg1wiLFxuICBcIsSSXCI6IFwiRcyEXCIsXG4gIFwi4biWXCI6IFwiRcyEzIFcIixcbiAgXCLhuJRcIjogXCJFzITMgFwiLFxuICBcIsSUXCI6IFwiRcyGXCIsXG4gIFwi4bicXCI6IFwiRcynzIZcIixcbiAgXCLEmlwiOiBcIkXMjFwiLFxuICBcIsOKXCI6IFwiRcyCXCIsXG4gIFwi4bq+XCI6IFwiRcyCzIFcIixcbiAgXCLhu4BcIjogXCJFzILMgFwiLFxuICBcIuG7hFwiOiBcIkXMgsyDXCIsXG4gIFwixJZcIjogXCJFzIdcIixcbiAgXCLIqFwiOiBcIkXMp1wiLFxuICBcIuG4nlwiOiBcIkbMh1wiLFxuICBcIse0XCI6IFwiR8yBXCIsXG4gIFwi4bigXCI6IFwiR8yEXCIsXG4gIFwixJ5cIjogXCJHzIZcIixcbiAgXCLHplwiOiBcIkfMjFwiLFxuICBcIsScXCI6IFwiR8yCXCIsXG4gIFwixKBcIjogXCJHzIdcIixcbiAgXCLEolwiOiBcIkfMp1wiLFxuICBcIuG4plwiOiBcIkjMiFwiLFxuICBcIsieXCI6IFwiSMyMXCIsXG4gIFwixKRcIjogXCJIzIJcIixcbiAgXCLhuKJcIjogXCJIzIdcIixcbiAgXCLhuKhcIjogXCJIzKdcIixcbiAgXCLDjVwiOiBcIknMgVwiLFxuICBcIsOMXCI6IFwiScyAXCIsXG4gIFwiw49cIjogXCJJzIhcIixcbiAgXCLhuK5cIjogXCJJzIjMgVwiLFxuICBcIsSoXCI6IFwiScyDXCIsXG4gIFwixKpcIjogXCJJzIRcIixcbiAgXCLErFwiOiBcIknMhlwiLFxuICBcIsePXCI6IFwiScyMXCIsXG4gIFwiw45cIjogXCJJzIJcIixcbiAgXCLEsFwiOiBcIknMh1wiLFxuICBcIsS0XCI6IFwiSsyCXCIsXG4gIFwi4biwXCI6IFwiS8yBXCIsXG4gIFwix6hcIjogXCJLzIxcIixcbiAgXCLEtlwiOiBcIkvMp1wiLFxuICBcIsS5XCI6IFwiTMyBXCIsXG4gIFwixL1cIjogXCJMzIxcIixcbiAgXCLEu1wiOiBcIkzMp1wiLFxuICBcIuG4vlwiOiBcIk3MgVwiLFxuICBcIuG5gFwiOiBcIk3Mh1wiLFxuICBcIsWDXCI6IFwiTsyBXCIsXG4gIFwix7hcIjogXCJOzIBcIixcbiAgXCLDkVwiOiBcIk7Mg1wiLFxuICBcIsWHXCI6IFwiTsyMXCIsXG4gIFwi4bmEXCI6IFwiTsyHXCIsXG4gIFwixYVcIjogXCJOzKdcIixcbiAgXCLDk1wiOiBcIk/MgVwiLFxuICBcIsOSXCI6IFwiT8yAXCIsXG4gIFwiw5ZcIjogXCJPzIhcIixcbiAgXCLIqlwiOiBcIk/MiMyEXCIsXG4gIFwiw5VcIjogXCJPzINcIixcbiAgXCLhuYxcIjogXCJPzIPMgVwiLFxuICBcIuG5jlwiOiBcIk/Mg8yIXCIsXG4gIFwiyKxcIjogXCJPzIPMhFwiLFxuICBcIsWMXCI6IFwiT8yEXCIsXG4gIFwi4bmSXCI6IFwiT8yEzIFcIixcbiAgXCLhuZBcIjogXCJPzITMgFwiLFxuICBcIsWOXCI6IFwiT8yGXCIsXG4gIFwix5FcIjogXCJPzIxcIixcbiAgXCLDlFwiOiBcIk/MglwiLFxuICBcIuG7kFwiOiBcIk/MgsyBXCIsXG4gIFwi4buSXCI6IFwiT8yCzIBcIixcbiAgXCLhu5ZcIjogXCJPzILMg1wiLFxuICBcIsiuXCI6IFwiT8yHXCIsXG4gIFwiyLBcIjogXCJPzIfMhFwiLFxuICBcIsWQXCI6IFwiT8yLXCIsXG4gIFwi4bmUXCI6IFwiUMyBXCIsXG4gIFwi4bmWXCI6IFwiUMyHXCIsXG4gIFwixZRcIjogXCJSzIFcIixcbiAgXCLFmFwiOiBcIlLMjFwiLFxuICBcIuG5mFwiOiBcIlLMh1wiLFxuICBcIsWWXCI6IFwiUsynXCIsXG4gIFwixZpcIjogXCJTzIFcIixcbiAgXCLhuaRcIjogXCJTzIHMh1wiLFxuICBcIsWgXCI6IFwiU8yMXCIsXG4gIFwi4bmmXCI6IFwiU8yMzIdcIixcbiAgXCLFnFwiOiBcIlPMglwiLFxuICBcIuG5oFwiOiBcIlPMh1wiLFxuICBcIsWeXCI6IFwiU8ynXCIsXG4gIFwixaRcIjogXCJUzIxcIixcbiAgXCLhuapcIjogXCJUzIdcIixcbiAgXCLFolwiOiBcIlTMp1wiLFxuICBcIsOaXCI6IFwiVcyBXCIsXG4gIFwiw5lcIjogXCJVzIBcIixcbiAgXCLDnFwiOiBcIlXMiFwiLFxuICBcIseXXCI6IFwiVcyIzIFcIixcbiAgXCLHm1wiOiBcIlXMiMyAXCIsXG4gIFwix5VcIjogXCJVzIjMhFwiLFxuICBcIseZXCI6IFwiVcyIzIxcIixcbiAgXCLFqFwiOiBcIlXMg1wiLFxuICBcIuG5uFwiOiBcIlXMg8yBXCIsXG4gIFwixapcIjogXCJVzIRcIixcbiAgXCLhubpcIjogXCJVzITMiFwiLFxuICBcIsWsXCI6IFwiVcyGXCIsXG4gIFwix5NcIjogXCJVzIxcIixcbiAgXCLDm1wiOiBcIlXMglwiLFxuICBcIsWuXCI6IFwiVcyKXCIsXG4gIFwixbBcIjogXCJVzItcIixcbiAgXCLhubxcIjogXCJWzINcIixcbiAgXCLhuoJcIjogXCJXzIFcIixcbiAgXCLhuoBcIjogXCJXzIBcIixcbiAgXCLhuoRcIjogXCJXzIhcIixcbiAgXCLFtFwiOiBcIlfMglwiLFxuICBcIuG6hlwiOiBcIlfMh1wiLFxuICBcIuG6jFwiOiBcIljMiFwiLFxuICBcIuG6ilwiOiBcIljMh1wiLFxuICBcIsOdXCI6IFwiWcyBXCIsXG4gIFwi4buyXCI6IFwiWcyAXCIsXG4gIFwixbhcIjogXCJZzIhcIixcbiAgXCLhu7hcIjogXCJZzINcIixcbiAgXCLIslwiOiBcIlnMhFwiLFxuICBcIsW2XCI6IFwiWcyCXCIsXG4gIFwi4bqOXCI6IFwiWcyHXCIsXG4gIFwixblcIjogXCJazIFcIixcbiAgXCLFvVwiOiBcIlrMjFwiLFxuICBcIuG6kFwiOiBcIlrMglwiLFxuICBcIsW7XCI6IFwiWsyHXCIsXG4gIFwizqxcIjogXCLOscyBXCIsXG4gIFwi4b2wXCI6IFwizrHMgFwiLFxuICBcIuG+sVwiOiBcIs6xzIRcIixcbiAgXCLhvrBcIjogXCLOscyGXCIsXG4gIFwizq1cIjogXCLOtcyBXCIsXG4gIFwi4b2yXCI6IFwizrXMgFwiLFxuICBcIs6uXCI6IFwizrfMgVwiLFxuICBcIuG9tFwiOiBcIs63zIBcIixcbiAgXCLOr1wiOiBcIs65zIFcIixcbiAgXCLhvbZcIjogXCLOucyAXCIsXG4gIFwiz4pcIjogXCLOucyIXCIsXG4gIFwizpBcIjogXCLOucyIzIFcIixcbiAgXCLhv5JcIjogXCLOucyIzIBcIixcbiAgXCLhv5FcIjogXCLOucyEXCIsXG4gIFwi4b+QXCI6IFwizrnMhlwiLFxuICBcIs+MXCI6IFwizr/MgVwiLFxuICBcIuG9uFwiOiBcIs6/zIBcIixcbiAgXCLPjVwiOiBcIs+FzIFcIixcbiAgXCLhvbpcIjogXCLPhcyAXCIsXG4gIFwiz4tcIjogXCLPhcyIXCIsXG4gIFwizrBcIjogXCLPhcyIzIFcIixcbiAgXCLhv6JcIjogXCLPhcyIzIBcIixcbiAgXCLhv6FcIjogXCLPhcyEXCIsXG4gIFwi4b+gXCI6IFwiz4XMhlwiLFxuICBcIs+OXCI6IFwiz4nMgVwiLFxuICBcIuG9vFwiOiBcIs+JzIBcIixcbiAgXCLOjlwiOiBcIs6lzIFcIixcbiAgXCLhv6pcIjogXCLOpcyAXCIsXG4gIFwizqtcIjogXCLOpcyIXCIsXG4gIFwi4b+pXCI6IFwizqXMhFwiLFxuICBcIuG/qFwiOiBcIs6lzIZcIixcbiAgXCLOj1wiOiBcIs6pzIFcIixcbiAgXCLhv7pcIjogXCLOqcyAXCJcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJzZXIgdXNlZCB0byBwYXJzZSBvdXQgYSBUZVggZXhwcmVzc2lvbiBmcm9tIHRoZVxuICogaW5wdXQuIFNpbmNlIFRlWCBpc24ndCBjb250ZXh0LWZyZWUsIHN0YW5kYXJkIHBhcnNlcnMgZG9uJ3Qgd29yayBwYXJ0aWN1bGFybHlcbiAqIHdlbGwuXG4gKlxuICogVGhlIHN0cmF0ZWd5IG9mIHRoaXMgcGFyc2VyIGlzIGFzIHN1Y2g6XG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zICh0aGUgYC5wYXJzZS4uLmAgb25lcykgdGFrZSBhIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50XG4gKiBwYXJzZSBzdHJpbmcgdG8gcGFyc2UgdG9rZW5zIGZyb20uIFRoZSBsZXhlciAoZm91bmQgaW4gTGV4ZXIuanMsIHN0b3JlZCBhdFxuICogdGhpcy5ndWxsZXQubGV4ZXIpIGFsc28gc3VwcG9ydHMgcHVsbGluZyBvdXQgdG9rZW5zIGF0IGFyYml0cmFyeSBwbGFjZXMuIFdoZW5cbiAqIGluZGl2aWR1YWwgdG9rZW5zIGFyZSBuZWVkZWQgYXQgYSBwb3NpdGlvbiwgdGhlIGxleGVyIGlzIGNhbGxlZCB0byBwdWxsIG91dCBhXG4gKiB0b2tlbiwgd2hpY2ggaXMgdGhlbiB1c2VkLlxuICpcbiAqIFRoZSBwYXJzZXIgaGFzIGEgcHJvcGVydHkgY2FsbGVkIFwibW9kZVwiIGluZGljYXRpbmcgdGhlIG1vZGUgdGhhdFxuICogdGhlIHBhcnNlciBpcyBjdXJyZW50bHkgaW4uIEN1cnJlbnRseSBpdCBoYXMgdG8gYmUgb25lIG9mIFwibWF0aFwiIG9yXG4gKiBcInRleHRcIiwgd2hpY2ggZGVub3RlcyB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGEgbWF0aC15XG4gKiBvbmUgb3IgYSB0ZXh0LXkgb25lIChlLmcuIGluc2lkZSBcXHRleHQpLiBDdXJyZW50bHksIHRoaXMgc2VydmVzIHRvXG4gKiBsaW1pdCB0aGUgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRleHQgbW9kZS5cbiAqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbnMgdGhlbiByZXR1cm4gYW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VmdWwgZGF0YSB0aGF0XG4gKiB3YXMgcGFyc2VkIGF0IGl0cyBnaXZlbiBwb2ludCwgYW5kIGEgbmV3IHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHBhcnNlZFxuICogZGF0YS4gVGhlIG1haW4gZnVuY3Rpb25zIGNhbiBjYWxsIGVhY2ggb3RoZXIgYW5kIGNvbnRpbnVlIHRoZSBwYXJzaW5nIGJ5XG4gKiB1c2luZyB0aGUgcmV0dXJuZWQgcG9zaXRpb24gYXMgYSBuZXcgc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogVGhlcmUgYXJlIGFsc28gZXh0cmEgYC5oYW5kbGUuLi5gIGZ1bmN0aW9ucywgd2hpY2ggcHVsbCBvdXQgc29tZSByZXVzZWRcbiAqIGZ1bmN0aW9uYWxpdHkgaW50byBzZWxmLWNvbnRhaW5lZCBmdW5jdGlvbnMuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyByZXR1cm4gUGFyc2VOb2Rlcy5cbiAqL1xuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5tb2RlID0gdm9pZCAwO1xuICAgIHRoaXMuZ3VsbGV0ID0gdm9pZCAwO1xuICAgIHRoaXMuc2V0dGluZ3MgPSB2b2lkIDA7XG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHRUb2tlbiA9IHZvaWQgMDtcbiAgICAvLyBTdGFydCBpbiBtYXRoIG1vZGVcbiAgICB0aGlzLm1vZGUgPSBcIm1hdGhcIjsgLy8gQ3JlYXRlIGEgbmV3IG1hY3JvIGV4cGFuZGVyIChndWxsZXQpIGFuZCAoaW5kaXJlY3RseSB2aWEgdGhhdCkgYWxzbyBhXG4gICAgLy8gbmV3IGxleGVyIChtb3V0aCkgZm9yIHRoaXMgcGFyc2VyIChzdG9tYWNoLCBpbiB0aGUgbGFuZ3VhZ2Ugb2YgVGVYKVxuXG4gICAgdGhpcy5ndWxsZXQgPSBuZXcgTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIHRoaXMubW9kZSk7IC8vIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgdXNlIGluIHBhcnNpbmdcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgLy8gQ291bnQgbGVmdHJpZ2h0IGRlcHRoIChmb3IgXFxtaWRkbGUgZXJyb3JzKVxuXG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBhIHJlc3VsdCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCB0eXBlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG5cblxuICBleHBlY3QodGV4dCwgY29uc3VtZSkge1xuICAgIGlmIChjb25zdW1lID09PSB2b2lkIDApIHtcbiAgICAgIGNvbnN1bWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZldGNoKCkudGV4dCAhPT0gdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCAnXCIgKyB0ZXh0ICsgXCInLCBnb3QgJ1wiICsgdGhpcy5mZXRjaCgpLnRleHQgKyBcIidcIiwgdGhpcy5mZXRjaCgpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uc3VtZSkge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkcyB0aGUgY3VycmVudCBsb29rYWhlYWQgdG9rZW4sIGNvbnNpZGVyaW5nIGl0IGNvbnN1bWVkLlxuICAgKi9cblxuXG4gIGNvbnN1bWUoKSB7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLCBvciBpZiB0aGVyZSBpc24ndCBvbmUgKGF0IHRoZVxuICAgKiBiZWdpbm5pbmcsIG9yIGlmIHRoZSBwcmV2aW91cyBsb29rYWhlYWQgdG9rZW4gd2FzIGNvbnN1bWUoKWQpLFxuICAgKiBmZXRjaCB0aGUgbmV4dCB0b2tlbiBhcyB0aGUgbmV3IGxvb2thaGVhZCB0b2tlbiBhbmQgcmV0dXJuIGl0LlxuICAgKi9cblxuXG4gIGZldGNoKCkge1xuICAgIGlmICh0aGlzLm5leHRUb2tlbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5leHRUb2tlbjtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuXG5cbiAgc3dpdGNoTW9kZShuZXdNb2RlKSB7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcbiAgICB0aGlzLmd1bGxldC5zd2l0Y2hNb2RlKG5ld01vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBNYWluIHBhcnNpbmcgZnVuY3Rpb24sIHdoaWNoIHBhcnNlcyBhbiBlbnRpcmUgaW5wdXQuXG4gICAqL1xuXG5cbiAgcGFyc2UoKSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBncm91cCBuYW1lc3BhY2UgZm9yIHRoZSBtYXRoIGV4cHJlc3Npb24uXG4gICAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgICB0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7XG4gICAgfSAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5jb2xvcklzVGV4dENvbG9yKSB7XG4gICAgICB0aGlzLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNvbG9yXCIsIFwiXFxcXHRleHRjb2xvclwiKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBpbnB1dFxuICAgICAgdmFyIHBhcnNlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UpOyAvLyBJZiB3ZSBzdWNjZWVkZWQsIG1ha2Ugc3VyZSB0aGVyZSdzIGFuIEVPRiBhdCB0aGUgZW5kXG5cbiAgICAgIHRoaXMuZXhwZWN0KFwiRU9GXCIpOyAvLyBFbmQgdGhlIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIGV4cHJlc3Npb25cblxuICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwKSB7XG4gICAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZTsgLy8gQ2xvc2UgYW55IGxlZnRvdmVyIGdyb3VwcyBpbiBjYXNlIG9mIGEgcGFyc2UgZXJyb3IuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwcygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRnVsbHkgcGFyc2UgYSBzZXBhcmF0ZSBzZXF1ZW5jZSBvZiB0b2tlbnMgYXMgYSBzZXBhcmF0ZSBqb2IuXG4gICAqIFRva2VucyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHJldmVyc2Ugb3JkZXIsIGFzIGluIGEgTWFjcm9EZWZpbml0aW9uLlxuICAgKi9cblxuXG4gIHN1YnBhcnNlKHRva2Vucykge1xuICAgIC8vIFNhdmUgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBqb2IuXG4gICAgdmFyIG9sZFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFJ1biB0aGUgbmV3IGpvYiwgdGVybWluYXRpbmcgaXQgd2l0aCBhbiBleGNlc3MgJ30nXG5cbiAgICB0aGlzLmd1bGxldC5wdXNoVG9rZW4obmV3IFRva2VuKFwifVwiKSk7XG4gICAgdGhpcy5ndWxsZXQucHVzaFRva2Vucyh0b2tlbnMpO1xuICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICB0aGlzLmV4cGVjdChcIn1cIik7IC8vIFJlc3RvcmUgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBqb2IuXG5cbiAgICB0aGlzLm5leHRUb2tlbiA9IG9sZFRva2VuO1xuICAgIHJldHVybiBwYXJzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gXCJleHByZXNzaW9uXCIsIHdoaWNoIGlzIGEgbGlzdCBvZiBhdG9tcy5cbiAgICpcbiAgICogYGJyZWFrT25JbmZpeGA6IFNob3VsZCB0aGUgcGFyc2luZyBzdG9wIHdoZW4gd2UgaGl0IGluZml4IG5vZGVzPyBUaGlzXG4gICAqICAgICAgICAgICAgICAgICBoYXBwZW5zIHdoZW4gZnVuY3Rpb25zIGhhdmUgaGlnaGVyIHByZWNlZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuICBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gS2VlcCBhZGRpbmcgYXRvbXMgdG8gdGhlIGJvZHkgdW50aWwgd2UgY2FuJ3QgcGFyc2UgYW55IG1vcmUgYXRvbXMgKGVpdGhlclxuICAgIC8vIHdlIHJlYWNoZWQgdGhlIGVuZCwgYSB9LCBvciBhIFxccmlnaHQpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBpbiBtYXRoIG1vZGVcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5mZXRjaCgpO1xuXG4gICAgICBpZiAoUGFyc2VyLmVuZE9mRXhwcmVzc2lvbi5pbmRleE9mKGxleC50ZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmVha09uVG9rZW5UZXh0ICYmIGxleC50ZXh0ID09PSBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJlYWtPbkluZml4ICYmIGZ1bmN0aW9uc1tsZXgudGV4dF0gJiYgZnVuY3Rpb25zW2xleC50ZXh0XS5pbmZpeCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGF0b20gPSB0aGlzLnBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KTtcblxuICAgICAgaWYgKCFhdG9tKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChhdG9tLnR5cGUgPT09IFwiaW50ZXJuYWxcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG5cblxuICBoYW5kbGVJbmZpeE5vZGVzKGJvZHkpIHtcbiAgICB2YXIgb3ZlckluZGV4ID0gLTE7XG4gICAgdmFyIGZ1bmNOYW1lO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYm9keVtpXS50eXBlID09PSBcImluZml4XCIpIHtcbiAgICAgICAgaWYgKG92ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cFwiLCBib2R5W2ldLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG92ZXJJbmRleCA9IGk7XG4gICAgICAgIGZ1bmNOYW1lID0gYm9keVtpXS5yZXBsYWNlV2l0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlckluZGV4ICE9PSAtMSAmJiBmdW5jTmFtZSkge1xuICAgICAgdmFyIG51bWVyTm9kZTtcbiAgICAgIHZhciBkZW5vbU5vZGU7XG4gICAgICB2YXIgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgdmFyIGRlbm9tQm9keSA9IGJvZHkuc2xpY2Uob3ZlckluZGV4ICsgMSk7XG5cbiAgICAgIGlmIChudW1lckJvZHkubGVuZ3RoID09PSAxICYmIG51bWVyQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgbnVtZXJOb2RlID0gbnVtZXJCb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtZXJOb2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogbnVtZXJCb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkZW5vbUJvZHkubGVuZ3RoID09PSAxICYmIGRlbm9tQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgZGVub21Ob2RlID0gZGVub21Cb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVub21Ob2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogZGVub21Cb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlO1xuXG4gICAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXFxcXFxhYm92ZWZyYWNcIikge1xuICAgICAgICBub2RlID0gdGhpcy5jYWxsRnVuY3Rpb24oZnVuY05hbWUsIFtudW1lck5vZGUsIGJvZHlbb3ZlckluZGV4XSwgZGVub21Ob2RlXSwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbm9kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGEgc3Vic2NyaXB0IG9yIHN1cGVyc2NyaXB0IHdpdGggbmljZSBlcnJvcnMuXG4gICAqL1xuXG5cbiAgaGFuZGxlU3VwU3Vic2NyaXB0KG5hbWUgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgKSB7XG4gICAgdmFyIHN5bWJvbFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG5cbiAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSk7XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGdyb3VwIGFmdGVyICdcIiArIHN5bWJvbCArIFwiJ1wiLCBzeW1ib2xUb2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dHVhbCBpbnB1dCBvZiBhbiB1bnN1cHBvcnRlZCBjb21tYW5kIGludG8gYSB0ZXh0IG5vZGVcbiAgICogY29udGFpbmVkIHdpdGhpbiBhIGNvbG9yIG5vZGUgd2hvc2UgY29sb3IgaXMgZGV0ZXJtaW5lZCBieSBlcnJvckNvbG9yXG4gICAqL1xuXG5cbiAgZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCkge1xuICAgIHZhciB0ZXh0b3JkQXJyYXkgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgdGV4dG9yZEFycmF5LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IHRleHRbaV1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciB0ZXh0Tm9kZSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgYm9keTogdGV4dG9yZEFycmF5XG4gICAgfTtcbiAgICB2YXIgY29sb3JOb2RlID0ge1xuICAgICAgdHlwZTogXCJjb2xvclwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgY29sb3I6IHRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixcbiAgICAgIGJvZHk6IFt0ZXh0Tm9kZV1cbiAgICB9O1xuICAgIHJldHVybiBjb2xvck5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGdyb3VwIHdpdGggb3B0aW9uYWwgc3VwZXIvc3Vic2NyaXB0cy5cbiAgICovXG5cblxuICBwYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCkge1xuICAgIC8vIFRoZSBib2R5IG9mIGFuIGF0b20gaXMgYW4gaW1wbGljaXQgZ3JvdXAsIHNvIHRoYXQgdGhpbmdzIGxpa2VcbiAgICAvLyBcXGxlZnQoeFxccmlnaHQpXjIgd29yayBjb3JyZWN0bHkuXG4gICAgdmFyIGJhc2UgPSB0aGlzLnBhcnNlR3JvdXAoXCJhdG9tXCIsIGJyZWFrT25Ub2tlblRleHQpOyAvLyBJbiB0ZXh0IG1vZGUsIHdlIGRvbid0IGhhdmUgc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHNcblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICB2YXIgc3VwZXJzY3JpcHQ7XG4gICAgdmFyIHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5mZXRjaCgpO1xuXG4gICAgICBpZiAobGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiIHx8IGxleC50ZXh0ID09PSBcIlxcXFxub2xpbWl0c1wiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIGxpbWl0IGNvbnRyb2xcbiAgICAgICAgaWYgKGJhc2UgJiYgYmFzZS50eXBlID09PSBcIm9wXCIpIHtcbiAgICAgICAgICB2YXIgbGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIGJhc2UubGltaXRzID0gbGltaXRzO1xuICAgICAgICAgIGJhc2UuYWx3YXlzSGFuZGxlU3VwU3ViID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgICAgICAgIGlmIChiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yikge1xuICAgICAgICAgICAgYmFzZS5saW1pdHMgPSBsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yXCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHN1cGVyc2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRG91YmxlIHN1cGVyc2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIik7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIl9cIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBzdWJzY3JpcHQgc3RhcnRcbiAgICAgICAgaWYgKHN1YnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRG91YmxlIHN1YnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Vic2NyaXB0ID0gdGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoXCJzdWJzY3JpcHRcIik7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIidcIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBwcmltZVxuICAgICAgICBpZiAoc3VwZXJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1lID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxwcmltZVwiXG4gICAgICAgIH07IC8vIE1hbnkgcHJpbWVzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLCBzbyB3ZSBoYW5kbGUgdGhpcyBoZXJlXG5cbiAgICAgICAgdmFyIHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgICAgLy8gRm9yIGVhY2ggb25lLCBhZGQgYW5vdGhlciBwcmltZSB0byB0aGUgbGlzdFxuICAgICAgICAgIHByaW1lcy5wdXNoKHByaW1lKTtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfSAvLyBJZiB0aGVyZSdzIGEgc3VwZXJzY3JpcHQgZm9sbG93aW5nIHRoZSBwcmltZXMsIGNvbWJpbmUgdGhhdFxuICAgICAgICAvLyBzdXBlcnNjcmlwdCBpbiB3aXRoIHRoZSBwcmltZXMuXG5cblxuICAgICAgICBpZiAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgICAgcHJpbWVzLnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoXCJzdXBlcnNjcmlwdFwiKSk7XG4gICAgICAgIH0gLy8gUHV0IGV2ZXJ5dGhpbmcgaW50byBhbiBvcmRncm91cCBhcyB0aGUgc3VwZXJzY3JpcHRcblxuXG4gICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogcHJpbWVzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHVTdWJzQW5kU3Vwc1tsZXgudGV4dF0pIHtcbiAgICAgICAgLy8gQSBVbmljb2RlIHN1YnNjcmlwdCBvciBzdXBlcnNjcmlwdCBjaGFyYWN0ZXIuXG4gICAgICAgIC8vIFdlIHRyZWF0IHRoZXNlIHNpbWlsYXJseSB0byB0aGUgdW5pY29kZS1tYXRoIHBhY2thZ2UuXG4gICAgICAgIC8vIFNvIHdlIHJlbmRlciBhIHN0cmluZyBvZiBVbmljb2RlIChzdWJ8c3VwZXIpc2NyaXB0cyB0aGVcbiAgICAgICAgLy8gc2FtZSBhcyBhIChzdWJ8c3VwZXIpc2NyaXB0IG9mIHJlZ3VsYXIgY2hhcmFjdGVycy5cbiAgICAgICAgdmFyIGlzU3ViID0gdW5pY29kZVN1YlJlZ0V4LnRlc3QobGV4LnRleHQpO1xuICAgICAgICB2YXIgc3Vic3VwVG9rZW5zID0gW107XG4gICAgICAgIHN1YnN1cFRva2Vucy5wdXNoKG5ldyBUb2tlbih1U3Vic0FuZFN1cHNbbGV4LnRleHRdKSk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBDb250aW51ZSBmZXRjaGluZyB0b2tlbnMgdG8gZmlsbCBvdXQgdGhlIHN0cmluZy5cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKS50ZXh0O1xuXG4gICAgICAgICAgaWYgKCF1U3Vic0FuZFN1cHNbdG9rZW5dKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pY29kZVN1YlJlZ0V4LnRlc3QodG9rZW4pICE9PSBpc1N1Yikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Vic3VwVG9rZW5zLnVuc2hpZnQobmV3IFRva2VuKHVTdWJzQW5kU3Vwc1t0b2tlbl0pKTtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfSAvLyBOb3cgY3JlYXRlIGEgKHN1YnxzdXBlcilzY3JpcHQuXG5cblxuICAgICAgICB2YXIgYm9keSA9IHRoaXMuc3VicGFyc2Uoc3Vic3VwVG9rZW5zKTtcblxuICAgICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgICBzdWJzY3JpcHQgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgICBtb2RlOiBcIm1hdGhcIixcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG5cblxuICBwYXJzZUZ1bmN0aW9uKGJyZWFrT25Ub2tlblRleHQsIG5hbWUgLy8gRm9yIGRldGVybWluaW5nIGl0cyBjb250ZXh0XG4gICkge1xuICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgZnVuYyA9IHRva2VuLnRleHQ7XG4gICAgdmFyIGZ1bmNEYXRhID0gZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIGNvbnN1bWUgY29tbWFuZCB0b2tlblxuXG4gICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJhdG9tXCIgJiYgIWZ1bmNEYXRhLmFsbG93ZWRJbkFyZ3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIHRleHQgbW9kZVwiLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiICYmIGZ1bmNEYXRhLmFsbG93ZWRJbk1hdGggPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIG1hdGggbW9kZVwiLCB0b2tlbik7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfSA9IHRoaXMucGFyc2VBcmd1bWVudHMoZnVuYywgZnVuY0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuXG5cbiAgY2FsbEZ1bmN0aW9uKG5hbWUsIGFyZ3MsIG9wdEFyZ3MsIHRva2VuLCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmdW5jTmFtZTogbmFtZSxcbiAgICAgIHBhcnNlcjogdGhpcyxcbiAgICAgIHRva2VuLFxuICAgICAgYnJlYWtPblRva2VuVGV4dFxuICAgIH07XG4gICAgdmFyIGZ1bmMgPSBmdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgXCIgKyBuYW1lKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgYXJndW1lbnRzIG9mIGEgZnVuY3Rpb24gb3IgZW52aXJvbm1lbnRcbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50cyhmdW5jLCAvLyBTaG91bGQgbG9vayBsaWtlIFwiXFxuYW1lXCIgb3IgXCJcXGJlZ2lue25hbWV9XCIuXG4gIGZ1bmNEYXRhKSB7XG4gICAgdmFyIHRvdGFsQXJncyA9IGZ1bmNEYXRhLm51bUFyZ3MgKyBmdW5jRGF0YS5udW1PcHRpb25hbEFyZ3M7XG5cbiAgICBpZiAodG90YWxBcmdzID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiBbXSxcbiAgICAgICAgb3B0QXJnczogW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJncztcblxuICAgICAgaWYgKGZ1bmNEYXRhLnByaW1pdGl2ZSAmJiBhcmdUeXBlID09IG51bGwgfHwgLy8gXFxzcXJ0IGV4cGFuZHMgaW50byBwcmltaXRpdmUgaWYgb3B0aW9uYWwgYXJndW1lbnQgZG9lc24ndCBleGlzdFxuICAgICAgZnVuY0RhdGEudHlwZSA9PT0gXCJzcXJ0XCIgJiYgaSA9PT0gMSAmJiBvcHRBcmdzWzBdID09IG51bGwpIHtcbiAgICAgICAgYXJnVHlwZSA9IFwicHJpbWl0aXZlXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICBvcHRBcmdzLnB1c2goYXJnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICE9IG51bGwpIHtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGVcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWdcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAgd2hlbiB0aGUgbW9kZSBpcyBjaGFuZ2luZy5cbiAgICovXG5cblxuICBwYXJzZUdyb3VwT2ZUeXBlKG5hbWUsIHR5cGUsIG9wdGlvbmFsKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG9wdGlvbmFsLCB0eXBlKTtcblxuICAgICAgY2FzZSBcImhib3hcIjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIGhib3ggYXJndW1lbnQgdHlwZSB3cmFwcyB0aGUgYXJndW1lbnQgaW4gdGhlIGVxdWl2YWxlbnQgb2ZcbiAgICAgICAgICAvLyBcXGhib3gsIHdoaWNoIGlzIGxpa2UgXFx0ZXh0IGJ1dCBzd2l0Y2hpbmcgdG8gXFx0ZXh0c3R5bGUgc2l6ZS5cbiAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChvcHRpb25hbCwgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHJldHVybiBncm91cCAhPSBudWxsID8ge1xuICAgICAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgICAgICBtb2RlOiBncm91cC5tb2RlLFxuICAgICAgICAgICAgYm9keTogW2dyb3VwXSxcbiAgICAgICAgICAgIHN0eWxlOiBcInRleHRcIiAvLyBzaW11bGF0ZSBcXHRleHRzdHlsZVxuXG4gICAgICAgICAgfSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5wYXJzZVN0cmluZ0dyb3VwKFwicmF3XCIsIG9wdGlvbmFsKTtcbiAgICAgICAgICByZXR1cm4gdG9rZW4gIT0gbnVsbCA/IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIHN0cmluZzogdG9rZW4udGV4dFxuICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJwcmltaXRpdmVcIjpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWxcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9ncm91cCA9IHRoaXMucGFyc2VHcm91cChuYW1lKTtcblxuICAgICAgICAgIGlmIChfZ3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9ncm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib3JpZ2luYWxcIjpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gZ3JvdXAgdHlwZSBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkIGFueSBzcGFjZSB0b2tlbnMsIGZldGNoaW5nIHRoZSBuZXh0IG5vbi1zcGFjZSB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lU3BhY2VzKCkge1xuICAgIHdoaWxlICh0aGlzLmZldGNoKCkudGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG5cblxuICBwYXJzZVN0cmluZ0dyb3VwKG1vZGVOYW1lLCAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICBvcHRpb25hbCkge1xuICAgIHZhciBhcmdUb2tlbiA9IHRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChvcHRpb25hbCk7XG5cbiAgICBpZiAoYXJnVG9rZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgdmFyIG5leHRUb2tlbjtcblxuICAgIHdoaWxlICgobmV4dFRva2VuID0gdGhpcy5mZXRjaCgpKS50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICBzdHIgKz0gbmV4dFRva2VuLnRleHQ7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnN1bWUoKTsgLy8gY29uc3VtZSB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgYXJnVG9rZW4udGV4dCA9IHN0cjtcbiAgICByZXR1cm4gYXJnVG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuXG5cbiAgcGFyc2VSZWdleEdyb3VwKHJlZ2V4LCBtb2RlTmFtZSAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICApIHtcbiAgICB2YXIgZmlyc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgbGFzdFRva2VuID0gZmlyc3RUb2tlbjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB2YXIgbmV4dFRva2VuO1xuXG4gICAgd2hpbGUgKChuZXh0VG9rZW4gPSB0aGlzLmZldGNoKCkpLnRleHQgIT09IFwiRU9GXCIgJiYgcmVnZXgudGVzdChzdHIgKyBuZXh0VG9rZW4udGV4dCkpIHtcbiAgICAgIGxhc3RUb2tlbiA9IG5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBcIiArIG1vZGVOYW1lICsgXCI6ICdcIiArIGZpcnN0VG9rZW4udGV4dCArIFwiJ1wiLCBmaXJzdFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGNvbG9yIGRlc2NyaXB0aW9uLlxuICAgKi9cblxuXG4gIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IC9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyZXMudGV4dCk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgc2l6ZSBzcGVjaWZpY2F0aW9uLCBjb25zaXN0aW5nIG9mIG1hZ25pdHVkZSBhbmQgdW5pdC5cbiAgICovXG5cblxuICBwYXJzZVNpemVHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGlzQmxhbmsgPSBmYWxzZTsgLy8gZG9uJ3QgZXhwYW5kIGJlZm9yZSBwYXJzZVN0cmluZ0dyb3VwXG5cbiAgICB0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBzaXplOiAnXCIgKyByZXMudGV4dCArIFwiJ1wiLCByZXMpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6ZVwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICBpc0JsYW5rXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIFVSTCwgY2hlY2tpbmcgZXNjYXBlZCBsZXR0ZXJzIGFuZCBhbGxvd2VkIHByb3RvY29scyxcbiAgICogYW5kIHNldHRpbmcgdGhlIGNhdGNvZGUgb2YgJSBhcyBhbiBhY3RpdmUgY2hhcmFjdGVyIChhcyBpbiBcXGh5cGVycmVmKS5cbiAgICovXG5cblxuICBwYXJzZVVybEdyb3VwKG9wdGlvbmFsKSB7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiflwiLCAxMik7IC8vIG90aGVyIGNoYXJhY3RlclxuXG4gICAgdmFyIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInVybFwiLCBvcHRpb25hbCk7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTQpOyAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIn5cIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBhcmd1bWVudCB3aXRoIHRoZSBtb2RlIHNwZWNpZmllZC5cbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwsIG1vZGUpIHtcbiAgICB2YXIgYXJnVG9rZW4gPSB0aGlzLmd1bGxldC5zY2FuQXJndW1lbnQob3B0aW9uYWwpO1xuXG4gICAgaWYgKGFyZ1Rva2VuID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG4gICAgICB0aGlzLnN3aXRjaE1vZGUobW9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIFwiRU9GXCIpOyAvLyBUT0RPOiBmaW5kIGFuIGFsdGVybmF0aXZlIHdheSB0byBkZW5vdGUgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIik7IC8vIGV4cGVjdCB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgbG9jOiBhcmdUb2tlbi5sb2MsXG4gICAgICBib2R5OiBleHByZXNzaW9uXG4gICAgfTtcblxuICAgIGlmIChtb2RlKSB7XG4gICAgICAvLyBTd2l0Y2ggbW9kZSBiYWNrXG4gICAgICB0aGlzLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gb3JkaW5hcnkgZ3JvdXAsIHdoaWNoIGlzIGVpdGhlciBhIHNpbmdsZSBudWNsZXVzIChsaWtlIFwieFwiKVxuICAgKiBvciBhbiBleHByZXNzaW9uIGluIGJyYWNlcyAobGlrZSBcInt4K3l9XCIpIG9yIGFuIGltcGxpY2l0IGdyb3VwLCBhIGdyb3VwXG4gICAqIHRoYXQgc3RhcnRzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBhbmQgZW5kcyByaWdodCBiZWZvcmUgYSBoaWdoZXIgZXhwbGljaXRcbiAgICogZ3JvdXAgZW5kcywgb3IgYXQgRU9GLlxuICAgKi9cblxuXG4gIHBhcnNlR3JvdXAobmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gZmlyc3RUb2tlbi50ZXh0O1xuICAgIHZhciByZXN1bHQ7IC8vIFRyeSB0byBwYXJzZSBhbiBvcGVuIGJyYWNlIG9yIFxcYmVnaW5ncm91cFxuXG4gICAgaWYgKHRleHQgPT09IFwie1wiIHx8IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIikge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB2YXIgZ3JvdXBFbmQgPSB0ZXh0ID09PSBcIntcIiA/IFwifVwiIDogXCJcXFxcZW5kZ3JvdXBcIjtcbiAgICAgIHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKTsgLy8gSWYgd2UgZ2V0IGEgYnJhY2UsIHBhcnNlIGFuIGV4cHJlc3Npb25cblxuICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgZ3JvdXBFbmQpO1xuICAgICAgdmFyIGxhc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTsgLy8gQ2hlY2sgdGhhdCB3ZSBnb3QgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNlXG5cbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGZpcnN0VG9rZW4sIGxhc3RUb2tlbiksXG4gICAgICAgIGJvZHk6IGV4cHJlc3Npb24sXG4gICAgICAgIC8vIEEgZ3JvdXAgZm9ybWVkIGJ5IFxcYmVnaW5ncm91cC4uLlxcZW5kZ3JvdXAgaXMgYSBzZW1pLXNpbXBsZSBncm91cFxuICAgICAgICAvLyB3aGljaCBkb2Vzbid0IGFmZmVjdCBzcGFjaW5nIGluIG1hdGggbW9kZSwgaS5lLiwgaXMgdHJhbnNwYXJlbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xOTMwL3doZW4tc2hvdWxkLW9uZS1cbiAgICAgICAgLy8gdXNlLWJlZ2luZ3JvdXAtaW5zdGVhZC1vZi1iZ3JvdXBcbiAgICAgICAgc2VtaXNpbXBsZTogdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiIHx8IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG5hbWUsIHBhcnNlIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIE90aGVyd2lzZSwganVzdCByZXR1cm4gYSBudWNsZXVzXG4gICAgICByZXN1bHQgPSB0aGlzLnBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSkgfHwgdGhpcy5wYXJzZVN5bWJvbCgpO1xuXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgdGV4dFswXSA9PT0gXCJcXFxcXCIgJiYgIWltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkodGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEZvcm0gbGlnYXR1cmUtbGlrZSBjb21iaW5hdGlvbnMgb2YgY2hhcmFjdGVycyBmb3IgdGV4dCBtb2RlLlxuICAgKiBUaGlzIGluY2x1ZGVzIGlucHV0cyBsaWtlIFwiLS1cIiwgXCItLS1cIiwgXCJgYFwiIGFuZCBcIicnXCIuXG4gICAqIFRoZSByZXN1bHQgd2lsbCBzaW1wbHkgcmVwbGFjZSBtdWx0aXBsZSB0ZXh0b3JkIG5vZGVzIHdpdGggYSBzaW5nbGVcbiAgICogY2hhcmFjdGVyIGluIGVhY2ggdmFsdWUgYnkgYSBzaW5nbGUgdGV4dG9yZCBub2RlIGhhdmluZyBtdWx0aXBsZVxuICAgKiBjaGFyYWN0ZXJzIGluIGl0cyB2YWx1ZS4gIFRoZSByZXByZXNlbnRhdGlvbiBpcyBzdGlsbCBBU0NJSSBzb3VyY2UuXG4gICAqIFRoZSBncm91cCB3aWxsIGJlIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgKi9cblxuXG4gIGZvcm1MaWdhdHVyZXMoZ3JvdXApIHtcbiAgICB2YXIgbiA9IGdyb3VwLmxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIGEgPSBncm91cFtpXTsgLy8gJEZsb3dGaXhNZTogTm90IGV2ZXJ5IG5vZGUgdHlwZSBoYXMgYSBgdGV4dGAgcHJvcGVydHkuXG5cbiAgICAgIHZhciB2ID0gYS50ZXh0O1xuXG4gICAgICBpZiAodiA9PT0gXCItXCIgJiYgZ3JvdXBbaSArIDFdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgIGlmIChpICsgMSA8IG4gJiYgZ3JvdXBbaSArIDJdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgICAgZ3JvdXAuc3BsaWNlKGksIDMsIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGEsIGdyb3VwW2kgKyAyXSksXG4gICAgICAgICAgICB0ZXh0OiBcIi0tLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgICAgdGV4dDogXCItLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgodiA9PT0gXCInXCIgfHwgdiA9PT0gXCJgXCIpICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSB2KSB7XG4gICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgIHRleHQ6IHYgKyB2XG4gICAgICAgIH0pO1xuICAgICAgICBuIC09IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBzeW1ib2wgb3V0IG9mIHRoZSBzdHJpbmcuIEhlcmUsIHdlIGhhbmRsZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAqIHN5bWJvbHMgYW5kIHNwZWNpYWwgZnVuY3Rpb25zIGxpa2UgXFx2ZXJiLlxuICAgKi9cblxuXG4gIHBhcnNlU3ltYm9sKCkge1xuICAgIHZhciBudWNsZXVzID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gbnVjbGV1cy50ZXh0O1xuXG4gICAgaWYgKC9eXFxcXHZlcmJbXmEtekEtWl0vLnRlc3QodGV4dCkpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgdmFyIGFyZyA9IHRleHQuc2xpY2UoNSk7XG4gICAgICB2YXIgc3RhciA9IGFyZy5jaGFyQXQoMCkgPT09IFwiKlwiO1xuXG4gICAgICBpZiAoc3Rhcikge1xuICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMSk7XG4gICAgICB9IC8vIExleGVyJ3MgdG9rZW5SZWdleCBpcyBjb25zdHJ1Y3RlZCB0byBhbHdheXMgaGF2ZSBtYXRjaGluZ1xuICAgICAgLy8gZmlyc3QvbGFzdCBjaGFyYWN0ZXJzLlxuXG5cbiAgICAgIGlmIChhcmcubGVuZ3RoIDwgMiB8fCBhcmcuY2hhckF0KDApICE9PSBhcmcuc2xpY2UoLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHZlcmIgYXNzZXJ0aW9uIGZhaWxlZCAtLVxcbiAgICAgICAgICAgICAgICAgICAgcGxlYXNlIHJlcG9ydCB3aGF0IGlucHV0IGNhdXNlZCB0aGlzIGJ1Z1wiKTtcbiAgICAgIH1cblxuICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTsgLy8gcmVtb3ZlIGZpcnN0IGFuZCBsYXN0IGNoYXJcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ2ZXJiXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBib2R5OiBhcmcsXG4gICAgICAgIHN0YXJcbiAgICAgIH07XG4gICAgfSAvLyBBdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSBhIHN5bWJvbCwgcG9zc2libHkgd2l0aCBhY2NlbnRzLlxuICAgIC8vIEZpcnN0IGV4cGFuZCBhbnkgYWNjZW50ZWQgYmFzZSBzeW1ib2wgYWNjb3JkaW5nIHRvIHVuaWNvZGVTeW1ib2xzLlxuXG5cbiAgICBpZiAodW5pY29kZVN5bWJvbHMuaGFzT3duUHJvcGVydHkodGV4dFswXSkgJiYgIXN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc2xpY2UoMSk7XG4gICAgfSAvLyBTdHJpcCBvZmYgYW55IGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cblxuICAgIHZhciBtYXRjaCA9IGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleC5leGVjKHRleHQpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuXG4gICAgICBpZiAodGV4dCA9PT0gJ2knKSB7XG4gICAgICAgIHRleHQgPSAnXFx1MDEzMSc7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gJ1xcdTAyMzcnOyAvLyBkb3RsZXNzIGosIGluIG1hdGggYW5kIHRleHQgbW9kZVxuICAgICAgfVxuICAgIH0gLy8gUmVjb2duaXplIGJhc2Ugc3ltYm9sXG5cblxuICAgIHZhciBzeW1ib2w7XG5cbiAgICBpZiAoc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0XS5ncm91cDtcbiAgICAgIHZhciBsb2MgPSBTb3VyY2VMb2NhdGlvbi5yYW5nZShudWNsZXVzKTtcbiAgICAgIHZhciBzO1xuXG4gICAgICBpZiAoQVRPTVMuaGFzT3duUHJvcGVydHkoZ3JvdXApKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgdmFyIGZhbWlseSA9IGdyb3VwO1xuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBmYW1pbHksXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBncm91cCxcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmtub3duIGFjY2VudCAnIFwiICsgYWNjZW50ICsgXCInXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbW1hbmQgPSB1bmljb2RlQWNjZW50c1thY2NlbnRdW3RoaXMubW9kZV0gfHwgdW5pY29kZUFjY2VudHNbYWNjZW50XS50ZXh0O1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiQWNjZW50IFwiICsgYWNjZW50ICsgXCIgdW5zdXBwb3J0ZWQgaW4gXCIgKyB0aGlzLm1vZGUgKyBcIiBtb2RlXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ltYm9sID0ge1xuICAgICAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyksXG4gICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICAgICAgaXNTaGlmdHk6IHRydWUsXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbn1cblBhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBzaW5nbGUgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlclxuICogVE9ETyhlbWlseSk6IFJlbW92ZSB0aGlzXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlID0gZnVuY3Rpb24gcGFyc2VUcmVlKHRvUGFyc2UsIHNldHRpbmdzKSB7XG4gIGlmICghKHR5cGVvZiB0b1BhcnNlID09PSAnc3RyaW5nJyB8fCB0b1BhcnNlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0thVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uJyk7XG4gIH1cblxuICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0b1BhcnNlLCBzZXR0aW5ncyk7IC8vIEJsYW5rIG91dCBhbnkgXFxkZkB0YWcgdG8gYXZvaWQgc3B1cmlvdXMgXCJEdXBsaWNhdGUgXFx0YWdcIiBlcnJvcnNcblxuICBkZWxldGUgcGFyc2VyLmd1bGxldC5tYWNyb3MuY3VycmVudFtcIlxcXFxkZkB0YWdcIl07XG4gIHZhciB0cmVlID0gcGFyc2VyLnBhcnNlKCk7IC8vIFByZXZlbnQgYSBjb2xvciBkZWZpbml0aW9uIGZyb20gcGVyc2lzdGluZyBiZXR3ZWVuIGNhbGxzIHRvIGthdGV4LnJlbmRlcigpLlxuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGN1cnJlbnRAY29sb3JcIl07XG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGNvbG9yXCJdOyAvLyBJZiB0aGUgaW5wdXQgdXNlZCBcXHRhZywgaXQgd2lsbCBzZXQgdGhlIFxcZGZAdGFnIG1hY3JvIHRvIHRoZSB0YWcuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2VwYXJhdGVseSBwYXJzZSB0aGUgdGFnIGFuZCB3cmFwIHRoZSB0cmVlLlxuXG4gIGlmIChwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnNcIik7XG4gICAgfVxuXG4gICAgdHJlZSA9IFt7XG4gICAgICB0eXBlOiBcInRhZ1wiLFxuICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5OiB0cmVlLFxuICAgICAgdGFnOiBwYXJzZXIuc3VicGFyc2UoW25ldyBUb2tlbihcIlxcXFxkZkB0YWdcIildKVxuICAgIH1dO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogUGFyc2UgYW5kIGJ1aWxkIGFuIGV4cHJlc3Npb24sIGFuZCBwbGFjZSB0aGF0IGV4cHJlc3Npb24gaW4gdGhlIERPTSBub2RlXG4gKiBnaXZlbi5cbiAqL1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihleHByZXNzaW9uLCBiYXNlTm9kZSwgb3B0aW9ucykge1xuICBiYXNlTm9kZS50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHZhciBub2RlID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTm9kZSgpO1xuICBiYXNlTm9kZS5hcHBlbmRDaGlsZChub2RlKTtcbn07IC8vIEthVGVYJ3Mgc3R5bGVzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gcXVpcmtzIG1vZGUuIFByaW50IG91dCBhbiBlcnJvciwgYW5kXG4vLyBkaXNhYmxlIHJlbmRlcmluZy5cblxuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGlmIChkb2N1bWVudC5jb21wYXRNb2RlICE9PSBcIkNTUzFDb21wYXRcIikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgXCIgKyBcIndlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS5cIik7XG5cbiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIgZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHBhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG59O1xuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgYSBLYVRlWCBQYXJzZUVycm9yIGFuZCBvcHRpb25zLnRocm93T25FcnJvciBpcyBmYWxzZSxcbiAqIHJlbmRlcnMgdGhlIGludmFsaWQgTGFUZVggYXMgYSBzcGFuIHdpdGggaG92ZXIgdGl0bGUgZ2l2aW5nIHRoZSBLYVRlWFxuICogZXJyb3IgbWVzc2FnZS4gIE90aGVyd2lzZSwgc2ltcGx5IHRocm93cyB0aGUgZXJyb3IuXG4gKi9cblxuXG52YXIgcmVuZGVyRXJyb3IgPSBmdW5jdGlvbiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IgfHwgIShlcnJvciBpbnN0YW5jZW9mIFBhcnNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImthdGV4LWVycm9yXCJdLCBbbmV3IFN5bWJvbE5vZGUoZXhwcmVzc2lvbildKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCBlcnJvci50b1N0cmluZygpKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImNvbG9yOlwiICsgb3B0aW9ucy5lcnJvckNvbG9yKTtcbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUuIFRoaXMgaXMgdXNlZCBmb3IgYWR2YW5jZWRcbiAqIHVzZSBjYXNlcyAobGlrZSByZW5kZXJpbmcgdG8gY3VzdG9tIG91dHB1dCkuXG4gKi9cblxuXG52YXIgcmVuZGVyVG9Eb21UcmVlID0gZnVuY3Rpb24gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIHJlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZEhUTUxUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfVxufTtcblxudmFyIGthdGV4ID0ge1xuICAvKipcbiAgICogQ3VycmVudCBLYVRlWCB2ZXJzaW9uXG4gICAqL1xuICB2ZXJzaW9uOiBcIjAuMTYuMTFcIixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwrTWF0aE1MIGNvbWJpbmF0aW9uIHN0cmluZyxcbiAgICogZm9yIHNlbmRpbmcgdG8gdGhlIGNsaWVudC5cbiAgICovXG4gIHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3IsXG5cbiAgLyoqXG4gICAqIFRoZSBzaGVtYSBvZiBTZXR0aW5nc1xuICAgKi9cbiAgU0VUVElOR1NfU0NIRU1BLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGdpdmVuIExhVGVYIGludG8gS2FUZVgncyBpbnRlcm5hbCBwYXJzZSB0cmVlIHN0cnVjdHVyZSxcbiAgICogd2l0aG91dCByZW5kZXJpbmcgdG8gSFRNTCBvciBNYXRoTUwuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19wYXJzZTogZ2VuZXJhdGVQYXJzZVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgaW50ZXJuYWwgRE9NIHRyZWVcbiAgICogcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9Eb21UcmVlOiByZW5kZXJUb0RvbVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCBpbnRlcm5hbCBET00gdHJlZSByZXByZXNlbnRhdGlvbixcbiAgICogd2l0aG91dCBNYXRoTUwgYW5kIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9IVE1MVHJlZTogcmVuZGVyVG9IVE1MVHJlZSxcblxuICAvKipcbiAgICogZXh0ZW5kcyBpbnRlcm5hbCBmb250IG1ldHJpY3Mgb2JqZWN0IHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIGVhY2gga2V5IGluIHRoZSBuZXcgb2JqZWN0IHJlcHJlc2VudHMgYSBmb250IG5hbWVcbiAgKi9cbiAgX19zZXRGb250TWV0cmljczogc2V0Rm9udE1ldHJpY3MsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgc3ltYm9sIHRvIGJ1aWx0aW4gc3ltYm9scyB0YWJsZVxuICAgKi9cbiAgX19kZWZpbmVTeW1ib2w6IGRlZmluZVN5bWJvbCxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBmdW5jdGlvbiB0byBidWlsdGluIGZ1bmN0aW9uIGxpc3QsXG4gICAqIHdoaWNoIGRpcmVjdGx5IHByb2R1Y2UgcGFyc2UgdHJlZSBlbGVtZW50c1xuICAgKiBhbmQgaGF2ZSB0aGVpciBvd24gaHRtbC9tYXRobWwgYnVpbGRlcnNcbiAgICovXG4gIF9fZGVmaW5lRnVuY3Rpb246IGRlZmluZUZ1bmN0aW9uLFxuXG4gIC8qKlxuICAgKiBhZGRzIGEgbmV3IG1hY3JvIHRvIGJ1aWx0aW4gbWFjcm8gbGlzdFxuICAgKi9cbiAgX19kZWZpbmVNYWNybzogZGVmaW5lTWFjcm8sXG5cbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgZG9tIHRyZWUgbm9kZSB0eXBlcywgd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgdHlwZSBjaGVja2luZyBub2Rlcy5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgbm90IGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgcHVibGljIHVzZS5cbiAgICogVGhlIGludGVybmFsIHRyZWUgcmVwcmVzZW50YXRpb24gaXMgdW5zdGFibGUgYW5kIGlzIHZlcnkgbGlrZWx5XG4gICAqIHRvIGNoYW5nZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAqL1xuICBfX2RvbVRyZWU6IHtcbiAgICBTcGFuLFxuICAgIEFuY2hvcixcbiAgICBTeW1ib2xOb2RlLFxuICAgIFN2Z05vZGUsXG4gICAgUGF0aE5vZGUsXG4gICAgTGluZU5vZGVcbiAgfVxufTtcblxuZXhwb3J0IHsga2F0ZXggYXMgZGVmYXVsdCB9O1xuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xuXG4vLyBzcmMvbG9nZ2VyLnRzXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG52YXIgTEVWRUxTID0ge1xuICB0cmFjZTogMCxcbiAgZGVidWc6IDEsXG4gIGluZm86IDIsXG4gIHdhcm46IDMsXG4gIGVycm9yOiA0LFxuICBmYXRhbDogNVxufTtcbnZhciBsb2cgPSB7XG4gIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5fYXJncykgPT4ge1xuICB9LCBcInRyYWNlXCIpLFxuICBkZWJ1ZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoLi4uX2FyZ3MpID0+IHtcbiAgfSwgXCJkZWJ1Z1wiKSxcbiAgaW5mbzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoLi4uX2FyZ3MpID0+IHtcbiAgfSwgXCJpbmZvXCIpLFxuICB3YXJuOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5fYXJncykgPT4ge1xuICB9LCBcIndhcm5cIiksXG4gIGVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5fYXJncykgPT4ge1xuICB9LCBcImVycm9yXCIpLFxuICBmYXRhbDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoLi4uX2FyZ3MpID0+IHtcbiAgfSwgXCJmYXRhbFwiKVxufTtcbnZhciBzZXRMb2dMZXZlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obGV2ZWwgPSBcImZhdGFsXCIpIHtcbiAgbGV0IG51bWVyaWNMZXZlbCA9IExFVkVMUy5mYXRhbDtcbiAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChsZXZlbC50b0xvd2VyQ2FzZSgpIGluIExFVkVMUykge1xuICAgICAgbnVtZXJpY0xldmVsID0gTEVWRUxTW2xldmVsXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiKSB7XG4gICAgbnVtZXJpY0xldmVsID0gbGV2ZWw7XG4gIH1cbiAgbG9nLnRyYWNlID0gKCkgPT4ge1xuICB9O1xuICBsb2cuZGVidWcgPSAoKSA9PiB7XG4gIH07XG4gIGxvZy5pbmZvID0gKCkgPT4ge1xuICB9O1xuICBsb2cud2FybiA9ICgpID0+IHtcbiAgfTtcbiAgbG9nLmVycm9yID0gKCkgPT4ge1xuICB9O1xuICBsb2cuZmF0YWwgPSAoKSA9PiB7XG4gIH07XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLmZhdGFsKSB7XG4gICAgbG9nLmZhdGFsID0gY29uc29sZS5lcnJvciA/IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLCBmb3JtYXQoXCJGQVRBTFwiKSwgXCJjb2xvcjogb3JhbmdlXCIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlLCBcIlxceDFCWzM1bVwiLCBmb3JtYXQoXCJGQVRBTFwiKSk7XG4gIH1cbiAgaWYgKG51bWVyaWNMZXZlbCA8PSBMRVZFTFMuZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IgPSBjb25zb2xlLmVycm9yID8gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsIGZvcm1hdChcIkVSUk9SXCIpLCBcImNvbG9yOiBvcmFuZ2VcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiXFx4MUJbMzFtXCIsIGZvcm1hdChcIkVSUk9SXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy53YXJuKSB7XG4gICAgbG9nLndhcm4gPSBjb25zb2xlLndhcm4gPyBjb25zb2xlLndhcm4uYmluZChjb25zb2xlLCBmb3JtYXQoXCJXQVJOXCIpLCBcImNvbG9yOiBvcmFuZ2VcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIGBcXHgxQlszM21gLCBmb3JtYXQoXCJXQVJOXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy5pbmZvKSB7XG4gICAgbG9nLmluZm8gPSBjb25zb2xlLmluZm8gPyBjb25zb2xlLmluZm8uYmluZChjb25zb2xlLCBmb3JtYXQoXCJJTkZPXCIpLCBcImNvbG9yOiBsaWdodGJsdWVcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiXFx4MUJbMzRtXCIsIGZvcm1hdChcIklORk9cIikpO1xuICB9XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLmRlYnVnKSB7XG4gICAgbG9nLmRlYnVnID0gY29uc29sZS5kZWJ1ZyA/IGNvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLCBmb3JtYXQoXCJERUJVR1wiKSwgXCJjb2xvcjogbGlnaHRncmVlblwiKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwgXCJcXHgxQlszMm1cIiwgZm9ybWF0KFwiREVCVUdcIikpO1xuICB9XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLnRyYWNlKSB7XG4gICAgbG9nLnRyYWNlID0gY29uc29sZS5kZWJ1ZyA/IGNvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLCBmb3JtYXQoXCJUUkFDRVwiKSwgXCJjb2xvcjogbGlnaHRncmVlblwiKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwgXCJcXHgxQlszMm1cIiwgZm9ybWF0KFwiVFJBQ0VcIikpO1xuICB9XG59LCBcInNldExvZ0xldmVsXCIpO1xudmFyIGZvcm1hdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGxldmVsKSA9PiB7XG4gIGNvbnN0IHRpbWUgPSBkYXlqcygpLmZvcm1hdChcInNzLlNTU1wiKTtcbiAgcmV0dXJuIGAlYyR7dGltZX0gOiAke2xldmVsfSA6IGA7XG59LCBcImZvcm1hdFwiKTtcblxuLy8gc3JjL2RpYWdyYW0tYXBpL3JlZ2V4ZXMudHNcbnZhciBmcm9udE1hdHRlclJlZ2V4ID0gL14tezN9XFxzKltcXG5cXHJdKC4qPylbXFxuXFxyXS17M31cXHMqW1xcblxccl0rL3M7XG52YXIgZGlyZWN0aXZlUmVnZXggPSAvJXsyfXtcXHMqKD86KFxcdyspXFxzKjp8KFxcdyspKVxccyooPzooXFx3Kyl8KCg/Oig/IX0lezJ9KS58XFxyP1xcbikqKSk/XFxzKig/On0lezJ9KT8vZ2k7XG52YXIgYW55Q29tbWVudFJlZ2V4ID0gL1xccyolJS4qXFxuL2dtO1xuXG4vLyBzcmMvZXJyb3JzLnRzXG52YXIgVW5rbm93bkRpYWdyYW1FcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlVua25vd25EaWFncmFtRXJyb3JcIik7XG4gIH1cbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93bkRpYWdyYW1FcnJvclwiO1xuICB9XG59O1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZGV0ZWN0VHlwZS50c1xudmFyIGRldGVjdG9ycyA9IHt9O1xudmFyIGRldGVjdFR5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGNvbmZpZzIpIHtcbiAgdGV4dCA9IHRleHQucmVwbGFjZShmcm9udE1hdHRlclJlZ2V4LCBcIlwiKS5yZXBsYWNlKGRpcmVjdGl2ZVJlZ2V4LCBcIlwiKS5yZXBsYWNlKGFueUNvbW1lbnRSZWdleCwgXCJcXG5cIik7XG4gIGZvciAoY29uc3QgW2tleSwgeyBkZXRlY3RvciB9XSBvZiBPYmplY3QuZW50cmllcyhkZXRlY3RvcnMpKSB7XG4gICAgY29uc3QgZGlhZ3JhbSA9IGRldGVjdG9yKHRleHQsIGNvbmZpZzIpO1xuICAgIGlmIChkaWFncmFtKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgVW5rbm93bkRpYWdyYW1FcnJvcihcbiAgICBgTm8gZGlhZ3JhbSB0eXBlIGRldGVjdGVkIG1hdGNoaW5nIGdpdmVuIGNvbmZpZ3VyYXRpb24gZm9yIHRleHQ6ICR7dGV4dH1gXG4gICk7XG59LCBcImRldGVjdFR5cGVcIik7XG52YXIgcmVnaXN0ZXJMYXp5TG9hZGVkRGlhZ3JhbXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5kaWFncmFtczIpID0+IHtcbiAgZm9yIChjb25zdCB7IGlkLCBkZXRlY3RvciwgbG9hZGVyIH0gb2YgZGlhZ3JhbXMyKSB7XG4gICAgYWRkRGV0ZWN0b3IoaWQsIGRldGVjdG9yLCBsb2FkZXIpO1xuICB9XG59LCBcInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zXCIpO1xudmFyIGFkZERldGVjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoa2V5LCBkZXRlY3RvciwgbG9hZGVyKSA9PiB7XG4gIGlmIChkZXRlY3RvcnNba2V5XSkge1xuICAgIGxvZy53YXJuKGBEZXRlY3RvciB3aXRoIGtleSAke2tleX0gYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0aW5nLmApO1xuICB9XG4gIGRldGVjdG9yc1trZXldID0geyBkZXRlY3RvciwgbG9hZGVyIH07XG4gIGxvZy5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtrZXl9IGFkZGVkJHtsb2FkZXIgPyBcIiB3aXRoIGxvYWRlclwiIDogXCJcIn1gKTtcbn0sIFwiYWRkRGV0ZWN0b3JcIik7XG52YXIgZ2V0RGlhZ3JhbUxvYWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGtleSkgPT4ge1xuICByZXR1cm4gZGV0ZWN0b3JzW2tleV0ubG9hZGVyO1xufSwgXCJnZXREaWFncmFtTG9hZGVyXCIpO1xuXG4vLyBzcmMvYXNzaWduV2l0aERlcHRoLnRzXG52YXIgYXNzaWduV2l0aERlcHRoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZHN0LCBzcmMsIHsgZGVwdGggPSAyLCBjbG9iYmVyID0gZmFsc2UgfSA9IHt9KSA9PiB7XG4gIGNvbnN0IGNvbmZpZzIgPSB7IGRlcHRoLCBjbG9iYmVyIH07XG4gIGlmIChBcnJheS5pc0FycmF5KHNyYykgJiYgIUFycmF5LmlzQXJyYXkoZHN0KSkge1xuICAgIHNyYy5mb3JFYWNoKChzKSA9PiBhc3NpZ25XaXRoRGVwdGgoZHN0LCBzLCBjb25maWcyKSk7XG4gICAgcmV0dXJuIGRzdDtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNyYykgJiYgQXJyYXkuaXNBcnJheShkc3QpKSB7XG4gICAgc3JjLmZvckVhY2goKHMpID0+IHtcbiAgICAgIGlmICghZHN0LmluY2x1ZGVzKHMpKSB7XG4gICAgICAgIGRzdC5wdXNoKHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkc3Q7XG4gIH1cbiAgaWYgKGRzdCA9PT0gdm9pZCAwIHx8IGRlcHRoIDw9IDApIHtcbiAgICBpZiAoZHN0ICE9PSB2b2lkIDAgJiYgZHN0ICE9PSBudWxsICYmIHR5cGVvZiBkc3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHNyYyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZHN0LCBzcmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3JjO1xuICAgIH1cbiAgfVxuICBpZiAoc3JjICE9PSB2b2lkIDAgJiYgdHlwZW9mIGRzdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygc3JjID09PSBcIm9iamVjdFwiKSB7XG4gICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygc3JjW2tleV0gPT09IFwib2JqZWN0XCIgJiYgKGRzdFtrZXldID09PSB2b2lkIDAgfHwgdHlwZW9mIGRzdFtrZXldID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICBpZiAoZHN0W2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgICAgIGRzdFtrZXldID0gQXJyYXkuaXNBcnJheShzcmNba2V5XSkgPyBbXSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGRzdFtrZXldID0gYXNzaWduV2l0aERlcHRoKGRzdFtrZXldLCBzcmNba2V5XSwgeyBkZXB0aDogZGVwdGggLSAxLCBjbG9iYmVyIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbG9iYmVyIHx8IHR5cGVvZiBkc3Rba2V5XSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygc3JjW2tleV0gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZHN0O1xufSwgXCJhc3NpZ25XaXRoRGVwdGhcIik7XG52YXIgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQgPSBhc3NpZ25XaXRoRGVwdGg7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtYmFzZS5qc1xuaW1wb3J0IHsgYWRqdXN0IGFzIGFkanVzdDIsIGRhcmtlbiwgaW52ZXJ0LCBpc0RhcmssIGxpZ2h0ZW4gfSBmcm9tIFwia2hyb21hXCI7XG5cbi8vIHNyYy90aGVtZXMvZXJEaWFncmFtLW9sZEhhcmRjb2RlZFZhbHVlcy50c1xudmFyIG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IFwiI2ZmZmZmZlwiO1xudmFyIG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSBcIiNmMmYyZjJcIjtcblxuLy8gc3JjL3RoZW1lcy90aGVtZS1oZWxwZXJzLmpzXG5pbXBvcnQgeyBhZGp1c3QgfSBmcm9tIFwia2hyb21hXCI7XG52YXIgbWtCb3JkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb2wsIGRhcmtNb2RlKSA9PiBkYXJrTW9kZSA/IGFkanVzdChjb2wsIHsgczogLTQwLCBsOiAxMCB9KSA6IGFkanVzdChjb2wsIHsgczogLTQwLCBsOiAtMTAgfSksIFwibWtCb3JkZXJcIik7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtYmFzZS5qc1xudmFyIFRoZW1lID0gY2xhc3Mge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlRoZW1lXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYmFja2dyb3VuZCA9IFwiI2Y0ZjRmNFwiO1xuICAgIHRoaXMucHJpbWFyeUNvbG9yID0gXCIjZmZmNGRkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcIiMzMzNcIjtcbiAgICB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUID0gMTI7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gJ1widHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJztcbiAgICB0aGlzLmZvbnRTaXplID0gXCIxNnB4XCI7XG4gIH1cbiAgdXBkYXRlQ29sb3JzKCkge1xuICAgIHRoaXMucHJpbWFyeVRleHRDb2xvciA9IHRoaXMucHJpbWFyeVRleHRDb2xvciB8fCAodGhpcy5kYXJrTW9kZSA/IFwiI2VlZVwiIDogXCIjMzMzXCIpO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSB0aGlzLnNlY29uZGFyeUNvbG9yIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTEyMCB9KTtcbiAgICB0aGlzLnRlcnRpYXJ5Q29sb3IgPSB0aGlzLnRlcnRpYXJ5Q29sb3IgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxODAsIGw6IDUgfSk7XG4gICAgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciB8fCBta0JvcmRlcih0aGlzLnByaW1hcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvciA9IHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgfHwgbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yIHx8IG1rQm9yZGVyKHRoaXMudGVydGlhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSB0aGlzLm5vdGVCb3JkZXJDb2xvciB8fCBta0JvcmRlcih0aGlzLm5vdGVCa2dDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSB0aGlzLm5vdGVCa2dDb2xvciB8fCBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLm5vdGVUZXh0Q29sb3IgfHwgXCIjMzMzXCI7XG4gICAgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IgPSB0aGlzLnNlY29uZGFyeVRleHRDb2xvciB8fCBpbnZlcnQodGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IHRoaXMudGVydGlhcnlUZXh0Q29sb3IgfHwgaW52ZXJ0KHRoaXMudGVydGlhcnlDb2xvcik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvciB8fCBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLmFycm93aGVhZENvbG9yID0gdGhpcy5hcnJvd2hlYWRDb2xvciB8fCBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IHRoaXMudGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmJvcmRlcjIgPSB0aGlzLmJvcmRlcjIgfHwgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMubm9kZUJrZyA9IHRoaXMubm9kZUJrZyB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLm1haW5Ca2cgPSB0aGlzLm1haW5Ca2cgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ub2RlQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuY2x1c3RlckJrZyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gdGhpcy5jbHVzdGVyQm9yZGVyIHx8IHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50aXRsZUNvbG9yID0gdGhpcy50aXRsZUNvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kIHx8ICh0aGlzLmRhcmtNb2RlID8gZGFya2VuKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDMwKSA6IHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMubm9kZVRleHRDb2xvciA9IHRoaXMubm9kZVRleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IHRoaXMuYWN0b3JCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMuYWN0b3JCa2cgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5hY3RvckxpbmVDb2xvciB8fCB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMubGFiZWxCb3hCa2dDb2xvciA9IHRoaXMubGFiZWxCb3hCa2dDb2xvciB8fCB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLnNpZ25hbENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gdGhpcy5zaWduYWxUZXh0Q29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yIHx8IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMubGFiZWxUZXh0Q29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSB0aGlzLmxvb3BUZXh0Q29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yIHx8IGRhcmtlbih0aGlzLnNlY29uZGFyeUNvbG9yLCAxMCk7XG4gICAgdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgPSB0aGlzLmFjdGl2YXRpb25Ca2dDb2xvciB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvciA9IHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvciB8fCBpbnZlcnQodGhpcy5saW5lQ29sb3IpO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5zZWN0aW9uQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgfHwgXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5zZWN0aW9uQmtnQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSB0aGlzLmV4Y2x1ZGVCa2dDb2xvciB8fCBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHRoaXMudGFza0JvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gdGhpcy50YXNrQmtnQ29sb3IgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yIHx8IGxpZ2h0ZW4odGhpcy5wcmltYXJ5Q29sb3IsIDIzKTtcbiAgICB0aGlzLmdyaWRDb2xvciA9IHRoaXMuZ3JpZENvbG9yIHx8IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gdGhpcy5kb25lVGFza0JrZ0NvbG9yIHx8IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gdGhpcy5kb25lVGFza0JvcmRlckNvbG9yIHx8IFwiZ3JleVwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gdGhpcy5jcml0Qm9yZGVyQ29sb3IgfHwgXCIjZmY4ODg4XCI7XG4gICAgdGhpcy5jcml0QmtnQ29sb3IgPSB0aGlzLmNyaXRCa2dDb2xvciB8fCBcInJlZFwiO1xuICAgIHRoaXMudG9kYXlMaW5lQ29sb3IgPSB0aGlzLnRvZGF5TGluZUNvbG9yIHx8IFwicmVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy50YXNrVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy50YXNrVGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0RGFya0NvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgfHwgXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5wZXJzb25Cb3JkZXIgPSB0aGlzLnBlcnNvbkJvcmRlciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnBlcnNvbkJrZyA9IHRoaXMucGVyc29uQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLnRyYW5zaXRpb25Db2xvciA9IHRoaXMudHJhbnNpdGlvbkNvbG9yIHx8IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVMYWJlbENvbG9yID0gdGhpcy5zdGF0ZUxhYmVsQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUJrZyA9IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yIHx8IHRoaXMuc3RhdGVCa2c7XG4gICAgdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kID0gdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kIHx8IHRoaXMuYmFja2dyb3VuZCB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5hbHRCYWNrZ3JvdW5kID0gdGhpcy5hbHRCYWNrZ3JvdW5kIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSB0aGlzLmVycm9yQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSB0aGlzLmVycm9yVGV4dENvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAgfSk7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAgfSk7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIHRoaXMuY1NjYWxlNyA9IHRoaXMuY1NjYWxlNyB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDE1MCB9KTtcbiAgICB0aGlzLmNTY2FsZTggPSB0aGlzLmNTY2FsZTggfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAsIGw6IDE1MCB9KTtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMDAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMzAgfSk7XG4gICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVcIiArIGldID0gZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCA3NSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVcIiArIGldID0gZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCAyNSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGludmVydCh0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tcImNTY2FsZVBlZXJcIiArIGldID0gdGhpc1tcImNTY2FsZVBlZXJcIiArIGldIHx8IGRhcmtlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMTApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNjYWxlTGFiZWxDb2xvciA9IHRoaXMuc2NhbGVMYWJlbENvbG9yIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gPSB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldIHx8IHRoaXMuc2NhbGVMYWJlbENvbG9yO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aXBsaWVyID0gdGhpcy5kYXJrTW9kZSA/IC00IDogLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3QyKHRoaXMubWFpbkJrZywgeyBoOiAxODAsIHM6IC0xNSwgbDogbXVsdGlwbGllciAqICg1ICsgaSAqIDMpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0Mih0aGlzLm1haW5Ca2csIHsgaDogMTgwLCBzOiAtMTUsIGw6IG11bHRpcGxpZXIgKiAoOCArIGkgKiAzKSB9KTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLmNsYXNzVGV4dCB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMCA9IHRoaXMuZmlsbFR5cGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUxID0gdGhpcy5maWxsVHlwZTEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMiA9IHRoaXMuZmlsbFR5cGUyIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTMgPSB0aGlzLmZpbGxUeXBlMyB8fCBhZGp1c3QyKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTQgPSB0aGlzLmZpbGxUeXBlNCB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNSA9IHRoaXMuZmlsbFR5cGU1IHx8IGFkanVzdDIodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTYgPSB0aGlzLmZpbGxUeXBlNiB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNyA9IHRoaXMuZmlsbFR5cGU3IHx8IGFkanVzdDIodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5waWUxID0gdGhpcy5waWUxIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucGllMiA9IHRoaXMucGllMiB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMucGllMyA9IHRoaXMucGllMyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5waWU0ID0gdGhpcy5waWU0IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgbDogLTEwIH0pO1xuICAgIHRoaXMucGllNSA9IHRoaXMucGllNSB8fCBhZGp1c3QyKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgbDogLTEwIH0pO1xuICAgIHRoaXMucGllNiA9IHRoaXMucGllNiB8fCBhZGp1c3QyKHRoaXMudGVydGlhcnlDb2xvciwgeyBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU3ID0gdGhpcy5waWU3IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTggPSB0aGlzLnBpZTggfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTkgPSB0aGlzLnBpZTkgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IDAgfSk7XG4gICAgdGhpcy5waWUxMCA9IHRoaXMucGllMTAgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCwgbDogLTIwIH0pO1xuICAgIHRoaXMucGllMTEgPSB0aGlzLnBpZTExIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtMjAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLmFyY2hFZGdlQ29sb3IgPSB0aGlzLmFyY2hFZGdlQ29sb3IgfHwgXCIjNzc3XCI7XG4gICAgdGhpcy5hcmNoRWRnZUFycm93Q29sb3IgPSB0aGlzLmFyY2hFZGdlQXJyb3dDb2xvciB8fCBcIiM3NzdcIjtcbiAgICB0aGlzLmFyY2hFZGdlV2lkdGggPSB0aGlzLmFyY2hFZGdlV2lkdGggfHwgXCIzXCI7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvciA9IHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3IgfHwgXCIjMDAwXCI7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aCA9IHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogNSwgZzogNSwgYjogNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M0ZpbGwgPSB0aGlzLnF1YWRyYW50M0ZpbGwgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC01LCBnOiAtNSwgYjogLTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyayh0aGlzLnF1YWRyYW50MUZpbGwpID8gbGlnaHRlbih0aGlzLnF1YWRyYW50MUZpbGwpIDogZGFya2VuKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMFwiXG4gICAgfTtcbiAgICB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCA9IHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplIHx8IFwiMVwiO1xuICAgIHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgPSB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uQ29sb3IgPSB0aGlzLnJlbGF0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCA9IHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgfHwgKHRoaXMuZGFya01vZGUgPyBkYXJrZW4odGhpcy5zZWNvbmRhcnlDb2xvciwgMzApIDogdGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IHRoaXMuZ2l0MCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmdpdDEgPSB0aGlzLmdpdDEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDIgPSB0aGlzLmdpdDIgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MyA9IHRoaXMuZ2l0MyB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0zMCB9KTtcbiAgICB0aGlzLmdpdDQgPSB0aGlzLmdpdDQgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSk7XG4gICAgdGhpcy5naXQ1ID0gdGhpcy5naXQ1IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwIH0pO1xuICAgIHRoaXMuZ2l0NiA9IHRoaXMuZ2l0NiB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuZ2l0NyA9IHRoaXMuZ2l0NyB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KTtcbiAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgdGhpcy5naXQwID0gbGlnaHRlbih0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGxpZ2h0ZW4odGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBsaWdodGVuKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gbGlnaHRlbih0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGxpZ2h0ZW4odGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBsaWdodGVuKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gbGlnaHRlbih0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGxpZ2h0ZW4odGhpcy5naXQ3LCAyNSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGRhcmtlbih0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGRhcmtlbih0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGRhcmtlbih0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGRhcmtlbih0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGRhcmtlbih0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGRhcmtlbih0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGRhcmtlbih0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGRhcmtlbih0aGlzLmdpdDcsIDI1KTtcbiAgICB9XG4gICAgdGhpcy5naXRJbnYwID0gdGhpcy5naXRJbnYwIHx8IGludmVydCh0aGlzLmdpdDApO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQodGhpcy5naXQxKTtcbiAgICB0aGlzLmdpdEludjIgPSB0aGlzLmdpdEludjIgfHwgaW52ZXJ0KHRoaXMuZ2l0Mik7XG4gICAgdGhpcy5naXRJbnYzID0gdGhpcy5naXRJbnYzIHx8IGludmVydCh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQodGhpcy5naXQ0KTtcbiAgICB0aGlzLmdpdEludjUgPSB0aGlzLmdpdEludjUgfHwgaW52ZXJ0KHRoaXMuZ2l0NSk7XG4gICAgdGhpcy5naXRJbnY2ID0gdGhpcy5naXRJbnY2IHx8IGludmVydCh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQodGhpcy5naXQ3KTtcbiAgICB0aGlzLmJyYW5jaExhYmVsQ29sb3IgPSB0aGlzLmJyYW5jaExhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwwIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwxIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMyA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwzIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw0IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw2IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNyA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw3IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBnZXRUaGVtZVZhcmlhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVzZXJPdmVycmlkZXMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSBuZXcgVGhlbWUoKTtcbiAgdGhlbWUuY2FsY3VsYXRlKHVzZXJPdmVycmlkZXMpO1xuICByZXR1cm4gdGhlbWU7XG59LCBcImdldFRoZW1lVmFyaWFibGVzXCIpO1xuXG4vLyBzcmMvdGhlbWVzL3RoZW1lLWRhcmsuanNcbmltcG9ydCB7IGFkanVzdCBhcyBhZGp1c3QzLCBkYXJrZW4gYXMgZGFya2VuMiwgaW52ZXJ0IGFzIGludmVydDIsIGlzRGFyayBhcyBpc0RhcmsyLCBsaWdodGVuIGFzIGxpZ2h0ZW4yLCByZ2JhIH0gZnJvbSBcImtocm9tYVwiO1xudmFyIFRoZW1lMiA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJUaGVtZVwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIiMzMzNcIjtcbiAgICB0aGlzLnByaW1hcnlDb2xvciA9IFwiIzFmMjAyMFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBsaWdodGVuMih0aGlzLnByaW1hcnlDb2xvciwgMTYpO1xuICAgIHRoaXMudGVydGlhcnlDb2xvciA9IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTE2MCB9KTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IGludmVydDIodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQyKHRoaXMucHJpbWFyeUNvbG9yKTtcbiAgICB0aGlzLnNlY29uZGFyeVRleHRDb2xvciA9IGludmVydDIodGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IGludmVydDIodGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydDIodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IGludmVydDIodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLm1haW5Ca2cgPSBcIiMxZjIwMjBcIjtcbiAgICB0aGlzLnNlY29uZEJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubWFpbkNvbnRyYXN0Q29sb3IgPSBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZGFya1RleHRDb2xvciA9IGxpZ2h0ZW4yKGludmVydDIoXCIjMzIzRDQ3XCIpLCAxMCk7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmJvcmRlcjEgPSBcIiNjY2NcIjtcbiAgICB0aGlzLmJvcmRlcjIgPSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xuICAgIHRoaXMuYXJyb3doZWFkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZCA9IFwiIzE4MTgxOFwiO1xuICAgIHRoaXMudGV4dENvbG9yID0gXCIjY2NjXCI7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiI0Y5RkZGRVwiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNpZ25hbENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVCa2dDb2xvciA9IFwiI2ZmZjVhZFwiO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IgPSBkYXJrZW4yKFwiI0VBRThEOVwiLCAzMCk7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSBcIiNFQUU4RDlcIjtcbiAgICB0aGlzLmV4Y2x1ZGVCa2dDb2xvciA9IGRhcmtlbjIodGhpcy5zZWN0aW9uQmtnQ29sb3IsIDEwKTtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHJnYmEoMjU1LCAyNTUsIDI1NSwgNzApO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSByZ2JhKDI1NSwgMjU1LCAyNTUsIDUwKTtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IFwiIzgxQjFEQlwiO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gXCJncmV5XCI7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBcIiNFODM3MzdcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiI0U4MzczN1wiO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gXCIjREI1NzU3XCI7XG4gICAgdGhpcy5wZXJzb25Cb3JkZXIgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnBlcnNvbkJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmFyY2hFZGdlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFyY2hFZGdlQXJyb3dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYXJjaEVkZ2VXaWR0aCA9IFwiM1wiO1xuICAgIHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3IgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoID0gXCIycHhcIjtcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSBcIiNhNDQxNDFcIjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gXCIjZGRkXCI7XG4gIH1cbiAgdXBkYXRlQ29sb3JzKCkge1xuICAgIHRoaXMuc2Vjb25kQmtnID0gbGlnaHRlbjIodGhpcy5tYWluQmtnLCAxNik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuYXJyb3doZWFkQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMubm9kZUJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLm5vZGVCb3JkZXIgPSB0aGlzLmJvcmRlcjE7XG4gICAgdGhpcy5jbHVzdGVyQmtnID0gdGhpcy5zZWNvbmRCa2c7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gdGhpcy5ib3JkZXIyO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IGxpZ2h0ZW4yKHRoaXMubGFiZWxCYWNrZ3JvdW5kLCAyNSk7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLmFjdG9yQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLm5vdGVCb3JkZXJDb2xvciA9IHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSB0aGlzLnNlY29uZEJrZztcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLmFjdGl2YXRpb25Ca2dDb2xvciA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5iYWNrZ3JvdW5kO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gbGlnaHRlbjIodGhpcy5tYWluQmtnLCAyMyk7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy5kYXJrVGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IHRoaXMuZGFya1RleHRDb2xvcjtcbiAgICB0aGlzLmFyY2hFZGdlQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmFyY2hFZGdlQXJyb3dDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciA9IHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUxhYmVsQ29sb3IgPSB0aGlzLnN0YXRlTGFiZWxDb2xvciB8fCB0aGlzLnN0YXRlQmtnIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlQmtnID0gdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciA9IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgfHwgdGhpcy5iYWNrZ3JvdW5kIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmFsdEJhY2tncm91bmQgPSB0aGlzLmFsdEJhY2tncm91bmQgfHwgXCIjNTU1XCI7XG4gICAgdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5jb21wb3NpdGVCb3JkZXIgPSB0aGlzLmNvbXBvc2l0ZUJvcmRlciB8fCB0aGlzLm5vZGVCb3JkZXI7XG4gICAgdGhpcy5pbm5lckVuZEJhY2tncm91bmQgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUwID0gdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTEgPSB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUyID0gYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlMyA9IGFkanVzdDModGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNCA9IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU1ID0gYWRqdXN0Myh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNiA9IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU3ID0gYWRqdXN0Myh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmNTY2FsZTEgPSB0aGlzLmNTY2FsZTEgfHwgXCIjMGIwMDAwXCI7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IFwiIzRkMTAzN1wiO1xuICAgIHRoaXMuY1NjYWxlMyA9IHRoaXMuY1NjYWxlMyB8fCBcIiMzZjUyNThcIjtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgXCIjNGYyZjFiXCI7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IFwiIzZlMGEwYVwiO1xuICAgIHRoaXMuY1NjYWxlNiA9IHRoaXMuY1NjYWxlNiB8fCBcIiMzYjAwNDhcIjtcbiAgICB0aGlzLmNTY2FsZTcgPSB0aGlzLmNTY2FsZTcgfHwgXCIjOTk1YTAxXCI7XG4gICAgdGhpcy5jU2NhbGU4ID0gdGhpcy5jU2NhbGU4IHx8IFwiIzE1NDcwNlwiO1xuICAgIHRoaXMuY1NjYWxlOSA9IHRoaXMuY1NjYWxlOSB8fCBcIiMxNjE3MjJcIjtcbiAgICB0aGlzLmNTY2FsZTEwID0gdGhpcy5jU2NhbGUxMCB8fCBcIiMwMDI5NmZcIjtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBcIiMwMTYyOWNcIjtcbiAgICB0aGlzLmNTY2FsZTEyID0gdGhpcy5jU2NhbGUxMiB8fCBcIiMwMTAwMjlcIjtcbiAgICB0aGlzLmNTY2FsZTAgPSB0aGlzLmNTY2FsZTAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmNTY2FsZTUgPSB0aGlzLmNTY2FsZTUgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA5MCB9KTtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTUwIH0pO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDIxMCB9KTtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMDAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMzAgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVJbnZcIiArIGldID0gdGhpc1tcImNTY2FsZUludlwiICsgaV0gfHwgaW52ZXJ0Mih0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbjIodGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3QzKHRoaXMubWFpbkJrZywgeyBoOiAzMCwgczogLTMwLCBsOiAtKC0xMCArIGkgKiA0KSB9KTtcbiAgICAgIHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVBlZXJcIiArIGldIHx8IGFkanVzdDModGhpcy5tYWluQmtnLCB7IGg6IDMwLCBzOiAtMzAsIGw6IC0oLTcgKyBpICogNCkgfSk7XG4gICAgfVxuICAgIHRoaXMuc2NhbGVMYWJlbENvbG9yID0gdGhpcy5zY2FsZUxhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wicGllXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVcIiArIGldO1xuICAgIH1cbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogNSwgZzogNSwgYjogNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M0ZpbGwgPSB0aGlzLnF1YWRyYW50M0ZpbGwgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdDModGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC01LCBnOiAtNSwgYjogLTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyazIodGhpcy5xdWFkcmFudDFGaWxsKSA/IGxpZ2h0ZW4yKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4yKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiIzM0OThkYiwjMmVjYzcxLCNlNzRjM2MsI2YxYzQwZiwjYmRjM2M3LCNmZmZmZmYsIzM0NDk1ZSwjOWI1OWI2LCMxYWJjOWMsI2U2N2UyMlwiXG4gICAgfTtcbiAgICB0aGlzLnBhY2tldCA9IHtcbiAgICAgIHN0YXJ0Qnl0ZUNvbG9yOiB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICBlbmRCeXRlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGxhYmVsQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrU3Ryb2tlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrRmlsbENvbG9yOiB0aGlzLmJhY2tncm91bmRcbiAgICB9O1xuICAgIHRoaXMuY2xhc3NUZXh0ID0gdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kID0gdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgfHwgXCIxXCI7XG4gICAgdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVsYXRpb25Db2xvciA9IHRoaXMucmVsYXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCB8fCAodGhpcy5kYXJrTW9kZSA/IGRhcmtlbjIodGhpcy5zZWNvbmRhcnlDb2xvciwgMzApIDogdGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IGxpZ2h0ZW4yKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDIwKTtcbiAgICB0aGlzLmdpdDEgPSBsaWdodGVuMih0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvciwgMjApO1xuICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4yKHRoaXMucGllMyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3IsIDIwKTtcbiAgICB0aGlzLmdpdDMgPSBsaWdodGVuMih0aGlzLnBpZTQgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSksIDIwKTtcbiAgICB0aGlzLmdpdDQgPSBsaWdodGVuMih0aGlzLnBpZTUgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSksIDIwKTtcbiAgICB0aGlzLmdpdDUgPSBsaWdodGVuMih0aGlzLnBpZTYgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtOTAgfSksIDEwKTtcbiAgICB0aGlzLmdpdDYgPSBsaWdodGVuMih0aGlzLnBpZTcgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KSwgMTApO1xuICAgIHRoaXMuZ2l0NyA9IGxpZ2h0ZW4yKHRoaXMucGllOCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KSwgMjApO1xuICAgIHRoaXMuZ2l0SW52MCA9IHRoaXMuZ2l0SW52MCB8fCBpbnZlcnQyKHRoaXMuZ2l0MCk7XG4gICAgdGhpcy5naXRJbnYxID0gdGhpcy5naXRJbnYxIHx8IGludmVydDIodGhpcy5naXQxKTtcbiAgICB0aGlzLmdpdEludjIgPSB0aGlzLmdpdEludjIgfHwgaW52ZXJ0Mih0aGlzLmdpdDIpO1xuICAgIHRoaXMuZ2l0SW52MyA9IHRoaXMuZ2l0SW52MyB8fCBpbnZlcnQyKHRoaXMuZ2l0Myk7XG4gICAgdGhpcy5naXRJbnY0ID0gdGhpcy5naXRJbnY0IHx8IGludmVydDIodGhpcy5naXQ0KTtcbiAgICB0aGlzLmdpdEludjUgPSB0aGlzLmdpdEludjUgfHwgaW52ZXJ0Mih0aGlzLmdpdDUpO1xuICAgIHRoaXMuZ2l0SW52NiA9IHRoaXMuZ2l0SW52NiB8fCBpbnZlcnQyKHRoaXMuZ2l0Nik7XG4gICAgdGhpcy5naXRJbnY3ID0gdGhpcy5naXRJbnY3IHx8IGludmVydDIodGhpcy5naXQ3KTtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwwIHx8IGludmVydDIodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDEgPSB0aGlzLmdpdEJyYW5jaExhYmVsMSB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwyID0gdGhpcy5naXRCcmFuY2hMYWJlbDIgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMyA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwzIHx8IGludmVydDIodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDQgPSB0aGlzLmdpdEJyYW5jaExhYmVsNCB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5naXRCcmFuY2hMYWJlbDUgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw2IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDcgPSB0aGlzLmdpdEJyYW5jaExhYmVsNyB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgbGlnaHRlbjIodGhpcy5iYWNrZ3JvdW5kLCAxMik7XG4gICAgdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuIHx8IGxpZ2h0ZW4yKHRoaXMuYmFja2dyb3VuZCwgMik7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ub2RlQm9yZGVyIHx8IFwiIzk5OVwiO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xudmFyIGdldFRoZW1lVmFyaWFibGVzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVzZXJPdmVycmlkZXMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSBuZXcgVGhlbWUyKCk7XG4gIHRoZW1lLmNhbGN1bGF0ZSh1c2VyT3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHRoZW1lO1xufSwgXCJnZXRUaGVtZVZhcmlhYmxlc1wiKTtcblxuLy8gc3JjL3RoZW1lcy90aGVtZS1kZWZhdWx0LmpzXG5pbXBvcnQgeyBpbnZlcnQgYXMgaW52ZXJ0MywgbGlnaHRlbiBhcyBsaWdodGVuMywgcmdiYSBhcyByZ2JhMiwgYWRqdXN0IGFzIGFkanVzdDQsIGRhcmtlbiBhcyBkYXJrZW4zLCBpc0RhcmsgYXMgaXNEYXJrMyB9IGZyb20gXCJraHJvbWFcIjtcbnZhciBUaGVtZTMgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiVGhlbWVcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5wcmltYXJ5Q29sb3IgPSBcIiNFQ0VDRkZcIjtcbiAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IFwiI2ZmZmZkZVwiO1xuICAgIHRoaXMudGVydGlhcnlDb2xvciA9IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTE2MCB9KTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IG1rQm9yZGVyKHRoaXMucHJpbWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQzKHRoaXMucHJpbWFyeUNvbG9yKTtcbiAgICB0aGlzLnNlY29uZGFyeVRleHRDb2xvciA9IGludmVydDModGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IGludmVydDModGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydDModGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IGludmVydDModGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5tYWluQmtnID0gXCIjRUNFQ0ZGXCI7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBcIiNmZmZmZGVcIjtcbiAgICB0aGlzLmxpbmVDb2xvciA9IFwiIzMzMzMzM1wiO1xuICAgIHRoaXMuYm9yZGVyMSA9IFwiIzkzNzBEQlwiO1xuICAgIHRoaXMuYm9yZGVyMiA9IFwiI2FhYWEzM1wiO1xuICAgIHRoaXMuYXJyb3doZWFkQ29sb3IgPSBcIiMzMzMzMzNcIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZCA9IFwicmdiYSgyMzIsMjMyLDIzMiwgMC44KVwiO1xuICAgIHRoaXMudGV4dENvbG9yID0gXCIjMzMzXCI7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmV4Y2x1ZGVCa2dDb2xvciA9IFwiI2VlZWVlZVwiO1xuICAgIHRoaXMudGFza0JvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNyaXRCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY3JpdEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gcmdiYTIoMTAyLCAxMDIsIDI1NSwgMC40OSk7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCIjZmZmNDAwXCI7XG4gICAgdGhpcy50YXNrQm9yZGVyQ29sb3IgPSBcIiM1MzRmYmNcIjtcbiAgICB0aGlzLnRhc2tCa2dDb2xvciA9IFwiIzhhOTBkZFwiO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvciA9IFwiIzAwMzE2M1wiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yID0gXCIjNTM0ZmJjXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3IgPSBcIiNiZmM3ZmZcIjtcbiAgICB0aGlzLmdyaWRDb2xvciA9IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJsaWdodGdyZXlcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImdyZXlcIjtcbiAgICB0aGlzLmNyaXRCb3JkZXJDb2xvciA9IFwiI2ZmODg4OFwiO1xuICAgIHRoaXMuY3JpdEJrZ0NvbG9yID0gXCJyZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gXCJyZWRcIjtcbiAgICB0aGlzLnBlcnNvbkJvcmRlciA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucGVyc29uQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hcmNoRWRnZVdpZHRoID0gXCIzXCI7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvciA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGggPSBcIjJweFwiO1xuICAgIHRoaXMubGFiZWxDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gXCIjNTUyMjIyXCI7XG4gICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAgfSk7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAgfSk7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIHRoaXMuY1NjYWxlNyA9IHRoaXMuY1NjYWxlNyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDE1MCB9KTtcbiAgICB0aGlzLmNTY2FsZTggPSB0aGlzLmNTY2FsZTggfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAgfSk7XG4gICAgdGhpcy5jU2NhbGU5ID0gdGhpcy5jU2NhbGU5IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMjcwIH0pO1xuICAgIHRoaXMuY1NjYWxlMTAgPSB0aGlzLmNTY2FsZTEwIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAwIH0pO1xuICAgIHRoaXMuY1NjYWxlMTEgPSB0aGlzLmNTY2FsZTExIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzMwIH0pO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMVwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMVwiXSB8fCBkYXJrZW4zKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDQ1KTtcbiAgICB0aGlzW1wiY1NjYWxlUGVlcjJcIl0gPSB0aGlzW1wiY1NjYWxlUGVlcjJcIl0gfHwgZGFya2VuMyh0aGlzLnRlcnRpYXJ5Q29sb3IsIDQwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZVwiICsgaV0gPSBkYXJrZW4zKHRoaXNbXCJjU2NhbGVcIiArIGldLCAxMCk7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgZGFya2VuMyh0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMjUpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUludlwiICsgaV0gPSB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSB8fCBhZGp1c3Q0KHRoaXNbXCJjU2NhbGVcIiArIGldLCB7IGg6IDE4MCB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3Q0KHRoaXMubWFpbkJrZywgeyBoOiAzMCwgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0NCh0aGlzLm1haW5Ca2csIHsgaDogMzAsIGw6IC0oNyArIGkgKiA1KSB9KTtcbiAgICB9XG4gICAgdGhpcy5zY2FsZUxhYmVsQ29sb3IgPSB0aGlzLnNjYWxlTGFiZWxDb2xvciAhPT0gXCJjYWxjdWxhdGVkXCIgJiYgdGhpcy5zY2FsZUxhYmVsQ29sb3IgPyB0aGlzLnNjYWxlTGFiZWxDb2xvciA6IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgaWYgKHRoaXMubGFiZWxUZXh0Q29sb3IgIT09IFwiY2FsY3VsYXRlZFwiKSB7XG4gICAgICB0aGlzLmNTY2FsZUxhYmVsMCA9IHRoaXMuY1NjYWxlTGFiZWwwIHx8IGludmVydDModGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgICB0aGlzLmNTY2FsZUxhYmVsMyA9IHRoaXMuY1NjYWxlTGFiZWwzIHx8IGludmVydDModGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgICB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldID0gdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQgPSB0aGlzLmxhYmVsQmFja2dyb3VuZDtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gbGlnaHRlbjModGhpcy5ib3JkZXIxLCAyMyk7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLm5vdGVCb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmMGYwZjBcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTAgPSB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMSA9IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTIgPSBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGUzID0gYWRqdXN0NCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU0ID0gYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTUgPSBhZGp1c3Q0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU2ID0gYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5maWxsVHlwZTcgPSBhZGp1c3Q0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMucGllMSA9IHRoaXMucGllMSB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnBpZTIgPSB0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnBpZTMgPSB0aGlzLnBpZTMgfHwgYWRqdXN0NCh0aGlzLnRlcnRpYXJ5Q29sb3IsIHsgbDogLTQwIH0pO1xuICAgIHRoaXMucGllNCA9IHRoaXMucGllNCB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTUgPSB0aGlzLnBpZTUgfHwgYWRqdXN0NCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGw6IC0zMCB9KTtcbiAgICB0aGlzLnBpZTYgPSB0aGlzLnBpZTYgfHwgYWRqdXN0NCh0aGlzLnRlcnRpYXJ5Q29sb3IsIHsgbDogLTIwIH0pO1xuICAgIHRoaXMucGllNyA9IHRoaXMucGllNyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwLCBsOiAtMjAgfSk7XG4gICAgdGhpcy5waWU4ID0gdGhpcy5waWU4IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWU5ID0gdGhpcy5waWU5IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWUxMCA9IHRoaXMucGllMTAgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCwgbDogLTQwIH0pO1xuICAgIHRoaXMucGllMTEgPSB0aGlzLnBpZTExIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IC0zMCB9KTtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogNSwgZzogNSwgYjogNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M0ZpbGwgPSB0aGlzLnF1YWRyYW50M0ZpbGwgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC01LCBnOiAtNSwgYjogLTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyazModGhpcy5xdWFkcmFudDFGaWxsKSA/IGxpZ2h0ZW4zKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4zKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiI0VDRUNGRiwjODQ5M0E2LCNGRkMzQTAsI0RDRERFMSwjQjhFOTk0LCNEMUEzNkYsI0MzQ0RFNiwjRkZCNkMxLCM0OTYwNzgsI0Y4RjNFM1wiXG4gICAgfTtcbiAgICB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCA9IHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplIHx8IFwiMVwiO1xuICAgIHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgPSB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uQ29sb3IgPSB0aGlzLnJlbGF0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCA9IHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgfHwgdGhpcy5sYWJlbEJhY2tncm91bmQ7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IHRoaXMuZ2l0MCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmdpdDEgPSB0aGlzLmdpdDEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDIgPSB0aGlzLmdpdDIgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MyA9IHRoaXMuZ2l0MyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0zMCB9KTtcbiAgICB0aGlzLmdpdDQgPSB0aGlzLmdpdDQgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSk7XG4gICAgdGhpcy5naXQ1ID0gdGhpcy5naXQ1IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwIH0pO1xuICAgIHRoaXMuZ2l0NiA9IHRoaXMuZ2l0NiB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuZ2l0NyA9IHRoaXMuZ2l0NyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KTtcbiAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgdGhpcy5naXQwID0gbGlnaHRlbjModGhpcy5naXQwLCAyNSk7XG4gICAgICB0aGlzLmdpdDEgPSBsaWdodGVuMyh0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4zKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gbGlnaHRlbjModGhpcy5naXQzLCAyNSk7XG4gICAgICB0aGlzLmdpdDQgPSBsaWdodGVuMyh0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGxpZ2h0ZW4zKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gbGlnaHRlbjModGhpcy5naXQ2LCAyNSk7XG4gICAgICB0aGlzLmdpdDcgPSBsaWdodGVuMyh0aGlzLmdpdDcsIDI1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5naXQwID0gZGFya2VuMyh0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGRhcmtlbjModGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBkYXJrZW4zKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gZGFya2VuMyh0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGRhcmtlbjModGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBkYXJrZW4zKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gZGFya2VuMyh0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGRhcmtlbjModGhpcy5naXQ3LCAyNSk7XG4gICAgfVxuICAgIHRoaXMuZ2l0SW52MCA9IHRoaXMuZ2l0SW52MCB8fCBkYXJrZW4zKGludmVydDModGhpcy5naXQwKSwgMjUpO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQzKHRoaXMuZ2l0MSk7XG4gICAgdGhpcy5naXRJbnYyID0gdGhpcy5naXRJbnYyIHx8IGludmVydDModGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0Myh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQzKHRoaXMuZ2l0NCk7XG4gICAgdGhpcy5naXRJbnY1ID0gdGhpcy5naXRJbnY1IHx8IGludmVydDModGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0Myh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQzKHRoaXMuZ2l0Nyk7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDAgPSB0aGlzLmdpdEJyYW5jaExhYmVsMCB8fCBpbnZlcnQzKHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDMgPSB0aGlzLmdpdEJyYW5jaExhYmVsMyB8fCBpbnZlcnQzKHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5naXRCcmFuY2hMYWJlbDQgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDYgPSB0aGlzLmdpdEJyYW5jaExhYmVsNiB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5naXRCcmFuY2hMYWJlbDcgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBnZXRUaGVtZVZhcmlhYmxlczMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lID0gbmV3IFRoZW1lMygpO1xuICB0aGVtZS5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTtcbn0sIFwiZ2V0VGhlbWVWYXJpYWJsZXNcIik7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtZm9yZXN0LmpzXG5pbXBvcnQgeyBhZGp1c3QgYXMgYWRqdXN0NSwgZGFya2VuIGFzIGRhcmtlbjQsIGludmVydCBhcyBpbnZlcnQ0LCBpc0RhcmsgYXMgaXNEYXJrNCwgbGlnaHRlbiBhcyBsaWdodGVuNCB9IGZyb20gXCJraHJvbWFcIjtcbnZhciBUaGVtZTQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiVGhlbWVcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5wcmltYXJ5Q29sb3IgPSBcIiNjZGU0OThcIjtcbiAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gXCIjY2RmZmIyXCI7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMubWFpbkJrZyA9IFwiI2NkZTQ5OFwiO1xuICAgIHRoaXMuc2Vjb25kQmtnID0gXCIjY2RmZmIyXCI7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcImdyZWVuXCI7XG4gICAgdGhpcy5ib3JkZXIxID0gXCIjMTM1NDBjXCI7XG4gICAgdGhpcy5ib3JkZXIyID0gXCIjNmVhYTQ5XCI7XG4gICAgdGhpcy5hcnJvd2hlYWRDb2xvciA9IFwiZ3JlZW5cIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICB0aGlzLnRlcnRpYXJ5Q29sb3IgPSBsaWdodGVuNChcIiNjZGU0OThcIiwgMTApO1xuICAgIHRoaXMucHJpbWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5wcmltYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnNlY29uZGFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnRlcnRpYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMucHJpbWFyeVRleHRDb2xvciA9IGludmVydDQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0NCh0aGlzLnNlY29uZGFyeUNvbG9yKTtcbiAgICB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yID0gaW52ZXJ0NCh0aGlzLnByaW1hcnlDb2xvcik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBpbnZlcnQ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy50ZXh0Q29sb3IgPSBpbnZlcnQ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiIzMzM1wiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwiI2U4ZThlOFwiO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiIzMzM1wiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCIjMzMzXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCIjMzI2OTMyXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCIjNmVhYTQ5XCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCIjNmVhYTQ5XCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCIjNDg3ZTNhXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gXCJsaWdodGdyZXlcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvciA9IFwiZ3JleVwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gXCIjZmY4ODg4XCI7XG4gICAgdGhpcy5jcml0QmtnQ29sb3IgPSBcInJlZFwiO1xuICAgIHRoaXMudG9kYXlMaW5lQ29sb3IgPSBcInJlZFwiO1xuICAgIHRoaXMucGVyc29uQm9yZGVyID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5wZXJzb25Ca2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5hcmNoRWRnZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hcmNoRWRnZUFycm93Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFyY2hFZGdlV2lkdGggPSBcIjNcIjtcbiAgICB0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aCA9IFwiMnB4XCI7XG4gICAgdGhpcy5sYWJlbENvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMuZXJyb3JCa2dDb2xvciA9IFwiIzU1MjIyMlwiO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IGRhcmtlbjQodGhpcy5tYWluQmtnLCAyMCk7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSB0aGlzLmJvcmRlcjI7XG4gICAgdGhpcy5ub3RlVGV4dENvbG9yID0gdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5hY3RvckJvcmRlcjtcbiAgICB0aGlzLmNTY2FsZTAgPSB0aGlzLmNTY2FsZTAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmNTY2FsZTUgPSB0aGlzLmNTY2FsZTUgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA5MCB9KTtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTUwIH0pO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDIxMCB9KTtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMDAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMzAgfSk7XG4gICAgdGhpc1tcImNTY2FsZVBlZXIxXCJdID0gdGhpc1tcImNTY2FsZVBlZXIxXCJdIHx8IGRhcmtlbjQodGhpcy5zZWNvbmRhcnlDb2xvciwgNDUpO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMlwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMlwiXSB8fCBkYXJrZW40KHRoaXMudGVydGlhcnlDb2xvciwgNDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlXCIgKyBpXSA9IGRhcmtlbjQodGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSB8fCBkYXJrZW40KHRoaXNbXCJjU2NhbGVcIiArIGldLCAyNSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGFkanVzdDUodGhpc1tcImNTY2FsZVwiICsgaV0sIHsgaDogMTgwIH0pO1xuICAgIH1cbiAgICB0aGlzLnNjYWxlTGFiZWxDb2xvciA9IHRoaXMuc2NhbGVMYWJlbENvbG9yICE9PSBcImNhbGN1bGF0ZWRcIiAmJiB0aGlzLnNjYWxlTGFiZWxDb2xvciA/IHRoaXMuc2NhbGVMYWJlbENvbG9yIDogdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB0aGlzW1wic3VyZmFjZVwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVwiICsgaV0gfHwgYWRqdXN0NSh0aGlzLm1haW5Ca2csIHsgaDogMzAsIHM6IC0zMCwgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0NSh0aGlzLm1haW5Ca2csIHsgaDogMzAsIHM6IC0zMCwgbDogLSg4ICsgaSAqIDUpIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLnRhc2tUZXh0Q29sb3IgPSB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IHRoaXMudGFza0JvcmRlckNvbG9yO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmMGYwZjBcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuc3BlY2lhbFN0YXRlQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSB0aGlzLmVycm9yQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSB0aGlzLmVycm9yVGV4dENvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmNsYXNzVGV4dCA9IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMCA9IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUxID0gdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMiA9IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTMgPSBhZGp1c3Q1KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTQgPSBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNSA9IGFkanVzdDUodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTYgPSBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNyA9IGFkanVzdDUodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5waWUxID0gdGhpcy5waWUxIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucGllMiA9IHRoaXMucGllMiB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMucGllMyA9IHRoaXMucGllMyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5waWU0ID0gdGhpcy5waWU0IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgbDogLTMwIH0pO1xuICAgIHRoaXMucGllNSA9IHRoaXMucGllNSB8fCBhZGp1c3Q1KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgbDogLTMwIH0pO1xuICAgIHRoaXMucGllNiA9IHRoaXMucGllNiB8fCBhZGp1c3Q1KHRoaXMudGVydGlhcnlDb2xvciwgeyBoOiA0MCwgbDogLTQwIH0pO1xuICAgIHRoaXMucGllNyA9IHRoaXMucGllNyB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwLCBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU4ID0gdGhpcy5waWU4IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU5ID0gdGhpcy5waWU5IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwLCBsOiAwIH0pO1xuICAgIHRoaXMucGllMTAgPSB0aGlzLnBpZTEwIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC01MCB9KTtcbiAgICB0aGlzLnBpZTExID0gdGhpcy5waWUxMSB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02MCwgbDogLTUwIH0pO1xuICAgIHRoaXMucGllMTIgPSB0aGlzLnBpZTEyIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwLCBsOiAtNTAgfSk7XG4gICAgdGhpcy5waWVUaXRsZVRleHRTaXplID0gdGhpcy5waWVUaXRsZVRleHRTaXplIHx8IFwiMjVweFwiO1xuICAgIHRoaXMucGllVGl0bGVUZXh0Q29sb3IgPSB0aGlzLnBpZVRpdGxlVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgPSB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3IgPSB0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSA9IHRoaXMucGllTGVnZW5kVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgPSB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZVN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZVN0cm9rZVdpZHRoID0gdGhpcy5waWVTdHJva2VXaWR0aCB8fCBcIjJweFwiO1xuICAgIHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aCA9IHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aCB8fCBcIjJweFwiO1xuICAgIHRoaXMucGllT3V0ZXJTdHJva2VDb2xvciA9IHRoaXMucGllT3V0ZXJTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVPcGFjaXR5ID0gdGhpcy5waWVPcGFjaXR5IHx8IFwiMC43XCI7XG4gICAgdGhpcy5xdWFkcmFudDFGaWxsID0gdGhpcy5xdWFkcmFudDFGaWxsIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyRmlsbCA9IHRoaXMucXVhZHJhbnQyRmlsbCB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDUsIGc6IDUsIGI6IDUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNGaWxsID0gdGhpcy5xdWFkcmFudDNGaWxsIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTAsIGc6IDEwLCBiOiAxMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NEZpbGwgPSB0aGlzLnF1YWRyYW50NEZpbGwgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxNSwgZzogMTUsIGI6IDE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MVRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MlRleHRGaWxsID0gdGhpcy5xdWFkcmFudDJUZXh0RmlsbCB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtNSwgZzogLTUsIGI6IC01IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50M1RleHRGaWxsIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xMCwgZzogLTEwLCBiOiAtMTAgfSk7XG4gICAgdGhpcy5xdWFkcmFudDRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQ0VGV4dEZpbGwgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTE1LCBnOiAtMTUsIGI6IC0xNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRGaWxsID0gdGhpcy5xdWFkcmFudFBvaW50RmlsbCB8fCBpc0Rhcms0KHRoaXMucXVhZHJhbnQxRmlsbCkgPyBsaWdodGVuNCh0aGlzLnF1YWRyYW50MUZpbGwpIDogZGFya2VuNCh0aGlzLnF1YWRyYW50MUZpbGwpO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsID0gdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsID0gdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsID0gdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgPSB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgPSB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgPSB0aGlzLnF1YWRyYW50VGl0bGVGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnBhY2tldCA9IHtcbiAgICAgIHN0YXJ0Qnl0ZUNvbG9yOiB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICBlbmRCeXRlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGxhYmVsQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrU3Ryb2tlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrRmlsbENvbG9yOiB0aGlzLm1haW5Ca2dcbiAgICB9O1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiI0NERTQ5OCwjRkY2QjZCLCNBMEQyREIsI0Q3QkRFMiwjRjBGMEYwLCNGRkMzQTAsIzdGRDhCRSwjRkY5QThCLCNGQUYzRTAsI0ZGRjE3NlwiXG4gICAgfTtcbiAgICB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCA9IHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplIHx8IFwiMVwiO1xuICAgIHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgPSB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uQ29sb3IgPSB0aGlzLnJlbGF0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCA9IHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgfHwgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbENvbG9yID0gdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmdpdDAgPSB0aGlzLmdpdDAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQxID0gdGhpcy5naXQxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQyID0gdGhpcy5naXQyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDMgPSB0aGlzLmdpdDMgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSk7XG4gICAgdGhpcy5naXQ0ID0gdGhpcy5naXQ0IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwIH0pO1xuICAgIHRoaXMuZ2l0NSA9IHRoaXMuZ2l0NSB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KTtcbiAgICB0aGlzLmdpdDYgPSB0aGlzLmdpdDYgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmdpdDcgPSB0aGlzLmdpdDcgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGxpZ2h0ZW40KHRoaXMuZ2l0MCwgMjUpO1xuICAgICAgdGhpcy5naXQxID0gbGlnaHRlbjQodGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBsaWdodGVuNCh0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGxpZ2h0ZW40KHRoaXMuZ2l0MywgMjUpO1xuICAgICAgdGhpcy5naXQ0ID0gbGlnaHRlbjQodGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBsaWdodGVuNCh0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGxpZ2h0ZW40KHRoaXMuZ2l0NiwgMjUpO1xuICAgICAgdGhpcy5naXQ3ID0gbGlnaHRlbjQodGhpcy5naXQ3LCAyNSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGRhcmtlbjQodGhpcy5naXQwLCAyNSk7XG4gICAgICB0aGlzLmdpdDEgPSBkYXJrZW40KHRoaXMuZ2l0MSwgMjUpO1xuICAgICAgdGhpcy5naXQyID0gZGFya2VuNCh0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGRhcmtlbjQodGhpcy5naXQzLCAyNSk7XG4gICAgICB0aGlzLmdpdDQgPSBkYXJrZW40KHRoaXMuZ2l0NCwgMjUpO1xuICAgICAgdGhpcy5naXQ1ID0gZGFya2VuNCh0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGRhcmtlbjQodGhpcy5naXQ2LCAyNSk7XG4gICAgICB0aGlzLmdpdDcgPSBkYXJrZW40KHRoaXMuZ2l0NywgMjUpO1xuICAgIH1cbiAgICB0aGlzLmdpdEludjAgPSB0aGlzLmdpdEludjAgfHwgaW52ZXJ0NCh0aGlzLmdpdDApO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQ0KHRoaXMuZ2l0MSk7XG4gICAgdGhpcy5naXRJbnYyID0gdGhpcy5naXRJbnYyIHx8IGludmVydDQodGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0NCh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQ0KHRoaXMuZ2l0NCk7XG4gICAgdGhpcy5naXRJbnY1ID0gdGhpcy5naXRJbnY1IHx8IGludmVydDQodGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0NCh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQ0KHRoaXMuZ2l0Nyk7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDAgPSB0aGlzLmdpdEJyYW5jaExhYmVsMCB8fCBpbnZlcnQ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDMgPSB0aGlzLmdpdEJyYW5jaExhYmVsMyB8fCBpbnZlcnQ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5naXRCcmFuY2hMYWJlbDQgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDYgPSB0aGlzLmdpdEJyYW5jaExhYmVsNiB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5naXRCcmFuY2hMYWJlbDcgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBnZXRUaGVtZVZhcmlhYmxlczQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lID0gbmV3IFRoZW1lNCgpO1xuICB0aGVtZS5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTtcbn0sIFwiZ2V0VGhlbWVWYXJpYWJsZXNcIik7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtbmV1dHJhbC5qc1xuaW1wb3J0IHsgaW52ZXJ0IGFzIGludmVydDUsIGRhcmtlbiBhcyBkYXJrZW41LCBsaWdodGVuIGFzIGxpZ2h0ZW41LCBhZGp1c3QgYXMgYWRqdXN0NiwgaXNEYXJrIGFzIGlzRGFyazUgfSBmcm9tIFwia2hyb21hXCI7XG52YXIgVGhlbWU1ID0gY2xhc3Mge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlRoZW1lXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucHJpbWFyeUNvbG9yID0gXCIjZWVlXCI7XG4gICAgdGhpcy5jb250cmFzdCA9IFwiIzcwNzA3MFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBsaWdodGVuNSh0aGlzLmNvbnRyYXN0LCA1NSk7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZmZmZmZmXCI7XG4gICAgdGhpcy50ZXJ0aWFyeUNvbG9yID0gYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMTYwIH0pO1xuICAgIHRoaXMucHJpbWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5wcmltYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnNlY29uZGFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnRlcnRpYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMucHJpbWFyeVRleHRDb2xvciA9IGludmVydDUodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0NSh0aGlzLnNlY29uZGFyeUNvbG9yKTtcbiAgICB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yID0gaW52ZXJ0NSh0aGlzLnRlcnRpYXJ5Q29sb3IpO1xuICAgIHRoaXMubGluZUNvbG9yID0gaW52ZXJ0NSh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMudGV4dENvbG9yID0gaW52ZXJ0NSh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMubWFpbkJrZyA9IFwiI2VlZVwiO1xuICAgIHRoaXMuc2Vjb25kQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcIiM2NjZcIjtcbiAgICB0aGlzLmJvcmRlcjEgPSBcIiM5OTlcIjtcbiAgICB0aGlzLmJvcmRlcjIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGUgPSBcIiNmZmFcIjtcbiAgICB0aGlzLnRleHQgPSBcIiMzMzNcIjtcbiAgICB0aGlzLmNyaXRpY2FsID0gXCIjZDQyXCI7XG4gICAgdGhpcy5kb25lID0gXCIjYmJiXCI7XG4gICAgdGhpcy5hcnJvd2hlYWRDb2xvciA9IFwiIzMzMzMzM1wiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZic7XG4gICAgdGhpcy5mb250U2l6ZSA9IFwiMTZweFwiO1xuICAgIHRoaXMuVEhFTUVfQ09MT1JfTElNSVQgPSAxMjtcbiAgICB0aGlzLm5vZGVCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vZGVCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNsdXN0ZXJCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNsdXN0ZXJCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvckxpbmVDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSBcIiMwMDMxNjNcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMucGVyc29uQm9yZGVyID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5wZXJzb25Ca2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5hcmNoRWRnZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hcmNoRWRnZUFycm93Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFyY2hFZGdlV2lkdGggPSBcIjNcIjtcbiAgICB0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aCA9IFwiMnB4XCI7XG4gICAgdGhpcy5sYWJlbENvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMuZXJyb3JCa2dDb2xvciA9IFwiIzU1MjIyMlwiO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBsaWdodGVuNSh0aGlzLmNvbnRyYXN0LCA1NSk7XG4gICAgdGhpcy5ib3JkZXIyID0gdGhpcy5jb250cmFzdDtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gbGlnaHRlbjUodGhpcy5ib3JkZXIxLCAyMyk7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gdGhpcy50ZXh0O1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5zaWduYWxUZXh0Q29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gdGhpcy5hY3RvckJrZztcbiAgICB0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy50ZXh0O1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCIjOTk5XCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiM2NjZcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcIiNmZmZcIjtcbiAgICB0aGlzLmNTY2FsZTAgPSB0aGlzLmNTY2FsZTAgfHwgXCIjNTU1XCI7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IFwiI0Y0RjRGNFwiO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCBcIiM1NTVcIjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgXCIjQkJCXCI7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IFwiIzc3N1wiO1xuICAgIHRoaXMuY1NjYWxlNSA9IHRoaXMuY1NjYWxlNSB8fCBcIiM5OTlcIjtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgXCIjREREXCI7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IFwiI0ZGRlwiO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBcIiNERERcIjtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgXCIjQkJCXCI7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgXCIjOTk5XCI7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgXCIjNzc3XCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVJbnZcIiArIGldID0gdGhpc1tcImNTY2FsZUludlwiICsgaV0gfHwgaW52ZXJ0NSh0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbjUodGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSB8fCBkYXJrZW41KHRoaXNbXCJjU2NhbGVcIiArIGldLCAxMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2NhbGVMYWJlbENvbG9yID0gdGhpcy5zY2FsZUxhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICB0aGlzLmNTY2FsZUxhYmVsMCA9IHRoaXMuY1NjYWxlTGFiZWwwIHx8IHRoaXMuY1NjYWxlMTtcbiAgICB0aGlzLmNTY2FsZUxhYmVsMiA9IHRoaXMuY1NjYWxlTGFiZWwyIHx8IHRoaXMuY1NjYWxlMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB0aGlzW1wic3VyZmFjZVwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVwiICsgaV0gfHwgYWRqdXN0Nih0aGlzLm1haW5Ca2csIHsgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0Nih0aGlzLm1haW5Ca2csIHsgbDogLSg4ICsgaSAqIDUpIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IgPSBsaWdodGVuNSh0aGlzLmNvbnRyYXN0LCAzMCk7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gbGlnaHRlbjUodGhpcy5jb250cmFzdCwgMzApO1xuICAgIHRoaXMudGFza0JvcmRlckNvbG9yID0gZGFya2VuNSh0aGlzLmNvbnRyYXN0LCAxMCk7XG4gICAgdGhpcy50YXNrQmtnQ29sb3IgPSB0aGlzLmNvbnRyYXN0O1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSB0aGlzLnRhc2tCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmdyaWRDb2xvciA9IGxpZ2h0ZW41KHRoaXMuYm9yZGVyMSwgMzApO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IHRoaXMuZG9uZTtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IHRoaXMuY3JpdGljYWw7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBkYXJrZW41KHRoaXMuY3JpdEJrZ0NvbG9yLCAxMCk7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IHRoaXMuY3JpdEJrZ0NvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCBcIiMwMDBcIjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmNGY0ZjRcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLnN0YXRlQm9yZGVyID0gdGhpcy5zdGF0ZUJvcmRlciB8fCBcIiMwMDBcIjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuc3BlY2lhbFN0YXRlQ29sb3IgPSBcIiMyMjJcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSB0aGlzLmVycm9yQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSB0aGlzLmVycm9yVGV4dENvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTAgPSB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMSA9IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTIgPSBhZGp1c3Q2KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGUzID0gYWRqdXN0Nih0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU0ID0gYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTUgPSBhZGp1c3Q2KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU2ID0gYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5maWxsVHlwZTcgPSBhZGp1c3Q2KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wicGllXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVcIiArIGldO1xuICAgIH1cbiAgICB0aGlzLnBpZTEyID0gdGhpcy5waWUwO1xuICAgIHRoaXMucGllVGl0bGVUZXh0U2l6ZSA9IHRoaXMucGllVGl0bGVUZXh0U2l6ZSB8fCBcIjI1cHhcIjtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dENvbG9yID0gdGhpcy5waWVUaXRsZVRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRTaXplID0gdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yID0gdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dFNpemUgPSB0aGlzLnBpZUxlZ2VuZFRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dENvbG9yID0gdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVN0cm9rZUNvbG9yID0gdGhpcy5waWVTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVTdHJva2VXaWR0aCA9IHRoaXMucGllU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggPSB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllT3BhY2l0eSA9IHRoaXMucGllT3BhY2l0eSB8fCBcIjAuN1wiO1xuICAgIHRoaXMucXVhZHJhbnQxRmlsbCA9IHRoaXMucXVhZHJhbnQxRmlsbCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MkZpbGwgPSB0aGlzLnF1YWRyYW50MkZpbGwgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyByOiA1LCBnOiA1LCBiOiA1IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzRmlsbCA9IHRoaXMucXVhZHJhbnQzRmlsbCB8fCBhZGp1c3Q2KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDEwLCBnOiAxMCwgYjogMTAgfSk7XG4gICAgdGhpcy5xdWFkcmFudDRGaWxsID0gdGhpcy5xdWFkcmFudDRGaWxsIHx8IGFkanVzdDYodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTUsIGc6IDE1LCBiOiAxNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50MVRleHRGaWxsID0gdGhpcy5xdWFkcmFudDFUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTUsIGc6IC01LCBiOiAtNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M1RleHRGaWxsID0gdGhpcy5xdWFkcmFudDNUZXh0RmlsbCB8fCBhZGp1c3Q2KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTAsIGc6IC0xMCwgYjogLTEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50NFRleHRGaWxsIHx8IGFkanVzdDYodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xNSwgZzogLTE1LCBiOiAtMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludEZpbGwgfHwgaXNEYXJrNSh0aGlzLnF1YWRyYW50MUZpbGwpID8gbGlnaHRlbjUodGhpcy5xdWFkcmFudDFGaWxsKSA6IGRhcmtlbjUodGhpcy5xdWFkcmFudDFGaWxsKTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50VGl0bGVGaWxsID0gdGhpcy5xdWFkcmFudFRpdGxlRmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy54eUNoYXJ0ID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvciB8fCB0aGlzLmJhY2tncm91bmQsXG4gICAgICB0aXRsZUNvbG9yOiB0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNUaXRsZUNvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xhYmVsQ29sb3I6IHRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGlja0NvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzTGluZUNvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICBwbG90Q29sb3JQYWxldHRlOiB0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGUgfHwgXCIjRUVFLCM2QkI4RTQsIzhBQ0I4OCwjQzdBQ0Q2LCNFOERDQzIsI0ZGQjJBOCwjRkZGMzgwLCM3RThEOTEsI0ZGRDhCMSwjRkFGM0UwXCJcbiAgICB9O1xuICAgIHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kID0gdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgfHwgXCIxXCI7XG4gICAgdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVsYXRpb25Db2xvciA9IHRoaXMucmVsYXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCB8fCB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IGRhcmtlbjUodGhpcy5waWUxLCAyNSkgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQxID0gdGhpcy5waWUyIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQyID0gdGhpcy5waWUzIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDMgPSB0aGlzLnBpZTQgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSk7XG4gICAgdGhpcy5naXQ0ID0gdGhpcy5waWU1IHx8IGFkanVzdDYodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwIH0pO1xuICAgIHRoaXMuZ2l0NSA9IHRoaXMucGllNiB8fCBhZGp1c3Q2KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KTtcbiAgICB0aGlzLmdpdDYgPSB0aGlzLnBpZTcgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmdpdDcgPSB0aGlzLnBpZTggfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5naXRJbnYwID0gdGhpcy5naXRJbnYwIHx8IGludmVydDUodGhpcy5naXQwKTtcbiAgICB0aGlzLmdpdEludjEgPSB0aGlzLmdpdEludjEgfHwgaW52ZXJ0NSh0aGlzLmdpdDEpO1xuICAgIHRoaXMuZ2l0SW52MiA9IHRoaXMuZ2l0SW52MiB8fCBpbnZlcnQ1KHRoaXMuZ2l0Mik7XG4gICAgdGhpcy5naXRJbnYzID0gdGhpcy5naXRJbnYzIHx8IGludmVydDUodGhpcy5naXQzKTtcbiAgICB0aGlzLmdpdEludjQgPSB0aGlzLmdpdEludjQgfHwgaW52ZXJ0NSh0aGlzLmdpdDQpO1xuICAgIHRoaXMuZ2l0SW52NSA9IHRoaXMuZ2l0SW52NSB8fCBpbnZlcnQ1KHRoaXMuZ2l0NSk7XG4gICAgdGhpcy5naXRJbnY2ID0gdGhpcy5naXRJbnY2IHx8IGludmVydDUodGhpcy5naXQ2KTtcbiAgICB0aGlzLmdpdEludjcgPSB0aGlzLmdpdEludjcgfHwgaW52ZXJ0NSh0aGlzLmdpdDcpO1xuICAgIHRoaXMuYnJhbmNoTGFiZWxDb2xvciA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvciB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwwID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwyID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwzID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw2ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiB8fCBvbGRBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xudmFyIGdldFRoZW1lVmFyaWFibGVzNSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVzZXJPdmVycmlkZXMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSBuZXcgVGhlbWU1KCk7XG4gIHRoZW1lLmNhbGN1bGF0ZSh1c2VyT3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHRoZW1lO1xufSwgXCJnZXRUaGVtZVZhcmlhYmxlc1wiKTtcblxuLy8gc3JjL3RoZW1lcy9pbmRleC5qc1xudmFyIHRoZW1lc19kZWZhdWx0ID0ge1xuICBiYXNlOiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXNcbiAgfSxcbiAgZGFyazoge1xuICAgIGdldFRoZW1lVmFyaWFibGVzOiBnZXRUaGVtZVZhcmlhYmxlczJcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGdldFRoZW1lVmFyaWFibGVzOiBnZXRUaGVtZVZhcmlhYmxlczNcbiAgfSxcbiAgZm9yZXN0OiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXM6IGdldFRoZW1lVmFyaWFibGVzNFxuICB9LFxuICBuZXV0cmFsOiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXM6IGdldFRoZW1lVmFyaWFibGVzNVxuICB9XG59O1xuXG4vLyBzcmMvc2NoZW1hcy9jb25maWcuc2NoZW1hLnlhbWw/b25seS1kZWZhdWx0cz10cnVlXG52YXIgY29uZmlnX3NjaGVtYV9kZWZhdWx0ID0ge1xuICBcImZsb3djaGFydFwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwidGl0bGVUb3BNYXJnaW5cIjogMjUsXG4gICAgXCJzdWJHcmFwaFRpdGxlTWFyZ2luXCI6IHtcbiAgICAgIFwidG9wXCI6IDAsXG4gICAgICBcImJvdHRvbVwiOiAwXG4gICAgfSxcbiAgICBcImRpYWdyYW1QYWRkaW5nXCI6IDgsXG4gICAgXCJodG1sTGFiZWxzXCI6IHRydWUsXG4gICAgXCJub2RlU3BhY2luZ1wiOiA1MCxcbiAgICBcInJhbmtTcGFjaW5nXCI6IDUwLFxuICAgIFwiY3VydmVcIjogXCJiYXNpc1wiLFxuICAgIFwicGFkZGluZ1wiOiAxNSxcbiAgICBcImRlZmF1bHRSZW5kZXJlclwiOiBcImRhZ3JlLXdyYXBwZXJcIixcbiAgICBcIndyYXBwaW5nV2lkdGhcIjogMjAwXG4gIH0sXG4gIFwic2VxdWVuY2VcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcImhpZGVVbnVzZWRQYXJ0aWNpcGFudHNcIjogZmFsc2UsXG4gICAgXCJhY3RpdmF0aW9uV2lkdGhcIjogMTAsXG4gICAgXCJkaWFncmFtTWFyZ2luWFwiOiA1MCxcbiAgICBcImRpYWdyYW1NYXJnaW5ZXCI6IDEwLFxuICAgIFwiYWN0b3JNYXJnaW5cIjogNTAsXG4gICAgXCJ3aWR0aFwiOiAxNTAsXG4gICAgXCJoZWlnaHRcIjogNjUsXG4gICAgXCJib3hNYXJnaW5cIjogMTAsXG4gICAgXCJib3hUZXh0TWFyZ2luXCI6IDUsXG4gICAgXCJub3RlTWFyZ2luXCI6IDEwLFxuICAgIFwibWVzc2FnZU1hcmdpblwiOiAzNSxcbiAgICBcIm1lc3NhZ2VBbGlnblwiOiBcImNlbnRlclwiLFxuICAgIFwibWlycm9yQWN0b3JzXCI6IHRydWUsXG4gICAgXCJmb3JjZU1lbnVzXCI6IGZhbHNlLFxuICAgIFwiYm90dG9tTWFyZ2luQWRqXCI6IDEsXG4gICAgXCJyaWdodEFuZ2xlc1wiOiBmYWxzZSxcbiAgICBcInNob3dTZXF1ZW5jZU51bWJlcnNcIjogZmFsc2UsXG4gICAgXCJhY3RvckZvbnRTaXplXCI6IDE0LFxuICAgIFwiYWN0b3JGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImFjdG9yRm9udFdlaWdodFwiOiA0MDAsXG4gICAgXCJub3RlRm9udFNpemVcIjogMTQsXG4gICAgXCJub3RlRm9udEZhbWlseVwiOiAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIFwibm90ZUZvbnRXZWlnaHRcIjogNDAwLFxuICAgIFwibm90ZUFsaWduXCI6IFwiY2VudGVyXCIsXG4gICAgXCJtZXNzYWdlRm9udFNpemVcIjogMTYsXG4gICAgXCJtZXNzYWdlRm9udEZhbWlseVwiOiAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIFwibWVzc2FnZUZvbnRXZWlnaHRcIjogNDAwLFxuICAgIFwid3JhcFwiOiBmYWxzZSxcbiAgICBcIndyYXBQYWRkaW5nXCI6IDEwLFxuICAgIFwibGFiZWxCb3hXaWR0aFwiOiA1MCxcbiAgICBcImxhYmVsQm94SGVpZ2h0XCI6IDIwXG4gIH0sXG4gIFwiZ2FudHRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInRpdGxlVG9wTWFyZ2luXCI6IDI1LFxuICAgIFwiYmFySGVpZ2h0XCI6IDIwLFxuICAgIFwiYmFyR2FwXCI6IDQsXG4gICAgXCJ0b3BQYWRkaW5nXCI6IDUwLFxuICAgIFwicmlnaHRQYWRkaW5nXCI6IDc1LFxuICAgIFwibGVmdFBhZGRpbmdcIjogNzUsXG4gICAgXCJncmlkTGluZVN0YXJ0UGFkZGluZ1wiOiAzNSxcbiAgICBcImZvbnRTaXplXCI6IDExLFxuICAgIFwic2VjdGlvbkZvbnRTaXplXCI6IDExLFxuICAgIFwibnVtYmVyU2VjdGlvblN0eWxlc1wiOiA0LFxuICAgIFwiYXhpc0Zvcm1hdFwiOiBcIiVZLSVtLSVkXCIsXG4gICAgXCJ0b3BBeGlzXCI6IGZhbHNlLFxuICAgIFwiZGlzcGxheU1vZGVcIjogXCJcIixcbiAgICBcIndlZWtkYXlcIjogXCJzdW5kYXlcIlxuICB9LFxuICBcImpvdXJuZXlcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcImRpYWdyYW1NYXJnaW5YXCI6IDUwLFxuICAgIFwiZGlhZ3JhbU1hcmdpbllcIjogMTAsXG4gICAgXCJsZWZ0TWFyZ2luXCI6IDE1MCxcbiAgICBcIndpZHRoXCI6IDE1MCxcbiAgICBcImhlaWdodFwiOiA1MCxcbiAgICBcImJveE1hcmdpblwiOiAxMCxcbiAgICBcImJveFRleHRNYXJnaW5cIjogNSxcbiAgICBcIm5vdGVNYXJnaW5cIjogMTAsXG4gICAgXCJtZXNzYWdlTWFyZ2luXCI6IDM1LFxuICAgIFwibWVzc2FnZUFsaWduXCI6IFwiY2VudGVyXCIsXG4gICAgXCJib3R0b21NYXJnaW5BZGpcIjogMSxcbiAgICBcInJpZ2h0QW5nbGVzXCI6IGZhbHNlLFxuICAgIFwidGFza0ZvbnRTaXplXCI6IDE0LFxuICAgIFwidGFza0ZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwidGFza01hcmdpblwiOiA1MCxcbiAgICBcImFjdGl2YXRpb25XaWR0aFwiOiAxMCxcbiAgICBcInRleHRQbGFjZW1lbnRcIjogXCJmb1wiLFxuICAgIFwiYWN0b3JDb2xvdXJzXCI6IFtcbiAgICAgIFwiIzhGQkM4RlwiLFxuICAgICAgXCIjN0NGQzAwXCIsXG4gICAgICBcIiMwMEZGRkZcIixcbiAgICAgIFwiIzIwQjJBQVwiLFxuICAgICAgXCIjQjBFMEU2XCIsXG4gICAgICBcIiNGRkZGRTBcIlxuICAgIF0sXG4gICAgXCJzZWN0aW9uRmlsbHNcIjogW1xuICAgICAgXCIjMTkxOTcwXCIsXG4gICAgICBcIiM4QjAwOEJcIixcbiAgICAgIFwiIzRCMDA4MlwiLFxuICAgICAgXCIjMkY0RjRGXCIsXG4gICAgICBcIiM4MDAwMDBcIixcbiAgICAgIFwiIzhCNDUxM1wiLFxuICAgICAgXCIjMDAwMDhCXCJcbiAgICBdLFxuICAgIFwic2VjdGlvbkNvbG91cnNcIjogW1xuICAgICAgXCIjZmZmXCJcbiAgICBdXG4gIH0sXG4gIFwiY2xhc3NcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInRpdGxlVG9wTWFyZ2luXCI6IDI1LFxuICAgIFwiYXJyb3dNYXJrZXJBYnNvbHV0ZVwiOiBmYWxzZSxcbiAgICBcImRpdmlkZXJNYXJnaW5cIjogMTAsXG4gICAgXCJwYWRkaW5nXCI6IDUsXG4gICAgXCJ0ZXh0SGVpZ2h0XCI6IDEwLFxuICAgIFwiZGVmYXVsdFJlbmRlcmVyXCI6IFwiZGFncmUtd3JhcHBlclwiLFxuICAgIFwiaHRtbExhYmVsc1wiOiBmYWxzZVxuICB9LFxuICBcInN0YXRlXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ0aXRsZVRvcE1hcmdpblwiOiAyNSxcbiAgICBcImRpdmlkZXJNYXJnaW5cIjogMTAsXG4gICAgXCJzaXplVW5pdFwiOiA1LFxuICAgIFwicGFkZGluZ1wiOiA4LFxuICAgIFwidGV4dEhlaWdodFwiOiAxMCxcbiAgICBcInRpdGxlU2hpZnRcIjogLTE1LFxuICAgIFwibm90ZU1hcmdpblwiOiAxMCxcbiAgICBcImZvcmtXaWR0aFwiOiA3MCxcbiAgICBcImZvcmtIZWlnaHRcIjogNyxcbiAgICBcIm1pbmlQYWRkaW5nXCI6IDIsXG4gICAgXCJmb250U2l6ZUZhY3RvclwiOiA1LjAyLFxuICAgIFwiZm9udFNpemVcIjogMjQsXG4gICAgXCJsYWJlbEhlaWdodFwiOiAxNixcbiAgICBcImVkZ2VMZW5ndGhGYWN0b3JcIjogXCIyMFwiLFxuICAgIFwiY29tcG9zaXRUaXRsZVNpemVcIjogMzUsXG4gICAgXCJyYWRpdXNcIjogNSxcbiAgICBcImRlZmF1bHRSZW5kZXJlclwiOiBcImRhZ3JlLXdyYXBwZXJcIlxuICB9LFxuICBcImVyXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ0aXRsZVRvcE1hcmdpblwiOiAyNSxcbiAgICBcImRpYWdyYW1QYWRkaW5nXCI6IDIwLFxuICAgIFwibGF5b3V0RGlyZWN0aW9uXCI6IFwiVEJcIixcbiAgICBcIm1pbkVudGl0eVdpZHRoXCI6IDEwMCxcbiAgICBcIm1pbkVudGl0eUhlaWdodFwiOiA3NSxcbiAgICBcImVudGl0eVBhZGRpbmdcIjogMTUsXG4gICAgXCJzdHJva2VcIjogXCJncmF5XCIsXG4gICAgXCJmaWxsXCI6IFwiaG9uZXlkZXdcIixcbiAgICBcImZvbnRTaXplXCI6IDEyXG4gIH0sXG4gIFwicGllXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ0ZXh0UG9zaXRpb25cIjogMC43NVxuICB9LFxuICBcInF1YWRyYW50Q2hhcnRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcImNoYXJ0V2lkdGhcIjogNTAwLFxuICAgIFwiY2hhcnRIZWlnaHRcIjogNTAwLFxuICAgIFwidGl0bGVGb250U2l6ZVwiOiAyMCxcbiAgICBcInRpdGxlUGFkZGluZ1wiOiAxMCxcbiAgICBcInF1YWRyYW50UGFkZGluZ1wiOiA1LFxuICAgIFwieEF4aXNMYWJlbFBhZGRpbmdcIjogNSxcbiAgICBcInlBeGlzTGFiZWxQYWRkaW5nXCI6IDUsXG4gICAgXCJ4QXhpc0xhYmVsRm9udFNpemVcIjogMTYsXG4gICAgXCJ5QXhpc0xhYmVsRm9udFNpemVcIjogMTYsXG4gICAgXCJxdWFkcmFudExhYmVsRm9udFNpemVcIjogMTYsXG4gICAgXCJxdWFkcmFudFRleHRUb3BQYWRkaW5nXCI6IDUsXG4gICAgXCJwb2ludFRleHRQYWRkaW5nXCI6IDUsXG4gICAgXCJwb2ludExhYmVsRm9udFNpemVcIjogMTIsXG4gICAgXCJwb2ludFJhZGl1c1wiOiA1LFxuICAgIFwieEF4aXNQb3NpdGlvblwiOiBcInRvcFwiLFxuICAgIFwieUF4aXNQb3NpdGlvblwiOiBcImxlZnRcIixcbiAgICBcInF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aFwiOiAxLFxuICAgIFwicXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoXCI6IDJcbiAgfSxcbiAgXCJ4eUNoYXJ0XCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ3aWR0aFwiOiA3MDAsXG4gICAgXCJoZWlnaHRcIjogNTAwLFxuICAgIFwidGl0bGVGb250U2l6ZVwiOiAyMCxcbiAgICBcInRpdGxlUGFkZGluZ1wiOiAxMCxcbiAgICBcInNob3dUaXRsZVwiOiB0cnVlLFxuICAgIFwieEF4aXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9YWUNoYXJ0QXhpc0NvbmZpZ1wiLFxuICAgICAgXCJzaG93TGFiZWxcIjogdHJ1ZSxcbiAgICAgIFwibGFiZWxGb250U2l6ZVwiOiAxNCxcbiAgICAgIFwibGFiZWxQYWRkaW5nXCI6IDUsXG4gICAgICBcInNob3dUaXRsZVwiOiB0cnVlLFxuICAgICAgXCJ0aXRsZUZvbnRTaXplXCI6IDE2LFxuICAgICAgXCJ0aXRsZVBhZGRpbmdcIjogNSxcbiAgICAgIFwic2hvd1RpY2tcIjogdHJ1ZSxcbiAgICAgIFwidGlja0xlbmd0aFwiOiA1LFxuICAgICAgXCJ0aWNrV2lkdGhcIjogMixcbiAgICAgIFwic2hvd0F4aXNMaW5lXCI6IHRydWUsXG4gICAgICBcImF4aXNMaW5lV2lkdGhcIjogMlxuICAgIH0sXG4gICAgXCJ5QXhpc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnXCIsXG4gICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgXCJsYWJlbEZvbnRTaXplXCI6IDE0LFxuICAgICAgXCJsYWJlbFBhZGRpbmdcIjogNSxcbiAgICAgIFwic2hvd1RpdGxlXCI6IHRydWUsXG4gICAgICBcInRpdGxlRm9udFNpemVcIjogMTYsXG4gICAgICBcInRpdGxlUGFkZGluZ1wiOiA1LFxuICAgICAgXCJzaG93VGlja1wiOiB0cnVlLFxuICAgICAgXCJ0aWNrTGVuZ3RoXCI6IDUsXG4gICAgICBcInRpY2tXaWR0aFwiOiAyLFxuICAgICAgXCJzaG93QXhpc0xpbmVcIjogdHJ1ZSxcbiAgICAgIFwiYXhpc0xpbmVXaWR0aFwiOiAyXG4gICAgfSxcbiAgICBcImNoYXJ0T3JpZW50YXRpb25cIjogXCJ2ZXJ0aWNhbFwiLFxuICAgIFwicGxvdFJlc2VydmVkU3BhY2VQZXJjZW50XCI6IDUwXG4gIH0sXG4gIFwicmVxdWlyZW1lbnRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInJlY3RfZmlsbFwiOiBcIiNmOWY5ZjlcIixcbiAgICBcInRleHRfY29sb3JcIjogXCIjMzMzXCIsXG4gICAgXCJyZWN0X2JvcmRlcl9zaXplXCI6IFwiMC41cHhcIixcbiAgICBcInJlY3RfYm9yZGVyX2NvbG9yXCI6IFwiI2JiYlwiLFxuICAgIFwicmVjdF9taW5fd2lkdGhcIjogMjAwLFxuICAgIFwicmVjdF9taW5faGVpZ2h0XCI6IDIwMCxcbiAgICBcImZvbnRTaXplXCI6IDE0LFxuICAgIFwicmVjdF9wYWRkaW5nXCI6IDEwLFxuICAgIFwibGluZV9oZWlnaHRcIjogMjBcbiAgfSxcbiAgXCJtaW5kbWFwXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJwYWRkaW5nXCI6IDEwLFxuICAgIFwibWF4Tm9kZVdpZHRoXCI6IDIwMFxuICB9LFxuICBcInRpbWVsaW5lXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJkaWFncmFtTWFyZ2luWFwiOiA1MCxcbiAgICBcImRpYWdyYW1NYXJnaW5ZXCI6IDEwLFxuICAgIFwibGVmdE1hcmdpblwiOiAxNTAsXG4gICAgXCJ3aWR0aFwiOiAxNTAsXG4gICAgXCJoZWlnaHRcIjogNTAsXG4gICAgXCJib3hNYXJnaW5cIjogMTAsXG4gICAgXCJib3hUZXh0TWFyZ2luXCI6IDUsXG4gICAgXCJub3RlTWFyZ2luXCI6IDEwLFxuICAgIFwibWVzc2FnZU1hcmdpblwiOiAzNSxcbiAgICBcIm1lc3NhZ2VBbGlnblwiOiBcImNlbnRlclwiLFxuICAgIFwiYm90dG9tTWFyZ2luQWRqXCI6IDEsXG4gICAgXCJyaWdodEFuZ2xlc1wiOiBmYWxzZSxcbiAgICBcInRhc2tGb250U2l6ZVwiOiAxNCxcbiAgICBcInRhc2tGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcInRhc2tNYXJnaW5cIjogNTAsXG4gICAgXCJhY3RpdmF0aW9uV2lkdGhcIjogMTAsXG4gICAgXCJ0ZXh0UGxhY2VtZW50XCI6IFwiZm9cIixcbiAgICBcImFjdG9yQ29sb3Vyc1wiOiBbXG4gICAgICBcIiM4RkJDOEZcIixcbiAgICAgIFwiIzdDRkMwMFwiLFxuICAgICAgXCIjMDBGRkZGXCIsXG4gICAgICBcIiMyMEIyQUFcIixcbiAgICAgIFwiI0IwRTBFNlwiLFxuICAgICAgXCIjRkZGRkUwXCJcbiAgICBdLFxuICAgIFwic2VjdGlvbkZpbGxzXCI6IFtcbiAgICAgIFwiIzE5MTk3MFwiLFxuICAgICAgXCIjOEIwMDhCXCIsXG4gICAgICBcIiM0QjAwODJcIixcbiAgICAgIFwiIzJGNEY0RlwiLFxuICAgICAgXCIjODAwMDAwXCIsXG4gICAgICBcIiM4QjQ1MTNcIixcbiAgICAgIFwiIzAwMDA4QlwiXG4gICAgXSxcbiAgICBcInNlY3Rpb25Db2xvdXJzXCI6IFtcbiAgICAgIFwiI2ZmZlwiXG4gICAgXSxcbiAgICBcImRpc2FibGVNdWx0aWNvbG9yXCI6IGZhbHNlXG4gIH0sXG4gIFwiZ2l0R3JhcGhcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInRpdGxlVG9wTWFyZ2luXCI6IDI1LFxuICAgIFwiZGlhZ3JhbVBhZGRpbmdcIjogOCxcbiAgICBcIm5vZGVMYWJlbFwiOiB7XG4gICAgICBcIndpZHRoXCI6IDc1LFxuICAgICAgXCJoZWlnaHRcIjogMTAwLFxuICAgICAgXCJ4XCI6IC0yNSxcbiAgICAgIFwieVwiOiAwXG4gICAgfSxcbiAgICBcIm1haW5CcmFuY2hOYW1lXCI6IFwibWFpblwiLFxuICAgIFwibWFpbkJyYW5jaE9yZGVyXCI6IDAsXG4gICAgXCJzaG93Q29tbWl0TGFiZWxcIjogdHJ1ZSxcbiAgICBcInNob3dCcmFuY2hlc1wiOiB0cnVlLFxuICAgIFwicm90YXRlQ29tbWl0TGFiZWxcIjogdHJ1ZSxcbiAgICBcInBhcmFsbGVsQ29tbWl0c1wiOiBmYWxzZSxcbiAgICBcImFycm93TWFya2VyQWJzb2x1dGVcIjogZmFsc2VcbiAgfSxcbiAgXCJjNFwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwiZGlhZ3JhbU1hcmdpblhcIjogNTAsXG4gICAgXCJkaWFncmFtTWFyZ2luWVwiOiAxMCxcbiAgICBcImM0U2hhcGVNYXJnaW5cIjogNTAsXG4gICAgXCJjNFNoYXBlUGFkZGluZ1wiOiAyMCxcbiAgICBcIndpZHRoXCI6IDIxNixcbiAgICBcImhlaWdodFwiOiA2MCxcbiAgICBcImJveE1hcmdpblwiOiAxMCxcbiAgICBcImM0U2hhcGVJblJvd1wiOiA0LFxuICAgIFwibmV4dExpbmVQYWRkaW5nWFwiOiAwLFxuICAgIFwiYzRCb3VuZGFyeUluUm93XCI6IDIsXG4gICAgXCJwZXJzb25Gb250U2l6ZVwiOiAxNCxcbiAgICBcInBlcnNvbkZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwicGVyc29uRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfcGVyc29uRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcInN5c3RlbUZvbnRTaXplXCI6IDE0LFxuICAgIFwic3lzdGVtRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJzeXN0ZW1Gb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZVwiOiAxNCxcbiAgICBcImV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwic3lzdGVtX2RiRm9udFNpemVcIjogMTQsXG4gICAgXCJzeXN0ZW1fZGJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcInN5c3RlbV9kYkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplXCI6IDE0LFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJzeXN0ZW1fcXVldWVGb250U2l6ZVwiOiAxNCxcbiAgICBcInN5c3RlbV9xdWV1ZUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwic3lzdGVtX3F1ZXVlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImJvdW5kYXJ5Rm9udFNpemVcIjogMTQsXG4gICAgXCJib3VuZGFyeUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiYm91bmRhcnlGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJtZXNzYWdlRm9udFNpemVcIjogMTIsXG4gICAgXCJtZXNzYWdlRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJtZXNzYWdlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiY29udGFpbmVyRm9udFNpemVcIjogMTQsXG4gICAgXCJjb250YWluZXJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImNvbnRhaW5lckZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplXCI6IDE0LFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJjb250YWluZXJfZGJGb250U2l6ZVwiOiAxNCxcbiAgICBcImNvbnRhaW5lcl9kYkZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiY29udGFpbmVyX2RiRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplXCI6IDE0LFxuICAgIFwiY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJjb250YWluZXJfcXVldWVGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZVwiOiAxNCxcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiY29tcG9uZW50Rm9udFNpemVcIjogMTQsXG4gICAgXCJjb21wb25lbnRGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImNvbXBvbmVudEZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplXCI6IDE0LFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJjb21wb25lbnRfZGJGb250U2l6ZVwiOiAxNCxcbiAgICBcImNvbXBvbmVudF9kYkZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiY29tcG9uZW50X2RiRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImNvbXBvbmVudF9xdWV1ZUZvbnRTaXplXCI6IDE0LFxuICAgIFwiY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJjb21wb25lbnRfcXVldWVGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZVwiOiAxNCxcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwid3JhcFwiOiB0cnVlLFxuICAgIFwid3JhcFBhZGRpbmdcIjogMTAsXG4gICAgXCJwZXJzb25fYmdfY29sb3JcIjogXCIjMDg0MjdCXCIsXG4gICAgXCJwZXJzb25fYm9yZGVyX2NvbG9yXCI6IFwiIzA3M0I2RlwiLFxuICAgIFwiZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yXCI6IFwiIzY4Njg2OFwiLFxuICAgIFwiZXh0ZXJuYWxfcGVyc29uX2JvcmRlcl9jb2xvclwiOiBcIiM4QThBOEFcIixcbiAgICBcInN5c3RlbV9iZ19jb2xvclwiOiBcIiMxMTY4QkRcIixcbiAgICBcInN5c3RlbV9ib3JkZXJfY29sb3JcIjogXCIjM0M3RkMwXCIsXG4gICAgXCJzeXN0ZW1fZGJfYmdfY29sb3JcIjogXCIjMTE2OEJEXCIsXG4gICAgXCJzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzNDN0ZDMFwiLFxuICAgIFwic3lzdGVtX3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzExNjhCRFwiLFxuICAgIFwic3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiMzQzdGQzBcIixcbiAgICBcImV4dGVybmFsX3N5c3RlbV9iZ19jb2xvclwiOiBcIiM5OTk5OTlcIixcbiAgICBcImV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3JcIjogXCIjOEE4QThBXCIsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fZGJfYmdfY29sb3JcIjogXCIjOTk5OTk5XCIsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzhBOEE4QVwiLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzk5OTk5OVwiLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiM4QThBOEFcIixcbiAgICBcImNvbnRhaW5lcl9iZ19jb2xvclwiOiBcIiM0MzhERDVcIixcbiAgICBcImNvbnRhaW5lcl9ib3JkZXJfY29sb3JcIjogXCIjM0M3RkMwXCIsXG4gICAgXCJjb250YWluZXJfZGJfYmdfY29sb3JcIjogXCIjNDM4REQ1XCIsXG4gICAgXCJjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzNDN0ZDMFwiLFxuICAgIFwiY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzQzOERENVwiLFxuICAgIFwiY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiMzQzdGQzBcIixcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvclwiOiBcIiNCM0IzQjNcIixcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3JcIjogXCIjQTZBNkE2XCIsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfZGJfYmdfY29sb3JcIjogXCIjQjNCM0IzXCIsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yXCI6IFwiI0E2QTZBNlwiLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yXCI6IFwiI0IzQjNCM1wiLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiNBNkE2QTZcIixcbiAgICBcImNvbXBvbmVudF9iZ19jb2xvclwiOiBcIiM4NUJCRjBcIixcbiAgICBcImNvbXBvbmVudF9ib3JkZXJfY29sb3JcIjogXCIjNzhBOEQ4XCIsXG4gICAgXCJjb21wb25lbnRfZGJfYmdfY29sb3JcIjogXCIjODVCQkYwXCIsXG4gICAgXCJjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzc4QThEOFwiLFxuICAgIFwiY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzg1QkJGMFwiLFxuICAgIFwiY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiM3OEE4RDhcIixcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvclwiOiBcIiNDQ0NDQ0NcIixcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3JcIjogXCIjQkZCRkJGXCIsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfZGJfYmdfY29sb3JcIjogXCIjQ0NDQ0NDXCIsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yXCI6IFwiI0JGQkZCRlwiLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yXCI6IFwiI0NDQ0NDQ1wiLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiNCRkJGQkZcIlxuICB9LFxuICBcInNhbmtleVwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwid2lkdGhcIjogNjAwLFxuICAgIFwiaGVpZ2h0XCI6IDQwMCxcbiAgICBcImxpbmtDb2xvclwiOiBcImdyYWRpZW50XCIsXG4gICAgXCJub2RlQWxpZ25tZW50XCI6IFwianVzdGlmeVwiLFxuICAgIFwic2hvd1ZhbHVlc1wiOiB0cnVlLFxuICAgIFwicHJlZml4XCI6IFwiXCIsXG4gICAgXCJzdWZmaXhcIjogXCJcIlxuICB9LFxuICBcImJsb2NrXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJwYWRkaW5nXCI6IDhcbiAgfSxcbiAgXCJwYWNrZXRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInJvd0hlaWdodFwiOiAzMixcbiAgICBcImJpdFdpZHRoXCI6IDMyLFxuICAgIFwiYml0c1BlclJvd1wiOiAzMixcbiAgICBcInNob3dCaXRzXCI6IHRydWUsXG4gICAgXCJwYWRkaW5nWFwiOiA1LFxuICAgIFwicGFkZGluZ1lcIjogNVxuICB9LFxuICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwicGFkZGluZ1wiOiA0MCxcbiAgICBcImljb25TaXplXCI6IDgwLFxuICAgIFwiZm9udFNpemVcIjogMTZcbiAgfSxcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIixcbiAgXCJsb29rXCI6IFwiY2xhc3NpY1wiLFxuICBcImhhbmREcmF3blNlZWRcIjogMCxcbiAgXCJsYXlvdXRcIjogXCJkYWdyZVwiLFxuICBcIm1heFRleHRTaXplXCI6IDVlNCxcbiAgXCJtYXhFZGdlc1wiOiA1MDAsXG4gIFwiZGFya01vZGVcIjogZmFsc2UsXG4gIFwiZm9udEZhbWlseVwiOiAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7JyxcbiAgXCJsb2dMZXZlbFwiOiA1LFxuICBcInNlY3VyaXR5TGV2ZWxcIjogXCJzdHJpY3RcIixcbiAgXCJzdGFydE9uTG9hZFwiOiB0cnVlLFxuICBcImFycm93TWFya2VyQWJzb2x1dGVcIjogZmFsc2UsXG4gIFwic2VjdXJlXCI6IFtcbiAgICBcInNlY3VyZVwiLFxuICAgIFwic2VjdXJpdHlMZXZlbFwiLFxuICAgIFwic3RhcnRPbkxvYWRcIixcbiAgICBcIm1heFRleHRTaXplXCIsXG4gICAgXCJzdXBwcmVzc0Vycm9yUmVuZGVyaW5nXCIsXG4gICAgXCJtYXhFZGdlc1wiXG4gIF0sXG4gIFwibGVnYWN5TWF0aE1MXCI6IGZhbHNlLFxuICBcImZvcmNlTGVnYWN5TWF0aE1MXCI6IGZhbHNlLFxuICBcImRldGVybWluaXN0aWNJZHNcIjogZmFsc2UsXG4gIFwiZm9udFNpemVcIjogMTYsXG4gIFwibWFya2Rvd25BdXRvV3JhcFwiOiB0cnVlLFxuICBcInN1cHByZXNzRXJyb3JSZW5kZXJpbmdcIjogZmFsc2Vcbn07XG5cbi8vIHNyYy9kZWZhdWx0Q29uZmlnLnRzXG52YXIgY29uZmlnID0ge1xuICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQsXG4gIC8vIFNldCwgZXZlbiB0aG91Z2ggdGhleSdyZSBgdW5kZWZpbmVkYCBzbyB0aGF0IGBjb25maWdLZXlzYCBmaW5kcyB0aGVzZSBrZXlzXG4gIC8vIFRPRE86IFNob3VsZCB3ZSByZXBsYWNlIHRoZXNlIHdpdGggYG51bGxgIHNvIHRoYXQgdGhleSBjYW4gZ28gaW4gdGhlIEpTT04gU2NoZW1hP1xuICBkZXRlcm1pbmlzdGljSURTZWVkOiB2b2lkIDAsXG4gIGVsazoge1xuICAgIG1lcmdlRWRnZXM6IGZhbHNlLFxuICAgIG5vZGVQbGFjZW1lbnRTdHJhdGVneTogXCJTSU1QTEVcIlxuICB9LFxuICB0aGVtZUNTUzogdm9pZCAwLFxuICAvLyBhZGQgbm9uLUpTT04gZGVmYXVsdCBjb25maWcgdmFsdWVzXG4gIHRoZW1lVmFyaWFibGVzOiB0aGVtZXNfZGVmYXVsdC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksXG4gIHNlcXVlbmNlOiB7XG4gICAgLi4uY29uZmlnX3NjaGVtYV9kZWZhdWx0LnNlcXVlbmNlLFxuICAgIG1lc3NhZ2VGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5tZXNzYWdlRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMubWVzc2FnZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLm1lc3NhZ2VGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwibWVzc2FnZUZvbnRcIiksXG4gICAgbm90ZUZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLm5vdGVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5ub3RlRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMubm90ZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJub3RlRm9udFwiKSxcbiAgICBhY3RvckZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmFjdG9yRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuYWN0b3JGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5hY3RvckZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJhY3RvckZvbnRcIilcbiAgfSxcbiAgZ2FudHQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQuZ2FudHQsXG4gICAgdGlja0ludGVydmFsOiB2b2lkIDAsXG4gICAgdXNlV2lkdGg6IHZvaWQgMFxuICAgIC8vIGNhbiBwcm9iYWJseSBiZSByZW1vdmVkIHNpbmNlIGBjb25maWdLZXlzYCBhbHJlYWR5IGluY2x1ZGVzIHRoaXNcbiAgfSxcbiAgYzQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQuYzQsXG4gICAgdXNlV2lkdGg6IHZvaWQgMCxcbiAgICBwZXJzb25Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5wZXJzb25Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5wZXJzb25Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5wZXJzb25Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwicGVyc29uRm9udFwiKSxcbiAgICBleHRlcm5hbF9wZXJzb25Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9wZXJzb25Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9wZXJzb25Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfcGVyc29uRm9udFwiKSxcbiAgICBzeXN0ZW1Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwic3lzdGVtRm9udFwiKSxcbiAgICBleHRlcm5hbF9zeXN0ZW1Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfc3lzdGVtRm9udFwiKSxcbiAgICBzeXN0ZW1fZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1fZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1fZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwic3lzdGVtX2RiRm9udFwiKSxcbiAgICBleHRlcm5hbF9zeXN0ZW1fZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFwiKSxcbiAgICBzeXN0ZW1fcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1fcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwic3lzdGVtX3F1ZXVlRm9udFwiKSxcbiAgICBleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFwiKSxcbiAgICBjb250YWluZXJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29udGFpbmVyRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb250YWluZXJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29udGFpbmVyRm9udFwiKSxcbiAgICBjb250YWluZXJfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29udGFpbmVyX2RiRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb250YWluZXJfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFwiKSxcbiAgICBjb250YWluZXJfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29udGFpbmVyX3F1ZXVlRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFwiKSxcbiAgICBjb21wb25lbnRGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29tcG9uZW50Rm9udFwiKSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udFwiKSxcbiAgICBjb21wb25lbnRfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29tcG9uZW50X2RiRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFwiKSxcbiAgICBjb21wb25lbnRfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29tcG9uZW50X3F1ZXVlRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFwiKSxcbiAgICBib3VuZGFyeUZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuYm91bmRhcnlGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5ib3VuZGFyeUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJib3VuZGFyeUZvbnRcIiksXG4gICAgbWVzc2FnZUZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLm1lc3NhZ2VGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5tZXNzYWdlRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMubWVzc2FnZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJtZXNzYWdlRm9udFwiKVxuICB9LFxuICBwaWU6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQucGllLFxuICAgIHVzZVdpZHRoOiA5ODRcbiAgfSxcbiAgeHlDaGFydDoge1xuICAgIC4uLmNvbmZpZ19zY2hlbWFfZGVmYXVsdC54eUNoYXJ0LFxuICAgIHVzZVdpZHRoOiB2b2lkIDBcbiAgfSxcbiAgcmVxdWlyZW1lbnQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQucmVxdWlyZW1lbnQsXG4gICAgdXNlV2lkdGg6IHZvaWQgMFxuICB9LFxuICBwYWNrZXQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQucGFja2V0XG4gIH1cbn07XG52YXIga2V5aWZ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob2JqLCBwcmVmaXggPSBcIlwiKSA9PiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgocmVzLCBlbCkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmpbZWxdKSkge1xuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9ialtlbF0gPT09IFwib2JqZWN0XCIgJiYgb2JqW2VsXSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBbLi4ucmVzLCBwcmVmaXggKyBlbCwgLi4ua2V5aWZ5KG9ialtlbF0sIFwiXCIpXTtcbiAgfVxuICByZXR1cm4gWy4uLnJlcywgcHJlZml4ICsgZWxdO1xufSwgW10pLCBcImtleWlmeVwiKTtcbnZhciBjb25maWdLZXlzID0gbmV3IFNldChrZXlpZnkoY29uZmlnLCBcIlwiKSk7XG52YXIgZGVmYXVsdENvbmZpZ19kZWZhdWx0ID0gY29uZmlnO1xuXG4vLyBzcmMvdXRpbHMvc2FuaXRpemVEaXJlY3RpdmUudHNcbnZhciBzYW5pdGl6ZURpcmVjdGl2ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFyZ3MpID0+IHtcbiAgbG9nLmRlYnVnKFwic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGhcIiwgYXJncyk7XG4gIGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICBhcmdzLmZvckVhY2goKGFyZykgPT4gc2FuaXRpemVEaXJlY3RpdmUoYXJnKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFyZ3MpKSB7XG4gICAgbG9nLmRlYnVnKFwiQ2hlY2tpbmcga2V5XCIsIGtleSk7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiX19cIikgfHwga2V5LmluY2x1ZGVzKFwicHJvdG9cIikgfHwga2V5LmluY2x1ZGVzKFwiY29uc3RyXCIpIHx8ICFjb25maWdLZXlzLmhhcyhrZXkpIHx8IGFyZ3Nba2V5XSA9PSBudWxsKSB7XG4gICAgICBsb2cuZGVidWcoXCJzYW5pdGl6ZSBkZWxldGluZyBrZXk6IFwiLCBrZXkpO1xuICAgICAgZGVsZXRlIGFyZ3Nba2V5XTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZ3Nba2V5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbG9nLmRlYnVnKFwic2FuaXRpemluZyBvYmplY3RcIiwga2V5KTtcbiAgICAgIHNhbml0aXplRGlyZWN0aXZlKGFyZ3Nba2V5XSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgY3NzTWF0Y2hlcnMgPSBbXCJ0aGVtZUNTU1wiLCBcImZvbnRGYW1pbHlcIiwgXCJhbHRGb250RmFtaWx5XCJdO1xuICAgIGZvciAoY29uc3QgY3NzS2V5IG9mIGNzc01hdGNoZXJzKSB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKGNzc0tleSkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwic2FuaXRpemluZyBjc3Mgb3B0aW9uXCIsIGtleSk7XG4gICAgICAgIGFyZ3Nba2V5XSA9IHNhbml0aXplQ3NzKGFyZ3Nba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhcmdzLnRoZW1lVmFyaWFibGVzKSB7XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGFyZ3MudGhlbWVWYXJpYWJsZXMpKSB7XG4gICAgICBjb25zdCB2YWwgPSBhcmdzLnRoZW1lVmFyaWFibGVzW2tdO1xuICAgICAgaWYgKHZhbD8ubWF0Y2ggJiYgIXZhbC5tYXRjaCgvXltcXGQgXCIjJSgpLC47QS1aYS16XSskLykpIHtcbiAgICAgICAgYXJncy50aGVtZVZhcmlhYmxlc1trXSA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhcIkFmdGVyIHNhbml0aXphdGlvblwiLCBhcmdzKTtcbn0sIFwic2FuaXRpemVEaXJlY3RpdmVcIik7XG52YXIgc2FuaXRpemVDc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdHIpID0+IHtcbiAgbGV0IHN0YXJ0Q250ID0gMDtcbiAgbGV0IGVuZENudCA9IDA7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzdHIpIHtcbiAgICBpZiAoc3RhcnRDbnQgPCBlbmRDbnQpIHtcbiAgICAgIHJldHVybiBcInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH1cIjtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgPT09IFwie1wiKSB7XG4gICAgICBzdGFydENudCsrO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gXCJ9XCIpIHtcbiAgICAgIGVuZENudCsrO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhcnRDbnQgIT09IGVuZENudCkge1xuICAgIHJldHVybiBcInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH1cIjtcbiAgfVxuICByZXR1cm4gc3RyO1xufSwgXCJzYW5pdGl6ZUNzc1wiKTtcblxuLy8gc3JjL2NvbmZpZy50c1xudmFyIGRlZmF1bHRDb25maWcgPSBPYmplY3QuZnJlZXplKGRlZmF1bHRDb25maWdfZGVmYXVsdCk7XG52YXIgc2l0ZUNvbmZpZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBkZWZhdWx0Q29uZmlnKTtcbnZhciBjb25maWdGcm9tSW5pdGlhbGl6ZTtcbnZhciBkaXJlY3RpdmVzID0gW107XG52YXIgY3VycmVudENvbmZpZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBkZWZhdWx0Q29uZmlnKTtcbnZhciB1cGRhdGVDdXJyZW50Q29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2l0ZUNmZywgX2RpcmVjdGl2ZXMpID0+IHtcbiAgbGV0IGNmZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBzaXRlQ2ZnKTtcbiAgbGV0IHN1bU9mRGlyZWN0aXZlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGQgb2YgX2RpcmVjdGl2ZXMpIHtcbiAgICBzYW5pdGl6ZShkKTtcbiAgICBzdW1PZkRpcmVjdGl2ZXMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChzdW1PZkRpcmVjdGl2ZXMsIGQpO1xuICB9XG4gIGNmZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KGNmZywgc3VtT2ZEaXJlY3RpdmVzKTtcbiAgaWYgKHN1bU9mRGlyZWN0aXZlcy50aGVtZSAmJiBzdW1PZkRpcmVjdGl2ZXMudGhlbWUgaW4gdGhlbWVzX2RlZmF1bHQpIHtcbiAgICBjb25zdCB0bXBDb25maWdGcm9tSW5pdGlhbGl6ZSA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBjb25maWdGcm9tSW5pdGlhbGl6ZSk7XG4gICAgY29uc3QgdGhlbWVWYXJpYWJsZXMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChcbiAgICAgIHRtcENvbmZpZ0Zyb21Jbml0aWFsaXplLnRoZW1lVmFyaWFibGVzIHx8IHt9LFxuICAgICAgc3VtT2ZEaXJlY3RpdmVzLnRoZW1lVmFyaWFibGVzXG4gICAgKTtcbiAgICBpZiAoY2ZnLnRoZW1lICYmIGNmZy50aGVtZSBpbiB0aGVtZXNfZGVmYXVsdCkge1xuICAgICAgY2ZnLnRoZW1lVmFyaWFibGVzID0gdGhlbWVzX2RlZmF1bHRbY2ZnLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0aGVtZVZhcmlhYmxlcyk7XG4gICAgfVxuICB9XG4gIGN1cnJlbnRDb25maWcgPSBjZmc7XG4gIGNoZWNrQ29uZmlnKGN1cnJlbnRDb25maWcpO1xuICByZXR1cm4gY3VycmVudENvbmZpZztcbn0sIFwidXBkYXRlQ3VycmVudENvbmZpZ1wiKTtcbnZhciBzZXRTaXRlQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29uZikgPT4ge1xuICBzaXRlQ29uZmlnID0gYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoe30sIGRlZmF1bHRDb25maWcpO1xuICBzaXRlQ29uZmlnID0gYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoc2l0ZUNvbmZpZywgY29uZik7XG4gIGlmIChjb25mLnRoZW1lICYmIHRoZW1lc19kZWZhdWx0W2NvbmYudGhlbWVdKSB7XG4gICAgc2l0ZUNvbmZpZy50aGVtZVZhcmlhYmxlcyA9IHRoZW1lc19kZWZhdWx0W2NvbmYudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGNvbmYudGhlbWVWYXJpYWJsZXMpO1xuICB9XG4gIHVwZGF0ZUN1cnJlbnRDb25maWcoc2l0ZUNvbmZpZywgZGlyZWN0aXZlcyk7XG4gIHJldHVybiBzaXRlQ29uZmlnO1xufSwgXCJzZXRTaXRlQ29uZmlnXCIpO1xudmFyIHNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmYpID0+IHtcbiAgY29uZmlnRnJvbUluaXRpYWxpemUgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdCh7fSwgY29uZik7XG59LCBcInNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZVwiKTtcbnZhciB1cGRhdGVTaXRlQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29uZikgPT4ge1xuICBzaXRlQ29uZmlnID0gYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoc2l0ZUNvbmZpZywgY29uZik7XG4gIHVwZGF0ZUN1cnJlbnRDb25maWcoc2l0ZUNvbmZpZywgZGlyZWN0aXZlcyk7XG4gIHJldHVybiBzaXRlQ29uZmlnO1xufSwgXCJ1cGRhdGVTaXRlQ29uZmlnXCIpO1xudmFyIGdldFNpdGVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmV0dXJuIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBzaXRlQ29uZmlnKTtcbn0sIFwiZ2V0U2l0ZUNvbmZpZ1wiKTtcbnZhciBzZXRDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25mKSA9PiB7XG4gIGNoZWNrQ29uZmlnKGNvbmYpO1xuICBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChjdXJyZW50Q29uZmlnLCBjb25mKTtcbiAgcmV0dXJuIGdldENvbmZpZygpO1xufSwgXCJzZXRDb25maWdcIik7XG52YXIgZ2V0Q29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIHJldHVybiBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdCh7fSwgY3VycmVudENvbmZpZyk7XG59LCBcImdldENvbmZpZ1wiKTtcbnZhciBzYW5pdGl6ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFtcInNlY3VyZVwiLCAuLi5zaXRlQ29uZmlnLnNlY3VyZSA/PyBbXV0uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKE9iamVjdC5oYXNPd24ob3B0aW9ucywga2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICR7a2V5fWAsIG9wdGlvbnNba2V5XSk7XG4gICAgICBkZWxldGUgb3B0aW9uc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIl9fXCIpKSB7XG4gICAgICBkZWxldGUgb3B0aW9uc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc1trZXldID09PSBcInN0cmluZ1wiICYmIChvcHRpb25zW2tleV0uaW5jbHVkZXMoXCI8XCIpIHx8IG9wdGlvbnNba2V5XS5pbmNsdWRlcyhcIj5cIikgfHwgb3B0aW9uc1trZXldLmluY2x1ZGVzKFwidXJsKGRhdGE6XCIpKSkge1xuICAgICAgZGVsZXRlIG9wdGlvbnNba2V5XTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW2tleV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHNhbml0aXplKG9wdGlvbnNba2V5XSk7XG4gICAgfVxuICB9KTtcbn0sIFwic2FuaXRpemVcIik7XG52YXIgYWRkRGlyZWN0aXZlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGlyZWN0aXZlKSA9PiB7XG4gIHNhbml0aXplRGlyZWN0aXZlKGRpcmVjdGl2ZSk7XG4gIGlmIChkaXJlY3RpdmUuZm9udEZhbWlseSAmJiAhZGlyZWN0aXZlLnRoZW1lVmFyaWFibGVzPy5mb250RmFtaWx5KSB7XG4gICAgZGlyZWN0aXZlLnRoZW1lVmFyaWFibGVzID0ge1xuICAgICAgLi4uZGlyZWN0aXZlLnRoZW1lVmFyaWFibGVzLFxuICAgICAgZm9udEZhbWlseTogZGlyZWN0aXZlLmZvbnRGYW1pbHlcbiAgICB9O1xuICB9XG4gIGRpcmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpO1xuICB1cGRhdGVDdXJyZW50Q29uZmlnKHNpdGVDb25maWcsIGRpcmVjdGl2ZXMpO1xufSwgXCJhZGREaXJlY3RpdmVcIik7XG52YXIgcmVzZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWcyID0gc2l0ZUNvbmZpZykgPT4ge1xuICBkaXJlY3RpdmVzID0gW107XG4gIHVwZGF0ZUN1cnJlbnRDb25maWcoY29uZmlnMiwgZGlyZWN0aXZlcyk7XG59LCBcInJlc2V0XCIpO1xudmFyIENvbmZpZ1dhcm5pbmcgPSB7XG4gIExBWllfTE9BRF9ERVBSRUNBVEVEOiBcIlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC5cIlxufTtcbnZhciBpc3N1ZWRXYXJuaW5ncyA9IHt9O1xudmFyIGlzc3VlV2FybmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHdhcm5pbmcpID0+IHtcbiAgaWYgKGlzc3VlZFdhcm5pbmdzW3dhcm5pbmddKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZy53YXJuKENvbmZpZ1dhcm5pbmdbd2FybmluZ10pO1xuICBpc3N1ZWRXYXJuaW5nc1t3YXJuaW5nXSA9IHRydWU7XG59LCBcImlzc3VlV2FybmluZ1wiKTtcbnZhciBjaGVja0NvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZzIpID0+IHtcbiAgaWYgKCFjb25maWcyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb25maWcyLmxhenlMb2FkZWREaWFncmFtcyB8fCBjb25maWcyLmxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwKSB7XG4gICAgaXNzdWVXYXJuaW5nKFwiTEFaWV9MT0FEX0RFUFJFQ0FURURcIik7XG4gIH1cbn0sIFwiY2hlY2tDb25maWdcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9jb21tb24vY29tbW9uLnRzXG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gXCJkb21wdXJpZnlcIjtcbnZhciBsaW5lQnJlYWtSZWdleCA9IC88YnJcXHMqXFwvPz4vZ2k7XG52YXIgZ2V0Um93cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHMpID0+IHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIFtcIlwiXTtcbiAgfVxuICBjb25zdCBzdHIgPSBicmVha1RvUGxhY2Vob2xkZXIocykucmVwbGFjZSgvXFxcXG4vZywgXCIjYnIjXCIpO1xuICByZXR1cm4gc3RyLnNwbGl0KFwiI2JyI1wiKTtcbn0sIFwiZ2V0Um93c1wiKTtcbnZhciBzZXR1cERvbXB1cmlmeUhvb2tzSWZOb3RTZXR1cCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBsZXQgc2V0dXAgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIXNldHVwKSB7XG4gICAgICBzZXR1cERvbXB1cmlmeUhvb2tzKCk7XG4gICAgICBzZXR1cCA9IHRydWU7XG4gICAgfVxuICB9O1xufSkoKTtcbmZ1bmN0aW9uIHNldHVwRG9tcHVyaWZ5SG9va3MoKSB7XG4gIGNvbnN0IFRFTVBPUkFSWV9BVFRSSUJVVEUgPSBcImRhdGEtdGVtcC1ocmVmLXRhcmdldFwiO1xuICBET01QdXJpZnkuYWRkSG9vayhcImJlZm9yZVNhbml0aXplQXR0cmlidXRlc1wiLCAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnRhZ05hbWUgPT09IFwiQVwiICYmIG5vZGUuaGFzQXR0cmlidXRlKFwidGFyZ2V0XCIpKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShURU1QT1JBUllfQVRUUklCVVRFLCBub2RlLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKSA/PyBcIlwiKTtcbiAgICB9XG4gIH0pO1xuICBET01QdXJpZnkuYWRkSG9vayhcImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzXCIsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gXCJBXCIgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoVEVNUE9SQVJZX0FUVFJJQlVURSkpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIG5vZGUuZ2V0QXR0cmlidXRlKFRFTVBPUkFSWV9BVFRSSUJVVEUpID8/IFwiXCIpO1xuICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoVEVNUE9SQVJZX0FUVFJJQlVURSk7XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIikgPT09IFwiX2JsYW5rXCIpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJub29wZW5lclwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuX19uYW1lKHNldHVwRG9tcHVyaWZ5SG9va3MsIFwic2V0dXBEb21wdXJpZnlIb29rc1wiKTtcbnZhciByZW1vdmVTY3JpcHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgc2V0dXBEb21wdXJpZnlIb29rc0lmTm90U2V0dXAoKTtcbiAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IERPTVB1cmlmeS5zYW5pdGl6ZSh0eHQpO1xuICByZXR1cm4gc2FuaXRpemVkVGV4dDtcbn0sIFwicmVtb3ZlU2NyaXB0XCIpO1xudmFyIHNhbml0aXplTW9yZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgaWYgKGNvbmZpZzIuZmxvd2NoYXJ0Py5odG1sTGFiZWxzICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGxldmVsID0gY29uZmlnMi5zZWN1cml0eUxldmVsO1xuICAgIGlmIChsZXZlbCA9PT0gXCJhbnRpc2NyaXB0XCIgfHwgbGV2ZWwgPT09IFwic3RyaWN0XCIpIHtcbiAgICAgIHRleHQgPSByZW1vdmVTY3JpcHQodGV4dCk7XG4gICAgfSBlbHNlIGlmIChsZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgICB0ZXh0ID0gYnJlYWtUb1BsYWNlaG9sZGVyKHRleHQpO1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC89L2csIFwiJmVxdWFscztcIik7XG4gICAgICB0ZXh0ID0gcGxhY2Vob2xkZXJUb0JyZWFrKHRleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dDtcbn0sIFwic2FuaXRpemVNb3JlXCIpO1xudmFyIHNhbml0aXplVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgaWYgKGNvbmZpZzIuZG9tcHVyaWZ5Q29uZmlnKSB7XG4gICAgdGV4dCA9IERPTVB1cmlmeS5zYW5pdGl6ZShzYW5pdGl6ZU1vcmUodGV4dCwgY29uZmlnMiksIGNvbmZpZzIuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHRleHQgPSBET01QdXJpZnkuc2FuaXRpemUoc2FuaXRpemVNb3JlKHRleHQsIGNvbmZpZzIpLCB7XG4gICAgICBGT1JCSURfVEFHUzogW1wic3R5bGVcIl1cbiAgICB9KS50b1N0cmluZygpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufSwgXCJzYW5pdGl6ZVRleHRcIik7XG52YXIgc2FuaXRpemVUZXh0T3JBcnJheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGEsIGNvbmZpZzIpID0+IHtcbiAgaWYgKHR5cGVvZiBhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHNhbml0aXplVGV4dChhLCBjb25maWcyKTtcbiAgfVxuICByZXR1cm4gYS5mbGF0KCkubWFwKCh4KSA9PiBzYW5pdGl6ZVRleHQoeCwgY29uZmlnMikpO1xufSwgXCJzYW5pdGl6ZVRleHRPckFycmF5XCIpO1xudmFyIGhhc0JyZWFrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgcmV0dXJuIGxpbmVCcmVha1JlZ2V4LnRlc3QodGV4dCk7XG59LCBcImhhc0JyZWFrc1wiKTtcbnZhciBzcGxpdEJyZWFrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQuc3BsaXQobGluZUJyZWFrUmVnZXgpO1xufSwgXCJzcGxpdEJyZWFrc1wiKTtcbnZhciBwbGFjZWhvbGRlclRvQnJlYWsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzKSA9PiB7XG4gIHJldHVybiBzLnJlcGxhY2UoLyNiciMvZywgXCI8YnIvPlwiKTtcbn0sIFwicGxhY2Vob2xkZXJUb0JyZWFrXCIpO1xudmFyIGJyZWFrVG9QbGFjZWhvbGRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHMpID0+IHtcbiAgcmV0dXJuIHMucmVwbGFjZShsaW5lQnJlYWtSZWdleCwgXCIjYnIjXCIpO1xufSwgXCJicmVha1RvUGxhY2Vob2xkZXJcIik7XG52YXIgZ2V0VXJsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodXNlQWJzb2x1dGUpID0+IHtcbiAgbGV0IHVybCA9IFwiXCI7XG4gIGlmICh1c2VBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZUFsbCgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2VBbGwoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59LCBcImdldFVybFwiKTtcbnZhciBldmFsdWF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbCkgPT4gdmFsID09PSBmYWxzZSB8fCBbXCJmYWxzZVwiLCBcIm51bGxcIiwgXCIwXCJdLmluY2x1ZGVzKFN0cmluZyh2YWwpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSA/IGZhbHNlIDogdHJ1ZSwgXCJldmFsdWF0ZVwiKTtcbnZhciBnZXRNYXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKC4uLnZhbHVlcykge1xuICBjb25zdCBuZXdWYWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIE1hdGgubWF4KC4uLm5ld1ZhbHVlcyk7XG59LCBcImdldE1heFwiKTtcbnZhciBnZXRNaW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKC4uLnZhbHVlcykge1xuICBjb25zdCBuZXdWYWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIE1hdGgubWluKC4uLm5ld1ZhbHVlcyk7XG59LCBcImdldE1pblwiKTtcbnZhciBwYXJzZUdlbmVyaWNUeXBlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQpIHtcbiAgY29uc3QgaW5wdXRTZXRzID0gaW5wdXQuc3BsaXQoLygsKS8pO1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNldHMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdGhpc1NldCA9IGlucHV0U2V0c1tpXTtcbiAgICBpZiAodGhpc1NldCA9PT0gXCIsXCIgJiYgaSA+IDAgJiYgaSArIDEgPCBpbnB1dFNldHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1NldCA9IGlucHV0U2V0c1tpIC0gMV07XG4gICAgICBjb25zdCBuZXh0U2V0ID0gaW5wdXRTZXRzW2kgKyAxXTtcbiAgICAgIGlmIChzaG91bGRDb21iaW5lU2V0cyhwcmV2aW91c1NldCwgbmV4dFNldCkpIHtcbiAgICAgICAgdGhpc1NldCA9IHByZXZpb3VzU2V0ICsgXCIsXCIgKyBuZXh0U2V0O1xuICAgICAgICBpKys7XG4gICAgICAgIG91dHB1dC5wb3AoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0cHV0LnB1c2gocHJvY2Vzc1NldCh0aGlzU2V0KSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufSwgXCJwYXJzZUdlbmVyaWNUeXBlc1wiKTtcbnZhciBjb3VudE9jY3VycmVuY2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdHJpbmcsIHN1YnN0cmluZykgPT4ge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgc3RyaW5nLnNwbGl0KHN1YnN0cmluZykubGVuZ3RoIC0gMSk7XG59LCBcImNvdW50T2NjdXJyZW5jZVwiKTtcbnZhciBzaG91bGRDb21iaW5lU2V0cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHByZXZpb3VzU2V0LCBuZXh0U2V0KSA9PiB7XG4gIGNvbnN0IHByZXZDb3VudCA9IGNvdW50T2NjdXJyZW5jZShwcmV2aW91c1NldCwgXCJ+XCIpO1xuICBjb25zdCBuZXh0Q291bnQgPSBjb3VudE9jY3VycmVuY2UobmV4dFNldCwgXCJ+XCIpO1xuICByZXR1cm4gcHJldkNvdW50ID09PSAxICYmIG5leHRDb3VudCA9PT0gMTtcbn0sIFwic2hvdWxkQ29tYmluZVNldHNcIik7XG52YXIgcHJvY2Vzc1NldCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0KSA9PiB7XG4gIGNvbnN0IHRpbGRlQ291bnQgPSBjb3VudE9jY3VycmVuY2UoaW5wdXQsIFwiflwiKTtcbiAgbGV0IGhhc1N0YXJ0aW5nVGlsZGUgPSBmYWxzZTtcbiAgaWYgKHRpbGRlQ291bnQgPD0gMSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBpZiAodGlsZGVDb3VudCAlIDIgIT09IDAgJiYgaW5wdXQuc3RhcnRzV2l0aChcIn5cIikpIHtcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygxKTtcbiAgICBoYXNTdGFydGluZ1RpbGRlID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBjaGFycyA9IFsuLi5pbnB1dF07XG4gIGxldCBmaXJzdCA9IGNoYXJzLmluZGV4T2YoXCJ+XCIpO1xuICBsZXQgbGFzdCA9IGNoYXJzLmxhc3RJbmRleE9mKFwiflwiKTtcbiAgd2hpbGUgKGZpcnN0ICE9PSAtMSAmJiBsYXN0ICE9PSAtMSAmJiBmaXJzdCAhPT0gbGFzdCkge1xuICAgIGNoYXJzW2ZpcnN0XSA9IFwiPFwiO1xuICAgIGNoYXJzW2xhc3RdID0gXCI+XCI7XG4gICAgZmlyc3QgPSBjaGFycy5pbmRleE9mKFwiflwiKTtcbiAgICBsYXN0ID0gY2hhcnMubGFzdEluZGV4T2YoXCJ+XCIpO1xuICB9XG4gIGlmIChoYXNTdGFydGluZ1RpbGRlKSB7XG4gICAgY2hhcnMudW5zaGlmdChcIn5cIik7XG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7XG59LCBcInByb2Nlc3NTZXRcIik7XG52YXIgaXNNYXRoTUxTdXBwb3J0ZWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHdpbmRvdy5NYXRoTUxFbGVtZW50ICE9PSB2b2lkIDAsIFwiaXNNYXRoTUxTdXBwb3J0ZWRcIik7XG52YXIga2F0ZXhSZWdleCA9IC9cXCRcXCQoLiopXFwkXFwkL2c7XG52YXIgaGFzS2F0ZXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0ZXh0KSA9PiAodGV4dC5tYXRjaChrYXRleFJlZ2V4KT8ubGVuZ3RoID8/IDApID4gMCwgXCJoYXNLYXRleFwiKTtcbnZhciBjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAodGV4dCwgY29uZmlnMikgPT4ge1xuICB0ZXh0ID0gYXdhaXQgcmVuZGVyS2F0ZXgodGV4dCwgY29uZmlnMik7XG4gIGNvbnN0IGRpdkVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBkaXZFbGVtLmlubmVySFRNTCA9IHRleHQ7XG4gIGRpdkVsZW0uaWQgPSBcImthdGV4LXRlbXBcIjtcbiAgZGl2RWxlbS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgZGl2RWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgZGl2RWxlbS5zdHlsZS50b3AgPSBcIjBcIjtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xuICBib2R5Py5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgZGl2RWxlbSk7XG4gIGNvbnN0IGRpbSA9IHsgd2lkdGg6IGRpdkVsZW0uY2xpZW50V2lkdGgsIGhlaWdodDogZGl2RWxlbS5jbGllbnRIZWlnaHQgfTtcbiAgZGl2RWxlbS5yZW1vdmUoKTtcbiAgcmV0dXJuIGRpbTtcbn0sIFwiY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9uc1wiKTtcbnZhciByZW5kZXJLYXRleCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgaWYgKCFoYXNLYXRleCh0ZXh0KSkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIGlmICghKGlzTWF0aE1MU3VwcG9ydGVkKCkgfHwgY29uZmlnMi5sZWdhY3lNYXRoTUwgfHwgY29uZmlnMi5mb3JjZUxlZ2FjeU1hdGhNTCkpIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKGthdGV4UmVnZXgsIFwiTWF0aE1MIGlzIHVuc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXCIpO1xuICB9XG4gIGNvbnN0IHsgZGVmYXVsdDoga2F0ZXggfSA9IGF3YWl0IGltcG9ydChcImthdGV4XCIpO1xuICBjb25zdCBvdXRwdXRNb2RlID0gY29uZmlnMi5mb3JjZUxlZ2FjeU1hdGhNTCB8fCAhaXNNYXRoTUxTdXBwb3J0ZWQoKSAmJiBjb25maWcyLmxlZ2FjeU1hdGhNTCA/IFwiaHRtbEFuZE1hdGhtbFwiIDogXCJtYXRobWxcIjtcbiAgcmV0dXJuIHRleHQuc3BsaXQobGluZUJyZWFrUmVnZXgpLm1hcChcbiAgICAobGluZSkgPT4gaGFzS2F0ZXgobGluZSkgPyBgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiR7bGluZX08L2Rpdj5gIDogYDxkaXY+JHtsaW5lfTwvZGl2PmBcbiAgKS5qb2luKFwiXCIpLnJlcGxhY2UoXG4gICAga2F0ZXhSZWdleCxcbiAgICAoXywgYykgPT4ga2F0ZXgucmVuZGVyVG9TdHJpbmcoYywge1xuICAgICAgdGhyb3dPbkVycm9yOiB0cnVlLFxuICAgICAgZGlzcGxheU1vZGU6IHRydWUsXG4gICAgICBvdXRwdXQ6IG91dHB1dE1vZGVcbiAgICB9KS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XFwvYW5ub3RhdGlvbj4vZywgXCJcIilcbiAgKTtcbn0sIFwicmVuZGVyS2F0ZXhcIik7XG52YXIgY29tbW9uX2RlZmF1bHQgPSB7XG4gIGdldFJvd3MsXG4gIHNhbml0aXplVGV4dCxcbiAgc2FuaXRpemVUZXh0T3JBcnJheSxcbiAgaGFzQnJlYWtzLFxuICBzcGxpdEJyZWFrcyxcbiAgbGluZUJyZWFrUmVnZXgsXG4gIHJlbW92ZVNjcmlwdCxcbiAgZ2V0VXJsLFxuICBldmFsdWF0ZSxcbiAgZ2V0TWF4LFxuICBnZXRNaW5cbn07XG5cbi8vIHNyYy9zZXR1cEdyYXBoVmlld2JveC5qc1xudmFyIGQzQXR0cnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGQzRWxlbSwgYXR0cnMpIHtcbiAgZm9yIChsZXQgYXR0ciBvZiBhdHRycykge1xuICAgIGQzRWxlbS5hdHRyKGF0dHJbMF0sIGF0dHJbMV0pO1xuICB9XG59LCBcImQzQXR0cnNcIik7XG52YXIgY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihoZWlnaHQsIHdpZHRoLCB1c2VNYXhXaWR0aCkge1xuICBsZXQgYXR0cnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBpZiAodXNlTWF4V2lkdGgpIHtcbiAgICBhdHRycy5zZXQoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgYXR0cnMuc2V0KFwic3R5bGVcIiwgYG1heC13aWR0aDogJHt3aWR0aH1weDtgKTtcbiAgfSBlbHNlIHtcbiAgICBhdHRycy5zZXQoXCJoZWlnaHRcIiwgaGVpZ2h0KTtcbiAgICBhdHRycy5zZXQoXCJ3aWR0aFwiLCB3aWR0aCk7XG4gIH1cbiAgcmV0dXJuIGF0dHJzO1xufSwgXCJjYWxjdWxhdGVTdmdTaXplQXR0cnNcIik7XG52YXIgY29uZmlndXJlU3ZnU2l6ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3ZnRWxlbSwgaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpIHtcbiAgY29uc3QgYXR0cnMgPSBjYWxjdWxhdGVTdmdTaXplQXR0cnMoaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpO1xuICBkM0F0dHJzKHN2Z0VsZW0sIGF0dHJzKTtcbn0sIFwiY29uZmlndXJlU3ZnU2l6ZVwiKTtcbnZhciBzZXR1cEdyYXBoVmlld2JveCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZ3JhcGgsIHN2Z0VsZW0sIHBhZGRpbmcsIHVzZU1heFdpZHRoKSB7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Z0VsZW0ubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgc1dpZHRoID0gc3ZnQm91bmRzLndpZHRoO1xuICBjb25zdCBzSGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodDtcbiAgbG9nLmluZm8oYFNWRyBib3VuZHM6ICR7c1dpZHRofXgke3NIZWlnaHR9YCwgc3ZnQm91bmRzKTtcbiAgbGV0IHdpZHRoID0gMDtcbiAgbGV0IGhlaWdodCA9IDA7XG4gIGxvZy5pbmZvKGBHcmFwaCBib3VuZHM6ICR7d2lkdGh9eCR7aGVpZ2h0fWAsIGdyYXBoKTtcbiAgd2lkdGggPSBzV2lkdGggKyBwYWRkaW5nICogMjtcbiAgaGVpZ2h0ID0gc0hlaWdodCArIHBhZGRpbmcgKiAyO1xuICBsb2cuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7d2lkdGh9eCR7aGVpZ2h0fWApO1xuICBjb25maWd1cmVTdmdTaXplKHN2Z0VsZW0sIGhlaWdodCwgd2lkdGgsIHVzZU1heFdpZHRoKTtcbiAgY29uc3QgdkJveCA9IGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLndpZHRoICsgMiAqIHBhZGRpbmd9ICR7c3ZnQm91bmRzLmhlaWdodCArIDIgKiBwYWRkaW5nfWA7XG4gIHN2Z0VsZW0uYXR0cihcInZpZXdCb3hcIiwgdkJveCk7XG59LCBcInNldHVwR3JhcGhWaWV3Ym94XCIpO1xuXG4vLyBzcmMvc3R5bGVzLnRzXG52YXIgdGhlbWVzID0ge307XG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHlwZSwgdXNlclN0eWxlcywgb3B0aW9ucykgPT4ge1xuICBsZXQgZGlhZ3JhbVN0eWxlcyA9IFwiXCI7XG4gIGlmICh0eXBlIGluIHRoZW1lcyAmJiB0aGVtZXNbdHlwZV0pIHtcbiAgICBkaWFncmFtU3R5bGVzID0gdGhlbWVzW3R5cGVdKG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGxvZy53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHt0eXBlfWApO1xuICB9XG4gIHJldHVybiBgICYge1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gICAgZm9udC1zaXplOiAke29wdGlvbnMuZm9udFNpemV9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9XG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAmIC5lcnJvci1pY29uIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZXJyb3JCa2dDb2xvcn07XG4gIH1cbiAgJiAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmVycm9yVGV4dENvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5lcnJvclRleHRDb2xvcn07XG4gIH1cblxuICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG4gICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDMuNXB4XG4gIH1cbiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG4gICYgLmVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAwO1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cbiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgJiAubWFya2VyIHtcbiAgICBmaWxsOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICB9XG4gICYgLm1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgfVxuXG4gICYgc3ZnIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLmZvbnRTaXplfTtcbiAgfVxuICAgJiBwIHtcbiAgICBtYXJnaW46IDBcbiAgIH1cblxuICAke2RpYWdyYW1TdHlsZXN9XG5cbiAgJHt1c2VyU3R5bGVzfVxuYDtcbn0sIFwiZ2V0U3R5bGVzXCIpO1xudmFyIGFkZFN0eWxlc0ZvckRpYWdyYW0gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eXBlLCBkaWFncmFtVGhlbWUpID0+IHtcbiAgaWYgKGRpYWdyYW1UaGVtZSAhPT0gdm9pZCAwKSB7XG4gICAgdGhlbWVzW3R5cGVdID0gZGlhZ3JhbVRoZW1lO1xuICB9XG59LCBcImFkZFN0eWxlc0ZvckRpYWdyYW1cIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9jb21tb24vY29tbW9uRGIudHNcbnZhciBjb21tb25EYl9leHBvcnRzID0ge307XG5fX2V4cG9ydChjb21tb25EYl9leHBvcnRzLCB7XG4gIGNsZWFyOiAoKSA9PiBjbGVhcixcbiAgZ2V0QWNjRGVzY3JpcHRpb246ICgpID0+IGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZTogKCkgPT4gZ2V0QWNjVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZTogKCkgPT4gZ2V0RGlhZ3JhbVRpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbjogKCkgPT4gc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlOiAoKSA9PiBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlOiAoKSA9PiBzZXREaWFncmFtVGl0bGVcbn0pO1xudmFyIGFjY1RpdGxlID0gXCJcIjtcbnZhciBkaWFncmFtVGl0bGUgPSBcIlwiO1xudmFyIGFjY0Rlc2NyaXB0aW9uID0gXCJcIjtcbnZhciBzYW5pdGl6ZVRleHQyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBzYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIGNsZWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGFjY1RpdGxlID0gXCJcIjtcbiAgYWNjRGVzY3JpcHRpb24gPSBcIlwiO1xuICBkaWFncmFtVGl0bGUgPSBcIlwiO1xufSwgXCJjbGVhclwiKTtcbnZhciBzZXRBY2NUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICBhY2NUaXRsZSA9IHNhbml0aXplVGV4dDIodHh0KS5yZXBsYWNlKC9eXFxzKy9nLCBcIlwiKTtcbn0sIFwic2V0QWNjVGl0bGVcIik7XG52YXIgZ2V0QWNjVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGFjY1RpdGxlLCBcImdldEFjY1RpdGxlXCIpO1xudmFyIHNldEFjY0Rlc2NyaXB0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIGFjY0Rlc2NyaXB0aW9uID0gc2FuaXRpemVUZXh0Mih0eHQpLnJlcGxhY2UoL1xcblxccysvZywgXCJcXG5cIik7XG59LCBcInNldEFjY0Rlc2NyaXB0aW9uXCIpO1xudmFyIGdldEFjY0Rlc2NyaXB0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBhY2NEZXNjcmlwdGlvbiwgXCJnZXRBY2NEZXNjcmlwdGlvblwiKTtcbnZhciBzZXREaWFncmFtVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgZGlhZ3JhbVRpdGxlID0gc2FuaXRpemVUZXh0Mih0eHQpO1xufSwgXCJzZXREaWFncmFtVGl0bGVcIik7XG52YXIgZ2V0RGlhZ3JhbVRpdGxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBkaWFncmFtVGl0bGUsIFwiZ2V0RGlhZ3JhbVRpdGxlXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZGlhZ3JhbUFQSS50c1xudmFyIGxvZzIgPSBsb2c7XG52YXIgc2V0TG9nTGV2ZWwyID0gc2V0TG9nTGV2ZWw7XG52YXIgZ2V0Q29uZmlnMiA9IGdldENvbmZpZztcbnZhciBzZXRDb25maWcyID0gc2V0Q29uZmlnO1xudmFyIGRlZmF1bHRDb25maWcyID0gZGVmYXVsdENvbmZpZztcbnZhciBzYW5pdGl6ZVRleHQzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCkgPT4gc2FuaXRpemVUZXh0KHRleHQsIGdldENvbmZpZzIoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIHNldHVwR3JhcGhWaWV3Ym94MiA9IHNldHVwR3JhcGhWaWV3Ym94O1xudmFyIGdldENvbW1vbkRiID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIHJldHVybiBjb21tb25EYl9leHBvcnRzO1xufSwgXCJnZXRDb21tb25EYlwiKTtcbnZhciBkaWFncmFtcyA9IHt9O1xudmFyIHJlZ2lzdGVyRGlhZ3JhbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkLCBkaWFncmFtLCBkZXRlY3RvcikgPT4ge1xuICBpZiAoZGlhZ3JhbXNbaWRdKSB7XG4gICAgbG9nMi53YXJuKGBEaWFncmFtIHdpdGggaWQgJHtpZH0gYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKTtcbiAgfVxuICBkaWFncmFtc1tpZF0gPSBkaWFncmFtO1xuICBpZiAoZGV0ZWN0b3IpIHtcbiAgICBhZGREZXRlY3RvcihpZCwgZGV0ZWN0b3IpO1xuICB9XG4gIGFkZFN0eWxlc0ZvckRpYWdyYW0oaWQsIGRpYWdyYW0uc3R5bGVzKTtcbiAgZGlhZ3JhbS5pbmplY3RVdGlscz8uKFxuICAgIGxvZzIsXG4gICAgc2V0TG9nTGV2ZWwyLFxuICAgIGdldENvbmZpZzIsXG4gICAgc2FuaXRpemVUZXh0MyxcbiAgICBzZXR1cEdyYXBoVmlld2JveDIsXG4gICAgZ2V0Q29tbW9uRGIoKSxcbiAgICAoKSA9PiB7XG4gICAgfVxuICApO1xufSwgXCJyZWdpc3RlckRpYWdyYW1cIik7XG52YXIgZ2V0RGlhZ3JhbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5hbWUpID0+IHtcbiAgaWYgKG5hbWUgaW4gZGlhZ3JhbXMpIHtcbiAgICByZXR1cm4gZGlhZ3JhbXNbbmFtZV07XG4gIH1cbiAgdGhyb3cgbmV3IERpYWdyYW1Ob3RGb3VuZEVycm9yKG5hbWUpO1xufSwgXCJnZXREaWFncmFtXCIpO1xudmFyIERpYWdyYW1Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiRGlhZ3JhbU5vdEZvdW5kRXJyb3JcIik7XG4gIH1cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKGBEaWFncmFtICR7bmFtZX0gbm90IGZvdW5kLmApO1xuICB9XG59O1xuXG5leHBvcnQge1xuICBfX25hbWUsXG4gIF9fZXhwb3J0LFxuICBsb2csXG4gIHNldExvZ0xldmVsLFxuICBmcm9udE1hdHRlclJlZ2V4LFxuICBkaXJlY3RpdmVSZWdleCxcbiAgVW5rbm93bkRpYWdyYW1FcnJvcixcbiAgZGV0ZWN0b3JzLFxuICBkZXRlY3RUeXBlLFxuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyxcbiAgZ2V0RGlhZ3JhbUxvYWRlcixcbiAgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQsXG4gIGdldFRoZW1lVmFyaWFibGVzMyBhcyBnZXRUaGVtZVZhcmlhYmxlcyxcbiAgdGhlbWVzX2RlZmF1bHQsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgc2FuaXRpemVEaXJlY3RpdmUsXG4gIGRlZmF1bHRDb25maWcsXG4gIHNldFNpdGVDb25maWcsXG4gIHNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZSxcbiAgdXBkYXRlU2l0ZUNvbmZpZyxcbiAgZ2V0U2l0ZUNvbmZpZyxcbiAgc2V0Q29uZmlnLFxuICBnZXRDb25maWcsXG4gIGFkZERpcmVjdGl2ZSxcbiAgcmVzZXQsXG4gIGxpbmVCcmVha1JlZ2V4LFxuICBzYW5pdGl6ZVRleHQsXG4gIGV2YWx1YXRlLFxuICBwYXJzZUdlbmVyaWNUeXBlcyxcbiAgaGFzS2F0ZXgsXG4gIGNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMsXG4gIHJlbmRlckthdGV4LFxuICBjb21tb25fZGVmYXVsdCxcbiAgY29uZmlndXJlU3ZnU2l6ZSxcbiAgc2V0dXBHcmFwaFZpZXdib3gsXG4gIHN0eWxlc19kZWZhdWx0LFxuICBjbGVhcixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBjb21tb25EYl9leHBvcnRzLFxuICBnZXRDb25maWcyLFxuICBzZXRDb25maWcyLFxuICBkZWZhdWx0Q29uZmlnMixcbiAgc2V0dXBHcmFwaFZpZXdib3gyLFxuICByZWdpc3RlckRpYWdyYW0sXG4gIGdldERpYWdyYW1cbn07XG4iLAogICAgImNvbnN0IGRlZmF1bHRJY29uRGltZW5zaW9ucyA9IE9iamVjdC5mcmVlemUoXG4gIHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNlxuICB9XG4pO1xuY29uc3QgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgcm90YXRlOiAwLFxuICB2RmxpcDogZmFsc2UsXG4gIGhGbGlwOiBmYWxzZVxufSk7XG5jb25zdCBkZWZhdWx0SWNvblByb3BzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIC4uLmRlZmF1bHRJY29uRGltZW5zaW9ucyxcbiAgLi4uZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNcbn0pO1xuY29uc3QgZGVmYXVsdEV4dGVuZGVkSWNvblByb3BzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIC4uLmRlZmF1bHRJY29uUHJvcHMsXG4gIGJvZHk6IFwiXCIsXG4gIGhpZGRlbjogZmFsc2Vcbn0pO1xuXG5leHBvcnQgeyBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHMsIGRlZmF1bHRJY29uRGltZW5zaW9ucywgZGVmYXVsdEljb25Qcm9wcywgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgfTtcbiIsCiAgICAiaW1wb3J0IHsgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuLi9pY29uL2RlZmF1bHRzLm1qcyc7XG5cbmNvbnN0IGRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGxcbn0pO1xuY29uc3QgZGVmYXVsdEljb25DdXN0b21pc2F0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICAvLyBEaW1lbnNpb25zXG4gIC4uLmRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zLFxuICAvLyBUcmFuc2Zvcm1hdGlvbnNcbiAgLi4uZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNcbn0pO1xuXG5leHBvcnQgeyBkZWZhdWx0SWNvbkN1c3RvbWlzYXRpb25zLCBkZWZhdWx0SWNvblNpemVDdXN0b21pc2F0aW9ucyB9O1xuIiwKICAgICJjb25zdCBtYXRjaEljb25OYW1lID0gL15bYS16MC05XSsoLVthLXowLTldKykqJC87XG5jb25zdCBzdHJpbmdUb0ljb24gPSAodmFsdWUsIHZhbGlkYXRlLCBhbGxvd1NpbXBsZU5hbWUsIHByb3ZpZGVyID0gXCJcIikgPT4ge1xuICBjb25zdCBjb2xvblNlcGFyYXRlZCA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgaWYgKHZhbHVlLnNsaWNlKDAsIDEpID09PSBcIkBcIikge1xuICAgIGlmIChjb2xvblNlcGFyYXRlZC5sZW5ndGggPCAyIHx8IGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm92aWRlciA9IGNvbG9uU2VwYXJhdGVkLnNoaWZ0KCkuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDMgfHwgIWNvbG9uU2VwYXJhdGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChjb2xvblNlcGFyYXRlZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgbmFtZTIgPSBjb2xvblNlcGFyYXRlZC5wb3AoKTtcbiAgICBjb25zdCBwcmVmaXggPSBjb2xvblNlcGFyYXRlZC5wb3AoKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAvLyBBbGxvdyBwcm92aWRlciB3aXRob3V0ICdAJzogXCJwcm92aWRlcjpwcmVmaXg6bmFtZVwiXG4gICAgICBwcm92aWRlcjogY29sb25TZXBhcmF0ZWQubGVuZ3RoID4gMCA/IGNvbG9uU2VwYXJhdGVkWzBdIDogcHJvdmlkZXIsXG4gICAgICBwcmVmaXgsXG4gICAgICBuYW1lOiBuYW1lMlxuICAgIH07XG4gICAgcmV0dXJuIHZhbGlkYXRlICYmICF2YWxpZGF0ZUljb25OYW1lKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xuICB9XG4gIGNvbnN0IG5hbWUgPSBjb2xvblNlcGFyYXRlZFswXTtcbiAgY29uc3QgZGFzaFNlcGFyYXRlZCA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICBpZiAoZGFzaFNlcGFyYXRlZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcHJvdmlkZXIsXG4gICAgICBwcmVmaXg6IGRhc2hTZXBhcmF0ZWQuc2hpZnQoKSxcbiAgICAgIG5hbWU6IGRhc2hTZXBhcmF0ZWQuam9pbihcIi1cIilcbiAgICB9O1xuICAgIHJldHVybiB2YWxpZGF0ZSAmJiAhdmFsaWRhdGVJY29uTmFtZShyZXN1bHQpID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICBpZiAoYWxsb3dTaW1wbGVOYW1lICYmIHByb3ZpZGVyID09PSBcIlwiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcHJvdmlkZXIsXG4gICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICBuYW1lXG4gICAgfTtcbiAgICByZXR1cm4gdmFsaWRhdGUgJiYgIXZhbGlkYXRlSWNvbk5hbWUocmVzdWx0LCBhbGxvd1NpbXBsZU5hbWUpID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCB2YWxpZGF0ZUljb25OYW1lID0gKGljb24sIGFsbG93U2ltcGxlTmFtZSkgPT4ge1xuICBpZiAoIWljb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICEhKChpY29uLnByb3ZpZGVyID09PSBcIlwiIHx8IGljb24ucHJvdmlkZXIubWF0Y2gobWF0Y2hJY29uTmFtZSkpICYmIChhbGxvd1NpbXBsZU5hbWUgJiYgaWNvbi5wcmVmaXggPT09IFwiXCIgfHwgaWNvbi5wcmVmaXgubWF0Y2gobWF0Y2hJY29uTmFtZSkpICYmIGljb24ubmFtZS5tYXRjaChtYXRjaEljb25OYW1lKSk7XG59O1xuXG5leHBvcnQgeyBtYXRjaEljb25OYW1lLCBzdHJpbmdUb0ljb24sIHZhbGlkYXRlSWNvbk5hbWUgfTtcbiIsCiAgICAiZnVuY3Rpb24gbWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zKG9iajEsIG9iajIpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGlmICghb2JqMS5oRmxpcCAhPT0gIW9iajIuaEZsaXApIHtcbiAgICByZXN1bHQuaEZsaXAgPSB0cnVlO1xuICB9XG4gIGlmICghb2JqMS52RmxpcCAhPT0gIW9iajIudkZsaXApIHtcbiAgICByZXN1bHQudkZsaXAgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHJvdGF0ZSA9ICgob2JqMS5yb3RhdGUgfHwgMCkgKyAob2JqMi5yb3RhdGUgfHwgMCkpICUgNDtcbiAgaWYgKHJvdGF0ZSkge1xuICAgIHJlc3VsdC5yb3RhdGUgPSByb3RhdGU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHsgbWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zIH07XG4iLAogICAgImltcG9ydCB7IGRlZmF1bHRFeHRlbmRlZEljb25Qcm9wcywgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuL2RlZmF1bHRzLm1qcyc7XG5pbXBvcnQgeyBtZXJnZUljb25UcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuL3RyYW5zZm9ybWF0aW9ucy5tanMnO1xuXG5mdW5jdGlvbiBtZXJnZUljb25EYXRhKHBhcmVudCwgY2hpbGQpIHtcbiAgY29uc3QgcmVzdWx0ID0gbWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zKHBhcmVudCwgY2hpbGQpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHMpIHtcbiAgICBpZiAoa2V5IGluIGRlZmF1bHRJY29uVHJhbnNmb3JtYXRpb25zKSB7XG4gICAgICBpZiAoa2V5IGluIHBhcmVudCAmJiAhKGtleSBpbiByZXN1bHQpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNba2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSBpbiBjaGlsZCkge1xuICAgICAgcmVzdWx0W2tleV0gPSBjaGlsZFtrZXldO1xuICAgIH0gZWxzZSBpZiAoa2V5IGluIHBhcmVudCkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJlbnRba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHsgbWVyZ2VJY29uRGF0YSB9O1xuIiwKICAgICJmdW5jdGlvbiBnZXRJY29uc1RyZWUoZGF0YSwgbmFtZXMpIHtcbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCByZXNvbHZlZCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmdW5jdGlvbiByZXNvbHZlKG5hbWUpIHtcbiAgICBpZiAoaWNvbnNbbmFtZV0pIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFtuYW1lXSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIHJlc29sdmVkKSkge1xuICAgICAgcmVzb2x2ZWRbbmFtZV0gPSBudWxsO1xuICAgICAgY29uc3QgcGFyZW50ID0gYWxpYXNlc1tuYW1lXSAmJiBhbGlhc2VzW25hbWVdLnBhcmVudDtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyZW50ICYmIHJlc29sdmUocGFyZW50KTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlZFtuYW1lXSA9IFtwYXJlbnRdLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFtuYW1lXTtcbiAgfVxuICAobmFtZXMgfHwgT2JqZWN0LmtleXMoaWNvbnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc2VzKSkpLmZvckVhY2gocmVzb2x2ZSk7XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IHsgZ2V0SWNvbnNUcmVlIH07XG4iLAogICAgImltcG9ydCB7IG1lcmdlSWNvbkRhdGEgfSBmcm9tICcuLi9pY29uL21lcmdlLm1qcyc7XG5pbXBvcnQgeyBnZXRJY29uc1RyZWUgfSBmcm9tICcuL3RyZWUubWpzJztcbmltcG9ydCAnLi4vaWNvbi9kZWZhdWx0cy5tanMnO1xuaW1wb3J0ICcuLi9pY29uL3RyYW5zZm9ybWF0aW9ucy5tanMnO1xuXG5mdW5jdGlvbiBpbnRlcm5hbEdldEljb25EYXRhKGRhdGEsIG5hbWUsIHRyZWUpIHtcbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBsZXQgY3VycmVudFByb3BzID0ge307XG4gIGZ1bmN0aW9uIHBhcnNlKG5hbWUyKSB7XG4gICAgY3VycmVudFByb3BzID0gbWVyZ2VJY29uRGF0YShcbiAgICAgIGljb25zW25hbWUyXSB8fCBhbGlhc2VzW25hbWUyXSxcbiAgICAgIGN1cnJlbnRQcm9wc1xuICAgICk7XG4gIH1cbiAgcGFyc2UobmFtZSk7XG4gIHRyZWUuZm9yRWFjaChwYXJzZSk7XG4gIHJldHVybiBtZXJnZUljb25EYXRhKGRhdGEsIGN1cnJlbnRQcm9wcyk7XG59XG5mdW5jdGlvbiBnZXRJY29uRGF0YShkYXRhLCBuYW1lKSB7XG4gIGlmIChkYXRhLmljb25zW25hbWVdKSB7XG4gICAgcmV0dXJuIGludGVybmFsR2V0SWNvbkRhdGEoZGF0YSwgbmFtZSwgW10pO1xuICB9XG4gIGNvbnN0IHRyZWUgPSBnZXRJY29uc1RyZWUoZGF0YSwgW25hbWVdKVtuYW1lXTtcbiAgcmV0dXJuIHRyZWUgPyBpbnRlcm5hbEdldEljb25EYXRhKGRhdGEsIG5hbWUsIHRyZWUpIDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0SWNvbkRhdGEsIGludGVybmFsR2V0SWNvbkRhdGEgfTtcbiIsCiAgICAiY29uc3QgdW5pdHNTcGxpdCA9IC8oLT9bMC05Ll0qWzAtOV0rWzAtOS5dKikvZztcbmNvbnN0IHVuaXRzVGVzdCA9IC9eLT9bMC05Ll0qWzAtOV0rWzAtOS5dKiQvZztcbmZ1bmN0aW9uIGNhbGN1bGF0ZVNpemUoc2l6ZSwgcmF0aW8sIHByZWNpc2lvbikge1xuICBpZiAocmF0aW8gPT09IDEpIHtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuICBwcmVjaXNpb24gPSBwcmVjaXNpb24gfHwgMTAwO1xuICBpZiAodHlwZW9mIHNpemUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHNpemUgKiByYXRpbyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHNpemU7XG4gIH1cbiAgY29uc3Qgb2xkUGFydHMgPSBzaXplLnNwbGl0KHVuaXRzU3BsaXQpO1xuICBpZiAob2xkUGFydHMgPT09IG51bGwgfHwgIW9sZFBhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzaXplO1xuICB9XG4gIGNvbnN0IG5ld1BhcnRzID0gW107XG4gIGxldCBjb2RlID0gb2xkUGFydHMuc2hpZnQoKTtcbiAgbGV0IGlzTnVtYmVyID0gdW5pdHNUZXN0LnRlc3QoY29kZSk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGlzTnVtYmVyKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KGNvZGUpO1xuICAgICAgaWYgKGlzTmFOKG51bSkpIHtcbiAgICAgICAgbmV3UGFydHMucHVzaChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhcnRzLnB1c2goTWF0aC5jZWlsKG51bSAqIHJhdGlvICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1BhcnRzLnB1c2goY29kZSk7XG4gICAgfVxuICAgIGNvZGUgPSBvbGRQYXJ0cy5zaGlmdCgpO1xuICAgIGlmIChjb2RlID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICBpc051bWJlciA9ICFpc051bWJlcjtcbiAgfVxufVxuXG5leHBvcnQgeyBjYWxjdWxhdGVTaXplIH07XG4iLAogICAgImZ1bmN0aW9uIHNwbGl0U1ZHRGVmcyhjb250ZW50LCB0YWcgPSBcImRlZnNcIikge1xuICBsZXQgZGVmcyA9IFwiXCI7XG4gIGNvbnN0IGluZGV4ID0gY29udGVudC5pbmRleE9mKFwiPFwiICsgdGFnKTtcbiAgd2hpbGUgKGluZGV4ID49IDApIHtcbiAgICBjb25zdCBzdGFydCA9IGNvbnRlbnQuaW5kZXhPZihcIj5cIiwgaW5kZXgpO1xuICAgIGNvbnN0IGVuZCA9IGNvbnRlbnQuaW5kZXhPZihcIjwvXCIgKyB0YWcpO1xuICAgIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGVuZEVuZCA9IGNvbnRlbnQuaW5kZXhPZihcIj5cIiwgZW5kKTtcbiAgICBpZiAoZW5kRW5kID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZnMgKz0gY29udGVudC5zbGljZShzdGFydCArIDEsIGVuZCkudHJpbSgpO1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDAsIGluZGV4KS50cmltKCkgKyBjb250ZW50LnNsaWNlKGVuZEVuZCArIDEpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGVmcyxcbiAgICBjb250ZW50XG4gIH07XG59XG5mdW5jdGlvbiBtZXJnZURlZnNBbmRDb250ZW50KGRlZnMsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIGRlZnMgPyBcIjxkZWZzPlwiICsgZGVmcyArIFwiPC9kZWZzPlwiICsgY29udGVudCA6IGNvbnRlbnQ7XG59XG5mdW5jdGlvbiB3cmFwU1ZHQ29udGVudChib2R5LCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IHNwbGl0ID0gc3BsaXRTVkdEZWZzKGJvZHkpO1xuICByZXR1cm4gbWVyZ2VEZWZzQW5kQ29udGVudChzcGxpdC5kZWZzLCBzdGFydCArIHNwbGl0LmNvbnRlbnQgKyBlbmQpO1xufVxuXG5leHBvcnQgeyBtZXJnZURlZnNBbmRDb250ZW50LCBzcGxpdFNWR0RlZnMsIHdyYXBTVkdDb250ZW50IH07XG4iLAogICAgImltcG9ydCB7IGRlZmF1bHRJY29uUHJvcHMgfSBmcm9tICcuLi9pY29uL2RlZmF1bHRzLm1qcyc7XG5pbXBvcnQgeyBkZWZhdWx0SWNvbkN1c3RvbWlzYXRpb25zIH0gZnJvbSAnLi4vY3VzdG9taXNhdGlvbnMvZGVmYXVsdHMubWpzJztcbmltcG9ydCB7IGNhbGN1bGF0ZVNpemUgfSBmcm9tICcuL3NpemUubWpzJztcbmltcG9ydCB7IHdyYXBTVkdDb250ZW50IH0gZnJvbSAnLi9kZWZzLm1qcyc7XG5cbmNvbnN0IGlzVW5zZXRLZXl3b3JkID0gKHZhbHVlKSA9PiB2YWx1ZSA9PT0gXCJ1bnNldFwiIHx8IHZhbHVlID09PSBcInVuZGVmaW5lZFwiIHx8IHZhbHVlID09PSBcIm5vbmVcIjtcbmZ1bmN0aW9uIGljb25Ub1NWRyhpY29uLCBjdXN0b21pc2F0aW9ucykge1xuICBjb25zdCBmdWxsSWNvbiA9IHtcbiAgICAuLi5kZWZhdWx0SWNvblByb3BzLFxuICAgIC4uLmljb25cbiAgfTtcbiAgY29uc3QgZnVsbEN1c3RvbWlzYXRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRJY29uQ3VzdG9taXNhdGlvbnMsXG4gICAgLi4uY3VzdG9taXNhdGlvbnNcbiAgfTtcbiAgY29uc3QgYm94ID0ge1xuICAgIGxlZnQ6IGZ1bGxJY29uLmxlZnQsXG4gICAgdG9wOiBmdWxsSWNvbi50b3AsXG4gICAgd2lkdGg6IGZ1bGxJY29uLndpZHRoLFxuICAgIGhlaWdodDogZnVsbEljb24uaGVpZ2h0XG4gIH07XG4gIGxldCBib2R5ID0gZnVsbEljb24uYm9keTtcbiAgW2Z1bGxJY29uLCBmdWxsQ3VzdG9taXNhdGlvbnNdLmZvckVhY2goKHByb3BzKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtYXRpb25zID0gW107XG4gICAgY29uc3QgaEZsaXAgPSBwcm9wcy5oRmxpcDtcbiAgICBjb25zdCB2RmxpcCA9IHByb3BzLnZGbGlwO1xuICAgIGxldCByb3RhdGlvbiA9IHByb3BzLnJvdGF0ZTtcbiAgICBpZiAoaEZsaXApIHtcbiAgICAgIGlmICh2RmxpcCkge1xuICAgICAgICByb3RhdGlvbiArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zLnB1c2goXG4gICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoYm94LndpZHRoICsgYm94LmxlZnQpLnRvU3RyaW5nKCkgKyBcIiBcIiArICgwIC0gYm94LnRvcCkudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy5wdXNoKFwic2NhbGUoLTEgMSlcIik7XG4gICAgICAgIGJveC50b3AgPSBib3gubGVmdCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2RmxpcCkge1xuICAgICAgdHJhbnNmb3JtYXRpb25zLnB1c2goXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKDAgLSBib3gubGVmdCkudG9TdHJpbmcoKSArIFwiIFwiICsgKGJveC5oZWlnaHQgKyBib3gudG9wKS50b1N0cmluZygpICsgXCIpXCJcbiAgICAgICk7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMucHVzaChcInNjYWxlKDEgLTEpXCIpO1xuICAgICAgYm94LnRvcCA9IGJveC5sZWZ0ID0gMDtcbiAgICB9XG4gICAgbGV0IHRlbXBWYWx1ZTtcbiAgICBpZiAocm90YXRpb24gPCAwKSB7XG4gICAgICByb3RhdGlvbiAtPSBNYXRoLmZsb29yKHJvdGF0aW9uIC8gNCkgKiA0O1xuICAgIH1cbiAgICByb3RhdGlvbiA9IHJvdGF0aW9uICUgNDtcbiAgICBzd2l0Y2ggKHJvdGF0aW9uKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRlbXBWYWx1ZSA9IGJveC5oZWlnaHQgLyAyICsgYm94LnRvcDtcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zLnVuc2hpZnQoXG4gICAgICAgICAgXCJyb3RhdGUoOTAgXCIgKyB0ZW1wVmFsdWUudG9TdHJpbmcoKSArIFwiIFwiICsgdGVtcFZhbHVlLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zLnVuc2hpZnQoXG4gICAgICAgICAgXCJyb3RhdGUoMTgwIFwiICsgKGJveC53aWR0aCAvIDIgKyBib3gubGVmdCkudG9TdHJpbmcoKSArIFwiIFwiICsgKGJveC5oZWlnaHQgLyAyICsgYm94LnRvcCkudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICB0ZW1wVmFsdWUgPSBib3gud2lkdGggLyAyICsgYm94LmxlZnQ7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgIFwicm90YXRlKC05MCBcIiArIHRlbXBWYWx1ZS50b1N0cmluZygpICsgXCIgXCIgKyB0ZW1wVmFsdWUudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAocm90YXRpb24gJSAyID09PSAxKSB7XG4gICAgICBpZiAoYm94LmxlZnQgIT09IGJveC50b3ApIHtcbiAgICAgICAgdGVtcFZhbHVlID0gYm94LmxlZnQ7XG4gICAgICAgIGJveC5sZWZ0ID0gYm94LnRvcDtcbiAgICAgICAgYm94LnRvcCA9IHRlbXBWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChib3gud2lkdGggIT09IGJveC5oZWlnaHQpIHtcbiAgICAgICAgdGVtcFZhbHVlID0gYm94LndpZHRoO1xuICAgICAgICBib3gud2lkdGggPSBib3guaGVpZ2h0O1xuICAgICAgICBib3guaGVpZ2h0ID0gdGVtcFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHJhbnNmb3JtYXRpb25zLmxlbmd0aCkge1xuICAgICAgYm9keSA9IHdyYXBTVkdDb250ZW50KFxuICAgICAgICBib2R5LFxuICAgICAgICAnPGcgdHJhbnNmb3JtPVwiJyArIHRyYW5zZm9ybWF0aW9ucy5qb2luKFwiIFwiKSArICdcIj4nLFxuICAgICAgICBcIjwvZz5cIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBjdXN0b21pc2F0aW9uc1dpZHRoID0gZnVsbEN1c3RvbWlzYXRpb25zLndpZHRoO1xuICBjb25zdCBjdXN0b21pc2F0aW9uc0hlaWdodCA9IGZ1bGxDdXN0b21pc2F0aW9ucy5oZWlnaHQ7XG4gIGNvbnN0IGJveFdpZHRoID0gYm94LndpZHRoO1xuICBjb25zdCBib3hIZWlnaHQgPSBib3guaGVpZ2h0O1xuICBsZXQgd2lkdGg7XG4gIGxldCBoZWlnaHQ7XG4gIGlmIChjdXN0b21pc2F0aW9uc1dpZHRoID09PSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IG51bGwgPyBcIjFlbVwiIDogY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IFwiYXV0b1wiID8gYm94SGVpZ2h0IDogY3VzdG9taXNhdGlvbnNIZWlnaHQ7XG4gICAgd2lkdGggPSBjYWxjdWxhdGVTaXplKGhlaWdodCwgYm94V2lkdGggLyBib3hIZWlnaHQpO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gY3VzdG9taXNhdGlvbnNXaWR0aCA9PT0gXCJhdXRvXCIgPyBib3hXaWR0aCA6IGN1c3RvbWlzYXRpb25zV2lkdGg7XG4gICAgaGVpZ2h0ID0gY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IG51bGwgPyBjYWxjdWxhdGVTaXplKHdpZHRoLCBib3hIZWlnaHQgLyBib3hXaWR0aCkgOiBjdXN0b21pc2F0aW9uc0hlaWdodCA9PT0gXCJhdXRvXCIgPyBib3hIZWlnaHQgOiBjdXN0b21pc2F0aW9uc0hlaWdodDtcbiAgfVxuICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gIGNvbnN0IHNldEF0dHIgPSAocHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAoIWlzVW5zZXRLZXl3b3JkKHZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlc1twcm9wXSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9O1xuICBzZXRBdHRyKFwid2lkdGhcIiwgd2lkdGgpO1xuICBzZXRBdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gIGNvbnN0IHZpZXdCb3ggPSBbYm94LmxlZnQsIGJveC50b3AsIGJveFdpZHRoLCBib3hIZWlnaHRdO1xuICBhdHRyaWJ1dGVzLnZpZXdCb3ggPSB2aWV3Qm94LmpvaW4oXCIgXCIpO1xuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXMsXG4gICAgdmlld0JveCxcbiAgICBib2R5XG4gIH07XG59XG5cbmV4cG9ydCB7IGljb25Ub1NWRywgaXNVbnNldEtleXdvcmQgfTtcbiIsCiAgICAiY29uc3QgcmVnZXggPSAvXFxzaWQ9XCIoXFxTKylcIi9nO1xuY29uc3QgcmFuZG9tUHJlZml4ID0gXCJJY29uaWZ5SWRcIiArIERhdGUubm93KCkudG9TdHJpbmcoMTYpICsgKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNiB8IDApLnRvU3RyaW5nKDE2KTtcbmxldCBjb3VudGVyID0gMDtcbmZ1bmN0aW9uIHJlcGxhY2VJRHMoYm9keSwgcHJlZml4ID0gcmFuZG9tUHJlZml4KSB7XG4gIGNvbnN0IGlkcyA9IFtdO1xuICBsZXQgbWF0Y2g7XG4gIHdoaWxlIChtYXRjaCA9IHJlZ2V4LmV4ZWMoYm9keSkpIHtcbiAgICBpZHMucHVzaChtYXRjaFsxXSk7XG4gIH1cbiAgaWYgKCFpZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgY29uc3Qgc3VmZml4ID0gXCJzdWZmaXhcIiArIChNYXRoLnJhbmRvbSgpICogMTY3NzcyMTYgfCBEYXRlLm5vdygpKS50b1N0cmluZygxNik7XG4gIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgIGNvbnN0IG5ld0lEID0gdHlwZW9mIHByZWZpeCA9PT0gXCJmdW5jdGlvblwiID8gcHJlZml4KGlkKSA6IHByZWZpeCArIChjb3VudGVyKyspLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXNjYXBlZElEID0gaWQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xuICAgIGJvZHkgPSBib2R5LnJlcGxhY2UoXG4gICAgICAvLyBBbGxvd2VkIGNoYXJhY3RlcnMgYmVmb3JlIGlkOiBbIztcIl1cbiAgICAgIC8vIEFsbG93ZWQgY2hhcmFjdGVycyBhZnRlciBpZDogWylcIl0sIC5bYS16XVxuICAgICAgbmV3IFJlZ0V4cCgnKFsjO1wiXSkoJyArIGVzY2FwZWRJRCArICcpKFtcIildfFxcXFwuW2Etel0pJywgXCJnXCIpLFxuICAgICAgXCIkMVwiICsgbmV3SUQgKyBzdWZmaXggKyBcIiQzXCJcbiAgICApO1xuICB9KTtcbiAgYm9keSA9IGJvZHkucmVwbGFjZShuZXcgUmVnRXhwKHN1ZmZpeCwgXCJnXCIpLCBcIlwiKTtcbiAgcmV0dXJuIGJvZHk7XG59XG5cbmV4cG9ydCB7IHJlcGxhY2VJRHMgfTtcbiIsCiAgICAiZnVuY3Rpb24gaWNvblRvSFRNTChib2R5LCBhdHRyaWJ1dGVzKSB7XG4gIGxldCByZW5kZXJBdHRyaWJzSFRNTCA9IGJvZHkuaW5kZXhPZihcInhsaW5rOlwiKSA9PT0gLTEgPyBcIlwiIDogJyB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIic7XG4gIGZvciAoY29uc3QgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgcmVuZGVyQXR0cmlic0hUTUwgKz0gXCIgXCIgKyBhdHRyICsgJz1cIicgKyBhdHRyaWJ1dGVzW2F0dHJdICsgJ1wiJztcbiAgfVxuICByZXR1cm4gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiJyArIHJlbmRlckF0dHJpYnNIVE1MICsgXCI+XCIgKyBib2R5ICsgXCI8L3N2Zz5cIjtcbn1cblxuZXhwb3J0IHsgaWNvblRvSFRNTCB9O1xuIiwKICAgICIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsCiAgICAiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsCiAgICAiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGxldCBtO1xuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIChtID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpICYmIHBhcnNlSW50KG1bMV0sIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLAogICAgImV4cG9ydCB7IGRlZmF1bHRJY29uQ3VzdG9taXNhdGlvbnMsIGRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zIH0gZnJvbSAnLi9jdXN0b21pc2F0aW9ucy9kZWZhdWx0cy5tanMnO1xuZXhwb3J0IHsgbWVyZ2VDdXN0b21pc2F0aW9ucyB9IGZyb20gJy4vY3VzdG9taXNhdGlvbnMvbWVyZ2UubWpzJztcbmV4cG9ydCB7IHRvQm9vbGVhbiB9IGZyb20gJy4vY3VzdG9taXNhdGlvbnMvYm9vbC5tanMnO1xuZXhwb3J0IHsgZmxpcEZyb21TdHJpbmcgfSBmcm9tICcuL2N1c3RvbWlzYXRpb25zL2ZsaXAubWpzJztcbmV4cG9ydCB7IHJvdGF0ZUZyb21TdHJpbmcgfSBmcm9tICcuL2N1c3RvbWlzYXRpb25zL3JvdGF0ZS5tanMnO1xuZXhwb3J0IHsgbWF0Y2hJY29uTmFtZSwgc3RyaW5nVG9JY29uLCB2YWxpZGF0ZUljb25OYW1lIH0gZnJvbSAnLi9pY29uL25hbWUubWpzJztcbmV4cG9ydCB7IG1lcmdlSWNvbkRhdGEgfSBmcm9tICcuL2ljb24vbWVyZ2UubWpzJztcbmV4cG9ydCB7IG1lcmdlSWNvblRyYW5zZm9ybWF0aW9ucyB9IGZyb20gJy4vaWNvbi90cmFuc2Zvcm1hdGlvbnMubWpzJztcbmV4cG9ydCB7IGRlZmF1bHRFeHRlbmRlZEljb25Qcm9wcywgZGVmYXVsdEljb25EaW1lbnNpb25zLCBkZWZhdWx0SWNvblByb3BzLCBkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9ucyB9IGZyb20gJy4vaWNvbi9kZWZhdWx0cy5tanMnO1xuZXhwb3J0IHsgbWFrZUljb25TcXVhcmUgfSBmcm9tICcuL2ljb24vc3F1YXJlLm1qcyc7XG5leHBvcnQgeyBnZXRJY29uc1RyZWUgfSBmcm9tICcuL2ljb24tc2V0L3RyZWUubWpzJztcbmV4cG9ydCB7IHBhcnNlSWNvblNldCwgcGFyc2VJY29uU2V0QXN5bmMgfSBmcm9tICcuL2ljb24tc2V0L3BhcnNlLm1qcyc7XG5leHBvcnQgeyB2YWxpZGF0ZUljb25TZXQgfSBmcm9tICcuL2ljb24tc2V0L3ZhbGlkYXRlLm1qcyc7XG5leHBvcnQgeyBxdWlja2x5VmFsaWRhdGVJY29uU2V0IH0gZnJvbSAnLi9pY29uLXNldC92YWxpZGF0ZS1iYXNpYy5tanMnO1xuZXhwb3J0IHsgZXhwYW5kSWNvblNldCB9IGZyb20gJy4vaWNvbi1zZXQvZXhwYW5kLm1qcyc7XG5leHBvcnQgeyBtaW5pZnlJY29uU2V0IH0gZnJvbSAnLi9pY29uLXNldC9taW5pZnkubWpzJztcbmV4cG9ydCB7IGdldEljb25zIH0gZnJvbSAnLi9pY29uLXNldC9nZXQtaWNvbnMubWpzJztcbmV4cG9ydCB7IGdldEljb25EYXRhIH0gZnJvbSAnLi9pY29uLXNldC9nZXQtaWNvbi5tanMnO1xuZXhwb3J0IHsgY29udmVydEljb25TZXRJbmZvIH0gZnJvbSAnLi9pY29uLXNldC9jb252ZXJ0LWluZm8ubWpzJztcbmV4cG9ydCB7IGljb25Ub1NWRyB9IGZyb20gJy4vc3ZnL2J1aWxkLm1qcyc7XG5leHBvcnQgeyBtZXJnZURlZnNBbmRDb250ZW50LCBzcGxpdFNWR0RlZnMsIHdyYXBTVkdDb250ZW50IH0gZnJvbSAnLi9zdmcvZGVmcy5tanMnO1xuZXhwb3J0IHsgcmVwbGFjZUlEcyB9IGZyb20gJy4vc3ZnL2lkLm1qcyc7XG5leHBvcnQgeyBjYWxjdWxhdGVTaXplIH0gZnJvbSAnLi9zdmcvc2l6ZS5tanMnO1xuZXhwb3J0IHsgZW5jb2RlU3ZnRm9yQ3NzIH0gZnJvbSAnLi9zdmcvZW5jb2RlLXN2Zy1mb3ItY3NzLm1qcyc7XG5leHBvcnQgeyB0cmltU1ZHIH0gZnJvbSAnLi9zdmcvdHJpbS5tanMnO1xuZXhwb3J0IHsgcHJldHRpZnlTVkcgfSBmcm9tICcuL3N2Zy9wcmV0dHkubWpzJztcbmV4cG9ydCB7IGljb25Ub0hUTUwgfSBmcm9tICcuL3N2Zy9odG1sLm1qcyc7XG5leHBvcnQgeyBzdmdUb0RhdGEsIHN2Z1RvVVJMIH0gZnJvbSAnLi9zdmcvdXJsLm1qcyc7XG5leHBvcnQgeyBjbGVhblVwSW5uZXJIVE1MIH0gZnJvbSAnLi9zdmcvaW5uZXItaHRtbC5tanMnO1xuZXhwb3J0IHsgZ2V0U1ZHVmlld0JveCB9IGZyb20gJy4vc3ZnL3ZpZXdib3gubWpzJztcbmV4cG9ydCB7IGJ1aWxkUGFyc2VkU1ZHLCBjb252ZXJ0UGFyc2VkU1ZHLCBwYXJzZVNWR0NvbnRlbnQgfSBmcm9tICcuL3N2Zy9wYXJzZS5tanMnO1xuZXhwb3J0IHsgY29sb3JLZXl3b3JkcyB9IGZyb20gJy4vY29sb3JzL2tleXdvcmRzLm1qcyc7XG5leHBvcnQgeyBjb2xvclRvU3RyaW5nLCBjb21wYXJlQ29sb3JzLCBzdHJpbmdUb0NvbG9yIH0gZnJvbSAnLi9jb2xvcnMvaW5kZXgubWpzJztcbmV4cG9ydCB7IGdldEljb25DU1MsIGdldEljb25Db250ZW50Q1NTIH0gZnJvbSAnLi9jc3MvaWNvbi5tanMnO1xuZXhwb3J0IHsgZ2V0SWNvbnNDU1MsIGdldEljb25zQ29udGVudENTUyB9IGZyb20gJy4vY3NzL2ljb25zLm1qcyc7XG5leHBvcnQgeyBtZXJnZUljb25Qcm9wcyB9IGZyb20gJy4vbG9hZGVyL3V0aWxzLm1qcyc7XG5leHBvcnQgeyBnZXRDdXN0b21JY29uIH0gZnJvbSAnLi9sb2FkZXIvY3VzdG9tLm1qcyc7XG5leHBvcnQgeyBzZWFyY2hGb3JJY29uIH0gZnJvbSAnLi9sb2FkZXIvbW9kZXJuLm1qcyc7XG5leHBvcnQgeyBsb2FkSWNvbiB9IGZyb20gJy4vbG9hZGVyL2xvYWRlci5tanMnO1xuZXhwb3J0IHsgZ2V0RW1vamlTZXF1ZW5jZUZyb21TdHJpbmcsIGdldFVucXVhbGlmaWVkRW1vamlTZXF1ZW5jZSB9IGZyb20gJy4vZW1vamkvY2xlYW51cC5tanMnO1xuZXhwb3J0IHsgY29udmVydEVtb2ppU2VxdWVuY2VUb1VURjE2LCBjb252ZXJ0RW1vamlTZXF1ZW5jZVRvVVRGMzIsIGdldEVtb2ppQ29kZVBvaW50LCBnZXRFbW9qaVVuaWNvZGUsIGlzVVRGMzJTcGxpdE51bWJlciwgbWVyZ2VVVEYzMk51bWJlcnMsIHNwbGl0VVRGMzJOdW1iZXIgfSBmcm9tICcuL2Vtb2ppL2NvbnZlcnQubWpzJztcbmV4cG9ydCB7IGdldEVtb2ppU2VxdWVuY2VLZXl3b3JkLCBnZXRFbW9qaVNlcXVlbmNlU3RyaW5nLCBnZXRFbW9qaVVuaWNvZGVTdHJpbmcgfSBmcm9tICcuL2Vtb2ppL2Zvcm1hdC5tanMnO1xuZXhwb3J0IHsgcGFyc2VFbW9qaVRlc3RGaWxlIH0gZnJvbSAnLi9lbW9qaS90ZXN0L3BhcnNlLm1qcyc7XG5leHBvcnQgeyBnZXRRdWFsaWZpZWRFbW9qaVZhcmlhdGlvbnMgfSBmcm9tICcuL2Vtb2ppL3Rlc3QvdmFyaWF0aW9ucy5tanMnO1xuZXhwb3J0IHsgZmluZE1pc3NpbmdFbW9qaXMgfSBmcm9tICcuL2Vtb2ppL3Rlc3QvbWlzc2luZy5tanMnO1xuZXhwb3J0IHsgY3JlYXRlT3B0aW1pc2VkUmVnZXgsIGNyZWF0ZU9wdGltaXNlZFJlZ2V4Rm9yRW1vamlTZXF1ZW5jZXMgfSBmcm9tICcuL2Vtb2ppL3JlZ2V4L2NyZWF0ZS5tanMnO1xuZXhwb3J0IHsgcHJlcGFyZUVtb2ppRm9ySWNvblNldCwgcHJlcGFyZUVtb2ppRm9ySWNvbnNMaXN0IH0gZnJvbSAnLi9lbW9qaS9wYXJzZS5tanMnO1xuZXhwb3J0IHsgZmluZEFuZFJlcGxhY2VFbW9qaXNJblRleHQgfSBmcm9tICcuL2Vtb2ppL3JlcGxhY2UvcmVwbGFjZS5tanMnO1xuZXhwb3J0IHsgY2FtZWxUb0tlYmFiLCBjYW1lbGl6ZSwgcGFzY2FsaXplLCBzbmFrZWxpemUgfSBmcm9tICcuL21pc2Mvc3RyaW5ncy5tanMnO1xuZXhwb3J0IHsgY29tbW9uT2JqZWN0UHJvcHMsIGNvbXBhcmVPYmplY3RzLCB1bm1lcmdlT2JqZWN0cyB9IGZyb20gJy4vbWlzYy9vYmplY3RzLm1qcyc7XG5leHBvcnQgeyBzYW5pdGlzZVRpdGxlQXR0cmlidXRlIH0gZnJvbSAnLi9taXNjL3RpdGxlLm1qcyc7XG5pbXBvcnQgJy4vY3NzL2NvbW1vbi5tanMnO1xuaW1wb3J0ICcuL2Nzcy9mb3JtYXQubWpzJztcbmltcG9ydCAnZGVidWcnO1xuaW1wb3J0ICcuL2Vtb2ppL2RhdGEubWpzJztcbmltcG9ydCAnLi9lbW9qaS90ZXN0L2NvbXBvbmVudHMubWpzJztcbmltcG9ydCAnLi9lbW9qaS9yZWdleC90cmVlLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvcmVnZXgvYmFzZS5tanMnO1xuaW1wb3J0ICcuL2Vtb2ppL3JlZ2V4L251bWJlcnMubWpzJztcbmltcG9ydCAnLi9lbW9qaS9yZWdleC9zaW1pbGFyLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvdGVzdC9zaW1pbGFyLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvdGVzdC9uYW1lLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvdGVzdC90cmVlLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvcmVwbGFjZS9maW5kLm1qcyc7XG4iLAogICAgImltcG9ydCB7XG4gIF9fbmFtZSxcbiAgbG9nXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvaWNvbnMudHNcbmltcG9ydCB7IGdldEljb25EYXRhLCBpY29uVG9IVE1MLCBpY29uVG9TVkcsIHJlcGxhY2VJRHMsIHN0cmluZ1RvSWNvbiB9IGZyb20gXCJAaWNvbmlmeS91dGlsc1wiO1xudmFyIHVua25vd25JY29uID0ge1xuICBib2R5OiAnPGc+PHJlY3Qgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgc3R5bGU9XCJmaWxsOiAjMDg3ZWJmOyBzdHJva2Utd2lkdGg6IDBweDtcIi8+PHRleHQgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDIxLjE2IDY0LjY3KVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgZm9udC1mYW1pbHk6IEFyaWFsTVQsIEFyaWFsOyBmb250LXNpemU6IDY3Ljc1cHg7XCI+PHRzcGFuIHg9XCIwXCIgeT1cIjBcIj4/PC90c3Bhbj48L3RleHQ+PC9nPicsXG4gIGhlaWdodDogODAsXG4gIHdpZHRoOiA4MFxufTtcbnZhciBpY29uc1N0b3JlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBsb2FkZXJTdG9yZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcmVnaXN0ZXJJY29uUGFja3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpY29uTG9hZGVycykgPT4ge1xuICBmb3IgKGNvbnN0IGljb25Mb2FkZXIgb2YgaWNvbkxvYWRlcnMpIHtcbiAgICBpZiAoIWljb25Mb2FkZXIubmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGEgXCJuYW1lXCIgcHJvcGVydHkgd2l0aCBub24tZW1wdHkgc3RyaW5nIHZhbHVlLidcbiAgICAgICk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcIlJlZ2lzdGVyaW5nIGljb24gcGFjazpcIiwgaWNvbkxvYWRlci5uYW1lKTtcbiAgICBpZiAoXCJsb2FkZXJcIiBpbiBpY29uTG9hZGVyKSB7XG4gICAgICBsb2FkZXJTdG9yZS5zZXQoaWNvbkxvYWRlci5uYW1lLCBpY29uTG9hZGVyLmxvYWRlcik7XG4gICAgfSBlbHNlIGlmIChcImljb25zXCIgaW4gaWNvbkxvYWRlcikge1xuICAgICAgaWNvbnNTdG9yZS5zZXQoaWNvbkxvYWRlci5uYW1lLCBpY29uTG9hZGVyLmljb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmVycm9yKFwiSW52YWxpZCBpY29uIGxvYWRlcjpcIiwgaWNvbkxvYWRlcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBlaXRoZXIgXCJpY29uc1wiIG9yIFwibG9hZGVyXCIgcHJvcGVydHkuJyk7XG4gICAgfVxuICB9XG59LCBcInJlZ2lzdGVySWNvblBhY2tzXCIpO1xudmFyIGdldFJlZ2lzdGVyZWRJY29uRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGljb25OYW1lLCBmYWxsYmFja1ByZWZpeCkgPT4ge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVG9JY29uKGljb25OYW1lLCB0cnVlLCBmYWxsYmFja1ByZWZpeCAhPT0gdm9pZCAwKTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogJHtpY29uTmFtZX1gKTtcbiAgfVxuICBjb25zdCBwcmVmaXggPSBkYXRhLnByZWZpeCB8fCBmYWxsYmFja1ByZWZpeDtcbiAgaWYgKCFwcmVmaXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEljb24gbmFtZSBtdXN0IGNvbnRhaW4gYSBwcmVmaXg6ICR7aWNvbk5hbWV9YCk7XG4gIH1cbiAgbGV0IGljb25zID0gaWNvbnNTdG9yZS5nZXQocHJlZml4KTtcbiAgaWYgKCFpY29ucykge1xuICAgIGNvbnN0IGxvYWRlciA9IGxvYWRlclN0b3JlLmdldChwcmVmaXgpO1xuICAgIGlmICghbG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEljb24gc2V0IG5vdCBmb3VuZDogJHtkYXRhLnByZWZpeH1gKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRlcigpO1xuICAgICAgaWNvbnMgPSB7IC4uLmxvYWRlZCwgcHJlZml4IH07XG4gICAgICBpY29uc1N0b3JlLnNldChwcmVmaXgsIGljb25zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIGljb24gc2V0OiAke2RhdGEucHJlZml4fWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBpY29uRGF0YSA9IGdldEljb25EYXRhKGljb25zLCBkYXRhLm5hbWUpO1xuICBpZiAoIWljb25EYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJY29uIG5vdCBmb3VuZDogJHtpY29uTmFtZX1gKTtcbiAgfVxuICByZXR1cm4gaWNvbkRhdGE7XG59LCBcImdldFJlZ2lzdGVyZWRJY29uRGF0YVwiKTtcbnZhciBnZXRJY29uU1ZHID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoaWNvbk5hbWUsIGN1c3RvbWlzYXRpb25zKSA9PiB7XG4gIGxldCBpY29uRGF0YTtcbiAgdHJ5IHtcbiAgICBpY29uRGF0YSA9IGF3YWl0IGdldFJlZ2lzdGVyZWRJY29uRGF0YShpY29uTmFtZSwgY3VzdG9taXNhdGlvbnM/LmZhbGxiYWNrUHJlZml4KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcihlKTtcbiAgICBpY29uRGF0YSA9IHVua25vd25JY29uO1xuICB9XG4gIGNvbnN0IHJlbmRlckRhdGEgPSBpY29uVG9TVkcoaWNvbkRhdGEsIGN1c3RvbWlzYXRpb25zKTtcbiAgY29uc3Qgc3ZnID0gaWNvblRvSFRNTChyZXBsYWNlSURzKHJlbmRlckRhdGEuYm9keSksIHJlbmRlckRhdGEuYXR0cmlidXRlcyk7XG4gIHJldHVybiBzdmc7XG59LCBcImdldEljb25TVkdcIik7XG5cbmV4cG9ydCB7XG4gIHVua25vd25JY29uLFxuICByZWdpc3Rlckljb25QYWNrcyxcbiAgZ2V0SWNvblNWR1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvdXRpbHMvc3ViR3JhcGhUaXRsZU1hcmdpbnMudHNcbnZhciBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHtcbiAgZmxvd2NoYXJ0XG59KSA9PiB7XG4gIGNvbnN0IHN1YkdyYXBoVGl0bGVUb3BNYXJnaW4gPSBmbG93Y2hhcnQ/LnN1YkdyYXBoVGl0bGVNYXJnaW4/LnRvcCA/PyAwO1xuICBjb25zdCBzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luID0gZmxvd2NoYXJ0Py5zdWJHcmFwaFRpdGxlTWFyZ2luPy5ib3R0b20gPz8gMDtcbiAgY29uc3Qgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luID0gc3ViR3JhcGhUaXRsZVRvcE1hcmdpbiArIHN1YkdyYXBoVGl0bGVCb3R0b21NYXJnaW47XG4gIHJldHVybiB7XG4gICAgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbixcbiAgICBzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luLFxuICAgIHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpblxuICB9O1xufSwgXCJnZXRTdWJHcmFwaFRpdGxlTWFyZ2luc1wiKTtcblxuLy8gc3JjL3V0aWxzL2xpbmVXaXRoT2Zmc2V0LnRzXG52YXIgbWFya2VyT2Zmc2V0cyA9IHtcbiAgYWdncmVnYXRpb246IDE4LFxuICBleHRlbnNpb246IDE4LFxuICBjb21wb3NpdGlvbjogMTgsXG4gIGRlcGVuZGVuY3k6IDYsXG4gIGxvbGxpcG9wOiAxMy41LFxuICBhcnJvd19wb2ludDogNFxufTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZURlbHRhQW5kQW5nbGUocG9pbnQxLCBwb2ludDIpIHtcbiAgaWYgKHBvaW50MSA9PT0gdm9pZCAwIHx8IHBvaW50MiA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHsgYW5nbGU6IDAsIGRlbHRhWDogMCwgZGVsdGFZOiAwIH07XG4gIH1cbiAgcG9pbnQxID0gcG9pbnRUcmFuc2Zvcm1lcihwb2ludDEpO1xuICBwb2ludDIgPSBwb2ludFRyYW5zZm9ybWVyKHBvaW50Mik7XG4gIGNvbnN0IFt4MSwgeTFdID0gW3BvaW50MS54LCBwb2ludDEueV07XG4gIGNvbnN0IFt4MiwgeTJdID0gW3BvaW50Mi54LCBwb2ludDIueV07XG4gIGNvbnN0IGRlbHRhWCA9IHgyIC0geDE7XG4gIGNvbnN0IGRlbHRhWSA9IHkyIC0geTE7XG4gIHJldHVybiB7IGFuZ2xlOiBNYXRoLmF0YW4oZGVsdGFZIC8gZGVsdGFYKSwgZGVsdGFYLCBkZWx0YVkgfTtcbn1cbl9fbmFtZShjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlLCBcImNhbGN1bGF0ZURlbHRhQW5kQW5nbGVcIik7XG52YXIgcG9pbnRUcmFuc2Zvcm1lciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRhdGEpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4geyB4OiBkYXRhWzBdLCB5OiBkYXRhWzFdIH07XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59LCBcInBvaW50VHJhbnNmb3JtZXJcIik7XG52YXIgZ2V0TGluZUZ1bmN0aW9uc1dpdGhPZmZzZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlZGdlKSA9PiB7XG4gIHJldHVybiB7XG4gICAgeDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkLCBpLCBkYXRhKSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgIGlmIChpID09PSAwICYmIE9iamVjdC5oYXNPd24obWFya2VyT2Zmc2V0cywgZWRnZS5hcnJvd1R5cGVTdGFydCkpIHtcbiAgICAgICAgY29uc3QgeyBhbmdsZSwgZGVsdGFYIH0gPSBjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKGRhdGFbMF0sIGRhdGFbMV0pO1xuICAgICAgICBvZmZzZXQgPSBtYXJrZXJPZmZzZXRzW2VkZ2UuYXJyb3dUeXBlU3RhcnRdICogTWF0aC5jb3MoYW5nbGUpICogKGRlbHRhWCA+PSAwID8gMSA6IC0xKTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZGF0YS5sZW5ndGggLSAxICYmIE9iamVjdC5oYXNPd24obWFya2VyT2Zmc2V0cywgZWRnZS5hcnJvd1R5cGVFbmQpKSB7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUsIGRlbHRhWCB9ID0gY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShcbiAgICAgICAgICBkYXRhW2RhdGEubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgZGF0YVtkYXRhLmxlbmd0aCAtIDJdXG4gICAgICAgICk7XG4gICAgICAgIG9mZnNldCA9IG1hcmtlck9mZnNldHNbZWRnZS5hcnJvd1R5cGVFbmRdICogTWF0aC5jb3MoYW5nbGUpICogKGRlbHRhWCA+PSAwID8gMSA6IC0xKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb2ludFRyYW5zZm9ybWVyKGQpLnggKyBvZmZzZXQ7XG4gICAgfSwgXCJ4XCIpLFxuICAgIHk6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZCwgaSwgZGF0YSkge1xuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBpZiAoaSA9PT0gMCAmJiBPYmplY3QuaGFzT3duKG1hcmtlck9mZnNldHMsIGVkZ2UuYXJyb3dUeXBlU3RhcnQpKSB7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUsIGRlbHRhWSB9ID0gY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShkYXRhWzBdLCBkYXRhWzFdKTtcbiAgICAgICAgb2Zmc2V0ID0gbWFya2VyT2Zmc2V0c1tlZGdlLmFycm93VHlwZVN0YXJ0XSAqIE1hdGguYWJzKE1hdGguc2luKGFuZ2xlKSkgKiAoZGVsdGFZID49IDAgPyAxIDogLTEpO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBkYXRhLmxlbmd0aCAtIDEgJiYgT2JqZWN0Lmhhc093bihtYXJrZXJPZmZzZXRzLCBlZGdlLmFycm93VHlwZUVuZCkpIHtcbiAgICAgICAgY29uc3QgeyBhbmdsZSwgZGVsdGFZIH0gPSBjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKFxuICAgICAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSxcbiAgICAgICAgICBkYXRhW2RhdGEubGVuZ3RoIC0gMl1cbiAgICAgICAgKTtcbiAgICAgICAgb2Zmc2V0ID0gbWFya2VyT2Zmc2V0c1tlZGdlLmFycm93VHlwZUVuZF0gKiBNYXRoLmFicyhNYXRoLnNpbihhbmdsZSkpICogKGRlbHRhWSA+PSAwID8gMSA6IC0xKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb2ludFRyYW5zZm9ybWVyKGQpLnkgKyBvZmZzZXQ7XG4gICAgfSwgXCJ5XCIpXG4gIH07XG59LCBcImdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0XCIpO1xuaWYgKHZvaWQgMCkge1xuICBjb25zdCB7IGl0LCBleHBlY3QsIGRlc2NyaWJlIH0gPSB2b2lkIDA7XG4gIGRlc2NyaWJlKFwiY2FsY3VsYXRlRGVsdGFBbmRBbmdsZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIHRoZSBhbmdsZSBhbmQgZGVsdGFzIGJldHdlZW4gdHdvIHBvaW50c1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShbMCwgMF0sIFswLCAxXSkpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgICBhbmdsZTogMS41NzA3OTYzMjY3OTQ4OTY2LFxuICAgICAgICBkZWx0YVg6IDAsXG4gICAgICAgIGRlbHRhWTogMVxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShbMSwgMF0sIFswLCAtMV0pKS50b1N0cmljdEVxdWFsKHtcbiAgICAgICAgYW5nbGU6IDAuNzg1Mzk4MTYzMzk3NDQ4MyxcbiAgICAgICAgZGVsdGFYOiAtMSxcbiAgICAgICAgZGVsdGFZOiAtMVxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY2FsY3VsYXRlRGVsdGFBbmRBbmdsZSh7IHg6IDEsIHk6IDAgfSwgWzAsIC0xXSkpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgICBhbmdsZTogMC43ODUzOTgxNjMzOTc0NDgzLFxuICAgICAgICBkZWx0YVg6IC0xLFxuICAgICAgICBkZWx0YVk6IC0xXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKHsgeDogMSwgeTogMCB9LCB7IHg6IDEsIHk6IDAgfSkpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgICBhbmdsZTogTmFOLFxuICAgICAgICBkZWx0YVg6IDAsXG4gICAgICAgIGRlbHRhWTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIHRoZSBhbmdsZSBhbmQgZGVsdGFzIGlmIG9uZSBwb2ludCBpbiB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNhbGN1bGF0ZURlbHRhQW5kQW5nbGUodm9pZCAwLCBbMCwgMV0pKS50b1N0cmljdEVxdWFsKHtcbiAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgIGRlbHRhWDogMCxcbiAgICAgICAgZGVsdGFZOiAwXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKFswLCAxXSwgdm9pZCAwKSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBkZWx0YVg6IDAsXG4gICAgICAgIGRlbHRhWTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQge1xuICBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyxcbiAgZ2V0TGluZUZ1bmN0aW9uc1dpdGhPZmZzZXRcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CTEFOS19VUkwgPSBleHBvcnRzLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzID0gZXhwb3J0cy53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleCA9IGV4cG9ydHMudXJsU2NoZW1lUmVnZXggPSBleHBvcnRzLmN0cmxDaGFyYWN0ZXJzUmVnZXggPSBleHBvcnRzLmh0bWxDdHJsRW50aXR5UmVnZXggPSBleHBvcnRzLmh0bWxFbnRpdGllc1JlZ2V4ID0gZXhwb3J0cy5pbnZhbGlkUHJvdG9jb2xSZWdleCA9IHZvaWQgMDtcbmV4cG9ydHMuaW52YWxpZFByb3RvY29sUmVnZXggPSAvXihbXlxcd10qKShqYXZhc2NyaXB0fGRhdGF8dmJzY3JpcHQpL2ltO1xuZXhwb3J0cy5odG1sRW50aXRpZXNSZWdleCA9IC8mIyhcXHcrKSheXFx3fDspPy9nO1xuZXhwb3J0cy5odG1sQ3RybEVudGl0eVJlZ2V4ID0gLyYobmV3bGluZXx0YWIpOy9naTtcbmV4cG9ydHMuY3RybENoYXJhY3RlcnNSZWdleCA9IC9bXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXFx1MjAwMC1cXHUyMDBEXFx1RkVGRl0vZ2ltO1xuZXhwb3J0cy51cmxTY2hlbWVSZWdleCA9IC9eLisoOnwmY29sb247KS9naW07XG5leHBvcnRzLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4ID0gLyhcXFxcfCU1W2NDXSkoKCUoNltlRV18NzJ8NzQpKXxbbnJ0XSkvZztcbmV4cG9ydHMucmVsYXRpdmVGaXJzdENoYXJhY3RlcnMgPSBbXCIuXCIsIFwiL1wiXTtcbmV4cG9ydHMuQkxBTktfVVJMID0gXCJhYm91dDpibGFua1wiO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2FuaXRpemVVcmwgPSB2b2lkIDA7XG52YXIgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBpc1JlbGF0aXZlVXJsV2l0aG91dFByb3RvY29sKHVybCkge1xuICAgIHJldHVybiBjb25zdGFudHNfMS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycy5pbmRleE9mKHVybFswXSkgPiAtMTtcbn1cbmZ1bmN0aW9uIGRlY29kZUh0bWxDaGFyYWN0ZXJzKHN0cikge1xuICAgIHZhciByZW1vdmVkTnVsbEJ5dGUgPSBzdHIucmVwbGFjZShjb25zdGFudHNfMS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCBcIlwiKTtcbiAgICByZXR1cm4gcmVtb3ZlZE51bGxCeXRlLnJlcGxhY2UoY29uc3RhbnRzXzEuaHRtbEVudGl0aWVzUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgZGVjKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlYyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkVXJsKHVybCkge1xuICAgIHJldHVybiBVUkwuY2FuUGFyc2UodXJsKTtcbn1cbmZ1bmN0aW9uIGRlY29kZVVSSSh1cmkpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElnbm9yaW5nIGVycm9yXG4gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIFVSSSBjb250YWlucyBhIGAlYCBub3QgYXNzb2NpYXRlZFxuICAgICAgICAvLyB3aXRoIFVSSS9VUkwtZW5jb2RpbmcuXG4gICAgICAgIHJldHVybiB1cmk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2FuaXRpemVVcmwodXJsKSB7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50c18xLkJMQU5LX1VSTDtcbiAgICB9XG4gICAgdmFyIGNoYXJzVG9EZWNvZGU7XG4gICAgdmFyIGRlY29kZWRVcmwgPSBkZWNvZGVVUkkodXJsLnRyaW0oKSk7XG4gICAgZG8ge1xuICAgICAgICBkZWNvZGVkVXJsID0gZGVjb2RlSHRtbENoYXJhY3RlcnMoZGVjb2RlZFVybClcbiAgICAgICAgICAgIC5yZXBsYWNlKGNvbnN0YW50c18xLmh0bWxDdHJsRW50aXR5UmVnZXgsIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZShjb25zdGFudHNfMS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoY29uc3RhbnRzXzEud2hpdGVzcGFjZUVzY2FwZUNoYXJzUmVnZXgsIFwiXCIpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICBkZWNvZGVkVXJsID0gZGVjb2RlVVJJKGRlY29kZWRVcmwpO1xuICAgICAgICBjaGFyc1RvRGVjb2RlID1cbiAgICAgICAgICAgIGRlY29kZWRVcmwubWF0Y2goY29uc3RhbnRzXzEuY3RybENoYXJhY3RlcnNSZWdleCkgfHxcbiAgICAgICAgICAgICAgICBkZWNvZGVkVXJsLm1hdGNoKGNvbnN0YW50c18xLmh0bWxFbnRpdGllc1JlZ2V4KSB8fFxuICAgICAgICAgICAgICAgIGRlY29kZWRVcmwubWF0Y2goY29uc3RhbnRzXzEuaHRtbEN0cmxFbnRpdHlSZWdleCkgfHxcbiAgICAgICAgICAgICAgICBkZWNvZGVkVXJsLm1hdGNoKGNvbnN0YW50c18xLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4KTtcbiAgICB9IHdoaWxlIChjaGFyc1RvRGVjb2RlICYmIGNoYXJzVG9EZWNvZGUubGVuZ3RoID4gMCk7XG4gICAgdmFyIHNhbml0aXplZFVybCA9IGRlY29kZWRVcmw7XG4gICAgaWYgKCFzYW5pdGl6ZWRVcmwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50c18xLkJMQU5LX1VSTDtcbiAgICB9XG4gICAgaWYgKGlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2woc2FuaXRpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkVXJsO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSBiZWZvcmUgY2hlY2tpbmcgdGhlIFVSTCBzY2hlbWVcbiAgICB2YXIgdHJpbW1lZFVybCA9IHNhbml0aXplZFVybC50cmltU3RhcnQoKTtcbiAgICB2YXIgdXJsU2NoZW1lUGFyc2VSZXN1bHRzID0gdHJpbW1lZFVybC5tYXRjaChjb25zdGFudHNfMS51cmxTY2hlbWVSZWdleCk7XG4gICAgaWYgKCF1cmxTY2hlbWVQYXJzZVJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplZFVybDtcbiAgICB9XG4gICAgdmFyIHVybFNjaGVtZSA9IHVybFNjaGVtZVBhcnNlUmVzdWx0c1swXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoY29uc3RhbnRzXzEuaW52YWxpZFByb3RvY29sUmVnZXgudGVzdCh1cmxTY2hlbWUpKSB7XG4gICAgICAgIHJldHVybiBjb25zdGFudHNfMS5CTEFOS19VUkw7XG4gICAgfVxuICAgIHZhciBiYWNrU2FuaXRpemVkID0gdHJpbW1lZFVybC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAvLyBIYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgbWFpbHRvOiBhbmQgY3VzdG9tIGRlZXAtbGluayBwcm90b2NvbHNcbiAgICBpZiAodXJsU2NoZW1lID09PSBcIm1haWx0bzpcIiB8fCB1cmxTY2hlbWUuaW5jbHVkZXMoXCI6Ly9cIikpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tTYW5pdGl6ZWQ7XG4gICAgfVxuICAgIC8vIEZvciBodHRwIGFuZCBodHRwcyBVUkxzLCBwZXJmb3JtIGFkZGl0aW9uYWwgdmFsaWRhdGlvblxuICAgIGlmICh1cmxTY2hlbWUgPT09IFwiaHR0cDpcIiB8fCB1cmxTY2hlbWUgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkVXJsKGJhY2tTYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc3RhbnRzXzEuQkxBTktfVVJMO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1cmxfMSA9IG5ldyBVUkwoYmFja1Nhbml0aXplZCk7XG4gICAgICAgIHVybF8xLnByb3RvY29sID0gdXJsXzEucHJvdG9jb2wudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdXJsXzEuaG9zdG5hbWUgPSB1cmxfMS5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdXJsXzEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhY2tTYW5pdGl6ZWQ7XG59XG5leHBvcnRzLnNhbml0aXplVXJsID0gc2FuaXRpemVVcmw7XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA9PSBudWxsIHx8IGIgPT0gbnVsbCA/IE5hTlxuICAgIDogYiA8IGEgPyAtMVxuICAgIDogYiA+IGEgPyAxXG4gICAgOiBiID49IGEgPyAwXG4gICAgOiBOYU47XG59XG4iLAogICAgImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpc2VjdG9yKGYpIHtcbiAgbGV0IGNvbXBhcmUxLCBjb21wYXJlMiwgZGVsdGE7XG5cbiAgLy8gSWYgYW4gYWNjZXNzb3IgaXMgc3BlY2lmaWVkLCBwcm9tb3RlIGl0IHRvIGEgY29tcGFyYXRvci4gSW4gdGhpcyBjYXNlIHdlXG4gIC8vIGNhbiB0ZXN0IHdoZXRoZXIgdGhlIHNlYXJjaCB2YWx1ZSBpcyAoc2VsZi0pIGNvbXBhcmFibGUuIFdlIGNhbuKAmXQgZG8gdGhpc1xuICAvLyBmb3IgYSBjb21wYXJhdG9yIChleGNlcHQgZm9yIHNwZWNpZmljLCBrbm93biBjb21wYXJhdG9ycykgYmVjYXVzZSB3ZSBjYW7igJl0XG4gIC8vIHRlbGwgaWYgdGhlIGNvbXBhcmF0b3IgaXMgc3ltbWV0cmljLCBhbmQgYW4gYXN5bW1ldHJpYyBjb21wYXJhdG9yIGNhbuKAmXQgYmVcbiAgLy8gdXNlZCB0byB0ZXN0IHdoZXRoZXIgYSBzaW5nbGUgdmFsdWUgaXMgY29tcGFyYWJsZS5cbiAgaWYgKGYubGVuZ3RoICE9PSAyKSB7XG4gICAgY29tcGFyZTEgPSBhc2NlbmRpbmc7XG4gICAgY29tcGFyZTIgPSAoZCwgeCkgPT4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4O1xuICB9IGVsc2Uge1xuICAgIGNvbXBhcmUxID0gZiA9PT0gYXNjZW5kaW5nIHx8IGYgPT09IGRlc2NlbmRpbmcgPyBmIDogemVybztcbiAgICBjb21wYXJlMiA9IGY7XG4gICAgZGVsdGEgPSBmO1xuICB9XG5cbiAgZnVuY3Rpb24gbGVmdChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICB9IHdoaWxlIChsbyA8IGhpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmlnaHQoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgaWYgKGxvIDwgaGkpIHtcbiAgICAgIGlmIChjb21wYXJlMSh4LCB4KSAhPT0gMCkgcmV0dXJuIGhpO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlMihhW21pZF0sIHgpIDw9IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7XG4gICAgcmV0dXJuIGkgPiBsbyAmJiBkZWx0YShhW2kgLSAxXSwgeCkgPiAtZGVsdGEoYVtpXSwgeCkgPyBpIC0gMSA6IGk7XG4gIH1cblxuICByZXR1cm4ge2xlZnQsIGNlbnRlciwgcmlnaHR9O1xufVxuXG5mdW5jdGlvbiB6ZXJvKCkge1xuICByZXR1cm4gMDtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLAogICAgImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3IuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmNvbnN0IGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgY29uc3QgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgY29uc3QgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdENlbnRlciA9IGJpc2VjdG9yKG51bWJlcikuY2VudGVyO1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLAogICAgImV4cG9ydCBjbGFzcyBJbnRlcm5NYXAgZXh0ZW5kcyBNYXAge1xuICBjb25zdHJ1Y3RvcihlbnRyaWVzLCBrZXkgPSBrZXlvZikge1xuICAgIHN1cGVyKCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge19pbnRlcm46IHt2YWx1ZTogbmV3IE1hcCgpfSwgX2tleToge3ZhbHVlOiBrZXl9fSk7XG4gICAgaWYgKGVudHJpZXMgIT0gbnVsbCkgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cbiAgZ2V0KGtleSkge1xuICAgIHJldHVybiBzdXBlci5nZXQoaW50ZXJuX2dldCh0aGlzLCBrZXkpKTtcbiAgfVxuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmhhcyhpbnRlcm5fZ2V0KHRoaXMsIGtleSkpO1xuICB9XG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLnNldChpbnRlcm5fc2V0KHRoaXMsIGtleSksIHZhbHVlKTtcbiAgfVxuICBkZWxldGUoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpbnRlcm5fZGVsZXRlKHRoaXMsIGtleSkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcm5TZXQgZXh0ZW5kcyBTZXQge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZXMsIGtleSA9IGtleW9mKSB7XG4gICAgc3VwZXIoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7X2ludGVybjoge3ZhbHVlOiBuZXcgTWFwKCl9LCBfa2V5OiB7dmFsdWU6IGtleX19KTtcbiAgICBpZiAodmFsdWVzICE9IG51bGwpIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB0aGlzLmFkZCh2YWx1ZSk7XG4gIH1cbiAgaGFzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLmhhcyhpbnRlcm5fZ2V0KHRoaXMsIHZhbHVlKSk7XG4gIH1cbiAgYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLmFkZChpbnRlcm5fc2V0KHRoaXMsIHZhbHVlKSk7XG4gIH1cbiAgZGVsZXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpbnRlcm5fZGVsZXRlKHRoaXMsIHZhbHVlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50ZXJuX2dldCh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICByZXR1cm4gX2ludGVybi5oYXMoa2V5KSA/IF9pbnRlcm4uZ2V0KGtleSkgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuX3NldCh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICBpZiAoX2ludGVybi5oYXMoa2V5KSkgcmV0dXJuIF9pbnRlcm4uZ2V0KGtleSk7XG4gIF9pbnRlcm4uc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGludGVybl9kZWxldGUoe19pbnRlcm4sIF9rZXl9LCB2YWx1ZSkge1xuICBjb25zdCBrZXkgPSBfa2V5KHZhbHVlKTtcbiAgaWYgKF9pbnRlcm4uaGFzKGtleSkpIHtcbiAgICB2YWx1ZSA9IF9pbnRlcm4uZ2V0KGtleSk7XG4gICAgX2ludGVybi5kZWxldGUoa2V5KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGtleW9mKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbn1cbiIsCiAgICAiY29uc3QgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICBlNSA9IE1hdGguc3FydCgxMCksXG4gICAgZTIgPSBNYXRoLnNxcnQoMik7XG5cbmZ1bmN0aW9uIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBjb25zdCBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChzdGVwKSksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpLFxuICAgICAgZmFjdG9yID0gZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxO1xuICBsZXQgaTEsIGkyLCBpbmM7XG4gIGlmIChwb3dlciA8IDApIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgLXBvd2VyKSAvIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgKiBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wICogaW5jKTtcbiAgICBpZiAoaTEgLyBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgLyBpbmMgPiBzdG9wKSAtLWkyO1xuICAgIGluYyA9IC1pbmM7XG4gIH0gZWxzZSB7XG4gICAgaW5jID0gTWF0aC5wb3coMTAsIHBvd2VyKSAqIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgLyBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wIC8gaW5jKTtcbiAgICBpZiAoaTEgKiBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgKiBpbmMgPiBzdG9wKSAtLWkyO1xuICB9XG4gIGlmIChpMiA8IGkxICYmIDAuNSA8PSBjb3VudCAmJiBjb3VudCA8IDIpIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQgKiAyKTtcbiAgcmV0dXJuIFtpMSwgaTIsIGluY107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKCEoY291bnQgPiAwKSkgcmV0dXJuIFtdO1xuICBpZiAoc3RhcnQgPT09IHN0b3ApIHJldHVybiBbc3RhcnRdO1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBbaTEsIGkyLCBpbmNdID0gcmV2ZXJzZSA/IHRpY2tTcGVjKHN0b3AsIHN0YXJ0LCBjb3VudCkgOiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpO1xuICBpZiAoIShpMiA+PSBpMSkpIHJldHVybiBbXTtcbiAgY29uc3QgbiA9IGkyIC0gaTEgKyAxLCB0aWNrcyA9IG5ldyBBcnJheShuKTtcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgKiBpbmM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluYyA8IDApIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpIC8gLWluYztcbiAgICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpICogaW5jO1xuICB9XG4gIHJldHVybiB0aWNrcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICByZXR1cm4gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KVsyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydCwgaW5jID0gcmV2ZXJzZSA/IHRpY2tJbmNyZW1lbnQoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgcmV0dXJuIChyZXZlcnNlID8gLTEgOiAxKSAqIChpbmMgPCAwID8gMSAvIC1pbmMgOiBpbmMpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgYmlzZWN0LCBiaXNlY3RSaWdodCwgYmlzZWN0TGVmdCwgYmlzZWN0Q2VudGVyfSBmcm9tIFwiLi9iaXNlY3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhc2NlbmRpbmd9IGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdG9yfSBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuZXhwb3J0IHtibHVyLCBibHVyMiwgYmx1ckltYWdlfSBmcm9tIFwiLi9ibHVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY291bnR9IGZyb20gXCIuL2NvdW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Jvc3N9IGZyb20gXCIuL2Nyb3NzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Vtc3VtfSBmcm9tIFwiLi9jdW1zdW0uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZXNjZW5kaW5nfSBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGV2aWF0aW9ufSBmcm9tIFwiLi9kZXZpYXRpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHRlbnR9IGZyb20gXCIuL2V4dGVudC5qc1wiO1xuZXhwb3J0IHtBZGRlciwgZnN1bSwgZmN1bXN1bX0gZnJvbSBcIi4vZnN1bS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdyb3VwLCBmbGF0R3JvdXAsIGZsYXRSb2xsdXAsIGdyb3VwcywgaW5kZXgsIGluZGV4ZXMsIHJvbGx1cCwgcm9sbHVwc30gZnJvbSBcIi4vZ3JvdXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncm91cFNvcnR9IGZyb20gXCIuL2dyb3VwU29ydC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpbiwgZGVmYXVsdCBhcyBoaXN0b2dyYW19IGZyb20gXCIuL2Jpbi5qc1wiOyAvLyBEZXByZWNhdGVkOyB1c2UgYmluLlxuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXN9IGZyb20gXCIuL3RocmVzaG9sZC9mcmVlZG1hbkRpYWNvbmlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGhyZXNob2xkU2NvdHR9IGZyb20gXCIuL3RocmVzaG9sZC9zY290dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFN0dXJnZXN9IGZyb20gXCIuL3RocmVzaG9sZC9zdHVyZ2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWF4fSBmcm9tIFwiLi9tYXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXhJbmRleH0gZnJvbSBcIi4vbWF4SW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtZWFufSBmcm9tIFwiLi9tZWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVkaWFuLCBtZWRpYW5JbmRleH0gZnJvbSBcIi4vbWVkaWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVyZ2V9IGZyb20gXCIuL21lcmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWlufSBmcm9tIFwiLi9taW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtaW5JbmRleH0gZnJvbSBcIi4vbWluSW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtb2RlfSBmcm9tIFwiLi9tb2RlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmljZX0gZnJvbSBcIi4vbmljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhaXJzfSBmcm9tIFwiLi9wYWlycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBlcm11dGV9IGZyb20gXCIuL3Blcm11dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFudGlsZSwgcXVhbnRpbGVJbmRleCwgcXVhbnRpbGVTb3J0ZWR9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVpY2tzZWxlY3R9IGZyb20gXCIuL3F1aWNrc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZ2V9IGZyb20gXCIuL3JhbmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFua30gZnJvbSBcIi4vcmFuay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxlYXN0fSBmcm9tIFwiLi9sZWFzdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxlYXN0SW5kZXh9IGZyb20gXCIuL2xlYXN0SW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncmVhdGVzdH0gZnJvbSBcIi4vZ3JlYXRlc3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncmVhdGVzdEluZGV4fSBmcm9tIFwiLi9ncmVhdGVzdEluZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2Nhbn0gZnJvbSBcIi4vc2Nhbi5qc1wiOyAvLyBEZXByZWNhdGVkOyB1c2UgbGVhc3RJbmRleC5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzaHVmZmxlLCBzaHVmZmxlcn0gZnJvbSBcIi4vc2h1ZmZsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1bX0gZnJvbSBcIi4vc3VtLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGlja3MsIHRpY2tJbmNyZW1lbnQsIHRpY2tTdGVwfSBmcm9tIFwiLi90aWNrcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zcG9zZX0gZnJvbSBcIi4vdHJhbnNwb3NlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmFyaWFuY2V9IGZyb20gXCIuL3ZhcmlhbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgemlwfSBmcm9tIFwiLi96aXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBldmVyeX0gZnJvbSBcIi4vZXZlcnkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzb21lfSBmcm9tIFwiLi9zb21lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZmlsdGVyfSBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXB9IGZyb20gXCIuL21hcC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJlZHVjZX0gZnJvbSBcIi4vcmVkdWNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmV2ZXJzZX0gZnJvbSBcIi4vcmV2ZXJzZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNvcnR9IGZyb20gXCIuL3NvcnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkaWZmZXJlbmNlfSBmcm9tIFwiLi9kaWZmZXJlbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGlzam9pbnR9IGZyb20gXCIuL2Rpc2pvaW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJzZWN0aW9ufSBmcm9tIFwiLi9pbnRlcnNlY3Rpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdWJzZXR9IGZyb20gXCIuL3N1YnNldC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1cGVyc2V0fSBmcm9tIFwiLi9zdXBlcnNldC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHVuaW9ufSBmcm9tIFwiLi91bmlvbi5qc1wiO1xuZXhwb3J0IHtJbnRlcm5NYXAsIEludGVyblNldH0gZnJvbSBcImludGVybm1hcFwiO1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwKICAgICJpbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCIsMClcIjtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlWSh5KSB7XG4gIHJldHVybiBcInRyYW5zbGF0ZSgwLFwiICsgeSArIFwiKVwiO1xufVxuXG5mdW5jdGlvbiBudW1iZXIoc2NhbGUpIHtcbiAgcmV0dXJuIGQgPT4gK3NjYWxlKGQpO1xufVxuXG5mdW5jdGlvbiBjZW50ZXIoc2NhbGUsIG9mZnNldCkge1xuICBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIG9mZnNldCAqIDIpIC8gMjtcbiAgaWYgKHNjYWxlLnJvdW5kKCkpIG9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0KTtcbiAgcmV0dXJuIGQgPT4gK3NjYWxlKGQpICsgb2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBlbnRlcmluZygpIHtcbiAgcmV0dXJuICF0aGlzLl9fYXhpcztcbn1cblxuZnVuY3Rpb24gYXhpcyhvcmllbnQsIHNjYWxlKSB7XG4gIHZhciB0aWNrQXJndW1lbnRzID0gW10sXG4gICAgICB0aWNrVmFsdWVzID0gbnVsbCxcbiAgICAgIHRpY2tGb3JtYXQgPSBudWxsLFxuICAgICAgdGlja1NpemVJbm5lciA9IDYsXG4gICAgICB0aWNrU2l6ZU91dGVyID0gNixcbiAgICAgIHRpY2tQYWRkaW5nID0gMyxcbiAgICAgIG9mZnNldCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxID8gMCA6IDAuNSxcbiAgICAgIGsgPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGxlZnQgPyAtMSA6IDEsXG4gICAgICB4ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyBcInhcIiA6IFwieVwiLFxuICAgICAgdHJhbnNmb3JtID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBib3R0b20gPyB0cmFuc2xhdGVYIDogdHJhbnNsYXRlWTtcblxuICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWVzID0gdGlja1ZhbHVlcyA9PSBudWxsID8gKHNjYWxlLnRpY2tzID8gc2NhbGUudGlja3MuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogc2NhbGUuZG9tYWluKCkpIDogdGlja1ZhbHVlcyxcbiAgICAgICAgZm9ybWF0ID0gdGlja0Zvcm1hdCA9PSBudWxsID8gKHNjYWxlLnRpY2tGb3JtYXQgPyBzY2FsZS50aWNrRm9ybWF0LmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IGlkZW50aXR5KSA6IHRpY2tGb3JtYXQsXG4gICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLFxuICAgICAgICByYW5nZSA9IHNjYWxlLnJhbmdlKCksXG4gICAgICAgIHJhbmdlMCA9ICtyYW5nZVswXSArIG9mZnNldCxcbiAgICAgICAgcmFuZ2UxID0gK3JhbmdlW3JhbmdlLmxlbmd0aCAtIDFdICsgb2Zmc2V0LFxuICAgICAgICBwb3NpdGlvbiA9IChzY2FsZS5iYW5kd2lkdGggPyBjZW50ZXIgOiBudW1iZXIpKHNjYWxlLmNvcHkoKSwgb2Zmc2V0KSxcbiAgICAgICAgc2VsZWN0aW9uID0gY29udGV4dC5zZWxlY3Rpb24gPyBjb250ZXh0LnNlbGVjdGlvbigpIDogY29udGV4dCxcbiAgICAgICAgcGF0aCA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoW251bGxdKSxcbiAgICAgICAgdGljayA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoXCIudGlja1wiKS5kYXRhKHZhbHVlcywgc2NhbGUpLm9yZGVyKCksXG4gICAgICAgIHRpY2tFeGl0ID0gdGljay5leGl0KCksXG4gICAgICAgIHRpY2tFbnRlciA9IHRpY2suZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRpY2tcIiksXG4gICAgICAgIGxpbmUgPSB0aWNrLnNlbGVjdChcImxpbmVcIiksXG4gICAgICAgIHRleHQgPSB0aWNrLnNlbGVjdChcInRleHRcIik7XG5cbiAgICBwYXRoID0gcGF0aC5tZXJnZShwYXRoLmVudGVyKCkuaW5zZXJ0KFwicGF0aFwiLCBcIi50aWNrXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkb21haW5cIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIikpO1xuXG4gICAgdGljayA9IHRpY2subWVyZ2UodGlja0VudGVyKTtcblxuICAgIGxpbmUgPSBsaW5lLm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpKTtcblxuICAgIHRleHQgPSB0ZXh0Lm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLmF0dHIoXCJkeVwiLCBvcmllbnQgPT09IHRvcCA/IFwiMGVtXCIgOiBvcmllbnQgPT09IGJvdHRvbSA/IFwiMC43MWVtXCIgOiBcIjAuMzJlbVwiKSk7XG5cbiAgICBpZiAoY29udGV4dCAhPT0gc2VsZWN0aW9uKSB7XG4gICAgICBwYXRoID0gcGF0aC50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGljayA9IHRpY2sudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIGxpbmUgPSBsaW5lLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0ZXh0ID0gdGV4dC50cmFuc2l0aW9uKGNvbnRleHQpO1xuXG4gICAgICB0aWNrRXhpdCA9IHRpY2tFeGl0LnRyYW5zaXRpb24oY29udGV4dClcbiAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgZXBzaWxvbilcbiAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBpc0Zpbml0ZShkID0gcG9zaXRpb24oZCkpID8gdHJhbnNmb3JtKGQgKyBvZmZzZXQpIDogdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7IH0pO1xuXG4gICAgICB0aWNrRW50ZXJcbiAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgZXBzaWxvbilcbiAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHZhciBwID0gdGhpcy5wYXJlbnROb2RlLl9fYXhpczsgcmV0dXJuIHRyYW5zZm9ybSgocCAmJiBpc0Zpbml0ZShwID0gcChkKSkgPyBwIDogcG9zaXRpb24oZCkpICsgb2Zmc2V0KTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09PSByaWdodFxuICAgICAgICAgICAgPyAodGlja1NpemVPdXRlciA/IFwiTVwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIixcIiArIHJhbmdlMCArIFwiSFwiICsgb2Zmc2V0ICsgXCJWXCIgKyByYW5nZTEgKyBcIkhcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNXCIgKyBvZmZzZXQgKyBcIixcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVlwiICsgb2Zmc2V0ICsgXCJIXCIgKyByYW5nZTEgKyBcIlZcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNXCIgKyByYW5nZTAgKyBcIixcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxKSk7XG5cbiAgICB0aWNrXG4gICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCAxKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiB0cmFuc2Zvcm0ocG9zaXRpb24oZCkgKyBvZmZzZXQpOyB9KTtcblxuICAgIGxpbmVcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcik7XG5cbiAgICB0ZXh0XG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAudGV4dChmb3JtYXQpO1xuXG4gICAgc2VsZWN0aW9uLmZpbHRlcihlbnRlcmluZylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCAxMClcbiAgICAgICAgLmF0dHIoXCJmb250LWZhbWlseVwiLCBcInNhbnMtc2VyaWZcIilcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBvcmllbnQgPT09IHJpZ2h0ID8gXCJzdGFydFwiIDogb3JpZW50ID09PSBsZWZ0ID8gXCJlbmRcIiA6IFwibWlkZGxlXCIpO1xuXG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgeyB0aGlzLl9fYXhpcyA9IHBvc2l0aW9uOyB9KTtcbiAgfVxuXG4gIGF4aXMuc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGUgPSBfLCBheGlzKSA6IHNjYWxlO1xuICB9O1xuXG4gIGF4aXMudGlja3MgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGlja0FyZ3VtZW50cyA9IEFycmF5LmZyb20oYXJndW1lbnRzKSwgYXhpcztcbiAgfTtcblxuICBheGlzLnRpY2tBcmd1bWVudHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0FyZ3VtZW50cyA9IF8gPT0gbnVsbCA/IFtdIDogQXJyYXkuZnJvbShfKSwgYXhpcykgOiB0aWNrQXJndW1lbnRzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tWYWx1ZXMgPSBfID09IG51bGwgPyBudWxsIDogQXJyYXkuZnJvbShfKSwgYXhpcykgOiB0aWNrVmFsdWVzICYmIHRpY2tWYWx1ZXMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0Zvcm1hdCA9IF8sIGF4aXMpIDogdGlja0Zvcm1hdDtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSB0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZU91dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZU91dGVyO1xuICB9O1xuXG4gIGF4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1BhZGRpbmcgPSArXywgYXhpcykgOiB0aWNrUGFkZGluZztcbiAgfTtcblxuICBheGlzLm9mZnNldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChvZmZzZXQgPSArXywgYXhpcykgOiBvZmZzZXQ7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwKICAgICJleHBvcnQge1xuICBheGlzVG9wLFxuICBheGlzUmlnaHQsXG4gIGF4aXNCb3R0b20sXG4gIGF4aXNMZWZ0XG59IGZyb20gXCIuL2F4aXMuanNcIjtcbiIsCiAgICAidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLAogICAgImV4cG9ydCB7ZGVmYXVsdCBhcyBkaXNwYXRjaH0gZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbiIsCiAgICAiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwKICAgICJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLAogICAgImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLAogICAgImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwKICAgICIvLyBHaXZlbiBzb21ldGhpbmcgYXJyYXkgbGlrZSAob3IgbnVsbCksIHJldHVybnMgc29tZXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgYW5cbi8vIGFycmF5LiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYXJyYXktbGlrZSBvYmplY3RzIHBhc3NlZCB0byBkMy5zZWxlY3RBbGxcbi8vIG9yIHNlbGVjdGlvbi5zZWxlY3RBbGwgYXJlIGNvbnZlcnRlZCBpbnRvIHByb3BlciBhcnJheXMgd2hlbiBjcmVhdGluZyBhXG4vLyBzZWxlY3Rpb247IHdlIGRvbuKAmXQgZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNlbGVjdGlvbiBiYWNrZWQgYnkgYSBsaXZlXG4vLyBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdC4gSG93ZXZlciwgbm90ZSB0aGF0IHNlbGVjdGlvbi5zZWxlY3RBbGwgd2lsbCB1c2UgYVxuLy8gc3RhdGljIE5vZGVMaXN0IGFzIGEgZ3JvdXAsIHNpbmNlIGl0IHNhZmVseSBkZXJpdmVkIGZyb20gcXVlcnlTZWxlY3RvckFsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFycmF5KHgpIHtcbiAgcmV0dXJuIHggPT0gbnVsbCA/IFtdIDogQXJyYXkuaXNBcnJheSh4KSA/IHggOiBBcnJheS5mcm9tKHgpO1xufVxuIiwKICAgICJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkTWF0Y2hlcihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG4iLAogICAgImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwKICAgICJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLAogICAgImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwKICAgICJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9uZW50ZXIsIG9udXBkYXRlLCBvbmV4aXQpIHtcbiAgdmFyIGVudGVyID0gdGhpcy5lbnRlcigpLCB1cGRhdGUgPSB0aGlzLCBleGl0ID0gdGhpcy5leGl0KCk7XG4gIGlmICh0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZW50ZXIgPSBvbmVudGVyKGVudGVyKTtcbiAgICBpZiAoZW50ZXIpIGVudGVyID0gZW50ZXIuc2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgZW50ZXIgPSBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICB9XG4gIGlmIChvbnVwZGF0ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgICBpZiAodXBkYXRlKSB1cGRhdGUgPSB1cGRhdGUuc2VsZWN0aW9uKCk7XG4gIH1cbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLAogICAgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwKICAgICJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLAogICAgImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLAogICAgImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwKICAgICJmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gIHJldHVybiBub2RlLmNsYXNzTGlzdCB8fCBuZXcgQ2xhc3NMaXN0KG5vZGUpO1xufVxuXG5mdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICB0aGlzLl9ub2RlID0gbm9kZTtcbiAgdGhpcy5fbmFtZXMgPSBjbGFzc0FycmF5KG5vZGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIik7XG59XG5cbkNsYXNzTGlzdC5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5hZGQobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LnJlbW92ZShuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKG5hbWVzLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdCh0aGlzLm5vZGUoKSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgID8gY2xhc3NlZFRydWVcbiAgICAgIDogY2xhc3NlZEZhbHNlKShuYW1lcywgdmFsdWUpKTtcbn1cbiIsCiAgICAiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsCiAgICAiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLAogICAgImZ1bmN0aW9uIHJhaXNlKCkge1xuICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG59XG4iLAogICAgImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLAogICAgImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iLAogICAgImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLAogICAgImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwKICAgICJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIiwKICAgICJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwKICAgICJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKigpIHtcbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHlpZWxkIG5vZGU7XG4gICAgfVxuICB9XG59XG4iLAogICAgImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwKICAgICJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLAogICAgImV4cG9ydCB7ZGVmYXVsdCBhcyBjcmVhdGV9IGZyb20gXCIuL2NyZWF0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0b3J9IGZyb20gXCIuL2NyZWF0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsb2NhbH0gZnJvbSBcIi4vbG9jYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXRjaGVyfSBmcm9tIFwiLi9tYXRjaGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmFtZXNwYWNlfSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2VzfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9pbnRlcn0gZnJvbSBcIi4vcG9pbnRlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50ZXJzfSBmcm9tIFwiLi9wb2ludGVycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdH0gZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0QWxsfSBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rpb259IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yfSBmcm9tIFwiLi9zZWxlY3Rvci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yQWxsfSBmcm9tIFwiLi9zZWxlY3RvckFsbC5qc1wiO1xuZXhwb3J0IHtzdHlsZVZhbHVlIGFzIHN0eWxlfSBmcm9tIFwiLi9zZWxlY3Rpb24vc3R5bGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB3aW5kb3d9IGZyb20gXCIuL3dpbmRvdy5qc1wiO1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsCiAgICAiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dPyg/OlxcXFxkKlxcXFwuKT9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dPyg/OlxcXFxkKlxcXFwuKT9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIsXG4gICAgcmVIZXggPSAvXiMoWzAtOWEtZl17Myw4fSkkLyxcbiAgICByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlSX0sJHtyZUl9LCR7cmVJfVxcXFwpJGApLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JcXFxcKCR7cmVQfSwke3JlUH0sJHtyZVB9XFxcXCkkYCksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlSX0sJHtyZUl9LCR7cmVJfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChgXnJnYmFcXFxcKCR7cmVQfSwke3JlUH0sJHtyZVB9LCR7cmVOfVxcXFwpJGApLFxuICAgIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5oc2xcXFxcKCR7cmVOfSwke3JlUH0sJHtyZVB9XFxcXCkkYCksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5oc2xhXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgY29weShjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIGhleDogY29sb3JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IGNvbG9yX2Zvcm1hdEhleCxcbiAgZm9ybWF0SGV4ODogY29sb3JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0SHNsOiBjb2xvcl9mb3JtYXRIc2wsXG4gIGZvcm1hdFJnYjogY29sb3JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogY29sb3JfZm9ybWF0UmdiXG59KTtcblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIc2woKSB7XG4gIHJldHVybiBoc2xDb252ZXJ0KHRoaXMpLmZvcm1hdEhzbCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRSZ2IoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG0sIGw7XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXguZXhlYyhmb3JtYXQpKSA/IChsID0gbVsxXS5sZW5ndGgsIG0gPSBwYXJzZUludChtWzFdLCAxNiksIGwgPT09IDYgPyByZ2JuKG0pIC8vICNmZjAwMDBcbiAgICAgIDogbCA9PT0gMyA/IG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkgLy8gI2YwMFxuICAgICAgOiBsID09PSA4ID8gcmdiYShtID4+IDI0ICYgMHhmZiwgbSA+PiAxNiAmIDB4ZmYsIG0gPj4gOCAmIDB4ZmYsIChtICYgMHhmZikgLyAweGZmKSAvLyAjZmYwMDAwMDBcbiAgICAgIDogbCA9PT0gNCA/IHJnYmEoKG0gPj4gMTIgJiAweGYpIHwgKG0gPj4gOCAmIDB4ZjApLCAobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSkgLyAweGZmKSAvLyAjZjAwMFxuICAgICAgOiBudWxsKSAvLyBpbnZhbGlkIGhleFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY2xhbXAoKSB7XG4gICAgcmV0dXJuIG5ldyBSZ2IoY2xhbXBpKHRoaXMuciksIGNsYW1waSh0aGlzLmcpLCBjbGFtcGkodGhpcy5iKSwgY2xhbXBhKHRoaXMub3BhY2l0eSkpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gKC0wLjUgPD0gdGhpcy5yICYmIHRoaXMuciA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmcgJiYgdGhpcy5nIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuYiAmJiB0aGlzLmIgPCAyNTUuNSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgaGV4OiByZ2JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IHJnYl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IHJnYl9mb3JtYXRIZXg4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBgIyR7aGV4KHRoaXMucil9JHtoZXgodGhpcy5nKX0ke2hleCh0aGlzLmIpfWA7XG59XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXg4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX0ke2hleCgoaXNOYU4odGhpcy5vcGFjaXR5KSA/IDEgOiB0aGlzLm9wYWNpdHkpICogMjU1KX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0UmdiKCkge1xuICBjb25zdCBhID0gY2xhbXBhKHRoaXMub3BhY2l0eSk7XG4gIHJldHVybiBgJHthID09PSAxID8gXCJyZ2IoXCIgOiBcInJnYmEoXCJ9JHtjbGFtcGkodGhpcy5yKX0sICR7Y2xhbXBpKHRoaXMuZyl9LCAke2NsYW1waSh0aGlzLmIpfSR7YSA9PT0gMSA/IFwiKVwiIDogYCwgJHthfSlgfWA7XG59XG5cbmZ1bmN0aW9uIGNsYW1wYShvcGFjaXR5KSB7XG4gIHJldHVybiBpc05hTihvcGFjaXR5KSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBvcGFjaXR5KSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1waSh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG59XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IGNsYW1waSh2YWx1ZSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgSHNsKGNsYW1waCh0aGlzLmgpLCBjbGFtcHQodGhpcy5zKSwgY2xhbXB0KHRoaXMubCksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGZvcm1hdEhzbCgpIHtcbiAgICBjb25zdCBhID0gY2xhbXBhKHRoaXMub3BhY2l0eSk7XG4gICAgcmV0dXJuIGAke2EgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIn0ke2NsYW1waCh0aGlzLmgpfSwgJHtjbGFtcHQodGhpcy5zKSAqIDEwMH0lLCAke2NsYW1wdCh0aGlzLmwpICogMTAwfSUke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGNsYW1waCh2YWx1ZSkge1xuICB2YWx1ZSA9ICh2YWx1ZSB8fCAwKSAlIDM2MDtcbiAgcmV0dXJuIHZhbHVlIDwgMCA/IHZhbHVlICsgMzYwIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNsYW1wdCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdmFsdWUgfHwgMCkpO1xufVxuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iLAogICAgImV4cG9ydCBjb25zdCByYWRpYW5zID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCBjb25zdCBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcbiIsCiAgICAiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuY29uc3QgSyA9IDE4LFxuICAgIFhuID0gMC45NjQyMixcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAwLjgyNTIxLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxuICAgICAgYiA9IHJnYjJscmdiKG8uYiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcbiAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcbiAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgfVxuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmF5KGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIG5ldyBMYWIobCwgMCwgMCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLmEgPSArYTtcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgbHJnYjJyZ2IoLTAuOTc4NzY4NCAqIHggKyAxLjkxNjE0MTUgKiB5ICsgMC4wMzM0NTQwICogeiksXG4gICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiBscmdiMnJnYih4KSB7XG4gIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IybHJnYih4KSB7XG4gIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiBkZWdyZWVzO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5mdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBvLmggKiByYWRpYW5zO1xuICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgY29sb3IsIHJnYiwgaHNsfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxhYiwgaGNsLCBsY2gsIGdyYXl9IGZyb20gXCIuL2xhYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1YmVoZWxpeH0gZnJvbSBcIi4vY3ViZWhlbGl4LmpzXCI7XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7YmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwKICAgICJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgaWYgKCFiKSBiID0gW107XG4gIHZhciBuID0gYSA/IE1hdGgubWluKGIubGVuZ3RoLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgYyA9IGIuc2xpY2UoKSxcbiAgICAgIGk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5KHgpIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XG59XG4iLAogICAgImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwKICAgICJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwKICAgICJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCByZ2IgZnJvbSBcIi4vcmdiLmpzXCI7XG5pbXBvcnQge2dlbmVyaWNBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBkYXRlIGZyb20gXCIuL2RhdGUuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQgb2JqZWN0IGZyb20gXCIuL29iamVjdC5qc1wiO1xuaW1wb3J0IHN0cmluZyBmcm9tIFwiLi9zdHJpbmcuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICByZXR1cm4gYiA9PSBudWxsIHx8IHQgPT09IFwiYm9vbGVhblwiID8gY29uc3RhbnQoYilcbiAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBudW1iZXJcbiAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiXG4gICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxuICAgICAgOiBpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXlcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGdlbmVyaWNBcnJheVxuICAgICAgOiB0eXBlb2YgYi52YWx1ZU9mICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGIudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIiB8fCBpc05hTihiKSA/IG9iamVjdFxuICAgICAgOiBudW1iZXIpKGEsIGIpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKiAoMSAtIHQpICsgYiAqIHQpO1xuICB9O1xufVxuIiwKICAgICJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIHN2Z05vZGU7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgY29uc3QgbSA9IG5ldyAodHlwZW9mIERPTU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiID8gRE9NTWF0cml4IDogV2ViS2l0Q1NTTWF0cml4KSh2YWx1ZSArIFwiXCIpO1xuICByZXR1cm4gbS5pc0lkZW50aXR5ID8gaWRlbnRpdHkgOiBkZWNvbXBvc2UobS5hLCBtLmIsIG0uYywgbS5kLCBtLmUsIG0uZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwKICAgICJpbXBvcnQgbnVtYmVyIGZyb20gXCIuLi9udW1iZXIuanNcIjtcbmltcG9ydCB7cGFyc2VDc3MsIHBhcnNlU3ZnfSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZUNzcywgXCJweCwgXCIsIFwicHgpXCIsIFwiZGVnKVwiKTtcbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZVN2ZywgXCIsIFwiLCBcIilcIiwgXCIpXCIpO1xuIiwKICAgICJpbXBvcnQge2hjbCBhcyBjb2xvckhjbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGhjbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhjbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IGNvbG9yKHN0YXJ0LmMsIGVuZC5jKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGNsKGh1ZSk7XG5leHBvcnQgdmFyIGhjbExvbmcgPSBoY2woY29sb3IpO1xuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGV9IGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJhc2lzfSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmFzaXNDbG9zZWR9IGZyb20gXCIuL2Jhc2lzQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVEYXRlfSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVEaXNjcmV0ZX0gZnJvbSBcIi4vZGlzY3JldGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUh1ZX0gZnJvbSBcIi4vaHVlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVOdW1iZXJ9IGZyb20gXCIuL251bWJlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPYmplY3R9IGZyb20gXCIuL29iamVjdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUm91bmR9IGZyb20gXCIuL3JvdW5kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCIuL3N0cmluZy5qc1wiO1xuZXhwb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcywgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmd9IGZyb20gXCIuL3RyYW5zZm9ybS9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWm9vbX0gZnJvbSBcIi4vem9vbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmdiLCByZ2JCYXNpcyBhcyBpbnRlcnBvbGF0ZVJnYkJhc2lzLCByZ2JCYXNpc0Nsb3NlZCBhcyBpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9yZ2IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUhzbCwgaHNsTG9uZyBhcyBpbnRlcnBvbGF0ZUhzbExvbmd9IGZyb20gXCIuL2hzbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlTGFifSBmcm9tIFwiLi9sYWIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUhjbCwgaGNsTG9uZyBhcyBpbnRlcnBvbGF0ZUhjbExvbmd9IGZyb20gXCIuL2hjbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ3ViZWhlbGl4LCBjdWJlaGVsaXhMb25nIGFzIGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcIi4vY3ViZWhlbGl4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGllY2V3aXNlfSBmcm9tIFwiLi9waWVjZXdpc2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFudGl6ZX0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcbiIsCiAgICAidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdl4oCZdmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlbuKAmXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsCiAgICAiZXhwb3J0IHtcbiAgbm93LFxuICB0aW1lcixcbiAgdGltZXJGbHVzaFxufSBmcm9tIFwiLi90aW1lci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVvdXRcbn0gZnJvbSBcIi4vdGltZW91dC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG4iLAogICAgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLAogICAgImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLAogICAgImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7Z2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkZWxheUZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVsYXlDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkZWxheUZ1bmN0aW9uXG4gICAgICAgICAgOiBkZWxheUNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kZWxheTtcbn1cbiIsCiAgICAiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwKICAgICJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsCiAgICAiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGVhc2VWYXJ5aW5nKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgdiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLmVhY2goZWFzZVZhcnlpbmcodGhpcy5faWQsIHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwKICAgICJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtnZXQsIHNldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gc3RhcnQobmFtZSkge1xuICByZXR1cm4gKG5hbWUgKyBcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuICF0IHx8IHQgPT09IFwic3RhcnRcIjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBvbjAsIG9uMSwgc2l0ID0gc3RhcnQobmFtZSkgPyBpbml0IDogc2V0O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2l0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCkgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihuYW1lLCBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyXG4gICAgICA/IGdldCh0aGlzLm5vZGUoKSwgaWQpLm9uLm9uKG5hbWUpXG4gICAgICA6IHRoaXMuZWFjaChvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikpO1xufVxuIiwKICAgICJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLAogICAgImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLAogICAgImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZU51bGwobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICBzdHJpbmcxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgc3RyaW5nMTAgPSBzdHJpbmcxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSxcbiAgICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSBzdHJpbmcxID0gdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlTWF5YmVSZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIG9uMCwgb24xLCBsaXN0ZW5lcjAsIGtleSA9IFwic3R5bGUuXCIgKyBuYW1lLCBldmVudCA9IFwiZW5kLlwiICsga2V5LCByZW1vdmU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uLFxuICAgICAgICBsaXN0ZW5lciA9IHNjaGVkdWxlLnZhbHVlW2tleV0gPT0gbnVsbCA/IHJlbW92ZSB8fCAocmVtb3ZlID0gc3R5bGVSZW1vdmUobmFtZSkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wIHx8IGxpc3RlbmVyMCAhPT0gbGlzdGVuZXIpIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24oZXZlbnQsIGxpc3RlbmVyMCA9IGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVOdWxsKG5hbWUsIGkpKVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmUobmFtZSkpXG4gICAgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKSlcbiAgICAgIC5lYWNoKHN0eWxlTWF5YmVSZW1vdmUodGhpcy5faWQsIG5hbWUpKVxuICAgIDogdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSksIHByaW9yaXR5KVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgbnVsbCk7XG59XG4iLAogICAgImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkuY2FsbCh0aGlzLCB0KSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgdCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQgPSAoaTAgPSBpKSAmJiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsCiAgICAiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIiwKICAgICJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwKICAgICJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc2VsZWN0aW9uIHdhcyBlbXB0eSwgcmVzb2x2ZSBlbmQgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXkuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nIGZyb20gXCIuL2Vhc2VWYXJ5aW5nLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZVR3ZWVuIGZyb20gXCIuL3N0eWxlVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dFR3ZWVuIGZyb20gXCIuL3RleHRUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90d2VlbiBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZW5kIGZyb20gXCIuL2VuZC5qc1wiO1xuXG52YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnNpdGlvbihncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIHRoaXMuX25hbWUgPSBuYW1lO1xuICB0aGlzLl9pZCA9IGlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdGlvbigpLnRyYW5zaXRpb24obmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5cbnZhciBzZWxlY3Rpb25fcHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZTtcblxuVHJhbnNpdGlvbi5wcm90b3R5cGUgPSB0cmFuc2l0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zaXRpb24sXG4gIHNlbGVjdDogdHJhbnNpdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogdHJhbnNpdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZHJlbixcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgdGV4dFR3ZWVuOiB0cmFuc2l0aW9uX3RleHRUd2VlbixcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlLFxuICBlYXNlVmFyeWluZzogdHJhbnNpdGlvbl9lYXNlVmFyeWluZyxcbiAgZW5kOiB0cmFuc2l0aW9uX2VuZCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXVxufTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0ICogdCA6ICh0IC09IDIpICogdCAqIHQgKyAyKSAvIDI7XG59XG4iLAogICAgImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7aWR9IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwKICAgICJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsCiAgICAiaW1wb3J0IFwiLi9zZWxlY3Rpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmFuc2l0aW9ufSBmcm9tIFwiLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYWN0aXZlfSBmcm9tIFwiLi9hY3RpdmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnJ1cHR9IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuIiwKICAgICJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7cG9pbnRlciwgc2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IEJydXNoRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG52YXIgTU9ERV9EUkFHID0ge25hbWU6IFwiZHJhZ1wifSxcbiAgICBNT0RFX1NQQUNFID0ge25hbWU6IFwic3BhY2VcIn0sXG4gICAgTU9ERV9IQU5ETEUgPSB7bmFtZTogXCJoYW5kbGVcIn0sXG4gICAgTU9ERV9DRU5URVIgPSB7bmFtZTogXCJjZW50ZXJcIn07XG5cbmNvbnN0IHthYnMsIG1heCwgbWlufSA9IE1hdGg7XG5cbmZ1bmN0aW9uIG51bWJlcjEoZSkge1xuICByZXR1cm4gWytlWzBdLCArZVsxXV07XG59XG5cbmZ1bmN0aW9uIG51bWJlcjIoZSkge1xuICByZXR1cm4gW251bWJlcjEoZVswXSksIG51bWJlcjEoZVsxXSldO1xufVxuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcIndcIiwgXCJlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiBbWyt4WzBdLCBlWzBdWzFdXSwgWyt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgPT0gbnVsbCA/IG51bGwgOiBbW2VbMF1bMF0sICt5WzBdXSwgW2VbMV1bMF0sICt5WzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVsxXSwgeHlbMV1bMV1dOyB9XG59O1xuXG52YXIgWFkgPSB7XG4gIG5hbWU6IFwieHlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcIndcIiwgXCJlXCIsIFwic1wiLCBcIm53XCIsIFwibmVcIiwgXCJzd1wiLCBcInNlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSA9PSBudWxsID8gbnVsbCA6IG51bWJlcjIoeHkpOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uLCBldmVudCkge1xuICAgIGlmIChncm91cC50d2Vlbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydChldmVudCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKGV2ZW50KTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KGV2ZW50KS5icnVzaChldmVudCkuZW5kKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCwgZXZlbnQpIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB2YXIgZW1pdCA9IHRoYXQuX19icnVzaC5lbWl0dGVyO1xuICAgIHJldHVybiBlbWl0ICYmICghY2xlYW4gfHwgIWVtaXQuY2xlYW4pID8gZW1pdCA6IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5jbGVhbiA9IGNsZWFuO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIGVsc2UgdGhpcy5lbWl0KFwiYnJ1c2hcIiwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbihldmVudCwgbW9kZSkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCBtb2RlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgQnJ1c2hFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHRhcmdldDogYnJ1c2gsXG4gICAgICAgICAgc2VsZWN0aW9uOiBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIGRpc3BhdGNoOiBsaXN0ZW5lcnNcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoZXZlbnQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50cyA9IEFycmF5LmZyb20oZXZlbnQudG91Y2hlcyB8fCBbZXZlbnRdLCB0ID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gdC5pZGVudGlmaWVyO1xuICAgICAgICAgIHQgPSBwb2ludGVyKHQsIHRoYXQpO1xuICAgICAgICAgIHQucG9pbnQwID0gdC5zbGljZSgpO1xuICAgICAgICAgIHQuaWRlbnRpZmllciA9IGk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pO1xuXG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHZhciBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMsIHRydWUpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIGlmIChzZWxlY3Rpb24pIG1vdmluZyA9IHRydWU7XG4gICAgICBjb25zdCBwdHMgPSBbcG9pbnRzWzBdLCBwb2ludHNbMV0gfHwgcG9pbnRzWzBdXTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtbXG4gICAgICAgICAgdzAgPSBkaW0gPT09IFkgPyBXIDogbWluKHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBuMCA9IGRpbSA9PT0gWCA/IE4gOiBtaW4ocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF0sIFtcbiAgICAgICAgICBlMCA9IGRpbSA9PT0gWSA/IEUgOiBtYXgocHRzWzBdWzBdLCBwdHNbMV1bMF0pLFxuICAgICAgICAgIHMwID0gZGltID09PSBYID8gUyA6IG1heChwdHNbMF1bMV0sIHB0c1sxXVsxXSlcbiAgICAgICAgXV07XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpIG1vdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3MCA9IHNlbGVjdGlvblswXVswXTtcbiAgICAgIG4wID0gc2VsZWN0aW9uWzBdWzFdO1xuICAgICAgZTAgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBzMCA9IHNlbGVjdGlvblsxXVsxXTtcbiAgICB9XG5cbiAgICB3MSA9IHcwO1xuICAgIG4xID0gbjA7XG4gICAgZTEgPSBlMDtcbiAgICBzMSA9IHMwO1xuXG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoYXQpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgdmFyIG92ZXJsYXkgPSBncm91cC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcblxuICAgIGlmIChldmVudC50b3VjaGVzKSB7XG4gICAgICBlbWl0Lm1vdmVkID0gbW92ZWQ7XG4gICAgICBlbWl0LmVuZGVkID0gZW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAgICAgLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNldXAuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgICAgaWYgKGtleXMpIHZpZXdcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydChldmVudCwgbW9kZS5uYW1lKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgfHwgW2V2ZW50XSkge1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcG9pbnRzKVxuICAgICAgICAgIGlmIChkLmlkZW50aWZpZXIgPT09IHAuaWRlbnRpZmllcikgZC5jdXIgPSBwb2ludGVyKHAsIHRoYXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNoaWZ0aW5nICYmICFsb2NrWCAmJiAhbG9ja1kgJiYgcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgaWYgKGFicyhwb2ludC5jdXJbMF0gLSBwb2ludFswXSkgPiBhYnMocG9pbnQuY3VyWzFdIC0gcG9pbnRbMV0pKVxuICAgICAgICAgIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxvY2tYID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKVxuICAgICAgICBpZiAocG9pbnQuY3VyKSBwb2ludFswXSA9IHBvaW50LmN1clswXSwgcG9pbnRbMV0gPSBwb2ludC5jdXJbMV07XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBtb3ZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXSwgcG9pbnQwID0gcG9pbnQucG9pbnQwO1xuICAgICAgdmFyIHQ7XG5cbiAgICAgIGR4ID0gcG9pbnRbMF0gLSBwb2ludDBbMF07XG4gICAgICBkeSA9IHBvaW50WzFdIC0gcG9pbnQwWzFdO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBNT0RFX1NQQUNFOlxuICAgICAgICBjYXNlIE1PREVfRFJBRzoge1xuICAgICAgICAgIGlmIChzaWduWCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChwb2ludHNbMV0pIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHBvaW50c1swXVswXSkpLCBlMSA9IG1heChXLCBtaW4oRSwgcG9pbnRzWzFdWzBdKSksIHNpZ25YID0gMTtcbiAgICAgICAgICAgIGlmIChzaWduWSkgbjEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1swXVsxXSkpLCBzMSA9IG1heChOLCBtaW4oUywgcG9pbnRzWzFdWzFdKSksIHNpZ25ZID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gbWF4KFcgLSBlMCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBtYXgoTiAtIG4wLCBtaW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWSA+IDApIGR5ID0gbWF4KE4gLSBzMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE1PREVfQ0VOVEVSOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSB3MSA9IG1heChXLCBtaW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gbWF4KFcsIG1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBuMCAtIGR5ICogc2lnblkpKSwgczEgPSBtYXgoTiwgbWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaChldmVudCwgbW9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRlZChldmVudCkge1xuICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKGV2ZW50LCBtb2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsCiAgICAiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBicnVzaCxcbiAgYnJ1c2hYLFxuICBicnVzaFksXG4gIGJydXNoU2VsZWN0aW9uXG59IGZyb20gXCIuL2JydXNoLmpzXCI7XG4iLAogICAgImNvbnN0IHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIGFwcGVuZChzdHJpbmdzKSB7XG4gIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICBmb3IgKGxldCBpID0gMSwgbiA9IHN0cmluZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgdGhpcy5fICs9IGFyZ3VtZW50c1tpXSArIHN0cmluZ3NbaV07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwZW5kUm91bmQoZGlnaXRzKSB7XG4gIGxldCBkID0gTWF0aC5mbG9vcihkaWdpdHMpO1xuICBpZiAoIShkID49IDApKSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2RpZ2l0c31gKTtcbiAgaWYgKGQgPiAxNSkgcmV0dXJuIGFwcGVuZDtcbiAgY29uc3QgayA9IDEwICoqIGQ7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmdzKSB7XG4gICAgdGhpcy5fICs9IHN0cmluZ3NbMF07XG4gICAgZm9yIChsZXQgaSA9IDEsIG4gPSBzdHJpbmdzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdGhpcy5fICs9IE1hdGgucm91bmQoYXJndW1lbnRzW2ldICogaykgLyBrICsgc3RyaW5nc1tpXTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQYXRoIHtcbiAgY29uc3RydWN0b3IoZGlnaXRzKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl95MCA9IC8vIHN0YXJ0IG9mIGN1cnJlbnQgc3VicGF0aFxuICAgIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gICAgdGhpcy5fID0gXCJcIjtcbiAgICB0aGlzLl9hcHBlbmQgPSBkaWdpdHMgPT0gbnVsbCA/IGFwcGVuZCA6IGFwcGVuZFJvdW5kKGRpZ2l0cyk7XG4gIH1cbiAgbW92ZVRvKHgsIHkpIHtcbiAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDAgPSB0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kwID0gdGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGNsb3NlUGF0aCgpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl9hcHBlbmRgWmA7XG4gICAgfVxuICB9XG4gIGxpbmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIHF1YWRyYXRpY0N1cnZlVG8oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYFEkeyt4MX0sJHsreTF9LCR7dGhpcy5feDEgPSAreH0sJHt0aGlzLl95MSA9ICt5fWA7XG4gIH1cbiAgYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBDJHsreDF9LCR7K3kxfSwkeyt4Mn0sJHsreTJ9LCR7dGhpcy5feDEgPSAreH0sJHt0aGlzLl95MSA9ICt5fWA7XG4gIH1cbiAgYXJjVG8oeDEsIHkxLCB4MiwgeTIsIHIpIHtcbiAgICB4MSA9ICt4MSwgeTEgPSAreTEsIHgyID0gK3gyLCB5MiA9ICt5MiwgciA9ICtyO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtyfWApO1xuXG4gICAgbGV0IHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MSx5MSkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDEgPSB4MX0sJHt0aGlzLl95MSA9IHkxfWA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxID0geDF9LCR7dGhpcy5feTEgPSB5MX1gO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICBsZXQgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuX2FwcGVuZGBMJHt4MSArIHQwMSAqIHgwMX0sJHt5MSArIHQwMSAqIHkwMX1gO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hcHBlbmRgQSR7cn0sJHtyfSwwLDAsJHsrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCl9LCR7dGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMX0sJHt0aGlzLl95MSA9IHkxICsgdDIxICogeTIxfWA7XG4gICAgfVxuICB9XG4gIGFyYyh4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3IsIGNjdyA9ICEhY2N3O1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtyfWApO1xuXG4gICAgbGV0IGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXBwZW5kYE0ke3gwfSwke3kwfWA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl9hcHBlbmRgTCR7eDB9LCR7eTB9YDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwxLCR7Y3d9LCR7eCAtIGR4fSwke3kgLSBkeX1BJHtyfSwke3J9LDAsMSwke2N3fSwke3RoaXMuX3gxID0geDB9LCR7dGhpcy5feTEgPSB5MH1gO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl9hcHBlbmRgQSR7cn0sJHtyfSwwLCR7KyhkYSA+PSBwaSl9LCR7Y3d9LCR7dGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKX0sJHt0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpfWA7XG4gICAgfVxuICB9XG4gIHJlY3QoeCwgeSwgdywgaCkge1xuICAgIHRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MCA9IHRoaXMuX3gxID0gK3h9LCR7dGhpcy5feTAgPSB0aGlzLl95MSA9ICt5fWgke3cgPSArd312JHsraH1oJHstd31aYDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gbmV3IFBhdGg7XG59XG5cbi8vIEFsbG93IGluc3RhbmNlb2YgZDMucGF0aFxucGF0aC5wcm90b3R5cGUgPSBQYXRoLnByb3RvdHlwZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhSb3VuZChkaWdpdHMgPSAzKSB7XG4gIHJldHVybiBuZXcgUGF0aCgrZGlnaXRzKTtcbn1cbiIsCiAgICAiZXhwb3J0IHtQYXRoLCBwYXRoLCBwYXRoUm91bmR9IGZyb20gXCIuL3BhdGguanNcIjtcbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsCiAgICAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncm91cGluZywgdGhvdXNhbmRzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgdCA9IFtdLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xuICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICB9O1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihudW1lcmFscykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsCiAgICAiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsCiAgICAiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwKICAgICJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgIGkgPSBleHBvbmVudCAtIChwcmVmaXhFeHBvbmVudCA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50IC8gMykpKSAqIDMpICsgMSxcbiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XG4gIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgIDogaSA+IG4gPyBjb2VmZmljaWVudCArIG5ldyBBcnJheShpIC0gbiArIDEpLmpvaW4oXCIwXCIpXG4gICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXG4gICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsUGFydHMoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsCiAgICAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsCiAgICAiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiAoeCwgcCkgPT4gKHggKiAxMDApLnRvRml4ZWQocCksXG4gIFwiYlwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKSxcbiAgXCJjXCI6ICh4KSA9PiB4ICsgXCJcIixcbiAgXCJkXCI6IGZvcm1hdERlY2ltYWwsXG4gIFwiZVwiOiAoeCwgcCkgPT4geC50b0V4cG9uZW50aWFsKHApLFxuICBcImZcIjogKHgsIHApID0+IHgudG9GaXhlZChwKSxcbiAgXCJnXCI6ICh4LCBwKSA9PiB4LnRvUHJlY2lzaW9uKHApLFxuICBcIm9cIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCksXG4gIFwicFwiOiAoeCwgcCkgPT4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksXG4gIFwieFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNilcbn07XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLAogICAgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuaW1wb3J0IGZvcm1hdEdyb3VwIGZyb20gXCIuL2Zvcm1hdEdyb3VwLmpzXCI7XG5pbXBvcnQgZm9ybWF0TnVtZXJhbHMgZnJvbSBcIi4vZm9ybWF0TnVtZXJhbHMuanNcIjtcbmltcG9ydCBmb3JtYXRTcGVjaWZpZXIgZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHJpbSBmcm9tIFwiLi9mb3JtYXRUcmltLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXMuanNcIjtcbmltcG9ydCB7cHJlZml4RXhwb25lbnR9IGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgbWFwID0gQXJyYXkucHJvdG90eXBlLm1hcCxcbiAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxvY2FsZSkge1xuICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgPT09IHVuZGVmaW5lZCB8fCBsb2NhbGUudGhvdXNhbmRzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdEdyb3VwKG1hcC5jYWxsKGxvY2FsZS5ncm91cGluZywgTnVtYmVyKSwgbG9jYWxlLnRob3VzYW5kcyArIFwiXCIpLFxuICAgICAgY3VycmVuY3lQcmVmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMF0gKyBcIlwiLFxuICAgICAgY3VycmVuY3lTdWZmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMV0gKyBcIlwiLFxuICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsID09PSB1bmRlZmluZWQgPyBcIi5cIiA6IGxvY2FsZS5kZWNpbWFsICsgXCJcIixcbiAgICAgIG51bWVyYWxzID0gbG9jYWxlLm51bWVyYWxzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdE51bWVyYWxzKG1hcC5jYWxsKGxvY2FsZS5udW1lcmFscywgU3RyaW5nKSksXG4gICAgICBwZXJjZW50ID0gbG9jYWxlLnBlcmNlbnQgPT09IHVuZGVmaW5lZCA/IFwiJVwiIDogbG9jYWxlLnBlcmNlbnQgKyBcIlwiLFxuICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwi4oiSXCIgOiBsb2NhbGUubWludXMgKyBcIlwiLFxuICAgICAgbmFuID0gbG9jYWxlLm5hbiA9PT0gdW5kZWZpbmVkID8gXCJOYU5cIiA6IGxvY2FsZS5uYW4gKyBcIlwiO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcblxuICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXG4gICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICBzaWduID0gc3BlY2lmaWVyLnNpZ24sXG4gICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXG4gICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgd2lkdGggPSBzcGVjaWZpZXIud2lkdGgsXG4gICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxuICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICB0cmltID0gc3BlY2lmaWVyLnRyaW0sXG4gICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgIC8vIFRoZSBcIm5cIiB0eXBlIGlzIGFuIGFsaWFzIGZvciBcIixnXCIuXG4gICAgaWYgKHR5cGUgPT09IFwiblwiKSBjb21tYSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgcHJlY2lzaW9uID09PSB1bmRlZmluZWQgJiYgKHByZWNpc2lvbiA9IDEyKSwgdHJpbSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIElmIHplcm8gZmlsbCBpcyBzcGVjaWZpZWQsIHBhZGRpbmcgZ29lcyBhZnRlciBzaWduIGFuZCBiZWZvcmUgZGlnaXRzLlxuICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVByZWZpeCA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5U3VmZml4IDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDZcbiAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXG4gICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0KHZhbHVlKSB7XG4gICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgaSwgbiwgYztcblxuICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzaWduLiAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBmb3JtYXR0aW5nLlxuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBhZnRlciBmb3JtYXR0aW5nLCBhbmQgbm8gZXhwbGljaXQgcG9zaXRpdmUgc2lnbiBpcyByZXF1ZXN0ZWQsIGhpZGUgdGhlIHNpZ24uXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgIC8vIEJyZWFrIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaW50byB0aGUgaW50ZWdlciDigJx2YWx1ZeKAnSBwYXJ0IHRoYXQgY2FuIGJlXG4gICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxuICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICBpID0gLTEsIG4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IChjID09PSA0NiA/IGRlY2ltYWwgKyB2YWx1ZS5zbGljZShpICsgMSkgOiB2YWx1ZS5zbGljZShpKSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cbiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBhZnRlciBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcblxuICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgIGNhc2UgXCI8XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlID0gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyICsgXCJcIjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XG4gICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxuICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcbiAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgZm9ybWF0UHJlZml4OiBmb3JtYXRQcmVmaXhcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLAogICAgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsCiAgICAiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLAogICAgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0RGVmYXVsdExvY2FsZSwgZm9ybWF0LCBmb3JtYXRQcmVmaXh9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXRMb2NhbGV9IGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdFNwZWNpZmllciwgRm9ybWF0U3BlY2lmaWVyfSBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25GaXhlZH0gZnJvbSBcIi4vcHJlY2lzaW9uRml4ZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25QcmVmaXh9IGZyb20gXCIuL3ByZWNpc2lvblByZWZpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiLi9wcmVjaXNpb25Sb3VuZC5qc1wiO1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLAogICAgImltcG9ydCB7SW50ZXJuTWFwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBpbXBsaWNpdCA9IFN5bWJvbChcImltcGxpY2l0XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRpbmFsKCkge1xuICB2YXIgaW5kZXggPSBuZXcgSW50ZXJuTWFwKCksXG4gICAgICBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB1bmtub3duID0gaW1wbGljaXQ7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIGxldCBpID0gaW5kZXguZ2V0KGQpO1xuICAgIGlmIChpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh1bmtub3duICE9PSBpbXBsaWNpdCkgcmV0dXJuIHVua25vd247XG4gICAgICBpbmRleC5zZXQoZCwgaSA9IGRvbWFpbi5wdXNoKGQpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVtpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBuZXcgSW50ZXJuTWFwKCk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBfKSB7XG4gICAgICBpZiAoaW5kZXguaGFzKHZhbHVlKSkgY29udGludWU7XG4gICAgICBpbmRleC5zZXQodmFsdWUsIGRvbWFpbi5wdXNoKHZhbHVlKSAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsCiAgICAiaW1wb3J0IHtyYW5nZSBhcyBzZXF1ZW5jZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByMCA9IDAsXG4gICAgICByMSA9IDEsXG4gICAgICBzdGVwLFxuICAgICAgYmFuZHdpZHRoLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IDAsXG4gICAgICBwYWRkaW5nT3V0ZXIgPSAwLFxuICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgZGVsZXRlIHNjYWxlLnVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgcmV2ZXJzZSA9IHIxIDwgcjAsXG4gICAgICAgIHN0YXJ0ID0gcmV2ZXJzZSA/IHIxIDogcjAsXG4gICAgICAgIHN0b3AgPSByZXZlcnNlID8gcjAgOiByMTtcbiAgICBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgxLCBuIC0gcGFkZGluZ0lubmVyICsgcGFkZGluZ091dGVyICogMik7XG4gICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICBzdGFydCArPSAoc3RvcCAtIHN0YXJ0IC0gc3RlcCAqIChuIC0gcGFkZGluZ0lubmVyKSkgKiBhbGlnbjtcbiAgICBiYW5kd2lkdGggPSBzdGVwICogKDEgLSBwYWRkaW5nSW5uZXIpO1xuICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgIHZhciB2YWx1ZXMgPSBzZXF1ZW5jZShuKS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gc3RhcnQgKyBzdGVwICogaTsgfSk7XG4gICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3IwLCByMV0gPSBfLCByMCA9ICtyMCwgcjEgPSArcjEsIHJlc2NhbGUoKSkgOiBbcjAsIHIxXTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBbcjAsIHIxXSA9IF8sIHIwID0gK3IwLCByMSA9ICtyMSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuYmFuZHdpZHRoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgfTtcblxuICBzY2FsZS5zdGVwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHN0ZXA7XG4gIH07XG5cbiAgc2NhbGUucm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWluKDEsIHBhZGRpbmdPdXRlciA9ICtfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgXyksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ091dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdPdXRlciA9ICtfLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKGRvbWFpbigpLCBbcjAsIHIxXSlcbiAgICAgICAgLnJvdW5kKHJvdW5kKVxuICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgLnBhZGRpbmdPdXRlcihwYWRkaW5nT3V0ZXIpXG4gICAgICAgIC5hbGlnbihhbGlnbik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShyZXNjYWxlKCksIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50aXNoKHNjYWxlKSB7XG4gIHZhciBjb3B5ID0gc2NhbGUuY29weTtcblxuICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ0lubmVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ091dGVyO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goY29weSgpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCgpIHtcbiAgcmV0dXJuIHBvaW50aXNoKGJhbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiAreDtcbn1cbiIsCiAgICAiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLAogICAgImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrRm9ybWF0KHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsCiAgICAiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuaWNlKGRvbWFpbiwgaW50ZXJ2YWwpIHtcbiAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgdmFyIGkwID0gMCxcbiAgICAgIGkxID0gZG9tYWluLmxlbmd0aCAtIDEsXG4gICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICB4MSA9IGRvbWFpbltpMV0sXG4gICAgICB0O1xuXG4gIGlmICh4MSA8IHgwKSB7XG4gICAgdCA9IGkwLCBpMCA9IGkxLCBpMSA9IHQ7XG4gICAgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7XG4gIH1cblxuICBkb21haW5baTBdID0gaW50ZXJ2YWwuZmxvb3IoeDApO1xuICBkb21haW5baTFdID0gaW50ZXJ2YWwuY2VpbCh4MSk7XG4gIHJldHVybiBkb21haW47XG59XG4iLAogICAgImNvbnN0IHQwID0gbmV3IERhdGUsIHQxID0gbmV3IERhdGU7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lSW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gKGRhdGUpID0+IHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLmNlaWwgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IChkYXRlKSA9PiB7XG4gICAgY29uc3QgZDAgPSBpbnRlcnZhbChkYXRlKSwgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IChkYXRlLCBzdGVwKSA9PiB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gKHN0YXJ0LCBzdG9wLCBzdGVwKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPSBbXTtcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBsZXQgcHJldmlvdXM7XG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSAodGVzdCkgPT4ge1xuICAgIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB7XG4gICAgICAgIGlmIChzdGVwIDwgMCkgd2hpbGUgKCsrc3RlcCA8PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9IGVsc2Ugd2hpbGUgKC0tc3RlcCA+PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgKzEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IChzdGVwKSA9PiB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyAoZCkgPT4gZmllbGQoZCkgJSBzdGVwID09PSAwXG4gICAgICAgICAgICAgIDogKGQpID0+IGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsCiAgICAiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZCA9IHRpbWVJbnRlcnZhbCgoKSA9PiB7XG4gIC8vIG5vb3Bcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gKGspID0+IHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwKICAgICJleHBvcnQgY29uc3QgZHVyYXRpb25TZWNvbmQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTWludXRlID0gZHVyYXRpb25TZWNvbmQgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uRGF5ID0gZHVyYXRpb25Ib3VyICogMjQ7XG5leHBvcnQgY29uc3QgZHVyYXRpb25XZWVrID0gZHVyYXRpb25EYXkgKiA3O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uWWVhciA9IGR1cmF0aW9uRGF5ICogMzY1O1xuIiwKICAgICJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmQgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwKICAgICJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlcyA9IHRpbWVNaW51dGUucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNaW51dGUgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLAogICAgImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91cnMgPSB0aW1lSG91ci5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiIsCiAgICAiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXkgPSB0aW1lSW50ZXJ2YWwoXG4gIGRhdGUgPT4gZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSxcbiAgKGRhdGUsIHN0ZXApID0+IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApLFxuICAoc3RhcnQsIGVuZCkgPT4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheSxcbiAgZGF0ZSA9PiBkYXRlLmdldERhdGUoKSAtIDFcbik7XG5cbmV4cG9ydCBjb25zdCB0aW1lRGF5cyA9IHRpbWVEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5ID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25EYXkpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5cyA9IHVuaXhEYXkucmFuZ2U7XG4iLAogICAgImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB0aW1lV2Vla2RheShpKSB7XG4gIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5ID0gdGltZVdlZWtkYXkoMCk7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheSA9IHRpbWVXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5ID0gdGltZVdlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheSA9IHRpbWVXZWVrZGF5KDMpO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheSA9IHRpbWVXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXkgPSB0aW1lV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXkgPSB0aW1lV2Vla2RheSg2KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVTdW5kYXlzID0gdGltZVN1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lTW9uZGF5cyA9IHRpbWVNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVR1ZXNkYXlzID0gdGltZVR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheXMgPSB0aW1lV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheXMgPSB0aW1lVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZUZyaWRheXMgPSB0aW1lRnJpZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVTYXR1cmRheXMgPSB0aW1lU2F0dXJkYXkucmFuZ2U7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsCiAgICAiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lTW9udGggPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRocyA9IHRpbWVNb250aC5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y01vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZSgxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01vbnRocyA9IHV0Y01vbnRoLnJhbmdlO1xuIiwKICAgICJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudGltZVllYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFycyA9IHRpbWVZZWFyLnJhbmdlO1xuXG5leHBvcnQgY29uc3QgdXRjWWVhciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiIsCiAgICAiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHttaWxsaXNlY29uZH0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCB7c2Vjb25kfSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcbmltcG9ydCB7dGltZU1pbnV0ZSwgdXRjTWludXRlfSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCB7dGltZUhvdXIsIHV0Y0hvdXJ9IGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCB7dGltZURheSwgdW5peERheX0gZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3RpbWVTdW5kYXksIHV0Y1N1bmRheX0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuaW1wb3J0IHt0aW1lTW9udGgsIHV0Y01vbnRofSBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHt0aW1lWWVhciwgdXRjWWVhcn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5mdW5jdGlvbiB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKSB7XG5cbiAgY29uc3QgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQ7XG4gICAgaWYgKHJldmVyc2UpIFtzdGFydCwgc3RvcF0gPSBbc3RvcCwgc3RhcnRdO1xuICAgIGNvbnN0IGludGVydmFsID0gY291bnQgJiYgdHlwZW9mIGNvdW50LnJhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBjb3VudCA6IHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIGNvbnN0IHRpY2tzID0gaW50ZXJ2YWwgPyBpbnRlcnZhbC5yYW5nZShzdGFydCwgK3N0b3AgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByZXZlcnNlID8gdGlja3MucmV2ZXJzZSgpIDogdGlja3M7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGNvdW50O1xuICAgIGNvbnN0IGkgPSBiaXNlY3RvcigoWywsIHN0ZXBdKSA9PiBzdGVwKS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkgcmV0dXJuIHllYXIuZXZlcnkodGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGNvdW50KSk7XG4gICAgaWYgKGkgPT09IDApIHJldHVybiBtaWxsaXNlY29uZC5ldmVyeShNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLCAxKSk7XG4gICAgY29uc3QgW3QsIHN0ZXBdID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgIHJldHVybiB0LmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIFt0aWNrcywgdGlja0ludGVydmFsXTtcbn1cblxuY29uc3QgW3V0Y1RpY2tzLCB1dGNUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNTdW5kYXksIHVuaXhEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSk7XG5jb25zdCBbdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsXSA9IHRpY2tlcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiIsCiAgICAiZXhwb3J0IHtcbiAgdGltZUludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIG1pbGxpc2Vjb25kIGFzIHV0Y01pbGxpc2Vjb25kLFxuICBtaWxsaXNlY29uZHMgYXMgdXRjTWlsbGlzZWNvbmRzLFxuICBtaWxsaXNlY29uZCBhcyB0aW1lTWlsbGlzZWNvbmQsXG4gIG1pbGxpc2Vjb25kcyBhcyB0aW1lTWlsbGlzZWNvbmRzXG59IGZyb20gXCIuL21pbGxpc2Vjb25kLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHNlY29uZCBhcyB1dGNTZWNvbmQsXG4gIHNlY29uZHMgYXMgdXRjU2Vjb25kcyxcbiAgc2Vjb25kIGFzIHRpbWVTZWNvbmQsXG4gIHNlY29uZHMgYXMgdGltZVNlY29uZHNcbn0gZnJvbSBcIi4vc2Vjb25kLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVNaW51dGUsXG4gIHRpbWVNaW51dGVzLFxuICB1dGNNaW51dGUsXG4gIHV0Y01pbnV0ZXNcbn0gZnJvbSBcIi4vbWludXRlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVIb3VyLFxuICB0aW1lSG91cnMsXG4gIHV0Y0hvdXIsXG4gIHV0Y0hvdXJzXG59IGZyb20gXCIuL2hvdXIuanNcIjtcblxuZXhwb3J0IHtcbiAgdGltZURheSxcbiAgdGltZURheXMsXG4gIHV0Y0RheSxcbiAgdXRjRGF5cyxcbiAgdW5peERheSxcbiAgdW5peERheXNcbn0gZnJvbSBcIi4vZGF5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVTdW5kYXkgYXMgdGltZVdlZWssXG4gIHRpbWVTdW5kYXlzIGFzIHRpbWVXZWVrcyxcbiAgdGltZVN1bmRheSxcbiAgdGltZVN1bmRheXMsXG4gIHRpbWVNb25kYXksXG4gIHRpbWVNb25kYXlzLFxuICB0aW1lVHVlc2RheSxcbiAgdGltZVR1ZXNkYXlzLFxuICB0aW1lV2VkbmVzZGF5LFxuICB0aW1lV2VkbmVzZGF5cyxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lVGh1cnNkYXlzLFxuICB0aW1lRnJpZGF5LFxuICB0aW1lRnJpZGF5cyxcbiAgdGltZVNhdHVyZGF5LFxuICB0aW1lU2F0dXJkYXlzLFxuICB1dGNTdW5kYXkgYXMgdXRjV2VlayxcbiAgdXRjU3VuZGF5cyBhcyB1dGNXZWVrcyxcbiAgdXRjU3VuZGF5LFxuICB1dGNTdW5kYXlzLFxuICB1dGNNb25kYXksXG4gIHV0Y01vbmRheXMsXG4gIHV0Y1R1ZXNkYXksXG4gIHV0Y1R1ZXNkYXlzLFxuICB1dGNXZWRuZXNkYXksXG4gIHV0Y1dlZG5lc2RheXMsXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNUaHVyc2RheXMsXG4gIHV0Y0ZyaWRheSxcbiAgdXRjRnJpZGF5cyxcbiAgdXRjU2F0dXJkYXksXG4gIHV0Y1NhdHVyZGF5c1xufSBmcm9tIFwiLi93ZWVrLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVNb250aCxcbiAgdGltZU1vbnRocyxcbiAgdXRjTW9udGgsXG4gIHV0Y01vbnRoc1xufSBmcm9tIFwiLi9tb250aC5qc1wiO1xuXG5leHBvcnQge1xuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxuICB1dGNZZWFyLFxuICB1dGNZZWFyc1xufSBmcm9tIFwiLi95ZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHV0Y1RpY2tzLFxuICB1dGNUaWNrSW50ZXJ2YWwsXG4gIHRpbWVUaWNrcyxcbiAgdGltZVRpY2tJbnRlcnZhbFxufSBmcm9tIFwiLi90aWNrcy5qc1wiO1xuIiwKICAgICJpbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lU3VuZGF5LFxuICB0aW1lTW9uZGF5LFxuICB0aW1lVGh1cnNkYXksXG4gIHRpbWVZZWFyLFxuICB1dGNEYXksXG4gIHV0Y1N1bmRheSxcbiAgdXRjTW9uZGF5LFxuICB1dGNUaHVyc2RheSxcbiAgdXRjWWVhclxufSBmcm9tIFwiZDMtdGltZVwiO1xuXG5mdW5jdGlvbiBsb2NhbERhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xufVxuXG5mdW5jdGlvbiB1dGNEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xufVxuXG5mdW5jdGlvbiBuZXdEYXRlKHksIG0sIGQpIHtcbiAgcmV0dXJuIHt5OiB5LCBtOiBtLCBkOiBkLCBIOiAwLCBNOiAwLCBTOiAwLCBMOiAwfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxuICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgIGxvY2FsZV90aW1lID0gbG9jYWxlLnRpbWUsXG4gICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxuICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICBsb2NhbGVfc2hvcnRXZWVrZGF5cyA9IGxvY2FsZS5zaG9ydERheXMsXG4gICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcbiAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXG4gICAgICBwZXJpb2RMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcbiAgICAgIG1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLFxuICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcblxuICB2YXIgZm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0TWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdERheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0TWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0U2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0V2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0WWVhcixcbiAgICBcIllcIjogZm9ybWF0RnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFpvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHV0Y0Zvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFVUQ1Nob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0VVRDV2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0VVRDU2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0VVRDTW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogZm9ybWF0VVRDWWVhcklTTyxcbiAgICBcIkdcIjogZm9ybWF0VVRDRnVsbFllYXJJU08sXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcInFcIjogZm9ybWF0VVRDUXVhcnRlcixcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRVVENab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciBwYXJzZXMgPSB7XG4gICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXG4gICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcbiAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcbiAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBwYXJzZVllYXIsXG4gICAgXCJHXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgXCJIXCI6IHBhcnNlSG91cjI0LFxuICAgIFwiSVwiOiBwYXJzZUhvdXIyNCxcbiAgICBcImpcIjogcGFyc2VEYXlPZlllYXIsXG4gICAgXCJMXCI6IHBhcnNlTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBwYXJzZU1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBwYXJzZU1pbnV0ZXMsXG4gICAgXCJwXCI6IHBhcnNlUGVyaW9kLFxuICAgIFwicVwiOiBwYXJzZVF1YXJ0ZXIsXG4gICAgXCJRXCI6IHBhcnNlVW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxuICAgIFwidVwiOiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IHBhcnNlV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogcGFyc2VXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IHBhcnNlV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxuICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgXCJ5XCI6IHBhcnNlWWVhcixcbiAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgIFwiJVwiOiBwYXJzZUxpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIGogPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFkLFxuICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSBkYXRlID0gbmV3IERhdGUoK2RhdGUpO1xuXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgICBpZiAoKHBhZCA9IHBhZHNbYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKV0pICE9IG51bGwpIGMgPSBzcGVjaWZpZXIuY2hhckF0KCsraSk7XG4gICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcbiAgICAgICAgICBzdHJpbmcucHVzaChjKTtcbiAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UGFyc2Uoc3BlY2lmaWVyLCBaKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIGQgPSBuZXdEYXRlKDE5MDAsIHVuZGVmaW5lZCwgMSksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuICAgICAgaWYgKFwic1wiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLnMgKiAxMDAwICsgKFwiTFwiIGluIGQgPyBkLkwgOiAwKSk7XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgdXRjUGFyc2UsIG5ldmVyIHVzZSB0aGUgbG9jYWwgdGltZXpvbmUuXG4gICAgICBpZiAoWiAmJiAhKFwiWlwiIGluIGQpKSBkLlogPSAwO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIElmIHRoZSBtb250aCB3YXMgbm90IHNwZWNpZmllZCwgaW5oZXJpdCBmcm9tIHRoZSBxdWFydGVyLlxuICAgICAgaWYgKGQubSA9PT0gdW5kZWZpbmVkKSBkLm0gPSBcInFcIiBpbiBkID8gZC5xIDogMDtcblxuICAgICAgLy8gQ29udmVydCBkYXktb2Ytd2VlayBhbmQgd2Vlay1vZi15ZWFyIHRvIGRheS1vZi15ZWFyLlxuICAgICAgaWYgKFwiVlwiIGluIGQpIHtcbiAgICAgICAgaWYgKGQuViA8IDEgfHwgZC5WID4gNTMpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gMTtcbiAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldFVUQ0RheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHV0Y01vbmRheS5jZWlsKHdlZWspIDogdXRjTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXRVVENEYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdlZWsgPSBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXREYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB0aW1lTW9uZGF5LmNlaWwod2VlaykgOiB0aW1lTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB0aW1lRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0RGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwidVwiIGluIGQgPyBkLnUgJSA3IDogXCJXXCIgaW4gZCA/IDEgOiAwO1xuICAgICAgICBkYXkgPSBcIlpcIiBpbiBkID8gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldFVUQ0RheSgpIDogbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBsb2NhbERhdGUoZCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nLCBqKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgbSA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgIGMsXG4gICAgICAgIHBhcnNlO1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBpZiAoaiA+PSBtKSByZXR1cm4gLTE7XG4gICAgICBjID0gc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGlmIChjID09PSAzNykge1xuICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJBdChpKyspO1xuICAgICAgICBwYXJzZSA9IHBhcnNlc1tjIGluIHBhZHMgPyBzcGVjaWZpZXIuY2hhckF0KGkrKykgOiBjXTtcbiAgICAgICAgaWYgKCFwYXJzZSB8fCAoKGogPSBwYXJzZShkLCBzdHJpbmcsIGopKSA8IDApKSByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5nLmNoYXJDb2RlQXQoaisrKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGo7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHBlcmlvZFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLnAgPSBwZXJpb2RMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gd2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydE1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IHNob3J0TW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGVUaW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX3RpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0TW9udGgoKSAvIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldFVUQ01vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgZmFsc2UpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSxcbiAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICB1dGNQYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCB0cnVlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHBhZHMgPSB7XCItXCI6IFwiXCIsIFwiX1wiOiBcIiBcIiwgXCIwXCI6IFwiMFwifSxcbiAgICBudW1iZXJSZSA9IC9eXFxzKlxcZCsvLCAvLyBub3RlOiBpZ25vcmVzIG5leHQgZGlyZWN0aXZlXG4gICAgcGVyY2VudFJlID0gL14lLyxcbiAgICByZXF1b3RlUmUgPSAvW1xcXFxeJCorP3xbXFxdKCkue31dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICByZXR1cm4gbmV3IE1hcChuYW1lcy5tYXAoKG5hbWUsIGkpID0+IFtuYW1lLnRvTG93ZXJDYXNlKCksIGldKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC51ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlYgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLlogPSBuWzFdID8gMCA6IC0oblsyXSArIChuWzNdIHx8IFwiMDBcIikpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVhcnRlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnEgPSBuWzBdICogMyAtIDMsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5zID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBkSVNPKGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IGRJU08oZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFpvbmUoZCkge1xuICB2YXIgeiA9IGQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuICh6ID4gMCA/IFwiLVwiIDogKHogKj0gLTEsIFwiK1wiKSlcbiAgICAgICsgcGFkKHogLyA2MCB8IDAsIFwiMFwiLCAyKVxuICAgICAgKyBwYWQoeiAlIDYwLCBcIjBcIiwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdXRjRGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ1NlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZG93ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIGRvdyA9PT0gMCA/IDcgOiBkb3c7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y1N1bmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBVVENkSVNPKGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIGQgPSBVVENkSVNPKGQpO1xuICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldFVUQ0RheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcklTTyhkLCBwKSB7XG4gIGQgPSBVVENkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsCiAgICAiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlLCB0aW1lRm9ybWF0LCB0aW1lUGFyc2UsIHV0Y0Zvcm1hdCwgdXRjUGFyc2V9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aW1lRm9ybWF0TG9jYWxlfSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpc29Gb3JtYXR9IGZyb20gXCIuL2lzb0Zvcm1hdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGlzb1BhcnNlfSBmcm9tIFwiLi9pc29QYXJzZS5qc1wiO1xuIiwKICAgICJpbXBvcnQge3RpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHt0aW1lRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2UuanNcIjtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCksXG4gICAgICBpbnZlcnQgPSBzY2FsZS5pbnZlcnQsXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgdmFyIGZvcm1hdE1pbGxpc2Vjb25kID0gZm9ybWF0KFwiLiVMXCIpLFxuICAgICAgZm9ybWF0U2Vjb25kID0gZm9ybWF0KFwiOiVTXCIpLFxuICAgICAgZm9ybWF0TWludXRlID0gZm9ybWF0KFwiJUk6JU1cIiksXG4gICAgICBmb3JtYXRIb3VyID0gZm9ybWF0KFwiJUkgJXBcIiksXG4gICAgICBmb3JtYXREYXkgPSBmb3JtYXQoXCIlYSAlZFwiKSxcbiAgICAgIGZvcm1hdFdlZWsgPSBmb3JtYXQoXCIlYiAlZFwiKSxcbiAgICAgIGZvcm1hdE1vbnRoID0gZm9ybWF0KFwiJUJcIiksXG4gICAgICBmb3JtYXRZZWFyID0gZm9ybWF0KFwiJVlcIik7XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkYXRlKSB7XG4gICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgOiBtaW51dGUoZGF0ZSkgPCBkYXRlID8gZm9ybWF0U2Vjb25kXG4gICAgICAgIDogaG91cihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaW51dGVcbiAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICA6IG1vbnRoKGRhdGUpIDwgZGF0ZSA/ICh3ZWVrKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdERheSA6IGZvcm1hdFdlZWspXG4gICAgICAgIDogeWVhcihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNb250aFxuICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihBcnJheS5mcm9tKF8sIG51bWJlcikpIDogZG9tYWluKCkubWFwKGRhdGUpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGludGVydmFsID09IG51bGwgPyAxMCA6IGludGVydmFsKTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiBzcGVjaWZpZXIgPT0gbnVsbCA/IHRpY2tGb3JtYXQgOiBmb3JtYXQoc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIGlmICghaW50ZXJ2YWwgfHwgdHlwZW9mIGludGVydmFsLnJhbmdlICE9PSBcImZ1bmN0aW9uXCIpIGludGVydmFsID0gdGlja0ludGVydmFsKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICAgIHJldHVybiBpbnRlcnZhbCA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSkgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHRpY2tzLCB0aWNrSW50ZXJ2YWwsIHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmb3JtYXQpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpbWUoKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsLCB0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMjAwMCwgMCwgMSksIG5ldyBEYXRlKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iLAogICAgImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVSYWRpYWxcbn0gZnJvbSBcIi4vcmFkaWFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmcuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gIHZhciBuID0gc3BlY2lmaWVyLmxlbmd0aCAvIDYgfCAwLCBjb2xvcnMgPSBuZXcgQXJyYXkobiksIGkgPSAwO1xuICB3aGlsZSAoaSA8IG4pIGNvbG9yc1tpXSA9IFwiI1wiICsgc3BlY2lmaWVyLnNsaWNlKGkgKiA2LCArK2kgKiA2KTtcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiIsCiAgICAiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYlwiKTtcbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZUNhdGVnb3J5MTB9IGZyb20gXCIuL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVBY2NlbnR9IGZyb20gXCIuL2NhdGVnb3JpY2FsL0FjY2VudC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZURhcmsyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9EYXJrMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZU9ic2VydmFibGUxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvb2JzZXJ2YWJsZTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFpcmVkfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYWlyZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYXN0ZWwxfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYXN0ZWwxLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFzdGVsMn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFzdGVsMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDF9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0M30gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0My5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVRhYmxlYXUxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvVGFibGVhdTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCckJHLCBzY2hlbWUgYXMgc2NoZW1lQnJCR30gZnJvbSBcIi4vZGl2ZXJnaW5nL0JyQkcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVBSR24sIHNjaGVtZSBhcyBzY2hlbWVQUkdufSBmcm9tIFwiLi9kaXZlcmdpbmcvUFJHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUGlZRywgc2NoZW1lIGFzIHNjaGVtZVBpWUd9IGZyb20gXCIuL2RpdmVyZ2luZy9QaVlHLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdU9yLCBzY2hlbWUgYXMgc2NoZW1lUHVPcn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1B1T3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkQnUsIHNjaGVtZSBhcyBzY2hlbWVSZEJ1fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRHeSwgc2NoZW1lIGFzIHNjaGVtZVJkR3l9IGZyb20gXCIuL2RpdmVyZ2luZy9SZEd5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFlsQnUsIHNjaGVtZSBhcyBzY2hlbWVSZFlsQnV9IGZyb20gXCIuL2RpdmVyZ2luZy9SZFlsQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkWWxHbiwgc2NoZW1lIGFzIHNjaGVtZVJkWWxHbn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkWWxHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU3BlY3RyYWwsIHNjaGVtZSBhcyBzY2hlbWVTcGVjdHJhbH0gZnJvbSBcIi4vZGl2ZXJnaW5nL1NwZWN0cmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCdUduLCBzY2hlbWUgYXMgc2NoZW1lQnVHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCdVB1LCBzY2hlbWUgYXMgc2NoZW1lQnVQdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9CdVB1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHbkJ1LCBzY2hlbWUgYXMgc2NoZW1lR25CdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9HbkJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPclJkLCBzY2hlbWUgYXMgc2NoZW1lT3JSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdUJ1R24sIHNjaGVtZSBhcyBzY2hlbWVQdUJ1R259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVCdUduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdUJ1LCBzY2hlbWUgYXMgc2NoZW1lUHVCdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdUJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdVJkLCBzY2hlbWUgYXMgc2NoZW1lUHVSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdVJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFB1LCBzY2hlbWUgYXMgc2NoZW1lUmRQdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9SZFB1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbEduQnUsIHNjaGVtZSBhcyBzY2hlbWVZbEduQnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbEduLCBzY2hlbWUgYXMgc2NoZW1lWWxHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbE9yQnIsIHNjaGVtZSBhcyBzY2hlbWVZbE9yQnJ9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxPckJyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbE9yUmQsIHNjaGVtZSBhcyBzY2hlbWVZbE9yUmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxPclJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCbHVlcywgc2NoZW1lIGFzIHNjaGVtZUJsdWVzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9CbHVlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR3JlZW5zLCBzY2hlbWUgYXMgc2NoZW1lR3JlZW5zfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9HcmVlbnMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUdyZXlzLCBzY2hlbWUgYXMgc2NoZW1lR3JleXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0dyZXlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdXJwbGVzLCBzY2hlbWUgYXMgc2NoZW1lUHVycGxlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvUHVycGxlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmVkcywgc2NoZW1lIGFzIHNjaGVtZVJlZHN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL1JlZHMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9yYW5nZXMsIHNjaGVtZSBhcyBzY2hlbWVPcmFuZ2VzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9PcmFuZ2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDaXZpZGlzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL2NpdmlkaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvY3ViZWhlbGl4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSYWluYm93LCB3YXJtIGFzIGludGVycG9sYXRlV2FybSwgY29vbCBhcyBpbnRlcnBvbGF0ZUNvb2x9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU2luZWJvd30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9zaW5lYm93LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVUdXJib30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS90dXJiby5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlVmlyaWRpcywgbWFnbWEgYXMgaW50ZXJwb2xhdGVNYWdtYSwgaW5mZXJubyBhcyBpbnRlcnBvbGF0ZUluZmVybm8sIHBsYXNtYSBhcyBpbnRlcnBvbGF0ZVBsYXNtYX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzXCI7XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwKICAgICJleHBvcnQgY29uc3QgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgY29uc3QgYXRhbjIgPSBNYXRoLmF0YW4yO1xuZXhwb3J0IGNvbnN0IGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IGNvbnN0IG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IGNvbnN0IG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IGNvbnN0IHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IGNvbnN0IHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gMWUtMTI7XG5leHBvcnQgY29uc3QgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IGNvbnN0IGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCBjb25zdCB0YXUgPSAyICogcGk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY29zKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gMCA6IHggPCAtMSA/IHBpIDogTWF0aC5hY29zKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNpbih4KSB7XG4gIHJldHVybiB4ID49IDEgPyBoYWxmUGkgOiB4IDw9IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtQYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhdGgoc2hhcGUpIHtcbiAgbGV0IGRpZ2l0cyA9IDM7XG5cbiAgc2hhcGUuZGlnaXRzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpZ2l0cztcbiAgICBpZiAoXyA9PSBudWxsKSB7XG4gICAgICBkaWdpdHMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkID0gTWF0aC5mbG9vcihfKTtcbiAgICAgIGlmICghKGQgPj0gMCkpIHRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtffWApO1xuICAgICAgZGlnaXRzID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9O1xuXG4gIHJldHVybiAoKSA9PiBuZXcgUGF0aChkaWdpdHMpO1xufVxuIiwKICAgICJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWJzLCBhY29zLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIG1heCwgbWluLCBwaSwgc2luLCBzcXJ0LCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcblxuZnVuY3Rpb24gYXJjSW5uZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5pbm5lclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjT3V0ZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5vdXRlclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjU3RhcnRBbmdsZShkKSB7XG4gIHJldHVybiBkLnN0YXJ0QW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY0VuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY1BhZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQgJiYgZC5wYWRBbmdsZTsgLy8gTm90ZTogb3B0aW9uYWwhXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHgxMCA9IHgxIC0geDAsIHkxMCA9IHkxIC0geTAsXG4gICAgICB4MzIgPSB4MyAtIHgyLCB5MzIgPSB5MyAtIHkyLFxuICAgICAgdCA9IHkzMiAqIHgxMCAtIHgzMiAqIHkxMDtcbiAgaWYgKHQgKiB0IDwgZXBzaWxvbikgcmV0dXJuO1xuICB0ID0gKHgzMiAqICh5MCAtIHkyKSAtIHkzMiAqICh4MCAtIHgyKSkgLyB0O1xuICByZXR1cm4gW3gwICsgdCAqIHgxMCwgeTAgKyB0ICogeTEwXTtcbn1cblxuLy8gQ29tcHV0ZSBwZXJwZW5kaWN1bGFyIG9mZnNldCBsaW5lIG9mIGxlbmd0aCByYy5cbi8vIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vQ2lyY2xlLUxpbmVJbnRlcnNlY3Rpb24uaHRtbFxuZnVuY3Rpb24gY29ybmVyVGFuZ2VudHMoeDAsIHkwLCB4MSwgeTEsIHIxLCByYywgY3cpIHtcbiAgdmFyIHgwMSA9IHgwIC0geDEsXG4gICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgbG8gPSAoY3cgPyByYyA6IC1yYykgLyBzcXJ0KHgwMSAqIHgwMSArIHkwMSAqIHkwMSksXG4gICAgICBveCA9IGxvICogeTAxLFxuICAgICAgb3kgPSAtbG8gKiB4MDEsXG4gICAgICB4MTEgPSB4MCArIG94LFxuICAgICAgeTExID0geTAgKyBveSxcbiAgICAgIHgxMCA9IHgxICsgb3gsXG4gICAgICB5MTAgPSB5MSArIG95LFxuICAgICAgeDAwID0gKHgxMSArIHgxMCkgLyAyLFxuICAgICAgeTAwID0gKHkxMSArIHkxMCkgLyAyLFxuICAgICAgZHggPSB4MTAgLSB4MTEsXG4gICAgICBkeSA9IHkxMCAtIHkxMSxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICByID0gcjEgLSByYyxcbiAgICAgIEQgPSB4MTEgKiB5MTAgLSB4MTAgKiB5MTEsXG4gICAgICBkID0gKGR5IDwgMCA/IC0xIDogMSkgKiBzcXJ0KG1heCgwLCByICogciAqIGQyIC0gRCAqIEQpKSxcbiAgICAgIGN4MCA9IChEICogZHkgLSBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTAgPSAoLUQgKiBkeCAtIGR5ICogZCkgLyBkMixcbiAgICAgIGN4MSA9IChEICogZHkgKyBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTEgPSAoLUQgKiBkeCArIGR5ICogZCkgLyBkMixcbiAgICAgIGR4MCA9IGN4MCAtIHgwMCxcbiAgICAgIGR5MCA9IGN5MCAtIHkwMCxcbiAgICAgIGR4MSA9IGN4MSAtIHgwMCxcbiAgICAgIGR5MSA9IGN5MSAtIHkwMDtcblxuICAvLyBQaWNrIHRoZSBjbG9zZXIgb2YgdGhlIHR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAvLyBUT0RPIElzIHRoZXJlIGEgZmFzdGVyIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggaW50ZXJzZWN0aW9uIHRvIHVzZT9cbiAgaWYgKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSkgY3gwID0gY3gxLCBjeTAgPSBjeTE7XG5cbiAgcmV0dXJuIHtcbiAgICBjeDogY3gwLFxuICAgIGN5OiBjeTAsXG4gICAgeDAxOiAtb3gsXG4gICAgeTAxOiAtb3ksXG4gICAgeDExOiBjeDAgKiAocjEgLyByIC0gMSksXG4gICAgeTExOiBjeTAgKiAocjEgLyByIC0gMSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpbm5lclJhZGl1cyA9IGFyY0lubmVyUmFkaXVzLFxuICAgICAgb3V0ZXJSYWRpdXMgPSBhcmNPdXRlclJhZGl1cyxcbiAgICAgIGNvcm5lclJhZGl1cyA9IGNvbnN0YW50KDApLFxuICAgICAgcGFkUmFkaXVzID0gbnVsbCxcbiAgICAgIHN0YXJ0QW5nbGUgPSBhcmNTdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUgPSBhcmNFbmRBbmdsZSxcbiAgICAgIHBhZEFuZ2xlID0gYXJjUGFkQW5nbGUsXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhdGggPSB3aXRoUGF0aChhcmMpO1xuXG4gIGZ1bmN0aW9uIGFyYygpIHtcbiAgICB2YXIgYnVmZmVyLFxuICAgICAgICByLFxuICAgICAgICByMCA9ICtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICByMSA9ICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgYTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gaGFsZlBpLFxuICAgICAgICBkYSA9IGFicyhhMSAtIGEwKSxcbiAgICAgICAgY3cgPSBhMSA+IGEwO1xuXG4gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gYnVmZmVyID0gcGF0aCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG91dGVyIHJhZGl1cyBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gdGhlIGlubmVyIHJhZGl1cy5cbiAgICBpZiAocjEgPCByMCkgciA9IHIxLCByMSA9IHIwLCByMCA9IHI7XG5cbiAgICAvLyBJcyBpdCBhIHBvaW50P1xuICAgIGlmICghKHIxID4gZXBzaWxvbikpIGNvbnRleHQubW92ZVRvKDAsIDApO1xuXG4gICAgLy8gT3IgaXMgaXQgYSBjaXJjbGUgb3IgYW5udWx1cz9cbiAgICBlbHNlIGlmIChkYSA+IHRhdSAtIGVwc2lsb24pIHtcbiAgICAgIGNvbnRleHQubW92ZVRvKHIxICogY29zKGEwKSwgcjEgKiBzaW4oYTApKTtcbiAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMCwgYTEsICFjdyk7XG4gICAgICBpZiAocjAgPiBlcHNpbG9uKSB7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKHIwICogY29zKGExKSwgcjAgKiBzaW4oYTEpKTtcbiAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExLCBhMCwgY3cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY3VsYXIgb3IgYW5udWxhciBzZWN0b3I/XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYTAxID0gYTAsXG4gICAgICAgICAgYTExID0gYTEsXG4gICAgICAgICAgYTAwID0gYTAsXG4gICAgICAgICAgYTEwID0gYTEsXG4gICAgICAgICAgZGEwID0gZGEsXG4gICAgICAgICAgZGExID0gZGEsXG4gICAgICAgICAgYXAgPSBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC8gMixcbiAgICAgICAgICBycCA9IChhcCA+IGVwc2lsb24pICYmIChwYWRSYWRpdXMgPyArcGFkUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzcXJ0KHIwICogcjAgKyByMSAqIHIxKSksXG4gICAgICAgICAgcmMgPSBtaW4oYWJzKHIxIC0gcjApIC8gMiwgK2Nvcm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgICByYzAgPSByYyxcbiAgICAgICAgICByYzEgPSByYyxcbiAgICAgICAgICB0MCxcbiAgICAgICAgICB0MTtcblxuICAgICAgLy8gQXBwbHkgcGFkZGluZz8gTm90ZSB0aGF0IHNpbmNlIHIxIOKJpSByMCwgZGExIOKJpSBkYTAuXG4gICAgICBpZiAocnAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHZhciBwMCA9IGFzaW4ocnAgLyByMCAqIHNpbihhcCkpLFxuICAgICAgICAgICAgcDEgPSBhc2luKHJwIC8gcjEgKiBzaW4oYXApKTtcbiAgICAgICAgaWYgKChkYTAgLT0gcDAgKiAyKSA+IGVwc2lsb24pIHAwICo9IChjdyA/IDEgOiAtMSksIGEwMCArPSBwMCwgYTEwIC09IHAwO1xuICAgICAgICBlbHNlIGRhMCA9IDAsIGEwMCA9IGExMCA9IChhMCArIGExKSAvIDI7XG4gICAgICAgIGlmICgoZGExIC09IHAxICogMikgPiBlcHNpbG9uKSBwMSAqPSAoY3cgPyAxIDogLTEpLCBhMDEgKz0gcDEsIGExMSAtPSBwMTtcbiAgICAgICAgZWxzZSBkYTEgPSAwLCBhMDEgPSBhMTEgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgeDAxID0gcjEgKiBjb3MoYTAxKSxcbiAgICAgICAgICB5MDEgPSByMSAqIHNpbihhMDEpLFxuICAgICAgICAgIHgxMCA9IHIwICogY29zKGExMCksXG4gICAgICAgICAgeTEwID0gcjAgKiBzaW4oYTEwKTtcblxuICAgICAgLy8gQXBwbHkgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgaWYgKHJjID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgeDExID0gcjEgKiBjb3MoYTExKSxcbiAgICAgICAgICAgIHkxMSA9IHIxICogc2luKGExMSksXG4gICAgICAgICAgICB4MDAgPSByMCAqIGNvcyhhMDApLFxuICAgICAgICAgICAgeTAwID0gcjAgKiBzaW4oYTAwKSxcbiAgICAgICAgICAgIG9jO1xuXG4gICAgICAgIC8vIFJlc3RyaWN0IHRoZSBjb3JuZXIgcmFkaXVzIGFjY29yZGluZyB0byB0aGUgc2VjdG9yIGFuZ2xlLiBJZiB0aGlzXG4gICAgICAgIC8vIGludGVyc2VjdGlvbiBmYWlscywgaXTigJlzIHByb2JhYmx5IGJlY2F1c2UgdGhlIGFyYyBpcyB0b28gc21hbGwsIHNvXG4gICAgICAgIC8vIGRpc2FibGUgdGhlIGNvcm5lciByYWRpdXMgZW50aXJlbHkuXG4gICAgICAgIGlmIChkYSA8IHBpKSB7XG4gICAgICAgICAgaWYgKG9jID0gaW50ZXJzZWN0KHgwMSwgeTAxLCB4MDAsIHkwMCwgeDExLCB5MTEsIHgxMCwgeTEwKSkge1xuICAgICAgICAgICAgdmFyIGF4ID0geDAxIC0gb2NbMF0sXG4gICAgICAgICAgICAgICAgYXkgPSB5MDEgLSBvY1sxXSxcbiAgICAgICAgICAgICAgICBieCA9IHgxMSAtIG9jWzBdLFxuICAgICAgICAgICAgICAgIGJ5ID0geTExIC0gb2NbMV0sXG4gICAgICAgICAgICAgICAga2MgPSAxIC8gc2luKGFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChzcXJ0KGF4ICogYXggKyBheSAqIGF5KSAqIHNxcnQoYnggKiBieCArIGJ5ICogYnkpKSkgLyAyKSxcbiAgICAgICAgICAgICAgICBsYyA9IHNxcnQob2NbMF0gKiBvY1swXSArIG9jWzFdICogb2NbMV0pO1xuICAgICAgICAgICAgcmMwID0gbWluKHJjLCAocjAgLSBsYykgLyAoa2MgLSAxKSk7XG4gICAgICAgICAgICByYzEgPSBtaW4ocmMsIChyMSAtIGxjKSAvIChrYyArIDEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmMwID0gcmMxID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSXMgdGhlIHNlY3RvciBjb2xsYXBzZWQgdG8gYSBsaW5lP1xuICAgICAgaWYgKCEoZGExID4gZXBzaWxvbikpIGNvbnRleHQubW92ZVRvKHgwMSwgeTAxKTtcblxuICAgICAgLy8gRG9lcyB0aGUgc2VjdG9y4oCZcyBvdXRlciByaW5nIGhhdmUgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgZWxzZSBpZiAocmMxID4gZXBzaWxvbikge1xuICAgICAgICB0MCA9IGNvcm5lclRhbmdlbnRzKHgwMCwgeTAwLCB4MDEsIHkwMSwgcjEsIHJjMSwgY3cpO1xuICAgICAgICB0MSA9IGNvcm5lclRhbmdlbnRzKHgxMSwgeTExLCB4MTAsIHkxMCwgcjEsIHJjMSwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzEgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMSwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjEsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmModDEuY3gsIHQxLmN5LCByYzEsIGF0YW4yKHQxLnkxMSwgdDEueDExKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIGlzIHRoZSBvdXRlciByaW5nIGp1c3QgYSBjaXJjdWxhciBhcmM/XG4gICAgICBlbHNlIGNvbnRleHQubW92ZVRvKHgwMSwgeTAxKSwgY29udGV4dC5hcmMoMCwgMCwgcjEsIGEwMSwgYTExLCAhY3cpO1xuXG4gICAgICAvLyBJcyB0aGVyZSBubyBpbm5lciByaW5nLCBhbmQgaXTigJlzIGEgY2lyY3VsYXIgc2VjdG9yP1xuICAgICAgLy8gT3IgcGVyaGFwcyBpdOKAmXMgYW4gYW5udWxhciBzZWN0b3IgY29sbGFwc2VkIGR1ZSB0byBwYWRkaW5nP1xuICAgICAgaWYgKCEocjAgPiBlcHNpbG9uKSB8fCAhKGRhMCA+IGVwc2lsb24pKSBjb250ZXh0LmxpbmVUbyh4MTAsIHkxMCk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgaW5uZXIgcmluZyAob3IgcG9pbnQpIGhhdmUgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgZWxzZSBpZiAocmMwID4gZXBzaWxvbikge1xuICAgICAgICB0MCA9IGNvcm5lclRhbmdlbnRzKHgxMCwgeTEwLCB4MTEsIHkxMSwgcjAsIC1yYzAsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MDEsIHkwMSwgeDAwLCB5MDAsIHIwLCAtcmMwLCBjdyk7XG5cbiAgICAgICAgY29udGV4dC5saW5lVG8odDAuY3ggKyB0MC54MDEsIHQwLmN5ICsgdDAueTAxKTtcblxuICAgICAgICAvLyBIYXZlIHRoZSBjb3JuZXJzIG1lcmdlZD9cbiAgICAgICAgaWYgKHJjMCA8IHJjKSBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkcmF3IHRoZSB0d28gY29ybmVycyBhbmQgdGhlIHJpbmcuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMwLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQwLnkxMSwgdDAueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMCwgYXRhbjIodDAuY3kgKyB0MC55MTEsIHQwLmN4ICsgdDAueDExKSwgYXRhbjIodDEuY3kgKyB0MS55MTEsIHQxLmN4ICsgdDEueDExKSwgY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMwLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgaW5uZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0LmFyYygwLCAwLCByMCwgYTEwLCBhMDAsIGN3KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBhcmMuY2VudHJvaWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9ICgraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSArICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSAvIDIsXG4gICAgICAgIGEgPSAoK3N0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSArICtlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSAvIDIgLSBwaSAvIDI7XG4gICAgcmV0dXJuIFtjb3MoYSkgKiByLCBzaW4oYSkgKiByXTtcbiAgfTtcblxuICBhcmMuaW5uZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW5uZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGlubmVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5vdXRlclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChvdXRlclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogb3V0ZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLmNvcm5lclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb3JuZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGNvcm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMucGFkUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZFJhZGl1cyA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHBhZFJhZGl1cztcbiAgfTtcblxuICBhcmMuc3RhcnRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdGFydEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBzdGFydEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5lbmRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlbmRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogZW5kQW5nbGU7XG4gIH07XG5cbiAgYXJjLnBhZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRBbmdsZTtcbiAgfTtcblxuICBhcmMuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgYXJjKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyYztcbn1cbiIsCiAgICAiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsCiAgICAiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsCiAgICAiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKGxpbmUpO1xuXG4gIHggPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6ICh4ID09PSB1bmRlZmluZWQpID8gcG9pbnRYIDogY29uc3RhbnQoeCk7XG4gIHkgPSB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geSA6ICh5ID09PSB1bmRlZmluZWQpID8gcG9pbnRZIDogY29uc3RhbnQoeSk7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYiA8IGEgPyAtMSA6IGIgPiBhID8gMSA6IGIgPj0gYSA/IDAgOiBOYU47XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLAogICAgImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGluZGV4ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhcmNzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhMCA9ICtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGRhID0gTWF0aC5taW4odGF1LCBNYXRoLm1heCgtdGF1LCBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gYTApKSxcbiAgICAgICAgYTEsXG4gICAgICAgIHAgPSBNYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgcGEgPSBwICogKGRhIDwgMCA/IC0xIDogMSksXG4gICAgICAgIHY7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHYgPSBhcmNzW2luZGV4W2ldID0gaV0gPSArdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSkpID4gMCkge1xuICAgICAgICBzdW0gKz0gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbGx5IHNvcnQgdGhlIGFyY3MgYnkgcHJldmlvdXNseS1jb21wdXRlZCB2YWx1ZXMgb3IgYnkgZGF0YS5cbiAgICBpZiAoc29ydFZhbHVlcyAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnRWYWx1ZXMoYXJjc1tpXSwgYXJjc1tqXSk7IH0pO1xuICAgIGVsc2UgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0KGRhdGFbaV0sIGRhdGFbal0pOyB9KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGFyY3MhIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSdzIG9yZGVyLlxuICAgIGZvciAoaSA9IDAsIGsgPSBzdW0gPyAoZGEgLSBuICogcGEpIC8gc3VtIDogMDsgaSA8IG47ICsraSwgYTAgPSBhMSkge1xuICAgICAgaiA9IGluZGV4W2ldLCB2ID0gYXJjc1tqXSwgYTEgPSBhMCArICh2ID4gMCA/IHYgKiBrIDogMCkgKyBwYSwgYXJjc1tqXSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVtqXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICBwYWRBbmdsZTogcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfVxuXG4gIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogdmFsdWU7XG4gIH07XG5cbiAgcGllLnNvcnRWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydFZhbHVlcyA9IF8sIHNvcnQgPSBudWxsLCBwaWUpIDogc29ydFZhbHVlcztcbiAgfTtcblxuICBwaWUuc29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0ID0gXywgc29ydFZhbHVlcyA9IG51bGwsIHBpZSkgOiBzb3J0O1xuICB9O1xuXG4gIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBwaWUucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIHJldHVybiBwaWU7XG59XG4iLAogICAgImltcG9ydCBwb2ludFJhZGlhbCBmcm9tIFwiLi4vcG9pbnRSYWRpYWwuanNcIjtcblxuY2xhc3MgQnVtcCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHgpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLl94ID0geDtcbiAgfVxuICBhcmVhU3RhcnQoKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH1cbiAgYXJlYUVuZCgpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9XG4gIGxpbmVTdGFydCgpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH1cbiAgbGluZUVuZCgpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9XG4gIHBvaW50KHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSAxO1xuICAgICAgICBpZiAodGhpcy5fbGluZSkgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgICAgIGVsc2UgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3gpIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCA9ICh0aGlzLl94MCArIHgpIC8gMiwgdGhpcy5feTAsIHRoaXMuX3gwLCB5LCB4LCB5KTtcbiAgICAgICAgZWxzZSB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsIHRoaXMuX3kwID0gKHRoaXMuX3kwICsgeSkgLyAyLCB4LCB0aGlzLl95MCwgeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl94MCA9IHgsIHRoaXMuX3kwID0geTtcbiAgfVxufVxuXG5jbGFzcyBCdW1wUmFkaWFsIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB9XG4gIGxpbmVTdGFydCgpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH1cbiAgbGluZUVuZCgpIHt9XG4gIHBvaW50KHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQgPT09IDApIHtcbiAgICAgIHRoaXMuX3BvaW50ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcDAgPSBwb2ludFJhZGlhbCh0aGlzLl94MCwgdGhpcy5feTApO1xuICAgICAgY29uc3QgcDEgPSBwb2ludFJhZGlhbCh0aGlzLl94MCwgdGhpcy5feTAgPSAodGhpcy5feTAgKyB5KSAvIDIpO1xuICAgICAgY29uc3QgcDIgPSBwb2ludFJhZGlhbCh4LCB0aGlzLl95MCk7XG4gICAgICBjb25zdCBwMyA9IHBvaW50UmFkaWFsKHgsIHkpO1xuICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oLi4ucDApO1xuICAgICAgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKC4uLnAxLCAuLi5wMiwgLi4ucDMpO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHgsIHRoaXMuX3kwID0geTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVtcFgoY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJ1bXAoY29udGV4dCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wWShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQnVtcChjb250ZXh0LCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wUmFkaWFsKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCdW1wUmFkaWFsKGNvbnRleHQpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHt9XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwb2ludCh0aGF0LCB4LCB5KSB7XG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhcbiAgICAoMiAqIHRoYXQuX3gwICsgdGhhdC5feDEpIC8gMyxcbiAgICAoMiAqIHRoYXQuX3kwICsgdGhhdC5feTEpIC8gMyxcbiAgICAodGhhdC5feDAgKyAyICogdGhhdC5feDEpIC8gMyxcbiAgICAodGhhdC5feTAgKyAyICogdGhhdC5feTEpIC8gMyxcbiAgICAodGhhdC5feDAgKyA0ICogdGhhdC5feDEgKyB4KSAvIDYsXG4gICAgKHRoYXQuX3kwICsgNCAqIHRoYXQuX3kxICsgeSkgLyA2XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCYXNpcyhjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpcy5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5feDEsIHRoaXMuX3kxKTsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2NvbnRleHQubGluZVRvKCg1ICogdGhpcy5feDAgKyB0aGlzLl94MSkgLyA2LCAoNSAqIHRoaXMuX3kwICsgdGhpcy5feTEpIC8gNik7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzKGNvbnRleHQpO1xufVxuIiwKICAgICJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcC5qc1wiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQmFzaXNDbG9zZWQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuQmFzaXNDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gdGhpcy5feTMgPSB0aGlzLl95NCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIgKyAyICogdGhpcy5feDMpIC8gMywgKHRoaXMuX3kyICsgMiAqIHRoaXMuX3kzKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMgKyAyICogdGhpcy5feDIpIC8gMywgKHRoaXMuX3kzICsgMiAqIHRoaXMuX3kyKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gyLCB0aGlzLl95Mik7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gyID0geCwgdGhpcy5feTIgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHk7IHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2KTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCYXNpc0Nsb3NlZChjb250ZXh0KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQmFzaXNPcGVuKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHZhciB4MCA9ICh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgeTAgPSAodGhpcy5feTAgKyA0ICogdGhpcy5feTEgKyB5KSAvIDY7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4MCwgeTApIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeDAsIHkwKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXNPcGVuKGNvbnRleHQpO1xufVxuIiwKICAgICJpbXBvcnQge0Jhc2lzfSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuXG5mdW5jdGlvbiBCdW5kbGUoY29udGV4dCwgYmV0YSkge1xuICB0aGlzLl9iYXNpcyA9IG5ldyBCYXNpcyhjb250ZXh0KTtcbiAgdGhpcy5fYmV0YSA9IGJldGE7XG59XG5cbkJ1bmRsZS5wcm90b3R5cGUgPSB7XG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IFtdO1xuICAgIHRoaXMuX3kgPSBbXTtcbiAgICB0aGlzLl9iYXNpcy5saW5lU3RhcnQoKTtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSB0aGlzLl94LFxuICAgICAgICB5ID0gdGhpcy5feSxcbiAgICAgICAgaiA9IHgubGVuZ3RoIC0gMTtcblxuICAgIGlmIChqID4gMCkge1xuICAgICAgdmFyIHgwID0geFswXSxcbiAgICAgICAgICB5MCA9IHlbMF0sXG4gICAgICAgICAgZHggPSB4W2pdIC0geDAsXG4gICAgICAgICAgZHkgPSB5W2pdIC0geTAsXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIHQ7XG5cbiAgICAgIHdoaWxlICgrK2kgPD0gaikge1xuICAgICAgICB0ID0gaSAvIGo7XG4gICAgICAgIHRoaXMuX2Jhc2lzLnBvaW50KFxuICAgICAgICAgIHRoaXMuX2JldGEgKiB4W2ldICsgKDEgLSB0aGlzLl9iZXRhKSAqICh4MCArIHQgKiBkeCksXG4gICAgICAgICAgdGhpcy5fYmV0YSAqIHlbaV0gKyAoMSAtIHRoaXMuX2JldGEpICogKHkwICsgdCAqIGR5KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3ggPSB0aGlzLl95ID0gbnVsbDtcbiAgICB0aGlzLl9iYXNpcy5saW5lRW5kKCk7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5feC5wdXNoKCt4KTtcbiAgICB0aGlzLl95LnB1c2goK3kpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGJldGEpIHtcblxuICBmdW5jdGlvbiBidW5kbGUoY29udGV4dCkge1xuICAgIHJldHVybiBiZXRhID09PSAxID8gbmV3IEJhc2lzKGNvbnRleHQpIDogbmV3IEJ1bmRsZShjb250ZXh0LCBiZXRhKTtcbiAgfVxuXG4gIGJ1bmRsZS5iZXRhID0gZnVuY3Rpb24oYmV0YSkge1xuICAgIHJldHVybiBjdXN0b20oK2JldGEpO1xuICB9O1xuXG4gIHJldHVybiBidW5kbGU7XG59KSgwLjg1KTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgIHRoYXQuX3gxICsgdGhhdC5fayAqICh0aGF0Ll94MiAtIHRoYXQuX3gwKSxcbiAgICB0aGF0Ll95MSArIHRoYXQuX2sgKiAodGhhdC5feTIgLSB0aGF0Ll95MCksXG4gICAgdGhhdC5feDIgKyB0aGF0Ll9rICogKHRoYXQuX3gxIC0geCksXG4gICAgdGhhdC5feTIgKyB0aGF0Ll9rICogKHRoYXQuX3kxIC0geSksXG4gICAgdGhhdC5feDIsXG4gICAgdGhhdC5feTJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MSA9IHgsIHRoaXMuX3kxID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbChjb250ZXh0LCB0ZW5zaW9uKTtcbiAgfVxuXG4gIGNhcmRpbmFsLnRlbnNpb24gPSBmdW5jdGlvbih0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrdGVuc2lvbik7XG4gIH07XG5cbiAgcmV0dXJuIGNhcmRpbmFsO1xufSkoMCk7XG4iLAogICAgImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbENsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID0gdGhpcy5feDUgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IHRoaXMuX3kzID0gdGhpcy5feTQgPSB0aGlzLl95NSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NSwgdGhpcy5feTUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIiwKICAgICJpbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxPcGVuKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWxPcGVuLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbE9wZW4oY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIiwKICAgICJpbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge0NhcmRpbmFsfSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB2YXIgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICB4MiA9IHRoYXQuX3gyLFxuICAgICAgeTIgPSB0aGF0Ll95MjtcblxuICBpZiAodGhhdC5fbDAxX2EgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGEgPSAyICogdGhhdC5fbDAxXzJhICsgMyAqIHRoYXQuX2wwMV9hICogdGhhdC5fbDEyX2EgKyB0aGF0Ll9sMTJfMmEsXG4gICAgICAgIG4gPSAzICogdGhhdC5fbDAxX2EgKiAodGhhdC5fbDAxX2EgKyB0aGF0Ll9sMTJfYSk7XG4gICAgeDEgPSAoeDEgKiBhIC0gdGhhdC5feDAgKiB0aGF0Ll9sMTJfMmEgKyB0aGF0Ll94MiAqIHRoYXQuX2wwMV8yYSkgLyBuO1xuICAgIHkxID0gKHkxICogYSAtIHRoYXQuX3kwICogdGhhdC5fbDEyXzJhICsgdGhhdC5feTIgKiB0aGF0Ll9sMDFfMmEpIC8gbjtcbiAgfVxuXG4gIGlmICh0aGF0Ll9sMjNfYSA+IGVwc2lsb24pIHtcbiAgICB2YXIgYiA9IDIgKiB0aGF0Ll9sMjNfMmEgKyAzICogdGhhdC5fbDIzX2EgKiB0aGF0Ll9sMTJfYSArIHRoYXQuX2wxMl8yYSxcbiAgICAgICAgbSA9IDMgKiB0aGF0Ll9sMjNfYSAqICh0aGF0Ll9sMjNfYSArIHRoYXQuX2wxMl9hKTtcbiAgICB4MiA9ICh4MiAqIGIgKyB0aGF0Ll94MSAqIHRoYXQuX2wyM18yYSAtIHggKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgICB5MiA9ICh5MiAqIGIgKyB0aGF0Ll95MSAqIHRoYXQuX2wyM18yYSAtIHkgKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgfVxuXG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgdGhhdC5feDIsIHRoYXQuX3kyKTtcbn1cblxuZnVuY3Rpb24gQ2F0bXVsbFJvbShjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbS5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5wb2ludCh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb20oY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsCiAgICAiaW1wb3J0IHtDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY2FyZGluYWxDbG9zZWQuanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXRtdWxsUm9tLmpzXCI7XG5cbmZ1bmN0aW9uIENhdG11bGxSb21DbG9zZWQoY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21DbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g1LCB0aGlzLl95NSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbUNsb3NlZChjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwKICAgICJpbXBvcnQge0NhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY2FyZGluYWxPcGVuLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXRtdWxsUm9tLmpzXCI7XG5cbmZ1bmN0aW9uIENhdG11bGxSb21PcGVuKGNvbnRleHQsIGFscGhhKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9hbHBoYSA9IGFscGhhO1xufVxuXG5DYXRtdWxsUm9tT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDMpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EsIHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2E7XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhLCB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmE7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShhbHBoYSkge1xuXG4gIGZ1bmN0aW9uIGNhdG11bGxSb20oY29udGV4dCkge1xuICAgIHJldHVybiBhbHBoYSA/IG5ldyBDYXRtdWxsUm9tT3Blbihjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWxPcGVuKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsCiAgICAiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcblxuZnVuY3Rpb24gTGluZWFyQ2xvc2VkKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhckNsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9wb2ludCkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQpIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGVsc2UgdGhpcy5fcG9pbnQgPSAxLCB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhckNsb3NlZChjb250ZXh0KTtcbn1cbiIsCiAgICAiZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiB4IDwgMCA/IC0xIDogMTtcbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBzbG9wZXMgb2YgdGhlIHRhbmdlbnRzIChIZXJtaXRlLXR5cGUgaW50ZXJwb2xhdGlvbikgYmFzZWQgb25cbi8vIHRoZSBmb2xsb3dpbmcgcGFwZXI6IFN0ZWZmZW4sIE0uIDE5OTAuIEEgU2ltcGxlIE1ldGhvZCBmb3IgTW9ub3RvbmljXG4vLyBJbnRlcnBvbGF0aW9uIGluIE9uZSBEaW1lbnNpb24uIEFzdHJvbm9teSBhbmQgQXN0cm9waHlzaWNzLCBWb2wuIDIzOSwgTk8uXG4vLyBOT1YoSUkpLCBQLiA0NDMsIDE5OTAuXG5mdW5jdGlvbiBzbG9wZTModGhhdCwgeDIsIHkyKSB7XG4gIHZhciBoMCA9IHRoYXQuX3gxIC0gdGhhdC5feDAsXG4gICAgICBoMSA9IHgyIC0gdGhhdC5feDEsXG4gICAgICBzMCA9ICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIChoMCB8fCBoMSA8IDAgJiYgLTApLFxuICAgICAgczEgPSAoeTIgLSB0aGF0Ll95MSkgLyAoaDEgfHwgaDAgPCAwICYmIC0wKSxcbiAgICAgIHAgPSAoczAgKiBoMSArIHMxICogaDApIC8gKGgwICsgaDEpO1xuICByZXR1cm4gKHNpZ24oczApICsgc2lnbihzMSkpICogTWF0aC5taW4oTWF0aC5hYnMoczApLCBNYXRoLmFicyhzMSksIDAuNSAqIE1hdGguYWJzKHApKSB8fCAwO1xufVxuXG4vLyBDYWxjdWxhdGUgYSBvbmUtc2lkZWQgc2xvcGUuXG5mdW5jdGlvbiBzbG9wZTIodGhhdCwgdCkge1xuICB2YXIgaCA9IHRoYXQuX3gxIC0gdGhhdC5feDA7XG4gIHJldHVybiBoID8gKDMgKiAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyBoIC0gdCkgLyAyIDogdDtcbn1cblxuLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1YmljX0hlcm1pdGVfc3BsaW5lI1JlcHJlc2VudGF0aW9uc1xuLy8gXCJ5b3UgY2FuIGV4cHJlc3MgY3ViaWMgSGVybWl0ZSBpbnRlcnBvbGF0aW9uIGluIHRlcm1zIG9mIGN1YmljIELDqXppZXIgY3VydmVzXG4vLyB3aXRoIHJlc3BlY3QgdG8gdGhlIGZvdXIgdmFsdWVzIHAwLCBwMCArIG0wIC8gMywgcDEgLSBtMSAvIDMsIHAxXCIuXG5mdW5jdGlvbiBwb2ludCh0aGF0LCB0MCwgdDEpIHtcbiAgdmFyIHgwID0gdGhhdC5feDAsXG4gICAgICB5MCA9IHRoYXQuX3kwLFxuICAgICAgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICBkeCA9ICh4MSAtIHgwKSAvIDM7XG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MCArIGR4LCB5MCArIGR4ICogdDAsIHgxIC0gZHgsIHkxIC0gZHggKiB0MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbk1vbm90b25lWC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9XG4gICAgdGhpcy5fdDAgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl90MCwgc2xvcGUyKHRoaXMsIHRoaXMuX3QwKSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciB0MSA9IE5hTjtcblxuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIGlmICh4ID09PSB0aGlzLl94MSAmJiB5ID09PSB0aGlzLl95MSkgcmV0dXJuOyAvLyBJZ25vcmUgY29pbmNpZGVudCBwb2ludHMuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyBwb2ludCh0aGlzLCBzbG9wZTIodGhpcywgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpLCB0MSk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgdGhpcy5fdDAsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgICB0aGlzLl90MCA9IHQxO1xuICB9XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWShjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBuZXcgUmVmbGVjdENvbnRleHQoY29udGV4dCk7XG59XG5cbihNb25vdG9uZVkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNb25vdG9uZVgucHJvdG90eXBlKSkucG9pbnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIE1vbm90b25lWC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLCB5LCB4KTtcbn07XG5cbmZ1bmN0aW9uIFJlZmxlY3RDb250ZXh0KGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblJlZmxlY3RDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubW92ZVRvKHksIHgpOyB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkgeyB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpOyB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5saW5lVG8oeSwgeCk7IH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7IHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh5MSwgeDEsIHkyLCB4MiwgeSwgeCk7IH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVgoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWChjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVZKGNvbnRleHQpO1xufVxuIiwKICAgICJmdW5jdGlvbiBOYXR1cmFsKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbk5hdHVyYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3ggPSBbXTtcbiAgICB0aGlzLl95ID0gW107XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gdGhpcy5feCxcbiAgICAgICAgeSA9IHRoaXMuX3ksXG4gICAgICAgIG4gPSB4Lmxlbmd0aDtcblxuICAgIGlmIChuKSB7XG4gICAgICB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeFswXSwgeVswXSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4WzBdLCB5WzBdKTtcbiAgICAgIGlmIChuID09PSAyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHhbMV0sIHlbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHB4ID0gY29udHJvbFBvaW50cyh4KSxcbiAgICAgICAgICAgIHB5ID0gY29udHJvbFBvaW50cyh5KTtcbiAgICAgICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDE7IGkxIDwgbjsgKytpMCwgKytpMSkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhweFswXVtpMF0sIHB5WzBdW2kwXSwgcHhbMV1baTBdLCBweVsxXVtpMF0sIHhbaTFdLCB5W2kxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiBuID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBudWxsO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuX3gucHVzaCgreCk7XG4gICAgdGhpcy5feS5wdXNoKCt5KTtcbiAgfVxufTtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnBhcnRpY2xlaW5jZWxsLmNvbS8yMDEyL2Jlemllci1zcGxpbmVzLyBmb3IgZGVyaXZhdGlvbi5cbmZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoeCkge1xuICB2YXIgaSxcbiAgICAgIG4gPSB4Lmxlbmd0aCAtIDEsXG4gICAgICBtLFxuICAgICAgYSA9IG5ldyBBcnJheShuKSxcbiAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICByID0gbmV3IEFycmF5KG4pO1xuICBhWzBdID0gMCwgYlswXSA9IDIsIHJbMF0gPSB4WzBdICsgMiAqIHhbMV07XG4gIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgKytpKSBhW2ldID0gMSwgYltpXSA9IDQsIHJbaV0gPSA0ICogeFtpXSArIDIgKiB4W2kgKyAxXTtcbiAgYVtuIC0gMV0gPSAyLCBiW24gLSAxXSA9IDcsIHJbbiAtIDFdID0gOCAqIHhbbiAtIDFdICsgeFtuXTtcbiAgZm9yIChpID0gMTsgaSA8IG47ICsraSkgbSA9IGFbaV0gLyBiW2kgLSAxXSwgYltpXSAtPSBtLCByW2ldIC09IG0gKiByW2kgLSAxXTtcbiAgYVtuIC0gMV0gPSByW24gLSAxXSAvIGJbbiAtIDFdO1xuICBmb3IgKGkgPSBuIC0gMjsgaSA+PSAwOyAtLWkpIGFbaV0gPSAocltpXSAtIGFbaSArIDFdKSAvIGJbaV07XG4gIGJbbiAtIDFdID0gKHhbbl0gKyBhW24gLSAxXSkgLyAyO1xuICBmb3IgKGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgYltpXSA9IDIgKiB4W2kgKyAxXSAtIGFbaSArIDFdO1xuICByZXR1cm4gW2EsIGJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTmF0dXJhbChjb250ZXh0KTtcbn1cbiIsCiAgICAiZnVuY3Rpb24gU3RlcChjb250ZXh0LCB0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl90ID0gdDtcbn1cblxuU3RlcC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoMCA8IHRoaXMuX3QgJiYgdGhpcy5fdCA8IDEgJiYgdGhpcy5fcG9pbnQgPT09IDIpIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHRoaXMuX3kpO1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBpZiAodGhpcy5fbGluZSA+PSAwKSB0aGlzLl90ID0gMSAtIHRoaXMuX3QsIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3QgPD0gMCkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHkpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMuX3ggKiAoMSAtIHRoaXMuX3QpICsgeCAqIHRoaXMuX3Q7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeDEsIHRoaXMuX3kpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgxLCB5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5feCA9IHgsIHRoaXMuX3kgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwLjUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEJlZm9yZShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBBZnRlcihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAxKTtcbn1cbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIGFyY30gZnJvbSBcIi4vYXJjLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxpbmV9IGZyb20gXCIuL2xpbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwaWV9IGZyb20gXCIuL3BpZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFyZWFSYWRpYWwsIGRlZmF1bHQgYXMgcmFkaWFsQXJlYX0gZnJvbSBcIi4vYXJlYVJhZGlhbC5qc1wiOyAvLyBOb3RlOiByYWRpYWxBcmVhIGlzIGRlcHJlY2F0ZWQhXG5leHBvcnQge2RlZmF1bHQgYXMgbGluZVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxMaW5lfSBmcm9tIFwiLi9saW5lUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbExpbmUgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2ludFJhZGlhbH0gZnJvbSBcIi4vcG9pbnRSYWRpYWwuanNcIjtcbmV4cG9ydCB7bGluaywgbGlua0hvcml6b250YWwsIGxpbmtWZXJ0aWNhbCwgbGlua1JhZGlhbH0gZnJvbSBcIi4vbGluay5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sLCBzeW1ib2xzU3Ryb2tlLCBzeW1ib2xzRmlsbCwgc3ltYm9sc0ZpbGwgYXMgc3ltYm9sc30gZnJvbSBcIi4vc3ltYm9sLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sQXN0ZXJpc2t9IGZyb20gXCIuL3N5bWJvbC9hc3Rlcmlzay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbERpYW1vbmQyfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xQbHVzfSBmcm9tIFwiLi9zeW1ib2wvcGx1cy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZTJ9IGZyb20gXCIuL3N5bWJvbC9zcXVhcmUyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sU3Rhcn0gZnJvbSBcIi4vc3ltYm9sL3N0YXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xUcmlhbmdsZX0gZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGUyfSBmcm9tIFwiLi9zeW1ib2wvdHJpYW5nbGUyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sV3llfSBmcm9tIFwiLi9zeW1ib2wvd3llLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVGltZXMsIGRlZmF1bHQgYXMgc3ltYm9sWH0gZnJvbSBcIi4vc3ltYm9sL3RpbWVzLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXNPcGVufSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc09wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpcy5qc1wiO1xuZXhwb3J0IHtidW1wWCBhcyBjdXJ2ZUJ1bXBYLCBidW1wWSBhcyBjdXJ2ZUJ1bXBZfSBmcm9tIFwiLi9jdXJ2ZS9idW1wLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCdW5kbGV9IGZyb20gXCIuL2N1cnZlL2J1bmRsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWxDbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbE9wZW59IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWx9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tT3Blbn0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbU9wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb219IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb20uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhckNsb3NlZH0gZnJvbSBcIi4vY3VydmUvbGluZWFyQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL2xpbmVhci5qc1wiO1xuZXhwb3J0IHttb25vdG9uZVggYXMgY3VydmVNb25vdG9uZVgsIG1vbm90b25lWSBhcyBjdXJ2ZU1vbm90b25lWX0gZnJvbSBcIi4vY3VydmUvbW9ub3RvbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZU5hdHVyYWx9IGZyb20gXCIuL2N1cnZlL25hdHVyYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZVN0ZXAsIHN0ZXBBZnRlciBhcyBjdXJ2ZVN0ZXBBZnRlciwgc3RlcEJlZm9yZSBhcyBjdXJ2ZVN0ZXBCZWZvcmV9IGZyb20gXCIuL2N1cnZlL3N0ZXAuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrfSBmcm9tIFwiLi9zdGFjay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0RXhwYW5kfSBmcm9tIFwiLi9vZmZzZXQvZXhwYW5kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXREaXZlcmdpbmd9IGZyb20gXCIuL29mZnNldC9kaXZlcmdpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldE5vbmV9IGZyb20gXCIuL29mZnNldC9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRTaWxob3VldHRlfSBmcm9tIFwiLi9vZmZzZXQvc2lsaG91ZXR0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0V2lnZ2xlfSBmcm9tIFwiLi9vZmZzZXQvd2lnZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckFwcGVhcmFuY2V9IGZyb20gXCIuL29yZGVyL2FwcGVhcmFuY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9hc2NlbmRpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyRGVzY2VuZGluZ30gZnJvbSBcIi4vb3JkZXIvZGVzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJJbnNpZGVPdXR9IGZyb20gXCIuL29yZGVyL2luc2lkZU91dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJOb25lfSBmcm9tIFwiLi9vcmRlci9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlclJldmVyc2V9IGZyb20gXCIuL29yZGVyL3JldmVyc2UuanNcIjtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIFRyYW5zZm9ybShrLCB4LCB5KSB7XG4gIHRoaXMuayA9IGs7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sXG4gIHNjYWxlOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmsgKiBrLCB0aGlzLngsIHRoaXMueSk7XG4gIH0sXG4gIHRyYW5zbGF0ZTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID09PSAwICYgeSA9PT0gMCA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuaywgdGhpcy54ICsgdGhpcy5rICogeCwgdGhpcy55ICsgdGhpcy5rICogeSk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTtcbiAgfSxcbiAgYXBwbHlYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggKiB0aGlzLmsgKyB0aGlzLng7XG4gIH0sXG4gIGFwcGx5WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5ICogdGhpcy5rICsgdGhpcy55O1xuICB9LFxuICBpbnZlcnQ6IGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTtcbiAgfSxcbiAgaW52ZXJ0WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMueCkgLyB0aGlzLms7XG4gIH0sXG4gIGludmVydFk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLnkpIC8gdGhpcy5rO1xuICB9LFxuICByZXNjYWxlWDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpO1xuICB9LFxuICByZXNjYWxlWTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5LmNvcHkoKS5kb21haW4oeS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksIHRoaXMpLm1hcCh5LmludmVydCwgeSkpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIikgc2NhbGUoXCIgKyB0aGlzLmsgKyBcIilcIjtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IG5ldyBUcmFuc2Zvcm0oMSwgMCwgMCk7XG5cbnRyYW5zZm9ybS5wcm90b3R5cGUgPSBUcmFuc2Zvcm0ucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSkge1xuICB3aGlsZSAoIW5vZGUuX196b29tKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuIGlkZW50aXR5O1xuICByZXR1cm4gbm9kZS5fX3pvb207XG59XG4iLAogICAgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtkcmFnRGlzYWJsZSwgZHJhZ0VuYWJsZX0gZnJvbSBcImQzLWRyYWdcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVab29tfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c2VsZWN0LCBwb2ludGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IFpvb21FdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuaW1wb3J0IHtUcmFuc2Zvcm0sIGlkZW50aXR5fSBmcm9tIFwiLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbi8vIGV4Y2VwdCBmb3IgcGluY2gtdG8tem9vbSwgd2hpY2ggaXMgc2VudCBhcyBhIHdoZWVsK2N0cmxLZXkgZXZlbnRcbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICghZXZlbnQuY3RybEtleSB8fCBldmVudC50eXBlID09PSAnd2hlZWwnKSAmJiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RXh0ZW50KCkge1xuICB2YXIgZSA9IHRoaXM7XG4gIGlmIChlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuICAgIGUgPSBlLm93bmVyU1ZHRWxlbWVudCB8fCBlO1xuICAgIGlmIChlLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICAgIGUgPSBlLnZpZXdCb3guYmFzZVZhbDtcbiAgICAgIHJldHVybiBbW2UueCwgZS55XSwgW2UueCArIGUud2lkdGgsIGUueSArIGUuaGVpZ2h0XV07XG4gICAgfVxuICAgIHJldHVybiBbWzAsIDBdLCBbZS53aWR0aC5iYXNlVmFsLnZhbHVlLCBlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtlLmNsaWVudFdpZHRoLCBlLmNsaWVudEhlaWdodF1dO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNmb3JtKCkge1xuICByZXR1cm4gdGhpcy5fX3pvb20gfHwgaWRlbnRpdHk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXaGVlbERlbHRhKGV2ZW50KSB7XG4gIHJldHVybiAtZXZlbnQuZGVsdGFZICogKGV2ZW50LmRlbHRhTW9kZSA9PT0gMSA/IDAuMDUgOiBldmVudC5kZWx0YU1vZGUgPyAxIDogMC4wMDIpICogKGV2ZW50LmN0cmxLZXkgPyAxMCA6IDEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzIHx8IChcIm9udG91Y2hzdGFydFwiIGluIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29uc3RyYWluKHRyYW5zZm9ybSwgZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpIHtcbiAgdmFyIGR4MCA9IHRyYW5zZm9ybS5pbnZlcnRYKGV4dGVudFswXVswXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMF0sXG4gICAgICBkeDEgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMV1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzBdLFxuICAgICAgZHkwID0gdHJhbnNmb3JtLmludmVydFkoZXh0ZW50WzBdWzFdKSAtIHRyYW5zbGF0ZUV4dGVudFswXVsxXSxcbiAgICAgIGR5MSA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFsxXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMV1bMV07XG4gIHJldHVybiB0cmFuc2Zvcm0udHJhbnNsYXRlKFxuICAgIGR4MSA+IGR4MCA/IChkeDAgKyBkeDEpIC8gMiA6IE1hdGgubWluKDAsIGR4MCkgfHwgTWF0aC5tYXgoMCwgZHgxKSxcbiAgICBkeTEgPiBkeTAgPyAoZHkwICsgZHkxKSAvIDIgOiBNYXRoLm1pbigwLCBkeTApIHx8IE1hdGgubWF4KDAsIGR5MSlcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGNvbnN0cmFpbiA9IGRlZmF1bHRDb25zdHJhaW4sXG4gICAgICB3aGVlbERlbHRhID0gZGVmYXVsdFdoZWVsRGVsdGEsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgc2NhbGVFeHRlbnQgPSBbMCwgSW5maW5pdHldLFxuICAgICAgdHJhbnNsYXRlRXh0ZW50ID0gW1stSW5maW5pdHksIC1JbmZpbml0eV0sIFtJbmZpbml0eSwgSW5maW5pdHldXSxcbiAgICAgIGR1cmF0aW9uID0gMjUwLFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVpvb20sXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiem9vbVwiLCBcImVuZFwiKSxcbiAgICAgIHRvdWNoc3RhcnRpbmcsXG4gICAgICB0b3VjaGZpcnN0LFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICB0b3VjaERlbGF5ID0gNTAwLFxuICAgICAgd2hlZWxEZWxheSA9IDE1MCxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMCxcbiAgICAgIHRhcERpc3RhbmNlID0gMTA7XG5cbiAgZnVuY3Rpb24gem9vbShzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pXG4gICAgICAgIC5vbihcIndoZWVsLnpvb21cIiwgd2hlZWxlZCwge3Bhc3NpdmU6IGZhbHNlfSlcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLnpvb21cIiwgbW91c2Vkb3duZWQpXG4gICAgICAgIC5vbihcImRibGNsaWNrLnpvb21cIiwgZGJsY2xpY2tlZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0Lnpvb21cIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuem9vbVwiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb21cIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIHpvb20udHJhbnNmb3JtID0gZnVuY3Rpb24oY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gY29sbGVjdGlvbi5zZWxlY3Rpb24gPyBjb2xsZWN0aW9uLnNlbGVjdGlvbigpIDogY29sbGVjdGlvbjtcbiAgICBzZWxlY3Rpb24ucHJvcGVydHkoXCJfX3pvb21cIiwgZGVmYXVsdFRyYW5zZm9ybSk7XG4gICAgaWYgKGNvbGxlY3Rpb24gIT09IHNlbGVjdGlvbikge1xuICAgICAgc2NoZWR1bGUoY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgLmV2ZW50KGV2ZW50KVxuICAgICAgICAgIC5zdGFydCgpXG4gICAgICAgICAgLnpvb20obnVsbCwgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0cmFuc2Zvcm0pXG4gICAgICAgICAgLmVuZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHpvb20uc2NhbGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgaywgcCwgZXZlbnQpIHtcbiAgICB6b29tLnNjYWxlVG8oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrMCA9IHRoaXMuX196b29tLmssXG4gICAgICAgICAgazEgPSB0eXBlb2YgayA9PT0gXCJmdW5jdGlvblwiID8gay5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogaztcbiAgICAgIHJldHVybiBrMCAqIGsxO1xuICAgIH0sIHAsIGV2ZW50KTtcbiAgfTtcblxuICB6b29tLnNjYWxlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHAsIGV2ZW50KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgICBwMCA9IHAgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHAgPT09IFwiZnVuY3Rpb25cIiA/IHAuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHAsXG4gICAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBlLCB0cmFuc2xhdGVFeHRlbnQpO1xuICAgIH0sIHAsIGV2ZW50KTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUJ5ID0gZnVuY3Rpb24oc2VsZWN0aW9uLCB4LCB5LCBldmVudCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRoaXMuX196b29tLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHguYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB5XG4gICAgICApLCBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVUbyA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSwgcCwgZXZlbnQpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbihpZGVudGl0eS50cmFuc2xhdGUocDBbMF0sIHAwWzFdKS5zY2FsZSh0LmspLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IC14LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteCxcbiAgICAgICAgdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IC15LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteVxuICAgICAgKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gc2NhbGUodHJhbnNmb3JtLCBrKSB7XG4gICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgaykpO1xuICAgIHJldHVybiBrID09PSB0cmFuc2Zvcm0uayA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0oaywgdHJhbnNmb3JtLngsIHRyYW5zZm9ybS55KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh0cmFuc2Zvcm0sIHAwLCBwMSkge1xuICAgIHZhciB4ID0gcDBbMF0gLSBwMVswXSAqIHRyYW5zZm9ybS5rLCB5ID0gcDBbMV0gLSBwMVsxXSAqIHRyYW5zZm9ybS5rO1xuICAgIHJldHVybiB4ID09PSB0cmFuc2Zvcm0ueCAmJiB5ID09PSB0cmFuc2Zvcm0ueSA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0odHJhbnNmb3JtLmssIHgsIHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudHJvaWQoZXh0ZW50KSB7XG4gICAgcmV0dXJuIFsoK2V4dGVudFswXVswXSArICtleHRlbnRbMV1bMF0pIC8gMiwgKCtleHRlbnRbMF1bMV0gKyArZXh0ZW50WzFdWzFdKSAvIDJdO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodHJhbnNpdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpIHtcbiAgICB0cmFuc2l0aW9uXG4gICAgICAgIC5vbihcInN0YXJ0Lnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5ldmVudChldmVudCkuc3RhcnQoKTsgfSlcbiAgICAgICAgLm9uKFwiaW50ZXJydXB0Lnpvb20gZW5kLnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5ldmVudChldmVudCkuZW5kKCk7IH0pXG4gICAgICAgIC50d2VlbihcInpvb21cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICBnID0gZ2VzdHVyZSh0aGF0LCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgICAgICAgIGUgPSBleHRlbnQuYXBwbHkodGhhdCwgYXJncyksXG4gICAgICAgICAgICAgIHAgPSBwb2ludCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcG9pbnQgPT09IFwiZnVuY3Rpb25cIiA/IHBvaW50LmFwcGx5KHRoYXQsIGFyZ3MpIDogcG9pbnQsXG4gICAgICAgICAgICAgIHcgPSBNYXRoLm1heChlWzFdWzBdIC0gZVswXVswXSwgZVsxXVsxXSAtIGVbMF1bMV0pLFxuICAgICAgICAgICAgICBhID0gdGhhdC5fX3pvb20sXG4gICAgICAgICAgICAgIGIgPSB0eXBlb2YgdHJhbnNmb3JtID09PSBcImZ1bmN0aW9uXCIgPyB0cmFuc2Zvcm0uYXBwbHkodGhhdCwgYXJncykgOiB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShhLmludmVydChwKS5jb25jYXQodyAvIGEuayksIGIuaW52ZXJ0KHApLmNvbmNhdCh3IC8gYi5rKSk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0ID09PSAxKSB0ID0gYjsgLy8gQXZvaWQgcm91bmRpbmcgZXJyb3Igb24gZW5kLlxuICAgICAgICAgICAgZWxzZSB7IHZhciBsID0gaSh0KSwgayA9IHcgLyBsWzJdOyB0ID0gbmV3IFRyYW5zZm9ybShrLCBwWzBdIC0gbFswXSAqIGssIHBbMV0gLSBsWzFdICogayk7IH1cbiAgICAgICAgICAgIGcuem9vbShudWxsLCB0KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlc3R1cmUodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICByZXR1cm4gKCFjbGVhbiAmJiB0aGF0Ll9fem9vbWluZykgfHwgbmV3IEdlc3R1cmUodGhhdCwgYXJncyk7XG4gIH1cblxuICBmdW5jdGlvbiBHZXN0dXJlKHRoYXQsIGFyZ3MpIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICAgIHRoaXMuc291cmNlRXZlbnQgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpO1xuICAgIHRoaXMudGFwcyA9IDA7XG4gIH1cblxuICBHZXN0dXJlLnByb3RvdHlwZSA9IHtcbiAgICBldmVudDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkgdGhpcy5zb3VyY2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKyt0aGlzLmFjdGl2ZSA9PT0gMSkge1xuICAgICAgICB0aGlzLnRoYXQuX196b29taW5nID0gdGhpcztcbiAgICAgICAgdGhpcy5lbWl0KFwic3RhcnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHpvb206IGZ1bmN0aW9uKGtleSwgdHJhbnNmb3JtKSB7XG4gICAgICBpZiAodGhpcy5tb3VzZSAmJiBrZXkgIT09IFwibW91c2VcIikgdGhpcy5tb3VzZVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy5tb3VzZVswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDAgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gwWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMFswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDEgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gxWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMVswXSk7XG4gICAgICB0aGlzLnRoYXQuX196b29tID0gdHJhbnNmb3JtO1xuICAgICAgdGhpcy5lbWl0KFwiem9vbVwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nO1xuICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgIHZhciBkID0gc2VsZWN0KHRoaXMudGhhdCkuZGF0dW0oKTtcbiAgICAgIGxpc3RlbmVycy5jYWxsKFxuICAgICAgICB0eXBlLFxuICAgICAgICB0aGlzLnRoYXQsXG4gICAgICAgIG5ldyBab29tRXZlbnQodHlwZSwge1xuICAgICAgICAgIHNvdXJjZUV2ZW50OiB0aGlzLnNvdXJjZUV2ZW50LFxuICAgICAgICAgIHRhcmdldDogem9vbSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHRyYW5zZm9ybTogdGhpcy50aGF0Ll9fem9vbSxcbiAgICAgICAgICBkaXNwYXRjaDogbGlzdGVuZXJzXG4gICAgICAgIH0pLFxuICAgICAgICBkXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB3aGVlbGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHQgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgdC5rICogTWF0aC5wb3coMiwgd2hlZWxEZWx0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSkpLFxuICAgICAgICBwID0gcG9pbnRlcihldmVudCk7XG5cbiAgICAvLyBJZiB0aGUgbW91c2UgaXMgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgYmVmb3JlLCByZXVzZSBpdC5cbiAgICAvLyBJZiB0aGVyZSB3ZXJlIHJlY2VudCB3aGVlbCBldmVudHMsIHJlc2V0IHRoZSB3aGVlbCBpZGxlIHRpbWVvdXQuXG4gICAgaWYgKGcud2hlZWwpIHtcbiAgICAgIGlmIChnLm1vdXNlWzBdWzBdICE9PSBwWzBdIHx8IGcubW91c2VbMF1bMV0gIT09IHBbMV0pIHtcbiAgICAgICAgZy5tb3VzZVsxXSA9IHQuaW52ZXJ0KGcubW91c2VbMF0gPSBwKTtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dChnLndoZWVsKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIHdoZWVsIGV2ZW50IHdvbuKAmXQgdHJpZ2dlciBhIHRyYW5zZm9ybSBjaGFuZ2UsIGlnbm9yZSBpdC5cbiAgICBlbHNlIGlmICh0LmsgPT09IGspIHJldHVybjtcblxuICAgIC8vIE90aGVyd2lzZSwgY2FwdHVyZSB0aGUgbW91c2UgcG9pbnQgYW5kIGxvY2F0aW9uIGF0IHRoZSBzdGFydC5cbiAgICBlbHNlIHtcbiAgICAgIGcubW91c2UgPSBbcCwgdC5pbnZlcnQocCldO1xuICAgICAgaW50ZXJydXB0KHRoaXMpO1xuICAgICAgZy5zdGFydCgpO1xuICAgIH1cblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGcud2hlZWwgPSBzZXRUaW1lb3V0KHdoZWVsaWRsZWQsIHdoZWVsRGVsYXkpO1xuICAgIGcuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodCwgayksIGcubW91c2VbMF0sIGcubW91c2VbMV0pLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG5cbiAgICBmdW5jdGlvbiB3aGVlbGlkbGVkKCkge1xuICAgICAgZy53aGVlbCA9IG51bGw7XG4gICAgICBnLmVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlZG93bmVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJncywgdHJ1ZSkuZXZlbnQoZXZlbnQpLFxuICAgICAgICB2ID0gc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLnpvb21cIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLnpvb21cIiwgbW91c2V1cHBlZCwgdHJ1ZSksXG4gICAgICAgIHAgPSBwb2ludGVyKGV2ZW50LCBjdXJyZW50VGFyZ2V0KSxcbiAgICAgICAgeDAgPSBldmVudC5jbGllbnRYLFxuICAgICAgICB5MCA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBkcmFnRGlzYWJsZShldmVudC52aWV3KTtcbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBnLm1vdXNlID0gW3AsIHRoaXMuX196b29tLmludmVydChwKV07XG4gICAgaW50ZXJydXB0KHRoaXMpO1xuICAgIGcuc3RhcnQoKTtcblxuICAgIGZ1bmN0aW9uIG1vdXNlbW92ZWQoZXZlbnQpIHtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgaWYgKCFnLm1vdmVkKSB7XG4gICAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSB4MCwgZHkgPSBldmVudC5jbGllbnRZIC0geTA7XG4gICAgICAgIGcubW92ZWQgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgICAgfVxuICAgICAgZy5ldmVudChldmVudClcbiAgICAgICAuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoZy50aGF0Ll9fem9vbSwgZy5tb3VzZVswXSA9IHBvaW50ZXIoZXZlbnQsIGN1cnJlbnRUYXJnZXQpLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdXNldXBwZWQoZXZlbnQpIHtcbiAgICAgIHYub24oXCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb21cIiwgbnVsbCk7XG4gICAgICBkcmFnRW5hYmxlKGV2ZW50LnZpZXcsIGcubW92ZWQpO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBnLmV2ZW50KGV2ZW50KS5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkYmxjbGlja2VkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0MCA9IHRoaXMuX196b29tLFxuICAgICAgICBwMCA9IHBvaW50ZXIoZXZlbnQuY2hhbmdlZFRvdWNoZXMgPyBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSA6IGV2ZW50LCB0aGlzKSxcbiAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICBrMSA9IHQwLmsgKiAoZXZlbnQuc2hpZnRLZXkgPyAwLjUgOiAyKSxcbiAgICAgICAgdDEgPSBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQwLCBrMSksIHAwLCBwMSksIGV4dGVudC5hcHBseSh0aGlzLCBhcmdzKSwgdHJhbnNsYXRlRXh0ZW50KTtcblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGlmIChkdXJhdGlvbiA+IDApIHNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pLmNhbGwoc2NoZWR1bGUsIHQxLCBwMCwgZXZlbnQpO1xuICAgIGVsc2Ugc2VsZWN0KHRoaXMpLmNhbGwoem9vbS50cmFuc2Zvcm0sIHQxLCBwMCwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQudG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLFxuICAgICAgICBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzLCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPT09IG4pLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgc3RhcnRlZCwgaSwgdCwgcDtcblxuICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gcG9pbnRlcih0LCB0aGlzKTtcbiAgICAgIHAgPSBbcCwgdGhpcy5fX3pvb20uaW52ZXJ0KHApLCB0LmlkZW50aWZpZXJdO1xuICAgICAgaWYgKCFnLnRvdWNoMCkgZy50b3VjaDAgPSBwLCBzdGFydGVkID0gdHJ1ZSwgZy50YXBzID0gMSArICEhdG91Y2hzdGFydGluZztcbiAgICAgIGVsc2UgaWYgKCFnLnRvdWNoMSAmJiBnLnRvdWNoMFsyXSAhPT0gcFsyXSkgZy50b3VjaDEgPSBwLCBnLnRhcHMgPSAwO1xuICAgIH1cblxuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuXG4gICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgIGlmIChnLnRhcHMgPCAyKSB0b3VjaGZpcnN0ID0gcFswXSwgdG91Y2hzdGFydGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoc3RhcnRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0LCBwLCBsO1xuXG4gICAgbm9ldmVudChldmVudCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdCA9IHRvdWNoZXNbaV0sIHAgPSBwb2ludGVyKHQsIHRoaXMpO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gwWzBdID0gcDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gxWzBdID0gcDtcbiAgICB9XG4gICAgdCA9IGcudGhhdC5fX3pvb207XG4gICAgaWYgKGcudG91Y2gxKSB7XG4gICAgICB2YXIgcDAgPSBnLnRvdWNoMFswXSwgbDAgPSBnLnRvdWNoMFsxXSxcbiAgICAgICAgICBwMSA9IGcudG91Y2gxWzBdLCBsMSA9IGcudG91Y2gxWzFdLFxuICAgICAgICAgIGRwID0gKGRwID0gcDFbMF0gLSBwMFswXSkgKiBkcCArIChkcCA9IHAxWzFdIC0gcDBbMV0pICogZHAsXG4gICAgICAgICAgZGwgPSAoZGwgPSBsMVswXSAtIGwwWzBdKSAqIGRsICsgKGRsID0gbDFbMV0gLSBsMFsxXSkgKiBkbDtcbiAgICAgIHQgPSBzY2FsZSh0LCBNYXRoLnNxcnQoZHAgLyBkbCkpO1xuICAgICAgcCA9IFsocDBbMF0gKyBwMVswXSkgLyAyLCAocDBbMV0gKyBwMVsxXSkgLyAyXTtcbiAgICAgIGwgPSBbKGwwWzBdICsgbDFbMF0pIC8gMiwgKGwwWzFdICsgbDFbMV0pIC8gMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGcudG91Y2gwKSBwID0gZy50b3VjaDBbMF0sIGwgPSBnLnRvdWNoMFsxXTtcbiAgICBlbHNlIHJldHVybjtcblxuICAgIGcuem9vbShcInRvdWNoXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUodCwgcCwgbCksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuX196b29taW5nKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3MpLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIHQ7XG5cbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIHRvdWNoRGVsYXkpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGRlbGV0ZSBnLnRvdWNoMDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICB9XG4gICAgaWYgKGcudG91Y2gxICYmICFnLnRvdWNoMCkgZy50b3VjaDAgPSBnLnRvdWNoMSwgZGVsZXRlIGcudG91Y2gxO1xuICAgIGlmIChnLnRvdWNoMCkgZy50b3VjaDBbMV0gPSB0aGlzLl9fem9vbS5pbnZlcnQoZy50b3VjaDBbMF0pO1xuICAgIGVsc2Uge1xuICAgICAgZy5lbmQoKTtcbiAgICAgIC8vIElmIHRoaXMgd2FzIGEgZGJsdGFwLCByZXJvdXRlIHRvIHRoZSAob3B0aW9uYWwpIGRibGNsaWNrLnpvb20gaGFuZGxlci5cbiAgICAgIGlmIChnLnRhcHMgPT09IDIpIHtcbiAgICAgICAgdCA9IHBvaW50ZXIodCwgdGhpcyk7XG4gICAgICAgIGlmIChNYXRoLmh5cG90KHRvdWNoZmlyc3RbMF0gLSB0WzBdLCB0b3VjaGZpcnN0WzFdIC0gdFsxXSkgPCB0YXBEaXN0YW5jZSkge1xuICAgICAgICAgIHZhciBwID0gc2VsZWN0KHRoaXMpLm9uKFwiZGJsY2xpY2suem9vbVwiKTtcbiAgICAgICAgICBpZiAocCkgcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgem9vbS53aGVlbERlbHRhID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHdoZWVsRGVsdGEgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgem9vbSkgOiB3aGVlbERlbHRhO1xuICB9O1xuXG4gIHpvb20uZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiBmaWx0ZXI7XG4gIH07XG5cbiAgem9vbS50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCB6b29tKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICB6b29tLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtbK19bMF1bMF0sICtfWzBdWzFdXSwgWytfWzFdWzBdLCArX1sxXVsxXV1dKSwgem9vbSkgOiBleHRlbnQ7XG4gIH07XG5cbiAgem9vbS5zY2FsZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZUV4dGVudFswXSA9ICtfWzBdLCBzY2FsZUV4dGVudFsxXSA9ICtfWzFdLCB6b29tKSA6IFtzY2FsZUV4dGVudFswXSwgc2NhbGVFeHRlbnRbMV1dO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zbGF0ZUV4dGVudFswXVswXSA9ICtfWzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMF0gPSArX1sxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdID0gK19bMF1bMV0sIHRyYW5zbGF0ZUV4dGVudFsxXVsxXSA9ICtfWzFdWzFdLCB6b29tKSA6IFtbdHJhbnNsYXRlRXh0ZW50WzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMF1bMV1dLCBbdHJhbnNsYXRlRXh0ZW50WzFdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV1dXTtcbiAgfTtcblxuICB6b29tLmNvbnN0cmFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb25zdHJhaW4gPSBfLCB6b29tKSA6IGNvbnN0cmFpbjtcbiAgfTtcblxuICB6b29tLmR1cmF0aW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR1cmF0aW9uID0gK18sIHpvb20pIDogZHVyYXRpb247XG4gIH07XG5cbiAgem9vbS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHpvb20pIDogaW50ZXJwb2xhdGU7XG4gIH07XG5cbiAgem9vbS5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyB6b29tIDogdmFsdWU7XG4gIH07XG5cbiAgem9vbS5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCB6b29tKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgem9vbS50YXBEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXBEaXN0YW5jZSA9ICtfLCB6b29tKSA6IHRhcERpc3RhbmNlO1xuICB9O1xuXG4gIHJldHVybiB6b29tO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgem9vbX0gZnJvbSBcIi4vem9vbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHpvb21UcmFuc2Zvcm0sIGlkZW50aXR5IGFzIHpvb21JZGVudGl0eSwgVHJhbnNmb3JtIGFzIFpvb21UcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybS5qc1wiO1xuIiwKICAgICJleHBvcnQgKiBmcm9tIFwiZDMtYXJyYXlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1heGlzXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYnJ1c2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jaG9yZFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29udG91clwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRlbGF1bmF5XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kcmFnXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZHN2XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZWFzZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZldGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZm9yY2VcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mb3JtYXRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1nZW9cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXBhdGhcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1wb2x5Z29uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1yYW5kb21cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zY2FsZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNoYXBlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZXJcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtem9vbVwiO1xuIiwKICAgICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwKICAgICJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJhd1RhZztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuIiwKICAgICJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsCiAgICAiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNvcmVKc0RhdGE7XG4iLAogICAgImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcbiIsCiAgICAiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuIiwKICAgICJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUNyZWF0ZTtcbiIsCiAgICAiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoRGVsZXRlO1xuIiwKICAgICJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaEdldDtcbiIsCiAgICAiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iLAogICAgImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hTZXQ7XG4iLAogICAgImltcG9ydCBoYXNoQ2xlYXIgZnJvbSAnLi9faGFzaENsZWFyLmpzJztcbmltcG9ydCBoYXNoRGVsZXRlIGZyb20gJy4vX2hhc2hEZWxldGUuanMnO1xuaW1wb3J0IGhhc2hHZXQgZnJvbSAnLi9faGFzaEdldC5qcyc7XG5pbXBvcnQgaGFzaEhhcyBmcm9tICcuL19oYXNoSGFzLmpzJztcbmltcG9ydCBoYXNoU2V0IGZyb20gJy4vX2hhc2hTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuZXhwb3J0IGRlZmF1bHQgSGFzaDtcbiIsCiAgICAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiIsCiAgICAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIiwKICAgICJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc29jSW5kZXhPZjtcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVHZXQ7XG4iLAogICAgImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsCiAgICAiaW1wb3J0IGxpc3RDYWNoZUNsZWFyIGZyb20gJy4vX2xpc3RDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVEZWxldGUgZnJvbSAnLi9fbGlzdENhY2hlRGVsZXRlLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVHZXQgZnJvbSAnLi9fbGlzdENhY2hlR2V0LmpzJztcbmltcG9ydCBsaXN0Q2FjaGVIYXMgZnJvbSAnLi9fbGlzdENhY2hlSGFzLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVTZXQgZnJvbSAnLi9fbGlzdENhY2hlU2V0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBMaXN0Q2FjaGU7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuIiwKICAgICJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzS2V5YWJsZTtcbiIsCiAgICAiaW1wb3J0IGlzS2V5YWJsZSBmcm9tICcuL19pc0tleWFibGUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE1hcERhdGE7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlR2V0O1xuIiwKICAgICJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVIYXM7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwKICAgICJpbXBvcnQgbWFwQ2FjaGVDbGVhciBmcm9tICcuL19tYXBDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBtYXBDYWNoZURlbGV0ZSBmcm9tICcuL19tYXBDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVHZXQgZnJvbSAnLi9fbWFwQ2FjaGVHZXQuanMnO1xuaW1wb3J0IG1hcENhY2hlSGFzIGZyb20gJy4vX21hcENhY2hlSGFzLmpzJztcbmltcG9ydCBtYXBDYWNoZVNldCBmcm9tICcuL19tYXBDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBDYWNoZTtcbiIsCiAgICAiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplO1xuIiwKICAgICJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrQ2xlYXI7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tEZWxldGU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tHZXQ7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrSGFzO1xuIiwKICAgICJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iLAogICAgImltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBzdGFja0NsZWFyIGZyb20gJy4vX3N0YWNrQ2xlYXIuanMnO1xuaW1wb3J0IHN0YWNrRGVsZXRlIGZyb20gJy4vX3N0YWNrRGVsZXRlLmpzJztcbmltcG9ydCBzdGFja0dldCBmcm9tICcuL19zdGFja0dldC5qcyc7XG5pbXBvcnQgc3RhY2tIYXMgZnJvbSAnLi9fc3RhY2tIYXMuanMnO1xuaW1wb3J0IHN0YWNrU2V0IGZyb20gJy4vX3N0YWNrU2V0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBTdGFjaztcbiIsCiAgICAiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLAogICAgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25NZXJnZVZhbHVlO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQmFzZUZvcjtcbiIsCiAgICAiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsCiAgICAiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lQnVmZmVyO1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgVWludDhBcnJheTtcbiIsCiAgICAiaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVBcnJheUJ1ZmZlcjtcbiIsCiAgICAiaW1wb3J0IGNsb25lQXJyYXlCdWZmZXIgZnJvbSAnLi9fY2xvbmVBcnJheUJ1ZmZlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lVHlwZWRBcnJheTtcbiIsCiAgICAiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlBcnJheTtcbiIsCiAgICAiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ3JlYXRlO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlckFyZztcbiIsCiAgICAiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLAogICAgImltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVPYmplY3Q7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iLAogICAgImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsCiAgICAiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNMZW5ndGg7XG4iLAogICAgImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5TGlrZTtcbiIsCiAgICAiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2VPYmplY3Q7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVW5hcnk7XG4iLAogICAgImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc1R5cGVkQXJyYXkgZnJvbSAnLi9fYmFzZUlzVHlwZWRBcnJheS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNUeXBlZEFycmF5O1xuIiwKICAgICIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2FmZUdldDtcbiIsCiAgICAiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwKICAgICJpbXBvcnQgYmFzZVRpbWVzIGZyb20gJy4vX2Jhc2VUaW1lcy5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUxpa2VLZXlzO1xuIiwKICAgICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuIiwKICAgICJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuIiwKICAgICJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIiwKICAgICJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvUGxhaW5PYmplY3Q7XG4iLAogICAgImltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGNsb25lQnVmZmVyIGZyb20gJy4vX2Nsb25lQnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5pbXBvcnQgdG9QbGFpbk9iamVjdCBmcm9tICcuL3RvUGxhaW5PYmplY3QuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2VEZWVwO1xuIiwKICAgICJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGFzc2lnbk1lcmdlVmFsdWUgZnJvbSAnLi9fYXNzaWduTWVyZ2VWYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZUZvciBmcm9tICcuL19iYXNlRm9yLmpzJztcbmltcG9ydCBiYXNlTWVyZ2VEZWVwIGZyb20gJy4vX2Jhc2VNZXJnZURlZXAuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5pbXBvcnQgc2FmZUdldCBmcm9tICcuL19zYWZlR2V0LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2U7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwKICAgICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuIiwKICAgICJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbnN0YW50O1xuIiwKICAgICJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldFRvU3RyaW5nO1xuIiwKICAgICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3J0T3V0O1xuIiwKICAgICJpbXBvcnQgYmFzZVNldFRvU3RyaW5nIGZyb20gJy4vX2Jhc2VTZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXRUb1N0cmluZztcbiIsCiAgICAiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcbiIsCiAgICAiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iLAogICAgImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcjtcbiIsCiAgICAiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlO1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0LFxuICBjb21tb25fZGVmYXVsdCxcbiAgZGV0ZWN0VHlwZSxcbiAgZGlyZWN0aXZlUmVnZXgsXG4gIGxvZyxcbiAgc2FuaXRpemVEaXJlY3RpdmVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy91dGlscy50c1xuaW1wb3J0IHsgc2FuaXRpemVVcmwgfSBmcm9tIFwiQGJyYWludHJlZS9zYW5pdGl6ZS11cmxcIjtcbmltcG9ydCB7XG4gIGN1cnZlQmFzaXMsXG4gIGN1cnZlQmFzaXNDbG9zZWQsXG4gIGN1cnZlQmFzaXNPcGVuLFxuICBjdXJ2ZUJ1bXBYLFxuICBjdXJ2ZUJ1bXBZLFxuICBjdXJ2ZUJ1bmRsZSxcbiAgY3VydmVDYXJkaW5hbENsb3NlZCxcbiAgY3VydmVDYXJkaW5hbE9wZW4sXG4gIGN1cnZlQ2FyZGluYWwsXG4gIGN1cnZlQ2F0bXVsbFJvbUNsb3NlZCxcbiAgY3VydmVDYXRtdWxsUm9tT3BlbixcbiAgY3VydmVDYXRtdWxsUm9tLFxuICBjdXJ2ZUxpbmVhcixcbiAgY3VydmVMaW5lYXJDbG9zZWQsXG4gIGN1cnZlTW9ub3RvbmVYLFxuICBjdXJ2ZU1vbm90b25lWSxcbiAgY3VydmVOYXR1cmFsLFxuICBjdXJ2ZVN0ZXAsXG4gIGN1cnZlU3RlcEFmdGVyLFxuICBjdXJ2ZVN0ZXBCZWZvcmUsXG4gIHNlbGVjdFxufSBmcm9tIFwiZDNcIjtcbmltcG9ydCBtZW1vaXplIGZyb20gXCJsb2Rhc2gtZXMvbWVtb2l6ZS5qc1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJsb2Rhc2gtZXMvbWVyZ2UuanNcIjtcbnZhciBaRVJPX1dJRFRIX1NQQUNFID0gXCJcXHUyMDBCXCI7XG52YXIgZDNDdXJ2ZVR5cGVzID0ge1xuICBjdXJ2ZUJhc2lzLFxuICBjdXJ2ZUJhc2lzQ2xvc2VkLFxuICBjdXJ2ZUJhc2lzT3BlbixcbiAgY3VydmVCdW1wWCxcbiAgY3VydmVCdW1wWSxcbiAgY3VydmVCdW5kbGUsXG4gIGN1cnZlQ2FyZGluYWxDbG9zZWQsXG4gIGN1cnZlQ2FyZGluYWxPcGVuLFxuICBjdXJ2ZUNhcmRpbmFsLFxuICBjdXJ2ZUNhdG11bGxSb21DbG9zZWQsXG4gIGN1cnZlQ2F0bXVsbFJvbU9wZW4sXG4gIGN1cnZlQ2F0bXVsbFJvbSxcbiAgY3VydmVMaW5lYXIsXG4gIGN1cnZlTGluZWFyQ2xvc2VkLFxuICBjdXJ2ZU1vbm90b25lWCxcbiAgY3VydmVNb25vdG9uZVksXG4gIGN1cnZlTmF0dXJhbCxcbiAgY3VydmVTdGVwLFxuICBjdXJ2ZVN0ZXBBZnRlcixcbiAgY3VydmVTdGVwQmVmb3JlXG59O1xudmFyIGRpcmVjdGl2ZVdpdGhvdXRPcGVuID0gL1xccyooPzooXFx3KykoPz06KTp8KFxcdyspKVxccyooPzooXFx3Kyl8KCg/Oig/IX0lezJ9KS58XFxyP1xcbikqKSk/XFxzKig/On0lezJ9KT8vZ2k7XG52YXIgZGV0ZWN0SW5pdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgY29uZmlnKSB7XG4gIGNvbnN0IGluaXRzID0gZGV0ZWN0RGlyZWN0aXZlKHRleHQsIC8oPzppbml0XFxiKXwoPzppbml0aWFsaXplXFxiKS8pO1xuICBsZXQgcmVzdWx0cyA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbml0cykpIHtcbiAgICBjb25zdCBhcmdzID0gaW5pdHMubWFwKChpbml0KSA9PiBpbml0LmFyZ3MpO1xuICAgIHNhbml0aXplRGlyZWN0aXZlKGFyZ3MpO1xuICAgIHJlc3VsdHMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChyZXN1bHRzLCBbLi4uYXJnc10pO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSBpbml0cy5hcmdzO1xuICB9XG4gIGlmICghcmVzdWx0cykge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgdHlwZSA9IGRldGVjdFR5cGUodGV4dCwgY29uZmlnKTtcbiAgY29uc3QgcHJvcCA9IFwiY29uZmlnXCI7XG4gIGlmIChyZXN1bHRzW3Byb3BdICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZSA9PT0gXCJmbG93Y2hhcnQtdjJcIikge1xuICAgICAgdHlwZSA9IFwiZmxvd2NoYXJ0XCI7XG4gICAgfVxuICAgIHJlc3VsdHNbdHlwZV0gPSByZXN1bHRzW3Byb3BdO1xuICAgIGRlbGV0ZSByZXN1bHRzW3Byb3BdO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufSwgXCJkZXRlY3RJbml0XCIpO1xudmFyIGRldGVjdERpcmVjdGl2ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgdHlwZSA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb21tZW50V2l0aG91dERpcmVjdGl2ZXMgPSBuZXcgUmVnRXhwKFxuICAgICAgYFslXXsyfSg/IVt7XSR7ZGlyZWN0aXZlV2l0aG91dE9wZW4uc291cmNlfSkoPz1bfV1bJV17Mn0pLipcbmAsXG4gICAgICBcImlnXCJcbiAgICApO1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKS5yZXBsYWNlKGNvbW1lbnRXaXRob3V0RGlyZWN0aXZlcywgXCJcIikucmVwbGFjZSgvJy9nbSwgJ1wiJyk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7dHlwZSAhPT0gbnVsbCA/IFwiIHR5cGU6XCIgKyB0eXBlIDogXCJcIn0gYmFzZWQgb24gdGhlIHRleHQ6JHt0ZXh0fWBcbiAgICApO1xuICAgIGxldCBtYXRjaDtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoID0gZGlyZWN0aXZlUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICAgIGlmIChtYXRjaC5pbmRleCA9PT0gZGlyZWN0aXZlUmVnZXgubGFzdEluZGV4KSB7XG4gICAgICAgIGRpcmVjdGl2ZVJlZ2V4Lmxhc3RJbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKG1hdGNoICYmICF0eXBlIHx8IHR5cGUgJiYgbWF0Y2hbMV0/Lm1hdGNoKHR5cGUpIHx8IHR5cGUgJiYgbWF0Y2hbMl0/Lm1hdGNoKHR5cGUpKSB7XG4gICAgICAgIGNvbnN0IHR5cGUyID0gbWF0Y2hbMV0gPyBtYXRjaFsxXSA6IG1hdGNoWzJdO1xuICAgICAgICBjb25zdCBhcmdzID0gbWF0Y2hbM10gPyBtYXRjaFszXS50cmltKCkgOiBtYXRjaFs0XSA/IEpTT04ucGFyc2UobWF0Y2hbNF0udHJpbSgpKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5wdXNoKHsgdHlwZTogdHlwZTIsIGFyZ3MgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiB0ZXh0LCBhcmdzOiBudWxsIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcihcbiAgICAgIGBFUlJPUjogJHtlcnJvci5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUgdHlwZTogJyR7dHlwZX0nIGJhc2VkIG9uIHRoZSB0ZXh0OiAnJHt0ZXh0fSdgXG4gICAgKTtcbiAgICByZXR1cm4geyB0eXBlOiB2b2lkIDAsIGFyZ3M6IG51bGwgfTtcbiAgfVxufSwgXCJkZXRlY3REaXJlY3RpdmVcIik7XG52YXIgcmVtb3ZlRGlyZWN0aXZlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKGRpcmVjdGl2ZVJlZ2V4LCBcIlwiKTtcbn0sIFwicmVtb3ZlRGlyZWN0aXZlc1wiKTtcbnZhciBpc1N1YnN0cmluZ0luQXJyYXkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0ciwgYXJyKSB7XG4gIGZvciAoY29uc3QgW2ksIGVsZW1lbnRdIG9mIGFyci5lbnRyaWVzKCkpIHtcbiAgICBpZiAoZWxlbWVudC5tYXRjaChzdHIpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufSwgXCJpc1N1YnN0cmluZ0luQXJyYXlcIik7XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRvQ3VydmUoaW50ZXJwb2xhdGUsIGRlZmF1bHRDdXJ2ZSkge1xuICBpZiAoIWludGVycG9sYXRlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDdXJ2ZTtcbiAgfVxuICBjb25zdCBjdXJ2ZU5hbWUgPSBgY3VydmUke2ludGVycG9sYXRlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaW50ZXJwb2xhdGUuc2xpY2UoMSl9YDtcbiAgcmV0dXJuIGQzQ3VydmVUeXBlc1tjdXJ2ZU5hbWVdID8/IGRlZmF1bHRDdXJ2ZTtcbn1cbl9fbmFtZShpbnRlcnBvbGF0ZVRvQ3VydmUsIFwiaW50ZXJwb2xhdGVUb0N1cnZlXCIpO1xuZnVuY3Rpb24gZm9ybWF0VXJsKGxpbmtTdHIsIGNvbmZpZykge1xuICBjb25zdCB1cmwgPSBsaW5rU3RyLnRyaW0oKTtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmIChjb25maWcuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgcmV0dXJuIHNhbml0aXplVXJsKHVybCk7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbl9fbmFtZShmb3JtYXRVcmwsIFwiZm9ybWF0VXJsXCIpO1xudmFyIHJ1bkZ1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChmdW5jdGlvbk5hbWUsIC4uLnBhcmFtcykgPT4ge1xuICBjb25zdCBhcnJQYXRocyA9IGZ1bmN0aW9uTmFtZS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbiA9IGFyclBhdGhzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGZuTmFtZSA9IGFyclBhdGhzW2xlbl07XG4gIGxldCBvYmogPSB3aW5kb3c7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBvYmogPSBvYmpbYXJyUGF0aHNbaV1dO1xuICAgIGlmICghb2JqKSB7XG4gICAgICBsb2cuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7ZnVuY3Rpb25OYW1lfSBub3QgZm91bmQgaW4gd2luZG93YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIG9ialtmbk5hbWVdKC4uLnBhcmFtcyk7XG59LCBcInJ1bkZ1bmNcIik7XG5mdW5jdGlvbiBkaXN0YW5jZShwMSwgcDIpIHtcbiAgaWYgKCFwMSB8fCAhcDIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHAyLnggLSBwMS54LCAyKSArIE1hdGgucG93KHAyLnkgLSBwMS55LCAyKSk7XG59XG5fX25hbWUoZGlzdGFuY2UsIFwiZGlzdGFuY2VcIik7XG5mdW5jdGlvbiB0cmF2ZXJzZUVkZ2UocG9pbnRzKSB7XG4gIGxldCBwcmV2UG9pbnQ7XG4gIGxldCB0b3RhbERpc3RhbmNlID0gMDtcbiAgcG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiB7XG4gICAgdG90YWxEaXN0YW5jZSArPSBkaXN0YW5jZShwb2ludCwgcHJldlBvaW50KTtcbiAgICBwcmV2UG9pbnQgPSBwb2ludDtcbiAgfSk7XG4gIGNvbnN0IHJlbWFpbmluZ0Rpc3RhbmNlID0gdG90YWxEaXN0YW5jZSAvIDI7XG4gIHJldHVybiBjYWxjdWxhdGVQb2ludChwb2ludHMsIHJlbWFpbmluZ0Rpc3RhbmNlKTtcbn1cbl9fbmFtZSh0cmF2ZXJzZUVkZ2UsIFwidHJhdmVyc2VFZGdlXCIpO1xuZnVuY3Rpb24gY2FsY0xhYmVsUG9zaXRpb24ocG9pbnRzKSB7XG4gIGlmIChwb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHBvaW50c1swXTtcbiAgfVxuICByZXR1cm4gdHJhdmVyc2VFZGdlKHBvaW50cyk7XG59XG5fX25hbWUoY2FsY0xhYmVsUG9zaXRpb24sIFwiY2FsY0xhYmVsUG9zaXRpb25cIik7XG52YXIgcm91bmROdW1iZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChudW0sIHByZWNpc2lvbiA9IDIpID0+IHtcbiAgY29uc3QgZmFjdG9yID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIGZhY3RvcikgLyBmYWN0b3I7XG59LCBcInJvdW5kTnVtYmVyXCIpO1xudmFyIGNhbGN1bGF0ZVBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocG9pbnRzLCBkaXN0YW5jZVRvVHJhdmVyc2UpID0+IHtcbiAgbGV0IHByZXZQb2ludCA9IHZvaWQgMDtcbiAgbGV0IHJlbWFpbmluZ0Rpc3RhbmNlID0gZGlzdGFuY2VUb1RyYXZlcnNlO1xuICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykge1xuICAgIGlmIChwcmV2UG9pbnQpIHtcbiAgICAgIGNvbnN0IHZlY3RvckRpc3RhbmNlID0gZGlzdGFuY2UocG9pbnQsIHByZXZQb2ludCk7XG4gICAgICBpZiAodmVjdG9yRGlzdGFuY2UgPCByZW1haW5pbmdEaXN0YW5jZSkge1xuICAgICAgICByZW1haW5pbmdEaXN0YW5jZSAtPSB2ZWN0b3JEaXN0YW5jZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlUmF0aW8gPSByZW1haW5pbmdEaXN0YW5jZSAvIHZlY3RvckRpc3RhbmNlO1xuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA8PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQb2ludDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA+PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXN0YW5jZVJhdGlvID4gMCAmJiBkaXN0YW5jZVJhdGlvIDwgMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByb3VuZE51bWJlcigoMSAtIGRpc3RhbmNlUmF0aW8pICogcHJldlBvaW50LnggKyBkaXN0YW5jZVJhdGlvICogcG9pbnQueCwgNSksXG4gICAgICAgICAgICB5OiByb3VuZE51bWJlcigoMSAtIGRpc3RhbmNlUmF0aW8pICogcHJldlBvaW50LnkgKyBkaXN0YW5jZVJhdGlvICogcG9pbnQueSwgNSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZQb2ludCA9IHBvaW50O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgcG9pbnQgZm9yIHRoZSBnaXZlbiBkaXN0YW5jZVwiKTtcbn0sIFwiY2FsY3VsYXRlUG9pbnRcIik7XG52YXIgY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpc1JlbGF0aW9uVHlwZVByZXNlbnQsIHBvaW50cywgaW5pdGlhbFBvc2l0aW9uKSA9PiB7XG4gIGxvZy5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkocG9pbnRzKX1gKTtcbiAgaWYgKHBvaW50c1swXSAhPT0gaW5pdGlhbFBvc2l0aW9uKSB7XG4gICAgcG9pbnRzID0gcG9pbnRzLnJldmVyc2UoKTtcbiAgfVxuICBjb25zdCBkaXN0YW5jZVRvQ2FyZGluYWxpdHlQb2ludCA9IDI1O1xuICBjb25zdCBjZW50ZXIgPSBjYWxjdWxhdGVQb2ludChwb2ludHMsIGRpc3RhbmNlVG9DYXJkaW5hbGl0eVBvaW50KTtcbiAgY29uc3QgZCA9IGlzUmVsYXRpb25UeXBlUHJlc2VudCA/IDEwIDogNTtcbiAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHBvaW50c1swXS55IC0gY2VudGVyLnksIHBvaW50c1swXS54IC0gY2VudGVyLngpO1xuICBjb25zdCBjYXJkaW5hbGl0eVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XG4gIGNhcmRpbmFsaXR5UG9zaXRpb24ueCA9IE1hdGguc2luKGFuZ2xlKSAqIGQgKyAocG9pbnRzWzBdLnggKyBjZW50ZXIueCkgLyAyO1xuICBjYXJkaW5hbGl0eVBvc2l0aW9uLnkgPSAtTWF0aC5jb3MoYW5nbGUpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDI7XG4gIHJldHVybiBjYXJkaW5hbGl0eVBvc2l0aW9uO1xufSwgXCJjYWxjQ2FyZGluYWxpdHlQb3NpdGlvblwiKTtcbmZ1bmN0aW9uIGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odGVybWluYWxNYXJrZXJTaXplLCBwb3NpdGlvbiwgX3BvaW50cykge1xuICBjb25zdCBwb2ludHMgPSBzdHJ1Y3R1cmVkQ2xvbmUoX3BvaW50cyk7XG4gIGxvZy5pbmZvKFwib3VyIHBvaW50c1wiLCBwb2ludHMpO1xuICBpZiAocG9zaXRpb24gIT09IFwic3RhcnRfbGVmdFwiICYmIHBvc2l0aW9uICE9PSBcInN0YXJ0X3JpZ2h0XCIpIHtcbiAgICBwb2ludHMucmV2ZXJzZSgpO1xuICB9XG4gIGNvbnN0IGRpc3RhbmNlVG9DYXJkaW5hbGl0eVBvaW50ID0gMjUgKyB0ZXJtaW5hbE1hcmtlclNpemU7XG4gIGNvbnN0IGNlbnRlciA9IGNhbGN1bGF0ZVBvaW50KHBvaW50cywgZGlzdGFuY2VUb0NhcmRpbmFsaXR5UG9pbnQpO1xuICBjb25zdCBkID0gMTAgKyB0ZXJtaW5hbE1hcmtlclNpemUgKiAwLjU7XG4gIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihwb2ludHNbMF0ueSAtIGNlbnRlci55LCBwb2ludHNbMF0ueCAtIGNlbnRlci54KTtcbiAgY29uc3QgY2FyZGluYWxpdHlQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xuICBpZiAocG9zaXRpb24gPT09IFwic3RhcnRfbGVmdFwiKSB7XG4gICAgY2FyZGluYWxpdHlQb3NpdGlvbi54ID0gTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJKSAqIGQgKyAocG9pbnRzWzBdLnggKyBjZW50ZXIueCkgLyAyO1xuICAgIGNhcmRpbmFsaXR5UG9zaXRpb24ueSA9IC1NYXRoLmNvcyhhbmdsZSArIE1hdGguUEkpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDI7XG4gIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwiZW5kX3JpZ2h0XCIpIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkpICogZCArIChwb2ludHNbMF0ueCArIGNlbnRlci54KSAvIDIgLSA1O1xuICAgIGNhcmRpbmFsaXR5UG9zaXRpb24ueSA9IC1NYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDIgLSA1O1xuICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcImVuZF9sZWZ0XCIpIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMiAtIDU7XG4gICAgY2FyZGluYWxpdHlQb3NpdGlvbi55ID0gLU1hdGguY29zKGFuZ2xlKSAqIGQgKyAocG9pbnRzWzBdLnkgKyBjZW50ZXIueSkgLyAyIC0gNTtcbiAgfSBlbHNlIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMjtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnkgPSAtTWF0aC5jb3MoYW5nbGUpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDI7XG4gIH1cbiAgcmV0dXJuIGNhcmRpbmFsaXR5UG9zaXRpb247XG59XG5fX25hbWUoY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbiwgXCJjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0U3R5bGVzRnJvbUFycmF5KGFycikge1xuICBsZXQgc3R5bGUgPSBcIlwiO1xuICBsZXQgbGFiZWxTdHlsZSA9IFwiXCI7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcnIpIHtcbiAgICBpZiAoZWxlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgICBpZiAoZWxlbWVudC5zdGFydHNXaXRoKFwiY29sb3I6XCIpIHx8IGVsZW1lbnQuc3RhcnRzV2l0aChcInRleHQtYWxpZ246XCIpKSB7XG4gICAgICAgIGxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlICsgZWxlbWVudCArIFwiO1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSBzdHlsZSArIGVsZW1lbnQgKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgc3R5bGUsIGxhYmVsU3R5bGUgfTtcbn1cbl9fbmFtZShnZXRTdHlsZXNGcm9tQXJyYXksIFwiZ2V0U3R5bGVzRnJvbUFycmF5XCIpO1xudmFyIGNudCA9IDA7XG52YXIgZ2VuZXJhdGVJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjbnQrKztcbiAgcmV0dXJuIFwiaWQtXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTIpICsgXCItXCIgKyBjbnQ7XG59LCBcImdlbmVyYXRlSWRcIik7XG5mdW5jdGlvbiBtYWtlUmFuZG9tSGV4KGxlbmd0aCkge1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgY29uc3QgY2hhcmFjdGVycyA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUobWFrZVJhbmRvbUhleCwgXCJtYWtlUmFuZG9tSGV4XCIpO1xudmFyIHJhbmRvbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG1ha2VSYW5kb21IZXgob3B0aW9ucy5sZW5ndGgpO1xufSwgXCJyYW5kb21cIik7XG52YXIgZ2V0VGV4dE9iaiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IHZvaWQgMCxcbiAgICBhbmNob3I6IFwic3RhcnRcIixcbiAgICBzdHlsZTogXCIjNjY2XCIsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB0ZXh0TWFyZ2luOiAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwLFxuICAgIHZhbGlnbjogdm9pZCAwLFxuICAgIHRleHQ6IFwiXCJcbiAgfTtcbn0sIFwiZ2V0VGV4dE9ialwiKTtcbnZhciBkcmF3U2ltcGxlVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdGV4dERhdGEpIHtcbiAgY29uc3QgblRleHQgPSB0ZXh0RGF0YS50ZXh0LnJlcGxhY2UoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgsIFwiIFwiKTtcbiAgY29uc3QgWywgX2ZvbnRTaXplUHhdID0gcGFyc2VGb250U2l6ZSh0ZXh0RGF0YS5mb250U2l6ZSk7XG4gIGNvbnN0IHRleHRFbGVtID0gZWxlbS5hcHBlbmQoXCJ0ZXh0XCIpO1xuICB0ZXh0RWxlbS5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgdGV4dEVsZW0uYXR0cihcInlcIiwgdGV4dERhdGEueSk7XG4gIHRleHRFbGVtLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJmb250LWZhbWlseVwiLCB0ZXh0RGF0YS5mb250RmFtaWx5KTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXNpemVcIiwgX2ZvbnRTaXplUHgpO1xuICB0ZXh0RWxlbS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIHRleHREYXRhLmZvbnRXZWlnaHQpO1xuICB0ZXh0RWxlbS5hdHRyKFwiZmlsbFwiLCB0ZXh0RGF0YS5maWxsKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHNwYW4gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ0c3BhblwiKTtcbiAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54ICsgdGV4dERhdGEudGV4dE1hcmdpbiAqIDIpO1xuICBzcGFuLmF0dHIoXCJmaWxsXCIsIHRleHREYXRhLmZpbGwpO1xuICBzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59LCBcImRyYXdTaW1wbGVUZXh0XCIpO1xudmFyIHdyYXBMYWJlbCA9IG1lbW9pemUoXG4gIChsYWJlbCwgbWF4V2lkdGgsIGNvbmZpZykgPT4ge1xuICAgIGlmICghbGFiZWwpIHtcbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG4gICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHsgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiA0MDAsIGZvbnRGYW1pbHk6IFwiQXJpYWxcIiwgam9pbldpdGg6IFwiPGJyLz5cIiB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICBpZiAoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgudGVzdChsYWJlbCkpIHtcbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG4gICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdChcIiBcIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IGNvbXBsZXRlZExpbmVzID0gW107XG4gICAgbGV0IG5leHRMaW5lID0gXCJcIjtcbiAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgd29yZExlbmd0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChgJHt3b3JkfSBgLCBjb25maWcpO1xuICAgICAgY29uc3QgbmV4dExpbmVMZW5ndGggPSBjYWxjdWxhdGVUZXh0V2lkdGgobmV4dExpbmUsIGNvbmZpZyk7XG4gICAgICBpZiAod29yZExlbmd0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHsgaHlwaGVuYXRlZFN0cmluZ3MsIHJlbWFpbmluZ1dvcmQgfSA9IGJyZWFrU3RyaW5nKHdvcmQsIG1heFdpZHRoLCBcIi1cIiwgY29uZmlnKTtcbiAgICAgICAgY29tcGxldGVkTGluZXMucHVzaChuZXh0TGluZSwgLi4uaHlwaGVuYXRlZFN0cmluZ3MpO1xuICAgICAgICBuZXh0TGluZSA9IHJlbWFpbmluZ1dvcmQ7XG4gICAgICB9IGVsc2UgaWYgKG5leHRMaW5lTGVuZ3RoICsgd29yZExlbmd0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICBjb21wbGV0ZWRMaW5lcy5wdXNoKG5leHRMaW5lKTtcbiAgICAgICAgbmV4dExpbmUgPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dExpbmUgPSBbbmV4dExpbmUsIHdvcmRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRXb3JkID0gaW5kZXggKyAxO1xuICAgICAgY29uc3QgaXNMYXN0V29yZCA9IGN1cnJlbnRXb3JkID09PSB3b3Jkcy5sZW5ndGg7XG4gICAgICBpZiAoaXNMYXN0V29yZCkge1xuICAgICAgICBjb21wbGV0ZWRMaW5lcy5wdXNoKG5leHRMaW5lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tcGxldGVkTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSBcIlwiKS5qb2luKGNvbmZpZy5qb2luV2l0aCk7XG4gIH0sXG4gIChsYWJlbCwgbWF4V2lkdGgsIGNvbmZpZykgPT4gYCR7bGFiZWx9JHttYXhXaWR0aH0ke2NvbmZpZy5mb250U2l6ZX0ke2NvbmZpZy5mb250V2VpZ2h0fSR7Y29uZmlnLmZvbnRGYW1pbHl9JHtjb25maWcuam9pbldpdGh9YFxuKTtcbnZhciBicmVha1N0cmluZyA9IG1lbW9pemUoXG4gICh3b3JkLCBtYXhXaWR0aCwgaHlwaGVuQ2hhcmFjdGVyID0gXCItXCIsIGNvbmZpZykgPT4ge1xuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBmb250RmFtaWx5OiBcIkFyaWFsXCIsIG1hcmdpbjogMCB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gWy4uLndvcmRdO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgbGV0IGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICBjaGFyYWN0ZXJzLmZvckVhY2goKGNoYXJhY3RlciwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5leHRMaW5lID0gYCR7Y3VycmVudExpbmV9JHtjaGFyYWN0ZXJ9YDtcbiAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChuZXh0TGluZSwgY29uZmlnKTtcbiAgICAgIGlmIChsaW5lV2lkdGggPj0gbWF4V2lkdGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudENoYXJhY3RlciA9IGluZGV4ICsgMTtcbiAgICAgICAgY29uc3QgaXNMYXN0TGluZSA9IGNoYXJhY3RlcnMubGVuZ3RoID09PSBjdXJyZW50Q2hhcmFjdGVyO1xuICAgICAgICBjb25zdCBoeXBoZW5hdGVkTmV4dExpbmUgPSBgJHtuZXh0TGluZX0ke2h5cGhlbkNoYXJhY3Rlcn1gO1xuICAgICAgICBsaW5lcy5wdXNoKGlzTGFzdExpbmUgPyBuZXh0TGluZSA6IGh5cGhlbmF0ZWROZXh0TGluZSk7XG4gICAgICAgIGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRMaW5lID0gbmV4dExpbmU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgaHlwaGVuYXRlZFN0cmluZ3M6IGxpbmVzLCByZW1haW5pbmdXb3JkOiBjdXJyZW50TGluZSB9O1xuICB9LFxuICAod29yZCwgbWF4V2lkdGgsIGh5cGhlbkNoYXJhY3RlciA9IFwiLVwiLCBjb25maWcpID0+IGAke3dvcmR9JHttYXhXaWR0aH0ke2h5cGhlbkNoYXJhY3Rlcn0ke2NvbmZpZy5mb250U2l6ZX0ke2NvbmZpZy5mb250V2VpZ2h0fSR7Y29uZmlnLmZvbnRGYW1pbHl9YFxuKTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVRleHRIZWlnaHQodGV4dCwgY29uZmlnKSB7XG4gIHJldHVybiBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0ZXh0LCBjb25maWcpLmhlaWdodDtcbn1cbl9fbmFtZShjYWxjdWxhdGVUZXh0SGVpZ2h0LCBcImNhbGN1bGF0ZVRleHRIZWlnaHRcIik7XG5mdW5jdGlvbiBjYWxjdWxhdGVUZXh0V2lkdGgodGV4dCwgY29uZmlnKSB7XG4gIHJldHVybiBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0ZXh0LCBjb25maWcpLndpZHRoO1xufVxuX19uYW1lKGNhbGN1bGF0ZVRleHRXaWR0aCwgXCJjYWxjdWxhdGVUZXh0V2lkdGhcIik7XG52YXIgY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMgPSBtZW1vaXplKFxuICAodGV4dCwgY29uZmlnKSA9PiB7XG4gICAgY29uc3QgeyBmb250U2l6ZSA9IDEyLCBmb250RmFtaWx5ID0gXCJBcmlhbFwiLCBmb250V2VpZ2h0ID0gNDAwIH0gPSBjb25maWc7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgfVxuICAgIGNvbnN0IFssIF9mb250U2l6ZVB4XSA9IHBhcnNlRm9udFNpemUoZm9udFNpemUpO1xuICAgIGNvbnN0IGZvbnRGYW1pbGllcyA9IFtcInNhbnMtc2VyaWZcIiwgZm9udEZhbWlseV07XG4gICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBjb25zdCBkaW1zID0gW107XG4gICAgY29uc3QgYm9keSA9IHNlbGVjdChcImJvZHlcIik7XG4gICAgaWYgKCFib2R5LnJlbW92ZSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCwgbGluZUhlaWdodDogMCB9O1xuICAgIH1cbiAgICBjb25zdCBnID0gYm9keS5hcHBlbmQoXCJzdmdcIik7XG4gICAgZm9yIChjb25zdCBmb250RmFtaWx5MiBvZiBmb250RmFtaWxpZXMpIHtcbiAgICAgIGxldCBjSGVpZ2h0ID0gMDtcbiAgICAgIGNvbnN0IGRpbSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgbGluZUhlaWdodDogMCB9O1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IHRleHRPYmogPSBnZXRUZXh0T2JqKCk7XG4gICAgICAgIHRleHRPYmoudGV4dCA9IGxpbmUgfHwgWkVST19XSURUSF9TUEFDRTtcbiAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkcmF3U2ltcGxlVGV4dChnLCB0ZXh0T2JqKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBfZm9udFNpemVQeCkuc3R5bGUoXCJmb250LXdlaWdodFwiLCBmb250V2VpZ2h0KS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGZvbnRGYW1pbHkyKTtcbiAgICAgICAgY29uc3QgYkJveCA9ICh0ZXh0RWxlbS5fZ3JvdXBzIHx8IHRleHRFbGVtKVswXVswXS5nZXRCQm94KCk7XG4gICAgICAgIGlmIChiQm94LndpZHRoID09PSAwICYmIGJCb3guaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3ZnIGVsZW1lbnQgbm90IGluIHJlbmRlciB0cmVlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRpbS53aWR0aCA9IE1hdGgucm91bmQoTWF0aC5tYXgoZGltLndpZHRoLCBiQm94LndpZHRoKSk7XG4gICAgICAgIGNIZWlnaHQgPSBNYXRoLnJvdW5kKGJCb3guaGVpZ2h0KTtcbiAgICAgICAgZGltLmhlaWdodCArPSBjSGVpZ2h0O1xuICAgICAgICBkaW0ubGluZUhlaWdodCA9IE1hdGgucm91bmQoTWF0aC5tYXgoZGltLmxpbmVIZWlnaHQsIGNIZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChkaW0pO1xuICAgIH1cbiAgICBnLnJlbW92ZSgpO1xuICAgIGNvbnN0IGluZGV4ID0gaXNOYU4oZGltc1sxXS5oZWlnaHQpIHx8IGlzTmFOKGRpbXNbMV0ud2lkdGgpIHx8IGlzTmFOKGRpbXNbMV0ubGluZUhlaWdodCkgfHwgZGltc1swXS5oZWlnaHQgPiBkaW1zWzFdLmhlaWdodCAmJiBkaW1zWzBdLndpZHRoID4gZGltc1sxXS53aWR0aCAmJiBkaW1zWzBdLmxpbmVIZWlnaHQgPiBkaW1zWzFdLmxpbmVIZWlnaHQgPyAwIDogMTtcbiAgICByZXR1cm4gZGltc1tpbmRleF07XG4gIH0sXG4gICh0ZXh0LCBjb25maWcpID0+IGAke3RleHR9JHtjb25maWcuZm9udFNpemV9JHtjb25maWcuZm9udFdlaWdodH0ke2NvbmZpZy5mb250RmFtaWx5fWBcbik7XG52YXIgSW5pdElER2VuZXJhdG9yID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihkZXRlcm1pbmlzdGljID0gZmFsc2UsIHNlZWQpIHtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmNvdW50ID0gc2VlZCA/IHNlZWQubGVuZ3RoIDogMDtcbiAgICB0aGlzLm5leHQgPSBkZXRlcm1pbmlzdGljID8gKCkgPT4gdGhpcy5jb3VudCsrIDogKCkgPT4gRGF0ZS5ub3coKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkluaXRJREdlbmVyYXRvclwiKTtcbiAgfVxufTtcbnZhciBkZWNvZGVyO1xudmFyIGVudGl0eURlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaHRtbCkge1xuICBkZWNvZGVyID0gZGVjb2RlciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBodG1sID0gZXNjYXBlKGh0bWwpLnJlcGxhY2UoLyUyNi9nLCBcIiZcIikucmVwbGFjZSgvJTIzL2csIFwiI1wiKS5yZXBsYWNlKC8lM0IvZywgXCI7XCIpO1xuICBkZWNvZGVyLmlubmVySFRNTCA9IGh0bWw7XG4gIHJldHVybiB1bmVzY2FwZShkZWNvZGVyLnRleHRDb250ZW50KTtcbn0sIFwiZW50aXR5RGVjb2RlXCIpO1xuZnVuY3Rpb24gaXNEZXRhaWxlZEVycm9yKGVycm9yKSB7XG4gIHJldHVybiBcInN0clwiIGluIGVycm9yO1xufVxuX19uYW1lKGlzRGV0YWlsZWRFcnJvciwgXCJpc0RldGFpbGVkRXJyb3JcIik7XG52YXIgaW5zZXJ0VGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIGNzc0NsYXNzLCB0aXRsZVRvcE1hcmdpbiwgdGl0bGUpID0+IHtcbiAgaWYgKCF0aXRsZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBwYXJlbnQubm9kZSgpPy5nZXRCQm94KCk7XG4gIGlmICghYm91bmRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcmVudC5hcHBlbmQoXCJ0ZXh0XCIpLnRleHQodGl0bGUpLmF0dHIoXCJ4XCIsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMikuYXR0cihcInlcIiwgLXRpdGxlVG9wTWFyZ2luKS5hdHRyKFwiY2xhc3NcIiwgY3NzQ2xhc3MpO1xufSwgXCJpbnNlcnRUaXRsZVwiKTtcbnZhciBwYXJzZUZvbnRTaXplID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZm9udFNpemUpID0+IHtcbiAgaWYgKHR5cGVvZiBmb250U2l6ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBbZm9udFNpemUsIGZvbnRTaXplICsgXCJweFwiXTtcbiAgfVxuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHBhcnNlSW50KGZvbnRTaXplID8/IFwiXCIsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihmb250U2l6ZU51bWJlcikpIHtcbiAgICByZXR1cm4gW3ZvaWQgMCwgdm9pZCAwXTtcbiAgfSBlbHNlIGlmIChmb250U2l6ZSA9PT0gU3RyaW5nKGZvbnRTaXplTnVtYmVyKSkge1xuICAgIHJldHVybiBbZm9udFNpemVOdW1iZXIsIGZvbnRTaXplICsgXCJweFwiXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW2ZvbnRTaXplTnVtYmVyLCBmb250U2l6ZV07XG4gIH1cbn0sIFwicGFyc2VGb250U2l6ZVwiKTtcbmZ1bmN0aW9uIGNsZWFuQW5kTWVyZ2UoZGVmYXVsdERhdGEsIGRhdGEpIHtcbiAgcmV0dXJuIG1lcmdlKHt9LCBkZWZhdWx0RGF0YSwgZGF0YSk7XG59XG5fX25hbWUoY2xlYW5BbmRNZXJnZSwgXCJjbGVhbkFuZE1lcmdlXCIpO1xudmFyIHV0aWxzX2RlZmF1bHQgPSB7XG4gIGFzc2lnbldpdGhEZXB0aDogYXNzaWduV2l0aERlcHRoX2RlZmF1bHQsXG4gIHdyYXBMYWJlbCxcbiAgY2FsY3VsYXRlVGV4dEhlaWdodCxcbiAgY2FsY3VsYXRlVGV4dFdpZHRoLFxuICBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyxcbiAgY2xlYW5BbmRNZXJnZSxcbiAgZGV0ZWN0SW5pdCxcbiAgZGV0ZWN0RGlyZWN0aXZlLFxuICBpc1N1YnN0cmluZ0luQXJyYXksXG4gIGludGVycG9sYXRlVG9DdXJ2ZSxcbiAgY2FsY0xhYmVsUG9zaXRpb24sXG4gIGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uLFxuICBjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uLFxuICBmb3JtYXRVcmwsXG4gIGdldFN0eWxlc0Zyb21BcnJheSxcbiAgZ2VuZXJhdGVJZCxcbiAgcmFuZG9tLFxuICBydW5GdW5jLFxuICBlbnRpdHlEZWNvZGUsXG4gIGluc2VydFRpdGxlLFxuICBwYXJzZUZvbnRTaXplLFxuICBJbml0SURHZW5lcmF0b3Jcbn07XG52YXIgZW5jb2RlRW50aXRpZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQpIHtcbiAgbGV0IHR4dCA9IHRleHQ7XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9zdHlsZS4qOlxcUyojLio7L2csIGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgfSk7XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9jbGFzc0RlZi4qOlxcUyojLio7L2csIGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgfSk7XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC8jXFx3KzsvZywgZnVuY3Rpb24ocykge1xuICAgIGNvbnN0IGlubmVyVHh0ID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBpc0ludCA9IC9eXFwrP1xcZCskLy50ZXN0KGlubmVyVHh0KTtcbiAgICBpZiAoaXNJbnQpIHtcbiAgICAgIHJldHVybiBcIlxcdUZCMDJcXHhCMFxceEIwXCIgKyBpbm5lclR4dCArIFwiXFx4QjZcXHhERlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcXHVGQjAyXFx4QjBcIiArIGlubmVyVHh0ICsgXCJcXHhCNlxceERGXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR4dDtcbn0sIFwiZW5jb2RlRW50aXRpZXNcIik7XG52YXIgZGVjb2RlRW50aXRpZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgv76yCwrDCsC9nLCBcIiYjXCIpLnJlcGxhY2UoL++sgsKwL2csIFwiJlwiKS5yZXBsYWNlKC/CtsOfL2csIFwiO1wiKTtcbn0sIFwiZGVjb2RlRW50aXRpZXNcIik7XG52YXIgZ2V0RWRnZUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZnJvbSwgdG8sIHtcbiAgY291bnRlciA9IDAsXG4gIHByZWZpeCxcbiAgc3VmZml4XG59KSA9PiB7XG4gIHJldHVybiBgJHtwcmVmaXggPyBgJHtwcmVmaXh9X2AgOiBcIlwifSR7ZnJvbX1fJHt0b31fJHtjb3VudGVyfSR7c3VmZml4ID8gYF8ke3N1ZmZpeH1gIDogXCJcIn1gO1xufSwgXCJnZXRFZGdlSWRcIik7XG5cbmV4cG9ydCB7XG4gIFpFUk9fV0lEVEhfU1BBQ0UsXG4gIHJlbW92ZURpcmVjdGl2ZXMsXG4gIGludGVycG9sYXRlVG9DdXJ2ZSxcbiAgZ2V0U3R5bGVzRnJvbUFycmF5LFxuICBnZW5lcmF0ZUlkLFxuICByYW5kb20sXG4gIHdyYXBMYWJlbCxcbiAgY2FsY3VsYXRlVGV4dEhlaWdodCxcbiAgY2FsY3VsYXRlVGV4dFdpZHRoLFxuICBpc0RldGFpbGVkRXJyb3IsXG4gIHBhcnNlRm9udFNpemUsXG4gIGNsZWFuQW5kTWVyZ2UsXG4gIHV0aWxzX2RlZmF1bHQsXG4gIGVuY29kZUVudGl0aWVzLFxuICBkZWNvZGVFbnRpdGllcyxcbiAgZ2V0RWRnZUlkXG59O1xuIiwKICAgICIvKipcbiAqIG1hcmtlZCB2MTMuMC4zIC0gYSBtYXJrZG93biBwYXJzZXJcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDI0LCBDaHJpc3RvcGhlciBKZWZmcmV5LiAoTUlUIExpY2Vuc2VkKVxuICogaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZFxuICovXG5cbi8qKlxuICogRE8gTk9UIEVESVQgVEhJUyBGSUxFXG4gKiBUaGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gZmlsZXMgaW4gLi9zcmMvXG4gKi9cblxuLyoqXG4gKiBHZXRzIHRoZSBvcmlnaW5hbCBtYXJrZWQgZGVmYXVsdCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICBicmVha3M6IGZhbHNlLFxuICAgICAgICBleHRlbnNpb25zOiBudWxsLFxuICAgICAgICBnZm06IHRydWUsXG4gICAgICAgIGhvb2tzOiBudWxsLFxuICAgICAgICBwZWRhbnRpYzogZmFsc2UsXG4gICAgICAgIHJlbmRlcmVyOiBudWxsLFxuICAgICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgICAgICB0b2tlbml6ZXI6IG51bGwsXG4gICAgICAgIHdhbGtUb2tlbnM6IG51bGwsXG4gICAgfTtcbn1cbmxldCBfZGVmYXVsdHMgPSBfZ2V0RGVmYXVsdHMoKTtcbmZ1bmN0aW9uIGNoYW5nZURlZmF1bHRzKG5ld0RlZmF1bHRzKSB7XG4gICAgX2RlZmF1bHRzID0gbmV3RGVmYXVsdHM7XG59XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5jb25zdCBlc2NhcGVUZXN0ID0gL1smPD5cIiddLztcbmNvbnN0IGVzY2FwZVJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVRlc3Quc291cmNlLCAnZycpO1xuY29uc3QgZXNjYXBlVGVzdE5vRW5jb2RlID0gL1s8PlwiJ118Jig/ISgjXFxkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFxcdyspOykvO1xuY29uc3QgZXNjYXBlUmVwbGFjZU5vRW5jb2RlID0gbmV3IFJlZ0V4cChlc2NhcGVUZXN0Tm9FbmNvZGUuc291cmNlLCAnZycpO1xuY29uc3QgZXNjYXBlUmVwbGFjZW1lbnRzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7Jyxcbn07XG5jb25zdCBnZXRFc2NhcGVSZXBsYWNlbWVudCA9IChjaCkgPT4gZXNjYXBlUmVwbGFjZW1lbnRzW2NoXTtcbmZ1bmN0aW9uIGVzY2FwZSQxKGh0bWwsIGVuY29kZSkge1xuICAgIGlmIChlbmNvZGUpIHtcbiAgICAgICAgaWYgKGVzY2FwZVRlc3QudGVzdChodG1sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlc2NhcGVSZXBsYWNlLCBnZXRFc2NhcGVSZXBsYWNlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChlc2NhcGVUZXN0Tm9FbmNvZGUudGVzdChodG1sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlc2NhcGVSZXBsYWNlTm9FbmNvZGUsIGdldEVzY2FwZVJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbn1cbmNvbnN0IHVuZXNjYXBlVGVzdCA9IC8mKCMoPzpcXGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XFx3KykpOz8vaWc7XG5mdW5jdGlvbiB1bmVzY2FwZShodG1sKSB7XG4gICAgLy8gZXhwbGljaXRseSBtYXRjaCBkZWNpbWFsLCBoZXgsIGFuZCBuYW1lZCBIVE1MIGVudGl0aWVzXG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZSh1bmVzY2FwZVRlc3QsIChfLCBuKSA9PiB7XG4gICAgICAgIG4gPSBuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChuID09PSAnY29sb24nKVxuICAgICAgICAgICAgcmV0dXJuICc6JztcbiAgICAgICAgaWYgKG4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgIHJldHVybiBuLmNoYXJBdCgxKSA9PT0gJ3gnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLCAxNikpXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuY29uc3QgY2FyZXQgPSAvKF58W15cXFtdKVxcXi9nO1xuZnVuY3Rpb24gZWRpdChyZWdleCwgb3B0KSB7XG4gICAgbGV0IHNvdXJjZSA9IHR5cGVvZiByZWdleCA9PT0gJ3N0cmluZycgPyByZWdleCA6IHJlZ2V4LnNvdXJjZTtcbiAgICBvcHQgPSBvcHQgfHwgJyc7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgICByZXBsYWNlOiAobmFtZSwgdmFsKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsU291cmNlID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwgOiB2YWwuc291cmNlO1xuICAgICAgICAgICAgdmFsU291cmNlID0gdmFsU291cmNlLnJlcGxhY2UoY2FyZXQsICckMScpO1xuICAgICAgICAgICAgc291cmNlID0gc291cmNlLnJlcGxhY2UobmFtZSwgdmFsU291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJlZ2V4OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIG9wdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gY2xlYW5VcmwoaHJlZikge1xuICAgIHRyeSB7XG4gICAgICAgIGhyZWYgPSBlbmNvZGVVUkkoaHJlZikucmVwbGFjZSgvJTI1L2csICclJyk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBocmVmO1xufVxuY29uc3Qgbm9vcFRlc3QgPSB7IGV4ZWM6ICgpID0+IG51bGwgfTtcbmZ1bmN0aW9uIHNwbGl0Q2VsbHModGFibGVSb3csIGNvdW50KSB7XG4gICAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgY2VsbC1kZWxpbWl0aW5nIHBpcGUgaGFzIGEgc3BhY2VcbiAgICAvLyBiZWZvcmUgaXQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhbiBlc2NhcGVkIHBpcGVcbiAgICBjb25zdCByb3cgPSB0YWJsZVJvdy5yZXBsYWNlKC9cXHwvZywgKG1hdGNoLCBvZmZzZXQsIHN0cikgPT4ge1xuICAgICAgICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgY3VyciA9IG9mZnNldDtcbiAgICAgICAgd2hpbGUgKC0tY3VyciA+PSAwICYmIHN0cltjdXJyXSA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkO1xuICAgICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAgICAgLy8gb2RkIG51bWJlciBvZiBzbGFzaGVzIG1lYW5zIHwgaXMgZXNjYXBlZFxuICAgICAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgYWxvbmVcbiAgICAgICAgICAgIHJldHVybiAnfCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQgc3BhY2UgYmVmb3JlIHVuZXNjYXBlZCB8XG4gICAgICAgICAgICByZXR1cm4gJyB8JztcbiAgICAgICAgfVxuICAgIH0pLCBjZWxscyA9IHJvdy5zcGxpdCgvIFxcfC8pO1xuICAgIGxldCBpID0gMDtcbiAgICAvLyBGaXJzdC9sYXN0IGNlbGwgaW4gYSByb3cgY2Fubm90IGJlIGVtcHR5IGlmIGl0IGhhcyBubyBsZWFkaW5nL3RyYWlsaW5nIHBpcGVcbiAgICBpZiAoIWNlbGxzWzBdLnRyaW0oKSkge1xuICAgICAgICBjZWxscy5zaGlmdCgpO1xuICAgIH1cbiAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCAmJiAhY2VsbHNbY2VsbHMubGVuZ3RoIC0gMV0udHJpbSgpKSB7XG4gICAgICAgIGNlbGxzLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoY291bnQpIHtcbiAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IGNvdW50KSB7XG4gICAgICAgICAgICBjZWxscy5zcGxpY2UoY291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKGNlbGxzLmxlbmd0aCA8IGNvdW50KVxuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgcGVyIHRoZSBnZm0gc3BlY1xuICAgICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLnRyaW0oKS5yZXBsYWNlKC9cXFxcXFx8L2csICd8Jyk7XG4gICAgfVxuICAgIHJldHVybiBjZWxscztcbn1cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nICdjJ3MuIEVxdWl2YWxlbnQgdG8gc3RyLnJlcGxhY2UoL2MqJC8sICcnKS5cbiAqIC9jKiQvIGlzIHZ1bG5lcmFibGUgdG8gUkVET1MuXG4gKlxuICogQHBhcmFtIHN0clxuICogQHBhcmFtIGNcbiAqIEBwYXJhbSBpbnZlcnQgUmVtb3ZlIHN1ZmZpeCBvZiBub24tYyBjaGFycyBpbnN0ZWFkLiBEZWZhdWx0IGZhbHNleS5cbiAqL1xuZnVuY3Rpb24gcnRyaW0oc3RyLCBjLCBpbnZlcnQpIHtcbiAgICBjb25zdCBsID0gc3RyLmxlbmd0aDtcbiAgICBpZiAobCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIExlbmd0aCBvZiBzdWZmaXggbWF0Y2hpbmcgdGhlIGludmVydCBjb25kaXRpb24uXG4gICAgbGV0IHN1ZmZMZW4gPSAwO1xuICAgIC8vIFN0ZXAgbGVmdCB1bnRpbCB3ZSBmYWlsIHRvIG1hdGNoIHRoZSBpbnZlcnQgY29uZGl0aW9uLlxuICAgIHdoaWxlIChzdWZmTGVuIDwgbCkge1xuICAgICAgICBjb25zdCBjdXJyQ2hhciA9IHN0ci5jaGFyQXQobCAtIHN1ZmZMZW4gLSAxKTtcbiAgICAgICAgaWYgKGN1cnJDaGFyID09PSBjICYmICFpbnZlcnQpIHtcbiAgICAgICAgICAgIHN1ZmZMZW4rKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyQ2hhciAhPT0gYyAmJiBpbnZlcnQpIHtcbiAgICAgICAgICAgIHN1ZmZMZW4rKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgbCAtIHN1ZmZMZW4pO1xufVxuZnVuY3Rpb24gZmluZENsb3NpbmdCcmFja2V0KHN0ciwgYikge1xuICAgIGlmIChzdHIuaW5kZXhPZihiWzFdKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzdHJbaV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0cltpXSA9PT0gYlswXSkge1xuICAgICAgICAgICAgbGV2ZWwrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHJbaV0gPT09IGJbMV0pIHtcbiAgICAgICAgICAgIGxldmVsLS07XG4gICAgICAgICAgICBpZiAobGV2ZWwgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5rKGNhcCwgbGluaywgcmF3LCBsZXhlcikge1xuICAgIGNvbnN0IGhyZWYgPSBsaW5rLmhyZWY7XG4gICAgY29uc3QgdGl0bGUgPSBsaW5rLnRpdGxlID8gZXNjYXBlJDEobGluay50aXRsZSkgOiBudWxsO1xuICAgIGNvbnN0IHRleHQgPSBjYXBbMV0ucmVwbGFjZSgvXFxcXChbXFxbXFxdXSkvZywgJyQxJyk7XG4gICAgaWYgKGNhcFswXS5jaGFyQXQoMCkgIT09ICchJykge1xuICAgICAgICBsZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICAgICAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB0b2tlbnM6IGxleGVyLmlubGluZVRva2Vucyh0ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV4ZXIuc3RhdGUuaW5MaW5rID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgcmF3LFxuICAgICAgICBocmVmLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdGV4dDogZXNjYXBlJDEodGV4dCksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluZGVudENvZGVDb21wZW5zYXRpb24ocmF3LCB0ZXh0KSB7XG4gICAgY29uc3QgbWF0Y2hJbmRlbnRUb0NvZGUgPSByYXcubWF0Y2goL14oXFxzKykoPzpgYGApLyk7XG4gICAgaWYgKG1hdGNoSW5kZW50VG9Db2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBjb25zdCBpbmRlbnRUb0NvZGUgPSBtYXRjaEluZGVudFRvQ29kZVsxXTtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoSW5kZW50SW5Ob2RlID0gbm9kZS5tYXRjaCgvXlxccysvKTtcbiAgICAgICAgaWYgKG1hdGNoSW5kZW50SW5Ob2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbaW5kZW50SW5Ob2RlXSA9IG1hdGNoSW5kZW50SW5Ob2RlO1xuICAgICAgICBpZiAoaW5kZW50SW5Ob2RlLmxlbmd0aCA+PSBpbmRlbnRUb0NvZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5zbGljZShpbmRlbnRUb0NvZGUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vKipcbiAqIFRva2VuaXplclxuICovXG5jbGFzcyBfVG9rZW5pemVyIHtcbiAgICBvcHRpb25zO1xuICAgIHJ1bGVzOyAvLyBzZXQgYnkgdGhlIGxleGVyXG4gICAgbGV4ZXI7IC8vIHNldCBieSB0aGUgbGV4ZXJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgIH1cbiAgICBzcGFjZShzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCAmJiBjYXBbMF0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3BhY2UnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb2RlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gY2FwWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sICcnKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIGNvZGVCbG9ja1N0eWxlOiAnaW5kZW50ZWQnLFxuICAgICAgICAgICAgICAgIHRleHQ6ICF0aGlzLm9wdGlvbnMucGVkYW50aWNcbiAgICAgICAgICAgICAgICAgICAgPyBydHJpbSh0ZXh0LCAnXFxuJylcbiAgICAgICAgICAgICAgICAgICAgOiB0ZXh0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmZW5jZXMoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgY29uc3QgcmF3ID0gY2FwWzBdO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGluZGVudENvZGVDb21wZW5zYXRpb24ocmF3LCBjYXBbM10gfHwgJycpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgcmF3LFxuICAgICAgICAgICAgICAgIGxhbmc6IGNhcFsyXSA/IGNhcFsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiBjYXBbMl0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGVhZGluZyhzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgbGV0IHRleHQgPSBjYXBbMl0udHJpbSgpO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nICNzXG4gICAgICAgICAgICBpZiAoLyMkLy50ZXN0KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHJ0cmltKHRleHQsICcjJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJpbW1lZC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0cmltbWVkIHx8IC8gJC8udGVzdCh0cmltbWVkKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb21tb25NYXJrIHJlcXVpcmVzIHNwYWNlIGJlZm9yZSB0cmFpbGluZyAjc1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJpbW1lZC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBocihzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5oci5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2hyJyxcbiAgICAgICAgICAgICAgICByYXc6IHJ0cmltKGNhcFswXSwgJ1xcbicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBibG9ja3F1b3RlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBsZXQgbGluZXMgPSBydHJpbShjYXBbMF0sICdcXG4nKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICBsZXQgcmF3ID0gJyc7XG4gICAgICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gW107XG4gICAgICAgICAgICB3aGlsZSAobGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBpbkJsb2NrcXVvdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGluZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgaTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGxpbmVzIHVwIHRvIGEgY29udGludWF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXiB7MCwzfT4vLnRlc3QobGluZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGluZXMucHVzaChsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJsb2NrcXVvdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpbkJsb2NrcXVvdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lcy5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2UoaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJhdyA9IGN1cnJlbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VGV4dCA9IGN1cnJlbnRSYXdcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlY2VkZSBzZXRleHQgY29udGludWF0aW9uIHdpdGggNCBzcGFjZXMgc28gaXQgaXNuJ3QgYSBzZXRleHRcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cXG58JCkvZywgJ1xcbiAgICAkMScpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eIHswLDN9PlsgXFx0XT8vZ20sICcnKTtcbiAgICAgICAgICAgICAgICByYXcgPSByYXcgPyBgJHtyYXd9XFxuJHtjdXJyZW50UmF3fWAgOiBjdXJyZW50UmF3O1xuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0ID8gYCR7dGV4dH1cXG4ke2N1cnJlbnRUZXh0fWAgOiBjdXJyZW50VGV4dDtcbiAgICAgICAgICAgICAgICAvLyBwYXJzZSBibG9ja3F1b3RlIGxpbmVzIGFzIHRvcCBsZXZlbCB0b2tlbnNcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBwYXJhZ3JhcGhzIGlmIHRoaXMgaXMgYSBjb250aW51YXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmxleGVyLnN0YXRlLnRvcDtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5ibG9ja1Rva2VucyhjdXJyZW50VGV4dCwgdG9rZW5zLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRvcDtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250aW51YXRpb24gdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2NvZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrcXVvdGUgY29udGludWF0aW9uIGNhbm5vdCBiZSBwcmVjZWRlZCBieSBhIGNvZGUgYmxvY2tcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrcXVvdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgY29udGludWF0aW9uIGluIG5lc3RlZCBibG9ja3F1b3RlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFRva2VuID0gbGFzdFRva2VuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gb2xkVG9rZW4ucmF3ICsgJ1xcbicgKyBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLmJsb2NrcXVvdGUobmV3VGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPSBuZXdUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgcmF3ID0gcmF3LnN1YnN0cmluZygwLCByYXcubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIG9sZFRva2VuLnRleHQubGVuZ3RoKSArIG5ld1Rva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIGNvbnRpbnVhdGlvbiBpbiBuZXN0ZWQgbGlzdFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRUb2tlbiA9IGxhc3RUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dCA9IG9sZFRva2VuLnJhdyArICdcXG4nICsgbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5saXN0KG5ld1RleHQpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbmV3VG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHJhdyA9IHJhdy5zdWJzdHJpbmcoMCwgcmF3Lmxlbmd0aCAtIGxhc3RUb2tlbi5yYXcubGVuZ3RoKSArIG5ld1Rva2VuLnJhdztcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbmV3VGV4dC5zdWJzdHJpbmcodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5yYXcubGVuZ3RoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGUnLFxuICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGlzdChzcmMpIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGxldCBidWxsID0gY2FwWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIHJhdzogJycsXG4gICAgICAgICAgICAgICAgb3JkZXJlZDogaXNvcmRlcmVkLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBpc29yZGVyZWQgPyArYnVsbC5zbGljZSgwLCAtMSkgOiAnJyxcbiAgICAgICAgICAgICAgICBsb29zZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBgXFxcXGR7MSw5fVxcXFwke2J1bGwuc2xpY2UoLTEpfWAgOiBgXFxcXCR7YnVsbH1gO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBidWxsIDogJ1sqKy1dJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCBuZXh0IGxpc3QgaXRlbVxuICAgICAgICAgICAgY29uc3QgaXRlbVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiggezAsM30ke2J1bGx9KSgoPzpbXFx0IF1bXlxcXFxuXSopPyg/OlxcXFxufCQpKWApO1xuICAgICAgICAgICAgbGV0IGVuZHNXaXRoQmxhbmtMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjdXJyZW50IGJ1bGxldCBwb2ludCBjYW4gc3RhcnQgYSBuZXcgTGlzdCBJdGVtXG4gICAgICAgICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEVhcmx5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHJhdyA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtQ29udGVudHMgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoIShjYXAgPSBpdGVtUmVnZXguZXhlYyhzcmMpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChzcmMpKSB7IC8vIEVuZCBsaXN0IGlmIGJ1bGxldCB3YXMgYWN0dWFsbHkgSFIgKHBvc3NpYmx5IG1vdmUgaW50byBpdGVtUmVnZXg/KVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmF3ID0gY2FwWzBdO1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcocmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXBbMl0uc3BsaXQoJ1xcbicsIDEpWzBdLnJlcGxhY2UoL15cXHQrLywgKHQpID0+ICcgJy5yZXBlYXQoMyAqIHQubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgbGV0IG5leHRMaW5lID0gc3JjLnNwbGl0KCdcXG4nLCAxKVswXTtcbiAgICAgICAgICAgICAgICBsZXQgYmxhbmtMaW5lID0gIWxpbmUudHJpbSgpO1xuICAgICAgICAgICAgICAgIGxldCBpbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS50cmltU3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYmxhbmtMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGNhcFsxXS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gY2FwWzJdLnNlYXJjaCgvW14gXS8pOyAvLyBGaW5kIGZpcnN0IG5vbi1zcGFjZSBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCA+IDQgPyAxIDogaW5kZW50OyAvLyBUcmVhdCBpbmRlbnRlZCBjb2RlIGJsb2NrcyAoPiA0IHNwYWNlcykgYXMgaGF2aW5nIG9ubHkgMSBpbmRlbnRcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS5zbGljZShpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gY2FwWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSAmJiAvXiAqJC8udGVzdChuZXh0TGluZSkpIHsgLy8gSXRlbXMgYmVnaW4gd2l0aCBhdCBtb3N0IG9uZSBibGFuayBsaW5lXG4gICAgICAgICAgICAgICAgICAgIHJhdyArPSBuZXh0TGluZSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKG5leHRMaW5lLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBlbmRFYXJseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZW5kRWFybHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEJ1bGxldFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0oPzpbKistXXxcXFxcZHsxLDl9Wy4pXSkoKD86WyBcXHRdW15cXFxcbl0qKT8oPzpcXFxcbnwkKSlgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJSZWdleCA9IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcXFwqICopezMsfSkoPzpcXFxcbit8JClgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVuY2VzQmVnaW5SZWdleCA9IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KD86XFxgXFxgXFxgfH5+filgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGluZ0JlZ2luUmVnZXggPSBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fSNgKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBMaXN0IEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3TGluZSA9IHNyYy5zcGxpdCgnXFxuJywgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluZSA9IHJhd0xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZS1hbGlnbiB0byBmb2xsb3cgY29tbW9ubWFyayBuZXN0aW5nIHJ1bGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUgPSBuZXh0TGluZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csICcgICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBjb2RlIGZlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlbmNlc0JlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgbmV3IGhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkaW5nQmVnaW5SZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBzdGFydCBvZiBuZXcgYnVsbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJ1bGxldFJlZ2V4LnRlc3QobmV4dExpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIb3Jpem9udGFsIHJ1bGUgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoclJlZ2V4LnRlc3Qoc3JjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMaW5lLnNlYXJjaCgvW14gXS8pID49IGluZGVudCB8fCAhbmV4dExpbmUudHJpbSgpKSB7IC8vIERlZGVudCBpZiBwb3NzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db250ZW50cyArPSAnXFxuJyArIG5leHRMaW5lLnNsaWNlKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZW5vdWdoIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyYWdyYXBoIGNvbnRpbnVhdGlvbiB1bmxlc3MgbGFzdCBsaW5lIHdhcyBhIGRpZmZlcmVudCBibG9jayBsZXZlbCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUuc2VhcmNoKC9bXiBdLykgPj0gNCkgeyAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVuY2VzQmVnaW5SZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGluZ0JlZ2luUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhyUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzICs9ICdcXG4nICsgbmV4dExpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsYW5rTGluZSAmJiAhbmV4dExpbmUudHJpbSgpKSB7IC8vIENoZWNrIGlmIGN1cnJlbnQgbGluZSBpcyBibGFua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rTGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByYXcgKz0gcmF3TGluZSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhyYXdMaW5lLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IG5leHRMaW5lLnNsaWNlKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBpdGVtIGVuZGVkIHdpdGggYSBibGFuayBsaW5lLCB0aGUgbGlzdCBpcyBsb29zZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kc1dpdGhCbGFua0xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QubG9vc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9cXG4gKlxcbiAqJC8udGVzdChyYXcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRzV2l0aEJsYW5rTGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGlzdGFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGlzY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdGFzayBsaXN0IGl0ZW1zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXN0YXNrID0gL15cXFtbIHhYXVxcXSAvLmV4ZWMoaXRlbUNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNjaGVja2VkID0gaXN0YXNrWzBdICE9PSAnWyBdICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29udGVudHMgPSBpdGVtQ29udGVudHMucmVwbGFjZSgvXlxcW1sgeFhdXFxdICsvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbScsXG4gICAgICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICAgICAgdGFzazogISFpc3Rhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGlzY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtQ29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIHRva2VuczogW10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGlzdC5yYXcgKz0gcmF3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRG8gbm90IGNvbnN1bWUgbmV3bGluZXMgYXQgZW5kIG9mIGZpbmFsIGl0ZW0uIEFsdGVybmF0aXZlbHksIG1ha2UgaXRlbVJlZ2V4ICpzdGFydCogd2l0aCBhbnkgbmV3bGluZXMgdG8gc2ltcGxpZnkvc3BlZWQgdXAgZW5kc1dpdGhCbGFua0xpbmUgbG9naWNcbiAgICAgICAgICAgIGxpc3QuaXRlbXNbbGlzdC5pdGVtcy5sZW5ndGggLSAxXS5yYXcgPSBsaXN0Lml0ZW1zW2xpc3QuaXRlbXMubGVuZ3RoIC0gMV0ucmF3LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIGxpc3QuaXRlbXNbbGlzdC5pdGVtcy5sZW5ndGggLSAxXS50ZXh0ID0gbGlzdC5pdGVtc1tsaXN0Lml0ZW1zLmxlbmd0aCAtIDFdLnRleHQudHJpbUVuZCgpO1xuICAgICAgICAgICAgbGlzdC5yYXcgPSBsaXN0LnJhdy50cmltRW5kKCk7XG4gICAgICAgICAgICAvLyBJdGVtIGNoaWxkIHRva2VucyBoYW5kbGVkIGhlcmUgYXQgZW5kIGJlY2F1c2Ugd2UgbmVlZGVkIHRvIGhhdmUgdGhlIGZpbmFsIGl0ZW0gdG8gdHJpbSBpdCBmaXJzdFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS50b3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaXN0Lml0ZW1zW2ldLnRva2VucyA9IHRoaXMubGV4ZXIuYmxvY2tUb2tlbnMobGlzdC5pdGVtc1tpXS50ZXh0LCBbXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGxpc3Qgc2hvdWxkIGJlIGxvb3NlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYWNlcnMgPSBsaXN0Lml0ZW1zW2ldLnRva2Vucy5maWx0ZXIodCA9PiB0LnR5cGUgPT09ICdzcGFjZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUxpbmVCcmVha3MgPSBzcGFjZXJzLmxlbmd0aCA+IDAgJiYgc3BhY2Vycy5zb21lKHQgPT4gL1xcbi4qXFxuLy50ZXN0KHQucmF3KSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3QubG9vc2UgPSBoYXNNdWx0aXBsZUxpbmVCcmVha3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGFsbCBpdGVtcyB0byBsb29zZSBpZiBsaXN0IGlzIGxvb3NlXG4gICAgICAgICAgICBpZiAobGlzdC5sb29zZSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsaXN0Lml0ZW1zW2ldLmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBodG1sKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgYmxvY2s6IHRydWUsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgcHJlOiBjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIHRleHQ6IGNhcFswXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVmKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IGNhcFsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBjYXBbMl0gPyBjYXBbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCAnJDEnKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6IGNhcFszXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RlZicsXG4gICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhYmxlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKCFjYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIS9bOnxdLy50ZXN0KGNhcFsyXSkpIHtcbiAgICAgICAgICAgIC8vIGRlbGltaXRlciByb3cgbXVzdCBoYXZlIGEgcGlwZSAofCkgb3IgY29sb24gKDopIG90aGVyd2lzZSBpdCBpcyBhIHNldGV4dCBoZWFkaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHNwbGl0Q2VsbHMoY2FwWzFdKTtcbiAgICAgICAgY29uc3QgYWxpZ25zID0gY2FwWzJdLnJlcGxhY2UoL15cXHx8XFx8ICokL2csICcnKS5zcGxpdCgnfCcpO1xuICAgICAgICBjb25zdCByb3dzID0gY2FwWzNdICYmIGNhcFszXS50cmltKCkgPyBjYXBbM10ucmVwbGFjZSgvXFxuWyBcXHRdKiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW107XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICBoZWFkZXI6IFtdLFxuICAgICAgICAgICAgYWxpZ246IFtdLFxuICAgICAgICAgICAgcm93czogW10sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAhPT0gYWxpZ25zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gaGVhZGVyIGFuZCBhbGlnbiBjb2x1bW5zIG11c3QgYmUgZXF1YWwsIHJvd3MgY2FuIGJlIGRpZmZlcmVudC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGFsaWduIG9mIGFsaWducykge1xuICAgICAgICAgICAgaWYgKC9eICotKzogKiQvLnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdjZW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKC9eICo6LSsgKiQvLnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLmFsaWduLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtLmhlYWRlci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBoZWFkZXJzW2ldLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoaGVhZGVyc1tpXSksXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsaWduOiBpdGVtLmFsaWduW2ldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICAgICAgaXRlbS5yb3dzLnB1c2goc3BsaXRDZWxscyhyb3csIGl0ZW0uaGVhZGVyLmxlbmd0aCkubWFwKChjZWxsLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZShjZWxsKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ246IGl0ZW0uYWxpZ25baV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgbGhlYWRpbmcoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICBkZXB0aDogY2FwWzJdLmNoYXJBdCgwKSA9PT0gJz0nID8gMSA6IDIsXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzFdLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoY2FwWzFdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYWdyYXBoKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgICA6IGNhcFsxXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXh0KHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZShjYXBbMF0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlc2NhcGUoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2VzY2FwZScsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dDogZXNjYXBlJDEoY2FwWzFdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGFnKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rICYmIC9ePGEgL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgJiYgL148XFwvYT4vaS50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLmluTGluayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgJiYgL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxcc3w+KS9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgJiYgL148XFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxcc3w+KS9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgaW5MaW5rOiB0aGlzLmxleGVyLnN0YXRlLmluTGluayxcbiAgICAgICAgICAgICAgICBpblJhd0Jsb2NrOiB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssXG4gICAgICAgICAgICAgICAgYmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRleHQ6IGNhcFswXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGluayhzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRVcmwgPSBjYXBbMl0udHJpbSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucGVkYW50aWMgJiYgL148Ly50ZXN0KHRyaW1tZWRVcmwpKSB7XG4gICAgICAgICAgICAgICAgLy8gY29tbW9ubWFyayByZXF1aXJlcyBtYXRjaGluZyBhbmdsZSBicmFja2V0c1xuICAgICAgICAgICAgICAgIGlmICghKC8+JC8udGVzdCh0cmltbWVkVXJsKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbmRpbmcgYW5nbGUgYnJhY2tldCBjYW5ub3QgYmUgZXNjYXBlZFxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0cmltU2xhc2ggPSBydHJpbSh0cmltbWVkVXJsLnNsaWNlKDAsIC0xKSwgJ1xcXFwnKTtcbiAgICAgICAgICAgICAgICBpZiAoKHRyaW1tZWRVcmwubGVuZ3RoIC0gcnRyaW1TbGFzaC5sZW5ndGgpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFBhcmVuSW5kZXggPSBmaW5kQ2xvc2luZ0JyYWNrZXQoY2FwWzJdLCAnKCknKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhcmVuSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGNhcFswXS5pbmRleE9mKCchJykgPT09IDAgPyA1IDogNDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua0xlbiA9IHN0YXJ0ICsgY2FwWzFdLmxlbmd0aCArIGxhc3RQYXJlbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjYXBbMl0gPSBjYXBbMl0uc3Vic3RyaW5nKDAsIGxhc3RQYXJlbkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY2FwWzBdID0gY2FwWzBdLnN1YnN0cmluZygwLCBsaW5rTGVuKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcFszXSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBocmVmID0gY2FwWzJdO1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgcGVkYW50aWMgaHJlZiBhbmQgdGl0bGVcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gL14oW14nXCJdKlteXFxzXSlcXHMrKFsnXCJdKSguKilcXDIvLmV4ZWMoaHJlZik7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGxpbmtbMV07XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gbGlua1szXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGNhcFszXSA/IGNhcFszXS5zbGljZSgxLCAtMSkgOiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhyZWYgPSBocmVmLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgvXjwvLnRlc3QoaHJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljICYmICEoLz4kLy50ZXN0KHRyaW1tZWRVcmwpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBwZWRhbnRpYyBhbGxvd3Mgc3RhcnRpbmcgYW5nbGUgYnJhY2tldCB3aXRob3V0IGVuZGluZyBhbmdsZSBicmFja2V0XG4gICAgICAgICAgICAgICAgICAgIGhyZWYgPSBocmVmLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRMaW5rKGNhcCwge1xuICAgICAgICAgICAgICAgIGhyZWY6IGhyZWYgPyBocmVmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogaHJlZixcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgPyB0aXRsZS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6IHRpdGxlLFxuICAgICAgICAgICAgfSwgY2FwWzBdLCB0aGlzLmxleGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWZsaW5rKHNyYywgbGlua3MpIHtcbiAgICAgICAgbGV0IGNhcDtcbiAgICAgICAgaWYgKChjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMoc3JjKSlcbiAgICAgICAgICAgIHx8IChjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhzcmMpKSkge1xuICAgICAgICAgICAgY29uc3QgbGlua1N0cmluZyA9IChjYXBbMl0gfHwgY2FwWzFdKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gbGlua3NbbGlua1N0cmluZy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjYXBbMF0uY2hhckF0KDApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0TGluayhjYXAsIGxpbmssIGNhcFswXSwgdGhpcy5sZXhlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1TdHJvbmcoc3JjLCBtYXNrZWRTcmMsIHByZXZDaGFyID0gJycpIHtcbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhzcmMpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBfIGNhbid0IGJlIGJldHdlZW4gdHdvIGFscGhhbnVtZXJpY3MuIFxccHtMfVxccHtOfSBpbmNsdWRlcyBub24tZW5nbGlzaCBhbHBoYWJldC9udW1iZXJzIGFzIHdlbGxcbiAgICAgICAgaWYgKG1hdGNoWzNdICYmIHByZXZDaGFyLm1hdGNoKC9bXFxwe0x9XFxwe059XS91KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSBtYXRjaFsxXSB8fCBtYXRjaFsyXSB8fCAnJztcbiAgICAgICAgaWYgKCFuZXh0Q2hhciB8fCAhcHJldkNoYXIgfHwgdGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgIC8vIHVuaWNvZGUgUmVnZXggY291bnRzIGVtb2ppIGFzIDEgY2hhcjsgc3ByZWFkIGludG8gYXJyYXkgZm9yIHByb3BlciBjb3VudCAodXNlZCBtdWx0aXBsZSB0aW1lcyBiZWxvdylcbiAgICAgICAgICAgIGNvbnN0IGxMZW5ndGggPSBbLi4ubWF0Y2hbMF1dLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBsZXQgckRlbGltLCByTGVuZ3RoLCBkZWxpbVRvdGFsID0gbExlbmd0aCwgbWlkRGVsaW1Ub3RhbCA9IDA7XG4gICAgICAgICAgICBjb25zdCBlbmRSZWcgPSBtYXRjaFswXVswXSA9PT0gJyonID8gdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3QgOiB0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ1JEZWxpbVVuZDtcbiAgICAgICAgICAgIGVuZFJlZy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgLy8gQ2xpcCBtYXNrZWRTcmMgdG8gc2FtZSBzZWN0aW9uIG9mIHN0cmluZyBhcyBzcmMgKG1vdmUgdG8gbGV4ZXI/KVxuICAgICAgICAgICAgbWFza2VkU3JjID0gbWFza2VkU3JjLnNsaWNlKC0xICogc3JjLmxlbmd0aCArIGxMZW5ndGgpO1xuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IGVuZFJlZy5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByRGVsaW0gPSBtYXRjaFsxXSB8fCBtYXRjaFsyXSB8fCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBtYXRjaFs2XTtcbiAgICAgICAgICAgICAgICBpZiAoIXJEZWxpbSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgc2luZ2xlICogaW4gX19hYmMqYWJjX19cbiAgICAgICAgICAgICAgICByTGVuZ3RoID0gWy4uLnJEZWxpbV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaFszXSB8fCBtYXRjaFs0XSkgeyAvLyBmb3VuZCBhbm90aGVyIExlZnQgRGVsaW1cbiAgICAgICAgICAgICAgICAgICAgZGVsaW1Ub3RhbCArPSByTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbNV0gfHwgbWF0Y2hbNl0pIHsgLy8gZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxMZW5ndGggJSAzICYmICEoKGxMZW5ndGggKyByTGVuZ3RoKSAlIDMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaWREZWxpbVRvdGFsICs9IHJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gQ29tbW9uTWFyayBFbXBoYXNpcyBSdWxlcyA5LTEwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsaW1Ub3RhbCAtPSByTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChkZWxpbVRvdGFsID4gMClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIEhhdmVuJ3QgZm91bmQgZW5vdWdoIGNsb3NpbmcgZGVsaW1pdGVyc1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBleHRyYSBjaGFyYWN0ZXJzLiAqYSoqKiAtPiAqYSpcbiAgICAgICAgICAgICAgICByTGVuZ3RoID0gTWF0aC5taW4ockxlbmd0aCwgckxlbmd0aCArIGRlbGltVG90YWwgKyBtaWREZWxpbVRvdGFsKTtcbiAgICAgICAgICAgICAgICAvLyBjaGFyIGxlbmd0aCBjYW4gYmUgPjEgZm9yIHVuaWNvZGUgY2hhcmFjdGVycztcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hhckxlbmd0aCA9IFsuLi5tYXRjaFswXV1bMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IHNyYy5zbGljZSgwLCBsTGVuZ3RoICsgbWF0Y2guaW5kZXggKyBsYXN0Q2hhckxlbmd0aCArIHJMZW5ndGgpO1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBgZW1gIGlmIHNtYWxsZXN0IGRlbGltaXRlciBoYXMgb2RkIGNoYXIgY291bnQuICphKioqXG4gICAgICAgICAgICAgICAgaWYgKE1hdGgubWluKGxMZW5ndGgsIHJMZW5ndGgpICUgMikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZVRva2Vucyh0ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlICdzdHJvbmcnIGlmIHNtYWxsZXN0IGRlbGltaXRlciBoYXMgZXZlbiBjaGFyIGNvdW50LiAqKmEqKipcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKDIsIC0yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3Ryb25nJyxcbiAgICAgICAgICAgICAgICAgICAgcmF3LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29kZXNwYW4oc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dCA9IGNhcFsyXS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc05vblNwYWNlQ2hhcnMgPSAvW14gXS8udGVzdCh0ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzID0gL14gLy50ZXN0KHRleHQpICYmIC8gJC8udGVzdCh0ZXh0KTtcbiAgICAgICAgICAgIGlmIChoYXNOb25TcGFjZUNoYXJzICYmIGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ID0gZXNjYXBlJDEodGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjb2Rlc3BhbicsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnIoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYnInLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWwoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RlbCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzJdLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoY2FwWzJdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXV0b2xpbmsoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgbGV0IHRleHQsIGhyZWY7XG4gICAgICAgICAgICBpZiAoY2FwWzJdID09PSAnQCcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gZXNjYXBlJDEoY2FwWzFdKTtcbiAgICAgICAgICAgICAgICBocmVmID0gJ21haWx0bzonICsgdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRleHQgPSBlc2NhcGUkMShjYXBbMV0pO1xuICAgICAgICAgICAgICAgIGhyZWYgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICAgIHRva2VuczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHVybChzcmMpIHtcbiAgICAgICAgbGV0IGNhcDtcbiAgICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKHNyYykpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0LCBocmVmO1xuICAgICAgICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGVzY2FwZSQxKGNhcFswXSk7XG4gICAgICAgICAgICAgICAgaHJlZiA9ICdtYWlsdG86JyArIHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBleHRlbmRlZCBhdXRvbGluayBwYXRoIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBsZXQgcHJldkNhcFplcm87XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2FwWmVybyA9IGNhcFswXTtcbiAgICAgICAgICAgICAgICAgICAgY2FwWzBdID0gdGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGNhcFswXSk/LlswXSA/PyAnJztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2Q2FwWmVybyAhPT0gY2FwWzBdKTtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gZXNjYXBlJDEoY2FwWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FwWzFdID09PSAnd3d3LicpIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9ICdodHRwOi8vJyArIGNhcFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhyZWYgPSBjYXBbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICAgIHRva2VuczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlubGluZVRleHQoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2spIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2FwWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGVzY2FwZSQxKGNhcFswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBCbG9jay1MZXZlbCBHcmFtbWFyXG4gKi9cbmNvbnN0IG5ld2xpbmUgPSAvXig/OiAqKD86XFxufCQpKSsvO1xuY29uc3QgYmxvY2tDb2RlID0gL14oIHs0fVteXFxuXSsoPzpcXG4oPzogKig/OlxcbnwkKSkqKT8pKy87XG5jb25zdCBmZW5jZXMgPSAvXiB7MCwzfShgezMsfSg/PVteYFxcbl0qKD86XFxufCQpKXx+ezMsfSkoW15cXG5dKikoPzpcXG58JCkoPzp8KFtcXHNcXFNdKj8pKD86XFxufCQpKSg/OiB7MCwzfVxcMVt+YF0qICooPz1cXG58JCl8JCkvO1xuY29uc3QgaHIgPSAvXiB7MCwzfSgoPzotW1xcdCBdKil7Myx9fCg/Ol9bIFxcdF0qKXszLH18KD86XFwqWyBcXHRdKil7Myx9KSg/Olxcbit8JCkvO1xuY29uc3QgaGVhZGluZyA9IC9eIHswLDN9KCN7MSw2fSkoPz1cXHN8JCkoLiopKD86XFxuK3wkKS87XG5jb25zdCBidWxsZXQgPSAvKD86WyorLV18XFxkezEsOX1bLildKS87XG5jb25zdCBsaGVhZGluZyA9IGVkaXQoL14oPyFidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sKSgoPzoufFxcbig/IVxccyo/XFxufGJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWwpKSs/KVxcbiB7MCwzfSg9K3wtKykgKig/Olxcbit8JCkvKVxuICAgIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldCkgLy8gbGlzdHMgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKC9ibG9ja0NvZGUvZywgLyB7NH0vKSAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoL2ZlbmNlcy9nLCAvIHswLDN9KD86YHszLH18fnszLH0pLykgLy8gZmVuY2VkIGNvZGUgYmxvY2tzIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgvYmxvY2txdW90ZS9nLCAvIHswLDN9Pi8pIC8vIGJsb2NrcXVvdGUgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKC9oZWFkaW5nL2csIC8gezAsM30jezEsNn0vKSAvLyBBVFggaGVhZGluZyBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoL2h0bWwvZywgLyB7MCwzfTxbXlxcbj5dKz5cXG4vKSAvLyBibG9jayBodG1sIGNhbiBpbnRlcnJ1cHRcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF9wYXJhZ3JhcGggPSAvXihbXlxcbl0rKD86XFxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcXG4pW15cXG5dKykqKS87XG5jb25zdCBibG9ja1RleHQgPSAvXlteXFxuXSsvO1xuY29uc3QgX2Jsb2NrTGFiZWwgPSAvKD8hXFxzKlxcXSkoPzpcXFxcLnxbXlxcW1xcXVxcXFxdKSsvO1xuY29uc3QgZGVmID0gZWRpdCgvXiB7MCwzfVxcWyhsYWJlbClcXF06ICooPzpcXG4gKik/KFtePFxcc11bXlxcc10qfDwuKj8+KSg/Oig/OiArKD86XFxuICopP3wgKlxcbiAqKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgX2Jsb2NrTGFiZWwpXG4gICAgLnJlcGxhY2UoJ3RpdGxlJywgLyg/OlwiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCdbXidcXG5dKig/OlxcblteJ1xcbl0rKSpcXG4/J3xcXChbXigpXSpcXCkpLylcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGxpc3QgPSBlZGl0KC9eKCB7MCwzfWJ1bGwpKFsgXFx0XVteXFxuXSs/KT8oPzpcXG58JCkvKVxuICAgIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldClcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF90YWcgPSAnYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb24nXG4gICAgKyAnfGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9uJ1xuICAgICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICAgICsgJ3xsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9uJ1xuICAgICsgJ3xwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGUnXG4gICAgKyAnfHRyfHRyYWNrfHVsJztcbmNvbnN0IF9jb21tZW50ID0gLzwhLS0oPzotPz58W1xcc1xcU10qPyg/Oi0tPnwkKSkvO1xuY29uc3QgaHRtbCA9IGVkaXQoJ14gezAsM30oPzonIC8vIG9wdGlvbmFsIGluZGVudGF0aW9uXG4gICAgKyAnPChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4gICAgKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbiAgICArICd8PFxcXFw/W1xcXFxzXFxcXFNdKj8oPzpcXFxcPz5cXFxcbip8JCknIC8vICgzKVxuICAgICsgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8oPzo+XFxcXG4qfCQpJyAvLyAoNClcbiAgICArICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qPyg/OlxcXFxdXFxcXF0+XFxcXG4qfCQpJyAvLyAoNSlcbiAgICArICd8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcbiAqKStcXFxcbnwkKScgLy8gKDYpXG4gICAgKyAnfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXFxcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFxcXHRdKig/OlxcXFxufCQpKVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG4gKikrXFxcXG58JCknIC8vICg3KSBvcGVuIHRhZ1xuICAgICsgJ3w8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFxcXHctXSpcXFxccyo+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcbiAqKStcXFxcbnwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4gICAgKyAnKScsICdpJylcbiAgICAucmVwbGFjZSgnY29tbWVudCcsIF9jb21tZW50KVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKVxuICAgIC5yZXBsYWNlKCdhdHRyaWJ1dGUnLCAvICtbYS16QS1aOl9dW1xcdy46LV0qKD86ICo9ICpcIlteXCJcXG5dKlwifCAqPSAqJ1teJ1xcbl0qJ3wgKj0gKlteXFxzXCInPTw+YF0rKT8vKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgcGFyYWdyYXBoID0gZWRpdChfcGFyYWdyYXBoKVxuICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgIC5yZXBsYWNlKCdoZWFkaW5nJywgJyB7MCwzfSN7MSw2fSg/OlxcXFxzfCQpJylcbiAgICAucmVwbGFjZSgnfGxoZWFkaW5nJywgJycpIC8vIHNldGV4dCBoZWFkaW5ncyBkb24ndCBpbnRlcnJ1cHQgY29tbW9ubWFyayBwYXJhZ3JhcGhzXG4gICAgLnJlcGxhY2UoJ3x0YWJsZScsICcnKVxuICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSkgJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKSAvLyBwYXJzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgYmxvY2txdW90ZSA9IGVkaXQoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxcbl0qKSg/OlxcbnwkKSkrLylcbiAgICAucmVwbGFjZSgncGFyYWdyYXBoJywgcGFyYWdyYXBoKVxuICAgIC5nZXRSZWdleCgpO1xuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5jb25zdCBibG9ja05vcm1hbCA9IHtcbiAgICBibG9ja3F1b3RlLFxuICAgIGNvZGU6IGJsb2NrQ29kZSxcbiAgICBkZWYsXG4gICAgZmVuY2VzLFxuICAgIGhlYWRpbmcsXG4gICAgaHIsXG4gICAgaHRtbCxcbiAgICBsaGVhZGluZyxcbiAgICBsaXN0LFxuICAgIG5ld2xpbmUsXG4gICAgcGFyYWdyYXBoLFxuICAgIHRhYmxlOiBub29wVGVzdCxcbiAgICB0ZXh0OiBibG9ja1RleHQsXG59O1xuLyoqXG4gKiBHRk0gQmxvY2sgR3JhbW1hclxuICovXG5jb25zdCBnZm1UYWJsZSA9IGVkaXQoJ14gKihbXlxcXFxuIF0uKilcXFxcbicgLy8gSGVhZGVyXG4gICAgKyAnIHswLDN9KCg/OlxcXFx8ICopPzo/LSs6PyAqKD86XFxcXHwgKjo/LSs6PyAqKSooPzpcXFxcfCAqKT8pJyAvLyBBbGlnblxuICAgICsgJyg/OlxcXFxuKCg/Oig/ISAqXFxcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcXFxufCQpKSopXFxcXG4qfCQpJykgLy8gQ2VsbHNcbiAgICAucmVwbGFjZSgnaHInLCBocilcbiAgICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0oPzpcXFxcc3wkKScpXG4gICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgLnJlcGxhY2UoJ2NvZGUnLCAnIHs0fVteXFxcXG5dJylcbiAgICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gICAgLnJlcGxhY2UoJ2xpc3QnLCAnIHswLDN9KD86WyorLV18MVsuKV0pICcpIC8vIG9ubHkgbGlzdHMgc3RhcnRpbmcgZnJvbSAxIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgnaHRtbCcsICc8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pJylcbiAgICAucmVwbGFjZSgndGFnJywgX3RhZykgLy8gdGFibGVzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgYmxvY2tHZm0gPSB7XG4gICAgLi4uYmxvY2tOb3JtYWwsXG4gICAgdGFibGU6IGdmbVRhYmxlLFxuICAgIHBhcmFncmFwaDogZWRpdChfcGFyYWdyYXBoKVxuICAgICAgICAucmVwbGFjZSgnaHInLCBocilcbiAgICAgICAgLnJlcGxhY2UoJ2hlYWRpbmcnLCAnIHswLDN9I3sxLDZ9KD86XFxcXHN8JCknKVxuICAgICAgICAucmVwbGFjZSgnfGxoZWFkaW5nJywgJycpIC8vIHNldGV4dCBoZWFkaW5ncyBkb24ndCBpbnRlcnJ1cHQgY29tbW9ubWFyayBwYXJhZ3JhcGhzXG4gICAgICAgIC5yZXBsYWNlKCd0YWJsZScsIGdmbVRhYmxlKSAvLyBpbnRlcnJ1cHQgcGFyYWdyYXBocyB3aXRoIHRhYmxlXG4gICAgICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgICAgICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKCdsaXN0JywgJyB7MCwzfSg/OlsqKy1dfDFbLildKSAnKSAvLyBvbmx5IGxpc3RzIHN0YXJ0aW5nIGZyb20gMSBjYW4gaW50ZXJydXB0XG4gICAgICAgIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAgICAgICAucmVwbGFjZSgndGFnJywgX3RhZykgLy8gcGFycyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgdHlwZSAoNikgaHRtbCBibG9ja3NcbiAgICAgICAgLmdldFJlZ2V4KCksXG59O1xuLyoqXG4gKiBQZWRhbnRpYyBncmFtbWFyIChvcmlnaW5hbCBKb2huIEdydWJlcidzIGxvb3NlIG1hcmtkb3duIHNwZWNpZmljYXRpb24pXG4gKi9cbmNvbnN0IGJsb2NrUGVkYW50aWMgPSB7XG4gICAgLi4uYmxvY2tOb3JtYWwsXG4gICAgaHRtbDogZWRpdCgnXiAqKD86Y29tbWVudCAqKD86XFxcXG58XFxcXHMqJCknXG4gICAgICAgICsgJ3w8KHRhZylbXFxcXHNcXFxcU10rPzwvXFxcXDE+ICooPzpcXFxcbnsyLH18XFxcXHMqJCknIC8vIGNsb3NlZCB0YWdcbiAgICAgICAgKyAnfDx0YWcoPzpcIlteXCJdKlwifFxcJ1teXFwnXSpcXCd8XFxcXHNbXlxcJ1wiLz5cXFxcc10qKSo/Lz8+ICooPzpcXFxcbnsyLH18XFxcXHMqJCkpJylcbiAgICAgICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBfY29tbWVudClcbiAgICAgICAgLnJlcGxhY2UoL3RhZy9nLCAnKD8hKD86J1xuICAgICAgICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3ViJ1xuICAgICAgICArICd8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKSdcbiAgICAgICAgKyAnXFxcXGIpXFxcXHcrKD8hOnxbXlxcXFx3XFxcXHNAXSpAKVxcXFxiJylcbiAgICAgICAgLmdldFJlZ2V4KCksXG4gICAgZGVmOiAvXiAqXFxbKFteXFxdXSspXFxdOiAqPD8oW15cXHM+XSspPj8oPzogKyhbXCIoXVteXFxuXStbXCIpXSkpPyAqKD86XFxuK3wkKS8sXG4gICAgaGVhZGluZzogL14oI3sxLDZ9KSguKikoPzpcXG4rfCQpLyxcbiAgICBmZW5jZXM6IG5vb3BUZXN0LCAvLyBmZW5jZXMgbm90IHN1cHBvcnRlZFxuICAgIGxoZWFkaW5nOiAvXiguKz8pXFxuIHswLDN9KD0rfC0rKSAqKD86XFxuK3wkKS8sXG4gICAgcGFyYWdyYXBoOiBlZGl0KF9wYXJhZ3JhcGgpXG4gICAgICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgICAgICAucmVwbGFjZSgnaGVhZGluZycsICcgKiN7MSw2fSAqW15cXG5dJylcbiAgICAgICAgLnJlcGxhY2UoJ2xoZWFkaW5nJywgbGhlYWRpbmcpXG4gICAgICAgIC5yZXBsYWNlKCd8dGFibGUnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgICAgIC5yZXBsYWNlKCd8ZmVuY2VzJywgJycpXG4gICAgICAgIC5yZXBsYWNlKCd8bGlzdCcsICcnKVxuICAgICAgICAucmVwbGFjZSgnfGh0bWwnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ3x0YWcnLCAnJylcbiAgICAgICAgLmdldFJlZ2V4KCksXG59O1xuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5jb25zdCBlc2NhcGUgPSAvXlxcXFwoWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BcXFtcXF1cXFxcXl9ge3x9fl0pLztcbmNvbnN0IGlubGluZUNvZGUgPSAvXihgKykoW15gXXxbXmBdW1xcc1xcU10qP1teYF0pXFwxKD8hYCkvO1xuY29uc3QgYnIgPSAvXiggezIsfXxcXFxcKVxcbig/IVxccyokKS87XG5jb25zdCBpbmxpbmVUZXh0ID0gL14oYCt8W15gXSkoPzooPz0gezIsfVxcbil8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKl9dfFxcYl98JCl8W14gXSg/PSB7Mix9XFxuKSkpLztcbi8vIGxpc3Qgb2YgdW5pY29kZSBwdW5jdHVhdGlvbiBtYXJrcywgcGx1cyBhbnkgbWlzc2luZyBjaGFyYWN0ZXJzIGZyb20gQ29tbW9uTWFyayBzcGVjXG5jb25zdCBfcHVuY3R1YXRpb24gPSAnXFxcXHB7UH1cXFxccHtTfSc7XG5jb25zdCBwdW5jdHVhdGlvbiA9IGVkaXQoL14oKD8hWypfXSlbXFxzcHVuY3R1YXRpb25dKS8sICd1JylcbiAgICAucmVwbGFjZSgvcHVuY3R1YXRpb24vZywgX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1xuLy8gc2VxdWVuY2VzIGVtIHNob3VsZCBza2lwIG92ZXIgW3RpdGxlXShsaW5rKSwgYGNvZGVgLCA8aHRtbD5cbmNvbnN0IGJsb2NrU2tpcCA9IC9cXFtbXltcXF1dKj9cXF1cXChbXlxcKFxcKV0qP1xcKXxgW15gXSo/YHw8W148Pl0qPz4vZztcbmNvbnN0IGVtU3Ryb25nTERlbGltID0gZWRpdCgvXig/OlxcKisoPzooKD8hXFwqKVtwdW5jdF0pfFteXFxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cXHNfXSkpLywgJ3UnKVxuICAgIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBlbVN0cm9uZ1JEZWxpbUFzdCA9IGVkaXQoJ15bXl8qXSo/X19bXl8qXSo/XFxcXCpbXl8qXSo/KD89X18pJyAvLyBTa2lwIG9ycGhhbiBpbnNpZGUgc3Ryb25nXG4gICAgKyAnfFteKl0rKD89W14qXSknIC8vIENvbnN1bWUgdG8gZGVsaW1cbiAgICArICd8KD8hXFxcXCopW3B1bmN0XShcXFxcKispKD89W1xcXFxzXXwkKScgLy8gKDEpICMqKiogY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8W15wdW5jdFxcXFxzXShcXFxcKispKD8hXFxcXCopKD89W3B1bmN0XFxcXHNdfCQpJyAvLyAoMikgYSoqKiMsIGEqKiogY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8KD8hXFxcXCopW3B1bmN0XFxcXHNdKFxcXFwqKykoPz1bXnB1bmN0XFxcXHNdKScgLy8gKDMpICMqKiphLCAqKiphIGNhbiBvbmx5IGJlIExlZnQgRGVsaW1pdGVyXG4gICAgKyAnfFtcXFxcc10oXFxcXCorKSg/IVxcXFwqKSg/PVtwdW5jdF0pJyAvLyAoNCkgKioqIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3woPyFcXFxcKilbcHVuY3RdKFxcXFwqKykoPyFcXFxcKikoPz1bcHVuY3RdKScgLy8gKDUpICMqKiojIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8W15wdW5jdFxcXFxzXShcXFxcKispKD89W15wdW5jdFxcXFxzXSknLCAnZ3UnKSAvLyAoNikgYSoqKmEgY2FuIGJlIGVpdGhlciBMZWZ0IG9yIFJpZ2h0IERlbGltaXRlclxuICAgIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gICAgLmdldFJlZ2V4KCk7XG4vLyAoNikgTm90IGFsbG93ZWQgZm9yIF9cbmNvbnN0IGVtU3Ryb25nUkRlbGltVW5kID0gZWRpdCgnXlteXypdKj9cXFxcKlxcXFwqW15fKl0qP19bXl8qXSo/KD89XFxcXCpcXFxcKiknIC8vIFNraXAgb3JwaGFuIGluc2lkZSBzdHJvbmdcbiAgICArICd8W15fXSsoPz1bXl9dKScgLy8gQ29uc3VtZSB0byBkZWxpbVxuICAgICsgJ3woPyFfKVtwdW5jdF0oXyspKD89W1xcXFxzXXwkKScgLy8gKDEpICNfX18gY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8W15wdW5jdFxcXFxzXShfKykoPyFfKSg/PVtwdW5jdFxcXFxzXXwkKScgLy8gKDIpIGFfX18jLCBhX19fIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4gICAgKyAnfCg/IV8pW3B1bmN0XFxcXHNdKF8rKSg/PVtecHVuY3RcXFxcc10pJyAvLyAoMykgI19fX2EsIF9fX2EgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbiAgICArICd8W1xcXFxzXShfKykoPyFfKSg/PVtwdW5jdF0pJyAvLyAoNCkgX19fIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3woPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKScsICdndScpIC8vICg1KSAjX19fIyBjYW4gYmUgZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1pdGVyXG4gICAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGFueVB1bmN0dWF0aW9uID0gZWRpdCgvXFxcXChbcHVuY3RdKS8sICdndScpXG4gICAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGF1dG9saW5rID0gZWRpdCgvXjwoc2NoZW1lOlteXFxzXFx4MDAtXFx4MWY8Pl0qfGVtYWlsKT4vKVxuICAgIC5yZXBsYWNlKCdzY2hlbWUnLCAvW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8pXG4gICAgLnJlcGxhY2UoJ2VtYWlsJywgL1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBfaW5saW5lQ29tbWVudCA9IGVkaXQoX2NvbW1lbnQpLnJlcGxhY2UoJyg/Oi0tPnwkKScsICctLT4nKS5nZXRSZWdleCgpO1xuY29uc3QgdGFnID0gZWRpdCgnXmNvbW1lbnQnXG4gICAgKyAnfF48L1thLXpBLVpdW1xcXFx3Oi1dKlxcXFxzKj4nIC8vIHNlbGYtY2xvc2luZyB0YWdcbiAgICArICd8XjxbYS16QS1aXVtcXFxcdy1dKig/OmF0dHJpYnV0ZSkqP1xcXFxzKi8/PicgLy8gb3BlbiB0YWdcbiAgICArICd8XjxcXFxcP1tcXFxcc1xcXFxTXSo/XFxcXD8+JyAvLyBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCBlLmcuIDw/cGhwID8+XG4gICAgKyAnfF48IVthLXpBLVpdK1xcXFxzW1xcXFxzXFxcXFNdKj8+JyAvLyBkZWNsYXJhdGlvbiwgZS5nLiA8IURPQ1RZUEUgaHRtbD5cbiAgICArICd8XjwhXFxcXFtDREFUQVxcXFxbW1xcXFxzXFxcXFNdKj9cXFxcXVxcXFxdPicpIC8vIENEQVRBIHNlY3Rpb25cbiAgICAucmVwbGFjZSgnY29tbWVudCcsIF9pbmxpbmVDb21tZW50KVxuICAgIC5yZXBsYWNlKCdhdHRyaWJ1dGUnLCAvXFxzK1thLXpBLVo6X11bXFx3LjotXSooPzpcXHMqPVxccypcIlteXCJdKlwifFxccyo9XFxzKidbXiddKid8XFxzKj1cXHMqW15cXHNcIic9PD5gXSspPy8pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBfaW5saW5lTGFiZWwgPSAvKD86XFxbKD86XFxcXC58W15cXFtcXF1cXFxcXSkqXFxdfFxcXFwufGBbXmBdKmB8W15cXFtcXF1cXFxcYF0pKj8vO1xuY29uc3QgbGluayA9IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXChcXHMqKGhyZWYpKD86XFxzKyh0aXRsZSkpP1xccypcXCkvKVxuICAgIC5yZXBsYWNlKCdsYWJlbCcsIF9pbmxpbmVMYWJlbClcbiAgICAucmVwbGFjZSgnaHJlZicsIC88KD86XFxcXC58W15cXG48PlxcXFxdKSs+fFteXFxzXFx4MDAtXFx4MWZdKi8pXG4gICAgLnJlcGxhY2UoJ3RpdGxlJywgL1wiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCcoPzpcXFxcJz98W14nXFxcXF0pKid8XFwoKD86XFxcXFxcKT98W14pXFxcXF0pKlxcKS8pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCByZWZsaW5rID0gZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcWyhyZWYpXFxdLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgLnJlcGxhY2UoJ3JlZicsIF9ibG9ja0xhYmVsKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3Qgbm9saW5rID0gZWRpdCgvXiE/XFxbKHJlZilcXF0oPzpcXFtcXF0pPy8pXG4gICAgLnJlcGxhY2UoJ3JlZicsIF9ibG9ja0xhYmVsKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgcmVmbGlua1NlYXJjaCA9IGVkaXQoJ3JlZmxpbmt8bm9saW5rKD8hXFxcXCgpJywgJ2cnKVxuICAgIC5yZXBsYWNlKCdyZWZsaW5rJywgcmVmbGluaylcbiAgICAucmVwbGFjZSgnbm9saW5rJywgbm9saW5rKVxuICAgIC5nZXRSZWdleCgpO1xuLyoqXG4gKiBOb3JtYWwgSW5saW5lIEdyYW1tYXJcbiAqL1xuY29uc3QgaW5saW5lTm9ybWFsID0ge1xuICAgIF9iYWNrcGVkYWw6IG5vb3BUZXN0LCAvLyBvbmx5IHVzZWQgZm9yIEdGTSB1cmxcbiAgICBhbnlQdW5jdHVhdGlvbixcbiAgICBhdXRvbGluayxcbiAgICBibG9ja1NraXAsXG4gICAgYnIsXG4gICAgY29kZTogaW5saW5lQ29kZSxcbiAgICBkZWw6IG5vb3BUZXN0LFxuICAgIGVtU3Ryb25nTERlbGltLFxuICAgIGVtU3Ryb25nUkRlbGltQXN0LFxuICAgIGVtU3Ryb25nUkRlbGltVW5kLFxuICAgIGVzY2FwZSxcbiAgICBsaW5rLFxuICAgIG5vbGluayxcbiAgICBwdW5jdHVhdGlvbixcbiAgICByZWZsaW5rLFxuICAgIHJlZmxpbmtTZWFyY2gsXG4gICAgdGFnLFxuICAgIHRleHQ6IGlubGluZVRleHQsXG4gICAgdXJsOiBub29wVGVzdCxcbn07XG4vKipcbiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyXG4gKi9cbmNvbnN0IGlubGluZVBlZGFudGljID0ge1xuICAgIC4uLmlubGluZU5vcm1hbCxcbiAgICBsaW5rOiBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFwoKC4qPylcXCkvKVxuICAgICAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgICAgIC5nZXRSZWdleCgpLFxuICAgIHJlZmxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXHMqXFxbKFteXFxdXSopXFxdLylcbiAgICAgICAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIEdGTSBJbmxpbmUgR3JhbW1hclxuICovXG5jb25zdCBpbmxpbmVHZm0gPSB7XG4gICAgLi4uaW5saW5lTm9ybWFsLFxuICAgIGVzY2FwZTogZWRpdChlc2NhcGUpLnJlcGxhY2UoJ10pJywgJ358XSknKS5nZXRSZWdleCgpLFxuICAgIHVybDogZWRpdCgvXigoPzpmdHB8aHR0cHM/KTpcXC9cXC98d3d3XFwuKSg/OlthLXpBLVowLTlcXC1dK1xcLj8pK1teXFxzPF0qfF5lbWFpbC8sICdpJylcbiAgICAgICAgLnJlcGxhY2UoJ2VtYWlsJywgL1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlxcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLylcbiAgICAgICAgLmdldFJlZ2V4KCksXG4gICAgX2JhY2twZWRhbDogLyg/OltePyEuLDo7Kl8nXCJ+KCkmXSt8XFwoW14pXSpcXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nXCJ+KV0rKD8hJCkpKy8sXG4gICAgZGVsOiAvXih+fj8pKD89W15cXHN+XSkoW1xcc1xcU10qP1teXFxzfl0pXFwxKD89W15+XXwkKS8sXG4gICAgdGV4dDogL14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cXG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCl8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKn5fXXxcXGJffGh0dHBzPzpcXC9cXC98ZnRwOlxcL1xcL3x3d3dcXC58JCl8W14gXSg/PSB7Mix9XFxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCkpKS8sXG59O1xuLyoqXG4gKiBHRk0gKyBMaW5lIEJyZWFrcyBJbmxpbmUgR3JhbW1hclxuICovXG5jb25zdCBpbmxpbmVCcmVha3MgPSB7XG4gICAgLi4uaW5saW5lR2ZtLFxuICAgIGJyOiBlZGl0KGJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICAgIHRleHQ6IGVkaXQoaW5saW5lR2ZtLnRleHQpXG4gICAgICAgIC5yZXBsYWNlKCdcXFxcYl8nLCAnXFxcXGJffCB7Mix9XFxcXG4nKVxuICAgICAgICAucmVwbGFjZSgvXFx7MixcXH0vZywgJyonKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIGV4cG9ydHNcbiAqL1xuY29uc3QgYmxvY2sgPSB7XG4gICAgbm9ybWFsOiBibG9ja05vcm1hbCxcbiAgICBnZm06IGJsb2NrR2ZtLFxuICAgIHBlZGFudGljOiBibG9ja1BlZGFudGljLFxufTtcbmNvbnN0IGlubGluZSA9IHtcbiAgICBub3JtYWw6IGlubGluZU5vcm1hbCxcbiAgICBnZm06IGlubGluZUdmbSxcbiAgICBicmVha3M6IGlubGluZUJyZWFrcyxcbiAgICBwZWRhbnRpYzogaW5saW5lUGVkYW50aWMsXG59O1xuXG4vKipcbiAqIEJsb2NrIExleGVyXG4gKi9cbmNsYXNzIF9MZXhlciB7XG4gICAgdG9rZW5zO1xuICAgIG9wdGlvbnM7XG4gICAgc3RhdGU7XG4gICAgdG9rZW5pemVyO1xuICAgIGlubGluZVF1ZXVlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gVG9rZW5MaXN0IGNhbm5vdCBiZSBjcmVhdGVkIGluIG9uZSBnb1xuICAgICAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgICAgICB0aGlzLnRva2Vucy5saW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgICAgICB0aGlzLm9wdGlvbnMudG9rZW5pemVyID0gdGhpcy5vcHRpb25zLnRva2VuaXplciB8fCBuZXcgX1Rva2VuaXplcigpO1xuICAgICAgICB0aGlzLnRva2VuaXplciA9IHRoaXMub3B0aW9ucy50b2tlbml6ZXI7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLmxleGVyID0gdGhpcztcbiAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaW5MaW5rOiBmYWxzZSxcbiAgICAgICAgICAgIGluUmF3QmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgdG9wOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBydWxlcyA9IHtcbiAgICAgICAgICAgIGJsb2NrOiBibG9jay5ub3JtYWwsXG4gICAgICAgICAgICBpbmxpbmU6IGlubGluZS5ub3JtYWwsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICAgIHJ1bGVzLmJsb2NrID0gYmxvY2sucGVkYW50aWM7XG4gICAgICAgICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUucGVkYW50aWM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmdmbSkge1xuICAgICAgICAgICAgcnVsZXMuYmxvY2sgPSBibG9jay5nZm07XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrcykge1xuICAgICAgICAgICAgICAgIHJ1bGVzLmlubGluZSA9IGlubGluZS5icmVha3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUuZ2ZtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnJ1bGVzID0gcnVsZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9zZSBSdWxlc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgcnVsZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgIGlubGluZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGljIExleCBNZXRob2RcbiAgICAgKi9cbiAgICBzdGF0aWMgbGV4KHNyYywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsZXhlciA9IG5ldyBfTGV4ZXIob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBsZXhlci5sZXgoc3JjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGljIExleCBJbmxpbmUgTWV0aG9kXG4gICAgICovXG4gICAgc3RhdGljIGxleElubGluZShzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgX0xleGVyKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbGV4ZXIuaW5saW5lVG9rZW5zKHNyYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXByb2Nlc3NpbmdcbiAgICAgKi9cbiAgICBsZXgoc3JjKSB7XG4gICAgICAgIHNyYyA9IHNyY1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpO1xuICAgICAgICB0aGlzLmJsb2NrVG9rZW5zKHNyYywgdGhpcy50b2tlbnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5saW5lUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlubGluZVF1ZXVlW2ldO1xuICAgICAgICAgICAgdGhpcy5pbmxpbmVUb2tlbnMobmV4dC5zcmMsIG5leHQudG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlubGluZVF1ZXVlID0gW107XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG4gICAgYmxvY2tUb2tlbnMoc3JjLCB0b2tlbnMgPSBbXSwgbGFzdFBhcmFncmFwaENsaXBwZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvXFx0L2csICcgICAgJykucmVwbGFjZSgvXiArJC9nbSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL14oICopKFxcdCspL2dtLCAoXywgbGVhZGluZywgdGFicykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWFkaW5nICsgJyAgICAnLnJlcGVhdCh0YWJzLmxlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9rZW47XG4gICAgICAgIGxldCBsYXN0VG9rZW47XG4gICAgICAgIGxldCBjdXRTcmM7XG4gICAgICAgIHdoaWxlIChzcmMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZSgoZXh0VG9rZW5pemVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9IGV4dFRva2VuaXplci5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgc3JjLCB0b2tlbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBuZXdsaW5lXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5zcGFjZShzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmF3Lmxlbmd0aCA9PT0gMSAmJiB0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIGEgc2luZ2xlIFxcbiBhcyBhIHNwYWNlciwgaXQncyB0ZXJtaW5hdGluZyB0aGUgbGFzdCBsaW5lLFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyBtb3ZlIGl0IHRoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHVubmVjZXNzYXJ5IHBhcmFncmFwaCB0YWdzXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0ucmF3ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvZGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmNvZGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAvLyBBbiBpbmRlbnRlZCBjb2RlIGJsb2NrIGNhbm5vdCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGguXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbiAmJiAobGFzdFRva2VuLnR5cGUgPT09ICdwYXJhZ3JhcGgnIHx8IGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aCAtIDFdLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZlbmNlc1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZmVuY2VzKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhlYWRpbmdcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmhlYWRpbmcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaHJcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmhyKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJsb2NrcXVvdGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbGlzdFxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIubGlzdChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBodG1sXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5odG1sKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRlZlxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZGVmKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbiAmJiAobGFzdFRva2VuLnR5cGUgPT09ICdwYXJhZ3JhcGgnIHx8IGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoIC0gMV0uc3JjID0gbGFzdFRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnRva2Vucy5saW5rc1t0b2tlbi50YWddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLmxpbmtzW3Rva2VuLnRhZ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB0b2tlbi5ocmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRva2VuLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRhYmxlIChnZm0pXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWJsZShzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBsaGVhZGluZ1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIubGhlYWRpbmcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdG9wLWxldmVsIHBhcmFncmFwaFxuICAgICAgICAgICAgLy8gcHJldmVudCBwYXJhZ3JhcGggY29uc3VtaW5nIGV4dGVuc2lvbnMgYnkgY2xpcHBpbmcgJ3NyYycgdG8gZXh0ZW5zaW9uIHN0YXJ0XG4gICAgICAgICAgICBjdXRTcmMgPSBzcmM7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jaykge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydEluZGV4ID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFNyYyA9IHNyYy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcFN0YXJ0O1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaCgoZ2V0U3RhcnRJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhcnQgPSBnZXRTdGFydEluZGV4LmNhbGwoeyBsZXhlcjogdGhpcyB9LCB0ZW1wU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wU3RhcnQgPT09ICdudW1iZXInICYmIHRlbXBTdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdGVtcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4IDwgSW5maW5pdHkgJiYgc3RhcnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dFNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRvcCAmJiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoY3V0U3JjKSkpIHtcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0UGFyYWdyYXBoQ2xpcHBlZCAmJiBsYXN0VG9rZW4/LnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aCAtIDFdLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYXN0UGFyYWdyYXBoQ2xpcHBlZCA9IChjdXRTcmMubGVuZ3RoICE9PSBzcmMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGV4dFxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIudGV4dChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSAnXFxuJyArIHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGggLSAxXS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3JjKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS50b3AgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbiAgICBpbmxpbmUoc3JjLCB0b2tlbnMgPSBbXSkge1xuICAgICAgICB0aGlzLmlubGluZVF1ZXVlLnB1c2goeyBzcmMsIHRva2VucyB9KTtcbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGV4aW5nL0NvbXBpbGluZ1xuICAgICAqL1xuICAgIGlubGluZVRva2VucyhzcmMsIHRva2VucyA9IFtdKSB7XG4gICAgICAgIGxldCB0b2tlbiwgbGFzdFRva2VuLCBjdXRTcmM7XG4gICAgICAgIC8vIFN0cmluZyB3aXRoIGxpbmtzIG1hc2tlZCB0byBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCBlbSBhbmQgc3Ryb25nXG4gICAgICAgIGxldCBtYXNrZWRTcmMgPSBzcmM7XG4gICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgbGV0IGtlZXBQcmV2Q2hhciwgcHJldkNoYXI7XG4gICAgICAgIC8vIE1hc2sgb3V0IHJlZmxpbmtzXG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5saW5rcykge1xuICAgICAgICAgICAgY29uc3QgbGlua3MgPSBPYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7XG4gICAgICAgICAgICBpZiAobGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKG1hdGNoWzBdLnNsaWNlKG1hdGNoWzBdLmxhc3RJbmRleE9mKCdbJykgKyAxLCAtMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgJ1snICsgJ2EnLnJlcGVhdChtYXRjaFswXS5sZW5ndGggLSAyKSArICddJyArIG1hc2tlZFNyYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hc2sgb3V0IG90aGVyIGJsb2Nrc1xuICAgICAgICB3aGlsZSAoKG1hdGNoID0gdGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAnWycgKyAnYScucmVwZWF0KG1hdGNoWzBdLmxlbmd0aCAtIDIpICsgJ10nICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYXNrIG91dCBlc2NhcGVkIGNoYXJhY3RlcnNcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAnKysnICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzcmMpIHtcbiAgICAgICAgICAgIGlmICgha2VlcFByZXZDaGFyKSB7XG4gICAgICAgICAgICAgICAgcHJldkNoYXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtlZXBQcmV2Q2hhciA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZXh0ZW5zaW9uc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoKGV4dFRva2VuaXplcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPSBleHRUb2tlbml6ZXIuY2FsbCh7IGxleGVyOiB0aGlzIH0sIHNyYywgdG9rZW5zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5lc2NhcGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFnXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRva2VuICYmIHRva2VuLnR5cGUgPT09ICd0ZXh0JyAmJiBsYXN0VG9rZW4udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxpbmtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmxpbmsoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVmbGluaywgbm9saW5rXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5yZWZsaW5rKHNyYywgdGhpcy50b2tlbnMubGlua3MpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3RleHQnICYmIGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnJhdyArPSB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZW0gJiBzdHJvbmdcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmVtU3Ryb25nKHNyYywgbWFza2VkU3JjLCBwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvZGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmNvZGVzcGFuKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJyXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5icihzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWwgKGdmbSlcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmRlbChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvbGlua1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuYXV0b2xpbmsoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdXJsIChnZm0pXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaW5MaW5rICYmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnVybChzcmMpKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGV4dFxuICAgICAgICAgICAgLy8gcHJldmVudCBpbmxpbmVUZXh0IGNvbnN1bWluZyBleHRlbnNpb25zIGJ5IGNsaXBwaW5nICdzcmMnIHRvIGV4dGVuc2lvbiBzdGFydFxuICAgICAgICAgICAgY3V0U3JjID0gc3JjO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wU3JjID0gc3JjLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wU3RhcnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaCgoZ2V0U3RhcnRJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhcnQgPSBnZXRTdGFydEluZGV4LmNhbGwoeyBsZXhlcjogdGhpcyB9LCB0ZW1wU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wU3RhcnQgPT09ICdudW1iZXInICYmIHRlbXBTdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdGVtcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4IDwgSW5maW5pdHkgJiYgc3RhcnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dFNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmlubGluZVRleHQoY3V0U3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnJhdy5zbGljZSgtMSkgIT09ICdfJykgeyAvLyBUcmFjayBwcmV2Q2hhciBiZWZvcmUgc3RyaW5nIG9mIF9fX18gc3RhcnRlZFxuICAgICAgICAgICAgICAgICAgICBwcmV2Q2hhciA9IHRva2VuLnJhdy5zbGljZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtlZXBQcmV2Q2hhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRva2VuICYmIGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnJhdyArPSB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9ICdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlbmRlcmVyXG4gKi9cbmNsYXNzIF9SZW5kZXJlciB7XG4gICAgb3B0aW9ucztcbiAgICBwYXJzZXI7IC8vIHNldCBieSB0aGUgcGFyc2VyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgICB9XG4gICAgc3BhY2UodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb2RlKHsgdGV4dCwgbGFuZywgZXNjYXBlZCB9KSB7XG4gICAgICAgIGNvbnN0IGxhbmdTdHJpbmcgPSAobGFuZyB8fCAnJykubWF0Y2goL15cXFMqLyk/LlswXTtcbiAgICAgICAgY29uc3QgY29kZSA9IHRleHQucmVwbGFjZSgvXFxuJC8sICcnKSArICdcXG4nO1xuICAgICAgICBpZiAoIWxhbmdTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnPHByZT48Y29kZT4nXG4gICAgICAgICAgICAgICAgKyAoZXNjYXBlZCA/IGNvZGUgOiBlc2NhcGUkMShjb2RlLCB0cnVlKSlcbiAgICAgICAgICAgICAgICArICc8L2NvZGU+PC9wcmU+XFxuJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzxwcmU+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0nXG4gICAgICAgICAgICArIGVzY2FwZSQxKGxhbmdTdHJpbmcpXG4gICAgICAgICAgICArICdcIj4nXG4gICAgICAgICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZSQxKGNvZGUsIHRydWUpKVxuICAgICAgICAgICAgKyAnPC9jb2RlPjwvcHJlPlxcbic7XG4gICAgfVxuICAgIGJsb2NrcXVvdGUoeyB0b2tlbnMgfSkge1xuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZXIucGFyc2UodG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGA8YmxvY2txdW90ZT5cXG4ke2JvZHl9PC9ibG9ja3F1b3RlPlxcbmA7XG4gICAgfVxuICAgIGh0bWwoeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGhlYWRpbmcoeyB0b2tlbnMsIGRlcHRoIH0pIHtcbiAgICAgICAgcmV0dXJuIGA8aCR7ZGVwdGh9PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2gke2RlcHRofT5cXG5gO1xuICAgIH1cbiAgICBocih0b2tlbikge1xuICAgICAgICByZXR1cm4gJzxocj5cXG4nO1xuICAgIH1cbiAgICBsaXN0KHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG9yZGVyZWQgPSB0b2tlbi5vcmRlcmVkO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRva2VuLnN0YXJ0O1xuICAgICAgICBsZXQgYm9keSA9ICcnO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLml0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdG9rZW4uaXRlbXNbal07XG4gICAgICAgICAgICBib2R5ICs9IHRoaXMubGlzdGl0ZW0oaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZSA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3Qgc3RhcnRBdHRyID0gKG9yZGVyZWQgJiYgc3RhcnQgIT09IDEpID8gKCcgc3RhcnQ9XCInICsgc3RhcnQgKyAnXCInKSA6ICcnO1xuICAgICAgICByZXR1cm4gJzwnICsgdHlwZSArIHN0YXJ0QXR0ciArICc+XFxuJyArIGJvZHkgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbiAgICB9XG4gICAgbGlzdGl0ZW0oaXRlbSkge1xuICAgICAgICBsZXQgaXRlbUJvZHkgPSAnJztcbiAgICAgICAgaWYgKGl0ZW0udGFzaykge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tib3ggPSB0aGlzLmNoZWNrYm94KHsgY2hlY2tlZDogISFpdGVtLmNoZWNrZWQgfSk7XG4gICAgICAgICAgICBpZiAoaXRlbS5sb29zZSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vucy5sZW5ndGggPiAwICYmIGl0ZW0udG9rZW5zWzBdLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveCArICcgJyArIGl0ZW0udG9rZW5zWzBdLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vuc1swXS50b2tlbnMgJiYgaXRlbS50b2tlbnNbMF0udG9rZW5zLmxlbmd0aCA+IDAgJiYgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveCArICcgJyArIGl0ZW0udG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnRva2Vucy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogY2hlY2tib3ggKyAnICcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaGVja2JveCArICcgJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUJvZHkgKz0gY2hlY2tib3ggKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbUJvZHkgKz0gdGhpcy5wYXJzZXIucGFyc2UoaXRlbS50b2tlbnMsICEhaXRlbS5sb29zZSk7XG4gICAgICAgIHJldHVybiBgPGxpPiR7aXRlbUJvZHl9PC9saT5cXG5gO1xuICAgIH1cbiAgICBjaGVja2JveCh7IGNoZWNrZWQgfSkge1xuICAgICAgICByZXR1cm4gJzxpbnB1dCAnXG4gICAgICAgICAgICArIChjaGVja2VkID8gJ2NoZWNrZWQ9XCJcIiAnIDogJycpXG4gICAgICAgICAgICArICdkaXNhYmxlZD1cIlwiIHR5cGU9XCJjaGVja2JveFwiPic7XG4gICAgfVxuICAgIHBhcmFncmFwaCh7IHRva2VucyB9KSB7XG4gICAgICAgIHJldHVybiBgPHA+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvcD5cXG5gO1xuICAgIH1cbiAgICB0YWJsZSh0b2tlbikge1xuICAgICAgICBsZXQgaGVhZGVyID0gJyc7XG4gICAgICAgIC8vIGhlYWRlclxuICAgICAgICBsZXQgY2VsbCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLmhlYWRlci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY2VsbCArPSB0aGlzLnRhYmxlY2VsbCh0b2tlbi5oZWFkZXJbal0pO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlciArPSB0aGlzLnRhYmxlcm93KHsgdGV4dDogY2VsbCB9KTtcbiAgICAgICAgbGV0IGJvZHkgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5yb3dzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0b2tlbi5yb3dzW2pdO1xuICAgICAgICAgICAgY2VsbCA9ICcnO1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByb3cubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBjZWxsICs9IHRoaXMudGFibGVjZWxsKHJvd1trXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5ICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5KVxuICAgICAgICAgICAgYm9keSA9IGA8dGJvZHk+JHtib2R5fTwvdGJvZHk+YDtcbiAgICAgICAgcmV0dXJuICc8dGFibGU+XFxuJ1xuICAgICAgICAgICAgKyAnPHRoZWFkPlxcbidcbiAgICAgICAgICAgICsgaGVhZGVyXG4gICAgICAgICAgICArICc8L3RoZWFkPlxcbidcbiAgICAgICAgICAgICsgYm9keVxuICAgICAgICAgICAgKyAnPC90YWJsZT5cXG4nO1xuICAgIH1cbiAgICB0YWJsZXJvdyh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gYDx0cj5cXG4ke3RleHR9PC90cj5cXG5gO1xuICAgIH1cbiAgICB0YWJsZWNlbGwodG9rZW4pIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRva2Vucyk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5oZWFkZXIgPyAndGgnIDogJ3RkJztcbiAgICAgICAgY29uc3QgdGFnID0gdG9rZW4uYWxpZ25cbiAgICAgICAgICAgID8gYDwke3R5cGV9IGFsaWduPVwiJHt0b2tlbi5hbGlnbn1cIj5gXG4gICAgICAgICAgICA6IGA8JHt0eXBlfT5gO1xuICAgICAgICByZXR1cm4gdGFnICsgY29udGVudCArIGA8LyR7dHlwZX0+XFxuYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3BhbiBsZXZlbCByZW5kZXJlclxuICAgICAqL1xuICAgIHN0cm9uZyh7IHRva2VucyB9KSB7XG4gICAgICAgIHJldHVybiBgPHN0cm9uZz4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9zdHJvbmc+YDtcbiAgICB9XG4gICAgZW0oeyB0b2tlbnMgfSkge1xuICAgICAgICByZXR1cm4gYDxlbT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9lbT5gO1xuICAgIH1cbiAgICBjb2Rlc3Bhbih7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gYDxjb2RlPiR7dGV4dH08L2NvZGU+YDtcbiAgICB9XG4gICAgYnIodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuICc8YnI+JztcbiAgICB9XG4gICAgZGVsKHsgdG9rZW5zIH0pIHtcbiAgICAgICAgcmV0dXJuIGA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2RlbD5gO1xuICAgIH1cbiAgICBsaW5rKHsgaHJlZiwgdGl0bGUsIHRva2VucyB9KSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpO1xuICAgICAgICBjb25zdCBjbGVhbkhyZWYgPSBjbGVhblVybChocmVmKTtcbiAgICAgICAgaWYgKGNsZWFuSHJlZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaHJlZiA9IGNsZWFuSHJlZjtcbiAgICAgICAgbGV0IG91dCA9ICc8YSBocmVmPVwiJyArIGhyZWYgKyAnXCInO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJz4nICsgdGV4dCArICc8L2E+JztcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgaW1hZ2UoeyBocmVmLCB0aXRsZSwgdGV4dCB9KSB7XG4gICAgICAgIGNvbnN0IGNsZWFuSHJlZiA9IGNsZWFuVXJsKGhyZWYpO1xuICAgICAgICBpZiAoY2xlYW5IcmVmID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBocmVmID0gY2xlYW5IcmVmO1xuICAgICAgICBsZXQgb3V0ID0gYDxpbWcgc3JjPVwiJHtocmVmfVwiIGFsdD1cIiR7dGV4dH1cImA7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgb3V0ICs9IGAgdGl0bGU9XCIke3RpdGxlfVwiYDtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJz4nO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICB0ZXh0KHRva2VuKSB7XG4gICAgICAgIHJldHVybiAndG9rZW5zJyBpbiB0b2tlbiAmJiB0b2tlbi50b2tlbnMgPyB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpIDogdG9rZW4udGV4dDtcbiAgICB9XG59XG5cbi8qKlxuICogVGV4dFJlbmRlcmVyXG4gKiByZXR1cm5zIG9ubHkgdGhlIHRleHR1YWwgcGFydCBvZiB0aGUgdG9rZW5cbiAqL1xuY2xhc3MgX1RleHRSZW5kZXJlciB7XG4gICAgLy8gbm8gbmVlZCBmb3IgYmxvY2sgbGV2ZWwgcmVuZGVyZXJzXG4gICAgc3Ryb25nKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBlbSh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgY29kZXNwYW4oeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGRlbCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaHRtbCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgdGV4dCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgbGluayh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gJycgKyB0ZXh0O1xuICAgIH1cbiAgICBpbWFnZSh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gJycgKyB0ZXh0O1xuICAgIH1cbiAgICBicigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQYXJzaW5nICYgQ29tcGlsaW5nXG4gKi9cbmNsYXNzIF9QYXJzZXIge1xuICAgIG9wdGlvbnM7XG4gICAgcmVuZGVyZXI7XG4gICAgdGV4dFJlbmRlcmVyO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgX1JlbmRlcmVyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXI7XG4gICAgICAgIHRoaXMucmVuZGVyZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJlci5wYXJzZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLnRleHRSZW5kZXJlciA9IG5ldyBfVGV4dFJlbmRlcmVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBQYXJzZSBNZXRob2RcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UodG9rZW5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfUGFyc2VyKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKHRva2Vucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBQYXJzZSBJbmxpbmUgTWV0aG9kXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlSW5saW5lKHRva2Vucywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX1BhcnNlcihvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBMb29wXG4gICAgICovXG4gICAgcGFyc2UodG9rZW5zLCB0b3AgPSB0cnVlKSB7XG4gICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFueVRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgLy8gUnVuIGFueSByZW5kZXJlciBleHRlbnNpb25zXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thbnlUb2tlbi50eXBlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyaWNUb2tlbiA9IGFueVRva2VuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tnZW5lcmljVG9rZW4udHlwZV0uY2FsbCh7IHBhcnNlcjogdGhpcyB9LCBnZW5lcmljVG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmIChyZXQgIT09IGZhbHNlIHx8ICFbJ3NwYWNlJywgJ2hyJywgJ2hlYWRpbmcnLCAnY29kZScsICd0YWJsZScsICdibG9ja3F1b3RlJywgJ2xpc3QnLCAnaHRtbCcsICdwYXJhZ3JhcGgnLCAndGV4dCddLmluY2x1ZGVzKGdlbmVyaWNUb2tlbi50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGFueVRva2VuO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnNwYWNlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2hyJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5ocih0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdoZWFkaW5nJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmNvZGUodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIubGlzdCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdodG1sJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5odG1sKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhcmFncmFwaCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHkgPSB0aGlzLnJlbmRlcmVyLnRleHQodGV4dFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgKyAxIDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaSArIDFdLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRva2VuID0gdG9rZW5zWysraV07XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9ICdcXG4nICsgdGhpcy5yZW5kZXJlci50ZXh0KHRleHRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IGJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogYm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IFt7IHR5cGU6ICd0ZXh0JywgcmF3OiBib2R5LCB0ZXh0OiBib2R5IH1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gYm9keTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2cgPSAnVG9rZW4gd2l0aCBcIicgKyB0b2tlbi50eXBlICsgJ1wiIHR5cGUgd2FzIG5vdCBmb3VuZC4nO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgSW5saW5lIFRva2Vuc1xuICAgICAqL1xuICAgIHBhcnNlSW5saW5lKHRva2VucywgcmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlciB8fCB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBsZXQgb3V0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhbnlUb2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIC8vIFJ1biBhbnkgcmVuZGVyZXIgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyAmJiB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYW55VG9rZW4udHlwZV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYW55VG9rZW4udHlwZV0uY2FsbCh7IHBhcnNlcjogdGhpcyB9LCBhbnlUb2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gZmFsc2UgfHwgIVsnZXNjYXBlJywgJ2h0bWwnLCAnbGluaycsICdpbWFnZScsICdzdHJvbmcnLCAnZW0nLCAnY29kZXNwYW4nLCAnYnInLCAnZGVsJywgJ3RleHQnXS5pbmNsdWRlcyhhbnlUb2tlbi50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGFueVRva2VuO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZXNjYXBlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIudGV4dCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdodG1sJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuaHRtbCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdsaW5rJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIubGluayh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmltYWdlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cm9uZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLnN0cm9uZyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdlbSc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmVtKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGVzcGFuJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuY29kZXNwYW4odG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnYnInOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5icih0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdkZWwnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5kZWwodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAndGV4dCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLnRleHQodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2cgPSAnVG9rZW4gd2l0aCBcIicgKyB0b2tlbi50eXBlICsgJ1wiIHR5cGUgd2FzIG5vdCBmb3VuZC4nO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG59XG5cbmNsYXNzIF9Ib29rcyB7XG4gICAgb3B0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgIH1cbiAgICBzdGF0aWMgcGFzc1Rocm91Z2hIb29rcyA9IG5ldyBTZXQoW1xuICAgICAgICAncHJlcHJvY2VzcycsXG4gICAgICAgICdwb3N0cHJvY2VzcycsXG4gICAgICAgICdwcm9jZXNzQWxsVG9rZW5zJyxcbiAgICBdKTtcbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIG1hcmtkb3duIGJlZm9yZSBtYXJrZWRcbiAgICAgKi9cbiAgICBwcmVwcm9jZXNzKG1hcmtkb3duKSB7XG4gICAgICAgIHJldHVybiBtYXJrZG93bjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBIVE1MIGFmdGVyIG1hcmtlZCBpcyBmaW5pc2hlZFxuICAgICAqL1xuICAgIHBvc3Rwcm9jZXNzKGh0bWwpIHtcbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgYWxsIHRva2VucyBiZWZvcmUgd2FsayB0b2tlbnNcbiAgICAgKi9cbiAgICBwcm9jZXNzQWxsVG9rZW5zKHRva2Vucykge1xuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbn1cblxuY2xhc3MgTWFya2VkIHtcbiAgICBkZWZhdWx0cyA9IF9nZXREZWZhdWx0cygpO1xuICAgIG9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnM7XG4gICAgcGFyc2UgPSB0aGlzLiNwYXJzZU1hcmtkb3duKF9MZXhlci5sZXgsIF9QYXJzZXIucGFyc2UpO1xuICAgIHBhcnNlSW5saW5lID0gdGhpcy4jcGFyc2VNYXJrZG93bihfTGV4ZXIubGV4SW5saW5lLCBfUGFyc2VyLnBhcnNlSW5saW5lKTtcbiAgICBQYXJzZXIgPSBfUGFyc2VyO1xuICAgIFJlbmRlcmVyID0gX1JlbmRlcmVyO1xuICAgIFRleHRSZW5kZXJlciA9IF9UZXh0UmVuZGVyZXI7XG4gICAgTGV4ZXIgPSBfTGV4ZXI7XG4gICAgVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbiAgICBIb29rcyA9IF9Ib29rcztcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMudXNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gICAgICovXG4gICAgd2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoY2FsbGJhY2suY2FsbCh0aGlzLCB0b2tlbikpO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHRhYmxlVG9rZW4uaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0YWJsZVRva2VuLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiByb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdFRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodGhpcy53YWxrVG9rZW5zKGxpc3RUb2tlbi5pdGVtcywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJpY1Rva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnM/LmNoaWxkVG9rZW5zPy5bZ2VuZXJpY1Rva2VuLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbZ2VuZXJpY1Rva2VuLnR5cGVdLmZvckVhY2goKGNoaWxkVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gZ2VuZXJpY1Rva2VuW2NoaWxkVG9rZW5zXS5mbGF0KEluZmluaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnZW5lcmljVG9rZW4udG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhnZW5lcmljVG9rZW4udG9rZW5zLCBjYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIHVzZSguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMgfHwgeyByZW5kZXJlcnM6IHt9LCBjaGlsZFRva2Vuczoge30gfTtcbiAgICAgICAgYXJncy5mb3JFYWNoKChwYWNrKSA9PiB7XG4gICAgICAgICAgICAvLyBjb3B5IG9wdGlvbnMgdG8gbmV3IG9iamVjdFxuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHsgLi4ucGFjayB9O1xuICAgICAgICAgICAgLy8gc2V0IGFzeW5jIHRvIHRydWUgaWYgaXQgd2FzIHNldCB0byB0cnVlIGJlZm9yZVxuICAgICAgICAgICAgb3B0cy5hc3luYyA9IHRoaXMuZGVmYXVsdHMuYXN5bmMgfHwgb3B0cy5hc3luYyB8fCBmYWxzZTtcbiAgICAgICAgICAgIC8vID09LS0gUGFyc2UgXCJhZGRvblwiIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgICAgICAgaWYgKHBhY2suZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIHBhY2suZXh0ZW5zaW9ucy5mb3JFYWNoKChleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHRlbnNpb24gbmFtZSByZXF1aXJlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgncmVuZGVyZXInIGluIGV4dCkgeyAvLyBSZW5kZXJlciBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyZXIgPSBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBleHRlbnNpb24gd2l0aCBmdW5jIHRvIHJ1biBuZXcgZXh0ZW5zaW9uIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gZXh0LnJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldlJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyZXJzW2V4dC5uYW1lXSA9IGV4dC5yZW5kZXJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3Rva2VuaXplcicgaW4gZXh0KSB7IC8vIFRva2VuaXplciBFeHRlbnNpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4dC5sZXZlbCB8fCAoZXh0LmxldmVsICE9PSAnYmxvY2snICYmIGV4dC5sZXZlbCAhPT0gJ2lubGluZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dExldmVsID0gZXh0ZW5zaW9uc1tleHQubGV2ZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0TGV2ZWwudW5zaGlmdChleHQudG9rZW5pemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNbZXh0LmxldmVsXSA9IFtleHQudG9rZW5pemVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHQuc3RhcnQpIHsgLy8gRnVuY3Rpb24gdG8gY2hlY2sgZm9yIHN0YXJ0IG9mIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dC5sZXZlbCA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0QmxvY2sucHVzaChleHQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydEJsb2NrID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0LmxldmVsID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydElubGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydElubGluZS5wdXNoKGV4dC5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0SW5saW5lID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdjaGlsZFRva2VucycgaW4gZXh0ICYmIGV4dC5jaGlsZFRva2VucykgeyAvLyBDaGlsZCB0b2tlbnMgdG8gYmUgdmlzaXRlZCBieSB3YWxrVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmNoaWxkVG9rZW5zW2V4dC5uYW1lXSA9IGV4dC5jaGlsZFRva2VucztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA9PS0tIFBhcnNlIFwib3ZlcndyaXRlXCIgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay5yZW5kZXJlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5kZWZhdWx0cy5yZW5kZXJlciB8fCBuZXcgX1JlbmRlcmVyKHRoaXMuZGVmYXVsdHMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwYWNrLnJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHByb3AgaW4gcmVuZGVyZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChbJ29wdGlvbnMnLCAncGFyc2VyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlclByb3AgPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVuZGVyZXJGdW5jID0gcGFjay5yZW5kZXJlcltyZW5kZXJlclByb3BdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2sudXNlTmV3UmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGluIG5leHQgbWFqb3IgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJGdW5jID0gdGhpcy4jY29udmVydFJlbmRlcmVyRnVuY3Rpb24ocmVuZGVyZXJGdW5jLCByZW5kZXJlclByb3AsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyZXIgPSByZW5kZXJlcltyZW5kZXJlclByb3BdO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHJlbmRlcmVyIHdpdGggZnVuYyB0byBydW4gZXh0ZW5zaW9uLCBidXQgZmFsbCBiYWNrIGlmIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyW3JlbmRlcmVyUHJvcF0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IHJlbmRlcmVyRnVuYy5hcHBseShyZW5kZXJlciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHByZXZSZW5kZXJlci5hcHBseShyZW5kZXJlciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFjay50b2tlbml6ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbml6ZXIgPSB0aGlzLmRlZmF1bHRzLnRva2VuaXplciB8fCBuZXcgX1Rva2VuaXplcih0aGlzLmRlZmF1bHRzKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcGFjay50b2tlbml6ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJvcCBpbiB0b2tlbml6ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHtwcm9wfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoWydvcHRpb25zJywgJ3J1bGVzJywgJ2xleGVyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zLCBydWxlcywgYW5kIGxleGVyIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuaXplclByb3AgPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbml6ZXJGdW5jID0gcGFjay50b2tlbml6ZXJbdG9rZW5pemVyUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZUb2tlbml6ZXIgPSB0b2tlbml6ZXJbdG9rZW5pemVyUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdG9rZW5pemVyIHdpdGggZnVuYyB0byBydW4gZXh0ZW5zaW9uLCBidXQgZmFsbCBiYWNrIGlmIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgdG9rZW5pemVyIGZ1bmN0aW9uIGR5bmFtaWNhbGx5XG4gICAgICAgICAgICAgICAgICAgIHRva2VuaXplclt0b2tlbml6ZXJQcm9wXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gdG9rZW5pemVyRnVuYy5hcHBseSh0b2tlbml6ZXIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBwcmV2VG9rZW5pemVyLmFwcGx5KHRva2VuaXplciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLnRva2VuaXplciA9IHRva2VuaXplcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vID09LS0gUGFyc2UgSG9va3MgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay5ob29rcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvb2tzID0gdGhpcy5kZWZhdWx0cy5ob29rcyB8fCBuZXcgX0hvb2tzKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBhY2suaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJvcCBpbiBob29rcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9vayAnJHtwcm9wfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gJ29wdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgb3B0aW9ucyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9va3NQcm9wID0gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9va3NGdW5jID0gcGFjay5ob29rc1tob29rc1Byb3BdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2SG9vayA9IGhvb2tzW2hvb2tzUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChfSG9va3MucGFzc1Rocm91Z2hIb29rcy5oYXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgaG9vayBmdW5jdGlvbiBkeW5hbWljYWxseVxuICAgICAgICAgICAgICAgICAgICAgICAgaG9va3NbaG9va3NQcm9wXSA9IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0cy5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhvb2tzRnVuYy5jYWxsKGhvb2tzLCBhcmcpKS50aGVuKHJldCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkhvb2suY2FsbChob29rcywgcmV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IGhvb2tzRnVuYy5jYWxsKGhvb2tzLCBhcmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2SG9vay5jYWxsKGhvb2tzLCByZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgaG9vayBmdW5jdGlvbiBkeW5hbWljYWxseVxuICAgICAgICAgICAgICAgICAgICAgICAgaG9va3NbaG9va3NQcm9wXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IGhvb2tzRnVuYy5hcHBseShob29rcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldkhvb2suYXBwbHkoaG9va3MsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLmhvb2tzID0gaG9va3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA9PS0tIFBhcnNlIFdhbGtUb2tlbnMgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay53YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2Fsa1Rva2VucyA9IHRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrV2Fsa3Rva2VucyA9IHBhY2sud2Fsa1Rva2VucztcbiAgICAgICAgICAgICAgICBvcHRzLndhbGtUb2tlbnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwYWNrV2Fsa3Rva2Vucy5jYWxsKHRoaXMsIHRva2VuKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHdhbGtUb2tlbnMuY2FsbCh0aGlzLCB0b2tlbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9wdHMgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBpbiBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAjY29udmVydFJlbmRlcmVyRnVuY3Rpb24oZnVuYywgcHJvcCwgcmVuZGVyZXIpIHtcbiAgICAgICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICAgICAgICBjYXNlICdoZWFkaW5nJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVuZGVyZXIucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRva2VucyksIHRva2VuLmRlcHRoLCB1bmVzY2FwZShyZW5kZXJlci5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zLCByZW5kZXJlci5wYXJzZXIudGV4dFJlbmRlcmVyKSkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdjb2RlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4udGV4dCwgdG9rZW4ubGFuZywgISF0b2tlbi5lc2NhcGVkKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNlbGwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5oZWFkZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgKz0gdGhpcy50YWJsZWNlbGwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRva2VuLmhlYWRlcltqXS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuczogdG9rZW4uaGVhZGVyW2pdLnRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246IHRva2VuLmFsaWduW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLnJvd3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRva2VuLnJvd3Nbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJvdy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgKz0gdGhpcy50YWJsZWNlbGwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiByb3dba10udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiByb3dba10udG9rZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogdG9rZW4uYWxpZ25ba10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgaGVhZGVyLCBib2R5KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuLnR5cGUgfHwgdG9rZW4udHlwZSAhPT0gcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZXIucGFyc2UodG9rZW4udG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBib2R5KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuLnR5cGUgfHwgdG9rZW4udHlwZSAhPT0gcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmRlcmVkID0gdG9rZW4ub3JkZXJlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0b2tlbi5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9vc2UgPSB0b2tlbi5sb29zZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHkgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5pdGVtcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRva2VuLml0ZW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBpdGVtLnRhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbUJvZHkgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IHRoaXMuY2hlY2tib3goeyBjaGVja2VkOiAhIWNoZWNrZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vucy5sZW5ndGggPiAwICYmIGl0ZW0udG9rZW5zWzBdLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRva2Vuc1swXS50ZXh0ID0gY2hlY2tib3ggKyAnICcgKyBpdGVtLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9rZW5zWzBdLnRva2VucyAmJiBpdGVtLnRva2Vuc1swXS50b2tlbnMubGVuZ3RoID4gMCAmJiBpdGVtLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveCArICcgJyArIGl0ZW0udG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNoZWNrYm94ICsgJyAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Cb2R5ICs9IGNoZWNrYm94ICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Cb2R5ICs9IHRoaXMucGFyc2VyLnBhcnNlKGl0ZW0udG9rZW5zLCBsb29zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IHRoaXMubGlzdGl0ZW0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogaXRlbUJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbUJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiAhIWNoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiBpdGVtLnRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgYm9keSwgb3JkZXJlZCwgc3RhcnQpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4udGV4dCwgdG9rZW4uYmxvY2spO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdwYXJhZ3JhcGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4udGV4dCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0b2tlbi5ocmVmLCB0b2tlbi50aXRsZSwgdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4uaHJlZiwgdG9rZW4udGl0bGUsIHRva2VuLnRleHQpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdzdHJvbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnY29kZXNwYW4nOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0b2tlbi50ZXh0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZGVsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0b2tlbi50ZXh0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jO1xuICAgIH1cbiAgICBzZXRPcHRpb25zKG9wdCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0geyAuLi50aGlzLmRlZmF1bHRzLCAuLi5vcHQgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGxleGVyKHNyYywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX0xleGVyLmxleChzcmMsIG9wdGlvbnMgPz8gdGhpcy5kZWZhdWx0cyk7XG4gICAgfVxuICAgIHBhcnNlcih0b2tlbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9QYXJzZXIucGFyc2UodG9rZW5zLCBvcHRpb25zID8/IHRoaXMuZGVmYXVsdHMpO1xuICAgIH1cbiAgICAjcGFyc2VNYXJrZG93bihsZXhlciwgcGFyc2VyKSB7XG4gICAgICAgIHJldHVybiAoc3JjLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnT3B0ID0geyAuLi5vcHRpb25zIH07XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9yaWdPcHQgfTtcbiAgICAgICAgICAgIC8vIFNob3cgd2FybmluZyBpZiBhbiBleHRlbnNpb24gc2V0IGFzeW5jIHRvIHRydWUgYnV0IHRoZSBwYXJzZSB3YXMgY2FsbGVkIHdpdGggYXN5bmM6IGZhbHNlXG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0cy5hc3luYyA9PT0gdHJ1ZSAmJiBvcmlnT3B0LmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGlmICghb3B0LnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ21hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFRoZSBhc3luYzogZmFsc2Ugb3B0aW9uIHNlbnQgdG8gcGFyc2Ugd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGhyb3dFcnJvciA9IHRoaXMuI29uRXJyb3IoISFvcHQuc2lsZW50LCAhIW9wdC5hc3luYyk7XG4gICAgICAgICAgICAvLyB0aHJvdyBlcnJvciBpbiBjYXNlIG9mIG5vbiBzdHJpbmcgaW5wdXRcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAndW5kZWZpbmVkJyB8fCBzcmMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAnXG4gICAgICAgICAgICAgICAgICAgICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNyYykgKyAnLCBzdHJpbmcgZXhwZWN0ZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lmhvb2tzKSB7XG4gICAgICAgICAgICAgICAgb3B0Lmhvb2tzLm9wdGlvbnMgPSBvcHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvcHQuaG9va3MgPyBvcHQuaG9va3MucHJlcHJvY2VzcyhzcmMpIDogc3JjKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihzcmMgPT4gbGV4ZXIoc3JjLCBvcHQpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbih0b2tlbnMgPT4gb3B0Lmhvb2tzID8gb3B0Lmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModG9rZW5zKSA6IHRva2VucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4odG9rZW5zID0+IG9wdC53YWxrVG9rZW5zID8gUHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKHRva2Vucywgb3B0LndhbGtUb2tlbnMpKS50aGVuKCgpID0+IHRva2VucykgOiB0b2tlbnMpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHRva2VucyA9PiBwYXJzZXIodG9rZW5zLCBvcHQpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihodG1sID0+IG9wdC5ob29rcyA/IG9wdC5ob29rcy5wb3N0cHJvY2VzcyhodG1sKSA6IGh0bWwpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCh0aHJvd0Vycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5ob29rcykge1xuICAgICAgICAgICAgICAgICAgICBzcmMgPSBvcHQuaG9va3MucHJlcHJvY2VzcyhzcmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gbGV4ZXIoc3JjLCBvcHQpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gb3B0Lmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdC53YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIG9wdC53YWxrVG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBwYXJzZXIodG9rZW5zLCBvcHQpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IG9wdC5ob29rcy5wb3N0cHJvY2VzcyhodG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAjb25FcnJvcihzaWxlbnQsIGFzeW5jKSB7XG4gICAgICAgIHJldHVybiAoZSkgPT4ge1xuICAgICAgICAgICAgZS5tZXNzYWdlICs9ICdcXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4nO1xuICAgICAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9ICc8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4nXG4gICAgICAgICAgICAgICAgICAgICsgZXNjYXBlJDEoZS5tZXNzYWdlICsgJycsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICsgJzwvcHJlPic7XG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jb25zdCBtYXJrZWRJbnN0YW5jZSA9IG5ldyBNYXJrZWQoKTtcbmZ1bmN0aW9uIG1hcmtlZChzcmMsIG9wdCkge1xuICAgIHJldHVybiBtYXJrZWRJbnN0YW5jZS5wYXJzZShzcmMsIG9wdCk7XG59XG4vKipcbiAqIFNldHMgdGhlIGRlZmF1bHQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBIYXNoIG9mIG9wdGlvbnNcbiAqL1xubWFya2VkLm9wdGlvbnMgPVxuICAgIG1hcmtlZC5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgbWFya2VkSW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgbWFya2VkLmRlZmF1bHRzID0gbWFya2VkSW5zdGFuY2UuZGVmYXVsdHM7XG4gICAgICAgIGNoYW5nZURlZmF1bHRzKG1hcmtlZC5kZWZhdWx0cyk7XG4gICAgICAgIHJldHVybiBtYXJrZWQ7XG4gICAgfTtcbi8qKlxuICogR2V0cyB0aGUgb3JpZ2luYWwgbWFya2VkIGRlZmF1bHQgb3B0aW9ucy5cbiAqL1xubWFya2VkLmdldERlZmF1bHRzID0gX2dldERlZmF1bHRzO1xubWFya2VkLmRlZmF1bHRzID0gX2RlZmF1bHRzO1xuLyoqXG4gKiBVc2UgRXh0ZW5zaW9uXG4gKi9cbm1hcmtlZC51c2UgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIG1hcmtlZEluc3RhbmNlLnVzZSguLi5hcmdzKTtcbiAgICBtYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWRJbnN0YW5jZS5kZWZhdWx0cztcbiAgICBjaGFuZ2VEZWZhdWx0cyhtYXJrZWQuZGVmYXVsdHMpO1xuICAgIHJldHVybiBtYXJrZWQ7XG59O1xuLyoqXG4gKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gKi9cbm1hcmtlZC53YWxrVG9rZW5zID0gZnVuY3Rpb24gKHRva2VucywgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbWFya2VkSW5zdGFuY2Uud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKTtcbn07XG4vKipcbiAqIENvbXBpbGVzIG1hcmtkb3duIHRvIEhUTUwgd2l0aG91dCBlbmNsb3NpbmcgYHBgIHRhZy5cbiAqXG4gKiBAcGFyYW0gc3JjIFN0cmluZyBvZiBtYXJrZG93biBzb3VyY2UgdG8gYmUgY29tcGlsZWRcbiAqIEBwYXJhbSBvcHRpb25zIEhhc2ggb2Ygb3B0aW9uc1xuICogQHJldHVybiBTdHJpbmcgb2YgY29tcGlsZWQgSFRNTFxuICovXG5tYXJrZWQucGFyc2VJbmxpbmUgPSBtYXJrZWRJbnN0YW5jZS5wYXJzZUlubGluZTtcbi8qKlxuICogRXhwb3NlXG4gKi9cbm1hcmtlZC5QYXJzZXIgPSBfUGFyc2VyO1xubWFya2VkLnBhcnNlciA9IF9QYXJzZXIucGFyc2U7XG5tYXJrZWQuUmVuZGVyZXIgPSBfUmVuZGVyZXI7XG5tYXJrZWQuVGV4dFJlbmRlcmVyID0gX1RleHRSZW5kZXJlcjtcbm1hcmtlZC5MZXhlciA9IF9MZXhlcjtcbm1hcmtlZC5sZXhlciA9IF9MZXhlci5sZXg7XG5tYXJrZWQuVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbm1hcmtlZC5Ib29rcyA9IF9Ib29rcztcbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcbmNvbnN0IG9wdGlvbnMgPSBtYXJrZWQub3B0aW9ucztcbmNvbnN0IHNldE9wdGlvbnMgPSBtYXJrZWQuc2V0T3B0aW9ucztcbmNvbnN0IHVzZSA9IG1hcmtlZC51c2U7XG5jb25zdCB3YWxrVG9rZW5zID0gbWFya2VkLndhbGtUb2tlbnM7XG5jb25zdCBwYXJzZUlubGluZSA9IG1hcmtlZC5wYXJzZUlubGluZTtcbmNvbnN0IHBhcnNlID0gbWFya2VkO1xuY29uc3QgcGFyc2VyID0gX1BhcnNlci5wYXJzZTtcbmNvbnN0IGxleGVyID0gX0xleGVyLmxleDtcblxuZXhwb3J0IHsgX0hvb2tzIGFzIEhvb2tzLCBfTGV4ZXIgYXMgTGV4ZXIsIE1hcmtlZCwgX1BhcnNlciBhcyBQYXJzZXIsIF9SZW5kZXJlciBhcyBSZW5kZXJlciwgX1RleHRSZW5kZXJlciBhcyBUZXh0UmVuZGVyZXIsIF9Ub2tlbml6ZXIgYXMgVG9rZW5pemVyLCBfZGVmYXVsdHMgYXMgZGVmYXVsdHMsIF9nZXREZWZhdWx0cyBhcyBnZXREZWZhdWx0cywgbGV4ZXIsIG1hcmtlZCwgb3B0aW9ucywgcGFyc2UsIHBhcnNlSW5saW5lLCBwYXJzZXIsIHNldE9wdGlvbnMsIHVzZSwgd2Fsa1Rva2VucyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFya2VkLmVzbS5qcy5tYXBcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGRlZGVudCh0ZW1wbCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzdHJpbmdzID0gQXJyYXkuZnJvbSh0eXBlb2YgdGVtcGwgPT09ICdzdHJpbmcnID8gW3RlbXBsXSA6IHRlbXBsKTtcbiAgICBzdHJpbmdzW3N0cmluZ3MubGVuZ3RoIC0gMV0gPSBzdHJpbmdzW3N0cmluZ3MubGVuZ3RoIC0gMV0ucmVwbGFjZSgvXFxyP1xcbihbXFx0IF0qKSQvLCAnJyk7XG4gICAgdmFyIGluZGVudExlbmd0aHMgPSBzdHJpbmdzLnJlZHVjZShmdW5jdGlvbiAoYXJyLCBzdHIpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goL1xcbihbXFx0IF0rfCg/IVxccykuKS9nKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIuY29uY2F0KG1hdGNoZXMubWFwKGZ1bmN0aW9uIChtYXRjaCkgeyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gbWF0Y2gubWF0Y2goL1tcXHQgXS9nKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDsgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSwgW10pO1xuICAgIGlmIChpbmRlbnRMZW5ndGhzLmxlbmd0aCkge1xuICAgICAgICB2YXIgcGF0dGVybl8xID0gbmV3IFJlZ0V4cChcIlxcbltcXHQgXXtcIiArIE1hdGgubWluLmFwcGx5KE1hdGgsIGluZGVudExlbmd0aHMpICsgXCJ9XCIsICdnJyk7XG4gICAgICAgIHN0cmluZ3MgPSBzdHJpbmdzLm1hcChmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShwYXR0ZXJuXzEsICdcXG4nKTsgfSk7XG4gICAgfVxuICAgIHN0cmluZ3NbMF0gPSBzdHJpbmdzWzBdLnJlcGxhY2UoL15cXHI/XFxuLywgJycpO1xuICAgIHZhciBzdHJpbmcgPSBzdHJpbmdzWzBdO1xuICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaSkge1xuICAgICAgICB2YXIgZW5kZW50YXRpb25zID0gc3RyaW5nLm1hdGNoKC8oPzpefFxcbikoICopJC8pO1xuICAgICAgICB2YXIgZW5kZW50YXRpb24gPSBlbmRlbnRhdGlvbnMgPyBlbmRlbnRhdGlvbnNbMV0gOiAnJztcbiAgICAgICAgdmFyIGluZGVudGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICAgICAgICBpbmRlbnRlZFZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChzdHIsIGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gMCA/IHN0ciA6IFwiXCIgKyBlbmRlbnRhdGlvbiArIHN0cjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmluZyArPSBpbmRlbnRlZFZhbHVlICsgc3RyaW5nc1tpICsgMV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGRlZGVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHtcbiAgZGVjb2RlRW50aXRpZXNcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgaGFzS2F0ZXgsXG4gIGxvZyxcbiAgcmVuZGVyS2F0ZXhcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9jcmVhdGVUZXh0LnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL2hhbmRsZS1tYXJrZG93bi10ZXh0LnRzXG5pbXBvcnQgeyBtYXJrZWQgfSBmcm9tIFwibWFya2VkXCI7XG5pbXBvcnQgeyBkZWRlbnQgfSBmcm9tIFwidHMtZGVkZW50XCI7XG5mdW5jdGlvbiBwcmVwcm9jZXNzTWFya2Rvd24obWFya2Rvd24sIHsgbWFya2Rvd25BdXRvV3JhcCB9KSB7XG4gIGNvbnN0IHdpdGhvdXRCUiA9IG1hcmtkb3duLnJlcGxhY2UoLzxiclxcLz4vZywgXCJcXG5cIik7XG4gIGNvbnN0IHdpdGhvdXRNdWx0aXBsZU5ld2xpbmVzID0gd2l0aG91dEJSLnJlcGxhY2UoL1xcbnsyLH0vZywgXCJcXG5cIik7XG4gIGNvbnN0IHdpdGhvdXRFeHRyYVNwYWNlcyA9IGRlZGVudCh3aXRob3V0TXVsdGlwbGVOZXdsaW5lcyk7XG4gIGlmIChtYXJrZG93bkF1dG9XcmFwID09PSBmYWxzZSkge1xuICAgIHJldHVybiB3aXRob3V0RXh0cmFTcGFjZXMucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcbiAgfVxuICByZXR1cm4gd2l0aG91dEV4dHJhU3BhY2VzO1xufVxuX19uYW1lKHByZXByb2Nlc3NNYXJrZG93biwgXCJwcmVwcm9jZXNzTWFya2Rvd25cIik7XG5mdW5jdGlvbiBtYXJrZG93blRvTGluZXMobWFya2Rvd24sIGNvbmZpZyA9IHt9KSB7XG4gIGNvbnN0IHByZXByb2Nlc3NlZE1hcmtkb3duID0gcHJlcHJvY2Vzc01hcmtkb3duKG1hcmtkb3duLCBjb25maWcpO1xuICBjb25zdCBub2RlcyA9IG1hcmtlZC5sZXhlcihwcmVwcm9jZXNzZWRNYXJrZG93bik7XG4gIGNvbnN0IGxpbmVzID0gW1tdXTtcbiAgbGV0IGN1cnJlbnRMaW5lID0gMDtcbiAgZnVuY3Rpb24gcHJvY2Vzc05vZGUobm9kZSwgcGFyZW50VHlwZSA9IFwibm9ybWFsXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSBcInRleHRcIikge1xuICAgICAgY29uc3QgdGV4dExpbmVzID0gbm9kZS50ZXh0LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgdGV4dExpbmVzLmZvckVhY2goKHRleHRMaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgICAgIGxpbmVzLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICAgIHRleHRMaW5lLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh3b3JkKSA9PiB7XG4gICAgICAgICAgaWYgKHdvcmQpIHtcbiAgICAgICAgICAgIGxpbmVzW2N1cnJlbnRMaW5lXS5wdXNoKHsgY29udGVudDogd29yZCwgdHlwZTogcGFyZW50VHlwZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3Ryb25nXCIgfHwgbm9kZS50eXBlID09PSBcImVtXCIpIHtcbiAgICAgIG5vZGUudG9rZW5zLmZvckVhY2goKGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICAgIHByb2Nlc3NOb2RlKGNvbnRlbnROb2RlLCBub2RlLnR5cGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICBsaW5lc1tjdXJyZW50TGluZV0ucHVzaCh7IGNvbnRlbnQ6IG5vZGUudGV4dCwgdHlwZTogXCJub3JtYWxcIiB9KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKHByb2Nlc3NOb2RlLCBcInByb2Nlc3NOb2RlXCIpO1xuICBub2Rlcy5mb3JFYWNoKCh0cmVlTm9kZSkgPT4ge1xuICAgIGlmICh0cmVlTm9kZS50eXBlID09PSBcInBhcmFncmFwaFwiKSB7XG4gICAgICB0cmVlTm9kZS50b2tlbnM/LmZvckVhY2goKGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICAgIHByb2Nlc3NOb2RlKGNvbnRlbnROb2RlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHJlZU5vZGUudHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIGxpbmVzW2N1cnJlbnRMaW5lXS5wdXNoKHsgY29udGVudDogdHJlZU5vZGUudGV4dCwgdHlwZTogXCJub3JtYWxcIiB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGluZXM7XG59XG5fX25hbWUobWFya2Rvd25Ub0xpbmVzLCBcIm1hcmtkb3duVG9MaW5lc1wiKTtcbmZ1bmN0aW9uIG1hcmtkb3duVG9IVE1MKG1hcmtkb3duLCB7IG1hcmtkb3duQXV0b1dyYXAgfSA9IHt9KSB7XG4gIGNvbnN0IG5vZGVzID0gbWFya2VkLmxleGVyKG1hcmtkb3duKTtcbiAgZnVuY3Rpb24gb3V0cHV0KG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSBcInRleHRcIikge1xuICAgICAgaWYgKG1hcmtkb3duQXV0b1dyYXAgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnRleHQucmVwbGFjZSgvXFxuICovZywgXCI8YnIvPlwiKS5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGUudGV4dC5yZXBsYWNlKC9cXG4gKi9nLCBcIjxici8+XCIpO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInN0cm9uZ1wiKSB7XG4gICAgICByZXR1cm4gYDxzdHJvbmc+JHtub2RlLnRva2Vucz8ubWFwKG91dHB1dCkuam9pbihcIlwiKX08L3N0cm9uZz5gO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcImVtXCIpIHtcbiAgICAgIHJldHVybiBgPGVtPiR7bm9kZS50b2tlbnM/Lm1hcChvdXRwdXQpLmpvaW4oXCJcIil9PC9lbT5gO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInBhcmFncmFwaFwiKSB7XG4gICAgICByZXR1cm4gYDxwPiR7bm9kZS50b2tlbnM/Lm1hcChvdXRwdXQpLmpvaW4oXCJcIil9PC9wPmA7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3BhY2VcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICByZXR1cm4gYCR7bm9kZS50ZXh0fWA7XG4gICAgfVxuICAgIHJldHVybiBgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7bm9kZS50eXBlfWA7XG4gIH1cbiAgX19uYW1lKG91dHB1dCwgXCJvdXRwdXRcIik7XG4gIHJldHVybiBub2Rlcy5tYXAob3V0cHV0KS5qb2luKFwiXCIpO1xufVxuX19uYW1lKG1hcmtkb3duVG9IVE1MLCBcIm1hcmtkb3duVG9IVE1MXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvc3BsaXRUZXh0LnRzXG5mdW5jdGlvbiBzcGxpdFRleHRUb0NoYXJzKHRleHQpIHtcbiAgaWYgKEludGwuU2VnbWVudGVyKSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KHRleHQpXS5tYXAoKHMpID0+IHMuc2VnbWVudCk7XG4gIH1cbiAgcmV0dXJuIFsuLi50ZXh0XTtcbn1cbl9fbmFtZShzcGxpdFRleHRUb0NoYXJzLCBcInNwbGl0VGV4dFRvQ2hhcnNcIik7XG5mdW5jdGlvbiBzcGxpdFdvcmRUb0ZpdFdpZHRoKGNoZWNrRml0LCB3b3JkKSB7XG4gIGNvbnN0IGNoYXJhY3RlcnMgPSBzcGxpdFRleHRUb0NoYXJzKHdvcmQuY29udGVudCk7XG4gIHJldHVybiBzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uKGNoZWNrRml0LCBbXSwgY2hhcmFjdGVycywgd29yZC50eXBlKTtcbn1cbl9fbmFtZShzcGxpdFdvcmRUb0ZpdFdpZHRoLCBcInNwbGl0V29yZFRvRml0V2lkdGhcIik7XG5mdW5jdGlvbiBzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uKGNoZWNrRml0LCB1c2VkQ2hhcnMsIHJlbWFpbmluZ0NoYXJzLCB0eXBlKSB7XG4gIGlmIChyZW1haW5pbmdDaGFycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyBjb250ZW50OiB1c2VkQ2hhcnMuam9pbihcIlwiKSwgdHlwZSB9LFxuICAgICAgeyBjb250ZW50OiBcIlwiLCB0eXBlIH1cbiAgICBdO1xuICB9XG4gIGNvbnN0IFtuZXh0Q2hhciwgLi4ucmVzdF0gPSByZW1haW5pbmdDaGFycztcbiAgY29uc3QgbmV3V29yZCA9IFsuLi51c2VkQ2hhcnMsIG5leHRDaGFyXTtcbiAgaWYgKGNoZWNrRml0KFt7IGNvbnRlbnQ6IG5ld1dvcmQuam9pbihcIlwiKSwgdHlwZSB9XSkpIHtcbiAgICByZXR1cm4gc3BsaXRXb3JkVG9GaXRXaWR0aFJlY3Vyc2lvbihjaGVja0ZpdCwgbmV3V29yZCwgcmVzdCwgdHlwZSk7XG4gIH1cbiAgaWYgKHVzZWRDaGFycy5sZW5ndGggPT09IDAgJiYgbmV4dENoYXIpIHtcbiAgICB1c2VkQ2hhcnMucHVzaChuZXh0Q2hhcik7XG4gICAgcmVtYWluaW5nQ2hhcnMuc2hpZnQoKTtcbiAgfVxuICByZXR1cm4gW1xuICAgIHsgY29udGVudDogdXNlZENoYXJzLmpvaW4oXCJcIiksIHR5cGUgfSxcbiAgICB7IGNvbnRlbnQ6IHJlbWFpbmluZ0NoYXJzLmpvaW4oXCJcIiksIHR5cGUgfVxuICBdO1xufVxuX19uYW1lKHNwbGl0V29yZFRvRml0V2lkdGhSZWN1cnNpb24sIFwic3BsaXRXb3JkVG9GaXRXaWR0aFJlY3Vyc2lvblwiKTtcbmZ1bmN0aW9uIHNwbGl0TGluZVRvRml0V2lkdGgobGluZSwgY2hlY2tGaXQpIHtcbiAgaWYgKGxpbmUuc29tZSgoeyBjb250ZW50IH0pID0+IGNvbnRlbnQuaW5jbHVkZXMoXCJcXG5cIikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lXCIpO1xuICB9XG4gIHJldHVybiBzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uKGxpbmUsIGNoZWNrRml0KTtcbn1cbl9fbmFtZShzcGxpdExpbmVUb0ZpdFdpZHRoLCBcInNwbGl0TGluZVRvRml0V2lkdGhcIik7XG5mdW5jdGlvbiBzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uKHdvcmRzLCBjaGVja0ZpdCwgbGluZXMgPSBbXSwgbmV3TGluZSA9IFtdKSB7XG4gIGlmICh3b3Jkcy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAobmV3TGluZS5sZW5ndGggPiAwKSB7XG4gICAgICBsaW5lcy5wdXNoKG5ld0xpbmUpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXMubGVuZ3RoID4gMCA/IGxpbmVzIDogW107XG4gIH1cbiAgbGV0IGpvaW5lciA9IFwiXCI7XG4gIGlmICh3b3Jkc1swXS5jb250ZW50ID09PSBcIiBcIikge1xuICAgIGpvaW5lciA9IFwiIFwiO1xuICAgIHdvcmRzLnNoaWZ0KCk7XG4gIH1cbiAgY29uc3QgbmV4dFdvcmQgPSB3b3Jkcy5zaGlmdCgpID8/IHsgY29udGVudDogXCIgXCIsIHR5cGU6IFwibm9ybWFsXCIgfTtcbiAgY29uc3QgbGluZVdpdGhOZXh0V29yZCA9IFsuLi5uZXdMaW5lXTtcbiAgaWYgKGpvaW5lciAhPT0gXCJcIikge1xuICAgIGxpbmVXaXRoTmV4dFdvcmQucHVzaCh7IGNvbnRlbnQ6IGpvaW5lciwgdHlwZTogXCJub3JtYWxcIiB9KTtcbiAgfVxuICBsaW5lV2l0aE5leHRXb3JkLnB1c2gobmV4dFdvcmQpO1xuICBpZiAoY2hlY2tGaXQobGluZVdpdGhOZXh0V29yZCkpIHtcbiAgICByZXR1cm4gc3BsaXRMaW5lVG9GaXRXaWR0aFJlY3Vyc2lvbih3b3JkcywgY2hlY2tGaXQsIGxpbmVzLCBsaW5lV2l0aE5leHRXb3JkKTtcbiAgfVxuICBpZiAobmV3TGluZS5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaChuZXdMaW5lKTtcbiAgICB3b3Jkcy51bnNoaWZ0KG5leHRXb3JkKTtcbiAgfSBlbHNlIGlmIChuZXh0V29yZC5jb250ZW50KSB7XG4gICAgY29uc3QgW2xpbmUsIHJlc3RdID0gc3BsaXRXb3JkVG9GaXRXaWR0aChjaGVja0ZpdCwgbmV4dFdvcmQpO1xuICAgIGxpbmVzLnB1c2goW2xpbmVdKTtcbiAgICBpZiAocmVzdC5jb250ZW50KSB7XG4gICAgICB3b3Jkcy51bnNoaWZ0KHJlc3QpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3BsaXRMaW5lVG9GaXRXaWR0aFJlY3Vyc2lvbih3b3JkcywgY2hlY2tGaXQsIGxpbmVzKTtcbn1cbl9fbmFtZShzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uLCBcInNwbGl0TGluZVRvRml0V2lkdGhSZWN1cnNpb25cIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9jcmVhdGVUZXh0LnRzXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRvbSwgc3R5bGVGbikge1xuICBpZiAoc3R5bGVGbikge1xuICAgIGRvbS5hdHRyKFwic3R5bGVcIiwgc3R5bGVGbik7XG4gIH1cbn1cbl9fbmFtZShhcHBseVN0eWxlLCBcImFwcGx5U3R5bGVcIik7XG5hc3luYyBmdW5jdGlvbiBhZGRIdG1sU3BhbihlbGVtZW50LCBub2RlLCB3aWR0aCwgY2xhc3NlcywgYWRkQmFja2dyb3VuZCA9IGZhbHNlKSB7XG4gIGNvbnN0IGZvID0gZWxlbWVudC5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpO1xuICBjb25zdCBkaXYgPSBmby5hcHBlbmQoXCJ4aHRtbDpkaXZcIik7XG4gIGxldCBsYWJlbCA9IG5vZGUubGFiZWw7XG4gIGlmIChub2RlLmxhYmVsICYmIGhhc0thdGV4KG5vZGUubGFiZWwpKSB7XG4gICAgbGFiZWwgPSBhd2FpdCByZW5kZXJLYXRleChub2RlLmxhYmVsLnJlcGxhY2UoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgsIFwiXFxuXCIpLCBnZXRDb25maWcoKSk7XG4gIH1cbiAgY29uc3QgbGFiZWxDbGFzcyA9IG5vZGUuaXNOb2RlID8gXCJub2RlTGFiZWxcIiA6IFwiZWRnZUxhYmVsXCI7XG4gIGNvbnN0IHNwYW4gPSBkaXYuYXBwZW5kKFwic3BhblwiKTtcbiAgc3Bhbi5odG1sKGxhYmVsKTtcbiAgYXBwbHlTdHlsZShzcGFuLCBub2RlLmxhYmVsU3R5bGUpO1xuICBzcGFuLmF0dHIoXCJjbGFzc1wiLCBgJHtsYWJlbENsYXNzfSAke2NsYXNzZXN9YCk7XG4gIGFwcGx5U3R5bGUoZGl2LCBub2RlLmxhYmVsU3R5bGUpO1xuICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGUtY2VsbFwiKTtcbiAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJub3dyYXBcIik7XG4gIGRpdi5zdHlsZShcImxpbmUtaGVpZ2h0XCIsIFwiMS41XCIpO1xuICBkaXYuc3R5bGUoXCJtYXgtd2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICBkaXYuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpO1xuICBkaXYuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKTtcbiAgaWYgKGFkZEJhY2tncm91bmQpIHtcbiAgICBkaXYuYXR0cihcImNsYXNzXCIsIFwibGFiZWxCa2dcIik7XG4gIH1cbiAgbGV0IGJib3ggPSBkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBpZiAoYmJveC53aWR0aCA9PT0gd2lkdGgpIHtcbiAgICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIik7XG4gICAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJicmVhay1zcGFjZXNcIik7XG4gICAgZGl2LnN0eWxlKFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICAgIGJib3ggPSBkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG4gIHJldHVybiBmby5ub2RlKCk7XG59XG5fX25hbWUoYWRkSHRtbFNwYW4sIFwiYWRkSHRtbFNwYW5cIik7XG5mdW5jdGlvbiBjcmVhdGVUc3Bhbih0ZXh0RWxlbWVudCwgbGluZUluZGV4LCBsaW5lSGVpZ2h0KSB7XG4gIHJldHVybiB0ZXh0RWxlbWVudC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0ZXh0LW91dGVyLXRzcGFuXCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIGxpbmVJbmRleCAqIGxpbmVIZWlnaHQgLSAwLjEgKyBcImVtXCIpLmF0dHIoXCJkeVwiLCBsaW5lSGVpZ2h0ICsgXCJlbVwiKTtcbn1cbl9fbmFtZShjcmVhdGVUc3BhbiwgXCJjcmVhdGVUc3BhblwiKTtcbmZ1bmN0aW9uIGNvbXB1dGVXaWR0aE9mVGV4dChwYXJlbnROb2RlLCBsaW5lSGVpZ2h0LCBsaW5lKSB7XG4gIGNvbnN0IHRlc3RFbGVtZW50ID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpO1xuICBjb25zdCB0ZXN0U3BhbiA9IGNyZWF0ZVRzcGFuKHRlc3RFbGVtZW50LCAxLCBsaW5lSGVpZ2h0KTtcbiAgdXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXModGVzdFNwYW4sIGxpbmUpO1xuICBjb25zdCB0ZXh0TGVuZ3RoID0gdGVzdFNwYW4ubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO1xuICB0ZXN0RWxlbWVudC5yZW1vdmUoKTtcbiAgcmV0dXJuIHRleHRMZW5ndGg7XG59XG5fX25hbWUoY29tcHV0ZVdpZHRoT2ZUZXh0LCBcImNvbXB1dGVXaWR0aE9mVGV4dFwiKTtcbmZ1bmN0aW9uIGNvbXB1dGVEaW1lbnNpb25PZlRleHQocGFyZW50Tm9kZSwgbGluZUhlaWdodCwgdGV4dCkge1xuICBjb25zdCB0ZXN0RWxlbWVudCA9IHBhcmVudE5vZGUuYXBwZW5kKFwidGV4dFwiKTtcbiAgY29uc3QgdGVzdFNwYW4gPSBjcmVhdGVUc3Bhbih0ZXN0RWxlbWVudCwgMSwgbGluZUhlaWdodCk7XG4gIHVwZGF0ZVRleHRDb250ZW50QW5kU3R5bGVzKHRlc3RTcGFuLCBbeyBjb250ZW50OiB0ZXh0LCB0eXBlOiBcIm5vcm1hbFwiIH1dKTtcbiAgY29uc3QgdGV4dERpbWVuc2lvbiA9IHRlc3RTcGFuLm5vZGUoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGlmICh0ZXh0RGltZW5zaW9uKSB7XG4gICAgdGVzdEVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cbiAgcmV0dXJuIHRleHREaW1lbnNpb247XG59XG5fX25hbWUoY29tcHV0ZURpbWVuc2lvbk9mVGV4dCwgXCJjb21wdXRlRGltZW5zaW9uT2ZUZXh0XCIpO1xuZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVkVGV4dCh3aWR0aCwgZywgc3RydWN0dXJlZFRleHQsIGFkZEJhY2tncm91bmQgPSBmYWxzZSkge1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gMS4xO1xuICBjb25zdCBsYWJlbEdyb3VwID0gZy5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCBia2cgPSBsYWJlbEdyb3VwLmluc2VydChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKS5hdHRyKFwic3R5bGVcIiwgXCJzdHJva2U6IG5vbmVcIik7XG4gIGNvbnN0IHRleHRFbGVtZW50ID0gbGFiZWxHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIFwiLTEwLjFcIik7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RydWN0dXJlZFRleHQpIHtcbiAgICBjb25zdCBjaGVja1dpZHRoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobGluZTIpID0+IGNvbXB1dGVXaWR0aE9mVGV4dChsYWJlbEdyb3VwLCBsaW5lSGVpZ2h0LCBsaW5lMikgPD0gd2lkdGgsIFwiY2hlY2tXaWR0aFwiKTtcbiAgICBjb25zdCBsaW5lc1VuZGVyV2lkdGggPSBjaGVja1dpZHRoKGxpbmUpID8gW2xpbmVdIDogc3BsaXRMaW5lVG9GaXRXaWR0aChsaW5lLCBjaGVja1dpZHRoKTtcbiAgICBmb3IgKGNvbnN0IHByZXBhcmVkTGluZSBvZiBsaW5lc1VuZGVyV2lkdGgpIHtcbiAgICAgIGNvbnN0IHRzcGFuID0gY3JlYXRlVHNwYW4odGV4dEVsZW1lbnQsIGxpbmVJbmRleCwgbGluZUhlaWdodCk7XG4gICAgICB1cGRhdGVUZXh0Q29udGVudEFuZFN0eWxlcyh0c3BhbiwgcHJlcGFyZWRMaW5lKTtcbiAgICAgIGxpbmVJbmRleCsrO1xuICAgIH1cbiAgfVxuICBpZiAoYWRkQmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGJib3ggPSB0ZXh0RWxlbWVudC5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xuICAgIGJrZy5hdHRyKFwieFwiLCAtcGFkZGluZykuYXR0cihcInlcIiwgLXBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgMiAqIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgcmV0dXJuIGxhYmVsR3JvdXAubm9kZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZXh0RWxlbWVudC5ub2RlKCk7XG4gIH1cbn1cbl9fbmFtZShjcmVhdGVGb3JtYXR0ZWRUZXh0LCBcImNyZWF0ZUZvcm1hdHRlZFRleHRcIik7XG5mdW5jdGlvbiB1cGRhdGVUZXh0Q29udGVudEFuZFN0eWxlcyh0c3Bhbiwgd3JhcHBlZExpbmUpIHtcbiAgdHNwYW4udGV4dChcIlwiKTtcbiAgd3JhcHBlZExpbmUuZm9yRWFjaCgod29yZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpbm5lclRzcGFuID0gdHNwYW4uYXBwZW5kKFwidHNwYW5cIikuYXR0cihcImZvbnQtc3R5bGVcIiwgd29yZC50eXBlID09PSBcImVtXCIgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIikuYXR0cihcImNsYXNzXCIsIFwidGV4dC1pbm5lci10c3BhblwiKS5hdHRyKFwiZm9udC13ZWlnaHRcIiwgd29yZC50eXBlID09PSBcInN0cm9uZ1wiID8gXCJib2xkXCIgOiBcIm5vcm1hbFwiKTtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIGlubmVyVHNwYW4udGV4dCh3b3JkLmNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lclRzcGFuLnRleHQoXCIgXCIgKyB3b3JkLmNvbnRlbnQpO1xuICAgIH1cbiAgfSk7XG59XG5fX25hbWUodXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXMsIFwidXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXNcIik7XG5mdW5jdGlvbiByZXBsYWNlSWNvblN1YnN0cmluZyh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgL2ZhW2JrbHJzXT86ZmEtW1xcdy1dKy9nLFxuICAgIC8vIGNzcGVsbDogZGlzYWJsZS1saW5lXG4gICAgKHMpID0+IGA8aSBjbGFzcz0nJHtzLnJlcGxhY2UoXCI6XCIsIFwiIFwiKX0nPjwvaT5gXG4gICk7XG59XG5fX25hbWUocmVwbGFjZUljb25TdWJzdHJpbmcsIFwicmVwbGFjZUljb25TdWJzdHJpbmdcIik7XG52YXIgY3JlYXRlVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsLCB0ZXh0ID0gXCJcIiwge1xuICBzdHlsZSA9IFwiXCIsXG4gIGlzVGl0bGUgPSBmYWxzZSxcbiAgY2xhc3NlcyA9IFwiXCIsXG4gIHVzZUh0bWxMYWJlbHMgPSB0cnVlLFxuICBpc05vZGUgPSB0cnVlLFxuICB3aWR0aCA9IDIwMCxcbiAgYWRkU3ZnQmFja2dyb3VuZCA9IGZhbHNlXG59ID0ge30sIGNvbmZpZykgPT4ge1xuICBsb2cuaW5mbyhcbiAgICBcIlhZWiBjcmVhdGVUZXh0XCIsXG4gICAgdGV4dCxcbiAgICBzdHlsZSxcbiAgICBpc1RpdGxlLFxuICAgIGNsYXNzZXMsXG4gICAgdXNlSHRtbExhYmVscyxcbiAgICBpc05vZGUsXG4gICAgXCJhZGRTdmdCYWNrZ3JvdW5kOiBcIixcbiAgICBhZGRTdmdCYWNrZ3JvdW5kXG4gICk7XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgY29uc3QgaHRtbFRleHQgPSBtYXJrZG93blRvSFRNTCh0ZXh0LCBjb25maWcpO1xuICAgIGNvbnN0IGRlY29kZWRSZXBsYWNlZFRleHQgPSByZXBsYWNlSWNvblN1YnN0cmluZyhkZWNvZGVFbnRpdGllcyhodG1sVGV4dCkpO1xuICAgIGNvbnN0IGlucHV0Rm9yS2F0ZXggPSB0ZXh0LnJlcGxhY2UoL1xcXFxcXFxcL2csIFwiXFxcXFwiKTtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgaXNOb2RlLFxuICAgICAgbGFiZWw6IGhhc0thdGV4KHRleHQpID8gaW5wdXRGb3JLYXRleCA6IGRlY29kZWRSZXBsYWNlZFRleHQsXG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZS5yZXBsYWNlKFwiZmlsbDpcIiwgXCJjb2xvcjpcIilcbiAgICB9O1xuICAgIGNvbnN0IHZlcnRleE5vZGUgPSBhd2FpdCBhZGRIdG1sU3BhbihlbCwgbm9kZSwgd2lkdGgsIGNsYXNzZXMsIGFkZFN2Z0JhY2tncm91bmQpO1xuICAgIHJldHVybiB2ZXJ0ZXhOb2RlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNhbml0aXplQlIgPSB0ZXh0LnJlcGxhY2UoLzxiclxccypcXC8/Pi9nLCBcIjxici8+XCIpO1xuICAgIGNvbnN0IHN0cnVjdHVyZWRUZXh0ID0gbWFya2Rvd25Ub0xpbmVzKHNhbml0aXplQlIucmVwbGFjZShcIjxicj5cIiwgXCI8YnIvPlwiKSwgY29uZmlnKTtcbiAgICBjb25zdCBzdmdMYWJlbCA9IGNyZWF0ZUZvcm1hdHRlZFRleHQoXG4gICAgICB3aWR0aCxcbiAgICAgIGVsLFxuICAgICAgc3RydWN0dXJlZFRleHQsXG4gICAgICB0ZXh0ID8gYWRkU3ZnQmFja2dyb3VuZCA6IGZhbHNlXG4gICAgKTtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBpZiAoL3N0cm9rZTovLmV4ZWMoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUucmVwbGFjZShcInN0cm9rZTpcIiwgXCJsaW5lQ29sb3I6XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZUxhYmVsVGV4dFN0eWxlID0gc3R5bGUucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL2NvbG9yOi9nLCBcImZpbGw6XCIpO1xuICAgICAgc2VsZWN0KHN2Z0xhYmVsKS5hdHRyKFwic3R5bGVcIiwgbm9kZUxhYmVsVGV4dFN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZWRnZUxhYmVsUmVjdFN0eWxlID0gc3R5bGUucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL2JhY2tncm91bmQ6L2csIFwiZmlsbDpcIik7XG4gICAgICBzZWxlY3Qoc3ZnTGFiZWwpLnNlbGVjdChcInJlY3RcIikuYXR0cihcInN0eWxlXCIsIGVkZ2VMYWJlbFJlY3RTdHlsZS5yZXBsYWNlKC9iYWNrZ3JvdW5kOi9nLCBcImZpbGw6XCIpKTtcbiAgICAgIGNvbnN0IGVkZ2VMYWJlbFRleHRTdHlsZSA9IHN0eWxlLnJlcGxhY2UoL3N0cm9rZTpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL3N0cm9rZS13aWR0aDpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL2ZpbGw6W147XSs7Py9nLCBcIlwiKS5yZXBsYWNlKC9jb2xvcjovZywgXCJmaWxsOlwiKTtcbiAgICAgIHNlbGVjdChzdmdMYWJlbCkuc2VsZWN0KFwidGV4dFwiKS5hdHRyKFwic3R5bGVcIiwgZWRnZUxhYmVsVGV4dFN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59LCBcImNyZWF0ZVRleHRcIik7XG5cbmV4cG9ydCB7XG4gIGNvbXB1dGVEaW1lbnNpb25PZlRleHQsXG4gIHJlcGxhY2VJY29uU3Vic3RyaW5nLFxuICBjcmVhdGVUZXh0XG59O1xuIiwKICAgICJmdW5jdGlvbiB0KHQsZSxzKXtpZih0JiZ0Lmxlbmd0aCl7Y29uc3RbbixvXT1lLGE9TWF0aC5QSS8xODAqcyxoPU1hdGguY29zKGEpLHI9TWF0aC5zaW4oYSk7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3RbdCxzXT1lO2VbMF09KHQtbikqaC0ocy1vKSpyK24sZVsxXT0odC1uKSpyKyhzLW8pKmgrb319fWZ1bmN0aW9uIGUodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfWZ1bmN0aW9uIHMocyxuLG8sYT0xKXtjb25zdCBoPW8scj1NYXRoLm1heChuLC4xKSxpPXNbMF0mJnNbMF1bMF0mJlwibnVtYmVyXCI9PXR5cGVvZiBzWzBdWzBdP1tzXTpzLGM9WzAsMF07aWYoaClmb3IoY29uc3QgZSBvZiBpKXQoZSxjLGgpO2NvbnN0IGw9ZnVuY3Rpb24odCxzLG4pe2NvbnN0IG89W107Zm9yKGNvbnN0IHMgb2YgdCl7Y29uc3QgdD1bLi4uc107ZSh0WzBdLHRbdC5sZW5ndGgtMV0pfHx0LnB1c2goW3RbMF1bMF0sdFswXVsxXV0pLHQubGVuZ3RoPjImJm8ucHVzaCh0KX1jb25zdCBhPVtdO3M9TWF0aC5tYXgocywuMSk7Y29uc3QgaD1bXTtmb3IoY29uc3QgdCBvZiBvKWZvcihsZXQgZT0wO2U8dC5sZW5ndGgtMTtlKyspe2NvbnN0IHM9dFtlXSxuPXRbZSsxXTtpZihzWzFdIT09blsxXSl7Y29uc3QgdD1NYXRoLm1pbihzWzFdLG5bMV0pO2gucHVzaCh7eW1pbjp0LHltYXg6TWF0aC5tYXgoc1sxXSxuWzFdKSx4OnQ9PT1zWzFdP3NbMF06blswXSxpc2xvcGU6KG5bMF0tc1swXSkvKG5bMV0tc1sxXSl9KX19aWYoaC5zb3J0KCgodCxlKT0+dC55bWluPGUueW1pbj8tMTp0LnltaW4+ZS55bWluPzE6dC54PGUueD8tMTp0Lng+ZS54PzE6dC55bWF4PT09ZS55bWF4PzA6KHQueW1heC1lLnltYXgpL01hdGguYWJzKHQueW1heC1lLnltYXgpKSksIWgubGVuZ3RoKXJldHVybiBhO2xldCByPVtdLGk9aFswXS55bWluLGM9MDtmb3IoO3IubGVuZ3RofHxoLmxlbmd0aDspe2lmKGgubGVuZ3RoKXtsZXQgdD0tMTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoJiYhKGhbZV0ueW1pbj5pKTtlKyspdD1lO2guc3BsaWNlKDAsdCsxKS5mb3JFYWNoKCh0PT57ci5wdXNoKHtzOmksZWRnZTp0fSl9KSl9aWYocj1yLmZpbHRlcigodD0+ISh0LmVkZ2UueW1heDw9aSkpKSxyLnNvcnQoKCh0LGUpPT50LmVkZ2UueD09PWUuZWRnZS54PzA6KHQuZWRnZS54LWUuZWRnZS54KS9NYXRoLmFicyh0LmVkZ2UueC1lLmVkZ2UueCkpKSwoMSE9PW58fGMlcz09MCkmJnIubGVuZ3RoPjEpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kz0yKXtjb25zdCBlPXQrMTtpZihlPj1yLmxlbmd0aClicmVhaztjb25zdCBzPXJbdF0uZWRnZSxuPXJbZV0uZWRnZTthLnB1c2goW1tNYXRoLnJvdW5kKHMueCksaV0sW01hdGgucm91bmQobi54KSxpXV0pfWkrPW4sci5mb3JFYWNoKCh0PT57dC5lZGdlLng9dC5lZGdlLngrbip0LmVkZ2UuaXNsb3BlfSkpLGMrK31yZXR1cm4gYX0oaSxyLGEpO2lmKGgpe2Zvcihjb25zdCBlIG9mIGkpdChlLGMsLWgpOyFmdW5jdGlvbihlLHMsbil7Y29uc3Qgbz1bXTtlLmZvckVhY2goKHQ9Pm8ucHVzaCguLi50KSkpLHQobyxzLG4pfShsLGMsLWgpfXJldHVybiBsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbjtjb25zdCBvPWUuaGFjaHVyZUFuZ2xlKzkwO2xldCBhPWUuaGFjaHVyZUdhcDthPDAmJihhPTQqZS5zdHJva2VXaWR0aCksYT1NYXRoLnJvdW5kKE1hdGgubWF4KGEsLjEpKTtsZXQgaD0xO3JldHVybiBlLnJvdWdobmVzcz49MSYmKChudWxsPT09KG49ZS5yYW5kb21pemVyKXx8dm9pZCAwPT09bj92b2lkIDA6bi5uZXh0KCkpfHxNYXRoLnJhbmRvbSgpKT4uNyYmKGg9YSkscyh0LGEsbyxofHwxKX1jbGFzcyBve2NvbnN0cnVjdG9yKHQpe3RoaXMuaGVscGVyPXR9ZmlsbFBvbHlnb25zKHQsZSl7cmV0dXJuIHRoaXMuX2ZpbGxQb2x5Z29ucyh0LGUpfV9maWxsUG9seWdvbnModCxlKXtjb25zdCBzPW4odCxlKTtyZXR1cm57dHlwZTpcImZpbGxTa2V0Y2hcIixvcHM6dGhpcy5yZW5kZXJMaW5lcyhzLGUpfX1yZW5kZXJMaW5lcyh0LGUpe2NvbnN0IHM9W107Zm9yKGNvbnN0IG4gb2YgdClzLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyhuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdLGUpKTtyZXR1cm4gc319ZnVuY3Rpb24gYSh0KXtjb25zdCBlPXRbMF0scz10WzFdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZVswXS1zWzBdLDIpK01hdGgucG93KGVbMV0tc1sxXSwyKSl9Y2xhc3MgaCBleHRlbmRzIG97ZmlsbFBvbHlnb25zKHQsZSl7bGV0IHM9ZS5oYWNodXJlR2FwO3M8MCYmKHM9NCplLnN0cm9rZVdpZHRoKSxzPU1hdGgubWF4KHMsLjEpO2NvbnN0IG89bih0LE9iamVjdC5hc3NpZ24oe30sZSx7aGFjaHVyZUdhcDpzfSkpLGg9TWF0aC5QSS8xODAqZS5oYWNodXJlQW5nbGUscj1bXSxpPS41KnMqTWF0aC5jb3MoaCksYz0uNSpzKk1hdGguc2luKGgpO2Zvcihjb25zdFt0LGVdb2YgbylhKFt0LGVdKSYmci5wdXNoKFtbdFswXS1pLHRbMV0rY10sWy4uLmVdXSxbW3RbMF0raSx0WzFdLWNdLFsuLi5lXV0pO3JldHVybnt0eXBlOlwiZmlsbFNrZXRjaFwiLG9wczp0aGlzLnJlbmRlckxpbmVzKHIsZSl9fX1jbGFzcyByIGV4dGVuZHMgb3tmaWxsUG9seWdvbnModCxlKXtjb25zdCBzPXRoaXMuX2ZpbGxQb2x5Z29ucyh0LGUpLG49T2JqZWN0LmFzc2lnbih7fSxlLHtoYWNodXJlQW5nbGU6ZS5oYWNodXJlQW5nbGUrOTB9KSxvPXRoaXMuX2ZpbGxQb2x5Z29ucyh0LG4pO3JldHVybiBzLm9wcz1zLm9wcy5jb25jYXQoby5vcHMpLHN9fWNsYXNzIGl7Y29uc3RydWN0b3IodCl7dGhpcy5oZWxwZXI9dH1maWxsUG9seWdvbnModCxlKXtjb25zdCBzPW4odCxlPU9iamVjdC5hc3NpZ24oe30sZSx7aGFjaHVyZUFuZ2xlOjB9KSk7cmV0dXJuIHRoaXMuZG90c09uTGluZXMocyxlKX1kb3RzT25MaW5lcyh0LGUpe2NvbnN0IHM9W107bGV0IG49ZS5oYWNodXJlR2FwO248MCYmKG49NCplLnN0cm9rZVdpZHRoKSxuPU1hdGgubWF4KG4sLjEpO2xldCBvPWUuZmlsbFdlaWdodDtvPDAmJihvPWUuc3Ryb2tlV2lkdGgvMik7Y29uc3QgaD1uLzQ7Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3QgdD1hKHIpLGk9dC9uLGM9TWF0aC5jZWlsKGkpLTEsbD10LWMqbix1PShyWzBdWzBdK3JbMV1bMF0pLzItbi80LHA9TWF0aC5taW4oclswXVsxXSxyWzFdWzFdKTtmb3IobGV0IHQ9MDt0PGM7dCsrKXtjb25zdCBhPXArbCt0Km4scj11LWgrMipNYXRoLnJhbmRvbSgpKmgsaT1hLWgrMipNYXRoLnJhbmRvbSgpKmgsYz10aGlzLmhlbHBlci5lbGxpcHNlKHIsaSxvLG8sZSk7cy5wdXNoKC4uLmMub3BzKX19cmV0dXJue3R5cGU6XCJmaWxsU2tldGNoXCIsb3BzOnN9fX1jbGFzcyBje2NvbnN0cnVjdG9yKHQpe3RoaXMuaGVscGVyPXR9ZmlsbFBvbHlnb25zKHQsZSl7Y29uc3Qgcz1uKHQsZSk7cmV0dXJue3R5cGU6XCJmaWxsU2tldGNoXCIsb3BzOnRoaXMuZGFzaGVkTGluZShzLGUpfX1kYXNoZWRMaW5lKHQsZSl7Y29uc3Qgcz1lLmRhc2hPZmZzZXQ8MD9lLmhhY2h1cmVHYXA8MD80KmUuc3Ryb2tlV2lkdGg6ZS5oYWNodXJlR2FwOmUuZGFzaE9mZnNldCxuPWUuZGFzaEdhcDwwP2UuaGFjaHVyZUdhcDwwPzQqZS5zdHJva2VXaWR0aDplLmhhY2h1cmVHYXA6ZS5kYXNoR2FwLG89W107cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IGg9YSh0KSxyPU1hdGguZmxvb3IoaC8ocytuKSksaT0oaCtuLXIqKHMrbikpLzI7bGV0IGM9dFswXSxsPXRbMV07Y1swXT5sWzBdJiYoYz10WzFdLGw9dFswXSk7Y29uc3QgdT1NYXRoLmF0YW4oKGxbMV0tY1sxXSkvKGxbMF0tY1swXSkpO2ZvcihsZXQgdD0wO3Q8cjt0Kyspe2NvbnN0IGE9dCoocytuKSxoPWErcyxyPVtjWzBdK2EqTWF0aC5jb3ModSkraSpNYXRoLmNvcyh1KSxjWzFdK2EqTWF0aC5zaW4odSkraSpNYXRoLnNpbih1KV0sbD1bY1swXStoKk1hdGguY29zKHUpK2kqTWF0aC5jb3ModSksY1sxXStoKk1hdGguc2luKHUpK2kqTWF0aC5zaW4odSldO28ucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHJbMF0sclsxXSxsWzBdLGxbMV0sZSkpfX0pKSxvfX1jbGFzcyBse2NvbnN0cnVjdG9yKHQpe3RoaXMuaGVscGVyPXR9ZmlsbFBvbHlnb25zKHQsZSl7Y29uc3Qgcz1lLmhhY2h1cmVHYXA8MD80KmUuc3Ryb2tlV2lkdGg6ZS5oYWNodXJlR2FwLG89ZS56aWd6YWdPZmZzZXQ8MD9zOmUuemlnemFnT2Zmc2V0LGE9bih0LGU9T2JqZWN0LmFzc2lnbih7fSxlLHtoYWNodXJlR2FwOnMrb30pKTtyZXR1cm57dHlwZTpcImZpbGxTa2V0Y2hcIixvcHM6dGhpcy56aWd6YWdMaW5lcyhhLG8sZSl9fXppZ3phZ0xpbmVzKHQsZSxzKXtjb25zdCBuPVtdO3JldHVybiB0LmZvckVhY2goKHQ9Pntjb25zdCBvPWEodCksaD1NYXRoLnJvdW5kKG8vKDIqZSkpO2xldCByPXRbMF0saT10WzFdO3JbMF0+aVswXSYmKHI9dFsxXSxpPXRbMF0pO2NvbnN0IGM9TWF0aC5hdGFuKChpWzFdLXJbMV0pLyhpWzBdLXJbMF0pKTtmb3IobGV0IHQ9MDt0PGg7dCsrKXtjb25zdCBvPTIqdCplLGE9MioodCsxKSplLGg9TWF0aC5zcXJ0KDIqTWF0aC5wb3coZSwyKSksaT1bclswXStvKk1hdGguY29zKGMpLHJbMV0rbypNYXRoLnNpbihjKV0sbD1bclswXSthKk1hdGguY29zKGMpLHJbMV0rYSpNYXRoLnNpbihjKV0sdT1baVswXStoKk1hdGguY29zKGMrTWF0aC5QSS80KSxpWzFdK2gqTWF0aC5zaW4oYytNYXRoLlBJLzQpXTtuLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyhpWzBdLGlbMV0sdVswXSx1WzFdLHMpLC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHModVswXSx1WzFdLGxbMF0sbFsxXSxzKSl9fSkpLG59fWNvbnN0IHU9e307Y2xhc3MgcHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlZWQ9dH1uZXh0KCl7cmV0dXJuIHRoaXMuc2VlZD8oMioqMzEtMSYodGhpcy5zZWVkPU1hdGguaW11bCg0ODI3MSx0aGlzLnNlZWQpKSkvMioqMzE6TWF0aC5yYW5kb20oKX19Y29uc3QgZj0wLGQ9MSxnPTIsTT17QTo3LGE6NyxDOjYsYzo2LEg6MSxoOjEsTDoyLGw6MixNOjIsbToyLFE6NCxxOjQsUzo0LHM6NCxUOjIsdDoyLFY6MSx2OjEsWjowLHo6MH07ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0LnR5cGU9PT1lfWZ1bmN0aW9uIGIodCl7Y29uc3QgZT1bXSxzPWZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3IEFycmF5O2Zvcig7XCJcIiE9PXQ7KWlmKHQubWF0Y2goL14oWyBcXHRcXHJcXG4sXSspLykpdD10LnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKTtlbHNlIGlmKHQubWF0Y2goL14oW2FBY0NoSGxMbU1xUXNTdFR2VnpaXSkvKSllW2UubGVuZ3RoXT17dHlwZTpmLHRleHQ6UmVnRXhwLiQxfSx0PXQuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2V7aWYoIXQubWF0Y2goL14oKFstK10/WzAtOV0rKFxcLlswLTldKik/fFstK10/XFwuWzAtOV0rKShbZUVdWy0rXT9bMC05XSspPykvKSlyZXR1cm5bXTtlW2UubGVuZ3RoXT17dHlwZTpkLHRleHQ6YCR7cGFyc2VGbG9hdChSZWdFeHAuJDEpfWB9LHQ9dC5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCl9cmV0dXJuIGVbZS5sZW5ndGhdPXt0eXBlOmcsdGV4dDpcIlwifSxlfSh0KTtsZXQgbj1cIkJPRFwiLG89MCxhPXNbb107Zm9yKDshayhhLGcpOyl7bGV0IGg9MDtjb25zdCByPVtdO2lmKFwiQk9EXCI9PT1uKXtpZihcIk1cIiE9PWEudGV4dCYmXCJtXCIhPT1hLnRleHQpcmV0dXJuIGIoXCJNMCwwXCIrdCk7bysrLGg9TVthLnRleHRdLG49YS50ZXh0fWVsc2UgayhhLGQpP2g9TVtuXToobysrLGg9TVthLnRleHRdLG49YS50ZXh0KTtpZighKG8raDxzLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBkYXRhIGVuZGVkIHNob3J0XCIpO2ZvcihsZXQgdD1vO3Q8bytoO3QrKyl7Y29uc3QgZT1zW3RdO2lmKCFrKGUsZCkpdGhyb3cgbmV3IEVycm9yKFwiUGFyYW0gbm90IGEgbnVtYmVyOiBcIituK1wiLFwiK2UudGV4dCk7cltyLmxlbmd0aF09K2UudGV4dH1pZihcIm51bWJlclwiIT10eXBlb2YgTVtuXSl0aHJvdyBuZXcgRXJyb3IoXCJCYWQgc2VnbWVudDogXCIrbik7e2NvbnN0IHQ9e2tleTpuLGRhdGE6cn07ZS5wdXNoKHQpLG8rPWgsYT1zW29dLFwiTVwiPT09biYmKG49XCJMXCIpLFwibVwiPT09biYmKG49XCJsXCIpfX1yZXR1cm4gZX1mdW5jdGlvbiB5KHQpe2xldCBlPTAscz0wLG49MCxvPTA7Y29uc3QgYT1bXTtmb3IoY29uc3R7a2V5OmgsZGF0YTpyfW9mIHQpc3dpdGNoKGgpe2Nhc2VcIk1cIjphLnB1c2goe2tleTpcIk1cIixkYXRhOlsuLi5yXX0pLFtlLHNdPXIsW24sb109cjticmVhaztjYXNlXCJtXCI6ZSs9clswXSxzKz1yWzFdLGEucHVzaCh7a2V5OlwiTVwiLGRhdGE6W2Usc119KSxuPWUsbz1zO2JyZWFrO2Nhc2VcIkxcIjphLnB1c2goe2tleTpcIkxcIixkYXRhOlsuLi5yXX0pLFtlLHNdPXI7YnJlYWs7Y2FzZVwibFwiOmUrPXJbMF0scys9clsxXSxhLnB1c2goe2tleTpcIkxcIixkYXRhOltlLHNdfSk7YnJlYWs7Y2FzZVwiQ1wiOmEucHVzaCh7a2V5OlwiQ1wiLGRhdGE6Wy4uLnJdfSksZT1yWzRdLHM9cls1XTticmVhaztjYXNlXCJjXCI6e2NvbnN0IHQ9ci5tYXAoKCh0LG4pPT5uJTI/dCtzOnQrZSkpO2EucHVzaCh7a2V5OlwiQ1wiLGRhdGE6dH0pLGU9dFs0XSxzPXRbNV07YnJlYWt9Y2FzZVwiUVwiOmEucHVzaCh7a2V5OlwiUVwiLGRhdGE6Wy4uLnJdfSksZT1yWzJdLHM9clszXTticmVhaztjYXNlXCJxXCI6e2NvbnN0IHQ9ci5tYXAoKCh0LG4pPT5uJTI/dCtzOnQrZSkpO2EucHVzaCh7a2V5OlwiUVwiLGRhdGE6dH0pLGU9dFsyXSxzPXRbM107YnJlYWt9Y2FzZVwiQVwiOmEucHVzaCh7a2V5OlwiQVwiLGRhdGE6Wy4uLnJdfSksZT1yWzVdLHM9cls2XTticmVhaztjYXNlXCJhXCI6ZSs9cls1XSxzKz1yWzZdLGEucHVzaCh7a2V5OlwiQVwiLGRhdGE6W3JbMF0sclsxXSxyWzJdLHJbM10scls0XSxlLHNdfSk7YnJlYWs7Y2FzZVwiSFwiOmEucHVzaCh7a2V5OlwiSFwiLGRhdGE6Wy4uLnJdfSksZT1yWzBdO2JyZWFrO2Nhc2VcImhcIjplKz1yWzBdLGEucHVzaCh7a2V5OlwiSFwiLGRhdGE6W2VdfSk7YnJlYWs7Y2FzZVwiVlwiOmEucHVzaCh7a2V5OlwiVlwiLGRhdGE6Wy4uLnJdfSkscz1yWzBdO2JyZWFrO2Nhc2VcInZcIjpzKz1yWzBdLGEucHVzaCh7a2V5OlwiVlwiLGRhdGE6W3NdfSk7YnJlYWs7Y2FzZVwiU1wiOmEucHVzaCh7a2V5OlwiU1wiLGRhdGE6Wy4uLnJdfSksZT1yWzJdLHM9clszXTticmVhaztjYXNlXCJzXCI6e2NvbnN0IHQ9ci5tYXAoKCh0LG4pPT5uJTI/dCtzOnQrZSkpO2EucHVzaCh7a2V5OlwiU1wiLGRhdGE6dH0pLGU9dFsyXSxzPXRbM107YnJlYWt9Y2FzZVwiVFwiOmEucHVzaCh7a2V5OlwiVFwiLGRhdGE6Wy4uLnJdfSksZT1yWzBdLHM9clsxXTticmVhaztjYXNlXCJ0XCI6ZSs9clswXSxzKz1yWzFdLGEucHVzaCh7a2V5OlwiVFwiLGRhdGE6W2Usc119KTticmVhaztjYXNlXCJaXCI6Y2FzZVwielwiOmEucHVzaCh7a2V5OlwiWlwiLGRhdGE6W119KSxlPW4scz1vfXJldHVybiBhfWZ1bmN0aW9uIG0odCl7Y29uc3QgZT1bXTtsZXQgcz1cIlwiLG49MCxvPTAsYT0wLGg9MCxyPTAsaT0wO2Zvcihjb25zdHtrZXk6YyxkYXRhOmx9b2YgdCl7c3dpdGNoKGMpe2Nhc2VcIk1cIjplLnB1c2goe2tleTpcIk1cIixkYXRhOlsuLi5sXX0pLFtuLG9dPWwsW2EsaF09bDticmVhaztjYXNlXCJDXCI6ZS5wdXNoKHtrZXk6XCJDXCIsZGF0YTpbLi4ubF19KSxuPWxbNF0sbz1sWzVdLHI9bFsyXSxpPWxbM107YnJlYWs7Y2FzZVwiTFwiOmUucHVzaCh7a2V5OlwiTFwiLGRhdGE6Wy4uLmxdfSksW24sb109bDticmVhaztjYXNlXCJIXCI6bj1sWzBdLGUucHVzaCh7a2V5OlwiTFwiLGRhdGE6W24sb119KTticmVhaztjYXNlXCJWXCI6bz1sWzBdLGUucHVzaCh7a2V5OlwiTFwiLGRhdGE6W24sb119KTticmVhaztjYXNlXCJTXCI6e2xldCB0PTAsYT0wO1wiQ1wiPT09c3x8XCJTXCI9PT1zPyh0PW4rKG4tciksYT1vKyhvLWkpKToodD1uLGE9byksZS5wdXNoKHtrZXk6XCJDXCIsZGF0YTpbdCxhLC4uLmxdfSkscj1sWzBdLGk9bFsxXSxuPWxbMl0sbz1sWzNdO2JyZWFrfWNhc2VcIlRcIjp7Y29uc3RbdCxhXT1sO2xldCBoPTAsYz0wO1wiUVwiPT09c3x8XCJUXCI9PT1zPyhoPW4rKG4tciksYz1vKyhvLWkpKTooaD1uLGM9byk7Y29uc3QgdT1uKzIqKGgtbikvMyxwPW8rMiooYy1vKS8zLGY9dCsyKihoLXQpLzMsZD1hKzIqKGMtYSkvMztlLnB1c2goe2tleTpcIkNcIixkYXRhOlt1LHAsZixkLHQsYV19KSxyPWgsaT1jLG49dCxvPWE7YnJlYWt9Y2FzZVwiUVwiOntjb25zdFt0LHMsYSxoXT1sLGM9bisyKih0LW4pLzMsdT1vKzIqKHMtbykvMyxwPWErMioodC1hKS8zLGY9aCsyKihzLWgpLzM7ZS5wdXNoKHtrZXk6XCJDXCIsZGF0YTpbYyx1LHAsZixhLGhdfSkscj10LGk9cyxuPWEsbz1oO2JyZWFrfWNhc2VcIkFcIjp7Y29uc3QgdD1NYXRoLmFicyhsWzBdKSxzPU1hdGguYWJzKGxbMV0pLGE9bFsyXSxoPWxbM10scj1sWzRdLGk9bFs1XSxjPWxbNl07aWYoMD09PXR8fDA9PT1zKWUucHVzaCh7a2V5OlwiQ1wiLGRhdGE6W24sbyxpLGMsaSxjXX0pLG49aSxvPWM7ZWxzZSBpZihuIT09aXx8byE9PWMpe3gobixvLGksYyx0LHMsYSxoLHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh7a2V5OlwiQ1wiLGRhdGE6dH0pfSkpLG49aSxvPWN9YnJlYWt9Y2FzZVwiWlwiOmUucHVzaCh7a2V5OlwiWlwiLGRhdGE6W119KSxuPWEsbz1ofXM9Y31yZXR1cm4gZX1mdW5jdGlvbiB3KHQsZSxzKXtyZXR1cm5bdCpNYXRoLmNvcyhzKS1lKk1hdGguc2luKHMpLHQqTWF0aC5zaW4ocykrZSpNYXRoLmNvcyhzKV19ZnVuY3Rpb24geCh0LGUscyxuLG8sYSxoLHIsaSxjKXtjb25zdCBsPSh1PWgsTWF0aC5QSSp1LzE4MCk7dmFyIHU7bGV0IHA9W10sZj0wLGQ9MCxnPTAsTT0wO2lmKGMpW2YsZCxnLE1dPWM7ZWxzZXtbdCxlXT13KHQsZSwtbCksW3Msbl09dyhzLG4sLWwpO2NvbnN0IGg9KHQtcykvMixjPShlLW4pLzI7bGV0IHU9aCpoLyhvKm8pK2MqYy8oYSphKTt1PjEmJih1PU1hdGguc3FydCh1KSxvKj11LGEqPXUpO2NvbnN0IHA9bypvLGs9YSphLGI9cCprLXAqYypjLWsqaCpoLHk9cCpjKmMraypoKmgsbT0ocj09PWk/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKGIveSkpO2c9bSpvKmMvYSsodCtzKS8yLE09bSotYSpoL28rKGUrbikvMixmPU1hdGguYXNpbihwYXJzZUZsb2F0KCgoZS1NKS9hKS50b0ZpeGVkKDkpKSksZD1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKG4tTSkvYSkudG9GaXhlZCg5KSkpLHQ8ZyYmKGY9TWF0aC5QSS1mKSxzPGcmJihkPU1hdGguUEktZCksZjwwJiYoZj0yKk1hdGguUEkrZiksZDwwJiYoZD0yKk1hdGguUEkrZCksaSYmZj5kJiYoZi09MipNYXRoLlBJKSwhaSYmZD5mJiYoZC09MipNYXRoLlBJKX1sZXQgaz1kLWY7aWYoTWF0aC5hYnMoayk+MTIwKk1hdGguUEkvMTgwKXtjb25zdCB0PWQsZT1zLHI9bjtkPWkmJmQ+Zj9mKzEyMCpNYXRoLlBJLzE4MCoxOmYrMTIwKk1hdGguUEkvMTgwKi0xLHA9eChzPWcrbypNYXRoLmNvcyhkKSxuPU0rYSpNYXRoLnNpbihkKSxlLHIsbyxhLGgsMCxpLFtkLHQsZyxNXSl9az1kLWY7Y29uc3QgYj1NYXRoLmNvcyhmKSx5PU1hdGguc2luKGYpLG09TWF0aC5jb3MoZCksUD1NYXRoLnNpbihkKSx2PU1hdGgudGFuKGsvNCksUz00LzMqbyp2LE89NC8zKmEqdixMPVt0LGVdLFQ9W3QrUyp5LGUtTypiXSxEPVtzK1MqUCxuLU8qbV0sQT1bcyxuXTtpZihUWzBdPTIqTFswXS1UWzBdLFRbMV09MipMWzFdLVRbMV0sYylyZXR1cm5bVCxELEFdLmNvbmNhdChwKTt7cD1bVCxELEFdLmNvbmNhdChwKTtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8cC5sZW5ndGg7ZSs9Myl7Y29uc3Qgcz13KHBbZV1bMF0scFtlXVsxXSxsKSxuPXcocFtlKzFdWzBdLHBbZSsxXVsxXSxsKSxvPXcocFtlKzJdWzBdLHBbZSsyXVsxXSxsKTt0LnB1c2goW3NbMF0sc1sxXSxuWzBdLG5bMV0sb1swXSxvWzFdXSl9cmV0dXJuIHR9fWNvbnN0IFA9e3JhbmRPZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gRyh0LGUpfSxyYW5kT2Zmc2V0V2l0aFJhbmdlOmZ1bmN0aW9uKHQsZSxzKXtyZXR1cm4gRSh0LGUscyl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLHMsbixvKXtjb25zdCBhPVQocyxuLG8pO3JldHVybiBEKHQsZSxvLGEpLm9wc2V0fSxkb3VibGVMaW5lT3BzOmZ1bmN0aW9uKHQsZSxzLG4sbyl7cmV0dXJuICQodCxlLHMsbixvLCEwKX19O2Z1bmN0aW9uIHYodCxlLHMsbixvKXtyZXR1cm57dHlwZTpcInBhdGhcIixvcHM6JCh0LGUscyxuLG8pfX1mdW5jdGlvbiBTKHQsZSxzKXtjb25zdCBuPSh0fHxbXSkubGVuZ3RoO2lmKG4+Mil7Y29uc3Qgbz1bXTtmb3IobGV0IGU9MDtlPG4tMTtlKyspby5wdXNoKC4uLiQodFtlXVswXSx0W2VdWzFdLHRbZSsxXVswXSx0W2UrMV1bMV0scykpO3JldHVybiBlJiZvLnB1c2goLi4uJCh0W24tMV1bMF0sdFtuLTFdWzFdLHRbMF1bMF0sdFswXVsxXSxzKSkse3R5cGU6XCJwYXRoXCIsb3BzOm99fXJldHVybiAyPT09bj92KHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0scyk6e3R5cGU6XCJwYXRoXCIsb3BzOltdfX1mdW5jdGlvbiBPKHQsZSxzLG4sbyl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCwhMCxlKX0oW1t0LGVdLFt0K3MsZV0sW3QrcyxlK25dLFt0LGUrbl1dLG8pfWZ1bmN0aW9uIEwodCxlKXtpZih0Lmxlbmd0aCl7Y29uc3Qgcz1cIm51bWJlclwiPT10eXBlb2YgdFswXVswXT9bdF06dCxuPWooc1swXSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxvPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOmooc1swXSwxLjUqKDErLjIyKmUucm91Z2huZXNzKSx6KGUpKTtmb3IobGV0IHQ9MTt0PHMubGVuZ3RoO3QrKyl7Y29uc3QgYT1zW3RdO2lmKGEubGVuZ3RoKXtjb25zdCB0PWooYSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxzPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOmooYSwxLjUqKDErLjIyKmUucm91Z2huZXNzKSx6KGUpKTtmb3IoY29uc3QgZSBvZiB0KVwibW92ZVwiIT09ZS5vcCYmbi5wdXNoKGUpO2Zvcihjb25zdCB0IG9mIHMpXCJtb3ZlXCIhPT10Lm9wJiZvLnB1c2godCl9fXJldHVybnt0eXBlOlwicGF0aFwiLG9wczpuLmNvbmNhdChvKX19cmV0dXJue3R5cGU6XCJwYXRoXCIsb3BzOltdfX1mdW5jdGlvbiBUKHQsZSxzKXtjb25zdCBuPU1hdGguc3FydCgyKk1hdGguUEkqTWF0aC5zcXJ0KChNYXRoLnBvdyh0LzIsMikrTWF0aC5wb3coZS8yLDIpKS8yKSksbz1NYXRoLmNlaWwoTWF0aC5tYXgocy5jdXJ2ZVN0ZXBDb3VudCxzLmN1cnZlU3RlcENvdW50L01hdGguc3FydCgyMDApKm4pKSxhPTIqTWF0aC5QSS9vO2xldCBoPU1hdGguYWJzKHQvMikscj1NYXRoLmFicyhlLzIpO2NvbnN0IGk9MS1zLmN1cnZlRml0dGluZztyZXR1cm4gaCs9RyhoKmkscykscis9RyhyKmkscykse2luY3JlbWVudDphLHJ4Omgscnk6cn19ZnVuY3Rpb24gRCh0LGUscyxuKXtjb25zdFtvLGFdPUYobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLG4uaW5jcmVtZW50KkUoLjEsRSguNCwxLHMpLHMpLHMpO2xldCBoPXEobyxudWxsLHMpO2lmKCFzLmRpc2FibGVNdWx0aVN0cm9rZSYmMCE9PXMucm91Z2huZXNzKXtjb25zdFtvXT1GKG4uaW5jcmVtZW50LHQsZSxuLnJ4LG4ucnksMS41LDAscyksYT1xKG8sbnVsbCxzKTtoPWguY29uY2F0KGEpfXJldHVybntlc3RpbWF0ZWRQb2ludHM6YSxvcHNldDp7dHlwZTpcInBhdGhcIixvcHM6aH19fWZ1bmN0aW9uIEEodCxlLHMsbixvLGEsaCxyLGkpe2NvbnN0IGM9dCxsPWU7bGV0IHU9TWF0aC5hYnMocy8yKSxwPU1hdGguYWJzKG4vMik7dSs9RyguMDEqdSxpKSxwKz1HKC4wMSpwLGkpO2xldCBmPW8sZD1hO2Zvcig7ZjwwOylmKz0yKk1hdGguUEksZCs9MipNYXRoLlBJO2QtZj4yKk1hdGguUEkmJihmPTAsZD0yKk1hdGguUEkpO2NvbnN0IGc9MipNYXRoLlBJL2kuY3VydmVTdGVwQ291bnQsTT1NYXRoLm1pbihnLzIsKGQtZikvMiksaz1WKE0sYyxsLHUscCxmLGQsMSxpKTtpZighaS5kaXNhYmxlTXVsdGlTdHJva2Upe2NvbnN0IHQ9VihNLGMsbCx1LHAsZixkLDEuNSxpKTtrLnB1c2goLi4udCl9cmV0dXJuIGgmJihyP2sucHVzaCguLi4kKGMsbCxjK3UqTWF0aC5jb3MoZiksbCtwKk1hdGguc2luKGYpLGkpLC4uLiQoYyxsLGMrdSpNYXRoLmNvcyhkKSxsK3AqTWF0aC5zaW4oZCksaSkpOmsucHVzaCh7b3A6XCJsaW5lVG9cIixkYXRhOltjLGxdfSx7b3A6XCJsaW5lVG9cIixkYXRhOltjK3UqTWF0aC5jb3MoZiksbCtwKk1hdGguc2luKGYpXX0pKSx7dHlwZTpcInBhdGhcIixvcHM6a319ZnVuY3Rpb24gXyh0LGUpe2NvbnN0IHM9bSh5KGIodCkpKSxuPVtdO2xldCBvPVswLDBdLGE9WzAsMF07Zm9yKGNvbnN0e2tleTp0LGRhdGE6aH1vZiBzKXN3aXRjaCh0KXtjYXNlXCJNXCI6YT1baFswXSxoWzFdXSxvPVtoWzBdLGhbMV1dO2JyZWFrO2Nhc2VcIkxcIjpuLnB1c2goLi4uJChhWzBdLGFbMV0saFswXSxoWzFdLGUpKSxhPVtoWzBdLGhbMV1dO2JyZWFrO2Nhc2VcIkNcIjp7Y29uc3RbdCxzLG8scixpLGNdPWg7bi5wdXNoKC4uLloodCxzLG8scixpLGMsYSxlKSksYT1baSxjXTticmVha31jYXNlXCJaXCI6bi5wdXNoKC4uLiQoYVswXSxhWzFdLG9bMF0sb1sxXSxlKSksYT1bb1swXSxvWzFdXX1yZXR1cm57dHlwZTpcInBhdGhcIixvcHM6bn19ZnVuY3Rpb24gSSh0LGUpe2NvbnN0IHM9W107Zm9yKGNvbnN0IG4gb2YgdClpZihuLmxlbmd0aCl7Y29uc3QgdD1lLm1heFJhbmRvbW5lc3NPZmZzZXR8fDAsbz1uLmxlbmd0aDtpZihvPjIpe3MucHVzaCh7b3A6XCJtb3ZlXCIsZGF0YTpbblswXVswXStHKHQsZSksblswXVsxXStHKHQsZSldfSk7Zm9yKGxldCBhPTE7YTxvO2ErKylzLnB1c2goe29wOlwibGluZVRvXCIsZGF0YTpbblthXVswXStHKHQsZSksblthXVsxXStHKHQsZSldfSl9fXJldHVybnt0eXBlOlwiZmlsbFBhdGhcIixvcHM6c319ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe2xldCBzPXQuZmlsbFN0eWxlfHxcImhhY2h1cmVcIjtpZighdVtzXSlzd2l0Y2gocyl7Y2FzZVwiemlnemFnXCI6dVtzXXx8KHVbc109bmV3IGgoZSkpO2JyZWFrO2Nhc2VcImNyb3NzLWhhdGNoXCI6dVtzXXx8KHVbc109bmV3IHIoZSkpO2JyZWFrO2Nhc2VcImRvdHNcIjp1W3NdfHwodVtzXT1uZXcgaShlKSk7YnJlYWs7Y2FzZVwiZGFzaGVkXCI6dVtzXXx8KHVbc109bmV3IGMoZSkpO2JyZWFrO2Nhc2VcInppZ3phZy1saW5lXCI6dVtzXXx8KHVbc109bmV3IGwoZSkpO2JyZWFrO2RlZmF1bHQ6cz1cImhhY2h1cmVcIix1W3NdfHwodVtzXT1uZXcgbyhlKSl9cmV0dXJuIHVbc119KGUsUCkuZmlsbFBvbHlnb25zKHQsZSl9ZnVuY3Rpb24geih0KXtjb25zdCBlPU9iamVjdC5hc3NpZ24oe30sdCk7cmV0dXJuIGUucmFuZG9taXplcj12b2lkIDAsdC5zZWVkJiYoZS5zZWVkPXQuc2VlZCsxKSxlfWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQucmFuZG9taXplcnx8KHQucmFuZG9taXplcj1uZXcgcCh0LnNlZWR8fDApKSx0LnJhbmRvbWl6ZXIubmV4dCgpfWZ1bmN0aW9uIEUodCxlLHMsbj0xKXtyZXR1cm4gcy5yb3VnaG5lc3MqbiooVyhzKSooZS10KSt0KX1mdW5jdGlvbiBHKHQsZSxzPTEpe3JldHVybiBFKC10LHQsZSxzKX1mdW5jdGlvbiAkKHQsZSxzLG4sbyxhPSExKXtjb25zdCBoPWE/by5kaXNhYmxlTXVsdGlTdHJva2VGaWxsOm8uZGlzYWJsZU11bHRpU3Ryb2tlLHI9Uih0LGUscyxuLG8sITAsITEpO2lmKGgpcmV0dXJuIHI7Y29uc3QgaT1SKHQsZSxzLG4sbywhMCwhMCk7cmV0dXJuIHIuY29uY2F0KGkpfWZ1bmN0aW9uIFIodCxlLHMsbixvLGEsaCl7Y29uc3Qgcj1NYXRoLnBvdyh0LXMsMikrTWF0aC5wb3coZS1uLDIpLGk9TWF0aC5zcXJ0KHIpO2xldCBjPTE7Yz1pPDIwMD8xOmk+NTAwPy40Oi0uMDAxNjY2OCppKzEuMjMzMzM0O2xldCBsPW8ubWF4UmFuZG9tbmVzc09mZnNldHx8MDtsKmwqMTAwPnImJihsPWkvMTApO2NvbnN0IHU9bC8yLHA9LjIrLjIqVyhvKTtsZXQgZj1vLmJvd2luZypvLm1heFJhbmRvbW5lc3NPZmZzZXQqKG4tZSkvMjAwLGQ9by5ib3dpbmcqby5tYXhSYW5kb21uZXNzT2Zmc2V0Kih0LXMpLzIwMDtmPUcoZixvLGMpLGQ9RyhkLG8sYyk7Y29uc3QgZz1bXSxNPSgpPT5HKHUsbyxjKSxrPSgpPT5HKGwsbyxjKSxiPW8ucHJlc2VydmVWZXJ0aWNlcztyZXR1cm4gYSYmKGg/Zy5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOlt0KyhiPzA6TSgpKSxlKyhiPzA6TSgpKV19KTpnLnB1c2goe29wOlwibW92ZVwiLGRhdGE6W3QrKGI/MDpHKGwsbyxjKSksZSsoYj8wOkcobCxvLGMpKV19KSksaD9nLnB1c2goe29wOlwiYmN1cnZlVG9cIixkYXRhOltmK3QrKHMtdCkqcCtNKCksZCtlKyhuLWUpKnArTSgpLGYrdCsyKihzLXQpKnArTSgpLGQrZSsyKihuLWUpKnArTSgpLHMrKGI/MDpNKCkpLG4rKGI/MDpNKCkpXX0pOmcucHVzaCh7b3A6XCJiY3VydmVUb1wiLGRhdGE6W2YrdCsocy10KSpwK2soKSxkK2UrKG4tZSkqcCtrKCksZit0KzIqKHMtdCkqcCtrKCksZCtlKzIqKG4tZSkqcCtrKCkscysoYj8wOmsoKSksbisoYj8wOmsoKSldfSksZ31mdW5jdGlvbiBqKHQsZSxzKXtpZighdC5sZW5ndGgpcmV0dXJuW107Y29uc3Qgbj1bXTtuLnB1c2goW3RbMF1bMF0rRyhlLHMpLHRbMF1bMV0rRyhlLHMpXSksbi5wdXNoKFt0WzBdWzBdK0coZSxzKSx0WzBdWzFdK0coZSxzKV0pO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKW4ucHVzaChbdFtvXVswXStHKGUscyksdFtvXVsxXStHKGUscyldKSxvPT09dC5sZW5ndGgtMSYmbi5wdXNoKFt0W29dWzBdK0coZSxzKSx0W29dWzFdK0coZSxzKV0pO3JldHVybiBxKG4sbnVsbCxzKX1mdW5jdGlvbiBxKHQsZSxzKXtjb25zdCBuPXQubGVuZ3RoLG89W107aWYobj4zKXtjb25zdCBhPVtdLGg9MS1zLmN1cnZlVGlnaHRuZXNzO28ucHVzaCh7b3A6XCJtb3ZlXCIsZGF0YTpbdFsxXVswXSx0WzFdWzFdXX0pO2ZvcihsZXQgZT0xO2UrMjxuO2UrKyl7Y29uc3Qgcz10W2VdO2FbMF09W3NbMF0sc1sxXV0sYVsxXT1bc1swXSsoaCp0W2UrMV1bMF0taCp0W2UtMV1bMF0pLzYsc1sxXSsoaCp0W2UrMV1bMV0taCp0W2UtMV1bMV0pLzZdLGFbMl09W3RbZSsxXVswXSsoaCp0W2VdWzBdLWgqdFtlKzJdWzBdKS82LHRbZSsxXVsxXSsoaCp0W2VdWzFdLWgqdFtlKzJdWzFdKS82XSxhWzNdPVt0W2UrMV1bMF0sdFtlKzFdWzFdXSxvLnB1c2goe29wOlwiYmN1cnZlVG9cIixkYXRhOlthWzFdWzBdLGFbMV1bMV0sYVsyXVswXSxhWzJdWzFdLGFbM11bMF0sYVszXVsxXV19KX1pZihlJiYyPT09ZS5sZW5ndGgpe2NvbnN0IHQ9cy5tYXhSYW5kb21uZXNzT2Zmc2V0O28ucHVzaCh7b3A6XCJsaW5lVG9cIixkYXRhOltlWzBdK0codCxzKSxlWzFdK0codCxzKV19KX19ZWxzZSAzPT09bj8oby5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOlt0WzFdWzBdLHRbMV1bMV1dfSksby5wdXNoKHtvcDpcImJjdXJ2ZVRvXCIsZGF0YTpbdFsxXVswXSx0WzFdWzFdLHRbMl1bMF0sdFsyXVsxXSx0WzJdWzBdLHRbMl1bMV1dfSkpOjI9PT1uJiZvLnB1c2goLi4uUih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHMsITAsITApKTtyZXR1cm4gb31mdW5jdGlvbiBGKHQsZSxzLG4sbyxhLGgscil7Y29uc3QgaT1bXSxjPVtdO2lmKDA9PT1yLnJvdWdobmVzcyl7dC89NCxjLnB1c2goW2UrbipNYXRoLmNvcygtdCkscytvKk1hdGguc2luKC10KV0pO2ZvcihsZXQgYT0wO2E8PTIqTWF0aC5QSTthKz10KXtjb25zdCB0PVtlK24qTWF0aC5jb3MoYSkscytvKk1hdGguc2luKGEpXTtpLnB1c2godCksYy5wdXNoKHQpfWMucHVzaChbZStuKk1hdGguY29zKDApLHMrbypNYXRoLnNpbigwKV0pLGMucHVzaChbZStuKk1hdGguY29zKHQpLHMrbypNYXRoLnNpbih0KV0pfWVsc2V7Y29uc3QgbD1HKC41LHIpLU1hdGguUEkvMjtjLnB1c2goW0coYSxyKStlKy45Km4qTWF0aC5jb3MobC10KSxHKGEscikrcysuOSpvKk1hdGguc2luKGwtdCldKTtjb25zdCB1PTIqTWF0aC5QSStsLS4wMTtmb3IobGV0IGg9bDtoPHU7aCs9dCl7Y29uc3QgdD1bRyhhLHIpK2UrbipNYXRoLmNvcyhoKSxHKGEscikrcytvKk1hdGguc2luKGgpXTtpLnB1c2godCksYy5wdXNoKHQpfWMucHVzaChbRyhhLHIpK2UrbipNYXRoLmNvcyhsKzIqTWF0aC5QSSsuNSpoKSxHKGEscikrcytvKk1hdGguc2luKGwrMipNYXRoLlBJKy41KmgpXSksYy5wdXNoKFtHKGEscikrZSsuOTgqbipNYXRoLmNvcyhsK2gpLEcoYSxyKStzKy45OCpvKk1hdGguc2luKGwraCldKSxjLnB1c2goW0coYSxyKStlKy45Km4qTWF0aC5jb3MobCsuNSpoKSxHKGEscikrcysuOSpvKk1hdGguc2luKGwrLjUqaCldKX1yZXR1cm5bYyxpXX1mdW5jdGlvbiBWKHQsZSxzLG4sbyxhLGgscixpKXtjb25zdCBjPWErRyguMSxpKSxsPVtdO2wucHVzaChbRyhyLGkpK2UrLjkqbipNYXRoLmNvcyhjLXQpLEcocixpKStzKy45Km8qTWF0aC5zaW4oYy10KV0pO2ZvcihsZXQgYT1jO2E8PWg7YSs9dClsLnB1c2goW0cocixpKStlK24qTWF0aC5jb3MoYSksRyhyLGkpK3MrbypNYXRoLnNpbihhKV0pO3JldHVybiBsLnB1c2goW2UrbipNYXRoLmNvcyhoKSxzK28qTWF0aC5zaW4oaCldKSxsLnB1c2goW2UrbipNYXRoLmNvcyhoKSxzK28qTWF0aC5zaW4oaCldKSxxKGwsbnVsbCxpKX1mdW5jdGlvbiBaKHQsZSxzLG4sbyxhLGgscil7Y29uc3QgaT1bXSxjPVtyLm1heFJhbmRvbW5lc3NPZmZzZXR8fDEsKHIubWF4UmFuZG9tbmVzc09mZnNldHx8MSkrLjNdO2xldCBsPVswLDBdO2NvbnN0IHU9ci5kaXNhYmxlTXVsdGlTdHJva2U/MToyLHA9ci5wcmVzZXJ2ZVZlcnRpY2VzO2ZvcihsZXQgZj0wO2Y8dTtmKyspMD09PWY/aS5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOltoWzBdLGhbMV1dfSk6aS5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOltoWzBdKyhwPzA6RyhjWzBdLHIpKSxoWzFdKyhwPzA6RyhjWzBdLHIpKV19KSxsPXA/W28sYV06W28rRyhjW2ZdLHIpLGErRyhjW2ZdLHIpXSxpLnB1c2goe29wOlwiYmN1cnZlVG9cIixkYXRhOlt0K0coY1tmXSxyKSxlK0coY1tmXSxyKSxzK0coY1tmXSxyKSxuK0coY1tmXSxyKSxsWzBdLGxbMV1dfSk7cmV0dXJuIGl9ZnVuY3Rpb24gUSh0KXtyZXR1cm5bLi4udF19ZnVuY3Rpb24gSCh0LGU9MCl7Y29uc3Qgcz10Lmxlbmd0aDtpZihzPDMpdGhyb3cgbmV3IEVycm9yKFwiQSBjdXJ2ZSBtdXN0IGhhdmUgYXQgbGVhc3QgdGhyZWUgcG9pbnRzLlwiKTtjb25zdCBuPVtdO2lmKDM9PT1zKW4ucHVzaChRKHRbMF0pLFEodFsxXSksUSh0WzJdKSxRKHRbMl0pKTtlbHNle2NvbnN0IHM9W107cy5wdXNoKHRbMF0sdFswXSk7Zm9yKGxldCBlPTE7ZTx0Lmxlbmd0aDtlKyspcy5wdXNoKHRbZV0pLGU9PT10Lmxlbmd0aC0xJiZzLnB1c2godFtlXSk7Y29uc3Qgbz1bXSxhPTEtZTtuLnB1c2goUShzWzBdKSk7Zm9yKGxldCB0PTE7dCsyPHMubGVuZ3RoO3QrKyl7Y29uc3QgZT1zW3RdO29bMF09W2VbMF0sZVsxXV0sb1sxXT1bZVswXSsoYSpzW3QrMV1bMF0tYSpzW3QtMV1bMF0pLzYsZVsxXSsoYSpzW3QrMV1bMV0tYSpzW3QtMV1bMV0pLzZdLG9bMl09W3NbdCsxXVswXSsoYSpzW3RdWzBdLWEqc1t0KzJdWzBdKS82LHNbdCsxXVsxXSsoYSpzW3RdWzFdLWEqc1t0KzJdWzFdKS82XSxvWzNdPVtzW3QrMV1bMF0sc1t0KzFdWzFdXSxuLnB1c2gob1sxXSxvWzJdLG9bM10pfX1yZXR1cm4gbn1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIE1hdGgucG93KHRbMF0tZVswXSwyKStNYXRoLnBvdyh0WzFdLWVbMV0sMil9ZnVuY3Rpb24gQih0LGUscyl7Y29uc3Qgbj1OKGUscyk7aWYoMD09PW4pcmV0dXJuIE4odCxlKTtsZXQgbz0oKHRbMF0tZVswXSkqKHNbMF0tZVswXSkrKHRbMV0tZVsxXSkqKHNbMV0tZVsxXSkpL247cmV0dXJuIG89TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKSxOKHQsSihlLHMsbykpfWZ1bmN0aW9uIEoodCxlLHMpe3JldHVyblt0WzBdKyhlWzBdLXRbMF0pKnMsdFsxXSsoZVsxXS10WzFdKSpzXX1mdW5jdGlvbiBLKHQsZSxzLG4pe2NvbnN0IG89bnx8W107aWYoZnVuY3Rpb24odCxlKXtjb25zdCBzPXRbZSswXSxuPXRbZSsxXSxvPXRbZSsyXSxhPXRbZSszXTtsZXQgaD0zKm5bMF0tMipzWzBdLWFbMF07aCo9aDtsZXQgcj0zKm5bMV0tMipzWzFdLWFbMV07cio9cjtsZXQgaT0zKm9bMF0tMiphWzBdLXNbMF07aSo9aTtsZXQgYz0zKm9bMV0tMiphWzFdLXNbMV07cmV0dXJuIGMqPWMsaDxpJiYoaD1pKSxyPGMmJihyPWMpLGgrcn0odCxlKTxzKXtjb25zdCBzPXRbZSswXTtpZihvLmxlbmd0aCl7KGE9b1tvLmxlbmd0aC0xXSxoPXMsTWF0aC5zcXJ0KE4oYSxoKSkpPjEmJm8ucHVzaChzKX1lbHNlIG8ucHVzaChzKTtvLnB1c2godFtlKzNdKX1lbHNle2NvbnN0IG49LjUsYT10W2UrMF0saD10W2UrMV0scj10W2UrMl0saT10W2UrM10sYz1KKGEsaCxuKSxsPUooaCxyLG4pLHU9SihyLGksbikscD1KKGMsbCxuKSxmPUoobCx1LG4pLGQ9SihwLGYsbik7SyhbYSxjLHAsZF0sMCxzLG8pLEsoW2QsZix1LGldLDAscyxvKX12YXIgYSxoO3JldHVybiBvfWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gWCh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gWCh0LGUscyxuLG8pe2NvbnN0IGE9b3x8W10saD10W2VdLHI9dFtzLTFdO2xldCBpPTAsYz0xO2ZvcihsZXQgbj1lKzE7bjxzLTE7KytuKXtjb25zdCBlPUIodFtuXSxoLHIpO2U+aSYmKGk9ZSxjPW4pfXJldHVybiBNYXRoLnNxcnQoaSk+bj8oWCh0LGUsYysxLG4sYSksWCh0LGMscyxuLGEpKTooYS5sZW5ndGh8fGEucHVzaChoKSxhLnB1c2gocikpLGF9ZnVuY3Rpb24gWSh0LGU9LjE1LHMpe2NvbnN0IG49W10sbz0odC5sZW5ndGgtMSkvMztmb3IobGV0IHM9MDtzPG87cysrKXtLKHQsMypzLGUsbil9cmV0dXJuIHMmJnM+MD9YKG4sMCxuLmxlbmd0aCxzKTpufWNvbnN0IHR0PVwibm9uZVwiO2NsYXNzIGV0e2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdE9wdGlvbnM9e21heFJhbmRvbW5lc3NPZmZzZXQ6Mixyb3VnaG5lc3M6MSxib3dpbmc6MSxzdHJva2U6XCIjMDAwXCIsc3Ryb2tlV2lkdGg6MSxjdXJ2ZVRpZ2h0bmVzczowLGN1cnZlRml0dGluZzouOTUsY3VydmVTdGVwQ291bnQ6OSxmaWxsU3R5bGU6XCJoYWNodXJlXCIsZmlsbFdlaWdodDotMSxoYWNodXJlQW5nbGU6LTQxLGhhY2h1cmVHYXA6LTEsZGFzaE9mZnNldDotMSxkYXNoR2FwOi0xLHppZ3phZ09mZnNldDotMSxzZWVkOjAsZGlzYWJsZU11bHRpU3Ryb2tlOiExLGRpc2FibGVNdWx0aVN0cm9rZUZpbGw6ITEscHJlc2VydmVWZXJ0aWNlczohMSxmaWxsU2hhcGVSb3VnaG5lc3NHYWluOi44fSx0aGlzLmNvbmZpZz10fHx7fSx0aGlzLmNvbmZpZy5vcHRpb25zJiYodGhpcy5kZWZhdWx0T3B0aW9ucz10aGlzLl9vKHRoaXMuY29uZmlnLm9wdGlvbnMpKX1zdGF0aWMgbmV3U2VlZCgpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMioqMzEpfV9vKHQpe3JldHVybiB0P09iamVjdC5hc3NpZ24oe30sdGhpcy5kZWZhdWx0T3B0aW9ucyx0KTp0aGlzLmRlZmF1bHRPcHRpb25zfV9kKHQsZSxzKXtyZXR1cm57c2hhcGU6dCxzZXRzOmV8fFtdLG9wdGlvbnM6c3x8dGhpcy5kZWZhdWx0T3B0aW9uc319bGluZSh0LGUscyxuLG8pe2NvbnN0IGE9dGhpcy5fbyhvKTtyZXR1cm4gdGhpcy5fZChcImxpbmVcIixbdih0LGUscyxuLGEpXSxhKX1yZWN0YW5nbGUodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuX28obyksaD1bXSxyPU8odCxlLHMsbixhKTtpZihhLmZpbGwpe2NvbnN0IG89W1t0LGVdLFt0K3MsZV0sW3QrcyxlK25dLFt0LGUrbl1dO1wic29saWRcIj09PWEuZmlsbFN0eWxlP2gucHVzaChJKFtvXSxhKSk6aC5wdXNoKEMoW29dLGEpKX1yZXR1cm4gYS5zdHJva2UhPT10dCYmaC5wdXNoKHIpLHRoaXMuX2QoXCJyZWN0YW5nbGVcIixoLGEpfWVsbGlwc2UodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuX28obyksaD1bXSxyPVQocyxuLGEpLGk9RCh0LGUsYSxyKTtpZihhLmZpbGwpaWYoXCJzb2xpZFwiPT09YS5maWxsU3R5bGUpe2NvbnN0IHM9RCh0LGUsYSxyKS5vcHNldDtzLnR5cGU9XCJmaWxsUGF0aFwiLGgucHVzaChzKX1lbHNlIGgucHVzaChDKFtpLmVzdGltYXRlZFBvaW50c10sYSkpO3JldHVybiBhLnN0cm9rZSE9PXR0JiZoLnB1c2goaS5vcHNldCksdGhpcy5fZChcImVsbGlwc2VcIixoLGEpfWNpcmNsZSh0LGUscyxuKXtjb25zdCBvPXRoaXMuZWxsaXBzZSh0LGUscyxzLG4pO3JldHVybiBvLnNoYXBlPVwiY2lyY2xlXCIsb31saW5lYXJQYXRoKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpO3JldHVybiB0aGlzLl9kKFwibGluZWFyUGF0aFwiLFtTKHQsITEscyldLHMpfWFyYyh0LGUscyxuLG8sYSxoPSExLHIpe2NvbnN0IGk9dGhpcy5fbyhyKSxjPVtdLGw9QSh0LGUscyxuLG8sYSxoLCEwLGkpO2lmKGgmJmkuZmlsbClpZihcInNvbGlkXCI9PT1pLmZpbGxTdHlsZSl7Y29uc3QgaD1PYmplY3QuYXNzaWduKHt9LGkpO2guZGlzYWJsZU11bHRpU3Ryb2tlPSEwO2NvbnN0IHI9QSh0LGUscyxuLG8sYSwhMCwhMSxoKTtyLnR5cGU9XCJmaWxsUGF0aFwiLGMucHVzaChyKX1lbHNlIGMucHVzaChmdW5jdGlvbih0LGUscyxuLG8sYSxoKXtjb25zdCByPXQsaT1lO2xldCBjPU1hdGguYWJzKHMvMiksbD1NYXRoLmFicyhuLzIpO2MrPUcoLjAxKmMsaCksbCs9RyguMDEqbCxoKTtsZXQgdT1vLHA9YTtmb3IoO3U8MDspdSs9MipNYXRoLlBJLHArPTIqTWF0aC5QSTtwLXU+MipNYXRoLlBJJiYodT0wLHA9MipNYXRoLlBJKTtjb25zdCBmPShwLXUpL2guY3VydmVTdGVwQ291bnQsZD1bXTtmb3IobGV0IHQ9dTt0PD1wO3QrPWYpZC5wdXNoKFtyK2MqTWF0aC5jb3ModCksaStsKk1hdGguc2luKHQpXSk7cmV0dXJuIGQucHVzaChbcitjKk1hdGguY29zKHApLGkrbCpNYXRoLnNpbihwKV0pLGQucHVzaChbcixpXSksQyhbZF0saCl9KHQsZSxzLG4sbyxhLGkpKTtyZXR1cm4gaS5zdHJva2UhPT10dCYmYy5wdXNoKGwpLHRoaXMuX2QoXCJhcmNcIixjLGkpfWN1cnZlKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpLG49W10sbz1MKHQscyk7aWYocy5maWxsJiZzLmZpbGwhPT10dClpZihcInNvbGlkXCI9PT1zLmZpbGxTdHlsZSl7Y29uc3QgZT1MKHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtkaXNhYmxlTXVsdGlTdHJva2U6ITAscm91Z2huZXNzOnMucm91Z2huZXNzP3Mucm91Z2huZXNzK3MuZmlsbFNoYXBlUm91Z2huZXNzR2FpbjowfSkpO24ucHVzaCh7dHlwZTpcImZpbGxQYXRoXCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGUub3BzKX0pfWVsc2V7Y29uc3QgZT1bXSxvPXQ7aWYoby5sZW5ndGgpe2NvbnN0IHQ9XCJudW1iZXJcIj09dHlwZW9mIG9bMF1bMF0/W29dOm87Zm9yKGNvbnN0IG4gb2YgdCluLmxlbmd0aDwzP2UucHVzaCguLi5uKTozPT09bi5sZW5ndGg/ZS5wdXNoKC4uLlkoSChbblswXSxuWzBdLG5bMV0sblsyXV0pLDEwLCgxK3Mucm91Z2huZXNzKS8yKSk6ZS5wdXNoKC4uLlkoSChuKSwxMCwoMStzLnJvdWdobmVzcykvMikpfWUubGVuZ3RoJiZuLnB1c2goQyhbZV0scykpfXJldHVybiBzLnN0cm9rZSE9PXR0JiZuLnB1c2gobyksdGhpcy5fZChcImN1cnZlXCIsbixzKX1wb2x5Z29uKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpLG49W10sbz1TKHQsITAscyk7cmV0dXJuIHMuZmlsbCYmKFwic29saWRcIj09PXMuZmlsbFN0eWxlP24ucHVzaChJKFt0XSxzKSk6bi5wdXNoKEMoW3RdLHMpKSkscy5zdHJva2UhPT10dCYmbi5wdXNoKG8pLHRoaXMuX2QoXCJwb2x5Z29uXCIsbixzKX1wYXRoKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpLG49W107aWYoIXQpcmV0dXJuIHRoaXMuX2QoXCJwYXRoXCIsbixzKTt0PSh0fHxcIlwiKS5yZXBsYWNlKC9cXG4vZyxcIiBcIikucmVwbGFjZSgvKC1cXHMpL2csXCItXCIpLnJlcGxhY2UoXCIvKHNzKS9nXCIsXCIgXCIpO2NvbnN0IG89cy5maWxsJiZcInRyYW5zcGFyZW50XCIhPT1zLmZpbGwmJnMuZmlsbCE9PXR0LGE9cy5zdHJva2UhPT10dCxoPSEhKHMuc2ltcGxpZmljYXRpb24mJnMuc2ltcGxpZmljYXRpb248MSkscj1mdW5jdGlvbih0LGUscyl7Y29uc3Qgbj1tKHkoYih0KSkpLG89W107bGV0IGE9W10saD1bMCwwXSxyPVtdO2NvbnN0IGk9KCk9PntyLmxlbmd0aD49NCYmYS5wdXNoKC4uLlkocixlKSkscj1bXX0sYz0oKT0+e2koKSxhLmxlbmd0aCYmKG8ucHVzaChhKSxhPVtdKX07Zm9yKGNvbnN0e2tleTp0LGRhdGE6ZX1vZiBuKXN3aXRjaCh0KXtjYXNlXCJNXCI6YygpLGg9W2VbMF0sZVsxXV0sYS5wdXNoKGgpO2JyZWFrO2Nhc2VcIkxcIjppKCksYS5wdXNoKFtlWzBdLGVbMV1dKTticmVhaztjYXNlXCJDXCI6aWYoIXIubGVuZ3RoKXtjb25zdCB0PWEubGVuZ3RoP2FbYS5sZW5ndGgtMV06aDtyLnB1c2goW3RbMF0sdFsxXV0pfXIucHVzaChbZVswXSxlWzFdXSksci5wdXNoKFtlWzJdLGVbM11dKSxyLnB1c2goW2VbNF0sZVs1XV0pO2JyZWFrO2Nhc2VcIlpcIjppKCksYS5wdXNoKFtoWzBdLGhbMV1dKX1pZihjKCksIXMpcmV0dXJuIG87Y29uc3QgbD1bXTtmb3IoY29uc3QgdCBvZiBvKXtjb25zdCBlPVUodCxzKTtlLmxlbmd0aCYmbC5wdXNoKGUpfXJldHVybiBsfSh0LDEsaD80LTQqKHMuc2ltcGxpZmljYXRpb258fDEpOigxK3Mucm91Z2huZXNzKS8yKSxpPV8odCxzKTtpZihvKWlmKFwic29saWRcIj09PXMuZmlsbFN0eWxlKWlmKDE9PT1yLmxlbmd0aCl7Y29uc3QgZT1fKHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtkaXNhYmxlTXVsdGlTdHJva2U6ITAscm91Z2huZXNzOnMucm91Z2huZXNzP3Mucm91Z2huZXNzK3MuZmlsbFNoYXBlUm91Z2huZXNzR2FpbjowfSkpO24ucHVzaCh7dHlwZTpcImZpbGxQYXRoXCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGUub3BzKX0pfWVsc2Ugbi5wdXNoKEkocixzKSk7ZWxzZSBuLnB1c2goQyhyLHMpKTtyZXR1cm4gYSYmKGg/ci5mb3JFYWNoKCh0PT57bi5wdXNoKFModCwhMSxzKSl9KSk6bi5wdXNoKGkpKSx0aGlzLl9kKFwicGF0aFwiLG4scyl9b3BzVG9QYXRoKHQsZSl7bGV0IHM9XCJcIjtmb3IoY29uc3QgbiBvZiB0Lm9wcyl7Y29uc3QgdD1cIm51bWJlclwiPT10eXBlb2YgZSYmZT49MD9uLmRhdGEubWFwKCh0PT4rdC50b0ZpeGVkKGUpKSk6bi5kYXRhO3N3aXRjaChuLm9wKXtjYXNlXCJtb3ZlXCI6cys9YE0ke3RbMF19ICR7dFsxXX0gYDticmVhaztjYXNlXCJiY3VydmVUb1wiOnMrPWBDJHt0WzBdfSAke3RbMV19LCAke3RbMl19ICR7dFszXX0sICR7dFs0XX0gJHt0WzVdfSBgO2JyZWFrO2Nhc2VcImxpbmVUb1wiOnMrPWBMJHt0WzBdfSAke3RbMV19IGB9fXJldHVybiBzLnRyaW0oKX10b1BhdGhzKHQpe2NvbnN0IGU9dC5zZXRzfHxbXSxzPXQub3B0aW9uc3x8dGhpcy5kZWZhdWx0T3B0aW9ucyxuPVtdO2Zvcihjb25zdCB0IG9mIGUpe2xldCBlPW51bGw7c3dpdGNoKHQudHlwZSl7Y2FzZVwicGF0aFwiOmU9e2Q6dGhpcy5vcHNUb1BhdGgodCksc3Ryb2tlOnMuc3Ryb2tlLHN0cm9rZVdpZHRoOnMuc3Ryb2tlV2lkdGgsZmlsbDp0dH07YnJlYWs7Y2FzZVwiZmlsbFBhdGhcIjplPXtkOnRoaXMub3BzVG9QYXRoKHQpLHN0cm9rZTp0dCxzdHJva2VXaWR0aDowLGZpbGw6cy5maWxsfHx0dH07YnJlYWs7Y2FzZVwiZmlsbFNrZXRjaFwiOmU9dGhpcy5maWxsU2tldGNoKHQscyl9ZSYmbi5wdXNoKGUpfXJldHVybiBufWZpbGxTa2V0Y2godCxlKXtsZXQgcz1lLmZpbGxXZWlnaHQ7cmV0dXJuIHM8MCYmKHM9ZS5zdHJva2VXaWR0aC8yKSx7ZDp0aGlzLm9wc1RvUGF0aCh0KSxzdHJva2U6ZS5maWxsfHx0dCxzdHJva2VXaWR0aDpzLGZpbGw6dHR9fV9tZXJnZWRTaGFwZSh0KXtyZXR1cm4gdC5maWx0ZXIoKCh0LGUpPT4wPT09ZXx8XCJtb3ZlXCIhPT10Lm9wKSl9fWNsYXNzIHN0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jYW52YXM9dCx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5nZW49bmV3IGV0KGUpfWRyYXcodCl7Y29uc3QgZT10LnNldHN8fFtdLHM9dC5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksbj10aGlzLmN0eCxvPXQub3B0aW9ucy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cztmb3IoY29uc3QgYSBvZiBlKXN3aXRjaChhLnR5cGUpe2Nhc2VcInBhdGhcIjpuLnNhdmUoKSxuLnN0cm9rZVN0eWxlPVwibm9uZVwiPT09cy5zdHJva2U/XCJ0cmFuc3BhcmVudFwiOnMuc3Ryb2tlLG4ubGluZVdpZHRoPXMuc3Ryb2tlV2lkdGgscy5zdHJva2VMaW5lRGFzaCYmbi5zZXRMaW5lRGFzaChzLnN0cm9rZUxpbmVEYXNoKSxzLnN0cm9rZUxpbmVEYXNoT2Zmc2V0JiYobi5saW5lRGFzaE9mZnNldD1zLnN0cm9rZUxpbmVEYXNoT2Zmc2V0KSx0aGlzLl9kcmF3VG9Db250ZXh0KG4sYSxvKSxuLnJlc3RvcmUoKTticmVhaztjYXNlXCJmaWxsUGF0aFwiOntuLnNhdmUoKSxuLmZpbGxTdHlsZT1zLmZpbGx8fFwiXCI7Y29uc3QgZT1cImN1cnZlXCI9PT10LnNoYXBlfHxcInBvbHlnb25cIj09PXQuc2hhcGV8fFwicGF0aFwiPT09dC5zaGFwZT9cImV2ZW5vZGRcIjpcIm5vbnplcm9cIjt0aGlzLl9kcmF3VG9Db250ZXh0KG4sYSxvLGUpLG4ucmVzdG9yZSgpO2JyZWFrfWNhc2VcImZpbGxTa2V0Y2hcIjp0aGlzLmZpbGxTa2V0Y2gobixhLHMpfX1maWxsU2tldGNoKHQsZSxzKXtsZXQgbj1zLmZpbGxXZWlnaHQ7bjwwJiYobj1zLnN0cm9rZVdpZHRoLzIpLHQuc2F2ZSgpLHMuZmlsbExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKHMuZmlsbExpbmVEYXNoKSxzLmZpbGxMaW5lRGFzaE9mZnNldCYmKHQubGluZURhc2hPZmZzZXQ9cy5maWxsTGluZURhc2hPZmZzZXQpLHQuc3Ryb2tlU3R5bGU9cy5maWxsfHxcIlwiLHQubGluZVdpZHRoPW4sdGhpcy5fZHJhd1RvQ29udGV4dCh0LGUscy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cyksdC5yZXN0b3JlKCl9X2RyYXdUb0NvbnRleHQodCxlLHMsbj1cIm5vbnplcm9cIil7dC5iZWdpblBhdGgoKTtmb3IoY29uc3QgbiBvZiBlLm9wcyl7Y29uc3QgZT1cIm51bWJlclwiPT10eXBlb2YgcyYmcz49MD9uLmRhdGEubWFwKCh0PT4rdC50b0ZpeGVkKHMpKSk6bi5kYXRhO3N3aXRjaChuLm9wKXtjYXNlXCJtb3ZlXCI6dC5tb3ZlVG8oZVswXSxlWzFdKTticmVhaztjYXNlXCJiY3VydmVUb1wiOnQuYmV6aWVyQ3VydmVUbyhlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSk7YnJlYWs7Y2FzZVwibGluZVRvXCI6dC5saW5lVG8oZVswXSxlWzFdKX19XCJmaWxsUGF0aFwiPT09ZS50eXBlP3QuZmlsbChuKTp0LnN0cm9rZSgpfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9bGluZSh0LGUscyxuLG8pe2NvbnN0IGE9dGhpcy5nZW4ubGluZSh0LGUscyxuLG8pO3JldHVybiB0aGlzLmRyYXcoYSksYX1yZWN0YW5nbGUodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuZ2VuLnJlY3RhbmdsZSh0LGUscyxuLG8pO3JldHVybiB0aGlzLmRyYXcoYSksYX1lbGxpcHNlKHQsZSxzLG4sbyl7Y29uc3QgYT10aGlzLmdlbi5lbGxpcHNlKHQsZSxzLG4sbyk7cmV0dXJuIHRoaXMuZHJhdyhhKSxhfWNpcmNsZSh0LGUscyxuKXtjb25zdCBvPXRoaXMuZ2VuLmNpcmNsZSh0LGUscyxuKTtyZXR1cm4gdGhpcy5kcmF3KG8pLG99bGluZWFyUGF0aCh0LGUpe2NvbnN0IHM9dGhpcy5nZW4ubGluZWFyUGF0aCh0LGUpO3JldHVybiB0aGlzLmRyYXcocyksc31wb2x5Z29uKHQsZSl7Y29uc3Qgcz10aGlzLmdlbi5wb2x5Z29uKHQsZSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWFyYyh0LGUscyxuLG8sYSxoPSExLHIpe2NvbnN0IGk9dGhpcy5nZW4uYXJjKHQsZSxzLG4sbyxhLGgscik7cmV0dXJuIHRoaXMuZHJhdyhpKSxpfWN1cnZlKHQsZSl7Y29uc3Qgcz10aGlzLmdlbi5jdXJ2ZSh0LGUpO3JldHVybiB0aGlzLmRyYXcocyksc31wYXRoKHQsZSl7Y29uc3Qgcz10aGlzLmdlbi5wYXRoKHQsZSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfX1jb25zdCBudD1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7Y2xhc3Mgb3R7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN2Zz10LHRoaXMuZ2VuPW5ldyBldChlKX1kcmF3KHQpe2NvbnN0IGU9dC5zZXRzfHxbXSxzPXQub3B0aW9uc3x8dGhpcy5nZXREZWZhdWx0T3B0aW9ucygpLG49dGhpcy5zdmcub3duZXJEb2N1bWVudHx8d2luZG93LmRvY3VtZW50LG89bi5jcmVhdGVFbGVtZW50TlMobnQsXCJnXCIpLGE9dC5vcHRpb25zLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzO2Zvcihjb25zdCBoIG9mIGUpe2xldCBlPW51bGw7c3dpdGNoKGgudHlwZSl7Y2FzZVwicGF0aFwiOmU9bi5jcmVhdGVFbGVtZW50TlMobnQsXCJwYXRoXCIpLGUuc2V0QXR0cmlidXRlKFwiZFwiLHRoaXMub3BzVG9QYXRoKGgsYSkpLGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIscy5zdHJva2UpLGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIscy5zdHJva2VXaWR0aCtcIlwiKSxlLnNldEF0dHJpYnV0ZShcImZpbGxcIixcIm5vbmVcIikscy5zdHJva2VMaW5lRGFzaCYmZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIscy5zdHJva2VMaW5lRGFzaC5qb2luKFwiIFwiKS50cmltKCkpLHMuc3Ryb2tlTGluZURhc2hPZmZzZXQmJmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLWRhc2hvZmZzZXRcIixgJHtzLnN0cm9rZUxpbmVEYXNoT2Zmc2V0fWApO2JyZWFrO2Nhc2VcImZpbGxQYXRoXCI6ZT1uLmNyZWF0ZUVsZW1lbnROUyhudCxcInBhdGhcIiksZS5zZXRBdHRyaWJ1dGUoXCJkXCIsdGhpcy5vcHNUb1BhdGgoaCxhKSksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIixcIm5vbmVcIiksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixcIjBcIiksZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIscy5maWxsfHxcIlwiKSxcImN1cnZlXCIhPT10LnNoYXBlJiZcInBvbHlnb25cIiE9PXQuc2hhcGV8fGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpO2JyZWFrO2Nhc2VcImZpbGxTa2V0Y2hcIjplPXRoaXMuZmlsbFNrZXRjaChuLGgscyl9ZSYmby5hcHBlbmRDaGlsZChlKX1yZXR1cm4gb31maWxsU2tldGNoKHQsZSxzKXtsZXQgbj1zLmZpbGxXZWlnaHQ7bjwwJiYobj1zLnN0cm9rZVdpZHRoLzIpO2NvbnN0IG89dC5jcmVhdGVFbGVtZW50TlMobnQsXCJwYXRoXCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZShcImRcIix0aGlzLm9wc1RvUGF0aChlLHMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHMpKSxvLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLHMuZmlsbHx8XCJcIiksby5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixuK1wiXCIpLG8uc2V0QXR0cmlidXRlKFwiZmlsbFwiLFwibm9uZVwiKSxzLmZpbGxMaW5lRGFzaCYmby5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIscy5maWxsTGluZURhc2guam9pbihcIiBcIikudHJpbSgpKSxzLmZpbGxMaW5lRGFzaE9mZnNldCYmby5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaG9mZnNldFwiLGAke3MuZmlsbExpbmVEYXNoT2Zmc2V0fWApLG99Z2V0IGdlbmVyYXRvcigpe3JldHVybiB0aGlzLmdlbn1nZXREZWZhdWx0T3B0aW9ucygpe3JldHVybiB0aGlzLmdlbi5kZWZhdWx0T3B0aW9uc31vcHNUb1BhdGgodCxlKXtyZXR1cm4gdGhpcy5nZW4ub3BzVG9QYXRoKHQsZSl9bGluZSh0LGUscyxuLG8pe2NvbnN0IGE9dGhpcy5nZW4ubGluZSh0LGUscyxuLG8pO3JldHVybiB0aGlzLmRyYXcoYSl9cmVjdGFuZ2xlKHQsZSxzLG4sbyl7Y29uc3QgYT10aGlzLmdlbi5yZWN0YW5nbGUodCxlLHMsbixvKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWVsbGlwc2UodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuZ2VuLmVsbGlwc2UodCxlLHMsbixvKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWNpcmNsZSh0LGUscyxuKXtjb25zdCBvPXRoaXMuZ2VuLmNpcmNsZSh0LGUscyxuKTtyZXR1cm4gdGhpcy5kcmF3KG8pfWxpbmVhclBhdGgodCxlKXtjb25zdCBzPXRoaXMuZ2VuLmxpbmVhclBhdGgodCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfXBvbHlnb24odCxlKXtjb25zdCBzPXRoaXMuZ2VuLnBvbHlnb24odCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfWFyYyh0LGUscyxuLG8sYSxoPSExLHIpe2NvbnN0IGk9dGhpcy5nZW4uYXJjKHQsZSxzLG4sbyxhLGgscik7cmV0dXJuIHRoaXMuZHJhdyhpKX1jdXJ2ZSh0LGUpe2NvbnN0IHM9dGhpcy5nZW4uY3VydmUodCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfXBhdGgodCxlKXtjb25zdCBzPXRoaXMuZ2VuLnBhdGgodCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfX12YXIgYXQ9e2NhbnZhczoodCxlKT0+bmV3IHN0KHQsZSksc3ZnOih0LGUpPT5uZXcgb3QodCxlKSxnZW5lcmF0b3I6dD0+bmV3IGV0KHQpLG5ld1NlZWQ6KCk9PmV0Lm5ld1NlZWQoKX07ZXhwb3J0e2F0IGFzIGRlZmF1bHR9O1xuIiwKICAgICJpbXBvcnQge1xuICBnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldCxcbiAgZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnNcbn0gZnJvbSBcIi4vY2h1bmstMjNBVE1aWFYubWpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVUZXh0XG59IGZyb20gXCIuL2NodW5rLVpJNlYyVUUyLm1qc1wiO1xuaW1wb3J0IHtcbiAgZGVjb2RlRW50aXRpZXMsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBldmFsdWF0ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGhhc0thdGV4LFxuICBsb2csXG4gIHJlbmRlckthdGV4LFxuICBzYW5pdGl6ZVRleHRcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvY2x1c3RlcnMuanNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3QyIH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgcm91Z2ggZnJvbSBcInJvdWdoanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9pbnRlcnNlY3QvaW50ZXJzZWN0LXJlY3QuanNcbnZhciBpbnRlcnNlY3RSZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgcG9pbnQyKSA9PiB7XG4gIHZhciB4ID0gbm9kZS54O1xuICB2YXIgeSA9IG5vZGUueTtcbiAgdmFyIGR4ID0gcG9pbnQyLnggLSB4O1xuICB2YXIgZHkgPSBwb2ludDIueSAtIHk7XG4gIHZhciB3ID0gbm9kZS53aWR0aCAvIDI7XG4gIHZhciBoID0gbm9kZS5oZWlnaHQgLyAyO1xuICB2YXIgc3gsIHN5O1xuICBpZiAoTWF0aC5hYnMoZHkpICogdyA+IE1hdGguYWJzKGR4KSAqIGgpIHtcbiAgICBpZiAoZHkgPCAwKSB7XG4gICAgICBoID0gLWg7XG4gICAgfVxuICAgIHN4ID0gZHkgPT09IDAgPyAwIDogaCAqIGR4IC8gZHk7XG4gICAgc3kgPSBoO1xuICB9IGVsc2Uge1xuICAgIGlmIChkeCA8IDApIHtcbiAgICAgIHcgPSAtdztcbiAgICB9XG4gICAgc3ggPSB3O1xuICAgIHN5ID0gZHggPT09IDAgPyAwIDogdyAqIGR5IC8gZHg7XG4gIH1cbiAgcmV0dXJuIHsgeDogeCArIHN4LCB5OiB5ICsgc3kgfTtcbn0sIFwiaW50ZXJzZWN0UmVjdFwiKTtcbnZhciBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0ID0gaW50ZXJzZWN0UmVjdDtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9jcmVhdGVMYWJlbC5qc1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5mdW5jdGlvbiBhcHBseVN0eWxlKGRvbSwgc3R5bGVGbikge1xuICBpZiAoc3R5bGVGbikge1xuICAgIGRvbS5hdHRyKFwic3R5bGVcIiwgc3R5bGVGbik7XG4gIH1cbn1cbl9fbmFtZShhcHBseVN0eWxlLCBcImFwcGx5U3R5bGVcIik7XG5hc3luYyBmdW5jdGlvbiBhZGRIdG1sTGFiZWwobm9kZSkge1xuICBjb25zdCBmbyA9IHNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImZvcmVpZ25PYmplY3RcIikpO1xuICBjb25zdCBkaXYgPSBmby5hcHBlbmQoXCJ4aHRtbDpkaXZcIik7XG4gIGxldCBsYWJlbCA9IG5vZGUubGFiZWw7XG4gIGlmIChub2RlLmxhYmVsICYmIGhhc0thdGV4KG5vZGUubGFiZWwpKSB7XG4gICAgbGFiZWwgPSBhd2FpdCByZW5kZXJLYXRleChub2RlLmxhYmVsLnJlcGxhY2UoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgsIFwiXFxuXCIpLCBnZXRDb25maWcoKSk7XG4gIH1cbiAgY29uc3QgbGFiZWxDbGFzcyA9IG5vZGUuaXNOb2RlID8gXCJub2RlTGFiZWxcIiA6IFwiZWRnZUxhYmVsXCI7XG4gIGRpdi5odG1sKFxuICAgICc8c3BhbiBjbGFzcz1cIicgKyBsYWJlbENsYXNzICsgJ1wiICcgKyAobm9kZS5sYWJlbFN0eWxlID8gJ3N0eWxlPVwiJyArIG5vZGUubGFiZWxTdHlsZSArICdcIicgOiBcIlwiKSArIC8vIGNvZGVxbCBbanMvaHRtbC1jb25zdHJ1Y3RlZC1mcm9tLWlucHV0XSA6IGZhbHNlIHBvc2l0aXZlXG4gICAgXCI+XCIgKyBsYWJlbCArIFwiPC9zcGFuPlwiXG4gICk7XG4gIGFwcGx5U3R5bGUoZGl2LCBub2RlLmxhYmVsU3R5bGUpO1xuICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwiaW5saW5lLWJsb2NrXCIpO1xuICBkaXYuc3R5bGUoXCJwYWRkaW5nLXJpZ2h0XCIsIFwiMXB4XCIpO1xuICBkaXYuc3R5bGUoXCJ3aGl0ZS1zcGFjZVwiLCBcIm5vd3JhcFwiKTtcbiAgZGl2LmF0dHIoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIik7XG4gIHJldHVybiBmby5ub2RlKCk7XG59XG5fX25hbWUoYWRkSHRtbExhYmVsLCBcImFkZEh0bWxMYWJlbFwiKTtcbnZhciBjcmVhdGVMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKF92ZXJ0ZXhUZXh0LCBzdHlsZSwgaXNUaXRsZSwgaXNOb2RlKSA9PiB7XG4gIGxldCB2ZXJ0ZXhUZXh0ID0gX3ZlcnRleFRleHQgfHwgXCJcIjtcbiAgaWYgKHR5cGVvZiB2ZXJ0ZXhUZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgdmVydGV4VGV4dCA9IHZlcnRleFRleHRbMF07XG4gIH1cbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIHZlcnRleFRleHQgPSB2ZXJ0ZXhUZXh0LnJlcGxhY2UoL1xcXFxufFxcbi9nLCBcIjxiciAvPlwiKTtcbiAgICBsb2cuaW5mbyhcInZlcnRleFRleHRcIiArIHZlcnRleFRleHQpO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBpc05vZGUsXG4gICAgICBsYWJlbDogZGVjb2RlRW50aXRpZXModmVydGV4VGV4dCkucmVwbGFjZShcbiAgICAgICAgL2ZhW2JscnNdPzpmYS1bXFx3LV0rL2csXG4gICAgICAgIChzKSA9PiBgPGkgY2xhc3M9JyR7cy5yZXBsYWNlKFwiOlwiLCBcIiBcIil9Jz48L2k+YFxuICAgICAgKSxcbiAgICAgIGxhYmVsU3R5bGU6IHN0eWxlID8gc3R5bGUucmVwbGFjZShcImZpbGw6XCIsIFwiY29sb3I6XCIpIDogc3R5bGVcbiAgICB9O1xuICAgIGxldCB2ZXJ0ZXhOb2RlID0gYXdhaXQgYWRkSHRtbExhYmVsKG5vZGUpO1xuICAgIHJldHVybiB2ZXJ0ZXhOb2RlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0ZXh0XCIpO1xuICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKSk7XG4gICAgbGV0IHJvd3MgPSBbXTtcbiAgICBpZiAodHlwZW9mIHZlcnRleFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0LnNwbGl0KC9cXFxcbnxcXG58PGJyXFxzKlxcLz8+L2dpKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmVydGV4VGV4dCkpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dzID0gW107XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHRzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcInhcIiwgXCIwXCIpO1xuICAgICAgaWYgKGlzVGl0bGUpIHtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJ0aXRsZS1yb3dcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJvd1wiKTtcbiAgICAgIH1cbiAgICAgIHRzcGFuLnRleHRDb250ZW50ID0gcm93LnRyaW0oKTtcbiAgICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgICB9XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59LCBcImNyZWF0ZUxhYmVsXCIpO1xudmFyIGNyZWF0ZUxhYmVsX2RlZmF1bHQgPSBjcmVhdGVMYWJlbDtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvcm91bmRlZFJlY3RQYXRoLnRzXG52YXIgY3JlYXRlUm91bmRlZFJlY3RQYXRoRCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgsIHksIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0LCByYWRpdXMpID0+IFtcbiAgXCJNXCIsXG4gIHggKyByYWRpdXMsXG4gIHksXG4gIC8vIE1vdmUgdG8gdGhlIGZpcnN0IHBvaW50XG4gIFwiSFwiLFxuICB4ICsgdG90YWxXaWR0aCAtIHJhZGl1cyxcbiAgLy8gRHJhdyBob3Jpem9udGFsIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmlnaHQgY29ybmVyXG4gIFwiQVwiLFxuICByYWRpdXMsXG4gIHJhZGl1cyxcbiAgMCxcbiAgMCxcbiAgMSxcbiAgeCArIHRvdGFsV2lkdGgsXG4gIHkgKyByYWRpdXMsXG4gIC8vIERyYXcgYXJjIHRvIHRoZSByaWdodCB0b3AgY29ybmVyXG4gIFwiVlwiLFxuICB5ICsgdG90YWxIZWlnaHQgLSByYWRpdXMsXG4gIC8vIERyYXcgdmVydGljYWwgbGluZSBkb3duIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJpZ2h0IGJvdHRvbSBjb3JuZXJcbiAgXCJBXCIsXG4gIHJhZGl1cyxcbiAgcmFkaXVzLFxuICAwLFxuICAwLFxuICAxLFxuICB4ICsgdG90YWxXaWR0aCAtIHJhZGl1cyxcbiAgeSArIHRvdGFsSGVpZ2h0LFxuICAvLyBEcmF3IGFyYyB0byB0aGUgcmlnaHQgYm90dG9tIGNvcm5lclxuICBcIkhcIixcbiAgeCArIHJhZGl1cyxcbiAgLy8gRHJhdyBob3Jpem9udGFsIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGVmdCBib3R0b20gY29ybmVyXG4gIFwiQVwiLFxuICByYWRpdXMsXG4gIHJhZGl1cyxcbiAgMCxcbiAgMCxcbiAgMSxcbiAgeCxcbiAgeSArIHRvdGFsSGVpZ2h0IC0gcmFkaXVzLFxuICAvLyBEcmF3IGFyYyB0byB0aGUgbGVmdCBib3R0b20gY29ybmVyXG4gIFwiVlwiLFxuICB5ICsgcmFkaXVzLFxuICAvLyBEcmF3IHZlcnRpY2FsIGxpbmUgdXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGVmdCB0b3AgY29ybmVyXG4gIFwiQVwiLFxuICByYWRpdXMsXG4gIHJhZGl1cyxcbiAgMCxcbiAgMCxcbiAgMSxcbiAgeCArIHJhZGl1cyxcbiAgeSxcbiAgLy8gRHJhdyBhcmMgdG8gdGhlIGxlZnQgdG9wIGNvcm5lclxuICBcIlpcIlxuICAvLyBDbG9zZSB0aGUgcGF0aFxuXS5qb2luKFwiIFwiKSwgXCJjcmVhdGVSb3VuZGVkUmVjdFBhdGhEXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9oYW5kRHJhd25TaGFwZVN0eWxlcy50c1xudmFyIHNvbGlkU3RhdGVGaWxsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29sb3IpID0+IHtcbiAgY29uc3QgeyBoYW5kRHJhd25TZWVkIH0gPSBnZXRDb25maWcoKTtcbiAgcmV0dXJuIHtcbiAgICBmaWxsOiBjb2xvcixcbiAgICBoYWNodXJlQW5nbGU6IDEyMCxcbiAgICAvLyBhbmdsZSBvZiBoYWNodXJlLFxuICAgIGhhY2h1cmVHYXA6IDQsXG4gICAgZmlsbFdlaWdodDogMixcbiAgICByb3VnaG5lc3M6IDAuNyxcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHNlZWQ6IGhhbmREcmF3blNlZWRcbiAgfTtcbn0sIFwic29saWRTdGF0ZUZpbGxcIik7XG52YXIgY29tcGlsZVN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUpID0+IHtcbiAgY29uc3Qgc3R5bGVzTWFwID0gc3R5bGVzMk1hcChbLi4ubm9kZS5jc3NDb21waWxlZFN0eWxlcyB8fCBbXSwgLi4ubm9kZS5jc3NTdHlsZXMgfHwgW11dKTtcbiAgcmV0dXJuIHsgc3R5bGVzTWFwLCBzdHlsZXNBcnJheTogWy4uLnN0eWxlc01hcF0gfTtcbn0sIFwiY29tcGlsZVN0eWxlc1wiKTtcbnZhciBzdHlsZXMyTWFwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHN0eWxlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgc3R5bGVzLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gc3R5bGUuc3BsaXQoXCI6XCIpO1xuICAgIHN0eWxlTWFwLnNldChrZXkudHJpbSgpLCB2YWx1ZT8udHJpbSgpKTtcbiAgfSk7XG4gIHJldHVybiBzdHlsZU1hcDtcbn0sIFwic3R5bGVzMk1hcFwiKTtcbnZhciBzdHlsZXMyU3RyaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSkgPT4ge1xuICBjb25zdCB7IHN0eWxlc0FycmF5IH0gPSBjb21waWxlU3R5bGVzKG5vZGUpO1xuICBjb25zdCBsYWJlbFN0eWxlcyA9IFtdO1xuICBjb25zdCBub2RlU3R5bGVzID0gW107XG4gIGNvbnN0IGJvcmRlclN0eWxlcyA9IFtdO1xuICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID0gW107XG4gIHN0eWxlc0FycmF5LmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gc3R5bGVbMF07XG4gICAgaWYgKGtleSA9PT0gXCJjb2xvclwiIHx8IGtleSA9PT0gXCJmb250LXNpemVcIiB8fCBrZXkgPT09IFwiZm9udC1mYW1pbHlcIiB8fCBrZXkgPT09IFwiZm9udC13ZWlnaHRcIiB8fCBrZXkgPT09IFwiZm9udC1zdHlsZVwiIHx8IGtleSA9PT0gXCJ0ZXh0LWRlY29yYXRpb25cIiB8fCBrZXkgPT09IFwidGV4dC1hbGlnblwiIHx8IGtleSA9PT0gXCJ0ZXh0LXRyYW5zZm9ybVwiIHx8IGtleSA9PT0gXCJsaW5lLWhlaWdodFwiIHx8IGtleSA9PT0gXCJsZXR0ZXItc3BhY2luZ1wiIHx8IGtleSA9PT0gXCJ3b3JkLXNwYWNpbmdcIiB8fCBrZXkgPT09IFwidGV4dC1zaGFkb3dcIiB8fCBrZXkgPT09IFwidGV4dC1vdmVyZmxvd1wiIHx8IGtleSA9PT0gXCJ3aGl0ZS1zcGFjZVwiIHx8IGtleSA9PT0gXCJ3b3JkLXdyYXBcIiB8fCBrZXkgPT09IFwid29yZC1icmVha1wiIHx8IGtleSA9PT0gXCJvdmVyZmxvdy13cmFwXCIgfHwga2V5ID09PSBcImh5cGhlbnNcIikge1xuICAgICAgbGFiZWxTdHlsZXMucHVzaChzdHlsZS5qb2luKFwiOlwiKSArIFwiICFpbXBvcnRhbnRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVTdHlsZXMucHVzaChzdHlsZS5qb2luKFwiOlwiKSArIFwiICFpbXBvcnRhbnRcIik7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwic3Ryb2tlXCIpKSB7XG4gICAgICAgIGJvcmRlclN0eWxlcy5wdXNoKHN0eWxlLmpvaW4oXCI6XCIpICsgXCIgIWltcG9ydGFudFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09IFwiZmlsbFwiKSB7XG4gICAgICAgIGJhY2tncm91bmRTdHlsZXMucHVzaChzdHlsZS5qb2luKFwiOlwiKSArIFwiICFpbXBvcnRhbnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsYWJlbFN0eWxlczogbGFiZWxTdHlsZXMuam9pbihcIjtcIiksXG4gICAgbm9kZVN0eWxlczogbm9kZVN0eWxlcy5qb2luKFwiO1wiKSxcbiAgICBzdHlsZXNBcnJheSxcbiAgICBib3JkZXJTdHlsZXMsXG4gICAgYmFja2dyb3VuZFN0eWxlc1xuICB9O1xufSwgXCJzdHlsZXMyU3RyaW5nXCIpO1xudmFyIHVzZXJOb2RlT3ZlcnJpZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBoYW5kRHJhd25TZWVkIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBub2RlQm9yZGVyLCBtYWluQmtnIH0gPSB0aGVtZVZhcmlhYmxlcztcbiAgY29uc3QgeyBzdHlsZXNNYXAgfSA9IGNvbXBpbGVTdHlsZXMobm9kZSk7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgcm91Z2huZXNzOiAwLjcsXG4gICAgICBmaWxsOiBzdHlsZXNNYXAuZ2V0KFwiZmlsbFwiKSB8fCBtYWluQmtnLFxuICAgICAgZmlsbFN0eWxlOiBcImhhY2h1cmVcIixcbiAgICAgIC8vIHNvbGlkIGZpbGxcbiAgICAgIGZpbGxXZWlnaHQ6IDQsXG4gICAgICBzdHJva2U6IHN0eWxlc01hcC5nZXQoXCJzdHJva2VcIikgfHwgbm9kZUJvcmRlcixcbiAgICAgIHNlZWQ6IGhhbmREcmF3blNlZWQsXG4gICAgICBzdHJva2VXaWR0aDogMS4zXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICk7XG4gIHJldHVybiByZXN1bHQ7XG59LCBcInVzZXJOb2RlT3ZlcnJpZGVzXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2NsdXN0ZXJzLmpzXG52YXIgcmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBsb2cuaW5mbyhcIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yIFwiLCBub2RlLmlkLCBub2RlKTtcbiAgY29uc3Qgc2l0ZUNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBoYW5kRHJhd25TZWVkIH0gPSBzaXRlQ29uZmlnO1xuICBjb25zdCB7IGNsdXN0ZXJCa2csIGNsdXN0ZXJCb3JkZXIgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzLCBib3JkZXJTdHlsZXMsIGJhY2tncm91bmRTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiY2x1c3RlciBcIiArIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBjb25zdCBsYWJlbEVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsIFwiKTtcbiAgY29uc3QgdGV4dCA9IGF3YWl0IGNyZWF0ZVRleHQobGFiZWxFbCwgbm9kZS5sYWJlbCwge1xuICAgIHN0eWxlOiBub2RlLmxhYmVsU3R5bGUsXG4gICAgdXNlSHRtbExhYmVscyxcbiAgICBpc05vZGU6IHRydWVcbiAgfSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QyKHRleHQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nID8gYmJveC53aWR0aCArIG5vZGUucGFkZGluZyA6IG5vZGUud2lkdGg7XG4gIGlmIChub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpIHtcbiAgICBub2RlLmRpZmYgPSAod2lkdGggLSBub2RlLndpZHRoKSAvIDIgLSBub2RlLnBhZGRpbmc7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5kaWZmID0gLW5vZGUucGFkZGluZztcbiAgfVxuICBjb25zdCBoZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgY29uc3QgeCA9IG5vZGUueCAtIHdpZHRoIC8gMjtcbiAgY29uc3QgeSA9IG5vZGUueSAtIGhlaWdodCAvIDI7XG4gIGxvZy50cmFjZShcIkRhdGEgXCIsIG5vZGUsIEpTT04uc3RyaW5naWZ5KG5vZGUpKTtcbiAgbGV0IHJlY3QyO1xuICBpZiAobm9kZS5sb29rID09PSBcImhhbmREcmF3blwiKSB7XG4gICAgY29uc3QgcmMgPSByb3VnaC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7XG4gICAgICByb3VnaG5lc3M6IDAuNyxcbiAgICAgIGZpbGw6IGNsdXN0ZXJCa2csXG4gICAgICAvLyBmaWxsOiAncmVkJyxcbiAgICAgIHN0cm9rZTogY2x1c3RlckJvcmRlcixcbiAgICAgIGZpbGxXZWlnaHQ6IDMsXG4gICAgICBzZWVkOiBoYW5kRHJhd25TZWVkXG4gICAgfSk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucGF0aChjcmVhdGVSb3VuZGVkUmVjdFBhdGhEKHgsIHksIHdpZHRoLCBoZWlnaHQsIDApLCBvcHRpb25zKTtcbiAgICByZWN0MiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiB7XG4gICAgICBsb2cuZGVidWcoXCJSb3VnaCBub2RlIGluc2VydCBDWENcIiwgcm91Z2hOb2RlKTtcbiAgICAgIHJldHVybiByb3VnaE5vZGU7XG4gICAgfSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgcmVjdDIuc2VsZWN0KFwicGF0aDpudGgtY2hpbGQoMilcIikuYXR0cihcInN0eWxlXCIsIGJvcmRlclN0eWxlcy5qb2luKFwiO1wiKSk7XG4gICAgcmVjdDIuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwic3R5bGVcIiwgYmFja2dyb3VuZFN0eWxlcy5qb2luKFwiO1wiKS5yZXBsYWNlKFwiZmlsbFwiLCBcInN0cm9rZVwiKSk7XG4gIH0gZWxzZSB7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKS5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpO1xuICB9XG4gIGNvbnN0IHsgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbiB9ID0gZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnMoc2l0ZUNvbmZpZyk7XG4gIGxhYmVsRWwuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIC8vIFRoaXMgcHV0cyB0aGUgbGFiZWwgb24gdG9wIG9mIHRoZSBib3ggaW5zdGVhZCBvZiBpbnNpZGUgaXRcbiAgICBgdHJhbnNsYXRlKCR7bm9kZS54IC0gYmJveC53aWR0aCAvIDJ9LCAke25vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiArIHN1YkdyYXBoVGl0bGVUb3BNYXJnaW59KWBcbiAgKTtcbiAgaWYgKGxhYmVsU3R5bGVzKSB7XG4gICAgY29uc3Qgc3BhbiA9IGxhYmVsRWwuc2VsZWN0KFwic3BhblwiKTtcbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5hdHRyKFwic3R5bGVcIiwgbGFiZWxTdHlsZXMpO1xuICAgIH1cbiAgfVxuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS5vZmZzZXRYID0gMDtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUub2Zmc2V0WSA9IGJib3guaGVpZ2h0IC0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X3JlY3RfZGVmYXVsdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4geyBjbHVzdGVyOiBzaGFwZVN2ZywgbGFiZWxCQm94OiBiYm94IH07XG59LCBcInJlY3RcIik7XG52YXIgbm90ZUdyb3VwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm90ZS1jbHVzdGVyXCIpLmF0dHIoXCJpZFwiLCBub2RlLmlkKTtcbiAgY29uc3QgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjb25zdCBwYWRkaW5nID0gMCAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBwYWRkaW5nIC8gMjtcbiAgcmVjdDIuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCBub2RlLnggLSBub2RlLndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCBub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGggKyBwYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0ICsgcGFkZGluZykuYXR0cihcImZpbGxcIiwgXCJub25lXCIpO1xuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9yZWN0X2RlZmF1bHQobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHsgY2x1c3Rlcjogc2hhcGVTdmcsIGxhYmVsQkJveDogeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0gfTtcbn0sIFwibm90ZUdyb3VwXCIpO1xudmFyIHJvdW5kZWRXaXRoVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2l0ZUNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBoYW5kRHJhd25TZWVkIH0gPSBzaXRlQ29uZmlnO1xuICBjb25zdCB7IGFsdEJhY2tncm91bmQsIGNvbXBvc2l0ZUJhY2tncm91bmQsIGNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCwgbm9kZUJvcmRlciB9ID0gdGhlbWVWYXJpYWJsZXM7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgY29uc3Qgb3V0ZXJSZWN0RyA9IHNoYXBlU3ZnLmluc2VydChcImdcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsXCIpO1xuICBsZXQgaW5uZXJSZWN0ID0gc2hhcGVTdmcuYXBwZW5kKFwicmVjdFwiKTtcbiAgY29uc3QgdGV4dCA9IGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KG5vZGUubGFiZWwsIG5vZGUubGFiZWxTdHlsZSwgdm9pZCAwLCB0cnVlKSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QyKHRleHQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IHBhZGRpbmcgLyAyO1xuICBjb25zdCB3aWR0aCA9IChub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcgPyBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nIDogbm9kZS53aWR0aCkgKyBwYWRkaW5nO1xuICBpZiAobm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nKSB7XG4gICAgbm9kZS5kaWZmID0gKHdpZHRoIC0gbm9kZS53aWR0aCkgLyAyIC0gbm9kZS5wYWRkaW5nO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuZGlmZiA9IC1ub2RlLnBhZGRpbmc7XG4gIH1cbiAgY29uc3QgaGVpZ2h0ID0gbm9kZS5oZWlnaHQgKyBwYWRkaW5nO1xuICBjb25zdCBpbm5lckhlaWdodCA9IG5vZGUuaGVpZ2h0ICsgcGFkZGluZyAtIGJib3guaGVpZ2h0IC0gNjtcbiAgY29uc3QgeCA9IG5vZGUueCAtIHdpZHRoIC8gMjtcbiAgY29uc3QgeSA9IG5vZGUueSAtIGhlaWdodCAvIDI7XG4gIG5vZGUud2lkdGggPSB3aWR0aDtcbiAgY29uc3QgaW5uZXJZID0gbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBiYm94LmhlaWdodCArIDI7XG4gIGxldCByZWN0MjtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IGlzQWx0ID0gbm9kZS5jc3NDbGFzc2VzLmluY2x1ZGVzKFwic3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0XCIpO1xuICAgIGNvbnN0IHJjID0gcm91Z2guc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCByb3VnaE91dGVyTm9kZSA9IG5vZGUucnggfHwgbm9kZS5yeSA/IHJjLnBhdGgoY3JlYXRlUm91bmRlZFJlY3RQYXRoRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAxMCksIHtcbiAgICAgIHJvdWdobmVzczogMC43LFxuICAgICAgZmlsbDogY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kLFxuICAgICAgZmlsbFN0eWxlOiBcInNvbGlkXCIsXG4gICAgICBzdHJva2U6IG5vZGVCb3JkZXIsXG4gICAgICBzZWVkOiBoYW5kRHJhd25TZWVkXG4gICAgfSkgOiByYy5yZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgeyBzZWVkOiBoYW5kRHJhd25TZWVkIH0pO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoT3V0ZXJOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCByb3VnaElubmVyTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCBpbm5lclksIHdpZHRoLCBpbm5lckhlaWdodCwge1xuICAgICAgZmlsbDogaXNBbHQgPyBhbHRCYWNrZ3JvdW5kIDogY29tcG9zaXRlQmFja2dyb3VuZCxcbiAgICAgIGZpbGxTdHlsZTogaXNBbHQgPyBcImhhY2h1cmVcIiA6IFwic29saWRcIixcbiAgICAgIHN0cm9rZTogbm9kZUJvcmRlcixcbiAgICAgIHNlZWQ6IGhhbmREcmF3blNlZWRcbiAgICB9KTtcbiAgICByZWN0MiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE91dGVyTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgaW5uZXJSZWN0ID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoSW5uZXJOb2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZWN0MiA9IG91dGVyUmVjdEcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCBvdXRlclJlY3RDbGFzcyA9IFwib3V0ZXJcIjtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgb3V0ZXJSZWN0Q2xhc3MpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgICBpbm5lclJlY3QuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgaW5uZXJZKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaW5uZXJIZWlnaHQpO1xuICB9XG4gIGxhYmVsLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBgdHJhbnNsYXRlKCR7bm9kZS54IC0gYmJveC53aWR0aCAvIDJ9LCAke3kgKyAxIC0gKGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpID8gMCA6IDMpfSlgXG4gICk7XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLmhlaWdodCA9IHJlY3RCb3guaGVpZ2h0O1xuICBub2RlLm9mZnNldFggPSAwO1xuICBub2RlLm9mZnNldFkgPSBiYm94LmhlaWdodCAtIG5vZGUucGFkZGluZyAvIDI7XG4gIG5vZGUubGFiZWxCQm94ID0gYmJveDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X3JlY3RfZGVmYXVsdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4geyBjbHVzdGVyOiBzaGFwZVN2ZywgbGFiZWxCQm94OiBiYm94IH07XG59LCBcInJvdW5kZWRXaXRoVGl0bGVcIik7XG52YXIgZGl2aWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgdGhlbWVWYXJpYWJsZXMsIGhhbmREcmF3blNlZWQgfSA9IHNpdGVDb25maWc7XG4gIGNvbnN0IHsgbm9kZUJvcmRlciB9ID0gdGhlbWVWYXJpYWJsZXM7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgY29uc3Qgb3V0ZXJSZWN0RyA9IHNoYXBlU3ZnLmluc2VydChcImdcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCB3aWR0aCA9IG5vZGUud2lkdGggKyBwYWRkaW5nO1xuICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoZWlnaHQgPSBub2RlLmhlaWdodCArIHBhZGRpbmc7XG4gIGNvbnN0IHggPSBub2RlLnggLSB3aWR0aCAvIDI7XG4gIGNvbnN0IHkgPSBub2RlLnkgLSBoZWlnaHQgLyAyO1xuICBub2RlLndpZHRoID0gd2lkdGg7XG4gIGxldCByZWN0MjtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2guc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCByb3VnaE91dGVyTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB7XG4gICAgICBmaWxsOiBcImxpZ2h0Z3JleVwiLFxuICAgICAgcm91Z2huZXNzOiAwLjUsXG4gICAgICBzdHJva2VMaW5lRGFzaDogWzVdLFxuICAgICAgc3Ryb2tlOiBub2RlQm9yZGVyLFxuICAgICAgc2VlZDogaGFuZERyYXduU2VlZFxuICAgIH0pO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoT3V0ZXJOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZWN0MiA9IG91dGVyUmVjdEcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCBvdXRlclJlY3RDbGFzcyA9IFwiZGl2aWRlclwiO1xuICAgIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBvdXRlclJlY3RDbGFzcykuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCkuYXR0cihcImRhdGEtbG9va1wiLCBub2RlLmxvb2spO1xuICB9XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLmhlaWdodCA9IHJlY3RCb3guaGVpZ2h0O1xuICBub2RlLm9mZnNldFggPSAwO1xuICBub2RlLm9mZnNldFkgPSAwO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiB7IGNsdXN0ZXI6IHNoYXBlU3ZnLCBsYWJlbEJCb3g6IHt9IH07XG59LCBcImRpdmlkZXJcIik7XG52YXIgc3F1YXJlUmVjdCA9IHJlY3Q7XG52YXIgc2hhcGVzID0ge1xuICByZWN0LFxuICBzcXVhcmVSZWN0LFxuICByb3VuZGVkV2l0aFRpdGxlLFxuICBub3RlR3JvdXAsXG4gIGRpdmlkZXJcbn07XG52YXIgY2x1c3RlckVsZW1zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBpbnNlcnRDbHVzdGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoZWxlbSwgbm9kZSkgPT4ge1xuICBjb25zdCBzaGFwZSA9IG5vZGUuc2hhcGUgfHwgXCJyZWN0XCI7XG4gIGNvbnN0IGNsdXN0ZXIgPSBhd2FpdCBzaGFwZXNbc2hhcGVdKGVsZW0sIG5vZGUpO1xuICBjbHVzdGVyRWxlbXMuc2V0KG5vZGUuaWQsIGNsdXN0ZXIpO1xuICByZXR1cm4gY2x1c3Rlcjtcbn0sIFwiaW5zZXJ0Q2x1c3RlclwiKTtcbnZhciBjbGVhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjbHVzdGVyRWxlbXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xufSwgXCJjbGVhclwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9lZGdlcy5qc1xuaW1wb3J0IHsgY3VydmVCYXNpcywgbGluZSwgc2VsZWN0IGFzIHNlbGVjdDMgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCByb3VnaDIgZnJvbSBcInJvdWdoanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9lZGdlTWFya2VyLnRzXG52YXIgYWRkRWRnZU1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSkgPT4ge1xuICBpZiAoZWRnZS5hcnJvd1R5cGVTdGFydCkge1xuICAgIGFkZEVkZ2VNYXJrZXIoc3ZnUGF0aCwgXCJzdGFydFwiLCBlZGdlLmFycm93VHlwZVN0YXJ0LCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIH1cbiAgaWYgKGVkZ2UuYXJyb3dUeXBlRW5kKSB7XG4gICAgYWRkRWRnZU1hcmtlcihzdmdQYXRoLCBcImVuZFwiLCBlZGdlLmFycm93VHlwZUVuZCwgdXJsLCBpZCwgZGlhZ3JhbVR5cGUpO1xuICB9XG59LCBcImFkZEVkZ2VNYXJrZXJzXCIpO1xudmFyIGFycm93VHlwZXNNYXAgPSB7XG4gIGFycm93X2Nyb3NzOiBcImNyb3NzXCIsXG4gIGFycm93X3BvaW50OiBcInBvaW50XCIsXG4gIGFycm93X2JhcmI6IFwiYmFyYlwiLFxuICBhcnJvd19jaXJjbGU6IFwiY2lyY2xlXCIsXG4gIGFnZ3JlZ2F0aW9uOiBcImFnZ3JlZ2F0aW9uXCIsXG4gIGV4dGVuc2lvbjogXCJleHRlbnNpb25cIixcbiAgY29tcG9zaXRpb246IFwiY29tcG9zaXRpb25cIixcbiAgZGVwZW5kZW5jeTogXCJkZXBlbmRlbmN5XCIsXG4gIGxvbGxpcG9wOiBcImxvbGxpcG9wXCJcbn07XG52YXIgYWRkRWRnZU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Z1BhdGgsIHBvc2l0aW9uLCBhcnJvd1R5cGUsIHVybCwgaWQsIGRpYWdyYW1UeXBlKSA9PiB7XG4gIGNvbnN0IGVuZE1hcmtlclR5cGUgPSBhcnJvd1R5cGVzTWFwW2Fycm93VHlwZV07XG4gIGlmICghZW5kTWFya2VyVHlwZSkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7YXJyb3dUeXBlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdWZmaXggPSBwb3NpdGlvbiA9PT0gXCJzdGFydFwiID8gXCJTdGFydFwiIDogXCJFbmRcIjtcbiAgc3ZnUGF0aC5hdHRyKGBtYXJrZXItJHtwb3NpdGlvbn1gLCBgdXJsKCR7dXJsfSMke2lkfV8ke2RpYWdyYW1UeXBlfS0ke2VuZE1hcmtlclR5cGV9JHtzdWZmaXh9KWApO1xufSwgXCJhZGRFZGdlTWFya2VyXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2VkZ2VzLmpzXG52YXIgZWRnZUxhYmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgdGVybWluYWxMYWJlbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBlZGdlTGFiZWxzLmNsZWFyKCk7XG4gIHRlcm1pbmFsTGFiZWxzLmNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIGdldExhYmVsU3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3R5bGVBcnJheSkgPT4ge1xuICBsZXQgc3R5bGVzID0gc3R5bGVBcnJheSA/IHN0eWxlQXJyYXkucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MgKyBcIjtcIiArIHN0eWxlLCBcIlwiKSA6IFwiXCI7XG4gIHJldHVybiBzdHlsZXM7XG59LCBcImdldExhYmVsU3R5bGVzXCIpO1xudmFyIGluc2VydEVkZ2VMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsZW0sIGVkZ2UpID0+IHtcbiAgbGV0IHVzZUh0bWxMYWJlbHMgPSBldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGNvbnN0IGxhYmVsRWxlbWVudCA9IGF3YWl0IGNyZWF0ZVRleHQoZWxlbSwgZWRnZS5sYWJlbCwge1xuICAgIHN0eWxlOiBnZXRMYWJlbFN0eWxlcyhlZGdlLmxhYmVsU3R5bGUpLFxuICAgIHVzZUh0bWxMYWJlbHMsXG4gICAgYWRkU3ZnQmFja2dyb3VuZDogdHJ1ZSxcbiAgICBpc05vZGU6IGZhbHNlXG4gIH0pO1xuICBsb2cuaW5mbyhcImFiYzgyXCIsIGVkZ2UsIGVkZ2UubGFiZWxUeXBlKTtcbiAgY29uc3QgZWRnZUxhYmVsID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VMYWJlbFwiKTtcbiAgY29uc3QgbGFiZWwgPSBlZGdlTGFiZWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7XG4gIGxldCBiYm94ID0gbGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgaWYgKHVzZUh0bWxMYWJlbHMpIHtcbiAgICBjb25zdCBkaXYgPSBsYWJlbEVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QzKGxhYmVsRWxlbWVudCk7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC1iYm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIGVkZ2VMYWJlbHMuc2V0KGVkZ2UuaWQsIGVkZ2VMYWJlbCk7XG4gIGVkZ2Uud2lkdGggPSBiYm94LndpZHRoO1xuICBlZGdlLmhlaWdodCA9IGJib3guaGVpZ2h0O1xuICBsZXQgZm87XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxMZWZ0KSB7XG4gICAgY29uc3Qgc3RhcnRMYWJlbEVsZW1lbnQgPSBhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KFxuICAgICAgZWRnZS5zdGFydExhYmVsTGVmdCxcbiAgICAgIGdldExhYmVsU3R5bGVzKGVkZ2UubGFiZWxTdHlsZSlcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0RWRnZUxhYmVsTGVmdCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gc3RhcnRFZGdlTGFiZWxMZWZ0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBpbm5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoc3RhcnRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gc3RhcnRMYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIGlubmVyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtc2xCb3gud2lkdGggLyAyICsgXCIsIFwiICsgLXNsQm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkpIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzLnNldChlZGdlLmlkLCB7fSk7XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5zdGFydExlZnQgPSBzdGFydEVkZ2VMYWJlbExlZnQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5zdGFydExhYmVsTGVmdCk7XG4gIH1cbiAgaWYgKGVkZ2Uuc3RhcnRMYWJlbFJpZ2h0KSB7XG4gICAgY29uc3Qgc3RhcnRMYWJlbEVsZW1lbnQgPSBhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KFxuICAgICAgZWRnZS5zdGFydExhYmVsUmlnaHQsXG4gICAgICBnZXRMYWJlbFN0eWxlcyhlZGdlLmxhYmVsU3R5bGUpXG4gICAgKTtcbiAgICBjb25zdCBzdGFydEVkZ2VMYWJlbFJpZ2h0ID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VUZXJtaW5hbHNcIik7XG4gICAgY29uc3QgaW5uZXIgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChzdGFydExhYmVsRWxlbWVudCk7XG4gICAgaW5uZXIubm9kZSgpLmFwcGVuZENoaWxkKHN0YXJ0TGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBzbEJveCA9IHN0YXJ0TGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHMuZ2V0KGVkZ2UuaWQpKSB7XG4gICAgICB0ZXJtaW5hbExhYmVscy5zZXQoZWRnZS5pZCwge30pO1xuICAgIH1cbiAgICB0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkuc3RhcnRSaWdodCA9IHN0YXJ0RWRnZUxhYmVsUmlnaHQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5zdGFydExhYmVsUmlnaHQpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsTGVmdCkge1xuICAgIGNvbnN0IGVuZExhYmVsRWxlbWVudCA9IGF3YWl0IGNyZWF0ZUxhYmVsX2RlZmF1bHQoZWRnZS5lbmRMYWJlbExlZnQsIGdldExhYmVsU3R5bGVzKGVkZ2UubGFiZWxTdHlsZSkpO1xuICAgIGNvbnN0IGVuZEVkZ2VMYWJlbExlZnQgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVRlcm1pbmFsc1wiKTtcbiAgICBjb25zdCBpbm5lciA9IGVuZEVkZ2VMYWJlbExlZnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbExlZnQubm9kZSgpLmFwcGVuZENoaWxkKGVuZExhYmVsRWxlbWVudCk7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkpIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzLnNldChlZGdlLmlkLCB7fSk7XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5lbmRMZWZ0ID0gZW5kRWRnZUxhYmVsTGVmdDtcbiAgICBzZXRUZXJtaW5hbFdpZHRoKGZvLCBlZGdlLmVuZExhYmVsTGVmdCk7XG4gIH1cbiAgaWYgKGVkZ2UuZW5kTGFiZWxSaWdodCkge1xuICAgIGNvbnN0IGVuZExhYmVsRWxlbWVudCA9IGF3YWl0IGNyZWF0ZUxhYmVsX2RlZmF1bHQoZWRnZS5lbmRMYWJlbFJpZ2h0LCBnZXRMYWJlbFN0eWxlcyhlZGdlLmxhYmVsU3R5bGUpKTtcbiAgICBjb25zdCBlbmRFZGdlTGFiZWxSaWdodCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gZW5kRWRnZUxhYmVsUmlnaHQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHMuZ2V0KGVkZ2UuaWQpKSB7XG4gICAgICB0ZXJtaW5hbExhYmVscy5zZXQoZWRnZS5pZCwge30pO1xuICAgIH1cbiAgICB0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkuZW5kUmlnaHQgPSBlbmRFZGdlTGFiZWxSaWdodDtcbiAgICBzZXRUZXJtaW5hbFdpZHRoKGZvLCBlZGdlLmVuZExhYmVsUmlnaHQpO1xuICB9XG4gIHJldHVybiBsYWJlbEVsZW1lbnQ7XG59LCBcImluc2VydEVkZ2VMYWJlbFwiKTtcbmZ1bmN0aW9uIHNldFRlcm1pbmFsV2lkdGgoZm8sIHZhbHVlKSB7XG4gIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyAmJiBmbykge1xuICAgIGZvLnN0eWxlLndpZHRoID0gdmFsdWUubGVuZ3RoICogOSArIFwicHhcIjtcbiAgICBmby5zdHlsZS5oZWlnaHQgPSBcIjEycHhcIjtcbiAgfVxufVxuX19uYW1lKHNldFRlcm1pbmFsV2lkdGgsIFwic2V0VGVybWluYWxXaWR0aFwiKTtcbnZhciBwb3NpdGlvbkVkZ2VMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVkZ2UsIHBhdGhzKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcIk1vdmluZyBsYWJlbCBhYmM4OCBcIiwgZWRnZS5pZCwgZWRnZS5sYWJlbCwgZWRnZUxhYmVscy5nZXQoZWRnZS5pZCksIHBhdGhzKTtcbiAgbGV0IHBhdGggPSBwYXRocy51cGRhdGVkUGF0aCA/IHBhdGhzLnVwZGF0ZWRQYXRoIDogcGF0aHMub3JpZ2luYWxQYXRoO1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgaWYgKGVkZ2UubGFiZWwpIHtcbiAgICBjb25zdCBlbCA9IGVkZ2VMYWJlbHMuZ2V0KGVkZ2UuaWQpO1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlsc19kZWZhdWx0LmNhbGNMYWJlbFBvc2l0aW9uKHBhdGgpO1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBcIk1vdmluZyBsYWJlbCBcIiArIGVkZ2UubGFiZWwgKyBcIiBmcm9tIChcIixcbiAgICAgICAgeCxcbiAgICAgICAgXCIsXCIsXG4gICAgICAgIHksXG4gICAgICAgIFwiKSB0byAoXCIsXG4gICAgICAgIHBvcy54LFxuICAgICAgICBcIixcIixcbiAgICAgICAgcG9zLnksXG4gICAgICAgIFwiKSBhYmM4OFwiXG4gICAgICApO1xuICAgICAgaWYgKHBhdGhzLnVwZGF0ZWRQYXRoKSB7XG4gICAgICAgIHggPSBwb3MueDtcbiAgICAgICAgeSA9IHBvcy55O1xuICAgICAgfVxuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5ICsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIC8gMn0pYCk7XG4gIH1cbiAgaWYgKGVkZ2Uuc3RhcnRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5zdGFydExlZnQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZVN0YXJ0ID8gMTAgOiAwLCBcInN0YXJ0X2xlZnRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApO1xuICB9XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxSaWdodCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHMuZ2V0KGVkZ2UuaWQpLnN0YXJ0UmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihcbiAgICAgICAgZWRnZS5hcnJvd1R5cGVTdGFydCA/IDEwIDogMCxcbiAgICAgICAgXCJzdGFydF9yaWdodFwiLFxuICAgICAgICBwYXRoXG4gICAgICApO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSlgKTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5lbmRMZWZ0O1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlsc19kZWZhdWx0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oZWRnZS5hcnJvd1R5cGVFbmQgPyAxMCA6IDAsIFwiZW5kX2xlZnRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5lbmRSaWdodDtcbiAgICBsZXQgeCA9IGVkZ2UueDtcbiAgICBsZXQgeSA9IGVkZ2UueTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgcG9zID0gdXRpbHNfZGVmYXVsdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGVkZ2UuYXJyb3dUeXBlRW5kID8gMTAgOiAwLCBcImVuZF9yaWdodFwiLCBwYXRoKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7eH0sICR7eX0pYCk7XG4gIH1cbn0sIFwicG9zaXRpb25FZGdlTGFiZWxcIik7XG52YXIgb3V0c2lkZU5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBwb2ludDIpID0+IHtcbiAgY29uc3QgeCA9IG5vZGUueDtcbiAgY29uc3QgeSA9IG5vZGUueTtcbiAgY29uc3QgZHggPSBNYXRoLmFicyhwb2ludDIueCAtIHgpO1xuICBjb25zdCBkeSA9IE1hdGguYWJzKHBvaW50Mi55IC0geSk7XG4gIGNvbnN0IHcgPSBub2RlLndpZHRoIC8gMjtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcbiAgcmV0dXJuIGR4ID49IHcgfHwgZHkgPj0gaDtcbn0sIFwib3V0c2lkZU5vZGVcIik7XG52YXIgaW50ZXJzZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgb3V0c2lkZVBvaW50LCBpbnNpZGVQb2ludCkgPT4ge1xuICBsb2cuZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkob3V0c2lkZVBvaW50KX1cbiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGluc2lkZVBvaW50KX1cbiAgbm9kZSAgICAgICAgOiB4OiR7bm9kZS54fSB5OiR7bm9kZS55fSB3OiR7bm9kZS53aWR0aH0gaDoke25vZGUuaGVpZ2h0fWApO1xuICBjb25zdCB4ID0gbm9kZS54O1xuICBjb25zdCB5ID0gbm9kZS55O1xuICBjb25zdCBkeCA9IE1hdGguYWJzKHggLSBpbnNpZGVQb2ludC54KTtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGggLyAyO1xuICBsZXQgciA9IGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCA/IHcgLSBkeCA6IHcgKyBkeDtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcbiAgY29uc3QgUSA9IE1hdGguYWJzKG91dHNpZGVQb2ludC55IC0gaW5zaWRlUG9pbnQueSk7XG4gIGNvbnN0IFIgPSBNYXRoLmFicyhvdXRzaWRlUG9pbnQueCAtIGluc2lkZVBvaW50LngpO1xuICBpZiAoTWF0aC5hYnMoeSAtIG91dHNpZGVQb2ludC55KSAqIHcgPiBNYXRoLmFicyh4IC0gb3V0c2lkZVBvaW50LngpICogaCkge1xuICAgIGxldCBxID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gb3V0c2lkZVBvaW50LnkgLSBoIC0geSA6IHkgLSBoIC0gb3V0c2lkZVBvaW50Lnk7XG4gICAgciA9IFIgKiBxIC8gUTtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICB4OiBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgciA6IGluc2lkZVBvaW50LnggLSBSICsgcixcbiAgICAgIHk6IGluc2lkZVBvaW50LnkgPCBvdXRzaWRlUG9pbnQueSA/IGluc2lkZVBvaW50LnkgKyBRIC0gcSA6IGluc2lkZVBvaW50LnkgLSBRICsgcVxuICAgIH07XG4gICAgaWYgKHIgPT09IDApIHtcbiAgICAgIHJlcy54ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgICByZXMueSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICBpZiAoUiA9PT0gMCkge1xuICAgICAgcmVzLnggPSBvdXRzaWRlUG9pbnQueDtcbiAgICB9XG4gICAgaWYgKFEgPT09IDApIHtcbiAgICAgIHJlcy55ID0gb3V0c2lkZVBvaW50Lnk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgYWJjODkgdG9wL2JvdHRvbSBjYWxjLCBRICR7UX0sIHEgJHtxfSwgUiAke1J9LCByICR7cn1gLCByZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCkge1xuICAgICAgciA9IG91dHNpZGVQb2ludC54IC0gdyAtIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSB4IC0gdyAtIG91dHNpZGVQb2ludC54O1xuICAgIH1cbiAgICBsZXQgcSA9IFEgKiByIC8gUjtcbiAgICBsZXQgX3ggPSBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgUiAtIHIgOiBpbnNpZGVQb2ludC54IC0gUiArIHI7XG4gICAgbGV0IF95ID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gaW5zaWRlUG9pbnQueSArIHEgOiBpbnNpZGVQb2ludC55IC0gcTtcbiAgICBsb2cuZGVidWcoYHNpZGVzIGNhbGMgYWJjODksIFEgJHtRfSwgcSAke3F9LCBSICR7Un0sIHIgJHtyfWAsIHsgX3gsIF95IH0pO1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICBfeCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgX3kgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIF94ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICBfeSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICByZXR1cm4geyB4OiBfeCwgeTogX3kgfTtcbiAgfVxufSwgXCJpbnRlcnNlY3Rpb25cIik7XG52YXIgY3V0UGF0aEF0SW50ZXJzZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3BvaW50cywgYm91bmRhcnlOb2RlKSA9PiB7XG4gIGxvZy53YXJuKFwiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0XCIsIF9wb2ludHMsIGJvdW5kYXJ5Tm9kZSk7XG4gIGxldCBwb2ludHMgPSBbXTtcbiAgbGV0IGxhc3RQb2ludE91dHNpZGUgPSBfcG9pbnRzWzBdO1xuICBsZXQgaXNJbnNpZGUgPSBmYWxzZTtcbiAgX3BvaW50cy5mb3JFYWNoKChwb2ludDIpID0+IHtcbiAgICBsb2cuaW5mbyhcImFiYzg4IGNoZWNraW5nIHBvaW50XCIsIHBvaW50MiwgYm91bmRhcnlOb2RlKTtcbiAgICBpZiAoIW91dHNpZGVOb2RlKGJvdW5kYXJ5Tm9kZSwgcG9pbnQyKSAmJiAhaXNJbnNpZGUpIHtcbiAgICAgIGNvbnN0IGludGVyID0gaW50ZXJzZWN0aW9uKGJvdW5kYXJ5Tm9kZSwgbGFzdFBvaW50T3V0c2lkZSwgcG9pbnQyKTtcbiAgICAgIGxvZy5kZWJ1ZyhcImFiYzg4IGluc2lkZVwiLCBwb2ludDIsIGxhc3RQb2ludE91dHNpZGUsIGludGVyKTtcbiAgICAgIGxvZy5kZWJ1ZyhcImFiYzg4IGludGVyc2VjdGlvblwiLCBpbnRlciwgYm91bmRhcnlOb2RlKTtcbiAgICAgIGxldCBwb2ludFByZXNlbnQgPSBmYWxzZTtcbiAgICAgIHBvaW50cy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIHBvaW50UHJlc2VudCA9IHBvaW50UHJlc2VudCB8fCBwLnggPT09IGludGVyLnggJiYgcC55ID09PSBpbnRlci55O1xuICAgICAgfSk7XG4gICAgICBpZiAoIXBvaW50cy5zb21lKChlKSA9PiBlLnggPT09IGludGVyLnggJiYgZS55ID09PSBpbnRlci55KSkge1xuICAgICAgICBwb2ludHMucHVzaChpbnRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihcImFiYzg4IG5vIGludGVyc2VjdFwiLCBpbnRlciwgcG9pbnRzKTtcbiAgICAgIH1cbiAgICAgIGlzSW5zaWRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLndhcm4oXCJhYmM4OCBvdXRzaWRlXCIsIHBvaW50MiwgbGFzdFBvaW50T3V0c2lkZSk7XG4gICAgICBsYXN0UG9pbnRPdXRzaWRlID0gcG9pbnQyO1xuICAgICAgaWYgKCFpc0luc2lkZSkge1xuICAgICAgICBwb2ludHMucHVzaChwb2ludDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGxvZy5kZWJ1ZyhcInJldHVybmluZyBwb2ludHNcIiwgcG9pbnRzKTtcbiAgcmV0dXJuIHBvaW50cztcbn0sIFwiY3V0UGF0aEF0SW50ZXJzZWN0XCIpO1xuZnVuY3Rpb24gZXh0cmFjdENvcm5lclBvaW50cyhwb2ludHMpIHtcbiAgY29uc3QgY29ybmVyUG9pbnRzID0gW107XG4gIGNvbnN0IGNvcm5lclBvaW50UG9zaXRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IHByZXYgPSBwb2ludHNbaSAtIDFdO1xuICAgIGNvbnN0IGN1cnIgPSBwb2ludHNbaV07XG4gICAgY29uc3QgbmV4dCA9IHBvaW50c1tpICsgMV07XG4gICAgaWYgKHByZXYueCA9PT0gY3Vyci54ICYmIGN1cnIueSA9PT0gbmV4dC55ICYmIE1hdGguYWJzKGN1cnIueCAtIG5leHQueCkgPiA1ICYmIE1hdGguYWJzKGN1cnIueSAtIHByZXYueSkgPiA1KSB7XG4gICAgICBjb3JuZXJQb2ludHMucHVzaChjdXJyKTtcbiAgICAgIGNvcm5lclBvaW50UG9zaXRpb25zLnB1c2goaSk7XG4gICAgfSBlbHNlIGlmIChwcmV2LnkgPT09IGN1cnIueSAmJiBjdXJyLnggPT09IG5leHQueCAmJiBNYXRoLmFicyhjdXJyLnggLSBwcmV2LngpID4gNSAmJiBNYXRoLmFicyhjdXJyLnkgLSBuZXh0LnkpID4gNSkge1xuICAgICAgY29ybmVyUG9pbnRzLnB1c2goY3Vycik7XG4gICAgICBjb3JuZXJQb2ludFBvc2l0aW9ucy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjb3JuZXJQb2ludHMsIGNvcm5lclBvaW50UG9zaXRpb25zIH07XG59XG5fX25hbWUoZXh0cmFjdENvcm5lclBvaW50cywgXCJleHRyYWN0Q29ybmVyUG9pbnRzXCIpO1xudmFyIGZpbmRBZGphY2VudFBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb2ludEEsIHBvaW50QiwgZGlzdGFuY2UpIHtcbiAgY29uc3QgeERpZmYgPSBwb2ludEIueCAtIHBvaW50QS54O1xuICBjb25zdCB5RGlmZiA9IHBvaW50Qi55IC0gcG9pbnRBLnk7XG4gIGNvbnN0IGxlbmd0aCA9IE1hdGguc3FydCh4RGlmZiAqIHhEaWZmICsgeURpZmYgKiB5RGlmZik7XG4gIGNvbnN0IHJhdGlvID0gZGlzdGFuY2UgLyBsZW5ndGg7XG4gIHJldHVybiB7IHg6IHBvaW50Qi54IC0gcmF0aW8gKiB4RGlmZiwgeTogcG9pbnRCLnkgLSByYXRpbyAqIHlEaWZmIH07XG59LCBcImZpbmRBZGphY2VudFBvaW50XCIpO1xudmFyIGZpeENvcm5lcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGxpbmVEYXRhKSB7XG4gIGNvbnN0IHsgY29ybmVyUG9pbnRQb3NpdGlvbnMgfSA9IGV4dHJhY3RDb3JuZXJQb2ludHMobGluZURhdGEpO1xuICBjb25zdCBuZXdMaW5lRGF0YSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvcm5lclBvaW50UG9zaXRpb25zLmluY2x1ZGVzKGkpKSB7XG4gICAgICBjb25zdCBwcmV2UG9pbnQgPSBsaW5lRGF0YVtpIC0gMV07XG4gICAgICBjb25zdCBuZXh0UG9pbnQgPSBsaW5lRGF0YVtpICsgMV07XG4gICAgICBjb25zdCBjb3JuZXJQb2ludCA9IGxpbmVEYXRhW2ldO1xuICAgICAgY29uc3QgbmV3UHJldlBvaW50ID0gZmluZEFkamFjZW50UG9pbnQocHJldlBvaW50LCBjb3JuZXJQb2ludCwgNSk7XG4gICAgICBjb25zdCBuZXdOZXh0UG9pbnQgPSBmaW5kQWRqYWNlbnRQb2ludChuZXh0UG9pbnQsIGNvcm5lclBvaW50LCA1KTtcbiAgICAgIGNvbnN0IHhEaWZmID0gbmV3TmV4dFBvaW50LnggLSBuZXdQcmV2UG9pbnQueDtcbiAgICAgIGNvbnN0IHlEaWZmID0gbmV3TmV4dFBvaW50LnkgLSBuZXdQcmV2UG9pbnQueTtcbiAgICAgIG5ld0xpbmVEYXRhLnB1c2gobmV3UHJldlBvaW50KTtcbiAgICAgIGNvbnN0IGEgPSBNYXRoLnNxcnQoMikgKiAyO1xuICAgICAgbGV0IG5ld0Nvcm5lclBvaW50ID0geyB4OiBjb3JuZXJQb2ludC54LCB5OiBjb3JuZXJQb2ludC55IH07XG4gICAgICBpZiAoTWF0aC5hYnMobmV4dFBvaW50LnggLSBwcmV2UG9pbnQueCkgPiAxMCAmJiBNYXRoLmFicyhuZXh0UG9pbnQueSAtIHByZXZQb2ludC55KSA+PSAxMCkge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgXCJDb3JuZXIgcG9pbnQgZml4aW5nXCIsXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnggLSBwcmV2UG9pbnQueCksXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnkgLSBwcmV2UG9pbnQueSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgciA9IDU7XG4gICAgICAgIGlmIChjb3JuZXJQb2ludC54ID09PSBuZXdQcmV2UG9pbnQueCkge1xuICAgICAgICAgIG5ld0Nvcm5lclBvaW50ID0ge1xuICAgICAgICAgICAgeDogeERpZmYgPCAwID8gbmV3UHJldlBvaW50LnggLSByICsgYSA6IG5ld1ByZXZQb2ludC54ICsgciAtIGEsXG4gICAgICAgICAgICB5OiB5RGlmZiA8IDAgPyBuZXdQcmV2UG9pbnQueSAtIGEgOiBuZXdQcmV2UG9pbnQueSArIGFcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Nvcm5lclBvaW50ID0ge1xuICAgICAgICAgICAgeDogeERpZmYgPCAwID8gbmV3UHJldlBvaW50LnggLSBhIDogbmV3UHJldlBvaW50LnggKyBhLFxuICAgICAgICAgICAgeTogeURpZmYgPCAwID8gbmV3UHJldlBvaW50LnkgLSByICsgYSA6IG5ld1ByZXZQb2ludC55ICsgciAtIGFcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgXCJDb3JuZXIgcG9pbnQgc2tpcHBpbmcgZml4aW5nXCIsXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnggLSBwcmV2UG9pbnQueCksXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnkgLSBwcmV2UG9pbnQueSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5ld0xpbmVEYXRhLnB1c2gobmV3Q29ybmVyUG9pbnQsIG5ld05leHRQb2ludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xpbmVEYXRhLnB1c2gobGluZURhdGFbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3TGluZURhdGE7XG59LCBcImZpeENvcm5lcnNcIik7XG52YXIgaW5zZXJ0RWRnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgZWRnZSwgY2x1c3RlckRiLCBkaWFncmFtVHlwZSwgc3RhcnROb2RlLCBlbmROb2RlLCBpZCkge1xuICBjb25zdCB7IGhhbmREcmF3blNlZWQgfSA9IGdldENvbmZpZygpO1xuICBsZXQgcG9pbnRzID0gZWRnZS5wb2ludHM7XG4gIGxldCBwb2ludHNIYXNDaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IHRhaWwgPSBzdGFydE5vZGU7XG4gIHZhciBoZWFkID0gZW5kTm9kZTtcbiAgaWYgKGhlYWQuaW50ZXJzZWN0ICYmIHRhaWwuaW50ZXJzZWN0KSB7XG4gICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKDEsIGVkZ2UucG9pbnRzLmxlbmd0aCAtIDEpO1xuICAgIHBvaW50cy51bnNoaWZ0KHRhaWwuaW50ZXJzZWN0KHBvaW50c1swXSkpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIFwiTGFzdCBwb2ludCBBUEExMlwiLFxuICAgICAgZWRnZS5zdGFydCxcbiAgICAgIFwiLS0+XCIsXG4gICAgICBlZGdlLmVuZCxcbiAgICAgIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICBoZWFkLFxuICAgICAgaGVhZC5pbnRlcnNlY3QocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSlcbiAgICApO1xuICAgIHBvaW50cy5wdXNoKGhlYWQuaW50ZXJzZWN0KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pKTtcbiAgfVxuICBpZiAoZWRnZS50b0NsdXN0ZXIpIHtcbiAgICBsb2cuaW5mbyhcInRvIGNsdXN0ZXIgYWJjODhcIiwgY2x1c3RlckRiLmdldChlZGdlLnRvQ2x1c3RlcikpO1xuICAgIHBvaW50cyA9IGN1dFBhdGhBdEludGVyc2VjdChlZGdlLnBvaW50cywgY2x1c3RlckRiLmdldChlZGdlLnRvQ2x1c3Rlcikubm9kZSk7XG4gICAgcG9pbnRzSGFzQ2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgaWYgKGVkZ2UuZnJvbUNsdXN0ZXIpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcImZyb20gY2x1c3RlciBhYmM4OFwiLFxuICAgICAgY2x1c3RlckRiLmdldChlZGdlLmZyb21DbHVzdGVyKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHBvaW50cywgbnVsbCwgMilcbiAgICApO1xuICAgIHBvaW50cyA9IGN1dFBhdGhBdEludGVyc2VjdChwb2ludHMucmV2ZXJzZSgpLCBjbHVzdGVyRGIuZ2V0KGVkZ2UuZnJvbUNsdXN0ZXIpLm5vZGUpLnJldmVyc2UoKTtcbiAgICBwb2ludHNIYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICBsZXQgbGluZURhdGEgPSBwb2ludHMuZmlsdGVyKChwKSA9PiAhTnVtYmVyLmlzTmFOKHAueSkpO1xuICBsaW5lRGF0YSA9IGZpeENvcm5lcnMobGluZURhdGEpO1xuICBsZXQgbGFzdFBvaW50ID0gbGluZURhdGFbbGluZURhdGEubGVuZ3RoIC0gMV07XG4gIGlmIChsaW5lRGF0YS5sZW5ndGggPiAxKSB7XG4gICAgbGFzdFBvaW50ID0gbGluZURhdGFbbGluZURhdGEubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgc2Vjb25kTGFzdFBvaW50ID0gbGluZURhdGFbbGluZURhdGEubGVuZ3RoIC0gMl07XG4gICAgY29uc3QgZGlmZlggPSAobGFzdFBvaW50LnggLSBzZWNvbmRMYXN0UG9pbnQueCkgLyAyO1xuICAgIGNvbnN0IGRpZmZZID0gKGxhc3RQb2ludC55IC0gc2Vjb25kTGFzdFBvaW50LnkpIC8gMjtcbiAgICBjb25zdCBtaWRQb2ludCA9IHsgeDogc2Vjb25kTGFzdFBvaW50LnggKyBkaWZmWCwgeTogc2Vjb25kTGFzdFBvaW50LnkgKyBkaWZmWSB9O1xuICAgIGxpbmVEYXRhLnNwbGljZSgtMSwgMCwgbWlkUG9pbnQpO1xuICB9XG4gIGxldCBjdXJ2ZSA9IGN1cnZlQmFzaXM7XG4gIGlmIChlZGdlLmN1cnZlKSB7XG4gICAgY3VydmUgPSBlZGdlLmN1cnZlO1xuICB9XG4gIGNvbnN0IHsgeCwgeSB9ID0gZ2V0TGluZUZ1bmN0aW9uc1dpdGhPZmZzZXQoZWRnZSk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KHgpLnkoeSkuY3VydmUoY3VydmUpO1xuICBsZXQgc3Ryb2tlQ2xhc3NlcztcbiAgc3dpdGNoIChlZGdlLnRoaWNrbmVzcykge1xuICAgIGNhc2UgXCJub3JtYWxcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcImVkZ2UtdGhpY2tuZXNzLW5vcm1hbFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRoaWNrXCI6XG4gICAgICBzdHJva2VDbGFzc2VzID0gXCJlZGdlLXRoaWNrbmVzcy10aGlja1wiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImludmlzaWJsZVwiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3MtaW52aXNpYmxlXCI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3Mtbm9ybWFsXCI7XG4gIH1cbiAgc3dpdGNoIChlZGdlLnBhdHRlcm4pIHtcbiAgICBjYXNlIFwic29saWRcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLXNvbGlkXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZG90dGVkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1kb3R0ZWRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkYXNoZWRcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLWRhc2hlZFwiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLXNvbGlkXCI7XG4gIH1cbiAgbGV0IHN2Z1BhdGg7XG4gIGxldCBsaW5lUGF0aCA9IGxpbmVGdW5jdGlvbihsaW5lRGF0YSk7XG4gIGNvbnN0IGVkZ2VTdHlsZXMgPSBBcnJheS5pc0FycmF5KGVkZ2Uuc3R5bGUpID8gZWRnZS5zdHlsZSA6IFtlZGdlLnN0eWxlXTtcbiAgaWYgKGVkZ2UubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gyLnN2ZyhlbGVtKTtcbiAgICBPYmplY3QuYXNzaWduKFtdLCBsaW5lRGF0YSk7XG4gICAgY29uc3Qgc3ZnUGF0aE5vZGUgPSByYy5wYXRoKGxpbmVQYXRoLCB7XG4gICAgICByb3VnaG5lc3M6IDAuMyxcbiAgICAgIHNlZWQ6IGhhbmREcmF3blNlZWRcbiAgICB9KTtcbiAgICBzdHJva2VDbGFzc2VzICs9IFwiIHRyYW5zaXRpb25cIjtcbiAgICBzdmdQYXRoID0gc2VsZWN0MyhzdmdQYXRoTm9kZSkuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiaWRcIiwgZWRnZS5pZCkuYXR0cihcImNsYXNzXCIsIFwiIFwiICsgc3Ryb2tlQ2xhc3NlcyArIChlZGdlLmNsYXNzZXMgPyBcIiBcIiArIGVkZ2UuY2xhc3NlcyA6IFwiXCIpKS5hdHRyKFwic3R5bGVcIiwgZWRnZVN0eWxlcyA/IGVkZ2VTdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MgKyBcIjtcIiArIHN0eWxlLCBcIlwiKSA6IFwiXCIpO1xuICAgIGxldCBkID0gc3ZnUGF0aC5hdHRyKFwiZFwiKTtcbiAgICBzdmdQYXRoLmF0dHIoXCJkXCIsIGQpO1xuICAgIGVsZW0ubm9kZSgpLmFwcGVuZENoaWxkKHN2Z1BhdGgubm9kZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdQYXRoID0gZWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIGxpbmVQYXRoKS5hdHRyKFwiaWRcIiwgZWRnZS5pZCkuYXR0cihcImNsYXNzXCIsIFwiIFwiICsgc3Ryb2tlQ2xhc3NlcyArIChlZGdlLmNsYXNzZXMgPyBcIiBcIiArIGVkZ2UuY2xhc3NlcyA6IFwiXCIpKS5hdHRyKFwic3R5bGVcIiwgZWRnZVN0eWxlcyA/IGVkZ2VTdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MgKyBcIjtcIiArIHN0eWxlLCBcIlwiKSA6IFwiXCIpO1xuICB9XG4gIGxldCB1cmwgPSBcIlwiO1xuICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGUgfHwgZ2V0Q29uZmlnKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIikucmVwbGFjZSgvXFwpL2csIFwiXFxcXClcIik7XG4gIH1cbiAgbG9nLmluZm8oXCJhcnJvd1R5cGVTdGFydFwiLCBlZGdlLmFycm93VHlwZVN0YXJ0KTtcbiAgbG9nLmluZm8oXCJhcnJvd1R5cGVFbmRcIiwgZWRnZS5hcnJvd1R5cGVFbmQpO1xuICBhZGRFZGdlTWFya2VycyhzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIGxldCBwYXRocyA9IHt9O1xuICBpZiAocG9pbnRzSGFzQ2hhbmdlZCkge1xuICAgIHBhdGhzLnVwZGF0ZWRQYXRoID0gcG9pbnRzO1xuICB9XG4gIHBhdGhzLm9yaWdpbmFsUGF0aCA9IGVkZ2UucG9pbnRzO1xuICByZXR1cm4gcGF0aHM7XG59LCBcImluc2VydEVkZ2VcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvbWFya2Vycy5qc1xudmFyIGluc2VydE1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCBtYXJrZXJBcnJheSwgdHlwZSwgaWQpID0+IHtcbiAgbWFya2VyQXJyYXkuZm9yRWFjaCgobWFya2VyTmFtZSkgPT4ge1xuICAgIG1hcmtlcnNbbWFya2VyTmFtZV0oZWxlbSwgdHlwZSwgaWQpO1xuICB9KTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBleHRlbnNpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBsb2cudHJhY2UoXCJNYWtpbmcgbWFya2VycyBmb3IgXCIsIGlkKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1leHRlbnNpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWV4dGVuc2lvbkVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xufSwgXCJleHRlbnNpb25cIik7XG52YXIgY29tcG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNvbXBvc2l0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBjb21wb3NpdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiY29tcG9zaXRpb25cIik7XG52YXIgYWdncmVnYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGFnZ3JlZ2F0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBhZ2dyZWdhdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiYWdncmVnYXRpb25cIik7XG52YXIgZGVwZW5kZW5jeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgNikuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1kZXBlbmRlbmN5RW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59LCBcImRlcGVuZGVuY3lcIik7XG52YXIgbG9sbGlwb3AgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWxvbGxpcG9wU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGxvbGxpcG9wIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIikuYXR0cihcImN4XCIsIDcpLmF0dHIoXCJjeVwiLCA3KS5hdHRyKFwiclwiLCA2KTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1sb2xsaXBvcEVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgbG9sbGlwb3AgXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxKS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTkwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpLmF0dHIoXCJjeFwiLCA3KS5hdHRyKFwiY3lcIiwgNykuYXR0cihcInJcIiwgNik7XG59LCBcImxvbGxpcG9wXCIpO1xudmFyIHBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItcG9pbnRFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgNSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDgpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCAwIEwgMTAgNSBMIDAgMTAgelwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1wb2ludFN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIDQuNSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDgpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHpcIikuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dNYXJrZXJQYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIDEpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEsMFwiKTtcbn0sIFwicG9pbnRcIik7XG52YXIgY2lyY2xlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItY2lyY2xlRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIDExKS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgXCI1XCIpLmF0dHIoXCJjeVwiLCBcIjVcIikuYXR0cihcInJcIiwgXCI1XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNpcmNsZVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIC0xKS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgXCI1XCIpLmF0dHIoXCJjeVwiLCBcIjVcIikuYXR0cihcInJcIiwgXCI1XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59LCBcImNpcmNsZVwiKTtcbnZhciBjcm9zcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNyb3NzRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBjcm9zcyBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDExIDExXCIpLmF0dHIoXCJyZWZYXCIsIDEyKS5hdHRyKFwicmVmWVwiLCA1LjIpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxMSkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxMSkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDlcIikuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dNYXJrZXJQYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIDIpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEsMFwiKTtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItY3Jvc3NTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY3Jvc3MgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMSAxMVwiKS5hdHRyKFwicmVmWFwiLCAtMSkuYXR0cihcInJlZllcIiwgNS4yKS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAyKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59LCBcImNyb3NzXCIpO1xudmFyIGJhcmIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWJhcmJFbmRcIikuYXR0cihcInJlZlhcIiwgMTkpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxNCkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59LCBcImJhcmJcIik7XG52YXIgbWFya2VycyA9IHtcbiAgZXh0ZW5zaW9uLFxuICBjb21wb3NpdGlvbixcbiAgYWdncmVnYXRpb24sXG4gIGRlcGVuZGVuY3ksXG4gIGxvbGxpcG9wLFxuICBwb2ludCxcbiAgY2lyY2xlLFxuICBjcm9zcyxcbiAgYmFyYlxufTtcbnZhciBtYXJrZXJzX2RlZmF1bHQgPSBpbnNlcnRNYXJrZXJzO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy91dGlsLmpzXG5pbXBvcnQgeyBzZWxlY3QgYXMgc2VsZWN0NCB9IGZyb20gXCJkM1wiO1xudmFyIGxhYmVsSGVscGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlLCBfY2xhc3NlcykgPT4ge1xuICBsZXQgY3NzQ2xhc3NlcztcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IG5vZGUudXNlSHRtbExhYmVscyB8fCBldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGlmICghX2NsYXNzZXMpIHtcbiAgICBjc3NDbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjc3NDbGFzc2VzID0gX2NsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGxhYmVsRWwgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLmF0dHIoXCJzdHlsZVwiLCBub2RlLmxhYmVsU3R5bGUpO1xuICBsZXQgbGFiZWw7XG4gIGlmIChub2RlLmxhYmVsID09PSB2b2lkIDApIHtcbiAgICBsYWJlbCA9IFwiXCI7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwgPSB0eXBlb2Ygbm9kZS5sYWJlbCA9PT0gXCJzdHJpbmdcIiA/IG5vZGUubGFiZWwgOiBub2RlLmxhYmVsWzBdO1xuICB9XG4gIGxldCB0ZXh0O1xuICB0ZXh0ID0gYXdhaXQgY3JlYXRlVGV4dChsYWJlbEVsLCBzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWwpLCBnZXRDb25maWcoKSksIHtcbiAgICB1c2VIdG1sTGFiZWxzLFxuICAgIHdpZHRoOiBub2RlLndpZHRoIHx8IGdldENvbmZpZygpLmZsb3djaGFydC53cmFwcGluZ1dpZHRoLFxuICAgIGNzc0NsYXNzZXM6IFwibWFya2Rvd24tbm9kZS1sYWJlbFwiLFxuICAgIHN0eWxlOiBub2RlLmxhYmVsU3R5bGVcbiAgfSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3Q0KHRleHQpO1xuICAgIGNvbnN0IGltYWdlcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcImltZ1wiKTtcbiAgICBpZiAoaW1hZ2VzKSB7XG4gICAgICBjb25zdCBub0ltZ1RleHQgPSBsYWJlbC5yZXBsYWNlKC88aW1nW14+XSo+L2csIFwiXCIpLnRyaW0oKSA9PT0gXCJcIjtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uaW1hZ2VzXS5tYXAoXG4gICAgICAgICAgKGltZykgPT4gbmV3IFByb21pc2UoKHJlcykgPT4ge1xuICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBJbWFnZSgpIHtcbiAgICAgICAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbiAgICAgICAgICAgICAgaW1nLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcImNvbHVtblwiO1xuICAgICAgICAgICAgICBpZiAobm9JbWdUZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUZvbnRTaXplID0gZ2V0Q29uZmlnKCkuZm9udFNpemUgPyBnZXRDb25maWcoKS5mb250U2l6ZSA6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVubGFyZ2luZ0ZhY3RvciA9IDU7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChib2R5Rm9udFNpemUsIDEwKSAqIGVubGFyZ2luZ0ZhY3RvciArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWluV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMoaW1nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fbmFtZShzZXR1cEltYWdlLCBcInNldHVwSW1hZ2VcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGltZy5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHNldHVwSW1hZ2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgbGFiZWxFbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfSBlbHNlIHtcbiAgICBsYWJlbEVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCwgXCIgKyAtYmJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICB9XG4gIGlmIChub2RlLmNlbnRlckxhYmVsKSB7XG4gICAgbGFiZWxFbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICBsYWJlbEVsLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIHJldHVybiB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZywgbGFiZWw6IGxhYmVsRWwgfTtcbn0sIFwibGFiZWxIZWxwZXJcIik7XG52YXIgdXBkYXRlTm9kZUJvdW5kcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUsIGVsZW1lbnQpID0+IHtcbiAgY29uc3QgYmJveCA9IGVsZW1lbnQubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IGJib3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gYmJveC5oZWlnaHQ7XG59LCBcInVwZGF0ZU5vZGVCb3VuZHNcIik7XG52YXIgZ2V0Tm9kZUNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBleHRyYSkgPT4gKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIiA/IFwicm91Z2gtbm9kZVwiIDogXCJub2RlXCIpICsgXCIgXCIgKyBub2RlLmNzc0NsYXNzZXMgKyBcIiBcIiArIChleHRyYSB8fCBcIlwiKSwgXCJnZXROb2RlQ2xhc3Nlc1wiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9pbnRlcnNlY3QvaW50ZXJzZWN0LW5vZGUuanNcbmZ1bmN0aW9uIGludGVyc2VjdE5vZGUobm9kZSwgcG9pbnQyKSB7XG4gIHJldHVybiBub2RlLmludGVyc2VjdChwb2ludDIpO1xufVxuX19uYW1lKGludGVyc2VjdE5vZGUsIFwiaW50ZXJzZWN0Tm9kZVwiKTtcbnZhciBpbnRlcnNlY3Rfbm9kZV9kZWZhdWx0ID0gaW50ZXJzZWN0Tm9kZTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9pbnRlcnNlY3QvaW50ZXJzZWN0LWVsbGlwc2UuanNcbmZ1bmN0aW9uIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ5LCBwb2ludDIpIHtcbiAgdmFyIGN4ID0gbm9kZS54O1xuICB2YXIgY3kgPSBub2RlLnk7XG4gIHZhciBweCA9IGN4IC0gcG9pbnQyLng7XG4gIHZhciBweSA9IGN5IC0gcG9pbnQyLnk7XG4gIHZhciBkZXQgPSBNYXRoLnNxcnQocnggKiByeCAqIHB5ICogcHkgKyByeSAqIHJ5ICogcHggKiBweCk7XG4gIHZhciBkeCA9IE1hdGguYWJzKHJ4ICogcnkgKiBweCAvIGRldCk7XG4gIGlmIChwb2ludDIueCA8IGN4KSB7XG4gICAgZHggPSAtZHg7XG4gIH1cbiAgdmFyIGR5ID0gTWF0aC5hYnMocnggKiByeSAqIHB5IC8gZGV0KTtcbiAgaWYgKHBvaW50Mi55IDwgY3kpIHtcbiAgICBkeSA9IC1keTtcbiAgfVxuICByZXR1cm4geyB4OiBjeCArIGR4LCB5OiBjeSArIGR5IH07XG59XG5fX25hbWUoaW50ZXJzZWN0RWxsaXBzZSwgXCJpbnRlcnNlY3RFbGxpcHNlXCIpO1xudmFyIGludGVyc2VjdF9lbGxpcHNlX2RlZmF1bHQgPSBpbnRlcnNlY3RFbGxpcHNlO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2ludGVyc2VjdC9pbnRlcnNlY3QtY2lyY2xlLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3RDaXJjbGUobm9kZSwgcngsIHBvaW50Mikge1xuICByZXR1cm4gaW50ZXJzZWN0X2VsbGlwc2VfZGVmYXVsdChub2RlLCByeCwgcngsIHBvaW50Mik7XG59XG5fX25hbWUoaW50ZXJzZWN0Q2lyY2xlLCBcImludGVyc2VjdENpcmNsZVwiKTtcbnZhciBpbnRlcnNlY3RfY2lyY2xlX2RlZmF1bHQgPSBpbnRlcnNlY3RDaXJjbGU7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvaW50ZXJzZWN0L2ludGVyc2VjdC1saW5lLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3RMaW5lKHAxLCBwMiwgcTEsIHEyKSB7XG4gIHZhciBhMSwgYTIsIGIxLCBiMiwgYzEsIGMyO1xuICB2YXIgcjEsIHIyLCByMywgcjQ7XG4gIHZhciBkZW5vbSwgb2Zmc2V0LCBudW07XG4gIHZhciB4LCB5O1xuICBhMSA9IHAyLnkgLSBwMS55O1xuICBiMSA9IHAxLnggLSBwMi54O1xuICBjMSA9IHAyLnggKiBwMS55IC0gcDEueCAqIHAyLnk7XG4gIHIzID0gYTEgKiBxMS54ICsgYjEgKiBxMS55ICsgYzE7XG4gIHI0ID0gYTEgKiBxMi54ICsgYjEgKiBxMi55ICsgYzE7XG4gIGlmIChyMyAhPT0gMCAmJiByNCAhPT0gMCAmJiBzYW1lU2lnbihyMywgcjQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGEyID0gcTIueSAtIHExLnk7XG4gIGIyID0gcTEueCAtIHEyLng7XG4gIGMyID0gcTIueCAqIHExLnkgLSBxMS54ICogcTIueTtcbiAgcjEgPSBhMiAqIHAxLnggKyBiMiAqIHAxLnkgKyBjMjtcbiAgcjIgPSBhMiAqIHAyLnggKyBiMiAqIHAyLnkgKyBjMjtcbiAgaWYgKHIxICE9PSAwICYmIHIyICE9PSAwICYmIHNhbWVTaWduKHIxLCByMikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZGVub20gPSBhMSAqIGIyIC0gYTIgKiBiMTtcbiAgaWYgKGRlbm9tID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9mZnNldCA9IE1hdGguYWJzKGRlbm9tIC8gMik7XG4gIG51bSA9IGIxICogYzIgLSBiMiAqIGMxO1xuICB4ID0gbnVtIDwgMCA/IChudW0gLSBvZmZzZXQpIC8gZGVub20gOiAobnVtICsgb2Zmc2V0KSAvIGRlbm9tO1xuICBudW0gPSBhMiAqIGMxIC0gYTEgKiBjMjtcbiAgeSA9IG51bSA8IDAgPyAobnVtIC0gb2Zmc2V0KSAvIGRlbm9tIDogKG51bSArIG9mZnNldCkgLyBkZW5vbTtcbiAgcmV0dXJuIHsgeCwgeSB9O1xufVxuX19uYW1lKGludGVyc2VjdExpbmUsIFwiaW50ZXJzZWN0TGluZVwiKTtcbmZ1bmN0aW9uIHNhbWVTaWduKHIxLCByMikge1xuICByZXR1cm4gcjEgKiByMiA+IDA7XG59XG5fX25hbWUoc2FtZVNpZ24sIFwic2FtZVNpZ25cIik7XG52YXIgaW50ZXJzZWN0X2xpbmVfZGVmYXVsdCA9IGludGVyc2VjdExpbmU7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvaW50ZXJzZWN0L2ludGVyc2VjdC1wb2x5Z29uLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3RQb2x5Z29uKG5vZGUsIHBvbHlQb2ludHMsIHBvaW50Mikge1xuICBsZXQgeDEgPSBub2RlLng7XG4gIGxldCB5MSA9IG5vZGUueTtcbiAgbGV0IGludGVyc2VjdGlvbnMgPSBbXTtcbiAgbGV0IG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIGxldCBtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBpZiAodHlwZW9mIHBvbHlQb2ludHMuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcG9seVBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgZW50cnkueCk7XG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZW50cnkueSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvbHlQb2ludHMueCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvbHlQb2ludHMueSk7XG4gIH1cbiAgbGV0IGxlZnQgPSB4MSAtIG5vZGUud2lkdGggLyAyIC0gbWluWDtcbiAgbGV0IHRvcCA9IHkxIC0gbm9kZS5oZWlnaHQgLyAyIC0gbWluWTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHAxID0gcG9seVBvaW50c1tpXTtcbiAgICBsZXQgcDIgPSBwb2x5UG9pbnRzW2kgPCBwb2x5UG9pbnRzLmxlbmd0aCAtIDEgPyBpICsgMSA6IDBdO1xuICAgIGxldCBpbnRlcnNlY3QgPSBpbnRlcnNlY3RfbGluZV9kZWZhdWx0KFxuICAgICAgbm9kZSxcbiAgICAgIHBvaW50MixcbiAgICAgIHsgeDogbGVmdCArIHAxLngsIHk6IHRvcCArIHAxLnkgfSxcbiAgICAgIHsgeDogbGVmdCArIHAyLngsIHk6IHRvcCArIHAyLnkgfVxuICAgICk7XG4gICAgaWYgKGludGVyc2VjdCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG4gIGlmICghaW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgaW50ZXJzZWN0aW9ucy5zb3J0KGZ1bmN0aW9uKHAsIHEpIHtcbiAgICAgIGxldCBwZHggPSBwLnggLSBwb2ludDIueDtcbiAgICAgIGxldCBwZHkgPSBwLnkgLSBwb2ludDIueTtcbiAgICAgIGxldCBkaXN0cCA9IE1hdGguc3FydChwZHggKiBwZHggKyBwZHkgKiBwZHkpO1xuICAgICAgbGV0IHFkeCA9IHEueCAtIHBvaW50Mi54O1xuICAgICAgbGV0IHFkeSA9IHEueSAtIHBvaW50Mi55O1xuICAgICAgbGV0IGRpc3RxID0gTWF0aC5zcXJ0KHFkeCAqIHFkeCArIHFkeSAqIHFkeSk7XG4gICAgICByZXR1cm4gZGlzdHAgPCBkaXN0cSA/IC0xIDogZGlzdHAgPT09IGRpc3RxID8gMCA6IDE7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGludGVyc2VjdGlvbnNbMF07XG59XG5fX25hbWUoaW50ZXJzZWN0UG9seWdvbiwgXCJpbnRlcnNlY3RQb2x5Z29uXCIpO1xudmFyIGludGVyc2VjdF9wb2x5Z29uX2RlZmF1bHQgPSBpbnRlcnNlY3RQb2x5Z29uO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2ludGVyc2VjdC9pbmRleC5qc1xudmFyIGludGVyc2VjdF9kZWZhdWx0ID0ge1xuICBub2RlOiBpbnRlcnNlY3Rfbm9kZV9kZWZhdWx0LFxuICBjaXJjbGU6IGludGVyc2VjdF9jaXJjbGVfZGVmYXVsdCxcbiAgZWxsaXBzZTogaW50ZXJzZWN0X2VsbGlwc2VfZGVmYXVsdCxcbiAgcG9seWdvbjogaW50ZXJzZWN0X3BvbHlnb25fZGVmYXVsdCxcbiAgcmVjdDogaW50ZXJzZWN0X3JlY3RfZGVmYXVsdFxufTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvZHJhd1JlY3QudHNcbmltcG9ydCByb3VnaDMgZnJvbSBcInJvdWdoanNcIjtcbnZhciBkcmF3UmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzIH0gPSBzdHlsZXMyU3RyaW5nKG5vZGUpO1xuICBub2RlLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlcztcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHRvdGFsV2lkdGggPSBNYXRoLm1heChiYm94LndpZHRoICsgb3B0aW9ucy5sYWJlbFBhZGRpbmdYICogMiwgbm9kZT8ud2lkdGggfHwgMCk7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoYmJveC5oZWlnaHQgKyBvcHRpb25zLmxhYmVsUGFkZGluZ1kgKiAyLCBub2RlPy5oZWlnaHQgfHwgMCk7XG4gIGNvbnN0IHggPSAtdG90YWxXaWR0aCAvIDI7XG4gIGNvbnN0IHkgPSAtdG90YWxIZWlnaHQgLyAyO1xuICBsZXQgcmVjdDI7XG4gIGxldCB7IHJ4LCByeSB9ID0gbm9kZTtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChvcHRpb25zPy5yeCAmJiBvcHRpb25zLnJ5KSB7XG4gICAgcnggPSBvcHRpb25zLnJ4O1xuICAgIHJ5ID0gb3B0aW9ucy5yeTtcbiAgfVxuICBpZiAobm9kZS5sb29rID09PSBcImhhbmREcmF3blwiKSB7XG4gICAgY29uc3QgcmMgPSByb3VnaDMuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zMiA9IHVzZXJOb2RlT3ZlcnJpZGVzKG5vZGUsIHt9KTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByeCB8fCByeSA/IHJjLnBhdGgoY3JlYXRlUm91bmRlZFJlY3RQYXRoRCh4LCB5LCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwgcnggfHwgMCksIG9wdGlvbnMyKSA6IHJjLnJlY3RhbmdsZSh4LCB5LCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwgb3B0aW9uczIpO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJiYXNpYyBsYWJlbC1jb250YWluZXJcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpLmF0dHIoXCJyeFwiLCByeCkuYXR0cihcImRhdGEtaWRcIiwgXCJhYmNcIikuYXR0cihcImRhdGEtZXRcIiwgXCJub2RlXCIpLmF0dHIoXCJyeVwiLCByeSkuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiZHJhd1JlY3RcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3N0YXRlLnRzXG52YXIgc3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICByeDogNSxcbiAgICByeTogNSxcbiAgICBjbGFzc2VzOiBcImZsb3djaGFydC1ub2RlXCJcbiAgfTtcbiAgcmV0dXJuIGRyYXdSZWN0KHBhcmVudCwgbm9kZSwgb3B0aW9ucyk7XG59LCBcInN0YXRlXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9yb3VuZGVkUmVjdC50c1xudmFyIHJvdW5kZWRSZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgcng6IDUsXG4gICAgcnk6IDUsXG4gICAgY2xhc3NlczogXCJcIixcbiAgICBsYWJlbFBhZGRpbmdYOiAobm9kZT8ucGFkZGluZyB8fCAwKSAqIDEsXG4gICAgbGFiZWxQYWRkaW5nWTogKG5vZGU/LnBhZGRpbmcgfHwgMCkgKiAxXG4gIH07XG4gIHJldHVybiBkcmF3UmVjdChwYXJlbnQsIG5vZGUsIG9wdGlvbnMpO1xufSwgXCJyb3VuZGVkUmVjdFwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvc3F1YXJlUmVjdC50c1xudmFyIHNxdWFyZVJlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgcng6IDAsXG4gICAgcnk6IDAsXG4gICAgY2xhc3NlczogXCJcIixcbiAgICBsYWJlbFBhZGRpbmdYOiAobm9kZT8ucGFkZGluZyB8fCAwKSAqIDIsXG4gICAgbGFiZWxQYWRkaW5nWTogKG5vZGU/LnBhZGRpbmcgfHwgMCkgKiAxXG4gIH07XG4gIHJldHVybiBkcmF3UmVjdChwYXJlbnQsIG5vZGUsIG9wdGlvbnMpO1xufSwgXCJzcXVhcmVSZWN0XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9zdGF0ZVN0YXJ0LnRzXG5pbXBvcnQgcm91Z2g0IGZyb20gXCJyb3VnaGpzXCI7XG52YXIgc3RhdGVTdGFydCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBsaW5lQ29sb3IgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdFwiKS5hdHRyKFwiaWRcIiwgbm9kZS5kb21JZCB8fCBub2RlLmlkKTtcbiAgbGV0IGNpcmNsZTM7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoNC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLmNpcmNsZSgwLCAwLCAxNCwgc29saWRTdGF0ZUZpbGwobGluZUNvbG9yKSk7XG4gICAgY2lyY2xlMyA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGNpcmNsZTMgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIH1cbiAgY2lyY2xlMy5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTMpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgNywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJzdGF0ZVN0YXJ0XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9zdGF0ZUVuZC50c1xuaW1wb3J0IHJvdWdoNSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIHN0YXRlRW5kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgdGhlbWVWYXJpYWJsZXMgfSA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IGxpbmVDb2xvciB9ID0gdGhlbWVWYXJpYWJsZXM7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZSBkZWZhdWx0XCIpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBsZXQgY2lyY2xlMztcbiAgbGV0IGlubmVyQ2lyY2xlO1xuICBpZiAobm9kZS5sb29rID09PSBcImhhbmREcmF3blwiKSB7XG4gICAgY29uc3QgcmMgPSByb3VnaDUuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5jaXJjbGUoMCwgMCwgMTQsIHsgLi4uc29saWRTdGF0ZUZpbGwobGluZUNvbG9yKSwgcm91Z2huZXNzOiAwLjUgfSk7XG4gICAgY29uc3Qgcm91Z2hJbm5lck5vZGUgPSByYy5jaXJjbGUoMCwgMCwgNSwgeyAuLi5zb2xpZFN0YXRlRmlsbChsaW5lQ29sb3IpLCBmaWxsU3R5bGU6IFwic29saWRcIiB9KTtcbiAgICBjaXJjbGUzID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSk7XG4gICAgaW5uZXJDaXJjbGUgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hJbm5lck5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGlubmVyQ2lyY2xlID0gc2hhcGVTdmcuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNpcmNsZTMgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgY2lyY2xlMy5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICAgIGlubmVyQ2lyY2xlLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLWVuZFwiKS5hdHRyKFwiclwiLCA1KS5hdHRyKFwid2lkdGhcIiwgMTApLmF0dHIoXCJoZWlnaHRcIiwgMTApO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY2lyY2xlMyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LmNpcmNsZShub2RlLCA3LCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YXRlRW5kXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9mb3JrSm9pbi50c1xuaW1wb3J0IHJvdWdoNiBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGZvcmtKb2luID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlLCBkaXIpID0+IHtcbiAgY29uc3QgeyB0aGVtZVZhcmlhYmxlcyB9ID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgbGluZUNvbG9yIH0gPSB0aGVtZVZhcmlhYmxlcztcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGxldCB3aWR0aCA9IDcwO1xuICBsZXQgaGVpZ2h0ID0gMTA7XG4gIGlmIChkaXIgPT09IFwiTFJcIikge1xuICAgIHdpZHRoID0gMTA7XG4gICAgaGVpZ2h0ID0gNzA7XG4gIH1cbiAgY29uc3QgeCA9IC0xICogd2lkdGggLyAyO1xuICBjb25zdCB5ID0gLTEgKiBoZWlnaHQgLyAyO1xuICBsZXQgc2hhcGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoNi5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb2xpZFN0YXRlRmlsbChsaW5lQ29sb3IpKTtcbiAgICBzaGFwZSA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHNoYXBlID0gc2hhcGVTdmcuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJmb3JrLWpvaW5cIik7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBzaGFwZSk7XG4gIGxldCBub2RlSGVpZ2h0ID0gMDtcbiAgbGV0IG5vZGVXaWR0aCA9IDA7XG4gIGxldCBub2RlUGFkZGluZyA9IDEwO1xuICBpZiAobm9kZS5oZWlnaHQpIHtcbiAgICBub2RlSGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gIH1cbiAgaWYgKG5vZGUud2lkdGgpIHtcbiAgICBub2RlV2lkdGggPSBub2RlLndpZHRoO1xuICB9XG4gIGlmIChub2RlLnBhZGRpbmcpIHtcbiAgICBub2RlUGFkZGluZyA9IG5vZGUucGFkZGluZztcbiAgfVxuICBub2RlLmhlaWdodCA9IG5vZGVIZWlnaHQgKyBub2RlUGFkZGluZyAvIDI7XG4gIG5vZGUud2lkdGggPSBub2RlV2lkdGggKyBub2RlUGFkZGluZyAvIDI7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJmb3JrSm9pblwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvY2hvaWNlLnRzXG5pbXBvcnQgcm91Z2g3IGZyb20gXCJyb3VnaGpzXCI7XG52YXIgY2hvaWNlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBsaW5lQ29sb3IgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdFwiKS5hdHRyKFwiaWRcIiwgbm9kZS5kb21JZCB8fCBub2RlLmlkKTtcbiAgY29uc3QgcyA9IDI4O1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiBzIC8gMiB9LFxuICAgIHsgeDogcyAvIDIsIHk6IDAgfSxcbiAgICB7IHg6IDAsIHk6IC1zIC8gMiB9LFxuICAgIHsgeDogLXMgLyAyLCB5OiAwIH1cbiAgXTtcbiAgbGV0IGNob2ljZTI7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoNy5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHBvaW50QXJyID0gcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gW2QueCwgZC55XTtcbiAgICB9KTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5wb2x5Z29uKHBvaW50QXJyLCBzb2xpZFN0YXRlRmlsbChsaW5lQ29sb3IpKTtcbiAgICBjaG9pY2UyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgY2hvaWNlMiA9IHNoYXBlU3ZnLmluc2VydChcInBvbHlnb25cIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcbiAgICAgIFwicG9pbnRzXCIsXG4gICAgICBwb2ludHMubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIGQueCArIFwiLFwiICsgZC55O1xuICAgICAgfSkuam9pbihcIiBcIilcbiAgICApO1xuICB9XG4gIGNob2ljZTIuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtc3RhcnRcIikuYXR0cihcInJcIiwgNykuYXR0cihcIndpZHRoXCIsIDI4KS5hdHRyKFwiaGVpZ2h0XCIsIDI4KS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIG5vZGUud2lkdGggPSAyODtcbiAgbm9kZS5oZWlnaHQgPSAyODtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIDE0LCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImNob2ljZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvbm90ZS50c1xuaW1wb3J0IHJvdWdoOCBmcm9tIFwicm91Z2hqc1wiO1xudmFyIG5vdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyB0aGVtZVZhcmlhYmxlcywgaGFuZERyYXduU2VlZCB9ID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgbm90ZUJvcmRlckNvbG9yLCBub3RlQmtnQ29sb3IgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gbm9kZS51c2VIdG1sTGFiZWxzO1xuICBpZiAoIXVzZUh0bWxMYWJlbHMpIHtcbiAgICBub2RlLmNlbnRlckxhYmVsID0gdHJ1ZTtcbiAgfVxuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIFwibm9kZSBcIiArIG5vZGUuY3NzQ2xhc3Nlcyk7XG4gIGxvZy5pbmZvKFwiQ2xhc3NlcyA9IFwiLCBub2RlLmNzc0NsYXNzZXMpO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgbGV0IHJlY3QyO1xuICBjb25zdCB0b3RhbFdpZHRoID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgeCA9IC10b3RhbFdpZHRoIC8gMjtcbiAgY29uc3QgeSA9IC10b3RhbEhlaWdodCAvIDI7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoOC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCB5LCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwge1xuICAgICAgcm91Z2huZXNzOiAwLjcsXG4gICAgICBmaWxsOiBub3RlQmtnQ29sb3IsXG4gICAgICBmaWxsV2VpZ2h0OiAzLFxuICAgICAgc2VlZDogaGFuZERyYXduU2VlZCxcbiAgICAgIC8vIGZpbGxTdHlsZTogJ3NvbGlkJywgLy8gc29saWQgZmlsbCdcbiAgICAgIHN0cm9rZTogbm90ZUJvcmRlckNvbG9yXG4gICAgfSk7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJiYXNpYyBsYWJlbC1jb250YWluZXJcIikuYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyLmF0dHIoXCJyeFwiLCBub2RlLnJ4KS5hdHRyKFwicnlcIiwgbm9kZS5yeSkuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwibm90ZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvc3RhZGl1bS50c1xuaW1wb3J0IHJvdWdoOSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIHN0YWRpdW0gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgaCAvIDQgKyBub2RlLnBhZGRpbmc7XG4gIGxldCByZWN0MjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoOS5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVSb3VuZGVkUmVjdFBhdGhEKC13IC8gMiwgLWggLyAyLCB3LCBoLCBoIC8gMik7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucGF0aChwYXRoRGF0YSwgb3B0aW9ucyk7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJiYXNpYyBsYWJlbC1jb250YWluZXJcIikuYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcykuYXR0cihcInJ4XCIsIGggLyAyKS5hdHRyKFwicnlcIiwgaCAvIDIpLmF0dHIoXCJ4XCIsIC13IC8gMikuYXR0cihcInlcIiwgLWggLyAyKS5hdHRyKFwid2lkdGhcIiwgdykuYXR0cihcImhlaWdodFwiLCBoKTtcbiAgfVxuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YWRpdW1cIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3JlY3RXaXRoVGl0bGUudHNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3Q1IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgcm91Z2gxMCBmcm9tIFwicm91Z2hqc1wiO1xudmFyIHJlY3RXaXRoVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGxldCBjbGFzc2VzO1xuICBpZiAoIW5vZGUuY3NzQ2xhc3Nlcykge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgZGVmYXVsdFwiO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgXCIgKyBub2RlLmNzc0NsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGcgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpO1xuICBjb25zdCBsYWJlbCA9IHNoYXBlU3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWxcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IG5vZGUuZGVzY3JpcHRpb247XG4gIGNvbnN0IHRpdGxlID0gbm9kZS5sYWJlbDtcbiAgY29uc3QgdGV4dCA9IGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KHRpdGxlLCBub2RlLmxhYmVsU3R5bGUsIHRydWUsIHRydWUpKTtcbiAgbGV0IGJib3ggPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2MiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYyID0gc2VsZWN0NSh0ZXh0KTtcbiAgICBiYm94ID0gZGl2Mi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdjIuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2Mi5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0KTtcbiAgfVxuICBsb2cuaW5mbyhcIlRleHQgMlwiLCBkZXNjcmlwdGlvbik7XG4gIGNvbnN0IHRleHRSb3dzID0gZGVzY3JpcHRpb24gfHwgW107XG4gIGNvbnN0IHRpdGxlQm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IGRlc2NyID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKFxuICAgIGF3YWl0IGNyZWF0ZUxhYmVsX2RlZmF1bHQoXG4gICAgICB0ZXh0Um93cy5qb2luID8gdGV4dFJvd3Muam9pbihcIjxici8+XCIpIDogdGV4dFJvd3MsXG4gICAgICBub2RlLmxhYmVsU3R5bGUsXG4gICAgICB0cnVlLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKTtcbiAgY29uc3QgZGl2ID0gZGVzY3IuY2hpbGRyZW5bMF07XG4gIGNvbnN0IGR2ID0gc2VsZWN0NShkZXNjcik7XG4gIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gKG5vZGUucGFkZGluZyB8fCAwKSAvIDI7XG4gIHNlbGVjdDUoZGVzY3IpLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZSggXCIgKyAoYmJveC53aWR0aCA+IHRpdGxlQm94LndpZHRoID8gMCA6ICh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgXCIgKyAodGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcgKyA1KSArIFwiKVwiXG4gICk7XG4gIHNlbGVjdDUodGV4dCkuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKCBcIiArIChiYm94LndpZHRoIDwgdGl0bGVCb3gud2lkdGggPyAwIDogLSh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgMClcIlxuICApO1xuICBiYm94ID0gbGFiZWwubm9kZSgpLmdldEJCb3goKTtcbiAgbGFiZWwuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgKC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIDMpICsgXCIpXCJcbiAgKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IGJib3gud2lkdGggKyAobm9kZS5wYWRkaW5nIHx8IDApO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IGJib3guaGVpZ2h0ICsgKG5vZGUucGFkZGluZyB8fCAwKTtcbiAgY29uc3QgeCA9IC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nO1xuICBjb25zdCB5ID0gLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nO1xuICBsZXQgcmVjdDI7XG4gIGxldCBpbm5lckxpbmU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTAuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgoXG4gICAgICBjcmVhdGVSb3VuZGVkUmVjdFBhdGhEKHgsIHksIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0LCBub2RlLnJ4IHx8IDApLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgY29uc3Qgcm91Z2hMaW5lID0gcmMubGluZShcbiAgICAgIC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nLFxuICAgICAgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgdGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcsXG4gICAgICBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nLFxuICAgICAgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgdGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpbm5lckxpbmUgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4ge1xuICAgICAgbG9nLmRlYnVnKFwiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDXCIsIHJvdWdoTm9kZSk7XG4gICAgICByZXR1cm4gcm91Z2hMaW5lO1xuICAgIH0sIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhcIlJvdWdoIG5vZGUgaW5zZXJ0IENYQ1wiLCByb3VnaE5vZGUpO1xuICAgICAgcmV0dXJuIHJvdWdoTm9kZTtcbiAgICB9LCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZWN0MiA9IGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBpbm5lckxpbmUgPSBnLmluc2VydChcImxpbmVcIik7XG4gICAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwib3V0ZXIgdGl0bGUtc3RhdGVcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpLmF0dHIoXCJ4XCIsIC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgKG5vZGUucGFkZGluZyB8fCAwKSkuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIChub2RlLnBhZGRpbmcgfHwgMCkpO1xuICAgIGlubmVyTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIngyXCIsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcpLmF0dHIoXCJ5MVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyB0aXRsZUJveC5oZWlnaHQgKyBoYWxmUGFkZGluZykuYXR0cihcInkyXCIsIC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIHRpdGxlQm94LmhlaWdodCArIGhhbGZQYWRkaW5nKTtcbiAgfVxuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInJlY3RXaXRoVGl0bGVcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3N1YnJvdXRpbmUudHNcbmltcG9ydCByb3VnaDExIGZyb20gXCJyb3VnaGpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2luc2VydFBvbHlnb25TaGFwZS50c1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbC1jb250YWluZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC13IC8gMiArIFwiLFwiICsgaCAvIDIgKyBcIilcIik7XG59XG5fX25hbWUoaW5zZXJ0UG9seWdvblNoYXBlLCBcImluc2VydFBvbHlnb25TaGFwZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvc3Vicm91dGluZS50c1xudmFyIHN1YnJvdXRpbmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IChub2RlPy5wYWRkaW5nIHx8IDApIC8gMjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgeCA9IC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nO1xuICBjb25zdCB5ID0gLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggfSxcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IC04LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgOCwgeTogMCB9LFxuICAgIHsgeDogdyArIDgsIHk6IC1oIH0sXG4gICAgeyB4OiAtOCwgeTogLWggfSxcbiAgICB7IHg6IC04LCB5OiAwIH1cbiAgXTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxMS5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucmVjdGFuZ2xlKHggLSA4LCB5LCB3ICsgMTYsIGgsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGwxID0gcmMubGluZSh4LCB5LCB4LCB5ICsgaCwgb3B0aW9ucyk7XG4gICAgY29uc3QgbDIgPSByYy5saW5lKHggKyB3LCB5LCB4ICsgdywgeSArIGgsIG9wdGlvbnMpO1xuICAgIHNoYXBlU3ZnLmluc2VydCgoKSA9PiBsMSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgc2hhcGVTdmcuaW5zZXJ0KCgpID0+IGwyLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IHsgY3NzU3R5bGVzIH0gPSBub2RlO1xuICAgIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgICBpZiAobm9kZVN0eWxlcykge1xuICAgICAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICAgIH1cbiAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgfVxuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJzdWJyb3V0aW5lXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9jeWxpbmRlci50c1xuaW1wb3J0IHJvdWdoMTIgZnJvbSBcInJvdWdoanNcIjtcbnZhciBjcmVhdGVDeWxpbmRlclBhdGhEID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgcngsIHJ5KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3h9LCR7eSArIHJ5fWAsXG4gICAgYGEke3J4fSwke3J5fSAwLDAsMCAke3dpZHRofSwwYCxcbiAgICBgYSR7cnh9LCR7cnl9IDAsMCwwICR7LXdpZHRofSwwYCxcbiAgICBgbDAsJHtoZWlnaHR9YCxcbiAgICBgYSR7cnh9LCR7cnl9IDAsMCwwICR7d2lkdGh9LDBgLFxuICAgIGBsMCwkey1oZWlnaHR9YFxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVDeWxpbmRlclBhdGhEXCIpO1xudmFyIGNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJ4LCByeSkgPT4ge1xuICByZXR1cm4gW1xuICAgIGBNJHt4fSwke3kgKyByeX1gLFxuICAgIGBNJHt4ICsgd2lkdGh9LCR7eSArIHJ5fWAsXG4gICAgYGEke3J4fSwke3J5fSAwLDAsMCAkey13aWR0aH0sMGAsXG4gICAgYGwwLCR7aGVpZ2h0fWAsXG4gICAgYGEke3J4fSwke3J5fSAwLDAsMCAke3dpZHRofSwwYCxcbiAgICBgbDAsJHstaGVpZ2h0fWBcbiAgXS5qb2luKFwiIFwiKTtcbn0sIFwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEXCIpO1xudmFyIGNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJ4LCByeSkgPT4ge1xuICByZXR1cm4gW2BNJHt4IC0gd2lkdGggLyAyfSwkey1oZWlnaHQgLyAyfWAsIGBhJHtyeH0sJHtyeX0gMCwwLDAgJHt3aWR0aH0sMGBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aERcIik7XG52YXIgY3lsaW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcnggPSB3IC8gMjtcbiAgY29uc3QgcnkgPSByeCAvICgyLjUgKyB3IC8gNTApO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyByeSArIG5vZGUucGFkZGluZztcbiAgbGV0IGN5bGluZGVyMjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTIuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvdXRlclBhdGhEYXRhID0gY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEKDAsIDAsIHcsIGgsIHJ4LCByeSk7XG4gICAgY29uc3QgaW5uZXJQYXRoRGF0YSA9IGNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCgwLCByeSwgdywgaCwgcngsIHJ5KTtcbiAgICBjb25zdCBvdXRlck5vZGUgPSByYy5wYXRoKG91dGVyUGF0aERhdGEsIHVzZXJOb2RlT3ZlcnJpZGVzKG5vZGUsIHt9KSk7XG4gICAgY29uc3QgaW5uZXJMaW5lID0gcmMucGF0aChpbm5lclBhdGhEYXRhLCB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7IGZpbGw6IFwibm9uZVwiIH0pKTtcbiAgICBjeWxpbmRlcjIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gaW5uZXJMaW5lLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjeWxpbmRlcjIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gb3V0ZXJOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjeWxpbmRlcjIuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpO1xuICAgIGlmIChjc3NTdHlsZXMpIHtcbiAgICAgIGN5bGluZGVyMi5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVDeWxpbmRlclBhdGhEKDAsIDAsIHcsIGgsIHJ4LCByeSk7XG4gICAgY3lsaW5kZXIyID0gc2hhcGVTdmcuaW5zZXJ0KFwicGF0aFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiZFwiLCBwYXRoRGF0YSkuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKTtcbiAgfVxuICBjeWxpbmRlcjIuYXR0cihcImxhYmVsLW9mZnNldC15XCIsIHJ5KTtcbiAgY3lsaW5kZXIyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgkey13IC8gMn0sICR7LShoIC8gMiArIHJ5KX0pYCk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY3lsaW5kZXIyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICBjb25zdCBwb3MgPSBpbnRlcnNlY3RfZGVmYXVsdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gICAgY29uc3QgeCA9IHBvcy54IC0gKG5vZGUueCA/PyAwKTtcbiAgICBpZiAocnggIT0gMCAmJiAoTWF0aC5hYnMoeCkgPCAobm9kZS53aWR0aCA/PyAwKSAvIDIgfHwgTWF0aC5hYnMoeCkgPT0gKG5vZGUud2lkdGggPz8gMCkgLyAyICYmIE1hdGguYWJzKHBvcy55IC0gKG5vZGUueSA/PyAwKSkgPiAobm9kZS5oZWlnaHQgPz8gMCkgLyAyIC0gcnkpKSB7XG4gICAgICBsZXQgeSA9IHJ5ICogcnkgKiAoMSAtIHggKiB4IC8gKHJ4ICogcngpKTtcbiAgICAgIGlmICh5ID4gMCkge1xuICAgICAgICB5ID0gTWF0aC5zcXJ0KHkpO1xuICAgICAgfVxuICAgICAgeSA9IHJ5IC0geTtcbiAgICAgIGlmIChwb2ludDIueSAtIChub2RlLnkgPz8gMCkgPiAwKSB7XG4gICAgICAgIHkgPSAteTtcbiAgICAgIH1cbiAgICAgIHBvcy55ICs9IHk7XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiY3lsaW5kZXJcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2NpcmNsZS50c1xuaW1wb3J0IHJvdWdoMTMgZnJvbSBcInJvdWdoanNcIjtcbnZhciBjaXJjbGUyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZyB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHJhZGl1cyA9IGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmc7XG4gIGxldCBjaXJjbGVFbGVtO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxMy5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMuY2lyY2xlKDAsIDAsIHJhZGl1cyAqIDIsIG9wdGlvbnMpO1xuICAgIGNpcmNsZUVsZW0gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjaXJjbGVFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgfSBlbHNlIHtcbiAgICBjaXJjbGVFbGVtID0gc2hhcGVTdmcuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcykuYXR0cihcInJcIiwgcmFkaXVzKS5hdHRyKFwiY3hcIiwgMCkuYXR0cihcImN5XCIsIDApO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY2lyY2xlRWxlbSk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgbG9nLmluZm8oXCJDaXJjbGUgaW50ZXJzZWN0XCIsIG5vZGUsIHJhZGl1cywgcG9pbnQyKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIHJhZGl1cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJjaXJjbGVcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2RvdWJsZUNpcmNsZS50c1xuaW1wb3J0IHJvdWdoMTQgZnJvbSBcInJvdWdoanNcIjtcbnZhciBkb3VibGVjaXJjbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIGdldE5vZGVDbGFzc2VzKG5vZGUpKTtcbiAgY29uc3QgZ2FwID0gNTtcbiAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nICsgZ2FwO1xuICBjb25zdCBpbm5lclJhZGl1cyA9IGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmc7XG4gIGxldCBjaXJjbGVHcm91cDtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTQuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvdXRlck9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7IHJvdWdobmVzczogMC4yLCBzdHJva2VXaWR0aDogMi41IH0pO1xuICAgIGNvbnN0IGlubmVyT3B0aW9ucyA9IHVzZXJOb2RlT3ZlcnJpZGVzKG5vZGUsIHsgcm91Z2huZXNzOiAwLjIsIHN0cm9rZVdpZHRoOiAxLjUgfSk7XG4gICAgY29uc3Qgb3V0ZXJSb3VnaE5vZGUgPSByYy5jaXJjbGUoMCwgMCwgb3V0ZXJSYWRpdXMgKiAyLCBvdXRlck9wdGlvbnMpO1xuICAgIGNvbnN0IGlubmVyUm91Z2hOb2RlID0gcmMuY2lyY2xlKDAsIDAsIGlubmVyUmFkaXVzICogMiwgaW5uZXJPcHRpb25zKTtcbiAgICBjaXJjbGVHcm91cCA9IHNoYXBlU3ZnLmluc2VydChcImdcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgY2lyY2xlR3JvdXAuYXR0cihcImNsYXNzXCIsIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gICAgY2lyY2xlR3JvdXAubm9kZSgpPy5hcHBlbmRDaGlsZChvdXRlclJvdWdoTm9kZSk7XG4gICAgY2lyY2xlR3JvdXAubm9kZSgpPy5hcHBlbmRDaGlsZChpbm5lclJvdWdoTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgY2lyY2xlR3JvdXAgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IG91dGVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IGlubmVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIpO1xuICAgIGNpcmNsZUdyb3VwLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gICAgb3V0ZXJDaXJjbGUuYXR0cihcImNsYXNzXCIsIFwib3V0ZXItY2lyY2xlXCIpLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKS5hdHRyKFwiclwiLCBvdXRlclJhZGl1cykuYXR0cihcImN4XCIsIDApLmF0dHIoXCJjeVwiLCAwKTtcbiAgICBpbm5lckNpcmNsZS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lci1jaXJjbGVcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpLmF0dHIoXCJyXCIsIGlubmVyUmFkaXVzKS5hdHRyKFwiY3hcIiwgMCkuYXR0cihcImN5XCIsIDApO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY2lyY2xlR3JvdXApO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIGxvZy5pbmZvKFwiRG91YmxlQ2lyY2xlIGludGVyc2VjdFwiLCBub2RlLCBvdXRlclJhZGl1cywgcG9pbnQyKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIG91dGVyUmFkaXVzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImRvdWJsZWNpcmNsZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvcmVjdExlZnRJbnZBcnJvdy50c1xuaW1wb3J0IHJvdWdoMTUgZnJvbSBcInJvdWdoanNcIjtcbnZhciBjcmVhdGVQb2x5Z29uUGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggLSBoZWlnaHQgLyAyfSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRofSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRofSwke3kgLSBoZWlnaHR9YCxcbiAgICBgTCR7eCAtIGhlaWdodCAvIDJ9LCR7eSAtIGhlaWdodH1gLFxuICAgIGBMJHt4fSwke3kgLSBoZWlnaHQgLyAyfWAsXG4gICAgXCJaXCJcbiAgXS5qb2luKFwiIFwiKTtcbn0sIFwiY3JlYXRlUG9seWdvblBhdGhEXCIpO1xudmFyIHJlY3RfbGVmdF9pbnZfYXJyb3cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtaCAvIDIsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIH0sXG4gICAgeyB4OiAtaCAvIDIsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCAvIDIgfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTUuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlUG9seWdvblBhdGhEKDAsIDAsIHcsIGgpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstdyAvIDJ9LCAke2ggLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgbm9kZS53aWR0aCA9IHcgKyBoO1xuICBub2RlLmhlaWdodCA9IGg7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcG9seWdvbik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3F1ZXN0aW9uLnRzXG5pbXBvcnQgcm91Z2gxNiBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZURlY2lzaW9uQm94UGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCBzaXplKSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggKyBzaXplIC8gMn0sJHt5fWAsXG4gICAgYEwke3ggKyBzaXplfSwke3kgLSBzaXplIC8gMn1gLFxuICAgIGBMJHt4ICsgc2l6ZSAvIDJ9LCR7eSAtIHNpemV9YCxcbiAgICBgTCR7eH0sJHt5IC0gc2l6ZSAvIDJ9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVEZWNpc2lvbkJveFBhdGhEXCIpO1xudmFyIHF1ZXN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIGdldE5vZGVDbGFzc2VzKG5vZGUpKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcyA9IHcgKyBoO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBzIC8gMiwgeTogMCB9LFxuICAgIHsgeDogcywgeTogLXMgLyAyIH0sXG4gICAgeyB4OiBzIC8gMiwgeTogLXMgfSxcbiAgICB7IHg6IDAsIHk6IC1zIC8gMiB9XG4gIF07XG4gIGxldCBwb2x5Z29uO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxNi5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVEZWNpc2lvbkJveFBhdGhEKDAsIDAsIHMpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstcyAvIDJ9LCAke3MgLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCBzLCBzLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBwb2x5Z29uKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcIkFQQTEyIEludGVyc2VjdCBjYWxsZWQgU1BMSVRcXG5wb2ludDpcIixcbiAgICAgIHBvaW50MixcbiAgICAgIFwiXFxubm9kZTpcXG5cIixcbiAgICAgIG5vZGUsXG4gICAgICBcIlxcbnJlczpcIixcbiAgICAgIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpXG4gICAgKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicXVlc3Rpb25cIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2hleGFnb24udHNcbmltcG9ydCByb3VnaDE3IGZyb20gXCJyb3VnaGpzXCI7XG52YXIgY3JlYXRlSGV4YWdvblBhdGhEID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgbSkgPT4ge1xuICByZXR1cm4gW1xuICAgIGBNJHt4ICsgbX0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCAtIG19LCR7eX1gLFxuICAgIGBMJHt4ICsgd2lkdGh9LCR7eSAtIGhlaWdodCAvIDJ9YCxcbiAgICBgTCR7eCArIHdpZHRoIC0gbX0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgYEwke3ggKyBtfSwke3kgLSBoZWlnaHR9YCxcbiAgICBgTCR7eH0sJHt5IC0gaGVpZ2h0IC8gMn1gLFxuICAgIFwiWlwiXG4gIF0uam9pbihcIiBcIik7XG59LCBcImNyZWF0ZUhleGFnb25QYXRoRFwiKTtcbnZhciBoZXhhZ29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIGdldE5vZGVDbGFzc2VzKG5vZGUpKTtcbiAgY29uc3QgZiA9IDQ7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgbSA9IGggLyBmO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIDIgKiBtICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBtLCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gbSwgeTogMCB9LFxuICAgIHsgeDogdywgeTogLWggLyAyIH0sXG4gICAgeyB4OiB3IC0gbSwgeTogLWggfSxcbiAgICB7IHg6IG0sIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCAvIDIgfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTcuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlSGV4YWdvblBhdGhEKDAsIDAsIHcsIGgsIG0pO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstdyAvIDJ9LCAke2ggLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgbm9kZS53aWR0aCA9IHc7XG4gIG5vZGUuaGVpZ2h0ID0gaDtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBwb2x5Z29uKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiaGV4YWdvblwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvbGVhblJpZ2h0LnRzXG5pbXBvcnQgcm91Z2gxOCBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZUxlYW5SaWdodFBhdGhEID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCwgeSwgd2lkdGgsIGhlaWdodCkgPT4ge1xuICByZXR1cm4gW1xuICAgIGBNJHt4IC0gMiAqIGhlaWdodCAvIDZ9LCR7eX1gLFxuICAgIGBMJHt4ICsgd2lkdGggLSBoZWlnaHQgLyA2fSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRoICsgMiAqIGhlaWdodCAvIDZ9LCR7eSAtIGhlaWdodH1gLFxuICAgIGBMJHt4ICsgaGVpZ2h0IC8gNn0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgXCJaXCJcbiAgXS5qb2luKFwiIFwiKTtcbn0sIFwiY3JlYXRlTGVhblJpZ2h0UGF0aERcIik7XG52YXIgbGVhbl9yaWdodCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzIH0gPSBzdHlsZXMyU3RyaW5nKG5vZGUpO1xuICBub2RlLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlcztcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IC0yICogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgLSBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIDIgKiBoIC8gNiwgeTogLWggfSxcbiAgICB7IHg6IGggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGxldCBwb2x5Z29uO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxOC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVMZWFuUmlnaHRQYXRoRCgwLCAwLCB3LCBoKTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5wYXRoKHBhdGhEYXRhLCBvcHRpb25zKTtcbiAgICBwb2x5Z29uID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7LXcgLyAyfSwgJHtoIC8gMn0pYCk7XG4gICAgaWYgKGNzc1N0eWxlcykge1xuICAgICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcG9seWdvbiA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgfVxuICBpZiAobm9kZVN0eWxlcykge1xuICAgIHBvbHlnb24uYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICB9XG4gIG5vZGUud2lkdGggPSB3O1xuICBub2RlLmhlaWdodCA9IGg7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcG9seWdvbik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImxlYW5fcmlnaHRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2xlYW5MZWZ0LnRzXG5pbXBvcnQgcm91Z2gxOSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZUxlYW5MZWZ0UGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggKyAyICogaGVpZ2h0IC8gNn0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCArIGhlaWdodCAvIDZ9LCR7eX1gLFxuICAgIGBMJHt4ICsgd2lkdGggLSAyICogaGVpZ2h0IC8gNn0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgYEwke3ggLSBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVMZWFuTGVmdFBhdGhEXCIpO1xudmFyIGxlYW5fbGVmdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzIH0gPSBzdHlsZXMyU3RyaW5nKG5vZGUpO1xuICBub2RlLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlcztcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gMiAqIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogLWggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGxldCBwb2x5Z29uO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxOS5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVMZWFuTGVmdFBhdGhEKDAsIDAsIHcsIGgpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstdyAvIDJ9LCAke2ggLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgbm9kZS53aWR0aCA9IHc7XG4gIG5vZGUuaGVpZ2h0ID0gaDtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBwb2x5Z29uKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwibGVhbl9sZWZ0XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy90cmFwZXpvaWQudHNcbmltcG9ydCByb3VnaDIwIGZyb20gXCJyb3VnaGpzXCI7XG52YXIgY3JlYXRlVHJhcGV6b2lkUGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggLSAyICogaGVpZ2h0IC8gNn0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCArIDIgKiBoZWlnaHQgLyA2fSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRoIC0gaGVpZ2h0IC8gNn0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgYEwke3ggKyBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVUcmFwZXpvaWRQYXRoRFwiKTtcbnZhciB0cmFwZXpvaWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMjAuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlVHJhcGV6b2lkUGF0aEQoMCwgMCwgdywgaCk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucGF0aChwYXRoRGF0YSwgb3B0aW9ucyk7XG4gICAgcG9seWdvbiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgkey13IC8gMn0sICR7aCAvIDJ9KWApO1xuICAgIGlmIChjc3NTdHlsZXMpIHtcbiAgICAgIHBvbHlnb24uYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBvbHlnb24gPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIH1cbiAgaWYgKG5vZGVTdHlsZXMpIHtcbiAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKTtcbiAgfVxuICBub2RlLndpZHRoID0gdztcbiAgbm9kZS5oZWlnaHQgPSBoO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHBvbHlnb24pO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJ0cmFwZXpvaWRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2ludmVydGVkVHJhcGV6b2lkLnRzXG5pbXBvcnQgcm91Z2gyMSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZUludmVydGVkVHJhcGV6b2lkUGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggKyBoZWlnaHQgLyA2fSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRoIC0gaGVpZ2h0IC8gNn0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCArIDIgKiBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBgTCR7eCAtIDIgKiBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVJbnZlcnRlZFRyYXBlem9pZFBhdGhEXCIpO1xudmFyIGludl90cmFwZXpvaWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgMiAqIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogLTIgKiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMjEuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlSW52ZXJ0ZWRUcmFwZXpvaWRQYXRoRCgwLCAwLCB3LCBoKTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5wYXRoKHBhdGhEYXRhLCBvcHRpb25zKTtcbiAgICBwb2x5Z29uID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7LXcgLyAyfSwgJHtoIC8gMn0pYCk7XG4gICAgaWYgKGNzc1N0eWxlcykge1xuICAgICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcG9seWdvbiA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgfVxuICBpZiAobm9kZVN0eWxlcykge1xuICAgIHBvbHlnb24uYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICB9XG4gIG5vZGUud2lkdGggPSB3O1xuICBub2RlLmhlaWdodCA9IGg7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcG9seWdvbik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImludl90cmFwZXpvaWRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2xhYmVsUmVjdC50c1xudmFyIGxhYmVsUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIFwibGFiZWxcIik7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IDAuMTtcbiAgY29uc3QgdG90YWxIZWlnaHQgPSAwLjE7XG4gIHJlY3QyLmF0dHIoXCJ3aWR0aFwiLCB0b3RhbFdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIHRvdGFsSGVpZ2h0KTtcbiAgc2hhcGVTdmcuYXR0cihcImNsYXNzXCIsIFwibGFiZWwgZWRnZUxhYmVsXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImxhYmVsUmVjdFwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9ub2Rlcy5qc1xudmFyIHNoYXBlczIgPSB7XG4gIHN0YXRlLFxuICBzdGF0ZVN0YXJ0LFxuICBzdGF0ZUVuZCxcbiAgZm9yazogZm9ya0pvaW4sXG4gIGpvaW46IGZvcmtKb2luLFxuICBjaG9pY2UsXG4gIG5vdGUsXG4gIHJvdW5kZWRSZWN0LFxuICByZWN0V2l0aFRpdGxlLFxuICBzcXVhcmVSZWN0OiBzcXVhcmVSZWN0MixcbiAgc3RhZGl1bSxcbiAgc3Vicm91dGluZSxcbiAgY3lsaW5kZXIsXG4gIGNpcmNsZTogY2lyY2xlMixcbiAgZG91YmxlY2lyY2xlLFxuICBvZGQ6IHJlY3RfbGVmdF9pbnZfYXJyb3csXG4gIGRpYW1vbmQ6IHF1ZXN0aW9uLFxuICBoZXhhZ29uLFxuICBsZWFuX3JpZ2h0LFxuICBsZWFuX2xlZnQsXG4gIHRyYXBlem9pZCxcbiAgaW52X3RyYXBlem9pZCxcbiAgbGFiZWxSZWN0XG59O1xudmFyIG5vZGVFbGVtcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgaW5zZXJ0Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsZW0sIG5vZGUsIGRpcikgPT4ge1xuICBsZXQgbmV3RWw7XG4gIGxldCBlbDtcbiAgaWYgKG5vZGUuc2hhcGUgPT09IFwicmVjdFwiKSB7XG4gICAgaWYgKG5vZGUucnggJiYgbm9kZS5yeSkge1xuICAgICAgbm9kZS5zaGFwZSA9IFwicm91bmRlZFJlY3RcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zaGFwZSA9IFwic3F1YXJlUmVjdFwiO1xuICAgIH1cbiAgfVxuICBpZiAobm9kZS5saW5rKSB7XG4gICAgbGV0IHRhcmdldDtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgIHRhcmdldCA9IFwiX3RvcFwiO1xuICAgIH0gZWxzZSBpZiAobm9kZS5saW5rVGFyZ2V0KSB7XG4gICAgICB0YXJnZXQgPSBub2RlLmxpbmtUYXJnZXQgfHwgXCJfYmxhbmtcIjtcbiAgICB9XG4gICAgbmV3RWwgPSBlbGVtLmluc2VydChcInN2ZzphXCIpLmF0dHIoXCJ4bGluazpocmVmXCIsIG5vZGUubGluaykuYXR0cihcInRhcmdldFwiLCB0YXJnZXQpO1xuICAgIGVsID0gYXdhaXQgc2hhcGVzMltub2RlLnNoYXBlXShuZXdFbCwgbm9kZSwgZGlyKTtcbiAgfSBlbHNlIHtcbiAgICBlbCA9IGF3YWl0IHNoYXBlczJbbm9kZS5zaGFwZV0oZWxlbSwgbm9kZSwgZGlyKTtcbiAgICBuZXdFbCA9IGVsO1xuICB9XG4gIGlmIChub2RlLnRvb2x0aXApIHtcbiAgICBlbC5hdHRyKFwidGl0bGVcIiwgbm9kZS50b29sdGlwKTtcbiAgfVxuICBub2RlRWxlbXMuc2V0KG5vZGUuaWQsIG5ld0VsKTtcbiAgaWYgKG5vZGUuaGF2ZUNhbGxiYWNrKSB7XG4gICAgbm9kZUVsZW1zLmdldChub2RlLmlkKS5hdHRyKFwiY2xhc3NcIiwgbm9kZUVsZW1zLmdldChub2RlLmlkKS5hdHRyKFwiY2xhc3NcIikgKyBcIiBjbGlja2FibGVcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0VsO1xufSwgXCJpbnNlcnROb2RlXCIpO1xudmFyIHNldE5vZGVFbGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgbm9kZSkgPT4ge1xuICBub2RlRWxlbXMuc2V0KG5vZGUuaWQsIGVsZW0pO1xufSwgXCJzZXROb2RlRWxlbVwiKTtcbnZhciBjbGVhcjMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgbm9kZUVsZW1zLmNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIHBvc2l0aW9uTm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUpID0+IHtcbiAgY29uc3QgZWwgPSBub2RlRWxlbXMuZ2V0KG5vZGUuaWQpO1xuICBsb2cudHJhY2UoXG4gICAgXCJUcmFuc2Zvcm1pbmcgbm9kZVwiLFxuICAgIG5vZGUuZGlmZixcbiAgICBub2RlLFxuICAgIFwidHJhbnNsYXRlKFwiICsgKG5vZGUueCAtIG5vZGUud2lkdGggLyAyIC0gNSkgKyBcIiwgXCIgKyBub2RlLndpZHRoIC8gMiArIFwiKVwiXG4gICk7XG4gIGNvbnN0IHBhZGRpbmcgPSA4O1xuICBjb25zdCBkaWZmID0gbm9kZS5kaWZmIHx8IDA7XG4gIGlmIChub2RlLmNsdXN0ZXJOb2RlKSB7XG4gICAgZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBcInRyYW5zbGF0ZShcIiArIChub2RlLnggKyBkaWZmIC0gbm9kZS53aWR0aCAvIDIpICsgXCIsIFwiICsgKG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIHBhZGRpbmcpICsgXCIpXCJcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLnggKyBcIiwgXCIgKyBub2RlLnkgKyBcIilcIik7XG4gIH1cbiAgcmV0dXJuIGRpZmY7XG59LCBcInBvc2l0aW9uTm9kZVwiKTtcblxuZXhwb3J0IHtcbiAgaW5zZXJ0Q2x1c3RlcixcbiAgY2xlYXIsXG4gIGNsZWFyMixcbiAgaW5zZXJ0RWRnZUxhYmVsLFxuICBwb3NpdGlvbkVkZ2VMYWJlbCxcbiAgaW5zZXJ0RWRnZSxcbiAgbWFya2Vyc19kZWZhdWx0LFxuICBsYWJlbEhlbHBlcixcbiAgdXBkYXRlTm9kZUJvdW5kcyxcbiAgaW5zZXJ0Tm9kZSxcbiAgc2V0Tm9kZUVsZW0sXG4gIGNsZWFyMyxcbiAgcG9zaXRpb25Ob2RlXG59O1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3ltYm9sO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcbiIsCiAgICAiLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG52YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbi8qKlxuICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltbWVkRW5kSW5kZXg7XG4iLAogICAgImltcG9ydCB0cmltbWVkRW5kSW5kZXggZnJvbSAnLi9fdHJpbW1lZEVuZEluZGV4LmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50cmltYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdcbiAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVHJpbTtcbiIsCiAgICAiaW1wb3J0IGJhc2VUcmltIGZyb20gJy4vX2Jhc2VUcmltLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvTnVtYmVyO1xuIiwKICAgICJpbXBvcnQgdG9OdW1iZXIgZnJvbSAnLi90b051bWJlci5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTIuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvRmluaXRlKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9GaW5pdGUoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gIH1cbiAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zpbml0ZTtcbiIsCiAgICAiaW1wb3J0IHRvRmluaXRlIGZyb20gJy4vdG9GaW5pdGUuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0ludGVnZXJgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9pbnRlZ2VyKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvSW50ZWdlcigzLjIpO1xuICogLy8gPT4gM1xuICpcbiAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gMFxuICpcbiAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0ludGVnZXIoJzMuMicpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7XG5cbiAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0ludGVnZXI7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5leHBvcnQgZGVmYXVsdCBub29wO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RWFjaDtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGaW5kSW5kZXg7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hTjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpY3RJbmRleE9mO1xuIiwKICAgICJpbXBvcnQgYmFzZUZpbmRJbmRleCBmcm9tICcuL19iYXNlRmluZEluZGV4LmpzJztcbmltcG9ydCBiYXNlSXNOYU4gZnJvbSAnLi9fYmFzZUlzTmFOLmpzJztcbmltcG9ydCBzdHJpY3RJbmRleE9mIGZyb20gJy4vX3N0cmljdEluZGV4T2YuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSW5kZXhPZjtcbiIsCiAgICAiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlJbmNsdWRlcztcbiIsCiAgICAiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsCiAgICAiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIiwKICAgICJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwKICAgICJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbjtcbiIsCiAgICAiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleTtcbiIsCiAgICAiaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplQ2FwcGVkO1xuIiwKICAgICJpbXBvcnQgbWVtb2l6ZUNhcHBlZCBmcm9tICcuL19tZW1vaXplQ2FwcGVkLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb1BhdGg7XG4iLAogICAgImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcbiIsCiAgICAiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0tleSBmcm9tICcuL19pc0tleS5qcyc7XG5pbXBvcnQgc3RyaW5nVG9QYXRoIGZyb20gJy4vX3N0cmluZ1RvUGF0aC5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhc3RQYXRoO1xuIiwKICAgICJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiIsCiAgICAiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXQ7XG4iLAogICAgImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldDtcbiIsCiAgICAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVB1c2g7XG4iLAogICAgImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZsYXR0ZW5hYmxlO1xuIiwKICAgICJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNGbGF0dGVuYWJsZSBmcm9tICcuL19pc0ZsYXR0ZW5hYmxlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGbGF0dGVuO1xuIiwKICAgICJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdHRlbjtcbiIsCiAgICAiaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9mbGF0dGVuLmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXRSZXN0O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTbGljZTtcbiIsCiAgICAiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1VuaWNvZGU7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlSZWR1Y2U7XG4iLAogICAgImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduO1xuIiwKICAgICJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25JbjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUZpbHRlcjtcbiIsCiAgICAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkFycmF5O1xuIiwKICAgICJpbXBvcnQgYXJyYXlGaWx0ZXIgZnJvbSAnLi9fYXJyYXlGaWx0ZXIuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0U3ltYm9scztcbiIsCiAgICAiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9scztcbiIsCiAgICAiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGdldFN5bWJvbHMgZnJvbSAnLi9fZ2V0U3ltYm9scy5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0U3ltYm9sc0luO1xuIiwKICAgICJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBnZXRTeW1ib2xzSW4gZnJvbSAnLi9fZ2V0U3ltYm9sc0luLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9sc0luO1xuIiwKICAgICJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRBbGxLZXlzO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldEFsbEtleXMgZnJvbSAnLi9fYmFzZUdldEFsbEtleXMuanMnO1xuaW1wb3J0IGdldFN5bWJvbHMgZnJvbSAnLi9fZ2V0U3ltYm9scy5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRBbGxLZXlzO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldEFsbEtleXMgZnJvbSAnLi9fYmFzZUdldEFsbEtleXMuanMnO1xuaW1wb3J0IGdldFN5bWJvbHNJbiBmcm9tICcuL19nZXRTeW1ib2xzSW4uanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldEFsbEtleXNJbjtcbiIsCiAgICAiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0YVZpZXc7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlO1xuIiwKICAgICJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IFNldDtcbiIsCiAgICAiaW1wb3J0IERhdGFWaWV3IGZyb20gJy4vX0RhdGFWaWV3LmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJy4vX1Byb21pc2UuanMnO1xuaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi9fV2Vha01hcC5qcyc7XG5pbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRhZztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdENsb25lQXJyYXk7XG4iLAogICAgImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURhdGFWaWV3O1xuIiwKICAgICIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVJlZ0V4cDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lU3ltYm9sO1xuIiwKICAgICJpbXBvcnQgY2xvbmVBcnJheUJ1ZmZlciBmcm9tICcuL19jbG9uZUFycmF5QnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZURhdGFWaWV3IGZyb20gJy4vX2Nsb25lRGF0YVZpZXcuanMnO1xuaW1wb3J0IGNsb25lUmVnRXhwIGZyb20gJy4vX2Nsb25lUmVnRXhwLmpzJztcbmltcG9ydCBjbG9uZVN5bWJvbCBmcm9tICcuL19jbG9uZVN5bWJvbC5qcyc7XG5pbXBvcnQgY2xvbmVUeXBlZEFycmF5IGZyb20gJy4vX2Nsb25lVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVCeVRhZztcbiIsCiAgICAiaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNNYXA7XG4iLAogICAgImltcG9ydCBiYXNlSXNNYXAgZnJvbSAnLi9fYmFzZUlzTWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFwO1xuIiwKICAgICJpbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1NldDtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc1NldCBmcm9tICcuL19iYXNlSXNTZXQuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxuZXhwb3J0IGRlZmF1bHQgaXNTZXQ7XG4iLAogICAgImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ24gZnJvbSAnLi9fYmFzZUFzc2lnbi5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnbkluIGZyb20gJy4vX2Jhc2VBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgY2xvbmVCdWZmZXIgZnJvbSAnLi9fY2xvbmVCdWZmZXIuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGNvcHlTeW1ib2xzIGZyb20gJy4vX2NvcHlTeW1ib2xzLmpzJztcbmltcG9ydCBjb3B5U3ltYm9sc0luIGZyb20gJy4vX2NvcHlTeW1ib2xzSW4uanMnO1xuaW1wb3J0IGdldEFsbEtleXMgZnJvbSAnLi9fZ2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaW5pdENsb25lQXJyYXkgZnJvbSAnLi9faW5pdENsb25lQXJyYXkuanMnO1xuaW1wb3J0IGluaXRDbG9uZUJ5VGFnIGZyb20gJy4vX2luaXRDbG9uZUJ5VGFnLmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNNYXAgZnJvbSAnLi9pc01hcC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNTZXQgZnJvbSAnLi9pc1NldC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ2xvbmU7XG4iLAogICAgImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmU7XG4iLAogICAgImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURlZXA7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNvbXBhY3QoWzAsIDEsIGZhbHNlLCAyLCAnJywgM10pO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhY3Q7XG4iLAogICAgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRDYWNoZUFkZDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRDYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcbmltcG9ydCBzZXRDYWNoZUFkZCBmcm9tICcuL19zZXRDYWNoZUFkZC5qcyc7XG5pbXBvcnQgc2V0Q2FjaGVIYXMgZnJvbSAnLi9fc2V0Q2FjaGVIYXMuanMnO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbmV4cG9ydCBkZWZhdWx0IFNldENhY2hlO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVNvbWU7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheVNvbWUgZnJvbSAnLi9fYXJyYXlTb21lLmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxBcnJheXM7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcFRvQXJyYXk7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvQXJyYXk7XG4iLAogICAgImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBVaW50OEFycmF5IGZyb20gJy4vX1VpbnQ4QXJyYXkuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGVxdWFsQXJyYXlzIGZyb20gJy4vX2VxdWFsQXJyYXlzLmpzJztcbmltcG9ydCBtYXBUb0FycmF5IGZyb20gJy4vX21hcFRvQXJyYXkuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsQnlUYWc7XG4iLAogICAgImltcG9ydCBnZXRBbGxLZXlzIGZyb20gJy4vX2dldEFsbEtleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxPYmplY3RzO1xuIiwKICAgICJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGVxdWFsQXJyYXlzIGZyb20gJy4vX2VxdWFsQXJyYXlzLmpzJztcbmltcG9ydCBlcXVhbEJ5VGFnIGZyb20gJy4vX2VxdWFsQnlUYWcuanMnO1xuaW1wb3J0IGVxdWFsT2JqZWN0cyBmcm9tICcuL19lcXVhbE9iamVjdHMuanMnO1xuaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzRXF1YWxEZWVwO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzRXF1YWxEZWVwIGZyb20gJy4vX2Jhc2VJc0VxdWFsRGVlcC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsO1xuIiwKICAgICJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hdGNoO1xuIiwKICAgICJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTdHJpY3RDb21wYXJhYmxlO1xuIiwKICAgICJpbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWF0Y2hEYXRhO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzTWF0Y2ggZnJvbSAnLi9fYmFzZUlzTWF0Y2guanMnO1xuaW1wb3J0IGdldE1hdGNoRGF0YSBmcm9tICcuL19nZXRNYXRjaERhdGEuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNYXRjaGVzO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhc0luO1xuIiwKICAgICJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1BhdGg7XG4iLAogICAgImltcG9ydCBiYXNlSGFzSW4gZnJvbSAnLi9fYmFzZUhhc0luLmpzJztcbmltcG9ydCBoYXNQYXRoIGZyb20gJy4vX2hhc1BhdGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc0luO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IGlzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19pc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5O1xuIiwKICAgICJpbXBvcnQgYmFzZUdldCBmcm9tICcuL19iYXNlR2V0LmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eURlZXA7XG4iLAogICAgImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHlEZWVwIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eURlZXAuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHk7XG4iLAogICAgImltcG9ydCBiYXNlTWF0Y2hlcyBmcm9tICcuL19iYXNlTWF0Y2hlcy5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJdGVyYXRlZTtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VBZ2dyZWdhdG9yYCBmb3IgYXJyYXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICovXG5mdW5jdGlvbiBhcnJheUFnZ3JlZ2F0b3IoYXJyYXksIHNldHRlciwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUFnZ3JlZ2F0b3I7XG4iLAogICAgImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIiwKICAgICJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJhc2VFYWNoO1xuIiwKICAgICJpbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBjcmVhdGVCYXNlRWFjaCBmcm9tICcuL19jcmVhdGVCYXNlRWFjaC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlRWFjaDtcbiIsCiAgICAiaW1wb3J0IGJhc2VFYWNoIGZyb20gJy4vX2Jhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBZ2dyZWdhdG9yO1xuIiwKICAgICJpbXBvcnQgYXJyYXlBZ2dyZWdhdG9yIGZyb20gJy4vX2FycmF5QWdncmVnYXRvci5qcyc7XG5pbXBvcnQgYmFzZUFnZ3JlZ2F0b3IgZnJvbSAnLi9fYmFzZUFnZ3JlZ2F0b3IuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgc2V0dGVyLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFnZ3JlZ2F0b3I7XG4iLAogICAgImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBub3c7XG4iLAogICAgImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICBsZW5ndGggPSAxO1xuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwKICAgICJpbXBvcnQgU2V0Q2FjaGUgZnJvbSAnLi9fU2V0Q2FjaGUuanMnO1xuaW1wb3J0IGFycmF5SW5jbHVkZXMgZnJvbSAnLi9fYXJyYXlJbmNsdWRlcy5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlc1dpdGggZnJvbSAnLi9fYXJyYXlJbmNsdWRlc1dpdGguanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRGlmZmVyZW5jZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqL1xudmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICA6IFtdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2U7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0O1xuIiwKICAgICJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRyb3AoWzEsIDIsIDNdKTtcbiAqIC8vID0+IFsyLCAzXVxuICpcbiAqIF8uZHJvcChbMSwgMiwgM10sIDIpO1xuICogLy8gPT4gWzNdXG4gKlxuICogXy5kcm9wKFsxLCAyLCAzXSwgNSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8uZHJvcChbMSwgMiwgM10sIDApO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGRyb3AoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJvcDtcbiIsCiAgICAiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdKTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gKiAvLyA9PiBbMV1cbiAqXG4gKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDUpO1xuICogLy8gPT4gW11cbiAqXG4gKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDApO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICBuID0gbGVuZ3RoIC0gbjtcbiAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BSaWdodDtcbiIsCiAgICAiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYGlkZW50aXR5YCBpZiBpdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGNhc3QgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhc3RGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgPyB2YWx1ZSA6IGlkZW50aXR5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYXN0RnVuY3Rpb247XG4iLAogICAgImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yRWFjaDtcbiIsCiAgICAiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vZm9yRWFjaC5qcydcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUV2ZXJ5O1xuIiwKICAgICJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgXG4gKi9cbmZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFdmVyeTtcbiIsCiAgICAiaW1wb3J0IGFycmF5RXZlcnkgZnJvbSAnLi9fYXJyYXlFdmVyeS5qcyc7XG5pbXBvcnQgYmFzZUV2ZXJ5IGZyb20gJy4vX2Jhc2VFdmVyeS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBmb3JcbiAqIFtlbXB0eSBjb2xsZWN0aW9uc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW1wdHlfc2V0KSBiZWNhdXNlXG4gKiBbZXZlcnl0aGluZyBpcyB0cnVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWN1b3VzX3RydXRoKSBvZlxuICogZWxlbWVudHMgb2YgZW1wdHkgY29sbGVjdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXZlcnkoW3RydWUsIDEsIG51bGwsICd5ZXMnXSwgQm9vbGVhbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZXZlcnkodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmV2ZXJ5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RXZlcnkgOiBiYXNlRXZlcnk7XG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSkge1xuICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZXJ5O1xuIiwKICAgICJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGaWx0ZXI7XG4iLAogICAgImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAqL1xuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmlsdGVyO1xuIiwKICAgICJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbmQ7XG4iLAogICAgImltcG9ydCBiYXNlRmluZEluZGV4IGZyb20gJy4vX2Jhc2VGaW5kSW5kZXguanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRJbmRleDtcbiIsCiAgICAiaW1wb3J0IGNyZWF0ZUZpbmQgZnJvbSAnLi9fY3JlYXRlRmluZC5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKi9cbnZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG5leHBvcnQgZGVmYXVsdCBmaW5kO1xuIiwKICAgICIvKipcbiAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAYWxpYXMgZmlyc3RcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAxXG4gKlxuICogXy5oZWFkKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoZWFkO1xuIiwKICAgICJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9oZWFkLmpzJ1xuIiwKICAgICJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWFwO1xuIiwKICAgICJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VNYXAgZnJvbSAnLi9fYmFzZU1hcC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAqIGBfLmV2ZXJ5YCwgYF8uZmlsdGVyYCwgYF8ubWFwYCwgYF8ubWFwVmFsdWVzYCwgYF8ucmVqZWN0YCwgYW5kIGBfLnNvbWVgLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFyeWAsIGBjaHVua2AsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGV2ZXJ5YCxcbiAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICogYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBhbmQgYHdvcmRzYFxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIF8ubWFwKFs0LCA4XSwgc3F1YXJlKTtcbiAqIC8vID0+IFsxNiwgNjRdXG4gKlxuICogXy5tYXAoeyAnYSc6IDQsICdiJzogOCB9LCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICovXG5mdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwO1xuIiwKICAgICJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZsYXR0ZW5lZCBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gXG4gKiB0aHJ1IGBpdGVyYXRlZWAgYW5kIGZsYXR0ZW5pbmcgdGhlIG1hcHBlZCByZXN1bHRzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gKiAgIHJldHVybiBbbiwgbl07XG4gKiB9XG4gKlxuICogXy5mbGF0TWFwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICovXG5mdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCAxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdE1hcDtcbiIsCiAgICAiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3Iob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpLCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JJbjtcbiIsCiAgICAiaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5mb3JPd25SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yT3duO1xuIiwKICAgICJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgY3JlYXRlQWdncmVnYXRvciBmcm9tICcuL19jcmVhdGVBZ2dyZWdhdG9yLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgb3JkZXIgb2YgZ3JvdXBlZCB2YWx1ZXNcbiAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gKiBrZXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiB7ICc0JzogWzQuMl0sICc2JzogWzYuMSwgNi4zXSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmdyb3VwQnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICovXG52YXIgZ3JvdXBCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBncm91cEJ5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlR3QodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA+IG90aGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR3Q7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhcztcbiIsCiAgICAiaW1wb3J0IGJhc2VIYXMgZnJvbSAnLi9fYmFzZUhhcy5qcyc7XG5pbXBvcnQgaGFzUGF0aCBmcm9tICcuL19oYXNQYXRoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogMiB9IH07XG4gKiB2YXIgb3RoZXIgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXMob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXMob3RoZXIsICdhJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXMob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhcztcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmluZztcbiIsCiAgICAiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG4iLAogICAgImltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlcztcbiIsCiAgICAiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5jbHVkZXM7XG4iLAogICAgImltcG9ydCBiYXNlSW5kZXhPZiBmcm9tICcuL19iYXNlSW5kZXhPZi5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleE9mO1xuIiwKICAgICJpbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFbXB0eTtcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzUmVnRXhwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNSZWdFeHAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gcmVnZXhwVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNSZWdFeHA7XG4iLAogICAgImltcG9ydCBiYXNlSXNSZWdFeHAgZnJvbSAnLi9fYmFzZUlzUmVnRXhwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzUmVnRXhwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNSZWdFeHA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzUmVnRXhwO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlTHQodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA8IG90aGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTHQ7XG4iLAogICAgImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICogQHNlZSBfLm1hcEtleXNcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0ge1xuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAqIH07XG4gKlxuICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwVmFsdWVzO1xuIiwKICAgICJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgOiBjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKVxuICAgICAgICApKSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRXh0cmVtdW07XG4iLAogICAgImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlR3QgZnJvbSAnLi9fYmFzZUd0LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBgYXJyYXlgLiBJZiBgYXJyYXlgIGlzIGVtcHR5IG9yIGZhbHNleSxcbiAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gKiAvLyA9PiA4XG4gKlxuICogXy5tYXgoW10pO1xuICogLy8gPT4gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIG1heChhcnJheSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWF4O1xuIiwKICAgICJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUx0IGZyb20gJy4vX2Jhc2VMdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMlxuICpcbiAqIF8ubWluKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbjtcbiIsCiAgICAiaW1wb3J0IGJhc2VFeHRyZW11bSBmcm9tICcuL19iYXNlRXh0cmVtdW0uanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VMdCBmcm9tICcuL19iYXNlTHQuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICpcbiAqIF8ubWluQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAqIC8vID0+IHsgJ24nOiAxIH1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAqIC8vID0+IHsgJ24nOiAxIH1cbiAqL1xuZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbkJ5O1xuIiwKICAgICIvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG5lZ2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJlZGljYXRlIGBmdW5jYC4gVGhlXG4gKiBgZnVuY2AgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGVcbiAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBuZWdhdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAqIH1cbiAqXG4gKiBfLmZpbHRlcihbMSwgMiwgMywgNCwgNSwgNl0sIF8ubmVnYXRlKGlzRXZlbikpO1xuICogLy8gPT4gWzEsIDMsIDVdXG4gKi9cbmZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cbiAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmVnYXRlO1xuIiwKICAgICJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXQ7XG4iLAogICAgImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2tCeTtcbiIsCiAgICAiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUGlja0J5IGZyb20gJy4vX2Jhc2VQaWNrQnkuanMnO1xuaW1wb3J0IGdldEFsbEtleXNJbiBmcm9tICcuL19nZXRBbGxLZXlzSW4uanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAqIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2tCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHBpY2tCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICByZXR1cm4gW3Byb3BdO1xuICB9KTtcbiAgcHJlZGljYXRlID0gYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSk7XG4gIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHByZWRpY2F0ZSh2YWx1ZSwgcGF0aFswXSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwaWNrQnk7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICogc29ydCBvcmRlciBvZiBgYXJyYXlgIGFuZCByZXBsYWNlcyBjcml0ZXJpYSBvYmplY3RzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZ1xuICogdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBhcnJheVtsZW5ndGhdID0gYXJyYXlbbGVuZ3RoXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTb3J0Qnk7XG4iLAogICAgImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqXG4gKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgaWYgKHZhbHVlICE9PSBvdGhlcikge1xuICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgIG90aElzTnVsbCA9IG90aGVyID09PSBudWxsLFxuICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICBpZiAoKCFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sICYmICF2YWxJc1N5bWJvbCAmJiB2YWx1ZSA+IG90aGVyKSB8fFxuICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgKCF2YWxJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgIChvdGhJc051bGwgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wYXJlQXNjZW5kaW5nO1xuIiwKICAgICJpbXBvcnQgY29tcGFyZUFzY2VuZGluZyBmcm9tICcuL19jb21wYXJlQXNjZW5kaW5nLmpzJztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAqIGFuZCBzdGFibGUgc29ydCB0aGVtLlxuICpcbiAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gKiBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvciBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyXG4gKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFuW118c3RyaW5nW119IG9yZGVycyBUaGUgb3JkZXIgdG8gc29ydCBieSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgb3RoQ3JpdGVyaWEgPSBvdGhlci5jcml0ZXJpYSxcbiAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcmVzdWx0ID0gY29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sIG90aENyaXRlcmlhW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgaWYgKGluZGV4ID49IG9yZGVyc0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIG9yZGVyID0gb3JkZXJzW2luZGV4XTtcbiAgICAgIHJldHVybiByZXN1bHQgKiAob3JkZXIgPT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICB9XG4gIH1cbiAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAvLyBgb2JqZWN0YCBhbmQgYG90aGVyYC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzEyNDdcbiAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgLy9cbiAgLy8gVGhpcyBhbHNvIGVuc3VyZXMgYSBzdGFibGUgc29ydCBpbiBWOCBhbmQgb3RoZXIgZW5naW5lcy5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG4gIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcGFyZU11bHRpcGxlO1xuIiwKICAgICJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZU1hcCBmcm9tICcuL19iYXNlTWFwLmpzJztcbmltcG9ydCBiYXNlU29ydEJ5IGZyb20gJy4vX2Jhc2VTb3J0QnkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvbXBhcmVNdWx0aXBsZSBmcm9tICcuL19jb21wYXJlTXVsdGlwbGUuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5vcmRlckJ5YCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpIHtcbiAgaWYgKGl0ZXJhdGVlcy5sZW5ndGgpIHtcbiAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoaXNBcnJheShpdGVyYXRlZSkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VHZXQodmFsdWUsIGl0ZXJhdGVlLmxlbmd0aCA9PT0gMSA/IGl0ZXJhdGVlWzBdIDogaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0ZWU7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWVzID0gW2lkZW50aXR5XTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IC0xO1xuICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU9yZGVyQnk7XG4iLAogICAgImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBzaXplIG9mIGFuIEFTQ0lJIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG52YXIgYXNjaWlTaXplID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxuZXhwb3J0IGRlZmF1bHQgYXNjaWlTaXplO1xuIiwKICAgICIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IHJlVW5pY29kZS5sYXN0SW5kZXggPSAwO1xuICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICsrcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVTaXplO1xuIiwKICAgICJpbXBvcnQgYXNjaWlTaXplIGZyb20gJy4vX2FzY2lpU2l6ZS5qcyc7XG5pbXBvcnQgaGFzVW5pY29kZSBmcm9tICcuL19oYXNVbmljb2RlLmpzJztcbmltcG9ydCB1bmljb2RlU2l6ZSBmcm9tICcuL191bmljb2RlU2l6ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgaW4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1NpemUoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICA6IGFzY2lpU2l6ZShzdHJpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdTaXplO1xuIiwKICAgICJpbXBvcnQgYmFzZVBpY2tCeSBmcm9tICcuL19iYXNlUGlja0J5LmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5waWNrYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAqIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIGhhc0luKG9iamVjdCwgcGF0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUGljaztcbiIsCiAgICAiaW1wb3J0IGJhc2VQaWNrIGZyb20gJy4vX2Jhc2VQaWNrLmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBgb2JqZWN0YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5waWNrKG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIHBpY2sgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHt9IDogYmFzZVBpY2sob2JqZWN0LCBwYXRocyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcGljaztcbiIsCiAgICAiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZ2VgIGFuZCBgXy5yYW5nZVJpZ2h0YCB3aGljaCBkb2Vzbid0XG4gKiBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcCBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICovXG5mdW5jdGlvbiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZCAtIHN0YXJ0KSAvIChzdGVwIHx8IDEpKSwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHJlc3VsdFtmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XSA9IHN0YXJ0O1xuICAgIHN0YXJ0ICs9IHN0ZXA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJhbmdlO1xuIiwKICAgICJpbXBvcnQgYmFzZVJhbmdlIGZyb20gJy4vX2Jhc2VSYW5nZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvRmluaXRlIGZyb20gJy4vdG9GaW5pdGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJhbmdlO1xuIiwKICAgICJpbXBvcnQgY3JlYXRlUmFuZ2UgZnJvbSAnLi9fY3JlYXRlUmFuZ2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbmdlO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlZHVjZWAgYW5kIGBfLnJlZHVjZVJpZ2h0YCwgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmAgdXNpbmcgYGVhY2hGdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRBY2N1bSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVsZW1lbnQgb2ZcbiAqICBgY29sbGVjdGlvbmAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgZWFjaEZ1bmMpIHtcbiAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpbml0QWNjdW1cbiAgICAgID8gKGluaXRBY2N1bSA9IGZhbHNlLCB2YWx1ZSlcbiAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZWR1Y2U7XG4iLAogICAgImltcG9ydCBhcnJheVJlZHVjZSBmcm9tICcuL19hcnJheVJlZHVjZS5qcyc7XG5pbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZWR1Y2UgZnJvbSAnLi9fYmFzZVJlZHVjZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFJlZHVjZXMgYGNvbGxlY3Rpb25gIHRvIGEgdmFsdWUgd2hpY2ggaXMgdGhlIGFjY3VtdWxhdGVkIHJlc3VsdCBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYCwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gKiB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czpcbiAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gKiBhbmQgYHNvcnRCeWBcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAc2VlIF8ucmVkdWNlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yZWR1Y2UoWzEsIDJdLCBmdW5jdGlvbihzdW0sIG4pIHtcbiAqICAgcmV0dXJuIHN1bSArIG47XG4gKiB9LCAwKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiAgIHJldHVybiByZXN1bHQ7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2UgOiBiYXNlUmVkdWNlLFxuICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZWR1Y2U7XG4iLAogICAgImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbmVnYXRlIGZyb20gJy4vbmVnYXRlLmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gKiB0aGF0IGBwcmVkaWNhdGVgIGRvZXMgKipub3QqKiByZXR1cm4gdHJ1dGh5IGZvci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8uZmlsdGVyXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlamVjdDtcbiIsCiAgICAiaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAgYnkgcmV0dXJuaW5nIGl0cyBsZW5ndGggZm9yIGFycmF5LWxpa2VcbiAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zaXplKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiAyXG4gKlxuICogXy5zaXplKCdwZWJibGVzJyk7XG4gKiAvLyA9PiA3XG4gKi9cbmZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcoY29sbGVjdGlvbik7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICB9XG4gIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpemU7XG4iLAogICAgImltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29tZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0O1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiAhcmVzdWx0O1xuICB9KTtcbiAgcmV0dXJuICEhcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU29tZTtcbiIsCiAgICAiaW1wb3J0IGFycmF5U29tZSBmcm9tICcuL19hcnJheVNvbWUuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VTb21lIGZyb20gJy4vX2Jhc2VTb21lLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbnkqKiBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYC5cbiAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc29tZShbbnVsbCwgMCwgJ3llcycsIGZhbHNlXSwgQm9vbGVhbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29tZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTtcbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29tZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBiYXNlT3JkZXJCeSBmcm9tICcuL19iYXNlT3JkZXJCeS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSByZXN1bHRzIG9mXG4gKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gKiBlcXVhbCBlbGVtZW50cy4gVGhlIGl0ZXJhdGVlcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiAzMCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gKiBdO1xuICpcbiAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDMwXV1cbiAqXG4gKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDMwXSwgWydmcmVkJywgNDhdXVxuICovXG52YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPiAxICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdKSkge1xuICAgIGl0ZXJhdGVlcyA9IFtdO1xuICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICBpdGVyYXRlZXMgPSBbaXRlcmF0ZWVzWzBdXTtcbiAgfVxuICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRCeTtcbiIsCiAgICAiaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IG5vb3AgZnJvbSAnLi9ub29wLmpzJztcbmltcG9ydCBzZXRUb0FycmF5IGZyb20gJy4vX3NldFRvQXJyYXkuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gKi9cbnZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTZXQ7XG4iLAogICAgImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlcyBmcm9tICcuL19hcnJheUluY2x1ZGVzLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzV2l0aCBmcm9tICcuL19hcnJheUluY2x1ZGVzV2l0aC5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuaW1wb3J0IGNyZWF0ZVNldCBmcm9tICcuL19jcmVhdGVTZXQuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmlxO1xuIiwKICAgICJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbjtcbiIsCiAgICAiaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiBhbiBhcnJheSwgdXNpbmdcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGluIHdoaWNoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gKiBpcyBrZXB0LiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyXG4gKiBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG5mdW5jdGlvbiB1bmlxKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5KSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bmlxO1xuIiwKICAgICJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVVuaXEgZnJvbSAnLi9fYmFzZVVuaXEuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiBbMi4xLCAxLjJdXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAqL1xuZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pcUJ5O1xuIiwKICAgICJpbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuICovXG52YXIgaWRDb3VudGVyID0gMDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQuIElmIGBwcmVmaXhgIGlzIGdpdmVuLCB0aGUgSUQgaXMgYXBwZW5kZWQgdG8gaXQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJlZml4PScnXSBUaGUgdmFsdWUgdG8gcHJlZml4IHRoZSBJRCB3aXRoLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICogLy8gPT4gJ2NvbnRhY3RfMTA0J1xuICpcbiAqIF8udW5pcXVlSWQoKTtcbiAqIC8vID0+ICcxMDUnXG4gKi9cbmZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICB2YXIgaWQgPSArK2lkQ291bnRlcjtcbiAgcmV0dXJuIHRvU3RyaW5nKHByZWZpeCkgKyBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pcXVlSWQ7XG4iLAogICAgIi8qKlxuICogVGhpcyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnppcE9iamVjdGAgd2hpY2ggYXNzaWducyB2YWx1ZXMgdXNpbmcgYGFzc2lnbkZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICBhc3NpZ25GdW5jKHJlc3VsdCwgcHJvcHNbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVppcE9iamVjdDtcbiIsCiAgICAiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlWmlwT2JqZWN0IGZyb20gJy4vX2Jhc2VaaXBPYmplY3QuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZnJvbVBhaXJzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHR3byBhcnJheXMsXG4gKiBvbmUgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMgYW5kIG9uZSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uemlwT2JqZWN0KFsnYScsICdiJ10sIFsxLCAyXSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xuZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYXNzaWduVmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB6aXBPYmplY3Q7XG4iLAogICAgIi8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cImVzXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWRkIH0gZnJvbSAnLi9hZGQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhZnRlciB9IGZyb20gJy4vYWZ0ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnkgfSBmcm9tICcuL2FyeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzc2lnbiB9IGZyb20gJy4vYXNzaWduLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXNzaWduSW4gfSBmcm9tICcuL2Fzc2lnbkluLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXNzaWduSW5XaXRoIH0gZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3NpZ25XaXRoIH0gZnJvbSAnLi9hc3NpZ25XaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXQgfSBmcm9tICcuL2F0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXR0ZW1wdCB9IGZyb20gJy4vYXR0ZW1wdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlZm9yZSB9IGZyb20gJy4vYmVmb3JlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmluZCB9IGZyb20gJy4vYmluZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJpbmRBbGwgfSBmcm9tICcuL2JpbmRBbGwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBiaW5kS2V5IH0gZnJvbSAnLi9iaW5kS2V5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2FtZWxDYXNlIH0gZnJvbSAnLi9jYW1lbENhc2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjYXBpdGFsaXplIH0gZnJvbSAnLi9jYXBpdGFsaXplLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2FzdEFycmF5IH0gZnJvbSAnLi9jYXN0QXJyYXkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjZWlsIH0gZnJvbSAnLi9jZWlsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2hhaW4gfSBmcm9tICcuL2NoYWluLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2h1bmsgfSBmcm9tICcuL2NodW5rLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhbXAgfSBmcm9tICcuL2NsYW1wLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xvbmUgfSBmcm9tICcuL2Nsb25lLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xvbmVEZWVwIH0gZnJvbSAnLi9jbG9uZURlZXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbG9uZURlZXBXaXRoIH0gZnJvbSAnLi9jbG9uZURlZXBXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xvbmVXaXRoIH0gZnJvbSAnLi9jbG9uZVdpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21taXQgfSBmcm9tICcuL2NvbW1pdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXBhY3QgfSBmcm9tICcuL2NvbXBhY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25jYXQgfSBmcm9tICcuL2NvbmNhdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbmQgfSBmcm9tICcuL2NvbmQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25mb3JtcyB9IGZyb20gJy4vY29uZm9ybXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25mb3Jtc1RvIH0gZnJvbSAnLi9jb25mb3Jtc1RvLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29uc3RhbnQgfSBmcm9tICcuL2NvbnN0YW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY291bnRCeSB9IGZyb20gJy4vY291bnRCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZSB9IGZyb20gJy4vY3JlYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3VycnkgfSBmcm9tICcuL2N1cnJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3VycnlSaWdodCB9IGZyb20gJy4vY3VycnlSaWdodC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlYm91bmNlIH0gZnJvbSAnLi9kZWJvdW5jZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlYnVyciB9IGZyb20gJy4vZGVidXJyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdFRvIH0gZnJvbSAnLi9kZWZhdWx0VG8uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWZhdWx0c0RlZXAgfSBmcm9tICcuL2RlZmF1bHRzRGVlcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlZmVyIH0gZnJvbSAnLi9kZWZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlbGF5IH0gZnJvbSAnLi9kZWxheS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpZmZlcmVuY2UgfSBmcm9tICcuL2RpZmZlcmVuY2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkaWZmZXJlbmNlQnkgfSBmcm9tICcuL2RpZmZlcmVuY2VCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpZmZlcmVuY2VXaXRoIH0gZnJvbSAnLi9kaWZmZXJlbmNlV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpdmlkZSB9IGZyb20gJy4vZGl2aWRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcCB9IGZyb20gJy4vZHJvcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRyb3BSaWdodCB9IGZyb20gJy4vZHJvcFJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcFJpZ2h0V2hpbGUgfSBmcm9tICcuL2Ryb3BSaWdodFdoaWxlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcFdoaWxlIH0gZnJvbSAnLi9kcm9wV2hpbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlYWNoIH0gZnJvbSAnLi9lYWNoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZWFjaFJpZ2h0IH0gZnJvbSAnLi9lYWNoUmlnaHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbmRzV2l0aCB9IGZyb20gJy4vZW5kc1dpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbnRyaWVzIH0gZnJvbSAnLi9lbnRyaWVzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW50cmllc0luIH0gZnJvbSAnLi9lbnRyaWVzSW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlcSB9IGZyb20gJy4vZXEuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlc2NhcGUgfSBmcm9tICcuL2VzY2FwZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vZXNjYXBlUmVnRXhwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlcnkgfSBmcm9tICcuL2V2ZXJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXh0ZW5kIH0gZnJvbSAnLi9leHRlbmQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBleHRlbmRXaXRoIH0gZnJvbSAnLi9leHRlbmRXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmlsbCB9IGZyb20gJy4vZmlsbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbHRlciB9IGZyb20gJy4vZmlsdGVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmluZCB9IGZyb20gJy4vZmluZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbmRJbmRleCB9IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmluZEtleSB9IGZyb20gJy4vZmluZEtleS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbmRMYXN0IH0gZnJvbSAnLi9maW5kTGFzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbmRMYXN0SW5kZXggfSBmcm9tICcuL2ZpbmRMYXN0SW5kZXguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmaW5kTGFzdEtleSB9IGZyb20gJy4vZmluZExhc3RLZXkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmaXJzdCB9IGZyb20gJy4vZmlyc3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGF0TWFwIH0gZnJvbSAnLi9mbGF0TWFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdE1hcERlZXAgfSBmcm9tICcuL2ZsYXRNYXBEZWVwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdE1hcERlcHRoIH0gZnJvbSAnLi9mbGF0TWFwRGVwdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGF0dGVuIH0gZnJvbSAnLi9mbGF0dGVuLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdHRlbkRlZXAgfSBmcm9tICcuL2ZsYXR0ZW5EZWVwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdHRlbkRlcHRoIH0gZnJvbSAnLi9mbGF0dGVuRGVwdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGlwIH0gZnJvbSAnLi9mbGlwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvb3IgfSBmcm9tICcuL2Zsb29yLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvdyB9IGZyb20gJy4vZmxvdy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsb3dSaWdodCB9IGZyb20gJy4vZmxvd1JpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9yRWFjaCB9IGZyb20gJy4vZm9yRWFjaC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZvckVhY2hSaWdodCB9IGZyb20gJy4vZm9yRWFjaFJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9ySW4gfSBmcm9tICcuL2ZvckluLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9ySW5SaWdodCB9IGZyb20gJy4vZm9ySW5SaWdodC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZvck93biB9IGZyb20gJy4vZm9yT3duLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9yT3duUmlnaHQgfSBmcm9tICcuL2Zvck93blJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZnJvbVBhaXJzIH0gZnJvbSAnLi9mcm9tUGFpcnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmdW5jdGlvbnMgfSBmcm9tICcuL2Z1bmN0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZ1bmN0aW9uc0luIH0gZnJvbSAnLi9mdW5jdGlvbnNJbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdldCB9IGZyb20gJy4vZ2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ3JvdXBCeSB9IGZyb20gJy4vZ3JvdXBCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGd0IH0gZnJvbSAnLi9ndC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGd0ZSB9IGZyb20gJy4vZ3RlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGFzIH0gZnJvbSAnLi9oYXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoYXNJbiB9IGZyb20gJy4vaGFzSW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkIH0gZnJvbSAnLi9oZWFkLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaWRlbnRpdHkgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW5SYW5nZSB9IGZyb20gJy4vaW5SYW5nZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGluY2x1ZGVzIH0gZnJvbSAnLi9pbmNsdWRlcy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGluZGV4T2YgfSBmcm9tICcuL2luZGV4T2YuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbml0aWFsIH0gZnJvbSAnLi9pbml0aWFsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW50ZXJzZWN0aW9uIH0gZnJvbSAnLi9pbnRlcnNlY3Rpb24uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnRlcnNlY3Rpb25CeSB9IGZyb20gJy4vaW50ZXJzZWN0aW9uQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnRlcnNlY3Rpb25XaXRoIH0gZnJvbSAnLi9pbnRlcnNlY3Rpb25XaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW52ZXJ0IH0gZnJvbSAnLi9pbnZlcnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnZlcnRCeSB9IGZyb20gJy4vaW52ZXJ0QnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnZva2UgfSBmcm9tICcuL2ludm9rZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGludm9rZU1hcCB9IGZyb20gJy4vaW52b2tlTWFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNBcmd1bWVudHMgfSBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNBcnJheSB9IGZyb20gJy4vaXNBcnJheS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzQXJyYXlCdWZmZXIgfSBmcm9tICcuL2lzQXJyYXlCdWZmZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0FycmF5TGlrZSB9IGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0FycmF5TGlrZU9iamVjdCB9IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0Jvb2xlYW4gfSBmcm9tICcuL2lzQm9vbGVhbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzQnVmZmVyIH0gZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzRGF0ZSB9IGZyb20gJy4vaXNEYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNFbGVtZW50IH0gZnJvbSAnLi9pc0VsZW1lbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0VtcHR5IH0gZnJvbSAnLi9pc0VtcHR5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNFcXVhbCB9IGZyb20gJy4vaXNFcXVhbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzRXF1YWxXaXRoIH0gZnJvbSAnLi9pc0VxdWFsV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzRXJyb3IgfSBmcm9tICcuL2lzRXJyb3IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0Zpbml0ZSB9IGZyb20gJy4vaXNGaW5pdGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNJbnRlZ2VyIH0gZnJvbSAnLi9pc0ludGVnZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0xlbmd0aCB9IGZyb20gJy4vaXNMZW5ndGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc01hcCB9IGZyb20gJy4vaXNNYXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc01hdGNoIH0gZnJvbSAnLi9pc01hdGNoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNNYXRjaFdpdGggfSBmcm9tICcuL2lzTWF0Y2hXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOYU4gfSBmcm9tICcuL2lzTmFOLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOYXRpdmUgfSBmcm9tICcuL2lzTmF0aXZlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOaWwgfSBmcm9tICcuL2lzTmlsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOdWxsIH0gZnJvbSAnLi9pc051bGwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc051bWJlciB9IGZyb20gJy4vaXNOdW1iZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc09iamVjdCB9IGZyb20gJy4vaXNPYmplY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc09iamVjdExpa2UgfSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzUGxhaW5PYmplY3QgfSBmcm9tICcuL2lzUGxhaW5PYmplY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1JlZ0V4cCB9IGZyb20gJy4vaXNSZWdFeHAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1NhZmVJbnRlZ2VyIH0gZnJvbSAnLi9pc1NhZmVJbnRlZ2VyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNTZXQgfSBmcm9tICcuL2lzU2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNTdHJpbmcgfSBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNTeW1ib2wgfSBmcm9tICcuL2lzU3ltYm9sLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNUeXBlZEFycmF5IH0gZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1VuZGVmaW5lZCB9IGZyb20gJy4vaXNVbmRlZmluZWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1dlYWtNYXAgfSBmcm9tICcuL2lzV2Vha01hcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzV2Vha1NldCB9IGZyb20gJy4vaXNXZWFrU2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXRlcmF0ZWUgfSBmcm9tICcuL2l0ZXJhdGVlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgam9pbiB9IGZyb20gJy4vam9pbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtlYmFiQ2FzZSB9IGZyb20gJy4va2ViYWJDYXNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5QnkgfSBmcm9tICcuL2tleUJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5cyB9IGZyb20gJy4va2V5cy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleXNJbiB9IGZyb20gJy4va2V5c0luLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGFzdCB9IGZyb20gJy4vbGFzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGxhc3RJbmRleE9mIH0gZnJvbSAnLi9sYXN0SW5kZXhPZi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGxvZGFzaCB9IGZyb20gJy4vd3JhcHBlckxvZGFzaC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGxvd2VyQ2FzZSB9IGZyb20gJy4vbG93ZXJDYXNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbG93ZXJGaXJzdCB9IGZyb20gJy4vbG93ZXJGaXJzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGx0IH0gZnJvbSAnLi9sdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGx0ZSB9IGZyb20gJy4vbHRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWFwIH0gZnJvbSAnLi9tYXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXBLZXlzIH0gZnJvbSAnLi9tYXBLZXlzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWFwVmFsdWVzIH0gZnJvbSAnLi9tYXBWYWx1ZXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXRjaGVzIH0gZnJvbSAnLi9tYXRjaGVzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWF0Y2hlc1Byb3BlcnR5IH0gZnJvbSAnLi9tYXRjaGVzUHJvcGVydHkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXggfSBmcm9tICcuL21heC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1heEJ5IH0gZnJvbSAnLi9tYXhCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1lYW4gfSBmcm9tICcuL21lYW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZWFuQnkgfSBmcm9tICcuL21lYW5CeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1lbW9pemUgfSBmcm9tICcuL21lbW9pemUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXJnZSB9IGZyb20gJy4vbWVyZ2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXJnZVdpdGggfSBmcm9tICcuL21lcmdlV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZCB9IGZyb20gJy4vbWV0aG9kLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWV0aG9kT2YgfSBmcm9tICcuL21ldGhvZE9mLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWluIH0gZnJvbSAnLi9taW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtaW5CeSB9IGZyb20gJy4vbWluQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtaXhpbiB9IGZyb20gJy4vbWl4aW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtdWx0aXBseSB9IGZyb20gJy4vbXVsdGlwbHkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBuZWdhdGUgfSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5leHQgfSBmcm9tICcuL25leHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub29wIH0gZnJvbSAnLi9ub29wLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbm93IH0gZnJvbSAnLi9ub3cuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBudGggfSBmcm9tICcuL250aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG50aEFyZyB9IGZyb20gJy4vbnRoQXJnLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb21pdCB9IGZyb20gJy4vb21pdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9taXRCeSB9IGZyb20gJy4vb21pdEJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb25jZSB9IGZyb20gJy4vb25jZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9yZGVyQnkgfSBmcm9tICcuL29yZGVyQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvdmVyIH0gZnJvbSAnLi9vdmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3ZlckFyZ3MgfSBmcm9tICcuL292ZXJBcmdzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3ZlckV2ZXJ5IH0gZnJvbSAnLi9vdmVyRXZlcnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvdmVyU29tZSB9IGZyb20gJy4vb3ZlclNvbWUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYWQgfSBmcm9tICcuL3BhZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhZEVuZCB9IGZyb20gJy4vcGFkRW5kLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFkU3RhcnQgfSBmcm9tICcuL3BhZFN0YXJ0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyc2VJbnQgfSBmcm9tICcuL3BhcnNlSW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydGlhbCB9IGZyb20gJy4vcGFydGlhbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRpYWxSaWdodCB9IGZyb20gJy4vcGFydGlhbFJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydGl0aW9uIH0gZnJvbSAnLi9wYXJ0aXRpb24uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwaWNrIH0gZnJvbSAnLi9waWNrLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGlja0J5IH0gZnJvbSAnLi9waWNrQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwbGFudCB9IGZyb20gJy4vcGxhbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcm9wZXJ0eSB9IGZyb20gJy4vcHJvcGVydHkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcm9wZXJ0eU9mIH0gZnJvbSAnLi9wcm9wZXJ0eU9mLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHVsbCB9IGZyb20gJy4vcHVsbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB1bGxBbGwgfSBmcm9tICcuL3B1bGxBbGwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwdWxsQWxsQnkgfSBmcm9tICcuL3B1bGxBbGxCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB1bGxBbGxXaXRoIH0gZnJvbSAnLi9wdWxsQWxsV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB1bGxBdCB9IGZyb20gJy4vcHVsbEF0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmFuZG9tIH0gZnJvbSAnLi9yYW5kb20uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByYW5nZSB9IGZyb20gJy4vcmFuZ2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByYW5nZVJpZ2h0IH0gZnJvbSAnLi9yYW5nZVJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVhcmcgfSBmcm9tICcuL3JlYXJnLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVkdWNlIH0gZnJvbSAnLi9yZWR1Y2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZWR1Y2VSaWdodCB9IGZyb20gJy4vcmVkdWNlUmlnaHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZWplY3QgfSBmcm9tICcuL3JlamVjdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlbW92ZSB9IGZyb20gJy4vcmVtb3ZlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVwZWF0IH0gZnJvbSAnLi9yZXBlYXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZXBsYWNlIH0gZnJvbSAnLi9yZXBsYWNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzdCB9IGZyb20gJy4vcmVzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3VsdCB9IGZyb20gJy4vcmVzdWx0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmV2ZXJzZSB9IGZyb20gJy4vcmV2ZXJzZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdW5kIH0gZnJvbSAnLi9yb3VuZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNhbXBsZSB9IGZyb20gJy4vc2FtcGxlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2FtcGxlU2l6ZSB9IGZyb20gJy4vc2FtcGxlU2l6ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNldCB9IGZyb20gJy4vc2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0V2l0aCB9IGZyb20gJy4vc2V0V2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNodWZmbGUgfSBmcm9tICcuL3NodWZmbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzaXplIH0gZnJvbSAnLi9zaXplLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2xpY2UgfSBmcm9tICcuL3NsaWNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc25ha2VDYXNlIH0gZnJvbSAnLi9zbmFrZUNhc2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb21lIH0gZnJvbSAnLi9zb21lLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydEJ5IH0gZnJvbSAnLi9zb3J0QnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb3J0ZWRJbmRleCB9IGZyb20gJy4vc29ydGVkSW5kZXguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb3J0ZWRJbmRleEJ5IH0gZnJvbSAnLi9zb3J0ZWRJbmRleEJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkSW5kZXhPZiB9IGZyb20gJy4vc29ydGVkSW5kZXhPZi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNvcnRlZExhc3RJbmRleCB9IGZyb20gJy4vc29ydGVkTGFzdEluZGV4LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkTGFzdEluZGV4QnkgfSBmcm9tICcuL3NvcnRlZExhc3RJbmRleEJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkTGFzdEluZGV4T2YgfSBmcm9tICcuL3NvcnRlZExhc3RJbmRleE9mLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkVW5pcSB9IGZyb20gJy4vc29ydGVkVW5pcS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNvcnRlZFVuaXFCeSB9IGZyb20gJy4vc29ydGVkVW5pcUJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BsaXQgfSBmcm9tICcuL3NwbGl0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3ByZWFkIH0gZnJvbSAnLi9zcHJlYWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGFydENhc2UgfSBmcm9tICcuL3N0YXJ0Q2FzZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXJ0c1dpdGggfSBmcm9tICcuL3N0YXJ0c1dpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHViQXJyYXkgfSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0dWJGYWxzZSB9IGZyb20gJy4vc3R1YkZhbHNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R1Yk9iamVjdCB9IGZyb20gJy4vc3R1Yk9iamVjdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0dWJTdHJpbmcgfSBmcm9tICcuL3N0dWJTdHJpbmcuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHViVHJ1ZSB9IGZyb20gJy4vc3R1YlRydWUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdWJ0cmFjdCB9IGZyb20gJy4vc3VidHJhY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdW0gfSBmcm9tICcuL3N1bS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN1bUJ5IH0gZnJvbSAnLi9zdW1CeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhaWwgfSBmcm9tICcuL3RhaWwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWtlIH0gZnJvbSAnLi90YWtlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFrZVJpZ2h0IH0gZnJvbSAnLi90YWtlUmlnaHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWtlUmlnaHRXaGlsZSB9IGZyb20gJy4vdGFrZVJpZ2h0V2hpbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWtlV2hpbGUgfSBmcm9tICcuL3Rha2VXaGlsZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhcCB9IGZyb20gJy4vdGFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVTZXR0aW5ncyB9IGZyb20gJy4vdGVtcGxhdGVTZXR0aW5ncy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRocm90dGxlIH0gZnJvbSAnLi90aHJvdHRsZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRocnUgfSBmcm9tICcuL3RocnUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0aW1lcyB9IGZyb20gJy4vdGltZXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0FycmF5IH0gZnJvbSAnLi90b0FycmF5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9GaW5pdGUgfSBmcm9tICcuL3RvRmluaXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9JbnRlZ2VyIH0gZnJvbSAnLi90b0ludGVnZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0l0ZXJhdG9yIH0gZnJvbSAnLi90b0l0ZXJhdG9yLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9KU09OIH0gZnJvbSAnLi90b0pTT04uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0xlbmd0aCB9IGZyb20gJy4vdG9MZW5ndGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0xvd2VyIH0gZnJvbSAnLi90b0xvd2VyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9OdW1iZXIgfSBmcm9tICcuL3RvTnVtYmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9QYWlycyB9IGZyb20gJy4vdG9QYWlycy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRvUGFpcnNJbiB9IGZyb20gJy4vdG9QYWlyc0luLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9QYXRoIH0gZnJvbSAnLi90b1BhdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b1BsYWluT2JqZWN0IH0gZnJvbSAnLi90b1BsYWluT2JqZWN0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9TYWZlSW50ZWdlciB9IGZyb20gJy4vdG9TYWZlSW50ZWdlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRvU3RyaW5nIH0gZnJvbSAnLi90b1N0cmluZy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRvVXBwZXIgfSBmcm9tICcuL3RvVXBwZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmFuc2Zvcm0gfSBmcm9tICcuL3RyYW5zZm9ybS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyaW0gfSBmcm9tICcuL3RyaW0uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmltRW5kIH0gZnJvbSAnLi90cmltRW5kLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHJpbVN0YXJ0IH0gZnJvbSAnLi90cmltU3RhcnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cnVuY2F0ZSB9IGZyb20gJy4vdHJ1bmNhdGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmFyeSB9IGZyb20gJy4vdW5hcnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlvbiB9IGZyb20gJy4vdW5pb24uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlvbkJ5IH0gZnJvbSAnLi91bmlvbkJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5pb25XaXRoIH0gZnJvbSAnLi91bmlvbldpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlxIH0gZnJvbSAnLi91bmlxLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5pcUJ5IH0gZnJvbSAnLi91bmlxQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlxV2l0aCB9IGZyb20gJy4vdW5pcVdpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlxdWVJZCB9IGZyb20gJy4vdW5pcXVlSWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnNldCB9IGZyb20gJy4vdW5zZXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnppcCB9IGZyb20gJy4vdW56aXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnppcFdpdGggfSBmcm9tICcuL3VuemlwV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVwZGF0ZSB9IGZyb20gJy4vdXBkYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXBkYXRlV2l0aCB9IGZyb20gJy4vdXBkYXRlV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVwcGVyQ2FzZSB9IGZyb20gJy4vdXBwZXJDYXNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXBwZXJGaXJzdCB9IGZyb20gJy4vdXBwZXJGaXJzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbHVlIH0gZnJvbSAnLi92YWx1ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbHVlT2YgfSBmcm9tICcuL3ZhbHVlT2YuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2YWx1ZXMgfSBmcm9tICcuL3ZhbHVlcy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbHVlc0luIH0gZnJvbSAnLi92YWx1ZXNJbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhvdXQgfSBmcm9tICcuL3dpdGhvdXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3b3JkcyB9IGZyb20gJy4vd29yZHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwIH0gZnJvbSAnLi93cmFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd3JhcHBlckF0IH0gZnJvbSAnLi93cmFwcGVyQXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyQ2hhaW4gfSBmcm9tICcuL3dyYXBwZXJDaGFpbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJDb21taXQgfSBmcm9tICcuL2NvbW1pdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJMb2Rhc2ggfSBmcm9tICcuL3dyYXBwZXJMb2Rhc2guanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyTmV4dCB9IGZyb20gJy4vbmV4dC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJQbGFudCB9IGZyb20gJy4vcGxhbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyUmV2ZXJzZSB9IGZyb20gJy4vd3JhcHBlclJldmVyc2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyVG9JdGVyYXRvciB9IGZyb20gJy4vdG9JdGVyYXRvci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJWYWx1ZSB9IGZyb20gJy4vd3JhcHBlclZhbHVlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgeG9yIH0gZnJvbSAnLi94b3IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB4b3JCeSB9IGZyb20gJy4veG9yQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB4b3JXaXRoIH0gZnJvbSAnLi94b3JXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgemlwIH0gZnJvbSAnLi96aXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB6aXBPYmplY3QgfSBmcm9tICcuL3ppcE9iamVjdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHppcE9iamVjdERlZXAgfSBmcm9tICcuL3ppcE9iamVjdERlZXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB6aXBXaXRoIH0gZnJvbSAnLi96aXBXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuL2xvZGFzaC5kZWZhdWx0LmpzJztcbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG52YXIgREVGQVVMVF9FREdFX05BTUUgPSAnXFx4MDAnO1xudmFyIEdSQVBIX05PREUgPSAnXFx4MDAnO1xudmFyIEVER0VfS0VZX0RFTElNID0gJ1xceDAxJztcblxuLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6XG4vL1xuLy8gICogTm9kZSBpZCBxdWVyeSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBzdHJpbmcgaWRzIGZvciB0aGUgbm9kZXNcbi8vICAqIEVkZ2UgaWQgcXVlcnkgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gXCJlZGdlT2JqXCIsIGVkZ2Ugb2JqZWN0LCB0aGF0IGlzXG4vLyAgICBjb21wb3NlZCBvZiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gZWRnZToge3YsIHcsIG5hbWV9LlxuLy8gICogSW50ZXJuYWxseSB3ZSB1c2UgYW4gXCJlZGdlSWRcIiwgYSBzdHJpbmdpZmllZCBmb3JtIG9mIHRoZSBlZGdlT2JqLCB0b1xuLy8gICAgcmVmZXJlbmNlIGVkZ2VzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCBhIHBlcmZvcm1hbnQgd2F5IHRvIGxvb2sgdGhlc2Vcbi8vICAgIGVkZ2VzIHVwIGFuZCwgb2JqZWN0IHByb3BlcnRpZXMsIHdoaWNoIGhhdmUgc3RyaW5nIGtleXMsIGFyZSB0aGUgY2xvc2VzdFxuLy8gICAgd2UncmUgZ29pbmcgdG8gZ2V0IHRvIGEgcGVyZm9ybWFudCBoYXNodGFibGUgaW4gSmF2YVNjcmlwdC5cblxuLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6XG4vL1xuLy8gICogTm9kZSBpZCBxdWVyeSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBzdHJpbmcgaWRzIGZvciB0aGUgbm9kZXNcbi8vICAqIEVkZ2UgaWQgcXVlcnkgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gXCJlZGdlT2JqXCIsIGVkZ2Ugb2JqZWN0LCB0aGF0IGlzXG4vLyAgICBjb21wb3NlZCBvZiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gZWRnZToge3YsIHcsIG5hbWV9LlxuLy8gICogSW50ZXJuYWxseSB3ZSB1c2UgYW4gXCJlZGdlSWRcIiwgYSBzdHJpbmdpZmllZCBmb3JtIG9mIHRoZSBlZGdlT2JqLCB0b1xuLy8gICAgcmVmZXJlbmNlIGVkZ2VzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCBhIHBlcmZvcm1hbnQgd2F5IHRvIGxvb2sgdGhlc2Vcbi8vICAgIGVkZ2VzIHVwIGFuZCwgb2JqZWN0IHByb3BlcnRpZXMsIHdoaWNoIGhhdmUgc3RyaW5nIGtleXMsIGFyZSB0aGUgY2xvc2VzdFxuLy8gICAgd2UncmUgZ29pbmcgdG8gZ2V0IHRvIGEgcGVyZm9ybWFudCBoYXNodGFibGUgaW4gSmF2YVNjcmlwdC5cbmV4cG9ydCBjbGFzcyBHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHRoaXMuX2lzRGlyZWN0ZWQgPSBfLmhhcyhvcHRzLCAnZGlyZWN0ZWQnKSA/IG9wdHMuZGlyZWN0ZWQgOiB0cnVlO1xuICAgIHRoaXMuX2lzTXVsdGlncmFwaCA9IF8uaGFzKG9wdHMsICdtdWx0aWdyYXBoJykgPyBvcHRzLm11bHRpZ3JhcGggOiBmYWxzZTtcbiAgICB0aGlzLl9pc0NvbXBvdW5kID0gXy5oYXMob3B0cywgJ2NvbXBvdW5kJykgPyBvcHRzLmNvbXBvdW5kIDogZmFsc2U7XG5cbiAgICAvLyBMYWJlbCBmb3IgdGhlIGdyYXBoIGl0c2VsZlxuICAgIHRoaXMuX2xhYmVsID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gRGVmYXVsdHMgdG8gYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgbm9kZVxuICAgIHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbiA9IF8uY29uc3RhbnQodW5kZWZpbmVkKTtcblxuICAgIC8vIERlZmF1bHRzIHRvIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IGVkZ2VcbiAgICB0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4gPSBfLmNvbnN0YW50KHVuZGVmaW5lZCk7XG5cbiAgICAvLyB2IC0+IGxhYmVsXG4gICAgdGhpcy5fbm9kZXMgPSB7fTtcblxuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICAvLyB2IC0+IHBhcmVudFxuICAgICAgdGhpcy5fcGFyZW50ID0ge307XG5cbiAgICAgIC8vIHYgLT4gY2hpbGRyZW5cbiAgICAgIHRoaXMuX2NoaWxkcmVuID0ge307XG4gICAgICB0aGlzLl9jaGlsZHJlbltHUkFQSF9OT0RFXSA9IHt9O1xuICAgIH1cblxuICAgIC8vIHYgLT4gZWRnZU9ialxuICAgIHRoaXMuX2luID0ge307XG5cbiAgICAvLyB1IC0+IHYgLT4gTnVtYmVyXG4gICAgdGhpcy5fcHJlZHMgPSB7fTtcblxuICAgIC8vIHYgLT4gZWRnZU9ialxuICAgIHRoaXMuX291dCA9IHt9O1xuXG4gICAgLy8gdiAtPiB3IC0+IE51bWJlclxuICAgIHRoaXMuX3N1Y3MgPSB7fTtcblxuICAgIC8vIGUgLT4gZWRnZU9ialxuICAgIHRoaXMuX2VkZ2VPYmpzID0ge307XG5cbiAgICAvLyBlIC0+IGxhYmVsXG4gICAgdGhpcy5fZWRnZUxhYmVscyA9IHt9O1xuICB9XG4gIC8qID09PSBHcmFwaCBmdW5jdGlvbnMgPT09PT09PT09ICovXG4gIGlzRGlyZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWQ7XG4gIH1cbiAgaXNNdWx0aWdyYXBoKCkge1xuICAgIHJldHVybiB0aGlzLl9pc011bHRpZ3JhcGg7XG4gIH1cbiAgaXNDb21wb3VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNDb21wb3VuZDtcbiAgfVxuICBzZXRHcmFwaChsYWJlbCkge1xuICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ3JhcGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICB9XG4gIC8qID09PSBOb2RlIGZ1bmN0aW9ucyA9PT09PT09PT09ICovXG4gIHNldERlZmF1bHROb2RlTGFiZWwobmV3RGVmYXVsdCkge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKSB7XG4gICAgICBuZXdEZWZhdWx0ID0gXy5jb25zdGFudChuZXdEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuID0gbmV3RGVmYXVsdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBub2RlQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb3VudDtcbiAgfVxuICBub2RlcygpIHtcbiAgICByZXR1cm4gXy5rZXlzKHRoaXMuX25vZGVzKTtcbiAgfVxuICBzb3VyY2VzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gXy5maWx0ZXIodGhpcy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIF8uaXNFbXB0eShzZWxmLl9pblt2XSk7XG4gICAgfSk7XG4gIH1cbiAgc2lua3MoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBfLmZpbHRlcih0aGlzLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gXy5pc0VtcHR5KHNlbGYuX291dFt2XSk7XG4gICAgfSk7XG4gIH1cbiAgc2V0Tm9kZXModnMsIHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIF8uZWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgc2VsZi5zZXROb2RlKHYsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuc2V0Tm9kZSh2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXROb2RlKHYsIHZhbHVlKSB7XG4gICAgaWYgKF8uaGFzKHRoaXMuX25vZGVzLCB2KSkge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuX25vZGVzW3ZdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5fbm9kZXNbdl0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHZhbHVlIDogdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHYpO1xuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICB0aGlzLl9wYXJlbnRbdl0gPSBHUkFQSF9OT0RFO1xuICAgICAgdGhpcy5fY2hpbGRyZW5bdl0gPSB7fTtcbiAgICAgIHRoaXMuX2NoaWxkcmVuW0dSQVBIX05PREVdW3ZdID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faW5bdl0gPSB7fTtcbiAgICB0aGlzLl9wcmVkc1t2XSA9IHt9O1xuICAgIHRoaXMuX291dFt2XSA9IHt9O1xuICAgIHRoaXMuX3N1Y3Nbdl0gPSB7fTtcbiAgICArK3RoaXMuX25vZGVDb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBub2RlKHYpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZXNbdl07XG4gIH1cbiAgaGFzTm9kZSh2KSB7XG4gICAgcmV0dXJuIF8uaGFzKHRoaXMuX25vZGVzLCB2KTtcbiAgfVxuICByZW1vdmVOb2RlKHYpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKF8uaGFzKHRoaXMuX25vZGVzLCB2KSkge1xuICAgICAgdmFyIHJlbW92ZUVkZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZWxmLnJlbW92ZUVkZ2Uoc2VsZi5fZWRnZU9ianNbZV0pO1xuICAgICAgfTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rlc1t2XTtcbiAgICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50W3ZdO1xuICAgICAgICBfLmVhY2godGhpcy5jaGlsZHJlbih2KSwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgc2VsZi5zZXRQYXJlbnQoY2hpbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3ZdO1xuICAgICAgfVxuICAgICAgXy5lYWNoKF8ua2V5cyh0aGlzLl9pblt2XSksIHJlbW92ZUVkZ2UpO1xuICAgICAgZGVsZXRlIHRoaXMuX2luW3ZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3ByZWRzW3ZdO1xuICAgICAgXy5lYWNoKF8ua2V5cyh0aGlzLl9vdXRbdl0pLCByZW1vdmVFZGdlKTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9vdXRbdl07XG4gICAgICBkZWxldGUgdGhpcy5fc3Vjc1t2XTtcbiAgICAgIC0tdGhpcy5fbm9kZUNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXRQYXJlbnQodiwgcGFyZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoJyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gR1JBUEhfTk9ERTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29lcmNlIHBhcmVudCB0byBzdHJpbmdcbiAgICAgIHBhcmVudCArPSAnJztcbiAgICAgIGZvciAodmFyIGFuY2VzdG9yID0gcGFyZW50OyAhXy5pc1VuZGVmaW5lZChhbmNlc3Rvcik7IGFuY2VzdG9yID0gdGhpcy5wYXJlbnQoYW5jZXN0b3IpKSB7XG4gICAgICAgIGlmIChhbmNlc3RvciA9PT0gdikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyAnICsgcGFyZW50ICsgJyBhcyBwYXJlbnQgb2YgJyArIHYgKyAnIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXROb2RlKHBhcmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXROb2RlKHYpO1xuICAgIHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO1xuICAgIHRoaXMuX3BhcmVudFt2XSA9IHBhcmVudDtcbiAgICB0aGlzLl9jaGlsZHJlbltwYXJlbnRdW3ZdID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBfcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodikge1xuICAgIGRlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdl1dW3ZdO1xuICB9XG4gIHBhcmVudCh2KSB7XG4gICAgaWYgKHRoaXMuX2lzQ29tcG91bmQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLl9wYXJlbnRbdl07XG4gICAgICBpZiAocGFyZW50ICE9PSBHUkFQSF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNoaWxkcmVuKHYpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh2KSkge1xuICAgICAgdiA9IEdSQVBIX05PREU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzQ29tcG91bmQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuW3ZdO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBfLmtleXMoY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodiA9PT0gR1JBUEhfTk9ERSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzTm9kZSh2KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICBwcmVkZWNlc3NvcnModikge1xuICAgIHZhciBwcmVkc1YgPSB0aGlzLl9wcmVkc1t2XTtcbiAgICBpZiAocHJlZHNWKSB7XG4gICAgICByZXR1cm4gXy5rZXlzKHByZWRzVik7XG4gICAgfVxuICB9XG4gIHN1Y2Nlc3NvcnModikge1xuICAgIHZhciBzdWNzViA9IHRoaXMuX3N1Y3Nbdl07XG4gICAgaWYgKHN1Y3NWKSB7XG4gICAgICByZXR1cm4gXy5rZXlzKHN1Y3NWKTtcbiAgICB9XG4gIH1cbiAgbmVpZ2hib3JzKHYpIHtcbiAgICB2YXIgcHJlZHMgPSB0aGlzLnByZWRlY2Vzc29ycyh2KTtcbiAgICBpZiAocHJlZHMpIHtcbiAgICAgIHJldHVybiBfLnVuaW9uKHByZWRzLCB0aGlzLnN1Y2Nlc3NvcnModikpO1xuICAgIH1cbiAgfVxuICBpc0xlYWYodikge1xuICAgIHZhciBuZWlnaGJvcnM7XG4gICAgaWYgKHRoaXMuaXNEaXJlY3RlZCgpKSB7XG4gICAgICBuZWlnaGJvcnMgPSB0aGlzLnN1Y2Nlc3NvcnModik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5laWdoYm9ycyA9IHRoaXMubmVpZ2hib3JzKHYpO1xuICAgIH1cbiAgICByZXR1cm4gbmVpZ2hib3JzLmxlbmd0aCA9PT0gMDtcbiAgfVxuICBmaWx0ZXJOb2RlcyhmaWx0ZXIpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIGNvcHkgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7XG4gICAgICBkaXJlY3RlZDogdGhpcy5faXNEaXJlY3RlZCxcbiAgICAgIG11bHRpZ3JhcGg6IHRoaXMuX2lzTXVsdGlncmFwaCxcbiAgICAgIGNvbXBvdW5kOiB0aGlzLl9pc0NvbXBvdW5kLFxuICAgIH0pO1xuXG4gICAgY29weS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIF8uZWFjaCh0aGlzLl9ub2RlcywgZnVuY3Rpb24gKHZhbHVlLCB2KSB7XG4gICAgICBpZiAoZmlsdGVyKHYpKSB7XG4gICAgICAgIGNvcHkuc2V0Tm9kZSh2LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfLmVhY2godGhpcy5fZWRnZU9ianMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoY29weS5oYXNOb2RlKGUudikgJiYgY29weS5oYXNOb2RlKGUudykpIHtcbiAgICAgICAgY29weS5zZXRFZGdlKGUsIHNlbGYuZWRnZShlKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcGFyZW50cyA9IHt9O1xuICAgIGZ1bmN0aW9uIGZpbmRQYXJlbnQodikge1xuICAgICAgdmFyIHBhcmVudCA9IHNlbGYucGFyZW50KHYpO1xuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkIHx8IGNvcHkuaGFzTm9kZShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudHNbdl0gPSBwYXJlbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9IGVsc2UgaWYgKHBhcmVudCBpbiBwYXJlbnRzKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRzW3BhcmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICBfLmVhY2goY29weS5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgICBjb3B5LnNldFBhcmVudCh2LCBmaW5kUGFyZW50KHYpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb3B5O1xuICB9XG4gIC8qID09PSBFZGdlIGZ1bmN0aW9ucyA9PT09PT09PT09ICovXG4gIHNldERlZmF1bHRFZGdlTGFiZWwobmV3RGVmYXVsdCkge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKSB7XG4gICAgICBuZXdEZWZhdWx0ID0gXy5jb25zdGFudChuZXdEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuID0gbmV3RGVmYXVsdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBlZGdlQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkZ2VDb3VudDtcbiAgfVxuICBlZGdlcygpIHtcbiAgICByZXR1cm4gXy52YWx1ZXModGhpcy5fZWRnZU9ianMpO1xuICB9XG4gIHNldFBhdGgodnMsIHZhbHVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIF8ucmVkdWNlKHZzLCBmdW5jdGlvbiAodiwgdykge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICBzZWxmLnNldEVkZ2UodiwgdywgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5zZXRFZGdlKHYsIHcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHc7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLypcbiAgICogc2V0RWRnZSh2LCB3LCBbdmFsdWUsIFtuYW1lXV0pXG4gICAqIHNldEVkZ2UoeyB2LCB3LCBbbmFtZV0gfSwgW3ZhbHVlXSlcbiAgICovXG4gIHNldEVkZ2UoKSB7XG4gICAgdmFyIHYsIHcsIG5hbWUsIHZhbHVlO1xuICAgIHZhciB2YWx1ZVNwZWNpZmllZCA9IGZhbHNlO1xuICAgIHZhciBhcmcwID0gYXJndW1lbnRzWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnb2JqZWN0JyAmJiBhcmcwICE9PSBudWxsICYmICd2JyBpbiBhcmcwKSB7XG4gICAgICB2ID0gYXJnMC52O1xuICAgICAgdyA9IGFyZzAudztcbiAgICAgIG5hbWUgPSBhcmcwLm5hbWU7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgdmFsdWVTcGVjaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2ID0gYXJnMDtcbiAgICAgIHcgPSBhcmd1bWVudHNbMV07XG4gICAgICBuYW1lID0gYXJndW1lbnRzWzNdO1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdO1xuICAgICAgICB2YWx1ZVNwZWNpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdiA9ICcnICsgdjtcbiAgICB3ID0gJycgKyB3O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgbmFtZSA9ICcnICsgbmFtZTtcbiAgICB9XG5cbiAgICB2YXIgZSA9IGVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCB2LCB3LCBuYW1lKTtcbiAgICBpZiAoXy5oYXModGhpcy5fZWRnZUxhYmVscywgZSkpIHtcbiAgICAgIGlmICh2YWx1ZVNwZWNpZmllZCkge1xuICAgICAgICB0aGlzLl9lZGdlTGFiZWxzW2VdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQobmFtZSkgJiYgIXRoaXMuX2lzTXVsdGlncmFwaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlJyk7XG4gICAgfVxuXG4gICAgLy8gSXQgZGlkbid0IGV4aXN0LCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdC5cbiAgICAvLyBGaXJzdCBlbnN1cmUgdGhlIG5vZGVzIGV4aXN0LlxuICAgIHRoaXMuc2V0Tm9kZSh2KTtcbiAgICB0aGlzLnNldE5vZGUodyk7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5fZWRnZUxhYmVsc1tlXSA9IHZhbHVlU3BlY2lmaWVkID8gdmFsdWUgOiB0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odiwgdywgbmFtZSk7XG5cbiAgICB2YXIgZWRnZU9iaiA9IGVkZ2VBcmdzVG9PYmoodGhpcy5faXNEaXJlY3RlZCwgdiwgdywgbmFtZSk7XG4gICAgLy8gRW5zdXJlIHdlIGFkZCB1bmRpcmVjdGVkIGVkZ2VzIGluIGEgY29uc2lzdGVudCB3YXkuXG4gICAgdiA9IGVkZ2VPYmoudjtcbiAgICB3ID0gZWRnZU9iai53O1xuXG4gICAgT2JqZWN0LmZyZWV6ZShlZGdlT2JqKTtcbiAgICB0aGlzLl9lZGdlT2Jqc1tlXSA9IGVkZ2VPYmo7XG4gICAgaW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fcHJlZHNbd10sIHYpO1xuICAgIGluY3JlbWVudE9ySW5pdEVudHJ5KHRoaXMuX3N1Y3Nbdl0sIHcpO1xuICAgIHRoaXMuX2luW3ddW2VdID0gZWRnZU9iajtcbiAgICB0aGlzLl9vdXRbdl1bZV0gPSBlZGdlT2JqO1xuICAgIHRoaXMuX2VkZ2VDb3VudCsrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGVkZ2UodiwgdywgbmFtZSkge1xuICAgIHZhciBlID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgPyBlZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCBhcmd1bWVudHNbMF0pXG4gICAgICAgIDogZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsIHYsIHcsIG5hbWUpO1xuICAgIHJldHVybiB0aGlzLl9lZGdlTGFiZWxzW2VdO1xuICB9XG4gIGhhc0VkZ2UodiwgdywgbmFtZSkge1xuICAgIHZhciBlID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgPyBlZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCBhcmd1bWVudHNbMF0pXG4gICAgICAgIDogZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsIHYsIHcsIG5hbWUpO1xuICAgIHJldHVybiBfLmhhcyh0aGlzLl9lZGdlTGFiZWxzLCBlKTtcbiAgfVxuICByZW1vdmVFZGdlKHYsIHcsIG5hbWUpIHtcbiAgICB2YXIgZSA9XG4gICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxXG4gICAgICAgID8gZWRnZU9ialRvSWQodGhpcy5faXNEaXJlY3RlZCwgYXJndW1lbnRzWzBdKVxuICAgICAgICA6IGVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCB2LCB3LCBuYW1lKTtcbiAgICB2YXIgZWRnZSA9IHRoaXMuX2VkZ2VPYmpzW2VdO1xuICAgIGlmIChlZGdlKSB7XG4gICAgICB2ID0gZWRnZS52O1xuICAgICAgdyA9IGVkZ2UudztcbiAgICAgIGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW2VdO1xuICAgICAgZGVjcmVtZW50T3JSZW1vdmVFbnRyeSh0aGlzLl9wcmVkc1t3XSwgdik7XG4gICAgICBkZWNyZW1lbnRPclJlbW92ZUVudHJ5KHRoaXMuX3N1Y3Nbdl0sIHcpO1xuICAgICAgZGVsZXRlIHRoaXMuX2luW3ddW2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX291dFt2XVtlXTtcbiAgICAgIHRoaXMuX2VkZ2VDb3VudC0tO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBpbkVkZ2VzKHYsIHUpIHtcbiAgICB2YXIgaW5WID0gdGhpcy5faW5bdl07XG4gICAgaWYgKGluVikge1xuICAgICAgdmFyIGVkZ2VzID0gXy52YWx1ZXMoaW5WKTtcbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gZWRnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5maWx0ZXIoZWRnZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLnYgPT09IHU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgb3V0RWRnZXModiwgdykge1xuICAgIHZhciBvdXRWID0gdGhpcy5fb3V0W3ZdO1xuICAgIGlmIChvdXRWKSB7XG4gICAgICB2YXIgZWRnZXMgPSBfLnZhbHVlcyhvdXRWKTtcbiAgICAgIGlmICghdykge1xuICAgICAgICByZXR1cm4gZWRnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5maWx0ZXIoZWRnZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLncgPT09IHc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgbm9kZUVkZ2VzKHYsIHcpIHtcbiAgICB2YXIgaW5FZGdlcyA9IHRoaXMuaW5FZGdlcyh2LCB3KTtcbiAgICBpZiAoaW5FZGdlcykge1xuICAgICAgcmV0dXJuIGluRWRnZXMuY29uY2F0KHRoaXMub3V0RWRnZXModiwgdykpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBOdW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGdyYXBoLiBTaG91bGQgb25seSBiZSBjaGFuZ2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gKi9cbkdyYXBoLnByb3RvdHlwZS5fbm9kZUNvdW50ID0gMDtcblxuLyogTnVtYmVyIG9mIGVkZ2VzIGluIHRoZSBncmFwaC4gU2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBieSB0aGUgaW1wbGVtZW50YXRpb24uICovXG5HcmFwaC5wcm90b3R5cGUuX2VkZ2VDb3VudCA9IDA7XG5cbmZ1bmN0aW9uIGluY3JlbWVudE9ySW5pdEVudHJ5KG1hcCwgaykge1xuICBpZiAobWFwW2tdKSB7XG4gICAgbWFwW2tdKys7XG4gIH0gZWxzZSB7XG4gICAgbWFwW2tdID0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNyZW1lbnRPclJlbW92ZUVudHJ5KG1hcCwgaykge1xuICBpZiAoIS0tbWFwW2tdKSB7XG4gICAgZGVsZXRlIG1hcFtrXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlZGdlQXJnc1RvSWQoaXNEaXJlY3RlZCwgdl8sIHdfLCBuYW1lKSB7XG4gIHZhciB2ID0gJycgKyB2XztcbiAgdmFyIHcgPSAnJyArIHdfO1xuICBpZiAoIWlzRGlyZWN0ZWQgJiYgdiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG4gIHJldHVybiB2ICsgRURHRV9LRVlfREVMSU0gKyB3ICsgRURHRV9LRVlfREVMSU0gKyAoXy5pc1VuZGVmaW5lZChuYW1lKSA/IERFRkFVTFRfRURHRV9OQU1FIDogbmFtZSk7XG59XG5cbmZ1bmN0aW9uIGVkZ2VBcmdzVG9PYmooaXNEaXJlY3RlZCwgdl8sIHdfLCBuYW1lKSB7XG4gIHZhciB2ID0gJycgKyB2XztcbiAgdmFyIHcgPSAnJyArIHdfO1xuICBpZiAoIWlzRGlyZWN0ZWQgJiYgdiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG4gIHZhciBlZGdlT2JqID0geyB2OiB2LCB3OiB3IH07XG4gIGlmIChuYW1lKSB7XG4gICAgZWRnZU9iai5uYW1lID0gbmFtZTtcbiAgfVxuICByZXR1cm4gZWRnZU9iajtcbn1cblxuZnVuY3Rpb24gZWRnZU9ialRvSWQoaXNEaXJlY3RlZCwgZWRnZU9iaikge1xuICByZXR1cm4gZWRnZUFyZ3NUb0lkKGlzRGlyZWN0ZWQsIGVkZ2VPYmoudiwgZWRnZU9iai53LCBlZGdlT2JqLm5hbWUpO1xufVxuIiwKICAgICIvLyBJbmNsdWRlcyBvbmx5IHRoZSBcImNvcmVcIiBvZiBncmFwaGxpYlxuXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4vZ3JhcGguanMnO1xuXG5jb25zdCB2ZXJzaW9uID0gJzIuMS45LXByZSc7XG5cbmV4cG9ydCB7IEdyYXBoLCB2ZXJzaW9uIH07XG4iLAogICAgIi8qXG4gKiBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBDb3JtZW4sIGV0IGFsLixcbiAqIFwiSW50cm9kdWN0aW9uIHRvIEFsZ29yaXRobXNcIi5cbiAqL1xuXG5leHBvcnQgeyBMaXN0IH07XG5cbmNsYXNzIExpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgc2VudGluZWwgPSB7fTtcbiAgICBzZW50aW5lbC5fbmV4dCA9IHNlbnRpbmVsLl9wcmV2ID0gc2VudGluZWw7XG4gICAgdGhpcy5fc2VudGluZWwgPSBzZW50aW5lbDtcbiAgfVxuICBkZXF1ZXVlKCkge1xuICAgIHZhciBzZW50aW5lbCA9IHRoaXMuX3NlbnRpbmVsO1xuICAgIHZhciBlbnRyeSA9IHNlbnRpbmVsLl9wcmV2O1xuICAgIGlmIChlbnRyeSAhPT0gc2VudGluZWwpIHtcbiAgICAgIHVubGluayhlbnRyeSk7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG4gIGVucXVldWUoZW50cnkpIHtcbiAgICB2YXIgc2VudGluZWwgPSB0aGlzLl9zZW50aW5lbDtcbiAgICBpZiAoZW50cnkuX3ByZXYgJiYgZW50cnkuX25leHQpIHtcbiAgICAgIHVubGluayhlbnRyeSk7XG4gICAgfVxuICAgIGVudHJ5Ll9uZXh0ID0gc2VudGluZWwuX25leHQ7XG4gICAgc2VudGluZWwuX25leHQuX3ByZXYgPSBlbnRyeTtcbiAgICBzZW50aW5lbC5fbmV4dCA9IGVudHJ5O1xuICAgIGVudHJ5Ll9wcmV2ID0gc2VudGluZWw7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgdmFyIHN0cnMgPSBbXTtcbiAgICB2YXIgc2VudGluZWwgPSB0aGlzLl9zZW50aW5lbDtcbiAgICB2YXIgY3VyciA9IHNlbnRpbmVsLl9wcmV2O1xuICAgIHdoaWxlIChjdXJyICE9PSBzZW50aW5lbCkge1xuICAgICAgc3Rycy5wdXNoKEpTT04uc3RyaW5naWZ5KGN1cnIsIGZpbHRlck91dExpbmtzKSk7XG4gICAgICBjdXJyID0gY3Vyci5fcHJldjtcbiAgICB9XG4gICAgcmV0dXJuICdbJyArIHN0cnMuam9pbignLCAnKSArICddJztcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmxpbmsoZW50cnkpIHtcbiAgZW50cnkuX3ByZXYuX25leHQgPSBlbnRyeS5fbmV4dDtcbiAgZW50cnkuX25leHQuX3ByZXYgPSBlbnRyeS5fcHJldjtcbiAgZGVsZXRlIGVudHJ5Ll9uZXh0O1xuICBkZWxldGUgZW50cnkuX3ByZXY7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck91dExpbmtzKGssIHYpIHtcbiAgaWYgKGsgIT09ICdfbmV4dCcgJiYgayAhPT0gJ19wcmV2Jykge1xuICAgIHJldHVybiB2O1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vZ3JhcGhsaWIvaW5kZXguanMnO1xuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4vZGF0YS9saXN0LmpzJztcblxuLypcbiAqIEEgZ3JlZWR5IGhldXJpc3RpYyBmb3IgZmluZGluZyBhIGZlZWRiYWNrIGFyYyBzZXQgZm9yIGEgZ3JhcGguIEEgZmVlZGJhY2tcbiAqIGFyYyBzZXQgaXMgYSBzZXQgb2YgZWRnZXMgdGhhdCBjYW4gYmUgcmVtb3ZlZCB0byBtYWtlIGEgZ3JhcGggYWN5Y2xpYy5cbiAqIFRoZSBhbGdvcml0aG0gY29tZXMgZnJvbTogUC4gRWFkZXMsIFguIExpbiwgYW5kIFcuIEYuIFNteXRoLCBcIkEgZmFzdCBhbmRcbiAqIGVmZmVjdGl2ZSBoZXVyaXN0aWMgZm9yIHRoZSBmZWVkYmFjayBhcmMgc2V0IHByb2JsZW0uXCIgVGhpcyBpbXBsZW1lbnRhdGlvblxuICogYWRqdXN0cyB0aGF0IGZyb20gdGhlIHBhcGVyIHRvIGFsbG93IGZvciB3ZWlnaHRlZCBlZGdlcy5cbiAqL1xuZXhwb3J0IHsgZ3JlZWR5RkFTIH07XG5cbnZhciBERUZBVUxUX1dFSUdIVF9GTiA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGdyZWVkeUZBUyhnLCB3ZWlnaHRGbikge1xuICBpZiAoZy5ub2RlQ291bnQoKSA8PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciBzdGF0ZSA9IGJ1aWxkU3RhdGUoZywgd2VpZ2h0Rm4gfHwgREVGQVVMVF9XRUlHSFRfRk4pO1xuICB2YXIgcmVzdWx0cyA9IGRvR3JlZWR5RkFTKHN0YXRlLmdyYXBoLCBzdGF0ZS5idWNrZXRzLCBzdGF0ZS56ZXJvSWR4KTtcblxuICAvLyBFeHBhbmQgbXVsdGktZWRnZXNcbiAgcmV0dXJuIF8uZmxhdHRlbihcbiAgICBfLm1hcChyZXN1bHRzLCBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIGcub3V0RWRnZXMoZS52LCBlLncpO1xuICAgIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRvR3JlZWR5RkFTKGcsIGJ1Y2tldHMsIHplcm9JZHgpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHNvdXJjZXMgPSBidWNrZXRzW2J1Y2tldHMubGVuZ3RoIC0gMV07XG4gIHZhciBzaW5rcyA9IGJ1Y2tldHNbMF07XG5cbiAgdmFyIGVudHJ5O1xuICB3aGlsZSAoZy5ub2RlQ291bnQoKSkge1xuICAgIHdoaWxlICgoZW50cnkgPSBzaW5rcy5kZXF1ZXVlKCkpKSB7XG4gICAgICByZW1vdmVOb2RlKGcsIGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5KTtcbiAgICB9XG4gICAgd2hpbGUgKChlbnRyeSA9IHNvdXJjZXMuZGVxdWV1ZSgpKSkge1xuICAgICAgcmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSk7XG4gICAgfVxuICAgIGlmIChnLm5vZGVDb3VudCgpKSB7XG4gICAgICBmb3IgKHZhciBpID0gYnVja2V0cy5sZW5ndGggLSAyOyBpID4gMDsgLS1pKSB7XG4gICAgICAgIGVudHJ5ID0gYnVja2V0c1tpXS5kZXF1ZXVlKCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChyZW1vdmVOb2RlKGcsIGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5LCB0cnVlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSwgY29sbGVjdFByZWRlY2Vzc29ycykge1xuICB2YXIgcmVzdWx0cyA9IGNvbGxlY3RQcmVkZWNlc3NvcnMgPyBbXSA6IHVuZGVmaW5lZDtcblxuICBfLmZvckVhY2goZy5pbkVkZ2VzKGVudHJ5LnYpLCBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciB3ZWlnaHQgPSBnLmVkZ2UoZWRnZSk7XG4gICAgdmFyIHVFbnRyeSA9IGcubm9kZShlZGdlLnYpO1xuXG4gICAgaWYgKGNvbGxlY3RQcmVkZWNlc3NvcnMpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IHY6IGVkZ2UudiwgdzogZWRnZS53IH0pO1xuICAgIH1cblxuICAgIHVFbnRyeS5vdXQgLT0gd2VpZ2h0O1xuICAgIGFzc2lnbkJ1Y2tldChidWNrZXRzLCB6ZXJvSWR4LCB1RW50cnkpO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5vdXRFZGdlcyhlbnRyeS52KSwgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgd2VpZ2h0ID0gZy5lZGdlKGVkZ2UpO1xuICAgIHZhciB3ID0gZWRnZS53O1xuICAgIHZhciB3RW50cnkgPSBnLm5vZGUodyk7XG4gICAgd0VudHJ5WydpbiddIC09IHdlaWdodDtcbiAgICBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgd0VudHJ5KTtcbiAgfSk7XG5cbiAgZy5yZW1vdmVOb2RlKGVudHJ5LnYpO1xuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0YXRlKGcsIHdlaWdodEZuKSB7XG4gIHZhciBmYXNHcmFwaCA9IG5ldyBHcmFwaCgpO1xuICB2YXIgbWF4SW4gPSAwO1xuICB2YXIgbWF4T3V0ID0gMDtcblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGZhc0dyYXBoLnNldE5vZGUodiwgeyB2OiB2LCBpbjogMCwgb3V0OiAwIH0pO1xuICB9KTtcblxuICAvLyBBZ2dyZWdhdGUgd2VpZ2h0cyBvbiBub2RlcywgYnV0IGFsc28gc3VtIHRoZSB3ZWlnaHRzIGFjcm9zcyBtdWx0aS1lZGdlc1xuICAvLyBpbnRvIGEgc2luZ2xlIGVkZ2UgZm9yIHRoZSBmYXNHcmFwaC5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgcHJldldlaWdodCA9IGZhc0dyYXBoLmVkZ2UoZS52LCBlLncpIHx8IDA7XG4gICAgdmFyIHdlaWdodCA9IHdlaWdodEZuKGUpO1xuICAgIHZhciBlZGdlV2VpZ2h0ID0gcHJldldlaWdodCArIHdlaWdodDtcbiAgICBmYXNHcmFwaC5zZXRFZGdlKGUudiwgZS53LCBlZGdlV2VpZ2h0KTtcbiAgICBtYXhPdXQgPSBNYXRoLm1heChtYXhPdXQsIChmYXNHcmFwaC5ub2RlKGUudikub3V0ICs9IHdlaWdodCkpO1xuICAgIG1heEluID0gTWF0aC5tYXgobWF4SW4sIChmYXNHcmFwaC5ub2RlKGUudylbJ2luJ10gKz0gd2VpZ2h0KSk7XG4gIH0pO1xuXG4gIHZhciBidWNrZXRzID0gXy5yYW5nZShtYXhPdXQgKyBtYXhJbiArIDMpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBMaXN0KCk7XG4gIH0pO1xuICB2YXIgemVyb0lkeCA9IG1heEluICsgMTtcblxuICBfLmZvckVhY2goZmFzR3JhcGgubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgZmFzR3JhcGgubm9kZSh2KSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IGdyYXBoOiBmYXNHcmFwaCwgYnVja2V0czogYnVja2V0cywgemVyb0lkeDogemVyb0lkeCB9O1xufVxuXG5mdW5jdGlvbiBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgZW50cnkpIHtcbiAgaWYgKCFlbnRyeS5vdXQpIHtcbiAgICBidWNrZXRzWzBdLmVucXVldWUoZW50cnkpO1xuICB9IGVsc2UgaWYgKCFlbnRyeVsnaW4nXSkge1xuICAgIGJ1Y2tldHNbYnVja2V0cy5sZW5ndGggLSAxXS5lbnF1ZXVlKGVudHJ5KTtcbiAgfSBlbHNlIHtcbiAgICBidWNrZXRzW2VudHJ5Lm91dCAtIGVudHJ5WydpbiddICsgemVyb0lkeF0uZW5xdWV1ZShlbnRyeSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZ3JlZWR5RkFTIH0gZnJvbSAnLi9ncmVlZHktZmFzLmpzJztcblxuZXhwb3J0IHsgcnVuLCB1bmRvIH07XG5cbmZ1bmN0aW9uIHJ1bihnKSB7XG4gIHZhciBmYXMgPSBnLmdyYXBoKCkuYWN5Y2xpY2VyID09PSAnZ3JlZWR5JyA/IGdyZWVkeUZBUyhnLCB3ZWlnaHRGbihnKSkgOiBkZnNGQVMoZyk7XG4gIF8uZm9yRWFjaChmYXMsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGcucmVtb3ZlRWRnZShlKTtcbiAgICBsYWJlbC5mb3J3YXJkTmFtZSA9IGUubmFtZTtcbiAgICBsYWJlbC5yZXZlcnNlZCA9IHRydWU7XG4gICAgZy5zZXRFZGdlKGUudywgZS52LCBsYWJlbCwgXy51bmlxdWVJZCgncmV2JykpO1xuICB9KTtcblxuICBmdW5jdGlvbiB3ZWlnaHRGbihnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZy5lZGdlKGUpLndlaWdodDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRmc0ZBUyhnKSB7XG4gIHZhciBmYXMgPSBbXTtcbiAgdmFyIHN0YWNrID0ge307XG4gIHZhciB2aXNpdGVkID0ge307XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICBpZiAoXy5oYXModmlzaXRlZCwgdikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlzaXRlZFt2XSA9IHRydWU7XG4gICAgc3RhY2tbdl0gPSB0cnVlO1xuICAgIF8uZm9yRWFjaChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF8uaGFzKHN0YWNrLCBlLncpKSB7XG4gICAgICAgIGZhcy5wdXNoKGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGZzKGUudyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHN0YWNrW3ZdO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZGZzKTtcbiAgcmV0dXJuIGZhcztcbn1cblxuZnVuY3Rpb24gdW5kbyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGlmIChsYWJlbC5yZXZlcnNlZCkge1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuXG4gICAgICB2YXIgZm9yd2FyZE5hbWUgPSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGRlbGV0ZSBsYWJlbC5yZXZlcnNlZDtcbiAgICAgIGRlbGV0ZSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGcuc2V0RWRnZShlLncsIGUudiwgbGFiZWwsIGZvcndhcmROYW1lKTtcbiAgICB9XG4gIH0pO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL2dyYXBobGliL2luZGV4LmpzJztcblxuZXhwb3J0IHtcbiAgYWRkRHVtbXlOb2RlLFxuICBzaW1wbGlmeSxcbiAgYXNOb25Db21wb3VuZEdyYXBoLFxuICBzdWNjZXNzb3JXZWlnaHRzLFxuICBwcmVkZWNlc3NvcldlaWdodHMsXG4gIGludGVyc2VjdFJlY3QsXG4gIGJ1aWxkTGF5ZXJNYXRyaXgsXG4gIG5vcm1hbGl6ZVJhbmtzLFxuICByZW1vdmVFbXB0eVJhbmtzLFxuICBhZGRCb3JkZXJOb2RlLFxuICBtYXhSYW5rLFxuICBwYXJ0aXRpb24sXG4gIHRpbWUsXG4gIG5vdGltZSxcbn07XG5cbi8qXG4gKiBBZGRzIGEgZHVtbXkgbm9kZSB0byB0aGUgZ3JhcGggYW5kIHJldHVybiB2LlxuICovXG5mdW5jdGlvbiBhZGREdW1teU5vZGUoZywgdHlwZSwgYXR0cnMsIG5hbWUpIHtcbiAgdmFyIHY7XG4gIGRvIHtcbiAgICB2ID0gXy51bmlxdWVJZChuYW1lKTtcbiAgfSB3aGlsZSAoZy5oYXNOb2RlKHYpKTtcblxuICBhdHRycy5kdW1teSA9IHR5cGU7XG4gIGcuc2V0Tm9kZSh2LCBhdHRycyk7XG4gIHJldHVybiB2O1xufVxuXG4vKlxuICogUmV0dXJucyBhIG5ldyBncmFwaCB3aXRoIG9ubHkgc2ltcGxlIGVkZ2VzLiBIYW5kbGVzIGFnZ3JlZ2F0aW9uIG9mIGRhdGFcbiAqIGFzc29jaWF0ZWQgd2l0aCBtdWx0aS1lZGdlcy5cbiAqL1xuZnVuY3Rpb24gc2ltcGxpZnkoZykge1xuICB2YXIgc2ltcGxpZmllZCA9IG5ldyBHcmFwaCgpLnNldEdyYXBoKGcuZ3JhcGgoKSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgc2ltcGxpZmllZC5zZXROb2RlKHYsIGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBzaW1wbGVMYWJlbCA9IHNpbXBsaWZpZWQuZWRnZShlLnYsIGUudykgfHwgeyB3ZWlnaHQ6IDAsIG1pbmxlbjogMSB9O1xuICAgIHZhciBsYWJlbCA9IGcuZWRnZShlKTtcbiAgICBzaW1wbGlmaWVkLnNldEVkZ2UoZS52LCBlLncsIHtcbiAgICAgIHdlaWdodDogc2ltcGxlTGFiZWwud2VpZ2h0ICsgbGFiZWwud2VpZ2h0LFxuICAgICAgbWlubGVuOiBNYXRoLm1heChzaW1wbGVMYWJlbC5taW5sZW4sIGxhYmVsLm1pbmxlbiksXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gc2ltcGxpZmllZDtcbn1cblxuZnVuY3Rpb24gYXNOb25Db21wb3VuZEdyYXBoKGcpIHtcbiAgdmFyIHNpbXBsaWZpZWQgPSBuZXcgR3JhcGgoeyBtdWx0aWdyYXBoOiBnLmlzTXVsdGlncmFwaCgpIH0pLnNldEdyYXBoKGcuZ3JhcGgoKSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKCFnLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgc2ltcGxpZmllZC5zZXROb2RlKHYsIGcubm9kZSh2KSk7XG4gICAgfVxuICB9KTtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBzaW1wbGlmaWVkLnNldEVkZ2UoZSwgZy5lZGdlKGUpKTtcbiAgfSk7XG4gIHJldHVybiBzaW1wbGlmaWVkO1xufVxuXG5mdW5jdGlvbiBzdWNjZXNzb3JXZWlnaHRzKGcpIHtcbiAgdmFyIHdlaWdodE1hcCA9IF8ubWFwKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgc3VjcyA9IHt9O1xuICAgIF8uZm9yRWFjaChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgc3Vjc1tlLnddID0gKHN1Y3NbZS53XSB8fCAwKSArIGcuZWRnZShlKS53ZWlnaHQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1Y3M7XG4gIH0pO1xuICByZXR1cm4gXy56aXBPYmplY3QoZy5ub2RlcygpLCB3ZWlnaHRNYXApO1xufVxuXG5mdW5jdGlvbiBwcmVkZWNlc3NvcldlaWdodHMoZykge1xuICB2YXIgd2VpZ2h0TWFwID0gXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBwcmVkcyA9IHt9O1xuICAgIF8uZm9yRWFjaChnLmluRWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBwcmVkc1tlLnZdID0gKHByZWRzW2Uudl0gfHwgMCkgKyBnLmVkZ2UoZSkud2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBwcmVkcztcbiAgfSk7XG4gIHJldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksIHdlaWdodE1hcCk7XG59XG5cbi8qXG4gKiBGaW5kcyB3aGVyZSBhIGxpbmUgc3RhcnRpbmcgYXQgcG9pbnQgKHt4LCB5fSkgd291bGQgaW50ZXJzZWN0IGEgcmVjdGFuZ2xlXG4gKiAoe3gsIHksIHdpZHRoLCBoZWlnaHR9KSBpZiBpdCB3ZXJlIHBvaW50aW5nIGF0IHRoZSByZWN0YW5nbGUncyBjZW50ZXIuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdFJlY3QocmVjdCwgcG9pbnQpIHtcbiAgdmFyIHggPSByZWN0Lng7XG4gIHZhciB5ID0gcmVjdC55O1xuXG4gIC8vIFJlY3RhbmdsZSBpbnRlcnNlY3Rpb24gYWxnb3JpdGhtIGZyb206XG4gIC8vIGh0dHA6Ly9tYXRoLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMDgxMTMvZmluZC1lZGdlLWJldHdlZW4tdHdvLWJveGVzXG4gIHZhciBkeCA9IHBvaW50LnggLSB4O1xuICB2YXIgZHkgPSBwb2ludC55IC0geTtcbiAgdmFyIHcgPSByZWN0LndpZHRoIC8gMjtcbiAgdmFyIGggPSByZWN0LmhlaWdodCAvIDI7XG5cbiAgaWYgKCFkeCAmJiAhZHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZScpO1xuICB9XG5cbiAgdmFyIHN4LCBzeTtcbiAgaWYgKE1hdGguYWJzKGR5KSAqIHcgPiBNYXRoLmFicyhkeCkgKiBoKSB7XG4gICAgLy8gSW50ZXJzZWN0aW9uIGlzIHRvcCBvciBib3R0b20gb2YgcmVjdC5cbiAgICBpZiAoZHkgPCAwKSB7XG4gICAgICBoID0gLWg7XG4gICAgfVxuICAgIHN4ID0gKGggKiBkeCkgLyBkeTtcbiAgICBzeSA9IGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gSW50ZXJzZWN0aW9uIGlzIGxlZnQgb3IgcmlnaHQgb2YgcmVjdC5cbiAgICBpZiAoZHggPCAwKSB7XG4gICAgICB3ID0gLXc7XG4gICAgfVxuICAgIHN4ID0gdztcbiAgICBzeSA9ICh3ICogZHkpIC8gZHg7XG4gIH1cblxuICByZXR1cm4geyB4OiB4ICsgc3gsIHk6IHkgKyBzeSB9O1xufVxuXG4vKlxuICogR2l2ZW4gYSBEQUcgd2l0aCBlYWNoIG5vZGUgYXNzaWduZWQgXCJyYW5rXCIgYW5kIFwib3JkZXJcIiBwcm9wZXJ0aWVzLCB0aGlzXG4gKiBmdW5jdGlvbiB3aWxsIHByb2R1Y2UgYSBtYXRyaXggd2l0aCB0aGUgaWRzIG9mIGVhY2ggbm9kZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRMYXllck1hdHJpeChnKSB7XG4gIHZhciBsYXllcmluZyA9IF8ubWFwKF8ucmFuZ2UobWF4UmFuayhnKSArIDEpLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB2YXIgcmFuayA9IG5vZGUucmFuaztcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocmFuaykpIHtcbiAgICAgIGxheWVyaW5nW3JhbmtdW25vZGUub3JkZXJdID0gdjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGF5ZXJpbmc7XG59XG5cbi8qXG4gKiBBZGp1c3RzIHRoZSByYW5rcyBmb3IgYWxsIG5vZGVzIGluIHRoZSBncmFwaCBzdWNoIHRoYXQgYWxsIG5vZGVzIHYgaGF2ZVxuICogcmFuayh2KSA+PSAwIGFuZCBhdCBsZWFzdCBvbmUgbm9kZSB3IGhhcyByYW5rKHcpID0gMC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFua3MoZykge1xuICB2YXIgbWluID0gXy5taW4oXG4gICAgXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIGcubm9kZSh2KS5yYW5rO1xuICAgIH0pXG4gICk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKF8uaGFzKG5vZGUsICdyYW5rJykpIHtcbiAgICAgIG5vZGUucmFuayAtPSBtaW47XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRW1wdHlSYW5rcyhnKSB7XG4gIC8vIFJhbmtzIG1heSBub3Qgc3RhcnQgYXQgMCwgc28gd2UgbmVlZCB0byBvZmZzZXQgdGhlbVxuICB2YXIgb2Zmc2V0ID0gXy5taW4oXG4gICAgXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIGcubm9kZSh2KS5yYW5rO1xuICAgIH0pXG4gICk7XG5cbiAgdmFyIGxheWVycyA9IFtdO1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciByYW5rID0gZy5ub2RlKHYpLnJhbmsgLSBvZmZzZXQ7XG4gICAgaWYgKCFsYXllcnNbcmFua10pIHtcbiAgICAgIGxheWVyc1tyYW5rXSA9IFtdO1xuICAgIH1cbiAgICBsYXllcnNbcmFua10ucHVzaCh2KTtcbiAgfSk7XG5cbiAgdmFyIGRlbHRhID0gMDtcbiAgdmFyIG5vZGVSYW5rRmFjdG9yID0gZy5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO1xuICBfLmZvckVhY2gobGF5ZXJzLCBmdW5jdGlvbiAodnMsIGkpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh2cykgJiYgaSAlIG5vZGVSYW5rRmFjdG9yICE9PSAwKSB7XG4gICAgICAtLWRlbHRhO1xuICAgIH0gZWxzZSBpZiAoZGVsdGEpIHtcbiAgICAgIF8uZm9yRWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgZy5ub2RlKHYpLnJhbmsgKz0gZGVsdGE7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcsIHByZWZpeCwgcmFuaywgb3JkZXIpIHtcbiAgdmFyIG5vZGUgPSB7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICB9O1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSB7XG4gICAgbm9kZS5yYW5rID0gcmFuaztcbiAgICBub2RlLm9yZGVyID0gb3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFkZER1bW15Tm9kZShnLCAnYm9yZGVyJywgbm9kZSwgcHJlZml4KTtcbn1cblxuZnVuY3Rpb24gbWF4UmFuayhnKSB7XG4gIHJldHVybiBfLm1heChcbiAgICBfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgcmFuayA9IGcubm9kZSh2KS5yYW5rO1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHJhbmspKSB7XG4gICAgICAgIHJldHVybiByYW5rO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG59XG5cbi8qXG4gKiBQYXJ0aXRpb24gYSBjb2xsZWN0aW9uIGludG8gdHdvIGdyb3VwczogYGxoc2AgYW5kIGByaHNgLiBJZiB0aGUgc3VwcGxpZWRcbiAqIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW50cnkgaXQgZ29lcyBpbnRvIGBsaHNgLiBPdGhlcndpc2UgaXQgZ29lc1xuICogaW50byBgcmhzLlxuICovXG5mdW5jdGlvbiBwYXJ0aXRpb24oY29sbGVjdGlvbiwgZm4pIHtcbiAgdmFyIHJlc3VsdCA9IHsgbGhzOiBbXSwgcmhzOiBbXSB9O1xuICBfLmZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKGZuKHZhbHVlKSkge1xuICAgICAgcmVzdWx0Lmxocy5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnJocy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKlxuICogUmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmbmAgd2l0aCBhIHRpbWVyLiBUaGUgd3JhcHBlciBsb2dzIHRoZVxuICogdGltZSBpdCB0YWtlcyB0byBleGVjdXRlIHRoZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGltZShuYW1lLCBmbikge1xuICB2YXIgc3RhcnQgPSBfLm5vdygpO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbnNvbGUubG9nKG5hbWUgKyAnIHRpbWU6ICcgKyAoXy5ub3coKSAtIHN0YXJ0KSArICdtcycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGltZShuYW1lLCBmbikge1xuICByZXR1cm4gZm4oKTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBhZGRCb3JkZXJTZWdtZW50cyB9O1xuXG5mdW5jdGlvbiBhZGRCb3JkZXJTZWdtZW50cyhnKSB7XG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZy5jaGlsZHJlbih2KTtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBfLmZvckVhY2goY2hpbGRyZW4sIGRmcyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaGFzKG5vZGUsICdtaW5SYW5rJykpIHtcbiAgICAgIG5vZGUuYm9yZGVyTGVmdCA9IFtdO1xuICAgICAgbm9kZS5ib3JkZXJSaWdodCA9IFtdO1xuICAgICAgZm9yICh2YXIgcmFuayA9IG5vZGUubWluUmFuaywgbWF4UmFuayA9IG5vZGUubWF4UmFuayArIDE7IHJhbmsgPCBtYXhSYW5rOyArK3JhbmspIHtcbiAgICAgICAgYWRkQm9yZGVyTm9kZShnLCAnYm9yZGVyTGVmdCcsICdfYmwnLCB2LCBub2RlLCByYW5rKTtcbiAgICAgICAgYWRkQm9yZGVyTm9kZShnLCAnYm9yZGVyUmlnaHQnLCAnX2JyJywgdiwgbm9kZSwgcmFuayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgXy5mb3JFYWNoKGcuY2hpbGRyZW4oKSwgZGZzKTtcbn1cblxuZnVuY3Rpb24gYWRkQm9yZGVyTm9kZShnLCBwcm9wLCBwcmVmaXgsIHNnLCBzZ05vZGUsIHJhbmspIHtcbiAgdmFyIGxhYmVsID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCByYW5rOiByYW5rLCBib3JkZXJUeXBlOiBwcm9wIH07XG4gIHZhciBwcmV2ID0gc2dOb2RlW3Byb3BdW3JhbmsgLSAxXTtcbiAgdmFyIGN1cnIgPSB1dGlsLmFkZER1bW15Tm9kZShnLCAnYm9yZGVyJywgbGFiZWwsIHByZWZpeCk7XG4gIHNnTm9kZVtwcm9wXVtyYW5rXSA9IGN1cnI7XG4gIGcuc2V0UGFyZW50KGN1cnIsIHNnKTtcbiAgaWYgKHByZXYpIHtcbiAgICBnLnNldEVkZ2UocHJldiwgY3VyciwgeyB3ZWlnaHQ6IDEgfSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBhZGp1c3QsIHVuZG8gfTtcblxuZnVuY3Rpb24gYWRqdXN0KGcpIHtcbiAgdmFyIHJhbmtEaXIgPSBnLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmFua0RpciA9PT0gJ2xyJyB8fCByYW5rRGlyID09PSAncmwnKSB7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuZG8oZykge1xuICB2YXIgcmFua0RpciA9IGcuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYW5rRGlyID09PSAnYnQnIHx8IHJhbmtEaXIgPT09ICdybCcpIHtcbiAgICByZXZlcnNlWShnKTtcbiAgfVxuXG4gIGlmIChyYW5rRGlyID09PSAnbHInIHx8IHJhbmtEaXIgPT09ICdybCcpIHtcbiAgICBzd2FwWFkoZyk7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN3YXBXaWR0aEhlaWdodChnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgc3dhcFdpZHRoSGVpZ2h0T25lKGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHN3YXBXaWR0aEhlaWdodE9uZShnLmVkZ2UoZSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dhcFdpZHRoSGVpZ2h0T25lKGF0dHJzKSB7XG4gIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gIGF0dHJzLndpZHRoID0gYXR0cnMuaGVpZ2h0O1xuICBhdHRycy5oZWlnaHQgPSB3O1xufVxuXG5mdW5jdGlvbiByZXZlcnNlWShnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV2ZXJzZVlPbmUoZy5ub2RlKHYpKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBfLmZvckVhY2goZWRnZS5wb2ludHMsIHJldmVyc2VZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3knKSkge1xuICAgICAgcmV2ZXJzZVlPbmUoZWRnZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVlPbmUoYXR0cnMpIHtcbiAgYXR0cnMueSA9IC1hdHRycy55O1xufVxuXG5mdW5jdGlvbiBzd2FwWFkoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHN3YXBYWU9uZShnLm5vZGUodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIF8uZm9yRWFjaChlZGdlLnBvaW50cywgc3dhcFhZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgc3dhcFhZT25lKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3YXBYWU9uZShhdHRycykge1xuICB2YXIgeCA9IGF0dHJzLng7XG4gIGF0dHJzLnggPSBhdHRycy55O1xuICBhdHRycy55ID0geDtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBydW4sIHVuZG8gfTtcblxuLypcbiAqIEJyZWFrcyBhbnkgbG9uZyBlZGdlcyBpbiB0aGUgZ3JhcGggaW50byBzaG9ydCBzZWdtZW50cyB0aGF0IHNwYW4gMSBsYXllclxuICogZWFjaC4gVGhpcyBvcGVyYXRpb24gaXMgdW5kb2FibGUgd2l0aCB0aGUgZGVub3JtYWxpemUgZnVuY3Rpb24uXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gVGhlIGlucHV0IGdyYXBoIGlzIGEgREFHLlxuICogICAgMi4gRWFjaCBub2RlIGluIHRoZSBncmFwaCBoYXMgYSBcInJhbmtcIiBwcm9wZXJ0eS5cbiAqXG4gKiBQb3N0LWNvbmRpdGlvbjpcbiAqXG4gKiAgICAxLiBBbGwgZWRnZXMgaW4gdGhlIGdyYXBoIGhhdmUgYSBsZW5ndGggb2YgMS5cbiAqICAgIDIuIER1bW15IG5vZGVzIGFyZSBhZGRlZCB3aGVyZSBlZGdlcyBoYXZlIGJlZW4gc3BsaXQgaW50byBzZWdtZW50cy5cbiAqICAgIDMuIFRoZSBncmFwaCBpcyBhdWdtZW50ZWQgd2l0aCBhIFwiZHVtbXlDaGFpbnNcIiBhdHRyaWJ1dGUgd2hpY2ggY29udGFpbnNcbiAqICAgICAgIHRoZSBmaXJzdCBkdW1teSBpbiBlYWNoIGNoYWluIG9mIGR1bW15IG5vZGVzIHByb2R1Y2VkLlxuICovXG5mdW5jdGlvbiBydW4oZykge1xuICBnLmdyYXBoKCkuZHVtbXlDaGFpbnMgPSBbXTtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICBub3JtYWxpemVFZGdlKGcsIGVkZ2UpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRWRnZShnLCBlKSB7XG4gIHZhciB2ID0gZS52O1xuICB2YXIgdlJhbmsgPSBnLm5vZGUodikucmFuaztcbiAgdmFyIHcgPSBlLnc7XG4gIHZhciB3UmFuayA9IGcubm9kZSh3KS5yYW5rO1xuICB2YXIgbmFtZSA9IGUubmFtZTtcbiAgdmFyIGVkZ2VMYWJlbCA9IGcuZWRnZShlKTtcbiAgdmFyIGxhYmVsUmFuayA9IGVkZ2VMYWJlbC5sYWJlbFJhbms7XG5cbiAgaWYgKHdSYW5rID09PSB2UmFuayArIDEpIHJldHVybjtcblxuICBnLnJlbW92ZUVkZ2UoZSk7XG5cbiAgdmFyIGR1bW15LCBhdHRycywgaTtcbiAgZm9yIChpID0gMCwgKyt2UmFuazsgdlJhbmsgPCB3UmFuazsgKytpLCArK3ZSYW5rKSB7XG4gICAgZWRnZUxhYmVsLnBvaW50cyA9IFtdO1xuICAgIGF0dHJzID0ge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBlZGdlTGFiZWw6IGVkZ2VMYWJlbCxcbiAgICAgIGVkZ2VPYmo6IGUsXG4gICAgICByYW5rOiB2UmFuayxcbiAgICB9O1xuICAgIGR1bW15ID0gdXRpbC5hZGREdW1teU5vZGUoZywgJ2VkZ2UnLCBhdHRycywgJ19kJyk7XG4gICAgaWYgKHZSYW5rID09PSBsYWJlbFJhbmspIHtcbiAgICAgIGF0dHJzLndpZHRoID0gZWRnZUxhYmVsLndpZHRoO1xuICAgICAgYXR0cnMuaGVpZ2h0ID0gZWRnZUxhYmVsLmhlaWdodDtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGF0dHJzLmR1bW15ID0gJ2VkZ2UtbGFiZWwnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgYXR0cnMubGFiZWxwb3MgPSBlZGdlTGFiZWwubGFiZWxwb3M7XG4gICAgfVxuICAgIGcuc2V0RWRnZSh2LCBkdW1teSwgeyB3ZWlnaHQ6IGVkZ2VMYWJlbC53ZWlnaHQgfSwgbmFtZSk7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGcuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGR1bW15KTtcbiAgICB9XG4gICAgdiA9IGR1bW15O1xuICB9XG5cbiAgZy5zZXRFZGdlKHYsIHcsIHsgd2VpZ2h0OiBlZGdlTGFiZWwud2VpZ2h0IH0sIG5hbWUpO1xufVxuXG5mdW5jdGlvbiB1bmRvKGcpIHtcbiAgXy5mb3JFYWNoKGcuZ3JhcGgoKS5kdW1teUNoYWlucywgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB2YXIgb3JpZ0xhYmVsID0gbm9kZS5lZGdlTGFiZWw7XG4gICAgdmFyIHc7XG4gICAgZy5zZXRFZGdlKG5vZGUuZWRnZU9iaiwgb3JpZ0xhYmVsKTtcbiAgICB3aGlsZSAobm9kZS5kdW1teSkge1xuICAgICAgdyA9IGcuc3VjY2Vzc29ycyh2KVswXTtcbiAgICAgIGcucmVtb3ZlTm9kZSh2KTtcbiAgICAgIG9yaWdMYWJlbC5wb2ludHMucHVzaCh7IHg6IG5vZGUueCwgeTogbm9kZS55IH0pO1xuICAgICAgaWYgKG5vZGUuZHVtbXkgPT09ICdlZGdlLWxhYmVsJykge1xuICAgICAgICBvcmlnTGFiZWwueCA9IG5vZGUueDtcbiAgICAgICAgb3JpZ0xhYmVsLnkgPSBub2RlLnk7XG4gICAgICAgIG9yaWdMYWJlbC53aWR0aCA9IG5vZGUud2lkdGg7XG4gICAgICAgIG9yaWdMYWJlbC5oZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICAgIH1cbiAgICAgIHYgPSB3O1xuICAgICAgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB9XG4gIH0pO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGxvbmdlc3RQYXRoLCBzbGFjayB9O1xuXG4vKlxuICogSW5pdGlhbGl6ZXMgcmFua3MgZm9yIHRoZSBpbnB1dCBncmFwaCB1c2luZyB0aGUgbG9uZ2VzdCBwYXRoIGFsZ29yaXRobS4gVGhpc1xuICogYWxnb3JpdGhtIHNjYWxlcyB3ZWxsIGFuZCBpcyBmYXN0IGluIHByYWN0aWNlLCBpdCB5aWVsZHMgcmF0aGVyIHBvb3JcbiAqIHNvbHV0aW9ucy4gTm9kZXMgYXJlIHB1c2hlZCB0byB0aGUgbG93ZXN0IGxheWVyIHBvc3NpYmxlLCBsZWF2aW5nIHRoZSBib3R0b21cbiAqIHJhbmtzIHdpZGUgYW5kIGxlYXZpbmcgZWRnZXMgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5LiBIb3dldmVyLCBkdWUgdG8gaXRzXG4gKiBzcGVlZCwgdGhpcyBhbGdvcml0aG0gaXMgZ29vZCBmb3IgZ2V0dGluZyBhbiBpbml0aWFsIHJhbmtpbmcgdGhhdCBjYW4gYmUgZmVkXG4gKiBpbnRvIG90aGVyIGFsZ29yaXRobXMuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gZG9lcyBub3Qgbm9ybWFsaXplIGxheWVycyBiZWNhdXNlIGl0IHdpbGwgYmUgdXNlZCBieSBvdGhlclxuICogYWxnb3JpdGhtcyBpbiBtb3N0IGNhc2VzLiBJZiB1c2luZyB0aGlzIGFsZ29yaXRobSBkaXJlY3RseSwgYmUgc3VyZSB0b1xuICogcnVuIG5vcm1hbGl6ZSBhdCB0aGUgZW5kLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHLlxuICogICAgMi4gSW5wdXQgZ3JhcGggbm9kZSBsYWJlbHMgY2FuIGJlIGFzc2lnbmVkIHByb3BlcnRpZXMuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEVhY2ggbm9kZSB3aWxsIGJlIGFzc2lnbiBhbiAodW5ub3JtYWxpemVkKSBcInJhbmtcIiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gbG9uZ2VzdFBhdGgoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuXG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgdmFyIGxhYmVsID0gZy5ub2RlKHYpO1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgICAgcmV0dXJuIGxhYmVsLnJhbms7XG4gICAgfVxuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuXG4gICAgdmFyIHJhbmsgPSBfLm1pbihcbiAgICAgIF8ubWFwKGcub3V0RWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBkZnMoZS53KSAtIGcuZWRnZShlKS5taW5sZW47XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICByYW5rID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtdKSBmb3IgTG9kYXNoIDNcbiAgICAgIHJhbmsgPT09IHVuZGVmaW5lZCB8fCAvLyByZXR1cm4gdmFsdWUgb2YgXy5tYXAoW10pIGZvciBMb2Rhc2ggNFxuICAgICAgcmFuayA9PT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtudWxsXSlcbiAgICAgIHJhbmsgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiAobGFiZWwucmFuayA9IHJhbmspO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcuc291cmNlcygpLCBkZnMpO1xufVxuXG4vKlxuICogUmV0dXJucyB0aGUgYW1vdW50IG9mIHNsYWNrIGZvciB0aGUgZ2l2ZW4gZWRnZS4gVGhlIHNsYWNrIGlzIGRlZmluZWQgYXMgdGhlXG4gKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxlbmd0aCBvZiB0aGUgZWRnZSBhbmQgaXRzIG1pbmltdW0gbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzbGFjayhnLCBlKSB7XG4gIHJldHVybiBnLm5vZGUoZS53KS5yYW5rIC0gZy5ub2RlKGUudikucmFuayAtIGcuZWRnZShlKS5taW5sZW47XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vLi4vZ3JhcGhsaWIvaW5kZXguanMnO1xuaW1wb3J0IHsgc2xhY2sgfSBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBmZWFzaWJsZVRyZWUgfTtcblxuLypcbiAqIENvbnN0cnVjdHMgYSBzcGFubmluZyB0cmVlIHdpdGggdGlnaHQgZWRnZXMgYW5kIGFkanVzdGVkIHRoZSBpbnB1dCBub2RlJ3NcbiAqIHJhbmtzIHRvIGFjaGlldmUgdGhpcy4gQSB0aWdodCBlZGdlIGlzIG9uZSB0aGF0IGlzIGhhcyBhIGxlbmd0aCB0aGF0IG1hdGNoZXNcbiAqIGl0cyBcIm1pbmxlblwiIGF0dHJpYnV0ZS5cbiAqXG4gKiBUaGUgYmFzaWMgc3RydWN0dXJlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBHYW5zbmVyLCBldCBhbC4sIFwiQVxuICogVGVjaG5pcXVlIGZvciBEcmF3aW5nIERpcmVjdGVkIEdyYXBocy5cIlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG11c3QgYmUgYSBEQUcuXG4gKiAgICAyLiBHcmFwaCBtdXN0IGJlIGNvbm5lY3RlZC5cbiAqICAgIDMuIEdyYXBoIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbm9kZS5cbiAqICAgIDUuIEdyYXBoIG5vZGVzIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYXNzaWduZWQgYSBcInJhbmtcIiBwcm9wZXJ0eSB0aGF0XG4gKiAgICAgICByZXNwZWN0cyB0aGUgXCJtaW5sZW5cIiBwcm9wZXJ0eSBvZiBpbmNpZGVudCBlZGdlcy5cbiAqICAgIDYuIEdyYXBoIGVkZ2VzIG11c3QgaGF2ZSBhIFwibWlubGVuXCIgcHJvcGVydHkuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIC0gR3JhcGggbm9kZXMgd2lsbCBoYXZlIHRoZWlyIHJhbmsgYWRqdXN0ZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGVkZ2VzIGFyZVxuICogICAgICB0aWdodC5cbiAqXG4gKiBSZXR1cm5zIGEgdHJlZSAodW5kaXJlY3RlZCBncmFwaCkgdGhhdCBpcyBjb25zdHJ1Y3RlZCB1c2luZyBvbmx5IFwidGlnaHRcIlxuICogZWRnZXMuXG4gKi9cbmZ1bmN0aW9uIGZlYXNpYmxlVHJlZShnKSB7XG4gIHZhciB0ID0gbmV3IEdyYXBoKHsgZGlyZWN0ZWQ6IGZhbHNlIH0pO1xuXG4gIC8vIENob29zZSBhcmJpdHJhcnkgbm9kZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IG91ciB0cmVlXG4gIHZhciBzdGFydCA9IGcubm9kZXMoKVswXTtcbiAgdmFyIHNpemUgPSBnLm5vZGVDb3VudCgpO1xuICB0LnNldE5vZGUoc3RhcnQsIHt9KTtcblxuICB2YXIgZWRnZSwgZGVsdGE7XG4gIHdoaWxlICh0aWdodFRyZWUodCwgZykgPCBzaXplKSB7XG4gICAgZWRnZSA9IGZpbmRNaW5TbGFja0VkZ2UodCwgZyk7XG4gICAgZGVsdGEgPSB0Lmhhc05vZGUoZWRnZS52KSA/IHNsYWNrKGcsIGVkZ2UpIDogLXNsYWNrKGcsIGVkZ2UpO1xuICAgIHNoaWZ0UmFua3ModCwgZywgZGVsdGEpO1xuICB9XG5cbiAgcmV0dXJuIHQ7XG59XG5cbi8qXG4gKiBGaW5kcyBhIG1heGltYWwgdHJlZSBvZiB0aWdodCBlZGdlcyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZVxuICogdHJlZS5cbiAqL1xuZnVuY3Rpb24gdGlnaHRUcmVlKHQsIGcpIHtcbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICBfLmZvckVhY2goZy5ub2RlRWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgZWRnZVYgPSBlLnYsXG4gICAgICAgIHcgPSB2ID09PSBlZGdlViA/IGUudyA6IGVkZ2VWO1xuICAgICAgaWYgKCF0Lmhhc05vZGUodykgJiYgIXNsYWNrKGcsIGUpKSB7XG4gICAgICAgIHQuc2V0Tm9kZSh3LCB7fSk7XG4gICAgICAgIHQuc2V0RWRnZSh2LCB3LCB7fSk7XG4gICAgICAgIGRmcyh3KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF8uZm9yRWFjaCh0Lm5vZGVzKCksIGRmcyk7XG4gIHJldHVybiB0Lm5vZGVDb3VudCgpO1xufVxuXG4vKlxuICogRmluZHMgdGhlIGVkZ2Ugd2l0aCB0aGUgc21hbGxlc3Qgc2xhY2sgdGhhdCBpcyBpbmNpZGVudCBvbiB0cmVlIGFuZCByZXR1cm5zXG4gKiBpdC5cbiAqL1xuZnVuY3Rpb24gZmluZE1pblNsYWNrRWRnZSh0LCBnKSB7XG4gIHJldHVybiBfLm1pbkJ5KGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAodC5oYXNOb2RlKGUudikgIT09IHQuaGFzTm9kZShlLncpKSB7XG4gICAgICByZXR1cm4gc2xhY2soZywgZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hpZnRSYW5rcyh0LCBnLCBkZWx0YSkge1xuICBfLmZvckVhY2godC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGcubm9kZSh2KS5yYW5rICs9IGRlbHRhO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgUHJpb3JpdHlRdWV1ZSB9IGZyb20gJy4uL2RhdGEvcHJpb3JpdHktcXVldWUuanMnO1xuXG5leHBvcnQgeyBkaWprc3RyYSB9O1xuXG52YXIgREVGQVVMVF9XRUlHSFRfRlVOQyA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGRpamtzdHJhKGcsIHNvdXJjZSwgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICByZXR1cm4gcnVuRGlqa3N0cmEoXG4gICAgZyxcbiAgICBTdHJpbmcoc291cmNlKSxcbiAgICB3ZWlnaHRGbiB8fCBERUZBVUxUX1dFSUdIVF9GVU5DLFxuICAgIGVkZ2VGbiB8fFxuICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGcub3V0RWRnZXModik7XG4gICAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRpamtzdHJhKGcsIHNvdXJjZSwgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICB2YXIgcmVzdWx0cyA9IHt9O1xuICB2YXIgcHEgPSBuZXcgUHJpb3JpdHlRdWV1ZSgpO1xuICB2YXIgdiwgdkVudHJ5O1xuXG4gIHZhciB1cGRhdGVOZWlnaGJvcnMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciB3ID0gZWRnZS52ICE9PSB2ID8gZWRnZS52IDogZWRnZS53O1xuICAgIHZhciB3RW50cnkgPSByZXN1bHRzW3ddO1xuICAgIHZhciB3ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICB2YXIgZGlzdGFuY2UgPSB2RW50cnkuZGlzdGFuY2UgKyB3ZWlnaHQ7XG5cbiAgICBpZiAod2VpZ2h0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiAnICtcbiAgICAgICAgICAnQmFkIGVkZ2U6ICcgK1xuICAgICAgICAgIGVkZ2UgK1xuICAgICAgICAgICcgV2VpZ2h0OiAnICtcbiAgICAgICAgICB3ZWlnaHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3RhbmNlIDwgd0VudHJ5LmRpc3RhbmNlKSB7XG4gICAgICB3RW50cnkuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgIHdFbnRyeS5wcmVkZWNlc3NvciA9IHY7XG4gICAgICBwcS5kZWNyZWFzZSh3LCBkaXN0YW5jZSk7XG4gICAgfVxuICB9O1xuXG4gIGcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGRpc3RhbmNlID0gdiA9PT0gc291cmNlID8gMCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICByZXN1bHRzW3ZdID0geyBkaXN0YW5jZTogZGlzdGFuY2UgfTtcbiAgICBwcS5hZGQodiwgZGlzdGFuY2UpO1xuICB9KTtcblxuICB3aGlsZSAocHEuc2l6ZSgpID4gMCkge1xuICAgIHYgPSBwcS5yZW1vdmVNaW4oKTtcbiAgICB2RW50cnkgPSByZXN1bHRzW3ZdO1xuICAgIGlmICh2RW50cnkuZGlzdGFuY2UgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZWRnZUZuKHYpLmZvckVhY2godXBkYXRlTmVpZ2hib3JzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBkaWprc3RyYSB9IGZyb20gJy4vZGlqa3N0cmEuanMnO1xuXG5leHBvcnQgeyBkaWprc3RyYUFsbCB9O1xuXG5mdW5jdGlvbiBkaWprc3RyYUFsbChnLCB3ZWlnaHRGdW5jLCBlZGdlRnVuYykge1xuICByZXR1cm4gXy50cmFuc2Zvcm0oXG4gICAgZy5ub2RlcygpLFxuICAgIGZ1bmN0aW9uIChhY2MsIHYpIHtcbiAgICAgIGFjY1t2XSA9IGRpamtzdHJhKGcsIHYsIHdlaWdodEZ1bmMsIGVkZ2VGdW5jKTtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHRhcmphbiB9IGZyb20gJy4vdGFyamFuLmpzJztcblxuZXhwb3J0IHsgZmluZEN5Y2xlcyB9O1xuXG5mdW5jdGlvbiBmaW5kQ3ljbGVzKGcpIHtcbiAgcmV0dXJuIF8uZmlsdGVyKHRhcmphbihnKSwgZnVuY3Rpb24gKGNtcHQpIHtcbiAgICByZXR1cm4gY21wdC5sZW5ndGggPiAxIHx8IChjbXB0Lmxlbmd0aCA9PT0gMSAmJiBnLmhhc0VkZ2UoY21wdFswXSwgY21wdFswXSkpO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBmbG95ZFdhcnNoYWxsIH07XG5cbnZhciBERUZBVUxUX1dFSUdIVF9GVU5DID0gXy5jb25zdGFudCgxKTtcblxuZnVuY3Rpb24gZmxveWRXYXJzaGFsbChnLCB3ZWlnaHRGbiwgZWRnZUZuKSB7XG4gIHJldHVybiBydW5GbG95ZFdhcnNoYWxsKFxuICAgIGcsXG4gICAgd2VpZ2h0Rm4gfHwgREVGQVVMVF9XRUlHSFRfRlVOQyxcbiAgICBlZGdlRm4gfHxcbiAgICAgIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBnLm91dEVkZ2VzKHYpO1xuICAgICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBydW5GbG95ZFdhcnNoYWxsKGcsIHdlaWdodEZuLCBlZGdlRm4pIHtcbiAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgdmFyIG5vZGVzID0gZy5ub2RlcygpO1xuXG4gIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICByZXN1bHRzW3ZdID0ge307XG4gICAgcmVzdWx0c1t2XVt2XSA9IHsgZGlzdGFuY2U6IDAgfTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uICh3KSB7XG4gICAgICBpZiAodiAhPT0gdykge1xuICAgICAgICByZXN1bHRzW3ZdW3ddID0geyBkaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgZWRnZUZuKHYpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgIHZhciB3ID0gZWRnZS52ID09PSB2ID8gZWRnZS53IDogZWRnZS52O1xuICAgICAgdmFyIGQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICAgIHJlc3VsdHNbdl1bd10gPSB7IGRpc3RhbmNlOiBkLCBwcmVkZWNlc3NvcjogdiB9O1xuICAgIH0pO1xuICB9KTtcblxuICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIHJvd0sgPSByZXN1bHRzW2tdO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgIHZhciByb3dJID0gcmVzdWx0c1tpXTtcbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGopIHtcbiAgICAgICAgdmFyIGlrID0gcm93SVtrXTtcbiAgICAgICAgdmFyIGtqID0gcm93S1tqXTtcbiAgICAgICAgdmFyIGlqID0gcm93SVtqXTtcbiAgICAgICAgdmFyIGFsdERpc3RhbmNlID0gaWsuZGlzdGFuY2UgKyBrai5kaXN0YW5jZTtcbiAgICAgICAgaWYgKGFsdERpc3RhbmNlIDwgaWouZGlzdGFuY2UpIHtcbiAgICAgICAgICBpai5kaXN0YW5jZSA9IGFsdERpc3RhbmNlO1xuICAgICAgICAgIGlqLnByZWRlY2Vzc29yID0ga2oucHJlZGVjZXNzb3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyB0b3Bzb3J0LCBDeWNsZUV4Y2VwdGlvbiB9O1xuXG50b3Bzb3J0LkN5Y2xlRXhjZXB0aW9uID0gQ3ljbGVFeGNlcHRpb247XG5cbmZ1bmN0aW9uIHRvcHNvcnQoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuICB2YXIgc3RhY2sgPSB7fTtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlKSB7XG4gICAgaWYgKF8uaGFzKHN0YWNrLCBub2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEN5Y2xlRXhjZXB0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmhhcyh2aXNpdGVkLCBub2RlKSkge1xuICAgICAgc3RhY2tbbm9kZV0gPSB0cnVlO1xuICAgICAgdmlzaXRlZFtub2RlXSA9IHRydWU7XG4gICAgICBfLmVhY2goZy5wcmVkZWNlc3NvcnMobm9kZSksIHZpc2l0KTtcbiAgICAgIGRlbGV0ZSBzdGFja1tub2RlXTtcbiAgICAgIHJlc3VsdHMucHVzaChub2RlKTtcbiAgICB9XG4gIH1cblxuICBfLmVhY2goZy5zaW5rcygpLCB2aXNpdCk7XG5cbiAgaWYgKF8uc2l6ZSh2aXNpdGVkKSAhPT0gZy5ub2RlQ291bnQoKSkge1xuICAgIHRocm93IG5ldyBDeWNsZUV4Y2VwdGlvbigpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIEN5Y2xlRXhjZXB0aW9uKCkge31cbkN5Y2xlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOyAvLyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEVycm9yIHRvIHBhc3MgdGVzdGluZ1xuIiwKICAgICJpbXBvcnQgeyB0b3Bzb3J0LCBDeWNsZUV4Y2VwdGlvbiB9IGZyb20gJy4vdG9wc29ydC5qcyc7XG5cbmV4cG9ydCB7IGlzQWN5Y2xpYyB9O1xuXG5mdW5jdGlvbiBpc0FjeWNsaWMoZykge1xuICB0cnkge1xuICAgIHRvcHNvcnQoZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEN5Y2xlRXhjZXB0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgZGZzIH07XG5cbi8qXG4gKiBBIGhlbHBlciB0aGF0IHByZWZvcm1zIGEgcHJlLSBvciBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvbiB0aGUgaW5wdXQgZ3JhcGhcbiAqIGFuZCByZXR1cm5zIHRoZSBub2RlcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHZpc2l0ZWQuIElmIHRoZSBncmFwaCBpc1xuICogdW5kaXJlY3RlZCB0aGVuIHRoaXMgYWxnb3JpdGhtIHdpbGwgbmF2aWdhdGUgdXNpbmcgbmVpZ2hib3JzLiBJZiB0aGUgZ3JhcGhcbiAqIGlzIGRpcmVjdGVkIHRoZW4gdGhpcyBhbGdvcml0aG0gd2lsbCBuYXZpZ2F0ZSB1c2luZyBzdWNjZXNzb3JzLlxuICpcbiAqIE9yZGVyIG11c3QgYmUgb25lIG9mIFwicHJlXCIgb3IgXCJwb3N0XCIuXG4gKi9cbmZ1bmN0aW9uIGRmcyhnLCB2cywgb3JkZXIpIHtcbiAgaWYgKCFfLmlzQXJyYXkodnMpKSB7XG4gICAgdnMgPSBbdnNdO1xuICB9XG5cbiAgdmFyIG5hdmlnYXRpb24gPSAoZy5pc0RpcmVjdGVkKCkgPyBnLnN1Y2Nlc3NvcnMgOiBnLm5laWdoYm9ycykuYmluZChnKTtcblxuICB2YXIgYWNjID0gW107XG4gIHZhciB2aXNpdGVkID0ge307XG4gIF8uZWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoIWcuaGFzTm9kZSh2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICcgKyB2KTtcbiAgICB9XG5cbiAgICBkb0RmcyhnLCB2LCBvcmRlciA9PT0gJ3Bvc3QnLCB2aXNpdGVkLCBuYXZpZ2F0aW9uLCBhY2MpO1xuICB9KTtcbiAgcmV0dXJuIGFjYztcbn1cblxuZnVuY3Rpb24gZG9EZnMoZywgdiwgcG9zdG9yZGVyLCB2aXNpdGVkLCBuYXZpZ2F0aW9uLCBhY2MpIHtcbiAgaWYgKCFfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuXG4gICAgaWYgKCFwb3N0b3JkZXIpIHtcbiAgICAgIGFjYy5wdXNoKHYpO1xuICAgIH1cbiAgICBfLmVhY2gobmF2aWdhdGlvbih2KSwgZnVuY3Rpb24gKHcpIHtcbiAgICAgIGRvRGZzKGcsIHcsIHBvc3RvcmRlciwgdmlzaXRlZCwgbmF2aWdhdGlvbiwgYWNjKTtcbiAgICB9KTtcbiAgICBpZiAocG9zdG9yZGVyKSB7XG4gICAgICBhY2MucHVzaCh2KTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZGZzIH0gZnJvbSAnLi9kZnMuanMnO1xuXG5leHBvcnQgeyBwb3N0b3JkZXIgfTtcblxuZnVuY3Rpb24gcG9zdG9yZGVyKGcsIHZzKSB7XG4gIHJldHVybiBkZnMoZywgdnMsICdwb3N0Jyk7XG59XG4iLAogICAgImltcG9ydCB7IGRmcyB9IGZyb20gJy4vZGZzLmpzJztcblxuZXhwb3J0IHsgcHJlb3JkZXIgfTtcblxuZnVuY3Rpb24gcHJlb3JkZXIoZywgdnMpIHtcbiAgcmV0dXJuIGRmcyhnLCB2cywgJ3ByZScpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBQcmlvcml0eVF1ZXVlIH0gZnJvbSAnLi4vZGF0YS9wcmlvcml0eS1xdWV1ZS5qcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL2dyYXBoLmpzJztcblxuZXhwb3J0IHsgcHJpbSB9O1xuXG5mdW5jdGlvbiBwcmltKGcsIHdlaWdodEZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBHcmFwaCgpO1xuICB2YXIgcGFyZW50cyA9IHt9O1xuICB2YXIgcHEgPSBuZXcgUHJpb3JpdHlRdWV1ZSgpO1xuICB2YXIgdjtcblxuICBmdW5jdGlvbiB1cGRhdGVOZWlnaGJvcnMoZWRnZSkge1xuICAgIHZhciB3ID0gZWRnZS52ID09PSB2ID8gZWRnZS53IDogZWRnZS52O1xuICAgIHZhciBwcmkgPSBwcS5wcmlvcml0eSh3KTtcbiAgICBpZiAocHJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBlZGdlV2VpZ2h0ID0gd2VpZ2h0RnVuYyhlZGdlKTtcbiAgICAgIGlmIChlZGdlV2VpZ2h0IDwgcHJpKSB7XG4gICAgICAgIHBhcmVudHNbd10gPSB2O1xuICAgICAgICBwcS5kZWNyZWFzZSh3LCBlZGdlV2VpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZy5ub2RlQ291bnQoKSA9PT0gMCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfLmVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHBxLmFkZCh2LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIHJlc3VsdC5zZXROb2RlKHYpO1xuICB9KTtcblxuICAvLyBTdGFydCBmcm9tIGFuIGFyYml0cmFyeSBub2RlXG4gIHBxLmRlY3JlYXNlKGcubm9kZXMoKVswXSwgMCk7XG5cbiAgdmFyIGluaXQgPSBmYWxzZTtcbiAgd2hpbGUgKHBxLnNpemUoKSA+IDApIHtcbiAgICB2ID0gcHEucmVtb3ZlTWluKCk7XG4gICAgaWYgKF8uaGFzKHBhcmVudHMsIHYpKSB7XG4gICAgICByZXN1bHQuc2V0RWRnZSh2LCBwYXJlbnRzW3ZdKTtcbiAgICB9IGVsc2UgaWYgKGluaXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogJyArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbml0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnLm5vZGVFZGdlcyh2KS5mb3JFYWNoKHVwZGF0ZU5laWdoYm9ycyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwKICAgICJpbXBvcnQgeyBjb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzLmpzJztcbmltcG9ydCB7IGRpamtzdHJhIH0gZnJvbSAnLi9kaWprc3RyYS5qcyc7XG5pbXBvcnQgeyBkaWprc3RyYUFsbCB9IGZyb20gJy4vZGlqa3N0cmEtYWxsLmpzJztcbmltcG9ydCB7IGZpbmRDeWNsZXMgfSBmcm9tICcuL2ZpbmQtY3ljbGVzLmpzJztcbmltcG9ydCB7IGZsb3lkV2Fyc2hhbGwgfSBmcm9tICcuL2Zsb3lkLXdhcnNoYWxsLmpzJztcbmltcG9ydCB7IGlzQWN5Y2xpYyB9IGZyb20gJy4vaXMtYWN5Y2xpYy5qcyc7XG5pbXBvcnQgeyBwb3N0b3JkZXIgfSBmcm9tICcuL3Bvc3RvcmRlci5qcyc7XG5pbXBvcnQgeyBwcmVvcmRlciB9IGZyb20gJy4vcHJlb3JkZXIuanMnO1xuaW1wb3J0IHsgcHJpbSB9IGZyb20gJy4vcHJpbS5qcyc7XG5pbXBvcnQgeyB0YXJqYW4gfSBmcm9tICcuL3Rhcmphbi5qcyc7XG5pbXBvcnQgeyB0b3Bzb3J0IH0gZnJvbSAnLi90b3Bzb3J0LmpzJztcblxuZXhwb3J0IHtcbiAgY29tcG9uZW50cyxcbiAgZGlqa3N0cmEsXG4gIGRpamtzdHJhQWxsLFxuICBmaW5kQ3ljbGVzLFxuICBmbG95ZFdhcnNoYWxsLFxuICBpc0FjeWNsaWMsXG4gIHBvc3RvcmRlcixcbiAgcHJlb3JkZXIsXG4gIHByaW0sXG4gIHRhcmphbixcbiAgdG9wc29ydCxcbn07XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIGFsZyBmcm9tICcuLi8uLi9ncmFwaGxpYi9hbGcvaW5kZXguanMnO1xuaW1wb3J0IHsgc2ltcGxpZnkgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGZlYXNpYmxlVHJlZSB9IGZyb20gJy4vZmVhc2libGUtdHJlZS5qcyc7XG5pbXBvcnQgeyBsb25nZXN0UGF0aCwgc2xhY2sgfSBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBuZXR3b3JrU2ltcGxleCB9O1xuXG4vLyBFeHBvc2Ugc29tZSBpbnRlcm5hbHMgZm9yIHRlc3RpbmcgcHVycG9zZXNcbm5ldHdvcmtTaW1wbGV4LmluaXRMb3dMaW1WYWx1ZXMgPSBpbml0TG93TGltVmFsdWVzO1xubmV0d29ya1NpbXBsZXguaW5pdEN1dFZhbHVlcyA9IGluaXRDdXRWYWx1ZXM7XG5uZXR3b3JrU2ltcGxleC5jYWxjQ3V0VmFsdWUgPSBjYWxjQ3V0VmFsdWU7XG5uZXR3b3JrU2ltcGxleC5sZWF2ZUVkZ2UgPSBsZWF2ZUVkZ2U7XG5uZXR3b3JrU2ltcGxleC5lbnRlckVkZ2UgPSBlbnRlckVkZ2U7XG5uZXR3b3JrU2ltcGxleC5leGNoYW5nZUVkZ2VzID0gZXhjaGFuZ2VFZGdlcztcblxuLypcbiAqIFRoZSBuZXR3b3JrIHNpbXBsZXggYWxnb3JpdGhtIGFzc2lnbnMgcmFua3MgdG8gZWFjaCBub2RlIGluIHRoZSBpbnB1dCBncmFwaFxuICogYW5kIGl0ZXJhdGl2ZWx5IGltcHJvdmVzIHRoZSByYW5raW5nIHRvIHJlZHVjZSB0aGUgbGVuZ3RoIG9mIGVkZ2VzLlxuICpcbiAqIFByZWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gVGhlIGlucHV0IGdyYXBoIG11c3QgYmUgYSBEQUcuXG4gKiAgICAyLiBBbGwgbm9kZXMgaW4gdGhlIGdyYXBoIG11c3QgaGF2ZSBhbiBvYmplY3QgdmFsdWUuXG4gKiAgICAzLiBBbGwgZWRnZXMgaW4gdGhlIGdyYXBoIG11c3QgaGF2ZSBcIm1pbmxlblwiIGFuZCBcIndlaWdodFwiIGF0dHJpYnV0ZXMuXG4gKlxuICogUG9zdGNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gQWxsIG5vZGVzIGluIHRoZSBncmFwaCB3aWxsIGhhdmUgYW4gYXNzaWduZWQgXCJyYW5rXCIgYXR0cmlidXRlIHRoYXQgaGFzXG4gKiAgICAgICBiZWVuIG9wdGltaXplZCBieSB0aGUgbmV0d29yayBzaW1wbGV4IGFsZ29yaXRobS4gUmFua3Mgc3RhcnQgYXQgMC5cbiAqXG4gKlxuICogQSByb3VnaCBza2V0Y2ggb2YgdGhlIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxuICpcbiAqICAgIDEuIEFzc2lnbiBpbml0aWFsIHJhbmtzIHRvIGVhY2ggbm9kZS4gV2UgdXNlIHRoZSBsb25nZXN0IHBhdGggYWxnb3JpdGhtLFxuICogICAgICAgd2hpY2ggYXNzaWducyByYW5rcyB0byB0aGUgbG93ZXN0IHBvc2l0aW9uIHBvc3NpYmxlLiBJbiBnZW5lcmFsIHRoaXNcbiAqICAgICAgIGxlYWRzIHRvIHZlcnkgd2lkZSBib3R0b20gcmFua3MgYW5kIHVubmVjZXNzYXJpbHkgbG9uZyBlZGdlcy5cbiAqICAgIDIuIENvbnN0cnVjdCBhIGZlYXNpYmxlIHRpZ2h0IHRyZWUuIEEgdGlnaHQgdHJlZSBpcyBvbmUgc3VjaCB0aGF0IGFsbFxuICogICAgICAgZWRnZXMgaW4gdGhlIHRyZWUgaGF2ZSBubyBzbGFjayAoZGlmZmVyZW5jZSBiZXR3ZWVuIGxlbmd0aCBvZiBlZGdlXG4gKiAgICAgICBhbmQgbWlubGVuIGZvciB0aGUgZWRnZSkuIFRoaXMgYnkgaXRzZWxmIGdyZWF0bHkgaW1wcm92ZXMgdGhlIGFzc2lnbmVkXG4gKiAgICAgICByYW5raW5ncyBieSBzaG9ydGluZyBlZGdlcy5cbiAqICAgIDMuIEl0ZXJhdGl2ZWx5IGZpbmQgZWRnZXMgdGhhdCBoYXZlIG5lZ2F0aXZlIGN1dCB2YWx1ZXMuIEdlbmVyYWxseSBhXG4gKiAgICAgICBuZWdhdGl2ZSBjdXQgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIGVkZ2UgY291bGQgYmUgcmVtb3ZlZCBhbmQgYSBuZXdcbiAqICAgICAgIHRyZWUgZWRnZSBjb3VsZCBiZSBhZGRlZCB0byBwcm9kdWNlIGEgbW9yZSBjb21wYWN0IGdyYXBoLlxuICpcbiAqIE11Y2ggb2YgdGhlIGFsZ29yaXRobXMgaGVyZSBhcmUgZGVyaXZlZCBmcm9tIEdhbnNuZXIsIGV0IGFsLiwgXCJBIFRlY2huaXF1ZVxuICogZm9yIERyYXdpbmcgRGlyZWN0ZWQgR3JhcGhzLlwiIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgcm91Z2hseSBmb2xsb3dzIHRoZVxuICogc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGFsZ29yaXRobS5cbiAqL1xuZnVuY3Rpb24gbmV0d29ya1NpbXBsZXgoZykge1xuICBnID0gc2ltcGxpZnkoZyk7XG4gIGxvbmdlc3RQYXRoKGcpO1xuICB2YXIgdCA9IGZlYXNpYmxlVHJlZShnKTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcblxuICB2YXIgZSwgZjtcbiAgd2hpbGUgKChlID0gbGVhdmVFZGdlKHQpKSkge1xuICAgIGYgPSBlbnRlckVkZ2UodCwgZywgZSk7XG4gICAgZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKTtcbiAgfVxufVxuXG4vKlxuICogSW5pdGlhbGl6ZXMgY3V0IHZhbHVlcyBmb3IgYWxsIGVkZ2VzIGluIHRoZSB0cmVlLlxuICovXG5mdW5jdGlvbiBpbml0Q3V0VmFsdWVzKHQsIGcpIHtcbiAgdmFyIHZzID0gYWxnLnBvc3RvcmRlcih0LCB0Lm5vZGVzKCkpO1xuICB2cyA9IHZzLnNsaWNlKDAsIHZzLmxlbmd0aCAtIDEpO1xuICBfLmZvckVhY2godnMsIGZ1bmN0aW9uICh2KSB7XG4gICAgYXNzaWduQ3V0VmFsdWUodCwgZywgdik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DdXRWYWx1ZSh0LCBnLCBjaGlsZCkge1xuICB2YXIgY2hpbGRMYWIgPSB0Lm5vZGUoY2hpbGQpO1xuICB2YXIgcGFyZW50ID0gY2hpbGRMYWIucGFyZW50O1xuICB0LmVkZ2UoY2hpbGQsIHBhcmVudCkuY3V0dmFsdWUgPSBjYWxjQ3V0VmFsdWUodCwgZywgY2hpbGQpO1xufVxuXG4vKlxuICogR2l2ZW4gdGhlIHRpZ2h0IHRyZWUsIGl0cyBncmFwaCwgYW5kIGEgY2hpbGQgaW4gdGhlIGdyYXBoIGNhbGN1bGF0ZSBhbmRcbiAqIHJldHVybiB0aGUgY3V0IHZhbHVlIGZvciB0aGUgZWRnZSBiZXR3ZWVuIHRoZSBjaGlsZCBhbmQgaXRzIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gY2FsY0N1dFZhbHVlKHQsIGcsIGNoaWxkKSB7XG4gIHZhciBjaGlsZExhYiA9IHQubm9kZShjaGlsZCk7XG4gIHZhciBwYXJlbnQgPSBjaGlsZExhYi5wYXJlbnQ7XG4gIC8vIFRydWUgaWYgdGhlIGNoaWxkIGlzIG9uIHRoZSB0YWlsIGVuZCBvZiB0aGUgZWRnZSBpbiB0aGUgZGlyZWN0ZWQgZ3JhcGhcbiAgdmFyIGNoaWxkSXNUYWlsID0gdHJ1ZTtcbiAgLy8gVGhlIGdyYXBoJ3MgdmlldyBvZiB0aGUgdHJlZSBlZGdlIHdlJ3JlIGluc3BlY3RpbmdcbiAgdmFyIGdyYXBoRWRnZSA9IGcuZWRnZShjaGlsZCwgcGFyZW50KTtcbiAgLy8gVGhlIGFjY3VtdWxhdGVkIGN1dCB2YWx1ZSBmb3IgdGhlIGVkZ2UgYmV0d2VlbiB0aGlzIG5vZGUgYW5kIGl0cyBwYXJlbnRcbiAgdmFyIGN1dFZhbHVlID0gMDtcblxuICBpZiAoIWdyYXBoRWRnZSkge1xuICAgIGNoaWxkSXNUYWlsID0gZmFsc2U7XG4gICAgZ3JhcGhFZGdlID0gZy5lZGdlKHBhcmVudCwgY2hpbGQpO1xuICB9XG5cbiAgY3V0VmFsdWUgPSBncmFwaEVkZ2Uud2VpZ2h0O1xuXG4gIF8uZm9yRWFjaChnLm5vZGVFZGdlcyhjaGlsZCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGlzT3V0RWRnZSA9IGUudiA9PT0gY2hpbGQsXG4gICAgICBvdGhlciA9IGlzT3V0RWRnZSA/IGUudyA6IGUudjtcblxuICAgIGlmIChvdGhlciAhPT0gcGFyZW50KSB7XG4gICAgICB2YXIgcG9pbnRzVG9IZWFkID0gaXNPdXRFZGdlID09PSBjaGlsZElzVGFpbCxcbiAgICAgICAgb3RoZXJXZWlnaHQgPSBnLmVkZ2UoZSkud2VpZ2h0O1xuXG4gICAgICBjdXRWYWx1ZSArPSBwb2ludHNUb0hlYWQgPyBvdGhlcldlaWdodCA6IC1vdGhlcldlaWdodDtcbiAgICAgIGlmIChpc1RyZWVFZGdlKHQsIGNoaWxkLCBvdGhlcikpIHtcbiAgICAgICAgdmFyIG90aGVyQ3V0VmFsdWUgPSB0LmVkZ2UoY2hpbGQsIG90aGVyKS5jdXR2YWx1ZTtcbiAgICAgICAgY3V0VmFsdWUgKz0gcG9pbnRzVG9IZWFkID8gLW90aGVyQ3V0VmFsdWUgOiBvdGhlckN1dFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGN1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbml0TG93TGltVmFsdWVzKHRyZWUsIHJvb3QpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgcm9vdCA9IHRyZWUubm9kZXMoKVswXTtcbiAgfVxuICBkZnNBc3NpZ25Mb3dMaW0odHJlZSwge30sIDEsIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBkZnNBc3NpZ25Mb3dMaW0odHJlZSwgdmlzaXRlZCwgbmV4dExpbSwgdiwgcGFyZW50KSB7XG4gIHZhciBsb3cgPSBuZXh0TGltO1xuICB2YXIgbGFiZWwgPSB0cmVlLm5vZGUodik7XG5cbiAgdmlzaXRlZFt2XSA9IHRydWU7XG4gIF8uZm9yRWFjaCh0cmVlLm5laWdoYm9ycyh2KSwgZnVuY3Rpb24gKHcpIHtcbiAgICBpZiAoIV8uaGFzKHZpc2l0ZWQsIHcpKSB7XG4gICAgICBuZXh0TGltID0gZGZzQXNzaWduTG93TGltKHRyZWUsIHZpc2l0ZWQsIG5leHRMaW0sIHcsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGFiZWwubG93ID0gbG93O1xuICBsYWJlbC5saW0gPSBuZXh0TGltKys7XG4gIGlmIChwYXJlbnQpIHtcbiAgICBsYWJlbC5wYXJlbnQgPSBwYXJlbnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyB3aGVuIHdlIGluY3JlbWVudGFsbHkgdXBkYXRlIGxvdyBsaW1cbiAgICBkZWxldGUgbGFiZWwucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIG5leHRMaW07XG59XG5cbmZ1bmN0aW9uIGxlYXZlRWRnZSh0cmVlKSB7XG4gIHJldHVybiBfLmZpbmQodHJlZS5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiB0cmVlLmVkZ2UoZSkuY3V0dmFsdWUgPCAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZW50ZXJFZGdlKHQsIGcsIGVkZ2UpIHtcbiAgdmFyIHYgPSBlZGdlLnY7XG4gIHZhciB3ID0gZWRnZS53O1xuXG4gIC8vIEZvciB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHdlIGFzc3VtZSB0aGF0IHYgaXMgdGhlIHRhaWwgYW5kIHcgaXMgdGhlXG4gIC8vIGhlYWQsIHNvIGlmIHdlIGRvbid0IGhhdmUgdGhpcyBlZGdlIGluIHRoZSBncmFwaCB3ZSBzaG91bGQgZmxpcCBpdCB0b1xuICAvLyBtYXRjaCB0aGUgY29ycmVjdCBvcmllbnRhdGlvbi5cbiAgaWYgKCFnLmhhc0VkZ2UodiwgdykpIHtcbiAgICB2ID0gZWRnZS53O1xuICAgIHcgPSBlZGdlLnY7XG4gIH1cblxuICB2YXIgdkxhYmVsID0gdC5ub2RlKHYpO1xuICB2YXIgd0xhYmVsID0gdC5ub2RlKHcpO1xuICB2YXIgdGFpbExhYmVsID0gdkxhYmVsO1xuICB2YXIgZmxpcCA9IGZhbHNlO1xuXG4gIC8vIElmIHRoZSByb290IGlzIGluIHRoZSB0YWlsIG9mIHRoZSBlZGdlIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBsb2dpYyB0aGF0XG4gIC8vIGNoZWNrcyBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgbm9kZXMgaW4gdGhlIGNhbmRpZGF0ZXMgZnVuY3Rpb24gYmVsb3cuXG4gIGlmICh2TGFiZWwubGltID4gd0xhYmVsLmxpbSkge1xuICAgIHRhaWxMYWJlbCA9IHdMYWJlbDtcbiAgICBmbGlwID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjYW5kaWRhdGVzID0gXy5maWx0ZXIoZy5lZGdlcygpLCBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHJldHVybiAoXG4gICAgICBmbGlwID09PSBpc0Rlc2NlbmRhbnQodCwgdC5ub2RlKGVkZ2UudiksIHRhaWxMYWJlbCkgJiZcbiAgICAgIGZsaXAgIT09IGlzRGVzY2VuZGFudCh0LCB0Lm5vZGUoZWRnZS53KSwgdGFpbExhYmVsKVxuICAgICk7XG4gIH0pO1xuXG4gIHJldHVybiBfLm1pbkJ5KGNhbmRpZGF0ZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgcmV0dXJuIHNsYWNrKGcsIGVkZ2UpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKSB7XG4gIHZhciB2ID0gZS52O1xuICB2YXIgdyA9IGUudztcbiAgdC5yZW1vdmVFZGdlKHYsIHcpO1xuICB0LnNldEVkZ2UoZi52LCBmLncsIHt9KTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcbiAgdXBkYXRlUmFua3ModCwgZyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsIGcpIHtcbiAgdmFyIHJvb3QgPSBfLmZpbmQodC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiAhZy5ub2RlKHYpLnBhcmVudDtcbiAgfSk7XG4gIHZhciB2cyA9IGFsZy5wcmVvcmRlcih0LCByb290KTtcbiAgdnMgPSB2cy5zbGljZSgxKTtcbiAgXy5mb3JFYWNoKHZzLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBwYXJlbnQgPSB0Lm5vZGUodikucGFyZW50LFxuICAgICAgZWRnZSA9IGcuZWRnZSh2LCBwYXJlbnQpLFxuICAgICAgZmxpcHBlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCFlZGdlKSB7XG4gICAgICBlZGdlID0gZy5lZGdlKHBhcmVudCwgdik7XG4gICAgICBmbGlwcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnLm5vZGUodikucmFuayA9IGcubm9kZShwYXJlbnQpLnJhbmsgKyAoZmxpcHBlZCA/IGVkZ2UubWlubGVuIDogLWVkZ2UubWlubGVuKTtcbiAgfSk7XG59XG5cbi8qXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVkZ2UgaXMgaW4gdGhlIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIGlzVHJlZUVkZ2UodHJlZSwgdSwgdikge1xuICByZXR1cm4gdHJlZS5oYXNFZGdlKHUsIHYpO1xufVxuXG4vKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyBkZXNjZW5kYW50IG9mIHRoZSByb290IG5vZGUgcGVyIHRoZVxuICogYXNzaWduZWQgbG93IGFuZCBsaW0gYXR0cmlidXRlcyBpbiB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gaXNEZXNjZW5kYW50KHRyZWUsIHZMYWJlbCwgcm9vdExhYmVsKSB7XG4gIHJldHVybiByb290TGFiZWwubG93IDw9IHZMYWJlbC5saW0gJiYgdkxhYmVsLmxpbSA8PSByb290TGFiZWwubGltO1xufVxuIiwKICAgICJpbXBvcnQgeyBmZWFzaWJsZVRyZWUgfSBmcm9tICcuL2ZlYXNpYmxlLXRyZWUuanMnO1xuaW1wb3J0IHsgbmV0d29ya1NpbXBsZXggfSBmcm9tICcuL25ldHdvcmstc2ltcGxleC5qcyc7XG5pbXBvcnQgeyBsb25nZXN0UGF0aCB9IGZyb20gJy4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHJhbmsgfTtcblxuLypcbiAqIEFzc2lnbnMgYSByYW5rIHRvIGVhY2ggbm9kZSBpbiB0aGUgaW5wdXQgZ3JhcGggdGhhdCByZXNwZWN0cyB0aGUgXCJtaW5sZW5cIlxuICogY29uc3RyYWludCBzcGVjaWZpZWQgb24gZWRnZXMgYmV0d2VlbiBub2Rlcy5cbiAqXG4gKiBUaGlzIGJhc2ljIHN0cnVjdHVyZSBpcyBkZXJpdmVkIGZyb20gR2Fuc25lciwgZXQgYWwuLCBcIkEgVGVjaG5pcXVlIGZvclxuICogRHJhd2luZyBEaXJlY3RlZCBHcmFwaHMuXCJcbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBtdXN0IGJlIGEgY29ubmVjdGVkIERBR1xuICogICAgMi4gR3JhcGggbm9kZXMgbXVzdCBiZSBvYmplY3RzXG4gKiAgICAzLiBHcmFwaCBlZGdlcyBtdXN0IGhhdmUgXCJ3ZWlnaHRcIiBhbmQgXCJtaW5sZW5cIiBhdHRyaWJ1dGVzXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG5vZGVzIHdpbGwgaGF2ZSBhIFwicmFua1wiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiB0aGVcbiAqICAgICAgIGFsZ29yaXRobS4gUmFua3MgY2FuIHN0YXJ0IGF0IGFueSBpbmRleCAoaW5jbHVkaW5nIG5lZ2F0aXZlKSwgd2UnbGxcbiAqICAgICAgIGZpeCB0aGVtIHVwIGxhdGVyLlxuICovXG5mdW5jdGlvbiByYW5rKGcpIHtcbiAgc3dpdGNoIChnLmdyYXBoKCkucmFua2VyKSB7XG4gICAgY2FzZSAnbmV0d29yay1zaW1wbGV4JzpcbiAgICAgIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGlnaHQtdHJlZSc6XG4gICAgICB0aWdodFRyZWVSYW5rZXIoZyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsb25nZXN0LXBhdGgnOlxuICAgICAgbG9uZ2VzdFBhdGhSYW5rZXIoZyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbmV0d29ya1NpbXBsZXhSYW5rZXIoZyk7XG4gIH1cbn1cblxuLy8gQSBmYXN0IGFuZCBzaW1wbGUgcmFua2VyLCBidXQgcmVzdWx0cyBhcmUgZmFyIGZyb20gb3B0aW1hbC5cbnZhciBsb25nZXN0UGF0aFJhbmtlciA9IGxvbmdlc3RQYXRoO1xuXG5mdW5jdGlvbiB0aWdodFRyZWVSYW5rZXIoZykge1xuICBsb25nZXN0UGF0aChnKTtcbiAgZmVhc2libGVUcmVlKGcpO1xufVxuXG5mdW5jdGlvbiBuZXR3b3JrU2ltcGxleFJhbmtlcihnKSB7XG4gIG5ldHdvcmtTaW1wbGV4KGcpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHJ1biwgY2xlYW51cCB9O1xuXG4vKlxuICogQSBuZXN0aW5nIGdyYXBoIGNyZWF0ZXMgZHVtbXkgbm9kZXMgZm9yIHRoZSB0b3BzIGFuZCBib3R0b21zIG9mIHN1YmdyYXBocyxcbiAqIGFkZHMgYXBwcm9wcmlhdGUgZWRnZXMgdG8gZW5zdXJlIHRoYXQgYWxsIGNsdXN0ZXIgbm9kZXMgYXJlIHBsYWNlZCBiZXR3ZWVuXG4gKiB0aGVzZSBib3VuZHJpZXMsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIGdyYXBoIGlzIGNvbm5lY3RlZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB3ZSBlbnN1cmUsIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgbWlubGVuIHByb3BlcnR5LCB0aGF0IG5vZGVzXG4gKiBhbmQgc3ViZ3JhcGggYm9yZGVyIG5vZGVzIHRvIG5vdCBlbmQgdXAgb24gdGhlIHNhbWUgcmFuay5cbiAqXG4gKiBQcmVjb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHXG4gKiAgICAyLiBOb2RlcyBpbiB0aGUgaW5wdXQgZ3JhcGggaGFzIGEgbWlubGVuIGF0dHJpYnV0ZVxuICpcbiAqIFBvc3Rjb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGNvbm5lY3RlZC5cbiAqICAgIDIuIER1bW15IG5vZGVzIGFyZSBhZGRlZCBmb3IgdGhlIHRvcHMgYW5kIGJvdHRvbXMgb2Ygc3ViZ3JhcGhzLlxuICogICAgMy4gVGhlIG1pbmxlbiBhdHRyaWJ1dGUgZm9yIG5vZGVzIGlzIGFkanVzdGVkIHRvIGVuc3VyZSBub2RlcyBkbyBub3RcbiAqICAgICAgIGdldCBwbGFjZWQgb24gdGhlIHNhbWUgcmFuayBhcyBzdWJncmFwaCBib3JkZXIgbm9kZXMuXG4gKlxuICogVGhlIG5lc3RpbmcgZ3JhcGggaWRlYSBjb21lcyBmcm9tIFNhbmRlciwgXCJMYXlvdXQgb2YgQ29tcG91bmQgRGlyZWN0ZWRcbiAqIEdyYXBocy5cIlxuICovXG5mdW5jdGlvbiBydW4oZykge1xuICB2YXIgcm9vdCA9IHV0aWwuYWRkRHVtbXlOb2RlKGcsICdyb290Jywge30sICdfcm9vdCcpO1xuICB2YXIgZGVwdGhzID0gdHJlZURlcHRocyhnKTtcbiAgdmFyIGhlaWdodCA9IF8ubWF4KF8udmFsdWVzKGRlcHRocykpIC0gMTsgLy8gTm90ZTogZGVwdGhzIGlzIGFuIE9iamVjdCBub3QgYW4gYXJyYXlcbiAgdmFyIG5vZGVTZXAgPSAyICogaGVpZ2h0ICsgMTtcblxuICBnLmdyYXBoKCkubmVzdGluZ1Jvb3QgPSByb290O1xuXG4gIC8vIE11bHRpcGx5IG1pbmxlbiBieSBub2RlU2VwIHRvIGFsaWduIG5vZGVzIG9uIG5vbi1ib3JkZXIgcmFua3MuXG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgZy5lZGdlKGUpLm1pbmxlbiAqPSBub2RlU2VwO1xuICB9KTtcblxuICAvLyBDYWxjdWxhdGUgYSB3ZWlnaHQgdGhhdCBpcyBzdWZmaWNpZW50IHRvIGtlZXAgc3ViZ3JhcGhzIHZlcnRpY2FsbHkgY29tcGFjdFxuICB2YXIgd2VpZ2h0ID0gc3VtV2VpZ2h0cyhnKSArIDE7XG5cbiAgLy8gQ3JlYXRlIGJvcmRlciBub2RlcyBhbmQgbGluayB0aGVtIHVwXG4gIF8uZm9yRWFjaChnLmNoaWxkcmVuKCksIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGRmcyhnLCByb290LCBub2RlU2VwLCB3ZWlnaHQsIGhlaWdodCwgZGVwdGhzLCBjaGlsZCk7XG4gIH0pO1xuXG4gIC8vIFNhdmUgdGhlIG11bHRpcGxpZXIgZm9yIG5vZGUgbGF5ZXJzIGZvciBsYXRlciByZW1vdmFsIG9mIGVtcHR5IGJvcmRlclxuICAvLyBsYXllcnMuXG4gIGcuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvciA9IG5vZGVTZXA7XG59XG5cbmZ1bmN0aW9uIGRmcyhnLCByb290LCBub2RlU2VwLCB3ZWlnaHQsIGhlaWdodCwgZGVwdGhzLCB2KSB7XG4gIHZhciBjaGlsZHJlbiA9IGcuY2hpbGRyZW4odik7XG4gIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgaWYgKHYgIT09IHJvb3QpIHtcbiAgICAgIGcuc2V0RWRnZShyb290LCB2LCB7IHdlaWdodDogMCwgbWlubGVuOiBub2RlU2VwIH0pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9wID0gdXRpbC5hZGRCb3JkZXJOb2RlKGcsICdfYnQnKTtcbiAgdmFyIGJvdHRvbSA9IHV0aWwuYWRkQm9yZGVyTm9kZShnLCAnX2JiJyk7XG4gIHZhciBsYWJlbCA9IGcubm9kZSh2KTtcblxuICBnLnNldFBhcmVudCh0b3AsIHYpO1xuICBsYWJlbC5ib3JkZXJUb3AgPSB0b3A7XG4gIGcuc2V0UGFyZW50KGJvdHRvbSwgdik7XG4gIGxhYmVsLmJvcmRlckJvdHRvbSA9IGJvdHRvbTtcblxuICBfLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGRmcyhnLCByb290LCBub2RlU2VwLCB3ZWlnaHQsIGhlaWdodCwgZGVwdGhzLCBjaGlsZCk7XG5cbiAgICB2YXIgY2hpbGROb2RlID0gZy5ub2RlKGNoaWxkKTtcbiAgICB2YXIgY2hpbGRUb3AgPSBjaGlsZE5vZGUuYm9yZGVyVG9wID8gY2hpbGROb2RlLmJvcmRlclRvcCA6IGNoaWxkO1xuICAgIHZhciBjaGlsZEJvdHRvbSA9IGNoaWxkTm9kZS5ib3JkZXJCb3R0b20gPyBjaGlsZE5vZGUuYm9yZGVyQm90dG9tIDogY2hpbGQ7XG4gICAgdmFyIHRoaXNXZWlnaHQgPSBjaGlsZE5vZGUuYm9yZGVyVG9wID8gd2VpZ2h0IDogMiAqIHdlaWdodDtcbiAgICB2YXIgbWlubGVuID0gY2hpbGRUb3AgIT09IGNoaWxkQm90dG9tID8gMSA6IGhlaWdodCAtIGRlcHRoc1t2XSArIDE7XG5cbiAgICBnLnNldEVkZ2UodG9wLCBjaGlsZFRvcCwge1xuICAgICAgd2VpZ2h0OiB0aGlzV2VpZ2h0LFxuICAgICAgbWlubGVuOiBtaW5sZW4sXG4gICAgICBuZXN0aW5nRWRnZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGcuc2V0RWRnZShjaGlsZEJvdHRvbSwgYm90dG9tLCB7XG4gICAgICB3ZWlnaHQ6IHRoaXNXZWlnaHQsXG4gICAgICBtaW5sZW46IG1pbmxlbixcbiAgICAgIG5lc3RpbmdFZGdlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpZiAoIWcucGFyZW50KHYpKSB7XG4gICAgZy5zZXRFZGdlKHJvb3QsIHRvcCwgeyB3ZWlnaHQ6IDAsIG1pbmxlbjogaGVpZ2h0ICsgZGVwdGhzW3ZdIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyZWVEZXB0aHMoZykge1xuICB2YXIgZGVwdGhzID0ge307XG4gIGZ1bmN0aW9uIGRmcyh2LCBkZXB0aCkge1xuICAgIHZhciBjaGlsZHJlbiA9IGcuY2hpbGRyZW4odik7XG4gICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgXy5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgZGZzKGNoaWxkLCBkZXB0aCArIDEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGRlcHRoc1t2XSA9IGRlcHRoO1xuICB9XG4gIF8uZm9yRWFjaChnLmNoaWxkcmVuKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgZGZzKHYsIDEpO1xuICB9KTtcbiAgcmV0dXJuIGRlcHRocztcbn1cblxuZnVuY3Rpb24gc3VtV2VpZ2h0cyhnKSB7XG4gIHJldHVybiBfLnJlZHVjZShcbiAgICBnLmVkZ2VzKCksXG4gICAgZnVuY3Rpb24gKGFjYywgZSkge1xuICAgICAgcmV0dXJuIGFjYyArIGcuZWRnZShlKS53ZWlnaHQ7XG4gICAgfSxcbiAgICAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNsZWFudXAoZykge1xuICB2YXIgZ3JhcGhMYWJlbCA9IGcuZ3JhcGgoKTtcbiAgZy5yZW1vdmVOb2RlKGdyYXBoTGFiZWwubmVzdGluZ1Jvb3QpO1xuICBkZWxldGUgZ3JhcGhMYWJlbC5uZXN0aW5nUm9vdDtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBpZiAoZWRnZS5uZXN0aW5nRWRnZSkge1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuICAgIH1cbiAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgYWRkU3ViZ3JhcGhDb25zdHJhaW50cyB9O1xuXG5mdW5jdGlvbiBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGcsIGNnLCB2cykge1xuICB2YXIgcHJldiA9IHt9LFxuICAgIHJvb3RQcmV2O1xuXG4gIF8uZm9yRWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgY2hpbGQgPSBnLnBhcmVudCh2KSxcbiAgICAgIHBhcmVudCxcbiAgICAgIHByZXZDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIHBhcmVudCA9IGcucGFyZW50KGNoaWxkKTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcHJldkNoaWxkID0gcHJldltwYXJlbnRdO1xuICAgICAgICBwcmV2W3BhcmVudF0gPSBjaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZDaGlsZCA9IHJvb3RQcmV2O1xuICAgICAgICByb290UHJldiA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZDaGlsZCAmJiBwcmV2Q2hpbGQgIT09IGNoaWxkKSB7XG4gICAgICAgIGNnLnNldEVkZ2UocHJldkNoaWxkLCBjaGlsZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNoaWxkID0gcGFyZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgLypcbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2ID8gZy5jaGlsZHJlbih2KSA6IGcuY2hpbGRyZW4oKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgIHN1YmdyYXBocyA9IFtdO1xuICAgICAgXy5lYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICB2YXIgY2hpbGRNaW4gPSBkZnMoY2hpbGQpO1xuICAgICAgICBpZiAoZy5jaGlsZHJlbihjaGlsZCkubGVuZ3RoKSB7XG4gICAgICAgICAgc3ViZ3JhcGhzLnB1c2goeyB2OiBjaGlsZCwgb3JkZXI6IGNoaWxkTWluIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgY2hpbGRNaW4pO1xuICAgICAgfSk7XG4gICAgICBfLnJlZHVjZShfLnNvcnRCeShzdWJncmFwaHMsIFwib3JkZXJcIiksIGZ1bmN0aW9uKHByZXYsIGN1cnIpIHtcbiAgICAgICAgY2cuc2V0RWRnZShwcmV2LnYsIGN1cnIudik7XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gZy5ub2RlKHYpLm9yZGVyO1xuICB9XG4gIGRmcyh1bmRlZmluZWQpO1xuICAqL1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcblxuZXhwb3J0IHsgYnVpbGRMYXllckdyYXBoIH07XG5cbi8qXG4gKiBDb25zdHJ1Y3RzIGEgZ3JhcGggdGhhdCBjYW4gYmUgdXNlZCB0byBzb3J0IGEgbGF5ZXIgb2Ygbm9kZXMuIFRoZSBncmFwaCB3aWxsXG4gKiBjb250YWluIGFsbCBiYXNlIGFuZCBzdWJncmFwaCBub2RlcyBmcm9tIHRoZSByZXF1ZXN0IGxheWVyIGluIHRoZWlyIG9yaWdpbmFsXG4gKiBoaWVyYXJjaHkgYW5kIGFueSBlZGdlcyB0aGF0IGFyZSBpbmNpZGVudCBvbiB0aGVzZSBub2RlcyBhbmQgYXJlIG9mIHRoZSB0eXBlXG4gKiByZXF1ZXN0ZWQgYnkgdGhlIFwicmVsYXRpb25zaGlwXCIgcGFyYW1ldGVyLlxuICpcbiAqIE5vZGVzIGZyb20gdGhlIHJlcXVlc3RlZCByYW5rIHRoYXQgZG8gbm90IGhhdmUgcGFyZW50cyBhcmUgYXNzaWduZWQgYSByb290XG4gKiBub2RlIGluIHRoZSBvdXRwdXQgZ3JhcGgsIHdoaWNoIGlzIHNldCBpbiB0aGUgcm9vdCBncmFwaCBhdHRyaWJ1dGUuIFRoaXNcbiAqIG1ha2VzIGl0IGVhc3kgdG8gd2FsayB0aGUgaGllcmFyY2h5IG9mIG1vdmFibGUgbm9kZXMgZHVyaW5nIG9yZGVyaW5nLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHXG4gKiAgICAyLiBCYXNlIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXZlIGEgcmFuayBhdHRyaWJ1dGVcbiAqICAgIDMuIFN1YmdyYXBoIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXMgbWluUmFuayBhbmQgbWF4UmFuayBhdHRyaWJ1dGVzXG4gKiAgICA0LiBFZGdlcyBoYXZlIGFuIGFzc2lnbmVkIHdlaWdodFxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBPdXRwdXQgZ3JhcGggaGFzIGFsbCBub2RlcyBpbiB0aGUgbW92YWJsZSByYW5rIHdpdGggcHJlc2VydmVkXG4gKiAgICAgICBoaWVyYXJjaHkuXG4gKiAgICAyLiBSb290IG5vZGVzIGluIHRoZSBtb3ZhYmxlIGxheWVyIGFyZSBtYWRlIGNoaWxkcmVuIG9mIHRoZSBub2RlXG4gKiAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJvb3QgYXR0cmlidXRlIG9mIHRoZSBncmFwaC5cbiAqICAgIDMuIE5vbi1tb3ZhYmxlIG5vZGVzIGluY2lkZW50IG9uIG1vdmFibGUgbm9kZXMsIHNlbGVjdGVkIGJ5IHRoZVxuICogICAgICAgcmVsYXRpb25zaGlwIHBhcmFtZXRlciwgYXJlIGluY2x1ZGVkIGluIHRoZSBncmFwaCAod2l0aG91dCBoaWVyYXJjaHkpLlxuICogICAgNC4gRWRnZXMgaW5jaWRlbnQgb24gbW92YWJsZSBub2Rlcywgc2VsZWN0ZWQgYnkgdGhlIHJlbGF0aW9uc2hpcFxuICogICAgICAgcGFyYW1ldGVyLCBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dCBncmFwaC5cbiAqICAgIDUuIFRoZSB3ZWlnaHRzIGZvciBjb3BpZWQgZWRnZXMgYXJlIGFnZ3JlZ2F0ZWQgYXMgbmVlZCwgc2luY2UgdGhlIG91dHB1dFxuICogICAgICAgZ3JhcGggaXMgbm90IGEgbXVsdGktZ3JhcGguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaChnLCByYW5rLCByZWxhdGlvbnNoaXApIHtcbiAgdmFyIHJvb3QgPSBjcmVhdGVSb290Tm9kZShnKSxcbiAgICByZXN1bHQgPSBuZXcgR3JhcGgoeyBjb21wb3VuZDogdHJ1ZSB9KVxuICAgICAgLnNldEdyYXBoKHsgcm9vdDogcm9vdCB9KVxuICAgICAgLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGcubm9kZSh2KTtcbiAgICAgIH0pO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodiksXG4gICAgICBwYXJlbnQgPSBnLnBhcmVudCh2KTtcblxuICAgIGlmIChub2RlLnJhbmsgPT09IHJhbmsgfHwgKG5vZGUubWluUmFuayA8PSByYW5rICYmIHJhbmsgPD0gbm9kZS5tYXhSYW5rKSkge1xuICAgICAgcmVzdWx0LnNldE5vZGUodik7XG4gICAgICByZXN1bHQuc2V0UGFyZW50KHYsIHBhcmVudCB8fCByb290KTtcblxuICAgICAgLy8gVGhpcyBhc3N1bWVzIHdlIGhhdmUgb25seSBzaG9ydCBlZGdlcyFcbiAgICAgIF8uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciB1ID0gZS52ID09PSB2ID8gZS53IDogZS52LFxuICAgICAgICAgIGVkZ2UgPSByZXN1bHQuZWRnZSh1LCB2KSxcbiAgICAgICAgICB3ZWlnaHQgPSAhXy5pc1VuZGVmaW5lZChlZGdlKSA/IGVkZ2Uud2VpZ2h0IDogMDtcbiAgICAgICAgcmVzdWx0LnNldEVkZ2UodSwgdiwgeyB3ZWlnaHQ6IGcuZWRnZShlKS53ZWlnaHQgKyB3ZWlnaHQgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF8uaGFzKG5vZGUsICdtaW5SYW5rJykpIHtcbiAgICAgICAgcmVzdWx0LnNldE5vZGUodiwge1xuICAgICAgICAgIGJvcmRlckxlZnQ6IG5vZGUuYm9yZGVyTGVmdFtyYW5rXSxcbiAgICAgICAgICBib3JkZXJSaWdodDogbm9kZS5ib3JkZXJSaWdodFtyYW5rXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSb290Tm9kZShnKSB7XG4gIHZhciB2O1xuICB3aGlsZSAoZy5oYXNOb2RlKCh2ID0gXy51bmlxdWVJZCgnX3Jvb3QnKSkpKTtcbiAgcmV0dXJuIHY7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgY3Jvc3NDb3VudCB9O1xuXG4vKlxuICogQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgbGF5ZXJpbmcgKGFuIGFycmF5IG9mIGxheWVycywgZWFjaCB3aXRoIGFuIGFycmF5IG9mXG4gKiBvcmRlcmVyZCBub2RlcykgYW5kIGEgZ3JhcGggYW5kIHJldHVybnMgYSB3ZWlnaHRlZCBjcm9zc2luZyBjb3VudC5cbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBtdXN0IGJlIHNpbXBsZSAobm90IGEgbXVsdGlncmFwaCksIGRpcmVjdGVkLCBhbmQgaW5jbHVkZVxuICogICAgICAgb25seSBzaW1wbGUgZWRnZXMuXG4gKiAgICAyLiBFZGdlcyBpbiB0aGUgaW5wdXQgZ3JhcGggbXVzdCBoYXZlIGFzc2lnbmVkIHdlaWdodHMuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIFRoZSBncmFwaCBhbmQgbGF5ZXJpbmcgbWF0cml4IGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqXG4gKiBUaGlzIGFsZ29yaXRobSBpcyBkZXJpdmVkIGZyb20gQmFydGgsIGV0IGFsLiwgXCJCaWxheWVyIENyb3NzIENvdW50aW5nLlwiXG4gKi9cbmZ1bmN0aW9uIGNyb3NzQ291bnQoZywgbGF5ZXJpbmcpIHtcbiAgdmFyIGNjID0gMDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsYXllcmluZy5sZW5ndGg7ICsraSkge1xuICAgIGNjICs9IHR3b0xheWVyQ3Jvc3NDb3VudChnLCBsYXllcmluZ1tpIC0gMV0sIGxheWVyaW5nW2ldKTtcbiAgfVxuICByZXR1cm4gY2M7XG59XG5cbmZ1bmN0aW9uIHR3b0xheWVyQ3Jvc3NDb3VudChnLCBub3J0aExheWVyLCBzb3V0aExheWVyKSB7XG4gIC8vIFNvcnQgYWxsIG9mIHRoZSBlZGdlcyBiZXR3ZWVuIHRoZSBub3J0aCBhbmQgc291dGggbGF5ZXJzIGJ5IHRoZWlyIHBvc2l0aW9uXG4gIC8vIGluIHRoZSBub3J0aCBsYXllciBhbmQgdGhlbiB0aGUgc291dGguIE1hcCB0aGVzZSBlZGdlcyB0byB0aGUgcG9zaXRpb24gb2ZcbiAgLy8gdGhlaXIgaGVhZCBpbiB0aGUgc291dGggbGF5ZXIuXG4gIHZhciBzb3V0aFBvcyA9IF8uemlwT2JqZWN0KFxuICAgIHNvdXRoTGF5ZXIsXG4gICAgXy5tYXAoc291dGhMYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH0pXG4gICk7XG4gIHZhciBzb3V0aEVudHJpZXMgPSBfLmZsYXR0ZW4oXG4gICAgXy5tYXAobm9ydGhMYXllciwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBfLnNvcnRCeShcbiAgICAgICAgXy5tYXAoZy5vdXRFZGdlcyh2KSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXR1cm4geyBwb3M6IHNvdXRoUG9zW2Uud10sIHdlaWdodDogZy5lZGdlKGUpLndlaWdodCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgJ3BvcydcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICAvLyBCdWlsZCB0aGUgYWNjdW11bGF0b3IgdHJlZVxuICB2YXIgZmlyc3RJbmRleCA9IDE7XG4gIHdoaWxlIChmaXJzdEluZGV4IDwgc291dGhMYXllci5sZW5ndGgpIGZpcnN0SW5kZXggPDw9IDE7XG4gIHZhciB0cmVlU2l6ZSA9IDIgKiBmaXJzdEluZGV4IC0gMTtcbiAgZmlyc3RJbmRleCAtPSAxO1xuICB2YXIgdHJlZSA9IF8ubWFwKG5ldyBBcnJheSh0cmVlU2l6ZSksIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSB3ZWlnaHRlZCBjcm9zc2luZ3NcbiAgdmFyIGNjID0gMDtcbiAgXy5mb3JFYWNoKFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBzb3V0aEVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIHZhciBpbmRleCA9IGVudHJ5LnBvcyArIGZpcnN0SW5kZXg7XG4gICAgICB0cmVlW2luZGV4XSArPSBlbnRyeS53ZWlnaHQ7XG4gICAgICB2YXIgd2VpZ2h0U3VtID0gMDtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHdoaWxlIChpbmRleCA+IDApIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoaW5kZXggJSAyKSB7XG4gICAgICAgICAgd2VpZ2h0U3VtICs9IHRyZWVbaW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGluZGV4ID0gKGluZGV4IC0gMSkgPj4gMTtcbiAgICAgICAgdHJlZVtpbmRleF0gKz0gZW50cnkud2VpZ2h0O1xuICAgICAgfVxuICAgICAgY2MgKz0gZW50cnkud2VpZ2h0ICogd2VpZ2h0U3VtO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGNjO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGluaXRPcmRlciB9O1xuXG4vKlxuICogQXNzaWducyBhbiBpbml0aWFsIG9yZGVyIHZhbHVlIGZvciBlYWNoIG5vZGUgYnkgcGVyZm9ybWluZyBhIERGUyBzZWFyY2hcbiAqIHN0YXJ0aW5nIGZyb20gbm9kZXMgaW4gdGhlIGZpcnN0IHJhbmsuIE5vZGVzIGFyZSBhc3NpZ25lZCBhbiBvcmRlciBpbiB0aGVpclxuICogcmFuayBhcyB0aGV5IGFyZSBmaXJzdCB2aXNpdGVkLlxuICpcbiAqIFRoaXMgYXBwcm9hY2ggY29tZXMgZnJvbSBHYW5zbmVyLCBldCBhbC4sIFwiQSBUZWNobmlxdWUgZm9yIERyYXdpbmcgRGlyZWN0ZWRcbiAqIEdyYXBocy5cIlxuICpcbiAqIFJldHVybnMgYSBsYXllcmluZyBtYXRyaXggd2l0aCBhbiBhcnJheSBwZXIgbGF5ZXIgYW5kIGVhY2ggbGF5ZXIgc29ydGVkIGJ5XG4gKiB0aGUgb3JkZXIgb2YgaXRzIG5vZGVzLlxuICovXG5mdW5jdGlvbiBpbml0T3JkZXIoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuICB2YXIgc2ltcGxlTm9kZXMgPSBfLmZpbHRlcihnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuICFnLmNoaWxkcmVuKHYpLmxlbmd0aDtcbiAgfSk7XG4gIHZhciBtYXhSYW5rID0gXy5tYXgoXG4gICAgXy5tYXAoc2ltcGxlTm9kZXMsIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gZy5ub2RlKHYpLnJhbms7XG4gICAgfSlcbiAgKTtcbiAgdmFyIGxheWVycyA9IF8ubWFwKF8ucmFuZ2UobWF4UmFuayArIDEpLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkgcmV0dXJuO1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGxheWVyc1tub2RlLnJhbmtdLnB1c2godik7XG4gICAgXy5mb3JFYWNoKGcuc3VjY2Vzc29ycyh2KSwgZGZzKTtcbiAgfVxuXG4gIHZhciBvcmRlcmVkVnMgPSBfLnNvcnRCeShzaW1wbGVOb2RlcywgZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gZy5ub2RlKHYpLnJhbms7XG4gIH0pO1xuICBfLmZvckVhY2gob3JkZXJlZFZzLCBkZnMpO1xuXG4gIHJldHVybiBsYXllcnM7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgYmFyeWNlbnRlciB9O1xuXG5mdW5jdGlvbiBiYXJ5Y2VudGVyKGcsIG1vdmFibGUpIHtcbiAgcmV0dXJuIF8ubWFwKG1vdmFibGUsIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGluViA9IGcuaW5FZGdlcyh2KTtcbiAgICBpZiAoIWluVi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IHY6IHYgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IF8ucmVkdWNlKFxuICAgICAgICBpblYsXG4gICAgICAgIGZ1bmN0aW9uIChhY2MsIGUpIHtcbiAgICAgICAgICB2YXIgZWRnZSA9IGcuZWRnZShlKSxcbiAgICAgICAgICAgIG5vZGVVID0gZy5ub2RlKGUudik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1bTogYWNjLnN1bSArIGVkZ2Uud2VpZ2h0ICogbm9kZVUub3JkZXIsXG4gICAgICAgICAgICB3ZWlnaHQ6IGFjYy53ZWlnaHQgKyBlZGdlLndlaWdodCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7IHN1bTogMCwgd2VpZ2h0OiAwIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHY6IHYsXG4gICAgICAgIGJhcnljZW50ZXI6IHJlc3VsdC5zdW0gLyByZXN1bHQud2VpZ2h0LFxuICAgICAgICB3ZWlnaHQ6IHJlc3VsdC53ZWlnaHQsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgcmVzb2x2ZUNvbmZsaWN0cyB9O1xuXG4vKlxuICogR2l2ZW4gYSBsaXN0IG9mIGVudHJpZXMgb2YgdGhlIGZvcm0ge3YsIGJhcnljZW50ZXIsIHdlaWdodH0gYW5kIGFcbiAqIGNvbnN0cmFpbnQgZ3JhcGggdGhpcyBmdW5jdGlvbiB3aWxsIHJlc29sdmUgYW55IGNvbmZsaWN0cyBiZXR3ZWVuIHRoZVxuICogY29uc3RyYWludCBncmFwaCBhbmQgdGhlIGJhcnljZW50ZXJzIGZvciB0aGUgZW50cmllcy4gSWYgdGhlIGJhcnljZW50ZXJzIGZvclxuICogYW4gZW50cnkgd291bGQgdmlvbGF0ZSBhIGNvbnN0cmFpbnQgaW4gdGhlIGNvbnN0cmFpbnQgZ3JhcGggdGhlbiB3ZSBjb2FsZXNjZVxuICogdGhlIG5vZGVzIGluIHRoZSBjb25mbGljdCBpbnRvIGEgbmV3IG5vZGUgdGhhdCByZXNwZWN0cyB0aGUgY29udHJhaW50IGFuZFxuICogYWdncmVnYXRlcyBiYXJ5Y2VudGVyIGFuZCB3ZWlnaHQgaW5mb3JtYXRpb24uXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gaW4gRm9yc3RlciwgXCJBIEZhc3QgYW5kXG4gKiBTaW1wbGUgSHVlcmlzdGljIGZvciBDb25zdHJhaW5lZCBUd28tTGV2ZWwgQ3Jvc3NpbmcgUmVkdWN0aW9uLFwiIHRob3VnaHQgaXRcbiAqIGRpZmZlcnMgaW4gc29tZSBzcGVjaWZpYyBkZXRhaWxzLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEVhY2ggZW50cnkgaGFzIHRoZSBmb3JtIHt2LCBiYXJ5Y2VudGVyLCB3ZWlnaHR9LCBvciBpZiB0aGUgbm9kZSBoYXNcbiAqICAgICAgIG5vIGJhcnljZW50ZXIsIHRoZW4ge3Z9LlxuICpcbiAqIFJldHVybnM6XG4gKlxuICogICAgQSBuZXcgbGlzdCBvZiBlbnRyaWVzIG9mIHRoZSBmb3JtIHt2cywgaSwgYmFyeWNlbnRlciwgd2VpZ2h0fS4gVGhlIGxpc3RcbiAqICAgIGB2c2AgbWF5IGVpdGhlciBiZSBhIHNpbmdsZXRvbiBvciBpdCBtYXkgYmUgYW4gYWdncmVnYXRpb24gb2Ygbm9kZXNcbiAqICAgIG9yZGVyZWQgc3VjaCB0aGF0IHRoZXkgZG8gbm90IHZpb2xhdGUgY29uc3RyYWludHMgZnJvbSB0aGUgY29uc3RyYWludFxuICogICAgZ3JhcGguIFRoZSBwcm9wZXJ0eSBgaWAgaXMgdGhlIGxvd2VzdCBvcmlnaW5hbCBpbmRleCBvZiBhbnkgb2YgdGhlXG4gKiAgICBlbGVtZW50cyBpbiBgdnNgLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGVudHJpZXMsIGNnKSB7XG4gIHZhciBtYXBwZWRFbnRyaWVzID0ge307XG4gIF8uZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnksIGkpIHtcbiAgICB2YXIgdG1wID0gKG1hcHBlZEVudHJpZXNbZW50cnkudl0gPSB7XG4gICAgICBpbmRlZ3JlZTogMCxcbiAgICAgIGluOiBbXSxcbiAgICAgIG91dDogW10sXG4gICAgICB2czogW2VudHJ5LnZdLFxuICAgICAgaTogaSxcbiAgICB9KTtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoZW50cnkuYmFyeWNlbnRlcikpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHRtcC5iYXJ5Y2VudGVyID0gZW50cnkuYmFyeWNlbnRlcjtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHRtcC53ZWlnaHQgPSBlbnRyeS53ZWlnaHQ7XG4gICAgfVxuICB9KTtcblxuICBfLmZvckVhY2goY2cuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZW50cnlWID0gbWFwcGVkRW50cmllc1tlLnZdO1xuICAgIHZhciBlbnRyeVcgPSBtYXBwZWRFbnRyaWVzW2Uud107XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGVudHJ5VikgJiYgIV8uaXNVbmRlZmluZWQoZW50cnlXKSkge1xuICAgICAgZW50cnlXLmluZGVncmVlKys7XG4gICAgICBlbnRyeVYub3V0LnB1c2gobWFwcGVkRW50cmllc1tlLnddKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBzb3VyY2VTZXQgPSBfLmZpbHRlcihtYXBwZWRFbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuICFlbnRyeS5pbmRlZ3JlZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRvUmVzb2x2ZUNvbmZsaWN0cyhzb3VyY2VTZXQpO1xufVxuXG5mdW5jdGlvbiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KSB7XG4gIHZhciBlbnRyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW4odkVudHJ5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh1RW50cnkpIHtcbiAgICAgIGlmICh1RW50cnkubWVyZ2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgXy5pc1VuZGVmaW5lZCh1RW50cnkuYmFyeWNlbnRlcikgfHxcbiAgICAgICAgXy5pc1VuZGVmaW5lZCh2RW50cnkuYmFyeWNlbnRlcikgfHxcbiAgICAgICAgdUVudHJ5LmJhcnljZW50ZXIgPj0gdkVudHJ5LmJhcnljZW50ZXJcbiAgICAgICkge1xuICAgICAgICBtZXJnZUVudHJpZXModkVudHJ5LCB1RW50cnkpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPdXQodkVudHJ5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3RW50cnkpIHtcbiAgICAgIHdFbnRyeVsnaW4nXS5wdXNoKHZFbnRyeSk7XG4gICAgICBpZiAoLS13RW50cnkuaW5kZWdyZWUgPT09IDApIHtcbiAgICAgICAgc291cmNlU2V0LnB1c2god0VudHJ5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgd2hpbGUgKHNvdXJjZVNldC5sZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBzb3VyY2VTZXQucG9wKCk7XG4gICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBfLmZvckVhY2goZW50cnlbJ2luJ10ucmV2ZXJzZSgpLCBoYW5kbGVJbihlbnRyeSkpO1xuICAgIF8uZm9yRWFjaChlbnRyeS5vdXQsIGhhbmRsZU91dChlbnRyeSkpO1xuICB9XG5cbiAgcmV0dXJuIF8ubWFwKFxuICAgIF8uZmlsdGVyKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuICFlbnRyeS5tZXJnZWQ7XG4gICAgfSksXG4gICAgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICByZXR1cm4gXy5waWNrKGVudHJ5LCBbJ3ZzJywgJ2knLCAnYmFyeWNlbnRlcicsICd3ZWlnaHQnXSk7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBtZXJnZUVudHJpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciB3ZWlnaHQgPSAwO1xuXG4gIGlmICh0YXJnZXQud2VpZ2h0KSB7XG4gICAgc3VtICs9IHRhcmdldC5iYXJ5Y2VudGVyICogdGFyZ2V0LndlaWdodDtcbiAgICB3ZWlnaHQgKz0gdGFyZ2V0LndlaWdodDtcbiAgfVxuXG4gIGlmIChzb3VyY2Uud2VpZ2h0KSB7XG4gICAgc3VtICs9IHNvdXJjZS5iYXJ5Y2VudGVyICogc291cmNlLndlaWdodDtcbiAgICB3ZWlnaHQgKz0gc291cmNlLndlaWdodDtcbiAgfVxuXG4gIHRhcmdldC52cyA9IHNvdXJjZS52cy5jb25jYXQodGFyZ2V0LnZzKTtcbiAgdGFyZ2V0LmJhcnljZW50ZXIgPSBzdW0gLyB3ZWlnaHQ7XG4gIHRhcmdldC53ZWlnaHQgPSB3ZWlnaHQ7XG4gIHRhcmdldC5pID0gTWF0aC5taW4oc291cmNlLmksIHRhcmdldC5pKTtcbiAgc291cmNlLm1lcmdlZCA9IHRydWU7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHNvcnQgfTtcblxuZnVuY3Rpb24gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpIHtcbiAgdmFyIHBhcnRzID0gdXRpbC5wYXJ0aXRpb24oZW50cmllcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuIF8uaGFzKGVudHJ5LCAnYmFyeWNlbnRlcicpO1xuICB9KTtcbiAgdmFyIHNvcnRhYmxlID0gcGFydHMubGhzLFxuICAgIHVuc29ydGFibGUgPSBfLnNvcnRCeShwYXJ0cy5yaHMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuIC1lbnRyeS5pO1xuICAgIH0pLFxuICAgIHZzID0gW10sXG4gICAgc3VtID0gMCxcbiAgICB3ZWlnaHQgPSAwLFxuICAgIHZzSW5kZXggPSAwO1xuXG4gIHNvcnRhYmxlLnNvcnQoY29tcGFyZVdpdGhCaWFzKCEhYmlhc1JpZ2h0KSk7XG5cbiAgdnNJbmRleCA9IGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCB2c0luZGV4KTtcblxuICBfLmZvckVhY2goc29ydGFibGUsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIHZzSW5kZXggKz0gZW50cnkudnMubGVuZ3RoO1xuICAgIHZzLnB1c2goZW50cnkudnMpO1xuICAgIHN1bSArPSBlbnRyeS5iYXJ5Y2VudGVyICogZW50cnkud2VpZ2h0O1xuICAgIHdlaWdodCArPSBlbnRyeS53ZWlnaHQ7XG4gICAgdnNJbmRleCA9IGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCB2c0luZGV4KTtcbiAgfSk7XG5cbiAgdmFyIHJlc3VsdCA9IHsgdnM6IF8uZmxhdHRlbih2cykgfTtcbiAgaWYgKHdlaWdodCkge1xuICAgIHJlc3VsdC5iYXJ5Y2VudGVyID0gc3VtIC8gd2VpZ2h0O1xuICAgIHJlc3VsdC53ZWlnaHQgPSB3ZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY29uc3VtZVVuc29ydGFibGUodnMsIHVuc29ydGFibGUsIGluZGV4KSB7XG4gIHZhciBsYXN0O1xuICB3aGlsZSAodW5zb3J0YWJsZS5sZW5ndGggJiYgKGxhc3QgPSBfLmxhc3QodW5zb3J0YWJsZSkpLmkgPD0gaW5kZXgpIHtcbiAgICB1bnNvcnRhYmxlLnBvcCgpO1xuICAgIHZzLnB1c2gobGFzdC52cyk7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVXaXRoQmlhcyhiaWFzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZW50cnlWLCBlbnRyeVcpIHtcbiAgICBpZiAoZW50cnlWLmJhcnljZW50ZXIgPCBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoZW50cnlWLmJhcnljZW50ZXIgPiBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuICFiaWFzID8gZW50cnlWLmkgLSBlbnRyeVcuaSA6IGVudHJ5Vy5pIC0gZW50cnlWLmk7XG4gIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGJhcnljZW50ZXIgfSBmcm9tICcuL2JhcnljZW50ZXIuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbmZsaWN0cyB9IGZyb20gJy4vcmVzb2x2ZS1jb25mbGljdHMuanMnO1xuaW1wb3J0IHsgc29ydCB9IGZyb20gJy4vc29ydC5qcyc7XG5cbmV4cG9ydCB7IHNvcnRTdWJncmFwaCB9O1xuXG5mdW5jdGlvbiBzb3J0U3ViZ3JhcGgoZywgdiwgY2csIGJpYXNSaWdodCkge1xuICB2YXIgbW92YWJsZSA9IGcuY2hpbGRyZW4odik7XG4gIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICB2YXIgYmwgPSBub2RlID8gbm9kZS5ib3JkZXJMZWZ0IDogdW5kZWZpbmVkO1xuICB2YXIgYnIgPSBub2RlID8gbm9kZS5ib3JkZXJSaWdodCA6IHVuZGVmaW5lZDtcbiAgdmFyIHN1YmdyYXBocyA9IHt9O1xuXG4gIGlmIChibCkge1xuICAgIG1vdmFibGUgPSBfLmZpbHRlcihtb3ZhYmxlLCBmdW5jdGlvbiAodykge1xuICAgICAgcmV0dXJuIHcgIT09IGJsICYmIHcgIT09IGJyO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGJhcnljZW50ZXJzID0gYmFyeWNlbnRlcihnLCBtb3ZhYmxlKTtcbiAgXy5mb3JFYWNoKGJhcnljZW50ZXJzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBpZiAoZy5jaGlsZHJlbihlbnRyeS52KS5sZW5ndGgpIHtcbiAgICAgIHZhciBzdWJncmFwaFJlc3VsdCA9IHNvcnRTdWJncmFwaChnLCBlbnRyeS52LCBjZywgYmlhc1JpZ2h0KTtcbiAgICAgIHN1YmdyYXBoc1tlbnRyeS52XSA9IHN1YmdyYXBoUmVzdWx0O1xuICAgICAgaWYgKF8uaGFzKHN1YmdyYXBoUmVzdWx0LCAnYmFyeWNlbnRlcicpKSB7XG4gICAgICAgIG1lcmdlQmFyeWNlbnRlcnMoZW50cnksIHN1YmdyYXBoUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciBlbnRyaWVzID0gcmVzb2x2ZUNvbmZsaWN0cyhiYXJ5Y2VudGVycywgY2cpO1xuICBleHBhbmRTdWJncmFwaHMoZW50cmllcywgc3ViZ3JhcGhzKTtcblxuICB2YXIgcmVzdWx0ID0gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpO1xuXG4gIGlmIChibCkge1xuICAgIHJlc3VsdC52cyA9IF8uZmxhdHRlbihbYmwsIHJlc3VsdC52cywgYnJdKTtcbiAgICBpZiAoZy5wcmVkZWNlc3NvcnMoYmwpLmxlbmd0aCkge1xuICAgICAgdmFyIGJsUHJlZCA9IGcubm9kZShnLnByZWRlY2Vzc29ycyhibClbMF0pLFxuICAgICAgICBiclByZWQgPSBnLm5vZGUoZy5wcmVkZWNlc3NvcnMoYnIpWzBdKTtcbiAgICAgIGlmICghXy5oYXMocmVzdWx0LCAnYmFyeWNlbnRlcicpKSB7XG4gICAgICAgIHJlc3VsdC5iYXJ5Y2VudGVyID0gMDtcbiAgICAgICAgcmVzdWx0LndlaWdodCA9IDA7XG4gICAgICB9XG4gICAgICByZXN1bHQuYmFyeWNlbnRlciA9XG4gICAgICAgIChyZXN1bHQuYmFyeWNlbnRlciAqIHJlc3VsdC53ZWlnaHQgKyBibFByZWQub3JkZXIgKyBiclByZWQub3JkZXIpIC8gKHJlc3VsdC53ZWlnaHQgKyAyKTtcbiAgICAgIHJlc3VsdC53ZWlnaHQgKz0gMjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHBhbmRTdWJncmFwaHMoZW50cmllcywgc3ViZ3JhcGhzKSB7XG4gIF8uZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBlbnRyeS52cyA9IF8uZmxhdHRlbihcbiAgICAgIGVudHJ5LnZzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoc3ViZ3JhcGhzW3ZdKSB7XG4gICAgICAgICAgcmV0dXJuIHN1YmdyYXBoc1t2XS52cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQmFyeWNlbnRlcnModGFyZ2V0LCBvdGhlcikge1xuICBpZiAoIV8uaXNVbmRlZmluZWQodGFyZ2V0LmJhcnljZW50ZXIpKSB7XG4gICAgdGFyZ2V0LmJhcnljZW50ZXIgPVxuICAgICAgKHRhcmdldC5iYXJ5Y2VudGVyICogdGFyZ2V0LndlaWdodCArIG90aGVyLmJhcnljZW50ZXIgKiBvdGhlci53ZWlnaHQpIC9cbiAgICAgICh0YXJnZXQud2VpZ2h0ICsgb3RoZXIud2VpZ2h0KTtcbiAgICB0YXJnZXQud2VpZ2h0ICs9IG90aGVyLndlaWdodDtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuYmFyeWNlbnRlciA9IG90aGVyLmJhcnljZW50ZXI7XG4gICAgdGFyZ2V0LndlaWdodCA9IG90aGVyLndlaWdodDtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBhZGRTdWJncmFwaENvbnN0cmFpbnRzIH0gZnJvbSAnLi9hZGQtc3ViZ3JhcGgtY29uc3RyYWludHMuanMnO1xuaW1wb3J0IHsgYnVpbGRMYXllckdyYXBoIH0gZnJvbSAnLi9idWlsZC1sYXllci1ncmFwaC5qcyc7XG5pbXBvcnQgeyBjcm9zc0NvdW50IH0gZnJvbSAnLi9jcm9zcy1jb3VudC5qcyc7XG5pbXBvcnQgeyBpbml0T3JkZXIgfSBmcm9tICcuL2luaXQtb3JkZXIuanMnO1xuaW1wb3J0IHsgc29ydFN1YmdyYXBoIH0gZnJvbSAnLi9zb3J0LXN1YmdyYXBoLmpzJztcblxuZXhwb3J0IHsgb3JkZXIgfTtcblxuLypcbiAqIEFwcGxpZXMgaGV1cmlzdGljcyB0byBtaW5pbWl6ZSBlZGdlIGNyb3NzaW5ncyBpbiB0aGUgZ3JhcGggYW5kIHNldHMgdGhlIGJlc3RcbiAqIG9yZGVyIHNvbHV0aW9uIGFzIGFuIG9yZGVyIGF0dHJpYnV0ZSBvbiBlYWNoIG5vZGUuXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gR3JhcGggbXVzdCBiZSBEQUdcbiAqICAgIDIuIEdyYXBoIG5vZGVzIG11c3QgYmUgb2JqZWN0cyB3aXRoIGEgXCJyYW5rXCIgYXR0cmlidXRlXG4gKiAgICAzLiBHcmFwaCBlZGdlcyBtdXN0IGhhdmUgdGhlIFwid2VpZ2h0XCIgYXR0cmlidXRlXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG5vZGVzIHdpbGwgaGF2ZSBhbiBcIm9yZGVyXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIHRoZVxuICogICAgICAgYWxnb3JpdGhtLlxuICovXG5mdW5jdGlvbiBvcmRlcihnKSB7XG4gIHZhciBtYXhSYW5rID0gdXRpbC5tYXhSYW5rKGcpLFxuICAgIGRvd25MYXllckdyYXBocyA9IGJ1aWxkTGF5ZXJHcmFwaHMoZywgXy5yYW5nZSgxLCBtYXhSYW5rICsgMSksICdpbkVkZ2VzJyksXG4gICAgdXBMYXllckdyYXBocyA9IGJ1aWxkTGF5ZXJHcmFwaHMoZywgXy5yYW5nZShtYXhSYW5rIC0gMSwgLTEsIC0xKSwgJ291dEVkZ2VzJyk7XG5cbiAgdmFyIGxheWVyaW5nID0gaW5pdE9yZGVyKGcpO1xuICBhc3NpZ25PcmRlcihnLCBsYXllcmluZyk7XG5cbiAgdmFyIGJlc3RDQyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICBiZXN0O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsYXN0QmVzdCA9IDA7IGxhc3RCZXN0IDwgNDsgKytpLCArK2xhc3RCZXN0KSB7XG4gICAgc3dlZXBMYXllckdyYXBocyhpICUgMiA/IGRvd25MYXllckdyYXBocyA6IHVwTGF5ZXJHcmFwaHMsIGkgJSA0ID49IDIpO1xuXG4gICAgbGF5ZXJpbmcgPSB1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7XG4gICAgdmFyIGNjID0gY3Jvc3NDb3VudChnLCBsYXllcmluZyk7XG4gICAgaWYgKGNjIDwgYmVzdENDKSB7XG4gICAgICBsYXN0QmVzdCA9IDA7XG4gICAgICBiZXN0ID0gXy5jbG9uZURlZXAobGF5ZXJpbmcpO1xuICAgICAgYmVzdENDID0gY2M7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduT3JkZXIoZywgYmVzdCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaHMoZywgcmFua3MsIHJlbGF0aW9uc2hpcCkge1xuICByZXR1cm4gXy5tYXAocmFua3MsIGZ1bmN0aW9uIChyYW5rKSB7XG4gICAgcmV0dXJuIGJ1aWxkTGF5ZXJHcmFwaChnLCByYW5rLCByZWxhdGlvbnNoaXApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dlZXBMYXllckdyYXBocyhsYXllckdyYXBocywgYmlhc1JpZ2h0KSB7XG4gIHZhciBjZyA9IG5ldyBHcmFwaCgpO1xuICBfLmZvckVhY2gobGF5ZXJHcmFwaHMsIGZ1bmN0aW9uIChsZykge1xuICAgIHZhciByb290ID0gbGcuZ3JhcGgoKS5yb290O1xuICAgIHZhciBzb3J0ZWQgPSBzb3J0U3ViZ3JhcGgobGcsIHJvb3QsIGNnLCBiaWFzUmlnaHQpO1xuICAgIF8uZm9yRWFjaChzb3J0ZWQudnMsIGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICBsZy5ub2RlKHYpLm9yZGVyID0gaTtcbiAgICB9KTtcbiAgICBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGxnLCBjZywgc29ydGVkLnZzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbk9yZGVyKGcsIGxheWVyaW5nKSB7XG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgZy5ub2RlKHYpLm9yZGVyID0gaTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgcGFyZW50RHVtbXlDaGFpbnMgfTtcblxuZnVuY3Rpb24gcGFyZW50RHVtbXlDaGFpbnMoZykge1xuICB2YXIgcG9zdG9yZGVyTnVtcyA9IHBvc3RvcmRlcihnKTtcblxuICBfLmZvckVhY2goZy5ncmFwaCgpLmR1bW15Q2hhaW5zLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIHZhciBlZGdlT2JqID0gbm9kZS5lZGdlT2JqO1xuICAgIHZhciBwYXRoRGF0YSA9IGZpbmRQYXRoKGcsIHBvc3RvcmRlck51bXMsIGVkZ2VPYmoudiwgZWRnZU9iai53KTtcbiAgICB2YXIgcGF0aCA9IHBhdGhEYXRhLnBhdGg7XG4gICAgdmFyIGxjYSA9IHBhdGhEYXRhLmxjYTtcbiAgICB2YXIgcGF0aElkeCA9IDA7XG4gICAgdmFyIHBhdGhWID0gcGF0aFtwYXRoSWR4XTtcbiAgICB2YXIgYXNjZW5kaW5nID0gdHJ1ZTtcblxuICAgIHdoaWxlICh2ICE9PSBlZGdlT2JqLncpIHtcbiAgICAgIG5vZGUgPSBnLm5vZGUodik7XG5cbiAgICAgIGlmIChhc2NlbmRpbmcpIHtcbiAgICAgICAgd2hpbGUgKChwYXRoViA9IHBhdGhbcGF0aElkeF0pICE9PSBsY2EgJiYgZy5ub2RlKHBhdGhWKS5tYXhSYW5rIDwgbm9kZS5yYW5rKSB7XG4gICAgICAgICAgcGF0aElkeCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhWID09PSBsY2EpIHtcbiAgICAgICAgICBhc2NlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFzY2VuZGluZykge1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgcGF0aElkeCA8IHBhdGgubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgIGcubm9kZSgocGF0aFYgPSBwYXRoW3BhdGhJZHggKyAxXSkpLm1pblJhbmsgPD0gbm9kZS5yYW5rXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGhJZHgrKztcbiAgICAgICAgfVxuICAgICAgICBwYXRoViA9IHBhdGhbcGF0aElkeF07XG4gICAgICB9XG5cbiAgICAgIGcuc2V0UGFyZW50KHYsIHBhdGhWKTtcbiAgICAgIHYgPSBnLnN1Y2Nlc3NvcnModilbMF07XG4gICAgfVxuICB9KTtcbn1cblxuLy8gRmluZCBhIHBhdGggZnJvbSB2IHRvIHcgdGhyb3VnaCB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciAoTENBKS4gUmV0dXJuIHRoZVxuLy8gZnVsbCBwYXRoIGFuZCB0aGUgTENBLlxuZnVuY3Rpb24gZmluZFBhdGgoZywgcG9zdG9yZGVyTnVtcywgdiwgdykge1xuICB2YXIgdlBhdGggPSBbXTtcbiAgdmFyIHdQYXRoID0gW107XG4gIHZhciBsb3cgPSBNYXRoLm1pbihwb3N0b3JkZXJOdW1zW3ZdLmxvdywgcG9zdG9yZGVyTnVtc1t3XS5sb3cpO1xuICB2YXIgbGltID0gTWF0aC5tYXgocG9zdG9yZGVyTnVtc1t2XS5saW0sIHBvc3RvcmRlck51bXNbd10ubGltKTtcbiAgdmFyIHBhcmVudDtcbiAgdmFyIGxjYTtcblxuICAvLyBUcmF2ZXJzZSB1cCBmcm9tIHYgdG8gZmluZCB0aGUgTENBXG4gIHBhcmVudCA9IHY7XG4gIGRvIHtcbiAgICBwYXJlbnQgPSBnLnBhcmVudChwYXJlbnQpO1xuICAgIHZQYXRoLnB1c2gocGFyZW50KTtcbiAgfSB3aGlsZSAocGFyZW50ICYmIChwb3N0b3JkZXJOdW1zW3BhcmVudF0ubG93ID4gbG93IHx8IGxpbSA+IHBvc3RvcmRlck51bXNbcGFyZW50XS5saW0pKTtcbiAgbGNhID0gcGFyZW50O1xuXG4gIC8vIFRyYXZlcnNlIGZyb20gdyB0byBMQ0FcbiAgcGFyZW50ID0gdztcbiAgd2hpbGUgKChwYXJlbnQgPSBnLnBhcmVudChwYXJlbnQpKSAhPT0gbGNhKSB7XG4gICAgd1BhdGgucHVzaChwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aDogdlBhdGguY29uY2F0KHdQYXRoLnJldmVyc2UoKSksIGxjYTogbGNhIH07XG59XG5cbmZ1bmN0aW9uIHBvc3RvcmRlcihnKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIGxpbSA9IDA7XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgbG93ID0gbGltO1xuICAgIF8uZm9yRWFjaChnLmNoaWxkcmVuKHYpLCBkZnMpO1xuICAgIHJlc3VsdFt2XSA9IHsgbG93OiBsb3csIGxpbTogbGltKysgfTtcbiAgfVxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBkZnMpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vLi4vZ3JhcGhsaWIvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsLmpzJztcblxuLypcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvb3JkaW5hdGUgYXNzaWdubWVudCBiYXNlZCBvbiBCcmFuZGVzIGFuZCBLw7ZwZiwgXCJGYXN0XG4gKiBhbmQgU2ltcGxlIEhvcml6b250YWwgQ29vcmRpbmF0ZSBBc3NpZ25tZW50LlwiXG4gKi9cblxuZXhwb3J0IHtcbiAgcG9zaXRpb25YLFxuICBmaW5kVHlwZTFDb25mbGljdHMsXG4gIGZpbmRUeXBlMkNvbmZsaWN0cyxcbiAgYWRkQ29uZmxpY3QsXG4gIGhhc0NvbmZsaWN0LFxuICB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgaG9yaXpvbnRhbENvbXBhY3Rpb24sXG4gIGFsaWduQ29vcmRpbmF0ZXMsXG4gIGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50LFxuICBiYWxhbmNlLFxufTtcblxuLypcbiAqIE1hcmtzIGFsbCBlZGdlcyBpbiB0aGUgZ3JhcGggd2l0aCBhIHR5cGUtMSBjb25mbGljdCB3aXRoIHRoZSBcInR5cGUxQ29uZmxpY3RcIlxuICogcHJvcGVydHkuIEEgdHlwZS0xIGNvbmZsaWN0IGlzIG9uZSB3aGVyZSBhIG5vbi1pbm5lciBzZWdtZW50IGNyb3NzZXMgYW5cbiAqIGlubmVyIHNlZ21lbnQuIEFuIGlubmVyIHNlZ21lbnQgaXMgYW4gZWRnZSB3aXRoIGJvdGggaW5jaWRlbnQgbm9kZXMgbWFya2VkXG4gKiB3aXRoIHRoZSBcImR1bW15XCIgcHJvcGVydHkuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gc2NhbnMgbGF5ZXIgYnkgbGF5ZXIsIHN0YXJ0aW5nIHdpdGggdGhlIHNlY29uZCwgZm9yIHR5cGUtMVxuICogY29uZmxpY3RzIGJldHdlZW4gdGhlIGN1cnJlbnQgbGF5ZXIgYW5kIHRoZSBwcmV2aW91cyBsYXllci4gRm9yIGVhY2ggbGF5ZXJcbiAqIGl0IHNjYW5zIHRoZSBub2RlcyBmcm9tIGxlZnQgdG8gcmlnaHQgdW50aWwgaXQgcmVhY2hlcyBvbmUgdGhhdCBpcyBpbmNpZGVudFxuICogb24gYW4gaW5uZXIgc2VnbWVudC4gSXQgdGhlbiBzY2FucyBwcmVkZWNlc3NvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgaGF2ZVxuICogZWRnZXMgdGhhdCBjcm9zcyB0aGF0IGlubmVyIHNlZ21lbnQuIEF0IHRoZSBlbmQgYSBmaW5hbCBzY2FuIGlzIGRvbmUgZm9yIGFsbFxuICogbm9kZXMgb24gdGhlIGN1cnJlbnQgcmFuayB0byBzZWUgaWYgdGhleSBjcm9zcyB0aGUgbGFzdCB2aXNpdGVkIGlubmVyXG4gKiBzZWdtZW50LlxuICpcbiAqIFRoaXMgYWxnb3JpdGhtIChzYWZlbHkpIGFzc3VtZXMgdGhhdCBhIGR1bW15IG5vZGUgd2lsbCBvbmx5IGJlIGluY2lkZW50IG9uIGFcbiAqIHNpbmdsZSBub2RlIGluIHRoZSBsYXllcnMgYmVpbmcgc2Nhbm5lZC5cbiAqL1xuZnVuY3Rpb24gZmluZFR5cGUxQ29uZmxpY3RzKGcsIGxheWVyaW5nKSB7XG4gIHZhciBjb25mbGljdHMgPSB7fTtcblxuICBmdW5jdGlvbiB2aXNpdExheWVyKHByZXZMYXllciwgbGF5ZXIpIHtcbiAgICB2YXIgLy8gbGFzdCB2aXNpdGVkIG5vZGUgaW4gdGhlIHByZXZpb3VzIGxheWVyIHRoYXQgaXMgaW5jaWRlbnQgb24gYW4gaW5uZXJcbiAgICAgIC8vIHNlZ21lbnQuXG4gICAgICBrMCA9IDAsXG4gICAgICAvLyBUcmFja3MgdGhlIGxhc3Qgbm9kZSBpbiB0aGlzIGxheWVyIHNjYW5uZWQgZm9yIGNyb3NzaW5ncyB3aXRoIGEgdHlwZS0xXG4gICAgICAvLyBzZWdtZW50LlxuICAgICAgc2NhblBvcyA9IDAsXG4gICAgICBwcmV2TGF5ZXJMZW5ndGggPSBwcmV2TGF5ZXIubGVuZ3RoLFxuICAgICAgbGFzdE5vZGUgPSBfLmxhc3QobGF5ZXIpO1xuXG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgdmFyIHcgPSBmaW5kT3RoZXJJbm5lclNlZ21lbnROb2RlKGcsIHYpLFxuICAgICAgICBrMSA9IHcgPyBnLm5vZGUodykub3JkZXIgOiBwcmV2TGF5ZXJMZW5ndGg7XG5cbiAgICAgIGlmICh3IHx8IHYgPT09IGxhc3ROb2RlKSB7XG4gICAgICAgIF8uZm9yRWFjaChsYXllci5zbGljZShzY2FuUG9zLCBpICsgMSksIGZ1bmN0aW9uIChzY2FuTm9kZSkge1xuICAgICAgICAgIF8uZm9yRWFjaChnLnByZWRlY2Vzc29ycyhzY2FuTm9kZSksIGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICB2YXIgdUxhYmVsID0gZy5ub2RlKHUpLFxuICAgICAgICAgICAgICB1UG9zID0gdUxhYmVsLm9yZGVyO1xuICAgICAgICAgICAgaWYgKCh1UG9zIDwgazAgfHwgazEgPCB1UG9zKSAmJiAhKHVMYWJlbC5kdW1teSAmJiBnLm5vZGUoc2Nhbk5vZGUpLmR1bW15KSkge1xuICAgICAgICAgICAgICBhZGRDb25mbGljdChjb25mbGljdHMsIHUsIHNjYW5Ob2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgc2NhblBvcyA9IGkgKyAxO1xuICAgICAgICBrMCA9IGsxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgXy5yZWR1Y2UobGF5ZXJpbmcsIHZpc2l0TGF5ZXIpO1xuICByZXR1cm4gY29uZmxpY3RzO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZTJDb25mbGljdHMoZywgbGF5ZXJpbmcpIHtcbiAgdmFyIGNvbmZsaWN0cyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHNjYW4oc291dGgsIHNvdXRoUG9zLCBzb3V0aEVuZCwgcHJldk5vcnRoQm9yZGVyLCBuZXh0Tm9ydGhCb3JkZXIpIHtcbiAgICB2YXIgdjtcbiAgICBfLmZvckVhY2goXy5yYW5nZShzb3V0aFBvcywgc291dGhFbmQpLCBmdW5jdGlvbiAoaSkge1xuICAgICAgdiA9IHNvdXRoW2ldO1xuICAgICAgaWYgKGcubm9kZSh2KS5kdW1teSkge1xuICAgICAgICBfLmZvckVhY2goZy5wcmVkZWNlc3NvcnModiksIGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgdmFyIHVOb2RlID0gZy5ub2RlKHUpO1xuICAgICAgICAgIGlmICh1Tm9kZS5kdW1teSAmJiAodU5vZGUub3JkZXIgPCBwcmV2Tm9ydGhCb3JkZXIgfHwgdU5vZGUub3JkZXIgPiBuZXh0Tm9ydGhCb3JkZXIpKSB7XG4gICAgICAgICAgICBhZGRDb25mbGljdChjb25mbGljdHMsIHUsIHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdExheWVyKG5vcnRoLCBzb3V0aCkge1xuICAgIHZhciBwcmV2Tm9ydGhQb3MgPSAtMSxcbiAgICAgIG5leHROb3J0aFBvcyxcbiAgICAgIHNvdXRoUG9zID0gMDtcblxuICAgIF8uZm9yRWFjaChzb3V0aCwgZnVuY3Rpb24gKHYsIHNvdXRoTG9va2FoZWFkKSB7XG4gICAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSAnYm9yZGVyJykge1xuICAgICAgICB2YXIgcHJlZGVjZXNzb3JzID0gZy5wcmVkZWNlc3NvcnModik7XG4gICAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dE5vcnRoUG9zID0gZy5ub2RlKHByZWRlY2Vzc29yc1swXSkub3JkZXI7XG4gICAgICAgICAgc2Nhbihzb3V0aCwgc291dGhQb3MsIHNvdXRoTG9va2FoZWFkLCBwcmV2Tm9ydGhQb3MsIG5leHROb3J0aFBvcyk7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHNvdXRoUG9zID0gc291dGhMb29rYWhlYWQ7XG4gICAgICAgICAgcHJldk5vcnRoUG9zID0gbmV4dE5vcnRoUG9zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzY2FuKHNvdXRoLCBzb3V0aFBvcywgc291dGgubGVuZ3RoLCBuZXh0Tm9ydGhQb3MsIG5vcnRoLmxlbmd0aCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc291dGg7XG4gIH1cblxuICBfLnJlZHVjZShsYXllcmluZywgdmlzaXRMYXllcik7XG4gIHJldHVybiBjb25mbGljdHM7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdGhlcklubmVyU2VnbWVudE5vZGUoZywgdikge1xuICBpZiAoZy5ub2RlKHYpLmR1bW15KSB7XG4gICAgcmV0dXJuIF8uZmluZChnLnByZWRlY2Vzc29ycyh2KSwgZnVuY3Rpb24gKHUpIHtcbiAgICAgIHJldHVybiBnLm5vZGUodSkuZHVtbXk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ29uZmxpY3QoY29uZmxpY3RzLCB2LCB3KSB7XG4gIGlmICh2ID4gdykge1xuICAgIHZhciB0bXAgPSB2O1xuICAgIHYgPSB3O1xuICAgIHcgPSB0bXA7XG4gIH1cblxuICB2YXIgY29uZmxpY3RzViA9IGNvbmZsaWN0c1t2XTtcbiAgaWYgKCFjb25mbGljdHNWKSB7XG4gICAgY29uZmxpY3RzW3ZdID0gY29uZmxpY3RzViA9IHt9O1xuICB9XG4gIGNvbmZsaWN0c1Zbd10gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNDb25mbGljdChjb25mbGljdHMsIHYsIHcpIHtcbiAgaWYgKHYgPiB3KSB7XG4gICAgdmFyIHRtcCA9IHY7XG4gICAgdiA9IHc7XG4gICAgdyA9IHRtcDtcbiAgfVxuICByZXR1cm4gXy5oYXMoY29uZmxpY3RzW3ZdLCB3KTtcbn1cblxuLypcbiAqIFRyeSB0byBhbGlnbiBub2RlcyBpbnRvIHZlcnRpY2FsIFwiYmxvY2tzXCIgd2hlcmUgcG9zc2libGUuIFRoaXMgYWxnb3JpdGhtXG4gKiBhdHRlbXB0cyB0byBhbGlnbiBhIG5vZGUgd2l0aCBvbmUgb2YgaXRzIG1lZGlhbiBuZWlnaGJvcnMuIElmIHRoZSBlZGdlXG4gKiBjb25uZWN0aW5nIGEgbmVpZ2hib3IgaXMgYSB0eXBlLTEgY29uZmxpY3QgdGhlbiB3ZSBpZ25vcmUgdGhhdCBwb3NzaWJpbGl0eS5cbiAqIElmIGEgcHJldmlvdXMgbm9kZSBoYXMgYWxyZWFkeSBmb3JtZWQgYSBibG9jayB3aXRoIGEgbm9kZSBhZnRlciB0aGUgbm9kZVxuICogd2UncmUgdHJ5aW5nIHRvIGZvcm0gYSBibG9jayB3aXRoLCB3ZSBhbHNvIGlnbm9yZSB0aGF0IHBvc3NpYmlsaXR5IC0gb3VyXG4gKiBibG9ja3Mgd291bGQgYmUgc3BsaXQgaW4gdGhhdCBzY2VuYXJpby5cbiAqL1xuZnVuY3Rpb24gdmVydGljYWxBbGlnbm1lbnQoZywgbGF5ZXJpbmcsIGNvbmZsaWN0cywgbmVpZ2hib3JGbikge1xuICB2YXIgcm9vdCA9IHt9LFxuICAgIGFsaWduID0ge30sXG4gICAgcG9zID0ge307XG5cbiAgLy8gV2UgY2FjaGUgdGhlIHBvc2l0aW9uIGhlcmUgYmFzZWQgb24gdGhlIGxheWVyaW5nIGJlY2F1c2UgdGhlIGdyYXBoIGFuZFxuICAvLyBsYXllcmluZyBtYXkgYmUgb3V0IG9mIHN5bmMuIFRoZSBsYXllcmluZyBtYXRyaXggaXMgbWFuaXB1bGF0ZWQgdG9cbiAgLy8gZ2VuZXJhdGUgZGlmZmVyZW50IGV4dHJlbWUgYWxpZ25tZW50cy5cbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2LCBvcmRlcikge1xuICAgICAgcm9vdFt2XSA9IHY7XG4gICAgICBhbGlnblt2XSA9IHY7XG4gICAgICBwb3Nbdl0gPSBvcmRlcjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICB2YXIgcHJldklkeCA9IC0xO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHZhciB3cyA9IG5laWdoYm9yRm4odik7XG4gICAgICBpZiAod3MubGVuZ3RoKSB7XG4gICAgICAgIHdzID0gXy5zb3J0Qnkod3MsIGZ1bmN0aW9uICh3KSB7XG4gICAgICAgICAgcmV0dXJuIHBvc1t3XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBtcCA9ICh3cy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKG1wKSwgaWwgPSBNYXRoLmNlaWwobXApOyBpIDw9IGlsOyArK2kpIHtcbiAgICAgICAgICB2YXIgdyA9IHdzW2ldO1xuICAgICAgICAgIGlmIChhbGlnblt2XSA9PT0gdiAmJiBwcmV2SWR4IDwgcG9zW3ddICYmICFoYXNDb25mbGljdChjb25mbGljdHMsIHYsIHcpKSB7XG4gICAgICAgICAgICBhbGlnblt3XSA9IHY7XG4gICAgICAgICAgICBhbGlnblt2XSA9IHJvb3Rbdl0gPSByb290W3ddO1xuICAgICAgICAgICAgcHJldklkeCA9IHBvc1t3XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgcm9vdDogcm9vdCwgYWxpZ246IGFsaWduIH07XG59XG5cbmZ1bmN0aW9uIGhvcml6b250YWxDb21wYWN0aW9uKGcsIGxheWVyaW5nLCByb290LCBhbGlnbiwgcmV2ZXJzZVNlcCkge1xuICAvLyBUaGlzIHBvcnRpb24gb2YgdGhlIGFsZ29yaXRobSBkaWZmZXJzIGZyb20gQksgZHVlIHRvIGEgbnVtYmVyIG9mIHByb2JsZW1zLlxuICAvLyBJbnN0ZWFkIG9mIHRoZWlyIGFsZ29yaXRobSB3ZSBjb25zdHJ1Y3QgYSBuZXcgYmxvY2sgZ3JhcGggYW5kIGRvIHR3b1xuICAvLyBzd2VlcHMuIFRoZSBmaXJzdCBzd2VlcCBwbGFjZXMgYmxvY2tzIHdpdGggdGhlIHNtYWxsZXN0IHBvc3NpYmxlXG4gIC8vIGNvb3JkaW5hdGVzLiBUaGUgc2Vjb25kIHN3ZWVwIHJlbW92ZXMgdW51c2VkIHNwYWNlIGJ5IG1vdmluZyBibG9ja3MgdG8gdGhlXG4gIC8vIGdyZWF0ZXN0IGNvb3JkaW5hdGVzIHdpdGhvdXQgdmlvbGF0aW5nIHNlcGFyYXRpb24uXG4gIHZhciB4cyA9IHt9LFxuICAgIGJsb2NrRyA9IGJ1aWxkQmxvY2tHcmFwaChnLCBsYXllcmluZywgcm9vdCwgcmV2ZXJzZVNlcCksXG4gICAgYm9yZGVyVHlwZSA9IHJldmVyc2VTZXAgPyAnYm9yZGVyTGVmdCcgOiAnYm9yZGVyUmlnaHQnO1xuXG4gIGZ1bmN0aW9uIGl0ZXJhdGUoc2V0WHNGdW5jLCBuZXh0Tm9kZXNGdW5jKSB7XG4gICAgdmFyIHN0YWNrID0gYmxvY2tHLm5vZGVzKCk7XG4gICAgdmFyIGVsZW0gPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdmlzaXRlZCA9IHt9O1xuICAgIHdoaWxlIChlbGVtKSB7XG4gICAgICBpZiAodmlzaXRlZFtlbGVtXSkge1xuICAgICAgICBzZXRYc0Z1bmMoZWxlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXNpdGVkW2VsZW1dID0gdHJ1ZTtcbiAgICAgICAgc3RhY2sucHVzaChlbGVtKTtcbiAgICAgICAgc3RhY2sgPSBzdGFjay5jb25jYXQobmV4dE5vZGVzRnVuYyhlbGVtKSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW0gPSBzdGFjay5wb3AoKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCBwYXNzLCBhc3NpZ24gc21hbGxlc3QgY29vcmRpbmF0ZXNcbiAgZnVuY3Rpb24gcGFzczEoZWxlbSkge1xuICAgIHhzW2VsZW1dID0gYmxvY2tHLmluRWRnZXMoZWxlbSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heChhY2MsIHhzW2Uudl0gKyBibG9ja0cuZWRnZShlKSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyBTZWNvbmQgcGFzcywgYXNzaWduIGdyZWF0ZXN0IGNvb3JkaW5hdGVzXG4gIGZ1bmN0aW9uIHBhc3MyKGVsZW0pIHtcbiAgICB2YXIgbWluID0gYmxvY2tHLm91dEVkZ2VzKGVsZW0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBlKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oYWNjLCB4c1tlLnddIC0gYmxvY2tHLmVkZ2UoZSkpO1xuICAgIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG5cbiAgICB2YXIgbm9kZSA9IGcubm9kZShlbGVtKTtcbiAgICBpZiAobWluICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgbm9kZS5ib3JkZXJUeXBlICE9PSBib3JkZXJUeXBlKSB7XG4gICAgICB4c1tlbGVtXSA9IE1hdGgubWF4KHhzW2VsZW1dLCBtaW4pO1xuICAgIH1cbiAgfVxuXG4gIGl0ZXJhdGUocGFzczEsIGJsb2NrRy5wcmVkZWNlc3NvcnMuYmluZChibG9ja0cpKTtcbiAgaXRlcmF0ZShwYXNzMiwgYmxvY2tHLnN1Y2Nlc3NvcnMuYmluZChibG9ja0cpKTtcblxuICAvLyBBc3NpZ24geCBjb29yZGluYXRlcyB0byBhbGwgbm9kZXNcbiAgXy5mb3JFYWNoKGFsaWduLCBmdW5jdGlvbiAodikge1xuICAgIHhzW3ZdID0geHNbcm9vdFt2XV07XG4gIH0pO1xuXG4gIHJldHVybiB4cztcbn1cblxuZnVuY3Rpb24gYnVpbGRCbG9ja0dyYXBoKGcsIGxheWVyaW5nLCByb290LCByZXZlcnNlU2VwKSB7XG4gIHZhciBibG9ja0dyYXBoID0gbmV3IEdyYXBoKCksXG4gICAgZ3JhcGhMYWJlbCA9IGcuZ3JhcGgoKSxcbiAgICBzZXBGbiA9IHNlcChncmFwaExhYmVsLm5vZGVzZXAsIGdyYXBoTGFiZWwuZWRnZXNlcCwgcmV2ZXJzZVNlcCk7XG5cbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICB2YXIgdTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgdlJvb3QgPSByb290W3ZdO1xuICAgICAgYmxvY2tHcmFwaC5zZXROb2RlKHZSb290KTtcbiAgICAgIGlmICh1KSB7XG4gICAgICAgIHZhciB1Um9vdCA9IHJvb3RbdV0sXG4gICAgICAgICAgcHJldk1heCA9IGJsb2NrR3JhcGguZWRnZSh1Um9vdCwgdlJvb3QpO1xuICAgICAgICBibG9ja0dyYXBoLnNldEVkZ2UodVJvb3QsIHZSb290LCBNYXRoLm1heChzZXBGbihnLCB2LCB1KSwgcHJldk1heCB8fCAwKSk7XG4gICAgICB9XG4gICAgICB1ID0gdjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJsb2NrR3JhcGg7XG59XG5cbi8qXG4gKiBSZXR1cm5zIHRoZSBhbGlnbm1lbnQgdGhhdCBoYXMgdGhlIHNtYWxsZXN0IHdpZHRoIG9mIHRoZSBnaXZlbiBhbGlnbm1lbnRzLlxuICovXG5mdW5jdGlvbiBmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudChnLCB4c3MpIHtcbiAgcmV0dXJuIF8ubWluQnkoXy52YWx1ZXMoeHNzKSwgZnVuY3Rpb24gKHhzKSB7XG4gICAgdmFyIG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXG4gICAgXy5mb3JJbih4cywgZnVuY3Rpb24gKHgsIHYpIHtcbiAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aChnLCB2KSAvIDI7XG5cbiAgICAgIG1heCA9IE1hdGgubWF4KHggKyBoYWxmV2lkdGgsIG1heCk7XG4gICAgICBtaW4gPSBNYXRoLm1pbih4IC0gaGFsZldpZHRoLCBtaW4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1heCAtIG1pbjtcbiAgfSk7XG59XG5cbi8qXG4gKiBBbGlnbiB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBvZiB0aGUgbGF5b3V0IGFsaWdubWVudHMgc3VjaCB0aGF0XG4gKiBsZWZ0LWJpYXNlZCBhbGlnbm1lbnRzIGhhdmUgdGhlaXIgbWluaW11bSBjb29yZGluYXRlIGF0IHRoZSBzYW1lIHBvaW50IGFzXG4gKiB0aGUgbWluaW11bSBjb29yZGluYXRlIG9mIHRoZSBzbWFsbGVzdCB3aWR0aCBhbGlnbm1lbnQgYW5kIHJpZ2h0LWJpYXNlZFxuICogYWxpZ25tZW50cyBoYXZlIHRoZWlyIG1heGltdW0gY29vcmRpbmF0ZSBhdCB0aGUgc2FtZSBwb2ludCBhcyB0aGUgbWF4aW11bVxuICogY29vcmRpbmF0ZSBvZiB0aGUgc21hbGxlc3Qgd2lkdGggYWxpZ25tZW50LlxuICovXG5mdW5jdGlvbiBhbGlnbkNvb3JkaW5hdGVzKHhzcywgYWxpZ25Ubykge1xuICB2YXIgYWxpZ25Ub1ZhbHMgPSBfLnZhbHVlcyhhbGlnblRvKSxcbiAgICBhbGlnblRvTWluID0gXy5taW4oYWxpZ25Ub1ZhbHMpLFxuICAgIGFsaWduVG9NYXggPSBfLm1heChhbGlnblRvVmFscyk7XG5cbiAgXy5mb3JFYWNoKFsndScsICdkJ10sIGZ1bmN0aW9uICh2ZXJ0KSB7XG4gICAgXy5mb3JFYWNoKFsnbCcsICdyJ10sIGZ1bmN0aW9uIChob3Jpeikge1xuICAgICAgdmFyIGFsaWdubWVudCA9IHZlcnQgKyBob3JpeixcbiAgICAgICAgeHMgPSB4c3NbYWxpZ25tZW50XSxcbiAgICAgICAgZGVsdGE7XG4gICAgICBpZiAoeHMgPT09IGFsaWduVG8pIHJldHVybjtcblxuICAgICAgdmFyIHhzVmFscyA9IF8udmFsdWVzKHhzKTtcbiAgICAgIGRlbHRhID0gaG9yaXogPT09ICdsJyA/IGFsaWduVG9NaW4gLSBfLm1pbih4c1ZhbHMpIDogYWxpZ25Ub01heCAtIF8ubWF4KHhzVmFscyk7XG5cbiAgICAgIGlmIChkZWx0YSkge1xuICAgICAgICB4c3NbYWxpZ25tZW50XSA9IF8ubWFwVmFsdWVzKHhzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgZGVsdGE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYmFsYW5jZSh4c3MsIGFsaWduKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyh4c3MudWwsIGZ1bmN0aW9uIChpZ25vcmUsIHYpIHtcbiAgICBpZiAoYWxpZ24pIHtcbiAgICAgIHJldHVybiB4c3NbYWxpZ24udG9Mb3dlckNhc2UoKV1bdl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB4cyA9IF8uc29ydEJ5KF8ubWFwKHhzcywgdikpO1xuICAgICAgcmV0dXJuICh4c1sxXSArIHhzWzJdKSAvIDI7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25YKGcpIHtcbiAgdmFyIGxheWVyaW5nID0gdXRpbC5idWlsZExheWVyTWF0cml4KGcpO1xuICB2YXIgY29uZmxpY3RzID0gXy5tZXJnZShmaW5kVHlwZTFDb25mbGljdHMoZywgbGF5ZXJpbmcpLCBmaW5kVHlwZTJDb25mbGljdHMoZywgbGF5ZXJpbmcpKTtcblxuICB2YXIgeHNzID0ge307XG4gIHZhciBhZGp1c3RlZExheWVyaW5nO1xuICBfLmZvckVhY2goWyd1JywgJ2QnXSwgZnVuY3Rpb24gKHZlcnQpIHtcbiAgICBhZGp1c3RlZExheWVyaW5nID0gdmVydCA9PT0gJ3UnID8gbGF5ZXJpbmcgOiBfLnZhbHVlcyhsYXllcmluZykucmV2ZXJzZSgpO1xuICAgIF8uZm9yRWFjaChbJ2wnLCAnciddLCBmdW5jdGlvbiAoaG9yaXopIHtcbiAgICAgIGlmIChob3JpeiA9PT0gJ3InKSB7XG4gICAgICAgIGFkanVzdGVkTGF5ZXJpbmcgPSBfLm1hcChhZGp1c3RlZExheWVyaW5nLCBmdW5jdGlvbiAoaW5uZXIpIHtcbiAgICAgICAgICByZXR1cm4gXy52YWx1ZXMoaW5uZXIpLnJldmVyc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZWlnaGJvckZuID0gKHZlcnQgPT09ICd1JyA/IGcucHJlZGVjZXNzb3JzIDogZy5zdWNjZXNzb3JzKS5iaW5kKGcpO1xuICAgICAgdmFyIGFsaWduID0gdmVydGljYWxBbGlnbm1lbnQoZywgYWRqdXN0ZWRMYXllcmluZywgY29uZmxpY3RzLCBuZWlnaGJvckZuKTtcbiAgICAgIHZhciB4cyA9IGhvcml6b250YWxDb21wYWN0aW9uKGcsIGFkanVzdGVkTGF5ZXJpbmcsIGFsaWduLnJvb3QsIGFsaWduLmFsaWduLCBob3JpeiA9PT0gJ3InKTtcbiAgICAgIGlmIChob3JpeiA9PT0gJ3InKSB7XG4gICAgICAgIHhzID0gXy5tYXBWYWx1ZXMoeHMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIC14O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHhzc1t2ZXJ0ICsgaG9yaXpdID0geHM7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZhciBzbWFsbGVzdFdpZHRoID0gZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQoZywgeHNzKTtcbiAgYWxpZ25Db29yZGluYXRlcyh4c3MsIHNtYWxsZXN0V2lkdGgpO1xuICByZXR1cm4gYmFsYW5jZSh4c3MsIGcuZ3JhcGgoKS5hbGlnbik7XG59XG5cbmZ1bmN0aW9uIHNlcChub2RlU2VwLCBlZGdlU2VwLCByZXZlcnNlU2VwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZywgdiwgdykge1xuICAgIHZhciB2TGFiZWwgPSBnLm5vZGUodik7XG4gICAgdmFyIHdMYWJlbCA9IGcubm9kZSh3KTtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgZGVsdGE7XG5cbiAgICBzdW0gKz0gdkxhYmVsLndpZHRoIC8gMjtcbiAgICBpZiAoXy5oYXModkxhYmVsLCAnbGFiZWxwb3MnKSkge1xuICAgICAgc3dpdGNoICh2TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdsJzpcbiAgICAgICAgICBkZWx0YSA9IC12TGFiZWwud2lkdGggLyAyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICBkZWx0YSA9IHZMYWJlbC53aWR0aCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZWx0YSkge1xuICAgICAgc3VtICs9IHJldmVyc2VTZXAgPyBkZWx0YSA6IC1kZWx0YTtcbiAgICB9XG4gICAgZGVsdGEgPSAwO1xuXG4gICAgc3VtICs9ICh2TGFiZWwuZHVtbXkgPyBlZGdlU2VwIDogbm9kZVNlcCkgLyAyO1xuICAgIHN1bSArPSAod0xhYmVsLmR1bW15ID8gZWRnZVNlcCA6IG5vZGVTZXApIC8gMjtcblxuICAgIHN1bSArPSB3TGFiZWwud2lkdGggLyAyO1xuICAgIGlmIChfLmhhcyh3TGFiZWwsICdsYWJlbHBvcycpKSB7XG4gICAgICBzd2l0Y2ggKHdMYWJlbC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgIGRlbHRhID0gd0xhYmVsLndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgZGVsdGEgPSAtd0xhYmVsLndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBzdW0gKz0gcmV2ZXJzZVNlcCA/IGRlbHRhIDogLWRlbHRhO1xuICAgIH1cbiAgICBkZWx0YSA9IDA7XG5cbiAgICByZXR1cm4gc3VtO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3aWR0aChnLCB2KSB7XG4gIHJldHVybiBnLm5vZGUodikud2lkdGg7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvblggfSBmcm9tICcuL2JrLmpzJztcblxuZXhwb3J0IHsgcG9zaXRpb24gfTtcblxuZnVuY3Rpb24gcG9zaXRpb24oZykge1xuICBnID0gdXRpbC5hc05vbkNvbXBvdW5kR3JhcGgoZyk7XG5cbiAgcG9zaXRpb25ZKGcpO1xuICBfLmZvck93bihwb3NpdGlvblgoZyksIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgZy5ub2RlKHYpLnggPSB4O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25ZKGcpIHtcbiAgdmFyIGxheWVyaW5nID0gdXRpbC5idWlsZExheWVyTWF0cml4KGcpO1xuICB2YXIgcmFua1NlcCA9IGcuZ3JhcGgoKS5yYW5rc2VwO1xuICB2YXIgcHJldlkgPSAwO1xuICBfLmZvckVhY2gobGF5ZXJpbmcsIGZ1bmN0aW9uIChsYXllcikge1xuICAgIHZhciBtYXhIZWlnaHQgPSBfLm1heChcbiAgICAgIF8ubWFwKGxheWVyLCBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZy5ub2RlKHYpLmhlaWdodDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICBnLm5vZGUodikueSA9IHByZXZZICsgbWF4SGVpZ2h0IC8gMjtcbiAgICB9KTtcbiAgICBwcmV2WSArPSBtYXhIZWlnaHQgKyByYW5rU2VwO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9ncmFwaGxpYi9pbmRleC5qcyc7XG5pbXBvcnQgeyBhZGRCb3JkZXJTZWdtZW50cyB9IGZyb20gJy4vYWRkLWJvcmRlci1zZWdtZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBjb29yZGluYXRlU3lzdGVtIGZyb20gJy4vY29vcmRpbmF0ZS1zeXN0ZW0uanMnO1xuaW1wb3J0ICogYXMgYWN5Y2xpYyBmcm9tICcuL2FjeWNsaWMuanMnO1xuaW1wb3J0ICogYXMgbm9ybWFsaXplIGZyb20gJy4vbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IHJhbmsgfSBmcm9tICcuL3JhbmsvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgbmVzdGluZ0dyYXBoIGZyb20gJy4vbmVzdGluZy1ncmFwaC5qcyc7XG5pbXBvcnQgeyBvcmRlciB9IGZyb20gJy4vb3JkZXIvaW5kZXguanMnO1xuaW1wb3J0IHsgcGFyZW50RHVtbXlDaGFpbnMgfSBmcm9tICcuL3BhcmVudC1kdW1teS1jaGFpbnMuanMnO1xuaW1wb3J0IHsgcG9zaXRpb24gfSBmcm9tICcuL3Bvc2l0aW9uL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgbGF5b3V0IH07XG5cbmZ1bmN0aW9uIGxheW91dChnLCBvcHRzKSB7XG4gIHZhciB0aW1lID0gb3B0cyAmJiBvcHRzLmRlYnVnVGltaW5nID8gdXRpbC50aW1lIDogdXRpbC5ub3RpbWU7XG4gIHRpbWUoJ2xheW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGF5b3V0R3JhcGggPSB0aW1lKCcgIGJ1aWxkTGF5b3V0R3JhcGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYnVpbGRMYXlvdXRHcmFwaChnKTtcbiAgICB9KTtcbiAgICB0aW1lKCcgIHJ1bkxheW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJ1bkxheW91dChsYXlvdXRHcmFwaCwgdGltZSk7XG4gICAgfSk7XG4gICAgdGltZSgnICB1cGRhdGVJbnB1dEdyYXBoJywgZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlSW5wdXRHcmFwaChnLCBsYXlvdXRHcmFwaCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5MYXlvdXQoZywgdGltZSkge1xuICB0aW1lKCcgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscycsIGZ1bmN0aW9uICgpIHtcbiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHJlbW92ZVNlbGZFZGdlcycsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVTZWxmRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgYWN5Y2xpYycsIGZ1bmN0aW9uICgpIHtcbiAgICBhY3ljbGljLnJ1bihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBuZXN0aW5nR3JhcGgucnVuJywgZnVuY3Rpb24gKCkge1xuICAgIG5lc3RpbmdHcmFwaC5ydW4oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmFuaycsIGZ1bmN0aW9uICgpIHtcbiAgICByYW5rKHV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlRW1wdHlSYW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICB1dGlsLnJlbW92ZUVtcHR5UmFua3MoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgbmVzdGluZ0dyYXBoLmNsZWFudXAoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbm9ybWFsaXplUmFua3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5ub3JtYWxpemVSYW5rcyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBhc3NpZ25SYW5rTWluTWF4JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2lnblJhbmtNaW5NYXgoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIG5vcm1hbGl6ZS5ydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbm9ybWFsaXplLnJ1bihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBwYXJlbnREdW1teUNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJlbnREdW1teUNoYWlucyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBhZGRCb3JkZXJTZWdtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBhZGRCb3JkZXJTZWdtZW50cyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBvcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBvcmRlcihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBpbnNlcnRTZWxmRWRnZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaW5zZXJ0U2VsZkVkZ2VzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbS5hZGp1c3QoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcG9zaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgcG9zaXRpb24oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcG9zaXRpb25TZWxmRWRnZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcG9zaXRpb25TZWxmRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlQm9yZGVyTm9kZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmVtb3ZlQm9yZGVyTm9kZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbm9ybWFsaXplLnVuZG8nLCBmdW5jdGlvbiAoKSB7XG4gICAgbm9ybWFsaXplLnVuZG8oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgZml4dXBFZGdlTGFiZWxDb29yZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZml4dXBFZGdlTGFiZWxDb29yZHMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbS51bmRvKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHRyYW5zbGF0ZUdyYXBoJywgZnVuY3Rpb24gKCkge1xuICAgIHRyYW5zbGF0ZUdyYXBoKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHJldmVyc2VQb2ludHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgYWN5Y2xpYy51bmRvJywgZnVuY3Rpb24gKCkge1xuICAgIGFjeWNsaWMudW5kbyhnKTtcbiAgfSk7XG59XG5cbi8qXG4gKiBDb3BpZXMgZmluYWwgbGF5b3V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGxheW91dCBncmFwaCBiYWNrIHRvIHRoZSBpbnB1dFxuICogZ3JhcGguIFRoaXMgcHJvY2VzcyBvbmx5IGNvcGllcyB3aGl0ZWxpc3RlZCBhdHRyaWJ1dGVzIGZyb20gdGhlIGxheW91dCBncmFwaFxuICogdG8gdGhlIGlucHV0IGdyYXBoLCBzbyBpdCBzZXJ2ZXMgYXMgYSBnb29kIHBsYWNlIHRvIGRldGVybWluZSB3aGF0XG4gKiBhdHRyaWJ1dGVzIGNhbiBpbmZsdWVuY2UgbGF5b3V0LlxuICovXG5mdW5jdGlvbiB1cGRhdGVJbnB1dEdyYXBoKGlucHV0R3JhcGgsIGxheW91dEdyYXBoKSB7XG4gIF8uZm9yRWFjaChpbnB1dEdyYXBoLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGlucHV0TGFiZWwgPSBpbnB1dEdyYXBoLm5vZGUodik7XG4gICAgdmFyIGxheW91dExhYmVsID0gbGF5b3V0R3JhcGgubm9kZSh2KTtcblxuICAgIGlmIChpbnB1dExhYmVsKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcblxuICAgICAgaWYgKGxheW91dEdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgICBpbnB1dExhYmVsLndpZHRoID0gbGF5b3V0TGFiZWwud2lkdGg7XG4gICAgICAgIGlucHV0TGFiZWwuaGVpZ2h0ID0gbGF5b3V0TGFiZWwuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgaW5wdXRMYWJlbCA9IGlucHV0R3JhcGguZWRnZShlKTtcbiAgICB2YXIgbGF5b3V0TGFiZWwgPSBsYXlvdXRHcmFwaC5lZGdlKGUpO1xuXG4gICAgaW5wdXRMYWJlbC5wb2ludHMgPSBsYXlvdXRMYWJlbC5wb2ludHM7XG4gICAgaWYgKF8uaGFzKGxheW91dExhYmVsLCAneCcpKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcbiAgICB9XG4gIH0pO1xuXG4gIGlucHV0R3JhcGguZ3JhcGgoKS53aWR0aCA9IGxheW91dEdyYXBoLmdyYXBoKCkud2lkdGg7XG4gIGlucHV0R3JhcGguZ3JhcGgoKS5oZWlnaHQgPSBsYXlvdXRHcmFwaC5ncmFwaCgpLmhlaWdodDtcbn1cblxudmFyIGdyYXBoTnVtQXR0cnMgPSBbJ25vZGVzZXAnLCAnZWRnZXNlcCcsICdyYW5rc2VwJywgJ21hcmdpbngnLCAnbWFyZ2lueSddO1xudmFyIGdyYXBoRGVmYXVsdHMgPSB7IHJhbmtzZXA6IDUwLCBlZGdlc2VwOiAyMCwgbm9kZXNlcDogNTAsIHJhbmtkaXI6ICd0YicgfTtcbnZhciBncmFwaEF0dHJzID0gWydhY3ljbGljZXInLCAncmFua2VyJywgJ3JhbmtkaXInLCAnYWxpZ24nXTtcbnZhciBub2RlTnVtQXR0cnMgPSBbJ3dpZHRoJywgJ2hlaWdodCddO1xudmFyIG5vZGVEZWZhdWx0cyA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xudmFyIGVkZ2VOdW1BdHRycyA9IFsnbWlubGVuJywgJ3dlaWdodCcsICd3aWR0aCcsICdoZWlnaHQnLCAnbGFiZWxvZmZzZXQnXTtcbnZhciBlZGdlRGVmYXVsdHMgPSB7XG4gIG1pbmxlbjogMSxcbiAgd2VpZ2h0OiAxLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBsYWJlbG9mZnNldDogMTAsXG4gIGxhYmVscG9zOiAncicsXG59O1xudmFyIGVkZ2VBdHRycyA9IFsnbGFiZWxwb3MnXTtcblxuLypcbiAqIENvbnN0cnVjdHMgYSBuZXcgZ3JhcGggZnJvbSB0aGUgaW5wdXQgZ3JhcGgsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBsYXlvdXQuXG4gKiBUaGlzIHByb2Nlc3MgY29waWVzIG9ubHkgd2hpdGVsaXN0ZWQgYXR0cmlidXRlcyBmcm9tIHRoZSBpbnB1dCBncmFwaCB0byB0aGVcbiAqIGxheW91dCBncmFwaC4gVGh1cyB0aGlzIGZ1bmN0aW9uIHNlcnZlcyBhcyBhIGdvb2QgcGxhY2UgdG8gZGV0ZXJtaW5lIHdoYXRcbiAqIGF0dHJpYnV0ZXMgY2FuIGluZmx1ZW5jZSBsYXlvdXQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5b3V0R3JhcGgoaW5wdXRHcmFwaCkge1xuICB2YXIgZyA9IG5ldyBHcmFwaCh7IG11bHRpZ3JhcGg6IHRydWUsIGNvbXBvdW5kOiB0cnVlIH0pO1xuICB2YXIgZ3JhcGggPSBjYW5vbmljYWxpemUoaW5wdXRHcmFwaC5ncmFwaCgpKTtcblxuICBnLnNldEdyYXBoKFxuICAgIF8ubWVyZ2Uoe30sIGdyYXBoRGVmYXVsdHMsIHNlbGVjdE51bWJlckF0dHJzKGdyYXBoLCBncmFwaE51bUF0dHJzKSwgXy5waWNrKGdyYXBoLCBncmFwaEF0dHJzKSlcbiAgKTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGgubm9kZSh2KSk7XG4gICAgZy5zZXROb2RlKHYsIF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSwgbm9kZU51bUF0dHJzKSwgbm9kZURlZmF1bHRzKSk7XG4gICAgZy5zZXRQYXJlbnQodiwgaW5wdXRHcmFwaC5wYXJlbnQodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGguZWRnZShlKSk7XG4gICAgZy5zZXRFZGdlKFxuICAgICAgZSxcbiAgICAgIF8ubWVyZ2Uoe30sIGVkZ2VEZWZhdWx0cywgc2VsZWN0TnVtYmVyQXR0cnMoZWRnZSwgZWRnZU51bUF0dHJzKSwgXy5waWNrKGVkZ2UsIGVkZ2VBdHRycykpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGc7XG59XG5cbi8qXG4gKiBUaGlzIGlkZWEgY29tZXMgZnJvbSB0aGUgR2Fuc25lciBwYXBlcjogdG8gYWNjb3VudCBmb3IgZWRnZSBsYWJlbHMgaW4gb3VyXG4gKiBsYXlvdXQgd2Ugc3BsaXQgZWFjaCByYW5rIGluIGhhbGYgYnkgZG91YmxpbmcgbWlubGVuIGFuZCBoYWx2aW5nIHJhbmtzZXAuXG4gKiBUaGVuIHdlIGNhbiBwbGFjZSBsYWJlbHMgYXQgdGhlc2UgbWlkLXBvaW50cyBiZXR3ZWVuIG5vZGVzLlxuICpcbiAqIFdlIGFsc28gYWRkIHNvbWUgbWluaW1hbCBwYWRkaW5nIHRvIHRoZSB3aWR0aCB0byBwdXNoIHRoZSBsYWJlbCBmb3IgdGhlIGVkZ2VcbiAqIGF3YXkgZnJvbSB0aGUgZWRnZSBpdHNlbGYgYSBiaXQuXG4gKi9cbmZ1bmN0aW9uIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZykge1xuICB2YXIgZ3JhcGggPSBnLmdyYXBoKCk7XG4gIGdyYXBoLnJhbmtzZXAgLz0gMjtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBlZGdlLm1pbmxlbiAqPSAyO1xuICAgIGlmIChlZGdlLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkgIT09ICdjJykge1xuICAgICAgaWYgKGdyYXBoLnJhbmtkaXIgPT09ICdUQicgfHwgZ3JhcGgucmFua2RpciA9PT0gJ0JUJykge1xuICAgICAgICBlZGdlLndpZHRoICs9IGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlLmhlaWdodCArPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbi8qXG4gKiBDcmVhdGVzIHRlbXBvcmFyeSBkdW1teSBub2RlcyB0aGF0IGNhcHR1cmUgdGhlIHJhbmsgaW4gd2hpY2ggZWFjaCBlZGdlJ3NcbiAqIGxhYmVsIGlzIGdvaW5nIHRvLCBpZiBpdCBoYXMgb25lIG9mIG5vbi16ZXJvIHdpZHRoIGFuZCBoZWlnaHQuIFdlIGRvIHRoaXNcbiAqIHNvIHRoYXQgd2UgY2FuIHNhZmVseSByZW1vdmUgZW1wdHkgcmFua3Mgd2hpbGUgcHJlc2VydmluZyBiYWxhbmNlIGZvciB0aGVcbiAqIGxhYmVsJ3MgcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGluamVjdEVkZ2VMYWJlbFByb3hpZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLndpZHRoICYmIGVkZ2UuaGVpZ2h0KSB7XG4gICAgICB2YXIgdiA9IGcubm9kZShlLnYpO1xuICAgICAgdmFyIHcgPSBnLm5vZGUoZS53KTtcbiAgICAgIHZhciBsYWJlbCA9IHsgcmFuazogKHcucmFuayAtIHYucmFuaykgLyAyICsgdi5yYW5rLCBlOiBlIH07XG4gICAgICB1dGlsLmFkZER1bW15Tm9kZShnLCAnZWRnZS1wcm94eScsIGxhYmVsLCAnX2VwJyk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYXNzaWduUmFua01pbk1heChnKSB7XG4gIHZhciBtYXhSYW5rID0gMDtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAobm9kZS5ib3JkZXJUb3ApIHtcbiAgICAgIG5vZGUubWluUmFuayA9IGcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztcbiAgICAgIG5vZGUubWF4UmFuayA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSkucmFuaztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIG1heFJhbmsgPSBfLm1heChtYXhSYW5rLCBub2RlLm1heFJhbmspO1xuICAgIH1cbiAgfSk7XG4gIGcuZ3JhcGgoKS5tYXhSYW5rID0gbWF4UmFuaztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKG5vZGUuZHVtbXkgPT09ICdlZGdlLXByb3h5Jykge1xuICAgICAgZy5lZGdlKG5vZGUuZSkubGFiZWxSYW5rID0gbm9kZS5yYW5rO1xuICAgICAgZy5yZW1vdmVOb2RlKHYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUdyYXBoKGcpIHtcbiAgdmFyIG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtYXhYID0gMDtcbiAgdmFyIG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtYXhZID0gMDtcbiAgdmFyIGdyYXBoTGFiZWwgPSBnLmdyYXBoKCk7XG4gIHZhciBtYXJnaW5YID0gZ3JhcGhMYWJlbC5tYXJnaW54IHx8IDA7XG4gIHZhciBtYXJnaW5ZID0gZ3JhcGhMYWJlbC5tYXJnaW55IHx8IDA7XG5cbiAgZnVuY3Rpb24gZ2V0RXh0cmVtZXMoYXR0cnMpIHtcbiAgICB2YXIgeCA9IGF0dHJzLng7XG4gICAgdmFyIHkgPSBhdHRycy55O1xuICAgIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gICAgdmFyIGggPSBhdHRycy5oZWlnaHQ7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHggLSB3IC8gMik7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHggKyB3IC8gMik7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHkgLSBoIC8gMik7XG4gICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkgKyBoIC8gMik7XG4gIH1cblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGdldEV4dHJlbWVzKGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChfLmhhcyhlZGdlLCAneCcpKSB7XG4gICAgICBnZXRFeHRyZW1lcyhlZGdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIG1pblggLT0gbWFyZ2luWDtcbiAgbWluWSAtPSBtYXJnaW5ZO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgbm9kZS54IC09IG1pblg7XG4gICAgbm9kZS55IC09IG1pblk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgXy5mb3JFYWNoKGVkZ2UucG9pbnRzLCBmdW5jdGlvbiAocCkge1xuICAgICAgcC54IC09IG1pblg7XG4gICAgICBwLnkgLT0gbWluWTtcbiAgICB9KTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgZWRnZS54IC09IG1pblg7XG4gICAgfVxuICAgIGlmIChfLmhhcyhlZGdlLCAneScpKSB7XG4gICAgICBlZGdlLnkgLT0gbWluWTtcbiAgICB9XG4gIH0pO1xuXG4gIGdyYXBoTGFiZWwud2lkdGggPSBtYXhYIC0gbWluWCArIG1hcmdpblg7XG4gIGdyYXBoTGFiZWwuaGVpZ2h0ID0gbWF4WSAtIG1pblkgKyBtYXJnaW5ZO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Ob2RlSW50ZXJzZWN0cyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgdmFyIG5vZGVWID0gZy5ub2RlKGUudik7XG4gICAgdmFyIG5vZGVXID0gZy5ub2RlKGUudyk7XG4gICAgdmFyIHAxLCBwMjtcbiAgICBpZiAoIWVkZ2UucG9pbnRzKSB7XG4gICAgICBlZGdlLnBvaW50cyA9IFtdO1xuICAgICAgcDEgPSBub2RlVztcbiAgICAgIHAyID0gbm9kZVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAxID0gZWRnZS5wb2ludHNbMF07XG4gICAgICBwMiA9IGVkZ2UucG9pbnRzW2VkZ2UucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBlZGdlLnBvaW50cy51bnNoaWZ0KHV0aWwuaW50ZXJzZWN0UmVjdChub2RlViwgcDEpKTtcbiAgICBlZGdlLnBvaW50cy5wdXNoKHV0aWwuaW50ZXJzZWN0UmVjdChub2RlVywgcDIpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpeHVwRWRnZUxhYmVsQ29vcmRzKGcpIHtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgaWYgKGVkZ2UubGFiZWxwb3MgPT09ICdsJyB8fCBlZGdlLmxhYmVscG9zID09PSAncicpIHtcbiAgICAgICAgZWRnZS53aWR0aCAtPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlZGdlLmxhYmVscG9zKSB7XG4gICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgIGVkZ2UueCAtPSBlZGdlLndpZHRoIC8gMiArIGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgIGVkZ2UueCArPSBlZGdlLndpZHRoIC8gMiArIGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLnJldmVyc2VkKSB7XG4gICAgICBlZGdlLnBvaW50cy5yZXZlcnNlKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQm9yZGVyTm9kZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGlmIChnLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgICB2YXIgdCA9IGcubm9kZShub2RlLmJvcmRlclRvcCk7XG4gICAgICB2YXIgYiA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSk7XG4gICAgICB2YXIgbCA9IGcubm9kZShfLmxhc3Qobm9kZS5ib3JkZXJMZWZ0KSk7XG4gICAgICB2YXIgciA9IGcubm9kZShfLmxhc3Qobm9kZS5ib3JkZXJSaWdodCkpO1xuXG4gICAgICBub2RlLndpZHRoID0gTWF0aC5hYnMoci54IC0gbC54KTtcbiAgICAgIG5vZGUuaGVpZ2h0ID0gTWF0aC5hYnMoYi55IC0gdC55KTtcbiAgICAgIG5vZGUueCA9IGwueCArIG5vZGUud2lkdGggLyAyO1xuICAgICAgbm9kZS55ID0gdC55ICsgbm9kZS5oZWlnaHQgLyAyO1xuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSAnYm9yZGVyJykge1xuICAgICAgZy5yZW1vdmVOb2RlKHYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGZFZGdlcyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUudiA9PT0gZS53KSB7XG4gICAgICB2YXIgbm9kZSA9IGcubm9kZShlLnYpO1xuICAgICAgaWYgKCFub2RlLnNlbGZFZGdlcykge1xuICAgICAgICBub2RlLnNlbGZFZGdlcyA9IFtdO1xuICAgICAgfVxuICAgICAgbm9kZS5zZWxmRWRnZXMucHVzaCh7IGU6IGUsIGxhYmVsOiBnLmVkZ2UoZSkgfSk7XG4gICAgICBnLnJlbW92ZUVkZ2UoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U2VsZkVkZ2VzKGcpIHtcbiAgdmFyIGxheWVycyA9IHV0aWwuYnVpbGRMYXllck1hdHJpeChnKTtcbiAgXy5mb3JFYWNoKGxheWVycywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgdmFyIG9yZGVyU2hpZnQgPSAwO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgICAgbm9kZS5vcmRlciA9IGkgKyBvcmRlclNoaWZ0O1xuICAgICAgXy5mb3JFYWNoKG5vZGUuc2VsZkVkZ2VzLCBmdW5jdGlvbiAoc2VsZkVkZ2UpIHtcbiAgICAgICAgdXRpbC5hZGREdW1teU5vZGUoXG4gICAgICAgICAgZyxcbiAgICAgICAgICAnc2VsZmVkZ2UnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoOiBzZWxmRWRnZS5sYWJlbC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogc2VsZkVkZ2UubGFiZWwuaGVpZ2h0LFxuICAgICAgICAgICAgcmFuazogbm9kZS5yYW5rLFxuICAgICAgICAgICAgb3JkZXI6IGkgKyArK29yZGVyU2hpZnQsXG4gICAgICAgICAgICBlOiBzZWxmRWRnZS5lLFxuICAgICAgICAgICAgbGFiZWw6IHNlbGZFZGdlLmxhYmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ19zZSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIG5vZGUuc2VsZkVkZ2VzO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGlmIChub2RlLmR1bW15ID09PSAnc2VsZmVkZ2UnKSB7XG4gICAgICB2YXIgc2VsZk5vZGUgPSBnLm5vZGUobm9kZS5lLnYpO1xuICAgICAgdmFyIHggPSBzZWxmTm9kZS54ICsgc2VsZk5vZGUud2lkdGggLyAyO1xuICAgICAgdmFyIHkgPSBzZWxmTm9kZS55O1xuICAgICAgdmFyIGR4ID0gbm9kZS54IC0geDtcbiAgICAgIHZhciBkeSA9IHNlbGZOb2RlLmhlaWdodCAvIDI7XG4gICAgICBnLnNldEVkZ2Uobm9kZS5lLCBub2RlLmxhYmVsKTtcbiAgICAgIGcucmVtb3ZlTm9kZSh2KTtcbiAgICAgIG5vZGUubGFiZWwucG9pbnRzID0gW1xuICAgICAgICB7IHg6IHggKyAoMiAqIGR4KSAvIDMsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyAoNSAqIGR4KSAvIDYsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyBkeCwgeTogeSB9LFxuICAgICAgICB7IHg6IHggKyAoNSAqIGR4KSAvIDYsIHk6IHkgKyBkeSB9LFxuICAgICAgICB7IHg6IHggKyAoMiAqIGR4KSAvIDMsIHk6IHkgKyBkeSB9LFxuICAgICAgXTtcbiAgICAgIG5vZGUubGFiZWwueCA9IG5vZGUueDtcbiAgICAgIG5vZGUubGFiZWwueSA9IG5vZGUueTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosIGF0dHJzKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyhfLnBpY2sob2JqLCBhdHRycyksIE51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhdHRycykge1xuICB2YXIgbmV3QXR0cnMgPSB7fTtcbiAgXy5mb3JFYWNoKGF0dHJzLCBmdW5jdGlvbiAodiwgaykge1xuICAgIG5ld0F0dHJzW2sudG9Mb3dlckNhc2UoKV0gPSB2O1xuICB9KTtcbiAgcmV0dXJuIG5ld0F0dHJzO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBhY3ljbGljIGZyb20gJy4vYWN5Y2xpYy5qcyc7XG5pbXBvcnQgeyBsYXlvdXQgfSBmcm9tICcuL2xheW91dC5qcyc7XG5pbXBvcnQgKiBhcyBub3JtYWxpemUgZnJvbSAnLi9ub3JtYWxpemUuanMnO1xuaW1wb3J0IHsgcmFuayB9IGZyb20gJy4vcmFuay9pbmRleC5qcyc7XG5cbmV4cG9ydCB7IGFjeWNsaWMsIG5vcm1hbGl6ZSwgcmFuaywgbGF5b3V0IH07XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi9ncmFwaC5qcyc7XG5cbmV4cG9ydCB7IHdyaXRlLCByZWFkIH07XG5cbmZ1bmN0aW9uIHdyaXRlKGcpIHtcbiAgdmFyIGpzb24gPSB7XG4gICAgb3B0aW9uczoge1xuICAgICAgZGlyZWN0ZWQ6IGcuaXNEaXJlY3RlZCgpLFxuICAgICAgbXVsdGlncmFwaDogZy5pc011bHRpZ3JhcGgoKSxcbiAgICAgIGNvbXBvdW5kOiBnLmlzQ29tcG91bmQoKSxcbiAgICB9LFxuICAgIG5vZGVzOiB3cml0ZU5vZGVzKGcpLFxuICAgIGVkZ2VzOiB3cml0ZUVkZ2VzKGcpLFxuICB9O1xuICBpZiAoIV8uaXNVbmRlZmluZWQoZy5ncmFwaCgpKSkge1xuICAgIGpzb24udmFsdWUgPSBfLmNsb25lKGcuZ3JhcGgoKSk7XG4gIH1cbiAgcmV0dXJuIGpzb247XG59XG5cbmZ1bmN0aW9uIHdyaXRlTm9kZXMoZykge1xuICByZXR1cm4gXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlVmFsdWUgPSBnLm5vZGUodik7XG4gICAgdmFyIHBhcmVudCA9IGcucGFyZW50KHYpO1xuICAgIHZhciBub2RlID0geyB2OiB2IH07XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKG5vZGVWYWx1ZSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSBub2RlVmFsdWU7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJlbnQpKSB7XG4gICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZUVkZ2VzKGcpIHtcbiAgcmV0dXJuIF8ubWFwKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZVZhbHVlID0gZy5lZGdlKGUpO1xuICAgIHZhciBlZGdlID0geyB2OiBlLnYsIHc6IGUudyB9O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlLm5hbWUpKSB7XG4gICAgICBlZGdlLm5hbWUgPSBlLm5hbWU7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChlZGdlVmFsdWUpKSB7XG4gICAgICBlZGdlLnZhbHVlID0gZWRnZVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWQoanNvbikge1xuICB2YXIgZyA9IG5ldyBHcmFwaChqc29uLm9wdGlvbnMpLnNldEdyYXBoKGpzb24udmFsdWUpO1xuICBfLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgZy5zZXROb2RlKGVudHJ5LnYsIGVudHJ5LnZhbHVlKTtcbiAgICBpZiAoZW50cnkucGFyZW50KSB7XG4gICAgICBnLnNldFBhcmVudChlbnRyeS52LCBlbnRyeS5wYXJlbnQpO1xuICAgIH1cbiAgfSk7XG4gIF8uZWFjaChqc29uLmVkZ2VzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBnLnNldEVkZ2UoeyB2OiBlbnRyeS52LCB3OiBlbnRyeS53LCBuYW1lOiBlbnRyeS5uYW1lIH0sIGVudHJ5LnZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBnO1xufVxuIiwKICAgICJpbXBvcnQge1xuICBjbGVhcixcbiAgY2xlYXIyLFxuICBjbGVhcjMsXG4gIGluc2VydENsdXN0ZXIsXG4gIGluc2VydEVkZ2UsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgaW5zZXJ0Tm9kZSxcbiAgbWFya2Vyc19kZWZhdWx0LFxuICBwb3NpdGlvbkVkZ2VMYWJlbCxcbiAgcG9zaXRpb25Ob2RlLFxuICBzZXROb2RlRWxlbSxcbiAgdXBkYXRlTm9kZUJvdW5kc1xufSBmcm9tIFwiLi9jaHVuay1ST0tZVVZDVS5tanNcIjtcbmltcG9ydCB7XG4gIGdldFN1YkdyYXBoVGl0bGVNYXJnaW5zXG59IGZyb20gXCIuL2NodW5rLTIzQVRNWlhWLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2dcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9sYXlvdXQtYWxnb3JpdGhtcy9kYWdyZS9pbmRleC5qc1xuaW1wb3J0IHsgbGF5b3V0IGFzIGRhZ3JlTGF5b3V0IH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWJKc29uMiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2pzb24uanNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliMiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9sYXlvdXQtYWxnb3JpdGhtcy9kYWdyZS9tZXJtYWlkLWdyYXBobGliLmpzXG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG52YXIgY2x1c3RlckRiID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBkZXNjZW5kYW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcGFyZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgY2xlYXI0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRlc2NlbmRhbnRzLmNsZWFyKCk7XG4gIHBhcmVudHMuY2xlYXIoKTtcbiAgY2x1c3RlckRiLmNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIGlzRGVzY2VuZGFudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkLCBhbmNlc3RvcklkKSA9PiB7XG4gIGNvbnN0IGFuY2VzdG9yRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50cy5nZXQoYW5jZXN0b3JJZCkgfHwgW107XG4gIGxvZy50cmFjZShcIkluIGlzRGVzY2VuZGFudFwiLCBhbmNlc3RvcklkLCBcIiBcIiwgaWQsIFwiID0gXCIsIGFuY2VzdG9yRGVzY2VuZGFudHMuaW5jbHVkZXMoaWQpKTtcbiAgcmV0dXJuIGFuY2VzdG9yRGVzY2VuZGFudHMuaW5jbHVkZXMoaWQpO1xufSwgXCJpc0Rlc2NlbmRhbnRcIik7XG52YXIgZWRnZUluQ2x1c3RlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVkZ2UsIGNsdXN0ZXJJZCkgPT4ge1xuICBjb25zdCBjbHVzdGVyRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50cy5nZXQoY2x1c3RlcklkKSB8fCBbXTtcbiAgbG9nLmluZm8oXCJEZXNjZW5kYW50cyBvZiBcIiwgY2x1c3RlcklkLCBcIiBpcyBcIiwgY2x1c3RlckRlc2NlbmRhbnRzKTtcbiAgbG9nLmluZm8oXCJFZGdlIGlzIFwiLCBlZGdlKTtcbiAgaWYgKGVkZ2UudiA9PT0gY2x1c3RlcklkIHx8IGVkZ2UudyA9PT0gY2x1c3RlcklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghY2x1c3RlckRlc2NlbmRhbnRzKSB7XG4gICAgbG9nLmRlYnVnKFwiVGlsdCwgXCIsIGNsdXN0ZXJJZCwgXCIsbm90IGluIGRlc2NlbmRhbnRzXCIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY2x1c3RlckRlc2NlbmRhbnRzLmluY2x1ZGVzKGVkZ2UudikgfHwgaXNEZXNjZW5kYW50KGVkZ2UudiwgY2x1c3RlcklkKSB8fCBpc0Rlc2NlbmRhbnQoZWRnZS53LCBjbHVzdGVySWQpIHx8IGNsdXN0ZXJEZXNjZW5kYW50cy5pbmNsdWRlcyhlZGdlLncpO1xufSwgXCJlZGdlSW5DbHVzdGVyXCIpO1xudmFyIGNvcHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbHVzdGVySWQsIGdyYXBoLCBuZXdHcmFwaCwgcm9vdElkKSA9PiB7XG4gIGxvZy53YXJuKFxuICAgIFwiQ29weWluZyBjaGlsZHJlbiBvZiBcIixcbiAgICBjbHVzdGVySWQsXG4gICAgXCJyb290XCIsXG4gICAgcm9vdElkLFxuICAgIFwiZGF0YVwiLFxuICAgIGdyYXBoLm5vZGUoY2x1c3RlcklkKSxcbiAgICByb290SWRcbiAgKTtcbiAgY29uc3Qgbm9kZXMgPSBncmFwaC5jaGlsZHJlbihjbHVzdGVySWQpIHx8IFtdO1xuICBpZiAoY2x1c3RlcklkICE9PSByb290SWQpIHtcbiAgICBub2Rlcy5wdXNoKGNsdXN0ZXJJZCk7XG4gIH1cbiAgbG9nLndhcm4oXCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkXCIsIGNsdXN0ZXJJZCwgXCJub2Rlc1wiLCBub2Rlcyk7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBpZiAoZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgY29weShub2RlLCBncmFwaCwgbmV3R3JhcGgsIHJvb3RJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBncmFwaC5ub2RlKG5vZGUpO1xuICAgICAgbG9nLmluZm8oXCJjcCBcIiwgbm9kZSwgXCIgdG8gXCIsIHJvb3RJZCwgXCIgd2l0aCBwYXJlbnQgXCIsIGNsdXN0ZXJJZCk7XG4gICAgICBuZXdHcmFwaC5zZXROb2RlKG5vZGUsIGRhdGEpO1xuICAgICAgaWYgKHJvb3RJZCAhPT0gZ3JhcGgucGFyZW50KG5vZGUpKSB7XG4gICAgICAgIGxvZy53YXJuKFwiU2V0dGluZyBwYXJlbnRcIiwgbm9kZSwgZ3JhcGgucGFyZW50KG5vZGUpKTtcbiAgICAgICAgbmV3R3JhcGguc2V0UGFyZW50KG5vZGUsIGdyYXBoLnBhcmVudChub2RlKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2x1c3RlcklkICE9PSByb290SWQgJiYgbm9kZSAhPT0gY2x1c3RlcklkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlNldHRpbmcgcGFyZW50XCIsIG5vZGUsIGNsdXN0ZXJJZCk7XG4gICAgICAgIG5ld0dyYXBoLnNldFBhcmVudChub2RlLCBjbHVzdGVySWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oXCJJbiBjb3B5IFwiLCBjbHVzdGVySWQsIFwicm9vdFwiLCByb290SWQsIFwiZGF0YVwiLCBncmFwaC5ub2RlKGNsdXN0ZXJJZCksIHJvb3RJZCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBcIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT1cIixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIFwiY2x1c3RlciE9PXJvb3RJZFwiLFxuICAgICAgICAgIGNsdXN0ZXJJZCAhPT0gcm9vdElkLFxuICAgICAgICAgIFwibm9kZSE9PWNsdXN0ZXJJZFwiLFxuICAgICAgICAgIG5vZGUgIT09IGNsdXN0ZXJJZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZWRnZXMgPSBncmFwaC5lZGdlcyhub2RlKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNvcHlpbmcgRWRnZXNcIiwgZWRnZXMpO1xuICAgICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhcIkVkZ2VcIiwgZWRnZSk7XG4gICAgICAgIGNvbnN0IGRhdGEyID0gZ3JhcGguZWRnZShlZGdlLnYsIGVkZ2UudywgZWRnZS5uYW1lKTtcbiAgICAgICAgbG9nLmluZm8oXCJFZGdlIGRhdGFcIiwgZGF0YTIsIHJvb3RJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVkZ2VJbkNsdXN0ZXIoZWRnZSwgcm9vdElkKSkge1xuICAgICAgICAgICAgbG9nLmluZm8oXCJDb3B5aW5nIGFzIFwiLCBlZGdlLnYsIGVkZ2UudywgZGF0YTIsIGVkZ2UubmFtZSk7XG4gICAgICAgICAgICBuZXdHcmFwaC5zZXRFZGdlKGVkZ2UudiwgZWRnZS53LCBkYXRhMiwgZWRnZS5uYW1lKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwibmV3R3JhcGggZWRnZXMgXCIsIG5ld0dyYXBoLmVkZ2VzKCksIG5ld0dyYXBoLmVkZ2UobmV3R3JhcGguZWRnZXMoKVswXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgICAgXCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgXCIsXG4gICAgICAgICAgICAgIGVkZ2UudixcbiAgICAgICAgICAgICAgXCItLT5cIixcbiAgICAgICAgICAgICAgZWRnZS53LFxuICAgICAgICAgICAgICBcIiByb290SWQ6IFwiLFxuICAgICAgICAgICAgICByb290SWQsXG4gICAgICAgICAgICAgIFwiIGNsdXN0ZXJJZDpcIixcbiAgICAgICAgICAgICAgY2x1c3RlcklkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcIlJlbW92aW5nIG5vZGVcIiwgbm9kZSk7XG4gICAgZ3JhcGgucmVtb3ZlTm9kZShub2RlKTtcbiAgfSk7XG59LCBcImNvcHlcIik7XG52YXIgZXh0cmFjdERlc2NlbmRhbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQsIGdyYXBoKSA9PiB7XG4gIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICBsZXQgcmVzID0gWy4uLmNoaWxkcmVuXTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHBhcmVudHMuc2V0KGNoaWxkLCBpZCk7XG4gICAgcmVzID0gWy4uLnJlcywgLi4uZXh0cmFjdERlc2NlbmRhbnRzKGNoaWxkLCBncmFwaCldO1xuICB9XG4gIHJldHVybiByZXM7XG59LCBcImV4dHJhY3REZXNjZW5kYW50c1wiKTtcbnZhciBmaW5kQ29tbW9uRWRnZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChncmFwaCwgaWQxLCBpZDIpID0+IHtcbiAgY29uc3QgZWRnZXMxID0gZ3JhcGguZWRnZXMoKS5maWx0ZXIoKGVkZ2UpID0+IGVkZ2UudiA9PT0gaWQxIHx8IGVkZ2UudyA9PT0gaWQxKTtcbiAgY29uc3QgZWRnZXMyID0gZ3JhcGguZWRnZXMoKS5maWx0ZXIoKGVkZ2UpID0+IGVkZ2UudiA9PT0gaWQyIHx8IGVkZ2UudyA9PT0gaWQyKTtcbiAgY29uc3QgZWRnZXMxUHJpbSA9IGVkZ2VzMS5tYXAoKGVkZ2UpID0+IHtcbiAgICByZXR1cm4geyB2OiBlZGdlLnYgPT09IGlkMSA/IGlkMiA6IGVkZ2UudiwgdzogZWRnZS53ID09PSBpZDEgPyBpZDEgOiBlZGdlLncgfTtcbiAgfSk7XG4gIGNvbnN0IGVkZ2VzMlByaW0gPSBlZGdlczIubWFwKChlZGdlKSA9PiB7XG4gICAgcmV0dXJuIHsgdjogZWRnZS52LCB3OiBlZGdlLncgfTtcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGVkZ2VzMVByaW0uZmlsdGVyKChlZGdlSW4xKSA9PiB7XG4gICAgcmV0dXJuIGVkZ2VzMlByaW0uc29tZSgoZWRnZSkgPT4gZWRnZUluMS52ID09PSBlZGdlLnYgJiYgZWRnZUluMS53ID09PSBlZGdlLncpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sIFwiZmluZENvbW1vbkVkZ2VzXCIpO1xudmFyIGZpbmROb25DbHVzdGVyQ2hpbGQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgZ3JhcGgsIGNsdXN0ZXJJZCkgPT4ge1xuICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKGlkKTtcbiAgbG9nLnRyYWNlKFwiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkIFwiLCBpZCwgY2hpbGRyZW4pO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBsZXQgcmVzZXJ2ZTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGNvbnN0IF9pZCA9IGZpbmROb25DbHVzdGVyQ2hpbGQoY2hpbGQsIGdyYXBoLCBjbHVzdGVySWQpO1xuICAgIGNvbnN0IGNvbW1vbkVkZ2VzID0gZmluZENvbW1vbkVkZ2VzKGdyYXBoLCBjbHVzdGVySWQsIF9pZCk7XG4gICAgaWYgKF9pZCkge1xuICAgICAgaWYgKGNvbW1vbkVkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzZXJ2ZSA9IF9pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfaWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNlcnZlO1xufSwgXCJmaW5kTm9uQ2x1c3RlckNoaWxkXCIpO1xudmFyIGdldEFuY2hvcklkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQpID0+IHtcbiAgaWYgKCFjbHVzdGVyRGIuaGFzKGlkKSkge1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBpZiAoIWNsdXN0ZXJEYi5nZXQoaWQpLmV4dGVybmFsQ29ubmVjdGlvbnMpIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgaWYgKGNsdXN0ZXJEYi5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJEYi5nZXQoaWQpLmlkO1xuICB9XG4gIHJldHVybiBpZDtcbn0sIFwiZ2V0QW5jaG9ySWRcIik7XG52YXIgYWRqdXN0Q2x1c3RlcnNBbmRFZGdlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGdyYXBoLCBkZXB0aCkgPT4ge1xuICBpZiAoIWdyYXBoIHx8IGRlcHRoID4gMTApIHtcbiAgICBsb2cuZGVidWcoXCJPcHRpbmcgb3V0LCBubyBncmFwaCBcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhcIk9wdGluZyBpbiwgZ3JhcGggXCIpO1xuICB9XG4gIGdyYXBoLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgXCJDbHVzdGVyIGlkZW50aWZpZWRcIixcbiAgICAgICAgaWQsXG4gICAgICAgIFwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiBcIixcbiAgICAgICAgZmluZE5vbkNsdXN0ZXJDaGlsZChpZCwgZ3JhcGgsIGlkKVxuICAgICAgKTtcbiAgICAgIGRlc2NlbmRhbnRzLnNldChpZCwgZXh0cmFjdERlc2NlbmRhbnRzKGlkLCBncmFwaCkpO1xuICAgICAgY2x1c3RlckRiLnNldChpZCwgeyBpZDogZmluZE5vbkNsdXN0ZXJDaGlsZChpZCwgZ3JhcGgsIGlkKSwgY2x1c3RlckRhdGE6IGdyYXBoLm5vZGUoaWQpIH0pO1xuICAgIH1cbiAgfSk7XG4gIGdyYXBoLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICAgIGNvbnN0IGVkZ2VzID0gZ3JhcGguZWRnZXMoKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLmRlYnVnKFwiQ2x1c3RlciBpZGVudGlmaWVkXCIsIGlkLCBkZXNjZW5kYW50cyk7XG4gICAgICBlZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGQxID0gaXNEZXNjZW5kYW50KGVkZ2UudiwgaWQpO1xuICAgICAgICBjb25zdCBkMiA9IGlzRGVzY2VuZGFudChlZGdlLncsIGlkKTtcbiAgICAgICAgaWYgKGQxIF4gZDIpIHtcbiAgICAgICAgICBsb2cud2FybihcIkVkZ2U6IFwiLCBlZGdlLCBcIiBsZWF2ZXMgY2x1c3RlciBcIiwgaWQpO1xuICAgICAgICAgIGxvZy53YXJuKFwiRGVzY2VuZGFudHMgb2YgWFhYIFwiLCBpZCwgXCI6IFwiLCBkZXNjZW5kYW50cy5nZXQoaWQpKTtcbiAgICAgICAgICBjbHVzdGVyRGIuZ2V0KGlkKS5leHRlcm5hbENvbm5lY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vdCBhIGNsdXN0ZXIgXCIsIGlkLCBkZXNjZW5kYW50cyk7XG4gICAgfVxuICB9KTtcbiAgZm9yIChsZXQgaWQgb2YgY2x1c3RlckRiLmtleXMoKSkge1xuICAgIGNvbnN0IG5vbkNsdXN0ZXJDaGlsZCA9IGNsdXN0ZXJEYi5nZXQoaWQpLmlkO1xuICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudChub25DbHVzdGVyQ2hpbGQpO1xuICAgIGlmIChwYXJlbnQgIT09IGlkICYmIGNsdXN0ZXJEYi5oYXMocGFyZW50KSAmJiAhY2x1c3RlckRiLmdldChwYXJlbnQpLmV4dGVybmFsQ29ubmVjdGlvbnMpIHtcbiAgICAgIGNsdXN0ZXJEYi5nZXQoaWQpLmlkID0gcGFyZW50O1xuICAgIH1cbiAgfVxuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgIGxldCB2ID0gZS52O1xuICAgIGxldCB3ID0gZS53O1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJGaXggWFhYXCIsXG4gICAgICBjbHVzdGVyRGIsXG4gICAgICBcImlkczpcIixcbiAgICAgIGUudixcbiAgICAgIGUudyxcbiAgICAgIFwiVHJhbnNsYXRpbmc6IFwiLFxuICAgICAgY2x1c3RlckRiLmdldChlLnYpLFxuICAgICAgXCIgLS0tIFwiLFxuICAgICAgY2x1c3RlckRiLmdldChlLncpXG4gICAgKTtcbiAgICBpZiAoY2x1c3RlckRiLmdldChlLnYpIHx8IGNsdXN0ZXJEYi5nZXQoZS53KSkge1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyeWluZyAtIHJlbW92aW5nIFhYWFwiLCBlLnYsIGUudywgZS5uYW1lKTtcbiAgICAgIHYgPSBnZXRBbmNob3JJZChlLnYpO1xuICAgICAgdyA9IGdldEFuY2hvcklkKGUudyk7XG4gICAgICBncmFwaC5yZW1vdmVFZGdlKGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgaWYgKHYgIT09IGUudikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBncmFwaC5wYXJlbnQodik7XG4gICAgICAgIGNsdXN0ZXJEYi5nZXQocGFyZW50KS5leHRlcm5hbENvbm5lY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgZWRnZS5mcm9tQ2x1c3RlciA9IGUudjtcbiAgICAgIH1cbiAgICAgIGlmICh3ICE9PSBlLncpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ3JhcGgucGFyZW50KHcpO1xuICAgICAgICBjbHVzdGVyRGIuZ2V0KHBhcmVudCkuZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIGVkZ2UudG9DbHVzdGVyID0gZS53O1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oXCJGaXggUmVwbGFjaW5nIHdpdGggWFhYXCIsIHYsIHcsIGUubmFtZSk7XG4gICAgICBncmFwaC5zZXRFZGdlKHYsIHcsIGVkZ2UsIGUubmFtZSk7XG4gICAgfVxuICB9KTtcbiAgbG9nLndhcm4oXCJBZGp1c3RlZCBHcmFwaFwiLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpKTtcbiAgZXh0cmFjdG9yKGdyYXBoLCAwKTtcbiAgbG9nLnRyYWNlKGNsdXN0ZXJEYik7XG59LCBcImFkanVzdENsdXN0ZXJzQW5kRWRnZXNcIik7XG52YXIgZXh0cmFjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIGRlcHRoKSA9PiB7XG4gIGxvZy53YXJuKFwiZXh0cmFjdG9yIC0gXCIsIGRlcHRoLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpLCBncmFwaC5jaGlsZHJlbihcIkRcIikpO1xuICBpZiAoZGVwdGggPiAxMCkge1xuICAgIGxvZy5lcnJvcihcIkJhaWxpbmcgb3V0XCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbm9kZXMgPSBncmFwaC5ub2RlcygpO1xuICBsZXQgaGFzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihub2RlKTtcbiAgICBoYXNDaGlsZHJlbiA9IGhhc0NoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gIH1cbiAgaWYgKCFoYXNDaGlsZHJlbikge1xuICAgIGxvZy5kZWJ1ZyhcIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuXCIsIGdyYXBoLm5vZGVzKCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2cuZGVidWcoXCJOb2RlcyA9IFwiLCBub2RlcywgZGVwdGgpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcIkV4dHJhY3Rpbmcgbm9kZVwiLFxuICAgICAgbm9kZSxcbiAgICAgIGNsdXN0ZXJEYixcbiAgICAgIGNsdXN0ZXJEYi5oYXMobm9kZSkgJiYgIWNsdXN0ZXJEYi5nZXQobm9kZSkuZXh0ZXJuYWxDb25uZWN0aW9ucyxcbiAgICAgICFncmFwaC5wYXJlbnQobm9kZSksXG4gICAgICBncmFwaC5ub2RlKG5vZGUpLFxuICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgXCIgRGVwdGggXCIsXG4gICAgICBkZXB0aFxuICAgICk7XG4gICAgaWYgKCFjbHVzdGVyRGIuaGFzKG5vZGUpKSB7XG4gICAgICBsb2cuZGVidWcoXCJOb3QgYSBjbHVzdGVyXCIsIG5vZGUsIGRlcHRoKTtcbiAgICB9IGVsc2UgaWYgKCFjbHVzdGVyRGIuZ2V0KG5vZGUpLmV4dGVybmFsQ29ubmVjdGlvbnMgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGRlcHRoXG4gICAgICApO1xuICAgICAgY29uc3QgZ3JhcGhTZXR0aW5ncyA9IGdyYXBoLmdyYXBoKCk7XG4gICAgICBsZXQgZGlyID0gZ3JhcGhTZXR0aW5ncy5yYW5rZGlyID09PSBcIlRCXCIgPyBcIkxSXCIgOiBcIlRCXCI7XG4gICAgICBpZiAoY2x1c3RlckRiLmdldChub2RlKT8uY2x1c3RlckRhdGE/LmRpcikge1xuICAgICAgICBkaXIgPSBjbHVzdGVyRGIuZ2V0KG5vZGUpLmNsdXN0ZXJEYXRhLmRpcjtcbiAgICAgICAgbG9nLndhcm4oXCJGaXhpbmcgZGlyXCIsIGNsdXN0ZXJEYi5nZXQobm9kZSkuY2x1c3RlckRhdGEuZGlyLCBkaXIpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2x1c3RlckdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgICAgY29tcG91bmQ6IHRydWVcbiAgICAgIH0pLnNldEdyYXBoKHtcbiAgICAgICAgcmFua2RpcjogZGlyLFxuICAgICAgICBub2Rlc2VwOiA1MCxcbiAgICAgICAgcmFua3NlcDogNTAsXG4gICAgICAgIG1hcmdpbng6IDgsXG4gICAgICAgIG1hcmdpbnk6IDhcbiAgICAgIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuICAgICAgbG9nLndhcm4oXCJPbGQgZ3JhcGggYmVmb3JlIGNvcHlcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gICAgICBjb3B5KG5vZGUsIGdyYXBoLCBjbHVzdGVyR3JhcGgsIG5vZGUpO1xuICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLCB7XG4gICAgICAgIGNsdXN0ZXJOb2RlOiB0cnVlLFxuICAgICAgICBpZDogbm9kZSxcbiAgICAgICAgY2x1c3RlckRhdGE6IGNsdXN0ZXJEYi5nZXQobm9kZSkuY2x1c3RlckRhdGEsXG4gICAgICAgIGxhYmVsOiBjbHVzdGVyRGIuZ2V0KG5vZGUpLmxhYmVsLFxuICAgICAgICBncmFwaDogY2x1c3RlckdyYXBoXG4gICAgICB9KTtcbiAgICAgIGxvZy53YXJuKFwiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKFwiLCBub2RlLCBcIilcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGNsdXN0ZXJHcmFwaCkpO1xuICAgICAgbG9nLmRlYnVnKFwiT2xkIGdyYXBoIGFmdGVyIGNvcHlcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBcIkNsdXN0ZXIgKiogXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIFwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOlwiLFxuICAgICAgICAhY2x1c3RlckRiLmdldChub2RlKS5leHRlcm5hbENvbm5lY3Rpb25zLFxuICAgICAgICBcIiBubyBwYXJlbnQ6IFwiLFxuICAgICAgICAhZ3JhcGgucGFyZW50KG5vZGUpLFxuICAgICAgICBcIiBjaGlsZHJlbiBcIixcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCxcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgICBkZXB0aFxuICAgICAgKTtcbiAgICAgIGxvZy5kZWJ1ZyhjbHVzdGVyRGIpO1xuICAgIH1cbiAgfVxuICBub2RlcyA9IGdyYXBoLm5vZGVzKCk7XG4gIGxvZy53YXJuKFwiTmV3IGxpc3Qgb2Ygbm9kZXNcIiwgbm9kZXMpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ3JhcGgubm9kZShub2RlKTtcbiAgICBsb2cud2FybihcIiBOb3cgbmV4dCBsZXZlbFwiLCBub2RlLCBkYXRhKTtcbiAgICBpZiAoZGF0YT8uY2x1c3Rlck5vZGUpIHtcbiAgICAgIGV4dHJhY3RvcihkYXRhLmdyYXBoLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgfVxufSwgXCJleHRyYWN0b3JcIik7XG52YXIgc29ydGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIG5vZGVzKSA9PiB7XG4gIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oW10sIG5vZGVzKTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4obm9kZSk7XG4gICAgY29uc3Qgc29ydGVkID0gc29ydGVyKGdyYXBoLCBjaGlsZHJlbik7XG4gICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uc29ydGVkXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59LCBcInNvcnRlclwiKTtcbnZhciBzb3J0Tm9kZXNCeUhpZXJhcmNoeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGdyYXBoKSA9PiBzb3J0ZXIoZ3JhcGgsIGdyYXBoLmNoaWxkcmVuKCkpLCBcInNvcnROb2Rlc0J5SGllcmFyY2h5XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvbGF5b3V0LWFsZ29yaXRobXMvZGFncmUvaW5kZXguanNcbnZhciByZWN1cnNpdmVSZW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChfZWxlbSwgZ3JhcGgsIGRpYWdyYW1UeXBlLCBpZCwgcGFyZW50Q2x1c3Rlciwgc2l0ZUNvbmZpZykgPT4ge1xuICBsb2cud2FybihcIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6WEFYXCIsIGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpLCBwYXJlbnRDbHVzdGVyKTtcbiAgY29uc3QgZGlyID0gZ3JhcGguZ3JhcGgoKS5yYW5rZGlyO1xuICBsb2cudHJhY2UoXCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjpcIiwgZGlyKTtcbiAgY29uc3QgZWxlbSA9IF9lbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwicm9vdFwiKTtcbiAgaWYgKCFncmFwaC5ub2RlcygpKSB7XG4gICAgbG9nLmluZm8oXCJObyBub2RlcyBmb3VuZCBmb3JcIiwgZ3JhcGgpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIHJlbmRlciBYWFhcIiwgZ3JhcGgubm9kZXMoKSk7XG4gIH1cbiAgaWYgKGdyYXBoLmVkZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIGVkZ2VzXCIsIGdyYXBoLmVkZ2UoZ3JhcGguZWRnZXMoKVswXSkpO1xuICB9XG4gIGNvbnN0IGNsdXN0ZXJzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNsdXN0ZXJzXCIpO1xuICBjb25zdCBlZGdlUGF0aHMgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVBhdGhzXCIpO1xuICBjb25zdCBlZGdlTGFiZWxzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VMYWJlbHNcIik7XG4gIGNvbnN0IG5vZGVzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGVzXCIpO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBncmFwaC5ub2RlcygpLm1hcChhc3luYyBmdW5jdGlvbih2KSB7XG4gICAgICBjb25zdCBub2RlID0gZ3JhcGgubm9kZSh2KTtcbiAgICAgIGlmIChwYXJlbnRDbHVzdGVyICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFyZW50Q2x1c3Rlci5jbHVzdGVyRGF0YSkpO1xuICAgICAgICBsb2cudHJhY2UoXG4gICAgICAgICAgXCJTZXR0aW5nIGRhdGEgZm9yIHBhcmVudCBjbHVzdGVyIFhYWFxcbiBOb2RlLmlkID0gXCIsXG4gICAgICAgICAgdixcbiAgICAgICAgICBcIlxcbiBkYXRhPVwiLFxuICAgICAgICAgIGRhdGEuaGVpZ2h0LFxuICAgICAgICAgIFwiXFxuUGFyZW50IGNsdXN0ZXJcIixcbiAgICAgICAgICBwYXJlbnRDbHVzdGVyLmhlaWdodFxuICAgICAgICApO1xuICAgICAgICBncmFwaC5zZXROb2RlKHBhcmVudENsdXN0ZXIuaWQsIGRhdGEpO1xuICAgICAgICBpZiAoIWdyYXBoLnBhcmVudCh2KSkge1xuICAgICAgICAgIGxvZy50cmFjZShcIlNldHRpbmcgcGFyZW50XCIsIHYsIHBhcmVudENsdXN0ZXIuaWQpO1xuICAgICAgICAgIGdyYXBoLnNldFBhcmVudCh2LCBwYXJlbnRDbHVzdGVyLmlkLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLmluZm8oXCIoSW5zZXJ0KSBOb2RlIFhYWFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLm5vZGUodikpKTtcbiAgICAgIGlmIChub2RlPy5jbHVzdGVyTm9kZSkge1xuICAgICAgICBsb2cuaW5mbyhcIkNsdXN0ZXIgaWRlbnRpZmllZCBYQlhcIiwgdiwgbm9kZS53aWR0aCwgZ3JhcGgubm9kZSh2KSk7XG4gICAgICAgIGNvbnN0IHsgcmFua3NlcCwgbm9kZXNlcCB9ID0gZ3JhcGguZ3JhcGgoKTtcbiAgICAgICAgbm9kZS5ncmFwaC5zZXRHcmFwaCh7XG4gICAgICAgICAgLi4ubm9kZS5ncmFwaC5ncmFwaCgpLFxuICAgICAgICAgIHJhbmtzZXA6IHJhbmtzZXAgKyAyNSxcbiAgICAgICAgICBub2Rlc2VwXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvID0gYXdhaXQgcmVjdXJzaXZlUmVuZGVyKFxuICAgICAgICAgIG5vZGVzLFxuICAgICAgICAgIG5vZGUuZ3JhcGgsXG4gICAgICAgICAgZGlhZ3JhbVR5cGUsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgZ3JhcGgubm9kZSh2KSxcbiAgICAgICAgICBzaXRlQ29uZmlnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0VsID0gby5lbGVtO1xuICAgICAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIG5ld0VsKTtcbiAgICAgICAgbm9kZS5kaWZmID0gby5kaWZmIHx8IDA7XG4gICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgIFwiTmV3IGNvbXBvdW5kIG5vZGUgYWZ0ZXIgcmVjdXJzaXZlIHJlbmRlciBYQVhcIixcbiAgICAgICAgICB2LFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAvLyBub2RlLFxuICAgICAgICAgIG5vZGUud2lkdGgsXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBub2RlLmhlaWdodFxuICAgICAgICAgIC8vIG5vZGUueCxcbiAgICAgICAgICAvLyBub2RlLnlcbiAgICAgICAgKTtcbiAgICAgICAgc2V0Tm9kZUVsZW0obmV3RWwsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2cudHJhY2UoXG4gICAgICAgICAgICBcIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhCWFwiLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIG5vZGUuaWQsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICAgIFwiR3JhcGg6XCIsXG4gICAgICAgICAgICBncmFwaFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nLnRyYWNlKGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpKTtcbiAgICAgICAgICBjbHVzdGVyRGIuc2V0KG5vZGUuaWQsIHsgaWQ6IGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpLCBub2RlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy50cmFjZShcIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhBWFwiLCB2LCBub2RlcywgZ3JhcGgubm9kZSh2KSwgZGlyKTtcbiAgICAgICAgICBhd2FpdCBpbnNlcnROb2RlKG5vZGVzLCBncmFwaC5ub2RlKHYpLCBkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgY29uc3QgcHJvY2Vzc0VkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZWRnZVByb21pc2VzID0gZ3JhcGguZWRnZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24oZSkge1xuICAgICAgY29uc3QgZWRnZSA9IGdyYXBoLmVkZ2UoZS52LCBlLncsIGUubmFtZSk7XG4gICAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgIGxvZy5pbmZvKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiLCBlLCBcIiBcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIFwiRml4XCIsXG4gICAgICAgIGNsdXN0ZXJEYixcbiAgICAgICAgXCJpZHM6XCIsXG4gICAgICAgIGUudixcbiAgICAgICAgZS53LFxuICAgICAgICBcIlRyYW5zbGF0aW5nOiBcIixcbiAgICAgICAgY2x1c3RlckRiLmdldChlLnYpLFxuICAgICAgICBjbHVzdGVyRGIuZ2V0KGUudylcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbnNlcnRFZGdlTGFiZWwoZWRnZUxhYmVscywgZWRnZSk7XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZWRnZVByb21pc2VzKTtcbiAgfSwgXCJwcm9jZXNzRWRnZXNcIik7XG4gIGF3YWl0IHByb2Nlc3NFZGdlcygpO1xuICBsb2cuaW5mbyhcIkdyYXBoIGJlZm9yZSBsYXlvdXQ6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGxvZy5pbmZvKFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFhYWFwiKTtcbiAgbG9nLmluZm8oXCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMgWFhYXCIpO1xuICBsb2cuaW5mbyhcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBYWFhcIik7XG4gIGRhZ3JlTGF5b3V0KGdyYXBoKTtcbiAgbG9nLmluZm8oXCJHcmFwaCBhZnRlciBsYXlvdXQ6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGxldCBkaWZmID0gMDtcbiAgbGV0IHsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgc29ydE5vZGVzQnlIaWVyYXJjaHkoZ3JhcGgpLm1hcChhc3luYyBmdW5jdGlvbih2KSB7XG4gICAgICBjb25zdCBub2RlID0gZ3JhcGgubm9kZSh2KTtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBcIlBvc2l0aW9uIFhCWCA9PiBcIiArIHYgKyBcIjogKFwiICsgbm9kZS54LFxuICAgICAgICBcIixcIiArIG5vZGUueSxcbiAgICAgICAgXCIpIHdpZHRoOiBcIixcbiAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgXCIgaGVpZ2h0OiBcIixcbiAgICAgICAgbm9kZS5oZWlnaHRcbiAgICAgICk7XG4gICAgICBpZiAobm9kZT8uY2x1c3Rlck5vZGUpIHtcbiAgICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgXCJBIHRhaW50ZWQgY2x1c3RlciBub2RlIFhCWDFcIixcbiAgICAgICAgICB2LFxuICAgICAgICAgIG5vZGUuaWQsXG4gICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICBub2RlLmhlaWdodCxcbiAgICAgICAgICBub2RlLngsXG4gICAgICAgICAgbm9kZS55LFxuICAgICAgICAgIGdyYXBoLnBhcmVudCh2KVxuICAgICAgICApO1xuICAgICAgICBjbHVzdGVyRGIuZ2V0KG5vZGUuaWQpLm5vZGUgPSBub2RlO1xuICAgICAgICBwb3NpdGlvbk5vZGUobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZ3JhcGguY2hpbGRyZW4odikubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgICAgXCJBIHB1cmUgY2x1c3RlciBub2RlIFhCWDFcIixcbiAgICAgICAgICAgIHYsXG4gICAgICAgICAgICBub2RlLmlkLFxuICAgICAgICAgICAgbm9kZS54LFxuICAgICAgICAgICAgbm9kZS55LFxuICAgICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICAgIG5vZGUuaGVpZ2h0LFxuICAgICAgICAgICAgZ3JhcGgucGFyZW50KHYpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2RlLmhlaWdodCArPSBzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW47XG4gICAgICAgICAgZ3JhcGgubm9kZShub2RlLnBhcmVudElkKTtcbiAgICAgICAgICBjb25zdCBoYWxmUGFkZGluZyA9IG5vZGU/LnBhZGRpbmcgLyAyIHx8IDA7XG4gICAgICAgICAgY29uc3QgbGFiZWxIZWlnaHQgPSBub2RlPy5sYWJlbEJCb3g/LmhlaWdodCB8fCAwO1xuICAgICAgICAgIGNvbnN0IG9mZnNldFkgPSBsYWJlbEhlaWdodCAtIGhhbGZQYWRkaW5nIHx8IDA7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiT2Zmc2V0WVwiLCBvZmZzZXRZLCBcImxhYmVsSGVpZ2h0XCIsIGxhYmVsSGVpZ2h0LCBcImhhbGZQYWRkaW5nXCIsIGhhbGZQYWRkaW5nKTtcbiAgICAgICAgICBhd2FpdCBpbnNlcnRDbHVzdGVyKGNsdXN0ZXJzLCBub2RlKTtcbiAgICAgICAgICBjbHVzdGVyRGIuZ2V0KG5vZGUuaWQpLm5vZGUgPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLm5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiAvIDI7XG4gICAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgICBcIkEgcmVndWxhciBub2RlIFhCWDEgLSB1c2luZyB0aGUgcGFkZGluZ1wiLFxuICAgICAgICAgICAgbm9kZS5pZCxcbiAgICAgICAgICAgIFwicGFyZW50XCIsXG4gICAgICAgICAgICBub2RlLnBhcmVudElkLFxuICAgICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICAgIG5vZGUuaGVpZ2h0LFxuICAgICAgICAgICAgbm9kZS54LFxuICAgICAgICAgICAgbm9kZS55LFxuICAgICAgICAgICAgXCJvZmZzZXRZXCIsXG4gICAgICAgICAgICBub2RlLm9mZnNldFksXG4gICAgICAgICAgICBcInBhcmVudFwiLFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgcGFyZW50Py5vZmZzZXRZLFxuICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcG9zaXRpb25Ob2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgZ3JhcGguZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBlZGdlID0gZ3JhcGguZWRnZShlKTtcbiAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGVkZ2UpLCBlZGdlKTtcbiAgICBlZGdlLnBvaW50cy5mb3JFYWNoKChwb2ludCkgPT4gcG9pbnQueSArPSBzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW4gLyAyKTtcbiAgICBjb25zdCBzdGFydE5vZGUgPSBncmFwaC5ub2RlKGUudik7XG4gICAgdmFyIGVuZE5vZGUgPSBncmFwaC5ub2RlKGUudyk7XG4gICAgY29uc3QgcGF0aHMgPSBpbnNlcnRFZGdlKGVkZ2VQYXRocywgZWRnZSwgY2x1c3RlckRiLCBkaWFncmFtVHlwZSwgc3RhcnROb2RlLCBlbmROb2RlLCBpZCk7XG4gICAgcG9zaXRpb25FZGdlTGFiZWwoZWRnZSwgcGF0aHMpO1xuICB9KTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBuID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyh2LCBuLnR5cGUsIG4uZGlmZik7XG4gICAgaWYgKG4uaXNHcm91cCkge1xuICAgICAgZGlmZiA9IG4uZGlmZjtcbiAgICB9XG4gIH0pO1xuICBsb2cud2FybihcIlJldHVybmluZyBmcm9tIHJlY3Vyc2l2ZSByZW5kZXIgWEFYXCIsIGVsZW0sIGRpZmYpO1xuICByZXR1cm4geyBlbGVtLCBkaWZmIH07XG59LCBcInJlY3Vyc2l2ZVJlbmRlclwiKTtcbnZhciByZW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChkYXRhNExheW91dCwgc3ZnKSA9PiB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IGdyYXBobGliMi5HcmFwaCh7XG4gICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICBjb21wb3VuZDogdHJ1ZVxuICB9KS5zZXRHcmFwaCh7XG4gICAgcmFua2RpcjogZGF0YTRMYXlvdXQuZGlyZWN0aW9uLFxuICAgIG5vZGVzZXA6IGRhdGE0TGF5b3V0LmNvbmZpZz8ubm9kZVNwYWNpbmcgfHwgZGF0YTRMYXlvdXQuY29uZmlnPy5mbG93Y2hhcnQ/Lm5vZGVTcGFjaW5nIHx8IGRhdGE0TGF5b3V0Lm5vZGVTcGFjaW5nLFxuICAgIHJhbmtzZXA6IGRhdGE0TGF5b3V0LmNvbmZpZz8ucmFua1NwYWNpbmcgfHwgZGF0YTRMYXlvdXQuY29uZmlnPy5mbG93Y2hhcnQ/LnJhbmtTcGFjaW5nIHx8IGRhdGE0TGF5b3V0LnJhbmtTcGFjaW5nLFxuICAgIG1hcmdpbng6IDgsXG4gICAgbWFyZ2lueTogOFxuICB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGNvbnN0IGVsZW1lbnQgPSBzdmcuc2VsZWN0KFwiZ1wiKTtcbiAgbWFya2Vyc19kZWZhdWx0KGVsZW1lbnQsIGRhdGE0TGF5b3V0Lm1hcmtlcnMsIGRhdGE0TGF5b3V0LnR5cGUsIGRhdGE0TGF5b3V0LmRpYWdyYW1JZCk7XG4gIGNsZWFyMygpO1xuICBjbGVhcjIoKTtcbiAgY2xlYXIoKTtcbiAgY2xlYXI0KCk7XG4gIGRhdGE0TGF5b3V0Lm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIHsgLi4ubm9kZSB9KTtcbiAgICBpZiAobm9kZS5wYXJlbnRJZCkge1xuICAgICAgZ3JhcGguc2V0UGFyZW50KG5vZGUuaWQsIG5vZGUucGFyZW50SWQpO1xuICAgIH1cbiAgfSk7XG4gIGxvZy5kZWJ1ZyhcIkVkZ2VzOlwiLCBkYXRhNExheW91dC5lZGdlcyk7XG4gIGRhdGE0TGF5b3V0LmVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICBpZiAoZWRnZS5zdGFydCA9PT0gZWRnZS5lbmQpIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGVkZ2Uuc3RhcnQ7XG4gICAgICBjb25zdCBzcGVjaWFsSWQxID0gbm9kZUlkICsgXCItLS1cIiArIG5vZGVJZCArIFwiLS0tMVwiO1xuICAgICAgY29uc3Qgc3BlY2lhbElkMiA9IG5vZGVJZCArIFwiLS0tXCIgKyBub2RlSWQgKyBcIi0tLTJcIjtcbiAgICAgIGNvbnN0IG5vZGUgPSBncmFwaC5ub2RlKG5vZGVJZCk7XG4gICAgICBncmFwaC5zZXROb2RlKHNwZWNpYWxJZDEsIHtcbiAgICAgICAgZG9tSWQ6IHNwZWNpYWxJZDEsXG4gICAgICAgIGlkOiBzcGVjaWFsSWQxLFxuICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHNoYXBlOiBcImxhYmVsUmVjdFwiLFxuICAgICAgICAvLyBzaGFwZTogJ3JlY3QnLFxuICAgICAgICBzdHlsZTogXCJcIixcbiAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICBoZWlnaHQ6IDEwXG4gICAgICB9KTtcbiAgICAgIGdyYXBoLnNldFBhcmVudChzcGVjaWFsSWQxLCBub2RlLnBhcmVudElkKTtcbiAgICAgIGdyYXBoLnNldE5vZGUoc3BlY2lhbElkMiwge1xuICAgICAgICBkb21JZDogc3BlY2lhbElkMixcbiAgICAgICAgaWQ6IHNwZWNpYWxJZDIsXG4gICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxuICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBzaGFwZTogJ3JlY3QnLFxuICAgICAgICBzaGFwZTogXCJsYWJlbFJlY3RcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIHN0eWxlOiBcIlwiLFxuICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgIGhlaWdodDogMTBcbiAgICAgIH0pO1xuICAgICAgZ3JhcGguc2V0UGFyZW50KHNwZWNpYWxJZDIsIG5vZGUucGFyZW50SWQpO1xuICAgICAgY29uc3QgZWRnZTEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZWRnZSk7XG4gICAgICBjb25zdCBlZGdlTWlkID0gc3RydWN0dXJlZENsb25lKGVkZ2UpO1xuICAgICAgY29uc3QgZWRnZTIgPSBzdHJ1Y3R1cmVkQ2xvbmUoZWRnZSk7XG4gICAgICBlZGdlMS5sYWJlbCA9IFwiXCI7XG4gICAgICBlZGdlMS5hcnJvd1R5cGVFbmQgPSBcIm5vbmVcIjtcbiAgICAgIGVkZ2UxLmlkID0gbm9kZUlkICsgXCItY3ljbGljLXNwZWNpYWwtMVwiO1xuICAgICAgZWRnZU1pZC5hcnJvd1R5cGVFbmQgPSBcIm5vbmVcIjtcbiAgICAgIGVkZ2VNaWQuaWQgPSBub2RlSWQgKyBcIi1jeWNsaWMtc3BlY2lhbC1taWRcIjtcbiAgICAgIGVkZ2UyLmxhYmVsID0gXCJcIjtcbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgZWRnZTEuZnJvbUNsdXN0ZXIgPSBub2RlSWQ7XG4gICAgICAgIGVkZ2UyLnRvQ2x1c3RlciA9IG5vZGVJZDtcbiAgICAgIH1cbiAgICAgIGVkZ2UyLmlkID0gbm9kZUlkICsgXCItY3ljbGljLXNwZWNpYWwtMlwiO1xuICAgICAgZ3JhcGguc2V0RWRnZShub2RlSWQsIHNwZWNpYWxJZDEsIGVkZ2UxLCBub2RlSWQgKyBcIi1jeWNsaWMtc3BlY2lhbC0wXCIpO1xuICAgICAgZ3JhcGguc2V0RWRnZShzcGVjaWFsSWQxLCBzcGVjaWFsSWQyLCBlZGdlTWlkLCBub2RlSWQgKyBcIi1jeWNsaWMtc3BlY2lhbC0xXCIpO1xuICAgICAgZ3JhcGguc2V0RWRnZShzcGVjaWFsSWQyLCBub2RlSWQsIGVkZ2UyLCBub2RlSWQgKyBcIi1jeWM8bGljLXNwZWNpYWwtMlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JhcGguc2V0RWRnZShlZGdlLnN0YXJ0LCBlZGdlLmVuZCwgeyAuLi5lZGdlIH0sIGVkZ2UuaWQpO1xuICAgIH1cbiAgfSk7XG4gIGxvZy53YXJuKFwiR3JhcGggYXQgZmlyc3Q6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGFkanVzdENsdXN0ZXJzQW5kRWRnZXMoZ3JhcGgpO1xuICBsb2cud2FybihcIkdyYXBoIGFmdGVyIFhBWDpcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGhsaWJKc29uMi53cml0ZShncmFwaCkpKTtcbiAgY29uc3Qgc2l0ZUNvbmZpZyA9IGdldENvbmZpZygpO1xuICBhd2FpdCByZWN1cnNpdmVSZW5kZXIoXG4gICAgZWxlbWVudCxcbiAgICBncmFwaCxcbiAgICBkYXRhNExheW91dC50eXBlLFxuICAgIGRhdGE0TGF5b3V0LmRpYWdyYW1JZCxcbiAgICB2b2lkIDAsXG4gICAgc2l0ZUNvbmZpZ1xuICApO1xufSwgXCJyZW5kZXJcIik7XG5leHBvcnQge1xuICByZW5kZXJcbn07XG4iLAogICAgImltcG9ydCB7XG4gIGluc2VydENsdXN0ZXIsXG4gIGluc2VydEVkZ2UsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgaW5zZXJ0Tm9kZSxcbiAgbGFiZWxIZWxwZXIsXG4gIG1hcmtlcnNfZGVmYXVsdCxcbiAgcG9zaXRpb25FZGdlTGFiZWxcbn0gZnJvbSBcIi4vY2h1bmstUk9LWVVWQ1UubWpzXCI7XG5pbXBvcnQge1xuICBpbnRlcnBvbGF0ZVRvQ3VydmVcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBnZXRDb25maWcsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2ludGVybmFscy50c1xudmFyIGludGVybmFsSGVscGVycyA9IHtcbiAgY29tbW9uOiBjb21tb25fZGVmYXVsdCxcbiAgZ2V0Q29uZmlnLFxuICBpbnNlcnRDbHVzdGVyLFxuICBpbnNlcnRFZGdlLFxuICBpbnNlcnRFZGdlTGFiZWwsXG4gIGluc2VydE1hcmtlcnM6IG1hcmtlcnNfZGVmYXVsdCxcbiAgaW5zZXJ0Tm9kZSxcbiAgaW50ZXJwb2xhdGVUb0N1cnZlLFxuICBsYWJlbEhlbHBlcixcbiAgbG9nLFxuICBwb3NpdGlvbkVkZ2VMYWJlbFxufTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlci50c1xudmFyIGxheW91dEFsZ29yaXRobXMgPSB7fTtcbnZhciByZWdpc3RlckxheW91dExvYWRlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChsb2FkZXJzKSA9PiB7XG4gIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICBsYXlvdXRBbGdvcml0aG1zW2xvYWRlci5uYW1lXSA9IGxvYWRlcjtcbiAgfVxufSwgXCJyZWdpc3RlckxheW91dExvYWRlcnNcIik7XG52YXIgcmVnaXN0ZXJEZWZhdWx0TGF5b3V0TG9hZGVycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZWdpc3RlckxheW91dExvYWRlcnMoW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiZGFncmVcIixcbiAgICAgIGxvYWRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiBhd2FpdCBpbXBvcnQoXCIuL2RhZ3JlLUM0WUE0M0YzLm1qc1wiKSwgXCJsb2FkZXJcIilcbiAgICB9XG4gIF0pO1xufSwgXCJyZWdpc3RlckRlZmF1bHRMYXlvdXRMb2FkZXJzXCIpO1xucmVnaXN0ZXJEZWZhdWx0TGF5b3V0TG9hZGVycygpO1xudmFyIHJlbmRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGRhdGE0TGF5b3V0LCBzdmcpID0+IHtcbiAgaWYgKCEoZGF0YTRMYXlvdXQubGF5b3V0QWxnb3JpdGhtIGluIGxheW91dEFsZ29yaXRobXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxheW91dCBhbGdvcml0aG06ICR7ZGF0YTRMYXlvdXQubGF5b3V0QWxnb3JpdGhtfWApO1xuICB9XG4gIGNvbnN0IGxheW91dERlZmluaXRpb24gPSBsYXlvdXRBbGdvcml0aG1zW2RhdGE0TGF5b3V0LmxheW91dEFsZ29yaXRobV07XG4gIGNvbnN0IGxheW91dFJlbmRlcmVyID0gYXdhaXQgbGF5b3V0RGVmaW5pdGlvbi5sb2FkZXIoKTtcbiAgcmV0dXJuIGxheW91dFJlbmRlcmVyLnJlbmRlcihkYXRhNExheW91dCwgc3ZnLCBpbnRlcm5hbEhlbHBlcnMsIHtcbiAgICBhbGdvcml0aG06IGxheW91dERlZmluaXRpb24uYWxnb3JpdGhtXG4gIH0pO1xufSwgXCJyZW5kZXJcIik7XG52YXIgZ2V0UmVnaXN0ZXJlZExheW91dEFsZ29yaXRobSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFsZ29yaXRobSA9IFwiXCIsIHsgZmFsbGJhY2sgPSBcImRhZ3JlXCIgfSA9IHt9KSA9PiB7XG4gIGlmIChhbGdvcml0aG0gaW4gbGF5b3V0QWxnb3JpdGhtcykge1xuICAgIHJldHVybiBhbGdvcml0aG07XG4gIH1cbiAgaWYgKGZhbGxiYWNrIGluIGxheW91dEFsZ29yaXRobXMpIHtcbiAgICBsb2cud2FybihgTGF5b3V0IGFsZ29yaXRobSAke2FsZ29yaXRobX0gaXMgbm90IHJlZ2lzdGVyZWQuIFVzaW5nICR7ZmFsbGJhY2t9IGFzIGZhbGxiYWNrLmApO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEJvdGggbGF5b3V0IGFsZ29yaXRobXMgJHthbGdvcml0aG19IGFuZCAke2ZhbGxiYWNrfSBhcmUgbm90IHJlZ2lzdGVyZWQuYCk7XG59LCBcImdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG1cIik7XG5cbmV4cG9ydCB7XG4gIHJlZ2lzdGVyTGF5b3V0TG9hZGVycyxcbiAgcmVuZGVyLFxuICBnZXRSZWdpc3RlcmVkTGF5b3V0QWxnb3JpdGhtXG59O1xuIiwKICAgICIvLyBwYWNrYWdlLmpzb25cbnZhciB2ZXJzaW9uID0gXCIxMS4xLjFcIjtcblxuZXhwb3J0IHtcbiAgdmVyc2lvblxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19uYW1lLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3NlbGVjdFN2Z0VsZW1lbnQudHNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIHNlbGVjdFN2Z0VsZW1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4ge1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwgfSA9IGdldENvbmZpZygpO1xuICBsZXQgcm9vdCA9IHNlbGVjdChcImJvZHlcIik7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIGNvbnN0IHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KGAjaSR7aWR9YCk7XG4gICAgY29uc3QgZG9jID0gc2FuZGJveEVsZW1lbnQubm9kZSgpPy5jb250ZW50RG9jdW1lbnQgPz8gZG9jdW1lbnQ7XG4gICAgcm9vdCA9IHNlbGVjdChkb2MuYm9keSk7XG4gIH1cbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYCMke2lkfWApO1xuICByZXR1cm4gc3ZnO1xufSwgXCJzZWxlY3RTdmdFbGVtZW50XCIpO1xuXG5leHBvcnQge1xuICBzZWxlY3RTdmdFbGVtZW50XG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGxpbmVCcmVha1JlZ2V4XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvY29tbW9uL3N2Z0RyYXdDb21tb24udHNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG52YXIgZHJhd1JlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtZW50LCByZWN0RGF0YSkgPT4ge1xuICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwicmVjdFwiKTtcbiAgcmVjdEVsZW1lbnQuYXR0cihcInhcIiwgcmVjdERhdGEueCk7XG4gIHJlY3RFbGVtZW50LmF0dHIoXCJ5XCIsIHJlY3REYXRhLnkpO1xuICByZWN0RWxlbWVudC5hdHRyKFwiZmlsbFwiLCByZWN0RGF0YS5maWxsKTtcbiAgcmVjdEVsZW1lbnQuYXR0cihcInN0cm9rZVwiLCByZWN0RGF0YS5zdHJva2UpO1xuICByZWN0RWxlbWVudC5hdHRyKFwid2lkdGhcIiwgcmVjdERhdGEud2lkdGgpO1xuICByZWN0RWxlbWVudC5hdHRyKFwiaGVpZ2h0XCIsIHJlY3REYXRhLmhlaWdodCk7XG4gIGlmIChyZWN0RGF0YS5uYW1lKSB7XG4gICAgcmVjdEVsZW1lbnQuYXR0cihcIm5hbWVcIiwgcmVjdERhdGEubmFtZSk7XG4gIH1cbiAgaWYgKHJlY3REYXRhLnJ4KSB7XG4gICAgcmVjdEVsZW1lbnQuYXR0cihcInJ4XCIsIHJlY3REYXRhLnJ4KTtcbiAgfVxuICBpZiAocmVjdERhdGEucnkpIHtcbiAgICByZWN0RWxlbWVudC5hdHRyKFwicnlcIiwgcmVjdERhdGEucnkpO1xuICB9XG4gIGlmIChyZWN0RGF0YS5hdHRycyAhPT0gdm9pZCAwKSB7XG4gICAgZm9yIChjb25zdCBhdHRyS2V5IGluIHJlY3REYXRhLmF0dHJzKSB7XG4gICAgICByZWN0RWxlbWVudC5hdHRyKGF0dHJLZXksIHJlY3REYXRhLmF0dHJzW2F0dHJLZXldKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlY3REYXRhLmNsYXNzKSB7XG4gICAgcmVjdEVsZW1lbnQuYXR0cihcImNsYXNzXCIsIHJlY3REYXRhLmNsYXNzKTtcbiAgfVxuICByZXR1cm4gcmVjdEVsZW1lbnQ7XG59LCBcImRyYXdSZWN0XCIpO1xudmFyIGRyYXdCYWNrZ3JvdW5kUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW1lbnQsIGJvdW5kcykgPT4ge1xuICBjb25zdCByZWN0RGF0YSA9IHtcbiAgICB4OiBib3VuZHMuc3RhcnR4LFxuICAgIHk6IGJvdW5kcy5zdGFydHksXG4gICAgd2lkdGg6IGJvdW5kcy5zdG9weCAtIGJvdW5kcy5zdGFydHgsXG4gICAgaGVpZ2h0OiBib3VuZHMuc3RvcHkgLSBib3VuZHMuc3RhcnR5LFxuICAgIGZpbGw6IGJvdW5kcy5maWxsLFxuICAgIHN0cm9rZTogYm91bmRzLnN0cm9rZSxcbiAgICBjbGFzczogXCJyZWN0XCJcbiAgfTtcbiAgY29uc3QgcmVjdEVsZW1lbnQgPSBkcmF3UmVjdChlbGVtZW50LCByZWN0RGF0YSk7XG4gIHJlY3RFbGVtZW50Lmxvd2VyKCk7XG59LCBcImRyYXdCYWNrZ3JvdW5kUmVjdFwiKTtcbnZhciBkcmF3VGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW1lbnQsIHRleHREYXRhKSA9PiB7XG4gIGNvbnN0IG5UZXh0ID0gdGV4dERhdGEudGV4dC5yZXBsYWNlKGxpbmVCcmVha1JlZ2V4LCBcIiBcIik7XG4gIGNvbnN0IHRleHRFbGVtID0gZWxlbWVudC5hcHBlbmQoXCJ0ZXh0XCIpO1xuICB0ZXh0RWxlbS5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgdGV4dEVsZW0uYXR0cihcInlcIiwgdGV4dERhdGEueSk7XG4gIHRleHRFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImxlZ2VuZFwiKTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCB0ZXh0RGF0YS5hbmNob3IpO1xuICBpZiAodGV4dERhdGEuY2xhc3MpIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHRzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gIHRzcGFuLmF0dHIoXCJ4XCIsIHRleHREYXRhLnggKyB0ZXh0RGF0YS50ZXh0TWFyZ2luICogMik7XG4gIHRzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdJbWFnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHgsIHksIGxpbmspID0+IHtcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gZWxlbS5hcHBlbmQoXCJpbWFnZVwiKTtcbiAgaW1hZ2VFbGVtZW50LmF0dHIoXCJ4XCIsIHgpO1xuICBpbWFnZUVsZW1lbnQuYXR0cihcInlcIiwgeSk7XG4gIGNvbnN0IHNhbml0aXplZExpbmsgPSBzYW5pdGl6ZVVybChsaW5rKTtcbiAgaW1hZ2VFbGVtZW50LmF0dHIoXCJ4bGluazpocmVmXCIsIHNhbml0aXplZExpbmspO1xufSwgXCJkcmF3SW1hZ2VcIik7XG52YXIgZHJhd0VtYmVkZGVkSW1hZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtZW50LCB4LCB5LCBsaW5rKSA9PiB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwidXNlXCIpO1xuICBpbWFnZUVsZW1lbnQuYXR0cihcInhcIiwgeCk7XG4gIGltYWdlRWxlbWVudC5hdHRyKFwieVwiLCB5KTtcbiAgY29uc3Qgc2FuaXRpemVkTGluayA9IHNhbml0aXplVXJsKGxpbmspO1xuICBpbWFnZUVsZW1lbnQuYXR0cihcInhsaW5rOmhyZWZcIiwgYCMke3Nhbml0aXplZExpbmt9YCk7XG59LCBcImRyYXdFbWJlZGRlZEltYWdlXCIpO1xudmFyIGdldE5vdGVSZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGNvbnN0IG5vdGVSZWN0RGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICBmaWxsOiBcIiNFREYyQUVcIixcbiAgICBzdHJva2U6IFwiIzY2NlwiLFxuICAgIGFuY2hvcjogXCJzdGFydFwiLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwXG4gIH07XG4gIHJldHVybiBub3RlUmVjdERhdGE7XG59LCBcImdldE5vdGVSZWN0XCIpO1xudmFyIGdldFRleHRPYmogPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgdGVzdE9iamVjdCA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICBcInRleHQtYW5jaG9yXCI6IFwic3RhcnRcIixcbiAgICBzdHlsZTogXCIjNjY2XCIsXG4gICAgdGV4dE1hcmdpbjogMCxcbiAgICByeDogMCxcbiAgICByeTogMCxcbiAgICB0c3BhbjogdHJ1ZVxuICB9O1xuICByZXR1cm4gdGVzdE9iamVjdDtcbn0sIFwiZ2V0VGV4dE9ialwiKTtcblxuZXhwb3J0IHtcbiAgZHJhd1JlY3QsXG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZHJhd1RleHQsXG4gIGRyYXdJbWFnZSxcbiAgZHJhd0VtYmVkZGVkSW1hZ2UsXG4gIGdldE5vdGVSZWN0LFxuICBnZXRUZXh0T2JqXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBkcmF3UmVjdCxcbiAgZ2V0Tm90ZVJlY3Rcbn0gZnJvbSBcIi4vY2h1bmstWFZPWU9NMkMubWpzXCI7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVUZXh0SGVpZ2h0LFxuICBjYWxjdWxhdGVUZXh0V2lkdGgsXG4gIHdyYXBMYWJlbFxufSBmcm9tIFwiLi9jaHVuay0yRURUV0RZSS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2csXG4gIHNhbml0aXplVGV4dCxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYzQvcGFyc2VyL2M0RGlhZ3JhbS5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzEsIDI0XSwgJFYxID0gWzEsIDI1XSwgJFYyID0gWzEsIDI2XSwgJFYzID0gWzEsIDI3XSwgJFY0ID0gWzEsIDI4XSwgJFY1ID0gWzEsIDYzXSwgJFY2ID0gWzEsIDY0XSwgJFY3ID0gWzEsIDY1XSwgJFY4ID0gWzEsIDY2XSwgJFY5ID0gWzEsIDY3XSwgJFZhID0gWzEsIDY4XSwgJFZiID0gWzEsIDY5XSwgJFZjID0gWzEsIDI5XSwgJFZkID0gWzEsIDMwXSwgJFZlID0gWzEsIDMxXSwgJFZmID0gWzEsIDMyXSwgJFZnID0gWzEsIDMzXSwgJFZoID0gWzEsIDM0XSwgJFZpID0gWzEsIDM1XSwgJFZqID0gWzEsIDM2XSwgJFZrID0gWzEsIDM3XSwgJFZsID0gWzEsIDM4XSwgJFZtID0gWzEsIDM5XSwgJFZuID0gWzEsIDQwXSwgJFZvID0gWzEsIDQxXSwgJFZwID0gWzEsIDQyXSwgJFZxID0gWzEsIDQzXSwgJFZyID0gWzEsIDQ0XSwgJFZzID0gWzEsIDQ1XSwgJFZ0ID0gWzEsIDQ2XSwgJFZ1ID0gWzEsIDQ3XSwgJFZ2ID0gWzEsIDQ4XSwgJFZ3ID0gWzEsIDUwXSwgJFZ4ID0gWzEsIDUxXSwgJFZ5ID0gWzEsIDUyXSwgJFZ6ID0gWzEsIDUzXSwgJFZBID0gWzEsIDU0XSwgJFZCID0gWzEsIDU1XSwgJFZDID0gWzEsIDU2XSwgJFZEID0gWzEsIDU3XSwgJFZFID0gWzEsIDU4XSwgJFZGID0gWzEsIDU5XSwgJFZHID0gWzEsIDYwXSwgJFZIID0gWzE0LCA0Ml0sICRWSSA9IFsxNCwgMzQsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NF0sICRWSiA9IFsxMiwgMTQsIDM0LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzRdLCAkVksgPSBbMSwgODJdLCAkVkwgPSBbMSwgODNdLCAkVk0gPSBbMSwgODRdLCAkVk4gPSBbMSwgODVdLCAkVk8gPSBbMTIsIDE0LCA0Ml0sICRWUCA9IFsxMiwgMTQsIDMzLCA0Ml0sICRWUSA9IFsxMiwgMTQsIDMzLCA0MiwgNzYsIDc3LCA3OSwgODBdLCAkVlIgPSBbMTIsIDMzXSwgJFZTID0gWzM0LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIm1lcm1haWREb2NcIjogNCwgXCJkaXJlY3Rpb25cIjogNSwgXCJkaXJlY3Rpb25fdGJcIjogNiwgXCJkaXJlY3Rpb25fYnRcIjogNywgXCJkaXJlY3Rpb25fcmxcIjogOCwgXCJkaXJlY3Rpb25fbHJcIjogOSwgXCJncmFwaENvbmZpZ1wiOiAxMCwgXCJDNF9DT05URVhUXCI6IDExLCBcIk5FV0xJTkVcIjogMTIsIFwic3RhdGVtZW50c1wiOiAxMywgXCJFT0ZcIjogMTQsIFwiQzRfQ09OVEFJTkVSXCI6IDE1LCBcIkM0X0NPTVBPTkVOVFwiOiAxNiwgXCJDNF9EWU5BTUlDXCI6IDE3LCBcIkM0X0RFUExPWU1FTlRcIjogMTgsIFwib3RoZXJTdGF0ZW1lbnRzXCI6IDE5LCBcImRpYWdyYW1TdGF0ZW1lbnRzXCI6IDIwLCBcIm90aGVyU3RhdGVtZW50XCI6IDIxLCBcInRpdGxlXCI6IDIyLCBcImFjY0Rlc2NyaXB0aW9uXCI6IDIzLCBcImFjY190aXRsZVwiOiAyNCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMjUsIFwiYWNjX2Rlc2NyXCI6IDI2LCBcImFjY19kZXNjcl92YWx1ZVwiOiAyNywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDI4LCBcImJvdW5kYXJ5U3RhdGVtZW50XCI6IDI5LCBcImJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnRcIjogMzAsIFwiYm91bmRhcnlTdG9wU3RhdGVtZW50XCI6IDMxLCBcImJvdW5kYXJ5U3RhcnRcIjogMzIsIFwiTEJSQUNFXCI6IDMzLCBcIkVOVEVSUFJJU0VfQk9VTkRBUllcIjogMzQsIFwiYXR0cmlidXRlc1wiOiAzNSwgXCJTWVNURU1fQk9VTkRBUllcIjogMzYsIFwiQk9VTkRBUllcIjogMzcsIFwiQ09OVEFJTkVSX0JPVU5EQVJZXCI6IDM4LCBcIk5PREVcIjogMzksIFwiTk9ERV9MXCI6IDQwLCBcIk5PREVfUlwiOiA0MSwgXCJSQlJBQ0VcIjogNDIsIFwiZGlhZ3JhbVN0YXRlbWVudFwiOiA0MywgXCJQRVJTT05cIjogNDQsIFwiUEVSU09OX0VYVFwiOiA0NSwgXCJTWVNURU1cIjogNDYsIFwiU1lTVEVNX0RCXCI6IDQ3LCBcIlNZU1RFTV9RVUVVRVwiOiA0OCwgXCJTWVNURU1fRVhUXCI6IDQ5LCBcIlNZU1RFTV9FWFRfREJcIjogNTAsIFwiU1lTVEVNX0VYVF9RVUVVRVwiOiA1MSwgXCJDT05UQUlORVJcIjogNTIsIFwiQ09OVEFJTkVSX0RCXCI6IDUzLCBcIkNPTlRBSU5FUl9RVUVVRVwiOiA1NCwgXCJDT05UQUlORVJfRVhUXCI6IDU1LCBcIkNPTlRBSU5FUl9FWFRfREJcIjogNTYsIFwiQ09OVEFJTkVSX0VYVF9RVUVVRVwiOiA1NywgXCJDT01QT05FTlRcIjogNTgsIFwiQ09NUE9ORU5UX0RCXCI6IDU5LCBcIkNPTVBPTkVOVF9RVUVVRVwiOiA2MCwgXCJDT01QT05FTlRfRVhUXCI6IDYxLCBcIkNPTVBPTkVOVF9FWFRfREJcIjogNjIsIFwiQ09NUE9ORU5UX0VYVF9RVUVVRVwiOiA2MywgXCJSRUxcIjogNjQsIFwiQklSRUxcIjogNjUsIFwiUkVMX1VcIjogNjYsIFwiUkVMX0RcIjogNjcsIFwiUkVMX0xcIjogNjgsIFwiUkVMX1JcIjogNjksIFwiUkVMX0JcIjogNzAsIFwiUkVMX0lOREVYXCI6IDcxLCBcIlVQREFURV9FTF9TVFlMRVwiOiA3MiwgXCJVUERBVEVfUkVMX1NUWUxFXCI6IDczLCBcIlVQREFURV9MQVlPVVRfQ09ORklHXCI6IDc0LCBcImF0dHJpYnV0ZVwiOiA3NSwgXCJTVFJcIjogNzYsIFwiU1RSX0tFWVwiOiA3NywgXCJTVFJfVkFMVUVcIjogNzgsIFwiQVRUUklCVVRFXCI6IDc5LCBcIkFUVFJJQlVURV9FTVBUWVwiOiA4MCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDY6IFwiZGlyZWN0aW9uX3RiXCIsIDc6IFwiZGlyZWN0aW9uX2J0XCIsIDg6IFwiZGlyZWN0aW9uX3JsXCIsIDk6IFwiZGlyZWN0aW9uX2xyXCIsIDExOiBcIkM0X0NPTlRFWFRcIiwgMTI6IFwiTkVXTElORVwiLCAxNDogXCJFT0ZcIiwgMTU6IFwiQzRfQ09OVEFJTkVSXCIsIDE2OiBcIkM0X0NPTVBPTkVOVFwiLCAxNzogXCJDNF9EWU5BTUlDXCIsIDE4OiBcIkM0X0RFUExPWU1FTlRcIiwgMjI6IFwidGl0bGVcIiwgMjM6IFwiYWNjRGVzY3JpcHRpb25cIiwgMjQ6IFwiYWNjX3RpdGxlXCIsIDI1OiBcImFjY190aXRsZV92YWx1ZVwiLCAyNjogXCJhY2NfZGVzY3JcIiwgMjc6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDI4OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMzM6IFwiTEJSQUNFXCIsIDM0OiBcIkVOVEVSUFJJU0VfQk9VTkRBUllcIiwgMzY6IFwiU1lTVEVNX0JPVU5EQVJZXCIsIDM3OiBcIkJPVU5EQVJZXCIsIDM4OiBcIkNPTlRBSU5FUl9CT1VOREFSWVwiLCAzOTogXCJOT0RFXCIsIDQwOiBcIk5PREVfTFwiLCA0MTogXCJOT0RFX1JcIiwgNDI6IFwiUkJSQUNFXCIsIDQ0OiBcIlBFUlNPTlwiLCA0NTogXCJQRVJTT05fRVhUXCIsIDQ2OiBcIlNZU1RFTVwiLCA0NzogXCJTWVNURU1fREJcIiwgNDg6IFwiU1lTVEVNX1FVRVVFXCIsIDQ5OiBcIlNZU1RFTV9FWFRcIiwgNTA6IFwiU1lTVEVNX0VYVF9EQlwiLCA1MTogXCJTWVNURU1fRVhUX1FVRVVFXCIsIDUyOiBcIkNPTlRBSU5FUlwiLCA1MzogXCJDT05UQUlORVJfREJcIiwgNTQ6IFwiQ09OVEFJTkVSX1FVRVVFXCIsIDU1OiBcIkNPTlRBSU5FUl9FWFRcIiwgNTY6IFwiQ09OVEFJTkVSX0VYVF9EQlwiLCA1NzogXCJDT05UQUlORVJfRVhUX1FVRVVFXCIsIDU4OiBcIkNPTVBPTkVOVFwiLCA1OTogXCJDT01QT05FTlRfREJcIiwgNjA6IFwiQ09NUE9ORU5UX1FVRVVFXCIsIDYxOiBcIkNPTVBPTkVOVF9FWFRcIiwgNjI6IFwiQ09NUE9ORU5UX0VYVF9EQlwiLCA2MzogXCJDT01QT05FTlRfRVhUX1FVRVVFXCIsIDY0OiBcIlJFTFwiLCA2NTogXCJCSVJFTFwiLCA2NjogXCJSRUxfVVwiLCA2NzogXCJSRUxfRFwiLCA2ODogXCJSRUxfTFwiLCA2OTogXCJSRUxfUlwiLCA3MDogXCJSRUxfQlwiLCA3MTogXCJSRUxfSU5ERVhcIiwgNzI6IFwiVVBEQVRFX0VMX1NUWUxFXCIsIDczOiBcIlVQREFURV9SRUxfU1RZTEVcIiwgNzQ6IFwiVVBEQVRFX0xBWU9VVF9DT05GSUdcIiwgNzY6IFwiU1RSXCIsIDc3OiBcIlNUUl9LRVlcIiwgNzg6IFwiU1RSX1ZBTFVFXCIsIDc5OiBcIkFUVFJJQlVURVwiLCA4MDogXCJBVFRSSUJVVEVfRU1QVFlcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDFdLCBbNSwgMV0sIFs1LCAxXSwgWzUsIDFdLCBbNSwgMV0sIFs0LCAxXSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEzLCAxXSwgWzEzLCAxXSwgWzEzLCAyXSwgWzE5LCAxXSwgWzE5LCAyXSwgWzE5LCAzXSwgWzIxLCAxXSwgWzIxLCAxXSwgWzIxLCAyXSwgWzIxLCAyXSwgWzIxLCAxXSwgWzI5LCAzXSwgWzMwLCAzXSwgWzMwLCAzXSwgWzMwLCA0XSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMxLCAxXSwgWzIwLCAxXSwgWzIwLCAyXSwgWzIwLCAzXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAxXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzM1LCAxXSwgWzM1LCAyXSwgWzc1LCAxXSwgWzc1LCAyXSwgWzc1LCAxXSwgWzc1LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJUQlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIkJUXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKFwiUkxcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJMUlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuc2V0QzRUeXBlKCQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHl5LnNldFRpdGxlKCQkWyQwXS5zdWJzdHJpbmcoNikpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHJpbmcoNik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24oJCRbJDBdLnN1YnN0cmluZygxNSkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHJpbmcoMTUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0VGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgJCRbJDBdLnNwbGljZSgyLCAwLCBcIkVOVEVSUFJJU0VcIik7XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAkJFskMF0uc3BsaWNlKDIsIDAsIFwiU1lTVEVNXCIpO1xuICAgICAgICAgIHl5LmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAkJFskMF0uc3BsaWNlKDIsIDAsIFwiQ09OVEFJTkVSXCIpO1xuICAgICAgICAgIHl5LmFkZENvbnRhaW5lckJvdW5kYXJ5KC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHl5LmFkZERlcGxveW1lbnROb2RlKFwibm9kZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5hZGREZXBsb3ltZW50Tm9kZShcIm5vZGVMXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHl5LmFkZERlcGxveW1lbnROb2RlKFwibm9kZVJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgeXkucG9wQm91bmRhcnlQYXJzZVN0YWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJwZXJzb25cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9wZXJzb25cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJzeXN0ZW1cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJzeXN0ZW1fZGJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJzeXN0ZW1fcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9zeXN0ZW1cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9zeXN0ZW1fZGJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9zeXN0ZW1fcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyKFwiY29udGFpbmVyXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgIHl5LmFkZENvbnRhaW5lcihcImNvbnRhaW5lcl9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICB5eS5hZGRDb250YWluZXIoXCJjb250YWluZXJfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyKFwiZXh0ZXJuYWxfY29udGFpbmVyXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHl5LmFkZENvbnRhaW5lcihcImV4dGVybmFsX2NvbnRhaW5lcl9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB5eS5hZGRDb250YWluZXIoXCJleHRlcm5hbF9jb250YWluZXJfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgeXkuYWRkQ29tcG9uZW50KFwiY29tcG9uZW50XCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgIHl5LmFkZENvbXBvbmVudChcImNvbXBvbmVudF9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICB5eS5hZGRDb21wb25lbnQoXCJjb21wb25lbnRfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgeXkuYWRkQ29tcG9uZW50KFwiZXh0ZXJuYWxfY29tcG9uZW50XCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHl5LmFkZENvbXBvbmVudChcImV4dGVybmFsX2NvbXBvbmVudF9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICB5eS5hZGRDb21wb25lbnQoXCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYxOlxuICAgICAgICAgIHl5LmFkZFJlbChcImJpcmVsXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF91XCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9kXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9sXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9yXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9iXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICQkWyQwXS5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHl5LnVwZGF0ZUVsU3R5bGUoXCJ1cGRhdGVfZWxfc3R5bGVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgeXkudXBkYXRlUmVsU3R5bGUoXCJ1cGRhdGVfcmVsX3N0eWxlXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgIHl5LnVwZGF0ZUxheW91dENvbmZpZyhcInVwZGF0ZV9sYXlvdXRfY29uZmlnXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICQkWyQwXS51bnNoaWZ0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgIGxldCBrdiA9IHt9O1xuICAgICAgICAgIGt2WyQkWyQwIC0gMV0udHJpbSgpXSA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgdGhpcy4kID0ga3Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgdGhpcy4kID0gXCJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgNTogMywgNjogWzEsIDVdLCA3OiBbMSwgNl0sIDg6IFsxLCA3XSwgOTogWzEsIDhdLCAxMDogNCwgMTE6IFsxLCA5XSwgMTU6IFsxLCAxMF0sIDE2OiBbMSwgMTFdLCAxNzogWzEsIDEyXSwgMTg6IFsxLCAxM10gfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgN10gfSwgeyAxOiBbMiwgM10gfSwgeyAxOiBbMiwgNF0gfSwgeyAxOiBbMiwgNV0gfSwgeyAxOiBbMiwgNl0gfSwgeyAxMjogWzEsIDE0XSB9LCB7IDEyOiBbMSwgMTVdIH0sIHsgMTI6IFsxLCAxNl0gfSwgeyAxMjogWzEsIDE3XSB9LCB7IDEyOiBbMSwgMThdIH0sIHsgMTM6IDE5LCAxOTogMjAsIDIwOiAyMSwgMjE6IDIyLCAyMjogJFYwLCAyMzogJFYxLCAyNDogJFYyLCAyNjogJFYzLCAyODogJFY0LCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0MzogMjMsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmksIDUxOiAkVmosIDUyOiAkVmssIDUzOiAkVmwsIDU0OiAkVm0sIDU1OiAkVm4sIDU2OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDU5OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYyOiAkVnUsIDYzOiAkVnYsIDY0OiAkVncsIDY1OiAkVngsIDY2OiAkVnksIDY3OiAkVnosIDY4OiAkVkEsIDY5OiAkVkIsIDcwOiAkVkMsIDcxOiAkVkQsIDcyOiAkVkUsIDczOiAkVkYsIDc0OiAkVkcgfSwgeyAxMzogNzAsIDE5OiAyMCwgMjA6IDIxLCAyMTogMjIsIDIyOiAkVjAsIDIzOiAkVjEsIDI0OiAkVjIsIDI2OiAkVjMsIDI4OiAkVjQsIDI5OiA0OSwgMzA6IDYxLCAzMjogNjIsIDM0OiAkVjUsIDM2OiAkVjYsIDM3OiAkVjcsIDM4OiAkVjgsIDM5OiAkVjksIDQwOiAkVmEsIDQxOiAkVmIsIDQzOiAyMywgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSwgNTE6ICRWaiwgNTI6ICRWaywgNTM6ICRWbCwgNTQ6ICRWbSwgNTU6ICRWbiwgNTY6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNTk6ICRWciwgNjA6ICRWcywgNjE6ICRWdCwgNjI6ICRWdSwgNjM6ICRWdiwgNjQ6ICRWdywgNjU6ICRWeCwgNjY6ICRWeSwgNjc6ICRWeiwgNjg6ICRWQSwgNjk6ICRWQiwgNzA6ICRWQywgNzE6ICRWRCwgNzI6ICRWRSwgNzM6ICRWRiwgNzQ6ICRWRyB9LCB7IDEzOiA3MSwgMTk6IDIwLCAyMDogMjEsIDIxOiAyMiwgMjI6ICRWMCwgMjM6ICRWMSwgMjQ6ICRWMiwgMjY6ICRWMywgMjg6ICRWNCwgMjk6IDQ5LCAzMDogNjEsIDMyOiA2MiwgMzQ6ICRWNSwgMzY6ICRWNiwgMzc6ICRWNywgMzg6ICRWOCwgMzk6ICRWOSwgNDA6ICRWYSwgNDE6ICRWYiwgNDM6IDIzLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpLCA1MTogJFZqLCA1MjogJFZrLCA1MzogJFZsLCA1NDogJFZtLCA1NTogJFZuLCA1NjogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA1OTogJFZyLCA2MDogJFZzLCA2MTogJFZ0LCA2MjogJFZ1LCA2MzogJFZ2LCA2NDogJFZ3LCA2NTogJFZ4LCA2NjogJFZ5LCA2NzogJFZ6LCA2ODogJFZBLCA2OTogJFZCLCA3MDogJFZDLCA3MTogJFZELCA3MjogJFZFLCA3MzogJFZGLCA3NDogJFZHIH0sIHsgMTM6IDcyLCAxOTogMjAsIDIwOiAyMSwgMjE6IDIyLCAyMjogJFYwLCAyMzogJFYxLCAyNDogJFYyLCAyNjogJFYzLCAyODogJFY0LCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0MzogMjMsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmksIDUxOiAkVmosIDUyOiAkVmssIDUzOiAkVmwsIDU0OiAkVm0sIDU1OiAkVm4sIDU2OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDU5OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYyOiAkVnUsIDYzOiAkVnYsIDY0OiAkVncsIDY1OiAkVngsIDY2OiAkVnksIDY3OiAkVnosIDY4OiAkVkEsIDY5OiAkVkIsIDcwOiAkVkMsIDcxOiAkVkQsIDcyOiAkVkUsIDczOiAkVkYsIDc0OiAkVkcgfSwgeyAxMzogNzMsIDE5OiAyMCwgMjA6IDIxLCAyMTogMjIsIDIyOiAkVjAsIDIzOiAkVjEsIDI0OiAkVjIsIDI2OiAkVjMsIDI4OiAkVjQsIDI5OiA0OSwgMzA6IDYxLCAzMjogNjIsIDM0OiAkVjUsIDM2OiAkVjYsIDM3OiAkVjcsIDM4OiAkVjgsIDM5OiAkVjksIDQwOiAkVmEsIDQxOiAkVmIsIDQzOiAyMywgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSwgNTE6ICRWaiwgNTI6ICRWaywgNTM6ICRWbCwgNTQ6ICRWbSwgNTU6ICRWbiwgNTY6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNTk6ICRWciwgNjA6ICRWcywgNjE6ICRWdCwgNjI6ICRWdSwgNjM6ICRWdiwgNjQ6ICRWdywgNjU6ICRWeCwgNjY6ICRWeSwgNjc6ICRWeiwgNjg6ICRWQSwgNjk6ICRWQiwgNzA6ICRWQywgNzE6ICRWRCwgNzI6ICRWRSwgNzM6ICRWRiwgNzQ6ICRWRyB9LCB7IDE0OiBbMSwgNzRdIH0sIG8oJFZILCBbMiwgMTNdLCB7IDQzOiAyMywgMjk6IDQ5LCAzMDogNjEsIDMyOiA2MiwgMjA6IDc1LCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpLCA1MTogJFZqLCA1MjogJFZrLCA1MzogJFZsLCA1NDogJFZtLCA1NTogJFZuLCA1NjogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA1OTogJFZyLCA2MDogJFZzLCA2MTogJFZ0LCA2MjogJFZ1LCA2MzogJFZ2LCA2NDogJFZ3LCA2NTogJFZ4LCA2NjogJFZ5LCA2NzogJFZ6LCA2ODogJFZBLCA2OTogJFZCLCA3MDogJFZDLCA3MTogJFZELCA3MjogJFZFLCA3MzogJFZGLCA3NDogJFZHIH0pLCBvKCRWSCwgWzIsIDE0XSksIG8oJFZJLCBbMiwgMTZdLCB7IDEyOiBbMSwgNzZdIH0pLCBvKCRWSCwgWzIsIDM2XSwgeyAxMjogWzEsIDc3XSB9KSwgbygkVkosIFsyLCAxOV0pLCBvKCRWSiwgWzIsIDIwXSksIHsgMjU6IFsxLCA3OF0gfSwgeyAyNzogWzEsIDc5XSB9LCBvKCRWSiwgWzIsIDIzXSksIHsgMzU6IDgwLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogODYsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA4NywgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDg4LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogODksIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5MCwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDkxLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogOTIsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5MywgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDk0LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogOTUsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5NiwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDk3LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogOTgsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5OSwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMCwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMSwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMiwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMywgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwNCwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIG8oJFZPLCBbMiwgNTldKSwgeyAzNTogMTA1LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA2LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA3LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA4LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA5LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTEwLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTExLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTEyLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTEzLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTE0LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTE1LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAyMDogMTE2LCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0MzogMjMsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmksIDUxOiAkVmosIDUyOiAkVmssIDUzOiAkVmwsIDU0OiAkVm0sIDU1OiAkVm4sIDU2OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDU5OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYyOiAkVnUsIDYzOiAkVnYsIDY0OiAkVncsIDY1OiAkVngsIDY2OiAkVnksIDY3OiAkVnosIDY4OiAkVkEsIDY5OiAkVkIsIDcwOiAkVkMsIDcxOiAkVkQsIDcyOiAkVkUsIDczOiAkVkYsIDc0OiAkVkcgfSwgeyAxMjogWzEsIDExOF0sIDMzOiBbMSwgMTE3XSB9LCB7IDM1OiAxMTksIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjAsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjEsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjIsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjMsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjQsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjUsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDE0OiBbMSwgMTI2XSB9LCB7IDE0OiBbMSwgMTI3XSB9LCB7IDE0OiBbMSwgMTI4XSB9LCB7IDE0OiBbMSwgMTI5XSB9LCB7IDE6IFsyLCA4XSB9LCBvKCRWSCwgWzIsIDE1XSksIG8oJFZJLCBbMiwgMTddLCB7IDIxOiAyMiwgMTk6IDEzMCwgMjI6ICRWMCwgMjM6ICRWMSwgMjQ6ICRWMiwgMjY6ICRWMywgMjg6ICRWNCB9KSwgbygkVkgsIFsyLCAzN10sIHsgMTk6IDIwLCAyMDogMjEsIDIxOiAyMiwgNDM6IDIzLCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAxMzogMTMxLCAyMjogJFYwLCAyMzogJFYxLCAyNDogJFYyLCAyNjogJFYzLCAyODogJFY0LCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpLCA1MTogJFZqLCA1MjogJFZrLCA1MzogJFZsLCA1NDogJFZtLCA1NTogJFZuLCA1NjogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA1OTogJFZyLCA2MDogJFZzLCA2MTogJFZ0LCA2MjogJFZ1LCA2MzogJFZ2LCA2NDogJFZ3LCA2NTogJFZ4LCA2NjogJFZ5LCA2NzogJFZ6LCA2ODogJFZBLCA2OTogJFZCLCA3MDogJFZDLCA3MTogJFZELCA3MjogJFZFLCA3MzogJFZGLCA3NDogJFZHIH0pLCBvKCRWSiwgWzIsIDIxXSksIG8oJFZKLCBbMiwgMjJdKSwgbygkVk8sIFsyLCAzOV0pLCBvKCRWUCwgWzIsIDcxXSwgeyA3NTogODEsIDM1OiAxMzIsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSksIG8oJFZRLCBbMiwgNzNdKSwgeyA3ODogWzEsIDEzM10gfSwgbygkVlEsIFsyLCA3NV0pLCBvKCRWUSwgWzIsIDc2XSksIG8oJFZPLCBbMiwgNDBdKSwgbygkVk8sIFsyLCA0MV0pLCBvKCRWTywgWzIsIDQyXSksIG8oJFZPLCBbMiwgNDNdKSwgbygkVk8sIFsyLCA0NF0pLCBvKCRWTywgWzIsIDQ1XSksIG8oJFZPLCBbMiwgNDZdKSwgbygkVk8sIFsyLCA0N10pLCBvKCRWTywgWzIsIDQ4XSksIG8oJFZPLCBbMiwgNDldKSwgbygkVk8sIFsyLCA1MF0pLCBvKCRWTywgWzIsIDUxXSksIG8oJFZPLCBbMiwgNTJdKSwgbygkVk8sIFsyLCA1M10pLCBvKCRWTywgWzIsIDU0XSksIG8oJFZPLCBbMiwgNTVdKSwgbygkVk8sIFsyLCA1Nl0pLCBvKCRWTywgWzIsIDU3XSksIG8oJFZPLCBbMiwgNThdKSwgbygkVk8sIFsyLCA2MF0pLCBvKCRWTywgWzIsIDYxXSksIG8oJFZPLCBbMiwgNjJdKSwgbygkVk8sIFsyLCA2M10pLCBvKCRWTywgWzIsIDY0XSksIG8oJFZPLCBbMiwgNjVdKSwgbygkVk8sIFsyLCA2Nl0pLCBvKCRWTywgWzIsIDY3XSksIG8oJFZPLCBbMiwgNjhdKSwgbygkVk8sIFsyLCA2OV0pLCBvKCRWTywgWzIsIDcwXSksIHsgMzE6IDEzNCwgNDI6IFsxLCAxMzVdIH0sIHsgMTI6IFsxLCAxMzZdIH0sIHsgMzM6IFsxLCAxMzddIH0sIG8oJFZSLCBbMiwgMjhdKSwgbygkVlIsIFsyLCAyOV0pLCBvKCRWUiwgWzIsIDMwXSksIG8oJFZSLCBbMiwgMzFdKSwgbygkVlIsIFsyLCAzMl0pLCBvKCRWUiwgWzIsIDMzXSksIG8oJFZSLCBbMiwgMzRdKSwgeyAxOiBbMiwgOV0gfSwgeyAxOiBbMiwgMTBdIH0sIHsgMTogWzIsIDExXSB9LCB7IDE6IFsyLCAxMl0gfSwgbygkVkksIFsyLCAxOF0pLCBvKCRWSCwgWzIsIDM4XSksIG8oJFZQLCBbMiwgNzJdKSwgbygkVlEsIFsyLCA3NF0pLCBvKCRWTywgWzIsIDI0XSksIG8oJFZPLCBbMiwgMzVdKSwgbygkVlMsIFsyLCAyNV0pLCBvKCRWUywgWzIsIDI2XSwgeyAxMjogWzEsIDEzOF0gfSksIG8oJFZTLCBbMiwgMjddKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMjogWzIsIDFdLCAzOiBbMiwgMl0sIDQ6IFsyLCA3XSwgNTogWzIsIDNdLCA2OiBbMiwgNF0sIDc6IFsyLCA1XSwgODogWzIsIDZdLCA3NDogWzIsIDhdLCAxMjY6IFsyLCA5XSwgMTI3OiBbMiwgMTBdLCAxMjg6IFsyLCAxMV0sIDEyOTogWzIsIDEyXSB9LFxuICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShwb3BTdGFjaywgXCJwb3BTdGFja1wiKTtcbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgX19uYW1lKGxleCwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwicGFyc2VcIilcbiAgfTtcbiAgdmFyIGxleGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwic2V0SW5wdXRcIiksXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LCBcImlucHV0XCIpLFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJ1bnB1dFwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcIm1vcmVcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJyZWplY3RcIiksXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LCBcImxlc3NcIiksXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwicGFzdElucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJ1cGNvbWluZ0lucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMyID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMyICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gMjI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gMjM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgYztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiAxMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBlcnNvbl9leHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBlcnNvblwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dF9kYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzeXN0ZW1fZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN5c3RlbVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYm91bmRhcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gMzc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImVudGVycHJpc2VfYm91bmRhcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN5c3RlbV9ib3VuZGFyeVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dF9kYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb250YWluZXJfZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2JvdW5kYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0X3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0X2RiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfcXVldWVcIik7XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNvbXBvbmVudF9kYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA1OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29tcG9uZW50XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlX2xcIik7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm5vZGVfclwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJiaXJlbFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX3VcIik7XG4gICAgICAgICAgICByZXR1cm4gNjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF91XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfZFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX2RcIik7XG4gICAgICAgICAgICByZXR1cm4gNjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9sXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfbFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX3JcIik7XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9yXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX2luZGV4XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDcxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJ1cGRhdGVfZWxfc3R5bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gNzI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInVwZGF0ZV9yZWxfc3R5bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInVwZGF0ZV9sYXlvdXRfY29uZmlnXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDc0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICAgIHJldHVybiBcIkVPRl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYXR0cmlidXRlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVRUUklCVVRFX0VNUFRZXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImF0dHJpYnV0ZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgICAgcmV0dXJuIDgwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ19rdlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nX2t2X2tleVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIlNUUl9LRVlcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nX2t2X3ZhbHVlXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiBcIlNUUl9WQUxVRVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODA6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICByZXR1cm4gXCJMQlJBQ0VcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgICByZXR1cm4gXCJSQlJBQ0VcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgICByZXR1cm4gXCJTUEFDRVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgIHJldHVybiBcIkVPTFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NTpcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzouKmRpcmVjdGlvblxccytUQlteXFxuXSopLywgL14oPzouKmRpcmVjdGlvblxccytCVFteXFxuXSopLywgL14oPzouKmRpcmVjdGlvblxccytSTFteXFxuXSopLywgL14oPzouKmRpcmVjdGlvblxccytMUlteXFxuXSopLywgL14oPzp0aXRsZVxcc1teI1xcbjtdKykvLCAvXig/OmFjY0Rlc2NyaXB0aW9uXFxzW14jXFxuO10rKS8sIC9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86JSUoPyFcXHspKlteXFxuXSooXFxyP1xcbj8pKykvLCAvXig/OiUlW15cXG5dKihcXHI/XFxuKSopLywgL14oPzpcXHMqKFxccj9cXG4pKykvLCAvXig/OlxccyspLywgL14oPzpDNENvbnRleHRcXGIpLywgL14oPzpDNENvbnRhaW5lclxcYikvLCAvXig/OkM0Q29tcG9uZW50XFxiKS8sIC9eKD86QzREeW5hbWljXFxiKS8sIC9eKD86QzREZXBsb3ltZW50XFxiKS8sIC9eKD86UGVyc29uX0V4dFxcYikvLCAvXig/OlBlcnNvblxcYikvLCAvXig/OlN5c3RlbVF1ZXVlX0V4dFxcYikvLCAvXig/OlN5c3RlbURiX0V4dFxcYikvLCAvXig/OlN5c3RlbV9FeHRcXGIpLywgL14oPzpTeXN0ZW1RdWV1ZVxcYikvLCAvXig/OlN5c3RlbURiXFxiKS8sIC9eKD86U3lzdGVtXFxiKS8sIC9eKD86Qm91bmRhcnlcXGIpLywgL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XFxiKS8sIC9eKD86U3lzdGVtX0JvdW5kYXJ5XFxiKS8sIC9eKD86Q29udGFpbmVyUXVldWVfRXh0XFxiKS8sIC9eKD86Q29udGFpbmVyRGJfRXh0XFxiKS8sIC9eKD86Q29udGFpbmVyX0V4dFxcYikvLCAvXig/OkNvbnRhaW5lclF1ZXVlXFxiKS8sIC9eKD86Q29udGFpbmVyRGJcXGIpLywgL14oPzpDb250YWluZXJcXGIpLywgL14oPzpDb250YWluZXJfQm91bmRhcnlcXGIpLywgL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcXGIpLywgL14oPzpDb21wb25lbnREYl9FeHRcXGIpLywgL14oPzpDb21wb25lbnRfRXh0XFxiKS8sIC9eKD86Q29tcG9uZW50UXVldWVcXGIpLywgL14oPzpDb21wb25lbnREYlxcYikvLCAvXig/OkNvbXBvbmVudFxcYikvLCAvXig/OkRlcGxveW1lbnRfTm9kZVxcYikvLCAvXig/Ok5vZGVcXGIpLywgL14oPzpOb2RlX0xcXGIpLywgL14oPzpOb2RlX1JcXGIpLywgL14oPzpSZWxcXGIpLywgL14oPzpCaVJlbFxcYikvLCAvXig/OlJlbF9VcFxcYikvLCAvXig/OlJlbF9VXFxiKS8sIC9eKD86UmVsX0Rvd25cXGIpLywgL14oPzpSZWxfRFxcYikvLCAvXig/OlJlbF9MZWZ0XFxiKS8sIC9eKD86UmVsX0xcXGIpLywgL14oPzpSZWxfUmlnaHRcXGIpLywgL14oPzpSZWxfUlxcYikvLCAvXig/OlJlbF9CYWNrXFxiKS8sIC9eKD86UmVsSW5kZXhcXGIpLywgL14oPzpVcGRhdGVFbGVtZW50U3R5bGVcXGIpLywgL14oPzpVcGRhdGVSZWxTdHlsZVxcYikvLCAvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xcYikvLCAvXig/OiQpLywgL14oPzpbKF1bIF0qWyxdKS8sIC9eKD86WyhdKS8sIC9eKD86WyldKS8sIC9eKD86LCwpLywgL14oPzosKS8sIC9eKD86WyBdKltcIl1bXCJdKS8sIC9eKD86WyBdKltcIl0pLywgL14oPzpbXCJdKS8sIC9eKD86W15cIl0qKS8sIC9eKD86WyBdKltcXCRdKS8sIC9eKD86W149XSopLywgL14oPzpbPV1bIF0qW1wiXSkvLCAvXig/OlteXCJdKykvLCAvXig/OltcIl0pLywgL14oPzpbXixdKykvLCAvXig/OlxceykvLCAvXig/OlxcfSkvLCAvXig/OltcXHNdKykvLCAvXig/OltcXG5cXHJdKykvLCAvXig/OiQpL10sXG4gICAgICBjb25kaXRpb25zOiB7IFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzExLCAxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbOV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nX2t2X3ZhbHVlXCI6IHsgXCJydWxlc1wiOiBbNzgsIDc5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdfa3Zfa2V5XCI6IHsgXCJydWxlc1wiOiBbNzddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ19rdlwiOiB7IFwicnVsZXNcIjogWzc2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFs3MywgNzRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImF0dHJpYnV0ZVwiOiB7IFwicnVsZXNcIjogWzY4LCA2OSwgNzAsIDcxLCA3MiwgNzUsIDgwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ1cGRhdGVfbGF5b3V0X2NvbmZpZ1wiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ1cGRhdGVfcmVsX3N0eWxlXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInVwZGF0ZV9lbF9zdHlsZVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfclwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfbFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfZFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfdVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfYmlcIjogeyBcInJ1bGVzXCI6IFtdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInJlbFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJub2RlX3JcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibm9kZV9sXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm5vZGVcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiaW5kZXhcIjogeyBcInJ1bGVzXCI6IFtdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInJlbF9pbmRleFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRfZXh0X3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRfZXh0X2RiXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbXBvbmVudF9leHRcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29tcG9uZW50X3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbXBvbmVudF9kYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyX2JvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9leHRfcXVldWVcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyX2V4dF9kYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJfZXh0XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9xdWV1ZVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJfZGJcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImJpcmVsXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9ib3VuZGFyeVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJlbnRlcnByaXNlX2JvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImJvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9leHRfcXVldWVcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtX2V4dF9kYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzeXN0ZW1fZXh0XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9xdWV1ZVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzeXN0ZW1fZGJcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInBlcnNvbl9leHRcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicGVyc29uXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDgxLCA4MiwgODMsIDg0LCA4NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBjNERpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2M0L2M0RGIuanNcbnZhciBjNFNoYXBlQXJyYXkgPSBbXTtcbnZhciBib3VuZGFyeVBhcnNlU3RhY2sgPSBbXCJcIl07XG52YXIgY3VycmVudEJvdW5kYXJ5UGFyc2UgPSBcImdsb2JhbFwiO1xudmFyIHBhcmVudEJvdW5kYXJ5UGFyc2UgPSBcIlwiO1xudmFyIGJvdW5kYXJpZXMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJnbG9iYWxcIixcbiAgICBsYWJlbDogeyB0ZXh0OiBcImdsb2JhbFwiIH0sXG4gICAgdHlwZTogeyB0ZXh0OiBcImdsb2JhbFwiIH0sXG4gICAgdGFnczogbnVsbCxcbiAgICBsaW5rOiBudWxsLFxuICAgIHBhcmVudEJvdW5kYXJ5OiBcIlwiXG4gIH1cbl07XG52YXIgcmVscyA9IFtdO1xudmFyIHRpdGxlID0gXCJcIjtcbnZhciB3cmFwRW5hYmxlZCA9IGZhbHNlO1xudmFyIGM0U2hhcGVJblJvdyA9IDQ7XG52YXIgYzRCb3VuZGFyeUluUm93ID0gMjtcbnZhciBjNFR5cGU7XG52YXIgZ2V0QzRUeXBlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGM0VHlwZTtcbn0sIFwiZ2V0QzRUeXBlXCIpO1xudmFyIHNldEM0VHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYzRUeXBlUGFyYW0pIHtcbiAgbGV0IHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZVRleHQoYzRUeXBlUGFyYW0sIGdldENvbmZpZygpKTtcbiAgYzRUeXBlID0gc2FuaXRpemVkVGV4dDtcbn0sIFwic2V0QzRUeXBlXCIpO1xudmFyIGFkZFJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZSwgZnJvbSwgdG8sIGxhYmVsLCB0ZWNobiwgZGVzY3IsIHNwcml0ZSwgdGFncywgbGluaykge1xuICBpZiAodHlwZSA9PT0gdm9pZCAwIHx8IHR5cGUgPT09IG51bGwgfHwgZnJvbSA9PT0gdm9pZCAwIHx8IGZyb20gPT09IG51bGwgfHwgdG8gPT09IHZvaWQgMCB8fCB0byA9PT0gbnVsbCB8fCBsYWJlbCA9PT0gdm9pZCAwIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCByZWwgPSB7fTtcbiAgY29uc3Qgb2xkID0gcmVscy5maW5kKChyZWwyKSA9PiByZWwyLmZyb20gPT09IGZyb20gJiYgcmVsMi50byA9PT0gdG8pO1xuICBpZiAob2xkKSB7XG4gICAgcmVsID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIHJlbHMucHVzaChyZWwpO1xuICB9XG4gIHJlbC50eXBlID0gdHlwZTtcbiAgcmVsLmZyb20gPSBmcm9tO1xuICByZWwudG8gPSB0bztcbiAgcmVsLmxhYmVsID0geyB0ZXh0OiBsYWJlbCB9O1xuICBpZiAodGVjaG4gPT09IHZvaWQgMCB8fCB0ZWNobiA9PT0gbnVsbCkge1xuICAgIHJlbC50ZWNobiA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGVjaG4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0ZWNobilbMF07XG4gICAgICByZWxba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVsLnRlY2huID0geyB0ZXh0OiB0ZWNobiB9O1xuICAgIH1cbiAgfVxuICBpZiAoZGVzY3IgPT09IHZvaWQgMCB8fCBkZXNjciA9PT0gbnVsbCkge1xuICAgIHJlbC5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICByZWxba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVsLmRlc2NyID0geyB0ZXh0OiBkZXNjciB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzcHJpdGUpWzBdO1xuICAgIHJlbFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmVsLnNwcml0ZSA9IHNwcml0ZTtcbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgcmVsW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZWwudGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIHJlbFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmVsLmxpbmsgPSBsaW5rO1xuICB9XG4gIHJlbC53cmFwID0gYXV0b1dyYXAoKTtcbn0sIFwiYWRkUmVsXCIpO1xudmFyIGFkZFBlcnNvbk9yU3lzdGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eXBlQzRTaGFwZSwgYWxpYXMsIGxhYmVsLCBkZXNjciwgc3ByaXRlLCB0YWdzLCBsaW5rKSB7XG4gIGlmIChhbGlhcyA9PT0gbnVsbCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgcGVyc29uT3JTeXN0ZW0gPSB7fTtcbiAgY29uc3Qgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKHBlcnNvbk9yU3lzdGVtMikgPT4gcGVyc29uT3JTeXN0ZW0yLmFsaWFzID09PSBhbGlhcyk7XG4gIGlmIChvbGQgJiYgYWxpYXMgPT09IG9sZC5hbGlhcykge1xuICAgIHBlcnNvbk9yU3lzdGVtID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIHBlcnNvbk9yU3lzdGVtLmFsaWFzID0gYWxpYXM7XG4gICAgYzRTaGFwZUFycmF5LnB1c2gocGVyc29uT3JTeXN0ZW0pO1xuICB9XG4gIGlmIChsYWJlbCA9PT0gdm9pZCAwIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcGVyc29uT3JTeXN0ZW0ubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS5sYWJlbCA9IHsgdGV4dDogbGFiZWwgfTtcbiAgfVxuICBpZiAoZGVzY3IgPT09IHZvaWQgMCB8fCBkZXNjciA9PT0gbnVsbCkge1xuICAgIHBlcnNvbk9yU3lzdGVtLmRlc2NyID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGRlc2NyKVswXTtcbiAgICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcnNvbk9yU3lzdGVtLmRlc2NyID0geyB0ZXh0OiBkZXNjciB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzcHJpdGUpWzBdO1xuICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS5zcHJpdGUgPSBzcHJpdGU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgcGVyc29uT3JTeXN0ZW1ba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHBlcnNvbk9yU3lzdGVtLmxpbmsgPSBsaW5rO1xuICB9XG4gIHBlcnNvbk9yU3lzdGVtLnR5cGVDNFNoYXBlID0geyB0ZXh0OiB0eXBlQzRTaGFwZSB9O1xuICBwZXJzb25PclN5c3RlbS5wYXJlbnRCb3VuZGFyeSA9IGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xuICBwZXJzb25PclN5c3RlbS53cmFwID0gYXV0b1dyYXAoKTtcbn0sIFwiYWRkUGVyc29uT3JTeXN0ZW1cIik7XG52YXIgYWRkQ29udGFpbmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eXBlQzRTaGFwZSwgYWxpYXMsIGxhYmVsLCB0ZWNobiwgZGVzY3IsIHNwcml0ZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGNvbnRhaW5lciA9IHt9O1xuICBjb25zdCBvbGQgPSBjNFNoYXBlQXJyYXkuZmluZCgoY29udGFpbmVyMikgPT4gY29udGFpbmVyMi5hbGlhcyA9PT0gYWxpYXMpO1xuICBpZiAob2xkICYmIGFsaWFzID09PSBvbGQuYWxpYXMpIHtcbiAgICBjb250YWluZXIgPSBvbGQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmFsaWFzID0gYWxpYXM7XG4gICAgYzRTaGFwZUFycmF5LnB1c2goY29udGFpbmVyKTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5sYWJlbCA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5sYWJlbCA9IHsgdGV4dDogbGFiZWwgfTtcbiAgfVxuICBpZiAodGVjaG4gPT09IHZvaWQgMCB8fCB0ZWNobiA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci50ZWNobiA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGVjaG4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0ZWNobilbMF07XG4gICAgICBjb250YWluZXJba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnRlY2huID0geyB0ZXh0OiB0ZWNobiB9O1xuICAgIH1cbiAgfVxuICBpZiAoZGVzY3IgPT09IHZvaWQgMCB8fCBkZXNjciA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICBjb250YWluZXJba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLmRlc2NyID0geyB0ZXh0OiBkZXNjciB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzcHJpdGUpWzBdO1xuICAgIGNvbnRhaW5lcltrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnNwcml0ZSA9IHNwcml0ZTtcbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgY29udGFpbmVyW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIudGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIGNvbnRhaW5lcltrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmxpbmsgPSBsaW5rO1xuICB9XG4gIGNvbnRhaW5lci53cmFwID0gYXV0b1dyYXAoKTtcbiAgY29udGFpbmVyLnR5cGVDNFNoYXBlID0geyB0ZXh0OiB0eXBlQzRTaGFwZSB9O1xuICBjb250YWluZXIucGFyZW50Qm91bmRhcnkgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbn0sIFwiYWRkQ29udGFpbmVyXCIpO1xudmFyIGFkZENvbXBvbmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZUM0U2hhcGUsIGFsaWFzLCBsYWJlbCwgdGVjaG4sIGRlc2NyLCBzcHJpdGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBjb21wb25lbnQgPSB7fTtcbiAgY29uc3Qgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKGNvbXBvbmVudDIpID0+IGNvbXBvbmVudDIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgY29tcG9uZW50ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5hbGlhcyA9IGFsaWFzO1xuICAgIGM0U2hhcGVBcnJheS5wdXNoKGNvbXBvbmVudCk7XG4gIH1cbiAgaWYgKGxhYmVsID09PSB2b2lkIDAgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnQubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHRlY2huID09PSB2b2lkIDAgfHwgdGVjaG4gPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQudGVjaG4gPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRlY2huID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGVjaG4pWzBdO1xuICAgICAgY29tcG9uZW50W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC50ZWNobiA9IHsgdGV4dDogdGVjaG4gfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQuZGVzY3IgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoZGVzY3IpWzBdO1xuICAgICAgY29tcG9uZW50W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBzcHJpdGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICBjb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5zcHJpdGUgPSBzcHJpdGU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGNvbXBvbmVudFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29tcG9uZW50LnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBjb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5saW5rID0gbGluaztcbiAgfVxuICBjb21wb25lbnQud3JhcCA9IGF1dG9XcmFwKCk7XG4gIGNvbXBvbmVudC50eXBlQzRTaGFwZSA9IHsgdGV4dDogdHlwZUM0U2hhcGUgfTtcbiAgY29tcG9uZW50LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG59LCBcImFkZENvbXBvbmVudFwiKTtcbnZhciBhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhbGlhcywgbGFiZWwsIHR5cGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBib3VuZGFyeSA9IHt9O1xuICBjb25zdCBvbGQgPSBib3VuZGFyaWVzLmZpbmQoKGJvdW5kYXJ5MikgPT4gYm91bmRhcnkyLmFsaWFzID09PSBhbGlhcyk7XG4gIGlmIChvbGQgJiYgYWxpYXMgPT09IG9sZC5hbGlhcykge1xuICAgIGJvdW5kYXJ5ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmFsaWFzID0gYWxpYXM7XG4gICAgYm91bmRhcmllcy5wdXNoKGJvdW5kYXJ5KTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IHZvaWQgMCB8fCB0eXBlID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogXCJzeXN0ZW1cIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHR5cGUpWzBdO1xuICAgICAgYm91bmRhcnlba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogdHlwZSB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBib3VuZGFyeVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGluayA9IGxpbms7XG4gIH1cbiAgYm91bmRhcnkucGFyZW50Qm91bmRhcnkgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgYm91bmRhcnkud3JhcCA9IGF1dG9XcmFwKCk7XG4gIHBhcmVudEJvdW5kYXJ5UGFyc2UgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgY3VycmVudEJvdW5kYXJ5UGFyc2UgPSBhbGlhcztcbiAgYm91bmRhcnlQYXJzZVN0YWNrLnB1c2gocGFyZW50Qm91bmRhcnlQYXJzZSk7XG59LCBcImFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnlcIik7XG52YXIgYWRkQ29udGFpbmVyQm91bmRhcnkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGFsaWFzLCBsYWJlbCwgdHlwZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGJvdW5kYXJ5ID0ge307XG4gIGNvbnN0IG9sZCA9IGJvdW5kYXJpZXMuZmluZCgoYm91bmRhcnkyKSA9PiBib3VuZGFyeTIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgYm91bmRhcnkgPSBvbGQ7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkuYWxpYXMgPSBhbGlhcztcbiAgICBib3VuZGFyaWVzLnB1c2goYm91bmRhcnkpO1xuICB9XG4gIGlmIChsYWJlbCA9PT0gdm9pZCAwIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS5sYWJlbCA9IHsgdGV4dDogbGFiZWwgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gdm9pZCAwIHx8IHR5cGUgPT09IG51bGwpIHtcbiAgICBib3VuZGFyeS50eXBlID0geyB0ZXh0OiBcImNvbnRhaW5lclwiIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModHlwZSlbMF07XG4gICAgICBib3VuZGFyeVtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZGFyeS50eXBlID0geyB0ZXh0OiB0eXBlIH07XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgdGFncyA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0YWdzKVswXTtcbiAgICBib3VuZGFyeVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkudGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIGJvdW5kYXJ5W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS5saW5rID0gbGluaztcbiAgfVxuICBib3VuZGFyeS5wYXJlbnRCb3VuZGFyeSA9IGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xuICBib3VuZGFyeS53cmFwID0gYXV0b1dyYXAoKTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xuICBjdXJyZW50Qm91bmRhcnlQYXJzZSA9IGFsaWFzO1xuICBib3VuZGFyeVBhcnNlU3RhY2sucHVzaChwYXJlbnRCb3VuZGFyeVBhcnNlKTtcbn0sIFwiYWRkQ29udGFpbmVyQm91bmRhcnlcIik7XG52YXIgYWRkRGVwbG95bWVudE5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG5vZGVUeXBlLCBhbGlhcywgbGFiZWwsIHR5cGUsIGRlc2NyLCBzcHJpdGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBib3VuZGFyeSA9IHt9O1xuICBjb25zdCBvbGQgPSBib3VuZGFyaWVzLmZpbmQoKGJvdW5kYXJ5MikgPT4gYm91bmRhcnkyLmFsaWFzID09PSBhbGlhcyk7XG4gIGlmIChvbGQgJiYgYWxpYXMgPT09IG9sZC5hbGlhcykge1xuICAgIGJvdW5kYXJ5ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmFsaWFzID0gYWxpYXM7XG4gICAgYm91bmRhcmllcy5wdXNoKGJvdW5kYXJ5KTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IHZvaWQgMCB8fCB0eXBlID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogXCJub2RlXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0eXBlKVswXTtcbiAgICAgIGJvdW5kYXJ5W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJ5LnR5cGUgPSB7IHRleHQ6IHR5cGUgfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBib3VuZGFyeS5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICBib3VuZGFyeVtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZGFyeS5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGJvdW5kYXJ5W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmxpbmsgPSBsaW5rO1xuICB9XG4gIGJvdW5kYXJ5Lm5vZGVUeXBlID0gbm9kZVR5cGU7XG4gIGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5LndyYXAgPSBhdXRvV3JhcCgpO1xuICBwYXJlbnRCb3VuZGFyeVBhcnNlID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gYWxpYXM7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wdXNoKHBhcmVudEJvdW5kYXJ5UGFyc2UpO1xufSwgXCJhZGREZXBsb3ltZW50Tm9kZVwiKTtcbnZhciBwb3BCb3VuZGFyeVBhcnNlU3RhY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBjdXJyZW50Qm91bmRhcnlQYXJzZSA9IHBhcmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wb3AoKTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IGJvdW5kYXJ5UGFyc2VTdGFjay5wb3AoKTtcbiAgYm91bmRhcnlQYXJzZVN0YWNrLnB1c2gocGFyZW50Qm91bmRhcnlQYXJzZSk7XG59LCBcInBvcEJvdW5kYXJ5UGFyc2VTdGFja1wiKTtcbnZhciB1cGRhdGVFbFN0eWxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eXBlQzRTaGFwZSwgZWxlbWVudE5hbWUsIGJnQ29sb3IsIGZvbnRDb2xvciwgYm9yZGVyQ29sb3IsIHNoYWRvd2luZywgc2hhcGUsIHNwcml0ZSwgdGVjaG4sIGxlZ2VuZFRleHQsIGxlZ2VuZFNwcml0ZSkge1xuICBsZXQgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuYWxpYXMgPT09IGVsZW1lbnROYW1lKTtcbiAgaWYgKG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgb2xkID0gYm91bmRhcmllcy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmFsaWFzID09PSBlbGVtZW50TmFtZSk7XG4gICAgaWYgKG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmIChiZ0NvbG9yICE9PSB2b2lkIDAgJiYgYmdDb2xvciAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgYmdDb2xvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGJnQ29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLmJnQ29sb3IgPSBiZ0NvbG9yO1xuICAgIH1cbiAgfVxuICBpZiAoZm9udENvbG9yICE9PSB2b2lkIDAgJiYgZm9udENvbG9yICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBmb250Q29sb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhmb250Q29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgICB9XG4gIH1cbiAgaWYgKGJvcmRlckNvbG9yICE9PSB2b2lkIDAgJiYgYm9yZGVyQ29sb3IgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGJvcmRlckNvbG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoYm9yZGVyQ29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLmJvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7XG4gICAgfVxuICB9XG4gIGlmIChzaGFkb3dpbmcgIT09IHZvaWQgMCAmJiBzaGFkb3dpbmcgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHNoYWRvd2luZyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHNoYWRvd2luZylbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQuc2hhZG93aW5nID0gc2hhZG93aW5nO1xuICAgIH1cbiAgfVxuICBpZiAoc2hhcGUgIT09IHZvaWQgMCAmJiBzaGFwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygc2hhcGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzaGFwZSlbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQuc2hhcGUgPSBzaGFwZTtcbiAgICB9XG4gIH1cbiAgaWYgKHNwcml0ZSAhPT0gdm9pZCAwICYmIHNwcml0ZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygc3ByaXRlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5zcHJpdGUgPSBzcHJpdGU7XG4gICAgfVxuICB9XG4gIGlmICh0ZWNobiAhPT0gdm9pZCAwICYmIHRlY2huICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiB0ZWNobiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRlY2huKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC50ZWNobiA9IHRlY2huO1xuICAgIH1cbiAgfVxuICBpZiAobGVnZW5kVGV4dCAhPT0gdm9pZCAwICYmIGxlZ2VuZFRleHQgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGxlZ2VuZFRleHQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsZWdlbmRUZXh0KVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5sZWdlbmRUZXh0ID0gbGVnZW5kVGV4dDtcbiAgICB9XG4gIH1cbiAgaWYgKGxlZ2VuZFNwcml0ZSAhPT0gdm9pZCAwICYmIGxlZ2VuZFNwcml0ZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgbGVnZW5kU3ByaXRlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGVnZW5kU3ByaXRlKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5sZWdlbmRTcHJpdGUgPSBsZWdlbmRTcHJpdGU7XG4gICAgfVxuICB9XG59LCBcInVwZGF0ZUVsU3R5bGVcIik7XG52YXIgdXBkYXRlUmVsU3R5bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR5cGVDNFNoYXBlLCBmcm9tLCB0bywgdGV4dENvbG9yLCBsaW5lQ29sb3IsIG9mZnNldFgsIG9mZnNldFkpIHtcbiAgY29uc3Qgb2xkID0gcmVscy5maW5kKChyZWwpID0+IHJlbC5mcm9tID09PSBmcm9tICYmIHJlbC50byA9PT0gdG8pO1xuICBpZiAob2xkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRleHRDb2xvciAhPT0gdm9pZCAwICYmIHRleHRDb2xvciAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgdGV4dENvbG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGV4dENvbG9yKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgfVxuICB9XG4gIGlmIChsaW5lQ29sb3IgIT09IHZvaWQgMCAmJiBsaW5lQ29sb3IgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGxpbmVDb2xvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmVDb2xvcilbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIH1cbiAgfVxuICBpZiAob2Zmc2V0WCAhPT0gdm9pZCAwICYmIG9mZnNldFggIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9mZnNldFggPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhvZmZzZXRYKVswXTtcbiAgICAgIG9sZFtrZXldID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQub2Zmc2V0WCA9IHBhcnNlSW50KG9mZnNldFgpO1xuICAgIH1cbiAgfVxuICBpZiAob2Zmc2V0WSAhPT0gdm9pZCAwICYmIG9mZnNldFkgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9mZnNldFkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhvZmZzZXRZKVswXTtcbiAgICAgIG9sZFtrZXldID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQub2Zmc2V0WSA9IHBhcnNlSW50KG9mZnNldFkpO1xuICAgIH1cbiAgfVxufSwgXCJ1cGRhdGVSZWxTdHlsZVwiKTtcbnZhciB1cGRhdGVMYXlvdXRDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR5cGVDNFNoYXBlLCBjNFNoYXBlSW5Sb3dQYXJhbSwgYzRCb3VuZGFyeUluUm93UGFyYW0pIHtcbiAgbGV0IGM0U2hhcGVJblJvd1ZhbHVlID0gYzRTaGFwZUluUm93O1xuICBsZXQgYzRCb3VuZGFyeUluUm93VmFsdWUgPSBjNEJvdW5kYXJ5SW5Sb3c7XG4gIGlmICh0eXBlb2YgYzRTaGFwZUluUm93UGFyYW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoYzRTaGFwZUluUm93UGFyYW0pWzBdO1xuICAgIGM0U2hhcGVJblJvd1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGM0U2hhcGVJblJvd1ZhbHVlID0gcGFyc2VJbnQoYzRTaGFwZUluUm93UGFyYW0pO1xuICB9XG4gIGlmICh0eXBlb2YgYzRCb3VuZGFyeUluUm93UGFyYW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoYzRCb3VuZGFyeUluUm93UGFyYW0pWzBdO1xuICAgIGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gcGFyc2VJbnQoYzRCb3VuZGFyeUluUm93UGFyYW0pO1xuICB9XG4gIGlmIChjNFNoYXBlSW5Sb3dWYWx1ZSA+PSAxKSB7XG4gICAgYzRTaGFwZUluUm93ID0gYzRTaGFwZUluUm93VmFsdWU7XG4gIH1cbiAgaWYgKGM0Qm91bmRhcnlJblJvd1ZhbHVlID49IDEpIHtcbiAgICBjNEJvdW5kYXJ5SW5Sb3cgPSBjNEJvdW5kYXJ5SW5Sb3dWYWx1ZTtcbiAgfVxufSwgXCJ1cGRhdGVMYXlvdXRDb25maWdcIik7XG52YXIgZ2V0QzRTaGFwZUluUm93ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGM0U2hhcGVJblJvdztcbn0sIFwiZ2V0QzRTaGFwZUluUm93XCIpO1xudmFyIGdldEM0Qm91bmRhcnlJblJvdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjNEJvdW5kYXJ5SW5Sb3c7XG59LCBcImdldEM0Qm91bmRhcnlJblJvd1wiKTtcbnZhciBnZXRDdXJyZW50Qm91bmRhcnlQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbn0sIFwiZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2VcIik7XG52YXIgZ2V0UGFyZW50Qm91bmRhcnlQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwYXJlbnRCb3VuZGFyeVBhcnNlO1xufSwgXCJnZXRQYXJlbnRCb3VuZGFyeVBhcnNlXCIpO1xudmFyIGdldEM0U2hhcGVBcnJheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFyZW50Qm91bmRhcnkpIHtcbiAgaWYgKHBhcmVudEJvdW5kYXJ5ID09PSB2b2lkIDAgfHwgcGFyZW50Qm91bmRhcnkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYzRTaGFwZUFycmF5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjNFNoYXBlQXJyYXkuZmlsdGVyKChwZXJzb25PclN5c3RlbSkgPT4ge1xuICAgICAgcmV0dXJuIHBlcnNvbk9yU3lzdGVtLnBhcmVudEJvdW5kYXJ5ID09PSBwYXJlbnRCb3VuZGFyeTtcbiAgICB9KTtcbiAgfVxufSwgXCJnZXRDNFNoYXBlQXJyYXlcIik7XG52YXIgZ2V0QzRTaGFwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWxpYXMpIHtcbiAgcmV0dXJuIGM0U2hhcGVBcnJheS5maW5kKChwZXJzb25PclN5c3RlbSkgPT4gcGVyc29uT3JTeXN0ZW0uYWxpYXMgPT09IGFsaWFzKTtcbn0sIFwiZ2V0QzRTaGFwZVwiKTtcbnZhciBnZXRDNFNoYXBlS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFyZW50Qm91bmRhcnkpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGdldEM0U2hhcGVBcnJheShwYXJlbnRCb3VuZGFyeSkpO1xufSwgXCJnZXRDNFNoYXBlS2V5c1wiKTtcbnZhciBnZXRCb3VuZGFyaWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwYXJlbnRCb3VuZGFyeSkge1xuICBpZiAocGFyZW50Qm91bmRhcnkgPT09IHZvaWQgMCB8fCBwYXJlbnRCb3VuZGFyeSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBib3VuZGFyaWVzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBib3VuZGFyaWVzLmZpbHRlcigoYm91bmRhcnkpID0+IGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID09PSBwYXJlbnRCb3VuZGFyeSk7XG4gIH1cbn0sIFwiZ2V0Qm91bmRhcmllc1wiKTtcbnZhciBnZXRCb3VuZGFyeXMgPSBnZXRCb3VuZGFyaWVzO1xudmFyIGdldFJlbHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcmVscztcbn0sIFwiZ2V0UmVsc1wiKTtcbnZhciBnZXRUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aXRsZTtcbn0sIFwiZ2V0VGl0bGVcIik7XG52YXIgc2V0V3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24od3JhcFNldHRpbmcpIHtcbiAgd3JhcEVuYWJsZWQgPSB3cmFwU2V0dGluZztcbn0sIFwic2V0V3JhcFwiKTtcbnZhciBhdXRvV3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB3cmFwRW5hYmxlZDtcbn0sIFwiYXV0b1dyYXBcIik7XG52YXIgY2xlYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBjNFNoYXBlQXJyYXkgPSBbXTtcbiAgYm91bmRhcmllcyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJnbG9iYWxcIixcbiAgICAgIGxhYmVsOiB7IHRleHQ6IFwiZ2xvYmFsXCIgfSxcbiAgICAgIHR5cGU6IHsgdGV4dDogXCJnbG9iYWxcIiB9LFxuICAgICAgdGFnczogbnVsbCxcbiAgICAgIGxpbms6IG51bGwsXG4gICAgICBwYXJlbnRCb3VuZGFyeTogXCJcIlxuICAgIH1cbiAgXTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IFwiXCI7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gXCJnbG9iYWxcIjtcbiAgYm91bmRhcnlQYXJzZVN0YWNrID0gW1wiXCJdO1xuICByZWxzID0gW107XG4gIGJvdW5kYXJ5UGFyc2VTdGFjayA9IFtcIlwiXTtcbiAgdGl0bGUgPSBcIlwiO1xuICB3cmFwRW5hYmxlZCA9IGZhbHNlO1xuICBjNFNoYXBlSW5Sb3cgPSA0O1xuICBjNEJvdW5kYXJ5SW5Sb3cgPSAyO1xufSwgXCJjbGVhclwiKTtcbnZhciBMSU5FVFlQRSA9IHtcbiAgU09MSUQ6IDAsXG4gIERPVFRFRDogMSxcbiAgTk9URTogMixcbiAgU09MSURfQ1JPU1M6IDMsXG4gIERPVFRFRF9DUk9TUzogNCxcbiAgU09MSURfT1BFTjogNSxcbiAgRE9UVEVEX09QRU46IDYsXG4gIExPT1BfU1RBUlQ6IDEwLFxuICBMT09QX0VORDogMTEsXG4gIEFMVF9TVEFSVDogMTIsXG4gIEFMVF9FTFNFOiAxMyxcbiAgQUxUX0VORDogMTQsXG4gIE9QVF9TVEFSVDogMTUsXG4gIE9QVF9FTkQ6IDE2LFxuICBBQ1RJVkVfU1RBUlQ6IDE3LFxuICBBQ1RJVkVfRU5EOiAxOCxcbiAgUEFSX1NUQVJUOiAxOSxcbiAgUEFSX0FORDogMjAsXG4gIFBBUl9FTkQ6IDIxLFxuICBSRUNUX1NUQVJUOiAyMixcbiAgUkVDVF9FTkQ6IDIzLFxuICBTT0xJRF9QT0lOVDogMjQsXG4gIERPVFRFRF9QT0lOVDogMjVcbn07XG52YXIgQVJST1dUWVBFID0ge1xuICBGSUxMRUQ6IDAsXG4gIE9QRU46IDFcbn07XG52YXIgUExBQ0VNRU5UID0ge1xuICBMRUZUT0Y6IDAsXG4gIFJJR0hUT0Y6IDEsXG4gIE9WRVI6IDJcbn07XG52YXIgc2V0VGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBsZXQgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplVGV4dCh0eHQsIGdldENvbmZpZygpKTtcbiAgdGl0bGUgPSBzYW5pdGl6ZWRUZXh0O1xufSwgXCJzZXRUaXRsZVwiKTtcbnZhciBjNERiX2RlZmF1bHQgPSB7XG4gIGFkZFBlcnNvbk9yU3lzdGVtLFxuICBhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5LFxuICBhZGRDb250YWluZXIsXG4gIGFkZENvbnRhaW5lckJvdW5kYXJ5LFxuICBhZGRDb21wb25lbnQsXG4gIGFkZERlcGxveW1lbnROb2RlLFxuICBwb3BCb3VuZGFyeVBhcnNlU3RhY2ssXG4gIGFkZFJlbCxcbiAgdXBkYXRlRWxTdHlsZSxcbiAgdXBkYXRlUmVsU3R5bGUsXG4gIHVwZGF0ZUxheW91dENvbmZpZyxcbiAgYXV0b1dyYXAsXG4gIHNldFdyYXAsXG4gIGdldEM0U2hhcGVBcnJheSxcbiAgZ2V0QzRTaGFwZSxcbiAgZ2V0QzRTaGFwZUtleXMsXG4gIGdldEJvdW5kYXJpZXMsXG4gIGdldEJvdW5kYXJ5cyxcbiAgZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2UsXG4gIGdldFBhcmVudEJvdW5kYXJ5UGFyc2UsXG4gIGdldFJlbHMsXG4gIGdldFRpdGxlLFxuICBnZXRDNFR5cGUsXG4gIGdldEM0U2hhcGVJblJvdyxcbiAgZ2V0QzRCb3VuZGFyeUluUm93LFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLmM0LCBcImdldENvbmZpZ1wiKSxcbiAgY2xlYXIsXG4gIExJTkVUWVBFLFxuICBBUlJPV1RZUEUsXG4gIFBMQUNFTUVOVCxcbiAgc2V0VGl0bGUsXG4gIHNldEM0VHlwZVxuICAvLyBhcHBseSxcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jNC9jNFJlbmRlcmVyLmpzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2M0L3N2Z0RyYXcuanNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG52YXIgZHJhd1JlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCByZWN0RGF0YSkge1xuICByZXR1cm4gZHJhd1JlY3QoZWxlbSwgcmVjdERhdGEpO1xufSwgXCJkcmF3UmVjdFwiKTtcbnZhciBkcmF3SW1hZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHdpZHRoLCBoZWlnaHQsIHgsIHksIGxpbmspIHtcbiAgY29uc3QgaW1hZ2VFbGVtID0gZWxlbS5hcHBlbmQoXCJpbWFnZVwiKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCk7XG4gIGltYWdlRWxlbS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gIGltYWdlRWxlbS5hdHRyKFwieFwiLCB4KTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ5XCIsIHkpO1xuICBsZXQgc2FuaXRpemVkTGluayA9IGxpbmsuc3RhcnRzV2l0aChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NFwiKSA/IGxpbmsgOiBzYW5pdGl6ZVVybChsaW5rKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ4bGluazpocmVmXCIsIHNhbml0aXplZExpbmspO1xufSwgXCJkcmF3SW1hZ2VcIik7XG52YXIgZHJhd1JlbHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCByZWxzMiwgY29uZjIpID0+IHtcbiAgY29uc3QgcmVsc0VsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGxldCBpID0gMDtcbiAgZm9yIChsZXQgcmVsIG9mIHJlbHMyKSB7XG4gICAgbGV0IHRleHRDb2xvciA9IHJlbC50ZXh0Q29sb3IgPyByZWwudGV4dENvbG9yIDogXCIjNDQ0NDQ0XCI7XG4gICAgbGV0IHN0cm9rZUNvbG9yID0gcmVsLmxpbmVDb2xvciA/IHJlbC5saW5lQ29sb3IgOiBcIiM0NDQ0NDRcIjtcbiAgICBsZXQgb2Zmc2V0WCA9IHJlbC5vZmZzZXRYID8gcGFyc2VJbnQocmVsLm9mZnNldFgpIDogMDtcbiAgICBsZXQgb2Zmc2V0WSA9IHJlbC5vZmZzZXRZID8gcGFyc2VJbnQocmVsLm9mZnNldFkpIDogMDtcbiAgICBsZXQgdXJsID0gXCJcIjtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgbGV0IGxpbmUgPSByZWxzRWxlbS5hcHBlbmQoXCJsaW5lXCIpO1xuICAgICAgbGluZS5hdHRyKFwieDFcIiwgcmVsLnN0YXJ0UG9pbnQueCk7XG4gICAgICBsaW5lLmF0dHIoXCJ5MVwiLCByZWwuc3RhcnRQb2ludC55KTtcbiAgICAgIGxpbmUuYXR0cihcIngyXCIsIHJlbC5lbmRQb2ludC54KTtcbiAgICAgIGxpbmUuYXR0cihcInkyXCIsIHJlbC5lbmRQb2ludC55KTtcbiAgICAgIGxpbmUuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFcIik7XG4gICAgICBsaW5lLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpO1xuICAgICAgbGluZS5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpO1xuICAgICAgaWYgKHJlbC50eXBlICE9PSBcInJlbF9iXCIpIHtcbiAgICAgICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gICAgICB9XG4gICAgICBpZiAocmVsLnR5cGUgPT09IFwiYmlyZWxcIiB8fCByZWwudHlwZSA9PT0gXCJyZWxfYlwiKSB7XG4gICAgICAgIGxpbmUuYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93ZW5kKVwiKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGxpbmUgPSByZWxzRWxlbS5hcHBlbmQoXCJwYXRoXCIpO1xuICAgICAgbGluZS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFcIikuYXR0cihcInN0cm9rZVwiLCBzdHJva2VDb2xvcikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIFwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5IFwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgcmVsLnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCByZWwuc3RhcnRQb2ludC55KS5yZXBsYWNlQWxsKFxuICAgICAgICAgIFwiY29udHJvbHhcIixcbiAgICAgICAgICByZWwuc3RhcnRQb2ludC54ICsgKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyAyIC0gKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyA0XG4gICAgICAgICkucmVwbGFjZUFsbChcImNvbnRyb2x5XCIsIHJlbC5zdGFydFBvaW50LnkgKyAocmVsLmVuZFBvaW50LnkgLSByZWwuc3RhcnRQb2ludC55KSAvIDIpLnJlcGxhY2VBbGwoXCJzdG9weFwiLCByZWwuZW5kUG9pbnQueCkucmVwbGFjZUFsbChcInN0b3B5XCIsIHJlbC5lbmRQb2ludC55KVxuICAgICAgKTtcbiAgICAgIGlmIChyZWwudHlwZSAhPT0gXCJyZWxfYlwiKSB7XG4gICAgICAgIGxpbmUuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2hlYWQpXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbC50eXBlID09PSBcImJpcmVsXCIgfHwgcmVsLnR5cGUgPT09IFwicmVsX2JcIikge1xuICAgICAgICBsaW5lLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2VuZClcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBtZXNzYWdlQ29uZiA9IGNvbmYyLm1lc3NhZ2VGb250KCk7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICByZWwubGFiZWwudGV4dCxcbiAgICAgIHJlbHNFbGVtLFxuICAgICAgTWF0aC5taW4ocmVsLnN0YXJ0UG9pbnQueCwgcmVsLmVuZFBvaW50LngpICsgTWF0aC5hYnMocmVsLmVuZFBvaW50LnggLSByZWwuc3RhcnRQb2ludC54KSAvIDIgKyBvZmZzZXRYLFxuICAgICAgTWF0aC5taW4ocmVsLnN0YXJ0UG9pbnQueSwgcmVsLmVuZFBvaW50LnkpICsgTWF0aC5hYnMocmVsLmVuZFBvaW50LnkgLSByZWwuc3RhcnRQb2ludC55KSAvIDIgKyBvZmZzZXRZLFxuICAgICAgcmVsLmxhYmVsLndpZHRoLFxuICAgICAgcmVsLmxhYmVsLmhlaWdodCxcbiAgICAgIHsgZmlsbDogdGV4dENvbG9yIH0sXG4gICAgICBtZXNzYWdlQ29uZlxuICAgICk7XG4gICAgaWYgKHJlbC50ZWNobiAmJiByZWwudGVjaG4udGV4dCAhPT0gXCJcIikge1xuICAgICAgbWVzc2FnZUNvbmYgPSBjb25mMi5tZXNzYWdlRm9udCgpO1xuICAgICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICAgIFwiW1wiICsgcmVsLnRlY2huLnRleHQgKyBcIl1cIixcbiAgICAgICAgcmVsc0VsZW0sXG4gICAgICAgIE1hdGgubWluKHJlbC5zdGFydFBvaW50LngsIHJlbC5lbmRQb2ludC54KSArIE1hdGguYWJzKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyAyICsgb2Zmc2V0WCxcbiAgICAgICAgTWF0aC5taW4ocmVsLnN0YXJ0UG9pbnQueSwgcmVsLmVuZFBvaW50LnkpICsgTWF0aC5hYnMocmVsLmVuZFBvaW50LnkgLSByZWwuc3RhcnRQb2ludC55KSAvIDIgKyBjb25mMi5tZXNzYWdlRm9udFNpemUgKyA1ICsgb2Zmc2V0WSxcbiAgICAgICAgTWF0aC5tYXgocmVsLmxhYmVsLndpZHRoLCByZWwudGVjaG4ud2lkdGgpLFxuICAgICAgICByZWwudGVjaG4uaGVpZ2h0LFxuICAgICAgICB7IGZpbGw6IHRleHRDb2xvciwgXCJmb250LXN0eWxlXCI6IFwiaXRhbGljXCIgfSxcbiAgICAgICAgbWVzc2FnZUNvbmZcbiAgICAgICk7XG4gICAgfVxuICB9XG59LCBcImRyYXdSZWxzXCIpO1xudmFyIGRyYXdCb3VuZGFyeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYm91bmRhcnksIGNvbmYyKSB7XG4gIGNvbnN0IGJvdW5kYXJ5RWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgbGV0IGZpbGxDb2xvciA9IGJvdW5kYXJ5LmJnQ29sb3IgPyBib3VuZGFyeS5iZ0NvbG9yIDogXCJub25lXCI7XG4gIGxldCBzdHJva2VDb2xvciA9IGJvdW5kYXJ5LmJvcmRlckNvbG9yID8gYm91bmRhcnkuYm9yZGVyQ29sb3IgOiBcIiM0NDQ0NDRcIjtcbiAgbGV0IGZvbnRDb2xvciA9IGJvdW5kYXJ5LmZvbnRDb2xvciA/IGJvdW5kYXJ5LmZvbnRDb2xvciA6IFwiYmxhY2tcIjtcbiAgbGV0IGF0dHJzVmFsdWUgPSB7IFwic3Ryb2tlLXdpZHRoXCI6IDEsIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcIjcuMCw3LjBcIiB9O1xuICBpZiAoYm91bmRhcnkubm9kZVR5cGUpIHtcbiAgICBhdHRyc1ZhbHVlID0geyBcInN0cm9rZS13aWR0aFwiOiAxIH07XG4gIH1cbiAgbGV0IHJlY3REYXRhID0ge1xuICAgIHg6IGJvdW5kYXJ5LngsXG4gICAgeTogYm91bmRhcnkueSxcbiAgICBmaWxsOiBmaWxsQ29sb3IsXG4gICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcbiAgICB3aWR0aDogYm91bmRhcnkud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZGFyeS5oZWlnaHQsXG4gICAgcng6IDIuNSxcbiAgICByeTogMi41LFxuICAgIGF0dHJzOiBhdHRyc1ZhbHVlXG4gIH07XG4gIGRyYXdSZWN0Mihib3VuZGFyeUVsZW0sIHJlY3REYXRhKTtcbiAgbGV0IGJvdW5kYXJ5Q29uZiA9IGNvbmYyLmJvdW5kYXJ5Rm9udCgpO1xuICBib3VuZGFyeUNvbmYuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICBib3VuZGFyeUNvbmYuZm9udFNpemUgPSBib3VuZGFyeUNvbmYuZm9udFNpemUgKyAyO1xuICBib3VuZGFyeUNvbmYuZm9udENvbG9yID0gZm9udENvbG9yO1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICBib3VuZGFyeS5sYWJlbC50ZXh0LFxuICAgIGJvdW5kYXJ5RWxlbSxcbiAgICBib3VuZGFyeS54LFxuICAgIGJvdW5kYXJ5LnkgKyBib3VuZGFyeS5sYWJlbC5ZLFxuICAgIGJvdW5kYXJ5LndpZHRoLFxuICAgIGJvdW5kYXJ5LmhlaWdodCxcbiAgICB7IGZpbGw6IFwiIzQ0NDQ0NFwiIH0sXG4gICAgYm91bmRhcnlDb25mXG4gICk7XG4gIGlmIChib3VuZGFyeS50eXBlICYmIGJvdW5kYXJ5LnR5cGUudGV4dCAhPT0gXCJcIikge1xuICAgIGJvdW5kYXJ5Q29uZiA9IGNvbmYyLmJvdW5kYXJ5Rm9udCgpO1xuICAgIGJvdW5kYXJ5Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICBib3VuZGFyeS50eXBlLnRleHQsXG4gICAgICBib3VuZGFyeUVsZW0sXG4gICAgICBib3VuZGFyeS54LFxuICAgICAgYm91bmRhcnkueSArIGJvdW5kYXJ5LnR5cGUuWSxcbiAgICAgIGJvdW5kYXJ5LndpZHRoLFxuICAgICAgYm91bmRhcnkuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBcIiM0NDQ0NDRcIiB9LFxuICAgICAgYm91bmRhcnlDb25mXG4gICAgKTtcbiAgfVxuICBpZiAoYm91bmRhcnkuZGVzY3IgJiYgYm91bmRhcnkuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgIGJvdW5kYXJ5Q29uZiA9IGNvbmYyLmJvdW5kYXJ5Rm9udCgpO1xuICAgIGJvdW5kYXJ5Q29uZi5mb250U2l6ZSA9IGJvdW5kYXJ5Q29uZi5mb250U2l6ZSAtIDI7XG4gICAgYm91bmRhcnlDb25mLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICAgIGJvdW5kYXJ5LmRlc2NyLnRleHQsXG4gICAgICBib3VuZGFyeUVsZW0sXG4gICAgICBib3VuZGFyeS54LFxuICAgICAgYm91bmRhcnkueSArIGJvdW5kYXJ5LmRlc2NyLlksXG4gICAgICBib3VuZGFyeS53aWR0aCxcbiAgICAgIGJvdW5kYXJ5LmhlaWdodCxcbiAgICAgIHsgZmlsbDogXCIjNDQ0NDQ0XCIgfSxcbiAgICAgIGJvdW5kYXJ5Q29uZlxuICAgICk7XG4gIH1cbn0sIFwiZHJhd0JvdW5kYXJ5XCIpO1xudmFyIGRyYXdDNFNoYXBlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBjNFNoYXBlLCBjb25mMikge1xuICBsZXQgZmlsbENvbG9yID0gYzRTaGFwZS5iZ0NvbG9yID8gYzRTaGFwZS5iZ0NvbG9yIDogY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJfYmdfY29sb3JcIl07XG4gIGxldCBzdHJva2VDb2xvciA9IGM0U2hhcGUuYm9yZGVyQ29sb3IgPyBjNFNoYXBlLmJvcmRlckNvbG9yIDogY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJfYm9yZGVyX2NvbG9yXCJdO1xuICBsZXQgZm9udENvbG9yID0gYzRTaGFwZS5mb250Q29sb3IgPyBjNFNoYXBlLmZvbnRDb2xvciA6IFwiI0ZGRkZGRlwiO1xuICBsZXQgcGVyc29uSW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9XCI7XG4gIHN3aXRjaCAoYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KSB7XG4gICAgY2FzZSBcInBlcnNvblwiOlxuICAgICAgcGVyc29uSW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZXh0ZXJuYWxfcGVyc29uXCI6XG4gICAgICBwZXJzb25JbWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUI2RWxFUVZSNFh1MllMWStFTUJDRzkrZFdyMGFqMFdnMEdvMUdvMCtqOFhkdjJ1VEN2djFncHQwZWJIS1B1aERhZVc0NjA1WjltSnZ4NEFkWFV5VFVkZDA4eit1NmZsbVdaUm5Ic1drYWZrOURwdEF3RFB1K2YwZUFZdHUyUEVhR1d1ajVmQ0lackJBQzJlTEJBblJDc0Vra3htZWFKcDdpREoyUU1EZEhzTGc4U3hLRkVKYUFvOGxBWG5tdU9GSWhUTXB4eEtBVGVibzRVaUZrbnVObzRPbmlTSVhReVJ4RUEzWXNuakdDVkVqVlhEN3lMVUFxeEJHVXlQdi9ZNFcyYmVNZ0d1UzdrVlFJQnljSDBmRCtvaTVwZXpRRVR4ZEhLbVFLR2sxZVFFWWxkSytqdzVHeFBmWjl6N01rMFFuaGYxVzFtM3cvL0VVbjVCRG1TWnNiUjQ0UVFMQkVxckJIcU9ybVNLYVFBeGRuTEFyQ3J4WmNNN0E3WktzNGlvUnE4TEZDK05wQzNXQ0JKc3ZwVnc1ZWRtOWlFWEZ1eU5meFhBZ1N3ZnJGUTFjMGlOZGE4QWRlanZVZ25rdE90SlFReG1jZkZ6R2dsYzVXVkNqN29EZ0ZxVTE4Ym9lRlNzNTJDVWg4TEU4QklWUURUMUFCckIwSHRnU0VZbFg1ZG9KbkN3djlUWG9jS0NhS2Jud2hkREtQcTRsZjNTd1UzSExxNFYvK1dZaEhWTWEvM2I0SWxmeWlrQWR1Q2tjQmM3bVEzL3ovUXEvY1R1aWtoa3pCMTJBZS9tY0pDOVUrVm84RWoxZ1dBdGdiZUdnRnNBTUhyNTBCSVdPTENiZXp2aHBCRlVkWTZFSnVKL1FEVzBYb01YNjB6WjBBQUFBQVNVVk9SSzVDWUlJPVwiO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgY29uc3QgYzRTaGFwZUVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGM0U2hhcGVFbGVtLmF0dHIoXCJjbGFzc1wiLCBcInBlcnNvbi1tYW5cIik7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICBzd2l0Y2ggKGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCkge1xuICAgIGNhc2UgXCJwZXJzb25cIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfcGVyc29uXCI6XG4gICAgY2FzZSBcInN5c3RlbVwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9zeXN0ZW1cIjpcbiAgICBjYXNlIFwiY29udGFpbmVyXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX2NvbnRhaW5lclwiOlxuICAgIGNhc2UgXCJjb21wb25lbnRcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29tcG9uZW50XCI6XG4gICAgICByZWN0LnggPSBjNFNoYXBlLng7XG4gICAgICByZWN0LnkgPSBjNFNoYXBlLnk7XG4gICAgICByZWN0LmZpbGwgPSBmaWxsQ29sb3I7XG4gICAgICByZWN0LndpZHRoID0gYzRTaGFwZS53aWR0aDtcbiAgICAgIHJlY3QuaGVpZ2h0ID0gYzRTaGFwZS5oZWlnaHQ7XG4gICAgICByZWN0LnN0cm9rZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgcmVjdC5yeCA9IDIuNTtcbiAgICAgIHJlY3QucnkgPSAyLjU7XG4gICAgICByZWN0LmF0dHJzID0geyBcInN0cm9rZS13aWR0aFwiOiAwLjUgfTtcbiAgICAgIGRyYXdSZWN0MihjNFNoYXBlRWxlbSwgcmVjdCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic3lzdGVtX2RiXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX3N5c3RlbV9kYlwiOlxuICAgIGNhc2UgXCJjb250YWluZXJfZGJcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiXCI6XG4gICAgY2FzZSBcImNvbXBvbmVudF9kYlwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9jb21wb25lbnRfZGJcIjpcbiAgICAgIGM0U2hhcGVFbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgZmlsbENvbG9yKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMC41XCIpLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBcIk1zdGFydHgsc3RhcnR5YzAsLTEwIGhhbGYsLTEwIGhhbGYsLTEwYzAsMCBoYWxmLDAgaGFsZiwxMGwwLGhlaWdodGMwLDEwIC1oYWxmLDEwIC1oYWxmLDEwYzAsMCAtaGFsZiwwIC1oYWxmLC0xMGwwLC1oZWlnaHRcIi5yZXBsYWNlQWxsKFwic3RhcnR4XCIsIGM0U2hhcGUueCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCBjNFNoYXBlLnkpLnJlcGxhY2VBbGwoXCJoYWxmXCIsIGM0U2hhcGUud2lkdGggLyAyKS5yZXBsYWNlQWxsKFwiaGVpZ2h0XCIsIGM0U2hhcGUuaGVpZ2h0KVxuICAgICAgKTtcbiAgICAgIGM0U2hhcGVFbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVcIikuYXR0cihcInN0cm9rZVwiLCBzdHJva2VDb2xvcikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIFwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMFwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgYzRTaGFwZS54KS5yZXBsYWNlQWxsKFwic3RhcnR5XCIsIGM0U2hhcGUueSkucmVwbGFjZUFsbChcImhhbGZcIiwgYzRTaGFwZS53aWR0aCAvIDIpXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInN5c3RlbV9xdWV1ZVwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9zeXN0ZW1fcXVldWVcIjpcbiAgICBjYXNlIFwiY29udGFpbmVyX3F1ZXVlXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZVwiOlxuICAgIGNhc2UgXCJjb21wb25lbnRfcXVldWVcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlXCI6XG4gICAgICBjNFNoYXBlRWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJmaWxsXCIsIGZpbGxDb2xvcikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjAuNVwiKS5hdHRyKFwic3Ryb2tlXCIsIHN0cm9rZUNvbG9yKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNc3RhcnR4LHN0YXJ0eWx3aWR0aCwwYzUsMCA1LGhhbGYgNSxoYWxmYzAsMCAwLGhhbGYgLTUsaGFsZmwtd2lkdGgsMGMtNSwwIC01LC1oYWxmIC01LC1oYWxmYzAsMCAwLC1oYWxmIDUsLWhhbGZcIi5yZXBsYWNlQWxsKFwic3RhcnR4XCIsIGM0U2hhcGUueCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCBjNFNoYXBlLnkpLnJlcGxhY2VBbGwoXCJ3aWR0aFwiLCBjNFNoYXBlLndpZHRoKS5yZXBsYWNlQWxsKFwiaGFsZlwiLCBjNFNoYXBlLmhlaWdodCAvIDIpXG4gICAgICApO1xuICAgICAgYzRTaGFwZUVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjAuNVwiKS5hdHRyKFwic3Ryb2tlXCIsIHN0cm9rZUNvbG9yKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZlwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgYzRTaGFwZS54ICsgYzRTaGFwZS53aWR0aCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCBjNFNoYXBlLnkpLnJlcGxhY2VBbGwoXCJoYWxmXCIsIGM0U2hhcGUuaGVpZ2h0IC8gMilcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxuICBsZXQgYzRTaGFwZUZvbnRDb25mID0gZ2V0QzRTaGFwZUZvbnQoY29uZjIsIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCk7XG4gIGM0U2hhcGVFbGVtLmFwcGVuZChcInRleHRcIikuYXR0cihcImZpbGxcIiwgZm9udENvbG9yKS5hdHRyKFwiZm9udC1mYW1pbHlcIiwgYzRTaGFwZUZvbnRDb25mLmZvbnRGYW1pbHkpLmF0dHIoXCJmb250LXNpemVcIiwgYzRTaGFwZUZvbnRDb25mLmZvbnRTaXplIC0gMikuYXR0cihcImZvbnQtc3R5bGVcIiwgXCJpdGFsaWNcIikuYXR0cihcImxlbmd0aEFkanVzdFwiLCBcInNwYWNpbmdcIikuYXR0cihcInRleHRMZW5ndGhcIiwgYzRTaGFwZS50eXBlQzRTaGFwZS53aWR0aCkuYXR0cihcInhcIiwgYzRTaGFwZS54ICsgYzRTaGFwZS53aWR0aCAvIDIgLSBjNFNoYXBlLnR5cGVDNFNoYXBlLndpZHRoIC8gMikuYXR0cihcInlcIiwgYzRTaGFwZS55ICsgYzRTaGFwZS50eXBlQzRTaGFwZS5ZKS50ZXh0KFwiPDxcIiArIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCArIFwiPj5cIik7XG4gIHN3aXRjaCAoYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KSB7XG4gICAgY2FzZSBcInBlcnNvblwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9wZXJzb25cIjpcbiAgICAgIGRyYXdJbWFnZShcbiAgICAgICAgYzRTaGFwZUVsZW0sXG4gICAgICAgIDQ4LFxuICAgICAgICA0OCxcbiAgICAgICAgYzRTaGFwZS54ICsgYzRTaGFwZS53aWR0aCAvIDIgLSAyNCxcbiAgICAgICAgYzRTaGFwZS55ICsgYzRTaGFwZS5pbWFnZS5ZLFxuICAgICAgICBwZXJzb25JbWdcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxuICBsZXQgdGV4dEZvbnRDb25mID0gY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJGb250XCJdKCk7XG4gIHRleHRGb250Q29uZi5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gIHRleHRGb250Q29uZi5mb250U2l6ZSA9IHRleHRGb250Q29uZi5mb250U2l6ZSArIDI7XG4gIHRleHRGb250Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIGM0U2hhcGUubGFiZWwudGV4dCxcbiAgICBjNFNoYXBlRWxlbSxcbiAgICBjNFNoYXBlLngsXG4gICAgYzRTaGFwZS55ICsgYzRTaGFwZS5sYWJlbC5ZLFxuICAgIGM0U2hhcGUud2lkdGgsXG4gICAgYzRTaGFwZS5oZWlnaHQsXG4gICAgeyBmaWxsOiBmb250Q29sb3IgfSxcbiAgICB0ZXh0Rm9udENvbmZcbiAgKTtcbiAgdGV4dEZvbnRDb25mID0gY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJGb250XCJdKCk7XG4gIHRleHRGb250Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gIGlmIChjNFNoYXBlLnRlY2huICYmIGM0U2hhcGUudGVjaG4/LnRleHQgIT09IFwiXCIpIHtcbiAgICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICAgIGM0U2hhcGUudGVjaG4udGV4dCxcbiAgICAgIGM0U2hhcGVFbGVtLFxuICAgICAgYzRTaGFwZS54LFxuICAgICAgYzRTaGFwZS55ICsgYzRTaGFwZS50ZWNobi5ZLFxuICAgICAgYzRTaGFwZS53aWR0aCxcbiAgICAgIGM0U2hhcGUuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBmb250Q29sb3IsIFwiZm9udC1zdHlsZVwiOiBcIml0YWxpY1wiIH0sXG4gICAgICB0ZXh0Rm9udENvbmZcbiAgICApO1xuICB9IGVsc2UgaWYgKGM0U2hhcGUudHlwZSAmJiBjNFNoYXBlLnR5cGUudGV4dCAhPT0gXCJcIikge1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYzRTaGFwZS50eXBlLnRleHQsXG4gICAgICBjNFNoYXBlRWxlbSxcbiAgICAgIGM0U2hhcGUueCxcbiAgICAgIGM0U2hhcGUueSArIGM0U2hhcGUudHlwZS5ZLFxuICAgICAgYzRTaGFwZS53aWR0aCxcbiAgICAgIGM0U2hhcGUuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBmb250Q29sb3IsIFwiZm9udC1zdHlsZVwiOiBcIml0YWxpY1wiIH0sXG4gICAgICB0ZXh0Rm9udENvbmZcbiAgICApO1xuICB9XG4gIGlmIChjNFNoYXBlLmRlc2NyICYmIGM0U2hhcGUuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgIHRleHRGb250Q29uZiA9IGNvbmYyLnBlcnNvbkZvbnQoKTtcbiAgICB0ZXh0Rm9udENvbmYuZm9udENvbG9yID0gZm9udENvbG9yO1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYzRTaGFwZS5kZXNjci50ZXh0LFxuICAgICAgYzRTaGFwZUVsZW0sXG4gICAgICBjNFNoYXBlLngsXG4gICAgICBjNFNoYXBlLnkgKyBjNFNoYXBlLmRlc2NyLlksXG4gICAgICBjNFNoYXBlLndpZHRoLFxuICAgICAgYzRTaGFwZS5oZWlnaHQsXG4gICAgICB7IGZpbGw6IGZvbnRDb2xvciB9LFxuICAgICAgdGV4dEZvbnRDb25mXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYzRTaGFwZS5oZWlnaHQ7XG59LCBcImRyYXdDNFNoYXBlXCIpO1xudmFyIGluc2VydERhdGFiYXNlSWNvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSkge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwic3ltYm9sXCIpLmF0dHIoXCJpZFwiLCBcImRhdGFiYXNlXCIpLmF0dHIoXCJmaWxsLXJ1bGVcIiwgXCJldmVub2RkXCIpLmF0dHIoXCJjbGlwLXJ1bGVcIiwgXCJldmVub2RkXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxelwiXG4gICk7XG59LCBcImluc2VydERhdGFiYXNlSWNvblwiKTtcbnZhciBpbnNlcnRDb21wdXRlckljb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJjb21wdXRlclwiKS5hdHRyKFwid2lkdGhcIiwgXCIyNFwiKS5hdHRyKFwiaGVpZ2h0XCIsIFwiMjRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3elwiXG4gICk7XG59LCBcImluc2VydENvbXB1dGVySWNvblwiKTtcbnZhciBpbnNlcnRDbG9ja0ljb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJjbG9ja1wiKS5hdHRyKFwid2lkdGhcIiwgXCIyNFwiKS5hdHRyKFwiaGVpZ2h0XCIsIFwiMjRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExelwiXG4gICk7XG59LCBcImluc2VydENsb2NrSWNvblwiKTtcbnZhciBpbnNlcnRBcnJvd0hlYWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhcnJvd2hlYWRcIikuYXR0cihcInJlZlhcIiwgOSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6XCIpO1xufSwgXCJpbnNlcnRBcnJvd0hlYWRcIik7XG52YXIgaW5zZXJ0QXJyb3dFbmQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhcnJvd2VuZFwiKS5hdHRyKFwicmVmWFwiLCAxKS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTIpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6XCIpO1xufSwgXCJpbnNlcnRBcnJvd0VuZFwiKTtcbnZhciBpbnNlcnRBcnJvd0ZpbGxlZEhlYWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJmaWxsZWQtaGVhZFwiKS5hdHRyKFwicmVmWFwiLCAxOCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0QXJyb3dGaWxsZWRIZWFkXCIpO1xudmFyIGluc2VydER5bmFtaWNOdW1iZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJzZXF1ZW5jZW51bWJlclwiKS5hdHRyKFwicmVmWFwiLCAxNSkuYXR0cihcInJlZllcIiwgMTUpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA2MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCA0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCAxNSkuYXR0cihcImN5XCIsIDE1KS5hdHRyKFwiclwiLCA2KTtcbn0sIFwiaW5zZXJ0RHluYW1pY051bWJlclwiKTtcbnZhciBpbnNlcnRBcnJvd0Nyb3NzSGVhZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSkge1xuICBjb25zdCBkZWZzID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpO1xuICBjb25zdCBtYXJrZXIgPSBkZWZzLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJjcm9zc2hlYWRcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE1KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmF0dHIoXCJyZWZYXCIsIDE2KS5hdHRyKFwicmVmWVwiLCA0KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzAwMDAwMFwiKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIwLCAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcImRcIiwgXCJNIDksMiBWIDYgTDE2LDQgWlwiKTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjMDAwMDAwXCIpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjAsIDBcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFweFwiKS5hdHRyKFwiZFwiLCBcIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3XCIpO1xufSwgXCJpbnNlcnRBcnJvd0Nyb3NzSGVhZFwiKTtcbnZhciBnZXRDNFNoYXBlRm9udCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZiwgdHlwZUM0U2hhcGUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmZbdHlwZUM0U2hhcGUgKyBcIkZvbnRGYW1pbHlcIl0sXG4gICAgZm9udFNpemU6IGNuZlt0eXBlQzRTaGFwZSArIFwiRm9udFNpemVcIl0sXG4gICAgZm9udFdlaWdodDogY25mW3R5cGVDNFNoYXBlICsgXCJGb250V2VpZ2h0XCJdXG4gIH07XG59LCBcImdldEM0U2hhcGVGb250XCIpO1xudmFyIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ5VGV4dChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyICsgNSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlUZXh0LCBcImJ5VGV4dFwiKTtcbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBmb250U2l6ZSwgZm9udEZhbWlseSwgZm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkeSA9IGkgKiBmb250U2l6ZSAtIGZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJmb250LXNpemVcIiwgZm9udFNpemUpLnN0eWxlKFwiZm9udC13ZWlnaHRcIiwgZm9udFdlaWdodCkuc3R5bGUoXCJmb250LWZhbWlseVwiLCBmb250RmFtaWx5KTtcbiAgICAgIHRleHQuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcImR5XCIsIGR5KS50ZXh0KGxpbmVzW2ldKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWF0aGVtYXRpY2FsXCIpO1xuICAgICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICAgIH1cbiAgfVxuICBfX25hbWUoYnlUc3BhbiwgXCJieVRzcGFuXCIpO1xuICBmdW5jdGlvbiBieUZvKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpIHtcbiAgICBjb25zdCBzID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IHMuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIHMsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlGbywgXCJieUZvXCIpO1xuICBmdW5jdGlvbiBfc2V0VGV4dEF0dHJzKHRvVGV4dCwgZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgaWYgKGZyb21UZXh0QXR0cnNEaWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgdG9UZXh0LmF0dHIoa2V5LCBmcm9tVGV4dEF0dHJzRGljdFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX19uYW1lKF9zZXRUZXh0QXR0cnMsIFwiX3NldFRleHRBdHRyc1wiKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbmYyKSB7XG4gICAgcmV0dXJuIGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwiZm9cIiA/IGJ5Rm8gOiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbnZhciBzdmdEcmF3X2RlZmF1bHQgPSB7XG4gIGRyYXdSZWN0OiBkcmF3UmVjdDIsXG4gIGRyYXdCb3VuZGFyeSxcbiAgZHJhd0M0U2hhcGUsXG4gIGRyYXdSZWxzLFxuICBkcmF3SW1hZ2UsXG4gIGluc2VydEFycm93SGVhZCxcbiAgaW5zZXJ0QXJyb3dFbmQsXG4gIGluc2VydEFycm93RmlsbGVkSGVhZCxcbiAgaW5zZXJ0RHluYW1pY051bWJlcixcbiAgaW5zZXJ0QXJyb3dDcm9zc0hlYWQsXG4gIGluc2VydERhdGFiYXNlSWNvbixcbiAgaW5zZXJ0Q29tcHV0ZXJJY29uLFxuICBpbnNlcnRDbG9ja0ljb25cbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jNC9jNFJlbmRlcmVyLmpzXG52YXIgZ2xvYmFsQm91bmRhcnlNYXhYID0gMDtcbnZhciBnbG9iYWxCb3VuZGFyeU1heFkgPSAwO1xudmFyIGM0U2hhcGVJblJvdzIgPSA0O1xudmFyIGM0Qm91bmRhcnlJblJvdzIgPSAyO1xucGFyc2VyLnl5ID0gYzREYl9kZWZhdWx0O1xudmFyIGNvbmYgPSB7fTtcbnZhciBCb3VuZHMgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQm91bmRzXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKGRpYWdPYmopIHtcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHRoaXMuZGF0YS5zdGFydHggPSB2b2lkIDA7XG4gICAgdGhpcy5kYXRhLnN0b3B4ID0gdm9pZCAwO1xuICAgIHRoaXMuZGF0YS5zdGFydHkgPSB2b2lkIDA7XG4gICAgdGhpcy5kYXRhLnN0b3B5ID0gdm9pZCAwO1xuICAgIHRoaXMuZGF0YS53aWR0aExpbWl0ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEgPSB7fTtcbiAgICB0aGlzLm5leHREYXRhLnN0YXJ0eCA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHREYXRhLnN0b3B4ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEuc3RhcnR5ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEuc3RvcHkgPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0RGF0YS5jbnQgPSAwO1xuICAgIHNldENvbmYoZGlhZ09iai5kYi5nZXRDb25maWcoKSk7XG4gIH1cbiAgc2V0RGF0YShzdGFydHgsIHN0b3B4LCBzdGFydHksIHN0b3B5KSB7XG4gICAgdGhpcy5uZXh0RGF0YS5zdGFydHggPSB0aGlzLmRhdGEuc3RhcnR4ID0gc3RhcnR4O1xuICAgIHRoaXMubmV4dERhdGEuc3RvcHggPSB0aGlzLmRhdGEuc3RvcHggPSBzdG9weDtcbiAgICB0aGlzLm5leHREYXRhLnN0YXJ0eSA9IHRoaXMuZGF0YS5zdGFydHkgPSBzdGFydHk7XG4gICAgdGhpcy5uZXh0RGF0YS5zdG9weSA9IHRoaXMuZGF0YS5zdG9weSA9IHN0b3B5O1xuICB9XG4gIHVwZGF0ZVZhbChvYmosIGtleSwgdmFsLCBmdW4pIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gZnVuKHZhbCwgb2JqW2tleV0pO1xuICAgIH1cbiAgfVxuICBpbnNlcnQoYzRTaGFwZSkge1xuICAgIHRoaXMubmV4dERhdGEuY250ID0gdGhpcy5uZXh0RGF0YS5jbnQgKyAxO1xuICAgIGxldCBfc3RhcnR4ID0gdGhpcy5uZXh0RGF0YS5zdGFydHggPT09IHRoaXMubmV4dERhdGEuc3RvcHggPyB0aGlzLm5leHREYXRhLnN0b3B4ICsgYzRTaGFwZS5tYXJnaW4gOiB0aGlzLm5leHREYXRhLnN0b3B4ICsgYzRTaGFwZS5tYXJnaW4gKiAyO1xuICAgIGxldCBfc3RvcHggPSBfc3RhcnR4ICsgYzRTaGFwZS53aWR0aDtcbiAgICBsZXQgX3N0YXJ0eSA9IHRoaXMubmV4dERhdGEuc3RhcnR5ICsgYzRTaGFwZS5tYXJnaW4gKiAyO1xuICAgIGxldCBfc3RvcHkgPSBfc3RhcnR5ICsgYzRTaGFwZS5oZWlnaHQ7XG4gICAgaWYgKF9zdGFydHggPj0gdGhpcy5kYXRhLndpZHRoTGltaXQgfHwgX3N0b3B4ID49IHRoaXMuZGF0YS53aWR0aExpbWl0IHx8IHRoaXMubmV4dERhdGEuY250ID4gYzRTaGFwZUluUm93Mikge1xuICAgICAgX3N0YXJ0eCA9IHRoaXMubmV4dERhdGEuc3RhcnR4ICsgYzRTaGFwZS5tYXJnaW4gKyBjb25mLm5leHRMaW5lUGFkZGluZ1g7XG4gICAgICBfc3RhcnR5ID0gdGhpcy5uZXh0RGF0YS5zdG9weSArIGM0U2hhcGUubWFyZ2luICogMjtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RvcHggPSBfc3RvcHggPSBfc3RhcnR4ICsgYzRTaGFwZS53aWR0aDtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RhcnR5ID0gdGhpcy5uZXh0RGF0YS5zdG9weTtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RvcHkgPSBfc3RvcHkgPSBfc3RhcnR5ICsgYzRTaGFwZS5oZWlnaHQ7XG4gICAgICB0aGlzLm5leHREYXRhLmNudCA9IDE7XG4gICAgfVxuICAgIGM0U2hhcGUueCA9IF9zdGFydHg7XG4gICAgYzRTaGFwZS55ID0gX3N0YXJ0eTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RhcnR4XCIsIF9zdGFydHgsIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RvcHhcIiwgX3N0b3B4LCBNYXRoLm1heCk7XG4gICAgdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCBcInN0b3B5XCIsIF9zdG9weSwgTWF0aC5tYXgpO1xuICAgIHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsIFwic3RhcnR4XCIsIF9zdGFydHgsIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCBcInN0YXJ0eVwiLCBfc3RhcnR5LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCBcInN0b3B5XCIsIF9zdG9weSwgTWF0aC5tYXgpO1xuICB9XG4gIGluaXQoZGlhZ09iaikge1xuICAgIHRoaXMubmFtZSA9IFwiXCI7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwLFxuICAgICAgd2lkdGhMaW1pdDogdm9pZCAwXG4gICAgfTtcbiAgICB0aGlzLm5leHREYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwLFxuICAgICAgY250OiAwXG4gICAgfTtcbiAgICBzZXRDb25mKGRpYWdPYmouZGIuZ2V0Q29uZmlnKCkpO1xuICB9XG4gIGJ1bXBMYXN0TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuZGF0YS5zdG9weCArPSBtYXJnaW47XG4gICAgdGhpcy5kYXRhLnN0b3B5ICs9IG1hcmdpbjtcbiAgfVxufTtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbmYpIHtcbiAgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoY29uZiwgY25mKTtcbiAgaWYgKGNuZi5mb250RmFtaWx5KSB7XG4gICAgY29uZi5wZXJzb25Gb250RmFtaWx5ID0gY29uZi5zeXN0ZW1Gb250RmFtaWx5ID0gY29uZi5tZXNzYWdlRm9udEZhbWlseSA9IGNuZi5mb250RmFtaWx5O1xuICB9XG4gIGlmIChjbmYuZm9udFNpemUpIHtcbiAgICBjb25mLnBlcnNvbkZvbnRTaXplID0gY29uZi5zeXN0ZW1Gb250U2l6ZSA9IGNvbmYubWVzc2FnZUZvbnRTaXplID0gY25mLmZvbnRTaXplO1xuICB9XG4gIGlmIChjbmYuZm9udFdlaWdodCkge1xuICAgIGNvbmYucGVyc29uRm9udFdlaWdodCA9IGNvbmYuc3lzdGVtRm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQgPSBjbmYuZm9udFdlaWdodDtcbiAgfVxufSwgXCJzZXRDb25mXCIpO1xudmFyIGM0U2hhcGVGb250ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mLCB0eXBlQzRTaGFwZSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZlt0eXBlQzRTaGFwZSArIFwiRm9udEZhbWlseVwiXSxcbiAgICBmb250U2l6ZTogY25mW3R5cGVDNFNoYXBlICsgXCJGb250U2l6ZVwiXSxcbiAgICBmb250V2VpZ2h0OiBjbmZbdHlwZUM0U2hhcGUgKyBcIkZvbnRXZWlnaHRcIl1cbiAgfTtcbn0sIFwiYzRTaGFwZUZvbnRcIik7XG52YXIgYm91bmRhcnlGb250ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9udEZhbWlseTogY25mLmJvdW5kYXJ5Rm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogY25mLmJvdW5kYXJ5Rm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLmJvdW5kYXJ5Rm9udFdlaWdodFxuICB9O1xufSwgXCJib3VuZGFyeUZvbnRcIik7XG52YXIgbWVzc2FnZUZvbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbmYpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmYubWVzc2FnZUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5tZXNzYWdlRm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLm1lc3NhZ2VGb250V2VpZ2h0XG4gIH07XG59LCBcIm1lc3NhZ2VGb250XCIpO1xuZnVuY3Rpb24gY2FsY0M0U2hhcGVUZXh0V0godGV4dFR5cGUsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgdGV4dENvbmYsIHRleHRMaW1pdFdpZHRoKSB7XG4gIGlmICghYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGgpIHtcbiAgICBpZiAoYzRTaGFwZVRleHRXcmFwKSB7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0ID0gd3JhcExhYmVsKGM0U2hhcGVbdGV4dFR5cGVdLnRleHQsIHRleHRMaW1pdFdpZHRoLCB0ZXh0Q29uZik7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0TGluZXMgPSBjNFNoYXBlW3RleHRUeXBlXS50ZXh0LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KS5sZW5ndGg7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS53aWR0aCA9IHRleHRMaW1pdFdpZHRoO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0uaGVpZ2h0ID0gY2FsY3VsYXRlVGV4dEhlaWdodChjNFNoYXBlW3RleHRUeXBlXS50ZXh0LCB0ZXh0Q29uZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaW5lcyA9IGM0U2hhcGVbdGV4dFR5cGVdLnRleHQuc3BsaXQoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgpO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0udGV4dExpbmVzID0gbGluZXMubGVuZ3RoO1xuICAgICAgbGV0IGxpbmVIZWlnaHQgPSAwO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0uaGVpZ2h0ID0gMDtcbiAgICAgIGM0U2hhcGVbdGV4dFR5cGVdLndpZHRoID0gMDtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBjNFNoYXBlW3RleHRUeXBlXS53aWR0aCA9IE1hdGgubWF4KFxuICAgICAgICAgIGNhbGN1bGF0ZVRleHRXaWR0aChsaW5lLCB0ZXh0Q29uZiksXG4gICAgICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgbGluZUhlaWdodCA9IGNhbGN1bGF0ZVRleHRIZWlnaHQobGluZSwgdGV4dENvbmYpO1xuICAgICAgICBjNFNoYXBlW3RleHRUeXBlXS5oZWlnaHQgPSBjNFNoYXBlW3RleHRUeXBlXS5oZWlnaHQgKyBsaW5lSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuX19uYW1lKGNhbGNDNFNoYXBlVGV4dFdILCBcImNhbGNDNFNoYXBlVGV4dFdIXCIpO1xudmFyIGRyYXdCb3VuZGFyeTIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRpYWdyYW0yLCBib3VuZGFyeSwgYm91bmRzKSB7XG4gIGJvdW5kYXJ5LnggPSBib3VuZHMuZGF0YS5zdGFydHg7XG4gIGJvdW5kYXJ5LnkgPSBib3VuZHMuZGF0YS5zdGFydHk7XG4gIGJvdW5kYXJ5LndpZHRoID0gYm91bmRzLmRhdGEuc3RvcHggLSBib3VuZHMuZGF0YS5zdGFydHg7XG4gIGJvdW5kYXJ5LmhlaWdodCA9IGJvdW5kcy5kYXRhLnN0b3B5IC0gYm91bmRzLmRhdGEuc3RhcnR5O1xuICBib3VuZGFyeS5sYWJlbC55ID0gY29uZi5jNFNoYXBlTWFyZ2luIC0gMzU7XG4gIGxldCBib3VuZGFyeVRleHRXcmFwID0gYm91bmRhcnkud3JhcCAmJiBjb25mLndyYXA7XG4gIGxldCBib3VuZGFyeUxhYmVsQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgYm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgPSBib3VuZGFyeUxhYmVsQ29uZi5mb250U2l6ZSArIDI7XG4gIGJvdW5kYXJ5TGFiZWxDb25mLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgbGV0IHRleHRMaW1pdFdpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKGJvdW5kYXJ5LmxhYmVsLnRleHQsIGJvdW5kYXJ5TGFiZWxDb25mKTtcbiAgY2FsY0M0U2hhcGVUZXh0V0goXCJsYWJlbFwiLCBib3VuZGFyeSwgYm91bmRhcnlUZXh0V3JhcCwgYm91bmRhcnlMYWJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgc3ZnRHJhd19kZWZhdWx0LmRyYXdCb3VuZGFyeShkaWFncmFtMiwgYm91bmRhcnksIGNvbmYpO1xufSwgXCJkcmF3Qm91bmRhcnlcIik7XG52YXIgZHJhd0M0U2hhcGVBcnJheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY3VycmVudEJvdW5kcywgZGlhZ3JhbTIsIGM0U2hhcGVBcnJheTIsIGM0U2hhcGVLZXlzKSB7XG4gIGxldCBZID0gMDtcbiAgZm9yIChjb25zdCBjNFNoYXBlS2V5IG9mIGM0U2hhcGVLZXlzKSB7XG4gICAgWSA9IDA7XG4gICAgY29uc3QgYzRTaGFwZSA9IGM0U2hhcGVBcnJheTJbYzRTaGFwZUtleV07XG4gICAgbGV0IGM0U2hhcGVUeXBlQ29uZiA9IGM0U2hhcGVGb250KGNvbmYsIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCk7XG4gICAgYzRTaGFwZVR5cGVDb25mLmZvbnRTaXplID0gYzRTaGFwZVR5cGVDb25mLmZvbnRTaXplIC0gMjtcbiAgICBjNFNoYXBlLnR5cGVDNFNoYXBlLndpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKFxuICAgICAgXCJcXHhBQlwiICsgYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJcXHhCQlwiLFxuICAgICAgYzRTaGFwZVR5cGVDb25mXG4gICAgKTtcbiAgICBjNFNoYXBlLnR5cGVDNFNoYXBlLmhlaWdodCA9IGM0U2hhcGVUeXBlQ29uZi5mb250U2l6ZSArIDI7XG4gICAgYzRTaGFwZS50eXBlQzRTaGFwZS5ZID0gY29uZi5jNFNoYXBlUGFkZGluZztcbiAgICBZID0gYzRTaGFwZS50eXBlQzRTaGFwZS5ZICsgYzRTaGFwZS50eXBlQzRTaGFwZS5oZWlnaHQgLSA0O1xuICAgIGM0U2hhcGUuaW1hZ2UgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIFk6IDAgfTtcbiAgICBzd2l0Y2ggKGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCkge1xuICAgICAgY2FzZSBcInBlcnNvblwiOlxuICAgICAgY2FzZSBcImV4dGVybmFsX3BlcnNvblwiOlxuICAgICAgICBjNFNoYXBlLmltYWdlLndpZHRoID0gNDg7XG4gICAgICAgIGM0U2hhcGUuaW1hZ2UuaGVpZ2h0ID0gNDg7XG4gICAgICAgIGM0U2hhcGUuaW1hZ2UuWSA9IFk7XG4gICAgICAgIFkgPSBjNFNoYXBlLmltYWdlLlkgKyBjNFNoYXBlLmltYWdlLmhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChjNFNoYXBlLnNwcml0ZSkge1xuICAgICAgYzRTaGFwZS5pbWFnZS53aWR0aCA9IDQ4O1xuICAgICAgYzRTaGFwZS5pbWFnZS5oZWlnaHQgPSA0ODtcbiAgICAgIGM0U2hhcGUuaW1hZ2UuWSA9IFk7XG4gICAgICBZID0gYzRTaGFwZS5pbWFnZS5ZICsgYzRTaGFwZS5pbWFnZS5oZWlnaHQ7XG4gICAgfVxuICAgIGxldCBjNFNoYXBlVGV4dFdyYXAgPSBjNFNoYXBlLndyYXAgJiYgY29uZi53cmFwO1xuICAgIGxldCB0ZXh0TGltaXRXaWR0aCA9IGNvbmYud2lkdGggLSBjb25mLmM0U2hhcGVQYWRkaW5nICogMjtcbiAgICBsZXQgYzRTaGFwZUxhYmVsQ29uZiA9IGM0U2hhcGVGb250KGNvbmYsIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCk7XG4gICAgYzRTaGFwZUxhYmVsQ29uZi5mb250U2l6ZSA9IGM0U2hhcGVMYWJlbENvbmYuZm9udFNpemUgKyAyO1xuICAgIGM0U2hhcGVMYWJlbENvbmYuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwibGFiZWxcIiwgYzRTaGFwZSwgYzRTaGFwZVRleHRXcmFwLCBjNFNoYXBlTGFiZWxDb25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgYzRTaGFwZS5sYWJlbC5ZID0gWSArIDg7XG4gICAgWSA9IGM0U2hhcGUubGFiZWwuWSArIGM0U2hhcGUubGFiZWwuaGVpZ2h0O1xuICAgIGlmIChjNFNoYXBlLnR5cGUgJiYgYzRTaGFwZS50eXBlLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGM0U2hhcGUudHlwZS50ZXh0ID0gXCJbXCIgKyBjNFNoYXBlLnR5cGUudGV4dCArIFwiXVwiO1xuICAgICAgbGV0IGM0U2hhcGVUeXBlQ29uZjIgPSBjNFNoYXBlRm9udChjb25mLCBjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXCJ0eXBlXCIsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgYzRTaGFwZVR5cGVDb25mMiwgdGV4dExpbWl0V2lkdGgpO1xuICAgICAgYzRTaGFwZS50eXBlLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjNFNoYXBlLnR5cGUuWSArIGM0U2hhcGUudHlwZS5oZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChjNFNoYXBlLnRlY2huICYmIGM0U2hhcGUudGVjaG4udGV4dCAhPT0gXCJcIikge1xuICAgICAgYzRTaGFwZS50ZWNobi50ZXh0ID0gXCJbXCIgKyBjNFNoYXBlLnRlY2huLnRleHQgKyBcIl1cIjtcbiAgICAgIGxldCBjNFNoYXBlVGVjaG5Db25mID0gYzRTaGFwZUZvbnQoY29uZiwgYzRTaGFwZS50ZWNobi50ZXh0KTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwidGVjaG5cIiwgYzRTaGFwZSwgYzRTaGFwZVRleHRXcmFwLCBjNFNoYXBlVGVjaG5Db25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgICBjNFNoYXBlLnRlY2huLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjNFNoYXBlLnRlY2huLlkgKyBjNFNoYXBlLnRlY2huLmhlaWdodDtcbiAgICB9XG4gICAgbGV0IHJlY3RIZWlnaHQgPSBZO1xuICAgIGxldCByZWN0V2lkdGggPSBjNFNoYXBlLmxhYmVsLndpZHRoO1xuICAgIGlmIChjNFNoYXBlLmRlc2NyICYmIGM0U2hhcGUuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgICAgbGV0IGM0U2hhcGVEZXNjckNvbmYgPSBjNFNoYXBlRm9udChjb25mLCBjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXCJkZXNjclwiLCBjNFNoYXBlLCBjNFNoYXBlVGV4dFdyYXAsIGM0U2hhcGVEZXNjckNvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICAgIGM0U2hhcGUuZGVzY3IuWSA9IFkgKyAyMDtcbiAgICAgIFkgPSBjNFNoYXBlLmRlc2NyLlkgKyBjNFNoYXBlLmRlc2NyLmhlaWdodDtcbiAgICAgIHJlY3RXaWR0aCA9IE1hdGgubWF4KGM0U2hhcGUubGFiZWwud2lkdGgsIGM0U2hhcGUuZGVzY3Iud2lkdGgpO1xuICAgICAgcmVjdEhlaWdodCA9IFkgLSBjNFNoYXBlLmRlc2NyLnRleHRMaW5lcyAqIDU7XG4gICAgfVxuICAgIHJlY3RXaWR0aCA9IHJlY3RXaWR0aCArIGNvbmYuYzRTaGFwZVBhZGRpbmc7XG4gICAgYzRTaGFwZS53aWR0aCA9IE1hdGgubWF4KGM0U2hhcGUud2lkdGggfHwgY29uZi53aWR0aCwgcmVjdFdpZHRoLCBjb25mLndpZHRoKTtcbiAgICBjNFNoYXBlLmhlaWdodCA9IE1hdGgubWF4KGM0U2hhcGUuaGVpZ2h0IHx8IGNvbmYuaGVpZ2h0LCByZWN0SGVpZ2h0LCBjb25mLmhlaWdodCk7XG4gICAgYzRTaGFwZS5tYXJnaW4gPSBjNFNoYXBlLm1hcmdpbiB8fCBjb25mLmM0U2hhcGVNYXJnaW47XG4gICAgY3VycmVudEJvdW5kcy5pbnNlcnQoYzRTaGFwZSk7XG4gICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdDNFNoYXBlKGRpYWdyYW0yLCBjNFNoYXBlLCBjb25mKTtcbiAgfVxuICBjdXJyZW50Qm91bmRzLmJ1bXBMYXN0TWFyZ2luKGNvbmYuYzRTaGFwZU1hcmdpbik7XG59LCBcImRyYXdDNFNoYXBlQXJyYXlcIik7XG52YXIgUG9pbnQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiUG9pbnRcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxufTtcbnZhciBnZXRJbnRlcnNlY3RQb2ludCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZnJvbU5vZGUsIGVuZFBvaW50KSB7XG4gIGxldCB4MSA9IGZyb21Ob2RlLng7XG4gIGxldCB5MSA9IGZyb21Ob2RlLnk7XG4gIGxldCB4MiA9IGVuZFBvaW50Lng7XG4gIGxldCB5MiA9IGVuZFBvaW50Lnk7XG4gIGxldCBmcm9tQ2VudGVyWCA9IHgxICsgZnJvbU5vZGUud2lkdGggLyAyO1xuICBsZXQgZnJvbUNlbnRlclkgPSB5MSArIGZyb21Ob2RlLmhlaWdodCAvIDI7XG4gIGxldCBkeCA9IE1hdGguYWJzKHgxIC0geDIpO1xuICBsZXQgZHkgPSBNYXRoLmFicyh5MSAtIHkyKTtcbiAgbGV0IHRhbkRZWCA9IGR5IC8gZHg7XG4gIGxldCBmcm9tRFlYID0gZnJvbU5vZGUuaGVpZ2h0IC8gZnJvbU5vZGUud2lkdGg7XG4gIGxldCByZXR1cm5Qb2ludCA9IG51bGw7XG4gIGlmICh5MSA9PSB5MiAmJiB4MSA8IHgyKSB7XG4gICAgcmV0dXJuUG9pbnQgPSBuZXcgUG9pbnQoeDEgKyBmcm9tTm9kZS53aWR0aCwgZnJvbUNlbnRlclkpO1xuICB9IGVsc2UgaWYgKHkxID09IHkyICYmIHgxID4geDIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSwgZnJvbUNlbnRlclkpO1xuICB9IGVsc2UgaWYgKHgxID09IHgyICYmIHkxIDwgeTIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCwgeTEgKyBmcm9tTm9kZS5oZWlnaHQpO1xuICB9IGVsc2UgaWYgKHgxID09IHgyICYmIHkxID4geTIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCwgeTEpO1xuICB9XG4gIGlmICh4MSA+IHgyICYmIHkxIDwgeTIpIHtcbiAgICBpZiAoZnJvbURZWCA+PSB0YW5EWVgpIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KHgxLCBmcm9tQ2VudGVyWSArIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KFxuICAgICAgICBmcm9tQ2VudGVyWCAtIGR4IC8gZHkgKiBmcm9tTm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB5MSArIGZyb21Ob2RlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPCB4MiAmJiB5MSA8IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSArIGZyb21Ob2RlLndpZHRoLCBmcm9tQ2VudGVyWSArIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KFxuICAgICAgICBmcm9tQ2VudGVyWCArIGR4IC8gZHkgKiBmcm9tTm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB5MSArIGZyb21Ob2RlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPCB4MiAmJiB5MSA+IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSArIGZyb21Ob2RlLndpZHRoLCBmcm9tQ2VudGVyWSAtIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KGZyb21DZW50ZXJYICsgZnJvbU5vZGUuaGVpZ2h0IC8gMiAqIGR4IC8gZHksIHkxKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPiB4MiAmJiB5MSA+IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSwgZnJvbUNlbnRlclkgLSBmcm9tTm9kZS53aWR0aCAvIDIgKiB0YW5EWVgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCAtIGZyb21Ob2RlLmhlaWdodCAvIDIgKiBkeCAvIGR5LCB5MSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXR1cm5Qb2ludDtcbn0sIFwiZ2V0SW50ZXJzZWN0UG9pbnRcIik7XG52YXIgZ2V0SW50ZXJzZWN0UG9pbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihmcm9tTm9kZSwgZW5kTm9kZSkge1xuICBsZXQgZW5kSW50ZXJzZWN0UG9pbnQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgZW5kSW50ZXJzZWN0UG9pbnQueCA9IGVuZE5vZGUueCArIGVuZE5vZGUud2lkdGggLyAyO1xuICBlbmRJbnRlcnNlY3RQb2ludC55ID0gZW5kTm9kZS55ICsgZW5kTm9kZS5oZWlnaHQgLyAyO1xuICBsZXQgc3RhcnRQb2ludCA9IGdldEludGVyc2VjdFBvaW50KGZyb21Ob2RlLCBlbmRJbnRlcnNlY3RQb2ludCk7XG4gIGVuZEludGVyc2VjdFBvaW50LnggPSBmcm9tTm9kZS54ICsgZnJvbU5vZGUud2lkdGggLyAyO1xuICBlbmRJbnRlcnNlY3RQb2ludC55ID0gZnJvbU5vZGUueSArIGZyb21Ob2RlLmhlaWdodCAvIDI7XG4gIGxldCBlbmRQb2ludCA9IGdldEludGVyc2VjdFBvaW50KGVuZE5vZGUsIGVuZEludGVyc2VjdFBvaW50KTtcbiAgcmV0dXJuIHsgc3RhcnRQb2ludCwgZW5kUG9pbnQgfTtcbn0sIFwiZ2V0SW50ZXJzZWN0UG9pbnRzXCIpO1xudmFyIGRyYXdSZWxzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlhZ3JhbTIsIHJlbHMyLCBnZXRDNFNoYXBlT2JqLCBkaWFnT2JqKSB7XG4gIGxldCBpID0gMDtcbiAgZm9yIChsZXQgcmVsIG9mIHJlbHMyKSB7XG4gICAgaSA9IGkgKyAxO1xuICAgIGxldCByZWxUZXh0V3JhcCA9IHJlbC53cmFwICYmIGNvbmYud3JhcDtcbiAgICBsZXQgcmVsQ29uZiA9IG1lc3NhZ2VGb250KGNvbmYpO1xuICAgIGxldCBkaWFncmFtVHlwZSA9IGRpYWdPYmouZGIuZ2V0QzRUeXBlKCk7XG4gICAgaWYgKGRpYWdyYW1UeXBlID09PSBcIkM0RHluYW1pY1wiKSB7XG4gICAgICByZWwubGFiZWwudGV4dCA9IGkgKyBcIjogXCIgKyByZWwubGFiZWwudGV4dDtcbiAgICB9XG4gICAgbGV0IHRleHRMaW1pdFdpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKHJlbC5sYWJlbC50ZXh0LCByZWxDb25mKTtcbiAgICBjYWxjQzRTaGFwZVRleHRXSChcImxhYmVsXCIsIHJlbCwgcmVsVGV4dFdyYXAsIHJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICBpZiAocmVsLnRlY2huICYmIHJlbC50ZWNobi50ZXh0ICE9PSBcIlwiKSB7XG4gICAgICB0ZXh0TGltaXRXaWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChyZWwudGVjaG4udGV4dCwgcmVsQ29uZik7XG4gICAgICBjYWxjQzRTaGFwZVRleHRXSChcInRlY2huXCIsIHJlbCwgcmVsVGV4dFdyYXAsIHJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICB9XG4gICAgaWYgKHJlbC5kZXNjciAmJiByZWwuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgICAgdGV4dExpbWl0V2lkdGggPSBjYWxjdWxhdGVUZXh0V2lkdGgocmVsLmRlc2NyLnRleHQsIHJlbENvbmYpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXCJkZXNjclwiLCByZWwsIHJlbFRleHRXcmFwLCByZWxDb25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgfVxuICAgIGxldCBmcm9tTm9kZSA9IGdldEM0U2hhcGVPYmoocmVsLmZyb20pO1xuICAgIGxldCBlbmROb2RlID0gZ2V0QzRTaGFwZU9iaihyZWwudG8pO1xuICAgIGxldCBwb2ludHMgPSBnZXRJbnRlcnNlY3RQb2ludHMoZnJvbU5vZGUsIGVuZE5vZGUpO1xuICAgIHJlbC5zdGFydFBvaW50ID0gcG9pbnRzLnN0YXJ0UG9pbnQ7XG4gICAgcmVsLmVuZFBvaW50ID0gcG9pbnRzLmVuZFBvaW50O1xuICB9XG4gIHN2Z0RyYXdfZGVmYXVsdC5kcmF3UmVscyhkaWFncmFtMiwgcmVsczIsIGNvbmYpO1xufSwgXCJkcmF3UmVsc1wiKTtcbmZ1bmN0aW9uIGRyYXdJbnNpZGVCb3VuZGFyeShkaWFncmFtMiwgcGFyZW50Qm91bmRhcnlBbGlhcywgcGFyZW50Qm91bmRzLCBjdXJyZW50Qm91bmRhcmllcywgZGlhZ09iaikge1xuICBsZXQgY3VycmVudEJvdW5kcyA9IG5ldyBCb3VuZHMoZGlhZ09iaik7XG4gIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0ID0gcGFyZW50Qm91bmRzLmRhdGEud2lkdGhMaW1pdCAvIE1hdGgubWluKGM0Qm91bmRhcnlJblJvdzIsIGN1cnJlbnRCb3VuZGFyaWVzLmxlbmd0aCk7XG4gIGZvciAobGV0IFtpLCBjdXJyZW50Qm91bmRhcnldIG9mIGN1cnJlbnRCb3VuZGFyaWVzLmVudHJpZXMoKSkge1xuICAgIGxldCBZID0gMDtcbiAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2UgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIFk6IDAgfTtcbiAgICBpZiAoY3VycmVudEJvdW5kYXJ5LnNwcml0ZSkge1xuICAgICAgY3VycmVudEJvdW5kYXJ5LmltYWdlLndpZHRoID0gNDg7XG4gICAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuaGVpZ2h0ID0gNDg7XG4gICAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuWSA9IFk7XG4gICAgICBZID0gY3VycmVudEJvdW5kYXJ5LmltYWdlLlkgKyBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuaGVpZ2h0O1xuICAgIH1cbiAgICBsZXQgY3VycmVudEJvdW5kYXJ5VGV4dFdyYXAgPSBjdXJyZW50Qm91bmRhcnkud3JhcCAmJiBjb25mLndyYXA7XG4gICAgbGV0IGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgICBjdXJyZW50Qm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgPSBjdXJyZW50Qm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgKyAyO1xuICAgIGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZi5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgY2FsY0M0U2hhcGVUZXh0V0goXG4gICAgICBcImxhYmVsXCIsXG4gICAgICBjdXJyZW50Qm91bmRhcnksXG4gICAgICBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCxcbiAgICAgIGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZixcbiAgICAgIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0XG4gICAgKTtcbiAgICBjdXJyZW50Qm91bmRhcnkubGFiZWwuWSA9IFkgKyA4O1xuICAgIFkgPSBjdXJyZW50Qm91bmRhcnkubGFiZWwuWSArIGN1cnJlbnRCb3VuZGFyeS5sYWJlbC5oZWlnaHQ7XG4gICAgaWYgKGN1cnJlbnRCb3VuZGFyeS50eXBlICYmIGN1cnJlbnRCb3VuZGFyeS50eXBlLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeS50eXBlLnRleHQgPSBcIltcIiArIGN1cnJlbnRCb3VuZGFyeS50eXBlLnRleHQgKyBcIl1cIjtcbiAgICAgIGxldCBjdXJyZW50Qm91bmRhcnlUeXBlQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5LFxuICAgICAgICBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCxcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5VHlwZUNvbmYsXG4gICAgICAgIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0XG4gICAgICApO1xuICAgICAgY3VycmVudEJvdW5kYXJ5LnR5cGUuWSA9IFkgKyA1O1xuICAgICAgWSA9IGN1cnJlbnRCb3VuZGFyeS50eXBlLlkgKyBjdXJyZW50Qm91bmRhcnkudHlwZS5oZWlnaHQ7XG4gICAgfVxuICAgIGlmIChjdXJyZW50Qm91bmRhcnkuZGVzY3IgJiYgY3VycmVudEJvdW5kYXJ5LmRlc2NyLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGxldCBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYgPSBib3VuZGFyeUZvbnQoY29uZik7XG4gICAgICBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYuZm9udFNpemUgPSBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYuZm9udFNpemUgLSAyO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXG4gICAgICAgIFwiZGVzY3JcIixcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5LFxuICAgICAgICBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCxcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5RGVzY3JDb25mLFxuICAgICAgICBjdXJyZW50Qm91bmRzLmRhdGEud2lkdGhMaW1pdFxuICAgICAgKTtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeS5kZXNjci5ZID0gWSArIDIwO1xuICAgICAgWSA9IGN1cnJlbnRCb3VuZGFyeS5kZXNjci5ZICsgY3VycmVudEJvdW5kYXJ5LmRlc2NyLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKGkgPT0gMCB8fCBpICUgYzRCb3VuZGFyeUluUm93MiA9PT0gMCkge1xuICAgICAgbGV0IF94ID0gcGFyZW50Qm91bmRzLmRhdGEuc3RhcnR4ICsgY29uZi5kaWFncmFtTWFyZ2luWDtcbiAgICAgIGxldCBfeSA9IHBhcmVudEJvdW5kcy5kYXRhLnN0b3B5ICsgY29uZi5kaWFncmFtTWFyZ2luWSArIFk7XG4gICAgICBjdXJyZW50Qm91bmRzLnNldERhdGEoX3gsIF94LCBfeSwgX3kpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgX3ggPSBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggIT09IGN1cnJlbnRCb3VuZHMuZGF0YS5zdGFydHggPyBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggKyBjb25mLmRpYWdyYW1NYXJnaW5YIDogY3VycmVudEJvdW5kcy5kYXRhLnN0YXJ0eDtcbiAgICAgIGxldCBfeSA9IGN1cnJlbnRCb3VuZHMuZGF0YS5zdGFydHk7XG4gICAgICBjdXJyZW50Qm91bmRzLnNldERhdGEoX3gsIF94LCBfeSwgX3kpO1xuICAgIH1cbiAgICBjdXJyZW50Qm91bmRzLm5hbWUgPSBjdXJyZW50Qm91bmRhcnkuYWxpYXM7XG4gICAgbGV0IGN1cnJlbnRQZXJzb25PclN5c3RlbUFycmF5ID0gZGlhZ09iai5kYi5nZXRDNFNoYXBlQXJyYXkoY3VycmVudEJvdW5kYXJ5LmFsaWFzKTtcbiAgICBsZXQgY3VycmVudFBlcnNvbk9yU3lzdGVtS2V5cyA9IGRpYWdPYmouZGIuZ2V0QzRTaGFwZUtleXMoY3VycmVudEJvdW5kYXJ5LmFsaWFzKTtcbiAgICBpZiAoY3VycmVudFBlcnNvbk9yU3lzdGVtS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBkcmF3QzRTaGFwZUFycmF5KFxuICAgICAgICBjdXJyZW50Qm91bmRzLFxuICAgICAgICBkaWFncmFtMixcbiAgICAgICAgY3VycmVudFBlcnNvbk9yU3lzdGVtQXJyYXksXG4gICAgICAgIGN1cnJlbnRQZXJzb25PclN5c3RlbUtleXNcbiAgICAgICk7XG4gICAgfVxuICAgIHBhcmVudEJvdW5kYXJ5QWxpYXMgPSBjdXJyZW50Qm91bmRhcnkuYWxpYXM7XG4gICAgbGV0IG5leHRDdXJyZW50Qm91bmRhcmllcyA9IGRpYWdPYmouZGIuZ2V0Qm91bmRhcnlzKHBhcmVudEJvdW5kYXJ5QWxpYXMpO1xuICAgIGlmIChuZXh0Q3VycmVudEJvdW5kYXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgZHJhd0luc2lkZUJvdW5kYXJ5KFxuICAgICAgICBkaWFncmFtMixcbiAgICAgICAgcGFyZW50Qm91bmRhcnlBbGlhcyxcbiAgICAgICAgY3VycmVudEJvdW5kcyxcbiAgICAgICAgbmV4dEN1cnJlbnRCb3VuZGFyaWVzLFxuICAgICAgICBkaWFnT2JqXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudEJvdW5kYXJ5LmFsaWFzICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICBkcmF3Qm91bmRhcnkyKGRpYWdyYW0yLCBjdXJyZW50Qm91bmRhcnksIGN1cnJlbnRCb3VuZHMpO1xuICAgIH1cbiAgICBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSA9IE1hdGgubWF4KFxuICAgICAgY3VycmVudEJvdW5kcy5kYXRhLnN0b3B5ICsgY29uZi5jNFNoYXBlTWFyZ2luLFxuICAgICAgcGFyZW50Qm91bmRzLmRhdGEuc3RvcHlcbiAgICApO1xuICAgIHBhcmVudEJvdW5kcy5kYXRhLnN0b3B4ID0gTWF0aC5tYXgoXG4gICAgICBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggKyBjb25mLmM0U2hhcGVNYXJnaW4sXG4gICAgICBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weFxuICAgICk7XG4gICAgZ2xvYmFsQm91bmRhcnlNYXhYID0gTWF0aC5tYXgoZ2xvYmFsQm91bmRhcnlNYXhYLCBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weCk7XG4gICAgZ2xvYmFsQm91bmRhcnlNYXhZID0gTWF0aC5tYXgoZ2xvYmFsQm91bmRhcnlNYXhZLCBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSk7XG4gIH1cbn1cbl9fbmFtZShkcmF3SW5zaWRlQm91bmRhcnksIFwiZHJhd0luc2lkZUJvdW5kYXJ5XCIpO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF90ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uZiA9IGdldENvbmZpZygpLmM0O1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgbGV0IGRiID0gZGlhZ09iai5kYjtcbiAgZGlhZ09iai5kYi5zZXRXcmFwKGNvbmYud3JhcCk7XG4gIGM0U2hhcGVJblJvdzIgPSBkYi5nZXRDNFNoYXBlSW5Sb3coKTtcbiAgYzRCb3VuZGFyeUluUm93MiA9IGRiLmdldEM0Qm91bmRhcnlJblJvdygpO1xuICBsb2cuZGVidWcoYEM6JHtKU09OLnN0cmluZ2lmeShjb25mLCBudWxsLCAyKX1gKTtcbiAgY29uc3QgZGlhZ3JhbTIgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApIDogc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0Q29tcHV0ZXJJY29uKGRpYWdyYW0yKTtcbiAgc3ZnRHJhd19kZWZhdWx0Lmluc2VydERhdGFiYXNlSWNvbihkaWFncmFtMik7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRDbG9ja0ljb24oZGlhZ3JhbTIpO1xuICBsZXQgc2NyZWVuQm91bmRzID0gbmV3IEJvdW5kcyhkaWFnT2JqKTtcbiAgc2NyZWVuQm91bmRzLnNldERhdGEoXG4gICAgY29uZi5kaWFncmFtTWFyZ2luWCxcbiAgICBjb25mLmRpYWdyYW1NYXJnaW5YLFxuICAgIGNvbmYuZGlhZ3JhbU1hcmdpblksXG4gICAgY29uZi5kaWFncmFtTWFyZ2luWVxuICApO1xuICBzY3JlZW5Cb3VuZHMuZGF0YS53aWR0aExpbWl0ID0gc2NyZWVuLmF2YWlsV2lkdGg7XG4gIGdsb2JhbEJvdW5kYXJ5TWF4WCA9IGNvbmYuZGlhZ3JhbU1hcmdpblg7XG4gIGdsb2JhbEJvdW5kYXJ5TWF4WSA9IGNvbmYuZGlhZ3JhbU1hcmdpblk7XG4gIGNvbnN0IHRpdGxlMiA9IGRpYWdPYmouZGIuZ2V0VGl0bGUoKTtcbiAgbGV0IGN1cnJlbnRCb3VuZGFyaWVzID0gZGlhZ09iai5kYi5nZXRCb3VuZGFyeXMoXCJcIik7XG4gIGRyYXdJbnNpZGVCb3VuZGFyeShkaWFncmFtMiwgXCJcIiwgc2NyZWVuQm91bmRzLCBjdXJyZW50Qm91bmRhcmllcywgZGlhZ09iaik7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRBcnJvd0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dFbmQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGRpYWdyYW0yKTtcbiAgZHJhd1JlbHMyKGRpYWdyYW0yLCBkaWFnT2JqLmRiLmdldFJlbHMoKSwgZGlhZ09iai5kYi5nZXRDNFNoYXBlLCBkaWFnT2JqKTtcbiAgc2NyZWVuQm91bmRzLmRhdGEuc3RvcHggPSBnbG9iYWxCb3VuZGFyeU1heFg7XG4gIHNjcmVlbkJvdW5kcy5kYXRhLnN0b3B5ID0gZ2xvYmFsQm91bmRhcnlNYXhZO1xuICBjb25zdCBib3ggPSBzY3JlZW5Cb3VuZHMuZGF0YTtcbiAgbGV0IGJveEhlaWdodCA9IGJveC5zdG9weSAtIGJveC5zdGFydHk7XG4gIGxldCBoZWlnaHQgPSBib3hIZWlnaHQgKyAyICogY29uZi5kaWFncmFtTWFyZ2luWTtcbiAgbGV0IGJveFdpZHRoID0gYm94LnN0b3B4IC0gYm94LnN0YXJ0eDtcbiAgY29uc3Qgd2lkdGggPSBib3hXaWR0aCArIDIgKiBjb25mLmRpYWdyYW1NYXJnaW5YO1xuICBpZiAodGl0bGUyKSB7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlMikuYXR0cihcInhcIiwgKGJveC5zdG9weCAtIGJveC5zdGFydHgpIC8gMiAtIDQgKiBjb25mLmRpYWdyYW1NYXJnaW5YKS5hdHRyKFwieVwiLCBib3guc3RhcnR5ICsgY29uZi5kaWFncmFtTWFyZ2luWSk7XG4gIH1cbiAgY29uZmlndXJlU3ZnU2l6ZShkaWFncmFtMiwgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIGNvbnN0IGV4dHJhVmVydEZvclRpdGxlID0gdGl0bGUyID8gNjAgOiAwO1xuICBkaWFncmFtMi5hdHRyKFxuICAgIFwidmlld0JveFwiLFxuICAgIGJveC5zdGFydHggLSBjb25mLmRpYWdyYW1NYXJnaW5YICsgXCIgLVwiICsgKGNvbmYuZGlhZ3JhbU1hcmdpblkgKyBleHRyYVZlcnRGb3JUaXRsZSkgKyBcIiBcIiArIHdpZHRoICsgXCIgXCIgKyAoaGVpZ2h0ICsgZXh0cmFWZXJ0Rm9yVGl0bGUpXG4gICk7XG4gIGxvZy5kZWJ1ZyhgbW9kZWxzOmAsIGJveCk7XG59LCBcImRyYXdcIik7XG52YXIgYzRSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTogZHJhd0M0U2hhcGVBcnJheSxcbiAgZHJhd0JvdW5kYXJ5OiBkcmF3Qm91bmRhcnkyLFxuICBzZXRDb25mLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYzQvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYC5wZXJzb24ge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBlcnNvbkJvcmRlcn07XG4gICAgZmlsbDogJHtvcHRpb25zLnBlcnNvbkJrZ307XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYzQvYzREaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBjNERpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IGM0RGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IGM0UmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeyBjNCwgd3JhcCB9KSA9PiB7XG4gICAgYzRSZW5kZXJlcl9kZWZhdWx0LnNldENvbmYoYzQpO1xuICAgIGM0RGJfZGVmYXVsdC5zZXRXcmFwKHdyYXApO1xuICB9LCBcImluaXRcIilcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL2luc2VydEVsZW1lbnRzRm9yU2l6ZS5qc1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG52YXIgZ2V0RGlhZ3JhbUVsZW1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgc2VjdXJpdHlMZXZlbCkgPT4ge1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgcmV0dXJuIHN2Zztcbn0sIFwiZ2V0RGlhZ3JhbUVsZW1lbnRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9zZXR1cFZpZXdQb3J0Rm9yU1ZHLnRzXG52YXIgc2V0dXBWaWV3UG9ydEZvclNWRyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2ZywgcGFkZGluZywgY3NzRGlhZ3JhbSwgdXNlTWF4V2lkdGgpID0+IHtcbiAgc3ZnLmF0dHIoXCJjbGFzc1wiLCBjc3NEaWFncmFtKTtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0gPSBjYWxjdWxhdGVEaW1lbnNpb25zV2l0aFBhZGRpbmcoc3ZnLCBwYWRkaW5nKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgd2lkdGgsIHVzZU1heFdpZHRoKTtcbiAgY29uc3Qgdmlld0JveCA9IGNyZWF0ZVZpZXdCb3goeCwgeSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZyk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCB2aWV3Qm94KTtcbiAgbG9nLmRlYnVnKGB2aWV3Qm94IGNvbmZpZ3VyZWQ6ICR7dmlld0JveH0gd2l0aCBwYWRkaW5nOiAke3BhZGRpbmd9YCk7XG59LCBcInNldHVwVmlld1BvcnRGb3JTVkdcIik7XG52YXIgY2FsY3VsYXRlRGltZW5zaW9uc1dpdGhQYWRkaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3ZnLCBwYWRkaW5nKSA9PiB7XG4gIGNvbnN0IGJvdW5kcyA9IHN2Zy5ub2RlKCk/LmdldEJCb3goKSB8fCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHg6IDAsIHk6IDAgfTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogYm91bmRzLndpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDIsXG4gICAgeDogYm91bmRzLngsXG4gICAgeTogYm91bmRzLnlcbiAgfTtcbn0sIFwiY2FsY3VsYXRlRGltZW5zaW9uc1dpdGhQYWRkaW5nXCIpO1xudmFyIGNyZWF0ZVZpZXdCb3ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSA9PiB7XG4gIHJldHVybiBgJHt4IC0gcGFkZGluZ30gJHt5IC0gcGFkZGluZ30gJHt3aWR0aH0gJHtoZWlnaHR9YDtcbn0sIFwiY3JlYXRlVmlld0JveFwiKTtcblxuZXhwb3J0IHtcbiAgZ2V0RGlhZ3JhbUVsZW1lbnQsXG4gIHNldHVwVmlld1BvcnRGb3JTVkdcbn07XG4iLAogICAgImltcG9ydCB7XG4gIGNyZWF0ZVRleHQsXG4gIHJlcGxhY2VJY29uU3Vic3RyaW5nXG59IGZyb20gXCIuL2NodW5rLVpJNlYyVUUyLm1qc1wiO1xuaW1wb3J0IHtcbiAgZGVjb2RlRW50aXRpZXNcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGV2YWx1YXRlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgbG9nLFxuICBzYW5pdGl6ZVRleHRcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2NyZWF0ZUxhYmVsLmpzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZG9tLCBzdHlsZUZuKSB7XG4gIGlmIChzdHlsZUZuKSB7XG4gICAgZG9tLmF0dHIoXCJzdHlsZVwiLCBzdHlsZUZuKTtcbiAgfVxufVxuX19uYW1lKGFwcGx5U3R5bGUsIFwiYXBwbHlTdHlsZVwiKTtcbmZ1bmN0aW9uIGFkZEh0bWxMYWJlbChub2RlKSB7XG4gIGNvbnN0IGZvID0gc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZm9yZWlnbk9iamVjdFwiKSk7XG4gIGNvbnN0IGRpdiA9IGZvLmFwcGVuZChcInhodG1sOmRpdlwiKTtcbiAgY29uc3QgbGFiZWwgPSBub2RlLmxhYmVsO1xuICBjb25zdCBsYWJlbENsYXNzID0gbm9kZS5pc05vZGUgPyBcIm5vZGVMYWJlbFwiIDogXCJlZGdlTGFiZWxcIjtcbiAgY29uc3Qgc3BhbiA9IGRpdi5hcHBlbmQoXCJzcGFuXCIpO1xuICBzcGFuLmh0bWwobGFiZWwpO1xuICBhcHBseVN0eWxlKHNwYW4sIG5vZGUubGFiZWxTdHlsZSk7XG4gIHNwYW4uYXR0cihcImNsYXNzXCIsIGxhYmVsQ2xhc3MpO1xuICBhcHBseVN0eWxlKGRpdiwgbm9kZS5sYWJlbFN0eWxlKTtcbiAgZGl2LnN0eWxlKFwiZGlzcGxheVwiLCBcImlubGluZS1ibG9ja1wiKTtcbiAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJub3dyYXBcIik7XG4gIGRpdi5hdHRyKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpO1xuICByZXR1cm4gZm8ubm9kZSgpO1xufVxuX19uYW1lKGFkZEh0bWxMYWJlbCwgXCJhZGRIdG1sTGFiZWxcIik7XG52YXIgY3JlYXRlTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChfdmVydGV4VGV4dCwgc3R5bGUsIGlzVGl0bGUsIGlzTm9kZSkgPT4ge1xuICBsZXQgdmVydGV4VGV4dCA9IF92ZXJ0ZXhUZXh0IHx8IFwiXCI7XG4gIGlmICh0eXBlb2YgdmVydGV4VGV4dCA9PT0gXCJvYmplY3RcIikge1xuICAgIHZlcnRleFRleHQgPSB2ZXJ0ZXhUZXh0WzBdO1xuICB9XG4gIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICB2ZXJ0ZXhUZXh0ID0gdmVydGV4VGV4dC5yZXBsYWNlKC9cXFxcbnxcXG4vZywgXCI8YnIgLz5cIik7XG4gICAgbG9nLmRlYnVnKFwidmVydGV4VGV4dFwiICsgdmVydGV4VGV4dCk7XG4gICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgIGlzTm9kZSxcbiAgICAgIGxhYmVsOiByZXBsYWNlSWNvblN1YnN0cmluZyhkZWNvZGVFbnRpdGllcyh2ZXJ0ZXhUZXh0KSksXG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZS5yZXBsYWNlKFwiZmlsbDpcIiwgXCJjb2xvcjpcIilcbiAgICB9O1xuICAgIGxldCB2ZXJ0ZXhOb2RlID0gYWRkSHRtbExhYmVsKG5vZGUpO1xuICAgIHJldHVybiB2ZXJ0ZXhOb2RlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0ZXh0XCIpO1xuICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKSk7XG4gICAgbGV0IHJvd3MgPSBbXTtcbiAgICBpZiAodHlwZW9mIHZlcnRleFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0LnNwbGl0KC9cXFxcbnxcXG58PGJyXFxzKlxcLz8+L2dpKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmVydGV4VGV4dCkpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dzID0gW107XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHRzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcInhcIiwgXCIwXCIpO1xuICAgICAgaWYgKGlzVGl0bGUpIHtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJ0aXRsZS1yb3dcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJvd1wiKTtcbiAgICAgIH1cbiAgICAgIHRzcGFuLnRleHRDb250ZW50ID0gcm93LnRyaW0oKTtcbiAgICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgICB9XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59LCBcImNyZWF0ZUxhYmVsXCIpO1xudmFyIGNyZWF0ZUxhYmVsX2RlZmF1bHQgPSBjcmVhdGVMYWJlbDtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvc2hhcGVzL3V0aWwuanNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3QyIH0gZnJvbSBcImQzXCI7XG52YXIgbGFiZWxIZWxwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUsIF9jbGFzc2VzLCBpc05vZGUpID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGxldCBjbGFzc2VzO1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gbm9kZS51c2VIdG1sTGFiZWxzIHx8IGV2YWx1YXRlKGNvbmZpZy5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGlmICghX2NsYXNzZXMpIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzID0gX2NsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5sYWJlbFN0eWxlKTtcbiAgbGV0IGxhYmVsVGV4dDtcbiAgaWYgKG5vZGUubGFiZWxUZXh0ID09PSB2b2lkIDApIHtcbiAgICBsYWJlbFRleHQgPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIGxhYmVsVGV4dCA9IHR5cGVvZiBub2RlLmxhYmVsVGV4dCA9PT0gXCJzdHJpbmdcIiA/IG5vZGUubGFiZWxUZXh0IDogbm9kZS5sYWJlbFRleHRbMF07XG4gIH1cbiAgY29uc3QgdGV4dE5vZGUgPSBsYWJlbC5ub2RlKCk7XG4gIGxldCB0ZXh0O1xuICBpZiAobm9kZS5sYWJlbFR5cGUgPT09IFwibWFya2Rvd25cIikge1xuICAgIHRleHQgPSBjcmVhdGVUZXh0KFxuICAgICAgbGFiZWwsXG4gICAgICBzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWxUZXh0KSwgY29uZmlnKSxcbiAgICAgIHtcbiAgICAgICAgdXNlSHRtbExhYmVscyxcbiAgICAgICAgd2lkdGg6IG5vZGUud2lkdGggfHwgY29uZmlnLmZsb3djaGFydC53cmFwcGluZ1dpZHRoLFxuICAgICAgICBjbGFzc2VzOiBcIm1hcmtkb3duLW5vZGUtbGFiZWxcIlxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IHRleHROb2RlLmFwcGVuZENoaWxkKFxuICAgICAgY3JlYXRlTGFiZWxfZGVmYXVsdChzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWxUZXh0KSwgY29uZmlnKSwgbm9kZS5sYWJlbFN0eWxlLCBmYWxzZSwgaXNOb2RlKVxuICAgICk7XG4gIH1cbiAgbGV0IGJib3ggPSB0ZXh0LmdldEJCb3goKTtcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBpZiAoZXZhbHVhdGUoY29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QyKHRleHQpO1xuICAgIGNvbnN0IGltYWdlcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcImltZ1wiKTtcbiAgICBpZiAoaW1hZ2VzKSB7XG4gICAgICBjb25zdCBub0ltZ1RleHQgPSBsYWJlbFRleHQucmVwbGFjZSgvPGltZ1tePl0qPi9nLCBcIlwiKS50cmltKCkgPT09IFwiXCI7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgWy4uLmltYWdlc10ubWFwKFxuICAgICAgICAgIChpbWcpID0+IG5ldyBQcm9taXNlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwSW1hZ2UoKSB7XG4gICAgICAgICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgICAgICAgIGltZy5zdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJjb2x1bW5cIjtcbiAgICAgICAgICAgICAgaWYgKG5vSW1nVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlGb250U2l6ZSA9IGNvbmZpZy5mb250U2l6ZSA/IGNvbmZpZy5mb250U2l6ZSA6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVubGFyZ2luZ0ZhY3RvciA9IDU7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChib2R5Rm9udFNpemUsIDEwKSAqIGVubGFyZ2luZ0ZhY3RvciArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWluV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMoaW1nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fbmFtZShzZXR1cEltYWdlLCBcInNldHVwSW1hZ2VcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGltZy5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHNldHVwSW1hZ2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC1iYm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIH1cbiAgaWYgKG5vZGUuY2VudGVyTGFiZWwpIHtcbiAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICBsYWJlbC5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICByZXR1cm4geyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcsIGxhYmVsIH07XG59LCBcImxhYmVsSGVscGVyXCIpO1xudmFyIHVwZGF0ZU5vZGVCb3VuZHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBlbGVtZW50KSA9PiB7XG4gIGNvbnN0IGJib3ggPSBlbGVtZW50Lm5vZGUoKS5nZXRCQm94KCk7XG4gIG5vZGUud2lkdGggPSBiYm94LndpZHRoO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0O1xufSwgXCJ1cGRhdGVOb2RlQm91bmRzXCIpO1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbC1jb250YWluZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC13IC8gMiArIFwiLFwiICsgaCAvIDIgKyBcIilcIik7XG59XG5fX25hbWUoaW5zZXJ0UG9seWdvblNoYXBlLCBcImluc2VydFBvbHlnb25TaGFwZVwiKTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvbm9kZXMuanNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3QzIH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2Jsb2NrQXJyb3dIZWxwZXIudHNcbnZhciBleHBhbmRBbmREZWR1cGxpY2F0ZURpcmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkaXJlY3Rpb25zKSA9PiB7XG4gIGNvbnN0IHVuaXF1ZURpcmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IGRpcmVjdGlvbiBvZiBkaXJlY3Rpb25zKSB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgIHVuaXF1ZURpcmVjdGlvbnMuYWRkKFwicmlnaHRcIik7XG4gICAgICAgIHVuaXF1ZURpcmVjdGlvbnMuYWRkKFwibGVmdFwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICB1bmlxdWVEaXJlY3Rpb25zLmFkZChcInVwXCIpO1xuICAgICAgICB1bmlxdWVEaXJlY3Rpb25zLmFkZChcImRvd25cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdW5pcXVlRGlyZWN0aW9ucy5hZGQoZGlyZWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmlxdWVEaXJlY3Rpb25zO1xufSwgXCJleHBhbmRBbmREZWR1cGxpY2F0ZURpcmVjdGlvbnNcIik7XG52YXIgZ2V0QXJyb3dQb2ludHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkdXBsaWNhdGVkRGlyZWN0aW9ucywgYmJveCwgbm9kZSkgPT4ge1xuICBjb25zdCBkaXJlY3Rpb25zID0gZXhwYW5kQW5kRGVkdXBsaWNhdGVEaXJlY3Rpb25zKGR1cGxpY2F0ZWREaXJlY3Rpb25zKTtcbiAgY29uc3QgZiA9IDI7XG4gIGNvbnN0IGhlaWdodCA9IGJib3guaGVpZ2h0ICsgMiAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgbWlkcG9pbnQgPSBoZWlnaHQgLyBmO1xuICBjb25zdCB3aWR0aCA9IGJib3gud2lkdGggKyAyICogbWlkcG9pbnQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcImRvd25cIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gQm90dG9tXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGggLyAyLCB5OiAyICogcGFkZGluZyB9LFxuICAgICAgeyB4OiB3aWR0aCAtIG1pZHBvaW50LCB5OiAwIH0sXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICAvLyBSaWdodFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCAvIDMgfSxcbiAgICAgIHsgeDogd2lkdGggKyAyICogcGFkZGluZywgeTogLWhlaWdodCAvIDIgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC0yICogaGVpZ2h0IC8gMyB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCB9LFxuICAgICAgLy8gVG9wXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLyAyLCB5OiAtaGVpZ2h0IC0gMiAqIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIC8vIExlZnRcbiAgICAgIHsgeDogMCwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiAwLCB5OiAtMiAqIGhlaWdodCAvIDMgfSxcbiAgICAgIHsgeDogLTIgKiBwYWRkaW5nLCB5OiAtaGVpZ2h0IC8gMiB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0IC8gMyB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAwIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgLyAyIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogMCwgeTogLWhlaWdodCAvIDIgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJsZWZ0XCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogMCB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcInVwXCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1taWRwb2ludCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCArIG1pZHBvaW50IH0sXG4gICAgICB7IHg6IDAsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwibGVmdFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcInVwXCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC1taWRwb2ludCB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0ICsgbWlkcG9pbnQgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJsZWZ0XCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgLyAyIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtaGVpZ2h0IH0sXG4gICAgICB7IHg6IDAsIHk6IC1oZWlnaHQgLyAyIH1cbiAgICBdO1xuICB9XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhcInVwXCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBCb3R0b20gY2VudGVyXG4gICAgICB7IHg6IHdpZHRoIC8gMiwgeTogMCB9LFxuICAgICAgLy8gTGVmdCBwb250IG9mIGJvdHRvbSBhcnJvd1xuICAgICAgeyB4OiAwLCB5OiAtcGFkZGluZyB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIC8vIExlZnQgdG9wIG92ZXIgdmVydGljYWwgc2VjdGlvblxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogMCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIC8vIFRvcCBvZiBhcnJvd1xuICAgICAgeyB4OiB3aWR0aCAvIDIsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICAvLyBUb3Agb2YgcmlnaHQgdmVydGljYWwgYmFyXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoLCB5OiAtcGFkZGluZyB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcInVwXCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLW1pZHBvaW50IH0sXG4gICAgICB7IHg6IDAsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJkb3duXCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogMCB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0IH1cbiAgICBdO1xuICB9XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC1taWRwb2ludCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJsZWZ0XCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgLyAyIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIC8vIHRvcCBsZWZ0IGNvcm5lciBvZiBhcnJvd1xuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH1cbiAgICBdO1xuICB9XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBtaWRwb2ludCwgeTogMCB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIC8vIFR3byBwb2ludHMsIHRoZSByaWdodCBjb3JuZXJzXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtaGVpZ2h0ICsgcGFkZGluZyB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0IC8gMiB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBCb3R0b20gY2VudGVyXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtcGFkZGluZyB9LFxuICAgICAgLy8gTGVmdCB0b3Agb3ZlciB2ZXJ0aWNhbCBzZWN0aW9uXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtaGVpZ2h0ICsgcGFkZGluZyB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0ICsgcGFkZGluZyB9LFxuICAgICAgLy8gVG9wIG9mIGFycm93XG4gICAgICB7IHg6IHdpZHRoIC8gMiwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIC8vIFRvcCBvZiByaWdodCB2ZXJ0aWNhbCBiYXJcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLXBhZGRpbmcgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBCb3R0b20gY2VudGVyXG4gICAgICB7IHg6IHdpZHRoIC8gMiwgeTogMCB9LFxuICAgICAgLy8gTGVmdCBwb250IG9mIGJvdHRvbSBhcnJvd1xuICAgICAgeyB4OiAwLCB5OiAtcGFkZGluZyB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIC8vIExlZnQgdG9wIG92ZXIgdmVydGljYWwgc2VjdGlvblxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1wYWRkaW5nIH1cbiAgICBdO1xuICB9XG4gIHJldHVybiBbeyB4OiAwLCB5OiAwIH1dO1xufSwgXCJnZXRBcnJvd1BvaW50c1wiKTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvaW50ZXJzZWN0L2ludGVyc2VjdC1ub2RlLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3ROb2RlKG5vZGUsIHBvaW50KSB7XG4gIHJldHVybiBub2RlLmludGVyc2VjdChwb2ludCk7XG59XG5fX25hbWUoaW50ZXJzZWN0Tm9kZSwgXCJpbnRlcnNlY3ROb2RlXCIpO1xudmFyIGludGVyc2VjdF9ub2RlX2RlZmF1bHQgPSBpbnRlcnNlY3ROb2RlO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbnRlcnNlY3QvaW50ZXJzZWN0LWVsbGlwc2UuanNcbmZ1bmN0aW9uIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ5LCBwb2ludCkge1xuICB2YXIgY3ggPSBub2RlLng7XG4gIHZhciBjeSA9IG5vZGUueTtcbiAgdmFyIHB4ID0gY3ggLSBwb2ludC54O1xuICB2YXIgcHkgPSBjeSAtIHBvaW50Lnk7XG4gIHZhciBkZXQgPSBNYXRoLnNxcnQocnggKiByeCAqIHB5ICogcHkgKyByeSAqIHJ5ICogcHggKiBweCk7XG4gIHZhciBkeCA9IE1hdGguYWJzKHJ4ICogcnkgKiBweCAvIGRldCk7XG4gIGlmIChwb2ludC54IDwgY3gpIHtcbiAgICBkeCA9IC1keDtcbiAgfVxuICB2YXIgZHkgPSBNYXRoLmFicyhyeCAqIHJ5ICogcHkgLyBkZXQpO1xuICBpZiAocG9pbnQueSA8IGN5KSB7XG4gICAgZHkgPSAtZHk7XG4gIH1cbiAgcmV0dXJuIHsgeDogY3ggKyBkeCwgeTogY3kgKyBkeSB9O1xufVxuX19uYW1lKGludGVyc2VjdEVsbGlwc2UsIFwiaW50ZXJzZWN0RWxsaXBzZVwiKTtcbnZhciBpbnRlcnNlY3RfZWxsaXBzZV9kZWZhdWx0ID0gaW50ZXJzZWN0RWxsaXBzZTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvaW50ZXJzZWN0L2ludGVyc2VjdC1jaXJjbGUuanNcbmZ1bmN0aW9uIGludGVyc2VjdENpcmNsZShub2RlLCByeCwgcG9pbnQpIHtcbiAgcmV0dXJuIGludGVyc2VjdF9lbGxpcHNlX2RlZmF1bHQobm9kZSwgcngsIHJ4LCBwb2ludCk7XG59XG5fX25hbWUoaW50ZXJzZWN0Q2lyY2xlLCBcImludGVyc2VjdENpcmNsZVwiKTtcbnZhciBpbnRlcnNlY3RfY2lyY2xlX2RlZmF1bHQgPSBpbnRlcnNlY3RDaXJjbGU7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2ludGVyc2VjdC9pbnRlcnNlY3QtbGluZS5qc1xuZnVuY3Rpb24gaW50ZXJzZWN0TGluZShwMSwgcDIsIHExLCBxMikge1xuICB2YXIgYTEsIGEyLCBiMSwgYjIsIGMxLCBjMjtcbiAgdmFyIHIxLCByMiwgcjMsIHI0O1xuICB2YXIgZGVub20sIG9mZnNldCwgbnVtO1xuICB2YXIgeCwgeTtcbiAgYTEgPSBwMi55IC0gcDEueTtcbiAgYjEgPSBwMS54IC0gcDIueDtcbiAgYzEgPSBwMi54ICogcDEueSAtIHAxLnggKiBwMi55O1xuICByMyA9IGExICogcTEueCArIGIxICogcTEueSArIGMxO1xuICByNCA9IGExICogcTIueCArIGIxICogcTIueSArIGMxO1xuICBpZiAocjMgIT09IDAgJiYgcjQgIT09IDAgJiYgc2FtZVNpZ24ocjMsIHI0KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhMiA9IHEyLnkgLSBxMS55O1xuICBiMiA9IHExLnggLSBxMi54O1xuICBjMiA9IHEyLnggKiBxMS55IC0gcTEueCAqIHEyLnk7XG4gIHIxID0gYTIgKiBwMS54ICsgYjIgKiBwMS55ICsgYzI7XG4gIHIyID0gYTIgKiBwMi54ICsgYjIgKiBwMi55ICsgYzI7XG4gIGlmIChyMSAhPT0gMCAmJiByMiAhPT0gMCAmJiBzYW1lU2lnbihyMSwgcjIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRlbm9tID0gYTEgKiBiMiAtIGEyICogYjE7XG4gIGlmIChkZW5vbSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBvZmZzZXQgPSBNYXRoLmFicyhkZW5vbSAvIDIpO1xuICBudW0gPSBiMSAqIGMyIC0gYjIgKiBjMTtcbiAgeCA9IG51bSA8IDAgPyAobnVtIC0gb2Zmc2V0KSAvIGRlbm9tIDogKG51bSArIG9mZnNldCkgLyBkZW5vbTtcbiAgbnVtID0gYTIgKiBjMSAtIGExICogYzI7XG4gIHkgPSBudW0gPCAwID8gKG51bSAtIG9mZnNldCkgLyBkZW5vbSA6IChudW0gKyBvZmZzZXQpIC8gZGVub207XG4gIHJldHVybiB7IHgsIHkgfTtcbn1cbl9fbmFtZShpbnRlcnNlY3RMaW5lLCBcImludGVyc2VjdExpbmVcIik7XG5mdW5jdGlvbiBzYW1lU2lnbihyMSwgcjIpIHtcbiAgcmV0dXJuIHIxICogcjIgPiAwO1xufVxuX19uYW1lKHNhbWVTaWduLCBcInNhbWVTaWduXCIpO1xudmFyIGludGVyc2VjdF9saW5lX2RlZmF1bHQgPSBpbnRlcnNlY3RMaW5lO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbnRlcnNlY3QvaW50ZXJzZWN0LXBvbHlnb24uanNcbnZhciBpbnRlcnNlY3RfcG9seWdvbl9kZWZhdWx0ID0gaW50ZXJzZWN0UG9seWdvbjtcbmZ1bmN0aW9uIGludGVyc2VjdFBvbHlnb24obm9kZSwgcG9seVBvaW50cywgcG9pbnQpIHtcbiAgdmFyIHgxID0gbm9kZS54O1xuICB2YXIgeTEgPSBub2RlLnk7XG4gIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG4gIHZhciBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICB2YXIgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKHR5cGVvZiBwb2x5UG9pbnRzLmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBvbHlQb2ludHMuZm9yRWFjaChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIGVudHJ5LngpO1xuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGVudHJ5LnkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwb2x5UG9pbnRzLngpO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwb2x5UG9pbnRzLnkpO1xuICB9XG4gIHZhciBsZWZ0ID0geDEgLSBub2RlLndpZHRoIC8gMiAtIG1pblg7XG4gIHZhciB0b3AgPSB5MSAtIG5vZGUuaGVpZ2h0IC8gMiAtIG1pblk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwMSA9IHBvbHlQb2ludHNbaV07XG4gICAgdmFyIHAyID0gcG9seVBvaW50c1tpIDwgcG9seVBvaW50cy5sZW5ndGggLSAxID8gaSArIDEgOiAwXTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gaW50ZXJzZWN0X2xpbmVfZGVmYXVsdChcbiAgICAgIG5vZGUsXG4gICAgICBwb2ludCxcbiAgICAgIHsgeDogbGVmdCArIHAxLngsIHk6IHRvcCArIHAxLnkgfSxcbiAgICAgIHsgeDogbGVmdCArIHAyLngsIHk6IHRvcCArIHAyLnkgfVxuICAgICk7XG4gICAgaWYgKGludGVyc2VjdCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG4gIGlmICghaW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgaW50ZXJzZWN0aW9ucy5zb3J0KGZ1bmN0aW9uKHAsIHEpIHtcbiAgICAgIHZhciBwZHggPSBwLnggLSBwb2ludC54O1xuICAgICAgdmFyIHBkeSA9IHAueSAtIHBvaW50Lnk7XG4gICAgICB2YXIgZGlzdHAgPSBNYXRoLnNxcnQocGR4ICogcGR4ICsgcGR5ICogcGR5KTtcbiAgICAgIHZhciBxZHggPSBxLnggLSBwb2ludC54O1xuICAgICAgdmFyIHFkeSA9IHEueSAtIHBvaW50Lnk7XG4gICAgICB2YXIgZGlzdHEgPSBNYXRoLnNxcnQocWR4ICogcWR4ICsgcWR5ICogcWR5KTtcbiAgICAgIHJldHVybiBkaXN0cCA8IGRpc3RxID8gLTEgOiBkaXN0cCA9PT0gZGlzdHEgPyAwIDogMTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaW50ZXJzZWN0aW9uc1swXTtcbn1cbl9fbmFtZShpbnRlcnNlY3RQb2x5Z29uLCBcImludGVyc2VjdFBvbHlnb25cIik7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2ludGVyc2VjdC9pbnRlcnNlY3QtcmVjdC5qc1xudmFyIGludGVyc2VjdFJlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBwb2ludCkgPT4ge1xuICB2YXIgeCA9IG5vZGUueDtcbiAgdmFyIHkgPSBub2RlLnk7XG4gIHZhciBkeCA9IHBvaW50LnggLSB4O1xuICB2YXIgZHkgPSBwb2ludC55IC0geTtcbiAgdmFyIHcgPSBub2RlLndpZHRoIC8gMjtcbiAgdmFyIGggPSBub2RlLmhlaWdodCAvIDI7XG4gIHZhciBzeCwgc3k7XG4gIGlmIChNYXRoLmFicyhkeSkgKiB3ID4gTWF0aC5hYnMoZHgpICogaCkge1xuICAgIGlmIChkeSA8IDApIHtcbiAgICAgIGggPSAtaDtcbiAgICB9XG4gICAgc3ggPSBkeSA9PT0gMCA/IDAgOiBoICogZHggLyBkeTtcbiAgICBzeSA9IGg7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGR4IDwgMCkge1xuICAgICAgdyA9IC13O1xuICAgIH1cbiAgICBzeCA9IHc7XG4gICAgc3kgPSBkeCA9PT0gMCA/IDAgOiB3ICogZHkgLyBkeDtcbiAgfVxuICByZXR1cm4geyB4OiB4ICsgc3gsIHk6IHkgKyBzeSB9O1xufSwgXCJpbnRlcnNlY3RSZWN0XCIpO1xudmFyIGludGVyc2VjdF9yZWN0X2RlZmF1bHQgPSBpbnRlcnNlY3RSZWN0O1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbnRlcnNlY3QvaW5kZXguanNcbnZhciBpbnRlcnNlY3RfZGVmYXVsdCA9IHtcbiAgbm9kZTogaW50ZXJzZWN0X25vZGVfZGVmYXVsdCxcbiAgY2lyY2xlOiBpbnRlcnNlY3RfY2lyY2xlX2RlZmF1bHQsXG4gIGVsbGlwc2U6IGludGVyc2VjdF9lbGxpcHNlX2RlZmF1bHQsXG4gIHBvbHlnb246IGludGVyc2VjdF9wb2x5Z29uX2RlZmF1bHQsXG4gIHJlY3Q6IGludGVyc2VjdF9yZWN0X2RlZmF1bHRcbn07XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL3NoYXBlcy9ub3RlLmpzXG52YXIgbm90ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gbm9kZS51c2VIdG1sTGFiZWxzIHx8IGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzO1xuICBpZiAoIXVzZUh0bWxMYWJlbHMpIHtcbiAgICBub2RlLmNlbnRlckxhYmVsID0gdHJ1ZTtcbiAgfVxuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZyB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgXCJub2RlIFwiICsgbm9kZS5jbGFzc2VzLFxuICAgIHRydWVcbiAgKTtcbiAgbG9nLmluZm8oXCJDbGFzc2VzID0gXCIsIG5vZGUuY2xhc3Nlcyk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgcmVjdDIuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcIm5vdGVcIik7XG52YXIgbm90ZV9kZWZhdWx0ID0gbm90ZTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvbm9kZXMuanNcbnZhciBmb3JtYXRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0cikgPT4ge1xuICBpZiAoc3RyKSB7XG4gICAgcmV0dXJuIFwiIFwiICsgc3RyO1xuICB9XG4gIHJldHVybiBcIlwiO1xufSwgXCJmb3JtYXRDbGFzc1wiKTtcbnZhciBnZXRDbGFzc2VzRnJvbU5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBvdGhlckNsYXNzZXMpID0+IHtcbiAgcmV0dXJuIGAke290aGVyQ2xhc3NlcyA/IG90aGVyQ2xhc3NlcyA6IFwibm9kZSBkZWZhdWx0XCJ9JHtmb3JtYXRDbGFzcyhub2RlLmNsYXNzZXMpfSAke2Zvcm1hdENsYXNzKFxuICAgIG5vZGUuY2xhc3NcbiAgKX1gO1xufSwgXCJnZXRDbGFzc2VzRnJvbU5vZGVcIik7XG52YXIgcXVlc3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgZ2V0Q2xhc3Nlc0Zyb21Ob2RlKG5vZGUsIHZvaWQgMCksXG4gICAgdHJ1ZVxuICApO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBzID0gdyArIGg7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IHMgLyAyLCB5OiAwIH0sXG4gICAgeyB4OiBzLCB5OiAtcyAvIDIgfSxcbiAgICB7IHg6IHMgLyAyLCB5OiAtcyB9LFxuICAgIHsgeDogMCwgeTogLXMgLyAyIH1cbiAgXTtcbiAgbG9nLmluZm8oXCJRdWVzdGlvbiBtYWluIChDaXJjbGUpXCIpO1xuICBjb25zdCBxdWVzdGlvbkVsZW0gPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHMsIHMsIHBvaW50cyk7XG4gIHF1ZXN0aW9uRWxlbS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcXVlc3Rpb25FbGVtKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIGxvZy53YXJuKFwiSW50ZXJzZWN0IGNhbGxlZFwiKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJxdWVzdGlvblwiKTtcbnZhciBjaG9pY2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IHMgPSAyODtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogMCwgeTogcyAvIDIgfSxcbiAgICB7IHg6IHMgLyAyLCB5OiAwIH0sXG4gICAgeyB4OiAwLCB5OiAtcyAvIDIgfSxcbiAgICB7IHg6IC1zIC8gMiwgeTogMCB9XG4gIF07XG4gIGNvbnN0IGNob2ljZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJwb2x5Z29uXCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXG4gICAgXCJwb2ludHNcIixcbiAgICBwb2ludHMubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLnggKyBcIixcIiArIGQueTtcbiAgICB9KS5qb2luKFwiIFwiKVxuICApO1xuICBjaG9pY2UyLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLXN0YXJ0XCIpLmF0dHIoXCJyXCIsIDcpLmF0dHIoXCJ3aWR0aFwiLCAyOCkuYXR0cihcImhlaWdodFwiLCAyOCk7XG4gIG5vZGUud2lkdGggPSAyODtcbiAgbm9kZS5oZWlnaHQgPSAyODtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgMTQsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJjaG9pY2VcIik7XG52YXIgaGV4YWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IGYgPSA0O1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyAyICogbSArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogbSwgeTogMCB9LFxuICAgIHsgeDogdyAtIG0sIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyAtIG0sIHk6IC1oIH0sXG4gICAgeyB4OiBtLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3QgaGV4ID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBoZXguYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGhleCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJoZXhhZ29uXCIpO1xudmFyIGJsb2NrX2Fycm93ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgdm9pZCAwLCB0cnVlKTtcbiAgY29uc3QgZiA9IDI7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIDIgKiBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyAyICogbSArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gZ2V0QXJyb3dQb2ludHMobm9kZS5kaXJlY3Rpb25zLCBiYm94LCBub2RlKTtcbiAgY29uc3QgYmxvY2tBcnJvdyA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgYmxvY2tBcnJvdy5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgYmxvY2tBcnJvdyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJibG9ja19hcnJvd1wiKTtcbnZhciByZWN0X2xlZnRfaW52X2Fycm93ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogLWggLyAyLCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAtaCB9LFxuICAgIHsgeDogLWggLyAyLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgbm9kZS53aWR0aCA9IHcgKyBoO1xuICBub2RlLmhlaWdodCA9IGg7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJyZWN0X2xlZnRfaW52X2Fycm93XCIpO1xudmFyIGxlYW5fcmlnaHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSksIHRydWUpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImxlYW5fcmlnaHRcIik7XG52YXIgbGVhbl9sZWZ0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgLSAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiAtaCAvIDYsIHk6IC1oIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJsZWFuX2xlZnRcIik7XG52YXIgdHJhcGV6b2lkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogLTIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIDIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogaCAvIDYsIHk6IC1oIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJ0cmFwZXpvaWRcIik7XG52YXIgaW52X3RyYXBlem9pZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGNvbnN0IGVsID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBlbC5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgZWwpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiaW52X3RyYXBlem9pZFwiKTtcbnZhciByZWN0X3JpZ2h0X2ludl9hcnJvdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyBoIC8gMiwgeTogMCB9LFxuICAgIHsgeDogdywgeTogLWggLyAyIH0sXG4gICAgeyB4OiB3ICsgaCAvIDIsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCB9XG4gIF07XG4gIGNvbnN0IGVsID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBlbC5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgZWwpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdF9yaWdodF9pbnZfYXJyb3dcIik7XG52YXIgY3lsaW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgZ2V0Q2xhc3Nlc0Zyb21Ob2RlKG5vZGUsIHZvaWQgMCksXG4gICAgdHJ1ZVxuICApO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcnggPSB3IC8gMjtcbiAgY29uc3QgcnkgPSByeCAvICgyLjUgKyB3IC8gNTApO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyByeSArIG5vZGUucGFkZGluZztcbiAgY29uc3Qgc2hhcGUgPSBcIk0gMCxcIiArIHJ5ICsgXCIgYSBcIiArIHJ4ICsgXCIsXCIgKyByeSArIFwiIDAsMCwwIFwiICsgdyArIFwiIDAgYSBcIiArIHJ4ICsgXCIsXCIgKyByeSArIFwiIDAsMCwwIFwiICsgLXcgKyBcIiAwIGwgMCxcIiArIGggKyBcIiBhIFwiICsgcnggKyBcIixcIiArIHJ5ICsgXCIgMCwwLDAgXCIgKyB3ICsgXCIgMCBsIDAsXCIgKyAtaDtcbiAgY29uc3QgZWwgPSBzaGFwZVN2Zy5hdHRyKFwibGFiZWwtb2Zmc2V0LXlcIiwgcnkpLmluc2VydChcInBhdGhcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJkXCIsIHNoYXBlKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXcgLyAyICsgXCIsXCIgKyAtKGggLyAyICsgcnkpICsgXCIpXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIGNvbnN0IHBvcyA9IGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICAgIGNvbnN0IHggPSBwb3MueCAtIG5vZGUueDtcbiAgICBpZiAocnggIT0gMCAmJiAoTWF0aC5hYnMoeCkgPCBub2RlLndpZHRoIC8gMiB8fCBNYXRoLmFicyh4KSA9PSBub2RlLndpZHRoIC8gMiAmJiBNYXRoLmFicyhwb3MueSAtIG5vZGUueSkgPiBub2RlLmhlaWdodCAvIDIgLSByeSkpIHtcbiAgICAgIGxldCB5ID0gcnkgKiByeSAqICgxIC0geCAqIHggLyAocnggKiByeCkpO1xuICAgICAgaWYgKHkgIT0gMCkge1xuICAgICAgICB5ID0gTWF0aC5zcXJ0KHkpO1xuICAgICAgfVxuICAgICAgeSA9IHJ5IC0geTtcbiAgICAgIGlmIChwb2ludC55IC0gbm9kZS55ID4gMCkge1xuICAgICAgICB5ID0gLXk7XG4gICAgICB9XG4gICAgICBwb3MueSArPSB5O1xuICAgIH1cbiAgICByZXR1cm4gcG9zO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImN5bGluZGVyXCIpO1xudmFyIHJlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcgfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIFwibm9kZSBcIiArIG5vZGUuY2xhc3NlcyArIFwiIFwiICsgbm9kZS5jbGFzcyxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUud2lkdGggOiBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUuaGVpZ2h0IDogYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHggPSBub2RlLnBvc2l0aW9uZWQgPyAtdG90YWxXaWR0aCAvIDIgOiAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZztcbiAgY29uc3QgeSA9IG5vZGUucG9zaXRpb25lZCA/IC10b3RhbEhlaWdodCAvIDIgOiAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmc7XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgdG90YWxXaWR0aCkuYXR0cihcImhlaWdodFwiLCB0b3RhbEhlaWdodCk7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdFwiKTtcbnZhciBjb21wb3NpdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcgfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIFwibm9kZSBcIiArIG5vZGUuY2xhc3NlcyxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUud2lkdGggOiBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUuaGVpZ2h0IDogYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHggPSBub2RlLnBvc2l0aW9uZWQgPyAtdG90YWxXaWR0aCAvIDIgOiAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZztcbiAgY29uc3QgeSA9IG5vZGUucG9zaXRpb25lZCA/IC10b3RhbEhlaWdodCAvIDIgOiAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmc7XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGNsdXN0ZXIgY29tcG9zaXRlIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgdG90YWxXaWR0aCkuYXR0cihcImhlaWdodFwiLCB0b3RhbEhlaWdodCk7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiY29tcG9zaXRlXCIpO1xudmFyIGxhYmVsUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIFwibGFiZWxcIiwgdHJ1ZSk7XG4gIGxvZy50cmFjZShcIkNsYXNzZXMgPSBcIiwgbm9kZS5jbGFzcyk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IDA7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gMDtcbiAgcmVjdDIuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICBzaGFwZVN2Zy5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbCBlZGdlTGFiZWxcIik7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwibGFiZWxSZWN0XCIpO1xuZnVuY3Rpb24gYXBwbHlOb2RlUHJvcGVydHlCb3JkZXJzKHJlY3QyLCBib3JkZXJzLCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCkge1xuICBjb25zdCBzdHJva2VEYXNoQXJyYXkgPSBbXTtcbiAgY29uc3QgYWRkQm9yZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobGVuZ3RoKSA9PiB7XG4gICAgc3Ryb2tlRGFzaEFycmF5LnB1c2gobGVuZ3RoLCAwKTtcbiAgfSwgXCJhZGRCb3JkZXJcIik7XG4gIGNvbnN0IHNraXBCb3JkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChsZW5ndGgpID0+IHtcbiAgICBzdHJva2VEYXNoQXJyYXkucHVzaCgwLCBsZW5ndGgpO1xuICB9LCBcInNraXBCb3JkZXJcIik7XG4gIGlmIChib3JkZXJzLmluY2x1ZGVzKFwidFwiKSkge1xuICAgIGxvZy5kZWJ1ZyhcImFkZCB0b3AgYm9yZGVyXCIpO1xuICAgIGFkZEJvcmRlcih0b3RhbFdpZHRoKTtcbiAgfSBlbHNlIHtcbiAgICBza2lwQm9yZGVyKHRvdGFsV2lkdGgpO1xuICB9XG4gIGlmIChib3JkZXJzLmluY2x1ZGVzKFwiclwiKSkge1xuICAgIGxvZy5kZWJ1ZyhcImFkZCByaWdodCBib3JkZXJcIik7XG4gICAgYWRkQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICBza2lwQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfVxuICBpZiAoYm9yZGVycy5pbmNsdWRlcyhcImJcIikpIHtcbiAgICBsb2cuZGVidWcoXCJhZGQgYm90dG9tIGJvcmRlclwiKTtcbiAgICBhZGRCb3JkZXIodG90YWxXaWR0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2tpcEJvcmRlcih0b3RhbFdpZHRoKTtcbiAgfVxuICBpZiAoYm9yZGVycy5pbmNsdWRlcyhcImxcIikpIHtcbiAgICBsb2cuZGVidWcoXCJhZGQgbGVmdCBib3JkZXJcIik7XG4gICAgYWRkQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICBza2lwQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfVxuICByZWN0Mi5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBzdHJva2VEYXNoQXJyYXkuam9pbihcIiBcIikpO1xufVxuX19uYW1lKGFwcGx5Tm9kZVByb3BlcnR5Qm9yZGVycywgXCJhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnNcIik7XG52YXIgcmVjdFdpdGhUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBsZXQgY2xhc3NlcztcbiAgaWYgKCFub2RlLmNsYXNzZXMpIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIFwiICsgbm9kZS5jbGFzc2VzO1xuICB9XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzZXMpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGlubmVyTGluZSA9IHNoYXBlU3ZnLmluc2VydChcImxpbmVcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgY29uc3QgdGV4dDIgPSBub2RlLmxhYmVsVGV4dC5mbGF0ID8gbm9kZS5sYWJlbFRleHQuZmxhdCgpIDogbm9kZS5sYWJlbFRleHQ7XG4gIGxldCB0aXRsZSA9IFwiXCI7XG4gIGlmICh0eXBlb2YgdGV4dDIgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0aXRsZSA9IHRleHQyWzBdO1xuICB9IGVsc2Uge1xuICAgIHRpdGxlID0gdGV4dDI7XG4gIH1cbiAgbG9nLmluZm8oXCJMYWJlbCB0ZXh0IGFiYzc5XCIsIHRpdGxlLCB0ZXh0MiwgdHlwZW9mIHRleHQyID09PSBcIm9iamVjdFwiKTtcbiAgY29uc3QgdGV4dCA9IGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChjcmVhdGVMYWJlbF9kZWZhdWx0KHRpdGxlLCBub2RlLmxhYmVsU3R5bGUsIHRydWUsIHRydWUpKTtcbiAgbGV0IGJib3ggPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QzKHRleHQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGxvZy5pbmZvKFwiVGV4dCAyXCIsIHRleHQyKTtcbiAgY29uc3QgdGV4dFJvd3MgPSB0ZXh0Mi5zbGljZSgxLCB0ZXh0Mi5sZW5ndGgpO1xuICBsZXQgdGl0bGVCb3ggPSB0ZXh0LmdldEJCb3goKTtcbiAgY29uc3QgZGVzY3IgPSBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQoXG4gICAgY3JlYXRlTGFiZWxfZGVmYXVsdCh0ZXh0Um93cy5qb2luID8gdGV4dFJvd3Muam9pbihcIjxici8+XCIpIDogdGV4dFJvd3MsIG5vZGUubGFiZWxTdHlsZSwgdHJ1ZSwgdHJ1ZSlcbiAgKTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IGRlc2NyLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhkZXNjcik7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBzZWxlY3QzKGRlc2NyKS5hdHRyKFxuICAgIFwidHJhbnNmb3JtXCIsXG4gICAgXCJ0cmFuc2xhdGUoIFwiICsgLy8gKHRpdGxlQm94LndpZHRoIC0gYmJveC53aWR0aCkgLyAyICtcbiAgICAoYmJveC53aWR0aCA+IHRpdGxlQm94LndpZHRoID8gMCA6ICh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgXCIgKyAodGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcgKyA1KSArIFwiKVwiXG4gICk7XG4gIHNlbGVjdDModGV4dCkuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKCBcIiArIC8vICh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMiArXG4gICAgKGJib3gud2lkdGggPCB0aXRsZUJveC53aWR0aCA/IDAgOiAtKHRpdGxlQm94LndpZHRoIC0gYmJveC53aWR0aCkgLyAyKSArIFwiLCAwKVwiXG4gICk7XG4gIGJib3ggPSBsYWJlbC5ub2RlKCkuZ2V0QkJveCgpO1xuICBsYWJlbC5hdHRyKFxuICAgIFwidHJhbnNmb3JtXCIsXG4gICAgXCJ0cmFuc2xhdGUoXCIgKyAtYmJveC53aWR0aCAvIDIgKyBcIiwgXCIgKyAoLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgMykgKyBcIilcIlxuICApO1xuICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJvdXRlciB0aXRsZS1zdGF0ZVwiKS5hdHRyKFwieFwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIGlubmVyTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIngyXCIsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcpLmF0dHIoXCJ5MVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyB0aXRsZUJveC5oZWlnaHQgKyBoYWxmUGFkZGluZykuYXR0cihcInkyXCIsIC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIHRpdGxlQm94LmhlaWdodCArIGhhbGZQYWRkaW5nKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdFdpdGhUaXRsZVwiKTtcbnZhciBzdGFkaXVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIGggLyA0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJyeFwiLCBoIC8gMikuYXR0cihcInJ5XCIsIGggLyAyKS5hdHRyKFwieFwiLCAtdyAvIDIpLmF0dHIoXCJ5XCIsIC1oIC8gMikuYXR0cihcIndpZHRoXCIsIHcpLmF0dHIoXCJoZWlnaHRcIiwgaCk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YWRpdW1cIik7XG52YXIgY2lyY2xlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IGNpcmNsZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNpcmNsZTIuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJyeFwiLCBub2RlLnJ4KS5hdHRyKFwicnlcIiwgbm9kZS5yeSkuYXR0cihcInJcIiwgYmJveC53aWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmcpO1xuICBsb2cuaW5mbyhcIkNpcmNsZSBtYWluXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgbG9nLmluZm8oXCJDaXJjbGUgaW50ZXJzZWN0XCIsIG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcsIHBvaW50KTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJjaXJjbGVcIik7XG52YXIgZG91YmxlY2lyY2xlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IGdhcCA9IDU7XG4gIGNvbnN0IGNpcmNsZUdyb3VwID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3Qgb3V0ZXJDaXJjbGUgPSBjaXJjbGVHcm91cC5pbnNlcnQoXCJjaXJjbGVcIik7XG4gIGNvbnN0IGlubmVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIpO1xuICBjaXJjbGVHcm91cC5hdHRyKFwiY2xhc3NcIiwgbm9kZS5jbGFzcyk7XG4gIG91dGVyQ2lyY2xlLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJyXCIsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcgKyBnYXApLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nICsgZ2FwICogMikuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyArIGdhcCAqIDIpO1xuICBpbm5lckNpcmNsZS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwiclwiLCBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIGxvZy5pbmZvKFwiRG91YmxlQ2lyY2xlIG1haW5cIik7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgb3V0ZXJDaXJjbGUpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgbG9nLmluZm8oXCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0XCIsIG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcgKyBnYXAsIHBvaW50KTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcgKyBnYXAsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJkb3VibGVjaXJjbGVcIik7XG52YXIgc3Vicm91dGluZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogMCB9LFxuICAgIHsgeDogLTgsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyA4LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgOCwgeTogLWggfSxcbiAgICB7IHg6IC04LCB5OiAtaCB9LFxuICAgIHsgeDogLTgsIHk6IDAgfVxuICBdO1xuICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN1YnJvdXRpbmVcIik7XG52YXIgc3RhcnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGNpcmNsZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNpcmNsZTIuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtc3RhcnRcIikuYXR0cihcInJcIiwgNykuYXR0cihcIndpZHRoXCIsIDE0KS5hdHRyKFwiaGVpZ2h0XCIsIDE0KTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBjaXJjbGUyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgNywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YXJ0XCIpO1xudmFyIGZvcmtKb2luID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlLCBkaXIpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGxldCB3aWR0aCA9IDcwO1xuICBsZXQgaGVpZ2h0ID0gMTA7XG4gIGlmIChkaXIgPT09IFwiTFJcIikge1xuICAgIHdpZHRoID0gMTA7XG4gICAgaGVpZ2h0ID0gNzA7XG4gIH1cbiAgY29uc3Qgc2hhcGUgPSBzaGFwZVN2Zy5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIC0xICogd2lkdGggLyAyKS5hdHRyKFwieVwiLCAtMSAqIGhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJjbGFzc1wiLCBcImZvcmstam9pblwiKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBzaGFwZSk7XG4gIG5vZGUuaGVpZ2h0ID0gbm9kZS5oZWlnaHQgKyBub2RlLnBhZGRpbmcgLyAyO1xuICBub2RlLndpZHRoID0gbm9kZS53aWR0aCArIG5vZGUucGFkZGluZyAvIDI7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiZm9ya0pvaW5cIik7XG52YXIgZW5kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZSBkZWZhdWx0XCIpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCBpbm5lckNpcmNsZSA9IHNoYXBlU3ZnLmluc2VydChcImNpcmNsZVwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgY2lyY2xlMiA9IHNoYXBlU3ZnLmluc2VydChcImNpcmNsZVwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY2lyY2xlMi5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICBpbm5lckNpcmNsZS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1lbmRcIikuYXR0cihcInJcIiwgNSkuYXR0cihcIndpZHRoXCIsIDEwKS5hdHRyKFwiaGVpZ2h0XCIsIDEwKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBjaXJjbGUyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgNywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImVuZFwiKTtcbnZhciBjbGFzc19ib3ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBjb25zdCByb3dQYWRkaW5nID0gNDtcbiAgY29uc3QgbGluZUhlaWdodCA9IDg7XG4gIGxldCBjbGFzc2VzO1xuICBpZiAoIW5vZGUuY2xhc3Nlcykge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgZGVmYXVsdFwiO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgXCIgKyBub2RlLmNsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG9wTGluZSA9IHNoYXBlU3ZnLmluc2VydChcImxpbmVcIik7XG4gIGNvbnN0IGJvdHRvbUxpbmUgPSBzaGFwZVN2Zy5pbnNlcnQoXCJsaW5lXCIpO1xuICBsZXQgbWF4V2lkdGggPSAwO1xuICBsZXQgbWF4SGVpZ2h0ID0gcm93UGFkZGluZztcbiAgY29uc3QgbGFiZWxDb250YWluZXIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsZXQgdmVydGljYWxQb3MgPSAwO1xuICBjb25zdCBoYXNJbnRlcmZhY2UgPSBub2RlLmNsYXNzRGF0YS5hbm5vdGF0aW9ucz8uWzBdO1xuICBjb25zdCBpbnRlcmZhY2VMYWJlbFRleHQgPSBub2RlLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSA/IFwiXFx4QUJcIiArIG5vZGUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdICsgXCJcXHhCQlwiIDogXCJcIjtcbiAgY29uc3QgaW50ZXJmYWNlTGFiZWwgPSBsYWJlbENvbnRhaW5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoY3JlYXRlTGFiZWxfZGVmYXVsdChpbnRlcmZhY2VMYWJlbFRleHQsIG5vZGUubGFiZWxTdHlsZSwgdHJ1ZSwgdHJ1ZSkpO1xuICBsZXQgaW50ZXJmYWNlQkJveCA9IGludGVyZmFjZUxhYmVsLmdldEJCb3goKTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IGludGVyZmFjZUxhYmVsLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhpbnRlcmZhY2VMYWJlbCk7XG4gICAgaW50ZXJmYWNlQkJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgaW50ZXJmYWNlQkJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBpbnRlcmZhY2VCQm94LmhlaWdodCk7XG4gIH1cbiAgaWYgKG5vZGUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKSB7XG4gICAgbWF4SGVpZ2h0ICs9IGludGVyZmFjZUJCb3guaGVpZ2h0ICsgcm93UGFkZGluZztcbiAgICBtYXhXaWR0aCArPSBpbnRlcmZhY2VCQm94LndpZHRoO1xuICB9XG4gIGxldCBjbGFzc1RpdGxlU3RyaW5nID0gbm9kZS5jbGFzc0RhdGEubGFiZWw7XG4gIGlmIChub2RlLmNsYXNzRGF0YS50eXBlICE9PSB2b2lkIDAgJiYgbm9kZS5jbGFzc0RhdGEudHlwZSAhPT0gXCJcIikge1xuICAgIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykge1xuICAgICAgY2xhc3NUaXRsZVN0cmluZyArPSBcIiZsdDtcIiArIG5vZGUuY2xhc3NEYXRhLnR5cGUgKyBcIiZndDtcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NUaXRsZVN0cmluZyArPSBcIjxcIiArIG5vZGUuY2xhc3NEYXRhLnR5cGUgKyBcIj5cIjtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2xhc3NUaXRsZUxhYmVsID0gbGFiZWxDb250YWluZXIubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsX2RlZmF1bHQoY2xhc3NUaXRsZVN0cmluZywgbm9kZS5sYWJlbFN0eWxlLCB0cnVlLCB0cnVlKSk7XG4gIHNlbGVjdDMoY2xhc3NUaXRsZUxhYmVsKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc1RpdGxlXCIpO1xuICBsZXQgY2xhc3NUaXRsZUJCb3ggPSBjbGFzc1RpdGxlTGFiZWwuZ2V0QkJveCgpO1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gY2xhc3NUaXRsZUxhYmVsLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhjbGFzc1RpdGxlTGFiZWwpO1xuICAgIGNsYXNzVGl0bGVCQm94ID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBjbGFzc1RpdGxlQkJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBjbGFzc1RpdGxlQkJveC5oZWlnaHQpO1xuICB9XG4gIG1heEhlaWdodCArPSBjbGFzc1RpdGxlQkJveC5oZWlnaHQgKyByb3dQYWRkaW5nO1xuICBpZiAoY2xhc3NUaXRsZUJCb3gud2lkdGggPiBtYXhXaWR0aCkge1xuICAgIG1heFdpZHRoID0gY2xhc3NUaXRsZUJCb3gud2lkdGg7XG4gIH1cbiAgY29uc3QgY2xhc3NBdHRyaWJ1dGVzID0gW107XG4gIG5vZGUuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgobWVtYmVyKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkSW5mbyA9IG1lbWJlci5nZXREaXNwbGF5RGV0YWlscygpO1xuICAgIGxldCBwYXJzZWRUZXh0ID0gcGFyc2VkSW5mby5kaXNwbGF5VGV4dDtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpIHtcbiAgICAgIHBhcnNlZFRleHQgPSBwYXJzZWRUZXh0LnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpO1xuICAgIH1cbiAgICBjb25zdCBsYmwgPSBsYWJlbENvbnRhaW5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoXG4gICAgICBjcmVhdGVMYWJlbF9kZWZhdWx0KFxuICAgICAgICBwYXJzZWRUZXh0LFxuICAgICAgICBwYXJzZWRJbmZvLmNzc1N0eWxlID8gcGFyc2VkSW5mby5jc3NTdHlsZSA6IG5vZGUubGFiZWxTdHlsZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IGJib3ggPSBsYmwuZ2V0QkJveCgpO1xuICAgIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICAgIGNvbnN0IGRpdiA9IGxibC5jaGlsZHJlblswXTtcbiAgICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhsYmwpO1xuICAgICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoYmJveC53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IGJib3gud2lkdGg7XG4gICAgfVxuICAgIG1heEhlaWdodCArPSBiYm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gICAgY2xhc3NBdHRyaWJ1dGVzLnB1c2gobGJsKTtcbiAgfSk7XG4gIG1heEhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICBjb25zdCBjbGFzc01ldGhvZHMgPSBbXTtcbiAgbm9kZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChtZW1iZXIpID0+IHtcbiAgICBjb25zdCBwYXJzZWRJbmZvID0gbWVtYmVyLmdldERpc3BsYXlEZXRhaWxzKCk7XG4gICAgbGV0IGRpc3BsYXlUZXh0ID0gcGFyc2VkSW5mby5kaXNwbGF5VGV4dDtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpIHtcbiAgICAgIGRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XG4gICAgfVxuICAgIGNvbnN0IGxibCA9IGxhYmVsQ29udGFpbmVyLm5vZGUoKS5hcHBlbmRDaGlsZChcbiAgICAgIGNyZWF0ZUxhYmVsX2RlZmF1bHQoXG4gICAgICAgIGRpc3BsYXlUZXh0LFxuICAgICAgICBwYXJzZWRJbmZvLmNzc1N0eWxlID8gcGFyc2VkSW5mby5jc3NTdHlsZSA6IG5vZGUubGFiZWxTdHlsZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IGJib3ggPSBsYmwuZ2V0QkJveCgpO1xuICAgIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICAgIGNvbnN0IGRpdiA9IGxibC5jaGlsZHJlblswXTtcbiAgICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhsYmwpO1xuICAgICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoYmJveC53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IGJib3gud2lkdGg7XG4gICAgfVxuICAgIG1heEhlaWdodCArPSBiYm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gICAgY2xhc3NNZXRob2RzLnB1c2gobGJsKTtcbiAgfSk7XG4gIG1heEhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICBpZiAoaGFzSW50ZXJmYWNlKSB7XG4gICAgbGV0IGRpZmZYMiA9IChtYXhXaWR0aCAtIGludGVyZmFjZUJCb3gud2lkdGgpIC8gMjtcbiAgICBzZWxlY3QzKGludGVyZmFjZUxhYmVsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArICgtMSAqIG1heFdpZHRoIC8gMiArIGRpZmZYMikgKyBcIiwgXCIgKyAtMSAqIG1heEhlaWdodCAvIDIgKyBcIilcIlxuICAgICk7XG4gICAgdmVydGljYWxQb3MgPSBpbnRlcmZhY2VCQm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gIH1cbiAgbGV0IGRpZmZYID0gKG1heFdpZHRoIC0gY2xhc3NUaXRsZUJCb3gud2lkdGgpIC8gMjtcbiAgc2VsZWN0MyhjbGFzc1RpdGxlTGFiZWwpLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZSggXCIgKyAoLTEgKiBtYXhXaWR0aCAvIDIgKyBkaWZmWCkgKyBcIiwgXCIgKyAoLTEgKiBtYXhIZWlnaHQgLyAyICsgdmVydGljYWxQb3MpICsgXCIpXCJcbiAgKTtcbiAgdmVydGljYWxQb3MgKz0gY2xhc3NUaXRsZUJCb3guaGVpZ2h0ICsgcm93UGFkZGluZztcbiAgdG9wTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtbWF4V2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ4MlwiLCBtYXhXaWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcInkxXCIsIC1tYXhIZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBsaW5lSGVpZ2h0ICsgdmVydGljYWxQb3MpLmF0dHIoXCJ5MlwiLCAtbWF4SGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgbGluZUhlaWdodCArIHZlcnRpY2FsUG9zKTtcbiAgdmVydGljYWxQb3MgKz0gbGluZUhlaWdodDtcbiAgY2xhc3NBdHRyaWJ1dGVzLmZvckVhY2goKGxibCkgPT4ge1xuICAgIHNlbGVjdDMobGJsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArIC1tYXhXaWR0aCAvIDIgKyBcIiwgXCIgKyAoLTEgKiBtYXhIZWlnaHQgLyAyICsgdmVydGljYWxQb3MgKyBsaW5lSGVpZ2h0IC8gMikgKyBcIilcIlxuICAgICk7XG4gICAgY29uc3QgbWVtYmVyQkJveCA9IGxibD8uZ2V0QkJveCgpO1xuICAgIHZlcnRpY2FsUG9zICs9IChtZW1iZXJCQm94Py5oZWlnaHQgPz8gMCkgKyByb3dQYWRkaW5nO1xuICB9KTtcbiAgdmVydGljYWxQb3MgKz0gbGluZUhlaWdodDtcbiAgYm90dG9tTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtbWF4V2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ4MlwiLCBtYXhXaWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcInkxXCIsIC1tYXhIZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBsaW5lSGVpZ2h0ICsgdmVydGljYWxQb3MpLmF0dHIoXCJ5MlwiLCAtbWF4SGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgbGluZUhlaWdodCArIHZlcnRpY2FsUG9zKTtcbiAgdmVydGljYWxQb3MgKz0gbGluZUhlaWdodDtcbiAgY2xhc3NNZXRob2RzLmZvckVhY2goKGxibCkgPT4ge1xuICAgIHNlbGVjdDMobGJsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArIC1tYXhXaWR0aCAvIDIgKyBcIiwgXCIgKyAoLTEgKiBtYXhIZWlnaHQgLyAyICsgdmVydGljYWxQb3MpICsgXCIpXCJcbiAgICApO1xuICAgIGNvbnN0IG1lbWJlckJCb3ggPSBsYmw/LmdldEJCb3goKTtcbiAgICB2ZXJ0aWNhbFBvcyArPSAobWVtYmVyQkJveD8uaGVpZ2h0ID8/IDApICsgcm93UGFkZGluZztcbiAgfSk7XG4gIHJlY3QyLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwiY2xhc3NcIiwgXCJvdXRlciB0aXRsZS1zdGF0ZVwiKS5hdHRyKFwieFwiLCAtbWF4V2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIC0obWF4SGVpZ2h0IC8gMikgLSBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIG1heFdpZHRoICsgbm9kZS5wYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIG1heEhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImNsYXNzX2JveFwiKTtcbnZhciBzaGFwZXMgPSB7XG4gIHJob21idXM6IHF1ZXN0aW9uLFxuICBjb21wb3NpdGUsXG4gIHF1ZXN0aW9uLFxuICByZWN0LFxuICBsYWJlbFJlY3QsXG4gIHJlY3RXaXRoVGl0bGUsXG4gIGNob2ljZSxcbiAgY2lyY2xlLFxuICBkb3VibGVjaXJjbGUsXG4gIHN0YWRpdW0sXG4gIGhleGFnb24sXG4gIGJsb2NrX2Fycm93LFxuICByZWN0X2xlZnRfaW52X2Fycm93LFxuICBsZWFuX3JpZ2h0LFxuICBsZWFuX2xlZnQsXG4gIHRyYXBlem9pZCxcbiAgaW52X3RyYXBlem9pZCxcbiAgcmVjdF9yaWdodF9pbnZfYXJyb3csXG4gIGN5bGluZGVyLFxuICBzdGFydCxcbiAgZW5kLFxuICBub3RlOiBub3RlX2RlZmF1bHQsXG4gIHN1YnJvdXRpbmUsXG4gIGZvcms6IGZvcmtKb2luLFxuICBqb2luOiBmb3JrSm9pbixcbiAgY2xhc3NfYm94XG59O1xudmFyIG5vZGVFbGVtcyA9IHt9O1xudmFyIGluc2VydE5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChlbGVtLCBub2RlLCBkaXIpID0+IHtcbiAgbGV0IG5ld0VsO1xuICBsZXQgZWw7XG4gIGlmIChub2RlLmxpbmspIHtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIGlmIChnZXRDb25maWcoKS5zZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgICAgdGFyZ2V0ID0gXCJfdG9wXCI7XG4gICAgfSBlbHNlIGlmIChub2RlLmxpbmtUYXJnZXQpIHtcbiAgICAgIHRhcmdldCA9IG5vZGUubGlua1RhcmdldCB8fCBcIl9ibGFua1wiO1xuICAgIH1cbiAgICBuZXdFbCA9IGVsZW0uaW5zZXJ0KFwic3ZnOmFcIikuYXR0cihcInhsaW5rOmhyZWZcIiwgbm9kZS5saW5rKS5hdHRyKFwidGFyZ2V0XCIsIHRhcmdldCk7XG4gICAgZWwgPSBhd2FpdCBzaGFwZXNbbm9kZS5zaGFwZV0obmV3RWwsIG5vZGUsIGRpcik7XG4gIH0gZWxzZSB7XG4gICAgZWwgPSBhd2FpdCBzaGFwZXNbbm9kZS5zaGFwZV0oZWxlbSwgbm9kZSwgZGlyKTtcbiAgICBuZXdFbCA9IGVsO1xuICB9XG4gIGlmIChub2RlLnRvb2x0aXApIHtcbiAgICBlbC5hdHRyKFwidGl0bGVcIiwgbm9kZS50b29sdGlwKTtcbiAgfVxuICBpZiAobm9kZS5jbGFzcykge1xuICAgIGVsLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdCBcIiArIG5vZGUuY2xhc3MpO1xuICB9XG4gIG5vZGVFbGVtc1tub2RlLmlkXSA9IG5ld0VsO1xuICBpZiAobm9kZS5oYXZlQ2FsbGJhY2spIHtcbiAgICBub2RlRWxlbXNbbm9kZS5pZF0uYXR0cihcImNsYXNzXCIsIG5vZGVFbGVtc1tub2RlLmlkXS5hdHRyKFwiY2xhc3NcIikgKyBcIiBjbGlja2FibGVcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0VsO1xufSwgXCJpbnNlcnROb2RlXCIpO1xudmFyIHNldE5vZGVFbGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgbm9kZSkgPT4ge1xuICBub2RlRWxlbXNbbm9kZS5pZF0gPSBlbGVtO1xufSwgXCJzZXROb2RlRWxlbVwiKTtcbnZhciBjbGVhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBub2RlRWxlbXMgPSB7fTtcbn0sIFwiY2xlYXJcIik7XG52YXIgcG9zaXRpb25Ob2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSkgPT4ge1xuICBjb25zdCBlbCA9IG5vZGVFbGVtc1tub2RlLmlkXTtcbiAgbG9nLnRyYWNlKFxuICAgIFwiVHJhbnNmb3JtaW5nIG5vZGVcIixcbiAgICBub2RlLmRpZmYsXG4gICAgbm9kZSxcbiAgICBcInRyYW5zbGF0ZShcIiArIChub2RlLnggLSBub2RlLndpZHRoIC8gMiAtIDUpICsgXCIsIFwiICsgbm9kZS53aWR0aCAvIDIgKyBcIilcIlxuICApO1xuICBjb25zdCBwYWRkaW5nID0gODtcbiAgY29uc3QgZGlmZiA9IG5vZGUuZGlmZiB8fCAwO1xuICBpZiAobm9kZS5jbHVzdGVyTm9kZSkge1xuICAgIGVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAobm9kZS54ICsgZGlmZiAtIG5vZGUud2lkdGggLyAyKSArIFwiLCBcIiArIChub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBwYWRkaW5nKSArIFwiKVwiXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbm9kZS54ICsgXCIsIFwiICsgbm9kZS55ICsgXCIpXCIpO1xuICB9XG4gIHJldHVybiBkaWZmO1xufSwgXCJwb3NpdGlvbk5vZGVcIik7XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZUxhYmVsX2RlZmF1bHQsXG4gIGludGVyc2VjdF9yZWN0X2RlZmF1bHQsXG4gIHVwZGF0ZU5vZGVCb3VuZHMsXG4gIGluc2VydE5vZGUsXG4gIHNldE5vZGVFbGVtLFxuICBjbGVhcixcbiAgcG9zaXRpb25Ob2RlXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBnZXREaWFncmFtRWxlbWVudCxcbiAgc2V0dXBWaWV3UG9ydEZvclNWR1xufSBmcm9tIFwiLi9jaHVuay1XWkJJQVRTSy5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstR1dITURESEIubWpzXCI7XG5pbXBvcnQge1xuICBnZXRSZWdpc3RlcmVkTGF5b3V0QWxnb3JpdGhtLFxuICByZW5kZXJcbn0gZnJvbSBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVJPS1lVVkNVLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICBnZXRFZGdlSWQsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb21tb25fZGVmYXVsdCxcbiAgZGVmYXVsdENvbmZpZzIgYXMgZGVmYXVsdENvbmZpZyxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBsb2csXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0Q29uZmlnMiBhcyBzZXRDb25maWcsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9mbG93RGIudHNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIE1FUk1BSURfRE9NX0lEX1BSRUZJWCA9IFwiZmxvd2NoYXJ0LVwiO1xudmFyIHZlcnRleENvdW50ZXIgPSAwO1xudmFyIGNvbmZpZyA9IGdldENvbmZpZygpO1xudmFyIHZlcnRpY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBlZGdlcyA9IFtdO1xudmFyIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHN1YkdyYXBocyA9IFtdO1xudmFyIHN1YkdyYXBoTG9va3VwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciB0b29sdGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgc3ViQ291bnQgPSAwO1xudmFyIGZpcnN0R3JhcGhGbGFnID0gdHJ1ZTtcbnZhciBkaXJlY3Rpb247XG52YXIgdmVyc2lvbjtcbnZhciBmdW5zID0gW107XG52YXIgc2FuaXRpemVUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodHh0LCBjb25maWcpLCBcInNhbml0aXplVGV4dFwiKTtcbnZhciBsb29rVXBEb21JZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgZm9yIChjb25zdCB2ZXJ0ZXggb2YgdmVydGljZXMudmFsdWVzKCkpIHtcbiAgICBpZiAodmVydGV4LmlkID09PSBpZCkge1xuICAgICAgcmV0dXJuIHZlcnRleC5kb21JZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlkO1xufSwgXCJsb29rVXBEb21JZFwiKTtcbnZhciBhZGRWZXJ0ZXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCB0ZXh0T2JqLCB0eXBlLCBzdHlsZSwgY2xhc3NlczIsIGRpciwgcHJvcHMgPSB7fSkge1xuICBpZiAoIWlkIHx8IGlkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHR4dDtcbiAgbGV0IHZlcnRleCA9IHZlcnRpY2VzLmdldChpZCk7XG4gIGlmICh2ZXJ0ZXggPT09IHZvaWQgMCkge1xuICAgIHZlcnRleCA9IHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWxUeXBlOiBcInRleHRcIixcbiAgICAgIGRvbUlkOiBNRVJNQUlEX0RPTV9JRF9QUkVGSVggKyBpZCArIFwiLVwiICsgdmVydGV4Q291bnRlcixcbiAgICAgIHN0eWxlczogW10sXG4gICAgICBjbGFzc2VzOiBbXVxuICAgIH07XG4gICAgdmVydGljZXMuc2V0KGlkLCB2ZXJ0ZXgpO1xuICB9XG4gIHZlcnRleENvdW50ZXIrKztcbiAgaWYgKHRleHRPYmogIT09IHZvaWQgMCkge1xuICAgIGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIHR4dCA9IHNhbml0aXplVGV4dCh0ZXh0T2JqLnRleHQudHJpbSgpKTtcbiAgICB2ZXJ0ZXgubGFiZWxUeXBlID0gdGV4dE9iai50eXBlO1xuICAgIGlmICh0eHQuc3RhcnRzV2l0aCgnXCInKSAmJiB0eHQuZW5kc1dpdGgoJ1wiJykpIHtcbiAgICAgIHR4dCA9IHR4dC5zdWJzdHJpbmcoMSwgdHh0Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICB2ZXJ0ZXgudGV4dCA9IHR4dDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodmVydGV4LnRleHQgPT09IHZvaWQgMCkge1xuICAgICAgdmVydGV4LnRleHQgPSBpZDtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGUgIT09IHZvaWQgMCkge1xuICAgIHZlcnRleC50eXBlID0gdHlwZTtcbiAgfVxuICBpZiAoc3R5bGUgIT09IHZvaWQgMCAmJiBzdHlsZSAhPT0gbnVsbCkge1xuICAgIHN0eWxlLmZvckVhY2goZnVuY3Rpb24ocykge1xuICAgICAgdmVydGV4LnN0eWxlcy5wdXNoKHMpO1xuICAgIH0pO1xuICB9XG4gIGlmIChjbGFzc2VzMiAhPT0gdm9pZCAwICYmIGNsYXNzZXMyICE9PSBudWxsKSB7XG4gICAgY2xhc3NlczIuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgICB2ZXJ0ZXguY2xhc3Nlcy5wdXNoKHMpO1xuICAgIH0pO1xuICB9XG4gIGlmIChkaXIgIT09IHZvaWQgMCkge1xuICAgIHZlcnRleC5kaXIgPSBkaXI7XG4gIH1cbiAgaWYgKHZlcnRleC5wcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgdmVydGV4LnByb3BzID0gcHJvcHM7XG4gIH0gZWxzZSBpZiAocHJvcHMgIT09IHZvaWQgMCkge1xuICAgIE9iamVjdC5hc3NpZ24odmVydGV4LnByb3BzLCBwcm9wcyk7XG4gIH1cbn0sIFwiYWRkVmVydGV4XCIpO1xudmFyIGFkZFNpbmdsZUxpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF9zdGFydCwgX2VuZCwgdHlwZSkge1xuICBjb25zdCBzdGFydCA9IF9zdGFydDtcbiAgY29uc3QgZW5kID0gX2VuZDtcbiAgY29uc3QgZWRnZSA9IHsgc3RhcnQsIGVuZCwgdHlwZTogdm9pZCAwLCB0ZXh0OiBcIlwiLCBsYWJlbFR5cGU6IFwidGV4dFwiIH07XG4gIGxvZy5pbmZvKFwiYWJjNzggR290IGVkZ2UuLi5cIiwgZWRnZSk7XG4gIGNvbnN0IGxpbmtUZXh0T2JqID0gdHlwZS50ZXh0O1xuICBpZiAobGlua1RleHRPYmogIT09IHZvaWQgMCkge1xuICAgIGVkZ2UudGV4dCA9IHNhbml0aXplVGV4dChsaW5rVGV4dE9iai50ZXh0LnRyaW0oKSk7XG4gICAgaWYgKGVkZ2UudGV4dC5zdGFydHNXaXRoKCdcIicpICYmIGVkZ2UudGV4dC5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgZWRnZS50ZXh0ID0gZWRnZS50ZXh0LnN1YnN0cmluZygxLCBlZGdlLnRleHQubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGVkZ2UubGFiZWxUeXBlID0gbGlua1RleHRPYmoudHlwZTtcbiAgfVxuICBpZiAodHlwZSAhPT0gdm9pZCAwKSB7XG4gICAgZWRnZS50eXBlID0gdHlwZS50eXBlO1xuICAgIGVkZ2Uuc3Ryb2tlID0gdHlwZS5zdHJva2U7XG4gICAgZWRnZS5sZW5ndGggPSB0eXBlLmxlbmd0aCA+IDEwID8gMTAgOiB0eXBlLmxlbmd0aDtcbiAgfVxuICBpZiAoZWRnZXMubGVuZ3RoIDwgKGNvbmZpZy5tYXhFZGdlcyA/PyA1MDApKSB7XG4gICAgbG9nLmluZm8oXCJQdXNoaW5nIGVkZ2UuLi5cIik7XG4gICAgZWRnZXMucHVzaChlZGdlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRWRnZSBsaW1pdCBleGNlZWRlZC4gJHtlZGdlcy5sZW5ndGh9IGVkZ2VzIGZvdW5kLCBidXQgdGhlIGxpbWl0IGlzICR7Y29uZmlnLm1heEVkZ2VzfS5cblxuSW5pdGlhbGl6ZSBtZXJtYWlkIHdpdGggbWF4RWRnZXMgc2V0IHRvIGEgaGlnaGVyIG51bWJlciB0byBhbGxvdyBtb3JlIGVkZ2VzLlxuWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy5cbllvdSBoYXZlIHRvIGNhbGwgbWVybWFpZC5pbml0aWFsaXplLmBcbiAgICApO1xuICB9XG59LCBcImFkZFNpbmdsZUxpbmtcIik7XG52YXIgYWRkTGluayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX3N0YXJ0LCBfZW5kLCB0eXBlKSB7XG4gIGxvZy5pbmZvKFwiYWRkTGlua1wiLCBfc3RhcnQsIF9lbmQsIHR5cGUpO1xuICBmb3IgKGNvbnN0IHN0YXJ0IG9mIF9zdGFydCkge1xuICAgIGZvciAoY29uc3QgZW5kIG9mIF9lbmQpIHtcbiAgICAgIGFkZFNpbmdsZUxpbmsoc3RhcnQsIGVuZCwgdHlwZSk7XG4gICAgfVxuICB9XG59LCBcImFkZExpbmtcIik7XG52YXIgdXBkYXRlTGlua0ludGVycG9sYXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3NpdGlvbnMsIGludGVycG9sYXRlKSB7XG4gIHBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHBvcykge1xuICAgIGlmIChwb3MgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICBlZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZXNbcG9zXS5pbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlO1xuICAgIH1cbiAgfSk7XG59LCBcInVwZGF0ZUxpbmtJbnRlcnBvbGF0ZVwiKTtcbnZhciB1cGRhdGVMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3NpdGlvbnMsIHN0eWxlKSB7XG4gIHBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHBvcykge1xuICAgIGlmICh0eXBlb2YgcG9zID09PSBcIm51bWJlclwiICYmIHBvcyA+PSBlZGdlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBpbmRleCAke3Bvc30gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHtlZGdlcy5sZW5ndGggLSAxfS4gKEhlbHA6IEVuc3VyZSB0aGF0IHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGV4aXN0aW5nIGVkZ2VzLilgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocG9zID09PSBcImRlZmF1bHRcIikge1xuICAgICAgZWRnZXMuZGVmYXVsdFN0eWxlID0gc3R5bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkZ2VzW3Bvc10uc3R5bGUgPSBzdHlsZTtcbiAgICAgIGlmICgoZWRnZXNbcG9zXT8uc3R5bGU/Lmxlbmd0aCA/PyAwKSA+IDAgJiYgIWVkZ2VzW3Bvc10/LnN0eWxlPy5zb21lKChzKSA9PiBzPy5zdGFydHNXaXRoKFwiZmlsbFwiKSkpIHtcbiAgICAgICAgZWRnZXNbcG9zXT8uc3R5bGU/LnB1c2goXCJmaWxsOm5vbmVcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIFwidXBkYXRlTGlua1wiKTtcbnZhciBhZGRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBzdHlsZSkge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgY2xhc3NOb2RlID0gY2xhc3Nlcy5nZXQoaWQpO1xuICAgIGlmIChjbGFzc05vZGUgPT09IHZvaWQgMCkge1xuICAgICAgY2xhc3NOb2RlID0geyBpZCwgc3R5bGVzOiBbXSwgdGV4dFN0eWxlczogW10gfTtcbiAgICAgIGNsYXNzZXMuc2V0KGlkLCBjbGFzc05vZGUpO1xuICAgIH1cbiAgICBpZiAoc3R5bGUgIT09IHZvaWQgMCAmJiBzdHlsZSAhPT0gbnVsbCkge1xuICAgICAgc3R5bGUuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgICAgIGlmICgvY29sb3IvLmV4ZWMocykpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdHlsZSA9IHMucmVwbGFjZShcImZpbGxcIiwgXCJiZ0ZpbGxcIik7XG4gICAgICAgICAgY2xhc3NOb2RlLnRleHRTdHlsZXMucHVzaChuZXdTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NOb2RlLnN0eWxlcy5wdXNoKHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn0sIFwiYWRkQ2xhc3NcIik7XG52YXIgc2V0RGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkaXIpIHtcbiAgZGlyZWN0aW9uID0gZGlyO1xuICBpZiAoLy4qPC8uZXhlYyhkaXJlY3Rpb24pKSB7XG4gICAgZGlyZWN0aW9uID0gXCJSTFwiO1xuICB9XG4gIGlmICgvLipcXF4vLmV4ZWMoZGlyZWN0aW9uKSkge1xuICAgIGRpcmVjdGlvbiA9IFwiQlRcIjtcbiAgfVxuICBpZiAoLy4qPi8uZXhlYyhkaXJlY3Rpb24pKSB7XG4gICAgZGlyZWN0aW9uID0gXCJMUlwiO1xuICB9XG4gIGlmICgvLip2Ly5leGVjKGRpcmVjdGlvbikpIHtcbiAgICBkaXJlY3Rpb24gPSBcIlRCXCI7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbiA9PT0gXCJURFwiKSB7XG4gICAgZGlyZWN0aW9uID0gXCJUQlwiO1xuICB9XG59LCBcInNldERpcmVjdGlvblwiKTtcbnZhciBzZXRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBjbGFzc05hbWUpIHtcbiAgZm9yIChjb25zdCBpZCBvZiBpZHMuc3BsaXQoXCIsXCIpKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdmVydGljZXMuZ2V0KGlkKTtcbiAgICBpZiAodmVydGV4KSB7XG4gICAgICB2ZXJ0ZXguY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IHN1YkdyYXBoID0gc3ViR3JhcGhMb29rdXAuZ2V0KGlkKTtcbiAgICBpZiAoc3ViR3JhcGgpIHtcbiAgICAgIHN1YkdyYXBoLmNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgfVxufSwgXCJzZXRDbGFzc1wiKTtcbnZhciBzZXRUb29sdGlwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIHRvb2x0aXApIHtcbiAgaWYgKHRvb2x0aXAgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB0b29sdGlwID0gc2FuaXRpemVUZXh0KHRvb2x0aXApO1xuICBmb3IgKGNvbnN0IGlkIG9mIGlkcy5zcGxpdChcIixcIikpIHtcbiAgICB0b29sdGlwcy5zZXQodmVyc2lvbiA9PT0gXCJnZW4tMVwiID8gbG9va1VwRG9tSWQoaWQpIDogaWQsIHRvb2x0aXApO1xuICB9XG59LCBcInNldFRvb2x0aXBcIik7XG52YXIgc2V0Q2xpY2tGdW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBjb25zdCBkb21JZCA9IGxvb2tVcERvbUlkKGlkKTtcbiAgaWYgKGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWwgIT09IFwibG9vc2VcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25OYW1lID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGFyZ0xpc3QgPSBbXTtcbiAgaWYgKHR5cGVvZiBmdW5jdGlvbkFyZ3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICBhcmdMaXN0ID0gZnVuY3Rpb25BcmdzLnNwbGl0KC8sKD89KD86KD86W15cIl0qXCIpezJ9KSpbXlwiXSokKS8pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGl0ZW0gPSBhcmdMaXN0W2ldLnRyaW0oKTtcbiAgICAgIGlmIChpdGVtLnN0YXJ0c1dpdGgoJ1wiJykgJiYgaXRlbS5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgICBpdGVtID0gaXRlbS5zdWJzdHIoMSwgaXRlbS5sZW5ndGggLSAyKTtcbiAgICAgIH1cbiAgICAgIGFyZ0xpc3RbaV0gPSBpdGVtO1xuICAgIH1cbiAgfVxuICBpZiAoYXJnTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBhcmdMaXN0LnB1c2goaWQpO1xuICB9XG4gIGNvbnN0IHZlcnRleCA9IHZlcnRpY2VzLmdldChpZCk7XG4gIGlmICh2ZXJ0ZXgpIHtcbiAgICB2ZXJ0ZXguaGF2ZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICBmdW5zLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtkb21JZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtICE9PSBudWxsKSB7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1dGlsc19kZWZhdWx0LnJ1bkZ1bmMoZnVuY3Rpb25OYW1lLCAuLi5hcmdMaXN0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0sIFwic2V0Q2xpY2tGdW5cIik7XG52YXIgc2V0TGluayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBsaW5rU3RyLCB0YXJnZXQpIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdmVydGljZXMuZ2V0KGlkKTtcbiAgICBpZiAodmVydGV4ICE9PSB2b2lkIDApIHtcbiAgICAgIHZlcnRleC5saW5rID0gdXRpbHNfZGVmYXVsdC5mb3JtYXRVcmwobGlua1N0ciwgY29uZmlnKTtcbiAgICAgIHZlcnRleC5saW5rVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbiAgfSk7XG4gIHNldENsYXNzKGlkcywgXCJjbGlja2FibGVcIik7XG59LCBcInNldExpbmtcIik7XG52YXIgZ2V0VG9vbHRpcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHRvb2x0aXBzLmdldChpZCk7XG59LCBcImdldFRvb2x0aXBcIik7XG52YXIgc2V0Q2xpY2tFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBzZXRDbGlja0Z1bihpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0Q2xpY2tFdmVudFwiKTtcbnZhciBiaW5kRnVuY3Rpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtZW50KSB7XG4gIGZ1bnMuZm9yRWFjaChmdW5jdGlvbihmdW4pIHtcbiAgICBmdW4oZWxlbWVudCk7XG4gIH0pO1xufSwgXCJiaW5kRnVuY3Rpb25zXCIpO1xudmFyIGdldERpcmVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkaXJlY3Rpb24udHJpbSgpO1xufSwgXCJnZXREaXJlY3Rpb25cIik7XG52YXIgZ2V0VmVydGljZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdmVydGljZXM7XG59LCBcImdldFZlcnRpY2VzXCIpO1xudmFyIGdldEVkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGVkZ2VzO1xufSwgXCJnZXRFZGdlc1wiKTtcbnZhciBnZXRDbGFzc2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNsYXNzZXM7XG59LCBcImdldENsYXNzZXNcIik7XG52YXIgc2V0dXBUb29sVGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCkge1xuICBsZXQgdG9vbHRpcEVsZW0gPSBzZWxlY3QoXCIubWVybWFpZFRvb2x0aXBcIik7XG4gIGlmICgodG9vbHRpcEVsZW0uX2dyb3VwcyB8fCB0b29sdGlwRWxlbSlbMF1bMF0gPT09IG51bGwpIHtcbiAgICB0b29sdGlwRWxlbSA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1lcm1haWRUb29sdGlwXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgfVxuICBjb25zdCBzdmcgPSBzZWxlY3QoZWxlbWVudCkuc2VsZWN0KFwic3ZnXCIpO1xuICBjb25zdCBub2RlcyA9IHN2Zy5zZWxlY3RBbGwoXCJnLm5vZGVcIik7XG4gIG5vZGVzLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGVsID0gc2VsZWN0KHRoaXMpO1xuICAgIGNvbnN0IHRpdGxlID0gZWwuYXR0cihcInRpdGxlXCIpO1xuICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gdGhpcz8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdG9vbHRpcEVsZW0udHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoXCJvcGFjaXR5XCIsIFwiLjlcIik7XG4gICAgdG9vbHRpcEVsZW0udGV4dChlbC5hdHRyKFwidGl0bGVcIikpLnN0eWxlKFwibGVmdFwiLCB3aW5kb3cuc2Nyb2xsWCArIHJlY3QubGVmdCArIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDIgKyBcInB4XCIpLnN0eWxlKFwidG9wXCIsIHdpbmRvdy5zY3JvbGxZICsgcmVjdC5ib3R0b20gKyBcInB4XCIpO1xuICAgIHRvb2x0aXBFbGVtLmh0bWwodG9vbHRpcEVsZW0uaHRtbCgpLnJlcGxhY2UoLyZsdDticlxcLyZndDsvZywgXCI8YnIvPlwiKSk7XG4gICAgZWwuY2xhc3NlZChcImhvdmVyXCIsIHRydWUpO1xuICB9KS5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKCkge1xuICAgIHRvb2x0aXBFbGVtLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICBjb25zdCBlbCA9IHNlbGVjdCh0aGlzKTtcbiAgICBlbC5jbGFzc2VkKFwiaG92ZXJcIiwgZmFsc2UpO1xuICB9KTtcbn0sIFwic2V0dXBUb29sVGlwc1wiKTtcbmZ1bnMucHVzaChzZXR1cFRvb2xUaXBzKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHZlciA9IFwiZ2VuLTFcIikge1xuICB2ZXJ0aWNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBlZGdlcyA9IFtdO1xuICBmdW5zID0gW3NldHVwVG9vbFRpcHNdO1xuICBzdWJHcmFwaHMgPSBbXTtcbiAgc3ViR3JhcGhMb29rdXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBzdWJDb3VudCA9IDA7XG4gIHRvb2x0aXBzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgZmlyc3RHcmFwaEZsYWcgPSB0cnVlO1xuICB2ZXJzaW9uID0gdmVyO1xuICBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgc2V0R2VuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmVyKSA9PiB7XG4gIHZlcnNpb24gPSB2ZXIgfHwgXCJnZW4tMlwiO1xufSwgXCJzZXRHZW5cIik7XG52YXIgZGVmYXVsdFN0eWxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFwiZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjtcIjtcbn0sIFwiZGVmYXVsdFN0eWxlXCIpO1xudmFyIGFkZFN1YkdyYXBoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihfaWQsIGxpc3QsIF90aXRsZSkge1xuICBsZXQgaWQgPSBfaWQudGV4dC50cmltKCk7XG4gIGxldCB0aXRsZSA9IF90aXRsZS50ZXh0O1xuICBpZiAoX2lkID09PSBfdGl0bGUgJiYgL1xccy8uZXhlYyhfdGl0bGUudGV4dCkpIHtcbiAgICBpZCA9IHZvaWQgMDtcbiAgfVxuICBmdW5jdGlvbiB1bmlxKGEpIHtcbiAgICBjb25zdCBwcmltcyA9IHsgYm9vbGVhbjoge30sIG51bWJlcjoge30sIHN0cmluZzoge30gfTtcbiAgICBjb25zdCBvYmpzID0gW107XG4gICAgbGV0IGRpcjI7XG4gICAgY29uc3Qgbm9kZUxpc3QyID0gYS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBpdGVtO1xuICAgICAgaWYgKGl0ZW0uc3RtdCAmJiBpdGVtLnN0bXQgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgZGlyMiA9IGl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSBpbiBwcmltcykge1xuICAgICAgICByZXR1cm4gcHJpbXNbdHlwZV0uaGFzT3duUHJvcGVydHkoaXRlbSkgPyBmYWxzZSA6IHByaW1zW3R5cGVdW2l0ZW1dID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvYmpzLmluY2x1ZGVzKGl0ZW0pID8gZmFsc2UgOiBvYmpzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbm9kZUxpc3Q6IG5vZGVMaXN0MiwgZGlyOiBkaXIyIH07XG4gIH1cbiAgX19uYW1lKHVuaXEsIFwidW5pcVwiKTtcbiAgY29uc3QgeyBub2RlTGlzdCwgZGlyIH0gPSB1bmlxKGxpc3QuZmxhdCgpKTtcbiAgaWYgKHZlcnNpb24gPT09IFwiZ2VuLTFcIikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGVMaXN0W2ldID0gbG9va1VwRG9tSWQobm9kZUxpc3RbaV0pO1xuICAgIH1cbiAgfVxuICBpZCA9IGlkID8/IFwic3ViR3JhcGhcIiArIHN1YkNvdW50O1xuICB0aXRsZSA9IHRpdGxlIHx8IFwiXCI7XG4gIHRpdGxlID0gc2FuaXRpemVUZXh0KHRpdGxlKTtcbiAgc3ViQ291bnQgPSBzdWJDb3VudCArIDE7XG4gIGNvbnN0IHN1YkdyYXBoID0ge1xuICAgIGlkLFxuICAgIG5vZGVzOiBub2RlTGlzdCxcbiAgICB0aXRsZTogdGl0bGUudHJpbSgpLFxuICAgIGNsYXNzZXM6IFtdLFxuICAgIGRpcixcbiAgICBsYWJlbFR5cGU6IF90aXRsZS50eXBlXG4gIH07XG4gIGxvZy5pbmZvKFwiQWRkaW5nXCIsIHN1YkdyYXBoLmlkLCBzdWJHcmFwaC5ub2Rlcywgc3ViR3JhcGguZGlyKTtcbiAgc3ViR3JhcGgubm9kZXMgPSBtYWtlVW5pcShzdWJHcmFwaCwgc3ViR3JhcGhzKS5ub2RlcztcbiAgc3ViR3JhcGhzLnB1c2goc3ViR3JhcGgpO1xuICBzdWJHcmFwaExvb2t1cC5zZXQoaWQsIHN1YkdyYXBoKTtcbiAgcmV0dXJuIGlkO1xufSwgXCJhZGRTdWJHcmFwaFwiKTtcbnZhciBnZXRQb3NGb3JJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgZm9yIChjb25zdCBbaSwgc3ViR3JhcGhdIG9mIHN1YkdyYXBocy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoc3ViR3JhcGguaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufSwgXCJnZXRQb3NGb3JJZFwiKTtcbnZhciBzZWNDb3VudCA9IC0xO1xudmFyIHBvc0Nyb3NzUmVmID0gW107XG52YXIgaW5kZXhOb2RlczIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBwb3MpIHtcbiAgY29uc3Qgbm9kZXMgPSBzdWJHcmFwaHNbcG9zXS5ub2RlcztcbiAgc2VjQ291bnQgPSBzZWNDb3VudCArIDE7XG4gIGlmIChzZWNDb3VudCA+IDJlMykge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgY291bnQ6IDBcbiAgICB9O1xuICB9XG4gIHBvc0Nyb3NzUmVmW3NlY0NvdW50XSA9IHBvcztcbiAgaWYgKHN1YkdyYXBoc1twb3NdLmlkID09PSBpZCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IHRydWUsXG4gICAgICBjb3VudDogMFxuICAgIH07XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgbGV0IHBvc0NvdW50ID0gMTtcbiAgd2hpbGUgKGNvdW50IDwgbm9kZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hpbGRQb3MgPSBnZXRQb3NGb3JJZChub2Rlc1tjb3VudF0pO1xuICAgIGlmIChjaGlsZFBvcyA+PSAwKSB7XG4gICAgICBjb25zdCByZXMgPSBpbmRleE5vZGVzMihpZCwgY2hpbGRQb3MpO1xuICAgICAgaWYgKHJlcy5yZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXN1bHQ6IHRydWUsXG4gICAgICAgICAgY291bnQ6IHBvc0NvdW50ICsgcmVzLmNvdW50XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3NDb3VudCA9IHBvc0NvdW50ICsgcmVzLmNvdW50O1xuICAgICAgfVxuICAgIH1cbiAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlc3VsdDogZmFsc2UsXG4gICAgY291bnQ6IHBvc0NvdW50XG4gIH07XG59LCBcImluZGV4Tm9kZXMyXCIpO1xudmFyIGdldERlcHRoRmlyc3RQb3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHBvcykge1xuICByZXR1cm4gcG9zQ3Jvc3NSZWZbcG9zXTtcbn0sIFwiZ2V0RGVwdGhGaXJzdFBvc1wiKTtcbnZhciBpbmRleE5vZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc2VjQ291bnQgPSAtMTtcbiAgaWYgKHN1YkdyYXBocy5sZW5ndGggPiAwKSB7XG4gICAgaW5kZXhOb2RlczIoXCJub25lXCIsIHN1YkdyYXBocy5sZW5ndGggLSAxKTtcbiAgfVxufSwgXCJpbmRleE5vZGVzXCIpO1xudmFyIGdldFN1YkdyYXBocyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdWJHcmFwaHM7XG59LCBcImdldFN1YkdyYXBoc1wiKTtcbnZhciBmaXJzdEdyYXBoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGlmIChmaXJzdEdyYXBoRmxhZykge1xuICAgIGZpcnN0R3JhcGhGbGFnID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJmaXJzdEdyYXBoXCIpO1xudmFyIGRlc3RydWN0U3RhcnRMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3N0cikgPT4ge1xuICBsZXQgc3RyID0gX3N0ci50cmltKCk7XG4gIGxldCB0eXBlID0gXCJhcnJvd19vcGVuXCI7XG4gIHN3aXRjaCAoc3RyWzBdKSB7XG4gICAgY2FzZSBcIjxcIjpcbiAgICAgIHR5cGUgPSBcImFycm93X3BvaW50XCI7XG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwieFwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY3Jvc3NcIjtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvXCI6XG4gICAgICB0eXBlID0gXCJhcnJvd19jaXJjbGVcIjtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGxldCBzdHJva2UgPSBcIm5vcm1hbFwiO1xuICBpZiAoc3RyLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgIHN0cm9rZSA9IFwidGhpY2tcIjtcbiAgfVxuICBpZiAoc3RyLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgIHN0cm9rZSA9IFwiZG90dGVkXCI7XG4gIH1cbiAgcmV0dXJuIHsgdHlwZSwgc3Ryb2tlIH07XG59LCBcImRlc3RydWN0U3RhcnRMaW5rXCIpO1xudmFyIGNvdW50Q2hhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNoYXIsIHN0cikgPT4ge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHN0cltpXSA9PT0gY2hhcikge1xuICAgICAgKytjb3VudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufSwgXCJjb3VudENoYXJcIik7XG52YXIgZGVzdHJ1Y3RFbmRMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3N0cikgPT4ge1xuICBjb25zdCBzdHIgPSBfc3RyLnRyaW0oKTtcbiAgbGV0IGxpbmUgPSBzdHIuc2xpY2UoMCwgLTEpO1xuICBsZXQgdHlwZSA9IFwiYXJyb3dfb3BlblwiO1xuICBzd2l0Y2ggKHN0ci5zbGljZSgtMSkpIHtcbiAgICBjYXNlIFwieFwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY3Jvc3NcIjtcbiAgICAgIGlmIChzdHIuc3RhcnRzV2l0aChcInhcIikpIHtcbiAgICAgICAgdHlwZSA9IFwiZG91YmxlX1wiICsgdHlwZTtcbiAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPlwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfcG9pbnRcIjtcbiAgICAgIGlmIChzdHIuc3RhcnRzV2l0aChcIjxcIikpIHtcbiAgICAgICAgdHlwZSA9IFwiZG91YmxlX1wiICsgdHlwZTtcbiAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwib1wiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY2lyY2xlXCI7XG4gICAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoXCJvXCIpKSB7XG4gICAgICAgIHR5cGUgPSBcImRvdWJsZV9cIiArIHR5cGU7XG4gICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgbGV0IHN0cm9rZSA9IFwibm9ybWFsXCI7XG4gIGxldCBsZW5ndGggPSBsaW5lLmxlbmd0aCAtIDE7XG4gIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCI9XCIpKSB7XG4gICAgc3Ryb2tlID0gXCJ0aGlja1wiO1xuICB9XG4gIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJ+XCIpKSB7XG4gICAgc3Ryb2tlID0gXCJpbnZpc2libGVcIjtcbiAgfVxuICBjb25zdCBkb3RzID0gY291bnRDaGFyKFwiLlwiLCBsaW5lKTtcbiAgaWYgKGRvdHMpIHtcbiAgICBzdHJva2UgPSBcImRvdHRlZFwiO1xuICAgIGxlbmd0aCA9IGRvdHM7XG4gIH1cbiAgcmV0dXJuIHsgdHlwZSwgc3Ryb2tlLCBsZW5ndGggfTtcbn0sIFwiZGVzdHJ1Y3RFbmRMaW5rXCIpO1xudmFyIGRlc3RydWN0TGluayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF9zdHIsIF9zdGFydFN0cikgPT4ge1xuICBjb25zdCBpbmZvID0gZGVzdHJ1Y3RFbmRMaW5rKF9zdHIpO1xuICBsZXQgc3RhcnRJbmZvO1xuICBpZiAoX3N0YXJ0U3RyKSB7XG4gICAgc3RhcnRJbmZvID0gZGVzdHJ1Y3RTdGFydExpbmsoX3N0YXJ0U3RyKTtcbiAgICBpZiAoc3RhcnRJbmZvLnN0cm9rZSAhPT0gaW5mby5zdHJva2UpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiSU5WQUxJRFwiLCBzdHJva2U6IFwiSU5WQUxJRFwiIH07XG4gICAgfVxuICAgIGlmIChzdGFydEluZm8udHlwZSA9PT0gXCJhcnJvd19vcGVuXCIpIHtcbiAgICAgIHN0YXJ0SW5mby50eXBlID0gaW5mby50eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnRJbmZvLnR5cGUgIT09IGluZm8udHlwZSkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIklOVkFMSURcIiwgc3Ryb2tlOiBcIklOVkFMSURcIiB9O1xuICAgICAgfVxuICAgICAgc3RhcnRJbmZvLnR5cGUgPSBcImRvdWJsZV9cIiArIHN0YXJ0SW5mby50eXBlO1xuICAgIH1cbiAgICBpZiAoc3RhcnRJbmZvLnR5cGUgPT09IFwiZG91YmxlX2Fycm93XCIpIHtcbiAgICAgIHN0YXJ0SW5mby50eXBlID0gXCJkb3VibGVfYXJyb3dfcG9pbnRcIjtcbiAgICB9XG4gICAgc3RhcnRJbmZvLmxlbmd0aCA9IGluZm8ubGVuZ3RoO1xuICAgIHJldHVybiBzdGFydEluZm87XG4gIH1cbiAgcmV0dXJuIGluZm87XG59LCBcImRlc3RydWN0TGlua1wiKTtcbnZhciBleGlzdHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhbGxTZ3MsIF9pZCkgPT4ge1xuICBmb3IgKGNvbnN0IHNnIG9mIGFsbFNncykge1xuICAgIGlmIChzZy5ub2Rlcy5pbmNsdWRlcyhfaWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJleGlzdHNcIik7XG52YXIgbWFrZVVuaXEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzZywgYWxsU3ViZ3JhcGhzKSA9PiB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBzZy5ub2Rlcy5mb3JFYWNoKChfaWQsIHBvcykgPT4ge1xuICAgIGlmICghZXhpc3RzKGFsbFN1YmdyYXBocywgX2lkKSkge1xuICAgICAgcmVzLnB1c2goc2cubm9kZXNbcG9zXSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHsgbm9kZXM6IHJlcyB9O1xufSwgXCJtYWtlVW5pcVwiKTtcbnZhciBsZXggPSB7XG4gIGZpcnN0R3JhcGhcbn07XG52YXIgZ2V0VHlwZUZyb21WZXJ0ZXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2ZXJ0ZXgpID0+IHtcbiAgaWYgKHZlcnRleC50eXBlID09PSBcInNxdWFyZVwiKSB7XG4gICAgcmV0dXJuIFwic3F1YXJlUmVjdFwiO1xuICB9XG4gIGlmICh2ZXJ0ZXgudHlwZSA9PT0gXCJyb3VuZFwiKSB7XG4gICAgcmV0dXJuIFwicm91bmRlZFJlY3RcIjtcbiAgfVxuICByZXR1cm4gdmVydGV4LnR5cGUgPz8gXCJzcXVhcmVSZWN0XCI7XG59LCBcImdldFR5cGVGcm9tVmVydGV4XCIpO1xudmFyIGZpbmROb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZXMsIGlkKSA9PiBub2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBpZCksIFwiZmluZE5vZGVcIik7XG52YXIgZGVzdHJ1Y3RFZGdlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR5cGUpID0+IHtcbiAgbGV0IGFycm93VHlwZVN0YXJ0ID0gXCJub25lXCI7XG4gIGxldCBhcnJvd1R5cGVFbmQgPSBcImFycm93X3BvaW50XCI7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJhcnJvd19wb2ludFwiOlxuICAgIGNhc2UgXCJhcnJvd19jaXJjbGVcIjpcbiAgICBjYXNlIFwiYXJyb3dfY3Jvc3NcIjpcbiAgICAgIGFycm93VHlwZUVuZCA9IHR5cGU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZG91YmxlX2Fycm93X3BvaW50XCI6XG4gICAgY2FzZSBcImRvdWJsZV9hcnJvd19jaXJjbGVcIjpcbiAgICBjYXNlIFwiZG91YmxlX2Fycm93X2Nyb3NzXCI6XG4gICAgICBhcnJvd1R5cGVTdGFydCA9IHR5cGUucmVwbGFjZShcImRvdWJsZV9cIiwgXCJcIik7XG4gICAgICBhcnJvd1R5cGVFbmQgPSBhcnJvd1R5cGVTdGFydDtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7IGFycm93VHlwZVN0YXJ0LCBhcnJvd1R5cGVFbmQgfTtcbn0sIFwiZGVzdHJ1Y3RFZGdlVHlwZVwiKTtcbnZhciBhZGROb2RlRnJvbVZlcnRleCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZlcnRleCwgbm9kZXMsIHBhcmVudERCLCBzdWJHcmFwaERCLCBjb25maWcyLCBsb29rKSA9PiB7XG4gIGNvbnN0IHBhcmVudElkID0gcGFyZW50REIuZ2V0KHZlcnRleC5pZCk7XG4gIGNvbnN0IGlzR3JvdXAgPSBzdWJHcmFwaERCLmdldCh2ZXJ0ZXguaWQpID8/IGZhbHNlO1xuICBjb25zdCBub2RlID0gZmluZE5vZGUobm9kZXMsIHZlcnRleC5pZCk7XG4gIGlmIChub2RlKSB7XG4gICAgbm9kZS5jc3NTdHlsZXMgPSB2ZXJ0ZXguc3R5bGVzO1xuICAgIG5vZGUuY3NzQ29tcGlsZWRTdHlsZXMgPSBnZXRDb21waWxlZFN0eWxlcyh2ZXJ0ZXguY2xhc3Nlcyk7XG4gICAgbm9kZS5jc3NDbGFzc2VzID0gdmVydGV4LmNsYXNzZXMuam9pbihcIiBcIik7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMucHVzaCh7XG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgbGFiZWw6IHZlcnRleC50ZXh0LFxuICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgIHBhcmVudElkLFxuICAgICAgcGFkZGluZzogY29uZmlnMi5mbG93Y2hhcnQ/LnBhZGRpbmcgfHwgOCxcbiAgICAgIGNzc1N0eWxlczogdmVydGV4LnN0eWxlcyxcbiAgICAgIGNzc0NvbXBpbGVkU3R5bGVzOiBnZXRDb21waWxlZFN0eWxlcyhbXCJkZWZhdWx0XCIsIFwibm9kZVwiLCAuLi52ZXJ0ZXguY2xhc3Nlc10pLFxuICAgICAgY3NzQ2xhc3NlczogXCJkZWZhdWx0IFwiICsgdmVydGV4LmNsYXNzZXMuam9pbihcIiBcIiksXG4gICAgICBzaGFwZTogZ2V0VHlwZUZyb21WZXJ0ZXgodmVydGV4KSxcbiAgICAgIGRpcjogdmVydGV4LmRpcixcbiAgICAgIGRvbUlkOiB2ZXJ0ZXguZG9tSWQsXG4gICAgICBpc0dyb3VwLFxuICAgICAgbG9vayxcbiAgICAgIGxpbms6IHZlcnRleC5saW5rLFxuICAgICAgbGlua1RhcmdldDogdmVydGV4LmxpbmtUYXJnZXQsXG4gICAgICB0b29sdGlwOiBnZXRUb29sdGlwKHZlcnRleC5pZClcbiAgICB9KTtcbiAgfVxufSwgXCJhZGROb2RlRnJvbVZlcnRleFwiKTtcbmZ1bmN0aW9uIGdldENvbXBpbGVkU3R5bGVzKGNsYXNzRGVmcykge1xuICBsZXQgY29tcGlsZWRTdHlsZXMgPSBbXTtcbiAgZm9yIChjb25zdCBjdXN0b21DbGFzcyBvZiBjbGFzc0RlZnMpIHtcbiAgICBjb25zdCBjc3NDbGFzcyA9IGNsYXNzZXMuZ2V0KGN1c3RvbUNsYXNzKTtcbiAgICBpZiAoY3NzQ2xhc3M/LnN0eWxlcykge1xuICAgICAgY29tcGlsZWRTdHlsZXMgPSBbLi4uY29tcGlsZWRTdHlsZXMsIC4uLmNzc0NsYXNzLnN0eWxlcyA/PyBbXV0ubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgfVxuICAgIGlmIChjc3NDbGFzcz8udGV4dFN0eWxlcykge1xuICAgICAgY29tcGlsZWRTdHlsZXMgPSBbLi4uY29tcGlsZWRTdHlsZXMsIC4uLmNzc0NsYXNzLnRleHRTdHlsZXMgPz8gW11dLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcGlsZWRTdHlsZXM7XG59XG5fX25hbWUoZ2V0Q29tcGlsZWRTdHlsZXMsIFwiZ2V0Q29tcGlsZWRTdHlsZXNcIik7XG52YXIgZ2V0RGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjb25zdCBjb25maWcyID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IG5vZGVzID0gW107XG4gIGNvbnN0IGVkZ2VzMiA9IFtdO1xuICBjb25zdCBzdWJHcmFwaHMyID0gZ2V0U3ViR3JhcGhzKCk7XG4gIGNvbnN0IHBhcmVudERCID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qgc3ViR3JhcGhEQiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGZvciAobGV0IGkgPSBzdWJHcmFwaHMyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3Qgc3ViR3JhcGggPSBzdWJHcmFwaHMyW2ldO1xuICAgIGlmIChzdWJHcmFwaC5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzdWJHcmFwaERCLnNldChzdWJHcmFwaC5pZCwgdHJ1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWQgb2Ygc3ViR3JhcGgubm9kZXMpIHtcbiAgICAgIHBhcmVudERCLnNldChpZCwgc3ViR3JhcGguaWQpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gc3ViR3JhcGhzMi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IHN1YkdyYXBoID0gc3ViR3JhcGhzMltpXTtcbiAgICBub2Rlcy5wdXNoKHtcbiAgICAgIGlkOiBzdWJHcmFwaC5pZCxcbiAgICAgIGxhYmVsOiBzdWJHcmFwaC50aXRsZSxcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBwYXJlbnRJZDogcGFyZW50REIuZ2V0KHN1YkdyYXBoLmlkKSxcbiAgICAgIHBhZGRpbmc6IDgsXG4gICAgICBjc3NDb21waWxlZFN0eWxlczogZ2V0Q29tcGlsZWRTdHlsZXMoc3ViR3JhcGguY2xhc3NlcyksXG4gICAgICBjc3NDbGFzc2VzOiBzdWJHcmFwaC5jbGFzc2VzLmpvaW4oXCIgXCIpLFxuICAgICAgc2hhcGU6IFwicmVjdFwiLFxuICAgICAgZGlyOiBzdWJHcmFwaC5kaXIsXG4gICAgICBpc0dyb3VwOiB0cnVlLFxuICAgICAgbG9vazogY29uZmlnMi5sb29rXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbiA9IGdldFZlcnRpY2VzKCk7XG4gIG4uZm9yRWFjaCgodmVydGV4KSA9PiB7XG4gICAgYWRkTm9kZUZyb21WZXJ0ZXgodmVydGV4LCBub2RlcywgcGFyZW50REIsIHN1YkdyYXBoREIsIGNvbmZpZzIsIGNvbmZpZzIubG9vayB8fCBcImNsYXNzaWNcIik7XG4gIH0pO1xuICBjb25zdCBlID0gZ2V0RWRnZXMoKTtcbiAgZS5mb3JFYWNoKChyYXdFZGdlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgYXJyb3dUeXBlU3RhcnQsIGFycm93VHlwZUVuZCB9ID0gZGVzdHJ1Y3RFZGdlVHlwZShyYXdFZGdlLnR5cGUpO1xuICAgIGNvbnN0IHN0eWxlcyA9IFsuLi5lLmRlZmF1bHRTdHlsZSA/PyBbXV07XG4gICAgaWYgKHJhd0VkZ2Uuc3R5bGUpIHtcbiAgICAgIHN0eWxlcy5wdXNoKC4uLnJhd0VkZ2Uuc3R5bGUpO1xuICAgIH1cbiAgICBjb25zdCBlZGdlID0ge1xuICAgICAgaWQ6IGdldEVkZ2VJZChyYXdFZGdlLnN0YXJ0LCByYXdFZGdlLmVuZCwgeyBjb3VudGVyOiBpbmRleCwgcHJlZml4OiBcIkxcIiB9KSxcbiAgICAgIHN0YXJ0OiByYXdFZGdlLnN0YXJ0LFxuICAgICAgZW5kOiByYXdFZGdlLmVuZCxcbiAgICAgIHR5cGU6IHJhd0VkZ2UudHlwZSA/PyBcIm5vcm1hbFwiLFxuICAgICAgbGFiZWw6IHJhd0VkZ2UudGV4dCxcbiAgICAgIGxhYmVscG9zOiBcImNcIixcbiAgICAgIHRoaWNrbmVzczogcmF3RWRnZS5zdHJva2UsXG4gICAgICBtaW5sZW46IHJhd0VkZ2UubGVuZ3RoLFxuICAgICAgY2xhc3NlczogcmF3RWRnZT8uc3Ryb2tlID09PSBcImludmlzaWJsZVwiID8gXCJcIiA6IFwiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGlua1wiLFxuICAgICAgYXJyb3dUeXBlU3RhcnQ6IHJhd0VkZ2U/LnN0cm9rZSA9PT0gXCJpbnZpc2libGVcIiA/IFwibm9uZVwiIDogYXJyb3dUeXBlU3RhcnQsXG4gICAgICBhcnJvd1R5cGVFbmQ6IHJhd0VkZ2U/LnN0cm9rZSA9PT0gXCJpbnZpc2libGVcIiA/IFwibm9uZVwiIDogYXJyb3dUeXBlRW5kLFxuICAgICAgYXJyb3doZWFkU3R5bGU6IFwiZmlsbDogIzMzM1wiLFxuICAgICAgbGFiZWxTdHlsZTogc3R5bGVzLFxuICAgICAgc3R5bGU6IHN0eWxlcyxcbiAgICAgIHBhdHRlcm46IHJhd0VkZ2Uuc3Ryb2tlLFxuICAgICAgbG9vazogY29uZmlnMi5sb29rXG4gICAgfTtcbiAgICBlZGdlczIucHVzaChlZGdlKTtcbiAgfSk7XG4gIHJldHVybiB7IG5vZGVzLCBlZGdlczogZWRnZXMyLCBvdGhlcjoge30sIGNvbmZpZzogY29uZmlnMiB9O1xufSwgXCJnZXREYXRhXCIpO1xudmFyIGZsb3dEYl9kZWZhdWx0ID0ge1xuICBkZWZhdWx0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGRlZmF1bHRDb25maWcuZmxvd2NoYXJ0LCBcImRlZmF1bHRDb25maWdcIiksXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldERhdGEsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRWZXJ0ZXgsXG4gIGxvb2tVcERvbUlkLFxuICBhZGRMaW5rLFxuICB1cGRhdGVMaW5rSW50ZXJwb2xhdGUsXG4gIHVwZGF0ZUxpbmssXG4gIGFkZENsYXNzLFxuICBzZXREaXJlY3Rpb24sXG4gIHNldENsYXNzLFxuICBzZXRUb29sdGlwLFxuICBnZXRUb29sdGlwLFxuICBzZXRDbGlja0V2ZW50LFxuICBzZXRMaW5rLFxuICBiaW5kRnVuY3Rpb25zLFxuICBnZXREaXJlY3Rpb24sXG4gIGdldFZlcnRpY2VzLFxuICBnZXRFZGdlcyxcbiAgZ2V0Q2xhc3NlcyxcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0R2VuLFxuICBkZWZhdWx0U3R5bGUsXG4gIGFkZFN1YkdyYXBoLFxuICBnZXREZXB0aEZpcnN0UG9zLFxuICBpbmRleE5vZGVzLFxuICBnZXRTdWJHcmFwaHMsXG4gIGRlc3RydWN0TGluayxcbiAgbGV4LFxuICBleGlzdHMsXG4gIG1ha2VVbmlxLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9mbG93UmVuZGVyZXItdjMtdW5pZmllZC50c1xuaW1wb3J0IHsgc2VsZWN0IGFzIHNlbGVjdDIgfSBmcm9tIFwiZDNcIjtcbnZhciBnZXRDbGFzc2VzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgZGlhZ3JhbU9iaikge1xuICByZXR1cm4gZGlhZ3JhbU9iai5kYi5nZXRDbGFzc2VzKCk7XG59LCBcImdldENsYXNzZXNcIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24odGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnKSB7XG4gIGxvZy5pbmZvKFwiUkVGMDpcIik7XG4gIGxvZy5pbmZvKFwiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MilcIiwgaWQpO1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIGZsb3djaGFydDogY29uZiwgbGF5b3V0IH0gPSBnZXRDb25maWcoKTtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdDIoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgbG9nLmRlYnVnKFwiQmVmb3JlIGdldERhdGE6IFwiKTtcbiAgY29uc3QgZGF0YTRMYXlvdXQgPSBkaWFnLmRiLmdldERhdGEoKTtcbiAgbG9nLmRlYnVnKFwiRGF0YTogXCIsIGRhdGE0TGF5b3V0KTtcbiAgY29uc3Qgc3ZnID0gZ2V0RGlhZ3JhbUVsZW1lbnQoaWQsIHNlY3VyaXR5TGV2ZWwpO1xuICBjb25zdCBkaXJlY3Rpb24yID0gZ2V0RGlyZWN0aW9uKCk7XG4gIGRhdGE0TGF5b3V0LnR5cGUgPSBkaWFnLnR5cGU7XG4gIGRhdGE0TGF5b3V0LmxheW91dEFsZ29yaXRobSA9IGdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG0obGF5b3V0KTtcbiAgaWYgKGRhdGE0TGF5b3V0LmxheW91dEFsZ29yaXRobSA9PT0gXCJkYWdyZVwiICYmIGxheW91dCA9PT0gXCJlbGtcIikge1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJmbG93Y2hhcnQtZWxrIHdhcyBtb3ZlZCB0byBhbiBleHRlcm5hbCBwYWNrYWdlIGluIE1lcm1haWQgdjExLiBQbGVhc2UgcmVmZXIgW3JlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tZXJtYWlkLWpzL21lcm1haWQvcmVsZWFzZXMvdGFnL3YxMS4wLjApIGZvciBtb3JlIGRldGFpbHMuIFRoaXMgZGlhZ3JhbSB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGBkYWdyZWAgbGF5b3V0IGFzIGEgZmFsbGJhY2suXCJcbiAgICApO1xuICB9XG4gIGRhdGE0TGF5b3V0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjI7XG4gIGRhdGE0TGF5b3V0Lm5vZGVTcGFjaW5nID0gY29uZj8ubm9kZVNwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0LnJhbmtTcGFjaW5nID0gY29uZj8ucmFua1NwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0Lm1hcmtlcnMgPSBbXCJwb2ludFwiLCBcImNpcmNsZVwiLCBcImNyb3NzXCJdO1xuICBkYXRhNExheW91dC5kaWFncmFtSWQgPSBpZDtcbiAgbG9nLmRlYnVnKFwiUkVGMTpcIiwgZGF0YTRMYXlvdXQpO1xuICBhd2FpdCByZW5kZXIoZGF0YTRMYXlvdXQsIHN2Zyk7XG4gIGNvbnN0IHBhZGRpbmcgPSBkYXRhNExheW91dC5jb25maWcuZmxvd2NoYXJ0Py5kaWFncmFtUGFkZGluZyA/PyA4O1xuICB1dGlsc19kZWZhdWx0Lmluc2VydFRpdGxlKFxuICAgIHN2ZyxcbiAgICBcImZsb3djaGFydFRpdGxlVGV4dFwiLFxuICAgIGNvbmY/LnRpdGxlVG9wTWFyZ2luIHx8IDAsXG4gICAgZGlhZy5kYi5nZXREaWFncmFtVGl0bGUoKVxuICApO1xuICBzZXR1cFZpZXdQb3J0Rm9yU1ZHKHN2ZywgcGFkZGluZywgXCJmbG93Y2hhcnRcIiwgY29uZj8udXNlTWF4V2lkdGggfHwgZmFsc2UpO1xuICBmb3IgKGNvbnN0IHZlcnRleCBvZiBkYXRhNExheW91dC5ub2Rlcykge1xuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3QyKGAjJHtpZH0gW2lkPVwiJHt2ZXJ0ZXguaWR9XCJdYCk7XG4gICAgaWYgKCFub2RlIHx8ICF2ZXJ0ZXgubGluaykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJhXCIpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImNsYXNzXCIsIHZlcnRleC5jc3NDbGFzc2VzKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJyZWxcIiwgXCJub29wZW5lclwiKTtcbiAgICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRhcmdldFwiLCBcIl90b3BcIik7XG4gICAgfSBlbHNlIGlmICh2ZXJ0ZXgubGlua1RhcmdldCkge1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGFyZ2V0XCIsIHZlcnRleC5saW5rVGFyZ2V0KTtcbiAgICB9XG4gICAgY29uc3QgbGlua05vZGUgPSBub2RlLmluc2VydChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBsaW5rO1xuICAgIH0sIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IHNoYXBlID0gbm9kZS5zZWxlY3QoXCIubGFiZWwtY29udGFpbmVyXCIpO1xuICAgIGlmIChzaGFwZSkge1xuICAgICAgbGlua05vZGUuYXBwZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2hhcGUubm9kZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gbm9kZS5zZWxlY3QoXCIubGFiZWxcIik7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBsaW5rTm9kZS5hcHBlbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsYWJlbC5ub2RlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0sIFwiZHJhd1wiKTtcbnZhciBmbG93UmVuZGVyZXJfdjNfdW5pZmllZF9kZWZhdWx0ID0ge1xuICBnZXRDbGFzc2VzOiBnZXRDbGFzc2VzMixcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9wYXJzZXIvZmxvdy5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzEsIDRdLCAkVjEgPSBbMSwgM10sICRWMiA9IFsxLCA1XSwgJFYzID0gWzEsIDgsIDksIDEwLCAxMSwgMjcsIDM0LCAzNiwgMzgsIDQyLCA1OCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExMywgMTE4LCAxMTksIDEyMCwgMTIxXSwgJFY0ID0gWzIsIDJdLCAkVjUgPSBbMSwgMTNdLCAkVjYgPSBbMSwgMTRdLCAkVjcgPSBbMSwgMTVdLCAkVjggPSBbMSwgMTZdLCAkVjkgPSBbMSwgMjNdLCAkVmEgPSBbMSwgMjVdLCAkVmIgPSBbMSwgMjZdLCAkVmMgPSBbMSwgMjddLCAkVmQgPSBbMSwgNDldLCAkVmUgPSBbMSwgNDhdLCAkVmYgPSBbMSwgMjldLCAkVmcgPSBbMSwgMzBdLCAkVmggPSBbMSwgMzFdLCAkVmkgPSBbMSwgMzJdLCAkVmogPSBbMSwgMzNdLCAkVmsgPSBbMSwgNDRdLCAkVmwgPSBbMSwgNDZdLCAkVm0gPSBbMSwgNDJdLCAkVm4gPSBbMSwgNDddLCAkVm8gPSBbMSwgNDNdLCAkVnAgPSBbMSwgNTBdLCAkVnEgPSBbMSwgNDVdLCAkVnIgPSBbMSwgNTFdLCAkVnMgPSBbMSwgNTJdLCAkVnQgPSBbMSwgMzRdLCAkVnUgPSBbMSwgMzVdLCAkVnYgPSBbMSwgMzZdLCAkVncgPSBbMSwgMzddLCAkVnggPSBbMSwgNTddLCAkVnkgPSBbMSwgOCwgOSwgMTAsIDExLCAyNywgMzIsIDM0LCAzNiwgMzgsIDQyLCA1OCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExMywgMTE4LCAxMTksIDEyMCwgMTIxXSwgJFZ6ID0gWzEsIDYxXSwgJFZBID0gWzEsIDYwXSwgJFZCID0gWzEsIDYyXSwgJFZDID0gWzgsIDksIDExLCA3MywgNzVdLCAkVkQgPSBbMSwgODhdLCAkVkUgPSBbMSwgOTNdLCAkVkYgPSBbMSwgOTJdLCAkVkcgPSBbMSwgODldLCAkVkggPSBbMSwgODVdLCAkVkkgPSBbMSwgOTFdLCAkVkogPSBbMSwgODddLCAkVksgPSBbMSwgOTRdLCAkVkwgPSBbMSwgOTBdLCAkVk0gPSBbMSwgOTVdLCAkVk4gPSBbMSwgODZdLCAkVk8gPSBbOCwgOSwgMTAsIDExLCA3MywgNzVdLCAkVlAgPSBbOCwgOSwgMTAsIDExLCA0NCwgNzMsIDc1XSwgJFZRID0gWzgsIDksIDEwLCAxMSwgMjksIDQyLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDU0LCA1NiwgNTgsIDYxLCA2MywgNjUsIDY2LCA2OCwgNzMsIDc1LCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExM10sICRWUiA9IFs4LCA5LCAxMSwgNDIsIDU4LCA3MywgNzUsIDg2LCA5OSwgMTAyLCAxMDMsIDEwNiwgMTA4LCAxMTEsIDExMiwgMTEzXSwgJFZTID0gWzQyLCA1OCwgODYsIDk5LCAxMDIsIDEwMywgMTA2LCAxMDgsIDExMSwgMTEyLCAxMTNdLCAkVlQgPSBbMSwgMTIxXSwgJFZVID0gWzEsIDEyMF0sICRWViA9IFsxLCAxMjhdLCAkVlcgPSBbMSwgMTQyXSwgJFZYID0gWzEsIDE0M10sICRWWSA9IFsxLCAxNDRdLCAkVlogPSBbMSwgMTQ1XSwgJFZfID0gWzEsIDEzMF0sICRWJCA9IFsxLCAxMzJdLCAkVjAxID0gWzEsIDEzNl0sICRWMTEgPSBbMSwgMTM3XSwgJFYyMSA9IFsxLCAxMzhdLCAkVjMxID0gWzEsIDEzOV0sICRWNDEgPSBbMSwgMTQwXSwgJFY1MSA9IFsxLCAxNDFdLCAkVjYxID0gWzEsIDE0Nl0sICRWNzEgPSBbMSwgMTQ3XSwgJFY4MSA9IFsxLCAxMjZdLCAkVjkxID0gWzEsIDEyN10sICRWYTEgPSBbMSwgMTM0XSwgJFZiMSA9IFsxLCAxMjldLCAkVmMxID0gWzEsIDEzM10sICRWZDEgPSBbMSwgMTMxXSwgJFZlMSA9IFs4LCA5LCAxMCwgMTEsIDI3LCAzMiwgMzQsIDM2LCAzOCwgNDIsIDU4LCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA5OSwgMTAyLCAxMDMsIDEwNiwgMTA4LCAxMTEsIDExMiwgMTEzLCAxMTgsIDExOSwgMTIwLCAxMjFdLCAkVmYxID0gWzEsIDE0OV0sICRWZzEgPSBbOCwgOSwgMTFdLCAkVmgxID0gWzgsIDksIDEwLCAxMSwgMTQsIDQyLCA1OCwgODYsIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExM10sICRWaTEgPSBbMSwgMTY5XSwgJFZqMSA9IFsxLCAxNjVdLCAkVmsxID0gWzEsIDE2Nl0sICRWbDEgPSBbMSwgMTcwXSwgJFZtMSA9IFsxLCAxNjddLCAkVm4xID0gWzEsIDE2OF0sICRWbzEgPSBbNzUsIDExMywgMTE2XSwgJFZwMSA9IFs4LCA5LCAxMCwgMTEsIDEyLCAxNCwgMjcsIDI5LCAzMiwgNDIsIDU4LCA3MywgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDEwMiwgMTA2LCAxMDgsIDExMSwgMTEyLCAxMTNdLCAkVnExID0gWzEwLCAxMDNdLCAkVnIxID0gWzMxLCA0NywgNDksIDUxLCA1MywgNTUsIDYwLCA2MiwgNjQsIDY1LCA2NywgNjksIDExMywgMTE0LCAxMTVdLCAkVnMxID0gWzEsIDIzNV0sICRWdDEgPSBbMSwgMjMzXSwgJFZ1MSA9IFsxLCAyMzddLCAkVnYxID0gWzEsIDIzMV0sICRWdzEgPSBbMSwgMjMyXSwgJFZ4MSA9IFsxLCAyMzRdLCAkVnkxID0gWzEsIDIzNl0sICRWejEgPSBbMSwgMjM4XSwgJFZBMSA9IFsxLCAyNTVdLCAkVkIxID0gWzgsIDksIDExLCAxMDNdLCAkVkMxID0gWzgsIDksIDEwLCAxMSwgNTgsIDgxLCAxMDIsIDEwMywgMTA2LCAxMDcsIDEwOCwgMTA5XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiZ3JhcGhDb25maWdcIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcImxpbmVcIjogNiwgXCJzdGF0ZW1lbnRcIjogNywgXCJTRU1JXCI6IDgsIFwiTkVXTElORVwiOiA5LCBcIlNQQUNFXCI6IDEwLCBcIkVPRlwiOiAxMSwgXCJHUkFQSFwiOiAxMiwgXCJOT0RJUlwiOiAxMywgXCJESVJcIjogMTQsIFwiRmlyc3RTdG10U2VwYXJhdG9yXCI6IDE1LCBcImVuZGluZ1wiOiAxNiwgXCJlbmRUb2tlblwiOiAxNywgXCJzcGFjZUxpc3RcIjogMTgsIFwic3BhY2VMaXN0TmV3bGluZVwiOiAxOSwgXCJ2ZXJ0ZXhTdGF0ZW1lbnRcIjogMjAsIFwic2VwYXJhdG9yXCI6IDIxLCBcInN0eWxlU3RhdGVtZW50XCI6IDIyLCBcImxpbmtTdHlsZVN0YXRlbWVudFwiOiAyMywgXCJjbGFzc0RlZlN0YXRlbWVudFwiOiAyNCwgXCJjbGFzc1N0YXRlbWVudFwiOiAyNSwgXCJjbGlja1N0YXRlbWVudFwiOiAyNiwgXCJzdWJncmFwaFwiOiAyNywgXCJ0ZXh0Tm9UYWdzXCI6IDI4LCBcIlNRU1wiOiAyOSwgXCJ0ZXh0XCI6IDMwLCBcIlNRRVwiOiAzMSwgXCJlbmRcIjogMzIsIFwiZGlyZWN0aW9uXCI6IDMzLCBcImFjY190aXRsZVwiOiAzNCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzUsIFwiYWNjX2Rlc2NyXCI6IDM2LCBcImFjY19kZXNjcl92YWx1ZVwiOiAzNywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDM4LCBcImxpbmtcIjogMzksIFwibm9kZVwiOiA0MCwgXCJzdHlsZWRWZXJ0ZXhcIjogNDEsIFwiQU1QXCI6IDQyLCBcInZlcnRleFwiOiA0MywgXCJTVFlMRV9TRVBBUkFUT1JcIjogNDQsIFwiaWRTdHJpbmdcIjogNDUsIFwiRE9VQkxFQ0lSQ0xFU1RBUlRcIjogNDYsIFwiRE9VQkxFQ0lSQ0xFRU5EXCI6IDQ3LCBcIlBTXCI6IDQ4LCBcIlBFXCI6IDQ5LCBcIigtXCI6IDUwLCBcIi0pXCI6IDUxLCBcIlNUQURJVU1TVEFSVFwiOiA1MiwgXCJTVEFESVVNRU5EXCI6IDUzLCBcIlNVQlJPVVRJTkVTVEFSVFwiOiA1NCwgXCJTVUJST1VUSU5FRU5EXCI6IDU1LCBcIlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUXCI6IDU2LCBcIk5PREVfU1RSSU5HW2ZpZWxkXVwiOiA1NywgXCJDT0xPTlwiOiA1OCwgXCJOT0RFX1NUUklOR1t2YWx1ZV1cIjogNTksIFwiUElQRVwiOiA2MCwgXCJDWUxJTkRFUlNUQVJUXCI6IDYxLCBcIkNZTElOREVSRU5EXCI6IDYyLCBcIkRJQU1PTkRfU1RBUlRcIjogNjMsIFwiRElBTU9ORF9TVE9QXCI6IDY0LCBcIlRBR0VORFwiOiA2NSwgXCJUUkFQU1RBUlRcIjogNjYsIFwiVFJBUEVORFwiOiA2NywgXCJJTlZUUkFQU1RBUlRcIjogNjgsIFwiSU5WVFJBUEVORFwiOiA2OSwgXCJsaW5rU3RhdGVtZW50XCI6IDcwLCBcImFycm93VGV4dFwiOiA3MSwgXCJURVNUU1RSXCI6IDcyLCBcIlNUQVJUX0xJTktcIjogNzMsIFwiZWRnZVRleHRcIjogNzQsIFwiTElOS1wiOiA3NSwgXCJlZGdlVGV4dFRva2VuXCI6IDc2LCBcIlNUUlwiOiA3NywgXCJNRF9TVFJcIjogNzgsIFwidGV4dFRva2VuXCI6IDc5LCBcImtleXdvcmRzXCI6IDgwLCBcIlNUWUxFXCI6IDgxLCBcIkxJTktTVFlMRVwiOiA4MiwgXCJDTEFTU0RFRlwiOiA4MywgXCJDTEFTU1wiOiA4NCwgXCJDTElDS1wiOiA4NSwgXCJET1dOXCI6IDg2LCBcIlVQXCI6IDg3LCBcInRleHROb1RhZ3NUb2tlblwiOiA4OCwgXCJzdHlsZXNPcHRcIjogODksIFwiaWRTdHJpbmdbdmVydGV4XVwiOiA5MCwgXCJpZFN0cmluZ1tjbGFzc11cIjogOTEsIFwiQ0FMTEJBQ0tOQU1FXCI6IDkyLCBcIkNBTExCQUNLQVJHU1wiOiA5MywgXCJIUkVGXCI6IDk0LCBcIkxJTktfVEFSR0VUXCI6IDk1LCBcIlNUUltsaW5rXVwiOiA5NiwgXCJTVFJbdG9vbHRpcF1cIjogOTcsIFwiYWxwaGFOdW1cIjogOTgsIFwiREVGQVVMVFwiOiA5OSwgXCJudW1MaXN0XCI6IDEwMCwgXCJJTlRFUlBPTEFURVwiOiAxMDEsIFwiTlVNXCI6IDEwMiwgXCJDT01NQVwiOiAxMDMsIFwic3R5bGVcIjogMTA0LCBcInN0eWxlQ29tcG9uZW50XCI6IDEwNSwgXCJOT0RFX1NUUklOR1wiOiAxMDYsIFwiVU5JVFwiOiAxMDcsIFwiQlJLVFwiOiAxMDgsIFwiUENUXCI6IDEwOSwgXCJpZFN0cmluZ1Rva2VuXCI6IDExMCwgXCJNSU5VU1wiOiAxMTEsIFwiTVVMVFwiOiAxMTIsIFwiVU5JQ09ERV9URVhUXCI6IDExMywgXCJURVhUXCI6IDExNCwgXCJUQUdTVEFSVFwiOiAxMTUsIFwiRURHRV9URVhUXCI6IDExNiwgXCJhbHBoYU51bVRva2VuXCI6IDExNywgXCJkaXJlY3Rpb25fdGJcIjogMTE4LCBcImRpcmVjdGlvbl9idFwiOiAxMTksIFwiZGlyZWN0aW9uX3JsXCI6IDEyMCwgXCJkaXJlY3Rpb25fbHJcIjogMTIxLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgODogXCJTRU1JXCIsIDk6IFwiTkVXTElORVwiLCAxMDogXCJTUEFDRVwiLCAxMTogXCJFT0ZcIiwgMTI6IFwiR1JBUEhcIiwgMTM6IFwiTk9ESVJcIiwgMTQ6IFwiRElSXCIsIDI3OiBcInN1YmdyYXBoXCIsIDI5OiBcIlNRU1wiLCAzMTogXCJTUUVcIiwgMzI6IFwiZW5kXCIsIDM0OiBcImFjY190aXRsZVwiLCAzNTogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzY6IFwiYWNjX2Rlc2NyXCIsIDM3OiBcImFjY19kZXNjcl92YWx1ZVwiLCAzODogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDQyOiBcIkFNUFwiLCA0NDogXCJTVFlMRV9TRVBBUkFUT1JcIiwgNDY6IFwiRE9VQkxFQ0lSQ0xFU1RBUlRcIiwgNDc6IFwiRE9VQkxFQ0lSQ0xFRU5EXCIsIDQ4OiBcIlBTXCIsIDQ5OiBcIlBFXCIsIDUwOiBcIigtXCIsIDUxOiBcIi0pXCIsIDUyOiBcIlNUQURJVU1TVEFSVFwiLCA1MzogXCJTVEFESVVNRU5EXCIsIDU0OiBcIlNVQlJPVVRJTkVTVEFSVFwiLCA1NTogXCJTVUJST1VUSU5FRU5EXCIsIDU2OiBcIlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUXCIsIDU3OiBcIk5PREVfU1RSSU5HW2ZpZWxkXVwiLCA1ODogXCJDT0xPTlwiLCA1OTogXCJOT0RFX1NUUklOR1t2YWx1ZV1cIiwgNjA6IFwiUElQRVwiLCA2MTogXCJDWUxJTkRFUlNUQVJUXCIsIDYyOiBcIkNZTElOREVSRU5EXCIsIDYzOiBcIkRJQU1PTkRfU1RBUlRcIiwgNjQ6IFwiRElBTU9ORF9TVE9QXCIsIDY1OiBcIlRBR0VORFwiLCA2NjogXCJUUkFQU1RBUlRcIiwgNjc6IFwiVFJBUEVORFwiLCA2ODogXCJJTlZUUkFQU1RBUlRcIiwgNjk6IFwiSU5WVFJBUEVORFwiLCA3MjogXCJURVNUU1RSXCIsIDczOiBcIlNUQVJUX0xJTktcIiwgNzU6IFwiTElOS1wiLCA3NzogXCJTVFJcIiwgNzg6IFwiTURfU1RSXCIsIDgxOiBcIlNUWUxFXCIsIDgyOiBcIkxJTktTVFlMRVwiLCA4MzogXCJDTEFTU0RFRlwiLCA4NDogXCJDTEFTU1wiLCA4NTogXCJDTElDS1wiLCA4NjogXCJET1dOXCIsIDg3OiBcIlVQXCIsIDkwOiBcImlkU3RyaW5nW3ZlcnRleF1cIiwgOTE6IFwiaWRTdHJpbmdbY2xhc3NdXCIsIDkyOiBcIkNBTExCQUNLTkFNRVwiLCA5MzogXCJDQUxMQkFDS0FSR1NcIiwgOTQ6IFwiSFJFRlwiLCA5NTogXCJMSU5LX1RBUkdFVFwiLCA5NjogXCJTVFJbbGlua11cIiwgOTc6IFwiU1RSW3Rvb2x0aXBdXCIsIDk5OiBcIkRFRkFVTFRcIiwgMTAxOiBcIklOVEVSUE9MQVRFXCIsIDEwMjogXCJOVU1cIiwgMTAzOiBcIkNPTU1BXCIsIDEwNjogXCJOT0RFX1NUUklOR1wiLCAxMDc6IFwiVU5JVFwiLCAxMDg6IFwiQlJLVFwiLCAxMDk6IFwiUENUXCIsIDExMTogXCJNSU5VU1wiLCAxMTI6IFwiTVVMVFwiLCAxMTM6IFwiVU5JQ09ERV9URVhUXCIsIDExNDogXCJURVhUXCIsIDExNTogXCJUQUdTVEFSVFwiLCAxMTY6IFwiRURHRV9URVhUXCIsIDExODogXCJkaXJlY3Rpb25fdGJcIiwgMTE5OiBcImRpcmVjdGlvbl9idFwiLCAxMjA6IFwiZGlyZWN0aW9uX3JsXCIsIDEyMTogXCJkaXJlY3Rpb25fbHJcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzUsIDBdLCBbNSwgMl0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgM10sIFsxNiwgMl0sIFsxNiwgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNSwgMV0sIFsxNSwgMV0sIFsxNSwgMl0sIFsxOSwgMl0sIFsxOSwgMl0sIFsxOSwgMV0sIFsxOSwgMV0sIFsxOCwgMl0sIFsxOCwgMV0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFs3LCA5XSwgWzcsIDZdLCBbNywgNF0sIFs3LCAxXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAxXSwgWzIxLCAxXSwgWzIxLCAxXSwgWzIxLCAxXSwgWzIwLCAzXSwgWzIwLCA0XSwgWzIwLCAyXSwgWzIwLCAxXSwgWzQwLCAxXSwgWzQwLCA1XSwgWzQxLCAxXSwgWzQxLCAzXSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA2XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA4XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA2XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCAxXSwgWzM5LCAyXSwgWzM5LCAzXSwgWzM5LCAzXSwgWzM5LCAxXSwgWzM5LCAzXSwgWzc0LCAxXSwgWzc0LCAyXSwgWzc0LCAxXSwgWzc0LCAxXSwgWzcwLCAxXSwgWzcxLCAzXSwgWzMwLCAxXSwgWzMwLCAyXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzI4LCAxXSwgWzI4LCAyXSwgWzI4LCAxXSwgWzI4LCAxXSwgWzI0LCA1XSwgWzI1LCA1XSwgWzI2LCAyXSwgWzI2LCA0XSwgWzI2LCAzXSwgWzI2LCA1XSwgWzI2LCAzXSwgWzI2LCA1XSwgWzI2LCA1XSwgWzI2LCA3XSwgWzI2LCAyXSwgWzI2LCA0XSwgWzI2LCAyXSwgWzI2LCA0XSwgWzI2LCA0XSwgWzI2LCA2XSwgWzIyLCA1XSwgWzIzLCA1XSwgWzIzLCA1XSwgWzIzLCA5XSwgWzIzLCA5XSwgWzIzLCA3XSwgWzIzLCA3XSwgWzEwMCwgMV0sIFsxMDAsIDNdLCBbODksIDFdLCBbODksIDNdLCBbMTA0LCAxXSwgWzEwNCwgMl0sIFsxMDUsIDFdLCBbMTA1LCAxXSwgWzEwNSwgMV0sIFsxMDUsIDFdLCBbMTA1LCAxXSwgWzEwNSwgMV0sIFsxMDUsIDFdLCBbMTA1LCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbMTEwLCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbMTEwLCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbMTEwLCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbNzksIDFdLCBbNzksIDFdLCBbNzksIDFdLCBbNzksIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbNzYsIDFdLCBbNzYsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFs0NSwgMV0sIFs0NSwgMl0sIFs5OCwgMV0sIFs5OCwgMl0sIFszMywgMV0sIFszMywgMV0sIFszMywgMV0sIFszMywgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoJCRbJDBdKSB8fCAkJFskMF0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSAxNzY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlRCXCIpO1xuICAgICAgICAgIHRoaXMuJCA9IFwiVEJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oJCRbJDAgLSAxXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdLm5vZGVzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICBjYXNlIDMwOlxuICAgICAgICBjYXNlIDMxOlxuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmFkZFN1YkdyYXBoKCQkWyQwIC0gNl0sICQkWyQwIC0gMV0sICQkWyQwIC0gNF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmFkZFN1YkdyYXBoKCQkWyQwIC0gM10sICQkWyQwIC0gMV0sICQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmFkZFN1YkdyYXBoKHZvaWQgMCwgJCRbJDAgLSAxXSwgdm9pZCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgIHl5LmFkZExpbmsoJCRbJDAgLSAyXS5zdG10LCAkJFskMF0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogJCRbJDBdLCBub2RlczogJCRbJDBdLmNvbmNhdCgkJFskMCAtIDJdLm5vZGVzKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHl5LmFkZExpbmsoJCRbJDAgLSAzXS5zdG10LCAkJFskMCAtIDFdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6ICQkWyQwIC0gMV0sIG5vZGVzOiAkJFskMCAtIDFdLmNvbmNhdCgkJFskMCAtIDNdLm5vZGVzKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogJCRbJDAgLSAxXSwgbm9kZXM6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6ICQkWyQwXSwgbm9kZXM6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF0uY29uY2F0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xhc3MoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcInNxdWFyZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImRvdWJsZWNpcmNsZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDVdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDVdLCAkJFskMCAtIDJdLCBcImNpcmNsZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImVsbGlwc2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJzdGFkaXVtXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwic3Vicm91dGluZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDddO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDddLCAkJFskMCAtIDFdLCBcInJlY3RcIiwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgT2JqZWN0LmZyb21FbnRyaWVzKFtbJCRbJDAgLSA1XSwgJCRbJDAgLSAzXV1dKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJjeWxpbmRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcInJvdW5kXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwiZGlhbW9uZFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDVdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDVdLCAkJFskMCAtIDJdLCBcImhleGFnb25cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJvZGRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJ0cmFwZXpvaWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJpbnZfdHJhcGV6b2lkXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwibGVhbl9yaWdodFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImxlYW5fbGVmdFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgJCRbJDAgLSAxXS50ZXh0ID0gJCRbJDBdO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgIGNhc2UgNzA6XG4gICAgICAgICAgJCRbJDAgLSAyXS50ZXh0ID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICB2YXIgaW5mID0geXkuZGVzdHJ1Y3RMaW5rKCQkWyQwXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBcInR5cGVcIjogaW5mLnR5cGUsIFwic3Ryb2tlXCI6IGluZi5zdHJva2UsIFwibGVuZ3RoXCI6IGluZi5sZW5ndGgsIFwidGV4dFwiOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwidGV4dFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMCAtIDFdLnRleHQgKyBcIlwiICsgJCRbJDBdLCB0eXBlOiAkJFskMCAtIDFdLnR5cGUgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJzdHJpbmdcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcIm1hcmtkb3duXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICB2YXIgaW5mID0geXkuZGVzdHJ1Y3RMaW5rKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBcInR5cGVcIjogaW5mLnR5cGUsIFwic3Ryb2tlXCI6IGluZi5zdHJva2UsIFwibGVuZ3RoXCI6IGluZi5sZW5ndGggfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcInRleHRcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDAgLSAxXS50ZXh0ICsgXCJcIiArICQkWyQwXSwgdHlwZTogJCRbJDAgLSAxXS50eXBlIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwic3RyaW5nXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MjpcbiAgICAgICAgY2FzZSA5NzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJtYXJrZG93blwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwidGV4dFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTU6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMCAtIDFdLnRleHQgKyBcIlwiICsgJCRbJDBdLCB0eXBlOiAkJFskMCAtIDFdLnR5cGUgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LmFkZENsYXNzKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5zZXRDbGFzcygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gNF0sICQkWyQwIC0gM10sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDRdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDZdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSA2XSwgJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gNl0sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSAzXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNV07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDVdLCAkJFskMCAtIDRdLCAkJFskMF0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSA1XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gMl0sIHZvaWQgMCwgdm9pZCAwLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmsoWyQkWyQwIC0gMl1dLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmsoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA4XTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoWyQkWyQwIC0gNl1dLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rKFskJFskMCAtIDZdXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA4XTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkudXBkYXRlTGluaygkJFskMCAtIDZdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDZdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbJCRbJDAgLSA0XV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNl07XG4gICAgICAgICAgeXkudXBkYXRlTGlua0ludGVycG9sYXRlKCQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIxOlxuICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjI6XG4gICAgICAgIGNhc2UgMTI0OlxuICAgICAgICAgICQkWyQwIC0gMl0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc3OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyBcIlwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3ODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlRCXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzk6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcImRpclwiLCB2YWx1ZTogXCJCVFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTgwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJkaXJcIiwgdmFsdWU6IFwiUkxcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4MTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkxSXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgOTogJFYwLCAxMDogJFYxLCAxMjogJFYyIH0sIHsgMTogWzNdIH0sIG8oJFYzLCAkVjQsIHsgNTogNiB9KSwgeyA0OiA3LCA5OiAkVjAsIDEwOiAkVjEsIDEyOiAkVjIgfSwgeyA0OiA4LCA5OiAkVjAsIDEwOiAkVjEsIDEyOiAkVjIgfSwgeyAxMzogWzEsIDldLCAxNDogWzEsIDEwXSB9LCB7IDE6IFsyLCAxXSwgNjogMTEsIDc6IDEyLCA4OiAkVjUsIDk6ICRWNiwgMTA6ICRWNywgMTE6ICRWOCwgMjA6IDE3LCAyMjogMTgsIDIzOiAxOSwgMjQ6IDIwLCAyNTogMjEsIDI2OiAyMiwgMjc6ICRWOSwgMzM6IDI0LCAzNDogJFZhLCAzNjogJFZiLCAzODogJFZjLCA0MDogMjgsIDQxOiAzOCwgNDI6ICRWZCwgNDM6IDM5LCA0NTogNDAsIDU4OiAkVmUsIDgxOiAkVmYsIDgyOiAkVmcsIDgzOiAkVmgsIDg0OiAkVmksIDg1OiAkVmosIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTg6ICRWdCwgMTE5OiAkVnUsIDEyMDogJFZ2LCAxMjE6ICRWdyB9LCBvKCRWMywgWzIsIDldKSwgbygkVjMsIFsyLCAxMF0pLCBvKCRWMywgWzIsIDExXSksIHsgODogWzEsIDU0XSwgOTogWzEsIDU1XSwgMTA6ICRWeCwgMTU6IDUzLCAxODogNTYgfSwgbygkVnksIFsyLCAzXSksIG8oJFZ5LCBbMiwgNF0pLCBvKCRWeSwgWzIsIDVdKSwgbygkVnksIFsyLCA2XSksIG8oJFZ5LCBbMiwgN10pLCBvKCRWeSwgWzIsIDhdKSwgeyA4OiAkVnosIDk6ICRWQSwgMTE6ICRWQiwgMjE6IDU4LCAzOTogNTksIDcwOiA2MywgNzM6IFsxLCA2NF0sIDc1OiBbMSwgNjVdIH0sIHsgODogJFZ6LCA5OiAkVkEsIDExOiAkVkIsIDIxOiA2NiB9LCB7IDg6ICRWeiwgOTogJFZBLCAxMTogJFZCLCAyMTogNjcgfSwgeyA4OiAkVnosIDk6ICRWQSwgMTE6ICRWQiwgMjE6IDY4IH0sIHsgODogJFZ6LCA5OiAkVkEsIDExOiAkVkIsIDIxOiA2OSB9LCB7IDg6ICRWeiwgOTogJFZBLCAxMTogJFZCLCAyMTogNzAgfSwgeyA4OiAkVnosIDk6ICRWQSwgMTA6IFsxLCA3MV0sIDExOiAkVkIsIDIxOiA3MiB9LCBvKCRWeSwgWzIsIDM2XSksIHsgMzU6IFsxLCA3M10gfSwgeyAzNzogWzEsIDc0XSB9LCBvKCRWeSwgWzIsIDM5XSksIG8oJFZDLCBbMiwgNDZdLCB7IDE4OiA3NSwgMTA6ICRWeCB9KSwgeyAxMDogWzEsIDc2XSB9LCB7IDEwOiBbMSwgNzddIH0sIHsgMTA6IFsxLCA3OF0gfSwgeyAxMDogWzEsIDc5XSB9LCB7IDE0OiAkVkQsIDQyOiAkVkUsIDU4OiAkVkYsIDc3OiBbMSwgODNdLCA4NjogJFZHLCA5MjogWzEsIDgwXSwgOTQ6IFsxLCA4MV0sIDk4OiA4MiwgMTAyOiAkVkgsIDEwMzogJFZJLCAxMDY6ICRWSiwgMTA4OiAkVkssIDExMTogJFZMLCAxMTI6ICRWTSwgMTEzOiAkVk4sIDExNzogODQgfSwgbygkVnksIFsyLCAxNzhdKSwgbygkVnksIFsyLCAxNzldKSwgbygkVnksIFsyLCAxODBdKSwgbygkVnksIFsyLCAxODFdKSwgbygkVk8sIFsyLCA0N10pLCBvKCRWTywgWzIsIDQ5XSwgeyA0NDogWzEsIDk2XSB9KSwgbygkVlAsIFsyLCA2N10sIHsgMTEwOiAxMDksIDI5OiBbMSwgOTddLCA0MjogJFZkLCA0NjogWzEsIDk4XSwgNDg6IFsxLCA5OV0sIDUwOiBbMSwgMTAwXSwgNTI6IFsxLCAxMDFdLCA1NDogWzEsIDEwMl0sIDU2OiBbMSwgMTAzXSwgNTg6ICRWZSwgNjE6IFsxLCAxMDRdLCA2MzogWzEsIDEwNV0sIDY1OiBbMSwgMTA2XSwgNjY6IFsxLCAxMDddLCA2ODogWzEsIDEwOF0sIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0pLCBvKCRWUSwgWzIsIDE3NF0pLCBvKCRWUSwgWzIsIDEzNV0pLCBvKCRWUSwgWzIsIDEzNl0pLCBvKCRWUSwgWzIsIDEzN10pLCBvKCRWUSwgWzIsIDEzOF0pLCBvKCRWUSwgWzIsIDEzOV0pLCBvKCRWUSwgWzIsIDE0MF0pLCBvKCRWUSwgWzIsIDE0MV0pLCBvKCRWUSwgWzIsIDE0Ml0pLCBvKCRWUSwgWzIsIDE0M10pLCBvKCRWUSwgWzIsIDE0NF0pLCBvKCRWUSwgWzIsIDE0NV0pLCBvKCRWMywgWzIsIDEyXSksIG8oJFYzLCBbMiwgMThdKSwgbygkVjMsIFsyLCAxOV0pLCB7IDk6IFsxLCAxMTBdIH0sIG8oJFZSLCBbMiwgMjZdLCB7IDE4OiAxMTEsIDEwOiAkVnggfSksIG8oJFZ5LCBbMiwgMjddKSwgeyA0MDogMTEyLCA0MTogMzgsIDQyOiAkVmQsIDQzOiAzOSwgNDU6IDQwLCA1ODogJFZlLCA4NjogJFZrLCA5OTogJFZsLCAxMDI6ICRWbSwgMTAzOiAkVm4sIDEwNjogJFZvLCAxMDg6ICRWcCwgMTEwOiA0MSwgMTExOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcyB9LCBvKCRWeSwgWzIsIDQwXSksIG8oJFZ5LCBbMiwgNDFdKSwgbygkVnksIFsyLCA0Ml0pLCBvKCRWUywgWzIsIDcxXSwgeyA3MTogMTEzLCA2MDogWzEsIDExNV0sIDcyOiBbMSwgMTE0XSB9KSwgeyA3NDogMTE2LCA3NjogMTE3LCA3NzogWzEsIDExOF0sIDc4OiBbMSwgMTE5XSwgMTEzOiAkVlQsIDExNjogJFZVIH0sIG8oWzQyLCA1OCwgNjAsIDcyLCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExM10sIFsyLCA3N10pLCBvKCRWeSwgWzIsIDI4XSksIG8oJFZ5LCBbMiwgMjldKSwgbygkVnksIFsyLCAzMF0pLCBvKCRWeSwgWzIsIDMxXSksIG8oJFZ5LCBbMiwgMzJdKSwgeyAxMDogJFZWLCAxMjogJFZXLCAxNDogJFZYLCAyNzogJFZZLCAyODogMTIyLCAzMjogJFZaLCA0MjogJFZfLCA1ODogJFYkLCA3MzogJFYwMSwgNzc6IFsxLCAxMjRdLCA3ODogWzEsIDEyNV0sIDgwOiAxMzUsIDgxOiAkVjExLCA4MjogJFYyMSwgODM6ICRWMzEsIDg0OiAkVjQxLCA4NTogJFY1MSwgODY6ICRWNjEsIDg3OiAkVjcxLCA4ODogMTIzLCAxMDI6ICRWODEsIDEwNjogJFY5MSwgMTA4OiAkVmExLCAxMTE6ICRWYjEsIDExMjogJFZjMSwgMTEzOiAkVmQxIH0sIG8oJFZlMSwgJFY0LCB7IDU6IDE0OCB9KSwgbygkVnksIFsyLCAzN10pLCBvKCRWeSwgWzIsIDM4XSksIG8oJFZDLCBbMiwgNDVdLCB7IDQyOiAkVmYxIH0pLCB7IDQyOiAkVmQsIDQ1OiAxNTAsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIHsgOTk6IFsxLCAxNTFdLCAxMDA6IDE1MiwgMTAyOiBbMSwgMTUzXSB9LCB7IDQyOiAkVmQsIDQ1OiAxNTQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIHsgNDI6ICRWZCwgNDU6IDE1NSwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMgfSwgbygkVmcxLCBbMiwgMTAwXSwgeyAxMDogWzEsIDE1Nl0sIDkzOiBbMSwgMTU3XSB9KSwgeyA3NzogWzEsIDE1OF0gfSwgbygkVmcxLCBbMiwgMTA4XSwgeyAxMTc6IDE2MCwgMTA6IFsxLCAxNTldLCAxNDogJFZELCA0MjogJFZFLCA1ODogJFZGLCA4NjogJFZHLCAxMDI6ICRWSCwgMTAzOiAkVkksIDEwNjogJFZKLCAxMDg6ICRWSywgMTExOiAkVkwsIDExMjogJFZNLCAxMTM6ICRWTiB9KSwgbygkVmcxLCBbMiwgMTEwXSwgeyAxMDogWzEsIDE2MV0gfSksIG8oJFZoMSwgWzIsIDE3Nl0pLCBvKCRWaDEsIFsyLCAxNjNdKSwgbygkVmgxLCBbMiwgMTY0XSksIG8oJFZoMSwgWzIsIDE2NV0pLCBvKCRWaDEsIFsyLCAxNjZdKSwgbygkVmgxLCBbMiwgMTY3XSksIG8oJFZoMSwgWzIsIDE2OF0pLCBvKCRWaDEsIFsyLCAxNjldKSwgbygkVmgxLCBbMiwgMTcwXSksIG8oJFZoMSwgWzIsIDE3MV0pLCBvKCRWaDEsIFsyLCAxNzJdKSwgbygkVmgxLCBbMiwgMTczXSksIHsgNDI6ICRWZCwgNDU6IDE2MiwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMgfSwgeyAzMDogMTYzLCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE3MSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAxNzMsIDQ4OiBbMSwgMTcyXSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAxNzQsIDY1OiAkVmkxLCA3NzogJFZqMSwgNzg6ICRWazEsIDc5OiAxNjQsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyAzMDogMTc1LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE3NiwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDEwNjogWzEsIDE3N10gfSwgeyAzMDogMTc4LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE3OSwgNjM6IFsxLCAxODBdLCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE4MSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAxODIsIDY1OiAkVmkxLCA3NzogJFZqMSwgNzg6ICRWazEsIDc5OiAxNjQsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyAzMDogMTgzLCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIG8oJFZRLCBbMiwgMTc1XSksIG8oJFYzLCBbMiwgMjBdKSwgbygkVlIsIFsyLCAyNV0pLCBvKCRWQywgWzIsIDQzXSwgeyAxODogMTg0LCAxMDogJFZ4IH0pLCBvKCRWUywgWzIsIDY4XSwgeyAxMDogWzEsIDE4NV0gfSksIHsgMTA6IFsxLCAxODZdIH0sIHsgMzA6IDE4NywgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDc1OiBbMSwgMTg4XSwgNzY6IDE4OSwgMTEzOiAkVlQsIDExNjogJFZVIH0sIG8oJFZvMSwgWzIsIDczXSksIG8oJFZvMSwgWzIsIDc1XSksIG8oJFZvMSwgWzIsIDc2XSksIG8oJFZvMSwgWzIsIDE2MV0pLCBvKCRWbzEsIFsyLCAxNjJdKSwgeyA4OiAkVnosIDk6ICRWQSwgMTA6ICRWViwgMTE6ICRWQiwgMTI6ICRWVywgMTQ6ICRWWCwgMjE6IDE5MSwgMjc6ICRWWSwgMjk6IFsxLCAxOTBdLCAzMjogJFZaLCA0MjogJFZfLCA1ODogJFYkLCA3MzogJFYwMSwgODA6IDEzNSwgODE6ICRWMTEsIDgyOiAkVjIxLCA4MzogJFYzMSwgODQ6ICRWNDEsIDg1OiAkVjUxLCA4NjogJFY2MSwgODc6ICRWNzEsIDg4OiAxOTIsIDEwMjogJFY4MSwgMTA2OiAkVjkxLCAxMDg6ICRWYTEsIDExMTogJFZiMSwgMTEyOiAkVmMxLCAxMTM6ICRWZDEgfSwgbygkVnAxLCBbMiwgOTRdKSwgbygkVnAxLCBbMiwgOTZdKSwgbygkVnAxLCBbMiwgOTddKSwgbygkVnAxLCBbMiwgMTUwXSksIG8oJFZwMSwgWzIsIDE1MV0pLCBvKCRWcDEsIFsyLCAxNTJdKSwgbygkVnAxLCBbMiwgMTUzXSksIG8oJFZwMSwgWzIsIDE1NF0pLCBvKCRWcDEsIFsyLCAxNTVdKSwgbygkVnAxLCBbMiwgMTU2XSksIG8oJFZwMSwgWzIsIDE1N10pLCBvKCRWcDEsIFsyLCAxNThdKSwgbygkVnAxLCBbMiwgMTU5XSksIG8oJFZwMSwgWzIsIDE2MF0pLCBvKCRWcDEsIFsyLCA4M10pLCBvKCRWcDEsIFsyLCA4NF0pLCBvKCRWcDEsIFsyLCA4NV0pLCBvKCRWcDEsIFsyLCA4Nl0pLCBvKCRWcDEsIFsyLCA4N10pLCBvKCRWcDEsIFsyLCA4OF0pLCBvKCRWcDEsIFsyLCA4OV0pLCBvKCRWcDEsIFsyLCA5MF0pLCBvKCRWcDEsIFsyLCA5MV0pLCBvKCRWcDEsIFsyLCA5Ml0pLCBvKCRWcDEsIFsyLCA5M10pLCB7IDY6IDExLCA3OiAxMiwgODogJFY1LCA5OiAkVjYsIDEwOiAkVjcsIDExOiAkVjgsIDIwOiAxNywgMjI6IDE4LCAyMzogMTksIDI0OiAyMCwgMjU6IDIxLCAyNjogMjIsIDI3OiAkVjksIDMyOiBbMSwgMTkzXSwgMzM6IDI0LCAzNDogJFZhLCAzNjogJFZiLCAzODogJFZjLCA0MDogMjgsIDQxOiAzOCwgNDI6ICRWZCwgNDM6IDM5LCA0NTogNDAsIDU4OiAkVmUsIDgxOiAkVmYsIDgyOiAkVmcsIDgzOiAkVmgsIDg0OiAkVmksIDg1OiAkVmosIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTg6ICRWdCwgMTE5OiAkVnUsIDEyMDogJFZ2LCAxMjE6ICRWdyB9LCB7IDEwOiAkVngsIDE4OiAxOTQgfSwgeyAxMDogWzEsIDE5NV0sIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDEwOSwgMTExOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcyB9LCB7IDEwOiBbMSwgMTk2XSB9LCB7IDEwOiBbMSwgMTk3XSwgMTAzOiBbMSwgMTk4XSB9LCBvKCRWcTEsIFsyLCAxMjFdKSwgeyAxMDogWzEsIDE5OV0sIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDEwOSwgMTExOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcyB9LCB7IDEwOiBbMSwgMjAwXSwgNDI6ICRWZCwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogMTA5LCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIHsgNzc6IFsxLCAyMDFdIH0sIG8oJFZnMSwgWzIsIDEwMl0sIHsgMTA6IFsxLCAyMDJdIH0pLCBvKCRWZzEsIFsyLCAxMDRdLCB7IDEwOiBbMSwgMjAzXSB9KSwgeyA3NzogWzEsIDIwNF0gfSwgbygkVmgxLCBbMiwgMTc3XSksIHsgNzc6IFsxLCAyMDVdLCA5NTogWzEsIDIwNl0gfSwgbygkVk8sIFsyLCA1MF0sIHsgMTEwOiAxMDksIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0pLCB7IDMxOiBbMSwgMjA3XSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgbygkVnIxLCBbMiwgNzldKSwgbygkVnIxLCBbMiwgODFdKSwgbygkVnIxLCBbMiwgODJdKSwgbygkVnIxLCBbMiwgMTQ2XSksIG8oJFZyMSwgWzIsIDE0N10pLCBvKCRWcjEsIFsyLCAxNDhdKSwgbygkVnIxLCBbMiwgMTQ5XSksIHsgNDc6IFsxLCAyMDldLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAyMTAsIDY1OiAkVmkxLCA3NzogJFZqMSwgNzg6ICRWazEsIDc5OiAxNjQsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyA0OTogWzEsIDIxMV0sIDY1OiAkVmkxLCA3OTogMjA4LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgNTE6IFsxLCAyMTJdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDUzOiBbMSwgMjEzXSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyA1NTogWzEsIDIxNF0sIDY1OiAkVmkxLCA3OTogMjA4LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgNTg6IFsxLCAyMTVdIH0sIHsgNjI6IFsxLCAyMTZdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY0OiBbMSwgMjE3XSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyAzMDogMjE4LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzE6IFsxLCAyMTldLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY1OiAkVmkxLCA2NzogWzEsIDIyMF0sIDY5OiBbMSwgMjIxXSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY1OiAkVmkxLCA2NzogWzEsIDIyM10sIDY5OiBbMSwgMjIyXSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWQywgWzIsIDQ0XSwgeyA0MjogJFZmMSB9KSwgbygkVlMsIFsyLCA3MF0pLCBvKCRWUywgWzIsIDY5XSksIHsgNjA6IFsxLCAyMjRdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWUywgWzIsIDcyXSksIG8oJFZvMSwgWzIsIDc0XSksIHsgMzA6IDIyNSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWZTEsICRWNCwgeyA1OiAyMjYgfSksIG8oJFZwMSwgWzIsIDk1XSksIG8oJFZ5LCBbMiwgMzVdKSwgeyA0MTogMjI3LCA0MjogJFZkLCA0MzogMzksIDQ1OiA0MCwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMgfSwgeyAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCA4OTogMjI4LCAxMDI6ICRWdjEsIDEwNDogMjI5LCAxMDU6IDIzMCwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0sIHsgMTA6ICRWczEsIDU4OiAkVnQxLCA4MTogJFZ1MSwgODk6IDIzOSwgMTAxOiBbMSwgMjQwXSwgMTAyOiAkVnYxLCAxMDQ6IDIyOSwgMTA1OiAyMzAsIDEwNjogJFZ3MSwgMTA3OiAkVngxLCAxMDg6ICRWeTEsIDEwOTogJFZ6MSB9LCB7IDEwOiAkVnMxLCA1ODogJFZ0MSwgODE6ICRWdTEsIDg5OiAyNDEsIDEwMTogWzEsIDI0Ml0sIDEwMjogJFZ2MSwgMTA0OiAyMjksIDEwNTogMjMwLCAxMDY6ICRWdzEsIDEwNzogJFZ4MSwgMTA4OiAkVnkxLCAxMDk6ICRWejEgfSwgeyAxMDI6IFsxLCAyNDNdIH0sIHsgMTA6ICRWczEsIDU4OiAkVnQxLCA4MTogJFZ1MSwgODk6IDI0NCwgMTAyOiAkVnYxLCAxMDQ6IDIyOSwgMTA1OiAyMzAsIDEwNjogJFZ3MSwgMTA3OiAkVngxLCAxMDg6ICRWeTEsIDEwOTogJFZ6MSB9LCB7IDQyOiAkVmQsIDQ1OiAyNDUsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIG8oJFZnMSwgWzIsIDEwMV0pLCB7IDc3OiBbMSwgMjQ2XSB9LCB7IDc3OiBbMSwgMjQ3XSwgOTU6IFsxLCAyNDhdIH0sIG8oJFZnMSwgWzIsIDEwOV0pLCBvKCRWZzEsIFsyLCAxMTFdLCB7IDEwOiBbMSwgMjQ5XSB9KSwgbygkVmcxLCBbMiwgMTEyXSksIG8oJFZQLCBbMiwgNTFdKSwgbygkVnIxLCBbMiwgODBdKSwgbygkVlAsIFsyLCA1Ml0pLCB7IDQ5OiBbMSwgMjUwXSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgbygkVlAsIFsyLCA1OV0pLCBvKCRWUCwgWzIsIDU0XSksIG8oJFZQLCBbMiwgNTVdKSwgbygkVlAsIFsyLCA1Nl0pLCB7IDEwNjogWzEsIDI1MV0gfSwgbygkVlAsIFsyLCA1OF0pLCBvKCRWUCwgWzIsIDYwXSksIHsgNjQ6IFsxLCAyNTJdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWUCwgWzIsIDYyXSksIG8oJFZQLCBbMiwgNjNdKSwgbygkVlAsIFsyLCA2NV0pLCBvKCRWUCwgWzIsIDY0XSksIG8oJFZQLCBbMiwgNjZdKSwgbyhbMTAsIDQyLCA1OCwgODYsIDk5LCAxMDIsIDEwMywgMTA2LCAxMDgsIDExMSwgMTEyLCAxMTNdLCBbMiwgNzhdKSwgeyAzMTogWzEsIDI1M10sIDY1OiAkVmkxLCA3OTogMjA4LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgNjogMTEsIDc6IDEyLCA4OiAkVjUsIDk6ICRWNiwgMTA6ICRWNywgMTE6ICRWOCwgMjA6IDE3LCAyMjogMTgsIDIzOiAxOSwgMjQ6IDIwLCAyNTogMjEsIDI2OiAyMiwgMjc6ICRWOSwgMzI6IFsxLCAyNTRdLCAzMzogMjQsIDM0OiAkVmEsIDM2OiAkVmIsIDM4OiAkVmMsIDQwOiAyOCwgNDE6IDM4LCA0MjogJFZkLCA0MzogMzksIDQ1OiA0MCwgNTg6ICRWZSwgODE6ICRWZiwgODI6ICRWZywgODM6ICRWaCwgODQ6ICRWaSwgODU6ICRWaiwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMsIDExODogJFZ0LCAxMTk6ICRWdSwgMTIwOiAkVnYsIDEyMTogJFZ3IH0sIG8oJFZPLCBbMiwgNDhdKSwgbygkVmcxLCBbMiwgMTE0XSwgeyAxMDM6ICRWQTEgfSksIG8oJFZCMSwgWzIsIDEyM10sIHsgMTA1OiAyNTYsIDEwOiAkVnMxLCA1ODogJFZ0MSwgODE6ICRWdTEsIDEwMjogJFZ2MSwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0pLCBvKCRWQzEsIFsyLCAxMjVdKSwgbygkVkMxLCBbMiwgMTI3XSksIG8oJFZDMSwgWzIsIDEyOF0pLCBvKCRWQzEsIFsyLCAxMjldKSwgbygkVkMxLCBbMiwgMTMwXSksIG8oJFZDMSwgWzIsIDEzMV0pLCBvKCRWQzEsIFsyLCAxMzJdKSwgbygkVkMxLCBbMiwgMTMzXSksIG8oJFZDMSwgWzIsIDEzNF0pLCBvKCRWZzEsIFsyLCAxMTVdLCB7IDEwMzogJFZBMSB9KSwgeyAxMDogWzEsIDI1N10gfSwgbygkVmcxLCBbMiwgMTE2XSwgeyAxMDM6ICRWQTEgfSksIHsgMTA6IFsxLCAyNThdIH0sIG8oJFZxMSwgWzIsIDEyMl0pLCBvKCRWZzEsIFsyLCA5OF0sIHsgMTAzOiAkVkExIH0pLCBvKCRWZzEsIFsyLCA5OV0sIHsgMTEwOiAxMDksIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0pLCBvKCRWZzEsIFsyLCAxMDNdKSwgbygkVmcxLCBbMiwgMTA1XSwgeyAxMDogWzEsIDI1OV0gfSksIG8oJFZnMSwgWzIsIDEwNl0pLCB7IDk1OiBbMSwgMjYwXSB9LCB7IDQ5OiBbMSwgMjYxXSB9LCB7IDYwOiBbMSwgMjYyXSB9LCB7IDY0OiBbMSwgMjYzXSB9LCB7IDg6ICRWeiwgOTogJFZBLCAxMTogJFZCLCAyMTogMjY0IH0sIG8oJFZ5LCBbMiwgMzRdKSwgeyAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCAxMDI6ICRWdjEsIDEwNDogMjY1LCAxMDU6IDIzMCwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0sIG8oJFZDMSwgWzIsIDEyNl0pLCB7IDE0OiAkVkQsIDQyOiAkVkUsIDU4OiAkVkYsIDg2OiAkVkcsIDk4OiAyNjYsIDEwMjogJFZILCAxMDM6ICRWSSwgMTA2OiAkVkosIDEwODogJFZLLCAxMTE6ICRWTCwgMTEyOiAkVk0sIDExMzogJFZOLCAxMTc6IDg0IH0sIHsgMTQ6ICRWRCwgNDI6ICRWRSwgNTg6ICRWRiwgODY6ICRWRywgOTg6IDI2NywgMTAyOiAkVkgsIDEwMzogJFZJLCAxMDY6ICRWSiwgMTA4OiAkVkssIDExMTogJFZMLCAxMTI6ICRWTSwgMTEzOiAkVk4sIDExNzogODQgfSwgeyA5NTogWzEsIDI2OF0gfSwgbygkVmcxLCBbMiwgMTEzXSksIG8oJFZQLCBbMiwgNTNdKSwgeyAzMDogMjY5LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIG8oJFZQLCBbMiwgNjFdKSwgbygkVmUxLCAkVjQsIHsgNTogMjcwIH0pLCBvKCRWQjEsIFsyLCAxMjRdLCB7IDEwNTogMjU2LCAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCAxMDI6ICRWdjEsIDEwNjogJFZ3MSwgMTA3OiAkVngxLCAxMDg6ICRWeTEsIDEwOTogJFZ6MSB9KSwgbygkVmcxLCBbMiwgMTE5XSwgeyAxMTc6IDE2MCwgMTA6IFsxLCAyNzFdLCAxNDogJFZELCA0MjogJFZFLCA1ODogJFZGLCA4NjogJFZHLCAxMDI6ICRWSCwgMTAzOiAkVkksIDEwNjogJFZKLCAxMDg6ICRWSywgMTExOiAkVkwsIDExMjogJFZNLCAxMTM6ICRWTiB9KSwgbygkVmcxLCBbMiwgMTIwXSwgeyAxMTc6IDE2MCwgMTA6IFsxLCAyNzJdLCAxNDogJFZELCA0MjogJFZFLCA1ODogJFZGLCA4NjogJFZHLCAxMDI6ICRWSCwgMTAzOiAkVkksIDEwNjogJFZKLCAxMDg6ICRWSywgMTExOiAkVkwsIDExMjogJFZNLCAxMTM6ICRWTiB9KSwgbygkVmcxLCBbMiwgMTA3XSksIHsgMzE6IFsxLCAyNzNdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY6IDExLCA3OiAxMiwgODogJFY1LCA5OiAkVjYsIDEwOiAkVjcsIDExOiAkVjgsIDIwOiAxNywgMjI6IDE4LCAyMzogMTksIDI0OiAyMCwgMjU6IDIxLCAyNjogMjIsIDI3OiAkVjksIDMyOiBbMSwgMjc0XSwgMzM6IDI0LCAzNDogJFZhLCAzNjogJFZiLCAzODogJFZjLCA0MDogMjgsIDQxOiAzOCwgNDI6ICRWZCwgNDM6IDM5LCA0NTogNDAsIDU4OiAkVmUsIDgxOiAkVmYsIDgyOiAkVmcsIDgzOiAkVmgsIDg0OiAkVmksIDg1OiAkVmosIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTg6ICRWdCwgMTE5OiAkVnUsIDEyMDogJFZ2LCAxMjE6ICRWdyB9LCB7IDEwOiAkVnMxLCA1ODogJFZ0MSwgODE6ICRWdTEsIDg5OiAyNzUsIDEwMjogJFZ2MSwgMTA0OiAyMjksIDEwNTogMjMwLCAxMDY6ICRWdzEsIDEwNzogJFZ4MSwgMTA4OiAkVnkxLCAxMDk6ICRWejEgfSwgeyAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCA4OTogMjc2LCAxMDI6ICRWdjEsIDEwNDogMjI5LCAxMDU6IDIzMCwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0sIG8oJFZQLCBbMiwgNTddKSwgbygkVnksIFsyLCAzM10pLCBvKCRWZzEsIFsyLCAxMTddLCB7IDEwMzogJFZBMSB9KSwgbygkVmcxLCBbMiwgMTE4XSwgeyAxMDM6ICRWQTEgfSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7fSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgyKCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4MiwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4MigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4MigpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2tuYW1lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNhbGxiYWNrYXJnc1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gOTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiA5MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gXCJNRF9TVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm1kX3N0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDgxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiA5OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gODI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDEwMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gODM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmV0dXJuIDg0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiA5NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2xpY2tcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiA4NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICBpZiAoeXkubGV4LmZpcnN0R3JhcGgoKSkge1xuICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZGlyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIGlmICh5eS5sZXguZmlyc3RHcmFwaCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJkaXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgaWYgKHl5LmxleC5maXJzdEdyYXBoKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImRpclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDMyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA5NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gOTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDk1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiA5NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHJldHVybiAxMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIDExOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gMTIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiAxMjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgcmV0dXJuIDEwMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgICByZXR1cm4gMTA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHJldHVybiAxMDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgcmV0dXJuIDExMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNzU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJlZGdlVGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgICByZXR1cm4gMTE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRoaWNrRWRnZVRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDExNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNzU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJkb3R0ZWRFZGdlVGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgICByZXR1cm4gMTE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICAgcmV0dXJuIFwiVEVYVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiZWxsaXBzZVRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiA1NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA2NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgICAgcmV0dXJuIDExNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRyYXBUZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4ODpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidHJhcFRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg5OlxuICAgICAgICAgICAgcmV0dXJuIDExNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgcmV0dXJuIDg3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MjpcbiAgICAgICAgICAgIHJldHVybiBcIlNFUFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgIHJldHVybiA4NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgICByZXR1cm4gMTEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5NTpcbiAgICAgICAgICAgIHJldHVybiAxMDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5NzpcbiAgICAgICAgICAgIHJldHVybiAxMDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk4OlxuICAgICAgICAgICAgcmV0dXJuIDExMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTk6XG4gICAgICAgICAgICByZXR1cm4gMTEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgICAgcmV0dXJuIFwiVEVYVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICByZXR1cm4gXCJRVU9URVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTA6XG4gICAgICAgICAgICByZXR1cm4gOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86Y2FsbFtcXHNdKykvLCAvXig/OlxcKFtcXHNdKlxcKSkvLCAvXig/OlxcKCkvLCAvXig/OlteKF0qKS8sIC9eKD86XFwpKS8sIC9eKD86W14pXSopLywgL14oPzpbXmBcIl0rKS8sIC9eKD86W2BdW1wiXSkvLCAvXig/OltcIl1bYF0pLywgL14oPzpbXlwiXSspLywgL14oPzpbXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OnN0eWxlXFxiKS8sIC9eKD86ZGVmYXVsdFxcYikvLCAvXig/OmxpbmtTdHlsZVxcYikvLCAvXig/OmludGVycG9sYXRlXFxiKS8sIC9eKD86Y2xhc3NEZWZcXGIpLywgL14oPzpjbGFzc1xcYikvLCAvXig/OmhyZWZbXFxzXSkvLCAvXig/OmNsaWNrW1xcc10rKS8sIC9eKD86W1xcc1xcbl0pLywgL14oPzpbXlxcc1xcbl0qKS8sIC9eKD86Zmxvd2NoYXJ0LWVsa1xcYikvLCAvXig/OmdyYXBoXFxiKS8sIC9eKD86Zmxvd2NoYXJ0XFxiKS8sIC9eKD86c3ViZ3JhcGhcXGIpLywgL14oPzplbmRcXGJcXHMqKS8sIC9eKD86X3NlbGZcXGIpLywgL14oPzpfYmxhbmtcXGIpLywgL14oPzpfcGFyZW50XFxiKS8sIC9eKD86X3RvcFxcYikvLCAvXig/OihcXHI/XFxuKSpcXHMqXFxuKS8sIC9eKD86XFxzKkxSXFxiKS8sIC9eKD86XFxzKlJMXFxiKS8sIC9eKD86XFxzKlRCXFxiKS8sIC9eKD86XFxzKkJUXFxiKS8sIC9eKD86XFxzKlREXFxiKS8sIC9eKD86XFxzKkJSXFxiKS8sIC9eKD86XFxzKjwpLywgL14oPzpcXHMqPikvLCAvXig/OlxccypcXF4pLywgL14oPzpcXHMqdlxcYikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1JMW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvLCAvXig/OlswLTldKykvLCAvXig/OiMpLywgL14oPzo6OjopLywgL14oPzo6KS8sIC9eKD86JikvLCAvXig/OjspLywgL14oPzosKS8sIC9eKD86XFwqKS8sIC9eKD86XFxzKlt4bzxdPy0tK1steG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/LS1cXHMqKS8sIC9eKD86W14tXXwtKD8hLSkrKS8sIC9eKD86XFxzKlt4bzxdPz09K1s9eG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/PT1cXHMqKS8sIC9eKD86W149XXw9KD8hKSkvLCAvXig/OlxccypbeG88XT8tP1xcListW3hvPl0/XFxzKikvLCAvXig/OlxccypbeG88XT8tXFwuXFxzKikvLCAvXig/OlteXFwuXXxcXC4oPyEpKS8sIC9eKD86XFxzKn5+W1xcfl0rXFxzKikvLCAvXig/OlstL1xcKV1bXFwpXSkvLCAvXig/OlteXFwoXFwpXFxbXFxdXFx7XFx9XXwhXFwpKykvLCAvXig/OlxcKC0pLywgL14oPzpcXF1cXCkpLywgL14oPzpcXChcXFspLywgL14oPzpcXF1cXF0pLywgL14oPzpcXFtcXFspLywgL14oPzpcXFtcXHwpLywgL14oPzo+KS8sIC9eKD86XFwpXFxdKS8sIC9eKD86XFxbXFwoKS8sIC9eKD86XFwpXFwpXFwpKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86W1xcXFwoPz1cXF0pXVtcXF1dKS8sIC9eKD86XFwvKD89XFxdKVxcXSkvLCAvXig/OlxcLyg/IVxcXSl8XFxcXCg/IVxcXSl8W15cXFxcXFxbXFxdXFwoXFwpXFx7XFx9XFwvXSspLywgL14oPzpcXFtcXC8pLywgL14oPzpcXFtcXFxcKS8sIC9eKD86PCkvLCAvXig/Oj4pLywgL14oPzpcXF4pLywgL14oPzpcXFxcXFx8KS8sIC9eKD86dlxcYikvLCAvXig/OlxcKikvLCAvXig/OiMpLywgL14oPzomKS8sIC9eKD86KFtBLVphLXowLTkhXCJcXCMkJSYnKitcXC5gP1xcXFxfXFwvXXwtKD89W15cXD5cXC1cXC5dKXwoPyEpKSspLywgL14oPzotKS8sIC9eKD86W1xcdTAwQUFcXHUwMEI1XFx1MDBCQVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNl18W1xcdTAwRjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzddfFtcXHUwMzdBLVxcdTAzN0RcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNV18W1xcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFdfFtcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVdfFtcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXXxbXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhBMF18W1xcdTA4QTItXFx1MDhBQ1xcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTc3XXxbXFx1MDk3OS1cXHUwOTdGXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXXxbXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXXxbXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzldfFtcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XXxbXFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEIwNS1cXHUwQjBDXXxbXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXXxbXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OV18W1xcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBdfFtcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzNcXHUwQzM1LVxcdTBDMzlcXHUwQzNEXXxbXFx1MEM1OFxcdTBDNTlcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM118W1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMF18W1xcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ2MFxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFdfFtcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXXxbXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXXxbXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZdfFtcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXXxbXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MV18W1xcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RF18W1xcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBdfFtcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXXxbXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXXxbXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXXxbXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN118W1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFDXXxbXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlDMS1cXHUxOUM3XFx1MUEwMC1cXHUxQTE2XXxbXFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXXxbXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXXxbXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURdfFtcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RdfFtcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXXxbXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZdfFtcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhdfFtcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRdfFtcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM118W1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNl18W1xcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRV18W1xcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXXxbXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXXxbXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXXxbXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJdfFtcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OTdcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhdfFtcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3OTNcXHVBN0EwLVxcdUE3QUFcXHVBN0Y4LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVdfFtcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXXxbXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUFBMDAtXFx1QUEyOF18W1xcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTgwLVxcdUFBQUZcXHVBQUIxXFx1QUFCNV18W1xcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNF18W1xcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRV18W1xcdUFCQzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RF18W1xcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZdfFtcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRF18W1xcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ118W1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRl18W1xcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10pLywgL14oPzpcXHwpLywgL14oPzpcXHwpLywgL14oPzpcXCkpLywgL14oPzpcXCgpLywgL14oPzpcXF0pLywgL14oPzpcXFspLywgL14oPzooXFx9KSkvLCAvXig/OlxceykvLCAvXig/OlteXFxbXFxdXFwoXFwpXFx7XFx9XFx8XFxcIl0rKS8sIC9eKD86XCIpLywgL14oPzooXFxyP1xcbikrKS8sIC9eKD86XFxzKS8sIC9eKD86JCkvXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJjYWxsYmFja2FyZ3NcIjogeyBcInJ1bGVzXCI6IFsxMSwgMTIsIDE1LCAxOCwgNzAsIDczLCA3NSwgNzcsIDgxLCA4MywgODcsIDg4LCAxMDEsIDEwMywgMTA1LCAxMDddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNhbGxiYWNrbmFtZVwiOiB7IFwicnVsZXNcIjogWzgsIDksIDEwLCAxNSwgMTgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJocmVmXCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2xpY2tcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTgsIDI3LCAyOCwgNzAsIDczLCA3NSwgNzcsIDgxLCA4MywgODcsIDg4LCAxMDEsIDEwMywgMTA1LCAxMDddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImRvdHRlZEVkZ2VUZXh0XCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA2NywgNjksIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0aGlja0VkZ2VUZXh0XCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA2NCwgNjYsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJlZGdlVGV4dFwiOiB7IFwicnVsZXNcIjogWzE1LCAxOCwgNjEsIDYzLCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHJhcFRleHRcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJlbGxpcHNlVGV4dFwiOiB7IFwicnVsZXNcIjogWzE1LCAxOCwgNzAsIDcxLCA3MiwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidGV4dFwiOiB7IFwicnVsZXNcIjogWzE1LCAxOCwgNzAsIDczLCA3NCwgNzUsIDc2LCA3NywgODAsIDgxLCA4MiwgODMsIDg3LCA4OCwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidmVydGV4XCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiZGlyXCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbNSwgNiwgMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMywgMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMSwgMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibWRfc3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbMTMsIDE0LCAxNSwgMTgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTYsIDE3LCAxOCwgNzAsIDczLCA3NSwgNzcsIDgxLCA4MywgODcsIDg4LCAxMDEsIDEwMywgMTA1LCAxMDddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAyLCA0LCA3LCAxNSwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2NCwgNjUsIDY3LCA2OCwgNzAsIDczLCA3NSwgNzcsIDc4LCA3OSwgODEsIDgzLCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAxLCAxMDMsIDEwNSwgMTA3LCAxMDksIDExMCwgMTExLCAxMTJdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgZmxvd19kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZmxvd2NoYXJ0L3N0eWxlcy50c1xuaW1wb3J0ICogYXMga2hyb21hIGZyb20gXCJraHJvbWFcIjtcbnZhciBmYWRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29sb3IsIG9wYWNpdHkpID0+IHtcbiAgY29uc3QgY2hhbm5lbDIgPSBraHJvbWEuY2hhbm5lbDtcbiAgY29uc3QgciA9IGNoYW5uZWwyKGNvbG9yLCBcInJcIik7XG4gIGNvbnN0IGcgPSBjaGFubmVsMihjb2xvciwgXCJnXCIpO1xuICBjb25zdCBiID0gY2hhbm5lbDIoY29sb3IsIFwiYlwiKTtcbiAgcmV0dXJuIGtocm9tYS5yZ2JhKHIsIGcsIGIsIG9wYWNpdHkpO1xufSwgXCJmYWRlXCIpO1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGAubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gICAgY29sb3I6ICR7b3B0aW9ucy5ub2RlVGV4dENvbG9yIHx8IG9wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCBzcGFuIHAge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLmxhYmVsIHRleHQsc3BhbiB7XG4gICAgZmlsbDogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICAgIGNvbG9yOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuICAucm91Z2gtbm9kZSAubGFiZWwgdGV4dCAsIC5ub2RlIC5sYWJlbCB0ZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICB9XG4gIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4ge1xuICAvLyAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gIC8vIH1cbiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7XG4gIC8vICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAvLyB9XG5cbiAgLm5vZGUgLmthdGV4IHBhdGgge1xuICAgIGZpbGw6ICMwMDA7XG4gICAgc3Ryb2tlOiAjMDAwO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmFycm93aGVhZENvbG9yfTtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDIuMHB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gICAgcCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gICAgfVxuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgICAgZmlsbDogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqL1xuICAubGFiZWxCa2cge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZmFkZShvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmQsIDAuNSl9O1xuICAgIC8vIGJhY2tncm91bmQtY29sb3I6XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuY2x1c3RlckJrZ307XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuY2x1c3RlckJvcmRlcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtvcHRpb25zLmJvcmRlcjJ9O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9mbG93Y2hhcnQvZmxvd0RpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IGZsb3dfZGVmYXVsdCxcbiAgZGI6IGZsb3dEYl9kZWZhdWx0LFxuICByZW5kZXJlcjogZmxvd1JlbmRlcmVyX3YzX3VuaWZpZWRfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuZmxvd2NoYXJ0KSB7XG4gICAgICBjbmYuZmxvd2NoYXJ0ID0ge307XG4gICAgfVxuICAgIGlmIChjbmYubGF5b3V0KSB7XG4gICAgICBzZXRDb25maWcoeyBsYXlvdXQ6IGNuZi5sYXlvdXQgfSk7XG4gICAgfVxuICAgIGNuZi5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIHNldENvbmZpZyh7IGZsb3djaGFydDogeyBhcnJvd01hcmtlckFic29sdXRlOiBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSB9IH0pO1xuICAgIGZsb3dEYl9kZWZhdWx0LmNsZWFyKCk7XG4gICAgZmxvd0RiX2RlZmF1bHQuc2V0R2VuKFwiZ2VuLTJcIik7XG4gIH0sIFwiaW5pdFwiKVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLAogICAgImltcG9ydCBSRUdFWCBmcm9tICcuL3JlZ2V4LmpzJztcblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIFJFR0VYLnRlc3QodXVpZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlOyIsCiAgICAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwKICAgICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlOyIsCiAgICAiaW1wb3J0IHsgdW5zYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuaW1wb3J0IHBhcnNlIGZyb20gJy4vcGFyc2UuanMnO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5leHBvcnQgY29uc3QgRE5TID0gJzZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnQgY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9IHBhcnNlKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zYWZlU3RyaW5naWZ5KGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLAogICAgIi8vIEFkYXB0ZWQgZnJvbSBDaHJpcyBWZW5lc3MnIFNIQTEgY29kZSBhdFxuLy8gaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9zaGExLmh0bWxcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICBzd2l0Y2ggKHMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcblxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gIH1cbn1cblxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgY29uc3QgSyA9IFsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2XTtcbiAgY29uc3QgSCA9IFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwXTtcblxuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cblxuICBieXRlcy5wdXNoKDB4ODApO1xuICBjb25zdCBsID0gYnl0ZXMubGVuZ3RoIC8gNCArIDI7XG4gIGNvbnN0IE4gPSBNYXRoLmNlaWwobCAvIDE2KTtcbiAgY29uc3QgTSA9IG5ldyBBcnJheShOKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50MzJBcnJheSgxNik7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIGFycltqXSA9IGJ5dGVzW2kgKiA2NCArIGogKiA0XSA8PCAyNCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tpICogNjQgKyBqICogNCArIDJdIDw8IDggfCBieXRlc1tpICogNjQgKyBqICogNCArIDNdO1xuICAgIH1cblxuICAgIE1baV0gPSBhcnI7XG4gIH1cblxuICBNW04gLSAxXVsxNF0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4IC8gTWF0aC5wb3coMiwgMzIpO1xuICBNW04gLSAxXVsxNF0gPSBNYXRoLmZsb29yKE1bTiAtIDFdWzE0XSk7XG4gIE1bTiAtIDFdWzE1XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggJiAweGZmZmZmZmZmO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgVyA9IG5ldyBVaW50MzJBcnJheSg4MCk7XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDE2OyArK3QpIHtcbiAgICAgIFdbdF0gPSBNW2ldW3RdO1xuICAgIH1cblxuICAgIGZvciAobGV0IHQgPSAxNjsgdCA8IDgwOyArK3QpIHtcbiAgICAgIFdbdF0gPSBST1RMKFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpO1xuICAgIH1cblxuICAgIGxldCBhID0gSFswXTtcbiAgICBsZXQgYiA9IEhbMV07XG4gICAgbGV0IGMgPSBIWzJdO1xuICAgIGxldCBkID0gSFszXTtcbiAgICBsZXQgZSA9IEhbNF07XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDgwOyArK3QpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHQgLyAyMCk7XG4gICAgICBjb25zdCBUID0gUk9UTChhLCA1KSArIGYocywgYiwgYywgZCkgKyBlICsgS1tzXSArIFdbdF0gPj4+IDA7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IFJPVEwoYiwgMzApID4+PiAwO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gVDtcbiAgICB9XG5cbiAgICBIWzBdID0gSFswXSArIGEgPj4+IDA7XG4gICAgSFsxXSA9IEhbMV0gKyBiID4+PiAwO1xuICAgIEhbMl0gPSBIWzJdICsgYyA+Pj4gMDtcbiAgICBIWzNdID0gSFszXSArIGQgPj4+IDA7XG4gICAgSFs0XSA9IEhbNF0gKyBlID4+PiAwO1xuICB9XG5cbiAgcmV0dXJuIFtIWzBdID4+IDI0ICYgMHhmZiwgSFswXSA+PiAxNiAmIDB4ZmYsIEhbMF0gPj4gOCAmIDB4ZmYsIEhbMF0gJiAweGZmLCBIWzFdID4+IDI0ICYgMHhmZiwgSFsxXSA+PiAxNiAmIDB4ZmYsIEhbMV0gPj4gOCAmIDB4ZmYsIEhbMV0gJiAweGZmLCBIWzJdID4+IDI0ICYgMHhmZiwgSFsyXSA+PiAxNiAmIDB4ZmYsIEhbMl0gPj4gOCAmIDB4ZmYsIEhbMl0gJiAweGZmLCBIWzNdID4+IDI0ICYgMHhmZiwgSFszXSA+PiAxNiAmIDB4ZmYsIEhbM10gPj4gOCAmIDB4ZmYsIEhbM10gJiAweGZmLCBIWzRdID4+IDI0ICYgMHhmZiwgSFs0XSA+PiAxNiAmIDB4ZmYsIEhbNF0gPj4gOCAmIDB4ZmYsIEhbNF0gJiAweGZmXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hhMTsiLAogICAgImltcG9ydCB2MzUgZnJvbSAnLi92MzUuanMnO1xuaW1wb3J0IHNoYTEgZnJvbSAnLi9zaGExLmpzJztcbmNvbnN0IHY1ID0gdjM1KCd2NScsIDB4NTAsIHNoYTEpO1xuZXhwb3J0IGRlZmF1bHQgdjU7IiwKICAgICJleHBvcnQgeyBkZWZhdWx0IGFzIHYxIH0gZnJvbSAnLi92MS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHYzIH0gZnJvbSAnLi92My5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHY0IH0gZnJvbSAnLi92NC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHY1IH0gZnJvbSAnLi92NS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5JTCB9IGZyb20gJy4vbmlsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbGlkYXRlIH0gZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyc2UgfSBmcm9tICcuL3BhcnNlLmpzJzsiLAogICAgImltcG9ydCB7XG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGxvZyxcbiAgcGFyc2VHZW5lcmljVHlwZXMsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvcGFyc2VyL2VyRGlhZ3JhbS5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzYsIDgsIDEwLCAyMCwgMjIsIDI0LCAyNiwgMjcsIDI4XSwgJFYxID0gWzEsIDEwXSwgJFYyID0gWzEsIDExXSwgJFYzID0gWzEsIDEyXSwgJFY0ID0gWzEsIDEzXSwgJFY1ID0gWzEsIDE0XSwgJFY2ID0gWzEsIDE1XSwgJFY3ID0gWzEsIDIxXSwgJFY4ID0gWzEsIDIyXSwgJFY5ID0gWzEsIDIzXSwgJFZhID0gWzEsIDI0XSwgJFZiID0gWzEsIDI1XSwgJFZjID0gWzYsIDgsIDEwLCAxMywgMTUsIDE4LCAxOSwgMjAsIDIyLCAyNCwgMjYsIDI3LCAyOCwgNDEsIDQyLCA0MywgNDQsIDQ1XSwgJFZkID0gWzEsIDM0XSwgJFZlID0gWzI3LCAyOCwgNDYsIDQ3XSwgJFZmID0gWzQxLCA0MiwgNDMsIDQ0LCA0NV0sICRWZyA9IFsxNywgMzRdLCAkVmggPSBbMSwgNTRdLCAkVmkgPSBbMSwgNTNdLCAkVmogPSBbMTcsIDM0LCAzNiwgMzhdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LCBcInRyYWNlXCIpLFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJFUl9ESUFHUkFNXCI6IDQsIFwiZG9jdW1lbnRcIjogNSwgXCJFT0ZcIjogNiwgXCJsaW5lXCI6IDcsIFwiU1BBQ0VcIjogOCwgXCJzdGF0ZW1lbnRcIjogOSwgXCJORVdMSU5FXCI6IDEwLCBcImVudGl0eU5hbWVcIjogMTEsIFwicmVsU3BlY1wiOiAxMiwgXCI6XCI6IDEzLCBcInJvbGVcIjogMTQsIFwiQkxPQ0tfU1RBUlRcIjogMTUsIFwiYXR0cmlidXRlc1wiOiAxNiwgXCJCTE9DS19TVE9QXCI6IDE3LCBcIlNRU1wiOiAxOCwgXCJTUUVcIjogMTksIFwidGl0bGVcIjogMjAsIFwidGl0bGVfdmFsdWVcIjogMjEsIFwiYWNjX3RpdGxlXCI6IDIyLCBcImFjY190aXRsZV92YWx1ZVwiOiAyMywgXCJhY2NfZGVzY3JcIjogMjQsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDI1LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMjYsIFwiQUxQSEFOVU1cIjogMjcsIFwiRU5USVRZX05BTUVcIjogMjgsIFwiYXR0cmlidXRlXCI6IDI5LCBcImF0dHJpYnV0ZVR5cGVcIjogMzAsIFwiYXR0cmlidXRlTmFtZVwiOiAzMSwgXCJhdHRyaWJ1dGVLZXlUeXBlTGlzdFwiOiAzMiwgXCJhdHRyaWJ1dGVDb21tZW50XCI6IDMzLCBcIkFUVFJJQlVURV9XT1JEXCI6IDM0LCBcImF0dHJpYnV0ZUtleVR5cGVcIjogMzUsIFwiQ09NTUFcIjogMzYsIFwiQVRUUklCVVRFX0tFWVwiOiAzNywgXCJDT01NRU5UXCI6IDM4LCBcImNhcmRpbmFsaXR5XCI6IDM5LCBcInJlbFR5cGVcIjogNDAsIFwiWkVST19PUl9PTkVcIjogNDEsIFwiWkVST19PUl9NT1JFXCI6IDQyLCBcIk9ORV9PUl9NT1JFXCI6IDQzLCBcIk9OTFlfT05FXCI6IDQ0LCBcIk1EX1BBUkVOVFwiOiA0NSwgXCJOT05fSURFTlRJRllJTkdcIjogNDYsIFwiSURFTlRJRllJTkdcIjogNDcsIFwiV09SRFwiOiA0OCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiRVJfRElBR1JBTVwiLCA2OiBcIkVPRlwiLCA4OiBcIlNQQUNFXCIsIDEwOiBcIk5FV0xJTkVcIiwgMTM6IFwiOlwiLCAxNTogXCJCTE9DS19TVEFSVFwiLCAxNzogXCJCTE9DS19TVE9QXCIsIDE4OiBcIlNRU1wiLCAxOTogXCJTUUVcIiwgMjA6IFwidGl0bGVcIiwgMjE6IFwidGl0bGVfdmFsdWVcIiwgMjI6IFwiYWNjX3RpdGxlXCIsIDIzOiBcImFjY190aXRsZV92YWx1ZVwiLCAyNDogXCJhY2NfZGVzY3JcIiwgMjU6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDI2OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMjc6IFwiQUxQSEFOVU1cIiwgMjg6IFwiRU5USVRZX05BTUVcIiwgMzQ6IFwiQVRUUklCVVRFX1dPUkRcIiwgMzY6IFwiQ09NTUFcIiwgMzc6IFwiQVRUUklCVVRFX0tFWVwiLCAzODogXCJDT01NRU5UXCIsIDQxOiBcIlpFUk9fT1JfT05FXCIsIDQyOiBcIlpFUk9fT1JfTU9SRVwiLCA0MzogXCJPTkVfT1JfTU9SRVwiLCA0NDogXCJPTkxZX09ORVwiLCA0NTogXCJNRF9QQVJFTlRcIiwgNDY6IFwiTk9OX0lERU5USUZZSU5HXCIsIDQ3OiBcIklERU5USUZZSU5HXCIsIDQ4OiBcIldPUkRcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzUsIDBdLCBbNSwgMl0sIFs3LCAyXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzksIDVdLCBbOSwgNF0sIFs5LCAzXSwgWzksIDFdLCBbOSwgN10sIFs5LCA2XSwgWzksIDRdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMV0sIFsxMSwgMV0sIFsxMSwgMV0sIFsxNiwgMV0sIFsxNiwgMl0sIFsyOSwgMl0sIFsyOSwgM10sIFsyOSwgM10sIFsyOSwgNF0sIFszMCwgMV0sIFszMSwgMV0sIFszMiwgMV0sIFszMiwgM10sIFszNSwgMV0sIFszMywgMV0sIFsxMiwgM10sIFszOSwgMV0sIFszOSwgMV0sIFszOSwgMV0sIFszOSwgMV0sIFszOSwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFsxNCwgMV0sIFsxNCwgMV0sIFsxNCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5hZGRFbnRpdHkoJCRbJDAgLSA0XSk7XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LmFkZFJlbGF0aW9uc2hpcCgkJFskMCAtIDRdLCAkJFskMF0sICQkWyQwIC0gMl0sICQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gM10pO1xuICAgICAgICAgIHl5LmFkZEF0dHJpYnV0ZXMoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMCAtIDZdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICB5eS5hZGRBdHRyaWJ1dGVzKCQkWyQwIC0gNl0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMCAtIDVdLCAkJFskMCAtIDNdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICB5eS5hZGRFbnRpdHkoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgIGNhc2UgNDE6XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICQkWyQwXS5wdXNoKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSB7IGF0dHJpYnV0ZVR5cGU6ICQkWyQwIC0gMV0sIGF0dHJpYnV0ZU5hbWU6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgYXR0cmlidXRlVHlwZTogJCRbJDAgLSAyXSwgYXR0cmlidXRlTmFtZTogJCRbJDAgLSAxXSwgYXR0cmlidXRlS2V5VHlwZUxpc3Q6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgYXR0cmlidXRlVHlwZTogJCRbJDAgLSAyXSwgYXR0cmlidXRlTmFtZTogJCRbJDAgLSAxXSwgYXR0cmlidXRlQ29tbWVudDogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0geyBhdHRyaWJ1dGVUeXBlOiAkJFskMCAtIDNdLCBhdHRyaWJ1dGVOYW1lOiAkJFskMCAtIDJdLCBhdHRyaWJ1dGVLZXlUeXBlTGlzdDogJCRbJDAgLSAxXSwgYXR0cmlidXRlQ29tbWVudDogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICQkWyQwIC0gMl0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIHRoaXMuJCA9IHsgY2FyZEE6ICQkWyQwXSwgcmVsVHlwZTogJCRbJDAgLSAxXSwgY2FyZEI6ICQkWyQwIC0gMl0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuT05MWV9PTkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuTURfUEFSRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IFsxLCA2XSwgOTogNywgMTA6IFsxLCA4XSwgMTE6IDksIDIwOiAkVjEsIDIyOiAkVjIsIDI0OiAkVjMsIDI2OiAkVjQsIDI3OiAkVjUsIDI4OiAkVjYgfSwgbygkVjAsIFsyLCA3XSwgeyAxOiBbMiwgMV0gfSksIG8oJFYwLCBbMiwgM10pLCB7IDk6IDE2LCAxMTogOSwgMjA6ICRWMSwgMjI6ICRWMiwgMjQ6ICRWMywgMjY6ICRWNCwgMjc6ICRWNSwgMjg6ICRWNiB9LCBvKCRWMCwgWzIsIDVdKSwgbygkVjAsIFsyLCA2XSksIG8oJFYwLCBbMiwgMTFdLCB7IDEyOiAxNywgMzk6IDIwLCAxNTogWzEsIDE4XSwgMTg6IFsxLCAxOV0sIDQxOiAkVjcsIDQyOiAkVjgsIDQzOiAkVjksIDQ0OiAkVmEsIDQ1OiAkVmIgfSksIHsgMjE6IFsxLCAyNl0gfSwgeyAyMzogWzEsIDI3XSB9LCB7IDI1OiBbMSwgMjhdIH0sIG8oJFYwLCBbMiwgMThdKSwgbygkVmMsIFsyLCAxOV0pLCBvKCRWYywgWzIsIDIwXSksIG8oJFYwLCBbMiwgNF0pLCB7IDExOiAyOSwgMjc6ICRWNSwgMjg6ICRWNiB9LCB7IDE2OiAzMCwgMTc6IFsxLCAzMV0sIDI5OiAzMiwgMzA6IDMzLCAzNDogJFZkIH0sIHsgMTE6IDM1LCAyNzogJFY1LCAyODogJFY2IH0sIHsgNDA6IDM2LCA0NjogWzEsIDM3XSwgNDc6IFsxLCAzOF0gfSwgbygkVmUsIFsyLCAzNF0pLCBvKCRWZSwgWzIsIDM1XSksIG8oJFZlLCBbMiwgMzZdKSwgbygkVmUsIFsyLCAzN10pLCBvKCRWZSwgWzIsIDM4XSksIG8oJFYwLCBbMiwgMTVdKSwgbygkVjAsIFsyLCAxNl0pLCBvKCRWMCwgWzIsIDE3XSksIHsgMTM6IFsxLCAzOV0gfSwgeyAxNzogWzEsIDQwXSB9LCBvKCRWMCwgWzIsIDEwXSksIHsgMTY6IDQxLCAxNzogWzIsIDIxXSwgMjk6IDMyLCAzMDogMzMsIDM0OiAkVmQgfSwgeyAzMTogNDIsIDM0OiBbMSwgNDNdIH0sIHsgMzQ6IFsyLCAyN10gfSwgeyAxOTogWzEsIDQ0XSB9LCB7IDM5OiA0NSwgNDE6ICRWNywgNDI6ICRWOCwgNDM6ICRWOSwgNDQ6ICRWYSwgNDU6ICRWYiB9LCBvKCRWZiwgWzIsIDM5XSksIG8oJFZmLCBbMiwgNDBdKSwgeyAxNDogNDYsIDI3OiBbMSwgNDldLCAyODogWzEsIDQ4XSwgNDg6IFsxLCA0N10gfSwgbygkVjAsIFsyLCA5XSksIHsgMTc6IFsyLCAyMl0gfSwgbygkVmcsIFsyLCAyM10sIHsgMzI6IDUwLCAzMzogNTEsIDM1OiA1MiwgMzc6ICRWaCwgMzg6ICRWaSB9KSwgbyhbMTcsIDM0LCAzNywgMzhdLCBbMiwgMjhdKSwgbygkVjAsIFsyLCAxNF0sIHsgMTU6IFsxLCA1NV0gfSksIG8oWzI3LCAyOF0sIFsyLCAzM10pLCBvKCRWMCwgWzIsIDhdKSwgbygkVjAsIFsyLCA0MV0pLCBvKCRWMCwgWzIsIDQyXSksIG8oJFYwLCBbMiwgNDNdKSwgbygkVmcsIFsyLCAyNF0sIHsgMzM6IDU2LCAzNjogWzEsIDU3XSwgMzg6ICRWaSB9KSwgbygkVmcsIFsyLCAyNV0pLCBvKCRWaiwgWzIsIDI5XSksIG8oJFZnLCBbMiwgMzJdKSwgbygkVmosIFsyLCAzMV0pLCB7IDE2OiA1OCwgMTc6IFsxLCA1OV0sIDI5OiAzMiwgMzA6IDMzLCAzNDogJFZkIH0sIG8oJFZnLCBbMiwgMjZdKSwgeyAzNTogNjAsIDM3OiAkVmggfSwgeyAxNzogWzEsIDYxXSB9LCBvKCRWMCwgWzIsIDEzXSksIG8oJFZqLCBbMiwgMzBdKSwgbygkVjAsIFsyLCAxMl0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyAzNDogWzIsIDI3XSwgNDE6IFsyLCAyMl0gfSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJibG9ja1wiKTtcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiB5eV8ueXl0ZXh0WzBdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIDQ3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHJldHVybiAyNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgICByZXR1cm4geXlfLnl5dGV4dFswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86W1xcbl0rKS9pLCAvXig/OlxccyspL2ksIC9eKD86W1xcc10rKS9pLCAvXig/OlwiW15cIiVcXHJcXG5cXHZcXGJcXFxcXStcIikvaSwgL14oPzpcIlteXCJdKlwiKS9pLCAvXig/OmVyRGlhZ3JhbVxcYikvaSwgL14oPzpcXHspL2ksIC9eKD86LCkvaSwgL14oPzpcXHMrKS9pLCAvXig/OlxcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcXGIpL2ksIC9eKD86KC4qPylbfl0oLio/KSpbfl0pL2ksIC9eKD86W1xcKkEtWmEtel9dW0EtWmEtejAtOVxcLV9cXFtcXF1cXChcXCldKikvaSwgL14oPzpcIlteXCJdKlwiKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXH0pL2ksIC9eKD86LikvaSwgL14oPzpcXFspL2ksIC9eKD86XFxdKS9pLCAvXig/Om9uZSBvciB6ZXJvXFxiKS9pLCAvXig/Om9uZSBvciBtb3JlXFxiKS9pLCAvXig/Om9uZSBvciBtYW55XFxiKS9pLCAvXig/OjFcXCspL2ksIC9eKD86XFx8b1xcYikvaSwgL14oPzp6ZXJvIG9yIG9uZVxcYikvaSwgL14oPzp6ZXJvIG9yIG1vcmVcXGIpL2ksIC9eKD86emVybyBvciBtYW55XFxiKS9pLCAvXig/OjBcXCspL2ksIC9eKD86XFx9b1xcYikvaSwgL14oPzptYW55XFwoMFxcKSkvaSwgL14oPzptYW55XFwoMVxcKSkvaSwgL14oPzptYW55XFxiKS9pLCAvXig/OlxcfVxcfCkvaSwgL14oPzpvbmVcXGIpL2ksIC9eKD86b25seSBvbmVcXGIpL2ksIC9eKD86MVxcYikvaSwgL14oPzpcXHxcXHwpL2ksIC9eKD86b1xcfCkvaSwgL14oPzpvXFx7KS9pLCAvXig/OlxcfFxceykvaSwgL14oPzpcXHMqdVxcYikvaSwgL14oPzpcXC5cXC4pL2ksIC9eKD86LS0pL2ksIC9eKD86dG9cXGIpL2ksIC9eKD86b3B0aW9uYWxseSB0b1xcYikvaSwgL14oPzpcXC4tKS9pLCAvXig/Oi1cXC4pL2ksIC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVxcLV9dKikvaSwgL14oPzouKS9pLCAvXig/OiQpL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs1LCA2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFszXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsxXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJibG9ja1wiOiB7IFwicnVsZXNcIjogWzE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAyLCA0LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBlckRpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2VyL2VyRGIuanNcbnZhciBlbnRpdGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcmVsYXRpb25zaGlwcyA9IFtdO1xudmFyIENhcmRpbmFsaXR5ID0ge1xuICBaRVJPX09SX09ORTogXCJaRVJPX09SX09ORVwiLFxuICBaRVJPX09SX01PUkU6IFwiWkVST19PUl9NT1JFXCIsXG4gIE9ORV9PUl9NT1JFOiBcIk9ORV9PUl9NT1JFXCIsXG4gIE9OTFlfT05FOiBcIk9OTFlfT05FXCIsXG4gIE1EX1BBUkVOVDogXCJNRF9QQVJFTlRcIlxufTtcbnZhciBJZGVudGlmaWNhdGlvbiA9IHtcbiAgTk9OX0lERU5USUZZSU5HOiBcIk5PTl9JREVOVElGWUlOR1wiLFxuICBJREVOVElGWUlORzogXCJJREVOVElGWUlOR1wiXG59O1xudmFyIGFkZEVudGl0eSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obmFtZSwgYWxpYXMgPSB2b2lkIDApIHtcbiAgaWYgKCFlbnRpdGllcy5oYXMobmFtZSkpIHtcbiAgICBlbnRpdGllcy5zZXQobmFtZSwgeyBhdHRyaWJ1dGVzOiBbXSwgYWxpYXMgfSk7XG4gICAgbG9nLmluZm8oXCJBZGRlZCBuZXcgZW50aXR5IDpcIiwgbmFtZSk7XG4gIH0gZWxzZSBpZiAoIWVudGl0aWVzLmdldChuYW1lKS5hbGlhcyAmJiBhbGlhcykge1xuICAgIGVudGl0aWVzLmdldChuYW1lKS5hbGlhcyA9IGFsaWFzO1xuICAgIGxvZy5pbmZvKGBBZGQgYWxpYXMgJyR7YWxpYXN9JyB0byBlbnRpdHkgJyR7bmFtZX0nYCk7XG4gIH1cbiAgcmV0dXJuIGVudGl0aWVzLmdldChuYW1lKTtcbn0sIFwiYWRkRW50aXR5XCIpO1xudmFyIGdldEVudGl0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBlbnRpdGllcywgXCJnZXRFbnRpdGllc1wiKTtcbnZhciBhZGRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbnRpdHlOYW1lLCBhdHRyaWJzKSB7XG4gIGxldCBlbnRpdHkgPSBhZGRFbnRpdHkoZW50aXR5TmFtZSk7XG4gIGxldCBpO1xuICBmb3IgKGkgPSBhdHRyaWJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgZW50aXR5LmF0dHJpYnV0ZXMucHVzaChhdHRyaWJzW2ldKTtcbiAgICBsb2cuZGVidWcoXCJBZGRlZCBhdHRyaWJ1dGUgXCIsIGF0dHJpYnNbaV0uYXR0cmlidXRlTmFtZSk7XG4gIH1cbn0sIFwiYWRkQXR0cmlidXRlc1wiKTtcbnZhciBhZGRSZWxhdGlvbnNoaXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVudEEsIHJvbEEsIGVudEIsIHJTcGVjKSB7XG4gIGxldCByZWwgPSB7XG4gICAgZW50aXR5QTogZW50QSxcbiAgICByb2xlQTogcm9sQSxcbiAgICBlbnRpdHlCOiBlbnRCLFxuICAgIHJlbFNwZWM6IHJTcGVjXG4gIH07XG4gIHJlbGF0aW9uc2hpcHMucHVzaChyZWwpO1xuICBsb2cuZGVidWcoXCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDpcIiwgcmVsKTtcbn0sIFwiYWRkUmVsYXRpb25zaGlwXCIpO1xudmFyIGdldFJlbGF0aW9uc2hpcHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHJlbGF0aW9uc2hpcHMsIFwiZ2V0UmVsYXRpb25zaGlwc1wiKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBlbnRpdGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHJlbGF0aW9uc2hpcHMgPSBbXTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZXJEYl9kZWZhdWx0ID0ge1xuICBDYXJkaW5hbGl0eSxcbiAgSWRlbnRpZmljYXRpb24sXG4gIGdldENvbmZpZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBnZXRDb25maWcoKS5lciwgXCJnZXRDb25maWdcIiksXG4gIGFkZEVudGl0eSxcbiAgYWRkQXR0cmlidXRlcyxcbiAgZ2V0RW50aXRpZXMsXG4gIGFkZFJlbGF0aW9uc2hpcCxcbiAgZ2V0UmVsYXRpb25zaGlwcyxcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvZXJSZW5kZXJlci5qc1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgbGluZSwgY3VydmVCYXNpcywgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBsYXlvdXQgYXMgZGFncmVMYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9lci9lck1hcmtlcnMuanNcbnZhciBFUk1hcmtlcnMgPSB7XG4gIE9OTFlfT05FX1NUQVJUOiBcIk9OTFlfT05FX1NUQVJUXCIsXG4gIE9OTFlfT05FX0VORDogXCJPTkxZX09ORV9FTkRcIixcbiAgWkVST19PUl9PTkVfU1RBUlQ6IFwiWkVST19PUl9PTkVfU1RBUlRcIixcbiAgWkVST19PUl9PTkVfRU5EOiBcIlpFUk9fT1JfT05FX0VORFwiLFxuICBPTkVfT1JfTU9SRV9TVEFSVDogXCJPTkVfT1JfTU9SRV9TVEFSVFwiLFxuICBPTkVfT1JfTU9SRV9FTkQ6IFwiT05FX09SX01PUkVfRU5EXCIsXG4gIFpFUk9fT1JfTU9SRV9TVEFSVDogXCJaRVJPX09SX01PUkVfU1RBUlRcIixcbiAgWkVST19PUl9NT1JFX0VORDogXCJaRVJPX09SX01PUkVfRU5EXCIsXG4gIE1EX1BBUkVOVF9FTkQ6IFwiTURfUEFSRU5UX0VORFwiLFxuICBNRF9QQVJFTlRfU1RBUlQ6IFwiTURfUEFSRU5UX1NUQVJUXCJcbn07XG52YXIgaW5zZXJ0TWFya2VycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgY29uZjIpIHtcbiAgbGV0IG1hcmtlcjtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCkuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDkpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMThcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5PTkxZX09ORV9FTkQpLmF0dHIoXCJyZWZYXCIsIDE4KS5hdHRyKFwicmVmWVwiLCA5KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTgpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwiZFwiLCBcIk0zLDAgTDMsMTggTTksMCBMOSwxOFwiKTtcbiAgbWFya2VyID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAwKS5hdHRyKFwicmVmWVwiLCA5KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMzApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpO1xuICBtYXJrZXIuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIndoaXRlXCIpLmF0dHIoXCJjeFwiLCAyMSkuYXR0cihcImN5XCIsIDkpLmF0dHIoXCJyXCIsIDYpO1xuICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTksMCBMOSwxOFwiKTtcbiAgbWFya2VyID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLlpFUk9fT1JfT05FX0VORCkuYXR0cihcInJlZlhcIiwgMzApLmF0dHIoXCJyZWZZXCIsIDkpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAzMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDkpLmF0dHIoXCJjeVwiLCA5KS5hdHRyKFwiclwiLCA2KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwiZFwiLCBcIk0yMSwwIEwyMSwxOFwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAxOCkuYXR0cihcInJlZllcIiwgMTgpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA0NSkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAzNikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjdcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoXCJyZWZYXCIsIDI3KS5hdHRyKFwicmVmWVwiLCAxOCkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDQ1KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDM2KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4XCIpO1xuICBtYXJrZXIgPSBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAxOCkuYXR0cihcInJlZllcIiwgMTgpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA1NykuYXR0cihcIm1hcmtlckhlaWdodFwiLCAzNikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDQ4KS5hdHRyKFwiY3lcIiwgMTgpLmF0dHIoXCJyXCIsIDYpO1xuICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMThcIik7XG4gIG1hcmtlciA9IGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EKS5hdHRyKFwicmVmWFwiLCAzOSkuYXR0cihcInJlZllcIiwgMTgpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA1NykuYXR0cihcIm1hcmtlckhlaWdodFwiLCAzNikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDkpLmF0dHIoXCJjeVwiLCAxOCkuYXR0cihcInJcIiwgNik7XG4gIG1hcmtlci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4XCIpO1xuICByZXR1cm47XG59LCBcImluc2VydE1hcmtlcnNcIik7XG52YXIgZXJNYXJrZXJzX2RlZmF1bHQgPSB7XG4gIEVSTWFya2VycyxcbiAgaW5zZXJ0TWFya2Vyc1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2VyL2VyUmVuZGVyZXIuanNcbmltcG9ydCB7IHY1IGFzIHV1aWQ1IH0gZnJvbSBcInV1aWRcIjtcbnZhciBCQURfSURfQ0hBUlNfUkVHRVhQID0gL1teXFxkQS1aYS16XShcXFcpKi9nO1xudmFyIGNvbmYgPSB7fTtcbnZhciBlbnRpdHlOYW1lSWRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbmYpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNuZik7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25mW2tleV0gPSBjbmZba2V5XTtcbiAgfVxufSwgXCJzZXRDb25mXCIpO1xudmFyIGRyYXdBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JvdXBOb2RlLCBlbnRpdHlUZXh0Tm9kZSwgYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBoZWlnaHRQYWRkaW5nID0gY29uZi5lbnRpdHlQYWRkaW5nIC8gMztcbiAgY29uc3Qgd2lkdGhQYWRkaW5nID0gY29uZi5lbnRpdHlQYWRkaW5nIC8gMztcbiAgY29uc3QgYXR0ckZvbnRTaXplID0gY29uZi5mb250U2l6ZSAqIDAuODU7XG4gIGNvbnN0IGxhYmVsQkJveCA9IGVudGl0eVRleHROb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IGF0dHJpYnV0ZU5vZGVzID0gW107XG4gIGxldCBoYXNLZXlUeXBlID0gZmFsc2U7XG4gIGxldCBoYXNDb21tZW50ID0gZmFsc2U7XG4gIGxldCBtYXhUeXBlV2lkdGggPSAwO1xuICBsZXQgbWF4TmFtZVdpZHRoID0gMDtcbiAgbGV0IG1heEtleVdpZHRoID0gMDtcbiAgbGV0IG1heENvbW1lbnRXaWR0aCA9IDA7XG4gIGxldCBjdW11bGF0aXZlSGVpZ2h0ID0gbGFiZWxCQm94LmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyO1xuICBsZXQgYXR0ck51bSA9IDE7XG4gIGF0dHJpYnV0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0ICE9PSB2b2lkIDAgJiYgaXRlbS5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBoYXNLZXlUeXBlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uYXR0cmlidXRlQ29tbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgICBoYXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBhdHRyaWJ1dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBjb25zdCBhdHRyUHJlZml4ID0gYCR7ZW50aXR5VGV4dE5vZGUubm9kZSgpLmlkfS1hdHRyLSR7YXR0ck51bX1gO1xuICAgIGxldCBub2RlSGVpZ2h0ID0gMDtcbiAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gcGFyc2VHZW5lcmljVHlwZXMoaXRlbS5hdHRyaWJ1dGVUeXBlKTtcbiAgICBjb25zdCB0eXBlTm9kZSA9IGdyb3VwTm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJlciBlbnRpdHlMYWJlbFwiLCB0cnVlKS5hdHRyKFwiaWRcIiwgYCR7YXR0clByZWZpeH0tdHlwZWApLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLnN0eWxlKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImxlZnRcIikuc3R5bGUoXCJmb250LWZhbWlseVwiLCBnZXRDb25maWcoKS5mb250RmFtaWx5KS5zdHlsZShcImZvbnQtc2l6ZVwiLCBhdHRyRm9udFNpemUgKyBcInB4XCIpLnRleHQoYXR0cmlidXRlVHlwZSk7XG4gICAgY29uc3QgbmFtZU5vZGUgPSBncm91cE5vZGUuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiZXIgZW50aXR5TGFiZWxcIiwgdHJ1ZSkuYXR0cihcImlkXCIsIGAke2F0dHJQcmVmaXh9LW5hbWVgKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5zdHlsZShcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJsZWZ0XCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgYXR0ckZvbnRTaXplICsgXCJweFwiKS50ZXh0KGl0ZW0uYXR0cmlidXRlTmFtZSk7XG4gICAgY29uc3QgYXR0cmlidXRlTm9kZSA9IHt9O1xuICAgIGF0dHJpYnV0ZU5vZGUudG4gPSB0eXBlTm9kZTtcbiAgICBhdHRyaWJ1dGVOb2RlLm5uID0gbmFtZU5vZGU7XG4gICAgY29uc3QgdHlwZUJCb3ggPSB0eXBlTm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGNvbnN0IG5hbWVCQm94ID0gbmFtZU5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgICBtYXhUeXBlV2lkdGggPSBNYXRoLm1heChtYXhUeXBlV2lkdGgsIHR5cGVCQm94LndpZHRoKTtcbiAgICBtYXhOYW1lV2lkdGggPSBNYXRoLm1heChtYXhOYW1lV2lkdGgsIG5hbWVCQm94LndpZHRoKTtcbiAgICBub2RlSGVpZ2h0ID0gTWF0aC5tYXgodHlwZUJCb3guaGVpZ2h0LCBuYW1lQkJveC5oZWlnaHQpO1xuICAgIGlmIChoYXNLZXlUeXBlKSB7XG4gICAgICBjb25zdCBrZXlUeXBlTm9kZVRleHQgPSBpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0ICE9PSB2b2lkIDAgPyBpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0LmpvaW4oXCIsXCIpIDogXCJcIjtcbiAgICAgIGNvbnN0IGtleVR5cGVOb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCBgJHthdHRyUHJlZml4fS1rZXlgKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5zdHlsZShcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJsZWZ0XCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgYXR0ckZvbnRTaXplICsgXCJweFwiKS50ZXh0KGtleVR5cGVOb2RlVGV4dCk7XG4gICAgICBhdHRyaWJ1dGVOb2RlLmtuID0ga2V5VHlwZU5vZGU7XG4gICAgICBjb25zdCBrZXlUeXBlQkJveCA9IGtleVR5cGVOb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICBtYXhLZXlXaWR0aCA9IE1hdGgubWF4KG1heEtleVdpZHRoLCBrZXlUeXBlQkJveC53aWR0aCk7XG4gICAgICBub2RlSGVpZ2h0ID0gTWF0aC5tYXgobm9kZUhlaWdodCwga2V5VHlwZUJCb3guaGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKGhhc0NvbW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCBgJHthdHRyUHJlZml4fS1jb21tZW50YCkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibGVmdFwiKS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGdldENvbmZpZygpLmZvbnRGYW1pbHkpLnN0eWxlKFwiZm9udC1zaXplXCIsIGF0dHJGb250U2l6ZSArIFwicHhcIikudGV4dChpdGVtLmF0dHJpYnV0ZUNvbW1lbnQgfHwgXCJcIik7XG4gICAgICBhdHRyaWJ1dGVOb2RlLmNuID0gY29tbWVudE5vZGU7XG4gICAgICBjb25zdCBjb21tZW50Tm9kZUJCb3ggPSBjb21tZW50Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgbWF4Q29tbWVudFdpZHRoID0gTWF0aC5tYXgobWF4Q29tbWVudFdpZHRoLCBjb21tZW50Tm9kZUJCb3gud2lkdGgpO1xuICAgICAgbm9kZUhlaWdodCA9IE1hdGgubWF4KG5vZGVIZWlnaHQsIGNvbW1lbnROb2RlQkJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBhdHRyaWJ1dGVOb2RlLmhlaWdodCA9IG5vZGVIZWlnaHQ7XG4gICAgYXR0cmlidXRlTm9kZXMucHVzaChhdHRyaWJ1dGVOb2RlKTtcbiAgICBjdW11bGF0aXZlSGVpZ2h0ICs9IG5vZGVIZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMjtcbiAgICBhdHRyTnVtICs9IDE7XG4gIH0pO1xuICBsZXQgd2lkdGhQYWRkaW5nRmFjdG9yID0gNDtcbiAgaWYgKGhhc0tleVR5cGUpIHtcbiAgICB3aWR0aFBhZGRpbmdGYWN0b3IgKz0gMjtcbiAgfVxuICBpZiAoaGFzQ29tbWVudCkge1xuICAgIHdpZHRoUGFkZGluZ0ZhY3RvciArPSAyO1xuICB9XG4gIGNvbnN0IG1heFdpZHRoID0gbWF4VHlwZVdpZHRoICsgbWF4TmFtZVdpZHRoICsgbWF4S2V5V2lkdGggKyBtYXhDb21tZW50V2lkdGg7XG4gIGNvbnN0IGJCb3ggPSB7XG4gICAgd2lkdGg6IE1hdGgubWF4KFxuICAgICAgY29uZi5taW5FbnRpdHlXaWR0aCxcbiAgICAgIE1hdGgubWF4KFxuICAgICAgICBsYWJlbEJCb3gud2lkdGggKyBjb25mLmVudGl0eVBhZGRpbmcgKiAyLFxuICAgICAgICBtYXhXaWR0aCArIHdpZHRoUGFkZGluZyAqIHdpZHRoUGFkZGluZ0ZhY3RvclxuICAgICAgKVxuICAgICksXG4gICAgaGVpZ2h0OiBhdHRyaWJ1dGVzLmxlbmd0aCA+IDAgPyBjdW11bGF0aXZlSGVpZ2h0IDogTWF0aC5tYXgoY29uZi5taW5FbnRpdHlIZWlnaHQsIGxhYmVsQkJveC5oZWlnaHQgKyBjb25mLmVudGl0eVBhZGRpbmcgKiAyKVxuICB9O1xuICBpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc3BhcmVDb2x1bW5XaWR0aCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIChiQm94LndpZHRoIC0gbWF4V2lkdGggLSB3aWR0aFBhZGRpbmcgKiB3aWR0aFBhZGRpbmdGYWN0b3IpIC8gKHdpZHRoUGFkZGluZ0ZhY3RvciAvIDIpXG4gICAgKTtcbiAgICBlbnRpdHlUZXh0Tm9kZS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKFwiICsgYkJveC53aWR0aCAvIDIgKyBcIixcIiArIChoZWlnaHRQYWRkaW5nICsgbGFiZWxCQm94LmhlaWdodCAvIDIpICsgXCIpXCJcbiAgICApO1xuICAgIGxldCBoZWlnaHRPZmZzZXQgPSBsYWJlbEJCb3guaGVpZ2h0ICsgaGVpZ2h0UGFkZGluZyAqIDI7XG4gICAgbGV0IGF0dHJpYlN0eWxlID0gXCJhdHRyaWJ1dGVCb3hPZGRcIjtcbiAgICBhdHRyaWJ1dGVOb2Rlcy5mb3JFYWNoKChhdHRyaWJ1dGVOb2RlKSA9PiB7XG4gICAgICBjb25zdCBhbGlnblkgPSBoZWlnaHRPZmZzZXQgKyBoZWlnaHRQYWRkaW5nICsgYXR0cmlidXRlTm9kZS5oZWlnaHQgLyAyO1xuICAgICAgYXR0cmlidXRlTm9kZS50bi5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgd2lkdGhQYWRkaW5nICsgXCIsXCIgKyBhbGlnblkgKyBcIilcIik7XG4gICAgICBjb25zdCB0eXBlUmVjdCA9IGdyb3VwTm9kZS5pbnNlcnQoXCJyZWN0XCIsIFwiI1wiICsgYXR0cmlidXRlTm9kZS50bi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7YXR0cmliU3R5bGV9YCwgdHJ1ZSkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgaGVpZ2h0T2Zmc2V0KS5hdHRyKFwid2lkdGhcIiwgbWF4VHlwZVdpZHRoICsgd2lkdGhQYWRkaW5nICogMiArIHNwYXJlQ29sdW1uV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgYXR0cmlidXRlTm9kZS5oZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMik7XG4gICAgICBjb25zdCBuYW1lWE9mZnNldCA9IHBhcnNlRmxvYXQodHlwZVJlY3QuYXR0cihcInhcIikpICsgcGFyc2VGbG9hdCh0eXBlUmVjdC5hdHRyKFwid2lkdGhcIikpO1xuICAgICAgYXR0cmlidXRlTm9kZS5ubi5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArIChuYW1lWE9mZnNldCArIHdpZHRoUGFkZGluZykgKyBcIixcIiArIGFsaWduWSArIFwiKVwiXG4gICAgICApO1xuICAgICAgY29uc3QgbmFtZVJlY3QgPSBncm91cE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGF0dHJpYnV0ZU5vZGUubm4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2F0dHJpYlN0eWxlfWAsIHRydWUpLmF0dHIoXCJ4XCIsIG5hbWVYT2Zmc2V0KS5hdHRyKFwieVwiLCBoZWlnaHRPZmZzZXQpLmF0dHIoXCJ3aWR0aFwiLCBtYXhOYW1lV2lkdGggKyB3aWR0aFBhZGRpbmcgKiAyICsgc3BhcmVDb2x1bW5XaWR0aCkuYXR0cihcImhlaWdodFwiLCBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyKTtcbiAgICAgIGxldCBrZXlUeXBlQW5kQ29tbWVudFhPZmZzZXQgPSBwYXJzZUZsb2F0KG5hbWVSZWN0LmF0dHIoXCJ4XCIpKSArIHBhcnNlRmxvYXQobmFtZVJlY3QuYXR0cihcIndpZHRoXCIpKTtcbiAgICAgIGlmIChoYXNLZXlUeXBlKSB7XG4gICAgICAgIGF0dHJpYnV0ZU5vZGUua24uYXR0cihcbiAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGtleVR5cGVBbmRDb21tZW50WE9mZnNldCArIHdpZHRoUGFkZGluZykgKyBcIixcIiArIGFsaWduWSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleVR5cGVSZWN0ID0gZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBhdHRyaWJ1dGVOb2RlLmtuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthdHRyaWJTdHlsZX1gLCB0cnVlKS5hdHRyKFwieFwiLCBrZXlUeXBlQW5kQ29tbWVudFhPZmZzZXQpLmF0dHIoXCJ5XCIsIGhlaWdodE9mZnNldCkuYXR0cihcIndpZHRoXCIsIG1heEtleVdpZHRoICsgd2lkdGhQYWRkaW5nICogMiArIHNwYXJlQ29sdW1uV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgYXR0cmlidXRlTm9kZS5oZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMik7XG4gICAgICAgIGtleVR5cGVBbmRDb21tZW50WE9mZnNldCA9IHBhcnNlRmxvYXQoa2V5VHlwZVJlY3QuYXR0cihcInhcIikpICsgcGFyc2VGbG9hdChrZXlUeXBlUmVjdC5hdHRyKFwid2lkdGhcIikpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc0NvbW1lbnQpIHtcbiAgICAgICAgYXR0cmlidXRlTm9kZS5jbi5hdHRyKFxuICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoa2V5VHlwZUFuZENvbW1lbnRYT2Zmc2V0ICsgd2lkdGhQYWRkaW5nKSArIFwiLFwiICsgYWxpZ25ZICsgXCIpXCJcbiAgICAgICAgKTtcbiAgICAgICAgZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBhdHRyaWJ1dGVOb2RlLmNuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthdHRyaWJTdHlsZX1gLCBcInRydWVcIikuYXR0cihcInhcIiwga2V5VHlwZUFuZENvbW1lbnRYT2Zmc2V0KS5hdHRyKFwieVwiLCBoZWlnaHRPZmZzZXQpLmF0dHIoXCJ3aWR0aFwiLCBtYXhDb21tZW50V2lkdGggKyB3aWR0aFBhZGRpbmcgKiAyICsgc3BhcmVDb2x1bW5XaWR0aCkuYXR0cihcImhlaWdodFwiLCBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyKTtcbiAgICAgIH1cbiAgICAgIGhlaWdodE9mZnNldCArPSBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyO1xuICAgICAgYXR0cmliU3R5bGUgPSBhdHRyaWJTdHlsZSA9PT0gXCJhdHRyaWJ1dGVCb3hPZGRcIiA/IFwiYXR0cmlidXRlQm94RXZlblwiIDogXCJhdHRyaWJ1dGVCb3hPZGRcIjtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiQm94LmhlaWdodCA9IE1hdGgubWF4KGNvbmYubWluRW50aXR5SGVpZ2h0LCBjdW11bGF0aXZlSGVpZ2h0KTtcbiAgICBlbnRpdHlUZXh0Tm9kZS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgYkJveC53aWR0aCAvIDIgKyBcIixcIiArIGJCb3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICByZXR1cm4gYkJveDtcbn0sIFwiZHJhd0F0dHJpYnV0ZXNcIik7XG52YXIgZHJhd0VudGl0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdmdOb2RlLCBlbnRpdGllczIsIGdyYXBoKSB7XG4gIGNvbnN0IGtleXMgPSBbLi4uZW50aXRpZXMyLmtleXMoKV07XG4gIGxldCBmaXJzdE9uZTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGVudGl0eU5hbWUpIHtcbiAgICBjb25zdCBlbnRpdHlJZCA9IGdlbmVyYXRlSWQoZW50aXR5TmFtZSwgXCJlbnRpdHlcIik7XG4gICAgZW50aXR5TmFtZUlkcy5zZXQoZW50aXR5TmFtZSwgZW50aXR5SWQpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgZW50aXR5SWQpO1xuICAgIGZpcnN0T25lID0gZmlyc3RPbmUgPT09IHZvaWQgMCA/IGVudGl0eUlkIDogZmlyc3RPbmU7XG4gICAgY29uc3QgdGV4dElkID0gXCJ0ZXh0LVwiICsgZW50aXR5SWQ7XG4gICAgY29uc3QgdGV4dE5vZGUgPSBncm91cE5vZGUuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiZXIgZW50aXR5TGFiZWxcIiwgdHJ1ZSkuYXR0cihcImlkXCIsIHRleHRJZCkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgY29uZi5mb250U2l6ZSArIFwicHhcIikudGV4dChlbnRpdGllczIuZ2V0KGVudGl0eU5hbWUpLmFsaWFzID8/IGVudGl0eU5hbWUpO1xuICAgIGNvbnN0IHsgd2lkdGg6IGVudGl0eVdpZHRoLCBoZWlnaHQ6IGVudGl0eUhlaWdodCB9ID0gZHJhd0F0dHJpYnV0ZXMoXG4gICAgICBncm91cE5vZGUsXG4gICAgICB0ZXh0Tm9kZSxcbiAgICAgIGVudGl0aWVzMi5nZXQoZW50aXR5TmFtZSkuYXR0cmlidXRlc1xuICAgICk7XG4gICAgY29uc3QgcmVjdE5vZGUgPSBncm91cE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIHRleHRJZCkuY2xhc3NlZChcImVyIGVudGl0eUJveFwiLCB0cnVlKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5hdHRyKFwid2lkdGhcIiwgZW50aXR5V2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgZW50aXR5SGVpZ2h0KTtcbiAgICBjb25zdCByZWN0QkJveCA9IHJlY3ROb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgZ3JhcGguc2V0Tm9kZShlbnRpdHlJZCwge1xuICAgICAgd2lkdGg6IHJlY3RCQm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWN0QkJveC5oZWlnaHQsXG4gICAgICBzaGFwZTogXCJyZWN0XCIsXG4gICAgICBpZDogZW50aXR5SWRcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmaXJzdE9uZTtcbn0sIFwiZHJhd0VudGl0aWVzXCIpO1xudmFyIGFkanVzdEVudGl0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdmdOb2RlLCBncmFwaCkge1xuICBncmFwaC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIGlmICh2ICE9PSB2b2lkIDAgJiYgZ3JhcGgubm9kZSh2KSAhPT0gdm9pZCAwKSB7XG4gICAgICBzdmdOb2RlLnNlbGVjdChcIiNcIiArIHYpLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKSArIFwiLFwiICsgKGdyYXBoLm5vZGUodikueSAtIGdyYXBoLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0sIFwiYWRqdXN0RW50aXRpZXNcIik7XG52YXIgZ2V0RWRnZU5hbWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHJlbCkge1xuICByZXR1cm4gKHJlbC5lbnRpdHlBICsgcmVsLnJvbGVBICsgcmVsLmVudGl0eUIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcbn0sIFwiZ2V0RWRnZU5hbWVcIik7XG52YXIgYWRkUmVsYXRpb25zaGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocmVsYXRpb25zaGlwczIsIGcpIHtcbiAgcmVsYXRpb25zaGlwczIuZm9yRWFjaChmdW5jdGlvbihyKSB7XG4gICAgZy5zZXRFZGdlKFxuICAgICAgZW50aXR5TmFtZUlkcy5nZXQoci5lbnRpdHlBKSxcbiAgICAgIGVudGl0eU5hbWVJZHMuZ2V0KHIuZW50aXR5QiksXG4gICAgICB7IHJlbGF0aW9uc2hpcDogciB9LFxuICAgICAgZ2V0RWRnZU5hbWUocilcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIHJlbGF0aW9uc2hpcHMyO1xufSwgXCJhZGRSZWxhdGlvbnNoaXBzXCIpO1xudmFyIHJlbENudCA9IDA7XG52YXIgZHJhd1JlbGF0aW9uc2hpcEZyb21MYXlvdXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN2ZywgcmVsLCBnLCBpbnNlcnQsIGRpYWdPYmopIHtcbiAgcmVsQ250Kys7XG4gIGNvbnN0IGVkZ2UgPSBnLmVkZ2UoXG4gICAgZW50aXR5TmFtZUlkcy5nZXQocmVsLmVudGl0eUEpLFxuICAgIGVudGl0eU5hbWVJZHMuZ2V0KHJlbC5lbnRpdHlCKSxcbiAgICBnZXRFZGdlTmFtZShyZWwpXG4gICk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KS5jdXJ2ZShjdXJ2ZUJhc2lzKTtcbiAgY29uc3Qgc3ZnUGF0aCA9IHN2Zy5pbnNlcnQoXCJwYXRoXCIsIFwiI1wiICsgaW5zZXJ0KS5jbGFzc2VkKFwiZXIgcmVsYXRpb25zaGlwTGluZVwiLCB0cnVlKS5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24oZWRnZS5wb2ludHMpKS5zdHlsZShcInN0cm9rZVwiLCBjb25mLnN0cm9rZSkuc3R5bGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgaWYgKHJlbC5yZWxTcGVjLnJlbFR5cGUgPT09IGRpYWdPYmouZGIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjgsOFwiKTtcbiAgfVxuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIHN3aXRjaCAocmVsLnJlbFNwZWMuY2FyZEEpIHtcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBlck1hcmtlcnNfZGVmYXVsdC5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EICsgXCIpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EICsgXCIpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLk9ORV9PUl9NT1JFX0VORCArIFwiKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGlhZ09iai5kYi5DYXJkaW5hbGl0eS5PTkxZX09ORTpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5PTkxZX09ORV9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLk1EX1BBUkVOVF9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgfVxuICBzd2l0Y2ggKHJlbC5yZWxTcGVjLmNhcmRCKSB7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUICsgXCIpXCJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9TVEFSVCArIFwiKVwiXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUICsgXCIpXCJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5PTkxZX09ORV9TVEFSVCArIFwiKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGlhZ09iai5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5NRF9QQVJFTlRfU1RBUlQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgfVxuICBjb25zdCBsZW4gPSBzdmdQYXRoLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpO1xuICBjb25zdCBsYWJlbFBvaW50ID0gc3ZnUGF0aC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChsZW4gKiAwLjUpO1xuICBjb25zdCBsYWJlbElkID0gXCJyZWxcIiArIHJlbENudDtcbiAgY29uc3QgbGFiZWxUZXh0ID0gcmVsLnJvbGVBLnNwbGl0KC88YnIgP1xcLz4vZyk7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHN2Zy5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJlciByZWxhdGlvbnNoaXBMYWJlbFwiLCB0cnVlKS5hdHRyKFwiaWRcIiwgbGFiZWxJZCkuYXR0cihcInhcIiwgbGFiZWxQb2ludC54KS5hdHRyKFwieVwiLCBsYWJlbFBvaW50LnkpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGdldENvbmZpZygpLmZvbnRGYW1pbHkpLnN0eWxlKFwiZm9udC1zaXplXCIsIGNvbmYuZm9udFNpemUgKyBcInB4XCIpO1xuICBpZiAobGFiZWxUZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgbGFiZWxOb2RlLnRleHQocmVsLnJvbGVBKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaXJzdFNoaWZ0ID0gLShsYWJlbFRleHQubGVuZ3RoIC0gMSkgKiAwLjU7XG4gICAgbGFiZWxUZXh0LmZvckVhY2goKHR4dCwgaSkgPT4ge1xuICAgICAgbGFiZWxOb2RlLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIGxhYmVsUG9pbnQueCkuYXR0cihcImR5XCIsIGAke2kgPT09IDAgPyBmaXJzdFNoaWZ0IDogMX1lbWApLnRleHQodHh0KTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBsYWJlbEJCb3ggPSBsYWJlbE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgc3ZnLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBsYWJlbElkKS5jbGFzc2VkKFwiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3hcIiwgdHJ1ZSkuYXR0cihcInhcIiwgbGFiZWxQb2ludC54IC0gbGFiZWxCQm94LndpZHRoIC8gMikuYXR0cihcInlcIiwgbGFiZWxQb2ludC55IC0gbGFiZWxCQm94LmhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBsYWJlbEJCb3gud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgbGFiZWxCQm94LmhlaWdodCk7XG59LCBcImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0XCIpO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25mID0gZ2V0Q29uZmlnKCkuZXI7XG4gIGxvZy5pbmZvKFwiRHJhd2luZyBFUiBkaWFncmFtXCIpO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICBlck1hcmtlcnNfZGVmYXVsdC5pbnNlcnRNYXJrZXJzKHN2ZywgY29uZik7XG4gIGxldCBnO1xuICBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGRpcmVjdGVkOiB0cnVlLFxuICAgIGNvbXBvdW5kOiBmYWxzZVxuICB9KS5zZXRHcmFwaCh7XG4gICAgcmFua2RpcjogY29uZi5sYXlvdXREaXJlY3Rpb24sXG4gICAgbWFyZ2lueDogMjAsXG4gICAgbWFyZ2lueTogMjAsXG4gICAgbm9kZXNlcDogMTAwLFxuICAgIGVkZ2VzZXA6IDEwMCxcbiAgICByYW5rc2VwOiAxMDBcbiAgfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge307XG4gIH0pO1xuICBjb25zdCBmaXJzdEVudGl0eSA9IGRyYXdFbnRpdGllcyhzdmcsIGRpYWdPYmouZGIuZ2V0RW50aXRpZXMoKSwgZyk7XG4gIGNvbnN0IHJlbGF0aW9uc2hpcHMyID0gYWRkUmVsYXRpb25zaGlwcyhkaWFnT2JqLmRiLmdldFJlbGF0aW9uc2hpcHMoKSwgZyk7XG4gIGRhZ3JlTGF5b3V0KGcpO1xuICBhZGp1c3RFbnRpdGllcyhzdmcsIGcpO1xuICByZWxhdGlvbnNoaXBzMi5mb3JFYWNoKGZ1bmN0aW9uKHJlbCkge1xuICAgIGRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0KHN2ZywgcmVsLCBnLCBmaXJzdEVudGl0eSwgZGlhZ09iaik7XG4gIH0pO1xuICBjb25zdCBwYWRkaW5nID0gY29uZi5kaWFncmFtUGFkZGluZztcbiAgdXRpbHNfZGVmYXVsdC5pbnNlcnRUaXRsZShzdmcsIFwiZW50aXR5VGl0bGVUZXh0XCIsIGNvbmYudGl0bGVUb3BNYXJnaW4sIGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO1xuICBjb25zdCBzdmdCb3VuZHMgPSBzdmcubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgd2lkdGggPSBzdmdCb3VuZHMud2lkdGggKyBwYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBgJHtzdmdCb3VuZHMueCAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLnkgLSBwYWRkaW5nfSAke3dpZHRofSAke2hlaWdodH1gKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBNRVJNQUlEX0VSRElBR1JBTV9VVUlEID0gXCIyOGU5ZjlkYi0zYzhkLTVhYTUtOWZhZi00NDI4NmFlNTkzN2NcIjtcbmZ1bmN0aW9uIGdlbmVyYXRlSWQoc3RyID0gXCJcIiwgcHJlZml4ID0gXCJcIikge1xuICBjb25zdCBzaW1wbGlmaWVkU3RyID0gc3RyLnJlcGxhY2UoQkFEX0lEX0NIQVJTX1JFR0VYUCwgXCJcIik7XG4gIHJldHVybiBgJHtzdHJXaXRoSHlwaGVuKHByZWZpeCl9JHtzdHJXaXRoSHlwaGVuKHNpbXBsaWZpZWRTdHIpfSR7dXVpZDUoXG4gICAgc3RyLFxuICAgIE1FUk1BSURfRVJESUFHUkFNX1VVSURcbiAgKX1gO1xufVxuX19uYW1lKGdlbmVyYXRlSWQsIFwiZ2VuZXJhdGVJZFwiKTtcbmZ1bmN0aW9uIHN0cldpdGhIeXBoZW4oc3RyID0gXCJcIikge1xuICByZXR1cm4gc3RyLmxlbmd0aCA+IDAgPyBgJHtzdHJ9LWAgOiBcIlwiO1xufVxuX19uYW1lKHN0cldpdGhIeXBoZW4sIFwic3RyV2l0aEh5cGhlblwiKTtcbnZhciBlclJlbmRlcmVyX2RlZmF1bHQgPSB7XG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9lci9zdHlsZXMuanNcbnZhciBnZXRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zKSA9PiBgXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hPZGQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveEV2ZW4ge1xuICAgIGZpbGw6ICAke29wdGlvbnMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIH1cblxuICAucmVsYXRpb25zaGlwTGFiZWxCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXJ0aWFyeUNvbG9yfTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLnRlcnRpYXJ5Q29sb3J9O1xuICAgICAgcmVjdCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIH1cbiAgfVxuXG4gICAgLnJlbGF0aW9uc2hpcExpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICB9XG5cbiAgLmVudGl0eVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH0gICAgXG4gICNNRF9QQVJFTlRfU1RBUlQge1xuICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gICNNRF9QQVJFTlRfRU5EIHtcbiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgfVxuICBcbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvZXJEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBlckRpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IGVyRGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IGVyUmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIF9fbmFtZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NvbW1vbi9wb3B1bGF0ZUNvbW1vbkRiLnRzXG5mdW5jdGlvbiBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIpIHtcbiAgaWYgKGFzdC5hY2NEZXNjcikge1xuICAgIGRiLnNldEFjY0Rlc2NyaXB0aW9uPy4oYXN0LmFjY0Rlc2NyKTtcbiAgfVxuICBpZiAoYXN0LmFjY1RpdGxlKSB7XG4gICAgZGIuc2V0QWNjVGl0bGU/Lihhc3QuYWNjVGl0bGUpO1xuICB9XG4gIGlmIChhc3QudGl0bGUpIHtcbiAgICBkYi5zZXREaWFncmFtVGl0bGU/Lihhc3QudGl0bGUpO1xuICB9XG59XG5fX25hbWUocG9wdWxhdGVDb21tb25EYiwgXCJwb3B1bGF0ZUNvbW1vbkRiXCIpO1xuXG5leHBvcnQge1xuICBwb3B1bGF0ZUNvbW1vbkRiXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy91dGlscy9pbXBlcmF0aXZlU3RhdGUudHNcbnZhciBJbXBlcmF0aXZlU3RhdGUgPSBjbGFzcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gaW5pdCAtIEZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgZGVmYXVsdCBzdGF0ZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGluaXQpIHtcbiAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIHRoaXMucmVjb3JkcyA9IHRoaXMuaW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiSW1wZXJhdGl2ZVN0YXRlXCIpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVjb3JkcyA9IHRoaXMuaW5pdCgpO1xuICB9XG59O1xuXG5leHBvcnQge1xuICBJbXBlcmF0aXZlU3RhdGVcbn07XG4iLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzdE5vZGUob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqLiR0eXBlID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmouJHJlZlRleHQgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN0Tm9kZURlc2NyaXB0aW9uKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGxcbiAgICAgICAgJiYgdHlwZW9mIG9iai5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAmJiB0eXBlb2Ygb2JqLnR5cGUgPT09ICdzdHJpbmcnXG4gICAgICAgICYmIHR5cGVvZiBvYmoucGF0aCA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNMaW5raW5nRXJyb3Iob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbFxuICAgICAgICAmJiBpc0FzdE5vZGUob2JqLmNvbnRhaW5lcilcbiAgICAgICAgJiYgaXNSZWZlcmVuY2Uob2JqLnJlZmVyZW5jZSlcbiAgICAgICAgJiYgdHlwZW9mIG9iai5tZXNzYWdlID09PSAnc3RyaW5nJztcbn1cbi8qKlxuICogQW4gYWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBc3RSZWZsZWN0aW9ufSBpbnRlcmZhY2UuXG4gKiBTZXJ2ZXMgdG8gY2FjaGUgc3VidHlwZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgdGhyb3VnaG91dCBkaWZmZXJlbnQgcGFydHMgb2YgTGFuZ2l1bS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0QXN0UmVmbGVjdGlvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3VidHlwZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hbGxTdWJ0eXBlcyA9IHt9O1xuICAgIH1cbiAgICBpc0luc3RhbmNlKG5vZGUsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGlzQXN0Tm9kZShub2RlKSAmJiB0aGlzLmlzU3VidHlwZShub2RlLiR0eXBlLCB0eXBlKTtcbiAgICB9XG4gICAgaXNTdWJ0eXBlKHN1YnR5cGUsIHN1cGVydHlwZSkge1xuICAgICAgICBpZiAoc3VidHlwZSA9PT0gc3VwZXJ0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmVzdGVkID0gdGhpcy5zdWJ0eXBlc1tzdWJ0eXBlXTtcbiAgICAgICAgaWYgKCFuZXN0ZWQpIHtcbiAgICAgICAgICAgIG5lc3RlZCA9IHRoaXMuc3VidHlwZXNbc3VidHlwZV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdGluZyA9IG5lc3RlZFtzdXBlcnR5cGVdO1xuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb21wdXRlSXNTdWJ0eXBlKHN1YnR5cGUsIHN1cGVydHlwZSk7XG4gICAgICAgICAgICBuZXN0ZWRbc3VwZXJ0eXBlXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QWxsU3ViVHlwZXModHlwZSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWxsU3VidHlwZXNbdHlwZV07XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWxsVHlwZXMgPSB0aGlzLmdldEFsbFR5cGVzKCk7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb3NzaWJsZVN1YlR5cGUgb2YgYWxsVHlwZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N1YnR5cGUocG9zc2libGVTdWJUeXBlLCB0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKHBvc3NpYmxlU3ViVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbGxTdWJ0eXBlc1t0eXBlXSA9IHR5cGVzO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9zaXRlQ3N0Tm9kZShub2RlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobm9kZS5jb250ZW50KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xlYWZDc3ROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGUgIT09IG51bGwgJiYgdHlwZW9mIG5vZGUudG9rZW5UeXBlID09PSAnb2JqZWN0Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Jvb3RDc3ROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gaXNDb21wb3NpdGVDc3ROb2RlKG5vZGUpICYmIHR5cGVvZiBub2RlLmZ1bGxUZXh0ID09PSAnc3RyaW5nJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN5bnRheC10cmVlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgU3RyZWFtYCB3b3JrcyB3aXRoIHR3byBpbnB1dCBmdW5jdGlvbnM6XG4gKiAgLSBUaGUgZmlyc3QgZnVuY3Rpb24gY3JlYXRlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhbiBpdGVyYXRpb24uXG4gKiAgLSBUaGUgc2Vjb25kIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnQgc3RhdGUgYXMgYXJndW1lbnQgYW5kIHJldHVybnMgYW4gYEl0ZXJhdG9yUmVzdWx0YC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmVhbUltcGwge1xuICAgIGNvbnN0cnVjdG9yKHN0YXJ0Rm4sIG5leHRGbikge1xuICAgICAgICB0aGlzLnN0YXJ0Rm4gPSBzdGFydEZuO1xuICAgICAgICB0aGlzLm5leHRGbiA9IG5leHRGbjtcbiAgICB9XG4gICAgaXRlcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhcnRGbigpLFxuICAgICAgICAgICAgbmV4dDogKCkgPT4gdGhpcy5uZXh0Rm4oaXRlcmF0b3Iuc3RhdGUpLFxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpID0+IGl0ZXJhdG9yXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpdGVyYXRvcjtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCk7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVyYXRvci5uZXh0KCkuZG9uZSk7XG4gICAgfVxuICAgIGNvdW50KCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAobmV4dC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV4dC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKCFuZXh0LmRvbmUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB0b1NldCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcyk7XG4gICAgfVxuICAgIHRvTWFwKGtleUZuLCB2YWx1ZUZuKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5U3RyZWFtID0gdGhpcy5tYXAoZWxlbWVudCA9PiBbXG4gICAgICAgICAgICBrZXlGbiA/IGtleUZuKGVsZW1lbnQpIDogZWxlbWVudCxcbiAgICAgICAgICAgIHZhbHVlRm4gPyB2YWx1ZUZuKGVsZW1lbnQpIDogZWxlbWVudFxuICAgICAgICBdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAoZW50cnlTdHJlYW0pO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9pbigpO1xuICAgIH1cbiAgICBjb25jYXQob3RoZXIpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBvdGhlcltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtSW1wbCgoKSA9PiAoeyBmaXJzdDogdGhpcy5zdGFydEZuKCksIGZpcnN0RG9uZTogZmFsc2UgfSksIHN0YXRlID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLmZpcnN0RG9uZSkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5uZXh0Rm4oc3RhdGUuZmlyc3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoIXJlc3VsdC5kb25lKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5maXJzdERvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAoIXJlc3VsdC5kb25lKTtcbiAgICAgICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGpvaW4oc2VwYXJhdG9yID0gJywnKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgbGV0IGFkZFNlcGFyYXRvciA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzZXBhcmF0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlICs9IHRvU3RyaW5nKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRTZXBhcmF0b3IgPSB0cnVlO1xuICAgICAgICB9IHdoaWxlICghcmVzdWx0LmRvbmUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGluZGV4T2Yoc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4ID0gMCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gZnJvbUluZGV4ICYmIG5leHQudmFsdWUgPT09IHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGV2ZXJ5KHByZWRpY2F0ZSkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShuZXh0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNvbWUocHJlZGljYXRlKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUobmV4dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3JFYWNoKGNhbGxiYWNrZm4pIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgY2FsbGJhY2tmbihuZXh0LnZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXAoY2FsbGJhY2tmbikge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwodGhpcy5zdGFydEZuLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHRoaXMubmV4dEZuKHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBjYWxsYmFja2ZuKHZhbHVlKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwodGhpcy5zdGFydEZuLCBzdGF0ZSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubmV4dEZuKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lICYmIHByZWRpY2F0ZShyZXN1bHQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAoIXJlc3VsdC5kb25lKTtcbiAgICAgICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbk51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZSA9PiBlICE9PSB1bmRlZmluZWQgJiYgZSAhPT0gbnVsbCk7XG4gICAgfVxuICAgIHJlZHVjZShjYWxsYmFja2ZuLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gbmV4dC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFja2ZuKHByZXZpb3VzVmFsdWUsIG5leHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAgICB9XG4gICAgcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3Vyc2l2ZVJlZHVjZSh0aGlzLml0ZXJhdG9yKCksIGNhbGxiYWNrZm4sIGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIHJlY3Vyc2l2ZVJlZHVjZShpdGVyYXRvciwgY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMucmVjdXJzaXZlUmVkdWNlKGl0ZXJhdG9yLCBjYWxsYmFja2ZuLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2tmbihwcmV2aW91c1ZhbHVlLCBuZXh0LnZhbHVlKTtcbiAgICB9XG4gICAgZmluZChwcmVkaWNhdGUpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShuZXh0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kSW5kZXgocHJlZGljYXRlKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUobmV4dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKG5leHQudmFsdWUgPT09IHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmbGF0TWFwKGNhbGxiYWNrZm4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IHRoaXM6IHRoaXMuc3RhcnRGbigpIH0pLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaXRlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHN0YXRlLml0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSB0aGlzLm5leHRGbihzdGF0ZS50aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gY2FsbGJhY2tmbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0ZXJhYmxlKG1hcHBlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLml0ZXJhdG9yID0gbWFwcGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogbWFwcGVkIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzdGF0ZS5pdGVyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gRE9ORV9SRVNVTFQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmbGF0KGRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZXB0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlcHRoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGRlcHRoID4gMSA/IHRoaXMuZmxhdChkZXB0aCAtIDEpIDogdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IHRoaXM6IHN0cmVhbS5zdGFydEZuKCkgfSksIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pdGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gc3RhdGUuaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pdGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHN0cmVhbS5uZXh0Rm4oc3RhdGUudGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3IgPSB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzdGF0ZS5pdGVyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gRE9ORV9SRVNVTFQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoZWFkKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gICAgdGFpbChza2lwQ291bnQgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtSW1wbCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhcnRGbigpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBza2lwQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm5leHRGbihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LCB0aGlzLm5leHRGbik7XG4gICAgfVxuICAgIGxpbWl0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IHNpemU6IDAsIHN0YXRlOiB0aGlzLnN0YXJ0Rm4oKSB9KSwgc3RhdGUgPT4ge1xuICAgICAgICAgICAgc3RhdGUuc2l6ZSsrO1xuICAgICAgICAgICAgaWYgKHN0YXRlLnNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dEZuKHN0YXRlLnN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRpc3RpbmN0KGJ5KSB7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBieSA/IGJ5KGUpIDogZTtcbiAgICAgICAgICAgIGlmIChzZXQuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldC5hZGQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjbHVkZShvdGhlciwga2V5KSB7XG4gICAgICAgIGNvbnN0IG90aGVyS2V5U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb3RoZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ga2V5ID8ga2V5KGl0ZW0pIDogaXRlbTtcbiAgICAgICAgICAgIG90aGVyS2V5U2V0LmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3duS2V5ID0ga2V5ID8ga2V5KGUpIDogZTtcbiAgICAgICAgICAgIHJldHVybiAhb3RoZXJLZXlTZXQuaGFzKG93bktleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvU3RyaW5nKGl0ZW0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAodHlwZW9mIGl0ZW0udG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGl0ZW0udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVtKTtcbn1cbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogQW4gZW1wdHkgc3RyZWFtIG9mIGFueSB0eXBlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUkVBTSA9IG5ldyBTdHJlYW1JbXBsKCgpID0+IHVuZGVmaW5lZCwgKCkgPT4gRE9ORV9SRVNVTFQpO1xuLyoqXG4gKiBVc2UgdGhpcyBgSXRlcmF0b3JSZXN1bHRgIHdoZW4gaW1wbGVtZW50aW5nIGEgYFN0cmVhbUltcGxgIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgZWxlbWVudHMgaW4gdGhlIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGNvbnN0IERPTkVfUkVTVUxUID0gT2JqZWN0LmZyZWV6ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmVhbSBmcm9tIG9uZSBvciBtb3JlIGl0ZXJhYmxlcyBvciBhcnJheS1saWtlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbSguLi5jb2xsZWN0aW9ucykge1xuICAgIGlmIChjb2xsZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zWzBdO1xuICAgICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIFN0cmVhbUltcGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwoKCkgPT4gY29sbGVjdGlvbltTeW1ib2wuaXRlcmF0b3JdKCksIChpdGVyYXRvcikgPT4gaXRlcmF0b3IubmV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNvbGxlY3Rpb24ubGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IGluZGV4OiAwIH0pLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5kZXggPCBjb2xsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IGNvbGxlY3Rpb25bc3RhdGUuaW5kZXgrK10gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29sbGVjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwoKCkgPT4gKHsgY29sbEluZGV4OiAwLCBhcnJJbmRleDogMCB9KSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLml0ZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5pdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pdGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hcnJJbmRleCA8IHN0YXRlLmFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBzdGF0ZS5hcnJheVtzdGF0ZS5hcnJJbmRleCsrXSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFycmF5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jb2xsSW5kZXggPCBjb2xsZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zW3N0YXRlLmNvbGxJbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRlcmFibGUoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLml0ZXJhdG9yID0gY29sbGVjdGlvbltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sbGVjdGlvbiAmJiB0eXBlb2YgY29sbGVjdGlvbi5sZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJheSA9IGNvbGxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzdGF0ZS5pdGVyYXRvciB8fCBzdGF0ZS5hcnJheSB8fCBzdGF0ZS5jb2xsSW5kZXggPCBjb2xsZWN0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZX1NUUkVBTTtcbn1cbi8qKlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYFRyZWVTdHJlYW1gIHRha2VzIGEgcm9vdCBlbGVtZW50IGFuZCBhIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlXG4gKiBjaGlsZHJlbiBvZiBpdHMgYXJndW1lbnQuIFdoZXRoZXIgdGhlIHJvb3Qgbm9kZSBpbmNsdWRlZCBpbiB0aGUgc3RyZWFtIGlzIGNvbnRyb2xsZWQgd2l0aCB0aGVcbiAqIGBpbmNsdWRlUm9vdGAgb3B0aW9uLCB3aGljaCBkZWZhdWx0cyB0byBgZmFsc2VgLlxuICovXG5leHBvcnQgY2xhc3MgVHJlZVN0cmVhbUltcGwgZXh0ZW5kcyBTdHJlYW1JbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihyb290LCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcigoKSA9PiAoe1xuICAgICAgICAgICAgaXRlcmF0b3JzOiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmluY2x1ZGVSb290KSA/IFtbcm9vdF1bU3ltYm9sLml0ZXJhdG9yXSgpXSA6IFtjaGlsZHJlbihyb290KVtTeW1ib2wuaXRlcmF0b3JdKCldLFxuICAgICAgICAgICAgcHJ1bmVkOiBmYWxzZVxuICAgICAgICB9KSwgc3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnBydW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLml0ZXJhdG9ycy5wb3AoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5wcnVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5pdGVyYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3JzW3N0YXRlLml0ZXJhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3JzLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3JzLnB1c2goY2hpbGRyZW4obmV4dC52YWx1ZSlbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXRlcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhcnRGbigpLFxuICAgICAgICAgICAgbmV4dDogKCkgPT4gdGhpcy5uZXh0Rm4oaXRlcmF0b3Iuc3RhdGUpLFxuICAgICAgICAgICAgcHJ1bmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGF0ZS5wcnVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiBpdGVyYXRvclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXRlcmF0b3I7XG4gICAgfVxufVxuLyoqXG4gKiBBIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IHJlZHVjZSBhIHN0cmVhbSB0byBhIHNpbmdsZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHZhciBSZWR1Y3Rpb247XG4oZnVuY3Rpb24gKFJlZHVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIHN1bSBvZiBhIG51bWJlciBzdHJlYW0uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VtKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgIH1cbiAgICBSZWR1Y3Rpb24uc3VtID0gc3VtO1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIHByb2R1Y3Qgb2YgYSBudW1iZXIgc3RyZWFtLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb2R1Y3Qoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMCk7XG4gICAgfVxuICAgIFJlZHVjdGlvbi5wcm9kdWN0ID0gcHJvZHVjdDtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBtaW5pbXVtIG9mIGEgbnVtYmVyIHN0cmVhbS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgc3RyZWFtIGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1pbihzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKTtcbiAgICB9XG4gICAgUmVkdWN0aW9uLm1pbiA9IG1pbjtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBtYXhpbXVtIG9mIGEgbnVtYmVyIHN0cmVhbS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgc3RyZWFtIGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1heChzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpKTtcbiAgICB9XG4gICAgUmVkdWN0aW9uLm1heCA9IG1heDtcbn0pKFJlZHVjdGlvbiB8fCAoUmVkdWN0aW9uID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmVhbS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGlzQ29tcG9zaXRlQ3N0Tm9kZSwgaXNMZWFmQ3N0Tm9kZSwgaXNSb290Q3N0Tm9kZSB9IGZyb20gJy4uL3N5bnRheC10cmVlLmpzJztcbmltcG9ydCB7IFRyZWVTdHJlYW1JbXBsIH0gZnJvbSAnLi9zdHJlYW0uanMnO1xuLyoqXG4gKiBDcmVhdGUgYSBzdHJlYW0gb2YgYWxsIENTVCBub2RlcyB0aGF0IGFyZSBkaXJlY3RseSBhbmQgaW5kaXJlY3RseSBjb250YWluZWQgaW4gdGhlIGdpdmVuIHJvb3Qgbm9kZSxcbiAqIGluY2x1ZGluZyB0aGUgcm9vdCBub2RlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUNzdChub2RlKSB7XG4gICAgcmV0dXJuIG5ldyBUcmVlU3RyZWFtSW1wbChub2RlLCBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGlzQ29tcG9zaXRlQ3N0Tm9kZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH0sIHsgaW5jbHVkZVJvb3Q6IHRydWUgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHN0cmVhbSBvZiBhbGwgbGVhZiBub2RlcyB0aGF0IGFyZSBkaXJlY3RseSBhbmQgaW5kaXJlY3RseSBjb250YWluZWQgaW4gdGhlIGdpdmVuIHJvb3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5Dc3Qobm9kZSkge1xuICAgIHJldHVybiBzdHJlYW1Dc3Qobm9kZSkuZmlsdGVyKGlzTGVhZkNzdE5vZGUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjc3Qgbm9kZSBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NoaWxkTm9kZShjaGlsZCwgcGFyZW50KSB7XG4gICAgd2hpbGUgKGNoaWxkLmNvbnRhaW5lcikge1xuICAgICAgICBjaGlsZCA9IGNoaWxkLmNvbnRhaW5lcjtcbiAgICAgICAgaWYgKGNoaWxkID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b2tlblRvUmFuZ2UodG9rZW4pIHtcbiAgICAvLyBDaGV2cm90YWluIHVzZXMgMS1iYXNlZCBpbmRpY2VzIGV2ZXJ5d2hlcmVcbiAgICAvLyBTbyB3ZSBzdWJ0cmFjdCAxIGZyb20gZXZlcnkgdmFsdWUgdG8gYWxpZ24gd2l0aCB0aGUgTFNQXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGNoYXJhY3RlcjogdG9rZW4uc3RhcnRDb2x1bW4gLSAxLFxuICAgICAgICAgICAgbGluZTogdG9rZW4uc3RhcnRMaW5lIC0gMVxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIGNoYXJhY3RlcjogdG9rZW4uZW5kQ29sdW1uLFxuICAgICAgICAgICAgbGluZTogdG9rZW4uZW5kTGluZSAtIDFcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Eb2N1bWVudFNlZ21lbnQobm9kZSkge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB7IG9mZnNldCwgZW5kLCByYW5nZSB9ID0gbm9kZTtcbiAgICByZXR1cm4ge1xuICAgICAgICByYW5nZSxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBlbmQsXG4gICAgICAgIGxlbmd0aDogZW5kIC0gb2Zmc2V0XG4gICAgfTtcbn1cbmV4cG9ydCB2YXIgUmFuZ2VDb21wYXJpc29uO1xuKGZ1bmN0aW9uIChSYW5nZUNvbXBhcmlzb24pIHtcbiAgICBSYW5nZUNvbXBhcmlzb25bUmFuZ2VDb21wYXJpc29uW1wiQmVmb3JlXCJdID0gMF0gPSBcIkJlZm9yZVwiO1xuICAgIFJhbmdlQ29tcGFyaXNvbltSYW5nZUNvbXBhcmlzb25bXCJBZnRlclwiXSA9IDFdID0gXCJBZnRlclwiO1xuICAgIFJhbmdlQ29tcGFyaXNvbltSYW5nZUNvbXBhcmlzb25bXCJPdmVybGFwRnJvbnRcIl0gPSAyXSA9IFwiT3ZlcmxhcEZyb250XCI7XG4gICAgUmFuZ2VDb21wYXJpc29uW1JhbmdlQ29tcGFyaXNvbltcIk92ZXJsYXBCYWNrXCJdID0gM10gPSBcIk92ZXJsYXBCYWNrXCI7XG4gICAgUmFuZ2VDb21wYXJpc29uW1JhbmdlQ29tcGFyaXNvbltcIkluc2lkZVwiXSA9IDRdID0gXCJJbnNpZGVcIjtcbn0pKFJhbmdlQ29tcGFyaXNvbiB8fCAoUmFuZ2VDb21wYXJpc29uID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlUmFuZ2UocmFuZ2UsIHRvKSB7XG4gICAgaWYgKHJhbmdlLmVuZC5saW5lIDwgdG8uc3RhcnQubGluZSB8fCAocmFuZ2UuZW5kLmxpbmUgPT09IHRvLnN0YXJ0LmxpbmUgJiYgcmFuZ2UuZW5kLmNoYXJhY3RlciA8IHJhbmdlLnN0YXJ0LmNoYXJhY3RlcikpIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlQ29tcGFyaXNvbi5CZWZvcmU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlLnN0YXJ0LmxpbmUgPiB0by5lbmQubGluZSB8fCAocmFuZ2Uuc3RhcnQubGluZSA9PT0gdG8uZW5kLmxpbmUgJiYgcmFuZ2Uuc3RhcnQuY2hhcmFjdGVyID4gdG8uZW5kLmNoYXJhY3RlcikpIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlQ29tcGFyaXNvbi5BZnRlcjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRJbnNpZGUgPSByYW5nZS5zdGFydC5saW5lID4gdG8uc3RhcnQubGluZSB8fCAocmFuZ2Uuc3RhcnQubGluZSA9PT0gdG8uc3RhcnQubGluZSAmJiByYW5nZS5zdGFydC5jaGFyYWN0ZXIgPj0gdG8uc3RhcnQuY2hhcmFjdGVyKTtcbiAgICBjb25zdCBlbmRJbnNpZGUgPSByYW5nZS5lbmQubGluZSA8IHRvLmVuZC5saW5lIHx8IChyYW5nZS5lbmQubGluZSA9PT0gdG8uZW5kLmxpbmUgJiYgcmFuZ2UuZW5kLmNoYXJhY3RlciA8PSB0by5lbmQuY2hhcmFjdGVyKTtcbiAgICBpZiAoc3RhcnRJbnNpZGUgJiYgZW5kSW5zaWRlKSB7XG4gICAgICAgIHJldHVybiBSYW5nZUNvbXBhcmlzb24uSW5zaWRlO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdGFydEluc2lkZSkge1xuICAgICAgICByZXR1cm4gUmFuZ2VDb21wYXJpc29uLk92ZXJsYXBCYWNrO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlQ29tcGFyaXNvbi5PdmVybGFwRnJvbnQ7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGluUmFuZ2UocmFuZ2UsIHRvKSB7XG4gICAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVSYW5nZShyYW5nZSwgdG8pO1xuICAgIHJldHVybiBjb21wYXJpc29uID4gUmFuZ2VDb21wYXJpc29uLkFmdGVyO1xufVxuLy8gVGhlIFxccHtMfSByZWdleCBtYXRjaGVzIGFueSB1bmljb2RlIGxldHRlciBjaGFyYWN0ZXIsIGkuZS4gY2hhcmFjdGVycyBmcm9tIG5vbi1lbmdsaXNoIGFscGhhYmV0c1xuLy8gVG9nZXRoZXIgd2l0aCBcXHcgaXQgbWF0Y2hlcyBhbnkga2luZCBvZiBjaGFyYWN0ZXIgd2hpY2ggY2FuIGNvbW1vbmx5IGFwcGVhciBpbiBJRHNcbmV4cG9ydCBjb25zdCBEZWZhdWx0TmFtZVJlZ2V4cCA9IC9eW1xcd1xccHtMfV0kL3U7XG4vKipcbiAqIFBlcmZvcm1zIGBmaW5kTGVhZk5vZGVBdE9mZnNldGAgd2l0aCBhIG1pbm9yIGRpZmZlcmVuY2U6IFdoZW4gZW5jb3VudGVyaW5nIGEgY2hhcmFjdGVyIHRoYXQgbWF0Y2hlcyB0aGUgYG5hbWVSZWdleHBgIGFyZ3VtZW50LFxuICogaXQgd2lsbCBpbnN0ZWFkIHJldHVybiB0aGUgbGVhZiBub2RlIGF0IHRoZSBgb2Zmc2V0IC0gMWAgcG9zaXRpb24uXG4gKlxuICogRm9yIExTUCBzZXJ2aWNlcywgdXNlcnMgZXhwZWN0IHRoYXQgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIGVsZW1lbnQgaXMgYXZhaWxhYmxlIGlmIHRoZSBjdXJzb3IgaXMgZGlyZWN0bHkgYWZ0ZXIgdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQoY3N0Tm9kZSwgb2Zmc2V0LCBuYW1lUmVnZXhwID0gRGVmYXVsdE5hbWVSZWdleHApIHtcbiAgICBpZiAoY3N0Tm9kZSkge1xuICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxPZmZzZXQgPSBvZmZzZXQgLSBjc3ROb2RlLm9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRBdE9mZnNldCA9IGNzdE5vZGUudGV4dC5jaGFyQXQobG9jYWxPZmZzZXQpO1xuICAgICAgICAgICAgaWYgKCFuYW1lUmVnZXhwLnRlc3QodGV4dEF0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIG9mZnNldC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5kTGVhZk5vZGVBdE9mZnNldChjc3ROb2RlLCBvZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb21tZW50Tm9kZShjc3ROb2RlLCBjb21tZW50TmFtZXMpIHtcbiAgICBpZiAoY3N0Tm9kZSkge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGdldFByZXZpb3VzTm9kZShjc3ROb2RlLCB0cnVlKTtcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIGlzQ29tbWVudE5vZGUocHJldmlvdXMsIGNvbW1lbnROYW1lcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSb290Q3N0Tm9kZShjc3ROb2RlKSkge1xuICAgICAgICAgICAgLy8gR28gZnJvbSB0aGUgZmlyc3Qgbm9uLWhpZGRlbiBub2RlIHRocm91Z2ggYWxsIG5vZGVzIGluIHJldmVyc2Ugb3JkZXJcbiAgICAgICAgICAgIC8vIFdlIGRvIHRoaXMgdG8gZmluZCB0aGUgY29tbWVudCBub2RlIHdoaWNoIGRpcmVjdGx5IHByZWNlZGVzIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gY3N0Tm9kZS5jb250ZW50LmZpbmRJbmRleChlID0+ICFlLmhpZGRlbik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZW5kSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY3N0Tm9kZS5jb250ZW50W2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1lbnROb2RlKGNoaWxkLCBjb21tZW50TmFtZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1lbnROb2RlKGNzdE5vZGUsIGNvbW1lbnROYW1lcykge1xuICAgIHJldHVybiBpc0xlYWZDc3ROb2RlKGNzdE5vZGUpICYmIGNvbW1lbnROYW1lcy5pbmNsdWRlcyhjc3ROb2RlLnRva2VuVHlwZS5uYW1lKTtcbn1cbi8qKlxuICogRmluZHMgdGhlIGxlYWYgQ1NUIG5vZGUgYXQgdGhlIHNwZWNpZmllZCAwLWJhc2VkIHN0cmluZyBvZmZzZXQuXG4gKiBOb3RlIHRoYXQgdGhlIGdpdmVuIG9mZnNldCB3aWxsIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIHJldHVybmVkIGxlYWYgbm9kZS5cbiAqXG4gKiBJZiB0aGUgb2Zmc2V0IGRvZXMgbm90IHBvaW50IHRvIGEgQ1NUIG5vZGUgKGJ1dCBqdXN0IHdoaXRlIHNwYWNlKSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIG5vZGUgVGhlIENTVCBub2RlIHRvIHNlYXJjaCB0aHJvdWdoLlxuICogQHBhcmFtIG9mZnNldCBUaGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqIEByZXR1cm5zIFRoZSBDU1Qgbm9kZSBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMZWFmTm9kZUF0T2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIGlmIChpc0xlYWZDc3ROb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NvbXBvc2l0ZUNzdE5vZGUobm9kZSkpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYmluYXJ5U2VhcmNoKG5vZGUsIG9mZnNldCwgZmFsc2UpO1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZExlYWZOb2RlQXRPZmZzZXQoc2VhcmNoUmVzdWx0LCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEZpbmRzIHRoZSBsZWFmIENTVCBub2RlIGF0IHRoZSBzcGVjaWZpZWQgMC1iYXNlZCBzdHJpbmcgb2Zmc2V0LlxuICogSWYgbm8gQ1NUIG5vZGUgZXhpc3RzIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24sIGl0IHdpbGwgcmV0dXJuIHRoZSBsZWFmIG5vZGUgYmVmb3JlIGl0LlxuICpcbiAqIElmIHRoZXJlIGlzIG5vIGxlYWYgbm9kZSBiZWZvcmUgdGhlIHNwZWNpZmllZCBvZmZzZXQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwYXJhbSBub2RlIFRoZSBDU1Qgbm9kZSB0byBzZWFyY2ggdGhyb3VnaC5cbiAqIEBwYXJhbSBvZmZzZXQgVGhlIHNwZWNpZmllZCBvZmZzZXQuXG4gKiBAcmV0dXJucyBUaGUgQ1NUIG5vZGUgY2xvc2VzdCB0byB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMZWFmTm9kZUJlZm9yZU9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBpZiAoaXNMZWFmQ3N0Tm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb21wb3NpdGVDc3ROb2RlKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGJpbmFyeVNlYXJjaChub2RlLCBvZmZzZXQsIHRydWUpO1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0KHNlYXJjaFJlc3VsdCwgb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKG5vZGUsIG9mZnNldCwgY2xvc2VzdCkge1xuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBsZXQgcmlnaHQgPSBub2RlLmNvbnRlbnQubGVuZ3RoIC0gMTtcbiAgICBsZXQgY2xvc2VzdE5vZGUgPSB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHtcbiAgICAgICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xuICAgICAgICBjb25zdCBtaWRkbGVOb2RlID0gbm9kZS5jb250ZW50W21pZGRsZV07XG4gICAgICAgIGlmIChtaWRkbGVOb2RlLm9mZnNldCA8PSBvZmZzZXQgJiYgbWlkZGxlTm9kZS5lbmQgPiBvZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIEZvdW5kIGFuIGV4YWN0IG1hdGNoXG4gICAgICAgICAgICByZXR1cm4gbWlkZGxlTm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlkZGxlTm9kZS5lbmQgPD0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNsb3Nlc3Qgbm9kZSAobGVzcyB0aGFuIG9mZnNldCkgYW5kIG1vdmUgdG8gdGhlIHJpZ2h0IGhhbGZcbiAgICAgICAgICAgIGNsb3Nlc3ROb2RlID0gY2xvc2VzdCA/IG1pZGRsZU5vZGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGxlZnQgaGFsZlxuICAgICAgICAgICAgcmlnaHQgPSBtaWRkbGUgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbG9zZXN0Tm9kZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c05vZGUobm9kZSwgaGlkZGVuID0gdHJ1ZSkge1xuICAgIHdoaWxlIChub2RlLmNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgbGV0IGluZGV4ID0gcGFyZW50LmNvbnRlbnQuaW5kZXhPZihub2RlKTtcbiAgICAgICAgd2hpbGUgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcGFyZW50LmNvbnRlbnRbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGhpZGRlbiB8fCAhcHJldmlvdXMuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dE5vZGUobm9kZSwgaGlkZGVuID0gdHJ1ZSkge1xuICAgIHdoaWxlIChub2RlLmNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgbGV0IGluZGV4ID0gcGFyZW50LmNvbnRlbnQuaW5kZXhPZihub2RlKTtcbiAgICAgICAgY29uc3QgbGFzdCA9IHBhcmVudC5jb250ZW50Lmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QpIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gcGFyZW50LmNvbnRlbnRbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGhpZGRlbiB8fCAhbmV4dC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0bGluZU5vZGUobm9kZSkge1xuICAgIGlmIChub2RlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgY29uc3QgbGluZSA9IG5vZGUucmFuZ2Uuc3RhcnQubGluZTtcbiAgICBsZXQgbGFzdCA9IG5vZGU7XG4gICAgbGV0IGluZGV4O1xuICAgIHdoaWxlIChub2RlLmNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgY29uc3Qgc2VsZkluZGV4ID0gaW5kZXggIT09IG51bGwgJiYgaW5kZXggIT09IHZvaWQgMCA/IGluZGV4IDogcGFyZW50LmNvbnRlbnQuaW5kZXhPZihub2RlKTtcbiAgICAgICAgaWYgKHNlbGZJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgICAgIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSBzZWxmSW5kZXggLSAxO1xuICAgICAgICAgICAgbm9kZSA9IHBhcmVudC5jb250ZW50W2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yYW5nZS5zdGFydC5saW5lICE9PSBsaW5lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYXN0ID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3Q7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJpb3JOb2RlcyhzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgY29tbW9uUGFyZW50ID0gZ2V0Q29tbW9uUGFyZW50KHN0YXJ0LCBlbmQpO1xuICAgIGlmICghY29tbW9uUGFyZW50KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1vblBhcmVudC5wYXJlbnQuY29udGVudC5zbGljZShjb21tb25QYXJlbnQuYSArIDEsIGNvbW1vblBhcmVudC5iKTtcbn1cbmZ1bmN0aW9uIGdldENvbW1vblBhcmVudChhLCBiKSB7XG4gICAgY29uc3QgYVBhcmVudHMgPSBnZXRQYXJlbnRDaGFpbihhKTtcbiAgICBjb25zdCBiUGFyZW50cyA9IGdldFBhcmVudENoYWluKGIpO1xuICAgIGxldCBjdXJyZW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVBhcmVudHMubGVuZ3RoICYmIGkgPCBiUGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhUGFyZW50ID0gYVBhcmVudHNbaV07XG4gICAgICAgIGNvbnN0IGJQYXJlbnQgPSBiUGFyZW50c1tpXTtcbiAgICAgICAgaWYgKGFQYXJlbnQucGFyZW50ID09PSBiUGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgY3VycmVudCA9IHtcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGFQYXJlbnQucGFyZW50LFxuICAgICAgICAgICAgICAgIGE6IGFQYXJlbnQuaW5kZXgsXG4gICAgICAgICAgICAgICAgYjogYlBhcmVudC5pbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Q2hhaW4obm9kZSkge1xuICAgIGNvbnN0IGNoYWluID0gW107XG4gICAgd2hpbGUgKG5vZGUuY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUuY29udGFpbmVyO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jb250ZW50LmluZGV4T2Yobm9kZSk7XG4gICAgICAgIGNoYWluLnB1c2goe1xuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfSk7XG4gICAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBjaGFpbi5yZXZlcnNlKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3QtdXRpbHMuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgY2xhc3MgRXJyb3JXaXRoTG9jYXRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3Iobm9kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihub2RlID8gYCR7bWVzc2FnZX0gYXQgJHtub2RlLnJhbmdlLnN0YXJ0LmxpbmV9OiR7bm9kZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXJ9YCA6IG1lc3NhZ2UpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShfKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciEgVGhlIGlucHV0IHZhbHVlIHdhcyBub3QgaGFuZGxlZC4nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxhbmdpdW0tY2xpIDMuMC4wLlxuICogRE8gTk9UIEVESVQgTUFOVUFMTFkhXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQWJzdHJhY3RBc3RSZWZsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc3ludGF4LXRyZWUuanMnO1xuZXhwb3J0IGNvbnN0IExhbmdpdW1HcmFtbWFyVGVybWluYWxzID0ge1xuICAgIElEOiAvXFxeP1tfYS16QS1aXVtcXHdfXSovLFxuICAgIFNUUklORzogL1wiKFxcXFwufFteXCJcXFxcXSkqXCJ8JyhcXFxcLnxbXidcXFxcXSkqJy8sXG4gICAgTlVNQkVSOiAvTmFOfC0/KChcXGQqXFwuXFxkK3xcXGQrKShbRWVdWystXT9cXGQrKT98SW5maW5pdHkpLyxcbiAgICBSZWdleExpdGVyYWw6IC9cXC8oPyFbKis/XSkoPzpbXlxcclxcblxcWy9cXFxcXXxcXFxcLnxcXFsoPzpbXlxcclxcblxcXVxcXFxdfFxcXFwuKSpcXF0pK1xcL1thLXpdKi8sXG4gICAgV1M6IC9cXHMrLyxcbiAgICBNTF9DT01NRU5UOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG4gICAgU0xfQ09NTUVOVDogL1xcL1xcL1teXFxuXFxyXSovLFxufTtcbmV4cG9ydCBjb25zdCBBYnN0cmFjdFJ1bGUgPSAnQWJzdHJhY3RSdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBpc0Fic3RyYWN0UnVsZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBBYnN0cmFjdFJ1bGUpO1xufVxuZXhwb3J0IGNvbnN0IEFic3RyYWN0VHlwZSA9ICdBYnN0cmFjdFR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzdHJhY3RUeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEFic3RyYWN0VHlwZSk7XG59XG5leHBvcnQgY29uc3QgQ29uZGl0aW9uID0gJ0NvbmRpdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNDb25kaXRpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQ29uZGl0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVOYW1lKGl0ZW0pIHtcbiAgICByZXR1cm4gaXNQcmltaXRpdmVUeXBlKGl0ZW0pIHx8IGl0ZW0gPT09ICdjdXJyZW50JyB8fCBpdGVtID09PSAnZW50cnknIHx8IGl0ZW0gPT09ICdleHRlbmRzJyB8fCBpdGVtID09PSAnZmFsc2UnIHx8IGl0ZW0gPT09ICdmcmFnbWVudCcgfHwgaXRlbSA9PT0gJ2dyYW1tYXInIHx8IGl0ZW0gPT09ICdoaWRkZW4nIHx8IGl0ZW0gPT09ICdpbXBvcnQnIHx8IGl0ZW0gPT09ICdpbnRlcmZhY2UnIHx8IGl0ZW0gPT09ICdyZXR1cm5zJyB8fCBpdGVtID09PSAndGVybWluYWwnIHx8IGl0ZW0gPT09ICd0cnVlJyB8fCBpdGVtID09PSAndHlwZScgfHwgaXRlbSA9PT0gJ2luZmVyJyB8fCBpdGVtID09PSAnaW5mZXJzJyB8fCBpdGVtID09PSAnd2l0aCcgfHwgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyAmJiAoL1xcXj9bX2EtekEtWl1bXFx3X10qLy50ZXN0KGl0ZW0pKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmVUeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbSA9PT0gJ3N0cmluZycgfHwgaXRlbSA9PT0gJ251bWJlcicgfHwgaXRlbSA9PT0gJ2Jvb2xlYW4nIHx8IGl0ZW0gPT09ICdEYXRlJyB8fCBpdGVtID09PSAnYmlnaW50Jztcbn1cbmV4cG9ydCBjb25zdCBUeXBlRGVmaW5pdGlvbiA9ICdUeXBlRGVmaW5pdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlRGVmaW5pdGlvbihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBUeXBlRGVmaW5pdGlvbik7XG59XG5leHBvcnQgY29uc3QgVmFsdWVMaXRlcmFsID0gJ1ZhbHVlTGl0ZXJhbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZUxpdGVyYWwoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgVmFsdWVMaXRlcmFsKTtcbn1cbmV4cG9ydCBjb25zdCBBYnN0cmFjdEVsZW1lbnQgPSAnQWJzdHJhY3RFbGVtZW50JztcbmV4cG9ydCBmdW5jdGlvbiBpc0Fic3RyYWN0RWxlbWVudChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBBYnN0cmFjdEVsZW1lbnQpO1xufVxuZXhwb3J0IGNvbnN0IEFycmF5TGl0ZXJhbCA9ICdBcnJheUxpdGVyYWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlMaXRlcmFsKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEFycmF5TGl0ZXJhbCk7XG59XG5leHBvcnQgY29uc3QgQXJyYXlUeXBlID0gJ0FycmF5VHlwZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheVR5cGUoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQXJyYXlUeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBCb29sZWFuTGl0ZXJhbCA9ICdCb29sZWFuTGl0ZXJhbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuTGl0ZXJhbChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBCb29sZWFuTGl0ZXJhbCk7XG59XG5leHBvcnQgY29uc3QgQ29uanVuY3Rpb24gPSAnQ29uanVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uanVuY3Rpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQ29uanVuY3Rpb24pO1xufVxuZXhwb3J0IGNvbnN0IERpc2p1bmN0aW9uID0gJ0Rpc2p1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc2p1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIERpc2p1bmN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBHcmFtbWFyID0gJ0dyYW1tYXInO1xuZXhwb3J0IGZ1bmN0aW9uIGlzR3JhbW1hcihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHcmFtbWFyKTtcbn1cbmV4cG9ydCBjb25zdCBHcmFtbWFySW1wb3J0ID0gJ0dyYW1tYXJJbXBvcnQnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzR3JhbW1hckltcG9ydChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHcmFtbWFySW1wb3J0KTtcbn1cbmV4cG9ydCBjb25zdCBJbmZlcnJlZFR5cGUgPSAnSW5mZXJyZWRUeXBlJztcbmV4cG9ydCBmdW5jdGlvbiBpc0luZmVycmVkVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBJbmZlcnJlZFR5cGUpO1xufVxuZXhwb3J0IGNvbnN0IEludGVyZmFjZSA9ICdJbnRlcmZhY2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJmYWNlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEludGVyZmFjZSk7XG59XG5leHBvcnQgY29uc3QgTmFtZWRBcmd1bWVudCA9ICdOYW1lZEFyZ3VtZW50JztcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQXJndW1lbnQoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgTmFtZWRBcmd1bWVudCk7XG59XG5leHBvcnQgY29uc3QgTmVnYXRpb24gPSAnTmVnYXRpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmVnYXRpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgTmVnYXRpb24pO1xufVxuZXhwb3J0IGNvbnN0IE51bWJlckxpdGVyYWwgPSAnTnVtYmVyTGl0ZXJhbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJMaXRlcmFsKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIE51bWJlckxpdGVyYWwpO1xufVxuZXhwb3J0IGNvbnN0IFBhcmFtZXRlciA9ICdQYXJhbWV0ZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYW1ldGVyKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFBhcmFtZXRlcik7XG59XG5leHBvcnQgY29uc3QgUGFyYW1ldGVyUmVmZXJlbmNlID0gJ1BhcmFtZXRlclJlZmVyZW5jZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNQYXJhbWV0ZXJSZWZlcmVuY2UoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgUGFyYW1ldGVyUmVmZXJlbmNlKTtcbn1cbmV4cG9ydCBjb25zdCBQYXJzZXJSdWxlID0gJ1BhcnNlclJ1bGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VyUnVsZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBQYXJzZXJSdWxlKTtcbn1cbmV4cG9ydCBjb25zdCBSZWZlcmVuY2VUeXBlID0gJ1JlZmVyZW5jZVR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSZWZlcmVuY2VUeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBSZXR1cm5UeXBlID0gJ1JldHVyblR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0dXJuVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSZXR1cm5UeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBTaW1wbGVUeXBlID0gJ1NpbXBsZVR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2ltcGxlVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBTaW1wbGVUeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBTdHJpbmdMaXRlcmFsID0gJ1N0cmluZ0xpdGVyYWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTGl0ZXJhbChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBTdHJpbmdMaXRlcmFsKTtcbn1cbmV4cG9ydCBjb25zdCBUZXJtaW5hbFJ1bGUgPSAnVGVybWluYWxSdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBpc1Rlcm1pbmFsUnVsZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBUZXJtaW5hbFJ1bGUpO1xufVxuZXhwb3J0IGNvbnN0IFR5cGUgPSAnVHlwZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFR5cGUpO1xufVxuZXhwb3J0IGNvbnN0IFR5cGVBdHRyaWJ1dGUgPSAnVHlwZUF0dHJpYnV0ZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlQXR0cmlidXRlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFR5cGVBdHRyaWJ1dGUpO1xufVxuZXhwb3J0IGNvbnN0IFVuaW9uVHlwZSA9ICdVbmlvblR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb25UeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFVuaW9uVHlwZSk7XG59XG5leHBvcnQgY29uc3QgQWN0aW9uID0gJ0FjdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBBbHRlcm5hdGl2ZXMgPSAnQWx0ZXJuYXRpdmVzJztcbmV4cG9ydCBmdW5jdGlvbiBpc0FsdGVybmF0aXZlcyhpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBBbHRlcm5hdGl2ZXMpO1xufVxuZXhwb3J0IGNvbnN0IEFzc2lnbm1lbnQgPSAnQXNzaWdubWVudCc7XG5leHBvcnQgZnVuY3Rpb24gaXNBc3NpZ25tZW50KGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEFzc2lnbm1lbnQpO1xufVxuZXhwb3J0IGNvbnN0IENoYXJhY3RlclJhbmdlID0gJ0NoYXJhY3RlclJhbmdlJztcbmV4cG9ydCBmdW5jdGlvbiBpc0NoYXJhY3RlclJhbmdlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIENoYXJhY3RlclJhbmdlKTtcbn1cbmV4cG9ydCBjb25zdCBDcm9zc1JlZmVyZW5jZSA9ICdDcm9zc1JlZmVyZW5jZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNDcm9zc1JlZmVyZW5jZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBDcm9zc1JlZmVyZW5jZSk7XG59XG5leHBvcnQgY29uc3QgRW5kT2ZGaWxlID0gJ0VuZE9mRmlsZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNFbmRPZkZpbGUoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgRW5kT2ZGaWxlKTtcbn1cbmV4cG9ydCBjb25zdCBHcm91cCA9ICdHcm91cCc7XG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHcm91cCk7XG59XG5leHBvcnQgY29uc3QgS2V5d29yZCA9ICdLZXl3b3JkJztcbmV4cG9ydCBmdW5jdGlvbiBpc0tleXdvcmQoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgS2V5d29yZCk7XG59XG5leHBvcnQgY29uc3QgTmVnYXRlZFRva2VuID0gJ05lZ2F0ZWRUb2tlbic7XG5leHBvcnQgZnVuY3Rpb24gaXNOZWdhdGVkVG9rZW4oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgTmVnYXRlZFRva2VuKTtcbn1cbmV4cG9ydCBjb25zdCBSZWdleFRva2VuID0gJ1JlZ2V4VG9rZW4nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnZXhUb2tlbihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSZWdleFRva2VuKTtcbn1cbmV4cG9ydCBjb25zdCBSdWxlQ2FsbCA9ICdSdWxlQ2FsbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNSdWxlQ2FsbChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSdWxlQ2FsbCk7XG59XG5leHBvcnQgY29uc3QgVGVybWluYWxBbHRlcm5hdGl2ZXMgPSAnVGVybWluYWxBbHRlcm5hdGl2ZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVybWluYWxBbHRlcm5hdGl2ZXMoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgVGVybWluYWxBbHRlcm5hdGl2ZXMpO1xufVxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsR3JvdXAgPSAnVGVybWluYWxHcm91cCc7XG5leHBvcnQgZnVuY3Rpb24gaXNUZXJtaW5hbEdyb3VwKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFRlcm1pbmFsR3JvdXApO1xufVxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsUnVsZUNhbGwgPSAnVGVybWluYWxSdWxlQ2FsbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNUZXJtaW5hbFJ1bGVDYWxsKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFRlcm1pbmFsUnVsZUNhbGwpO1xufVxuZXhwb3J0IGNvbnN0IFVub3JkZXJlZEdyb3VwID0gJ1Vub3JkZXJlZEdyb3VwJztcbmV4cG9ydCBmdW5jdGlvbiBpc1Vub3JkZXJlZEdyb3VwKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFVub3JkZXJlZEdyb3VwKTtcbn1cbmV4cG9ydCBjb25zdCBVbnRpbFRva2VuID0gJ1VudGlsVG9rZW4nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW50aWxUb2tlbihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBVbnRpbFRva2VuKTtcbn1cbmV4cG9ydCBjb25zdCBXaWxkY2FyZCA9ICdXaWxkY2FyZCc7XG5leHBvcnQgZnVuY3Rpb24gaXNXaWxkY2FyZChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBXaWxkY2FyZCk7XG59XG5leHBvcnQgY2xhc3MgTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBc3RSZWZsZWN0aW9uIHtcbiAgICBnZXRBbGxUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIFsnQWJzdHJhY3RFbGVtZW50JywgJ0Fic3RyYWN0UnVsZScsICdBYnN0cmFjdFR5cGUnLCAnQWN0aW9uJywgJ0FsdGVybmF0aXZlcycsICdBcnJheUxpdGVyYWwnLCAnQXJyYXlUeXBlJywgJ0Fzc2lnbm1lbnQnLCAnQm9vbGVhbkxpdGVyYWwnLCAnQ2hhcmFjdGVyUmFuZ2UnLCAnQ29uZGl0aW9uJywgJ0Nvbmp1bmN0aW9uJywgJ0Nyb3NzUmVmZXJlbmNlJywgJ0Rpc2p1bmN0aW9uJywgJ0VuZE9mRmlsZScsICdHcmFtbWFyJywgJ0dyYW1tYXJJbXBvcnQnLCAnR3JvdXAnLCAnSW5mZXJyZWRUeXBlJywgJ0ludGVyZmFjZScsICdLZXl3b3JkJywgJ05hbWVkQXJndW1lbnQnLCAnTmVnYXRlZFRva2VuJywgJ05lZ2F0aW9uJywgJ051bWJlckxpdGVyYWwnLCAnUGFyYW1ldGVyJywgJ1BhcmFtZXRlclJlZmVyZW5jZScsICdQYXJzZXJSdWxlJywgJ1JlZmVyZW5jZVR5cGUnLCAnUmVnZXhUb2tlbicsICdSZXR1cm5UeXBlJywgJ1J1bGVDYWxsJywgJ1NpbXBsZVR5cGUnLCAnU3RyaW5nTGl0ZXJhbCcsICdUZXJtaW5hbEFsdGVybmF0aXZlcycsICdUZXJtaW5hbEdyb3VwJywgJ1Rlcm1pbmFsUnVsZScsICdUZXJtaW5hbFJ1bGVDYWxsJywgJ1R5cGUnLCAnVHlwZUF0dHJpYnV0ZScsICdUeXBlRGVmaW5pdGlvbicsICdVbmlvblR5cGUnLCAnVW5vcmRlcmVkR3JvdXAnLCAnVW50aWxUb2tlbicsICdWYWx1ZUxpdGVyYWwnLCAnV2lsZGNhcmQnXTtcbiAgICB9XG4gICAgY29tcHV0ZUlzU3VidHlwZShzdWJ0eXBlLCBzdXBlcnR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFjdGlvbjpcbiAgICAgICAgICAgIGNhc2UgQWx0ZXJuYXRpdmVzOlxuICAgICAgICAgICAgY2FzZSBBc3NpZ25tZW50OlxuICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXJSYW5nZTpcbiAgICAgICAgICAgIGNhc2UgQ3Jvc3NSZWZlcmVuY2U6XG4gICAgICAgICAgICBjYXNlIEVuZE9mRmlsZTpcbiAgICAgICAgICAgIGNhc2UgR3JvdXA6XG4gICAgICAgICAgICBjYXNlIEtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIE5lZ2F0ZWRUb2tlbjpcbiAgICAgICAgICAgIGNhc2UgUmVnZXhUb2tlbjpcbiAgICAgICAgICAgIGNhc2UgUnVsZUNhbGw6XG4gICAgICAgICAgICBjYXNlIFRlcm1pbmFsQWx0ZXJuYXRpdmVzOlxuICAgICAgICAgICAgY2FzZSBUZXJtaW5hbEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBUZXJtaW5hbFJ1bGVDYWxsOlxuICAgICAgICAgICAgY2FzZSBVbm9yZGVyZWRHcm91cDpcbiAgICAgICAgICAgIGNhc2UgVW50aWxUb2tlbjpcbiAgICAgICAgICAgIGNhc2UgV2lsZGNhcmQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoQWJzdHJhY3RFbGVtZW50LCBzdXBlcnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBcnJheUxpdGVyYWw6XG4gICAgICAgICAgICBjYXNlIE51bWJlckxpdGVyYWw6XG4gICAgICAgICAgICBjYXNlIFN0cmluZ0xpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoVmFsdWVMaXRlcmFsLCBzdXBlcnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBcnJheVR5cGU6XG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZVR5cGU6XG4gICAgICAgICAgICBjYXNlIFNpbXBsZVR5cGU6XG4gICAgICAgICAgICBjYXNlIFVuaW9uVHlwZToge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3VidHlwZShUeXBlRGVmaW5pdGlvbiwgc3VwZXJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQm9vbGVhbkxpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoQ29uZGl0aW9uLCBzdXBlcnR5cGUpIHx8IHRoaXMuaXNTdWJ0eXBlKFZhbHVlTGl0ZXJhbCwgc3VwZXJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQ29uanVuY3Rpb246XG4gICAgICAgICAgICBjYXNlIERpc2p1bmN0aW9uOlxuICAgICAgICAgICAgY2FzZSBOZWdhdGlvbjpcbiAgICAgICAgICAgIGNhc2UgUGFyYW1ldGVyUmVmZXJlbmNlOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJ0eXBlKENvbmRpdGlvbiwgc3VwZXJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOlxuICAgICAgICAgICAgY2FzZSBJbnRlcmZhY2U6XG4gICAgICAgICAgICBjYXNlIFR5cGU6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoQWJzdHJhY3RUeXBlLCBzdXBlcnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBQYXJzZXJSdWxlOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJ0eXBlKEFic3RyYWN0UnVsZSwgc3VwZXJ0eXBlKSB8fCB0aGlzLmlzU3VidHlwZShBYnN0cmFjdFR5cGUsIHN1cGVydHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRlcm1pbmFsUnVsZToge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3VidHlwZShBYnN0cmFjdFJ1bGUsIHN1cGVydHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFJlZmVyZW5jZVR5cGUocmVmSW5mbykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGAke3JlZkluZm8uY29udGFpbmVyLiR0eXBlfToke3JlZkluZm8ucHJvcGVydHl9YDtcbiAgICAgICAgc3dpdGNoIChyZWZlcmVuY2VJZCkge1xuICAgICAgICAgICAgY2FzZSAnQWN0aW9uOnR5cGUnOlxuICAgICAgICAgICAgY2FzZSAnQ3Jvc3NSZWZlcmVuY2U6dHlwZSc6XG4gICAgICAgICAgICBjYXNlICdJbnRlcmZhY2U6c3VwZXJUeXBlcyc6XG4gICAgICAgICAgICBjYXNlICdQYXJzZXJSdWxlOnJldHVyblR5cGUnOlxuICAgICAgICAgICAgY2FzZSAnU2ltcGxlVHlwZTp0eXBlUmVmJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHcmFtbWFyOmhpZGRlblRva2Vucyc6XG4gICAgICAgICAgICBjYXNlICdQYXJzZXJSdWxlOmhpZGRlblRva2Vucyc6XG4gICAgICAgICAgICBjYXNlICdSdWxlQ2FsbDpydWxlJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFJ1bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHcmFtbWFyOnVzZWRHcmFtbWFycyc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gR3JhbW1hcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ05hbWVkQXJndW1lbnQ6cGFyYW1ldGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ1BhcmFtZXRlclJlZmVyZW5jZTpwYXJhbWV0ZXInOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcmFtZXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1Rlcm1pbmFsUnVsZUNhbGw6cnVsZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVGVybWluYWxSdWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWZlcmVuY2VJZH0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFR5cGVNZXRhRGF0YSh0eXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQWJzdHJhY3RFbGVtZW50Jzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBYnN0cmFjdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0FycmF5TGl0ZXJhbCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQXJyYXlMaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZWxlbWVudHMnLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJheVR5cGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FycmF5VHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2VsZW1lbnRUeXBlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0Jvb2xlYW5MaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHJ1ZScsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Nvbmp1bmN0aW9uJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdDb25qdW5jdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xlZnQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdyaWdodCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Rpc2p1bmN0aW9uJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdEaXNqdW5jdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xlZnQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdyaWdodCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0dyYW1tYXInOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dyYW1tYXInLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdkZWZpbmVzSGlkZGVuVG9rZW5zJywgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnaGlkZGVuVG9rZW5zJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnaW1wb3J0cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2ludGVyZmFjZXMnLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdpc0RlY2xhcmVkJywgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3J1bGVzJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZXMnLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd1c2VkR3JhbW1hcnMnLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHcmFtbWFySW1wb3J0Jzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHcmFtbWFySW1wb3J0JyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0luZmVycmVkVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW5mZXJyZWRUeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0ludGVyZmFjZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW50ZXJmYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnYXR0cmlidXRlcycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdzdXBlclR5cGVzJywgZGVmYXVsdFZhbHVlOiBbXSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTmFtZWRBcmd1bWVudCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnTmFtZWRBcmd1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhbGxlZEJ5TmFtZScsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhcmFtZXRlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3ZhbHVlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTmVnYXRpb24nOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ05lZ2F0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdOdW1iZXJMaXRlcmFsJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdOdW1iZXJMaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdQYXJhbWV0ZXInOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdQYXJhbWV0ZXJSZWZlcmVuY2UnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BhcmFtZXRlclJlZmVyZW5jZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhcmFtZXRlcicgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1BhcnNlclJ1bGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BhcnNlclJ1bGUnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdkYXRhVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlZmluZXNIaWRkZW5Ub2tlbnMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdkZWZpbml0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZW50cnknLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdmcmFnbWVudCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2hpZGRlblRva2VucycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2luZmVycmVkVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXJhbWV0ZXJzJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncmV0dXJuVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3dpbGRjYXJkJywgZGVmYXVsdFZhbHVlOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnUmVmZXJlbmNlVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUmVmZXJlbmNlVHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3JlZmVyZW5jZVR5cGUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdSZXR1cm5UeXBlJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSZXR1cm5UeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1NpbXBsZVR5cGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NpbXBsZVR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwcmltaXRpdmVUeXBlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnc3RyaW5nVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3R5cGVSZWYnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdUZXJtaW5hbFJ1bGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1Rlcm1pbmFsUnVsZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlZmluaXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdmcmFnbWVudCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2hpZGRlbicsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd0eXBlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd0eXBlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVHlwZUF0dHJpYnV0ZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVHlwZUF0dHJpYnV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2lzT3B0aW9uYWwnLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICduYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VuaW9uVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVW5pb25UeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZXMnLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZmVhdHVyZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2luZmVycmVkVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdG9yJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0FsdGVybmF0aXZlcyc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQWx0ZXJuYXRpdmVzJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdlbGVtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Fzc2lnbm1lbnQnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0Fzc2lnbm1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2ZlYXR1cmUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRvcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3Rlcm1pbmFsJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQ2hhcmFjdGVyUmFuZ2UnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NoYXJhY3RlclJhbmdlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncmlnaHQnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdDcm9zc1JlZmVyZW5jZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ3Jvc3NSZWZlcmVuY2UnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlcHJlY2F0ZWRTeW50YXgnLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXJtaW5hbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3R5cGUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdFbmRPZkZpbGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VuZE9mRmlsZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnR3JvdXAnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdlbGVtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2d1YXJkQ29uZGl0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnS2V5d29yZCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnS2V5d29yZCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdOZWdhdGVkVG9rZW4nOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ05lZ2F0ZWRUb2tlbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndGVybWluYWwnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdSZWdleFRva2VuJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSZWdleFRva2VuJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdyZWdleCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1J1bGVDYWxsJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSdWxlQ2FsbCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2FyZ3VtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncnVsZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1Rlcm1pbmFsQWx0ZXJuYXRpdmVzJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUZXJtaW5hbEFsdGVybmF0aXZlcycsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZWxlbWVudHMnLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdUZXJtaW5hbEdyb3VwJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUZXJtaW5hbEdyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdlbGVtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1Rlcm1pbmFsUnVsZUNhbGwnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1Rlcm1pbmFsUnVsZUNhbGwnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3J1bGUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdVbm9yZGVyZWRHcm91cCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVW5vcmRlcmVkR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2VsZW1lbnRzJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVW50aWxUb2tlbic6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVW50aWxUb2tlbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndGVybWluYWwnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdXaWxkY2FyZCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnV2lsZGNhcmQnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY29uc3QgcmVmbGVjdGlvbiA9IG5ldyBMYW5naXVtR3JhbW1hckFzdFJlZmxlY3Rpb24oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGlzQXN0Tm9kZSwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBET05FX1JFU1VMVCwgc3RyZWFtLCBTdHJlYW1JbXBsLCBUcmVlU3RyZWFtSW1wbCB9IGZyb20gJy4vc3RyZWFtLmpzJztcbmltcG9ydCB7IGluUmFuZ2UgfSBmcm9tICcuL2NzdC11dGlscy5qcyc7XG4vKipcbiAqIExpbmsgdGhlIGAkY29udGFpbmVyYCBhbmQgb3RoZXIgcmVsYXRlZCBwcm9wZXJ0aWVzIG9mIGV2ZXJ5IEFTVCBub2RlIHRoYXQgaXMgZGlyZWN0bHkgY29udGFpbmVkXG4gKiBpbiB0aGUgZ2l2ZW4gYG5vZGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlua0NvbnRlbnRUb0NvbnRhaW5lcihub2RlKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzdE5vZGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRjb250YWluZXJQcm9wZXJ0eSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRjb250YWluZXJJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0FzdE5vZGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuJGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgICAgICAgdmFsdWUuJGNvbnRhaW5lclByb3BlcnR5ID0gbmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogV2FsayBhbG9uZyB0aGUgaGllcmFyY2h5IG9mIGNvbnRhaW5lcnMgZnJvbSB0aGUgZ2l2ZW4gQVNUIG5vZGUgdG8gdGhlIHJvb3QgYW5kIHJldHVybiB0aGUgZmlyc3RcbiAqIG5vZGUgdGhhdCBtYXRjaGVzIHRoZSB0eXBlIHByZWRpY2F0ZS4gSWYgdGhlIHN0YXJ0IG5vZGUgaXRzZWxmIG1hdGNoZXMsIGl0IGlzIHJldHVybmVkLlxuICogSWYgbm8gY29udGFpbmVyIG1hdGNoZXMsIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGFpbmVyT2ZUeXBlKG5vZGUsIHR5cGVQcmVkaWNhdGUpIHtcbiAgICBsZXQgaXRlbSA9IG5vZGU7XG4gICAgd2hpbGUgKGl0ZW0pIHtcbiAgICAgICAgaWYgKHR5cGVQcmVkaWNhdGUoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0gPSBpdGVtLiRjb250YWluZXI7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFdhbGsgYWxvbmcgdGhlIGhpZXJhcmNoeSBvZiBjb250YWluZXJzIGZyb20gdGhlIGdpdmVuIEFTVCBub2RlIHRvIHRoZSByb290IGFuZCBjaGVjayBmb3IgZXhpc3RlbmNlXG4gKiBvZiBhIGNvbnRhaW5lciB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gVGhlIHN0YXJ0IG5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIGNoZWNrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbnRhaW5lck9mVHlwZShub2RlLCBwcmVkaWNhdGUpIHtcbiAgICBsZXQgaXRlbSA9IG5vZGU7XG4gICAgd2hpbGUgKGl0ZW0pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbSA9IGl0ZW0uJGNvbnRhaW5lcjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggdGhlIGdpdmVuIEFTVCBub2RlIGlzIGNvbnRhaW5lZC4gQSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IGlzXG4gKiB1c3VhbGx5IGhlbGQgYnkgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgQVNULlxuICpcbiAqIEB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIG5vZGUgaXMgbm90IGNvbnRhaW5lZCBpbiBhIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnQobm9kZSkge1xuICAgIGNvbnN0IHJvb3ROb2RlID0gZmluZFJvb3ROb2RlKG5vZGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJvb3ROb2RlLiRkb2N1bWVudDtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTVCBub2RlIGhhcyBubyBkb2N1bWVudC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgcm9vdCBub2RlIG9mIHRoZSBnaXZlbiBBU1Qgbm9kZSBieSBmb2xsb3dpbmcgdGhlIGAkY29udGFpbmVyYCByZWZlcmVuY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFJvb3ROb2RlKG5vZGUpIHtcbiAgICB3aGlsZSAobm9kZS4kY29udGFpbmVyKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLiRjb250YWluZXI7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBzdHJlYW0gb2YgYWxsIEFTVCBub2RlcyB0aGF0IGFyZSBkaXJlY3RseSBjb250YWluZWQgaW4gdGhlIGdpdmVuIG5vZGUuIFRoaXMgaW5jbHVkZXNcbiAqIHNpbmdsZS12YWx1ZWQgYXMgd2VsbCBhcyBtdWx0aS12YWx1ZWQgKGFycmF5KSBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtQ29udGVudHMobm9kZSwgb3B0aW9ucykge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLicpO1xuICAgIH1cbiAgICBjb25zdCByYW5nZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yYW5nZTtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwoKCkgPT4gKHtcbiAgICAgICAga2V5czogT2JqZWN0LmtleXMobm9kZSksXG4gICAgICAgIGtleUluZGV4OiAwLFxuICAgICAgICBhcnJheUluZGV4OiAwXG4gICAgfSksIHN0YXRlID0+IHtcbiAgICAgICAgd2hpbGUgKHN0YXRlLmtleUluZGV4IDwgc3RhdGUua2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gc3RhdGUua2V5c1tzdGF0ZS5rZXlJbmRleF07XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZVtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUua2V5SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZUluUmFuZ2UodmFsdWUsIHJhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmFycmF5SW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuYXJyYXlJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FzdE5vZGUoZWxlbWVudCkgJiYgaXNBc3ROb2RlSW5SYW5nZShlbGVtZW50LCByYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IGVsZW1lbnQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJheUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5rZXlJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3RyZWFtIG9mIGFsbCBBU1Qgbm9kZXMgdGhhdCBhcmUgZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkgY29udGFpbmVkIGluIHRoZSBnaXZlbiByb290IG5vZGUuXG4gKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIHJvb3Qgbm9kZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1BbGxDb250ZW50cyhyb290LCBvcHRpb25zKSB7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBub2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUcmVlU3RyZWFtSW1wbChyb290LCBub2RlID0+IHN0cmVhbUNvbnRlbnRzKG5vZGUsIG9wdGlvbnMpKTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3RyZWFtIG9mIGFsbCBBU1Qgbm9kZXMgdGhhdCBhcmUgZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkgY29udGFpbmVkIGluIHRoZSBnaXZlbiByb290IG5vZGUsXG4gKiBpbmNsdWRpbmcgdGhlIHJvb3Qgbm9kZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1Bc3Qocm9vdCwgb3B0aW9ucykge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3Qgbm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmFuZ2UpICYmICFpc0FzdE5vZGVJblJhbmdlKHJvb3QsIG9wdGlvbnMucmFuZ2UpKSB7XG4gICAgICAgIC8vIFJldHVybiBhbiBlbXB0eSBzdHJlYW0gaWYgdGhlIHJvb3Qgbm9kZSBpc24ndCBpbiByYW5nZVxuICAgICAgICByZXR1cm4gbmV3IFRyZWVTdHJlYW1JbXBsKHJvb3QsICgpID0+IFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUcmVlU3RyZWFtSW1wbChyb290LCBub2RlID0+IHN0cmVhbUNvbnRlbnRzKG5vZGUsIG9wdGlvbnMpLCB7IGluY2x1ZGVSb290OiB0cnVlIH0pO1xufVxuZnVuY3Rpb24gaXNBc3ROb2RlSW5SYW5nZShhc3ROb2RlLCByYW5nZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBub2RlUmFuZ2UgPSAoX2EgPSBhc3ROb2RlLiRjc3ROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmFuZ2U7XG4gICAgaWYgKCFub2RlUmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaW5SYW5nZShub2RlUmFuZ2UsIHJhbmdlKTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3RyZWFtIG9mIGFsbCBjcm9zcy1yZWZlcmVuY2VzIHRoYXQgYXJlIGhlbGQgYnkgdGhlIGdpdmVuIEFTVCBub2RlLiBUaGlzIGluY2x1ZGVzXG4gKiBzaW5nbGUtdmFsdWVkIGFzIHdlbGwgYXMgbXVsdGktdmFsdWVkIChhcnJheSkgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVJlZmVyZW5jZXMobm9kZSkge1xuICAgIHJldHVybiBuZXcgU3RyZWFtSW1wbCgoKSA9PiAoe1xuICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhub2RlKSxcbiAgICAgICAga2V5SW5kZXg6IDAsXG4gICAgICAgIGFycmF5SW5kZXg6IDBcbiAgICB9KSwgc3RhdGUgPT4ge1xuICAgICAgICB3aGlsZSAoc3RhdGUua2V5SW5kZXggPCBzdGF0ZS5rZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBzdGF0ZS5rZXlzW3N0YXRlLmtleUluZGV4XTtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmtleUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogeyByZWZlcmVuY2U6IHZhbHVlLCBjb250YWluZXI6IG5vZGUsIHByb3BlcnR5IH0gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmFycmF5SW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuYXJyYXlJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogeyByZWZlcmVuY2U6IGVsZW1lbnQsIGNvbnRhaW5lcjogbm9kZSwgcHJvcGVydHksIGluZGV4IH0gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJheUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5rZXlJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIFN0cmVhbSBvZiByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQgbm9kZSBmcm9tIHRoZSBBc3ROb2RlIHRyZWVcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0Tm9kZSBBc3ROb2RlIHdlIGFyZSBsb29raW5nIGZvclxuICogQHBhcmFtIGxvb2t1cCBBc3ROb2RlIHdoZXJlIHdlIHNlYXJjaCBmb3IgcmVmZXJlbmNlcy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcm9vdCBub2RlIG9mIHRoZSBkb2N1bWVudCBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTG9jYWxSZWZlcmVuY2VzKHRhcmdldE5vZGUsIGxvb2t1cCA9IGdldERvY3VtZW50KHRhcmdldE5vZGUpLnBhcnNlUmVzdWx0LnZhbHVlKSB7XG4gICAgY29uc3QgcmVmcyA9IFtdO1xuICAgIHN0cmVhbUFzdChsb29rdXApLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgIHN0cmVhbVJlZmVyZW5jZXMobm9kZSkuZm9yRWFjaChyZWZJbmZvID0+IHtcbiAgICAgICAgICAgIGlmIChyZWZJbmZvLnJlZmVyZW5jZS5yZWYgPT09IHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2gocmVmSW5mby5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RyZWFtKHJlZnMpO1xufVxuLyoqXG4gKiBBc3NpZ25zIGFsbCBtYW5kYXRvcnkgQVNUIHByb3BlcnRpZXMgdG8gdGhlIHNwZWNpZmllZCBub2RlLlxuICpcbiAqIEBwYXJhbSByZWZsZWN0aW9uIFJlZmxlY3Rpb24gb2JqZWN0IHVzZWQgdG8gZ2F0aGVyIG1hbmRhdG9yeSBwcm9wZXJ0aWVzIGZvciB0aGUgbm9kZS5cbiAqIEBwYXJhbSBub2RlIFNwZWNpZmllZCBub2RlIGlzIG1vZGlmaWVkIGluIHBsYWNlIGFuZCBwcm9wZXJ0aWVzIGFyZSBkaXJlY3RseSBhc3NpZ25lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXMocmVmbGVjdGlvbiwgbm9kZSkge1xuICAgIGNvbnN0IHR5cGVNZXRhRGF0YSA9IHJlZmxlY3Rpb24uZ2V0VHlwZU1ldGFEYXRhKG5vZGUuJHR5cGUpO1xuICAgIGNvbnN0IGdlbmVyaWNOb2RlID0gbm9kZTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHR5cGVNZXRhRGF0YS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIC8vIE9ubHkgc2V0IHRoZSB2YWx1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGFscmVhZHkgc2V0IGFuZCBpZiBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGlmIChwcm9wZXJ0eS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBnZW5lcmljTm9kZVtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnZW5lcmljTm9kZVtwcm9wZXJ0eS5uYW1lXSA9IGNvcHlEZWZhdWx0VmFsdWUocHJvcGVydHkuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNvcHlEZWZhdWx0VmFsdWUocHJvcGVydHlUeXBlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlUeXBlKSkge1xuICAgICAgICByZXR1cm4gWy4uLnByb3BlcnR5VHlwZS5tYXAoY29weURlZmF1bHRWYWx1ZSldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5VHlwZTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgdGhlIHNwZWNpZmllZCBBU1Qgbm9kZS5cbiAqIFRoZSByZXN1bHRpbmcgY29weSB3aWxsIG9ubHkgY29udGFpbiBzZW1hbnRpY2FsbHkgcmVsZXZhbnQgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGAkdHlwZWAgcHJvcGVydHkgYW5kIEFTVCBwcm9wZXJ0aWVzLlxuICpcbiAqIFJlZmVyZW5jZXMgYXJlIGNvcGllZCB3aXRob3V0IHJlc29sdmVkIGNyb3NzIHJlZmVyZW5jZS4gVGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYnVpbGQgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlBc3ROb2RlKG5vZGUsIGJ1aWxkUmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29weSA9IHsgJHR5cGU6IG5vZGUuJHR5cGUgfTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb3B5W25hbWVdID0gY29weUFzdE5vZGUodmFsdWUsIGJ1aWxkUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVmZXJlbmNlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvcHlbbmFtZV0gPSBidWlsZFJlZmVyZW5jZShjb3B5LCBuYW1lLCB2YWx1ZS4kcmVmTm9kZSwgdmFsdWUuJHJlZlRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3BpZWRBcnJheSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3ROb2RlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRBcnJheS5wdXNoKGNvcHlBc3ROb2RlKGVsZW1lbnQsIGJ1aWxkUmVmZXJlbmNlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWZlcmVuY2UoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZEFycmF5LnB1c2goYnVpbGRSZWZlcmVuY2UoY29weSwgbmFtZSwgZWxlbWVudC4kcmVmTm9kZSwgZWxlbWVudC4kcmVmVGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkQXJyYXkucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb3B5W25hbWVdID0gY29waWVkQXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb3B5W25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGlua0NvbnRlbnRUb0NvbnRhaW5lcihjb3B5KTtcbiAgICByZXR1cm4gY29weTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC11dGlscy5qcy5tYXAiLAogICAgImV4cG9ydCBmdW5jdGlvbiBjYyhjaGFyKSB7XG4gICAgcmV0dXJuIGNoYXIuY2hhckNvZGVBdCgwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUb1NldChpdGVtLCBzZXQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICBpdGVtLmZvckVhY2goZnVuY3Rpb24gKHN1Ykl0ZW0pIHtcbiAgICAgICAgICAgIHNldC5wdXNoKHN1Ykl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNldC5wdXNoKGl0ZW0pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGRGbGFnKGZsYWdPYmosIGZsYWdLZXkpIHtcbiAgICBpZiAoZmxhZ09ialtmbGFnS2V5XSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBcImR1cGxpY2F0ZSBmbGFnIFwiICsgZmxhZ0tleTtcbiAgICB9XG4gICAgY29uc3QgeCA9IGZsYWdPYmpbZmxhZ0tleV07XG4gICAgZmxhZ09ialtmbGFnS2V5XSA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gQVNTRVJUX0VYSVNUUyhvYmopIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkludGVybmFsIEVycm9yIC0gU2hvdWxkIG5ldmVyIGdldCBoZXJlIVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuZXhwb3J0IGZ1bmN0aW9uIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFKCkge1xuICAgIHRocm93IEVycm9yKFwiSW50ZXJuYWwgRXJyb3IgLSBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUhXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hhcmFjdGVyKG9iaikge1xuICAgIHJldHVybiBvYmpbXCJ0eXBlXCJdID09PSBcIkNoYXJhY3RlclwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJpbXBvcnQgeyBjYyB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5leHBvcnQgY29uc3QgZGlnaXRzQ2hhckNvZGVzID0gW107XG5mb3IgKGxldCBpID0gY2MoXCIwXCIpOyBpIDw9IGNjKFwiOVwiKTsgaSsrKSB7XG4gICAgZGlnaXRzQ2hhckNvZGVzLnB1c2goaSk7XG59XG5leHBvcnQgY29uc3Qgd29yZENoYXJDb2RlcyA9IFtjYyhcIl9cIildLmNvbmNhdChkaWdpdHNDaGFyQ29kZXMpO1xuZm9yIChsZXQgaSA9IGNjKFwiYVwiKTsgaSA8PSBjYyhcInpcIik7IGkrKykge1xuICAgIHdvcmRDaGFyQ29kZXMucHVzaChpKTtcbn1cbmZvciAobGV0IGkgPSBjYyhcIkFcIik7IGkgPD0gY2MoXCJaXCIpOyBpKyspIHtcbiAgICB3b3JkQ2hhckNvZGVzLnB1c2goaSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9SZWdFeHAjY2hhcmFjdGVyLWNsYXNzZXNcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlQ29kZXMgPSBbXG4gICAgY2MoXCIgXCIpLFxuICAgIGNjKFwiXFxmXCIpLFxuICAgIGNjKFwiXFxuXCIpLFxuICAgIGNjKFwiXFxyXCIpLFxuICAgIGNjKFwiXFx0XCIpLFxuICAgIGNjKFwiXFx2XCIpLFxuICAgIGNjKFwiXFx0XCIpLFxuICAgIGNjKFwiXFx1MDBhMFwiKSxcbiAgICBjYyhcIlxcdTE2ODBcIiksXG4gICAgY2MoXCJcXHUyMDAwXCIpLFxuICAgIGNjKFwiXFx1MjAwMVwiKSxcbiAgICBjYyhcIlxcdTIwMDJcIiksXG4gICAgY2MoXCJcXHUyMDAzXCIpLFxuICAgIGNjKFwiXFx1MjAwNFwiKSxcbiAgICBjYyhcIlxcdTIwMDVcIiksXG4gICAgY2MoXCJcXHUyMDA2XCIpLFxuICAgIGNjKFwiXFx1MjAwN1wiKSxcbiAgICBjYyhcIlxcdTIwMDhcIiksXG4gICAgY2MoXCJcXHUyMDA5XCIpLFxuICAgIGNjKFwiXFx1MjAwYVwiKSxcbiAgICBjYyhcIlxcdTIwMjhcIiksXG4gICAgY2MoXCJcXHUyMDI5XCIpLFxuICAgIGNjKFwiXFx1MjAyZlwiKSxcbiAgICBjYyhcIlxcdTIwNWZcIiksXG4gICAgY2MoXCJcXHUzMDAwXCIpLFxuICAgIGNjKFwiXFx1ZmVmZlwiKSxcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFyYWN0ZXItY2xhc3Nlcy5qcy5tYXAiLAogICAgImltcG9ydCB7IGFkZEZsYWcsIEFTU0VSVF9FWElTVFMsIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFLCBjYywgaW5zZXJ0VG9TZXQsIGlzQ2hhcmFjdGVyLCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBkaWdpdHNDaGFyQ29kZXMsIHdoaXRlc3BhY2VDb2Rlcywgd29yZENoYXJDb2RlcywgfSBmcm9tIFwiLi9jaGFyYWN0ZXItY2xhc3Nlcy5qc1wiO1xuLy8gY29uc3RzIGFuZCB1dGlsaXRpZXNcbmNvbnN0IGhleERpZ2l0UGF0dGVybiA9IC9bMC05YS1mQS1GXS87XG5jb25zdCBkZWNpbWFsUGF0dGVybiA9IC9bMC05XS87XG5jb25zdCBkZWNpbWFsUGF0dGVybk5vWmVybyA9IC9bMS05XS87XG4vLyBodHRwczovL2hhY2tlcm5vb24uY29tL3RoZS1tYWRuZXNzLW9mLXBhcnNpbmctcmVhbC13b3JsZC1qYXZhc2NyaXB0LXJlZ2V4cHMtZDllZTMzNmRmOTgzXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC9pbmRleC5odG1sI3Byb2QtUGF0dGVyblxuZXhwb3J0IGNsYXNzIFJlZ0V4cFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaWR4ID0gMDtcbiAgICAgICAgdGhpcy5pbnB1dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZ3JvdXBJZHggPSAwO1xuICAgIH1cbiAgICBzYXZlU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZHg6IHRoaXMuaWR4LFxuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuaW5wdXQsXG4gICAgICAgICAgICBncm91cElkeDogdGhpcy5ncm91cElkeCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVzdG9yZVN0YXRlKG5ld1N0YXRlKSB7XG4gICAgICAgIHRoaXMuaWR4ID0gbmV3U3RhdGUuaWR4O1xuICAgICAgICB0aGlzLmlucHV0ID0gbmV3U3RhdGUuaW5wdXQ7XG4gICAgICAgIHRoaXMuZ3JvdXBJZHggPSBuZXdTdGF0ZS5ncm91cElkeDtcbiAgICB9XG4gICAgcGF0dGVybihpbnB1dCkge1xuICAgICAgICAvLyBwYXJzZXIgc3RhdGVcbiAgICAgICAgdGhpcy5pZHggPSAwO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuZ3JvdXBJZHggPSAwO1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiL1wiKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRpc2p1bmN0aW9uKCk7XG4gICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCIvXCIpO1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiRmxhZ3NcIixcbiAgICAgICAgICAgIGxvYzogeyBiZWdpbjogdGhpcy5pZHgsIGVuZDogaW5wdXQubGVuZ3RoIH0sXG4gICAgICAgICAgICBnbG9iYWw6IGZhbHNlLFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogZmFsc2UsXG4gICAgICAgICAgICBtdWx0aUxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgdW5pY29kZTogZmFsc2UsXG4gICAgICAgICAgICBzdGlja3k6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICB3aGlsZSAodGhpcy5pc1JlZ0V4cEZsYWcoKSkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZsYWcoZmxhZ3MsIFwiZ2xvYmFsXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRGbGFnKGZsYWdzLCBcImlnbm9yZUNhc2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZsYWcoZmxhZ3MsIFwibXVsdGlMaW5lXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRGbGFnKGZsYWdzLCBcInVuaWNvZGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZsYWcoZmxhZ3MsIFwic3RpY2t5XCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pZHggIT09IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJlZHVuZGFudCBpbnB1dDogXCIgKyB0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLmlkeCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlBhdHRlcm5cIixcbiAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGxvYzogdGhpcy5sb2MoMCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRpc2p1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBhbHRzID0gW107XG4gICAgICAgIGNvbnN0IGJlZ2luID0gdGhpcy5pZHg7XG4gICAgICAgIGFsdHMucHVzaCh0aGlzLmFsdGVybmF0aXZlKCkpO1xuICAgICAgICB3aGlsZSAodGhpcy5wZWVrQ2hhcigpID09PSBcInxcIikge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcInxcIik7XG4gICAgICAgICAgICBhbHRzLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0eXBlOiBcIkRpc2p1bmN0aW9uXCIsIHZhbHVlOiBhbHRzLCBsb2M6IHRoaXMubG9jKGJlZ2luKSB9O1xuICAgIH1cbiAgICBhbHRlcm5hdGl2ZSgpIHtcbiAgICAgICAgY29uc3QgdGVybXMgPSBbXTtcbiAgICAgICAgY29uc3QgYmVnaW4gPSB0aGlzLmlkeDtcbiAgICAgICAgd2hpbGUgKHRoaXMuaXNUZXJtKCkpIHtcbiAgICAgICAgICAgIHRlcm1zLnB1c2godGhpcy50ZXJtKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiQWx0ZXJuYXRpdmVcIiwgdmFsdWU6IHRlcm1zLCBsb2M6IHRoaXMubG9jKGJlZ2luKSB9O1xuICAgIH1cbiAgICB0ZXJtKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Fzc2VydGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hc3NlcnRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0b20oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnRpb24oKSB7XG4gICAgICAgIGNvbnN0IGJlZ2luID0gdGhpcy5pZHg7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wb3BDaGFyKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJTdGFydEFuY2hvclwiLFxuICAgICAgICAgICAgICAgICAgICBsb2M6IHRoaXMubG9jKGJlZ2luKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSBcIiRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIkVuZEFuY2hvclwiLCBsb2M6IHRoaXMubG9jKGJlZ2luKSB9O1xuICAgICAgICAgICAgLy8gJ1xcYicgb3IgJ1xcQidcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIldvcmRCb3VuZGFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogdGhpcy5sb2MoYmVnaW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJOb25Xb3JkQm91bmRhcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2M6IHRoaXMubG9jKGJlZ2luKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGVcIik7XG4gICAgICAgICAgICAvLyAnKD89JyBvciAnKD8hJ1xuICAgICAgICAgICAgY2FzZSBcIihcIjpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiP1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMucG9wQ2hhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI9XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gXCJMb29rYWhlYWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiIVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFwiTmVnYXRpdmVMb29rYWhlYWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBBU1NFUlRfRVhJU1RTKHR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2p1bmN0aW9uID0gdGhpcy5kaXNqdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCIpXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkaXNqdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbG9jOiB0aGlzLmxvYyhiZWdpbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICByZXR1cm4gQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUoKTtcbiAgICB9XG4gICAgcXVhbnRpZmllcihpc0JhY2t0cmFja2luZyA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYmVnaW4gPSB0aGlzLmlkeDtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgY2FzZSBcIipcIjpcbiAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogMCxcbiAgICAgICAgICAgICAgICAgICAgYXRNb3N0OiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogMSxcbiAgICAgICAgICAgICAgICAgICAgYXRNb3N0OiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogMCxcbiAgICAgICAgICAgICAgICAgICAgYXRNb3N0OiAxLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwie1wiOlxuICAgICAgICAgICAgICAgIGNvbnN0IGF0TGVhc3QgPSB0aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwifVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogYXRMZWFzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdE1vc3Q6IGF0TGVhc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCIsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXRNb3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEaWdpdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRNb3N0ID0gdGhpcy5pbnRlZ2VySW5jbHVkaW5nWmVybygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdExlYXN0OiBhdExlYXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdE1vc3Q6IGF0TW9zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0TGVhc3Q6IGF0TGVhc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0TW9zdDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHRocm93aW5nIGV4Y2VwdGlvbnMgZnJvbSBcIkFTU0VSVF9FWElTVFNcIiBkdXJpbmcgYmFja3RyYWNraW5nXG4gICAgICAgICAgICAgICAgLy8gY2F1c2VzIHNldmVyZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoaXNCYWNrdHJhY2tpbmcgPT09IHRydWUgJiYgcmFuZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBBU1NFUlRfRVhJU1RTKHJhbmdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyB0aHJvd2luZyBleGNlcHRpb25zIGZyb20gXCJBU1NFUlRfRVhJU1RTXCIgZHVyaW5nIGJhY2t0cmFja2luZ1xuICAgICAgICAvLyBjYXVzZXMgc2V2ZXJlIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uc1xuICAgICAgICBpZiAoaXNCYWNrdHJhY2tpbmcgPT09IHRydWUgJiYgcmFuZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhyYW5nZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlZWtDaGFyKDApID09PSBcIj9cIikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCI/XCIpO1xuICAgICAgICAgICAgICAgIHJhbmdlLmdyZWVkeSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZ3JlZWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlLnR5cGUgPSBcIlF1YW50aWZpZXJcIjtcbiAgICAgICAgICAgIHJhbmdlLmxvYyA9IHRoaXMubG9jKGJlZ2luKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdG9tKCkge1xuICAgICAgICBsZXQgYXRvbTtcbiAgICAgICAgY29uc3QgYmVnaW4gPSB0aGlzLmlkeDtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICAgICAgYXRvbSA9IHRoaXMuZG90QWxsKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgICAgICAgIGF0b20gPSB0aGlzLmF0b21Fc2NhcGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgICAgICAgYXRvbSA9IHRoaXMuY2hhcmFjdGVyQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCIoXCI6XG4gICAgICAgICAgICAgICAgYXRvbSA9IHRoaXMuZ3JvdXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXRvbSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuaXNQYXR0ZXJuQ2hhcmFjdGVyKCkpIHtcbiAgICAgICAgICAgIGF0b20gPSB0aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhhdG9tKSkge1xuICAgICAgICAgICAgYXRvbS5sb2MgPSB0aGlzLmxvYyhiZWdpbik7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1F1YW50aWZpZXIoKSkge1xuICAgICAgICAgICAgICAgIGF0b20ucXVhbnRpZmllciA9IHRoaXMucXVhbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF0b207XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgcmV0dXJuIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFKCk7XG4gICAgfVxuICAgIGRvdEFsbCgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcIi5cIik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlNldFwiLFxuICAgICAgICAgICAgY29tcGxlbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbY2MoXCJcXG5cIiksIGNjKFwiXFxyXCIpLCBjYyhcIlxcdTIwMjhcIiksIGNjKFwiXFx1MjAyOVwiKV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGF0b21Fc2NhcGUoKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCJcXFxcXCIpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoKSkge1xuICAgICAgICAgICAgY2FzZSBcIjFcIjpcbiAgICAgICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgICAgICBjYXNlIFwiM1wiOlxuICAgICAgICAgICAgY2FzZSBcIjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgICAgICBjYXNlIFwiNlwiOlxuICAgICAgICAgICAgY2FzZSBcIjdcIjpcbiAgICAgICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgICAgICBjYXNlIFwiOVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxFc2NhcGVBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyQ2xhc3NFc2NhcGUoKTtcbiAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgY2FzZSBcInJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0XCI6XG4gICAgICAgICAgICBjYXNlIFwidlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwiMFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtcbiAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVjaW1hbEVzY2FwZUF0b20oKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wb3NpdGl2ZUludGVnZXIoKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJHcm91cEJhY2tSZWZlcmVuY2VcIiwgdmFsdWU6IHZhbHVlIH07XG4gICAgfVxuICAgIGNoYXJhY3RlckNsYXNzRXNjYXBlKCkge1xuICAgICAgICBsZXQgc2V0O1xuICAgICAgICBsZXQgY29tcGxlbWVudCA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKHRoaXMucG9wQ2hhcigpKSB7XG4gICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgIHNldCA9IGRpZ2l0c0NoYXJDb2RlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICAgICAgc2V0ID0gZGlnaXRzQ2hhckNvZGVzO1xuICAgICAgICAgICAgICAgIGNvbXBsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICBzZXQgPSB3aGl0ZXNwYWNlQ29kZXM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgICAgIHNldCA9IHdoaXRlc3BhY2VDb2RlcztcbiAgICAgICAgICAgICAgICBjb21wbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICAgICAgc2V0ID0gd29yZENoYXJDb2RlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICAgICAgc2V0ID0gd29yZENoYXJDb2RlcztcbiAgICAgICAgICAgICAgICBjb21wbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIlNldFwiLCB2YWx1ZTogc2V0LCBjb21wbGVtZW50OiBjb21wbGVtZW50IH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgcmV0dXJuIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFKCk7XG4gICAgfVxuICAgIGNvbnRyb2xFc2NhcGVBdG9tKCkge1xuICAgICAgICBsZXQgZXNjYXBlQ29kZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICBlc2NhcGVDb2RlID0gY2MoXCJcXGZcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgICAgIGVzY2FwZUNvZGUgPSBjYyhcIlxcblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgZXNjYXBlQ29kZSA9IGNjKFwiXFxyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICBlc2NhcGVDb2RlID0gY2MoXCJcXHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidlwiOlxuICAgICAgICAgICAgICAgIGVzY2FwZUNvZGUgPSBjYyhcIlxcdlwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhlc2NhcGVDb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGVzY2FwZUNvZGUgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICByZXR1cm4gQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUoKTtcbiAgICB9XG4gICAgY29udHJvbExldHRlckVzY2FwZUF0b20oKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCJjXCIpO1xuICAgICAgICBjb25zdCBsZXR0ZXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgaWYgKC9bYS16QS1aXS8udGVzdChsZXR0ZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZXR0ZXJDb2RlID0gbGV0dGVyLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtIDY0O1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIkNoYXJhY3RlclwiLCB2YWx1ZTogbGV0dGVyQ29kZSB9O1xuICAgIH1cbiAgICBudWxDaGFyYWN0ZXJBdG9tKCkge1xuICAgICAgICAvLyBUT0RPIGltcGxlbWVudCAnW2xvb2thaGVhZCDiiIkgRGVjaW1hbERpZ2l0XSdcbiAgICAgICAgLy8gVE9ETzogZm9yIHRoZSBkZXByZWNhdGVkIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiMFwiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNjKFwiXFwwXCIpIH07XG4gICAgfVxuICAgIGhleEVzY2FwZVNlcXVlbmNlQXRvbSgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcInhcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlSGV4RGlnaXRzKDIpO1xuICAgIH1cbiAgICByZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwidVwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VIZXhEaWdpdHMoNCk7XG4gICAgfVxuICAgIGlkZW50aXR5RXNjYXBlQXRvbSgpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IFwiU291cmNlQ2hhcmFjdGVyIGJ1dCBub3QgVW5pY29kZUlEQ29udGludWVcIlxuICAgICAgICAvLyAvLyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjMxLyNTcGVjaWZpY19DaGFyYWN0ZXJfQWRqdXN0bWVudHNcbiAgICAgICAgY29uc3QgZXNjYXBlZENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNjKGVzY2FwZWRDaGFyKSB9O1xuICAgIH1cbiAgICBjbGFzc1BhdHRlcm5DaGFyYWN0ZXJBdG9tKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoKSkge1xuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXG5cIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxyXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjhcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOVwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIl1cIjpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRCRFwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIkNoYXJhY3RlclwiLCB2YWx1ZTogY2MobmV4dENoYXIpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhcmFjdGVyQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHNldCA9IFtdO1xuICAgICAgICBsZXQgY29tcGxlbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiW1wiKTtcbiAgICAgICAgaWYgKHRoaXMucGVla0NoYXIoMCkgPT09IFwiXlwiKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiXlwiKTtcbiAgICAgICAgICAgIGNvbXBsZW1lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLmlzQ2xhc3NBdG9tKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNsYXNzQXRvbSgpO1xuICAgICAgICAgICAgY29uc3QgaXNGcm9tU2luZ2xlQ2hhciA9IGZyb20udHlwZSA9PT0gXCJDaGFyYWN0ZXJcIjtcbiAgICAgICAgICAgIGlmIChpc0NoYXJhY3Rlcihmcm9tKSAmJiB0aGlzLmlzUmFuZ2VEYXNoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiLVwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0byA9IHRoaXMuY2xhc3NBdG9tKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb1NpbmdsZUNoYXIgPSB0by50eXBlID09PSBcIkNoYXJhY3RlclwiO1xuICAgICAgICAgICAgICAgIC8vIGEgcmFuZ2UgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGJvdGggc2lkZXMgYXJlIHNpbmdsZSBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hhcmFjdGVyKHRvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG8udmFsdWUgPCBmcm9tLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJhbmdlIG91dCBvZiBvcmRlciBpbiBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0LnB1c2goeyBmcm9tOiBmcm9tLnZhbHVlLCB0bzogdG8udmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBsaXRlcmFsIGRhc2hcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9TZXQoZnJvbS52YWx1ZSwgc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LnB1c2goY2MoXCItXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9TZXQodG8udmFsdWUsIHNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5zZXJ0VG9TZXQoZnJvbS52YWx1ZSwgc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiXVwiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJTZXRcIiwgY29tcGxlbWVudDogY29tcGxlbWVudCwgdmFsdWU6IHNldCB9O1xuICAgIH1cbiAgICBjbGFzc0F0b20oKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wZWVrQ2hhcigpKSB7XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIl1cIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxuXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcclwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXHUyMDI4XCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjlcIjpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRCRFwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NFc2NhcGUoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzRXNjYXBlKCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiXFxcXFwiKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKCkpIHtcbiAgICAgICAgICAgIC8vIE1hdGNoZXMgYSBiYWNrc3BhY2UuXG4gICAgICAgICAgICAvLyAoTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggXFxiIHdvcmQgYm91bmRhcnkgb3V0c2lkZSBjaGFyYWN0ZXJDbGFzcylcbiAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcImJcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNjKFwiXFx1MDAwOFwiKSB9O1xuICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7XG4gICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgY2FzZSBcInZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO1xuICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO1xuICAgICAgICAgICAgY2FzZSBcIjBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udWxDaGFyYWN0ZXJBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO1xuICAgICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlkZW50aXR5RXNjYXBlQXRvbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdyb3VwKCkge1xuICAgICAgICBsZXQgY2FwdHVyaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcIihcIik7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wZWVrQ2hhcigwKSkge1xuICAgICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiP1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiOlwiKTtcbiAgICAgICAgICAgICAgICBjYXB0dXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cElkeCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kaXNqdW5jdGlvbigpO1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiKVwiKTtcbiAgICAgICAgY29uc3QgZ3JvdXBBc3QgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIkdyb3VwXCIsXG4gICAgICAgICAgICBjYXB0dXJpbmc6IGNhcHR1cmluZyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNhcHR1cmluZykge1xuICAgICAgICAgICAgZ3JvdXBBc3RbXCJpZHhcIl0gPSB0aGlzLmdyb3VwSWR4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncm91cEFzdDtcbiAgICB9XG4gICAgcG9zaXRpdmVJbnRlZ2VyKCkge1xuICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy5wb3BDaGFyKCk7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY2FuJ3QgZXZlciBnZXQgaGVyZSBkdWUgdG8gcHJldmlvdXMgbG9va2FoZWFkIGNoZWNrc1xuICAgICAgICAvLyBzdGlsbCBpbXBsZW1lbnRpbmcgdGhpcyBlcnJvciBjaGVja2luZyBpbiBjYXNlIHRoaXMgZXZlciBjaGFuZ2VzLlxuICAgICAgICBpZiAoZGVjaW1hbFBhdHRlcm5Ob1plcm8udGVzdChudW1iZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RpbmcgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChkZWNpbWFsUGF0dGVybi50ZXN0KHRoaXMucGVla0NoYXIoMCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5wb3BDaGFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgIH1cbiAgICBpbnRlZ2VySW5jbHVkaW5nWmVybygpIHtcbiAgICAgICAgbGV0IG51bWJlciA9IHRoaXMucG9wQ2hhcigpO1xuICAgICAgICBpZiAoZGVjaW1hbFBhdHRlcm4udGVzdChudW1iZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RpbmcgYW4gaW50ZWdlclwiKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoZGVjaW1hbFBhdHRlcm4udGVzdCh0aGlzLnBlZWtDaGFyKDApKSkge1xuICAgICAgICAgICAgbnVtYmVyICs9IHRoaXMucG9wQ2hhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludChudW1iZXIsIDEwKTtcbiAgICB9XG4gICAgcGF0dGVybkNoYXJhY3RlcigpIHtcbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgc3dpdGNoIChuZXh0Q2hhcikge1xuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXG5cIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxyXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjhcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOVwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIiRcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIipcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiK1wiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCI/XCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIihcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiKVwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcInxcIjpcbiAgICAgICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVEJEXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIkNoYXJhY3RlclwiLCB2YWx1ZTogY2MobmV4dENoYXIpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNSZWdFeHBGbGFnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNSYW5nZURhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlZWtDaGFyKCkgPT09IFwiLVwiICYmIHRoaXMuaXNDbGFzc0F0b20oMSk7XG4gICAgfVxuICAgIGlzRGlnaXQoKSB7XG4gICAgICAgIHJldHVybiBkZWNpbWFsUGF0dGVybi50ZXN0KHRoaXMucGVla0NoYXIoMCkpO1xuICAgIH1cbiAgICBpc0NsYXNzQXRvbShob3dNdWNoID0gMCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoaG93TXVjaCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJdXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFxuXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFxyXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOFwiOlxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzVGVybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBdG9tKCkgfHwgdGhpcy5pc0Fzc2VydGlvbigpO1xuICAgIH1cbiAgICBpc0F0b20oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOiAvLyBhdG9tRXNjYXBlXG4gICAgICAgICAgICBjYXNlIFwiW1wiOiAvLyBjaGFyYWN0ZXJDbGFzc1xuICAgICAgICAgICAgLy8gVE9ETzogaXNBdG9tIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpc0Fzc2VydGlvbiAtIGRpc2FtYmlndWF0ZVxuICAgICAgICAgICAgY2FzZSBcIihcIjogLy8gZ3JvdXBcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzQXNzZXJ0aW9uKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgLy8gJ1xcYicgb3IgJ1xcQidcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJCXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAnKD89JyBvciAnKD8hJ1xuICAgICAgICAgICAgY2FzZSBcIihcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucGVla0NoYXIoMSkgPT09IFwiP1wiICYmXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnBlZWtDaGFyKDIpID09PSBcIj1cIiB8fCB0aGlzLnBlZWtDaGFyKDIpID09PSBcIiFcIikpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNRdWFudGlmaWVyKCkge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVhbnRpZmllcih0cnVlKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShwcmV2U3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzUGF0dGVybkNoYXJhY3RlcigpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgICAgY2FzZSBcIlxcXFxcIjpcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICBjYXNlIFwiKlwiOlxuICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgIGNhc2UgXCI/XCI6XG4gICAgICAgICAgICBjYXNlIFwiKFwiOlxuICAgICAgICAgICAgY2FzZSBcIilcIjpcbiAgICAgICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgICBjYXNlIFwifFwiOlxuICAgICAgICAgICAgY2FzZSBcIi9cIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXG5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXHJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXHUyMDI4XCI6XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VIZXhEaWdpdHMoaG93TWFueSkge1xuICAgICAgICBsZXQgaGV4U3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBob3dNYW55OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGhleENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgICAgIGlmIChoZXhEaWdpdFBhdHRlcm4udGVzdChoZXhDaGFyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGluZyBhIEhleERlY2ltYWwgZGlnaXRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGV4U3RyaW5nICs9IGhleENoYXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBwYXJzZUludChoZXhTdHJpbmcsIDE2KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNoYXJDb2RlIH07XG4gICAgfVxuICAgIHBlZWtDaGFyKGhvd011Y2ggPSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0W3RoaXMuaWR4ICsgaG93TXVjaF07XG4gICAgfVxuICAgIHBvcENoYXIoKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gdGhpcy5wZWVrQ2hhcigwKTtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gbmV4dENoYXI7XG4gICAgfVxuICAgIGNvbnN1bWVDaGFyKGNoYXIpIHtcbiAgICAgICAgaWYgKGNoYXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlucHV0W3RoaXMuaWR4XSAhPT0gY2hhcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZDogJ1wiICtcbiAgICAgICAgICAgICAgICBjaGFyICtcbiAgICAgICAgICAgICAgICBcIicgYnV0IGZvdW5kOiAnXCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRbdGhpcy5pZHhdICtcbiAgICAgICAgICAgICAgICBcIicgYXQgb2Zmc2V0OiBcIiArXG4gICAgICAgICAgICAgICAgdGhpcy5pZHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkeCA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlkeCsrO1xuICAgIH1cbiAgICBsb2MoYmVnaW4pIHtcbiAgICAgICAgcmV0dXJuIHsgYmVnaW46IGJlZ2luLCBlbmQ6IHRoaXMuaWR4IH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVnZXhwLXBhcnNlci5qcy5tYXAiLAogICAgImV4cG9ydCBjbGFzcyBCYXNlUmVnRXhwVmlzaXRvciB7XG4gICAgdmlzaXRDaGlsZHJlbihub2RlKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5mb3JFYWNoKChzdWJDaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpdChzdWJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdChub2RlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiUGF0dGVyblwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZsYWdzXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdEZsYWdzKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkRpc2p1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdERpc2p1bmN0aW9uKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkFsdGVybmF0aXZlXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdEFsdGVybmF0aXZlKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlN0YXJ0QW5jaG9yXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdFN0YXJ0QW5jaG9yKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkVuZEFuY2hvclwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRFbmRBbmNob3Iobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiV29yZEJvdW5kYXJ5XCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdFdvcmRCb3VuZGFyeShub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJOb25Xb3JkQm91bmRhcnlcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9uV29yZEJvdW5kYXJ5KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkxvb2thaGVhZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRMb29rYWhlYWQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiTmVnYXRpdmVMb29rYWhlYWRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiQ2hhcmFjdGVyXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdENoYXJhY3Rlcihub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0U2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkdyb3VwXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdEdyb3VwKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkdyb3VwQmFja1JlZmVyZW5jZVwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRHcm91cEJhY2tSZWZlcmVuY2Uobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiUXVhbnRpZmllclwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRRdWFudGlmaWVyKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTtcbiAgICB9XG4gICAgdmlzaXRQYXR0ZXJuKG5vZGUpIHsgfVxuICAgIHZpc2l0RmxhZ3Mobm9kZSkgeyB9XG4gICAgdmlzaXREaXNqdW5jdGlvbihub2RlKSB7IH1cbiAgICB2aXNpdEFsdGVybmF0aXZlKG5vZGUpIHsgfVxuICAgIC8vIEFzc2VydGlvblxuICAgIHZpc2l0U3RhcnRBbmNob3Iobm9kZSkgeyB9XG4gICAgdmlzaXRFbmRBbmNob3Iobm9kZSkgeyB9XG4gICAgdmlzaXRXb3JkQm91bmRhcnkobm9kZSkgeyB9XG4gICAgdmlzaXROb25Xb3JkQm91bmRhcnkobm9kZSkgeyB9XG4gICAgdmlzaXRMb29rYWhlYWQobm9kZSkgeyB9XG4gICAgdmlzaXROZWdhdGl2ZUxvb2thaGVhZChub2RlKSB7IH1cbiAgICAvLyBhdG9tc1xuICAgIHZpc2l0Q2hhcmFjdGVyKG5vZGUpIHsgfVxuICAgIHZpc2l0U2V0KG5vZGUpIHsgfVxuICAgIHZpc2l0R3JvdXAobm9kZSkgeyB9XG4gICAgdmlzaXRHcm91cEJhY2tSZWZlcmVuY2Uobm9kZSkgeyB9XG4gICAgdmlzaXRRdWFudGlmaWVyKG5vZGUpIHsgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS1yZWdleHAtdmlzaXRvci5qcy5tYXAiLAogICAgImV4cG9ydCB7IFJlZ0V4cFBhcnNlciB9IGZyb20gXCIuL3JlZ2V4cC1wYXJzZXIuanNcIjtcbmV4cG9ydCB7IEJhc2VSZWdFeHBWaXNpdG9yIH0gZnJvbSBcIi4vYmFzZS1yZWdleHAtdmlzaXRvci5qc1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgUmVnRXhwUGFyc2VyLCBCYXNlUmVnRXhwVmlzaXRvciB9IGZyb20gJ0BjaGV2cm90YWluL3JlZ2V4cC10by1hc3QnO1xuZXhwb3J0IGNvbnN0IE5FV0xJTkVfUkVHRVhQID0gL1xccj9cXG4vZ207XG5jb25zdCByZWdleHBQYXJzZXIgPSBuZXcgUmVnRXhwUGFyc2VyKCk7XG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgaW4gY2hhcmdlIG9mIGhldXJpc3RpY2FsbHkgaWRlbnRpZnlpbmcgc3RhcnQvZW5kIHRva2VucyBvZiB0ZXJtaW5hbHMuXG4gKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAxLiBUcmF2ZXJzZSB0aGUgcmVndWxhciBleHByZXNzaW9uIGluIHRoZSBcInN0YXJ0IHN0YXRlXCJcbiAqIDIuIEFkZCBhbnkgZW5jb3VudGVyZWQgc2V0cy9zaW5nbGUgY2hhcmFjdGVycyB0byB0aGUgXCJzdGFydCByZWdleHBcIlxuICogMy4gT25jZSB3ZSBlbmNvdW50ZXIgYW55IHZhcmlhYmxlLWxlbmd0aCBjb250ZW50IChpLmUuIHdpdGggcXVhbnRpZmllcnMgc3VjaCBhcyArLz8vKiksIHdlIGVudGVyIHRoZSBcImVuZCBzdGF0ZVwiXG4gKiA0LiBJbiB0aGUgZW5kIHN0YXRlLCBhbnkgc2V0cy9zaW5nbGUgY2hhcmFjdGVycyBhcmUgYWRkZWQgdG8gYW4gXCJlbmQgc3RhY2tcIi5cbiAqIDUuIElmIHdlIHJlLWVuY291bnRlciBhbnkgdmFyaWFibGUtbGVuZ3RoIGNvbnRlbnQgd2UgcmVzZXQgdGhlIGVuZCBzdGFja1xuICogNi4gV2UgY29udGludWUgdmlzaXRpbmcgdGhlIHJlZ2V4IHVudGlsIHRoZSBlbmQsIHJlc2V0aW5nIHRoZSBlbmQgc3RhY2sgYW5kIHJlYnVpbGRpbmcgaXQgYXMgbmVjZXNzYXJ5XG4gKlxuICogQWZ0ZXIgdHJhdmVyc2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGUgYHN0YXJ0UmVnZXhwL2VuZFJlZ2V4cGAgcHJvcGVydGllcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIHN0b3JlZCBzdGFydC9lbmQgb2YgdGhlIHRlcm1pbmFsXG4gKi9cbmNsYXNzIFRlcm1pbmFsUmVnRXhwVmlzaXRvciBleHRlbmRzIEJhc2VSZWdFeHBWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbmRSZWdleHBTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLm11bHRpbGluZSA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgZW5kUmVnZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuZFJlZ2V4cFN0YWNrLmpvaW4oJycpO1xuICAgIH1cbiAgICByZXNldChyZWdleCkge1xuICAgICAgICB0aGlzLm11bHRpbGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7XG4gICAgICAgIHRoaXMuc3RhcnRSZWdleHAgPSAnJztcbiAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbmRSZWdleHBTdGFjayA9IFtdO1xuICAgIH1cbiAgICB2aXNpdEdyb3VwKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucXVhbnRpZmllcikge1xuICAgICAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuZFJlZ2V4cFN0YWNrID0gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDaGFyYWN0ZXIobm9kZSkge1xuICAgICAgICBjb25zdCBjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShub2RlLnZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpbGluZSAmJiBjaGFyID09PSAnXFxuJykge1xuICAgICAgICAgICAgdGhpcy5tdWx0aWxpbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnF1YW50aWZpZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdGFydGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWdleHBTdGFjayA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXNjYXBlZENoYXIgPSBlc2NhcGVSZWdFeHAoY2hhcik7XG4gICAgICAgICAgICB0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2goZXNjYXBlZENoYXIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWdleHAgKz0gZXNjYXBlZENoYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRTZXQobm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlsaW5lKSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnJlZ2V4LnN1YnN0cmluZyhub2RlLmxvYy5iZWdpbiwgbm9kZS5sb2MuZW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzZXQpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aWxpbmUgPSBCb29sZWFuKCdcXG4nLm1hdGNoKHJlZ2V4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucXVhbnRpZmllcikge1xuICAgICAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuZFJlZ2V4cFN0YWNrID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnJlZ2V4LnN1YnN0cmluZyhub2RlLmxvYy5iZWdpbiwgbm9kZS5sb2MuZW5kKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVnZXhwU3RhY2sucHVzaChzZXQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWdleHAgKz0gc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q2hpbGRyZW4obm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnR3JvdXAnKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgY2hpbGRyZW4gb2YgZ3JvdXBzIHdpdGggcXVhbnRpZmllciAoKy8qLz8pXG4gICAgICAgICAgICAvLyBUaGVzZSBncm91cHMgYXJlIHVucmVsYXRlZCB0byBzdGFydC9lbmQgdG9rZW5zIG9mIHRlcm1pbmFsc1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBub2RlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLnF1YW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIudmlzaXRDaGlsZHJlbihub2RlKTtcbiAgICB9XG59XG5jb25zdCB2aXNpdG9yID0gbmV3IFRlcm1pbmFsUmVnRXhwVmlzaXRvcigpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmFsUGFydHMocmVnZXhwKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZWdleHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZWdleHAgPSByZWdleHAuc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2V4cCA9IGAvJHtyZWdleHB9L2A7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSByZWdleHBQYXJzZXIucGF0dGVybihyZWdleHApO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGFsdGVybmF0aXZlIG9mIHBhdHRlcm4udmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIHZpc2l0b3IucmVzZXQocmVnZXhwKTtcbiAgICAgICAgICAgIHZpc2l0b3IudmlzaXQoYWx0ZXJuYXRpdmUpO1xuICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHZpc2l0b3Iuc3RhcnRSZWdleHAsXG4gICAgICAgICAgICAgICAgZW5kOiB2aXNpdG9yLmVuZFJlZ2V4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlsaW5lQ29tbWVudChyZWdleHApIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHJlZ2V4cCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwKTtcbiAgICAgICAgfVxuICAgICAgICByZWdleHAgPSByZWdleHAudG9TdHJpbmcoKTtcbiAgICAgICAgdmlzaXRvci5yZXNldChyZWdleHApO1xuICAgICAgICAvLyBQYXJzaW5nIHRoZSBwYXR0ZXJuIG1pZ2h0IGZhaWwgKHNpbmNlIGl0J3MgdXNlciBjb2RlKVxuICAgICAgICB2aXNpdG9yLnZpc2l0KHJlZ2V4cFBhcnNlci5wYXR0ZXJuKHJlZ2V4cCkpO1xuICAgICAgICByZXR1cm4gdmlzaXRvci5tdWx0aWxpbmU7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZSh2YWx1ZSkge1xuICAgIGNvbnN0IHJlZ2V4cCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgUmVnRXhwKHZhbHVlKSA6IHZhbHVlO1xuICAgIHJldHVybiByZWdleHAudGVzdCgnICcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENhc2VJbnNlbnNpdGl2ZVBhdHRlcm4oa2V5d29yZCkge1xuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoa2V5d29yZCwgbGV0dGVyID0+IC9cXHcvLnRlc3QobGV0dGVyKSA/IGBbJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX0ke2xldHRlci50b1VwcGVyQ2FzZSgpfV1gIDogZXNjYXBlUmVnRXhwKGxldHRlcikpLmpvaW4oJycpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGhhcyBhIHBhcnRpYWwgbWF0Y2ggd2l0aCB0aGUgc3BlY2lmaWVkIHJlZ2V4LlxuICogQHBhcmFtIHJlZ2V4IFRoZSByZWdleCB0byBwYXJ0aWFsbHkgbWF0Y2ggYWdhaW5zdFxuICogQHBhcmFtIGlucHV0IFRoZSBpbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW55IG1hdGNoIGV4aXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaGVzKHJlZ2V4LCBpbnB1dCkge1xuICAgIGNvbnN0IHBhcnRpYWwgPSBwYXJ0aWFsUmVnRXhwKHJlZ2V4KTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKHBhcnRpYWwpO1xuICAgIHJldHVybiAhIW1hdGNoICYmIG1hdGNoWzBdLmxlbmd0aCA+IDA7XG59XG4vKipcbiAqIEJ1aWxkcyBhIHBhcnRpYWwgcmVnZXggZnJvbSB0aGUgaW5wdXQgcmVnZXguIEEgcGFydGlhbCByZWdleCBpcyBhYmxlIHRvIG1hdGNoIGluY29tcGxldGUgaW5wdXQgc3RyaW5ncy4gRS5nLlxuICogYSBwYXJ0aWFsIHJlZ2V4IGNvbnN0cnVjdGVkIGZyb20gYC9hYi9gIGlzIGFibGUgdG8gbWF0Y2ggdGhlIHN0cmluZyBgYWAgd2l0aG91dCBuZWVkaW5nIGEgZm9sbG93aW5nIGBiYCBjaGFyYWN0ZXIuIEhvd2V2ZXIgaXQgd29uJ3QgbWF0Y2ggYGJgIGFsb25lLlxuICogQHBhcmFtIHJlZ2V4IFRoZSBpbnB1dCByZWdleCB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJucyBBIHBhcnRpYWwgcmVnZXggY29uc3RydWN0ZWQgZnJvbSB0aGUgaW5wdXQgcmVnZXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsUmVnRXhwKHJlZ2V4KSB7XG4gICAgaWYgKHR5cGVvZiByZWdleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4KTtcbiAgICB9XG4gICAgY29uc3QgcmUgPSByZWdleCwgc291cmNlID0gcmVnZXguc291cmNlO1xuICAgIGxldCBpID0gMDtcbiAgICBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJycsIHRtcDtcbiAgICAgICAgZnVuY3Rpb24gYXBwZW5kUmF3KG5iQ2hhcnMpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzb3VyY2Uuc3Vic3RyKGksIG5iQ2hhcnMpO1xuICAgICAgICAgICAgaSArPSBuYkNoYXJzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGVuZE9wdGlvbmFsKG5iQ2hhcnMpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnKD86JyArIHNvdXJjZS5zdWJzdHIoaSwgbmJDaGFycykgKyAnfCQpJztcbiAgICAgICAgICAgIGkgKz0gbmJDaGFycztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc291cmNlW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc291cmNlW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZS51bmljb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaSArIDJdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE9wdGlvbmFsKHNvdXJjZS5pbmRleE9mKCd9JywgaSkgLSBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmUudW5pY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbChzb3VyY2UuaW5kZXhPZignfScsIGkpIC0gaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnayc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoc291cmNlLmluZGV4T2YoJz4nLCBpKSAtIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICAgICAgICAgIHRtcCA9IC9cXFsoPzpcXFxcLnwuKSo/XFxdL2c7XG4gICAgICAgICAgICAgICAgICAgIHRtcC5sYXN0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAuZXhlYyhzb3VyY2UpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCh0bXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnXic6XG4gICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJhdygxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICAgICAgICAgIHRtcCA9IC9cXHtcXGQrLD9cXGQqXFx9L2c7XG4gICAgICAgICAgICAgICAgICAgIHRtcC5sYXN0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAuZXhlYyhzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSYXcodG1wWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpICsgMV0gPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzb3VyY2VbaSArIDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnKD86JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvY2VzcygpICsgJ3wkKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyg/PSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHByb2Nlc3MoKSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc291cmNlLnN1YnN0cih0bXAsIGkgLSB0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzb3VyY2VbaSArIDNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc9JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc291cmNlLnN1YnN0cih0bXAsIGkgLSB0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSYXcoc291cmNlLmluZGV4T2YoJz4nLCBpKSAtIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvY2VzcygpICsgJ3wkKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSYXcoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvY2VzcygpICsgJ3wkKSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAocHJvY2VzcygpLCByZWdleC5mbGFncyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdleHAtdXRpbHMuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGFzc2VydFVucmVhY2hhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3JzLmpzJztcbmltcG9ydCAqIGFzIGFzdCBmcm9tICcuLi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyc7XG5pbXBvcnQgeyBpc0NvbXBvc2l0ZUNzdE5vZGUgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBnZXRDb250YWluZXJPZlR5cGUsIHN0cmVhbUFsbENvbnRlbnRzIH0gZnJvbSAnLi9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgc3RyZWFtQ3N0IH0gZnJvbSAnLi9jc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgZXNjYXBlUmVnRXhwIH0gZnJvbSAnLi9yZWdleHAtdXRpbHMuanMnO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbnRyeSBydWxlIG9mIHRoZSBnaXZlbiBncmFtbWFyLCBpZiBhbnkuIElmIHRoZSBncmFtbWFyIGZpbGUgZG9lcyBub3QgY29udGFpbiBhbiBlbnRyeSBydWxlLFxuICogdGhlIHJlc3VsdCBpcyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5UnVsZShncmFtbWFyKSB7XG4gICAgcmV0dXJuIGdyYW1tYXIucnVsZXMuZmluZChlID0+IGFzdC5pc1BhcnNlclJ1bGUoZSkgJiYgZS5lbnRyeSk7XG59XG4vKipcbiAqIFJldHVybnMgYWxsIGhpZGRlbiB0ZXJtaW5hbCBydWxlcyBvZiB0aGUgZ2l2ZW4gZ3JhbW1hciwgaWYgYW55LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuUnVsZXMoZ3JhbW1hcikge1xuICAgIHJldHVybiBncmFtbWFyLnJ1bGVzLmZpbHRlcigoZSkgPT4gYXN0LmlzVGVybWluYWxSdWxlKGUpICYmIGUuaGlkZGVuKTtcbn1cbi8qKlxuICogUmV0dXJucyBhbGwgcnVsZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSB0b3Btb3N0IHJ1bGVzIG9mIHRoZSBzcGVjaWZpZWQgZ3JhbW1hciAoZW50cnkgYW5kIGhpZGRlbiB0ZXJtaW5hbCBydWxlcykuXG4gKlxuICogQHBhcmFtIGdyYW1tYXIgVGhlIGdyYW1tYXIgdGhhdCBjb250YWlucyBhbGwgcnVsZXNcbiAqIEBwYXJhbSBhbGxUZXJtaW5hbHMgV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0ZXJtaW5hbHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBvbmx5IGJ5IG90aGVyIHRlcm1pbmFsc1xuICogQHJldHVybnMgQSBsaXN0IG9mIHJlZmVyZW5jZWQgcGFyc2VyIGFuZCB0ZXJtaW5hbCBydWxlcy4gSWYgdGhlIGdyYW1tYXIgY29udGFpbnMgbm8gZW50cnkgcnVsZSxcbiAqICAgICAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCBydWxlcyBvZiB0aGUgc3BlY2lmaWVkIGdyYW1tYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxSZWFjaGFibGVSdWxlcyhncmFtbWFyLCBhbGxUZXJtaW5hbHMpIHtcbiAgICBjb25zdCBydWxlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZW50cnlSdWxlID0gZ2V0RW50cnlSdWxlKGdyYW1tYXIpO1xuICAgIGlmICghZW50cnlSdWxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KGdyYW1tYXIucnVsZXMpO1xuICAgIH1cbiAgICBjb25zdCB0b3BNb3N0UnVsZXMgPSBbZW50cnlSdWxlXS5jb25jYXQoZ2V0SGlkZGVuUnVsZXMoZ3JhbW1hcikpO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiB0b3BNb3N0UnVsZXMpIHtcbiAgICAgICAgcnVsZURmcyhydWxlLCBydWxlTmFtZXMsIGFsbFRlcm1pbmFscyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1bGVzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBncmFtbWFyLnJ1bGVzKSB7XG4gICAgICAgIGlmIChydWxlTmFtZXMuaGFzKHJ1bGUubmFtZSkgfHwgKGFzdC5pc1Rlcm1pbmFsUnVsZShydWxlKSAmJiBydWxlLmhpZGRlbikpIHtcbiAgICAgICAgICAgIHJ1bGVzLmFkZChydWxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcnVsZXM7XG59XG5mdW5jdGlvbiBydWxlRGZzKHJ1bGUsIHZpc2l0ZWRTZXQsIGFsbFRlcm1pbmFscykge1xuICAgIHZpc2l0ZWRTZXQuYWRkKHJ1bGUubmFtZSk7XG4gICAgc3RyZWFtQWxsQ29udGVudHMocnVsZSkuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgaWYgKGFzdC5pc1J1bGVDYWxsKG5vZGUpIHx8IChhbGxUZXJtaW5hbHMgJiYgYXN0LmlzVGVybWluYWxSdWxlQ2FsbChub2RlKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZlJ1bGUgPSBub2RlLnJ1bGUucmVmO1xuICAgICAgICAgICAgaWYgKHJlZlJ1bGUgJiYgIXZpc2l0ZWRTZXQuaGFzKHJlZlJ1bGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBydWxlRGZzKHJlZlJ1bGUsIHZpc2l0ZWRTZXQsIGFsbFRlcm1pbmFscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZ3JhbW1hciBleHByZXNzaW9uIHVzZWQgdG8gcGFyc2UgYSBjcm9zcy1yZWZlcmVuY2UgKHVzdWFsbHkgYSByZWZlcmVuY2UgdG8gYSB0ZXJtaW5hbCBydWxlKS5cbiAqIEEgY3Jvc3MtcmVmZXJlbmNlIGNhbiBkZWNsYXJlIHRoaXMgZXhwcmVzc2lvbiBleHBsaWNpdGx5IGluIHRoZSBmb3JtIGBbVHlwZSA6IFRlcm1pbmFsXWAsIGJ1dCBpZiBgVGVybWluYWxgXG4gKiBpcyBvbWl0dGVkLCB0aGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGluZmVyIGl0IGZyb20gdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZWQgYFR5cGVgICh1c2luZyBgZmluZE5hbWVBc3NpZ25tZW50YCkuXG4gKlxuICogUmV0dXJucyB0aGUgZ3JhbW1hciBleHByZXNzaW9uIHVzZWQgdG8gcGFyc2UgdGhlIGdpdmVuIGNyb3NzLXJlZmVyZW5jZSwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgaXMgbm90IGRlY2xhcmVkXG4gKiBhbmQgY2Fubm90IGJlIGluZmVycmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3Jvc3NSZWZlcmVuY2VUZXJtaW5hbChjcm9zc1JlZikge1xuICAgIGlmIChjcm9zc1JlZi50ZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4gY3Jvc3NSZWYudGVybWluYWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNyb3NzUmVmLnR5cGUucmVmKSB7XG4gICAgICAgIGNvbnN0IG5hbWVBc3NpZ21lbnQgPSBmaW5kTmFtZUFzc2lnbm1lbnQoY3Jvc3NSZWYudHlwZS5yZWYpO1xuICAgICAgICByZXR1cm4gbmFtZUFzc2lnbWVudCA9PT0gbnVsbCB8fCBuYW1lQXNzaWdtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYW1lQXNzaWdtZW50LnRlcm1pbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIHRlcm1pbmFsIHJ1bGUgcmVwcmVzZW50cyBhIGNvbW1lbnQuIFRoaXMgaXMgdHJ1ZSBpZiB0aGUgcnVsZSBpcyBtYXJrZWRcbiAqIGFzIGBoaWRkZW5gIGFuZCBpdCBkb2VzIG5vdCBtYXRjaCB3aGl0ZSBzcGFjZS4gVGhpcyBtZWFucyBldmVyeSBoaWRkZW4gdG9rZW4gKGkuZS4gZXhjbHVkZWQgZnJvbSB0aGUgQVNUKVxuICogdGhhdCBjb250YWlucyB2aXNpYmxlIGNoYXJhY3RlcnMgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1lbnRUZXJtaW5hbCh0ZXJtaW5hbFJ1bGUpIHtcbiAgICByZXR1cm4gdGVybWluYWxSdWxlLmhpZGRlbiAmJiAhdGVybWluYWxSZWdleCh0ZXJtaW5hbFJ1bGUpLnRlc3QoJyAnKTtcbn1cbi8qKlxuICogRmluZCBhbGwgQ1NUIG5vZGVzIHdpdGhpbiB0aGUgZ2l2ZW4gbm9kZSB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBBIENTVCBub2RlIGluIHdoaWNoIHRvIGxvb2sgZm9yIHByb3BlcnR5IGFzc2lnbm1lbnRzLiBJZiB0aGlzIGlzIHVuZGVmaW5lZCwgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBhcnJheS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHByb3BlcnR5IG5hbWUgb2YgdGhlIGNvbnN0cnVjdGVkIEFTVCBub2RlLiBJZiB0aGlzIGlzIHVuZGVmaW5lZCwgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROb2Rlc0ZvclByb3BlcnR5KG5vZGUsIHByb3BlcnR5KSB7XG4gICAgaWYgKCFub2RlIHx8ICFwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBmaW5kTm9kZXNGb3JQcm9wZXJ0eUludGVybmFsKG5vZGUsIHByb3BlcnR5LCBub2RlLmFzdE5vZGUsIHRydWUpO1xufVxuLyoqXG4gKiBGaW5kIGEgc2luZ2xlIENTVCBub2RlIHdpdGhpbiB0aGUgZ2l2ZW4gbm9kZSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG5vZGUgQSBDU1Qgbm9kZSBpbiB3aGljaCB0byBsb29rIGZvciBwcm9wZXJ0eSBhc3NpZ25tZW50cy4gSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZSByZXN1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3RlZCBBU1Qgbm9kZS4gSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZSByZXN1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gaW5kZXggSWYgbm8gaW5kZXggaXMgc3BlY2lmaWVkIG9yIHRoZSBpbmRleCBpcyBsZXNzIHRoYW4gemVybywgdGhlIGZpcnN0IGZvdW5kIG5vZGUgaXMgcmV0dXJuZWQuIElmIHRoZVxuICogICAgICAgIHNwZWNpZmllZCBpbmRleCBleGNlZWRzIHRoZSBudW1iZXIgb2YgYXNzaWdubWVudHMgdG8gdGhlIHByb3BlcnR5LCB0aGUgbGFzdCBmb3VuZCBub2RlIGlzIHJldHVybmVkLiBPdGhlcndpc2UsXG4gKiAgICAgICAgdGhlIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVGb3JQcm9wZXJ0eShub2RlLCBwcm9wZXJ0eSwgaW5kZXgpIHtcbiAgICBpZiAoIW5vZGUgfHwgIXByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVzID0gZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbChub2RlLCBwcm9wZXJ0eSwgbm9kZS5hc3ROb2RlLCB0cnVlKTtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIG5vZGVzLmxlbmd0aCAtIDEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzW2luZGV4XTtcbn1cbmZ1bmN0aW9uIGZpbmROb2Rlc0ZvclByb3BlcnR5SW50ZXJuYWwobm9kZSwgcHJvcGVydHksIGVsZW1lbnQsIGZpcnN0KSB7XG4gICAgaWYgKCFmaXJzdCkge1xuICAgICAgICBjb25zdCBub2RlRmVhdHVyZSA9IGdldENvbnRhaW5lck9mVHlwZShub2RlLmdyYW1tYXJTb3VyY2UsIGFzdC5pc0Fzc2lnbm1lbnQpO1xuICAgICAgICBpZiAobm9kZUZlYXR1cmUgJiYgbm9kZUZlYXR1cmUuZmVhdHVyZSA9PT0gcHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBbbm9kZV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ29tcG9zaXRlQ3N0Tm9kZShub2RlKSAmJiBub2RlLmFzdE5vZGUgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY29udGVudC5mbGF0TWFwKGUgPT4gZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbChlLCBwcm9wZXJ0eSwgZWxlbWVudCwgZmFsc2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBGaW5kIGFsbCBDU1Qgbm9kZXMgd2l0aGluIHRoZSBnaXZlbiBub2RlIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGtleXdvcmQuXG4gKlxuICogQHBhcmFtIG5vZGUgQSBDU1Qgbm9kZSBpbiB3aGljaCB0byBsb29rIGZvciBrZXl3b3Jkcy4gSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgYXJyYXkuXG4gKiBAcGFyYW0ga2V5d29yZCBBIGtleXdvcmQgYXMgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVzRm9yS2V5d29yZChub2RlLCBrZXl3b3JkKSB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmROb2Rlc0ZvcktleXdvcmRJbnRlcm5hbChub2RlLCBrZXl3b3JkLCBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUuYXN0Tm9kZSk7XG59XG4vKipcbiAqIEZpbmQgYSBzaW5nbGUgQ1NUIG5vZGUgd2l0aGluIHRoZSBnaXZlbiBub2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBrZXl3b3JkLlxuICpcbiAqIEBwYXJhbSBub2RlIEEgQ1NUIG5vZGUgaW4gd2hpY2ggdG8gbG9vayBmb3Iga2V5d29yZHMuIElmIHRoaXMgaXMgdW5kZWZpbmVkLCB0aGUgcmVzdWx0IGlzIGB1bmRlZmluZWRgLlxuICogQHBhcmFtIGtleXdvcmQgQSBrZXl3b3JkIGFzIHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci5cbiAqIEBwYXJhbSBpbmRleCBJZiBubyBpbmRleCBpcyBzcGVjaWZpZWQgb3IgdGhlIGluZGV4IGlzIGxlc3MgdGhhbiB6ZXJvLCB0aGUgZmlyc3QgZm91bmQgbm9kZSBpcyByZXR1cm5lZC4gSWYgdGhlXG4gKiAgICAgICAgc3BlY2lmaWVkIGluZGV4IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBrZXl3b3JkIG9jY3VycmVuY2VzLCB0aGUgbGFzdCBmb3VuZCBub2RlIGlzIHJldHVybmVkLiBPdGhlcndpc2UsXG4gKiAgICAgICAgdGhlIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVGb3JLZXl3b3JkKG5vZGUsIGtleXdvcmQsIGluZGV4KSB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVzID0gZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsKG5vZGUsIGtleXdvcmQsIG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbm9kZS5hc3ROb2RlKTtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIG5vZGVzLmxlbmd0aCAtIDEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzW2luZGV4XTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm9kZXNGb3JLZXl3b3JkSW50ZXJuYWwobm9kZSwga2V5d29yZCwgZWxlbWVudCkge1xuICAgIGlmIChub2RlLmFzdE5vZGUgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoYXN0LmlzS2V5d29yZChub2RlLmdyYW1tYXJTb3VyY2UpICYmIG5vZGUuZ3JhbW1hclNvdXJjZS52YWx1ZSA9PT0ga2V5d29yZCkge1xuICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgIH1cbiAgICBjb25zdCB0cmVlSXRlcmF0b3IgPSBzdHJlYW1Dc3Qobm9kZSkuaXRlcmF0b3IoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IGtleXdvcmROb2RlcyA9IFtdO1xuICAgIGRvIHtcbiAgICAgICAgcmVzdWx0ID0gdHJlZUl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5hc3ROb2RlID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFzdC5pc0tleXdvcmQoY2hpbGROb2RlLmdyYW1tYXJTb3VyY2UpICYmIGNoaWxkTm9kZS5ncmFtbWFyU291cmNlLnZhbHVlID09PSBrZXl3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZXJhdG9yLnBydW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IHdoaWxlICghcmVzdWx0LmRvbmUpO1xuICAgIHJldHVybiBrZXl3b3JkTm9kZXM7XG59XG4vKipcbiAqIElmIHRoZSBnaXZlbiBDU1Qgbm9kZSB3YXMgcGFyc2VkIGluIHRoZSBjb250ZXh0IG9mIGEgcHJvcGVydHkgYXNzaWdubWVudCwgdGhlIHJlc3BlY3RpdmUgYEFzc2lnbm1lbnRgIGdyYW1tYXJcbiAqIG5vZGUgaXMgcmV0dXJuZWQuIElmIG5vIGFzc2lnbm1lbnQgaXMgZm91bmQsIHRoZSByZXN1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIGNzdE5vZGUgQSBDU1Qgbm9kZSBmb3Igd2hpY2ggdG8gZmluZCBhIHByb3BlcnR5IGFzc2lnbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQXNzaWdubWVudChjc3ROb2RlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGFzdE5vZGUgPSBjc3ROb2RlLmFzdE5vZGU7XG4gICAgLy8gT25seSBzZWFyY2ggdW50aWwgdGhlIGFzdCBub2RlIG9mIHRoZSBwYXJlbnQgY3N0IG5vZGUgaXMgbm8gbG9uZ2VyIHRoZSBvcmlnaW5hbCBhc3Qgbm9kZVxuICAgIC8vIFRoaXMgd291bGQgbWFrZSB1cyBqdW1wIHRvIGEgcHJlY2VkaW5nIHJ1bGUgY2FsbCwgd2hpY2ggY29udGFpbnMgb25seSB1bnJlbGF0ZWQgYXNzaWdubWVudHNcbiAgICB3aGlsZSAoYXN0Tm9kZSA9PT0gKChfYSA9IGNzdE5vZGUuY29udGFpbmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYXN0Tm9kZSkpIHtcbiAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IGdldENvbnRhaW5lck9mVHlwZShjc3ROb2RlLmdyYW1tYXJTb3VyY2UsIGFzdC5pc0Fzc2lnbm1lbnQpO1xuICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3N0Tm9kZSA9IGNzdE5vZGUuY29udGFpbmVyO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBGaW5kIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGBuYW1lYCBwcm9wZXJ0eSBmb3IgdGhlIGdpdmVuIGdyYW1tYXIgdHlwZS4gVGhpcyByZXF1aXJlcyB0aGUgYHR5cGVgIHRvIGJlIGluZmVycmVkXG4gKiBmcm9tIGEgcGFyc2VyIHJ1bGUsIGFuZCB0aGF0IHJ1bGUgbXVzdCBjb250YWluIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGBuYW1lYCBwcm9wZXJ0eS4gSW4gYWxsIG90aGVyIGNhc2VzLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5hbWVBc3NpZ25tZW50KHR5cGUpIHtcbiAgICBsZXQgc3RhcnROb2RlID0gdHlwZTtcbiAgICBpZiAoYXN0LmlzSW5mZXJyZWRUeXBlKHN0YXJ0Tm9kZSkpIHtcbiAgICAgICAgLy8gZm9yIGluZmVycmVkIHR5cGVzLCB0aGUgbG9jYXRpb24gdG8gc3RhcnQgc2VhcmNoaW5nIGZvciB0aGUgbmFtZS1hc3NpZ25tZW50IGlzIGRpZmZlcmVudFxuICAgICAgICBpZiAoYXN0LmlzQWN0aW9uKHN0YXJ0Tm9kZS4kY29udGFpbmVyKSkge1xuICAgICAgICAgICAgLy8gYSB0eXBlIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5mZXJyZWQgYnkgYW4gYWN0aW9uOiBpbnZlc3RpZ2F0ZSB0aGUgc2liYmxpbmcgb2YgdGhlIEFjdGlvbiBub2RlLCBpLmUuIHN0YXJ0IHNlYXJjaGluZyBhdCB0aGUgQWN0aW9uJ3MgcGFyZW50XG4gICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUuJGNvbnRhaW5lci4kY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFzdC5pc1BhcnNlclJ1bGUoc3RhcnROb2RlLiRjb250YWluZXIpKSB7XG4gICAgICAgICAgICAvLyBpbnZlc3RpZ2F0ZSB0aGUgcGFyc2VyIHJ1bGUgd2l0aCB0aGUgZXhwbGljaXRseSBpbmZlcnJlZCB0eXBlXG4gICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUuJGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXJ0Tm9kZS4kY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwodHlwZSwgc3RhcnROb2RlLCBuZXcgTWFwKCkpO1xufVxuZnVuY3Rpb24gZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwodHlwZSwgc3RhcnROb2RlLCBjYWNoZSkge1xuICAgIHZhciBfYTtcbiAgICAvLyB0aGUgY2FjaGUgaXMgb25seSByZXF1aXJlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gICAgZnVuY3Rpb24gZ28obm9kZSwgcmVmVHlwZSkge1xuICAgICAgICBsZXQgY2hpbGRBc3NpZ25tZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwYXJlbnRBc3NpZ25tZW50ID0gZ2V0Q29udGFpbmVyT2ZUeXBlKG5vZGUsIGFzdC5pc0Fzc2lnbm1lbnQpO1xuICAgICAgICAvLyBObyBwYXJlbnQgYXNzaWdubWVudCBpbXBsaWVzIHVuYXNzaWduZWQgcnVsZSBjYWxsXG4gICAgICAgIGlmICghcGFyZW50QXNzaWdubWVudCkge1xuICAgICAgICAgICAgY2hpbGRBc3NpZ25tZW50ID0gZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwocmVmVHlwZSwgcmVmVHlwZSwgY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnNldCh0eXBlLCBjaGlsZEFzc2lnbm1lbnQpO1xuICAgICAgICByZXR1cm4gY2hpbGRBc3NpZ25tZW50O1xuICAgIH1cbiAgICBpZiAoY2FjaGUuaGFzKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQodHlwZSk7XG4gICAgfVxuICAgIGNhY2hlLnNldCh0eXBlLCB1bmRlZmluZWQpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzdHJlYW1BbGxDb250ZW50cyhzdGFydE5vZGUpKSB7XG4gICAgICAgIGlmIChhc3QuaXNBc3NpZ25tZW50KG5vZGUpICYmIG5vZGUuZmVhdHVyZS50b0xvd2VyQ2FzZSgpID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgIGNhY2hlLnNldCh0eXBlLCBub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFzdC5pc1J1bGVDYWxsKG5vZGUpICYmIGFzdC5pc1BhcnNlclJ1bGUobm9kZS5ydWxlLnJlZikpIHtcbiAgICAgICAgICAgIHJldHVybiBnbyhub2RlLCBub2RlLnJ1bGUucmVmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhc3QuaXNTaW1wbGVUeXBlKG5vZGUpICYmICgoX2EgPSBub2RlLnR5cGVSZWYpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ28obm9kZSwgbm9kZS50eXBlUmVmLnJlZik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25BdEVsZW1lbnQoZWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuJGNvbnRhaW5lcjtcbiAgICBpZiAoYXN0LmlzR3JvdXAocGFyZW50KSkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHBhcmVudC5lbGVtZW50cztcbiAgICAgICAgY29uc3QgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGFzdC5pc0FjdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gc3RyZWFtQWxsQ29udGVudHMoZWxlbWVudHNbaV0pLmZpbmQoYXN0LmlzQWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhc3QuaXNBYnN0cmFjdEVsZW1lbnQocGFyZW50KSkge1xuICAgICAgICByZXR1cm4gZ2V0QWN0aW9uQXRFbGVtZW50KHBhcmVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09wdGlvbmFsQ2FyZGluYWxpdHkoY2FyZGluYWxpdHksIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gY2FyZGluYWxpdHkgPT09ICc/JyB8fCBjYXJkaW5hbGl0eSA9PT0gJyonIHx8IChhc3QuaXNHcm91cChlbGVtZW50KSAmJiBCb29sZWFuKGVsZW1lbnQuZ3VhcmRDb25kaXRpb24pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5Q2FyZGluYWxpdHkoY2FyZGluYWxpdHkpIHtcbiAgICByZXR1cm4gY2FyZGluYWxpdHkgPT09ICcqJyB8fCBjYXJkaW5hbGl0eSA9PT0gJysnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlPcGVyYXRvcihvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvciA9PT0gJys9Jztcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXJzZXIgcnVsZSBpcyBhIF9kYXRhIHR5cGUgcnVsZV8sIG1lYW5pbmcgdGhhdCBpdCBoYXMgYVxuICogcHJpbWl0aXZlIHJldHVybiB0eXBlIGxpa2UgYG51bWJlcmAsIGBib29sZWFuYCwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVHlwZVJ1bGUocnVsZSkge1xuICAgIHJldHVybiBpc0RhdGFUeXBlUnVsZUludGVybmFsKHJ1bGUsIG5ldyBTZXQoKSk7XG59XG5mdW5jdGlvbiBpc0RhdGFUeXBlUnVsZUludGVybmFsKHJ1bGUsIHZpc2l0ZWQpIHtcbiAgICBpZiAodmlzaXRlZC5oYXMocnVsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2aXNpdGVkLmFkZChydWxlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHN0cmVhbUFsbENvbnRlbnRzKHJ1bGUpKSB7XG4gICAgICAgIGlmIChhc3QuaXNSdWxlQ2FsbChub2RlKSkge1xuICAgICAgICAgICAgaWYgKCFub2RlLnJ1bGUucmVmKSB7XG4gICAgICAgICAgICAgICAgLy8gUnVsZUNhbGwgdG8gdW5yZXNvbHZlZCBydWxlLiBEb24ndCBhc3N1bWUgYHJ1bGVgIGlzIGEgRGF0YVR5cGUgcnVsZS5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXN0LmlzUGFyc2VyUnVsZShub2RlLnJ1bGUucmVmKSAmJiAhaXNEYXRhVHlwZVJ1bGVJbnRlcm5hbChub2RlLnJ1bGUucmVmLCB2aXNpdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhc3QuaXNBc3NpZ25tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXN0LmlzQWN0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4ocnVsZS5kZWZpbml0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gaXNEYXRhVHlwZUludGVybmFsKHR5cGUudHlwZSwgbmV3IFNldCgpKTtcbn1cbmZ1bmN0aW9uIGlzRGF0YVR5cGVJbnRlcm5hbCh0eXBlLCB2aXNpdGVkKSB7XG4gICAgaWYgKHZpc2l0ZWQuaGFzKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmlzaXRlZC5hZGQodHlwZSk7XG4gICAgfVxuICAgIGlmIChhc3QuaXNBcnJheVR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNSZWZlcmVuY2VUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzVW5pb25UeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlLnR5cGVzLmV2ZXJ5KGUgPT4gaXNEYXRhVHlwZUludGVybmFsKGUsIHZpc2l0ZWQpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzU2ltcGxlVHlwZSh0eXBlKSkge1xuICAgICAgICBpZiAodHlwZS5wcmltaXRpdmVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUuc3RyaW5nVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlLnR5cGVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gdHlwZS50eXBlUmVmLnJlZjtcbiAgICAgICAgICAgIGlmIChhc3QuaXNUeXBlKHJlZikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNEYXRhVHlwZUludGVybmFsKHJlZi50eXBlLCB2aXNpdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHBsaWNpdFJ1bGVUeXBlKHJ1bGUpIHtcbiAgICBpZiAocnVsZS5pbmZlcnJlZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuaW5mZXJyZWRUeXBlLm5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJ1bGUuZGF0YVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuZGF0YVR5cGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJ1bGUucmV0dXJuVHlwZSkge1xuICAgICAgICBjb25zdCByZWZUeXBlID0gcnVsZS5yZXR1cm5UeXBlLnJlZjtcbiAgICAgICAgaWYgKHJlZlR5cGUpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gY2hlY2sgQWN0aW9uIGFzIHJldHVybiB0eXBlXG4gICAgICAgICAgICBpZiAoYXN0LmlzUGFyc2VyUnVsZShyZWZUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZUeXBlLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhc3QuaXNJbnRlcmZhY2UocmVmVHlwZSkgfHwgYXN0LmlzVHlwZShyZWZUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZUeXBlLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlTmFtZSh0eXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChhc3QuaXNQYXJzZXJSdWxlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBpc0RhdGFUeXBlUnVsZSh0eXBlKSA/IHR5cGUubmFtZSA6IChfYSA9IGdldEV4cGxpY2l0UnVsZVR5cGUodHlwZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHR5cGUubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzSW50ZXJmYWNlKHR5cGUpIHx8IGFzdC5pc1R5cGUodHlwZSkgfHwgYXN0LmlzUmV0dXJuVHlwZSh0eXBlKSkge1xuICAgICAgICByZXR1cm4gdHlwZS5uYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNBY3Rpb24odHlwZSkpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uVHlwZSA9IGdldEFjdGlvblR5cGUodHlwZSk7XG4gICAgICAgIGlmIChhY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNJbmZlcnJlZFR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUubmFtZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IG5hbWUgb2YgVW5rbm93biBUeXBlJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uVHlwZShhY3Rpb24pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGFjdGlvbi5pbmZlcnJlZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5pbmZlcnJlZFR5cGUubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKF9hID0gYWN0aW9uLnR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWYpIHtcbiAgICAgICAgcmV0dXJuIGdldFR5cGVOYW1lKGFjdGlvbi50eXBlLnJlZik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBpbmZlcnJpbmcgYW5kIG5vdCByZWZlcmVuY2luZyBhIHZhbGlkIHR5cGVcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdWxlVHlwZShydWxlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgaWYgKGFzdC5pc1Rlcm1pbmFsUnVsZShydWxlKSkge1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gcnVsZS50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJ3N0cmluZyc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNEYXRhVHlwZVJ1bGUocnVsZSkgPyBydWxlLm5hbWUgOiAoX2MgPSBnZXRFeHBsaWNpdFJ1bGVUeXBlKHJ1bGUpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBydWxlLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1pbmFsUmVnZXgodGVybWluYWxSdWxlKSB7XG4gICAgY29uc3QgZmxhZ3MgPSB7XG4gICAgICAgIHM6IGZhbHNlLFxuICAgICAgICBpOiBmYWxzZSxcbiAgICAgICAgdTogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IHNvdXJjZSA9IGFic3RyYWN0RWxlbWVudFRvUmVnZXgodGVybWluYWxSdWxlLmRlZmluaXRpb24sIGZsYWdzKTtcbiAgICBjb25zdCBmbGFnVGV4dCA9IE9iamVjdC5lbnRyaWVzKGZsYWdzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpLm1hcCgoW25hbWVdKSA9PiBuYW1lKS5qb2luKCcnKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIGZsYWdUZXh0KTtcbn1cbi8vIFVzaW5nIFtcXHNcXFNdKiBhbGxvd3MgdG8gbWF0Y2ggZXZlcnl0aGluZywgY29tcGFyZWQgdG8gLiB3aGljaCBkb2Vzbid0IG1hdGNoIGxpbmUgdGVybWluYXRvcnNcbmNvbnN0IFdJTERDQVJEID0gL1tcXHNcXFNdLy5zb3VyY2U7XG5mdW5jdGlvbiBhYnN0cmFjdEVsZW1lbnRUb1JlZ2V4KGVsZW1lbnQsIGZsYWdzKSB7XG4gICAgaWYgKGFzdC5pc1Rlcm1pbmFsQWx0ZXJuYXRpdmVzKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB0ZXJtaW5hbEFsdGVybmF0aXZlc1RvUmVnZXgoZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFzdC5pc1Rlcm1pbmFsR3JvdXAoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRlcm1pbmFsR3JvdXBUb1JlZ2V4KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNDaGFyYWN0ZXJSYW5nZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VUb1JlZ2V4KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNUZXJtaW5hbFJ1bGVDYWxsKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBlbGVtZW50LnJ1bGUucmVmO1xuICAgICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBydWxlIHJlZmVyZW5jZS4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGFic3RyYWN0RWxlbWVudFRvUmVnZXgocnVsZS5kZWZpbml0aW9uKSwge1xuICAgICAgICAgICAgY2FyZGluYWxpdHk6IGVsZW1lbnQuY2FyZGluYWxpdHksXG4gICAgICAgICAgICBsb29rYWhlYWQ6IGVsZW1lbnQubG9va2FoZWFkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNOZWdhdGVkVG9rZW4oZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIG5lZ2F0ZVRva2VuVG9SZWdleChlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzVW50aWxUb2tlbihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdW50aWxUb2tlblRvUmVnZXgoZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFzdC5pc1JlZ2V4VG9rZW4oZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGFzdFNsYXNoID0gZWxlbWVudC5yZWdleC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBlbGVtZW50LnJlZ2V4LnN1YnN0cmluZygxLCBsYXN0U2xhc2gpO1xuICAgICAgICBjb25zdCByZWdleEZsYWdzID0gZWxlbWVudC5yZWdleC5zdWJzdHJpbmcobGFzdFNsYXNoICsgMSk7XG4gICAgICAgIGlmIChmbGFncykge1xuICAgICAgICAgICAgZmxhZ3MuaSA9IHJlZ2V4RmxhZ3MuaW5jbHVkZXMoJ2knKTtcbiAgICAgICAgICAgIGZsYWdzLnMgPSByZWdleEZsYWdzLmluY2x1ZGVzKCdzJyk7XG4gICAgICAgICAgICBmbGFncy51ID0gcmVnZXhGbGFncy5pbmNsdWRlcygndScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aXRoQ2FyZGluYWxpdHkoc291cmNlLCB7XG4gICAgICAgICAgICBjYXJkaW5hbGl0eTogZWxlbWVudC5jYXJkaW5hbGl0eSxcbiAgICAgICAgICAgIGxvb2thaGVhZDogZWxlbWVudC5sb29rYWhlYWQsXG4gICAgICAgICAgICB3cmFwOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzV2lsZGNhcmQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhDYXJkaW5hbGl0eShXSUxEQ0FSRCwge1xuICAgICAgICAgICAgY2FyZGluYWxpdHk6IGVsZW1lbnQuY2FyZGluYWxpdHksXG4gICAgICAgICAgICBsb29rYWhlYWQ6IGVsZW1lbnQubG9va2FoZWFkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlcm1pbmFsIGVsZW1lbnQ6ICR7ZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbGVtZW50LiR0eXBlfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRlcm1pbmFsQWx0ZXJuYXRpdmVzVG9SZWdleChhbHRlcm5hdGl2ZXMpIHtcbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGFsdGVybmF0aXZlcy5lbGVtZW50cy5tYXAoZSA9PiBhYnN0cmFjdEVsZW1lbnRUb1JlZ2V4KGUpKS5qb2luKCd8JyksIHtcbiAgICAgICAgY2FyZGluYWxpdHk6IGFsdGVybmF0aXZlcy5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiBhbHRlcm5hdGl2ZXMubG9va2FoZWFkXG4gICAgfSk7XG59XG5mdW5jdGlvbiB0ZXJtaW5hbEdyb3VwVG9SZWdleChncm91cCkge1xuICAgIHJldHVybiB3aXRoQ2FyZGluYWxpdHkoZ3JvdXAuZWxlbWVudHMubWFwKGUgPT4gYWJzdHJhY3RFbGVtZW50VG9SZWdleChlKSkuam9pbignJyksIHtcbiAgICAgICAgY2FyZGluYWxpdHk6IGdyb3VwLmNhcmRpbmFsaXR5LFxuICAgICAgICBsb29rYWhlYWQ6IGdyb3VwLmxvb2thaGVhZFxuICAgIH0pO1xufVxuZnVuY3Rpb24gdW50aWxUb2tlblRvUmVnZXgodW50aWwpIHtcbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGAke1dJTERDQVJEfSo/JHthYnN0cmFjdEVsZW1lbnRUb1JlZ2V4KHVudGlsLnRlcm1pbmFsKX1gLCB7XG4gICAgICAgIGNhcmRpbmFsaXR5OiB1bnRpbC5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiB1bnRpbC5sb29rYWhlYWRcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG5lZ2F0ZVRva2VuVG9SZWdleChuZWdhdGUpIHtcbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGAoPyEke2Fic3RyYWN0RWxlbWVudFRvUmVnZXgobmVnYXRlLnRlcm1pbmFsKX0pJHtXSUxEQ0FSRH0qP2AsIHtcbiAgICAgICAgY2FyZGluYWxpdHk6IG5lZ2F0ZS5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiBuZWdhdGUubG9va2FoZWFkXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGFyYWN0ZXJSYW5nZVRvUmVnZXgocmFuZ2UpIHtcbiAgICBpZiAocmFuZ2UucmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhDYXJkaW5hbGl0eShgWyR7a2V5d29yZFRvUmVnZXgocmFuZ2UubGVmdCl9LSR7a2V5d29yZFRvUmVnZXgocmFuZ2UucmlnaHQpfV1gLCB7XG4gICAgICAgICAgICBjYXJkaW5hbGl0eTogcmFuZ2UuY2FyZGluYWxpdHksXG4gICAgICAgICAgICBsb29rYWhlYWQ6IHJhbmdlLmxvb2thaGVhZCxcbiAgICAgICAgICAgIHdyYXA6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGtleXdvcmRUb1JlZ2V4KHJhbmdlLmxlZnQpLCB7XG4gICAgICAgIGNhcmRpbmFsaXR5OiByYW5nZS5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiByYW5nZS5sb29rYWhlYWQsXG4gICAgICAgIHdyYXA6IGZhbHNlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBrZXl3b3JkVG9SZWdleChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGVzY2FwZVJlZ0V4cChrZXl3b3JkLnZhbHVlKTtcbn1cbmZ1bmN0aW9uIHdpdGhDYXJkaW5hbGl0eShyZWdleCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAob3B0aW9ucy53cmFwICE9PSBmYWxzZSB8fCBvcHRpb25zLmxvb2thaGVhZCkge1xuICAgICAgICByZWdleCA9IGAoJHsoX2EgPSBvcHRpb25zLmxvb2thaGVhZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyd9JHtyZWdleH0pYDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2FyZGluYWxpdHkpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZ2V4fSR7b3B0aW9ucy5jYXJkaW5hbGl0eX1gO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncmFtbWFyLXV0aWxzLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgRGVmYXVsdE5hbWVSZWdleHAgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNDb21tZW50VGVybWluYWwsIHRlcm1pbmFsUmVnZXggfSBmcm9tICcuLi91dGlscy9ncmFtbWFyLXV0aWxzLmpzJztcbmltcG9ydCB7IGlzTXVsdGlsaW5lQ29tbWVudCB9IGZyb20gJy4uL3V0aWxzL3JlZ2V4cC11dGlscy5qcyc7XG5pbXBvcnQgeyBpc1Rlcm1pbmFsUnVsZSB9IGZyb20gJy4vZ2VuZXJhdGVkL2FzdC5qcyc7XG4vKipcbiAqIENyZWF0ZSB0aGUgZGVmYXVsdCBncmFtbWFyIGNvbmZpZ3VyYXRpb24gKHVzZWQgYnkgYGNyZWF0ZURlZmF1bHRNb2R1bGVgKS4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBhXG4gKiBsYW5ndWFnZS1zcGVjaWZpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmFtbWFyQ29uZmlnKHNlcnZpY2VzKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbXTtcbiAgICBjb25zdCBncmFtbWFyID0gc2VydmljZXMuR3JhbW1hcjtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZ3JhbW1hci5ydWxlcykge1xuICAgICAgICBpZiAoaXNUZXJtaW5hbFJ1bGUocnVsZSkgJiYgaXNDb21tZW50VGVybWluYWwocnVsZSkgJiYgaXNNdWx0aWxpbmVDb21tZW50KHRlcm1pbmFsUmVnZXgocnVsZSkpKSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXVsdGlsaW5lQ29tbWVudFJ1bGVzOiBydWxlcyxcbiAgICAgICAgbmFtZVJlZ2V4cDogRGVmYXVsdE5hbWVSZWdleHBcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhbW1hci1jb25maWcuanMubWFwIiwKICAgICJleHBvcnQgZnVuY3Rpb24gUFJJTlRfRVJST1IobXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBjYW4ndCBvdmVycmlkZSBnbG9iYWwuY29uc29sZSBpbiBub2RlLmpzICovXG4gICAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogJHttc2d9YCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIFBSSU5UX1dBUk5JTkcobXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBjYW4ndCBvdmVycmlkZSBnbG9iYWwuY29uc29sZSBpbiBub2RlLmpzKi9cbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgLy8gVE9ETzogbW9kaWZ5IGRvY3MgYWNjb3JkaW5nbHlcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiAke21zZ31gKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmludC5qcy5tYXAiLAogICAgImV4cG9ydCBmdW5jdGlvbiB0aW1lcihmdW5jKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCB2YWwgPSBmdW5jKCk7XG4gICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdG90YWwgPSBlbmQgLSBzdGFydDtcbiAgICByZXR1cm4geyB0aW1lOiB0b3RhbCwgdmFsdWU6IHZhbCB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXIuanMubWFwIiwKICAgICIvLyBiYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC9ibG9iL2I5N2MwZDJkNDg3ZThjNTA3NmU4YmQ4OTdlMGRjZDQ2MjJkMzE4NDYvc3JjL3V0aWwuanMjTDIwMS1MMjE2XG5leHBvcnQgZnVuY3Rpb24gdG9GYXN0UHJvcGVydGllcyh0b0JlY29tZUZhc3QpIHtcbiAgICBmdW5jdGlvbiBGYWtlQ29uc3RydWN0b3IoKSB7IH1cbiAgICAvLyBJZiBvdXIgb2JqZWN0IGlzIHVzZWQgYXMgYSBjb25zdHJ1Y3RvciwgaXQgd291bGQgcmVjZWl2ZVxuICAgIEZha2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSB0b0JlY29tZUZhc3Q7XG4gICAgY29uc3QgZmFrZUluc3RhbmNlID0gbmV3IEZha2VDb25zdHJ1Y3RvcigpO1xuICAgIGZ1bmN0aW9uIGZha2VBY2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZmFrZUluc3RhbmNlLmJhcjtcbiAgICB9XG4gICAgLy8gaGVscCBWOCB1bmRlcnN0YW5kIHRoaXMgaXMgYSBcInJlYWxcIiBwcm90b3R5cGUgYnkgYWN0dWFsbHkgdXNpbmdcbiAgICAvLyB0aGUgZmFrZSBpbnN0YW5jZS5cbiAgICBmYWtlQWNjZXNzKCk7XG4gICAgZmFrZUFjY2VzcygpO1xuICAgIC8vIEFsd2F5cyB0cnVlIGNvbmRpdGlvbiB0byBzdXBwcmVzcyB0aGUgRmlyZWZveCB3YXJuaW5nIG9mIHVucmVhY2hhYmxlXG4gICAgLy8gY29kZSBhZnRlciBhIHJldHVybiBzdGF0ZW1lbnQuXG4gICAgaWYgKDEpXG4gICAgICAgIHJldHVybiB0b0JlY29tZUZhc3Q7XG4gICAgLy8gRXZhbCBwcmV2ZW50cyBvcHRpbWl6YXRpb24gb2YgdGhpcyBtZXRob2QgKGV2ZW4gdGhvdWdoIHRoaXMgaXMgZGVhZCBjb2RlKVxuICAgIC8vIC0gaHR0cHM6Ly9lc2J1aWxkLmdpdGh1Yi5pby9jb250ZW50LXR5cGVzLyNkaXJlY3QtZXZhbFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgKDAsIGV2YWwpKHRvQmVjb21lRmFzdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10by1mYXN0LXByb3BlcnRpZXMuanMubWFwIiwKICAgICJpbXBvcnQgeyBhc3NpZ24sIGZvckVhY2gsIGlzUmVnRXhwLCBpc1N0cmluZywgbWFwLCBwaWNrQnkgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG4vLyBUT0RPOiBkdXBsaWNhdGVkIGNvZGUgdG8gYXZvaWQgZXh0cmFjdGluZyBhbm90aGVyIHN1Yi1wYWNrYWdlIC0tIGhvdyB0byBhdm9pZD9cbmZ1bmN0aW9uIHRva2VuTGFiZWwodG9rVHlwZSkge1xuICAgIGlmIChoYXNUb2tlbkxhYmVsKHRva1R5cGUpKSB7XG4gICAgICAgIHJldHVybiB0b2tUeXBlLkxBQkVMO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva1R5cGUubmFtZTtcbiAgICB9XG59XG4vLyBUT0RPOiBkdXBsaWNhdGVkIGNvZGUgdG8gYXZvaWQgZXh0cmFjdGluZyBhbm90aGVyIHN1Yi1wYWNrYWdlIC0tIGhvdyB0byBhdm9pZD9cbmZ1bmN0aW9uIGhhc1Rva2VuTGFiZWwob2JqKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKG9iai5MQUJFTCkgJiYgb2JqLkxBQkVMICE9PSBcIlwiO1xufVxuZXhwb3J0IGNsYXNzIEFic3RyYWN0UHJvZHVjdGlvbiB7XG4gICAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uO1xuICAgIH1cbiAgICBzZXQgZGVmaW5pdGlvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9uID0gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKF9kZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBfZGVmaW5pdGlvbjtcbiAgICB9XG4gICAgYWNjZXB0KHZpc2l0b3IpIHtcbiAgICAgICAgdmlzaXRvci52aXNpdCh0aGlzKTtcbiAgICAgICAgZm9yRWFjaCh0aGlzLmRlZmluaXRpb24sIChwcm9kKSA9PiB7XG4gICAgICAgICAgICBwcm9kLmFjY2VwdCh2aXNpdG9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE5vblRlcm1pbmFsIGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKFtdKTtcbiAgICAgICAgdGhpcy5pZHggPSAxO1xuICAgICAgICBhc3NpZ24odGhpcywgcGlja0J5KG9wdGlvbnMsICh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG4gICAgc2V0IGRlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgICAgICAvLyBpbW11dGFibGVcbiAgICB9XG4gICAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZmVyZW5jZWRSdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZWRSdWxlLmRlZmluaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhY2NlcHQodmlzaXRvcikge1xuICAgICAgICB2aXNpdG9yLnZpc2l0KHRoaXMpO1xuICAgICAgICAvLyBkb24ndCB2aXNpdCBjaGlsZHJlbiBvZiBhIHJlZmVyZW5jZSwgd2Ugd2lsbCBnZXQgY3ljbGljIGluZmluaXRlIGxvb3BzIGlmIHdlIGRvIHNvXG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJ1bGUgZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5vcmdUZXh0ID0gXCJcIjtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEFsdGVybmF0aXZlIGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWdub3JlQW1iaWd1aXRpZXMgPSBmYWxzZTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9wdGlvbiBleHRlbmRzIEFic3RyYWN0UHJvZHVjdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLmRlZmluaXRpb24pO1xuICAgICAgICB0aGlzLmlkeCA9IDE7XG4gICAgICAgIGFzc2lnbih0aGlzLCBwaWNrQnkob3B0aW9ucywgKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSZXBldGl0aW9uTWFuZGF0b3J5IGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcGV0aXRpb24gZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5pZHggPSAxO1xuICAgICAgICBhc3NpZ24odGhpcywgcGlja0J5KG9wdGlvbnMsICh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5pZHggPSAxO1xuICAgICAgICBhc3NpZ24odGhpcywgcGlja0J5KG9wdGlvbnMsICh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWx0ZXJuYXRpb24gZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGdldCBkZWZpbml0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgICB9XG4gICAgc2V0IGRlZmluaXRpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgdGhpcy5pZ25vcmVBbWJpZ3VpdGllcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc1ByZWRpY2F0ZXMgPSBmYWxzZTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuICAgIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgICAgIHZpc2l0b3IudmlzaXQodGhpcyk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUdyYW1tYXIodG9wUnVsZXMpIHtcbiAgICByZXR1cm4gbWFwKHRvcFJ1bGVzLCBzZXJpYWxpemVQcm9kdWN0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVQcm9kdWN0aW9uKG5vZGUpIHtcbiAgICBmdW5jdGlvbiBjb252ZXJ0RGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiBtYXAoZGVmaW5pdGlvbiwgc2VyaWFsaXplUHJvZHVjdGlvbik7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkTm9uVGVybWluYWwgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIk5vblRlcm1pbmFsXCIsXG4gICAgICAgICAgICBuYW1lOiBub2RlLm5vblRlcm1pbmFsTmFtZSxcbiAgICAgICAgICAgIGlkeDogbm9kZS5pZHgsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1N0cmluZyhub2RlLmxhYmVsKSkge1xuICAgICAgICAgICAgc2VyaWFsaXplZE5vblRlcm1pbmFsLmxhYmVsID0gbm9kZS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZE5vblRlcm1pbmFsO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiQWx0ZXJuYXRpdmVcIixcbiAgICAgICAgICAgIGRlZmluaXRpb246IGNvbnZlcnREZWZpbml0aW9uKG5vZGUuZGVmaW5pdGlvbiksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiT3B0aW9uXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiUmVwZXRpdGlvbk1hbmRhdG9yeVwiLFxuICAgICAgICAgICAgaWR4OiBub2RlLmlkeCxcbiAgICAgICAgICAgIGRlZmluaXRpb246IGNvbnZlcnREZWZpbml0aW9uKG5vZGUuZGVmaW5pdGlvbiksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgaWR4OiBub2RlLmlkeCxcbiAgICAgICAgICAgIHNlcGFyYXRvcjogKHNlcmlhbGl6ZVByb2R1Y3Rpb24obmV3IFRlcm1pbmFsKHsgdGVybWluYWxUeXBlOiBub2RlLnNlcGFyYXRvciB9KSkpLFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgc2VwYXJhdG9yOiAoc2VyaWFsaXplUHJvZHVjdGlvbihuZXcgVGVybWluYWwoeyB0ZXJtaW5hbFR5cGU6IG5vZGUuc2VwYXJhdG9yIH0pKSksXG4gICAgICAgICAgICBkZWZpbml0aW9uOiBjb252ZXJ0RGVmaW5pdGlvbihub2RlLmRlZmluaXRpb24pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgUmVwZXRpdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJSZXBldGl0aW9uXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIkFsdGVybmF0aW9uXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFRlcm1pbmFsKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUZXJtaW5hbCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgIG5hbWU6IG5vZGUudGVybWluYWxUeXBlLm5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdG9rZW5MYWJlbChub2RlLnRlcm1pbmFsVHlwZSksXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNTdHJpbmcobm9kZS5sYWJlbCkpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUZXJtaW5hbC50ZXJtaW5hbExhYmVsID0gbm9kZS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbm9kZS50ZXJtaW5hbFR5cGUuUEFUVEVSTjtcbiAgICAgICAgaWYgKG5vZGUudGVybWluYWxUeXBlLlBBVFRFUk4pIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUZXJtaW5hbC5wYXR0ZXJuID0gaXNSZWdFeHAocGF0dGVybilcbiAgICAgICAgICAgICAgICA/IHBhdHRlcm4uc291cmNlXG4gICAgICAgICAgICAgICAgOiBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkVGVybWluYWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBSdWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlJ1bGVcIixcbiAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgICAgIG9yZ1RleHQ6IG5vZGUub3JnVGV4dCxcbiAgICAgICAgICAgIGRlZmluaXRpb246IGNvbnZlcnREZWZpbml0aW9uKG5vZGUuZGVmaW5pdGlvbiksXG4gICAgICAgIH07XG4gICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kZWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgUnVsZSwgVGVybWluYWwsIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmV4cG9ydCBjbGFzcyBHQXN0VmlzaXRvciB7XG4gICAgdmlzaXQobm9kZSkge1xuICAgICAgICBjb25zdCBub2RlQW55ID0gbm9kZTtcbiAgICAgICAgc3dpdGNoIChub2RlQW55LmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICBjYXNlIE5vblRlcm1pbmFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0Tm9uVGVybWluYWwobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIEFsdGVybmF0aXZlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpdmUobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIE9wdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdE9wdGlvbihub2RlQW55KTtcbiAgICAgICAgICAgIGNhc2UgUmVwZXRpdGlvbk1hbmRhdG9yeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3Iobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIFJlcGV0aXRpb246XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKG5vZGVBbnkpO1xuICAgICAgICAgICAgY2FzZSBBbHRlcm5hdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdEFsdGVybmF0aW9uKG5vZGVBbnkpO1xuICAgICAgICAgICAgY2FzZSBUZXJtaW5hbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdFRlcm1pbmFsKG5vZGVBbnkpO1xuICAgICAgICAgICAgY2FzZSBSdWxlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0UnVsZShub2RlQW55KTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDIgKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgIHZpc2l0Tm9uVGVybWluYWwobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdEFsdGVybmF0aXZlKG5vZGUpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgdmlzaXRPcHRpb24obm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJlcGV0aXRpb24obm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG5vZGUpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgdmlzaXRBbHRlcm5hdGlvbihub2RlKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgIHZpc2l0VGVybWluYWwobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJ1bGUobm9kZSkgeyB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD12aXNpdG9yLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXZlcnksIGluY2x1ZGVzLCBzb21lIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQcm9kdWN0aW9uLCBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgUnVsZSwgVGVybWluYWwsIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBpc1NlcXVlbmNlUHJvZChwcm9kKSB7XG4gICAgcmV0dXJuIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUgfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIE9wdGlvbiB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbiB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IgfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIHx8XG4gICAgICAgIHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUnVsZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPcHRpb25hbFByb2QocHJvZCwgYWxyZWFkeVZpc2l0ZWQgPSBbXSkge1xuICAgIGNvbnN0IGlzRGlyZWN0bHlPcHRpb25hbCA9IHByb2QgaW5zdGFuY2VvZiBPcHRpb24gfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb24gfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yO1xuICAgIGlmIChpc0RpcmVjdGx5T3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIG5vdGUgdGhhdCB0aGlzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wIGlmIG9uZSBvcHRpb25hbCBlbXB0eSBUT1AgcHJvZHVjdGlvbiBoYXMgYSBjeWNsaWMgZGVwZW5kZW5jeSB3aXRoIGFub3RoZXJcbiAgICAvLyBlbXB0eSBvcHRpb25hbCB0b3AgcnVsZVxuICAgIC8vIG1heSBiZSBpbmRpcmVjdGx5IG9wdGlvbmFsICgoQT9CP0M/KSB8IChEP0U/Rj8pKVxuICAgIGlmIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpb24pIHtcbiAgICAgICAgLy8gZm9yIE9SIGl0cyBlbm91Z2ggZm9yIGp1c3Qgb25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgdG8gYmUgb3B0aW9uYWxcbiAgICAgICAgcmV0dXJuIHNvbWUocHJvZC5kZWZpbml0aW9uLCAoc3ViUHJvZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzT3B0aW9uYWxQcm9kKHN1YlByb2QsIGFscmVhZHlWaXNpdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCAmJiBpbmNsdWRlcyhhbHJlYWR5VmlzaXRlZCwgcHJvZCkpIHtcbiAgICAgICAgLy8gYXZvaWRpbmcgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIGluZmluaXRlIHJlY3Vyc2lvblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBYnN0cmFjdFByb2R1Y3Rpb24pIHtcbiAgICAgICAgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAgICAgYWxyZWFkeVZpc2l0ZWQucHVzaChwcm9kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlcnkocHJvZC5kZWZpbml0aW9uLCAoc3ViUHJvZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzT3B0aW9uYWxQcm9kKHN1YlByb2QsIGFscmVhZHlWaXNpdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJhbmNoaW5nUHJvZChwcm9kKSB7XG4gICAgcmV0dXJuIHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9kdWN0aW9uRHNsTmFtZShwcm9kKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvZCBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiBcIlNVQlJVTEVcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgICByZXR1cm4gXCJPUFRJT05cIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBcIk9SXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5KSB7XG4gICAgICAgIHJldHVybiBcIkFUX0xFQVNUX09ORVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIFwiQVRfTEVBU1RfT05FX1NFUFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIFwiTUFOWV9TRVBcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb24pIHtcbiAgICAgICAgcmV0dXJuIFwiTUFOWVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgcmV0dXJuIFwiQ09OU1VNRVwiO1xuICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJleHBvcnQgeyBSdWxlLCBUZXJtaW5hbCwgTm9uVGVybWluYWwsIE9wdGlvbiwgUmVwZXRpdGlvbiwgUmVwZXRpdGlvbk1hbmRhdG9yeSwgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IsIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLCBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIHNlcmlhbGl6ZUdyYW1tYXIsIHNlcmlhbGl6ZVByb2R1Y3Rpb24sIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmV4cG9ydCB7IEdBc3RWaXNpdG9yIH0gZnJvbSBcIi4vdmlzaXRvci5qc1wiO1xuZXhwb3J0IHsgZ2V0UHJvZHVjdGlvbkRzbE5hbWUsIGlzT3B0aW9uYWxQcm9kLCBpc0JyYW5jaGluZ1Byb2QsIGlzU2VxdWVuY2VQcm9kLCB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5qcy5tYXAiLAogICAgImltcG9ydCB7IGRyb3AsIGZvckVhY2ggfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgVGVybWluYWwsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbi8qKlxuICogIEEgR3JhbW1hciBXYWxrZXIgdGhhdCBjb21wdXRlcyB0aGUgXCJyZW1haW5pbmdcIiBncmFtbWFyIFwiYWZ0ZXJcIiBhIHByb2R1Y3Rpb25zIGluIHRoZSBncmFtbWFyLlxuICovXG5leHBvcnQgY2xhc3MgUmVzdFdhbGtlciB7XG4gICAgd2Fsayhwcm9kLCBwcmV2UmVzdCA9IFtdKSB7XG4gICAgICAgIGZvckVhY2gocHJvZC5kZWZpbml0aW9uLCAoc3ViUHJvZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSZXN0ID0gZHJvcChwcm9kLmRlZmluaXRpb24sIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa1Byb2RSZWYoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa1Rlcm1pbmFsKHN1YlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdWJQcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtGbGF0KHN1YlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdWJQcm9kIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrT3B0aW9uKHN1YlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdWJQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0F0TGVhc3RPbmUoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0F0TGVhc3RPbmVTZXAoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uV2l0aFNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa01hbnlTZXAoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrTWFueShzdWJQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3ViUHJvZCBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrT3Ioc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3YWxrVGVybWluYWwodGVybWluYWwsIGN1cnJSZXN0LCBwcmV2UmVzdCkgeyB9XG4gICAgd2Fsa1Byb2RSZWYocmVmUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7IH1cbiAgICB3YWxrRmxhdChmbGF0UHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIC8vIEFCQ0RFRiA9PiBhZnRlciB0aGUgRCB0aGUgcmVzdCBpcyBFRlxuICAgICAgICBjb25zdCBmdWxsT3JSZXN0ID0gY3VyclJlc3QuY29uY2F0KHByZXZSZXN0KTtcbiAgICAgICAgdGhpcy53YWxrKGZsYXRQcm9kLCBmdWxsT3JSZXN0KTtcbiAgICB9XG4gICAgd2Fsa09wdGlvbihvcHRpb25Qcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgLy8gQUJDKERFKT9GID0+IGFmdGVyIHRoZSAoREUpPyB0aGUgcmVzdCBpcyBGXG4gICAgICAgIGNvbnN0IGZ1bGxPclJlc3QgPSBjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpO1xuICAgICAgICB0aGlzLndhbGsob3B0aW9uUHJvZCwgZnVsbE9yUmVzdCk7XG4gICAgfVxuICAgIHdhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgLy8gQUJDKERFKStGID0+IGFmdGVyIHRoZSAoREUpKyB0aGUgcmVzdCBpcyAoREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbEF0TGVhc3RPbmVSZXN0ID0gW1xuICAgICAgICAgICAgbmV3IE9wdGlvbih7IGRlZmluaXRpb246IGF0TGVhc3RPbmVQcm9kLmRlZmluaXRpb24gfSksXG4gICAgICAgIF0uY29uY2F0KGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIHRoaXMud2FsayhhdExlYXN0T25lUHJvZCwgZnVsbEF0TGVhc3RPbmVSZXN0KTtcbiAgICB9XG4gICAgd2Fsa0F0TGVhc3RPbmVTZXAoYXRMZWFzdE9uZVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBBQkMgREUoLERFKSogRiA9PiBhZnRlciB0aGUgKCxERSkrIHRoZSByZXN0IGlzICgsREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbEF0TGVhc3RPbmVTZXBSZXN0ID0gcmVzdEZvclJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGF0TGVhc3RPbmVTZXBQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB0aGlzLndhbGsoYXRMZWFzdE9uZVNlcFByb2QsIGZ1bGxBdExlYXN0T25lU2VwUmVzdCk7XG4gICAgfVxuICAgIHdhbGtNYW55KG1hbnlQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgLy8gQUJDKERFKSpGID0+IGFmdGVyIHRoZSAoREUpKiB0aGUgcmVzdCBpcyAoREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbE1hbnlSZXN0ID0gW1xuICAgICAgICAgICAgbmV3IE9wdGlvbih7IGRlZmluaXRpb246IG1hbnlQcm9kLmRlZmluaXRpb24gfSksXG4gICAgICAgIF0uY29uY2F0KGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIHRoaXMud2FsayhtYW55UHJvZCwgZnVsbE1hbnlSZXN0KTtcbiAgICB9XG4gICAgd2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBBQkMgKERFKCxERSkqKT8gRiA9PiBhZnRlciB0aGUgKCxERSkqIHRoZSByZXN0IGlzICgsREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbE1hbnlTZXBSZXN0ID0gcmVzdEZvclJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG1hbnlTZXBQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB0aGlzLndhbGsobWFueVNlcFByb2QsIGZ1bGxNYW55U2VwUmVzdCk7XG4gICAgfVxuICAgIHdhbGtPcihvclByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBBQkMoRHxFfEYpRyA9PiB3aGVuIGZpbmRpbmcgdGhlIChEfEV8RikgdGhlIHJlc3QgaXMgR1xuICAgICAgICBjb25zdCBmdWxsT3JSZXN0ID0gY3VyclJlc3QuY29uY2F0KHByZXZSZXN0KTtcbiAgICAgICAgLy8gd2FsayBhbGwgZGlmZmVyZW50IGFsdGVybmF0aXZlc1xuICAgICAgICBmb3JFYWNoKG9yUHJvZC5kZWZpbml0aW9uLCAoYWx0KSA9PiB7XG4gICAgICAgICAgICAvLyB3cmFwcGluZyBlYWNoIGFsdGVybmF0aXZlIGluIGEgc2luZ2xlIGRlZmluaXRpb24gd3JhcHBlclxuICAgICAgICAgICAgLy8gdG8gYXZvaWQgZXJyb3JzIGluIGNvbXB1dGluZyB0aGUgcmVzdCBvZiB0aGF0IGFsdGVybmF0aXZlIGluIHRoZSBpbnZvY2F0aW9uIHRvIGNvbXB1dGVJblByb2RGb2xsb3dzXG4gICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGZvciBPUihbYWx0MSxhbHQyXSkgYWx0MiB3aWxsIGJlIGNvbnNpZGVyZWQgaW4gJ3Jlc3QnIG9mIGFsdDFcbiAgICAgICAgICAgIGNvbnN0IHByb2RXcmFwcGVyID0gbmV3IEFsdGVybmF0aXZlKHsgZGVmaW5pdGlvbjogW2FsdF0gfSk7XG4gICAgICAgICAgICB0aGlzLndhbGsocHJvZFdyYXBwZXIsIGZ1bGxPclJlc3QpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXN0Rm9yUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IocmVwU2VwUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgY29uc3QgcmVwU2VwUmVzdCA9IFtcbiAgICAgICAgbmV3IE9wdGlvbih7XG4gICAgICAgICAgICBkZWZpbml0aW9uOiBbXG4gICAgICAgICAgICAgICAgbmV3IFRlcm1pbmFsKHsgdGVybWluYWxUeXBlOiByZXBTZXBQcm9kLnNlcGFyYXRvciB9KSxcbiAgICAgICAgICAgIF0uY29uY2F0KHJlcFNlcFByb2QuZGVmaW5pdGlvbiksXG4gICAgICAgIH0pLFxuICAgIF07XG4gICAgY29uc3QgZnVsbFJlcFNlcFJlc3QgPSByZXBTZXBSZXN0LmNvbmNhdChjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgIHJldHVybiBmdWxsUmVwU2VwUmVzdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3QuanMubWFwIiwKICAgICJpbXBvcnQgeyBmbGF0dGVuLCBtYXAsIHVuaXEgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBpc0JyYW5jaGluZ1Byb2QsIGlzT3B0aW9uYWxQcm9kLCBpc1NlcXVlbmNlUHJvZCwgTm9uVGVybWluYWwsIFRlcm1pbmFsLCB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG5leHBvcnQgZnVuY3Rpb24gZmlyc3QocHJvZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAvLyB0aGlzIGNvdWxkIGluIHRoZW9yeSBjYXVzZSBpbmZpbml0ZSBsb29wcyBpZlxuICAgICAgICAvLyAoMSkgcHJvZCBBIHJlZnMgcHJvZCBCLlxuICAgICAgICAvLyAoMikgcHJvZCBCIHJlZnMgcHJvZCBBXG4gICAgICAgIC8vICgzKSBBQiBjYW4gbWF0Y2ggdGhlIGVtcHR5IHNldFxuICAgICAgICAvLyBpbiBvdGhlciB3b3JkcyBhIGN5Y2xlIHdoZXJlIGV2ZXJ5dGhpbmcgaXMgb3B0aW9uYWwgc28gdGhlIGZpcnN0IHdpbGwga2VlcFxuICAgICAgICAvLyBsb29raW5nIGFoZWFkIGZvciB0aGUgbmV4dCBvcHRpb25hbCBwYXJ0IGFuZCB3aWxsIG5ldmVyIGV4aXRcbiAgICAgICAgLy8gY3VycmVudGx5IHRoZXJlIGlzIG5vIHNhZmVndWFyZCBmb3IgdGhpcyB1bmlxdWUgZWRnZSBjYXNlIGJlY2F1c2VcbiAgICAgICAgLy8gKDEpIG5vdCBzdXJlIGEgZ3JhbW1hciBpbiB3aGljaCB0aGlzIGNhbiBoYXBwZW4gaXMgdXNlZnVsIGZvciBhbnl0aGluZyAocHJvZHVjdGl2ZSlcbiAgICAgICAgcmV0dXJuIGZpcnN0KHByb2QucmVmZXJlbmNlZFJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Rm9yVGVybWluYWwocHJvZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU2VxdWVuY2VQcm9kKHByb2QpKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEZvclNlcXVlbmNlKHByb2QpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0JyYW5jaGluZ1Byb2QocHJvZCkpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Rm9yQnJhbmNoaW5nKHByb2QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RGb3JTZXF1ZW5jZShwcm9kKSB7XG4gICAgbGV0IGZpcnN0U2V0ID0gW107XG4gICAgY29uc3Qgc2VxID0gcHJvZC5kZWZpbml0aW9uO1xuICAgIGxldCBuZXh0U3ViUHJvZElkeCA9IDA7XG4gICAgbGV0IGhhc0lubmVyUHJvZHNSZW1haW5pbmcgPSBzZXEubGVuZ3RoID4gbmV4dFN1YlByb2RJZHg7XG4gICAgbGV0IGN1cnJTdWJQcm9kO1xuICAgIC8vIHNvIHdlIGVudGVyIHRoZSBsb29wIGF0IGxlYXN0IG9uY2UgKGlmIHRoZSBkZWZpbml0aW9uIGlzIG5vdCBlbXB0eVxuICAgIGxldCBpc0xhc3RJbm5lclByb2RPcHRpb25hbCA9IHRydWU7XG4gICAgLy8gc2NhbiBhIHNlcXVlbmNlIHVudGlsIGl0J3MgZW5kIG9yIHVudGlsIHdlIGhhdmUgZm91bmQgYSBOT05FIG9wdGlvbmFsIHByb2R1Y3Rpb24gaW4gaXRcbiAgICB3aGlsZSAoaGFzSW5uZXJQcm9kc1JlbWFpbmluZyAmJiBpc0xhc3RJbm5lclByb2RPcHRpb25hbCkge1xuICAgICAgICBjdXJyU3ViUHJvZCA9IHNlcVtuZXh0U3ViUHJvZElkeF07XG4gICAgICAgIGlzTGFzdElubmVyUHJvZE9wdGlvbmFsID0gaXNPcHRpb25hbFByb2QoY3VyclN1YlByb2QpO1xuICAgICAgICBmaXJzdFNldCA9IGZpcnN0U2V0LmNvbmNhdChmaXJzdChjdXJyU3ViUHJvZCkpO1xuICAgICAgICBuZXh0U3ViUHJvZElkeCA9IG5leHRTdWJQcm9kSWR4ICsgMTtcbiAgICAgICAgaGFzSW5uZXJQcm9kc1JlbWFpbmluZyA9IHNlcS5sZW5ndGggPiBuZXh0U3ViUHJvZElkeDtcbiAgICB9XG4gICAgcmV0dXJuIHVuaXEoZmlyc3RTZXQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0Rm9yQnJhbmNoaW5nKHByb2QpIHtcbiAgICBjb25zdCBhbGxBbHRlcm5hdGl2ZXNGaXJzdHMgPSBtYXAocHJvZC5kZWZpbml0aW9uLCAoaW5uZXJQcm9kKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXJzdChpbm5lclByb2QpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4oYWxsQWx0ZXJuYXRpdmVzRmlyc3RzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RGb3JUZXJtaW5hbCh0ZXJtaW5hbCkge1xuICAgIHJldHVybiBbdGVybWluYWwudGVybWluYWxUeXBlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0LmpzLm1hcCIsCiAgICAiLy8gVE9ETzogY2FuIHRoaXMgYmUgcmVtb3ZlZD8gd2hlcmUgaXMgaXQgdXNlZD9cbmV4cG9ydCBjb25zdCBJTiA9IFwiX35JTn5fXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJpbXBvcnQgeyBSZXN0V2Fsa2VyIH0gZnJvbSBcIi4vcmVzdC5qc1wiO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi9maXJzdC5qc1wiO1xuaW1wb3J0IHsgYXNzaWduLCBmb3JFYWNoIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgSU4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZSB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG4vLyBUaGlzIFJlc3luY0ZvbGxvd3NXYWxrZXIgY29tcHV0ZXMgYWxsIG9mIHRoZSBmb2xsb3dzIHJlcXVpcmVkIGZvciBSRVNZTkNcbi8vIChza2lwcGluZyByZWZlcmVuY2UgcHJvZHVjdGlvbikuXG5leHBvcnQgY2xhc3MgUmVzeW5jRm9sbG93c1dhbGtlciBleHRlbmRzIFJlc3RXYWxrZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvcFByb2QpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50b3BQcm9kID0gdG9wUHJvZDtcbiAgICAgICAgdGhpcy5mb2xsb3dzID0ge307XG4gICAgfVxuICAgIHN0YXJ0V2Fsa2luZygpIHtcbiAgICAgICAgdGhpcy53YWxrKHRoaXMudG9wUHJvZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZvbGxvd3M7XG4gICAgfVxuICAgIHdhbGtUZXJtaW5hbCh0ZXJtaW5hbCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmchIGp1c3QgbGlrZSBpbiB0aGUgcHVibGljIHNlY3RvciBhZnRlciAxMzowMFxuICAgIH1cbiAgICB3YWxrUHJvZFJlZihyZWZQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgY29uc3QgZm9sbG93TmFtZSA9IGJ1aWxkQmV0d2VlblByb2RzRm9sbG93UHJlZml4KHJlZlByb2QucmVmZXJlbmNlZFJ1bGUsIHJlZlByb2QuaWR4KSArXG4gICAgICAgICAgICB0aGlzLnRvcFByb2QubmFtZTtcbiAgICAgICAgY29uc3QgZnVsbFJlc3QgPSBjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpO1xuICAgICAgICBjb25zdCByZXN0UHJvZCA9IG5ldyBBbHRlcm5hdGl2ZSh7IGRlZmluaXRpb246IGZ1bGxSZXN0IH0pO1xuICAgICAgICBjb25zdCB0X2luX3RvcFByb2RfZm9sbG93cyA9IGZpcnN0KHJlc3RQcm9kKTtcbiAgICAgICAgdGhpcy5mb2xsb3dzW2ZvbGxvd05hbWVdID0gdF9pbl90b3BQcm9kX2ZvbGxvd3M7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVBbGxQcm9kc0ZvbGxvd3ModG9wUHJvZHVjdGlvbnMpIHtcbiAgICBjb25zdCByZVN5bmNGb2xsb3dzID0ge307XG4gICAgZm9yRWFjaCh0b3BQcm9kdWN0aW9ucywgKHRvcFByb2QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyclJlZnNGb2xsb3cgPSBuZXcgUmVzeW5jRm9sbG93c1dhbGtlcih0b3BQcm9kKS5zdGFydFdhbGtpbmcoKTtcbiAgICAgICAgYXNzaWduKHJlU3luY0ZvbGxvd3MsIGN1cnJSZWZzRm9sbG93KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVTeW5jRm9sbG93cztcbn1cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJldHdlZW5Qcm9kc0ZvbGxvd1ByZWZpeChpbm5lciwgb2NjdXJlbmNlSW5QYXJlbnQpIHtcbiAgICByZXR1cm4gaW5uZXIubmFtZSArIG9jY3VyZW5jZUluUGFyZW50ICsgSU47XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJblByb2RGb2xsb3dQcmVmaXgodGVybWluYWwpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5hbWUgPSB0ZXJtaW5hbC50ZXJtaW5hbFR5cGUubmFtZTtcbiAgICByZXR1cm4gdGVybWluYWxOYW1lICsgdGVybWluYWwuaWR4ICsgSU47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb2xsb3cuanMubWFwIiwKICAgICJpbXBvcnQgeyBSZWdFeHBQYXJzZXIsIH0gZnJvbSBcIkBjaGV2cm90YWluL3JlZ2V4cC10by1hc3RcIjtcbmxldCByZWdFeHBBc3RDYWNoZSA9IHt9O1xuY29uc3QgcmVnRXhwUGFyc2VyID0gbmV3IFJlZ0V4cFBhcnNlcigpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZ0V4cEFzdChyZWdFeHApIHtcbiAgICBjb25zdCByZWdFeHBTdHIgPSByZWdFeHAudG9TdHJpbmcoKTtcbiAgICBpZiAocmVnRXhwQXN0Q2FjaGUuaGFzT3duUHJvcGVydHkocmVnRXhwU3RyKSkge1xuICAgICAgICByZXR1cm4gcmVnRXhwQXN0Q2FjaGVbcmVnRXhwU3RyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cEFzdCA9IHJlZ0V4cFBhcnNlci5wYXR0ZXJuKHJlZ0V4cFN0cik7XG4gICAgICAgIHJlZ0V4cEFzdENhY2hlW3JlZ0V4cFN0cl0gPSByZWdFeHBBc3Q7XG4gICAgICAgIHJldHVybiByZWdFeHBBc3Q7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyUmVnRXhwUGFyc2VyQ2FjaGUoKSB7XG4gICAgcmVnRXhwQXN0Q2FjaGUgPSB7fTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ19leHBfcGFyc2VyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQmFzZVJlZ0V4cFZpc2l0b3IsIH0gZnJvbSBcIkBjaGV2cm90YWluL3JlZ2V4cC10by1hc3RcIjtcbmltcG9ydCB7IGV2ZXJ5LCBmaW5kLCBmb3JFYWNoLCBpbmNsdWRlcywgaXNBcnJheSwgdmFsdWVzIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJJTlRfRVJST1IsIFBSSU5UX1dBUk5JTkcgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGdldFJlZ0V4cEFzdCB9IGZyb20gXCIuL3JlZ19leHBfcGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgsIG1pbk9wdGltaXphdGlvblZhbCB9IGZyb20gXCIuL2xleGVyLmpzXCI7XG5jb25zdCBjb21wbGVtZW50RXJyb3JNZXNzYWdlID0gXCJDb21wbGVtZW50IFNldHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9uXCI7XG5leHBvcnQgY29uc3QgZmFpbGVkT3B0aW1pemF0aW9uUHJlZml4TXNnID0gJ1VuYWJsZSB0byB1c2UgXCJmaXJzdCBjaGFyXCIgbGV4ZXIgb3B0aW1pemF0aW9uczpcXG4nO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wdGltaXplZFN0YXJ0Q29kZXNJbmRpY2VzKHJlZ0V4cCwgZW5zdXJlT3B0aW1pemF0aW9ucyA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXN0ID0gZ2V0UmVnRXhwQXN0KHJlZ0V4cCk7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hhcnMgPSBmaXJzdENoYXJPcHRpbWl6ZWRJbmRpY2VzKGFzdC52YWx1ZSwge30sIGFzdC5mbGFncy5pZ25vcmVDYXNlKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0Q2hhcnM7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8vIFRlc3RpbmcgdGhpcyByZWxpZXMgb24gdGhlIHJlZ2V4cC10by1hc3QgbGlicmFyeSBoYXZpbmcgYSBidWcuLi4gKi9cbiAgICAgICAgLy8gVE9ETzogb25seSB0aGUgZWxzZSBicmFuY2ggbmVlZHMgdG8gYmUgaWdub3JlZCwgdHJ5IHRvIGZpeCB3aXRoIG5ld2VyIHByZXR0aWVyIC8gdHNjXG4gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09IGNvbXBsZW1lbnRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGlmIChlbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgUFJJTlRfV0FSTklORyhgJHtmYWlsZWRPcHRpbWl6YXRpb25QcmVmaXhNc2d9YCArXG4gICAgICAgICAgICAgICAgICAgIGBcXHRVbmFibGUgdG8gb3B0aW1pemU6IDwgJHtyZWdFeHAudG9TdHJpbmcoKX0gPlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcdENvbXBsZW1lbnQgU2V0cyBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBvcHRpbWl6ZWQuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwiXFx0U2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ09NUExFTUVOVCBmb3IgZGV0YWlscy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbXNnU3VmZml4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChlbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgbXNnU3VmZml4ID1cbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cXHRUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHRTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNSRUdFWFBfUEFSU0lORyBmb3IgZGV0YWlscy5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFBSSU5UX0VSUk9SKGAke2ZhaWxlZE9wdGltaXphdGlvblByZWZpeE1zZ31cXG5gICtcbiAgICAgICAgICAgICAgICBgXFx0RmFpbGVkIHBhcnNpbmc6IDwgJHtyZWdFeHAudG9TdHJpbmcoKX0gPlxcbmAgK1xuICAgICAgICAgICAgICAgIGBcXHRVc2luZyB0aGUgQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdCBsaWJyYXJ5XFxuYCArXG4gICAgICAgICAgICAgICAgXCJcXHRQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdDogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXNcIiArXG4gICAgICAgICAgICAgICAgbXNnU3VmZml4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW107XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyhhc3QsIHJlc3VsdCwgaWdub3JlQ2FzZSkge1xuICAgIHN3aXRjaCAoYXN0LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkRpc2p1bmN0aW9uXCI6XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFzdC52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZpcnN0Q2hhck9wdGltaXplZEluZGljZXMoYXN0LnZhbHVlW2ldLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBbHRlcm5hdGl2ZVwiOlxuICAgICAgICAgICAgY29uc3QgdGVybXMgPSBhc3QudmFsdWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybSA9IHRlcm1zW2ldO1xuICAgICAgICAgICAgICAgIC8vIHNraXAgdGVybXMgdGhhdCBjYW5ub3QgZWZmZWN0IHRoZSBmaXJzdCBjaGFyIHJlc3VsdHNcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlcm0udHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiRW5kQW5jaG9yXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgZ3JvdXAgYmFjayByZWZlcmVuY2UgY2Fubm90IGFmZmVjdCBwb3RlbnRpYWwgc3RhcnRpbmcgY2hhci5cbiAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpZiBhIGJhY2sgcmVmZXJlbmNlIGlzIHRoZSBmaXJzdCBwcm9kdWN0aW9uIHRoYW4gYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZ3JvdXAgYmVpbmcgcmVmZXJlbmNlZCBoYXMgaGFkIHRvIGNvbWUgQkVGT1JFIHNvIGl0cyBjb2RlcyBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiR3JvdXBCYWNrUmVmZXJlbmNlXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgZG8gbm90IGFmZmVjdCBwb3RlbnRpYWwgc3RhcnRpbmcgY29kZXNcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkxvb2thaGVhZFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiTmVnYXRpdmVMb29rYWhlYWRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlN0YXJ0QW5jaG9yXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJXb3JkQm91bmRhcnlcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIk5vbldvcmRCb3VuZGFyeVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0b20gPSB0ZXJtO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYXRvbS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDaGFyYWN0ZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9wdGltaXplZElkeFRvUmVzdWx0KGF0b20udmFsdWUsIHJlc3VsdCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNldFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0b20uY29tcGxlbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGNvbXBsZW1lbnRFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChhdG9tLnZhbHVlLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPcHRpbWl6ZWRJZHhUb1Jlc3VsdChjb2RlLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3Qgb3B0aW1pemUgd2hlbiBpZ25vcmVDYXNlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVDYXNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByYW5nZUNvZGUgPSByYW5nZS5mcm9tOyByYW5nZUNvZGUgPD0gcmFuZ2UudG87IHJhbmdlQ29kZSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3B0aW1pemVkSWR4VG9SZXN1bHQocmFuZ2VDb2RlLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbiAoMiBvcmRlcnMgb2YgbWFnbml0dWRlIGxlc3Mgd29yayBmb3IgdmVyeSBsYXJnZSByYW5nZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHVub3B0aW1pemVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcmFuZ2VDb2RlID0gcmFuZ2UuZnJvbTsgcmFuZ2VDb2RlIDw9IHJhbmdlLnRvICYmIHJhbmdlQ29kZSA8IG1pbk9wdGltaXphdGlvblZhbDsgcmFuZ2VDb2RlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPcHRpbWl6ZWRJZHhUb1Jlc3VsdChyYW5nZUNvZGUsIHJlc3VsdCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXNzIGNvbW1vbiBjaGFyQ29kZSB3aGVyZSB3ZSBvcHRpbWl6ZSBmb3IgZmFzdGVyIGluaXQgdGltZSwgYnkgdXNpbmcgbGFyZ2VyIFwiYnVja2V0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UudG8gPj0gbWluT3B0aW1pemF0aW9uVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVW5PcHRWYWwgPSByYW5nZS5mcm9tID49IG1pbk9wdGltaXphdGlvblZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJhbmdlLmZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtaW5PcHRpbWl6YXRpb25WYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VW5PcHRWYWwgPSByYW5nZS50bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5PcHRJZHggPSBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgobWluVW5PcHRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heE9wdElkeCA9IGNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleChtYXhVbk9wdFZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY3Vyck9wdElkeCA9IG1pbk9wdElkeDsgY3Vyck9wdElkeCA8PSBtYXhPcHRJZHg7IGN1cnJPcHRJZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3Vyck9wdElkeF0gPSBjdXJyT3B0SWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJHcm91cFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyhhdG9tLnZhbHVlLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk5vbiBFeGhhdXN0aXZlIE1hdGNoXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZWFjaGVkIGEgbWFuZGF0b3J5IHByb2R1Y3Rpb24sIG5vIG1vcmUgKipzdGFydCoqIGNvZGVzIGNhbiBiZSBmb3VuZCBvbiB0aGlzIGFsdGVybmF0aXZlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbFF1YW50aWZpZXIgPSBhdG9tLnF1YW50aWZpZXIgIT09IHVuZGVmaW5lZCAmJiBhdG9tLnF1YW50aWZpZXIuYXRMZWFzdCA9PT0gMDtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gQSBncm91cCBtYXkgYmUgb3B0aW9uYWwgZHVlIHRvIGVtcHR5IGNvbnRlbnRzIC8oPzopL1xuICAgICAgICAgICAgICAgIC8vIG9yIGlmIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IGlzIG9wdGlvbmFsIC8oKGEpPykvXG4gICAgICAgICAgICAgICAgKGF0b20udHlwZSA9PT0gXCJHcm91cFwiICYmIGlzV2hvbGVPcHRpb25hbChhdG9tKSA9PT0gZmFsc2UpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgdGVybSBpcyBub3QgYSBncm91cCBpdCBtYXkgb25seSBiZSBvcHRpb25hbCBpZiBpdCBoYXMgYW4gb3B0aW9uYWwgcXVhbnRpZmllclxuICAgICAgICAgICAgICAgICAgICAoYXRvbS50eXBlICE9PSBcIkdyb3VwXCIgJiYgaXNPcHRpb25hbFF1YW50aWZpZXIgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2ghXCIpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aClcbiAgICByZXR1cm4gdmFsdWVzKHJlc3VsdCk7XG59XG5mdW5jdGlvbiBhZGRPcHRpbWl6ZWRJZHhUb1Jlc3VsdChjb2RlLCByZXN1bHQsIGlnbm9yZUNhc2UpIHtcbiAgICBjb25zdCBvcHRpbWl6ZWRDaGFySWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KGNvZGUpO1xuICAgIHJlc3VsdFtvcHRpbWl6ZWRDaGFySWR4XSA9IG9wdGltaXplZENoYXJJZHg7XG4gICAgaWYgKGlnbm9yZUNhc2UgPT09IHRydWUpIHtcbiAgICAgICAgaGFuZGxlSWdub3JlQ2FzZShjb2RlLCByZXN1bHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUlnbm9yZUNhc2UoY29kZSwgcmVzdWx0KSB7XG4gICAgY29uc3QgY2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgY29uc3QgdXBwZXJDaGFyID0gY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHVwcGVyQ2hhciAhPT0gY2hhcikge1xuICAgICAgICBjb25zdCBvcHRpbWl6ZWRDaGFySWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KHVwcGVyQ2hhci5jaGFyQ29kZUF0KDApKTtcbiAgICAgICAgcmVzdWx0W29wdGltaXplZENoYXJJZHhdID0gb3B0aW1pemVkQ2hhcklkeDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQ2hhciA9IGNoYXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGxvd2VyQ2hhciAhPT0gY2hhcikge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW1pemVkQ2hhcklkeCA9IGNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleChsb3dlckNoYXIuY2hhckNvZGVBdCgwKSk7XG4gICAgICAgICAgICByZXN1bHRbb3B0aW1pemVkQ2hhcklkeF0gPSBvcHRpbWl6ZWRDaGFySWR4O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZmluZENvZGUoc2V0Tm9kZSwgdGFyZ2V0Q2hhckNvZGVzKSB7XG4gICAgcmV0dXJuIGZpbmQoc2V0Tm9kZS52YWx1ZSwgKGNvZGVPclJhbmdlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29kZU9yUmFuZ2UgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0YXJnZXRDaGFyQ29kZXMsIGNvZGVPclJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJhbmdlXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvZGVPclJhbmdlO1xuICAgICAgICAgICAgcmV0dXJuIChmaW5kKHRhcmdldENoYXJDb2RlcywgKHRhcmdldENvZGUpID0+IHJhbmdlLmZyb20gPD0gdGFyZ2V0Q29kZSAmJiB0YXJnZXRDb2RlIDw9IHJhbmdlLnRvKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNXaG9sZU9wdGlvbmFsKGFzdCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXIgPSBhc3QucXVhbnRpZmllcjtcbiAgICBpZiAocXVhbnRpZmllciAmJiBxdWFudGlmaWVyLmF0TGVhc3QgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghYXN0LnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQXJyYXkoYXN0LnZhbHVlKVxuICAgICAgICA/IGV2ZXJ5KGFzdC52YWx1ZSwgaXNXaG9sZU9wdGlvbmFsKVxuICAgICAgICA6IGlzV2hvbGVPcHRpb25hbChhc3QudmFsdWUpO1xufVxuY2xhc3MgQ2hhckNvZGVGaW5kZXIgZXh0ZW5kcyBCYXNlUmVnRXhwVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0Q2hhckNvZGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0Q2hhckNvZGVzID0gdGFyZ2V0Q2hhckNvZGVzO1xuICAgICAgICB0aGlzLmZvdW5kID0gZmFsc2U7XG4gICAgfVxuICAgIHZpc2l0Q2hpbGRyZW4obm9kZSkge1xuICAgICAgICAvLyBObyBuZWVkIHRvIGtlZXAgbG9va2luZy4uLlxuICAgICAgICBpZiAodGhpcy5mb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN3aXRjaCBsb29rYWhlYWRzIGFzIHRoZXkgZG8gbm90IGFjdHVhbGx5IGNvbnN1bWUgYW55IGNoYXJhY3RlcnMgdGh1c1xuICAgICAgICAvLyBmaW5kaW5nIGEgY2hhckNvZGUgYXQgbG9va2FoZWFkIGNvbnRleHQgZG9lcyBub3QgbWVhbiB0aGF0IHJlZ2V4cCBjYW4gYWN0dWFsbHkgY29udGFpbiBpdCBpbiBhIG1hdGNoLlxuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIkxvb2thaGVhZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRMb29rYWhlYWQobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIk5lZ2F0aXZlTG9va2FoZWFkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci52aXNpdENoaWxkcmVuKG5vZGUpO1xuICAgIH1cbiAgICB2aXNpdENoYXJhY3Rlcihub2RlKSB7XG4gICAgICAgIGlmIChpbmNsdWRlcyh0aGlzLnRhcmdldENoYXJDb2Rlcywgbm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0U2V0KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY29tcGxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGZpbmRDb2RlKG5vZGUsIHRoaXMudGFyZ2V0Q2hhckNvZGVzKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZmluZENvZGUobm9kZSwgdGhpcy50YXJnZXRDaGFyQ29kZXMpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5NYXRjaENoYXJDb2RlKGNoYXJDb2RlcywgcGF0dGVybikge1xuICAgIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIGNvbnN0IGFzdCA9IGdldFJlZ0V4cEFzdChwYXR0ZXJuKTtcbiAgICAgICAgY29uc3QgY2hhckNvZGVGaW5kZXIgPSBuZXcgQ2hhckNvZGVGaW5kZXIoY2hhckNvZGVzKTtcbiAgICAgICAgY2hhckNvZGVGaW5kZXIudmlzaXQoYXN0KTtcbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlRmluZGVyLmZvdW5kO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChmaW5kKHBhdHRlcm4sIChjaGFyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5jbHVkZXMoY2hhckNvZGVzLCBjaGFyLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICB9KSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdfZXhwLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQmFzZVJlZ0V4cFZpc2l0b3IgfSBmcm9tIFwiQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdFwiO1xuaW1wb3J0IHsgTGV4ZXIsIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZSwgfSBmcm9tIFwiLi9sZXhlcl9wdWJsaWMuanNcIjtcbmltcG9ydCB7IGNvbXBhY3QsIGRlZmF1bHRzLCBkaWZmZXJlbmNlLCBmaWx0ZXIsIGZpbmQsIGZpcnN0LCBmbGF0dGVuLCBmb3JFYWNoLCBoYXMsIGluY2x1ZGVzLCBpbmRleE9mLCBpc0FycmF5LCBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCBrZXlzLCBtYXAsIHJlZHVjZSwgcmVqZWN0LCB2YWx1ZXMsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJJTlRfRVJST1IgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGNhbk1hdGNoQ2hhckNvZGUsIGZhaWxlZE9wdGltaXphdGlvblByZWZpeE1zZywgZ2V0T3B0aW1pemVkU3RhcnRDb2Rlc0luZGljZXMsIH0gZnJvbSBcIi4vcmVnX2V4cC5qc1wiO1xuaW1wb3J0IHsgZ2V0UmVnRXhwQXN0IH0gZnJvbSBcIi4vcmVnX2V4cF9wYXJzZXIuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBcIlBBVFRFUk5cIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREUgPSBcImRlZmF1bHRNb2RlXCI7XG5leHBvcnQgY29uc3QgTU9ERVMgPSBcIm1vZGVzXCI7XG5leHBvcnQgbGV0IFNVUFBPUlRfU1RJQ0tZID0gdHlwZW9mIG5ldyBSZWdFeHAoXCIoPzopXCIpLnN0aWNreSA9PT0gXCJib29sZWFuXCI7XG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVN0aWNreSgpIHtcbiAgICBTVVBQT1JUX1NUSUNLWSA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZVN0aWNreSgpIHtcbiAgICBTVVBQT1JUX1NUSUNLWSA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZVRva2VuVHlwZXModG9rZW5UeXBlcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICAgIHVzZVN0aWNreTogU1VQUE9SVF9TVElDS1ksXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgc2FmZU1vZGU6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblRyYWNraW5nOiBcImZ1bGxcIixcbiAgICAgICAgbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOiBbXCJcXHJcIiwgXCJcXG5cIl0sXG4gICAgICAgIHRyYWNlcjogKG1zZywgYWN0aW9uKSA9PiBhY3Rpb24oKSxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFjZXIgPSBvcHRpb25zLnRyYWNlcjtcbiAgICB0cmFjZXIoXCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwXCIsICgpID0+IHtcbiAgICAgICAgaW5pdENoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleE1hcCgpO1xuICAgIH0pO1xuICAgIGxldCBvbmx5UmVsZXZhbnRUeXBlcztcbiAgICB0cmFjZXIoXCJSZWplY3QgTGV4ZXIuTkFcIiwgKCkgPT4ge1xuICAgICAgICBvbmx5UmVsZXZhbnRUeXBlcyA9IHJlamVjdCh0b2tlblR5cGVzLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyVHlwZVtQQVRURVJOXSA9PT0gTGV4ZXIuTkE7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGxldCBoYXNDdXN0b20gPSBmYWxzZTtcbiAgICBsZXQgYWxsVHJhbnNmb3JtZWRQYXR0ZXJucztcbiAgICB0cmFjZXIoXCJUcmFuc2Zvcm0gUGF0dGVybnNcIiwgKCkgPT4ge1xuICAgICAgICBoYXNDdXN0b20gPSBmYWxzZTtcbiAgICAgICAgYWxsVHJhbnNmb3JtZWRQYXR0ZXJucyA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUGF0dGVybiA9IGN1cnJUeXBlW1BBVFRFUk5dO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpc1JlZ0V4cChjdXJyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdFeHBTb3VyY2UgPSBjdXJyUGF0dGVybi5zb3VyY2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ0V4cFNvdXJjZS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSB0aGVzZSByZWdFeHAgbWV0YSBjaGFyYWN0ZXJzIHdoaWNoIGNhbiBhcHBlYXIgaW4gYSBsZW5ndGggb25lIHJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICByZWdFeHBTb3VyY2UgIT09IFwiXlwiICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZ0V4cFNvdXJjZSAhPT0gXCIkXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVnRXhwU291cmNlICE9PSBcIi5cIiAmJlxuICAgICAgICAgICAgICAgICAgICAhY3VyclBhdHRlcm4uaWdub3JlQ2FzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwU291cmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWdFeHBTb3VyY2UubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZ0V4cFNvdXJjZVswXSA9PT0gXCJcXFxcXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gbm90IGEgbWV0YSBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICAgICAgIWluY2x1ZGVzKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiV1wiLFxuICAgICAgICAgICAgICAgICAgICBdLCByZWdFeHBTb3VyY2VbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZWQgbWV0YSBDaGFyYWN0ZXJzOiAvXFwrLyAvXFxbL1xuICAgICAgICAgICAgICAgICAgICAvLyBvciByZWR1bmRhbnQgZXNjYXBpbmc6IC9cXGEvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgdGhlIGVzY2FwaW5nIFwiXFxcIlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwU291cmNlWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMudXNlU3RpY2t5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFkZFN0aWNreUZsYWcoY3VyclBhdHRlcm4pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFkZFN0YXJ0T2ZJbnB1dChjdXJyUGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihjdXJyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBoYXNDdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIEN1c3RvbVBhdHRlcm5NYXRjaGVyRnVuYyAtIGN1c3RvbSBwYXR0ZXJucyBkbyBub3QgcmVxdWlyZSBhbnkgdHJhbnNmb3JtYXRpb25zLCBvbmx5IHdyYXBwaW5nIGluIGEgUmVnRXhwIExpa2Ugb2JqZWN0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXhlYzogY3VyclBhdHRlcm4gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyUGF0dGVybiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGhhc0N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gSUN1c3RvbVBhdHRlcm5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyclBhdHRlcm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY3VyclBhdHRlcm4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VyclBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyUGF0dGVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVzY2FwZWRSZWdFeHBTdHJpbmcgPSBjdXJyUGF0dGVybi5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZywgXCJcXFxcJCZcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZWdFeHAgPSBuZXcgUmVnRXhwKGVzY2FwZWRSZWdFeHBTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy51c2VTdGlja3lcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWRkU3RpY2t5RmxhZyh3cmFwcGVkUmVnRXhwKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRTdGFydE9mSW5wdXQod3JhcHBlZFJlZ0V4cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgbGV0IHBhdHRlcm5JZHhUb1R5cGU7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0dyb3VwO1xuICAgIGxldCBwYXR0ZXJuSWR4VG9Mb25nZXJBbHRJZHhBcnI7XG4gICAgbGV0IHBhdHRlcm5JZHhUb1B1c2hNb2RlO1xuICAgIGxldCBwYXR0ZXJuSWR4VG9Qb3BNb2RlO1xuICAgIHRyYWNlcihcIm1pc2MgbWFwcGluZ1wiLCAoKSA9PiB7XG4gICAgICAgIHBhdHRlcm5JZHhUb1R5cGUgPSBtYXAob25seVJlbGV2YW50VHlwZXMsIChjdXJyVHlwZSkgPT4gY3VyclR5cGUudG9rZW5UeXBlSWR4KTtcbiAgICAgICAgcGF0dGVybklkeFRvR3JvdXAgPSBtYXAob25seVJlbGV2YW50VHlwZXMsIChjbGF6eikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBOYW1lID0gY2xhenouR1JPVVA7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKGdyb3VwTmFtZSA9PT0gTGV4ZXIuU0tJUFBFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZyhncm91cE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKGdyb3VwTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcGF0dGVybklkeFRvTG9uZ2VyQWx0SWR4QXJyID0gbWFwKG9ubHlSZWxldmFudFR5cGVzLCAoY2xhenopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdFR5cGUgPSBjbGF6ei5MT05HRVJfQUxUO1xuICAgICAgICAgICAgaWYgKGxvbmdlckFsdFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb25nZXJBbHRJZHhBcnIgPSBpc0FycmF5KGxvbmdlckFsdFR5cGUpXG4gICAgICAgICAgICAgICAgICAgID8gbWFwKGxvbmdlckFsdFR5cGUsICh0eXBlKSA9PiBpbmRleE9mKG9ubHlSZWxldmFudFR5cGVzLCB0eXBlKSlcbiAgICAgICAgICAgICAgICAgICAgOiBbaW5kZXhPZihvbmx5UmVsZXZhbnRUeXBlcywgbG9uZ2VyQWx0VHlwZSldO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb25nZXJBbHRJZHhBcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXR0ZXJuSWR4VG9QdXNoTW9kZSA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgKGNsYXp6KSA9PiBjbGF6ei5QVVNIX01PREUpO1xuICAgICAgICBwYXR0ZXJuSWR4VG9Qb3BNb2RlID0gbWFwKG9ubHlSZWxldmFudFR5cGVzLCAoY2xhenopID0+IGhhcyhjbGF6eiwgXCJQT1BfTU9ERVwiKSk7XG4gICAgfSk7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0NhbkxpbmVUZXJtaW5hdG9yO1xuICAgIHRyYWNlcihcIkxpbmUgVGVybWluYXRvciBIYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmVUZXJtaW5hdG9yQ2hhckNvZGVzID0gZ2V0Q2hhckNvZGVzKG9wdGlvbnMubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKTtcbiAgICAgICAgcGF0dGVybklkeFRvQ2FuTGluZVRlcm1pbmF0b3IgPSBtYXAob25seVJlbGV2YW50VHlwZXMsICh0b2tUeXBlKSA9PiBmYWxzZSk7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uVHJhY2tpbmcgIT09IFwib25seU9mZnNldFwiKSB7XG4gICAgICAgICAgICBwYXR0ZXJuSWR4VG9DYW5MaW5lVGVybWluYXRvciA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgKHRva1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzKHRva1R5cGUsIFwiTElORV9CUkVBS1NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdG9rVHlwZS5MSU5FX0JSRUFLUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hlY2tMaW5lQnJlYWtzSXNzdWVzKHRva1R5cGUsIGxpbmVUZXJtaW5hdG9yQ2hhckNvZGVzKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbk1hdGNoQ2hhckNvZGUobGluZVRlcm1pbmF0b3JDaGFyQ29kZXMsIHRva1R5cGUuUEFUVEVSTikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0lzQ3VzdG9tO1xuICAgIGxldCBwYXR0ZXJuSWR4VG9TaG9ydDtcbiAgICBsZXQgZW1wdHlHcm91cHM7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0NvbmZpZztcbiAgICB0cmFjZXIoXCJNaXNjIE1hcHBpbmcgIzJcIiwgKCkgPT4ge1xuICAgICAgICBwYXR0ZXJuSWR4VG9Jc0N1c3RvbSA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgaXNDdXN0b21QYXR0ZXJuKTtcbiAgICAgICAgcGF0dGVybklkeFRvU2hvcnQgPSBtYXAoYWxsVHJhbnNmb3JtZWRQYXR0ZXJucywgaXNTaG9ydFBhdHRlcm4pO1xuICAgICAgICBlbXB0eUdyb3VwcyA9IHJlZHVjZShvbmx5UmVsZXZhbnRUeXBlcywgKGFjYywgY2xhenopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IGNsYXp6LkdST1VQO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGdyb3VwTmFtZSkgJiYgIShncm91cE5hbWUgPT09IExleGVyLlNLSVBQRUQpKSB7XG4gICAgICAgICAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgcGF0dGVybklkeFRvQ29uZmlnID0gbWFwKGFsbFRyYW5zZm9ybWVkUGF0dGVybnMsICh4LCBpZHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogYWxsVHJhbnNmb3JtZWRQYXR0ZXJuc1tpZHhdLFxuICAgICAgICAgICAgICAgIGxvbmdlckFsdDogcGF0dGVybklkeFRvTG9uZ2VyQWx0SWR4QXJyW2lkeF0sXG4gICAgICAgICAgICAgICAgY2FuTGluZVRlcm1pbmF0b3I6IHBhdHRlcm5JZHhUb0NhbkxpbmVUZXJtaW5hdG9yW2lkeF0sXG4gICAgICAgICAgICAgICAgaXNDdXN0b206IHBhdHRlcm5JZHhUb0lzQ3VzdG9tW2lkeF0sXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHBhdHRlcm5JZHhUb1Nob3J0W2lkeF0sXG4gICAgICAgICAgICAgICAgZ3JvdXA6IHBhdHRlcm5JZHhUb0dyb3VwW2lkeF0sXG4gICAgICAgICAgICAgICAgcHVzaDogcGF0dGVybklkeFRvUHVzaE1vZGVbaWR4XSxcbiAgICAgICAgICAgICAgICBwb3A6IHBhdHRlcm5JZHhUb1BvcE1vZGVbaWR4XSxcbiAgICAgICAgICAgICAgICB0b2tlblR5cGVJZHg6IHBhdHRlcm5JZHhUb1R5cGVbaWR4XSxcbiAgICAgICAgICAgICAgICB0b2tlblR5cGU6IG9ubHlSZWxldmFudFR5cGVzW2lkeF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBsZXQgY2FuQmVPcHRpbWl6ZWQgPSB0cnVlO1xuICAgIGxldCBjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnID0gW107XG4gICAgaWYgKCFvcHRpb25zLnNhZmVNb2RlKSB7XG4gICAgICAgIHRyYWNlcihcIkZpcnN0IENoYXIgT3B0aW1pemF0aW9uXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgPSByZWR1Y2Uob25seVJlbGV2YW50VHlwZXMsIChyZXN1bHQsIGN1cnJUb2tUeXBlLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJUb2tUeXBlLlBBVFRFUk4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhckNvZGUgPSBjdXJyVG9rVHlwZS5QQVRURVJOLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGltaXplZElkeCA9IGNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleChjaGFyQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRvTWFwT2ZBcnJheXMocmVzdWx0LCBvcHRpbWl6ZWRJZHgsIHBhdHRlcm5JZHhUb0NvbmZpZ1tpZHhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheShjdXJyVG9rVHlwZS5TVEFSVF9DSEFSU19ISU5UKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdE9wdGltaXplZElkeDtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjdXJyVG9rVHlwZS5TVEFSVF9DSEFSU19ISU5ULCAoY2hhck9ySW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IHR5cGVvZiBjaGFyT3JJbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNoYXJPckludC5jaGFyQ29kZUF0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGFyT3JJbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyT3B0aW1pemVkSWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KGNoYXJDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIGFkZGluZyB0aGUgY29uZmlnIG11bHRpcGxlIHRpbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBEaWZmaWN1bHQgdG8gY2hlY2sgdGhpcyBzY2VuYXJpbyBlZmZlY3RzIGFzIGl0IGlzIG9ubHkgYSBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBvcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBjaGFuZ2UgY29ycmVjdG5lc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T3B0aW1pemVkSWR4ICE9PSBjdXJyT3B0aW1pemVkSWR4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE9wdGltaXplZElkeCA9IGN1cnJPcHRpbWl6ZWRJZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9NYXBPZkFycmF5cyhyZXN1bHQsIGN1cnJPcHRpbWl6ZWRJZHgsIHBhdHRlcm5JZHhUb0NvbmZpZ1tpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVnRXhwKGN1cnJUb2tUeXBlLlBBVFRFUk4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVG9rVHlwZS5QQVRURVJOLnVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbkJlT3B0aW1pemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlRfRVJST1IoYCR7ZmFpbGVkT3B0aW1pemF0aW9uUHJlZml4TXNnfWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFx0VW5hYmxlIHRvIGFuYWx5emUgPCAke2N1cnJUb2tUeXBlLlBBVFRFUk4udG9TdHJpbmcoKX0gPiBwYXR0ZXJuLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdFRoZSByZWdleHAgdW5pY29kZSBmbGFnIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSByZWdleHAtdG8tYXN0IGxpYnJhcnkuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFx0Rm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5JQ09ERV9PUFRJTUlaRVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGltaXplZENvZGVzID0gZ2V0T3B0aW1pemVkU3RhcnRDb2Rlc0luZGljZXMoY3VyclRva1R5cGUuUEFUVEVSTiwgb3B0aW9ucy5lbnN1cmVPcHRpbWl6YXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgY29kZSB3aWxsIG9ubHkgYmUgZW1wdHkgZ2l2ZW4gYW4gZW1wdHkgcmVnRXhwIG9yIGZhaWx1cmUgb2YgcmVnZXhwLXRvLWFzdCBsaWJyYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3Qgc2hvdWxkIGJlIGEgZGlmZmVyZW50IHZhbGlkYXRpb24gYW5kIHRoZSBzZWNvbmQgY2Fubm90IGJlIHRlc3RlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KG9wdGltaXplZENvZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbm5vdCB1bmRlcnN0YW5kIHdoYXQgY29kZXMgbWF5IHN0YXJ0IHBvc3NpYmxlIG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3B0aW1pemF0aW9uIGNvcnJlY3RuZXNzIHJlcXVpcmVzIGtub3dpbmcgc3RhcnQgY29kZXMgZm9yIEFMTCBwYXR0ZXJucy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYWN0dWFsbHkgc3VyZSB0aGlzIGlzIGFuIGVycm9yLCBubyBkZWJ1ZyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2gob3B0aW1pemVkQ29kZXMsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9NYXBPZkFycmF5cyhyZXN1bHQsIGNvZGUsIHBhdHRlcm5JZHhUb0NvbmZpZ1tpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBQUklOVF9FUlJPUihgJHtmYWlsZWRPcHRpbWl6YXRpb25QcmVmaXhNc2d9YCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxcdFRva2VuVHlwZTogPCR7Y3VyclRva1R5cGUubmFtZX0+IGlzIHVzaW5nIGEgY3VzdG9tIHRva2VuIHBhdHRlcm4gd2l0aG91dCBwcm92aWRpbmcgPHN0YXJ0X2NoYXJzX2hpbnQ+IHBhcmFtZXRlci5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHRGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fT1BUSU1JWkVcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVtcHR5R3JvdXBzOiBlbXB0eUdyb3VwcyxcbiAgICAgICAgcGF0dGVybklkeFRvQ29uZmlnOiBwYXR0ZXJuSWR4VG9Db25maWcsXG4gICAgICAgIGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc6IGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcsXG4gICAgICAgIGhhc0N1c3RvbTogaGFzQ3VzdG9tLFxuICAgICAgICBjYW5CZU9wdGltaXplZDogY2FuQmVPcHRpbWl6ZWQsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5zKHRva2VuVHlwZXMsIHZhbGlkTW9kZXNOYW1lcykge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBtaXNzaW5nUmVzdWx0ID0gZmluZE1pc3NpbmdQYXR0ZXJucyh0b2tlblR5cGVzKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KG1pc3NpbmdSZXN1bHQuZXJyb3JzKTtcbiAgICBjb25zdCBpbnZhbGlkUmVzdWx0ID0gZmluZEludmFsaWRQYXR0ZXJucyhtaXNzaW5nUmVzdWx0LnZhbGlkKTtcbiAgICBjb25zdCB2YWxpZFRva2VuVHlwZXMgPSBpbnZhbGlkUmVzdWx0LnZhbGlkO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoaW52YWxpZFJlc3VsdC5lcnJvcnMpO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVSZWdFeHBQYXR0ZXJuKHZhbGlkVG9rZW5UeXBlcykpO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoZmluZEludmFsaWRHcm91cFR5cGUodmFsaWRUb2tlblR5cGVzKSk7XG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmaW5kTW9kZXNUaGF0RG9Ob3RFeGlzdCh2YWxpZFRva2VuVHlwZXMsIHZhbGlkTW9kZXNOYW1lcykpO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoZmluZFVucmVhY2hhYmxlUGF0dGVybnModmFsaWRUb2tlblR5cGVzKSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUmVnRXhwUGF0dGVybih0b2tlblR5cGVzKSB7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IHdpdGhSZWdFeHBQYXR0ZXJucyA9IGZpbHRlcih0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IGlzUmVnRXhwKGN1cnJUb2tUeXBlW1BBVFRFUk5dKSk7XG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmaW5kRW5kT2ZJbnB1dEFuY2hvcih3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGZpbmRTdGFydE9mSW5wdXRBbmNob3Iod2l0aFJlZ0V4cFBhdHRlcm5zKSk7XG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmaW5kVW5zdXBwb3J0ZWRGbGFncyh3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGZpbmREdXBsaWNhdGVQYXR0ZXJucyh3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGZpbmRFbXB0eU1hdGNoUmVnRXhwcyh3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRNaXNzaW5nUGF0dGVybnModG9rZW5UeXBlcykge1xuICAgIGNvbnN0IHRva2VuVHlwZXNXaXRoTWlzc2luZ1BhdHRlcm4gPSBmaWx0ZXIodG9rZW5UeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiAhaGFzKGN1cnJUeXBlLCBQQVRURVJOKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAodG9rZW5UeXBlc1dpdGhNaXNzaW5nUGF0dGVybiwgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gbWlzc2luZyBzdGF0aWMgJ1BBVFRFUk4nIHByb3BlcnR5XCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuTUlTU0lOR19QQVRURVJOLFxuICAgICAgICAgICAgdG9rZW5UeXBlczogW2N1cnJUeXBlXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZCA9IGRpZmZlcmVuY2UodG9rZW5UeXBlcywgdG9rZW5UeXBlc1dpdGhNaXNzaW5nUGF0dGVybik7XG4gICAgcmV0dXJuIHsgZXJyb3JzLCB2YWxpZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbnZhbGlkUGF0dGVybnModG9rZW5UeXBlcykge1xuICAgIGNvbnN0IHRva2VuVHlwZXNXaXRoSW52YWxpZFBhdHRlcm4gPSBmaWx0ZXIodG9rZW5UeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyVHlwZVtQQVRURVJOXTtcbiAgICAgICAgcmV0dXJuICghaXNSZWdFeHAocGF0dGVybikgJiZcbiAgICAgICAgICAgICFpc0Z1bmN0aW9uKHBhdHRlcm4pICYmXG4gICAgICAgICAgICAhaGFzKHBhdHRlcm4sIFwiZXhlY1wiKSAmJlxuICAgICAgICAgICAgIWlzU3RyaW5nKHBhdHRlcm4pKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAodG9rZW5UeXBlc1dpdGhJbnZhbGlkUGF0dGVybiwgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBjYW4gb25seSBiZSBhIFJlZ0V4cCwgYVwiICtcbiAgICAgICAgICAgICAgICBcIiBGdW5jdGlvbiBtYXRjaGluZyB0aGUge0N1c3RvbVBhdHRlcm5NYXRjaGVyRnVuY30gdHlwZSBvciBhbiBPYmplY3QgbWF0Y2hpbmcgdGhlIHtJQ3VzdG9tUGF0dGVybn0gaW50ZXJmYWNlLlwiLFxuICAgICAgICAgICAgdHlwZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLklOVkFMSURfUEFUVEVSTixcbiAgICAgICAgICAgIHRva2VuVHlwZXM6IFtjdXJyVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWQgPSBkaWZmZXJlbmNlKHRva2VuVHlwZXMsIHRva2VuVHlwZXNXaXRoSW52YWxpZFBhdHRlcm4pO1xuICAgIHJldHVybiB7IGVycm9ycywgdmFsaWQgfTtcbn1cbmNvbnN0IGVuZF9vZl9pbnB1dCA9IC9bXlxcXFxdWyRdLztcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW5kT2ZJbnB1dEFuY2hvcih0b2tlblR5cGVzKSB7XG4gICAgY2xhc3MgRW5kQW5jaG9yRmluZGVyIGV4dGVuZHMgQmFzZVJlZ0V4cFZpc2l0b3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmZvdW5kID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRFbmRBbmNob3Iobm9kZSkge1xuICAgICAgICAgICAgdGhpcy5mb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW52YWxpZFJlZ2V4ID0gZmlsdGVyKHRva2VuVHlwZXMsIChjdXJyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VyclR5cGUuUEFUVEVSTjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4cEFzdCA9IGdldFJlZ0V4cEFzdChwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEFuY2hvclZpc2l0b3IgPSBuZXcgRW5kQW5jaG9yRmluZGVyKCk7XG4gICAgICAgICAgICBlbmRBbmNob3JWaXNpdG9yLnZpc2l0KHJlZ2V4cEFzdCk7XG4gICAgICAgICAgICByZXR1cm4gZW5kQW5jaG9yVmlzaXRvci5mb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gb2xkIGJlaGF2aW9yIGluIGNhc2Ugb2YgcnVudGltZSBleGNlcHRpb25zIHdpdGggcmVnZXhwLXRvLWFzdC5cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY2Fubm90IGVuc3VyZSBhbiBlcnJvciBpbiByZWdleHAtdG8tYXN0Ki9cbiAgICAgICAgICAgIHJldHVybiBlbmRfb2ZfaW5wdXQudGVzdChwYXR0ZXJuLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAoaW52YWxpZFJlZ2V4LCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdFRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJ1xcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdFNlZSBjaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlNcIiArXG4gICAgICAgICAgICAgICAgXCJcXHRmb3IgZGV0YWlscy5cIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5FT0lfQU5DSE9SX0ZPVU5ELFxuICAgICAgICAgICAgdG9rZW5UeXBlczogW2N1cnJUeXBlXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbXB0eU1hdGNoUmVnRXhwcyh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgbWF0Y2hlc0VtcHR5U3RyaW5nID0gZmlsdGVyKHRva2VuVHlwZXMsIChjdXJyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VyclR5cGUuUEFUVEVSTjtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChcIlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAobWF0Y2hlc0VtcHR5U3RyaW5nLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVG9rZW4gVHlwZTogLT5cIiArXG4gICAgICAgICAgICAgICAgY3VyclR5cGUubmFtZSArXG4gICAgICAgICAgICAgICAgXCI8LSBzdGF0aWMgJ1BBVFRFUk4nIG11c3Qgbm90IG1hdGNoIGFuIGVtcHR5IHN0cmluZ1wiLFxuICAgICAgICAgICAgdHlwZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLkVNUFRZX01BVENIX1BBVFRFUk4sXG4gICAgICAgICAgICB0b2tlblR5cGVzOiBbY3VyclR5cGVdLFxuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5jb25zdCBzdGFydF9vZl9pbnB1dCA9IC9bXlxcXFxbXVtcXF5dfF5cXF4vO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTdGFydE9mSW5wdXRBbmNob3IodG9rZW5UeXBlcykge1xuICAgIGNsYXNzIFN0YXJ0QW5jaG9yRmluZGVyIGV4dGVuZHMgQmFzZVJlZ0V4cFZpc2l0b3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmZvdW5kID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRTdGFydEFuY2hvcihub2RlKSB7XG4gICAgICAgICAgICB0aGlzLmZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkUmVnZXggPSBmaWx0ZXIodG9rZW5UeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyVHlwZS5QQVRURVJOO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVnZXhwQXN0ID0gZ2V0UmVnRXhwQXN0KHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRBbmNob3JWaXNpdG9yID0gbmV3IFN0YXJ0QW5jaG9yRmluZGVyKCk7XG4gICAgICAgICAgICBzdGFydEFuY2hvclZpc2l0b3IudmlzaXQocmVnZXhwQXN0KTtcbiAgICAgICAgICAgIHJldHVybiBzdGFydEFuY2hvclZpc2l0b3IuZm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG9sZCBiZWhhdmlvciBpbiBjYXNlIG9mIHJ1bnRpbWUgZXhjZXB0aW9ucyB3aXRoIHJlZ2V4cC10by1hc3QuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGNhbm5vdCBlbnN1cmUgYW4gZXJyb3IgaW4gcmVnZXhwLXRvLWFzdCovXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRfb2ZfaW5wdXQudGVzdChwYXR0ZXJuLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAoaW52YWxpZFJlZ2V4LCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdFRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0U2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNBTkNIT1JTXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0Zm9yIGRldGFpbHMuXCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuU09JX0FOQ0hPUl9GT1VORCxcbiAgICAgICAgICAgIHRva2VuVHlwZXM6IFtjdXJyVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVW5zdXBwb3J0ZWRGbGFncyh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgaW52YWxpZEZsYWdzID0gZmlsdGVyKHRva2VuVHlwZXMsIChjdXJyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VyclR5cGVbUEFUVEVSTl07XG4gICAgICAgIHJldHVybiBwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwICYmIChwYXR0ZXJuLm11bHRpbGluZSB8fCBwYXR0ZXJuLmdsb2JhbCk7XG4gICAgfSk7XG4gICAgY29uc3QgZXJyb3JzID0gbWFwKGludmFsaWRGbGFncywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBtYXkgTk9UIGNvbnRhaW4gZ2xvYmFsKCdnJykgb3IgbXVsdGlsaW5lKCdtJylcIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5VTlNVUFBPUlRFRF9GTEFHU19GT1VORCxcbiAgICAgICAgICAgIHRva2VuVHlwZXM6IFtjdXJyVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbi8vIFRoaXMgY2FuIG9ubHkgdGVzdCBmb3IgaWRlbnRpY2FsIGR1cGxpY2F0ZSBSZWdFeHBzLCBub3Qgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgb25lcy5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRHVwbGljYXRlUGF0dGVybnModG9rZW5UeXBlcykge1xuICAgIGNvbnN0IGZvdW5kID0gW107XG4gICAgbGV0IGlkZW50aWNhbFBhdHRlcm5zID0gbWFwKHRva2VuVHlwZXMsIChvdXRlclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZHVjZSh0b2tlblR5cGVzLCAocmVzdWx0LCBpbm5lclR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmIChvdXRlclR5cGUuUEFUVEVSTi5zb3VyY2UgPT09IGlubmVyVHlwZS5QQVRURVJOLnNvdXJjZSAmJlxuICAgICAgICAgICAgICAgICFpbmNsdWRlcyhmb3VuZCwgaW5uZXJUeXBlKSAmJlxuICAgICAgICAgICAgICAgIGlubmVyVHlwZS5QQVRURVJOICE9PSBMZXhlci5OQSkge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgYXZvaWRzIGR1cGxpY2F0ZXMgaW4gdGhlIHJlc3VsdCwgZWFjaCBUb2tlbiBUeXBlIG1heSBvbmx5IGFwcGVhciBpbiBvbmUgXCJzZXRcIlxuICAgICAgICAgICAgICAgIC8vIGluIGVzc2VuY2Ugd2UgYXJlIGNyZWF0aW5nIEVxdWl2YWxlbmNlIGNsYXNzZXMgb24gZXF1YWxpdHkgcmVsYXRpb24uXG4gICAgICAgICAgICAgICAgZm91bmQucHVzaChpbm5lclR5cGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlubmVyVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9KTtcbiAgICBpZGVudGljYWxQYXR0ZXJucyA9IGNvbXBhY3QoaWRlbnRpY2FsUGF0dGVybnMpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm5zID0gZmlsdGVyKGlkZW50aWNhbFBhdHRlcm5zLCAoY3VycklkZW50aWNhbFNldCkgPT4ge1xuICAgICAgICByZXR1cm4gY3VycklkZW50aWNhbFNldC5sZW5ndGggPiAxO1xuICAgIH0pO1xuICAgIGNvbnN0IGVycm9ycyA9IG1hcChkdXBsaWNhdGVQYXR0ZXJucywgKHNldE9mSWRlbnRpY2FsKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuVHlwZU5hbWVzID0gbWFwKHNldE9mSWRlbnRpY2FsLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyVHlwZS5uYW1lO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZHVwUGF0dGVyblNyYyA9IGZpcnN0KHNldE9mSWRlbnRpY2FsKS5QQVRURVJOO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+JHtkdXBQYXR0ZXJuU3JjfTwtYCArXG4gICAgICAgICAgICAgICAgYGhhcyBiZWVuIHVzZWQgaW4gYWxsIG9mIHRoZSBmb2xsb3dpbmcgVG9rZW4gVHlwZXM6ICR7dG9rZW5UeXBlTmFtZXMuam9pbihcIiwgXCIpfSA8LWAsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5ELFxuICAgICAgICAgICAgdG9rZW5UeXBlczogc2V0T2ZJZGVudGljYWwsXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW52YWxpZEdyb3VwVHlwZSh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgaW52YWxpZFR5cGVzID0gZmlsdGVyKHRva2VuVHlwZXMsIChjbGF6eikgPT4ge1xuICAgICAgICBpZiAoIWhhcyhjbGF6eiwgXCJHUk9VUFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwID0gY2xhenouR1JPVVA7XG4gICAgICAgIHJldHVybiBncm91cCAhPT0gTGV4ZXIuU0tJUFBFRCAmJiBncm91cCAhPT0gTGV4ZXIuTkEgJiYgIWlzU3RyaW5nKGdyb3VwKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAoaW52YWxpZFR5cGVzLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVG9rZW4gVHlwZTogLT5cIiArXG4gICAgICAgICAgICAgICAgY3VyclR5cGUubmFtZSArXG4gICAgICAgICAgICAgICAgXCI8LSBzdGF0aWMgJ0dST1VQJyBjYW4gb25seSBiZSBMZXhlci5TS0lQUEVEL0xleGVyLk5BL0EgU3RyaW5nXCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuSU5WQUxJRF9HUk9VUF9UWVBFX0ZPVU5ELFxuICAgICAgICAgICAgdG9rZW5UeXBlczogW2N1cnJUeXBlXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRNb2Rlc1RoYXREb05vdEV4aXN0KHRva2VuVHlwZXMsIHZhbGlkTW9kZXMpIHtcbiAgICBjb25zdCBpbnZhbGlkTW9kZXMgPSBmaWx0ZXIodG9rZW5UeXBlcywgKGNsYXp6KSA9PiB7XG4gICAgICAgIHJldHVybiAoY2xhenouUFVTSF9NT0RFICE9PSB1bmRlZmluZWQgJiYgIWluY2x1ZGVzKHZhbGlkTW9kZXMsIGNsYXp6LlBVU0hfTU9ERSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGVycm9ycyA9IG1hcChpbnZhbGlkTW9kZXMsICh0b2tUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBUb2tlbiBUeXBlOiAtPiR7dG9rVHlwZS5uYW1lfTwtIHN0YXRpYyAnUFVTSF9NT0RFJyB2YWx1ZSBjYW5ub3QgcmVmZXIgdG8gYSBMZXhlciBNb2RlIC0+JHt0b2tUeXBlLlBVU0hfTU9ERX08LWAgK1xuICAgICAgICAgICAgYHdoaWNoIGRvZXMgbm90IGV4aXN0YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5QVVNIX01PREVfRE9FU19OT1RfRVhJU1QsXG4gICAgICAgICAgICB0b2tlblR5cGVzOiBbdG9rVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVW5yZWFjaGFibGVQYXR0ZXJucyh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgY29uc3QgY2FuQmVUZXN0ZWQgPSByZWR1Y2UodG9rZW5UeXBlcywgKHJlc3VsdCwgdG9rVHlwZSwgaWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0b2tUeXBlLlBBVFRFUk47XG4gICAgICAgIGlmIChwYXR0ZXJuID09PSBMZXhlci5OQSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIGZvciBhbGwgZm9ybXMgb2YgcmVnRXhwcyB3b3VsZCByZXF1aXJlXG4gICAgICAgIC8vIGRlZXBlciByZWdFeHAgYW5hbHlzaXMgY2FwYWJpbGl0aWVzXG4gICAgICAgIGlmIChpc1N0cmluZyhwYXR0ZXJuKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBzdHI6IHBhdHRlcm4sIGlkeCwgdG9rZW5UeXBlOiB0b2tUeXBlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pICYmIG5vTWV0YUNoYXIocGF0dGVybikpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgc3RyOiBwYXR0ZXJuLnNvdXJjZSwgaWR4LCB0b2tlblR5cGU6IHRva1R5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBbXSk7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAodG9rVHlwZSwgdGVzdElkeCkgPT4ge1xuICAgICAgICBmb3JFYWNoKGNhbkJlVGVzdGVkLCAoeyBzdHIsIGlkeCwgdG9rZW5UeXBlIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0SWR4IDwgaWR4ICYmIHRlc3RUb2tlblR5cGUoc3RyLCB0b2tUeXBlLlBBVFRFUk4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYFRva2VuOiAtPiR7dG9rZW5UeXBlLm5hbWV9PC0gY2FuIG5ldmVyIGJlIG1hdGNoZWQuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBCZWNhdXNlIGl0IGFwcGVhcnMgQUZURVIgdGhlIFRva2VuIFR5cGUgLT4ke3Rva1R5cGUubmFtZX08LWAgK1xuICAgICAgICAgICAgICAgICAgICBgaW4gdGhlIGxleGVyJ3MgZGVmaW5pdGlvbi5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYFNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5SRUFDSEFCTEVgO1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuVU5SRUFDSEFCTEVfUEFUVEVSTixcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5UeXBlczogW3Rva1R5cGUsIHRva2VuVHlwZV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5mdW5jdGlvbiB0ZXN0VG9rZW5UeXBlKHN0ciwgcGF0dGVybikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cEFycmF5ID0gcGF0dGVybi5leGVjKHN0cik7XG4gICAgICAgIHJldHVybiByZWdFeHBBcnJheSAhPT0gbnVsbCAmJiByZWdFeHBBcnJheS5pbmRleCA9PT0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbihwYXR0ZXJuKSkge1xuICAgICAgICAvLyBtYWludGFpbiB0aGUgQVBJIG9mIGN1c3RvbSBwYXR0ZXJuc1xuICAgICAgICByZXR1cm4gcGF0dGVybihzdHIsIDAsIFtdLCB7fSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhcyhwYXR0ZXJuLCBcImV4ZWNcIikpIHtcbiAgICAgICAgLy8gbWFpbnRhaW4gdGhlIEFQSSBvZiBjdXN0b20gcGF0dGVybnNcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uZXhlYyhzdHIsIDAsIFtdLCB7fSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuID09PSBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG5vTWV0YUNoYXIocmVnRXhwKSB7XG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9SZWdFeHBcbiAgICBjb25zdCBtZXRhQ2hhcnMgPSBbXG4gICAgICAgIFwiLlwiLFxuICAgICAgICBcIlxcXFxcIixcbiAgICAgICAgXCJbXCIsXG4gICAgICAgIFwiXVwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJeXCIsXG4gICAgICAgIFwiJFwiLFxuICAgICAgICBcIihcIixcbiAgICAgICAgXCIpXCIsXG4gICAgICAgIFwiP1wiLFxuICAgICAgICBcIipcIixcbiAgICAgICAgXCIrXCIsXG4gICAgICAgIFwie1wiLFxuICAgIF07XG4gICAgcmV0dXJuIChmaW5kKG1ldGFDaGFycywgKGNoYXIpID0+IHJlZ0V4cC5zb3VyY2UuaW5kZXhPZihjaGFyKSAhPT0gLTEpID09PSB1bmRlZmluZWQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0YXJ0T2ZJbnB1dChwYXR0ZXJuKSB7XG4gICAgY29uc3QgZmxhZ3MgPSBwYXR0ZXJuLmlnbm9yZUNhc2UgPyBcImlcIiA6IFwiXCI7XG4gICAgLy8gYWx3YXlzIHdyYXBwaW5nIGluIGEgbm9uZSBjYXB0dXJpbmcgZ3JvdXAgcHJlY2VkZWQgYnkgJ14nIHRvIG1ha2Ugc3VyZSBtYXRjaGluZyBjYW4gb25seSB3b3JrIG9uIHN0YXJ0IG9mIGlucHV0LlxuICAgIC8vIGR1cGxpY2F0ZS9yZWR1bmRhbnQgc3RhcnQgb2YgaW5wdXQgbWFya2VycyBoYXZlIG5vIG1lYW5pbmcgKC9eXl5eQS8gPT09IC9eQS8pXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke3BhdHRlcm4uc291cmNlfSlgLCBmbGFncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWRkU3RpY2t5RmxhZyhwYXR0ZXJuKSB7XG4gICAgY29uc3QgZmxhZ3MgPSBwYXR0ZXJuLmlnbm9yZUNhc2UgPyBcIml5XCIgOiBcInlcIjtcbiAgICAvLyBhbHdheXMgd3JhcHBpbmcgaW4gYSBub25lIGNhcHR1cmluZyBncm91cCBwcmVjZWRlZCBieSAnXicgdG8gbWFrZSBzdXJlIG1hdGNoaW5nIGNhbiBvbmx5IHdvcmsgb24gc3RhcnQgb2YgaW5wdXQuXG4gICAgLy8gZHVwbGljYXRlL3JlZHVuZGFudCBzdGFydCBvZiBpbnB1dCBtYXJrZXJzIGhhdmUgbm8gbWVhbmluZyAoL15eXl5BLyA9PT0gL15BLylcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHtwYXR0ZXJuLnNvdXJjZX1gLCBmbGFncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVJ1bnRpbWVDaGVja3MobGV4ZXJEZWZpbml0aW9uLCB0cmFja0xpbmVzLCBsaW5lVGVybWluYXRvckNoYXJhY3RlcnMpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAvLyBzb21lIHJ1biB0aW1lIGNoZWNrcyB0byBoZWxwIHRoZSBlbmQgdXNlcnMuXG4gICAgaWYgKCFoYXMobGV4ZXJEZWZpbml0aW9uLCBERUZBVUxUX01PREUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8XCIgK1xuICAgICAgICAgICAgICAgIERFRkFVTFRfTU9ERSArXG4gICAgICAgICAgICAgICAgXCI+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uXFxuXCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaGFzKGxleGVyRGVmaW5pdGlvbiwgTU9ERVMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8XCIgK1xuICAgICAgICAgICAgICAgIE1PREVTICtcbiAgICAgICAgICAgICAgICBcIj4gcHJvcGVydHkgaW4gaXRzIGRlZmluaXRpb25cXG5cIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaGFzKGxleGVyRGVmaW5pdGlvbiwgTU9ERVMpICYmXG4gICAgICAgIGhhcyhsZXhlckRlZmluaXRpb24sIERFRkFVTFRfTU9ERSkgJiZcbiAgICAgICAgIWhhcyhsZXhlckRlZmluaXRpb24ubW9kZXMsIGxleGVyRGVmaW5pdGlvbi5kZWZhdWx0TW9kZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgJHtERUZBVUxUX01PREV9OiA8JHtsZXhlckRlZmluaXRpb24uZGVmYXVsdE1vZGV9PmAgK1xuICAgICAgICAgICAgICAgIGB3aGljaCBkb2VzIG5vdCBleGlzdFxcbmAsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1QsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaGFzKGxleGVyRGVmaW5pdGlvbiwgTU9ERVMpKSB7XG4gICAgICAgIGZvckVhY2gobGV4ZXJEZWZpbml0aW9uLm1vZGVzLCAoY3Vyck1vZGVWYWx1ZSwgY3Vyck1vZGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBmb3JFYWNoKGN1cnJNb2RlVmFsdWUsIChjdXJyVG9rVHlwZSwgY3VycklkeCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChjdXJyVG9rVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEEgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHVzaW5nIGFuIHVuZGVmaW5lZCBUb2tlbiBUeXBlLiBNb2RlOmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA8JHtjdXJyTW9kZU5hbWV9PiBhdCBpbmRleDogPCR7Y3VycklkeH0+XFxuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhcyhjdXJyVG9rVHlwZSwgXCJMT05HRVJfQUxUXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdCA9IGlzQXJyYXkoY3VyclRva1R5cGUuTE9OR0VSX0FMVClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3VyclRva1R5cGUuTE9OR0VSX0FMVFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbY3VyclRva1R5cGUuTE9OR0VSX0FMVF07XG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2gobG9uZ2VyQWx0LCAoY3VyckxvbmdlckFsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjdXJyTG9uZ2VyQWx0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbmNsdWRlcyhjdXJyTW9kZVZhbHVlLCBjdXJyTG9uZ2VyQWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgbG9uZ2VyX2FsdCA8JHtjdXJyTG9uZ2VyQWx0Lm5hbWV9PiBvbiB0b2tlbiA8JHtjdXJyVG9rVHlwZS5uYW1lfT4gb3V0c2lkZSBvZiBtb2RlIDwke2N1cnJNb2RlTmFtZX0+XFxuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLk1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzKGxleGVyRGVmaW5pdGlvbiwgdHJhY2tMaW5lcywgbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSB7XG4gICAgY29uc3Qgd2FybmluZ3MgPSBbXTtcbiAgICBsZXQgaGFzQW55TGluZUJyZWFrID0gZmFsc2U7XG4gICAgY29uc3QgYWxsVG9rZW5UeXBlcyA9IGNvbXBhY3QoZmxhdHRlbih2YWx1ZXMobGV4ZXJEZWZpbml0aW9uLm1vZGVzKSkpO1xuICAgIGNvbnN0IGNvbmNyZXRlVG9rZW5UeXBlcyA9IHJlamVjdChhbGxUb2tlblR5cGVzLCAoY3VyclR5cGUpID0+IGN1cnJUeXBlW1BBVFRFUk5dID09PSBMZXhlci5OQSk7XG4gICAgY29uc3QgdGVybWluYXRvckNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhsaW5lVGVybWluYXRvckNoYXJhY3RlcnMpO1xuICAgIGlmICh0cmFja0xpbmVzKSB7XG4gICAgICAgIGZvckVhY2goY29uY3JldGVUb2tlblR5cGVzLCAodG9rVHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3Vycklzc3VlID0gY2hlY2tMaW5lQnJlYWtzSXNzdWVzKHRva1R5cGUsIHRlcm1pbmF0b3JDaGFyQ29kZXMpO1xuICAgICAgICAgICAgaWYgKGN1cnJJc3N1ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYnVpbGRMaW5lQnJlYWtJc3N1ZU1lc3NhZ2UodG9rVHlwZSwgY3Vycklzc3VlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB3YXJuaW5nRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogY3Vycklzc3VlLmlzc3VlLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblR5cGU6IHRva1R5cGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHdhcm5pbmdEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYXR0ZW1wdCB0byBzY2FuIGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRoZSBsaW5lX2JyZWFrcyBvcHRpb24uXG4gICAgICAgICAgICAgICAgaWYgKGhhcyh0b2tUeXBlLCBcIkxJTkVfQlJFQUtTXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tUeXBlLkxJTkVfQlJFQUtTID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNBbnlMaW5lQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTWF0Y2hDaGFyQ29kZSh0ZXJtaW5hdG9yQ2hhckNvZGVzLCB0b2tUeXBlLlBBVFRFUk4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNBbnlMaW5lQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRyYWNrTGluZXMgJiYgIWhhc0FueUxpbmVCcmVhaykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiV2FybmluZzogTm8gTElORV9CUkVBS1MgRm91bmQuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0VGhpcyBMZXhlciBoYXMgYmVlbiBkZWZpbmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbixcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXHRCdXQgbm9uZSBvZiB0aGUgVG9rZW4gVHlwZXMgY2FuIGJlIGlkZW50aWZpZWQgYXMgbWF0Y2hpbmcgYSBsaW5lIHRlcm1pbmF0b3IuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0U2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNMSU5FX0JSRUFLUyBcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXHRmb3IgZGV0YWlscy5cIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5OT19MSU5FX0JSRUFLU19GTEFHUyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3YXJuaW5ncztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUVtcHR5R3JvdXBzKGVtcHR5R3JvdXBzKSB7XG4gICAgY29uc3QgY2xvbmVkUmVzdWx0ID0ge307XG4gICAgY29uc3QgZ3JvdXBLZXlzID0ga2V5cyhlbXB0eUdyb3Vwcyk7XG4gICAgZm9yRWFjaChncm91cEtleXMsIChjdXJyS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJHcm91cFZhbHVlID0gZW1wdHlHcm91cHNbY3VycktleV07XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpc0FycmF5KGN1cnJHcm91cFZhbHVlKSkge1xuICAgICAgICAgICAgY2xvbmVkUmVzdWx0W2N1cnJLZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lZFJlc3VsdDtcbn1cbi8vIFRPRE86IHJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW9uXG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21QYXR0ZXJuKHRva2VuVHlwZSkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0b2tlblR5cGUuUEFUVEVSTjtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocGF0dGVybikpIHtcbiAgICAgICAgLy8gQ3VzdG9tUGF0dGVybk1hdGNoZXJGdW5jIC0gY3VzdG9tIHBhdHRlcm5zIGRvIG5vdCByZXF1aXJlIGFueSB0cmFuc2Zvcm1hdGlvbnMsIG9ubHkgd3JhcHBpbmcgaW4gYSBSZWdFeHAgTGlrZSBvYmplY3RcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhcyhwYXR0ZXJuLCBcImV4ZWNcIikpIHtcbiAgICAgICAgLy8gSUN1c3RvbVBhdHRlcm5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2hvcnRQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICBpZiAoaXNTdHJpbmcocGF0dGVybikgJiYgcGF0dGVybi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uY2hhckNvZGVBdCgwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIEZhc3RlciB0aGFuIHVzaW5nIGEgUmVnRXhwIGZvciBkZWZhdWx0IG5ld2xpbmUgZGV0ZWN0aW9uIGR1cmluZyBsZXhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBMaW5lVGVybWluYXRvck9wdGltaXplZFRlc3RlciA9IHtcbiAgICAvLyBpbXBsZW1lbnRzIC9cXG58XFxyXFxuPy9nLnRlc3RcbiAgICB0ZXN0OiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBjb25zdCBsZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGFzdEluZGV4OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGkgKyAxKSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBpICsgMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGxhc3RJbmRleDogMCxcbn07XG5mdW5jdGlvbiBjaGVja0xpbmVCcmVha3NJc3N1ZXModG9rVHlwZSwgbGluZVRlcm1pbmF0b3JDaGFyQ29kZXMpIHtcbiAgICBpZiAoaGFzKHRva1R5cGUsIFwiTElORV9CUkVBS1NcIikpIHtcbiAgICAgICAgLy8gaWYgdGhlIHVzZXIgZXhwbGljaXRseSBkZWNsYXJlZCB0aGUgbGluZV9icmVha3Mgb3B0aW9uIHdlIHdpbGwgcmVzcGVjdCB0aGVpciBjaG9pY2VcbiAgICAgICAgLy8gYW5kIGFzc3VtZSBpdCBpcyBjb3JyZWN0LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXNSZWdFeHAodG9rVHlwZS5QQVRURVJOKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiB3aHkgaXMgdGhlIGNhc3Rpbmcgc3VkZGVubHkgbmVlZGVkP1xuICAgICAgICAgICAgICAgIGNhbk1hdGNoQ2hhckNvZGUobGluZVRlcm1pbmF0b3JDaGFyQ29kZXMsIHRva1R5cGUuUEFUVEVSTik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gdG8gdGVzdCB0aGlzIHdlIHdvdWxkIGhhdmUgdG8gbW9jayA8Y2FuTWF0Y2hDaGFyQ29kZT4gdG8gdGhyb3cgYW4gZXJyb3IgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLklERU5USUZZX1RFUk1JTkFUT1IsXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZzogZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodG9rVHlwZS5QQVRURVJOKSkge1xuICAgICAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwgcGF0dGVybnMgY2FuIGFsd2F5cyBiZSBhbmFseXplZCB0byBkZXRlY3QgbGluZSB0ZXJtaW5hdG9yIHVzYWdlXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDdXN0b21QYXR0ZXJuKHRva1R5cGUpKSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gdG9rZW4gdHlwZXNcbiAgICAgICAgICAgIHJldHVybiB7IGlzc3VlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuQ1VTVE9NX0xJTkVfQlJFQUsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMaW5lQnJlYWtJc3N1ZU1lc3NhZ2UodG9rVHlwZSwgZGV0YWlscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGRldGFpbHMuaXNzdWUgPT09IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5JREVOVElGWV9URVJNSU5BVE9SKSB7XG4gICAgICAgIHJldHVybiAoXCJXYXJuaW5nOiB1bmFibGUgdG8gaWRlbnRpZnkgbGluZSB0ZXJtaW5hdG9yIHVzYWdlIGluIHBhdHRlcm4uXFxuXCIgK1xuICAgICAgICAgICAgYFxcdFRoZSBwcm9ibGVtIGlzIGluIHRoZSA8JHt0b2tUeXBlLm5hbWV9PiBUb2tlbiBUeXBlXFxuYCArXG4gICAgICAgICAgICBgXFx0IFJvb3QgY2F1c2U6ICR7ZGV0YWlscy5lcnJNc2d9LlxcbmAgK1xuICAgICAgICAgICAgXCJcXHRGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNJREVOVElGWV9URVJNSU5BVE9SXCIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZXRhaWxzLmlzc3VlID09PSBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuQ1VTVE9NX0xJTkVfQlJFQUspIHtcbiAgICAgICAgcmV0dXJuIChcIldhcm5pbmc6IEEgQ3VzdG9tIFRva2VuIFBhdHRlcm4gc2hvdWxkIHNwZWNpZnkgdGhlIDxsaW5lX2JyZWFrcz4gb3B0aW9uLlxcblwiICtcbiAgICAgICAgICAgIGBcXHRUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dG9rVHlwZS5uYW1lfT4gVG9rZW4gVHlwZVxcbmAgK1xuICAgICAgICAgICAgXCJcXHRGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fTElORV9CUkVBS1wiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hhckNvZGVzKGNoYXJzT3JDb2Rlcykge1xuICAgIGNvbnN0IGNoYXJDb2RlcyA9IG1hcChjaGFyc09yQ29kZXMsIChudW1PclN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaXNTdHJpbmcobnVtT3JTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtT3JTdHJpbmcuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1PclN0cmluZztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFyQ29kZXM7XG59XG5mdW5jdGlvbiBhZGRUb01hcE9mQXJyYXlzKG1hcCwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChtYXBba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcFtrZXldID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG1hcFtrZXldLnB1c2godmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBtaW5PcHRpbWl6YXRpb25WYWwgPSAyNTY7XG4vKipcbiAqIFdlIGFyZSBtYXBwaW5nIGNoYXJDb2RlIGFib3ZlIEFTQ0kgKDI1NikgaW50byBidWNrZXRzIGVhY2ggaW4gdGhlIHNpemUgb2YgMjU2LlxuICogVGhpcyBpcyBiZWNhdXNlIEFTQ0kgYXJlIHRoZSBtb3N0IGNvbW1vbiBzdGFydCBjaGFycyBzbyBlYWNoIG9uZSBvZiB0aG9zZSB3aWxsIGdldCBpdHMgb3duXG4gKiBwb3NzaWJsZSB0b2tlbiBjb25maWdzIHZlY3Rvci5cbiAqXG4gKiBUb2tlbnMgc3RhcnRpbmcgd2l0aCBjaGFyQ29kZXMgXCJhYm92ZVwiIEFTQ0kgYXJlIHVuY29tbW9uLCBzbyB3ZSBjYW4gXCJhZmZvcmRcIlxuICogdG8gcGxhY2UgdGhlc2UgaW50byBidWNrZXRzIG9mIHBvc3NpYmxlIHRva2VuIGNvbmZpZ3MsIFdoYXQgd2UgZ2FpbiBmcm9tXG4gKiB0aGlzIGlzIGF2b2lkaW5nIHRoZSBjYXNlIG9mIGNyZWF0aW5nIGFuIG9wdGltaXphdGlvbiAnY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZydcbiAqIHdoaWNoIHdvdWxkIGNvbnRhaW4gMTAsMDAwKyBhcnJheXMgb2Ygc21hbGwgc2l6ZSAoZS5nIHVuaWNvZGUgSWRlbnRpZmllcnMgc2NlbmFyaW8pLlxuICogT3VyICdjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnJyBtYXggc2l6ZSB3aWxsIG5vdyBiZTpcbiAqIDI1NiArICgyXjE2IC8gMl44KSAtIDEgPT09IDUxMVxuICpcbiAqIG5vdGUgdGhlIGhhY2sgZm9yIGZhc3QgZGl2aXNpb24gaW50ZWdlciBwYXJ0IGV4dHJhY3Rpb25cbiAqIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyMjg1MjhcbiAqL1xubGV0IGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXAgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgoY2hhckNvZGUpIHtcbiAgICByZXR1cm4gY2hhckNvZGUgPCBtaW5PcHRpbWl6YXRpb25WYWxcbiAgICAgICAgPyBjaGFyQ29kZVxuICAgICAgICA6IGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXBbY2hhckNvZGVdO1xufVxuLyoqXG4gKiBUaGlzIGlzIGEgY29tcHJvbWlzZSBiZXR3ZWVuIGNvbGQgc3RhcnQgLyBob3QgcnVubmluZyBwZXJmb3JtYW5jZVxuICogQ3JlYXRpbmcgdGhpcyBhcnJheSB0YWtlcyB+M21zIG9uIGEgbW9kZXJuIG1hY2hpbmUsXG4gKiBCdXQgaWYgd2UgcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gYXQgcnVudGltZSBhcyBuZWVkZWQgdGhlIENTUyBMZXhlciBiZW5jaG1hcmtcbiAqIHBlcmZvcm1hbmNlIGRlZ3JhZGVzIGJ5IH4xMCVcbiAqXG4gKiBUT0RPOiBQZXJoYXBzIGl0IHNob3VsZCBiZSBsYXp5IGluaXRpYWxpemVkIG9ubHkgaWYgYSBjaGFyQ29kZSA+IDI1NSBpcyB1c2VkLlxuICovXG5mdW5jdGlvbiBpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwKCkge1xuICAgIGlmIChpc0VtcHR5KGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXApKSB7XG4gICAgICAgIGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXAgPSBuZXcgQXJyYXkoNjU1MzYpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY1NTM2OyBpKyspIHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXBbaV0gPSBpID4gMjU1ID8gMjU1ICsgfn4oaSAvIDI1NSkgOiBpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBjbG9uZSwgY29tcGFjdCwgZGlmZmVyZW5jZSwgZmxhdHRlbiwgZm9yRWFjaCwgaGFzLCBpbmNsdWRlcywgaXNBcnJheSwgaXNFbXB0eSwgbWFwLCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmV4cG9ydCBmdW5jdGlvbiB0b2tlblN0cnVjdHVyZWRNYXRjaGVyKHRva0luc3RhbmNlLCB0b2tDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IHRva0luc3RhbmNlLnRva2VuVHlwZUlkeDtcbiAgICBpZiAoaW5zdGFuY2VUeXBlID09PSB0b2tDb25zdHJ1Y3Rvci50b2tlblR5cGVJZHgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHRva0NvbnN0cnVjdG9yLmlzUGFyZW50ID09PSB0cnVlICYmXG4gICAgICAgICAgICB0b2tDb25zdHJ1Y3Rvci5jYXRlZ29yeU1hdGNoZXNNYXBbaW5zdGFuY2VUeXBlXSA9PT0gdHJ1ZSk7XG4gICAgfVxufVxuLy8gT3B0aW1pemVkIHRva2VuTWF0Y2hlciBpbiBjYXNlIG91ciBncmFtbWFyIGRvZXMgbm90IHVzZSB0b2tlbiBjYXRlZ29yaWVzXG4vLyBCZWluZyBzbyB0aW55IGl0IGlzIG11Y2ggbW9yZSBsaWtlbHkgdG8gYmUgaW4tbGluZWQgYW5kIHRoaXMgYXZvaWQgdGhlIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWRcbmV4cG9ydCBmdW5jdGlvbiB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzKHRva2VuLCB0b2tUeXBlKSB7XG4gICAgcmV0dXJuIHRva2VuLnRva2VuVHlwZUlkeCA9PT0gdG9rVHlwZS50b2tlblR5cGVJZHg7XG59XG5leHBvcnQgbGV0IHRva2VuU2hvcnROYW1lSWR4ID0gMTtcbmV4cG9ydCBjb25zdCB0b2tlbklkeFRvQ2xhc3MgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50VG9rZW5UeXBlcyh0b2tlblR5cGVzKSB7XG4gICAgLy8gY29sbGVjdCB0aGUgcGFyZW50IFRva2VuIFR5cGVzIGFzIHdlbGwuXG4gICAgY29uc3QgdG9rZW5UeXBlc0FuZFBhcmVudHMgPSBleHBhbmRDYXRlZ29yaWVzKHRva2VuVHlwZXMpO1xuICAgIC8vIGFkZCByZXF1aXJlZCB0b2tlblR5cGUgYW5kIGNhdGVnb3J5TWF0Y2hlcyBwcm9wZXJ0aWVzXG4gICAgYXNzaWduVG9rZW5EZWZhdWx0UHJvcHModG9rZW5UeXBlc0FuZFBhcmVudHMpO1xuICAgIC8vIGZpbGwgdXAgdGhlIGNhdGVnb3J5TWF0Y2hlc1xuICAgIGFzc2lnbkNhdGVnb3JpZXNNYXBQcm9wKHRva2VuVHlwZXNBbmRQYXJlbnRzKTtcbiAgICBhc3NpZ25DYXRlZ29yaWVzVG9rZW5zUHJvcCh0b2tlblR5cGVzQW5kUGFyZW50cyk7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzQW5kUGFyZW50cywgKHRva1R5cGUpID0+IHtcbiAgICAgICAgdG9rVHlwZS5pc1BhcmVudCA9IHRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzLmxlbmd0aCA+IDA7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQ2F0ZWdvcmllcyh0b2tlblR5cGVzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNsb25lKHRva2VuVHlwZXMpO1xuICAgIGxldCBjYXRlZ29yaWVzID0gdG9rZW5UeXBlcztcbiAgICBsZXQgc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB3aGlsZSAoc2VhcmNoaW5nKSB7XG4gICAgICAgIGNhdGVnb3JpZXMgPSBjb21wYWN0KGZsYXR0ZW4obWFwKGNhdGVnb3JpZXMsIChjdXJyVG9rVHlwZSkgPT4gY3VyclRva1R5cGUuQ0FURUdPUklFUykpKTtcbiAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcmllcyA9IGRpZmZlcmVuY2UoY2F0ZWdvcmllcywgcmVzdWx0KTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChuZXdDYXRlZ29yaWVzKTtcbiAgICAgICAgaWYgKGlzRW1wdHkobmV3Q2F0ZWdvcmllcykpIHtcbiAgICAgICAgICAgIHNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2F0ZWdvcmllcyA9IG5ld0NhdGVnb3JpZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Ub2tlbkRlZmF1bHRQcm9wcyh0b2tlblR5cGVzKSB7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IHtcbiAgICAgICAgaWYgKCFoYXNTaG9ydEtleVByb3BlcnR5KGN1cnJUb2tUeXBlKSkge1xuICAgICAgICAgICAgdG9rZW5JZHhUb0NsYXNzW3Rva2VuU2hvcnROYW1lSWR4XSA9IGN1cnJUb2tUeXBlO1xuICAgICAgICAgICAgY3VyclRva1R5cGUudG9rZW5UeXBlSWR4ID0gdG9rZW5TaG9ydE5hbWVJZHgrKztcbiAgICAgICAgfVxuICAgICAgICAvLyBDQVRFR09SSUVTPyA6IFRva2VuVHlwZSB8IFRva2VuVHlwZVtdXG4gICAgICAgIGlmIChoYXNDYXRlZ29yaWVzUHJvcGVydHkoY3VyclRva1R5cGUpICYmXG4gICAgICAgICAgICAhaXNBcnJheShjdXJyVG9rVHlwZS5DQVRFR09SSUVTKVxuICAgICAgICAvLyAmJlxuICAgICAgICAvLyAhaXNVbmRlZmluZWQoY3VyclRva1R5cGUuQ0FURUdPUklFUy5QQVRURVJOKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGN1cnJUb2tUeXBlLkNBVEVHT1JJRVMgPSBbY3VyclRva1R5cGUuQ0FURUdPUklFU107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNDYXRlZ29yaWVzUHJvcGVydHkoY3VyclRva1R5cGUpKSB7XG4gICAgICAgICAgICBjdXJyVG9rVHlwZS5DQVRFR09SSUVTID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc1Byb3BlcnR5KGN1cnJUb2tUeXBlKSkge1xuICAgICAgICAgICAgY3VyclRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc01hcFByb3BlcnR5KGN1cnJUb2tUeXBlKSkge1xuICAgICAgICAgICAgY3VyclRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25DYXRlZ29yaWVzVG9rZW5zUHJvcCh0b2tlblR5cGVzKSB7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IHtcbiAgICAgICAgLy8gYXZvaWQgZHVwbGljYXRpb25zXG4gICAgICAgIGN1cnJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKGN1cnJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlc01hcCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICBjdXJyVG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMucHVzaCh0b2tlbklkeFRvQ2xhc3Nba2V5XS50b2tlblR5cGVJZHgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25DYXRlZ29yaWVzTWFwUHJvcCh0b2tlblR5cGVzKSB7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IHtcbiAgICAgICAgc2luZ2xlQXNzaWduQ2F0ZWdvcmllc1Rva3NNYXAoW10sIGN1cnJUb2tUeXBlKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVBc3NpZ25DYXRlZ29yaWVzVG9rc01hcChwYXRoLCBuZXh0Tm9kZSkge1xuICAgIGZvckVhY2gocGF0aCwgKHBhdGhOb2RlKSA9PiB7XG4gICAgICAgIG5leHROb2RlLmNhdGVnb3J5TWF0Y2hlc01hcFtwYXRoTm9kZS50b2tlblR5cGVJZHhdID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBmb3JFYWNoKG5leHROb2RlLkNBVEVHT1JJRVMsIChuZXh0Q2F0ZWdvcnkpID0+IHtcbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IHBhdGguY29uY2F0KG5leHROb2RlKTtcbiAgICAgICAgLy8gYXZvaWRzIGluZmluaXRlIGxvb3BzIGR1ZSB0byBjeWNsaWMgY2F0ZWdvcmllcy5cbiAgICAgICAgaWYgKCFpbmNsdWRlcyhuZXdQYXRoLCBuZXh0Q2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICBzaW5nbGVBc3NpZ25DYXRlZ29yaWVzVG9rc01hcChuZXdQYXRoLCBuZXh0Q2F0ZWdvcnkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzU2hvcnRLZXlQcm9wZXJ0eSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIGhhcyh0b2tUeXBlLCBcInRva2VuVHlwZUlkeFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNDYXRlZ29yaWVzUHJvcGVydHkodG9rVHlwZSkge1xuICAgIHJldHVybiBoYXModG9rVHlwZSwgXCJDQVRFR09SSUVTXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzUHJvcGVydHkodG9rVHlwZSkge1xuICAgIHJldHVybiBoYXModG9rVHlwZSwgXCJjYXRlZ29yeU1hdGNoZXNcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzRXh0ZW5kaW5nVG9rZW5zVHlwZXNNYXBQcm9wZXJ0eSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIGhhcyh0b2tUeXBlLCBcImNhdGVnb3J5TWF0Y2hlc01hcFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuVHlwZSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIGhhcyh0b2tUeXBlLCBcInRva2VuVHlwZUlkeFwiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2Vucy5qcy5tYXAiLAogICAgImV4cG9ydCBjb25zdCBkZWZhdWx0TGV4ZXJFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKHRva2VuKSB7XG4gICAgICAgIHJldHVybiBgVW5hYmxlIHRvIHBvcCBMZXhlciBNb2RlIGFmdGVyIGVuY291bnRlcmluZyBUb2tlbiAtPiR7dG9rZW4uaW1hZ2V9PC0gVGhlIE1vZGUgU3RhY2sgaXMgZW1wdHlgO1xuICAgIH0sXG4gICAgYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UoZnVsbFRleHQsIHN0YXJ0T2Zmc2V0LCBsZW5ndGgsIGxpbmUsIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gKGB1bmV4cGVjdGVkIGNoYXJhY3RlcjogLT4ke2Z1bGxUZXh0LmNoYXJBdChzdGFydE9mZnNldCl9PC0gYXQgb2Zmc2V0OiAke3N0YXJ0T2Zmc2V0fSxgICsgYCBza2lwcGVkICR7bGVuZ3RofSBjaGFyYWN0ZXJzLmApO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXJfZXJyb3JzX3B1YmxpYy5qcy5tYXAiLAogICAgImltcG9ydCB7IGFuYWx5emVUb2tlblR5cGVzLCBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgsIGNsb25lRW1wdHlHcm91cHMsIERFRkFVTFRfTU9ERSwgTGluZVRlcm1pbmF0b3JPcHRpbWl6ZWRUZXN0ZXIsIHBlcmZvcm1SdW50aW1lQ2hlY2tzLCBwZXJmb3JtV2FybmluZ1J1bnRpbWVDaGVja3MsIFNVUFBPUlRfU1RJQ0tZLCB2YWxpZGF0ZVBhdHRlcm5zLCB9IGZyb20gXCIuL2xleGVyLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lLCBmb3JFYWNoLCBpZGVudGl0eSwgaXNBcnJheSwgaXNFbXB0eSwgaXNVbmRlZmluZWQsIGtleXMsIGxhc3QsIG1hcCwgbm9vcCwgcmVkdWNlLCByZWplY3QsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJJTlRfV0FSTklORywgdGltZXIsIHRvRmFzdFByb3BlcnRpZXMgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGF1Z21lbnRUb2tlblR5cGVzIH0gZnJvbSBcIi4vdG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0TGV4ZXJFcnJvclByb3ZpZGVyIH0gZnJvbSBcIi4vbGV4ZXJfZXJyb3JzX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSB9IGZyb20gXCIuL3JlZ19leHBfcGFyc2VyLmpzXCI7XG5leHBvcnQgdmFyIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZTtcbihmdW5jdGlvbiAoTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlKSB7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk1JU1NJTkdfUEFUVEVSTlwiXSA9IDBdID0gXCJNSVNTSU5HX1BBVFRFUk5cIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiSU5WQUxJRF9QQVRURVJOXCJdID0gMV0gPSBcIklOVkFMSURfUEFUVEVSTlwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJFT0lfQU5DSE9SX0ZPVU5EXCJdID0gMl0gPSBcIkVPSV9BTkNIT1JfRk9VTkRcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiVU5TVVBQT1JURURfRkxBR1NfRk9VTkRcIl0gPSAzXSA9IFwiVU5TVVBQT1JURURfRkxBR1NfRk9VTkRcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EXCJdID0gNF0gPSBcIkRVUExJQ0FURV9QQVRURVJOU19GT1VORFwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJJTlZBTElEX0dST1VQX1RZUEVfRk9VTkRcIl0gPSA1XSA9IFwiSU5WQUxJRF9HUk9VUF9UWVBFX0ZPVU5EXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVFwiXSA9IDZdID0gXCJQVVNIX01PREVfRE9FU19OT1RfRVhJU1RcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERVwiXSA9IDddID0gXCJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWVwiXSA9IDhdID0gXCJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFlcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1RcIl0gPSA5XSA9IFwiTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1RcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORURcIl0gPSAxMF0gPSBcIkxFWEVSX0RFRklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIlNPSV9BTkNIT1JfRk9VTkRcIl0gPSAxMV0gPSBcIlNPSV9BTkNIT1JfRk9VTkRcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiRU1QVFlfTUFUQ0hfUEFUVEVSTlwiXSA9IDEyXSA9IFwiRU1QVFlfTUFUQ0hfUEFUVEVSTlwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJOT19MSU5FX0JSRUFLU19GTEFHU1wiXSA9IDEzXSA9IFwiTk9fTElORV9CUkVBS1NfRkxBR1NcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiVU5SRUFDSEFCTEVfUEFUVEVSTlwiXSA9IDE0XSA9IFwiVU5SRUFDSEFCTEVfUEFUVEVSTlwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJJREVOVElGWV9URVJNSU5BVE9SXCJdID0gMTVdID0gXCJJREVOVElGWV9URVJNSU5BVE9SXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIkNVU1RPTV9MSU5FX0JSRUFLXCJdID0gMTZdID0gXCJDVVNUT01fTElORV9CUkVBS1wiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJNVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERVwiXSA9IDE3XSA9IFwiTVVMVElfTU9ERV9MRVhFUl9MT05HRVJfQUxUX05PVF9JTl9DVVJSRU5UX01PREVcIjtcbn0pKExleGVyRGVmaW5pdGlvbkVycm9yVHlwZSB8fCAoTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlID0ge30pKTtcbmNvbnN0IERFRkFVTFRfTEVYRVJfQ09ORklHID0ge1xuICAgIGRlZmVyRGVmaW5pdGlvbkVycm9yc0hhbmRsaW5nOiBmYWxzZSxcbiAgICBwb3NpdGlvblRyYWNraW5nOiBcImZ1bGxcIixcbiAgICBsaW5lVGVybWluYXRvcnNQYXR0ZXJuOiAvXFxufFxcclxcbj8vZyxcbiAgICBsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6IFtcIlxcblwiLCBcIlxcclwiXSxcbiAgICBlbnN1cmVPcHRpbWl6YXRpb25zOiBmYWxzZSxcbiAgICBzYWZlTW9kZTogZmFsc2UsXG4gICAgZXJyb3JNZXNzYWdlUHJvdmlkZXI6IGRlZmF1bHRMZXhlckVycm9yUHJvdmlkZXIsXG4gICAgdHJhY2VJbml0UGVyZjogZmFsc2UsXG4gICAgc2tpcFZhbGlkYXRpb25zOiBmYWxzZSxcbiAgICByZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG59O1xuT2JqZWN0LmZyZWV6ZShERUZBVUxUX0xFWEVSX0NPTkZJRyk7XG5leHBvcnQgY2xhc3MgTGV4ZXIge1xuICAgIGNvbnN0cnVjdG9yKGxleGVyRGVmaW5pdGlvbiwgY29uZmlnID0gREVGQVVMVF9MRVhFUl9DT05GSUcpIHtcbiAgICAgICAgdGhpcy5sZXhlckRlZmluaXRpb24gPSBsZXhlckRlZmluaXRpb247XG4gICAgICAgIHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzID0gW107XG4gICAgICAgIHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZyA9IFtdO1xuICAgICAgICB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZyA9IHt9O1xuICAgICAgICB0aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmVtcHR5R3JvdXBzID0ge307XG4gICAgICAgIHRoaXMudHJhY2tTdGFydExpbmVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmFja0VuZExpbmVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oYXNDdXN0b20gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWQgPSB7fTtcbiAgICAgICAgLy8gRHVwbGljYXRlZCBmcm9tIHRoZSBwYXJzZXIncyBwZXJmIHRyYWNlIHRyYWl0IHRvIGFsbG93IGZ1dHVyZSBleHRyYWN0aW9uXG4gICAgICAgIC8vIG9mIHRoZSBsZXhlciB0byBhIHNlcGFyYXRlIHBhY2thZ2UuXG4gICAgICAgIHRoaXMuVFJBQ0VfSU5JVCA9IChwaGFzZURlc2MsIHBoYXNlSW1wbCkgPT4ge1xuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBvcHRpbWl6ZSB0aGlzIHVzaW5nIE5PT1AgcGF0dGVybiBiZWNhdXNlXG4gICAgICAgICAgICAvLyBJdCBpcyBub3QgY2FsbGVkIGluIGEgaG90IHNwb3QuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlSW5pdFBlcmYgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlSW5pdEluZGVudCsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGVudCA9IG5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCArIDEpLmpvaW4oXCJcXHRcIik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2VJbml0SW5kZW50IDwgdGhpcy50cmFjZUluaXRNYXhJZGVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpbmRlbnR9LS0+IDwke3BoYXNlRGVzY30+YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGltZSwgdmFsdWUgfSA9IHRpbWVyKHBoYXNlSW1wbCk7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBEaWZmaWN1bHQgdG8gcmVwcm9kdWNlIHNwZWNpZmljIHBlcmZvcm1hbmNlIGJlaGF2aW9yICg+MTBtcykgaW4gdGVzdHMgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFjZU1ldGhvZCA9IHRpbWUgPiAxMCA/IGNvbnNvbGUud2FybiA6IGNvbnNvbGUubG9nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlSW5pdEluZGVudCA8IHRoaXMudHJhY2VJbml0TWF4SWRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VNZXRob2QoYCR7aW5kZW50fTwtLSA8JHtwaGFzZURlc2N9PiB0aW1lOiAke3RpbWV9bXNgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZUluaXRJbmRlbnQtLTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGhhc2VJbXBsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMZXhlciBjb25zdHJ1Y3RvciBpcyBub3cgYW4gSUxleGVyQ29uZmlnIE9iamVjdC5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJhIGJvb2xlYW4gMm5kIGFyZ3VtZW50IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG9kbzogZGVmYXVsdHMgZnVuYz9cbiAgICAgICAgdGhpcy5jb25maWcgPSBhc3NpZ24oe30sIERFRkFVTFRfTEVYRVJfQ09ORklHLCBjb25maWcpO1xuICAgICAgICBjb25zdCB0cmFjZUluaXRWYWwgPSB0aGlzLmNvbmZpZy50cmFjZUluaXRQZXJmO1xuICAgICAgICBpZiAodHJhY2VJbml0VmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdE1heElkZW50ID0gSW5maW5pdHk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdFBlcmYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0cmFjZUluaXRWYWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0TWF4SWRlbnQgPSB0cmFjZUluaXRWYWw7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdFBlcmYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2VJbml0SW5kZW50ID0gLTE7XG4gICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkxleGVyIENvbnN0cnVjdG9yXCIsICgpID0+IHtcbiAgICAgICAgICAgIGxldCBhY3R1YWxEZWZpbml0aW9uO1xuICAgICAgICAgICAgbGV0IGhhc09ubHlTaW5nbGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkxleGVyIENvbmZpZyBoYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4gPT09XG4gICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTEVYRVJfQ09ORklHLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW1pemVkIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIGZvciB0aGUgZGVmYXVsdHMgZGVmaW5pdGlvbiBvZiBsaW5lVGVybWluYXRvcnNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JzUGF0dGVybiA9IExpbmVUZXJtaW5hdG9yT3B0aW1pemVkVGVzdGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTEVYRVJfQ09ORklHLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFcnJvcjogTWlzc2luZyA8bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPiBwcm9wZXJ0eSBvbiB0aGUgTGV4ZXIgY29uZmlnLlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdEZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI01JU1NJTkdfTElORV9URVJNX0NIQVJTXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2FmZU1vZGUgJiYgY29uZmlnLmVuc3VyZU9wdGltaXphdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1wic2FmZU1vZGVcIiBhbmQgXCJlbnN1cmVPcHRpbWl6YXRpb25zXCIgZmxhZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmFja1N0YXJ0TGluZXMgPSAvZnVsbHxvbmx5U3RhcnQvaS50ZXN0KHRoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2tFbmRMaW5lcyA9IC9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKTtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IFNpbmdsZU1vZGVMZXhlckRlZmluaXRpb24gaW50byBhIElNdWx0aU1vZGVMZXhlckRlZmluaXRpb24uXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkobGV4ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBhY3R1YWxEZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXM6IHsgZGVmYXVsdE1vZGU6IGNsb25lKGxleGVyRGVmaW5pdGlvbikgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNb2RlOiBERUZBVUxUX01PREUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBubyBjb252ZXJzaW9uIG5lZWRlZCwgaW5wdXQgc2hvdWxkIGFscmVhZHkgYmUgYSBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgICAgIGhhc09ubHlTaW5nbGVNb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbERlZmluaXRpb24gPSBjbG9uZShsZXhlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJwZXJmb3JtUnVudGltZUNoZWNrc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzID0gdGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMuY29uY2F0KHBlcmZvcm1SdW50aW1lQ2hlY2tzKGFjdHVhbERlZmluaXRpb24sIHRoaXMudHJhY2tTdGFydExpbmVzLCB0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJwZXJmb3JtV2FybmluZ1J1bnRpbWVDaGVja3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmcgPSB0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmcuY29uY2F0KHBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyhhY3R1YWxEZWZpbml0aW9uLCB0aGlzLnRyYWNrU3RhcnRMaW5lcywgdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmb3IgZXh0cmEgcm9idXN0bmVzcyB0byBhdm9pZCB0aHJvd2luZyBhbiBub25lIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgIGFjdHVhbERlZmluaXRpb24ubW9kZXMgPSBhY3R1YWxEZWZpbml0aW9uLm1vZGVzXG4gICAgICAgICAgICAgICAgPyBhY3R1YWxEZWZpbml0aW9uLm1vZGVzXG4gICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgIC8vIGFuIGVycm9yIG9mIHVuZGVmaW5lZCBUb2tlblR5cGVzIHdpbGwgYmUgZGV0ZWN0ZWQgaW4gXCJwZXJmb3JtUnVudGltZUNoZWNrc1wiIGFib3ZlLlxuICAgICAgICAgICAgLy8gdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB0byBpbmNyZWFzZSByb2J1c3RuZXNzIGluIHRoZSBjYXNlIG9mIHBhcnRpYWxseSBpbnZhbGlkIGxleGVyIGRlZmluaXRpb24uXG4gICAgICAgICAgICBmb3JFYWNoKGFjdHVhbERlZmluaXRpb24ubW9kZXMsIChjdXJyTW9kZVZhbHVlLCBjdXJyTW9kZU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY3R1YWxEZWZpbml0aW9uLm1vZGVzW2N1cnJNb2RlTmFtZV0gPSByZWplY3QoY3Vyck1vZGVWYWx1ZSwgKGN1cnJUb2tUeXBlKSA9PiBpc1VuZGVmaW5lZChjdXJyVG9rVHlwZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBhbGxNb2RlTmFtZXMgPSBrZXlzKGFjdHVhbERlZmluaXRpb24ubW9kZXMpO1xuICAgICAgICAgICAgZm9yRWFjaChhY3R1YWxEZWZpbml0aW9uLm1vZGVzLCAoY3Vyck1vZERlZiwgY3Vyck1vZE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYE1vZGU6IDwke2N1cnJNb2ROYW1lfT4gcHJvY2Vzc2luZ2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2Rlcy5wdXNoKGN1cnJNb2ROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChgdmFsaWRhdGVQYXR0ZXJuc2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycyA9IHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdCh2YWxpZGF0ZVBhdHRlcm5zKGN1cnJNb2REZWYsIGFsbE1vZGVOYW1lcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGVmaW5pdGlvbiBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCwgdGhlIGFuYWx5c2lzIHBoYXNlIG1heSBmYWlsIHVuZXhwZWN0ZWRseS9cbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJpbmcgYSBsZXhlciB3aXRoIGRlZmluaXRpb24gZXJyb3JzIG1heSBuZXZlciBiZSB1c2VkLCB0aGVyZSBpcyBubyBwb2ludFxuICAgICAgICAgICAgICAgICAgICAvLyB0byBwZXJmb3JtaW5nIHRoZSBhbmFseXNpcyBhbnlob3cuLi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdWdtZW50VG9rZW5UeXBlcyhjdXJyTW9kRGVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyQW5hbHl6ZVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChgYW5hbHl6ZVRva2VuVHlwZXNgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFuYWx5emVSZXN1bHQgPSBhbmFseXplVG9rZW5UeXBlcyhjdXJyTW9kRGVmLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVyczogdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblRyYWNraW5nOiBjb25maWcucG9zaXRpb25UcmFja2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlT3B0aW1pemF0aW9uczogY29uZmlnLmVuc3VyZU9wdGltaXphdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVNb2RlOiBjb25maWcuc2FmZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlcjogdGhpcy5UUkFDRV9JTklULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tjdXJyTW9kTmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBbmFseXplUmVzdWx0LnBhdHRlcm5JZHhUb0NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tjdXJyTW9kTmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBbmFseXplUmVzdWx0LmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5R3JvdXBzID0gYXNzaWduKHt9LCB0aGlzLmVtcHR5R3JvdXBzLCBjdXJyQW5hbHl6ZVJlc3VsdC5lbXB0eUdyb3Vwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0N1c3RvbSA9IGN1cnJBbmFseXplUmVzdWx0Lmhhc0N1c3RvbSB8fCB0aGlzLmhhc0N1c3RvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkW2N1cnJNb2ROYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFuYWx5emVSZXN1bHQuY2FuQmVPcHRpbWl6ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZSA9IGFjdHVhbERlZmluaXRpb24uZGVmYXVsdE1vZGU7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuY29uZmlnLmRlZmVyRGVmaW5pdGlvbkVycm9yc0hhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRXJyTWVzc2FnZXMgPSBtYXAodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGxFcnJNZXNzYWdlc1N0cmluZyA9IGFsbEVyck1lc3NhZ2VzLmpvaW4oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjpcXG5cIiArIGFsbEVyck1lc3NhZ2VzU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE9ubHkgcHJpbnQgd2FybmluZyBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCBUaGlzIHdpbGwgYXZvaWQgcGxcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLCAod2FybmluZ0Rlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgICAgICBQUklOVF9XQVJOSU5HKHdhcm5pbmdEZXNjcmlwdG9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJDaG9vc2luZyBzdWItbWV0aG9kcyBpbXBsZW1lbnRhdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENob29zZSB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25zIGZvciB0aGlzIHNwZWNpZmljIHBhcnNlci5cbiAgICAgICAgICAgICAgICAvLyBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIGluLWxpbmVkIGJ5IHRoZSBKYXZhU2NyaXB0IGVuZ2luZVxuICAgICAgICAgICAgICAgIC8vIHRvIHByb3ZpZGUgb3B0aW1hbCBwZXJmb3JtYW5jZSBpbiBlYWNoIHNjZW5hcmlvLlxuICAgICAgICAgICAgICAgIGlmIChTVVBQT1JUX1NUSUNLWSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNob3BJbnB1dCA9IGlkZW50aXR5O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaFdpdGhUZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXN0SW5kZXggPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaFdpdGhFeGVjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGFzT25seVNpbmdsZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNb2RlcyA9IG5vb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrU3RhcnRMaW5lcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlTmV3Q29sdW1uID0gaWRlbnRpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrRW5kTGluZXMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24gPSBub29wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoL2Z1bGwvaS50ZXN0KHRoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZSA9IHRoaXMuY3JlYXRlRnVsbFRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvb25seVN0YXJ0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2UgPSB0aGlzLmNyZWF0ZVN0YXJ0T25seVRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvb25seU9mZnNldC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlID0gdGhpcy5jcmVhdGVPZmZzZXRPbmx5VG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCA8cG9zaXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogXCIke3RoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmd9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9rZW4gPSB0aGlzLmFkZFRva2VuVXNpbmdQdXNoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBheWxvYWQgPSB0aGlzLmhhbmRsZVBheWxvYWRXaXRoQ3VzdG9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb2tlbiA9IHRoaXMuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXlsb2FkID0gdGhpcy5oYW5kbGVQYXlsb2FkTm9DdXN0b207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJGYWlsZWQgT3B0aW1pemF0aW9uIFdhcm5pbmdzXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bk9wdGltaXplZE1vZGVzID0gcmVkdWNlKHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkLCAoY2Fubm90QmVPcHRpbWl6ZWQsIGNhbkJlT3B0aW1pemVkLCBtb2RlTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5ub3RCZU9wdGltaXplZC5wdXNoKG1vZGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fubm90QmVPcHRpbWl6ZWQ7XG4gICAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5zdXJlT3B0aW1pemF0aW9ucyAmJiAhaXNFbXB0eSh1bk9wdGltaXplZE1vZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTGV4ZXIgTW9kZXM6IDwgJHt1bk9wdGltaXplZE1vZGVzLmpvaW4oXCIsIFwiKX0gPiBjYW5ub3QgYmUgb3B0aW1pemVkLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcdCBEaXNhYmxlIHRoZSBcImVuc3VyZU9wdGltaXphdGlvbnNcIiBsZXhlciBjb25maWcgZmxhZyB0byBzaWxlbnRseSBpZ25vcmUgdGhpcyBhbmQgcnVuIHRoZSBsZXhlciBpbiBhbiB1bi1vcHRpbWl6ZWQgbW9kZS5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFx0IE9yIGluc3BlY3QgdGhlIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzIG9uIGhvdyB0byByZXNvbHZlIHRoZXNlIGlzc3Vlcy5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJjbGVhclJlZ0V4cFBhcnNlckNhY2hlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclJlZ0V4cFBhcnNlckNhY2hlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcInRvRmFzdFByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvRmFzdFByb3BlcnRpZXModGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRva2VuaXplKHRleHQsIGluaXRpYWxNb2RlID0gdGhpcy5kZWZhdWx0TW9kZSkge1xuICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxFcnJNZXNzYWdlcyA9IG1hcCh0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFsbEVyck1lc3NhZ2VzU3RyaW5nID0gYWxsRXJyTWVzc2FnZXMuam9pbihcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIFRva2VuaXplIGJlY2F1c2UgRXJyb3JzIGRldGVjdGVkIGluIGRlZmluaXRpb24gb2YgTGV4ZXI6XFxuXCIgK1xuICAgICAgICAgICAgICAgIGFsbEVyck1lc3NhZ2VzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKHRleHQsIGluaXRpYWxNb2RlKTtcbiAgICB9XG4gICAgLy8gVGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgZHVwbGljYXRpb24gYmV0d2VlbiB0aGlzIGFuZCBcInRva2VuaXplSW50ZXJuYWxMYXp5XCJcbiAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsIGR1ZSB0byBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy5cbiAgICAvLyB0aGlzIG1ldGhvZCBhbHNvIHVzZWQgcXVpdGUgYSBiaXQgb2YgYCFgIG5vbmUgbnVsbCBhc3NlcnRpb25zIGJlY2F1c2UgaXQgaXMgdG9vIG9wdGltaXplZFxuICAgIC8vIGZvciBgdHNjYCB0byBhbHdheXMgdW5kZXJzdGFuZCBpdCBpcyBcInNhZmVcIlxuICAgIHRva2VuaXplSW50ZXJuYWwodGV4dCwgaW5pdGlhbE1vZGUpIHtcbiAgICAgICAgbGV0IGksIGosIGssIG1hdGNoQWx0SW1hZ2UsIGxvbmdlckFsdCwgbWF0Y2hlZEltYWdlLCBwYXlsb2FkLCBhbHRQYXlsb2FkLCBpbWFnZUxlbmd0aCwgZ3JvdXAsIHRva1R5cGUsIG5ld1Rva2VuLCBlcnJMZW5ndGgsIGRyb3BwZWRDaGFyLCBtc2csIG1hdGNoO1xuICAgICAgICBjb25zdCBvcmdUZXh0ID0gdGV4dDtcbiAgICAgICAgY29uc3Qgb3JnTGVuZ3RoID0gb3JnVGV4dC5sZW5ndGg7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBsZXQgbWF0Y2hlZFRva2Vuc0luZGV4ID0gMDtcbiAgICAgICAgLy8gaW5pdGlhbGl6aW5nIHRoZSB0b2tlbnNBcnJheSB0byB0aGUgXCJndWVzc2VkXCIgc2l6ZS5cbiAgICAgICAgLy8gZ3Vlc3NpbmcgdG9vIGxpdHRsZSB3aWxsIHN0aWxsIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGFycmF5IHJlLXNpemVzIG9uIHB1c2hlcy5cbiAgICAgICAgLy8gZ3Vlc3NpbmcgdG9vIGxhcmdlIChUZXN0ZWQgYnkgZ3Vlc3NpbmcgeDQgdG9vIGxhcmdlKSBtYXkgY29zdCBhIGJpdCBtb3JlIG9mIG1lbW9yeVxuICAgICAgICAvLyBidXQgd291bGQgc3RpbGwgaGF2ZSBhIGZhc3RlciBydW50aW1lIGJ5IGF2b2lkaW5nIChBbGwgYnV0IG9uZSkgYXJyYXkgcmVzaXppbmcuXG4gICAgICAgIGNvbnN0IGd1ZXNzZWROdW1iZXJPZlRva2VucyA9IHRoaXMuaGFzQ3VzdG9tXG4gICAgICAgICAgICA/IDAgLy8gd2lsbCBicmVhayBjdXN0b20gdG9rZW4gcGF0dGVybiBBUElzIHRoZSBtYXRjaGVkVG9rZW5zIGFycmF5IHdpbGwgY29udGFpbiB1bmRlZmluZWQgZWxlbWVudHMuXG4gICAgICAgICAgICA6IE1hdGguZmxvb3IodGV4dC5sZW5ndGggLyAxMCk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRUb2tlbnMgPSBuZXcgQXJyYXkoZ3Vlc3NlZE51bWJlck9mVG9rZW5zKTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBsaW5lID0gdGhpcy50cmFja1N0YXJ0TGluZXMgPyAxIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY29sdW1uID0gdGhpcy50cmFja1N0YXJ0TGluZXMgPyAxIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBncm91cHMgPSBjbG9uZUVtcHR5R3JvdXBzKHRoaXMuZW1wdHlHcm91cHMpO1xuICAgICAgICBjb25zdCB0cmFja0xpbmVzID0gdGhpcy50cmFja1N0YXJ0TGluZXM7XG4gICAgICAgIGNvbnN0IGxpbmVUZXJtaW5hdG9yUGF0dGVybiA9IHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm47XG4gICAgICAgIGxldCBjdXJyTW9kZVBhdHRlcm5zTGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IHBhdHRlcm5JZHhUb0NvbmZpZyA9IFtdO1xuICAgICAgICBsZXQgY3VyckNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgPSBbXTtcbiAgICAgICAgY29uc3QgbW9kZVN0YWNrID0gW107XG4gICAgICAgIGNvbnN0IGVtcHR5QXJyYXkgPSBbXTtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShlbXB0eUFycmF5KTtcbiAgICAgICAgbGV0IGdldFBvc3NpYmxlUGF0dGVybnM7XG4gICAgICAgIGZ1bmN0aW9uIGdldFBvc3NpYmxlUGF0dGVybnNTbG93KCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm5JZHhUb0NvbmZpZztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRQb3NzaWJsZVBhdHRlcm5zT3B0aW1pemVkKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpbWl6ZWRDaGFySWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KGNoYXJDb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0dGVybnMgPSBjdXJyQ2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tvcHRpbWl6ZWRDaGFySWR4XTtcbiAgICAgICAgICAgIGlmIChwb3NzaWJsZVBhdHRlcm5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlBcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZVBhdHRlcm5zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcF9tb2RlID0gKHBvcFRva2VuKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBwZXJoYXBzIGF2b2lkIHRoaXMgZXJyb3IgaW4gdGhlIGVkZ2UgY2FzZSB0aGVyZSBpcyBubyBtb3JlIGlucHV0P1xuICAgICAgICAgICAgaWYgKG1vZGVTdGFjay5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBQT1BfTU9ERSBhbmQgYSBQVVNIX01PREUgdGhpcyBpcyBpbi1mYWN0IGEgXCJ0cmFuc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAvLyBTbyBubyBlcnJvciBzaG91bGQgb2NjdXIuXG4gICAgICAgICAgICAgICAgcG9wVG9rZW4udG9rZW5UeXBlLlBVU0hfTU9ERSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgdHJ5IHRvIHBvcCB0aGUgbGFzdCBtb2RlIHRoZXJlIGxleGVyIHdpbGwgbm8gbG9uZ2VyIGhhdmUgQU5ZIG1vZGUuXG4gICAgICAgICAgICAgICAgLy8gdGh1cyB0aGUgcG9wIGlzIGlnbm9yZWQsIGFuIGVycm9yIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlIGxleGVyIHdpbGwgY29udGludWUgcGFyc2luZyBpbiB0aGUgcHJldmlvdXMgbW9kZS5cbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZShwb3BUb2tlbik7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHBvcFRva2VuLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBsaW5lOiBwb3BUb2tlbi5zdGFydExpbmUsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogcG9wVG9rZW4uc3RhcnRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogcG9wVG9rZW4uaW1hZ2UubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3TW9kZSA9IGxhc3QobW9kZVN0YWNrKTtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuSWR4VG9Db25maWcgPSB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tuZXdNb2RlXTtcbiAgICAgICAgICAgICAgICBjdXJyQ2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tuZXdNb2RlXTtcbiAgICAgICAgICAgICAgICBjdXJyTW9kZVBhdHRlcm5zTGVuZ3RoID0gcGF0dGVybklkeFRvQ29uZmlnLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlQ2FuQmVPcHRpbWl6ZWQgPSB0aGlzLmNhbk1vZGVCZU9wdGltaXplZFtuZXdNb2RlXSAmJiB0aGlzLmNvbmZpZy5zYWZlTW9kZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJDaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnICYmIG1vZGVDYW5CZU9wdGltaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQb3NzaWJsZVBhdHRlcm5zID0gZ2V0UG9zc2libGVQYXR0ZXJuc09wdGltaXplZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBvc3NpYmxlUGF0dGVybnMgPSBnZXRQb3NzaWJsZVBhdHRlcm5zU2xvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHB1c2hfbW9kZShuZXdNb2RlKSB7XG4gICAgICAgICAgICBtb2RlU3RhY2sucHVzaChuZXdNb2RlKTtcbiAgICAgICAgICAgIGN1cnJDaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnID1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbbmV3TW9kZV07XG4gICAgICAgICAgICBwYXR0ZXJuSWR4VG9Db25maWcgPSB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tuZXdNb2RlXTtcbiAgICAgICAgICAgIGN1cnJNb2RlUGF0dGVybnNMZW5ndGggPSBwYXR0ZXJuSWR4VG9Db25maWcubGVuZ3RoO1xuICAgICAgICAgICAgY3Vyck1vZGVQYXR0ZXJuc0xlbmd0aCA9IHBhdHRlcm5JZHhUb0NvbmZpZy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtb2RlQ2FuQmVPcHRpbWl6ZWQgPSB0aGlzLmNhbk1vZGVCZU9wdGltaXplZFtuZXdNb2RlXSAmJiB0aGlzLmNvbmZpZy5zYWZlTW9kZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoY3VyckNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgJiYgbW9kZUNhbkJlT3B0aW1pemVkKSB7XG4gICAgICAgICAgICAgICAgZ2V0UG9zc2libGVQYXR0ZXJucyA9IGdldFBvc3NpYmxlUGF0dGVybnNPcHRpbWl6ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQb3NzaWJsZVBhdHRlcm5zID0gZ2V0UG9zc2libGVQYXR0ZXJuc1Nsb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBwYXR0ZXJuIHNlZW1zIHRvIGF2b2lkIGEgVjggZGUtb3B0aW1pemF0aW9uLCBhbHRob3VnaCB0aGF0IGRlLW9wdGltaXphdGlvbiBkb2VzIG5vdFxuICAgICAgICAvLyBzZWVtIHRvIG1hdHRlciBwZXJmb3JtYW5jZSB3aXNlLlxuICAgICAgICBwdXNoX21vZGUuY2FsbCh0aGlzLCBpbml0aWFsTW9kZSk7XG4gICAgICAgIGxldCBjdXJyQ29uZmlnO1xuICAgICAgICBjb25zdCByZWNvdmVyeUVuYWJsZWQgPSB0aGlzLmNvbmZpZy5yZWNvdmVyeUVuYWJsZWQ7XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBvcmdMZW5ndGgpIHtcbiAgICAgICAgICAgIG1hdGNoZWRJbWFnZSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBuZXh0Q2hhckNvZGUgPSBvcmdUZXh0LmNoYXJDb2RlQXQob2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlblBhdHRlcm5JZHhUb0NvbmZpZyA9IGdldFBvc3NpYmxlUGF0dGVybnMobmV4dENoYXJDb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlblBhdHRlcm5zTGVuZ3RoID0gY2hvc2VuUGF0dGVybklkeFRvQ29uZmlnLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaG9zZW5QYXR0ZXJuc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY3VyckNvbmZpZyA9IGNob3NlblBhdHRlcm5JZHhUb0NvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGF0dGVybiA9IGN1cnJDb25maWcucGF0dGVybjtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBpbi1saW5lZCBiZWNhdXNlID4gNjAwIGNoYXJzIHdvbid0IGJlIGluLWxpbmVkIGluIFY4XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlQ2hhckNvZGUgPSBjdXJyQ29uZmlnLnNob3J0O1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVDaGFyQ29kZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRDaGFyQ29kZSA9PT0gc2luZ2xlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSW1hZ2UgPSBjdXJyUGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ29uZmlnLmlzQ3VzdG9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY3VyclBhdHRlcm4uZXhlYyhvcmdUZXh0LCBvZmZzZXQsIG1hdGNoZWRUb2tlbnMsIGdyb3Vwcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEltYWdlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gucGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IG1hdGNoLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSW1hZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhc3RJbmRleChjdXJyUGF0dGVybiwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEltYWdlID0gdGhpcy5tYXRjaChjdXJyUGF0dGVybiwgdGV4dCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRJbWFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGlzIHBhdHRlcm4gbWF0Y2hlZCB3ZSBtdXN0IHRyeSBhIGFub3RoZXIgbG9uZ2VyIGFsdGVybmF0aXZlLlxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhbiBiZSB1c2VkIHRvIHByaW9yaXRpemUga2V5d29yZHMgb3ZlciBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICAgICAgICBsb25nZXJBbHQgPSBjdXJyQ29uZmlnLmxvbmdlckFsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvbmdlckFsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBtaWNybyBvcHRpbWl6ZSwgYXZvaWQgZXh0cmEgcHJvcCBhY2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IHNhdmluZy9saW5raW5nIGxvbmdlckFsdCBvbiB0aGUgb3JpZ2luYWwgY29uZmlnP1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9uZ2VyQWx0TGVuZ3RoID0gbG9uZ2VyQWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBsb25nZXJBbHRMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdENvbmZpZyA9IHBhdHRlcm5JZHhUb0NvbmZpZ1tsb25nZXJBbHRba11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdFBhdHRlcm4gPSBsb25nZXJBbHRDb25maWcucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRQYXlsb2FkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5nbGUgQ2hhciBjYW4gbmV2ZXIgYmUgYSBsb25nZXIgYWx0IHNvIG5vIG5lZWQgdG8gdGVzdCBpdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBpbi1saW5lZCBiZWNhdXNlID4gNjAwIGNoYXJzIHdvbid0IGJlIGluLWxpbmVkIGluIFY4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvbmdlckFsdENvbmZpZy5pc0N1c3RvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGxvbmdlckFsdFBhdHRlcm4uZXhlYyhvcmdUZXh0LCBvZmZzZXQsIG1hdGNoZWRUb2tlbnMsIGdyb3Vwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hBbHRJbWFnZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLnBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdFBheWxvYWQgPSBtYXRjaC5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hBbHRJbWFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFzdEluZGV4KGxvbmdlckFsdFBhdHRlcm4sIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoQWx0SW1hZ2UgPSB0aGlzLm1hdGNoKGxvbmdlckFsdFBhdHRlcm4sIHRleHQsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaEFsdEltYWdlICYmIG1hdGNoQWx0SW1hZ2UubGVuZ3RoID4gbWF0Y2hlZEltYWdlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSW1hZ2UgPSBtYXRjaEFsdEltYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gYWx0UGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckNvbmZpZyA9IGxvbmdlckFsdENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhpdCB0aGUgbG9vcCBlYXJseSBhZnRlciBtYXRjaGluZyBvbmUgb2YgdGhlIGxvbmdlciBhbHRlcm5hdGl2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IG1hdGNoZWQgYWx0ZXJuYXRpdmUgdGFrZXMgcHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bCBtYXRjaFxuICAgICAgICAgICAgaWYgKG1hdGNoZWRJbWFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGltYWdlTGVuZ3RoID0gbWF0Y2hlZEltYWdlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBncm91cCA9IGN1cnJDb25maWcuZ3JvdXA7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rVHlwZSA9IGN1cnJDb25maWcudG9rZW5UeXBlSWR4O1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBcIm9mZnNldCArIGltYWdlTGVuZ3RoXCIgYW5kIHRoZSBuZXcgY29sdW1uIG1heSBiZSBjb21wdXRlZCB0d2ljZSBpbiBjYXNlIG9mIFwiZnVsbFwiIGxvY2F0aW9uIGluZm9ybWF0aW9uIGluc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVGdWxsVG9rZW4gbWV0aG9kXG4gICAgICAgICAgICAgICAgICAgIG5ld1Rva2VuID0gdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlKG1hdGNoZWRJbWFnZSwgb2Zmc2V0LCB0b2tUeXBlLCBjdXJyQ29uZmlnLnRva2VuVHlwZSwgbGluZSwgY29sdW1uLCBpbWFnZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGF5bG9hZChuZXdUb2tlbiwgcGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IG9wdGltaXplIE5PT1AgaW4gY2FzZSB0aGVyZSBhcmUgbm8gc3BlY2lhbCBncm91cHM/XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRUb2tlbnNJbmRleCA9IHRoaXMuYWRkVG9rZW4obWF0Y2hlZFRva2VucywgbWF0Y2hlZFRva2Vuc0luZGV4LCBuZXdUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbZ3JvdXBdLnB1c2gobmV3VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLmNob3BJbnB1dCh0ZXh0LCBpbWFnZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgaW1hZ2VMZW5ndGg7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogd2l0aCBuZXdsaW5lcyB0aGUgY29sdW1uIG1heSBiZSBhc3NpZ25lZCB0d2ljZVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29tcHV0ZU5ld0NvbHVtbihjb2x1bW4sIGltYWdlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tMaW5lcyA9PT0gdHJ1ZSAmJiBjdXJyQ29uZmlnLmNhbkxpbmVUZXJtaW5hdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1PZkxUc0luTWF0Y2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmRUZXJtaW5hdG9yO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdExURW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICBsaW5lVGVybWluYXRvclBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRUZXJtaW5hdG9yID0gbGluZVRlcm1pbmF0b3JQYXR0ZXJuLnRlc3QobWF0Y2hlZEltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFRlcm1pbmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TFRFbmRPZmZzZXQgPSBsaW5lVGVybWluYXRvclBhdHRlcm4ubGFzdEluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZkxUc0luTWF0Y2grKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoZm91bmRUZXJtaW5hdG9yID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bU9mTFRzSW5NYXRjaCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBudW1PZkxUc0luTWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBpbWFnZUxlbmd0aCAtIGxhc3RMVEVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24obmV3VG9rZW4sIGdyb3VwLCBsYXN0TFRFbmRPZmZzZXQsIG51bU9mTFRzSW5NYXRjaCwgbGluZSwgY29sdW1uLCBpbWFnZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBOT09QIGlmIG5vIG1vZGVzIHByZXNlbnRcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1vZGVzKGN1cnJDb25maWcsIHBvcF9tb2RlLCBwdXNoX21vZGUsIG5ld1Rva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVycm9yIHJlY292ZXJ5LCBkcm9wIGNoYXJhY3RlcnMgdW50aWwgd2UgaWRlbnRpZnkgYSB2YWxpZCB0b2tlbidzIHN0YXJ0IHBvaW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JTdGFydE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxpbmUgPSBsaW5lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgIGxldCBmb3VuZFJlc3luY1BvaW50ID0gcmVjb3ZlcnlFbmFibGVkID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZm91bmRSZXN5bmNQb2ludCA9PT0gZmFsc2UgJiYgb2Zmc2V0IDwgb3JnTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5IEZ1bmMgKHdoZW4gc3RpY2t5IGZsYWcgaXMgZW5hYmxlZClcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMuY2hvcElucHV0KHRleHQsIDEpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1cnJNb2RlUGF0dGVybnNMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyckNvbmZpZyA9IHBhdHRlcm5JZHhUb0NvbmZpZ1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQYXR0ZXJuID0gY3VyckNvbmZpZy5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgaW4tbGluZWQgYmVjYXVzZSA+IDYwMCBjaGFycyB3b24ndCBiZSBpbi1saW5lZCBpbiBWOFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlQ2hhckNvZGUgPSBjdXJyQ29uZmlnLnNob3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUNoYXJDb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmdUZXh0LmNoYXJDb2RlQXQob2Zmc2V0KSA9PT0gc2luZ2xlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRSZXN5bmNQb2ludCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNvbmZpZy5pc0N1c3RvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUmVzeW5jUG9pbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyUGF0dGVybi5leGVjKG9yZ1RleHQsIG9mZnNldCwgbWF0Y2hlZFRva2VucywgZ3JvdXBzKSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFzdEluZGV4KGN1cnJQYXR0ZXJuLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUmVzeW5jUG9pbnQgPSBjdXJyUGF0dGVybi5leGVjKHRleHQpICE9PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kUmVzeW5jUG9pbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlcnJMZW5ndGggPSBvZmZzZXQgLSBlcnJvclN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29tcHV0ZU5ld0NvbHVtbihjb2x1bW4sIGVyckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB3ZSBlaXRoZXIgcmUtc3luY2VkIG9yIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdGV4dFxuICAgICAgICAgICAgICAgIG1zZyA9IHRoaXMuY29uZmlnLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKG9yZ1RleHQsIGVycm9yU3RhcnRPZmZzZXQsIGVyckxlbmd0aCwgZXJyb3JMaW5lLCBlcnJvckNvbHVtbik7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGVycm9yU3RhcnRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGVycm9yTGluZSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlcnJvckNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBlcnJMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnlFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgZG8gaGF2ZSBjdXN0b20gcGF0dGVybnMgd2hpY2ggcHVzaCBkaXJlY3RseSBpbnRvIHRoZVxuICAgICAgICAvLyBUT0RPOiBjdXN0b20gdG9rZW5zIHNob3VsZCBub3QgcHVzaCBkaXJlY3RseT8/XG4gICAgICAgIGlmICghdGhpcy5oYXNDdXN0b20pIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGd1ZXNzZWQgYSB0b28gbGFyZ2Ugc2l6ZSBmb3IgdGhlIHRva2VucyBhcnJheSB0aGlzIHdpbGwgc2hyaW5rIGl0IHRvIHRoZSByaWdodCBzaXplLlxuICAgICAgICAgICAgbWF0Y2hlZFRva2Vucy5sZW5ndGggPSBtYXRjaGVkVG9rZW5zSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRva2VuczogbWF0Y2hlZFRva2VucyxcbiAgICAgICAgICAgIGdyb3VwczogZ3JvdXBzLFxuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhbmRsZU1vZGVzKGNvbmZpZywgcG9wX21vZGUsIHB1c2hfbW9kZSwgbmV3VG9rZW4pIHtcbiAgICAgICAgaWYgKGNvbmZpZy5wb3AgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gc2F2ZSB0aGUgUFVTSF9NT0RFIHByb3BlcnR5IGFzIGlmIHRoZSBtb2RlIGlzIHBvcHBlZFxuICAgICAgICAgICAgLy8gcGF0dGVybklkeFRvUG9wTW9kZSBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBtb2RlIGFmdGVyIHBvcHBpbmcgdGhlIHN0YWNrXG4gICAgICAgICAgICBjb25zdCBwdXNoTW9kZSA9IGNvbmZpZy5wdXNoO1xuICAgICAgICAgICAgcG9wX21vZGUobmV3VG9rZW4pO1xuICAgICAgICAgICAgaWYgKHB1c2hNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwdXNoX21vZGUuY2FsbCh0aGlzLCBwdXNoTW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnLnB1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHVzaF9tb2RlLmNhbGwodGhpcywgY29uZmlnLnB1c2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNob3BJbnB1dCh0ZXh0LCBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKGxlbmd0aCk7XG4gICAgfVxuICAgIHVwZGF0ZUxhc3RJbmRleChyZWdFeHAsIG5ld0xhc3RJbmRleCkge1xuICAgICAgICByZWdFeHAubGFzdEluZGV4ID0gbmV3TGFzdEluZGV4O1xuICAgIH1cbiAgICAvLyBUT0RPOiBkZWNyZWFzZSB0aGlzIHVuZGVyIDYwMCBjaGFyYWN0ZXJzPyBpbnNwZWN0IHN0cmlwcGluZyBjb21tZW50cyBvcHRpb24gaW4gVFNDIGNvbXBpbGVyXG4gICAgdXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24obmV3VG9rZW4sIGdyb3VwLCBsYXN0TFRJZHgsIG51bU9mTFRzSW5NYXRjaCwgbGluZSwgY29sdW1uLCBpbWFnZUxlbmd0aCkge1xuICAgICAgICBsZXQgbGFzdENoYXJJc0xULCBmaXhGb3JFbmRpbmdJbkxUO1xuICAgICAgICBpZiAoZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gYSBub25lIHNraXBwZWQgbXVsdGkgbGluZSBUb2tlbiwgbmVlZCB0byB1cGRhdGUgZW5kTGluZS9lbmRDb2x1bW5cbiAgICAgICAgICAgIGxhc3RDaGFySXNMVCA9IGxhc3RMVElkeCA9PT0gaW1hZ2VMZW5ndGggLSAxO1xuICAgICAgICAgICAgZml4Rm9yRW5kaW5nSW5MVCA9IGxhc3RDaGFySXNMVCA/IC0xIDogMDtcbiAgICAgICAgICAgIGlmICghKG51bU9mTFRzSW5NYXRjaCA9PT0gMSAmJiBsYXN0Q2hhcklzTFQgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgYSB0b2tlbiBlbmRzIGluIGEgTFQgdGhhdCBsYXN0IExUIG9ubHkgYWZmZWN0cyB0aGUgbGluZSBudW1iZXJpbmcgb2YgZm9sbG93aW5nIFRva2Vuc1xuICAgICAgICAgICAgICAgIG5ld1Rva2VuLmVuZExpbmUgPSBsaW5lICsgZml4Rm9yRW5kaW5nSW5MVDtcbiAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBMVCBpbiBhIHRva2VuIGRvZXMgbm90IGFmZmVjdCB0aGUgZW5kQ29sdW1uIGVpdGhlciBhcyB0aGUgW2NvbHVtblN0YXJ0IC4uLiBjb2x1bW5FbmQpXG4gICAgICAgICAgICAgICAgLy8gaW5jbHVzaXZlIHRvIGV4Y2x1c2l2ZSByYW5nZS5cbiAgICAgICAgICAgICAgICBuZXdUb2tlbi5lbmRDb2x1bW4gPSBjb2x1bW4gLSAxICsgLWZpeEZvckVuZGluZ0luTFQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIHNpbmdsZSBMVCBpbiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSB0b2tlbiwgbm8gbmVlZCB0byBtb2RpZnkgdGhlIGVuZExpbmUvRW5kQ29sdW1uXG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcHV0ZU5ld0NvbHVtbihvbGRDb2x1bW4sIGltYWdlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvbGRDb2x1bW4gKyBpbWFnZUxlbmd0aDtcbiAgICB9XG4gICAgY3JlYXRlT2Zmc2V0T25seVRva2VuKGltYWdlLCBzdGFydE9mZnNldCwgdG9rZW5UeXBlSWR4LCB0b2tlblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICB0b2tlblR5cGVJZHgsXG4gICAgICAgICAgICB0b2tlblR5cGUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNyZWF0ZVN0YXJ0T25seVRva2VuKGltYWdlLCBzdGFydE9mZnNldCwgdG9rZW5UeXBlSWR4LCB0b2tlblR5cGUsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydENvbHVtbixcbiAgICAgICAgICAgIHRva2VuVHlwZUlkeCxcbiAgICAgICAgICAgIHRva2VuVHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY3JlYXRlRnVsbFRva2VuKGltYWdlLCBzdGFydE9mZnNldCwgdG9rZW5UeXBlSWR4LCB0b2tlblR5cGUsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGltYWdlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbWFnZSxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBzdGFydE9mZnNldCArIGltYWdlTGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHN0YXJ0TGluZSxcbiAgICAgICAgICAgIGVuZExpbmU6IHN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICAgICAgZW5kQ29sdW1uOiBzdGFydENvbHVtbiArIGltYWdlTGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHRva2VuVHlwZUlkeCxcbiAgICAgICAgICAgIHRva2VuVHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYWRkVG9rZW5Vc2luZ1B1c2godG9rZW5WZWN0b3IsIGluZGV4LCB0b2tlblRvQWRkKSB7XG4gICAgICAgIHRva2VuVmVjdG9yLnB1c2godG9rZW5Ub0FkZCk7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcyh0b2tlblZlY3RvciwgaW5kZXgsIHRva2VuVG9BZGQpIHtcbiAgICAgICAgdG9rZW5WZWN0b3JbaW5kZXhdID0gdG9rZW5Ub0FkZDtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICBoYW5kbGVQYXlsb2FkTm9DdXN0b20odG9rZW4sIHBheWxvYWQpIHsgfVxuICAgIGhhbmRsZVBheWxvYWRXaXRoQ3VzdG9tKHRva2VuLCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChwYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0b2tlbi5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaFdpdGhUZXN0KHBhdHRlcm4sIHRleHQsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHBhdHRlcm4udGVzdCh0ZXh0KTtcbiAgICAgICAgaWYgKGZvdW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBwYXR0ZXJuLmxhc3RJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG1hdGNoV2l0aEV4ZWMocGF0dGVybiwgdGV4dCkge1xuICAgICAgICBjb25zdCByZWdFeHBBcnJheSA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHJlZ0V4cEFycmF5ICE9PSBudWxsID8gcmVnRXhwQXJyYXlbMF0gOiBudWxsO1xuICAgIH1cbn1cbkxleGVyLlNLSVBQRUQgPSBcIlRoaXMgbWFya3MgYSBza2lwcGVkIFRva2VuIHBhdHRlcm4sIHRoaXMgbWVhbnMgZWFjaCB0b2tlbiBpZGVudGlmaWVkIGJ5IGl0IHdpbGxcIiArXG4gICAgXCJiZSBjb25zdW1lZCBhbmQgdGhlbiB0aHJvd24gaW50byBvYmxpdmlvbiwgdGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB0byBjb21wbGV0ZWx5IGlnbm9yZSB3aGl0ZXNwYWNlLlwiO1xuTGV4ZXIuTkEgPSAvTk9UX0FQUExJQ0FCTEUvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXJfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaGFzLCBpc1N0cmluZywgaXNVbmRlZmluZWQgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBMZXhlciB9IGZyb20gXCIuL2xleGVyX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgYXVnbWVudFRva2VuVHlwZXMsIHRva2VuU3RydWN0dXJlZE1hdGNoZXIgfSBmcm9tIFwiLi90b2tlbnMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB0b2tlbkxhYmVsKHRva1R5cGUpIHtcbiAgICBpZiAoaGFzVG9rZW5MYWJlbCh0b2tUeXBlKSkge1xuICAgICAgICByZXR1cm4gdG9rVHlwZS5MQUJFTDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0b2tUeXBlLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuTmFtZSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIHRva1R5cGUubmFtZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNUb2tlbkxhYmVsKG9iaikge1xuICAgIHJldHVybiBpc1N0cmluZyhvYmouTEFCRUwpICYmIG9iai5MQUJFTCAhPT0gXCJcIjtcbn1cbmNvbnN0IFBBUkVOVCA9IFwicGFyZW50XCI7XG5jb25zdCBDQVRFR09SSUVTID0gXCJjYXRlZ29yaWVzXCI7XG5jb25zdCBMQUJFTCA9IFwibGFiZWxcIjtcbmNvbnN0IEdST1VQID0gXCJncm91cFwiO1xuY29uc3QgUFVTSF9NT0RFID0gXCJwdXNoX21vZGVcIjtcbmNvbnN0IFBPUF9NT0RFID0gXCJwb3BfbW9kZVwiO1xuY29uc3QgTE9OR0VSX0FMVCA9IFwibG9uZ2VyX2FsdFwiO1xuY29uc3QgTElORV9CUkVBS1MgPSBcImxpbmVfYnJlYWtzXCI7XG5jb25zdCBTVEFSVF9DSEFSU19ISU5UID0gXCJzdGFydF9jaGFyc19oaW50XCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW4oY29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRva2VuSW50ZXJuYWwoY29uZmlnKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuSW50ZXJuYWwoY29uZmlnKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IGNvbmZpZy5wYXR0ZXJuO1xuICAgIGNvbnN0IHRva2VuVHlwZSA9IHt9O1xuICAgIHRva2VuVHlwZS5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChwYXR0ZXJuKSkge1xuICAgICAgICB0b2tlblR5cGUuUEFUVEVSTiA9IHBhdHRlcm47XG4gICAgfVxuICAgIGlmIChoYXMoY29uZmlnLCBQQVJFTlQpKSB7XG4gICAgICAgIHRocm93IChcIlRoZSBwYXJlbnQgcHJvcGVydHkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cXG5cIiArXG4gICAgICAgICAgICBcIlNlZTogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXMvNTY0I2lzc3VlY29tbWVudC0zNDkwNjIzNDYgZm9yIGRldGFpbHMuXCIpO1xuICAgIH1cbiAgICBpZiAoaGFzKGNvbmZpZywgQ0FURUdPUklFUykpIHtcbiAgICAgICAgLy8gY2FzdGluZyB0byBBTlkgYXMgdGhpcyB3aWxsIGJlIGZpeGVkIGluc2lkZSBgYXVnbWVudFRva2VuVHlwZXNgYFxuICAgICAgICB0b2tlblR5cGUuQ0FURUdPUklFUyA9IGNvbmZpZ1tDQVRFR09SSUVTXTtcbiAgICB9XG4gICAgYXVnbWVudFRva2VuVHlwZXMoW3Rva2VuVHlwZV0pO1xuICAgIGlmIChoYXMoY29uZmlnLCBMQUJFTCkpIHtcbiAgICAgICAgdG9rZW5UeXBlLkxBQkVMID0gY29uZmlnW0xBQkVMXTtcbiAgICB9XG4gICAgaWYgKGhhcyhjb25maWcsIEdST1VQKSkge1xuICAgICAgICB0b2tlblR5cGUuR1JPVVAgPSBjb25maWdbR1JPVVBdO1xuICAgIH1cbiAgICBpZiAoaGFzKGNvbmZpZywgUE9QX01PREUpKSB7XG4gICAgICAgIHRva2VuVHlwZS5QT1BfTU9ERSA9IGNvbmZpZ1tQT1BfTU9ERV07XG4gICAgfVxuICAgIGlmIChoYXMoY29uZmlnLCBQVVNIX01PREUpKSB7XG4gICAgICAgIHRva2VuVHlwZS5QVVNIX01PREUgPSBjb25maWdbUFVTSF9NT0RFXTtcbiAgICB9XG4gICAgaWYgKGhhcyhjb25maWcsIExPTkdFUl9BTFQpKSB7XG4gICAgICAgIHRva2VuVHlwZS5MT05HRVJfQUxUID0gY29uZmlnW0xPTkdFUl9BTFRdO1xuICAgIH1cbiAgICBpZiAoaGFzKGNvbmZpZywgTElORV9CUkVBS1MpKSB7XG4gICAgICAgIHRva2VuVHlwZS5MSU5FX0JSRUFLUyA9IGNvbmZpZ1tMSU5FX0JSRUFLU107XG4gICAgfVxuICAgIGlmIChoYXMoY29uZmlnLCBTVEFSVF9DSEFSU19ISU5UKSkge1xuICAgICAgICB0b2tlblR5cGUuU1RBUlRfQ0hBUlNfSElOVCA9IGNvbmZpZ1tTVEFSVF9DSEFSU19ISU5UXTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuVHlwZTtcbn1cbmV4cG9ydCBjb25zdCBFT0YgPSBjcmVhdGVUb2tlbih7IG5hbWU6IFwiRU9GXCIsIHBhdHRlcm46IExleGVyLk5BIH0pO1xuYXVnbWVudFRva2VuVHlwZXMoW0VPRl0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuSW5zdGFuY2UodG9rVHlwZSwgaW1hZ2UsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHN0YXJ0TGluZSwgZW5kTGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGltYWdlLFxuICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgZW5kT2Zmc2V0LFxuICAgICAgICBzdGFydExpbmUsXG4gICAgICAgIGVuZExpbmUsXG4gICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW4sXG4gICAgICAgIHRva2VuVHlwZUlkeDogdG9rVHlwZS50b2tlblR5cGVJZHgsXG4gICAgICAgIHRva2VuVHlwZTogdG9rVHlwZSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuTWF0Y2hlcih0b2tlbiwgdG9rVHlwZSkge1xuICAgIHJldHVybiB0b2tlblN0cnVjdHVyZWRNYXRjaGVyKHRva2VuLCB0b2tUeXBlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2Vuc19wdWJsaWMuanMubWFwIiwKICAgICJpbXBvcnQgeyBoYXNUb2tlbkxhYmVsLCB0b2tlbkxhYmVsIH0gZnJvbSBcIi4uL3NjYW4vdG9rZW5zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgcmVkdWNlIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdGlvbkRzbE5hbWUsIE5vblRlcm1pbmFsLCBSdWxlLCBUZXJtaW5hbCwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2UoeyBleHBlY3RlZCwgYWN0dWFsLCBwcmV2aW91cywgcnVsZU5hbWUgfSkge1xuICAgICAgICBjb25zdCBoYXNMYWJlbCA9IGhhc1Rva2VuTGFiZWwoZXhwZWN0ZWQpO1xuICAgICAgICBjb25zdCBleHBlY3RlZE1zZyA9IGhhc0xhYmVsXG4gICAgICAgICAgICA/IGAtLT4gJHt0b2tlbkxhYmVsKGV4cGVjdGVkKX0gPC0tYFxuICAgICAgICAgICAgOiBgdG9rZW4gb2YgdHlwZSAtLT4gJHtleHBlY3RlZC5uYW1lfSA8LS1gO1xuICAgICAgICBjb25zdCBtc2cgPSBgRXhwZWN0aW5nICR7ZXhwZWN0ZWRNc2d9IGJ1dCBmb3VuZCAtLT4gJyR7YWN0dWFsLmltYWdlfScgPC0tYDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9LFxuICAgIGJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHsgZmlyc3RSZWR1bmRhbnQsIHJ1bGVOYW1lIH0pIHtcbiAgICAgICAgcmV0dXJuIFwiUmVkdW5kYW50IGlucHV0LCBleHBlY3RpbmcgRU9GIGJ1dCBmb3VuZDogXCIgKyBmaXJzdFJlZHVuZGFudC5pbWFnZTtcbiAgICB9LFxuICAgIGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHsgZXhwZWN0ZWRQYXRoc1BlckFsdCwgYWN0dWFsLCBwcmV2aW91cywgY3VzdG9tVXNlckRlc2NyaXB0aW9uLCBydWxlTmFtZSwgfSkge1xuICAgICAgICBjb25zdCBlcnJQcmVmaXggPSBcIkV4cGVjdGluZzogXCI7XG4gICAgICAgIC8vIFRPRE86IGlzc3VlOiBObyBWaWFibGUgQWx0ZXJuYXRpdmUgRXJyb3IgbWF5IGhhdmUgaW5jb21wbGV0ZSBkZXRhaWxzLiAjNTAyXG4gICAgICAgIGNvbnN0IGFjdHVhbFRleHQgPSBmaXJzdChhY3R1YWwpLmltYWdlO1xuICAgICAgICBjb25zdCBlcnJTdWZmaXggPSBcIlxcbmJ1dCBmb3VuZDogJ1wiICsgYWN0dWFsVGV4dCArIFwiJ1wiO1xuICAgICAgICBpZiAoY3VzdG9tVXNlckRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyUHJlZml4ICsgY3VzdG9tVXNlckRlc2NyaXB0aW9uICsgZXJyU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWxsTG9va0FoZWFkUGF0aHMgPSByZWR1Y2UoZXhwZWN0ZWRQYXRoc1BlckFsdCwgKHJlc3VsdCwgY3VyckFsdFBhdGhzKSA9PiByZXN1bHQuY29uY2F0KGN1cnJBbHRQYXRocyksIFtdKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWYWxpZFRva2VuU2VxdWVuY2VzID0gbWFwKGFsbExvb2tBaGVhZFBhdGhzLCAoY3VyclBhdGgpID0+IGBbJHttYXAoY3VyclBhdGgsIChjdXJyVG9rZW5UeXBlKSA9PiB0b2tlbkxhYmVsKGN1cnJUb2tlblR5cGUpKS5qb2luKFwiLCBcIil9XWApO1xuICAgICAgICAgICAgY29uc3QgbmV4dFZhbGlkU2VxdWVuY2VJdGVtcyA9IG1hcChuZXh0VmFsaWRUb2tlblNlcXVlbmNlcywgKGl0ZW1Nc2csIGlkeCkgPT4gYCAgJHtpZHggKyAxfS4gJHtpdGVtTXNnfWApO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZERlc2NyaXB0aW9uID0gYG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6XFxuJHtuZXh0VmFsaWRTZXF1ZW5jZUl0ZW1zLmpvaW4oXCJcXG5cIil9YDtcbiAgICAgICAgICAgIHJldHVybiBlcnJQcmVmaXggKyBjYWxjdWxhdGVkRGVzY3JpcHRpb24gKyBlcnJTdWZmaXg7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7IGV4cGVjdGVkSXRlcmF0aW9uUGF0aHMsIGFjdHVhbCwgY3VzdG9tVXNlckRlc2NyaXB0aW9uLCBydWxlTmFtZSwgfSkge1xuICAgICAgICBjb25zdCBlcnJQcmVmaXggPSBcIkV4cGVjdGluZzogXCI7XG4gICAgICAgIC8vIFRPRE86IGlzc3VlOiBObyBWaWFibGUgQWx0ZXJuYXRpdmUgRXJyb3IgbWF5IGhhdmUgaW5jb21wbGV0ZSBkZXRhaWxzLiAjNTAyXG4gICAgICAgIGNvbnN0IGFjdHVhbFRleHQgPSBmaXJzdChhY3R1YWwpLmltYWdlO1xuICAgICAgICBjb25zdCBlcnJTdWZmaXggPSBcIlxcbmJ1dCBmb3VuZDogJ1wiICsgYWN0dWFsVGV4dCArIFwiJ1wiO1xuICAgICAgICBpZiAoY3VzdG9tVXNlckRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyUHJlZml4ICsgY3VzdG9tVXNlckRlc2NyaXB0aW9uICsgZXJyU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dFZhbGlkVG9rZW5TZXF1ZW5jZXMgPSBtYXAoZXhwZWN0ZWRJdGVyYXRpb25QYXRocywgKGN1cnJQYXRoKSA9PiBgWyR7bWFwKGN1cnJQYXRoLCAoY3VyclRva2VuVHlwZSkgPT4gdG9rZW5MYWJlbChjdXJyVG9rZW5UeXBlKSkuam9pbihcIixcIil9XWApO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZERlc2NyaXB0aW9uID0gYGV4cGVjdGluZyBhdCBsZWFzdCBvbmUgaXRlcmF0aW9uIHdoaWNoIHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6OlxcbiAgYCArXG4gICAgICAgICAgICAgICAgYDwke25leHRWYWxpZFRva2VuU2VxdWVuY2VzLmpvaW4oXCIgLFwiKX0+YDtcbiAgICAgICAgICAgIHJldHVybiBlcnJQcmVmaXggKyBjYWxjdWxhdGVkRGVzY3JpcHRpb24gKyBlcnJTdWZmaXg7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbk9iamVjdC5mcmVlemUoZGVmYXVsdFBhcnNlckVycm9yUHJvdmlkZXIpO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRHcmFtbWFyUmVzb2x2ZXJFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodG9wTGV2ZWxSdWxlLCB1bmRlZmluZWRSdWxlKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IFwiSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPlwiICtcbiAgICAgICAgICAgIHVuZGVmaW5lZFJ1bGUubm9uVGVybWluYWxOYW1lICtcbiAgICAgICAgICAgIFwiPC1cXG5cIiArXG4gICAgICAgICAgICBcImluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5cIiArXG4gICAgICAgICAgICB0b3BMZXZlbFJ1bGUubmFtZSArXG4gICAgICAgICAgICBcIjwtXCI7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0b3BMZXZlbFJ1bGUsIGR1cGxpY2F0ZVByb2RzKSB7XG4gICAgICAgIGZ1bmN0aW9uIGdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50KHByb2QpIHtcbiAgICAgICAgICAgIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvZC50ZXJtaW5hbFR5cGUubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kLm5vblRlcm1pbmFsTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvcExldmVsTmFtZSA9IHRvcExldmVsUnVsZS5uYW1lO1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVQcm9kID0gZmlyc3QoZHVwbGljYXRlUHJvZHMpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGR1cGxpY2F0ZVByb2QuaWR4O1xuICAgICAgICBjb25zdCBkc2xOYW1lID0gZ2V0UHJvZHVjdGlvbkRzbE5hbWUoZHVwbGljYXRlUHJvZCk7XG4gICAgICAgIGNvbnN0IGV4dHJhQXJndW1lbnQgPSBnZXRFeHRyYVByb2R1Y3Rpb25Bcmd1bWVudChkdXBsaWNhdGVQcm9kKTtcbiAgICAgICAgY29uc3QgaGFzRXhwbGljaXRJbmRleCA9IGluZGV4ID4gMDtcbiAgICAgICAgbGV0IG1zZyA9IGAtPiR7ZHNsTmFtZX0ke2hhc0V4cGxpY2l0SW5kZXggPyBpbmRleCA6IFwiXCJ9PC0gJHtleHRyYUFyZ3VtZW50ID8gYHdpdGggYXJndW1lbnQ6IC0+JHtleHRyYUFyZ3VtZW50fTwtYCA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlICgke2R1cGxpY2F0ZVByb2RzLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke3RvcExldmVsTmFtZX08LS4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgXG4gICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAvLyB3aGl0ZSBzcGFjZSB0cmltbWluZyB0aW1lISBiZXR0ZXIgdG8gdHJpbSBhZnRlcndhcmRzIGFzIGl0IGFsbG93cyB0byB1c2UgV0VMTCBmb3JtYXR0ZWQgbXVsdGkgbGluZSB0ZW1wbGF0ZSBzdHJpbmdzLi4uXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bIFxcdF0rL2csIFwiIFwiKTtcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcc1xccysvZywgXCJcXG5cIik7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfSxcbiAgICBidWlsZE5hbWVzcGFjZUNvbmZsaWN0RXJyb3IocnVsZSkge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBgTmFtZXNwYWNlIGNvbmZsaWN0IGZvdW5kIGluIGdyYW1tYXIuXFxuYCArXG4gICAgICAgICAgICBgVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHtydWxlLm5hbWV9Pi5cXG5gICtcbiAgICAgICAgICAgIGBUbyByZXNvbHZlIHRoaXMgbWFrZSBzdXJlIGVhY2ggVGVybWluYWwgYW5kIE5vbi1UZXJtaW5hbCBuYW1lcyBhcmUgdW5pcXVlXFxuYCArXG4gICAgICAgICAgICBgVGhpcyBpcyBlYXN5IHRvIGFjY29tcGxpc2ggYnkgdXNpbmcgdGhlIGNvbnZlbnRpb24gdGhhdCBUZXJtaW5hbCBuYW1lcyBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXJcXG5gICtcbiAgICAgICAgICAgIGBhbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gO1xuICAgICAgICByZXR1cm4gZXJyTXNnO1xuICAgIH0sXG4gICAgYnVpbGRBbHRlcm5hdGlvblByZWZpeEFtYmlndWl0eUVycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGF0aE1zZyA9IG1hcChvcHRpb25zLnByZWZpeFBhdGgsIChjdXJyVG9rKSA9PiB0b2tlbkxhYmVsKGN1cnJUb2spKS5qb2luKFwiLCBcIik7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2UgPSBvcHRpb25zLmFsdGVybmF0aW9uLmlkeCA9PT0gMCA/IFwiXCIgOiBvcHRpb25zLmFsdGVybmF0aW9uLmlkeDtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gYEFtYmlndW91cyBhbHRlcm5hdGl2ZXM6IDwke29wdGlvbnMuYW1iaWd1aXR5SW5kaWNlcy5qb2luKFwiICxcIil9PiBkdWUgdG8gY29tbW9uIGxvb2thaGVhZCBwcmVmaXhcXG5gICtcbiAgICAgICAgICAgIGBpbiA8T1Ike29jY3VycmVuY2V9PiBpbnNpZGUgPCR7b3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsXFxuYCArXG4gICAgICAgICAgICBgPCR7cGF0aE1zZ30+IG1heSBhcHBlYXJzIGFzIGEgcHJlZml4IHBhdGggaW4gYWxsIHRoZXNlIGFsdGVybmF0aXZlcy5cXG5gICtcbiAgICAgICAgICAgIGBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0NPTU1PTl9QUkVGSVhcXG5gICtcbiAgICAgICAgICAgIGBGb3IgRnVydGhlciBkZXRhaWxzLmA7XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfSxcbiAgICBidWlsZEFsdGVybmF0aW9uQW1iaWd1aXR5RXJyb3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYXRoTXNnID0gbWFwKG9wdGlvbnMucHJlZml4UGF0aCwgKGN1cnJ0b2spID0+IHRva2VuTGFiZWwoY3VycnRvaykpLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc3Qgb2NjdXJyZW5jZSA9IG9wdGlvbnMuYWx0ZXJuYXRpb24uaWR4ID09PSAwID8gXCJcIiA6IG9wdGlvbnMuYWx0ZXJuYXRpb24uaWR4O1xuICAgICAgICBsZXQgY3Vyck1lc3NhZ2UgPSBgQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7b3B0aW9ucy5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oXCIgLFwiKX0+IGluIDxPUiR7b2NjdXJyZW5jZX0+YCArXG4gICAgICAgICAgICBgIGluc2lkZSA8JHtvcHRpb25zLnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZSxcXG5gICtcbiAgICAgICAgICAgIGA8JHtwYXRoTXNnfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLlxcbmA7XG4gICAgICAgIGN1cnJNZXNzYWdlID1cbiAgICAgICAgICAgIGN1cnJNZXNzYWdlICtcbiAgICAgICAgICAgICAgICBgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTXFxuYCArXG4gICAgICAgICAgICAgICAgYEZvciBGdXJ0aGVyIGRldGFpbHMuYDtcbiAgICAgICAgcmV0dXJuIGN1cnJNZXNzYWdlO1xuICAgIH0sXG4gICAgYnVpbGRFbXB0eVJlcGV0aXRpb25FcnJvcihvcHRpb25zKSB7XG4gICAgICAgIGxldCBkc2xOYW1lID0gZ2V0UHJvZHVjdGlvbkRzbE5hbWUob3B0aW9ucy5yZXBldGl0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVwZXRpdGlvbi5pZHggIT09IDApIHtcbiAgICAgICAgICAgIGRzbE5hbWUgKz0gb3B0aW9ucy5yZXBldGl0aW9uLmlkeDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJNc2cgPSBgVGhlIHJlcGV0aXRpb24gPCR7ZHNsTmFtZX0+IHdpdGhpbiBSdWxlIDwke29wdGlvbnMudG9wTGV2ZWxSdWxlLm5hbWV9PiBjYW4gbmV2ZXIgY29uc3VtZSBhbnkgdG9rZW5zLlxcbmAgK1xuICAgICAgICAgICAgYFRoaXMgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLmA7XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfSxcbiAgICAvLyBUT0RPOiByZW1vdmUgLSBgZXJyb3JzX3B1YmxpY2AgZnJvbSBueWMuY29uZmlnLmpzIGV4Y2x1ZGVcbiAgICAvLyAgICAgICBvbmNlIHRoaXMgbWV0aG9kIGlzIGZ1bGx5IHJlbW92ZWQgZnJvbSB0aGlzIGZpbGVcbiAgICBidWlsZFRva2VuTmFtZUVycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIFwiZGVwcmVjYXRlZFwiO1xuICAgIH0sXG4gICAgYnVpbGRFbXB0eUFsdGVybmF0aW9uRXJyb3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBgQW1iaWd1b3VzIGVtcHR5IGFsdGVybmF0aXZlOiA8JHtvcHRpb25zLmVtcHR5Q2hvaWNlSWR4ICsgMX0+YCArXG4gICAgICAgICAgICBgIGluIDxPUiR7b3B0aW9ucy5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7b3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuXFxuYCArXG4gICAgICAgICAgICBgT25seSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBtYXkgYmUgYW4gZW1wdHkgYWx0ZXJuYXRpdmUuYDtcbiAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICB9LFxuICAgIGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gYEFuIEFsdGVybmF0aW9uIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyNTYgYWx0ZXJuYXRpdmVzOlxcbmAgK1xuICAgICAgICAgICAgYDxPUiR7b3B0aW9ucy5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7b3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuXFxuIGhhcyAke29wdGlvbnMuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGggKyAxfSBhbHRlcm5hdGl2ZXMuYDtcbiAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICB9LFxuICAgIGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBvcHRpb25zLnRvcExldmVsUnVsZS5uYW1lO1xuICAgICAgICBjb25zdCBwYXRoTmFtZXMgPSBtYXAob3B0aW9ucy5sZWZ0UmVjdXJzaW9uUGF0aCwgKGN1cnJSdWxlKSA9PiBjdXJyUnVsZS5uYW1lKTtcbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVBhdGggPSBgJHtydWxlTmFtZX0gLS0+ICR7cGF0aE5hbWVzXG4gICAgICAgICAgICAuY29uY2F0KFtydWxlTmFtZV0pXG4gICAgICAgICAgICAuam9pbihcIiAtLT4gXCIpfWA7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IGBMZWZ0IFJlY3Vyc2lvbiBmb3VuZCBpbiBncmFtbWFyLlxcbmAgK1xuICAgICAgICAgICAgYHJ1bGU6IDwke3J1bGVOYW1lfT4gY2FuIGJlIGludm9rZWQgZnJvbSBpdHNlbGYgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpXFxuYCArXG4gICAgICAgICAgICBgd2l0aG91dCBjb25zdW1pbmcgYW55IFRva2Vucy4gVGhlIGdyYW1tYXIgcGF0aCB0aGF0IGNhdXNlcyB0aGlzIGlzOiBcXG4gJHtsZWZ0UmVjdXJzaXZlUGF0aH1cXG5gICtcbiAgICAgICAgICAgIGAgVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uXFxuYCArXG4gICAgICAgICAgICBgc2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MTF9wYXJzZXIjTGVmdF9mYWN0b3JpbmcuYDtcbiAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICB9LFxuICAgIC8vIFRPRE86IHJlbW92ZSAtIGBlcnJvcnNfcHVibGljYCBmcm9tIG55Yy5jb25maWcuanMgZXhjbHVkZVxuICAgIC8vICAgICAgIG9uY2UgdGhpcyBtZXRob2QgaXMgZnVsbHkgcmVtb3ZlZCBmcm9tIHRoaXMgZmlsZVxuICAgIGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3Iob3B0aW9ucykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gXCJkZXByZWNhdGVkXCI7XG4gICAgfSxcbiAgICBidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3Iob3B0aW9ucykge1xuICAgICAgICBsZXQgcnVsZU5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zLnRvcExldmVsUnVsZSBpbnN0YW5jZW9mIFJ1bGUpIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gb3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gb3B0aW9ucy50b3BMZXZlbFJ1bGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyTXNnID0gYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7cnVsZU5hbWV9PC0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBncmFtbWFyOiAtPiR7b3B0aW9ucy5ncmFtbWFyTmFtZX08LWA7XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnNfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSwgfSBmcm9tIFwiLi4vcGFyc2VyL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgZm9yRWFjaCwgdmFsdWVzIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgR0FzdFZpc2l0b3IgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHcmFtbWFyKHRvcExldmVscywgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCByZWZSZXNvbHZlciA9IG5ldyBHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yKHRvcExldmVscywgZXJyTXNnUHJvdmlkZXIpO1xuICAgIHJlZlJlc29sdmVyLnJlc29sdmVSZWZzKCk7XG4gICAgcmV0dXJuIHJlZlJlc29sdmVyLmVycm9ycztcbn1cbmV4cG9ydCBjbGFzcyBHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIGV4dGVuZHMgR0FzdFZpc2l0b3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWVUb1RvcFJ1bGUsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubmFtZVRvVG9wUnVsZSA9IG5hbWVUb1RvcFJ1bGU7XG4gICAgICAgIHRoaXMuZXJyTXNnUHJvdmlkZXIgPSBlcnJNc2dQcm92aWRlcjtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICB9XG4gICAgcmVzb2x2ZVJlZnMoKSB7XG4gICAgICAgIGZvckVhY2godmFsdWVzKHRoaXMubmFtZVRvVG9wUnVsZSksIChwcm9kKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJUb3BMZXZlbCA9IHByb2Q7XG4gICAgICAgICAgICBwcm9kLmFjY2VwdCh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZpc2l0Tm9uVGVybWluYWwobm9kZSkge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLm5hbWVUb1RvcFJ1bGVbbm9kZS5ub25UZXJtaW5hbE5hbWVdO1xuICAgICAgICBpZiAoIXJlZikge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5lcnJNc2dQcm92aWRlci5idWlsZFJ1bGVOb3RGb3VuZEVycm9yKHRoaXMuY3VyclRvcExldmVsLCBub2RlKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLlVOUkVTT0xWRURfU1VCUlVMRV9SRUYsXG4gICAgICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuY3VyclRvcExldmVsLm5hbWUsXG4gICAgICAgICAgICAgICAgdW5yZXNvbHZlZFJlZk5hbWU6IG5vZGUubm9uVGVybWluYWxOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlLnJlZmVyZW5jZWRSdWxlID0gcmVmO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBjbG9uZSwgZHJvcCwgZHJvcFJpZ2h0LCBmaXJzdCBhcyBfZmlyc3QsIGZvckVhY2gsIGlzRW1wdHksIGxhc3QsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi9maXJzdC5qc1wiO1xuaW1wb3J0IHsgUmVzdFdhbGtlciB9IGZyb20gXCIuL3Jlc3QuanNcIjtcbmltcG9ydCB7IEFsdGVybmF0aW9uLCBBbHRlcm5hdGl2ZSwgTm9uVGVybWluYWwsIE9wdGlvbiwgUmVwZXRpdGlvbiwgUmVwZXRpdGlvbk1hbmRhdG9yeSwgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IsIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLCBSdWxlLCBUZXJtaW5hbCwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0TmV4dFBvc3NpYmxlVG9rZW5zV2Fsa2VyIGV4dGVuZHMgUmVzdFdhbGtlciB7XG4gICAgY29uc3RydWN0b3IodG9wUHJvZCwgcGF0aCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRvcFByb2QgPSB0b3BQcm9kO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLnBvc3NpYmxlVG9rVHlwZXMgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZSA9IDA7XG4gICAgICAgIHRoaXMuZm91bmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0F0RW5kT2ZQYXRoID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0V2Fsa2luZygpIHtcbiAgICAgICAgdGhpcy5mb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wYXRoLnJ1bGVTdGFja1swXSAhPT0gdGhpcy50b3BQcm9kLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGltbXV0YWJsZSBmb3IgdGhlIHdpblxuICAgICAgICB0aGlzLnJ1bGVTdGFjayA9IGNsb25lKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKTsgLy8gaW50ZWxpaiBidWcgcmVxdWlyZXMgYXNzZXJ0aW9uXG4gICAgICAgIHRoaXMub2NjdXJyZW5jZVN0YWNrID0gY2xvbmUodGhpcy5wYXRoLm9jY3VycmVuY2VTdGFjaykucmV2ZXJzZSgpOyAvLyBpbnRlbGlqIGJ1ZyByZXF1aXJlcyBhc3NlcnRpb25cbiAgICAgICAgLy8gYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBmaXJzdCBwcm9kdWN0aW9uIGlzIHZhbGlkLCB3ZSBub3cgc2VlayB0aGUgMm5kIHByb2R1Y3Rpb25cbiAgICAgICAgdGhpcy5ydWxlU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMub2NjdXJyZW5jZVN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUV4cGVjdGVkTmV4dCgpO1xuICAgICAgICB0aGlzLndhbGsodGhpcy50b3BQcm9kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zc2libGVUb2tUeXBlcztcbiAgICB9XG4gICAgd2Fsayhwcm9kLCBwcmV2UmVzdCA9IFtdKSB7XG4gICAgICAgIC8vIHN0b3Agc2Nhbm5pbmcgb25jZSB3ZSBmb3VuZCB0aGUgcGF0aFxuICAgICAgICBpZiAoIXRoaXMuZm91bmQpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGsocHJvZCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdhbGtQcm9kUmVmKHJlZlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBmb3VuZCB0aGUgbmV4dCBwcm9kdWN0aW9uLCBuZWVkIHRvIGtlZXAgd2Fsa2luZyBpbiBpdFxuICAgICAgICBpZiAocmVmUHJvZC5yZWZlcmVuY2VkUnVsZS5uYW1lID09PSB0aGlzLm5leHRQcm9kdWN0aW9uTmFtZSAmJlxuICAgICAgICAgICAgcmVmUHJvZC5pZHggPT09IHRoaXMubmV4dFByb2R1Y3Rpb25PY2N1cnJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsUmVzdCA9IGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUV4cGVjdGVkTmV4dCgpO1xuICAgICAgICAgICAgdGhpcy53YWxrKHJlZlByb2QucmVmZXJlbmNlZFJ1bGUsIGZ1bGxSZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVFeHBlY3RlZE5leHQoKSB7XG4gICAgICAgIC8vIG5lZWQgdG8gY29uc3VtZSB0aGUgVGVybWluYWxcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5ydWxlU3RhY2spKSB7XG4gICAgICAgICAgICAvLyBtdXN0IHJlc2V0IG5leHRQcm9kdWN0aW9uWFhYIHRvIGF2b2lkIHdhbGtpbmcgZG93biBhbm90aGVyIFRvcCBMZXZlbCBwcm9kdWN0aW9uIHdoaWxlIHdoYXQgd2UgYXJlXG4gICAgICAgICAgICAvLyByZWFsbHkgc2Vla2luZyBpcyB0aGUgbGFzdCBUZXJtaW5hbC4uLlxuICAgICAgICAgICAgdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2UgPSAwO1xuICAgICAgICAgICAgdGhpcy5pc0F0RW5kT2ZQYXRoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmV4dFByb2R1Y3Rpb25OYW1lID0gdGhpcy5ydWxlU3RhY2sucG9wKCk7XG4gICAgICAgICAgICB0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZSA9IHRoaXMub2NjdXJyZW5jZVN0YWNrLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE5leHRBZnRlclRva2VuV2Fsa2VyIGV4dGVuZHMgQWJzdHJhY3ROZXh0UG9zc2libGVUb2tlbnNXYWxrZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvcFByb2QsIHBhdGgpIHtcbiAgICAgICAgc3VwZXIodG9wUHJvZCwgcGF0aCk7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsTmFtZSA9IFwiXCI7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSA9IDA7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsTmFtZSA9IHRoaXMucGF0aC5sYXN0VG9rLm5hbWU7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSA9IHRoaXMucGF0aC5sYXN0VG9rT2NjdXJyZW5jZTtcbiAgICB9XG4gICAgd2Fsa1Rlcm1pbmFsKHRlcm1pbmFsLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBdEVuZE9mUGF0aCAmJlxuICAgICAgICAgICAgdGVybWluYWwudGVybWluYWxUeXBlLm5hbWUgPT09IHRoaXMubmV4dFRlcm1pbmFsTmFtZSAmJlxuICAgICAgICAgICAgdGVybWluYWwuaWR4ID09PSB0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2UgJiZcbiAgICAgICAgICAgICF0aGlzLmZvdW5kKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsUmVzdCA9IGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCk7XG4gICAgICAgICAgICBjb25zdCByZXN0UHJvZCA9IG5ldyBBbHRlcm5hdGl2ZSh7IGRlZmluaXRpb246IGZ1bGxSZXN0IH0pO1xuICAgICAgICAgICAgdGhpcy5wb3NzaWJsZVRva1R5cGVzID0gZmlyc3QocmVzdFByb2QpO1xuICAgICAgICAgICAgdGhpcy5mb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFRoaXMgd2Fsa2VyIG9ubHkgXCJ3YWxrc1wiIGEgc2luZ2xlIFwiVE9QXCIgbGV2ZWwgaW4gdGhlIEdyYW1tYXIgQXN0LCB0aGlzIG1lYW5zXG4gKiBpdCBuZXZlciBcImZvbGxvd3NcIiBwcm9kdWN0aW9uIHJlZnNcbiAqL1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIGV4dGVuZHMgUmVzdFdhbGtlciB7XG4gICAgY29uc3RydWN0b3IodG9wUnVsZSwgb2NjdXJyZW5jZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRvcFJ1bGUgPSB0b3BSdWxlO1xuICAgICAgICB0aGlzLm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHtcbiAgICAgICAgICAgIHRva2VuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvY2N1cnJlbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc0VuZE9mUnVsZTogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGFydFdhbGtpbmcoKSB7XG4gICAgICAgIHRoaXMud2Fsayh0aGlzLnRvcFJ1bGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciBleHRlbmRzIEFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIHtcbiAgICB3YWxrTWFueShtYW55UHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmIChtYW55UHJvZC5pZHggPT09IHRoaXMub2NjdXJyZW5jZSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZnRlck1hbnkgPSBfZmlyc3QoY3VyclJlc3QuY29uY2F0KHByZXZSZXN0KSk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdC5pc0VuZE9mUnVsZSA9IGZpcnN0QWZ0ZXJNYW55ID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RBZnRlck1hbnkgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0LnRva2VuID0gZmlyc3RBZnRlck1hbnkudGVybWluYWxUeXBlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0Lm9jY3VycmVuY2UgPSBmaXJzdEFmdGVyTWFueS5pZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlci53YWxrTWFueShtYW55UHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBOZXh0VGVybWluYWxBZnRlck1hbnlTZXBXYWxrZXIgZXh0ZW5kcyBBYnN0cmFjdE5leHRUZXJtaW5hbEFmdGVyUHJvZHVjdGlvbldhbGtlciB7XG4gICAgd2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICBpZiAobWFueVNlcFByb2QuaWR4ID09PSB0aGlzLm9jY3VycmVuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWZ0ZXJNYW55U2VwID0gX2ZpcnN0KGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCkpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGUgPSBmaXJzdEFmdGVyTWFueVNlcCA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QWZ0ZXJNYW55U2VwIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC50b2tlbiA9IGZpcnN0QWZ0ZXJNYW55U2VwLnRlcm1pbmFsVHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC5vY2N1cnJlbmNlID0gZmlyc3RBZnRlck1hbnlTZXAuaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIud2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTmV4dFRlcm1pbmFsQWZ0ZXJBdExlYXN0T25lV2Fsa2VyIGV4dGVuZHMgQWJzdHJhY3ROZXh0VGVybWluYWxBZnRlclByb2R1Y3Rpb25XYWxrZXIge1xuICAgIHdhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKGF0TGVhc3RPbmVQcm9kLmlkeCA9PT0gdGhpcy5vY2N1cnJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFmdGVyQXRMZWFzdE9uZSA9IF9maXJzdChjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpKTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0LmlzRW5kT2ZSdWxlID0gZmlyc3RBZnRlckF0TGVhc3RPbmUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEFmdGVyQXRMZWFzdE9uZSBpbnN0YW5jZW9mIFRlcm1pbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQudG9rZW4gPSBmaXJzdEFmdGVyQXRMZWFzdE9uZS50ZXJtaW5hbFR5cGU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQub2NjdXJyZW5jZSA9IGZpcnN0QWZ0ZXJBdExlYXN0T25lLmlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gVE9ETzogcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gaW4gdGhlIEFmdGVyV2Fsa2Vyc1xuZXhwb3J0IGNsYXNzIE5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciBleHRlbmRzIEFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIHtcbiAgICB3YWxrQXRMZWFzdE9uZVNlcChhdGxlYXN0T25lU2VwUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmIChhdGxlYXN0T25lU2VwUHJvZC5pZHggPT09IHRoaXMub2NjdXJyZW5jZSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZnRlcmZpcnN0QWZ0ZXJBdExlYXN0T25lU2VwID0gX2ZpcnN0KGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCkpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGUgPSBmaXJzdEFmdGVyZmlyc3RBZnRlckF0TGVhc3RPbmVTZXAgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEFmdGVyZmlyc3RBZnRlckF0TGVhc3RPbmVTZXAgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0LnRva2VuID0gZmlyc3RBZnRlcmZpcnN0QWZ0ZXJBdExlYXN0T25lU2VwLnRlcm1pbmFsVHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC5vY2N1cnJlbmNlID0gZmlyc3RBZnRlcmZpcnN0QWZ0ZXJBdExlYXN0T25lU2VwLmlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtBdExlYXN0T25lU2VwKGF0bGVhc3RPbmVTZXBQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBvc3NpYmxlUGF0aHNGcm9tKHRhcmdldERlZiwgbWF4TGVuZ3RoLCBjdXJyUGF0aCA9IFtdKSB7XG4gICAgLy8gYXZvaWQgc2lkZSBlZmZlY3RzXG4gICAgY3VyclBhdGggPSBjbG9uZShjdXJyUGF0aCk7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICAvLyBUT0RPOiBhdm9pZCBpbm5lciBmdW5jc1xuICAgIGZ1bmN0aW9uIHJlbWFpbmluZ1BhdGhXaXRoKG5leHREZWYpIHtcbiAgICAgICAgcmV0dXJuIG5leHREZWYuY29uY2F0KGRyb3AodGFyZ2V0RGVmLCBpICsgMSkpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBhdm9pZCBpbm5lciBmdW5jc1xuICAgIGZ1bmN0aW9uIGdldEFsdGVybmF0aXZlc0ZvclByb2QoZGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZXMgPSBwb3NzaWJsZVBhdGhzRnJvbShyZW1haW5pbmdQYXRoV2l0aChkZWZpbml0aW9uKSwgbWF4TGVuZ3RoLCBjdXJyUGF0aCk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KGFsdGVybmF0aXZlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hbmRhdG9yeSBwcm9kdWN0aW9ucyB3aWxsIGhhbHQgdGhlIGxvb3AgYXMgdGhlIHBhdGhzIGNvbXB1dGVkIGZyb20gdGhlaXIgcmVjdXJzaXZlIGNhbGxzIHdpbGwgYWxyZWFkeSBjb250YWluIHRoZVxuICAgICAqIGZvbGxvd2luZyAocmVzdCkgb2YgdGhlIHRhcmdldERlZi5cbiAgICAgKlxuICAgICAqIEZvciBvcHRpb25hbCBwcm9kdWN0aW9ucyAoT3B0aW9uL1JlcGV0aXRpb24vLi4uKSB0aGUgbG9vcCB3aWxsIGNvbnRpbnVlIHRvIHJlcHJlc2VudCB0aGUgcGF0aHMgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGVcbiAgICAgKiB0aGUgb3B0aW9uYWwgcHJvZHVjdGlvbi5cbiAgICAgKi9cbiAgICB3aGlsZSAoY3VyclBhdGgubGVuZ3RoIDwgbWF4TGVuZ3RoICYmIGkgPCB0YXJnZXREZWYubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByb2QgPSB0YXJnZXREZWZbaV07XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKHByb2QuZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZChwcm9kLmRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldEFsdGVybmF0aXZlc0ZvclByb2QocHJvZC5kZWZpbml0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGVmID0gcHJvZC5kZWZpbml0aW9uLmNvbmNhdChbXG4gICAgICAgICAgICAgICAgbmV3IFJlcGV0aXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBwcm9kLmRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKG5ld0RlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEZWYgPSBbXG4gICAgICAgICAgICAgICAgbmV3IEFsdGVybmF0aXZlKHsgZGVmaW5pdGlvbjogcHJvZC5kZWZpbml0aW9uIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBSZXBldGl0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogW25ldyBUZXJtaW5hbCh7IHRlcm1pbmFsVHlwZTogcHJvZC5zZXBhcmF0b3IgfSldLmNvbmNhdChwcm9kLmRlZmluaXRpb24pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKG5ld0RlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEZWYgPSBwcm9kLmRlZmluaXRpb24uY29uY2F0KFtcbiAgICAgICAgICAgICAgICBuZXcgUmVwZXRpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb246IFtuZXcgVGVybWluYWwoeyB0ZXJtaW5hbFR5cGU6IHByb2Quc2VwYXJhdG9yIH0pXS5jb25jYXQocHJvZC5kZWZpbml0aW9uKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZChuZXdEZWYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEZWYgPSBwcm9kLmRlZmluaXRpb24uY29uY2F0KFtcbiAgICAgICAgICAgICAgICBuZXcgUmVwZXRpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb246IHByb2QuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZChuZXdEZWYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgZm9yRWFjaChwcm9kLmRlZmluaXRpb24sIChjdXJyQWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBhIGxpbWl0ZWQgY2hlY2sgZm9yIGVtcHR5IGFsdGVybmF0aXZlc1xuICAgICAgICAgICAgICAgIC8vICAgSXQgd291bGQgcHJldmVudCBhIGNvbW1vbiBjYXNlIG9mIGluZmluaXRlIGxvb3BzIGR1cmluZyBwYXJzZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgICAgICAgICAgICAgLy8gICBIb3dldmVyICoqaW4tZGlyZWN0bHkqKiBlbXB0eSBhbHRlcm5hdGl2ZXMgbWF5IHN0aWxsIGNhdXNlIGlzc3Vlcy5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eShjdXJyQWx0LmRlZmluaXRpb24pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKGN1cnJBbHQuZGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgY3VyclBhdGgucHVzaChwcm9kLnRlcm1pbmFsVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBwYXJ0aWFsUGF0aDogY3VyclBhdGgsXG4gICAgICAgIHN1ZmZpeERlZjogZHJvcCh0YXJnZXREZWYsIGkpLFxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dFBvc3NpYmxlVG9rZW5zQWZ0ZXIoaW5pdGlhbERlZiwgdG9rZW5WZWN0b3IsIHRva01hdGNoZXIsIG1heExvb2tBaGVhZCkge1xuICAgIGNvbnN0IEVYSVRfTk9OX1RFUk1JTkFMID0gXCJFWElUX05PTkVfVEVSTUlOQUxcIjtcbiAgICAvLyB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBBcnJheSBlYWNoIHRpbWUuXG4gICAgY29uc3QgRVhJVF9OT05fVEVSTUlOQUxfQVJSID0gW0VYSVRfTk9OX1RFUk1JTkFMXTtcbiAgICBjb25zdCBFWElUX0FMVEVSTkFUSVZFID0gXCJFWElUX0FMVEVSTkFUSVZFXCI7XG4gICAgbGV0IGZvdW5kQ29tcGxldGVQYXRoID0gZmFsc2U7XG4gICAgY29uc3QgdG9rZW5WZWN0b3JMZW5ndGggPSB0b2tlblZlY3Rvci5sZW5ndGg7XG4gICAgY29uc3QgbWluaW1hbEFsdGVybmF0aXZlc0luZGV4ID0gdG9rZW5WZWN0b3JMZW5ndGggLSBtYXhMb29rQWhlYWQgLSAxO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXTtcbiAgICBwb3NzaWJsZVBhdGhzLnB1c2goe1xuICAgICAgICBpZHg6IC0xLFxuICAgICAgICBkZWY6IGluaXRpYWxEZWYsXG4gICAgICAgIHJ1bGVTdGFjazogW10sXG4gICAgICAgIG9jY3VycmVuY2VTdGFjazogW10sXG4gICAgfSk7XG4gICAgd2hpbGUgKCFpc0VtcHR5KHBvc3NpYmxlUGF0aHMpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJQYXRoID0gcG9zc2libGVQYXRocy5wb3AoKTtcbiAgICAgICAgLy8gc2tpcCBhbHRlcm5hdGl2ZXMgaWYgbm8gbW9yZSByZXN1bHRzIGNhbiBiZSBmb3VuZCAoYXNzdW1pbmcgZGV0ZXJtaW5pc3RpYyBncmFtbWFyIHdpdGggZml4ZWQgbG9va2FoZWFkKVxuICAgICAgICBpZiAoY3VyclBhdGggPT09IEVYSVRfQUxURVJOQVRJVkUpIHtcbiAgICAgICAgICAgIGlmIChmb3VuZENvbXBsZXRlUGF0aCAmJlxuICAgICAgICAgICAgICAgIGxhc3QocG9zc2libGVQYXRocykuaWR4IDw9IG1pbmltYWxBbHRlcm5hdGl2ZXNJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBpcnJlbGV2YW50IGFsdGVybmF0aXZlXG4gICAgICAgICAgICAgICAgcG9zc2libGVQYXRocy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJEZWYgPSBjdXJyUGF0aC5kZWY7XG4gICAgICAgIGNvbnN0IGN1cnJJZHggPSBjdXJyUGF0aC5pZHg7XG4gICAgICAgIGNvbnN0IGN1cnJSdWxlU3RhY2sgPSBjdXJyUGF0aC5ydWxlU3RhY2s7XG4gICAgICAgIGNvbnN0IGN1cnJPY2N1cnJlbmNlU3RhY2sgPSBjdXJyUGF0aC5vY2N1cnJlbmNlU3RhY2s7XG4gICAgICAgIC8vIEZvciBFeGFtcGxlOiBhbiBlbXB0eSBwYXRoIGNvdWxkIGV4aXN0IGluIGEgdmFsaWQgZ3JhbW1hciBpbiB0aGUgY2FzZSBvZiBhbiBFTVBUWV9BTFRcbiAgICAgICAgaWYgKGlzRW1wdHkoY3VyckRlZikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2QgPSBjdXJyRGVmWzBdO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocHJvZCA9PT0gRVhJVF9OT05fVEVSTUlOQUwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoID0ge1xuICAgICAgICAgICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgICAgICAgICBkZWY6IGRyb3AoY3VyckRlZiksXG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBkcm9wUmlnaHQoY3VyclJ1bGVTdGFjayksXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBkcm9wUmlnaHQoY3Vyck9jY3VycmVuY2VTdGFjayksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoY3VycklkeCA8IHRva2VuVmVjdG9yTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRJZHggPSBjdXJySWR4ICsgMTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxUb2tlbiA9IHRva2VuVmVjdG9yW25leHRJZHhdO1xuICAgICAgICAgICAgICAgIGlmICh0b2tNYXRjaGVyKGFjdHVhbFRva2VuLCBwcm9kLnRlcm1pbmFsVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhdGggPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHg6IG5leHRJZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWY6IGRyb3AoY3VyckRlZiksXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycklkeCA9PT0gdG9rZW5WZWN0b3JMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gSUdOT1JFIEFCT1ZFIEVMU0VcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUb2tlblR5cGU6IHByb2QudGVybWluYWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0VG9rZW5PY2N1cnJlbmNlOiBwcm9kLmlkeCxcbiAgICAgICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBjdXJyUnVsZVN0YWNrLFxuICAgICAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm91bmRDb21wbGV0ZVBhdGggPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgTm9uVGVybWluYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1J1bGVTdGFjayA9IGNsb25lKGN1cnJSdWxlU3RhY2spO1xuICAgICAgICAgICAgbmV3UnVsZVN0YWNrLnB1c2gocHJvZC5ub25UZXJtaW5hbE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgbmV3T2NjdXJyZW5jZVN0YWNrID0gY2xvbmUoY3Vyck9jY3VycmVuY2VTdGFjayk7XG4gICAgICAgICAgICBuZXdPY2N1cnJlbmNlU3RhY2sucHVzaChwcm9kLmlkeCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBwcm9kLmRlZmluaXRpb24uY29uY2F0KEVYSVRfTk9OX1RFUk1JTkFMX0FSUiwgZHJvcChjdXJyRGVmKSksXG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBuZXdSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBuZXdPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgICAgICAvLyB0aGUgb3JkZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIG1lYW5pbmdmdWwsIEZJTE8gKExhc3QgcGF0aCB3aWxsIGJlIHRyYXZlcnNlZCBmaXJzdCkuXG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aFdpdGhvdXQgPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogZHJvcChjdXJyRGVmKSxcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aFdpdGhvdXQpO1xuICAgICAgICAgICAgLy8gcmVxdWlyZWQgbWFya2VyIHRvIGF2b2lkIGJhY2t0cmFja2luZyBwYXRocyB3aG9zZSBoaWdoZXIgcHJpb3JpdHkgYWx0ZXJuYXRpdmVzIGFscmVhZHkgbWF0Y2hlZFxuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKEVYSVRfQUxURVJOQVRJVkUpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFBhdGhXaXRoID0ge1xuICAgICAgICAgICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgICAgICAgICBkZWY6IHByb2QuZGVmaW5pdGlvbi5jb25jYXQoZHJvcChjdXJyRGVmKSksXG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBjdXJyUnVsZVN0YWNrLFxuICAgICAgICAgICAgICAgIG9jY3VycmVuY2VTdGFjazogY3Vyck9jY3VycmVuY2VTdGFjayxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwb3NzaWJsZVBhdGhzLnB1c2gobmV4dFBhdGhXaXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICAgICAgLy8gVE9ETzooVEhFIE5FVyBvcGVyYXRvcnMgaGVyZSB0YWtlIGEgd2hpbGUuLi4pIChjb252ZXJ0IG9uY2U/KVxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSXRlcmF0aW9uID0gbmV3IFJlcGV0aXRpb24oe1xuICAgICAgICAgICAgICAgIGRlZmluaXRpb246IHByb2QuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICBpZHg6IHByb2QuaWR4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGVmID0gcHJvZC5kZWZpbml0aW9uLmNvbmNhdChbc2Vjb25kSXRlcmF0aW9uXSwgZHJvcChjdXJyRGVmKSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBuZXh0RGVmLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIC8vIFRPRE86KFRIRSBORVcgb3BlcmF0b3JzIGhlcmUgdGFrZSBhIHdoaWxlLi4uKSAoY29udmVydCBvbmNlPylcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvckdhc3QgPSBuZXcgVGVybWluYWwoe1xuICAgICAgICAgICAgICAgIHRlcm1pbmFsVHlwZTogcHJvZC5zZXBhcmF0b3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEl0ZXJhdGlvbiA9IG5ldyBSZXBldGl0aW9uKHtcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBbc2VwYXJhdG9yR2FzdF0uY29uY2F0KHByb2QuZGVmaW5pdGlvbiksXG4gICAgICAgICAgICAgICAgaWR4OiBwcm9kLmlkeCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV4dERlZiA9IHByb2QuZGVmaW5pdGlvbi5jb25jYXQoW3NlY29uZEl0ZXJhdGlvbl0sIGRyb3AoY3VyckRlZikpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFBhdGggPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogbmV4dERlZixcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAvLyB0aGUgb3JkZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIG1lYW5pbmdmdWwsIEZJTE8gKExhc3QgcGF0aCB3aWxsIGJlIHRyYXZlcnNlZCBmaXJzdCkuXG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aFdpdGhvdXQgPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogZHJvcChjdXJyRGVmKSxcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aFdpdGhvdXQpO1xuICAgICAgICAgICAgLy8gcmVxdWlyZWQgbWFya2VyIHRvIGF2b2lkIGJhY2t0cmFja2luZyBwYXRocyB3aG9zZSBoaWdoZXIgcHJpb3JpdHkgYWx0ZXJuYXRpdmVzIGFscmVhZHkgbWF0Y2hlZFxuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKEVYSVRfQUxURVJOQVRJVkUpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yR2FzdCA9IG5ldyBUZXJtaW5hbCh7XG4gICAgICAgICAgICAgICAgdGVybWluYWxUeXBlOiBwcm9kLnNlcGFyYXRvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbnRoUmVwZXRpdGlvbiA9IG5ldyBSZXBldGl0aW9uKHtcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBbc2VwYXJhdG9yR2FzdF0uY29uY2F0KHByb2QuZGVmaW5pdGlvbiksXG4gICAgICAgICAgICAgICAgaWR4OiBwcm9kLmlkeCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV4dERlZiA9IHByb2QuZGVmaW5pdGlvbi5jb25jYXQoW250aFJlcGV0aXRpb25dLCBkcm9wKGN1cnJEZWYpKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoV2l0aCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBuZXh0RGVmLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoV2l0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb24pIHtcbiAgICAgICAgICAgIC8vIHRoZSBvcmRlciBvZiBhbHRlcm5hdGl2ZXMgaXMgbWVhbmluZ2Z1bCwgRklMTyAoTGFzdCBwYXRoIHdpbGwgYmUgdHJhdmVyc2VkIGZpcnN0KS5cbiAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoV2l0aG91dCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBkcm9wKGN1cnJEZWYpLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoV2l0aG91dCk7XG4gICAgICAgICAgICAvLyByZXF1aXJlZCBtYXJrZXIgdG8gYXZvaWQgYmFja3RyYWNraW5nIHBhdGhzIHdob3NlIGhpZ2hlciBwcmlvcml0eSBhbHRlcm5hdGl2ZXMgYWxyZWFkeSBtYXRjaGVkXG4gICAgICAgICAgICBwb3NzaWJsZVBhdGhzLnB1c2goRVhJVF9BTFRFUk5BVElWRSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBhbiBlbXB0eSByZXBldGl0aW9uIHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcHMgaGVyZSwgd2lsbCB0aGUgcGFyc2VyIGRldGVjdCB0aGlzIGluIHNlbGZBbmFseXNpcz9cbiAgICAgICAgICAgIGNvbnN0IG50aFJlcGV0aXRpb24gPSBuZXcgUmVwZXRpdGlvbih7XG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogcHJvZC5kZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgIGlkeDogcHJvZC5pZHgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5leHREZWYgPSBwcm9kLmRlZmluaXRpb24uY29uY2F0KFtudGhSZXBldGl0aW9uXSwgZHJvcChjdXJyRGVmKSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aFdpdGggPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogbmV4dERlZixcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aFdpdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgLy8gdGhlIG9yZGVyIG9mIGFsdGVybmF0aXZlcyBpcyBtZWFuaW5nZnVsLCBGSUxPIChMYXN0IHBhdGggd2lsbCBiZSB0cmF2ZXJzZWQgZmlyc3QpLlxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHByb2QuZGVmaW5pdGlvbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJBbHQgPSBwcm9kLmRlZmluaXRpb25baV07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdFBhdGggPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBjdXJyQWx0LmRlZmluaXRpb24uY29uY2F0KGRyb3AoY3VyckRlZikpLFxuICAgICAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgICAgIG9jY3VycmVuY2VTdGFjazogY3Vyck9jY3VycmVuY2VTdGFjayxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChjdXJyQWx0UGF0aCk7XG4gICAgICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKEVYSVRfQUxURVJOQVRJVkUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGl2ZSkge1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBwcm9kLmRlZmluaXRpb24uY29uY2F0KGRyb3AoY3VyckRlZikpLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUnVsZSkge1xuICAgICAgICAgICAgLy8gbGFzdCBiZWNhdXNlIHdlIHNob3VsZCBvbmx5IGVuY291bnRlciBhdCBtb3N0IGEgc2luZ2xlIG9uZSBvZiB0aGVzZSBwZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChleHBhbmRUb3BMZXZlbFJ1bGUocHJvZCwgY3VycklkeCwgY3VyclJ1bGVTdGFjaywgY3Vyck9jY3VycmVuY2VTdGFjaykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZXhwYW5kVG9wTGV2ZWxSdWxlKHRvcFJ1bGUsIGN1cnJJZHgsIGN1cnJSdWxlU3RhY2ssIGN1cnJPY2N1cnJlbmNlU3RhY2spIHtcbiAgICBjb25zdCBuZXdSdWxlU3RhY2sgPSBjbG9uZShjdXJyUnVsZVN0YWNrKTtcbiAgICBuZXdSdWxlU3RhY2sucHVzaCh0b3BSdWxlLm5hbWUpO1xuICAgIGNvbnN0IG5ld0N1cnJPY2N1cnJlbmNlU3RhY2sgPSBjbG9uZShjdXJyT2NjdXJyZW5jZVN0YWNrKTtcbiAgICAvLyB0b3AgcnVsZSBpcyBhbHdheXMgYXNzdW1lZCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggb2NjdXJyZW5jZSBpbmRleCAxXG4gICAgbmV3Q3Vyck9jY3VycmVuY2VTdGFjay5wdXNoKDEpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgZGVmOiB0b3BSdWxlLmRlZmluaXRpb24sXG4gICAgICAgIHJ1bGVTdGFjazogbmV3UnVsZVN0YWNrLFxuICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IG5ld0N1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVycHJldGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXZlcnksIGZsYXR0ZW4sIGZvckVhY2gsIGhhcywgaXNFbXB0eSwgbWFwLCByZWR1Y2UgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBwb3NzaWJsZVBhdGhzRnJvbSB9IGZyb20gXCIuL2ludGVycHJldGVyLmpzXCI7XG5pbXBvcnQgeyBSZXN0V2Fsa2VyIH0gZnJvbSBcIi4vcmVzdC5qc1wiO1xuaW1wb3J0IHsgdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlciwgdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlck5vQ2F0ZWdvcmllcywgfSBmcm9tIFwiLi4vLi4vc2Nhbi90b2tlbnMuanNcIjtcbmltcG9ydCB7IEFsdGVybmF0aW9uLCBBbHRlcm5hdGl2ZSBhcyBBbHRlcm5hdGl2ZUdBU1QsIEdBc3RWaXNpdG9yLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IHZhciBQUk9EX1RZUEU7XG4oZnVuY3Rpb24gKFBST0RfVFlQRSkge1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJPUFRJT05cIl0gPSAwXSA9IFwiT1BUSU9OXCI7XG4gICAgUFJPRF9UWVBFW1BST0RfVFlQRVtcIlJFUEVUSVRJT05cIl0gPSAxXSA9IFwiUkVQRVRJVElPTlwiO1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJSRVBFVElUSU9OX01BTkRBVE9SWVwiXSA9IDJdID0gXCJSRVBFVElUSU9OX01BTkRBVE9SWVwiO1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJSRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUlwiXSA9IDNdID0gXCJSRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUlwiO1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJSRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SXCJdID0gNF0gPSBcIlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1JcIjtcbiAgICBQUk9EX1RZUEVbUFJPRF9UWVBFW1wiQUxURVJOQVRJT05cIl0gPSA1XSA9IFwiQUxURVJOQVRJT05cIjtcbn0pKFBST0RfVFlQRSB8fCAoUFJPRF9UWVBFID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9kVHlwZShwcm9kKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvZCBpbnN0YW5jZW9mIE9wdGlvbiB8fCBwcm9kID09PSBcIk9wdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBQUk9EX1RZUEUuT1BUSU9OO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbiB8fCBwcm9kID09PSBcIlJlcGV0aXRpb25cIikge1xuICAgICAgICByZXR1cm4gUFJPRF9UWVBFLlJFUEVUSVRJT047XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5IHx8XG4gICAgICAgIHByb2QgPT09IFwiUmVwZXRpdGlvbk1hbmRhdG9yeVwiKSB7XG4gICAgICAgIHJldHVybiBQUk9EX1RZUEUuUkVQRVRJVElPTl9NQU5EQVRPUlk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciB8fFxuICAgICAgICBwcm9kID09PSBcIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yXCIpIHtcbiAgICAgICAgcmV0dXJuIFBST0RfVFlQRS5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIHx8XG4gICAgICAgIHByb2QgPT09IFwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3JcIikge1xuICAgICAgICByZXR1cm4gUFJPRF9UWVBFLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1I7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbiB8fCBwcm9kID09PSBcIkFsdGVybmF0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIFBST0RfVFlQRS5BTFRFUk5BVElPTjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExvb2thaGVhZFBhdGhzKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG9jY3VycmVuY2UsIHJ1bGUsIHByb2RUeXBlLCBtYXhMb29rYWhlYWQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdHlwZSA9IGdldFByb2RUeXBlKHByb2RUeXBlKTtcbiAgICBpZiAodHlwZSA9PT0gUFJPRF9UWVBFLkFMVEVSTkFUSU9OKSB7XG4gICAgICAgIHJldHVybiBnZXRMb29rYWhlYWRQYXRoc0Zvck9yKG9jY3VycmVuY2UsIHJ1bGUsIG1heExvb2thaGVhZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2Qob2NjdXJyZW5jZSwgcnVsZSwgdHlwZSwgbWF4TG9va2FoZWFkKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb29rYWhlYWRGdW5jRm9yT3Iob2NjdXJyZW5jZSwgcnVsZUdyYW1tYXIsIG1heExvb2thaGVhZCwgaGFzUHJlZGljYXRlcywgZHluYW1pY1Rva2Vuc0VuYWJsZWQsIGxhRnVuY0J1aWxkZXIpIHtcbiAgICBjb25zdCBsb29rQWhlYWRQYXRocyA9IGdldExvb2thaGVhZFBhdGhzRm9yT3Iob2NjdXJyZW5jZSwgcnVsZUdyYW1tYXIsIG1heExvb2thaGVhZCk7XG4gICAgY29uc3QgdG9rZW5NYXRjaGVyID0gYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZChsb29rQWhlYWRQYXRocylcbiAgICAgICAgPyB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzXG4gICAgICAgIDogdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlcjtcbiAgICByZXR1cm4gbGFGdW5jQnVpbGRlcihsb29rQWhlYWRQYXRocywgaGFzUHJlZGljYXRlcywgdG9rZW5NYXRjaGVyLCBkeW5hbWljVG9rZW5zRW5hYmxlZCk7XG59XG4vKipcbiAqICBXaGVuIGRlYWxpbmcgd2l0aCBhbiBPcHRpb25hbCBwcm9kdWN0aW9uIChPUFRJT04vTUFOWS8ybmQgaXRlcmF0aW9uIG9mIEFUX0xFQVNUX09ORS8uLi4pIHdlIG5lZWQgdG8gY29tcGFyZVxuICogIHRoZSBsb29rYWhlYWQgXCJpbnNpZGVcIiB0aGUgcHJvZHVjdGlvbiBhbmQgdGhlIGxvb2thaGVhZCBpbW1lZGlhdGVseSBcImFmdGVyXCIgaXQgaW4gdGhlIHNhbWUgdG9wIGxldmVsIHJ1bGUgKGNvbnRleHQgZnJlZSkuXG4gKlxuICogIEV4YW1wbGU6IGdpdmVuIGEgcHJvZHVjdGlvbjpcbiAqICBBQkMoREUpP0RGXG4gKlxuICogIFRoZSBvcHRpb25hbCAnKERFKT8nIHNob3VsZCBvbmx5IGJlIGVudGVyZWQgaWYgd2Ugc2VlICdERScuIGEgc2luZ2xlIFRva2VuICdEJyBpcyBub3Qgc3VmZmljaWVudCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d29cbiAqICBhbHRlcm5hdGl2ZXMuXG4gKlxuICogIEByZXR1cm5zIEEgTG9va2FoZWFkIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcmV0dXJuIHRydWUgSUZGIHRoZSBwYXJzZXIgc2hvdWxkIHBhcnNlIHRoZSBPcHRpb25hbCBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb29rYWhlYWRGdW5jRm9yT3B0aW9uYWxQcm9kKG9jY3VycmVuY2UsIHJ1bGVHcmFtbWFyLCBrLCBkeW5hbWljVG9rZW5zRW5hYmxlZCwgcHJvZFR5cGUsIGxvb2thaGVhZEJ1aWxkZXIpIHtcbiAgICBjb25zdCBsb29rQWhlYWRQYXRocyA9IGdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kKG9jY3VycmVuY2UsIHJ1bGVHcmFtbWFyLCBwcm9kVHlwZSwgayk7XG4gICAgY29uc3QgdG9rZW5NYXRjaGVyID0gYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZChsb29rQWhlYWRQYXRocylcbiAgICAgICAgPyB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzXG4gICAgICAgIDogdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlcjtcbiAgICByZXR1cm4gbG9va2FoZWFkQnVpbGRlcihsb29rQWhlYWRQYXRoc1swXSwgdG9rZW5NYXRjaGVyLCBkeW5hbWljVG9rZW5zRW5hYmxlZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jKGFsdHMsIGhhc1ByZWRpY2F0ZXMsIHRva2VuTWF0Y2hlciwgZHluYW1pY1Rva2Vuc0VuYWJsZWQpIHtcbiAgICBjb25zdCBudW1PZkFsdHMgPSBhbHRzLmxlbmd0aDtcbiAgICBjb25zdCBhcmVBbGxPbmVUb2tlbkxvb2thaGVhZCA9IGV2ZXJ5KGFsdHMsIChjdXJyQWx0KSA9PiB7XG4gICAgICAgIHJldHVybiBldmVyeShjdXJyQWx0LCAoY3VyclBhdGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyUGF0aC5sZW5ndGggPT09IDE7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFRoaXMgdmVyc2lvbiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHByZWRpY2F0ZXMgYXMgd2VsbC5cbiAgICBpZiAoaGFzUHJlZGljYXRlcykge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgY2hvc2VuIGFsdGVybmF0aXZlIGluZGV4XG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yQWx0cykge1xuICAgICAgICAgICAgLy8gdW5mb3J0dW5hdGVseSB0aGUgcHJlZGljYXRlcyBtdXN0IGJlIGV4dHJhY3RlZCBldmVyeSBzaW5nbGUgdGltZVxuICAgICAgICAgICAgLy8gYXMgdGhleSBjYW5ub3QgYmUgY2FjaGVkIGR1ZSB0byByZWZlcmVuY2VzIHRvIHBhcmFtZXRlcnModmFycykgd2hpY2ggYXJlIG5vIGxvbmdlciB2YWxpZC5cbiAgICAgICAgICAgIC8vIG5vdGUgdGhhdCBpbiB0aGUgY29tbW9uIGNhc2Ugb2Ygbm8gcHJlZGljYXRlcywgbm8gY3B1IHRpbWUgd2lsbCBiZSB3YXN0ZWQgb24gdGhpcyAoc2VlIGVsc2UgYmxvY2spXG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVzID0gbWFwKG9yQWx0cywgKGN1cnJBbHQpID0+IGN1cnJBbHQuR0FURSk7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG51bU9mQWx0czsgdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdCA9IGFsdHNbdF07XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck51bU9mUGF0aHMgPSBjdXJyQWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUHJlZGljYXRlID0gcHJlZGljYXRlc1t0XTtcbiAgICAgICAgICAgICAgICBpZiAoY3VyclByZWRpY2F0ZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJQcmVkaWNhdGUuY2FsbCh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHByZWRpY2F0ZSBkb2VzIG5vdCBtYXRjaCB0aGVyZSBpcyBubyBwb2ludCBpbiBjaGVja2luZyB0aGUgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHRQYXRoOiBmb3IgKGxldCBqID0gMDsgaiA8IGN1cnJOdW1PZlBhdGhzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGggPSBjdXJyQWx0W2pdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGF0aExlbmd0aCA9IGN1cnJQYXRoLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGF0aExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLkxBKGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbk1hdGNoZXIobmV4dFRva2VuLCBjdXJyUGF0aFtpXSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWlzbWF0Y2ggaW4gY3VycmVudCBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBuZXh0IHB0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG5leHRQYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgZnVsbCBwYXRoIHRoYXQgbWF0Y2hlcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3aWxsIGFsc28gd29yayBmb3IgYW4gZW1wdHkgQUxUIGFzIHRoZSBsb29wIHdpbGwgYmUgc2tpcHBlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm9uZSBvZiB0aGUgcGF0aHMgZm9yIHRoZSBjdXJyZW50IGFsdGVybmF0aXZlIG1hdGNoZWRcbiAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIG5leHQgYWx0ZXJuYXRpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vbmUgb2YgdGhlIGFsdGVybmF0aXZlcyBjb3VsZCBiZSBtYXRjaGVkXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmVBbGxPbmVUb2tlbkxvb2thaGVhZCAmJiAhZHluYW1pY1Rva2Vuc0VuYWJsZWQpIHtcbiAgICAgICAgLy8gb3B0aW1pemVkIChjb21tb24pIGNhc2Ugb2YgYWxsIHRoZSBsb29rYWhlYWRzIHBhdGhzIHJlcXVpcmluZyBvbmx5XG4gICAgICAgIC8vIGEgc2luZ2xlIHRva2VuIGxvb2thaGVhZC4gVGhlc2UgT3B0aW1pemF0aW9ucyBjYW5ub3Qgd29yayBpZiBkeW5hbWljYWxseSBkZWZpbmVkIFRva2VucyBhcmUgdXNlZC5cbiAgICAgICAgY29uc3Qgc2luZ2xlVG9rZW5BbHRzID0gbWFwKGFsdHMsIChjdXJyQWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdHRlbihjdXJyQWx0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNob2ljZVRvQWx0ID0gcmVkdWNlKHNpbmdsZVRva2VuQWx0cywgKHJlc3VsdCwgY3VyckFsdCwgaWR4KSA9PiB7XG4gICAgICAgICAgICBmb3JFYWNoKGN1cnJBbHQsIChjdXJyVG9rVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaGFzKHJlc3VsdCwgY3VyclRva1R5cGUudG9rZW5UeXBlSWR4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3VyclRva1R5cGUudG9rZW5UeXBlSWR4XSA9IGlkeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yRWFjaChjdXJyVG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMsIChjdXJyRXh0ZW5kaW5nVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhcyhyZXN1bHQsIGN1cnJFeHRlbmRpbmdUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJFeHRlbmRpbmdUeXBlXSA9IGlkeDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBjaG9zZW4gYWx0ZXJuYXRpdmUgaW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLkxBKDEpO1xuICAgICAgICAgICAgcmV0dXJuIGNob2ljZVRvQWx0W25leHRUb2tlbi50b2tlblR5cGVJZHhdO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gb3B0aW1pemVkIGxvb2thaGVhZCB3aXRob3V0IG5lZWRpbmcgdG8gY2hlY2sgdGhlIHByZWRpY2F0ZXMgYXQgYWxsLlxuICAgICAgICAvLyB0aGlzIGNhdXNlcyBjb2RlIGR1cGxpY2F0aW9uIHdoaWNoIGlzIGludGVudGlvbmFsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBjaG9zZW4gYWx0ZXJuYXRpdmUgaW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG51bU9mQWx0czsgdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdCA9IGFsdHNbdF07XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck51bU9mUGF0aHMgPSBjdXJyQWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBuZXh0UGF0aDogZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyTnVtT2ZQYXRoczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQYXRoID0gY3VyckFsdFtqXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGhMZW5ndGggPSBjdXJyUGF0aC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhdGhMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5MQShpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5NYXRjaGVyKG5leHRUb2tlbiwgY3VyclBhdGhbaV0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pc21hdGNoIGluIGN1cnJlbnQgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgbmV4dCBwdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBuZXh0UGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGZ1bGwgcGF0aCB0aGF0IG1hdGNoZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIGFuIGVtcHR5IEFMVCBhcyB0aGUgbG9vcCB3aWxsIGJlIHNraXBwZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vbmUgb2YgdGhlIHBhdGhzIGZvciB0aGUgY3VycmVudCBhbHRlcm5hdGl2ZSBtYXRjaGVkXG4gICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBuZXh0IGFsdGVybmF0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgY291bGQgYmUgbWF0Y2hlZFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaW5nbGVBbHRlcm5hdGl2ZUxvb2thaGVhZEZ1bmN0aW9uKGFsdCwgdG9rZW5NYXRjaGVyLCBkeW5hbWljVG9rZW5zRW5hYmxlZCkge1xuICAgIGNvbnN0IGFyZUFsbE9uZVRva2VuTG9va2FoZWFkID0gZXZlcnkoYWx0LCAoY3VyclBhdGgpID0+IHtcbiAgICAgICAgcmV0dXJuIGN1cnJQYXRoLmxlbmd0aCA9PT0gMTtcbiAgICB9KTtcbiAgICBjb25zdCBudW1PZlBhdGhzID0gYWx0Lmxlbmd0aDtcbiAgICAvLyBvcHRpbWl6ZWQgKGNvbW1vbikgY2FzZSBvZiBhbGwgdGhlIGxvb2thaGVhZHMgcGF0aHMgcmVxdWlyaW5nIG9ubHlcbiAgICAvLyBhIHNpbmdsZSB0b2tlbiBsb29rYWhlYWQuXG4gICAgaWYgKGFyZUFsbE9uZVRva2VuTG9va2FoZWFkICYmICFkeW5hbWljVG9rZW5zRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBzaW5nbGVUb2tlbnNUeXBlcyA9IGZsYXR0ZW4oYWx0KTtcbiAgICAgICAgaWYgKHNpbmdsZVRva2Vuc1R5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgaXNFbXB0eShzaW5nbGVUb2tlbnNUeXBlc1swXS5jYXRlZ29yeU1hdGNoZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFRva2VuVHlwZSA9IHNpbmdsZVRva2Vuc1R5cGVzWzBdO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUb2tlblVuaXF1ZUtleSA9IGV4cGVjdGVkVG9rZW5UeXBlLnRva2VuVHlwZUlkeDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEEoMSkudG9rZW5UeXBlSWR4ID09PSBleHBlY3RlZFRva2VuVW5pcXVlS2V5O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNob2ljZVRvQWx0ID0gcmVkdWNlKHNpbmdsZVRva2Vuc1R5cGVzLCAocmVzdWx0LCBjdXJyVG9rVHlwZSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJUb2tUeXBlLnRva2VuVHlwZUlkeF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvckVhY2goY3VyclRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzLCAoY3VyckV4dGVuZGluZ1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJFeHRlbmRpbmdUeXBlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5MQSgxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlVG9BbHRbbmV4dFRva2VuLnRva2VuVHlwZUlkeF0gPT09IHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbmV4dFBhdGg6IGZvciAobGV0IGogPSAwOyBqIDwgbnVtT2ZQYXRoczsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGggPSBhbHRbal07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGhMZW5ndGggPSBjdXJyUGF0aC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGF0aExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5NYXRjaGVyKG5leHRUb2tlbiwgY3VyclBhdGhbaV0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWlzbWF0Y2ggaW4gY3VycmVudCBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIG5leHQgcHRoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBuZXh0UGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGZ1bGwgcGF0aCB0aGF0IG1hdGNoZXMuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub25lIG9mIHRoZSBwYXRocyBtYXRjaGVkXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxufVxuY2xhc3MgUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIgZXh0ZW5kcyBSZXN0V2Fsa2VyIHtcbiAgICBjb25zdHJ1Y3Rvcih0b3BQcm9kLCB0YXJnZXRPY2N1cnJlbmNlLCB0YXJnZXRQcm9kVHlwZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRvcFByb2QgPSB0b3BQcm9kO1xuICAgICAgICB0aGlzLnRhcmdldE9jY3VycmVuY2UgPSB0YXJnZXRPY2N1cnJlbmNlO1xuICAgICAgICB0aGlzLnRhcmdldFByb2RUeXBlID0gdGFyZ2V0UHJvZFR5cGU7XG4gICAgfVxuICAgIHN0YXJ0V2Fsa2luZygpIHtcbiAgICAgICAgdGhpcy53YWxrKHRoaXMudG9wUHJvZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3REZWY7XG4gICAgfVxuICAgIGNoZWNrSXNUYXJnZXQobm9kZSwgZXhwZWN0ZWRQcm9kVHlwZSwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmIChub2RlLmlkeCA9PT0gdGhpcy50YXJnZXRPY2N1cnJlbmNlICYmXG4gICAgICAgICAgICB0aGlzLnRhcmdldFByb2RUeXBlID09PSBleHBlY3RlZFByb2RUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3REZWYgPSBjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBkbyBub3QgaXRlcmF0ZSBvdmVyIHRoZSBlbnRpcmUgR3JhbW1hciBhc3QgYWZ0ZXIgd2UgaGF2ZSBmb3VuZCB0aGUgdGFyZ2V0XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgd2Fsa09wdGlvbihvcHRpb25Qcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNUYXJnZXQob3B0aW9uUHJvZCwgUFJPRF9UWVBFLk9QVElPTiwgY3VyclJlc3QsIHByZXZSZXN0KSkge1xuICAgICAgICAgICAgc3VwZXIud2Fsa09wdGlvbihvcHRpb25Qcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNUYXJnZXQoYXRMZWFzdE9uZVByb2QsIFBST0RfVFlQRS5SRVBFVElUSU9OX01BTkRBVE9SWSwgY3VyclJlc3QsIHByZXZSZXN0KSkge1xuICAgICAgICAgICAgc3VwZXIud2Fsa09wdGlvbihhdExlYXN0T25lUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3YWxrQXRMZWFzdE9uZVNlcChhdExlYXN0T25lU2VwUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lzVGFyZ2V0KGF0TGVhc3RPbmVTZXBQcm9kLCBQUk9EX1RZUEUuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IsIGN1cnJSZXN0LCBwcmV2UmVzdCkpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtPcHRpb24oYXRMZWFzdE9uZVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2Fsa01hbnkobWFueVByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJc1RhcmdldChtYW55UHJvZCwgUFJPRF9UWVBFLlJFUEVUSVRJT04sIGN1cnJSZXN0LCBwcmV2UmVzdCkpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtPcHRpb24obWFueVByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJc1RhcmdldChtYW55U2VwUHJvZCwgUFJPRF9UWVBFLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IsIGN1cnJSZXN0LCBwcmV2UmVzdCkpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtPcHRpb24obWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmluaXRpb24gb2YgYSB0YXJnZXQgcHJvZHVjdGlvbiBpbiBhIHRvcCBsZXZlbCBsZXZlbCBydWxlLlxuICovXG5jbGFzcyBJbnNpZGVEZWZpbml0aW9uRmluZGVyVmlzaXRvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRPY2N1cnJlbmNlLCB0YXJnZXRQcm9kVHlwZSwgdGFyZ2V0UmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0T2NjdXJyZW5jZSA9IHRhcmdldE9jY3VycmVuY2U7XG4gICAgICAgIHRoaXMudGFyZ2V0UHJvZFR5cGUgPSB0YXJnZXRQcm9kVHlwZTtcbiAgICAgICAgdGhpcy50YXJnZXRSZWYgPSB0YXJnZXRSZWY7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gW107XG4gICAgfVxuICAgIGNoZWNrSXNUYXJnZXQobm9kZSwgZXhwZWN0ZWRQcm9kTmFtZSkge1xuICAgICAgICBpZiAobm9kZS5pZHggPT09IHRoaXMudGFyZ2V0T2NjdXJyZW5jZSAmJlxuICAgICAgICAgICAgdGhpcy50YXJnZXRQcm9kVHlwZSA9PT0gZXhwZWN0ZWRQcm9kTmFtZSAmJlxuICAgICAgICAgICAgKHRoaXMudGFyZ2V0UmVmID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gdGhpcy50YXJnZXRSZWYpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IG5vZGUuZGVmaW5pdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9wdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tJc1RhcmdldChub2RlLCBQUk9EX1RZUEUuT1BUSU9OKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5jaGVja0lzVGFyZ2V0KG5vZGUsIFBST0RfVFlQRS5SRVBFVElUSU9OKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jaGVja0lzVGFyZ2V0KG5vZGUsIFBST0RfVFlQRS5SRVBFVElUSU9OX01BTkRBVE9SWSk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLmNoZWNrSXNUYXJnZXQobm9kZSwgUFJPRF9UWVBFLlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihub2RlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tJc1RhcmdldChub2RlLCBQUk9EX1RZUEUuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIHZpc2l0QWx0ZXJuYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLmNoZWNrSXNUYXJnZXQobm9kZSwgUFJPRF9UWVBFLkFMVEVSTkFUSU9OKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbml0aWFsaXplQXJyYXlPZkFycmF5cyhzaXplKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBBIHNvcnQgb2YgaGFzaCBmdW5jdGlvbiBiZXR3ZWVuIGEgUGF0aCBpbiB0aGUgZ3JhbW1hciBhbmQgYSBzdHJpbmcuXG4gKiBOb3RlIHRoYXQgdGhpcyByZXR1cm5zIG11bHRpcGxlIFwiaGFzaGVzXCIgdG8gc3VwcG9ydCB0aGUgc2NlbmFyaW8gb2YgdG9rZW4gY2F0ZWdvcmllcy5cbiAqIC0gIEEgc2luZ2xlIHBhdGggd2l0aCBjYXRlZ29yaWVzIG1heSBtYXRjaCBtdWx0aXBsZSAqKmFjdHVhbCoqIHBhdGhzLlxuICovXG5mdW5jdGlvbiBwYXRoVG9IYXNoS2V5cyhwYXRoKSB7XG4gICAgbGV0IGtleXMgPSBbXCJcIl07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRva1R5cGUgPSBwYXRoW2ldO1xuICAgICAgICBjb25zdCBsb25nZXJLZXlzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgY3VyclNob3J0ZXJLZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgbG9uZ2VyS2V5cy5wdXNoKGN1cnJTaG9ydGVyS2V5ICsgXCJfXCIgKyB0b2tUeXBlLnRva2VuVHlwZUlkeCk7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllc0tleVN1ZmZpeCA9IFwiX1wiICsgdG9rVHlwZS5jYXRlZ29yeU1hdGNoZXNbdF07XG4gICAgICAgICAgICAgICAgbG9uZ2VyS2V5cy5wdXNoKGN1cnJTaG9ydGVyS2V5ICsgY2F0ZWdvcmllc0tleVN1ZmZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cyA9IGxvbmdlcktleXM7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuLyoqXG4gKiBJbXBlcmF0aXZlIHN0eWxlIGR1ZSB0byBiZWluZyBjYWxsZWQgZnJvbSBhIGhvdCBzcG90XG4gKi9cbmZ1bmN0aW9uIGlzVW5pcXVlUHJlZml4SGFzaChhbHRLbm93blBhdGhzS2V5cywgc2VhcmNoUGF0aEtleXMsIGlkeCkge1xuICAgIGZvciAobGV0IGN1cnJBbHRJZHggPSAwOyBjdXJyQWx0SWR4IDwgYWx0S25vd25QYXRoc0tleXMubGVuZ3RoOyBjdXJyQWx0SWR4KyspIHtcbiAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHRlc3QgdnMgdGhlIG90aGVyIGFsdGVybmF0aXZlc1xuICAgICAgICBpZiAoY3VyckFsdElkeCA9PT0gaWR4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdGhlckFsdEtub3duUGF0aHNLZXlzID0gYWx0S25vd25QYXRoc0tleXNbY3VyckFsdElkeF07XG4gICAgICAgIGZvciAobGV0IHNlYXJjaElkeCA9IDA7IHNlYXJjaElkeCA8IHNlYXJjaFBhdGhLZXlzLmxlbmd0aDsgc2VhcmNoSWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEtleSA9IHNlYXJjaFBhdGhLZXlzW3NlYXJjaElkeF07XG4gICAgICAgICAgICBpZiAob3RoZXJBbHRLbm93blBhdGhzS2V5c1tzZWFyY2hLZXldID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vbmUgb2YgdGhlIFNlYXJjaFBhdGhLZXlzIHdlcmUgZm91bmQgaW4gYW55IG9mIHRoZSBvdGhlciBhbHRlcm5hdGl2ZXNcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXMoYWx0c0RlZnMsIGspIHtcbiAgICBjb25zdCBwYXJ0aWFsQWx0cyA9IG1hcChhbHRzRGVmcywgKGN1cnJBbHQpID0+IHBvc3NpYmxlUGF0aHNGcm9tKFtjdXJyQWx0XSwgMSkpO1xuICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMocGFydGlhbEFsdHMubGVuZ3RoKTtcbiAgICBjb25zdCBhbHRzSGFzaGVzID0gbWFwKHBhcnRpYWxBbHRzLCAoY3VyckFsdFBhdGhzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICAgICAgZm9yRWFjaChjdXJyQWx0UGF0aHMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gcGF0aFRvSGFzaEtleXMoaXRlbS5wYXJ0aWFsUGF0aCk7XG4gICAgICAgICAgICBmb3JFYWNoKGtleXMsIChjdXJyS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgZGljdFtjdXJyS2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkaWN0O1xuICAgIH0pO1xuICAgIGxldCBuZXdEYXRhID0gcGFydGlhbEFsdHM7XG4gICAgLy8gbWF4TG9va2FoZWFkIGxvb3BcbiAgICBmb3IgKGxldCBwYXRoTGVuZ3RoID0gMTsgcGF0aExlbmd0aCA8PSBrOyBwYXRoTGVuZ3RoKyspIHtcbiAgICAgICAgY29uc3QgY3VyckRhdGFzZXQgPSBuZXdEYXRhO1xuICAgICAgICBuZXdEYXRhID0gaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMoY3VyckRhdGFzZXQubGVuZ3RoKTtcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmVzIGxvb3BcbiAgICAgICAgZm9yIChsZXQgYWx0SWR4ID0gMDsgYWx0SWR4IDwgY3VyckRhdGFzZXQubGVuZ3RoOyBhbHRJZHgrKykge1xuICAgICAgICAgICAgY29uc3QgY3VyckFsdFBhdGhzQW5kU3VmZml4ZXMgPSBjdXJyRGF0YXNldFthbHRJZHhdO1xuICAgICAgICAgICAgLy8gcGF0aHMgaW4gY3VycmVudCBhbHRlcm5hdGl2ZSBsb29wXG4gICAgICAgICAgICBmb3IgKGxldCBjdXJyUGF0aElkeCA9IDA7IGN1cnJQYXRoSWR4IDwgY3VyckFsdFBhdGhzQW5kU3VmZml4ZXMubGVuZ3RoOyBjdXJyUGF0aElkeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGhQcmVmaXggPSBjdXJyQWx0UGF0aHNBbmRTdWZmaXhlc1tjdXJyUGF0aElkeF0ucGFydGlhbFBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VmZml4RGVmID0gY3VyckFsdFBhdGhzQW5kU3VmZml4ZXNbY3VyclBhdGhJZHhdLnN1ZmZpeERlZjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhLZXlzID0gcGF0aFRvSGFzaEtleXMoY3VyclBhdGhQcmVmaXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzVW5pcXVlID0gaXNVbmlxdWVQcmVmaXhIYXNoKGFsdHNIYXNoZXMsIHByZWZpeEtleXMsIGFsdElkeCk7XG4gICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsaW5lIGZvciB0aGlzIHBhdGguXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5pcXVlIHx8IGlzRW1wdHkoc3VmZml4RGVmKSB8fCBjdXJyUGF0aFByZWZpeC5sZW5ndGggPT09IGspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdFJlc3VsdCA9IGZpbmFsUmVzdWx0W2FsdElkeF07XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSBpbXBsZW1lbnQgYSBjb250YWluc1BhdGggdXNpbmcgTWFwcy9EaWN0aW9uYXJpZXM/XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluc1BhdGgoY3VyckFsdFJlc3VsdCwgY3VyclBhdGhQcmVmaXgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFsdFJlc3VsdC5wdXNoKGN1cnJQYXRoUHJlZml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGwgbmV3ICBrZXlzIGZvciB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwcmVmaXhLZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycktleSA9IHByZWZpeEtleXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0c0hhc2hlc1thbHRJZHhdW2N1cnJLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFeHBhbmQgbG9uZ2VyIHBhdGhzXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcnRpYWxQYXRoc0FuZFN1ZmZpeGVzID0gcG9zc2libGVQYXRoc0Zyb20oc3VmZml4RGVmLCBwYXRoTGVuZ3RoICsgMSwgY3VyclBhdGhQcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICBuZXdEYXRhW2FsdElkeF0gPSBuZXdEYXRhW2FsdElkeF0uY29uY2F0KG5ld1BhcnRpYWxQYXRoc0FuZFN1ZmZpeGVzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGtleXMgZm9yIG5ldyBrbm93biBwYXRoc1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKG5ld1BhcnRpYWxQYXRoc0FuZFN1ZmZpeGVzLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4S2V5cyA9IHBhdGhUb0hhc2hLZXlzKGl0ZW0ucGFydGlhbFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChwcmVmaXhLZXlzLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0c0hhc2hlc1thbHRJZHhdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluYWxSZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcihvY2N1cnJlbmNlLCBydWxlR3JhbW1hciwgaywgb3JQcm9kKSB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBJbnNpZGVEZWZpbml0aW9uRmluZGVyVmlzaXRvcihvY2N1cnJlbmNlLCBQUk9EX1RZUEUuQUxURVJOQVRJT04sIG9yUHJvZCk7XG4gICAgcnVsZUdyYW1tYXIuYWNjZXB0KHZpc2l0b3IpO1xuICAgIHJldHVybiBsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXModmlzaXRvci5yZXN1bHQsIGspO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kKG9jY3VycmVuY2UsIHJ1bGVHcmFtbWFyLCBwcm9kVHlwZSwgaykge1xuICAgIGNvbnN0IGluc2lkZURlZlZpc2l0b3IgPSBuZXcgSW5zaWRlRGVmaW5pdGlvbkZpbmRlclZpc2l0b3Iob2NjdXJyZW5jZSwgcHJvZFR5cGUpO1xuICAgIHJ1bGVHcmFtbWFyLmFjY2VwdChpbnNpZGVEZWZWaXNpdG9yKTtcbiAgICBjb25zdCBpbnNpZGVEZWYgPSBpbnNpZGVEZWZWaXNpdG9yLnJlc3VsdDtcbiAgICBjb25zdCBhZnRlckRlZldhbGtlciA9IG5ldyBSZXN0RGVmaW5pdGlvbkZpbmRlcldhbGtlcihydWxlR3JhbW1hciwgb2NjdXJyZW5jZSwgcHJvZFR5cGUpO1xuICAgIGNvbnN0IGFmdGVyRGVmID0gYWZ0ZXJEZWZXYWxrZXIuc3RhcnRXYWxraW5nKCk7XG4gICAgY29uc3QgaW5zaWRlRmxhdCA9IG5ldyBBbHRlcm5hdGl2ZUdBU1QoeyBkZWZpbml0aW9uOiBpbnNpZGVEZWYgfSk7XG4gICAgY29uc3QgYWZ0ZXJGbGF0ID0gbmV3IEFsdGVybmF0aXZlR0FTVCh7IGRlZmluaXRpb246IGFmdGVyRGVmIH0pO1xuICAgIHJldHVybiBsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXMoW2luc2lkZUZsYXQsIGFmdGVyRmxhdF0sIGspO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zUGF0aChhbHRlcm5hdGl2ZSwgc2VhcmNoUGF0aCkge1xuICAgIGNvbXBhcmVPdGhlclBhdGg6IGZvciAobGV0IGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3RoZXJQYXRoID0gYWx0ZXJuYXRpdmVbaV07XG4gICAgICAgIGlmIChvdGhlclBhdGgubGVuZ3RoICE9PSBzZWFyY2hQYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvdGhlclBhdGgubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRvayA9IHNlYXJjaFBhdGhbal07XG4gICAgICAgICAgICBjb25zdCBvdGhlclRvayA9IG90aGVyUGF0aFtqXTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVG9rZW5zID0gc2VhcmNoVG9rID09PSBvdGhlclRvayB8fFxuICAgICAgICAgICAgICAgIG90aGVyVG9rLmNhdGVnb3J5TWF0Y2hlc01hcFtzZWFyY2hUb2sudG9rZW5UeXBlSWR4XSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVG9rZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbXBhcmVPdGhlclBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmljdFByZWZpeE9mUGF0aChwcmVmaXgsIG90aGVyKSB7XG4gICAgcmV0dXJuIChwcmVmaXgubGVuZ3RoIDwgb3RoZXIubGVuZ3RoICYmXG4gICAgICAgIGV2ZXJ5KHByZWZpeCwgKHRva1R5cGUsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJUb2tUeXBlID0gb3RoZXJbaWR4XTtcbiAgICAgICAgICAgIHJldHVybiAodG9rVHlwZSA9PT0gb3RoZXJUb2tUeXBlIHx8XG4gICAgICAgICAgICAgICAgb3RoZXJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlc01hcFt0b2tUeXBlLnRva2VuVHlwZUlkeF0pO1xuICAgICAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZChsb29rQWhlYWRQYXRocykge1xuICAgIHJldHVybiBldmVyeShsb29rQWhlYWRQYXRocywgKHNpbmdsZUFsdFBhdGhzKSA9PiBldmVyeShzaW5nbGVBbHRQYXRocywgKHNpbmdsZVBhdGgpID0+IGV2ZXJ5KHNpbmdsZVBhdGgsICh0b2tlbikgPT4gaXNFbXB0eSh0b2tlbi5jYXRlZ29yeU1hdGNoZXMpKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9va2FoZWFkLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY2xvbmUsIGNvbXBhY3QsIGRpZmZlcmVuY2UsIGRyb3AsIGRyb3BSaWdodCwgZmlsdGVyLCBmaXJzdCwgZmxhdE1hcCwgZmxhdHRlbiwgZm9yRWFjaCwgZ3JvdXBCeSwgaW5jbHVkZXMsIGlzRW1wdHksIG1hcCwgcGlja0J5LCByZWR1Y2UsIHJlamVjdCwgdmFsdWVzLCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IFBhcnNlckRlZmluaXRpb25FcnJvclR5cGUsIH0gZnJvbSBcIi4uL3BhcnNlci9wYXJzZXIuanNcIjtcbmltcG9ydCB7IEFsdGVybmF0aW9uLCBBbHRlcm5hdGl2ZSBhcyBBbHRlcm5hdGl2ZUdBU1QsIEdBc3RWaXNpdG9yLCBnZXRQcm9kdWN0aW9uRHNsTmFtZSwgaXNPcHRpb25hbFByb2QsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgVGVybWluYWwsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbmltcG9ydCB7IGNvbnRhaW5zUGF0aCwgZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2QsIGdldExvb2thaGVhZFBhdGhzRm9yT3IsIGdldFByb2RUeXBlLCBpc1N0cmljdFByZWZpeE9mUGF0aCwgfSBmcm9tIFwiLi9sb29rYWhlYWQuanNcIjtcbmltcG9ydCB7IG5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIH0gZnJvbSBcIi4vaW50ZXJwcmV0ZXIuanNcIjtcbmltcG9ydCB7IHRva2VuU3RydWN0dXJlZE1hdGNoZXIgfSBmcm9tIFwiLi4vLi4vc2Nhbi90b2tlbnMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxvb2thaGVhZChvcHRpb25zKSB7XG4gICAgY29uc3QgbG9va2FoZWFkVmFsaWRhdGlvbkVycm9yTWVzc2FnZXMgPSBvcHRpb25zLmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtcbiAgICAgICAgcnVsZXM6IG9wdGlvbnMucnVsZXMsXG4gICAgICAgIHRva2VuVHlwZXM6IG9wdGlvbnMudG9rZW5UeXBlcyxcbiAgICAgICAgZ3JhbW1hck5hbWU6IG9wdGlvbnMuZ3JhbW1hck5hbWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcChsb29rYWhlYWRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlcywgKGVycm9yTWVzc2FnZSkgPT4gKE9iamVjdC5hc3NpZ24oeyB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTiB9LCBlcnJvck1lc3NhZ2UpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHcmFtbWFyKHRvcExldmVscywgdG9rZW5UeXBlcywgZXJyTXNnUHJvdmlkZXIsIGdyYW1tYXJOYW1lKSB7XG4gICAgY29uc3QgZHVwbGljYXRlRXJyb3JzID0gZmxhdE1hcCh0b3BMZXZlbHMsIChjdXJyVG9wTGV2ZWwpID0+IHZhbGlkYXRlRHVwbGljYXRlUHJvZHVjdGlvbnMoY3VyclRvcExldmVsLCBlcnJNc2dQcm92aWRlcikpO1xuICAgIGNvbnN0IHRlcm1zTmFtZXNwYWNlQ29uZmxpY3RFcnJvcnMgPSBjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSh0b3BMZXZlbHMsIHRva2VuVHlwZXMsIGVyck1zZ1Byb3ZpZGVyKTtcbiAgICBjb25zdCB0b29NYW55QWx0c0Vycm9ycyA9IGZsYXRNYXAodG9wTGV2ZWxzLCAoY3VyUnVsZSkgPT4gdmFsaWRhdGVUb29NYW55QWx0cyhjdXJSdWxlLCBlcnJNc2dQcm92aWRlcikpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVJ1bGVzRXJyb3IgPSBmbGF0TWFwKHRvcExldmVscywgKGN1clJ1bGUpID0+IHZhbGlkYXRlUnVsZURvZXNOb3RBbHJlYWR5RXhpc3QoY3VyUnVsZSwgdG9wTGV2ZWxzLCBncmFtbWFyTmFtZSwgZXJyTXNnUHJvdmlkZXIpKTtcbiAgICByZXR1cm4gZHVwbGljYXRlRXJyb3JzLmNvbmNhdCh0ZXJtc05hbWVzcGFjZUNvbmZsaWN0RXJyb3JzLCB0b29NYW55QWx0c0Vycm9ycywgZHVwbGljYXRlUnVsZXNFcnJvcik7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zKHRvcExldmVsUnVsZSwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBjb2xsZWN0b3JWaXNpdG9yID0gbmV3IE9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yKCk7XG4gICAgdG9wTGV2ZWxSdWxlLmFjY2VwdChjb2xsZWN0b3JWaXNpdG9yKTtcbiAgICBjb25zdCBhbGxSdWxlUHJvZHVjdGlvbnMgPSBjb2xsZWN0b3JWaXNpdG9yLmFsbFByb2R1Y3Rpb25zO1xuICAgIGNvbnN0IHByb2R1Y3Rpb25Hcm91cHMgPSBncm91cEJ5KGFsbFJ1bGVQcm9kdWN0aW9ucywgaWRlbnRpZnlQcm9kdWN0aW9uRm9yRHVwbGljYXRlcyk7XG4gICAgY29uc3QgZHVwbGljYXRlcyA9IHBpY2tCeShwcm9kdWN0aW9uR3JvdXBzLCAoY3Vyckdyb3VwKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXJyR3JvdXAubGVuZ3RoID4gMTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAodmFsdWVzKGR1cGxpY2F0ZXMpLCAoY3VyckR1cGxpY2F0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RQcm9kID0gZmlyc3QoY3VyckR1cGxpY2F0ZXMpO1xuICAgICAgICBjb25zdCBtc2cgPSBlcnJNc2dQcm92aWRlci5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodG9wTGV2ZWxSdWxlLCBjdXJyRHVwbGljYXRlcyk7XG4gICAgICAgIGNvbnN0IGRzbE5hbWUgPSBnZXRQcm9kdWN0aW9uRHNsTmFtZShmaXJzdFByb2QpO1xuICAgICAgICBjb25zdCBkZWZFcnJvciA9IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgIHR5cGU6IFBhcnNlckRlZmluaXRpb25FcnJvclR5cGUuRFVQTElDQVRFX1BST0RVQ1RJT05TLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHRvcExldmVsUnVsZS5uYW1lLFxuICAgICAgICAgICAgZHNsTmFtZTogZHNsTmFtZSxcbiAgICAgICAgICAgIG9jY3VycmVuY2U6IGZpcnN0UHJvZC5pZHgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmFtID0gZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQoZmlyc3RQcm9kKTtcbiAgICAgICAgaWYgKHBhcmFtKSB7XG4gICAgICAgICAgICBkZWZFcnJvci5wYXJhbWV0ZXIgPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmRXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeVByb2R1Y3Rpb25Gb3JEdXBsaWNhdGVzKHByb2QpIHtcbiAgICByZXR1cm4gYCR7Z2V0UHJvZHVjdGlvbkRzbE5hbWUocHJvZCl9XyNfJHtwcm9kLmlkeH1fI18ke2dldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50KHByb2QpfWA7XG59XG5mdW5jdGlvbiBnZXRFeHRyYVByb2R1Y3Rpb25Bcmd1bWVudChwcm9kKSB7XG4gICAgaWYgKHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4gcHJvZC50ZXJtaW5hbFR5cGUubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiBwcm9kLm5vblRlcm1pbmFsTmFtZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPY2N1cnJlbmNlVmFsaWRhdGlvbkNvbGxlY3RvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucyA9IFtdO1xuICAgIH1cbiAgICB2aXNpdE5vblRlcm1pbmFsKHN1YnJ1bGUpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKHN1YnJ1bGUpO1xuICAgIH1cbiAgICB2aXNpdE9wdGlvbihvcHRpb24pIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IobWFueVNlcCkge1xuICAgICAgICB0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2gobWFueVNlcCk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShhdExlYXN0T25lKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChhdExlYXN0T25lKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihhdExlYXN0T25lU2VwKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChhdExlYXN0T25lU2VwKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uKG1hbnkpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKG1hbnkpO1xuICAgIH1cbiAgICB2aXNpdEFsdGVybmF0aW9uKG9yKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChvcik7XG4gICAgfVxuICAgIHZpc2l0VGVybWluYWwodGVybWluYWwpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKHRlcm1pbmFsKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSdWxlRG9lc05vdEFscmVhZHlFeGlzdChydWxlLCBhbGxSdWxlcywgY2xhc3NOYW1lLCBlcnJNc2dQcm92aWRlcikge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IG9jY3VycmVuY2VzID0gcmVkdWNlKGFsbFJ1bGVzLCAocmVzdWx0LCBjdXJSdWxlKSA9PiB7XG4gICAgICAgIGlmIChjdXJSdWxlLm5hbWUgPT09IHJ1bGUubmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCAwKTtcbiAgICBpZiAob2NjdXJyZW5jZXMgPiAxKSB7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IGVyck1zZ1Byb3ZpZGVyLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7XG4gICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICBncmFtbWFyTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyTXNnLFxuICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5EVVBMSUNBVEVfUlVMRV9OQU1FLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGUubmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4vLyBUT0RPOiBpcyB0aGVyZSBhbnl3YXkgdG8gZ2V0IG9ubHkgdGhlIHJ1bGUgbmFtZXMgb2YgcnVsZXMgaW5oZXJpdGVkIGZyb20gdGhlIHN1cGVyIGdyYW1tYXJzP1xuLy8gVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgSUdyYW1tYXJFcnJvclByb3ZpZGVyIGJlY2F1c2UgdGhlIHZhbGlkYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBvblxuLy8gVGhlIGdyYW1tYXIgc3RydWN0dXJlLCBvbmx5IGF0IHJ1bnRpbWUuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSdWxlSXNPdmVycmlkZGVuKHJ1bGVOYW1lLCBkZWZpbmVkUnVsZXNOYW1lcywgY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgbGV0IGVyck1zZztcbiAgICBpZiAoIWluY2x1ZGVzKGRlZmluZWRSdWxlc05hbWVzLCBydWxlTmFtZSkpIHtcbiAgICAgICAgZXJyTXNnID1cbiAgICAgICAgICAgIGBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHtydWxlTmFtZX08LSBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgZ3JhbW1hcjogLT4ke2NsYXNzTmFtZX08LWAgK1xuICAgICAgICAgICAgICAgIGBhcyBpdCBpcyBub3QgZGVmaW5lZCBpbiBhbnkgb2YgdGhlIHN1cGVyIGdyYW1tYXJzIGA7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyck1zZyxcbiAgICAgICAgICAgIHR5cGU6IFBhcnNlckRlZmluaXRpb25FcnJvclR5cGUuSU5WQUxJRF9SVUxFX09WRVJSSURFLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGVOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbih0b3BSdWxlLCBjdXJyUnVsZSwgZXJyTXNnUHJvdmlkZXIsIHBhdGggPSBbXSkge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IG5leHROb25UZXJtaW5hbHMgPSBnZXRGaXJzdE5vbmVUZXJtaW5hbChjdXJyUnVsZS5kZWZpbml0aW9uKTtcbiAgICBpZiAoaXNFbXB0eShuZXh0Tm9uVGVybWluYWxzKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBydWxlTmFtZSA9IHRvcFJ1bGUubmFtZTtcbiAgICAgICAgY29uc3QgZm91bmRMZWZ0UmVjdXJzaW9uID0gaW5jbHVkZXMobmV4dE5vblRlcm1pbmFscywgdG9wUnVsZSk7XG4gICAgICAgIGlmIChmb3VuZExlZnRSZWN1cnNpb24pIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2dQcm92aWRlci5idWlsZExlZnRSZWN1cnNpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHRvcExldmVsUnVsZTogdG9wUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgbGVmdFJlY3Vyc2lvblBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5MRUZUX1JFQ1VSU0lPTixcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogcnVsZU5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBhcmUgb25seSBsb29raW5nIGZvciBjeWNsaWMgcGF0aHMgbGVhZGluZyBiYWNrIHRvIHRoZSBzcGVjaWZpYyB0b3BSdWxlXG4gICAgICAgIC8vIG90aGVyIGN5Y2xpYyBwYXRocyBhcmUgaWdub3JlZCwgd2Ugc3RpbGwgbmVlZCB0aGlzIGRpZmZlcmVuY2UgdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuLi5cbiAgICAgICAgY29uc3QgdmFsaWROZXh0U3RlcHMgPSBkaWZmZXJlbmNlKG5leHROb25UZXJtaW5hbHMsIHBhdGguY29uY2F0KFt0b3BSdWxlXSkpO1xuICAgICAgICBjb25zdCBlcnJvcnNGcm9tTmV4dFN0ZXBzID0gZmxhdE1hcCh2YWxpZE5leHRTdGVwcywgKGN1cnJSZWZSdWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gY2xvbmUocGF0aCk7XG4gICAgICAgICAgICBuZXdQYXRoLnB1c2goY3VyclJlZlJ1bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKHRvcFJ1bGUsIGN1cnJSZWZSdWxlLCBlcnJNc2dQcm92aWRlciwgbmV3UGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdChlcnJvcnNGcm9tTmV4dFN0ZXBzKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3ROb25lVGVybWluYWwoZGVmaW5pdGlvbikge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAoaXNFbXB0eShkZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFByb2QgPSBmaXJzdChkZWZpbml0aW9uKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdFByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICByZXN1bHQucHVzaChmaXJzdFByb2QucmVmZXJlbmNlZFJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChmaXJzdFByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGl2ZUdBU1QgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgT3B0aW9uIHx8XG4gICAgICAgIGZpcnN0UHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnkgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGdldEZpcnN0Tm9uZVRlcm1pbmFsKGZpcnN0UHJvZC5kZWZpbml0aW9uKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0UHJvZCBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIC8vIGVhY2ggc3ViIGRlZmluaXRpb24gaW4gYWx0ZXJuYXRpb24gaXMgYSBGTEFUXG4gICAgICAgIHJlc3VsdCA9IGZsYXR0ZW4obWFwKGZpcnN0UHJvZC5kZWZpbml0aW9uLCAoY3VyclN1YkRlZikgPT4gZ2V0Rmlyc3ROb25lVGVybWluYWwoY3VyclN1YkRlZi5kZWZpbml0aW9uKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChmaXJzdFByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIHNlZSwgbW92ZSBhbG9uZ1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICB9XG4gICAgY29uc3QgaXNGaXJzdE9wdGlvbmFsID0gaXNPcHRpb25hbFByb2QoZmlyc3RQcm9kKTtcbiAgICBjb25zdCBoYXNNb3JlID0gZGVmaW5pdGlvbi5sZW5ndGggPiAxO1xuICAgIGlmIChpc0ZpcnN0T3B0aW9uYWwgJiYgaGFzTW9yZSkge1xuICAgICAgICBjb25zdCByZXN0ID0gZHJvcChkZWZpbml0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoZ2V0Rmlyc3ROb25lVGVybWluYWwocmVzdCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5jbGFzcyBPckNvbGxlY3RvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5hbHRlcm5hdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgdmlzaXRBbHRlcm5hdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRpb25zLnB1c2gobm9kZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlKHRvcExldmVsUnVsZSwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBvckNvbGxlY3RvciA9IG5ldyBPckNvbGxlY3RvcigpO1xuICAgIHRvcExldmVsUnVsZS5hY2NlcHQob3JDb2xsZWN0b3IpO1xuICAgIGNvbnN0IG9ycyA9IG9yQ29sbGVjdG9yLmFsdGVybmF0aW9ucztcbiAgICBjb25zdCBlcnJvcnMgPSBmbGF0TWFwKG9ycywgKGN1cnJPcikgPT4ge1xuICAgICAgICBjb25zdCBleGNlcHRMYXN0ID0gZHJvcFJpZ2h0KGN1cnJPci5kZWZpbml0aW9uKTtcbiAgICAgICAgcmV0dXJuIGZsYXRNYXAoZXhjZXB0TGFzdCwgKGN1cnJBbHRlcm5hdGl2ZSwgY3VyckFsdElkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9zc2libGVGaXJzdEluQWx0ID0gbmV4dFBvc3NpYmxlVG9rZW5zQWZ0ZXIoW2N1cnJBbHRlcm5hdGl2ZV0sIFtdLCB0b2tlblN0cnVjdHVyZWRNYXRjaGVyLCAxKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KHBvc3NpYmxlRmlyc3RJbkFsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2dQcm92aWRlci5idWlsZEVtcHR5QWx0ZXJuYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxSdWxlOiB0b3BMZXZlbFJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpb246IGN1cnJPcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNob2ljZUlkeDogY3VyckFsdElkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5OT05FX0xBU1RfRU1QVFlfQUxULFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IHRvcExldmVsUnVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZW5jZTogY3Vyck9yLmlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlOiBjdXJyQWx0SWR4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXModG9wTGV2ZWxSdWxlLCBnbG9iYWxNYXhMb29rYWhlYWQsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgY29uc3Qgb3JDb2xsZWN0b3IgPSBuZXcgT3JDb2xsZWN0b3IoKTtcbiAgICB0b3BMZXZlbFJ1bGUuYWNjZXB0KG9yQ29sbGVjdG9yKTtcbiAgICBsZXQgb3JzID0gb3JDb2xsZWN0b3IuYWx0ZXJuYXRpb25zO1xuICAgIC8vIE5ldyBIYW5kbGluZyBvZiBpZ25vcmluZyBhbWJpZ3VpdGllc1xuICAgIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXMvODY5XG4gICAgb3JzID0gcmVqZWN0KG9ycywgKGN1cnJPcikgPT4gY3Vyck9yLmlnbm9yZUFtYmlndWl0aWVzID09PSB0cnVlKTtcbiAgICBjb25zdCBlcnJvcnMgPSBmbGF0TWFwKG9ycywgKGN1cnJPcikgPT4ge1xuICAgICAgICBjb25zdCBjdXJyT2NjdXJyZW5jZSA9IGN1cnJPci5pZHg7XG4gICAgICAgIGNvbnN0IGFjdHVhbE1heExvb2thaGVhZCA9IGN1cnJPci5tYXhMb29rYWhlYWQgfHwgZ2xvYmFsTWF4TG9va2FoZWFkO1xuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZXMgPSBnZXRMb29rYWhlYWRQYXRoc0Zvck9yKGN1cnJPY2N1cnJlbmNlLCB0b3BMZXZlbFJ1bGUsIGFjdHVhbE1heExvb2thaGVhZCwgY3Vyck9yKTtcbiAgICAgICAgY29uc3QgYWx0c0FtYmlndWl0eUVycm9ycyA9IGNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMoYWx0ZXJuYXRpdmVzLCBjdXJyT3IsIHRvcExldmVsUnVsZSwgZXJyTXNnUHJvdmlkZXIpO1xuICAgICAgICBjb25zdCBhbHRzUHJlZml4QW1iaWd1aXR5RXJyb3JzID0gY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyhhbHRlcm5hdGl2ZXMsIGN1cnJPciwgdG9wTGV2ZWxSdWxlLCBlcnJNc2dQcm92aWRlcik7XG4gICAgICAgIHJldHVybiBhbHRzQW1iaWd1aXR5RXJyb3JzLmNvbmNhdChhbHRzUHJlZml4QW1iaWd1aXR5RXJyb3JzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGNsYXNzIFJlcGV0aXRpb25Db2xsZWN0b3IgZXh0ZW5kcyBHQXN0VmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihtYW55U2VwKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChtYW55U2VwKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGF0TGVhc3RPbmUpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGF0TGVhc3RPbmUpO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGF0TGVhc3RPbmVTZXApIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGF0TGVhc3RPbmVTZXApO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb24obWFueSkge1xuICAgICAgICB0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2gobWFueSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVG9vTWFueUFsdHModG9wTGV2ZWxSdWxlLCBlcnJNc2dQcm92aWRlcikge1xuICAgIGNvbnN0IG9yQ29sbGVjdG9yID0gbmV3IE9yQ29sbGVjdG9yKCk7XG4gICAgdG9wTGV2ZWxSdWxlLmFjY2VwdChvckNvbGxlY3Rvcik7XG4gICAgY29uc3Qgb3JzID0gb3JDb2xsZWN0b3IuYWx0ZXJuYXRpb25zO1xuICAgIGNvbnN0IGVycm9ycyA9IGZsYXRNYXAob3JzLCAoY3Vyck9yKSA9PiB7XG4gICAgICAgIGlmIChjdXJyT3IuZGVmaW5pdGlvbi5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2dQcm92aWRlci5idWlsZFRvb01hbnlBbHRlcm5hdGl2ZXNFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHRvcExldmVsUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uOiBjdXJyT3IsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLlRPT19NQU5ZX0FMVFMsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiB0b3BMZXZlbFJ1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb2NjdXJyZW5jZTogY3Vyck9yLmlkeCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKHRvcExldmVsUnVsZXMsIG1heExvb2thaGVhZCwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBmb3JFYWNoKHRvcExldmVsUnVsZXMsIChjdXJyVG9wUnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2xsZWN0b3JWaXNpdG9yID0gbmV3IFJlcGV0aXRpb25Db2xsZWN0b3IoKTtcbiAgICAgICAgY3VyclRvcFJ1bGUuYWNjZXB0KGNvbGxlY3RvclZpc2l0b3IpO1xuICAgICAgICBjb25zdCBhbGxSdWxlUHJvZHVjdGlvbnMgPSBjb2xsZWN0b3JWaXNpdG9yLmFsbFByb2R1Y3Rpb25zO1xuICAgICAgICBmb3JFYWNoKGFsbFJ1bGVQcm9kdWN0aW9ucywgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9kVHlwZSA9IGdldFByb2RUeXBlKGN1cnJQcm9kKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbE1heExvb2thaGVhZCA9IGN1cnJQcm9kLm1heExvb2thaGVhZCB8fCBtYXhMb29rYWhlYWQ7XG4gICAgICAgICAgICBjb25zdCBjdXJyT2NjdXJyZW5jZSA9IGN1cnJQcm9kLmlkeDtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2QoY3Vyck9jY3VycmVuY2UsIGN1cnJUb3BSdWxlLCBwcm9kVHlwZSwgYWN0dWFsTWF4TG9va2FoZWFkKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzSW5zaWRlUHJvZHVjdGlvbiA9IHBhdGhzWzBdO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoZmxhdHRlbihwYXRoc0luc2lkZVByb2R1Y3Rpb24pKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IGVyck1zZ1Byb3ZpZGVyLmJ1aWxkRW1wdHlSZXBldGl0aW9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IGN1cnJUb3BSdWxlLFxuICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uOiBjdXJyUHJvZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyck1zZyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5OT19OT05fRU1QVFlfTE9PS0FIRUFELFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogY3VyclRvcFJ1bGUubmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmZ1bmN0aW9uIGNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMoYWx0ZXJuYXRpdmVzLCBhbHRlcm5hdGlvbiwgcnVsZSwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBmb3VuZEFtYmlndW91c1BhdGhzID0gW107XG4gICAgY29uc3QgaWRlbnRpY2FsQW1iaWd1aXRpZXMgPSByZWR1Y2UoYWx0ZXJuYXRpdmVzLCAocmVzdWx0LCBjdXJyQWx0LCBjdXJyQWx0SWR4KSA9PiB7XG4gICAgICAgIC8vIGlnbm9yZSAoc2tpcCkgYW1iaWd1aXRpZXMgd2l0aCB0aGlzIGFsdGVybmF0aXZlXG4gICAgICAgIGlmIChhbHRlcm5hdGlvbi5kZWZpbml0aW9uW2N1cnJBbHRJZHhdLmlnbm9yZUFtYmlndWl0aWVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGZvckVhY2goY3VyckFsdCwgKGN1cnJQYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbHRzQ3VyclBhdGhBcHBlYXJzSW4gPSBbY3VyckFsdElkeF07XG4gICAgICAgICAgICBmb3JFYWNoKGFsdGVybmF0aXZlcywgKGN1cnJPdGhlckFsdCwgY3Vyck90aGVyQWx0SWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJBbHRJZHggIT09IGN1cnJPdGhlckFsdElkeCAmJlxuICAgICAgICAgICAgICAgICAgICBjb250YWluc1BhdGgoY3Vyck90aGVyQWx0LCBjdXJyUGF0aCkgJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIChza2lwKSBhbWJpZ3VpdGllcyB3aXRoIHRoaXMgXCJvdGhlclwiIGFsdGVybmF0aXZlXG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uLmRlZmluaXRpb25bY3Vyck90aGVyQWx0SWR4XS5pZ25vcmVBbWJpZ3VpdGllcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBhbHRzQ3VyclBhdGhBcHBlYXJzSW4ucHVzaChjdXJyT3RoZXJBbHRJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFsdHNDdXJyUGF0aEFwcGVhcnNJbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgIWNvbnRhaW5zUGF0aChmb3VuZEFtYmlndW91c1BhdGhzLCBjdXJyUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEFtYmlndW91c1BhdGhzLnB1c2goY3VyclBhdGgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWx0czogYWx0c0N1cnJQYXRoQXBwZWFyc0luLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdXJyUGF0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGN1cnJFcnJvcnMgPSBtYXAoaWRlbnRpY2FsQW1iaWd1aXRpZXMsIChjdXJyQW1iRGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCBhbWJnSW5kaWNlcyA9IG1hcChjdXJyQW1iRGVzY3JpcHRvci5hbHRzLCAoY3VyckFsdElkeCkgPT4gY3VyckFsdElkeCArIDEpO1xuICAgICAgICBjb25zdCBjdXJyTWVzc2FnZSA9IGVyck1zZ1Byb3ZpZGVyLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7XG4gICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICBhbHRlcm5hdGlvbjogYWx0ZXJuYXRpb24sXG4gICAgICAgICAgICBhbWJpZ3VpdHlJbmRpY2VzOiBhbWJnSW5kaWNlcyxcbiAgICAgICAgICAgIHByZWZpeFBhdGg6IGN1cnJBbWJEZXNjcmlwdG9yLnBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogY3Vyck1lc3NhZ2UsXG4gICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLkFNQklHVU9VU19BTFRTLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGUubmFtZSxcbiAgICAgICAgICAgIG9jY3VycmVuY2U6IGFsdGVybmF0aW9uLmlkeCxcbiAgICAgICAgICAgIGFsdGVybmF0aXZlczogY3VyckFtYkRlc2NyaXB0b3IuYWx0cyxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gY3VyckVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ByZWZpeEFsdGVybmF0aXZlc0FtYmlndWl0aWVzKGFsdGVybmF0aXZlcywgYWx0ZXJuYXRpb24sIHJ1bGUsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgLy8gZmxhdHRlblxuICAgIGNvbnN0IHBhdGhzQW5kSW5kaWNlcyA9IHJlZHVjZShhbHRlcm5hdGl2ZXMsIChyZXN1bHQsIGN1cnJBbHQsIGlkeCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyUGF0aHNBbmRJZHggPSBtYXAoY3VyckFsdCwgKGN1cnJQYXRoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBpZHg6IGlkeCwgcGF0aDogY3VyclBhdGggfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KGN1cnJQYXRoc0FuZElkeCk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGVycm9ycyA9IGNvbXBhY3QoZmxhdE1hcChwYXRoc0FuZEluZGljZXMsIChjdXJyUGF0aEFuZElkeCkgPT4ge1xuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZUdhc3QgPSBhbHRlcm5hdGlvbi5kZWZpbml0aW9uW2N1cnJQYXRoQW5kSWR4LmlkeF07XG4gICAgICAgIC8vIGlnbm9yZSAoc2tpcCkgYW1iaWd1aXRpZXMgd2l0aCB0aGlzIGFsdGVybmF0aXZlXG4gICAgICAgIGlmIChhbHRlcm5hdGl2ZUdhc3QuaWdub3JlQW1iaWd1aXRpZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXRJZHggPSBjdXJyUGF0aEFuZElkeC5pZHg7XG4gICAgICAgIGNvbnN0IHRhcmdldFBhdGggPSBjdXJyUGF0aEFuZElkeC5wYXRoO1xuICAgICAgICBjb25zdCBwcmVmaXhBbWJpZ3VpdGllc1BhdGhzQW5kSW5kaWNlcyA9IGZpbHRlcihwYXRoc0FuZEluZGljZXMsIChzZWFyY2hQYXRoQW5kSWR4KSA9PiB7XG4gICAgICAgICAgICAvLyBwcmVmaXggYW1iaWd1aXR5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgZnJvbSBsb3dlciBpZHggKGhpZ2hlciBwcmlvcml0eSkgcGF0aFxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIC8vIGlnbm9yZSAoc2tpcCkgYW1iaWd1aXRpZXMgd2l0aCB0aGlzIFwib3RoZXJcIiBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgYWx0ZXJuYXRpb24uZGVmaW5pdGlvbltzZWFyY2hQYXRoQW5kSWR4LmlkeF0uaWdub3JlQW1iaWd1aXRpZXMgIT09XG4gICAgICAgICAgICAgICAgdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHNlYXJjaFBhdGhBbmRJZHguaWR4IDwgdGFyZ2V0SWR4ICYmXG4gICAgICAgICAgICAgICAgLy8gY2hlY2tpbmcgZm9yIHN0cmljdCBwcmVmaXggYmVjYXVzZSBpZGVudGljYWwgbG9va2FoZWFkc1xuICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgYmUgZGV0ZWN0ZWQgdXNpbmcgYSBkaWZmZXJlbnQgdmFsaWRhdGlvbi5cbiAgICAgICAgICAgICAgICBpc1N0cmljdFByZWZpeE9mUGF0aChzZWFyY2hQYXRoQW5kSWR4LnBhdGgsIHRhcmdldFBhdGgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGN1cnJQYXRoUHJlZml4RXJyb3JzID0gbWFwKHByZWZpeEFtYmlndWl0aWVzUGF0aHNBbmRJbmRpY2VzLCAoY3VyckFtYlBhdGhBbmRJZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFtYmdJbmRpY2VzID0gW2N1cnJBbWJQYXRoQW5kSWR4LmlkeCArIDEsIHRhcmdldElkeCArIDFdO1xuICAgICAgICAgICAgY29uc3Qgb2NjdXJyZW5jZSA9IGFsdGVybmF0aW9uLmlkeCA9PT0gMCA/IFwiXCIgOiBhbHRlcm5hdGlvbi5pZHg7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyTXNnUHJvdmlkZXIuYnVpbGRBbHRlcm5hdGlvblByZWZpeEFtYmlndWl0eUVycm9yKHtcbiAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRpb246IGFsdGVybmF0aW9uLFxuICAgICAgICAgICAgICAgIGFtYmlndWl0eUluZGljZXM6IGFtYmdJbmRpY2VzLFxuICAgICAgICAgICAgICAgIHByZWZpeFBhdGg6IGN1cnJBbWJQYXRoQW5kSWR4LnBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLkFNQklHVU9VU19QUkVGSVhfQUxUUyxcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogcnVsZS5uYW1lLFxuICAgICAgICAgICAgICAgIG9jY3VycmVuY2U6IG9jY3VycmVuY2UsXG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzOiBhbWJnSW5kaWNlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY3VyclBhdGhQcmVmaXhFcnJvcnM7XG4gICAgfSkpO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5mdW5jdGlvbiBjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSh0b3BMZXZlbHMsIHRva2VuVHlwZXMsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgY29uc3QgdG9rZW5OYW1lcyA9IG1hcCh0b2tlblR5cGVzLCAoY3VyclRva2VuKSA9PiBjdXJyVG9rZW4ubmFtZSk7XG4gICAgZm9yRWFjaCh0b3BMZXZlbHMsIChjdXJyUnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyUnVsZU5hbWUgPSBjdXJyUnVsZS5uYW1lO1xuICAgICAgICBpZiAoaW5jbHVkZXModG9rZW5OYW1lcywgY3VyclJ1bGVOYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gZXJyTXNnUHJvdmlkZXIuYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKGN1cnJSdWxlKTtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2csXG4gICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBjdXJyUnVsZU5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGVja3MuanMubWFwIiwKICAgICJpbXBvcnQgeyBkZWZhdWx0cywgZm9yRWFjaCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IHJlc29sdmVHcmFtbWFyIGFzIG9yZ1Jlc29sdmVHcmFtbWFyIH0gZnJvbSBcIi4uL3Jlc29sdmVyLmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUdyYW1tYXIgYXMgb3JnVmFsaWRhdGVHcmFtbWFyIH0gZnJvbSBcIi4uL2NoZWNrcy5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdEdyYW1tYXJSZXNvbHZlckVycm9yUHJvdmlkZXIsIGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlciwgfSBmcm9tIFwiLi4vLi4vZXJyb3JzX3B1YmxpYy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHcmFtbWFyKG9wdGlvbnMpIHtcbiAgICBjb25zdCBhY3R1YWxPcHRpb25zID0gZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgICBlcnJNc2dQcm92aWRlcjogZGVmYXVsdEdyYW1tYXJSZXNvbHZlckVycm9yUHJvdmlkZXIsXG4gICAgfSk7XG4gICAgY29uc3QgdG9wUnVsZXNUYWJsZSA9IHt9O1xuICAgIGZvckVhY2gob3B0aW9ucy5ydWxlcywgKHJ1bGUpID0+IHtcbiAgICAgICAgdG9wUnVsZXNUYWJsZVtydWxlLm5hbWVdID0gcnVsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3JnUmVzb2x2ZUdyYW1tYXIodG9wUnVsZXNUYWJsZSwgYWN0dWFsT3B0aW9ucy5lcnJNc2dQcm92aWRlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHcmFtbWFyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgICBlcnJNc2dQcm92aWRlcjogZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBvcmdWYWxpZGF0ZUdyYW1tYXIob3B0aW9ucy5ydWxlcywgb3B0aW9ucy50b2tlblR5cGVzLCBvcHRpb25zLmVyck1zZ1Byb3ZpZGVyLCBvcHRpb25zLmdyYW1tYXJOYW1lKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdhc3RfcmVzb2x2ZXJfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaW5jbHVkZXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5jb25zdCBNSVNNQVRDSEVEX1RPS0VOX0VYQ0VQVElPTiA9IFwiTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uXCI7XG5jb25zdCBOT19WSUFCTEVfQUxUX0VYQ0VQVElPTiA9IFwiTm9WaWFibGVBbHRFeGNlcHRpb25cIjtcbmNvbnN0IEVBUkxZX0VYSVRfRVhDRVBUSU9OID0gXCJFYXJseUV4aXRFeGNlcHRpb25cIjtcbmNvbnN0IE5PVF9BTExfSU5QVVRfUEFSU0VEX0VYQ0VQVElPTiA9IFwiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb25cIjtcbmNvbnN0IFJFQ09HTklUSU9OX0VYQ0VQVElPTl9OQU1FUyA9IFtcbiAgICBNSVNNQVRDSEVEX1RPS0VOX0VYQ0VQVElPTixcbiAgICBOT19WSUFCTEVfQUxUX0VYQ0VQVElPTixcbiAgICBFQVJMWV9FWElUX0VYQ0VQVElPTixcbiAgICBOT1RfQUxMX0lOUFVUX1BBUlNFRF9FWENFUFRJT04sXG5dO1xuT2JqZWN0LmZyZWV6ZShSRUNPR05JVElPTl9FWENFUFRJT05fTkFNRVMpO1xuLy8gaGFja3MgdG8gYnlwYXNzIG5vIHN1cHBvcnQgZm9yIGN1c3RvbSBFcnJvcnMgaW4gamF2YXNjcmlwdC90eXBlc2NyaXB0XG5leHBvcnQgZnVuY3Rpb24gaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbihlcnJvcikge1xuICAgIC8vIGNhbid0IGRvIGluc3RhbmNlb2Ygb24gaGFja2VkIGN1c3RvbSBqcyBleGNlcHRpb25zXG4gICAgcmV0dXJuIGluY2x1ZGVzKFJFQ09HTklUSU9OX0VYQ0VQVElPTl9OQU1FUywgZXJyb3IubmFtZSk7XG59XG5jbGFzcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0b2tlbikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICB0aGlzLnJlc3luY2VkVG9rZW5zID0gW107XG4gICAgICAgIC8vIGZpeCBwcm90b3R5cGUgY2hhaW4gd2hlbiB0eXBlc2NyaXB0IHRhcmdldCBpcyBFUzVcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBWOCB3b3JrYXJvdW5kIHRvIHJlbW92ZSBjb25zdHJ1Y3RvciBmcm9tIHN0YWNrdHJhY2Ugd2hlbiB0eXBlc2NyaXB0IHRhcmdldCBpcyBFUzUgKi9cbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24gZXh0ZW5kcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdG9rZW4sIHByZXZpb3VzVG9rZW4pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdG9rZW4pO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuICAgICAgICB0aGlzLm5hbWUgPSBNSVNNQVRDSEVEX1RPS0VOX0VYQ0VQVElPTjtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTm9WaWFibGVBbHRFeGNlcHRpb24gZXh0ZW5kcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdG9rZW4sIHByZXZpb3VzVG9rZW4pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdG9rZW4pO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuICAgICAgICB0aGlzLm5hbWUgPSBOT19WSUFCTEVfQUxUX0VYQ0VQVElPTjtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24gZXh0ZW5kcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdG9rZW4pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdG9rZW4pO1xuICAgICAgICB0aGlzLm5hbWUgPSBOT1RfQUxMX0lOUFVUX1BBUlNFRF9FWENFUFRJT047XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEVhcmx5RXhpdEV4Y2VwdGlvbiBleHRlbmRzIFJlY29nbml0aW9uRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0b2tlbiwgcHJldmlvdXNUb2tlbikge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCB0b2tlbik7XG4gICAgICAgIHRoaXMucHJldmlvdXNUb2tlbiA9IHByZXZpb3VzVG9rZW47XG4gICAgICAgIHRoaXMubmFtZSA9IEVBUkxZX0VYSVRfRVhDRVBUSU9OO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4Y2VwdGlvbnNfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlVG9rZW5JbnN0YW5jZSwgRU9GLCB0b2tlbk1hdGNoZXIsIH0gZnJvbSBcIi4uLy4uLy4uL3NjYW4vdG9rZW5zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgY2xvbmUsIGRyb3BSaWdodCwgZmluZCwgZmxhdHRlbiwgaGFzLCBpbmNsdWRlcywgaXNFbXB0eSwgbWFwLCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9leGNlcHRpb25zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgSU4gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyLmpzXCI7XG5leHBvcnQgY29uc3QgRU9GX0ZPTExPV19LRVkgPSB7fTtcbmV4cG9ydCBjb25zdCBJTl9SVUxFX1JFQ09WRVJZX0VYQ0VQVElPTiA9IFwiSW5SdWxlUmVjb3ZlcnlFeGNlcHRpb25cIjtcbmV4cG9ydCBjbGFzcyBJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBJTl9SVUxFX1JFQ09WRVJZX0VYQ0VQVElPTjtcbiAgICB9XG59XG4vKipcbiAqIFRoaXMgdHJhaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBlcnJvciByZWNvdmVyeSBhbmQgZmF1bHQgdG9sZXJhbnQgbG9naWNcbiAqL1xuZXhwb3J0IGNsYXNzIFJlY292ZXJhYmxlIHtcbiAgICBpbml0UmVjb3ZlcmFibGUoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuZmlyc3RBZnRlclJlcE1hcCA9IHt9O1xuICAgICAgICB0aGlzLnJlc3luY0ZvbGxvd3MgPSB7fTtcbiAgICAgICAgdGhpcy5yZWNvdmVyeUVuYWJsZWQgPSBoYXMoY29uZmlnLCBcInJlY292ZXJ5RW5hYmxlZFwiKVxuICAgICAgICAgICAgPyBjb25maWcucmVjb3ZlcnlFbmFibGVkIC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgICAgIDogREVGQVVMVF9QQVJTRVJfQ09ORklHLnJlY292ZXJ5RW5hYmxlZDtcbiAgICAgICAgLy8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBOT09QIHdpbGwgYmUgaW5saW5lZCB3aGljaFxuICAgICAgICAvLyBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoaXMgb3B0aW9uYWwgZmVhdHVyZSBkb2VzIG5vdCBleGlzdFxuICAgICAgICAvLyB3aGVuIG5vdCB1c2VkLlxuICAgICAgICBpZiAodGhpcy5yZWNvdmVyeUVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5ID0gYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFRva2VuVG9JbnNlcnQodG9rVHlwZSkge1xuICAgICAgICBjb25zdCB0b2tUb0luc2VydCA9IGNyZWF0ZVRva2VuSW5zdGFuY2UodG9rVHlwZSwgXCJcIiwgTmFOLCBOYU4sIE5hTiwgTmFOLCBOYU4sIE5hTik7XG4gICAgICAgIHRva1RvSW5zZXJ0LmlzSW5zZXJ0ZWRJblJlY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRva1RvSW5zZXJ0O1xuICAgIH1cbiAgICBjYW5Ub2tlblR5cGVCZUluc2VydGVkSW5SZWNvdmVyeSh0b2tUeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KHRva1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRyeUluUmVwZXRpdGlvblJlY292ZXJ5KGdyYW1tYXJSdWxlLCBncmFtbWFyUnVsZUFyZ3MsIGxvb2tBaGVhZEZ1bmMsIGV4cGVjdGVkVG9rVHlwZSkge1xuICAgICAgICAvLyBUT0RPOiBjYW4gdGhlIHJlc3luY1Rva2VuVHlwZSBiZSBjYWNoZWQ/XG4gICAgICAgIGNvbnN0IHJlU3luY1Rva1R5cGUgPSB0aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtcbiAgICAgICAgY29uc3Qgc2F2ZWRMZXhlclN0YXRlID0gdGhpcy5leHBvcnRMZXhlclN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHJlc3luY2VkVG9rZW5zID0gW107XG4gICAgICAgIGxldCBwYXNzZWRSZXN5bmNQb2ludCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBuZXh0VG9rZW5XaXRob3V0UmVzeW5jID0gdGhpcy5MQSgxKTtcbiAgICAgICAgbGV0IGN1cnJUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlRXJyb3JNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNUb2tlbiA9IHRoaXMuTEEoMCk7XG4gICAgICAgICAgICAvLyB3ZSBhcmUgcHJlZW1wdGl2ZWx5IHJlLXN5bmNpbmcgYmVmb3JlIGFuIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLCB0aGVyZWZvciB3ZSBtdXN0IHJlcHJvZHVjZVxuICAgICAgICAgICAgLy8gdGhlIGVycm9yIHRoYXQgd291bGQgaGF2ZSBiZWVuIHRocm93blxuICAgICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRUb2tUeXBlLFxuICAgICAgICAgICAgICAgIGFjdHVhbDogbmV4dFRva2VuV2l0aG91dFJlc3luYyxcbiAgICAgICAgICAgICAgICBwcmV2aW91czogcHJldmlvdXNUb2tlbixcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbihtc2csIG5leHRUb2tlbldpdGhvdXRSZXN5bmMsIHRoaXMuTEEoMCkpO1xuICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHRva2VuIGhlcmUgd2lsbCBiZSB0aGUgb3JpZ2luYWwgY2F1c2Ugb2YgdGhlIGVycm9yLCB0aGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXN5bmNlZFRva2VucyBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGVycm9yLnJlc3luY2VkVG9rZW5zID0gZHJvcFJpZ2h0KHJlc3luY2VkVG9rZW5zKTtcbiAgICAgICAgICAgIHRoaXMuU0FWRV9FUlJPUihlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIHdoaWxlICghcGFzc2VkUmVzeW5jUG9pbnQpIHtcbiAgICAgICAgICAgIC8vIHJlLXN5bmNlZCB0byBhIHBvaW50IHdoZXJlIHdlIGNhbiBzYWZlbHkgZXhpdCB0aGUgcmVwZXRpdGlvbi9cbiAgICAgICAgICAgIGlmICh0aGlzLnRva2VuTWF0Y2hlcihjdXJyVG9rZW4sIGV4cGVjdGVkVG9rVHlwZSkpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUVycm9yTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gbXVzdCByZXR1cm4gaGVyZSB0byBhdm9pZCByZXZlcnRpbmcgdGhlIGlucHV0SWR4XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChsb29rQWhlYWRGdW5jLmNhbGwodGhpcykpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBza2lwcGVkIGVub3VnaCB0b2tlbnMgc28gd2UgY2FuIHJlc3luYyByaWdodCBiYWNrIGludG8gYW5vdGhlciBpdGVyYXRpb24gb2YgdGhlIHJlcGV0aXRpb24gZ3JhbW1hciBydWxlXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgaW52b2NhdGlvbiBpbiBvdGhlciB0byBzdXBwb3J0IG11bHRpcGxlIHJlLXN5bmNzIGluIHRoZSBzYW1lIHRvcCBsZXZlbCByZXBldGl0aW9uIGdyYW1tYXIgcnVsZVxuICAgICAgICAgICAgICAgIGdyYW1tYXJSdWxlLmFwcGx5KHRoaXMsIGdyYW1tYXJSdWxlQXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBtdXN0IHJldHVybiBoZXJlIHRvIGF2b2lkIHJldmVydGluZyB0aGUgaW5wdXRJZHhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudG9rZW5NYXRjaGVyKGN1cnJUb2tlbiwgcmVTeW5jVG9rVHlwZSkpIHtcbiAgICAgICAgICAgICAgICBwYXNzZWRSZXN5bmNQb2ludCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyVG9rZW4gPSB0aGlzLlNLSVBfVE9LRU4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKGN1cnJUb2tlbiwgcmVzeW5jZWRUb2tlbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBDTE9TRVIgcG9pbnQgdG8gcmVzeW5jIGluc2lkZSB0aGUgUmVwZXRpdGlvbiwgcmVzZXQgdGhlIHN0YXRlLlxuICAgICAgICAvLyBUaGUgcGFyc2luZyBleGNlcHRpb24gd2Ugd2VyZSB0cnlpbmcgdG8gcHJldmVudCB3aWxsIGhhcHBlbiBpbiB0aGUgTkVYVCBwYXJzaW5nIHN0ZXAuIGl0IG1heSBiZSBoYW5kbGVkIGJ5XG4gICAgICAgIC8vIFwiYmV0d2VlbiBydWxlc1wiIHJlc3luYyByZWNvdmVyeSBsYXRlciBpbiB0aGUgZmxvdy5cbiAgICAgICAgdGhpcy5pbXBvcnRMZXhlclN0YXRlKHNhdmVkTGV4ZXJTdGF0ZSk7XG4gICAgfVxuICAgIHNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChleHBlY3RUb2tBZnRlckxhc3RNYXRjaCwgbmV4dFRva0lkeCwgbm90U3R1Y2spIHtcbiAgICAgICAgLy8gRWRnZSBjYXNlIG9mIGFycml2aW5nIGZyb20gYSBNQU5ZIHJlcGV0aXRpb24gd2hpY2ggaXMgc3R1Y2tcbiAgICAgICAgLy8gQXR0ZW1wdGluZyByZWNvdmVyeSBpbiB0aGlzIGNhc2UgY291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICBpZiAobm90U3R1Y2sgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gbmVlZCB0byByZWNvdmVyLCBuZXh0IHRva2VuIGlzIHdoYXQgd2UgZXhwZWN0Li4uXG4gICAgICAgIGlmICh0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLCBleHBlY3RUb2tBZnRlckxhc3RNYXRjaCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlcnJvciByZWNvdmVyeSBpcyBkaXNhYmxlZCBkdXJpbmcgYmFja3RyYWNraW5nIGFzIGl0IGNhbiBtYWtlIHRoZSBwYXJzZXIgaWdub3JlIGEgdmFsaWQgZ3JhbW1hciBwYXRoXG4gICAgICAgIC8vIGFuZCBwcmVmZXIgc29tZSBiYWNrdHJhY2tpbmcgcGF0aCB0aGF0IGluY2x1ZGVzIHJlY292ZXJlZCBlcnJvcnMuXG4gICAgICAgIGlmICh0aGlzLmlzQmFja1RyYWNraW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBjYW4gcGVyZm9ybSBpblJ1bGUgcmVjb3ZlcnkgKHNpbmdsZSB0b2tlbiBpbnNlcnRpb24gb3IgZGVsZXRpb24pIHdlIGFsd2F5cyBwcmVmZXIgdGhhdCByZWNvdmVyeSBhbGdvcml0aG1cbiAgICAgICAgLy8gYmVjYXVzZSBpZiBpdCB3b3JrcywgaXQgbWFrZXMgdGhlIGxlYXN0IGFtb3VudCBvZiBjaGFuZ2VzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKGdyZWVkeSBhbGdvcml0aG0pXG4gICAgICAgIC8vbm9pbnNwZWN0aW9uIFJlZHVuZGFudElmU3RhdGVtZW50SlNcbiAgICAgICAgaWYgKHRoaXMuY2FuUGVyZm9ybUluUnVsZVJlY292ZXJ5KGV4cGVjdFRva0FmdGVyTGFzdE1hdGNoLCB0aGlzLmdldEZvbGxvd3NGb3JJblJ1bGVSZWNvdmVyeShleHBlY3RUb2tBZnRlckxhc3RNYXRjaCwgbmV4dFRva0lkeCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIEVycm9yIFJlY292ZXJ5IGZ1bmN0aW9uYWxpdHlcbiAgICBnZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkodG9rVHlwZSwgdG9rSWR4SW5SdWxlKSB7XG4gICAgICAgIGNvbnN0IGdyYW1tYXJQYXRoID0gdGhpcy5nZXRDdXJyZW50R3JhbW1hclBhdGgodG9rVHlwZSwgdG9rSWR4SW5SdWxlKTtcbiAgICAgICAgY29uc3QgZm9sbG93cyA9IHRoaXMuZ2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhncmFtbWFyUGF0aCk7XG4gICAgICAgIHJldHVybiBmb2xsb3dzO1xuICAgIH1cbiAgICB0cnlJblJ1bGVSZWNvdmVyeShleHBlY3RlZFRva1R5cGUsIGZvbGxvd3MpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihleHBlY3RlZFRva1R5cGUsIGZvbGxvd3MpKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tUb0luc2VydCA9IHRoaXMuZ2V0VG9rZW5Ub0luc2VydChleHBlY3RlZFRva1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRva1RvSW5zZXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihleHBlY3RlZFRva1R5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9rID0gdGhpcy5TS0lQX1RPS0VOKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVUb2tlbigpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHRUb2s7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEluUnVsZVJlY292ZXJ5RXhjZXB0aW9uKFwic2FkIHNhZCBwYW5kYVwiKTtcbiAgICB9XG4gICAgY2FuUGVyZm9ybUluUnVsZVJlY292ZXJ5KGV4cGVjdGVkVG9rZW4sIGZvbGxvd3MpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZXhwZWN0ZWRUb2tlbiwgZm9sbG93cykgfHxcbiAgICAgICAgICAgIHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGV4cGVjdGVkVG9rZW4pKTtcbiAgICB9XG4gICAgY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihleHBlY3RlZFRva1R5cGUsIGZvbGxvd3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGV4cGVjdGVkVG9rVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtdXN0IGtub3cgdGhlIHBvc3NpYmxlIGZvbGxvd2luZyB0b2tlbnMgdG8gcGVyZm9ybSBzaW5nbGUgdG9rZW4gaW5zZXJ0aW9uXG4gICAgICAgIGlmIChpc0VtcHR5KGZvbGxvd3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlzbWF0Y2hlZFRvayA9IHRoaXMuTEEoMSk7XG4gICAgICAgIGNvbnN0IGlzTWlzTWF0Y2hlZFRva0luRm9sbG93cyA9IGZpbmQoZm9sbG93cywgKHBvc3NpYmxlRm9sbG93c1Rva1R5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuTWF0Y2hlcihtaXNtYXRjaGVkVG9rLCBwb3NzaWJsZUZvbGxvd3NUb2tUeXBlKTtcbiAgICAgICAgfSkgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGlzTWlzTWF0Y2hlZFRva0luRm9sbG93cztcbiAgICB9XG4gICAgY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGV4cGVjdGVkVG9rVHlwZSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShleHBlY3RlZFRva1R5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNOZXh0VG9rZW5XaGF0SXNFeHBlY3RlZCA9IHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksIGV4cGVjdGVkVG9rVHlwZSk7XG4gICAgICAgIHJldHVybiBpc05leHRUb2tlbldoYXRJc0V4cGVjdGVkO1xuICAgIH1cbiAgICBpc0luQ3VycmVudFJ1bGVSZVN5bmNTZXQodG9rZW5UeXBlSWR4KSB7XG4gICAgICAgIGNvbnN0IGZvbGxvd0tleSA9IHRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50UnVsZVJlU3luY1NldCA9IHRoaXMuZ2V0Rm9sbG93U2V0RnJvbUZvbGxvd0tleShmb2xsb3dLZXkpO1xuICAgICAgICByZXR1cm4gaW5jbHVkZXMoY3VycmVudFJ1bGVSZVN5bmNTZXQsIHRva2VuVHlwZUlkeCk7XG4gICAgfVxuICAgIGZpbmRSZVN5bmNUb2tlblR5cGUoKSB7XG4gICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlUmVTeW5jVG9rVHlwZXMgPSB0aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKTtcbiAgICAgICAgLy8gdGhpcyBsb29wIHdpbGwgYWx3YXlzIHRlcm1pbmF0ZSBhcyBFT0YgaXMgYWx3YXlzIGluIHRoZSBmb2xsb3cgc3RhY2sgYW5kIGFsc28gYWx3YXlzICh2aXJ0dWFsbHkpIGluIHRoZSBpbnB1dFxuICAgICAgICBsZXQgbmV4dFRva2VuID0gdGhpcy5MQSgxKTtcbiAgICAgICAgbGV0IGsgPSAyO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmRNYXRjaCA9IGZpbmQoYWxsUG9zc2libGVSZVN5bmNUb2tUeXBlcywgKHJlc3luY1Rva1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5NYXRjaCA9IHRva2VuTWF0Y2hlcihuZXh0VG9rZW4sIHJlc3luY1Rva1R5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW5NYXRjaDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZvdW5kTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZE1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFRva2VuID0gdGhpcy5MQShrKTtcbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDdXJyRm9sbG93S2V5KCkge1xuICAgICAgICAvLyB0aGUgbGVuZ3RoIGlzIGF0IGxlYXN0IG9uZSBhcyB3ZSBhbHdheXMgYWRkIHRoZSBydWxlTmFtZSB0byB0aGUgc3RhY2sgYmVmb3JlIGludm9raW5nIHRoZSBydWxlLlxuICAgICAgICBpZiAodGhpcy5SVUxFX1NUQUNLLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIEVPRl9GT0xMT1dfS0VZO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJSdWxlU2hvcnROYW1lID0gdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7XG4gICAgICAgIGNvbnN0IGN1cnJSdWxlSWR4ID0gdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlT2NjdXJyZW5jZUluZGV4KCk7XG4gICAgICAgIGNvbnN0IHByZXZSdWxlU2hvcnROYW1lID0gdGhpcy5nZXRQcmV2aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoY3VyclJ1bGVTaG9ydE5hbWUpLFxuICAgICAgICAgICAgaWR4SW5DYWxsaW5nUnVsZTogY3VyclJ1bGVJZHgsXG4gICAgICAgICAgICBpblJ1bGU6IHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUocHJldlJ1bGVTaG9ydE5hbWUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBidWlsZEZ1bGxGb2xsb3dLZXlTdGFjaygpIHtcbiAgICAgICAgY29uc3QgZXhwbGljaXRSdWxlU3RhY2sgPSB0aGlzLlJVTEVfU1RBQ0s7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0T2NjdXJyZW5jZVN0YWNrID0gdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7XG4gICAgICAgIHJldHVybiBtYXAoZXhwbGljaXRSdWxlU3RhY2ssIChydWxlTmFtZSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVPRl9GT0xMT1dfS0VZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgICAgICAgaWR4SW5DYWxsaW5nUnVsZTogZXhwbGljaXRPY2N1cnJlbmNlU3RhY2tbaWR4XSxcbiAgICAgICAgICAgICAgICBpblJ1bGU6IHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoZXhwbGljaXRSdWxlU3RhY2tbaWR4IC0gMV0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZsYXR0ZW5Gb2xsb3dTZXQoKSB7XG4gICAgICAgIGNvbnN0IGZvbGxvd1N0YWNrID0gbWFwKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSwgKGN1cnJLZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkoY3VycktleSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmxhdHRlbihmb2xsb3dTdGFjayk7XG4gICAgfVxuICAgIGdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkoZm9sbG93S2V5KSB7XG4gICAgICAgIGlmIChmb2xsb3dLZXkgPT09IEVPRl9GT0xMT1dfS0VZKSB7XG4gICAgICAgICAgICByZXR1cm4gW0VPRl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9sbG93TmFtZSA9IGZvbGxvd0tleS5ydWxlTmFtZSArIGZvbGxvd0tleS5pZHhJbkNhbGxpbmdSdWxlICsgSU4gKyBmb2xsb3dLZXkuaW5SdWxlO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN5bmNGb2xsb3dzW2ZvbGxvd05hbWVdO1xuICAgIH1cbiAgICAvLyBJdCBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSB0byBpbmNsdWRlIGEgdmlydHVhbCBFT0YgdG9rZW4gaW4gdGhlIGxpc3Qgb2YgcmVzeW5jZWQgdG9rZW5zXG4gICAgLy8gYXMgRU9GIGRvZXMgbm90IHJlYWxseSBleGlzdCBhbmQgdGh1cyBkb2VzIG5vdCBjb250YWluIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gKGxpbmUvY29sdW1uIG51bWJlcnMpXG4gICAgYWRkVG9SZXN5bmNUb2tlbnModG9rZW4sIHJlc3luY1Rva2Vucykge1xuICAgICAgICBpZiAoIXRoaXMudG9rZW5NYXRjaGVyKHRva2VuLCBFT0YpKSB7XG4gICAgICAgICAgICByZXN5bmNUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3luY1Rva2VucztcbiAgICB9XG4gICAgcmVTeW5jVG8odG9rVHlwZSkge1xuICAgICAgICBjb25zdCByZXN5bmNlZFRva2VucyA9IFtdO1xuICAgICAgICBsZXQgbmV4dFRvayA9IHRoaXMuTEEoMSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2VuTWF0Y2hlcihuZXh0VG9rLCB0b2tUeXBlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5leHRUb2sgPSB0aGlzLlNLSVBfVE9LRU4oKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9SZXN5bmNUb2tlbnMobmV4dFRvaywgcmVzeW5jZWRUb2tlbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBsYXN0IHRva2VuIGlzIG5vdCBwYXJ0IG9mIHRoZSBlcnJvci5cbiAgICAgICAgcmV0dXJuIGRyb3BSaWdodChyZXN5bmNlZFRva2Vucyk7XG4gICAgfVxuICAgIGF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShwcm9kRnVuYywgYXJncywgbG9va2FoZWFkRnVuYywgZHNsTWV0aG9kSWR4LCBwcm9kT2NjdXJyZW5jZSwgbmV4dFRva3NXYWxrZXIsIG5vdFN0dWNrKSB7XG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgdGhpcyBpcyBhIE5PLU9QXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gaXMgd2l0aCB0aGUgZnVuY3Rpb24obm90IG1ldGhvZCkgYmVsb3dcbiAgICB9XG4gICAgZ2V0Q3VycmVudEdyYW1tYXJQYXRoKHRva1R5cGUsIHRva0lkeEluUnVsZSkge1xuICAgICAgICBjb25zdCBwYXRoUnVsZVN0YWNrID0gdGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHBhdGhPY2N1cnJlbmNlU3RhY2sgPSBjbG9uZSh0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7XG4gICAgICAgIGNvbnN0IGdyYW1tYXJQYXRoID0ge1xuICAgICAgICAgICAgcnVsZVN0YWNrOiBwYXRoUnVsZVN0YWNrLFxuICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBwYXRoT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgbGFzdFRvazogdG9rVHlwZSxcbiAgICAgICAgICAgIGxhc3RUb2tPY2N1cnJlbmNlOiB0b2tJZHhJblJ1bGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBncmFtbWFyUGF0aDtcbiAgICB9XG4gICAgZ2V0SHVtYW5SZWFkYWJsZVJ1bGVTdGFjaygpIHtcbiAgICAgICAgcmV0dXJuIG1hcCh0aGlzLlJVTEVfU1RBQ0ssIChjdXJyU2hvcnROYW1lKSA9PiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGN1cnJTaG9ydE5hbWUpKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHByb2RGdW5jLCBhcmdzLCBsb29rYWhlYWRGdW5jLCBkc2xNZXRob2RJZHgsIHByb2RPY2N1cnJlbmNlLCBuZXh0VG9rc1dhbGtlciwgbm90U3R1Y2spIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChkc2xNZXRob2RJZHgsIHByb2RPY2N1cnJlbmNlKTtcbiAgICBsZXQgZmlyc3RBZnRlclJlcEluZm8gPSB0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBba2V5XTtcbiAgICBpZiAoZmlyc3RBZnRlclJlcEluZm8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjdXJyUnVsZU5hbWUgPSB0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKTtcbiAgICAgICAgY29uc3QgcnVsZUdyYW1tYXIgPSB0aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2N1cnJSdWxlTmFtZV07XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBuZXh0VG9rc1dhbGtlcihydWxlR3JhbW1hciwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICBmaXJzdEFmdGVyUmVwSW5mbyA9IHdhbGtlci5zdGFydFdhbGtpbmcoKTtcbiAgICAgICAgdGhpcy5maXJzdEFmdGVyUmVwTWFwW2tleV0gPSBmaXJzdEFmdGVyUmVwSW5mbztcbiAgICB9XG4gICAgbGV0IGV4cGVjdFRva0FmdGVyTGFzdE1hdGNoID0gZmlyc3RBZnRlclJlcEluZm8udG9rZW47XG4gICAgbGV0IG5leHRUb2tJZHggPSBmaXJzdEFmdGVyUmVwSW5mby5vY2N1cnJlbmNlO1xuICAgIGNvbnN0IGlzRW5kT2ZSdWxlID0gZmlyc3RBZnRlclJlcEluZm8uaXNFbmRPZlJ1bGU7XG4gICAgLy8gc3BlY2lhbCBlZGdlIGNhc2Ugb2YgYSBUT1AgbW9zdCByZXBldGl0aW9uIGFmdGVyIHdoaWNoIHRoZSBpbnB1dCBzaG91bGQgRU5ELlxuICAgIC8vIHRoaXMgd2lsbCBmb3JjZSBhbiBhdHRlbXB0IGZvciBpblJ1bGUgcmVjb3ZlcnkgaW4gdGhhdCBzY2VuYXJpby5cbiAgICBpZiAodGhpcy5SVUxFX1NUQUNLLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBpc0VuZE9mUnVsZSAmJlxuICAgICAgICBleHBlY3RUb2tBZnRlckxhc3RNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4cGVjdFRva0FmdGVyTGFzdE1hdGNoID0gRU9GO1xuICAgICAgICBuZXh0VG9rSWR4ID0gMTtcbiAgICB9XG4gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byByZS1zeW5jIHRvLi4uXG4gICAgLy8gdGhpcyBjb25kaXRpb24gd2FzIGV4dHJhY3RlZCBmcm9tIGBzaG91bGRJblJlcGV0aXRpb25SZWNvdmVyeUJlVHJpZWRgIHRvIGFjdCBhcyBhIHR5cGUtZ3VhcmRcbiAgICBpZiAoZXhwZWN0VG9rQWZ0ZXJMYXN0TWF0Y2ggPT09IHVuZGVmaW5lZCB8fCBuZXh0VG9rSWR4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG91bGRJblJlcGV0aXRpb25SZWNvdmVyeUJlVHJpZWQoZXhwZWN0VG9rQWZ0ZXJMYXN0TWF0Y2gsIG5leHRUb2tJZHgsIG5vdFN0dWNrKSkge1xuICAgICAgICAvLyBUT0RPOiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGluc3RlYWQgb2YgcGFzc2luZyB0aGUgb3JpZ2luYWwgYXJncyBoZXJlLCB3ZSBtb2RpZnlcbiAgICAgICAgLy8gdGhlIGFyZ3MgcGFyYW0gKG9yIGNyZWF0ZSBhIG5ldyBvbmUpIGFuZCBtYWtlIHN1cmUgdGhlIGxvb2thaGVhZCBmdW5jIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWRcbiAgICAgICAgLy8gdG8gYXZvaWQgc2VhcmNoaW5nIHRoZSBjYWNoZSBmb3IgaXQgb25jZSBtb3JlLlxuICAgICAgICB0aGlzLnRyeUluUmVwZXRpdGlvblJlY292ZXJ5KHByb2RGdW5jLCBhcmdzLCBsb29rYWhlYWRGdW5jLCBleHBlY3RUb2tBZnRlckxhc3RNYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVjb3ZlcmFibGUuanMubWFwIiwKICAgICIvLyBMb29rYWhlYWQga2V5cyBhcmUgMzJCaXQgaW50ZWdlcnMgaW4gdGhlIGZvcm1cbi8vIFRUVFRUVFRULVpaWlpaWlpaWlpaWi1ZWVlZLVhYWFhYWFhYXG4vLyBYWFhYIC0+IE9jY3VycmVuY2UgSW5kZXggYml0bWFwLlxuLy8gWVlZWSAtPiBEU0wgTWV0aG9kIFR5cGUgYml0bWFwLlxuLy8gWlpaWlpaWlpaWlpaWlpaIC0+IFJ1bGUgc2hvcnQgSW5kZXggYml0bWFwLlxuLy8gVFRUVFRUVFRUIC0+IGFsdGVybmF0aW9uIGFsdGVybmF0aXZlIGluZGV4IGJpdG1hcFxuZXhwb3J0IGNvbnN0IEJJVFNfRk9SX01FVEhPRF9UWVBFID0gNDtcbmV4cG9ydCBjb25zdCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWCA9IDg7XG5leHBvcnQgY29uc3QgQklUU19GT1JfUlVMRV9JRFggPSAxMjtcbi8vIFRPRE86IHZhbGlkYXRpb24sIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBtYXkgYXQgbW9zdCAyXjggLS0+IDI1NiBhbHRlcm5hdGl2ZXMgZm9yIGFuIGFsdGVybmF0aW9uLlxuZXhwb3J0IGNvbnN0IEJJVFNfRk9SX0FMVF9JRFggPSA4O1xuLy8gc2hvcnQgc3RyaW5nIHVzZWQgYXMgcGFydCBvZiBtYXBwaW5nIGtleXMuXG4vLyBiZWluZyBzaG9ydCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugd2hlbiBjb21wb3NpbmcgS0VZUyBmb3IgbWFwcyBvdXQgb2YgdGhlc2Vcbi8vIFRoZSA1IC0gOCBiaXRzICgxNiBwb3NzaWJsZSB2YWx1ZXMsIGFyZSByZXNlcnZlZCBmb3IgdGhlIERTTCBtZXRob2QgaW5kaWNlcylcbmV4cG9ydCBjb25zdCBPUl9JRFggPSAxIDw8IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYO1xuZXhwb3J0IGNvbnN0IE9QVElPTl9JRFggPSAyIDw8IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYO1xuZXhwb3J0IGNvbnN0IE1BTllfSURYID0gMyA8PCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWDtcbmV4cG9ydCBjb25zdCBBVF9MRUFTVF9PTkVfSURYID0gNCA8PCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWDtcbmV4cG9ydCBjb25zdCBNQU5ZX1NFUF9JRFggPSA1IDw8IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYO1xuZXhwb3J0IGNvbnN0IEFUX0xFQVNUX09ORV9TRVBfSURYID0gNiA8PCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWDtcbi8vIHRoaXMgYWN0dWFsbHkgcmV0dXJucyBhIG51bWJlciwgYnV0IGl0IGlzIGFsd2F5cyB1c2VkIGFzIGEgc3RyaW5nIChvYmplY3QgcHJvcCBrZXkpXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKHJ1bGVJZHgsIGRzbE1ldGhvZElkeCwgb2NjdXJyZW5jZSkge1xuICAgIHJldHVybiBvY2N1cnJlbmNlIHwgZHNsTWV0aG9kSWR4IHwgcnVsZUlkeDtcbn1cbmNvbnN0IEJJVFNfU1RBUlRfRk9SX0FMVF9JRFggPSAzMiAtIEJJVFNfRk9SX0FMVF9JRFg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXlzLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZmxhdE1hcCwgaXNFbXB0eSB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlciB9IGZyb20gXCIuLi9lcnJvcnNfcHVibGljLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcywgdmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmUsIHZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uLCB2YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgsIH0gZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgeyBidWlsZEFsdGVybmF0aXZlc0xvb2tBaGVhZEZ1bmMsIGJ1aWxkTG9va2FoZWFkRnVuY0Zvck9wdGlvbmFsUHJvZCwgYnVpbGRMb29rYWhlYWRGdW5jRm9yT3IsIGJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiwgZ2V0UHJvZFR5cGUsIH0gZnJvbSBcIi4vbG9va2FoZWFkLmpzXCI7XG5leHBvcnQgY2xhc3MgTExrTG9va2FoZWFkU3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLm1heExvb2thaGVhZCA9XG4gICAgICAgICAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWF4TG9va2FoZWFkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1BBUlNFUl9DT05GSUcubWF4TG9va2FoZWFkO1xuICAgIH1cbiAgICB2YWxpZGF0ZShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxlZnRSZWN1cnNpb25FcnJvcnMgPSB0aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKG9wdGlvbnMucnVsZXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShsZWZ0UmVjdXJzaW9uRXJyb3JzKSkge1xuICAgICAgICAgICAgY29uc3QgZW1wdHlBbHRFcnJvcnMgPSB0aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhvcHRpb25zLnJ1bGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGFtYmlndW91c0FsdHNFcnJvcnMgPSB0aGlzLnZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMob3B0aW9ucy5ydWxlcywgdGhpcy5tYXhMb29rYWhlYWQpO1xuICAgICAgICAgICAgY29uc3QgZW1wdHlSZXBldGl0aW9uRXJyb3JzID0gdGhpcy52YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgob3B0aW9ucy5ydWxlcywgdGhpcy5tYXhMb29rYWhlYWQpO1xuICAgICAgICAgICAgY29uc3QgYWxsRXJyb3JzID0gW1xuICAgICAgICAgICAgICAgIC4uLmxlZnRSZWN1cnNpb25FcnJvcnMsXG4gICAgICAgICAgICAgICAgLi4uZW1wdHlBbHRFcnJvcnMsXG4gICAgICAgICAgICAgICAgLi4uYW1iaWd1b3VzQWx0c0Vycm9ycyxcbiAgICAgICAgICAgICAgICAuLi5lbXB0eVJlcGV0aXRpb25FcnJvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIGFsbEVycm9ycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVmdFJlY3Vyc2lvbkVycm9ycztcbiAgICB9XG4gICAgdmFsaWRhdGVOb0xlZnRSZWN1cnNpb24ocnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZsYXRNYXAocnVsZXMsIChjdXJyVG9wUnVsZSkgPT4gdmFsaWRhdGVOb0xlZnRSZWN1cnNpb24oY3VyclRvcFJ1bGUsIGN1cnJUb3BSdWxlLCBkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgdmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmVzKHJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwKHJ1bGVzLCAoY3VyclRvcFJ1bGUpID0+IHZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlKGN1cnJUb3BSdWxlLCBkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgdmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhydWxlcywgbWF4TG9va2FoZWFkKSB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwKHJ1bGVzLCAoY3VyclRvcFJ1bGUpID0+IHZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMoY3VyclRvcFJ1bGUsIG1heExvb2thaGVhZCwgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyKSk7XG4gICAgfVxuICAgIHZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChydWxlcywgbWF4TG9va2FoZWFkKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgocnVsZXMsIG1heExvb2thaGVhZCwgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyKTtcbiAgICB9XG4gICAgYnVpbGRMb29rYWhlYWRGb3JBbHRlcm5hdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBidWlsZExvb2thaGVhZEZ1bmNGb3JPcihvcHRpb25zLnByb2RPY2N1cnJlbmNlLCBvcHRpb25zLnJ1bGUsIG9wdGlvbnMubWF4TG9va2FoZWFkLCBvcHRpb25zLmhhc1ByZWRpY2F0ZXMsIG9wdGlvbnMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsIGJ1aWxkQWx0ZXJuYXRpdmVzTG9va0FoZWFkRnVuYyk7XG4gICAgfVxuICAgIGJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYnVpbGRMb29rYWhlYWRGdW5jRm9yT3B0aW9uYWxQcm9kKG9wdGlvbnMucHJvZE9jY3VycmVuY2UsIG9wdGlvbnMucnVsZSwgb3B0aW9ucy5tYXhMb29rYWhlYWQsIG9wdGlvbnMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsIGdldFByb2RUeXBlKG9wdGlvbnMucHJvZFR5cGUpLCBidWlsZFNpbmdsZUFsdGVybmF0aXZlTG9va2FoZWFkRnVuY3Rpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxsa19sb29rYWhlYWQuanMubWFwIiwKICAgICJpbXBvcnQgeyBmb3JFYWNoLCBoYXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBBVF9MRUFTVF9PTkVfSURYLCBBVF9MRUFTVF9PTkVfU0VQX0lEWCwgZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkLCBNQU5ZX0lEWCwgTUFOWV9TRVBfSURYLCBPUFRJT05fSURYLCBPUl9JRFgsIH0gZnJvbSBcIi4uLy4uL2dyYW1tYXIva2V5cy5qc1wiO1xuaW1wb3J0IHsgR0FzdFZpc2l0b3IsIGdldFByb2R1Y3Rpb25Ec2xOYW1lLCB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG5pbXBvcnQgeyBMTGtMb29rYWhlYWRTdHJhdGVneSB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2xsa19sb29rYWhlYWQuanNcIjtcbi8qKlxuICogVHJhaXQgcmVzcG9uc2libGUgZm9yIHRoZSBsb29rYWhlYWQgcmVsYXRlZCB1dGlsaXRpZXMgYW5kIG9wdGltaXphdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb29rc0FoZWFkIHtcbiAgICBpbml0TG9va3NBaGVhZChjb25maWcpIHtcbiAgICAgICAgdGhpcy5keW5hbWljVG9rZW5zRW5hYmxlZCA9IGhhcyhjb25maWcsIFwiZHluYW1pY1Rva2Vuc0VuYWJsZWRcIilcbiAgICAgICAgICAgID8gY29uZmlnLmR5bmFtaWNUb2tlbnNFbmFibGVkIC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgICAgIDogREVGQVVMVF9QQVJTRVJfQ09ORklHLmR5bmFtaWNUb2tlbnNFbmFibGVkO1xuICAgICAgICB0aGlzLm1heExvb2thaGVhZCA9IGhhcyhjb25maWcsIFwibWF4TG9va2FoZWFkXCIpXG4gICAgICAgICAgICA/IGNvbmZpZy5tYXhMb29rYWhlYWQgLy8gYXNzdW1lcyBlbmQgdXNlciBwcm92aWRlcyB0aGUgY29ycmVjdCBjb25maWcgdmFsdWUvdHlwZVxuICAgICAgICAgICAgOiBERUZBVUxUX1BBUlNFUl9DT05GSUcubWF4TG9va2FoZWFkO1xuICAgICAgICB0aGlzLmxvb2thaGVhZFN0cmF0ZWd5ID0gaGFzKGNvbmZpZywgXCJsb29rYWhlYWRTdHJhdGVneVwiKVxuICAgICAgICAgICAgPyBjb25maWcubG9va2FoZWFkU3RyYXRlZ3kgLy8gYXNzdW1lcyBlbmQgdXNlciBwcm92aWRlcyB0aGUgY29ycmVjdCBjb25maWcgdmFsdWUvdHlwZVxuICAgICAgICAgICAgOiBuZXcgTExrTG9va2FoZWFkU3RyYXRlZ3koeyBtYXhMb29rYWhlYWQ6IHRoaXMubWF4TG9va2FoZWFkIH0pO1xuICAgICAgICB0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMocnVsZXMpIHtcbiAgICAgICAgZm9yRWFjaChydWxlcywgKGN1cnJSdWxlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7Y3VyclJ1bGUubmFtZX0gUnVsZSBMb29rYWhlYWRgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhbHRlcm5hdGlvbiwgcmVwZXRpdGlvbiwgb3B0aW9uLCByZXBldGl0aW9uTWFuZGF0b3J5LCByZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgcmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIH0gPSBjb2xsZWN0TWV0aG9kcyhjdXJyUnVsZSk7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChhbHRlcm5hdGlvbiwgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2RJZHggPSBjdXJyUHJvZC5pZHggPT09IDAgPyBcIlwiIDogY3VyclByb2QuaWR4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7Z2V0UHJvZHVjdGlvbkRzbE5hbWUoY3VyclByb2QpfSR7cHJvZElkeH1gLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYUZ1bmMgPSB0aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2RPY2N1cnJlbmNlOiBjdXJyUHJvZC5pZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogY3VyclJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TG9va2FoZWFkOiBjdXJyUHJvZC5tYXhMb29rYWhlYWQgfHwgdGhpcy5tYXhMb29rYWhlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUHJlZGljYXRlczogY3VyclByb2QuaGFzUHJlZGljYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljVG9rZW5zRW5hYmxlZDogdGhpcy5keW5hbWljVG9rZW5zRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtjdXJyUnVsZS5uYW1lXSwgT1JfSURYLCBjdXJyUHJvZC5pZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYUZ1bmNDYWNoZShrZXksIGxhRnVuYyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvckVhY2gocmVwZXRpdGlvbiwgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUxvb2thaGVhZEZ1bmMoY3VyclJ1bGUsIGN1cnJQcm9kLmlkeCwgTUFOWV9JRFgsIFwiUmVwZXRpdGlvblwiLCBjdXJyUHJvZC5tYXhMb29rYWhlYWQsIGdldFByb2R1Y3Rpb25Ec2xOYW1lKGN1cnJQcm9kKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChvcHRpb24sIChjdXJyUHJvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKGN1cnJSdWxlLCBjdXJyUHJvZC5pZHgsIE9QVElPTl9JRFgsIFwiT3B0aW9uXCIsIGN1cnJQcm9kLm1heExvb2thaGVhZCwgZ2V0UHJvZHVjdGlvbkRzbE5hbWUoY3VyclByb2QpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHJlcGV0aXRpb25NYW5kYXRvcnksIChjdXJyUHJvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKGN1cnJSdWxlLCBjdXJyUHJvZC5pZHgsIEFUX0xFQVNUX09ORV9JRFgsIFwiUmVwZXRpdGlvbk1hbmRhdG9yeVwiLCBjdXJyUHJvZC5tYXhMb29rYWhlYWQsIGdldFByb2R1Y3Rpb25Ec2xOYW1lKGN1cnJQcm9kKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUxvb2thaGVhZEZ1bmMoY3VyclJ1bGUsIGN1cnJQcm9kLmlkeCwgQVRfTEVBU1RfT05FX1NFUF9JRFgsIFwiUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3JcIiwgY3VyclByb2QubWF4TG9va2FoZWFkLCBnZXRQcm9kdWN0aW9uRHNsTmFtZShjdXJyUHJvZCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvckVhY2gocmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIChjdXJyUHJvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKGN1cnJSdWxlLCBjdXJyUHJvZC5pZHgsIE1BTllfU0VQX0lEWCwgXCJSZXBldGl0aW9uV2l0aFNlcGFyYXRvclwiLCBjdXJyUHJvZC5tYXhMb29rYWhlYWQsIGdldFByb2R1Y3Rpb25Ec2xOYW1lKGN1cnJQcm9kKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbXB1dGVMb29rYWhlYWRGdW5jKHJ1bGUsIHByb2RPY2N1cnJlbmNlLCBwcm9kS2V5LCBwcm9kVHlwZSwgcHJvZE1heExvb2thaGVhZCwgZHNsTWV0aG9kTmFtZSkge1xuICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7ZHNsTWV0aG9kTmFtZX0ke3Byb2RPY2N1cnJlbmNlID09PSAwID8gXCJcIiA6IHByb2RPY2N1cnJlbmNlfWAsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhRnVuYyA9IHRoaXMubG9va2FoZWFkU3RyYXRlZ3kuYnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbCh7XG4gICAgICAgICAgICAgICAgcHJvZE9jY3VycmVuY2UsXG4gICAgICAgICAgICAgICAgcnVsZSxcbiAgICAgICAgICAgICAgICBtYXhMb29rYWhlYWQ6IHByb2RNYXhMb29rYWhlYWQgfHwgdGhpcy5tYXhMb29rYWhlYWQsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Rva2Vuc0VuYWJsZWQ6IHRoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgcHJvZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbcnVsZS5uYW1lXSwgcHJvZEtleSwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRMYUZ1bmNDYWNoZShrZXksIGxhRnVuYyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyB0aGlzIGFjdHVhbGx5IHJldHVybnMgYSBudW1iZXIsIGJ1dCBpdCBpcyBhbHdheXMgdXNlZCBhcyBhIHN0cmluZyAob2JqZWN0IHByb3Aga2V5KVxuICAgIGdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChkc2xNZXRob2RJZHgsIG9jY3VycmVuY2UpIHtcbiAgICAgICAgY29uc3QgY3VyclJ1bGVTaG9ydE5hbWUgPSB0aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtcbiAgICAgICAgcmV0dXJuIGdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChjdXJyUnVsZVNob3J0TmFtZSwgZHNsTWV0aG9kSWR4LCBvY2N1cnJlbmNlKTtcbiAgICB9XG4gICAgZ2V0TGFGdW5jRnJvbUNhY2hlKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHNldExhRnVuY0NhY2hlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG59XG5jbGFzcyBEc2xNZXRob2RzQ29sbGVjdG9yVmlzaXRvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5kc2xNZXRob2RzID0ge1xuICAgICAgICAgICAgb3B0aW9uOiBbXSxcbiAgICAgICAgICAgIGFsdGVybmF0aW9uOiBbXSxcbiAgICAgICAgICAgIHJlcGV0aXRpb246IFtdLFxuICAgICAgICAgICAgcmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6IFtdLFxuICAgICAgICAgICAgcmVwZXRpdGlvbk1hbmRhdG9yeTogW10sXG4gICAgICAgICAgICByZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjogW10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmRzbE1ldGhvZHMgPSB7XG4gICAgICAgICAgICBvcHRpb246IFtdLFxuICAgICAgICAgICAgYWx0ZXJuYXRpb246IFtdLFxuICAgICAgICAgICAgcmVwZXRpdGlvbjogW10sXG4gICAgICAgICAgICByZXBldGl0aW9uV2l0aFNlcGFyYXRvcjogW10sXG4gICAgICAgICAgICByZXBldGl0aW9uTWFuZGF0b3J5OiBbXSxcbiAgICAgICAgICAgIHJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmlzaXRPcHRpb24ob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChvcHRpb24pO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG1hbnlTZXApIHtcbiAgICAgICAgdGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLnB1c2gobWFueVNlcCk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShhdExlYXN0T25lKSB7XG4gICAgICAgIHRoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uTWFuZGF0b3J5LnB1c2goYXRMZWFzdE9uZSk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoYXRMZWFzdE9uZVNlcCkge1xuICAgICAgICB0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IucHVzaChhdExlYXN0T25lU2VwKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uKG1hbnkpIHtcbiAgICAgICAgdGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb24ucHVzaChtYW55KTtcbiAgICB9XG4gICAgdmlzaXRBbHRlcm5hdGlvbihvcikge1xuICAgICAgICB0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChvcik7XG4gICAgfVxufVxuY29uc3QgY29sbGVjdG9yVmlzaXRvciA9IG5ldyBEc2xNZXRob2RzQ29sbGVjdG9yVmlzaXRvcigpO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RNZXRob2RzKHJ1bGUpIHtcbiAgICBjb2xsZWN0b3JWaXNpdG9yLnJlc2V0KCk7XG4gICAgcnVsZS5hY2NlcHQoY29sbGVjdG9yVmlzaXRvcik7XG4gICAgY29uc3QgZHNsTWV0aG9kcyA9IGNvbGxlY3RvclZpc2l0b3IuZHNsTWV0aG9kcztcbiAgICAvLyBhdm9pZCB1bmNsZWFuZWQgcmVmZXJlbmNlc1xuICAgIGNvbGxlY3RvclZpc2l0b3IucmVzZXQoKTtcbiAgICByZXR1cm4gZHNsTWV0aG9kcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvb2tzYWhlYWQuanMubWFwIiwKICAgICIvKipcbiAqIFRoaXMgbm9kZUxvY2F0aW9uIHRyYWNraW5nIGlzIG5vdCBlZmZpY2llbnQgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWRcbiAqIHdoZW4gZXJyb3IgcmVjb3ZlcnkgaXMgZW5hYmxlZCBvciB0aGUgVG9rZW4gVmVjdG9yIGNvbnRhaW5zIHZpcnR1YWwgVG9rZW5zXG4gKiAoZS5nLCBQeXRob24gSW5kZW50L091dGRlbnQpXG4gKiBBcyBpdCBleGVjdXRlcyB0aGUgY2FsY3VsYXRpb24gZm9yIGV2ZXJ5IHNpbmdsZSB0ZXJtaW5hbC9ub25UZXJtaW5hbFxuICogYW5kIGRvZXMgbm90IHJlbHkgb24gdGhlIGZhY3QgdGhlIHRva2VuIHZlY3RvciBpcyAqKnNvcnRlZCoqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROb2RlTG9jYXRpb25Pbmx5T2Zmc2V0KGN1cnJOb2RlTG9jYXRpb24sIG5ld0xvY2F0aW9uSW5mbykge1xuICAgIC8vIEZpcnN0ICh2YWxpZCkgdXBkYXRlIGZvciB0aGlzIGNzdCBub2RlXG4gICAgaWYgKGlzTmFOKGN1cnJOb2RlTG9jYXRpb24uc3RhcnRPZmZzZXQpID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGFzc3VtcHRpb24xOiBUb2tlbiBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBlaXRoZXIgTmFOIG9yIGEgdmFsaWQgbnVtYmVyXG4gICAgICAgIC8vIGFzc3VtcHRpb24yOiBUb2tlbiBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBmdWxseSB2YWxpZCBpZiBpdCBleGlzdFxuICAgICAgICAvLyAoYm90aCBzdGFydC9lbmQgb2Zmc2V0cyBleGlzdCBhbmQgYXJlIG51bWJlcnMpLlxuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID0gbmV3TG9jYXRpb25JbmZvLnN0YXJ0T2Zmc2V0O1xuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLmVuZE9mZnNldCA9IG5ld0xvY2F0aW9uSW5mby5lbmRPZmZzZXQ7XG4gICAgfVxuICAgIC8vIE9uY2UgdGhlIHN0YXJ0T2Zmc2V0IGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBhIHZhbGlkIG51bWJlciBpdCBzaG91bGQgbmV2ZXIgcmVjZWl2ZVxuICAgIC8vIGFueSBmYXJ0aGVyIHVwZGF0ZXMgYXMgdGhlIFRva2VuIHZlY3RvciBpcyBzb3J0ZWQuXG4gICAgLy8gV2Ugc3RpbGwgaGF2ZSB0byBjaGVjayB0aGlzIHRoaXMgY29uZGl0aW9uIGZvciBldmVyeSBuZXcgcG9zc2libGUgbG9jYXRpb24gaW5mb1xuICAgIC8vIGJlY2F1c2Ugd2l0aCBlcnJvciByZWNvdmVyeSBlbmFibGVkIHdlIG1heSBlbmNvdW50ZXIgaW52YWxpZCB0b2tlbnMgKE5hTiBsb2NhdGlvbiBwcm9wcylcbiAgICBlbHNlIGlmIChjdXJyTm9kZUxvY2F0aW9uLmVuZE9mZnNldCA8IG5ld0xvY2F0aW9uSW5mby5lbmRPZmZzZXQgPT09IHRydWUpIHtcbiAgICAgICAgY3Vyck5vZGVMb2NhdGlvbi5lbmRPZmZzZXQgPSBuZXdMb2NhdGlvbkluZm8uZW5kT2Zmc2V0O1xuICAgIH1cbn1cbi8qKlxuICogVGhpcyBub2RlTG9jYXRpb24gdHJhY2tpbmcgaXMgbm90IGVmZmljaWVudCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZFxuICogd2hlbiBlcnJvciByZWNvdmVyeSBpcyBlbmFibGVkIG9yIHRoZSBUb2tlbiBWZWN0b3IgY29udGFpbnMgdmlydHVhbCBUb2tlbnNcbiAqIChlLmcsIFB5dGhvbiBJbmRlbnQvT3V0ZGVudClcbiAqIEFzIGl0IGV4ZWN1dGVzIHRoZSBjYWxjdWxhdGlvbiBmb3IgZXZlcnkgc2luZ2xlIHRlcm1pbmFsL25vblRlcm1pbmFsXG4gKiBhbmQgZG9lcyBub3QgcmVseSBvbiB0aGUgZmFjdCB0aGUgdG9rZW4gdmVjdG9yIGlzICoqc29ydGVkKipcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE5vZGVMb2NhdGlvbkZ1bGwoY3Vyck5vZGVMb2NhdGlvbiwgbmV3TG9jYXRpb25JbmZvKSB7XG4gICAgLy8gRmlyc3QgKHZhbGlkKSB1cGRhdGUgZm9yIHRoaXMgY3N0IG5vZGVcbiAgICBpZiAoaXNOYU4oY3Vyck5vZGVMb2NhdGlvbi5zdGFydE9mZnNldCkgPT09IHRydWUpIHtcbiAgICAgICAgLy8gYXNzdW1wdGlvbjE6IFRva2VuIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIGVpdGhlciBOYU4gb3IgYSB2YWxpZCBudW1iZXJcbiAgICAgICAgLy8gYXNzdW1wdGlvbjI6IFRva2VuIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIGZ1bGx5IHZhbGlkIGlmIGl0IGV4aXN0XG4gICAgICAgIC8vIChhbGwgc3RhcnQvZW5kIHByb3BzIGV4aXN0IGFuZCBhcmUgbnVtYmVycykuXG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBuZXdMb2NhdGlvbkluZm8uc3RhcnRPZmZzZXQ7XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uc3RhcnRDb2x1bW4gPSBuZXdMb2NhdGlvbkluZm8uc3RhcnRDb2x1bW47XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uc3RhcnRMaW5lID0gbmV3TG9jYXRpb25JbmZvLnN0YXJ0TGluZTtcbiAgICAgICAgY3Vyck5vZGVMb2NhdGlvbi5lbmRPZmZzZXQgPSBuZXdMb2NhdGlvbkluZm8uZW5kT2Zmc2V0O1xuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLmVuZENvbHVtbiA9IG5ld0xvY2F0aW9uSW5mby5lbmRDb2x1bW47XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uZW5kTGluZSA9IG5ld0xvY2F0aW9uSW5mby5lbmRMaW5lO1xuICAgIH1cbiAgICAvLyBPbmNlIHRoZSBzdGFydCBwcm9wcyBoYXMgYmVlbiB1cGRhdGVkIHdpdGggYSB2YWxpZCBudW1iZXIgaXQgc2hvdWxkIG5ldmVyIHJlY2VpdmVcbiAgICAvLyBhbnkgZmFydGhlciB1cGRhdGVzIGFzIHRoZSBUb2tlbiB2ZWN0b3IgaXMgc29ydGVkLlxuICAgIC8vIFdlIHN0aWxsIGhhdmUgdG8gY2hlY2sgdGhpcyB0aGlzIGNvbmRpdGlvbiBmb3IgZXZlcnkgbmV3IHBvc3NpYmxlIGxvY2F0aW9uIGluZm9cbiAgICAvLyBiZWNhdXNlIHdpdGggZXJyb3IgcmVjb3ZlcnkgZW5hYmxlZCB3ZSBtYXkgZW5jb3VudGVyIGludmFsaWQgdG9rZW5zIChOYU4gbG9jYXRpb24gcHJvcHMpXG4gICAgZWxzZSBpZiAoY3Vyck5vZGVMb2NhdGlvbi5lbmRPZmZzZXQgPCBuZXdMb2NhdGlvbkluZm8uZW5kT2Zmc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uZW5kT2Zmc2V0ID0gbmV3TG9jYXRpb25JbmZvLmVuZE9mZnNldDtcbiAgICAgICAgY3Vyck5vZGVMb2NhdGlvbi5lbmRDb2x1bW4gPSBuZXdMb2NhdGlvbkluZm8uZW5kQ29sdW1uO1xuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLmVuZExpbmUgPSBuZXdMb2NhdGlvbkluZm8uZW5kTGluZTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYWRkVGVybWluYWxUb0NzdChub2RlLCB0b2tlbiwgdG9rZW5UeXBlTmFtZSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuW3Rva2VuVHlwZU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlblt0b2tlblR5cGVOYW1lXSA9IFt0b2tlbl07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkcmVuW3Rva2VuVHlwZU5hbWVdLnB1c2godG9rZW4pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGROb25lVGVybWluYWxUb0NzdChub2RlLCBydWxlTmFtZSwgcnVsZVJlc3VsdCkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuW3J1bGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5bcnVsZU5hbWVdID0gW3J1bGVSZXN1bHRdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltydWxlTmFtZV0ucHVzaChydWxlUmVzdWx0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3QuanMubWFwIiwKICAgICJjb25zdCBOQU1FID0gXCJuYW1lXCI7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTmFtZVByb3Aob2JqLCBuYW1lVmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBOQU1FLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5hbWVWYWx1ZSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhbmdfZXh0ZW5zaW9ucy5qcy5tYXAiLAogICAgImltcG9ydCB7IGNvbXBhY3QsIGZpbHRlciwgZm9yRWFjaCwgaXNBcnJheSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNVbmRlZmluZWQsIGtleXMsIG1hcCwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBkZWZpbmVOYW1lUHJvcCB9IGZyb20gXCIuLi8uLi9sYW5nL2xhbmdfZXh0ZW5zaW9ucy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRWaXNpdChjdHgsIHBhcmFtKSB7XG4gICAgY29uc3QgY2hpbGRyZW5OYW1lcyA9IGtleXMoY3R4KTtcbiAgICBjb25zdCBjaGlsZHJlbk5hbWVzTGVuZ3RoID0gY2hpbGRyZW5OYW1lcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbk5hbWVzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY3VyckNoaWxkTmFtZSA9IGNoaWxkcmVuTmFtZXNbaV07XG4gICAgICAgIGNvbnN0IGN1cnJDaGlsZEFycmF5ID0gY3R4W2N1cnJDaGlsZE5hbWVdO1xuICAgICAgICBjb25zdCBjdXJyQ2hpbGRBcnJheUxlbmd0aCA9IGN1cnJDaGlsZEFycmF5Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyQ2hpbGRBcnJheUxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGRBcnJheVtqXTtcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGJldHdlZW4gVG9rZW5zIENoaWxkcmVuIGFuZCBDc3ROb2RlIGNoaWxkcmVuXG4gICAgICAgICAgICBpZiAoY3VyckNoaWxkLnRva2VuVHlwZUlkeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tjdXJyQ2hpbGQubmFtZV0oY3VyckNoaWxkLmNoaWxkcmVuLCBwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZGVmYXVsdFZpc2l0IGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBvdXQgcGFyYW1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCYXNlU2VtYW50aWNWaXNpdG9yQ29uc3RydWN0b3IoZ3JhbW1hck5hbWUsIHJ1bGVOYW1lcykge1xuICAgIGNvbnN0IGRlcml2ZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYWNjb3JkaW5nIHRvOlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Z1bmN0aW9uL1xuICAgIC8vIG5hbWU/cmVkaXJlY3Rsb2NhbGU9ZW4tVVMmcmVkaXJlY3RzbHVnPUphdmFTY3JpcHQlMkZSZWZlcmVuY2UlMkZHbG9iYWxfT2JqZWN0cyUyRkZ1bmN0aW9uJTJGbmFtZVxuICAgIGRlZmluZU5hbWVQcm9wKGRlcml2ZWRDb25zdHJ1Y3RvciwgZ3JhbW1hck5hbWUgKyBcIkJhc2VTZW1hbnRpY3NcIik7XG4gICAgY29uc3Qgc2VtYW50aWNQcm90byA9IHtcbiAgICAgICAgdmlzaXQ6IGZ1bmN0aW9uIChjc3ROb2RlLCBwYXJhbSkge1xuICAgICAgICAgICAgLy8gZW5hYmxlcyB3cml0aW5nIG1vcmUgY29uY2lzZSB2aXNpdG9yIG1ldGhvZHMgd2hlbiBDc3ROb2RlIGhhcyBvbmx5IGEgc2luZ2xlIGNoaWxkXG4gICAgICAgICAgICBpZiAoaXNBcnJheShjc3ROb2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIEEgQ1NUIE5vZGUncyBjaGlsZHJlbiBkaWN0aW9uYXJ5IGNhbiBuZXZlciBoYXZlIGVtcHR5IGFycmF5cyBhcyB2YWx1ZXNcbiAgICAgICAgICAgICAgICAvLyBJZiBhIGtleSBpcyBkZWZpbmVkIHRoZXJlIHdpbGwgYmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYXJyYXkuXG4gICAgICAgICAgICAgICAgY3N0Tm9kZSA9IGNzdE5vZGVbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbmFibGVzIHBhc3Npbmcgb3B0aW9uYWwgQ3N0Tm9kZXMgY29uY2lzZWx5LlxuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNzdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzW2NzdE5vZGUubmFtZV0oY3N0Tm9kZS5jaGlsZHJlbiwgcGFyYW0pO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZVZpc2l0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbWFudGljRGVmaW5pdGlvbkVycm9ycyA9IHZhbGlkYXRlVmlzaXRvcih0aGlzLCBydWxlTmFtZXMpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHNlbWFudGljRGVmaW5pdGlvbkVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gbWFwKHNlbWFudGljRGVmaW5pdGlvbkVycm9ycywgKGN1cnJEZWZFcnJvcikgPT4gY3VyckRlZkVycm9yLm1zZyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEVycm9ycyBEZXRlY3RlZCBpbiBDU1QgVmlzaXRvciA8JHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9PjpcXG5cXHRgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7ZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXFxuXCIpLnJlcGxhY2UoL1xcbi9nLCBcIlxcblxcdFwiKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGRlcml2ZWRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBzZW1hbnRpY1Byb3RvO1xuICAgIGRlcml2ZWRDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBkZXJpdmVkQ29uc3RydWN0b3I7XG4gICAgZGVyaXZlZENvbnN0cnVjdG9yLl9SVUxFX05BTUVTID0gcnVsZU5hbWVzO1xuICAgIHJldHVybiBkZXJpdmVkQ29uc3RydWN0b3I7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZVZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cyhncmFtbWFyTmFtZSwgcnVsZU5hbWVzLCBiYXNlQ29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBkZXJpdmVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGFjY29yZGluZyB0bzpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9cbiAgICAvLyBuYW1lP3JlZGlyZWN0bG9jYWxlPWVuLVVTJnJlZGlyZWN0c2x1Zz1KYXZhU2NyaXB0JTJGUmVmZXJlbmNlJTJGR2xvYmFsX09iamVjdHMlMkZGdW5jdGlvbiUyRm5hbWVcbiAgICBkZWZpbmVOYW1lUHJvcChkZXJpdmVkQ29uc3RydWN0b3IsIGdyYW1tYXJOYW1lICsgXCJCYXNlU2VtYW50aWNzV2l0aERlZmF1bHRzXCIpO1xuICAgIGNvbnN0IHdpdGhEZWZhdWx0c1Byb3RvID0gT2JqZWN0LmNyZWF0ZShiYXNlQ29uc3RydWN0b3IucHJvdG90eXBlKTtcbiAgICBmb3JFYWNoKHJ1bGVOYW1lcywgKHJ1bGVOYW1lKSA9PiB7XG4gICAgICAgIHdpdGhEZWZhdWx0c1Byb3RvW3J1bGVOYW1lXSA9IGRlZmF1bHRWaXNpdDtcbiAgICB9KTtcbiAgICBkZXJpdmVkQ29uc3RydWN0b3IucHJvdG90eXBlID0gd2l0aERlZmF1bHRzUHJvdG87XG4gICAgZGVyaXZlZENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGRlcml2ZWRDb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gZGVyaXZlZENvbnN0cnVjdG9yO1xufVxuZXhwb3J0IHZhciBDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yO1xuKGZ1bmN0aW9uIChDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yKSB7XG4gICAgQ3N0VmlzaXRvckRlZmluaXRpb25FcnJvcltDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yW1wiUkVEVU5EQU5UX01FVEhPRFwiXSA9IDBdID0gXCJSRURVTkRBTlRfTUVUSE9EXCI7XG4gICAgQ3N0VmlzaXRvckRlZmluaXRpb25FcnJvcltDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yW1wiTUlTU0lOR19NRVRIT0RcIl0gPSAxXSA9IFwiTUlTU0lOR19NRVRIT0RcIjtcbn0pKENzdFZpc2l0b3JEZWZpbml0aW9uRXJyb3IgfHwgKENzdFZpc2l0b3JEZWZpbml0aW9uRXJyb3IgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmlzaXRvcih2aXNpdG9ySW5zdGFuY2UsIHJ1bGVOYW1lcykge1xuICAgIGNvbnN0IG1pc3NpbmdFcnJvcnMgPSB2YWxpZGF0ZU1pc3NpbmdDc3RNZXRob2RzKHZpc2l0b3JJbnN0YW5jZSwgcnVsZU5hbWVzKTtcbiAgICByZXR1cm4gbWlzc2luZ0Vycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1pc3NpbmdDc3RNZXRob2RzKHZpc2l0b3JJbnN0YW5jZSwgcnVsZU5hbWVzKSB7XG4gICAgY29uc3QgbWlzc2luZ1J1bGVOYW1lcyA9IGZpbHRlcihydWxlTmFtZXMsIChjdXJyUnVsZU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odmlzaXRvckluc3RhbmNlW2N1cnJSdWxlTmFtZV0pID09PSBmYWxzZTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAobWlzc2luZ1J1bGVOYW1lcywgKGN1cnJSdWxlTmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbXNnOiBgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7Y3VyclJ1bGVOYW1lfT4gb24gJHsodmlzaXRvckluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUpfSBDU1QgVmlzaXRvci5gLFxuICAgICAgICAgICAgdHlwZTogQ3N0VmlzaXRvckRlZmluaXRpb25FcnJvci5NSVNTSU5HX01FVEhPRCxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IGN1cnJSdWxlTmFtZSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29tcGFjdChlcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3N0X3Zpc2l0b3IuanMubWFwIiwKICAgICJpbXBvcnQgeyBhZGROb25lVGVybWluYWxUb0NzdCwgYWRkVGVybWluYWxUb0NzdCwgc2V0Tm9kZUxvY2F0aW9uRnVsbCwgc2V0Tm9kZUxvY2F0aW9uT25seU9mZnNldCwgfSBmcm9tIFwiLi4vLi4vY3N0L2NzdC5qc1wiO1xuaW1wb3J0IHsgaGFzLCBpc1VuZGVmaW5lZCwga2V5cywgbm9vcCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciwgY3JlYXRlQmFzZVZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cywgfSBmcm9tIFwiLi4vLi4vY3N0L2NzdF92aXNpdG9yLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyLmpzXCI7XG4vKipcbiAqIFRoaXMgdHJhaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBDU1QgYnVpbGRpbmcgbG9naWMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlQnVpbGRlciB7XG4gICAgaW5pdFRyZWVCdWlsZGVyKGNvbmZpZykge1xuICAgICAgICB0aGlzLkNTVF9TVEFDSyA9IFtdO1xuICAgICAgICAvLyBvdXRwdXRDc3QgaXMgbm8gbG9uZ2VyIGV4cG9zZWQvZGVmaW5lZCBpbiB0aGUgcHViaWMgQVBJXG4gICAgICAgIHRoaXMub3V0cHV0Q3N0ID0gY29uZmlnLm91dHB1dENzdDtcbiAgICAgICAgdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZyA9IGhhcyhjb25maWcsIFwibm9kZUxvY2F0aW9uVHJhY2tpbmdcIilcbiAgICAgICAgICAgID8gY29uZmlnLm5vZGVMb2NhdGlvblRyYWNraW5nIC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgICAgIDogREVGQVVMVF9QQVJTRVJfQ09ORklHLm5vZGVMb2NhdGlvblRyYWNraW5nO1xuICAgICAgICBpZiAoIXRoaXMub3V0cHV0Q3N0KSB7XG4gICAgICAgICAgICB0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3RUZXJtaW5hbCA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3ROb25UZXJtaW5hbCA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3RSdWxlID0gbm9vcDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNvdmVyeUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4gPSBzZXROb2RlTG9jYXRpb25GdWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlID0gc2V0Tm9kZUxvY2F0aW9uRnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3RQb3N0UnVsZSA9IG5vb3A7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbiA9IHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZSA9IG5vb3A7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3N0UG9zdFJ1bGUgPSB0aGlzLmNzdFBvc3RSdWxlRnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uID0gdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL29ubHlPZmZzZXQvaS50ZXN0KHRoaXMubm9kZUxvY2F0aW9uVHJhY2tpbmcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVjb3ZlcnlFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuID0gc2V0Tm9kZUxvY2F0aW9uT25seU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZSA9IHNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3N0UG9zdFJ1bGUgPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4gPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3RQb3N0UnVsZSA9IHRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlZ3VsYXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL25vbmUvaS50ZXN0KHRoaXMubm9kZUxvY2F0aW9uVHJhY2tpbmcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGUgPSBub29wO1xuICAgICAgICAgICAgICAgIHRoaXMuY3N0UG9zdFJ1bGUgPSBub29wO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbiA9IG5vb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCA8bm9kZUxvY2F0aW9uVHJhY2tpbmc+IGNvbmZpZyBvcHRpb246IFwiJHtjb25maWcubm9kZUxvY2F0aW9uVHJhY2tpbmd9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KGNzdE5vZGUpIHtcbiAgICAgICAgY3N0Tm9kZS5sb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBOYU4sXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IE5hTixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGNzdE5vZGUpIHtcbiAgICAgICAgY3N0Tm9kZS5sb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIC8vIHdpdGhvdXQgZXJyb3IgcmVjb3ZlcnkgdGhlIHN0YXJ0aW5nIExvY2F0aW9uIG9mIGEgbmV3IENzdE5vZGUgaXMgZ3VhcmFudGVlZFxuICAgICAgICAgICAgLy8gVG8gYmUgdGhlIG5leHQgVG9rZW4ncyBzdGFydE9mZnNldCAoZm9yIHZhbGlkIGlucHV0cykuXG4gICAgICAgICAgICAvLyBGb3IgaW52YWxpZCBpbnB1dHMgdGhlcmUgd29uJ3QgYmUgYW55IENTVE91dHB1dCBzbyB0aGlzIHBvdGVudGlhbFxuICAgICAgICAgICAgLy8gaW5hY2N1cmFjeSBkb2VzIG5vdCBtYXR0ZXJcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiB0aGlzLkxBKDEpLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBOYU4sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVjb3ZlcnkoY3N0Tm9kZSkge1xuICAgICAgICBjc3ROb2RlLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IE5hTixcbiAgICAgICAgICAgIHN0YXJ0TGluZTogTmFOLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW46IE5hTixcbiAgICAgICAgICAgIGVuZE9mZnNldDogTmFOLFxuICAgICAgICAgICAgZW5kTGluZTogTmFOLFxuICAgICAgICAgICAgZW5kQ29sdW1uOiBOYU4sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAgICogIEBzZWUgc2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyIGZvciBleHBsYW5hdGlvbiB3aHkgdGhpcyB3b3JrXG4gIFxuICAgICAgICogQHBhcmFtIGNzdE5vZGVcbiAgICAgICAqL1xuICAgIHNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcihjc3ROb2RlKSB7XG4gICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgIGNzdE5vZGUubG9jYXRpb24gPSB7XG4gICAgICAgICAgICBzdGFydE9mZnNldDogbmV4dFRva2VuLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgc3RhcnRMaW5lOiBuZXh0VG9rZW4uc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW46IG5leHRUb2tlbi5zdGFydENvbHVtbixcbiAgICAgICAgICAgIGVuZE9mZnNldDogTmFOLFxuICAgICAgICAgICAgZW5kTGluZTogTmFOLFxuICAgICAgICAgICAgZW5kQ29sdW1uOiBOYU4sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShmdWxsUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgY3N0Tm9kZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGZ1bGxSdWxlTmFtZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24oY3N0Tm9kZSk7XG4gICAgICAgIHRoaXMuQ1NUX1NUQUNLLnB1c2goY3N0Tm9kZSk7XG4gICAgfVxuICAgIGNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5DU1RfU1RBQ0sucG9wKCk7XG4gICAgfVxuICAgIGNzdFBvc3RSdWxlRnVsbChydWxlQ3N0Tm9kZSkge1xuICAgICAgICAvLyBjYXN0cyB0byBgcmVxdWlyZWQ8Q3N0Tm9kZUxvY2F0aW9uPmAgYXJlIHNhZmUgYmVjYXVzZSBgY3N0UG9zdFJ1bGVGdWxsYCBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gZnVsbCBsb2NhdGlvbiBpcyBlbmFibGVkXG4gICAgICAgIGNvbnN0IHByZXZUb2tlbiA9IHRoaXMuTEEoMCk7XG4gICAgICAgIGNvbnN0IGxvYyA9IHJ1bGVDc3ROb2RlLmxvY2F0aW9uO1xuICAgICAgICAvLyBJZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlIGl0IG1lYW5zIHdlIGNvbnN1bWVkIGF0IGxlYXN0IG9uZSBUb2tlblxuICAgICAgICAvLyBJbiB0aGlzIENzdE5vZGUuXG4gICAgICAgIGlmIChsb2Muc3RhcnRPZmZzZXQgPD0gcHJldlRva2VuLnN0YXJ0T2Zmc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBsb2MuZW5kT2Zmc2V0ID0gcHJldlRva2VuLmVuZE9mZnNldDtcbiAgICAgICAgICAgIGxvYy5lbmRMaW5lID0gcHJldlRva2VuLmVuZExpbmU7XG4gICAgICAgICAgICBsb2MuZW5kQ29sdW1uID0gcHJldlRva2VuLmVuZENvbHVtbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBcImVtcHR5XCIgQ3N0Tm9kZSBlZGdlIGNhc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2Muc3RhcnRPZmZzZXQgPSBOYU47XG4gICAgICAgICAgICBsb2Muc3RhcnRMaW5lID0gTmFOO1xuICAgICAgICAgICAgbG9jLnN0YXJ0Q29sdW1uID0gTmFOO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNzdFBvc3RSdWxlT25seU9mZnNldChydWxlQ3N0Tm9kZSkge1xuICAgICAgICBjb25zdCBwcmV2VG9rZW4gPSB0aGlzLkxBKDApO1xuICAgICAgICAvLyBgbG9jYXRpb24nIGlzIG5vdCBudWxsIGJlY2F1c2UgYGNzdFBvc3RSdWxlT25seU9mZnNldGAgd2lsbCBvbmx5IGJlIGludm9rZWQgd2hlbiBsb2NhdGlvbiB0cmFja2luZyBpcyBlbmFibGVkLlxuICAgICAgICBjb25zdCBsb2MgPSBydWxlQ3N0Tm9kZS5sb2NhdGlvbjtcbiAgICAgICAgLy8gSWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZSBpdCBtZWFucyB3ZSBjb25zdW1lZCBhdCBsZWFzdCBvbmUgVG9rZW5cbiAgICAgICAgLy8gSW4gdGhpcyBDc3ROb2RlLlxuICAgICAgICBpZiAobG9jLnN0YXJ0T2Zmc2V0IDw9IHByZXZUb2tlbi5zdGFydE9mZnNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbG9jLmVuZE9mZnNldCA9IHByZXZUb2tlbi5lbmRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gXCJlbXB0eVwiIENzdE5vZGUgZWRnZSBjYXNlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9jLnN0YXJ0T2Zmc2V0ID0gTmFOO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNzdFBvc3RUZXJtaW5hbChrZXksIGNvbnN1bWVkVG9rZW4pIHtcbiAgICAgICAgY29uc3Qgcm9vdENzdCA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICBhZGRUZXJtaW5hbFRvQ3N0KHJvb3RDc3QsIGNvbnN1bWVkVG9rZW4sIGtleSk7XG4gICAgICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gKipib3RoKiogZXJyb3IgcmVjb3ZlcnkgYW5kIENTVCBPdXRwdXQgYXJlIGVuYWJsZWQuXG4gICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKHJvb3RDc3QubG9jYXRpb24sIGNvbnN1bWVkVG9rZW4pO1xuICAgIH1cbiAgICBjc3RQb3N0Tm9uVGVybWluYWwocnVsZUNzdFJlc3VsdCwgcnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJlQ3N0Tm9kZSA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICBhZGROb25lVGVybWluYWxUb0NzdChwcmVDc3ROb2RlLCBydWxlTmFtZSwgcnVsZUNzdFJlc3VsdCk7XG4gICAgICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gKipib3RoKiogZXJyb3IgcmVjb3ZlcnkgYW5kIENTVCBPdXRwdXQgYXJlIGVuYWJsZWQuXG4gICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGUocHJlQ3N0Tm9kZS5sb2NhdGlvbiwgcnVsZUNzdFJlc3VsdC5sb2NhdGlvbik7XG4gICAgfVxuICAgIGdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdCYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yID0gY3JlYXRlQmFzZVNlbWFudGljVmlzaXRvckNvbnN0cnVjdG9yKHRoaXMuY2xhc3NOYW1lLCBrZXlzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvciA9IG5ld0Jhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gbmV3QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yO1xuICAgIH1cbiAgICBnZXRCYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzKCkge1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uc3RydWN0b3IgPSBjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzKHRoaXMuY2xhc3NOYW1lLCBrZXlzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLCB0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7XG4gICAgICAgICAgICB0aGlzLmJhc2VDc3RWaXNpdG9yV2l0aERlZmF1bHRzQ29uc3RydWN0b3IgPSBuZXdDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJldHVybiBuZXdDb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yO1xuICAgIH1cbiAgICBnZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkge1xuICAgICAgICBjb25zdCBydWxlU3RhY2sgPSB0aGlzLlJVTEVfU1RBQ0s7XG4gICAgICAgIHJldHVybiBydWxlU3RhY2tbcnVsZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBnZXRQcmV2aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZSgpIHtcbiAgICAgICAgY29uc3QgcnVsZVN0YWNrID0gdGhpcy5SVUxFX1NUQUNLO1xuICAgICAgICByZXR1cm4gcnVsZVN0YWNrW3J1bGVTdGFjay5sZW5ndGggLSAyXTtcbiAgICB9XG4gICAgZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleCgpIHtcbiAgICAgICAgY29uc3Qgb2NjdXJyZW5jZVN0YWNrID0gdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7XG4gICAgICAgIHJldHVybiBvY2N1cnJlbmNlU3RhY2tbb2NjdXJyZW5jZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyZWVfYnVpbGRlci5qcy5tYXAiLAogICAgImltcG9ydCB7IEVORF9PRl9GSUxFIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuLyoqXG4gKiBUcmFpdCByZXNwb25zaWJsZSBhYnN0cmFjdGluZyBvdmVyIHRoZSBpbnRlcmFjdGlvbiB3aXRoIExleGVyIG91dHB1dCAoVG9rZW4gdmVjdG9yKS5cbiAqXG4gKiBUaGlzIGNvdWxkIGJlIGdlbmVyYWxpemVkIHRvIHN1cHBvcnQgb3RoZXIga2luZHMgb2YgbGV4ZXJzLCBlLmcuXG4gKiAtIEp1c3QgaW4gVGltZSBMZXhpbmcgLyBMZXhlci1MZXNzIHBhcnNpbmcuXG4gKiAtIFN0cmVhbWluZyBMZXhlci5cbiAqL1xuZXhwb3J0IGNsYXNzIExleGVyQWRhcHRlciB7XG4gICAgaW5pdExleGVyQWRhcHRlcigpIHtcbiAgICAgICAgdGhpcy50b2tWZWN0b3IgPSBbXTtcbiAgICAgICAgdGhpcy50b2tWZWN0b3JMZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmN1cnJJZHggPSAtMTtcbiAgICB9XG4gICAgc2V0IGlucHV0KG5ld0lucHV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBgdGhpcyBwYXJhbWV0ZXJgIG5vdCBzdXBwb3J0ZWQgaW4gc2V0dGVycy9nZXR0ZXJzXG4gICAgICAgIC8vICAgLSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9mdW5jdGlvbnMuaHRtbCN0aGlzLXBhcmFtZXRlcnNcbiAgICAgICAgaWYgKHRoaXMuc2VsZkFuYWx5c2lzRG9uZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE1pc3NpbmcgPHBlcmZvcm1TZWxmQW5hbHlzaXM+IGludm9jYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgUGFyc2VyJ3MgY29uc3RydWN0b3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWlnbm9yZSAtIGB0aGlzIHBhcmFtZXRlcmAgbm90IHN1cHBvcnRlZCBpbiBzZXR0ZXJzL2dldHRlcnNcbiAgICAgICAgLy8gICAtIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVyc1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudG9rVmVjdG9yID0gbmV3SW5wdXQ7XG4gICAgICAgIHRoaXMudG9rVmVjdG9yTGVuZ3RoID0gbmV3SW5wdXQubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgaW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva1ZlY3RvcjtcbiAgICB9XG4gICAgLy8gc2tpcHMgYSB0b2tlbiBhbmQgcmV0dXJucyB0aGUgbmV4dCB0b2tlblxuICAgIFNLSVBfVE9LRU4oKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJJZHggPD0gdGhpcy50b2tWZWN0b3IubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lVG9rZW4oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBKDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEVORF9PRl9GSUxFO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIExleGVyIChhY2Nlc3NpbmcgVG9rZW4gdmVjdG9yKSByZWxhdGVkIG1ldGhvZHMgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gdG8gaW1wbGVtZW50IGxhenkgbGV4ZXJzXG4gICAgLy8gb3IgbGV4ZXJzIGRlcGVuZGVudCBvbiBwYXJzZXIgY29udGV4dC5cbiAgICBMQShob3dNdWNoKSB7XG4gICAgICAgIGNvbnN0IHNvdWdodElkeCA9IHRoaXMuY3VycklkeCArIGhvd011Y2g7XG4gICAgICAgIGlmIChzb3VnaHRJZHggPCAwIHx8IHRoaXMudG9rVmVjdG9yTGVuZ3RoIDw9IHNvdWdodElkeCkge1xuICAgICAgICAgICAgcmV0dXJuIEVORF9PRl9GSUxFO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rVmVjdG9yW3NvdWdodElkeF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3VtZVRva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJJZHgrKztcbiAgICB9XG4gICAgZXhwb3J0TGV4ZXJTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycklkeDtcbiAgICB9XG4gICAgaW1wb3J0TGV4ZXJTdGF0ZShuZXdTdGF0ZSkge1xuICAgICAgICB0aGlzLmN1cnJJZHggPSBuZXdTdGF0ZTtcbiAgICB9XG4gICAgcmVzZXRMZXhlclN0YXRlKCkge1xuICAgICAgICB0aGlzLmN1cnJJZHggPSAtMTtcbiAgICB9XG4gICAgbW92ZVRvVGVybWluYXRlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLmN1cnJJZHggPSB0aGlzLnRva1ZlY3Rvci5sZW5ndGggLSAxO1xuICAgIH1cbiAgICBnZXRMZXhlclBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRMZXhlclN0YXRlKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXJfYWRhcHRlci5qcy5tYXAiLAogICAgImltcG9ydCB7IGluY2x1ZGVzLCB2YWx1ZXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBpc1JlY29nbml0aW9uRXhjZXB0aW9uIH0gZnJvbSBcIi4uLy4uL2V4Y2VwdGlvbnNfcHVibGljLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1JVTEVfQ09ORklHLCBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2Vycm9yc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2NoZWNrcy5qc1wiO1xuaW1wb3J0IHsgc2VyaWFsaXplR3JhbW1hciB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG4vKipcbiAqIFRoaXMgdHJhaXQgaXMgcmVzcG9uc2libGUgZm9yIGltcGxlbWVudGluZyB0aGUgcHVibGljIEFQSVxuICogZm9yIGRlZmluaW5nIENoZXZyb3RhaW4gcGFyc2VycywgaS5lOlxuICogLSBDT05TVU1FXG4gKiAtIFJVTEVcbiAqIC0gT1BUSU9OXG4gKiAtIC4uLlxuICovXG5leHBvcnQgY2xhc3MgUmVjb2duaXplckFwaSB7XG4gICAgQUNUSU9OKGltcGwpIHtcbiAgICAgICAgcmV0dXJuIGltcGwuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgY29uc3VtZShpZHgsIHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIGlkeCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHN1YnJ1bGUoaWR4LCBydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCBpZHgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBvcHRpb24oaWR4LCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgaWR4KTtcbiAgICB9XG4gICAgb3IoaWR4LCBhbHRzT3JPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ySW50ZXJuYWwoYWx0c09yT3B0cywgaWR4KTtcbiAgICB9XG4gICAgbWFueShpZHgsIGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbnlJbnRlcm5hbChpZHgsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgYXRMZWFzdE9uZShpZHgsIGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbChpZHgsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQ09OU1VNRSh0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCAwLCBvcHRpb25zKTtcbiAgICB9XG4gICAgQ09OU1VNRTEodG9rVHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwodG9rVHlwZSwgMSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIENPTlNVTUUyKHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBDT05TVU1FMyh0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCAzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgQ09OU1VNRTQodG9rVHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwodG9rVHlwZSwgNCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIENPTlNVTUU1KHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBDT05TVU1FNih0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCA2LCBvcHRpb25zKTtcbiAgICB9XG4gICAgQ09OU1VNRTcodG9rVHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwodG9rVHlwZSwgNywgb3B0aW9ucyk7XG4gICAgfVxuICAgIENPTlNVTUU4KHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBDT05TVU1FOSh0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCA5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRShydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCAwLCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRTEocnVsZVRvQ2FsbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocnVsZVRvQ2FsbCwgMSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIFNVQlJVTEUyKHJ1bGVUb0NhbGwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHJ1bGVUb0NhbGwsIDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBTVUJSVUxFMyhydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCAzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRTQocnVsZVRvQ2FsbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocnVsZVRvQ2FsbCwgNCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIFNVQlJVTEU1KHJ1bGVUb0NhbGwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHJ1bGVUb0NhbGwsIDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBTVUJSVUxFNihydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCA2LCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRTcocnVsZVRvQ2FsbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocnVsZVRvQ2FsbCwgNywgb3B0aW9ucyk7XG4gICAgfVxuICAgIFNVQlJVTEU4KHJ1bGVUb0NhbGwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHJ1bGVUb0NhbGwsIDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBTVUJSVUxFOShydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCA5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgT1BUSU9OKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCAwKTtcbiAgICB9XG4gICAgT1BUSU9OMShhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgMSk7XG4gICAgfVxuICAgIE9QVElPTjIoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIDIpO1xuICAgIH1cbiAgICBPUFRJT04zKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCAzKTtcbiAgICB9XG4gICAgT1BUSU9ONChhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgNCk7XG4gICAgfVxuICAgIE9QVElPTjUoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIDUpO1xuICAgIH1cbiAgICBPUFRJT042KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCA2KTtcbiAgICB9XG4gICAgT1BUSU9ONyhhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgNyk7XG4gICAgfVxuICAgIE9QVElPTjgoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIDgpO1xuICAgIH1cbiAgICBPUFRJT045KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCA5KTtcbiAgICB9XG4gICAgT1IoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDApO1xuICAgIH1cbiAgICBPUjEoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDEpO1xuICAgIH1cbiAgICBPUjIoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDIpO1xuICAgIH1cbiAgICBPUjMoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDMpO1xuICAgIH1cbiAgICBPUjQoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDQpO1xuICAgIH1cbiAgICBPUjUoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDUpO1xuICAgIH1cbiAgICBPUjYoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDYpO1xuICAgIH1cbiAgICBPUjcoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDcpO1xuICAgIH1cbiAgICBPUjgoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDgpO1xuICAgIH1cbiAgICBPUjkoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDkpO1xuICAgIH1cbiAgICBNQU5ZKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDAsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWTEoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5tYW55SW50ZXJuYWwoMSwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBNQU5ZMihhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLm1hbnlJbnRlcm5hbCgyLCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIE1BTlkzKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDMsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWTQoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5tYW55SW50ZXJuYWwoNCwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBNQU5ZNShhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLm1hbnlJbnRlcm5hbCg1LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIE1BTlk2KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDYsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWTcoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5tYW55SW50ZXJuYWwoNywgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBNQU5ZOChhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLm1hbnlJbnRlcm5hbCg4LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIE1BTlk5KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDksIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWV9TRVAob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDEob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDIob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDMob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDQob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDUob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDYob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDcob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDcsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDgob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDkob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkUoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMCwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkUxKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgxLCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORTIoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMiwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkUzKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKDMsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FNChhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg0LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORTUoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNSwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkU2KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKDYsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FNyhhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg3LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORTgoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoOCwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkU5KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKDksIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUChvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORV9TRVAxKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgxLCBvcHRpb25zKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUDIob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkVfU0VQMyhvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMywgb3B0aW9ucyk7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORV9TRVA0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUDUob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkVfU0VQNihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORV9TRVA3KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg3LCBvcHRpb25zKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUDgob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkVfU0VQOShvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoOSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIFJVTEUobmFtZSwgaW1wbGVtZW50YXRpb24sIGNvbmZpZyA9IERFRkFVTFRfUlVMRV9DT05GSUcpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsIG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJNc2cgPSBkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXIuYnVpbGREdXBsaWNhdGVSdWxlTmFtZUVycm9yKHtcbiAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IG5hbWUsXG4gICAgICAgICAgICAgICAgZ3JhbW1hck5hbWU6IHRoaXMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2csXG4gICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5EVVBMSUNBVEVfUlVMRV9OQU1FLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbkVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlZmluZWRSdWxlc05hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgIGNvbnN0IHJ1bGVJbXBsZW1lbnRhdGlvbiA9IHRoaXMuZGVmaW5lUnVsZShuYW1lLCBpbXBsZW1lbnRhdGlvbiwgY29uZmlnKTtcbiAgICAgICAgdGhpc1tuYW1lXSA9IHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgcmV0dXJuIHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICB9XG4gICAgT1ZFUlJJREVfUlVMRShuYW1lLCBpbXBsLCBjb25maWcgPSBERUZBVUxUX1JVTEVfQ09ORklHKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFcnJvcnMgPSB2YWxpZGF0ZVJ1bGVJc092ZXJyaWRkZW4obmFtZSwgdGhpcy5kZWZpbmVkUnVsZXNOYW1lcywgdGhpcy5jbGFzc05hbWUpO1xuICAgICAgICB0aGlzLmRlZmluaXRpb25FcnJvcnMgPSB0aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KHJ1bGVFcnJvcnMpO1xuICAgICAgICBjb25zdCBydWxlSW1wbGVtZW50YXRpb24gPSB0aGlzLmRlZmluZVJ1bGUobmFtZSwgaW1wbCwgY29uZmlnKTtcbiAgICAgICAgdGhpc1tuYW1lXSA9IHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgcmV0dXJuIHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICB9XG4gICAgQkFDS1RSQUNLKGdyYW1tYXJSdWxlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBzYXZlIG9yZyBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLnB1c2goMSk7XG4gICAgICAgICAgICBjb25zdCBvcmdTdGF0ZSA9IHRoaXMuc2F2ZVJlY29nU3RhdGUoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZ3JhbW1hclJ1bGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gd2UgaGF2ZSBzdWNjZWVkIHBhcnNpbmcgdGhlIHJ1bGUuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1JlY29nbml0aW9uRXhjZXB0aW9uKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG9yZ1N0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2sucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIEdBU1QgZXhwb3J0IEFQSXNcbiAgICBnZXRHQXN0UHJvZHVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlO1xuICAgIH1cbiAgICBnZXRTZXJpYWxpemVkR2FzdFByb2R1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplR3JhbW1hcih2YWx1ZXModGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlY29nbml6ZXJfYXBpLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY2xvbmUsIGV2ZXJ5LCBmbGF0dGVuLCBoYXMsIGlzQXJyYXksIGlzRW1wdHksIGlzT2JqZWN0LCByZWR1Y2UsIHVuaXEsIHZhbHVlcywgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBBVF9MRUFTVF9PTkVfSURYLCBBVF9MRUFTVF9PTkVfU0VQX0lEWCwgQklUU19GT1JfTUVUSE9EX1RZUEUsIEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYLCBNQU5ZX0lEWCwgTUFOWV9TRVBfSURYLCBPUFRJT05fSURYLCBPUl9JRFgsIH0gZnJvbSBcIi4uLy4uL2dyYW1tYXIva2V5cy5qc1wiO1xuaW1wb3J0IHsgaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbiwgTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uLCBOb3RBbGxJbnB1dFBhcnNlZEV4Y2VwdGlvbiwgfSBmcm9tIFwiLi4vLi4vZXhjZXB0aW9uc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IFBST0RfVFlQRSB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2xvb2thaGVhZC5qc1wiO1xuaW1wb3J0IHsgTmV4dFRlcm1pbmFsQWZ0ZXJBdExlYXN0T25lU2VwV2Fsa2VyLCBOZXh0VGVybWluYWxBZnRlckF0TGVhc3RPbmVXYWxrZXIsIE5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciwgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55V2Fsa2VyLCB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2ludGVycHJldGVyLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1JVTEVfQ09ORklHIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgSU5fUlVMRV9SRUNPVkVSWV9FWENFUFRJT04gfSBmcm9tIFwiLi9yZWNvdmVyYWJsZS5qc1wiO1xuaW1wb3J0IHsgRU9GIH0gZnJvbSBcIi4uLy4uLy4uL3NjYW4vdG9rZW5zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgYXVnbWVudFRva2VuVHlwZXMsIGlzVG9rZW5UeXBlLCB0b2tlblN0cnVjdHVyZWRNYXRjaGVyLCB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzLCB9IGZyb20gXCIuLi8uLi8uLi9zY2FuL3Rva2Vucy5qc1wiO1xuLyoqXG4gKiBUaGlzIHRyYWl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgcnVudGltZSBwYXJzaW5nIGVuZ2luZVxuICogVXNlZCBieSB0aGUgb2ZmaWNpYWwgQVBJIChyZWNvZ25pemVyX2FwaS50cylcbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29nbml6ZXJFbmdpbmUge1xuICAgIGluaXRSZWNvZ25pemVyRW5naW5lKHRva2VuVm9jYWJ1bGFyeSwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAvLyBUT0RPOiB3b3VsZCB1c2luZyBhbiBFUzYgTWFwIG9yIHBsYWluIG9iamVjdCBiZSBmYXN0ZXIgKENTVCBidWlsZGluZyBzY2VuYXJpbylcbiAgICAgICAgdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsID0ge307XG4gICAgICAgIHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydCA9IHt9O1xuICAgICAgICB0aGlzLnJ1bGVTaG9ydE5hbWVJZHggPSAyNTY7XG4gICAgICAgIHRoaXMudG9rZW5NYXRjaGVyID0gdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlck5vQ2F0ZWdvcmllcztcbiAgICAgICAgdGhpcy5zdWJydWxlSWR4ID0gMDtcbiAgICAgICAgdGhpcy5kZWZpbmVkUnVsZXNOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnRva2Vuc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5SVUxFX1NUQUNLID0gW107XG4gICAgICAgIHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLID0gW107XG4gICAgICAgIHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUgPSB7fTtcbiAgICAgICAgaWYgKGhhcyhjb25maWcsIFwic2VyaWFsaXplZEdyYW1tYXJcIikpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhlIFBhcnNlcidzIGNvbmZpZ3VyYXRpb24gY2FuIG5vIGxvbmdlciBjb250YWluIGEgPHNlcmlhbGl6ZWRHcmFtbWFyPiBwcm9wZXJ0eS5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXHRTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI182LTAtMFxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdEZvciBGdXJ0aGVyIGRldGFpbHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KHRva2VuVm9jYWJ1bGFyeSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgb25seSBjaGVja3MgZm9yIFRva2VuIHZvY2FidWxhcmllcyBwcm92aWRlZCBhcyBhcnJheXMuXG4gICAgICAgICAgICAvLyBUaGF0IGlzIGdvb2QgZW5vdWdoIGJlY2F1c2UgdGhlIG1haW4gb2JqZWN0aXZlIGlzIHRvIGRldGVjdCB1c2VycyBvZiBwcmUtVjQuMCBBUElzXG4gICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBhbGwgZWRnZSBjYXNlcyBvZiBlbXB0eSBUb2tlbiB2b2NhYnVsYXJpZXMuXG4gICAgICAgICAgICBpZiAoaXNFbXB0eSh0b2tlblZvY2FidWxhcnkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXHROb3RlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IGZvciB0aGUgcGFyc2VyIGNvbnN0cnVjdG9yXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcdGlzIG5vIGxvbmdlciBhIFRva2VuIHZlY3RvciAoc2luY2UgdjQuMCkuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b2tlblZvY2FidWxhcnlbMF0uc3RhcnRPZmZzZXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXHRTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI180LTAtMFxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXHRGb3IgRnVydGhlciBkZXRhaWxzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheSh0b2tlblZvY2FidWxhcnkpKSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vuc01hcCA9IHJlZHVjZSh0b2tlblZvY2FidWxhcnksIChhY2MsIHRva1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbdG9rVHlwZS5uYW1lXSA9IHRva1R5cGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXModG9rZW5Wb2NhYnVsYXJ5LCBcIm1vZGVzXCIpICYmXG4gICAgICAgICAgICBldmVyeShmbGF0dGVuKHZhbHVlcyh0b2tlblZvY2FidWxhcnkubW9kZXMpKSwgaXNUb2tlblR5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUb2tlblR5cGVzID0gZmxhdHRlbih2YWx1ZXModG9rZW5Wb2NhYnVsYXJ5Lm1vZGVzKSk7XG4gICAgICAgICAgICBjb25zdCB1bmlxdWVUb2tlbnMgPSB1bmlxKGFsbFRva2VuVHlwZXMpO1xuICAgICAgICAgICAgdGhpcy50b2tlbnNNYXAgPSByZWR1Y2UodW5pcXVlVG9rZW5zLCAoYWNjLCB0b2tUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW3Rva1R5cGUubmFtZV0gPSB0b2tUeXBlO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodG9rZW5Wb2NhYnVsYXJ5KSkge1xuICAgICAgICAgICAgdGhpcy50b2tlbnNNYXAgPSBjbG9uZSh0b2tlblZvY2FidWxhcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiPHRva2Vuc0RpY3Rpb25hcnk+IGFyZ3VtZW50IG11c3QgYmUgQW4gQXJyYXkgb2YgVG9rZW4gY29uc3RydWN0b3JzLFwiICtcbiAgICAgICAgICAgICAgICBcIiBBIGRpY3Rpb25hcnkgb2YgVG9rZW4gY29uc3RydWN0b3JzIG9yIGFuIElNdWx0aU1vZGVMZXhlckRlZmluaXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWx3YXlzIGFkZCBFT0YgdG8gdGhlIHRva2VuTmFtZXMgLT4gY29uc3RydWN0b3JzIG1hcC4gaXQgaXMgdXNlZnVsIHRvIGFzc3VyZSBhbGwgdGhlIGlucHV0IGhhcyBiZWVuXG4gICAgICAgIC8vIHBhcnNlZCB3aXRoIGEgY2xlYXIgZXJyb3IgbWVzc2FnZSAoXCJleHBlY3RpbmcgRU9GIGJ1dCBmb3VuZCAuLi5cIilcbiAgICAgICAgdGhpcy50b2tlbnNNYXBbXCJFT0ZcIl0gPSBFT0Y7XG4gICAgICAgIGNvbnN0IGFsbFRva2VuVHlwZXMgPSBoYXModG9rZW5Wb2NhYnVsYXJ5LCBcIm1vZGVzXCIpXG4gICAgICAgICAgICA/IGZsYXR0ZW4odmFsdWVzKHRva2VuVm9jYWJ1bGFyeS5tb2RlcykpXG4gICAgICAgICAgICA6IHZhbHVlcyh0b2tlblZvY2FidWxhcnkpO1xuICAgICAgICBjb25zdCBub1Rva2VuQ2F0ZWdvcmllc1VzZWQgPSBldmVyeShhbGxUb2tlblR5cGVzLCAodG9rZW5Db25zdHJ1Y3RvcikgPT4gaXNFbXB0eSh0b2tlbkNvbnN0cnVjdG9yLmNhdGVnb3J5TWF0Y2hlcykpO1xuICAgICAgICB0aGlzLnRva2VuTWF0Y2hlciA9IG5vVG9rZW5DYXRlZ29yaWVzVXNlZFxuICAgICAgICAgICAgPyB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzXG4gICAgICAgICAgICA6IHRva2VuU3RydWN0dXJlZE1hdGNoZXI7XG4gICAgICAgIC8vIEJlY2F1c2UgRVMyMDE1KyBzeW50YXggc2hvdWxkIGJlIHN1cHBvcnRlZCBmb3IgY3JlYXRpbmcgVG9rZW4gY2xhc3Nlc1xuICAgICAgICAvLyBXZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIFRva2VuIGNsYXNzZXMgd2VyZSBjcmVhdGVkIHVzaW5nIHRoZSBcImV4dGVuZFRva2VuXCIgdXRpbGl0aWVzXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBtdXN0IGF1Z21lbnQgdGhlIFRva2VuIGNsYXNzZXMgYm90aCBvbiBMZXhlciBpbml0aWFsaXphdGlvbiBhbmQgb24gUGFyc2VyIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGF1Z21lbnRUb2tlblR5cGVzKHZhbHVlcyh0aGlzLnRva2Vuc01hcCkpO1xuICAgIH1cbiAgICBkZWZpbmVSdWxlKHJ1bGVOYW1lLCBpbXBsLCBjb25maWcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZkFuYWx5c2lzRG9uZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtydWxlTmFtZX0+IG1heSBub3QgYmUgZGVmaW5lZCBhZnRlciB0aGUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQnXFxuYCArXG4gICAgICAgICAgICAgICAgYE1ha2Ugc3VyZSB0aGF0IGFsbCBncmFtbWFyIHJ1bGUgZGVmaW5pdGlvbnMgYXJlIGRvbmUgYmVmb3JlICdwZXJmb3JtU2VsZkFuYWx5c2lzJyBpcyBjYWxsZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzeW5jRW5hYmxlZCA9IGhhcyhjb25maWcsIFwicmVzeW5jRW5hYmxlZFwiKVxuICAgICAgICAgICAgPyBjb25maWcucmVzeW5jRW5hYmxlZCAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgICAgICA6IERFRkFVTFRfUlVMRV9DT05GSUcucmVzeW5jRW5hYmxlZDtcbiAgICAgICAgY29uc3QgcmVjb3ZlcnlWYWx1ZUZ1bmMgPSBoYXMoY29uZmlnLCBcInJlY292ZXJ5VmFsdWVGdW5jXCIpXG4gICAgICAgICAgICA/IGNvbmZpZy5yZWNvdmVyeVZhbHVlRnVuYyAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgICAgICA6IERFRkFVTFRfUlVMRV9DT05GSUcucmVjb3ZlcnlWYWx1ZUZ1bmM7XG4gICAgICAgIC8vIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogVXNlIHNtYWxsIGludGVnZXJzIGFzIGtleXMgZm9yIHRoZSBsb25nZXIgaHVtYW4gcmVhZGFibGUgXCJmdWxsXCIgcnVsZSBuYW1lcy5cbiAgICAgICAgLy8gdGhpcyBncmVhdGx5IGltcHJvdmVzIE1hcCBhY2Nlc3MgdGltZSAoYXMgbXVjaCBhcyA4JSBmb3Igc29tZSBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzKS5cbiAgICAgICAgY29uc3Qgc2hvcnROYW1lID0gdGhpcy5ydWxlU2hvcnROYW1lSWR4IDw8IChCSVRTX0ZPUl9NRVRIT0RfVFlQRSArIEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYKTtcbiAgICAgICAgdGhpcy5ydWxlU2hvcnROYW1lSWR4Kys7XG4gICAgICAgIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzaG9ydE5hbWVdID0gcnVsZU5hbWU7XG4gICAgICAgIHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtydWxlTmFtZV0gPSBzaG9ydE5hbWU7XG4gICAgICAgIGxldCBpbnZva2VSdWxlV2l0aFRyeTtcbiAgICAgICAgLy8gTWljcm8gb3B0aW1pemF0aW9uLCBvbmx5IGNoZWNrIHRoZSBjb25kaXRpb24gKipvbmNlKiogb24gcnVsZSBkZWZpbml0aW9uXG4gICAgICAgIC8vIGluc3RlYWQgb2YgKipldmVyeSBzaW5nbGUqKiBydWxlIGludm9jYXRpb24uXG4gICAgICAgIGlmICh0aGlzLm91dHB1dENzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaW52b2tlUnVsZVdpdGhUcnkgPSBmdW5jdGlvbiBpbnZva2VSdWxlV2l0aFRyeSguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHNob3J0TmFtZSwgcnVsZU5hbWUsIHRoaXMuc3VicnVsZUlkeCk7XG4gICAgICAgICAgICAgICAgICAgIGltcGwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzdCA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNzdFBvc3RSdWxlKGNzdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChlLCByZXN5bmNFbmFibGVkLCByZWNvdmVyeVZhbHVlRnVuYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW52b2tlUnVsZVdpdGhUcnkgPSBmdW5jdGlvbiBpbnZva2VSdWxlV2l0aFRyeUNzdCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHNob3J0TmFtZSwgcnVsZU5hbWUsIHRoaXMuc3VicnVsZUlkeCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbXBsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZSwgcmVzeW5jRW5hYmxlZCwgcmVjb3ZlcnlWYWx1ZUZ1bmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVkR3JhbW1hclJ1bGUgPSBPYmplY3QuYXNzaWduKGludm9rZVJ1bGVXaXRoVHJ5LCB7IHJ1bGVOYW1lLCBvcmlnaW5hbEdyYW1tYXJBY3Rpb246IGltcGwgfSk7XG4gICAgICAgIHJldHVybiB3cmFwcGVkR3JhbW1hclJ1bGU7XG4gICAgfVxuICAgIGludm9rZVJ1bGVDYXRjaChlLCByZXN5bmNFbmFibGVkQ29uZmlnLCByZWNvdmVyeVZhbHVlRnVuYykge1xuICAgICAgICBjb25zdCBpc0ZpcnN0SW52b2tlZFJ1bGUgPSB0aGlzLlJVTEVfU1RBQ0subGVuZ3RoID09PSAxO1xuICAgICAgICAvLyBub3RlIHRoZSByZVN5bmMgaXMgYWx3YXlzIGVuYWJsZWQgZm9yIHRoZSBmaXJzdCBydWxlIGludm9jYXRpb24sIGJlY2F1c2Ugd2UgbXVzdCBhbHdheXMgYmUgYWJsZSB0b1xuICAgICAgICAvLyByZVN5bmMgd2l0aCBFT0YgYW5kIGp1c3Qgb3V0cHV0IHNvbWUgSU5WQUxJRCBQYXJzZVRyZWVcbiAgICAgICAgLy8gZHVyaW5nIGJhY2t0cmFja2luZyByZVN5bmMgcmVjb3ZlcnkgaXMgZGlzYWJsZWQsIG90aGVyd2lzZSB3ZSBjYW4ndCBiZSBjZXJ0YWluIHRoZSBiYWNrdHJhY2tpbmdcbiAgICAgICAgLy8gcGF0aCBpcyByZWFsbHkgdGhlIG1vc3QgdmFsaWQgb25lXG4gICAgICAgIGNvbnN0IHJlU3luY0VuYWJsZWQgPSByZXN5bmNFbmFibGVkQ29uZmlnICYmICF0aGlzLmlzQmFja1RyYWNraW5nKCkgJiYgdGhpcy5yZWNvdmVyeUVuYWJsZWQ7XG4gICAgICAgIGlmIChpc1JlY29nbml0aW9uRXhjZXB0aW9uKGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvZ0Vycm9yID0gZTtcbiAgICAgICAgICAgIGlmIChyZVN5bmNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVTeW5jVG9rVHlwZSA9IHRoaXMuZmluZFJlU3luY1Rva2VuVHlwZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChyZVN5bmNUb2tUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICByZWNvZ0Vycm9yLnJlc3luY2VkVG9rZW5zID0gdGhpcy5yZVN5bmNUbyhyZVN5bmNUb2tUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsQ3N0UmVzdWx0ID0gdGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsQ3N0UmVzdWx0LnJlY292ZXJlZE5vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWxDc3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3ZlcnlWYWx1ZUZ1bmMoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dENzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGlhbENzdFJlc3VsdCA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbENzdFJlc3VsdC5yZWNvdmVyZWROb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29nRXJyb3IucGFydGlhbENzdFJlc3VsdCA9IHBhcnRpYWxDc3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgaGFuZGxlZCBGdXJ0aGVyIHVwIHRoZSBjYWxsIHN0YWNrXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHJlY29nRXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNGaXJzdEludm9rZWRSdWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGEgUmVkdW5kYW50IGlucHV0IGVycm9yIHdpbGwgYmUgY3JlYXRlZCBhcyB3ZWxsIGFuZCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2VcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIgc2hvdWxkIG5ldmVyIHRocm93IG9uZSBvZiBpdHMgb3duIGVycm9ycyBvdXRzaWRlIGl0cyBmbG93LlxuICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgZXJyb3IgcmVjb3ZlcnkgaXMgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3ZlcnlWYWx1ZUZ1bmMoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0byBiZSByZWNvdmVyZWQgRnVydGhlciB1cCB0aGUgY2FsbCBzdGFja1xuICAgICAgICAgICAgICAgIHRocm93IHJlY29nRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzb21lIG90aGVyIEVycm9yIHR5cGUgd2hpY2ggd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIChmb3IgZXhhbXBsZSBhIGJ1aWx0IGluIEphdmFTY3JpcHQgRXJyb3IpXG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIHBhcnNpbmcgRFNMXG4gICAgb3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoT1BUSU9OX0lEWCwgb2NjdXJyZW5jZSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsTG9naWMoYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UsIGtleSk7XG4gICAgfVxuICAgIG9wdGlvbkludGVybmFsTG9naWMoYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UsIGtleSkge1xuICAgICAgICBsZXQgbG9va0FoZWFkRnVuYyA9IHRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKGtleSk7XG4gICAgICAgIGxldCBhY3Rpb247XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uT1JNZXRob2REZWYgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uT1JNZXRob2REZWYuREVGO1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlID0gYWN0aW9uT1JNZXRob2REZWYuR0FURTtcbiAgICAgICAgICAgIC8vIHByZWRpY2F0ZSBwcmVzZW50XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmdMb29rYWhlYWRGdW5jdGlvbiA9IGxvb2tBaGVhZEZ1bmM7XG4gICAgICAgICAgICAgICAgbG9va0FoZWFkRnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZS5jYWxsKHRoaXMpICYmIG9yZ0xvb2thaGVhZEZ1bmN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rQWhlYWRGdW5jLmNhbGwodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhdExlYXN0T25lSW50ZXJuYWwocHJvZE9jY3VycmVuY2UsIGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIGNvbnN0IGxhS2V5ID0gdGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoQVRfTEVBU1RfT05FX0lEWCwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICByZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgYWN0aW9uT1JNZXRob2REZWYsIGxhS2V5KTtcbiAgICB9XG4gICAgYXRMZWFzdE9uZUludGVybmFsTG9naWMocHJvZE9jY3VycmVuY2UsIGFjdGlvbk9STWV0aG9kRGVmLCBrZXkpIHtcbiAgICAgICAgbGV0IGxvb2tBaGVhZEZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICBsZXQgYWN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk9STWV0aG9kRGVmICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmLkRFRjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZSA9IGFjdGlvbk9STWV0aG9kRGVmLkdBVEU7XG4gICAgICAgICAgICAvLyBwcmVkaWNhdGUgcHJlc2VudFxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JnTG9va2FoZWFkRnVuY3Rpb24gPSBsb29rQWhlYWRGdW5jO1xuICAgICAgICAgICAgICAgIGxvb2tBaGVhZEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUuY2FsbCh0aGlzKSAmJiBvcmdMb29rYWhlYWRGdW5jdGlvbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb25PUk1ldGhvZERlZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9va0FoZWFkRnVuYy5jYWxsKHRoaXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBsZXQgbm90U3R1Y2sgPSB0aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgd2hpbGUgKGxvb2tBaGVhZEZ1bmMuY2FsbCh0aGlzKSA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIG5vdFN0dWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgbm90U3R1Y2sgPSB0aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihwcm9kT2NjdXJyZW5jZSwgUFJPRF9UWVBFLlJFUEVUSVRJT05fTUFOREFUT1JZLCBhY3Rpb25PUk1ldGhvZERlZi5FUlJfTVNHKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3RlIHRoYXQgd2hpbGUgaXQgbWF5IHNlZW0gdGhhdCB0aGlzIGNhbiBjYXVzZSBhbiBlcnJvciBiZWNhdXNlIGJ5IHVzaW5nIGEgcmVjdXJzaXZlIGNhbGwgdG9cbiAgICAgICAgLy8gQVRfTEVBU1RfT05FIHdlIGNoYW5nZSB0aGUgZ3JhbW1hciB0byBBVF9MRUFTVF9UV08sIEFUX0xFQVNUX1RIUkVFIC4uLiAsIHRoZSBwb3NzaWJsZSByZWN1cnNpdmUgY2FsbFxuICAgICAgICAvLyBmcm9tIHRoZSB0cnlJblJlcGV0aXRpb25SZWNvdmVyeSguLi4pIHdpbGwgb25seSBoYXBwZW4gSUZGIHRoZXJlIHJlYWxseSBhcmUgVFdPL1RIUkVFLy4uLi4gaXRlbXMuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIiB3aWxsIGJlIGRlZmluZWQgYXMgTk9PUCB1bmxlc3MgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgICAgICB0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCwgW3Byb2RPY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZl0sIGxvb2tBaGVhZEZ1bmMsIEFUX0xFQVNUX09ORV9JRFgsIHByb2RPY2N1cnJlbmNlLCBOZXh0VGVybWluYWxBZnRlckF0TGVhc3RPbmVXYWxrZXIpO1xuICAgIH1cbiAgICBhdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbChwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKEFUX0xFQVNUX09ORV9TRVBfSURYLCBwcm9kT2NjdXJyZW5jZSk7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucywgbGFLZXkpO1xuICAgIH1cbiAgICBhdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbExvZ2ljKHByb2RPY2N1cnJlbmNlLCBvcHRpb25zLCBrZXkpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5ERUY7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuU0VQO1xuICAgICAgICBjb25zdCBmaXJzdEl0ZXJhdGlvbkxvb2thaGVhZEZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICAvLyAxc3QgaXRlcmF0aW9uXG4gICAgICAgIGlmIChmaXJzdEl0ZXJhdGlvbkxvb2thaGVhZEZ1bmMuY2FsbCh0aGlzKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAvLyAgVE9ETzogT3B0aW1pemF0aW9uIGNhbiBtb3ZlIHRoaXMgZnVuY3Rpb24gY29uc3RydWN0aW9uIGludG8gXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIlxuICAgICAgICAgICAgLy8gIGJlY2F1c2UgaXQgaXMgb25seSBuZWVkZWQgaW4gZXJyb3IgcmVjb3Zlcnkgc2NlbmFyaW9zLlxuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yTG9va0FoZWFkRnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSwgc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyAybmQuLm50aCBpdGVyYXRpb25zXG4gICAgICAgICAgICB3aGlsZSAodGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSwgc2VwYXJhdG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIG5vdGUgdGhhdCB0aGlzIENPTlNVTUUgd2lsbCBuZXZlciBlbnRlciByZWNvdmVyeSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMgY2hlY2tzIHRoYXQgdGhlIHNlcGFyYXRvciByZWFsbHkgZG9lcyBleGlzdC5cbiAgICAgICAgICAgICAgICB0aGlzLkNPTlNVTUUoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICAvLyBObyBuZWVkIGZvciBjaGVja2luZyBpbmZpbml0ZSBsb29wIGhlcmUgZHVlIHRvIGNvbnN1bWluZyB0aGUgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGFjdGlvbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBcImF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeVwiIHdpbGwgYmUgZGVmaW5lZCBhcyBOT09QIHVubGVzcyByZWNvdmVyeSBpcyBlbmFibGVkXG4gICAgICAgICAgICB0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCwgW1xuICAgICAgICAgICAgICAgIHByb2RPY2N1cnJlbmNlLFxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcixcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3JMb29rQWhlYWRGdW5jLFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBOZXh0VGVybWluYWxBZnRlckF0TGVhc3RPbmVTZXBXYWxrZXIsXG4gICAgICAgICAgICBdLCBzZXBhcmF0b3JMb29rQWhlYWRGdW5jLCBBVF9MRUFTVF9PTkVfU0VQX0lEWCwgcHJvZE9jY3VycmVuY2UsIE5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKHByb2RPY2N1cnJlbmNlLCBQUk9EX1RZUEUuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IsIG9wdGlvbnMuRVJSX01TRyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFueUludGVybmFsKHByb2RPY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE1BTllfSURYLCBwcm9kT2NjdXJyZW5jZSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbnlJbnRlcm5hbExvZ2ljKHByb2RPY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZiwgbGFLZXkpO1xuICAgIH1cbiAgICBtYW55SW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgYWN0aW9uT1JNZXRob2REZWYsIGtleSkge1xuICAgICAgICBsZXQgbG9va2FoZWFkRnVuY3Rpb24gPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICBsZXQgYWN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk9STWV0aG9kRGVmICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmLkRFRjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZSA9IGFjdGlvbk9STWV0aG9kRGVmLkdBVEU7XG4gICAgICAgICAgICAvLyBwcmVkaWNhdGUgcHJlc2VudFxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JnTG9va2FoZWFkRnVuY3Rpb24gPSBsb29rYWhlYWRGdW5jdGlvbjtcbiAgICAgICAgICAgICAgICBsb29rYWhlYWRGdW5jdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZS5jYWxsKHRoaXMpICYmIG9yZ0xvb2thaGVhZEZ1bmN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub3RTdHVjayA9IHRydWU7XG4gICAgICAgIHdoaWxlIChsb29rYWhlYWRGdW5jdGlvbi5jYWxsKHRoaXMpID09PSB0cnVlICYmIG5vdFN0dWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICBub3RTdHVjayA9IHRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBcImF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeVwiIHdpbGwgYmUgZGVmaW5lZCBhcyBOT09QIHVubGVzcyByZWNvdmVyeSBpcyBlbmFibGVkXG4gICAgICAgIHRoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLCBbcHJvZE9jY3VycmVuY2UsIGFjdGlvbk9STWV0aG9kRGVmXSwgbG9va2FoZWFkRnVuY3Rpb24sIE1BTllfSURYLCBwcm9kT2NjdXJyZW5jZSwgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55V2Fsa2VyLCBcbiAgICAgICAgLy8gVGhlIG5vdFN0dWNrIHBhcmFtZXRlciBpcyBvbmx5IHJlbGV2YW50IHdoZW4gXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIlxuICAgICAgICAvLyBpcyBpbnZva2VkIGZyb20gbWFueUludGVybmFsLCBpbiB0aGUgTUFOWV9TRVAgY2FzZSBhbmQgQVRfTEVBU1RfT05FW19TRVBdXG4gICAgICAgIC8vIEFuIGluZmluaXRlIGxvb3AgY2Fubm90IG9jY3VyIGFzOlxuICAgICAgICAvLyAtIEVpdGhlciB0aGUgbG9va2FoZWFkIGlzIGd1YXJhbnRlZWQgdG8gY29uc3VtZSBzb21ldGhpbmcgKFNpbmdsZSBUb2tlbiBTZXBhcmF0b3IpXG4gICAgICAgIC8vIC0gQVRfTEVBU1RfT05FIGJ5IGRlZmluaXRpb24gaXMgZ3VhcmFudGVlZCB0byBjb25zdW1lIHNvbWV0aGluZyAob3IgZXJyb3Igb3V0KS5cbiAgICAgICAgbm90U3R1Y2spO1xuICAgIH1cbiAgICBtYW55U2VwRmlyc3RJbnRlcm5hbChwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE1BTllfU0VQX0lEWCwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsTG9naWMocHJvZE9jY3VycmVuY2UsIG9wdGlvbnMsIGxhS2V5KTtcbiAgICB9XG4gICAgbWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucywga2V5KSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuREVGO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBvcHRpb25zLlNFUDtcbiAgICAgICAgY29uc3QgZmlyc3RJdGVyYXRpb25MYUZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICAvLyAxc3QgaXRlcmF0aW9uXG4gICAgICAgIGlmIChmaXJzdEl0ZXJhdGlvbkxhRnVuYy5jYWxsKHRoaXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksIHNlcGFyYXRvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gMm5kLi5udGggaXRlcmF0aW9uc1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksIHNlcGFyYXRvcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgdGhpcyBDT05TVU1FIHdpbGwgbmV2ZXIgZW50ZXIgcmVjb3ZlcnkgYmVjYXVzZVxuICAgICAgICAgICAgICAgIC8vIHRoZSBzZXBhcmF0b3JMb29rQWhlYWRGdW5jIGNoZWNrcyB0aGF0IHRoZSBzZXBhcmF0b3IgcmVhbGx5IGRvZXMgZXhpc3QuXG4gICAgICAgICAgICAgICAgdGhpcy5DT05TVU1FKHNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgY2hlY2tpbmcgaW5maW5pdGUgbG9vcCBoZXJlIGR1ZSB0byBjb25zdW1pbmcgdGhlIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIiB3aWxsIGJlIGRlZmluZWQgYXMgTk9PUCB1bmxlc3MgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgICAgICAgICAgdGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsIFtcbiAgICAgICAgICAgICAgICBwcm9kT2NjdXJyZW5jZSxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yTG9va0FoZWFkRnVuYyxcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55U2VwV2Fsa2VyLFxuICAgICAgICAgICAgXSwgc2VwYXJhdG9yTG9va0FoZWFkRnVuYywgTUFOWV9TRVBfSURYLCBwcm9kT2NjdXJyZW5jZSwgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55U2VwV2Fsa2VyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwocHJvZE9jY3VycmVuY2UsIHNlcGFyYXRvciwgc2VwYXJhdG9yTG9va0FoZWFkRnVuYywgYWN0aW9uLCBuZXh0VGVybWluYWxBZnRlcldhbGtlcikge1xuICAgICAgICB3aGlsZSAoc2VwYXJhdG9yTG9va0FoZWFkRnVuYygpKSB7XG4gICAgICAgICAgICAvLyBub3RlIHRoYXQgdGhpcyBDT05TVU1FIHdpbGwgbmV2ZXIgZW50ZXIgcmVjb3ZlcnkgYmVjYXVzZVxuICAgICAgICAgICAgLy8gdGhlIHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMgY2hlY2tzIHRoYXQgdGhlIHNlcGFyYXRvciByZWFsbHkgZG9lcyBleGlzdC5cbiAgICAgICAgICAgIHRoaXMuQ09OU1VNRShzZXBhcmF0b3IpO1xuICAgICAgICAgICAgYWN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgY2FuIG9ubHkgYXJyaXZlIHRvIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgYW4gZXJyb3JcbiAgICAgICAgLy8gaGFzIG9jY3VycmVkIChoZW5jZSB0aGUgbmFtZSAnc2Vjb25kJykgc28gdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyBJRiB3aWxsIGFsd2F5cyBiZSBlbnRlcmVkLCBpdHMgcG9zc2libGUgdG8gcmVtb3ZlIGl0Li4uXG4gICAgICAgIC8vIGhvd2V2ZXIgaXQgaXMga2VwdCB0byBhdm9pZCBjb25mdXNpb24gYW5kIGJlIGNvbnNpc3RlbnQuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIiB3aWxsIGJlIGRlZmluZWQgYXMgTk9PUCB1bmxlc3MgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICB0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCwgW1xuICAgICAgICAgICAgcHJvZE9jY3VycmVuY2UsXG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICBzZXBhcmF0b3JMb29rQWhlYWRGdW5jLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgbmV4dFRlcm1pbmFsQWZ0ZXJXYWxrZXIsXG4gICAgICAgIF0sIHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMsIEFUX0xFQVNUX09ORV9TRVBfSURYLCBwcm9kT2NjdXJyZW5jZSwgbmV4dFRlcm1pbmFsQWZ0ZXJXYWxrZXIpO1xuICAgIH1cbiAgICBkb1NpbmdsZVJlcGV0aXRpb24oYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZUl0ZXJhdGlvbiA9IHRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO1xuICAgICAgICBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJJdGVyYXRpb24gPSB0aGlzLmdldExleGVyUG9zaXRpb24oKTtcbiAgICAgICAgLy8gVGhpcyBib29sZWFuIHdpbGwgaW5kaWNhdGUgaWYgdGhpcyByZXBldGl0aW9uIHByb2dyZXNzZWRcbiAgICAgICAgLy8gb3IgaWYgd2UgYXJlIFwic3R1Y2tcIiAocG90ZW50aWFsIGluZmluaXRlIGxvb3AgaW4gdGhlIHJlcGV0aXRpb24pLlxuICAgICAgICByZXR1cm4gYWZ0ZXJJdGVyYXRpb24gPiBiZWZvcmVJdGVyYXRpb247XG4gICAgfVxuICAgIG9ySW50ZXJuYWwoYWx0c09yT3B0cywgb2NjdXJyZW5jZSkge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE9SX0lEWCwgb2NjdXJyZW5jZSk7XG4gICAgICAgIGNvbnN0IGFsdHMgPSBpc0FycmF5KGFsdHNPck9wdHMpID8gYWx0c09yT3B0cyA6IGFsdHNPck9wdHMuREVGO1xuICAgICAgICBjb25zdCBsYUZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShsYUtleSk7XG4gICAgICAgIGNvbnN0IGFsdElkeFRvVGFrZSA9IGxhRnVuYy5jYWxsKHRoaXMsIGFsdHMpO1xuICAgICAgICBpZiAoYWx0SWR4VG9UYWtlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlbkFsdGVybmF0aXZlID0gYWx0c1thbHRJZHhUb1Rha2VdO1xuICAgICAgICAgICAgcmV0dXJuIGNob3NlbkFsdGVybmF0aXZlLkFMVC5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihvY2N1cnJlbmNlLCBhbHRzT3JPcHRzLkVSUl9NU0cpO1xuICAgIH1cbiAgICBydWxlRmluYWxseVN0YXRlVXBkYXRlKCkge1xuICAgICAgICB0aGlzLlJVTEVfU1RBQ0sucG9wKCk7XG4gICAgICAgIHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLLnBvcCgpO1xuICAgICAgICAvLyBOT09QIHdoZW4gY3N0IGlzIGRpc2FibGVkXG4gICAgICAgIHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLlJVTEVfU1RBQ0subGVuZ3RoID09PSAwICYmIHRoaXMuaXNBdEVuZE9mSW5wdXQoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVkdW5kYW50VG9rID0gdGhpcy5MQSgxKTtcbiAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIGZpcnN0UmVkdW5kYW50OiBmaXJzdFJlZHVuZGFudFRvayxcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuU0FWRV9FUlJPUihuZXcgTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24oZXJyTXNnLCBmaXJzdFJlZHVuZGFudFRvaykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCBpZHgsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHJ1bGVSZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5BUkdTIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWJydWxlSWR4ID0gaWR4O1xuICAgICAgICAgICAgcnVsZVJlc3VsdCA9IHJ1bGVUb0NhbGwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3ROb25UZXJtaW5hbChydWxlUmVzdWx0LCBvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5MQUJFTCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLkxBQkVMXG4gICAgICAgICAgICAgICAgOiBydWxlVG9DYWxsLnJ1bGVOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBydWxlUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLnN1YnJ1bGVJbnRlcm5hbEVycm9yKGUsIG9wdGlvbnMsIHJ1bGVUb0NhbGwucnVsZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnJ1bGVJbnRlcm5hbEVycm9yKGUsIG9wdGlvbnMsIHJ1bGVOYW1lKSB7XG4gICAgICAgIGlmIChpc1JlY29nbml0aW9uRXhjZXB0aW9uKGUpICYmIGUucGFydGlhbENzdFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3ROb25UZXJtaW5hbChlLnBhcnRpYWxDc3RSZXN1bHQsIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLkxBQkVMICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuTEFCRUxcbiAgICAgICAgICAgICAgICA6IHJ1bGVOYW1lKTtcbiAgICAgICAgICAgIGRlbGV0ZSBlLnBhcnRpYWxDc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgY29uc3VtZUludGVybmFsKHRva1R5cGUsIGlkeCwgb3B0aW9ucykge1xuICAgICAgICBsZXQgY29uc3VtZWRUb2tlbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgICAgICBpZiAodGhpcy50b2tlbk1hdGNoZXIobmV4dFRva2VuLCB0b2tUeXBlKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVRva2VuKCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZWRUb2tlbiA9IG5leHRUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUludGVybmFsRXJyb3IodG9rVHlwZSwgbmV4dFRva2VuLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZUZyb21Db25zdW1wdGlvbikge1xuICAgICAgICAgICAgY29uc3VtZWRUb2tlbiA9IHRoaXMuY29uc3VtZUludGVybmFsUmVjb3ZlcnkodG9rVHlwZSwgaWR4LCBlRnJvbUNvbnN1bXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNzdFBvc3RUZXJtaW5hbChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5MQUJFTCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG9wdGlvbnMuTEFCRUxcbiAgICAgICAgICAgIDogdG9rVHlwZS5uYW1lLCBjb25zdW1lZFRva2VuKTtcbiAgICAgICAgcmV0dXJuIGNvbnN1bWVkVG9rZW47XG4gICAgfVxuICAgIGNvbnN1bWVJbnRlcm5hbEVycm9yKHRva1R5cGUsIG5leHRUb2tlbiwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbXNnO1xuICAgICAgICBjb25zdCBwcmV2aW91c1Rva2VuID0gdGhpcy5MQSgwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLkVSUl9NU0cpIHtcbiAgICAgICAgICAgIG1zZyA9IG9wdGlvbnMuRVJSX01TRztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHRva1R5cGUsXG4gICAgICAgICAgICAgICAgYWN0dWFsOiBuZXh0VG9rZW4sXG4gICAgICAgICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzVG9rZW4sXG4gICAgICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24obXNnLCBuZXh0VG9rZW4sIHByZXZpb3VzVG9rZW4pKTtcbiAgICB9XG4gICAgY29uc3VtZUludGVybmFsUmVjb3ZlcnkodG9rVHlwZSwgaWR4LCBlRnJvbUNvbnN1bXB0aW9uKSB7XG4gICAgICAgIC8vIG5vIHJlY292ZXJ5IGFsbG93ZWQgZHVyaW5nIGJhY2t0cmFja2luZywgb3RoZXJ3aXNlIGJhY2t0cmFja2luZyBtYXkgcmVjb3ZlciBpbnZhbGlkIHN5bnRheCBhbmQgYWNjZXB0IGl0XG4gICAgICAgIC8vIGJ1dCB0aGUgb3JpZ2luYWwgc3ludGF4IGNvdWxkIGhhdmUgYmVlbiBwYXJzZWQgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGJhY2t0cmFja2luZyArIHJlY292ZXJ5XG4gICAgICAgIGlmICh0aGlzLnJlY292ZXJ5RW5hYmxlZCAmJlxuICAgICAgICAgICAgLy8gVE9ETzogbW9yZSByb2J1c3QgY2hlY2tpbmcgb2YgdGhlIGV4Y2VwdGlvbiB0eXBlLiBQZXJoYXBzIFR5cGVzY3JpcHQgZXh0ZW5kaW5nIGV4cHJlc3Npb25zP1xuICAgICAgICAgICAgZUZyb21Db25zdW1wdGlvbi5uYW1lID09PSBcIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvblwiICYmXG4gICAgICAgICAgICAhdGhpcy5pc0JhY2tUcmFja2luZygpKSB7XG4gICAgICAgICAgICBjb25zdCBmb2xsb3dzID0gdGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkodG9rVHlwZSwgaWR4KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkodG9rVHlwZSwgZm9sbG93cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZUZyb21JblJ1bGVSZWNvdmVyeSkge1xuICAgICAgICAgICAgICAgIGlmIChlRnJvbUluUnVsZVJlY292ZXJ5Lm5hbWUgPT09IElOX1JVTEVfUkVDT1ZFUllfRVhDRVBUSU9OKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZhaWxlZCBpbiBSdWxlUmVjb3ZlcnkuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IHRoZSBvcmlnaW5hbCBlcnJvciBpbiBvcmRlciB0byB0cmlnZ2VyIHJlU3luYyBlcnJvciByZWNvdmVyeVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlRnJvbUNvbnN1bXB0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZUZyb21JblJ1bGVSZWNvdmVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlRnJvbUNvbnN1bXB0aW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNhdmVSZWNvZ1N0YXRlKCkge1xuICAgICAgICAvLyBlcnJvcnMgaXMgYSBnZXR0ZXIgd2hpY2ggd2lsbCBjbG9uZSB0aGUgZXJyb3JzIGFycmF5XG4gICAgICAgIGNvbnN0IHNhdmVkRXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgICAgIGNvbnN0IHNhdmVkUnVsZVN0YWNrID0gY2xvbmUodGhpcy5SVUxFX1NUQUNLKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogc2F2ZWRFcnJvcnMsXG4gICAgICAgICAgICBsZXhlclN0YXRlOiB0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxcbiAgICAgICAgICAgIFJVTEVfU1RBQ0s6IHNhdmVkUnVsZVN0YWNrLFxuICAgICAgICAgICAgQ1NUX1NUQUNLOiB0aGlzLkNTVF9TVEFDSyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVsb2FkUmVjb2dTdGF0ZShuZXdTdGF0ZSkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IG5ld1N0YXRlLmVycm9ycztcbiAgICAgICAgdGhpcy5pbXBvcnRMZXhlclN0YXRlKG5ld1N0YXRlLmxleGVyU3RhdGUpO1xuICAgICAgICB0aGlzLlJVTEVfU1RBQ0sgPSBuZXdTdGF0ZS5SVUxFX1NUQUNLO1xuICAgIH1cbiAgICBydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHNob3J0TmFtZSwgZnVsbE5hbWUsIGlkeEluQ2FsbGluZ1J1bGUpIHtcbiAgICAgICAgdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChpZHhJbkNhbGxpbmdSdWxlKTtcbiAgICAgICAgdGhpcy5SVUxFX1NUQUNLLnB1c2goc2hvcnROYW1lKTtcbiAgICAgICAgLy8gTk9PUCB3aGVuIGNzdCBpcyBkaXNhYmxlZFxuICAgICAgICB0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShmdWxsTmFtZSk7XG4gICAgfVxuICAgIGlzQmFja1RyYWNraW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLmxlbmd0aCAhPT0gMDtcbiAgICB9XG4gICAgZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpIHtcbiAgICAgICAgY29uc3Qgc2hvcnROYW1lID0gdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxbc2hvcnROYW1lXTtcbiAgICB9XG4gICAgc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoc2hvcnROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxbc2hvcnROYW1lXTtcbiAgICB9XG4gICAgaXNBdEVuZE9mSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLCBFT0YpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5yZXNldExleGVyU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zdWJydWxlSWR4ID0gMDtcbiAgICAgICAgdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuUlVMRV9TVEFDSyA9IFtdO1xuICAgICAgICAvLyBUT0RPOiBleHRyYWN0IGEgc3BlY2lmaWMgcmVzZXQgZm9yIFRyZWVCdWlsZGVyIHRyYWl0XG4gICAgICAgIHRoaXMuQ1NUX1NUQUNLID0gW107XG4gICAgICAgIHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLID0gW107XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVjb2duaXplcl9lbmdpbmUuanMubWFwIiwKICAgICJpbXBvcnQgeyBFYXJseUV4aXRFeGNlcHRpb24sIGlzUmVjb2duaXRpb25FeGNlcHRpb24sIE5vVmlhYmxlQWx0RXhjZXB0aW9uLCB9IGZyb20gXCIuLi8uLi9leGNlcHRpb25zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgY2xvbmUsIGhhcyB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kLCBnZXRMb29rYWhlYWRQYXRoc0Zvck9yLCB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2xvb2thaGVhZC5qc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9QQVJTRVJfQ09ORklHIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuLyoqXG4gKiBUcmFpdCByZXNwb25zaWJsZSBmb3IgcnVudGltZSBwYXJzaW5nIGVycm9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlciB7XG4gICAgaW5pdEVycm9ySGFuZGxlcihjb25maWcpIHtcbiAgICAgICAgdGhpcy5fZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIgPSBoYXMoY29uZmlnLCBcImVycm9yTWVzc2FnZVByb3ZpZGVyXCIpXG4gICAgICAgICAgICA/IGNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlciAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgICAgICA6IERFRkFVTFRfUEFSU0VSX0NPTkZJRy5lcnJvck1lc3NhZ2VQcm92aWRlcjtcbiAgICB9XG4gICAgU0FWRV9FUlJPUihlcnJvcikge1xuICAgICAgICBpZiAoaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbihlcnJvcikpIHtcbiAgICAgICAgICAgIGVycm9yLmNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiB0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxcbiAgICAgICAgICAgICAgICBydWxlT2NjdXJyZW5jZVN0YWNrOiBjbG9uZSh0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJUcnlpbmcgdG8gc2F2ZSBhbiBFcnJvciB3aGljaCBpcyBub3QgYSBSZWNvZ25pdGlvbkV4Y2VwdGlvblwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5fZXJyb3JzKTtcbiAgICB9XG4gICAgc2V0IGVycm9ycyhuZXdFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5fZXJyb3JzID0gbmV3RXJyb3JzO1xuICAgIH1cbiAgICAvLyBUT0RPOiBjb25zaWRlciBjYWNoaW5nIHRoZSBlcnJvciBtZXNzYWdlIGNvbXB1dGVkIGluZm9ybWF0aW9uXG4gICAgcmFpc2VFYXJseUV4aXRFeGNlcHRpb24ob2NjdXJyZW5jZSwgcHJvZFR5cGUsIHVzZXJEZWZpbmVkRXJyTXNnKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCk7XG4gICAgICAgIGNvbnN0IHJ1bGVHcmFtbWFyID0gdGhpcy5nZXRHQXN0UHJvZHVjdGlvbnMoKVtydWxlTmFtZV07XG4gICAgICAgIGNvbnN0IGxvb2tBaGVhZFBhdGhzUGVyQWx0ZXJuYXRpdmUgPSBnZXRMb29rYWhlYWRQYXRoc0Zvck9wdGlvbmFsUHJvZChvY2N1cnJlbmNlLCBydWxlR3JhbW1hciwgcHJvZFR5cGUsIHRoaXMubWF4TG9va2FoZWFkKTtcbiAgICAgICAgY29uc3QgaW5zaWRlUHJvZFBhdGhzID0gbG9va0FoZWFkUGF0aHNQZXJBbHRlcm5hdGl2ZVswXTtcbiAgICAgICAgY29uc3QgYWN0dWFsVG9rZW5zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMubWF4TG9va2FoZWFkOyBpKyspIHtcbiAgICAgICAgICAgIGFjdHVhbFRva2Vucy5wdXNoKHRoaXMuTEEoaSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtcbiAgICAgICAgICAgIGV4cGVjdGVkSXRlcmF0aW9uUGF0aHM6IGluc2lkZVByb2RQYXRocyxcbiAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsVG9rZW5zLFxuICAgICAgICAgICAgcHJldmlvdXM6IHRoaXMuTEEoMCksXG4gICAgICAgICAgICBjdXN0b21Vc2VyRGVzY3JpcHRpb246IHVzZXJEZWZpbmVkRXJyTXNnLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGVOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBFYXJseUV4aXRFeGNlcHRpb24obXNnLCB0aGlzLkxBKDEpLCB0aGlzLkxBKDApKSk7XG4gICAgfVxuICAgIC8vIFRPRE86IGNvbnNpZGVyIGNhY2hpbmcgdGhlIGVycm9yIG1lc3NhZ2UgY29tcHV0ZWQgaW5mb3JtYXRpb25cbiAgICByYWlzZU5vQWx0RXhjZXB0aW9uKG9jY3VycmVuY2UsIGVyck1zZ1R5cGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCk7XG4gICAgICAgIGNvbnN0IHJ1bGVHcmFtbWFyID0gdGhpcy5nZXRHQXN0UHJvZHVjdGlvbnMoKVtydWxlTmFtZV07XG4gICAgICAgIC8vIFRPRE86IGdldExvb2thaGVhZFBhdGhzRm9yT3IgY2FuIGJlIHNsb3cgZm9yIGxhcmdlIGVub3VnaCBtYXhMb29rYWhlYWQgYW5kIGNlcnRhaW4gZ3JhbW1hcnMsIGNvbnNpZGVyIGNhY2hpbmcgP1xuICAgICAgICBjb25zdCBsb29rQWhlYWRQYXRoc1BlckFsdGVybmF0aXZlID0gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcihvY2N1cnJlbmNlLCBydWxlR3JhbW1hciwgdGhpcy5tYXhMb29rYWhlYWQpO1xuICAgICAgICBjb25zdCBhY3R1YWxUb2tlbnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5tYXhMb29rYWhlYWQ7IGkrKykge1xuICAgICAgICAgICAgYWN0dWFsVG9rZW5zLnB1c2godGhpcy5MQShpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldmlvdXNUb2tlbiA9IHRoaXMuTEEoMCk7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZXhwZWN0ZWRQYXRoc1BlckFsdDogbG9va0FoZWFkUGF0aHNQZXJBbHRlcm5hdGl2ZSxcbiAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsVG9rZW5zLFxuICAgICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzVG9rZW4sXG4gICAgICAgICAgICBjdXN0b21Vc2VyRGVzY3JpcHRpb246IGVyck1zZ1R5cGVzLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihlcnJNc2csIHRoaXMuTEEoMSksIHByZXZpb3VzVG9rZW4pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcl9oYW5kbGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgTmV4dEFmdGVyVG9rZW5XYWxrZXIsIG5leHRQb3NzaWJsZVRva2Vuc0FmdGVyLCB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2ludGVycHJldGVyLmpzXCI7XG5pbXBvcnQgeyBmaXJzdCwgaXNVbmRlZmluZWQgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5leHBvcnQgY2xhc3MgQ29udGVudEFzc2lzdCB7XG4gICAgaW5pdENvbnRlbnRBc3Npc3QoKSB7IH1cbiAgICBjb21wdXRlQ29udGVudEFzc2lzdChzdGFydFJ1bGVOYW1lLCBwcmVjZWRpbmdJbnB1dCkge1xuICAgICAgICBjb25zdCBzdGFydFJ1bGVHYXN0ID0gdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtzdGFydFJ1bGVOYW1lXTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHN0YXJ0UnVsZUdhc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUnVsZSAtPiR7c3RhcnRSdWxlTmFtZX08LSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGdyYW1tYXIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NzaWJsZVRva2Vuc0FmdGVyKFtzdGFydFJ1bGVHYXN0XSwgcHJlY2VkaW5nSW5wdXQsIHRoaXMudG9rZW5NYXRjaGVyLCB0aGlzLm1heExvb2thaGVhZCk7XG4gICAgfVxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIGJlIGEgbWVtYmVyIG1ldGhvZCBvciBhIHV0aWxpdHk/IGl0IGRvZXMgbm90IGhhdmUgYW55IHN0YXRlIG9yIHVzYWdlIG9mICd0aGlzJy4uLlxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIGJlIG1vcmUgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJP1xuICAgIGdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMoZ3JhbW1hclBhdGgpIHtcbiAgICAgICAgY29uc3QgdG9wUnVsZU5hbWUgPSBmaXJzdChncmFtbWFyUGF0aC5ydWxlU3RhY2spO1xuICAgICAgICBjb25zdCBnYXN0UHJvZHVjdGlvbnMgPSB0aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpO1xuICAgICAgICBjb25zdCB0b3BQcm9kdWN0aW9uID0gZ2FzdFByb2R1Y3Rpb25zW3RvcFJ1bGVOYW1lXTtcbiAgICAgICAgY29uc3QgbmV4dFBvc3NpYmxlVG9rZW5UeXBlcyA9IG5ldyBOZXh0QWZ0ZXJUb2tlbldhbGtlcih0b3BQcm9kdWN0aW9uLCBncmFtbWFyUGF0aCkuc3RhcnRXYWxraW5nKCk7XG4gICAgICAgIHJldHVybiBuZXh0UG9zc2libGVUb2tlblR5cGVzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHRfYXNzaXN0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZm9yRWFjaCwgaGFzLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBsYXN0IGFzIHBlZWssIHNvbWUsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpb24sIEFsdGVybmF0aXZlLCBOb25UZXJtaW5hbCwgT3B0aW9uLCBSZXBldGl0aW9uLCBSZXBldGl0aW9uTWFuZGF0b3J5LCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIFJ1bGUsIFRlcm1pbmFsLCB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG5pbXBvcnQgeyBMZXhlciB9IGZyb20gXCIuLi8uLi8uLi9zY2FuL2xleGVyX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgYXVnbWVudFRva2VuVHlwZXMsIGhhc1Nob3J0S2V5UHJvcGVydHksIH0gZnJvbSBcIi4uLy4uLy4uL3NjYW4vdG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbiwgY3JlYXRlVG9rZW5JbnN0YW5jZSwgfSBmcm9tIFwiLi4vLi4vLi4vc2Nhbi90b2tlbnNfcHVibGljLmpzXCI7XG5pbXBvcnQgeyBFTkRfT0ZfRklMRSB9IGZyb20gXCIuLi9wYXJzZXIuanNcIjtcbmltcG9ydCB7IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYIH0gZnJvbSBcIi4uLy4uL2dyYW1tYXIva2V5cy5qc1wiO1xuY29uc3QgUkVDT1JESU5HX05VTExfT0JKRUNUID0ge1xuICAgIGRlc2NyaXB0aW9uOiBcIlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2VcIixcbn07XG5PYmplY3QuZnJlZXplKFJFQ09SRElOR19OVUxMX09CSkVDVCk7XG5jb25zdCBIQU5ETEVfU0VQQVJBVE9SID0gdHJ1ZTtcbmNvbnN0IE1BWF9NRVRIT0RfSURYID0gTWF0aC5wb3coMiwgQklUU19GT1JfT0NDVVJSRU5DRV9JRFgpIC0gMTtcbmNvbnN0IFJGVCA9IGNyZWF0ZVRva2VuKHsgbmFtZTogXCJSRUNPUkRJTkdfUEhBU0VfVE9LRU5cIiwgcGF0dGVybjogTGV4ZXIuTkEgfSk7XG5hdWdtZW50VG9rZW5UeXBlcyhbUkZUXSk7XG5jb25zdCBSRUNPUkRJTkdfUEhBU0VfVE9LRU4gPSBjcmVhdGVUb2tlbkluc3RhbmNlKFJGVCwgXCJUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2VcXG5cXHRcIiArXG4gICAgXCJcIiArXG4gICAgXCJTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzXCIsIFxuLy8gVXNpbmcgXCItMVwiIGluc3RlYWQgb2YgTmFOIChhcyBpbiBFT0YpIGJlY2F1c2UgYW4gYWN0dWFsIG51bWJlciBpcyBsZXNzIGxpa2VseSB0b1xuLy8gY2F1c2UgZXJyb3JzIGlmIHRoZSBvdXRwdXQgb2YgTEEgb3IgQ09OU1VNRSB3b3VsZCBiZSAoaW5jb3JyZWN0bHkpIHVzZWQgZHVyaW5nIHRoZSByZWNvcmRpbmcgcGhhc2UuXG4tMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTtcbk9iamVjdC5mcmVlemUoUkVDT1JESU5HX1BIQVNFX1RPS0VOKTtcbmNvbnN0IFJFQ09SRElOR19QSEFTRV9DU1ROT0RFID0ge1xuICAgIG5hbWU6IFwiVGhpcyBDU1ROb2RlIGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGluIFJlY29yZGluZyBQaGFzZVxcblxcdFwiICtcbiAgICAgICAgXCJTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzXCIsXG4gICAgY2hpbGRyZW46IHt9LFxufTtcbi8qKlxuICogVGhpcyB0cmFpdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiB0aGUgR0FTVCBzdHJ1Y3R1cmUgZm9yIENoZXZyb3RhaW4gR3JhbW1hcnNcbiAqL1xuZXhwb3J0IGNsYXNzIEdhc3RSZWNvcmRlciB7XG4gICAgaW5pdEdhc3RSZWNvcmRlcihjb25maWcpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5SRUNPUkRJTkdfUEhBU0UgPSBmYWxzZTtcbiAgICB9XG4gICAgZW5hYmxlUmVjb3JkaW5nKCkge1xuICAgICAgICB0aGlzLlJFQ09SRElOR19QSEFTRSA9IHRydWU7XG4gICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkVuYWJsZSBSZWNvcmRpbmdcIiwgKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXYXJuaW5nIERhcmsgVm9vZG9vIE1hZ2ljIHVwY29taW5nIVxuICAgICAgICAgICAgICogV2UgYXJlIFwicmVwbGFjaW5nXCIgdGhlIHB1YmxpYyBwYXJzaW5nIERTTCBtZXRob2RzIEFQSVxuICAgICAgICAgICAgICogV2l0aCAqKm5ldyoqIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBvbiB0aGUgUGFyc2VyICoqaW5zdGFuY2UqKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFNvIGZhciB0aGlzIGlzIHRoZSBvbmx5IHdheSBJJ3ZlIGZvdW5kIHRvIGF2b2lkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGR1cmluZyBwYXJzaW5nIHRpbWUuXG4gICAgICAgICAgICAgKiAtIEFwcHJveCAzMCUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3YXMgbWVhc3VyZWQgb24gQ2hyb21lIDc1IENhbmFyeSB3aGVuIGF0dGVtcHRpbmcgdG8gcmVwbGFjZSB0aGUgXCJpbnRlcm5hbFwiXG4gICAgICAgICAgICAgKiAgIGltcGxlbWVudGF0aW9ucyBkaXJlY3RseSBpbnN0ZWFkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBpID4gMCA/IGkgOiBcIlwiO1xuICAgICAgICAgICAgICAgIHRoaXNbYENPTlNVTUUke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbFJlY29yZChhcmcxLCBpLCBhcmcyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXNbYFNVQlJVTEUke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChhcmcxLCBpLCBhcmcyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXNbYE9QVElPTiR7aWR4fWBdID0gZnVuY3Rpb24gKGFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQoYXJnMSwgaSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzW2BPUiR7aWR4fWBdID0gZnVuY3Rpb24gKGFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JJbnRlcm5hbFJlY29yZChhcmcxLCBpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXNbYE1BTlkke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFueUludGVybmFsUmVjb3JkKGksIGFyZzEpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpc1tgTUFOWV9TRVAke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoaSwgYXJnMSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzW2BBVF9MRUFTVF9PTkUke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsUmVjb3JkKGksIGFyZzEpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpc1tgQVRfTEVBU1RfT05FX1NFUCR7aWR4fWBdID0gZnVuY3Rpb24gKGFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbFJlY29yZChpLCBhcmcxKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRFNMIG1ldGhvZHMgd2l0aCB0aGUgaWR4KHN1ZmZpeCkgYXMgYW4gYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXNbYGNvbnN1bWVgXSA9IGZ1bmN0aW9uIChpZHgsIGFyZzEsIGFyZzIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQoYXJnMSwgaWR4LCBhcmcyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BzdWJydWxlYF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKGFyZzEsIGlkeCwgYXJnMik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpc1tgb3B0aW9uYF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQoYXJnMSwgaWR4KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BvcmBdID0gZnVuY3Rpb24gKGlkeCwgYXJnMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQoYXJnMSwgaWR4KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BtYW55YF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoaWR4LCBhcmcxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BhdExlYXN0T25lYF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoaWR4LCBhcmcxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLkFDVElPTiA9IHRoaXMuQUNUSU9OX1JFQ09SRDtcbiAgICAgICAgICAgIHRoaXMuQkFDS1RSQUNLID0gdGhpcy5CQUNLVFJBQ0tfUkVDT1JEO1xuICAgICAgICAgICAgdGhpcy5MQSA9IHRoaXMuTEFfUkVDT1JEO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzYWJsZVJlY29yZGluZygpIHtcbiAgICAgICAgdGhpcy5SRUNPUkRJTkdfUEhBU0UgPSBmYWxzZTtcbiAgICAgICAgLy8gQnkgZGVsZXRpbmcgdGhlc2UgKippbnN0YW5jZSoqIHByb3BlcnRpZXMsIGFueSBmdXR1cmUgaW52b2NhdGlvblxuICAgICAgICAvLyB3aWxsIGJlIGRlZmVycmVkIHRvIHRoZSBvcmlnaW5hbCBtZXRob2RzIG9uIHRoZSAqKnByb3RvdHlwZSoqIG9iamVjdFxuICAgICAgICAvLyBUaGlzIHNlZW1zIHRvIGdldCByaWQgb2YgYW55IGluY29ycmVjdCBvcHRpbWl6YXRpb25zIHRoYXQgVjggbWF5XG4gICAgICAgIC8vIGRvIGR1cmluZyB0aGUgcmVjb3JkaW5nIHBoYXNlLlxuICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJEZWxldGluZyBSZWNvcmRpbmcgbWV0aG9kc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IGkgPiAwID8gaSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoYXRbYENPTlNVTUUke2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgU1VCUlVMRSR7aWR4fWBdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BPUFRJT04ke2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgT1Ike2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgTUFOWSR7aWR4fWBdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BNQU5ZX1NFUCR7aWR4fWBdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BBVF9MRUFTVF9PTkUke2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgQVRfTEVBU1RfT05FX1NFUCR7aWR4fWBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoYXRbYGNvbnN1bWVgXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BzdWJydWxlYF07XG4gICAgICAgICAgICBkZWxldGUgdGhhdFtgb3B0aW9uYF07XG4gICAgICAgICAgICBkZWxldGUgdGhhdFtgb3JgXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BtYW55YF07XG4gICAgICAgICAgICBkZWxldGUgdGhhdFtgYXRMZWFzdE9uZWBdO1xuICAgICAgICAgICAgZGVsZXRlIHRoYXQuQUNUSU9OO1xuICAgICAgICAgICAgZGVsZXRlIHRoYXQuQkFDS1RSQUNLO1xuICAgICAgICAgICAgZGVsZXRlIHRoYXQuTEE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyAgIFBhcnNlciBtZXRob2RzIGFyZSBjYWxsZWQgaW5zaWRlIGFuIEFDVElPTj9cbiAgICAvLyAgIE1heWJlIHRyeS9jYXRjaC9maW5hbGx5IG9uIEFDVElPTlMgd2hpbGUgZGlzYWJsaW5nIHRoZSByZWNvcmRlcnMgc3RhdGUgY2hhbmdlcz9cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIG5vb3AgcGxhY2UgaG9sZGVyXG4gICAgQUNUSU9OX1JFQ09SRChpbXBsKSB7XG4gICAgICAgIC8vIE5PLU9QIGR1cmluZyByZWNvcmRpbmdcbiAgICB9XG4gICAgLy8gRXhlY3V0aW5nIGJhY2t0cmFja2luZyBsb2dpYyB3aWxsIGJyZWFrIG91ciByZWNvcmRpbmcgbG9naWMgYXNzdW1wdGlvbnNcbiAgICBCQUNLVFJBQ0tfUkVDT1JEKGdyYW1tYXJSdWxlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgIH1cbiAgICAvLyBMQSBpcyBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEkgYW5kIG1heSBiZSB1c2VkIGZvciBjdXN0b20gbG9va2FoZWFkIGxvZ2ljXG4gICAgLy8gYnkgZW5kIHVzZXJzIHdobyBtYXkgZm9yZ2V0IHRvIHdyYXAgaXQgaW4gQUNUSU9OIG9yIGluc2lkZSBhIEdBVEVcbiAgICBMQV9SRUNPUkQoaG93TXVjaCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIHRoZSBSRUNPUkRfUEhBU0VfVE9LRU4gaGVyZSBiZWNhdXNlIHNvbWVvbmUgbWF5IGRlcGVuZFxuICAgICAgICAvLyBPbiBMQSByZXR1cm4gRU9GIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHNvIGFuIGluZmluaXRlIGxvb3AgbWF5IG9jY3VyLlxuICAgICAgICByZXR1cm4gRU5EX09GX0ZJTEU7XG4gICAgfVxuICAgIHRvcExldmVsUnVsZVJlY29yZChuYW1lLCBkZWYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RvcExldmVsUnVsZSA9IG5ldyBSdWxlKHsgZGVmaW5pdGlvbjogW10sIG5hbWU6IG5hbWUgfSk7XG4gICAgICAgICAgICBuZXdUb3BMZXZlbFJ1bGUubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG5ld1RvcExldmVsUnVsZSk7XG4gICAgICAgICAgICBkZWYuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RvcExldmVsUnVsZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRXJyb3IuS05PV05fUkVDT1JERVJfRVJST1IgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEVycm9yLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFcnJvci5tZXNzYWdlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuXFx0IFRoaXMgZXJyb3Igd2FzIHRocm93biBkdXJpbmcgdGhlIFwiZ3JhbW1hciByZWNvcmRpbmcgcGhhc2VcIiBGb3IgbW9yZSBpbmZvIHNlZTpcXG5cXHQnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChtdXRhYmlsaXR5RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IG5vdCBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgb3JpZ2luYWwgZXJyb3Igb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBwYXJzaW5nIERTTFxuICAgIG9wdGlvbkludGVybmFsUmVjb3JkKGFjdGlvbk9STWV0aG9kRGVmLCBvY2N1cnJlbmNlKSB7XG4gICAgICAgIHJldHVybiByZWNvcmRQcm9kLmNhbGwodGhpcywgT3B0aW9uLCBhY3Rpb25PUk1ldGhvZERlZiwgb2NjdXJyZW5jZSk7XG4gICAgfVxuICAgIGF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZWNvcmRQcm9kLmNhbGwodGhpcywgUmVwZXRpdGlvbk1hbmRhdG9yeSwgYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UpO1xuICAgIH1cbiAgICBhdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJlY29yZFByb2QuY2FsbCh0aGlzLCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgb3B0aW9ucywgb2NjdXJyZW5jZSwgSEFORExFX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIG1hbnlJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZWNvcmRQcm9kLmNhbGwodGhpcywgUmVwZXRpdGlvbiwgYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UpO1xuICAgIH1cbiAgICBtYW55U2VwRmlyc3RJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJlY29yZFByb2QuY2FsbCh0aGlzLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgb3B0aW9ucywgb2NjdXJyZW5jZSwgSEFORExFX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIG9ySW50ZXJuYWxSZWNvcmQoYWx0c09yT3B0cywgb2NjdXJyZW5jZSkge1xuICAgICAgICByZXR1cm4gcmVjb3JkT3JQcm9kLmNhbGwodGhpcywgYWx0c09yT3B0cywgb2NjdXJyZW5jZSk7XG4gICAgfVxuICAgIHN1YnJ1bGVJbnRlcm5hbFJlY29yZChydWxlVG9DYWxsLCBvY2N1cnJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydE1ldGhvZElkeElzVmFsaWQob2NjdXJyZW5jZSk7XG4gICAgICAgIGlmICghcnVsZVRvQ2FsbCB8fCBoYXMocnVsZVRvQ2FsbCwgXCJydWxlTmFtZVwiKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGA8U1VCUlVMRSR7Z2V0SWR4U3VmZml4KG9jY3VycmVuY2UpfT4gYXJndW1lbnQgaXMgaW52YWxpZGAgK1xuICAgICAgICAgICAgICAgIGAgZXhwZWN0aW5nIGEgUGFyc2VyIG1ldGhvZCByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkocnVsZVRvQ2FsbCl9PmAgK1xuICAgICAgICAgICAgICAgIGBcXG4gaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTtcbiAgICAgICAgICAgIGVycm9yLktOT1dOX1JFQ09SREVSX0VSUk9SID0gdHJ1ZTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZQcm9kID0gcGVlayh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayk7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZVRvQ2FsbC5ydWxlTmFtZTtcbiAgICAgICAgY29uc3QgbmV3Tm9uZVRlcm1pbmFsID0gbmV3IE5vblRlcm1pbmFsKHtcbiAgICAgICAgICAgIGlkeDogb2NjdXJyZW5jZSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTmFtZTogcnVsZU5hbWUsXG4gICAgICAgICAgICBsYWJlbDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLkxBQkVMLFxuICAgICAgICAgICAgLy8gVGhlIHJlc29sdmluZyBvZiB0aGUgYHJlZmVyZW5jZWRSdWxlYCBwcm9wZXJ0eSB3aWxsIGJlIGRvbmUgb25jZSBhbGwgdGhlIFJ1bGUncyBHQVNUcyBoYXZlIGJlZW4gY3JlYXRlZFxuICAgICAgICAgICAgcmVmZXJlbmNlZFJ1bGU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZQcm9kLmRlZmluaXRpb24ucHVzaChuZXdOb25lVGVybWluYWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXRDc3RcbiAgICAgICAgICAgID8gUkVDT1JESU5HX1BIQVNFX0NTVE5PREVcbiAgICAgICAgICAgIDogUkVDT1JESU5HX05VTExfT0JKRUNUO1xuICAgIH1cbiAgICBjb25zdW1lSW50ZXJuYWxSZWNvcmQodG9rVHlwZSwgb2NjdXJyZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBhc3NlcnRNZXRob2RJZHhJc1ZhbGlkKG9jY3VycmVuY2UpO1xuICAgICAgICBpZiAoIWhhc1Nob3J0S2V5UHJvcGVydHkodG9rVHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGA8Q09OU1VNRSR7Z2V0SWR4U3VmZml4KG9jY3VycmVuY2UpfT4gYXJndW1lbnQgaXMgaW52YWxpZGAgK1xuICAgICAgICAgICAgICAgIGAgZXhwZWN0aW5nIGEgVG9rZW5UeXBlIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeSh0b2tUeXBlKX0+YCArXG4gICAgICAgICAgICAgICAgYFxcbiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO1xuICAgICAgICAgICAgZXJyb3IuS05PV05fUkVDT1JERVJfRVJST1IgPSB0cnVlO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldlByb2QgPSBwZWVrKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKTtcbiAgICAgICAgY29uc3QgbmV3Tm9uZVRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKHtcbiAgICAgICAgICAgIGlkeDogb2NjdXJyZW5jZSxcbiAgICAgICAgICAgIHRlcm1pbmFsVHlwZTogdG9rVHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuTEFCRUwsXG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2UHJvZC5kZWZpbml0aW9uLnB1c2gobmV3Tm9uZVRlcm1pbmFsKTtcbiAgICAgICAgcmV0dXJuIFJFQ09SRElOR19QSEFTRV9UT0tFTjtcbiAgICB9XG59XG5mdW5jdGlvbiByZWNvcmRQcm9kKHByb2RDb25zdHJ1Y3RvciwgbWFpblByb2RBcmcsIG9jY3VycmVuY2UsIGhhbmRsZVNlcCA9IGZhbHNlKSB7XG4gICAgYXNzZXJ0TWV0aG9kSWR4SXNWYWxpZChvY2N1cnJlbmNlKTtcbiAgICBjb25zdCBwcmV2UHJvZCA9IHBlZWsodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spO1xuICAgIGNvbnN0IGdyYW1tYXJBY3Rpb24gPSBpc0Z1bmN0aW9uKG1haW5Qcm9kQXJnKSA/IG1haW5Qcm9kQXJnIDogbWFpblByb2RBcmcuREVGO1xuICAgIGNvbnN0IG5ld1Byb2QgPSBuZXcgcHJvZENvbnN0cnVjdG9yKHsgZGVmaW5pdGlvbjogW10sIGlkeDogb2NjdXJyZW5jZSB9KTtcbiAgICBpZiAoaGFuZGxlU2VwKSB7XG4gICAgICAgIG5ld1Byb2Quc2VwYXJhdG9yID0gbWFpblByb2RBcmcuU0VQO1xuICAgIH1cbiAgICBpZiAoaGFzKG1haW5Qcm9kQXJnLCBcIk1BWF9MT09LQUhFQURcIikpIHtcbiAgICAgICAgbmV3UHJvZC5tYXhMb29rYWhlYWQgPSBtYWluUHJvZEFyZy5NQVhfTE9PS0FIRUFEO1xuICAgIH1cbiAgICB0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG5ld1Byb2QpO1xuICAgIGdyYW1tYXJBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICBwcmV2UHJvZC5kZWZpbml0aW9uLnB1c2gobmV3UHJvZCk7XG4gICAgdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIFJFQ09SRElOR19OVUxMX09CSkVDVDtcbn1cbmZ1bmN0aW9uIHJlY29yZE9yUHJvZChtYWluUHJvZEFyZywgb2NjdXJyZW5jZSkge1xuICAgIGFzc2VydE1ldGhvZElkeElzVmFsaWQob2NjdXJyZW5jZSk7XG4gICAgY29uc3QgcHJldlByb2QgPSBwZWVrKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKTtcbiAgICAvLyBPbmx5IGFuIGFycmF5IG9mIGFsdGVybmF0aXZlc1xuICAgIGNvbnN0IGhhc09wdGlvbnMgPSBpc0FycmF5KG1haW5Qcm9kQXJnKSA9PT0gZmFsc2U7XG4gICAgY29uc3QgYWx0cyA9IGhhc09wdGlvbnMgPT09IGZhbHNlID8gbWFpblByb2RBcmcgOiBtYWluUHJvZEFyZy5ERUY7XG4gICAgY29uc3QgbmV3T3JQcm9kID0gbmV3IEFsdGVybmF0aW9uKHtcbiAgICAgICAgZGVmaW5pdGlvbjogW10sXG4gICAgICAgIGlkeDogb2NjdXJyZW5jZSxcbiAgICAgICAgaWdub3JlQW1iaWd1aXRpZXM6IGhhc09wdGlvbnMgJiYgbWFpblByb2RBcmcuSUdOT1JFX0FNQklHVUlUSUVTID09PSB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChoYXMobWFpblByb2RBcmcsIFwiTUFYX0xPT0tBSEVBRFwiKSkge1xuICAgICAgICBuZXdPclByb2QubWF4TG9va2FoZWFkID0gbWFpblByb2RBcmcuTUFYX0xPT0tBSEVBRDtcbiAgICB9XG4gICAgY29uc3QgaGFzUHJlZGljYXRlcyA9IHNvbWUoYWx0cywgKGN1cnJBbHQpID0+IGlzRnVuY3Rpb24oY3VyckFsdC5HQVRFKSk7XG4gICAgbmV3T3JQcm9kLmhhc1ByZWRpY2F0ZXMgPSBoYXNQcmVkaWNhdGVzO1xuICAgIHByZXZQcm9kLmRlZmluaXRpb24ucHVzaChuZXdPclByb2QpO1xuICAgIGZvckVhY2goYWx0cywgKGN1cnJBbHQpID0+IHtcbiAgICAgICAgY29uc3QgY3VyckFsdEZsYXQgPSBuZXcgQWx0ZXJuYXRpdmUoeyBkZWZpbml0aW9uOiBbXSB9KTtcbiAgICAgICAgbmV3T3JQcm9kLmRlZmluaXRpb24ucHVzaChjdXJyQWx0RmxhdCk7XG4gICAgICAgIGlmIChoYXMoY3VyckFsdCwgXCJJR05PUkVfQU1CSUdVSVRJRVNcIikpIHtcbiAgICAgICAgICAgIGN1cnJBbHRGbGF0Lmlnbm9yZUFtYmlndWl0aWVzID0gY3VyckFsdC5JR05PUkVfQU1CSUdVSVRJRVM7IC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgfVxuICAgICAgICAvLyAqKmltcGxpY2l0KiogaWdub3JlQW1iaWd1aXRpZXMgZHVlIHRvIHVzYWdlIG9mIGdhdGVcbiAgICAgICAgZWxzZSBpZiAoaGFzKGN1cnJBbHQsIFwiR0FURVwiKSkge1xuICAgICAgICAgICAgY3VyckFsdEZsYXQuaWdub3JlQW1iaWd1aXRpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnB1c2goY3VyckFsdEZsYXQpO1xuICAgICAgICBjdXJyQWx0LkFMVC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUkVDT1JESU5HX05VTExfT0JKRUNUO1xufVxuZnVuY3Rpb24gZ2V0SWR4U3VmZml4KGlkeCkge1xuICAgIHJldHVybiBpZHggPT09IDAgPyBcIlwiIDogYCR7aWR4fWA7XG59XG5mdW5jdGlvbiBhc3NlcnRNZXRob2RJZHhJc1ZhbGlkKGlkeCkge1xuICAgIGlmIChpZHggPCAwIHx8IGlkeCA+IE1BWF9NRVRIT0RfSURYKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAvLyBUaGUgc3RhY2sgdHJhY2Ugd2lsbCBjb250YWluIGFsbCB0aGUgbmVlZGVkIGRldGFpbHNcbiAgICAgICAgYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke2lkeH0+XFxuXFx0YCArXG4gICAgICAgICAgICBgSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke01BWF9NRVRIT0RfSURYICsgMX1gKTtcbiAgICAgICAgZXJyb3IuS05PV05fUkVDT1JERVJfRVJST1IgPSB0cnVlO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nYXN0X3JlY29yZGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaGFzIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IERFRkFVTFRfUEFSU0VSX0NPTkZJRyB9IGZyb20gXCIuLi9wYXJzZXIuanNcIjtcbi8qKlxuICogVHJhaXQgcmVzcG9uc2libGUgZm9yIHJ1bnRpbWUgcGFyc2luZyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJmb3JtYW5jZVRyYWNlciB7XG4gICAgaW5pdFBlcmZvcm1hbmNlVHJhY2VyKGNvbmZpZykge1xuICAgICAgICBpZiAoaGFzKGNvbmZpZywgXCJ0cmFjZUluaXRQZXJmXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyVHJhY2VJbml0UGVyZiA9IGNvbmZpZy50cmFjZUluaXRQZXJmO1xuICAgICAgICAgICAgY29uc3QgdHJhY2VJc051bWJlciA9IHR5cGVvZiB1c2VyVHJhY2VJbml0UGVyZiA9PT0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0TWF4SWRlbnQgPSB0cmFjZUlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyB1c2VyVHJhY2VJbml0UGVyZlxuICAgICAgICAgICAgICAgIDogSW5maW5pdHk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdFBlcmYgPSB0cmFjZUlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyB1c2VyVHJhY2VJbml0UGVyZiA+IDBcbiAgICAgICAgICAgICAgICA6IHVzZXJUcmFjZUluaXRQZXJmOyAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdE1heElkZW50ID0gMDtcbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0UGVyZiA9IERFRkFVTFRfUEFSU0VSX0NPTkZJRy50cmFjZUluaXRQZXJmO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2VJbml0SW5kZW50ID0gLTE7XG4gICAgfVxuICAgIFRSQUNFX0lOSVQocGhhc2VEZXNjLCBwaGFzZUltcGwpIHtcbiAgICAgICAgLy8gTm8gbmVlZCB0byBvcHRpbWl6ZSB0aGlzIHVzaW5nIE5PT1AgcGF0dGVybiBiZWNhdXNlXG4gICAgICAgIC8vIEl0IGlzIG5vdCBjYWxsZWQgaW4gYSBob3Qgc3BvdC4uLlxuICAgICAgICBpZiAodGhpcy50cmFjZUluaXRQZXJmID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdEluZGVudCsrO1xuICAgICAgICAgICAgY29uc3QgaW5kZW50ID0gbmV3IEFycmF5KHRoaXMudHJhY2VJbml0SW5kZW50ICsgMSkuam9pbihcIlxcdFwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlSW5pdEluZGVudCA8IHRoaXMudHJhY2VJbml0TWF4SWRlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpbmRlbnR9LS0+IDwke3BoYXNlRGVzY30+YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHRpbWUsIHZhbHVlIH0gPSB0aW1lcihwaGFzZUltcGwpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBEaWZmaWN1bHQgdG8gcmVwcm9kdWNlIHNwZWNpZmljIHBlcmZvcm1hbmNlIGJlaGF2aW9yICg+MTBtcykgaW4gdGVzdHMgKi9cbiAgICAgICAgICAgIGNvbnN0IHRyYWNlTWV0aG9kID0gdGltZSA+IDEwID8gY29uc29sZS53YXJuIDogY29uc29sZS5sb2c7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFjZUluaXRJbmRlbnQgPCB0aGlzLnRyYWNlSW5pdE1heElkZW50KSB7XG4gICAgICAgICAgICAgICAgdHJhY2VNZXRob2QoYCR7aW5kZW50fTwtLSA8JHtwaGFzZURlc2N9PiB0aW1lOiAke3RpbWV9bXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0SW5kZW50LS07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGhhc2VJbXBsKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmX3RyYWNlci5qcy5tYXAiLAogICAgImV4cG9ydCBmdW5jdGlvbiBhcHBseU1peGlucyhkZXJpdmVkQ3RvciwgYmFzZUN0b3JzKSB7XG4gICAgYmFzZUN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VQcm90byA9IGJhc2VDdG9yLnByb3RvdHlwZTtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZVByb3RvKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSBcImNvbnN0cnVjdG9yXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYXNlUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2VQcm90bywgcHJvcE5hbWUpO1xuICAgICAgICAgICAgLy8gSGFuZGxlIEFjY2Vzc29yc1xuICAgICAgICAgICAgaWYgKGJhc2VQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgIChiYXNlUHJvcERlc2NyaXB0b3IuZ2V0IHx8IGJhc2VQcm9wRGVzY3JpcHRvci5zZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlcml2ZWRDdG9yLnByb3RvdHlwZSwgcHJvcE5hbWUsIGJhc2VQcm9wRGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXJpdmVkQ3Rvci5wcm90b3R5cGVbcHJvcE5hbWVdID0gYmFzZUN0b3IucHJvdG90eXBlW3Byb3BOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBseV9taXhpbnMuanMubWFwIiwKICAgICJpbXBvcnQgeyBjbG9uZSwgZm9yRWFjaCwgaGFzLCBpc0VtcHR5LCBtYXAsIHZhbHVlcyB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IHRvRmFzdFByb3BlcnRpZXMgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGNvbXB1dGVBbGxQcm9kc0ZvbGxvd3MgfSBmcm9tIFwiLi4vZ3JhbW1hci9mb2xsb3cuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRva2VuSW5zdGFuY2UsIEVPRiB9IGZyb20gXCIuLi8uLi9zY2FuL3Rva2Vuc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlciwgZGVmYXVsdFBhcnNlckVycm9yUHJvdmlkZXIsIH0gZnJvbSBcIi4uL2Vycm9yc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVHcmFtbWFyLCB2YWxpZGF0ZUdyYW1tYXIsIH0gZnJvbSBcIi4uL2dyYW1tYXIvZ2FzdC9nYXN0X3Jlc29sdmVyX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgUmVjb3ZlcmFibGUgfSBmcm9tIFwiLi90cmFpdHMvcmVjb3ZlcmFibGUuanNcIjtcbmltcG9ydCB7IExvb2tzQWhlYWQgfSBmcm9tIFwiLi90cmFpdHMvbG9va3NhaGVhZC5qc1wiO1xuaW1wb3J0IHsgVHJlZUJ1aWxkZXIgfSBmcm9tIFwiLi90cmFpdHMvdHJlZV9idWlsZGVyLmpzXCI7XG5pbXBvcnQgeyBMZXhlckFkYXB0ZXIgfSBmcm9tIFwiLi90cmFpdHMvbGV4ZXJfYWRhcHRlci5qc1wiO1xuaW1wb3J0IHsgUmVjb2duaXplckFwaSB9IGZyb20gXCIuL3RyYWl0cy9yZWNvZ25pemVyX2FwaS5qc1wiO1xuaW1wb3J0IHsgUmVjb2duaXplckVuZ2luZSB9IGZyb20gXCIuL3RyYWl0cy9yZWNvZ25pemVyX2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyIH0gZnJvbSBcIi4vdHJhaXRzL2Vycm9yX2hhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbnRlbnRBc3Npc3QgfSBmcm9tIFwiLi90cmFpdHMvY29udGV4dF9hc3Npc3QuanNcIjtcbmltcG9ydCB7IEdhc3RSZWNvcmRlciB9IGZyb20gXCIuL3RyYWl0cy9nYXN0X3JlY29yZGVyLmpzXCI7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZVRyYWNlciB9IGZyb20gXCIuL3RyYWl0cy9wZXJmX3RyYWNlci5qc1wiO1xuaW1wb3J0IHsgYXBwbHlNaXhpbnMgfSBmcm9tIFwiLi91dGlscy9hcHBseV9taXhpbnMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlTG9va2FoZWFkIH0gZnJvbSBcIi4uL2dyYW1tYXIvY2hlY2tzLmpzXCI7XG5leHBvcnQgY29uc3QgRU5EX09GX0ZJTEUgPSBjcmVhdGVUb2tlbkluc3RhbmNlKEVPRiwgXCJcIiwgTmFOLCBOYU4sIE5hTiwgTmFOLCBOYU4sIE5hTik7XG5PYmplY3QuZnJlZXplKEVORF9PRl9GSUxFKTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBUlNFUl9DT05GSUcgPSBPYmplY3QuZnJlZXplKHtcbiAgICByZWNvdmVyeUVuYWJsZWQ6IGZhbHNlLFxuICAgIG1heExvb2thaGVhZDogMyxcbiAgICBkeW5hbWljVG9rZW5zRW5hYmxlZDogZmFsc2UsXG4gICAgb3V0cHV0Q3N0OiB0cnVlLFxuICAgIGVycm9yTWVzc2FnZVByb3ZpZGVyOiBkZWZhdWx0UGFyc2VyRXJyb3JQcm92aWRlcixcbiAgICBub2RlTG9jYXRpb25UcmFja2luZzogXCJub25lXCIsXG4gICAgdHJhY2VJbml0UGVyZjogZmFsc2UsXG4gICAgc2tpcFZhbGlkYXRpb25zOiBmYWxzZSxcbn0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUlVMRV9DT05GSUcgPSBPYmplY3QuZnJlZXplKHtcbiAgICByZWNvdmVyeVZhbHVlRnVuYzogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc3luY0VuYWJsZWQ6IHRydWUsXG59KTtcbmV4cG9ydCB2YXIgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZTtcbihmdW5jdGlvbiAoUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSkge1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIklOVkFMSURfUlVMRV9OQU1FXCJdID0gMF0gPSBcIklOVkFMSURfUlVMRV9OQU1FXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiRFVQTElDQVRFX1JVTEVfTkFNRVwiXSA9IDFdID0gXCJEVVBMSUNBVEVfUlVMRV9OQU1FXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiSU5WQUxJRF9SVUxFX09WRVJSSURFXCJdID0gMl0gPSBcIklOVkFMSURfUlVMRV9PVkVSUklERVwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIkRVUExJQ0FURV9QUk9EVUNUSU9OU1wiXSA9IDNdID0gXCJEVVBMSUNBVEVfUFJPRFVDVElPTlNcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJVTlJFU09MVkVEX1NVQlJVTEVfUkVGXCJdID0gNF0gPSBcIlVOUkVTT0xWRURfU1VCUlVMRV9SRUZcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJMRUZUX1JFQ1VSU0lPTlwiXSA9IDVdID0gXCJMRUZUX1JFQ1VSU0lPTlwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk5PTkVfTEFTVF9FTVBUWV9BTFRcIl0gPSA2XSA9IFwiTk9ORV9MQVNUX0VNUFRZX0FMVFwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIkFNQklHVU9VU19BTFRTXCJdID0gN10gPSBcIkFNQklHVU9VU19BTFRTXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiQ09ORkxJQ1RfVE9LRU5TX1JVTEVTX05BTUVTUEFDRVwiXSA9IDhdID0gXCJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiSU5WQUxJRF9UT0tFTl9OQU1FXCJdID0gOV0gPSBcIklOVkFMSURfVE9LRU5fTkFNRVwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk5PX05PTl9FTVBUWV9MT09LQUhFQURcIl0gPSAxMF0gPSBcIk5PX05PTl9FTVBUWV9MT09LQUhFQURcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJBTUJJR1VPVVNfUFJFRklYX0FMVFNcIl0gPSAxMV0gPSBcIkFNQklHVU9VU19QUkVGSVhfQUxUU1wiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIlRPT19NQU5ZX0FMVFNcIl0gPSAxMl0gPSBcIlRPT19NQU5ZX0FMVFNcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJDVVNUT01fTE9PS0FIRUFEX1ZBTElEQVRJT05cIl0gPSAxM10gPSBcIkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTlwiO1xufSkoUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSB8fCAoUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gRU1QVFlfQUxUKHZhbHVlID0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59XG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiAgQGRlcHJlY2F0ZWQgdXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkXG4gICAgICovXG4gICAgc3RhdGljIHBlcmZvcm1TZWxmQW5hbHlzaXMocGFyc2VySW5zdGFuY2UpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuXCIgK1xuICAgICAgICAgICAgXCJcXHRcXG5Vc2UgdGhlICoqaW5zdGFuY2UqKiBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwZXJmb3JtU2VsZkFuYWx5c2lzKCkge1xuICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJwZXJmb3JtU2VsZkFuYWx5c2lzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGxldCBkZWZFcnJvcnNNc2dzO1xuICAgICAgICAgICAgdGhpcy5zZWxmQW5hbHlzaXNEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lO1xuICAgICAgICAgICAgdGhpcy5UUkFDRV9JTklUKFwidG9GYXN0UHJvcHNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcyB2b29kb28gbWFnaWMgdGhlIHBhcnNlciB3b3VsZCBiZSB4My14NCBzbG93ZXJcbiAgICAgICAgICAgICAgICAvLyBJdCBzZWVtcyBpdCBpcyBiZXR0ZXIgdG8gaW52b2tlIGB0b0Zhc3RQcm9wZXJ0aWVzYCAqKmJlZm9yZSoqXG4gICAgICAgICAgICAgICAgLy8gQW55IG1hbmlwdWxhdGlvbnMgb2YgdGhlIGB0aGlzYCBvYmplY3QgZG9uZSBkdXJpbmcgdGhlIHJlY29yZGluZyBwaGFzZS5cbiAgICAgICAgICAgICAgICB0b0Zhc3RQcm9wZXJ0aWVzKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJHcmFtbWFyIFJlY29yZGluZ1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVSZWNvcmRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGRpbmcgdGhlIEdBU1RcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmRlZmluZWRSdWxlc05hbWVzLCAoY3VyclJ1bGVOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkUnVsZSA9IHRoaXNbY3VyclJ1bGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsR3JhbW1hckFjdGlvbiA9IHdyYXBwZWRSdWxlW1wib3JpZ2luYWxHcmFtbWFyQWN0aW9uXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlY29yZGVkUnVsZUdhc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7Y3VyclJ1bGVOYW1lfSBSdWxlYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkUnVsZUdhc3QgPSB0aGlzLnRvcExldmVsUnVsZVJlY29yZChjdXJyUnVsZU5hbWUsIG9yaWdpbmFsR3JhbW1hckFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbY3VyclJ1bGVOYW1lXSA9IHJlY29yZGVkUnVsZUdhc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlUmVjb3JkaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZXJFcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkdyYW1tYXIgUmVzb2x2aW5nXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlckVycm9ycyA9IHJlc29sdmVHcmFtbWFyKHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHZhbHVlcyh0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmluaXRpb25FcnJvcnMgPSB0aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KHJlc29sdmVyRXJyb3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5UUkFDRV9JTklUKFwiR3JhbW1hciBWYWxpZGF0aW9uc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gb25seSBwZXJmb3JtIGFkZGl0aW9uYWwgZ3JhbW1hciB2YWxpZGF0aW9ucyBJRkYgbm8gcmVzb2x2aW5nIGVycm9ycyBoYXZlIG9jY3VycmVkLlxuICAgICAgICAgICAgICAgIC8vIGFzIHVucmVzb2x2ZWQgZ3JhbW1hciBtYXkgbGVhZCB0byB1bmhhbmRsZWQgcnVudGltZSBleGNlcHRpb25zIGluIHRoZSBmb2xsb3cgdXAgdmFsaWRhdGlvbnMuXG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkocmVzb2x2ZXJFcnJvcnMpICYmIHRoaXMuc2tpcFZhbGlkYXRpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVHcmFtbWFyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzOiB2YWx1ZXModGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlblR5cGVzOiB2YWx1ZXModGhpcy50b2tlbnNNYXApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyTXNnUHJvdmlkZXI6IGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29rYWhlYWRWYWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVMb29rYWhlYWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkU3RyYXRlZ3k6IHRoaXMubG9va2FoZWFkU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlczogdmFsdWVzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5UeXBlczogdmFsdWVzKHRoaXMudG9rZW5zTWFwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaXRpb25FcnJvcnMgPSB0aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KHZhbGlkYXRpb25FcnJvcnMsIGxvb2thaGVhZFZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGhpcyBhbmFseXNpcyBtYXkgZmFpbCBpZiB0aGUgZ3JhbW1hciBpcyBub3QgcGVyZmVjdGx5IHZhbGlkXG4gICAgICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLmRlZmluaXRpb25FcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlc3VsdHMgb2YgdGhlc2UgY29tcHV0YXRpb25zIGFyZSBub3QgbmVlZGVkIHVubGVzcyBlcnJvciByZWNvdmVyeSBpcyBlbmFibGVkLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlY292ZXJ5RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJjb21wdXRlQWxsUHJvZHNGb2xsb3dzXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbEZvbGxvd3MgPSBjb21wdXRlQWxsUHJvZHNGb2xsb3dzKHZhbHVlcyh0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3luY0ZvbGxvd3MgPSBhbGxGb2xsb3dzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5UUkFDRV9JTklUKFwiQ29tcHV0ZUxvb2thaGVhZEZ1bmN0aW9uc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMubG9va2FoZWFkU3RyYXRlZ3kpLmluaXRpYWxpemUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlczogdmFsdWVzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zKHZhbHVlcyh0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIVBhcnNlci5ERUZFUl9ERUZJTklUSU9OX0VSUk9SU19IQU5ETElORyAmJlxuICAgICAgICAgICAgICAgICFpc0VtcHR5KHRoaXMuZGVmaW5pdGlvbkVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBkZWZFcnJvcnNNc2dzID0gbWFwKHRoaXMuZGVmaW5pdGlvbkVycm9ycywgKGRlZkVycm9yKSA9PiBkZWZFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnNlciBEZWZpbml0aW9uIEVycm9ycyBkZXRlY3RlZDpcXG4gJHtkZWZFcnJvcnNNc2dzLmpvaW4oXCJcXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uRXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuc2VsZkFuYWx5c2lzRG9uZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgdGhhdC5pbml0RXJyb3JIYW5kbGVyKGNvbmZpZyk7XG4gICAgICAgIHRoYXQuaW5pdExleGVyQWRhcHRlcigpO1xuICAgICAgICB0aGF0LmluaXRMb29rc0FoZWFkKGNvbmZpZyk7XG4gICAgICAgIHRoYXQuaW5pdFJlY29nbml6ZXJFbmdpbmUodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRSZWNvdmVyYWJsZShjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRUcmVlQnVpbGRlcihjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRDb250ZW50QXNzaXN0KCk7XG4gICAgICAgIHRoYXQuaW5pdEdhc3RSZWNvcmRlcihjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRQZXJmb3JtYW5jZVRyYWNlcihjb25maWcpO1xuICAgICAgICBpZiAoaGFzKGNvbmZpZywgXCJpZ25vcmVkSXNzdWVzXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgPGlnbm9yZWRJc3N1ZXM+IElQYXJzZXJDb25maWcgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC5cXG5cXHRcIiArXG4gICAgICAgICAgICAgICAgXCJQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuXFxuXFx0XCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNJR05PUklOR19BTUJJR1VJVElFU1xcblxcdFwiICtcbiAgICAgICAgICAgICAgICBcIkZvciBmdXJ0aGVyIGRldGFpbHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tpcFZhbGlkYXRpb25zID0gaGFzKGNvbmZpZywgXCJza2lwVmFsaWRhdGlvbnNcIilcbiAgICAgICAgICAgID8gY29uZmlnLnNraXBWYWxpZGF0aW9ucyAvLyBjYXN0aW5nIGFzc3VtZXMgdGhlIGVuZCB1c2VyIHBhc3NpbmcgdGhlIGNvcnJlY3QgdHlwZVxuICAgICAgICAgICAgOiBERUZBVUxUX1BBUlNFUl9DT05GSUcuc2tpcFZhbGlkYXRpb25zO1xuICAgIH1cbn1cbi8vIFNldCB0aGlzIGZsYWcgdG8gdHJ1ZSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgUGFyc2VyIHRvIHRocm93IGVycm9yIHdoZW4gcHJvYmxlbXMgaW4gaXQncyBkZWZpbml0aW9uIGFyZSBkZXRlY3RlZC5cbi8vIChub3JtYWxseSBkdXJpbmcgdGhlIHBhcnNlcidzIGNvbnN0cnVjdG9yKS5cbi8vIFRoaXMgaXMgYSBkZXNpZ24gdGltZSBmbGFnLCBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHJ1bnRpbWUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIHBhcnNlciwganVzdCBkZXNpZ24gdGltZSBlcnJvcnMsXG4vLyBmb3IgZXhhbXBsZTogZHVwbGljYXRlIHJ1bGUgbmFtZXMsIHJlZmVyZW5jaW5nIGFuIHVucmVzb2x2ZWQgc3VicnVsZSwgZWN0Li4uXG4vLyBUaGlzIGZsYWcgc2hvdWxkIG5vdCBiZSBlbmFibGVkIGR1cmluZyBub3JtYWwgdXNhZ2UsIGl0IGlzIHVzZWQgaW4gc3BlY2lhbCBzaXR1YXRpb25zLCBmb3IgZXhhbXBsZSB3aGVuXG4vLyBuZWVkaW5nIHRvIGRpc3BsYXkgdGhlIHBhcnNlciBkZWZpbml0aW9uIGVycm9ycyBpbiBzb21lIEdVSShvbmxpbmUgcGxheWdyb3VuZCkuXG5QYXJzZXIuREVGRVJfREVGSU5JVElPTl9FUlJPUlNfSEFORExJTkcgPSBmYWxzZTtcbmFwcGx5TWl4aW5zKFBhcnNlciwgW1xuICAgIFJlY292ZXJhYmxlLFxuICAgIExvb2tzQWhlYWQsXG4gICAgVHJlZUJ1aWxkZXIsXG4gICAgTGV4ZXJBZGFwdGVyLFxuICAgIFJlY29nbml6ZXJFbmdpbmUsXG4gICAgUmVjb2duaXplckFwaSxcbiAgICBFcnJvckhhbmRsZXIsXG4gICAgQ29udGVudEFzc2lzdCxcbiAgICBHYXN0UmVjb3JkZXIsXG4gICAgUGVyZm9ybWFuY2VUcmFjZXIsXG5dKTtcbmV4cG9ydCBjbGFzcyBDc3RQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuVm9jYWJ1bGFyeSwgY29uZmlnID0gREVGQVVMVF9QQVJTRVJfQ09ORklHKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0Nsb25lID0gY2xvbmUoY29uZmlnKTtcbiAgICAgICAgY29uZmlnQ2xvbmUub3V0cHV0Q3N0ID0gdHJ1ZTtcbiAgICAgICAgc3VwZXIodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWdDbG9uZSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEVtYmVkZGVkQWN0aW9uc1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWcgPSBERUZBVUxUX1BBUlNFUl9DT05GSUcpIHtcbiAgICAgICAgY29uc3QgY29uZmlnQ2xvbmUgPSBjbG9uZShjb25maWcpO1xuICAgICAgICBjb25maWdDbG9uZS5vdXRwdXRDc3QgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWdDbG9uZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2VyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgR0FzdFZpc2l0b3IsIE5vblRlcm1pbmFsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbmltcG9ydCB7IGFzc2lnbiwgZmxhdHRlbiwgZ3JvdXBCeSwgbWFwLCBzb21lLCB2YWx1ZXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNb2RlbChwcm9kdWN0aW9ucykge1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBDc3ROb2RlRGVmaW5pdGlvbkdlbmVyYXRvcigpO1xuICAgIGNvbnN0IGFsbFJ1bGVzID0gdmFsdWVzKHByb2R1Y3Rpb25zKTtcbiAgICByZXR1cm4gbWFwKGFsbFJ1bGVzLCAocnVsZSkgPT4gZ2VuZXJhdG9yLnZpc2l0UnVsZShydWxlKSk7XG59XG5jbGFzcyBDc3ROb2RlRGVmaW5pdGlvbkdlbmVyYXRvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICB2aXNpdFJ1bGUobm9kZSkge1xuICAgICAgICBjb25zdCByYXdFbGVtZW50cyA9IHRoaXMudmlzaXRFYWNoKG5vZGUuZGVmaW5pdGlvbik7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQgPSBncm91cEJ5KHJhd0VsZW1lbnRzLCAoZWwpID0+IGVsLnByb3BlcnR5TmFtZSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXAoZ3JvdXBlZCwgKGdyb3VwLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE51bGxhYmxlID0gIXNvbWUoZ3JvdXAsIChlbCkgPT4gIWVsLmNhbkJlTnVsbCk7XG4gICAgICAgICAgICAvLyBJbiBhbiBhbHRlcm5hdGlvbiB3aXRoIGEgbGFiZWwgYSBwcm9wZXJ0eSBuYW1lIGNhbiBoYXZlXG4gICAgICAgICAgICAvLyBtdWx0aXBsZSB0eXBlcy5cbiAgICAgICAgICAgIGxldCBwcm9wZXJ0eVR5cGUgPSBncm91cFswXS50eXBlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSBtYXAoZ3JvdXAsIChnKSA9PiBnLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogcHJvcGVydHlUeXBlLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBhbGxOdWxsYWJsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmlzaXRBbHRlcm5hdGl2ZShub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0RWFjaEFuZE92ZXJyaWRlV2l0aChub2RlLmRlZmluaXRpb24sIHsgY2FuQmVOdWxsOiB0cnVlIH0pO1xuICAgIH1cbiAgICB2aXNpdE9wdGlvbihub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0RWFjaEFuZE92ZXJyaWRlV2l0aChub2RlLmRlZmluaXRpb24sIHsgY2FuQmVOdWxsOiB0cnVlIH0pO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb24obm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEVhY2hBbmRPdmVycmlkZVdpdGgobm9kZS5kZWZpbml0aW9uLCB7IGNhbkJlTnVsbDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRFYWNoKG5vZGUuZGVmaW5pdGlvbik7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEVhY2gobm9kZS5kZWZpbml0aW9uKS5jb25jYXQoe1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBub2RlLnNlcGFyYXRvci5uYW1lLFxuICAgICAgICAgICAgY2FuQmVOdWxsOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZ2V0VHlwZShub2RlLnNlcGFyYXRvciksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRFYWNoQW5kT3ZlcnJpZGVXaXRoKG5vZGUuZGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgY2FuQmVOdWxsOiB0cnVlLFxuICAgICAgICB9KS5jb25jYXQoe1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBub2RlLnNlcGFyYXRvci5uYW1lLFxuICAgICAgICAgICAgY2FuQmVOdWxsOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZ2V0VHlwZShub2RlLnNlcGFyYXRvciksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdEFsdGVybmF0aW9uKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRFYWNoQW5kT3ZlcnJpZGVXaXRoKG5vZGUuZGVmaW5pdGlvbiwgeyBjYW5CZU51bGw6IHRydWUgfSk7XG4gICAgfVxuICAgIHZpc2l0VGVybWluYWwobm9kZSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogbm9kZS5sYWJlbCB8fCBub2RlLnRlcm1pbmFsVHlwZS5uYW1lLFxuICAgICAgICAgICAgICAgIGNhbkJlTnVsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0VHlwZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuICAgIHZpc2l0Tm9uVGVybWluYWwobm9kZSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogbm9kZS5sYWJlbCB8fCBub2RlLm5vblRlcm1pbmFsTmFtZSxcbiAgICAgICAgICAgICAgICBjYW5CZU51bGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGdldFR5cGUobm9kZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cbiAgICB2aXNpdEVhY2hBbmRPdmVycmlkZVdpdGgoZGVmaW5pdGlvbiwgb3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG1hcCh0aGlzLnZpc2l0RWFjaChkZWZpbml0aW9uKSwgKGRlZmluaXRpb24pID0+IGFzc2lnbih7fSwgZGVmaW5pdGlvbiwgb3ZlcnJpZGUpKTtcbiAgICB9XG4gICAgdmlzaXRFYWNoKGRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4obWFwKGRlZmluaXRpb24sIChkZWZpbml0aW9uKSA9PiB0aGlzLnZpc2l0KGRlZmluaXRpb24pKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0VHlwZShwcm9kdWN0aW9uKSB7XG4gICAgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJydWxlXCIsXG4gICAgICAgICAgICBuYW1lOiBwcm9kdWN0aW9uLnJlZmVyZW5jZWRSdWxlLm5hbWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IGtpbmQ6IFwidG9rZW5cIiB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kZWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBidWlsZE1vZGVsIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmltcG9ydCB7IGdlbkR0cyB9IGZyb20gXCIuL2dlbmVyYXRlLmpzXCI7XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBpbmNsdWRlVmlzaXRvckludGVyZmFjZTogdHJ1ZSxcbiAgICB2aXNpdG9ySW50ZXJmYWNlTmFtZTogXCJJQ3N0Tm9kZVZpc2l0b3JcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDc3REdHMocHJvZHVjdGlvbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlZmZlY3RpdmVPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGNvbnN0IG1vZGVsID0gYnVpbGRNb2RlbChwcm9kdWN0aW9ucyk7XG4gICAgcmV0dXJuIGdlbkR0cyhtb2RlbCwgZWZmZWN0aXZlT3B0aW9ucyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIiwKICAgICIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAtIHRyaWNreSB0byBpbXBvcnQgc29tZSB0aGluZ3MgZnJvbSB0aGlzIG1vZHVsZSBkdXJpbmcgdGVzdGluZyAqL1xuLy8gc2VtYW50aWMgdmVyc2lvblxuZXhwb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmV4cG9ydCB7IENzdFBhcnNlciwgRW1iZWRkZWRBY3Rpb25zUGFyc2VyLCBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLCBFTVBUWV9BTFQsIH0gZnJvbSBcIi4vcGFyc2UvcGFyc2VyL3BhcnNlci5qc1wiO1xuZXhwb3J0IHsgTGV4ZXIsIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZSB9IGZyb20gXCIuL3NjYW4vbGV4ZXJfcHVibGljLmpzXCI7XG4vLyBUb2tlbnMgdXRpbGl0aWVzXG5leHBvcnQgeyBjcmVhdGVUb2tlbiwgY3JlYXRlVG9rZW5JbnN0YW5jZSwgRU9GLCB0b2tlbkxhYmVsLCB0b2tlbk1hdGNoZXIsIHRva2VuTmFtZSwgfSBmcm9tIFwiLi9zY2FuL3Rva2Vuc19wdWJsaWMuanNcIjtcbi8vIExvb2thaGVhZFxuZXhwb3J0IHsgZ2V0TG9va2FoZWFkUGF0aHMgfSBmcm9tIFwiLi9wYXJzZS9ncmFtbWFyL2xvb2thaGVhZC5qc1wiO1xuZXhwb3J0IHsgTExrTG9va2FoZWFkU3RyYXRlZ3kgfSBmcm9tIFwiLi9wYXJzZS9ncmFtbWFyL2xsa19sb29rYWhlYWQuanNcIjtcbi8vIE90aGVyIFV0aWxpdGllc1xuZXhwb3J0IHsgZGVmYXVsdFBhcnNlckVycm9yUHJvdmlkZXIgfSBmcm9tIFwiLi9wYXJzZS9lcnJvcnNfcHVibGljLmpzXCI7XG5leHBvcnQgeyBFYXJseUV4aXRFeGNlcHRpb24sIGlzUmVjb2duaXRpb25FeGNlcHRpb24sIE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiwgTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24sIE5vVmlhYmxlQWx0RXhjZXB0aW9uLCB9IGZyb20gXCIuL3BhcnNlL2V4Y2VwdGlvbnNfcHVibGljLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0TGV4ZXJFcnJvclByb3ZpZGVyIH0gZnJvbSBcIi4vc2Nhbi9sZXhlcl9lcnJvcnNfcHVibGljLmpzXCI7XG4vLyBncmFtbWFyIHJlZmxlY3Rpb24gQVBJXG5leHBvcnQgeyBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgUnVsZSwgVGVybWluYWwsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbi8vIEdBU1QgVXRpbGl0aWVzXG5leHBvcnQgeyBzZXJpYWxpemVHcmFtbWFyLCBzZXJpYWxpemVQcm9kdWN0aW9uLCBHQXN0VmlzaXRvciwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IHsgZ2VuZXJhdGVDc3REdHMgfSBmcm9tIFwiQGNoZXZyb3RhaW4vY3N0LWR0cy1nZW5cIjtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDYWNoZSgpIHtcbiAgICBjb25zb2xlLndhcm4oXCJUaGUgY2xlYXJDYWNoZSBmdW5jdGlvbiB3YXMgJ3NvZnQnIHJlbW92ZWQgZnJvbSB0aGUgQ2hldnJvdGFpbiBBUEkuXCIgK1xuICAgICAgICBcIlxcblxcdCBJdCBwZXJmb3JtcyBubyBhY3Rpb24gb3RoZXIgdGhhbiBwcmludGluZyB0aGlzIG1lc3NhZ2UuXCIgK1xuICAgICAgICBcIlxcblxcdCBQbGVhc2UgYXZvaWQgdXNpbmcgaXQgYXMgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQgaW4gdGhlIGZ1dHVyZVwiKTtcbn1cbmV4cG9ydCB7IGNyZWF0ZVN5bnRheERpYWdyYW1zQ29kZSB9IGZyb20gXCIuL2RpYWdyYW1zL3JlbmRlcl9wdWJsaWMuanNcIjtcbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgUGFyc2VyIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBDc3RQYXJzZXIgb3IgRW1iZWRkZWRBY3Rpb25zUGFyc2VyIGluc3RlYWQuXFx0XFxuXCIgK1xuICAgICAgICAgICAgXCJTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI183LTAtMFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgbWFwIGZyb20gXCJsb2Rhc2gtZXMvbWFwLmpzXCI7XG5pbXBvcnQgZmlsdGVyIGZyb20gXCJsb2Rhc2gtZXMvZmlsdGVyLmpzXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGlvbiwgTm9uVGVybWluYWwsIE9wdGlvbiwgUmVwZXRpdGlvbk1hbmRhdG9yeSwgUmVwZXRpdGlvbiwgVGVybWluYWwsIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciB9IGZyb20gXCJjaGV2cm90YWluXCI7XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBVE5LZXkocnVsZSwgdHlwZSwgb2NjdXJyZW5jZSkge1xuICAgIHJldHVybiBgJHtydWxlLm5hbWV9XyR7dHlwZX1fJHtvY2N1cnJlbmNlfWA7XG59XG5leHBvcnQgY29uc3QgQVROX0lOVkFMSURfVFlQRSA9IDA7XG5leHBvcnQgY29uc3QgQVROX0JBU0lDID0gMTtcbmV4cG9ydCBjb25zdCBBVE5fUlVMRV9TVEFSVCA9IDI7XG5leHBvcnQgY29uc3QgQVROX1BMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuZXhwb3J0IGNvbnN0IEFUTl9TVEFSX0JMT0NLX1NUQVJUID0gNTtcbi8vIEN1cnJlbnRseSB1bnVzZWQgYXMgdGhlIEFUTiBpcyBub3QgdXNlZCBmb3IgbGV4aW5nXG5leHBvcnQgY29uc3QgQVROX1RPS0VOX1NUQVJUID0gNjtcbmV4cG9ydCBjb25zdCBBVE5fUlVMRV9TVE9QID0gNztcbmV4cG9ydCBjb25zdCBBVE5fQkxPQ0tfRU5EID0gODtcbmV4cG9ydCBjb25zdCBBVE5fU1RBUl9MT09QX0JBQ0sgPSA5O1xuZXhwb3J0IGNvbnN0IEFUTl9TVEFSX0xPT1BfRU5UUlkgPSAxMDtcbmV4cG9ydCBjb25zdCBBVE5fUExVU19MT09QX0JBQ0sgPSAxMTtcbmV4cG9ydCBjb25zdCBBVE5fTE9PUF9FTkQgPSAxMjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRyYW5zaXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB9XG4gICAgaXNFcHNpbG9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEF0b21UcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3RUcmFuc2l0aW9uIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIHRva2VuVHlwZSkge1xuICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICB0aGlzLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRXBzaWxvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdFRyYW5zaXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCkge1xuICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgIH1cbiAgICBpc0Vwc2lsb24oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSdWxlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0VHJhbnNpdGlvbiB7XG4gICAgY29uc3RydWN0b3IocnVsZVN0YXJ0LCBydWxlLCBmb2xsb3dTdGF0ZSkge1xuICAgICAgICBzdXBlcihydWxlU3RhcnQpO1xuICAgICAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICAgICAgICB0aGlzLmZvbGxvd1N0YXRlID0gZm9sbG93U3RhdGU7XG4gICAgfVxuICAgIGlzRXBzaWxvbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFUTihydWxlcykge1xuICAgIGNvbnN0IGF0biA9IHtcbiAgICAgICAgZGVjaXNpb25NYXA6IHt9LFxuICAgICAgICBkZWNpc2lvblN0YXRlczogW10sXG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGU6IG5ldyBNYXAoKSxcbiAgICAgICAgcnVsZVRvU3RvcFN0YXRlOiBuZXcgTWFwKCksXG4gICAgICAgIHN0YXRlczogW11cbiAgICB9O1xuICAgIGNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMoYXRuLCBydWxlcyk7XG4gICAgY29uc3QgcnVsZUxlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVMZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBydWxlID0gcnVsZXNbaV07XG4gICAgICAgIGNvbnN0IHJ1bGVCbG9jayA9IGJsb2NrKGF0biwgcnVsZSwgcnVsZSk7XG4gICAgICAgIGlmIChydWxlQmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRSdWxlSGFuZGxlKGF0biwgcnVsZSwgcnVsZUJsb2NrKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0bjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMoYXRuLCBydWxlcykge1xuICAgIGNvbnN0IHJ1bGVMZW5ndGggPSBydWxlcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydWxlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2ldO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB0eXBlOiBBVE5fUlVMRV9TVEFSVFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB0eXBlOiBBVE5fUlVMRV9TVE9QXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFydC5zdG9wID0gc3RvcDtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGUuc2V0KHJ1bGUsIHN0YXJ0KTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZS5zZXQocnVsZSwgc3RvcCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXRvbShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pIHtcbiAgICBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIFRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiB0b2tlblJlZihhdG4sIHJ1bGUsIHByb2R1Y3Rpb24udGVybWluYWxUeXBlLCBwcm9kdWN0aW9uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiBydWxlUmVmKGF0biwgcnVsZSwgcHJvZHVjdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBBbHRlcm5hdGlvbikge1xuICAgICAgICByZXR1cm4gYWx0ZXJuYXRpb24oYXRuLCBydWxlLCBwcm9kdWN0aW9uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uKGF0biwgcnVsZSwgcHJvZHVjdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBSZXBldGl0aW9uKSB7XG4gICAgICAgIHJldHVybiByZXBldGl0aW9uKGF0biwgcnVsZSwgcHJvZHVjdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBSZXBldGl0aW9uV2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gcmVwZXRpdGlvblNlcChhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICByZXR1cm4gcmVwZXRpdGlvbk1hbmRhdG9yeShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHJlcGV0aXRpb25NYW5kYXRvcnlTZXAoYXRuLCBydWxlLCBwcm9kdWN0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBibG9jayhhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcGV0aXRpb24oYXRuLCBydWxlLCByZXBldGl0aW9uKSB7XG4gICAgY29uc3Qgc3RhclN0YXRlID0gbmV3U3RhdGUoYXRuLCBydWxlLCByZXBldGl0aW9uLCB7XG4gICAgICAgIHR5cGU6IEFUTl9TVEFSX0JMT0NLX1NUQVJUXG4gICAgfSk7XG4gICAgZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXJTdGF0ZSk7XG4gICAgY29uc3QgaGFuZGxlID0gbWFrZUFsdHMoYXRuLCBydWxlLCBzdGFyU3RhdGUsIHJlcGV0aXRpb24sIGJsb2NrKGF0biwgcnVsZSwgcmVwZXRpdGlvbikpO1xuICAgIHJldHVybiBzdGFyKGF0biwgcnVsZSwgcmVwZXRpdGlvbiwgaGFuZGxlKTtcbn1cbmZ1bmN0aW9uIHJlcGV0aXRpb25TZXAoYXRuLCBydWxlLCByZXBldGl0aW9uKSB7XG4gICAgY29uc3Qgc3RhclN0YXRlID0gbmV3U3RhdGUoYXRuLCBydWxlLCByZXBldGl0aW9uLCB7XG4gICAgICAgIHR5cGU6IEFUTl9TVEFSX0JMT0NLX1NUQVJUXG4gICAgfSk7XG4gICAgZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXJTdGF0ZSk7XG4gICAgY29uc3QgaGFuZGxlID0gbWFrZUFsdHMoYXRuLCBydWxlLCBzdGFyU3RhdGUsIHJlcGV0aXRpb24sIGJsb2NrKGF0biwgcnVsZSwgcmVwZXRpdGlvbikpO1xuICAgIGNvbnN0IHNlcCA9IHRva2VuUmVmKGF0biwgcnVsZSwgcmVwZXRpdGlvbi5zZXBhcmF0b3IsIHJlcGV0aXRpb24pO1xuICAgIHJldHVybiBzdGFyKGF0biwgcnVsZSwgcmVwZXRpdGlvbiwgaGFuZGxlLCBzZXApO1xufVxuZnVuY3Rpb24gcmVwZXRpdGlvbk1hbmRhdG9yeShhdG4sIHJ1bGUsIHJlcGV0aXRpb24pIHtcbiAgICBjb25zdCBwbHVzU3RhdGUgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHJlcGV0aXRpb24sIHtcbiAgICAgICAgdHlwZTogQVROX1BMVVNfQkxPQ0tfU1RBUlRcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgcGx1c1N0YXRlKTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHBsdXNTdGF0ZSwgcmVwZXRpdGlvbiwgYmxvY2soYXRuLCBydWxlLCByZXBldGl0aW9uKSk7XG4gICAgcmV0dXJuIHBsdXMoYXRuLCBydWxlLCByZXBldGl0aW9uLCBoYW5kbGUpO1xufVxuZnVuY3Rpb24gcmVwZXRpdGlvbk1hbmRhdG9yeVNlcChhdG4sIHJ1bGUsIHJlcGV0aXRpb24pIHtcbiAgICBjb25zdCBwbHVzU3RhdGUgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHJlcGV0aXRpb24sIHtcbiAgICAgICAgdHlwZTogQVROX1BMVVNfQkxPQ0tfU1RBUlRcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgcGx1c1N0YXRlKTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHBsdXNTdGF0ZSwgcmVwZXRpdGlvbiwgYmxvY2soYXRuLCBydWxlLCByZXBldGl0aW9uKSk7XG4gICAgY29uc3Qgc2VwID0gdG9rZW5SZWYoYXRuLCBydWxlLCByZXBldGl0aW9uLnNlcGFyYXRvciwgcmVwZXRpdGlvbik7XG4gICAgcmV0dXJuIHBsdXMoYXRuLCBydWxlLCByZXBldGl0aW9uLCBoYW5kbGUsIHNlcCk7XG59XG5mdW5jdGlvbiBhbHRlcm5hdGlvbihhdG4sIHJ1bGUsIGFsdGVybmF0aW9uKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIGFsdGVybmF0aW9uLCB7XG4gICAgICAgIHR5cGU6IEFUTl9CQVNJQ1xuICAgIH0pO1xuICAgIGRlZmluZURlY2lzaW9uU3RhdGUoYXRuLCBzdGFydCk7XG4gICAgY29uc3QgYWx0cyA9IG1hcChhbHRlcm5hdGlvbi5kZWZpbml0aW9uLCAoZSkgPT4gYXRvbShhdG4sIHJ1bGUsIGUpKTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHN0YXJ0LCBhbHRlcm5hdGlvbiwgLi4uYWx0cyk7XG4gICAgcmV0dXJuIGhhbmRsZTtcbn1cbmZ1bmN0aW9uIG9wdGlvbihhdG4sIHJ1bGUsIG9wdGlvbikge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3U3RhdGUoYXRuLCBydWxlLCBvcHRpb24sIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXJ0KTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHN0YXJ0LCBvcHRpb24sIGJsb2NrKGF0biwgcnVsZSwgb3B0aW9uKSk7XG4gICAgcmV0dXJuIG9wdGlvbmFsKGF0biwgcnVsZSwgb3B0aW9uLCBoYW5kbGUpO1xufVxuZnVuY3Rpb24gYmxvY2soYXRuLCBydWxlLCBibG9jaykge1xuICAgIGNvbnN0IGhhbmRsZXMgPSBmaWx0ZXIobWFwKGJsb2NrLmRlZmluaXRpb24sIChlKSA9PiBhdG9tKGF0biwgcnVsZSwgZSkpLCAoZSkgPT4gZSAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoaGFuZGxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXNbMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhbmRsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbWFrZUJsb2NrKGF0biwgaGFuZGxlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGx1cyhhdG4sIHJ1bGUsIHBsdXMsIGhhbmRsZSwgc2VwKSB7XG4gICAgY29uc3QgYmxrU3RhcnQgPSBoYW5kbGUubGVmdDtcbiAgICBjb25zdCBibGtFbmQgPSBoYW5kbGUucmlnaHQ7XG4gICAgY29uc3QgbG9vcCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgcGx1cywge1xuICAgICAgICB0eXBlOiBBVE5fUExVU19MT09QX0JBQ0tcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgbG9vcCk7XG4gICAgY29uc3QgZW5kID0gbmV3U3RhdGUoYXRuLCBydWxlLCBwbHVzLCB7XG4gICAgICAgIHR5cGU6IEFUTl9MT09QX0VORFxuICAgIH0pO1xuICAgIGJsa1N0YXJ0Lmxvb3BiYWNrID0gbG9vcDtcbiAgICBlbmQubG9vcGJhY2sgPSBsb29wO1xuICAgIGF0bi5kZWNpc2lvbk1hcFtidWlsZEFUTktleShydWxlLCBzZXAgPyAnUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3InIDogJ1JlcGV0aXRpb25NYW5kYXRvcnknLCBwbHVzLmlkeCldID0gbG9vcDtcbiAgICBlcHNpbG9uKGJsa0VuZCwgbG9vcCk7IC8vIGJsb2NrIGNhbiBzZWUgbG9vcCBiYWNrXG4gICAgLy8gRGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgaGF2ZSBhIHNlcGFyYXRvciB3ZSBwdXQgdGhlIGV4aXQgdHJhbnNpdGlvbiBhdCBpbmRleCAxIG9yIDBcbiAgICAvLyBUaGlzIGluZmx1ZW5jZXMgdGhlIGNob3NlbiBvcHRpb24gaW4gdGhlIGxvb2thaGVhZCBERkFcbiAgICBpZiAoc2VwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXBzaWxvbihsb29wLCBibGtTdGFydCk7IC8vIGxvb3AgYmFjayB0byBzdGFydFxuICAgICAgICBlcHNpbG9uKGxvb3AsIGVuZCk7IC8vIGV4aXRcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVwc2lsb24obG9vcCwgZW5kKTsgLy8gZXhpdFxuICAgICAgICAvLyBsb29wIGJhY2sgdG8gc3RhcnQgd2l0aCBzZXBhcmF0b3JcbiAgICAgICAgZXBzaWxvbihsb29wLCBzZXAubGVmdCk7XG4gICAgICAgIGVwc2lsb24oc2VwLnJpZ2h0LCBibGtTdGFydCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGJsa1N0YXJ0LFxuICAgICAgICByaWdodDogZW5kXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0YXIoYXRuLCBydWxlLCBzdGFyLCBoYW5kbGUsIHNlcCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gaGFuZGxlLmxlZnQ7XG4gICAgY29uc3QgZW5kID0gaGFuZGxlLnJpZ2h0O1xuICAgIGNvbnN0IGVudHJ5ID0gbmV3U3RhdGUoYXRuLCBydWxlLCBzdGFyLCB7XG4gICAgICAgIHR5cGU6IEFUTl9TVEFSX0xPT1BfRU5UUllcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgZW50cnkpO1xuICAgIGNvbnN0IGxvb3BFbmQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHN0YXIsIHtcbiAgICAgICAgdHlwZTogQVROX0xPT1BfRU5EXG4gICAgfSk7XG4gICAgY29uc3QgbG9vcCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgc3Rhciwge1xuICAgICAgICB0eXBlOiBBVE5fU1RBUl9MT09QX0JBQ0tcbiAgICB9KTtcbiAgICBlbnRyeS5sb29wYmFjayA9IGxvb3A7XG4gICAgbG9vcEVuZC5sb29wYmFjayA9IGxvb3A7XG4gICAgZXBzaWxvbihlbnRyeSwgc3RhcnQpOyAvLyBsb29wIGVudGVyIGVkZ2UgKGFsdCAyKVxuICAgIGVwc2lsb24oZW50cnksIGxvb3BFbmQpOyAvLyBieXBhc3MgbG9vcCBlZGdlIChhbHQgMSlcbiAgICBlcHNpbG9uKGVuZCwgbG9vcCk7IC8vIGJsb2NrIGVuZCBoaXRzIGxvb3AgYmFja1xuICAgIGlmIChzZXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcHNpbG9uKGxvb3AsIGxvb3BFbmQpOyAvLyBlbmQgbG9vcFxuICAgICAgICAvLyBsb29wIGJhY2sgdG8gc3RhcnQgb2YgaGFuZGxlIHVzaW5nIHNlcGFyYXRvclxuICAgICAgICBlcHNpbG9uKGxvb3AsIHNlcC5sZWZ0KTtcbiAgICAgICAgZXBzaWxvbihzZXAucmlnaHQsIHN0YXJ0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVwc2lsb24obG9vcCwgZW50cnkpOyAvLyBsb29wIGJhY2sgdG8gZW50cnkvZXhpdCBkZWNpc2lvblxuICAgIH1cbiAgICBhdG4uZGVjaXNpb25NYXBbYnVpbGRBVE5LZXkocnVsZSwgc2VwID8gJ1JlcGV0aXRpb25XaXRoU2VwYXJhdG9yJyA6ICdSZXBldGl0aW9uJywgc3Rhci5pZHgpXSA9IGVudHJ5O1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGVudHJ5LFxuICAgICAgICByaWdodDogbG9vcEVuZFxuICAgIH07XG59XG5mdW5jdGlvbiBvcHRpb25hbChhdG4sIHJ1bGUsIG9wdGlvbmFsLCBoYW5kbGUpIHtcbiAgICBjb25zdCBzdGFydCA9IGhhbmRsZS5sZWZ0O1xuICAgIGNvbnN0IGVuZCA9IGhhbmRsZS5yaWdodDtcbiAgICBlcHNpbG9uKHN0YXJ0LCBlbmQpO1xuICAgIGF0bi5kZWNpc2lvbk1hcFtidWlsZEFUTktleShydWxlLCAnT3B0aW9uJywgb3B0aW9uYWwuaWR4KV0gPSBzdGFydDtcbiAgICByZXR1cm4gaGFuZGxlO1xufVxuZnVuY3Rpb24gZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXRlKSB7XG4gICAgYXRuLmRlY2lzaW9uU3RhdGVzLnB1c2goc3RhdGUpO1xuICAgIHN0YXRlLmRlY2lzaW9uID0gYXRuLmRlY2lzaW9uU3RhdGVzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIHN0YXRlLmRlY2lzaW9uO1xufVxuZnVuY3Rpb24gbWFrZUFsdHMoYXRuLCBydWxlLCBzdGFydCwgcHJvZHVjdGlvbiwgLi4uYWx0cykge1xuICAgIGNvbnN0IGVuZCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgcHJvZHVjdGlvbiwge1xuICAgICAgICB0eXBlOiBBVE5fQkxPQ0tfRU5ELFxuICAgICAgICBzdGFydFxuICAgIH0pO1xuICAgIHN0YXJ0LmVuZCA9IGVuZDtcbiAgICBmb3IgKGNvbnN0IGFsdCBvZiBhbHRzKSB7XG4gICAgICAgIGlmIChhbHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gaG9vayBhbHRzIHVwIHRvIGRlY2lzaW9uIGJsb2NrXG4gICAgICAgICAgICBlcHNpbG9uKHN0YXJ0LCBhbHQubGVmdCk7XG4gICAgICAgICAgICBlcHNpbG9uKGFsdC5yaWdodCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVwc2lsb24oc3RhcnQsIGVuZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaGFuZGxlID0ge1xuICAgICAgICBsZWZ0OiBzdGFydCxcbiAgICAgICAgcmlnaHQ6IGVuZFxuICAgIH07XG4gICAgYXRuLmRlY2lzaW9uTWFwW2J1aWxkQVROS2V5KHJ1bGUsIGdldFByb2RUeXBlKHByb2R1Y3Rpb24pLCBwcm9kdWN0aW9uLmlkeCldID0gc3RhcnQ7XG4gICAgcmV0dXJuIGhhbmRsZTtcbn1cbmZ1bmN0aW9uIGdldFByb2RUeXBlKHByb2R1Y3Rpb24pIHtcbiAgICBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIHJldHVybiAnQWx0ZXJuYXRpb24nO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAnT3B0aW9uJztcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIFJlcGV0aXRpb24pIHtcbiAgICAgICAgcmV0dXJuICdSZXBldGl0aW9uJztcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnUmVwZXRpdGlvbldpdGhTZXBhcmF0b3InO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICByZXR1cm4gJ1JlcGV0aXRpb25NYW5kYXRvcnknO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcic7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZUJsb2NrKGF0biwgYWx0cykge1xuICAgIGNvbnN0IGFsdHNMZW5ndGggPSBhbHRzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsdHNMZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgaGFuZGxlID0gYWx0c1tpXTtcbiAgICAgICAgbGV0IHRyYW5zaXRpb247XG4gICAgICAgIGlmIChoYW5kbGUubGVmdC50cmFuc2l0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb24gPSBoYW5kbGUubGVmdC50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1J1bGVUcmFuc2l0aW9uID0gdHJhbnNpdGlvbiBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uO1xuICAgICAgICBjb25zdCBydWxlVHJhbnNpdGlvbiA9IHRyYW5zaXRpb247XG4gICAgICAgIGNvbnN0IG5leHQgPSBhbHRzW2kgKyAxXS5sZWZ0O1xuICAgICAgICBpZiAoaGFuZGxlLmxlZnQudHlwZSA9PT0gQVROX0JBU0lDICYmXG4gICAgICAgICAgICBoYW5kbGUucmlnaHQudHlwZSA9PT0gQVROX0JBU0lDICYmXG4gICAgICAgICAgICB0cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgoaXNSdWxlVHJhbnNpdGlvbiAmJiBydWxlVHJhbnNpdGlvbi5mb2xsb3dTdGF0ZSA9PT0gaGFuZGxlLnJpZ2h0KSB8fFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID09PSBoYW5kbGUucmlnaHQpKSB7XG4gICAgICAgICAgICAvLyB3ZSBjYW4gYXZvaWQgZXBzaWxvbiBlZGdlIHRvIG5leHQgZWxlbWVudFxuICAgICAgICAgICAgaWYgKGlzUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBydWxlVHJhbnNpdGlvbi5mb2xsb3dTdGF0ZSA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnRhcmdldCA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVTdGF0ZShhdG4sIGhhbmRsZS5yaWdodCk7IC8vIHdlIHNraXBwZWQgb3ZlciB0aGlzIHN0YXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBuZWVkIGVwc2lsb24gaWYgcHJldmlvdXMgYmxvY2sncyByaWdodCBlbmQgbm9kZSBpcyBjb21wbGV4XG4gICAgICAgICAgICBlcHNpbG9uKGhhbmRsZS5yaWdodCwgbmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBhbHRzWzBdO1xuICAgIGNvbnN0IGxhc3QgPSBhbHRzW2FsdHNMZW5ndGggLSAxXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBmaXJzdC5sZWZ0LFxuICAgICAgICByaWdodDogbGFzdC5yaWdodFxuICAgIH07XG59XG5mdW5jdGlvbiB0b2tlblJlZihhdG4sIHJ1bGUsIHRva2VuVHlwZSwgcHJvZHVjdGlvbikge1xuICAgIGNvbnN0IGxlZnQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24sIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgY29uc3QgcmlnaHQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24sIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgYWRkVHJhbnNpdGlvbihsZWZ0LCBuZXcgQXRvbVRyYW5zaXRpb24ocmlnaHQsIHRva2VuVHlwZSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJ1bGVSZWYoYXRuLCBjdXJyZW50UnVsZSwgbm9uVGVybWluYWwpIHtcbiAgICBjb25zdCBydWxlID0gbm9uVGVybWluYWwucmVmZXJlbmNlZFJ1bGU7XG4gICAgY29uc3Qgc3RhcnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5nZXQocnVsZSk7XG4gICAgY29uc3QgbGVmdCA9IG5ld1N0YXRlKGF0biwgY3VycmVudFJ1bGUsIG5vblRlcm1pbmFsLCB7XG4gICAgICAgIHR5cGU6IEFUTl9CQVNJQ1xuICAgIH0pO1xuICAgIGNvbnN0IHJpZ2h0ID0gbmV3U3RhdGUoYXRuLCBjdXJyZW50UnVsZSwgbm9uVGVybWluYWwsIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgY29uc3QgY2FsbCA9IG5ldyBSdWxlVHJhbnNpdGlvbihzdGFydCwgcnVsZSwgcmlnaHQpO1xuICAgIGFkZFRyYW5zaXRpb24obGVmdCwgY2FsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHRcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRSdWxlSGFuZGxlKGF0biwgcnVsZSwgYmxvY2spIHtcbiAgICBjb25zdCBzdGFydCA9IGF0bi5ydWxlVG9TdGFydFN0YXRlLmdldChydWxlKTtcbiAgICBlcHNpbG9uKHN0YXJ0LCBibG9jay5sZWZ0KTtcbiAgICBjb25zdCBzdG9wID0gYXRuLnJ1bGVUb1N0b3BTdGF0ZS5nZXQocnVsZSk7XG4gICAgZXBzaWxvbihibG9jay5yaWdodCwgc3RvcCk7XG4gICAgY29uc3QgaGFuZGxlID0ge1xuICAgICAgICBsZWZ0OiBzdGFydCxcbiAgICAgICAgcmlnaHQ6IHN0b3BcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGU7XG59XG5mdW5jdGlvbiBlcHNpbG9uKGEsIGIpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uID0gbmV3IEVwc2lsb25UcmFuc2l0aW9uKGIpO1xuICAgIGFkZFRyYW5zaXRpb24oYSwgdHJhbnNpdGlvbik7XG59XG5mdW5jdGlvbiBuZXdTdGF0ZShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24sIHBhcnRpYWwpIHtcbiAgICBjb25zdCB0ID0gT2JqZWN0LmFzc2lnbih7IGF0bixcbiAgICAgICAgcHJvZHVjdGlvbiwgZXBzaWxvbk9ubHlUcmFuc2l0aW9uczogZmFsc2UsIHJ1bGUsIHRyYW5zaXRpb25zOiBbXSwgbmV4dFRva2VuV2l0aGluUnVsZTogW10sIHN0YXRlTnVtYmVyOiBhdG4uc3RhdGVzLmxlbmd0aCB9LCBwYXJ0aWFsKTtcbiAgICBhdG4uc3RhdGVzLnB1c2godCk7XG4gICAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uKHN0YXRlLCB0cmFuc2l0aW9uKSB7XG4gICAgLy8gQSBzaW5nbGUgQVROIHN0YXRlIGNhbiBvbmx5IGNvbnRhaW4gZXBzaWxvbiB0cmFuc2l0aW9ucyBvciBub24tZXBzaWxvbiB0cmFuc2l0aW9uc1xuICAgIC8vIEJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgbWl4ZWQsIG9ubHkgc2V0dGluZyB0aGUgcHJvcGVydHkgZm9yIHRoZSBmaXJzdCB0cmFuc2l0aW9uIGlzIGZpbmVcbiAgICBpZiAoc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9uLmlzRXBzaWxvbigpO1xuICAgIH1cbiAgICBzdGF0ZS50cmFuc2l0aW9ucy5wdXNoKHRyYW5zaXRpb24pO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3RhdGUoYXRuLCBzdGF0ZSkge1xuICAgIGF0bi5zdGF0ZXMuc3BsaWNlKGF0bi5zdGF0ZXMuaW5kZXhPZihzdGF0ZSksIDEpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXRuLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IG1hcCBmcm9tIFwibG9kYXNoLWVzL21hcC5qc1wiO1xuZXhwb3J0IGNvbnN0IERGQV9FUlJPUiA9IHt9O1xuZXhwb3J0IGNsYXNzIEFUTkNvbmZpZ1NldCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWFwID0ge307XG4gICAgICAgIHRoaXMuY29uZmlncyA9IFtdO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlncy5sZW5ndGg7XG4gICAgfVxuICAgIGZpbmFsaXplKCkge1xuICAgICAgICAvLyBFbXB0aWVzIHRoZSBtYXAgdG8gZnJlZSB1cCBtZW1vcnlcbiAgICAgICAgdGhpcy5tYXAgPSB7fTtcbiAgICB9XG4gICAgYWRkKGNvbmZpZykge1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRBVE5Db25maWdLZXkoY29uZmlnKTtcbiAgICAgICAgLy8gT25seSBhZGQgY29uZmlncyB3aGljaCBkb24ndCBleGlzdCBpbiBvdXIgbWFwIGFscmVhZHlcbiAgICAgICAgLy8gV2hpbGUgdGhpcyBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGFjdHVhbCBhbGdvcml0aG0sIGFkZGluZyB0aGVtIGFueXdheSB3b3VsZCBtYXNzaXZlbHkgaW5jcmVhc2UgbWVtb3J5IGNvbnN1bXB0aW9uXG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzLm1hcCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFwW2tleV0gPSB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5jb25maWdzLnB1c2goY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3M7XG4gICAgfVxuICAgIGdldCBhbHRzKCkge1xuICAgICAgICByZXR1cm4gbWFwKHRoaXMuY29uZmlncywgKGUpID0+IGUuYWx0KTtcbiAgICB9XG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIHRoaXMubWFwKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBrICsgXCI6XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBVE5Db25maWdLZXkoY29uZmlnLCBhbHQgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGAke2FsdCA/IGBhJHtjb25maWcuYWx0fWAgOiBcIlwifXMke2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcn06JHtjb25maWcuc3RhY2subWFwKChlKSA9PiBlLnN0YXRlTnVtYmVyLnRvU3RyaW5nKCkpLmpvaW4oXCJfXCIpfWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZmEuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyB0b2tlbk1hdGNoZXIsIHRva2VuTGFiZWwsIE5vblRlcm1pbmFsLCBBbHRlcm5hdGlvbiwgT3B0aW9uLCBSZXBldGl0aW9uTWFuZGF0b3J5LCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIFJlcGV0aXRpb24sIFRlcm1pbmFsLCBMTGtMb29rYWhlYWRTdHJhdGVneSwgZ2V0TG9va2FoZWFkUGF0aHMgfSBmcm9tIFwiY2hldnJvdGFpblwiO1xuaW1wb3J0IHsgQVROX1JVTEVfU1RPUCwgQXRvbVRyYW5zaXRpb24sIGJ1aWxkQVROS2V5LCBjcmVhdGVBVE4sIEVwc2lsb25UcmFuc2l0aW9uLCBSdWxlVHJhbnNpdGlvbiB9IGZyb20gXCIuL2F0bi5qc1wiO1xuaW1wb3J0IHsgQVROQ29uZmlnU2V0LCBERkFfRVJST1IsIGdldEFUTkNvbmZpZ0tleSB9IGZyb20gXCIuL2RmYS5qc1wiO1xuaW1wb3J0IG1pbiBmcm9tIFwibG9kYXNoLWVzL21pbi5qc1wiO1xuaW1wb3J0IGZsYXRNYXAgZnJvbSBcImxvZGFzaC1lcy9mbGF0TWFwLmpzXCI7XG5pbXBvcnQgdW5pcUJ5IGZyb20gXCJsb2Rhc2gtZXMvdW5pcUJ5LmpzXCI7XG5pbXBvcnQgbWFwIGZyb20gXCJsb2Rhc2gtZXMvbWFwLmpzXCI7XG5pbXBvcnQgZmxhdHRlbiBmcm9tIFwibG9kYXNoLWVzL2ZsYXR0ZW4uanNcIjtcbmltcG9ydCBmb3JFYWNoIGZyb20gXCJsb2Rhc2gtZXMvZm9yRWFjaC5qc1wiO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5pbXBvcnQgcmVkdWNlIGZyb20gXCJsb2Rhc2gtZXMvcmVkdWNlLmpzXCI7XG5mdW5jdGlvbiBjcmVhdGVERkFDYWNoZShzdGFydFN0YXRlLCBkZWNpc2lvbikge1xuICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgIHJldHVybiAocHJlZGljYXRlU2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHByZWRpY2F0ZVNldC50b1N0cmluZygpO1xuICAgICAgICBsZXQgZXhpc3RpbmcgPSBtYXBba2V5XTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4aXN0aW5nID0ge1xuICAgICAgICAgICAgICAgIGF0blN0YXJ0U3RhdGU6IHN0YXJ0U3RhdGUsXG4gICAgICAgICAgICAgICAgZGVjaXNpb24sXG4gICAgICAgICAgICAgICAgc3RhdGVzOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1hcFtrZXldID0gZXhpc3Rpbmc7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH1cbiAgICB9O1xufVxuY2xhc3MgUHJlZGljYXRlU2V0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVzID0gW107XG4gICAgfVxuICAgIGlzKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpbmRleCA+PSB0aGlzLnByZWRpY2F0ZXMubGVuZ3RoIHx8IHRoaXMucHJlZGljYXRlc1tpbmRleF07XG4gICAgfVxuICAgIHNldChpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVzW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJlZGljYXRlcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSB0aGlzLnByZWRpY2F0ZXNbaV0gPT09IHRydWUgPyBcIjFcIiA6IFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5jb25zdCBFTVBUWV9QUkVESUNBVEVTID0gbmV3IFByZWRpY2F0ZVNldCgpO1xuZXhwb3J0IGNsYXNzIExMU3Rhckxvb2thaGVhZFN0cmF0ZWd5IGV4dGVuZHMgTExrTG9va2FoZWFkU3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvZ2dpbmcgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9nZ2luZykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKChtZXNzYWdlKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGluaXRpYWxpemUob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0biA9IGNyZWF0ZUFUTihvcHRpb25zLnJ1bGVzKTtcbiAgICAgICAgdGhpcy5kZmFzID0gaW5pdEFUTlNpbXVsYXRvcih0aGlzLmF0bik7XG4gICAgfVxuICAgIHZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24ob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHByb2RPY2N1cnJlbmNlLCBydWxlLCBoYXNQcmVkaWNhdGVzLCBkeW5hbWljVG9rZW5zRW5hYmxlZCB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGZhcyA9IHRoaXMuZGZhcztcbiAgICAgICAgY29uc3QgbG9nZ2luZyA9IHRoaXMubG9nZ2luZztcbiAgICAgICAgY29uc3Qga2V5ID0gYnVpbGRBVE5LZXkocnVsZSwgJ0FsdGVybmF0aW9uJywgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICBjb25zdCBkZWNpc2lvblN0YXRlID0gdGhpcy5hdG4uZGVjaXNpb25NYXBba2V5XTtcbiAgICAgICAgY29uc3QgZGVjaXNpb25JbmRleCA9IGRlY2lzaW9uU3RhdGUuZGVjaXNpb247XG4gICAgICAgIGNvbnN0IHBhcnRpYWxBbHRzID0gbWFwKGdldExvb2thaGVhZFBhdGhzKHtcbiAgICAgICAgICAgIG1heExvb2thaGVhZDogMSxcbiAgICAgICAgICAgIG9jY3VycmVuY2U6IHByb2RPY2N1cnJlbmNlLFxuICAgICAgICAgICAgcHJvZFR5cGU6IFwiQWx0ZXJuYXRpb25cIixcbiAgICAgICAgICAgIHJ1bGU6IHJ1bGVcbiAgICAgICAgfSksIChjdXJyQWx0KSA9PiBtYXAoY3VyckFsdCwgKHBhdGgpID0+IHBhdGhbMF0pKTtcbiAgICAgICAgaWYgKGlzTEwxU2VxdWVuY2UocGFydGlhbEFsdHMsIGZhbHNlKSAmJiAhZHluYW1pY1Rva2Vuc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNob2ljZVRvQWx0ID0gcmVkdWNlKHBhcnRpYWxBbHRzLCAocmVzdWx0LCBjdXJyQWx0LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKGN1cnJBbHQsIChjdXJyVG9rVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclRva1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyVG9rVHlwZS50b2tlblR5cGVJZHhdID0gaWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjdXJyVG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMsIChjdXJyRXh0ZW5kaW5nVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyRXh0ZW5kaW5nVHlwZV0gPSBpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICBpZiAoaGFzUHJlZGljYXRlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JBbHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZGljdGlvbiA9IGNob2ljZVRvQWx0W25leHRUb2tlbi50b2tlblR5cGVJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JBbHRzICE9PSB1bmRlZmluZWQgJiYgcHJlZGljdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnYXRlID0gKF9hID0gb3JBbHRzW3ByZWRpY3Rpb25dKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuR0FURTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnYXRlICE9PSB1bmRlZmluZWQgJiYgZ2F0ZS5jYWxsKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Rpb247XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaG9pY2VUb0FsdFtuZXh0VG9rZW4udG9rZW5UeXBlSWR4XTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1ByZWRpY2F0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JBbHRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlcyA9IG5ldyBQcmVkaWNhdGVTZXQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBvckFsdHMgPT09IHVuZGVmaW5lZCA/IDAgOiBvckFsdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2F0ZSA9IG9yQWx0cyA9PT0gbnVsbCB8fCBvckFsdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yQWx0c1tpXS5HQVRFO1xuICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGVzLnNldChpLCBnYXRlID09PSB1bmRlZmluZWQgfHwgZ2F0ZS5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRhcHRpdmVQcmVkaWN0LmNhbGwodGhpcywgZGZhcywgZGVjaXNpb25JbmRleCwgcHJlZGljYXRlcywgbG9nZ2luZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRhcHRpdmVQcmVkaWN0LmNhbGwodGhpcywgZGZhcywgZGVjaXNpb25JbmRleCwgRU1QVFlfUFJFRElDQVRFUywgbG9nZ2luZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBidWlsZExvb2thaGVhZEZvck9wdGlvbmFsKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBwcm9kT2NjdXJyZW5jZSwgcnVsZSwgcHJvZFR5cGUsIGR5bmFtaWNUb2tlbnNFbmFibGVkIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkZmFzID0gdGhpcy5kZmFzO1xuICAgICAgICBjb25zdCBsb2dnaW5nID0gdGhpcy5sb2dnaW5nO1xuICAgICAgICBjb25zdCBrZXkgPSBidWlsZEFUTktleShydWxlLCBwcm9kVHlwZSwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICBjb25zdCBkZWNpc2lvblN0YXRlID0gdGhpcy5hdG4uZGVjaXNpb25NYXBba2V5XTtcbiAgICAgICAgY29uc3QgZGVjaXNpb25JbmRleCA9IGRlY2lzaW9uU3RhdGUuZGVjaXNpb247XG4gICAgICAgIGNvbnN0IGFsdHMgPSBtYXAoZ2V0TG9va2FoZWFkUGF0aHMoe1xuICAgICAgICAgICAgbWF4TG9va2FoZWFkOiAxLFxuICAgICAgICAgICAgb2NjdXJyZW5jZTogcHJvZE9jY3VycmVuY2UsXG4gICAgICAgICAgICBwcm9kVHlwZSxcbiAgICAgICAgICAgIHJ1bGVcbiAgICAgICAgfSksIChlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWFwKGUsIChnKSA9PiBnWzBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0xMMVNlcXVlbmNlKGFsdHMpICYmIGFsdHNbMF1bMF0gJiYgIWR5bmFtaWNUb2tlbnNFbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBhbHQgPSBhbHRzWzBdO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVG9rZW5zVHlwZXMgPSBmbGF0dGVuKGFsdCk7XG4gICAgICAgICAgICBpZiAoc2luZ2xlVG9rZW5zVHlwZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgaXNFbXB0eShzaW5nbGVUb2tlbnNUeXBlc1swXS5jYXRlZ29yeU1hdGNoZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUb2tlblR5cGUgPSBzaW5nbGVUb2tlbnNUeXBlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFRva2VuVW5pcXVlS2V5ID0gZXhwZWN0ZWRUb2tlblR5cGUudG9rZW5UeXBlSWR4O1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeCA9PT0gZXhwZWN0ZWRUb2tlblVuaXF1ZUtleTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hvaWNlVG9BbHQgPSByZWR1Y2Uoc2luZ2xlVG9rZW5zVHlwZXMsIChyZXN1bHQsIGN1cnJUb2tUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVG9rVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3VyclRva1R5cGUudG9rZW5UeXBlSWR4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGN1cnJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlcywgKGN1cnJFeHRlbmRpbmdUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJFeHRlbmRpbmdUeXBlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlVG9BbHRbbmV4dFRva2VuLnRva2VuVHlwZUlkeF0gPT09IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRhcHRpdmVQcmVkaWN0LmNhbGwodGhpcywgZGZhcywgZGVjaXNpb25JbmRleCwgRU1QVFlfUFJFRElDQVRFUywgbG9nZ2luZyk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJlc3VsdCA9PT0gXCJvYmplY3RcIiA/IGZhbHNlIDogcmVzdWx0ID09PSAwO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzTEwxU2VxdWVuY2Uoc2VxdWVuY2VzLCBhbGxvd0VtcHR5ID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZ1bGxTZXQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBhbHQgb2Ygc2VxdWVuY2VzKSB7XG4gICAgICAgIGNvbnN0IGFsdFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tUeXBlIG9mIGFsdCkge1xuICAgICAgICAgICAgaWYgKHRva1R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChhbGxvd0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVwc2lsb24gcHJvZHVjdGlvbiBlbmNvdW50ZXJlZFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gW3Rva1R5cGUudG9rZW5UeXBlSWR4XS5jb25jYXQodG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bGxTZXQuaGFzKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsdFNldC5oYXMoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bGxTZXQuYWRkKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYWx0U2V0LmFkZChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaW5pdEFUTlNpbXVsYXRvcihhdG4pIHtcbiAgICBjb25zdCBkZWNpc2lvbkxlbmd0aCA9IGF0bi5kZWNpc2lvblN0YXRlcy5sZW5ndGg7XG4gICAgY29uc3QgZGVjaXNpb25Ub0RGQSA9IEFycmF5KGRlY2lzaW9uTGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY2lzaW9uTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVjaXNpb25Ub0RGQVtpXSA9IGNyZWF0ZURGQUNhY2hlKGF0bi5kZWNpc2lvblN0YXRlc1tpXSwgaSk7XG4gICAgfVxuICAgIHJldHVybiBkZWNpc2lvblRvREZBO1xufVxuZnVuY3Rpb24gYWRhcHRpdmVQcmVkaWN0KGRmYUNhY2hlcywgZGVjaXNpb24sIHByZWRpY2F0ZVNldCwgbG9nZ2luZykge1xuICAgIGNvbnN0IGRmYSA9IGRmYUNhY2hlc1tkZWNpc2lvbl0ocHJlZGljYXRlU2V0KTtcbiAgICBsZXQgc3RhcnQgPSBkZmEuc3RhcnQ7XG4gICAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY2xvc3VyZSA9IGNvbXB1dGVTdGFydFN0YXRlKGRmYS5hdG5TdGFydFN0YXRlKTtcbiAgICAgICAgc3RhcnQgPSBhZGRERkFTdGF0ZShkZmEsIG5ld0RGQVN0YXRlKGNsb3N1cmUpKTtcbiAgICAgICAgZGZhLnN0YXJ0ID0gc3RhcnQ7XG4gICAgfVxuICAgIGNvbnN0IGFsdCA9IHBlcmZvcm1Mb29rYWhlYWQuYXBwbHkodGhpcywgW2RmYSwgc3RhcnQsIHByZWRpY2F0ZVNldCwgbG9nZ2luZ10pO1xuICAgIHJldHVybiBhbHQ7XG59XG5mdW5jdGlvbiBwZXJmb3JtTG9va2FoZWFkKGRmYSwgczAsIHByZWRpY2F0ZVNldCwgbG9nZ2luZykge1xuICAgIGxldCBwcmV2aW91c0QgPSBzMDtcbiAgICBsZXQgaSA9IDE7XG4gICAgY29uc3QgcGF0aCA9IFtdO1xuICAgIGxldCB0ID0gdGhpcy5MQShpKyspO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBkID0gZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZShwcmV2aW91c0QsIHQpO1xuICAgICAgICBpZiAoZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkID0gY29tcHV0ZUxvb2thaGVhZFRhcmdldC5hcHBseSh0aGlzLCBbZGZhLCBwcmV2aW91c0QsIHQsIGksIHByZWRpY2F0ZVNldCwgbG9nZ2luZ10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkID09PSBERkFfRVJST1IpIHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZEFkYXB0aXZlUHJlZGljdEVycm9yKHBhdGgsIHByZXZpb3VzRCwgdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGQuaXNBY2NlcHRTdGF0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGQucHJlZGljdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0QgPSBkO1xuICAgICAgICBwYXRoLnB1c2godCk7XG4gICAgICAgIHQgPSB0aGlzLkxBKGkrKyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29tcHV0ZUxvb2thaGVhZFRhcmdldChkZmEsIHByZXZpb3VzRCwgdG9rZW4sIGxvb2thaGVhZCwgcHJlZGljYXRlU2V0LCBsb2dnaW5nKSB7XG4gICAgY29uc3QgcmVhY2ggPSBjb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHRva2VuLCBwcmVkaWNhdGVTZXQpO1xuICAgIGlmIChyZWFjaC5zaXplID09PSAwKSB7XG4gICAgICAgIGFkZERGQUVkZ2UoZGZhLCBwcmV2aW91c0QsIHRva2VuLCBERkFfRVJST1IpO1xuICAgICAgICByZXR1cm4gREZBX0VSUk9SO1xuICAgIH1cbiAgICBsZXQgbmV3U3RhdGUgPSBuZXdERkFTdGF0ZShyZWFjaCk7XG4gICAgY29uc3QgcHJlZGljdGVkQWx0ID0gZ2V0VW5pcXVlQWx0KHJlYWNoLCBwcmVkaWNhdGVTZXQpO1xuICAgIGlmIChwcmVkaWN0ZWRBbHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdTdGF0ZS5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgbmV3U3RhdGUucHJlZGljdGlvbiA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgbmV3U3RhdGUuY29uZmlncy51bmlxdWVBbHQgPSBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc0NvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uKHJlYWNoKSkge1xuICAgICAgICBjb25zdCBwcmVkaWN0aW9uID0gbWluKHJlYWNoLmFsdHMpO1xuICAgICAgICBuZXdTdGF0ZS5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgbmV3U3RhdGUucHJlZGljdGlvbiA9IHByZWRpY3Rpb247XG4gICAgICAgIG5ld1N0YXRlLmNvbmZpZ3MudW5pcXVlQWx0ID0gcHJlZGljdGlvbjtcbiAgICAgICAgcmVwb3J0TG9va2FoZWFkQW1iaWd1aXR5LmFwcGx5KHRoaXMsIFtkZmEsIGxvb2thaGVhZCwgcmVhY2guYWx0cywgbG9nZ2luZ10pO1xuICAgIH1cbiAgICBuZXdTdGF0ZSA9IGFkZERGQUVkZ2UoZGZhLCBwcmV2aW91c0QsIHRva2VuLCBuZXdTdGF0ZSk7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xufVxuZnVuY3Rpb24gcmVwb3J0TG9va2FoZWFkQW1iaWd1aXR5KGRmYSwgbG9va2FoZWFkLCBhbWJpZ3VpdHlJbmRpY2VzLCBsb2dnaW5nKSB7XG4gICAgY29uc3QgcHJlZml4UGF0aCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxvb2thaGVhZDsgaSsrKSB7XG4gICAgICAgIHByZWZpeFBhdGgucHVzaCh0aGlzLkxBKGkpLnRva2VuVHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IGF0blN0YXRlID0gZGZhLmF0blN0YXJ0U3RhdGU7XG4gICAgY29uc3QgdG9wTGV2ZWxSdWxlID0gYXRuU3RhdGUucnVsZTtcbiAgICBjb25zdCBwcm9kdWN0aW9uID0gYXRuU3RhdGUucHJvZHVjdGlvbjtcbiAgICBjb25zdCBtZXNzYWdlID0gYnVpbGRBbWJpZ3VpdHlFcnJvcih7XG4gICAgICAgIHRvcExldmVsUnVsZSxcbiAgICAgICAgYW1iaWd1aXR5SW5kaWNlcyxcbiAgICAgICAgcHJvZHVjdGlvbixcbiAgICAgICAgcHJlZml4UGF0aFxuICAgIH0pO1xuICAgIGxvZ2dpbmcobWVzc2FnZSk7XG59XG5mdW5jdGlvbiBidWlsZEFtYmlndWl0eUVycm9yKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXRoTXNnID0gbWFwKG9wdGlvbnMucHJlZml4UGF0aCwgKGN1cnJ0b2spID0+IHRva2VuTGFiZWwoY3VycnRvaykpLmpvaW4oXCIsIFwiKTtcbiAgICBjb25zdCBvY2N1cnJlbmNlID0gb3B0aW9ucy5wcm9kdWN0aW9uLmlkeCA9PT0gMCA/IFwiXCIgOiBvcHRpb25zLnByb2R1Y3Rpb24uaWR4O1xuICAgIGxldCBjdXJyTWVzc2FnZSA9IGBBbWJpZ3VvdXMgQWx0ZXJuYXRpdmVzIERldGVjdGVkOiA8JHtvcHRpb25zLmFtYmlndWl0eUluZGljZXMuam9pbihcIiwgXCIpfT4gaW4gPCR7Z2V0UHJvZHVjdGlvbkRzbE5hbWUob3B0aW9ucy5wcm9kdWN0aW9uKX0ke29jY3VycmVuY2V9PmAgK1xuICAgICAgICBgIGluc2lkZSA8JHtvcHRpb25zLnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZSxcXG5gICtcbiAgICAgICAgYDwke3BhdGhNc2d9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuXFxuYDtcbiAgICBjdXJyTWVzc2FnZSA9XG4gICAgICAgIGN1cnJNZXNzYWdlICtcbiAgICAgICAgICAgIGBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0FNQklHVU9VU19BTFRFUk5BVElWRVNcXG5gICtcbiAgICAgICAgICAgIGBGb3IgRnVydGhlciBkZXRhaWxzLmA7XG4gICAgcmV0dXJuIGN1cnJNZXNzYWdlO1xufVxuZnVuY3Rpb24gZ2V0UHJvZHVjdGlvbkRzbE5hbWUocHJvZCkge1xuICAgIGlmIChwcm9kIGluc3RhbmNlb2YgTm9uVGVybWluYWwpIHtcbiAgICAgICAgcmV0dXJuIFwiU1VCUlVMRVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBcIk9QVElPTlwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIFwiT1JcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnkpIHtcbiAgICAgICAgcmV0dXJuIFwiQVRfTEVBU1RfT05FXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gXCJBVF9MRUFTVF9PTkVfU0VQXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uV2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gXCJNQU5ZX1NFUFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbikge1xuICAgICAgICByZXR1cm4gXCJNQU5ZXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4gXCJDT05TVU1FXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IocGF0aCwgcHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBjb25zdCBuZXh0VHJhbnNpdGlvbnMgPSBmbGF0TWFwKHByZXZpb3VzLmNvbmZpZ3MuZWxlbWVudHMsIChlKSA9PiBlLnN0YXRlLnRyYW5zaXRpb25zKTtcbiAgICBjb25zdCBuZXh0VG9rZW5UeXBlcyA9IHVuaXFCeShuZXh0VHJhbnNpdGlvbnNcbiAgICAgICAgLmZpbHRlcigoZSkgPT4gZSBpbnN0YW5jZW9mIEF0b21UcmFuc2l0aW9uKVxuICAgICAgICAubWFwKChlKSA9PiBlLnRva2VuVHlwZSksIChlKSA9PiBlLnRva2VuVHlwZUlkeCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0dWFsVG9rZW46IGN1cnJlbnQsXG4gICAgICAgIHBvc3NpYmxlVG9rZW5UeXBlczogbmV4dFRva2VuVHlwZXMsXG4gICAgICAgIHRva2VuUGF0aDogcGF0aFxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRFeGlzdGluZ1RhcmdldFN0YXRlKHN0YXRlLCB0b2tlbikge1xuICAgIHJldHVybiBzdGF0ZS5lZGdlc1t0b2tlbi50b2tlblR5cGVJZHhdO1xufVxuZnVuY3Rpb24gY29tcHV0ZVJlYWNoU2V0KGNvbmZpZ3MsIHRva2VuLCBwcmVkaWNhdGVTZXQpIHtcbiAgICBjb25zdCBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgY29uc3Qgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY29uZmlncy5lbGVtZW50cykge1xuICAgICAgICBpZiAocHJlZGljYXRlU2V0LmlzKGMuYWx0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLnN0YXRlLnR5cGUgPT09IEFUTl9SVUxFX1NUT1ApIHtcbiAgICAgICAgICAgIHNraXBwZWRTdG9wU3RhdGVzLnB1c2goYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFuc2l0aW9uTGVuZ3RoID0gYy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNpdGlvbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9uID0gYy5zdGF0ZS50cmFuc2l0aW9uc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGdldFJlYWNoYWJsZVRhcmdldCh0cmFuc2l0aW9uLCB0b2tlbik7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgYWx0OiBjLmFsdCxcbiAgICAgICAgICAgICAgICAgICAgc3RhY2s6IGMuc3RhY2tcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmVhY2g7XG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzLmxlbmd0aCA9PT0gMCAmJiBpbnRlcm1lZGlhdGUuc2l6ZSA9PT0gMSkge1xuICAgICAgICByZWFjaCA9IGludGVybWVkaWF0ZTtcbiAgICB9XG4gICAgaWYgKHJlYWNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVhY2ggPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBpbnRlcm1lZGlhdGUuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNsb3N1cmUoYywgcmVhY2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcy5sZW5ndGggPiAwICYmICFoYXNDb25maWdJblJ1bGVTdG9wU3RhdGUocmVhY2gpKSB7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBza2lwcGVkU3RvcFN0YXRlcykge1xuICAgICAgICAgICAgcmVhY2guYWRkKGMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZWFjaDtcbn1cbmZ1bmN0aW9uIGdldFJlYWNoYWJsZVRhcmdldCh0cmFuc2l0aW9uLCB0b2tlbikge1xuICAgIGlmICh0cmFuc2l0aW9uIGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24gJiZcbiAgICAgICAgdG9rZW5NYXRjaGVyKHRva2VuLCB0cmFuc2l0aW9uLnRva2VuVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24udGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0VW5pcXVlQWx0KGNvbmZpZ3MsIHByZWRpY2F0ZVNldCkge1xuICAgIGxldCBhbHQ7XG4gICAgZm9yIChjb25zdCBjIG9mIGNvbmZpZ3MuZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZVNldC5pcyhjLmFsdCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFsdCA9IGMuYWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYWx0ICE9PSBjLmFsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn1cbmZ1bmN0aW9uIG5ld0RGQVN0YXRlKGNsb3N1cmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb25maWdzOiBjbG9zdXJlLFxuICAgICAgICBlZGdlczoge30sXG4gICAgICAgIGlzQWNjZXB0U3RhdGU6IGZhbHNlLFxuICAgICAgICBwcmVkaWN0aW9uOiAtMVxuICAgIH07XG59XG5mdW5jdGlvbiBhZGRERkFFZGdlKGRmYSwgZnJvbSwgdG9rZW4sIHRvKSB7XG4gICAgdG8gPSBhZGRERkFTdGF0ZShkZmEsIHRvKTtcbiAgICBmcm9tLmVkZ2VzW3Rva2VuLnRva2VuVHlwZUlkeF0gPSB0bztcbiAgICByZXR1cm4gdG87XG59XG5mdW5jdGlvbiBhZGRERkFTdGF0ZShkZmEsIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlID09PSBERkFfRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBSZXBldGl0aW9ucyBoYXZlIHRoZSBzYW1lIGNvbmZpZyBzZXRcbiAgICAvLyBUaGVyZWZvcmUsIHN0b3JpbmcgdGhlIGtleSBvZiB0aGUgY29uZmlnIGluIGEgbWFwIGFsbG93cyB1cyB0byBjcmVhdGUgYSBsb29wIGluIG91ciBERkFcbiAgICBjb25zdCBtYXBLZXkgPSBzdGF0ZS5jb25maWdzLmtleTtcbiAgICBjb25zdCBleGlzdGluZyA9IGRmYS5zdGF0ZXNbbWFwS2V5XTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIHN0YXRlLmNvbmZpZ3MuZmluYWxpemUoKTtcbiAgICBkZmEuc3RhdGVzW21hcEtleV0gPSBzdGF0ZTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5mdW5jdGlvbiBjb21wdXRlU3RhcnRTdGF0ZShhdG5TdGF0ZSkge1xuICAgIGNvbnN0IGNvbmZpZ3MgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgY29uc3QgbnVtYmVyT2ZUcmFuc2l0aW9ucyA9IGF0blN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mVHJhbnNpdGlvbnM7IGkrKykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBhdG5TdGF0ZS50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIHN0YXRlOiB0YXJnZXQsXG4gICAgICAgICAgICBhbHQ6IGksXG4gICAgICAgICAgICBzdGFjazogW11cbiAgICAgICAgfTtcbiAgICAgICAgY2xvc3VyZShjb25maWcsIGNvbmZpZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlncztcbn1cbmZ1bmN0aW9uIGNsb3N1cmUoY29uZmlnLCBjb25maWdzKSB7XG4gICAgY29uc3QgcCA9IGNvbmZpZy5zdGF0ZTtcbiAgICBpZiAocC50eXBlID09PSBBVE5fUlVMRV9TVE9QKSB7XG4gICAgICAgIGlmIChjb25maWcuc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYXRuU3RhY2sgPSBbLi4uY29uZmlnLnN0YWNrXTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGxvd1N0YXRlID0gYXRuU3RhY2sucG9wKCk7XG4gICAgICAgICAgICBjb25zdCBmb2xsb3dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IGZvbGxvd1N0YXRlLFxuICAgICAgICAgICAgICAgIGFsdDogY29uZmlnLmFsdCxcbiAgICAgICAgICAgICAgICBzdGFjazogYXRuU3RhY2tcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjbG9zdXJlKGZvbGxvd0NvbmZpZywgY29uZmlncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXBwaW5nIGludG8gb3V0ZXIgY29udGV4dCwgc2ltcGx5IGFkZCB0aGUgY29uZmlnXG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgc3RvcCBjb21wdXRhdGlvbiBvbmNlIGV2ZXJ5IGNvbmZpZyBpcyBhdCB0aGUgcnVsZSBzdG9wIHN0YXRlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFwLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNpdGlvbkxlbmd0aCA9IHAudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNpdGlvbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb24gPSBwLnRyYW5zaXRpb25zW2ldO1xuICAgICAgICBjb25zdCBjID0gZ2V0RXBzaWxvblRhcmdldChjb25maWcsIHRyYW5zaXRpb24pO1xuICAgICAgICBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjbG9zdXJlKGMsIGNvbmZpZ3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RXBzaWxvblRhcmdldChjb25maWcsIHRyYW5zaXRpb24pIHtcbiAgICBpZiAodHJhbnNpdGlvbiBpbnN0YW5jZW9mIEVwc2lsb25UcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZTogdHJhbnNpdGlvbi50YXJnZXQsXG4gICAgICAgICAgICBhbHQ6IGNvbmZpZy5hbHQsXG4gICAgICAgICAgICBzdGFjazogY29uZmlnLnN0YWNrXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyYW5zaXRpb24gaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICBjb25zdCBzdGFjayA9IFsuLi5jb25maWcuc3RhY2ssIHRyYW5zaXRpb24uZm9sbG93U3RhdGVdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGU6IHRyYW5zaXRpb24udGFyZ2V0LFxuICAgICAgICAgICAgYWx0OiBjb25maWcuYWx0LFxuICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShjb25maWdzKSB7XG4gICAgZm9yIChjb25zdCBjIG9mIGNvbmZpZ3MuZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGMuc3RhdGUudHlwZSA9PT0gQVROX1JVTEVfU1RPUCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYWxsQ29uZmlnc0luUnVsZVN0b3BTdGF0ZXMoY29uZmlncykge1xuICAgIGZvciAoY29uc3QgYyBvZiBjb25maWdzLmVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChjLnN0YXRlLnR5cGUgIT09IEFUTl9SVUxFX1NUT1ApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGhhc0NvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uKGNvbmZpZ3MpIHtcbiAgICBpZiAoYWxsQ29uZmlnc0luUnVsZVN0b3BTdGF0ZXMoY29uZmlncykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGFsdFNldHMgPSBnZXRDb25mbGljdGluZ0FsdFNldHMoY29uZmlncy5lbGVtZW50cyk7XG4gICAgY29uc3QgaGV1cmlzdGljID0gaGFzQ29uZmxpY3RpbmdBbHRTZXQoYWx0U2V0cykgJiYgIWhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQoYWx0U2V0cyk7XG4gICAgcmV0dXJuIGhldXJpc3RpYztcbn1cbmZ1bmN0aW9uIGdldENvbmZsaWN0aW5nQWx0U2V0cyhjb25maWdzKSB7XG4gICAgY29uc3QgY29uZmlnVG9BbHRzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjb25maWdzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldEFUTkNvbmZpZ0tleShjLCBmYWxzZSk7XG4gICAgICAgIGxldCBhbHRzID0gY29uZmlnVG9BbHRzLmdldChrZXkpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbHRzID0ge307XG4gICAgICAgICAgICBjb25maWdUb0FsdHMuc2V0KGtleSwgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0c1tjLmFsdF0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnVG9BbHRzO1xufVxuZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdBbHRTZXQoYWx0U2V0cykge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuZnJvbShhbHRTZXRzLnZhbHVlcygpKSkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQoYWx0U2V0cykge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuZnJvbShhbHRTZXRzLnZhbHVlcygpKSkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsLXN0YXItbG9va2FoZWFkLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHsgTExTdGFyTG9va2FoZWFkU3RyYXRlZ3kgfSBmcm9tICcuL2FsbC1zdGFyLWxvb2thaGVhZC5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbid1c2Ugc3RyaWN0JztcbmV4cG9ydCB2YXIgRG9jdW1lbnRVcmk7XG4oZnVuY3Rpb24gKERvY3VtZW50VXJpKSB7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIERvY3VtZW50VXJpLmlzID0gaXM7XG59KShEb2N1bWVudFVyaSB8fCAoRG9jdW1lbnRVcmkgPSB7fSkpO1xuZXhwb3J0IHZhciBVUkk7XG4oZnVuY3Rpb24gKFVSSSkge1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgICBVUkkuaXMgPSBpcztcbn0pKFVSSSB8fCAoVVJJID0ge30pKTtcbmV4cG9ydCB2YXIgaW50ZWdlcjtcbihmdW5jdGlvbiAoaW50ZWdlcikge1xuICAgIGludGVnZXIuTUlOX1ZBTFVFID0gLTIxNDc0ODM2NDg7XG4gICAgaW50ZWdlci5NQVhfVkFMVUUgPSAyMTQ3NDgzNjQ3O1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGludGVnZXIuTUlOX1ZBTFVFIDw9IHZhbHVlICYmIHZhbHVlIDw9IGludGVnZXIuTUFYX1ZBTFVFO1xuICAgIH1cbiAgICBpbnRlZ2VyLmlzID0gaXM7XG59KShpbnRlZ2VyIHx8IChpbnRlZ2VyID0ge30pKTtcbmV4cG9ydCB2YXIgdWludGVnZXI7XG4oZnVuY3Rpb24gKHVpbnRlZ2VyKSB7XG4gICAgdWludGVnZXIuTUlOX1ZBTFVFID0gMDtcbiAgICB1aW50ZWdlci5NQVhfVkFMVUUgPSAyMTQ3NDgzNjQ3O1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHVpbnRlZ2VyLk1JTl9WQUxVRSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSB1aW50ZWdlci5NQVhfVkFMVUU7XG4gICAgfVxuICAgIHVpbnRlZ2VyLmlzID0gaXM7XG59KSh1aW50ZWdlciB8fCAodWludGVnZXIgPSB7fSkpO1xuLyoqXG4gKiBUaGUgUG9zaXRpb24gbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgUG9zaXRpb259IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIFBvc2l0aW9uO1xuKGZ1bmN0aW9uIChQb3NpdGlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUG9zaXRpb24gbGl0ZXJhbCBmcm9tIHRoZSBnaXZlbiBsaW5lIGFuZCBjaGFyYWN0ZXIuXG4gICAgICogQHBhcmFtIGxpbmUgVGhlIHBvc2l0aW9uJ3MgbGluZS5cbiAgICAgKiBAcGFyYW0gY2hhcmFjdGVyIFRoZSBwb3NpdGlvbidzIGNoYXJhY3Rlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobGluZSwgY2hhcmFjdGVyKSB7XG4gICAgICAgIGlmIChsaW5lID09PSBOdW1iZXIuTUFYX1ZBTFVFKSB7XG4gICAgICAgICAgICBsaW5lID0gdWludGVnZXIuTUFYX1ZBTFVFO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IE51bWJlci5NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIGNoYXJhY3RlciA9IHVpbnRlZ2VyLk1BWF9WQUxVRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBsaW5lLCBjaGFyYWN0ZXIgfTtcbiAgICB9XG4gICAgUG9zaXRpb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgUG9zaXRpb259IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgSXMudWludGVnZXIoY2FuZGlkYXRlLmxpbmUpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5jaGFyYWN0ZXIpO1xuICAgIH1cbiAgICBQb3NpdGlvbi5pcyA9IGlzO1xufSkoUG9zaXRpb24gfHwgKFBvc2l0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIFJhbmdlIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFJhbmdlfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBSYW5nZTtcbihmdW5jdGlvbiAoUmFuZ2UpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUob25lLCB0d28sIHRocmVlLCBmb3VyKSB7XG4gICAgICAgIGlmIChJcy51aW50ZWdlcihvbmUpICYmIElzLnVpbnRlZ2VyKHR3bykgJiYgSXMudWludGVnZXIodGhyZWUpICYmIElzLnVpbnRlZ2VyKGZvdXIpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogUG9zaXRpb24uY3JlYXRlKG9uZSwgdHdvKSwgZW5kOiBQb3NpdGlvbi5jcmVhdGUodGhyZWUsIGZvdXIpIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoUG9zaXRpb24uaXMob25lKSAmJiBQb3NpdGlvbi5pcyh0d28pKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogb25lLCBlbmQ6IHR3byB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtvbmV9LCAke3R3b30sICR7dGhyZWV9LCAke2ZvdXJ9XWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIFJhbmdlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIFJhbmdlfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFBvc2l0aW9uLmlzKGNhbmRpZGF0ZS5zdGFydCkgJiYgUG9zaXRpb24uaXMoY2FuZGlkYXRlLmVuZCk7XG4gICAgfVxuICAgIFJhbmdlLmlzID0gaXM7XG59KShSYW5nZSB8fCAoUmFuZ2UgPSB7fSkpO1xuLyoqXG4gKiBUaGUgTG9jYXRpb24gbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgTG9jYXRpb259IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIExvY2F0aW9uO1xuKGZ1bmN0aW9uIChMb2NhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb2NhdGlvbiBsaXRlcmFsLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIGxvY2F0aW9uJ3MgdXJpLlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgbG9jYXRpb24ncyByYW5nZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUodXJpLCByYW5nZSkge1xuICAgICAgICByZXR1cm4geyB1cmksIHJhbmdlIH07XG4gICAgfVxuICAgIExvY2F0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIExvY2F0aW9ufSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSkgJiYgKElzLnN0cmluZyhjYW5kaWRhdGUudXJpKSB8fCBJcy51bmRlZmluZWQoY2FuZGlkYXRlLnVyaSkpO1xuICAgIH1cbiAgICBMb2NhdGlvbi5pcyA9IGlzO1xufSkoTG9jYXRpb24gfHwgKExvY2F0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIExvY2F0aW9uTGluayBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBMb2NhdGlvbkxpbmt9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIExvY2F0aW9uTGluaztcbihmdW5jdGlvbiAoTG9jYXRpb25MaW5rKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIExvY2F0aW9uTGluayBsaXRlcmFsLlxuICAgICAqIEBwYXJhbSB0YXJnZXRVcmkgVGhlIGRlZmluaXRpb24ncyB1cmkuXG4gICAgICogQHBhcmFtIHRhcmdldFJhbmdlIFRoZSBmdWxsIHJhbmdlIG9mIHRoZSBkZWZpbml0aW9uLlxuICAgICAqIEBwYXJhbSB0YXJnZXRTZWxlY3Rpb25SYW5nZSBUaGUgc3BhbiBvZiB0aGUgc3ltYm9sIGRlZmluaXRpb24gYXQgdGhlIHRhcmdldC5cbiAgICAgKiBAcGFyYW0gb3JpZ2luU2VsZWN0aW9uUmFuZ2UgVGhlIHNwYW4gb2YgdGhlIHN5bWJvbCBiZWluZyBkZWZpbmVkIGluIHRoZSBvcmlnaW5hdGluZyBzb3VyY2UgZmlsZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUodGFyZ2V0VXJpLCB0YXJnZXRSYW5nZSwgdGFyZ2V0U2VsZWN0aW9uUmFuZ2UsIG9yaWdpblNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgIHJldHVybiB7IHRhcmdldFVyaSwgdGFyZ2V0UmFuZ2UsIHRhcmdldFNlbGVjdGlvblJhbmdlLCBvcmlnaW5TZWxlY3Rpb25SYW5nZSB9O1xuICAgIH1cbiAgICBMb2NhdGlvbkxpbmsuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgTG9jYXRpb25MaW5rfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS50YXJnZXRSYW5nZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS50YXJnZXRVcmkpXG4gICAgICAgICAgICAmJiBSYW5nZS5pcyhjYW5kaWRhdGUudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpXG4gICAgICAgICAgICAmJiAoUmFuZ2UuaXMoY2FuZGlkYXRlLm9yaWdpblNlbGVjdGlvblJhbmdlKSB8fCBJcy51bmRlZmluZWQoY2FuZGlkYXRlLm9yaWdpblNlbGVjdGlvblJhbmdlKSk7XG4gICAgfVxuICAgIExvY2F0aW9uTGluay5pcyA9IGlzO1xufSkoTG9jYXRpb25MaW5rIHx8IChMb2NhdGlvbkxpbmsgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29sb3IgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgQ29sb3J9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIENvbG9yO1xuKGZ1bmN0aW9uIChDb2xvcikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sb3IgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlZCxcbiAgICAgICAgICAgIGdyZWVuLFxuICAgICAgICAgICAgYmx1ZSxcbiAgICAgICAgICAgIGFscGhhLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBDb2xvci5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBDb2xvcn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIElzLm51bWJlclJhbmdlKGNhbmRpZGF0ZS5yZWQsIDAsIDEpXG4gICAgICAgICAgICAmJiBJcy5udW1iZXJSYW5nZShjYW5kaWRhdGUuZ3JlZW4sIDAsIDEpXG4gICAgICAgICAgICAmJiBJcy5udW1iZXJSYW5nZShjYW5kaWRhdGUuYmx1ZSwgMCwgMSlcbiAgICAgICAgICAgICYmIElzLm51bWJlclJhbmdlKGNhbmRpZGF0ZS5hbHBoYSwgMCwgMSk7XG4gICAgfVxuICAgIENvbG9yLmlzID0gaXM7XG59KShDb2xvciB8fCAoQ29sb3IgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29sb3JJbmZvcm1hdGlvbiBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBDb2xvckluZm9ybWF0aW9ufSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBDb2xvckluZm9ybWF0aW9uO1xuKGZ1bmN0aW9uIChDb2xvckluZm9ybWF0aW9uKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvckluZm9ybWF0aW9uIGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHJhbmdlLCBjb2xvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICBjb2xvcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ29sb3JJbmZvcm1hdGlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBDb2xvckluZm9ybWF0aW9ufSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLnJhbmdlKSAmJiBDb2xvci5pcyhjYW5kaWRhdGUuY29sb3IpO1xuICAgIH1cbiAgICBDb2xvckluZm9ybWF0aW9uLmlzID0gaXM7XG59KShDb2xvckluZm9ybWF0aW9uIHx8IChDb2xvckluZm9ybWF0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIENvbG9yIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIENvbG9yUHJlc2VudGF0aW9ufSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBDb2xvclByZXNlbnRhdGlvbjtcbihmdW5jdGlvbiAoQ29sb3JQcmVzZW50YXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9ySW5mb3JtYXRpb24gbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobGFiZWwsIHRleHRFZGl0LCBhZGRpdGlvbmFsVGV4dEVkaXRzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHRleHRFZGl0LFxuICAgICAgICAgICAgYWRkaXRpb25hbFRleHRFZGl0cyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ29sb3JQcmVzZW50YXRpb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgQ29sb3JJbmZvcm1hdGlvbn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIElzLnN0cmluZyhjYW5kaWRhdGUubGFiZWwpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS50ZXh0RWRpdCkgfHwgVGV4dEVkaXQuaXMoY2FuZGlkYXRlKSlcbiAgICAgICAgICAgICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLmFkZGl0aW9uYWxUZXh0RWRpdHMpIHx8IElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLmFkZGl0aW9uYWxUZXh0RWRpdHMsIFRleHRFZGl0LmlzKSk7XG4gICAgfVxuICAgIENvbG9yUHJlc2VudGF0aW9uLmlzID0gaXM7XG59KShDb2xvclByZXNlbnRhdGlvbiB8fCAoQ29sb3JQcmVzZW50YXRpb24gPSB7fSkpO1xuLyoqXG4gKiBBIHNldCBvZiBwcmVkZWZpbmVkIHJhbmdlIGtpbmRzLlxuICovXG5leHBvcnQgdmFyIEZvbGRpbmdSYW5nZUtpbmQ7XG4oZnVuY3Rpb24gKEZvbGRpbmdSYW5nZUtpbmQpIHtcbiAgICAvKipcbiAgICAgKiBGb2xkaW5nIHJhbmdlIGZvciBhIGNvbW1lbnRcbiAgICAgKi9cbiAgICBGb2xkaW5nUmFuZ2VLaW5kLkNvbW1lbnQgPSAnY29tbWVudCc7XG4gICAgLyoqXG4gICAgICogRm9sZGluZyByYW5nZSBmb3IgYW4gaW1wb3J0IG9yIGluY2x1ZGVcbiAgICAgKi9cbiAgICBGb2xkaW5nUmFuZ2VLaW5kLkltcG9ydHMgPSAnaW1wb3J0cyc7XG4gICAgLyoqXG4gICAgICogRm9sZGluZyByYW5nZSBmb3IgYSByZWdpb24gKGUuZy4gYCNyZWdpb25gKVxuICAgICAqL1xuICAgIEZvbGRpbmdSYW5nZUtpbmQuUmVnaW9uID0gJ3JlZ2lvbic7XG59KShGb2xkaW5nUmFuZ2VLaW5kIHx8IChGb2xkaW5nUmFuZ2VLaW5kID0ge30pKTtcbi8qKlxuICogVGhlIGZvbGRpbmcgcmFuZ2UgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgRm9sZGluZ1JhbmdlfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBGb2xkaW5nUmFuZ2U7XG4oZnVuY3Rpb24gKEZvbGRpbmdSYW5nZSkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRm9sZGluZ1JhbmdlIGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHN0YXJ0TGluZSwgZW5kTGluZSwgc3RhcnRDaGFyYWN0ZXIsIGVuZENoYXJhY3Rlciwga2luZCwgY29sbGFwc2VkVGV4dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBlbmRMaW5lXG4gICAgICAgIH07XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKHN0YXJ0Q2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0Q2hhcmFjdGVyID0gc3RhcnRDaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzLmRlZmluZWQoZW5kQ2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZENoYXJhY3RlciA9IGVuZENoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXMuZGVmaW5lZChraW5kKSkge1xuICAgICAgICAgICAgcmVzdWx0LmtpbmQgPSBraW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKGNvbGxhcHNlZFRleHQpKSB7XG4gICAgICAgICAgICByZXN1bHQuY29sbGFwc2VkVGV4dCA9IGNvbGxhcHNlZFRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRm9sZGluZ1JhbmdlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIEZvbGRpbmdSYW5nZX0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5zdGFydExpbmUpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5zdGFydExpbmUpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5zdGFydENoYXJhY3RlcikgfHwgSXMudWludGVnZXIoY2FuZGlkYXRlLnN0YXJ0Q2hhcmFjdGVyKSlcbiAgICAgICAgICAgICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLmVuZENoYXJhY3RlcikgfHwgSXMudWludGVnZXIoY2FuZGlkYXRlLmVuZENoYXJhY3RlcikpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5raW5kKSB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLmtpbmQpKTtcbiAgICB9XG4gICAgRm9sZGluZ1JhbmdlLmlzID0gaXM7XG59KShGb2xkaW5nUmFuZ2UgfHwgKEZvbGRpbmdSYW5nZSA9IHt9KSk7XG4vKipcbiAqIFRoZSBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb259IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb247XG4oZnVuY3Rpb24gKERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb24gbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobG9jYXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb259IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgTG9jYXRpb24uaXMoY2FuZGlkYXRlLmxvY2F0aW9uKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uLmlzID0gaXM7XG59KShEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uIHx8IChEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIGRpYWdub3N0aWMncyBzZXZlcml0eS5cbiAqL1xuZXhwb3J0IHZhciBEaWFnbm9zdGljU2V2ZXJpdHk7XG4oZnVuY3Rpb24gKERpYWdub3N0aWNTZXZlcml0eSkge1xuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgRGlhZ25vc3RpY1NldmVyaXR5LkVycm9yID0gMTtcbiAgICAvKipcbiAgICAgKiBSZXBvcnRzIGEgd2FybmluZy5cbiAgICAgKi9cbiAgICBEaWFnbm9zdGljU2V2ZXJpdHkuV2FybmluZyA9IDI7XG4gICAgLyoqXG4gICAgICogUmVwb3J0cyBhbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBEaWFnbm9zdGljU2V2ZXJpdHkuSW5mb3JtYXRpb24gPSAzO1xuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgYSBoaW50LlxuICAgICAqL1xuICAgIERpYWdub3N0aWNTZXZlcml0eS5IaW50ID0gNDtcbn0pKERpYWdub3N0aWNTZXZlcml0eSB8fCAoRGlhZ25vc3RpY1NldmVyaXR5ID0ge30pKTtcbi8qKlxuICogVGhlIGRpYWdub3N0aWMgdGFncy5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCB2YXIgRGlhZ25vc3RpY1RhZztcbihmdW5jdGlvbiAoRGlhZ25vc3RpY1RhZykge1xuICAgIC8qKlxuICAgICAqIFVudXNlZCBvciB1bm5lY2Vzc2FyeSBjb2RlLlxuICAgICAqXG4gICAgICogQ2xpZW50cyBhcmUgYWxsb3dlZCB0byByZW5kZXIgZGlhZ25vc3RpY3Mgd2l0aCB0aGlzIHRhZyBmYWRlZCBvdXQgaW5zdGVhZCBvZiBoYXZpbmdcbiAgICAgKiBhbiBlcnJvciBzcXVpZ2dsZS5cbiAgICAgKi9cbiAgICBEaWFnbm9zdGljVGFnLlVubmVjZXNzYXJ5ID0gMTtcbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIG9yIG9ic29sZXRlIGNvZGUuXG4gICAgICpcbiAgICAgKiBDbGllbnRzIGFyZSBhbGxvd2VkIHRvIHJlbmRlcmVkIGRpYWdub3N0aWNzIHdpdGggdGhpcyB0YWcgc3RyaWtlIHRocm91Z2guXG4gICAgICovXG4gICAgRGlhZ25vc3RpY1RhZy5EZXByZWNhdGVkID0gMjtcbn0pKERpYWdub3N0aWNUYWcgfHwgKERpYWdub3N0aWNUYWcgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29kZURlc2NyaXB0aW9uIG5hbWVzcGFjZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGRlc2NyaXB0aW9ucyBmb3IgZGlhZ25vc3RpYyBjb2Rlcy5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCB2YXIgQ29kZURlc2NyaXB0aW9uO1xuKGZ1bmN0aW9uIChDb2RlRGVzY3JpcHRpb24pIHtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLmhyZWYpO1xuICAgIH1cbiAgICBDb2RlRGVzY3JpcHRpb24uaXMgPSBpcztcbn0pKENvZGVEZXNjcmlwdGlvbiB8fCAoQ29kZURlc2NyaXB0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIERpYWdub3N0aWMgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgRGlhZ25vc3RpY30gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgRGlhZ25vc3RpYztcbihmdW5jdGlvbiAoRGlhZ25vc3RpYykge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRGlhZ25vc3RpYyBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgbWVzc2FnZSwgc2V2ZXJpdHksIGNvZGUsIHNvdXJjZSwgcmVsYXRlZEluZm9ybWF0aW9uKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7IHJhbmdlLCBtZXNzYWdlIH07XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKHNldmVyaXR5KSkge1xuICAgICAgICAgICAgcmVzdWx0LnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzLmRlZmluZWQoY29kZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID0gY29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXMuZGVmaW5lZChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKHJlbGF0ZWRJbmZvcm1hdGlvbikpIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZWxhdGVkSW5mb3JtYXRpb24gPSByZWxhdGVkSW5mb3JtYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRGlhZ25vc3RpYy5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBEaWFnbm9zdGljfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSlcbiAgICAgICAgICAgICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSlcbiAgICAgICAgICAgICYmIElzLnN0cmluZyhjYW5kaWRhdGUubWVzc2FnZSlcbiAgICAgICAgICAgICYmIChJcy5udW1iZXIoY2FuZGlkYXRlLnNldmVyaXR5KSB8fCBJcy51bmRlZmluZWQoY2FuZGlkYXRlLnNldmVyaXR5KSlcbiAgICAgICAgICAgICYmIChJcy5pbnRlZ2VyKGNhbmRpZGF0ZS5jb2RlKSB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLmNvZGUpIHx8IElzLnVuZGVmaW5lZChjYW5kaWRhdGUuY29kZSkpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5jb2RlRGVzY3JpcHRpb24pIHx8IChJcy5zdHJpbmcoKF9hID0gY2FuZGlkYXRlLmNvZGVEZXNjcmlwdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhyZWYpKSlcbiAgICAgICAgICAgICYmIChJcy5zdHJpbmcoY2FuZGlkYXRlLnNvdXJjZSkgfHwgSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5zb3VyY2UpKVxuICAgICAgICAgICAgJiYgKElzLnVuZGVmaW5lZChjYW5kaWRhdGUucmVsYXRlZEluZm9ybWF0aW9uKSB8fCBJcy50eXBlZEFycmF5KGNhbmRpZGF0ZS5yZWxhdGVkSW5mb3JtYXRpb24sIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb24uaXMpKTtcbiAgICB9XG4gICAgRGlhZ25vc3RpYy5pcyA9IGlzO1xufSkoRGlhZ25vc3RpYyB8fCAoRGlhZ25vc3RpYyA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb21tYW5kIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIENvbW1hbmR9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIENvbW1hbmQ7XG4oZnVuY3Rpb24gKENvbW1hbmQpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IENvbW1hbmQgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUodGl0bGUsIGNvbW1hbmQsIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgdGl0bGUsIGNvbW1hbmQgfTtcbiAgICAgICAgaWYgKElzLmRlZmluZWQoYXJncykgJiYgYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQuYXJndW1lbnRzID0gYXJncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBDb21tYW5kLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIENvbW1hbmR9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS50aXRsZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5jb21tYW5kKTtcbiAgICB9XG4gICAgQ29tbWFuZC5pcyA9IGlzO1xufSkoQ29tbWFuZCB8fCAoQ29tbWFuZCA9IHt9KSk7XG4vKipcbiAqIFRoZSBUZXh0RWRpdCBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSByZXBsYWNlLFxuICogaW5zZXJ0IGFuZCBkZWxldGUgZWRpdHMgbW9yZSBlYXNpbHkuXG4gKi9cbmV4cG9ydCB2YXIgVGV4dEVkaXQ7XG4oZnVuY3Rpb24gKFRleHRFZGl0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlcGxhY2UgdGV4dCBlZGl0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgdGV4dCB0byBiZSByZXBsYWNlZC5cbiAgICAgKiBAcGFyYW0gbmV3VGV4dCBUaGUgbmV3IHRleHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwbGFjZShyYW5nZSwgbmV3VGV4dCkge1xuICAgICAgICByZXR1cm4geyByYW5nZSwgbmV3VGV4dCB9O1xuICAgIH1cbiAgICBUZXh0RWRpdC5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc2VydCB0ZXh0IGVkaXQuXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0byBpbnNlcnQgdGhlIHRleHQgYXQuXG4gICAgICogQHBhcmFtIG5ld1RleHQgVGhlIHRleHQgdG8gYmUgaW5zZXJ0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zZXJ0KHBvc2l0aW9uLCBuZXdUZXh0KSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlOiB7IHN0YXJ0OiBwb3NpdGlvbiwgZW5kOiBwb3NpdGlvbiB9LCBuZXdUZXh0IH07XG4gICAgfVxuICAgIFRleHRFZGl0Lmluc2VydCA9IGluc2VydDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZGVsZXRlIHRleHQgZWRpdC5cbiAgICAgKiBAcGFyYW0gcmFuZ2UgVGhlIHJhbmdlIG9mIHRleHQgdG8gYmUgZGVsZXRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWwocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIG5ld1RleHQ6ICcnIH07XG4gICAgfVxuICAgIFRleHRFZGl0LmRlbCA9IGRlbDtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKVxuICAgICAgICAgICAgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5uZXdUZXh0KVxuICAgICAgICAgICAgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLnJhbmdlKTtcbiAgICB9XG4gICAgVGV4dEVkaXQuaXMgPSBpcztcbn0pKFRleHRFZGl0IHx8IChUZXh0RWRpdCA9IHt9KSk7XG5leHBvcnQgdmFyIENoYW5nZUFubm90YXRpb247XG4oZnVuY3Rpb24gKENoYW5nZUFubm90YXRpb24pIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUobGFiZWwsIG5lZWRzQ29uZmlybWF0aW9uLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IGxhYmVsIH07XG4gICAgICAgIGlmIChuZWVkc0NvbmZpcm1hdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQubmVlZHNDb25maXJtYXRpb24gPSBuZWVkc0NvbmZpcm1hdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgQ2hhbmdlQW5ub3RhdGlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5sYWJlbCkgJiZcbiAgICAgICAgICAgIChJcy5ib29sZWFuKGNhbmRpZGF0ZS5uZWVkc0NvbmZpcm1hdGlvbikgfHwgY2FuZGlkYXRlLm5lZWRzQ29uZmlybWF0aW9uID09PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAoSXMuc3RyaW5nKGNhbmRpZGF0ZS5kZXNjcmlwdGlvbikgfHwgY2FuZGlkYXRlLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBDaGFuZ2VBbm5vdGF0aW9uLmlzID0gaXM7XG59KShDaGFuZ2VBbm5vdGF0aW9uIHx8IChDaGFuZ2VBbm5vdGF0aW9uID0ge30pKTtcbmV4cG9ydCB2YXIgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXI7XG4oZnVuY3Rpb24gKENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyKSB7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5zdHJpbmcoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMgPSBpcztcbn0pKENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyIHx8IChDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllciA9IHt9KSk7XG5leHBvcnQgdmFyIEFubm90YXRlZFRleHRFZGl0O1xuKGZ1bmN0aW9uIChBbm5vdGF0ZWRUZXh0RWRpdCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYW5ub3RhdGVkIHJlcGxhY2UgdGV4dCBlZGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiB0ZXh0IHRvIGJlIHJlcGxhY2VkLlxuICAgICAqIEBwYXJhbSBuZXdUZXh0IFRoZSBuZXcgdGV4dC5cbiAgICAgKiBAcGFyYW0gYW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJhbmdlLCBuZXdUZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlLCBuZXdUZXh0LCBhbm5vdGF0aW9uSWQ6IGFubm90YXRpb24gfTtcbiAgICB9XG4gICAgQW5ub3RhdGVkVGV4dEVkaXQucmVwbGFjZSA9IHJlcGxhY2U7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhbm5vdGF0ZWQgaW5zZXJ0IHRleHQgZWRpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gdG8gaW5zZXJ0IHRoZSB0ZXh0IGF0LlxuICAgICAqIEBwYXJhbSBuZXdUZXh0IFRoZSB0ZXh0IHRvIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSBhbm5vdGF0aW9uIFRoZSBhbm5vdGF0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc2VydChwb3NpdGlvbiwgbmV3VGV4dCwgYW5ub3RhdGlvbikge1xuICAgICAgICByZXR1cm4geyByYW5nZTogeyBzdGFydDogcG9zaXRpb24sIGVuZDogcG9zaXRpb24gfSwgbmV3VGV4dCwgYW5ub3RhdGlvbklkOiBhbm5vdGF0aW9uIH07XG4gICAgfVxuICAgIEFubm90YXRlZFRleHRFZGl0Lmluc2VydCA9IGluc2VydDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFubm90YXRlZCBkZWxldGUgdGV4dCBlZGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiB0ZXh0IHRvIGJlIGRlbGV0ZWQuXG4gICAgICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVsKHJhbmdlLCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlLCBuZXdUZXh0OiAnJywgYW5ub3RhdGlvbklkOiBhbm5vdGF0aW9uIH07XG4gICAgfVxuICAgIEFubm90YXRlZFRleHRFZGl0LmRlbCA9IGRlbDtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIFRleHRFZGl0LmlzKGNhbmRpZGF0ZSkgJiYgKENoYW5nZUFubm90YXRpb24uaXMoY2FuZGlkYXRlLmFubm90YXRpb25JZCkgfHwgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoY2FuZGlkYXRlLmFubm90YXRpb25JZCkpO1xuICAgIH1cbiAgICBBbm5vdGF0ZWRUZXh0RWRpdC5pcyA9IGlzO1xufSkoQW5ub3RhdGVkVGV4dEVkaXQgfHwgKEFubm90YXRlZFRleHRFZGl0ID0ge30pKTtcbi8qKlxuICogVGhlIFRleHREb2N1bWVudEVkaXQgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGVcbiAqIGFuIGVkaXQgdGhhdCBtYW5pcHVsYXRlcyBhIHRleHQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCB2YXIgVGV4dERvY3VtZW50RWRpdDtcbihmdW5jdGlvbiAoVGV4dERvY3VtZW50RWRpdCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYFRleHREb2N1bWVudEVkaXRgXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHRleHREb2N1bWVudCwgZWRpdHMpIHtcbiAgICAgICAgcmV0dXJuIHsgdGV4dERvY3VtZW50LCBlZGl0cyB9O1xuICAgIH1cbiAgICBUZXh0RG9jdW1lbnRFZGl0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSlcbiAgICAgICAgICAgICYmIE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllci5pcyhjYW5kaWRhdGUudGV4dERvY3VtZW50KVxuICAgICAgICAgICAgJiYgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuZWRpdHMpO1xuICAgIH1cbiAgICBUZXh0RG9jdW1lbnRFZGl0LmlzID0gaXM7XG59KShUZXh0RG9jdW1lbnRFZGl0IHx8IChUZXh0RG9jdW1lbnRFZGl0ID0ge30pKTtcbmV4cG9ydCB2YXIgQ3JlYXRlRmlsZTtcbihmdW5jdGlvbiAoQ3JlYXRlRmlsZSkge1xuICAgIGZ1bmN0aW9uIGNyZWF0ZSh1cmksIG9wdGlvbnMsIGFubm90YXRpb24pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGtpbmQ6ICdjcmVhdGUnLFxuICAgICAgICAgICAgdXJpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgKG9wdGlvbnMub3ZlcndyaXRlICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5pZ25vcmVJZkV4aXN0cyAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgcmVzdWx0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbm5vdGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hbm5vdGF0aW9uSWQgPSBhbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIENyZWF0ZUZpbGUuY3JlYXRlID0gY3JlYXRlO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUua2luZCA9PT0gJ2NyZWF0ZScgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS51cmkpICYmIChjYW5kaWRhdGUub3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAoKGNhbmRpZGF0ZS5vcHRpb25zLm92ZXJ3cml0ZSA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLm9wdGlvbnMub3ZlcndyaXRlKSkgJiYgKGNhbmRpZGF0ZS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzID09PSB1bmRlZmluZWQgfHwgSXMuYm9vbGVhbihjYW5kaWRhdGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSkgJiYgKGNhbmRpZGF0ZS5hbm5vdGF0aW9uSWQgPT09IHVuZGVmaW5lZCB8fCBDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhjYW5kaWRhdGUuYW5ub3RhdGlvbklkKSk7XG4gICAgfVxuICAgIENyZWF0ZUZpbGUuaXMgPSBpcztcbn0pKENyZWF0ZUZpbGUgfHwgKENyZWF0ZUZpbGUgPSB7fSkpO1xuZXhwb3J0IHZhciBSZW5hbWVGaWxlO1xuKGZ1bmN0aW9uIChSZW5hbWVGaWxlKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKG9sZFVyaSwgbmV3VXJpLCBvcHRpb25zLCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICBraW5kOiAncmVuYW1lJyxcbiAgICAgICAgICAgIG9sZFVyaSxcbiAgICAgICAgICAgIG5ld1VyaVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvcHRpb25zLm92ZXJ3cml0ZSAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuaWdub3JlSWZFeGlzdHMgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQuYW5ub3RhdGlvbklkID0gYW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBSZW5hbWVGaWxlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLmtpbmQgPT09ICdyZW5hbWUnICYmIElzLnN0cmluZyhjYW5kaWRhdGUub2xkVXJpKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLm5ld1VyaSkgJiYgKGNhbmRpZGF0ZS5vcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICgoY2FuZGlkYXRlLm9wdGlvbnMub3ZlcndyaXRlID09PSB1bmRlZmluZWQgfHwgSXMuYm9vbGVhbihjYW5kaWRhdGUub3B0aW9ucy5vdmVyd3JpdGUpKSAmJiAoY2FuZGlkYXRlLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMgPT09IHVuZGVmaW5lZCB8fCBJcy5ib29sZWFuKGNhbmRpZGF0ZS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpKSAmJiAoY2FuZGlkYXRlLmFubm90YXRpb25JZCA9PT0gdW5kZWZpbmVkIHx8IENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKGNhbmRpZGF0ZS5hbm5vdGF0aW9uSWQpKTtcbiAgICB9XG4gICAgUmVuYW1lRmlsZS5pcyA9IGlzO1xufSkoUmVuYW1lRmlsZSB8fCAoUmVuYW1lRmlsZSA9IHt9KSk7XG5leHBvcnQgdmFyIERlbGV0ZUZpbGU7XG4oZnVuY3Rpb24gKERlbGV0ZUZpbGUpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUodXJpLCBvcHRpb25zLCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICBraW5kOiAnZGVsZXRlJyxcbiAgICAgICAgICAgIHVyaVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvcHRpb25zLnJlY3Vyc2l2ZSAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQuYW5ub3RhdGlvbklkID0gYW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBEZWxldGVGaWxlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLmtpbmQgPT09ICdkZWxldGUnICYmIElzLnN0cmluZyhjYW5kaWRhdGUudXJpKSAmJiAoY2FuZGlkYXRlLm9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKChjYW5kaWRhdGUub3B0aW9ucy5yZWN1cnNpdmUgPT09IHVuZGVmaW5lZCB8fCBJcy5ib29sZWFuKGNhbmRpZGF0ZS5vcHRpb25zLnJlY3Vyc2l2ZSkpICYmIChjYW5kaWRhdGUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cyA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkpICYmIChjYW5kaWRhdGUuYW5ub3RhdGlvbklkID09PSB1bmRlZmluZWQgfHwgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoY2FuZGlkYXRlLmFubm90YXRpb25JZCkpO1xuICAgIH1cbiAgICBEZWxldGVGaWxlLmlzID0gaXM7XG59KShEZWxldGVGaWxlIHx8IChEZWxldGVGaWxlID0ge30pKTtcbmV4cG9ydCB2YXIgV29ya3NwYWNlRWRpdDtcbihmdW5jdGlvbiAoV29ya3NwYWNlRWRpdCkge1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5jaGFuZ2VzICE9PSB1bmRlZmluZWQgfHwgY2FuZGlkYXRlLmRvY3VtZW50Q2hhbmdlcyAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5kb2N1bWVudENoYW5nZXMgPT09IHVuZGVmaW5lZCB8fCBjYW5kaWRhdGUuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChjaGFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoSXMuc3RyaW5nKGNoYW5nZS5raW5kKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ3JlYXRlRmlsZS5pcyhjaGFuZ2UpIHx8IFJlbmFtZUZpbGUuaXMoY2hhbmdlKSB8fCBEZWxldGVGaWxlLmlzKGNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dERvY3VtZW50RWRpdC5pcyhjaGFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gICAgV29ya3NwYWNlRWRpdC5pcyA9IGlzO1xufSkoV29ya3NwYWNlRWRpdCB8fCAoV29ya3NwYWNlRWRpdCA9IHt9KSk7XG5jbGFzcyBUZXh0RWRpdENoYW5nZUltcGwge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRzLCBjaGFuZ2VBbm5vdGF0aW9ucykge1xuICAgICAgICB0aGlzLmVkaXRzID0gZWRpdHM7XG4gICAgICAgIHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMgPSBjaGFuZ2VBbm5vdGF0aW9ucztcbiAgICB9XG4gICAgaW5zZXJ0KHBvc2l0aW9uLCBuZXdUZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCBlZGl0O1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVkaXQgPSBUZXh0RWRpdC5pbnNlcnQocG9zaXRpb24sIG5ld1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKGFubm90YXRpb24pKSB7XG4gICAgICAgICAgICBpZCA9IGFubm90YXRpb247XG4gICAgICAgICAgICBlZGl0ID0gQW5ub3RhdGVkVGV4dEVkaXQuaW5zZXJ0KHBvc2l0aW9uLCBuZXdUZXh0LCBhbm5vdGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICBpZCA9IHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGFubm90YXRpb24pO1xuICAgICAgICAgICAgZWRpdCA9IEFubm90YXRlZFRleHRFZGl0Lmluc2VydChwb3NpdGlvbiwgbmV3VGV4dCwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdHMucHVzaChlZGl0KTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXBsYWNlKHJhbmdlLCBuZXdUZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCBlZGl0O1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVkaXQgPSBUZXh0RWRpdC5yZXBsYWNlKHJhbmdlLCBuZXdUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhhbm5vdGF0aW9uKSkge1xuICAgICAgICAgICAgaWQgPSBhbm5vdGF0aW9uO1xuICAgICAgICAgICAgZWRpdCA9IEFubm90YXRlZFRleHRFZGl0LnJlcGxhY2UocmFuZ2UsIG5ld1RleHQsIGFubm90YXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgIGlkID0gdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBlZGl0ID0gQW5ub3RhdGVkVGV4dEVkaXQucmVwbGFjZShyYW5nZSwgbmV3VGV4dCwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdHMucHVzaChlZGl0KTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUocmFuZ2UsIGFubm90YXRpb24pIHtcbiAgICAgICAgbGV0IGVkaXQ7XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKGFubm90YXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZWRpdCA9IFRleHRFZGl0LmRlbChyYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoYW5ub3RhdGlvbikpIHtcbiAgICAgICAgICAgIGlkID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGVkaXQgPSBBbm5vdGF0ZWRUZXh0RWRpdC5kZWwocmFuZ2UsIGFubm90YXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgIGlkID0gdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBlZGl0ID0gQW5ub3RhdGVkVGV4dEVkaXQuZGVsKHJhbmdlLCBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0cy5wdXNoKGVkaXQpO1xuICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZChlZGl0KSB7XG4gICAgICAgIHRoaXMuZWRpdHMucHVzaChlZGl0KTtcbiAgICB9XG4gICAgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0cztcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuZWRpdHMuc3BsaWNlKDAsIHRoaXMuZWRpdHMubGVuZ3RoKTtcbiAgICB9XG4gICAgYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLmApO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBIGhlbHBlciBjbGFzc1xuICovXG5jbGFzcyBDaGFuZ2VBbm5vdGF0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGFubm90YXRpb25zO1xuICAgICAgICB0aGlzLl9jb3VudGVyID0gMDtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgfVxuICAgIGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25zO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIG1hbmFnZShpZE9yQW5ub3RhdGlvbiwgYW5ub3RhdGlvbikge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmIChDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhpZE9yQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICAgIGlkID0gaWRPckFubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZCA9IHRoaXMubmV4dElkKCk7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gaWRPckFubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Fubm90YXRpb25zW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElkICR7aWR9IGlzIGFscmVhZHkgaW4gdXNlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbm5vdGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbm5vdGF0aW9uc1tpZF0gPSBhbm5vdGF0aW9uO1xuICAgICAgICB0aGlzLl9zaXplKys7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgbmV4dElkKCkge1xuICAgICAgICB0aGlzLl9jb3VudGVyKys7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuLyoqXG4gKiBBIHdvcmtzcGFjZSBjaGFuZ2UgaGVscHMgY29uc3RydWN0aW5nIGNoYW5nZXMgdG8gYSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VDaGFuZ2Uge1xuICAgIGNvbnN0cnVjdG9yKHdvcmtzcGFjZUVkaXQpIHtcbiAgICAgICAgdGhpcy5fdGV4dEVkaXRDaGFuZ2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgaWYgKHdvcmtzcGFjZUVkaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fd29ya3NwYWNlRWRpdCA9IHdvcmtzcGFjZUVkaXQ7XG4gICAgICAgICAgICBpZiAod29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyA9IG5ldyBDaGFuZ2VBbm5vdGF0aW9ucyh3b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zID0gdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCk7XG4gICAgICAgICAgICAgICAgd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChUZXh0RG9jdW1lbnRFZGl0LmlzKGNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFZGl0Q2hhbmdlID0gbmV3IFRleHRFZGl0Q2hhbmdlSW1wbChjaGFuZ2UuZWRpdHMsIHRoaXMuX2NoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tjaGFuZ2UudGV4dERvY3VtZW50LnVyaV0gPSB0ZXh0RWRpdENoYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod29ya3NwYWNlRWRpdC5jaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMod29ya3NwYWNlRWRpdC5jaGFuZ2VzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEVkaXRDaGFuZ2UgPSBuZXcgVGV4dEVkaXRDaGFuZ2VJbXBsKHdvcmtzcGFjZUVkaXQuY2hhbmdlc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2tleV0gPSB0ZXh0RWRpdENoYW5nZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtzcGFjZUVkaXQgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHtAbGluayBXb3Jrc3BhY2VFZGl0fSBsaXRlcmFsXG4gICAgICogdXNlIHRvIGJlIHJldHVybmVkIGZyb20gYSB3b3Jrc3BhY2UgZWRpdCBvcGVyYXRpb24gbGlrZSByZW5hbWUuXG4gICAgICovXG4gICAgZ2V0IGVkaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucyA9IHRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93b3Jrc3BhY2VFZGl0O1xuICAgIH1cbiAgICBnZXRUZXh0RWRpdENoYW5nZShrZXkpIHtcbiAgICAgICAgaWYgKE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllci5pcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRleHREb2N1bWVudCA9IHsgdXJpOiBrZXkudXJpLCB2ZXJzaW9uOiBrZXkudmVyc2lvbiB9O1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0ZXh0RG9jdW1lbnQudXJpXTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdHMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0RG9jdW1lbnRFZGl0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0RG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGVkaXRzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHRleHREb2N1bWVudEVkaXQpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0RWRpdENoYW5nZUltcGwoZWRpdHMsIHRoaXMuX2NoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdENoYW5nZXNbdGV4dERvY3VtZW50LnVyaV0gPSByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX3RleHRFZGl0Q2hhbmdlc1trZXldO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWRpdHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXNba2V5XSA9IGVkaXRzO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0RWRpdENoYW5nZUltcGwoZWRpdHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0Q2hhbmdlc1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0RG9jdW1lbnRDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMgPSBuZXcgQ2hhbmdlQW5ub3RhdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzID0gW107XG4gICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zID0gdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdENoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZUZpbGUodXJpLCBvcHRpb25zT3JBbm5vdGF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5ub3RhdGlvbjtcbiAgICAgICAgaWYgKENoYW5nZUFubm90YXRpb24uaXMob3B0aW9uc09yQW5ub3RhdGlvbikgfHwgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMob3B0aW9uc09yQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBvcHRpb25zT3JBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNPckFubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9wZXJhdGlvbjtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAoYW5ub3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcGVyYXRpb24gPSBDcmVhdGVGaWxlLmNyZWF0ZSh1cmksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQgPSBDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhhbm5vdGF0aW9uKSA/IGFubm90YXRpb24gOiB0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBvcGVyYXRpb24gPSBDcmVhdGVGaWxlLmNyZWF0ZSh1cmksIG9wdGlvbnMsIGlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG9wZXJhdGlvbik7XG4gICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuYW1lRmlsZShvbGRVcmksIG5ld1VyaSwgb3B0aW9uc09yQW5ub3RhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFubm90YXRpb247XG4gICAgICAgIGlmIChDaGFuZ2VBbm5vdGF0aW9uLmlzKG9wdGlvbnNPckFubm90YXRpb24pIHx8IENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKG9wdGlvbnNPckFubm90YXRpb24pKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gb3B0aW9uc09yQW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcGVyYXRpb247XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKGFubm90YXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3BlcmF0aW9uID0gUmVuYW1lRmlsZS5jcmVhdGUob2xkVXJpLCBuZXdVcmksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQgPSBDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhhbm5vdGF0aW9uKSA/IGFubm90YXRpb24gOiB0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBvcGVyYXRpb24gPSBSZW5hbWVGaWxlLmNyZWF0ZShvbGRVcmksIG5ld1VyaSwgb3B0aW9ucywgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gob3BlcmF0aW9uKTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWxldGVGaWxlKHVyaSwgb3B0aW9uc09yQW5ub3RhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFubm90YXRpb247XG4gICAgICAgIGlmIChDaGFuZ2VBbm5vdGF0aW9uLmlzKG9wdGlvbnNPckFubm90YXRpb24pIHx8IENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKG9wdGlvbnNPckFubm90YXRpb24pKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gb3B0aW9uc09yQW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcGVyYXRpb247XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKGFubm90YXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3BlcmF0aW9uID0gRGVsZXRlRmlsZS5jcmVhdGUodXJpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkID0gQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoYW5ub3RhdGlvbikgPyBhbm5vdGF0aW9uIDogdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGFubm90YXRpb24pO1xuICAgICAgICAgICAgb3BlcmF0aW9uID0gRGVsZXRlRmlsZS5jcmVhdGUodXJpLCBvcHRpb25zLCBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChvcGVyYXRpb24pO1xuICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgVGV4dERvY3VtZW50SWRlbnRpZmllciBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBUZXh0RG9jdW1lbnRJZGVudGlmaWVyfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuKGZ1bmN0aW9uIChUZXh0RG9jdW1lbnRJZGVudGlmaWVyKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBUZXh0RG9jdW1lbnRJZGVudGlmaWVyIGxpdGVyYWwuXG4gICAgICogQHBhcmFtIHVyaSBUaGUgZG9jdW1lbnQncyB1cmkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSkge1xuICAgICAgICByZXR1cm4geyB1cmkgfTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50SWRlbnRpZmllci5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBUZXh0RG9jdW1lbnRJZGVudGlmaWVyfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudXJpKTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50SWRlbnRpZmllci5pcyA9IGlzO1xufSkoVGV4dERvY3VtZW50SWRlbnRpZmllciB8fCAoVGV4dERvY3VtZW50SWRlbnRpZmllciA9IHt9KSk7XG4vKipcbiAqIFRoZSBWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXJ9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXI7XG4oZnVuY3Rpb24gKFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgbGl0ZXJhbC5cbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgZG9jdW1lbnQncyB2ZXJzaW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZSh1cmksIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHsgdXJpLCB2ZXJzaW9uIH07XG4gICAgfVxuICAgIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLmRlZmluZWQoY2FuZGlkYXRlKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLnVyaSkgJiYgSXMuaW50ZWdlcihjYW5kaWRhdGUudmVyc2lvbik7XG4gICAgfVxuICAgIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIuaXMgPSBpcztcbn0pKFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgfHwgKFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgPSB7fSkpO1xuLyoqXG4gKiBUaGUgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcn0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuKGZ1bmN0aW9uIChPcHRpb25hbFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciBsaXRlcmFsLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIGRvY3VtZW50J3MgdXJpLlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBkb2N1bWVudCdzIHZlcnNpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4geyB1cmksIHZlcnNpb24gfTtcbiAgICB9XG4gICAgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLmRlZmluZWQoY2FuZGlkYXRlKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLnVyaSkgJiYgKGNhbmRpZGF0ZS52ZXJzaW9uID09PSBudWxsIHx8IElzLmludGVnZXIoY2FuZGlkYXRlLnZlcnNpb24pKTtcbiAgICB9XG4gICAgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyLmlzID0gaXM7XG59KShPcHRpb25hbFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgfHwgKE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciA9IHt9KSk7XG4vKipcbiAqIFRoZSBUZXh0RG9jdW1lbnRJdGVtIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFRleHREb2N1bWVudEl0ZW19IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIFRleHREb2N1bWVudEl0ZW07XG4oZnVuY3Rpb24gKFRleHREb2N1bWVudEl0ZW0pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFRleHREb2N1bWVudEl0ZW0gbGl0ZXJhbC5cbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VJZCBUaGUgZG9jdW1lbnQncyBsYW5ndWFnZSBpZGVudGlmaWVyLlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBkb2N1bWVudCdzIHZlcnNpb24gbnVtYmVyLlxuICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBkb2N1bWVudCdzIHRleHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSwgbGFuZ3VhZ2VJZCwgdmVyc2lvbiwgdGV4dCkge1xuICAgICAgICByZXR1cm4geyB1cmksIGxhbmd1YWdlSWQsIHZlcnNpb24sIHRleHQgfTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50SXRlbS5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBUZXh0RG9jdW1lbnRJdGVtfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudXJpKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLmxhbmd1YWdlSWQpICYmIElzLmludGVnZXIoY2FuZGlkYXRlLnZlcnNpb24pICYmIElzLnN0cmluZyhjYW5kaWRhdGUudGV4dCk7XG4gICAgfVxuICAgIFRleHREb2N1bWVudEl0ZW0uaXMgPSBpcztcbn0pKFRleHREb2N1bWVudEl0ZW0gfHwgKFRleHREb2N1bWVudEl0ZW0gPSB7fSkpO1xuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgdHlwZSB0aGF0IGEgY2xpZW50IHN1cHBvcnRzIGluIHZhcmlvdXNcbiAqIHJlc3VsdCBsaXRlcmFscyBsaWtlIGBIb3ZlcmAsIGBQYXJhbWV0ZXJJbmZvYCBvciBgQ29tcGxldGlvbkl0ZW1gLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgYE1hcmt1cEtpbmRzYCBtdXN0IG5vdCBzdGFydCB3aXRoIGEgYCRgLiBUaGlzIGtpbmRzXG4gKiBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlLlxuICovXG5leHBvcnQgdmFyIE1hcmt1cEtpbmQ7XG4oZnVuY3Rpb24gKE1hcmt1cEtpbmQpIHtcbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0IGlzIHN1cHBvcnRlZCBhcyBhIGNvbnRlbnQgZm9ybWF0XG4gICAgICovXG4gICAgTWFya3VwS2luZC5QbGFpblRleHQgPSAncGxhaW50ZXh0JztcbiAgICAvKipcbiAgICAgKiBNYXJrZG93biBpcyBzdXBwb3J0ZWQgYXMgYSBjb250ZW50IGZvcm1hdFxuICAgICAqL1xuICAgIE1hcmt1cEtpbmQuTWFya2Rvd24gPSAnbWFya2Rvd24nO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHZhbHVlIG9mIHRoZSB7QGxpbmsgTWFya3VwS2luZH0gdHlwZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSA9PT0gTWFya3VwS2luZC5QbGFpblRleHQgfHwgY2FuZGlkYXRlID09PSBNYXJrdXBLaW5kLk1hcmtkb3duO1xuICAgIH1cbiAgICBNYXJrdXBLaW5kLmlzID0gaXM7XG59KShNYXJrdXBLaW5kIHx8IChNYXJrdXBLaW5kID0ge30pKTtcbmV4cG9ydCB2YXIgTWFya3VwQ29udGVudDtcbihmdW5jdGlvbiAoTWFya3VwQ29udGVudCkge1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBjb25mb3JtcyB0byB0aGUge0BsaW5rIE1hcmt1cENvbnRlbnR9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwodmFsdWUpICYmIE1hcmt1cEtpbmQuaXMoY2FuZGlkYXRlLmtpbmQpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudmFsdWUpO1xuICAgIH1cbiAgICBNYXJrdXBDb250ZW50LmlzID0gaXM7XG59KShNYXJrdXBDb250ZW50IHx8IChNYXJrdXBDb250ZW50ID0ge30pKTtcbi8qKlxuICogVGhlIGtpbmQgb2YgYSBjb21wbGV0aW9uIGVudHJ5LlxuICovXG5leHBvcnQgdmFyIENvbXBsZXRpb25JdGVtS2luZDtcbihmdW5jdGlvbiAoQ29tcGxldGlvbkl0ZW1LaW5kKSB7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLlRleHQgPSAxO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5NZXRob2QgPSAyO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5GdW5jdGlvbiA9IDM7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLkNvbnN0cnVjdG9yID0gNDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuRmllbGQgPSA1O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5WYXJpYWJsZSA9IDY7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLkNsYXNzID0gNztcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuSW50ZXJmYWNlID0gODtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuTW9kdWxlID0gOTtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuUHJvcGVydHkgPSAxMDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuVW5pdCA9IDExO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5WYWx1ZSA9IDEyO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5FbnVtID0gMTM7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLktleXdvcmQgPSAxNDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuU25pcHBldCA9IDE1O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5Db2xvciA9IDE2O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5GaWxlID0gMTc7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLlJlZmVyZW5jZSA9IDE4O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5Gb2xkZXIgPSAxOTtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuRW51bU1lbWJlciA9IDIwO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5Db25zdGFudCA9IDIxO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5TdHJ1Y3QgPSAyMjtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuRXZlbnQgPSAyMztcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuT3BlcmF0b3IgPSAyNDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuVHlwZVBhcmFtZXRlciA9IDI1O1xufSkoQ29tcGxldGlvbkl0ZW1LaW5kIHx8IChDb21wbGV0aW9uSXRlbUtpbmQgPSB7fSkpO1xuLyoqXG4gKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGluc2VydCB0ZXh0IGluIGEgY29tcGxldGlvbiBpdGVtIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhc1xuICogcGxhaW4gdGV4dCBvciBhIHNuaXBwZXQuXG4gKi9cbmV4cG9ydCB2YXIgSW5zZXJ0VGV4dEZvcm1hdDtcbihmdW5jdGlvbiAoSW5zZXJ0VGV4dEZvcm1hdCkge1xuICAgIC8qKlxuICAgICAqIFRoZSBwcmltYXJ5IHRleHQgdG8gYmUgaW5zZXJ0ZWQgaXMgdHJlYXRlZCBhcyBhIHBsYWluIHN0cmluZy5cbiAgICAgKi9cbiAgICBJbnNlcnRUZXh0Rm9ybWF0LlBsYWluVGV4dCA9IDE7XG4gICAgLyoqXG4gICAgICogVGhlIHByaW1hcnkgdGV4dCB0byBiZSBpbnNlcnRlZCBpcyB0cmVhdGVkIGFzIGEgc25pcHBldC5cbiAgICAgKlxuICAgICAqIEEgc25pcHBldCBjYW4gZGVmaW5lIHRhYiBzdG9wcyBhbmQgcGxhY2Vob2xkZXJzIHdpdGggYCQxYCwgYCQyYFxuICAgICAqIGFuZCBgJHszOmZvb31gLiBgJDBgIGRlZmluZXMgdGhlIGZpbmFsIHRhYiBzdG9wLCBpdCBkZWZhdWx0cyB0b1xuICAgICAqIHRoZSBlbmQgb2YgdGhlIHNuaXBwZXQuIFBsYWNlaG9sZGVycyB3aXRoIGVxdWFsIGlkZW50aWZpZXJzIGFyZSBsaW5rZWQsXG4gICAgICogdGhhdCBpcyB0eXBpbmcgaW4gb25lIHdpbGwgdXBkYXRlIG90aGVycyB0b28uXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbzogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3NuaXBwZXRfc3ludGF4XG4gICAgICovXG4gICAgSW5zZXJ0VGV4dEZvcm1hdC5TbmlwcGV0ID0gMjtcbn0pKEluc2VydFRleHRGb3JtYXQgfHwgKEluc2VydFRleHRGb3JtYXQgPSB7fSkpO1xuLyoqXG4gKiBDb21wbGV0aW9uIGl0ZW0gdGFncyBhcmUgZXh0cmEgYW5ub3RhdGlvbnMgdGhhdCB0d2VhayB0aGUgcmVuZGVyaW5nIG9mIGEgY29tcGxldGlvblxuICogaXRlbS5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCB2YXIgQ29tcGxldGlvbkl0ZW1UYWc7XG4oZnVuY3Rpb24gKENvbXBsZXRpb25JdGVtVGFnKSB7XG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgY29tcGxldGlvbiBhcyBvYnNvbGV0ZSwgdXN1YWxseSB1c2luZyBhIHN0cmlrZS1vdXQuXG4gICAgICovXG4gICAgQ29tcGxldGlvbkl0ZW1UYWcuRGVwcmVjYXRlZCA9IDE7XG59KShDb21wbGV0aW9uSXRlbVRhZyB8fCAoQ29tcGxldGlvbkl0ZW1UYWcgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5zZXJ0UmVwbGFjZUVkaXQgbmFtZXNwYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggaW5zZXJ0IC8gcmVwbGFjZSBlZGl0cy5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCB2YXIgSW5zZXJ0UmVwbGFjZUVkaXQ7XG4oZnVuY3Rpb24gKEluc2VydFJlcGxhY2VFZGl0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnNlcnQgLyByZXBsYWNlIGVkaXRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobmV3VGV4dCwgaW5zZXJ0LCByZXBsYWNlKSB7XG4gICAgICAgIHJldHVybiB7IG5ld1RleHQsIGluc2VydCwgcmVwbGFjZSB9O1xuICAgIH1cbiAgICBJbnNlcnRSZXBsYWNlRWRpdC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBJbnNlcnRSZXBsYWNlRWRpdH0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICYmIElzLnN0cmluZyhjYW5kaWRhdGUubmV3VGV4dCkgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLmluc2VydCkgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLnJlcGxhY2UpO1xuICAgIH1cbiAgICBJbnNlcnRSZXBsYWNlRWRpdC5pcyA9IGlzO1xufSkoSW5zZXJ0UmVwbGFjZUVkaXQgfHwgKEluc2VydFJlcGxhY2VFZGl0ID0ge30pKTtcbi8qKlxuICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAqIGl0ZW0gaW5zZXJ0aW9uLlxuICpcbiAqIEBzaW5jZSAzLjE2LjBcbiAqL1xuZXhwb3J0IHZhciBJbnNlcnRUZXh0TW9kZTtcbihmdW5jdGlvbiAoSW5zZXJ0VGV4dE1vZGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zZXJ0aW9uIG9yIHJlcGxhY2Ugc3RyaW5ncyBpcyB0YWtlbiBhcyBpdCBpcy4gSWYgdGhlXG4gICAgICogdmFsdWUgaXMgbXVsdGkgbGluZSB0aGUgbGluZXMgYmVsb3cgdGhlIGN1cnNvciB3aWxsIGJlXG4gICAgICogaW5zZXJ0ZWQgdXNpbmcgdGhlIGluZGVudGF0aW9uIGRlZmluZWQgaW4gdGhlIHN0cmluZyB2YWx1ZS5cbiAgICAgKiBUaGUgY2xpZW50IHdpbGwgbm90IGFwcGx5IGFueSBraW5kIG9mIGFkanVzdG1lbnRzIHRvIHRoZVxuICAgICAqIHN0cmluZy5cbiAgICAgKi9cbiAgICBJbnNlcnRUZXh0TW9kZS5hc0lzID0gMTtcbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdG9yIGFkanVzdHMgbGVhZGluZyB3aGl0ZXNwYWNlIG9mIG5ldyBsaW5lcyBzbyB0aGF0XG4gICAgICogdGhleSBtYXRjaCB0aGUgaW5kZW50YXRpb24gdXAgdG8gdGhlIGN1cnNvciBvZiB0aGUgbGluZSBmb3JcbiAgICAgKiB3aGljaCB0aGUgaXRlbSBpcyBhY2NlcHRlZC5cbiAgICAgKlxuICAgICAqIENvbnNpZGVyIGEgbGluZSBsaWtlIHRoaXM6IDwydGFicz48Y3Vyc29yPjwzdGFicz5mb28uIEFjY2VwdGluZyBhXG4gICAgICogbXVsdGkgbGluZSBjb21wbGV0aW9uIGl0ZW0gaXMgaW5kZW50ZWQgdXNpbmcgMiB0YWJzIGFuZCBhbGxcbiAgICAgKiBmb2xsb3dpbmcgbGluZXMgaW5zZXJ0ZWQgd2lsbCBiZSBpbmRlbnRlZCB1c2luZyAyIHRhYnMgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBJbnNlcnRUZXh0TW9kZS5hZGp1c3RJbmRlbnRhdGlvbiA9IDI7XG59KShJbnNlcnRUZXh0TW9kZSB8fCAoSW5zZXJ0VGV4dE1vZGUgPSB7fSkpO1xuZXhwb3J0IHZhciBDb21wbGV0aW9uSXRlbUxhYmVsRGV0YWlscztcbihmdW5jdGlvbiAoQ29tcGxldGlvbkl0ZW1MYWJlbERldGFpbHMpIHtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiAoSXMuc3RyaW5nKGNhbmRpZGF0ZS5kZXRhaWwpIHx8IGNhbmRpZGF0ZS5kZXRhaWwgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIChJcy5zdHJpbmcoY2FuZGlkYXRlLmRlc2NyaXB0aW9uKSB8fCBjYW5kaWRhdGUuZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIENvbXBsZXRpb25JdGVtTGFiZWxEZXRhaWxzLmlzID0gaXM7XG59KShDb21wbGV0aW9uSXRlbUxhYmVsRGV0YWlscyB8fCAoQ29tcGxldGlvbkl0ZW1MYWJlbERldGFpbHMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29tcGxldGlvbkl0ZW0gbmFtZXNwYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGhcbiAqIGNvbXBsZXRpb24gaXRlbXMuXG4gKi9cbmV4cG9ydCB2YXIgQ29tcGxldGlvbkl0ZW07XG4oZnVuY3Rpb24gKENvbXBsZXRpb25JdGVtKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY29tcGxldGlvbiBpdGVtIGFuZCBzZWVkIGl0IHdpdGggYSBsYWJlbC5cbiAgICAgKiBAcGFyYW0gbGFiZWwgVGhlIGNvbXBsZXRpb24gaXRlbSdzIGxhYmVsXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7IGxhYmVsIH07XG4gICAgfVxuICAgIENvbXBsZXRpb25JdGVtLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKENvbXBsZXRpb25JdGVtIHx8IChDb21wbGV0aW9uSXRlbSA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb21wbGV0aW9uTGlzdCBuYW1lc3BhY2UgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aFxuICogY29tcGxldGlvbiBsaXN0cy5cbiAqL1xuZXhwb3J0IHZhciBDb21wbGV0aW9uTGlzdDtcbihmdW5jdGlvbiAoQ29tcGxldGlvbkxpc3QpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbXBsZXRpb24gbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyBUaGUgY29tcGxldGlvbiBpdGVtcy5cbiAgICAgKiBAcGFyYW0gaXNJbmNvbXBsZXRlIFRoZSBsaXN0IGlzIG5vdCBjb21wbGV0ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoaXRlbXMsIGlzSW5jb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4geyBpdGVtczogaXRlbXMgPyBpdGVtcyA6IFtdLCBpc0luY29tcGxldGU6ICEhaXNJbmNvbXBsZXRlIH07XG4gICAgfVxuICAgIENvbXBsZXRpb25MaXN0LmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKENvbXBsZXRpb25MaXN0IHx8IChDb21wbGV0aW9uTGlzdCA9IHt9KSk7XG5leHBvcnQgdmFyIE1hcmtlZFN0cmluZztcbihmdW5jdGlvbiAoTWFya2VkU3RyaW5nKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG1hcmtlZCBzdHJpbmcgZnJvbSBwbGFpbiB0ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBsYWluVGV4dCBUaGUgcGxhaW4gdGV4dC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tUGxhaW5UZXh0KHBsYWluVGV4dCkge1xuICAgICAgICByZXR1cm4gcGxhaW5UZXh0LnJlcGxhY2UoL1tcXFxcYCpfe31bXFxdKCkjK1xcLS4hXS9nLCAnXFxcXCQmJyk7IC8vIGVzY2FwZSBtYXJrZG93biBzeW50YXggdG9rZW5zOiBodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duL3N5bnRheCNiYWNrc2xhc2hcbiAgICB9XG4gICAgTWFya2VkU3RyaW5nLmZyb21QbGFpblRleHQgPSBmcm9tUGxhaW5UZXh0O1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBjb25mb3JtcyB0byB0aGUge0BsaW5rIE1hcmtlZFN0cmluZ30gdHlwZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLnN0cmluZyhjYW5kaWRhdGUpIHx8IChJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5sYW5ndWFnZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS52YWx1ZSkpO1xuICAgIH1cbiAgICBNYXJrZWRTdHJpbmcuaXMgPSBpcztcbn0pKE1hcmtlZFN0cmluZyB8fCAoTWFya2VkU3RyaW5nID0ge30pKTtcbmV4cG9ydCB2YXIgSG92ZXI7XG4oZnVuY3Rpb24gKEhvdmVyKSB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgSG92ZXJ9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiAhIWNhbmRpZGF0ZSAmJiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgKE1hcmt1cENvbnRlbnQuaXMoY2FuZGlkYXRlLmNvbnRlbnRzKSB8fFxuICAgICAgICAgICAgTWFya2VkU3RyaW5nLmlzKGNhbmRpZGF0ZS5jb250ZW50cykgfHxcbiAgICAgICAgICAgIElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLmNvbnRlbnRzLCBNYXJrZWRTdHJpbmcuaXMpKSAmJiAodmFsdWUucmFuZ2UgPT09IHVuZGVmaW5lZCB8fCBSYW5nZS5pcyh2YWx1ZS5yYW5nZSkpO1xuICAgIH1cbiAgICBIb3Zlci5pcyA9IGlzO1xufSkoSG92ZXIgfHwgKEhvdmVyID0ge30pKTtcbi8qKlxuICogVGhlIFBhcmFtZXRlckluZm9ybWF0aW9uIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFBhcmFtZXRlckluZm9ybWF0aW9ufSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBQYXJhbWV0ZXJJbmZvcm1hdGlvbjtcbihmdW5jdGlvbiAoUGFyYW1ldGVySW5mb3JtYXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHBhcmFtZXRlciBpbmZvcm1hdGlvbiBsaXRlcmFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhYmVsIEEgbGFiZWwgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBkb2N1bWVudGF0aW9uIEEgZG9jIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobGFiZWwsIGRvY3VtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50YXRpb24gPyB7IGxhYmVsLCBkb2N1bWVudGF0aW9uIH0gOiB7IGxhYmVsIH07XG4gICAgfVxuICAgIFBhcmFtZXRlckluZm9ybWF0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKFBhcmFtZXRlckluZm9ybWF0aW9uIHx8IChQYXJhbWV0ZXJJbmZvcm1hdGlvbiA9IHt9KSk7XG4vKipcbiAqIFRoZSBTaWduYXR1cmVJbmZvcm1hdGlvbiBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBTaWduYXR1cmVJbmZvcm1hdGlvbn0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgU2lnbmF0dXJlSW5mb3JtYXRpb247XG4oZnVuY3Rpb24gKFNpZ25hdHVyZUluZm9ybWF0aW9uKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKGxhYmVsLCBkb2N1bWVudGF0aW9uLCAuLi5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7IGxhYmVsIH07XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKGRvY3VtZW50YXRpb24pKSB7XG4gICAgICAgICAgICByZXN1bHQuZG9jdW1lbnRhdGlvbiA9IGRvY3VtZW50YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzLmRlZmluZWQocGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24uY3JlYXRlID0gY3JlYXRlO1xufSkoU2lnbmF0dXJlSW5mb3JtYXRpb24gfHwgKFNpZ25hdHVyZUluZm9ybWF0aW9uID0ge30pKTtcbi8qKlxuICogQSBkb2N1bWVudCBoaWdobGlnaHQga2luZC5cbiAqL1xuZXhwb3J0IHZhciBEb2N1bWVudEhpZ2hsaWdodEtpbmQ7XG4oZnVuY3Rpb24gKERvY3VtZW50SGlnaGxpZ2h0S2luZCkge1xuICAgIC8qKlxuICAgICAqIEEgdGV4dHVhbCBvY2N1cnJlbmNlLlxuICAgICAqL1xuICAgIERvY3VtZW50SGlnaGxpZ2h0S2luZC5UZXh0ID0gMTtcbiAgICAvKipcbiAgICAgKiBSZWFkLWFjY2VzcyBvZiBhIHN5bWJvbCwgbGlrZSByZWFkaW5nIGEgdmFyaWFibGUuXG4gICAgICovXG4gICAgRG9jdW1lbnRIaWdobGlnaHRLaW5kLlJlYWQgPSAyO1xuICAgIC8qKlxuICAgICAqIFdyaXRlLWFjY2VzcyBvZiBhIHN5bWJvbCwgbGlrZSB3cml0aW5nIHRvIGEgdmFyaWFibGUuXG4gICAgICovXG4gICAgRG9jdW1lbnRIaWdobGlnaHRLaW5kLldyaXRlID0gMztcbn0pKERvY3VtZW50SGlnaGxpZ2h0S2luZCB8fCAoRG9jdW1lbnRIaWdobGlnaHRLaW5kID0ge30pKTtcbi8qKlxuICogRG9jdW1lbnRIaWdobGlnaHQgbmFtZXNwYWNlIHRvIHByb3ZpZGUgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBEb2N1bWVudEhpZ2hsaWdodH0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgRG9jdW1lbnRIaWdobGlnaHQ7XG4oZnVuY3Rpb24gKERvY3VtZW50SGlnaGxpZ2h0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgRG9jdW1lbnRIaWdobGlnaHQgb2JqZWN0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2UgdGhlIGhpZ2hsaWdodCBhcHBsaWVzIHRvLlxuICAgICAqIEBwYXJhbSBraW5kIFRoZSBoaWdobGlnaHQga2luZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwga2luZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0geyByYW5nZSB9O1xuICAgICAgICBpZiAoSXMubnVtYmVyKGtpbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQua2luZCA9IGtpbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRG9jdW1lbnRIaWdobGlnaHQuY3JlYXRlID0gY3JlYXRlO1xufSkoRG9jdW1lbnRIaWdobGlnaHQgfHwgKERvY3VtZW50SGlnaGxpZ2h0ID0ge30pKTtcbi8qKlxuICogQSBzeW1ib2wga2luZC5cbiAqL1xuZXhwb3J0IHZhciBTeW1ib2xLaW5kO1xuKGZ1bmN0aW9uIChTeW1ib2xLaW5kKSB7XG4gICAgU3ltYm9sS2luZC5GaWxlID0gMTtcbiAgICBTeW1ib2xLaW5kLk1vZHVsZSA9IDI7XG4gICAgU3ltYm9sS2luZC5OYW1lc3BhY2UgPSAzO1xuICAgIFN5bWJvbEtpbmQuUGFja2FnZSA9IDQ7XG4gICAgU3ltYm9sS2luZC5DbGFzcyA9IDU7XG4gICAgU3ltYm9sS2luZC5NZXRob2QgPSA2O1xuICAgIFN5bWJvbEtpbmQuUHJvcGVydHkgPSA3O1xuICAgIFN5bWJvbEtpbmQuRmllbGQgPSA4O1xuICAgIFN5bWJvbEtpbmQuQ29uc3RydWN0b3IgPSA5O1xuICAgIFN5bWJvbEtpbmQuRW51bSA9IDEwO1xuICAgIFN5bWJvbEtpbmQuSW50ZXJmYWNlID0gMTE7XG4gICAgU3ltYm9sS2luZC5GdW5jdGlvbiA9IDEyO1xuICAgIFN5bWJvbEtpbmQuVmFyaWFibGUgPSAxMztcbiAgICBTeW1ib2xLaW5kLkNvbnN0YW50ID0gMTQ7XG4gICAgU3ltYm9sS2luZC5TdHJpbmcgPSAxNTtcbiAgICBTeW1ib2xLaW5kLk51bWJlciA9IDE2O1xuICAgIFN5bWJvbEtpbmQuQm9vbGVhbiA9IDE3O1xuICAgIFN5bWJvbEtpbmQuQXJyYXkgPSAxODtcbiAgICBTeW1ib2xLaW5kLk9iamVjdCA9IDE5O1xuICAgIFN5bWJvbEtpbmQuS2V5ID0gMjA7XG4gICAgU3ltYm9sS2luZC5OdWxsID0gMjE7XG4gICAgU3ltYm9sS2luZC5FbnVtTWVtYmVyID0gMjI7XG4gICAgU3ltYm9sS2luZC5TdHJ1Y3QgPSAyMztcbiAgICBTeW1ib2xLaW5kLkV2ZW50ID0gMjQ7XG4gICAgU3ltYm9sS2luZC5PcGVyYXRvciA9IDI1O1xuICAgIFN5bWJvbEtpbmQuVHlwZVBhcmFtZXRlciA9IDI2O1xufSkoU3ltYm9sS2luZCB8fCAoU3ltYm9sS2luZCA9IHt9KSk7XG4vKipcbiAqIFN5bWJvbCB0YWdzIGFyZSBleHRyYSBhbm5vdGF0aW9ucyB0aGF0IHR3ZWFrIHRoZSByZW5kZXJpbmcgb2YgYSBzeW1ib2wuXG4gKlxuICogQHNpbmNlIDMuMTZcbiAqL1xuZXhwb3J0IHZhciBTeW1ib2xUYWc7XG4oZnVuY3Rpb24gKFN5bWJvbFRhZykge1xuICAgIC8qKlxuICAgICAqIFJlbmRlciBhIHN5bWJvbCBhcyBvYnNvbGV0ZSwgdXN1YWxseSB1c2luZyBhIHN0cmlrZS1vdXQuXG4gICAgICovXG4gICAgU3ltYm9sVGFnLkRlcHJlY2F0ZWQgPSAxO1xufSkoU3ltYm9sVGFnIHx8IChTeW1ib2xUYWcgPSB7fSkpO1xuZXhwb3J0IHZhciBTeW1ib2xJbmZvcm1hdGlvbjtcbihmdW5jdGlvbiAoU3ltYm9sSW5mb3JtYXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHN5bWJvbCBpbmZvcm1hdGlvbiBsaXRlcmFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0ga2luZCBUaGUga2luZCBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIHVyaSBUaGUgcmVzb3VyY2Ugb2YgdGhlIGxvY2F0aW9uIG9mIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sIGNvbnRhaW5pbmcgdGhlIHN5bWJvbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobmFtZSwga2luZCwgcmFuZ2UsIHVyaSwgY29udGFpbmVyTmFtZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICBsb2NhdGlvbjogeyB1cmksIHJhbmdlIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5jb250YWluZXJOYW1lID0gY29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBTeW1ib2xJbmZvcm1hdGlvbi5jcmVhdGUgPSBjcmVhdGU7XG59KShTeW1ib2xJbmZvcm1hdGlvbiB8fCAoU3ltYm9sSW5mb3JtYXRpb24gPSB7fSkpO1xuZXhwb3J0IHZhciBXb3Jrc3BhY2VTeW1ib2w7XG4oZnVuY3Rpb24gKFdvcmtzcGFjZVN5bWJvbCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyB3b3Jrc3BhY2Ugc3ltYm9sLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0ga2luZCBUaGUga2luZCBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIHJlc291cmNlIG9mIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSByYW5nZSBBbiBvcHRpb25zIHJhbmdlIG9mIHRoZSBsb2NhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBIFdvcmtzcGFjZVN5bWJvbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobmFtZSwga2luZCwgdXJpLCByYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IG5hbWUsIGtpbmQsIGxvY2F0aW9uOiB7IHVyaSwgcmFuZ2UgfSB9XG4gICAgICAgICAgICA6IHsgbmFtZSwga2luZCwgbG9jYXRpb246IHsgdXJpIH0gfTtcbiAgICB9XG4gICAgV29ya3NwYWNlU3ltYm9sLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKFdvcmtzcGFjZVN5bWJvbCB8fCAoV29ya3NwYWNlU3ltYm9sID0ge30pKTtcbmV4cG9ydCB2YXIgRG9jdW1lbnRTeW1ib2w7XG4oZnVuY3Rpb24gKERvY3VtZW50U3ltYm9sKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzeW1ib2wgaW5mb3JtYXRpb24gbGl0ZXJhbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIGRldGFpbCBUaGUgZGV0YWlsIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIGtpbmQgVGhlIGtpbmQgb2YgdGhlIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0gcmFuZ2UgVGhlIHJhbmdlIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIHNlbGVjdGlvblJhbmdlIFRoZSBzZWxlY3Rpb25SYW5nZSBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSBjaGlsZHJlbiBDaGlsZHJlbiBvZiB0aGUgc3ltYm9sLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShuYW1lLCBkZXRhaWwsIGtpbmQsIHJhbmdlLCBzZWxlY3Rpb25SYW5nZSwgY2hpbGRyZW4pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXRhaWwsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRG9jdW1lbnRTeW1ib2wuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgRG9jdW1lbnRTeW1ib2x9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiZcbiAgICAgICAgICAgIElzLnN0cmluZyhjYW5kaWRhdGUubmFtZSkgJiYgSXMubnVtYmVyKGNhbmRpZGF0ZS5raW5kKSAmJlxuICAgICAgICAgICAgUmFuZ2UuaXMoY2FuZGlkYXRlLnJhbmdlKSAmJiBSYW5nZS5pcyhjYW5kaWRhdGUuc2VsZWN0aW9uUmFuZ2UpICYmXG4gICAgICAgICAgICAoY2FuZGlkYXRlLmRldGFpbCA9PT0gdW5kZWZpbmVkIHx8IElzLnN0cmluZyhjYW5kaWRhdGUuZGV0YWlsKSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuZGVwcmVjYXRlZCA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLmRlcHJlY2F0ZWQpKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmNoaWxkcmVuKSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUudGFncyA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnRhZ3MpKTtcbiAgICB9XG4gICAgRG9jdW1lbnRTeW1ib2wuaXMgPSBpcztcbn0pKERvY3VtZW50U3ltYm9sIHx8IChEb2N1bWVudFN5bWJvbCA9IHt9KSk7XG4vKipcbiAqIEEgc2V0IG9mIHByZWRlZmluZWQgY29kZSBhY3Rpb24ga2luZHNcbiAqL1xuZXhwb3J0IHZhciBDb2RlQWN0aW9uS2luZDtcbihmdW5jdGlvbiAoQ29kZUFjdGlvbktpbmQpIHtcbiAgICAvKipcbiAgICAgKiBFbXB0eSBraW5kLlxuICAgICAqL1xuICAgIENvZGVBY3Rpb25LaW5kLkVtcHR5ID0gJyc7XG4gICAgLyoqXG4gICAgICogQmFzZSBraW5kIGZvciBxdWlja2ZpeCBhY3Rpb25zOiAncXVpY2tmaXgnXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuUXVpY2tGaXggPSAncXVpY2tmaXgnO1xuICAgIC8qKlxuICAgICAqIEJhc2Uga2luZCBmb3IgcmVmYWN0b3JpbmcgYWN0aW9uczogJ3JlZmFjdG9yJ1xuICAgICAqL1xuICAgIENvZGVBY3Rpb25LaW5kLlJlZmFjdG9yID0gJ3JlZmFjdG9yJztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIGV4dHJhY3Rpb24gYWN0aW9uczogJ3JlZmFjdG9yLmV4dHJhY3QnXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIGV4dHJhY3QgYWN0aW9uczpcbiAgICAgKlxuICAgICAqIC0gRXh0cmFjdCBtZXRob2RcbiAgICAgKiAtIEV4dHJhY3QgZnVuY3Rpb25cbiAgICAgKiAtIEV4dHJhY3QgdmFyaWFibGVcbiAgICAgKiAtIEV4dHJhY3QgaW50ZXJmYWNlIGZyb20gY2xhc3NcbiAgICAgKiAtIC4uLlxuICAgICAqL1xuICAgIENvZGVBY3Rpb25LaW5kLlJlZmFjdG9yRXh0cmFjdCA9ICdyZWZhY3Rvci5leHRyYWN0JztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIGlubGluZSBhY3Rpb25zOiAncmVmYWN0b3IuaW5saW5lJ1xuICAgICAqXG4gICAgICogRXhhbXBsZSBpbmxpbmUgYWN0aW9uczpcbiAgICAgKlxuICAgICAqIC0gSW5saW5lIGZ1bmN0aW9uXG4gICAgICogLSBJbmxpbmUgdmFyaWFibGVcbiAgICAgKiAtIElubGluZSBjb25zdGFudFxuICAgICAqIC0gLi4uXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuUmVmYWN0b3JJbmxpbmUgPSAncmVmYWN0b3IuaW5saW5lJztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIHJld3JpdGUgYWN0aW9uczogJ3JlZmFjdG9yLnJld3JpdGUnXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHJld3JpdGUgYWN0aW9uczpcbiAgICAgKlxuICAgICAqIC0gQ29udmVydCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHRvIGNsYXNzXG4gICAgICogLSBBZGQgb3IgcmVtb3ZlIHBhcmFtZXRlclxuICAgICAqIC0gRW5jYXBzdWxhdGUgZmllbGRcbiAgICAgKiAtIE1ha2UgbWV0aG9kIHN0YXRpY1xuICAgICAqIC0gTW92ZSBtZXRob2QgdG8gYmFzZSBjbGFzc1xuICAgICAqIC0gLi4uXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuUmVmYWN0b3JSZXdyaXRlID0gJ3JlZmFjdG9yLnJld3JpdGUnO1xuICAgIC8qKlxuICAgICAqIEJhc2Uga2luZCBmb3Igc291cmNlIGFjdGlvbnM6IGBzb3VyY2VgXG4gICAgICpcbiAgICAgKiBTb3VyY2UgY29kZSBhY3Rpb25zIGFwcGx5IHRvIHRoZSBlbnRpcmUgZmlsZS5cbiAgICAgKi9cbiAgICBDb2RlQWN0aW9uS2luZC5Tb3VyY2UgPSAnc291cmNlJztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIGFuIG9yZ2FuaXplIGltcG9ydHMgc291cmNlIGFjdGlvbjogYHNvdXJjZS5vcmdhbml6ZUltcG9ydHNgXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuU291cmNlT3JnYW5pemVJbXBvcnRzID0gJ3NvdXJjZS5vcmdhbml6ZUltcG9ydHMnO1xuICAgIC8qKlxuICAgICAqIEJhc2Uga2luZCBmb3IgYXV0by1maXggc291cmNlIGFjdGlvbnM6IGBzb3VyY2UuZml4QWxsYC5cbiAgICAgKlxuICAgICAqIEZpeCBhbGwgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGZpeCBlcnJvcnMgdGhhdCBoYXZlIGEgY2xlYXIgZml4IHRoYXQgZG8gbm90IHJlcXVpcmUgdXNlciBpbnB1dC5cbiAgICAgKiBUaGV5IHNob3VsZCBub3Qgc3VwcHJlc3MgZXJyb3JzIG9yIHBlcmZvcm0gdW5zYWZlIGZpeGVzIHN1Y2ggYXMgZ2VuZXJhdGluZyBuZXcgdHlwZXMgb3IgY2xhc3Nlcy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICBDb2RlQWN0aW9uS2luZC5Tb3VyY2VGaXhBbGwgPSAnc291cmNlLmZpeEFsbCc7XG59KShDb2RlQWN0aW9uS2luZCB8fCAoQ29kZUFjdGlvbktpbmQgPSB7fSkpO1xuLyoqXG4gKiBUaGUgcmVhc29uIHdoeSBjb2RlIGFjdGlvbnMgd2VyZSByZXF1ZXN0ZWQuXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgdmFyIENvZGVBY3Rpb25UcmlnZ2VyS2luZDtcbihmdW5jdGlvbiAoQ29kZUFjdGlvblRyaWdnZXJLaW5kKSB7XG4gICAgLyoqXG4gICAgICogQ29kZSBhY3Rpb25zIHdlcmUgZXhwbGljaXRseSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgb3IgYnkgYW4gZXh0ZW5zaW9uLlxuICAgICAqL1xuICAgIENvZGVBY3Rpb25UcmlnZ2VyS2luZC5JbnZva2VkID0gMTtcbiAgICAvKipcbiAgICAgKiBDb2RlIGFjdGlvbnMgd2VyZSByZXF1ZXN0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgKlxuICAgICAqIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBjdXJyZW50IHNlbGVjdGlvbiBpbiBhIGZpbGUgY2hhbmdlcywgYnV0IGNhblxuICAgICAqIGFsc28gYmUgdHJpZ2dlcmVkIHdoZW4gZmlsZSBjb250ZW50IGNoYW5nZXMuXG4gICAgICovXG4gICAgQ29kZUFjdGlvblRyaWdnZXJLaW5kLkF1dG9tYXRpYyA9IDI7XG59KShDb2RlQWN0aW9uVHJpZ2dlcktpbmQgfHwgKENvZGVBY3Rpb25UcmlnZ2VyS2luZCA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb2RlQWN0aW9uQ29udGV4dCBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBDb2RlQWN0aW9uQ29udGV4dH0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgQ29kZUFjdGlvbkNvbnRleHQ7XG4oZnVuY3Rpb24gKENvZGVBY3Rpb25Db250ZXh0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDb2RlQWN0aW9uQ29udGV4dCBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShkaWFnbm9zdGljcywgb25seSwgdHJpZ2dlcktpbmQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgZGlhZ25vc3RpY3MgfTtcbiAgICAgICAgaWYgKG9ubHkgIT09IHVuZGVmaW5lZCAmJiBvbmx5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQub25seSA9IG9ubHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXJLaW5kICE9PSB1bmRlZmluZWQgJiYgdHJpZ2dlcktpbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdC50cmlnZ2VyS2luZCA9IHRyaWdnZXJLaW5kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIENvZGVBY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIENvZGVBY3Rpb25Db250ZXh0fSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLmRpYWdub3N0aWNzLCBEaWFnbm9zdGljLmlzKVxuICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS5vbmx5ID09PSB1bmRlZmluZWQgfHwgSXMudHlwZWRBcnJheShjYW5kaWRhdGUub25seSwgSXMuc3RyaW5nKSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUudHJpZ2dlcktpbmQgPT09IHVuZGVmaW5lZCB8fCBjYW5kaWRhdGUudHJpZ2dlcktpbmQgPT09IENvZGVBY3Rpb25UcmlnZ2VyS2luZC5JbnZva2VkIHx8IGNhbmRpZGF0ZS50cmlnZ2VyS2luZCA9PT0gQ29kZUFjdGlvblRyaWdnZXJLaW5kLkF1dG9tYXRpYyk7XG4gICAgfVxuICAgIENvZGVBY3Rpb25Db250ZXh0LmlzID0gaXM7XG59KShDb2RlQWN0aW9uQ29udGV4dCB8fCAoQ29kZUFjdGlvbkNvbnRleHQgPSB7fSkpO1xuZXhwb3J0IHZhciBDb2RlQWN0aW9uO1xuKGZ1bmN0aW9uIChDb2RlQWN0aW9uKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBraW5kT3JDb21tYW5kT3JFZGl0LCBraW5kKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7IHRpdGxlIH07XG4gICAgICAgIGxldCBjaGVja0tpbmQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGtpbmRPckNvbW1hbmRPckVkaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjaGVja0tpbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc3VsdC5raW5kID0ga2luZE9yQ29tbWFuZE9yRWRpdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChDb21tYW5kLmlzKGtpbmRPckNvbW1hbmRPckVkaXQpKSB7XG4gICAgICAgICAgICByZXN1bHQuY29tbWFuZCA9IGtpbmRPckNvbW1hbmRPckVkaXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZWRpdCA9IGtpbmRPckNvbW1hbmRPckVkaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrS2luZCAmJiBraW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5raW5kID0ga2luZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBDb2RlQWN0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS50aXRsZSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuZGlhZ25vc3RpY3MgPT09IHVuZGVmaW5lZCB8fCBJcy50eXBlZEFycmF5KGNhbmRpZGF0ZS5kaWFnbm9zdGljcywgRGlhZ25vc3RpYy5pcykpICYmXG4gICAgICAgICAgICAoY2FuZGlkYXRlLmtpbmQgPT09IHVuZGVmaW5lZCB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLmtpbmQpKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5lZGl0ICE9PSB1bmRlZmluZWQgfHwgY2FuZGlkYXRlLmNvbW1hbmQgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuY29tbWFuZCA9PT0gdW5kZWZpbmVkIHx8IENvbW1hbmQuaXMoY2FuZGlkYXRlLmNvbW1hbmQpKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5pc1ByZWZlcnJlZCA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLmlzUHJlZmVycmVkKSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuZWRpdCA9PT0gdW5kZWZpbmVkIHx8IFdvcmtzcGFjZUVkaXQuaXMoY2FuZGlkYXRlLmVkaXQpKTtcbiAgICB9XG4gICAgQ29kZUFjdGlvbi5pcyA9IGlzO1xufSkoQ29kZUFjdGlvbiB8fCAoQ29kZUFjdGlvbiA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb2RlTGVucyBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBDb2RlTGVuc30gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgQ29kZUxlbnM7XG4oZnVuY3Rpb24gKENvZGVMZW5zKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDb2RlTGVucyBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgZGF0YSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0geyByYW5nZSB9O1xuICAgICAgICBpZiAoSXMuZGVmaW5lZChkYXRhKSkge1xuICAgICAgICAgICAgcmVzdWx0LmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIENvZGVMZW5zLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIENvZGVMZW5zfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSkgJiYgKElzLnVuZGVmaW5lZChjYW5kaWRhdGUuY29tbWFuZCkgfHwgQ29tbWFuZC5pcyhjYW5kaWRhdGUuY29tbWFuZCkpO1xuICAgIH1cbiAgICBDb2RlTGVucy5pcyA9IGlzO1xufSkoQ29kZUxlbnMgfHwgKENvZGVMZW5zID0ge30pKTtcbi8qKlxuICogVGhlIEZvcm1hdHRpbmdPcHRpb25zIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIEZvcm1hdHRpbmdPcHRpb25zfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBGb3JtYXR0aW5nT3B0aW9ucztcbihmdW5jdGlvbiAoRm9ybWF0dGluZ09wdGlvbnMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEZvcm1hdHRpbmdPcHRpb25zIGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHRhYlNpemUsIGluc2VydFNwYWNlcykge1xuICAgICAgICByZXR1cm4geyB0YWJTaXplLCBpbnNlcnRTcGFjZXMgfTtcbiAgICB9XG4gICAgRm9ybWF0dGluZ09wdGlvbnMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgRm9ybWF0dGluZ09wdGlvbnN9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgSXMudWludGVnZXIoY2FuZGlkYXRlLnRhYlNpemUpICYmIElzLmJvb2xlYW4oY2FuZGlkYXRlLmluc2VydFNwYWNlcyk7XG4gICAgfVxuICAgIEZvcm1hdHRpbmdPcHRpb25zLmlzID0gaXM7XG59KShGb3JtYXR0aW5nT3B0aW9ucyB8fCAoRm9ybWF0dGluZ09wdGlvbnMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgRG9jdW1lbnRMaW5rIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIERvY3VtZW50TGlua30gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgRG9jdW1lbnRMaW5rO1xuKGZ1bmN0aW9uIChEb2N1bWVudExpbmspIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IERvY3VtZW50TGluayBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgdGFyZ2V0LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlLCB0YXJnZXQsIGRhdGEgfTtcbiAgICB9XG4gICAgRG9jdW1lbnRMaW5rLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIERvY3VtZW50TGlua30gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLmRlZmluZWQoY2FuZGlkYXRlKSAmJiBSYW5nZS5pcyhjYW5kaWRhdGUucmFuZ2UpICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLnRhcmdldCkgfHwgSXMuc3RyaW5nKGNhbmRpZGF0ZS50YXJnZXQpKTtcbiAgICB9XG4gICAgRG9jdW1lbnRMaW5rLmlzID0gaXM7XG59KShEb2N1bWVudExpbmsgfHwgKERvY3VtZW50TGluayA9IHt9KSk7XG4vKipcbiAqIFRoZSBTZWxlY3Rpb25SYW5nZSBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aFxuICogU2VsZWN0aW9uUmFuZ2UgbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgU2VsZWN0aW9uUmFuZ2U7XG4oZnVuY3Rpb24gKFNlbGVjdGlvblJhbmdlKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBTZWxlY3Rpb25SYW5nZVxuICAgICAqIEBwYXJhbSByYW5nZSB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHBhcmVudCBhbiBvcHRpb25hbCBwYXJlbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHJhbmdlLCBwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIHBhcmVudCB9O1xuICAgIH1cbiAgICBTZWxlY3Rpb25SYW5nZS5jcmVhdGUgPSBjcmVhdGU7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSkgJiYgKGNhbmRpZGF0ZS5wYXJlbnQgPT09IHVuZGVmaW5lZCB8fCBTZWxlY3Rpb25SYW5nZS5pcyhjYW5kaWRhdGUucGFyZW50KSk7XG4gICAgfVxuICAgIFNlbGVjdGlvblJhbmdlLmlzID0gaXM7XG59KShTZWxlY3Rpb25SYW5nZSB8fCAoU2VsZWN0aW9uUmFuZ2UgPSB7fSkpO1xuLyoqXG4gKiBBIHNldCBvZiBwcmVkZWZpbmVkIHRva2VuIHR5cGVzLiBUaGlzIHNldCBpcyBub3QgZml4ZWRcbiAqIGFuIGNsaWVudHMgY2FuIHNwZWNpZnkgYWRkaXRpb25hbCB0b2tlbiB0eXBlcyB2aWEgdGhlXG4gKiBjb3JyZXNwb25kaW5nIGNsaWVudCBjYXBhYmlsaXRpZXMuXG4gKlxuICogQHNpbmNlIDMuMTYuMFxuICovXG5leHBvcnQgdmFyIFNlbWFudGljVG9rZW5UeXBlcztcbihmdW5jdGlvbiAoU2VtYW50aWNUb2tlblR5cGVzKSB7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wibmFtZXNwYWNlXCJdID0gXCJuYW1lc3BhY2VcIjtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyB0eXBlLiBBY3RzIGFzIGEgZmFsbGJhY2sgZm9yIHR5cGVzIHdoaWNoIGNhbid0IGJlIG1hcHBlZCB0b1xuICAgICAqIGEgc3BlY2lmaWMgdHlwZSBsaWtlIGNsYXNzIG9yIGVudW0uXG4gICAgICovXG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1widHlwZVwiXSA9IFwidHlwZVwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImNsYXNzXCJdID0gXCJjbGFzc1wiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImVudW1cIl0gPSBcImVudW1cIjtcbiAgICBTZW1hbnRpY1Rva2VuVHlwZXNbXCJpbnRlcmZhY2VcIl0gPSBcImludGVyZmFjZVwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcInN0cnVjdFwiXSA9IFwic3RydWN0XCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1widHlwZVBhcmFtZXRlclwiXSA9IFwidHlwZVBhcmFtZXRlclwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcInBhcmFtZXRlclwiXSA9IFwicGFyYW1ldGVyXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1widmFyaWFibGVcIl0gPSBcInZhcmlhYmxlXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wicHJvcGVydHlcIl0gPSBcInByb3BlcnR5XCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wiZW51bU1lbWJlclwiXSA9IFwiZW51bU1lbWJlclwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImV2ZW50XCJdID0gXCJldmVudFwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImZ1bmN0aW9uXCJdID0gXCJmdW5jdGlvblwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcIm1ldGhvZFwiXSA9IFwibWV0aG9kXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wibWFjcm9cIl0gPSBcIm1hY3JvXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wia2V5d29yZFwiXSA9IFwia2V5d29yZFwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcIm1vZGlmaWVyXCJdID0gXCJtb2RpZmllclwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImNvbW1lbnRcIl0gPSBcImNvbW1lbnRcIjtcbiAgICBTZW1hbnRpY1Rva2VuVHlwZXNbXCJzdHJpbmdcIl0gPSBcInN0cmluZ1wiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcIm51bWJlclwiXSA9IFwibnVtYmVyXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wicmVnZXhwXCJdID0gXCJyZWdleHBcIjtcbiAgICBTZW1hbnRpY1Rva2VuVHlwZXNbXCJvcGVyYXRvclwiXSA9IFwib3BlcmF0b3JcIjtcbiAgICAvKipcbiAgICAgKiBAc2luY2UgMy4xNy4wXG4gICAgICovXG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wiZGVjb3JhdG9yXCJdID0gXCJkZWNvcmF0b3JcIjtcbn0pKFNlbWFudGljVG9rZW5UeXBlcyB8fCAoU2VtYW50aWNUb2tlblR5cGVzID0ge30pKTtcbi8qKlxuICogQSBzZXQgb2YgcHJlZGVmaW5lZCB0b2tlbiBtb2RpZmllcnMuIFRoaXMgc2V0IGlzIG5vdCBmaXhlZFxuICogYW4gY2xpZW50cyBjYW4gc3BlY2lmeSBhZGRpdGlvbmFsIHRva2VuIHR5cGVzIHZpYSB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgY2xpZW50IGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCB2YXIgU2VtYW50aWNUb2tlbk1vZGlmaWVycztcbihmdW5jdGlvbiAoU2VtYW50aWNUb2tlbk1vZGlmaWVycykge1xuICAgIFNlbWFudGljVG9rZW5Nb2RpZmllcnNbXCJkZWNsYXJhdGlvblwiXSA9IFwiZGVjbGFyYXRpb25cIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiZGVmaW5pdGlvblwiXSA9IFwiZGVmaW5pdGlvblwiO1xuICAgIFNlbWFudGljVG9rZW5Nb2RpZmllcnNbXCJyZWFkb25seVwiXSA9IFwicmVhZG9ubHlcIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wic3RhdGljXCJdID0gXCJzdGF0aWNcIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiZGVwcmVjYXRlZFwiXSA9IFwiZGVwcmVjYXRlZFwiO1xuICAgIFNlbWFudGljVG9rZW5Nb2RpZmllcnNbXCJhYnN0cmFjdFwiXSA9IFwiYWJzdHJhY3RcIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiYXN5bmNcIl0gPSBcImFzeW5jXCI7XG4gICAgU2VtYW50aWNUb2tlbk1vZGlmaWVyc1tcIm1vZGlmaWNhdGlvblwiXSA9IFwibW9kaWZpY2F0aW9uXCI7XG4gICAgU2VtYW50aWNUb2tlbk1vZGlmaWVyc1tcImRvY3VtZW50YXRpb25cIl0gPSBcImRvY3VtZW50YXRpb25cIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiZGVmYXVsdExpYnJhcnlcIl0gPSBcImRlZmF1bHRMaWJyYXJ5XCI7XG59KShTZW1hbnRpY1Rva2VuTW9kaWZpZXJzIHx8IChTZW1hbnRpY1Rva2VuTW9kaWZpZXJzID0ge30pKTtcbi8qKlxuICogQHNpbmNlIDMuMTYuMFxuICovXG5leHBvcnQgdmFyIFNlbWFudGljVG9rZW5zO1xuKGZ1bmN0aW9uIChTZW1hbnRpY1Rva2Vucykge1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIChjYW5kaWRhdGUucmVzdWx0SWQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2FuZGlkYXRlLnJlc3VsdElkID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmRhdGEpICYmIChjYW5kaWRhdGUuZGF0YS5sZW5ndGggPT09IDAgfHwgdHlwZW9mIGNhbmRpZGF0ZS5kYXRhWzBdID09PSAnbnVtYmVyJyk7XG4gICAgfVxuICAgIFNlbWFudGljVG9rZW5zLmlzID0gaXM7XG59KShTZW1hbnRpY1Rva2VucyB8fCAoU2VtYW50aWNUb2tlbnMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5saW5lVmFsdWVUZXh0IG5hbWVzcGFjZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIElubGluZVZhbHVlVGV4dHMuXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgdmFyIElubGluZVZhbHVlVGV4dDtcbihmdW5jdGlvbiAoSW5saW5lVmFsdWVUZXh0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBJbmxpbmVWYWx1ZVRleHQgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocmFuZ2UsIHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIHRleHQgfTtcbiAgICB9XG4gICAgSW5saW5lVmFsdWVUZXh0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAhPT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZSAhPT0gbnVsbCAmJiBSYW5nZS5pcyhjYW5kaWRhdGUucmFuZ2UpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudGV4dCk7XG4gICAgfVxuICAgIElubGluZVZhbHVlVGV4dC5pcyA9IGlzO1xufSkoSW5saW5lVmFsdWVUZXh0IHx8IChJbmxpbmVWYWx1ZVRleHQgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5saW5lVmFsdWVWYXJpYWJsZUxvb2t1cCBuYW1lc3BhY2UgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBJbmxpbmVWYWx1ZVZhcmlhYmxlTG9va3Vwcy5cbiAqXG4gKiBAc2luY2UgMy4xNy4wXG4gKi9cbmV4cG9ydCB2YXIgSW5saW5lVmFsdWVWYXJpYWJsZUxvb2t1cDtcbihmdW5jdGlvbiAoSW5saW5lVmFsdWVWYXJpYWJsZUxvb2t1cCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSW5saW5lVmFsdWVUZXh0IGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHJhbmdlLCB2YXJpYWJsZU5hbWUsIGNhc2VTZW5zaXRpdmVMb29rdXApIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIHZhcmlhYmxlTmFtZSwgY2FzZVNlbnNpdGl2ZUxvb2t1cCB9O1xuICAgIH1cbiAgICBJbmxpbmVWYWx1ZVZhcmlhYmxlTG9va3VwLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAhPT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZSAhPT0gbnVsbCAmJiBSYW5nZS5pcyhjYW5kaWRhdGUucmFuZ2UpICYmIElzLmJvb2xlYW4oY2FuZGlkYXRlLmNhc2VTZW5zaXRpdmVMb29rdXApXG4gICAgICAgICAgICAmJiAoSXMuc3RyaW5nKGNhbmRpZGF0ZS52YXJpYWJsZU5hbWUpIHx8IGNhbmRpZGF0ZS52YXJpYWJsZU5hbWUgPT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIElubGluZVZhbHVlVmFyaWFibGVMb29rdXAuaXMgPSBpcztcbn0pKElubGluZVZhbHVlVmFyaWFibGVMb29rdXAgfHwgKElubGluZVZhbHVlVmFyaWFibGVMb29rdXAgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24gbmFtZXNwYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24uXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgdmFyIElubGluZVZhbHVlRXZhbHVhdGFibGVFeHByZXNzaW9uO1xuKGZ1bmN0aW9uIChJbmxpbmVWYWx1ZUV2YWx1YXRhYmxlRXhwcmVzc2lvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24gbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocmFuZ2UsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIGV4cHJlc3Npb24gfTtcbiAgICB9XG4gICAgSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgJiYgY2FuZGlkYXRlICE9PSBudWxsICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSlcbiAgICAgICAgICAgICYmIChJcy5zdHJpbmcoY2FuZGlkYXRlLmV4cHJlc3Npb24pIHx8IGNhbmRpZGF0ZS5leHByZXNzaW9uID09PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBJbmxpbmVWYWx1ZUV2YWx1YXRhYmxlRXhwcmVzc2lvbi5pcyA9IGlzO1xufSkoSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24gfHwgKElubGluZVZhbHVlRXZhbHVhdGFibGVFeHByZXNzaW9uID0ge30pKTtcbi8qKlxuICogVGhlIElubGluZVZhbHVlQ29udGV4dCBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBJbmxpbmVWYWx1ZUNvbnRleHR9IGxpdGVyYWxzLlxuICpcbiAqIEBzaW5jZSAzLjE3LjBcbiAqL1xuZXhwb3J0IHZhciBJbmxpbmVWYWx1ZUNvbnRleHQ7XG4oZnVuY3Rpb24gKElubGluZVZhbHVlQ29udGV4dCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSW5saW5lVmFsdWVDb250ZXh0IGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKGZyYW1lSWQsIHN0b3BwZWRMb2NhdGlvbikge1xuICAgICAgICByZXR1cm4geyBmcmFtZUlkLCBzdG9wcGVkTG9jYXRpb24gfTtcbiAgICB9XG4gICAgSW5saW5lVmFsdWVDb250ZXh0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIElubGluZVZhbHVlQ29udGV4dH0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKHZhbHVlLnN0b3BwZWRMb2NhdGlvbik7XG4gICAgfVxuICAgIElubGluZVZhbHVlQ29udGV4dC5pcyA9IGlzO1xufSkoSW5saW5lVmFsdWVDb250ZXh0IHx8IChJbmxpbmVWYWx1ZUNvbnRleHQgPSB7fSkpO1xuLyoqXG4gKiBJbmxheSBoaW50IGtpbmRzLlxuICpcbiAqIEBzaW5jZSAzLjE3LjBcbiAqL1xuZXhwb3J0IHZhciBJbmxheUhpbnRLaW5kO1xuKGZ1bmN0aW9uIChJbmxheUhpbnRLaW5kKSB7XG4gICAgLyoqXG4gICAgICogQW4gaW5sYXkgaGludCB0aGF0IGZvciBhIHR5cGUgYW5ub3RhdGlvbi5cbiAgICAgKi9cbiAgICBJbmxheUhpbnRLaW5kLlR5cGUgPSAxO1xuICAgIC8qKlxuICAgICAqIEFuIGlubGF5IGhpbnQgdGhhdCBpcyBmb3IgYSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgSW5sYXlIaW50S2luZC5QYXJhbWV0ZXIgPSAyO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gMjtcbiAgICB9XG4gICAgSW5sYXlIaW50S2luZC5pcyA9IGlzO1xufSkoSW5sYXlIaW50S2luZCB8fCAoSW5sYXlIaW50S2luZCA9IHt9KSk7XG5leHBvcnQgdmFyIElubGF5SGludExhYmVsUGFydDtcbihmdW5jdGlvbiAoSW5sYXlIaW50TGFiZWxQYXJ0KSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlIH07XG4gICAgfVxuICAgIElubGF5SGludExhYmVsUGFydC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUudG9vbHRpcCA9PT0gdW5kZWZpbmVkIHx8IElzLnN0cmluZyhjYW5kaWRhdGUudG9vbHRpcCkgfHwgTWFya3VwQ29udGVudC5pcyhjYW5kaWRhdGUudG9vbHRpcCkpXG4gICAgICAgICAgICAmJiAoY2FuZGlkYXRlLmxvY2F0aW9uID09PSB1bmRlZmluZWQgfHwgTG9jYXRpb24uaXMoY2FuZGlkYXRlLmxvY2F0aW9uKSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUuY29tbWFuZCA9PT0gdW5kZWZpbmVkIHx8IENvbW1hbmQuaXMoY2FuZGlkYXRlLmNvbW1hbmQpKTtcbiAgICB9XG4gICAgSW5sYXlIaW50TGFiZWxQYXJ0LmlzID0gaXM7XG59KShJbmxheUhpbnRMYWJlbFBhcnQgfHwgKElubGF5SGludExhYmVsUGFydCA9IHt9KSk7XG5leHBvcnQgdmFyIElubGF5SGludDtcbihmdW5jdGlvbiAoSW5sYXlIaW50KSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKHBvc2l0aW9uLCBsYWJlbCwga2luZCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IHBvc2l0aW9uLCBsYWJlbCB9O1xuICAgICAgICBpZiAoa2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQua2luZCA9IGtpbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgSW5sYXlIaW50LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKSAmJiBQb3NpdGlvbi5pcyhjYW5kaWRhdGUucG9zaXRpb24pXG4gICAgICAgICAgICAmJiAoSXMuc3RyaW5nKGNhbmRpZGF0ZS5sYWJlbCkgfHwgSXMudHlwZWRBcnJheShjYW5kaWRhdGUubGFiZWwsIElubGF5SGludExhYmVsUGFydC5pcykpXG4gICAgICAgICAgICAmJiAoY2FuZGlkYXRlLmtpbmQgPT09IHVuZGVmaW5lZCB8fCBJbmxheUhpbnRLaW5kLmlzKGNhbmRpZGF0ZS5raW5kKSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUudGV4dEVkaXRzID09PSB1bmRlZmluZWQpIHx8IElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLnRleHRFZGl0cywgVGV4dEVkaXQuaXMpXG4gICAgICAgICAgICAmJiAoY2FuZGlkYXRlLnRvb2x0aXAgPT09IHVuZGVmaW5lZCB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLnRvb2x0aXApIHx8IE1hcmt1cENvbnRlbnQuaXMoY2FuZGlkYXRlLnRvb2x0aXApKVxuICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS5wYWRkaW5nTGVmdCA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLnBhZGRpbmdMZWZ0KSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUucGFkZGluZ1JpZ2h0ID09PSB1bmRlZmluZWQgfHwgSXMuYm9vbGVhbihjYW5kaWRhdGUucGFkZGluZ1JpZ2h0KSk7XG4gICAgfVxuICAgIElubGF5SGludC5pcyA9IGlzO1xufSkoSW5sYXlIaW50IHx8IChJbmxheUhpbnQgPSB7fSkpO1xuZXhwb3J0IHZhciBTdHJpbmdWYWx1ZTtcbihmdW5jdGlvbiAoU3RyaW5nVmFsdWUpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGVTbmlwcGV0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IGtpbmQ6ICdzbmlwcGV0JywgdmFsdWUgfTtcbiAgICB9XG4gICAgU3RyaW5nVmFsdWUuY3JlYXRlU25pcHBldCA9IGNyZWF0ZVNuaXBwZXQ7XG59KShTdHJpbmdWYWx1ZSB8fCAoU3RyaW5nVmFsdWUgPSB7fSkpO1xuZXhwb3J0IHZhciBJbmxpbmVDb21wbGV0aW9uSXRlbTtcbihmdW5jdGlvbiAoSW5saW5lQ29tcGxldGlvbkl0ZW0pIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUoaW5zZXJ0VGV4dCwgZmlsdGVyVGV4dCwgcmFuZ2UsIGNvbW1hbmQpIHtcbiAgICAgICAgcmV0dXJuIHsgaW5zZXJ0VGV4dCwgZmlsdGVyVGV4dCwgcmFuZ2UsIGNvbW1hbmQgfTtcbiAgICB9XG4gICAgSW5saW5lQ29tcGxldGlvbkl0ZW0uY3JlYXRlID0gY3JlYXRlO1xufSkoSW5saW5lQ29tcGxldGlvbkl0ZW0gfHwgKElubGluZUNvbXBsZXRpb25JdGVtID0ge30pKTtcbmV4cG9ydCB2YXIgSW5saW5lQ29tcGxldGlvbkxpc3Q7XG4oZnVuY3Rpb24gKElubGluZUNvbXBsZXRpb25MaXN0KSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiB7IGl0ZW1zIH07XG4gICAgfVxuICAgIElubGluZUNvbXBsZXRpb25MaXN0LmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKElubGluZUNvbXBsZXRpb25MaXN0IHx8IChJbmxpbmVDb21wbGV0aW9uTGlzdCA9IHt9KSk7XG4vKipcbiAqIERlc2NyaWJlcyBob3cgYW4ge0BsaW5rIElubGluZUNvbXBsZXRpb25JdGVtUHJvdmlkZXIgaW5saW5lIGNvbXBsZXRpb24gcHJvdmlkZXJ9IHdhcyB0cmlnZ2VyZWQuXG4gKlxuICogQHNpbmNlIDMuMTguMFxuICogQHByb3Bvc2VkXG4gKi9cbmV4cG9ydCB2YXIgSW5saW5lQ29tcGxldGlvblRyaWdnZXJLaW5kO1xuKGZ1bmN0aW9uIChJbmxpbmVDb21wbGV0aW9uVHJpZ2dlcktpbmQpIHtcbiAgICAvKipcbiAgICAgKiBDb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWQgZXhwbGljaXRseSBieSBhIHVzZXIgZ2VzdHVyZS5cbiAgICAgKi9cbiAgICBJbmxpbmVDb21wbGV0aW9uVHJpZ2dlcktpbmQuSW52b2tlZCA9IDA7XG4gICAgLyoqXG4gICAgICogQ29tcGxldGlvbiB3YXMgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkgd2hpbGUgZWRpdGluZy5cbiAgICAgKi9cbiAgICBJbmxpbmVDb21wbGV0aW9uVHJpZ2dlcktpbmQuQXV0b21hdGljID0gMTtcbn0pKElubGluZUNvbXBsZXRpb25UcmlnZ2VyS2luZCB8fCAoSW5saW5lQ29tcGxldGlvblRyaWdnZXJLaW5kID0ge30pKTtcbmV4cG9ydCB2YXIgU2VsZWN0ZWRDb21wbGV0aW9uSW5mbztcbihmdW5jdGlvbiAoU2VsZWN0ZWRDb21wbGV0aW9uSW5mbykge1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgdGV4dCkge1xuICAgICAgICByZXR1cm4geyByYW5nZSwgdGV4dCB9O1xuICAgIH1cbiAgICBTZWxlY3RlZENvbXBsZXRpb25JbmZvLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKFNlbGVjdGVkQ29tcGxldGlvbkluZm8gfHwgKFNlbGVjdGVkQ29tcGxldGlvbkluZm8gPSB7fSkpO1xuZXhwb3J0IHZhciBJbmxpbmVDb21wbGV0aW9uQ29udGV4dDtcbihmdW5jdGlvbiAoSW5saW5lQ29tcGxldGlvbkNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUodHJpZ2dlcktpbmQsIHNlbGVjdGVkQ29tcGxldGlvbkluZm8pIHtcbiAgICAgICAgcmV0dXJuIHsgdHJpZ2dlcktpbmQsIHNlbGVjdGVkQ29tcGxldGlvbkluZm8gfTtcbiAgICB9XG4gICAgSW5saW5lQ29tcGxldGlvbkNvbnRleHQuY3JlYXRlID0gY3JlYXRlO1xufSkoSW5saW5lQ29tcGxldGlvbkNvbnRleHQgfHwgKElubGluZUNvbXBsZXRpb25Db250ZXh0ID0ge30pKTtcbmV4cG9ydCB2YXIgV29ya3NwYWNlRm9sZGVyO1xuKGZ1bmN0aW9uIChXb3Jrc3BhY2VGb2xkZXIpIHtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKSAmJiBVUkkuaXMoY2FuZGlkYXRlLnVyaSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5uYW1lKTtcbiAgICB9XG4gICAgV29ya3NwYWNlRm9sZGVyLmlzID0gaXM7XG59KShXb3Jrc3BhY2VGb2xkZXIgfHwgKFdvcmtzcGFjZUZvbGRlciA9IHt9KSk7XG5leHBvcnQgY29uc3QgRU9MID0gWydcXG4nLCAnXFxyXFxuJywgJ1xcciddO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHRleHQgZG9jdW1lbnQgZnJvbSB0aGUgbmV3IHZzY29kZS1sYW5ndWFnZXNlcnZlci10ZXh0ZG9jdW1lbnQgcGFja2FnZS5cbiAqL1xuZXhwb3J0IHZhciBUZXh0RG9jdW1lbnQ7XG4oZnVuY3Rpb24gKFRleHREb2N1bWVudCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSVRleHREb2N1bWVudCBsaXRlcmFsIGZyb20gdGhlIGdpdmVuIHVyaSBhbmQgY29udGVudC5cbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VJZCBUaGUgZG9jdW1lbnQncyBsYW5ndWFnZSBJZC5cbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgZG9jdW1lbnQncyB2ZXJzaW9uLlxuICAgICAqIEBwYXJhbSBjb250ZW50IFRoZSBkb2N1bWVudCdzIGNvbnRlbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSwgbGFuZ3VhZ2VJZCwgdmVyc2lvbiwgY29udGVudCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bGxUZXh0RG9jdW1lbnQodXJpLCBsYW5ndWFnZUlkLCB2ZXJzaW9uLCBjb250ZW50KTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIElUZXh0RG9jdW1lbnR9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS51cmkpICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLmxhbmd1YWdlSWQpIHx8IElzLnN0cmluZyhjYW5kaWRhdGUubGFuZ3VhZ2VJZCkpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5saW5lQ291bnQpXG4gICAgICAgICAgICAmJiBJcy5mdW5jKGNhbmRpZGF0ZS5nZXRUZXh0KSAmJiBJcy5mdW5jKGNhbmRpZGF0ZS5wb3NpdGlvbkF0KSAmJiBJcy5mdW5jKGNhbmRpZGF0ZS5vZmZzZXRBdCkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIFRleHREb2N1bWVudC5pcyA9IGlzO1xuICAgIGZ1bmN0aW9uIGFwcGx5RWRpdHMoZG9jdW1lbnQsIGVkaXRzKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gZG9jdW1lbnQuZ2V0VGV4dCgpO1xuICAgICAgICBsZXQgc29ydGVkRWRpdHMgPSBtZXJnZVNvcnQoZWRpdHMsIChhLCBiKSA9PiB7XG4gICAgICAgICAgICBsZXQgZGlmZiA9IGEucmFuZ2Uuc3RhcnQubGluZSAtIGIucmFuZ2Uuc3RhcnQubGluZTtcbiAgICAgICAgICAgIGlmIChkaWZmID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyIC0gYi5yYW5nZS5zdGFydC5jaGFyYWN0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGlmZjtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBsYXN0TW9kaWZpZWRPZmZzZXQgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNvcnRlZEVkaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgZSA9IHNvcnRlZEVkaXRzW2ldO1xuICAgICAgICAgICAgbGV0IHN0YXJ0T2Zmc2V0ID0gZG9jdW1lbnQub2Zmc2V0QXQoZS5yYW5nZS5zdGFydCk7XG4gICAgICAgICAgICBsZXQgZW5kT2Zmc2V0ID0gZG9jdW1lbnQub2Zmc2V0QXQoZS5yYW5nZS5lbmQpO1xuICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA8PSBsYXN0TW9kaWZpZWRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQpICsgZS5uZXdUZXh0ICsgdGV4dC5zdWJzdHJpbmcoZW5kT2Zmc2V0LCB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ092ZXJsYXBwaW5nIGVkaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RNb2RpZmllZE9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBUZXh0RG9jdW1lbnQuYXBwbHlFZGl0cyA9IGFwcGx5RWRpdHM7XG4gICAgZnVuY3Rpb24gbWVyZ2VTb3J0KGRhdGEsIGNvbXBhcmUpIHtcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIC8vIHNvcnRlZFxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IChkYXRhLmxlbmd0aCAvIDIpIHwgMDtcbiAgICAgICAgY29uc3QgbGVmdCA9IGRhdGEuc2xpY2UoMCwgcCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gZGF0YS5zbGljZShwKTtcbiAgICAgICAgbWVyZ2VTb3J0KGxlZnQsIGNvbXBhcmUpO1xuICAgICAgICBtZXJnZVNvcnQocmlnaHQsIGNvbXBhcmUpO1xuICAgICAgICBsZXQgbGVmdElkeCA9IDA7XG4gICAgICAgIGxldCByaWdodElkeCA9IDA7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKGxlZnRJZHggPCBsZWZ0Lmxlbmd0aCAmJiByaWdodElkeCA8IHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHJldCA9IGNvbXBhcmUobGVmdFtsZWZ0SWR4XSwgcmlnaHRbcmlnaHRJZHhdKTtcbiAgICAgICAgICAgIGlmIChyZXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHNtYWxsZXJfZXF1YWwgLT4gdGFrZSBsZWZ0IHRvIHByZXNlcnZlIG9yZGVyXG4gICAgICAgICAgICAgICAgZGF0YVtpKytdID0gbGVmdFtsZWZ0SWR4KytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciAtPiB0YWtlIHJpZ2h0XG4gICAgICAgICAgICAgICAgZGF0YVtpKytdID0gcmlnaHRbcmlnaHRJZHgrK107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGxlZnRJZHggPCBsZWZ0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZGF0YVtpKytdID0gbGVmdFtsZWZ0SWR4KytdO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChyaWdodElkeCA8IHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZGF0YVtpKytdID0gcmlnaHRbcmlnaHRJZHgrK107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufSkoVGV4dERvY3VtZW50IHx8IChUZXh0RG9jdW1lbnQgPSB7fSkpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHRleHQgZG9jdW1lbnQgZnJvbSB0aGUgbmV3IHZzY29kZS1sYW5ndWFnZXNlcnZlci10ZXh0ZG9jdW1lbnQgcGFja2FnZS5cbiAqL1xuY2xhc3MgRnVsbFRleHREb2N1bWVudCB7XG4gICAgY29uc3RydWN0b3IodXJpLCBsYW5ndWFnZUlkLCB2ZXJzaW9uLCBjb250ZW50KSB7XG4gICAgICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2VJZCA9IGxhbmd1YWdlSWQ7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5fbGluZU9mZnNldHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCB1cmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmk7XG4gICAgfVxuICAgIGdldCBsYW5ndWFnZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZDtcbiAgICB9XG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIH1cbiAgICBnZXRUZXh0KHJhbmdlKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5vZmZzZXRBdChyYW5nZS5zdGFydCk7XG4gICAgICAgICAgICBsZXQgZW5kID0gdGhpcy5vZmZzZXRBdChyYW5nZS5lbmQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICAgIH1cbiAgICB1cGRhdGUoZXZlbnQsIHZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fY29udGVudCA9IGV2ZW50LnRleHQ7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLl9saW5lT2Zmc2V0cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0TGluZU9mZnNldHMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9saW5lT2Zmc2V0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgbGluZU9mZnNldHMgPSBbXTtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gdGhpcy5fY29udGVudDtcbiAgICAgICAgICAgIGxldCBpc0xpbmVTdGFydCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNMaW5lU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldHMucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgaXNMaW5lU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNoID0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgICAgICAgaXNMaW5lU3RhcnQgPSAoY2ggPT09ICdcXHInIHx8IGNoID09PSAnXFxuJyk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXFxyJyAmJiBpICsgMSA8IHRleHQubGVuZ3RoICYmIHRleHQuY2hhckF0KGkgKyAxKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0xpbmVTdGFydCAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0cy5wdXNoKHRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gbGluZU9mZnNldHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzO1xuICAgIH1cbiAgICBwb3NpdGlvbkF0KG9mZnNldCkge1xuICAgICAgICBvZmZzZXQgPSBNYXRoLm1heChNYXRoLm1pbihvZmZzZXQsIHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwgMCk7XG4gICAgICAgIGxldCBsaW5lT2Zmc2V0cyA9IHRoaXMuZ2V0TGluZU9mZnNldHMoKTtcbiAgICAgICAgbGV0IGxvdyA9IDAsIGhpZ2ggPSBsaW5lT2Zmc2V0cy5sZW5ndGg7XG4gICAgICAgIGlmIChoaWdoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUG9zaXRpb24uY3JlYXRlKDAsIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXRzW21pZF0gPiBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb3cgaXMgdGhlIGxlYXN0IHggZm9yIHdoaWNoIHRoZSBsaW5lIG9mZnNldCBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBvZmZzZXRcbiAgICAgICAgLy8gb3IgYXJyYXkubGVuZ3RoIGlmIG5vIGxpbmUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IG9mZnNldFxuICAgICAgICBsZXQgbGluZSA9IGxvdyAtIDE7XG4gICAgICAgIHJldHVybiBQb3NpdGlvbi5jcmVhdGUobGluZSwgb2Zmc2V0IC0gbGluZU9mZnNldHNbbGluZV0pO1xuICAgIH1cbiAgICBvZmZzZXRBdChwb3NpdGlvbikge1xuICAgICAgICBsZXQgbGluZU9mZnNldHMgPSB0aGlzLmdldExpbmVPZmZzZXRzKCk7XG4gICAgICAgIGlmIChwb3NpdGlvbi5saW5lID49IGxpbmVPZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uLmxpbmUgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGluZU9mZnNldCA9IGxpbmVPZmZzZXRzW3Bvc2l0aW9uLmxpbmVdO1xuICAgICAgICBsZXQgbmV4dExpbmVPZmZzZXQgPSAocG9zaXRpb24ubGluZSArIDEgPCBsaW5lT2Zmc2V0cy5sZW5ndGgpID8gbGluZU9mZnNldHNbcG9zaXRpb24ubGluZSArIDFdIDogdGhpcy5fY29udGVudC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbihsaW5lT2Zmc2V0ICsgcG9zaXRpb24uY2hhcmFjdGVyLCBuZXh0TGluZU9mZnNldCksIGxpbmVPZmZzZXQpO1xuICAgIH1cbiAgICBnZXQgbGluZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aDtcbiAgICB9XG59XG52YXIgSXM7XG4oZnVuY3Rpb24gKElzKSB7XG4gICAgY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgIGZ1bmN0aW9uIGRlZmluZWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIElzLmRlZmluZWQgPSBkZWZpbmVkO1xuICAgIGZ1bmN0aW9uIHVuZGVmaW5lZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgSXMudW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGZ1bmN0aW9uIGJvb2xlYW4odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG4gICAgSXMuYm9vbGVhbiA9IGJvb2xlYW47XG4gICAgZnVuY3Rpb24gc3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG4gICAgfVxuICAgIElzLnN0cmluZyA9IHN0cmluZztcbiAgICBmdW5jdGlvbiBudW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBOdW1iZXJdJztcbiAgICB9XG4gICAgSXMubnVtYmVyID0gbnVtYmVyO1xuICAgIGZ1bmN0aW9uIG51bWJlclJhbmdlKHZhbHVlLCBtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmIG1pbiA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBtYXg7XG4gICAgfVxuICAgIElzLm51bWJlclJhbmdlID0gbnVtYmVyUmFuZ2U7XG4gICAgZnVuY3Rpb24gaW50ZWdlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmIC0yMTQ3NDgzNjQ4IDw9IHZhbHVlICYmIHZhbHVlIDw9IDIxNDc0ODM2NDc7XG4gICAgfVxuICAgIElzLmludGVnZXIgPSBpbnRlZ2VyO1xuICAgIGZ1bmN0aW9uIHVpbnRlZ2VyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAyMTQ3NDgzNjQ3O1xuICAgIH1cbiAgICBJcy51aW50ZWdlciA9IHVpbnRlZ2VyO1xuICAgIGZ1bmN0aW9uIGZ1bmModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cbiAgICBJcy5mdW5jID0gZnVuYztcbiAgICBmdW5jdGlvbiBvYmplY3RMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nIGNsYXNzIGluc3RhbmNlcyBwYXNzIHRoaXMgY2hlY2sgYXMgd2VsbC4gU2luY2UgdGhlIExTUFxuICAgICAgICAvLyBkb2Vzbid0IHVzZSBjbGFzc2VzIHdlIGlnbm9yZSB0aGlzIGZvciBub3cuIElmIHdlIGRvIHdlIG5lZWQgdG8gYWRkIHNvbWV0aGluZ1xuICAgICAgICAvLyBsaWtlIHRoaXM6IGBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpKSA9PT0gbnVsbGBcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG4gICAgfVxuICAgIElzLm9iamVjdExpdGVyYWwgPSBvYmplY3RMaXRlcmFsO1xuICAgIGZ1bmN0aW9uIHR5cGVkQXJyYXkodmFsdWUsIGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeShjaGVjayk7XG4gICAgfVxuICAgIElzLnR5cGVkQXJyYXkgPSB0eXBlZEFycmF5O1xufSkoSXMgfHwgKElzID0ge30pKTtcbiIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICd2c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMnO1xuaW1wb3J0IHsgaXNDb21wb3NpdGVDc3ROb2RlIH0gZnJvbSAnLi4vc3ludGF4LXRyZWUuanMnO1xuaW1wb3J0IHsgdG9rZW5Ub1JhbmdlIH0gZnJvbSAnLi4vdXRpbHMvY3N0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBDc3ROb2RlQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrID0gW107XG4gICAgfVxuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGJ1aWxkUm9vdE5vZGUoaW5wdXQpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IG5ldyBSb290Q3N0Tm9kZUltcGwoaW5wdXQpO1xuICAgICAgICB0aGlzLnJvb3ROb2RlLnJvb3QgPSB0aGlzLnJvb3ROb2RlO1xuICAgICAgICB0aGlzLm5vZGVTdGFjayA9IFt0aGlzLnJvb3ROb2RlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7XG4gICAgfVxuICAgIGJ1aWxkQ29tcG9zaXRlTm9kZShmZWF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvc2l0ZU5vZGUgPSBuZXcgQ29tcG9zaXRlQ3N0Tm9kZUltcGwoKTtcbiAgICAgICAgY29tcG9zaXRlTm9kZS5ncmFtbWFyU291cmNlID0gZmVhdHVyZTtcbiAgICAgICAgY29tcG9zaXRlTm9kZS5yb290ID0gdGhpcy5yb290Tm9kZTtcbiAgICAgICAgdGhpcy5jdXJyZW50LmNvbnRlbnQucHVzaChjb21wb3NpdGVOb2RlKTtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2sucHVzaChjb21wb3NpdGVOb2RlKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZU5vZGU7XG4gICAgfVxuICAgIGJ1aWxkTGVhZk5vZGUodG9rZW4sIGZlYXR1cmUpIHtcbiAgICAgICAgY29uc3QgbGVhZk5vZGUgPSBuZXcgTGVhZkNzdE5vZGVJbXBsKHRva2VuLnN0YXJ0T2Zmc2V0LCB0b2tlbi5pbWFnZS5sZW5ndGgsIHRva2VuVG9SYW5nZSh0b2tlbiksIHRva2VuLnRva2VuVHlwZSwgZmFsc2UpO1xuICAgICAgICBsZWFmTm9kZS5ncmFtbWFyU291cmNlID0gZmVhdHVyZTtcbiAgICAgICAgbGVhZk5vZGUucm9vdCA9IHRoaXMucm9vdE5vZGU7XG4gICAgICAgIHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobGVhZk5vZGUpO1xuICAgICAgICByZXR1cm4gbGVhZk5vZGU7XG4gICAgfVxuICAgIHJlbW92ZU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY29udGVudC5pbmRleE9mKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY29udGVudC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIC8vIFRoZSBzcGVjaWZpZWQgaXRlbSBjb3VsZCBiZSBhIGRhdGF0eXBlICgkdHlwZSBpcyBzeW1ib2wpIG9yIGEgZnJhZ21lbnQgKCR0eXBlIGlzIHVuZGVmaW5lZClcbiAgICAgICAgLy8gT25seSBpZiB0aGUgJHR5cGUgaXMgYSBzdHJpbmcsIHdlIGFjdHVhbGx5IGFzc2lnbiB0aGUgZWxlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGl0ZW0uJHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQuYXN0Tm9kZSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS4kY3N0Tm9kZSA9IGN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgLy8gRW1wdHkgY29tcG9zaXRlIG5vZGVzIGFyZSBub3QgdmFsaWRcbiAgICAgICAgLy8gU2ltcGx5IHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB0cmVlXG4gICAgICAgIGlmICgobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlLmNvbnRlbnQubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEhpZGRlblRva2VucyhoaWRkZW5Ub2tlbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBoaWRkZW5Ub2tlbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk5vZGUgPSBuZXcgTGVhZkNzdE5vZGVJbXBsKHRva2VuLnN0YXJ0T2Zmc2V0LCB0b2tlbi5pbWFnZS5sZW5ndGgsIHRva2VuVG9SYW5nZSh0b2tlbiksIHRva2VuLnRva2VuVHlwZSwgdHJ1ZSk7XG4gICAgICAgICAgICBoaWRkZW5Ob2RlLnJvb3QgPSB0aGlzLnJvb3ROb2RlO1xuICAgICAgICAgICAgdGhpcy5hZGRIaWRkZW5Ub2tlbih0aGlzLnJvb3ROb2RlLCBoaWRkZW5Ob2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRIaWRkZW5Ub2tlbihub2RlLCB0b2tlbikge1xuICAgICAgICBjb25zdCB7IG9mZnNldDogdG9rZW5TdGFydCwgZW5kOiB0b2tlbkVuZCB9ID0gdG9rZW47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY29udGVudFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0OiBjaGlsZFN0YXJ0LCBlbmQ6IGNoaWxkRW5kIH0gPSBjaGlsZDtcbiAgICAgICAgICAgIGlmIChpc0NvbXBvc2l0ZUNzdE5vZGUoY2hpbGQpICYmIHRva2VuU3RhcnQgPiBjaGlsZFN0YXJ0ICYmIHRva2VuRW5kIDwgY2hpbGRFbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEhpZGRlblRva2VuKGNoaWxkLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5FbmQgPD0gY2hpbGRTdGFydCkge1xuICAgICAgICAgICAgICAgIG5vZGUuY29udGVudC5zcGxpY2UoaSwgMCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBrbm93IHRoYXQgd2UgaGF2ZW4ndCBmb3VuZCBhIHN1aXRlZCBwb3NpdGlvbiBmb3IgdGhlIHRva2VuXG4gICAgICAgIC8vIFNvIHdlIHNpbXBseSBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBub2RlXG4gICAgICAgIG5vZGUuY29udGVudC5wdXNoKHRva2VuKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RDc3ROb2RlIHtcbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBjb250YWluZXJgIGluc3RlYWQuICovXG4gICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBncmFtbWFyU291cmNlYCBpbnN0ZWFkLiAqL1xuICAgIGdldCBmZWF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFtbWFyU291cmNlO1xuICAgIH1cbiAgICBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBhc3ROb2RlKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBub2RlID0gdHlwZW9mICgoX2EgPSB0aGlzLl9hc3ROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuJHR5cGUpID09PSAnc3RyaW5nJyA/IHRoaXMuX2FzdE5vZGUgOiAoX2IgPSB0aGlzLmNvbnRhaW5lcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFzdE5vZGU7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG5vZGUgaGFzIG5vIGFzc29jaWF0ZWQgQVNUIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgc2V0IGFzdE5vZGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYXN0Tm9kZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBhc3ROb2RlYCBpbnN0ZWFkLiAqL1xuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hc3ROb2RlO1xuICAgIH1cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5mdWxsVGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsIHRoaXMuZW5kKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGVhZkNzdE5vZGVJbXBsIGV4dGVuZHMgQWJzdHJhY3RDc3ROb2RlIHtcbiAgICBnZXQgb2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0O1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgZW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0ICsgdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuO1xuICAgIH1cbiAgICBnZXQgdG9rZW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5UeXBlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob2Zmc2V0LCBsZW5ndGgsIHJhbmdlLCB0b2tlblR5cGUsIGhpZGRlbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2hpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLl90b2tlblR5cGUgPSB0b2tlblR5cGU7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdGhpcy5fcmFuZ2UgPSByYW5nZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlQ3N0Tm9kZUltcGwgZXh0ZW5kcyBBYnN0cmFjdENzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBuZXcgQ3N0Tm9kZUNvbnRhaW5lcih0aGlzKTtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIHVzZSBgY29udGVudGAgaW5zdGVhZC4gKi9cbiAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gICAgfVxuICAgIGdldCBvZmZzZXQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9mZnNldCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5vZmZzZXQ7XG4gICAgfVxuICAgIGdldCBlbmQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmxhc3ROb25IaWRkZW5Ob2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xuICAgIH1cbiAgICBnZXQgcmFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IHRoaXMuZmlyc3ROb25IaWRkZW5Ob2RlO1xuICAgICAgICBjb25zdCBsYXN0Tm9kZSA9IHRoaXMubGFzdE5vbkhpZGRlbk5vZGU7XG4gICAgICAgIGlmIChmaXJzdE5vZGUgJiYgbGFzdE5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJhbmdlOiBmaXJzdFJhbmdlIH0gPSBmaXJzdE5vZGU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByYW5nZTogbGFzdFJhbmdlIH0gPSBsYXN0Tm9kZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZUNhY2hlID0geyBzdGFydDogZmlyc3RSYW5nZS5zdGFydCwgZW5kOiBsYXN0UmFuZ2UuZW5kLmxpbmUgPCBmaXJzdFJhbmdlLnN0YXJ0LmxpbmUgPyBmaXJzdFJhbmdlLnN0YXJ0IDogbGFzdFJhbmdlLmVuZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JhbmdlQ2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogUG9zaXRpb24uY3JlYXRlKDAsIDApLCBlbmQ6IFBvc2l0aW9uLmNyZWF0ZSgwLCAwKSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBmaXJzdE5vbkhpZGRlbk5vZGUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWNoaWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50WzBdO1xuICAgIH1cbiAgICBnZXQgbGFzdE5vbkhpZGRlbk5vZGUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmNvbnRlbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jb250ZW50W2ldO1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFt0aGlzLmNvbnRlbnQubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuY2xhc3MgQ3N0Tm9kZUNvbnRhaW5lciBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBDc3ROb2RlQ29udGFpbmVyLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIHB1c2goLi4uaXRlbXMpIHtcbiAgICAgICAgdGhpcy5hZGRQYXJlbnRzKGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnB1c2goLi4uaXRlbXMpO1xuICAgIH1cbiAgICB1bnNoaWZ0KC4uLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuYWRkUGFyZW50cyhpdGVtcyk7XG4gICAgICAgIHJldHVybiBzdXBlci51bnNoaWZ0KC4uLml0ZW1zKTtcbiAgICB9XG4gICAgc3BsaWNlKHN0YXJ0LCBjb3VudCwgLi4uaXRlbXMpIHtcbiAgICAgICAgdGhpcy5hZGRQYXJlbnRzKGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnNwbGljZShzdGFydCwgY291bnQsIC4uLml0ZW1zKTtcbiAgICB9XG4gICAgYWRkUGFyZW50cyhpdGVtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUm9vdENzdE5vZGVJbXBsIGV4dGVuZHMgQ29tcG9zaXRlQ3N0Tm9kZUltcGwge1xuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsIHRoaXMuZW5kKTtcbiAgICB9XG4gICAgZ2V0IGZ1bGxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fdGV4dCA9ICcnO1xuICAgICAgICB0aGlzLl90ZXh0ID0gaW5wdXQgIT09IG51bGwgJiYgaW5wdXQgIT09IHZvaWQgMCA/IGlucHV0IDogJyc7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3N0LW5vZGUtYnVpbGRlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLCBFbWJlZGRlZEFjdGlvbnNQYXJzZXIsIExMa0xvb2thaGVhZFN0cmF0ZWd5IH0gZnJvbSAnY2hldnJvdGFpbic7XG5pbXBvcnQgeyBMTFN0YXJMb29rYWhlYWRTdHJhdGVneSB9IGZyb20gJ2NoZXZyb3RhaW4tYWxsc3Rhcic7XG5pbXBvcnQgeyBpc0Fzc2lnbm1lbnQsIGlzQ3Jvc3NSZWZlcmVuY2UsIGlzS2V5d29yZCB9IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IGdldFR5cGVOYW1lLCBpc0RhdGFUeXBlUnVsZSB9IGZyb20gJy4uL3V0aWxzL2dyYW1tYXItdXRpbHMuanMnO1xuaW1wb3J0IHsgYXNzaWduTWFuZGF0b3J5UHJvcGVydGllcywgZ2V0Q29udGFpbmVyT2ZUeXBlLCBsaW5rQ29udGVudFRvQ29udGFpbmVyIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENzdE5vZGVCdWlsZGVyIH0gZnJvbSAnLi9jc3Qtbm9kZS1idWlsZGVyLmpzJztcbmV4cG9ydCBjb25zdCBEYXRhdHlwZVN5bWJvbCA9IFN5bWJvbCgnRGF0YXR5cGUnKTtcbmZ1bmN0aW9uIGlzRGF0YVR5cGVOb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS4kdHlwZSA9PT0gRGF0YXR5cGVTeW1ib2w7XG59XG5jb25zdCBydWxlU3VmZml4ID0gJ1xcdTIwMEInO1xuY29uc3Qgd2l0aFJ1bGVTdWZmaXggPSAobmFtZSkgPT4gbmFtZS5lbmRzV2l0aChydWxlU3VmZml4KSA/IG5hbWUgOiBuYW1lICsgcnVsZVN1ZmZpeDtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdExhbmdpdW1QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuX3Vub3JkZXJlZEdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5sZXhlciA9IHNlcnZpY2VzLnBhcnNlci5MZXhlcjtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5sZXhlci5kZWZpbml0aW9uO1xuICAgICAgICB0aGlzLndyYXBwZXIgPSBuZXcgQ2hldnJvdGFpbldyYXBwZXIodG9rZW5zLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNlcnZpY2VzLnBhcnNlci5QYXJzZXJDb25maWcpLCB7IGVycm9yTWVzc2FnZVByb3ZpZGVyOiBzZXJ2aWNlcy5wYXJzZXIuUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIgfSkpO1xuICAgIH1cbiAgICBhbHRlcm5hdGl2ZXMoaWR4LCBjaG9pY2VzKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwT3IoaWR4LCBjaG9pY2VzKTtcbiAgICB9XG4gICAgb3B0aW9uYWwoaWR4LCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLndyYXBwZXIud3JhcE9wdGlvbihpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgbWFueShpZHgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwTWFueShpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwQXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaXNSZWNvcmRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXIuSVNfUkVDT1JESU5HO1xuICAgIH1cbiAgICBnZXQgdW5vcmRlcmVkR3JvdXBzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5vcmRlcmVkR3JvdXBzO1xuICAgIH1cbiAgICBnZXRSdWxlU3RhY2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXIuUlVMRV9TVEFDSztcbiAgICB9XG4gICAgZmluYWxpemUoKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwU2VsZkFuYWx5c2lzKCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExhbmdpdW1QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdExhbmdpdW1QYXJzZXIge1xuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlcykge1xuICAgICAgICBzdXBlcihzZXJ2aWNlcyk7XG4gICAgICAgIHRoaXMubm9kZUJ1aWxkZXIgPSBuZXcgQ3N0Tm9kZUJ1aWxkZXIoKTtcbiAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmFzc2lnbm1lbnRNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMubGlua2VyID0gc2VydmljZXMucmVmZXJlbmNlcy5MaW5rZXI7XG4gICAgICAgIHRoaXMuY29udmVydGVyID0gc2VydmljZXMucGFyc2VyLlZhbHVlQ29udmVydGVyO1xuICAgICAgICB0aGlzLmFzdFJlZmxlY3Rpb24gPSBzZXJ2aWNlcy5zaGFyZWQuQXN0UmVmbGVjdGlvbjtcbiAgICB9XG4gICAgcnVsZShydWxlLCBpbXBsKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBydWxlLmZyYWdtZW50ID8gdW5kZWZpbmVkIDogaXNEYXRhVHlwZVJ1bGUocnVsZSkgPyBEYXRhdHlwZVN5bWJvbCA6IGdldFR5cGVOYW1lKHJ1bGUpO1xuICAgICAgICBjb25zdCBydWxlTWV0aG9kID0gdGhpcy53cmFwcGVyLkRFRklORV9SVUxFKHdpdGhSdWxlU3VmZml4KHJ1bGUubmFtZSksIHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbih0eXBlLCBpbXBsKS5iaW5kKHRoaXMpKTtcbiAgICAgICAgaWYgKHJ1bGUuZW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMubWFpblJ1bGUgPSBydWxlTWV0aG9kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlTWV0aG9kO1xuICAgIH1cbiAgICBwYXJzZShpbnB1dCkge1xuICAgICAgICB0aGlzLm5vZGVCdWlsZGVyLmJ1aWxkUm9vdE5vZGUoaW5wdXQpO1xuICAgICAgICBjb25zdCBsZXhlclJlc3VsdCA9IHRoaXMubGV4ZXIudG9rZW5pemUoaW5wdXQpO1xuICAgICAgICB0aGlzLndyYXBwZXIuaW5wdXQgPSBsZXhlclJlc3VsdC50b2tlbnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWFpblJ1bGUuY2FsbCh0aGlzLndyYXBwZXIsIHt9KTtcbiAgICAgICAgdGhpcy5ub2RlQnVpbGRlci5hZGRIaWRkZW5Ub2tlbnMobGV4ZXJSZXN1bHQuaGlkZGVuKTtcbiAgICAgICAgdGhpcy51bm9yZGVyZWRHcm91cHMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgICAgICBsZXhlckVycm9yczogbGV4ZXJSZXN1bHQuZXJyb3JzLFxuICAgICAgICAgICAgcGFyc2VyRXJyb3JzOiB0aGlzLndyYXBwZXIuZXJyb3JzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXJ0SW1wbGVtZW50YXRpb24oJHR5cGUsIGltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0geyAkdHlwZSB9O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPT09IERhdGF0eXBlU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbXBsZW1lbnRhdGlvbihhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcoKSAmJiByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY29uc3RydWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdW1lKGlkeCwgdG9rZW5UeXBlLCBmZWF0dXJlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy53cmFwcGVyLndyYXBDb25zdW1lKGlkeCwgdG9rZW5UeXBlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKCkgJiYgdGhpcy5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBsZWFmTm9kZSA9IHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRMZWFmTm9kZSh0b2tlbiwgZmVhdHVyZSk7XG4gICAgICAgICAgICBjb25zdCB7IGFzc2lnbm1lbnQsIGlzQ3Jvc3NSZWYgfSA9IHRoaXMuZ2V0QXNzaWdubWVudChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gaXNLZXl3b3JkKGZlYXR1cmUpID8gdG9rZW4uaW1hZ2UgOiB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KHRva2VuLmltYWdlLCBsZWFmTm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NpZ24oYXNzaWdubWVudC5vcGVyYXRvciwgYXNzaWdubWVudC5mZWF0dXJlLCBjb252ZXJ0ZWRWYWx1ZSwgbGVhZk5vZGUsIGlzQ3Jvc3NSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEYXRhVHlwZU5vZGUoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IHRva2VuLmltYWdlO1xuICAgICAgICAgICAgICAgIGlmICghaXNLZXl3b3JkKGZlYXR1cmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KHRleHQsIGxlYWZOb2RlKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50LnZhbHVlICs9IHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdCBjb25zdW1lZCBwYXJzZXIgdG9rZW5zIGFyZSB2YWxpZC4gSG93ZXZlciB0aGVyZSBhcmUgdHdvIGNhc2VzIGluIHdoaWNoIHRoZXkgYXJlIG5vdCB2YWxpZDpcbiAgICAgKlxuICAgICAqIDEuIFRoZXkgd2VyZSBpbnNlcnRlZCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgYnkgdGhlIHBhcnNlci4gVGhlc2UgdG9rZW5zIGRvbid0IHJlYWxseSBleGlzdCBhbmQgc2hvdWxkIG5vdCBiZSBmdXJ0aGVyIHByb2Nlc3NlZFxuICAgICAqIDIuIFRoZXkgY29udGFpbiBpbnZhbGlkIHRva2VuIHJhbmdlcy4gVGhpcyBtaWdodCBpbmNsdWRlIHRoZSBzcGVjaWFsIEVPRiB0b2tlbiwgb3Igb3RoZXIgdG9rZW5zIHByb2R1Y2VkIGJ5IGludmFsaWQgdG9rZW4gYnVpbGRlcnMuXG4gICAgICovXG4gICAgaXNWYWxpZFRva2VuKHRva2VuKSB7XG4gICAgICAgIHJldHVybiAhdG9rZW4uaXNJbnNlcnRlZEluUmVjb3ZlcnkgJiYgIWlzTmFOKHRva2VuLnN0YXJ0T2Zmc2V0KSAmJiB0eXBlb2YgdG9rZW4uZW5kT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odG9rZW4uZW5kT2Zmc2V0KTtcbiAgICB9XG4gICAgc3VicnVsZShpZHgsIHJ1bGUsIGZlYXR1cmUsIGFyZ3MpIHtcbiAgICAgICAgbGV0IGNzdE5vZGU7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBjc3ROb2RlID0gdGhpcy5ub2RlQnVpbGRlci5idWlsZENvbXBvc2l0ZU5vZGUoZmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicnVsZVJlc3VsdCA9IHRoaXMud3JhcHBlci53cmFwU3VicnVsZShpZHgsIHJ1bGUsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcoKSAmJiBjc3ROb2RlICYmIGNzdE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtU3VicnVsZUFzc2lnbm1lbnQoc3VicnVsZVJlc3VsdCwgZmVhdHVyZSwgY3N0Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGVyZm9ybVN1YnJ1bGVBc3NpZ25tZW50KHJlc3VsdCwgZmVhdHVyZSwgY3N0Tm9kZSkge1xuICAgICAgICBjb25zdCB7IGFzc2lnbm1lbnQsIGlzQ3Jvc3NSZWYgfSA9IHRoaXMuZ2V0QXNzaWdubWVudChmZWF0dXJlKTtcbiAgICAgICAgaWYgKGFzc2lnbm1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduKGFzc2lnbm1lbnQub3BlcmF0b3IsIGFzc2lnbm1lbnQuZmVhdHVyZSwgcmVzdWx0LCBjc3ROb2RlLCBpc0Nyb3NzUmVmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYXNzaWdubWVudCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgY2FsbCBhIHN1YnJ1bGUgd2l0aG91dCBhbiBhc3NpZ25tZW50IHdlIGVpdGhlcjpcbiAgICAgICAgICAgIC8vIDEuIGFwcGVuZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWJydWxlIChkYXRhIHR5cGUgcnVsZSlcbiAgICAgICAgICAgIC8vIDIuIG92ZXJyaWRlIHRoZSBjdXJyZW50IG9iamVjdCB3aXRoIHRoZSBuZXdseSBwYXJzZWQgb2JqZWN0XG4gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGFuIEFTVCBub2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWJydWxlXG4gICAgICAgICAgICAvLyBpcyBhIGRhdGEgdHlwZSBydWxlLCB3ZSBjYW4gc2FmZWx5IGRpc2NhcmQgdGhlIHJlc3VsdHMuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKGlzRGF0YVR5cGVOb2RlKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudC52YWx1ZSArPSByZXN1bHQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtpbmQgPSByZXN1bHQuJHR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5hc3NpZ25XaXRob3V0T3ZlcnJpZGUocmVzdWx0LCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0S2luZCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuJHR5cGUgPSByZXN1bHRLaW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0gb2JqZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKG5ld0l0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFjdGlvbigkdHlwZSwgYWN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVzZWQgZm9yIGxlZnQgcmVjdXJzaXZlIGdyYW1tYXIgcnVsZXMuXG4gICAgICAgICAgICAvLyBUaG9zZSBkb24ndCBjYWxsIGBjb25zdHJ1Y3RgIGJlZm9yZSBhbm90aGVyIGFjdGlvbi5cbiAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBjYWxsIGl0IGhlcmUuXG4gICAgICAgICAgICBpZiAoIWxhc3QuJGNzdE5vZGUgJiYgYWN0aW9uLmZlYXR1cmUgJiYgYWN0aW9uLm9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgbGFzdCA9IHRoaXMuY29uc3RydWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbGFzdC4kY3N0Tm9kZS5mZWF0dXJlO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRDb21wb3NpdGVOb2RlKGZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgJHR5cGUgfTtcbiAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmZlYXR1cmUgJiYgYWN0aW9uLm9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NpZ24oYWN0aW9uLm9wZXJhdG9yLCBhY3Rpb24uZmVhdHVyZSwgbGFzdCwgbGFzdC4kY3N0Tm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdChwb3AgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBsaW5rQ29udGVudFRvQ29udGFpbmVyKG9iaik7XG4gICAgICAgIHRoaXMubm9kZUJ1aWxkZXIuY29uc3RydWN0KG9iaik7XG4gICAgICAgIGlmIChwb3ApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGF0YVR5cGVOb2RlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KG9iai52YWx1ZSwgb2JqLiRjc3ROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXModGhpcy5hc3RSZWZsZWN0aW9uLCBvYmopO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGdldEFzc2lnbm1lbnQoZmVhdHVyZSkge1xuICAgICAgICBpZiAoIXRoaXMuYXNzaWdubWVudE1hcC5oYXMoZmVhdHVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBnZXRDb250YWluZXJPZlR5cGUoZmVhdHVyZSwgaXNBc3NpZ25tZW50KTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWdubWVudE1hcC5zZXQoZmVhdHVyZSwge1xuICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQ6IGFzc2lnbm1lbnQsXG4gICAgICAgICAgICAgICAgaXNDcm9zc1JlZjogYXNzaWdubWVudCA/IGlzQ3Jvc3NSZWZlcmVuY2UoYXNzaWdubWVudC50ZXJtaW5hbCkgOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudE1hcC5nZXQoZmVhdHVyZSk7XG4gICAgfVxuICAgIGFzc2lnbihvcGVyYXRvciwgZmVhdHVyZSwgdmFsdWUsIGNzdE5vZGUsIGlzQ3Jvc3NSZWYpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgaWYgKGlzQ3Jvc3NSZWYgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKG9iaiwgZmVhdHVyZSwgY3N0Tm9kZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlbSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgJz0nOiB7XG4gICAgICAgICAgICAgICAgb2JqW2ZlYXR1cmVdID0gaXRlbTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJz89Jzoge1xuICAgICAgICAgICAgICAgIG9ialtmZWF0dXJlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICcrPSc6IHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqW2ZlYXR1cmVdKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpbZmVhdHVyZV0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqW2ZlYXR1cmVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXNzaWduV2l0aG91dE92ZXJyaWRlKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4aXN0aW5nVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGFyZ2V0W25hbWVdO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBleGlzdGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCguLi5uZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gZXhpc3RpbmdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBnZXQgZGVmaW5pdGlvbkVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlci5kZWZpbml0aW9uRXJyb3JzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIHtcbiAgICBidWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uob3B0aW9ucyk7XG4gICAgfVxuICAgIGJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLmJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKG9wdGlvbnMpO1xuICAgIH1cbiAgICBidWlsZE5vVmlhYmxlQWx0TWVzc2FnZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UGFyc2VyRXJyb3JQcm92aWRlci5idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG4gICAgYnVpbGRFYXJseUV4aXRNZXNzYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGFuZ2l1bVBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciB7XG4gICAgYnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7IGV4cGVjdGVkLCBhY3R1YWwgfSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZE1zZyA9IGV4cGVjdGVkLkxBQkVMXG4gICAgICAgICAgICA/ICdgJyArIGV4cGVjdGVkLkxBQkVMICsgJ2AnXG4gICAgICAgICAgICA6IGV4cGVjdGVkLm5hbWUuZW5kc1dpdGgoJzpLVycpXG4gICAgICAgICAgICAgICAgPyBga2V5d29yZCAnJHtleHBlY3RlZC5uYW1lLnN1YnN0cmluZygwLCBleHBlY3RlZC5uYW1lLmxlbmd0aCAtIDMpfSdgXG4gICAgICAgICAgICAgICAgOiBgdG9rZW4gb2YgdHlwZSAnJHtleHBlY3RlZC5uYW1lfSdgO1xuICAgICAgICByZXR1cm4gYEV4cGVjdGluZyAke2V4cGVjdGVkTXNnfSBidXQgZm91bmQgXFxgJHthY3R1YWwuaW1hZ2V9XFxgLmA7XG4gICAgfVxuICAgIGJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHsgZmlyc3RSZWR1bmRhbnQgfSkge1xuICAgICAgICByZXR1cm4gYEV4cGVjdGluZyBlbmQgb2YgZmlsZSBidXQgZm91bmQgXFxgJHtmaXJzdFJlZHVuZGFudC5pbWFnZX1cXGAuYDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdExhbmdpdW1QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgICAgICB0aGlzLmVsZW1lbnRTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RFbGVtZW50U3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0VG9rZW5JbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gMDtcbiAgICB9XG4gICAgYWN0aW9uKCkge1xuICAgICAgICAvLyBOT09QXG4gICAgfVxuICAgIGNvbnN0cnVjdCgpIHtcbiAgICAgICAgLy8gTk9PUFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwYXJzZShpbnB1dCkge1xuICAgICAgICB0aGlzLnJlc2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5sZXhlci50b2tlbml6ZShpbnB1dCk7XG4gICAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zLnRva2VucztcbiAgICAgICAgdGhpcy53cmFwcGVyLmlucHV0ID0gWy4uLnRoaXMudG9rZW5zXTtcbiAgICAgICAgdGhpcy5tYWluUnVsZS5jYWxsKHRoaXMud3JhcHBlciwge30pO1xuICAgICAgICB0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW5zOiB0aGlzLnRva2VucyxcbiAgICAgICAgICAgIGVsZW1lbnRTdGFjazogWy4uLnRoaXMubGFzdEVsZW1lbnRTdGFja10sXG4gICAgICAgICAgICB0b2tlbkluZGV4OiB0aGlzLm5leHRUb2tlbkluZGV4XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJ1bGUocnVsZSwgaW1wbCkge1xuICAgICAgICBjb25zdCBydWxlTWV0aG9kID0gdGhpcy53cmFwcGVyLkRFRklORV9SVUxFKHdpdGhSdWxlU3VmZml4KHJ1bGUubmFtZSksIHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihpbXBsKS5iaW5kKHRoaXMpKTtcbiAgICAgICAgaWYgKHJ1bGUuZW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMubWFpblJ1bGUgPSBydWxlTWV0aG9kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlTWV0aG9kO1xuICAgIH1cbiAgICByZXNldFN0YXRlKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RFbGVtZW50U3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0VG9rZW5JbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gMDtcbiAgICB9XG4gICAgc3RhcnRJbXBsZW1lbnRhdGlvbihpbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmtlZXBTdGFja1NpemUoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24oYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U3RhY2tTaXplKHNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFN0YWNrLnNwbGljZSh0aGlzLnN0YWNrU2l6ZSk7XG4gICAgfVxuICAgIGtlZXBTdGFja1NpemUoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmVsZW1lbnRTdGFjay5sZW5ndGg7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgfVxuICAgIHJlc2V0U3RhY2tTaXplKHNpemUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5zdGFja1NpemUgPSBzaXplO1xuICAgIH1cbiAgICBjb25zdW1lKGlkeCwgdG9rZW5UeXBlLCBmZWF0dXJlKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwQ29uc3VtZShpZHgsIHRva2VuVHlwZSk7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFbGVtZW50U3RhY2sgPSBbLi4udGhpcy5lbGVtZW50U3RhY2ssIGZlYXR1cmVdO1xuICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW5JbmRleCA9IHRoaXMuY3VycklkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3VicnVsZShpZHgsIHJ1bGUsIGZlYXR1cmUsIGFyZ3MpIHtcbiAgICAgICAgdGhpcy5iZWZvcmUoZmVhdHVyZSk7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwU3VicnVsZShpZHgsIHJ1bGUsIGFyZ3MpO1xuICAgICAgICB0aGlzLmFmdGVyKGZlYXR1cmUpO1xuICAgIH1cbiAgICBiZWZvcmUoZWxlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZnRlcihlbGVtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZWxlbWVudFN0YWNrLmxhc3RJbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2UoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjdXJySWR4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVyLmN1cnJJZHg7XG4gICAgfVxufVxuY29uc3QgZGVmYXVsdENvbmZpZyA9IHtcbiAgICByZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgbm9kZUxvY2F0aW9uVHJhY2tpbmc6ICdmdWxsJyxcbiAgICBza2lwVmFsaWRhdGlvbnM6IHRydWUsXG4gICAgZXJyb3JNZXNzYWdlUHJvdmlkZXI6IG5ldyBMYW5naXVtUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIoKVxufTtcbi8qKlxuICogVGhpcyBjbGFzcyB3cmFwcyB0aGUgZW1iZWRkZWQgYWN0aW9ucyBwYXJzZXIgb2YgY2hldnJvdGFpbiBhbmQgZXhwb3NlcyBwcm90ZWN0ZWQgbWV0aG9kcy5cbiAqIFRoaXMgd2F5LCB3ZSBjYW4gYnVpbGQgdGhlIGBMYW5naXVtUGFyc2VyYCBhcyBhIGNvbXBvc2l0aW9uLlxuICovXG5jbGFzcyBDaGV2cm90YWluV3JhcHBlciBleHRlbmRzIEVtYmVkZGVkQWN0aW9uc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW5zLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgdXNlRGVmYXVsdExvb2thaGVhZCA9IGNvbmZpZyAmJiAnbWF4TG9va2FoZWFkJyBpbiBjb25maWc7XG4gICAgICAgIHN1cGVyKHRva2VucywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcpLCB7IGxvb2thaGVhZFN0cmF0ZWd5OiB1c2VEZWZhdWx0TG9va2FoZWFkXG4gICAgICAgICAgICAgICAgPyBuZXcgTExrTG9va2FoZWFkU3RyYXRlZ3koeyBtYXhMb29rYWhlYWQ6IGNvbmZpZy5tYXhMb29rYWhlYWQgfSlcbiAgICAgICAgICAgICAgICA6IG5ldyBMTFN0YXJMb29rYWhlYWRTdHJhdGVneSgpIH0pLCBjb25maWcpKTtcbiAgICB9XG4gICAgZ2V0IElTX1JFQ09SRElORygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuUkVDT1JESU5HX1BIQVNFO1xuICAgIH1cbiAgICBERUZJTkVfUlVMRShuYW1lLCBpbXBsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlJVTEUobmFtZSwgaW1wbCk7XG4gICAgfVxuICAgIHdyYXBTZWxmQW5hbHlzaXMoKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybVNlbGZBbmFseXNpcygpO1xuICAgIH1cbiAgICB3cmFwQ29uc3VtZShpZHgsIHRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lKGlkeCwgdG9rZW5UeXBlKTtcbiAgICB9XG4gICAgd3JhcFN1YnJ1bGUoaWR4LCBydWxlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGUoaWR4LCBydWxlLCB7XG4gICAgICAgICAgICBBUkdTOiBbYXJnc11cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdyYXBPcihpZHgsIGNob2ljZXMpIHtcbiAgICAgICAgdGhpcy5vcihpZHgsIGNob2ljZXMpO1xuICAgIH1cbiAgICB3cmFwT3B0aW9uKGlkeCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vcHRpb24oaWR4LCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHdyYXBNYW55KGlkeCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5tYW55KGlkeCwgY2FsbGJhY2spO1xuICAgIH1cbiAgICB3cmFwQXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5naXVtLXBhcnNlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IEVNUFRZX0FMVCwgRU9GIH0gZnJvbSAnY2hldnJvdGFpbic7XG5pbXBvcnQgeyBpc0FjdGlvbiwgaXNBbHRlcm5hdGl2ZXMsIGlzRW5kT2ZGaWxlLCBpc0Fzc2lnbm1lbnQsIGlzQ29uanVuY3Rpb24sIGlzQ3Jvc3NSZWZlcmVuY2UsIGlzRGlzanVuY3Rpb24sIGlzR3JvdXAsIGlzS2V5d29yZCwgaXNOZWdhdGlvbiwgaXNQYXJhbWV0ZXJSZWZlcmVuY2UsIGlzUGFyc2VyUnVsZSwgaXNSdWxlQ2FsbCwgaXNUZXJtaW5hbFJ1bGUsIGlzVW5vcmRlcmVkR3JvdXAsIGlzQm9vbGVhbkxpdGVyYWwgfSBmcm9tICcuLi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyc7XG5pbXBvcnQgeyBhc3NlcnRVbnJlYWNoYWJsZSwgRXJyb3JXaXRoTG9jYXRpb24gfSBmcm9tICcuLi91dGlscy9lcnJvcnMuanMnO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtLmpzJztcbmltcG9ydCB7IGZpbmROYW1lQXNzaWdubWVudCwgZ2V0QWxsUmVhY2hhYmxlUnVsZXMsIGdldFR5cGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2VyKGdyYW1tYXIsIHBhcnNlciwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZXMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcGFyc2VyQ29udGV4dCA9IHtcbiAgICAgICAgcGFyc2VyLFxuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBydWxlTmFtZXM6IG5ldyBNYXAoKVxuICAgIH07XG4gICAgYnVpbGRSdWxlcyhwYXJzZXJDb250ZXh0LCBncmFtbWFyKTtcbiAgICByZXR1cm4gcGFyc2VyO1xufVxuZnVuY3Rpb24gYnVpbGRSdWxlcyhwYXJzZXJDb250ZXh0LCBncmFtbWFyKSB7XG4gICAgY29uc3QgcmVhY2hhYmxlID0gZ2V0QWxsUmVhY2hhYmxlUnVsZXMoZ3JhbW1hciwgZmFsc2UpO1xuICAgIGNvbnN0IHBhcnNlclJ1bGVzID0gc3RyZWFtKGdyYW1tYXIucnVsZXMpLmZpbHRlcihpc1BhcnNlclJ1bGUpLmZpbHRlcihydWxlID0+IHJlYWNoYWJsZS5oYXMocnVsZSkpO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBwYXJzZXJSdWxlcykge1xuICAgICAgICBjb25zdCBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcnNlckNvbnRleHQpLCB7IGNvbnN1bWU6IDEsIG9wdGlvbmFsOiAxLCBzdWJydWxlOiAxLCBtYW55OiAxLCBvcjogMSB9KTtcbiAgICAgICAgY3R4LnJ1bGVzLnNldChydWxlLm5hbWUsIHBhcnNlckNvbnRleHQucGFyc2VyLnJ1bGUocnVsZSwgYnVpbGRFbGVtZW50KGN0eCwgcnVsZS5kZWZpbml0aW9uKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkRWxlbWVudChjdHgsIGVsZW1lbnQsIGlnbm9yZUd1YXJkID0gZmFsc2UpIHtcbiAgICBsZXQgbWV0aG9kO1xuICAgIGlmIChpc0tleXdvcmQoZWxlbWVudCkpIHtcbiAgICAgICAgbWV0aG9kID0gYnVpbGRLZXl3b3JkKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICAgIG1ldGhvZCA9IGJ1aWxkQWN0aW9uKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXNzaWdubWVudChlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZEVsZW1lbnQoY3R4LCBlbGVtZW50LnRlcm1pbmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDcm9zc1JlZmVyZW5jZShlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZENyb3NzUmVmZXJlbmNlKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUnVsZUNhbGwoZWxlbWVudCkpIHtcbiAgICAgICAgbWV0aG9kID0gYnVpbGRSdWxlQ2FsbChjdHgsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FsdGVybmF0aXZlcyhlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZEFsdGVybmF0aXZlcyhjdHgsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1Vub3JkZXJlZEdyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgIG1ldGhvZCA9IGJ1aWxkVW5vcmRlcmVkR3JvdXAoY3R4LCBlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZEdyb3VwKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRW5kT2ZGaWxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGN0eC5jb25zdW1lKys7XG4gICAgICAgIG1ldGhvZCA9ICgpID0+IGN0eC5wYXJzZXIuY29uc3VtZShpZHgsIEVPRiwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JXaXRoTG9jYXRpb24oZWxlbWVudC4kY3N0Tm9kZSwgYFVuZXhwZWN0ZWQgZWxlbWVudCB0eXBlOiAke2VsZW1lbnQuJHR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwKGN0eCwgaWdub3JlR3VhcmQgPyB1bmRlZmluZWQgOiBnZXRHdWFyZENvbmRpdGlvbihlbGVtZW50KSwgbWV0aG9kLCBlbGVtZW50LmNhcmRpbmFsaXR5KTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQWN0aW9uKGN0eCwgYWN0aW9uKSB7XG4gICAgY29uc3QgYWN0aW9uVHlwZSA9IGdldFR5cGVOYW1lKGFjdGlvbik7XG4gICAgcmV0dXJuICgpID0+IGN0eC5wYXJzZXIuYWN0aW9uKGFjdGlvblR5cGUsIGFjdGlvbik7XG59XG5mdW5jdGlvbiBidWlsZFJ1bGVDYWxsKGN0eCwgcnVsZUNhbGwpIHtcbiAgICBjb25zdCBydWxlID0gcnVsZUNhbGwucnVsZS5yZWY7XG4gICAgaWYgKGlzUGFyc2VyUnVsZShydWxlKSkge1xuICAgICAgICBjb25zdCBpZHggPSBjdHguc3VicnVsZSsrO1xuICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBydWxlQ2FsbC5hcmd1bWVudHMubGVuZ3RoID4gMCA/IGJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUocnVsZSwgcnVsZUNhbGwuYXJndW1lbnRzKSA6ICgpID0+ICh7fSk7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4gY3R4LnBhcnNlci5zdWJydWxlKGlkeCwgZ2V0UnVsZShjdHgsIHJ1bGUpLCBydWxlQ2FsbCwgcHJlZGljYXRlKGFyZ3MpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNUZXJtaW5hbFJ1bGUocnVsZSkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY3R4LmNvbnN1bWUrKztcbiAgICAgICAgY29uc3QgbWV0aG9kID0gZ2V0VG9rZW4oY3R4LCBydWxlLm5hbWUpO1xuICAgICAgICByZXR1cm4gKCkgPT4gY3R4LnBhcnNlci5jb25zdW1lKGlkeCwgbWV0aG9kLCBydWxlQ2FsbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFydWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcldpdGhMb2NhdGlvbihydWxlQ2FsbC4kY3N0Tm9kZSwgYFVuZGVmaW5lZCBydWxlIHR5cGU6ICR7cnVsZUNhbGwuJHR5cGV9YCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShydWxlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBidWlsZFJ1bGVDYWxsUHJlZGljYXRlKHJ1bGUsIG5hbWVkQXJncykge1xuICAgIGNvbnN0IHByZWRpY2F0ZXMgPSBuYW1lZEFyZ3MubWFwKGUgPT4gYnVpbGRQcmVkaWNhdGUoZS52YWx1ZSkpO1xuICAgIHJldHVybiAoYXJncykgPT4ge1xuICAgICAgICBjb25zdCBydWxlQXJncyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZWRpY2F0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVUYXJnZXQgPSBydWxlLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW2ldO1xuICAgICAgICAgICAgcnVsZUFyZ3NbcnVsZVRhcmdldC5uYW1lXSA9IHByZWRpY2F0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVsZUFyZ3M7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUHJlZGljYXRlKGNvbmRpdGlvbikge1xuICAgIGlmIChpc0Rpc2p1bmN0aW9uKGNvbmRpdGlvbikpIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IGJ1aWxkUHJlZGljYXRlKGNvbmRpdGlvbi5sZWZ0KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBidWlsZFByZWRpY2F0ZShjb25kaXRpb24ucmlnaHQpO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IChsZWZ0KGFyZ3MpIHx8IHJpZ2h0KGFyZ3MpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb25qdW5jdGlvbihjb25kaXRpb24pKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBidWlsZFByZWRpY2F0ZShjb25kaXRpb24ubGVmdCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gYnVpbGRQcmVkaWNhdGUoY29uZGl0aW9uLnJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIChhcmdzKSA9PiAobGVmdChhcmdzKSAmJiByaWdodChhcmdzKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTmVnYXRpb24oY29uZGl0aW9uKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGJ1aWxkUHJlZGljYXRlKGNvbmRpdGlvbi52YWx1ZSk7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4gIXZhbHVlKGFyZ3MpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1BhcmFtZXRlclJlZmVyZW5jZShjb25kaXRpb24pKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBjb25kaXRpb24ucGFyYW1ldGVyLnJlZi5uYW1lO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGFyZ3MgIT09IHVuZGVmaW5lZCAmJiBhcmdzW25hbWVdID09PSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Jvb2xlYW5MaXRlcmFsKGNvbmRpdGlvbikpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBCb29sZWFuKGNvbmRpdGlvbi50cnVlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHZhbHVlO1xuICAgIH1cbiAgICBhc3NlcnRVbnJlYWNoYWJsZShjb25kaXRpb24pO1xufVxuZnVuY3Rpb24gYnVpbGRBbHRlcm5hdGl2ZXMoY3R4LCBhbHRlcm5hdGl2ZXMpIHtcbiAgICBpZiAoYWx0ZXJuYXRpdmVzLmVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYnVpbGRFbGVtZW50KGN0eCwgYWx0ZXJuYXRpdmVzLmVsZW1lbnRzWzBdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFsdGVybmF0aXZlcy5lbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlZE1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYW5kbGUgdGhlIGd1YXJkIGNvbmRpdGlvbiBpbiB0aGUgYWx0ZXJuYXRpdmUgYWxyZWFkeVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBpZ25vcmUgdGhlIGdyb3VwIGd1YXJkIGNvbmRpdGlvbiBpbnNpZGVcbiAgICAgICAgICAgICAgICBBTFQ6IGJ1aWxkRWxlbWVudChjdHgsIGVsZW1lbnQsIHRydWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ3VhcmQgPSBnZXRHdWFyZENvbmRpdGlvbihlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChndWFyZCkge1xuICAgICAgICAgICAgICAgIHByZWRpY2F0ZWRNZXRob2QuR0FURSA9IGJ1aWxkUHJlZGljYXRlKGd1YXJkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGhvZHMucHVzaChwcmVkaWNhdGVkTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHggPSBjdHgub3IrKztcbiAgICAgICAgcmV0dXJuIChhcmdzKSA9PiBjdHgucGFyc2VyLmFsdGVybmF0aXZlcyhpZHgsIG1ldGhvZHMubWFwKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbHQgPSB7XG4gICAgICAgICAgICAgICAgQUxUOiAoKSA9PiBtZXRob2QuQUxUKGFyZ3MpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ2F0ZSA9IG1ldGhvZC5HQVRFO1xuICAgICAgICAgICAgaWYgKGdhdGUpIHtcbiAgICAgICAgICAgICAgICBhbHQuR0FURSA9ICgpID0+IGdhdGUoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRVbm9yZGVyZWRHcm91cChjdHgsIGdyb3VwKSB7XG4gICAgaWYgKGdyb3VwLmVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYnVpbGRFbGVtZW50KGN0eCwgZ3JvdXAuZWxlbWVudHNbMF0pO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2RzID0gW107XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGdyb3VwLmVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHByZWRpY2F0ZWRNZXRob2QgPSB7XG4gICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYW5kbGUgdGhlIGd1YXJkIGNvbmRpdGlvbiBpbiB0aGUgYWx0ZXJuYXRpdmUgYWxyZWFkeVxuICAgICAgICAgICAgLy8gV2UgY2FuIGlnbm9yZSB0aGUgZ3JvdXAgZ3VhcmQgY29uZGl0aW9uIGluc2lkZVxuICAgICAgICAgICAgQUxUOiBidWlsZEVsZW1lbnQoY3R4LCBlbGVtZW50LCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBndWFyZCA9IGdldEd1YXJkQ29uZGl0aW9uKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZ3VhcmQpIHtcbiAgICAgICAgICAgIHByZWRpY2F0ZWRNZXRob2QuR0FURSA9IGJ1aWxkUHJlZGljYXRlKGd1YXJkKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRob2RzLnB1c2gocHJlZGljYXRlZE1ldGhvZCk7XG4gICAgfVxuICAgIGNvbnN0IG9ySWR4ID0gY3R4Lm9yKys7XG4gICAgY29uc3QgaWRGdW5jID0gKGdyb3VwSWR4LCBsUGFyc2VyKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrSWQgPSBsUGFyc2VyLmdldFJ1bGVTdGFjaygpLmpvaW4oJy0nKTtcbiAgICAgICAgcmV0dXJuIGB1R3JvdXBfJHtncm91cElkeH1fJHtzdGFja0lkfWA7XG4gICAgfTtcbiAgICBjb25zdCBhbHRlcm5hdGl2ZXMgPSAoYXJncykgPT4gY3R4LnBhcnNlci5hbHRlcm5hdGl2ZXMob3JJZHgsIG1ldGhvZHMubWFwKChtZXRob2QsIGlkeCkgPT4ge1xuICAgICAgICBjb25zdCBhbHQgPSB7IEFMVDogKCkgPT4gdHJ1ZSB9O1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBjdHgucGFyc2VyO1xuICAgICAgICBhbHQuQUxUID0gKCkgPT4ge1xuICAgICAgICAgICAgbWV0aG9kLkFMVChhcmdzKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VyLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBpZEZ1bmMob3JJZHgsIHBhcnNlcik7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZXIudW5vcmRlcmVkR3JvdXBzLmdldChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluaXQgYWZ0ZXIgY2xlYXIgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnVub3JkZXJlZEdyb3Vwcy5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhdGUgPSBwYXJzZXIudW5vcmRlcmVkR3JvdXBzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGdyb3VwU3RhdGUgPT09IG51bGwgfHwgZ3JvdXBTdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ3JvdXBTdGF0ZVtpZHhdKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90IGFjY2Vzc2VkIHlldFxuICAgICAgICAgICAgICAgICAgICBncm91cFN0YXRlW2lkeF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2F0ZSA9IG1ldGhvZC5HQVRFO1xuICAgICAgICBpZiAoZ2F0ZSkge1xuICAgICAgICAgICAgYWx0LkdBVEUgPSAoKSA9PiBnYXRlKGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWx0LkdBVEUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tlZEFsdGVybmF0aXZlcyA9IHBhcnNlci51bm9yZGVyZWRHcm91cHMuZ2V0KGlkRnVuYyhvcklkeCwgcGFyc2VyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsb3cgPSAhKHRyYWNrZWRBbHRlcm5hdGl2ZXMgPT09IG51bGwgfHwgdHJhY2tlZEFsdGVybmF0aXZlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhY2tlZEFsdGVybmF0aXZlc1tpZHhdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxsb3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSkpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwKGN0eCwgZ2V0R3VhcmRDb25kaXRpb24oZ3JvdXApLCBhbHRlcm5hdGl2ZXMsICcqJyk7XG4gICAgcmV0dXJuIChhcmdzKSA9PiB7XG4gICAgICAgIHdyYXBwZWQoYXJncyk7XG4gICAgICAgIGlmICghY3R4LnBhcnNlci5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBjdHgucGFyc2VyLnVub3JkZXJlZEdyb3Vwcy5kZWxldGUoaWRGdW5jKG9ySWR4LCBjdHgucGFyc2VyKSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRHcm91cChjdHgsIGdyb3VwKSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IGdyb3VwLmVsZW1lbnRzLm1hcChlID0+IGJ1aWxkRWxlbWVudChjdHgsIGUpKTtcbiAgICByZXR1cm4gKGFyZ3MpID0+IG1ldGhvZHMuZm9yRWFjaChtZXRob2QgPT4gbWV0aG9kKGFyZ3MpKTtcbn1cbmZ1bmN0aW9uIGdldEd1YXJkQ29uZGl0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5ndWFyZENvbmRpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ3Jvc3NSZWZlcmVuY2UoY3R4LCBjcm9zc1JlZiwgdGVybWluYWwgPSBjcm9zc1JlZi50ZXJtaW5hbCkge1xuICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgaWYgKCFjcm9zc1JlZi50eXBlLnJlZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gdHlwZTogJyArIGNyb3NzUmVmLnR5cGUuJHJlZlRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBmaW5kTmFtZUFzc2lnbm1lbnQoY3Jvc3NSZWYudHlwZS5yZWYpO1xuICAgICAgICBjb25zdCBhc3NpZ25UZXJtaW5hbCA9IGFzc2lnbm1lbnQgPT09IG51bGwgfHwgYXNzaWdubWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXNzaWdubWVudC50ZXJtaW5hbDtcbiAgICAgICAgaWYgKCFhc3NpZ25UZXJtaW5hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBuYW1lIGFzc2lnbm1lbnQgZm9yIHR5cGU6ICcgKyBnZXRUeXBlTmFtZShjcm9zc1JlZi50eXBlLnJlZikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZENyb3NzUmVmZXJlbmNlKGN0eCwgY3Jvc3NSZWYsIGFzc2lnblRlcm1pbmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSdWxlQ2FsbCh0ZXJtaW5hbCkgJiYgaXNQYXJzZXJSdWxlKHRlcm1pbmFsLnJ1bGUucmVmKSkge1xuICAgICAgICBjb25zdCBpZHggPSBjdHguc3VicnVsZSsrO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIuc3VicnVsZShpZHgsIGdldFJ1bGUoY3R4LCB0ZXJtaW5hbC5ydWxlLnJlZiksIGNyb3NzUmVmLCBhcmdzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSdWxlQ2FsbCh0ZXJtaW5hbCkgJiYgaXNUZXJtaW5hbFJ1bGUodGVybWluYWwucnVsZS5yZWYpKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGN0eC5jb25zdW1lKys7XG4gICAgICAgIGNvbnN0IHRlcm1pbmFsUnVsZSA9IGdldFRva2VuKGN0eCwgdGVybWluYWwucnVsZS5yZWYubmFtZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBjdHgucGFyc2VyLmNvbnN1bWUoaWR4LCB0ZXJtaW5hbFJ1bGUsIGNyb3NzUmVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNLZXl3b3JkKHRlcm1pbmFsKSkge1xuICAgICAgICBjb25zdCBpZHggPSBjdHguY29uc3VtZSsrO1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gZ2V0VG9rZW4oY3R4LCB0ZXJtaW5hbC52YWx1ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBjdHgucGFyc2VyLmNvbnN1bWUoaWR4LCBrZXl3b3JkLCBjcm9zc1JlZik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBidWlsZCBjcm9zcyByZWZlcmVuY2UgcGFyc2VyJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRLZXl3b3JkKGN0eCwga2V5d29yZCkge1xuICAgIGNvbnN0IGlkeCA9IGN0eC5jb25zdW1lKys7XG4gICAgY29uc3QgdG9rZW4gPSBjdHgudG9rZW5zW2tleXdvcmQudmFsdWVdO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCB0b2tlbiBmb3Iga2V5d29yZDogJyArIGtleXdvcmQudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gY3R4LnBhcnNlci5jb25zdW1lKGlkeCwgdG9rZW4sIGtleXdvcmQpO1xufVxuZnVuY3Rpb24gd3JhcChjdHgsIGd1YXJkLCBtZXRob2QsIGNhcmRpbmFsaXR5KSB7XG4gICAgY29uc3QgZ2F0ZSA9IGd1YXJkICYmIGJ1aWxkUHJlZGljYXRlKGd1YXJkKTtcbiAgICBpZiAoIWNhcmRpbmFsaXR5KSB7XG4gICAgICAgIGlmIChnYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjdHgub3IrKztcbiAgICAgICAgICAgIHJldHVybiAoYXJncykgPT4gY3R4LnBhcnNlci5hbHRlcm5hdGl2ZXMoaWR4LCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBBTFQ6ICgpID0+IG1ldGhvZChhcmdzKSxcbiAgICAgICAgICAgICAgICAgICAgR0FURTogKCkgPT4gZ2F0ZShhcmdzKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBBTFQ6IEVNUFRZX0FMVCgpLFxuICAgICAgICAgICAgICAgICAgICBHQVRFOiAoKSA9PiAhZ2F0ZShhcmdzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2FyZGluYWxpdHkgPT09ICcqJykge1xuICAgICAgICBjb25zdCBpZHggPSBjdHgubWFueSsrO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIubWFueShpZHgsIHtcbiAgICAgICAgICAgIERFRjogKCkgPT4gbWV0aG9kKGFyZ3MpLFxuICAgICAgICAgICAgR0FURTogZ2F0ZSA/ICgpID0+IGdhdGUoYXJncykgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5ID09PSAnKycpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY3R4Lm1hbnkrKztcbiAgICAgICAgaWYgKGdhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ySWR4ID0gY3R4Lm9yKys7XG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGd1YXJkIGNvbmRpdGlvbiBmb3IgdGhlIGArYCBncm91cFxuICAgICAgICAgICAgLy8gV2UgY29tYmluZSBpdCB3aXRoIGFuIGVtcHR5IGFsdGVybmF0aXZlXG4gICAgICAgICAgICAvLyBJZiB0aGUgY29uZGl0aW9uIHJldHVybnMgdHJ1ZSwgaXQgbmVlZHMgdG8gcGFyc2UgYXQgbGVhc3QgYSBzaW5nbGUgaXRlcmF0aW9uXG4gICAgICAgICAgICAvLyBJZiBpdHMgZmFsc2UsIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHBhcnNlIGFueXRoaW5nXG4gICAgICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIuYWx0ZXJuYXRpdmVzKG9ySWR4LCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBBTFQ6ICgpID0+IGN0eC5wYXJzZXIuYXRMZWFzdE9uZShpZHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERFRjogKCkgPT4gbWV0aG9kKGFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBHQVRFOiAoKSA9PiBnYXRlKGFyZ3MpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIEFMVDogRU1QVFlfQUxUKCksXG4gICAgICAgICAgICAgICAgICAgIEdBVEU6ICgpID0+ICFnYXRlKGFyZ3MpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIuYXRMZWFzdE9uZShpZHgsIHtcbiAgICAgICAgICAgICAgICBERUY6ICgpID0+IG1ldGhvZChhcmdzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5ID09PSAnPycpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY3R4Lm9wdGlvbmFsKys7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4gY3R4LnBhcnNlci5vcHRpb25hbChpZHgsIHtcbiAgICAgICAgICAgIERFRjogKCkgPT4gbWV0aG9kKGFyZ3MpLFxuICAgICAgICAgICAgR0FURTogZ2F0ZSA/ICgpID0+IGdhdGUoYXJncykgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShjYXJkaW5hbGl0eSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UnVsZShjdHgsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoY3R4LCBlbGVtZW50KTtcbiAgICBjb25zdCBydWxlID0gY3R4LnJ1bGVzLmdldChuYW1lKTtcbiAgICBpZiAoIXJ1bGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUnVsZSBcIiR7bmFtZX1cIiBub3QgZm91bmQuXCJgKTtcbiAgICByZXR1cm4gcnVsZTtcbn1cbmZ1bmN0aW9uIGdldFJ1bGVOYW1lKGN0eCwgZWxlbWVudCkge1xuICAgIGlmIChpc1BhcnNlclJ1bGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnJ1bGVOYW1lcy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5ydWxlTmFtZXMuZ2V0KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBlbGVtZW50O1xuICAgICAgICBsZXQgcGFyZW50ID0gaXRlbS4kY29udGFpbmVyO1xuICAgICAgICBsZXQgcnVsZU5hbWUgPSBlbGVtZW50LiR0eXBlO1xuICAgICAgICB3aGlsZSAoIWlzUGFyc2VyUnVsZShwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoaXNHcm91cChwYXJlbnQpIHx8IGlzQWx0ZXJuYXRpdmVzKHBhcmVudCkgfHwgaXNVbm9yZGVyZWRHcm91cChwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZWxlbWVudHMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGluZGV4LnRvU3RyaW5nKCkgKyAnOicgKyBydWxlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0gPSBwYXJlbnQ7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlID0gcGFyZW50O1xuICAgICAgICBydWxlTmFtZSA9IHJ1bGUubmFtZSArICc6JyArIHJ1bGVOYW1lO1xuICAgICAgICBjdHgucnVsZU5hbWVzLnNldChlbGVtZW50LCBydWxlTmFtZSk7XG4gICAgICAgIHJldHVybiBydWxlTmFtZTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRUb2tlbihjdHgsIG5hbWUpIHtcbiAgICBjb25zdCB0b2tlbiA9IGN0eC50b2tlbnNbbmFtZV07XG4gICAgaWYgKCF0b2tlbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBcIiR7bmFtZX1cIiBub3QgZm91bmQuXCJgKTtcbiAgICByZXR1cm4gdG9rZW47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZXItYnVpbGRlci1iYXNlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIgfSBmcm9tICcuL2xhbmdpdW0tcGFyc2VyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVBhcnNlciB9IGZyb20gJy4vcGFyc2VyLWJ1aWxkZXItYmFzZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcGxldGlvblBhcnNlcihzZXJ2aWNlcykge1xuICAgIGNvbnN0IGdyYW1tYXIgPSBzZXJ2aWNlcy5HcmFtbWFyO1xuICAgIGNvbnN0IGxleGVyID0gc2VydmljZXMucGFyc2VyLkxleGVyO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBMYW5naXVtQ29tcGxldGlvblBhcnNlcihzZXJ2aWNlcyk7XG4gICAgY3JlYXRlUGFyc2VyKGdyYW1tYXIsIHBhcnNlciwgbGV4ZXIuZGVmaW5pdGlvbik7XG4gICAgcGFyc2VyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHBhcnNlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBsZXRpb24tcGFyc2VyLWJ1aWxkZXIuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBMYW5naXVtUGFyc2VyIH0gZnJvbSAnLi9sYW5naXVtLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tICcuL3BhcnNlci1idWlsZGVyLWJhc2UuanMnO1xuLyoqXG4gKiBDcmVhdGUgYW5kIGZpbmFsaXplIGEgTGFuZ2l1bSBwYXJzZXIuIFRoZSBwYXJzZXIgcnVsZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZ3JhbW1hciwgd2hpY2ggaXNcbiAqIGF2YWlsYWJsZSBhdCBgc2VydmljZXMuR3JhbW1hcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYW5naXVtUGFyc2VyKHNlcnZpY2VzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcHJlcGFyZUxhbmdpdW1QYXJzZXIoc2VydmljZXMpO1xuICAgIHBhcnNlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBwYXJzZXI7XG59XG4vKipcbiAqIENyZWF0ZSBhIExhbmdpdW0gcGFyc2VyIHdpdGhvdXQgZmluYWxpemluZyBpdC4gVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3QgbW9yZSBkZXRhaWxlZCBlcnJvclxuICogaW5mb3JtYXRpb24gd2hlbiB0aGUgcGFyc2VyIGlzIGluaXRpYWxseSB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGFuZ2l1bVBhcnNlcihzZXJ2aWNlcykge1xuICAgIGNvbnN0IGdyYW1tYXIgPSBzZXJ2aWNlcy5HcmFtbWFyO1xuICAgIGNvbnN0IGxleGVyID0gc2VydmljZXMucGFyc2VyLkxleGVyO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBMYW5naXVtUGFyc2VyKHNlcnZpY2VzKTtcbiAgICByZXR1cm4gY3JlYXRlUGFyc2VyKGdyYW1tYXIsIHBhcnNlciwgbGV4ZXIuZGVmaW5pdGlvbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgTGV4ZXIgfSBmcm9tICdjaGV2cm90YWluJztcbmltcG9ydCB7IGlzS2V5d29yZCwgaXNQYXJzZXJSdWxlLCBpc1Rlcm1pbmFsUnVsZSB9IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IHN0cmVhbUFsbENvbnRlbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGdldEFsbFJlYWNoYWJsZVJ1bGVzLCB0ZXJtaW5hbFJlZ2V4IH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5pbXBvcnQgeyBnZXRDYXNlSW5zZW5zaXRpdmVQYXR0ZXJuLCBpc1doaXRlc3BhY2UsIHBhcnRpYWxNYXRjaGVzIH0gZnJvbSAnLi4vdXRpbHMvcmVnZXhwLXV0aWxzLmpzJztcbmltcG9ydCB7IHN0cmVhbSB9IGZyb20gJy4uL3V0aWxzL3N0cmVhbS5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFRva2VuQnVpbGRlciB7XG4gICAgYnVpbGRUb2tlbnMoZ3JhbW1hciwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCByZWFjaGFibGVSdWxlcyA9IHN0cmVhbShnZXRBbGxSZWFjaGFibGVSdWxlcyhncmFtbWFyLCBmYWxzZSkpO1xuICAgICAgICBjb25zdCB0ZXJtaW5hbFRva2VucyA9IHRoaXMuYnVpbGRUZXJtaW5hbFRva2VucyhyZWFjaGFibGVSdWxlcyk7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuYnVpbGRLZXl3b3JkVG9rZW5zKHJlYWNoYWJsZVJ1bGVzLCB0ZXJtaW5hbFRva2Vucywgb3B0aW9ucyk7XG4gICAgICAgIHRlcm1pbmFsVG9rZW5zLmZvckVhY2godGVybWluYWxUb2tlbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGVybWluYWxUb2tlbi5QQVRURVJOO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnb2JqZWN0JyAmJiBwYXR0ZXJuICYmICd0ZXN0JyBpbiBwYXR0ZXJuICYmIGlzV2hpdGVzcGFjZShwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIHRva2Vucy51bnNoaWZ0KHRlcm1pbmFsVG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godGVybWluYWxUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgRU9GIHRva2VuIGV4cGxpY2l0bHkuXG4gICAgICAgIC8vIEl0IGlzIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIHRva2VuIHN0cmVhbS5cbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gICAgYnVpbGRUZXJtaW5hbFRva2VucyhydWxlcykge1xuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGlzVGVybWluYWxSdWxlKS5maWx0ZXIoZSA9PiAhZS5mcmFnbWVudClcbiAgICAgICAgICAgIC5tYXAodGVybWluYWwgPT4gdGhpcy5idWlsZFRlcm1pbmFsVG9rZW4odGVybWluYWwpKS50b0FycmF5KCk7XG4gICAgfVxuICAgIGJ1aWxkVGVybWluYWxUb2tlbih0ZXJtaW5hbCkge1xuICAgICAgICBjb25zdCByZWdleCA9IHRlcm1pbmFsUmVnZXgodGVybWluYWwpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5yZXF1aXJlc0N1c3RvbVBhdHRlcm4ocmVnZXgpID8gdGhpcy5yZWdleFBhdHRlcm5GdW5jdGlvbihyZWdleCkgOiByZWdleDtcbiAgICAgICAgY29uc3QgdG9rZW5UeXBlID0ge1xuICAgICAgICAgICAgbmFtZTogdGVybWluYWwubmFtZSxcbiAgICAgICAgICAgIFBBVFRFUk46IHBhdHRlcm4sXG4gICAgICAgICAgICBMSU5FX0JSRUFLUzogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGVybWluYWwuaGlkZGVuKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHNraXAgdG9rZW5zIHRoYXQgYXJlIGFibGUgdG8gYWNjZXB0IHdoaXRlc3BhY2VcbiAgICAgICAgICAgIHRva2VuVHlwZS5HUk9VUCA9IGlzV2hpdGVzcGFjZShyZWdleCkgPyBMZXhlci5TS0lQUEVEIDogJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuVHlwZTtcbiAgICB9XG4gICAgcmVxdWlyZXNDdXN0b21QYXR0ZXJuKHJlZ2V4KSB7XG4gICAgICAgIGlmIChyZWdleC5mbGFncy5pbmNsdWRlcygndScpKSB7XG4gICAgICAgICAgICAvLyBVbmljb2RlIHJlZ2V4ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgQ2hldnJvdGFpbi5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlZ2V4LnNvdXJjZS5pbmNsdWRlcygnPzw9JykgfHwgcmVnZXguc291cmNlLmluY2x1ZGVzKCc/PCEnKSkge1xuICAgICAgICAgICAgLy8gTmVnYXRpdmUgYW5kIHBvc2l0aXZlIGxvb2tiZWhpbmQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgQ2hldnJvdGFpbiB5ZXQuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdleFBhdHRlcm5GdW5jdGlvbihyZWdleCkge1xuICAgICAgICBjb25zdCBzdGlja3lSZWdleCA9IG5ldyBSZWdFeHAocmVnZXgsIHJlZ2V4LmZsYWdzICsgJ3knKTtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBvZmZzZXQpID0+IHtcbiAgICAgICAgICAgIHN0aWNreVJlZ2V4Lmxhc3RJbmRleCA9IG9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBzdGlja3lSZWdleC5leGVjKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGV4ZWNSZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGJ1aWxkS2V5d29yZFRva2VucyhydWxlcywgdGVybWluYWxUb2tlbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGVzXG4gICAgICAgICAgICAvLyBXZSBmaWx0ZXIgYnkgcGFyc2VyIHJ1bGVzLCBzaW5jZSBrZXl3b3JkcyBpbiB0ZXJtaW5hbCBydWxlcyBnZXQgdHJhbnNmb3JtZWQgaW50byByZWdleCBhbmQgYXJlIG5vdCBhY3R1YWwgdG9rZW5zXG4gICAgICAgICAgICAuZmlsdGVyKGlzUGFyc2VyUnVsZSlcbiAgICAgICAgICAgIC5mbGF0TWFwKHJ1bGUgPT4gc3RyZWFtQWxsQ29udGVudHMocnVsZSkuZmlsdGVyKGlzS2V5d29yZCkpXG4gICAgICAgICAgICAuZGlzdGluY3QoZSA9PiBlLnZhbHVlKS50b0FycmF5KClcbiAgICAgICAgICAgIC8vIFNvcnQga2V5d29yZHMgYnkgZGVzY2VuZGluZyBsZW5ndGhcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnZhbHVlLmxlbmd0aCAtIGEudmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgLm1hcChrZXl3b3JkID0+IHRoaXMuYnVpbGRLZXl3b3JkVG9rZW4oa2V5d29yZCwgdGVybWluYWxUb2tlbnMsIEJvb2xlYW4ob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSkpKTtcbiAgICB9XG4gICAgYnVpbGRLZXl3b3JkVG9rZW4oa2V5d29yZCwgdGVybWluYWxUb2tlbnMsIGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZToga2V5d29yZC52YWx1ZSxcbiAgICAgICAgICAgIFBBVFRFUk46IHRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihrZXl3b3JkLCBjYXNlSW5zZW5zaXRpdmUpLFxuICAgICAgICAgICAgTE9OR0VSX0FMVDogdGhpcy5maW5kTG9uZ2VyQWx0KGtleXdvcmQsIHRlcm1pbmFsVG9rZW5zKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBidWlsZEtleXdvcmRQYXR0ZXJuKGtleXdvcmQsIGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAgICByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID9cbiAgICAgICAgICAgIG5ldyBSZWdFeHAoZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybihrZXl3b3JkLnZhbHVlKSkgOlxuICAgICAgICAgICAga2V5d29yZC52YWx1ZTtcbiAgICB9XG4gICAgZmluZExvbmdlckFsdChrZXl3b3JkLCB0ZXJtaW5hbFRva2Vucykge1xuICAgICAgICByZXR1cm4gdGVybWluYWxUb2tlbnMucmVkdWNlKChsb25nZXJBbHRzLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5QQVRURVJOO1xuICAgICAgICAgICAgaWYgKChwYXR0ZXJuID09PSBudWxsIHx8IHBhdHRlcm4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhdHRlcm4uc291cmNlKSAmJiBwYXJ0aWFsTWF0Y2hlcygnXicgKyBwYXR0ZXJuLnNvdXJjZSArICckJywga2V5d29yZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsb25nZXJBbHRzLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxvbmdlckFsdHM7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbi1idWlsZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgaXNDcm9zc1JlZmVyZW5jZSwgaXNSdWxlQ2FsbCB9IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IGdldENyb3NzUmVmZXJlbmNlVGVybWluYWwsIGdldFJ1bGVUeXBlIH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFZhbHVlQ29udmVydGVyIHtcbiAgICBjb252ZXJ0KGlucHV0LCBjc3ROb2RlKSB7XG4gICAgICAgIGxldCBmZWF0dXJlID0gY3N0Tm9kZS5ncmFtbWFyU291cmNlO1xuICAgICAgICBpZiAoaXNDcm9zc1JlZmVyZW5jZShmZWF0dXJlKSkge1xuICAgICAgICAgICAgZmVhdHVyZSA9IGdldENyb3NzUmVmZXJlbmNlVGVybWluYWwoZmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUnVsZUNhbGwoZmVhdHVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBmZWF0dXJlLnJ1bGUucmVmO1xuICAgICAgICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGNzdCBub2RlIHdhcyBub3QgcGFyc2VkIGJ5IGEgcnVsZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkNvbnZlcnRlcihydWxlLCBpbnB1dCwgY3N0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcnVuQ29udmVydGVyKHJ1bGUsIGlucHV0LCBjc3ROb2RlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3dpdGNoIChydWxlLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnSU5UJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnRJbnQoaW5wdXQpO1xuICAgICAgICAgICAgY2FzZSAnU1RSSU5HJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnRTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgY2FzZSAnSUQnOiByZXR1cm4gVmFsdWVDb252ZXJ0ZXIuY29udmVydElEKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKChfYSA9IGdldFJ1bGVUeXBlKHJ1bGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnROdW1iZXIoaW5wdXQpO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiBWYWx1ZUNvbnZlcnRlci5jb252ZXJ0Qm9vbGVhbihpbnB1dCk7XG4gICAgICAgICAgICBjYXNlICdiaWdpbnQnOiByZXR1cm4gVmFsdWVDb252ZXJ0ZXIuY29udmVydEJpZ2ludChpbnB1dCk7XG4gICAgICAgICAgICBjYXNlICdkYXRlJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnREYXRlKGlucHV0KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCB2YXIgVmFsdWVDb252ZXJ0ZXI7XG4oZnVuY3Rpb24gKFZhbHVlQ29udmVydGVyKSB7XG4gICAgZnVuY3Rpb24gY29udmVydFN0cmluZyhpbnB1dCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaW5wdXQubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW5wdXQuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMxID0gaW5wdXQuY2hhckF0KCsraSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbnZlcnRFc2NhcGVDaGFyYWN0ZXIoYzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydFN0cmluZyA9IGNvbnZlcnRTdHJpbmc7XG4gICAgZnVuY3Rpb24gY29udmVydEVzY2FwZUNoYXJhY3RlcihjaGFyKSB7XG4gICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgY2FzZSAnYic6IHJldHVybiAnXFxiJztcbiAgICAgICAgICAgIGNhc2UgJ2YnOiByZXR1cm4gJ1xcZic7XG4gICAgICAgICAgICBjYXNlICduJzogcmV0dXJuICdcXG4nO1xuICAgICAgICAgICAgY2FzZSAncic6IHJldHVybiAnXFxyJztcbiAgICAgICAgICAgIGNhc2UgJ3QnOiByZXR1cm4gJ1xcdCc7XG4gICAgICAgICAgICBjYXNlICd2JzogcmV0dXJuICdcXHYnO1xuICAgICAgICAgICAgY2FzZSAnMCc6IHJldHVybiAnXFwwJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBjaGFyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnZlcnRJRChpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckF0KDApID09PSAnXicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydElEID0gY29udmVydElEO1xuICAgIGZ1bmN0aW9uIGNvbnZlcnRJbnQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0KTtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydEludCA9IGNvbnZlcnRJbnQ7XG4gICAgZnVuY3Rpb24gY29udmVydEJpZ2ludChpbnB1dCkge1xuICAgICAgICByZXR1cm4gQmlnSW50KGlucHV0KTtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydEJpZ2ludCA9IGNvbnZlcnRCaWdpbnQ7XG4gICAgZnVuY3Rpb24gY29udmVydERhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGlucHV0KTtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydERhdGUgPSBjb252ZXJ0RGF0ZTtcbiAgICBmdW5jdGlvbiBjb252ZXJ0TnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQpO1xuICAgIH1cbiAgICBWYWx1ZUNvbnZlcnRlci5jb252ZXJ0TnVtYmVyID0gY29udmVydE51bWJlcjtcbiAgICBmdW5jdGlvbiBjb252ZXJ0Qm9vbGVhbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIH1cbiAgICBWYWx1ZUNvbnZlcnRlci5jb252ZXJ0Qm9vbGVhbiA9IGNvbnZlcnRCb29sZWFuO1xufSkoVmFsdWVDb252ZXJ0ZXIgfHwgKFZhbHVlQ29udmVydGVyID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbHVlLWNvbnZlcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xubGV0IF9yYWw7XG5mdW5jdGlvbiBSQUwoKSB7XG4gICAgaWYgKF9yYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJ1bnRpbWUgYWJzdHJhY3Rpb24gbGF5ZXIgaW5zdGFsbGVkYCk7XG4gICAgfVxuICAgIHJldHVybiBfcmFsO1xufVxuKGZ1bmN0aW9uIChSQUwpIHtcbiAgICBmdW5jdGlvbiBpbnN0YWxsKHJhbCkge1xuICAgICAgICBpZiAocmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBwcm92aWRlZGApO1xuICAgICAgICB9XG4gICAgICAgIF9yYWwgPSByYWw7XG4gICAgfVxuICAgIFJBTC5pbnN0YWxsID0gaW5zdGFsbDtcbn0pKFJBTCB8fCAoUkFMID0ge30pKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJBTDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ0FycmF5ID0gZXhwb3J0cy5hcnJheSA9IGV4cG9ydHMuZnVuYyA9IGV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLm51bWJlciA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy5ib29sZWFuID0gdm9pZCAwO1xuZnVuY3Rpb24gYm9vbGVhbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG59XG5leHBvcnRzLmJvb2xlYW4gPSBib29sZWFuO1xuZnVuY3Rpb24gc3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbmZ1bmN0aW9uIG51bWJlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyO1xufVxuZXhwb3J0cy5udW1iZXIgPSBudW1iZXI7XG5mdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuZnVuY3Rpb24gZnVuYyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmZ1bmMgPSBmdW5jO1xuZnVuY3Rpb24gYXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnRzLmFycmF5ID0gYXJyYXk7XG5mdW5jdGlvbiBzdHJpbmdBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBhcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoZWxlbSA9PiBzdHJpbmcoZWxlbSkpO1xufVxuZXhwb3J0cy5zdHJpbmdBcnJheSA9IHN0cmluZ0FycmF5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW1pdHRlciA9IGV4cG9ydHMuRXZlbnQgPSB2b2lkIDA7XG5jb25zdCByYWxfMSA9IHJlcXVpcmUoXCIuL3JhbFwiKTtcbnZhciBFdmVudDtcbihmdW5jdGlvbiAoRXZlbnQpIHtcbiAgICBjb25zdCBfZGlzcG9zYWJsZSA9IHsgZGlzcG9zZSgpIHsgfSB9O1xuICAgIEV2ZW50Lk5vbmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfZGlzcG9zYWJsZTsgfTtcbn0pKEV2ZW50IHx8IChleHBvcnRzLkV2ZW50ID0gRXZlbnQgPSB7fSkpO1xuY2xhc3MgQ2FsbGJhY2tMaXN0IHtcbiAgICBhZGQoY2FsbGJhY2ssIGNvbnRleHQgPSBudWxsLCBidWNrZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1Y2tldCkpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5wdXNoKHsgZGlzcG9zZTogKCkgPT4gdGhpcy5yZW1vdmUoY2FsbGJhY2ssIGNvbnRleHQpIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZShjYWxsYmFjaywgY29udGV4dCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZm91bmRDYWxsYmFja1dpdGhEaWZmZXJlbnRDb250ZXh0ID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9jYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRzW2ldID09PSBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxiYWNrICYgY29udGV4dCBtYXRjaCA9PiByZW1vdmUgaXRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZENhbGxiYWNrV2l0aERpZmZlcmVudENvbnRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRDYWxsYmFja1dpdGhEaWZmZXJlbnRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1doZW4gYWRkaW5nIGEgbGlzdGVuZXIgd2l0aCBhIGNvbnRleHQsIHlvdSBzaG91bGQgcmVtb3ZlIGl0IHdpdGggdGhlIHNhbWUgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGludm9rZSguLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gW10sIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5zbGljZSgwKSwgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cy5zbGljZSgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChjYWxsYmFja3NbaV0uYXBwbHkoY29udGV4dHNbaV0sIGFyZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAoMCwgcmFsXzEuZGVmYXVsdCkoKS5jb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fY2FsbGJhY2tzIHx8IHRoaXMuX2NhbGxiYWNrcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY29udGV4dHMgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuY2xhc3MgRW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IoX29wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb3IgdGhlIHB1YmxpYyB0byBhbGxvdyB0byBzdWJzY3JpYmVcbiAgICAgKiB0byBldmVudHMgZnJvbSB0aGlzIEVtaXR0ZXJcbiAgICAgKi9cbiAgICBnZXQgZXZlbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50ID0gKGxpc3RlbmVyLCB0aGlzQXJncywgZGlzcG9zYWJsZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSBuZXcgQ2FsbGJhY2tMaXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkICYmIHRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5hZGQobGlzdGVuZXIsIHRoaXNBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzcG9zYWJsZSBpcyBkaXNwb3NlZCBhZnRlciBlbWl0dGVyIGlzIGRpc3Bvc2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5yZW1vdmUobGlzdGVuZXIsIHRoaXNBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kaXNwb3NlID0gRW1pdHRlci5fbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUgJiYgdGhpcy5fY2FsbGJhY2tzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRpc3Bvc2FibGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwb3NhYmxlcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gYmUga2VwdCBwcml2YXRlIHRvIGZpcmUgYW4gZXZlbnQgdG9cbiAgICAgKiBzdWJzY3JpYmVyc1xuICAgICAqL1xuICAgIGZpcmUoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLmludm9rZS5jYWxsKHRoaXMuX2NhbGxiYWNrcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkVtaXR0ZXIgPSBFbWl0dGVyO1xuRW1pdHRlci5fbm9vcCA9IGZ1bmN0aW9uICgpIHsgfTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UgPSBleHBvcnRzLkNhbmNlbGxhdGlvblRva2VuID0gdm9pZCAwO1xuY29uc3QgcmFsXzEgPSByZXF1aXJlKFwiLi9yYWxcIik7XG5jb25zdCBJcyA9IHJlcXVpcmUoXCIuL2lzXCIpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiLi9ldmVudHNcIik7XG52YXIgQ2FuY2VsbGF0aW9uVG9rZW47XG4oZnVuY3Rpb24gKENhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiBldmVudHNfMS5FdmVudC5Ob25lXG4gICAgfSk7XG4gICAgQ2FuY2VsbGF0aW9uVG9rZW4uQ2FuY2VsbGVkID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDogZXZlbnRzXzEuRXZlbnQuTm9uZVxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICYmIChjYW5kaWRhdGUgPT09IENhbmNlbGxhdGlvblRva2VuLk5vbmVcbiAgICAgICAgICAgIHx8IGNhbmRpZGF0ZSA9PT0gQ2FuY2VsbGF0aW9uVG9rZW4uQ2FuY2VsbGVkXG4gICAgICAgICAgICB8fCAoSXMuYm9vbGVhbihjYW5kaWRhdGUuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQpICYmICEhY2FuZGlkYXRlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSk7XG4gICAgfVxuICAgIENhbmNlbGxhdGlvblRva2VuLmlzID0gaXM7XG59KShDYW5jZWxsYXRpb25Ub2tlbiB8fCAoZXhwb3J0cy5DYW5jZWxsYXRpb25Ub2tlbiA9IENhbmNlbGxhdGlvblRva2VuID0ge30pKTtcbmNvbnN0IHNob3J0Y3V0RXZlbnQgPSBPYmplY3QuZnJlZXplKGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xuICAgIGNvbnN0IGhhbmRsZSA9ICgwLCByYWxfMS5kZWZhdWx0KSgpLnRpbWVyLnNldFRpbWVvdXQoY2FsbGJhY2suYmluZChjb250ZXh0KSwgMCk7XG4gICAgcmV0dXJuIHsgZGlzcG9zZSgpIHsgaGFuZGxlLmRpc3Bvc2UoKTsgfSB9O1xufSk7XG5jbGFzcyBNdXRhYmxlVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlci5maXJlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ7XG4gICAgfVxuICAgIGdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hvcnRjdXRFdmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2VtaXR0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgZXZlbnRzXzEuRW1pdHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbWl0dGVyLmV2ZW50O1xuICAgIH1cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fZW1pdHRlcikge1xuICAgICAgICAgICAgdGhpcy5fZW1pdHRlci5kaXNwb3NlKCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0dGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2Uge1xuICAgIGdldCB0b2tlbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90b2tlbikge1xuICAgICAgICAgICAgLy8gYmUgbGF6eSBhbmQgY3JlYXRlIHRoZSB0b2tlbiBvbmx5IHdoZW5cbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IG5lZWRlZFxuICAgICAgICAgICAgdGhpcy5fdG9rZW4gPSBuZXcgTXV0YWJsZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5fdG9rZW4pIHtcbiAgICAgICAgICAgIC8vIHNhdmUgYW4gb2JqZWN0IGJ5IHJldHVybmluZyB0aGUgZGVmYXVsdFxuICAgICAgICAgICAgLy8gY2FuY2VsbGVkIHRva2VuIHdoZW4gY2FuY2VsbGF0aW9uIGhhcHBlbnNcbiAgICAgICAgICAgIC8vIGJlZm9yZSBzb21lb25lIGFza3MgZm9yIHRoZSB0b2tlblxuICAgICAgICAgICAgdGhpcy5fdG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5DYW5jZWxsZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90b2tlbi5jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgdG8gaW5pdGlhbGl6ZSB3aXRoIGFuIGVtcHR5IHRva2VuIGlmIHdlIGhhZCBub25lXG4gICAgICAgICAgICB0aGlzLl90b2tlbiA9IENhbmNlbGxhdGlvblRva2VuLk5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBNdXRhYmxlVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IGRpc3Bvc2VcbiAgICAgICAgICAgIHRoaXMuX3Rva2VuLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UgPSBDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTtcbiIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjQgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuZXhwb3J0ICogZnJvbSAndnNjb2RlLWpzb25ycGMvbGliL2NvbW1vbi9jYW5jZWxsYXRpb24uanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FuY2VsbGF0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4sIENhbmNlbGxhdGlvblRva2VuU291cmNlIH0gZnJvbSAnLi4vdXRpbHMvY2FuY2VsbGF0aW9uLmpzJztcbi8qKlxuICogRGVsYXlzIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgY29kZSB0byB0aGUgbmV4dCB0aWNrIG9mIHRoZSBldmVudCBsb29wLlxuICogRG9uJ3QgY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSBpbiBhIHRpZ2h0IGxvb3AgdG8gcHJldmVudCB0b28gbWFueSBwcm9taXNlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheU5leHRUaWNrKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgLy8gSW4gY2FzZSB3ZSBhcmUgcnVubmluZyBpbiBhIG5vbi1ub2RlIGVudmlyb25tZW50LCBgc2V0SW1tZWRpYXRlYCBpc24ndCBhdmFpbGFibGUuXG4gICAgICAgIC8vIFVzaW5nIGBzZXRUaW1lb3V0YCBvZiB0aGUgYnJvd3NlciBBUEkgYWNjb21wbGlzaGVzIHRoZSBzYW1lIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5sZXQgbGFzdFRpY2sgPSAwO1xubGV0IGdsb2JhbEludGVycnVwdGlvblBlcmlvZCA9IDEwO1xuLyoqXG4gKiBSZXNldCB0aGUgZ2xvYmFsIGludGVycnVwdGlvbiBwZXJpb2QgYW5kIGNyZWF0ZSBhIGNhbmNlbGxhdGlvbiB0b2tlbiBzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydENhbmNlbGFibGVPcGVyYXRpb24oKSB7XG4gICAgbGFzdFRpY2sgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBuZXcgQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UoKTtcbn1cbi8qKlxuICogQ2hhbmdlIHRoZSBwZXJpb2QgZHVyYXRpb24gZm9yIGBpbnRlcnJ1cHRBbmRDaGVja2AgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMG1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJydXB0aW9uUGVyaW9kKHBlcmlvZCkge1xuICAgIGdsb2JhbEludGVycnVwdGlvblBlcmlvZCA9IHBlcmlvZDtcbn1cbi8qKlxuICogVGhpcyBzeW1ib2wgbWF5IGJlIHRocm93biBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dCBieSBhbnkgTGFuZ2l1bSBzZXJ2aWNlIHRoYXQgcmVjZWl2ZXNcbiAqIGEgYENhbmNlbGxhdGlvblRva2VuYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHN1Y2ggYSBzZXJ2aWNlIGlzIHJlamVjdGVkIHdpdGhcbiAqIHRoaXMgc3ltYm9sIGFzIHJlamVjdGlvbiByZWFzb24uXG4gKi9cbmV4cG9ydCBjb25zdCBPcGVyYXRpb25DYW5jZWxsZWQgPSBTeW1ib2woJ09wZXJhdGlvbkNhbmNlbGxlZCcpO1xuLyoqXG4gKiBVc2UgdGhpcyBpbiBhIGBjYXRjaGAgYmxvY2sgdG8gY2hlY2sgd2hldGhlciB0aGUgdGhyb3duIG9iamVjdCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3BlcmF0aW9uXG4gKiBoYXMgYmVlbiBjYW5jZWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09wZXJhdGlvbkNhbmNlbGxlZChlcnIpIHtcbiAgICByZXR1cm4gZXJyID09PSBPcGVyYXRpb25DYW5jZWxsZWQ7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0d28gdGhpbmdzOlxuICogIDEuIENoZWNrIHRoZSBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIG9yIHRvIGBzdGFydENhbmNlbGFibGVPcGVyYXRpb25gLiBJZiB0aGUgcHJlZGVmaW5lZFxuICogICAgIHBlcmlvZCAoY29uZmlndXJlZCB3aXRoIGBzZXRJbnRlcnJ1cHRpb25QZXJpb2RgKSBpcyBleGNlZWRlZCwgZXhlY3V0aW9uIGlzIGRlbGF5ZWQgd2l0aCBgZGVsYXlOZXh0VGlja2AuXG4gKiAgMi4gSWYgdGhlIHByZWRlZmluZWQgcGVyaW9kIGlzIG5vdCBtZXQgeWV0IG9yIGV4ZWN1dGlvbiBpcyByZXN1bWVkIGFmdGVyIGFuIGludGVycnVwdGlvbiwgdGhlIGdpdmVuIGNhbmNlbGxhdGlvblxuICogICAgIHRva2VuIGlzIGNoZWNrZWQsIGFuZCBpZiBjYW5jZWxsYXRpb24gaXMgcmVxdWVzdGVkLCBgT3BlcmF0aW9uQ2FuY2VsZWRgIGlzIHRocm93bi5cbiAqXG4gKiBBbGwgc2VydmljZXMgaW4gTGFuZ2l1bSB0aGF0IHJlY2VpdmUgYSBgQ2FuY2VsbGF0aW9uVG9rZW5gIG1heSBwb3RlbnRpYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24sIHNvIHRoZVxuICogYENhbmNlbGxhdGlvblRva2VuYCBtdXN0IGJlIGNhdWdodCAod2l0aCBhbiBgYXN5bmNgIHRyeS1jYXRjaCBibG9jayBvciBhIGBjYXRjaGAgY2FsbGJhY2sgYXR0YWNoZWQgdG9cbiAqIHRoZSBwcm9taXNlKSB0byBhdm9pZCB0aGF0IGV2ZW50IGJlaW5nIGV4cG9zZWQgYXMgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnRlcnJ1cHRBbmRDaGVjayh0b2tlbikge1xuICAgIGlmICh0b2tlbiA9PT0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICAvLyBFYXJseSBleGl0IGluIGNhc2UgY2FuY2VsbGF0aW9uIHdhcyBkaXNhYmxlZCBieSB0aGUgY2FsbGVyXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IERhdGUubm93KCk7XG4gICAgaWYgKGN1cnJlbnQgLSBsYXN0VGljayA+PSBnbG9iYWxJbnRlcnJ1cHRpb25QZXJpb2QpIHtcbiAgICAgICAgbGFzdFRpY2sgPSBjdXJyZW50O1xuICAgICAgICBhd2FpdCBkZWxheU5leHRUaWNrKCk7XG4gICAgfVxuICAgIGlmICh0b2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgICAgICB0aHJvdyBPcGVyYXRpb25DYW5jZWxsZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBTaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlZmVycmVkIHBhdHRlcm4uXG4gKiBBbiBvYmplY3QgdGhhdCBleHBvc2VzIGEgcHJvbWlzZSBhbmQgZnVuY3Rpb25zIHRvIHJlc29sdmUgYW5kIHJlamVjdCBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmVycmVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21pc2UtdXRpbHMuanMubWFwIiwKICAgICIvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4ndXNlIHN0cmljdCc7XG5jbGFzcyBGdWxsVGV4dERvY3VtZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmksIGxhbmd1YWdlSWQsIHZlcnNpb24sIGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5fdXJpID0gdXJpO1xuICAgICAgICB0aGlzLl9sYW5ndWFnZUlkID0gbGFuZ3VhZ2VJZDtcbiAgICAgICAgdGhpcy5fdmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLl9saW5lT2Zmc2V0cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IHVyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VyaTtcbiAgICB9XG4gICAgZ2V0IGxhbmd1YWdlSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUlkO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuICAgIGdldFRleHQocmFuZ2UpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMub2Zmc2V0QXQocmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5vZmZzZXRBdChyYW5nZS5lbmQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICAgIH1cbiAgICB1cGRhdGUoY2hhbmdlcywgdmVyc2lvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoRnVsbFRleHREb2N1bWVudC5pc0luY3JlbWVudGFsKGNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlcyBzdXJlIHN0YXJ0IGlzIGJlZm9yZSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGdldFdlbGxmb3JtZWRSYW5nZShjaGFuZ2UucmFuZ2UpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjb250ZW50XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLm9mZnNldEF0KHJhbmdlLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSB0aGlzLm9mZnNldEF0KHJhbmdlLmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudCA9IHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsIHN0YXJ0T2Zmc2V0KSArIGNoYW5nZS50ZXh0ICsgdGhpcy5fY29udGVudC5zdWJzdHJpbmcoZW5kT2Zmc2V0LCB0aGlzLl9jb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBvZmZzZXRzXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRMaW5lID0gTWF0aC5tYXgocmFuZ2Uuc3RhcnQubGluZSwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kTGluZSA9IE1hdGgubWF4KHJhbmdlLmVuZC5saW5lLCAwKTtcbiAgICAgICAgICAgICAgICBsZXQgbGluZU9mZnNldHMgPSB0aGlzLl9saW5lT2Zmc2V0cztcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRlZExpbmVPZmZzZXRzID0gY29tcHV0ZUxpbmVPZmZzZXRzKGNoYW5nZS50ZXh0LCBmYWxzZSwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChlbmRMaW5lIC0gc3RhcnRMaW5lID09PSBhZGRlZExpbmVPZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWRkZWRMaW5lT2Zmc2V0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldHNbaSArIHN0YXJ0TGluZSArIDFdID0gYWRkZWRMaW5lT2Zmc2V0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkTGluZU9mZnNldHMubGVuZ3RoIDwgMTAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRzLnNwbGljZShzdGFydExpbmUgKyAxLCBlbmRMaW5lIC0gc3RhcnRMaW5lLCAuLi5hZGRlZExpbmVPZmZzZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gYXZvaWQgdG9vIG1hbnkgYXJndW1lbnRzIGZvciBzcGxpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gbGluZU9mZnNldHMgPSBsaW5lT2Zmc2V0cy5zbGljZSgwLCBzdGFydExpbmUgKyAxKS5jb25jYXQoYWRkZWRMaW5lT2Zmc2V0cywgbGluZU9mZnNldHMuc2xpY2UoZW5kTGluZSArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRMaW5lICsgMSArIGFkZGVkTGluZU9mZnNldHMubGVuZ3RoLCBsZW4gPSBsaW5lT2Zmc2V0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldHNbaV0gPSBsaW5lT2Zmc2V0c1tpXSArIGRpZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChGdWxsVGV4dERvY3VtZW50LmlzRnVsbChjaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudCA9IGNoYW5nZS50ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIH1cbiAgICBnZXRMaW5lT2Zmc2V0cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xpbmVPZmZzZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gY29tcHV0ZUxpbmVPZmZzZXRzKHRoaXMuX2NvbnRlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9saW5lT2Zmc2V0cztcbiAgICB9XG4gICAgcG9zaXRpb25BdChvZmZzZXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gTWF0aC5tYXgoTWF0aC5taW4ob2Zmc2V0LCB0aGlzLl9jb250ZW50Lmxlbmd0aCksIDApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0cyA9IHRoaXMuZ2V0TGluZU9mZnNldHMoKTtcbiAgICAgICAgbGV0IGxvdyA9IDAsIGhpZ2ggPSBsaW5lT2Zmc2V0cy5sZW5ndGg7XG4gICAgICAgIGlmIChoaWdoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBsaW5lOiAwLCBjaGFyYWN0ZXI6IG9mZnNldCB9O1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXRzW21pZF0gPiBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb3cgaXMgdGhlIGxlYXN0IHggZm9yIHdoaWNoIHRoZSBsaW5lIG9mZnNldCBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBvZmZzZXRcbiAgICAgICAgLy8gb3IgYXJyYXkubGVuZ3RoIGlmIG5vIGxpbmUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IG9mZnNldFxuICAgICAgICBjb25zdCBsaW5lID0gbG93IC0gMTtcbiAgICAgICAgb2Zmc2V0ID0gdGhpcy5lbnN1cmVCZWZvcmVFT0wob2Zmc2V0LCBsaW5lT2Zmc2V0c1tsaW5lXSk7XG4gICAgICAgIHJldHVybiB7IGxpbmUsIGNoYXJhY3Rlcjogb2Zmc2V0IC0gbGluZU9mZnNldHNbbGluZV0gfTtcbiAgICB9XG4gICAgb2Zmc2V0QXQocG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldHMgPSB0aGlzLmdldExpbmVPZmZzZXRzKCk7XG4gICAgICAgIGlmIChwb3NpdGlvbi5saW5lID49IGxpbmVPZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uLmxpbmUgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gbGluZU9mZnNldHNbcG9zaXRpb24ubGluZV07XG4gICAgICAgIGlmIChwb3NpdGlvbi5jaGFyYWN0ZXIgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpbmVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dExpbmVPZmZzZXQgPSAocG9zaXRpb24ubGluZSArIDEgPCBsaW5lT2Zmc2V0cy5sZW5ndGgpID8gbGluZU9mZnNldHNbcG9zaXRpb24ubGluZSArIDFdIDogdGhpcy5fY29udGVudC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGgubWluKGxpbmVPZmZzZXQgKyBwb3NpdGlvbi5jaGFyYWN0ZXIsIG5leHRMaW5lT2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlQmVmb3JlRU9MKG9mZnNldCwgbGluZU9mZnNldCk7XG4gICAgfVxuICAgIGVuc3VyZUJlZm9yZUVPTChvZmZzZXQsIGxpbmVPZmZzZXQpIHtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA+IGxpbmVPZmZzZXQgJiYgaXNFT0wodGhpcy5fY29udGVudC5jaGFyQ29kZUF0KG9mZnNldCAtIDEpKSkge1xuICAgICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gICAgZ2V0IGxpbmVDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGg7XG4gICAgfVxuICAgIHN0YXRpYyBpc0luY3JlbWVudGFsKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgJiYgY2FuZGlkYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgY2FuZGlkYXRlLnRleHQgPT09ICdzdHJpbmcnICYmIGNhbmRpZGF0ZS5yYW5nZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAoY2FuZGlkYXRlLnJhbmdlTGVuZ3RoID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNhbmRpZGF0ZS5yYW5nZUxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNGdWxsKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgJiYgY2FuZGlkYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgY2FuZGlkYXRlLnRleHQgPT09ICdzdHJpbmcnICYmIGNhbmRpZGF0ZS5yYW5nZSA9PT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZS5yYW5nZUxlbmd0aCA9PT0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCB2YXIgVGV4dERvY3VtZW50O1xuKGZ1bmN0aW9uIChUZXh0RG9jdW1lbnQpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRleHQgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VJZCAgVGhlIGRvY3VtZW50J3MgbGFuZ3VhZ2UgSWQuXG4gICAgICogQHBhcmFtIHZlcnNpb24gVGhlIGRvY3VtZW50J3MgaW5pdGlhbCB2ZXJzaW9uIG51bWJlci5cbiAgICAgKiBAcGFyYW0gY29udGVudCBUaGUgZG9jdW1lbnQncyBjb250ZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZSh1cmksIGxhbmd1YWdlSWQsIHZlcnNpb24sIGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdWxsVGV4dERvY3VtZW50KHVyaSwgbGFuZ3VhZ2VJZCwgdmVyc2lvbiwgY29udGVudCk7XG4gICAgfVxuICAgIFRleHREb2N1bWVudC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhIFRleHREb2N1bWVudCBieSBtb2RpZnlpbmcgaXRzIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IHRvIHVwZGF0ZS4gT25seSBkb2N1bWVudHMgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIGFyZSB2YWxpZCBpbnB1dHMuXG4gICAgICogQHBhcmFtIGNoYW5nZXMgdGhlIGNoYW5nZXMgdG8gYXBwbHkgdG8gdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIHRoZSBjaGFuZ2VzIHZlcnNpb24gZm9yIHRoZSBkb2N1bWVudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBUZXh0RG9jdW1lbnQuIE5vdGU6IFRoYXQncyB0aGUgc2FtZSBkb2N1bWVudCBpbnN0YW5jZSBwYXNzZWQgaW4gYXMgZmlyc3QgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlKGRvY3VtZW50LCBjaGFuZ2VzLCB2ZXJzaW9uKSB7XG4gICAgICAgIGlmIChkb2N1bWVudCBpbnN0YW5jZW9mIEZ1bGxUZXh0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnVwZGF0ZShjaGFuZ2VzLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBUZXh0RG9jdW1lbnQudXBkYXRlID0gdXBkYXRlO1xuICAgIGZ1bmN0aW9uIGFwcGx5RWRpdHMoZG9jdW1lbnQsIGVkaXRzKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBkb2N1bWVudC5nZXRUZXh0KCk7XG4gICAgICAgIGNvbnN0IHNvcnRlZEVkaXRzID0gbWVyZ2VTb3J0KGVkaXRzLm1hcChnZXRXZWxsZm9ybWVkRWRpdCksIChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gYS5yYW5nZS5zdGFydC5saW5lIC0gYi5yYW5nZS5zdGFydC5saW5lO1xuICAgICAgICAgICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5yYW5nZS5zdGFydC5jaGFyYWN0ZXIgLSBiLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkaWZmO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGxhc3RNb2RpZmllZE9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHNwYW5zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBzb3J0ZWRFZGl0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBkb2N1bWVudC5vZmZzZXRBdChlLnJhbmdlLnN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChzdGFydE9mZnNldCA8IGxhc3RNb2RpZmllZE9mZnNldCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3ZlcmxhcHBpbmcgZWRpdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBsYXN0TW9kaWZpZWRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBzcGFucy5wdXNoKHRleHQuc3Vic3RyaW5nKGxhc3RNb2RpZmllZE9mZnNldCwgc3RhcnRPZmZzZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLm5ld1RleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3BhbnMucHVzaChlLm5ld1RleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkT2Zmc2V0ID0gZG9jdW1lbnQub2Zmc2V0QXQoZS5yYW5nZS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW5zLnB1c2godGV4dC5zdWJzdHIobGFzdE1vZGlmaWVkT2Zmc2V0KSk7XG4gICAgICAgIHJldHVybiBzcGFucy5qb2luKCcnKTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50LmFwcGx5RWRpdHMgPSBhcHBseUVkaXRzO1xufSkoVGV4dERvY3VtZW50IHx8IChUZXh0RG9jdW1lbnQgPSB7fSkpO1xuZnVuY3Rpb24gbWVyZ2VTb3J0KGRhdGEsIGNvbXBhcmUpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPD0gMSkge1xuICAgICAgICAvLyBzb3J0ZWRcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHAgPSAoZGF0YS5sZW5ndGggLyAyKSB8IDA7XG4gICAgY29uc3QgbGVmdCA9IGRhdGEuc2xpY2UoMCwgcCk7XG4gICAgY29uc3QgcmlnaHQgPSBkYXRhLnNsaWNlKHApO1xuICAgIG1lcmdlU29ydChsZWZ0LCBjb21wYXJlKTtcbiAgICBtZXJnZVNvcnQocmlnaHQsIGNvbXBhcmUpO1xuICAgIGxldCBsZWZ0SWR4ID0gMDtcbiAgICBsZXQgcmlnaHRJZHggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAobGVmdElkeCA8IGxlZnQubGVuZ3RoICYmIHJpZ2h0SWR4IDwgcmlnaHQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IGNvbXBhcmUobGVmdFtsZWZ0SWR4XSwgcmlnaHRbcmlnaHRJZHhdKTtcbiAgICAgICAgaWYgKHJldCA8PSAwKSB7XG4gICAgICAgICAgICAvLyBzbWFsbGVyX2VxdWFsIC0+IHRha2UgbGVmdCB0byBwcmVzZXJ2ZSBvcmRlclxuICAgICAgICAgICAgZGF0YVtpKytdID0gbGVmdFtsZWZ0SWR4KytdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZ3JlYXRlciAtPiB0YWtlIHJpZ2h0XG4gICAgICAgICAgICBkYXRhW2krK10gPSByaWdodFtyaWdodElkeCsrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAobGVmdElkeCA8IGxlZnQubGVuZ3RoKSB7XG4gICAgICAgIGRhdGFbaSsrXSA9IGxlZnRbbGVmdElkeCsrXTtcbiAgICB9XG4gICAgd2hpbGUgKHJpZ2h0SWR4IDwgcmlnaHQubGVuZ3RoKSB7XG4gICAgICAgIGRhdGFbaSsrXSA9IHJpZ2h0W3JpZ2h0SWR4KytdO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVMaW5lT2Zmc2V0cyh0ZXh0LCBpc0F0TGluZVN0YXJ0LCB0ZXh0T2Zmc2V0ID0gMCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGlzQXRMaW5lU3RhcnQgPyBbdGV4dE9mZnNldF0gOiBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChpc0VPTChjaCkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgLyogQ2hhckNvZGUuQ2FycmlhZ2VSZXR1cm4gKi8gJiYgaSArIDEgPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID09PSAxMCAvKiBDaGFyQ29kZS5MaW5lRmVlZCAqLykge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRleHRPZmZzZXQgKyBpICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzRU9MKGNoYXIpIHtcbiAgICByZXR1cm4gY2hhciA9PT0gMTMgLyogQ2hhckNvZGUuQ2FycmlhZ2VSZXR1cm4gKi8gfHwgY2hhciA9PT0gMTAgLyogQ2hhckNvZGUuTGluZUZlZWQgKi87XG59XG5mdW5jdGlvbiBnZXRXZWxsZm9ybWVkUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgIGNvbnN0IGVuZCA9IHJhbmdlLmVuZDtcbiAgICBpZiAoc3RhcnQubGluZSA+IGVuZC5saW5lIHx8IChzdGFydC5saW5lID09PSBlbmQubGluZSAmJiBzdGFydC5jaGFyYWN0ZXIgPiBlbmQuY2hhcmFjdGVyKSkge1xuICAgICAgICByZXR1cm4geyBzdGFydDogZW5kLCBlbmQ6IHN0YXJ0IH07XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbmZ1bmN0aW9uIGdldFdlbGxmb3JtZWRFZGl0KHRleHRFZGl0KSB7XG4gICAgY29uc3QgcmFuZ2UgPSBnZXRXZWxsZm9ybWVkUmFuZ2UodGV4dEVkaXQucmFuZ2UpO1xuICAgIGlmIChyYW5nZSAhPT0gdGV4dEVkaXQucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgbmV3VGV4dDogdGV4dEVkaXQubmV3VGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRFZGl0O1xufVxuIiwKICAgICJ2YXIgTElCOygoKT0+e1widXNlIHN0cmljdFwiO3ZhciB0PXs0NzA6dD0+e2Z1bmN0aW9uIGUodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgXCIrSlNPTi5zdHJpbmdpZnkodCkpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIHIsbj1cIlwiLGk9MCxvPS0xLHM9MCxoPTA7aDw9dC5sZW5ndGg7KytoKXtpZihoPHQubGVuZ3RoKXI9dC5jaGFyQ29kZUF0KGgpO2Vsc2V7aWYoNDc9PT1yKWJyZWFrO3I9NDd9aWYoNDc9PT1yKXtpZihvPT09aC0xfHwxPT09cyk7ZWxzZSBpZihvIT09aC0xJiYyPT09cyl7aWYobi5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpfHw0NiE9PW4uY2hhckNvZGVBdChuLmxlbmd0aC0yKSlpZihuLmxlbmd0aD4yKXt2YXIgYT1uLmxhc3RJbmRleE9mKFwiL1wiKTtpZihhIT09bi5sZW5ndGgtMSl7LTE9PT1hPyhuPVwiXCIsaT0wKTppPShuPW4uc2xpY2UoMCxhKSkubGVuZ3RoLTEtbi5sYXN0SW5kZXhPZihcIi9cIiksbz1oLHM9MDtjb250aW51ZX19ZWxzZSBpZigyPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCl7bj1cIlwiLGk9MCxvPWgscz0wO2NvbnRpbnVlfWUmJihuLmxlbmd0aD4wP24rPVwiLy4uXCI6bj1cIi4uXCIsaT0yKX1lbHNlIG4ubGVuZ3RoPjA/bis9XCIvXCIrdC5zbGljZShvKzEsaCk6bj10LnNsaWNlKG8rMSxoKSxpPWgtby0xO289aCxzPTB9ZWxzZSA0Nj09PXImJi0xIT09cz8rK3M6cz0tMX1yZXR1cm4gbn12YXIgbj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxuPVwiXCIsaT0hMSxvPWFyZ3VtZW50cy5sZW5ndGgtMTtvPj0tMSYmIWk7by0tKXt2YXIgcztvPj0wP3M9YXJndW1lbnRzW29dOih2b2lkIDA9PT10JiYodD1wcm9jZXNzLmN3ZCgpKSxzPXQpLGUocyksMCE9PXMubGVuZ3RoJiYobj1zK1wiL1wiK24saT00Nz09PXMuY2hhckNvZGVBdCgwKSl9cmV0dXJuIG49cihuLCFpKSxpP24ubGVuZ3RoPjA/XCIvXCIrbjpcIi9cIjpuLmxlbmd0aD4wP246XCIuXCJ9LG5vcm1hbGl6ZTpmdW5jdGlvbih0KXtpZihlKHQpLDA9PT10Lmxlbmd0aClyZXR1cm5cIi5cIjt2YXIgbj00Nz09PXQuY2hhckNvZGVBdCgwKSxpPTQ3PT09dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpO3JldHVybiAwIT09KHQ9cih0LCFuKSkubGVuZ3RofHxufHwodD1cIi5cIiksdC5sZW5ndGg+MCYmaSYmKHQrPVwiL1wiKSxuP1wiL1wiK3Q6dH0saXNBYnNvbHV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSx0Lmxlbmd0aD4wJiY0Nz09PXQuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVyblwiLlwiO2Zvcih2YXIgdCxyPTA7cjxhcmd1bWVudHMubGVuZ3RoOysrcil7dmFyIGk9YXJndW1lbnRzW3JdO2UoaSksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1pOnQrPVwiL1wiK2kpfXJldHVybiB2b2lkIDA9PT10P1wiLlwiOm4ubm9ybWFsaXplKHQpfSxyZWxhdGl2ZTpmdW5jdGlvbih0LHIpe2lmKGUodCksZShyKSx0PT09cilyZXR1cm5cIlwiO2lmKCh0PW4ucmVzb2x2ZSh0KSk9PT0ocj1uLnJlc29sdmUocikpKXJldHVyblwiXCI7Zm9yKHZhciBpPTE7aTx0Lmxlbmd0aCYmNDc9PT10LmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIG89dC5sZW5ndGgscz1vLWksaD0xO2g8ci5sZW5ndGgmJjQ3PT09ci5jaGFyQ29kZUF0KGgpOysraCk7Zm9yKHZhciBhPXIubGVuZ3RoLWgsYz1zPGE/czphLGY9LTEsdT0wO3U8PWM7Kyt1KXtpZih1PT09Yyl7aWYoYT5jKXtpZig0Nz09PXIuY2hhckNvZGVBdChoK3UpKXJldHVybiByLnNsaWNlKGgrdSsxKTtpZigwPT09dSlyZXR1cm4gci5zbGljZShoK3UpfWVsc2Ugcz5jJiYoNDc9PT10LmNoYXJDb2RlQXQoaSt1KT9mPXU6MD09PXUmJihmPTApKTticmVha312YXIgbD10LmNoYXJDb2RlQXQoaSt1KTtpZihsIT09ci5jaGFyQ29kZUF0KGgrdSkpYnJlYWs7NDc9PT1sJiYoZj11KX12YXIgZz1cIlwiO2Zvcih1PWkrZisxO3U8PW87Kyt1KXUhPT1vJiY0NyE9PXQuY2hhckNvZGVBdCh1KXx8KDA9PT1nLmxlbmd0aD9nKz1cIi4uXCI6Zys9XCIvLi5cIik7cmV0dXJuIGcubGVuZ3RoPjA/ZytyLnNsaWNlKGgrZik6KGgrPWYsNDc9PT1yLmNoYXJDb2RlQXQoaCkmJisraCxyLnNsaWNlKGgpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxkaXJuYW1lOmZ1bmN0aW9uKHQpe2lmKGUodCksMD09PXQubGVuZ3RoKXJldHVyblwiLlwiO2Zvcih2YXIgcj10LmNoYXJDb2RlQXQoMCksbj00Nz09PXIsaT0tMSxvPSEwLHM9dC5sZW5ndGgtMTtzPj0xOy0tcylpZig0Nz09PShyPXQuY2hhckNvZGVBdChzKSkpe2lmKCFvKXtpPXM7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/bj9cIi9cIjpcIi5cIjpuJiYxPT09aT9cIi8vXCI6dC5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PXImJlwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2UodCk7dmFyIG4saT0wLG89LTEscz0hMDtpZih2b2lkIDAhPT1yJiZyLmxlbmd0aD4wJiZyLmxlbmd0aDw9dC5sZW5ndGgpe2lmKHIubGVuZ3RoPT09dC5sZW5ndGgmJnI9PT10KXJldHVyblwiXCI7dmFyIGg9ci5sZW5ndGgtMSxhPS0xO2ZvcihuPXQubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBjPXQuY2hhckNvZGVBdChuKTtpZig0Nz09PWMpe2lmKCFzKXtpPW4rMTticmVha319ZWxzZS0xPT09YSYmKHM9ITEsYT1uKzEpLGg+PTAmJihjPT09ci5jaGFyQ29kZUF0KGgpPy0xPT0tLWgmJihvPW4pOihoPS0xLG89YSkpfXJldHVybiBpPT09bz9vPWE6LTE9PT1vJiYobz10Lmxlbmd0aCksdC5zbGljZShpLG8pfWZvcihuPXQubGVuZ3RoLTE7bj49MDstLW4paWYoNDc9PT10LmNoYXJDb2RlQXQobikpe2lmKCFzKXtpPW4rMTticmVha319ZWxzZS0xPT09byYmKHM9ITEsbz1uKzEpO3JldHVybi0xPT09bz9cIlwiOnQuc2xpY2UoaSxvKX0sZXh0bmFtZTpmdW5jdGlvbih0KXtlKHQpO2Zvcih2YXIgcj0tMSxuPTAsaT0tMSxvPSEwLHM9MCxoPXQubGVuZ3RoLTE7aD49MDstLWgpe3ZhciBhPXQuY2hhckNvZGVBdChoKTtpZig0NyE9PWEpLTE9PT1pJiYobz0hMSxpPWgrMSksNDY9PT1hPy0xPT09cj9yPWg6MSE9PXMmJihzPTEpOi0xIT09ciYmKHM9LTEpO2Vsc2UgaWYoIW8pe249aCsxO2JyZWFrfX1yZXR1cm4tMT09PXJ8fC0xPT09aXx8MD09PXN8fDE9PT1zJiZyPT09aS0xJiZyPT09bisxP1wiXCI6dC5zbGljZShyLGkpfSxmb3JtYXQ6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZGlyfHxlLnJvb3Qsbj1lLmJhc2V8fChlLm5hbWV8fFwiXCIpKyhlLmV4dHx8XCJcIik7cmV0dXJuIHI/cj09PWUucm9vdD9yK246citcIi9cIituOm59KDAsdCl9LHBhcnNlOmZ1bmN0aW9uKHQpe2UodCk7dmFyIHI9e3Jvb3Q6XCJcIixkaXI6XCJcIixiYXNlOlwiXCIsZXh0OlwiXCIsbmFtZTpcIlwifTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHI7dmFyIG4saT10LmNoYXJDb2RlQXQoMCksbz00Nz09PWk7bz8oci5yb290PVwiL1wiLG49MSk6bj0wO2Zvcih2YXIgcz0tMSxoPTAsYT0tMSxjPSEwLGY9dC5sZW5ndGgtMSx1PTA7Zj49bjstLWYpaWYoNDchPT0oaT10LmNoYXJDb2RlQXQoZikpKS0xPT09YSYmKGM9ITEsYT1mKzEpLDQ2PT09aT8tMT09PXM/cz1mOjEhPT11JiYodT0xKTotMSE9PXMmJih1PS0xKTtlbHNlIGlmKCFjKXtoPWYrMTticmVha31yZXR1cm4tMT09PXN8fC0xPT09YXx8MD09PXV8fDE9PT11JiZzPT09YS0xJiZzPT09aCsxPy0xIT09YSYmKHIuYmFzZT1yLm5hbWU9MD09PWgmJm8/dC5zbGljZSgxLGEpOnQuc2xpY2UoaCxhKSk6KDA9PT1oJiZvPyhyLm5hbWU9dC5zbGljZSgxLHMpLHIuYmFzZT10LnNsaWNlKDEsYSkpOihyLm5hbWU9dC5zbGljZShoLHMpLHIuYmFzZT10LnNsaWNlKGgsYSkpLHIuZXh0PXQuc2xpY2UocyxhKSksaD4wP3IuZGlyPXQuc2xpY2UoMCxoLTEpOm8mJihyLmRpcj1cIi9cIikscn0sc2VwOlwiL1wiLGRlbGltaXRlcjpcIjpcIix3aW4zMjpudWxsLHBvc2l4Om51bGx9O24ucG9zaXg9bix0LmV4cG9ydHM9bn19LGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lW25dO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkuZXhwb3J0czt2YXIgbz1lW25dPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtuXShvLG8uZXhwb3J0cyxyKSxvLmV4cG9ydHN9ci5kPSh0LGUpPT57Zm9yKHZhciBuIGluIGUpci5vKGUsbikmJiFyLm8odCxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtuXX0pfSxyLm89KHQsZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpLHIucj10PT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX07dmFyIG49e307KCgpPT57bGV0IHQ7aWYoci5yKG4pLHIuZChuLHtVUkk6KCk9PmYsVXRpbHM6KCk9PlB9KSxcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcyl0PVwid2luMzJcIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbmF2aWdhdG9yKXtsZXQgZT1uYXZpZ2F0b3IudXNlckFnZW50O3Q9ZS5pbmRleE9mKFwiV2luZG93c1wiKT49MH1jb25zdCBlPS9eXFx3W1xcd1xcZCsuLV0qJC8saT0vXlxcLy8sbz0vXlxcL1xcLy87ZnVuY3Rpb24gcyh0LHIpe2lmKCF0LnNjaGVtZSYmcil0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiBcIlwiLCBhdXRob3JpdHk6IFwiJHt0LmF1dGhvcml0eX1cIiwgcGF0aDogXCIke3QucGF0aH1cIiwgcXVlcnk6IFwiJHt0LnF1ZXJ5fVwiLCBmcmFnbWVudDogXCIke3QuZnJhZ21lbnR9XCJ9YCk7aWYodC5zY2hlbWUmJiFlLnRlc3QodC5zY2hlbWUpKXRocm93IG5ldyBFcnJvcihcIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuXCIpO2lmKHQucGF0aClpZih0LmF1dGhvcml0eSl7aWYoIWkudGVzdCh0LnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoIChcIi9cIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihvLnRlc3QodC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoXCIvL1wiKScpfWNvbnN0IGg9XCJcIixhPVwiL1wiLGM9L14oKFteOi8/I10rPyk6KT8oXFwvXFwvKFteLz8jXSopKT8oW14/I10qKShcXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgZntzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBmfHwhIXQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmF1dGhvcml0eSYmXCJzdHJpbmdcIj09dHlwZW9mIHQuZnJhZ21lbnQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LnBhdGgmJlwic3RyaW5nXCI9PXR5cGVvZiB0LnF1ZXJ5JiZcInN0cmluZ1wiPT10eXBlb2YgdC5zY2hlbWUmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmZzUGF0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC53aXRoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRvU3RyaW5nfXNjaGVtZTthdXRob3JpdHk7cGF0aDtxdWVyeTtmcmFnbWVudDtjb25zdHJ1Y3Rvcih0LGUscixuLGksbz0hMSl7XCJvYmplY3RcIj09dHlwZW9mIHQ/KHRoaXMuc2NoZW1lPXQuc2NoZW1lfHxoLHRoaXMuYXV0aG9yaXR5PXQuYXV0aG9yaXR5fHxoLHRoaXMucGF0aD10LnBhdGh8fGgsdGhpcy5xdWVyeT10LnF1ZXJ5fHxoLHRoaXMuZnJhZ21lbnQ9dC5mcmFnbWVudHx8aCk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fGU/dDpcImZpbGVcIn0odCxvKSx0aGlzLmF1dGhvcml0eT1lfHxoLHRoaXMucGF0aD1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlXCJodHRwc1wiOmNhc2VcImh0dHBcIjpjYXNlXCJmaWxlXCI6ZT9lWzBdIT09YSYmKGU9YStlKTplPWF9cmV0dXJuIGV9KHRoaXMuc2NoZW1lLHJ8fGgpLHRoaXMucXVlcnk9bnx8aCx0aGlzLmZyYWdtZW50PWl8fGgscyh0aGlzLG8pKX1nZXQgZnNQYXRoKCl7cmV0dXJuIG0odGhpcywhMSl9d2l0aCh0KXtpZighdClyZXR1cm4gdGhpcztsZXR7c2NoZW1lOmUsYXV0aG9yaXR5OnIscGF0aDpuLHF1ZXJ5OmksZnJhZ21lbnQ6b309dDtyZXR1cm4gdm9pZCAwPT09ZT9lPXRoaXMuc2NoZW1lOm51bGw9PT1lJiYoZT1oKSx2b2lkIDA9PT1yP3I9dGhpcy5hdXRob3JpdHk6bnVsbD09PXImJihyPWgpLHZvaWQgMD09PW4/bj10aGlzLnBhdGg6bnVsbD09PW4mJihuPWgpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1oKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89aCksZT09PXRoaXMuc2NoZW1lJiZyPT09dGhpcy5hdXRob3JpdHkmJm49PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBsKGUscixuLGksbyl9c3RhdGljIHBhcnNlKHQsZT0hMSl7Y29uc3Qgcj1jLmV4ZWModCk7cmV0dXJuIHI/bmV3IGwoclsyXXx8aCxDKHJbNF18fGgpLEMocls1XXx8aCksQyhyWzddfHxoKSxDKHJbOV18fGgpLGUpOm5ldyBsKGgsaCxoLGgsaCl9c3RhdGljIGZpbGUoZSl7bGV0IHI9aDtpZih0JiYoZT1lLnJlcGxhY2UoL1xcXFwvZyxhKSksZVswXT09PWEmJmVbMV09PT1hKXtjb25zdCB0PWUuaW5kZXhPZihhLDIpOy0xPT09dD8ocj1lLnN1YnN0cmluZygyKSxlPWEpOihyPWUuc3Vic3RyaW5nKDIsdCksZT1lLnN1YnN0cmluZyh0KXx8YSl9cmV0dXJuIG5ldyBsKFwiZmlsZVwiLHIsZSxoLGgpfXN0YXRpYyBmcm9tKHQpe2NvbnN0IGU9bmV3IGwodC5zY2hlbWUsdC5hdXRob3JpdHksdC5wYXRoLHQucXVlcnksdC5mcmFnbWVudCk7cmV0dXJuIHMoZSwhMCksZX10b1N0cmluZyh0PSExKXtyZXR1cm4geSh0aGlzLHQpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGYpcmV0dXJuIHQ7e2NvbnN0IGU9bmV3IGwodCk7cmV0dXJuIGUuX2Zvcm1hdHRlZD10LmV4dGVybmFsLGUuX2ZzUGF0aD10Ll9zZXA9PT11P3QuZnNQYXRoOm51bGwsZX19cmV0dXJuIHR9fWNvbnN0IHU9dD8xOnZvaWQgMDtjbGFzcyBsIGV4dGVuZHMgZntfZm9ybWF0dGVkPW51bGw7X2ZzUGF0aD1udWxsO2dldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPW0odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyh0PSExKXtyZXR1cm4gdD95KHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9eSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCB0PXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJih0LmZzUGF0aD10aGlzLl9mc1BhdGgsdC5fc2VwPXUpLHRoaXMuX2Zvcm1hdHRlZCYmKHQuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKHQuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKHQuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYodC5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYodC5mcmFnbWVudD10aGlzLmZyYWdtZW50KSx0fX1jb25zdCBnPXs1ODpcIiUzQVwiLDQ3OlwiJTJGXCIsNjM6XCIlM0ZcIiwzNTpcIiUyM1wiLDkxOlwiJTVCXCIsOTM6XCIlNURcIiw2NDpcIiU0MFwiLDMzOlwiJTIxXCIsMzY6XCIlMjRcIiwzODpcIiUyNlwiLDM5OlwiJTI3XCIsNDA6XCIlMjhcIiw0MTpcIiUyOVwiLDQyOlwiJTJBXCIsNDM6XCIlMkJcIiw0NDpcIiUyQ1wiLDU5OlwiJTNCXCIsNjE6XCIlM0RcIiwzMjpcIiUyMFwifTtmdW5jdGlvbiBkKHQsZSxyKXtsZXQgbixpPS0xO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBzPXQuY2hhckNvZGVBdChvKTtpZihzPj05NyYmczw9MTIyfHxzPj02NSYmczw9OTB8fHM+PTQ4JiZzPD01N3x8NDU9PT1zfHw0Nj09PXN8fDk1PT09c3x8MTI2PT09c3x8ZSYmNDc9PT1zfHxyJiY5MT09PXN8fHImJjkzPT09c3x8ciYmNTg9PT1zKS0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpLG8pKSxpPS0xKSx2b2lkIDAhPT1uJiYobis9dC5jaGFyQXQobykpO2Vsc2V7dm9pZCAwPT09biYmKG49dC5zdWJzdHIoMCxvKSk7Y29uc3QgZT1nW3NdO3ZvaWQgMCE9PWU/KC0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpLG8pKSxpPS0xKSxuKz1lKTotMT09PWkmJihpPW8pfX1yZXR1cm4tMSE9PWkmJihuKz1lbmNvZGVVUklDb21wb25lbnQodC5zdWJzdHJpbmcoaSkpKSx2b2lkIDAhPT1uP246dH1mdW5jdGlvbiBwKHQpe2xldCBlO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTszNT09PW58fDYzPT09bj8odm9pZCAwPT09ZSYmKGU9dC5zdWJzdHIoMCxyKSksZSs9Z1tuXSk6dm9pZCAwIT09ZSYmKGUrPXRbcl0pfXJldHVybiB2b2lkIDAhPT1lP2U6dH1mdW5jdGlvbiBtKGUscil7bGV0IG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmXCJmaWxlXCI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3I/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCx0JiYobj1uLnJlcGxhY2UoL1xcLy9nLFwiXFxcXFwiKSksbn1mdW5jdGlvbiB5KHQsZSl7Y29uc3Qgcj1lP3A6ZDtsZXQgbj1cIlwiLHtzY2hlbWU6aSxhdXRob3JpdHk6byxwYXRoOnMscXVlcnk6aCxmcmFnbWVudDpjfT10O2lmKGkmJihuKz1pLG4rPVwiOlwiKSwob3x8XCJmaWxlXCI9PT1pKSYmKG4rPWEsbis9YSksbyl7bGV0IHQ9by5pbmRleE9mKFwiQFwiKTtpZigtMSE9PXQpe2NvbnN0IGU9by5zdWJzdHIoMCx0KTtvPW8uc3Vic3RyKHQrMSksdD1lLmxhc3RJbmRleE9mKFwiOlwiKSwtMT09PXQ/bis9cihlLCExLCExKToobis9cihlLnN1YnN0cigwLHQpLCExLCExKSxuKz1cIjpcIixuKz1yKGUuc3Vic3RyKHQrMSksITEsITApKSxuKz1cIkBcIn1vPW8udG9Mb3dlckNhc2UoKSx0PW8ubGFzdEluZGV4T2YoXCI6XCIpLC0xPT09dD9uKz1yKG8sITEsITApOihuKz1yKG8uc3Vic3RyKDAsdCksITEsITApLG4rPW8uc3Vic3RyKHQpKX1pZihzKXtpZihzLmxlbmd0aD49MyYmNDc9PT1zLmNoYXJDb2RlQXQoMCkmJjU4PT09cy5jaGFyQ29kZUF0KDIpKXtjb25zdCB0PXMuY2hhckNvZGVBdCgxKTt0Pj02NSYmdDw9OTAmJihzPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHQrMzIpfToke3Muc3Vic3RyKDMpfWApfWVsc2UgaWYocy5sZW5ndGg+PTImJjU4PT09cy5jaGFyQ29kZUF0KDEpKXtjb25zdCB0PXMuY2hhckNvZGVBdCgwKTt0Pj02NSYmdDw9OTAmJihzPWAke1N0cmluZy5mcm9tQ2hhckNvZGUodCszMil9OiR7cy5zdWJzdHIoMil9YCl9bis9cihzLCEwLCExKX1yZXR1cm4gaCYmKG4rPVwiP1wiLG4rPXIoaCwhMSwhMSkpLGMmJihuKz1cIiNcIixuKz1lP2M6ZChjLCExLCExKSksbn1mdW5jdGlvbiB2KHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoe3JldHVybiB0Lmxlbmd0aD4zP3Quc3Vic3RyKDAsMykrdih0LnN1YnN0cigzKSk6dH19Y29uc3QgYj0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBDKHQpe3JldHVybiB0Lm1hdGNoKGIpP3QucmVwbGFjZShiLCh0PT52KHQpKSk6dH12YXIgQT1yKDQ3MCk7Y29uc3Qgdz1BLnBvc2l4fHxBLHg9XCIvXCI7dmFyIFA7IWZ1bmN0aW9uKHQpe3Quam9pblBhdGg9ZnVuY3Rpb24odCwuLi5lKXtyZXR1cm4gdC53aXRoKHtwYXRoOncuam9pbih0LnBhdGgsLi4uZSl9KX0sdC5yZXNvbHZlUGF0aD1mdW5jdGlvbih0LC4uLmUpe2xldCByPXQucGF0aCxuPSExO3JbMF0hPT14JiYocj14K3Isbj0hMCk7bGV0IGk9dy5yZXNvbHZlKHIsLi4uZSk7cmV0dXJuIG4mJmlbMF09PT14JiYhdC5hdXRob3JpdHkmJihpPWkuc3Vic3RyaW5nKDEpKSx0LndpdGgoe3BhdGg6aX0pfSx0LmRpcm5hbWU9ZnVuY3Rpb24odCl7aWYoMD09PXQucGF0aC5sZW5ndGh8fHQucGF0aD09PXgpcmV0dXJuIHQ7bGV0IGU9dy5kaXJuYW1lKHQucGF0aCk7cmV0dXJuIDE9PT1lLmxlbmd0aCYmNDY9PT1lLmNoYXJDb2RlQXQoMCkmJihlPVwiXCIpLHQud2l0aCh7cGF0aDplfSl9LHQuYmFzZW5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHcuYmFzZW5hbWUodC5wYXRoKX0sdC5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB3LmV4dG5hbWUodC5wYXRoKX19KFB8fChQPXt9KSl9KSgpLExJQj1ufSkoKTtleHBvcnQgY29uc3R7VVJJLFV0aWxzfT1MSUI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBVUkksIFV0aWxzIH0gZnJvbSAndnNjb2RlLXVyaSc7XG5leHBvcnQgeyBVUkkgfTtcbmV4cG9ydCB2YXIgVXJpVXRpbHM7XG4oZnVuY3Rpb24gKFVyaVV0aWxzKSB7XG4gICAgVXJpVXRpbHMuYmFzZW5hbWUgPSBVdGlscy5iYXNlbmFtZTtcbiAgICBVcmlVdGlscy5kaXJuYW1lID0gVXRpbHMuZGlybmFtZTtcbiAgICBVcmlVdGlscy5leHRuYW1lID0gVXRpbHMuZXh0bmFtZTtcbiAgICBVcmlVdGlscy5qb2luUGF0aCA9IFV0aWxzLmpvaW5QYXRoO1xuICAgIFVyaVV0aWxzLnJlc29sdmVQYXRoID0gVXRpbHMucmVzb2x2ZVBhdGg7XG4gICAgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEudG9TdHJpbmcoKSkgPT09IChiID09PSBudWxsIHx8IGIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGIudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIFVyaVV0aWxzLmVxdWFscyA9IGVxdWFscztcbiAgICBmdW5jdGlvbiByZWxhdGl2ZShmcm9tLCB0bykge1xuICAgICAgICBjb25zdCBmcm9tUGF0aCA9IHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJyA/IGZyb20gOiBmcm9tLnBhdGg7XG4gICAgICAgIGNvbnN0IHRvUGF0aCA9IHR5cGVvZiB0byA9PT0gJ3N0cmluZycgPyB0byA6IHRvLnBhdGg7XG4gICAgICAgIGNvbnN0IGZyb21QYXJ0cyA9IGZyb21QYXRoLnNwbGl0KCcvJykuZmlsdGVyKGUgPT4gZS5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgdG9QYXJ0cyA9IHRvUGF0aC5zcGxpdCgnLycpLmZpbHRlcihlID0+IGUubGVuZ3RoID4gMCk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYWNrUGFydCA9ICcuLi8nLnJlcGVhdChmcm9tUGFydHMubGVuZ3RoIC0gaSk7XG4gICAgICAgIGNvbnN0IHRvUGFydCA9IHRvUGFydHMuc2xpY2UoaSkuam9pbignLycpO1xuICAgICAgICByZXR1cm4gYmFja1BhcnQgKyB0b1BhcnQ7XG4gICAgfVxuICAgIFVyaVV0aWxzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG59KShVcmlVdGlscyB8fCAoVXJpVXRpbHMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLXV0aWxzLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBSZS1leHBvcnQgJ1RleHREb2N1bWVudCcgZnJvbSAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXRleHRkb2N1bWVudCcgZm9yIGNvbnZlbmllbmNlLFxuICogIGluY2x1ZGluZyBib3RoIHR5cGUgX2FuZF8gc3ltYm9sIChuYW1lc3BhY2UpLCBhcyB3ZSBoZXJlIGFuZCB0aGVyZSBhbHNvIHJlZmVyIHRvIHRoZSBzeW1ib2wsXG4gKiAgdGhlIG92ZXJoZWFkIGlzIHZlcnkgc21hbGwsIGp1c3QgYSBmZXcga2lsb2J5dGVzLlxuICogRXZlcnl0aGluZyBlbHNlIG9mIHRoYXQgcGFja2FnZSAoYXQgdGhlIHRpbWUgY29udHJpYnV0aW5nKSBpcyBhbHNvIGRlZmluZWRcbiAqICBpbiAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXByb3RvY29sJyBvciAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzJy5cbiAqL1xuZXhwb3J0IHsgVGV4dERvY3VtZW50IH0gZnJvbSAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXRleHRkb2N1bWVudCc7XG5pbXBvcnQgeyBUZXh0RG9jdW1lbnQgfSBmcm9tICcuL2RvY3VtZW50cy5qcyc7XG5pbXBvcnQgeyBDYW5jZWxsYXRpb25Ub2tlbiB9IGZyb20gJy4uL3V0aWxzL2NhbmNlbGxhdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuaW1wb3J0IHsgVVJJIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbi8qKlxuICogQSBkb2N1bWVudCBpcyBzdWJqZWN0IHRvIHNldmVyYWwgcGhhc2VzIHRoYXQgYXJlIHJ1biBpbiBwcmVkZWZpbmVkIG9yZGVyLiBBbnkgc3RhdGUgdmFsdWUgaW1wbGllcyB0aGF0XG4gKiBzbWFsbGVyIHN0YXRlIHZhbHVlcyBhcmUgZmluaXNoZWQgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IHZhciBEb2N1bWVudFN0YXRlO1xuKGZ1bmN0aW9uIChEb2N1bWVudFN0YXRlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgY29udGVudCBoYXMgY2hhbmdlZCBhbmQgbmVlZHMgdG8gYmUgcGFyc2VkIGFnYWluLiBUaGUgQVNUIGhlbGQgYnkgdGhpcyBvdXRkYXRlZFxuICAgICAqIGRvY3VtZW50IGluc3RhbmNlIGlzIG5vIGxvbmdlciB2YWxpZC5cbiAgICAgKi9cbiAgICBEb2N1bWVudFN0YXRlW0RvY3VtZW50U3RhdGVbXCJDaGFuZ2VkXCJdID0gMF0gPSBcIkNoYW5nZWRcIjtcbiAgICAvKipcbiAgICAgKiBBbiBBU1QgaGFzIGJlZW4gY3JlYXRlZCBmcm9tIHRoZSB0ZXh0IGNvbnRlbnQuIFRoZSBkb2N1bWVudCBzdHJ1Y3R1cmUgY2FuIGJlIHRyYXZlcnNlZCxcbiAgICAgKiBidXQgY3Jvc3MtcmVmZXJlbmNlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgeWV0LiBJZiBuZWNlc3NhcnksIHRoZSBzdHJ1Y3R1cmUgY2FuIGJlIG1hbmlwdWxhdGVkXG4gICAgICogYXQgdGhpcyBzdGFnZSBhcyBhIHByZXByb2Nlc3Npbmcgc3RlcC5cbiAgICAgKi9cbiAgICBEb2N1bWVudFN0YXRlW0RvY3VtZW50U3RhdGVbXCJQYXJzZWRcIl0gPSAxXSA9IFwiUGFyc2VkXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGBJbmRleE1hbmFnZXJgIHNlcnZpY2UgaGFzIHByb2Nlc3NlZCBBU1Qgbm9kZXMgb2YgdGhpcyBkb2N1bWVudC4gVGhpcyBtZWFucyB0aGVcbiAgICAgKiBleHBvcnRlZCBzeW1ib2xzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSBhbmQgY2FuIGJlIHJlc29sdmVkIGZyb20gb3RoZXIgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIERvY3VtZW50U3RhdGVbRG9jdW1lbnRTdGF0ZVtcIkluZGV4ZWRDb250ZW50XCJdID0gMl0gPSBcIkluZGV4ZWRDb250ZW50XCI7XG4gICAgLyoqXG4gICAgICogVGhlIGBTY29wZUNvbXB1dGF0aW9uYCBzZXJ2aWNlIGhhcyBwcm9jZXNzZWQgdGhpcyBkb2N1bWVudC4gVGhpcyBtZWFucyB0aGUgbG9jYWwgc3ltYm9sc1xuICAgICAqIGFyZSBzdG9yZWQgaW4gYSBNdWx0aU1hcCBzbyB0aGV5IGNhbiBiZSBsb29rZWQgdXAgYnkgdGhlIGBTY29wZVByb3ZpZGVyYCBzZXJ2aWNlLlxuICAgICAqIE9uY2UgYSBkb2N1bWVudCBoYXMgcmVhY2hlZCB0aGlzIHN0YXRlLCB5b3UgbWF5IGZvbGxvdyBldmVyeSByZWZlcmVuY2UgLSBpdCB3aWxsIGxhemlseVxuICAgICAqIHJlc29sdmUgaXRzIGByZWZgIHByb3BlcnR5IGFuZCB5aWVsZCBlaXRoZXIgdGhlIHRhcmdldCBBU1Qgbm9kZSBvciBgdW5kZWZpbmVkYCBpbiBjYXNlXG4gICAgICogdGhlIHRhcmdldCBpcyBub3QgaW4gc2NvcGUuXG4gICAgICovXG4gICAgRG9jdW1lbnRTdGF0ZVtEb2N1bWVudFN0YXRlW1wiQ29tcHV0ZWRTY29wZXNcIl0gPSAzXSA9IFwiQ29tcHV0ZWRTY29wZXNcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgYExpbmtlcmAgc2VydmljZSBoYXMgcHJvY2Vzc2VkIHRoaXMgZG9jdW1lbnQuIEFsbCBvdXRnb2luZyByZWZlcmVuY2VzIGhhdmUgYmVlblxuICAgICAqIHJlc29sdmVkIG9yIG1hcmtlZCBhcyBlcnJvbmVvdXMuXG4gICAgICovXG4gICAgRG9jdW1lbnRTdGF0ZVtEb2N1bWVudFN0YXRlW1wiTGlua2VkXCJdID0gNF0gPSBcIkxpbmtlZFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBgSW5kZXhNYW5hZ2VyYCBzZXJ2aWNlIGhhcyBwcm9jZXNzZWQgQVNUIG5vZGUgcmVmZXJlbmNlcyBvZiB0aGlzIGRvY3VtZW50LiBUaGlzIGlzXG4gICAgICogbmVjZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBkb2N1bWVudHMgYXJlIGFmZmVjdGVkIGJ5IGEgY2hhbmdlIGluIG9uZSBvZiB0aGUgd29ya3NwYWNlXG4gICAgICogZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIERvY3VtZW50U3RhdGVbRG9jdW1lbnRTdGF0ZVtcIkluZGV4ZWRSZWZlcmVuY2VzXCJdID0gNV0gPSBcIkluZGV4ZWRSZWZlcmVuY2VzXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGBEb2N1bWVudFZhbGlkYXRvcmAgc2VydmljZSBoYXMgcHJvY2Vzc2VkIHRoaXMgZG9jdW1lbnQuIFRoZSBsYW5ndWFnZSBzZXJ2ZXIgbGlzdGVuc1xuICAgICAqIHRvIHRoZSByZXN1bHRzIG9mIHRoaXMgcGhhc2UgYW5kIHNlbmRzIGRpYWdub3N0aWNzIHRvIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgRG9jdW1lbnRTdGF0ZVtEb2N1bWVudFN0YXRlW1wiVmFsaWRhdGVkXCJdID0gNl0gPSBcIlZhbGlkYXRlZFwiO1xufSkoRG9jdW1lbnRTdGF0ZSB8fCAoRG9jdW1lbnRTdGF0ZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgRGVmYXVsdExhbmdpdW1Eb2N1bWVudEZhY3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuc2VydmljZVJlZ2lzdHJ5ID0gc2VydmljZXMuU2VydmljZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLnRleHREb2N1bWVudHMgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuVGV4dERvY3VtZW50cztcbiAgICAgICAgdGhpcy5maWxlU3lzdGVtUHJvdmlkZXIgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyO1xuICAgIH1cbiAgICBhc3luYyBmcm9tVXJpKHVyaSwgY2FuY2VsbGF0aW9uVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRmlsZSh1cmkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVBc3luYyh1cmksIGNvbnRlbnQsIGNhbmNlbGxhdGlvblRva2VuKTtcbiAgICB9XG4gICAgZnJvbVRleHREb2N1bWVudCh0ZXh0RG9jdW1lbnQsIHVyaSwgY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgdXJpID0gdXJpICE9PSBudWxsICYmIHVyaSAhPT0gdm9pZCAwID8gdXJpIDogVVJJLnBhcnNlKHRleHREb2N1bWVudC51cmkpO1xuICAgICAgICBpZiAoY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFzeW5jKHVyaSwgdGV4dERvY3VtZW50LCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodXJpLCB0ZXh0RG9jdW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21TdHJpbmcodGV4dCwgdXJpLCBjYW5jZWxsYXRpb25Ub2tlbikge1xuICAgICAgICBpZiAoY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFzeW5jKHVyaSwgdGV4dCwgY2FuY2VsbGF0aW9uVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHVyaSwgdGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbU1vZGVsKG1vZGVsLCB1cmkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHVyaSwgeyAkbW9kZWw6IG1vZGVsIH0pO1xuICAgIH1cbiAgICBjcmVhdGUodXJpLCBjb250ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gdGhpcy5wYXJzZSh1cmksIGNvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KHBhcnNlUmVzdWx0LCB1cmksIHVuZGVmaW5lZCwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoJyRtb2RlbCcgaW4gY29udGVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSB7IHZhbHVlOiBjb250ZW50LiRtb2RlbCwgcGFyc2VyRXJyb3JzOiBbXSwgbGV4ZXJFcnJvcnM6IFtdIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQocGFyc2VSZXN1bHQsIHVyaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHRoaXMucGFyc2UodXJpLCBjb250ZW50LmdldFRleHQoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQocGFyc2VSZXN1bHQsIHVyaSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlQXN5bmModXJpLCBjb250ZW50LCBjYW5jZWxUb2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IGF3YWl0IHRoaXMucGFyc2VBc3luYyh1cmksIGNvbnRlbnQsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChwYXJzZVJlc3VsdCwgdXJpLCB1bmRlZmluZWQsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlQXN5bmModXJpLCBjb250ZW50LmdldFRleHQoKSwgY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KHBhcnNlUmVzdWx0LCB1cmksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIExhbmdpdW1Eb2N1bWVudCBmcm9tIGEgZ2l2ZW4gcGFyc2UgcmVzdWx0LlxuICAgICAqXG4gICAgICogQSBUZXh0RG9jdW1lbnQgaXMgY3JlYXRlZCBvbiBkZW1hbmQgaWYgaXQgaXMgbm90IHByb3ZpZGVkIGFzIGFyZ3VtZW50IGhlcmUuIFVzdWFsbHkgdGhpc1xuICAgICAqIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG1haW4gcHVycG9zZSBvZiB0aGUgVGV4dERvY3VtZW50IGlzIHRvIGNvbnZlcnQgYmV0d2VlblxuICAgICAqIHRleHQgcmFuZ2VzIGFuZCBvZmZzZXRzLCB3aGljaCBpcyBkb25lIHNvbGVseSBpbiBMU1AgcmVxdWVzdCBoYW5kbGluZy5cbiAgICAgKlxuICAgICAqIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB7QGxpbmsgdXBkYXRlfSBiZWxvdyB0aGlzIG1ldGhvZCBpcyBzdXBwb3NlZCB0byBiZSBtYWlubHkgY2FsbGVkXG4gICAgICogZHVyaW5nIHdvcmtzcGFjZSBpbml0aWFsaXphdGlvbiBhbmQgb24gYWRkaXRpb24vcmVjb2duaXRpb24gb2YgbmV3IGZpbGVzLCB3aGlsZSBjaGFuZ2VzIGluXG4gICAgICogZXhpc3RpbmcgZG9jdW1lbnRzIGFyZSBwcm9jZXNzZWQgdmlhIHtAbGluayB1cGRhdGV9LlxuICAgICAqL1xuICAgIGNyZWF0ZUxhbmdpdW1Eb2N1bWVudChwYXJzZVJlc3VsdCwgdXJpLCB0ZXh0RG9jdW1lbnQsIHRleHQpIHtcbiAgICAgICAgbGV0IGRvY3VtZW50O1xuICAgICAgICBpZiAodGV4dERvY3VtZW50KSB7XG4gICAgICAgICAgICBkb2N1bWVudCA9IHtcbiAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdCxcbiAgICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgICAgc3RhdGU6IERvY3VtZW50U3RhdGUuUGFyc2VkLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFtdLFxuICAgICAgICAgICAgICAgIHRleHREb2N1bWVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHREb2N1bWVudEdldHRlciA9IHRoaXMuY3JlYXRlVGV4dERvY3VtZW50R2V0dGVyKHVyaSwgdGV4dCk7XG4gICAgICAgICAgICBkb2N1bWVudCA9IHtcbiAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdCxcbiAgICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgICAgc3RhdGU6IERvY3VtZW50U3RhdGUuUGFyc2VkLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFtdLFxuICAgICAgICAgICAgICAgIGdldCB0ZXh0RG9jdW1lbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0RG9jdW1lbnRHZXR0ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlUmVzdWx0LnZhbHVlLiRkb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZShkb2N1bWVudCwgY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgLy8gVGhlIENTVCBmdWxsIHRleHQgcHJvcGVydHkgY29udGFpbnMgdGhlIG9yaWdpbmFsIHRleHQgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIEFTVC5cbiAgICAgICAgY29uc3Qgb2xkVGV4dCA9IChfYSA9IGRvY3VtZW50LnBhcnNlUmVzdWx0LnZhbHVlLiRjc3ROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eucm9vdC5mdWxsVGV4dDtcbiAgICAgICAgY29uc3QgdGV4dERvY3VtZW50ID0gKF9iID0gdGhpcy50ZXh0RG9jdW1lbnRzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0KGRvY3VtZW50LnVyaS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRleHREb2N1bWVudCA/IHRleHREb2N1bWVudC5nZXRUZXh0KCkgOiBhd2FpdCB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRmlsZShkb2N1bWVudC51cmkpO1xuICAgICAgICBpZiAodGV4dERvY3VtZW50KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICd0ZXh0RG9jdW1lbnQnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRleHREb2N1bWVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RG9jdW1lbnRHZXR0ZXIgPSB0aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihkb2N1bWVudC51cmksIHRleHQpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCAndGV4dERvY3VtZW50Jywge1xuICAgICAgICAgICAgICAgIGdldDogdGV4dERvY3VtZW50R2V0dGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21lIG9mIHRoZXNlIGRvY3VtZW50cyBjYW4gYmUgcHJldHR5IGxhcmdlLCBzbyBwYXJzaW5nIHRoZW0gYWdhaW4gY2FuIGJlIHF1aXRlIGV4cGVuc2l2ZS5cbiAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBvbmx5IHBhcnNlIGlmIHRoZSB0ZXh0IGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuICAgICAgICBpZiAob2xkVGV4dCAhPT0gdGV4dCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucGFyc2VSZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlQXN5bmMoZG9jdW1lbnQudXJpLCB0ZXh0LCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgICAgICAgICBkb2N1bWVudC5wYXJzZVJlc3VsdC52YWx1ZS4kZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5zdGF0ZSA9IERvY3VtZW50U3RhdGUuUGFyc2VkO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIHBhcnNlKHVyaSwgdGV4dCkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKHVyaSk7XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcy5wYXJzZXIuTGFuZ2l1bVBhcnNlci5wYXJzZSh0ZXh0KTtcbiAgICB9XG4gICAgcGFyc2VBc3luYyh1cmksIHRleHQsIGNhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXModXJpKTtcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VzLnBhcnNlci5Bc3luY1BhcnNlci5wYXJzZSh0ZXh0LCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgfVxuICAgIGNyZWF0ZVRleHREb2N1bWVudEdldHRlcih1cmksIHRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZVJlZ2lzdHJ5ID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnk7XG4gICAgICAgIGxldCB0ZXh0RG9jID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRleHREb2MgIT09IG51bGwgJiYgdGV4dERvYyAhPT0gdm9pZCAwID8gdGV4dERvYyA6ICh0ZXh0RG9jID0gVGV4dERvY3VtZW50LmNyZWF0ZSh1cmkudG9TdHJpbmcoKSwgc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKHVyaSkuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkLCAwLCB0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09IHZvaWQgMCA/IHRleHQgOiAnJykpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0TGFuZ2l1bURvY3VtZW50cyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5ID0gc2VydmljZXMud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3Rvcnk7XG4gICAgfVxuICAgIGdldCBhbGwoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0odGhpcy5kb2N1bWVudE1hcC52YWx1ZXMoKSk7XG4gICAgfVxuICAgIGFkZERvY3VtZW50KGRvY3VtZW50KSB7XG4gICAgICAgIGNvbnN0IHVyaVN0cmluZyA9IGRvY3VtZW50LnVyaS50b1N0cmluZygpO1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1hcC5oYXModXJpU3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGRvY3VtZW50IHdpdGggdGhlIFVSSSAnJHt1cmlTdHJpbmd9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2N1bWVudE1hcC5zZXQodXJpU3RyaW5nLCBkb2N1bWVudCk7XG4gICAgfVxuICAgIGdldERvY3VtZW50KHVyaSkge1xuICAgICAgICBjb25zdCB1cmlTdHJpbmcgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHVyaVN0cmluZyk7XG4gICAgfVxuICAgIGFzeW5jIGdldE9yQ3JlYXRlRG9jdW1lbnQodXJpLCBjYW5jZWxsYXRpb25Ub2tlbikge1xuICAgICAgICBsZXQgZG9jdW1lbnQgPSB0aGlzLmdldERvY3VtZW50KHVyaSk7XG4gICAgICAgIGlmIChkb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50ID0gYXdhaXQgdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21VcmkodXJpLCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgICAgIHRoaXMuYWRkRG9jdW1lbnQoZG9jdW1lbnQpO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGNyZWF0ZURvY3VtZW50KHVyaSwgdGV4dCwgY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgaWYgKGNhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcodGV4dCwgdXJpLCBjYW5jZWxsYXRpb25Ub2tlbikudGhlbihkb2N1bWVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGREb2N1bWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tU3RyaW5nKHRleHQsIHVyaSk7XG4gICAgICAgICAgICB0aGlzLmFkZERvY3VtZW50KGRvY3VtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYXNEb2N1bWVudCh1cmkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuaGFzKHVyaS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZURvY3VtZW50KHVyaSkge1xuICAgICAgICBjb25zdCB1cmlTdHJpbmcgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbGFuZ2l1bURvYyA9IHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHVyaVN0cmluZyk7XG4gICAgICAgIGlmIChsYW5naXVtRG9jKSB7XG4gICAgICAgICAgICBsYW5naXVtRG9jLnN0YXRlID0gRG9jdW1lbnRTdGF0ZS5DaGFuZ2VkO1xuICAgICAgICAgICAgbGFuZ2l1bURvYy5wcmVjb21wdXRlZFNjb3BlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxhbmdpdW1Eb2MucmVmZXJlbmNlcyA9IFtdO1xuICAgICAgICAgICAgbGFuZ2l1bURvYy5kaWFnbm9zdGljcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFuZ2l1bURvYztcbiAgICB9XG4gICAgZGVsZXRlRG9jdW1lbnQodXJpKSB7XG4gICAgICAgIGNvbnN0IHVyaVN0cmluZyA9IHVyaS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsYW5naXVtRG9jID0gdGhpcy5kb2N1bWVudE1hcC5nZXQodXJpU3RyaW5nKTtcbiAgICAgICAgaWYgKGxhbmdpdW1Eb2MpIHtcbiAgICAgICAgICAgIGxhbmdpdW1Eb2Muc3RhdGUgPSBEb2N1bWVudFN0YXRlLkNoYW5nZWQ7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TWFwLmRlbGV0ZSh1cmlTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYW5naXVtRG9jO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRvY3VtZW50cy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IENhbmNlbGxhdGlvblRva2VuIH0gZnJvbSAnLi4vdXRpbHMvY2FuY2VsbGF0aW9uLmpzJztcbmltcG9ydCB7IGlzQXN0Tm9kZSwgaXNBc3ROb2RlRGVzY3JpcHRpb24sIGlzTGlua2luZ0Vycm9yIH0gZnJvbSAnLi4vc3ludGF4LXRyZWUuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIHN0cmVhbUFzdCwgc3RyZWFtUmVmZXJlbmNlcyB9IGZyb20gJy4uL3V0aWxzL2FzdC11dGlscy5qcyc7XG5pbXBvcnQgeyBpbnRlcnJ1cHRBbmRDaGVjayB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgRG9jdW1lbnRTdGF0ZSB9IGZyb20gJy4uL3dvcmtzcGFjZS9kb2N1bWVudHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRMaW5rZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMucmVmbGVjdGlvbiA9IHNlcnZpY2VzLnNoYXJlZC5Bc3RSZWZsZWN0aW9uO1xuICAgICAgICB0aGlzLmxhbmdpdW1Eb2N1bWVudHMgPSAoKSA9PiBzZXJ2aWNlcy5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHM7XG4gICAgICAgIHRoaXMuc2NvcGVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuU2NvcGVQcm92aWRlcjtcbiAgICAgICAgdGhpcy5hc3ROb2RlTG9jYXRvciA9IHNlcnZpY2VzLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcjtcbiAgICB9XG4gICAgYXN5bmMgbGluayhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzdHJlYW1Bc3QoZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWUpKSB7XG4gICAgICAgICAgICBhd2FpdCBpbnRlcnJ1cHRBbmRDaGVjayhjYW5jZWxUb2tlbik7XG4gICAgICAgICAgICBzdHJlYW1SZWZlcmVuY2VzKG5vZGUpLmZvckVhY2gocmVmID0+IHRoaXMuZG9MaW5rKHJlZiwgZG9jdW1lbnQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkb0xpbmsocmVmSW5mbywgZG9jdW1lbnQpIHtcbiAgICAgICAgY29uc3QgcmVmID0gcmVmSW5mby5yZWZlcmVuY2U7XG4gICAgICAgIC8vIFRoZSByZWZlcmVuY2UgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJlc29sdmVkIGxhemlseSBieSBhY2Nlc3NpbmcgaXRzIGByZWZgIHByb3BlcnR5LlxuICAgICAgICBpZiAocmVmLl9yZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0Q2FuZGlkYXRlKHJlZkluZm8pO1xuICAgICAgICAgICAgICAgIGlmIChpc0xpbmtpbmdFcnJvcihkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLl9yZWYgPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5fbm9kZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhbmdpdW1Eb2N1bWVudHMoKS5oYXNEb2N1bWVudChkZXNjcmlwdGlvbi5kb2N1bWVudFVyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgZG9jdW1lbnQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtlZE5vZGUgPSB0aGlzLmxvYWRBc3ROb2RlKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5fcmVmID0gbGlua2VkTm9kZSAhPT0gbnVsbCAmJiBsaW5rZWROb2RlICE9PSB2b2lkIDAgPyBsaW5rZWROb2RlIDogdGhpcy5jcmVhdGVMaW5raW5nRXJyb3IocmVmSW5mbywgZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlZi5fcmVmID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZWZJbmZvKSwgeyBtZXNzYWdlOiBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtyZWYuJHJlZlRleHR9JzogJHtlcnJ9YCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgZG9jdW1lbnQncyBhcnJheSBvZiByZWZlcmVuY2VzXG4gICAgICAgIGRvY3VtZW50LnJlZmVyZW5jZXMucHVzaChyZWYpO1xuICAgIH1cbiAgICB1bmxpbmsoZG9jdW1lbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWYgb2YgZG9jdW1lbnQucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgZGVsZXRlIHJlZi5fcmVmO1xuICAgICAgICAgICAgZGVsZXRlIHJlZi5fbm9kZURlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LnJlZmVyZW5jZXMgPSBbXTtcbiAgICB9XG4gICAgZ2V0Q2FuZGlkYXRlKHJlZkluZm8pIHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlUHJvdmlkZXIuZ2V0U2NvcGUocmVmSW5mbyk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2NvcGUuZ2V0RWxlbWVudChyZWZJbmZvLnJlZmVyZW5jZS4kcmVmVGV4dCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbiAhPT0gbnVsbCAmJiBkZXNjcmlwdGlvbiAhPT0gdm9pZCAwID8gZGVzY3JpcHRpb24gOiB0aGlzLmNyZWF0ZUxpbmtpbmdFcnJvcihyZWZJbmZvKTtcbiAgICB9XG4gICAgYnVpbGRSZWZlcmVuY2Uobm9kZSwgcHJvcGVydHksIHJlZk5vZGUsIHJlZlRleHQpIHtcbiAgICAgICAgLy8gU2VlIGJlaGF2aW9yIGRlc2NyaXB0aW9uIGluIGRvYyBvZiBMaW5rZXIsIHVwZGF0ZSB0aGF0IG9uIGNoYW5nZXMgaW4gaGVyZS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IGxpbmtlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHtcbiAgICAgICAgICAgICRyZWZOb2RlOiByZWZOb2RlLFxuICAgICAgICAgICAgJHJlZlRleHQ6IHJlZlRleHQsXG4gICAgICAgICAgICBnZXQgcmVmKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBc3ROb2RlKHRoaXMuX3JlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBmcmVxdWVudCBjYXNlOiB0aGUgdGFyZ2V0IGlzIGFscmVhZHkgcmVzb2x2ZWQuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZURlc2NyaXB0aW9uKHRoaXMuX25vZGVEZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBjYW5kaWRhdGUgaGFzIGJlZW4gZm91bmQgYmVmb3JlLCBidXQgaXQgaXMgbm90IGxvYWRlZCB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtlZE5vZGUgPSBsaW5rZXIubG9hZEFzdE5vZGUodGhpcy5fbm9kZURlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVmID0gbGlua2VkTm9kZSAhPT0gbnVsbCAmJiBsaW5rZWROb2RlICE9PSB2b2lkIDAgPyBsaW5rZWROb2RlIDogbGlua2VyLmNyZWF0ZUxpbmtpbmdFcnJvcih7IHJlZmVyZW5jZSwgY29udGFpbmVyOiBub2RlLCBwcm9wZXJ0eSB9LCB0aGlzLl9ub2RlRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9yZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVmZXJlbmNlIGhhcyBub3QgYmVlbiBsaW5rZWQgeWV0LCBzbyBkbyB0aGF0IG5vdy5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmRGF0YSA9IGxpbmtlci5nZXRMaW5rZWROb2RlKHsgcmVmZXJlbmNlLCBjb250YWluZXI6IG5vZGUsIHByb3BlcnR5IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmRGF0YS5lcnJvciAmJiBnZXREb2N1bWVudChub2RlKS5zdGF0ZSA8IERvY3VtZW50U3RhdGUuQ29tcHV0ZWRTY29wZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvY3VtZW50IHNjb3BlIGlzIG5vdCByZWFkeSwgZG9uJ3Qgc2V0IGB0aGlzLl9yZWZgIHNvIGxpbmtlciBjYW4gcmV0cnkgbGF0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZiA9IChfYSA9IHJlZkRhdGEubm9kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVmRGF0YS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZURlc2NyaXB0aW9uID0gcmVmRGF0YS5kZXNjcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQXN0Tm9kZSh0aGlzLl9yZWYpID8gdGhpcy5fcmVmIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCAkbm9kZURlc2NyaXB0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlRGVzY3JpcHRpb247XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xpbmtpbmdFcnJvcih0aGlzLl9yZWYpID8gdGhpcy5fcmVmIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVmZXJlbmNlO1xuICAgIH1cbiAgICBnZXRMaW5rZWROb2RlKHJlZkluZm8pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXRDYW5kaWRhdGUocmVmSW5mbyk7XG4gICAgICAgICAgICBpZiAoaXNMaW5raW5nRXJyb3IoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGRlc2NyaXB0aW9uIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsaW5rZWROb2RlID0gdGhpcy5sb2FkQXN0Tm9kZShkZXNjcmlwdGlvbik7XG4gICAgICAgICAgICBpZiAobGlua2VkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IGxpbmtlZE5vZGUsIGRlc2NyOiBkZXNjcmlwdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3I6IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogdGhpcy5jcmVhdGVMaW5raW5nRXJyb3IocmVmSW5mbywgZGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlZkluZm8pLCB7IG1lc3NhZ2U6IGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke3JlZkluZm8ucmVmZXJlbmNlLiRyZWZUZXh0fSc6ICR7ZXJyfWAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9hZEFzdE5vZGUobm9kZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIGlmIChub2RlRGVzY3JpcHRpb24ubm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVEZXNjcmlwdGlvbi5ub2RlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMubGFuZ2l1bURvY3VtZW50cygpLmdldERvY3VtZW50KG5vZGVEZXNjcmlwdGlvbi5kb2N1bWVudFVyaSk7XG4gICAgICAgIGlmICghZG9jKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoZG9jLnBhcnNlUmVzdWx0LnZhbHVlLCBub2RlRGVzY3JpcHRpb24ucGF0aCk7XG4gICAgfVxuICAgIGNyZWF0ZUxpbmtpbmdFcnJvcihyZWZJbmZvLCB0YXJnZXREZXNjcmlwdGlvbikge1xuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkb2N1bWVudCBpcyBzdWZmaWNpZW50bHkgcHJvY2Vzc2VkIGJ5IHRoZSBEb2N1bWVudEJ1aWxkZXIuIElmIG5vdCwgdGhpcyBpcyBhIGhpbnQgZm9yIGEgYnVnXG4gICAgICAgIC8vIGluIHRoZSBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudChyZWZJbmZvLmNvbnRhaW5lcik7XG4gICAgICAgIGlmIChkb2N1bWVudC5zdGF0ZSA8IERvY3VtZW50U3RhdGUuQ29tcHV0ZWRTY29wZXMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGVkIHJlZmVyZW5jZSByZXNvbHV0aW9uIGJlZm9yZSBkb2N1bWVudCByZWFjaGVkIENvbXB1dGVkU2NvcGVzIHN0YXRlICgke2RvY3VtZW50LnVyaX0pLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShyZWZJbmZvKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVmSW5mbyksIHsgbWVzc2FnZTogYENvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSB0byAke3JlZmVyZW5jZVR5cGV9IG5hbWVkICcke3JlZkluZm8ucmVmZXJlbmNlLiRyZWZUZXh0fScuYCwgdGFyZ2V0RGVzY3JpcHRpb24gfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlua2VyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgZmluZE5vZGVGb3JQcm9wZXJ0eSB9IGZyb20gJy4uL3V0aWxzL2dyYW1tYXItdXRpbHMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWQobm9kZSkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS5uYW1lID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0TmFtZVByb3ZpZGVyIHtcbiAgICBnZXROYW1lKG5vZGUpIHtcbiAgICAgICAgaWYgKGlzTmFtZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0TmFtZU5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gZmluZE5vZGVGb3JQcm9wZXJ0eShub2RlLiRjc3ROb2RlLCAnbmFtZScpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hbWUtcHJvdmlkZXIuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBmaW5kQXNzaWdubWVudCB9IGZyb20gJy4uL3V0aWxzL2dyYW1tYXItdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJy4uL3V0aWxzL2FzdC11dGlscy5qcyc7XG5pbXBvcnQgeyBpc0NoaWxkTm9kZSwgdG9Eb2N1bWVudFNlZ21lbnQgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtLmpzJztcbmltcG9ydCB7IFVyaVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEZWZhdWx0UmVmZXJlbmNlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5uYW1lUHJvdmlkZXIgPSBzZXJ2aWNlcy5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcjtcbiAgICAgICAgdGhpcy5pbmRleCA9IHNlcnZpY2VzLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyO1xuICAgICAgICB0aGlzLm5vZGVMb2NhdG9yID0gc2VydmljZXMud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yO1xuICAgIH1cbiAgICBmaW5kRGVjbGFyYXRpb24oc291cmNlQ3N0Tm9kZSkge1xuICAgICAgICBpZiAoc291cmNlQ3N0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IGZpbmRBc3NpZ25tZW50KHNvdXJjZUNzdE5vZGUpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUVsZW0gPSBzb3VyY2VDc3ROb2RlLmFzdE5vZGU7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCAmJiBub2RlRWxlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG5vZGVFbGVtW2Fzc2lnbm1lbnQuZmVhdHVyZV07XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZS5yZWY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZShyZWYpICYmIHJlZi4kcmVmTm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlZi4kcmVmTm9kZS5vZmZzZXQgPD0gc291cmNlQ3N0Tm9kZS5vZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWYuJHJlZk5vZGUuZW5kID49IHNvdXJjZUNzdE5vZGUuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5yZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZUVsZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lTm9kZSA9IHRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKG5vZGVFbGVtKTtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHJldHVybiB0aGUgdGFyZ2V0ZWQgbm9kZSBpbiBjYXNlIHRoZSB0YXJnZXRlZCBjc3Qgbm9kZSBpcyB0aGUgbmFtZSBub2RlIG9yIHBhcnQgb2YgaXRcbiAgICAgICAgICAgICAgICBpZiAobmFtZU5vZGUgJiYgKG5hbWVOb2RlID09PSBzb3VyY2VDc3ROb2RlIHx8IGlzQ2hpbGROb2RlKHNvdXJjZUNzdE5vZGUsIG5hbWVOb2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVFbGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kRGVjbGFyYXRpb25Ob2RlKHNvdXJjZUNzdE5vZGUpIHtcbiAgICAgICAgY29uc3QgYXN0Tm9kZSA9IHRoaXMuZmluZERlY2xhcmF0aW9uKHNvdXJjZUNzdE5vZGUpO1xuICAgICAgICBpZiAoYXN0Tm9kZSA9PT0gbnVsbCB8fCBhc3ROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhc3ROb2RlLiRjc3ROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUoYXN0Tm9kZSk7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Tm9kZSAhPT0gbnVsbCAmJiB0YXJnZXROb2RlICE9PSB2b2lkIDAgPyB0YXJnZXROb2RlIDogYXN0Tm9kZS4kY3N0Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kUmVmZXJlbmNlcyh0YXJnZXROb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlZnMgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSB0aGlzLmdldFJlZmVyZW5jZVRvU2VsZih0YXJnZXROb2RlKTtcbiAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2gocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXhSZWZlcmVuY2VzID0gdGhpcy5pbmRleC5maW5kQWxsUmVmZXJlbmNlcyh0YXJnZXROb2RlLCB0aGlzLm5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKHRhcmdldE5vZGUpKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZG9jdW1lbnRVcmkpIHtcbiAgICAgICAgICAgIGluZGV4UmVmZXJlbmNlcyA9IGluZGV4UmVmZXJlbmNlcy5maWx0ZXIocmVmID0+IFVyaVV0aWxzLmVxdWFscyhyZWYuc291cmNlVXJpLCBvcHRpb25zLmRvY3VtZW50VXJpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcy5wdXNoKC4uLmluZGV4UmVmZXJlbmNlcyk7XG4gICAgICAgIHJldHVybiBzdHJlYW0ocmVmcyk7XG4gICAgfVxuICAgIGdldFJlZmVyZW5jZVRvU2VsZih0YXJnZXROb2RlKSB7XG4gICAgICAgIGNvbnN0IG5hbWVOb2RlID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUodGFyZ2V0Tm9kZSk7XG4gICAgICAgIGlmIChuYW1lTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aCh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc291cmNlVXJpOiBkb2MudXJpLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgdGFyZ2V0VXJpOiBkb2MudXJpLFxuICAgICAgICAgICAgICAgIHRhcmdldFBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgc2VnbWVudDogdG9Eb2N1bWVudFNlZ21lbnQobmFtZU5vZGUpLFxuICAgICAgICAgICAgICAgIGxvY2FsOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmZXJlbmNlcy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IFJlZHVjdGlvbiwgc3RyZWFtIH0gZnJvbSAnLi9zdHJlYW0uanMnO1xuLyoqXG4gKiBBIG11bHRpbWFwIGlzIGEgdmFyaWF0aW9uIG9mIGEgTWFwIHRoYXQgaGFzIHBvdGVudGlhbGx5IG11bHRpcGxlIHZhbHVlcyBmb3IgZXZlcnkga2V5LlxuICovXG5leHBvcnQgY2xhc3MgTXVsdGlNYXAge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIG11bHRpbWFwLlxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gUmVkdWN0aW9uLnN1bShzdHJlYW0odGhpcy5tYXAudmFsdWVzKCkpLm1hcChhID0+IGEubGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBlbnRyaWVzIGluIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3BlcmF0ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBgdmFsdWVgIGlzIGdpdmVuOlxuICAgICAqICAqIFdpdGggYSB2YWx1ZSwgdGhpcyBtZXRob2QgZGVsZXRlcyB0aGUgc3BlY2lmaWMga2V5IC8gdmFsdWUgcGFpciBmcm9tIHRoZSBtdWx0aW1hcC5cbiAgICAgKiAgKiBXaXRob3V0IGEgdmFsdWUsIGFsbCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgYXJlIGRlbGV0ZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSB2YWx1ZSBleGlzdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkLCBvciBgZmFsc2VgIGlmIHRoZSBzcGVjaWZpZWRcbiAgICAgKiAgICAga2V5IC8gdmFsdWUgZG9lcyBub3QgZXhpc3QuXG4gICAgICovXG4gICAgZGVsZXRlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMubWFwLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkuIElmIG5vIHZhbHVlIGV4aXN0cyxcbiAgICAgKiBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIF9Ob3RlOl8gVGhlIHJldHVybmVkIGFycmF5IGlzIGFzc3VtZWQgbm90IHRvIGJlIG1vZGlmaWVkLiBVc2UgdGhlIGBzZXRgIG1ldGhvZCB0byBhZGQgYVxuICAgICAqIHZhbHVlIGFuZCBgZGVsZXRlYCB0byByZW1vdmUgYSB2YWx1ZSBmcm9tIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMubWFwLmdldChrZXkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3BlcmF0ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBgdmFsdWVgIGlzIGdpdmVuOlxuICAgICAqICAqIFdpdGggYSB2YWx1ZSwgdGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmljIGtleSAvIHZhbHVlIHBhaXIgaXMgcHJlc2VudCBpbiB0aGUgbXVsdGltYXAuXG4gICAgICogICogV2l0aG91dCBhIHZhbHVlLCB0aGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4ga2V5IGlzIHByZXNlbnQgaW4gdGhlIG11bHRpbWFwLlxuICAgICAqL1xuICAgIGhhcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAuaGFzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmluZGV4T2YodmFsdWUpID49IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBnaXZlbiBrZXkgLyB2YWx1ZSBwYWlyIHRvIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBhZGQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5tYXAuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLmdldChrZXkpLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0KGtleSwgW3ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgZ2l2ZW4gc2V0IG9mIGtleSAvIHZhbHVlIHBhaXJzIHRvIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBhZGRBbGwoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMubWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5nZXQoa2V5KS5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCBBcnJheS5mcm9tKHZhbHVlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZXZlcnkga2V5IC8gdmFsdWUgcGFpciBpbiB0aGUgbXVsdGltYXAuXG4gICAgICovXG4gICAgZm9yRWFjaChjYWxsYmFja2ZuKSB7XG4gICAgICAgIHRoaXMubWFwLmZvckVhY2goKGFycmF5LCBrZXkpID0+IGFycmF5LmZvckVhY2godmFsdWUgPT4gY2FsbGJhY2tmbih2YWx1ZSwga2V5LCB0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5pdGVyYXRvcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbSh0aGlzLm1hcC5lbnRyaWVzKCkpXG4gICAgICAgICAgICAuZmxhdE1hcCgoW2tleSwgYXJyYXldKSA9PiBhcnJheS5tYXAodmFsdWUgPT4gW2tleSwgdmFsdWVdKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzdHJlYW0gb2Yga2V5cyBpbiB0aGUgbWFwLlxuICAgICAqL1xuICAgIGtleXMoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0odGhpcy5tYXAua2V5cygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmVhbSBvZiB2YWx1ZXMgaW4gdGhlIG1hcC5cbiAgICAgKi9cbiAgICB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0odGhpcy5tYXAudmFsdWVzKCkpLmZsYXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmVhbSBvZiBrZXksIHZhbHVlIHNldCBwYWlycyBmb3IgZXZlcnkga2V5IGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgZW50cmllc0dyb3VwZWRCeUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbSh0aGlzLm1hcC5lbnRyaWVzKCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBCaU1hcCB7XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5zaXplO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50cykge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5pbnZlcnNlID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW52ZXJzZS5jbGVhcigpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW52ZXJzZS5zZXQodmFsdWUsIGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgZ2V0S2V5KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludmVyc2UuZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB0aGlzLmludmVyc2UuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2xsZWN0aW9ucy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxLTIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgc3RyZWFtQWxsQ29udGVudHMsIHN0cmVhbUNvbnRlbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE11bHRpTWFwIH0gZnJvbSAnLi4vdXRpbHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHsgaW50ZXJydXB0QW5kQ2hlY2sgfSBmcm9tICcuLi91dGlscy9wcm9taXNlLXV0aWxzLmpzJztcbi8qKlxuICogVGhlIGRlZmF1bHQgc2NvcGUgY29tcHV0YXRpb24gY3JlYXRlcyBhbmQgY29sbGVjdGVzIGRlc2NyaXB0aW9ucyBvZiB0aGUgQVNUIG5vZGVzIHRvIGJlIGV4cG9ydGVkIGludG8gdGhlXG4gKiBfZ2xvYmFsXyBzY29wZSBmcm9tIHRoZSBnaXZlbiBkb2N1bWVudC4gQnkgZGVmYXVsdCB0aG9zZSBhcmUgdGhlIGRvY3VtZW50J3Mgcm9vdCBBU1Qgbm9kZSBhbmQgaXRzIGRpcmVjdGx5XG4gKiBjb250YWluZWQgY2hpbGQgbm9kZXMuXG4gKlxuICogQmVzaWRlcywgaXQgZ2F0aGVycyBhbGwgQVNUIG5vZGVzIHRoYXQgaGF2ZSBhIG5hbWUgKGFjY29yZGluZyB0byB0aGUgYE5hbWVQcm92aWRlcmAgc2VydmljZSkgYW5kIGluY2x1ZGVzIHRoZW1cbiAqIGluIHRoZSBsb2NhbCBzY29wZSBvZiB0aGVpciBwYXJ0aWN1bGFyIGNvbnRhaW5lciBub2Rlcy4gQXMgYSByZXN1bHQsIGZvciBldmVyeSBjcm9zcy1yZWZlcmVuY2UgaW4gdGhlIEFTVCxcbiAqIHRhcmdldCBlbGVtZW50cyBmcm9tIHRoZSBzYW1lIGxldmVsIChzaWJsaW5ncykgYW5kIGZ1cnRoZXIgdXAgdG93YXJkcyB0aGUgcm9vdCAocGFyZW50cyBhbmQgc2libGluZ3Mgb2YgcGFyZW50cylcbiAqIGFyZSB2aXNpYmxlLiBFbGVtZW50cyBiZWluZyBuZXN0ZWQgaW5zaWRlIGxvd2VyIGxldmVscyAoY2hpbGRyZW4sIGNoaWxkcmVuIG9mIHNpYmxpbmdzIGFuZCBwYXJlbnRzJyBzaWJsaW5ncylcbiAqIGFyZSBfaW52aXNpYmxlXyBieSBkZWZhdWx0LCBidXQgdGhhdCBjYW4gYmUgY2hhbmdlZCBieSBjdXN0b21pemluZyB0aGlzIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5uYW1lUHJvdmlkZXIgPSBzZXJ2aWNlcy5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcjtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbnMgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI7XG4gICAgfVxuICAgIGFzeW5jIGNvbXB1dGVFeHBvcnRzKGRvY3VtZW50LCBjYW5jZWxUb2tlbiA9IENhbmNlbGxhdGlvblRva2VuLk5vbmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZUV4cG9ydHNGb3JOb2RlKGRvY3VtZW50LnBhcnNlUmVzdWx0LnZhbHVlLCBkb2N1bWVudCwgdW5kZWZpbmVkLCBjYW5jZWxUb2tlbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMge0BsaW5rIEFzdE5vZGVEZXNjcmlwdGlvbiBBc3ROb2RlRGVzY3JpcHRpb25zfSBmb3IgdGhlIGdpdmVuIHtAbGluayBBc3ROb2RlIHBhcmVudE5vZGV9IGFuZCBpdHMgY2hpbGRyZW4uXG4gICAgICogVGhlIGxpc3Qgb2YgY2hpbGRyZW4gdG8gYmUgY29uc2lkZXJlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIge0BsaW5rIGNoaWxkcmVufS5cbiAgICAgKiBCeSBkZWZhdWx0IG9ubHkgdGhlIGRpcmVjdCBjaGlsZHJlbiBvZiB7QGxpbmsgcGFyZW50Tm9kZX0gYXJlIHZpc2l0ZWQsIG5lc3RlZCBub2RlcyBhcmUgbm90IGV4cG9ydGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudE5vZGUgQVNUIG5vZGUgdG8gYmUgZXhwb3J0ZWQsIGkuZS4sIG9mIHdoaWNoIGFuIHtAbGluayBBc3ROb2RlRGVzY3JpcHRpb259IHNoYWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LlxuICAgICAqIEBwYXJhbSBkb2N1bWVudCBUaGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgQVNUIG5vZGUgdG8gYmUgZXhwb3J0ZWQuXG4gICAgICogQHBhcmFtIGNoaWxkcmVuIEEgZnVuY3Rpb24gY2FsbGVkIHdpdGgge0BsaW5rIHBhcmVudE5vZGV9IGFzIHNpbmdsZSBhcmd1bWVudCBhbmQgcmV0dXJuaW5nIGFuIHtAbGluayBJdGVyYWJsZX0gc3VwcGx5aW5nIHRoZSBjaGlsZHJlbiB0byBiZSB2aXNpdGVkLCB3aGljaCBtdXN0IGJlIGRpcmVjdGx5IG9yIHRyYW5zaXRpdmVseSBjb250YWluZWQgaW4ge0BsaW5rIHBhcmVudE5vZGV9LlxuICAgICAqIEBwYXJhbSBjYW5jZWxUb2tlbiBJbmRpY2F0ZXMgd2hlbiB0byBjYW5jZWwgdGhlIGN1cnJlbnQgb3BlcmF0aW9uLlxuICAgICAqIEB0aHJvd3MgYE9wZXJhdGlvbkNhbmNlbGVkYCBpZiBhIHVzZXIgYWN0aW9uIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgbGlzdCBvZiB7QGxpbmsgQXN0Tm9kZURlc2NyaXB0aW9uIEFzdE5vZGVEZXNjcmlwdGlvbnN9IHRvIGJlIHB1Ymxpc2hlZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBhc3luYyBjb21wdXRlRXhwb3J0c0Zvck5vZGUocGFyZW50Tm9kZSwgZG9jdW1lbnQsIGNoaWxkcmVuID0gc3RyZWFtQ29udGVudHMsIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICBjb25zdCBleHBvcnRzID0gW107XG4gICAgICAgIHRoaXMuZXhwb3J0Tm9kZShwYXJlbnROb2RlLCBleHBvcnRzLCBkb2N1bWVudCk7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjaGlsZHJlbihwYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5leHBvcnROb2RlKG5vZGUsIGV4cG9ydHMsIGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgc2luZ2xlIG5vZGUgdG8gdGhlIGxpc3Qgb2YgZXhwb3J0cyBpZiBpdCBoYXMgYSBuYW1lLiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjaGFuZ2UgaG93XG4gICAgICogc3ltYm9scyBhcmUgZXhwb3J0ZWQsIGUuZy4gYnkgbW9kaWZ5aW5nIHRoZWlyIGV4cG9ydGVkIG5hbWUuXG4gICAgICovXG4gICAgZXhwb3J0Tm9kZShub2RlLCBleHBvcnRzLCBkb2N1bWVudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShub2RlKTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaCh0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihub2RlLCBuYW1lLCBkb2N1bWVudCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGNvbXB1dGVMb2NhbFNjb3Blcyhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNjb3BlcyA9IG5ldyBNdWx0aU1hcCgpO1xuICAgICAgICAvLyBIZXJlIHdlIG5hdmlnYXRlIHRoZSBmdWxsIEFTVCAtIGxvY2FsIHNjb3BlcyBzaGFsbCBiZSBhdmFpbGFibGUgaW4gdGhlIHdob2xlIGRvY3VtZW50XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzdHJlYW1BbGxDb250ZW50cyhyb290Tm9kZSkpIHtcbiAgICAgICAgICAgIGF3YWl0IGludGVycnVwdEFuZENoZWNrKGNhbmNlbFRva2VuKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc05vZGUobm9kZSwgZG9jdW1lbnQsIHNjb3Blcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3BlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBhIHNpbmdsZSBub2RlIGR1cmluZyBzY29wZXMgY29tcHV0YXRpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG1ha2VzIHRoZSBub2RlIHZpc2libGVcbiAgICAgKiBpbiB0aGUgc3VidHJlZSBvZiBpdHMgY29udGFpbmVyIChpZiB0aGUgbm9kZSBoYXMgYSBuYW1lKS4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoaXMsXG4gICAgICogZS5nLiBieSBpbmNyZWFzaW5nIHRoZSB2aXNpYmlsaXR5IHRvIGEgaGlnaGVyIGxldmVsIGluIHRoZSBBU1QuXG4gICAgICovXG4gICAgcHJvY2Vzc05vZGUobm9kZSwgZG9jdW1lbnQsIHNjb3Blcykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBub2RlLiRjb250YWluZXI7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKG5vZGUpO1xuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBzY29wZXMuYWRkKGNvbnRhaW5lciwgdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24obm9kZSwgbmFtZSwgZG9jdW1lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLWNvbXB1dGF0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgRU1QVFlfU1RSRUFNLCBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBzY29wZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhIGBTdHJlYW1gLiBJdCBoYXMgYW4gb3B0aW9uYWwgX291dGVyIHNjb3BlXyBkZXNjcmliaW5nXG4gKiB0aGUgbmV4dCBsZXZlbCBvZiBlbGVtZW50cywgd2hpY2ggYXJlIHF1ZXJpZWQgd2hlbiBhIHRhcmdldCBlbGVtZW50IGlzIG5vdCBmb3VuZCBpbiB0aGUgc3RyZWFtIHByb3ZpZGVkXG4gKiB0byB0aGlzIHNjb3BlLlxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzLCBvdXRlclNjb3BlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgICAgICB0aGlzLm91dGVyU2NvcGUgPSBvdXRlclNjb3BlO1xuICAgICAgICB0aGlzLmNhc2VJbnNlbnNpdGl2ZSA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXNlSW5zZW5zaXRpdmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xuICAgIH1cbiAgICBnZXRBbGxFbGVtZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMub3V0ZXJTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHMuY29uY2F0KHRoaXMub3V0ZXJTY29wZS5nZXRBbGxFbGVtZW50cygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEVsZW1lbnQobmFtZSkge1xuICAgICAgICBjb25zdCBsb2NhbCA9IHRoaXMuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgICAgICA/IHRoaXMuZWxlbWVudHMuZmluZChlID0+IGUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICA6IHRoaXMuZWxlbWVudHMuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChsb2NhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dGVyU2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNYXBTY29wZSB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudHMsIG91dGVyU2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNhc2VJbnNlbnNpdGl2ZSA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXNlSW5zZW5zaXRpdmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgID8gZWxlbWVudC5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQubmFtZTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuc2V0KG5hbWUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0ZXJTY29wZSA9IG91dGVyU2NvcGU7XG4gICAgfVxuICAgIGdldEVsZW1lbnQobmFtZSkge1xuICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSB0aGlzLmNhc2VJbnNlbnNpdGl2ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IGxvY2FsID0gdGhpcy5lbGVtZW50cy5nZXQobG9jYWxOYW1lKTtcbiAgICAgICAgaWYgKGxvY2FsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3V0ZXJTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0ZXJTY29wZS5nZXRFbGVtZW50KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldEFsbEVsZW1lbnRzKCkge1xuICAgICAgICBsZXQgZWxlbWVudFN0cmVhbSA9IHN0cmVhbSh0aGlzLmVsZW1lbnRzLnZhbHVlcygpKTtcbiAgICAgICAgaWYgKHRoaXMub3V0ZXJTY29wZSkge1xuICAgICAgICAgICAgZWxlbWVudFN0cmVhbSA9IGVsZW1lbnRTdHJlYW0uY29uY2F0KHRoaXMub3V0ZXJTY29wZS5nZXRBbGxFbGVtZW50cygpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudFN0cmVhbTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgRU1QVFlfU0NPUEUgPSB7XG4gICAgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGdldEFsbEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gRU1QVFlfU1RSRUFNO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCBjbGFzcyBEaXNwb3NhYmxlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRvRGlzcG9zZSA9IFtdO1xuICAgICAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgb25EaXNwb3NlKGRpc3Bvc2FibGUpIHtcbiAgICAgICAgdGhpcy50b0Rpc3Bvc2UucHVzaChkaXNwb3NhYmxlKTtcbiAgICB9XG4gICAgZGlzcG9zZSgpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRvRGlzcG9zZS5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIH1cbiAgICB0aHJvd0lmRGlzcG9zZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBjYWNoZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgU2ltcGxlQ2FjaGUgZXh0ZW5kcyBEaXNwb3NhYmxlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmhhcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0KGtleSwgcHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3ZpZGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29udGV4dENhY2hlIGV4dGVuZHMgRGlzcG9zYWJsZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb252ZXJ0ZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZXIgPSBjb252ZXJ0ZXIgIT09IG51bGwgJiYgY29udmVydGVyICE9PSB2b2lkIDAgPyBjb252ZXJ0ZXIgOiAodmFsdWUgPT4gdmFsdWUpO1xuICAgIH1cbiAgICBoYXMoY29udGV4dEtleSwga2V5KSB7XG4gICAgICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlRm9yQ29udGV4dChjb250ZXh0S2V5KS5oYXMoa2V5KTtcbiAgICB9XG4gICAgc2V0KGNvbnRleHRLZXksIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgdGhpcy5jYWNoZUZvckNvbnRleHQoY29udGV4dEtleSkuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQoY29udGV4dEtleSwga2V5LCBwcm92aWRlcikge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICBjb25zdCBjb250ZXh0Q2FjaGUgPSB0aGlzLmNhY2hlRm9yQ29udGV4dChjb250ZXh0S2V5KTtcbiAgICAgICAgaWYgKGNvbnRleHRDYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRDYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm92aWRlcigpO1xuICAgICAgICAgICAgY29udGV4dENhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGNvbnRleHRLZXksIGtleSkge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZUZvckNvbnRleHQoY29udGV4dEtleSkuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIGNsZWFyKGNvbnRleHRLZXkpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgaWYgKGNvbnRleHRLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcEtleSA9IHRoaXMuY29udmVydGVyKGNvbnRleHRLZXkpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZS5kZWxldGUobWFwS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYWNoZUZvckNvbnRleHQoY29udGV4dEtleSkge1xuICAgICAgICBjb25zdCBtYXBLZXkgPSB0aGlzLmNvbnZlcnRlcihjb250ZXh0S2V5KTtcbiAgICAgICAgbGV0IGRvY3VtZW50Q2FjaGUgPSB0aGlzLmNhY2hlLmdldChtYXBLZXkpO1xuICAgICAgICBpZiAoIWRvY3VtZW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGRvY3VtZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnNldChtYXBLZXksIGRvY3VtZW50Q2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb2N1bWVudENhY2hlO1xuICAgIH1cbn1cbi8qKlxuICogRXZlcnkga2V5L3ZhbHVlIHBhaXIgaW4gdGhpcyBjYWNoZSBpcyBzY29wZWQgdG8gYSBkb2N1bWVudC5cbiAqIElmIHRoaXMgZG9jdW1lbnQgaXMgY2hhbmdlZCBvciBkZWxldGVkLCBhbGwgYXNzb2NpYXRlZCBrZXkvdmFsdWUgcGFpcnMgYXJlIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENhY2hlIGV4dGVuZHMgQ29udGV4dENhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihzaGFyZWRTZXJ2aWNlcykge1xuICAgICAgICBzdXBlcih1cmkgPT4gdXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLm9uRGlzcG9zZShzaGFyZWRTZXJ2aWNlcy53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKChjaGFuZ2VkLCBkZWxldGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbGxVcmlzID0gY2hhbmdlZC5jb25jYXQoZGVsZXRlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHVyaSBvZiBhbGxVcmlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcih1cmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfVxufVxuLyoqXG4gKiBFdmVyeSBrZXkvdmFsdWUgcGFpciBpbiB0aGlzIGNhY2hlIGlzIHNjb3BlZCB0byB0aGUgd2hvbGUgd29ya3NwYWNlLlxuICogSWYgYW55IGRvY3VtZW50IGluIHRoZSB3b3Jrc3BhY2UgY2hhbmdlcywgdGhlIHdob2xlIGNhY2hlIGlzIGV2aWN0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VDYWNoZSBleHRlbmRzIFNpbXBsZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihzaGFyZWRTZXJ2aWNlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9uRGlzcG9zZShzaGFyZWRTZXJ2aWNlcy53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhY2hpbmcuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IE1hcFNjb3BlLCBTdHJlYW1TY29wZSB9IGZyb20gJy4vc2NvcGUuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtLmpzJztcbmltcG9ydCB7IFdvcmtzcGFjZUNhY2hlIH0gZnJvbSAnLi4vdXRpbHMvY2FjaGluZy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFNjb3BlUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMucmVmbGVjdGlvbiA9IHNlcnZpY2VzLnNoYXJlZC5Bc3RSZWZsZWN0aW9uO1xuICAgICAgICB0aGlzLm5hbWVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9ucyA9IHNlcnZpY2VzLndvcmtzcGFjZS5Bc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlcjtcbiAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIgPSBzZXJ2aWNlcy5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcjtcbiAgICAgICAgdGhpcy5nbG9iYWxTY29wZUNhY2hlID0gbmV3IFdvcmtzcGFjZUNhY2hlKHNlcnZpY2VzLnNoYXJlZCk7XG4gICAgfVxuICAgIGdldFNjb3BlKGNvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gW107XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShjb250ZXh0KTtcbiAgICAgICAgY29uc3QgcHJlY29tcHV0ZWQgPSBnZXREb2N1bWVudChjb250ZXh0LmNvbnRhaW5lcikucHJlY29tcHV0ZWRTY29wZXM7XG4gICAgICAgIGlmIChwcmVjb21wdXRlZCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gY29udGV4dC5jb250YWluZXI7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRGVzY3JpcHRpb25zID0gcHJlY29tcHV0ZWQuZ2V0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxsRGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzLnB1c2goc3RyZWFtKGFsbERlc2NyaXB0aW9ucykuZmlsdGVyKGRlc2MgPT4gdGhpcy5yZWZsZWN0aW9uLmlzU3VidHlwZShkZXNjLnR5cGUsIHJlZmVyZW5jZVR5cGUpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuJGNvbnRhaW5lcjtcbiAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRHbG9iYWxTY29wZShyZWZlcmVuY2VUeXBlLCBjb250ZXh0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNjb3Blcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5jcmVhdGVTY29wZShzY29wZXNbaV0sIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgc2NvcGUgZm9yIHRoZSBnaXZlbiBjb2xsZWN0aW9uIG9mIEFTVCBub2RlIGRlc2NyaXB0aW9ucy5cbiAgICAgKi9cbiAgICBjcmVhdGVTY29wZShlbGVtZW50cywgb3V0ZXJTY29wZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNjb3BlKHN0cmVhbShlbGVtZW50cyksIG91dGVyU2NvcGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBzY29wZSBmb3IgdGhlIGdpdmVuIGNvbGxlY3Rpb24gb2YgQVNUIG5vZGVzLCB3aGljaCBuZWVkIHRvIGJlIHRyYW5zZm9ybWVkIGludG8gcmVzcGVjdGl2ZVxuICAgICAqIGRlc2NyaXB0aW9ucyBmaXJzdC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBgTmFtZVByb3ZpZGVyYCBhbmQgYEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyYCBzZXJ2aWNlcy5cbiAgICAgKi9cbiAgICBjcmVhdGVTY29wZUZvck5vZGVzKGVsZW1lbnRzLCBvdXRlclNjb3BlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzdHJlYW0oZWxlbWVudHMpLm1hcChlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO1xuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KS5ub25OdWxsYWJsZSgpO1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNjb3BlKHMsIG91dGVyU2NvcGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBnbG9iYWwgc2NvcGUgZmlsdGVyZWQgZm9yIHRoZSBnaXZlbiByZWZlcmVuY2UgdHlwZS5cbiAgICAgKi9cbiAgICBnZXRHbG9iYWxTY29wZShyZWZlcmVuY2VUeXBlLCBfY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxTY29wZUNhY2hlLmdldChyZWZlcmVuY2VUeXBlLCAoKSA9PiBuZXcgTWFwU2NvcGUodGhpcy5pbmRleE1hbmFnZXIuYWxsRWxlbWVudHMocmVmZXJlbmNlVHlwZSkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS1wcm92aWRlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IFVSSSB9IGZyb20gJ3ZzY29kZS11cmknO1xuaW1wb3J0IHsgaXNBc3ROb2RlLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3N5bnRheC10cmVlLmpzJztcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGZpbmROb2Rlc0ZvclByb3BlcnR5IH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNBc3ROb2RlV2l0aENvbW1lbnQobm9kZSkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS4kY29tbWVudCA9PT0gJ3N0cmluZyc7XG59XG5mdW5jdGlvbiBpc0ludGVybWVkaWF0ZVJlZmVyZW5jZShvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgISFvYmogJiYgKCckcmVmJyBpbiBvYmogfHwgJyRlcnJvcicgaW4gb2JqKTtcbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0SnNvblNlcmlhbGl6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIC8qKiBUaGUgc2V0IG9mIEFzdE5vZGUgcHJvcGVydGllcyB0byBiZSBpZ25vcmVkIGJ5IHRoZSBzZXJpYWxpemVyLiAqL1xuICAgICAgICB0aGlzLmlnbm9yZVByb3BlcnRpZXMgPSBuZXcgU2V0KFsnJGNvbnRhaW5lcicsICckY29udGFpbmVyUHJvcGVydHknLCAnJGNvbnRhaW5lckluZGV4JywgJyRkb2N1bWVudCcsICckY3N0Tm9kZSddKTtcbiAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRzID0gc2VydmljZXMuc2hhcmVkLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzO1xuICAgICAgICB0aGlzLmFzdE5vZGVMb2NhdG9yID0gc2VydmljZXMud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yO1xuICAgICAgICB0aGlzLm5hbWVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyO1xuICAgICAgICB0aGlzLmNvbW1lbnRQcm92aWRlciA9IHNlcnZpY2VzLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyO1xuICAgIH1cbiAgICBzZXJpYWxpemUobm9kZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljUmVwbGFjZXIgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVwbGFjZXI7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRSZXBsYWNlciA9IChrZXksIHZhbHVlKSA9PiB0aGlzLnJlcGxhY2VyKGtleSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZXBsYWNlciA9IHNwZWNpZmljUmVwbGFjZXIgPyAoa2V5LCB2YWx1ZSkgPT4gc3BlY2lmaWNSZXBsYWNlcihrZXksIHZhbHVlLCBkZWZhdWx0UmVwbGFjZXIpIDogZGVmYXVsdFJlcGxhY2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RG9jdW1lbnQgPSBnZXREb2N1bWVudChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShub2RlLCByZXBsYWNlciwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudERvY3VtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByb290ID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgdGhpcy5saW5rTm9kZShyb290LCByb290LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuICAgIHJlcGxhY2VyKGtleSwgdmFsdWUsIHsgcmVmVGV4dCwgc291cmNlVGV4dCwgdGV4dFJlZ2lvbnMsIGNvbW1lbnRzLCB1cmlDb252ZXJ0ZXIgfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGlmICh0aGlzLmlnbm9yZVByb3BlcnRpZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHZhbHVlLnJlZjtcbiAgICAgICAgICAgIGNvbnN0ICRyZWZUZXh0ID0gcmVmVGV4dCA/IHZhbHVlLiRyZWZUZXh0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHJlZlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0RG9jdW1lbnQgPSBnZXREb2N1bWVudChyZWZWYWx1ZSk7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFVyaSA9ICcnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnREb2N1bWVudCAmJiB0aGlzLmN1cnJlbnREb2N1bWVudCAhPT0gdGFyZ2V0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVyaUNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VXJpID0gdXJpQ29udmVydGVyKHRhcmdldERvY3VtZW50LnVyaSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VXJpID0gdGFyZ2V0RG9jdW1lbnQudXJpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IHRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocmVmVmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRyZWY6IGAke3RhcmdldFVyaX0jJHt0YXJnZXRQYXRofWAsXG4gICAgICAgICAgICAgICAgICAgICRyZWZUZXh0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRlcnJvcjogKF9iID0gKF9hID0gdmFsdWUuZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlJyxcbiAgICAgICAgICAgICAgICAgICAgJHJlZlRleHRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBhc3ROb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRleHRSZWdpb25zKSB7XG4gICAgICAgICAgICAgICAgYXN0Tm9kZSA9IHRoaXMuYWRkQXN0Tm9kZVJlZ2lvbldpdGhBc3NpZ25tZW50c1RvKE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgaWYgKCgha2V5IHx8IHZhbHVlLiRkb2N1bWVudCkgJiYgKGFzdE5vZGUgPT09IG51bGwgfHwgYXN0Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXN0Tm9kZS4kdGV4dFJlZ2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRvY3VtZW50IFVSSSBpcyBhZGRlZCB0byB0aGUgcm9vdCBub2RlIG9mIHRoZSByZXN1bHRpbmcgSlNPTiB0cmVlXG4gICAgICAgICAgICAgICAgICAgIGFzdE5vZGUuJHRleHRSZWdpb24uZG9jdW1lbnRVUkkgPSAoX2MgPSB0aGlzLmN1cnJlbnREb2N1bWVudCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnVyaS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2VUZXh0ICYmICFrZXkpIHtcbiAgICAgICAgICAgICAgICBhc3ROb2RlICE9PSBudWxsICYmIGFzdE5vZGUgIT09IHZvaWQgMCA/IGFzdE5vZGUgOiAoYXN0Tm9kZSA9IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgYXN0Tm9kZS4kc291cmNlVGV4dCA9IChfZCA9IHZhbHVlLiRjc3ROb2RlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21tZW50cykge1xuICAgICAgICAgICAgICAgIGFzdE5vZGUgIT09IG51bGwgJiYgYXN0Tm9kZSAhPT0gdm9pZCAwID8gYXN0Tm9kZSA6IChhc3ROb2RlID0gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0Tm9kZS4kY29tbWVudCA9IGNvbW1lbnQucmVwbGFjZSgvXFxyL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZSAhPT0gbnVsbCAmJiBhc3ROb2RlICE9PSB2b2lkIDAgPyBhc3ROb2RlIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkQXN0Tm9kZVJlZ2lvbldpdGhBc3NpZ25tZW50c1RvKG5vZGUpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlRG9jdW1lbnRTZWdtZW50ID0gY3N0Tm9kZSA9PiAoe1xuICAgICAgICAgICAgb2Zmc2V0OiBjc3ROb2RlLm9mZnNldCxcbiAgICAgICAgICAgIGVuZDogY3N0Tm9kZS5lbmQsXG4gICAgICAgICAgICBsZW5ndGg6IGNzdE5vZGUubGVuZ3RoLFxuICAgICAgICAgICAgcmFuZ2U6IGNzdE5vZGUucmFuZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm9kZS4kY3N0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dFJlZ2lvbiA9IG5vZGUuJHRleHRSZWdpb24gPSBjcmVhdGVEb2N1bWVudFNlZ21lbnQobm9kZS4kY3N0Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50cyA9IHRleHRSZWdpb24uYXNzaWdubWVudHMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG5vZGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCckJykpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2lnbm1lbnRzID0gZmluZE5vZGVzRm9yUHJvcGVydHkobm9kZS4kY3N0Tm9kZSwga2V5KS5tYXAoY3JlYXRlRG9jdW1lbnRTZWdtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlBc3NpZ25tZW50cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNba2V5XSA9IHByb3BlcnR5QXNzaWdubWVudHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsaW5rTm9kZShub2RlLCByb290LCBvcHRpb25zLCBjb250YWluZXIsIGNvbnRhaW5lclByb3BlcnR5LCBjb250YWluZXJJbmRleCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0ludGVybWVkaWF0ZVJlZmVyZW5jZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtpbmRleF0gPSB0aGlzLnJldml2ZVJlZmVyZW5jZShub2RlLCBwcm9wZXJ0eU5hbWUsIHJvb3QsIGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rTm9kZShlbGVtZW50LCByb290LCBvcHRpb25zLCBub2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50ZXJtZWRpYXRlUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdGhpcy5yZXZpdmVSZWZlcmVuY2Uobm9kZSwgcHJvcGVydHlOYW1lLCByb290LCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlua05vZGUoaXRlbSwgcm9vdCwgb3B0aW9ucywgbm9kZSwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtdXRhYmxlID0gbm9kZTtcbiAgICAgICAgbXV0YWJsZS4kY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICBtdXRhYmxlLiRjb250YWluZXJQcm9wZXJ0eSA9IGNvbnRhaW5lclByb3BlcnR5O1xuICAgICAgICBtdXRhYmxlLiRjb250YWluZXJJbmRleCA9IGNvbnRhaW5lckluZGV4O1xuICAgIH1cbiAgICByZXZpdmVSZWZlcmVuY2UoY29udGFpbmVyLCBwcm9wZXJ0eSwgcm9vdCwgcmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCByZWZUZXh0ID0gcmVmZXJlbmNlLiRyZWZUZXh0O1xuICAgICAgICBsZXQgZXJyb3IgPSByZWZlcmVuY2UuJGVycm9yO1xuICAgICAgICBpZiAocmVmZXJlbmNlLiRyZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2V0UmVmTm9kZShyb290LCByZWZlcmVuY2UuJHJlZiwgb3B0aW9ucy51cmlDb252ZXJ0ZXIpO1xuICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZShyZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWZUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlRleHQgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRyZWZUZXh0OiByZWZUZXh0ICE9PSBudWxsICYmIHJlZlRleHQgIT09IHZvaWQgMCA/IHJlZlRleHQgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmVmXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yID0gcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgcmVmID0ge1xuICAgICAgICAgICAgICAgICRyZWZUZXh0OiByZWZUZXh0ICE9PSBudWxsICYmIHJlZlRleHQgIT09IHZvaWQgMCA/IHJlZlRleHQgOiAnJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlZi5lcnJvciA9IHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlOiByZWZcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRSZWZOb2RlKHJvb3QsIHVyaSwgdXJpQ29udmVydGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudEluZGV4ID0gdXJpLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgIGlmIChmcmFnbWVudEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZShyb290LCB1cmkuc3Vic3RyaW5nKDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdDb3VsZCBub3QgcmVzb2x2ZSBwYXRoOiAnICsgdXJpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmcmFnbWVudEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VXJpID0gdXJpQ29udmVydGVyID8gdXJpQ29udmVydGVyKHVyaSkgOiBVUkkucGFyc2UodXJpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChkb2N1bWVudFVyaSk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICcgKyB1cmk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5wYXJzZVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VXJpID0gdXJpQ29udmVydGVyID8gdXJpQ29udmVydGVyKHVyaS5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCkpIDogVVJJLnBhcnNlKHVyaS5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoZG9jdW1lbnRVcmkpO1xuICAgICAgICAgICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IGZpbmQgZG9jdW1lbnQgZm9yIFVSSTogJyArIHVyaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmcmFnbWVudEluZGV4ID09PSB1cmkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5wYXJzZVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWUsIHVyaS5zdWJzdHJpbmcoZnJhZ21lbnRJbmRleCArIDEpKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IHJlc29sdmUgVVJJOiAnICsgdXJpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlcnIpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi1zZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuL3V0aWxzL3VyaS11dGlscy5qcyc7XG4vKipcbiAqIEdlbmVyaWMgcmVnaXN0cnkgZm9yIExhbmdpdW0gc2VydmljZXMsIGJ1dCBjYXBhYmxlIG9mIGJlaW5nIHVzZWQgd2l0aCBleHRlbmRpbmcgc2VydmljZSBzZXRzIGFzIHdlbGwgKHN1Y2ggYXMgdGhlIGxzcC1jb21wbGV0ZSBMYW5naXVtQ29yZVNlcnZpY2VzIHNldClcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRTZXJ2aWNlUmVnaXN0cnkge1xuICAgIHJlZ2lzdGVyKGxhbmd1YWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5zaW5nbGV0b24gJiYgIXRoaXMubWFwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBsYW5ndWFnZSB0byBiZSByZWdpc3RlcmVkOyBzdG9yZSBpdCBhcyBzaW5nbGV0b24uXG4gICAgICAgICAgICB0aGlzLnNpbmdsZXRvbiA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tYXApIHtcbiAgICAgICAgICAgIHRoaXMubWFwID0ge307XG4gICAgICAgICAgICBpZiAodGhpcy5zaW5nbGV0b24pIHtcbiAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBwcmV2aW91cyBzaW5nbGV0b24gaW5zdGFuY2UgdG8gdGhlIG5ldyBtYXAuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBleHQgb2YgdGhpcy5zaW5nbGV0b24uTGFuZ3VhZ2VNZXRhRGF0YS5maWxlRXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFtleHRdID0gdGhpcy5zaW5nbGV0b247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2luZ2xldG9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFN0b3JlIHRoZSBsYW5ndWFnZSBzZXJ2aWNlcyBpbiB0aGUgbWFwLlxuICAgICAgICBmb3IgKGNvbnN0IGV4dCBvZiBsYW5ndWFnZS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXBbZXh0XSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubWFwW2V4dF0gIT09IGxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmlsZSBleHRlbnNpb24gJHtleHR9IGlzIHVzZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzLiBJdCBpcyBub3cgYXNzaWduZWQgdG8gJyR7bGFuZ3VhZ2UuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkfScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hcFtleHRdID0gbGFuZ3VhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0U2VydmljZXModXJpKSB7XG4gICAgICAgIGlmICh0aGlzLnNpbmdsZXRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNlcnZpY2UgcmVnaXN0cnkgaXMgZW1wdHkuIFVzZSBgcmVnaXN0ZXJgIHRvIHJlZ2lzdGVyIHRoZSBzZXJ2aWNlcyBvZiBhIGxhbmd1YWdlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4dCA9IFVyaVV0aWxzLmV4dG5hbWUodXJpKTtcbiAgICAgICAgY29uc3Qgc2VydmljZXMgPSB0aGlzLm1hcFtleHRdO1xuICAgICAgICBpZiAoIXNlcnZpY2VzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbnRhaW5zIG5vIHNlcnZpY2VzIGZvciB0aGUgZXh0ZW5zaW9uICcke2V4dH0nLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcztcbiAgICB9XG4gICAgZ2V0IGFsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2luZ2xldG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5zaW5nbGV0b25dO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZpY2UtcmVnaXN0cnkuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBNdWx0aU1hcCB9IGZyb20gJy4uL3V0aWxzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uQ2FuY2VsbGVkIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuLyoqXG4gKiBDcmVhdGUgRGlhZ25vc3RpY0RhdGEgZm9yIGEgZ2l2ZW4gZGlhZ25vc3RpYyBjb2RlLiBUaGUgcmVzdWx0IGNhbiBiZSBwdXQgaW50byB0aGUgYGRhdGFgIGZpZWxkIG9mIGEgRGlhZ25vc3RpY0luZm8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWFnbm9zdGljRGF0YShjb2RlKSB7XG4gICAgcmV0dXJuIHsgY29kZSB9O1xufVxuZXhwb3J0IHZhciBWYWxpZGF0aW9uQ2F0ZWdvcnk7XG4oZnVuY3Rpb24gKFZhbGlkYXRpb25DYXRlZ29yeSkge1xuICAgIFZhbGlkYXRpb25DYXRlZ29yeS5hbGwgPSBbJ2Zhc3QnLCAnc2xvdycsICdidWlsdC1pbiddO1xufSkoVmFsaWRhdGlvbkNhdGVnb3J5IHx8IChWYWxpZGF0aW9uQ2F0ZWdvcnkgPSB7fSkpO1xuLyoqXG4gKiBNYW5hZ2VzIGEgc2V0IG9mIGBWYWxpZGF0aW9uQ2hlY2tgcyB0byBiZSBhcHBsaWVkIHdoZW4gZG9jdW1lbnRzIGFyZSB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IG5ldyBNdWx0aU1hcCgpO1xuICAgICAgICB0aGlzLnJlZmxlY3Rpb24gPSBzZXJ2aWNlcy5zaGFyZWQuQXN0UmVmbGVjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBzZXQgb2YgdmFsaWRhdGlvbiBjaGVja3MuIEVhY2ggdmFsdWUgaW4gdGhlIHJlY29yZCBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbGlkYXRpb24gY2hlY2sgKGkuZS4gYSBmdW5jdGlvbilcbiAgICAgKiBvciBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGVja3NSZWNvcmQgU2V0IG9mIHZhbGlkYXRpb24gY2hlY2tzIHRvIHJlZ2lzdGVyLlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSBPcHRpb25hbCBjYXRlZ29yeSBmb3IgdGhlIHZhbGlkYXRpb24gY2hlY2tzIChkZWZhdWx0cyB0byBgJ2Zhc3QnYCkuXG4gICAgICogQHBhcmFtIHRoaXNPYmogT3B0aW9uYWwgb2JqZWN0IHRvIGJlIHVzZWQgYXMgYHRoaXNgIHdoZW4gY2FsbGluZyB0aGUgdmFsaWRhdGlvbiBjaGVjayBmdW5jdGlvbnMuXG4gICAgICovXG4gICAgcmVnaXN0ZXIoY2hlY2tzUmVjb3JkLCB0aGlzT2JqID0gdGhpcywgY2F0ZWdvcnkgPSAnZmFzdCcpIHtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSAnYnVpbHQtaW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGNoXSBvZiBPYmplY3QuZW50cmllcyhjaGVja3NSZWNvcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja3MgPSBjaDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrcykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrOiB0aGlzLndyYXBWYWxpZGF0aW9uRXhjZXB0aW9uKGNoZWNrLCB0aGlzT2JqKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRW50cnkodHlwZSwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFja3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2s6IHRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24oY2FsbGJhY2tzLCB0aGlzT2JqKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW50cnkodHlwZSwgZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHdyYXBWYWxpZGF0aW9uRXhjZXB0aW9uKGNoZWNrLCB0aGlzT2JqKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAobm9kZSwgYWNjZXB0LCBjYW5jZWxUb2tlbikgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjaGVjay5jYWxsKHRoaXNPYmosIG5vZGUsIGFjY2VwdCwgY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChpc09wZXJhdGlvbkNhbmNlbGxlZChlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb246JywgZXJyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIuc3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NlcHQoJ2Vycm9yJywgJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB2YWxpZGF0aW9uOiAnICsgbWVzc2FnZSwgeyBub2RlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGRFbnRyeSh0eXBlLCBlbnRyeSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0FzdE5vZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuYWRkKCdBc3ROb2RlJywgZW50cnkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgc3VidHlwZSBvZiB0aGlzLnJlZmxlY3Rpb24uZ2V0QWxsU3ViVHlwZXModHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5hZGQoc3VidHlwZSwgZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENoZWNrcyh0eXBlLCBjYXRlZ29yaWVzKSB7XG4gICAgICAgIGxldCBjaGVja3MgPSBzdHJlYW0odGhpcy5lbnRyaWVzLmdldCh0eXBlKSlcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5lbnRyaWVzLmdldCgnQXN0Tm9kZScpKTtcbiAgICAgICAgaWYgKGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoZW50cnkgPT4gY2F0ZWdvcmllcy5pbmNsdWRlcyhlbnRyeS5jYXRlZ29yeSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGVja3MubWFwKGVudHJ5ID0+IGVudHJ5LmNoZWNrKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0aW9uLXJlZ2lzdHJ5LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgZmluZE5vZGVGb3JLZXl3b3JkLCBmaW5kTm9kZUZvclByb3BlcnR5IH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Bc3QgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgdG9rZW5Ub1JhbmdlIH0gZnJvbSAnLi4vdXRpbHMvY3N0LXV0aWxzLmpzJztcbmltcG9ydCB7IGludGVycnVwdEFuZENoZWNrLCBpc09wZXJhdGlvbkNhbmNlbGxlZCB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgZGlhZ25vc3RpY0RhdGEgfSBmcm9tICcuL3ZhbGlkYXRpb24tcmVnaXN0cnkuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHREb2N1bWVudFZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUmVnaXN0cnkgPSBzZXJ2aWNlcy52YWxpZGF0aW9uLlZhbGlkYXRpb25SZWdpc3RyeTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IHNlcnZpY2VzLkxhbmd1YWdlTWV0YURhdGE7XG4gICAgfVxuICAgIGFzeW5jIHZhbGlkYXRlRG9jdW1lbnQoZG9jdW1lbnQsIG9wdGlvbnMgPSB7fSwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gZG9jdW1lbnQucGFyc2VSZXN1bHQ7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNzID0gW107XG4gICAgICAgIGF3YWl0IGludGVycnVwdEFuZENoZWNrKGNhbmNlbFRva2VuKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNhdGVnb3JpZXMgfHwgb3B0aW9ucy5jYXRlZ29yaWVzLmluY2x1ZGVzKCdidWlsdC1pbicpKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0b3BBZnRlckxleGluZ0Vycm9ycyAmJiBkaWFnbm9zdGljcy5zb21lKGQgPT4geyB2YXIgX2E7IHJldHVybiAoKF9hID0gZC5kYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29kZSkgPT09IERvY3VtZW50VmFsaWRhdG9yLkxleGluZ0Vycm9yOyB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BhcnNpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMgJiYgZGlhZ25vc3RpY3Muc29tZShkID0+IHsgdmFyIF9hOyByZXR1cm4gKChfYSA9IGQuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvZGUpID09PSBEb2N1bWVudFZhbGlkYXRvci5QYXJzaW5nRXJyb3I7IH0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhkb2N1bWVudCwgZGlhZ25vc3RpY3MsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RvcEFmdGVyTGlua2luZ0Vycm9ycyAmJiBkaWFnbm9zdGljcy5zb21lKGQgPT4geyB2YXIgX2E7IHJldHVybiAoKF9hID0gZC5kYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29kZSkgPT09IERvY3VtZW50VmFsaWRhdG9yLkxpbmtpbmdFcnJvcjsgfSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJvY2VzcyBjdXN0b20gdmFsaWRhdGlvbnNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4uYXdhaXQgdGhpcy52YWxpZGF0ZUFzdChwYXJzZVJlc3VsdC52YWx1ZSwgb3B0aW9ucywgY2FuY2VsVG9rZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoaXNPcGVyYXRpb25DYW5jZWxsZWQoZXJyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB2YWxpZGF0aW9uOicsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfVxuICAgIHByb2Nlc3NMZXhpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBfb3B0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGxleGVyRXJyb3Igb2YgcGFyc2VSZXN1bHQubGV4ZXJFcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSB7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IHRvRGlhZ25vc3RpY1NldmVyaXR5KCdlcnJvcicpLFxuICAgICAgICAgICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsZXhlckVycm9yLmxpbmUgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBsZXhlckVycm9yLmNvbHVtbiAtIDFcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsZXhlckVycm9yLmxpbmUgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBsZXhlckVycm9yLmNvbHVtbiArIGxleGVyRXJyb3IubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBsZXhlckVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZGF0YTogZGlhZ25vc3RpY0RhdGEoRG9jdW1lbnRWYWxpZGF0b3IuTGV4aW5nRXJyb3IpLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goZGlhZ25vc3RpYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc1BhcnNpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBfb3B0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnNlckVycm9yIG9mIHBhcnNlUmVzdWx0LnBhcnNlckVycm9ycykge1xuICAgICAgICAgICAgbGV0IHJhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy8gV2UgY2FuIHJ1biBpbnRvIHRoZSBjaGV2cm90YWluIGVycm9yIHJlY292ZXJ5IGhlcmVcbiAgICAgICAgICAgIC8vIFRoZSB0b2tlbiBjb250YWluZWQgaW4gdGhlIHBhcnNlciBlcnJvciBtaWdodCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgZXZlcnkgcG9zaXRpb24gdmFsdWUgd2lsbCBiZSBgTmFOYFxuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlckVycm9yLnRva2VuLnN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY2lhbCBwYXJzZXIgZXJyb3IgdHlwZXMgY29udGFpbiBhIGBwcmV2aW91c1Rva2VuYFxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBzaW1wbHkgYXBwZW5kIG91ciBkaWFnbm9zdGljIHRvIHRoYXQgdG9rZW5cbiAgICAgICAgICAgICAgICBpZiAoJ3ByZXZpb3VzVG9rZW4nIGluIHBhcnNlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcGFyc2VyRXJyb3IucHJldmlvdXNUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTih0b2tlbi5zdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0geyBsaW5lOiB0b2tlbi5lbmRMaW5lIC0gMSwgY2hhcmFjdGVyOiB0b2tlbi5lbmRDb2x1bW4gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydDogcG9zaXRpb24sIGVuZDogcG9zaXRpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHZhbGlkIHByZXYgdG9rZW4uIE1pZ2h0IGJlIGVtcHR5IGRvY3VtZW50IG9yIGNvbnRhaW5pbmcgb25seSBoaWRkZW4gdG9rZW5zLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9pbnQgdG8gZG9jdW1lbnQgc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0geyBsaW5lOiAwLCBjaGFyYWN0ZXI6IDAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydDogcG9zaXRpb24sIGVuZDogcG9zaXRpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlID0gdG9rZW5Ub1JhbmdlKHBhcnNlckVycm9yLnRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiB0b0RpYWdub3N0aWNTZXZlcml0eSgnZXJyb3InKSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHBhcnNlckVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRpYWdub3N0aWNEYXRhKERvY3VtZW50VmFsaWRhdG9yLlBhcnNpbmdFcnJvciksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlhZ25vc3RpY3MucHVzaChkaWFnbm9zdGljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzTGlua2luZ0Vycm9ycyhkb2N1bWVudCwgZGlhZ25vc3RpY3MsIF9vcHRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGRvY3VtZW50LnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtpbmdFcnJvciA9IHJlZmVyZW5jZS5lcnJvcjtcbiAgICAgICAgICAgIGlmIChsaW5raW5nRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBsaW5raW5nRXJyb3IuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbGlua2luZ0Vycm9yLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogbGlua2luZ0Vycm9yLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBEb2N1bWVudFZhbGlkYXRvci5MaW5raW5nRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJUeXBlOiBsaW5raW5nRXJyb3IuY29udGFpbmVyLiR0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGxpbmtpbmdFcnJvci5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlRleHQ6IGxpbmtpbmdFcnJvci5yZWZlcmVuY2UuJHJlZlRleHRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh0aGlzLnRvRGlhZ25vc3RpYygnZXJyb3InLCBsaW5raW5nRXJyb3IubWVzc2FnZSwgaW5mbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHZhbGlkYXRlQXN0KHJvb3ROb2RlLCBvcHRpb25zLCBjYW5jZWxUb2tlbiA9IENhbmNlbGxhdGlvblRva2VuLk5vbmUpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbkl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yID0gKHNldmVyaXR5LCBtZXNzYWdlLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uSXRlbXMucHVzaCh0aGlzLnRvRGlhZ25vc3RpYyhzZXZlcml0eSwgbWVzc2FnZSwgaW5mbykpO1xuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzdHJlYW1Bc3Qocm9vdE5vZGUpLm1hcChhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tzID0gdGhpcy52YWxpZGF0aW9uUmVnaXN0cnkuZ2V0Q2hlY2tzKG5vZGUuJHR5cGUsIG9wdGlvbnMuY2F0ZWdvcmllcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNoZWNrKG5vZGUsIGFjY2VwdG9yLCBjYW5jZWxUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25JdGVtcztcbiAgICB9XG4gICAgdG9EaWFnbm9zdGljKHNldmVyaXR5LCBtZXNzYWdlLCBpbmZvKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgcmFuZ2U6IGdldERpYWdub3N0aWNSYW5nZShpbmZvKSxcbiAgICAgICAgICAgIHNldmVyaXR5OiB0b0RpYWdub3N0aWNTZXZlcml0eShzZXZlcml0eSksXG4gICAgICAgICAgICBjb2RlOiBpbmZvLmNvZGUsXG4gICAgICAgICAgICBjb2RlRGVzY3JpcHRpb246IGluZm8uY29kZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdGFnczogaW5mby50YWdzLFxuICAgICAgICAgICAgcmVsYXRlZEluZm9ybWF0aW9uOiBpbmZvLnJlbGF0ZWRJbmZvcm1hdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGluZm8uZGF0YSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5nZXRTb3VyY2UoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmxhbmd1YWdlSWQ7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERpYWdub3N0aWNSYW5nZShpbmZvKSB7XG4gICAgaWYgKGluZm8ucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGluZm8ucmFuZ2U7XG4gICAgfVxuICAgIGxldCBjc3ROb2RlO1xuICAgIGlmICh0eXBlb2YgaW5mby5wcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY3N0Tm9kZSA9IGZpbmROb2RlRm9yUHJvcGVydHkoaW5mby5ub2RlLiRjc3ROb2RlLCBpbmZvLnByb3BlcnR5LCBpbmZvLmluZGV4KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGluZm8ua2V5d29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY3N0Tm9kZSA9IGZpbmROb2RlRm9yS2V5d29yZChpbmZvLm5vZGUuJGNzdE5vZGUsIGluZm8ua2V5d29yZCwgaW5mby5pbmRleCk7XG4gICAgfVxuICAgIGNzdE5vZGUgIT09IG51bGwgJiYgY3N0Tm9kZSAhPT0gdm9pZCAwID8gY3N0Tm9kZSA6IChjc3ROb2RlID0gaW5mby5ub2RlLiRjc3ROb2RlKTtcbiAgICBpZiAoIWNzdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiB7IGxpbmU6IDAsIGNoYXJhY3RlcjogMCB9LFxuICAgICAgICAgICAgZW5kOiB7IGxpbmU6IDAsIGNoYXJhY3RlcjogMCB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjc3ROb2RlLnJhbmdlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvRGlhZ25vc3RpY1NldmVyaXR5KHNldmVyaXR5KSB7XG4gICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICByZXR1cm4gMTsgLy8gYWNjb3JkaW5nIHRvIHZzY29kZS1sYW5ndWFnZXNlcnZlci10eXBlcy9saWIvZXNtL21haW4uanMjRGlhZ25vc3RpY1NldmVyaXR5LkVycm9yXG4gICAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICAgICAgcmV0dXJuIDI7IC8vIGFjY29yZGluZyB0byB2c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMvbGliL2VzbS9tYWluLmpzI0RpYWdub3N0aWNTZXZlcml0eS5XYXJuaW5nXG4gICAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICAgICAgcmV0dXJuIDM7IC8vIGFjY29yZGluZyB0byB2c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMvbGliL2VzbS9tYWluLmpzI0RpYWdub3N0aWNTZXZlcml0eS5JbmZvcm1hdGlvblxuICAgICAgICBjYXNlICdoaW50JzpcbiAgICAgICAgICAgIHJldHVybiA0OyAvLyBhY2NvcmRpbmcgdG8gdnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzL2xpYi9lc20vbWFpbi5qcyNEaWFnbm9zdGljU2V2ZXJpdHkuSGludFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICcgKyBzZXZlcml0eSk7XG4gICAgfVxufVxuZXhwb3J0IHZhciBEb2N1bWVudFZhbGlkYXRvcjtcbihmdW5jdGlvbiAoRG9jdW1lbnRWYWxpZGF0b3IpIHtcbiAgICBEb2N1bWVudFZhbGlkYXRvci5MZXhpbmdFcnJvciA9ICdsZXhpbmctZXJyb3InO1xuICAgIERvY3VtZW50VmFsaWRhdG9yLlBhcnNpbmdFcnJvciA9ICdwYXJzaW5nLWVycm9yJztcbiAgICBEb2N1bWVudFZhbGlkYXRvci5MaW5raW5nRXJyb3IgPSAnbGlua2luZy1lcnJvcic7XG59KShEb2N1bWVudFZhbGlkYXRvciB8fCAoRG9jdW1lbnRWYWxpZGF0b3IgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG9jdW1lbnQtdmFsaWRhdG9yLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgaXNMaW5raW5nRXJyb3IgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBnZXREb2N1bWVudCwgc3RyZWFtQXN0LCBzdHJlYW1SZWZlcmVuY2VzIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHRvRG9jdW1lbnRTZWdtZW50IH0gZnJvbSAnLi4vdXRpbHMvY3N0LXV0aWxzLmpzJztcbmltcG9ydCB7IGludGVycnVwdEFuZENoZWNrIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBVcmlVdGlscyB9IGZyb20gJy4uL3V0aWxzL3VyaS11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlcykge1xuICAgICAgICB0aGlzLmFzdE5vZGVMb2NhdG9yID0gc2VydmljZXMud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yO1xuICAgICAgICB0aGlzLm5hbWVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyO1xuICAgIH1cbiAgICBjcmVhdGVEZXNjcmlwdGlvbihub2RlLCBuYW1lLCBkb2N1bWVudCA9IGdldERvY3VtZW50KG5vZGUpKSB7XG4gICAgICAgIG5hbWUgIT09IG51bGwgJiYgbmFtZSAhPT0gdm9pZCAwID8gbmFtZSA6IChuYW1lID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShub2RlKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKG5vZGUpO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBhdCBwYXRoICR7cGF0aH0gaGFzIG5vIG5hbWUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5hbWVOb2RlU2VnbWVudDtcbiAgICAgICAgY29uc3QgbmFtZVNlZ21lbnRHZXR0ZXIgPSAoKSA9PiB7IHZhciBfYTsgcmV0dXJuIG5hbWVOb2RlU2VnbWVudCAhPT0gbnVsbCAmJiBuYW1lTm9kZVNlZ21lbnQgIT09IHZvaWQgMCA/IG5hbWVOb2RlU2VnbWVudCA6IChuYW1lTm9kZVNlZ21lbnQgPSB0b0RvY3VtZW50U2VnbWVudCgoX2EgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShub2RlKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbm9kZS4kY3N0Tm9kZSkpOyB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBnZXQgbmFtZVNlZ21lbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVTZWdtZW50R2V0dGVyKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VnbWVudDogdG9Eb2N1bWVudFNlZ21lbnQobm9kZS4kY3N0Tm9kZSksXG4gICAgICAgICAgICB0eXBlOiBub2RlLiR0eXBlLFxuICAgICAgICAgICAgZG9jdW1lbnRVcmk6IGRvY3VtZW50LnVyaSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMubm9kZUxvY2F0b3IgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3I7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZURlc2NyaXB0aW9ucyhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyID0gW107XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWU7XG4gICAgICAgIGZvciAoY29uc3QgYXN0Tm9kZSBvZiBzdHJlYW1Bc3Qocm9vdE5vZGUpKSB7XG4gICAgICAgICAgICBhd2FpdCBpbnRlcnJ1cHRBbmRDaGVjayhjYW5jZWxUb2tlbik7XG4gICAgICAgICAgICBzdHJlYW1SZWZlcmVuY2VzKGFzdE5vZGUpLmZpbHRlcihyZWZJbmZvID0+ICFpc0xpbmtpbmdFcnJvcihyZWZJbmZvKSkuZm9yRWFjaChyZWZJbmZvID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBsb2dnaW5nIGEgd2FybmluZyBvciB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBEb2N1bWVudFN0YXRlIGlzIDwgdGhhbiBMaW5rZWRcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuY3JlYXRlRGVzY3JpcHRpb24ocmVmSW5mbyk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcjtcbiAgICB9XG4gICAgY3JlYXRlRGVzY3JpcHRpb24ocmVmSW5mbykge1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlRGVzY3IgPSByZWZJbmZvLnJlZmVyZW5jZS4kbm9kZURlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCByZWZDc3ROb2RlID0gcmVmSW5mby5yZWZlcmVuY2UuJHJlZk5vZGU7XG4gICAgICAgIGlmICghdGFyZ2V0Tm9kZURlc2NyIHx8ICFyZWZDc3ROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY1VyaSA9IGdldERvY3VtZW50KHJlZkluZm8uY29udGFpbmVyKS51cmk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VVcmk6IGRvY1VyaSxcbiAgICAgICAgICAgIHNvdXJjZVBhdGg6IHRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocmVmSW5mby5jb250YWluZXIpLFxuICAgICAgICAgICAgdGFyZ2V0VXJpOiB0YXJnZXROb2RlRGVzY3IuZG9jdW1lbnRVcmksXG4gICAgICAgICAgICB0YXJnZXRQYXRoOiB0YXJnZXROb2RlRGVzY3IucGF0aCxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHRvRG9jdW1lbnRTZWdtZW50KHJlZkNzdE5vZGUpLFxuICAgICAgICAgICAgbG9jYWw6IFVyaVV0aWxzLmVxdWFscyh0YXJnZXROb2RlRGVzY3IuZG9jdW1lbnRVcmksIGRvY1VyaSlcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3QtZGVzY3JpcHRpb25zLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRBc3ROb2RlTG9jYXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2VnbWVudFNlcGFyYXRvciA9ICcvJztcbiAgICAgICAgdGhpcy5pbmRleFNlcGFyYXRvciA9ICdAJztcbiAgICB9XG4gICAgZ2V0QXN0Tm9kZVBhdGgobm9kZSkge1xuICAgICAgICBpZiAobm9kZS4kY29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJQYXRoID0gdGhpcy5nZXRBc3ROb2RlUGF0aChub2RlLiRjb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3QgbmV3U2VnbWVudCA9IHRoaXMuZ2V0UGF0aFNlZ21lbnQobm9kZSk7XG4gICAgICAgICAgICBjb25zdCBub2RlUGF0aCA9IGNvbnRhaW5lclBhdGggKyB0aGlzLnNlZ21lbnRTZXBhcmF0b3IgKyBuZXdTZWdtZW50O1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZ2V0UGF0aFNlZ21lbnQoeyAkY29udGFpbmVyUHJvcGVydHksICRjb250YWluZXJJbmRleCB9KSB7XG4gICAgICAgIGlmICghJGNvbnRhaW5lclByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICckY29udGFpbmVyUHJvcGVydHknIGluIEFTVCBub2RlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNvbnRhaW5lckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAkY29udGFpbmVyUHJvcGVydHkgKyB0aGlzLmluZGV4U2VwYXJhdG9yICsgJGNvbnRhaW5lckluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkY29udGFpbmVyUHJvcGVydHk7XG4gICAgfVxuICAgIGdldEFzdE5vZGUobm9kZSwgcGF0aCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQodGhpcy5zZWdtZW50U2VwYXJhdG9yKTtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzVmFsdWUgfHwgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlJbmRleCA9IGN1cnJlbnRWYWx1ZS5pbmRleE9mKHRoaXMuaW5kZXhTZXBhcmF0b3IpO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjdXJyZW50VmFsdWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5SW5kZXggPSBwYXJzZUludChjdXJyZW50VmFsdWUuc3Vic3RyaW5nKHByb3BlcnR5SW5kZXggKyAxKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBwcmV2aW91c1ZhbHVlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkgPT09IG51bGwgfHwgYXJyYXkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFycmF5W2FycmF5SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWVbY3VycmVudFZhbHVlXTtcbiAgICAgICAgfSwgbm9kZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LW5vZGUtbG9jYXRvci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG4vKipcbiAqIEJhc2UgY29uZmlndXJhdGlvbiBwcm92aWRlciBmb3IgYnVpbGRpbmcgdXAgb3RoZXIgY29uZmlndXJhdGlvbiBwcm92aWRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRDb25maWd1cmF0aW9uUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy53b3Jrc3BhY2VDb25maWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlUmVnaXN0cnkgPSBzZXJ2aWNlcy5TZXJ2aWNlUmVnaXN0cnk7XG4gICAgfVxuICAgIGdldCByZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2U7XG4gICAgfVxuICAgIGluaXRpYWxpemUocGFyYW1zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMud29ya3NwYWNlQ29uZmlnID0gKF9iID0gKF9hID0gcGFyYW1zLmNhcGFiaWxpdGllcy53b3Jrc3BhY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25maWd1cmF0aW9uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbiAgICB9XG4gICAgYXN5bmMgaW5pdGlhbGl6ZWQocGFyYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtzcGFjZUNvbmZpZykge1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5yZWdpc3Rlcikge1xuICAgICAgICAgICAgICAgIC8vIHBhcmFtcy5yZWdpc3RlciguLi4pIGlzIGEgZnVuY3Rpb24gdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxpbmcgbGFuZ3VhZ2Ugc2VydmVyIGZvciB0aGUgc2FrZSBvZlxuICAgICAgICAgICAgICAgIC8vICBkZWNvdXBsaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgY29uY3JldGUgTFNQIGltcGxlbWVudGF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBMU1AgQ29ubmVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbDtcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVnaXN0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGxhbmd1YWdlcy5tYXAobGFuZyA9PiB0aGlzLnRvU2VjdGlvbk5hbWUobGFuZy5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5mZXRjaENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBwYXJhbXMuZmV0Y2hDb25maWd1cmF0aW9uKC4uLikgaXMgYSBmdW5jdGlvbiB0byBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGluZyBsYW5ndWFnZSBzZXJ2ZXIgZm9yIHRoZSBzYWtlIG9mXG4gICAgICAgICAgICAgICAgLy8gIGRlY291cGxpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBjb25jcmV0ZSBMU1AgaW1wbGVtZW50YXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIExTUCBDb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnVG9VcGRhdGUgPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGxhbmcgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgYWxsIGxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnRvU2VjdGlvbk5hbWUobGFuZy5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIC8vIGdldCB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbnMgKGRlZmF1bHQgc2NvcGUgVVJJKVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBwYXJhbXMuZmV0Y2hDb25maWd1cmF0aW9uKGNvbmZpZ1RvVXBkYXRlKTtcbiAgICAgICAgICAgICAgICBjb25maWdUb1VwZGF0ZS5mb3JFYWNoKChjb25mLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihjb25mLnNlY3Rpb24sIGNvbmZpZ3NbaWR4XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVhZHkucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiAgVXBkYXRlcyB0aGUgY2FjaGVkIGNvbmZpZ3VyYXRpb25zIHVzaW5nIHRoZSBgY2hhbmdlYCBub3RpZmljYXRpb24gcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFuZ2UgVGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFuZ2UgY29uZmlndXJhdGlvbiBub3RpZmljYXRpb24uXG4gICAgICogYHNldHRpbmdzYCBwcm9wZXJ0eSBvZiB0aGUgY2hhbmdlIG9iamVjdCBjb3VsZCBiZSBleHByZXNzZWQgYXMgYFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+YFxuICAgICAqL1xuICAgIHVwZGF0ZUNvbmZpZ3VyYXRpb24oY2hhbmdlKSB7XG4gICAgICAgIGlmICghY2hhbmdlLnNldHRpbmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlLnNldHRpbmdzKS5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihzZWN0aW9uLCBjaGFuZ2Uuc2V0dGluZ3Nbc2VjdGlvbl0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXBkYXRlU2VjdGlvbkNvbmZpZ3VyYXRpb24oc2VjdGlvbiwgY29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLnNldHRpbmdzW3NlY3Rpb25dID0gY29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIGEgY29uZmlndXJhdGlvbiB2YWx1ZSBzdG9yZWQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS5cbiAgICAqXG4gICAgKiBAcGFyYW0gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIGlkXG4gICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uIG5hbWVcbiAgICAqL1xuICAgIGFzeW5jIGdldENvbmZpZ3VyYXRpb24obGFuZ3VhZ2UsIGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWFkeTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLnRvU2VjdGlvbk5hbWUobGFuZ3VhZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc1tzZWN0aW9uTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzW3NlY3Rpb25OYW1lXVtjb25maWd1cmF0aW9uXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b1NlY3Rpb25OYW1lKGxhbmd1YWdlSWQpIHtcbiAgICAgICAgcmV0dXJuIGAke2xhbmd1YWdlSWR9YDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHZhciBEaXNwb3NhYmxlO1xuKGZ1bmN0aW9uIChEaXNwb3NhYmxlKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXNwb3NlOiBhc3luYyAoKSA9PiBhd2FpdCBjYWxsYmFjaygpXG4gICAgICAgIH07XG4gICAgfVxuICAgIERpc3Bvc2FibGUuY3JlYXRlID0gY3JlYXRlO1xufSkoRGlzcG9zYWJsZSB8fCAoRGlzcG9zYWJsZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXNwb3NhYmxlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgRGlzcG9zYWJsZSB9IGZyb20gJy4uL3V0aWxzL2Rpc3Bvc2FibGUuanMnO1xuaW1wb3J0IHsgTXVsdGlNYXAgfSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25DYW5jZWxsZWQsIGludGVycnVwdEFuZENoZWNrIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkNhdGVnb3J5IH0gZnJvbSAnLi4vdmFsaWRhdGlvbi92YWxpZGF0aW9uLXJlZ2lzdHJ5LmpzJztcbmltcG9ydCB7IERvY3VtZW50U3RhdGUgfSBmcm9tICcuL2RvY3VtZW50cy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdERvY3VtZW50QnVpbGRlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVCdWlsZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBydW4gb25seSB0aGUgYnVpbHQtaW4gdmFsaWRhdGlvbiBjaGVja3MgYW5kIHRob3NlIGluIHRoZSBfZmFzdF8gY2F0ZWdvcnkgKGluY2x1ZGVzIHRob3NlIHdpdGhvdXQgY2F0ZWdvcnkpXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllczogWydidWlsdC1pbicsICdmYXN0J11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzID0gbmV3IE11bHRpTWFwKCk7XG4gICAgICAgIHRoaXMuYnVpbGRTdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEJ1aWxkV2FpdGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBEb2N1bWVudFN0YXRlLkNoYW5nZWQ7XG4gICAgICAgIHRoaXMubGFuZ2l1bURvY3VtZW50cyA9IHNlcnZpY2VzLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzO1xuICAgICAgICB0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50RmFjdG9yeTtcbiAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyO1xuICAgICAgICB0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IHNlcnZpY2VzLlNlcnZpY2VSZWdpc3RyeTtcbiAgICB9XG4gICAgYXN5bmMgYnVpbGQoZG9jdW1lbnRzLCBvcHRpb25zID0ge30sIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvY3VtZW50cykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZG9jdW1lbnQudXJpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuc3RhdGUgPT09IERvY3VtZW50U3RhdGUuVmFsaWRhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRpb24gPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgcmUtcnVubmluZyBhbGwgdmFsaWRhdGlvbiBjaGVja3NcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuc3RhdGUgPSBEb2N1bWVudFN0YXRlLkluZGV4ZWRSZWZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kaWFnbm9zdGljcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZFN0YXRlID0gdGhpcy5idWlsZFN0YXRlLmdldChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0NhdGVnb3JpZXMgPSAoX2EgPSBidWlsZFN0YXRlID09PSBudWxsIHx8IGJ1aWxkU3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1aWxkU3RhdGUucmVzdWx0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsaWRhdGlvbkNoZWNrcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiB3aXRoIGV4cGxpY2l0IG9wdGlvbnMgd2FzIHJlcXVlc3RlZCBmb3IgYSBkb2N1bWVudCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcGFydGx5IHZhbGlkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBtZXJnZSB0aGUgcHJldmlvdXMgdmFsaWRhdGlvbiBjYXRlZ29yaWVzIHdpdGggdGhlIG5ldyBvbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcmllcyA9IChfYiA9IG9wdGlvbnMudmFsaWRhdGlvbi5jYXRlZ29yaWVzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBWYWxpZGF0aW9uQ2F0ZWdvcnkuYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IG5ld0NhdGVnb3JpZXMuZmlsdGVyKGMgPT4gIXByZXZpb3VzQ2F0ZWdvcmllcy5pbmNsdWRlcyhjKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFN0YXRlLnNldChrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnZhbGlkYXRpb24pLCB7IGNhdGVnb3JpZXMgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBidWlsZFN0YXRlLnJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0YXRlID0gRG9jdW1lbnRTdGF0ZS5JbmRleGVkUmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQ6IGZvcmdldCBhbnkgcHJldmlvdXMgYnVpbGQgb3B0aW9uc1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IERvY3VtZW50U3RhdGUuQ2hhbmdlZDtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGRvY3VtZW50cy5tYXAoZSA9PiBlLnVyaSksIFtdKTtcbiAgICAgICAgYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhkb2N1bWVudHMsIG9wdGlvbnMsIGNhbmNlbFRva2VuKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlKGNoYW5nZWQsIGRlbGV0ZWQsIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IERvY3VtZW50U3RhdGUuQ2hhbmdlZDtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBtZXRhZGF0YSBvZiBkb2N1bWVudHMgdGhhdCBhcmUgcmVwb3J0ZWQgYXMgZGVsZXRlZFxuICAgICAgICBmb3IgKGNvbnN0IGRlbGV0ZWRVcmkgb2YgZGVsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KGRlbGV0ZWRVcmkpO1xuICAgICAgICAgICAgdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShkZWxldGVkVXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIucmVtb3ZlKGRlbGV0ZWRVcmkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgc3RhdGUgb2YgYWxsIGNoYW5nZWQgZG9jdW1lbnRzIHRvIGBDaGFuZ2VkYCBzbyB0aGV5IGFyZSBjb21wbGV0ZWx5IHJlYnVpbHRcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVXJpIG9mIGNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRhdGVkID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmludmFsaWRhdGVEb2N1bWVudChjaGFuZ2VkVXJpKTtcbiAgICAgICAgICAgIGlmICghaW52YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYW4gdW5wYXJzZWQsIGludmFsaWQgZG9jdW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHBhcnNlZCBhcyBzb29uIGFzIHdlIHJlYWNoIHRoZSBmaXJzdCBkb2N1bWVudCBidWlsZGVyIHBoYXNlLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHRvIGNhbmNlbCB0aGUgcGFyc2luZyBwcm9jZXNzIGxhdGVyIGluIGNhc2Ugd2UgbmVlZCBpdC5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEb2N1bWVudCA9IHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tTW9kZWwoeyAkdHlwZTogJ0lOVkFMSUQnIH0sIGNoYW5nZWRVcmkpO1xuICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LnN0YXRlID0gRG9jdW1lbnRTdGF0ZS5DaGFuZ2VkO1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChuZXdEb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGNoYW5nZWRVcmkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBzdGF0ZSBvZiBhbGwgZG9jdW1lbnRzIHRoYXQgc2hvdWxkIGJlIHJlbGlua2VkIHRvIGBDb21wdXRlZFNjb3Blc2AgKGlmIG5vdCBhbHJlYWR5IGxvd2VyKVxuICAgICAgICBjb25zdCBhbGxDaGFuZ2VkVXJpcyA9IHN0cmVhbShjaGFuZ2VkKS5jb25jYXQoZGVsZXRlZCkubWFwKHVyaSA9PiB1cmkudG9TdHJpbmcoKSkudG9TZXQoKTtcbiAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbFxuICAgICAgICAgICAgLmZpbHRlcihkb2MgPT4gIWFsbENoYW5nZWRVcmlzLmhhcyhkb2MudXJpLnRvU3RyaW5nKCkpICYmIHRoaXMuc2hvdWxkUmVsaW5rKGRvYywgYWxsQ2hhbmdlZFVyaXMpKVxuICAgICAgICAgICAgLmZvckVhY2goZG9jID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlciA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGRvYy51cmkpLnJlZmVyZW5jZXMuTGlua2VyO1xuICAgICAgICAgICAgbGlua2VyLnVubGluayhkb2MpO1xuICAgICAgICAgICAgZG9jLnN0YXRlID0gTWF0aC5taW4oZG9jLnN0YXRlLCBEb2N1bWVudFN0YXRlLkNvbXB1dGVkU2NvcGVzKTtcbiAgICAgICAgICAgIGRvYy5kaWFnbm9zdGljcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgb2YgdGhlIHVwZGF0ZVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRVcGRhdGUoY2hhbmdlZCwgZGVsZXRlZCk7XG4gICAgICAgIC8vIE9ubHkgYWxsb3cgaW50ZXJydXB0aW5nIHRoZSBleGVjdXRpb24gYWZ0ZXIgYWxsIHN0YXRlIGNoYW5nZXMgYXJlIGRvbmVcbiAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAvLyBDb2xsZWN0IGFsbCBkb2N1bWVudHMgdGhhdCB3ZSBzaG91bGQgcmVidWlsZFxuICAgICAgICBjb25zdCByZWJ1aWxkRG9jdW1lbnRzID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbFxuICAgICAgICAgICAgLmZpbHRlcihkb2MgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aG9zZSB0aGF0IHdlcmUgcmVwb3J0ZWQgYXMgY2hhbmdlZCBhbmQgdGhvc2UgdGhhdCB3ZSBzZWxlY3RlZCBmb3IgcmVsaW5raW5nXG4gICAgICAgICAgICByZXR1cm4gZG9jLnN0YXRlIDwgRG9jdW1lbnRTdGF0ZS5MaW5rZWRcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIHRob3NlIGZvciB3aGljaCBhIHByZXZpb3VzIGJ1aWxkIGhhcyBiZWVuIGNhbmNlbGxlZFxuICAgICAgICAgICAgICAgIHx8ICEoKF9hID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2MudXJpLnRvU3RyaW5nKCkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGVkKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50b0FycmF5KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYnVpbGREb2N1bWVudHMocmVidWlsZERvY3VtZW50cywgdGhpcy51cGRhdGVCdWlsZE9wdGlvbnMsIGNhbmNlbFRva2VuKTtcbiAgICB9XG4gICAgYXN5bmMgZW1pdFVwZGF0ZShjaGFuZ2VkLCBkZWxldGVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMudXBkYXRlTGlzdGVuZXJzLm1hcChsaXN0ZW5lciA9PiBsaXN0ZW5lcihjaGFuZ2VkLCBkZWxldGVkKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBkb2N1bWVudCBzaG91bGQgYmUgcmVsaW5rZWQgYWZ0ZXIgY2hhbmdlcyB3ZXJlIGZvdW5kIGluIHRoZSBnaXZlbiBVUklzLlxuICAgICAqL1xuICAgIHNob3VsZFJlbGluayhkb2N1bWVudCwgY2hhbmdlZFVyaXMpIHtcbiAgICAgICAgLy8gUmVsaW5rIGRvY3VtZW50cyB3aXRoIGxpbmtpbmcgZXJyb3JzIC0tIG1heWJlIHRob3NlIHJlZmVyZW5jZXMgY2FuIGJlIHJlc29sdmVkIG5vd1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVmZXJlbmNlcy5zb21lKHJlZiA9PiByZWYuZXJyb3IgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRvY3VtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBvZiB0aGUgY2hhbmdlZCBVUklzXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4TWFuYWdlci5pc0FmZmVjdGVkKGRvY3VtZW50LCBjaGFuZ2VkVXJpcyk7XG4gICAgfVxuICAgIG9uVXBkYXRlKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gRGlzcG9zYWJsZS5jcmVhdGUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnVwZGF0ZUxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBnaXZlbiBkb2N1bWVudHMgYnkgc3RlcHBpbmcgdGhyb3VnaCBhbGwgYnVpbGQgcGhhc2VzLiBJZiBhIGRvY3VtZW50J3Mgc3RhdGUgaW5kaWNhdGVzXG4gICAgICogdGhhdCBhIGNlcnRhaW4gYnVpbGQgcGhhc2UgaXMgYWxyZWFkeSBkb25lLCB0aGUgcGhhc2UgaXMgc2tpcHBlZCBmb3IgdGhhdCBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBhc3luYyBidWlsZERvY3VtZW50cyhkb2N1bWVudHMsIG9wdGlvbnMsIGNhbmNlbFRva2VuKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZUJ1aWxkKGRvY3VtZW50cywgb3B0aW9ucyk7XG4gICAgICAgIC8vIDAuIFBhcnNlIGNvbnRlbnRcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5QYXJzZWQsIGNhbmNlbFRva2VuLCBkb2MgPT4gdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LnVwZGF0ZShkb2MsIGNhbmNlbFRva2VuKSk7XG4gICAgICAgIC8vIDEuIEluZGV4IGNvbnRlbnRcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5JbmRleGVkQ29udGVudCwgY2FuY2VsVG9rZW4sIGRvYyA9PiB0aGlzLmluZGV4TWFuYWdlci51cGRhdGVDb250ZW50KGRvYywgY2FuY2VsVG9rZW4pKTtcbiAgICAgICAgLy8gMi4gQ29tcHV0ZSBzY29wZXNcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5Db21wdXRlZFNjb3BlcywgY2FuY2VsVG9rZW4sIGFzeW5jIChkb2MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlQ29tcHV0YXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhkb2MudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb247XG4gICAgICAgICAgICBkb2MucHJlY29tcHV0ZWRTY29wZXMgPSBhd2FpdCBzY29wZUNvbXB1dGF0aW9uLmNvbXB1dGVMb2NhbFNjb3Blcyhkb2MsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDMuIExpbmtpbmdcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5MaW5rZWQsIGNhbmNlbFRva2VuLCBkb2MgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua2VyID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZG9jLnVyaSkucmVmZXJlbmNlcy5MaW5rZXI7XG4gICAgICAgICAgICByZXR1cm4gbGlua2VyLmxpbmsoZG9jLCBjYW5jZWxUb2tlbik7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBJbmRleCByZWZlcmVuY2VzXG4gICAgICAgIGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShkb2N1bWVudHMsIERvY3VtZW50U3RhdGUuSW5kZXhlZFJlZmVyZW5jZXMsIGNhbmNlbFRva2VuLCBkb2MgPT4gdGhpcy5pbmRleE1hbmFnZXIudXBkYXRlUmVmZXJlbmNlcyhkb2MsIGNhbmNlbFRva2VuKSk7XG4gICAgICAgIC8vIDUuIFZhbGlkYXRpb25cbiAgICAgICAgY29uc3QgdG9CZVZhbGlkYXRlZCA9IGRvY3VtZW50cy5maWx0ZXIoZG9jID0+IHRoaXMuc2hvdWxkVmFsaWRhdGUoZG9jKSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZSh0b0JlVmFsaWRhdGVkLCBEb2N1bWVudFN0YXRlLlZhbGlkYXRlZCwgY2FuY2VsVG9rZW4sIGRvYyA9PiB0aGlzLnZhbGlkYXRlKGRvYywgY2FuY2VsVG9rZW4pKTtcbiAgICAgICAgLy8gSWYgd2UndmUgbWFkZSBpdCB0byB0aGlzIHBvaW50IHdpdGhvdXQgYmVpbmcgY2FuY2VsbGVkLCB3ZSBjYW4gbWFyayB0aGUgYnVpbGQgc3RhdGUgYXMgY29tcGxldGVkLlxuICAgICAgICBmb3IgKGNvbnN0IGRvYyBvZiBkb2N1bWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2MudXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlQnVpbGQoZG9jdW1lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZG9jIG9mIGRvY3VtZW50cykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZG9jLnVyaS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmJ1aWxkU3RhdGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaGFzIG5vIHByZXZpb3VzIGJ1aWxkIHN0YXRlLCB3ZSBzZXQgaXQuIElmIGl0IGhhcyBvbmUsIGJ1dCBpdCdzIGFscmVhZHkgbWFya2VkXG4gICAgICAgICAgICAvLyBhcyBjb21wbGV0ZWQsIHdlIG92ZXJ3cml0ZSBpdC4gSWYgdGhlIHByZXZpb3VzIGJ1aWxkIHdhcyBub3QgY29tcGxldGVkLCB3ZSBrZWVwIGl0cyBzdGF0ZVxuICAgICAgICAgICAgLy8gYW5kIGNvbnRpbnVlIHdoZXJlIGl0IHdhcyBjYW5jZWxsZWQuXG4gICAgICAgICAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRTdGF0ZS5zZXQoa2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLnJlc3VsdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJ1bkNhbmNlbGFibGUoZG9jdW1lbnRzLCB0YXJnZXRTdGF0ZSwgY2FuY2VsVG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gZG9jdW1lbnRzLmZpbHRlcihlID0+IGUuc3RhdGUgPCB0YXJnZXRTdGF0ZSk7XG4gICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZmlsdGVyZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGludGVycnVwdEFuZENoZWNrKGNhbmNlbFRva2VuKTtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGRvY3VtZW50KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlCdWlsZFBoYXNlKGZpbHRlcmVkLCB0YXJnZXRTdGF0ZSwgY2FuY2VsVG9rZW4pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgIH1cbiAgICBvbkJ1aWxkUGhhc2UodGFyZ2V0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5hZGQodGFyZ2V0U3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIERpc3Bvc2FibGUuY3JlYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5kZWxldGUodGFyZ2V0U3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhaXRVbnRpbChzdGF0ZSwgdXJpT3JUb2tlbiwgY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgbGV0IHVyaSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHVyaU9yVG9rZW4gJiYgJ3BhdGgnIGluIHVyaU9yVG9rZW4pIHtcbiAgICAgICAgICAgIHVyaSA9IHVyaU9yVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYW5jZWxUb2tlbiA9IHVyaU9yVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsVG9rZW4gIT09IG51bGwgJiYgY2FuY2VsVG9rZW4gIT09IHZvaWQgMCA/IGNhbmNlbFRva2VuIDogKGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSk7XG4gICAgICAgIGlmICh1cmkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHVyaSk7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuc3RhdGUgPiBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGUgPj0gc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYW5jZWxUb2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KE9wZXJhdGlvbkNhbmNlbGxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkRGlzcG9zYWJsZSA9IHRoaXMub25CdWlsZFBoYXNlKHN0YXRlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnVpbGREaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxEaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodXJpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHVyaSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZG9jdW1lbnQgPT09IG51bGwgfHwgZG9jdW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRvY3VtZW50LnVyaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxEaXNwb3NhYmxlID0gY2FuY2VsVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkRGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgY2FuY2VsRGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KE9wZXJhdGlvbkNhbmNlbGxlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIG5vdGlmeUJ1aWxkUGhhc2UoZG9jdW1lbnRzLCBzdGF0ZSwgY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIERvbid0IG5vdGlmeSB3aGVuIG5vIGRvY3VtZW50IGhhcyBiZWVuIHByb2Nlc3NlZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5nZXQoc3RhdGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIoZG9jdW1lbnRzLCBjYW5jZWxUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGRvY3VtZW50IHNob3VsZCBiZSB2YWxpZGF0ZWQgZHVyaW5nIGEgYnVpbGQuIFRoZSBkZWZhdWx0XG4gICAgICogaW1wbGVtZW50YXRpb24gY2hlY2tzIHRoZSBgdmFsaWRhdGlvbmAgcHJvcGVydHkgb2YgdGhlIGJ1aWxkIG9wdGlvbnMuIElmIGl0J3Mgc2V0IHRvIGB0cnVlYFxuICAgICAqIG9yIGEgYFZhbGlkYXRpb25PcHRpb25zYCBvYmplY3QsIHRoZSBkb2N1bWVudCBpcyBpbmNsdWRlZCBpbiB0aGUgdmFsaWRhdGlvbiBwaGFzZS5cbiAgICAgKi9cbiAgICBzaG91bGRWYWxpZGF0ZShkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmdldEJ1aWxkT3B0aW9ucyhkb2N1bWVudCkudmFsaWRhdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgZ2l2ZW4gZG9jdW1lbnQgYW5kIHN0b3JlIHRoZSByZXN1bHRpbmcgZGlhZ25vc3RpY3MgaW4gdGhlIGRvY3VtZW50LlxuICAgICAqIElmIHRoZSBkb2N1bWVudCBhbHJlYWR5IGNvbnRhaW5zIGRpYWdub3N0aWNzLCB0aGUgbmV3IG9uZXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHZhbGlkYXRlKGRvY3VtZW50LCBjYW5jZWxUb2tlbikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhkb2N1bWVudC51cmkpLnZhbGlkYXRpb24uRG9jdW1lbnRWYWxpZGF0b3I7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25TZXR0aW5nID0gdGhpcy5nZXRCdWlsZE9wdGlvbnMoZG9jdW1lbnQpLnZhbGlkYXRpb247XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2YgdmFsaWRhdGlvblNldHRpbmcgPT09ICdvYmplY3QnID8gdmFsaWRhdGlvblNldHRpbmcgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNzID0gYXdhaXQgdmFsaWRhdG9yLnZhbGlkYXRlRG9jdW1lbnQoZG9jdW1lbnQsIG9wdGlvbnMsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgaWYgKGRvY3VtZW50LmRpYWdub3N0aWNzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaWFnbm9zdGljcy5wdXNoKC4uLmRpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4ZWN1dGVkIHZhbGlkYXRpb24gaW4gdGhlIGJ1aWxkIHN0YXRlXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2N1bWVudC51cmkudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgKF9hID0gc3RhdGUucmVzdWx0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoc3RhdGUucmVzdWx0ID0ge30pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcmllcyA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yaWVzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBWYWxpZGF0aW9uQ2F0ZWdvcnkuYWxsO1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVzdWx0LnZhbGlkYXRpb25DaGVja3MucHVzaCguLi5uZXdDYXRlZ29yaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzID0gWy4uLm5ld0NhdGVnb3JpZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldEJ1aWxkT3B0aW9ucyhkb2N1bWVudCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2N1bWVudC51cmkudG9TdHJpbmcoKSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb2N1bWVudC1idWlsZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29udGV4dENhY2hlIH0gZnJvbSAnLi4vdXRpbHMvY2FjaGluZy5qcyc7XG5pbXBvcnQgeyBDYW5jZWxsYXRpb25Ub2tlbiB9IGZyb20gJy4uL3V0aWxzL2NhbmNlbGxhdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuLi91dGlscy91cmktdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRJbmRleE1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc3ltYm9sIGluZGV4IHN0b3JlcyBhbGwgYEFzdE5vZGVEZXNjcmlwdGlvbmAgaXRlbXMgZXhwb3J0ZWQgYnkgYSBkb2N1bWVudC5cbiAgICAgICAgICogVGhlIGtleSB1c2VkIGluIHRoaXMgbWFwIGlzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmljIGRvY3VtZW50IFVSSS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3ltYm9sSW5kZXggPSBuZXcgTWFwKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGlzIGEgY2FjaGUgZm9yIHRoZSBgYWxsRWxlbWVudHMoKWAgbWV0aG9kLlxuICAgICAgICAgKiBJdCBjYWNoZXMgdGhlIGRlc2NyaXB0aW9ucyBmcm9tIGBzeW1ib2xJbmRleGAgZ3JvdXBlZCBieSB0eXBlcy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3ltYm9sQnlUeXBlSW5kZXggPSBuZXcgQ29udGV4dENhY2hlKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGluZGV4IGtlZXBzIHRyYWNrIG9mIGFsbCBgUmVmZXJlbmNlRGVzY3JpcHRpb25gIGl0ZW1zIGV4cG9ydGVkIGJ5IGEgZG9jdW1lbnQuXG4gICAgICAgICAqIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHdoaWNoIGVsZW1lbnRzIGFyZSBhZmZlY3RlZCBieSBhIGRvY3VtZW50IGNoYW5nZVxuICAgICAgICAgKiBhbmQgZm9yIGZpbmRpbmcgcmVmZXJlbmNlcyB0byBhbiBBU1Qgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVmZXJlbmNlSW5kZXggPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRzID0gc2VydmljZXMud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHM7XG4gICAgICAgIHRoaXMuc2VydmljZVJlZ2lzdHJ5ID0gc2VydmljZXMuU2VydmljZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmFzdFJlZmxlY3Rpb24gPSBzZXJ2aWNlcy5Bc3RSZWZsZWN0aW9uO1xuICAgIH1cbiAgICBmaW5kQWxsUmVmZXJlbmNlcyh0YXJnZXROb2RlLCBhc3ROb2RlUGF0aCkge1xuICAgICAgICBjb25zdCB0YXJnZXREb2NVcmkgPSBnZXREb2N1bWVudCh0YXJnZXROb2RlKS51cmk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLnJlZmVyZW5jZUluZGV4LmZvckVhY2goZG9jUmVmcyA9PiB7XG4gICAgICAgICAgICBkb2NSZWZzLmZvckVhY2gocmVmRGVzY3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChVcmlVdGlscy5lcXVhbHMocmVmRGVzY3IudGFyZ2V0VXJpLCB0YXJnZXREb2NVcmkpICYmIHJlZkRlc2NyLnRhcmdldFBhdGggPT09IGFzdE5vZGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlZkRlc2NyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJlYW0ocmVzdWx0KTtcbiAgICB9XG4gICAgYWxsRWxlbWVudHMobm9kZVR5cGUsIHVyaXMpIHtcbiAgICAgICAgbGV0IGRvY3VtZW50VXJpcyA9IHN0cmVhbSh0aGlzLnN5bWJvbEluZGV4LmtleXMoKSk7XG4gICAgICAgIGlmICh1cmlzKSB7XG4gICAgICAgICAgICBkb2N1bWVudFVyaXMgPSBkb2N1bWVudFVyaXMuZmlsdGVyKHVyaSA9PiAhdXJpcyB8fCB1cmlzLmhhcyh1cmkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9jdW1lbnRVcmlzXG4gICAgICAgICAgICAubWFwKHVyaSA9PiB0aGlzLmdldEZpbGVEZXNjcmlwdGlvbnModXJpLCBub2RlVHlwZSkpXG4gICAgICAgICAgICAuZmxhdCgpO1xuICAgIH1cbiAgICBnZXRGaWxlRGVzY3JpcHRpb25zKHVyaSwgbm9kZVR5cGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIW5vZGVUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zeW1ib2xJbmRleC5nZXQodXJpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5nZXQodXJpLCBub2RlVHlwZSwgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgYWxsRmlsZURlc2NyaXB0aW9ucyA9IChfYSA9IHRoaXMuc3ltYm9sSW5kZXguZ2V0KHVyaSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgcmV0dXJuIGFsbEZpbGVEZXNjcmlwdGlvbnMuZmlsdGVyKGUgPT4gdGhpcy5hc3RSZWZsZWN0aW9uLmlzU3VidHlwZShlLnR5cGUsIG5vZGVUeXBlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zO1xuICAgIH1cbiAgICByZW1vdmUodXJpKSB7XG4gICAgICAgIGNvbnN0IHVyaVN0cmluZyA9IHVyaS50b1N0cmluZygpO1xuICAgICAgICB0aGlzLnN5bWJvbEluZGV4LmRlbGV0ZSh1cmlTdHJpbmcpO1xuICAgICAgICB0aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmNsZWFyKHVyaVN0cmluZyk7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlSW5kZXguZGVsZXRlKHVyaVN0cmluZyk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZUNvbnRlbnQoZG9jdW1lbnQsIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGRvY3VtZW50LnVyaSk7XG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSBhd2FpdCBzZXJ2aWNlcy5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb24uY29tcHV0ZUV4cG9ydHMoZG9jdW1lbnQsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgY29uc3QgdXJpID0gZG9jdW1lbnQudXJpLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc3ltYm9sSW5kZXguc2V0KHVyaSwgZXhwb3J0cyk7XG4gICAgICAgIHRoaXMuc3ltYm9sQnlUeXBlSW5kZXguY2xlYXIodXJpKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlUmVmZXJlbmNlcyhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZG9jdW1lbnQudXJpKTtcbiAgICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgc2VydmljZXMud29ya3NwYWNlLlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIuY3JlYXRlRGVzY3JpcHRpb25zKGRvY3VtZW50LCBjYW5jZWxUb2tlbik7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlSW5kZXguc2V0KGRvY3VtZW50LnVyaS50b1N0cmluZygpLCBpbmRleERhdGEpO1xuICAgIH1cbiAgICBpc0FmZmVjdGVkKGRvY3VtZW50LCBjaGFuZ2VkVXJpcykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5yZWZlcmVuY2VJbmRleC5nZXQoZG9jdW1lbnQudXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAoIXJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5zb21lKHJlZiA9PiAhcmVmLmxvY2FsICYmIGNoYW5nZWRVcmlzLmhhcyhyZWYudGFyZ2V0VXJpLnRvU3RyaW5nKCkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC1tYW5hZ2VyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgRGVmZXJyZWQsIGludGVycnVwdEFuZENoZWNrIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBVUkksIFVyaVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEZWZhdWx0V29ya3NwYWNlTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVpbGRPcHRpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMuc2VydmljZVJlZ2lzdHJ5ID0gc2VydmljZXMuU2VydmljZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmxhbmdpdW1Eb2N1bWVudHMgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cztcbiAgICAgICAgdGhpcy5kb2N1bWVudEJ1aWxkZXIgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyO1xuICAgICAgICB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlciA9IHNlcnZpY2VzLndvcmtzcGFjZS5GaWxlU3lzdGVtUHJvdmlkZXI7XG4gICAgICAgIHRoaXMubXV0ZXggPSBzZXJ2aWNlcy53b3Jrc3BhY2UuV29ya3NwYWNlTG9jaztcbiAgICB9XG4gICAgZ2V0IHJlYWR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHkucHJvbWlzZTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZShwYXJhbXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmZvbGRlcnMgPSAoX2EgPSBwYXJhbXMud29ya3NwYWNlRm9sZGVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0aWFsaXplZChfcGFyYW1zKSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHdvcmtzcGFjZSBldmVuIGlmIHRoZXJlIGFyZSBubyB3b3Jrc3BhY2UgZm9sZGVyc1xuICAgICAgICAvLyBXZSBzdGlsbCB3YW50IHRvIGxvYWQgYWRkaXRpb25hbCBkb2N1bWVudHMgKGxhbmd1YWdlIGxpYnJhcnkgb3Igc2ltaWxhcikgZHVyaW5nIGluaXRpYWxpemF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLm11dGV4LndyaXRlKHRva2VuID0+IHsgdmFyIF9hOyByZXR1cm4gdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKChfYSA9IHRoaXMuZm9sZGVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sIHRva2VuKTsgfSk7XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoZm9sZGVycywgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGF3YWl0IHRoaXMucGVyZm9ybVN0YXJ0dXAoZm9sZGVycyk7XG4gICAgICAgIC8vIE9ubHkgYWZ0ZXIgY3JlYXRpbmcgYWxsIGRvY3VtZW50cyBkbyB3ZSBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gY2FuY2VsIHRoZSBpbml0aWFsaXphdGlvblxuICAgICAgICAvLyBUaGUgZG9jdW1lbnQgYnVpbGRlciB3aWxsIGxhdGVyIHBpY2sgdXAgb24gYWxsIHVucHJvY2Vzc2VkIGRvY3VtZW50c1xuICAgICAgICBhd2FpdCBpbnRlcnJ1cHRBbmRDaGVjayhjYW5jZWxUb2tlbik7XG4gICAgICAgIGF3YWl0IHRoaXMuZG9jdW1lbnRCdWlsZGVyLmJ1aWxkKGRvY3VtZW50cywgdGhpcy5pbml0aWFsQnVpbGRPcHRpb25zLCBjYW5jZWxUb2tlbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRoZSB1bmludGVycnVwdGFibGUgc3RhcnR1cCBzZXF1ZW5jZSBvZiB0aGUgd29ya3NwYWNlIG1hbmFnZXIuXG4gICAgICogVGhpcyBtZXRob2RzIGxvYWRzIGFsbCBkb2N1bWVudHMgaW4gdGhlIHdvcmtzcGFjZSBhbmQgb3RoZXIgZG9jdW1lbnRzIGFuZCByZXR1cm5zIHRoZW0uXG4gICAgICovXG4gICAgYXN5bmMgcGVyZm9ybVN0YXJ0dXAoZm9sZGVycykge1xuICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9ucyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbC5mbGF0TWFwKGUgPT4gZS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRzID0gW107XG4gICAgICAgIGNvbnN0IGNvbGxlY3RvciA9IChkb2N1bWVudCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnRzLnB1c2goZG9jdW1lbnQpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaGFzRG9jdW1lbnQoZG9jdW1lbnQudXJpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGRvbid0IGF3YWl0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgd29ya3NwYWNlIG1hbmFnZXIsXG4gICAgICAgIC8vIHdlIGNhbiBzdGlsbCBhc3N1bWUgdGhhdCBhbGwgbGlicmFyeSBkb2N1bWVudHMgYW5kIGZpbGUgZG9jdW1lbnRzIGFyZSBsb2FkZWQgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgYnVpbGRpbmcgZG9jdW1lbnRzLlxuICAgICAgICAvLyBUaGUgbXV0ZXggcHJldmVudHMgYW55dGhpbmcgZnJvbSBwZXJmb3JtaW5nIGEgd29ya3NwYWNlIGJ1aWxkIHVudGlsIHdlIGNoZWNrIHRoZSBjYW5jZWxsYXRpb24gdG9rZW5cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkQWRkaXRpb25hbERvY3VtZW50cyhmb2xkZXJzLCBjb2xsZWN0b3IpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChmb2xkZXJzLm1hcCh3ZiA9PiBbd2YsIHRoaXMuZ2V0Um9vdEZvbGRlcih3ZildKVxuICAgICAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+IHRoaXMudHJhdmVyc2VGb2xkZXIoLi4uZW50cnksIGZpbGVFeHRlbnNpb25zLCBjb2xsZWN0b3IpKSk7XG4gICAgICAgIHRoaXMuX3JlYWR5LnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9hZCBhbGwgYWRkaXRpb25hbCBkb2N1bWVudHMgdGhhdCBzaGFsbCBiZSB2aXNpYmxlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBnaXZlbiB3b3Jrc3BhY2VcbiAgICAgKiBmb2xkZXJzIGFuZCBhZGQgdGhlbSB0byB0aGUgY29sbGVjdG9yLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgYnVpbHQtaW4gbGlicmFyaWVzIG9mXG4gICAgICogeW91ciBsYW5ndWFnZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBsb2FkZWQgZnJvbSBwcm92aWRlZCBmaWxlcyBvciBjb25zdHJ1Y3RlZCBpbiBtZW1vcnkuXG4gICAgICovXG4gICAgbG9hZEFkZGl0aW9uYWxEb2N1bWVudHMoX2ZvbGRlcnMsIF9jb2xsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBzb3VyY2UgZG9jdW1lbnRzIGluIHRoZSBnaXZlbiB3b3Jrc3BhY2UgZm9sZGVyLlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIFVSSSBvZiB0aGUgd29ya3NwYWNlIGZvbGRlciwgYnV0IHlvdSBjYW4gb3ZlcnJpZGVcbiAgICAgKiB0aGlzIHRvIHJldHVybiBhIHN1YmZvbGRlciBsaWtlIGBzcmNgIGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0Um9vdEZvbGRlcih3b3Jrc3BhY2VGb2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIFVSSS5wYXJzZSh3b3Jrc3BhY2VGb2xkZXIudXJpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhdmVyc2UgdGhlIGZpbGUgc3lzdGVtIGZvbGRlciBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBVUkkgYW5kIGl0cyBzdWJmb2xkZXJzLiBBbGxcbiAgICAgKiBjb250YWluZWQgZmlsZXMgdGhhdCBtYXRjaCB0aGUgZmlsZSBleHRlbnNpb25zIGFyZSBhZGRlZCB0byB0aGUgY29sbGVjdG9yLlxuICAgICAqL1xuICAgIGFzeW5jIHRyYXZlcnNlRm9sZGVyKHdvcmtzcGFjZUZvbGRlciwgZm9sZGVyUGF0aCwgZmlsZUV4dGVuc2lvbnMsIGNvbGxlY3Rvcikge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5maWxlU3lzdGVtUHJvdmlkZXIucmVhZERpcmVjdG9yeShmb2xkZXJQYXRoKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY29udGVudC5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlRW50cnkod29ya3NwYWNlRm9sZGVyLCBlbnRyeSwgZmlsZUV4dGVuc2lvbnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudHJhdmVyc2VGb2xkZXIod29ya3NwYWNlRm9sZGVyLCBlbnRyeS51cmksIGZpbGVFeHRlbnNpb25zLCBjb2xsZWN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBhd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0T3JDcmVhdGVEb2N1bWVudChlbnRyeS51cmkpO1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3IoZG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZm9sZGVyIGVudHJ5IHNoYWxsIGJlIGluY2x1ZGVkIHdoaWxlIGluZGV4aW5nIHRoZSB3b3Jrc3BhY2UuXG4gICAgICovXG4gICAgaW5jbHVkZUVudHJ5KF93b3Jrc3BhY2VGb2xkZXIsIGVudHJ5LCBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBuYW1lID0gVXJpVXRpbHMuYmFzZW5hbWUoZW50cnkudXJpKTtcbiAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZSAhPT0gJ25vZGVfbW9kdWxlcycgJiYgbmFtZSAhPT0gJ291dCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZW50cnkuaXNGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBleHRuYW1lID0gVXJpVXRpbHMuZXh0bmFtZShlbnRyeS51cmkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLmluY2x1ZGVzKGV4dG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13b3Jrc3BhY2UtbWFuYWdlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IExleGVyIGFzIENoZXZyb3RhaW5MZXhlciB9IGZyb20gJ2NoZXZyb3RhaW4nO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRMZXhlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gc2VydmljZXMucGFyc2VyLlRva2VuQnVpbGRlci5idWlsZFRva2VucyhzZXJ2aWNlcy5HcmFtbWFyLCB7XG4gICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHNlcnZpY2VzLkxhbmd1YWdlTWV0YURhdGEuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRva2VuVHlwZXMgPSB0aGlzLnRvVG9rZW5UeXBlRGljdGlvbmFyeSh0b2tlbnMpO1xuICAgICAgICBjb25zdCBsZXhlclRva2VucyA9IGlzVG9rZW5UeXBlRGljdGlvbmFyeSh0b2tlbnMpID8gT2JqZWN0LnZhbHVlcyh0b2tlbnMpIDogdG9rZW5zO1xuICAgICAgICB0aGlzLmNoZXZyb3RhaW5MZXhlciA9IG5ldyBDaGV2cm90YWluTGV4ZXIobGV4ZXJUb2tlbnMsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uVHJhY2tpbmc6ICdmdWxsJ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuVHlwZXM7XG4gICAgfVxuICAgIHRva2VuaXplKHRleHQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjaGV2cm90YWluUmVzdWx0ID0gdGhpcy5jaGV2cm90YWluTGV4ZXIudG9rZW5pemUodGV4dCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b2tlbnM6IGNoZXZyb3RhaW5SZXN1bHQudG9rZW5zLFxuICAgICAgICAgICAgZXJyb3JzOiBjaGV2cm90YWluUmVzdWx0LmVycm9ycyxcbiAgICAgICAgICAgIGhpZGRlbjogKF9hID0gY2hldnJvdGFpblJlc3VsdC5ncm91cHMuaGlkZGVuKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXVxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1Rva2VuVHlwZURpY3Rpb25hcnkoYnVpbGRUb2tlbnMpIHtcbiAgICAgICAgaWYgKGlzVG9rZW5UeXBlRGljdGlvbmFyeShidWlsZFRva2VucykpXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRUb2tlbnM7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IGlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbihidWlsZFRva2VucykgPyBPYmplY3QudmFsdWVzKGJ1aWxkVG9rZW5zLm1vZGVzKS5mbGF0KCkgOiBidWlsZFRva2VucztcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHJlc1t0b2tlbi5uYW1lXSA9IHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBUb2tlblZvY2FidWxhcnkgaXMgVG9rZW5UeXBlIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuVHlwZUFycmF5KHRva2VuVm9jYWJ1bGFyeSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRva2VuVm9jYWJ1bGFyeSkgJiYgKHRva2VuVm9jYWJ1bGFyeS5sZW5ndGggPT09IDAgfHwgJ25hbWUnIGluIHRva2VuVm9jYWJ1bGFyeVswXSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBUb2tlblZvY2FidWxhcnkgaXMgSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uKHRva2VuVm9jYWJ1bGFyeSkge1xuICAgIHJldHVybiB0b2tlblZvY2FidWxhcnkgJiYgJ21vZGVzJyBpbiB0b2tlblZvY2FidWxhcnkgJiYgJ2RlZmF1bHRNb2RlJyBpbiB0b2tlblZvY2FidWxhcnk7XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBUb2tlblZvY2FidWxhcnkgaXMgVG9rZW5UeXBlRGljdGlvbmFyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb2tlblR5cGVEaWN0aW9uYXJ5KHRva2VuVm9jYWJ1bGFyeSkge1xuICAgIHJldHVybiAhaXNUb2tlblR5cGVBcnJheSh0b2tlblZvY2FidWxhcnkpICYmICFpc0lNdWx0aU1vZGVMZXhlckRlZmluaXRpb24odG9rZW5Wb2NhYnVsYXJ5KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxleGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgUG9zaXRpb24sIFJhbmdlIH0gZnJvbSAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzJztcbmltcG9ydCB7IE5FV0xJTkVfUkVHRVhQLCBlc2NhcGVSZWdFeHAgfSBmcm9tICcuLi91dGlscy9yZWdleHAtdXRpbHMuanMnO1xuaW1wb3J0IHsgVVJJIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpTRG9jKG5vZGUsIHN0YXJ0LCBvcHRpb25zKSB7XG4gICAgbGV0IG9wdHM7XG4gICAgbGV0IHBvc2l0aW9uO1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcG9zaXRpb24gPSBzdGFydDtcbiAgICAgICAgb3B0cyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwb3NpdGlvbiA9IG5vZGUucmFuZ2Uuc3RhcnQ7XG4gICAgICAgIG9wdHMgPSBzdGFydDtcbiAgICB9XG4gICAgaWYgKCFwb3NpdGlvbikge1xuICAgICAgICBwb3NpdGlvbiA9IFBvc2l0aW9uLmNyZWF0ZSgwLCAwKTtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhub2RlKTtcbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9IG5vcm1hbGl6ZU9wdGlvbnMob3B0cyk7XG4gICAgY29uc3QgdG9rZW5zID0gdG9rZW5pemUoe1xuICAgICAgICBsaW5lcyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIG9wdGlvbnM6IG5vcm1hbGl6ZWRPcHRpb25zXG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlSlNEb2NDb21tZW50KHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgcG9zaXRpb25cbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0pTRG9jKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9IG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhub2RlKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBsaW5lc1swXTtcbiAgICBjb25zdCBsYXN0ID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgZmlyc3RSZWdleCA9IG5vcm1hbGl6ZWRPcHRpb25zLnN0YXJ0O1xuICAgIGNvbnN0IGxhc3RSZWdleCA9IG5vcm1hbGl6ZWRPcHRpb25zLmVuZDtcbiAgICByZXR1cm4gQm9vbGVhbihmaXJzdFJlZ2V4ID09PSBudWxsIHx8IGZpcnN0UmVnZXggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0UmVnZXguZXhlYyhmaXJzdCkpICYmIEJvb2xlYW4obGFzdFJlZ2V4ID09PSBudWxsIHx8IGxhc3RSZWdleCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFzdFJlZ2V4LmV4ZWMobGFzdCkpO1xufVxuZnVuY3Rpb24gZ2V0TGluZXMobm9kZSkge1xuICAgIGxldCBjb250ZW50ID0gJyc7XG4gICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250ZW50ID0gbm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnRlbnQgPSBub2RlLnRleHQ7XG4gICAgfVxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChORVdMSU5FX1JFR0VYUCk7XG4gICAgcmV0dXJuIGxpbmVzO1xufVxuY29uc3QgdGFnUmVnZXggPSAvXFxzKihAKFtcXHB7TH1dW1xccHtMfVxccHtOfV0qKT8pL3V5O1xuY29uc3QgaW5saW5lVGFnUmVnZXggPSAvXFx7KEBbXFxwe0x9XVtcXHB7TH1cXHB7Tn1dKikoXFxzKikoW15cXHJcXG59XSspP1xcfS9ndTtcbmZ1bmN0aW9uIHRva2VuaXplKGNvbnRleHQpIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBsZXQgY3VycmVudExpbmUgPSBjb250ZXh0LnBvc2l0aW9uLmxpbmU7XG4gICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjb250ZXh0LnBvc2l0aW9uLmNoYXJhY3RlcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRleHQubGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBpID09PSAwO1xuICAgICAgICBjb25zdCBsYXN0ID0gaSA9PT0gY29udGV4dC5saW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgbGluZSA9IGNvbnRleHQubGluZXNbaV07XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGlmIChmaXJzdCAmJiBjb250ZXh0Lm9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKF9hID0gY29udGV4dC5vcHRpb25zLnN0YXJ0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXhlYyhsaW5lKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IChfYiA9IGNvbnRleHQub3B0aW9ucy5saW5lKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhlYyhsaW5lKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKF9jID0gY29udGV4dC5vcHRpb25zLmVuZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmV4ZWMobGluZSk7XG4gICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBsYXN0Q2hhcmFjdGVyKGxpbmUpKTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZUVuZCA9IHNraXBXaGl0ZXNwYWNlKGxpbmUsIGluZGV4KTtcbiAgICAgICAgaWYgKHdoaXRlc3BhY2VFbmQgPj0gbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgYnJlYWsgdG9rZW4gd2hlbiB3ZSBhbHJlYWR5IGhhdmUgcHJldmlvdXMgdG9rZW5zXG4gICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uLmNyZWF0ZShjdXJyZW50TGluZSwgY3VycmVudENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnJlYWsnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShwb3NpdGlvbiwgcG9zaXRpb24pXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YWdSZWdleC5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHRhZ01hdGNoID0gdGFnUmVnZXguZXhlYyhsaW5lKTtcbiAgICAgICAgICAgIGlmICh0YWdNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxNYXRjaCA9IHRhZ01hdGNoWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBQb3NpdGlvbi5jcmVhdGUoY3VycmVudExpbmUsIGN1cnJlbnRDaGFyYWN0ZXIgKyBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gUG9zaXRpb24uY3JlYXRlKGN1cnJlbnRMaW5lLCBjdXJyZW50Q2hhcmFjdGVyICsgaW5kZXggKyBmdWxsTWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShzdGFydCwgZW5kKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluZGV4ICs9IGZ1bGxNYXRjaC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBza2lwV2hpdGVzcGFjZShsaW5lLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBsaW5lLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5saW5lVGFnTWF0Y2hlcyA9IEFycmF5LmZyb20ocmVzdC5tYXRjaEFsbChpbmxpbmVUYWdSZWdleCkpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKC4uLmJ1aWxkSW5saW5lVG9rZW5zKGlubGluZVRhZ01hdGNoZXMsIHJlc3QsIGN1cnJlbnRMaW5lLCBjdXJyZW50Q2hhcmFjdGVyICsgaW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgICBjdXJyZW50Q2hhcmFjdGVyID0gMDtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGxhc3QgYnJlYWsgdG9rZW4gaWYgdGhlcmUgaXMgb25lXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPiAwICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9PT0gJ2JyZWFrJykge1xuICAgICAgICByZXR1cm4gdG9rZW5zLnNsaWNlKDAsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vucztcbn1cbmZ1bmN0aW9uIGJ1aWxkSW5saW5lVG9rZW5zKHRhZ3MsIGxpbmUsIGxpbmVJbmRleCwgY2hhcmFjdGVySW5kZXgpIHtcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBjaGFyYWN0ZXJJbmRleCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGNoYXJhY3RlckluZGV4ICsgbGluZS5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBjb250ZW50OiBsaW5lLFxuICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShzdGFydCwgZW5kKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoSW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29udGVudCA9IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2hJbmRleCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBtYXRjaEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIG1hdGNoSW5kZXggKyBjaGFyYWN0ZXJJbmRleCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gc3RhcnRDb250ZW50Lmxlbmd0aCArIDE7XG4gICAgICAgICAgICBjb25zdCB0YWdOYW1lID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2lubGluZS10YWcnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRhZ05hbWUsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBvZmZzZXQgKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIG9mZnNldCArIHRhZ05hbWUubGVuZ3RoICsgY2hhcmFjdGVySW5kZXgpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdGFnTmFtZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1hdGNoWzJdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBvZmZzZXQgKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIG9mZnNldCArIHZhbHVlLmxlbmd0aCArIGNoYXJhY3RlckluZGV4KSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBvZmZzZXQgKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIG9mZnNldCArIGNoYXJhY3RlckluZGV4KSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kQ29udGVudCA9IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCk7XG4gICAgICAgIGlmIChlbmRDb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgY29udGVudDogZW5kQ29udGVudCxcbiAgICAgICAgICAgICAgICByYW5nZTogUmFuZ2UuY3JlYXRlKFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIGNoYXJhY3RlckluZGV4KSwgUG9zaXRpb24uY3JlYXRlKGxpbmVJbmRleCwgbGFzdEluZGV4ICsgY2hhcmFjdGVySW5kZXggKyBlbmRDb250ZW50Lmxlbmd0aCkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9rZW5zO1xufVxuY29uc3Qgbm9uV2hpdGVzcGFjZVJlZ2V4ID0gL1xcUy87XG5jb25zdCB3aGl0ZXNwYWNlRW5kUmVnZXggPSAvXFxzKiQvO1xuZnVuY3Rpb24gc2tpcFdoaXRlc3BhY2UobGluZSwgaW5kZXgpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KS5tYXRjaChub25XaGl0ZXNwYWNlUmVnZXgpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgICByZXR1cm4gaW5kZXggKyBtYXRjaC5pbmRleDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBsaW5lLmxlbmd0aDtcbiAgICB9XG59XG5mdW5jdGlvbiBsYXN0Q2hhcmFjdGVyKGxpbmUpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2god2hpdGVzcGFjZUVuZFJlZ2V4KTtcbiAgICBpZiAobWF0Y2ggJiYgdHlwZW9mIG1hdGNoLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gbWF0Y2guaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyBQYXJzaW5nXG5mdW5jdGlvbiBwYXJzZUpTRG9jQ29tbWVudChjb250ZXh0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBQb3NpdGlvbi5jcmVhdGUoY29udGV4dC5wb3NpdGlvbi5saW5lLCBjb250ZXh0LnBvc2l0aW9uLmNoYXJhY3Rlcik7XG4gICAgaWYgKGNvbnRleHQudG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEpTRG9jQ29tbWVudEltcGwoW10sIFJhbmdlLmNyZWF0ZShzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKSk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG4gICAgd2hpbGUgKGNvbnRleHQuaW5kZXggPCBjb250ZXh0LnRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHBhcnNlSlNEb2NFbGVtZW50KGNvbnRleHQsIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSAoX2IgPSAoX2EgPSBlbGVtZW50c1swXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhbmdlLnN0YXJ0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydFBvc2l0aW9uO1xuICAgIGNvbnN0IGVuZCA9IChfZCA9IChfYyA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucmFuZ2UuZW5kKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBzdGFydFBvc2l0aW9uO1xuICAgIHJldHVybiBuZXcgSlNEb2NDb21tZW50SW1wbChlbGVtZW50cywgUmFuZ2UuY3JlYXRlKHN0YXJ0LCBlbmQpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSlNEb2NFbGVtZW50KGNvbnRleHQsIGxhc3QpIHtcbiAgICBjb25zdCBuZXh0ID0gY29udGV4dC50b2tlbnNbY29udGV4dC5pbmRleF07XG4gICAgaWYgKG5leHQudHlwZSA9PT0gJ3RhZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNEb2NUYWcoY29udGV4dCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmIChuZXh0LnR5cGUgPT09ICd0ZXh0JyB8fCBuZXh0LnR5cGUgPT09ICdpbmxpbmUtdGFnJykge1xuICAgICAgICByZXR1cm4gcGFyc2VKU0RvY1RleHQoY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcHBlbmRFbXB0eUxpbmUobmV4dCwgbGFzdCk7XG4gICAgICAgIGNvbnRleHQuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiBhcHBlbmRFbXB0eUxpbmUodG9rZW4sIGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBsaW5lID0gbmV3IEpTRG9jTGluZUltcGwoJycsIHRva2VuLnJhbmdlKTtcbiAgICAgICAgaWYgKCdpbmxpbmVzJyBpbiBlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmlubGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY29udGVudC5pbmxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUpTRG9jVGV4dChjb250ZXh0KSB7XG4gICAgbGV0IHRva2VuID0gY29udGV4dC50b2tlbnNbY29udGV4dC5pbmRleF07XG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IHRva2VuO1xuICAgIGxldCBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlICE9PSAnYnJlYWsnICYmIHRva2VuLnR5cGUgIT09ICd0YWcnKSB7XG4gICAgICAgIGxpbmVzLnB1c2gocGFyc2VKU0RvY0lubGluZShjb250ZXh0KSk7XG4gICAgICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgICB0b2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEpTRG9jVGV4dEltcGwobGluZXMsIFJhbmdlLmNyZWF0ZShmaXJzdFRva2VuLnJhbmdlLnN0YXJ0LCBsYXN0VG9rZW4ucmFuZ2UuZW5kKSk7XG59XG5mdW5jdGlvbiBwYXJzZUpTRG9jSW5saW5lKGNvbnRleHQpIHtcbiAgICBjb25zdCB0b2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXhdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnaW5saW5lLXRhZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNEb2NUYWcoY29udGV4dCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VKU0RvY0xpbmUoY29udGV4dCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VKU0RvY1RhZyhjb250ZXh0LCBpbmxpbmUpIHtcbiAgICBjb25zdCB0YWdUb2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXgrK107XG4gICAgY29uc3QgbmFtZSA9IHRhZ1Rva2VuLmNvbnRlbnQuc3Vic3RyaW5nKDEpO1xuICAgIGNvbnN0IG5leHRUb2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXhdO1xuICAgIGlmICgobmV4dFRva2VuID09PSBudWxsIHx8IG5leHRUb2tlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dFRva2VuLnR5cGUpID09PSAndGV4dCcpIHtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jTGluZSA9IHBhcnNlSlNEb2NMaW5lKGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBKU0RvY1RhZ0ltcGwobmFtZSwgbmV3IEpTRG9jVGV4dEltcGwoW2RvY0xpbmVdLCBkb2NMaW5lLnJhbmdlKSwgaW5saW5lLCBSYW5nZS5jcmVhdGUodGFnVG9rZW4ucmFuZ2Uuc3RhcnQsIGRvY0xpbmUucmFuZ2UuZW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RG9jID0gcGFyc2VKU0RvY1RleHQoY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEpTRG9jVGFnSW1wbChuYW1lLCB0ZXh0RG9jLCBpbmxpbmUsIFJhbmdlLmNyZWF0ZSh0YWdUb2tlbi5yYW5nZS5zdGFydCwgdGV4dERvYy5yYW5nZS5lbmQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0YWdUb2tlbi5yYW5nZTtcbiAgICAgICAgcmV0dXJuIG5ldyBKU0RvY1RhZ0ltcGwobmFtZSwgbmV3IEpTRG9jVGV4dEltcGwoW10sIHJhbmdlKSwgaW5saW5lLCByYW5nZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VKU0RvY0xpbmUoY29udGV4dCkge1xuICAgIGNvbnN0IHRva2VuID0gY29udGV4dC50b2tlbnNbY29udGV4dC5pbmRleCsrXTtcbiAgICByZXR1cm4gbmV3IEpTRG9jTGluZUltcGwodG9rZW4uY29udGVudCwgdG9rZW4ucmFuZ2UpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVPcHRpb25zKHtcbiAgICAgICAgICAgIHN0YXJ0OiAnLyoqJyxcbiAgICAgICAgICAgIGVuZDogJyovJyxcbiAgICAgICAgICAgIGxpbmU6ICcqJ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydCwgZW5kLCBsaW5lIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBub3JtYWxpemVPcHRpb24oc3RhcnQsIHRydWUpLFxuICAgICAgICBlbmQ6IG5vcm1hbGl6ZU9wdGlvbihlbmQsIGZhbHNlKSxcbiAgICAgICAgbGluZTogbm9ybWFsaXplT3B0aW9uKGxpbmUsIHRydWUpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbihvcHRpb24sIHN0YXJ0KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGVzY2FwZWQgPSB0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJyA/IGVzY2FwZVJlZ0V4cChvcHRpb24pIDogb3B0aW9uLnNvdXJjZTtcbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlxcXFxzKiR7ZXNjYXBlZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBcXFxccyoke2VzY2FwZWR9XFxcXHMqJGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbn1cbmNsYXNzIEpTRG9jQ29tbWVudEltcGwge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzLCByYW5nZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICB9XG4gICAgZ2V0VGFnKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsVGFncygpLmZpbmQoZSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cbiAgICBnZXRUYWdzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsVGFncygpLmZpbHRlcihlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuICAgIGdldEFsbFRhZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZSkgPT4gJ25hbWUnIGluIGUpO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZWxlbWVudC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IGZpbGxOZXdsaW5lcyh2YWx1ZSkgKyB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHRvTWFya2Rvd24ob3B0aW9ucykge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQudG9NYXJrZG93bihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LnRvTWFya2Rvd24ob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gZmlsbE5ld2xpbmVzKHZhbHVlKSArIHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICB9XG59XG5jbGFzcyBKU0RvY1RhZ0ltcGwge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGNvbnRlbnQsIGlubGluZSwgcmFuZ2UpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5pbmxpbmUgPSBpbmxpbmU7XG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gYEAke3RoaXMubmFtZX1gO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRleHQgPSBgJHt0ZXh0fSAke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYCR7dGV4dH1cXG4ke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIC8vIElubGluZSB0YWdzIGFyZSBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuICAgICAgICAgICAgcmV0dXJuIGB7JHt0ZXh0fX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9NYXJrZG93bihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVuZGVyVGFnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCB0aGlzKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdGhpcy50b01hcmtkb3duRGVmYXVsdChvcHRpb25zKTtcbiAgICB9XG4gICAgdG9NYXJrZG93bkRlZmF1bHQob3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnRvTWFya2Rvd24ob3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZWQgPSByZW5kZXJJbmxpbmVUYWcodGhpcy5uYW1lLCBjb250ZW50LCBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlbmRlcmVkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFya2VyID0gJyc7XG4gICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRhZykgPT09ICdpdGFsaWMnIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGFnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSAnKic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50YWcpID09PSAnYm9sZCcpIHtcbiAgICAgICAgICAgIG1hcmtlciA9ICcqKic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50YWcpID09PSAnYm9sZC1pdGFsaWMnKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSAnKioqJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGV4dCA9IGAke21hcmtlcn1AJHt0aGlzLm5hbWV9JHttYXJrZXJ9YDtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGV4dCA9IGAke3RleHR9IOKAlCAke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYCR7dGV4dH1cXG4ke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIC8vIElubGluZSB0YWdzIGFyZSBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuICAgICAgICAgICAgcmV0dXJuIGB7JHt0ZXh0fX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZW5kZXJJbmxpbmVUYWcodGFnLCBjb250ZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAodGFnID09PSAnbGlua3BsYWluJyB8fCB0YWcgPT09ICdsaW5rY29kZScgfHwgdGFnID09PSAnbGluaycpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZW50LmluZGV4T2YoJyAnKTtcbiAgICAgICAgbGV0IGRpc3BsYXkgPSBjb250ZW50O1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5U3RhcnQgPSBza2lwV2hpdGVzcGFjZShjb250ZW50LCBpbmRleCk7XG4gICAgICAgICAgICBkaXNwbGF5ID0gY29udGVudC5zdWJzdHJpbmcoZGlzcGxheVN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PT0gJ2xpbmtjb2RlJyB8fCAodGFnID09PSAnbGluaycgJiYgb3B0aW9ucy5saW5rID09PSAnY29kZScpKSB7XG4gICAgICAgICAgICAvLyBTdXJyb3VuZCB0aGUgZGlzcGxheSB2YWx1ZSBpbiBhIG1hcmtkb3duIGlubGluZSBjb2RlIGJsb2NrXG4gICAgICAgICAgICBkaXNwbGF5ID0gYFxcYCR7ZGlzcGxheX1cXGBgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkTGluayA9IChfYiA9IChfYSA9IG9wdGlvbnMucmVuZGVyTGluaykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgY29udGVudCwgZGlzcGxheSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHJlbmRlckxpbmtEZWZhdWx0KGNvbnRlbnQsIGRpc3BsYXkpO1xuICAgICAgICByZXR1cm4gcmVuZGVyZWRMaW5rO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVuZGVyTGlua0RlZmF1bHQoY29udGVudCwgZGlzcGxheSkge1xuICAgIHRyeSB7XG4gICAgICAgIFVSSS5wYXJzZShjb250ZW50LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGBbJHtkaXNwbGF5fV0oJHtjb250ZW50fSlgO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxufVxuY2xhc3MgSlNEb2NUZXh0SW1wbCB7XG4gICAgY29uc3RydWN0b3IobGluZXMsIHJhbmdlKSB7XG4gICAgICAgIHRoaXMuaW5saW5lcyA9IGxpbmVzO1xuICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5saW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5saW5lID0gdGhpcy5pbmxpbmVzW2ldO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuaW5saW5lc1tpICsgMV07XG4gICAgICAgICAgICB0ZXh0ICs9IGlubGluZS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5yYW5nZS5zdGFydC5saW5lID4gaW5saW5lLnJhbmdlLnN0YXJ0LmxpbmUpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcXG4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICB0b01hcmtkb3duKG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmlubGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlubGluZSA9IHRoaXMuaW5saW5lc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlubGluZXNbaSArIDFdO1xuICAgICAgICAgICAgdGV4dCArPSBpbmxpbmUudG9NYXJrZG93bihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQucmFuZ2Uuc3RhcnQubGluZSA+IGlubGluZS5yYW5nZS5zdGFydC5saW5lKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG59XG5jbGFzcyBKU0RvY0xpbmVJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0LCByYW5nZSkge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbiAgICB0b01hcmtkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZpbGxOZXdsaW5lcyh0ZXh0KSB7XG4gICAgaWYgKHRleHQuZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgICAgIHJldHVybiAnXFxuJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAnXFxuXFxuJztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc2RvYy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGlzSlNEb2MsIHBhcnNlSlNEb2MgfSBmcm9tICcuL2pzZG9jLmpzJztcbmV4cG9ydCBjbGFzcyBKU0RvY0RvY3VtZW50YXRpb25Qcm92aWRlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIgPSBzZXJ2aWNlcy5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcjtcbiAgICAgICAgdGhpcy5jb21tZW50UHJvdmlkZXIgPSBzZXJ2aWNlcy5kb2N1bWVudGF0aW9uLkNvbW1lbnRQcm92aWRlcjtcbiAgICB9XG4gICAgZ2V0RG9jdW1lbnRhdGlvbihub2RlKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmNvbW1lbnRQcm92aWRlci5nZXRDb21tZW50KG5vZGUpO1xuICAgICAgICBpZiAoY29tbWVudCAmJiBpc0pTRG9jKGNvbW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRKU0RvYyA9IHBhcnNlSlNEb2MoY29tbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkSlNEb2MudG9NYXJrZG93bih7XG4gICAgICAgICAgICAgICAgcmVuZGVyTGluazogKGxpbmssIGRpc3BsYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRhdGlvbkxpbmtSZW5kZXJlcihub2RlLCBsaW5rLCBkaXNwbGF5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbmRlclRhZzogKHRhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIobm9kZSwgdGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKG5vZGUsIG5hbWUsIGRpc3BsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IChfYSA9IHRoaXMuZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKG5vZGUsIG5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShub2RlLCBuYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLm5hbWVTZWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gZGVzY3JpcHRpb24ubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBkZXNjcmlwdGlvbi5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIgKyAxO1xuICAgICAgICAgICAgY29uc3QgdXJpID0gZGVzY3JpcHRpb24uZG9jdW1lbnRVcmkud2l0aCh7IGZyYWdtZW50OiBgTCR7bGluZX0sJHtjaGFyYWN0ZXJ9YCB9KTtcbiAgICAgICAgICAgIHJldHVybiBgWyR7ZGlzcGxheX1dKCR7dXJpLnRvU3RyaW5nKCl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50YXRpb25UYWdSZW5kZXJlcihfbm9kZSwgX3RhZykge1xuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgdGFnIHJlbmRlcmluZ1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kTmFtZUluUHJlY29tcHV0ZWRTY29wZXMobm9kZSwgbmFtZSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KG5vZGUpO1xuICAgICAgICBjb25zdCBwcmVjb21wdXRlZCA9IGRvY3VtZW50LnByZWNvbXB1dGVkU2NvcGVzO1xuICAgICAgICBpZiAoIXByZWNvbXB1dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbERlc2NyaXB0aW9ucyA9IHByZWNvbXB1dGVkLmdldChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFsbERlc2NyaXB0aW9ucy5maW5kKGUgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuJGNvbnRhaW5lcjtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kTmFtZUluR2xvYmFsU2NvcGUobm9kZSwgbmFtZSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuaW5kZXhNYW5hZ2VyLmFsbEVsZW1lbnRzKCkuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb2N1bWVudGF0aW9uLXByb3ZpZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgaXNBc3ROb2RlV2l0aENvbW1lbnQgfSBmcm9tICcuLi9zZXJpYWxpemVyL2pzb24tc2VyaWFsaXplci5qcyc7XG5pbXBvcnQgeyBmaW5kQ29tbWVudE5vZGUgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRDb21tZW50UHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuZ3JhbW1hckNvbmZpZyA9ICgpID0+IHNlcnZpY2VzLnBhcnNlci5HcmFtbWFyQ29uZmlnO1xuICAgIH1cbiAgICBnZXRDb21tZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaXNBc3ROb2RlV2l0aENvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLiRjb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSBmaW5kQ29tbWVudE5vZGUobm9kZS4kY3N0Tm9kZSwgdGhpcy5ncmFtbWFyQ29uZmlnKCkubXVsdGlsaW5lQ29tbWVudFJ1bGVzKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tbWVudC1wcm92aWRlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDI0IFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWltcG9ydHNcbmV4cG9ydCAqIGZyb20gJ3ZzY29kZS1qc29ucnBjL2xpYi9jb21tb24vZXZlbnRzLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgRGVmZXJyZWQsIE9wZXJhdGlvbkNhbmNlbGxlZCB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJztcbi8qKlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXN5bmMgcGFyc2VyLiBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgd3JhcHMgdGhlIHN5bmMgcGFyc2VyIGluIGEgcHJvbWlzZS5cbiAqXG4gKiBBIHJlYWwgaW1wbGVtZW50YXRpb24gd291bGQgY3JlYXRlIHdvcmtlciB0aHJlYWRzIG9yIHdlYiB3b3JrZXJzIHRvIG9mZmxvYWQgdGhlIHBhcnNpbmcgd29yay5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRBc3luY1BhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5zeW5jUGFyc2VyID0gc2VydmljZXMucGFyc2VyLkxhbmdpdW1QYXJzZXI7XG4gICAgfVxuICAgIHBhcnNlKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN5bmNQYXJzZXIucGFyc2UodGV4dCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRocmVhZGVkQXN5bmNQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdGhyZWFkIGNvdW50IGRldGVybWluZXMgaG93IG1hbnkgdGhyZWFkcyBhcmUgdXNlZCB0byBwYXJzZSBmaWxlcyBpbiBwYXJhbGxlbC5cbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4gRGVjcmVhc2luZyB0aGlzIHZhbHVlIGluY3JlYXNlcyBzdGFydHVwIHBlcmZvcm1hbmNlLCBidXQgZGVjcmVhc2VzIHBhcmFsbGVsIHBhcnNpbmcgcGVyZm9ybWFuY2UuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRocmVhZENvdW50ID0gODtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0ZXJtaW5hdGlvbiBkZWxheSBkZXRlcm1pbmVzIGhvdyBsb25nIHRoZSBwYXJzZXIgd2FpdHMgZm9yIGEgdGhyZWFkIHRvIGZpbmlzaCBhZnRlciBhIGNhbmNlbGxhdGlvbiByZXF1ZXN0LlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMDAobXMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50ZXJtaW5hdGlvbkRlbGF5ID0gMjAwO1xuICAgICAgICB0aGlzLndvcmtlclBvb2wgPSBbXTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmh5ZHJhdG9yID0gc2VydmljZXMuc2VyaWFsaXplci5IeWRyYXRvcjtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZVdvcmtlcnMoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLndvcmtlclBvb2wubGVuZ3RoIDwgdGhpcy50aHJlYWRDb3VudCkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy5jcmVhdGVXb3JrZXIoKTtcbiAgICAgICAgICAgIHdvcmtlci5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmVycmVkID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5sb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHdvcmtlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud29ya2VyUG9vbC5wdXNoKHdvcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcGFyc2UodGV4dCwgY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gYXdhaXQgdGhpcy5hY3F1aXJlUGFyc2VyV29ya2VyKGNhbmNlbFRva2VuKTtcbiAgICAgICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgICAgbGV0IHRpbWVvdXQ7XG4gICAgICAgIC8vIElmIHRoZSBjYW5jZWxsYXRpb24gdG9rZW4gaXMgcmVxdWVzdGVkLCB3ZSB3YWl0IGZvciBhIGNlcnRhaW4gdGltZSBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHdvcmtlci5cbiAgICAgICAgLy8gU2luY2UgdGhlIGNhbmNlbGxhdGlvbiB0b2tlbiBsaXZlcyBsb25nZXIgdGhhbiB0aGUgcGFyc2luZyBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRpc3Bvc2UgdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG1pZ2h0IGFjY2lkZW50YWxseSB0ZXJtaW5hdGUgdGhlIHdvcmtlciBhZnRlciB0aGUgcGFyc2luZyBwcm9jZXNzIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgY29uc3QgY2FuY2VsbGF0aW9uID0gY2FuY2VsVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGVybWluYXRlV29ya2VyKHdvcmtlcik7XG4gICAgICAgICAgICB9LCB0aGlzLnRlcm1pbmF0aW9uRGVsYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgd29ya2VyLnBhcnNlKHRleHQpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gdGhpcy5oeWRyYXRvci5oeWRyYXRlKHJlc3VsdCk7XG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGh5ZHJhdGVkKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdChlcnIpO1xuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbi5kaXNwb3NlKCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgdGVybWluYXRlV29ya2VyKHdvcmtlcikge1xuICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy53b3JrZXJQb29sLmluZGV4T2Yod29ya2VyKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMud29ya2VyUG9vbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVQYXJzZXJXb3JrZXIoY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplV29ya2VycygpO1xuICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiB0aGlzLndvcmtlclBvb2wpIHtcbiAgICAgICAgICAgIGlmICh3b3JrZXIucmVhZHkpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIubG9jaygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgICAgY2FuY2VsVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnF1ZXVlLmluZGV4T2YoZGVmZXJyZWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoT3BlcmF0aW9uQ2FuY2VsbGVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucXVldWUucHVzaChkZWZlcnJlZCk7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzZXJXb3JrZXIge1xuICAgIGdldCByZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5O1xuICAgIH1cbiAgICBnZXQgb25SZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZWFkeUVtaXR0ZXIuZXZlbnQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNlbmRNZXNzYWdlLCBvbk1lc3NhZ2UsIG9uRXJyb3IsIHRlcm1pbmF0ZSkge1xuICAgICAgICB0aGlzLm9uUmVhZHlFbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3BhcnNpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSA9IHNlbmRNZXNzYWdlO1xuICAgICAgICB0aGlzLl90ZXJtaW5hdGUgPSB0ZXJtaW5hdGU7XG4gICAgICAgIG9uTWVzc2FnZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLmRlZmVycmVkLnJlc29sdmUocGFyc2VSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy51bmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy51bmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgdGhpcy5kZWZlcnJlZC5yZWplY3QoT3BlcmF0aW9uQ2FuY2VsbGVkKTtcbiAgICAgICAgdGhpcy5fdGVybWluYXRlKCk7XG4gICAgfVxuICAgIGxvY2soKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgfVxuICAgIHVubG9jaygpIHtcbiAgICAgICAgdGhpcy5fcGFyc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMub25SZWFkeUVtaXR0ZXIuZmlyZSgpO1xuICAgIH1cbiAgICBwYXJzZSh0ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlciB3b3JrZXIgaXMgYnVzeScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhcnNpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UodGV4dCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkLnByb21pc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN5bmMtcGFyc2VyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4sIENhbmNlbGxhdGlvblRva2VuU291cmNlIH0gZnJvbSAnLi4vdXRpbHMvY2FuY2VsbGF0aW9uLmpzJztcbmltcG9ydCB7IERlZmVycmVkLCBpc09wZXJhdGlvbkNhbmNlbGxlZCB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRXb3Jrc3BhY2VMb2NrIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1Rva2VuU291cmNlID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlYWRRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIH1cbiAgICB3cml0ZShhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5jYW5jZWxXcml0ZSgpO1xuICAgICAgICBjb25zdCB0b2tlblNvdXJjZSA9IG5ldyBDYW5jZWxsYXRpb25Ub2tlblNvdXJjZSgpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2UgPSB0b2tlblNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZSh0aGlzLndyaXRlUXVldWUsIGFjdGlvbiwgdG9rZW5Tb3VyY2UudG9rZW4pO1xuICAgIH1cbiAgICByZWFkKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLCBhY3Rpb24pO1xuICAgIH1cbiAgICBlbnF1ZXVlKHF1ZXVlLCBhY3Rpb24sIGNhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgZGVmZXJyZWQsXG4gICAgICAgICAgICBjYW5jZWxsYXRpb25Ub2tlbjogY2FuY2VsbGF0aW9uVG9rZW4gIT09IG51bGwgJiYgY2FuY2VsbGF0aW9uVG9rZW4gIT09IHZvaWQgMCA/IGNhbmNlbGxhdGlvblRva2VuIDogQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZVxuICAgICAgICB9O1xuICAgICAgICBxdWV1ZS5wdXNoKGVudHJ5KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgYXN5bmMgcGVyZm9ybU5leHRPcGVyYXRpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEp1c3QgcGVyZm9ybSB0aGUgbmV4dCB3cml0ZSBhY3Rpb25cbiAgICAgICAgICAgIGVudHJpZXMucHVzaCh0aGlzLndyaXRlUXVldWUuc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5yZWFkUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gRW1wdHkgdGhlIHJlYWQgcXVldWUgYW5kIHBlcmZvcm0gYWxsIGFjdGlvbnMgaW4gcGFyYWxsZWxcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCguLi50aGlzLnJlYWRRdWV1ZS5zcGxpY2UoMCwgdGhpcy5yZWFkUXVldWUubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGVudHJpZXMubWFwKGFzeW5jICh7IGFjdGlvbiwgZGVmZXJyZWQsIGNhbmNlbGxhdGlvblRva2VuIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gdG8gdGhlIG5leHQgZXZlbnQgbG9vcCB0aWNrIHZpYSBgUHJvbWlzZS5yZXNvbHZlKClgXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBhY3Rpb24oY2FuY2VsbGF0aW9uVG9rZW4pKTtcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT3BlcmF0aW9uQ2FuY2VsbGVkKGVycikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkLCB3ZSBkb24ndCB3YW50IHRvIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpO1xuICAgIH1cbiAgICBjYW5jZWxXcml0ZSgpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1Rva2VuU291cmNlLmNhbmNlbCgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdvcmtzcGFjZS1sb2NrLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjQgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ29tcG9zaXRlQ3N0Tm9kZUltcGwsIExlYWZDc3ROb2RlSW1wbCwgUm9vdENzdE5vZGVJbXBsIH0gZnJvbSAnLi4vcGFyc2VyL2NzdC1ub2RlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgaXNBYnN0cmFjdEVsZW1lbnQgfSBmcm9tICcuLi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyc7XG5pbXBvcnQgeyBpc1Jvb3RDc3ROb2RlLCBpc0NvbXBvc2l0ZUNzdE5vZGUsIGlzTGVhZkNzdE5vZGUsIGlzQXN0Tm9kZSwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Bc3QgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQmlNYXAgfSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Dc3QgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRIeWRyYXRvciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwID0gbmV3IEJpTWFwKCk7XG4gICAgICAgIHRoaXMudG9rZW5UeXBlSWRNYXAgPSBuZXcgQmlNYXAoKTtcbiAgICAgICAgdGhpcy5ncmFtbWFyID0gc2VydmljZXMuR3JhbW1hcjtcbiAgICAgICAgdGhpcy5sZXhlciA9IHNlcnZpY2VzLnBhcnNlci5MZXhlcjtcbiAgICAgICAgdGhpcy5saW5rZXIgPSBzZXJ2aWNlcy5yZWZlcmVuY2VzLkxpbmtlcjtcbiAgICB9XG4gICAgZGVoeWRyYXRlKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgc2hhbGxvdyBjb3BpZXMgb2YgdGhlIGVycm9yc1xuICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGVycm9ycyBpbmhlcml0IGZyb20gdGhlIGBFcnJvcmAgY2xhc3MsIHdoaWNoIGlzIG5vdCB0cmFuc2ZlcmFibGUgYWNyb3NzIHdvcmtlciB0aHJlYWRzXG4gICAgICAgICAgICBsZXhlckVycm9yczogcmVzdWx0LmxleGVyRXJyb3JzLm1hcChlID0+IChPYmplY3QuYXNzaWduKHt9LCBlKSkpLFxuICAgICAgICAgICAgcGFyc2VyRXJyb3JzOiByZXN1bHQucGFyc2VyRXJyb3JzLm1hcChlID0+IChPYmplY3QuYXNzaWduKHt9LCBlKSkpLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGVoeWRyYXRlQXN0Tm9kZShyZXN1bHQudmFsdWUsIHRoaXMuY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQocmVzdWx0LnZhbHVlKSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQobm9kZSkge1xuICAgICAgICBjb25zdCBhc3ROb2RlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgY3N0Tm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgYXN0Tm9kZSBvZiBzdHJlYW1Bc3Qobm9kZSkpIHtcbiAgICAgICAgICAgIGFzdE5vZGVzLnNldChhc3ROb2RlLCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuJGNzdE5vZGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3N0Tm9kZSBvZiBzdHJlYW1Dc3Qobm9kZS4kY3N0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjc3ROb2Rlcy5zZXQoY3N0Tm9kZSwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhc3ROb2RlcyxcbiAgICAgICAgICAgIGNzdE5vZGVzXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRlaHlkcmF0ZUFzdE5vZGUobm9kZSwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBvYmogPSBjb250ZXh0LmFzdE5vZGVzLmdldChub2RlKTtcbiAgICAgICAgb2JqLiR0eXBlID0gbm9kZS4kdHlwZTtcbiAgICAgICAgb2JqLiRjb250YWluZXJJbmRleCA9IG5vZGUuJGNvbnRhaW5lckluZGV4O1xuICAgICAgICBvYmouJGNvbnRhaW5lclByb3BlcnR5ID0gbm9kZS4kY29udGFpbmVyUHJvcGVydHk7XG4gICAgICAgIGlmIChub2RlLiRjc3ROb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9iai4kY3N0Tm9kZSA9IHRoaXMuZGVoeWRyYXRlQ3N0Tm9kZShub2RlLiRjc3ROb2RlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICAgICAgb2JqW25hbWVdID0gYXJyO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3ROb2RlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmRlaHlkcmF0ZUFzdE5vZGUoaXRlbSwgY29udGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmRlaHlkcmF0ZVJlZmVyZW5jZShpdGVtLCBjb250ZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZV0gPSB0aGlzLmRlaHlkcmF0ZUFzdE5vZGUodmFsdWUsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWVdID0gdGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UodmFsdWUsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGRlaHlkcmF0ZVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIG9iai4kcmVmVGV4dCA9IHJlZmVyZW5jZS4kcmVmVGV4dDtcbiAgICAgICAgaWYgKHJlZmVyZW5jZS4kcmVmTm9kZSkge1xuICAgICAgICAgICAgb2JqLiRyZWZOb2RlID0gY29udGV4dC5jc3ROb2Rlcy5nZXQocmVmZXJlbmNlLiRyZWZOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBkZWh5ZHJhdGVDc3ROb2RlKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgY3N0Tm9kZSA9IGNvbnRleHQuY3N0Tm9kZXMuZ2V0KG5vZGUpO1xuICAgICAgICBpZiAoaXNSb290Q3N0Tm9kZShub2RlKSkge1xuICAgICAgICAgICAgY3N0Tm9kZS5mdWxsVGV4dCA9IG5vZGUuZnVsbFRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBOb3RlOiBUaGlzIHJldHVybnMgdW5kZWZpbmVkIGZvciBoaWRkZW4gbm9kZXMgKGkuZS4gY29tbWVudHMpXG4gICAgICAgICAgICBjc3ROb2RlLmdyYW1tYXJTb3VyY2UgPSB0aGlzLmdldEdyYW1tYXJFbGVtZW50SWQobm9kZS5ncmFtbWFyU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjc3ROb2RlLmhpZGRlbiA9IG5vZGUuaGlkZGVuO1xuICAgICAgICBjc3ROb2RlLmFzdE5vZGUgPSBjb250ZXh0LmFzdE5vZGVzLmdldChub2RlLmFzdE5vZGUpO1xuICAgICAgICBpZiAoaXNDb21wb3NpdGVDc3ROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICBjc3ROb2RlLmNvbnRlbnQgPSBub2RlLmNvbnRlbnQubWFwKGNoaWxkID0+IHRoaXMuZGVoeWRyYXRlQ3N0Tm9kZShjaGlsZCwgY29udGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTGVhZkNzdE5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIGNzdE5vZGUudG9rZW5UeXBlID0gbm9kZS50b2tlblR5cGUubmFtZTtcbiAgICAgICAgICAgIGNzdE5vZGUub2Zmc2V0ID0gbm9kZS5vZmZzZXQ7XG4gICAgICAgICAgICBjc3ROb2RlLmxlbmd0aCA9IG5vZGUubGVuZ3RoO1xuICAgICAgICAgICAgY3N0Tm9kZS5zdGFydExpbmUgPSBub2RlLnJhbmdlLnN0YXJ0LmxpbmU7XG4gICAgICAgICAgICBjc3ROb2RlLnN0YXJ0Q29sdW1uID0gbm9kZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXI7XG4gICAgICAgICAgICBjc3ROb2RlLmVuZExpbmUgPSBub2RlLnJhbmdlLmVuZC5saW5lO1xuICAgICAgICAgICAgY3N0Tm9kZS5lbmRDb2x1bW4gPSBub2RlLnJhbmdlLmVuZC5jaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzdE5vZGU7XG4gICAgfVxuICAgIGh5ZHJhdGUocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQobm9kZSk7XG4gICAgICAgIGlmICgnJGNzdE5vZGUnIGluIG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaHlkcmF0ZUNzdE5vZGUobm9kZS4kY3N0Tm9kZSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxleGVyRXJyb3JzOiByZXN1bHQubGV4ZXJFcnJvcnMsXG4gICAgICAgICAgICBwYXJzZXJFcnJvcnM6IHJlc3VsdC5wYXJzZXJFcnJvcnMsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5oeWRyYXRlQXN0Tm9kZShub2RlLCBjb250ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjcmVhdGVIeWRyYXRpb25Db250ZXh0KG5vZGUpIHtcbiAgICAgICAgY29uc3QgYXN0Tm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGNzdE5vZGVzID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGFzdE5vZGUgb2Ygc3RyZWFtQXN0KG5vZGUpKSB7XG4gICAgICAgICAgICBhc3ROb2Rlcy5zZXQoYXN0Tm9kZSwge30pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb290O1xuICAgICAgICBpZiAobm9kZS4kY3N0Tm9kZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjc3ROb2RlIG9mIHN0cmVhbUNzdChub2RlLiRjc3ROb2RlKSkge1xuICAgICAgICAgICAgICAgIGxldCBjc3Q7XG4gICAgICAgICAgICAgICAgaWYgKCdmdWxsVGV4dCcgaW4gY3N0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjc3QgPSBuZXcgUm9vdENzdE5vZGVJbXBsKGNzdE5vZGUuZnVsbFRleHQpO1xuICAgICAgICAgICAgICAgICAgICByb290ID0gY3N0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgnY29udGVudCcgaW4gY3N0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjc3QgPSBuZXcgQ29tcG9zaXRlQ3N0Tm9kZUltcGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoJ3Rva2VuVHlwZScgaW4gY3N0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjc3QgPSB0aGlzLmh5ZHJhdGVDc3RMZWFmTm9kZShjc3ROb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNzdCkge1xuICAgICAgICAgICAgICAgICAgICBjc3ROb2Rlcy5zZXQoY3N0Tm9kZSwgY3N0KTtcbiAgICAgICAgICAgICAgICAgICAgY3N0LnJvb3QgPSByb290O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXN0Tm9kZXMsXG4gICAgICAgICAgICBjc3ROb2Rlc1xuICAgICAgICB9O1xuICAgIH1cbiAgICBoeWRyYXRlQXN0Tm9kZShub2RlLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGFzdE5vZGUgPSBjb250ZXh0LmFzdE5vZGVzLmdldChub2RlKTtcbiAgICAgICAgYXN0Tm9kZS4kdHlwZSA9IG5vZGUuJHR5cGU7XG4gICAgICAgIGFzdE5vZGUuJGNvbnRhaW5lckluZGV4ID0gbm9kZS4kY29udGFpbmVySW5kZXg7XG4gICAgICAgIGFzdE5vZGUuJGNvbnRhaW5lclByb3BlcnR5ID0gbm9kZS4kY29udGFpbmVyUHJvcGVydHk7XG4gICAgICAgIGlmIChub2RlLiRjc3ROb2RlKSB7XG4gICAgICAgICAgICBhc3ROb2RlLiRjc3ROb2RlID0gY29udGV4dC5jc3ROb2Rlcy5nZXQobm9kZS4kY3N0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICAgICAgICAgIGFzdE5vZGVbbmFtZV0gPSBhcnI7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzdE5vZGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuc2V0UGFyZW50KHRoaXMuaHlkcmF0ZUFzdE5vZGUoaXRlbSwgY29udGV4dCksIGFzdE5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1JlZmVyZW5jZShpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5oeWRyYXRlUmVmZXJlbmNlKGl0ZW0sIGFzdE5vZGUsIG5hbWUsIGNvbnRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBc3ROb2RlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFzdE5vZGVbbmFtZV0gPSB0aGlzLnNldFBhcmVudCh0aGlzLmh5ZHJhdGVBc3ROb2RlKHZhbHVlLCBjb250ZXh0KSwgYXN0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1JlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBhc3ROb2RlW25hbWVdID0gdGhpcy5oeWRyYXRlUmVmZXJlbmNlKHZhbHVlLCBhc3ROb2RlLCBuYW1lLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3ROb2RlW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzdE5vZGU7XG4gICAgfVxuICAgIHNldFBhcmVudChub2RlLCBwYXJlbnQpIHtcbiAgICAgICAgbm9kZS4kY29udGFpbmVyID0gcGFyZW50O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgaHlkcmF0ZVJlZmVyZW5jZShyZWZlcmVuY2UsIG5vZGUsIG5hbWUsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKG5vZGUsIG5hbWUsIGNvbnRleHQuY3N0Tm9kZXMuZ2V0KHJlZmVyZW5jZS4kcmVmTm9kZSksIHJlZmVyZW5jZS4kcmVmVGV4dCk7XG4gICAgfVxuICAgIGh5ZHJhdGVDc3ROb2RlKGNzdE5vZGUsIGNvbnRleHQsIG51bSA9IDApIHtcbiAgICAgICAgY29uc3QgY3N0Tm9kZU9iaiA9IGNvbnRleHQuY3N0Tm9kZXMuZ2V0KGNzdE5vZGUpO1xuICAgICAgICBpZiAodHlwZW9mIGNzdE5vZGUuZ3JhbW1hclNvdXJjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNzdE5vZGVPYmouZ3JhbW1hclNvdXJjZSA9IHRoaXMuZ2V0R3JhbW1hckVsZW1lbnQoY3N0Tm9kZS5ncmFtbWFyU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjc3ROb2RlT2JqLmFzdE5vZGUgPSBjb250ZXh0LmFzdE5vZGVzLmdldChjc3ROb2RlLmFzdE5vZGUpO1xuICAgICAgICBpZiAoaXNDb21wb3NpdGVDc3ROb2RlKGNzdE5vZGVPYmopKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNzdE5vZGUuY29udGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gdGhpcy5oeWRyYXRlQ3N0Tm9kZShjaGlsZCwgY29udGV4dCwgbnVtKyspO1xuICAgICAgICAgICAgICAgIGNzdE5vZGVPYmouY29udGVudC5wdXNoKGh5ZHJhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3N0Tm9kZU9iajtcbiAgICB9XG4gICAgaHlkcmF0ZUNzdExlYWZOb2RlKGNzdE5vZGUpIHtcbiAgICAgICAgY29uc3QgdG9rZW5UeXBlID0gdGhpcy5nZXRUb2tlblR5cGUoY3N0Tm9kZS50b2tlblR5cGUpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjc3ROb2RlLm9mZnNldDtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gY3N0Tm9kZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN0YXJ0TGluZSA9IGNzdE5vZGUuc3RhcnRMaW5lO1xuICAgICAgICBjb25zdCBzdGFydENvbHVtbiA9IGNzdE5vZGUuc3RhcnRDb2x1bW47XG4gICAgICAgIGNvbnN0IGVuZExpbmUgPSBjc3ROb2RlLmVuZExpbmU7XG4gICAgICAgIGNvbnN0IGVuZENvbHVtbiA9IGNzdE5vZGUuZW5kQ29sdW1uO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBjc3ROb2RlLmhpZGRlbjtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBMZWFmQ3N0Tm9kZUltcGwob2Zmc2V0LCBsZW5ndGgsIHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhcnRMaW5lLFxuICAgICAgICAgICAgICAgIGNoYXJhY3Rlcjogc3RhcnRDb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBlbmRMaW5lLFxuICAgICAgICAgICAgICAgIGNoYXJhY3RlcjogZW5kQ29sdW1uXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRva2VuVHlwZSwgaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGdldFRva2VuVHlwZShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxleGVyLmRlZmluaXRpb25bbmFtZV07XG4gICAgfVxuICAgIGdldEdyYW1tYXJFbGVtZW50SWQobm9kZSkge1xuICAgICAgICBpZiAodGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KG5vZGUpO1xuICAgIH1cbiAgICBnZXRHcmFtbWFyRWxlbWVudChpZCkge1xuICAgICAgICBpZiAodGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0S2V5KGlkKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdyYW1tYXIgZWxlbWVudCBpZDogJyArIGlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVHcmFtbWFyRWxlbWVudElkTWFwKCkge1xuICAgICAgICBsZXQgaWQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc3RyZWFtQXN0KHRoaXMuZ3JhbW1hcikpIHtcbiAgICAgICAgICAgIGlmIChpc0Fic3RyYWN0RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQoZWxlbWVudCwgaWQrKyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oeWRyYXRvci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgY3JlYXRlR3JhbW1hckNvbmZpZyB9IGZyb20gJy4vbGFuZ3VhZ2VzL2dyYW1tYXItY29uZmlnLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvbXBsZXRpb25QYXJzZXIgfSBmcm9tICcuL3BhcnNlci9jb21wbGV0aW9uLXBhcnNlci1idWlsZGVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxhbmdpdW1QYXJzZXIgfSBmcm9tICcuL3BhcnNlci9sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRUb2tlbkJ1aWxkZXIgfSBmcm9tICcuL3BhcnNlci90b2tlbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRWYWx1ZUNvbnZlcnRlciB9IGZyb20gJy4vcGFyc2VyL3ZhbHVlLWNvbnZlcnRlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0TGlua2VyIH0gZnJvbSAnLi9yZWZlcmVuY2VzL2xpbmtlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0TmFtZVByb3ZpZGVyIH0gZnJvbSAnLi9yZWZlcmVuY2VzL25hbWUtcHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgRGVmYXVsdFJlZmVyZW5jZXMgfSBmcm9tICcuL3JlZmVyZW5jZXMvcmVmZXJlbmNlcy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiB9IGZyb20gJy4vcmVmZXJlbmNlcy9zY29wZS1jb21wdXRhdGlvbi5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0U2NvcGVQcm92aWRlciB9IGZyb20gJy4vcmVmZXJlbmNlcy9zY29wZS1wcm92aWRlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0SnNvblNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXIvanNvbi1zZXJpYWxpemVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRTZXJ2aWNlUmVnaXN0cnkgfSBmcm9tICcuL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0aW9uL2RvY3VtZW50LXZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIsIERlZmF1bHRSZWZlcmVuY2VEZXNjcmlwdGlvblByb3ZpZGVyIH0gZnJvbSAnLi93b3Jrc3BhY2UvYXN0LWRlc2NyaXB0aW9ucy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0QXN0Tm9kZUxvY2F0b3IgfSBmcm9tICcuL3dvcmtzcGFjZS9hc3Qtbm9kZS1sb2NhdG9yLmpzJztcbmltcG9ydCB7IERlZmF1bHRDb25maWd1cmF0aW9uUHJvdmlkZXIgfSBmcm9tICcuL3dvcmtzcGFjZS9jb25maWd1cmF0aW9uLmpzJztcbmltcG9ydCB7IERlZmF1bHREb2N1bWVudEJ1aWxkZXIgfSBmcm9tICcuL3dvcmtzcGFjZS9kb2N1bWVudC1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5LCBEZWZhdWx0TGFuZ2l1bURvY3VtZW50cyB9IGZyb20gJy4vd29ya3NwYWNlL2RvY3VtZW50cy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0SW5kZXhNYW5hZ2VyIH0gZnJvbSAnLi93b3Jrc3BhY2UvaW5kZXgtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0V29ya3NwYWNlTWFuYWdlciB9IGZyb20gJy4vd29ya3NwYWNlL3dvcmtzcGFjZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IERlZmF1bHRMZXhlciB9IGZyb20gJy4vcGFyc2VyL2xleGVyLmpzJztcbmltcG9ydCB7IEpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9kb2N1bWVudGF0aW9uL2RvY3VtZW50YXRpb24tcHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1lbnRQcm92aWRlciB9IGZyb20gJy4vZG9jdW1lbnRhdGlvbi9jb21tZW50LXByb3ZpZGVyLmpzJztcbmltcG9ydCB7IExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciB9IGZyb20gJy4vcGFyc2VyL2xhbmdpdW0tcGFyc2VyLmpzJztcbmltcG9ydCB7IERlZmF1bHRBc3luY1BhcnNlciB9IGZyb20gJy4vcGFyc2VyL2FzeW5jLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0V29ya3NwYWNlTG9jayB9IGZyb20gJy4vd29ya3NwYWNlL3dvcmtzcGFjZS1sb2NrLmpzJztcbmltcG9ydCB7IERlZmF1bHRIeWRyYXRvciB9IGZyb20gJy4vc2VyaWFsaXplci9oeWRyYXRvci5qcyc7XG4vKipcbiAqIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGluamVjdGlvbiBtb2R1bGUgY29uZmlndXJpbmcgdGhlIGRlZmF1bHQgY29yZSBzZXJ2aWNlcy5cbiAqIFRoaXMgaXMgYSBzZXQgb2Ygc2VydmljZXMgdGhhdCBhcmUgZGVkaWNhdGVkIHRvIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZG9jdW1lbnRhdGlvbjoge1xuICAgICAgICAgICAgQ29tbWVudFByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0Q29tbWVudFByb3ZpZGVyKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIERvY3VtZW50YXRpb25Qcm92aWRlcjogKHNlcnZpY2VzKSA9PiBuZXcgSlNEb2NEb2N1bWVudGF0aW9uUHJvdmlkZXIoc2VydmljZXMpXG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgICAgQXN5bmNQYXJzZXI6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRBc3luY1BhcnNlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBHcmFtbWFyQ29uZmlnOiAoc2VydmljZXMpID0+IGNyZWF0ZUdyYW1tYXJDb25maWcoc2VydmljZXMpLFxuICAgICAgICAgICAgTGFuZ2l1bVBhcnNlcjogKHNlcnZpY2VzKSA9PiBjcmVhdGVMYW5naXVtUGFyc2VyKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIENvbXBsZXRpb25QYXJzZXI6IChzZXJ2aWNlcykgPT4gY3JlYXRlQ29tcGxldGlvblBhcnNlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBWYWx1ZUNvbnZlcnRlcjogKCkgPT4gbmV3IERlZmF1bHRWYWx1ZUNvbnZlcnRlcigpLFxuICAgICAgICAgICAgVG9rZW5CdWlsZGVyOiAoKSA9PiBuZXcgRGVmYXVsdFRva2VuQnVpbGRlcigpLFxuICAgICAgICAgICAgTGV4ZXI6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRMZXhlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjogKCkgPT4gbmV3IExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcigpXG4gICAgICAgIH0sXG4gICAgICAgIHdvcmtzcGFjZToge1xuICAgICAgICAgICAgQXN0Tm9kZUxvY2F0b3I6ICgpID0+IG5ldyBEZWZhdWx0QXN0Tm9kZUxvY2F0b3IoKSxcbiAgICAgICAgICAgIEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIoc2VydmljZXMpLFxuICAgICAgICAgICAgUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIoc2VydmljZXMpXG4gICAgICAgIH0sXG4gICAgICAgIHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICAgIExpbmtlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdExpbmtlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBOYW1lUHJvdmlkZXI6ICgpID0+IG5ldyBEZWZhdWx0TmFtZVByb3ZpZGVyKCksXG4gICAgICAgICAgICBTY29wZVByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0U2NvcGVQcm92aWRlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBTY29wZUNvbXB1dGF0aW9uOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0U2NvcGVDb21wdXRhdGlvbihzZXJ2aWNlcyksXG4gICAgICAgICAgICBSZWZlcmVuY2VzOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0UmVmZXJlbmNlcyhzZXJ2aWNlcylcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplcjoge1xuICAgICAgICAgICAgSHlkcmF0b3I6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRIeWRyYXRvcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBKc29uU2VyaWFsaXplcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdEpzb25TZXJpYWxpemVyKHNlcnZpY2VzKVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgICBEb2N1bWVudFZhbGlkYXRvcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIFZhbGlkYXRpb25SZWdpc3RyeTogKHNlcnZpY2VzKSA9PiBuZXcgVmFsaWRhdGlvblJlZ2lzdHJ5KHNlcnZpY2VzKVxuICAgICAgICB9LFxuICAgICAgICBzaGFyZWQ6ICgpID0+IGNvbnRleHQuc2hhcmVkXG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG1vZHVsZSBjb25maWd1cmluZyB0aGUgZGVmYXVsdCBzaGFyZWQgY29yZSBzZXJ2aWNlcy5cbiAqIFRoaXMgaXMgdGhlIHNldCBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBsYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgU2VydmljZVJlZ2lzdHJ5OiAoKSA9PiBuZXcgRGVmYXVsdFNlcnZpY2VSZWdpc3RyeSgpLFxuICAgICAgICB3b3Jrc3BhY2U6IHtcbiAgICAgICAgICAgIExhbmdpdW1Eb2N1bWVudHM6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRMYW5naXVtRG9jdW1lbnRzKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIExhbmdpdW1Eb2N1bWVudEZhY3Rvcnk6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5KHNlcnZpY2VzKSxcbiAgICAgICAgICAgIERvY3VtZW50QnVpbGRlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdERvY3VtZW50QnVpbGRlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBJbmRleE1hbmFnZXI6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRJbmRleE1hbmFnZXIoc2VydmljZXMpLFxuICAgICAgICAgICAgV29ya3NwYWNlTWFuYWdlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXIoc2VydmljZXMpLFxuICAgICAgICAgICAgRmlsZVN5c3RlbVByb3ZpZGVyOiAoc2VydmljZXMpID0+IGNvbnRleHQuZmlsZVN5c3RlbVByb3ZpZGVyKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIFdvcmtzcGFjZUxvY2s6ICgpID0+IG5ldyBEZWZhdWx0V29ya3NwYWNlTG9jaygpLFxuICAgICAgICAgICAgQ29uZmlndXJhdGlvblByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0Q29uZmlndXJhdGlvblByb3ZpZGVyKHNlcnZpY2VzKVxuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHQtbW9kdWxlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHZhciBNb2R1bGU7XG4oZnVuY3Rpb24gKE1vZHVsZSkge1xuICAgIE1vZHVsZS5tZXJnZSA9IChtMSwgbTIpID0+IF9tZXJnZShfbWVyZ2Uoe30sIG0xKSwgbTIpO1xufSkoTW9kdWxlIHx8IChNb2R1bGUgPSB7fSkpO1xuLyoqXG4gKiBHaXZlbiBhIHNldCBvZiBtb2R1bGVzLCB0aGUgaW5qZWN0IGZ1bmN0aW9uIHJldHVybnMgYSBsYXppbHkgZXZhbHVhdGVkIGluamVjdG9yXG4gKiB0aGF0IGluamVjdHMgZGVwZW5kZW5jaWVzIGludG8gdGhlIHJlcXVlc3RlZCBzZXJ2aWNlIHdoZW4gaXQgaXMgcmVxdWVzdGVkIHRoZVxuICogZmlyc3QgdGltZS4gU3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIHJldHVybiB0aGUgc2FtZSBzZXJ2aWNlLlxuICpcbiAqIEluIHRoZSBjYXNlIG9mIGN5Y2xpYyBkZXBlbmRlbmNpZXMsIGFuIEVycm9yIHdpbGwgYmUgdGhyb3duLiBUaGlzIGNhbiBiZSBmaXhlZFxuICogYnkgaW5qZWN0aW5nIGEgcHJvdmlkZXIgYCgpID0+IFRgIGluc3RlYWQgb2YgYSBgVGAuXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgYXJndW1lbnRzIG1heSBiZSBvYmplY3RzIG9yIGFycmF5cy4gSG93ZXZlciwgdGhlIHJlc3VsdCB3aWxsXG4gKiBiZSBhbiBvYmplY3QuIFVzaW5nIGl0IHdpdGggZm9yLi5vZiB3aWxsIGhhdmUgbm8gZWZmZWN0LlxuICpcbiAqIEBwYXJhbSBtb2R1bGUxIGZpcnN0IE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTIgKG9wdGlvbmFsKSBzZWNvbmQgTW9kdWxlXG4gKiBAcGFyYW0gbW9kdWxlMyAob3B0aW9uYWwpIHRoaXJkIE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTQgKG9wdGlvbmFsKSBmb3VydGggTW9kdWxlXG4gKiBAcGFyYW0gbW9kdWxlNSAob3B0aW9uYWwpIGZpZnRoIE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTYgKG9wdGlvbmFsKSBzaXh0aCBNb2R1bGVcbiAqIEBwYXJhbSBtb2R1bGU3IChvcHRpb25hbCkgc2V2ZW50aCBNb2R1bGVcbiAqIEBwYXJhbSBtb2R1bGU4IChvcHRpb25hbCkgZWlnaHRoIE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTkgKG9wdGlvbmFsKSBuaW50aCBNb2R1bGVcbiAqIEByZXR1cm5zIGEgbmV3IG9iamVjdCBvZiB0eXBlIElcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChtb2R1bGUxLCBtb2R1bGUyLCBtb2R1bGUzLCBtb2R1bGU0LCBtb2R1bGU1LCBtb2R1bGU2LCBtb2R1bGU3LCBtb2R1bGU4LCBtb2R1bGU5KSB7XG4gICAgY29uc3QgbW9kdWxlID0gW21vZHVsZTEsIG1vZHVsZTIsIG1vZHVsZTMsIG1vZHVsZTQsIG1vZHVsZTUsIG1vZHVsZTYsIG1vZHVsZTcsIG1vZHVsZTgsIG1vZHVsZTldLnJlZHVjZShfbWVyZ2UsIHt9KTtcbiAgICByZXR1cm4gX2luamVjdChtb2R1bGUpO1xufVxuY29uc3QgaXNQcm94eSA9IFN5bWJvbCgnaXNQcm94eScpO1xuLyoqXG4gKiBFYWdlcmx5IGxvYWQgYWxsIHNlcnZpY2VzIGluIHRoZSBnaXZlbiBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXIuIFRoaXMgaXMgc29tZXRpbWVzXG4gKiBuZWNlc3NhcnkgYmVjYXVzZSBzZXJ2aWNlcyBjYW4gcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzIGluIHRoZWlyIGNvbnN0cnVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhZ2VyTG9hZChpdGVtKSB7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbVtpc1Byb3h5XSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoaXRlbSkpIHtcbiAgICAgICAgICAgIGVhZ2VyTG9hZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gaW5qZWN0b3IgYnkgY3JlYXRpbmcgYSBwcm94eS5cbiAqIEludmFyaWFudDogaW5qZWN0b3IgaXMgb2YgdHlwZSBJLiBJZiBpbmplY3RvciBpcyB1bmRlZmluZWQsIHRoZW4gVCA9IEkuXG4gKi9cbmZ1bmN0aW9uIF9pbmplY3QobW9kdWxlLCBpbmplY3Rvcikge1xuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgIGRlbGV0ZVByb3BlcnR5OiAoKSA9PiBmYWxzZSxcbiAgICAgICAgZ2V0OiAob2JqLCBwcm9wKSA9PiBfcmVzb2x2ZShvYmosIHByb3AsIG1vZHVsZSwgaW5qZWN0b3IgfHwgcHJveHkpLFxuICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IChvYmosIHByb3ApID0+IChfcmVzb2x2ZShvYmosIHByb3AsIG1vZHVsZSwgaW5qZWN0b3IgfHwgcHJveHkpLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCkpLFxuICAgICAgICBoYXM6IChfLCBwcm9wKSA9PiBwcm9wIGluIG1vZHVsZSxcbiAgICAgICAgb3duS2V5czogKCkgPT4gWy4uLlJlZmxlY3Qub3duS2V5cyhtb2R1bGUpLCBpc1Byb3h5XSAvLyB1c2VkIGJ5IGZvci4uaW5cbiAgICB9KTtcbiAgICBwcm94eVtpc1Byb3h5XSA9IHRydWU7XG4gICAgcmV0dXJuIHByb3h5O1xufVxuLyoqXG4gKiBJbnRlcm5hbGx5IHVzZWQgdG8gdGFnIGEgcmVxdWVzdGVkIGRlcGVuZGVuY3ksIGRpcmVjdGx5IGJlZm9yZSBjYWxsaW5nIHRoZSBmYWN0b3J5LlxuICogVGhpcyBhbGxvd3MgdXMgdG8gZmluZCBjeWNsZXMgZHVyaW5nIGluc3RhbmNlIGNyZWF0aW9uLlxuICovXG5jb25zdCBfX3JlcXVlc3RlZF9fID0gU3ltYm9sKCk7XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGBvYmpbcHJvcF1gLiBJZiB0aGUgdmFsdWUgZG9lcyBub3QgZXhpc3QsIHlldCwgaXQgaXMgcmVzb2x2ZWQgZnJvbVxuICogdGhlIG1vZHVsZSBkZXNjcmlwdGlvbi4gVGhlIHJlc3VsdCBvZiBzZXJ2aWNlIGZhY3RvcmllcyBpcyBjYWNoZWQuIEdyb3VwcyBhcmVcbiAqIHJlY3Vyc2l2ZWx5IHByb3hpZWQuXG4gKlxuICogQHBhcmFtIG9iaiBhbiBvYmplY3QgaG9sZGluZyBhbGwgZ3JvdXAgcHJveGllcyBhbmQgc2VydmljZXNcbiAqIEBwYXJhbSBwcm9wIHRoZSBrZXkgb2YgYSB2YWx1ZSB3aXRoaW4gb2JqXG4gKiBAcGFyYW0gbW9kdWxlIGFuIG9iamVjdCBjb250YWluaW5nIGdyb3VwcyBhbmQgc2VydmljZSBmYWN0b3JpZXNcbiAqIEBwYXJhbSBpbmplY3RvciB0aGUgZmlyc3QgbGV2ZWwgcHJveHkgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gYWxsIHZhbHVlc1xuICogQHJldHVybnMgdGhlIHJlcXVlc3RlZCB2YWx1ZSBgb2JqW3Byb3BdYFxuICogQHRocm93cyBFcnJvciBpZiBhIGRlcGVuZGVuY3kgY3ljbGUgaXMgZGV0ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gX3Jlc29sdmUob2JqLCBwcm9wLCBtb2R1bGUsIGluamVjdG9yKSB7XG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmpbcHJvcF0gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zdHJ1Y3Rpb24gZmFpbHVyZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdXIgZGVwZW5kZW5jaWVzIGFyZSBjb25zdHJ1Y3RhYmxlLicsIHsgY2F1c2U6IG9ialtwcm9wXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqW3Byb3BdID09PSBfX3JlcXVlc3RlZF9fKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlIGRldGVjdGVkLiBQbGVhc2UgbWFrZSBcIicgKyBTdHJpbmcocHJvcCkgKyAnXCIgbGF6eS4gU2VlIGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXNlcnZpY2VzLyNyZXNvbHZpbmctY3ljbGljLWRlcGVuZGVuY2llcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpbcHJvcF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb3AgaW4gbW9kdWxlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW3Byb3BdO1xuICAgICAgICBvYmpbcHJvcF0gPSBfX3JlcXVlc3RlZF9fO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgb2JqW3Byb3BdID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgPyB2YWx1ZShpbmplY3RvcikgOiBfaW5qZWN0KHZhbHVlLCBpbmplY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBvYmpbcHJvcF0gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqW3Byb3BdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcC1tZXJnZSBvZiB0d28gbW9kdWxlcyBieSB3cml0aW5nIHNvdXJjZSBlbnRyaWVzIGludG8gdGhlIHRhcmdldCBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHRhcmdldCB0aGUgbW9kdWxlIHdoaWNoIGlzIHdyaXR0ZW5cbiAqIEBwYXJhbSBzb3VyY2UgdGhlIG1vZHVsZSB3aGljaCBpcyByZWFkXG4gKiBAcmV0dXJucyB0aGUgdGFyZ2V0IG1vZHVsZVxuICovXG5mdW5jdGlvbiBfbWVyZ2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZTEgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUxICE9PSBudWxsICYmIHZhbHVlMiAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUxID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IF9tZXJnZSh2YWx1ZTEsIHZhbHVlMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGVuZGVuY3ktaW5qZWN0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9jb21tZW50LXByb3ZpZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRhdGlvbi1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2pzZG9jLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9ncmFtbWFyLWNvbmZpZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xhbmd1YWdlLW1ldGEtZGF0YS5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCAqIGZyb20gJy4vYXN5bmMtcGFyc2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcGxldGlvbi1wYXJzZXItYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NzdC1ub2RlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ2l1bS1wYXJzZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sZXhlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlci1jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbi1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsdWUtY29udmVydGVyLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9saW5rZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9uYW1lLXByb3ZpZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmNlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Njb3BlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NvcGUtY29tcHV0YXRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY29wZS1wcm92aWRlci5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCAqIGZyb20gJy4vaHlkcmF0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uLXNlcmlhbGl6ZXIuanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgY2xhc3MgRW1wdHlGaWxlU3lzdGVtUHJvdmlkZXIge1xuICAgIHJlYWRGaWxlKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGZpbGUgc3lzdGVtIGlzIGF2YWlsYWJsZS4nKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZERpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBFbXB0eUZpbGVTeXN0ZW0gPSB7XG4gICAgZmlsZVN5c3RlbVByb3ZpZGVyOiAoKSA9PiBuZXcgRW1wdHlGaWxlU3lzdGVtUHJvdmlkZXIoKVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUtc3lzdGVtLXByb3ZpZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUsIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlIH0gZnJvbSAnLi4vZGVmYXVsdC1tb2R1bGUuanMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnLi4vZGVwZW5kZW5jeS1pbmplY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgYXN0IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IEVtcHR5RmlsZVN5c3RlbSB9IGZyb20gJy4uL3dvcmtzcGFjZS9maWxlLXN5c3RlbS1wcm92aWRlci5qcyc7XG5pbXBvcnQgeyBVUkkgfSBmcm9tICcuL3VyaS11dGlscy5qcyc7XG5jb25zdCBtaW5pbWFsR3JhbW1hck1vZHVsZSA9IHtcbiAgICBHcmFtbWFyOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgTGFuZ3VhZ2VNZXRhRGF0YTogKCkgPT4gKHtcbiAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgICAgZmlsZUV4dGVuc2lvbnM6IFsnLmxhbmdpdW0nXSxcbiAgICAgICAgbGFuZ3VhZ2VJZDogJ2xhbmdpdW0nXG4gICAgfSlcbn07XG5jb25zdCBtaW5pbWFsU2hhcmVkR3JhbW1hck1vZHVsZSA9IHtcbiAgICBBc3RSZWZsZWN0aW9uOiAoKSA9PiBuZXcgYXN0LkxhbmdpdW1HcmFtbWFyQXN0UmVmbGVjdGlvbigpXG59O1xuZnVuY3Rpb24gY3JlYXRlTWluaW1hbEdyYW1tYXJTZXJ2aWNlcygpIHtcbiAgICBjb25zdCBzaGFyZWQgPSBpbmplY3QoY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUoRW1wdHlGaWxlU3lzdGVtKSwgbWluaW1hbFNoYXJlZEdyYW1tYXJNb2R1bGUpO1xuICAgIGNvbnN0IGdyYW1tYXIgPSBpbmplY3QoY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUoeyBzaGFyZWQgfSksIG1pbmltYWxHcmFtbWFyTW9kdWxlKTtcbiAgICBzaGFyZWQuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKGdyYW1tYXIpO1xuICAgIHJldHVybiBncmFtbWFyO1xufVxuLyoqXG4gKiBMb2FkIGEgTGFuZ2l1bSBncmFtbWFyIGZvciB5b3VyIGxhbmd1YWdlIGZyb20gYSBKU09OIHN0cmluZy4gVGhpcyBpcyB1c2VkIGJ5IHNldmVyYWwgc2VydmljZXMsXG4gKiBtb3N0IG5vdGFibHkgdGhlIHBhcnNlciBidWlsZGVyIHdoaWNoIGludGVycHJldHMgdGhlIGdyYW1tYXIgdG8gY3JlYXRlIGEgcGFyc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEdyYW1tYXJGcm9tSnNvbihqc29uKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY3JlYXRlTWluaW1hbEdyYW1tYXJTZXJ2aWNlcygpO1xuICAgIGNvbnN0IGFzdE5vZGUgPSBzZXJ2aWNlcy5zZXJpYWxpemVyLkpzb25TZXJpYWxpemVyLmRlc2VyaWFsaXplKGpzb24pO1xuICAgIHNlcnZpY2VzLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tTW9kZWwoYXN0Tm9kZSwgVVJJLnBhcnNlKGBtZW1vcnk6Ly8keyhfYSA9IGFzdE5vZGUubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2dyYW1tYXInfS5sYW5naXVtYCkpO1xuICAgIHJldHVybiBhc3ROb2RlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhbW1hci1sb2FkZXIuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMyBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgKiBmcm9tICcuL2NhY2hpbmcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbGxlY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlzcG9zYWJsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyYW1tYXItbG9hZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvbWlzZS11dGlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmVhbS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3VyaS11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBBc3RVdGlscyBmcm9tICcuL2FzdC11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBDYW5jZWxsYXRpb24gZnJvbSAnLi9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0ICogYXMgQ3N0VXRpbHMgZnJvbSAnLi9jc3QtdXRpbHMuanMnO1xuaW1wb3J0ICogYXMgR3JhbW1hclV0aWxzIGZyb20gJy4vZ3JhbW1hci11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBSZWdFeHBVdGlscyBmcm9tICcuL3JlZ2V4cC11dGlscy5qcyc7XG5leHBvcnQgeyBBc3RVdGlscywgQ2FuY2VsbGF0aW9uLCBDc3RVdGlscywgR3JhbW1hclV0aWxzLCBSZWdFeHBVdGlscyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMyBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50LXZhbGlkYXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb24tcmVnaXN0cnkuanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMyBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgKiBmcm9tICcuL2FzdC1kZXNjcmlwdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hc3Qtbm9kZS1sb2NhdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlndXJhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50LWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLXN5c3RlbS1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZGV4LW1hbmFnZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3Jrc3BhY2UtbG9jay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtzcGFjZS1tYW5hZ2VyLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0LW1vZHVsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlcGVuZGVuY3ktaW5qZWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZS1yZWdpc3RyeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3ludGF4LXRyZWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudGF0aW9uL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2VzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2VyL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmNlcy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcmlhbGl6ZXIvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb24vaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3Jrc3BhY2UvaW5kZXguanMnO1xuLy8gRXhwb3J0IHRoZSBMYW5naXVtIEdyYW1tYXIgQVNUIGRlZmluaXRpb25zIGluIHRoZSBgR3JhbW1hckFTVGAgbmFtZXNwYWNlXG5pbXBvcnQgKiBhcyBHcmFtbWFyQVNUIGZyb20gJy4vbGFuZ3VhZ2VzL2dlbmVyYXRlZC9hc3QuanMnO1xuZXhwb3J0IHsgR3JhbW1hckFTVCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvZ2VuZXJhdGVkL2FzdC50c1xuaW1wb3J0IHsgQWJzdHJhY3RBc3RSZWZsZWN0aW9uIH0gZnJvbSBcImxhbmdpdW1cIjtcbnZhciBTdGF0ZW1lbnQgPSBcIlN0YXRlbWVudFwiO1xudmFyIEFyY2hpdGVjdHVyZSA9IFwiQXJjaGl0ZWN0dXJlXCI7XG5mdW5jdGlvbiBpc0FyY2hpdGVjdHVyZShpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQXJjaGl0ZWN0dXJlKTtcbn1cbl9fbmFtZShpc0FyY2hpdGVjdHVyZSwgXCJpc0FyY2hpdGVjdHVyZVwiKTtcbnZhciBCcmFuY2ggPSBcIkJyYW5jaFwiO1xuZnVuY3Rpb24gaXNCcmFuY2goaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEJyYW5jaCk7XG59XG5fX25hbWUoaXNCcmFuY2gsIFwiaXNCcmFuY2hcIik7XG52YXIgQ2hlY2tvdXQgPSBcIkNoZWNrb3V0XCI7XG52YXIgQ2hlcnJ5UGlja2luZyA9IFwiQ2hlcnJ5UGlja2luZ1wiO1xudmFyIENvbW1pdCA9IFwiQ29tbWl0XCI7XG5mdW5jdGlvbiBpc0NvbW1pdChpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQ29tbWl0KTtcbn1cbl9fbmFtZShpc0NvbW1pdCwgXCJpc0NvbW1pdFwiKTtcbnZhciBDb21tb24gPSBcIkNvbW1vblwiO1xuZnVuY3Rpb24gaXNDb21tb24oaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIENvbW1vbik7XG59XG5fX25hbWUoaXNDb21tb24sIFwiaXNDb21tb25cIik7XG52YXIgR2l0R3JhcGggPSBcIkdpdEdyYXBoXCI7XG5mdW5jdGlvbiBpc0dpdEdyYXBoKGl0ZW0pIHtcbiAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHaXRHcmFwaCk7XG59XG5fX25hbWUoaXNHaXRHcmFwaCwgXCJpc0dpdEdyYXBoXCIpO1xudmFyIEluZm8gPSBcIkluZm9cIjtcbmZ1bmN0aW9uIGlzSW5mbyhpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgSW5mbyk7XG59XG5fX25hbWUoaXNJbmZvLCBcImlzSW5mb1wiKTtcbnZhciBNZXJnZSA9IFwiTWVyZ2VcIjtcbmZ1bmN0aW9uIGlzTWVyZ2UoaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIE1lcmdlKTtcbn1cbl9fbmFtZShpc01lcmdlLCBcImlzTWVyZ2VcIik7XG52YXIgUGFja2V0ID0gXCJQYWNrZXRcIjtcbmZ1bmN0aW9uIGlzUGFja2V0KGl0ZW0pIHtcbiAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBQYWNrZXQpO1xufVxuX19uYW1lKGlzUGFja2V0LCBcImlzUGFja2V0XCIpO1xudmFyIFBhY2tldEJsb2NrID0gXCJQYWNrZXRCbG9ja1wiO1xuZnVuY3Rpb24gaXNQYWNrZXRCbG9jayhpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgUGFja2V0QmxvY2spO1xufVxuX19uYW1lKGlzUGFja2V0QmxvY2ssIFwiaXNQYWNrZXRCbG9ja1wiKTtcbnZhciBQaWUgPSBcIlBpZVwiO1xuZnVuY3Rpb24gaXNQaWUoaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFBpZSk7XG59XG5fX25hbWUoaXNQaWUsIFwiaXNQaWVcIik7XG52YXIgUGllU2VjdGlvbiA9IFwiUGllU2VjdGlvblwiO1xuZnVuY3Rpb24gaXNQaWVTZWN0aW9uKGl0ZW0pIHtcbiAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBQaWVTZWN0aW9uKTtcbn1cbl9fbmFtZShpc1BpZVNlY3Rpb24sIFwiaXNQaWVTZWN0aW9uXCIpO1xudmFyIERpcmVjdGlvbiA9IFwiRGlyZWN0aW9uXCI7XG52YXIgTWVybWFpZEFzdFJlZmxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIEFic3RyYWN0QXN0UmVmbGVjdGlvbiB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiTWVybWFpZEFzdFJlZmxlY3Rpb25cIik7XG4gIH1cbiAgZ2V0QWxsVHlwZXMoKSB7XG4gICAgcmV0dXJuIFtcIkFyY2hpdGVjdHVyZVwiLCBcIkJyYW5jaFwiLCBcIkNoZWNrb3V0XCIsIFwiQ2hlcnJ5UGlja2luZ1wiLCBcIkNvbW1pdFwiLCBcIkNvbW1vblwiLCBcIkRpcmVjdGlvblwiLCBcIkVkZ2VcIiwgXCJHaXRHcmFwaFwiLCBcIkdyb3VwXCIsIFwiSW5mb1wiLCBcIkp1bmN0aW9uXCIsIFwiTWVyZ2VcIiwgXCJQYWNrZXRcIiwgXCJQYWNrZXRCbG9ja1wiLCBcIlBpZVwiLCBcIlBpZVNlY3Rpb25cIiwgXCJTZXJ2aWNlXCIsIFwiU3RhdGVtZW50XCJdO1xuICB9XG4gIGNvbXB1dGVJc1N1YnR5cGUoc3VidHlwZSwgc3VwZXJ0eXBlKSB7XG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIEJyYW5jaDpcbiAgICAgIGNhc2UgQ2hlY2tvdXQ6XG4gICAgICBjYXNlIENoZXJyeVBpY2tpbmc6XG4gICAgICBjYXNlIENvbW1pdDpcbiAgICAgIGNhc2UgTWVyZ2U6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFN0YXRlbWVudCwgc3VwZXJ0eXBlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRGlyZWN0aW9uOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VidHlwZShHaXRHcmFwaCwgc3VwZXJ0eXBlKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRSZWZlcmVuY2VUeXBlKHJlZkluZm8pIHtcbiAgICBjb25zdCByZWZlcmVuY2VJZCA9IGAke3JlZkluZm8uY29udGFpbmVyLiR0eXBlfToke3JlZkluZm8ucHJvcGVydHl9YDtcbiAgICBzd2l0Y2ggKHJlZmVyZW5jZUlkKSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWZlcmVuY2VJZH0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRUeXBlTWV0YURhdGEodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIkFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJBcmNoaXRlY3R1cmVcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjRGVzY3JcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFjY1RpdGxlXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJlZGdlc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZ3JvdXBzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJqdW5jdGlvbnNcIiwgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInNlcnZpY2VzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQnJhbmNoXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkJyYW5jaFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJvcmRlclwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQ2hlY2tvdXRcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiQ2hlY2tvdXRcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYnJhbmNoXCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDaGVycnlQaWNraW5nXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkNoZXJyeVBpY2tpbmdcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInBhcmVudFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGFnc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQ29tbWl0XCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkNvbW1pdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibWVzc2FnZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGFnc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidHlwZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQ29tbW9uXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkNvbW1vblwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NEZXNjclwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjVGl0bGVcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInRpdGxlXCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJFZGdlXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkVkZ2VcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwibGhzRGlyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJsaHNHcm91cFwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibGhzSWRcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImxoc0ludG9cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInJoc0RpclwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwicmhzR3JvdXBcIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInJoc0lkXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJyaHNJbnRvXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiR2l0R3JhcGhcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR2l0R3JhcGhcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjRGVzY3JcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFjY1RpdGxlXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJzdGF0ZW1lbnRzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiR3JvdXBcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR3JvdXBcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiaWNvblwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImluXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiSW5mb1wiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJJbmZvXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFjY0Rlc2NyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NUaXRsZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGl0bGVcIiB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcIkp1bmN0aW9uXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkp1bmN0aW9uXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJpblwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiTWVyZ2VcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiTWVyZ2VcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYnJhbmNoXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGFnc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidHlwZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiUGFja2V0XCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIlBhY2tldFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NEZXNjclwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjVGl0bGVcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImJsb2Nrc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGl0bGVcIiB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcIlBhY2tldEJsb2NrXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIlBhY2tldEJsb2NrXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImVuZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibGFiZWxcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInN0YXJ0XCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJQaWVcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiUGllXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFjY0Rlc2NyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NUaXRsZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic2VjdGlvbnNcIiwgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInNob3dEYXRhXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiUGllU2VjdGlvblwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJQaWVTZWN0aW9uXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImxhYmVsXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ2YWx1ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiU2VydmljZVwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJTZXJ2aWNlXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImljb25cIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImljb25UZXh0XCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaW5cIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInRpdGxlXCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJEaXJlY3Rpb25cIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiRGlyZWN0aW9uXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFjY0Rlc2NyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NUaXRsZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZGlyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJzdGF0ZW1lbnRzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdHlwZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbnZhciByZWZsZWN0aW9uID0gbmV3IE1lcm1haWRBc3RSZWZsZWN0aW9uKCk7XG5cbi8vIHNyYy9sYW5ndWFnZS9nZW5lcmF0ZWQvZ3JhbW1hci50c1xuaW1wb3J0IHsgbG9hZEdyYW1tYXJGcm9tSnNvbiB9IGZyb20gXCJsYW5naXVtXCI7XG52YXIgbG9hZGVkSW5mb0dyYW1tYXI7XG52YXIgSW5mb0dyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZEluZm9HcmFtbWFyID8/IChsb2FkZWRJbmZvR3JhbW1hciA9IGxvYWRHcmFtbWFyRnJvbUpzb24oJ3tcIiR0eXBlXCI6XCJHcmFtbWFyXCIsXCJpc0RlY2xhcmVkXCI6dHJ1ZSxcIm5hbWVcIjpcIkluZm9cIixcImltcG9ydHNcIjpbXSxcInJ1bGVzXCI6W3tcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJJbmZvXCIsXCJlbnRyeVwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiaW5mb1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJzaG93SW5mb1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XSxcImNhcmRpbmFsaXR5XCI6XCI/XCJ9LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMVwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIj9cIn1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJUaXRsZUFuZEFjY2Vzc2liaWxpdGllc1wiLFwiZnJhZ21lbnRcIjp0cnVlLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY0Rlc2NyXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJhY2NUaXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXX1dLFwiY2FyZGluYWxpdHlcIjpcIitcIn0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiRU9MXCIsXCJmcmFnbWVudFwiOnRydWUsXCJkYXRhVHlwZVwiOlwic3RyaW5nXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AzXCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSx7XCIkdHlwZVwiOlwiRW5kT2ZGaWxlXCJ9XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJORVdMSU5FXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvXFxcXFxcXFxyP1xcXFxcXFxcbi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFDQ19ERVNDUlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSphY2NEZXNjcig/OltcXFxcXFxcXHQgXSo6KFteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopfFxcXFxcXFxccyp7KFtefV0qKX0pL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX1RJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY1RpdGxlW1xcXFxcXFxcdCBdKjooPzpbXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXlxcXFxcXFxcblxcXFxcXFxccl0qKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIlRJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKnRpdGxlKD86W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKnwpL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIldISVRFU1BBQ0VcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0rL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJZQU1MXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvLS0tW1xcXFxcXFxcdCBdKlxcXFxcXFxccj9cXFxcXFxcXG4oPzpbXFxcXFxcXFxTXFxcXFxcXFxzXSo/XFxcXFxcXFxyP1xcXFxcXFxcbik/LS0tKD86XFxcXFxcXFxyP1xcXFxcXFxcbnwoPyFcXFxcXFxcXFMpKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiRElSRUNUSVZFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUle1tcXFxcXFxcXFNcXFxcXFxcXHNdKj99JSUoPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJTSU5HTEVfTElORV9DT01NRU5UXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUlW15cXFxcXFxcXG5cXFxcXFxcXHJdKi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfV0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcImludGVyZmFjZXNcIjpbe1wiJHR5cGVcIjpcIkludGVyZmFjZVwiLFwibmFtZVwiOlwiQ29tbW9uXCIsXCJhdHRyaWJ1dGVzXCI6W3tcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NEZXNjclwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY1RpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwidGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19XSxcInN1cGVyVHlwZXNcIjpbXX1dLFwidHlwZXNcIjpbXSxcInVzZWRHcmFtbWFyc1wiOltdfScpKSwgXCJJbmZvR3JhbW1hclwiKTtcbnZhciBsb2FkZWRQYWNrZXRHcmFtbWFyO1xudmFyIFBhY2tldEdyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZFBhY2tldEdyYW1tYXIgPz8gKGxvYWRlZFBhY2tldEdyYW1tYXIgPSBsb2FkR3JhbW1hckZyb21Kc29uKGB7XCIkdHlwZVwiOlwiR3JhbW1hclwiLFwiaXNEZWNsYXJlZFwiOnRydWUsXCJuYW1lXCI6XCJQYWNrZXRcIixcImltcG9ydHNcIjpbXSxcInJ1bGVzXCI6W3tcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQYWNrZXRcIixcImVudHJ5XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJwYWNrZXQtYmV0YVwifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A0XCJ9LFwiYXJndW1lbnRzXCI6W119LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJibG9ja3NcIixcIm9wZXJhdG9yXCI6XCIrPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A2XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYmxvY2tzXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIitcIn1dfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQYWNrZXRCbG9ja1wiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInN0YXJ0XCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCItXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJlbmRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfX1dLFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJsYWJlbFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AzXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDVcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJJTlRcIixcInR5cGVcIjp7XCIkdHlwZVwiOlwiUmV0dXJuVHlwZVwiLFwibmFtZVwiOlwibnVtYmVyXCJ9LFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiLzB8WzEtOV1bMC05XSovXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJTVFJJTkdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXCJbXlxcXFxcIl0qXFxcXFwifCdbXiddKicvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXNcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJhY2NEZXNjclwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A3XCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYWNjVGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOFwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInRpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDlcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119XSxcImNhcmRpbmFsaXR5XCI6XCIrXCJ9LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIkVPTFwiLFwiZnJhZ21lbnRcIjp0cnVlLFwiZGF0YVR5cGVcIjpcInN0cmluZ1wiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIitcIn0se1wiJHR5cGVcIjpcIkVuZE9mRmlsZVwifV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiTkVXTElORVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1xcXFxcXFxccj9cXFxcXFxcXG4vXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBQ0NfREVTQ1JcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXFxcXFx0IF0qOihbXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXlxcXFxcXFxcblxcXFxcXFxccl0qKXxcXFxcXFxcXHMqeyhbXn1dKil9KS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFDQ19USVRMRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSphY2NUaXRsZVtcXFxcXFxcXHQgXSo6KD86W15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W15cXFxcXFxcXG5cXFxcXFxcXHJdKikvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJUSVRMRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSp0aXRsZSg/OltcXFxcXFxcXHQgXVteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFtcXFxcXFxcXHQgXVteXFxcXFxcXFxuXFxcXFxcXFxyXSp8KS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJXSElURVNQQUNFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKy9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiWUFNTFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiLy0tLVtcXFxcXFxcXHQgXSpcXFxcXFxcXHI/XFxcXFxcXFxuKD86W1xcXFxcXFxcU1xcXFxcXFxcc10qP1xcXFxcXFxccj9cXFxcXFxcXG4pPy0tLSg/OlxcXFxcXFxccj9cXFxcXFxcXG58KD8hXFxcXFxcXFxTKSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIkRJUkVDVElWRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSolJXtbXFxcXFxcXFxTXFxcXFxcXFxzXSo/fSUlKD86XFxcXFxcXFxyP1xcXFxcXFxcbnwoPyFcXFxcXFxcXFMpKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiU0lOR0xFX0xJTkVfQ09NTUVOVFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSolJVteXFxcXFxcXFxuXFxcXFxcXFxyXSovXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX1dLFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJpbnRlcmZhY2VzXCI6W3tcIiR0eXBlXCI6XCJJbnRlcmZhY2VcIixcIm5hbWVcIjpcIkNvbW1vblwiLFwiYXR0cmlidXRlc1wiOlt7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwiYWNjRGVzY3JcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19LHtcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NUaXRsZVwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcInRpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fV0sXCJzdXBlclR5cGVzXCI6W119XSxcInR5cGVzXCI6W10sXCJ1c2VkR3JhbW1hcnNcIjpbXX1gKSksIFwiUGFja2V0R3JhbW1hclwiKTtcbnZhciBsb2FkZWRQaWVHcmFtbWFyO1xudmFyIFBpZUdyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZFBpZUdyYW1tYXIgPz8gKGxvYWRlZFBpZUdyYW1tYXIgPSBsb2FkR3JhbW1hckZyb21Kc29uKCd7XCIkdHlwZVwiOlwiR3JhbW1hclwiLFwiaXNEZWNsYXJlZFwiOnRydWUsXCJuYW1lXCI6XCJQaWVcIixcImltcG9ydHNcIjpbXSxcInJ1bGVzXCI6W3tcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQaWVcIixcImVudHJ5XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJwaWVcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInNob3dEYXRhXCIsXCJvcGVyYXRvclwiOlwiPz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJzaG93RGF0YVwifSxcImNhcmRpbmFsaXR5XCI6XCI/XCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A2XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInNlY3Rpb25zXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIipcIn1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIitcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInNlY3Rpb25zXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIitcIn1dfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQaWVTZWN0aW9uXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibGFiZWxcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ2YWx1ZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AzXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDVcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJQSUVfU0VDVElPTl9MQUJFTFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1xcXFxcIlteXFxcXFwiXStcXFxcXCIvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJQSUVfU0VDVElPTl9WQUxVRVwiLFwidHlwZVwiOntcIiR0eXBlXCI6XCJSZXR1cm5UeXBlXCIsXCJuYW1lXCI6XCJudW1iZXJcIn0sXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvKDB8WzEtOV1bMC05XSopKFxcXFxcXFxcLlswLTldKyk/L1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzXCIsXCJmcmFnbWVudFwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYWNjRGVzY3JcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAN1wifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY1RpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDhcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0aXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A5XCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANVwifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFT0xcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRhdGFUeXBlXCI6XCJzdHJpbmdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIrXCJ9LHtcIiR0eXBlXCI6XCJFbmRPZkZpbGVcIn1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIk5FV0xJTkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXHI/XFxcXFxcXFxuL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX0RFU0NSXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFxcXFxcdCBdKjooW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W15cXFxcXFxcXG5cXFxcXFxcXHJdKil8XFxcXFxcXFxzKnsoW159XSopfSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBQ0NfVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qYWNjVGl0bGVbXFxcXFxcXFx0IF0qOig/OlteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qdGl0bGUoPzpbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qfCkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiV0hJVEVTUEFDRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSsvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIllBTUxcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi8tLS1bXFxcXFxcXFx0IF0qXFxcXFxcXFxyP1xcXFxcXFxcbig/OltcXFxcXFxcXFNcXFxcXFxcXHNdKj9cXFxcXFxcXHI/XFxcXFxcXFxuKT8tLS0oPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJESVJFQ1RJVkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSV7W1xcXFxcXFxcU1xcXFxcXFxcc10qP30lJSg/OlxcXFxcXFxccj9cXFxcXFxcXG58KD8hXFxcXFxcXFxTKSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIlNJTkdMRV9MSU5FX0NPTU1FTlRcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSVbXlxcXFxcXFxcblxcXFxcXFxccl0qL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9XSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwiaW50ZXJmYWNlc1wiOlt7XCIkdHlwZVwiOlwiSW50ZXJmYWNlXCIsXCJuYW1lXCI6XCJDb21tb25cIixcImF0dHJpYnV0ZXNcIjpbe1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY0Rlc2NyXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwiYWNjVGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19LHtcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJ0aXRsZVwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX1dLFwic3VwZXJUeXBlc1wiOltdfV0sXCJ0eXBlc1wiOltdLFwidXNlZEdyYW1tYXJzXCI6W119JykpLCBcIlBpZUdyYW1tYXJcIik7XG52YXIgbG9hZGVkQXJjaGl0ZWN0dXJlR3JhbW1hcjtcbnZhciBBcmNoaXRlY3R1cmVHcmFtbWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBsb2FkZWRBcmNoaXRlY3R1cmVHcmFtbWFyID8/IChsb2FkZWRBcmNoaXRlY3R1cmVHcmFtbWFyID0gbG9hZEdyYW1tYXJGcm9tSnNvbigne1wiJHR5cGVcIjpcIkdyYW1tYXJcIixcImlzRGVjbGFyZWRcIjp0cnVlLFwibmFtZVwiOlwiQXJjaGl0ZWN0dXJlXCIsXCJpbXBvcnRzXCI6W10sXCJydWxlc1wiOlt7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQXJjaGl0ZWN0dXJlXCIsXCJlbnRyeVwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE4XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImFyY2hpdGVjdHVyZS1iZXRhXCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOFwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxNlwifSxcImFyZ3VtZW50c1wiOltdfV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOFwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMThcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJTdGF0ZW1lbnRcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiZ3JvdXBzXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwic2VydmljZXNcIixcIm9wZXJhdG9yXCI6XCIrPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJqdW5jdGlvbnNcIixcIm9wZXJhdG9yXCI6XCIrPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDdcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJlZGdlc1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJMZWZ0UG9ydFwiLFwiZnJhZ21lbnRcIjp0cnVlLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJsaHNEaXJcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOVwifSxcImFyZ3VtZW50c1wiOltdfX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJSaWdodFBvcnRcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJyaHNEaXJcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOVwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQXJyb3dcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibGhzSW50b1wiLFwib3BlcmF0b3JcIjpcIj89XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTVcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIi0tXCJ9LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCItXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0aXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxM1wifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCItXCJ9XX1dfSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwicmhzSW50b1wiLFwib3BlcmF0b3JcIjpcIj89XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTVcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJHcm91cFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJncm91cFwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiaWRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTBcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpY29uXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEyXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInRpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEzXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImluXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpblwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMFwifSxcImFyZ3VtZW50c1wiOltdfX1dLFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJTZXJ2aWNlXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInNlcnZpY2VcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImlkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEwXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiaWNvblRleHRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTFcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpY29uXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEyXCJ9LFwiYXJndW1lbnRzXCI6W119fV0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTNcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiaW5cIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImluXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEwXCJ9LFwiYXJndW1lbnRzXCI6W119fV0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE3XCJ9LFwiYXJndW1lbnRzXCI6W119XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIkp1bmN0aW9uXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImp1bmN0aW9uXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpZFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMFwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImluXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpblwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMFwifSxcImFyZ3VtZW50c1wiOltdfX1dLFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFZGdlXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibGhzSWRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTBcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJsaHNHcm91cFwiLFwib3BlcmF0b3JcIjpcIj89XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTRcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInJoc0lkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEwXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwicmhzR3JvdXBcIixcIm9wZXJhdG9yXCI6XCI/PVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE0XCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSUk9XX0RJUkVDVElPTlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJUZXJtaW5hbEFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlRlcm1pbmFsQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiVGVybWluYWxBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJDaGFyYWN0ZXJSYW5nZVwiLFwibGVmdFwiOntcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiTFwifX0se1wiJHR5cGVcIjpcIkNoYXJhY3RlclJhbmdlXCIsXCJsZWZ0XCI6e1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJSXCJ9fV19LHtcIiR0eXBlXCI6XCJDaGFyYWN0ZXJSYW5nZVwiLFwibGVmdFwiOntcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiVFwifX1dfSx7XCIkdHlwZVwiOlwiQ2hhcmFjdGVyUmFuZ2VcIixcImxlZnRcIjp7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIkJcIn19XX0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSQ0hfSURcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx3XSsvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBUkNIX1RFWFRfSUNPTlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1xcXFxcXFxcKFxcXFxcIlteXFxcXFwiXStcXFxcXCJcXFxcXFxcXCkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBUkNIX0lDT05cIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXChbXFxcXFxcXFx3LTpdK1xcXFxcXFxcKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSQ0hfVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXFtbXFxcXFxcXFx3IF0rXFxcXFxcXFxdL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQVJST1dfR1JPVVBcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXHtncm91cFxcXFxcXFxcfS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSUk9XX0lOVE9cIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi88fD4vXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXNcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJhY2NEZXNjclwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOVwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY1RpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMjFcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFT0xcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRhdGFUeXBlXCI6XCJzdHJpbmdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE4XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSx7XCIkdHlwZVwiOlwiRW5kT2ZGaWxlXCJ9XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJORVdMSU5FXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvXFxcXFxcXFxyP1xcXFxcXFxcbi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFDQ19ERVNDUlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSphY2NEZXNjcig/OltcXFxcXFxcXHQgXSo6KFteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopfFxcXFxcXFxccyp7KFtefV0qKX0pL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX1RJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY1RpdGxlW1xcXFxcXFxcdCBdKjooPzpbXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXlxcXFxcXFxcblxcXFxcXFxccl0qKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIlRJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKnRpdGxlKD86W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKnwpL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIldISVRFU1BBQ0VcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0rL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJZQU1MXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvLS0tW1xcXFxcXFxcdCBdKlxcXFxcXFxccj9cXFxcXFxcXG4oPzpbXFxcXFxcXFxTXFxcXFxcXFxzXSo/XFxcXFxcXFxyP1xcXFxcXFxcbik/LS0tKD86XFxcXFxcXFxyP1xcXFxcXFxcbnwoPyFcXFxcXFxcXFMpKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiRElSRUNUSVZFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUle1tcXFxcXFxcXFNcXFxcXFxcXHNdKj99JSUoPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJTSU5HTEVfTElORV9DT01NRU5UXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUlW15cXFxcXFxcXG5cXFxcXFxcXHJdKi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfV0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcImludGVyZmFjZXNcIjpbe1wiJHR5cGVcIjpcIkludGVyZmFjZVwiLFwibmFtZVwiOlwiQ29tbW9uXCIsXCJhdHRyaWJ1dGVzXCI6W3tcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NEZXNjclwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY1RpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwidGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19XSxcInN1cGVyVHlwZXNcIjpbXX1dLFwidHlwZXNcIjpbXSxcInVzZWRHcmFtbWFyc1wiOltdfScpKSwgXCJBcmNoaXRlY3R1cmVHcmFtbWFyXCIpO1xudmFyIGxvYWRlZEdpdEdyYXBoR3JhbW1hcjtcbnZhciBHaXRHcmFwaEdyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZEdpdEdyYXBoR3JhbW1hciA/PyAobG9hZGVkR2l0R3JhcGhHcmFtbWFyID0gbG9hZEdyYW1tYXJGcm9tSnNvbihge1wiJHR5cGVcIjpcIkdyYW1tYXJcIixcImlzRGVjbGFyZWRcIjp0cnVlLFwibmFtZVwiOlwiR2l0R3JhcGhcIixcImludGVyZmFjZXNcIjpbe1wiJHR5cGVcIjpcIkludGVyZmFjZVwiLFwibmFtZVwiOlwiQ29tbW9uXCIsXCJhdHRyaWJ1dGVzXCI6W3tcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NEZXNjclwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY1RpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwidGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19XSxcInN1cGVyVHlwZXNcIjpbXX1dLFwicnVsZXNcIjpbe1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzXCIsXCJmcmFnbWVudFwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYWNjRGVzY3JcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAM1wifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY1RpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0aXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMVwifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFT0xcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRhdGFUeXBlXCI6XCJzdHJpbmdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIrXCJ9LHtcIiR0eXBlXCI6XCJFbmRPZkZpbGVcIn1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIk5FV0xJTkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXHI/XFxcXFxcXFxuL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX0RFU0NSXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFxcXFxcdCBdKjooW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W15cXFxcXFxcXG5cXFxcXFxcXHJdKil8XFxcXFxcXFxzKnsoW159XSopfSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBQ0NfVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qYWNjVGl0bGVbXFxcXFxcXFx0IF0qOig/OlteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qdGl0bGUoPzpbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qfCkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiV0hJVEVTUEFDRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSsvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIllBTUxcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi8tLS1bXFxcXFxcXFx0IF0qXFxcXFxcXFxyP1xcXFxcXFxcbig/OltcXFxcXFxcXFNcXFxcXFxcXHNdKj9cXFxcXFxcXHI/XFxcXFxcXFxuKT8tLS0oPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJESVJFQ1RJVkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSV7W1xcXFxcXFxcU1xcXFxcXFxcc10qP30lJSg/OlxcXFxcXFxccj9cXFxcXFxcXG58KD8hXFxcXFxcXFxTKSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIlNJTkdMRV9MSU5FX0NPTU1FTlRcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSVbXlxcXFxcXFxcblxcXFxcXFxccl0qL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJHaXRHcmFwaFwiLFwiZW50cnlcIjp0cnVlLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyXCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImdpdEdyYXBoXCJ9LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJnaXRHcmFwaFwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIjpcIn1dfSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImdpdEdyYXBoOlwifSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiZ2l0R3JhcGhcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMlwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIjpcIn1dfV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMFwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwic3RhdGVtZW50c1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTFcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifV19XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiU3RhdGVtZW50XCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxM1wifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE0XCJ9LFwiYXJndW1lbnRzXCI6W119LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTVcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxNlwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE3XCJ9LFwiYXJndW1lbnRzXCI6W119XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIkRpcmVjdGlvblwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJkaXJcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiTFJcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJUQlwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIkJUXCJ9XX19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJDb21taXRcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiY29tbWl0XCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJpZDpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImlkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJtc2c6XCIsXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibWVzc2FnZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwidGFnOlwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGFnc1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMjBcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInR5cGU6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0eXBlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIk5PUk1BTFwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIlJFVkVSU0VcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJISUdITElHSFRcIn1dfX1dfV0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQnJhbmNoXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImJyYW5jaFwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibmFtZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOVwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119XX19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJvcmRlcjpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcIm9yZGVyXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE4XCJ9LFwiYXJndW1lbnRzXCI6W119fV0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiTWVyZ2VcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwibWVyZ2VcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImJyYW5jaFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOVwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119XX19LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJpZDpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImlkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJ0YWc6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0YWdzXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwidHlwZTpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInR5cGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiTk9STUFMXCJ9LHtcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiUkVWRVJTRVwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIkhJR0hMSUdIVFwifV19fV19XSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMVwifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJDaGVja291dFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJjaGVja291dFwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInN3aXRjaFwifV19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJicmFuY2hcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTlcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfV19fSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQ2hlcnJ5UGlja2luZ1wiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJjaGVycnktcGlja1wifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiaWQ6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpZFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwidGFnOlwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGFnc1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMjBcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInBhcmVudDpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInBhcmVudFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfV0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJJTlRcIixcInR5cGVcIjp7XCIkdHlwZVwiOlwiUmV0dXJuVHlwZVwiLFwibmFtZVwiOlwibnVtYmVyXCJ9LFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1swLTldKyg/PVxcXFxcXFxccykvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJJRFwiLFwidHlwZVwiOntcIiR0eXBlXCI6XCJSZXR1cm5UeXBlXCIsXCJuYW1lXCI6XCJzdHJpbmdcIn0sXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvXFxcXFxcXFx3KFstXFxcXFxcXFwuL1xcXFxcXFxcd10qWy1cXFxcXFxcXHddKT8vXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJTVFJJTkdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXCJbXlxcXFxcIl0qXFxcXFwifCdbXiddKicvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfV0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcImltcG9ydHNcIjpbXSxcInR5cGVzXCI6W10sXCJ1c2VkR3JhbW1hcnNcIjpbXX1gKSksIFwiR2l0R3JhcGhHcmFtbWFyXCIpO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvZ2VuZXJhdGVkL21vZHVsZS50c1xudmFyIEluZm9MYW5ndWFnZU1ldGFEYXRhID0ge1xuICBsYW5ndWFnZUlkOiBcImluZm9cIixcbiAgZmlsZUV4dGVuc2lvbnM6IFtcIi5tbWRcIiwgXCIubWVybWFpZFwiXSxcbiAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZVxufTtcbnZhciBQYWNrZXRMYW5ndWFnZU1ldGFEYXRhID0ge1xuICBsYW5ndWFnZUlkOiBcInBhY2tldFwiLFxuICBmaWxlRXh0ZW5zaW9uczogW1wiLm1tZFwiLCBcIi5tZXJtYWlkXCJdLFxuICBjYXNlSW5zZW5zaXRpdmU6IGZhbHNlXG59O1xudmFyIFBpZUxhbmd1YWdlTWV0YURhdGEgPSB7XG4gIGxhbmd1YWdlSWQ6IFwicGllXCIsXG4gIGZpbGVFeHRlbnNpb25zOiBbXCIubW1kXCIsIFwiLm1lcm1haWRcIl0sXG4gIGNhc2VJbnNlbnNpdGl2ZTogZmFsc2Vcbn07XG52YXIgQXJjaGl0ZWN0dXJlTGFuZ3VhZ2VNZXRhRGF0YSA9IHtcbiAgbGFuZ3VhZ2VJZDogXCJhcmNoaXRlY3R1cmVcIixcbiAgZmlsZUV4dGVuc2lvbnM6IFtcIi5tbWRcIiwgXCIubWVybWFpZFwiXSxcbiAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZVxufTtcbnZhciBHaXRHcmFwaExhbmd1YWdlTWV0YURhdGEgPSB7XG4gIGxhbmd1YWdlSWQ6IFwiZ2l0R3JhcGhcIixcbiAgZmlsZUV4dGVuc2lvbnM6IFtcIi5tbWRcIiwgXCIubWVybWFpZFwiXSxcbiAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZVxufTtcbnZhciBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlID0ge1xuICBBc3RSZWZsZWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IG5ldyBNZXJtYWlkQXN0UmVmbGVjdGlvbigpLCBcIkFzdFJlZmxlY3Rpb25cIilcbn07XG52YXIgSW5mb0dlbmVyYXRlZE1vZHVsZSA9IHtcbiAgR3JhbW1hcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBJbmZvR3JhbW1hcigpLCBcIkdyYW1tYXJcIiksXG4gIExhbmd1YWdlTWV0YURhdGE6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gSW5mb0xhbmd1YWdlTWV0YURhdGEsIFwiTGFuZ3VhZ2VNZXRhRGF0YVwiKSxcbiAgcGFyc2VyOiB7fVxufTtcbnZhciBQYWNrZXRHZW5lcmF0ZWRNb2R1bGUgPSB7XG4gIEdyYW1tYXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gUGFja2V0R3JhbW1hcigpLCBcIkdyYW1tYXJcIiksXG4gIExhbmd1YWdlTWV0YURhdGE6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gUGFja2V0TGFuZ3VhZ2VNZXRhRGF0YSwgXCJMYW5ndWFnZU1ldGFEYXRhXCIpLFxuICBwYXJzZXI6IHt9XG59O1xudmFyIFBpZUdlbmVyYXRlZE1vZHVsZSA9IHtcbiAgR3JhbW1hcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBQaWVHcmFtbWFyKCksIFwiR3JhbW1hclwiKSxcbiAgTGFuZ3VhZ2VNZXRhRGF0YTogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBQaWVMYW5ndWFnZU1ldGFEYXRhLCBcIkxhbmd1YWdlTWV0YURhdGFcIiksXG4gIHBhcnNlcjoge31cbn07XG52YXIgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlID0ge1xuICBHcmFtbWFyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IEFyY2hpdGVjdHVyZUdyYW1tYXIoKSwgXCJHcmFtbWFyXCIpLFxuICBMYW5ndWFnZU1ldGFEYXRhOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IEFyY2hpdGVjdHVyZUxhbmd1YWdlTWV0YURhdGEsIFwiTGFuZ3VhZ2VNZXRhRGF0YVwiKSxcbiAgcGFyc2VyOiB7fVxufTtcbnZhciBHaXRHcmFwaEdlbmVyYXRlZE1vZHVsZSA9IHtcbiAgR3JhbW1hcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBHaXRHcmFwaEdyYW1tYXIoKSwgXCJHcmFtbWFyXCIpLFxuICBMYW5ndWFnZU1ldGFEYXRhOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IEdpdEdyYXBoTGFuZ3VhZ2VNZXRhRGF0YSwgXCJMYW5ndWFnZU1ldGFEYXRhXCIpLFxuICBwYXJzZXI6IHt9XG59O1xuXG4vLyBzcmMvbGFuZ3VhZ2UvY29tbW9uL3ZhbHVlQ29udmVydGVyLnRzXG5pbXBvcnQgeyBEZWZhdWx0VmFsdWVDb252ZXJ0ZXIgfSBmcm9tIFwibGFuZ2l1bVwiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvY29tbW9uL21hdGNoZXIudHNcbnZhciBhY2Nlc3NpYmlsaXR5RGVzY3JSZWdleCA9IC9hY2NEZXNjcig/OltcXHQgXSo6KFteXFxuXFxyXSopfFxccyp7KFtefV0qKX0pLztcbnZhciBhY2Nlc3NpYmlsaXR5VGl0bGVSZWdleCA9IC9hY2NUaXRsZVtcXHQgXSo6KFteXFxuXFxyXSopLztcbnZhciB0aXRsZVJlZ2V4ID0gL3RpdGxlKFtcXHQgXVteXFxuXFxyXSp8KS87XG5cbi8vIHNyYy9sYW5ndWFnZS9jb21tb24vdmFsdWVDb252ZXJ0ZXIudHNcbnZhciBydWxlc1JlZ2V4ZXMgPSB7XG4gIEFDQ19ERVNDUjogYWNjZXNzaWJpbGl0eURlc2NyUmVnZXgsXG4gIEFDQ19USVRMRTogYWNjZXNzaWJpbGl0eVRpdGxlUmVnZXgsXG4gIFRJVExFOiB0aXRsZVJlZ2V4XG59O1xudmFyIEFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyID0gY2xhc3MgZXh0ZW5kcyBEZWZhdWx0VmFsdWVDb252ZXJ0ZXIge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyXCIpO1xuICB9XG4gIHJ1bkNvbnZlcnRlcihydWxlLCBpbnB1dCwgY3N0Tm9kZSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucnVuQ29tbW9uQ29udmVydGVyKHJ1bGUsIGlucHV0LCBjc3ROb2RlKTtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSB0aGlzLnJ1bkN1c3RvbUNvbnZlcnRlcihydWxlLCBpbnB1dCwgY3N0Tm9kZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gc3VwZXIucnVuQ29udmVydGVyKHJ1bGUsIGlucHV0LCBjc3ROb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJ1bkNvbW1vbkNvbnZlcnRlcihydWxlLCBpbnB1dCwgX2NzdE5vZGUpIHtcbiAgICBjb25zdCByZWdleCA9IHJ1bGVzUmVnZXhlc1tydWxlLm5hbWVdO1xuICAgIGlmIChyZWdleCA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaW5wdXQpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgaWYgKG1hdGNoWzFdICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBtYXRjaFsxXS50cmltKCkucmVwbGFjZSgvW1xcdCBdezIsfS9nbSwgXCIgXCIpO1xuICAgIH1cbiAgICBpZiAobWF0Y2hbMl0gIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIG1hdGNoWzJdLnJlcGxhY2UoL15cXHMqL2dtLCBcIlwiKS5yZXBsYWNlKC9cXHMrJC9nbSwgXCJcIikucmVwbGFjZSgvW1xcdCBdezIsfS9nbSwgXCIgXCIpLnJlcGxhY2UoL1tcXG5cXHJdezIsfS9nbSwgXCJcXG5cIik7XG4gICAgfVxuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbn07XG52YXIgQ29tbW9uVmFsdWVDb252ZXJ0ZXIgPSBjbGFzcyBleHRlbmRzIEFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJDb21tb25WYWx1ZUNvbnZlcnRlclwiKTtcbiAgfVxuICBydW5DdXN0b21Db252ZXJ0ZXIoX3J1bGUsIF9pbnB1dCwgX2NzdE5vZGUpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG59O1xuXG4vLyBzcmMvbGFuZ3VhZ2UvY29tbW9uL3Rva2VuQnVpbGRlci50c1xuaW1wb3J0IHsgRGVmYXVsdFRva2VuQnVpbGRlciB9IGZyb20gXCJsYW5naXVtXCI7XG52YXIgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyID0gY2xhc3MgZXh0ZW5kcyBEZWZhdWx0VG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXJcIik7XG4gIH1cbiAgY29uc3RydWN0b3Ioa2V5d29yZHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMua2V5d29yZHMgPSBuZXcgU2V0KGtleXdvcmRzKTtcbiAgfVxuICBidWlsZEtleXdvcmRUb2tlbnMocnVsZXMsIHRlcm1pbmFsVG9rZW5zLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdG9rZW5UeXBlcyA9IHN1cGVyLmJ1aWxkS2V5d29yZFRva2VucyhydWxlcywgdGVybWluYWxUb2tlbnMsIG9wdGlvbnMpO1xuICAgIHRva2VuVHlwZXMuZm9yRWFjaCgodG9rZW5UeXBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5rZXl3b3Jkcy5oYXModG9rZW5UeXBlLm5hbWUpICYmIHRva2VuVHlwZS5QQVRURVJOICE9PSB2b2lkIDApIHtcbiAgICAgICAgdG9rZW5UeXBlLlBBVFRFUk4gPSBuZXcgUmVnRXhwKHRva2VuVHlwZS5QQVRURVJOLnRvU3RyaW5nKCkgKyBcIig/Oig/PSUlKXwoPyFcXFxcUykpXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b2tlblR5cGVzO1xuICB9XG59O1xudmFyIENvbW1vblRva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJDb21tb25Ub2tlbkJ1aWxkZXJcIik7XG4gIH1cbn07XG5cbmV4cG9ydCB7XG4gIF9fbmFtZSxcbiAgU3RhdGVtZW50LFxuICBBcmNoaXRlY3R1cmUsXG4gIGlzQXJjaGl0ZWN0dXJlLFxuICBCcmFuY2gsXG4gIGlzQnJhbmNoLFxuICBDb21taXQsXG4gIGlzQ29tbWl0LFxuICBpc0NvbW1vbixcbiAgR2l0R3JhcGgsXG4gIGlzR2l0R3JhcGgsXG4gIEluZm8sXG4gIGlzSW5mbyxcbiAgTWVyZ2UsXG4gIGlzTWVyZ2UsXG4gIFBhY2tldCxcbiAgaXNQYWNrZXQsXG4gIFBhY2tldEJsb2NrLFxuICBpc1BhY2tldEJsb2NrLFxuICBQaWUsXG4gIGlzUGllLFxuICBQaWVTZWN0aW9uLFxuICBpc1BpZVNlY3Rpb24sXG4gIE1lcm1haWRHZW5lcmF0ZWRTaGFyZWRNb2R1bGUsXG4gIEluZm9HZW5lcmF0ZWRNb2R1bGUsXG4gIFBhY2tldEdlbmVyYXRlZE1vZHVsZSxcbiAgUGllR2VuZXJhdGVkTW9kdWxlLFxuICBBcmNoaXRlY3R1cmVHZW5lcmF0ZWRNb2R1bGUsXG4gIEdpdEdyYXBoR2VuZXJhdGVkTW9kdWxlLFxuICBBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlcixcbiAgQ29tbW9uVmFsdWVDb252ZXJ0ZXIsXG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQ29tbW9uVG9rZW5CdWlsZGVyXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIsXG4gIENvbW1vblZhbHVlQ29udmVydGVyLFxuICBHaXRHcmFwaEdlbmVyYXRlZE1vZHVsZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvZ2l0R3JhcGgvbW9kdWxlLnRzXG5pbXBvcnQge1xuICBpbmplY3QsXG4gIGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlLFxuICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSxcbiAgRW1wdHlGaWxlU3lzdGVtXG59IGZyb20gXCJsYW5naXVtXCI7XG5cbi8vIHNyYy9sYW5ndWFnZS9naXRHcmFwaC90b2tlbkJ1aWxkZXIudHNcbnZhciBHaXRHcmFwaFRva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJHaXRHcmFwaFRva2VuQnVpbGRlclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihbXCJnaXRHcmFwaFwiXSk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9naXRHcmFwaC9tb2R1bGUudHNcbnZhciBHaXRHcmFwaE1vZHVsZSA9IHtcbiAgcGFyc2VyOiB7XG4gICAgVG9rZW5CdWlsZGVyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IG5ldyBHaXRHcmFwaFRva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgQ29tbW9uVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcyhjb250ZXh0ID0gRW1wdHlGaWxlU3lzdGVtKSB7XG4gIGNvbnN0IHNoYXJlZCA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZShjb250ZXh0KSxcbiAgICBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlXG4gICk7XG4gIGNvbnN0IEdpdEdyYXBoID0gaW5qZWN0KFxuICAgIGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlKHsgc2hhcmVkIH0pLFxuICAgIEdpdEdyYXBoR2VuZXJhdGVkTW9kdWxlLFxuICAgIEdpdEdyYXBoTW9kdWxlXG4gICk7XG4gIHNoYXJlZC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoR2l0R3JhcGgpO1xuICByZXR1cm4geyBzaGFyZWQsIEdpdEdyYXBoIH07XG59XG5fX25hbWUoY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcywgXCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzXCIpO1xuXG5leHBvcnQge1xuICBHaXRHcmFwaE1vZHVsZSxcbiAgY3JlYXRlR2l0R3JhcGhTZXJ2aWNlc1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyLFxuICBDb21tb25WYWx1ZUNvbnZlcnRlcixcbiAgSW5mb0dlbmVyYXRlZE1vZHVsZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvaW5mby9tb2R1bGUudHNcbmltcG9ydCB7XG4gIEVtcHR5RmlsZVN5c3RlbSxcbiAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUsXG4gIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlLFxuICBpbmplY3Rcbn0gZnJvbSBcImxhbmdpdW1cIjtcblxuLy8gc3JjL2xhbmd1YWdlL2luZm8vdG9rZW5CdWlsZGVyLnRzXG52YXIgSW5mb1Rva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJJbmZvVG9rZW5CdWlsZGVyXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFtcImluZm9cIiwgXCJzaG93SW5mb1wiXSk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9pbmZvL21vZHVsZS50c1xudmFyIEluZm9Nb2R1bGUgPSB7XG4gIHBhcnNlcjoge1xuICAgIFRva2VuQnVpbGRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgSW5mb1Rva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgQ29tbW9uVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlSW5mb1NlcnZpY2VzKGNvbnRleHQgPSBFbXB0eUZpbGVTeXN0ZW0pIHtcbiAgY29uc3Qgc2hhcmVkID0gaW5qZWN0KFxuICAgIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlKGNvbnRleHQpLFxuICAgIE1lcm1haWRHZW5lcmF0ZWRTaGFyZWRNb2R1bGVcbiAgKTtcbiAgY29uc3QgSW5mbyA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSh7IHNoYXJlZCB9KSxcbiAgICBJbmZvR2VuZXJhdGVkTW9kdWxlLFxuICAgIEluZm9Nb2R1bGVcbiAgKTtcbiAgc2hhcmVkLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihJbmZvKTtcbiAgcmV0dXJuIHsgc2hhcmVkLCBJbmZvIH07XG59XG5fX25hbWUoY3JlYXRlSW5mb1NlcnZpY2VzLCBcImNyZWF0ZUluZm9TZXJ2aWNlc1wiKTtcblxuZXhwb3J0IHtcbiAgSW5mb01vZHVsZSxcbiAgY3JlYXRlSW5mb1NlcnZpY2VzXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIsXG4gIENvbW1vblZhbHVlQ29udmVydGVyLFxuICBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlLFxuICBQYWNrZXRHZW5lcmF0ZWRNb2R1bGUsXG4gIF9fbmFtZVxufSBmcm9tIFwiLi9jaHVuay1ZMjdNUVozVS5tanNcIjtcblxuLy8gc3JjL2xhbmd1YWdlL3BhY2tldC9tb2R1bGUudHNcbmltcG9ydCB7XG4gIEVtcHR5RmlsZVN5c3RlbSxcbiAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUsXG4gIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlLFxuICBpbmplY3Rcbn0gZnJvbSBcImxhbmdpdW1cIjtcblxuLy8gc3JjL2xhbmd1YWdlL3BhY2tldC90b2tlbkJ1aWxkZXIudHNcbnZhciBQYWNrZXRUb2tlbkJ1aWxkZXIgPSBjbGFzcyBleHRlbmRzIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiUGFja2V0VG9rZW5CdWlsZGVyXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFtcInBhY2tldC1iZXRhXCJdKTtcbiAgfVxufTtcblxuLy8gc3JjL2xhbmd1YWdlL3BhY2tldC9tb2R1bGUudHNcbnZhciBQYWNrZXRNb2R1bGUgPSB7XG4gIHBhcnNlcjoge1xuICAgIFRva2VuQnVpbGRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUGFja2V0VG9rZW5CdWlsZGVyKCksIFwiVG9rZW5CdWlsZGVyXCIpLFxuICAgIFZhbHVlQ29udmVydGVyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IG5ldyBDb21tb25WYWx1ZUNvbnZlcnRlcigpLCBcIlZhbHVlQ29udmVydGVyXCIpXG4gIH1cbn07XG5mdW5jdGlvbiBjcmVhdGVQYWNrZXRTZXJ2aWNlcyhjb250ZXh0ID0gRW1wdHlGaWxlU3lzdGVtKSB7XG4gIGNvbnN0IHNoYXJlZCA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZShjb250ZXh0KSxcbiAgICBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlXG4gICk7XG4gIGNvbnN0IFBhY2tldCA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSh7IHNoYXJlZCB9KSxcbiAgICBQYWNrZXRHZW5lcmF0ZWRNb2R1bGUsXG4gICAgUGFja2V0TW9kdWxlXG4gICk7XG4gIHNoYXJlZC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoUGFja2V0KTtcbiAgcmV0dXJuIHsgc2hhcmVkLCBQYWNrZXQgfTtcbn1cbl9fbmFtZShjcmVhdGVQYWNrZXRTZXJ2aWNlcywgXCJjcmVhdGVQYWNrZXRTZXJ2aWNlc1wiKTtcblxuZXhwb3J0IHtcbiAgUGFja2V0TW9kdWxlLFxuICBjcmVhdGVQYWNrZXRTZXJ2aWNlc1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyLFxuICBBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlcixcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgUGllR2VuZXJhdGVkTW9kdWxlLFxuICBfX25hbWVcbn0gZnJvbSBcIi4vY2h1bmstWTI3TVFaM1UubWpzXCI7XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvbW9kdWxlLnRzXG5pbXBvcnQge1xuICBFbXB0eUZpbGVTeXN0ZW0sXG4gIGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlLFxuICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSxcbiAgaW5qZWN0XG59IGZyb20gXCJsYW5naXVtXCI7XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvdG9rZW5CdWlsZGVyLnRzXG52YXIgUGllVG9rZW5CdWlsZGVyID0gY2xhc3MgZXh0ZW5kcyBBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlBpZVRva2VuQnVpbGRlclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihbXCJwaWVcIiwgXCJzaG93RGF0YVwiXSk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvdmFsdWVDb252ZXJ0ZXIudHNcbnZhciBQaWVWYWx1ZUNvbnZlcnRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlBpZVZhbHVlQ29udmVydGVyXCIpO1xuICB9XG4gIHJ1bkN1c3RvbUNvbnZlcnRlcihydWxlLCBpbnB1dCwgX2NzdE5vZGUpIHtcbiAgICBpZiAocnVsZS5uYW1lICE9PSBcIlBJRV9TRUNUSU9OX0xBQkVMXCIpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cIi9nLCBcIlwiKS50cmltKCk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvbW9kdWxlLnRzXG52YXIgUGllTW9kdWxlID0ge1xuICBwYXJzZXI6IHtcbiAgICBUb2tlbkJ1aWxkZXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbmV3IFBpZVRva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUGllVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlUGllU2VydmljZXMoY29udGV4dCA9IEVtcHR5RmlsZVN5c3RlbSkge1xuICBjb25zdCBzaGFyZWQgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUoY29udGV4dCksXG4gICAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZVxuICApO1xuICBjb25zdCBQaWUgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUoeyBzaGFyZWQgfSksXG4gICAgUGllR2VuZXJhdGVkTW9kdWxlLFxuICAgIFBpZU1vZHVsZVxuICApO1xuICBzaGFyZWQuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKFBpZSk7XG4gIHJldHVybiB7IHNoYXJlZCwgUGllIH07XG59XG5fX25hbWUoY3JlYXRlUGllU2VydmljZXMsIFwiY3JlYXRlUGllU2VydmljZXNcIik7XG5cbmV4cG9ydCB7XG4gIFBpZU1vZHVsZSxcbiAgY3JlYXRlUGllU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIsXG4gIEFyY2hpdGVjdHVyZUdlbmVyYXRlZE1vZHVsZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvYXJjaGl0ZWN0dXJlL21vZHVsZS50c1xuaW1wb3J0IHtcbiAgRW1wdHlGaWxlU3lzdGVtLFxuICBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSxcbiAgY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUsXG4gIGluamVjdFxufSBmcm9tIFwibGFuZ2l1bVwiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvYXJjaGl0ZWN0dXJlL3Rva2VuQnVpbGRlci50c1xudmFyIEFyY2hpdGVjdHVyZVRva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJBcmNoaXRlY3R1cmVUb2tlbkJ1aWxkZXJcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoW1wiYXJjaGl0ZWN0dXJlXCJdKTtcbiAgfVxufTtcblxuLy8gc3JjL2xhbmd1YWdlL2FyY2hpdGVjdHVyZS92YWx1ZUNvbnZlcnRlci50c1xudmFyIEFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyID0gY2xhc3MgZXh0ZW5kcyBBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQXJjaGl0ZWN0dXJlVmFsdWVDb252ZXJ0ZXJcIik7XG4gIH1cbiAgcnVuQ3VzdG9tQ29udmVydGVyKHJ1bGUsIGlucHV0LCBfY3N0Tm9kZSkge1xuICAgIGlmIChydWxlLm5hbWUgPT09IFwiQVJDSF9JQ09OXCIpIHtcbiAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bKCldL2csIFwiXCIpLnRyaW0oKTtcbiAgICB9IGVsc2UgaWYgKHJ1bGUubmFtZSA9PT0gXCJBUkNIX1RFWFRfSUNPTlwiKSB7XG4gICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvW1wiKCldL2csIFwiXCIpO1xuICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lID09PSBcIkFSQ0hfVElUTEVcIikge1xuICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1tbXFxdXS9nLCBcIlwiKS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9hcmNoaXRlY3R1cmUvbW9kdWxlLnRzXG52YXIgQXJjaGl0ZWN0dXJlTW9kdWxlID0ge1xuICBwYXJzZXI6IHtcbiAgICBUb2tlbkJ1aWxkZXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbmV3IEFyY2hpdGVjdHVyZVRva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgQXJjaGl0ZWN0dXJlVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMoY29udGV4dCA9IEVtcHR5RmlsZVN5c3RlbSkge1xuICBjb25zdCBzaGFyZWQgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUoY29udGV4dCksXG4gICAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZVxuICApO1xuICBjb25zdCBBcmNoaXRlY3R1cmUgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUoeyBzaGFyZWQgfSksXG4gICAgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlLFxuICAgIEFyY2hpdGVjdHVyZU1vZHVsZVxuICApO1xuICBzaGFyZWQuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKEFyY2hpdGVjdHVyZSk7XG4gIHJldHVybiB7IHNoYXJlZCwgQXJjaGl0ZWN0dXJlIH07XG59XG5fX25hbWUoY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMsIFwiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXNcIik7XG5cbmV4cG9ydCB7XG4gIEFyY2hpdGVjdHVyZU1vZHVsZSxcbiAgY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIEluZm9Nb2R1bGUsXG4gIGNyZWF0ZUluZm9TZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVuay00WUZCNVZVQy5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWTI3TVFaM1UubWpzXCI7XG5leHBvcnQge1xuICBJbmZvTW9kdWxlLFxuICBjcmVhdGVJbmZvU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIFBhY2tldE1vZHVsZSxcbiAgY3JlYXRlUGFja2V0U2VydmljZXNcbn0gZnJvbSBcIi4vY2h1bmstRVFGTEZNTkUubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuZXhwb3J0IHtcbiAgUGFja2V0TW9kdWxlLFxuICBjcmVhdGVQYWNrZXRTZXJ2aWNlc1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgUGllTW9kdWxlLFxuICBjcmVhdGVQaWVTZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVuay1CSTZFUUtPUS5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWTI3TVFaM1UubWpzXCI7XG5leHBvcnQge1xuICBQaWVNb2R1bGUsXG4gIGNyZWF0ZVBpZVNlcnZpY2VzXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBBcmNoaXRlY3R1cmVNb2R1bGUsXG4gIGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzXG59IGZyb20gXCIuL2NodW5rLUZGN0JRWE9ILm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1ZMjdNUVozVS5tanNcIjtcbmV4cG9ydCB7XG4gIEFyY2hpdGVjdHVyZU1vZHVsZSxcbiAgY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIEdpdEdyYXBoTW9kdWxlLFxuICBjcmVhdGVHaXRHcmFwaFNlcnZpY2VzXG59IGZyb20gXCIuL2NodW5rLU5DTUZUVFVXLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1ZMjdNUVozVS5tanNcIjtcbmV4cG9ydCB7XG4gIEdpdEdyYXBoTW9kdWxlLFxuICBjcmVhdGVHaXRHcmFwaFNlcnZpY2VzXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBHaXRHcmFwaE1vZHVsZSxcbiAgY3JlYXRlR2l0R3JhcGhTZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1OQ01GVFRVVy5tanNcIjtcbmltcG9ydCB7XG4gIEluZm9Nb2R1bGUsXG4gIGNyZWF0ZUluZm9TZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay00WUZCNVZVQy5tanNcIjtcbmltcG9ydCB7XG4gIFBhY2tldE1vZHVsZSxcbiAgY3JlYXRlUGFja2V0U2VydmljZXNcbn0gZnJvbSBcIi4vY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvY2h1bmstRVFGTEZNTkUubWpzXCI7XG5pbXBvcnQge1xuICBQaWVNb2R1bGUsXG4gIGNyZWF0ZVBpZVNlcnZpY2VzXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLUJJNkVRS09RLm1qc1wiO1xuaW1wb3J0IHtcbiAgQXJjaGl0ZWN0dXJlTW9kdWxlLFxuICBjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1GRjdCUVhPSC5tanNcIjtcbmltcG9ydCB7XG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIsXG4gIEFyY2hpdGVjdHVyZSxcbiAgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlLFxuICBCcmFuY2gsXG4gIENvbW1pdCxcbiAgQ29tbW9uVG9rZW5CdWlsZGVyLFxuICBDb21tb25WYWx1ZUNvbnZlcnRlcixcbiAgR2l0R3JhcGgsXG4gIEdpdEdyYXBoR2VuZXJhdGVkTW9kdWxlLFxuICBJbmZvLFxuICBJbmZvR2VuZXJhdGVkTW9kdWxlLFxuICBNZXJnZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgUGFja2V0LFxuICBQYWNrZXRCbG9jayxcbiAgUGFja2V0R2VuZXJhdGVkTW9kdWxlLFxuICBQaWUsXG4gIFBpZUdlbmVyYXRlZE1vZHVsZSxcbiAgUGllU2VjdGlvbixcbiAgU3RhdGVtZW50LFxuICBfX25hbWUsXG4gIGlzQXJjaGl0ZWN0dXJlLFxuICBpc0JyYW5jaCxcbiAgaXNDb21taXQsXG4gIGlzQ29tbW9uLFxuICBpc0dpdEdyYXBoLFxuICBpc0luZm8sXG4gIGlzTWVyZ2UsXG4gIGlzUGFja2V0LFxuICBpc1BhY2tldEJsb2NrLFxuICBpc1BpZSxcbiAgaXNQaWVTZWN0aW9uXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvcGFyc2UudHNcbnZhciBwYXJzZXJzID0ge307XG52YXIgaW5pdGlhbGl6ZXJzID0ge1xuICBpbmZvOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZUluZm9TZXJ2aWNlczogY3JlYXRlSW5mb1NlcnZpY2VzMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9pbmZvLTQ2RFc2Vko3Lm1qc1wiKTtcbiAgICBjb25zdCBwYXJzZXIgPSBjcmVhdGVJbmZvU2VydmljZXMyKCkuSW5mby5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtcbiAgICBwYXJzZXJzLmluZm8gPSBwYXJzZXI7XG4gIH0sIFwiaW5mb1wiKSxcbiAgcGFja2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZVBhY2tldFNlcnZpY2VzOiBjcmVhdGVQYWNrZXRTZXJ2aWNlczIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvcGFja2V0LVcyR0hWQ1lKLm1qc1wiKTtcbiAgICBjb25zdCBwYXJzZXIgPSBjcmVhdGVQYWNrZXRTZXJ2aWNlczIoKS5QYWNrZXQucGFyc2VyLkxhbmdpdW1QYXJzZXI7XG4gICAgcGFyc2Vycy5wYWNrZXQgPSBwYXJzZXI7XG4gIH0sIFwicGFja2V0XCIpLFxuICBwaWU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlUGllU2VydmljZXM6IGNyZWF0ZVBpZVNlcnZpY2VzMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9waWUtQkVXVDRSSEUubWpzXCIpO1xuICAgIGNvbnN0IHBhcnNlciA9IGNyZWF0ZVBpZVNlcnZpY2VzMigpLlBpZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtcbiAgICBwYXJzZXJzLnBpZSA9IHBhcnNlcjtcbiAgfSwgXCJwaWVcIiksXG4gIGFyY2hpdGVjdHVyZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlczogY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2FyY2hpdGVjdHVyZS1JM1FGWU1MMi5tanNcIik7XG4gICAgY29uc3QgcGFyc2VyID0gY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMyKCkuQXJjaGl0ZWN0dXJlLnBhcnNlci5MYW5naXVtUGFyc2VyO1xuICAgIHBhcnNlcnMuYXJjaGl0ZWN0dXJlID0gcGFyc2VyO1xuICB9LCBcImFyY2hpdGVjdHVyZVwiKSxcbiAgZ2l0R3JhcGg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlR2l0R3JhcGhTZXJ2aWNlczogY3JlYXRlR2l0R3JhcGhTZXJ2aWNlczIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvZ2l0R3JhcGgtWUNZUEw1N0IubWpzXCIpO1xuICAgIGNvbnN0IHBhcnNlciA9IGNyZWF0ZUdpdEdyYXBoU2VydmljZXMyKCkuR2l0R3JhcGgucGFyc2VyLkxhbmdpdW1QYXJzZXI7XG4gICAgcGFyc2Vycy5naXRHcmFwaCA9IHBhcnNlcjtcbiAgfSwgXCJnaXRHcmFwaFwiKVxufTtcbmFzeW5jIGZ1bmN0aW9uIHBhcnNlKGRpYWdyYW1UeXBlLCB0ZXh0KSB7XG4gIGNvbnN0IGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJzW2RpYWdyYW1UeXBlXTtcbiAgaWYgKCFpbml0aWFsaXplcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkaWFncmFtIHR5cGU6ICR7ZGlhZ3JhbVR5cGV9YCk7XG4gIH1cbiAgaWYgKCFwYXJzZXJzW2RpYWdyYW1UeXBlXSkge1xuICAgIGF3YWl0IGluaXRpYWxpemVyKCk7XG4gIH1cbiAgY29uc3QgcGFyc2VyID0gcGFyc2Vyc1tkaWFncmFtVHlwZV07XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5wYXJzZSh0ZXh0KTtcbiAgaWYgKHJlc3VsdC5sZXhlckVycm9ycy5sZW5ndGggPiAwIHx8IHJlc3VsdC5wYXJzZXJFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBNZXJtYWlkUGFyc2VFcnJvcihyZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQudmFsdWU7XG59XG5fX25hbWUocGFyc2UsIFwicGFyc2VcIik7XG52YXIgTWVybWFpZFBhcnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzdWx0KSB7XG4gICAgY29uc3QgbGV4ZXJFcnJvcnMgPSByZXN1bHQubGV4ZXJFcnJvcnMubWFwKChlcnIpID0+IGVyci5tZXNzYWdlKS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHBhcnNlckVycm9ycyA9IHJlc3VsdC5wYXJzZXJFcnJvcnMubWFwKChlcnIpID0+IGVyci5tZXNzYWdlKS5qb2luKFwiXFxuXCIpO1xuICAgIHN1cGVyKGBQYXJzaW5nIGZhaWxlZDogJHtsZXhlckVycm9yc30gJHtwYXJzZXJFcnJvcnN9YCk7XG4gICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJNZXJtYWlkUGFyc2VFcnJvclwiKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIsXG4gIEFyY2hpdGVjdHVyZSxcbiAgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlLFxuICBBcmNoaXRlY3R1cmVNb2R1bGUsXG4gIEJyYW5jaCxcbiAgQ29tbWl0LFxuICBDb21tb25Ub2tlbkJ1aWxkZXIsXG4gIENvbW1vblZhbHVlQ29udmVydGVyLFxuICBHaXRHcmFwaCxcbiAgR2l0R3JhcGhHZW5lcmF0ZWRNb2R1bGUsXG4gIEdpdEdyYXBoTW9kdWxlLFxuICBJbmZvLFxuICBJbmZvR2VuZXJhdGVkTW9kdWxlLFxuICBJbmZvTW9kdWxlLFxuICBNZXJnZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgTWVybWFpZFBhcnNlRXJyb3IsXG4gIFBhY2tldCxcbiAgUGFja2V0QmxvY2ssXG4gIFBhY2tldEdlbmVyYXRlZE1vZHVsZSxcbiAgUGFja2V0TW9kdWxlLFxuICBQaWUsXG4gIFBpZUdlbmVyYXRlZE1vZHVsZSxcbiAgUGllTW9kdWxlLFxuICBQaWVTZWN0aW9uLFxuICBTdGF0ZW1lbnQsXG4gIGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzLFxuICBjcmVhdGVHaXRHcmFwaFNlcnZpY2VzLFxuICBjcmVhdGVJbmZvU2VydmljZXMsXG4gIGNyZWF0ZVBhY2tldFNlcnZpY2VzLFxuICBjcmVhdGVQaWVTZXJ2aWNlcyxcbiAgaXNBcmNoaXRlY3R1cmUsXG4gIGlzQnJhbmNoLFxuICBpc0NvbW1pdCxcbiAgaXNDb21tb24sXG4gIGlzR2l0R3JhcGgsXG4gIGlzSW5mbyxcbiAgaXNNZXJnZSxcbiAgaXNQYWNrZXQsXG4gIGlzUGFja2V0QmxvY2ssXG4gIGlzUGllLFxuICBpc1BpZVNlY3Rpb24sXG4gIHBhcnNlXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBwb3B1bGF0ZUNvbW1vbkRiXG59IGZyb20gXCIuL2NodW5rLU9RQ001TEhVLm1qc1wiO1xuaW1wb3J0IHtcbiAgSW1wZXJhdGl2ZVN0YXRlXG59IGZyb20gXCIuL2NodW5rLTJSWVEzUVRCLm1qc1wiO1xuaW1wb3J0IHtcbiAgY2xlYW5BbmRNZXJnZSxcbiAgcmFuZG9tLFxuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcsXG4gIGdldENvbmZpZzIsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgbG9nLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgc2V0dXBHcmFwaFZpZXdib3gyIGFzIHNldHVwR3JhcGhWaWV3Ym94XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2l0L2dpdEdyYXBoUGFyc2VyLnRzXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAbWVybWFpZC1qcy9wYXJzZXJcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9naXRHcmFwaFR5cGVzLnRzXG52YXIgY29tbWl0VHlwZSA9IHtcbiAgTk9STUFMOiAwLFxuICBSRVZFUlNFOiAxLFxuICBISUdITElHSFQ6IDIsXG4gIE1FUkdFOiAzLFxuICBDSEVSUllfUElDSzogNFxufTtcblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9naXRHcmFwaEFzdC50c1xudmFyIERFRkFVTFRfR0lUR1JBUEhfQ09ORklHID0gZGVmYXVsdENvbmZpZ19kZWZhdWx0LmdpdEdyYXBoO1xudmFyIGdldENvbmZpZzMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgY29uZmlnID0gY2xlYW5BbmRNZXJnZSh7XG4gICAgLi4uREVGQVVMVF9HSVRHUkFQSF9DT05GSUcsXG4gICAgLi4uZ2V0Q29uZmlnKCkuZ2l0R3JhcGhcbiAgfSk7XG4gIHJldHVybiBjb25maWc7XG59LCBcImdldENvbmZpZ1wiKTtcbnZhciBzdGF0ZSA9IG5ldyBJbXBlcmF0aXZlU3RhdGUoKCkgPT4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWczKCk7XG4gIGNvbnN0IG1haW5CcmFuY2hOYW1lID0gY29uZmlnLm1haW5CcmFuY2hOYW1lO1xuICBjb25zdCBtYWluQnJhbmNoT3JkZXIgPSBjb25maWcubWFpbkJyYW5jaE9yZGVyO1xuICByZXR1cm4ge1xuICAgIG1haW5CcmFuY2hOYW1lLFxuICAgIGNvbW1pdHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgaGVhZDogbnVsbCxcbiAgICBicmFuY2hDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtbbWFpbkJyYW5jaE5hbWUsIHsgbmFtZTogbWFpbkJyYW5jaE5hbWUsIG9yZGVyOiBtYWluQnJhbmNoT3JkZXIgfV1dKSxcbiAgICBicmFuY2hlczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1ttYWluQnJhbmNoTmFtZSwgbnVsbF1dKSxcbiAgICBjdXJyQnJhbmNoOiBtYWluQnJhbmNoTmFtZSxcbiAgICBkaXJlY3Rpb246IFwiTFJcIixcbiAgICBzZXE6IDAsXG4gICAgb3B0aW9uczoge31cbiAgfTtcbn0pO1xuZnVuY3Rpb24gZ2V0SUQoKSB7XG4gIHJldHVybiByYW5kb20oeyBsZW5ndGg6IDcgfSk7XG59XG5fX25hbWUoZ2V0SUQsIFwiZ2V0SURcIik7XG5mdW5jdGlvbiB1bmlxQnkobGlzdCwgZm4pIHtcbiAgY29uc3QgcmVjb3JkTWFwID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBsaXN0LnJlZHVjZSgob3V0LCBpdGVtKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gZm4oaXRlbSk7XG4gICAgaWYgKCFyZWNvcmRNYXBba2V5XSkge1xuICAgICAgcmVjb3JkTWFwW2tleV0gPSB0cnVlO1xuICAgICAgb3V0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH0sIFtdKTtcbn1cbl9fbmFtZSh1bmlxQnksIFwidW5pcUJ5XCIpO1xudmFyIHNldERpcmVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlyMikge1xuICBzdGF0ZS5yZWNvcmRzLmRpcmVjdGlvbiA9IGRpcjI7XG59LCBcInNldERpcmVjdGlvblwiKTtcbnZhciBzZXRPcHRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihyYXdPcHRTdHJpbmcpIHtcbiAgbG9nLmRlYnVnKFwib3B0aW9ucyBzdHJcIiwgcmF3T3B0U3RyaW5nKTtcbiAgcmF3T3B0U3RyaW5nID0gcmF3T3B0U3RyaW5nPy50cmltKCk7XG4gIHJhd09wdFN0cmluZyA9IHJhd09wdFN0cmluZyB8fCBcInt9XCI7XG4gIHRyeSB7XG4gICAgc3RhdGUucmVjb3Jkcy5vcHRpb25zID0gSlNPTi5wYXJzZShyYXdPcHRTdHJpbmcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zXCIsIGUubWVzc2FnZSk7XG4gIH1cbn0sIFwic2V0T3B0aW9uc1wiKTtcbnZhciBnZXRPcHRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMub3B0aW9ucztcbn0sIFwiZ2V0T3B0aW9uc1wiKTtcbnZhciBjb21taXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNvbW1pdERCKSB7XG4gIGxldCBtc2cgPSBjb21taXREQi5tc2c7XG4gIGxldCBpZCA9IGNvbW1pdERCLmlkO1xuICBjb25zdCB0eXBlID0gY29tbWl0REIudHlwZTtcbiAgbGV0IHRhZ3MgPSBjb21taXREQi50YWdzO1xuICBsb2cuaW5mbyhcImNvbW1pdFwiLCBtc2csIGlkLCB0eXBlLCB0YWdzKTtcbiAgbG9nLmRlYnVnKFwiRW50ZXJpbmcgY29tbWl0OlwiLCBtc2csIGlkLCB0eXBlLCB0YWdzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnMygpO1xuICBpZCA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChpZCwgY29uZmlnKTtcbiAgbXNnID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KG1zZywgY29uZmlnKTtcbiAgdGFncyA9IHRhZ3M/Lm1hcCgodGFnKSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodGFnLCBjb25maWcpKTtcbiAgY29uc3QgbmV3Q29tbWl0ID0ge1xuICAgIGlkOiBpZCA/IGlkIDogc3RhdGUucmVjb3Jkcy5zZXEgKyBcIi1cIiArIGdldElEKCksXG4gICAgbWVzc2FnZTogbXNnLFxuICAgIHNlcTogc3RhdGUucmVjb3Jkcy5zZXErKyxcbiAgICB0eXBlOiB0eXBlID8/IGNvbW1pdFR5cGUuTk9STUFMLFxuICAgIHRhZ3M6IHRhZ3MgPz8gW10sXG4gICAgcGFyZW50czogc3RhdGUucmVjb3Jkcy5oZWFkID09IG51bGwgPyBbXSA6IFtzdGF0ZS5yZWNvcmRzLmhlYWQuaWRdLFxuICAgIGJyYW5jaDogc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoXG4gIH07XG4gIHN0YXRlLnJlY29yZHMuaGVhZCA9IG5ld0NvbW1pdDtcbiAgbG9nLmluZm8oXCJtYWluIGJyYW5jaFwiLCBjb25maWcubWFpbkJyYW5jaE5hbWUpO1xuICBzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuc2V0KG5ld0NvbW1pdC5pZCwgbmV3Q29tbWl0KTtcbiAgc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5zZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoLCBuZXdDb21taXQuaWQpO1xuICBsb2cuZGVidWcoXCJpbiBwdXNoQ29tbWl0IFwiICsgbmV3Q29tbWl0LmlkKTtcbn0sIFwiY29tbWl0XCIpO1xudmFyIGJyYW5jaCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYnJhbmNoREIpIHtcbiAgbGV0IG5hbWUgPSBicmFuY2hEQi5uYW1lO1xuICBjb25zdCBvcmRlciA9IGJyYW5jaERCLm9yZGVyO1xuICBuYW1lID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KG5hbWUsIGdldENvbmZpZzMoKSk7XG4gIGlmIChzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLmhhcyhuYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyBcImNoZWNrb3V0ICR7bmFtZX1cIilgXG4gICAgKTtcbiAgfVxuICBzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLnNldChuYW1lLCBzdGF0ZS5yZWNvcmRzLmhlYWQgIT0gbnVsbCA/IHN0YXRlLnJlY29yZHMuaGVhZC5pZCA6IG51bGwpO1xuICBzdGF0ZS5yZWNvcmRzLmJyYW5jaENvbmZpZy5zZXQobmFtZSwgeyBuYW1lLCBvcmRlciB9KTtcbiAgY2hlY2tvdXQobmFtZSk7XG4gIGxvZy5kZWJ1ZyhcImluIGNyZWF0ZUJyYW5jaFwiKTtcbn0sIFwiYnJhbmNoXCIpO1xudmFyIG1lcmdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobWVyZ2VEQikgPT4ge1xuICBsZXQgb3RoZXJCcmFuY2ggPSBtZXJnZURCLmJyYW5jaDtcbiAgbGV0IGN1c3RvbUlkID0gbWVyZ2VEQi5pZDtcbiAgY29uc3Qgb3ZlcnJpZGVUeXBlID0gbWVyZ2VEQi50eXBlO1xuICBjb25zdCBjdXN0b21UYWdzID0gbWVyZ2VEQi50YWdzO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWczKCk7XG4gIG90aGVyQnJhbmNoID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KG90aGVyQnJhbmNoLCBjb25maWcpO1xuICBpZiAoY3VzdG9tSWQpIHtcbiAgICBjdXN0b21JZCA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChjdXN0b21JZCwgY29uZmlnKTtcbiAgfVxuICBjb25zdCBjdXJyZW50QnJhbmNoQ2hlY2sgPSBzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLmdldChzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2gpO1xuICBjb25zdCBvdGhlckJyYW5jaENoZWNrID0gc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5nZXQob3RoZXJCcmFuY2gpO1xuICBjb25zdCBjdXJyZW50Q29tbWl0ID0gY3VycmVudEJyYW5jaENoZWNrID8gc3RhdGUucmVjb3Jkcy5jb21taXRzLmdldChjdXJyZW50QnJhbmNoQ2hlY2spIDogdm9pZCAwO1xuICBjb25zdCBvdGhlckNvbW1pdCA9IG90aGVyQnJhbmNoQ2hlY2sgPyBzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuZ2V0KG90aGVyQnJhbmNoQ2hlY2spIDogdm9pZCAwO1xuICBpZiAoY3VycmVudENvbW1pdCAmJiBvdGhlckNvbW1pdCAmJiBjdXJyZW50Q29tbWl0LmJyYW5jaCA9PT0gb3RoZXJCcmFuY2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtZXJnZSBicmFuY2ggJyR7b3RoZXJCcmFuY2h9JyBpbnRvIGl0c2VsZi5gKTtcbiAgfVxuICBpZiAoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoID09PSBvdGhlckJyYW5jaCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJtZXJnZVwiLiBDYW5ub3QgbWVyZ2UgYSBicmFuY2ggdG8gaXRzZWxmJyk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IGBtZXJnZSAke290aGVyQnJhbmNofWAsXG4gICAgICB0b2tlbjogYG1lcmdlICR7b3RoZXJCcmFuY2h9YCxcbiAgICAgIGV4cGVjdGVkOiBbXCJicmFuY2ggYWJjXCJdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoY3VycmVudENvbW1pdCA9PT0gdm9pZCAwIHx8ICFjdXJyZW50Q29tbWl0KSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQ3VycmVudCBicmFuY2ggKCR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2BcbiAgICApO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgdG9rZW46IGBtZXJnZSAke290aGVyQnJhbmNofWAsXG4gICAgICBleHBlY3RlZDogW1wiY29tbWl0XCJdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoIXN0YXRlLnJlY29yZHMuYnJhbmNoZXMuaGFzKG90aGVyQnJhbmNoKSkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcIm1lcmdlXCIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcgKyBvdGhlckJyYW5jaCArIFwiKSBkb2VzIG5vdCBleGlzdFwiXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogYG1lcmdlICR7b3RoZXJCcmFuY2h9YCxcbiAgICAgIHRva2VuOiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgZXhwZWN0ZWQ6IFtgYnJhbmNoICR7b3RoZXJCcmFuY2h9YF1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChvdGhlckNvbW1pdCA9PT0gdm9pZCAwIHx8ICFvdGhlckNvbW1pdCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcIm1lcmdlXCIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcgKyBvdGhlckJyYW5jaCArIFwiKSBoYXMgbm8gY29tbWl0c1wiXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogYG1lcmdlICR7b3RoZXJCcmFuY2h9YCxcbiAgICAgIHRva2VuOiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgZXhwZWN0ZWQ6IFsnXCJjb21taXRcIiddXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoY3VycmVudENvbW1pdCA9PT0gb3RoZXJDb21taXQpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgdG9rZW46IGBtZXJnZSAke290aGVyQnJhbmNofWAsXG4gICAgICBleHBlY3RlZDogW1wiYnJhbmNoIGFiY1wiXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKGN1c3RvbUlkICYmIHN0YXRlLnJlY29yZHMuY29tbWl0cy5oYXMoY3VzdG9tSWQpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQ29tbWl0IHdpdGggaWQ6JyArIGN1c3RvbUlkICsgXCIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkXCJcbiAgICApO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBgbWVyZ2UgJHtvdGhlckJyYW5jaH0gJHtjdXN0b21JZH0gJHtvdmVycmlkZVR5cGV9ICR7Y3VzdG9tVGFncz8uam9pbihcIiBcIil9YCxcbiAgICAgIHRva2VuOiBgbWVyZ2UgJHtvdGhlckJyYW5jaH0gJHtjdXN0b21JZH0gJHtvdmVycmlkZVR5cGV9ICR7Y3VzdG9tVGFncz8uam9pbihcIiBcIil9YCxcbiAgICAgIGV4cGVjdGVkOiBbXG4gICAgICAgIGBtZXJnZSAke290aGVyQnJhbmNofSAke2N1c3RvbUlkfV9VTklRVUUgJHtvdmVycmlkZVR5cGV9ICR7Y3VzdG9tVGFncz8uam9pbihcIiBcIil9YFxuICAgICAgXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgY29uc3QgdmVyaWZpZWRCcmFuY2ggPSBvdGhlckJyYW5jaENoZWNrID8gb3RoZXJCcmFuY2hDaGVjayA6IFwiXCI7XG4gIGNvbnN0IGNvbW1pdDIgPSB7XG4gICAgaWQ6IGN1c3RvbUlkIHx8IGAke3N0YXRlLnJlY29yZHMuc2VxfS0ke2dldElEKCl9YCxcbiAgICBtZXNzYWdlOiBgbWVyZ2VkIGJyYW5jaCAke290aGVyQnJhbmNofSBpbnRvICR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofWAsXG4gICAgc2VxOiBzdGF0ZS5yZWNvcmRzLnNlcSsrLFxuICAgIHBhcmVudHM6IHN0YXRlLnJlY29yZHMuaGVhZCA9PSBudWxsID8gW10gOiBbc3RhdGUucmVjb3Jkcy5oZWFkLmlkLCB2ZXJpZmllZEJyYW5jaF0sXG4gICAgYnJhbmNoOiBzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2gsXG4gICAgdHlwZTogY29tbWl0VHlwZS5NRVJHRSxcbiAgICBjdXN0b21UeXBlOiBvdmVycmlkZVR5cGUsXG4gICAgY3VzdG9tSWQ6IGN1c3RvbUlkID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHRhZ3M6IGN1c3RvbVRhZ3MgPz8gW11cbiAgfTtcbiAgc3RhdGUucmVjb3Jkcy5oZWFkID0gY29tbWl0MjtcbiAgc3RhdGUucmVjb3Jkcy5jb21taXRzLnNldChjb21taXQyLmlkLCBjb21taXQyKTtcbiAgc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5zZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoLCBjb21taXQyLmlkKTtcbiAgbG9nLmRlYnVnKHN0YXRlLnJlY29yZHMuYnJhbmNoZXMpO1xuICBsb2cuZGVidWcoXCJpbiBtZXJnZUJyYW5jaFwiKTtcbn0sIFwibWVyZ2VcIik7XG52YXIgY2hlcnJ5UGljayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2hlcnJ5UGlja0RCKSB7XG4gIGxldCBzb3VyY2VJZCA9IGNoZXJyeVBpY2tEQi5pZDtcbiAgbGV0IHRhcmdldElkID0gY2hlcnJ5UGlja0RCLnRhcmdldElkO1xuICBsZXQgdGFncyA9IGNoZXJyeVBpY2tEQi50YWdzO1xuICBsZXQgcGFyZW50Q29tbWl0SWQgPSBjaGVycnlQaWNrREIucGFyZW50O1xuICBsb2cuZGVidWcoXCJFbnRlcmluZyBjaGVycnlQaWNrOlwiLCBzb3VyY2VJZCwgdGFyZ2V0SWQsIHRhZ3MpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWczKCk7XG4gIHNvdXJjZUlkID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KHNvdXJjZUlkLCBjb25maWcpO1xuICB0YXJnZXRJZCA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dCh0YXJnZXRJZCwgY29uZmlnKTtcbiAgdGFncyA9IHRhZ3M/Lm1hcCgodGFnKSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodGFnLCBjb25maWcpKTtcbiAgcGFyZW50Q29tbWl0SWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQocGFyZW50Q29tbWl0SWQsIGNvbmZpZyk7XG4gIGlmICghc291cmNlSWQgfHwgIXN0YXRlLnJlY29yZHMuY29tbWl0cy5oYXMoc291cmNlSWQpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5UGlja1wiLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogYGNoZXJyeVBpY2sgJHtzb3VyY2VJZH0gJHt0YXJnZXRJZH1gLFxuICAgICAgdG9rZW46IGBjaGVycnlQaWNrICR7c291cmNlSWR9ICR7dGFyZ2V0SWR9YCxcbiAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGNvbnN0IHNvdXJjZUNvbW1pdCA9IHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoc291cmNlSWQpO1xuICBpZiAoc291cmNlQ29tbWl0ID09PSB2b2lkIDAgfHwgIXNvdXJjZUNvbW1pdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5UGlja1wiLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAocGFyZW50Q29tbWl0SWQgJiYgIShBcnJheS5pc0FycmF5KHNvdXJjZUNvbW1pdC5wYXJlbnRzKSAmJiBzb3VyY2VDb21taXQucGFyZW50cy5pbmNsdWRlcyhwYXJlbnRDb21taXRJZCkpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBcIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LlwiXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBjb25zdCBzb3VyY2VDb21taXRCcmFuY2ggPSBzb3VyY2VDb21taXQuYnJhbmNoO1xuICBpZiAoc291cmNlQ29tbWl0LnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgIXBhcmVudENvbW1pdElkKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBcIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLlwiXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoIXRhcmdldElkIHx8ICFzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuaGFzKHRhcmdldElkKSkge1xuICAgIGlmIChzb3VyY2VDb21taXRCcmFuY2ggPT09IHN0YXRlLnJlY29yZHMuY3VyckJyYW5jaCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJjaGVycnlQaWNrXCIuIFNvdXJjZSBjb21taXQgaXMgYWxyZWFkeSBvbiBjdXJyZW50IGJyYW5jaCdcbiAgICAgICk7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIHRva2VuOiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudENvbW1pdElkID0gc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5nZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoKTtcbiAgICBpZiAoY3VycmVudENvbW1pdElkID09PSB2b2lkIDAgfHwgIWN1cnJlbnRDb21taXRJZCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGBJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJjaGVycnktcGlja1wiLiBDdXJyZW50IGJyYW5jaCAoJHtzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYFxuICAgICAgKTtcbiAgICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICAgIHRleHQ6IGBjaGVycnlQaWNrICR7c291cmNlSWR9ICR7dGFyZ2V0SWR9YCxcbiAgICAgICAgdG9rZW46IGBjaGVycnlQaWNrICR7c291cmNlSWR9ICR7dGFyZ2V0SWR9YCxcbiAgICAgICAgZXhwZWN0ZWQ6IFtcImNoZXJyeS1waWNrIGFiY1wiXVxuICAgICAgfTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Q29tbWl0ID0gc3RhdGUucmVjb3Jkcy5jb21taXRzLmdldChjdXJyZW50Q29tbWl0SWQpO1xuICAgIGlmIChjdXJyZW50Q29tbWl0ID09PSB2b2lkIDAgfHwgIWN1cnJlbnRDb21taXQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICBgSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5LXBpY2tcIi4gQ3VycmVudCBicmFuY2ggKCR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2BcbiAgICAgICk7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIHRva2VuOiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgY29tbWl0MiA9IHtcbiAgICAgIGlkOiBzdGF0ZS5yZWNvcmRzLnNlcSArIFwiLVwiICsgZ2V0SUQoKSxcbiAgICAgIG1lc3NhZ2U6IGBjaGVycnktcGlja2VkICR7c291cmNlQ29tbWl0Py5tZXNzYWdlfSBpbnRvICR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofWAsXG4gICAgICBzZXE6IHN0YXRlLnJlY29yZHMuc2VxKyssXG4gICAgICBwYXJlbnRzOiBzdGF0ZS5yZWNvcmRzLmhlYWQgPT0gbnVsbCA/IFtdIDogW3N0YXRlLnJlY29yZHMuaGVhZC5pZCwgc291cmNlQ29tbWl0LmlkXSxcbiAgICAgIGJyYW5jaDogc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoLFxuICAgICAgdHlwZTogY29tbWl0VHlwZS5DSEVSUllfUElDSyxcbiAgICAgIHRhZ3M6IHRhZ3MgPyB0YWdzLmZpbHRlcihCb29sZWFuKSA6IFtcbiAgICAgICAgYGNoZXJyeS1waWNrOiR7c291cmNlQ29tbWl0LmlkfSR7c291cmNlQ29tbWl0LnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgPyBgfHBhcmVudDoke3BhcmVudENvbW1pdElkfWAgOiBcIlwifWBcbiAgICAgIF1cbiAgICB9O1xuICAgIHN0YXRlLnJlY29yZHMuaGVhZCA9IGNvbW1pdDI7XG4gICAgc3RhdGUucmVjb3Jkcy5jb21taXRzLnNldChjb21taXQyLmlkLCBjb21taXQyKTtcbiAgICBzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLnNldChzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2gsIGNvbW1pdDIuaWQpO1xuICAgIGxvZy5kZWJ1ZyhzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzKTtcbiAgICBsb2cuZGVidWcoXCJpbiBjaGVycnlQaWNrXCIpO1xuICB9XG59LCBcImNoZXJyeVBpY2tcIik7XG52YXIgY2hlY2tvdXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGJyYW5jaDIpIHtcbiAgYnJhbmNoMiA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChicmFuY2gyLCBnZXRDb25maWczKCkpO1xuICBpZiAoIXN0YXRlLnJlY29yZHMuYnJhbmNoZXMuaGFzKGJyYW5jaDIpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgVHJ5aW5nIHRvIGNoZWNrb3V0IGJyYW5jaCB3aGljaCBpcyBub3QgeWV0IGNyZWF0ZWQuIChIZWxwIHRyeSB1c2luZyBcImJyYW5jaCAke2JyYW5jaDJ9XCIpYFxuICAgICk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IGBjaGVja291dCAke2JyYW5jaDJ9YCxcbiAgICAgIHRva2VuOiBgY2hlY2tvdXQgJHticmFuY2gyfWAsXG4gICAgICBleHBlY3RlZDogW2BicmFuY2ggJHticmFuY2gyfWBdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2ggPSBicmFuY2gyO1xuICAgIGNvbnN0IGlkID0gc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5nZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoKTtcbiAgICBpZiAoaWQgPT09IHZvaWQgMCB8fCAhaWQpIHtcbiAgICAgIHN0YXRlLnJlY29yZHMuaGVhZCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnJlY29yZHMuaGVhZCA9IHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoaWQpID8/IG51bGw7XG4gICAgfVxuICB9XG59LCBcImNoZWNrb3V0XCIpO1xuZnVuY3Rpb24gdXBzZXJ0KGFyciwga2V5LCBuZXdWYWwpIHtcbiAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZihrZXkpO1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgYXJyLnB1c2gobmV3VmFsKTtcbiAgfSBlbHNlIHtcbiAgICBhcnIuc3BsaWNlKGluZGV4LCAxLCBuZXdWYWwpO1xuICB9XG59XG5fX25hbWUodXBzZXJ0LCBcInVwc2VydFwiKTtcbmZ1bmN0aW9uIHByZXR0eVByaW50Q29tbWl0SGlzdG9yeShjb21taXRBcnIpIHtcbiAgY29uc3QgY29tbWl0MiA9IGNvbW1pdEFyci5yZWR1Y2UoKG91dCwgY29tbWl0MykgPT4ge1xuICAgIGlmIChvdXQuc2VxID4gY29tbWl0My5zZXEpIHtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIHJldHVybiBjb21taXQzO1xuICB9LCBjb21taXRBcnJbMF0pO1xuICBsZXQgbGluZSA9IFwiXCI7XG4gIGNvbW1pdEFyci5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAoYyA9PT0gY29tbWl0Mikge1xuICAgICAgbGluZSArPSBcIlx0KlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lICs9IFwiXHR8XCI7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgbGFiZWwgPSBbbGluZSwgY29tbWl0Mi5pZCwgY29tbWl0Mi5zZXFdO1xuICBmb3IgKGNvbnN0IGJyYW5jaDIgaW4gc3RhdGUucmVjb3Jkcy5icmFuY2hlcykge1xuICAgIGlmIChzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLmdldChicmFuY2gyKSA9PT0gY29tbWl0Mi5pZCkge1xuICAgICAgbGFiZWwucHVzaChicmFuY2gyKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGxhYmVsLmpvaW4oXCIgXCIpKTtcbiAgaWYgKGNvbW1pdDIucGFyZW50cyAmJiBjb21taXQyLnBhcmVudHMubGVuZ3RoID09IDIgJiYgY29tbWl0Mi5wYXJlbnRzWzBdICYmIGNvbW1pdDIucGFyZW50c1sxXSkge1xuICAgIGNvbnN0IG5ld0NvbW1pdCA9IHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoY29tbWl0Mi5wYXJlbnRzWzBdKTtcbiAgICB1cHNlcnQoY29tbWl0QXJyLCBjb21taXQyLCBuZXdDb21taXQpO1xuICAgIGlmIChjb21taXQyLnBhcmVudHNbMV0pIHtcbiAgICAgIGNvbW1pdEFyci5wdXNoKHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoY29tbWl0Mi5wYXJlbnRzWzFdKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbW1pdDIucGFyZW50cy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29tbWl0Mi5wYXJlbnRzWzBdKSB7XG4gICAgICBjb25zdCBuZXdDb21taXQgPSBzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuZ2V0KGNvbW1pdDIucGFyZW50c1swXSk7XG4gICAgICB1cHNlcnQoY29tbWl0QXJyLCBjb21taXQyLCBuZXdDb21taXQpO1xuICAgIH1cbiAgfVxuICBjb21taXRBcnIgPSB1bmlxQnkoY29tbWl0QXJyLCAoYykgPT4gYy5pZCk7XG4gIHByZXR0eVByaW50Q29tbWl0SGlzdG9yeShjb21taXRBcnIpO1xufVxuX19uYW1lKHByZXR0eVByaW50Q29tbWl0SGlzdG9yeSwgXCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnlcIik7XG52YXIgcHJldHR5UHJpbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBsb2cuZGVidWcoc3RhdGUucmVjb3Jkcy5jb21taXRzKTtcbiAgY29uc3Qgbm9kZSA9IGdldENvbW1pdHNBcnJheSgpWzBdO1xuICBwcmV0dHlQcmludENvbW1pdEhpc3RvcnkoW25vZGVdKTtcbn0sIFwicHJldHR5UHJpbnRcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc3RhdGUucmVzZXQoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZ2V0QnJhbmNoZXNBc09iakFycmF5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY29uc3QgYnJhbmNoZXNBcnJheSA9IFsuLi5zdGF0ZS5yZWNvcmRzLmJyYW5jaENvbmZpZy52YWx1ZXMoKV0ubWFwKChicmFuY2hDb25maWcsIGkpID0+IHtcbiAgICBpZiAoYnJhbmNoQ29uZmlnLm9yZGVyICE9PSBudWxsICYmIGJyYW5jaENvbmZpZy5vcmRlciAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gYnJhbmNoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnJhbmNoQ29uZmlnLFxuICAgICAgb3JkZXI6IHBhcnNlRmxvYXQoYDAuJHtpfWApXG4gICAgfTtcbiAgfSkuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSkubWFwKCh7IG5hbWUgfSkgPT4gKHsgbmFtZSB9KSk7XG4gIHJldHVybiBicmFuY2hlc0FycmF5O1xufSwgXCJnZXRCcmFuY2hlc0FzT2JqQXJyYXlcIik7XG52YXIgZ2V0QnJhbmNoZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5icmFuY2hlcztcbn0sIFwiZ2V0QnJhbmNoZXNcIik7XG52YXIgZ2V0Q29tbWl0cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLmNvbW1pdHM7XG59LCBcImdldENvbW1pdHNcIik7XG52YXIgZ2V0Q29tbWl0c0FycmF5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY29uc3QgY29tbWl0QXJyID0gWy4uLnN0YXRlLnJlY29yZHMuY29tbWl0cy52YWx1ZXMoKV07XG4gIGNvbW1pdEFyci5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICBsb2cuZGVidWcoby5pZCk7XG4gIH0pO1xuICBjb21taXRBcnIuc29ydCgoYSwgYikgPT4gYS5zZXEgLSBiLnNlcSk7XG4gIHJldHVybiBjb21taXRBcnI7XG59LCBcImdldENvbW1pdHNBcnJheVwiKTtcbnZhciBnZXRDdXJyZW50QnJhbmNoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuY3VyckJyYW5jaDtcbn0sIFwiZ2V0Q3VycmVudEJyYW5jaFwiKTtcbnZhciBnZXREaXJlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5kaXJlY3Rpb247XG59LCBcImdldERpcmVjdGlvblwiKTtcbnZhciBnZXRIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuaGVhZDtcbn0sIFwiZ2V0SGVhZFwiKTtcbnZhciBkYiA9IHtcbiAgY29tbWl0VHlwZSxcbiAgZ2V0Q29uZmlnOiBnZXRDb25maWczLFxuICBzZXREaXJlY3Rpb24sXG4gIHNldE9wdGlvbnMsXG4gIGdldE9wdGlvbnMsXG4gIGNvbW1pdCxcbiAgYnJhbmNoLFxuICBtZXJnZSxcbiAgY2hlcnJ5UGljayxcbiAgY2hlY2tvdXQsXG4gIC8vcmVzZXQsXG4gIHByZXR0eVByaW50LFxuICBjbGVhcjogY2xlYXIyLFxuICBnZXRCcmFuY2hlc0FzT2JqQXJyYXksXG4gIGdldEJyYW5jaGVzLFxuICBnZXRDb21taXRzLFxuICBnZXRDb21taXRzQXJyYXksXG4gIGdldEN1cnJlbnRCcmFuY2gsXG4gIGdldERpcmVjdGlvbixcbiAgZ2V0SGVhZCxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2l0L2dpdEdyYXBoUGFyc2VyLnRzXG52YXIgcG9wdWxhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhc3QsIGRiMikgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIyKTtcbiAgaWYgKGFzdC5kaXIpIHtcbiAgICBkYjIuc2V0RGlyZWN0aW9uKGFzdC5kaXIpO1xuICB9XG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFzdC5zdGF0ZW1lbnRzKSB7XG4gICAgcGFyc2VTdGF0ZW1lbnQoc3RhdGVtZW50LCBkYjIpO1xuICB9XG59LCBcInBvcHVsYXRlXCIpO1xudmFyIHBhcnNlU3RhdGVtZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RhdGVtZW50LCBkYjIpID0+IHtcbiAgY29uc3QgcGFyc2VycyA9IHtcbiAgICBDb21taXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0bXQpID0+IGRiMi5jb21taXQocGFyc2VDb21taXQoc3RtdCkpLCBcIkNvbW1pdFwiKSxcbiAgICBCcmFuY2g6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0bXQpID0+IGRiMi5icmFuY2gocGFyc2VCcmFuY2goc3RtdCkpLCBcIkJyYW5jaFwiKSxcbiAgICBNZXJnZTogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RtdCkgPT4gZGIyLm1lcmdlKHBhcnNlTWVyZ2Uoc3RtdCkpLCBcIk1lcmdlXCIpLFxuICAgIENoZWNrb3V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdG10KSA9PiBkYjIuY2hlY2tvdXQocGFyc2VDaGVja291dChzdG10KSksIFwiQ2hlY2tvdXRcIiksXG4gICAgQ2hlcnJ5UGlja2luZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RtdCkgPT4gZGIyLmNoZXJyeVBpY2socGFyc2VDaGVycnlQaWNraW5nKHN0bXQpKSwgXCJDaGVycnlQaWNraW5nXCIpXG4gIH07XG4gIGNvbnN0IHBhcnNlcjIgPSBwYXJzZXJzW3N0YXRlbWVudC4kdHlwZV07XG4gIGlmIChwYXJzZXIyKSB7XG4gICAgcGFyc2VyMihzdGF0ZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHtzdGF0ZW1lbnQuJHR5cGV9YCk7XG4gIH1cbn0sIFwicGFyc2VTdGF0ZW1lbnRcIik7XG52YXIgcGFyc2VDb21taXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb21taXQyKSA9PiB7XG4gIGNvbnN0IGNvbW1pdERCID0ge1xuICAgIGlkOiBjb21taXQyLmlkLFxuICAgIG1zZzogY29tbWl0Mi5tZXNzYWdlID8/IFwiXCIsXG4gICAgdHlwZTogY29tbWl0Mi50eXBlICE9PSB2b2lkIDAgPyBjb21taXRUeXBlW2NvbW1pdDIudHlwZV0gOiBjb21taXRUeXBlLk5PUk1BTCxcbiAgICB0YWdzOiBjb21taXQyLnRhZ3MgPz8gdm9pZCAwXG4gIH07XG4gIHJldHVybiBjb21taXREQjtcbn0sIFwicGFyc2VDb21taXRcIik7XG52YXIgcGFyc2VCcmFuY2ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChicmFuY2gyKSA9PiB7XG4gIGNvbnN0IGJyYW5jaERCID0ge1xuICAgIG5hbWU6IGJyYW5jaDIubmFtZSxcbiAgICBvcmRlcjogYnJhbmNoMi5vcmRlciA/PyAwXG4gIH07XG4gIHJldHVybiBicmFuY2hEQjtcbn0sIFwicGFyc2VCcmFuY2hcIik7XG52YXIgcGFyc2VNZXJnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG1lcmdlMikgPT4ge1xuICBjb25zdCBtZXJnZURCID0ge1xuICAgIGJyYW5jaDogbWVyZ2UyLmJyYW5jaCxcbiAgICBpZDogbWVyZ2UyLmlkID8/IFwiXCIsXG4gICAgdHlwZTogbWVyZ2UyLnR5cGUgIT09IHZvaWQgMCA/IGNvbW1pdFR5cGVbbWVyZ2UyLnR5cGVdIDogdm9pZCAwLFxuICAgIHRhZ3M6IG1lcmdlMi50YWdzID8/IHZvaWQgMFxuICB9O1xuICByZXR1cm4gbWVyZ2VEQjtcbn0sIFwicGFyc2VNZXJnZVwiKTtcbnZhciBwYXJzZUNoZWNrb3V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY2hlY2tvdXQyKSA9PiB7XG4gIGNvbnN0IGJyYW5jaDIgPSBjaGVja291dDIuYnJhbmNoO1xuICByZXR1cm4gYnJhbmNoMjtcbn0sIFwicGFyc2VDaGVja291dFwiKTtcbnZhciBwYXJzZUNoZXJyeVBpY2tpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjaGVycnlQaWNraW5nKSA9PiB7XG4gIGNvbnN0IGNoZXJyeVBpY2tEQiA9IHtcbiAgICBpZDogY2hlcnJ5UGlja2luZy5pZCxcbiAgICB0YXJnZXRJZDogXCJcIixcbiAgICB0YWdzOiBjaGVycnlQaWNraW5nLnRhZ3M/Lmxlbmd0aCA9PT0gMCA/IHZvaWQgMCA6IGNoZXJyeVBpY2tpbmcudGFncyxcbiAgICBwYXJlbnQ6IGNoZXJyeVBpY2tpbmcucGFyZW50XG4gIH07XG4gIHJldHVybiBjaGVycnlQaWNrREI7XG59LCBcInBhcnNlQ2hlcnJ5UGlja2luZ1wiKTtcbnZhciBwYXJzZXIgPSB7XG4gIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHBhcnNlKFwiZ2l0R3JhcGhcIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICAgIHBvcHVsYXRlKGFzdCwgZGIpO1xuICB9LCBcInBhcnNlXCIpXG59O1xuaWYgKHZvaWQgMCkge1xuICBjb25zdCB7IGl0LCBleHBlY3QsIGRlc2NyaWJlIH0gPSB2b2lkIDA7XG4gIGNvbnN0IG1vY2tEQiA9IHtcbiAgICBjb21taXRUeXBlLFxuICAgIHNldERpcmVjdGlvbjogdmkuZm4oKSxcbiAgICBjb21taXQ6IHZpLmZuKCksXG4gICAgYnJhbmNoOiB2aS5mbigpLFxuICAgIG1lcmdlOiB2aS5mbigpLFxuICAgIGNoZXJyeVBpY2s6IHZpLmZuKCksXG4gICAgY2hlY2tvdXQ6IHZpLmZuKClcbiAgfTtcbiAgZGVzY3JpYmUoXCJHaXRHcmFwaCBQYXJzZXJcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgY29tbWl0IHN0YXRlbWVudFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb21taXQyID0ge1xuICAgICAgICAkdHlwZTogXCJDb21taXRcIixcbiAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICBtZXNzYWdlOiBcInRlc3RcIixcbiAgICAgICAgdGFnczogW1widGFnMVwiLCBcInRhZzJcIl0sXG4gICAgICAgIHR5cGU6IFwiTk9STUFMXCJcbiAgICAgIH07XG4gICAgICBwYXJzZVN0YXRlbWVudChjb21taXQyLCBtb2NrREIpO1xuICAgICAgZXhwZWN0KG1vY2tEQi5jb21taXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICBtc2c6IFwidGVzdFwiLFxuICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXSxcbiAgICAgICAgdHlwZTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBicmFuY2ggc3RhdGVtZW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGJyYW5jaDIgPSB7XG4gICAgICAgICR0eXBlOiBcIkJyYW5jaFwiLFxuICAgICAgICBuYW1lOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICBvcmRlcjogMVxuICAgICAgfTtcbiAgICAgIHBhcnNlU3RhdGVtZW50KGJyYW5jaDIsIG1vY2tEQik7XG4gICAgICBleHBlY3QobW9ja0RCLmJyYW5jaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBuYW1lOiBcIm5ld0JyYW5jaFwiLCBvcmRlcjogMSB9KTtcbiAgICB9KTtcbiAgICBpdChcInNob3VsZCBwYXJzZSBhIGNoZWNrb3V0IHN0YXRlbWVudFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaGVja291dDIgPSB7XG4gICAgICAgICR0eXBlOiBcIkNoZWNrb3V0XCIsXG4gICAgICAgIGJyYW5jaDogXCJuZXdCcmFuY2hcIlxuICAgICAgfTtcbiAgICAgIHBhcnNlU3RhdGVtZW50KGNoZWNrb3V0MiwgbW9ja0RCKTtcbiAgICAgIGV4cGVjdChtb2NrREIuY2hlY2tvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFwibmV3QnJhbmNoXCIpO1xuICAgIH0pO1xuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgbWVyZ2Ugc3RhdGVtZW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lcmdlMiA9IHtcbiAgICAgICAgJHR5cGU6IFwiTWVyZ2VcIixcbiAgICAgICAgYnJhbmNoOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICB0eXBlOiBcIk5PUk1BTFwiXG4gICAgICB9O1xuICAgICAgcGFyc2VTdGF0ZW1lbnQobWVyZ2UyLCBtb2NrREIpO1xuICAgICAgZXhwZWN0KG1vY2tEQi5tZXJnZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBicmFuY2g6IFwibmV3QnJhbmNoXCIsXG4gICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgdGFnczogW1widGFnMVwiLCBcInRhZzJcIl0sXG4gICAgICAgIHR5cGU6IDBcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgY2hlcnJ5IHBpY2tpbmcgc3RhdGVtZW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGNoZXJyeVBpY2syID0ge1xuICAgICAgICAkdHlwZTogXCJDaGVycnlQaWNraW5nXCIsXG4gICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgdGFnczogW1widGFnMVwiLCBcInRhZzJcIl0sXG4gICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgIH07XG4gICAgICBwYXJzZVN0YXRlbWVudChjaGVycnlQaWNrMiwgbW9ja0RCKTtcbiAgICAgIGV4cGVjdChtb2NrREIuY2hlcnJ5UGljaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlwiLFxuICAgICAgICBwYXJlbnQ6IFwiMlwiLFxuICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBsYW5naXVtIGdlbmVyYXRlZCBnaXRHcmFwaCBhc3RcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgZHVtbXkgPSB7XG4gICAgICAgICR0eXBlOiBcIkdpdEdyYXBoXCIsXG4gICAgICAgIHN0YXRlbWVudHM6IFtdXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2l0R3JhcGhBc3QgPSB7XG4gICAgICAgICR0eXBlOiBcIkdpdEdyYXBoXCIsXG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkY29udGFpbmVyOiBkdW1teSxcbiAgICAgICAgICAgICR0eXBlOiBcIkNvbW1pdFwiLFxuICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJ0ZXN0XCIsXG4gICAgICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXSxcbiAgICAgICAgICAgIHR5cGU6IFwiTk9STUFMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRjb250YWluZXI6IGR1bW15LFxuICAgICAgICAgICAgJHR5cGU6IFwiQnJhbmNoXCIsXG4gICAgICAgICAgICBuYW1lOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICAgICAgb3JkZXI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRjb250YWluZXI6IGR1bW15LFxuICAgICAgICAgICAgJHR5cGU6IFwiTWVyZ2VcIixcbiAgICAgICAgICAgIGJyYW5jaDogXCJuZXdCcmFuY2hcIixcbiAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICAgICAgdHlwZTogXCJOT1JNQUxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJGNvbnRhaW5lcjogZHVtbXksXG4gICAgICAgICAgICAkdHlwZTogXCJDaGVja291dFwiLFxuICAgICAgICAgICAgYnJhbmNoOiBcIm5ld0JyYW5jaFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkY29udGFpbmVyOiBkdW1teSxcbiAgICAgICAgICAgICR0eXBlOiBcIkNoZXJyeVBpY2tpbmdcIixcbiAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICAgIHBvcHVsYXRlKGdpdEdyYXBoQXN0LCBtb2NrREIpO1xuICAgICAgZXhwZWN0KG1vY2tEQi5jb21taXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICBtc2c6IFwidGVzdFwiLFxuICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXSxcbiAgICAgICAgdHlwZTogMFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja0RCLmJyYW5jaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBuYW1lOiBcIm5ld0JyYW5jaFwiLCBvcmRlcjogMSB9KTtcbiAgICAgIGV4cGVjdChtb2NrREIubWVyZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYnJhbmNoOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICB0eXBlOiAwXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtb2NrREIuY2hlY2tvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFwibmV3QnJhbmNoXCIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9naXRHcmFwaFJlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbnZhciBERUZBVUxUX0NPTkZJRyA9IGdldENvbmZpZzIoKTtcbnZhciBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIgPSBERUZBVUxUX0NPTkZJRz8uZ2l0R3JhcGg7XG52YXIgTEFZT1VUX09GRlNFVCA9IDEwO1xudmFyIENPTU1JVF9TVEVQID0gNDA7XG52YXIgUFggPSA0O1xudmFyIFBZID0gMjtcbnZhciBUSEVNRV9DT0xPUl9MSU1JVCA9IDg7XG52YXIgYnJhbmNoUG9zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBjb21taXRQb3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGRlZmF1bHRQb3MgPSAzMDtcbnZhciBhbGxDb21taXRzRGljdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgbGFuZXMgPSBbXTtcbnZhciBtYXhQb3MgPSAwO1xudmFyIGRpciA9IFwiTFJcIjtcbnZhciBjbGVhcjMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgYnJhbmNoUG9zLmNsZWFyKCk7XG4gIGNvbW1pdFBvcy5jbGVhcigpO1xuICBhbGxDb21taXRzRGljdC5jbGVhcigpO1xuICBtYXhQb3MgPSAwO1xuICBsYW5lcyA9IFtdO1xuICBkaXIgPSBcIkxSXCI7XG59LCBcImNsZWFyXCIpO1xudmFyIGRyYXdUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIGNvbnN0IHN2Z0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0ZXh0XCIpO1xuICBjb25zdCByb3dzID0gdHlwZW9mIHR4dCA9PT0gXCJzdHJpbmdcIiA/IHR4dC5zcGxpdCgvXFxcXG58XFxufDxiclxccypcXC8/Pi9naSkgOiB0eHQ7XG4gIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgY29uc3QgdHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRzcGFuXCIpO1xuICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiZHlcIiwgXCIxZW1cIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyb3dcIik7XG4gICAgdHNwYW4udGV4dENvbnRlbnQgPSByb3cudHJpbSgpO1xuICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgfSk7XG4gIHJldHVybiBzdmdMYWJlbDtcbn0sIFwiZHJhd1RleHRcIik7XG52YXIgZmluZENsb3Nlc3RQYXJlbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnRzKSA9PiB7XG4gIGxldCBjbG9zZXN0UGFyZW50O1xuICBsZXQgY29tcGFyaXNvbkZ1bmM7XG4gIGxldCB0YXJnZXRQb3NpdGlvbjtcbiAgaWYgKGRpciA9PT0gXCJCVFwiKSB7XG4gICAgY29tcGFyaXNvbkZ1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhLCBiKSA9PiBhIDw9IGIsIFwiY29tcGFyaXNvbkZ1bmNcIik7XG4gICAgdGFyZ2V0UG9zaXRpb24gPSBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBjb21wYXJpc29uRnVuYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGEsIGIpID0+IGEgPj0gYiwgXCJjb21wYXJpc29uRnVuY1wiKTtcbiAgICB0YXJnZXRQb3NpdGlvbiA9IDA7XG4gIH1cbiAgcGFyZW50cy5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnRQb3NpdGlvbiA9IGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PSBcIkJUXCIgPyBjb21taXRQb3MuZ2V0KHBhcmVudCk/LnkgOiBjb21taXRQb3MuZ2V0KHBhcmVudCk/Lng7XG4gICAgaWYgKHBhcmVudFBvc2l0aW9uICE9PSB2b2lkIDAgJiYgY29tcGFyaXNvbkZ1bmMocGFyZW50UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKSkge1xuICAgICAgY2xvc2VzdFBhcmVudCA9IHBhcmVudDtcbiAgICAgIHRhcmdldFBvc2l0aW9uID0gcGFyZW50UG9zaXRpb247XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNsb3Nlc3RQYXJlbnQ7XG59LCBcImZpbmRDbG9zZXN0UGFyZW50XCIpO1xudmFyIGZpbmRDbG9zZXN0UGFyZW50QlQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnRzKSA9PiB7XG4gIGxldCBjbG9zZXN0UGFyZW50ID0gXCJcIjtcbiAgbGV0IG1heFBvc2l0aW9uID0gSW5maW5pdHk7XG4gIHBhcmVudHMuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50UG9zaXRpb24gPSBjb21taXRQb3MuZ2V0KHBhcmVudCkueTtcbiAgICBpZiAocGFyZW50UG9zaXRpb24gPD0gbWF4UG9zaXRpb24pIHtcbiAgICAgIGNsb3Nlc3RQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICBtYXhQb3NpdGlvbiA9IHBhcmVudFBvc2l0aW9uO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbG9zZXN0UGFyZW50IHx8IHZvaWQgMDtcbn0sIFwiZmluZENsb3Nlc3RQYXJlbnRCVFwiKTtcbnZhciBzZXRQYXJhbGxlbEJUUG9zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc29ydGVkS2V5cywgY29tbWl0cywgZGVmYXVsdFBvczIpID0+IHtcbiAgbGV0IGN1clBvcyA9IGRlZmF1bHRQb3MyO1xuICBsZXQgbWF4UG9zaXRpb24gPSBkZWZhdWx0UG9zMjtcbiAgY29uc3Qgcm9vdHMgPSBbXTtcbiAgc29ydGVkS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBjb21taXQyID0gY29tbWl0cy5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbW1pdDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7a2V5fWApO1xuICAgIH1cbiAgICBpZiAoY29tbWl0Mi5wYXJlbnRzLmxlbmd0aCkge1xuICAgICAgY3VyUG9zID0gY2FsY3VsYXRlQ29tbWl0UG9zaXRpb24oY29tbWl0Mik7XG4gICAgICBtYXhQb3NpdGlvbiA9IE1hdGgubWF4KGN1clBvcywgbWF4UG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290cy5wdXNoKGNvbW1pdDIpO1xuICAgIH1cbiAgICBzZXRDb21taXRQb3NpdGlvbihjb21taXQyLCBjdXJQb3MpO1xuICB9KTtcbiAgY3VyUG9zID0gbWF4UG9zaXRpb247XG4gIHJvb3RzLmZvckVhY2goKGNvbW1pdDIpID0+IHtcbiAgICBzZXRSb290UG9zaXRpb24oY29tbWl0MiwgY3VyUG9zLCBkZWZhdWx0UG9zMik7XG4gIH0pO1xuICBzb3J0ZWRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGNvbW1pdDIgPSBjb21taXRzLmdldChrZXkpO1xuICAgIGlmIChjb21taXQyPy5wYXJlbnRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2xvc2VzdFBhcmVudCA9IGZpbmRDbG9zZXN0UGFyZW50QlQoY29tbWl0Mi5wYXJlbnRzKTtcbiAgICAgIGN1clBvcyA9IGNvbW1pdFBvcy5nZXQoY2xvc2VzdFBhcmVudCkueSAtIENPTU1JVF9TVEVQO1xuICAgICAgaWYgKGN1clBvcyA8PSBtYXhQb3NpdGlvbikge1xuICAgICAgICBtYXhQb3NpdGlvbiA9IGN1clBvcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHggPSBicmFuY2hQb3MuZ2V0KGNvbW1pdDIuYnJhbmNoKS5wb3M7XG4gICAgICBjb25zdCB5ID0gY3VyUG9zIC0gTEFZT1VUX09GRlNFVDtcbiAgICAgIGNvbW1pdFBvcy5zZXQoY29tbWl0Mi5pZCwgeyB4LCB5IH0pO1xuICAgIH1cbiAgfSk7XG59LCBcInNldFBhcmFsbGVsQlRQb3NcIik7XG52YXIgZmluZENsb3Nlc3RQYXJlbnRQb3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb21taXQyKSA9PiB7XG4gIGNvbnN0IGNsb3Nlc3RQYXJlbnQgPSBmaW5kQ2xvc2VzdFBhcmVudChjb21taXQyLnBhcmVudHMuZmlsdGVyKChwKSA9PiBwICE9PSBudWxsKSk7XG4gIGlmICghY2xvc2VzdFBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHtjb21taXQyLmlkfWApO1xuICB9XG4gIGNvbnN0IGNsb3Nlc3RQYXJlbnRQb3MgPSBjb21taXRQb3MuZ2V0KGNsb3Nlc3RQYXJlbnQpPy55O1xuICBpZiAoY2xvc2VzdFBhcmVudFBvcyA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDbG9zZXN0IHBhcmVudCBwb3NpdGlvbiBub3QgZm91bmQgZm9yIGNvbW1pdCAke2NvbW1pdDIuaWR9YCk7XG4gIH1cbiAgcmV0dXJuIGNsb3Nlc3RQYXJlbnRQb3M7XG59LCBcImZpbmRDbG9zZXN0UGFyZW50UG9zXCIpO1xudmFyIGNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MikgPT4ge1xuICBjb25zdCBjbG9zZXN0UGFyZW50UG9zID0gZmluZENsb3Nlc3RQYXJlbnRQb3MoY29tbWl0Mik7XG4gIHJldHVybiBjbG9zZXN0UGFyZW50UG9zICsgQ09NTUlUX1NURVA7XG59LCBcImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uXCIpO1xudmFyIHNldENvbW1pdFBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MiwgY3VyUG9zKSA9PiB7XG4gIGNvbnN0IGJyYW5jaDIgPSBicmFuY2hQb3MuZ2V0KGNvbW1pdDIuYnJhbmNoKTtcbiAgaWYgKCFicmFuY2gyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCcmFuY2ggbm90IGZvdW5kIGZvciBjb21taXQgJHtjb21taXQyLmlkfWApO1xuICB9XG4gIGNvbnN0IHggPSBicmFuY2gyLnBvcztcbiAgY29uc3QgeSA9IGN1clBvcyArIExBWU9VVF9PRkZTRVQ7XG4gIGNvbW1pdFBvcy5zZXQoY29tbWl0Mi5pZCwgeyB4LCB5IH0pO1xuICByZXR1cm4geyB4LCB5IH07XG59LCBcInNldENvbW1pdFBvc2l0aW9uXCIpO1xudmFyIHNldFJvb3RQb3NpdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbW1pdDIsIGN1clBvcywgZGVmYXVsdFBvczIpID0+IHtcbiAgY29uc3QgYnJhbmNoMiA9IGJyYW5jaFBvcy5nZXQoY29tbWl0Mi5icmFuY2gpO1xuICBpZiAoIWJyYW5jaDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke2NvbW1pdDIuaWR9YCk7XG4gIH1cbiAgY29uc3QgeSA9IGN1clBvcyArIGRlZmF1bHRQb3MyO1xuICBjb25zdCB4ID0gYnJhbmNoMi5wb3M7XG4gIGNvbW1pdFBvcy5zZXQoY29tbWl0Mi5pZCwgeyB4LCB5IH0pO1xufSwgXCJzZXRSb290UG9zaXRpb25cIik7XG52YXIgZHJhd0NvbW1pdEJ1bGxldCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGdCdWxsZXRzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgdHlwZUNsYXNzLCBicmFuY2hJbmRleCwgY29tbWl0U3ltYm9sVHlwZSkgPT4ge1xuICBpZiAoY29tbWl0U3ltYm9sVHlwZSA9PT0gY29tbWl0VHlwZS5ISUdITElHSFQpIHtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIGNvbW1pdFBvc2l0aW9uLnggLSAxMCkuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDEwKS5hdHRyKFwid2lkdGhcIiwgMjApLmF0dHIoXCJoZWlnaHRcIiwgMjApLmF0dHIoXG4gICAgICBcImNsYXNzXCIsXG4gICAgICBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gY29tbWl0LWhpZ2hsaWdodCR7YnJhbmNoSW5kZXggJSBUSEVNRV9DT0xPUl9MSU1JVH0gJHt0eXBlQ2xhc3N9LW91dGVyYFxuICAgICk7XG4gICAgZ0J1bGxldHMuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi54IC0gNikuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDYpLmF0dHIoXCJ3aWR0aFwiLCAxMikuYXR0cihcImhlaWdodFwiLCAxMikuYXR0cihcbiAgICAgIFwiY2xhc3NcIixcbiAgICAgIGBjb21taXQgJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaEluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9ICR7dHlwZUNsYXNzfS1pbm5lcmBcbiAgICApO1xuICB9IGVsc2UgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuQ0hFUlJZX1BJQ0spIHtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLngpLmF0dHIoXCJjeVwiLCBjb21taXRQb3NpdGlvbi55KS5hdHRyKFwiclwiLCAxMCkuYXR0cihcImNsYXNzXCIsIGBjb21taXQgJHtjb21taXQyLmlkfSAke3R5cGVDbGFzc31gKTtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLnggLSAzKS5hdHRyKFwiY3lcIiwgY29tbWl0UG9zaXRpb24ueSArIDIpLmF0dHIoXCJyXCIsIDIuNzUpLmF0dHIoXCJmaWxsXCIsIFwiI2ZmZlwiKS5hdHRyKFwiY2xhc3NcIiwgYGNvbW1pdCAke2NvbW1pdDIuaWR9ICR7dHlwZUNsYXNzfWApO1xuICAgIGdCdWxsZXRzLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgY29tbWl0UG9zaXRpb24ueCArIDMpLmF0dHIoXCJjeVwiLCBjb21taXRQb3NpdGlvbi55ICsgMikuYXR0cihcInJcIiwgMi43NSkuYXR0cihcImZpbGxcIiwgXCIjZmZmXCIpLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgZ0J1bGxldHMuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgY29tbWl0UG9zaXRpb24ueCArIDMpLmF0dHIoXCJ5MVwiLCBjb21taXRQb3NpdGlvbi55ICsgMSkuYXR0cihcIngyXCIsIGNvbW1pdFBvc2l0aW9uLngpLmF0dHIoXCJ5MlwiLCBjb21taXRQb3NpdGlvbi55IC0gNSkuYXR0cihcInN0cm9rZVwiLCBcIiNmZmZcIikuYXR0cihcImNsYXNzXCIsIGBjb21taXQgJHtjb21taXQyLmlkfSAke3R5cGVDbGFzc31gKTtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBjb21taXRQb3NpdGlvbi54IC0gMykuYXR0cihcInkxXCIsIGNvbW1pdFBvc2l0aW9uLnkgKyAxKS5hdHRyKFwieDJcIiwgY29tbWl0UG9zaXRpb24ueCkuYXR0cihcInkyXCIsIGNvbW1pdFBvc2l0aW9uLnkgLSA1KS5hdHRyKFwic3Ryb2tlXCIsIFwiI2ZmZlwiKS5hdHRyKFwiY2xhc3NcIiwgYGNvbW1pdCAke2NvbW1pdDIuaWR9ICR7dHlwZUNsYXNzfWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNpcmNsZSA9IGdCdWxsZXRzLmFwcGVuZChcImNpcmNsZVwiKTtcbiAgICBjaXJjbGUuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLngpO1xuICAgIGNpcmNsZS5hdHRyKFwiY3lcIiwgY29tbWl0UG9zaXRpb24ueSk7XG4gICAgY2lyY2xlLmF0dHIoXCJyXCIsIGNvbW1pdDIudHlwZSA9PT0gY29tbWl0VHlwZS5NRVJHRSA/IDkgOiAxMCk7XG4gICAgY2lyY2xlLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gY29tbWl0JHticmFuY2hJbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUfWApO1xuICAgIGlmIChjb21taXRTeW1ib2xUeXBlID09PSBjb21taXRUeXBlLk1FUkdFKSB7XG4gICAgICBjb25zdCBjaXJjbGUyID0gZ0J1bGxldHMuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICAgICAgY2lyY2xlMi5hdHRyKFwiY3hcIiwgY29tbWl0UG9zaXRpb24ueCk7XG4gICAgICBjaXJjbGUyLmF0dHIoXCJjeVwiLCBjb21taXRQb3NpdGlvbi55KTtcbiAgICAgIGNpcmNsZTIuYXR0cihcInJcIiwgNik7XG4gICAgICBjaXJjbGUyLmF0dHIoXG4gICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgYGNvbW1pdCAke3R5cGVDbGFzc30gJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaEluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuUkVWRVJTRSkge1xuICAgICAgY29uc3QgY3Jvc3MgPSBnQnVsbGV0cy5hcHBlbmQoXCJwYXRoXCIpO1xuICAgICAgY3Jvc3MuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIGBNICR7Y29tbWl0UG9zaXRpb24ueCAtIDV9LCR7Y29tbWl0UG9zaXRpb24ueSAtIDV9TCR7Y29tbWl0UG9zaXRpb24ueCArIDV9LCR7Y29tbWl0UG9zaXRpb24ueSArIDV9TSR7Y29tbWl0UG9zaXRpb24ueCAtIDV9LCR7Y29tbWl0UG9zaXRpb24ueSArIDV9TCR7Y29tbWl0UG9zaXRpb24ueCArIDV9LCR7Y29tbWl0UG9zaXRpb24ueSAtIDV9YFxuICAgICAgKS5hdHRyKFwiY2xhc3NcIiwgYGNvbW1pdCAke3R5cGVDbGFzc30gJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaEluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9YCk7XG4gICAgfVxuICB9XG59LCBcImRyYXdDb21taXRCdWxsZXRcIik7XG52YXIgZHJhd0NvbW1pdExhYmVsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ0xhYmVscywgY29tbWl0MiwgY29tbWl0UG9zaXRpb24sIHBvcykgPT4ge1xuICBpZiAoY29tbWl0Mi50eXBlICE9PSBjb21taXRUeXBlLkNIRVJSWV9QSUNLICYmIChjb21taXQyLmN1c3RvbUlkICYmIGNvbW1pdDIudHlwZSA9PT0gY29tbWl0VHlwZS5NRVJHRSB8fCBjb21taXQyLnR5cGUgIT09IGNvbW1pdFR5cGUuTUVSR0UpICYmIERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMj8uc2hvd0NvbW1pdExhYmVsKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGdMYWJlbHMuYXBwZW5kKFwiZ1wiKTtcbiAgICBjb25zdCBsYWJlbEJrZyA9IHdyYXBwZXIuaW5zZXJ0KFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJjb21taXQtbGFiZWwtYmtnXCIpO1xuICAgIGNvbnN0IHRleHQgPSB3cmFwcGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgcG9zKS5hdHRyKFwieVwiLCBjb21taXRQb3NpdGlvbi55ICsgMjUpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1sYWJlbFwiKS50ZXh0KGNvbW1pdDIuaWQpO1xuICAgIGNvbnN0IGJib3ggPSB0ZXh0Lm5vZGUoKT8uZ2V0QkJveCgpO1xuICAgIGlmIChiYm94KSB7XG4gICAgICBsYWJlbEJrZy5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi5wb3NXaXRoT2Zmc2V0IC0gYmJveC53aWR0aCAvIDIgLSBQWSkuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSArIDEzLjUpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgMiAqIFBZKS5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0ICsgMiAqIFBZKTtcbiAgICAgIGlmIChkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIikge1xuICAgICAgICBsYWJlbEJrZy5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi54IC0gKGJib3gud2lkdGggKyA0ICogUFggKyA1KSkuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDEyKTtcbiAgICAgICAgdGV4dC5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi54IC0gKGJib3gud2lkdGggKyA0ICogUFgpKS5hdHRyKFwieVwiLCBjb21taXRQb3NpdGlvbi55ICsgYmJveC5oZWlnaHQgLSAxMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0LmF0dHIoXCJ4XCIsIGNvbW1pdFBvc2l0aW9uLnBvc1dpdGhPZmZzZXQgLSBiYm94LndpZHRoIC8gMik7XG4gICAgICB9XG4gICAgICBpZiAoREVGQVVMVF9HSVRHUkFQSF9DT05GSUcyLnJvdGF0ZUNvbW1pdExhYmVsKSB7XG4gICAgICAgIGlmIChkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIikge1xuICAgICAgICAgIHRleHQuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInJvdGF0ZSgtNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLCBcIiArIGNvbW1pdFBvc2l0aW9uLnkgKyBcIilcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgbGFiZWxCa2cuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInJvdGF0ZSgtNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLCBcIiArIGNvbW1pdFBvc2l0aW9uLnkgKyBcIilcIlxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgcl94ID0gLTcuNSAtIChiYm94LndpZHRoICsgMTApIC8gMjUgKiA5LjU7XG4gICAgICAgICAgY29uc3Qgcl95ID0gMTAgKyBiYm94LndpZHRoIC8gMjUgKiA4LjU7XG4gICAgICAgICAgd3JhcHBlci5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgcl94ICsgXCIsIFwiICsgcl95ICsgXCIpIHJvdGF0ZSgtNDUsIFwiICsgcG9zICsgXCIsIFwiICsgY29tbWl0UG9zaXRpb24ueSArIFwiKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSwgXCJkcmF3Q29tbWl0TGFiZWxcIik7XG52YXIgZHJhd0NvbW1pdFRhZ3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChnTGFiZWxzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgcG9zKSA9PiB7XG4gIGlmIChjb21taXQyLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgIGxldCB5T2Zmc2V0ID0gMDtcbiAgICBsZXQgbWF4VGFnQmJveFdpZHRoID0gMDtcbiAgICBsZXQgbWF4VGFnQmJveEhlaWdodCA9IDA7XG4gICAgY29uc3QgdGFnRWxlbWVudHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIG9mIGNvbW1pdDIudGFncy5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBnTGFiZWxzLmluc2VydChcInBvbHlnb25cIik7XG4gICAgICBjb25zdCBob2xlID0gZ0xhYmVscy5hcHBlbmQoXCJjaXJjbGVcIik7XG4gICAgICBjb25zdCB0YWcgPSBnTGFiZWxzLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDE2IC0geU9mZnNldCkuYXR0cihcImNsYXNzXCIsIFwidGFnLWxhYmVsXCIpLnRleHQodGFnVmFsdWUpO1xuICAgICAgY29uc3QgdGFnQmJveCA9IHRhZy5ub2RlKCk/LmdldEJCb3goKTtcbiAgICAgIGlmICghdGFnQmJveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWcgYmJveCBub3QgZm91bmRcIik7XG4gICAgICB9XG4gICAgICBtYXhUYWdCYm94V2lkdGggPSBNYXRoLm1heChtYXhUYWdCYm94V2lkdGgsIHRhZ0Jib3gud2lkdGgpO1xuICAgICAgbWF4VGFnQmJveEhlaWdodCA9IE1hdGgubWF4KG1heFRhZ0Jib3hIZWlnaHQsIHRhZ0Jib3guaGVpZ2h0KTtcbiAgICAgIHRhZy5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi5wb3NXaXRoT2Zmc2V0IC0gdGFnQmJveC53aWR0aCAvIDIpO1xuICAgICAgdGFnRWxlbWVudHMucHVzaCh7XG4gICAgICAgIHRhZyxcbiAgICAgICAgaG9sZSxcbiAgICAgICAgcmVjdCxcbiAgICAgICAgeU9mZnNldFxuICAgICAgfSk7XG4gICAgICB5T2Zmc2V0ICs9IDIwO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgdGFnLCBob2xlLCByZWN0LCB5T2Zmc2V0OiB5T2Zmc2V0MiB9IG9mIHRhZ0VsZW1lbnRzKSB7XG4gICAgICBjb25zdCBoMiA9IG1heFRhZ0Jib3hIZWlnaHQgLyAyO1xuICAgICAgY29uc3QgbHkgPSBjb21taXRQb3NpdGlvbi55IC0gMTkuMiAtIHlPZmZzZXQyO1xuICAgICAgcmVjdC5hdHRyKFwiY2xhc3NcIiwgXCJ0YWctbGFiZWwtYmtnXCIpLmF0dHIoXG4gICAgICAgIFwicG9pbnRzXCIsXG4gICAgICAgIGBcbiAgICAgICR7cG9zIC0gbWF4VGFnQmJveFdpZHRoIC8gMiAtIFBYIC8gMn0sJHtseSArIFBZfSAgXG4gICAgICAke3BvcyAtIG1heFRhZ0Jib3hXaWR0aCAvIDIgLSBQWCAvIDJ9LCR7bHkgLSBQWX1cbiAgICAgICR7Y29tbWl0UG9zaXRpb24ucG9zV2l0aE9mZnNldCAtIG1heFRhZ0Jib3hXaWR0aCAvIDIgLSBQWH0sJHtseSAtIGgyIC0gUFl9XG4gICAgICAke2NvbW1pdFBvc2l0aW9uLnBvc1dpdGhPZmZzZXQgKyBtYXhUYWdCYm94V2lkdGggLyAyICsgUFh9LCR7bHkgLSBoMiAtIFBZfVxuICAgICAgJHtjb21taXRQb3NpdGlvbi5wb3NXaXRoT2Zmc2V0ICsgbWF4VGFnQmJveFdpZHRoIC8gMiArIFBYfSwke2x5ICsgaDIgKyBQWX1cbiAgICAgICR7Y29tbWl0UG9zaXRpb24ucG9zV2l0aE9mZnNldCAtIG1heFRhZ0Jib3hXaWR0aCAvIDIgLSBQWH0sJHtseSArIGgyICsgUFl9YFxuICAgICAgKTtcbiAgICAgIGhvbGUuYXR0cihcImN5XCIsIGx5KS5hdHRyKFwiY3hcIiwgcG9zIC0gbWF4VGFnQmJveFdpZHRoIC8gMiArIFBYIC8gMikuYXR0cihcInJcIiwgMS41KS5hdHRyKFwiY2xhc3NcIiwgXCJ0YWctaG9sZVwiKTtcbiAgICAgIGlmIChkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIikge1xuICAgICAgICBjb25zdCB5T3JpZ2luID0gcG9zICsgeU9mZnNldDI7XG4gICAgICAgIHJlY3QuYXR0cihcImNsYXNzXCIsIFwidGFnLWxhYmVsLWJrZ1wiKS5hdHRyKFxuICAgICAgICAgIFwicG9pbnRzXCIsXG4gICAgICAgICAgYFxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnh9LCR7eU9yaWdpbiArIDJ9XG4gICAgICAgICR7Y29tbWl0UG9zaXRpb24ueH0sJHt5T3JpZ2luIC0gMn1cbiAgICAgICAgJHtjb21taXRQb3NpdGlvbi54ICsgTEFZT1VUX09GRlNFVH0sJHt5T3JpZ2luIC0gaDIgLSAyfVxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnggKyBMQVlPVVRfT0ZGU0VUICsgbWF4VGFnQmJveFdpZHRoICsgNH0sJHt5T3JpZ2luIC0gaDIgLSAyfVxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnggKyBMQVlPVVRfT0ZGU0VUICsgbWF4VGFnQmJveFdpZHRoICsgNH0sJHt5T3JpZ2luICsgaDIgKyAyfVxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnggKyBMQVlPVVRfT0ZGU0VUfSwke3lPcmlnaW4gKyBoMiArIDJ9YFxuICAgICAgICApLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgXCIgKyBjb21taXRQb3NpdGlvbi54ICsgXCIsXCIgKyBwb3MgKyBcIilcIik7XG4gICAgICAgIGhvbGUuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLnggKyBQWCAvIDIpLmF0dHIoXCJjeVwiLCB5T3JpZ2luKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDEyLDEyKSByb3RhdGUoNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLFwiICsgcG9zICsgXCIpXCIpO1xuICAgICAgICB0YWcuYXR0cihcInhcIiwgY29tbWl0UG9zaXRpb24ueCArIDUpLmF0dHIoXCJ5XCIsIHlPcmlnaW4gKyAzKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLFwiICsgcG9zICsgXCIpXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSwgXCJkcmF3Q29tbWl0VGFnc1wiKTtcbnZhciBnZXRDb21taXRDbGFzc1R5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb21taXQyKSA9PiB7XG4gIGNvbnN0IGNvbW1pdFN5bWJvbFR5cGUgPSBjb21taXQyLmN1c3RvbVR5cGUgPz8gY29tbWl0Mi50eXBlO1xuICBzd2l0Y2ggKGNvbW1pdFN5bWJvbFR5cGUpIHtcbiAgICBjYXNlIGNvbW1pdFR5cGUuTk9STUFMOlxuICAgICAgcmV0dXJuIFwiY29tbWl0LW5vcm1hbFwiO1xuICAgIGNhc2UgY29tbWl0VHlwZS5SRVZFUlNFOlxuICAgICAgcmV0dXJuIFwiY29tbWl0LXJldmVyc2VcIjtcbiAgICBjYXNlIGNvbW1pdFR5cGUuSElHSExJR0hUOlxuICAgICAgcmV0dXJuIFwiY29tbWl0LWhpZ2hsaWdodFwiO1xuICAgIGNhc2UgY29tbWl0VHlwZS5NRVJHRTpcbiAgICAgIHJldHVybiBcImNvbW1pdC1tZXJnZVwiO1xuICAgIGNhc2UgY29tbWl0VHlwZS5DSEVSUllfUElDSzpcbiAgICAgIHJldHVybiBcImNvbW1pdC1jaGVycnktcGlja1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJjb21taXQtbm9ybWFsXCI7XG4gIH1cbn0sIFwiZ2V0Q29tbWl0Q2xhc3NUeXBlXCIpO1xudmFyIGNhbGN1bGF0ZVBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MiwgZGlyMiwgcG9zLCBjb21taXRQb3MyKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRDb21taXRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xuICBpZiAoY29tbWl0Mi5wYXJlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjbG9zZXN0UGFyZW50ID0gZmluZENsb3Nlc3RQYXJlbnQoY29tbWl0Mi5wYXJlbnRzKTtcbiAgICBpZiAoY2xvc2VzdFBhcmVudCkge1xuICAgICAgY29uc3QgcGFyZW50UG9zaXRpb24gPSBjb21taXRQb3MyLmdldChjbG9zZXN0UGFyZW50KSA/PyBkZWZhdWx0Q29tbWl0UG9zaXRpb247XG4gICAgICBpZiAoZGlyMiA9PT0gXCJUQlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRQb3NpdGlvbi55ICsgQ09NTUlUX1NURVA7XG4gICAgICB9IGVsc2UgaWYgKGRpcjIgPT09IFwiQlRcIikge1xuICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSBjb21taXRQb3MyLmdldChjb21taXQyLmlkKSA/PyBkZWZhdWx0Q29tbWl0UG9zaXRpb247XG4gICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb24ueSAtIENPTU1JVF9TVEVQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFBvc2l0aW9uLnggKyBDT01NSVRfU1RFUDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRpcjIgPT09IFwiVEJcIikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQb3M7XG4gICAgfSBlbHNlIGlmIChkaXIyID09PSBcIkJUXCIpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGNvbW1pdFBvczIuZ2V0KGNvbW1pdDIuaWQpID8/IGRlZmF1bHRDb21taXRQb3NpdGlvbjtcbiAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb24ueSAtIENPTU1JVF9TVEVQO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59LCBcImNhbGN1bGF0ZVBvc2l0aW9uXCIpO1xudmFyIGdldENvbW1pdFBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MiwgcG9zLCBpc1BhcmFsbGVsQ29tbWl0cykgPT4ge1xuICBjb25zdCBwb3NXaXRoT2Zmc2V0ID0gZGlyID09PSBcIkJUXCIgJiYgaXNQYXJhbGxlbENvbW1pdHMgPyBwb3MgOiBwb3MgKyBMQVlPVVRfT0ZGU0VUO1xuICBjb25zdCB5ID0gZGlyID09PSBcIlRCXCIgfHwgZGlyID09PSBcIkJUXCIgPyBwb3NXaXRoT2Zmc2V0IDogYnJhbmNoUG9zLmdldChjb21taXQyLmJyYW5jaCk/LnBvcztcbiAgY29uc3QgeCA9IGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiID8gYnJhbmNoUG9zLmdldChjb21taXQyLmJyYW5jaCk/LnBvcyA6IHBvc1dpdGhPZmZzZXQ7XG4gIGlmICh4ID09PSB2b2lkIDAgfHwgeSA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiB3ZXJlIHVuZGVmaW5lZCBmb3IgY29tbWl0ICR7Y29tbWl0Mi5pZH1gKTtcbiAgfVxuICByZXR1cm4geyB4LCB5LCBwb3NXaXRoT2Zmc2V0IH07XG59LCBcImdldENvbW1pdFBvc2l0aW9uXCIpO1xudmFyIGRyYXdDb21taXRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3ZnLCBjb21taXRzLCBtb2RpZnlHcmFwaCkgPT4ge1xuICBpZiAoIURFRkFVTFRfR0lUR1JBUEhfQ09ORklHMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgZ0J1bGxldHMgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjb21taXQtYnVsbGV0c1wiKTtcbiAgY29uc3QgZ0xhYmVscyA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1sYWJlbHNcIik7XG4gIGxldCBwb3MgPSBkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIiA/IGRlZmF1bHRQb3MgOiAwO1xuICBjb25zdCBrZXlzID0gWy4uLmNvbW1pdHMua2V5cygpXTtcbiAgY29uc3QgaXNQYXJhbGxlbENvbW1pdHMgPSBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzI/LnBhcmFsbGVsQ29tbWl0cyA/PyBmYWxzZTtcbiAgY29uc3Qgc29ydEtleXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc2VxQSA9IGNvbW1pdHMuZ2V0KGEpPy5zZXE7XG4gICAgY29uc3Qgc2VxQiA9IGNvbW1pdHMuZ2V0KGIpPy5zZXE7XG4gICAgcmV0dXJuIHNlcUEgIT09IHZvaWQgMCAmJiBzZXFCICE9PSB2b2lkIDAgPyBzZXFBIC0gc2VxQiA6IDA7XG4gIH0sIFwic29ydEtleXNcIik7XG4gIGxldCBzb3J0ZWRLZXlzID0ga2V5cy5zb3J0KHNvcnRLZXlzKTtcbiAgaWYgKGRpciA9PT0gXCJCVFwiKSB7XG4gICAgaWYgKGlzUGFyYWxsZWxDb21taXRzKSB7XG4gICAgICBzZXRQYXJhbGxlbEJUUG9zKHNvcnRlZEtleXMsIGNvbW1pdHMsIHBvcyk7XG4gICAgfVxuICAgIHNvcnRlZEtleXMgPSBzb3J0ZWRLZXlzLnJldmVyc2UoKTtcbiAgfVxuICBzb3J0ZWRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGNvbW1pdDIgPSBjb21taXRzLmdldChrZXkpO1xuICAgIGlmICghY29tbWl0Mikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtrZXl9YCk7XG4gICAgfVxuICAgIGlmIChpc1BhcmFsbGVsQ29tbWl0cykge1xuICAgICAgcG9zID0gY2FsY3VsYXRlUG9zaXRpb24oY29tbWl0MiwgZGlyLCBwb3MsIGNvbW1pdFBvcyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1pdFBvc2l0aW9uID0gZ2V0Q29tbWl0UG9zaXRpb24oY29tbWl0MiwgcG9zLCBpc1BhcmFsbGVsQ29tbWl0cyk7XG4gICAgaWYgKG1vZGlmeUdyYXBoKSB7XG4gICAgICBjb25zdCB0eXBlQ2xhc3MgPSBnZXRDb21taXRDbGFzc1R5cGUoY29tbWl0Mik7XG4gICAgICBjb25zdCBjb21taXRTeW1ib2xUeXBlID0gY29tbWl0Mi5jdXN0b21UeXBlID8/IGNvbW1pdDIudHlwZTtcbiAgICAgIGNvbnN0IGJyYW5jaEluZGV4ID0gYnJhbmNoUG9zLmdldChjb21taXQyLmJyYW5jaCk/LmluZGV4ID8/IDA7XG4gICAgICBkcmF3Q29tbWl0QnVsbGV0KGdCdWxsZXRzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgdHlwZUNsYXNzLCBicmFuY2hJbmRleCwgY29tbWl0U3ltYm9sVHlwZSk7XG4gICAgICBkcmF3Q29tbWl0TGFiZWwoZ0xhYmVscywgY29tbWl0MiwgY29tbWl0UG9zaXRpb24sIHBvcyk7XG4gICAgICBkcmF3Q29tbWl0VGFncyhnTGFiZWxzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgcG9zKTtcbiAgICB9XG4gICAgaWYgKGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiKSB7XG4gICAgICBjb21taXRQb3Muc2V0KGNvbW1pdDIuaWQsIHsgeDogY29tbWl0UG9zaXRpb24ueCwgeTogY29tbWl0UG9zaXRpb24ucG9zV2l0aE9mZnNldCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0UG9zLnNldChjb21taXQyLmlkLCB7IHg6IGNvbW1pdFBvc2l0aW9uLnBvc1dpdGhPZmZzZXQsIHk6IGNvbW1pdFBvc2l0aW9uLnkgfSk7XG4gICAgfVxuICAgIHBvcyA9IGRpciA9PT0gXCJCVFwiICYmIGlzUGFyYWxsZWxDb21taXRzID8gcG9zICsgQ09NTUlUX1NURVAgOiBwb3MgKyBDT01NSVRfU1RFUCArIExBWU9VVF9PRkZTRVQ7XG4gICAgaWYgKHBvcyA+IG1heFBvcykge1xuICAgICAgbWF4UG9zID0gcG9zO1xuICAgIH1cbiAgfSk7XG59LCBcImRyYXdDb21taXRzXCIpO1xudmFyIHNob3VsZFJlcm91dGVBcnJvdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbW1pdEEsIGNvbW1pdEIsIHAxLCBwMiwgYWxsQ29tbWl0cykgPT4ge1xuICBjb25zdCBjb21taXRCSXNGdXJ0aGVzdCA9IGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiID8gcDEueCA8IHAyLnggOiBwMS55IDwgcDIueTtcbiAgY29uc3QgYnJhbmNoVG9HZXRDdXJ2ZSA9IGNvbW1pdEJJc0Z1cnRoZXN0ID8gY29tbWl0Qi5icmFuY2ggOiBjb21taXRBLmJyYW5jaDtcbiAgY29uc3QgaXNPbkJyYW5jaFRvR2V0Q3VydmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4KSA9PiB4LmJyYW5jaCA9PT0gYnJhbmNoVG9HZXRDdXJ2ZSwgXCJpc09uQnJhbmNoVG9HZXRDdXJ2ZVwiKTtcbiAgY29uc3QgaXNCZXR3ZWVuQ29tbWl0cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHguc2VxID4gY29tbWl0QS5zZXEgJiYgeC5zZXEgPCBjb21taXRCLnNlcSwgXCJpc0JldHdlZW5Db21taXRzXCIpO1xuICByZXR1cm4gWy4uLmFsbENvbW1pdHMudmFsdWVzKCldLnNvbWUoKGNvbW1pdFgpID0+IHtcbiAgICByZXR1cm4gaXNCZXR3ZWVuQ29tbWl0cyhjb21taXRYKSAmJiBpc09uQnJhbmNoVG9HZXRDdXJ2ZShjb21taXRYKTtcbiAgfSk7XG59LCBcInNob3VsZFJlcm91dGVBcnJvd1wiKTtcbnZhciBmaW5kTGFuZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHkxLCB5MiwgZGVwdGggPSAwKSA9PiB7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHkxICsgTWF0aC5hYnMoeTEgLSB5MikgLyAyO1xuICBpZiAoZGVwdGggPiA1KSB7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuICBjb25zdCBvayA9IGxhbmVzLmV2ZXJ5KChsYW5lKSA9PiBNYXRoLmFicyhsYW5lIC0gY2FuZGlkYXRlKSA+PSAxMCk7XG4gIGlmIChvaykge1xuICAgIGxhbmVzLnB1c2goY2FuZGlkYXRlKTtcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG4gIGNvbnN0IGRpZmYgPSBNYXRoLmFicyh5MSAtIHkyKTtcbiAgcmV0dXJuIGZpbmRMYW5lKHkxLCB5MiAtIGRpZmYgLyA1LCBkZXB0aCArIDEpO1xufSwgXCJmaW5kTGFuZVwiKTtcbnZhciBkcmF3QXJyb3cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmcsIGNvbW1pdEEsIGNvbW1pdEIsIGFsbENvbW1pdHMpID0+IHtcbiAgY29uc3QgcDEgPSBjb21taXRQb3MuZ2V0KGNvbW1pdEEuaWQpO1xuICBjb25zdCBwMiA9IGNvbW1pdFBvcy5nZXQoY29tbWl0Qi5pZCk7XG4gIGlmIChwMSA9PT0gdm9pZCAwIHx8IHAyID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1pdCBwb3NpdGlvbnMgbm90IGZvdW5kIGZvciBjb21taXRzICR7Y29tbWl0QS5pZH0gYW5kICR7Y29tbWl0Qi5pZH1gKTtcbiAgfVxuICBjb25zdCBhcnJvd05lZWRzUmVyb3V0aW5nID0gc2hvdWxkUmVyb3V0ZUFycm93KGNvbW1pdEEsIGNvbW1pdEIsIHAxLCBwMiwgYWxsQ29tbWl0cyk7XG4gIGxldCBhcmMgPSBcIlwiO1xuICBsZXQgYXJjMiA9IFwiXCI7XG4gIGxldCByYWRpdXMgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3MuZ2V0KGNvbW1pdEIuYnJhbmNoKT8uaW5kZXg7XG4gIGlmIChjb21taXRCLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgY29tbWl0QS5pZCAhPT0gY29tbWl0Qi5wYXJlbnRzWzBdKSB7XG4gICAgY29sb3JDbGFzc051bSA9IGJyYW5jaFBvcy5nZXQoY29tbWl0QS5icmFuY2gpPy5pbmRleDtcbiAgfVxuICBsZXQgbGluZURlZjtcbiAgaWYgKGFycm93TmVlZHNSZXJvdXRpbmcpIHtcbiAgICBhcmMgPSBcIkEgMTAgMTAsIDAsIDAsIDAsXCI7XG4gICAgYXJjMiA9IFwiQSAxMCAxMCwgMCwgMCwgMSxcIjtcbiAgICByYWRpdXMgPSAxMDtcbiAgICBvZmZzZXQgPSAxMDtcbiAgICBjb25zdCBsaW5lWSA9IHAxLnkgPCBwMi55ID8gZmluZExhbmUocDEueSwgcDIueSkgOiBmaW5kTGFuZShwMi55LCBwMS55KTtcbiAgICBjb25zdCBsaW5lWCA9IHAxLnggPCBwMi54ID8gZmluZExhbmUocDEueCwgcDIueCkgOiBmaW5kTGFuZShwMi54LCBwMS54KTtcbiAgICBpZiAoZGlyID09PSBcIlRCXCIpIHtcbiAgICAgIGlmIChwMS54IDwgcDIueCkge1xuICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtsaW5lWCAtIHJhZGl1c30gJHtwMS55fSAke2FyYzJ9ICR7bGluZVh9ICR7cDEueSArIG9mZnNldH0gTCAke2xpbmVYfSAke3AyLnkgLSByYWRpdXN9ICR7YXJjfSAke2xpbmVYICsgb2Zmc2V0fSAke3AyLnl9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3MuZ2V0KGNvbW1pdEEuYnJhbmNoKT8uaW5kZXg7XG4gICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke2xpbmVYICsgcmFkaXVzfSAke3AxLnl9ICR7YXJjfSAke2xpbmVYfSAke3AxLnkgKyBvZmZzZXR9IEwgJHtsaW5lWH0gJHtwMi55IC0gcmFkaXVzfSAke2FyYzJ9ICR7bGluZVggLSBvZmZzZXR9ICR7cDIueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyID09PSBcIkJUXCIpIHtcbiAgICAgIGlmIChwMS54IDwgcDIueCkge1xuICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtsaW5lWCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtsaW5lWH0gJHtwMS55IC0gb2Zmc2V0fSBMICR7bGluZVh9ICR7cDIueSArIHJhZGl1c30gJHthcmMyfSAke2xpbmVYICsgb2Zmc2V0fSAke3AyLnl9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3MuZ2V0KGNvbW1pdEEuYnJhbmNoKT8uaW5kZXg7XG4gICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke2xpbmVYICsgcmFkaXVzfSAke3AxLnl9ICR7YXJjMn0gJHtsaW5lWH0gJHtwMS55IC0gb2Zmc2V0fSBMICR7bGluZVh9ICR7cDIueSArIHJhZGl1c30gJHthcmN9ICR7bGluZVggLSBvZmZzZXR9ICR7cDIueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocDEueSA8IHAyLnkpIHtcbiAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtsaW5lWSAtIHJhZGl1c30gJHthcmN9ICR7cDEueCArIG9mZnNldH0gJHtsaW5lWX0gTCAke3AyLnggLSByYWRpdXN9ICR7bGluZVl9ICR7YXJjMn0gJHtwMi54fSAke2xpbmVZICsgb2Zmc2V0fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckNsYXNzTnVtID0gYnJhbmNoUG9zLmdldChjb21taXRBLmJyYW5jaCk/LmluZGV4O1xuICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtwMS54fSAke2xpbmVZICsgcmFkaXVzfSAke2FyYzJ9ICR7cDEueCArIG9mZnNldH0gJHtsaW5lWX0gTCAke3AyLnggLSByYWRpdXN9ICR7bGluZVl9ICR7YXJjfSAke3AyLnh9ICR7bGluZVkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXJjID0gXCJBIDIwIDIwLCAwLCAwLCAwLFwiO1xuICAgIGFyYzIgPSBcIkEgMjAgMjAsIDAsIDAsIDEsXCI7XG4gICAgcmFkaXVzID0gMjA7XG4gICAgb2Zmc2V0ID0gMjA7XG4gICAgaWYgKGRpciA9PT0gXCJUQlwiKSB7XG4gICAgICBpZiAocDEueCA8IHAyLngpIHtcbiAgICAgICAgaWYgKGNvbW1pdEIudHlwZSA9PT0gY29tbWl0VHlwZS5NRVJHRSAmJiBjb21taXRBLmlkICE9PSBjb21taXRCLnBhcmVudHNbMF0pIHtcbiAgICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtwMS54fSAke3AyLnkgLSByYWRpdXN9ICR7YXJjfSAke3AxLnggKyBvZmZzZXR9ICR7cDIueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnggLSByYWRpdXN9ICR7cDEueX0gJHthcmMyfSAke3AyLnh9ICR7cDEueSArIG9mZnNldH0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocDEueCA+IHAyLngpIHtcbiAgICAgICAgYXJjID0gXCJBIDIwIDIwLCAwLCAwLCAwLFwiO1xuICAgICAgICBhcmMyID0gXCJBIDIwIDIwLCAwLCAwLCAxLFwiO1xuICAgICAgICByYWRpdXMgPSAyMDtcbiAgICAgICAgb2Zmc2V0ID0gMjA7XG4gICAgICAgIGlmIChjb21taXRCLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgY29tbWl0QS5pZCAhPT0gY29tbWl0Qi5wYXJlbnRzWzBdKSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55IC0gcmFkaXVzfSAke2FyYzJ9ICR7cDEueCAtIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCArIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgKyBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHAxLnggPT09IHAyLngpIHtcbiAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXIgPT09IFwiQlRcIikge1xuICAgICAgaWYgKHAxLnggPCBwMi54KSB7XG4gICAgICAgIGlmIChjb21taXRCLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgY29tbWl0QS5pZCAhPT0gY29tbWl0Qi5wYXJlbnRzWzBdKSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55ICsgcmFkaXVzfSAke2FyYzJ9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHAxLnggPiBwMi54KSB7XG4gICAgICAgIGFyYyA9IFwiQSAyMCAyMCwgMCwgMCwgMCxcIjtcbiAgICAgICAgYXJjMiA9IFwiQSAyMCAyMCwgMCwgMCwgMSxcIjtcbiAgICAgICAgcmFkaXVzID0gMjA7XG4gICAgICAgIG9mZnNldCA9IDIwO1xuICAgICAgICBpZiAoY29tbWl0Qi50eXBlID09PSBjb21taXRUeXBlLk1FUkdFICYmIGNvbW1pdEEuaWQgIT09IGNvbW1pdEIucGFyZW50c1swXSkge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AxLnh9ICR7cDIueSArIHJhZGl1c30gJHthcmN9ICR7cDEueCAtIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHAxLnggPT09IHAyLngpIHtcbiAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwMS55IDwgcDIueSkge1xuICAgICAgICBpZiAoY29tbWl0Qi50eXBlID09PSBjb21taXRUeXBlLk1FUkdFICYmIGNvbW1pdEEuaWQgIT09IGNvbW1pdEIucGFyZW50c1swXSkge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnggLSByYWRpdXN9ICR7cDEueX0gJHthcmMyfSAke3AyLnh9ICR7cDEueSArIG9mZnNldH0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AxLnh9ICR7cDIueSAtIHJhZGl1c30gJHthcmN9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwMS55ID4gcDIueSkge1xuICAgICAgICBpZiAoY29tbWl0Qi50eXBlID09PSBjb21taXRUeXBlLk1FUkdFICYmIGNvbW1pdEEuaWQgIT09IGNvbW1pdEIucGFyZW50c1swXSkge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnggLSByYWRpdXN9ICR7cDEueX0gJHthcmN9ICR7cDIueH0gJHtwMS55IC0gb2Zmc2V0fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55ICsgcmFkaXVzfSAke2FyYzJ9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwMS55ID09PSBwMi55KSB7XG4gICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobGluZURlZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTGluZSBkZWZpbml0aW9uIG5vdCBmb3VuZFwiKTtcbiAgfVxuICBzdmcuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBsaW5lRGVmKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvdyBhcnJvd1wiICsgY29sb3JDbGFzc051bSAlIFRIRU1FX0NPTE9SX0xJTUlUKTtcbn0sIFwiZHJhd0Fycm93XCIpO1xudmFyIGRyYXdBcnJvd3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmcsIGNvbW1pdHMpID0+IHtcbiAgY29uc3QgZ0Fycm93cyA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1hcnJvd3NcIik7XG4gIFsuLi5jb21taXRzLmtleXMoKV0uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgY29tbWl0MiA9IGNvbW1pdHMuZ2V0KGtleSk7XG4gICAgaWYgKGNvbW1pdDIucGFyZW50cyAmJiBjb21taXQyLnBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29tbWl0Mi5wYXJlbnRzLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICBkcmF3QXJyb3coZ0Fycm93cywgY29tbWl0cy5nZXQocGFyZW50KSwgY29tbWl0MiwgY29tbWl0cyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSwgXCJkcmF3QXJyb3dzXCIpO1xudmFyIGRyYXdCcmFuY2hlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2ZywgYnJhbmNoZXMpID0+IHtcbiAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBicmFuY2hlcy5mb3JFYWNoKChicmFuY2gyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGFkanVzdEluZGV4Rm9yVGhlbWUgPSBpbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUO1xuICAgIGNvbnN0IHBvcyA9IGJyYW5jaFBvcy5nZXQoYnJhbmNoMi5uYW1lKT8ucG9zO1xuICAgIGlmIChwb3MgPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke2JyYW5jaDIubmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgbGluZSA9IGcuYXBwZW5kKFwibGluZVwiKTtcbiAgICBsaW5lLmF0dHIoXCJ4MVwiLCAwKTtcbiAgICBsaW5lLmF0dHIoXCJ5MVwiLCBwb3MpO1xuICAgIGxpbmUuYXR0cihcIngyXCIsIG1heFBvcyk7XG4gICAgbGluZS5hdHRyKFwieTJcIiwgcG9zKTtcbiAgICBsaW5lLmF0dHIoXCJjbGFzc1wiLCBcImJyYW5jaCBicmFuY2hcIiArIGFkanVzdEluZGV4Rm9yVGhlbWUpO1xuICAgIGlmIChkaXIgPT09IFwiVEJcIikge1xuICAgICAgbGluZS5hdHRyKFwieTFcIiwgZGVmYXVsdFBvcyk7XG4gICAgICBsaW5lLmF0dHIoXCJ4MVwiLCBwb3MpO1xuICAgICAgbGluZS5hdHRyKFwieTJcIiwgbWF4UG9zKTtcbiAgICAgIGxpbmUuYXR0cihcIngyXCIsIHBvcyk7XG4gICAgfSBlbHNlIGlmIChkaXIgPT09IFwiQlRcIikge1xuICAgICAgbGluZS5hdHRyKFwieTFcIiwgbWF4UG9zKTtcbiAgICAgIGxpbmUuYXR0cihcIngxXCIsIHBvcyk7XG4gICAgICBsaW5lLmF0dHIoXCJ5MlwiLCBkZWZhdWx0UG9zKTtcbiAgICAgIGxpbmUuYXR0cihcIngyXCIsIHBvcyk7XG4gICAgfVxuICAgIGxhbmVzLnB1c2gocG9zKTtcbiAgICBjb25zdCBuYW1lID0gYnJhbmNoMi5uYW1lO1xuICAgIGNvbnN0IGxhYmVsRWxlbWVudCA9IGRyYXdUZXh0KG5hbWUpO1xuICAgIGNvbnN0IGJrZyA9IGcuaW5zZXJ0KFwicmVjdFwiKTtcbiAgICBjb25zdCBicmFuY2hMYWJlbCA9IGcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJicmFuY2hMYWJlbFwiKTtcbiAgICBjb25zdCBsYWJlbCA9IGJyYW5jaExhYmVsLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWwgYnJhbmNoLWxhYmVsXCIgKyBhZGp1c3RJbmRleEZvclRoZW1lKTtcbiAgICBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBiYm94ID0gbGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBia2cuYXR0cihcImNsYXNzXCIsIFwiYnJhbmNoTGFiZWxCa2cgbGFiZWxcIiArIGFkanVzdEluZGV4Rm9yVGhlbWUpLmF0dHIoXCJyeFwiLCA0KS5hdHRyKFwicnlcIiwgNCkuYXR0cihcInhcIiwgLWJib3gud2lkdGggLSA0IC0gKERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMj8ucm90YXRlQ29tbWl0TGFiZWwgPT09IHRydWUgPyAzMCA6IDApKS5hdHRyKFwieVwiLCAtYmJveC5oZWlnaHQgLyAyICsgOCkuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyAxOCkuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIDQpO1xuICAgIGxhYmVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoLWJib3gud2lkdGggLSAxNCAtIChERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzI/LnJvdGF0ZUNvbW1pdExhYmVsID09PSB0cnVlID8gMzAgOiAwKSkgKyBcIiwgXCIgKyAocG9zIC0gYmJveC5oZWlnaHQgLyAyIC0gMSkgKyBcIilcIlxuICAgICk7XG4gICAgaWYgKGRpciA9PT0gXCJUQlwiKSB7XG4gICAgICBia2cuYXR0cihcInhcIiwgcG9zIC0gYmJveC53aWR0aCAvIDIgLSAxMCkuYXR0cihcInlcIiwgMCk7XG4gICAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKHBvcyAtIGJib3gud2lkdGggLyAyIC0gNSkgKyBcIiwgMClcIik7XG4gICAgfSBlbHNlIGlmIChkaXIgPT09IFwiQlRcIikge1xuICAgICAgYmtnLmF0dHIoXCJ4XCIsIHBvcyAtIGJib3gud2lkdGggLyAyIC0gMTApLmF0dHIoXCJ5XCIsIG1heFBvcyk7XG4gICAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKHBvcyAtIGJib3gud2lkdGggLyAyIC0gNSkgKyBcIiwgXCIgKyBtYXhQb3MgKyBcIilcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJrZy5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKC0xOSwgXCIgKyAocG9zIC0gYmJveC5oZWlnaHQgLyAyKSArIFwiKVwiKTtcbiAgICB9XG4gIH0pO1xufSwgXCJkcmF3QnJhbmNoZXNcIik7XG52YXIgc2V0QnJhbmNoUG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG5hbWUsIHBvcywgaW5kZXgsIGJib3gsIHJvdGF0ZUNvbW1pdExhYmVsKSB7XG4gIGJyYW5jaFBvcy5zZXQobmFtZSwgeyBwb3MsIGluZGV4IH0pO1xuICBwb3MgKz0gNTAgKyAocm90YXRlQ29tbWl0TGFiZWwgPyA0MCA6IDApICsgKGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiID8gYmJveC53aWR0aCAvIDIgOiAwKTtcbiAgcmV0dXJuIHBvcztcbn0sIFwic2V0QnJhbmNoUG9zaXRpb25cIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0LCBpZCwgdmVyLCBkaWFnT2JqKSB7XG4gIGNsZWFyMygpO1xuICBsb2cuZGVidWcoXCJpbiBnaXRncmFwaCByZW5kZXJlclwiLCB0eHQgKyBcIlxcblwiLCBcImlkOlwiLCBpZCwgdmVyKTtcbiAgaWYgKCFERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXRHcmFwaCBjb25maWcgbm90IGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJvdGF0ZUNvbW1pdExhYmVsID0gREVGQVVMVF9HSVRHUkFQSF9DT05GSUcyLnJvdGF0ZUNvbW1pdExhYmVsID8/IGZhbHNlO1xuICBjb25zdCBkYjIgPSBkaWFnT2JqLmRiO1xuICBhbGxDb21taXRzRGljdCA9IGRiMi5nZXRDb21taXRzKCk7XG4gIGNvbnN0IGJyYW5jaGVzID0gZGIyLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpO1xuICBkaXIgPSBkYjIuZ2V0RGlyZWN0aW9uKCk7XG4gIGNvbnN0IGRpYWdyYW0yID0gc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBsZXQgcG9zID0gMDtcbiAgYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoMiwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSBkcmF3VGV4dChicmFuY2gyLm5hbWUpO1xuICAgIGNvbnN0IGcgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpO1xuICAgIGNvbnN0IGJyYW5jaExhYmVsID0gZy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJyYW5jaExhYmVsXCIpO1xuICAgIGNvbnN0IGxhYmVsID0gYnJhbmNoTGFiZWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbCBicmFuY2gtbGFiZWxcIik7XG4gICAgbGFiZWwubm9kZSgpPy5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IGJib3ggPSBsYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIHBvcyA9IHNldEJyYW5jaFBvc2l0aW9uKGJyYW5jaDIubmFtZSwgcG9zLCBpbmRleCwgYmJveCwgcm90YXRlQ29tbWl0TGFiZWwpO1xuICAgIGxhYmVsLnJlbW92ZSgpO1xuICAgIGJyYW5jaExhYmVsLnJlbW92ZSgpO1xuICAgIGcucmVtb3ZlKCk7XG4gIH0pO1xuICBkcmF3Q29tbWl0cyhkaWFncmFtMiwgYWxsQ29tbWl0c0RpY3QsIGZhbHNlKTtcbiAgaWYgKERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMi5zaG93QnJhbmNoZXMpIHtcbiAgICBkcmF3QnJhbmNoZXMoZGlhZ3JhbTIsIGJyYW5jaGVzKTtcbiAgfVxuICBkcmF3QXJyb3dzKGRpYWdyYW0yLCBhbGxDb21taXRzRGljdCk7XG4gIGRyYXdDb21taXRzKGRpYWdyYW0yLCBhbGxDb21taXRzRGljdCwgdHJ1ZSk7XG4gIHV0aWxzX2RlZmF1bHQuaW5zZXJ0VGl0bGUoXG4gICAgZGlhZ3JhbTIsXG4gICAgXCJnaXRUaXRsZVRleHRcIixcbiAgICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIudGl0bGVUb3BNYXJnaW4gPz8gMCxcbiAgICBkYjIuZ2V0RGlhZ3JhbVRpdGxlKClcbiAgKTtcbiAgc2V0dXBHcmFwaFZpZXdib3goXG4gICAgdm9pZCAwLFxuICAgIGRpYWdyYW0yLFxuICAgIERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMi5kaWFncmFtUGFkZGluZyxcbiAgICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIudXNlTWF4V2lkdGhcbiAgKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBnaXRHcmFwaFJlbmRlcmVyX2RlZmF1bHQgPSB7XG4gIGRyYXdcbn07XG5pZiAodm9pZCAwKSB7XG4gIGNvbnN0IHsgaXQsIGV4cGVjdCwgZGVzY3JpYmUgfSA9IHZvaWQgMDtcbiAgZGVzY3JpYmUoXCJkcmF3VGV4dFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgZHJhd1RleHRcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3ZnTGFiZWwgPSBkcmF3VGV4dChcIm1haW5cIik7XG4gICAgICBleHBlY3Qoc3ZnTGFiZWwpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3ZnTGFiZWwuY2hpbGRyZW5bMF0uaW5uZXJIVE1MKS50b0JlKFwibWFpblwiKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKFwiYnJhbmNoUG9zaXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGJib3ggPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgICB0b3A6IDAsXG4gICAgICByaWdodDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b0pTT046IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gXCJcIiwgXCJ0b0pTT05cIilcbiAgICB9O1xuICAgIGl0KFwic2hvdWxkIHNldEJyYW5jaFBvc2l0aW9ucyBMUiB3aXRoIHR3byBicmFuY2hlc1wiLCAoKSA9PiB7XG4gICAgICBkaXIgPSBcIkxSXCI7XG4gICAgICBjb25zdCBwb3MgPSBzZXRCcmFuY2hQb3NpdGlvbihcIm1haW5cIiwgMCwgMCwgYmJveCwgdHJ1ZSk7XG4gICAgICBleHBlY3QocG9zKS50b0JlKDkwKTtcbiAgICAgIGV4cGVjdChicmFuY2hQb3MuZ2V0KFwibWFpblwiKSkudG9FcXVhbCh7IHBvczogMCwgaW5kZXg6IDAgfSk7XG4gICAgICBjb25zdCBwb3NOZXh0ID0gc2V0QnJhbmNoUG9zaXRpb24oXCJkZXZlbG9wXCIsIHBvcywgMSwgYmJveCwgdHJ1ZSk7XG4gICAgICBleHBlY3QocG9zTmV4dCkudG9CZSgxODApO1xuICAgICAgZXhwZWN0KGJyYW5jaFBvcy5nZXQoXCJkZXZlbG9wXCIpKS50b0VxdWFsKHsgcG9zLCBpbmRleDogMSB9KTtcbiAgICB9KTtcbiAgICBpdChcInNob3VsZCBzZXRCcmFuY2hQb3NpdGlvbnMgVEIgd2l0aCB0d28gYnJhbmNoZXNcIiwgKCkgPT4ge1xuICAgICAgZGlyID0gXCJUQlwiO1xuICAgICAgYmJveC53aWR0aCA9IDM0Ljk5MjE4NzU7XG4gICAgICBjb25zdCBwb3MgPSBzZXRCcmFuY2hQb3NpdGlvbihcIm1haW5cIiwgMCwgMCwgYmJveCwgdHJ1ZSk7XG4gICAgICBleHBlY3QocG9zKS50b0JlKDEwNy40OTYwOTM3NSk7XG4gICAgICBleHBlY3QoYnJhbmNoUG9zLmdldChcIm1haW5cIikpLnRvRXF1YWwoeyBwb3M6IDAsIGluZGV4OiAwIH0pO1xuICAgICAgYmJveC53aWR0aCA9IDU2LjQyMTg3NTtcbiAgICAgIGNvbnN0IHBvc05leHQgPSBzZXRCcmFuY2hQb3NpdGlvbihcImRldmVsb3BcIiwgcG9zLCAxLCBiYm94LCB0cnVlKTtcbiAgICAgIGV4cGVjdChwb3NOZXh0KS50b0JlKDIyNS43MDcwMzEyNSk7XG4gICAgICBleHBlY3QoYnJhbmNoUG9zLmdldChcImRldmVsb3BcIikpLnRvRXF1YWwoeyBwb3MsIGluZGV4OiAxIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoXCJjb21taXRQb3NpdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29tbWl0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXRaZXJvXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJaRVJPXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDAsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW10sXG4gICAgICAgICAgYnJhbmNoOiBcIm1haW5cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBcImNvbW1pdEFcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIkFcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlwiLFxuICAgICAgICAgIHNlcTogMSxcbiAgICAgICAgICB0eXBlOiBjb21taXRUeXBlLk5PUk1BTCxcbiAgICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgICBwYXJlbnRzOiBbXCJaRVJPXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJmZWF0dXJlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXRCXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJCXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDIsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiQVwiXSxcbiAgICAgICAgICBicmFuY2g6IFwiZmVhdHVyZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFwiY29tbWl0TVwiLFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiTVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwibWVyZ2VkIGJyYW5jaCBmZWF0dXJlIGludG8gbWFpblwiLFxuICAgICAgICAgIHNlcTogMyxcbiAgICAgICAgICB0eXBlOiBjb21taXRUeXBlLk1FUkdFLFxuICAgICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICAgIHBhcmVudHM6IFtcIlpFUk9cIiwgXCJCXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCIsXG4gICAgICAgICAgY3VzdG9tSWQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXRDXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJDXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDQsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiWkVST1wiXSxcbiAgICAgICAgICBicmFuY2g6IFwicmVsZWFzZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFwiY29tbWl0NV84OTI4ZWEwXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCI1LTg5MjhlYTBcIixcbiAgICAgICAgICBtZXNzYWdlOiBcImNoZXJyeS1waWNrZWQgW29iamVjdCBPYmplY3RdIGludG8gcmVsZWFzZVwiLFxuICAgICAgICAgIHNlcTogNSxcbiAgICAgICAgICB0eXBlOiBjb21taXRUeXBlLkNIRVJSWV9QSUNLLFxuICAgICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICAgIHBhcmVudHM6IFtcIkNcIiwgXCJNXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJyZWxlYXNlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXREXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJEXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDYsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiNS04OTI4ZWEwXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJyZWxlYXNlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXQ3X2VkODQ4YmFcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjctZWQ4NDhiYVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiY2hlcnJ5LXBpY2tlZCBbb2JqZWN0IE9iamVjdF0gaW50byByZWxlYXNlXCIsXG4gICAgICAgICAgc2VxOiA3LFxuICAgICAgICAgIHR5cGU6IGNvbW1pdFR5cGUuQ0hFUlJZX1BJQ0ssXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiRFwiLCBcIk1cIl0sXG4gICAgICAgICAgYnJhbmNoOiBcInJlbGVhc2VcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgXSk7XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgYnJhbmNoUG9zLnNldChcIm1haW5cIiwgeyBwb3M6IDAsIGluZGV4OiAwIH0pO1xuICAgIGJyYW5jaFBvcy5zZXQoXCJmZWF0dXJlXCIsIHsgcG9zOiAxMDcuNDk2MDkzNzUsIGluZGV4OiAxIH0pO1xuICAgIGJyYW5jaFBvcy5zZXQoXCJyZWxlYXNlXCIsIHsgcG9zOiAyMjQuMDM1MTU2MjUsIGluZGV4OiAyIH0pO1xuICAgIGRlc2NyaWJlKFwiVEJcIiwgKCkgPT4ge1xuICAgICAgcG9zID0gMzA7XG4gICAgICBkaXIgPSBcIlRCXCI7XG4gICAgICBjb25zdCBleHBlY3RlZENvbW1pdFBvc2l0aW9uVEIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICAgIFtcImNvbW1pdFplcm9cIiwgeyB4OiAwLCB5OiA0MCwgcG9zV2l0aE9mZnNldDogNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdEFcIiwgeyB4OiAxMDcuNDk2MDkzNzUsIHk6IDkwLCBwb3NXaXRoT2Zmc2V0OiA5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0QlwiLCB7IHg6IDEwNy40OTYwOTM3NSwgeTogMTQwLCBwb3NXaXRoT2Zmc2V0OiAxNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdE1cIiwgeyB4OiAwLCB5OiAxOTAsIHBvc1dpdGhPZmZzZXQ6IDE5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0Q1wiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjQwLCBwb3NXaXRoT2Zmc2V0OiAyNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdDVfODkyOGVhMFwiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjkwLCBwb3NXaXRoT2Zmc2V0OiAyOTAgfV0sXG4gICAgICAgIFtcImNvbW1pdERcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM0MCwgcG9zV2l0aE9mZnNldDogMzQwIH1dLFxuICAgICAgICBbXCJjb21taXQ3X2VkODQ4YmFcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM5MCwgcG9zV2l0aE9mZnNldDogMzkwIH1dXG4gICAgICBdKTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgZ2l2ZSB0aGUgY29ycmVjdCBwb3NpdGlvbiBmb3IgY29tbWl0ICR7a2V5fWAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldENvbW1pdFBvc2l0aW9uKGNvbW1pdDIsIHBvcywgZmFsc2UpO1xuICAgICAgICAgIGV4cGVjdChwb3NpdGlvbikudG9FcXVhbChleHBlY3RlZENvbW1pdFBvc2l0aW9uVEIuZ2V0KGtleSkpO1xuICAgICAgICAgIHBvcyArPSA1MDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZShcIkxSXCIsICgpID0+IHtcbiAgICAgIGxldCBwb3MyID0gMzA7XG4gICAgICBkaXIgPSBcIkxSXCI7XG4gICAgICBjb25zdCBleHBlY3RlZENvbW1pdFBvc2l0aW9uTFIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICAgIFtcImNvbW1pdFplcm9cIiwgeyB4OiAwLCB5OiA0MCwgcG9zV2l0aE9mZnNldDogNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdEFcIiwgeyB4OiAxMDcuNDk2MDkzNzUsIHk6IDkwLCBwb3NXaXRoT2Zmc2V0OiA5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0QlwiLCB7IHg6IDEwNy40OTYwOTM3NSwgeTogMTQwLCBwb3NXaXRoT2Zmc2V0OiAxNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdE1cIiwgeyB4OiAwLCB5OiAxOTAsIHBvc1dpdGhPZmZzZXQ6IDE5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0Q1wiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjQwLCBwb3NXaXRoT2Zmc2V0OiAyNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdDVfODkyOGVhMFwiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjkwLCBwb3NXaXRoT2Zmc2V0OiAyOTAgfV0sXG4gICAgICAgIFtcImNvbW1pdERcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM0MCwgcG9zV2l0aE9mZnNldDogMzQwIH1dLFxuICAgICAgICBbXCJjb21taXQ3X2VkODQ4YmFcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM5MCwgcG9zV2l0aE9mZnNldDogMzkwIH1dXG4gICAgICBdKTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgZ2l2ZSB0aGUgY29ycmVjdCBwb3NpdGlvbiBmb3IgY29tbWl0ICR7a2V5fWAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldENvbW1pdFBvc2l0aW9uKGNvbW1pdDIsIHBvczIsIGZhbHNlKTtcbiAgICAgICAgICBleHBlY3QocG9zaXRpb24pLnRvRXF1YWwoZXhwZWN0ZWRDb21taXRQb3NpdGlvbkxSLmdldChrZXkpKTtcbiAgICAgICAgICBwb3MyICs9IDUwO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKFwiZ2V0Q29tbWl0Q2xhc3NUeXBlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQ29tbWl0Q2xhc3NUeXBlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1xuICAgICAgICBbXCJjb21taXRaZXJvXCIsIFwiY29tbWl0LW5vcm1hbFwiXSxcbiAgICAgICAgW1wiY29tbWl0QVwiLCBcImNvbW1pdC1ub3JtYWxcIl0sXG4gICAgICAgIFtcImNvbW1pdEJcIiwgXCJjb21taXQtbm9ybWFsXCJdLFxuICAgICAgICBbXCJjb21taXRNXCIsIFwiY29tbWl0LW1lcmdlXCJdLFxuICAgICAgICBbXCJjb21taXRDXCIsIFwiY29tbWl0LW5vcm1hbFwiXSxcbiAgICAgICAgW1wiY29tbWl0NV84OTI4ZWEwXCIsIFwiY29tbWl0LWNoZXJyeS1waWNrXCJdLFxuICAgICAgICBbXCJjb21taXREXCIsIFwiY29tbWl0LW5vcm1hbFwiXSxcbiAgICAgICAgW1wiY29tbWl0N19lZDg0OGJhXCIsIFwiY29tbWl0LWNoZXJyeS1waWNrXCJdXG4gICAgICBdKTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgZ2l2ZSB0aGUgY29ycmVjdCBjbGFzcyB0eXBlIGZvciBjb21taXQgJHtrZXl9YCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsYXNzVHlwZSA9IGdldENvbW1pdENsYXNzVHlwZShjb21taXQyKTtcbiAgICAgICAgICBleHBlY3QoY2xhc3NUeXBlKS50b0JlKGV4cGVjdGVkQ29tbWl0Q2xhc3NUeXBlLmdldChrZXkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKFwiYnVpbGRpbmcgQlQgcGFyYWxsZWwgY29tbWl0IGRpYWdyYW1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNvbW1pdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXG4gICAgICAgIFwiMS1hYmNkZWZnXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCIxLWFiY2RlZmdcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlwiLFxuICAgICAgICAgIHNlcTogMCxcbiAgICAgICAgICB0eXBlOiAwLFxuICAgICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICAgIHBhcmVudHM6IFtdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCIyLWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjItYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiAxLFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMS1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCIzLWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjMtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiAyLFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMi1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJkZXZlbG9wXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI0LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjQtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiAzLFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMy1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJkZXZlbG9wXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI1LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjUtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA0LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMi1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJmZWF0dXJlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI2LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjYtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA1LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiNS1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJmZWF0dXJlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI3LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjctYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA2LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMi1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI4LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjgtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA3LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiNy1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIF0pO1xuICAgIGNvbnN0IGV4cGVjdGVkQ29tbWl0UG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXCIxLWFiY2RlZmdcIiwgeyB4OiAwLCB5OiA0MCB9XSxcbiAgICAgIFtcIjItYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDkwIH1dLFxuICAgICAgW1wiMy1hYmNkZWZnXCIsIHsgeDogMTA3LjQ5NjA5Mzc1LCB5OiAxNDAgfV0sXG4gICAgICBbXCI0LWFiY2RlZmdcIiwgeyB4OiAxMDcuNDk2MDkzNzUsIHk6IDE5MCB9XSxcbiAgICAgIFtcIjUtYWJjZGVmZ1wiLCB7IHg6IDIyNS43MDcwMzEyNSwgeTogMTQwIH1dLFxuICAgICAgW1wiNi1hYmNkZWZnXCIsIHsgeDogMjI1LjcwNzAzMTI1LCB5OiAxOTAgfV0sXG4gICAgICBbXCI3LWFiY2RlZmdcIiwgeyB4OiAwLCB5OiAxNDAgfV0sXG4gICAgICBbXCI4LWFiY2RlZmdcIiwgeyB4OiAwLCB5OiAxOTAgfV1cbiAgICBdKTtcbiAgICBjb25zdCBleHBlY3RlZENvbW1pdFBvc2l0aW9uQWZ0ZXJQYXJhbGxlbCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgIFtcIjEtYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDIxMCB9XSxcbiAgICAgIFtcIjItYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDE2MCB9XSxcbiAgICAgIFtcIjMtYWJjZGVmZ1wiLCB7IHg6IDEwNy40OTYwOTM3NSwgeTogMTEwIH1dLFxuICAgICAgW1wiNC1hYmNkZWZnXCIsIHsgeDogMTA3LjQ5NjA5Mzc1LCB5OiA2MCB9XSxcbiAgICAgIFtcIjUtYWJjZGVmZ1wiLCB7IHg6IDIyNS43MDcwMzEyNSwgeTogMTEwIH1dLFxuICAgICAgW1wiNi1hYmNkZWZnXCIsIHsgeDogMjI1LjcwNzAzMTI1LCB5OiA2MCB9XSxcbiAgICAgIFtcIjctYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDExMCB9XSxcbiAgICAgIFtcIjgtYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDYwIH1dXG4gICAgXSk7XG4gICAgY29uc3QgZXhwZWN0ZWRDb21taXRDdXJyZW50UG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXCIxLWFiY2RlZmdcIiwgMzBdLFxuICAgICAgW1wiMi1hYmNkZWZnXCIsIDgwXSxcbiAgICAgIFtcIjMtYWJjZGVmZ1wiLCAxMzBdLFxuICAgICAgW1wiNC1hYmNkZWZnXCIsIDE4MF0sXG4gICAgICBbXCI1LWFiY2RlZmdcIiwgMTMwXSxcbiAgICAgIFtcIjYtYWJjZGVmZ1wiLCAxODBdLFxuICAgICAgW1wiNy1hYmNkZWZnXCIsIDEzMF0sXG4gICAgICBbXCI4LWFiY2RlZmdcIiwgMTgwXVxuICAgIF0pO1xuICAgIGNvbnN0IHNvcnRlZEtleXMgPSBbLi4uZXhwZWN0ZWRDb21taXRQb3NpdGlvbi5rZXlzKCldO1xuICAgIGl0KFwic2hvdWxkIGdldCB0aGUgY29ycmVjdCBjb21taXQgcG9zaXRpb24gYW5kIGN1cnJlbnQgcG9zaXRpb25cIiwgKCkgPT4ge1xuICAgICAgZGlyID0gXCJCVFwiO1xuICAgICAgbGV0IGN1clBvcyA9IDMwO1xuICAgICAgY29tbWl0UG9zLmNsZWFyKCk7XG4gICAgICBicmFuY2hQb3MuY2xlYXIoKTtcbiAgICAgIGJyYW5jaFBvcy5zZXQoXCJtYWluXCIsIHsgcG9zOiAwLCBpbmRleDogMCB9KTtcbiAgICAgIGJyYW5jaFBvcy5zZXQoXCJkZXZlbG9wXCIsIHsgcG9zOiAxMDcuNDk2MDkzNzUsIGluZGV4OiAxIH0pO1xuICAgICAgYnJhbmNoUG9zLnNldChcImZlYXR1cmVcIiwgeyBwb3M6IDIyNS43MDcwMzEyNSwgaW5kZXg6IDIgfSk7XG4gICAgICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIucGFyYWxsZWxDb21taXRzID0gdHJ1ZTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGlmIChjb21taXQyLnBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1clBvcyA9IGNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uKGNvbW1pdDIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2V0Q29tbWl0UG9zaXRpb24oY29tbWl0MiwgY3VyUG9zKTtcbiAgICAgICAgZXhwZWN0KHBvc2l0aW9uKS50b0VxdWFsKGV4cGVjdGVkQ29tbWl0UG9zaXRpb24uZ2V0KGtleSkpO1xuICAgICAgICBleHBlY3QoY3VyUG9zKS50b0VxdWFsKGV4cGVjdGVkQ29tbWl0Q3VycmVudFBvc2l0aW9uLmdldChrZXkpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KFwic2hvdWxkIGdldCB0aGUgY29ycmVjdCBjb21taXQgcG9zaXRpb24gYWZ0ZXIgcGFyYWxsZWwgY29tbWl0c1wiLCAoKSA9PiB7XG4gICAgICBjb21taXRQb3MuY2xlYXIoKTtcbiAgICAgIGJyYW5jaFBvcy5jbGVhcigpO1xuICAgICAgZGlyID0gXCJCVFwiO1xuICAgICAgY29uc3QgY3VyUG9zID0gMzA7XG4gICAgICBjb21taXRQb3MuY2xlYXIoKTtcbiAgICAgIGJyYW5jaFBvcy5jbGVhcigpO1xuICAgICAgYnJhbmNoUG9zLnNldChcIm1haW5cIiwgeyBwb3M6IDAsIGluZGV4OiAwIH0pO1xuICAgICAgYnJhbmNoUG9zLnNldChcImRldmVsb3BcIiwgeyBwb3M6IDEwNy40OTYwOTM3NSwgaW5kZXg6IDEgfSk7XG4gICAgICBicmFuY2hQb3Muc2V0KFwiZmVhdHVyZVwiLCB7IHBvczogMjI1LjcwNzAzMTI1LCBpbmRleDogMiB9KTtcbiAgICAgIHNldFBhcmFsbGVsQlRQb3Moc29ydGVkS2V5cywgY29tbWl0cywgY3VyUG9zKTtcbiAgICAgIHNvcnRlZEtleXMuZm9yRWFjaCgoY29tbWl0MikgPT4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNvbW1pdFBvcy5nZXQoY29tbWl0Mik7XG4gICAgICAgIGV4cGVjdChwb3NpdGlvbikudG9FcXVhbChleHBlY3RlZENvbW1pdFBvc2l0aW9uQWZ0ZXJQYXJhbGxlbC5nZXQoY29tbWl0MikpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIucGFyYWxsZWxDb21taXRzID0gZmFsc2U7XG4gIGl0KFwiYWRkXCIsICgpID0+IHtcbiAgICBjb21taXRQb3Muc2V0KFwicGFyZW50MVwiLCB7IHg6IDEsIHk6IDEgfSk7XG4gICAgY29tbWl0UG9zLnNldChcInBhcmVudDJcIiwgeyB4OiAyLCB5OiAyIH0pO1xuICAgIGNvbW1pdFBvcy5zZXQoXCJwYXJlbnQzXCIsIHsgeDogMywgeTogMyB9KTtcbiAgICBkaXIgPSBcIkxSXCI7XG4gICAgY29uc3QgcGFyZW50cyA9IFtcInBhcmVudDFcIiwgXCJwYXJlbnQyXCIsIFwicGFyZW50M1wiXTtcbiAgICBjb25zdCBjbG9zZXN0UGFyZW50ID0gZmluZENsb3Nlc3RQYXJlbnQocGFyZW50cyk7XG4gICAgZXhwZWN0KGNsb3Nlc3RQYXJlbnQpLnRvQmUoXCJwYXJlbnQzXCIpO1xuICAgIGNvbW1pdFBvcy5jbGVhcigpO1xuICB9KTtcbn1cblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9zdHlsZXMuanNcbnZhciBnZXRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zKSA9PiBgXG4gIC5jb21taXQtaWQsXG4gIC5jb21taXQtbXNnLFxuICAuYnJhbmNoLWxhYmVsIHtcbiAgICBmaWxsOiBsaWdodGdyZXk7XG4gICAgY29sb3I6IGxpZ2h0Z3JleTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuICAke1swLCAxLCAyLCAzLCA0LCA1LCA2LCA3XS5tYXAoXG4gIChpKSA9PiBgXG4gICAgICAgIC5icmFuY2gtbGFiZWwke2l9IHsgZmlsbDogJHtvcHRpb25zW1wiZ2l0QnJhbmNoTGFiZWxcIiArIGldfTsgfVxuICAgICAgICAuY29tbWl0JHtpfSB7IHN0cm9rZTogJHtvcHRpb25zW1wiZ2l0XCIgKyBpXX07IGZpbGw6ICR7b3B0aW9uc1tcImdpdFwiICsgaV19OyB9XG4gICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtpfSB7IHN0cm9rZTogJHtvcHRpb25zW1wiZ2l0SW52XCIgKyBpXX07IGZpbGw6ICR7b3B0aW9uc1tcImdpdEludlwiICsgaV19OyB9XG4gICAgICAgIC5sYWJlbCR7aX0gIHsgZmlsbDogJHtvcHRpb25zW1wiZ2l0XCIgKyBpXX07IH1cbiAgICAgICAgLmFycm93JHtpfSB7IHN0cm9rZTogJHtvcHRpb25zW1wiZ2l0XCIgKyBpXX07IH1cbiAgICAgICAgYFxuKS5qb2luKFwiXFxuXCIpfVxuXG4gIC5icmFuY2gge1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7XG4gIH1cbiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHtvcHRpb25zLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke29wdGlvbnMuY29tbWl0TGFiZWxDb2xvcn07fVxuICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtvcHRpb25zLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke29wdGlvbnMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9XG4gIC50YWctbGFiZWwgeyBmb250LXNpemU6ICR7b3B0aW9ucy50YWdMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtvcHRpb25zLnRhZ0xhYmVsQ29sb3J9O31cbiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke29wdGlvbnMudGFnTGFiZWxCYWNrZ3JvdW5kfTsgc3Ryb2tlOiAke29wdGlvbnMudGFnTGFiZWxCb3JkZXJ9OyB9XG4gIC50YWctaG9sZSB7IGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9OyB9XG5cbiAgLmNvbW1pdC1tZXJnZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgfVxuICAuY29tbWl0LXJldmVyc2Uge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnByaW1hcnlDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLnByaW1hcnlDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAzO1xuICB9XG4gIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHtcbiAgfVxuICAuY29tbWl0LWhpZ2hsaWdodC1pbm5lciB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgfVxuXG4gIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfVxuICAuZ2l0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9naXQvZ2l0R3JhcGhEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXI6IGdpdEdyYXBoUmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPVwiZGF5XCI7cmV0dXJuIGZ1bmN0aW9uKHQsaSxzKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hZGQoNC10Lmlzb1dlZWtkYXkoKSxlKX0sZD1pLnByb3RvdHlwZTtkLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykueWVhcigpfSxkLmlzb1dlZWs9ZnVuY3Rpb24odCl7aWYoIXRoaXMuJHV0aWxzKCkudSh0KSlyZXR1cm4gdGhpcy5hZGQoNyoodC10aGlzLmlzb1dlZWsoKSksZSk7dmFyIGksZCxuLG8scj1hKHRoaXMpLHU9KGk9dGhpcy5pc29XZWVrWWVhcigpLGQ9dGhpcy4kdSxuPShkP3MudXRjOnMpKCkueWVhcihpKS5zdGFydE9mKFwieWVhclwiKSxvPTQtbi5pc29XZWVrZGF5KCksbi5pc29XZWVrZGF5KCk+NCYmKG8rPTcpLG4uYWRkKG8sZSkpO3JldHVybiByLmRpZmYodSxcIndlZWtcIikrMX0sZC5pc29XZWVrZGF5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiR1dGlscygpLnUoZSk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/ZTplLTcpfTt2YXIgbj1kLnN0YXJ0T2Y7ZC5zdGFydE9mPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy4kdXRpbHMoKSxzPSEhaS51KHQpfHx0O3JldHVyblwiaXNvd2Vla1wiPT09aS5wKGUpP3M/dGhpcy5kYXRlKHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSkuc3RhcnRPZihcImRheVwiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoXCJkYXlcIik6bi5iaW5kKHRoaXMpKGUsdCl9fX0pKTsiLAogICAgIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2N1c3RvbVBhcnNlRm9ybWF0PXQoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17TFRTOlwiaDptbTpzcyBBXCIsTFQ6XCJoOm1tIEFcIixMOlwiTU0vREQvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBXCJ9LHQ9LyhcXFtbXltdKlxcXSl8KFstXzovLiwoKVxcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2csbj0vXFxkLyxyPS9cXGRcXGQvLGk9L1xcZFxcZD8vLG89L1xcZCpbXi1fOi8sKClcXHNcXGRdKy8scz17fSxhPWZ1bmN0aW9uKGUpe3JldHVybihlPStlKSsoZT42OD8xOTAwOjJlMyl9O3ZhciBmPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzW2VdPSt0fX0saD1bL1srLV1cXGRcXGQ6PyhcXGRcXGQpP3xaLyxmdW5jdGlvbihlKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiAwO2lmKFwiWlwiPT09ZSlyZXR1cm4gMDt2YXIgdD1lLm1hdGNoKC8oWystXXxcXGRcXGQpL2cpLG49NjAqdFsxXSsoK3RbMl18fDApO3JldHVybiAwPT09bj8wOlwiK1wiPT09dFswXT8tbjpufShlKX1dLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9c1tlXTtyZXR1cm4gdCYmKHQuaW5kZXhPZj90OnQucy5jb25jYXQodC5mKSl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXMubWVyaWRpZW07aWYocil7Zm9yKHZhciBpPTE7aTw9MjQ7aSs9MSlpZihlLmluZGV4T2YocihpLDAsdCkpPi0xKXtuPWk+MTI7YnJlYWt9fWVsc2Ugbj1lPT09KHQ/XCJwbVwiOlwiUE1cIik7cmV0dXJuIG59LGM9e0E6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCExKX1dLGE6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCEwKX1dLFE6W24sZnVuY3Rpb24oZSl7dGhpcy5tb250aD0zKihlLTEpKzF9XSxTOltuLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZX1dLFNTOltyLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitlfV0sU1NTOlsvXFxkezN9LyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0rZX1dLHM6W2ksZihcInNlY29uZHNcIildLHNzOltpLGYoXCJzZWNvbmRzXCIpXSxtOltpLGYoXCJtaW51dGVzXCIpXSxtbTpbaSxmKFwibWludXRlc1wiKV0sSDpbaSxmKFwiaG91cnNcIildLGg6W2ksZihcImhvdXJzXCIpXSxISDpbaSxmKFwiaG91cnNcIildLGhoOltpLGYoXCJob3Vyc1wiKV0sRDpbaSxmKFwiZGF5XCIpXSxERDpbcixmKFwiZGF5XCIpXSxEbzpbbyxmdW5jdGlvbihlKXt2YXIgdD1zLm9yZGluYWwsbj1lLm1hdGNoKC9cXGQrLyk7aWYodGhpcy5kYXk9blswXSx0KWZvcih2YXIgcj0xO3I8PTMxO3IrPTEpdChyKS5yZXBsYWNlKC9cXFt8XFxdL2csXCJcIik9PT1lJiYodGhpcy5kYXk9cil9XSx3OltpLGYoXCJ3ZWVrXCIpXSx3dzpbcixmKFwid2Vla1wiKV0sTTpbaSxmKFwibW9udGhcIildLE1NOltyLGYoXCJtb250aFwiKV0sTU1NOltvLGZ1bmN0aW9uKGUpe3ZhciB0PXUoXCJtb250aHNcIiksbj0odShcIm1vbnRoc1Nob3J0XCIpfHx0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoMCwzKX0pKSkuaW5kZXhPZihlKSsxO2lmKG48MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1uJTEyfHxufV0sTU1NTTpbbyxmdW5jdGlvbihlKXt2YXIgdD11KFwibW9udGhzXCIpLmluZGV4T2YoZSkrMTtpZih0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9dCUxMnx8dH1dLFk6Wy9bKy1dP1xcZCsvLGYoXCJ5ZWFyXCIpXSxZWTpbcixmdW5jdGlvbihlKXt0aGlzLnllYXI9YShlKX1dLFlZWVk6Wy9cXGR7NH0vLGYoXCJ5ZWFyXCIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbChuKXt2YXIgcixpO3I9bixpPXMmJnMuZm9ybWF0cztmb3IodmFyIG89KG49ci5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csKGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1yJiZyLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG58fGlbcl18fGVbcl18fGlbb10ucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHR8fG4uc2xpY2UoMSl9KSl9KSkpLm1hdGNoKHQpLGE9by5sZW5ndGgsZj0wO2Y8YTtmKz0xKXt2YXIgaD1vW2ZdLHU9Y1toXSxkPXUmJnVbMF0sbD11JiZ1WzFdO29bZl09bD97cmVnZXg6ZCxwYXJzZXI6bH06aC5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX1yZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LG49MCxyPTA7bjxhO24rPTEpe3ZhciBpPW9bbl07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpcis9aS5sZW5ndGg7ZWxzZXt2YXIgcz1pLnJlZ2V4LGY9aS5wYXJzZXIsaD1lLnNsaWNlKHIpLHU9cy5leGVjKGgpWzBdO2YuY2FsbCh0LHUpLGU9ZS5yZXBsYWNlKHUsXCJcIil9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmFmdGVybm9vbjtpZih2b2lkIDAhPT10KXt2YXIgbj1lLmhvdXJzO3Q/bjwxMiYmKGUuaG91cnMrPTEyKToxMj09PW4mJihlLmhvdXJzPTApLGRlbGV0ZSBlLmFmdGVybm9vbn19KHQpLHR9fXJldHVybiBmdW5jdGlvbihlLHQsbil7bi5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLGUmJmUucGFyc2VUd29EaWdpdFllYXImJihhPWUucGFyc2VUd29EaWdpdFllYXIpO3ZhciByPXQucHJvdG90eXBlLGk9ci5wYXJzZTtyLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0ZSxyPWUudXRjLG89ZS5hcmdzO3RoaXMuJHU9cjt2YXIgYT1vWzFdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj0hMD09PW9bMl0saD0hMD09PW9bM10sdT1mfHxoLGQ9b1syXTtoJiYoZD1vWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFmJiZkJiYocz1uLkxzW2RdKSx0aGlzLiRkPWZ1bmN0aW9uKGUsdCxuLHIpe3RyeXtpZihbXCJ4XCIsXCJYXCJdLmluZGV4T2YodCk+LTEpcmV0dXJuIG5ldyBEYXRlKChcIlhcIj09PXQ/MWUzOjEpKmUpO3ZhciBpPWwodCkoZSksbz1pLnllYXIscz1pLm1vbnRoLGE9aS5kYXksZj1pLmhvdXJzLGg9aS5taW51dGVzLHU9aS5zZWNvbmRzLGQ9aS5taWxsaXNlY29uZHMsYz1pLnpvbmUsbT1pLndlZWssTT1uZXcgRGF0ZSxZPWF8fChvfHxzPzE6TS5nZXREYXRlKCkpLHA9b3x8TS5nZXRGdWxsWWVhcigpLHY9MDtvJiYhc3x8KHY9cz4wP3MtMTpNLmdldE1vbnRoKCkpO3ZhciBELHc9Znx8MCxnPWh8fDAseT11fHwwLEw9ZHx8MDtyZXR1cm4gYz9uZXcgRGF0ZShEYXRlLlVUQyhwLHYsWSx3LGcseSxMKzYwKmMub2Zmc2V0KjFlMykpOm4/bmV3IERhdGUoRGF0ZS5VVEMocCx2LFksdyxnLHksTCkpOihEPW5ldyBEYXRlKHAsdixZLHcsZyx5LEwpLG0mJihEPXIoRCkud2VlayhtKS50b0RhdGUoKSksRCl9Y2F0Y2goZSl7cmV0dXJuIG5ldyBEYXRlKFwiXCIpfX0odCxhLHIsbiksdGhpcy5pbml0KCksZCYmITAhPT1kJiYodGhpcy4kTD10aGlzLmxvY2FsZShkKS4kTCksdSYmdCE9dGhpcy5mb3JtYXQoYSkmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKSxzPXt9fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgYz1hLmxlbmd0aCxtPTE7bTw9YzttKz0xKXtvWzFdPWFbbS0xXTt2YXIgTT1uLmFwcGx5KHRoaXMsbyk7aWYoTS5pc1ZhbGlkKCkpe3RoaXMuJGQ9TS4kZCx0aGlzLiRMPU0uJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWMmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKX1lbHNlIGkuY2FsbCh0aGlzLGUpfX19KSk7IiwKICAgICIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5wcm90b3R5cGUsbj1yLmZvcm1hdDtyLmZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBuLmJpbmQodGhpcykoZSk7dmFyIHM9dGhpcy4kdXRpbHMoKSxhPShlfHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIpLnJlcGxhY2UoL1xcWyhbXlxcXV0rKV18UXx3b3x3d3x3fFdXfFd8enp6fHp8Z2dnZ3xHR0dHfERvfFh8eHxrezEsMn18Uy9nLChmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwiUVwiOnJldHVybiBNYXRoLmNlaWwoKHQuJE0rMSkvMyk7Y2FzZVwiRG9cIjpyZXR1cm4gci5vcmRpbmFsKHQuJEQpO2Nhc2VcImdnZ2dcIjpyZXR1cm4gdC53ZWVrWWVhcigpO2Nhc2VcIkdHR0dcIjpyZXR1cm4gdC5pc29XZWVrWWVhcigpO2Nhc2VcIndvXCI6cmV0dXJuIHIub3JkaW5hbCh0LndlZWsoKSxcIldcIik7Y2FzZVwid1wiOmNhc2VcInd3XCI6cmV0dXJuIHMucyh0LndlZWsoKSxcIndcIj09PWU/MToyLFwiMFwiKTtjYXNlXCJXXCI6Y2FzZVwiV1dcIjpyZXR1cm4gcy5zKHQuaXNvV2VlaygpLFwiV1wiPT09ZT8xOjIsXCIwXCIpO2Nhc2VcImtcIjpjYXNlXCJra1wiOnJldHVybiBzLnMoU3RyaW5nKDA9PT10LiRIPzI0OnQuJEgpLFwia1wiPT09ZT8xOjIsXCIwXCIpO2Nhc2VcIlhcIjpyZXR1cm4gTWF0aC5mbG9vcih0LiRkLmdldFRpbWUoKS8xZTMpO2Nhc2VcInhcIjpyZXR1cm4gdC4kZC5nZXRUaW1lKCk7Y2FzZVwielwiOnJldHVyblwiW1wiK3Qub2Zmc2V0TmFtZSgpK1wiXVwiO2Nhc2VcInp6elwiOnJldHVyblwiW1wiK3Qub2Zmc2V0TmFtZShcImxvbmdcIikrXCJdXCI7ZGVmYXVsdDpyZXR1cm4gZX19KSk7cmV0dXJuIG4uYmluZCh0aGlzKShhKX19fSkpOyIsCiAgICAiaW1wb3J0IHtcbiAgdXRpbHNfZGVmYXVsdFxufSBmcm9tIFwiLi9jaHVuay0yRURUV0RZSS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGxvZyxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9nYW50dC9wYXJzZXIvZ2FudHQuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFs2LCA4LCAxMCwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMzLCAzNSwgMzYsIDM4LCA0MF0sICRWMSA9IFsxLCAyNl0sICRWMiA9IFsxLCAyN10sICRWMyA9IFsxLCAyOF0sICRWNCA9IFsxLCAyOV0sICRWNSA9IFsxLCAzMF0sICRWNiA9IFsxLCAzMV0sICRWNyA9IFsxLCAzMl0sICRWOCA9IFsxLCAzM10sICRWOSA9IFsxLCAzNF0sICRWYSA9IFsxLCA5XSwgJFZiID0gWzEsIDEwXSwgJFZjID0gWzEsIDExXSwgJFZkID0gWzEsIDEyXSwgJFZlID0gWzEsIDEzXSwgJFZmID0gWzEsIDE0XSwgJFZnID0gWzEsIDE1XSwgJFZoID0gWzEsIDE2XSwgJFZpID0gWzEsIDE5XSwgJFZqID0gWzEsIDIwXSwgJFZrID0gWzEsIDIxXSwgJFZsID0gWzEsIDIyXSwgJFZtID0gWzEsIDIzXSwgJFZuID0gWzEsIDI1XSwgJFZvID0gWzEsIDM1XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiZ2FudHRcIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcIkVPRlwiOiA2LCBcImxpbmVcIjogNywgXCJTUEFDRVwiOiA4LCBcInN0YXRlbWVudFwiOiA5LCBcIk5MXCI6IDEwLCBcIndlZWtkYXlcIjogMTEsIFwid2Vla2RheV9tb25kYXlcIjogMTIsIFwid2Vla2RheV90dWVzZGF5XCI6IDEzLCBcIndlZWtkYXlfd2VkbmVzZGF5XCI6IDE0LCBcIndlZWtkYXlfdGh1cnNkYXlcIjogMTUsIFwid2Vla2RheV9mcmlkYXlcIjogMTYsIFwid2Vla2RheV9zYXR1cmRheVwiOiAxNywgXCJ3ZWVrZGF5X3N1bmRheVwiOiAxOCwgXCJ3ZWVrZW5kXCI6IDE5LCBcIndlZWtlbmRfZnJpZGF5XCI6IDIwLCBcIndlZWtlbmRfc2F0dXJkYXlcIjogMjEsIFwiZGF0ZUZvcm1hdFwiOiAyMiwgXCJpbmNsdXNpdmVFbmREYXRlc1wiOiAyMywgXCJ0b3BBeGlzXCI6IDI0LCBcImF4aXNGb3JtYXRcIjogMjUsIFwidGlja0ludGVydmFsXCI6IDI2LCBcImV4Y2x1ZGVzXCI6IDI3LCBcImluY2x1ZGVzXCI6IDI4LCBcInRvZGF5TWFya2VyXCI6IDI5LCBcInRpdGxlXCI6IDMwLCBcImFjY190aXRsZVwiOiAzMSwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzIsIFwiYWNjX2Rlc2NyXCI6IDMzLCBcImFjY19kZXNjcl92YWx1ZVwiOiAzNCwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDM1LCBcInNlY3Rpb25cIjogMzYsIFwiY2xpY2tTdGF0ZW1lbnRcIjogMzcsIFwidGFza1R4dFwiOiAzOCwgXCJ0YXNrRGF0YVwiOiAzOSwgXCJjbGlja1wiOiA0MCwgXCJjYWxsYmFja25hbWVcIjogNDEsIFwiY2FsbGJhY2thcmdzXCI6IDQyLCBcImhyZWZcIjogNDMsIFwiY2xpY2tTdGF0ZW1lbnREZWJ1Z1wiOiA0NCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiZ2FudHRcIiwgNjogXCJFT0ZcIiwgODogXCJTUEFDRVwiLCAxMDogXCJOTFwiLCAxMjogXCJ3ZWVrZGF5X21vbmRheVwiLCAxMzogXCJ3ZWVrZGF5X3R1ZXNkYXlcIiwgMTQ6IFwid2Vla2RheV93ZWRuZXNkYXlcIiwgMTU6IFwid2Vla2RheV90aHVyc2RheVwiLCAxNjogXCJ3ZWVrZGF5X2ZyaWRheVwiLCAxNzogXCJ3ZWVrZGF5X3NhdHVyZGF5XCIsIDE4OiBcIndlZWtkYXlfc3VuZGF5XCIsIDIwOiBcIndlZWtlbmRfZnJpZGF5XCIsIDIxOiBcIndlZWtlbmRfc2F0dXJkYXlcIiwgMjI6IFwiZGF0ZUZvcm1hdFwiLCAyMzogXCJpbmNsdXNpdmVFbmREYXRlc1wiLCAyNDogXCJ0b3BBeGlzXCIsIDI1OiBcImF4aXNGb3JtYXRcIiwgMjY6IFwidGlja0ludGVydmFsXCIsIDI3OiBcImV4Y2x1ZGVzXCIsIDI4OiBcImluY2x1ZGVzXCIsIDI5OiBcInRvZGF5TWFya2VyXCIsIDMwOiBcInRpdGxlXCIsIDMxOiBcImFjY190aXRsZVwiLCAzMjogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzM6IFwiYWNjX2Rlc2NyXCIsIDM0OiBcImFjY19kZXNjcl92YWx1ZVwiLCAzNTogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDM2OiBcInNlY3Rpb25cIiwgMzg6IFwidGFza1R4dFwiLCAzOTogXCJ0YXNrRGF0YVwiLCA0MDogXCJjbGlja1wiLCA0MTogXCJjYWxsYmFja25hbWVcIiwgNDI6IFwiY2FsbGJhY2thcmdzXCIsIDQzOiBcImhyZWZcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzUsIDBdLCBbNSwgMl0sIFs3LCAyXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzE5LCAxXSwgWzE5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMl0sIFszNywgMl0sIFszNywgM10sIFszNywgM10sIFszNywgNF0sIFszNywgM10sIFszNywgNF0sIFszNywgMl0sIFs0NCwgMl0sIFs0NCwgM10sIFs0NCwgM10sIFs0NCwgNF0sIFs0NCwgM10sIFs0NCwgNF0sIFs0NCwgMl1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5zZXRXZWVrZGF5KFwibW9uZGF5XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcInR1ZXNkYXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcIndlZG5lc2RheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB5eS5zZXRXZWVrZGF5KFwidGh1cnNkYXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcImZyaWRheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB5eS5zZXRXZWVrZGF5KFwic2F0dXJkYXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcInN1bmRheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5zZXRXZWVrZW5kKFwiZnJpZGF5XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LnNldFdlZWtlbmQoXCJzYXR1cmRheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICB5eS5zZXREYXRlRm9ybWF0KCQkWyQwXS5zdWJzdHIoMTEpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDExKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICB5eS5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoMTgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHl5LlRvcEF4aXMoKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHl5LnNldEF4aXNGb3JtYXQoJCRbJDBdLnN1YnN0cigxMSkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoMTEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHl5LnNldFRpY2tJbnRlcnZhbCgkJFskMF0uc3Vic3RyKDEzKSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cigxMyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgeXkuc2V0RXhjbHVkZXMoJCRbJDBdLnN1YnN0cig5KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5zZXRJbmNsdWRlcygkJFskMF0uc3Vic3RyKDkpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHl5LnNldFRvZGF5TWFya2VyKCQkWyQwXS5zdWJzdHIoMTIpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDEyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cig2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHl5LmFkZFNlY3Rpb24oJCRbJDBdLnN1YnN0cig4KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5hZGRUYXNrKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gXCJ0YXNrXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMV0sICQkWyQwXSwgbnVsbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sIG51bGwpO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDJdLCAkJFskMF0sIG51bGwpO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdICsgXCIgXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXSArIFwiIFwiICsgJCRbJDAgLSAxXSArIFwiIFwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM10gKyBcIiBcIiArICQkWyQwIC0gMl0gKyBcIiBcIiArICQkWyQwIC0gMV0gKyBcIiBcIiArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IFsxLCA2XSwgOTogNywgMTA6IFsxLCA4XSwgMTE6IDE3LCAxMjogJFYxLCAxMzogJFYyLCAxNDogJFYzLCAxNTogJFY0LCAxNjogJFY1LCAxNzogJFY2LCAxODogJFY3LCAxOTogMTgsIDIwOiAkVjgsIDIxOiAkVjksIDIyOiAkVmEsIDIzOiAkVmIsIDI0OiAkVmMsIDI1OiAkVmQsIDI2OiAkVmUsIDI3OiAkVmYsIDI4OiAkVmcsIDI5OiAkVmgsIDMwOiAkVmksIDMxOiAkVmosIDMzOiAkVmssIDM1OiAkVmwsIDM2OiAkVm0sIDM3OiAyNCwgMzg6ICRWbiwgNDA6ICRWbyB9LCBvKCRWMCwgWzIsIDddLCB7IDE6IFsyLCAxXSB9KSwgbygkVjAsIFsyLCAzXSksIHsgOTogMzYsIDExOiAxNywgMTI6ICRWMSwgMTM6ICRWMiwgMTQ6ICRWMywgMTU6ICRWNCwgMTY6ICRWNSwgMTc6ICRWNiwgMTg6ICRWNywgMTk6IDE4LCAyMDogJFY4LCAyMTogJFY5LCAyMjogJFZhLCAyMzogJFZiLCAyNDogJFZjLCAyNTogJFZkLCAyNjogJFZlLCAyNzogJFZmLCAyODogJFZnLCAyOTogJFZoLCAzMDogJFZpLCAzMTogJFZqLCAzMzogJFZrLCAzNTogJFZsLCAzNjogJFZtLCAzNzogMjQsIDM4OiAkVm4sIDQwOiAkVm8gfSwgbygkVjAsIFsyLCA1XSksIG8oJFYwLCBbMiwgNl0pLCBvKCRWMCwgWzIsIDE3XSksIG8oJFYwLCBbMiwgMThdKSwgbygkVjAsIFsyLCAxOV0pLCBvKCRWMCwgWzIsIDIwXSksIG8oJFYwLCBbMiwgMjFdKSwgbygkVjAsIFsyLCAyMl0pLCBvKCRWMCwgWzIsIDIzXSksIG8oJFYwLCBbMiwgMjRdKSwgbygkVjAsIFsyLCAyNV0pLCBvKCRWMCwgWzIsIDI2XSksIG8oJFYwLCBbMiwgMjddKSwgeyAzMjogWzEsIDM3XSB9LCB7IDM0OiBbMSwgMzhdIH0sIG8oJFYwLCBbMiwgMzBdKSwgbygkVjAsIFsyLCAzMV0pLCBvKCRWMCwgWzIsIDMyXSksIHsgMzk6IFsxLCAzOV0gfSwgbygkVjAsIFsyLCA4XSksIG8oJFYwLCBbMiwgOV0pLCBvKCRWMCwgWzIsIDEwXSksIG8oJFYwLCBbMiwgMTFdKSwgbygkVjAsIFsyLCAxMl0pLCBvKCRWMCwgWzIsIDEzXSksIG8oJFYwLCBbMiwgMTRdKSwgbygkVjAsIFsyLCAxNV0pLCBvKCRWMCwgWzIsIDE2XSksIHsgNDE6IFsxLCA0MF0sIDQzOiBbMSwgNDFdIH0sIG8oJFYwLCBbMiwgNF0pLCBvKCRWMCwgWzIsIDI4XSksIG8oJFYwLCBbMiwgMjldKSwgbygkVjAsIFsyLCAzM10pLCBvKCRWMCwgWzIsIDM0XSwgeyA0MjogWzEsIDQyXSwgNDM6IFsxLCA0M10gfSksIG8oJFYwLCBbMiwgNDBdLCB7IDQxOiBbMSwgNDRdIH0pLCBvKCRWMCwgWzIsIDM1XSwgeyA0MzogWzEsIDQ1XSB9KSwgbygkVjAsIFsyLCAzNl0pLCBvKCRWMCwgWzIsIDM4XSwgeyA0MjogWzEsIDQ2XSB9KSwgbygkVjAsIFsyLCAzN10pLCBvKCRWMCwgWzIsIDM5XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7fSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwib3Blbl9kaXJlY3RpdmVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiaHJlZlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja25hbWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja2FyZ3NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsaWNrXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDIyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gMjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgcmV0dXJuIDI1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY0Rlc2NyaXB0aW9uXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIFwiOlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzolJVxceykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86JSUoPyFcXHspKlteXFxuXSopL2ksIC9eKD86W15cXH1dJSUqW15cXG5dKikvaSwgL14oPzolJSpbXlxcbl0qW1xcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiVbXlxcbl0qKS9pLCAvXig/OmhyZWZbXFxzXStbXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0qKS9pLCAvXig/OmNhbGxbXFxzXSspL2ksIC9eKD86XFwoW1xcc10qXFwpKS9pLCAvXig/OlxcKCkvaSwgL14oPzpbXihdKikvaSwgL14oPzpcXCkpL2ksIC9eKD86W14pXSopL2ksIC9eKD86Y2xpY2tbXFxzXSspL2ksIC9eKD86W1xcc1xcbl0pL2ksIC9eKD86W15cXHNcXG5dKikvaSwgL14oPzpnYW50dFxcYikvaSwgL14oPzpkYXRlRm9ybWF0XFxzW14jXFxuO10rKS9pLCAvXig/OmluY2x1c2l2ZUVuZERhdGVzXFxiKS9pLCAvXig/OnRvcEF4aXNcXGIpL2ksIC9eKD86YXhpc0Zvcm1hdFxcc1teI1xcbjtdKykvaSwgL14oPzp0aWNrSW50ZXJ2YWxcXHNbXiNcXG47XSspL2ksIC9eKD86aW5jbHVkZXNcXHNbXiNcXG47XSspL2ksIC9eKD86ZXhjbHVkZXNcXHNbXiNcXG47XSspL2ksIC9eKD86dG9kYXlNYXJrZXJcXHNbXlxcbjtdKykvaSwgL14oPzp3ZWVrZGF5XFxzK21vbmRheVxcYikvaSwgL14oPzp3ZWVrZGF5XFxzK3R1ZXNkYXlcXGIpL2ksIC9eKD86d2Vla2RheVxccyt3ZWRuZXNkYXlcXGIpL2ksIC9eKD86d2Vla2RheVxccyt0aHVyc2RheVxcYikvaSwgL14oPzp3ZWVrZGF5XFxzK2ZyaWRheVxcYikvaSwgL14oPzp3ZWVrZGF5XFxzK3NhdHVyZGF5XFxiKS9pLCAvXig/OndlZWtkYXlcXHMrc3VuZGF5XFxiKS9pLCAvXig/OndlZWtlbmRcXHMrZnJpZGF5XFxiKS9pLCAvXig/OndlZWtlbmRcXHMrc2F0dXJkYXlcXGIpL2ksIC9eKD86XFxkXFxkXFxkXFxkLVxcZFxcZC1cXGRcXGRcXGIpL2ksIC9eKD86dGl0bGVcXHNbXlxcbl0rKS9pLCAvXig/OmFjY0Rlc2NyaXB0aW9uXFxzW14jXFxuO10rKS9pLCAvXig/OnNlY3Rpb25cXHNbXlxcbl0rKS9pLCAvXig/OlteOlxcbl0rKS9pLCAvXig/OjpbXiNcXG47XSspL2ksIC9eKD86OikvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs2LCA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFs0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsyXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjYWxsYmFja2FyZ3NcIjogeyBcInJ1bGVzXCI6IFsyMSwgMjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNhbGxiYWNrbmFtZVwiOiB7IFwicnVsZXNcIjogWzE4LCAxOSwgMjBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImhyZWZcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsaWNrXCI6IHsgXCJydWxlc1wiOiBbMjQsIDI1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMywgNSwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNywgMjMsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTJdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgZ2FudHRfZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2dhbnR0L2dhbnR0RGIuanNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgZGF5anNJc29XZWVrIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNvV2Vlay5qc1wiO1xuaW1wb3J0IGRheWpzQ3VzdG9tUGFyc2VGb3JtYXQgZnJvbSBcImRheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdC5qc1wiO1xuaW1wb3J0IGRheWpzQWR2YW5jZWRGb3JtYXQgZnJvbSBcImRheWpzL3BsdWdpbi9hZHZhbmNlZEZvcm1hdC5qc1wiO1xuZGF5anMuZXh0ZW5kKGRheWpzSXNvV2Vlayk7XG5kYXlqcy5leHRlbmQoZGF5anNDdXN0b21QYXJzZUZvcm1hdCk7XG5kYXlqcy5leHRlbmQoZGF5anNBZHZhbmNlZEZvcm1hdCk7XG52YXIgV0VFS0VORF9TVEFSVF9EQVkgPSB7IGZyaWRheTogNSwgc2F0dXJkYXk6IDYgfTtcbnZhciBkYXRlRm9ybWF0ID0gXCJcIjtcbnZhciBheGlzRm9ybWF0ID0gXCJcIjtcbnZhciB0aWNrSW50ZXJ2YWwgPSB2b2lkIDA7XG52YXIgdG9kYXlNYXJrZXIgPSBcIlwiO1xudmFyIGluY2x1ZGVzID0gW107XG52YXIgZXhjbHVkZXMgPSBbXTtcbnZhciBsaW5rcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgc2VjdGlvbnMgPSBbXTtcbnZhciB0YXNrcyA9IFtdO1xudmFyIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbnZhciBkaXNwbGF5TW9kZSA9IFwiXCI7XG52YXIgdGFncyA9IFtcImFjdGl2ZVwiLCBcImRvbmVcIiwgXCJjcml0XCIsIFwibWlsZXN0b25lXCJdO1xudmFyIGZ1bnMgPSBbXTtcbnZhciBpbmNsdXNpdmVFbmREYXRlcyA9IGZhbHNlO1xudmFyIHRvcEF4aXMgPSBmYWxzZTtcbnZhciB3ZWVrZGF5ID0gXCJzdW5kYXlcIjtcbnZhciB3ZWVrZW5kID0gXCJzYXR1cmRheVwiO1xudmFyIGxhc3RPcmRlciA9IDA7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc2VjdGlvbnMgPSBbXTtcbiAgdGFza3MgPSBbXTtcbiAgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xuICBmdW5zID0gW107XG4gIHRhc2tDbnQgPSAwO1xuICBsYXN0VGFzayA9IHZvaWQgMDtcbiAgbGFzdFRhc2tJRCA9IHZvaWQgMDtcbiAgcmF3VGFza3MgPSBbXTtcbiAgZGF0ZUZvcm1hdCA9IFwiXCI7XG4gIGF4aXNGb3JtYXQgPSBcIlwiO1xuICBkaXNwbGF5TW9kZSA9IFwiXCI7XG4gIHRpY2tJbnRlcnZhbCA9IHZvaWQgMDtcbiAgdG9kYXlNYXJrZXIgPSBcIlwiO1xuICBpbmNsdWRlcyA9IFtdO1xuICBleGNsdWRlcyA9IFtdO1xuICBpbmNsdXNpdmVFbmREYXRlcyA9IGZhbHNlO1xuICB0b3BBeGlzID0gZmFsc2U7XG4gIGxhc3RPcmRlciA9IDA7XG4gIGxpbmtzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY2xlYXIoKTtcbiAgd2Vla2RheSA9IFwic3VuZGF5XCI7XG4gIHdlZWtlbmQgPSBcInNhdHVyZGF5XCI7XG59LCBcImNsZWFyXCIpO1xudmFyIHNldEF4aXNGb3JtYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBheGlzRm9ybWF0ID0gdHh0O1xufSwgXCJzZXRBeGlzRm9ybWF0XCIpO1xudmFyIGdldEF4aXNGb3JtYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYXhpc0Zvcm1hdDtcbn0sIFwiZ2V0QXhpc0Zvcm1hdFwiKTtcbnZhciBzZXRUaWNrSW50ZXJ2YWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICB0aWNrSW50ZXJ2YWwgPSB0eHQ7XG59LCBcInNldFRpY2tJbnRlcnZhbFwiKTtcbnZhciBnZXRUaWNrSW50ZXJ2YWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGlja0ludGVydmFsO1xufSwgXCJnZXRUaWNrSW50ZXJ2YWxcIik7XG52YXIgc2V0VG9kYXlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICB0b2RheU1hcmtlciA9IHR4dDtcbn0sIFwic2V0VG9kYXlNYXJrZXJcIik7XG52YXIgZ2V0VG9kYXlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdG9kYXlNYXJrZXI7XG59LCBcImdldFRvZGF5TWFya2VyXCIpO1xudmFyIHNldERhdGVGb3JtYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBkYXRlRm9ybWF0ID0gdHh0O1xufSwgXCJzZXREYXRlRm9ybWF0XCIpO1xudmFyIGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgaW5jbHVzaXZlRW5kRGF0ZXMgPSB0cnVlO1xufSwgXCJlbmFibGVJbmNsdXNpdmVFbmREYXRlc1wiKTtcbnZhciBlbmREYXRlc0FyZUluY2x1c2l2ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbmNsdXNpdmVFbmREYXRlcztcbn0sIFwiZW5kRGF0ZXNBcmVJbmNsdXNpdmVcIik7XG52YXIgZW5hYmxlVG9wQXhpcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHRvcEF4aXMgPSB0cnVlO1xufSwgXCJlbmFibGVUb3BBeGlzXCIpO1xudmFyIHRvcEF4aXNFbmFibGVkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRvcEF4aXM7XG59LCBcInRvcEF4aXNFbmFibGVkXCIpO1xudmFyIHNldERpc3BsYXlNb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eHQpIHtcbiAgZGlzcGxheU1vZGUgPSB0eHQ7XG59LCBcInNldERpc3BsYXlNb2RlXCIpO1xudmFyIGdldERpc3BsYXlNb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRpc3BsYXlNb2RlO1xufSwgXCJnZXREaXNwbGF5TW9kZVwiKTtcbnZhciBnZXREYXRlRm9ybWF0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXQ7XG59LCBcImdldERhdGVGb3JtYXRcIik7XG52YXIgc2V0SW5jbHVkZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBpbmNsdWRlcyA9IHR4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXFxzLF0rLyk7XG59LCBcInNldEluY2x1ZGVzXCIpO1xudmFyIGdldEluY2x1ZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGluY2x1ZGVzO1xufSwgXCJnZXRJbmNsdWRlc1wiKTtcbnZhciBzZXRFeGNsdWRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIGV4Y2x1ZGVzID0gdHh0LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcXHMsXSsvKTtcbn0sIFwic2V0RXhjbHVkZXNcIik7XG52YXIgZ2V0RXhjbHVkZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZXhjbHVkZXM7XG59LCBcImdldEV4Y2x1ZGVzXCIpO1xudmFyIGdldExpbmtzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGxpbmtzO1xufSwgXCJnZXRMaW5rc1wiKTtcbnZhciBhZGRTZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eHQpIHtcbiAgY3VycmVudFNlY3Rpb24gPSB0eHQ7XG4gIHNlY3Rpb25zLnB1c2godHh0KTtcbn0sIFwiYWRkU2VjdGlvblwiKTtcbnZhciBnZXRTZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzZWN0aW9ucztcbn0sIFwiZ2V0U2VjdGlvbnNcIik7XG52YXIgZ2V0VGFza3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBsZXQgYWxsSXRlbXNQcm9jZXNzZWQgPSBjb21waWxlVGFza3MoKTtcbiAgY29uc3QgbWF4RGVwdGggPSAxMDtcbiAgbGV0IGl0ZXJhdGlvbkNvdW50ID0gMDtcbiAgd2hpbGUgKCFhbGxJdGVtc1Byb2Nlc3NlZCAmJiBpdGVyYXRpb25Db3VudCA8IG1heERlcHRoKSB7XG4gICAgYWxsSXRlbXNQcm9jZXNzZWQgPSBjb21waWxlVGFza3MoKTtcbiAgICBpdGVyYXRpb25Db3VudCsrO1xuICB9XG4gIHRhc2tzID0gcmF3VGFza3M7XG4gIHJldHVybiB0YXNrcztcbn0sIFwiZ2V0VGFza3NcIik7XG52YXIgaXNJbnZhbGlkRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGF0ZSwgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKSB7XG4gIGlmIChpbmNsdWRlczIuaW5jbHVkZXMoZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdDIudHJpbSgpKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGV4Y2x1ZGVzMi5pbmNsdWRlcyhcIndlZWtlbmRzXCIpICYmIChkYXRlLmlzb1dlZWtkYXkoKSA9PT0gV0VFS0VORF9TVEFSVF9EQVlbd2Vla2VuZF0gfHwgZGF0ZS5pc29XZWVrZGF5KCkgPT09IFdFRUtFTkRfU1RBUlRfREFZW3dlZWtlbmRdICsgMSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoZXhjbHVkZXMyLmluY2x1ZGVzKGRhdGUuZm9ybWF0KFwiZGRkZFwiKS50b0xvd2VyQ2FzZSgpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBleGNsdWRlczIuaW5jbHVkZXMoZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdDIudHJpbSgpKSk7XG59LCBcImlzSW52YWxpZERhdGVcIik7XG52YXIgc2V0V2Vla2RheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIHdlZWtkYXkgPSB0eHQ7XG59LCBcInNldFdlZWtkYXlcIik7XG52YXIgZ2V0V2Vla2RheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB3ZWVrZGF5O1xufSwgXCJnZXRXZWVrZGF5XCIpO1xudmFyIHNldFdlZWtlbmQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0YXJ0RGF5KSB7XG4gIHdlZWtlbmQgPSBzdGFydERheTtcbn0sIFwic2V0V2Vla2VuZFwiKTtcbnZhciBjaGVja1Rhc2tEYXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGFzaywgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKSB7XG4gIGlmICghZXhjbHVkZXMyLmxlbmd0aCB8fCB0YXNrLm1hbnVhbEVuZFRpbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHN0YXJ0VGltZTtcbiAgaWYgKHRhc2suc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHN0YXJ0VGltZSA9IGRheWpzKHRhc2suc3RhcnRUaW1lKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFydFRpbWUgPSBkYXlqcyh0YXNrLnN0YXJ0VGltZSwgZGF0ZUZvcm1hdDIsIHRydWUpO1xuICB9XG4gIHN0YXJ0VGltZSA9IHN0YXJ0VGltZS5hZGQoMSwgXCJkXCIpO1xuICBsZXQgb3JpZ2luYWxFbmRUaW1lO1xuICBpZiAodGFzay5lbmRUaW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIG9yaWdpbmFsRW5kVGltZSA9IGRheWpzKHRhc2suZW5kVGltZSk7XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxFbmRUaW1lID0gZGF5anModGFzay5lbmRUaW1lLCBkYXRlRm9ybWF0MiwgdHJ1ZSk7XG4gIH1cbiAgY29uc3QgW2ZpeGVkRW5kVGltZSwgcmVuZGVyRW5kVGltZV0gPSBmaXhUYXNrRGF0ZXMoXG4gICAgc3RhcnRUaW1lLFxuICAgIG9yaWdpbmFsRW5kVGltZSxcbiAgICBkYXRlRm9ybWF0MixcbiAgICBleGNsdWRlczIsXG4gICAgaW5jbHVkZXMyXG4gICk7XG4gIHRhc2suZW5kVGltZSA9IGZpeGVkRW5kVGltZS50b0RhdGUoKTtcbiAgdGFzay5yZW5kZXJFbmRUaW1lID0gcmVuZGVyRW5kVGltZTtcbn0sIFwiY2hlY2tUYXNrRGF0ZXNcIik7XG52YXIgZml4VGFza0RhdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdGFydFRpbWUsIGVuZFRpbWUsIGRhdGVGb3JtYXQyLCBleGNsdWRlczIsIGluY2x1ZGVzMikge1xuICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICBsZXQgcmVuZGVyRW5kVGltZSA9IG51bGw7XG4gIHdoaWxlIChzdGFydFRpbWUgPD0gZW5kVGltZSkge1xuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgcmVuZGVyRW5kVGltZSA9IGVuZFRpbWUudG9EYXRlKCk7XG4gICAgfVxuICAgIGludmFsaWQgPSBpc0ludmFsaWREYXRlKHN0YXJ0VGltZSwgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKTtcbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgZW5kVGltZSA9IGVuZFRpbWUuYWRkKDEsIFwiZFwiKTtcbiAgICB9XG4gICAgc3RhcnRUaW1lID0gc3RhcnRUaW1lLmFkZCgxLCBcImRcIik7XG4gIH1cbiAgcmV0dXJuIFtlbmRUaW1lLCByZW5kZXJFbmRUaW1lXTtcbn0sIFwiZml4VGFza0RhdGVzXCIpO1xudmFyIGdldFN0YXJ0RGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocHJldlRpbWUsIGRhdGVGb3JtYXQyLCBzdHIpIHtcbiAgc3RyID0gc3RyLnRyaW0oKTtcbiAgY29uc3QgYWZ0ZXJSZVBhdHRlcm4gPSAvXmFmdGVyXFxzKyg/PGlkcz5bXFxkXFx3LSBdKykvO1xuICBjb25zdCBhZnRlclN0YXRlbWVudCA9IGFmdGVyUmVQYXR0ZXJuLmV4ZWMoc3RyKTtcbiAgaWYgKGFmdGVyU3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgbGV0IGxhdGVzdFRhc2sgPSBudWxsO1xuICAgIGZvciAoY29uc3QgaWQgb2YgYWZ0ZXJTdGF0ZW1lbnQuZ3JvdXBzLmlkcy5zcGxpdChcIiBcIikpIHtcbiAgICAgIGxldCB0YXNrID0gZmluZFRhc2tCeUlkKGlkKTtcbiAgICAgIGlmICh0YXNrICE9PSB2b2lkIDAgJiYgKCFsYXRlc3RUYXNrIHx8IHRhc2suZW5kVGltZSA+IGxhdGVzdFRhc2suZW5kVGltZSkpIHtcbiAgICAgICAgbGF0ZXN0VGFzayA9IHRhc2s7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsYXRlc3RUYXNrKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0VGFzay5lbmRUaW1lO1xuICAgIH1cbiAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiB0b2RheTtcbiAgfVxuICBsZXQgbURhdGUgPSBkYXlqcyhzdHIsIGRhdGVGb3JtYXQyLnRyaW0oKSwgdHJ1ZSk7XG4gIGlmIChtRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICByZXR1cm4gbURhdGUudG9EYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKFwiSW52YWxpZCBkYXRlOlwiICsgc3RyKTtcbiAgICBsb2cuZGVidWcoXCJXaXRoIGRhdGUgZm9ybWF0OlwiICsgZGF0ZUZvcm1hdDIudHJpbSgpKTtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoc3RyKTtcbiAgICBpZiAoZCA9PT0gdm9pZCAwIHx8IGlzTmFOKGQuZ2V0VGltZSgpKSB8fCAvLyBXZWJLaXQgYnJvd3NlcnMgY2FuIG1pcy1wYXJzZSBpbnZhbGlkIGRhdGVzIHRvIGJlIHJpZGljdWxvdXNseVxuICAgIC8vIGh1Z2UgbnVtYmVycywgZS5nLiBuZXcgRGF0ZSgnMjAyMzA0JykgZ2V0cyBwYXJzZWQgYXMgSmFudWFyeSAxLCAyMDIzMDQuXG4gICAgLy8gVGhpcyBjYW4gY2F1c2UgdmlydHVhbGx5IGluZmluaXRlIGxvb3BzIHdoaWxlIHJlbmRlcmluZywgc28gZm9yIHRoZVxuICAgIC8vIHB1cnBvc2VzIG9mIEdhbnR0IGNoYXJ0cyB3ZSdsbCBqdXN0IHRyZWF0IGFueSBkYXRlIGJleW9uZCAxMCwwMDAgQUQvQkMgYXNcbiAgICAvLyBpbnZhbGlkLlxuICAgIGQuZ2V0RnVsbFllYXIoKSA8IC0xZTQgfHwgZC5nZXRGdWxsWWVhcigpID4gMWU0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGU6XCIgKyBzdHIpO1xuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxufSwgXCJnZXRTdGFydERhdGVcIik7XG52YXIgcGFyc2VEdXJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3RyKSB7XG4gIGNvbnN0IHN0YXRlbWVudCA9IC9eKFxcZCsoPzpcXC5cXGQrKT8pKFtNZGhtc3d5XXxtcykkLy5leGVjKHN0ci50cmltKCkpO1xuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtOdW1iZXIucGFyc2VGbG9hdChzdGF0ZW1lbnRbMV0pLCBzdGF0ZW1lbnRbMl1dO1xuICB9XG4gIHJldHVybiBbTmFOLCBcIm1zXCJdO1xufSwgXCJwYXJzZUR1cmF0aW9uXCIpO1xudmFyIGdldEVuZERhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHByZXZUaW1lLCBkYXRlRm9ybWF0Miwgc3RyLCBpbmNsdXNpdmUgPSBmYWxzZSkge1xuICBzdHIgPSBzdHIudHJpbSgpO1xuICBjb25zdCB1bnRpbFJlUGF0dGVybiA9IC9edW50aWxcXHMrKD88aWRzPltcXGRcXHctIF0rKS87XG4gIGNvbnN0IHVudGlsU3RhdGVtZW50ID0gdW50aWxSZVBhdHRlcm4uZXhlYyhzdHIpO1xuICBpZiAodW50aWxTdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBsZXQgZWFybGllc3RUYXNrID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHVudGlsU3RhdGVtZW50Lmdyb3Vwcy5pZHMuc3BsaXQoXCIgXCIpKSB7XG4gICAgICBsZXQgdGFzayA9IGZpbmRUYXNrQnlJZChpZCk7XG4gICAgICBpZiAodGFzayAhPT0gdm9pZCAwICYmICghZWFybGllc3RUYXNrIHx8IHRhc2suc3RhcnRUaW1lIDwgZWFybGllc3RUYXNrLnN0YXJ0VGltZSkpIHtcbiAgICAgICAgZWFybGllc3RUYXNrID0gdGFzaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVhcmxpZXN0VGFzaykge1xuICAgICAgcmV0dXJuIGVhcmxpZXN0VGFzay5zdGFydFRpbWU7XG4gICAgfVxuICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIHRvZGF5O1xuICB9XG4gIGxldCBwYXJzZWREYXRlID0gZGF5anMoc3RyLCBkYXRlRm9ybWF0Mi50cmltKCksIHRydWUpO1xuICBpZiAocGFyc2VkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICBpZiAoaW5jbHVzaXZlKSB7XG4gICAgICBwYXJzZWREYXRlID0gcGFyc2VkRGF0ZS5hZGQoMSwgXCJkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkRGF0ZS50b0RhdGUoKTtcbiAgfVxuICBsZXQgZW5kVGltZSA9IGRheWpzKHByZXZUaW1lKTtcbiAgY29uc3QgW2R1cmF0aW9uVmFsdWUsIGR1cmF0aW9uVW5pdF0gPSBwYXJzZUR1cmF0aW9uKHN0cik7XG4gIGlmICghTnVtYmVyLmlzTmFOKGR1cmF0aW9uVmFsdWUpKSB7XG4gICAgY29uc3QgbmV3RW5kVGltZSA9IGVuZFRpbWUuYWRkKGR1cmF0aW9uVmFsdWUsIGR1cmF0aW9uVW5pdCk7XG4gICAgaWYgKG5ld0VuZFRpbWUuaXNWYWxpZCgpKSB7XG4gICAgICBlbmRUaW1lID0gbmV3RW5kVGltZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVuZFRpbWUudG9EYXRlKCk7XG59LCBcImdldEVuZERhdGVcIik7XG52YXIgdGFza0NudCA9IDA7XG52YXIgcGFyc2VJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRTdHIpIHtcbiAgaWYgKGlkU3RyID09PSB2b2lkIDApIHtcbiAgICB0YXNrQ250ID0gdGFza0NudCArIDE7XG4gICAgcmV0dXJuIFwidGFza1wiICsgdGFza0NudDtcbiAgfVxuICByZXR1cm4gaWRTdHI7XG59LCBcInBhcnNlSWRcIik7XG52YXIgY29tcGlsZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHByZXZUYXNrLCBkYXRhU3RyKSB7XG4gIGxldCBkcztcbiAgaWYgKGRhdGFTdHIuc3Vic3RyKDAsIDEpID09PSBcIjpcIikge1xuICAgIGRzID0gZGF0YVN0ci5zdWJzdHIoMSwgZGF0YVN0ci5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIGRzID0gZGF0YVN0cjtcbiAgfVxuICBjb25zdCBkYXRhID0gZHMuc3BsaXQoXCIsXCIpO1xuICBjb25zdCB0YXNrID0ge307XG4gIGdldFRhc2tUYWdzKGRhdGEsIHRhc2ssIHRhZ3MpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhW2ldID0gZGF0YVtpXS50cmltKCk7XG4gIH1cbiAgbGV0IGVuZFRpbWVEYXRhID0gXCJcIjtcbiAgc3dpdGNoIChkYXRhLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKCk7XG4gICAgICB0YXNrLnN0YXJ0VGltZSA9IHByZXZUYXNrLmVuZFRpbWU7XG4gICAgICBlbmRUaW1lRGF0YSA9IGRhdGFbMF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0YXNrLmlkID0gcGFyc2VJZCgpO1xuICAgICAgdGFzay5zdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCBkYXRhWzBdKTtcbiAgICAgIGVuZFRpbWVEYXRhID0gZGF0YVsxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKGRhdGFbMF0pO1xuICAgICAgdGFzay5zdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCBkYXRhWzFdKTtcbiAgICAgIGVuZFRpbWVEYXRhID0gZGF0YVsyXTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbiAgaWYgKGVuZFRpbWVEYXRhKSB7XG4gICAgdGFzay5lbmRUaW1lID0gZ2V0RW5kRGF0ZSh0YXNrLnN0YXJ0VGltZSwgZGF0ZUZvcm1hdCwgZW5kVGltZURhdGEsIGluY2x1c2l2ZUVuZERhdGVzKTtcbiAgICB0YXNrLm1hbnVhbEVuZFRpbWUgPSBkYXlqcyhlbmRUaW1lRGF0YSwgXCJZWVlZLU1NLUREXCIsIHRydWUpLmlzVmFsaWQoKTtcbiAgICBjaGVja1Rhc2tEYXRlcyh0YXNrLCBkYXRlRm9ybWF0LCBleGNsdWRlcywgaW5jbHVkZXMpO1xuICB9XG4gIHJldHVybiB0YXNrO1xufSwgXCJjb21waWxlRGF0YVwiKTtcbnZhciBwYXJzZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHByZXZUYXNrSWQsIGRhdGFTdHIpIHtcbiAgbGV0IGRzO1xuICBpZiAoZGF0YVN0ci5zdWJzdHIoMCwgMSkgPT09IFwiOlwiKSB7XG4gICAgZHMgPSBkYXRhU3RyLnN1YnN0cigxLCBkYXRhU3RyLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgZHMgPSBkYXRhU3RyO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBkcy5zcGxpdChcIixcIik7XG4gIGNvbnN0IHRhc2sgPSB7fTtcbiAgZ2V0VGFza1RhZ3MoZGF0YSwgdGFzaywgdGFncyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGRhdGFbaV0gPSBkYXRhW2ldLnRyaW0oKTtcbiAgfVxuICBzd2l0Y2ggKGRhdGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdGFzay5pZCA9IHBhcnNlSWQoKTtcbiAgICAgIHRhc2suc3RhcnRUaW1lID0ge1xuICAgICAgICB0eXBlOiBcInByZXZUYXNrRW5kXCIsXG4gICAgICAgIGlkOiBwcmV2VGFza0lkXG4gICAgICB9O1xuICAgICAgdGFzay5lbmRUaW1lID0ge1xuICAgICAgICBkYXRhOiBkYXRhWzBdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdGFzay5pZCA9IHBhcnNlSWQoKTtcbiAgICAgIHRhc2suc3RhcnRUaW1lID0ge1xuICAgICAgICB0eXBlOiBcImdldFN0YXJ0RGF0ZVwiLFxuICAgICAgICBzdGFydERhdGE6IGRhdGFbMF1cbiAgICAgIH07XG4gICAgICB0YXNrLmVuZFRpbWUgPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbMV1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB0YXNrLmlkID0gcGFyc2VJZChkYXRhWzBdKTtcbiAgICAgIHRhc2suc3RhcnRUaW1lID0ge1xuICAgICAgICB0eXBlOiBcImdldFN0YXJ0RGF0ZVwiLFxuICAgICAgICBzdGFydERhdGE6IGRhdGFbMV1cbiAgICAgIH07XG4gICAgICB0YXNrLmVuZFRpbWUgPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbMl1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICB9XG4gIHJldHVybiB0YXNrO1xufSwgXCJwYXJzZURhdGFcIik7XG52YXIgbGFzdFRhc2s7XG52YXIgbGFzdFRhc2tJRDtcbnZhciByYXdUYXNrcyA9IFtdO1xudmFyIHRhc2tEYiA9IHt9O1xudmFyIGFkZFRhc2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRlc2NyLCBkYXRhKSB7XG4gIGNvbnN0IHJhd1Rhc2sgPSB7XG4gICAgc2VjdGlvbjogY3VycmVudFNlY3Rpb24sXG4gICAgdHlwZTogY3VycmVudFNlY3Rpb24sXG4gICAgcHJvY2Vzc2VkOiBmYWxzZSxcbiAgICBtYW51YWxFbmRUaW1lOiBmYWxzZSxcbiAgICByZW5kZXJFbmRUaW1lOiBudWxsLFxuICAgIHJhdzogeyBkYXRhIH0sXG4gICAgdGFzazogZGVzY3IsXG4gICAgY2xhc3NlczogW11cbiAgfTtcbiAgY29uc3QgdGFza0luZm8gPSBwYXJzZURhdGEobGFzdFRhc2tJRCwgZGF0YSk7XG4gIHJhd1Rhc2sucmF3LnN0YXJ0VGltZSA9IHRhc2tJbmZvLnN0YXJ0VGltZTtcbiAgcmF3VGFzay5yYXcuZW5kVGltZSA9IHRhc2tJbmZvLmVuZFRpbWU7XG4gIHJhd1Rhc2suaWQgPSB0YXNrSW5mby5pZDtcbiAgcmF3VGFzay5wcmV2VGFza0lkID0gbGFzdFRhc2tJRDtcbiAgcmF3VGFzay5hY3RpdmUgPSB0YXNrSW5mby5hY3RpdmU7XG4gIHJhd1Rhc2suZG9uZSA9IHRhc2tJbmZvLmRvbmU7XG4gIHJhd1Rhc2suY3JpdCA9IHRhc2tJbmZvLmNyaXQ7XG4gIHJhd1Rhc2subWlsZXN0b25lID0gdGFza0luZm8ubWlsZXN0b25lO1xuICByYXdUYXNrLm9yZGVyID0gbGFzdE9yZGVyO1xuICBsYXN0T3JkZXIrKztcbiAgY29uc3QgcG9zID0gcmF3VGFza3MucHVzaChyYXdUYXNrKTtcbiAgbGFzdFRhc2tJRCA9IHJhd1Rhc2suaWQ7XG4gIHRhc2tEYltyYXdUYXNrLmlkXSA9IHBvcyAtIDE7XG59LCBcImFkZFRhc2tcIik7XG52YXIgZmluZFRhc2tCeUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCkge1xuICBjb25zdCBwb3MgPSB0YXNrRGJbaWRdO1xuICByZXR1cm4gcmF3VGFza3NbcG9zXTtcbn0sIFwiZmluZFRhc2tCeUlkXCIpO1xudmFyIGFkZFRhc2tPcmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRlc2NyLCBkYXRhKSB7XG4gIGNvbnN0IG5ld1Rhc2sgPSB7XG4gICAgc2VjdGlvbjogY3VycmVudFNlY3Rpb24sXG4gICAgdHlwZTogY3VycmVudFNlY3Rpb24sXG4gICAgZGVzY3JpcHRpb246IGRlc2NyLFxuICAgIHRhc2s6IGRlc2NyLFxuICAgIGNsYXNzZXM6IFtdXG4gIH07XG4gIGNvbnN0IHRhc2tJbmZvID0gY29tcGlsZURhdGEobGFzdFRhc2ssIGRhdGEpO1xuICBuZXdUYXNrLnN0YXJ0VGltZSA9IHRhc2tJbmZvLnN0YXJ0VGltZTtcbiAgbmV3VGFzay5lbmRUaW1lID0gdGFza0luZm8uZW5kVGltZTtcbiAgbmV3VGFzay5pZCA9IHRhc2tJbmZvLmlkO1xuICBuZXdUYXNrLmFjdGl2ZSA9IHRhc2tJbmZvLmFjdGl2ZTtcbiAgbmV3VGFzay5kb25lID0gdGFza0luZm8uZG9uZTtcbiAgbmV3VGFzay5jcml0ID0gdGFza0luZm8uY3JpdDtcbiAgbmV3VGFzay5taWxlc3RvbmUgPSB0YXNrSW5mby5taWxlc3RvbmU7XG4gIGxhc3RUYXNrID0gbmV3VGFzaztcbiAgdGFza3MucHVzaChuZXdUYXNrKTtcbn0sIFwiYWRkVGFza09yZ1wiKTtcbnZhciBjb21waWxlVGFza3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBjb25zdCBjb21waWxlVGFzayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocG9zKSB7XG4gICAgY29uc3QgdGFzayA9IHJhd1Rhc2tzW3Bvc107XG4gICAgbGV0IHN0YXJ0VGltZSA9IFwiXCI7XG4gICAgc3dpdGNoIChyYXdUYXNrc1twb3NdLnJhdy5zdGFydFRpbWUudHlwZSkge1xuICAgICAgY2FzZSBcInByZXZUYXNrRW5kXCI6IHtcbiAgICAgICAgY29uc3QgcHJldlRhc2sgPSBmaW5kVGFza0J5SWQodGFzay5wcmV2VGFza0lkKTtcbiAgICAgICAgdGFzay5zdGFydFRpbWUgPSBwcmV2VGFzay5lbmRUaW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJnZXRTdGFydERhdGVcIjpcbiAgICAgICAgc3RhcnRUaW1lID0gZ2V0U3RhcnREYXRlKHZvaWQgMCwgZGF0ZUZvcm1hdCwgcmF3VGFza3NbcG9zXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSk7XG4gICAgICAgIGlmIChzdGFydFRpbWUpIHtcbiAgICAgICAgICByYXdUYXNrc1twb3NdLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJhd1Rhc2tzW3Bvc10uc3RhcnRUaW1lKSB7XG4gICAgICByYXdUYXNrc1twb3NdLmVuZFRpbWUgPSBnZXRFbmREYXRlKFxuICAgICAgICByYXdUYXNrc1twb3NdLnN0YXJ0VGltZSxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgcmF3VGFza3NbcG9zXS5yYXcuZW5kVGltZS5kYXRhLFxuICAgICAgICBpbmNsdXNpdmVFbmREYXRlc1xuICAgICAgKTtcbiAgICAgIGlmIChyYXdUYXNrc1twb3NdLmVuZFRpbWUpIHtcbiAgICAgICAgcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICByYXdUYXNrc1twb3NdLm1hbnVhbEVuZFRpbWUgPSBkYXlqcyhcbiAgICAgICAgICByYXdUYXNrc1twb3NdLnJhdy5lbmRUaW1lLmRhdGEsXG4gICAgICAgICAgXCJZWVlZLU1NLUREXCIsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApLmlzVmFsaWQoKTtcbiAgICAgICAgY2hlY2tUYXNrRGF0ZXMocmF3VGFza3NbcG9zXSwgZGF0ZUZvcm1hdCwgZXhjbHVkZXMsIGluY2x1ZGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJhd1Rhc2tzW3Bvc10ucHJvY2Vzc2VkO1xuICB9LCBcImNvbXBpbGVUYXNrXCIpO1xuICBsZXQgYWxsUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgZm9yIChjb25zdCBbaSwgcmF3VGFza10gb2YgcmF3VGFza3MuZW50cmllcygpKSB7XG4gICAgY29tcGlsZVRhc2soaSk7XG4gICAgYWxsUHJvY2Vzc2VkID0gYWxsUHJvY2Vzc2VkICYmIHJhd1Rhc2sucHJvY2Vzc2VkO1xuICB9XG4gIHJldHVybiBhbGxQcm9jZXNzZWQ7XG59LCBcImNvbXBpbGVUYXNrc1wiKTtcbnZhciBzZXRMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIF9saW5rU3RyKSB7XG4gIGxldCBsaW5rU3RyID0gX2xpbmtTdHI7XG4gIGlmIChnZXRDb25maWcoKS5zZWN1cml0eUxldmVsICE9PSBcImxvb3NlXCIpIHtcbiAgICBsaW5rU3RyID0gc2FuaXRpemVVcmwoX2xpbmtTdHIpO1xuICB9XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGxldCByYXdUYXNrID0gZmluZFRhc2tCeUlkKGlkKTtcbiAgICBpZiAocmF3VGFzayAhPT0gdm9pZCAwKSB7XG4gICAgICBwdXNoRnVuKGlkLCAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGxpbmtTdHIsIFwiX3NlbGZcIik7XG4gICAgICB9KTtcbiAgICAgIGxpbmtzLnNldChpZCwgbGlua1N0cik7XG4gICAgfVxuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0TGlua1wiKTtcbnZhciBzZXRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBjbGFzc05hbWUpIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgbGV0IHJhd1Rhc2sgPSBmaW5kVGFza0J5SWQoaWQpO1xuICAgIGlmIChyYXdUYXNrICE9PSB2b2lkIDApIHtcbiAgICAgIHJhd1Rhc2suY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0Q2xhc3NcIik7XG52YXIgc2V0Q2xpY2tGdW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZiAoZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbk5hbWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgYXJnTGlzdCA9IFtdO1xuICBpZiAodHlwZW9mIGZ1bmN0aW9uQXJncyA9PT0gXCJzdHJpbmdcIikge1xuICAgIGFyZ0xpc3QgPSBmdW5jdGlvbkFyZ3Muc3BsaXQoLywoPz0oPzooPzpbXlwiXSpcIil7Mn0pKlteXCJdKiQpLyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaXRlbSA9IGFyZ0xpc3RbaV0udHJpbSgpO1xuICAgICAgaWYgKGl0ZW0uc3RhcnRzV2l0aCgnXCInKSAmJiBpdGVtLmVuZHNXaXRoKCdcIicpKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtLnN1YnN0cigxLCBpdGVtLmxlbmd0aCAtIDIpO1xuICAgICAgfVxuICAgICAgYXJnTGlzdFtpXSA9IGl0ZW07XG4gICAgfVxuICB9XG4gIGlmIChhcmdMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGFyZ0xpc3QucHVzaChpZCk7XG4gIH1cbiAgbGV0IHJhd1Rhc2sgPSBmaW5kVGFza0J5SWQoaWQpO1xuICBpZiAocmF3VGFzayAhPT0gdm9pZCAwKSB7XG4gICAgcHVzaEZ1bihpZCwgKCkgPT4ge1xuICAgICAgdXRpbHNfZGVmYXVsdC5ydW5GdW5jKGZ1bmN0aW9uTmFtZSwgLi4uYXJnTGlzdCk7XG4gICAgfSk7XG4gIH1cbn0sIFwic2V0Q2xpY2tGdW5cIik7XG52YXIgcHVzaEZ1biA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQsIGNhbGxiYWNrRnVuY3Rpb24pIHtcbiAgZnVucy5wdXNoKFxuICAgIGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWR9XCJdYCk7XG4gICAgICBpZiAoZWxlbSAhPT0gbnVsbCkge1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZH0tdGV4dFwiXWApO1xuICAgICAgaWYgKGVsZW0gIT09IG51bGwpIHtcbiAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59LCBcInB1c2hGdW5cIik7XG52YXIgc2V0Q2xpY2tFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBzZXRDbGlja0Z1bihpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0Q2xpY2tFdmVudFwiKTtcbnZhciBiaW5kRnVuY3Rpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtZW50KSB7XG4gIGZ1bnMuZm9yRWFjaChmdW5jdGlvbihmdW4pIHtcbiAgICBmdW4oZWxlbWVudCk7XG4gIH0pO1xufSwgXCJiaW5kRnVuY3Rpb25zXCIpO1xudmFyIGdhbnR0RGJfZGVmYXVsdCA9IHtcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLmdhbnR0LCBcImdldENvbmZpZ1wiKSxcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0RGF0ZUZvcm1hdCxcbiAgZ2V0RGF0ZUZvcm1hdCxcbiAgZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMsXG4gIGVuZERhdGVzQXJlSW5jbHVzaXZlLFxuICBlbmFibGVUb3BBeGlzLFxuICB0b3BBeGlzRW5hYmxlZCxcbiAgc2V0QXhpc0Zvcm1hdCxcbiAgZ2V0QXhpc0Zvcm1hdCxcbiAgc2V0VGlja0ludGVydmFsLFxuICBnZXRUaWNrSW50ZXJ2YWwsXG4gIHNldFRvZGF5TWFya2VyLFxuICBnZXRUb2RheU1hcmtlcixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0RGlzcGxheU1vZGUsXG4gIGdldERpc3BsYXlNb2RlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGFkZFNlY3Rpb24sXG4gIGdldFNlY3Rpb25zLFxuICBnZXRUYXNrcyxcbiAgYWRkVGFzayxcbiAgZmluZFRhc2tCeUlkLFxuICBhZGRUYXNrT3JnLFxuICBzZXRJbmNsdWRlcyxcbiAgZ2V0SW5jbHVkZXMsXG4gIHNldEV4Y2x1ZGVzLFxuICBnZXRFeGNsdWRlcyxcbiAgc2V0Q2xpY2tFdmVudCxcbiAgc2V0TGluayxcbiAgZ2V0TGlua3MsXG4gIGJpbmRGdW5jdGlvbnMsXG4gIHBhcnNlRHVyYXRpb24sXG4gIGlzSW52YWxpZERhdGUsXG4gIHNldFdlZWtkYXksXG4gIGdldFdlZWtkYXksXG4gIHNldFdlZWtlbmRcbn07XG5mdW5jdGlvbiBnZXRUYXNrVGFncyhkYXRhLCB0YXNrLCB0YWdzMikge1xuICBsZXQgbWF0Y2hGb3VuZCA9IHRydWU7XG4gIHdoaWxlIChtYXRjaEZvdW5kKSB7XG4gICAgbWF0Y2hGb3VuZCA9IGZhbHNlO1xuICAgIHRhZ3MyLmZvckVhY2goZnVuY3Rpb24odCkge1xuICAgICAgY29uc3QgcGF0dGVybiA9IFwiXlxcXFxzKlwiICsgdCArIFwiXFxcXHMqJFwiO1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xuICAgICAgaWYgKGRhdGFbMF0ubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgIHRhc2tbdF0gPSB0cnVlO1xuICAgICAgICBkYXRhLnNoaWZ0KDEpO1xuICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuX19uYW1lKGdldFRhc2tUYWdzLCBcImdldFRhc2tUYWdzXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2FudHQvZ2FudHRSZW5kZXJlci5qc1xuaW1wb3J0IGRheWpzMiBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7XG4gIHNlbGVjdCxcbiAgc2NhbGVUaW1lLFxuICBtaW4sXG4gIG1heCxcbiAgc2NhbGVMaW5lYXIsXG4gIGludGVycG9sYXRlSGNsLFxuICBheGlzQm90dG9tLFxuICBheGlzVG9wLFxuICB0aW1lRm9ybWF0LFxuICB0aW1lTWlsbGlzZWNvbmQsXG4gIHRpbWVTZWNvbmQsXG4gIHRpbWVNaW51dGUsXG4gIHRpbWVIb3VyLFxuICB0aW1lRGF5LFxuICB0aW1lTW9uZGF5LFxuICB0aW1lVHVlc2RheSxcbiAgdGltZVdlZG5lc2RheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lRnJpZGF5LFxuICB0aW1lU2F0dXJkYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb250aFxufSBmcm9tIFwiZDNcIjtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgbG9nLmRlYnVnKFwiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbFwiKTtcbn0sIFwic2V0Q29uZlwiKTtcbnZhciBtYXBXZWVrZGF5VG9UaW1lRnVuY3Rpb24gPSB7XG4gIG1vbmRheTogdGltZU1vbmRheSxcbiAgdHVlc2RheTogdGltZVR1ZXNkYXksXG4gIHdlZG5lc2RheTogdGltZVdlZG5lc2RheSxcbiAgdGh1cnNkYXk6IHRpbWVUaHVyc2RheSxcbiAgZnJpZGF5OiB0aW1lRnJpZGF5LFxuICBzYXR1cmRheTogdGltZVNhdHVyZGF5LFxuICBzdW5kYXk6IHRpbWVTdW5kYXlcbn07XG52YXIgZ2V0TWF4SW50ZXJzZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRhc2tzMiwgb3JkZXJPZmZzZXQpID0+IHtcbiAgbGV0IHRpbWVsaW5lID0gWy4uLnRhc2tzMl0ubWFwKCgpID0+IC1JbmZpbml0eSk7XG4gIGxldCBzb3J0ZWQgPSBbLi4udGFza3MyXS5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0VGltZSAtIGIuc3RhcnRUaW1lIHx8IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgbGV0IG1heEludGVyc2VjdGlvbnMgPSAwO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc29ydGVkKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aW1lbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGVsZW1lbnQuc3RhcnRUaW1lID49IHRpbWVsaW5lW2pdKSB7XG4gICAgICAgIHRpbWVsaW5lW2pdID0gZWxlbWVudC5lbmRUaW1lO1xuICAgICAgICBlbGVtZW50Lm9yZGVyID0gaiArIG9yZGVyT2Zmc2V0O1xuICAgICAgICBpZiAoaiA+IG1heEludGVyc2VjdGlvbnMpIHtcbiAgICAgICAgICBtYXhJbnRlcnNlY3Rpb25zID0gajtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heEludGVyc2VjdGlvbnM7XG59LCBcImdldE1heEludGVyc2VjdGlvbnNcIik7XG52YXIgdztcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25zdCBjb25mID0gZ2V0Q29uZmlnKCkuZ2FudHQ7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBkb2MgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50IDogZG9jdW1lbnQ7XG4gIGNvbnN0IGVsZW0gPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICB3ID0gZWxlbS5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICBpZiAodyA9PT0gdm9pZCAwKSB7XG4gICAgdyA9IDEyMDA7XG4gIH1cbiAgaWYgKGNvbmYudXNlV2lkdGggIT09IHZvaWQgMCkge1xuICAgIHcgPSBjb25mLnVzZVdpZHRoO1xuICB9XG4gIGNvbnN0IHRhc2tBcnJheSA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgbGV0IGNhdGVnb3JpZXMgPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRhc2tBcnJheSkge1xuICAgIGNhdGVnb3JpZXMucHVzaChlbGVtZW50LnR5cGUpO1xuICB9XG4gIGNhdGVnb3JpZXMgPSBjaGVja1VuaXF1ZShjYXRlZ29yaWVzKTtcbiAgY29uc3QgY2F0ZWdvcnlIZWlnaHRzID0ge307XG4gIGxldCBoID0gMiAqIGNvbmYudG9wUGFkZGluZztcbiAgaWYgKGRpYWdPYmouZGIuZ2V0RGlzcGxheU1vZGUoKSA9PT0gXCJjb21wYWN0XCIgfHwgY29uZi5kaXNwbGF5TW9kZSA9PT0gXCJjb21wYWN0XCIpIHtcbiAgICBjb25zdCBjYXRlZ29yeUVsZW1lbnRzID0ge307XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRhc2tBcnJheSkge1xuICAgICAgaWYgKGNhdGVnb3J5RWxlbWVudHNbZWxlbWVudC5zZWN0aW9uXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNhdGVnb3J5RWxlbWVudHNbZWxlbWVudC5zZWN0aW9uXSA9IFtlbGVtZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhdGVnb3J5RWxlbWVudHNbZWxlbWVudC5zZWN0aW9uXS5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaW50ZXJzZWN0aW9ucyA9IDA7XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBPYmplY3Qua2V5cyhjYXRlZ29yeUVsZW1lbnRzKSkge1xuICAgICAgY29uc3QgY2F0ZWdvcnlIZWlnaHQgPSBnZXRNYXhJbnRlcnNlY3Rpb25zKGNhdGVnb3J5RWxlbWVudHNbY2F0ZWdvcnldLCBpbnRlcnNlY3Rpb25zKSArIDE7XG4gICAgICBpbnRlcnNlY3Rpb25zICs9IGNhdGVnb3J5SGVpZ2h0O1xuICAgICAgaCArPSBjYXRlZ29yeUhlaWdodCAqIChjb25mLmJhckhlaWdodCArIGNvbmYuYmFyR2FwKTtcbiAgICAgIGNhdGVnb3J5SGVpZ2h0c1tjYXRlZ29yeV0gPSBjYXRlZ29yeUhlaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaCArPSB0YXNrQXJyYXkubGVuZ3RoICogKGNvbmYuYmFySGVpZ2h0ICsgY29uZi5iYXJHYXApO1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgICAgY2F0ZWdvcnlIZWlnaHRzW2NhdGVnb3J5XSA9IHRhc2tBcnJheS5maWx0ZXIoKHRhc2spID0+IHRhc2sudHlwZSA9PT0gY2F0ZWdvcnkpLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgZWxlbS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIFwiICsgdyArIFwiIFwiICsgaCk7XG4gIGNvbnN0IHN2ZyA9IHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBjb25zdCB0aW1lU2NhbGUgPSBzY2FsZVRpbWUoKS5kb21haW4oW1xuICAgIG1pbih0YXNrQXJyYXksIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLnN0YXJ0VGltZTtcbiAgICB9KSxcbiAgICBtYXgodGFza0FycmF5LCBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC5lbmRUaW1lO1xuICAgIH0pXG4gIF0pLnJhbmdlUm91bmQoWzAsIHcgLSBjb25mLmxlZnRQYWRkaW5nIC0gY29uZi5yaWdodFBhZGRpbmddKTtcbiAgZnVuY3Rpb24gdGFza0NvbXBhcmUoYSwgYikge1xuICAgIGNvbnN0IHRhc2tBID0gYS5zdGFydFRpbWU7XG4gICAgY29uc3QgdGFza0IgPSBiLnN0YXJ0VGltZTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAodGFza0EgPiB0YXNrQikge1xuICAgICAgcmVzdWx0ID0gMTtcbiAgICB9IGVsc2UgaWYgKHRhc2tBIDwgdGFza0IpIHtcbiAgICAgIHJlc3VsdCA9IC0xO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIF9fbmFtZSh0YXNrQ29tcGFyZSwgXCJ0YXNrQ29tcGFyZVwiKTtcbiAgdGFza0FycmF5LnNvcnQodGFza0NvbXBhcmUpO1xuICBtYWtlR2FudHQodGFza0FycmF5LCB3LCBoKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGgsIHcsIGNvbmYudXNlTWF4V2lkdGgpO1xuICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLmF0dHIoXCJ4XCIsIHcgLyAyKS5hdHRyKFwieVwiLCBjb25mLnRpdGxlVG9wTWFyZ2luKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZVRleHRcIik7XG4gIGZ1bmN0aW9uIG1ha2VHYW50dCh0YXNrczIsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkge1xuICAgIGNvbnN0IGJhckhlaWdodCA9IGNvbmYuYmFySGVpZ2h0O1xuICAgIGNvbnN0IGdhcCA9IGJhckhlaWdodCArIGNvbmYuYmFyR2FwO1xuICAgIGNvbnN0IHRvcFBhZGRpbmcgPSBjb25mLnRvcFBhZGRpbmc7XG4gICAgY29uc3QgbGVmdFBhZGRpbmcgPSBjb25mLmxlZnRQYWRkaW5nO1xuICAgIGNvbnN0IGNvbG9yU2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbihbMCwgY2F0ZWdvcmllcy5sZW5ndGhdKS5yYW5nZShbXCIjMDBCOUZBXCIsIFwiI0Y5NTAwMlwiXSkuaW50ZXJwb2xhdGUoaW50ZXJwb2xhdGVIY2wpO1xuICAgIGRyYXdFeGNsdWRlRGF5cyhcbiAgICAgIGdhcCxcbiAgICAgIHRvcFBhZGRpbmcsXG4gICAgICBsZWZ0UGFkZGluZyxcbiAgICAgIHBhZ2VXaWR0aCxcbiAgICAgIHBhZ2VIZWlnaHQsXG4gICAgICB0YXNrczIsXG4gICAgICBkaWFnT2JqLmRiLmdldEV4Y2x1ZGVzKCksXG4gICAgICBkaWFnT2JqLmRiLmdldEluY2x1ZGVzKClcbiAgICApO1xuICAgIG1ha2VHcmlkKGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpO1xuICAgIGRyYXdSZWN0cyh0YXNrczIsIGdhcCwgdG9wUGFkZGluZywgbGVmdFBhZGRpbmcsIGJhckhlaWdodCwgY29sb3JTY2FsZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTtcbiAgICB2ZXJ0TGFiZWxzKGdhcCwgdG9wUGFkZGluZywgbGVmdFBhZGRpbmcsIGJhckhlaWdodCwgY29sb3JTY2FsZSk7XG4gICAgZHJhd1RvZGF5KGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpO1xuICB9XG4gIF9fbmFtZShtYWtlR2FudHQsIFwibWFrZUdhbnR0XCIpO1xuICBmdW5jdGlvbiBkcmF3UmVjdHModGhlQXJyYXksIHRoZUdhcCwgdGhlVG9wUGFkLCB0aGVTaWRlUGFkLCB0aGVCYXJIZWlnaHQsIHRoZUNvbG9yU2NhbGUsIHcyKSB7XG4gICAgY29uc3QgdW5pcXVlVGFza09yZGVySWRzID0gWy4uLm5ldyBTZXQodGhlQXJyYXkubWFwKChpdGVtKSA9PiBpdGVtLm9yZGVyKSldO1xuICAgIGNvbnN0IHVuaXF1ZVRhc2tzID0gdW5pcXVlVGFza09yZGVySWRzLm1hcCgoaWQyKSA9PiB0aGVBcnJheS5maW5kKChpdGVtKSA9PiBpdGVtLm9yZGVyID09PSBpZDIpKTtcbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEodW5pcXVlVGFza3MpLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpID0gZC5vcmRlcjtcbiAgICAgIHJldHVybiBpICogdGhlR2FwICsgdGhlVG9wUGFkIC0gMjtcbiAgICB9KS5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdzIgLSBjb25mLnJpZ2h0UGFkZGluZyAvIDI7XG4gICAgfSkuYXR0cihcImhlaWdodFwiLCB0aGVHYXApLmF0dHIoXCJjbGFzc1wiLCBmdW5jdGlvbihkKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpLCBjYXRlZ29yeV0gb2YgY2F0ZWdvcmllcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGQudHlwZSA9PT0gY2F0ZWdvcnkpIHtcbiAgICAgICAgICByZXR1cm4gXCJzZWN0aW9uIHNlY3Rpb25cIiArIGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInNlY3Rpb24gc2VjdGlvbjBcIjtcbiAgICB9KTtcbiAgICBjb25zdCByZWN0YW5nbGVzID0gc3ZnLmFwcGVuZChcImdcIikuc2VsZWN0QWxsKFwicmVjdFwiKS5kYXRhKHRoZUFycmF5KS5lbnRlcigpO1xuICAgIGNvbnN0IGxpbmtzMiA9IGRpYWdPYmouZGIuZ2V0TGlua3MoKTtcbiAgICByZWN0YW5nbGVzLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLmlkO1xuICAgIH0pLmF0dHIoXCJyeFwiLCAzKS5hdHRyKFwicnlcIiwgMykuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIHJldHVybiB0aW1lU2NhbGUoZC5zdGFydFRpbWUpICsgdGhlU2lkZVBhZCArIDAuNSAqICh0aW1lU2NhbGUoZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkpIC0gMC41ICogdGhlQmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkgKyB0aGVTaWRlUGFkO1xuICAgIH0pLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGkgPSBkLm9yZGVyO1xuICAgICAgcmV0dXJuIGkgKiB0aGVHYXAgKyB0aGVUb3BQYWQ7XG4gICAgfSkuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGlmIChkLm1pbGVzdG9uZSkge1xuICAgICAgICByZXR1cm4gdGhlQmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRpbWVTY2FsZShkLnJlbmRlckVuZFRpbWUgfHwgZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSk7XG4gICAgfSkuYXR0cihcImhlaWdodFwiLCB0aGVCYXJIZWlnaHQpLmF0dHIoXCJ0cmFuc2Zvcm0tb3JpZ2luXCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGkgPSBkLm9yZGVyO1xuICAgICAgcmV0dXJuICh0aW1lU2NhbGUoZC5zdGFydFRpbWUpICsgdGhlU2lkZVBhZCArIDAuNSAqICh0aW1lU2NhbGUoZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkpKS50b1N0cmluZygpICsgXCJweCBcIiArIChpICogdGhlR2FwICsgdGhlVG9wUGFkICsgMC41ICogdGhlQmFySGVpZ2h0KS50b1N0cmluZygpICsgXCJweFwiO1xuICAgIH0pLmF0dHIoXCJjbGFzc1wiLCBmdW5jdGlvbihkKSB7XG4gICAgICBjb25zdCByZXMgPSBcInRhc2tcIjtcbiAgICAgIGxldCBjbGFzc1N0ciA9IFwiXCI7XG4gICAgICBpZiAoZC5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2xhc3NTdHIgPSBkLmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICB9XG4gICAgICBsZXQgc2VjTnVtID0gMDtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZC50eXBlID09PSBjYXRlZ29yeSkge1xuICAgICAgICAgIHNlY051bSA9IGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCB0YXNrQ2xhc3MgPSBcIlwiO1xuICAgICAgaWYgKGQuYWN0aXZlKSB7XG4gICAgICAgIGlmIChkLmNyaXQpIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgKz0gXCIgYWN0aXZlQ3JpdFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhc2tDbGFzcyA9IFwiIGFjdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGQuZG9uZSkge1xuICAgICAgICBpZiAoZC5jcml0KSB7XG4gICAgICAgICAgdGFza0NsYXNzID0gXCIgZG9uZUNyaXRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgPSBcIiBkb25lXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkLmNyaXQpIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgKz0gXCIgY3JpdFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFza0NsYXNzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0YXNrQ2xhc3MgPSBcIiB0YXNrXCI7XG4gICAgICB9XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgdGFza0NsYXNzID0gXCIgbWlsZXN0b25lIFwiICsgdGFza0NsYXNzO1xuICAgICAgfVxuICAgICAgdGFza0NsYXNzICs9IHNlY051bTtcbiAgICAgIHRhc2tDbGFzcyArPSBcIiBcIiArIGNsYXNzU3RyO1xuICAgICAgcmV0dXJuIHJlcyArIHRhc2tDbGFzcztcbiAgICB9KTtcbiAgICByZWN0YW5nbGVzLmFwcGVuZChcInRleHRcIikuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLmlkICsgXCItdGV4dFwiO1xuICAgIH0pLnRleHQoZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQudGFzaztcbiAgICB9KS5hdHRyKFwiZm9udC1zaXplXCIsIGNvbmYuZm9udFNpemUpLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGxldCBzdGFydFggPSB0aW1lU2NhbGUoZC5zdGFydFRpbWUpO1xuICAgICAgbGV0IGVuZFggPSB0aW1lU2NhbGUoZC5yZW5kZXJFbmRUaW1lIHx8IGQuZW5kVGltZSk7XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgc3RhcnRYICs9IDAuNSAqICh0aW1lU2NhbGUoZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkpIC0gMC41ICogdGhlQmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIGVuZFggPSBzdGFydFggKyB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSB0aGlzLmdldEJCb3goKS53aWR0aDtcbiAgICAgIGlmICh0ZXh0V2lkdGggPiBlbmRYIC0gc3RhcnRYKSB7XG4gICAgICAgIGlmIChlbmRYICsgdGV4dFdpZHRoICsgMS41ICogY29uZi5sZWZ0UGFkZGluZyA+IHcyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXJ0WCArIHRoZVNpZGVQYWQgLSA1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlbmRYICsgdGhlU2lkZVBhZCArIDU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoZW5kWCAtIHN0YXJ0WCkgLyAyICsgc3RhcnRYICsgdGhlU2lkZVBhZDtcbiAgICAgIH1cbiAgICB9KS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpID0gZC5vcmRlcjtcbiAgICAgIHJldHVybiBpICogdGhlR2FwICsgY29uZi5iYXJIZWlnaHQgLyAyICsgKGNvbmYuZm9udFNpemUgLyAyIC0gMikgKyB0aGVUb3BQYWQ7XG4gICAgfSkuYXR0cihcInRleHQtaGVpZ2h0XCIsIHRoZUJhckhlaWdodCkuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0WCA9IHRpbWVTY2FsZShkLnN0YXJ0VGltZSk7XG4gICAgICBsZXQgZW5kWCA9IHRpbWVTY2FsZShkLmVuZFRpbWUpO1xuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIGVuZFggPSBzdGFydFggKyB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSB0aGlzLmdldEJCb3goKS53aWR0aDtcbiAgICAgIGxldCBjbGFzc1N0ciA9IFwiXCI7XG4gICAgICBpZiAoZC5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2xhc3NTdHIgPSBkLmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICB9XG4gICAgICBsZXQgc2VjTnVtID0gMDtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZC50eXBlID09PSBjYXRlZ29yeSkge1xuICAgICAgICAgIHNlY051bSA9IGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCB0YXNrVHlwZSA9IFwiXCI7XG4gICAgICBpZiAoZC5hY3RpdmUpIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tUeXBlID0gXCJhY3RpdmVDcml0VGV4dFwiICsgc2VjTnVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhc2tUeXBlID0gXCJhY3RpdmVUZXh0XCIgKyBzZWNOdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkLmRvbmUpIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tUeXBlID0gdGFza1R5cGUgKyBcIiBkb25lQ3JpdFRleHRcIiArIHNlY051bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXNrVHlwZSA9IHRhc2tUeXBlICsgXCIgZG9uZVRleHRcIiArIHNlY051bTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tUeXBlID0gdGFza1R5cGUgKyBcIiBjcml0VGV4dFwiICsgc2VjTnVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgdGFza1R5cGUgKz0gXCIgbWlsZXN0b25lVGV4dFwiO1xuICAgICAgfVxuICAgICAgaWYgKHRleHRXaWR0aCA+IGVuZFggLSBzdGFydFgpIHtcbiAgICAgICAgaWYgKGVuZFggKyB0ZXh0V2lkdGggKyAxLjUgKiBjb25mLmxlZnRQYWRkaW5nID4gdzIpIHtcbiAgICAgICAgICByZXR1cm4gY2xhc3NTdHIgKyBcIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZVwiICsgc2VjTnVtICsgXCIgXCIgKyB0YXNrVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2xhc3NTdHIgKyBcIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGVcIiArIHNlY051bSArIFwiIFwiICsgdGFza1R5cGUgKyBcIiB3aWR0aC1cIiArIHRleHRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzU3RyICsgXCIgdGFza1RleHQgdGFza1RleHRcIiArIHNlY051bSArIFwiIFwiICsgdGFza1R5cGUgKyBcIiB3aWR0aC1cIiArIHRleHRXaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZWN1cml0eUxldmVsMiA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gICAgaWYgKHNlY3VyaXR5TGV2ZWwyID09PSBcInNhbmRib3hcIikge1xuICAgICAgbGV0IHNhbmRib3hFbGVtZW50MjtcbiAgICAgIHNhbmRib3hFbGVtZW50MiA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gICAgICBjb25zdCBkb2MyID0gc2FuZGJveEVsZW1lbnQyLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O1xuICAgICAgcmVjdGFuZ2xlcy5maWx0ZXIoZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gbGlua3MyLmhhcyhkLmlkKTtcbiAgICAgIH0pLmVhY2goZnVuY3Rpb24obykge1xuICAgICAgICB2YXIgdGFza1JlY3QgPSBkb2MyLnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyBvLmlkKTtcbiAgICAgICAgdmFyIHRhc2tUZXh0ID0gZG9jMi5xdWVyeVNlbGVjdG9yKFwiI1wiICsgby5pZCArIFwiLXRleHRcIik7XG4gICAgICAgIGNvbnN0IG9sZFBhcmVudCA9IHRhc2tSZWN0LnBhcmVudE5vZGU7XG4gICAgICAgIHZhciBMaW5rID0gZG9jMi5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgTGluay5zZXRBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIsIGxpbmtzMi5nZXQoby5pZCkpO1xuICAgICAgICBMaW5rLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBcIl90b3BcIik7XG4gICAgICAgIG9sZFBhcmVudC5hcHBlbmRDaGlsZChMaW5rKTtcbiAgICAgICAgTGluay5hcHBlbmRDaGlsZCh0YXNrUmVjdCk7XG4gICAgICAgIExpbmsuYXBwZW5kQ2hpbGQodGFza1RleHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF9fbmFtZShkcmF3UmVjdHMsIFwiZHJhd1JlY3RzXCIpO1xuICBmdW5jdGlvbiBkcmF3RXhjbHVkZURheXModGhlR2FwLCB0aGVUb3BQYWQsIHRoZVNpZGVQYWQsIHcyLCBoMiwgdGFza3MyLCBleGNsdWRlczIsIGluY2x1ZGVzMikge1xuICAgIGlmIChleGNsdWRlczIubGVuZ3RoID09PSAwICYmIGluY2x1ZGVzMi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG1pblRpbWU7XG4gICAgbGV0IG1heFRpbWU7XG4gICAgZm9yIChjb25zdCB7IHN0YXJ0VGltZSwgZW5kVGltZSB9IG9mIHRhc2tzMikge1xuICAgICAgaWYgKG1pblRpbWUgPT09IHZvaWQgMCB8fCBzdGFydFRpbWUgPCBtaW5UaW1lKSB7XG4gICAgICAgIG1pblRpbWUgPSBzdGFydFRpbWU7XG4gICAgICB9XG4gICAgICBpZiAobWF4VGltZSA9PT0gdm9pZCAwIHx8IGVuZFRpbWUgPiBtYXhUaW1lKSB7XG4gICAgICAgIG1heFRpbWUgPSBlbmRUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1pblRpbWUgfHwgIW1heFRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRheWpzMihtYXhUaW1lKS5kaWZmKGRheWpzMihtaW5UaW1lKSwgXCJ5ZWFyXCIpID4gNSkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdGltZSBpcyBtb3JlIHRoYW4gNSB5ZWFycy4gVGhpcyB3aWxsIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy4gU2tpcHBpbmcgZHJhd2luZyBleGNsdWRlIGRheXMuXCJcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGVGb3JtYXQyID0gZGlhZ09iai5kYi5nZXREYXRlRm9ybWF0KCk7XG4gICAgY29uc3QgZXhjbHVkZVJhbmdlcyA9IFtdO1xuICAgIGxldCByYW5nZSA9IG51bGw7XG4gICAgbGV0IGQgPSBkYXlqczIobWluVGltZSk7XG4gICAgd2hpbGUgKGQudmFsdWVPZigpIDw9IG1heFRpbWUpIHtcbiAgICAgIGlmIChkaWFnT2JqLmRiLmlzSW52YWxpZERhdGUoZCwgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKSkge1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICBzdGFydDogZCxcbiAgICAgICAgICAgIGVuZDogZFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmFuZ2UuZW5kID0gZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgZXhjbHVkZVJhbmdlcy5wdXNoKHJhbmdlKTtcbiAgICAgICAgICByYW5nZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGQgPSBkLmFkZCgxLCBcImRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlY3RhbmdsZXMgPSBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEoZXhjbHVkZVJhbmdlcykuZW50ZXIoKTtcbiAgICByZWN0YW5nbGVzLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQyKSB7XG4gICAgICByZXR1cm4gXCJleGNsdWRlLVwiICsgZDIuc3RhcnQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICB9KS5hdHRyKFwieFwiLCBmdW5jdGlvbihkMikge1xuICAgICAgcmV0dXJuIHRpbWVTY2FsZShkMi5zdGFydCkgKyB0aGVTaWRlUGFkO1xuICAgIH0pLmF0dHIoXCJ5XCIsIGNvbmYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbihkMikge1xuICAgICAgY29uc3QgcmVuZGVyRW5kID0gZDIuZW5kLmFkZCgxLCBcImRheVwiKTtcbiAgICAgIHJldHVybiB0aW1lU2NhbGUocmVuZGVyRW5kKSAtIHRpbWVTY2FsZShkMi5zdGFydCk7XG4gICAgfSkuYXR0cihcImhlaWdodFwiLCBoMiAtIHRoZVRvcFBhZCAtIGNvbmYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoXCJ0cmFuc2Zvcm0tb3JpZ2luXCIsIGZ1bmN0aW9uKGQyLCBpKSB7XG4gICAgICByZXR1cm4gKHRpbWVTY2FsZShkMi5zdGFydCkgKyB0aGVTaWRlUGFkICsgMC41ICogKHRpbWVTY2FsZShkMi5lbmQpIC0gdGltZVNjYWxlKGQyLnN0YXJ0KSkpLnRvU3RyaW5nKCkgKyBcInB4IFwiICsgKGkgKiB0aGVHYXAgKyAwLjUgKiBoMikudG9TdHJpbmcoKSArIFwicHhcIjtcbiAgICB9KS5hdHRyKFwiY2xhc3NcIiwgXCJleGNsdWRlLXJhbmdlXCIpO1xuICB9XG4gIF9fbmFtZShkcmF3RXhjbHVkZURheXMsIFwiZHJhd0V4Y2x1ZGVEYXlzXCIpO1xuICBmdW5jdGlvbiBtYWtlR3JpZCh0aGVTaWRlUGFkLCB0aGVUb3BQYWQsIHcyLCBoMikge1xuICAgIGxldCBib3R0b21YQXhpcyA9IGF4aXNCb3R0b20odGltZVNjYWxlKS50aWNrU2l6ZSgtaDIgKyB0aGVUb3BQYWQgKyBjb25mLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KHRpbWVGb3JtYXQoZGlhZ09iai5kYi5nZXRBeGlzRm9ybWF0KCkgfHwgY29uZi5heGlzRm9ybWF0IHx8IFwiJVktJW0tJWRcIikpO1xuICAgIGNvbnN0IHJlVGlja0ludGVydmFsID0gL14oWzEtOV1cXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC87XG4gICAgY29uc3QgcmVzdWx0VGlja0ludGVydmFsID0gcmVUaWNrSW50ZXJ2YWwuZXhlYyhcbiAgICAgIGRpYWdPYmouZGIuZ2V0VGlja0ludGVydmFsKCkgfHwgY29uZi50aWNrSW50ZXJ2YWxcbiAgICApO1xuICAgIGlmIChyZXN1bHRUaWNrSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGV2ZXJ5ID0gcmVzdWx0VGlja0ludGVydmFsWzFdO1xuICAgICAgY29uc3QgaW50ZXJ2YWwgPSByZXN1bHRUaWNrSW50ZXJ2YWxbMl07XG4gICAgICBjb25zdCB3ZWVrZGF5MiA9IGRpYWdPYmouZGIuZ2V0V2Vla2RheSgpIHx8IGNvbmYud2Vla2RheTtcbiAgICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kXCI6XG4gICAgICAgICAgYm90dG9tWEF4aXMudGlja3ModGltZU1pbGxpc2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZWNvbmRcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lU2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lTWludXRlLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgYm90dG9tWEF4aXMudGlja3ModGltZUhvdXIuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRheVwiOlxuICAgICAgICAgIGJvdHRvbVhBeGlzLnRpY2tzKHRpbWVEYXkuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyhtYXBXZWVrZGF5VG9UaW1lRnVuY3Rpb25bd2Vla2RheTJdLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgIGJvdHRvbVhBeGlzLnRpY2tzKHRpbWVNb250aC5ldmVyeShldmVyeSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJncmlkXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGVTaWRlUGFkICsgXCIsIFwiICsgKGgyIC0gNTApICsgXCIpXCIpLmNhbGwoYm90dG9tWEF4aXMpLnNlbGVjdEFsbChcInRleHRcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZmlsbFwiLCBcIiMwMDBcIikuYXR0cihcInN0cm9rZVwiLCBcIm5vbmVcIikuYXR0cihcImZvbnQtc2l6ZVwiLCAxMCkuYXR0cihcImR5XCIsIFwiMWVtXCIpO1xuICAgIGlmIChkaWFnT2JqLmRiLnRvcEF4aXNFbmFibGVkKCkgfHwgY29uZi50b3BBeGlzKSB7XG4gICAgICBsZXQgdG9wWEF4aXMgPSBheGlzVG9wKHRpbWVTY2FsZSkudGlja1NpemUoLWgyICsgdGhlVG9wUGFkICsgY29uZi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdCh0aW1lRm9ybWF0KGRpYWdPYmouZGIuZ2V0QXhpc0Zvcm1hdCgpIHx8IGNvbmYuYXhpc0Zvcm1hdCB8fCBcIiVZLSVtLSVkXCIpKTtcbiAgICAgIGlmIChyZXN1bHRUaWNrSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZXZlcnkgPSByZXN1bHRUaWNrSW50ZXJ2YWxbMV07XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gcmVzdWx0VGlja0ludGVydmFsWzJdO1xuICAgICAgICBjb25zdCB3ZWVrZGF5MiA9IGRpYWdPYmouZGIuZ2V0V2Vla2RheSgpIHx8IGNvbmYud2Vla2RheTtcbiAgICAgICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgICAgIGNhc2UgXCJtaWxsaXNlY29uZFwiOlxuICAgICAgICAgICAgdG9wWEF4aXMudGlja3ModGltZU1pbGxpc2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwic2Vjb25kXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyh0aW1lU2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwibWludXRlXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyh0aW1lTWludXRlLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiaG91clwiOlxuICAgICAgICAgICAgdG9wWEF4aXMudGlja3ModGltZUhvdXIuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJkYXlcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVEYXkuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ3ZWVrXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyhtYXBXZWVrZGF5VG9UaW1lRnVuY3Rpb25bd2Vla2RheTJdLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVNb250aC5ldmVyeShldmVyeSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImdyaWRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoZVNpZGVQYWQgKyBcIiwgXCIgKyB0aGVUb3BQYWQgKyBcIilcIikuY2FsbCh0b3BYQXhpcykuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJmaWxsXCIsIFwiIzAwMFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwibm9uZVwiKS5hdHRyKFwiZm9udC1zaXplXCIsIDEwKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKG1ha2VHcmlkLCBcIm1ha2VHcmlkXCIpO1xuICBmdW5jdGlvbiB2ZXJ0TGFiZWxzKHRoZUdhcCwgdGhlVG9wUGFkKSB7XG4gICAgbGV0IHByZXZHYXAgPSAwO1xuICAgIGNvbnN0IG51bU9jY3VycmVuY2VzID0gT2JqZWN0LmtleXMoY2F0ZWdvcnlIZWlnaHRzKS5tYXAoKGQpID0+IFtkLCBjYXRlZ29yeUhlaWdodHNbZF1dKTtcbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEobnVtT2NjdXJyZW5jZXMpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKGQpIHtcbiAgICAgIGNvbnN0IHJvd3MgPSBkWzBdLnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICAgIGNvbnN0IGR5ID0gLShyb3dzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGV4dFwiKTtcbiAgICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcImR5XCIsIGR5ICsgXCJlbVwiKTtcbiAgICAgIGZvciAoY29uc3QgW2osIHJvd10gb2Ygcm93cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdHNwYW4gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjEwXCIpO1xuICAgICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0c3Bhbi50ZXh0Q29udGVudCA9IHJvdztcbiAgICAgICAgc3ZnTGFiZWwuYXBwZW5kQ2hpbGQodHNwYW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN2Z0xhYmVsO1xuICAgIH0pLmF0dHIoXCJ4XCIsIDEwKS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgICBwcmV2R2FwICs9IG51bU9jY3VycmVuY2VzW2kgLSAxXVsxXTtcbiAgICAgICAgICByZXR1cm4gZFsxXSAqIHRoZUdhcCAvIDIgKyBwcmV2R2FwICogdGhlR2FwICsgdGhlVG9wUGFkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZFsxXSAqIHRoZUdhcCAvIDIgKyB0aGVUb3BQYWQ7XG4gICAgICB9XG4gICAgfSkuYXR0cihcImZvbnQtc2l6ZVwiLCBjb25mLnNlY3Rpb25Gb250U2l6ZSkuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZFswXSA9PT0gY2F0ZWdvcnkpIHtcbiAgICAgICAgICByZXR1cm4gXCJzZWN0aW9uVGl0bGUgc2VjdGlvblRpdGxlXCIgKyBpICUgY29uZi5udW1iZXJTZWN0aW9uU3R5bGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzZWN0aW9uVGl0bGVcIjtcbiAgICB9KTtcbiAgfVxuICBfX25hbWUodmVydExhYmVscywgXCJ2ZXJ0TGFiZWxzXCIpO1xuICBmdW5jdGlvbiBkcmF3VG9kYXkodGhlU2lkZVBhZCwgdGhlVG9wUGFkLCB3MiwgaDIpIHtcbiAgICBjb25zdCB0b2RheU1hcmtlcjIgPSBkaWFnT2JqLmRiLmdldFRvZGF5TWFya2VyKCk7XG4gICAgaWYgKHRvZGF5TWFya2VyMiA9PT0gXCJvZmZcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2RheUcgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0b2RheVwiKTtcbiAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5TGluZSA9IHRvZGF5Ry5hcHBlbmQoXCJsaW5lXCIpO1xuICAgIHRvZGF5TGluZS5hdHRyKFwieDFcIiwgdGltZVNjYWxlKHRvZGF5KSArIHRoZVNpZGVQYWQpLmF0dHIoXCJ4MlwiLCB0aW1lU2NhbGUodG9kYXkpICsgdGhlU2lkZVBhZCkuYXR0cihcInkxXCIsIGNvbmYudGl0bGVUb3BNYXJnaW4pLmF0dHIoXCJ5MlwiLCBoMiAtIGNvbmYudGl0bGVUb3BNYXJnaW4pLmF0dHIoXCJjbGFzc1wiLCBcInRvZGF5XCIpO1xuICAgIGlmICh0b2RheU1hcmtlcjIgIT09IFwiXCIpIHtcbiAgICAgIHRvZGF5TGluZS5hdHRyKFwic3R5bGVcIiwgdG9kYXlNYXJrZXIyLnJlcGxhY2UoLywvZywgXCI7XCIpKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGRyYXdUb2RheSwgXCJkcmF3VG9kYXlcIik7XG4gIGZ1bmN0aW9uIGNoZWNrVW5pcXVlKGFycikge1xuICAgIGNvbnN0IGhhc2ggPSB7fTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFyci5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhhc2gsIGFycltpXSkpIHtcbiAgICAgICAgaGFzaFthcnJbaV1dID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0LnB1c2goYXJyW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBfX25hbWUoY2hlY2tVbmlxdWUsIFwiY2hlY2tVbmlxdWVcIik7XG59LCBcImRyYXdcIik7XG52YXIgZ2FudHRSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBzZXRDb25mLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2FudHQvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuICAubWVybWFpZC1tYWluLWZvbnQge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCBcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7XG4gIH1cblxuICAuZXhjbHVkZS1yYW5nZSB7XG4gICAgZmlsbDogJHtvcHRpb25zLmV4Y2x1ZGVCa2dDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNlY3Rpb25Ca2dDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5zZWN0aW9uQmtnQ29sb3IyfTtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYWx0U2VjdGlvbkJrZ0NvbG9yfTtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCBcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7XG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuZ3JpZENvbG9yfTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICB9XG5cbiAgLmdyaWQgLnRpY2sgdGV4dCB7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy50b2RheUxpbmVDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksIFwidHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfTtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksIFwidHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHREYXJrQ29sb3J9O1xuICAgIHRleHQtYW5jaG9yOiBlbmQ7XG4gIH1cblxuXG4gIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi9cblxuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC50YXNrVGV4dC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cblxuICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqL1xuXG4gIC50YXNrVGV4dDAsXG4gIC50YXNrVGV4dDEsXG4gIC50YXNrVGV4dDIsXG4gIC50YXNrVGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENvbG9yfTtcbiAgfVxuXG4gIC50YXNrMCxcbiAgLnRhc2sxLFxuICAudGFzazIsXG4gIC50YXNrMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tCa2dDb2xvcn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMudGFza0JvcmRlckNvbG9yfTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUwLFxuICAudGFza1RleHRPdXRzaWRlMlxuICB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUxLFxuICAudGFza1RleHRPdXRzaWRlMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTtcbiAgfVxuXG5cbiAgLyogQWN0aXZlIHRhc2sgKi9cblxuICAuYWN0aXZlMCxcbiAgLmFjdGl2ZTEsXG4gIC5hY3RpdmUyLFxuICAuYWN0aXZlMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdGl2ZVRhc2tCa2dDb2xvcn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuYWN0aXZlVGFza0JvcmRlckNvbG9yfTtcbiAgfVxuXG4gIC5hY3RpdmVUZXh0MCxcbiAgLmFjdGl2ZVRleHQxLFxuICAuYWN0aXZlVGV4dDIsXG4gIC5hY3RpdmVUZXh0MyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBDb21wbGV0ZWQgdGFzayAqL1xuXG4gIC5kb25lMCxcbiAgLmRvbmUxLFxuICAuZG9uZTIsXG4gIC5kb25lMyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuZG9uZVRhc2tCb3JkZXJDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmRvbmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lVGV4dDAsXG4gIC5kb25lVGV4dDEsXG4gIC5kb25lVGV4dDIsXG4gIC5kb25lVGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi9cblxuICAuY3JpdDAsXG4gIC5jcml0MSxcbiAgLmNyaXQyLFxuICAuY3JpdDMge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmNyaXRCb3JkZXJDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmNyaXRCa2dDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmFjdGl2ZUNyaXQwLFxuICAuYWN0aXZlQ3JpdDEsXG4gIC5hY3RpdmVDcml0MixcbiAgLmFjdGl2ZUNyaXQzIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5jcml0Qm9yZGVyQ29sb3J9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lQ3JpdDAsXG4gIC5kb25lQ3JpdDEsXG4gIC5kb25lQ3JpdDIsXG4gIC5kb25lQ3JpdDMge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmNyaXRCb3JkZXJDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmRvbmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICB9XG5cbiAgLm1pbGVzdG9uZSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpO1xuICB9XG5cbiAgLm1pbGVzdG9uZVRleHQge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAuZG9uZUNyaXRUZXh0MCxcbiAgLmRvbmVDcml0VGV4dDEsXG4gIC5kb25lQ3JpdFRleHQyLFxuICAuZG9uZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmFjdGl2ZUNyaXRUZXh0MCxcbiAgLmFjdGl2ZUNyaXRUZXh0MSxcbiAgLmFjdGl2ZUNyaXRUZXh0MixcbiAgLmFjdGl2ZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCBcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2FudHQvZ2FudHREaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBnYW50dF9kZWZhdWx0LFxuICBkYjogZ2FudHREYl9kZWZhdWx0LFxuICByZW5kZXJlcjogZ2FudHRSZW5kZXJlcl9kZWZhdWx0LFxuICBzdHlsZXM6IHN0eWxlc19kZWZhdWx0XG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgdmVyc2lvblxufSBmcm9tIFwiLi9jaHVuay1CRlNJMlE3Ui5tanNcIjtcbmltcG9ydCB7XG4gIHNlbGVjdFN2Z0VsZW1lbnRcbn0gZnJvbSBcIi4vY2h1bmstRjJYRk4zQlkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2luZm8vaW5mb1BhcnNlci50c1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQG1lcm1haWQtanMvcGFyc2VyXCI7XG52YXIgcGFyc2VyID0ge1xuICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoaW5wdXQpID0+IHtcbiAgICBjb25zdCBhc3QgPSBhd2FpdCBwYXJzZShcImluZm9cIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICB9LCBcInBhcnNlXCIpXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvaW5mby9pbmZvRGIudHNcbnZhciBERUZBVUxUX0lORk9fREIgPSB7IHZlcnNpb24gfTtcbnZhciBnZXRWZXJzaW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBERUZBVUxUX0lORk9fREIudmVyc2lvbiwgXCJnZXRWZXJzaW9uXCIpO1xudmFyIGRiID0ge1xuICBnZXRWZXJzaW9uXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvaW5mby9pbmZvUmVuZGVyZXIudHNcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgaWQsIHZlcnNpb24yKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcInJlbmRlcmluZyBpbmZvIGRpYWdyYW1cXG5cIiArIHRleHQpO1xuICBjb25zdCBzdmcgPSBzZWxlY3RTdmdFbGVtZW50KGlkKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIDEwMCwgNDAwLCB0cnVlKTtcbiAgY29uc3QgZ3JvdXAgPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAxMDApLmF0dHIoXCJ5XCIsIDQwKS5hdHRyKFwiY2xhc3NcIiwgXCJ2ZXJzaW9uXCIpLmF0dHIoXCJmb250LXNpemVcIiwgMzIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChgdiR7dmVyc2lvbjJ9YCk7XG59LCBcImRyYXdcIik7XG52YXIgcmVuZGVyZXIgPSB7IGRyYXcgfTtcblxuLy8gc3JjL2RpYWdyYW1zL2luZm8vaW5mb0RpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiLFxuICByZW5kZXJlclxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIHBvcHVsYXRlQ29tbW9uRGJcbn0gZnJvbSBcIi4vY2h1bmstT1FDTTVMSFUubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhbkFuZE1lcmdlLFxuICBwYXJzZUZvbnRTaXplXG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVuay1GMlhGTjNCWS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBsb2csXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGllL3BpZVBhcnNlci50c1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQG1lcm1haWQtanMvcGFyc2VyXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllRGIudHNcbnZhciBERUZBVUxUX1BJRV9DT05GSUcgPSBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucGllO1xudmFyIERFRkFVTFRfUElFX0RCID0ge1xuICBzZWN0aW9uczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgc2hvd0RhdGE6IGZhbHNlLFxuICBjb25maWc6IERFRkFVTFRfUElFX0NPTkZJR1xufTtcbnZhciBzZWN0aW9ucyA9IERFRkFVTFRfUElFX0RCLnNlY3Rpb25zO1xudmFyIHNob3dEYXRhID0gREVGQVVMVF9QSUVfREIuc2hvd0RhdGE7XG52YXIgY29uZmlnID0gc3RydWN0dXJlZENsb25lKERFRkFVTFRfUElFX0NPTkZJRyk7XG52YXIgZ2V0Q29uZmlnMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gc3RydWN0dXJlZENsb25lKGNvbmZpZyksIFwiZ2V0Q29uZmlnXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBzZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHNob3dEYXRhID0gREVGQVVMVF9QSUVfREIuc2hvd0RhdGE7XG4gIGNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIGFkZFNlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiB7XG4gIGlmICghc2VjdGlvbnMuaGFzKGxhYmVsKSkge1xuICAgIHNlY3Rpb25zLnNldChsYWJlbCwgdmFsdWUpO1xuICAgIGxvZy5kZWJ1ZyhgYWRkZWQgbmV3IHNlY3Rpb246ICR7bGFiZWx9LCB3aXRoIHZhbHVlOiAke3ZhbHVlfWApO1xuICB9XG59LCBcImFkZFNlY3Rpb25cIik7XG52YXIgZ2V0U2VjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHNlY3Rpb25zLCBcImdldFNlY3Rpb25zXCIpO1xudmFyIHNldFNob3dEYXRhID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodG9nZ2xlKSA9PiB7XG4gIHNob3dEYXRhID0gdG9nZ2xlO1xufSwgXCJzZXRTaG93RGF0YVwiKTtcbnZhciBnZXRTaG93RGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gc2hvd0RhdGEsIFwiZ2V0U2hvd0RhdGFcIik7XG52YXIgZGIgPSB7XG4gIGdldENvbmZpZzogZ2V0Q29uZmlnMixcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTZWN0aW9uLFxuICBnZXRTZWN0aW9ucyxcbiAgc2V0U2hvd0RhdGEsXG4gIGdldFNob3dEYXRhXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGllL3BpZVBhcnNlci50c1xudmFyIHBvcHVsYXRlRGIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhc3QsIGRiMikgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIyKTtcbiAgZGIyLnNldFNob3dEYXRhKGFzdC5zaG93RGF0YSk7XG4gIGFzdC5zZWN0aW9ucy5tYXAoZGIyLmFkZFNlY3Rpb24pO1xufSwgXCJwb3B1bGF0ZURiXCIpO1xudmFyIHBhcnNlciA9IHtcbiAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgY29uc3QgYXN0ID0gYXdhaXQgcGFyc2UoXCJwaWVcIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICAgIHBvcHVsYXRlRGIoYXN0LCBkYik7XG4gIH0sIFwicGFyc2VcIilcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllU3R5bGVzLnRzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuICAucGllQ2lyY2xle1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBpZVN0cm9rZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGggOiAke29wdGlvbnMucGllU3Ryb2tlV2lkdGh9O1xuICAgIG9wYWNpdHkgOiAke29wdGlvbnMucGllT3BhY2l0eX07XG4gIH1cbiAgLnBpZU91dGVyQ2lyY2xle1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBpZU91dGVyU3Ryb2tlQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLnBpZU91dGVyU3Ryb2tlV2lkdGh9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cbiAgLnBpZVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6ICR7b3B0aW9ucy5waWVUaXRsZVRleHRTaXplfTtcbiAgICBmaWxsOiAke29wdGlvbnMucGllVGl0bGVUZXh0Q29sb3J9O1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gIH1cbiAgLnNsaWNlIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5waWVTZWN0aW9uVGV4dENvbG9yfTtcbiAgICBmb250LXNpemU6JHtvcHRpb25zLnBpZVNlY3Rpb25UZXh0U2l6ZX07XG4gICAgLy8gZmlsbDogd2hpdGU7XG4gIH1cbiAgLmxlZ2VuZCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMucGllTGVnZW5kVGV4dENvbG9yfTtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLnBpZUxlZ2VuZFRleHRTaXplfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgcGllU3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllUmVuZGVyZXIudHNcbmltcG9ydCB7IGFyYywgcGllIGFzIGQzcGllLCBzY2FsZU9yZGluYWwgfSBmcm9tIFwiZDNcIjtcbnZhciBjcmVhdGVQaWVBcmNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2VjdGlvbnMyKSA9PiB7XG4gIGNvbnN0IHBpZURhdGEgPSBbLi4uc2VjdGlvbnMyLmVudHJpZXMoKV0ubWFwKChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBlbGVtZW50WzBdLFxuICAgICAgdmFsdWU6IGVsZW1lbnRbMV1cbiAgICB9O1xuICB9KS5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGIudmFsdWUgLSBhLnZhbHVlO1xuICB9KTtcbiAgY29uc3QgcGllID0gZDNwaWUoKS52YWx1ZShcbiAgICAoZDNTZWN0aW9uKSA9PiBkM1NlY3Rpb24udmFsdWVcbiAgKTtcbiAgcmV0dXJuIHBpZShwaWVEYXRhKTtcbn0sIFwiY3JlYXRlUGllQXJjc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcInJlbmRlcmluZyBwaWUgY2hhcnRcXG5cIiArIHRleHQpO1xuICBjb25zdCBkYjIgPSBkaWFnT2JqLmRiO1xuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgcGllQ29uZmlnID0gY2xlYW5BbmRNZXJnZShkYjIuZ2V0Q29uZmlnKCksIGdsb2JhbENvbmZpZy5waWUpO1xuICBjb25zdCBNQVJHSU4gPSA0MDtcbiAgY29uc3QgTEVHRU5EX1JFQ1RfU0laRSA9IDE4O1xuICBjb25zdCBMRUdFTkRfU1BBQ0lORyA9IDQ7XG4gIGNvbnN0IGhlaWdodCA9IDQ1MDtcbiAgY29uc3QgcGllV2lkdGggPSBoZWlnaHQ7XG4gIGNvbnN0IHN2ZyA9IHNlbGVjdFN2Z0VsZW1lbnQoaWQpO1xuICBjb25zdCBncm91cCA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBncm91cC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgcGllV2lkdGggLyAyICsgXCIsXCIgKyBoZWlnaHQgLyAyICsgXCIpXCIpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzIH0gPSBnbG9iYWxDb25maWc7XG4gIGxldCBbb3V0ZXJTdHJva2VXaWR0aF0gPSBwYXJzZUZvbnRTaXplKHRoZW1lVmFyaWFibGVzLnBpZU91dGVyU3Ryb2tlV2lkdGgpO1xuICBvdXRlclN0cm9rZVdpZHRoID8/PSAyO1xuICBjb25zdCB0ZXh0UG9zaXRpb24gPSBwaWVDb25maWcudGV4dFBvc2l0aW9uO1xuICBjb25zdCByYWRpdXMgPSBNYXRoLm1pbihwaWVXaWR0aCwgaGVpZ2h0KSAvIDIgLSBNQVJHSU47XG4gIGNvbnN0IGFyY0dlbmVyYXRvciA9IGFyYygpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKHJhZGl1cyk7XG4gIGNvbnN0IGxhYmVsQXJjR2VuZXJhdG9yID0gYXJjKCkuaW5uZXJSYWRpdXMocmFkaXVzICogdGV4dFBvc2l0aW9uKS5vdXRlclJhZGl1cyhyYWRpdXMgKiB0ZXh0UG9zaXRpb24pO1xuICBncm91cC5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIDApLmF0dHIoXCJjeVwiLCAwKS5hdHRyKFwiclwiLCByYWRpdXMgKyBvdXRlclN0cm9rZVdpZHRoIC8gMikuYXR0cihcImNsYXNzXCIsIFwicGllT3V0ZXJDaXJjbGVcIik7XG4gIGNvbnN0IHNlY3Rpb25zMiA9IGRiMi5nZXRTZWN0aW9ucygpO1xuICBjb25zdCBhcmNzID0gY3JlYXRlUGllQXJjcyhzZWN0aW9uczIpO1xuICBjb25zdCBteUdlbmVyYXRlZENvbG9ycyA9IFtcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxLFxuICAgIHRoZW1lVmFyaWFibGVzLnBpZTIsXG4gICAgdGhlbWVWYXJpYWJsZXMucGllMyxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWU0LFxuICAgIHRoZW1lVmFyaWFibGVzLnBpZTUsXG4gICAgdGhlbWVWYXJpYWJsZXMucGllNixcbiAgICB0aGVtZVZhcmlhYmxlcy5waWU3LFxuICAgIHRoZW1lVmFyaWFibGVzLnBpZTgsXG4gICAgdGhlbWVWYXJpYWJsZXMucGllOSxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxMCxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxMSxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxMlxuICBdO1xuICBjb25zdCBjb2xvciA9IHNjYWxlT3JkaW5hbChteUdlbmVyYXRlZENvbG9ycyk7XG4gIGdyb3VwLnNlbGVjdEFsbChcIm15U2xpY2VzXCIpLmRhdGEoYXJjcykuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIGFyY0dlbmVyYXRvcikuYXR0cihcImZpbGxcIiwgKGRhdHVtKSA9PiB7XG4gICAgcmV0dXJuIGNvbG9yKGRhdHVtLmRhdGEubGFiZWwpO1xuICB9KS5hdHRyKFwiY2xhc3NcIiwgXCJwaWVDaXJjbGVcIik7XG4gIGxldCBzdW0gPSAwO1xuICBzZWN0aW9uczIuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHN1bSArPSBzZWN0aW9uO1xuICB9KTtcbiAgZ3JvdXAuc2VsZWN0QWxsKFwibXlTbGljZXNcIikuZGF0YShhcmNzKS5lbnRlcigpLmFwcGVuZChcInRleHRcIikudGV4dCgoZGF0dW0pID0+IHtcbiAgICByZXR1cm4gKGRhdHVtLmRhdGEudmFsdWUgLyBzdW0gKiAxMDApLnRvRml4ZWQoMCkgKyBcIiVcIjtcbiAgfSkuYXR0cihcInRyYW5zZm9ybVwiLCAoZGF0dW0pID0+IHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyBsYWJlbEFyY0dlbmVyYXRvci5jZW50cm9pZChkYXR1bSkgKyBcIilcIjtcbiAgfSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJzbGljZVwiKTtcbiAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS50ZXh0KGRiMi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgLShoZWlnaHQgLSA1MCkgLyAyKS5hdHRyKFwiY2xhc3NcIiwgXCJwaWVUaXRsZVRleHRcIik7XG4gIGNvbnN0IGxlZ2VuZCA9IGdyb3VwLnNlbGVjdEFsbChcIi5sZWdlbmRcIikuZGF0YShjb2xvci5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxlZ2VuZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIChfZGF0dW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaGVpZ2h0MiA9IExFR0VORF9SRUNUX1NJWkUgKyBMRUdFTkRfU1BBQ0lORztcbiAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHQyICogY29sb3IuZG9tYWluKCkubGVuZ3RoIC8gMjtcbiAgICBjb25zdCBob3Jpem9udGFsID0gMTIgKiBMRUdFTkRfUkVDVF9TSVpFO1xuICAgIGNvbnN0IHZlcnRpY2FsID0gaW5kZXggKiBoZWlnaHQyIC0gb2Zmc2V0O1xuICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIGhvcml6b250YWwgKyBcIixcIiArIHZlcnRpY2FsICsgXCIpXCI7XG4gIH0pO1xuICBsZWdlbmQuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwid2lkdGhcIiwgTEVHRU5EX1JFQ1RfU0laRSkuYXR0cihcImhlaWdodFwiLCBMRUdFTkRfUkVDVF9TSVpFKS5zdHlsZShcImZpbGxcIiwgY29sb3IpLnN0eWxlKFwic3Ryb2tlXCIsIGNvbG9yKTtcbiAgbGVnZW5kLmRhdGEoYXJjcykuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBMRUdFTkRfUkVDVF9TSVpFICsgTEVHRU5EX1NQQUNJTkcpLmF0dHIoXCJ5XCIsIExFR0VORF9SRUNUX1NJWkUgLSBMRUdFTkRfU1BBQ0lORykudGV4dCgoZGF0dW0pID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCB2YWx1ZSB9ID0gZGF0dW0uZGF0YTtcbiAgICBpZiAoZGIyLmdldFNob3dEYXRhKCkpIHtcbiAgICAgIHJldHVybiBgJHtsYWJlbH0gWyR7dmFsdWV9XWA7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG4gIGNvbnN0IGxvbmdlc3RUZXh0V2lkdGggPSBNYXRoLm1heChcbiAgICAuLi5sZWdlbmQuc2VsZWN0QWxsKFwidGV4dFwiKS5ub2RlcygpLm1hcCgobm9kZSkgPT4gbm9kZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMClcbiAgKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IHBpZVdpZHRoICsgTUFSR0lOICsgTEVHRU5EX1JFQ1RfU0laRSArIExFR0VORF9TUEFDSU5HICsgbG9uZ2VzdFRleHRXaWR0aDtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHt0b3RhbFdpZHRofSAke2hlaWdodH1gKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgdG90YWxXaWR0aCwgcGllQ29uZmlnLnVzZU1heFdpZHRoKTtcbn0sIFwiZHJhd1wiKTtcbnZhciByZW5kZXJlciA9IHsgZHJhdyB9O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGllL3BpZURpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiLFxuICByZW5kZXJlcixcbiAgc3R5bGVzOiBwaWVTdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBnZXRUaGVtZVZhcmlhYmxlcyxcbiAgbG9nLFxuICBzYW5pdGl6ZVRleHQsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvcXVhZHJhbnQtY2hhcnQvcGFyc2VyL3F1YWRyYW50Lmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgM10sICRWMSA9IFsxLCA0XSwgJFYyID0gWzEsIDVdLCAkVjMgPSBbMSwgNl0sICRWNCA9IFsxLCA3XSwgJFY1ID0gWzEsIDQsIDUsIDEwLCAxMiwgMTMsIDE0LCAxOCwgMjUsIDM1LCAzNywgMzksIDQxLCA0MiwgNDgsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNjAsIDYxLCA2MywgNjQsIDY1LCA2NiwgNjddLCAkVjYgPSBbMSwgNCwgNSwgMTAsIDEyLCAxMywgMTQsIDE4LCAyNSwgMjgsIDM1LCAzNywgMzksIDQxLCA0MiwgNDgsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNjAsIDYxLCA2MywgNjQsIDY1LCA2NiwgNjddLCAkVjcgPSBbNTUsIDU2LCA1N10sICRWOCA9IFsyLCAzNl0sICRWOSA9IFsxLCAzN10sICRWYSA9IFsxLCAzNl0sICRWYiA9IFsxLCAzOF0sICRWYyA9IFsxLCAzNV0sICRWZCA9IFsxLCA0M10sICRWZSA9IFsxLCA0MV0sICRWZiA9IFsxLCAxNF0sICRWZyA9IFsxLCAyM10sICRWaCA9IFsxLCAxOF0sICRWaSA9IFsxLCAxOV0sICRWaiA9IFsxLCAyMF0sICRWayA9IFsxLCAyMV0sICRWbCA9IFsxLCAyMl0sICRWbSA9IFsxLCAyNF0sICRWbiA9IFsxLCAyNV0sICRWbyA9IFsxLCAyNl0sICRWcCA9IFsxLCAyN10sICRWcSA9IFsxLCAyOF0sICRWciA9IFsxLCAyOV0sICRWcyA9IFsxLCAzMl0sICRWdCA9IFsxLCAzM10sICRWdSA9IFsxLCAzNF0sICRWdiA9IFsxLCAzOV0sICRWdyA9IFsxLCA0MF0sICRWeCA9IFsxLCA0Ml0sICRWeSA9IFsxLCA0NF0sICRWeiA9IFsxLCA2Ml0sICRWQSA9IFsxLCA2MV0sICRWQiA9IFs0LCA1LCA4LCAxMCwgMTIsIDEzLCAxNCwgMTgsIDQ0LCA0NywgNDksIDU1LCA1NiwgNTcsIDYzLCA2NCwgNjUsIDY2LCA2N10sICRWQyA9IFsxLCA2NV0sICRWRCA9IFsxLCA2Nl0sICRWRSA9IFsxLCA2N10sICRWRiA9IFsxLCA2OF0sICRWRyA9IFsxLCA2OV0sICRWSCA9IFsxLCA3MF0sICRWSSA9IFsxLCA3MV0sICRWSiA9IFsxLCA3Ml0sICRWSyA9IFsxLCA3M10sICRWTCA9IFsxLCA3NF0sICRWTSA9IFsxLCA3NV0sICRWTiA9IFsxLCA3Nl0sICRWTyA9IFs0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxOF0sICRWUCA9IFsxLCA5MF0sICRWUSA9IFsxLCA5MV0sICRWUiA9IFsxLCA5Ml0sICRWUyA9IFsxLCA5OV0sICRWVCA9IFsxLCA5M10sICRWVSA9IFsxLCA5Nl0sICRWViA9IFsxLCA5NF0sICRWVyA9IFsxLCA5NV0sICRWWCA9IFsxLCA5N10sICRWWSA9IFsxLCA5OF0sICRWWiA9IFsxLCAxMDJdLCAkVl8gPSBbMTAsIDU1LCA1NiwgNTddLCAkViQgPSBbNCwgNSwgNiwgOCwgMTAsIDExLCAxMywgMTcsIDE4LCAxOSwgMjAsIDU1LCA1NiwgNTddO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LCBcInRyYWNlXCIpLFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwiaWRTdHJpbmdUb2tlblwiOiAzLCBcIkFMUEhBXCI6IDQsIFwiTlVNXCI6IDUsIFwiTk9ERV9TVFJJTkdcIjogNiwgXCJET1dOXCI6IDcsIFwiTUlOVVNcIjogOCwgXCJERUZBVUxUXCI6IDksIFwiQ09NTUFcIjogMTAsIFwiQ09MT05cIjogMTEsIFwiQU1QXCI6IDEyLCBcIkJSS1RcIjogMTMsIFwiTVVMVFwiOiAxNCwgXCJVTklDT0RFX1RFWFRcIjogMTUsIFwic3R5bGVDb21wb25lbnRcIjogMTYsIFwiVU5JVFwiOiAxNywgXCJTUEFDRVwiOiAxOCwgXCJTVFlMRVwiOiAxOSwgXCJQQ1RcIjogMjAsIFwiaWRTdHJpbmdcIjogMjEsIFwic3R5bGVcIjogMjIsIFwic3R5bGVzT3B0XCI6IDIzLCBcImNsYXNzRGVmU3RhdGVtZW50XCI6IDI0LCBcIkNMQVNTREVGXCI6IDI1LCBcInN0YXJ0XCI6IDI2LCBcImVvbFwiOiAyNywgXCJRVUFEUkFOVFwiOiAyOCwgXCJkb2N1bWVudFwiOiAyOSwgXCJsaW5lXCI6IDMwLCBcInN0YXRlbWVudFwiOiAzMSwgXCJheGlzRGV0YWlsc1wiOiAzMiwgXCJxdWFkcmFudERldGFpbHNcIjogMzMsIFwicG9pbnRzXCI6IDM0LCBcInRpdGxlXCI6IDM1LCBcInRpdGxlX3ZhbHVlXCI6IDM2LCBcImFjY190aXRsZVwiOiAzNywgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzgsIFwiYWNjX2Rlc2NyXCI6IDM5LCBcImFjY19kZXNjcl92YWx1ZVwiOiA0MCwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDQxLCBcInNlY3Rpb25cIjogNDIsIFwidGV4dFwiOiA0MywgXCJwb2ludF9zdGFydFwiOiA0NCwgXCJwb2ludF94XCI6IDQ1LCBcInBvaW50X3lcIjogNDYsIFwiY2xhc3NfbmFtZVwiOiA0NywgXCJYLUFYSVNcIjogNDgsIFwiQVhJUy1URVhULURFTElNSVRFUlwiOiA0OSwgXCJZLUFYSVNcIjogNTAsIFwiUVVBRFJBTlRfMVwiOiA1MSwgXCJRVUFEUkFOVF8yXCI6IDUyLCBcIlFVQURSQU5UXzNcIjogNTMsIFwiUVVBRFJBTlRfNFwiOiA1NCwgXCJORVdMSU5FXCI6IDU1LCBcIlNFTUlcIjogNTYsIFwiRU9GXCI6IDU3LCBcImFscGhhTnVtVG9rZW5cIjogNTgsIFwidGV4dE5vVGFnc1Rva2VuXCI6IDU5LCBcIlNUUlwiOiA2MCwgXCJNRF9TVFJcIjogNjEsIFwiYWxwaGFOdW1cIjogNjIsIFwiUFVOQ1RVQVRJT05cIjogNjMsIFwiUExVU1wiOiA2NCwgXCJFUVVBTFNcIjogNjUsIFwiRE9UXCI6IDY2LCBcIlVOREVSU0NPUkVcIjogNjcsIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA0OiBcIkFMUEhBXCIsIDU6IFwiTlVNXCIsIDY6IFwiTk9ERV9TVFJJTkdcIiwgNzogXCJET1dOXCIsIDg6IFwiTUlOVVNcIiwgOTogXCJERUZBVUxUXCIsIDEwOiBcIkNPTU1BXCIsIDExOiBcIkNPTE9OXCIsIDEyOiBcIkFNUFwiLCAxMzogXCJCUktUXCIsIDE0OiBcIk1VTFRcIiwgMTU6IFwiVU5JQ09ERV9URVhUXCIsIDE3OiBcIlVOSVRcIiwgMTg6IFwiU1BBQ0VcIiwgMTk6IFwiU1RZTEVcIiwgMjA6IFwiUENUXCIsIDI1OiBcIkNMQVNTREVGXCIsIDI4OiBcIlFVQURSQU5UXCIsIDM1OiBcInRpdGxlXCIsIDM2OiBcInRpdGxlX3ZhbHVlXCIsIDM3OiBcImFjY190aXRsZVwiLCAzODogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzk6IFwiYWNjX2Rlc2NyXCIsIDQwOiBcImFjY19kZXNjcl92YWx1ZVwiLCA0MTogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDQyOiBcInNlY3Rpb25cIiwgNDQ6IFwicG9pbnRfc3RhcnRcIiwgNDU6IFwicG9pbnRfeFwiLCA0NjogXCJwb2ludF95XCIsIDQ3OiBcImNsYXNzX25hbWVcIiwgNDg6IFwiWC1BWElTXCIsIDQ5OiBcIkFYSVMtVEVYVC1ERUxJTUlURVJcIiwgNTA6IFwiWS1BWElTXCIsIDUxOiBcIlFVQURSQU5UXzFcIiwgNTI6IFwiUVVBRFJBTlRfMlwiLCA1MzogXCJRVUFEUkFOVF8zXCIsIDU0OiBcIlFVQURSQU5UXzRcIiwgNTU6IFwiTkVXTElORVwiLCA1NjogXCJTRU1JXCIsIDU3OiBcIkVPRlwiLCA2MDogXCJTVFJcIiwgNjE6IFwiTURfU1RSXCIsIDYzOiBcIlBVTkNUVUFUSU9OXCIsIDY0OiBcIlBMVVNcIiwgNjU6IFwiRVFVQUxTXCIsIDY2OiBcIkRPVFwiLCA2NzogXCJVTkRFUlNDT1JFXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMjEsIDFdLCBbMjEsIDJdLCBbMjIsIDFdLCBbMjIsIDJdLCBbMjMsIDFdLCBbMjMsIDNdLCBbMjQsIDVdLCBbMjYsIDJdLCBbMjYsIDJdLCBbMjYsIDJdLCBbMjksIDBdLCBbMjksIDJdLCBbMzAsIDJdLCBbMzEsIDBdLCBbMzEsIDFdLCBbMzEsIDJdLCBbMzEsIDFdLCBbMzEsIDFdLCBbMzEsIDFdLCBbMzEsIDJdLCBbMzEsIDJdLCBbMzEsIDJdLCBbMzEsIDFdLCBbMzEsIDFdLCBbMzQsIDRdLCBbMzQsIDVdLCBbMzQsIDVdLCBbMzQsIDZdLCBbMzIsIDRdLCBbMzIsIDNdLCBbMzIsIDJdLCBbMzIsIDRdLCBbMzIsIDNdLCBbMzIsIDJdLCBbMzMsIDJdLCBbMzMsIDJdLCBbMzMsIDJdLCBbMzMsIDJdLCBbMjcsIDFdLCBbMjcsIDFdLCBbMjcsIDFdLCBbNDMsIDFdLCBbNDMsIDJdLCBbNDMsIDFdLCBbNDMsIDFdLCBbNjIsIDFdLCBbNjIsIDJdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTksIDFdLCBbNTksIDFdLCBbNTksIDFdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdLnRyaW0oKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgJCRbJDAgLSAyXS5wdXNoKCQkWyQwXS50cmltKCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5hZGRDbGFzcygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSAzXSwgXCJcIiwgJCRbJDAgLSAxXSwgJCRbJDBdLCBbXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSA0XSwgJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCBbXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSA0XSwgXCJcIiwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICB5eS5hZGRQb2ludCgkJFskMCAtIDVdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHl5LnNldFhBeGlzTGVmdFRleHQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0WEF4aXNSaWdodFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAkJFskMCAtIDFdLnRleHQgKz0gXCIgXFx1MjdGNiBcIjtcbiAgICAgICAgICB5eS5zZXRYQXhpc0xlZnRUZXh0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgIHl5LnNldFhBeGlzTGVmdFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICB5eS5zZXRZQXhpc0JvdHRvbVRleHQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0WUF4aXNUb3BUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgJCRbJDAgLSAxXS50ZXh0ICs9IFwiIFxcdTI3RjYgXCI7XG4gICAgICAgICAgeXkuc2V0WUF4aXNCb3R0b21UZXh0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHl5LnNldFlBeGlzQm90dG9tVGV4dCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHl5LnNldFF1YWRyYW50MVRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICB5eS5zZXRRdWFkcmFudDJUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgeXkuc2V0UXVhZHJhbnQzVGV4dCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgIHl5LnNldFF1YWRyYW50NFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwIC0gMV0udGV4dCArIFwiXCIgKyAkJFskMF0sIHR5cGU6ICQkWyQwIC0gMV0udHlwZSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcInRleHRcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcIm1hcmtkb3duXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDE4OiAkVjAsIDI2OiAxLCAyNzogMiwgMjg6ICRWMSwgNTU6ICRWMiwgNTY6ICRWMywgNTc6ICRWNCB9LCB7IDE6IFszXSB9LCB7IDE4OiAkVjAsIDI2OiA4LCAyNzogMiwgMjg6ICRWMSwgNTU6ICRWMiwgNTY6ICRWMywgNTc6ICRWNCB9LCB7IDE4OiAkVjAsIDI2OiA5LCAyNzogMiwgMjg6ICRWMSwgNTU6ICRWMiwgNTY6ICRWMywgNTc6ICRWNCB9LCBvKCRWNSwgWzIsIDMzXSwgeyAyOTogMTAgfSksIG8oJFY2LCBbMiwgNjFdKSwgbygkVjYsIFsyLCA2Ml0pLCBvKCRWNiwgWzIsIDYzXSksIHsgMTogWzIsIDMwXSB9LCB7IDE6IFsyLCAzMV0gfSwgbygkVjcsICRWOCwgeyAzMDogMTEsIDMxOiAxMiwgMjQ6IDEzLCAzMjogMTUsIDMzOiAxNiwgMzQ6IDE3LCA0MzogMzAsIDU4OiAzMSwgMTogWzIsIDMyXSwgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVmYsIDI1OiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQyOiAkVmwsIDQ4OiAkVm0sIDUwOiAkVm4sIDUxOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY1LCBbMiwgMzRdKSwgeyAyNzogNDUsIDU1OiAkVjIsIDU2OiAkVjMsIDU3OiAkVjQgfSwgbygkVjcsIFsyLCAzN10pLCBvKCRWNywgJFY4LCB7IDI0OiAxMywgMzI6IDE1LCAzMzogMTYsIDM0OiAxNywgNDM6IDMwLCA1ODogMzEsIDMxOiA0NiwgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVmYsIDI1OiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQyOiAkVmwsIDQ4OiAkVm0sIDUwOiAkVm4sIDUxOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY3LCBbMiwgMzldKSwgbygkVjcsIFsyLCA0MF0pLCBvKCRWNywgWzIsIDQxXSksIHsgMzY6IFsxLCA0N10gfSwgeyAzODogWzEsIDQ4XSB9LCB7IDQwOiBbMSwgNDldIH0sIG8oJFY3LCBbMiwgNDVdKSwgbygkVjcsIFsyLCA0Nl0pLCB7IDE4OiBbMSwgNTBdIH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1MSwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1MiwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1MywgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1NCwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1NSwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1NiwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNDQ6IFsxLCA1N10sIDQ3OiBbMSwgNThdLCA1ODogNjAsIDU5OiA1OSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9LCBvKCRWQiwgWzIsIDY0XSksIG8oJFZCLCBbMiwgNjZdKSwgbygkVkIsIFsyLCA2N10pLCBvKCRWQiwgWzIsIDcwXSksIG8oJFZCLCBbMiwgNzFdKSwgbygkVkIsIFsyLCA3Ml0pLCBvKCRWQiwgWzIsIDczXSksIG8oJFZCLCBbMiwgNzRdKSwgbygkVkIsIFsyLCA3NV0pLCBvKCRWQiwgWzIsIDc2XSksIG8oJFZCLCBbMiwgNzddKSwgbygkVkIsIFsyLCA3OF0pLCBvKCRWQiwgWzIsIDc5XSksIG8oJFZCLCBbMiwgODBdKSwgbygkVjUsIFsyLCAzNV0pLCBvKCRWNywgWzIsIDM4XSksIG8oJFY3LCBbMiwgNDJdKSwgbygkVjcsIFsyLCA0M10pLCBvKCRWNywgWzIsIDQ0XSksIHsgMzogNjQsIDQ6ICRWQywgNTogJFZELCA2OiAkVkUsIDc6ICRWRiwgODogJFZHLCA5OiAkVkgsIDEwOiAkVkksIDExOiAkVkosIDEyOiAkVkssIDEzOiAkVkwsIDE0OiAkVk0sIDE1OiAkVk4sIDIxOiA2MyB9LCBvKCRWNywgWzIsIDUzXSwgeyA1OTogNTksIDU4OiA2MCwgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNDk6IFsxLCA3N10sIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY3LCBbMiwgNTZdLCB7IDU5OiA1OSwgNTg6IDYwLCA0OiAkVjksIDU6ICRWYSwgODogJFZ6LCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCAxODogJFZBLCA0OTogWzEsIDc4XSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9KSwgbygkVjcsIFsyLCA1N10sIHsgNTk6IDU5LCA1ODogNjAsIDQ6ICRWOSwgNTogJFZhLCA4OiAkVnosIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVkEsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY3LCBbMiwgNThdLCB7IDU5OiA1OSwgNTg6IDYwLCA0OiAkVjksIDU6ICRWYSwgODogJFZ6LCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCAxODogJFZBLCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0pLCBvKCRWNywgWzIsIDU5XSwgeyA1OTogNTksIDU4OiA2MCwgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9KSwgbygkVjcsIFsyLCA2MF0sIHsgNTk6IDU5LCA1ODogNjAsIDQ6ICRWOSwgNTogJFZhLCA4OiAkVnosIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVkEsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIHsgNDU6IFsxLCA3OV0gfSwgeyA0NDogWzEsIDgwXSB9LCBvKCRWQiwgWzIsIDY1XSksIG8oJFZCLCBbMiwgODFdKSwgbygkVkIsIFsyLCA4Ml0pLCBvKCRWQiwgWzIsIDgzXSksIHsgMzogODIsIDQ6ICRWQywgNTogJFZELCA2OiAkVkUsIDc6ICRWRiwgODogJFZHLCA5OiAkVkgsIDEwOiAkVkksIDExOiAkVkosIDEyOiAkVkssIDEzOiAkVkwsIDE0OiAkVk0sIDE1OiAkVk4sIDE4OiBbMSwgODFdIH0sIG8oJFZPLCBbMiwgMjNdKSwgbygkVk8sIFsyLCAxXSksIG8oJFZPLCBbMiwgMl0pLCBvKCRWTywgWzIsIDNdKSwgbygkVk8sIFsyLCA0XSksIG8oJFZPLCBbMiwgNV0pLCBvKCRWTywgWzIsIDZdKSwgbygkVk8sIFsyLCA3XSksIG8oJFZPLCBbMiwgOF0pLCBvKCRWTywgWzIsIDldKSwgbygkVk8sIFsyLCAxMF0pLCBvKCRWTywgWzIsIDExXSksIG8oJFZPLCBbMiwgMTJdKSwgbygkVjcsIFsyLCA1Ml0sIHsgNTg6IDMxLCA0MzogODMsIDQ6ICRWOSwgNTogJFZhLCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0pLCBvKCRWNywgWzIsIDU1XSwgeyA1ODogMzEsIDQzOiA4NCwgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDYwOiAkVnMsIDYxOiAkVnQsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIHsgNDY6IFsxLCA4NV0gfSwgeyA0NTogWzEsIDg2XSB9LCB7IDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTY6IDg5LCAxNzogJFZWLCAxODogJFZXLCAxOTogJFZYLCAyMDogJFZZLCAyMjogODgsIDIzOiA4NyB9LCBvKCRWTywgWzIsIDI0XSksIG8oJFY3LCBbMiwgNTFdLCB7IDU5OiA1OSwgNTg6IDYwLCA0OiAkVjksIDU6ICRWYSwgODogJFZ6LCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCAxODogJFZBLCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0pLCBvKCRWNywgWzIsIDU0XSwgeyA1OTogNTksIDU4OiA2MCwgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9KSwgbygkVjcsIFsyLCA0N10sIHsgMjI6IDg4LCAxNjogODksIDIzOiAxMDAsIDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSB9KSwgeyA0NjogWzEsIDEwMV0gfSwgbygkVjcsIFsyLCAyOV0sIHsgMTA6ICRWWiB9KSwgbygkVl8sIFsyLCAyN10sIHsgMTY6IDEwMywgNDogJFZQLCA1OiAkVlEsIDY6ICRWUiwgODogJFZTLCAxMTogJFZULCAxMzogJFZVLCAxNzogJFZWLCAxODogJFZXLCAxOTogJFZYLCAyMDogJFZZIH0pLCBvKCRWJCwgWzIsIDI1XSksIG8oJFYkLCBbMiwgMTNdKSwgbygkViQsIFsyLCAxNF0pLCBvKCRWJCwgWzIsIDE1XSksIG8oJFYkLCBbMiwgMTZdKSwgbygkViQsIFsyLCAxN10pLCBvKCRWJCwgWzIsIDE4XSksIG8oJFYkLCBbMiwgMTldKSwgbygkViQsIFsyLCAyMF0pLCBvKCRWJCwgWzIsIDIxXSksIG8oJFYkLCBbMiwgMjJdKSwgbygkVjcsIFsyLCA0OV0sIHsgMTA6ICRWWiB9KSwgbygkVjcsIFsyLCA0OF0sIHsgMjI6IDg4LCAxNjogODksIDIzOiAxMDQsIDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSB9KSwgeyA0OiAkVlAsIDU6ICRWUSwgNjogJFZSLCA4OiAkVlMsIDExOiAkVlQsIDEzOiAkVlUsIDE2OiA4OSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSwgMjI6IDEwNSB9LCBvKCRWJCwgWzIsIDI2XSksIG8oJFY3LCBbMiwgNTBdLCB7IDEwOiAkVlogfSksIG8oJFZfLCBbMiwgMjhdLCB7IDE2OiAxMDMsIDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSB9KV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgODogWzIsIDMwXSwgOTogWzIsIDMxXSB9LFxuICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShwb3BTdGFjaywgXCJwb3BTdGFja1wiKTtcbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgX19uYW1lKGxleCwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwicGFyc2VcIilcbiAgfTtcbiAgdmFyIGxleGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwic2V0SW5wdXRcIiksXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LCBcImlucHV0XCIpLFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJ1bnB1dFwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcIm1vcmVcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJyZWplY3RcIiksXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LCBcImxlc3NcIiksXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwicGFzdElucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJ1cGNvbWluZ0lucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSwgXCJzaG93UG9zaXRpb25cIiksXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sIFwidGVzdF9tYXRjaFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibmV4dFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibGV4XCIpLFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sIFwiYmVnaW5cIiksXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwb3BTdGF0ZVwiKSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiX2N1cnJlbnRSdWxlc1wiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sIFwidG9wU3RhdGVcIiksXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSwgXCJwdXNoU3RhdGVcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sIFwic3RhdGVTdGFja1NpemVcIiksXG4gICAgICBvcHRpb25zOiB7IFwiY2FzZS1pbnNlbnNpdGl2ZVwiOiB0cnVlIH0sXG4gICAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICB2YXIgWVlTVEFURSA9IFlZX1NUQVJUO1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJ0aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgcmV0dXJuIDUxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwibWRfc3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiBcIk1EX1NUUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2xhc3NfbmFtZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBvaW50X3N0YXJ0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJwb2ludF94XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicG9pbnRfeVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHJldHVybiAxMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiAxMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICByZXR1cm4gNjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgcmV0dXJuIDY2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICByZXR1cm4gNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gNTc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86JSUoPyFcXHspW15cXG5dKikvaSwgL14oPzpbXlxcfV0lJVteXFxuXSopL2ksIC9eKD86W1xcblxccl0rKS9pLCAvXig/OiUlW15cXG5dKikvaSwgL14oPzp0aXRsZVxcYikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86ICp4LWF4aXMgKikvaSwgL14oPzogKnktYXhpcyAqKS9pLCAvXig/OiAqLS0rPiAqKS9pLCAvXig/OiAqcXVhZHJhbnQtMSAqKS9pLCAvXig/OiAqcXVhZHJhbnQtMiAqKS9pLCAvXig/OiAqcXVhZHJhbnQtMyAqKS9pLCAvXig/OiAqcXVhZHJhbnQtNCAqKS9pLCAvXig/OmNsYXNzRGVmXFxiKS9pLCAvXig/OltcIl1bYF0pL2ksIC9eKD86W15gXCJdKykvaSwgL14oPzpbYF1bXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86Ojo6KS9pLCAvXig/Ol5cXHcrKS9pLCAvXig/Olxccyo6XFxzKlxcW1xccyopL2ksIC9eKD86KDEpfCgwKC5cXGQrKT8pKS9pLCAvXig/OlxccypcXF0gKikvaSwgL14oPzpcXHMqLFxccyopL2ksIC9eKD86KDEpfCgwKC5cXGQrKT8pKS9pLCAvXig/OiAqcXVhZHJhbnRDaGFydCAqKS9pLCAvXig/OltBLVphLXpdKykvaSwgL14oPzo6KS9pLCAvXig/OlxcKykvaSwgL14oPzosKS9pLCAvXig/Oj0pL2ksIC9eKD86PSkvaSwgL14oPzpcXCopL2ksIC9eKD86IykvaSwgL14oPzpbXFxfXSkvaSwgL14oPzpcXC4pL2ksIC9eKD86JikvaSwgL14oPzotKS9pLCAvXig/OlswLTldKykvaSwgL14oPzpcXHMpL2ksIC9eKD86OykvaSwgL14oPzpbIVwiIyQlJicqKywtLmA/XFxcXF8vXSkvaSwgL14oPzokKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJjbGFzc19uYW1lXCI6IHsgXCJydWxlc1wiOiBbMjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInBvaW50X3lcIjogeyBcInJ1bGVzXCI6IFszM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicG9pbnRfeFwiOiB7IFwicnVsZXNcIjogWzMyXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJwb2ludF9zdGFydFwiOiB7IFwicnVsZXNcIjogWzMwLCAzMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzExLCAxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbOV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidGl0bGVcIjogeyBcInJ1bGVzXCI6IFs1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJtZF9zdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyMiwgMjNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ1wiOiB7IFwicnVsZXNcIjogWzI1LCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDYsIDgsIDEwLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyNCwgMjcsIDI5LCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxXSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIF9fbmFtZShQYXJzZXIsIFwiUGFyc2VyXCIpO1xuICBQYXJzZXIucHJvdG90eXBlID0gcGFyc2VyMjtcbiAgcGFyc2VyMi5QYXJzZXIgPSBQYXJzZXI7XG4gIHJldHVybiBuZXcgUGFyc2VyKCk7XG59KCk7XG5wYXJzZXIucGFyc2VyID0gcGFyc2VyO1xudmFyIHF1YWRyYW50X2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9xdWFkcmFudC1jaGFydC9xdWFkcmFudEJ1aWxkZXIudHNcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzXCI7XG52YXIgZGVmYXVsdFRoZW1lVmFyaWFibGVzID0gZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbnZhciBRdWFkcmFudEJ1aWxkZXIgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xhc3NlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRDb25maWcoKTtcbiAgICB0aGlzLnRoZW1lQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmdldERlZmF1bHREYXRhKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJRdWFkcmFudEJ1aWxkZXJcIik7XG4gIH1cbiAgZ2V0RGVmYXVsdERhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlVGV4dDogXCJcIixcbiAgICAgIHF1YWRyYW50MVRleHQ6IFwiXCIsXG4gICAgICBxdWFkcmFudDJUZXh0OiBcIlwiLFxuICAgICAgcXVhZHJhbnQzVGV4dDogXCJcIixcbiAgICAgIHF1YWRyYW50NFRleHQ6IFwiXCIsXG4gICAgICB4QXhpc0xlZnRUZXh0OiBcIlwiLFxuICAgICAgeEF4aXNSaWdodFRleHQ6IFwiXCIsXG4gICAgICB5QXhpc0JvdHRvbVRleHQ6IFwiXCIsXG4gICAgICB5QXhpc1RvcFRleHQ6IFwiXCIsXG4gICAgICBwb2ludHM6IFtdXG4gICAgfTtcbiAgfVxuICBnZXREZWZhdWx0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93WEF4aXM6IHRydWUsXG4gICAgICBzaG93WUF4aXM6IHRydWUsXG4gICAgICBzaG93VGl0bGU6IHRydWUsXG4gICAgICBjaGFydEhlaWdodDogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGggfHwgNTAwLFxuICAgICAgY2hhcnRXaWR0aDogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0IHx8IDUwMCxcbiAgICAgIHRpdGxlUGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnRpdGxlUGFkZGluZyB8fCAxMCxcbiAgICAgIHRpdGxlRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py50aXRsZUZvbnRTaXplIHx8IDIwLFxuICAgICAgcXVhZHJhbnRQYWRkaW5nOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRQYWRkaW5nIHx8IDUsXG4gICAgICB4QXhpc0xhYmVsUGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnhBeGlzTGFiZWxQYWRkaW5nIHx8IDUsXG4gICAgICB5QXhpc0xhYmVsUGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnlBeGlzTGFiZWxQYWRkaW5nIHx8IDUsXG4gICAgICB4QXhpc0xhYmVsRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsRm9udFNpemUgfHwgMTYsXG4gICAgICB5QXhpc0xhYmVsRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsRm9udFNpemUgfHwgMTYsXG4gICAgICBxdWFkcmFudExhYmVsRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py5xdWFkcmFudExhYmVsRm9udFNpemUgfHwgMTYsXG4gICAgICBxdWFkcmFudFRleHRUb3BQYWRkaW5nOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRUZXh0VG9wUGFkZGluZyB8fCA1LFxuICAgICAgcG9pbnRUZXh0UGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnBvaW50VGV4dFBhZGRpbmcgfHwgNSxcbiAgICAgIHBvaW50TGFiZWxGb250U2l6ZTogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnBvaW50TGFiZWxGb250U2l6ZSB8fCAxMixcbiAgICAgIHBvaW50UmFkaXVzOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucG9pbnRSYWRpdXMgfHwgNSxcbiAgICAgIHhBeGlzUG9zaXRpb246IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py54QXhpc1Bvc2l0aW9uIHx8IFwidG9wXCIsXG4gICAgICB5QXhpc1Bvc2l0aW9uOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ueUF4aXNQb3NpdGlvbiB8fCBcImxlZnRcIixcbiAgICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCB8fCAxLFxuICAgICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoIHx8IDJcbiAgICB9O1xuICB9XG4gIGdldERlZmF1bHRUaGVtZUNvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVhZHJhbnQxRmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50MUZpbGwsXG4gICAgICBxdWFkcmFudDJGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQyRmlsbCxcbiAgICAgIHF1YWRyYW50M0ZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudDNGaWxsLFxuICAgICAgcXVhZHJhbnQ0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50NEZpbGwsXG4gICAgICBxdWFkcmFudDFUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50MVRleHRGaWxsLFxuICAgICAgcXVhZHJhbnQyVGV4dEZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudDJUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50M1RleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQzVGV4dEZpbGwsXG4gICAgICBxdWFkcmFudDRUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50NFRleHRGaWxsLFxuICAgICAgcXVhZHJhbnRQb2ludEZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudFBvaW50RmlsbCxcbiAgICAgIHF1YWRyYW50UG9pbnRUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50WEF4aXNUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50WUF4aXNUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50VGl0bGVGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnRUaXRsZUZpbGwsXG4gICAgICBxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbFxuICAgIH07XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRDb25maWcoKTtcbiAgICB0aGlzLnRoZW1lQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmdldERlZmF1bHREYXRhKCk7XG4gICAgdGhpcy5jbGFzc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBsb2cuaW5mbyhcImNsZWFyIGNhbGxlZFwiKTtcbiAgfVxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSB7IC4uLnRoaXMuZGF0YSwgLi4uZGF0YSB9O1xuICB9XG4gIGFkZFBvaW50cyhwb2ludHMpIHtcbiAgICB0aGlzLmRhdGEucG9pbnRzID0gWy4uLnBvaW50cywgLi4udGhpcy5kYXRhLnBvaW50c107XG4gIH1cbiAgYWRkQ2xhc3MoY2xhc3NOYW1lLCBzdHlsZXMpIHtcbiAgICB0aGlzLmNsYXNzZXMuc2V0KGNsYXNzTmFtZSwgc3R5bGVzKTtcbiAgfVxuICBzZXRDb25maWcoY29uZmlnMikge1xuICAgIGxvZy50cmFjZShcInNldENvbmZpZyBjYWxsZWQgd2l0aDogXCIsIGNvbmZpZzIpO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4uY29uZmlnMiB9O1xuICB9XG4gIHNldFRoZW1lQ29uZmlnKHRoZW1lQ29uZmlnKSB7XG4gICAgbG9nLnRyYWNlKFwic2V0VGhlbWVDb25maWcgY2FsbGVkIHdpdGg6IFwiLCB0aGVtZUNvbmZpZyk7XG4gICAgdGhpcy50aGVtZUNvbmZpZyA9IHsgLi4udGhpcy50aGVtZUNvbmZpZywgLi4udGhlbWVDb25maWcgfTtcbiAgfVxuICBjYWxjdWxhdGVTcGFjZSh4QXhpc1Bvc2l0aW9uLCBzaG93WEF4aXMsIHNob3dZQXhpcywgc2hvd1RpdGxlKSB7XG4gICAgY29uc3QgeEF4aXNTcGFjZUNhbGN1bGF0aW9uID0gdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKiAyICsgdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplO1xuICAgIGNvbnN0IHhBeGlzU3BhY2UgPSB7XG4gICAgICB0b3A6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgJiYgc2hvd1hBeGlzID8geEF4aXNTcGFjZUNhbGN1bGF0aW9uIDogMCxcbiAgICAgIGJvdHRvbTogeEF4aXNQb3NpdGlvbiA9PT0gXCJib3R0b21cIiAmJiBzaG93WEF4aXMgPyB4QXhpc1NwYWNlQ2FsY3VsYXRpb24gOiAwXG4gICAgfTtcbiAgICBjb25zdCB5QXhpc1NwYWNlQ2FsY3VsYXRpb24gPSB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyAqIDIgKyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemU7XG4gICAgY29uc3QgeUF4aXNTcGFjZSA9IHtcbiAgICAgIGxlZnQ6IHRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb24gPT09IFwibGVmdFwiICYmIHNob3dZQXhpcyA/IHlBeGlzU3BhY2VDYWxjdWxhdGlvbiA6IDAsXG4gICAgICByaWdodDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJyaWdodFwiICYmIHNob3dZQXhpcyA/IHlBeGlzU3BhY2VDYWxjdWxhdGlvbiA6IDBcbiAgICB9O1xuICAgIGNvbnN0IHRpdGxlU3BhY2VDYWxjdWxhdGlvbiA9IHRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUgKyB0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcgKiAyO1xuICAgIGNvbnN0IHRpdGxlU3BhY2UgPSB7XG4gICAgICB0b3A6IHNob3dUaXRsZSA/IHRpdGxlU3BhY2VDYWxjdWxhdGlvbiA6IDBcbiAgICB9O1xuICAgIGNvbnN0IHF1YWRyYW50TGVmdCA9IHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyArIHlBeGlzU3BhY2UubGVmdDtcbiAgICBjb25zdCBxdWFkcmFudFRvcCA9IHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyArIHhBeGlzU3BhY2UudG9wICsgdGl0bGVTcGFjZS50b3A7XG4gICAgY29uc3QgcXVhZHJhbnRXaWR0aCA9IHRoaXMuY29uZmlnLmNoYXJ0V2lkdGggLSB0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcgKiAyIC0geUF4aXNTcGFjZS5sZWZ0IC0geUF4aXNTcGFjZS5yaWdodDtcbiAgICBjb25zdCBxdWFkcmFudEhlaWdodCA9IHRoaXMuY29uZmlnLmNoYXJ0SGVpZ2h0IC0gdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nICogMiAtIHhBeGlzU3BhY2UudG9wIC0geEF4aXNTcGFjZS5ib3R0b20gLSB0aXRsZVNwYWNlLnRvcDtcbiAgICBjb25zdCBxdWFkcmFudEhhbGZXaWR0aCA9IHF1YWRyYW50V2lkdGggLyAyO1xuICAgIGNvbnN0IHF1YWRyYW50SGFsZkhlaWdodCA9IHF1YWRyYW50SGVpZ2h0IC8gMjtcbiAgICBjb25zdCBxdWFkcmFudFNwYWNlID0ge1xuICAgICAgcXVhZHJhbnRMZWZ0LFxuICAgICAgcXVhZHJhbnRUb3AsXG4gICAgICBxdWFkcmFudFdpZHRoLFxuICAgICAgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICBxdWFkcmFudEhlaWdodCxcbiAgICAgIHF1YWRyYW50SGFsZkhlaWdodFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHhBeGlzU3BhY2UsXG4gICAgICB5QXhpc1NwYWNlLFxuICAgICAgdGl0bGVTcGFjZSxcbiAgICAgIHF1YWRyYW50U3BhY2VcbiAgICB9O1xuICB9XG4gIGdldEF4aXNMYWJlbHMoeEF4aXNQb3NpdGlvbiwgc2hvd1hBeGlzLCBzaG93WUF4aXMsIHNwYWNlRGF0YSkge1xuICAgIGNvbnN0IHsgcXVhZHJhbnRTcGFjZSwgdGl0bGVTcGFjZSB9ID0gc3BhY2VEYXRhO1xuICAgIGNvbnN0IHtcbiAgICAgIHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgIHF1YWRyYW50SGVpZ2h0LFxuICAgICAgcXVhZHJhbnRMZWZ0LFxuICAgICAgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICBxdWFkcmFudFRvcCxcbiAgICAgIHF1YWRyYW50V2lkdGhcbiAgICB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCBkcmF3WEF4aXNMYWJlbHNJbk1pZGRsZSA9IEJvb2xlYW4odGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KTtcbiAgICBjb25zdCBkcmF3WUF4aXNMYWJlbHNJbk1pZGRsZSA9IEJvb2xlYW4odGhpcy5kYXRhLnlBeGlzVG9wVGV4dCk7XG4gICAgY29uc3QgYXhpc0xhYmVscyA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCAmJiBzaG93WEF4aXMpIHtcbiAgICAgIGF4aXNMYWJlbHMucHVzaCh7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgKGRyYXdYQXhpc0xhYmVsc0luTWlkZGxlID8gcXVhZHJhbnRIYWxmV2lkdGggLyAyIDogMCksXG4gICAgICAgIHk6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgPyB0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZyArIHRpdGxlU3BhY2UudG9wIDogdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKyBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0ICsgdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd1hBeGlzTGFiZWxzSW5NaWRkbGUgPyBcImNlbnRlclwiIDogXCJsZWZ0XCIsXG4gICAgICAgIGhvcml6b250YWxQb3M6IFwidG9wXCIsXG4gICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCAmJiBzaG93WEF4aXMpIHtcbiAgICAgIGF4aXNMYWJlbHMucHVzaCh7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwsXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50SGFsZldpZHRoICsgKGRyYXdYQXhpc0xhYmVsc0luTWlkZGxlID8gcXVhZHJhbnRIYWxmV2lkdGggLyAyIDogMCksXG4gICAgICAgIHk6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgPyB0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZyArIHRpdGxlU3BhY2UudG9wIDogdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKyBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0ICsgdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd1hBeGlzTGFiZWxzSW5NaWRkbGUgPyBcImNlbnRlclwiIDogXCJsZWZ0XCIsXG4gICAgICAgIGhvcml6b250YWxQb3M6IFwidG9wXCIsXG4gICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQgJiYgc2hvd1lBeGlzKSB7XG4gICAgICBheGlzTGFiZWxzLnB1c2goe1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyA6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nICsgcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIChkcmF3WUF4aXNMYWJlbHNJbk1pZGRsZSA/IHF1YWRyYW50SGFsZkhlaWdodCAvIDIgOiAwKSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSxcbiAgICAgICAgdmVydGljYWxQb3M6IGRyYXdZQXhpc0xhYmVsc0luTWlkZGxlID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiLFxuICAgICAgICBob3Jpem9udGFsUG9zOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogLTkwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS55QXhpc1RvcFRleHQgJiYgc2hvd1lBeGlzKSB7XG4gICAgICBheGlzTGFiZWxzLnB1c2goe1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEueUF4aXNUb3BUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyA6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nICsgcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHQgLSAoZHJhd1lBeGlzTGFiZWxzSW5NaWRkbGUgPyBxdWFkcmFudEhhbGZIZWlnaHQgLyAyIDogMCksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsXG4gICAgICAgIHZlcnRpY2FsUG9zOiBkcmF3WUF4aXNMYWJlbHNJbk1pZGRsZSA/IFwiY2VudGVyXCIgOiBcImxlZnRcIixcbiAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgcm90YXRpb246IC05MFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBheGlzTGFiZWxzO1xuICB9XG4gIGdldFF1YWRyYW50cyhzcGFjZURhdGEpIHtcbiAgICBjb25zdCB7IHF1YWRyYW50U3BhY2UgfSA9IHNwYWNlRGF0YTtcbiAgICBjb25zdCB7IHF1YWRyYW50SGFsZkhlaWdodCwgcXVhZHJhbnRMZWZ0LCBxdWFkcmFudEhhbGZXaWR0aCwgcXVhZHJhbnRUb3AgfSA9IHF1YWRyYW50U3BhY2U7XG4gICAgY29uc3QgcXVhZHJhbnRzID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogdGhpcy5kYXRhLnF1YWRyYW50MVRleHQsXG4gICAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDFUZXh0RmlsbCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJjZW50ZXJcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICB5OiBxdWFkcmFudFRvcCxcbiAgICAgICAgd2lkdGg6IHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDFGaWxsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogdGhpcy5kYXRhLnF1YWRyYW50MlRleHQsXG4gICAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJjZW50ZXJcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AsXG4gICAgICAgIHdpZHRoOiBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDoge1xuICAgICAgICAgIHRleHQ6IHRoaXMuZGF0YS5xdWFkcmFudDNUZXh0LFxuICAgICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJtaWRkbGVcIixcbiAgICAgICAgICByb3RhdGlvbjogMFxuICAgICAgICB9LFxuICAgICAgICB4OiBxdWFkcmFudExlZnQsXG4gICAgICAgIHk6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICB3aWR0aDogcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIGhlaWdodDogcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLmRhdGEucXVhZHJhbnQ0VGV4dCxcbiAgICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwibWlkZGxlXCIsXG4gICAgICAgICAgcm90YXRpb246IDBcbiAgICAgICAgfSxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIHk6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICB3aWR0aDogcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIGhlaWdodDogcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGxcbiAgICAgIH1cbiAgICBdO1xuICAgIGZvciAoY29uc3QgcXVhZHJhbnQgb2YgcXVhZHJhbnRzKSB7XG4gICAgICBxdWFkcmFudC50ZXh0LnggPSBxdWFkcmFudC54ICsgcXVhZHJhbnQud2lkdGggLyAyO1xuICAgICAgaWYgKHRoaXMuZGF0YS5wb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHF1YWRyYW50LnRleHQueSA9IHF1YWRyYW50LnkgKyBxdWFkcmFudC5oZWlnaHQgLyAyO1xuICAgICAgICBxdWFkcmFudC50ZXh0Lmhvcml6b250YWxQb3MgPSBcIm1pZGRsZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVhZHJhbnQudGV4dC55ID0gcXVhZHJhbnQueSArIHRoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmc7XG4gICAgICAgIHF1YWRyYW50LnRleHQuaG9yaXpvbnRhbFBvcyA9IFwidG9wXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWFkcmFudHM7XG4gIH1cbiAgZ2V0UXVhZHJhbnRQb2ludHMoc3BhY2VEYXRhKSB7XG4gICAgY29uc3QgeyBxdWFkcmFudFNwYWNlIH0gPSBzcGFjZURhdGE7XG4gICAgY29uc3QgeyBxdWFkcmFudEhlaWdodCwgcXVhZHJhbnRMZWZ0LCBxdWFkcmFudFRvcCwgcXVhZHJhbnRXaWR0aCB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCB4QXhpcyA9IHNjYWxlTGluZWFyKCkuZG9tYWluKFswLCAxXSkucmFuZ2UoW3F1YWRyYW50TGVmdCwgcXVhZHJhbnRXaWR0aCArIHF1YWRyYW50TGVmdF0pO1xuICAgIGNvbnN0IHlBeGlzID0gc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIDFdKS5yYW5nZShbcXVhZHJhbnRIZWlnaHQgKyBxdWFkcmFudFRvcCwgcXVhZHJhbnRUb3BdKTtcbiAgICBjb25zdCBwb2ludHMgPSB0aGlzLmRhdGEucG9pbnRzLm1hcCgocG9pbnQpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzU3R5bGVzID0gdGhpcy5jbGFzc2VzLmdldChwb2ludC5jbGFzc05hbWUpO1xuICAgICAgaWYgKGNsYXNzU3R5bGVzKSB7XG4gICAgICAgIHBvaW50ID0geyAuLi5jbGFzc1N0eWxlcywgLi4ucG9pbnQgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICB4OiB4QXhpcyhwb2ludC54KSxcbiAgICAgICAgeTogeUF4aXMocG9pbnQueSksXG4gICAgICAgIGZpbGw6IHBvaW50LmNvbG9yID8/IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwsXG4gICAgICAgIHJhZGl1czogcG9pbnQucmFkaXVzID8/IHRoaXMuY29uZmlnLnBvaW50UmFkaXVzLFxuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogcG9pbnQudGV4dCxcbiAgICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxcbiAgICAgICAgICB4OiB4QXhpcyhwb2ludC54KSxcbiAgICAgICAgICB5OiB5QXhpcyhwb2ludC55KSArIHRoaXMuY29uZmlnLnBvaW50VGV4dFBhZGRpbmcsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcucG9pbnRMYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHN0cm9rZUNvbG9yOiBwb2ludC5zdHJva2VDb2xvciA/PyB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogcG9pbnQuc3Ryb2tlV2lkdGggPz8gXCIwcHhcIlxuICAgICAgfTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9KTtcbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG4gIGdldEJvcmRlcnMoc3BhY2VEYXRhKSB7XG4gICAgY29uc3QgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGggPSB0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGggLyAyO1xuICAgIGNvbnN0IHsgcXVhZHJhbnRTcGFjZSB9ID0gc3BhY2VEYXRhO1xuICAgIGNvbnN0IHtcbiAgICAgIHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgIHF1YWRyYW50SGVpZ2h0LFxuICAgICAgcXVhZHJhbnRMZWZ0LFxuICAgICAgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICBxdWFkcmFudFRvcCxcbiAgICAgIHF1YWRyYW50V2lkdGhcbiAgICB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCBib3JkZXJMaW5lcyA9IFtcbiAgICAgIC8vIHRvcCBib3JkZXJcbiAgICAgIHtcbiAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCxcbiAgICAgICAgeDE6IHF1YWRyYW50TGVmdCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MTogcXVhZHJhbnRUb3AsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkyOiBxdWFkcmFudFRvcFxuICAgICAgfSxcbiAgICAgIC8vIHJpZ2h0IGJvcmRlclxuICAgICAge1xuICAgICAgICBzdHJva2VGaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLFxuICAgICAgICB4MTogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoXG4gICAgICB9LFxuICAgICAgLy8gYm90dG9tIGJvcmRlclxuICAgICAge1xuICAgICAgICBzdHJva2VGaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLFxuICAgICAgICB4MTogcXVhZHJhbnRMZWZ0IC0gaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkxOiBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0LFxuICAgICAgICB4MjogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodFxuICAgICAgfSxcbiAgICAgIC8vIGxlZnQgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQsXG4gICAgICAgIHkxOiBxdWFkcmFudFRvcCArIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB4MjogcXVhZHJhbnRMZWZ0LFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoXG4gICAgICB9LFxuICAgICAgLy8gdmVydGljYWwgaW5uZXIgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgeTI6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIZWlnaHQgLSBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aFxuICAgICAgfSxcbiAgICAgIC8vIGhvcml6b250YWwgaW5uZXIgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQgKyBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICB4MjogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHRcbiAgICAgIH1cbiAgICBdO1xuICAgIHJldHVybiBib3JkZXJMaW5lcztcbiAgfVxuICBnZXRUaXRsZShzaG93VGl0bGUpIHtcbiAgICBpZiAoc2hvd1RpdGxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEudGl0bGVUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50VGl0bGVGaWxsLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxcbiAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICB5OiB0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcsXG4gICAgICAgIHg6IHRoaXMuY29uZmlnLmNoYXJ0V2lkdGggLyAyXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgYnVpbGQoKSB7XG4gICAgY29uc3Qgc2hvd1hBeGlzID0gdGhpcy5jb25maWcuc2hvd1hBeGlzICYmICEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0IHx8IHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCk7XG4gICAgY29uc3Qgc2hvd1lBeGlzID0gdGhpcy5jb25maWcuc2hvd1lBeGlzICYmICEhKHRoaXMuZGF0YS55QXhpc1RvcFRleHQgfHwgdGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCk7XG4gICAgY29uc3Qgc2hvd1RpdGxlID0gdGhpcy5jb25maWcuc2hvd1RpdGxlICYmICEhdGhpcy5kYXRhLnRpdGxlVGV4dDtcbiAgICBjb25zdCB4QXhpc1Bvc2l0aW9uID0gdGhpcy5kYXRhLnBvaW50cy5sZW5ndGggPiAwID8gXCJib3R0b21cIiA6IHRoaXMuY29uZmlnLnhBeGlzUG9zaXRpb247XG4gICAgY29uc3QgY2FsY3VsYXRlZFNwYWNlID0gdGhpcy5jYWxjdWxhdGVTcGFjZSh4QXhpc1Bvc2l0aW9uLCBzaG93WEF4aXMsIHNob3dZQXhpcywgc2hvd1RpdGxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnRzOiB0aGlzLmdldFF1YWRyYW50UG9pbnRzKGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICBxdWFkcmFudHM6IHRoaXMuZ2V0UXVhZHJhbnRzKGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICBheGlzTGFiZWxzOiB0aGlzLmdldEF4aXNMYWJlbHMoeEF4aXNQb3NpdGlvbiwgc2hvd1hBeGlzLCBzaG93WUF4aXMsIGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICBib3JkZXJMaW5lczogdGhpcy5nZXRCb3JkZXJzKGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShzaG93VGl0bGUpXG4gICAgfTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3F1YWRyYW50LWNoYXJ0L3V0aWxzLnRzXG52YXIgSW52YWxpZFN0eWxlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJJbnZhbGlkU3R5bGVFcnJvclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihzdHlsZSwgdmFsdWUsIHR5cGUpIHtcbiAgICBzdXBlcihgdmFsdWUgZm9yICR7c3R5bGV9ICR7dmFsdWV9IGlzIGludmFsaWQsIHBsZWFzZSB1c2UgYSB2YWxpZCAke3R5cGV9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkU3R5bGVFcnJvclwiO1xuICB9XG59O1xuZnVuY3Rpb24gdmFsaWRhdGVIZXhDb2RlKHZhbHVlKSB7XG4gIHJldHVybiAhL14jPyhbXFxkQS1GYS1mXXs2fXxbXFxkQS1GYS1mXXszfSkkLy50ZXN0KHZhbHVlKTtcbn1cbl9fbmFtZSh2YWxpZGF0ZUhleENvZGUsIFwidmFsaWRhdGVIZXhDb2RlXCIpO1xuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuICEvXlxcZCskLy50ZXN0KHZhbHVlKTtcbn1cbl9fbmFtZSh2YWxpZGF0ZU51bWJlciwgXCJ2YWxpZGF0ZU51bWJlclwiKTtcbmZ1bmN0aW9uIHZhbGlkYXRlU2l6ZUluUGl4ZWxzKHZhbHVlKSB7XG4gIHJldHVybiAhL15cXGQrcHgkLy50ZXN0KHZhbHVlKTtcbn1cbl9fbmFtZSh2YWxpZGF0ZVNpemVJblBpeGVscywgXCJ2YWxpZGF0ZVNpemVJblBpeGVsc1wiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3F1YWRyYW50LWNoYXJ0L3F1YWRyYW50RGIudHNcbnZhciBjb25maWcgPSBnZXRDb25maWcoKTtcbmZ1bmN0aW9uIHRleHRTYW5pdGl6ZXIodGV4dCkge1xuICByZXR1cm4gc2FuaXRpemVUZXh0KHRleHQudHJpbSgpLCBjb25maWcpO1xufVxuX19uYW1lKHRleHRTYW5pdGl6ZXIsIFwidGV4dFNhbml0aXplclwiKTtcbnZhciBxdWFkcmFudEJ1aWxkZXIgPSBuZXcgUXVhZHJhbnRCdWlsZGVyKCk7XG5mdW5jdGlvbiBzZXRRdWFkcmFudDFUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyBxdWFkcmFudDFUZXh0OiB0ZXh0U2FuaXRpemVyKHRleHRPYmoudGV4dCkgfSk7XG59XG5fX25hbWUoc2V0UXVhZHJhbnQxVGV4dCwgXCJzZXRRdWFkcmFudDFUZXh0XCIpO1xuZnVuY3Rpb24gc2V0UXVhZHJhbnQyVGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgcXVhZHJhbnQyVGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuX19uYW1lKHNldFF1YWRyYW50MlRleHQsIFwic2V0UXVhZHJhbnQyVGV4dFwiKTtcbmZ1bmN0aW9uIHNldFF1YWRyYW50M1RleHQodGV4dE9iaikge1xuICBxdWFkcmFudEJ1aWxkZXIuc2V0RGF0YSh7IHF1YWRyYW50M1RleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbl9fbmFtZShzZXRRdWFkcmFudDNUZXh0LCBcInNldFF1YWRyYW50M1RleHRcIik7XG5mdW5jdGlvbiBzZXRRdWFkcmFudDRUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyBxdWFkcmFudDRUZXh0OiB0ZXh0U2FuaXRpemVyKHRleHRPYmoudGV4dCkgfSk7XG59XG5fX25hbWUoc2V0UXVhZHJhbnQ0VGV4dCwgXCJzZXRRdWFkcmFudDRUZXh0XCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNMZWZ0VGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgeEF4aXNMZWZ0VGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuX19uYW1lKHNldFhBeGlzTGVmdFRleHQsIFwic2V0WEF4aXNMZWZ0VGV4dFwiKTtcbmZ1bmN0aW9uIHNldFhBeGlzUmlnaHRUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB4QXhpc1JpZ2h0VGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuX19uYW1lKHNldFhBeGlzUmlnaHRUZXh0LCBcInNldFhBeGlzUmlnaHRUZXh0XCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNUb3BUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB5QXhpc1RvcFRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbl9fbmFtZShzZXRZQXhpc1RvcFRleHQsIFwic2V0WUF4aXNUb3BUZXh0XCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNCb3R0b21UZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB5QXhpc0JvdHRvbVRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbl9fbmFtZShzZXRZQXhpc0JvdHRvbVRleHQsIFwic2V0WUF4aXNCb3R0b21UZXh0XCIpO1xuZnVuY3Rpb24gcGFyc2VTdHlsZXMoc3R5bGVzKSB7XG4gIGNvbnN0IHN0eWxlc09iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0eWxlIG9mIHN0eWxlcykge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHN0eWxlLnRyaW0oKS5zcGxpdCgvXFxzKjpcXHMqLyk7XG4gICAgaWYgKGtleSA9PT0gXCJyYWRpdXNcIikge1xuICAgICAgaWYgKHZhbGlkYXRlTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0eWxlRXJyb3Ioa2V5LCB2YWx1ZSwgXCJudW1iZXJcIik7XG4gICAgICB9XG4gICAgICBzdHlsZXNPYmplY3QucmFkaXVzID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImNvbG9yXCIpIHtcbiAgICAgIGlmICh2YWxpZGF0ZUhleENvZGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkU3R5bGVFcnJvcihrZXksIHZhbHVlLCBcImhleCBjb2RlXCIpO1xuICAgICAgfVxuICAgICAgc3R5bGVzT2JqZWN0LmNvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3Ryb2tlLWNvbG9yXCIpIHtcbiAgICAgIGlmICh2YWxpZGF0ZUhleENvZGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkU3R5bGVFcnJvcihrZXksIHZhbHVlLCBcImhleCBjb2RlXCIpO1xuICAgICAgfVxuICAgICAgc3R5bGVzT2JqZWN0LnN0cm9rZUNvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3Ryb2tlLXdpZHRoXCIpIHtcbiAgICAgIGlmICh2YWxpZGF0ZVNpemVJblBpeGVscyh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTdHlsZUVycm9yKGtleSwgdmFsdWUsIFwibnVtYmVyIG9mIHBpeGVscyAoZWcuIDEwcHgpXCIpO1xuICAgICAgfVxuICAgICAgc3R5bGVzT2JqZWN0LnN0cm9rZVdpZHRoID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc3R5bGUgbmFtZWQgJHtrZXl9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZXNPYmplY3Q7XG59XG5fX25hbWUocGFyc2VTdHlsZXMsIFwicGFyc2VTdHlsZXNcIik7XG5mdW5jdGlvbiBhZGRQb2ludCh0ZXh0T2JqLCBjbGFzc05hbWUsIHgsIHksIHN0eWxlcykge1xuICBjb25zdCBzdHlsZXNPYmplY3QgPSBwYXJzZVN0eWxlcyhzdHlsZXMpO1xuICBxdWFkcmFudEJ1aWxkZXIuYWRkUG9pbnRzKFtcbiAgICB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIC4uLnN0eWxlc09iamVjdFxuICAgIH1cbiAgXSk7XG59XG5fX25hbWUoYWRkUG9pbnQsIFwiYWRkUG9pbnRcIik7XG5mdW5jdGlvbiBhZGRDbGFzcyhjbGFzc05hbWUsIHN0eWxlcykge1xuICBxdWFkcmFudEJ1aWxkZXIuYWRkQ2xhc3MoY2xhc3NOYW1lLCBwYXJzZVN0eWxlcyhzdHlsZXMpKTtcbn1cbl9fbmFtZShhZGRDbGFzcywgXCJhZGRDbGFzc1wiKTtcbmZ1bmN0aW9uIHNldFdpZHRoKHdpZHRoKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXRDb25maWcoeyBjaGFydFdpZHRoOiB3aWR0aCB9KTtcbn1cbl9fbmFtZShzZXRXaWR0aCwgXCJzZXRXaWR0aFwiKTtcbmZ1bmN0aW9uIHNldEhlaWdodChoZWlnaHQpIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldENvbmZpZyh7IGNoYXJ0SGVpZ2h0OiBoZWlnaHQgfSk7XG59XG5fX25hbWUoc2V0SGVpZ2h0LCBcInNldEhlaWdodFwiKTtcbmZ1bmN0aW9uIGdldFF1YWRyYW50RGF0YSgpIHtcbiAgY29uc3QgY29uZmlnMiA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBxdWFkcmFudENoYXJ0OiBxdWFkcmFudENoYXJ0Q29uZmlnIH0gPSBjb25maWcyO1xuICBpZiAocXVhZHJhbnRDaGFydENvbmZpZykge1xuICAgIHF1YWRyYW50QnVpbGRlci5zZXRDb25maWcocXVhZHJhbnRDaGFydENvbmZpZyk7XG4gIH1cbiAgcXVhZHJhbnRCdWlsZGVyLnNldFRoZW1lQ29uZmlnKHtcbiAgICBxdWFkcmFudDFGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDFGaWxsLFxuICAgIHF1YWRyYW50MkZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50MkZpbGwsXG4gICAgcXVhZHJhbnQzRmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnQzRmlsbCxcbiAgICBxdWFkcmFudDRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDRGaWxsLFxuICAgIHF1YWRyYW50MVRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDFUZXh0RmlsbCxcbiAgICBxdWFkcmFudDJUZXh0RmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnQyVGV4dEZpbGwsXG4gICAgcXVhZHJhbnQzVGV4dEZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50M1RleHRGaWxsLFxuICAgIHF1YWRyYW50NFRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDRUZXh0RmlsbCxcbiAgICBxdWFkcmFudFBvaW50RmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnRQb2ludEZpbGwsXG4gICAgcXVhZHJhbnRQb2ludFRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFBvaW50VGV4dEZpbGwsXG4gICAgcXVhZHJhbnRYQXhpc1RleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwsXG4gICAgcXVhZHJhbnRZQXhpc1RleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwsXG4gICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICBxdWFkcmFudFRpdGxlRmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnRUaXRsZUZpbGxcbiAgfSk7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgdGl0bGVUZXh0OiBnZXREaWFncmFtVGl0bGUoKSB9KTtcbiAgcmV0dXJuIHF1YWRyYW50QnVpbGRlci5idWlsZCgpO1xufVxuX19uYW1lKGdldFF1YWRyYW50RGF0YSwgXCJnZXRRdWFkcmFudERhdGFcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcXVhZHJhbnRCdWlsZGVyLmNsZWFyKCk7XG4gIGNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIHF1YWRyYW50RGJfZGVmYXVsdCA9IHtcbiAgc2V0V2lkdGgsXG4gIHNldEhlaWdodCxcbiAgc2V0UXVhZHJhbnQxVGV4dCxcbiAgc2V0UXVhZHJhbnQyVGV4dCxcbiAgc2V0UXVhZHJhbnQzVGV4dCxcbiAgc2V0UXVhZHJhbnQ0VGV4dCxcbiAgc2V0WEF4aXNMZWZ0VGV4dCxcbiAgc2V0WEF4aXNSaWdodFRleHQsXG4gIHNldFlBeGlzVG9wVGV4dCxcbiAgc2V0WUF4aXNCb3R0b21UZXh0LFxuICBwYXJzZVN0eWxlcyxcbiAgYWRkUG9pbnQsXG4gIGFkZENsYXNzLFxuICBnZXRRdWFkcmFudERhdGEsXG4gIGNsZWFyOiBjbGVhcjIsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvblxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3F1YWRyYW50LWNoYXJ0L3F1YWRyYW50UmVuZGVyZXIudHNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikgPT4ge1xuICBmdW5jdGlvbiBnZXREb21pbmFudEJhc2VMaW5lKGhvcml6b250YWxQb3MpIHtcbiAgICByZXR1cm4gaG9yaXpvbnRhbFBvcyA9PT0gXCJ0b3BcIiA/IFwiaGFuZ2luZ1wiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBfX25hbWUoZ2V0RG9taW5hbnRCYXNlTGluZSwgXCJnZXREb21pbmFudEJhc2VMaW5lXCIpO1xuICBmdW5jdGlvbiBnZXRUZXh0QW5jaG9yKHZlcnRpY2FsUG9zKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsUG9zID09PSBcImxlZnRcIiA/IFwic3RhcnRcIiA6IFwibWlkZGxlXCI7XG4gIH1cbiAgX19uYW1lKGdldFRleHRBbmNob3IsIFwiZ2V0VGV4dEFuY2hvclwiKTtcbiAgZnVuY3Rpb24gZ2V0VHJhbnNmb3JtYXRpb24oZGF0YSkge1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZGF0YS54fSwgJHtkYXRhLnl9KSByb3RhdGUoJHtkYXRhLnJvdGF0aW9uIHx8IDB9KWA7XG4gIH1cbiAgX19uYW1lKGdldFRyYW5zZm9ybWF0aW9uLCBcImdldFRyYW5zZm9ybWF0aW9uXCIpO1xuICBjb25zdCBjb25mID0gZ2V0Q29uZmlnKCk7XG4gIGxvZy5kZWJ1ZyhcIlJlbmRlcmluZyBxdWFkcmFudCBjaGFydFxcblwiICsgdHh0KTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGNvbmYuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGdyb3VwID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWFpblwiKTtcbiAgY29uc3Qgd2lkdGggPSBjb25mLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGggPz8gNTAwO1xuICBjb25zdCBoZWlnaHQgPSBjb25mLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0ID8/IDUwMDtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgd2lkdGgsIGNvbmYucXVhZHJhbnRDaGFydD8udXNlTWF4V2lkdGggPz8gdHJ1ZSk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBcIjAgMCBcIiArIHdpZHRoICsgXCIgXCIgKyBoZWlnaHQpO1xuICBkaWFnT2JqLmRiLnNldEhlaWdodChoZWlnaHQpO1xuICBkaWFnT2JqLmRiLnNldFdpZHRoKHdpZHRoKTtcbiAgY29uc3QgcXVhZHJhbnREYXRhID0gZGlhZ09iai5kYi5nZXRRdWFkcmFudERhdGEoKTtcbiAgY29uc3QgcXVhZHJhbnRzR3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInF1YWRyYW50c1wiKTtcbiAgY29uc3QgYm9yZGVyR3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJvcmRlclwiKTtcbiAgY29uc3QgZGF0YVBvaW50R3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImRhdGEtcG9pbnRzXCIpO1xuICBjb25zdCBsYWJlbEdyb3VwID0gZ3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbHNcIik7XG4gIGNvbnN0IHRpdGxlR3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlXCIpO1xuICBpZiAocXVhZHJhbnREYXRhLnRpdGxlKSB7XG4gICAgdGl0bGVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJmaWxsXCIsIHF1YWRyYW50RGF0YS50aXRsZS5maWxsKS5hdHRyKFwiZm9udC1zaXplXCIsIHF1YWRyYW50RGF0YS50aXRsZS5mb250U2l6ZSkuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIGdldERvbWluYW50QmFzZUxpbmUocXVhZHJhbnREYXRhLnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgZ2V0VGV4dEFuY2hvcihxdWFkcmFudERhdGEudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKFwidHJhbnNmb3JtXCIsIGdldFRyYW5zZm9ybWF0aW9uKHF1YWRyYW50RGF0YS50aXRsZSkpLnRleHQocXVhZHJhbnREYXRhLnRpdGxlLnRleHQpO1xuICB9XG4gIGlmIChxdWFkcmFudERhdGEuYm9yZGVyTGluZXMpIHtcbiAgICBib3JkZXJHcm91cC5zZWxlY3RBbGwoXCJsaW5lXCIpLmRhdGEocXVhZHJhbnREYXRhLmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIChkYXRhKSA9PiBkYXRhLngxKS5hdHRyKFwieTFcIiwgKGRhdGEpID0+IGRhdGEueTEpLmF0dHIoXCJ4MlwiLCAoZGF0YSkgPT4gZGF0YS54MikuYXR0cihcInkyXCIsIChkYXRhKSA9PiBkYXRhLnkyKS5zdHlsZShcInN0cm9rZVwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VGaWxsKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VXaWR0aCk7XG4gIH1cbiAgY29uc3QgcXVhZHJhbnRzID0gcXVhZHJhbnRzR3JvdXAuc2VsZWN0QWxsKFwiZy5xdWFkcmFudFwiKS5kYXRhKHF1YWRyYW50RGF0YS5xdWFkcmFudHMpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJxdWFkcmFudFwiKTtcbiAgcXVhZHJhbnRzLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgKGRhdGEpID0+IGRhdGEueCkuYXR0cihcInlcIiwgKGRhdGEpID0+IGRhdGEueSkuYXR0cihcIndpZHRoXCIsIChkYXRhKSA9PiBkYXRhLndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIChkYXRhKSA9PiBkYXRhLmhlaWdodCkuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEuZmlsbCk7XG4gIHF1YWRyYW50cy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLnRleHQuZmlsbCkuYXR0cihcImZvbnQtc2l6ZVwiLCAoZGF0YSkgPT4gZGF0YS50ZXh0LmZvbnRTaXplKS5hdHRyKFxuICAgIFwiZG9taW5hbnQtYmFzZWxpbmVcIixcbiAgICAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLnRleHQuaG9yaXpvbnRhbFBvcylcbiAgKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGRhdGEpID0+IGdldFRleHRBbmNob3IoZGF0YS50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cihcInRyYW5zZm9ybVwiLCAoZGF0YSkgPT4gZ2V0VHJhbnNmb3JtYXRpb24oZGF0YS50ZXh0KSkudGV4dCgoZGF0YSkgPT4gZGF0YS50ZXh0LnRleHQpO1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbEdyb3VwLnNlbGVjdEFsbChcImcubGFiZWxcIikuZGF0YShxdWFkcmFudERhdGEuYXhpc0xhYmVscykuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsYWJlbHMuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS50ZXh0KChkYXRhKSA9PiBkYXRhLnRleHQpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpLmF0dHIoXCJmb250LXNpemVcIiwgKGRhdGEpID0+IGRhdGEuZm9udFNpemUpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLmhvcml6b250YWxQb3MpKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGRhdGEpID0+IGdldFRleHRBbmNob3IoZGF0YS52ZXJ0aWNhbFBvcykpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGRhdGEpID0+IGdldFRyYW5zZm9ybWF0aW9uKGRhdGEpKTtcbiAgY29uc3QgZGF0YVBvaW50cyA9IGRhdGFQb2ludEdyb3VwLnNlbGVjdEFsbChcImcuZGF0YS1wb2ludFwiKS5kYXRhKHF1YWRyYW50RGF0YS5wb2ludHMpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJkYXRhLXBvaW50XCIpO1xuICBkYXRhUG9pbnRzLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgKGRhdGEpID0+IGRhdGEueCkuYXR0cihcImN5XCIsIChkYXRhKSA9PiBkYXRhLnkpLmF0dHIoXCJyXCIsIChkYXRhKSA9PiBkYXRhLnJhZGl1cykuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEuZmlsbCkuYXR0cihcInN0cm9rZVwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VDb2xvcikuYXR0cihcInN0cm9rZS13aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VXaWR0aCk7XG4gIGRhdGFQb2ludHMuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS50ZXh0KChkYXRhKSA9PiBkYXRhLnRleHQudGV4dCkuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEudGV4dC5maWxsKS5hdHRyKFwiZm9udC1zaXplXCIsIChkYXRhKSA9PiBkYXRhLnRleHQuZm9udFNpemUpLmF0dHIoXG4gICAgXCJkb21pbmFudC1iYXNlbGluZVwiLFxuICAgIChkYXRhKSA9PiBnZXREb21pbmFudEJhc2VMaW5lKGRhdGEudGV4dC5ob3Jpem9udGFsUG9zKVxuICApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCAoZGF0YSkgPT4gZ2V0VGV4dEFuY2hvcihkYXRhLnRleHQudmVydGljYWxQb3MpKS5hdHRyKFwidHJhbnNmb3JtXCIsIChkYXRhKSA9PiBnZXRUcmFuc2Zvcm1hdGlvbihkYXRhLnRleHQpKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBxdWFkcmFudFJlbmRlcmVyX2RlZmF1bHQgPSB7XG4gIGRyYXdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9xdWFkcmFudC1jaGFydC9xdWFkcmFudERpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHF1YWRyYW50X2RlZmF1bHQsXG4gIGRiOiBxdWFkcmFudERiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBxdWFkcmFudFJlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlwiLCBcInN0eWxlc1wiKVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIGNvbXB1dGVEaW1lbnNpb25PZlRleHRcbn0gZnJvbSBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhbkFuZE1lcmdlXG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVuay1GMlhGTjNCWS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgZ2V0VGhlbWVWYXJpYWJsZXMsXG4gIGxvZyxcbiAgc2FuaXRpemVUZXh0LFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvcGFyc2VyL3h5Y2hhcnQuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCAxMCwgMTIsIDE0LCAxNiwgMTgsIDE5LCAyMSwgMjNdLCAkVjEgPSBbMiwgNl0sICRWMiA9IFsxLCAzXSwgJFYzID0gWzEsIDVdLCAkVjQgPSBbMSwgNl0sICRWNSA9IFsxLCA3XSwgJFY2ID0gWzEsIDUsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMTksIDIxLCAyMywgMzQsIDM1LCAzNl0sICRWNyA9IFsxLCAyNV0sICRWOCA9IFsxLCAyNl0sICRWOSA9IFsxLCAyOF0sICRWYSA9IFsxLCAyOV0sICRWYiA9IFsxLCAzMF0sICRWYyA9IFsxLCAzMV0sICRWZCA9IFsxLCAzMl0sICRWZSA9IFsxLCAzM10sICRWZiA9IFsxLCAzNF0sICRWZyA9IFsxLCAzNV0sICRWaCA9IFsxLCAzNl0sICRWaSA9IFsxLCAzN10sICRWaiA9IFsxLCA0M10sICRWayA9IFsxLCA0Ml0sICRWbCA9IFsxLCA0N10sICRWbSA9IFsxLCA1MF0sICRWbiA9IFsxLCAxMCwgMTIsIDE0LCAxNiwgMTgsIDE5LCAyMSwgMjMsIDM0LCAzNSwgMzZdLCAkVm8gPSBbMSwgMTAsIDEyLCAxNCwgMTYsIDE4LCAxOSwgMjEsIDIzLCAyNCwgMjYsIDI3LCAyOCwgMzQsIDM1LCAzNl0sICRWcCA9IFsxLCAxMCwgMTIsIDE0LCAxNiwgMTgsIDE5LCAyMSwgMjMsIDI0LCAyNiwgMjcsIDI4LCAzNCwgMzUsIDM2LCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MF0sICRWcSA9IFsxLCA2NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImVvbFwiOiA0LCBcIlhZQ0hBUlRcIjogNSwgXCJjaGFydENvbmZpZ1wiOiA2LCBcImRvY3VtZW50XCI6IDcsIFwiQ0hBUlRfT1JJRU5UQVRJT05cIjogOCwgXCJzdGF0ZW1lbnRcIjogOSwgXCJ0aXRsZVwiOiAxMCwgXCJ0ZXh0XCI6IDExLCBcIlhfQVhJU1wiOiAxMiwgXCJwYXJzZVhBeGlzXCI6IDEzLCBcIllfQVhJU1wiOiAxNCwgXCJwYXJzZVlBeGlzXCI6IDE1LCBcIkxJTkVcIjogMTYsIFwicGxvdERhdGFcIjogMTcsIFwiQkFSXCI6IDE4LCBcImFjY190aXRsZVwiOiAxOSwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMjAsIFwiYWNjX2Rlc2NyXCI6IDIxLCBcImFjY19kZXNjcl92YWx1ZVwiOiAyMiwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDIzLCBcIlNRVUFSRV9CUkFDRVNfU1RBUlRcIjogMjQsIFwiY29tbWFTZXBhcmF0ZWROdW1iZXJzXCI6IDI1LCBcIlNRVUFSRV9CUkFDRVNfRU5EXCI6IDI2LCBcIk5VTUJFUl9XSVRIX0RFQ0lNQUxcIjogMjcsIFwiQ09NTUFcIjogMjgsIFwieEF4aXNEYXRhXCI6IDI5LCBcImJhbmREYXRhXCI6IDMwLCBcIkFSUk9XX0RFTElNSVRFUlwiOiAzMSwgXCJjb21tYVNlcGFyYXRlZFRleHRzXCI6IDMyLCBcInlBeGlzRGF0YVwiOiAzMywgXCJORVdMSU5FXCI6IDM0LCBcIlNFTUlcIjogMzUsIFwiRU9GXCI6IDM2LCBcImFscGhhTnVtXCI6IDM3LCBcIlNUUlwiOiAzOCwgXCJNRF9TVFJcIjogMzksIFwiYWxwaGFOdW1Ub2tlblwiOiA0MCwgXCJBTVBcIjogNDEsIFwiTlVNXCI6IDQyLCBcIkFMUEhBXCI6IDQzLCBcIlBMVVNcIjogNDQsIFwiRVFVQUxTXCI6IDQ1LCBcIk1VTFRcIjogNDYsIFwiRE9UXCI6IDQ3LCBcIkJSS1RcIjogNDgsIFwiTUlOVVNcIjogNDksIFwiVU5ERVJTQ09SRVwiOiA1MCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDU6IFwiWFlDSEFSVFwiLCA4OiBcIkNIQVJUX09SSUVOVEFUSU9OXCIsIDEwOiBcInRpdGxlXCIsIDEyOiBcIlhfQVhJU1wiLCAxNDogXCJZX0FYSVNcIiwgMTY6IFwiTElORVwiLCAxODogXCJCQVJcIiwgMTk6IFwiYWNjX3RpdGxlXCIsIDIwOiBcImFjY190aXRsZV92YWx1ZVwiLCAyMTogXCJhY2NfZGVzY3JcIiwgMjI6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDIzOiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMjQ6IFwiU1FVQVJFX0JSQUNFU19TVEFSVFwiLCAyNjogXCJTUVVBUkVfQlJBQ0VTX0VORFwiLCAyNzogXCJOVU1CRVJfV0lUSF9ERUNJTUFMXCIsIDI4OiBcIkNPTU1BXCIsIDMxOiBcIkFSUk9XX0RFTElNSVRFUlwiLCAzNDogXCJORVdMSU5FXCIsIDM1OiBcIlNFTUlcIiwgMzY6IFwiRU9GXCIsIDM4OiBcIlNUUlwiLCAzOTogXCJNRF9TVFJcIiwgNDE6IFwiQU1QXCIsIDQyOiBcIk5VTVwiLCA0MzogXCJBTFBIQVwiLCA0NDogXCJQTFVTXCIsIDQ1OiBcIkVRVUFMU1wiLCA0NjogXCJNVUxUXCIsIDQ3OiBcIkRPVFwiLCA0ODogXCJCUktUXCIsIDQ5OiBcIk1JTlVTXCIsIDUwOiBcIlVOREVSU0NPUkVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDNdLCBbMywgMl0sIFszLCAxXSwgWzYsIDFdLCBbNywgMF0sIFs3LCAyXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAzXSwgWzksIDJdLCBbOSwgM10sIFs5LCAyXSwgWzksIDJdLCBbOSwgMV0sIFsxNywgM10sIFsyNSwgM10sIFsyNSwgMV0sIFsxMywgMV0sIFsxMywgMl0sIFsxMywgMV0sIFsyOSwgMV0sIFsyOSwgM10sIFszMCwgM10sIFszMiwgM10sIFszMiwgMV0sIFsxNSwgMV0sIFsxNSwgMl0sIFsxNSwgMV0sIFszMywgM10sIFs0LCAxXSwgWzQsIDFdLCBbNCwgMV0sIFsxMSwgMV0sIFsxMSwgMV0sIFsxMSwgMV0sIFszNywgMV0sIFszNywgMl0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgeXkuc2V0T3JpZW50YXRpb24oJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHl5LnNldERpYWdyYW1UaXRsZSgkJFskMF0udGV4dC50cmltKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LnNldExpbmVEYXRhKHsgdGV4dDogXCJcIiwgdHlwZTogXCJ0ZXh0XCIgfSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB5eS5zZXRMaW5lRGF0YSgkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHl5LnNldEJhckRhdGEoeyB0ZXh0OiBcIlwiLCB0eXBlOiBcInRleHRcIiB9LCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHl5LnNldEJhckRhdGEoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgdGhpcy4kID0gW051bWJlcigkJFskMCAtIDJdKSwgLi4uJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSBbTnVtYmVyKCQkWyQwXSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHl5LnNldFhBeGlzVGl0bGUoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5zZXRYQXhpc1RpdGxlKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHl5LnNldFhBeGlzVGl0bGUoeyB0eXBlOiBcInRleHRcIiwgdGV4dDogXCJcIiB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICB5eS5zZXRYQXhpc0JhbmQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB5eS5zZXRYQXhpc1JhbmdlRGF0YShOdW1iZXIoJCRbJDAgLSAyXSksIE51bWJlcigkJFskMF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDJdLCAuLi4kJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIHl5LnNldFlBeGlzVGl0bGUoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB5eS5zZXRZQXhpc1RpdGxlKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHl5LnNldFlBeGlzVGl0bGUoeyB0eXBlOiBcInRleHRcIiwgdGV4dDogXCJcIiB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoJCRbJDAgLSAyXSksIE51bWJlcigkJFskMF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJtYXJrZG93blwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyBcIlwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgIHRhYmxlOiBbbygkVjAsICRWMSwgeyAzOiAxLCA0OiAyLCA3OiA0LCA1OiAkVjIsIDM0OiAkVjMsIDM1OiAkVjQsIDM2OiAkVjUgfSksIHsgMTogWzNdIH0sIG8oJFYwLCAkVjEsIHsgNDogMiwgNzogNCwgMzogOCwgNTogJFYyLCAzNDogJFYzLCAzNTogJFY0LCAzNjogJFY1IH0pLCBvKCRWMCwgJFYxLCB7IDQ6IDIsIDc6IDQsIDY6IDksIDM6IDEwLCA1OiAkVjIsIDg6IFsxLCAxMV0sIDM0OiAkVjMsIDM1OiAkVjQsIDM2OiAkVjUgfSksIHsgMTogWzIsIDRdLCA5OiAxMiwgMTA6IFsxLCAxM10sIDEyOiBbMSwgMTRdLCAxNDogWzEsIDE1XSwgMTY6IFsxLCAxNl0sIDE4OiBbMSwgMTddLCAxOTogWzEsIDE4XSwgMjE6IFsxLCAxOV0sIDIzOiBbMSwgMjBdIH0sIG8oJFY2LCBbMiwgMzRdKSwgbygkVjYsIFsyLCAzNV0pLCBvKCRWNiwgWzIsIDM2XSksIHsgMTogWzIsIDFdIH0sIG8oJFYwLCAkVjEsIHsgNDogMiwgNzogNCwgMzogMjEsIDU6ICRWMiwgMzQ6ICRWMywgMzU6ICRWNCwgMzY6ICRWNSB9KSwgeyAxOiBbMiwgM10gfSwgbygkVjYsIFsyLCA1XSksIG8oJFYwLCBbMiwgN10sIHsgNDogMjIsIDM0OiAkVjMsIDM1OiAkVjQsIDM2OiAkVjUgfSksIHsgMTE6IDIzLCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDExOiAzOSwgMTM6IDM4LCAyNDogJFZqLCAyNzogJFZrLCAyOTogNDAsIDMwOiA0MSwgMzc6IDI0LCAzODogJFY3LCAzOTogJFY4LCA0MDogMjcsIDQxOiAkVjksIDQyOiAkVmEsIDQzOiAkVmIsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmkgfSwgeyAxMTogNDUsIDE1OiA0NCwgMjc6ICRWbCwgMzM6IDQ2LCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDExOiA0OSwgMTc6IDQ4LCAyNDogJFZtLCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDExOiA1MiwgMTc6IDUxLCAyNDogJFZtLCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDIwOiBbMSwgNTNdIH0sIHsgMjI6IFsxLCA1NF0gfSwgbygkVm4sIFsyLCAxOF0pLCB7IDE6IFsyLCAyXSB9LCBvKCRWbiwgWzIsIDhdKSwgbygkVm4sIFsyLCA5XSksIG8oJFZvLCBbMiwgMzddLCB7IDQwOiA1NSwgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9KSwgbygkVm8sIFsyLCAzOF0pLCBvKCRWbywgWzIsIDM5XSksIG8oJFZwLCBbMiwgNDBdKSwgbygkVnAsIFsyLCA0Ml0pLCBvKCRWcCwgWzIsIDQzXSksIG8oJFZwLCBbMiwgNDRdKSwgbygkVnAsIFsyLCA0NV0pLCBvKCRWcCwgWzIsIDQ2XSksIG8oJFZwLCBbMiwgNDddKSwgbygkVnAsIFsyLCA0OF0pLCBvKCRWcCwgWzIsIDQ5XSksIG8oJFZwLCBbMiwgNTBdKSwgbygkVnAsIFsyLCA1MV0pLCBvKCRWbiwgWzIsIDEwXSksIG8oJFZuLCBbMiwgMjJdLCB7IDMwOiA0MSwgMjk6IDU2LCAyNDogJFZqLCAyNzogJFZrIH0pLCBvKCRWbiwgWzIsIDI0XSksIG8oJFZuLCBbMiwgMjVdKSwgeyAzMTogWzEsIDU3XSB9LCB7IDExOiA1OSwgMzI6IDU4LCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCBvKCRWbiwgWzIsIDExXSksIG8oJFZuLCBbMiwgMzBdLCB7IDMzOiA2MCwgMjc6ICRWbCB9KSwgbygkVm4sIFsyLCAzMl0pLCB7IDMxOiBbMSwgNjFdIH0sIG8oJFZuLCBbMiwgMTJdKSwgeyAxNzogNjIsIDI0OiAkVm0gfSwgeyAyNTogNjMsIDI3OiAkVnEgfSwgbygkVm4sIFsyLCAxNF0pLCB7IDE3OiA2NSwgMjQ6ICRWbSB9LCBvKCRWbiwgWzIsIDE2XSksIG8oJFZuLCBbMiwgMTddKSwgbygkVnAsIFsyLCA0MV0pLCBvKCRWbiwgWzIsIDIzXSksIHsgMjc6IFsxLCA2Nl0gfSwgeyAyNjogWzEsIDY3XSB9LCB7IDI2OiBbMiwgMjldLCAyODogWzEsIDY4XSB9LCBvKCRWbiwgWzIsIDMxXSksIHsgMjc6IFsxLCA2OV0gfSwgbygkVm4sIFsyLCAxM10pLCB7IDI2OiBbMSwgNzBdIH0sIHsgMjY6IFsyLCAyMV0sIDI4OiBbMSwgNzFdIH0sIG8oJFZuLCBbMiwgMTVdKSwgbygkVm4sIFsyLCAyNl0pLCBvKCRWbiwgWzIsIDI3XSksIHsgMTE6IDU5LCAzMjogNzIsIDM3OiAyNCwgMzg6ICRWNywgMzk6ICRWOCwgNDA6IDI3LCA0MTogJFY5LCA0MjogJFZhLCA0MzogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpIH0sIG8oJFZuLCBbMiwgMzNdKSwgbygkVm4sIFsyLCAxOV0pLCB7IDI1OiA3MywgMjc6ICRWcSB9LCB7IDI2OiBbMiwgMjhdIH0sIHsgMjY6IFsyLCAyMF0gfV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgODogWzIsIDFdLCAxMDogWzIsIDNdLCAyMTogWzIsIDJdLCA3MjogWzIsIDI4XSwgNzM6IFsyLCAyMF0gfSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYXhpc19kYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiWF9BWElTXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJheGlzX2RhdGFcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJZX0FYSVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImF4aXNfYmFuZF9kYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImRhdGFcIik7XG4gICAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJkYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiZGF0YV9pbm5lclwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgcmV0dXJuIFwiQ09MT05cIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86JSUoPyFcXHspW15cXG5dKikvaSwgL14oPzpbXlxcfV0lJVteXFxuXSopL2ksIC9eKD86KFxccj9cXG4pKS9pLCAvXig/OihcXHI/XFxuKSkvaSwgL14oPzpbXFxuXFxyXSspL2ksIC9eKD86JSVbXlxcbl0qKS9pLCAvXig/OnRpdGxlXFxiKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86XFx7KS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86eHljaGFydC1iZXRhXFxiKS9pLCAvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLCAvXig/OngtYXhpc1xcYikvaSwgL14oPzp5LWF4aXNcXGIpL2ksIC9eKD86XFxbKS9pLCAvXig/Oi0tPikvaSwgL14oPzpsaW5lXFxiKS9pLCAvXig/OmJhclxcYikvaSwgL14oPzpcXFspL2ksIC9eKD86WystXT8oPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKS9pLCAvXig/OlxcXSkvaSwgL14oPzooPzpgXFwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFx7IHRoaXNcXC5wdXNoU3RhdGVcXChtZF9zdHJpbmdcXCk7IFxcfVxcbjxtZF9zdHJpbmc+XFwoXFw/OlxcKFxcPyFgXCJcXClcXC5cXClcXCsgICAgICAgICAgICAgICAgICBcXHsgcmV0dXJuIE1EX1NUUjsgXFx9XFxuPG1kX3N0cmluZz5cXChcXD86YCkpL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXCJdKS9pLCAvXig/OlteXCJdKikvaSwgL14oPzpcXFspL2ksIC9eKD86XFxdKS9pLCAvXig/OltBLVphLXpdKykvaSwgL14oPzo6KS9pLCAvXig/OlxcKykvaSwgL14oPzosKS9pLCAvXig/Oj0pL2ksIC9eKD86XFwqKS9pLCAvXig/OiMpL2ksIC9eKD86W1xcX10pL2ksIC9eKD86XFwuKS9pLCAvXig/OiYpL2ksIC9eKD86LSkvaSwgL14oPzpbMC05XSspL2ksIC9eKD86XFxzKykvaSwgL14oPzo7KS9pLCAvXig/OiQpL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImRhdGFfaW5uZXJcIjogeyBcInJ1bGVzXCI6IFswLCAxLCA0LCA1LCA2LCA3LCA5LCAxMSwgMTQsIDE1LCAxNiwgMTcsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSwgXCJkYXRhXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMywgNCwgNSwgNiwgNywgOSwgMTEsIDE0LCAxNSwgMTYsIDE3LCAyMCwgMjEsIDIyLCAyNSwgMjYsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSwgXCJheGlzX2JhbmRfZGF0YVwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDQsIDUsIDYsIDcsIDksIDExLCAxNCwgMTUsIDE2LCAxNywgMjAsIDIxLCAyNCwgMjUsIDI2LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDVdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0sIFwiYXhpc19kYXRhXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMiwgNCwgNSwgNiwgNywgOSwgMTEsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjMsIDI1LCAyNiwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1XSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9LCBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFsxMiwgMTNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzEwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0aXRsZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibWRfc3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyNywgMjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCA0LCA1LCA2LCA3LCA5LCAxMSwgMTQsIDE1LCAxNiwgMTcsIDIwLCAyMSwgMjUsIDI2LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDVdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgeHljaGFydF9kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC9jaGFydEJ1aWxkZXIvaW50ZXJmYWNlcy50c1xuZnVuY3Rpb24gaXNCYXJQbG90KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEudHlwZSA9PT0gXCJiYXJcIjtcbn1cbl9fbmFtZShpc0JhclBsb3QsIFwiaXNCYXJQbG90XCIpO1xuZnVuY3Rpb24gaXNCYW5kQXhpc0RhdGEoZGF0YSkge1xuICByZXR1cm4gZGF0YS50eXBlID09PSBcImJhbmRcIjtcbn1cbl9fbmFtZShpc0JhbmRBeGlzRGF0YSwgXCJpc0JhbmRBeGlzRGF0YVwiKTtcbmZ1bmN0aW9uIGlzTGluZWFyQXhpc0RhdGEoZGF0YSkge1xuICByZXR1cm4gZGF0YS50eXBlID09PSBcImxpbmVhclwiO1xufVxuX19uYW1lKGlzTGluZWFyQXhpc0RhdGEsIFwiaXNMaW5lYXJBeGlzRGF0YVwiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL3RleHREaW1lbnNpb25DYWxjdWxhdG9yLnRzXG52YXIgVGV4dERpbWVuc2lvbkNhbGN1bGF0b3JXaXRoRm9udCA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IocGFyZW50R3JvdXApIHtcbiAgICB0aGlzLnBhcmVudEdyb3VwID0gcGFyZW50R3JvdXA7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250XCIpO1xuICB9XG4gIGdldE1heERpbWVuc2lvbih0ZXh0cywgZm9udFNpemUpIHtcbiAgICBpZiAoIXRoaXMucGFyZW50R3JvdXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0ZXh0cy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBNYXRoLm1heChjdXIubGVuZ3RoLCBhY2MpLCAwKSAqIGZvbnRTaXplLFxuICAgICAgICBoZWlnaHQ6IGZvbnRTaXplXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgY29uc3QgZWxlbSA9IHRoaXMucGFyZW50R3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwidmlzaWJpbGl0eVwiLCBcImhpZGRlblwiKS5hdHRyKFwiZm9udC1zaXplXCIsIGZvbnRTaXplKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgdGV4dHMpIHtcbiAgICAgIGNvbnN0IGJib3ggPSBjb21wdXRlRGltZW5zaW9uT2ZUZXh0KGVsZW0sIDEsIHQpO1xuICAgICAgY29uc3Qgd2lkdGggPSBiYm94ID8gYmJveC53aWR0aCA6IHQubGVuZ3RoICogZm9udFNpemU7XG4gICAgICBjb25zdCBoZWlnaHQgPSBiYm94ID8gYmJveC5oZWlnaHQgOiBmb250U2l6ZTtcbiAgICAgIGRpbWVuc2lvbi53aWR0aCA9IE1hdGgubWF4KGRpbWVuc2lvbi53aWR0aCwgd2lkdGgpO1xuICAgICAgZGltZW5zaW9uLmhlaWdodCA9IE1hdGgubWF4KGRpbWVuc2lvbi5oZWlnaHQsIGhlaWdodCk7XG4gICAgfVxuICAgIGVsZW0ucmVtb3ZlKCk7XG4gICAgcmV0dXJuIGRpbWVuc2lvbjtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvYXhpcy9iYW5kQXhpcy50c1xuaW1wb3J0IHsgc2NhbGVCYW5kIH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9jb21wb25lbnRzL2F4aXMvYmFzZUF4aXMudHNcbnZhciBCQVJfV0lEVEhfVE9fVElDS19XSURUSF9SQVRJTyA9IDAuNztcbnZhciBNQVhfT1VURVJfUEFERElOR19QRVJDRU5UX0ZPUl9XUlRfTEFCRUwgPSAwLjI7XG52YXIgQmFzZUF4aXMgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGF4aXNDb25maWcsIHRpdGxlLCB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciwgYXhpc1RoZW1lQ29uZmlnKSB7XG4gICAgdGhpcy5heGlzQ29uZmlnID0gYXhpc0NvbmZpZztcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IHRleHREaW1lbnNpb25DYWxjdWxhdG9yO1xuICAgIHRoaXMuYXhpc1RoZW1lQ29uZmlnID0gYXhpc1RoZW1lQ29uZmlnO1xuICAgIHRoaXMuYm91bmRpbmdSZWN0ID0geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgdGhpcy5heGlzUG9zaXRpb24gPSBcImxlZnRcIjtcbiAgICB0aGlzLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0xhYmVsID0gZmFsc2U7XG4gICAgdGhpcy5zaG93VGljayA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0F4aXNMaW5lID0gZmFsc2U7XG4gICAgdGhpcy5vdXRlclBhZGRpbmcgPSAwO1xuICAgIHRoaXMudGl0bGVUZXh0SGVpZ2h0ID0gMDtcbiAgICB0aGlzLmxhYmVsVGV4dEhlaWdodCA9IDA7XG4gICAgdGhpcy5yYW5nZSA9IFswLCAxMF07XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QgPSB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICB0aGlzLmF4aXNQb3NpdGlvbiA9IFwibGVmdFwiO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQmFzZUF4aXNcIik7XG4gIH1cbiAgc2V0UmFuZ2UocmFuZ2UpIHtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgaWYgKHRoaXMuYXhpc1Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQgPSByYW5nZVsxXSAtIHJhbmdlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCA9IHJhbmdlWzFdIC0gcmFuZ2VbMF07XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpO1xuICB9XG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBbdGhpcy5yYW5nZVswXSArIHRoaXMub3V0ZXJQYWRkaW5nLCB0aGlzLnJhbmdlWzFdIC0gdGhpcy5vdXRlclBhZGRpbmddO1xuICB9XG4gIHNldEF4aXNQb3NpdGlvbihheGlzUG9zaXRpb24pIHtcbiAgICB0aGlzLmF4aXNQb3NpdGlvbiA9IGF4aXNQb3NpdGlvbjtcbiAgICB0aGlzLnNldFJhbmdlKHRoaXMucmFuZ2UpO1xuICB9XG4gIGdldFRpY2tEaXN0YW5jZSgpIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICByZXR1cm4gTWF0aC5hYnMocmFuZ2VbMF0gLSByYW5nZVsxXSkgLyB0aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGg7XG4gIH1cbiAgZ2V0QXhpc091dGVyUGFkZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRlclBhZGRpbmc7XG4gIH1cbiAgZ2V0TGFiZWxEaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFxuICAgICAgdGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKCh0aWNrKSA9PiB0aWNrLnRvU3RyaW5nKCkpLFxuICAgICAgdGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemVcbiAgICApO1xuICB9XG4gIHJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCkge1xuICAgIGlmIChCQVJfV0lEVEhfVE9fVElDS19XSURUSF9SQVRJTyAqIHRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkgPiB0aGlzLm91dGVyUGFkZGluZyAqIDIpIHtcbiAgICAgIHRoaXMub3V0ZXJQYWRkaW5nID0gTWF0aC5mbG9vcihCQVJfV0lEVEhfVE9fVElDS19XSURUSF9SQVRJTyAqIHRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkgLyAyKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCk7XG4gIH1cbiAgY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IGF2YWlsYWJsZVNwYWNlLmhlaWdodDtcbiAgICBpZiAodGhpcy5heGlzQ29uZmlnLnNob3dBeGlzTGluZSAmJiBhdmFpbGFibGVIZWlnaHQgPiB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCkge1xuICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoO1xuICAgICAgdGhpcy5zaG93QXhpc0xpbmUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCkge1xuICAgICAgY29uc3Qgc3BhY2VSZXF1aXJlZCA9IHRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKTtcbiAgICAgIGNvbnN0IG1heFBhZGRpbmcgPSBNQVhfT1VURVJfUEFERElOR19QRVJDRU5UX0ZPUl9XUlRfTEFCRUwgKiBhdmFpbGFibGVTcGFjZS53aWR0aDtcbiAgICAgIHRoaXMub3V0ZXJQYWRkaW5nID0gTWF0aC5taW4oc3BhY2VSZXF1aXJlZC53aWR0aCAvIDIsIG1heFBhZGRpbmcpO1xuICAgICAgY29uc3QgaGVpZ2h0UmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodCArIHRoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcgKiAyO1xuICAgICAgdGhpcy5sYWJlbFRleHRIZWlnaHQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodDtcbiAgICAgIGlmIChoZWlnaHRSZXF1aXJlZCA8PSBhdmFpbGFibGVIZWlnaHQpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IGhlaWdodFJlcXVpcmVkO1xuICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd1RpY2sgJiYgYXZhaWxhYmxlSGVpZ2h0ID49IHRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNob3dUaWNrID0gdHJ1ZTtcbiAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSB0aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUgJiYgdGhpcy50aXRsZSkge1xuICAgICAgY29uc3Qgc3BhY2VSZXF1aXJlZCA9IHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFxuICAgICAgICBbdGhpcy50aXRsZV0sXG4gICAgICAgIHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplXG4gICAgICApO1xuICAgICAgY29uc3QgaGVpZ2h0UmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodCArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcgKiAyO1xuICAgICAgdGhpcy50aXRsZVRleHRIZWlnaHQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodDtcbiAgICAgIGlmIChoZWlnaHRSZXF1aXJlZCA8PSBhdmFpbGFibGVIZWlnaHQpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IGhlaWdodFJlcXVpcmVkO1xuICAgICAgICB0aGlzLnNob3dUaXRsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoID0gYXZhaWxhYmxlU3BhY2Uud2lkdGg7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYXZhaWxhYmxlU3BhY2UuaGVpZ2h0IC0gYXZhaWxhYmxlSGVpZ2h0O1xuICB9XG4gIGNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2Uud2lkdGg7XG4gICAgaWYgKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUgJiYgYXZhaWxhYmxlV2lkdGggPiB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCkge1xuICAgICAgYXZhaWxhYmxlV2lkdGggLT0gdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg7XG4gICAgICB0aGlzLnNob3dBeGlzTGluZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd0xhYmVsKSB7XG4gICAgICBjb25zdCBzcGFjZVJlcXVpcmVkID0gdGhpcy5nZXRMYWJlbERpbWVuc2lvbigpO1xuICAgICAgY29uc3QgbWF4UGFkZGluZyA9IE1BWF9PVVRFUl9QQURESU5HX1BFUkNFTlRfRk9SX1dSVF9MQUJFTCAqIGF2YWlsYWJsZVNwYWNlLmhlaWdodDtcbiAgICAgIHRoaXMub3V0ZXJQYWRkaW5nID0gTWF0aC5taW4oc3BhY2VSZXF1aXJlZC5oZWlnaHQgLyAyLCBtYXhQYWRkaW5nKTtcbiAgICAgIGNvbnN0IHdpZHRoUmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLndpZHRoICsgdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyAqIDI7XG4gICAgICBpZiAod2lkdGhSZXF1aXJlZCA8PSBhdmFpbGFibGVXaWR0aCkge1xuICAgICAgICBhdmFpbGFibGVXaWR0aCAtPSB3aWR0aFJlcXVpcmVkO1xuICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd1RpY2sgJiYgYXZhaWxhYmxlV2lkdGggPj0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hvd1RpY2sgPSB0cnVlO1xuICAgICAgYXZhaWxhYmxlV2lkdGggLT0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlICYmIHRoaXMudGl0bGUpIHtcbiAgICAgIGNvbnN0IHNwYWNlUmVxdWlyZWQgPSB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihcbiAgICAgICAgW3RoaXMudGl0bGVdLFxuICAgICAgICB0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdpZHRoUmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodCArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcgKiAyO1xuICAgICAgdGhpcy50aXRsZVRleHRIZWlnaHQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodDtcbiAgICAgIGlmICh3aWR0aFJlcXVpcmVkIDw9IGF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoIC09IHdpZHRoUmVxdWlyZWQ7XG4gICAgICAgIHRoaXMuc2hvd1RpdGxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGggPSBhdmFpbGFibGVTcGFjZS53aWR0aCAtIGF2YWlsYWJsZVdpZHRoO1xuICAgIHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCA9IGF2YWlsYWJsZVNwYWNlLmhlaWdodDtcbiAgfVxuICBjYWxjdWxhdGVTcGFjZShhdmFpbGFibGVTcGFjZSkge1xuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5heGlzUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgdGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25WZXJ0aWNhbChhdmFpbGFibGVTcGFjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGF2YWlsYWJsZVNwYWNlKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgfTtcbiAgfVxuICBzZXRCb3VuZGluZ0JveFhZKHBvaW50KSB7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueCA9IHBvaW50Lng7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueSA9IHBvaW50Lnk7XG4gIH1cbiAgZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCkge1xuICAgIGNvbnN0IGRyYXdhYmxlRWxlbWVudCA9IFtdO1xuICAgIGlmICh0aGlzLnNob3dBeGlzTGluZSkge1xuICAgICAgY29uc3QgeCA9IHRoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCAtIHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIC8gMjtcbiAgICAgIGRyYXdhYmxlRWxlbWVudC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJwYXRoXCIsXG4gICAgICAgIGdyb3VwVGV4dHM6IFtcImxlZnQtYXhpc1wiLCBcImF4aXNsLWxpbmVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgTSAke3h9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3h9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSArIHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH0gYCxcbiAgICAgICAgICAgIHN0cm9rZUZpbGw6IHRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGhcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93TGFiZWwpIHtcbiAgICAgIGRyYXdhYmxlRWxlbWVudC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGdyb3VwVGV4dHM6IFtcImxlZnQtYXhpc1wiLCBcImxhYmVsXCJdLFxuICAgICAgICBkYXRhOiB0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoKHRpY2spID0+ICh7XG4gICAgICAgICAgdGV4dDogdGljay50b1N0cmluZygpLFxuICAgICAgICAgIHg6IHRoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCAtICh0aGlzLnNob3dMYWJlbCA/IHRoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcgOiAwKSAtICh0aGlzLnNob3dUaWNrID8gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGggOiAwKSAtICh0aGlzLnNob3dBeGlzTGluZSA/IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIDogMCksXG4gICAgICAgICAgeTogdGhpcy5nZXRTY2FsZVZhbHVlKHRpY2spLFxuICAgICAgICAgIGZpbGw6IHRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwicmlnaHRcIlxuICAgICAgICB9KSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93VGljaykge1xuICAgICAgY29uc3QgeCA9IHRoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCAtICh0aGlzLnNob3dBeGlzTGluZSA/IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIDogMCk7XG4gICAgICBkcmF3YWJsZUVsZW1lbnQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICBncm91cFRleHRzOiBbXCJsZWZ0LWF4aXNcIiwgXCJ0aWNrc1wiXSxcbiAgICAgICAgZGF0YTogdGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKCh0aWNrKSA9PiAoe1xuICAgICAgICAgIHBhdGg6IGBNICR7eH0sJHt0aGlzLmdldFNjYWxlVmFsdWUodGljayl9IEwgJHt4IC0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKHRpY2spfWAsXG4gICAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmF4aXNDb25maWcudGlja1dpZHRoXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wibGVmdC1heGlzXCIsIFwidGl0bGVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlLFxuICAgICAgICAgICAgeDogdGhpcy5ib3VuZGluZ1JlY3QueCArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsXG4gICAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC8gMixcbiAgICAgICAgICAgIGZpbGw6IHRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsXG4gICAgICAgICAgICBmb250U2l6ZTogdGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUsXG4gICAgICAgICAgICByb3RhdGlvbjogMjcwLFxuICAgICAgICAgICAgdmVydGljYWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRyYXdhYmxlRWxlbWVudDtcbiAgfVxuICBnZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpIHtcbiAgICBjb25zdCBkcmF3YWJsZUVsZW1lbnQgPSBbXTtcbiAgICBpZiAodGhpcy5zaG93QXhpc0xpbmUpIHtcbiAgICAgIGNvbnN0IHkgPSB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGggLyAyO1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGhcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiYm90dG9tLWF4aXNcIiwgXCJheGlzLWxpbmVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7eX0gTCAke3RoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt5fWAsXG4gICAgICAgICAgICBzdHJva2VGaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0xhYmVsKSB7XG4gICAgICBkcmF3YWJsZUVsZW1lbnQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBncm91cFRleHRzOiBbXCJib3R0b20tYXhpc1wiLCBcImxhYmVsXCJdLFxuICAgICAgICBkYXRhOiB0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoKHRpY2spID0+ICh7XG4gICAgICAgICAgdGV4dDogdGljay50b1N0cmluZygpLFxuICAgICAgICAgIHg6IHRoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKSxcbiAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyArICh0aGlzLnNob3dUaWNrID8gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGggOiAwKSArICh0aGlzLnNob3dBeGlzTGluZSA/IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIDogMCksXG4gICAgICAgICAgZmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUsXG4gICAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJjZW50ZXJcIlxuICAgICAgICB9KSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93VGljaykge1xuICAgICAgY29uc3QgeSA9IHRoaXMuYm91bmRpbmdSZWN0LnkgKyAodGhpcy5zaG93QXhpc0xpbmUgPyB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCA6IDApO1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGhcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiYm90dG9tLWF4aXNcIiwgXCJ0aWNrc1wiXSxcbiAgICAgICAgZGF0YTogdGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKCh0aWNrKSA9PiAoe1xuICAgICAgICAgIHBhdGg6IGBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKHRpY2spfSwke3l9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUodGljayl9LCR7eSArIHRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofWAsXG4gICAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmF4aXNDb25maWcudGlja1dpZHRoXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiYm90dG9tLWF4aXNcIiwgXCJ0aXRsZVwiXSxcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICB4OiB0aGlzLnJhbmdlWzBdICsgKHRoaXMucmFuZ2VbMV0gLSB0aGlzLnJhbmdlWzBdKSAvIDIsXG4gICAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyAtIHRoaXMudGl0bGVUZXh0SGVpZ2h0LFxuICAgICAgICAgICAgZmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixcbiAgICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxcbiAgICAgICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgdmVydGljYWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRyYXdhYmxlRWxlbWVudDtcbiAgfVxuICBnZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpIHtcbiAgICBjb25zdCBkcmF3YWJsZUVsZW1lbnQgPSBbXTtcbiAgICBpZiAodGhpcy5zaG93QXhpc0xpbmUpIHtcbiAgICAgIGNvbnN0IHkgPSB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGggLyAyO1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGhcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1widG9wLWF4aXNcIiwgXCJheGlzLWxpbmVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7eX0gTCAke3RoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt5fWAsXG4gICAgICAgICAgICBzdHJva2VGaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0xhYmVsKSB7XG4gICAgICBkcmF3YWJsZUVsZW1lbnQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBncm91cFRleHRzOiBbXCJ0b3AtYXhpc1wiLCBcImxhYmVsXCJdLFxuICAgICAgICBkYXRhOiB0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoKHRpY2spID0+ICh7XG4gICAgICAgICAgdGV4dDogdGljay50b1N0cmluZygpLFxuICAgICAgICAgIHg6IHRoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKSxcbiAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgKHRoaXMuc2hvd1RpdGxlID8gdGhpcy50aXRsZVRleHRIZWlnaHQgKyB0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nICogMiA6IDApICsgdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxcbiAgICAgICAgICBmaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLFxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxcbiAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJ0b3BcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaWNrKSB7XG4gICAgICBjb25zdCB5ID0gdGhpcy5ib3VuZGluZ1JlY3QueTtcbiAgICAgIGRyYXdhYmxlRWxlbWVudC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJwYXRoXCIsXG4gICAgICAgIGdyb3VwVGV4dHM6IFtcInRvcC1heGlzXCIsIFwidGlja3NcIl0sXG4gICAgICAgIGRhdGE6IHRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcCgodGljaykgPT4gKHtcbiAgICAgICAgICBwYXRoOiBgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKX0sJHt5ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gKHRoaXMuc2hvd0F4aXNMaW5lID8gdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGggOiAwKX0gTCAke3RoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKX0sJHt5ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGggLSAodGhpcy5zaG93QXhpc0xpbmUgPyB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCA6IDApfWAsXG4gICAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmF4aXNDb25maWcudGlja1dpZHRoXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1widG9wLWF4aXNcIiwgXCJ0aXRsZVwiXSxcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICB4OiB0aGlzLmJvdW5kaW5nUmVjdC54ICsgdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGggLyAyLFxuICAgICAgICAgICAgeTogdGhpcy5ib3VuZGluZ1JlY3QueSArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsXG4gICAgICAgICAgICBmaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLFxuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLFxuICAgICAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJ0b3BcIixcbiAgICAgICAgICAgIGhvcml6b250YWxQb3M6IFwiY2VudGVyXCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZHJhd2FibGVFbGVtZW50O1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMuYXhpc1Bvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkRyYXdpbmcgb2YgcmlnaHQgYXhpcyBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXhpc1Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9jb21wb25lbnRzL2F4aXMvYmFuZEF4aXMudHNcbnZhciBCYW5kQXhpcyA9IGNsYXNzIGV4dGVuZHMgQmFzZUF4aXMge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkJhbmRBeGlzXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKGF4aXNDb25maWcsIGF4aXNUaGVtZUNvbmZpZywgY2F0ZWdvcmllcywgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yKSB7XG4gICAgc3VwZXIoYXhpc0NvbmZpZywgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yLCBheGlzVGhlbWVDb25maWcpO1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXM7XG4gICAgdGhpcy5zY2FsZSA9IHNjYWxlQmFuZCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSk7XG4gIH1cbiAgc2V0UmFuZ2UocmFuZ2UpIHtcbiAgICBzdXBlci5zZXRSYW5nZShyYW5nZSk7XG4gIH1cbiAgcmVjYWxjdWxhdGVTY2FsZSgpIHtcbiAgICB0aGlzLnNjYWxlID0gc2NhbGVCYW5kKCkuZG9tYWluKHRoaXMuY2F0ZWdvcmllcykucmFuZ2UodGhpcy5nZXRSYW5nZSgpKS5wYWRkaW5nSW5uZXIoMSkucGFkZGluZ091dGVyKDApLmFsaWduKDAuNSk7XG4gICAgbG9nLnRyYWNlKFwiQmFuZEF4aXMgYXhpcyBmaW5hbCBjYXRlZ29yaWVzLCByYW5nZTogXCIsIHRoaXMuY2F0ZWdvcmllcywgdGhpcy5nZXRSYW5nZSgpKTtcbiAgfVxuICBnZXRUaWNrVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXM7XG4gIH1cbiAgZ2V0U2NhbGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlKHZhbHVlKSA/PyB0aGlzLmdldFJhbmdlKClbMF07XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9jb21wb25lbnRzL2F4aXMvbGluZWFyQXhpcy50c1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tIFwiZDNcIjtcbnZhciBMaW5lYXJBeGlzID0gY2xhc3MgZXh0ZW5kcyBCYXNlQXhpcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiTGluZWFyQXhpc1wiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihheGlzQ29uZmlnLCBheGlzVGhlbWVDb25maWcsIGRvbWFpbiwgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yKSB7XG4gICAgc3VwZXIoYXhpc0NvbmZpZywgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yLCBheGlzVGhlbWVDb25maWcpO1xuICAgIHRoaXMuZG9tYWluID0gZG9tYWluO1xuICAgIHRoaXMuc2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbih0aGlzLmRvbWFpbikucmFuZ2UodGhpcy5nZXRSYW5nZSgpKTtcbiAgfVxuICBnZXRUaWNrVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlLnRpY2tzKCk7XG4gIH1cbiAgcmVjYWxjdWxhdGVTY2FsZSgpIHtcbiAgICBjb25zdCBkb21haW4gPSBbLi4udGhpcy5kb21haW5dO1xuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIGRvbWFpbi5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbihkb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSk7XG4gIH1cbiAgZ2V0U2NhbGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlKHZhbHVlKTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvYXhpcy9pbmRleC50c1xuZnVuY3Rpb24gZ2V0QXhpcyhkYXRhLCBheGlzQ29uZmlnLCBheGlzVGhlbWVDb25maWcsIHRtcFNWR0dyb3VwMikge1xuICBjb25zdCB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IG5ldyBUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250KHRtcFNWR0dyb3VwMik7XG4gIGlmIChpc0JhbmRBeGlzRGF0YShkYXRhKSkge1xuICAgIHJldHVybiBuZXcgQmFuZEF4aXMoXG4gICAgICBheGlzQ29uZmlnLFxuICAgICAgYXhpc1RoZW1lQ29uZmlnLFxuICAgICAgZGF0YS5jYXRlZ29yaWVzLFxuICAgICAgZGF0YS50aXRsZSxcbiAgICAgIHRleHREaW1lbnNpb25DYWxjdWxhdG9yXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3IExpbmVhckF4aXMoXG4gICAgYXhpc0NvbmZpZyxcbiAgICBheGlzVGhlbWVDb25maWcsXG4gICAgW2RhdGEubWluLCBkYXRhLm1heF0sXG4gICAgZGF0YS50aXRsZSxcbiAgICB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvclxuICApO1xufVxuX19uYW1lKGdldEF4aXMsIFwiZ2V0QXhpc1wiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvY2hhcnRUaXRsZS50c1xudmFyIENoYXJ0VGl0bGUgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHRleHREaW1lbnNpb25DYWxjdWxhdG9yLCBjaGFydENvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnKSB7XG4gICAgdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IHRleHREaW1lbnNpb25DYWxjdWxhdG9yO1xuICAgIHRoaXMuY2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICB0aGlzLmNoYXJ0RGF0YSA9IGNoYXJ0RGF0YTtcbiAgICB0aGlzLmNoYXJ0VGhlbWVDb25maWcgPSBjaGFydFRoZW1lQ29uZmlnO1xuICAgIHRoaXMuYm91bmRpbmdSZWN0ID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdGhpcy5zaG93Q2hhcnRUaXRsZSA9IGZhbHNlO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQ2hhcnRUaXRsZVwiKTtcbiAgfVxuICBzZXRCb3VuZGluZ0JveFhZKHBvaW50KSB7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueCA9IHBvaW50Lng7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueSA9IHBvaW50Lnk7XG4gIH1cbiAgY2FsY3VsYXRlU3BhY2UoYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCB0aXRsZURpbWVuc2lvbiA9IHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFxuICAgICAgW3RoaXMuY2hhcnREYXRhLnRpdGxlXSxcbiAgICAgIHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZVxuICAgICk7XG4gICAgY29uc3Qgd2lkdGhSZXF1aXJlZCA9IE1hdGgubWF4KHRpdGxlRGltZW5zaW9uLndpZHRoLCBhdmFpbGFibGVTcGFjZS53aWR0aCk7XG4gICAgY29uc3QgaGVpZ2h0UmVxdWlyZWQgPSB0aXRsZURpbWVuc2lvbi5oZWlnaHQgKyAyICogdGhpcy5jaGFydENvbmZpZy50aXRsZVBhZGRpbmc7XG4gICAgaWYgKHRpdGxlRGltZW5zaW9uLndpZHRoIDw9IHdpZHRoUmVxdWlyZWQgJiYgdGl0bGVEaW1lbnNpb24uaGVpZ2h0IDw9IGhlaWdodFJlcXVpcmVkICYmIHRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlICYmIHRoaXMuY2hhcnREYXRhLnRpdGxlKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCA9IHdpZHRoUmVxdWlyZWQ7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQgPSBoZWlnaHRSZXF1aXJlZDtcbiAgICAgIHRoaXMuc2hvd0NoYXJ0VGl0bGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMuYm91bmRpbmdSZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHRcbiAgICB9O1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudHMoKSB7XG4gICAgY29uc3QgZHJhd2FibGVFbGVtID0gW107XG4gICAgaWYgKHRoaXMuc2hvd0NoYXJ0VGl0bGUpIHtcbiAgICAgIGRyYXdhYmxlRWxlbS5wdXNoKHtcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiY2hhcnQtdGl0bGVcIl0sXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBkYXRhOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuY2hhcnREYXRhLnRpdGxlLFxuICAgICAgICAgICAgdmVydGljYWxQb3M6IFwibWlkZGxlXCIsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgeDogdGhpcy5ib3VuZGluZ1JlY3QueCArIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoIC8gMixcbiAgICAgICAgICAgIHk6IHRoaXMuYm91bmRpbmdSZWN0LnkgKyB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQgLyAyLFxuICAgICAgICAgICAgZmlsbDogdGhpcy5jaGFydFRoZW1lQ29uZmlnLnRpdGxlQ29sb3IsXG4gICAgICAgICAgICByb3RhdGlvbjogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkcmF3YWJsZUVsZW07XG4gIH1cbn07XG5mdW5jdGlvbiBnZXRDaGFydFRpdGxlQ29tcG9uZW50KGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcsIHRtcFNWR0dyb3VwMikge1xuICBjb25zdCB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IG5ldyBUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250KHRtcFNWR0dyb3VwMik7XG4gIHJldHVybiBuZXcgQ2hhcnRUaXRsZSh0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciwgY2hhcnRDb25maWcsIGNoYXJ0RGF0YSwgY2hhcnRUaGVtZUNvbmZpZyk7XG59XG5fX25hbWUoZ2V0Q2hhcnRUaXRsZUNvbXBvbmVudCwgXCJnZXRDaGFydFRpdGxlQ29tcG9uZW50XCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC9jaGFydEJ1aWxkZXIvY29tcG9uZW50cy9wbG90L2xpbmVQbG90LnRzXG5pbXBvcnQgeyBsaW5lIH0gZnJvbSBcImQzXCI7XG52YXIgTGluZVBsb3QgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHBsb3REYXRhLCB4QXhpcywgeUF4aXMsIG9yaWVudGF0aW9uLCBwbG90SW5kZXgyKSB7XG4gICAgdGhpcy5wbG90RGF0YSA9IHBsb3REYXRhO1xuICAgIHRoaXMueEF4aXMgPSB4QXhpcztcbiAgICB0aGlzLnlBeGlzID0geUF4aXM7XG4gICAgdGhpcy5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIHRoaXMucGxvdEluZGV4ID0gcGxvdEluZGV4MjtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkxpbmVQbG90XCIpO1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudCgpIHtcbiAgICBjb25zdCBmaW5hbERhdGEgPSB0aGlzLnBsb3REYXRhLmRhdGEubWFwKChkKSA9PiBbXG4gICAgICB0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoZFswXSksXG4gICAgICB0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoZFsxXSlcbiAgICBdKTtcbiAgICBsZXQgcGF0aDtcbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgIHBhdGggPSBsaW5lKCkueSgoZCkgPT4gZFswXSkueCgoZCkgPT4gZFsxXSkoZmluYWxEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGxpbmUoKS54KChkKSA9PiBkWzBdKS55KChkKSA9PiBkWzFdKShmaW5hbERhdGEpO1xuICAgIH1cbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZ3JvdXBUZXh0czogW1wicGxvdFwiLCBgbGluZS1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sXG4gICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICBkYXRhOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHN0cm9rZUZpbGw6IHRoaXMucGxvdERhdGEuc3Ryb2tlRmlsbCxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLnBsb3REYXRhLnN0cm9rZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvcGxvdC9iYXJQbG90LnRzXG52YXIgQmFyUGxvdCA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoYmFyRGF0YSwgYm91bmRpbmdSZWN0LCB4QXhpcywgeUF4aXMsIG9yaWVudGF0aW9uLCBwbG90SW5kZXgyKSB7XG4gICAgdGhpcy5iYXJEYXRhID0gYmFyRGF0YTtcbiAgICB0aGlzLmJvdW5kaW5nUmVjdCA9IGJvdW5kaW5nUmVjdDtcbiAgICB0aGlzLnhBeGlzID0geEF4aXM7XG4gICAgdGhpcy55QXhpcyA9IHlBeGlzO1xuICAgIHRoaXMub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICB0aGlzLnBsb3RJbmRleCA9IHBsb3RJbmRleDI7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJCYXJQbG90XCIpO1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudCgpIHtcbiAgICBjb25zdCBmaW5hbERhdGEgPSB0aGlzLmJhckRhdGEuZGF0YS5tYXAoKGQpID0+IFtcbiAgICAgIHRoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShkWzBdKSxcbiAgICAgIHRoaXMueUF4aXMuZ2V0U2NhbGVWYWx1ZShkWzFdKVxuICAgIF0pO1xuICAgIGNvbnN0IGJhclBhZGRpbmdQZXJjZW50ID0gMC4wNTtcbiAgICBjb25zdCBiYXJXaWR0aCA9IE1hdGgubWluKHRoaXMueEF4aXMuZ2V0QXhpc091dGVyUGFkZGluZygpICogMiwgdGhpcy54QXhpcy5nZXRUaWNrRGlzdGFuY2UoKSkgKiAoMSAtIGJhclBhZGRpbmdQZXJjZW50KTtcbiAgICBjb25zdCBiYXJXaWR0aEhhbGYgPSBiYXJXaWR0aCAvIDI7XG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXBUZXh0czogW1wicGxvdFwiLCBgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSxcbiAgICAgICAgICB0eXBlOiBcInJlY3RcIixcbiAgICAgICAgICBkYXRhOiBmaW5hbERhdGEubWFwKChkYXRhKSA9PiAoe1xuICAgICAgICAgICAgeDogdGhpcy5ib3VuZGluZ1JlY3QueCxcbiAgICAgICAgICAgIHk6IGRhdGFbMF0gLSBiYXJXaWR0aEhhbGYsXG4gICAgICAgICAgICBoZWlnaHQ6IGJhcldpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IGRhdGFbMV0gLSB0aGlzLmJvdW5kaW5nUmVjdC54LFxuICAgICAgICAgICAgZmlsbDogdGhpcy5iYXJEYXRhLmZpbGwsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgIHN0cm9rZUZpbGw6IHRoaXMuYmFyRGF0YS5maWxsXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGdyb3VwVGV4dHM6IFtcInBsb3RcIiwgYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sXG4gICAgICAgIHR5cGU6IFwicmVjdFwiLFxuICAgICAgICBkYXRhOiBmaW5hbERhdGEubWFwKChkYXRhKSA9PiAoe1xuICAgICAgICAgIHg6IGRhdGFbMF0gLSBiYXJXaWR0aEhhbGYsXG4gICAgICAgICAgeTogZGF0YVsxXSxcbiAgICAgICAgICB3aWR0aDogYmFyV2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gZGF0YVsxXSxcbiAgICAgICAgICBmaWxsOiB0aGlzLmJhckRhdGEuZmlsbCxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgICBzdHJva2VGaWxsOiB0aGlzLmJhckRhdGEuZmlsbFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICBdO1xuICB9XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC9jaGFydEJ1aWxkZXIvY29tcG9uZW50cy9wbG90L2luZGV4LnRzXG52YXIgQmFzZVBsb3QgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcpIHtcbiAgICB0aGlzLmNoYXJ0Q29uZmlnID0gY2hhcnRDb25maWc7XG4gICAgdGhpcy5jaGFydERhdGEgPSBjaGFydERhdGE7XG4gICAgdGhpcy5jaGFydFRoZW1lQ29uZmlnID0gY2hhcnRUaGVtZUNvbmZpZztcbiAgICB0aGlzLmJvdW5kaW5nUmVjdCA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQmFzZVBsb3RcIik7XG4gIH1cbiAgc2V0QXhlcyh4QXhpcywgeUF4aXMpIHtcbiAgICB0aGlzLnhBeGlzID0geEF4aXM7XG4gICAgdGhpcy55QXhpcyA9IHlBeGlzO1xuICB9XG4gIHNldEJvdW5kaW5nQm94WFkocG9pbnQpIHtcbiAgICB0aGlzLmJvdW5kaW5nUmVjdC54ID0gcG9pbnQueDtcbiAgICB0aGlzLmJvdW5kaW5nUmVjdC55ID0gcG9pbnQueTtcbiAgfVxuICBjYWxjdWxhdGVTcGFjZShhdmFpbGFibGVTcGFjZSkge1xuICAgIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoID0gYXZhaWxhYmxlU3BhY2Uud2lkdGg7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYXZhaWxhYmxlU3BhY2UuaGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodFxuICAgIH07XG4gIH1cbiAgZ2V0RHJhd2FibGVFbGVtZW50cygpIHtcbiAgICBpZiAoISh0aGlzLnhBeGlzICYmIHRoaXMueUF4aXMpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkF4ZXMgbXVzdCBiZSBwYXNzZWQgdG8gcmVuZGVyIFBsb3RzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkcmF3YWJsZUVsZW0gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtpLCBwbG90XSBvZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpIHtcbiAgICAgIHN3aXRjaCAocGxvdC50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgbGluZVBsb3QgPSBuZXcgTGluZVBsb3QoXG4gICAgICAgICAgICAgIHBsb3QsXG4gICAgICAgICAgICAgIHRoaXMueEF4aXMsXG4gICAgICAgICAgICAgIHRoaXMueUF4aXMsXG4gICAgICAgICAgICAgIHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRyYXdhYmxlRWxlbS5wdXNoKC4uLmxpbmVQbG90LmdldERyYXdhYmxlRWxlbWVudCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBiYXJQbG90ID0gbmV3IEJhclBsb3QoXG4gICAgICAgICAgICAgIHBsb3QsXG4gICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdSZWN0LFxuICAgICAgICAgICAgICB0aGlzLnhBeGlzLFxuICAgICAgICAgICAgICB0aGlzLnlBeGlzLFxuICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24sXG4gICAgICAgICAgICAgIGlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkcmF3YWJsZUVsZW0ucHVzaCguLi5iYXJQbG90LmdldERyYXdhYmxlRWxlbWVudCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkcmF3YWJsZUVsZW07XG4gIH1cbn07XG5mdW5jdGlvbiBnZXRQbG90Q29tcG9uZW50KGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcpIHtcbiAgcmV0dXJuIG5ldyBCYXNlUGxvdChjaGFydENvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnKTtcbn1cbl9fbmFtZShnZXRQbG90Q29tcG9uZW50LCBcImdldFBsb3RDb21wb25lbnRcIik7XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9vcmNoZXN0cmF0b3IudHNcbnZhciBPcmNoZXN0cmF0b3IgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcsIHRtcFNWR0dyb3VwMikge1xuICAgIHRoaXMuY2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICB0aGlzLmNoYXJ0RGF0YSA9IGNoYXJ0RGF0YTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlID0ge1xuICAgICAgdGl0bGU6IGdldENoYXJ0VGl0bGVDb21wb25lbnQoY2hhcnRDb25maWcsIGNoYXJ0RGF0YSwgY2hhcnRUaGVtZUNvbmZpZywgdG1wU1ZHR3JvdXAyKSxcbiAgICAgIHBsb3Q6IGdldFBsb3RDb21wb25lbnQoY2hhcnRDb25maWcsIGNoYXJ0RGF0YSwgY2hhcnRUaGVtZUNvbmZpZyksXG4gICAgICB4QXhpczogZ2V0QXhpcyhcbiAgICAgICAgY2hhcnREYXRhLnhBeGlzLFxuICAgICAgICBjaGFydENvbmZpZy54QXhpcyxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlQ29sb3I6IGNoYXJ0VGhlbWVDb25maWcueEF4aXNUaXRsZUNvbG9yLFxuICAgICAgICAgIGxhYmVsQ29sb3I6IGNoYXJ0VGhlbWVDb25maWcueEF4aXNMYWJlbENvbG9yLFxuICAgICAgICAgIHRpY2tDb2xvcjogY2hhcnRUaGVtZUNvbmZpZy54QXhpc1RpY2tDb2xvcixcbiAgICAgICAgICBheGlzTGluZUNvbG9yOiBjaGFydFRoZW1lQ29uZmlnLnhBeGlzTGluZUNvbG9yXG4gICAgICAgIH0sXG4gICAgICAgIHRtcFNWR0dyb3VwMlxuICAgICAgKSxcbiAgICAgIHlBeGlzOiBnZXRBeGlzKFxuICAgICAgICBjaGFydERhdGEueUF4aXMsXG4gICAgICAgIGNoYXJ0Q29uZmlnLnlBeGlzLFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGVDb2xvcjogY2hhcnRUaGVtZUNvbmZpZy55QXhpc1RpdGxlQ29sb3IsXG4gICAgICAgICAgbGFiZWxDb2xvcjogY2hhcnRUaGVtZUNvbmZpZy55QXhpc0xhYmVsQ29sb3IsXG4gICAgICAgICAgdGlja0NvbG9yOiBjaGFydFRoZW1lQ29uZmlnLnlBeGlzVGlja0NvbG9yLFxuICAgICAgICAgIGF4aXNMaW5lQ29sb3I6IGNoYXJ0VGhlbWVDb25maWcueUF4aXNMaW5lQ29sb3JcbiAgICAgICAgfSxcbiAgICAgICAgdG1wU1ZHR3JvdXAyXG4gICAgICApXG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIk9yY2hlc3RyYXRvclwiKTtcbiAgfVxuICBjYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCkge1xuICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuY2hhcnRDb25maWcud2lkdGg7XG4gICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMuY2hhcnRDb25maWcuaGVpZ2h0O1xuICAgIGxldCBwbG90WCA9IDA7XG4gICAgbGV0IHBsb3RZID0gMDtcbiAgICBsZXQgY2hhcnRXaWR0aCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggKiB0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudCAvIDEwMCk7XG4gICAgbGV0IGNoYXJ0SGVpZ2h0ID0gTWF0aC5mbG9vcihcbiAgICAgIGF2YWlsYWJsZUhlaWdodCAqIHRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50IC8gMTAwXG4gICAgKTtcbiAgICBsZXQgc3BhY2VVc2VkID0gdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBjaGFydFdpZHRoLFxuICAgICAgaGVpZ2h0OiBjaGFydEhlaWdodFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZVdpZHRoIC09IHNwYWNlVXNlZC53aWR0aDtcbiAgICBhdmFpbGFibGVIZWlnaHQgLT0gc3BhY2VVc2VkLmhlaWdodDtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiB0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLFxuICAgICAgaGVpZ2h0OiBhdmFpbGFibGVIZWlnaHRcbiAgICB9KTtcbiAgICBwbG90WSA9IHNwYWNlVXNlZC5oZWlnaHQ7XG4gICAgYXZhaWxhYmxlSGVpZ2h0IC09IHNwYWNlVXNlZC5oZWlnaHQ7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oXCJib3R0b21cIik7XG4gICAgc3BhY2VVc2VkID0gdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7XG4gICAgICB3aWR0aDogYXZhaWxhYmxlV2lkdGgsXG4gICAgICBoZWlnaHQ6IGF2YWlsYWJsZUhlaWdodFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZUhlaWdodCAtPSBzcGFjZVVzZWQuaGVpZ2h0O1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKFwibGVmdFwiKTtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBhdmFpbGFibGVXaWR0aCxcbiAgICAgIGhlaWdodDogYXZhaWxhYmxlSGVpZ2h0XG4gICAgfSk7XG4gICAgcGxvdFggPSBzcGFjZVVzZWQud2lkdGg7XG4gICAgYXZhaWxhYmxlV2lkdGggLT0gc3BhY2VVc2VkLndpZHRoO1xuICAgIGlmIChhdmFpbGFibGVXaWR0aCA+IDApIHtcbiAgICAgIGNoYXJ0V2lkdGggKz0gYXZhaWxhYmxlV2lkdGg7XG4gICAgICBhdmFpbGFibGVXaWR0aCA9IDA7XG4gICAgfVxuICAgIGlmIChhdmFpbGFibGVIZWlnaHQgPiAwKSB7XG4gICAgICBjaGFydEhlaWdodCArPSBhdmFpbGFibGVIZWlnaHQ7XG4gICAgICBhdmFpbGFibGVIZWlnaHQgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe1xuICAgICAgd2lkdGg6IGNoYXJ0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGNoYXJ0SGVpZ2h0XG4gICAgfSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoeyB4OiBwbG90WCwgeTogcGxvdFkgfSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRSYW5nZShbcGxvdFgsIHBsb3RYICsgY2hhcnRXaWR0aF0pO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7IHg6IHBsb3RYLCB5OiBwbG90WSArIGNoYXJ0SGVpZ2h0IH0pO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0UmFuZ2UoW3Bsb3RZLCBwbG90WSArIGNoYXJ0SGVpZ2h0XSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHsgeDogMCwgeTogcGxvdFkgfSk7XG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoKHApID0+IGlzQmFyUGxvdChwKSkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMucmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKTtcbiAgICB9XG4gIH1cbiAgY2FsY3VsYXRlSG9yaXpvbnRhbFNwYWNlKCkge1xuICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuY2hhcnRDb25maWcud2lkdGg7XG4gICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMuY2hhcnRDb25maWcuaGVpZ2h0O1xuICAgIGxldCB0aXRsZVlFbmQgPSAwO1xuICAgIGxldCBwbG90WCA9IDA7XG4gICAgbGV0IHBsb3RZID0gMDtcbiAgICBsZXQgY2hhcnRXaWR0aCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggKiB0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudCAvIDEwMCk7XG4gICAgbGV0IGNoYXJ0SGVpZ2h0ID0gTWF0aC5mbG9vcihcbiAgICAgIGF2YWlsYWJsZUhlaWdodCAqIHRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50IC8gMTAwXG4gICAgKTtcbiAgICBsZXQgc3BhY2VVc2VkID0gdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBjaGFydFdpZHRoLFxuICAgICAgaGVpZ2h0OiBjaGFydEhlaWdodFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZVdpZHRoIC09IHNwYWNlVXNlZC53aWR0aDtcbiAgICBhdmFpbGFibGVIZWlnaHQgLT0gc3BhY2VVc2VkLmhlaWdodDtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiB0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLFxuICAgICAgaGVpZ2h0OiBhdmFpbGFibGVIZWlnaHRcbiAgICB9KTtcbiAgICB0aXRsZVlFbmQgPSBzcGFjZVVzZWQuaGVpZ2h0O1xuICAgIGF2YWlsYWJsZUhlaWdodCAtPSBzcGFjZVVzZWQuaGVpZ2h0O1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKFwibGVmdFwiKTtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBhdmFpbGFibGVXaWR0aCxcbiAgICAgIGhlaWdodDogYXZhaWxhYmxlSGVpZ2h0XG4gICAgfSk7XG4gICAgYXZhaWxhYmxlV2lkdGggLT0gc3BhY2VVc2VkLndpZHRoO1xuICAgIHBsb3RYID0gc3BhY2VVc2VkLndpZHRoO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKFwidG9wXCIpO1xuICAgIHNwYWNlVXNlZCA9IHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuY2FsY3VsYXRlU3BhY2Uoe1xuICAgICAgd2lkdGg6IGF2YWlsYWJsZVdpZHRoLFxuICAgICAgaGVpZ2h0OiBhdmFpbGFibGVIZWlnaHRcbiAgICB9KTtcbiAgICBhdmFpbGFibGVIZWlnaHQgLT0gc3BhY2VVc2VkLmhlaWdodDtcbiAgICBwbG90WSA9IHRpdGxlWUVuZCArIHNwYWNlVXNlZC5oZWlnaHQ7XG4gICAgaWYgKGF2YWlsYWJsZVdpZHRoID4gMCkge1xuICAgICAgY2hhcnRXaWR0aCArPSBhdmFpbGFibGVXaWR0aDtcbiAgICAgIGF2YWlsYWJsZVdpZHRoID0gMDtcbiAgICB9XG4gICAgaWYgKGF2YWlsYWJsZUhlaWdodCA+IDApIHtcbiAgICAgIGNoYXJ0SGVpZ2h0ICs9IGF2YWlsYWJsZUhlaWdodDtcbiAgICAgIGF2YWlsYWJsZUhlaWdodCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7XG4gICAgICB3aWR0aDogY2hhcnRXaWR0aCxcbiAgICAgIGhlaWdodDogY2hhcnRIZWlnaHRcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7IHg6IHBsb3RYLCB5OiBwbG90WSB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwbG90WCwgcGxvdFggKyBjaGFydFdpZHRoXSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHsgeDogcGxvdFgsIHk6IHRpdGxlWUVuZCB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFtwbG90WSwgcGxvdFkgKyBjaGFydEhlaWdodF0pO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7IHg6IDAsIHk6IHBsb3RZIH0pO1xuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKChwKSA9PiBpc0JhclBsb3QocCkpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCk7XG4gICAgfVxuICB9XG4gIGNhbGN1bGF0ZVNwYWNlKCkge1xuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKTtcbiAgICB9XG4gIH1cbiAgZ2V0RHJhd2FibGVFbGVtZW50KCkge1xuICAgIHRoaXMuY2FsY3VsYXRlU3BhY2UoKTtcbiAgICBjb25zdCBkcmF3YWJsZUVsZW0gPSBbXTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLCB0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzKTtcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50U3RvcmUpKSB7XG4gICAgICBkcmF3YWJsZUVsZW0ucHVzaCguLi5jb21wb25lbnQuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRyYXdhYmxlRWxlbTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2luZGV4LnRzXG52YXIgWFlDaGFydEJ1aWxkZXIgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiWFlDaGFydEJ1aWxkZXJcIik7XG4gIH1cbiAgc3RhdGljIGJ1aWxkKGNvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnLCB0bXBTVkdHcm91cDIpIHtcbiAgICBjb25zdCBvcmNoZXN0cmF0b3IgPSBuZXcgT3JjaGVzdHJhdG9yKGNvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnLCB0bXBTVkdHcm91cDIpO1xuICAgIHJldHVybiBvcmNoZXN0cmF0b3IuZ2V0RHJhd2FibGVFbGVtZW50KCk7XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L3h5Y2hhcnREYi50c1xudmFyIHBsb3RJbmRleCA9IDA7XG52YXIgdG1wU1ZHR3JvdXA7XG52YXIgeHlDaGFydENvbmZpZyA9IGdldENoYXJ0RGVmYXVsdENvbmZpZygpO1xudmFyIHh5Q2hhcnRUaGVtZUNvbmZpZyA9IGdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnKCk7XG52YXIgeHlDaGFydERhdGEgPSBnZXRDaGFydERlZmF1bHREYXRhKCk7XG52YXIgcGxvdENvbG9yUGFsZXR0ZSA9IHh5Q2hhcnRUaGVtZUNvbmZpZy5wbG90Q29sb3JQYWxldHRlLnNwbGl0KFwiLFwiKS5tYXAoKGNvbG9yKSA9PiBjb2xvci50cmltKCkpO1xudmFyIGhhc1NldFhBeGlzID0gZmFsc2U7XG52YXIgaGFzU2V0WUF4aXMgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnKCkge1xuICBjb25zdCBkZWZhdWx0VGhlbWVWYXJpYWJsZXMgPSBnZXRUaGVtZVZhcmlhYmxlcygpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgcmV0dXJuIGNsZWFuQW5kTWVyZ2UoZGVmYXVsdFRoZW1lVmFyaWFibGVzLnh5Q2hhcnQsIGNvbmZpZy50aGVtZVZhcmlhYmxlcy54eUNoYXJ0KTtcbn1cbl9fbmFtZShnZXRDaGFydERlZmF1bHRUaGVtZUNvbmZpZywgXCJnZXRDaGFydERlZmF1bHRUaGVtZUNvbmZpZ1wiKTtcbmZ1bmN0aW9uIGdldENoYXJ0RGVmYXVsdENvbmZpZygpIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIHJldHVybiBjbGVhbkFuZE1lcmdlKFxuICAgIGRlZmF1bHRDb25maWdfZGVmYXVsdC54eUNoYXJ0LFxuICAgIGNvbmZpZy54eUNoYXJ0XG4gICk7XG59XG5fX25hbWUoZ2V0Q2hhcnREZWZhdWx0Q29uZmlnLCBcImdldENoYXJ0RGVmYXVsdENvbmZpZ1wiKTtcbmZ1bmN0aW9uIGdldENoYXJ0RGVmYXVsdERhdGEoKSB7XG4gIHJldHVybiB7XG4gICAgeUF4aXM6IHtcbiAgICAgIHR5cGU6IFwibGluZWFyXCIsXG4gICAgICB0aXRsZTogXCJcIixcbiAgICAgIG1pbjogSW5maW5pdHksXG4gICAgICBtYXg6IC1JbmZpbml0eVxuICAgIH0sXG4gICAgeEF4aXM6IHtcbiAgICAgIHR5cGU6IFwiYmFuZFwiLFxuICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICBjYXRlZ29yaWVzOiBbXVxuICAgIH0sXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgcGxvdHM6IFtdXG4gIH07XG59XG5fX25hbWUoZ2V0Q2hhcnREZWZhdWx0RGF0YSwgXCJnZXRDaGFydERlZmF1bHREYXRhXCIpO1xuZnVuY3Rpb24gdGV4dFNhbml0aXplcih0ZXh0KSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICByZXR1cm4gc2FuaXRpemVUZXh0KHRleHQudHJpbSgpLCBjb25maWcpO1xufVxuX19uYW1lKHRleHRTYW5pdGl6ZXIsIFwidGV4dFNhbml0aXplclwiKTtcbmZ1bmN0aW9uIHNldFRtcFNWR0coU1ZHRykge1xuICB0bXBTVkdHcm91cCA9IFNWR0c7XG59XG5fX25hbWUoc2V0VG1wU1ZHRywgXCJzZXRUbXBTVkdHXCIpO1xuZnVuY3Rpb24gc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgaWYgKG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgIHh5Q2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICB9IGVsc2Uge1xuICAgIHh5Q2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcbiAgfVxufVxuX19uYW1lKHNldE9yaWVudGF0aW9uLCBcInNldE9yaWVudGF0aW9uXCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNUaXRsZSh0aXRsZSkge1xuICB4eUNoYXJ0RGF0YS54QXhpcy50aXRsZSA9IHRleHRTYW5pdGl6ZXIodGl0bGUudGV4dCk7XG59XG5fX25hbWUoc2V0WEF4aXNUaXRsZSwgXCJzZXRYQXhpc1RpdGxlXCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNSYW5nZURhdGEobWluLCBtYXgpIHtcbiAgeHlDaGFydERhdGEueEF4aXMgPSB7IHR5cGU6IFwibGluZWFyXCIsIHRpdGxlOiB4eUNoYXJ0RGF0YS54QXhpcy50aXRsZSwgbWluLCBtYXggfTtcbiAgaGFzU2V0WEF4aXMgPSB0cnVlO1xufVxuX19uYW1lKHNldFhBeGlzUmFuZ2VEYXRhLCBcInNldFhBeGlzUmFuZ2VEYXRhXCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNCYW5kKGNhdGVnb3JpZXMpIHtcbiAgeHlDaGFydERhdGEueEF4aXMgPSB7XG4gICAgdHlwZTogXCJiYW5kXCIsXG4gICAgdGl0bGU6IHh5Q2hhcnREYXRhLnhBeGlzLnRpdGxlLFxuICAgIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMubWFwKChjKSA9PiB0ZXh0U2FuaXRpemVyKGMudGV4dCkpXG4gIH07XG4gIGhhc1NldFhBeGlzID0gdHJ1ZTtcbn1cbl9fbmFtZShzZXRYQXhpc0JhbmQsIFwic2V0WEF4aXNCYW5kXCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNUaXRsZSh0aXRsZSkge1xuICB4eUNoYXJ0RGF0YS55QXhpcy50aXRsZSA9IHRleHRTYW5pdGl6ZXIodGl0bGUudGV4dCk7XG59XG5fX25hbWUoc2V0WUF4aXNUaXRsZSwgXCJzZXRZQXhpc1RpdGxlXCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNSYW5nZURhdGEobWluLCBtYXgpIHtcbiAgeHlDaGFydERhdGEueUF4aXMgPSB7IHR5cGU6IFwibGluZWFyXCIsIHRpdGxlOiB4eUNoYXJ0RGF0YS55QXhpcy50aXRsZSwgbWluLCBtYXggfTtcbiAgaGFzU2V0WUF4aXMgPSB0cnVlO1xufVxuX19uYW1lKHNldFlBeGlzUmFuZ2VEYXRhLCBcInNldFlBeGlzUmFuZ2VEYXRhXCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNSYW5nZUZyb21QbG90RGF0YShkYXRhKSB7XG4gIGNvbnN0IG1pblZhbHVlID0gTWF0aC5taW4oLi4uZGF0YSk7XG4gIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uZGF0YSk7XG4gIGNvbnN0IHByZXZNaW5WYWx1ZSA9IGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueUF4aXMpID8geHlDaGFydERhdGEueUF4aXMubWluIDogSW5maW5pdHk7XG4gIGNvbnN0IHByZXZNYXhWYWx1ZSA9IGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueUF4aXMpID8geHlDaGFydERhdGEueUF4aXMubWF4IDogLUluZmluaXR5O1xuICB4eUNoYXJ0RGF0YS55QXhpcyA9IHtcbiAgICB0eXBlOiBcImxpbmVhclwiLFxuICAgIHRpdGxlOiB4eUNoYXJ0RGF0YS55QXhpcy50aXRsZSxcbiAgICBtaW46IE1hdGgubWluKHByZXZNaW5WYWx1ZSwgbWluVmFsdWUpLFxuICAgIG1heDogTWF0aC5tYXgocHJldk1heFZhbHVlLCBtYXhWYWx1ZSlcbiAgfTtcbn1cbl9fbmFtZShzZXRZQXhpc1JhbmdlRnJvbVBsb3REYXRhLCBcInNldFlBeGlzUmFuZ2VGcm9tUGxvdERhdGFcIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5KGRhdGEpIHtcbiAgbGV0IHJldERhdGEgPSBbXTtcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHJldERhdGE7XG4gIH1cbiAgaWYgKCFoYXNTZXRYQXhpcykge1xuICAgIGNvbnN0IHByZXZNaW5WYWx1ZSA9IGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueEF4aXMpID8geHlDaGFydERhdGEueEF4aXMubWluIDogSW5maW5pdHk7XG4gICAgY29uc3QgcHJldk1heFZhbHVlID0gaXNMaW5lYXJBeGlzRGF0YSh4eUNoYXJ0RGF0YS54QXhpcykgPyB4eUNoYXJ0RGF0YS54QXhpcy5tYXggOiAtSW5maW5pdHk7XG4gICAgc2V0WEF4aXNSYW5nZURhdGEoTWF0aC5taW4ocHJldk1pblZhbHVlLCAxKSwgTWF0aC5tYXgocHJldk1heFZhbHVlLCBkYXRhLmxlbmd0aCkpO1xuICB9XG4gIGlmICghaGFzU2V0WUF4aXMpIHtcbiAgICBzZXRZQXhpc1JhbmdlRnJvbVBsb3REYXRhKGRhdGEpO1xuICB9XG4gIGlmIChpc0JhbmRBeGlzRGF0YSh4eUNoYXJ0RGF0YS54QXhpcykpIHtcbiAgICByZXREYXRhID0geHlDaGFydERhdGEueEF4aXMuY2F0ZWdvcmllcy5tYXAoKGMsIGkpID0+IFtjLCBkYXRhW2ldXSk7XG4gIH1cbiAgaWYgKGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueEF4aXMpKSB7XG4gICAgY29uc3QgbWluID0geHlDaGFydERhdGEueEF4aXMubWluO1xuICAgIGNvbnN0IG1heCA9IHh5Q2hhcnREYXRhLnhBeGlzLm1heDtcbiAgICBjb25zdCBzdGVwID0gKG1heCAtIG1pbikgLyAoZGF0YS5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IG1pbjsgaSA8PSBtYXg7IGkgKz0gc3RlcCkge1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKGAke2l9YCk7XG4gICAgfVxuICAgIHJldERhdGEgPSBjYXRlZ29yaWVzLm1hcCgoYywgaSkgPT4gW2MsIGRhdGFbaV1dKTtcbiAgfVxuICByZXR1cm4gcmV0RGF0YTtcbn1cbl9fbmFtZSh0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5LCBcInRyYW5zZm9ybURhdGFXaXRob3V0Q2F0ZWdvcnlcIik7XG5mdW5jdGlvbiBnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZShwbG90SW5kZXgyKSB7XG4gIHJldHVybiBwbG90Q29sb3JQYWxldHRlW3Bsb3RJbmRleDIgPT09IDAgPyAwIDogcGxvdEluZGV4MiAlIHBsb3RDb2xvclBhbGV0dGUubGVuZ3RoXTtcbn1cbl9fbmFtZShnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZSwgXCJnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZVwiKTtcbmZ1bmN0aW9uIHNldExpbmVEYXRhKHRpdGxlLCBkYXRhKSB7XG4gIGNvbnN0IHBsb3REYXRhID0gdHJhbnNmb3JtRGF0YVdpdGhvdXRDYXRlZ29yeShkYXRhKTtcbiAgeHlDaGFydERhdGEucGxvdHMucHVzaCh7XG4gICAgdHlwZTogXCJsaW5lXCIsXG4gICAgc3Ryb2tlRmlsbDogZ2V0UGxvdENvbG9yRnJvbVBhbGV0dGUocGxvdEluZGV4KSxcbiAgICBzdHJva2VXaWR0aDogMixcbiAgICBkYXRhOiBwbG90RGF0YVxuICB9KTtcbiAgcGxvdEluZGV4Kys7XG59XG5fX25hbWUoc2V0TGluZURhdGEsIFwic2V0TGluZURhdGFcIik7XG5mdW5jdGlvbiBzZXRCYXJEYXRhKHRpdGxlLCBkYXRhKSB7XG4gIGNvbnN0IHBsb3REYXRhID0gdHJhbnNmb3JtRGF0YVdpdGhvdXRDYXRlZ29yeShkYXRhKTtcbiAgeHlDaGFydERhdGEucGxvdHMucHVzaCh7XG4gICAgdHlwZTogXCJiYXJcIixcbiAgICBmaWxsOiBnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZShwbG90SW5kZXgpLFxuICAgIGRhdGE6IHBsb3REYXRhXG4gIH0pO1xuICBwbG90SW5kZXgrKztcbn1cbl9fbmFtZShzZXRCYXJEYXRhLCBcInNldEJhckRhdGFcIik7XG5mdW5jdGlvbiBnZXREcmF3YWJsZUVsZW0oKSB7XG4gIGlmICh4eUNoYXJ0RGF0YS5wbG90cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBFcnJvcihcIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGFcIik7XG4gIH1cbiAgeHlDaGFydERhdGEudGl0bGUgPSBnZXREaWFncmFtVGl0bGUoKTtcbiAgcmV0dXJuIFhZQ2hhcnRCdWlsZGVyLmJ1aWxkKHh5Q2hhcnRDb25maWcsIHh5Q2hhcnREYXRhLCB4eUNoYXJ0VGhlbWVDb25maWcsIHRtcFNWR0dyb3VwKTtcbn1cbl9fbmFtZShnZXREcmF3YWJsZUVsZW0sIFwiZ2V0RHJhd2FibGVFbGVtXCIpO1xuZnVuY3Rpb24gZ2V0Q2hhcnRUaGVtZUNvbmZpZygpIHtcbiAgcmV0dXJuIHh5Q2hhcnRUaGVtZUNvbmZpZztcbn1cbl9fbmFtZShnZXRDaGFydFRoZW1lQ29uZmlnLCBcImdldENoYXJ0VGhlbWVDb25maWdcIik7XG5mdW5jdGlvbiBnZXRDaGFydENvbmZpZygpIHtcbiAgcmV0dXJuIHh5Q2hhcnRDb25maWc7XG59XG5fX25hbWUoZ2V0Q2hhcnRDb25maWcsIFwiZ2V0Q2hhcnRDb25maWdcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY2xlYXIoKTtcbiAgcGxvdEluZGV4ID0gMDtcbiAgeHlDaGFydENvbmZpZyA9IGdldENoYXJ0RGVmYXVsdENvbmZpZygpO1xuICB4eUNoYXJ0RGF0YSA9IGdldENoYXJ0RGVmYXVsdERhdGEoKTtcbiAgeHlDaGFydFRoZW1lQ29uZmlnID0gZ2V0Q2hhcnREZWZhdWx0VGhlbWVDb25maWcoKTtcbiAgcGxvdENvbG9yUGFsZXR0ZSA9IHh5Q2hhcnRUaGVtZUNvbmZpZy5wbG90Q29sb3JQYWxldHRlLnNwbGl0KFwiLFwiKS5tYXAoKGNvbG9yKSA9PiBjb2xvci50cmltKCkpO1xuICBoYXNTZXRYQXhpcyA9IGZhbHNlO1xuICBoYXNTZXRZQXhpcyA9IGZhbHNlO1xufSwgXCJjbGVhclwiKTtcbnZhciB4eWNoYXJ0RGJfZGVmYXVsdCA9IHtcbiAgZ2V0RHJhd2FibGVFbGVtLFxuICBjbGVhcjogY2xlYXIyLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldE9yaWVudGF0aW9uLFxuICBzZXRYQXhpc1RpdGxlLFxuICBzZXRYQXhpc1JhbmdlRGF0YSxcbiAgc2V0WEF4aXNCYW5kLFxuICBzZXRZQXhpc1RpdGxlLFxuICBzZXRZQXhpc1JhbmdlRGF0YSxcbiAgc2V0TGluZURhdGEsXG4gIHNldEJhckRhdGEsXG4gIHNldFRtcFNWR0csXG4gIGdldENoYXJ0VGhlbWVDb25maWcsXG4gIGdldENoYXJ0Q29uZmlnXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC94eWNoYXJ0UmVuZGVyZXIudHNcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopID0+IHtcbiAgY29uc3QgZGIgPSBkaWFnT2JqLmRiO1xuICBjb25zdCB0aGVtZUNvbmZpZyA9IGRiLmdldENoYXJ0VGhlbWVDb25maWcoKTtcbiAgY29uc3QgY2hhcnRDb25maWcgPSBkYi5nZXRDaGFydENvbmZpZygpO1xuICBmdW5jdGlvbiBnZXREb21pbmFudEJhc2VMaW5lKGhvcml6b250YWxQb3MpIHtcbiAgICByZXR1cm4gaG9yaXpvbnRhbFBvcyA9PT0gXCJ0b3BcIiA/IFwidGV4dC1iZWZvcmUtZWRnZVwiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBfX25hbWUoZ2V0RG9taW5hbnRCYXNlTGluZSwgXCJnZXREb21pbmFudEJhc2VMaW5lXCIpO1xuICBmdW5jdGlvbiBnZXRUZXh0QW5jaG9yKHZlcnRpY2FsUG9zKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsUG9zID09PSBcImxlZnRcIiA/IFwic3RhcnRcIiA6IHZlcnRpY2FsUG9zID09PSBcInJpZ2h0XCIgPyBcImVuZFwiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBfX25hbWUoZ2V0VGV4dEFuY2hvciwgXCJnZXRUZXh0QW5jaG9yXCIpO1xuICBmdW5jdGlvbiBnZXRUZXh0VHJhbnNmb3JtYXRpb24oZGF0YSkge1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZGF0YS54fSwgJHtkYXRhLnl9KSByb3RhdGUoJHtkYXRhLnJvdGF0aW9uIHx8IDB9KWA7XG4gIH1cbiAgX19uYW1lKGdldFRleHRUcmFuc2Zvcm1hdGlvbiwgXCJnZXRUZXh0VHJhbnNmb3JtYXRpb25cIik7XG4gIGxvZy5kZWJ1ZyhcIlJlbmRlcmluZyB4eWNoYXJ0IGNoYXJ0XFxuXCIgKyB0eHQpO1xuICBjb25zdCBzdmcgPSBzZWxlY3RTdmdFbGVtZW50KGlkKTtcbiAgY29uc3QgZ3JvdXAgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYWluXCIpO1xuICBjb25zdCBiYWNrZ3JvdW5kID0gZ3JvdXAuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwid2lkdGhcIiwgY2hhcnRDb25maWcud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgY2hhcnRDb25maWcuaGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJiYWNrZ3JvdW5kXCIpO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgY2hhcnRDb25maWcuaGVpZ2h0LCBjaGFydENvbmZpZy53aWR0aCwgdHJ1ZSk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7Y2hhcnRDb25maWcud2lkdGh9ICR7Y2hhcnRDb25maWcuaGVpZ2h0fWApO1xuICBiYWNrZ3JvdW5kLmF0dHIoXCJmaWxsXCIsIHRoZW1lQ29uZmlnLmJhY2tncm91bmRDb2xvcik7XG4gIGRiLnNldFRtcFNWR0coc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWVybWFpZC10bXAtZ3JvdXBcIikpO1xuICBjb25zdCBzaGFwZXMgPSBkYi5nZXREcmF3YWJsZUVsZW0oKTtcbiAgY29uc3QgZ3JvdXBzID0ge307XG4gIGZ1bmN0aW9uIGdldEdyb3VwKGdMaXN0KSB7XG4gICAgbGV0IGVsZW0gPSBncm91cDtcbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IFtpXSBvZiBnTGlzdC5lbnRyaWVzKCkpIHtcbiAgICAgIGxldCBwYXJlbnQgPSBncm91cDtcbiAgICAgIGlmIChpID4gMCAmJiBncm91cHNbcHJlZml4XSkge1xuICAgICAgICBwYXJlbnQgPSBncm91cHNbcHJlZml4XTtcbiAgICAgIH1cbiAgICAgIHByZWZpeCArPSBnTGlzdFtpXTtcbiAgICAgIGVsZW0gPSBncm91cHNbcHJlZml4XTtcbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBlbGVtID0gZ3JvdXBzW3ByZWZpeF0gPSBwYXJlbnQuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgZ0xpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbTtcbiAgfVxuICBfX25hbWUoZ2V0R3JvdXAsIFwiZ2V0R3JvdXBcIik7XG4gIGZvciAoY29uc3Qgc2hhcGUgb2Ygc2hhcGVzKSB7XG4gICAgaWYgKHNoYXBlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2hhcGVHcm91cCA9IGdldEdyb3VwKHNoYXBlLmdyb3VwVGV4dHMpO1xuICAgIHN3aXRjaCAoc2hhcGUudHlwZSkge1xuICAgICAgY2FzZSBcInJlY3RcIjpcbiAgICAgICAgc2hhcGVHcm91cC5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEoc2hhcGUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIChkYXRhKSA9PiBkYXRhLngpLmF0dHIoXCJ5XCIsIChkYXRhKSA9PiBkYXRhLnkpLmF0dHIoXCJ3aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS53aWR0aCkuYXR0cihcImhlaWdodFwiLCAoZGF0YSkgPT4gZGF0YS5oZWlnaHQpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpLmF0dHIoXCJzdHJva2VcIiwgKGRhdGEpID0+IGRhdGEuc3Ryb2tlRmlsbCkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VXaWR0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgc2hhcGVHcm91cC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEoc2hhcGUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpLmF0dHIoXCJmb250LXNpemVcIiwgKGRhdGEpID0+IGRhdGEuZm9udFNpemUpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLnZlcnRpY2FsUG9zKSkuYXR0cihcInRleHQtYW5jaG9yXCIsIChkYXRhKSA9PiBnZXRUZXh0QW5jaG9yKGRhdGEuaG9yaXpvbnRhbFBvcykpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGRhdGEpID0+IGdldFRleHRUcmFuc2Zvcm1hdGlvbihkYXRhKSkudGV4dCgoZGF0YSkgPT4gZGF0YS50ZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICBzaGFwZUdyb3VwLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShzaGFwZS5kYXRhKS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgKGRhdGEpID0+IGRhdGEucGF0aCkuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEuZmlsbCA/IGRhdGEuZmlsbCA6IFwibm9uZVwiKS5hdHRyKFwic3Ryb2tlXCIsIChkYXRhKSA9PiBkYXRhLnN0cm9rZUZpbGwpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgKGRhdGEpID0+IGRhdGEuc3Ryb2tlV2lkdGgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn0sIFwiZHJhd1wiKTtcbnZhciB4eWNoYXJ0UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQveHljaGFydERpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHh5Y2hhcnRfZGVmYXVsdCxcbiAgZGI6IHh5Y2hhcnREYl9kZWZhdWx0LFxuICByZW5kZXJlcjogeHljaGFydFJlbmRlcmVyX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb21tb25fZGVmYXVsdCxcbiAgY29uZmlndXJlU3ZnU2l6ZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgbG9nLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9yZXF1aXJlbWVudC9wYXJzZXIvcmVxdWlyZW1lbnREaWFncmFtLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgM10sICRWMSA9IFsxLCA0XSwgJFYyID0gWzEsIDVdLCAkVjMgPSBbMSwgNl0sICRWNCA9IFs1LCA2LCA4LCA5LCAxMSwgMTMsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDQ0LCA2MiwgNjNdLCAkVjUgPSBbMSwgMThdLCAkVjYgPSBbMiwgN10sICRWNyA9IFsxLCAyMl0sICRWOCA9IFsxLCAyM10sICRWOSA9IFsxLCAyNF0sICRWYSA9IFsxLCAyNV0sICRWYiA9IFsxLCAyNl0sICRWYyA9IFsxLCAyN10sICRWZCA9IFsxLCAyMF0sICRWZSA9IFsxLCAyOF0sICRWZiA9IFsxLCAyOV0sICRWZyA9IFs2MiwgNjNdLCAkVmggPSBbNSwgOCwgOSwgMTEsIDEzLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCA0NCwgNTEsIDUzLCA2MiwgNjNdLCAkVmkgPSBbMSwgNDddLCAkVmogPSBbMSwgNDhdLCAkVmsgPSBbMSwgNDldLCAkVmwgPSBbMSwgNTBdLCAkVm0gPSBbMSwgNTFdLCAkVm4gPSBbMSwgNTJdLCAkVm8gPSBbMSwgNTNdLCAkVnAgPSBbNTMsIDU0XSwgJFZxID0gWzEsIDY0XSwgJFZyID0gWzEsIDYwXSwgJFZzID0gWzEsIDYxXSwgJFZ0ID0gWzEsIDYyXSwgJFZ1ID0gWzEsIDYzXSwgJFZ2ID0gWzEsIDY1XSwgJFZ3ID0gWzEsIDY5XSwgJFZ4ID0gWzEsIDcwXSwgJFZ5ID0gWzEsIDY3XSwgJFZ6ID0gWzEsIDY4XSwgJFZBID0gWzUsIDgsIDksIDExLCAxMywgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgNDQsIDYyLCA2M107XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImRpcmVjdGl2ZVwiOiA0LCBcIk5FV0xJTkVcIjogNSwgXCJSRFwiOiA2LCBcImRpYWdyYW1cIjogNywgXCJFT0ZcIjogOCwgXCJhY2NfdGl0bGVcIjogOSwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMTAsIFwiYWNjX2Rlc2NyXCI6IDExLCBcImFjY19kZXNjcl92YWx1ZVwiOiAxMiwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDEzLCBcInJlcXVpcmVtZW50RGVmXCI6IDE0LCBcImVsZW1lbnREZWZcIjogMTUsIFwicmVsYXRpb25zaGlwRGVmXCI6IDE2LCBcInJlcXVpcmVtZW50VHlwZVwiOiAxNywgXCJyZXF1aXJlbWVudE5hbWVcIjogMTgsIFwiU1RSVUNUX1NUQVJUXCI6IDE5LCBcInJlcXVpcmVtZW50Qm9keVwiOiAyMCwgXCJJRFwiOiAyMSwgXCJDT0xPTlNFUFwiOiAyMiwgXCJpZFwiOiAyMywgXCJURVhUXCI6IDI0LCBcInRleHRcIjogMjUsIFwiUklTS1wiOiAyNiwgXCJyaXNrTGV2ZWxcIjogMjcsIFwiVkVSSUZZTVRIRFwiOiAyOCwgXCJ2ZXJpZnlUeXBlXCI6IDI5LCBcIlNUUlVDVF9TVE9QXCI6IDMwLCBcIlJFUVVJUkVNRU5UXCI6IDMxLCBcIkZVTkNUSU9OQUxfUkVRVUlSRU1FTlRcIjogMzIsIFwiSU5URVJGQUNFX1JFUVVJUkVNRU5UXCI6IDMzLCBcIlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UXCI6IDM0LCBcIlBIWVNJQ0FMX1JFUVVJUkVNRU5UXCI6IDM1LCBcIkRFU0lHTl9DT05TVFJBSU5UXCI6IDM2LCBcIkxPV19SSVNLXCI6IDM3LCBcIk1FRF9SSVNLXCI6IDM4LCBcIkhJR0hfUklTS1wiOiAzOSwgXCJWRVJJRllfQU5BTFlTSVNcIjogNDAsIFwiVkVSSUZZX0RFTU9OU1RSQVRJT05cIjogNDEsIFwiVkVSSUZZX0lOU1BFQ1RJT05cIjogNDIsIFwiVkVSSUZZX1RFU1RcIjogNDMsIFwiRUxFTUVOVFwiOiA0NCwgXCJlbGVtZW50TmFtZVwiOiA0NSwgXCJlbGVtZW50Qm9keVwiOiA0NiwgXCJUWVBFXCI6IDQ3LCBcInR5cGVcIjogNDgsIFwiRE9DUkVGXCI6IDQ5LCBcInJlZlwiOiA1MCwgXCJFTkRfQVJST1dfTFwiOiA1MSwgXCJyZWxhdGlvbnNoaXBcIjogNTIsIFwiTElORVwiOiA1MywgXCJFTkRfQVJST1dfUlwiOiA1NCwgXCJDT05UQUlOU1wiOiA1NSwgXCJDT1BJRVNcIjogNTYsIFwiREVSSVZFU1wiOiA1NywgXCJTQVRJU0ZJRVNcIjogNTgsIFwiVkVSSUZJRVNcIjogNTksIFwiUkVGSU5FU1wiOiA2MCwgXCJUUkFDRVNcIjogNjEsIFwidW5xU3RyaW5nXCI6IDYyLCBcInFTdHJpbmdcIjogNjMsIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA1OiBcIk5FV0xJTkVcIiwgNjogXCJSRFwiLCA4OiBcIkVPRlwiLCA5OiBcImFjY190aXRsZVwiLCAxMDogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMTE6IFwiYWNjX2Rlc2NyXCIsIDEyOiBcImFjY19kZXNjcl92YWx1ZVwiLCAxMzogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDE5OiBcIlNUUlVDVF9TVEFSVFwiLCAyMTogXCJJRFwiLCAyMjogXCJDT0xPTlNFUFwiLCAyNDogXCJURVhUXCIsIDI2OiBcIlJJU0tcIiwgMjg6IFwiVkVSSUZZTVRIRFwiLCAzMDogXCJTVFJVQ1RfU1RPUFwiLCAzMTogXCJSRVFVSVJFTUVOVFwiLCAzMjogXCJGVU5DVElPTkFMX1JFUVVJUkVNRU5UXCIsIDMzOiBcIklOVEVSRkFDRV9SRVFVSVJFTUVOVFwiLCAzNDogXCJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVFwiLCAzNTogXCJQSFlTSUNBTF9SRVFVSVJFTUVOVFwiLCAzNjogXCJERVNJR05fQ09OU1RSQUlOVFwiLCAzNzogXCJMT1dfUklTS1wiLCAzODogXCJNRURfUklTS1wiLCAzOTogXCJISUdIX1JJU0tcIiwgNDA6IFwiVkVSSUZZX0FOQUxZU0lTXCIsIDQxOiBcIlZFUklGWV9ERU1PTlNUUkFUSU9OXCIsIDQyOiBcIlZFUklGWV9JTlNQRUNUSU9OXCIsIDQzOiBcIlZFUklGWV9URVNUXCIsIDQ0OiBcIkVMRU1FTlRcIiwgNDc6IFwiVFlQRVwiLCA0OTogXCJET0NSRUZcIiwgNTE6IFwiRU5EX0FSUk9XX0xcIiwgNTM6IFwiTElORVwiLCA1NDogXCJFTkRfQVJST1dfUlwiLCA1NTogXCJDT05UQUlOU1wiLCA1NjogXCJDT1BJRVNcIiwgNTc6IFwiREVSSVZFU1wiLCA1ODogXCJTQVRJU0ZJRVNcIiwgNTk6IFwiVkVSSUZJRVNcIiwgNjA6IFwiUkVGSU5FU1wiLCA2MTogXCJUUkFDRVNcIiwgNjI6IFwidW5xU3RyaW5nXCIsIDYzOiBcInFTdHJpbmdcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzMsIDJdLCBbMywgNF0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMV0sIFs3LCAwXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFsxNCwgNV0sIFsyMCwgNV0sIFsyMCwgNV0sIFsyMCwgNV0sIFsyMCwgNV0sIFsyMCwgMl0sIFsyMCwgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsyNywgMV0sIFsyNywgMV0sIFsyNywgMV0sIFsyOSwgMV0sIFsyOSwgMV0sIFsyOSwgMV0sIFsyOSwgMV0sIFsxNSwgNV0sIFs0NiwgNV0sIFs0NiwgNV0sIFs0NiwgMl0sIFs0NiwgMV0sIFsxNiwgNV0sIFsxNiwgNV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFsxOCwgMV0sIFsxOCwgMV0sIFsyMywgMV0sIFsyMywgMV0sIFsyNSwgMV0sIFsyNSwgMV0sIFs0NSwgMV0sIFs0NSwgMV0sIFs0OCwgMV0sIFs0OCwgMV0sIFs1MCwgMV0sIFs1MCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB5eS5hZGRSZXF1aXJlbWVudCgkJFskMCAtIDNdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICB5eS5zZXROZXdSZXFJZCgkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5zZXROZXdSZXFUZXh0KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LnNldE5ld1JlcVJpc2soJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgeXkuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJpc2tMZXZlbC5MT1dfUklTSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SaXNrTGV2ZWwuTUVEX1JJU0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmlza0xldmVsLkhJR0hfUklTSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgdGhpcy4kID0geXkuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5hZGRFbGVtZW50KCQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHl5LnNldE5ld0VsZW1lbnRUeXBlKCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIHl5LnNldE5ld0VsZW1lbnREb2NSZWYoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gMl0sICQkWyQwXSwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gMl0sICQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5DT05UQUlOUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLkNPUElFUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLkRFUklWRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5WRVJJRklFUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLlJFRklORVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5UUkFDRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDY6ICRWMCwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzIH0sIHsgMTogWzNdIH0sIHsgMzogOCwgNDogMiwgNTogWzEsIDddLCA2OiAkVjAsIDk6ICRWMSwgMTE6ICRWMiwgMTM6ICRWMyB9LCB7IDU6IFsxLCA5XSB9LCB7IDEwOiBbMSwgMTBdIH0sIHsgMTI6IFsxLCAxMV0gfSwgbygkVjQsIFsyLCA2XSksIHsgMzogMTIsIDQ6IDIsIDY6ICRWMCwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzIH0sIHsgMTogWzIsIDJdIH0sIHsgNDogMTcsIDU6ICRWNSwgNzogMTMsIDg6ICRWNiwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzLCAxNDogMTQsIDE1OiAxNSwgMTY6IDE2LCAxNzogMTksIDIzOiAyMSwgMzE6ICRWNywgMzI6ICRWOCwgMzM6ICRWOSwgMzQ6ICRWYSwgMzU6ICRWYiwgMzY6ICRWYywgNDQ6ICRWZCwgNjI6ICRWZSwgNjM6ICRWZiB9LCBvKCRWNCwgWzIsIDRdKSwgbygkVjQsIFsyLCA1XSksIHsgMTogWzIsIDFdIH0sIHsgODogWzEsIDMwXSB9LCB7IDQ6IDE3LCA1OiAkVjUsIDc6IDMxLCA4OiAkVjYsIDk6ICRWMSwgMTE6ICRWMiwgMTM6ICRWMywgMTQ6IDE0LCAxNTogMTUsIDE2OiAxNiwgMTc6IDE5LCAyMzogMjEsIDMxOiAkVjcsIDMyOiAkVjgsIDMzOiAkVjksIDM0OiAkVmEsIDM1OiAkVmIsIDM2OiAkVmMsIDQ0OiAkVmQsIDYyOiAkVmUsIDYzOiAkVmYgfSwgeyA0OiAxNywgNTogJFY1LCA3OiAzMiwgODogJFY2LCA5OiAkVjEsIDExOiAkVjIsIDEzOiAkVjMsIDE0OiAxNCwgMTU6IDE1LCAxNjogMTYsIDE3OiAxOSwgMjM6IDIxLCAzMTogJFY3LCAzMjogJFY4LCAzMzogJFY5LCAzNDogJFZhLCAzNTogJFZiLCAzNjogJFZjLCA0NDogJFZkLCA2MjogJFZlLCA2MzogJFZmIH0sIHsgNDogMTcsIDU6ICRWNSwgNzogMzMsIDg6ICRWNiwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzLCAxNDogMTQsIDE1OiAxNSwgMTY6IDE2LCAxNzogMTksIDIzOiAyMSwgMzE6ICRWNywgMzI6ICRWOCwgMzM6ICRWOSwgMzQ6ICRWYSwgMzU6ICRWYiwgMzY6ICRWYywgNDQ6ICRWZCwgNjI6ICRWZSwgNjM6ICRWZiB9LCB7IDQ6IDE3LCA1OiAkVjUsIDc6IDM0LCA4OiAkVjYsIDk6ICRWMSwgMTE6ICRWMiwgMTM6ICRWMywgMTQ6IDE0LCAxNTogMTUsIDE2OiAxNiwgMTc6IDE5LCAyMzogMjEsIDMxOiAkVjcsIDMyOiAkVjgsIDMzOiAkVjksIDM0OiAkVmEsIDM1OiAkVmIsIDM2OiAkVmMsIDQ0OiAkVmQsIDYyOiAkVmUsIDYzOiAkVmYgfSwgeyA0OiAxNywgNTogJFY1LCA3OiAzNSwgODogJFY2LCA5OiAkVjEsIDExOiAkVjIsIDEzOiAkVjMsIDE0OiAxNCwgMTU6IDE1LCAxNjogMTYsIDE3OiAxOSwgMjM6IDIxLCAzMTogJFY3LCAzMjogJFY4LCAzMzogJFY5LCAzNDogJFZhLCAzNTogJFZiLCAzNjogJFZjLCA0NDogJFZkLCA2MjogJFZlLCA2MzogJFZmIH0sIHsgMTg6IDM2LCA2MjogWzEsIDM3XSwgNjM6IFsxLCAzOF0gfSwgeyA0NTogMzksIDYyOiBbMSwgNDBdLCA2MzogWzEsIDQxXSB9LCB7IDUxOiBbMSwgNDJdLCA1MzogWzEsIDQzXSB9LCBvKCRWZywgWzIsIDIwXSksIG8oJFZnLCBbMiwgMjFdKSwgbygkVmcsIFsyLCAyMl0pLCBvKCRWZywgWzIsIDIzXSksIG8oJFZnLCBbMiwgMjRdKSwgbygkVmcsIFsyLCAyNV0pLCBvKCRWaCwgWzIsIDQ5XSksIG8oJFZoLCBbMiwgNTBdKSwgeyAxOiBbMiwgM10gfSwgeyA4OiBbMiwgOF0gfSwgeyA4OiBbMiwgOV0gfSwgeyA4OiBbMiwgMTBdIH0sIHsgODogWzIsIDExXSB9LCB7IDg6IFsyLCAxMl0gfSwgeyAxOTogWzEsIDQ0XSB9LCB7IDE5OiBbMiwgNDddIH0sIHsgMTk6IFsyLCA0OF0gfSwgeyAxOTogWzEsIDQ1XSB9LCB7IDE5OiBbMiwgNTNdIH0sIHsgMTk6IFsyLCA1NF0gfSwgeyA1MjogNDYsIDU1OiAkVmksIDU2OiAkVmosIDU3OiAkVmssIDU4OiAkVmwsIDU5OiAkVm0sIDYwOiAkVm4sIDYxOiAkVm8gfSwgeyA1MjogNTQsIDU1OiAkVmksIDU2OiAkVmosIDU3OiAkVmssIDU4OiAkVmwsIDU5OiAkVm0sIDYwOiAkVm4sIDYxOiAkVm8gfSwgeyA1OiBbMSwgNTVdIH0sIHsgNTogWzEsIDU2XSB9LCB7IDUzOiBbMSwgNTddIH0sIG8oJFZwLCBbMiwgNDBdKSwgbygkVnAsIFsyLCA0MV0pLCBvKCRWcCwgWzIsIDQyXSksIG8oJFZwLCBbMiwgNDNdKSwgbygkVnAsIFsyLCA0NF0pLCBvKCRWcCwgWzIsIDQ1XSksIG8oJFZwLCBbMiwgNDZdKSwgeyA1NDogWzEsIDU4XSB9LCB7IDU6ICRWcSwgMjA6IDU5LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZ3LCAzMDogJFZ4LCA0NjogNjYsIDQ3OiAkVnksIDQ5OiAkVnogfSwgeyAyMzogNzEsIDYyOiAkVmUsIDYzOiAkVmYgfSwgeyAyMzogNzIsIDYyOiAkVmUsIDYzOiAkVmYgfSwgbygkVkEsIFsyLCAxM10pLCB7IDIyOiBbMSwgNzNdIH0sIHsgMjI6IFsxLCA3NF0gfSwgeyAyMjogWzEsIDc1XSB9LCB7IDIyOiBbMSwgNzZdIH0sIHsgNTogJFZxLCAyMDogNzcsIDIxOiAkVnIsIDI0OiAkVnMsIDI2OiAkVnQsIDI4OiAkVnUsIDMwOiAkVnYgfSwgbygkVkEsIFsyLCAxOV0pLCBvKCRWQSwgWzIsIDMzXSksIHsgMjI6IFsxLCA3OF0gfSwgeyAyMjogWzEsIDc5XSB9LCB7IDU6ICRWdywgMzA6ICRWeCwgNDY6IDgwLCA0NzogJFZ5LCA0OTogJFZ6IH0sIG8oJFZBLCBbMiwgMzddKSwgbygkVkEsIFsyLCAzOF0pLCBvKCRWQSwgWzIsIDM5XSksIHsgMjM6IDgxLCA2MjogJFZlLCA2MzogJFZmIH0sIHsgMjU6IDgyLCA2MjogWzEsIDgzXSwgNjM6IFsxLCA4NF0gfSwgeyAyNzogODUsIDM3OiBbMSwgODZdLCAzODogWzEsIDg3XSwgMzk6IFsxLCA4OF0gfSwgeyAyOTogODksIDQwOiBbMSwgOTBdLCA0MTogWzEsIDkxXSwgNDI6IFsxLCA5Ml0sIDQzOiBbMSwgOTNdIH0sIG8oJFZBLCBbMiwgMThdKSwgeyA0ODogOTQsIDYyOiBbMSwgOTVdLCA2MzogWzEsIDk2XSB9LCB7IDUwOiA5NywgNjI6IFsxLCA5OF0sIDYzOiBbMSwgOTldIH0sIG8oJFZBLCBbMiwgMzZdKSwgeyA1OiBbMSwgMTAwXSB9LCB7IDU6IFsxLCAxMDFdIH0sIHsgNTogWzIsIDUxXSB9LCB7IDU6IFsyLCA1Ml0gfSwgeyA1OiBbMSwgMTAyXSB9LCB7IDU6IFsyLCAyNl0gfSwgeyA1OiBbMiwgMjddIH0sIHsgNTogWzIsIDI4XSB9LCB7IDU6IFsxLCAxMDNdIH0sIHsgNTogWzIsIDI5XSB9LCB7IDU6IFsyLCAzMF0gfSwgeyA1OiBbMiwgMzFdIH0sIHsgNTogWzIsIDMyXSB9LCB7IDU6IFsxLCAxMDRdIH0sIHsgNTogWzIsIDU1XSB9LCB7IDU6IFsyLCA1Nl0gfSwgeyA1OiBbMSwgMTA1XSB9LCB7IDU6IFsyLCA1N10gfSwgeyA1OiBbMiwgNThdIH0sIHsgNTogJFZxLCAyMDogMTA2LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZxLCAyMDogMTA3LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZxLCAyMDogMTA4LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZxLCAyMDogMTA5LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZ3LCAzMDogJFZ4LCA0NjogMTEwLCA0NzogJFZ5LCA0OTogJFZ6IH0sIHsgNTogJFZ3LCAzMDogJFZ4LCA0NjogMTExLCA0NzogJFZ5LCA0OTogJFZ6IH0sIG8oJFZBLCBbMiwgMTRdKSwgbygkVkEsIFsyLCAxNV0pLCBvKCRWQSwgWzIsIDE2XSksIG8oJFZBLCBbMiwgMTddKSwgbygkVkEsIFsyLCAzNF0pLCBvKCRWQSwgWzIsIDM1XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDg6IFsyLCAyXSwgMTI6IFsyLCAxXSwgMzA6IFsyLCAzXSwgMzE6IFsyLCA4XSwgMzI6IFsyLCA5XSwgMzM6IFsyLCAxMF0sIDM0OiBbMiwgMTFdLCAzNTogWzIsIDEyXSwgMzc6IFsyLCA0N10sIDM4OiBbMiwgNDhdLCA0MDogWzIsIDUzXSwgNDE6IFsyLCA1NF0sIDgzOiBbMiwgNTFdLCA4NDogWzIsIDUyXSwgODY6IFsyLCAyNl0sIDg3OiBbMiwgMjddLCA4ODogWzIsIDI4XSwgOTA6IFsyLCAyOV0sIDkxOiBbMiwgMzBdLCA5MjogWzIsIDMxXSwgOTM6IFsyLCAzMl0sIDk1OiBbMiwgNTVdLCA5NjogWzIsIDU2XSwgOTg6IFsyLCA1N10sIDk5OiBbMiwgNThdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBcInRpdGxlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gMjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDM3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gNjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIDQ3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHJldHVybiA1MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gXCJxU3RyaW5nXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/OnRpdGxlXFxzW14jXFxuO10rKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzooXFxyP1xcbikrKS9pLCAvXig/OlxccyspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JVteXFxuXSopL2ksIC9eKD86JCkvaSwgL14oPzpyZXF1aXJlbWVudERpYWdyYW1cXGIpL2ksIC9eKD86XFx7KS9pLCAvXig/OlxcfSkvaSwgL14oPzo6KS9pLCAvXig/OmlkXFxiKS9pLCAvXig/OnRleHRcXGIpL2ksIC9eKD86cmlza1xcYikvaSwgL14oPzp2ZXJpZnlNZXRob2RcXGIpL2ksIC9eKD86cmVxdWlyZW1lbnRcXGIpL2ksIC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XFxiKS9pLCAvXig/OmludGVyZmFjZVJlcXVpcmVtZW50XFxiKS9pLCAvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcXGIpL2ksIC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxcYikvaSwgL14oPzpkZXNpZ25Db25zdHJhaW50XFxiKS9pLCAvXig/Omxvd1xcYikvaSwgL14oPzptZWRpdW1cXGIpL2ksIC9eKD86aGlnaFxcYikvaSwgL14oPzphbmFseXNpc1xcYikvaSwgL14oPzpkZW1vbnN0cmF0aW9uXFxiKS9pLCAvXig/Omluc3BlY3Rpb25cXGIpL2ksIC9eKD86dGVzdFxcYikvaSwgL14oPzplbGVtZW50XFxiKS9pLCAvXig/OmNvbnRhaW5zXFxiKS9pLCAvXig/OmNvcGllc1xcYikvaSwgL14oPzpkZXJpdmVzXFxiKS9pLCAvXig/OnNhdGlzZmllc1xcYikvaSwgL14oPzp2ZXJpZmllc1xcYikvaSwgL14oPzpyZWZpbmVzXFxiKS9pLCAvXig/OnRyYWNlc1xcYikvaSwgL14oPzp0eXBlXFxiKS9pLCAvXig/OmRvY3JlZlxcYikvaSwgL14oPzo8LSkvaSwgL14oPzotPikvaSwgL14oPzotKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86W1xcd11bXlxcclxcblxce1xcPFxcPlxcLVxcPV0qKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbNiwgN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidW5xU3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0b2tlblwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbNDgsIDQ5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMywgNSwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA1MF0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciByZXF1aXJlbWVudERpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL3JlcXVpcmVtZW50L3JlcXVpcmVtZW50RGIuanNcbnZhciByZWxhdGlvbnMgPSBbXTtcbnZhciBsYXRlc3RSZXF1aXJlbWVudCA9IHt9O1xudmFyIHJlcXVpcmVtZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgbGF0ZXN0RWxlbWVudCA9IHt9O1xudmFyIGVsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBSZXF1aXJlbWVudFR5cGUgPSB7XG4gIFJFUVVJUkVNRU5UOiBcIlJlcXVpcmVtZW50XCIsXG4gIEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IFwiRnVuY3Rpb25hbCBSZXF1aXJlbWVudFwiLFxuICBJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IFwiSW50ZXJmYWNlIFJlcXVpcmVtZW50XCIsXG4gIFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOiBcIlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50XCIsXG4gIFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiBcIlBoeXNpY2FsIFJlcXVpcmVtZW50XCIsXG4gIERFU0lHTl9DT05TVFJBSU5UOiBcIkRlc2lnbiBDb25zdHJhaW50XCJcbn07XG52YXIgUmlza0xldmVsID0ge1xuICBMT1dfUklTSzogXCJMb3dcIixcbiAgTUVEX1JJU0s6IFwiTWVkaXVtXCIsXG4gIEhJR0hfUklTSzogXCJIaWdoXCJcbn07XG52YXIgVmVyaWZ5VHlwZSA9IHtcbiAgVkVSSUZZX0FOQUxZU0lTOiBcIkFuYWx5c2lzXCIsXG4gIFZFUklGWV9ERU1PTlNUUkFUSU9OOiBcIkRlbW9uc3RyYXRpb25cIixcbiAgVkVSSUZZX0lOU1BFQ1RJT046IFwiSW5zcGVjdGlvblwiLFxuICBWRVJJRllfVEVTVDogXCJUZXN0XCJcbn07XG52YXIgUmVsYXRpb25zaGlwcyA9IHtcbiAgQ09OVEFJTlM6IFwiY29udGFpbnNcIixcbiAgQ09QSUVTOiBcImNvcGllc1wiLFxuICBERVJJVkVTOiBcImRlcml2ZXNcIixcbiAgU0FUSVNGSUVTOiBcInNhdGlzZmllc1wiLFxuICBWRVJJRklFUzogXCJ2ZXJpZmllc1wiLFxuICBSRUZJTkVTOiBcInJlZmluZXNcIixcbiAgVFJBQ0VTOiBcInRyYWNlc1wiXG59O1xudmFyIGFkZFJlcXVpcmVtZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobmFtZSwgdHlwZSkgPT4ge1xuICBpZiAoIXJlcXVpcmVtZW50cy5oYXMobmFtZSkpIHtcbiAgICByZXF1aXJlbWVudHMuc2V0KG5hbWUsIHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgaWQ6IGxhdGVzdFJlcXVpcmVtZW50LmlkLFxuICAgICAgdGV4dDogbGF0ZXN0UmVxdWlyZW1lbnQudGV4dCxcbiAgICAgIHJpc2s6IGxhdGVzdFJlcXVpcmVtZW50LnJpc2ssXG4gICAgICB2ZXJpZnlNZXRob2Q6IGxhdGVzdFJlcXVpcmVtZW50LnZlcmlmeU1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGxhdGVzdFJlcXVpcmVtZW50ID0ge307XG4gIHJldHVybiByZXF1aXJlbWVudHMuZ2V0KG5hbWUpO1xufSwgXCJhZGRSZXF1aXJlbWVudFwiKTtcbnZhciBnZXRSZXF1aXJlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHJlcXVpcmVtZW50cywgXCJnZXRSZXF1aXJlbWVudHNcIik7XG52YXIgc2V0TmV3UmVxSWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4ge1xuICBpZiAobGF0ZXN0UmVxdWlyZW1lbnQgIT09IHZvaWQgMCkge1xuICAgIGxhdGVzdFJlcXVpcmVtZW50LmlkID0gaWQ7XG4gIH1cbn0sIFwic2V0TmV3UmVxSWRcIik7XG52YXIgc2V0TmV3UmVxVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC50ZXh0ID0gdGV4dDtcbiAgfVxufSwgXCJzZXROZXdSZXFUZXh0XCIpO1xudmFyIHNldE5ld1JlcVJpc2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyaXNrKSA9PiB7XG4gIGlmIChsYXRlc3RSZXF1aXJlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgbGF0ZXN0UmVxdWlyZW1lbnQucmlzayA9IHJpc2s7XG4gIH1cbn0sIFwic2V0TmV3UmVxUmlza1wiKTtcbnZhciBzZXROZXdSZXFWZXJpZnlNZXRob2QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2ZXJpZnlNZXRob2QpID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC52ZXJpZnlNZXRob2QgPSB2ZXJpZnlNZXRob2Q7XG4gIH1cbn0sIFwic2V0TmV3UmVxVmVyaWZ5TWV0aG9kXCIpO1xudmFyIGFkZEVsZW1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChuYW1lKSA9PiB7XG4gIGlmICghZWxlbWVudHMuaGFzKG5hbWUpKSB7XG4gICAgZWxlbWVudHMuc2V0KG5hbWUsIHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiBsYXRlc3RFbGVtZW50LnR5cGUsXG4gICAgICBkb2NSZWY6IGxhdGVzdEVsZW1lbnQuZG9jUmVmXG4gICAgfSk7XG4gICAgbG9nLmluZm8oXCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6IFwiLCBuYW1lKTtcbiAgfVxuICBsYXRlc3RFbGVtZW50ID0ge307XG4gIHJldHVybiBlbGVtZW50cy5nZXQobmFtZSk7XG59LCBcImFkZEVsZW1lbnRcIik7XG52YXIgZ2V0RWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGVsZW1lbnRzLCBcImdldEVsZW1lbnRzXCIpO1xudmFyIHNldE5ld0VsZW1lbnRUeXBlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHlwZSkgPT4ge1xuICBpZiAobGF0ZXN0RWxlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgbGF0ZXN0RWxlbWVudC50eXBlID0gdHlwZTtcbiAgfVxufSwgXCJzZXROZXdFbGVtZW50VHlwZVwiKTtcbnZhciBzZXROZXdFbGVtZW50RG9jUmVmID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZG9jUmVmKSA9PiB7XG4gIGlmIChsYXRlc3RFbGVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RFbGVtZW50LmRvY1JlZiA9IGRvY1JlZjtcbiAgfVxufSwgXCJzZXROZXdFbGVtZW50RG9jUmVmXCIpO1xudmFyIGFkZFJlbGF0aW9uc2hpcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR5cGUsIHNyYywgZHN0KSA9PiB7XG4gIHJlbGF0aW9ucy5wdXNoKHtcbiAgICB0eXBlLFxuICAgIHNyYyxcbiAgICBkc3RcbiAgfSk7XG59LCBcImFkZFJlbGF0aW9uc2hpcFwiKTtcbnZhciBnZXRSZWxhdGlvbnNoaXBzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiByZWxhdGlvbnMsIFwiZ2V0UmVsYXRpb25zaGlwc1wiKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmVsYXRpb25zID0gW107XG4gIGxhdGVzdFJlcXVpcmVtZW50ID0ge307XG4gIHJlcXVpcmVtZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGxhdGVzdEVsZW1lbnQgPSB7fTtcbiAgZWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBjbGVhcigpO1xufSwgXCJjbGVhclwiKTtcbnZhciByZXF1aXJlbWVudERiX2RlZmF1bHQgPSB7XG4gIFJlcXVpcmVtZW50VHlwZSxcbiAgUmlza0xldmVsLFxuICBWZXJpZnlUeXBlLFxuICBSZWxhdGlvbnNoaXBzLFxuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkucmVxLCBcImdldENvbmZpZ1wiKSxcbiAgYWRkUmVxdWlyZW1lbnQsXG4gIGdldFJlcXVpcmVtZW50cyxcbiAgc2V0TmV3UmVxSWQsXG4gIHNldE5ld1JlcVRleHQsXG4gIHNldE5ld1JlcVJpc2ssXG4gIHNldE5ld1JlcVZlcmlmeU1ldGhvZCxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGFkZEVsZW1lbnQsXG4gIGdldEVsZW1lbnRzLFxuICBzZXROZXdFbGVtZW50VHlwZSxcbiAgc2V0TmV3RWxlbWVudERvY1JlZixcbiAgYWRkUmVsYXRpb25zaGlwLFxuICBnZXRSZWxhdGlvbnNoaXBzLFxuICBjbGVhcjogY2xlYXIyXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcmVxdWlyZW1lbnQvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuXG4gIG1hcmtlciB7XG4gICAgZmlsbDogJHtvcHRpb25zLnJlbGF0aW9uQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnJlbGF0aW9uQ29sb3J9O1xuICB9XG5cbiAgbWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLmZvbnRTaXplfTtcbiAgfVxuXG4gIC5yZXFCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5yZXF1aXJlbWVudEJhY2tncm91bmR9O1xuICAgIGZpbGwtb3BhY2l0eTogMS4wO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07XG4gIH1cbiAgXG4gIC5yZXFUaXRsZSwgLnJlcUxhYmVse1xuICAgIGZpbGw6ICAke29wdGlvbnMucmVxdWlyZW1lbnRUZXh0Q29sb3J9O1xuICB9XG4gIC5yZXFMYWJlbEJveCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICBmaWxsLW9wYWNpdHk6IDEuMDtcbiAgfVxuXG4gIC5yZXEtdGl0bGUtbGluZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAke29wdGlvbnMucmVxdWlyZW1lbnRCb3JkZXJTaXplfTtcbiAgfVxuICAucmVsYXRpb25zaGlwTGluZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucmVsYXRpb25Db2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMYWJlbCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnJlbGF0aW9uTGFiZWxDb2xvcn07XG4gIH1cblxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9yZXF1aXJlbWVudC9yZXF1aXJlbWVudFJlbmRlcmVyLmpzXG5pbXBvcnQgeyBsaW5lLCBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGxheW91dCBhcyBkYWdyZUxheW91dCB9IGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3JlcXVpcmVtZW50L3JlcXVpcmVtZW50TWFya2Vycy5qc1xudmFyIFJlcU1hcmtlcnMgPSB7XG4gIENPTlRBSU5TOiBcImNvbnRhaW5zXCIsXG4gIEFSUk9XOiBcImFycm93XCJcbn07XG52YXIgaW5zZXJ0TGluZUVuZGluZ3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnROb2RlLCBjb25mMikgPT4ge1xuICBsZXQgY29udGFpbnNOb2RlID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgUmVxTWFya2Vycy5DT05UQUlOUyArIFwiX2xpbmVfZW5kaW5nXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcIm1hcmtlcldpZHRoXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJnXCIpO1xuICBjb250YWluc05vZGUuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCBjb25mMi5saW5lX2hlaWdodCAvIDIpLmF0dHIoXCJjeVwiLCBjb25mMi5saW5lX2hlaWdodCAvIDIpLmF0dHIoXCJyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpO1xuICBjb250YWluc05vZGUuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgMCkuYXR0cihcIngyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwieTFcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwieTJcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuICBjb250YWluc05vZGUuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieTFcIiwgMCkuYXR0cihcInkyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwieDFcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwieDJcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuICBwYXJlbnROb2RlLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBSZXFNYXJrZXJzLkFSUk9XICsgXCJfbGluZV9lbmRpbmdcIikuYXR0cihcInJlZlhcIiwgY29uZjIubGluZV9oZWlnaHQpLmF0dHIoXCJyZWZZXCIsIDAuNSAqIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgY29uZjIubGluZV9oZWlnaHQpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgY29uZjIubGluZV9oZWlnaHQpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAsMFxuICAgICAgTCR7Y29uZjIubGluZV9oZWlnaHR9LCR7Y29uZjIubGluZV9oZWlnaHQgLyAyfVxuICAgICAgTSR7Y29uZjIubGluZV9oZWlnaHR9LCR7Y29uZjIubGluZV9oZWlnaHQgLyAyfVxuICAgICAgTDAsJHtjb25mMi5saW5lX2hlaWdodH1gXG4gICkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcbn0sIFwiaW5zZXJ0TGluZUVuZGluZ3NcIik7XG52YXIgcmVxdWlyZW1lbnRNYXJrZXJzX2RlZmF1bHQgPSB7XG4gIFJlcU1hcmtlcnMsXG4gIGluc2VydExpbmVFbmRpbmdzXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcmVxdWlyZW1lbnQvcmVxdWlyZW1lbnRSZW5kZXJlci5qc1xudmFyIGNvbmYgPSB7fTtcbnZhciByZWxDbnQgPSAwO1xudmFyIG5ld1JlY3ROb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50Tm9kZSwgaWQpID0+IHtcbiAgcmV0dXJuIHBhcmVudE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGlkKS5hdHRyKFwiY2xhc3NcIiwgXCJyZXEgcmVxQm94XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJ3aWR0aFwiLCBjb25mLnJlY3RfbWluX3dpZHRoICsgXCJweFwiKS5hdHRyKFwiaGVpZ2h0XCIsIGNvbmYucmVjdF9taW5faGVpZ2h0ICsgXCJweFwiKTtcbn0sIFwibmV3UmVjdE5vZGVcIik7XG52YXIgbmV3VGl0bGVOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50Tm9kZSwgaWQsIHR4dHMpID0+IHtcbiAgbGV0IHggPSBjb25mLnJlY3RfbWluX3dpZHRoIC8gMjtcbiAgbGV0IHRpdGxlID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZXFMYWJlbCByZXFUaXRsZVwiKS5hdHRyKFwiaWRcIiwgaWQpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIGNvbmYucmVjdF9wYWRkaW5nKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJoYW5naW5nXCIpO1xuICBsZXQgaSA9IDA7XG4gIHR4dHMuZm9yRWFjaCgodGV4dFN0cikgPT4ge1xuICAgIGlmIChpID09IDApIHtcbiAgICAgIHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwieFwiLCBjb25mLnJlY3RfbWluX3dpZHRoIC8gMikuYXR0cihcImR5XCIsIDApLnRleHQodGV4dFN0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwieFwiLCBjb25mLnJlY3RfbWluX3dpZHRoIC8gMikuYXR0cihcImR5XCIsIGNvbmYubGluZV9oZWlnaHQgKiAwLjc1KS50ZXh0KHRleHRTdHIpO1xuICAgIH1cbiAgICBpKys7XG4gIH0pO1xuICBsZXQgeVBhZGRpbmcgPSAxLjUgKiBjb25mLnJlY3RfcGFkZGluZztcbiAgbGV0IGxpbmVQYWRkaW5nID0gaSAqIGNvbmYubGluZV9oZWlnaHQgKiAwLjc1O1xuICBsZXQgdG90YWxZID0geVBhZGRpbmcgKyBsaW5lUGFkZGluZztcbiAgcGFyZW50Tm9kZS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcS10aXRsZS1saW5lXCIpLmF0dHIoXCJ4MVwiLCBcIjBcIikuYXR0cihcIngyXCIsIGNvbmYucmVjdF9taW5fd2lkdGgpLmF0dHIoXCJ5MVwiLCB0b3RhbFkpLmF0dHIoXCJ5MlwiLCB0b3RhbFkpO1xuICByZXR1cm4ge1xuICAgIHRpdGxlTm9kZTogdGl0bGUsXG4gICAgeTogdG90YWxZXG4gIH07XG59LCBcIm5ld1RpdGxlTm9kZVwiKTtcbnZhciBuZXdCb2R5Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudE5vZGUsIGlkLCB0eHRzLCB5U3RhcnQpID0+IHtcbiAgbGV0IGJvZHkgPSBwYXJlbnROb2RlLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIFwicmVxIHJlcUxhYmVsXCIpLmF0dHIoXCJpZFwiLCBpZCkuYXR0cihcInhcIiwgY29uZi5yZWN0X3BhZGRpbmcpLmF0dHIoXCJ5XCIsIHlTdGFydCkuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiaGFuZ2luZ1wiKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSAwO1xuICBjb25zdCBjaGFyTGltaXQgPSAzMDtcbiAgbGV0IHdyYXBwZWRUeHRzID0gW107XG4gIHR4dHMuZm9yRWFjaCgodGV4dFN0cikgPT4ge1xuICAgIGxldCBjdXJyZW50VGV4dExlbiA9IHRleHRTdHIubGVuZ3RoO1xuICAgIHdoaWxlIChjdXJyZW50VGV4dExlbiA+IGNoYXJMaW1pdCAmJiBjdXJyZW50Um93IDwgMykge1xuICAgICAgbGV0IGZpcnN0UGFydCA9IHRleHRTdHIuc3Vic3RyaW5nKDAsIGNoYXJMaW1pdCk7XG4gICAgICB0ZXh0U3RyID0gdGV4dFN0ci5zdWJzdHJpbmcoY2hhckxpbWl0LCB0ZXh0U3RyLmxlbmd0aCk7XG4gICAgICBjdXJyZW50VGV4dExlbiA9IHRleHRTdHIubGVuZ3RoO1xuICAgICAgd3JhcHBlZFR4dHNbd3JhcHBlZFR4dHMubGVuZ3RoXSA9IGZpcnN0UGFydDtcbiAgICAgIGN1cnJlbnRSb3crKztcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRSb3cgPT0gMykge1xuICAgICAgbGV0IGxhc3RTdHIgPSB3cmFwcGVkVHh0c1t3cmFwcGVkVHh0cy5sZW5ndGggLSAxXTtcbiAgICAgIHdyYXBwZWRUeHRzW3dyYXBwZWRUeHRzLmxlbmd0aCAtIDFdID0gbGFzdFN0ci5zdWJzdHJpbmcoMCwgbGFzdFN0ci5sZW5ndGggLSA0KSArIFwiLi4uXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdyYXBwZWRUeHRzW3dyYXBwZWRUeHRzLmxlbmd0aF0gPSB0ZXh0U3RyO1xuICAgIH1cbiAgICBjdXJyZW50Um93ID0gMDtcbiAgfSk7XG4gIHdyYXBwZWRUeHRzLmZvckVhY2goKHRleHRTdHIpID0+IHtcbiAgICBib2R5LmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIGNvbmYucmVjdF9wYWRkaW5nKS5hdHRyKFwiZHlcIiwgY29uZi5saW5lX2hlaWdodCkudGV4dCh0ZXh0U3RyKTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufSwgXCJuZXdCb2R5Tm9kZVwiKTtcbnZhciBhZGRFZGdlTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnROb2RlLCBzdmdQYXRoLCBjb25mMiwgdHh0KSA9PiB7XG4gIGNvbnN0IGxlbiA9IHN2Z1BhdGgubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCk7XG4gIGNvbnN0IGxhYmVsUG9pbnQgPSBzdmdQYXRoLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGxlbiAqIDAuNSk7XG4gIGNvbnN0IGxhYmVsSWQgPSBcInJlbFwiICsgcmVsQ250O1xuICByZWxDbnQrKztcbiAgY29uc3QgbGFiZWxOb2RlID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZWxhdGlvbnNoaXBMYWJlbFwiKS5hdHRyKFwiaWRcIiwgbGFiZWxJZCkuYXR0cihcInhcIiwgbGFiZWxQb2ludC54KS5hdHRyKFwieVwiLCBsYWJlbFBvaW50LnkpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikudGV4dCh0eHQpO1xuICBjb25zdCBsYWJlbEJCb3ggPSBsYWJlbE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgcGFyZW50Tm9kZS5pbnNlcnQoXCJyZWN0XCIsIFwiI1wiICsgbGFiZWxJZCkuYXR0cihcImNsYXNzXCIsIFwicmVxIHJlcUxhYmVsQm94XCIpLmF0dHIoXCJ4XCIsIGxhYmVsUG9pbnQueCAtIGxhYmVsQkJveC53aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIGxhYmVsUG9pbnQueSAtIGxhYmVsQkJveC5oZWlnaHQgLyAyKS5hdHRyKFwid2lkdGhcIiwgbGFiZWxCQm94LndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGxhYmVsQkJveC5oZWlnaHQpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImZpbGwtb3BhY2l0eVwiLCBcIjg1JVwiKTtcbn0sIFwiYWRkRWRnZUxhYmVsXCIpO1xudmFyIGRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdmcsIHJlbCwgZywgaW5zZXJ0LCBkaWFnT2JqKSB7XG4gIGNvbnN0IGVkZ2UgPSBnLmVkZ2UoZWxlbWVudFN0cmluZyhyZWwuc3JjKSwgZWxlbWVudFN0cmluZyhyZWwuZHN0KSk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KTtcbiAgY29uc3Qgc3ZnUGF0aCA9IHN2Zy5pbnNlcnQoXCJwYXRoXCIsIFwiI1wiICsgaW5zZXJ0KS5hdHRyKFwiY2xhc3NcIiwgXCJlciByZWxhdGlvbnNoaXBMaW5lXCIpLmF0dHIoXCJkXCIsIGxpbmVGdW5jdGlvbihlZGdlLnBvaW50cykpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgaWYgKHJlbC50eXBlID09IGRpYWdPYmouZGIuUmVsYXRpb25zaGlwcy5DT05UQUlOUykge1xuICAgIHN2Z1BhdGguYXR0cihcbiAgICAgIFwibWFya2VyLXN0YXJ0XCIsXG4gICAgICBcInVybChcIiArIGNvbW1vbl9kZWZhdWx0LmdldFVybChjb25mLmFycm93TWFya2VyQWJzb2x1dGUpICsgXCIjXCIgKyByZWwudHlwZSArIFwiX2xpbmVfZW5kaW5nKVwiXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdQYXRoLmF0dHIoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMTAsN1wiKTtcbiAgICBzdmdQYXRoLmF0dHIoXG4gICAgICBcIm1hcmtlci1lbmRcIixcbiAgICAgIFwidXJsKFwiICsgY29tbW9uX2RlZmF1bHQuZ2V0VXJsKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkgKyBcIiNcIiArIHJlcXVpcmVtZW50TWFya2Vyc19kZWZhdWx0LlJlcU1hcmtlcnMuQVJST1cgKyBcIl9saW5lX2VuZGluZylcIlxuICAgICk7XG4gIH1cbiAgYWRkRWRnZUxhYmVsKHN2Zywgc3ZnUGF0aCwgY29uZiwgYDw8JHtyZWwudHlwZX0+PmApO1xuICByZXR1cm47XG59LCBcImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0XCIpO1xudmFyIGRyYXdSZXFzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocmVxcywgZ3JhcGgsIHN2Z05vZGUpID0+IHtcbiAgcmVxcy5mb3JFYWNoKChyZXEsIHJlcU5hbWUpID0+IHtcbiAgICByZXFOYW1lID0gZWxlbWVudFN0cmluZyhyZXFOYW1lKTtcbiAgICBsb2cuaW5mbyhcIkFkZGVkIG5ldyByZXF1aXJlbWVudDogXCIsIHJlcU5hbWUpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgcmVxTmFtZSk7XG4gICAgY29uc3QgdGV4dElkID0gXCJyZXEtXCIgKyByZXFOYW1lO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gbmV3UmVjdE5vZGUoZ3JvdXBOb2RlLCB0ZXh0SWQpO1xuICAgIGxldCBub2RlcyA9IFtdO1xuICAgIGxldCB0aXRsZU5vZGVJbmZvID0gbmV3VGl0bGVOb2RlKGdyb3VwTm9kZSwgcmVxTmFtZSArIFwiX3RpdGxlXCIsIFtcbiAgICAgIGA8PCR7cmVxLnR5cGV9Pj5gLFxuICAgICAgYCR7cmVxLm5hbWV9YFxuICAgIF0pO1xuICAgIG5vZGVzLnB1c2godGl0bGVOb2RlSW5mby50aXRsZU5vZGUpO1xuICAgIGxldCBib2R5Tm9kZSA9IG5ld0JvZHlOb2RlKFxuICAgICAgZ3JvdXBOb2RlLFxuICAgICAgcmVxTmFtZSArIFwiX2JvZHlcIixcbiAgICAgIFtcbiAgICAgICAgYElkOiAke3JlcS5pZH1gLFxuICAgICAgICBgVGV4dDogJHtyZXEudGV4dH1gLFxuICAgICAgICBgUmlzazogJHtyZXEucmlza31gLFxuICAgICAgICBgVmVyaWZpY2F0aW9uOiAke3JlcS52ZXJpZnlNZXRob2R9YFxuICAgICAgXSxcbiAgICAgIHRpdGxlTm9kZUluZm8ueVxuICAgICk7XG4gICAgbm9kZXMucHVzaChib2R5Tm9kZSk7XG4gICAgY29uc3QgcmVjdEJCb3ggPSByZWN0Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGdyYXBoLnNldE5vZGUocmVxTmFtZSwge1xuICAgICAgd2lkdGg6IHJlY3RCQm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWN0QkJveC5oZWlnaHQsXG4gICAgICBzaGFwZTogXCJyZWN0XCIsXG4gICAgICBpZDogcmVxTmFtZVxuICAgIH0pO1xuICB9KTtcbn0sIFwiZHJhd1JlcXNcIik7XG52YXIgZHJhd0VsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxzLCBncmFwaCwgc3ZnTm9kZSkgPT4ge1xuICBlbHMuZm9yRWFjaCgoZWwsIGVsTmFtZSkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudFN0cmluZyhlbE5hbWUpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgaWQpO1xuICAgIGNvbnN0IHRleHRJZCA9IFwiZWxlbWVudC1cIiArIGlkO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gbmV3UmVjdE5vZGUoZ3JvdXBOb2RlLCB0ZXh0SWQpO1xuICAgIGxldCBub2RlcyA9IFtdO1xuICAgIGxldCB0aXRsZU5vZGVJbmZvID0gbmV3VGl0bGVOb2RlKGdyb3VwTm9kZSwgdGV4dElkICsgXCJfdGl0bGVcIiwgW2A8PEVsZW1lbnQ+PmAsIGAke2VsTmFtZX1gXSk7XG4gICAgbm9kZXMucHVzaCh0aXRsZU5vZGVJbmZvLnRpdGxlTm9kZSk7XG4gICAgbGV0IGJvZHlOb2RlID0gbmV3Qm9keU5vZGUoXG4gICAgICBncm91cE5vZGUsXG4gICAgICB0ZXh0SWQgKyBcIl9ib2R5XCIsXG4gICAgICBbYFR5cGU6ICR7ZWwudHlwZSB8fCBcIk5vdCBTcGVjaWZpZWRcIn1gLCBgRG9jIFJlZjogJHtlbC5kb2NSZWYgfHwgXCJOb25lXCJ9YF0sXG4gICAgICB0aXRsZU5vZGVJbmZvLnlcbiAgICApO1xuICAgIG5vZGVzLnB1c2goYm9keU5vZGUpO1xuICAgIGNvbnN0IHJlY3RCQm94ID0gcmVjdE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgICBncmFwaC5zZXROb2RlKGlkLCB7XG4gICAgICB3aWR0aDogcmVjdEJCb3gud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3RCQm94LmhlaWdodCxcbiAgICAgIHNoYXBlOiBcInJlY3RcIixcbiAgICAgIGlkXG4gICAgfSk7XG4gIH0pO1xufSwgXCJkcmF3RWxlbWVudHNcIik7XG52YXIgYWRkUmVsYXRpb25zaGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlbGF0aW9uc2hpcHMsIGcpID0+IHtcbiAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICBsZXQgc3JjID0gZWxlbWVudFN0cmluZyhyLnNyYyk7XG4gICAgbGV0IGRzdCA9IGVsZW1lbnRTdHJpbmcoci5kc3QpO1xuICAgIGcuc2V0RWRnZShzcmMsIGRzdCwgeyByZWxhdGlvbnNoaXA6IHIgfSk7XG4gIH0pO1xuICByZXR1cm4gcmVsYXRpb25zaGlwcztcbn0sIFwiYWRkUmVsYXRpb25zaGlwc1wiKTtcbnZhciBhZGp1c3RFbnRpdGllcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3ZnTm9kZSwgZ3JhcGgpIHtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAodiAhPT0gdm9pZCAwICYmIGdyYXBoLm5vZGUodikgIT09IHZvaWQgMCkge1xuICAgICAgc3ZnTm9kZS5zZWxlY3QoXCIjXCIgKyB2KTtcbiAgICAgIHN2Z05vZGUuc2VsZWN0KFwiI1wiICsgdikuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoZ3JhcGgubm9kZSh2KS54IC0gZ3JhcGgubm9kZSh2KS53aWR0aCAvIDIpICsgXCIsXCIgKyAoZ3JhcGgubm9kZSh2KS55IC0gZ3JhcGgubm9kZSh2KS5oZWlnaHQgLyAyKSArIFwiIClcIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm47XG59LCBcImFkanVzdEVudGl0aWVzXCIpO1xudmFyIGVsZW1lbnRTdHJpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMvZywgXCJcIikucmVwbGFjZSgvXFwuL2csIFwiX1wiKTtcbn0sIFwiZWxlbWVudFN0cmluZ1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIGNvbmYgPSBnZXRDb25maWcoKS5yZXF1aXJlbWVudDtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGNvbmYuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICByZXF1aXJlbWVudE1hcmtlcnNfZGVmYXVsdC5pbnNlcnRMaW5lRW5kaW5ncyhzdmcsIGNvbmYpO1xuICBjb25zdCBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiBmYWxzZSxcbiAgICBjb21wb3VuZDogZmFsc2UsXG4gICAgZGlyZWN0ZWQ6IHRydWVcbiAgfSkuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IGNvbmYubGF5b3V0RGlyZWN0aW9uLFxuICAgIG1hcmdpbng6IDIwLFxuICAgIG1hcmdpbnk6IDIwLFxuICAgIG5vZGVzZXA6IDEwMCxcbiAgICBlZGdlc2VwOiAxMDAsXG4gICAgcmFua3NlcDogMTAwXG4gIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgbGV0IHJlcXVpcmVtZW50czIgPSBkaWFnT2JqLmRiLmdldFJlcXVpcmVtZW50cygpO1xuICBsZXQgZWxlbWVudHMyID0gZGlhZ09iai5kYi5nZXRFbGVtZW50cygpO1xuICBsZXQgcmVsYXRpb25zaGlwcyA9IGRpYWdPYmouZGIuZ2V0UmVsYXRpb25zaGlwcygpO1xuICBkcmF3UmVxcyhyZXF1aXJlbWVudHMyLCBnLCBzdmcpO1xuICBkcmF3RWxlbWVudHMoZWxlbWVudHMyLCBnLCBzdmcpO1xuICBhZGRSZWxhdGlvbnNoaXBzKHJlbGF0aW9uc2hpcHMsIGcpO1xuICBkYWdyZUxheW91dChnKTtcbiAgYWRqdXN0RW50aXRpZXMoc3ZnLCBnKTtcbiAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHJlbCkge1xuICAgIGRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0KHN2ZywgcmVsLCBnLCBpZCwgZGlhZ09iaik7XG4gIH0pO1xuICBjb25zdCBwYWRkaW5nID0gY29uZi5yZWN0X3BhZGRpbmc7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Zy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IHN2Z0JvdW5kcy53aWR0aCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBzdmdCb3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gIGNvbmZpZ3VyZVN2Z1NpemUoc3ZnLCBoZWlnaHQsIHdpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xufSwgXCJkcmF3XCIpO1xudmFyIHJlcXVpcmVtZW50UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3JlcXVpcmVtZW50L3JlcXVpcmVtZW50RGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogcmVxdWlyZW1lbnREaWFncmFtX2RlZmF1bHQsXG4gIGRiOiByZXF1aXJlbWVudERiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiByZXF1aXJlbWVudFJlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBkcmF3QmFja2dyb3VuZFJlY3QsXG4gIGRyYXdFbWJlZGRlZEltYWdlLFxuICBkcmF3SW1hZ2UsXG4gIGRyYXdSZWN0LFxuICBnZXROb3RlUmVjdCxcbiAgZ2V0VGV4dE9ialxufSBmcm9tIFwiLi9jaHVuay1YVk9ZT00yQy5tanNcIjtcbmltcG9ydCB7XG4gIEltcGVyYXRpdmVTdGF0ZVxufSBmcm9tIFwiLi9jaHVuay0yUllRM1FUQi5tanNcIjtcbmltcG9ydCB7XG4gIFpFUk9fV0lEVEhfU1BBQ0UsXG4gIHBhcnNlRm9udFNpemUsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0LFxuICBjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnLFxuICBnZXRDb25maWcyLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGhhc0thdGV4LFxuICBsb2csXG4gIHJlbmRlckthdGV4LFxuICBzYW5pdGl6ZVRleHQsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2VxdWVuY2UvcGFyc2VyL3NlcXVlbmNlRGlhZ3JhbS5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzEsIDJdLCAkVjEgPSBbMSwgM10sICRWMiA9IFsxLCA0XSwgJFYzID0gWzIsIDRdLCAkVjQgPSBbMSwgOV0sICRWNSA9IFsxLCAxMV0sICRWNiA9IFsxLCAxM10sICRWNyA9IFsxLCAxNF0sICRWOCA9IFsxLCAxNl0sICRWOSA9IFsxLCAxN10sICRWYSA9IFsxLCAxOF0sICRWYiA9IFsxLCAyNF0sICRWYyA9IFsxLCAyNV0sICRWZCA9IFsxLCAyNl0sICRWZSA9IFsxLCAyN10sICRWZiA9IFsxLCAyOF0sICRWZyA9IFsxLCAyOV0sICRWaCA9IFsxLCAzMF0sICRWaSA9IFsxLCAzMV0sICRWaiA9IFsxLCAzMl0sICRWayA9IFsxLCAzM10sICRWbCA9IFsxLCAzNF0sICRWbSA9IFsxLCAzNV0sICRWbiA9IFsxLCAzNl0sICRWbyA9IFsxLCAzN10sICRWcCA9IFsxLCAzOF0sICRWcSA9IFsxLCAzOV0sICRWciA9IFsxLCA0MV0sICRWcyA9IFsxLCA0Ml0sICRWdCA9IFsxLCA0M10sICRWdSA9IFsxLCA0NF0sICRWdiA9IFsxLCA0NV0sICRWdyA9IFsxLCA0Nl0sICRWeCA9IFsxLCA0LCA1LCAxMywgMTQsIDE2LCAxOCwgMjEsIDIzLCAyOSwgMzAsIDMxLCAzMywgMzUsIDM2LCAzNywgMzgsIDM5LCA0MSwgNDMsIDQ0LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU5LCA2MCwgNjEsIDYyLCA3MF0sICRWeSA9IFs0LCA1LCAxNiwgNTAsIDUyLCA1M10sICRWeiA9IFs0LCA1LCAxMywgMTQsIDE2LCAxOCwgMjEsIDIzLCAyOSwgMzAsIDMxLCAzMywgMzUsIDM2LCAzNywgMzgsIDM5LCA0MSwgNDMsIDQ0LCA0NiwgNTAsIDUyLCA1MywgNTQsIDU5LCA2MCwgNjEsIDYyLCA3MF0sICRWQSA9IFs0LCA1LCAxMywgMTQsIDE2LCAxOCwgMjEsIDIzLCAyOSwgMzAsIDMxLCAzMywgMzUsIDM2LCAzNywgMzgsIDM5LCA0MSwgNDMsIDQ0LCA0NiwgNDksIDUwLCA1MiwgNTMsIDU0LCA1OSwgNjAsIDYxLCA2MiwgNzBdLCAkVkIgPSBbNCwgNSwgMTMsIDE0LCAxNiwgMTgsIDIxLCAyMywgMjksIDMwLCAzMSwgMzMsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDEsIDQzLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDUzLCA1NCwgNTksIDYwLCA2MSwgNjIsIDcwXSwgJFZDID0gWzQsIDUsIDEzLCAxNCwgMTYsIDE4LCAyMSwgMjMsIDI5LCAzMCwgMzEsIDMzLCAzNSwgMzYsIDM3LCAzOCwgMzksIDQxLCA0MywgNDQsIDQ2LCA0NywgNTAsIDUyLCA1MywgNTQsIDU5LCA2MCwgNjEsIDYyLCA3MF0sICRWRCA9IFs2OCwgNjksIDcwXSwgJFZFID0gWzEsIDEyMl07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIlNQQUNFXCI6IDQsIFwiTkVXTElORVwiOiA1LCBcIlNEXCI6IDYsIFwiZG9jdW1lbnRcIjogNywgXCJsaW5lXCI6IDgsIFwic3RhdGVtZW50XCI6IDksIFwiYm94X3NlY3Rpb25cIjogMTAsIFwiYm94X2xpbmVcIjogMTEsIFwicGFydGljaXBhbnRfc3RhdGVtZW50XCI6IDEyLCBcImNyZWF0ZVwiOiAxMywgXCJib3hcIjogMTQsIFwicmVzdE9mTGluZVwiOiAxNSwgXCJlbmRcIjogMTYsIFwic2lnbmFsXCI6IDE3LCBcImF1dG9udW1iZXJcIjogMTgsIFwiTlVNXCI6IDE5LCBcIm9mZlwiOiAyMCwgXCJhY3RpdmF0ZVwiOiAyMSwgXCJhY3RvclwiOiAyMiwgXCJkZWFjdGl2YXRlXCI6IDIzLCBcIm5vdGVfc3RhdGVtZW50XCI6IDI0LCBcImxpbmtzX3N0YXRlbWVudFwiOiAyNSwgXCJsaW5rX3N0YXRlbWVudFwiOiAyNiwgXCJwcm9wZXJ0aWVzX3N0YXRlbWVudFwiOiAyNywgXCJkZXRhaWxzX3N0YXRlbWVudFwiOiAyOCwgXCJ0aXRsZVwiOiAyOSwgXCJsZWdhY3lfdGl0bGVcIjogMzAsIFwiYWNjX3RpdGxlXCI6IDMxLCBcImFjY190aXRsZV92YWx1ZVwiOiAzMiwgXCJhY2NfZGVzY3JcIjogMzMsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDM0LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMzUsIFwibG9vcFwiOiAzNiwgXCJyZWN0XCI6IDM3LCBcIm9wdFwiOiAzOCwgXCJhbHRcIjogMzksIFwiZWxzZV9zZWN0aW9uc1wiOiA0MCwgXCJwYXJcIjogNDEsIFwicGFyX3NlY3Rpb25zXCI6IDQyLCBcInBhcl9vdmVyXCI6IDQzLCBcImNyaXRpY2FsXCI6IDQ0LCBcIm9wdGlvbl9zZWN0aW9uc1wiOiA0NSwgXCJicmVha1wiOiA0NiwgXCJvcHRpb25cIjogNDcsIFwiYW5kXCI6IDQ4LCBcImVsc2VcIjogNDksIFwicGFydGljaXBhbnRcIjogNTAsIFwiQVNcIjogNTEsIFwicGFydGljaXBhbnRfYWN0b3JcIjogNTIsIFwiZGVzdHJveVwiOiA1MywgXCJub3RlXCI6IDU0LCBcInBsYWNlbWVudFwiOiA1NSwgXCJ0ZXh0MlwiOiA1NiwgXCJvdmVyXCI6IDU3LCBcImFjdG9yX3BhaXJcIjogNTgsIFwibGlua3NcIjogNTksIFwibGlua1wiOiA2MCwgXCJwcm9wZXJ0aWVzXCI6IDYxLCBcImRldGFpbHNcIjogNjIsIFwic3BhY2VMaXN0XCI6IDYzLCBcIixcIjogNjQsIFwibGVmdF9vZlwiOiA2NSwgXCJyaWdodF9vZlwiOiA2NiwgXCJzaWduYWx0eXBlXCI6IDY3LCBcIitcIjogNjgsIFwiLVwiOiA2OSwgXCJBQ1RPUlwiOiA3MCwgXCJTT0xJRF9PUEVOX0FSUk9XXCI6IDcxLCBcIkRPVFRFRF9PUEVOX0FSUk9XXCI6IDcyLCBcIlNPTElEX0FSUk9XXCI6IDczLCBcIkJJRElSRUNUSU9OQUxfU09MSURfQVJST1dcIjogNzQsIFwiRE9UVEVEX0FSUk9XXCI6IDc1LCBcIkJJRElSRUNUSU9OQUxfRE9UVEVEX0FSUk9XXCI6IDc2LCBcIlNPTElEX0NST1NTXCI6IDc3LCBcIkRPVFRFRF9DUk9TU1wiOiA3OCwgXCJTT0xJRF9QT0lOVFwiOiA3OSwgXCJET1RURURfUE9JTlRcIjogODAsIFwiVFhUXCI6IDgxLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJTUEFDRVwiLCA1OiBcIk5FV0xJTkVcIiwgNjogXCJTRFwiLCAxMzogXCJjcmVhdGVcIiwgMTQ6IFwiYm94XCIsIDE1OiBcInJlc3RPZkxpbmVcIiwgMTY6IFwiZW5kXCIsIDE4OiBcImF1dG9udW1iZXJcIiwgMTk6IFwiTlVNXCIsIDIwOiBcIm9mZlwiLCAyMTogXCJhY3RpdmF0ZVwiLCAyMzogXCJkZWFjdGl2YXRlXCIsIDI5OiBcInRpdGxlXCIsIDMwOiBcImxlZ2FjeV90aXRsZVwiLCAzMTogXCJhY2NfdGl0bGVcIiwgMzI6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDMzOiBcImFjY19kZXNjclwiLCAzNDogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMzU6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAzNjogXCJsb29wXCIsIDM3OiBcInJlY3RcIiwgMzg6IFwib3B0XCIsIDM5OiBcImFsdFwiLCA0MTogXCJwYXJcIiwgNDM6IFwicGFyX292ZXJcIiwgNDQ6IFwiY3JpdGljYWxcIiwgNDY6IFwiYnJlYWtcIiwgNDc6IFwib3B0aW9uXCIsIDQ4OiBcImFuZFwiLCA0OTogXCJlbHNlXCIsIDUwOiBcInBhcnRpY2lwYW50XCIsIDUxOiBcIkFTXCIsIDUyOiBcInBhcnRpY2lwYW50X2FjdG9yXCIsIDUzOiBcImRlc3Ryb3lcIiwgNTQ6IFwibm90ZVwiLCA1NzogXCJvdmVyXCIsIDU5OiBcImxpbmtzXCIsIDYwOiBcImxpbmtcIiwgNjE6IFwicHJvcGVydGllc1wiLCA2MjogXCJkZXRhaWxzXCIsIDY0OiBcIixcIiwgNjU6IFwibGVmdF9vZlwiLCA2NjogXCJyaWdodF9vZlwiLCA2ODogXCIrXCIsIDY5OiBcIi1cIiwgNzA6IFwiQUNUT1JcIiwgNzE6IFwiU09MSURfT1BFTl9BUlJPV1wiLCA3MjogXCJET1RURURfT1BFTl9BUlJPV1wiLCA3MzogXCJTT0xJRF9BUlJPV1wiLCA3NDogXCJCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XXCIsIDc1OiBcIkRPVFRFRF9BUlJPV1wiLCA3NjogXCJCSURJUkVDVElPTkFMX0RPVFRFRF9BUlJPV1wiLCA3NzogXCJTT0xJRF9DUk9TU1wiLCA3ODogXCJET1RURURfQ1JPU1NcIiwgNzk6IFwiU09MSURfUE9JTlRcIiwgODA6IFwiRE9UVEVEX1BPSU5UXCIsIDgxOiBcIlRYVFwiIH0sXG4gICAgcHJvZHVjdGlvbnNfOiBbMCwgWzMsIDJdLCBbMywgMl0sIFszLCAyXSwgWzcsIDBdLCBbNywgMl0sIFs4LCAyXSwgWzgsIDFdLCBbOCwgMV0sIFsxMCwgMF0sIFsxMCwgMl0sIFsxMSwgMl0sIFsxMSwgMV0sIFsxMSwgMV0sIFs5LCAxXSwgWzksIDJdLCBbOSwgNF0sIFs5LCAyXSwgWzksIDRdLCBbOSwgM10sIFs5LCAzXSwgWzksIDJdLCBbOSwgM10sIFs5LCAzXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDFdLCBbOSwgNF0sIFs5LCA0XSwgWzksIDRdLCBbOSwgNF0sIFs5LCA0XSwgWzksIDRdLCBbOSwgNF0sIFs5LCA0XSwgWzQ1LCAxXSwgWzQ1LCA0XSwgWzQyLCAxXSwgWzQyLCA0XSwgWzQwLCAxXSwgWzQwLCA0XSwgWzEyLCA1XSwgWzEyLCAzXSwgWzEyLCA1XSwgWzEyLCAzXSwgWzEyLCAzXSwgWzI0LCA0XSwgWzI0LCA0XSwgWzI1LCAzXSwgWzI2LCAzXSwgWzI3LCAzXSwgWzI4LCAzXSwgWzYzLCAyXSwgWzYzLCAxXSwgWzU4LCAzXSwgWzU4LCAxXSwgWzU1LCAxXSwgWzU1LCAxXSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA0XSwgWzIyLCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzU2LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB5eS5hcHBseSgkJFskMF0pO1xuICAgICAgICAgIHJldHVybiAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgJCRbJDBdLnR5cGUgPSBcImNyZWF0ZVBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwiYm94U3RhcnRcIiwgYm94RGF0YTogeXkucGFyc2VCb3hEYXRhKCQkWyQwIC0gMl0pIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYm94RW5kXCIsIGJveFRleHQ6ICQkWyQwIC0gMl0gfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwic2VxdWVuY2VJbmRleFwiLCBzZXF1ZW5jZUluZGV4OiBOdW1iZXIoJCRbJDAgLSAyXSksIHNlcXVlbmNlSW5kZXhTdGVwOiBOdW1iZXIoJCRbJDAgLSAxXSksIHNlcXVlbmNlVmlzaWJsZTogdHJ1ZSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQVVUT05VTUJFUiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJzZXF1ZW5jZUluZGV4XCIsIHNlcXVlbmNlSW5kZXg6IE51bWJlcigkJFskMCAtIDFdKSwgc2VxdWVuY2VJbmRleFN0ZXA6IDEsIHNlcXVlbmNlVmlzaWJsZTogdHJ1ZSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQVVUT05VTUJFUiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJzZXF1ZW5jZUluZGV4XCIsIHNlcXVlbmNlVmlzaWJsZTogZmFsc2UsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFVVE9OVU1CRVIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwic2VxdWVuY2VJbmRleFwiLCBzZXF1ZW5jZVZpc2libGU6IHRydWUsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFVVE9OVU1CRVIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYWN0aXZlU3RhcnRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX1NUQVJULCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJhY3RpdmVFbmRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX0VORCwgYWN0b3I6ICQkWyQwIC0gMV0uYWN0b3IgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cmluZyg2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cmluZyg2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cmluZyg3KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cmluZyg3KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwibG9vcFN0YXJ0XCIsIGxvb3BUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkxPT1BfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJsb29wRW5kXCIsIGxvb3BUZXh0OiAkJFskMCAtIDJdLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5MT09QX0VORCB9KTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwicmVjdFN0YXJ0XCIsIGNvbG9yOiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJyZWN0RW5kXCIsIGNvbG9yOiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlJFQ1RfRU5EIH0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgJCRbJDAgLSAxXS51bnNoaWZ0KHsgdHlwZTogXCJvcHRTdGFydFwiLCBvcHRUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLk9QVF9TVEFSVCB9KTtcbiAgICAgICAgICAkJFskMCAtIDFdLnB1c2goeyB0eXBlOiBcIm9wdEVuZFwiLCBvcHRUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLk9QVF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcImFsdFN0YXJ0XCIsIGFsdFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUxUX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYWx0RW5kXCIsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFMVF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcInBhclN0YXJ0XCIsIHBhclRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwicGFyRW5kXCIsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlBBUl9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcInBhclN0YXJ0XCIsIHBhclRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX09WRVJfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJwYXJFbmRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX0VORCB9KTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwiY3JpdGljYWxTdGFydFwiLCBjcml0aWNhbFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJjcml0aWNhbEVuZFwiLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5DUklUSUNBTF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcImJyZWFrU3RhcnRcIiwgYnJlYWtUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkJSRUFLX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYnJlYWtFbmRcIiwgb3B0VGV4dDogeXkucGFyc2VNZXNzYWdlKCQkWyQwIC0gMl0pLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5CUkVBS19FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdLmNvbmNhdChbeyB0eXBlOiBcIm9wdGlvblwiLCBvcHRpb25UZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTiB9LCAkJFskMF1dKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdLmNvbmNhdChbeyB0eXBlOiBcImFuZFwiLCBwYXJUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlBBUl9BTkQgfSwgJCRbJDBdXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXS5jb25jYXQoW3sgdHlwZTogXCJlbHNlXCIsIGFsdFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDFdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUxUX0VMU0UgfSwgJCRbJDBdXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgJCRbJDAgLSAzXS5kcmF3ID0gXCJwYXJ0aWNpcGFudFwiO1xuICAgICAgICAgICQkWyQwIC0gM10udHlwZSA9IFwiYWRkUGFydGljaXBhbnRcIjtcbiAgICAgICAgICAkJFskMCAtIDNdLmRlc2NyaXB0aW9uID0geXkucGFyc2VNZXNzYWdlKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgJCRbJDAgLSAxXS5kcmF3ID0gXCJwYXJ0aWNpcGFudFwiO1xuICAgICAgICAgICQkWyQwIC0gMV0udHlwZSA9IFwiYWRkUGFydGljaXBhbnRcIjtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICQkWyQwIC0gM10uZHJhdyA9IFwiYWN0b3JcIjtcbiAgICAgICAgICAkJFskMCAtIDNdLnR5cGUgPSBcImFkZFBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgJCRbJDAgLSAzXS5kZXNjcmlwdGlvbiA9IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICQkWyQwIC0gMV0uZHJhdyA9IFwiYWN0b3JcIjtcbiAgICAgICAgICAkJFskMCAtIDFdLnR5cGUgPSBcImFkZFBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAkJFskMCAtIDFdLnR5cGUgPSBcImRlc3Ryb3lQYXJ0aWNpcGFudFwiO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGROb3RlXCIsIHBsYWNlbWVudDogJCRbJDAgLSAyXSwgYWN0b3I6ICQkWyQwIC0gMV0uYWN0b3IsIHRleHQ6ICQkWyQwXSB9XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAkJFskMCAtIDJdID0gW10uY29uY2F0KCQkWyQwIC0gMV0sICQkWyQwIC0gMV0pLnNsaWNlKDAsIDIpO1xuICAgICAgICAgICQkWyQwIC0gMl1bMF0gPSAkJFskMCAtIDJdWzBdLmFjdG9yO1xuICAgICAgICAgICQkWyQwIC0gMl1bMV0gPSAkJFskMCAtIDJdWzFdLmFjdG9yO1xuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkTm90ZVwiLCBwbGFjZW1lbnQ6IHl5LlBMQUNFTUVOVC5PVkVSLCBhY3RvcjogJCRbJDAgLSAyXS5zbGljZSgwLCAyKSwgdGV4dDogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkTGlua3NcIiwgYWN0b3I6ICQkWyQwIC0gMV0uYWN0b3IsIHRleHQ6ICQkWyQwXSB9XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZEFMaW5rXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGRQcm9wZXJ0aWVzXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGREZXRhaWxzXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMl0sICQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlBMQUNFTUVOVC5MRUZUT0Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgdGhpcy4kID0geXkuUExBQ0VNRU5ULlJJR0hUT0Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgdGhpcy4kID0gW1xuICAgICAgICAgICAgJCRbJDAgLSA0XSxcbiAgICAgICAgICAgICQkWyQwIC0gMV0sXG4gICAgICAgICAgICB7IHR5cGU6IFwiYWRkTWVzc2FnZVwiLCBmcm9tOiAkJFskMCAtIDRdLmFjdG9yLCB0bzogJCRbJDAgLSAxXS5hY3Rvciwgc2lnbmFsVHlwZTogJCRbJDAgLSAzXSwgbXNnOiAkJFskMF0sIGFjdGl2YXRlOiB0cnVlIH0sXG4gICAgICAgICAgICB7IHR5cGU6IFwiYWN0aXZlU3RhcnRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX1NUQVJULCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSBbXG4gICAgICAgICAgICAkJFskMCAtIDRdLFxuICAgICAgICAgICAgJCRbJDAgLSAxXSxcbiAgICAgICAgICAgIHsgdHlwZTogXCJhZGRNZXNzYWdlXCIsIGZyb206ICQkWyQwIC0gNF0uYWN0b3IsIHRvOiAkJFskMCAtIDFdLmFjdG9yLCBzaWduYWxUeXBlOiAkJFskMCAtIDNdLCBtc2c6ICQkWyQwXSB9LFxuICAgICAgICAgICAgeyB0eXBlOiBcImFjdGl2ZUVuZFwiLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5BQ1RJVkVfRU5ELCBhY3RvcjogJCRbJDAgLSA0XS5hY3RvciB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZE1lc3NhZ2VcIiwgZnJvbTogJCRbJDAgLSAzXS5hY3RvciwgdG86ICQkWyQwIC0gMV0uYWN0b3IsIHNpZ25hbFR5cGU6ICQkWyQwIC0gMl0sIG1zZzogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJhZGRQYXJ0aWNpcGFudFwiLCBhY3RvcjogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuU09MSURfT1BFTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5ET1RURURfT1BFTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5TT0xJRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkxJTkVUWVBFLkRPVFRFRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5TT0xJRF9DUk9TUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5ET1RURURfQ1JPU1M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuU09MSURfUE9JTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuRE9UVEVEX1BPSU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnBhcnNlTWVzc2FnZSgkJFskMF0udHJpbSgpLnN1YnN0cmluZygxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6ICRWMCwgNTogJFYxLCA2OiAkVjIgfSwgeyAxOiBbM10gfSwgeyAzOiA1LCA0OiAkVjAsIDU6ICRWMSwgNjogJFYyIH0sIHsgMzogNiwgNDogJFYwLCA1OiAkVjEsIDY6ICRWMiB9LCBvKFsxLCA0LCA1LCAxMywgMTQsIDE4LCAyMSwgMjMsIDI5LCAzMCwgMzEsIDMzLCAzNSwgMzYsIDM3LCAzOCwgMzksIDQxLCA0MywgNDQsIDQ2LCA1MCwgNTIsIDUzLCA1NCwgNTksIDYwLCA2MSwgNjIsIDcwXSwgJFYzLCB7IDc6IDcgfSksIHsgMTogWzIsIDFdIH0sIHsgMTogWzIsIDJdIH0sIHsgMTogWzIsIDNdLCA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTc6IDE1LCAxODogJFY4LCAyMTogJFY5LCAyMjogNDAsIDIzOiAkVmEsIDI0OiAxOSwgMjU6IDIwLCAyNjogMjEsIDI3OiAyMiwgMjg6IDIzLCAyOTogJFZiLCAzMDogJFZjLCAzMTogJFZkLCAzMzogJFZlLCAzNTogJFZmLCAzNjogJFZnLCAzNzogJFZoLCAzODogJFZpLCAzOTogJFZqLCA0MTogJFZrLCA0MzogJFZsLCA0NDogJFZtLCA0NjogJFZuLCA1MDogJFZvLCA1MjogJFZwLCA1MzogJFZxLCA1NDogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA3MDogJFZ3IH0sIG8oJFZ4LCBbMiwgNV0pLCB7IDk6IDQ3LCAxMjogMTIsIDEzOiAkVjYsIDE0OiAkVjcsIDE3OiAxNSwgMTg6ICRWOCwgMjE6ICRWOSwgMjI6IDQwLCAyMzogJFZhLCAyNDogMTksIDI1OiAyMCwgMjY6IDIxLCAyNzogMjIsIDI4OiAyMywgMjk6ICRWYiwgMzA6ICRWYywgMzE6ICRWZCwgMzM6ICRWZSwgMzU6ICRWZiwgMzY6ICRWZywgMzc6ICRWaCwgMzg6ICRWaSwgMzk6ICRWaiwgNDE6ICRWaywgNDM6ICRWbCwgNDQ6ICRWbSwgNDY6ICRWbiwgNTA6ICRWbywgNTI6ICRWcCwgNTM6ICRWcSwgNTQ6ICRWciwgNTk6ICRWcywgNjA6ICRWdCwgNjE6ICRWdSwgNjI6ICRWdiwgNzA6ICRWdyB9LCBvKCRWeCwgWzIsIDddKSwgbygkVngsIFsyLCA4XSksIG8oJFZ4LCBbMiwgMTRdKSwgeyAxMjogNDgsIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEgfSwgeyAxNTogWzEsIDQ5XSB9LCB7IDU6IFsxLCA1MF0gfSwgeyA1OiBbMSwgNTNdLCAxOTogWzEsIDUxXSwgMjA6IFsxLCA1Ml0gfSwgeyAyMjogNTQsIDcwOiAkVncgfSwgeyAyMjogNTUsIDcwOiAkVncgfSwgeyA1OiBbMSwgNTZdIH0sIHsgNTogWzEsIDU3XSB9LCB7IDU6IFsxLCA1OF0gfSwgeyA1OiBbMSwgNTldIH0sIHsgNTogWzEsIDYwXSB9LCBvKCRWeCwgWzIsIDI5XSksIG8oJFZ4LCBbMiwgMzBdKSwgeyAzMjogWzEsIDYxXSB9LCB7IDM0OiBbMSwgNjJdIH0sIG8oJFZ4LCBbMiwgMzNdKSwgeyAxNTogWzEsIDYzXSB9LCB7IDE1OiBbMSwgNjRdIH0sIHsgMTU6IFsxLCA2NV0gfSwgeyAxNTogWzEsIDY2XSB9LCB7IDE1OiBbMSwgNjddIH0sIHsgMTU6IFsxLCA2OF0gfSwgeyAxNTogWzEsIDY5XSB9LCB7IDE1OiBbMSwgNzBdIH0sIHsgMjI6IDcxLCA3MDogJFZ3IH0sIHsgMjI6IDcyLCA3MDogJFZ3IH0sIHsgMjI6IDczLCA3MDogJFZ3IH0sIHsgNjc6IDc0LCA3MTogWzEsIDc1XSwgNzI6IFsxLCA3Nl0sIDczOiBbMSwgNzddLCA3NDogWzEsIDc4XSwgNzU6IFsxLCA3OV0sIDc2OiBbMSwgODBdLCA3NzogWzEsIDgxXSwgNzg6IFsxLCA4Ml0sIDc5OiBbMSwgODNdLCA4MDogWzEsIDg0XSB9LCB7IDU1OiA4NSwgNTc6IFsxLCA4Nl0sIDY1OiBbMSwgODddLCA2NjogWzEsIDg4XSB9LCB7IDIyOiA4OSwgNzA6ICRWdyB9LCB7IDIyOiA5MCwgNzA6ICRWdyB9LCB7IDIyOiA5MSwgNzA6ICRWdyB9LCB7IDIyOiA5MiwgNzA6ICRWdyB9LCBvKFs1LCA1MSwgNjQsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MV0sIFsyLCA2OF0pLCBvKCRWeCwgWzIsIDZdKSwgbygkVngsIFsyLCAxNV0pLCBvKCRWeSwgWzIsIDldLCB7IDEwOiA5MyB9KSwgbygkVngsIFsyLCAxN10pLCB7IDU6IFsxLCA5NV0sIDE5OiBbMSwgOTRdIH0sIHsgNTogWzEsIDk2XSB9LCBvKCRWeCwgWzIsIDIxXSksIHsgNTogWzEsIDk3XSB9LCB7IDU6IFsxLCA5OF0gfSwgbygkVngsIFsyLCAyNF0pLCBvKCRWeCwgWzIsIDI1XSksIG8oJFZ4LCBbMiwgMjZdKSwgbygkVngsIFsyLCAyN10pLCBvKCRWeCwgWzIsIDI4XSksIG8oJFZ4LCBbMiwgMzFdKSwgbygkVngsIFsyLCAzMl0pLCBvKCRWeiwgJFYzLCB7IDc6IDk5IH0pLCBvKCRWeiwgJFYzLCB7IDc6IDEwMCB9KSwgbygkVnosICRWMywgeyA3OiAxMDEgfSksIG8oJFZBLCAkVjMsIHsgNDA6IDEwMiwgNzogMTAzIH0pLCBvKCRWQiwgJFYzLCB7IDQyOiAxMDQsIDc6IDEwNSB9KSwgbygkVkIsICRWMywgeyA3OiAxMDUsIDQyOiAxMDYgfSksIG8oJFZDLCAkVjMsIHsgNDU6IDEwNywgNzogMTA4IH0pLCBvKCRWeiwgJFYzLCB7IDc6IDEwOSB9KSwgeyA1OiBbMSwgMTExXSwgNTE6IFsxLCAxMTBdIH0sIHsgNTogWzEsIDExM10sIDUxOiBbMSwgMTEyXSB9LCB7IDU6IFsxLCAxMTRdIH0sIHsgMjI6IDExNywgNjg6IFsxLCAxMTVdLCA2OTogWzEsIDExNl0sIDcwOiAkVncgfSwgbygkVkQsIFsyLCA2OV0pLCBvKCRWRCwgWzIsIDcwXSksIG8oJFZELCBbMiwgNzFdKSwgbygkVkQsIFsyLCA3Ml0pLCBvKCRWRCwgWzIsIDczXSksIG8oJFZELCBbMiwgNzRdKSwgbygkVkQsIFsyLCA3NV0pLCBvKCRWRCwgWzIsIDc2XSksIG8oJFZELCBbMiwgNzddKSwgbygkVkQsIFsyLCA3OF0pLCB7IDIyOiAxMTgsIDcwOiAkVncgfSwgeyAyMjogMTIwLCA1ODogMTE5LCA3MDogJFZ3IH0sIHsgNzA6IFsyLCA2M10gfSwgeyA3MDogWzIsIDY0XSB9LCB7IDU2OiAxMjEsIDgxOiAkVkUgfSwgeyA1NjogMTIzLCA4MTogJFZFIH0sIHsgNTY6IDEyNCwgODE6ICRWRSB9LCB7IDU2OiAxMjUsIDgxOiAkVkUgfSwgeyA0OiBbMSwgMTI4XSwgNTogWzEsIDEzMF0sIDExOiAxMjcsIDEyOiAxMjksIDE2OiBbMSwgMTI2XSwgNTA6ICRWbywgNTI6ICRWcCwgNTM6ICRWcSB9LCB7IDU6IFsxLCAxMzFdIH0sIG8oJFZ4LCBbMiwgMTldKSwgbygkVngsIFsyLCAyMF0pLCBvKCRWeCwgWzIsIDIyXSksIG8oJFZ4LCBbMiwgMjNdKSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxMzJdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxMzNdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxMzRdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyAxNjogWzEsIDEzNV0gfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsyLCA0Nl0sIDE3OiAxNSwgMTg6ICRWOCwgMjE6ICRWOSwgMjI6IDQwLCAyMzogJFZhLCAyNDogMTksIDI1OiAyMCwgMjY6IDIxLCAyNzogMjIsIDI4OiAyMywgMjk6ICRWYiwgMzA6ICRWYywgMzE6ICRWZCwgMzM6ICRWZSwgMzU6ICRWZiwgMzY6ICRWZywgMzc6ICRWaCwgMzg6ICRWaSwgMzk6ICRWaiwgNDE6ICRWaywgNDM6ICRWbCwgNDQ6ICRWbSwgNDY6ICRWbiwgNDk6IFsxLCAxMzZdLCA1MDogJFZvLCA1MjogJFZwLCA1MzogJFZxLCA1NDogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA3MDogJFZ3IH0sIHsgMTY6IFsxLCAxMzddIH0sIHsgNDogJFY0LCA1OiAkVjUsIDg6IDgsIDk6IDEwLCAxMjogMTIsIDEzOiAkVjYsIDE0OiAkVjcsIDE2OiBbMiwgNDRdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDQ4OiBbMSwgMTM4XSwgNTA6ICRWbywgNTI6ICRWcCwgNTM6ICRWcSwgNTQ6ICRWciwgNTk6ICRWcywgNjA6ICRWdCwgNjE6ICRWdSwgNjI6ICRWdiwgNzA6ICRWdyB9LCB7IDE2OiBbMSwgMTM5XSB9LCB7IDE2OiBbMSwgMTQwXSB9LCB7IDQ6ICRWNCwgNTogJFY1LCA4OiA4LCA5OiAxMCwgMTI6IDEyLCAxMzogJFY2LCAxNDogJFY3LCAxNjogWzIsIDQyXSwgMTc6IDE1LCAxODogJFY4LCAyMTogJFY5LCAyMjogNDAsIDIzOiAkVmEsIDI0OiAxOSwgMjU6IDIwLCAyNjogMjEsIDI3OiAyMiwgMjg6IDIzLCAyOTogJFZiLCAzMDogJFZjLCAzMTogJFZkLCAzMzogJFZlLCAzNTogJFZmLCAzNjogJFZnLCAzNzogJFZoLCAzODogJFZpLCAzOTogJFZqLCA0MTogJFZrLCA0MzogJFZsLCA0NDogJFZtLCA0NjogJFZuLCA0NzogWzEsIDE0MV0sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxNDJdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyAxNTogWzEsIDE0M10gfSwgbygkVngsIFsyLCA0OV0pLCB7IDE1OiBbMSwgMTQ0XSB9LCBvKCRWeCwgWzIsIDUxXSksIG8oJFZ4LCBbMiwgNTJdKSwgeyAyMjogMTQ1LCA3MDogJFZ3IH0sIHsgMjI6IDE0NiwgNzA6ICRWdyB9LCB7IDU2OiAxNDcsIDgxOiAkVkUgfSwgeyA1NjogMTQ4LCA4MTogJFZFIH0sIHsgNTY6IDE0OSwgODE6ICRWRSB9LCB7IDY0OiBbMSwgMTUwXSwgODE6IFsyLCA2Ml0gfSwgeyA1OiBbMiwgNTVdIH0sIHsgNTogWzIsIDc5XSB9LCB7IDU6IFsyLCA1Nl0gfSwgeyA1OiBbMiwgNTddIH0sIHsgNTogWzIsIDU4XSB9LCBvKCRWeCwgWzIsIDE2XSksIG8oJFZ5LCBbMiwgMTBdKSwgeyAxMjogMTUxLCA1MDogJFZvLCA1MjogJFZwLCA1MzogJFZxIH0sIG8oJFZ5LCBbMiwgMTJdKSwgbygkVnksIFsyLCAxM10pLCBvKCRWeCwgWzIsIDE4XSksIG8oJFZ4LCBbMiwgMzRdKSwgbygkVngsIFsyLCAzNV0pLCBvKCRWeCwgWzIsIDM2XSksIG8oJFZ4LCBbMiwgMzddKSwgeyAxNTogWzEsIDE1Ml0gfSwgbygkVngsIFsyLCAzOF0pLCB7IDE1OiBbMSwgMTUzXSB9LCBvKCRWeCwgWzIsIDM5XSksIG8oJFZ4LCBbMiwgNDBdKSwgeyAxNTogWzEsIDE1NF0gfSwgbygkVngsIFsyLCA0MV0pLCB7IDU6IFsxLCAxNTVdIH0sIHsgNTogWzEsIDE1Nl0gfSwgeyA1NjogMTU3LCA4MTogJFZFIH0sIHsgNTY6IDE1OCwgODE6ICRWRSB9LCB7IDU6IFsyLCA2N10gfSwgeyA1OiBbMiwgNTNdIH0sIHsgNTogWzIsIDU0XSB9LCB7IDIyOiAxNTksIDcwOiAkVncgfSwgbygkVnksIFsyLCAxMV0pLCBvKCRWQSwgJFYzLCB7IDc6IDEwMywgNDA6IDE2MCB9KSwgbygkVkIsICRWMywgeyA3OiAxMDUsIDQyOiAxNjEgfSksIG8oJFZDLCAkVjMsIHsgNzogMTA4LCA0NTogMTYyIH0pLCBvKCRWeCwgWzIsIDQ4XSksIG8oJFZ4LCBbMiwgNTBdKSwgeyA1OiBbMiwgNjVdIH0sIHsgNTogWzIsIDY2XSB9LCB7IDgxOiBbMiwgNjFdIH0sIHsgMTY6IFsyLCA0N10gfSwgeyAxNjogWzIsIDQ1XSB9LCB7IDE2OiBbMiwgNDNdIH1dLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDU6IFsyLCAxXSwgNjogWzIsIDJdLCA4NzogWzIsIDYzXSwgODg6IFsyLCA2NF0sIDEyMTogWzIsIDU1XSwgMTIyOiBbMiwgNzldLCAxMjM6IFsyLCA1Nl0sIDEyNDogWzIsIDU3XSwgMTI1OiBbMiwgNThdLCAxNDc6IFsyLCA2N10sIDE0ODogWzIsIDUzXSwgMTQ5OiBbMiwgNTRdLCAxNTc6IFsyLCA2NV0sIDE1ODogWzIsIDY2XSwgMTU5OiBbMiwgNjFdLCAxNjA6IFsyLCA0N10sIDE2MTogWzIsIDQ1XSwgMTYyOiBbMiwgNDNdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZTIsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZTIgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGUyXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGUyXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlMl0gJiYgdGFibGVbc3RhdGUyXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZTJdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZTIgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gMTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJBTElBU1wiKTtcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gNjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gNjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gNTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgcmV0dXJuIDc0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICByZXR1cm4gNzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgcmV0dXJuIDcxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiA3MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICByZXR1cm4gNzc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgcmV0dXJuIDc4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHJldHVybiA3OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIDgxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgcmV0dXJuIFwiSU5WQUxJRFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OigoPyFcXG4pXFxzKSspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbMC05XSsoPz1bIFxcbl0rKSkvaSwgL14oPzpib3hcXGIpL2ksIC9eKD86cGFydGljaXBhbnRcXGIpL2ksIC9eKD86YWN0b3JcXGIpL2ksIC9eKD86Y3JlYXRlXFxiKS9pLCAvXig/OmRlc3Ryb3lcXGIpL2ksIC9eKD86W15cXDwtPlxcLT46XFxuLDtdKz8oW1xcLV0qW15cXDwtPlxcLT46XFxuLDtdKz8pKj8oPz0oKD8hXFxuKVxccykrYXMoPyFcXG4pXFxzfFsjXFxuO118JCkpL2ksIC9eKD86YXNcXGIpL2ksIC9eKD86KD86KSkvaSwgL14oPzpsb29wXFxiKS9pLCAvXig/OnJlY3RcXGIpL2ksIC9eKD86b3B0XFxiKS9pLCAvXig/OmFsdFxcYikvaSwgL14oPzplbHNlXFxiKS9pLCAvXig/OnBhclxcYikvaSwgL14oPzpwYXJfb3ZlclxcYikvaSwgL14oPzphbmRcXGIpL2ksIC9eKD86Y3JpdGljYWxcXGIpL2ksIC9eKD86b3B0aW9uXFxiKS9pLCAvXig/OmJyZWFrXFxiKS9pLCAvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXFxuO10qKS9pLCAvXig/OmVuZFxcYikvaSwgL14oPzpsZWZ0IG9mXFxiKS9pLCAvXig/OnJpZ2h0IG9mXFxiKS9pLCAvXig/OmxpbmtzXFxiKS9pLCAvXig/OmxpbmtcXGIpL2ksIC9eKD86cHJvcGVydGllc1xcYikvaSwgL14oPzpkZXRhaWxzXFxiKS9pLCAvXig/Om92ZXJcXGIpL2ksIC9eKD86bm90ZVxcYikvaSwgL14oPzphY3RpdmF0ZVxcYikvaSwgL14oPzpkZWFjdGl2YXRlXFxiKS9pLCAvXig/OnRpdGxlXFxzW14jXFxuO10rKS9pLCAvXig/OnRpdGxlOlxcc1teI1xcbjtdKykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86c2VxdWVuY2VEaWFncmFtXFxiKS9pLCAvXig/OmF1dG9udW1iZXJcXGIpL2ksIC9eKD86b2ZmXFxiKS9pLCAvXig/OiwpL2ksIC9eKD86OykvaSwgL14oPzpbXlxcK1xcPC0+XFwtPjpcXG4sO10rKCg/ISgteHwtLXh8LVxcKXwtLVxcKSkpW1xcLV0qW15cXCtcXDwtPlxcLT46XFxuLDtdKykqKS9pLCAvXig/Oi0+PikvaSwgL14oPzo8PC0+PikvaSwgL14oPzotLT4+KS9pLCAvXig/Ojw8LS0+PikvaSwgL14oPzotPikvaSwgL14oPzotLT4pL2ksIC9eKD86LVt4XSkvaSwgL14oPzotLVt4XSkvaSwgL14oPzotW1xcKV0pL2ksIC9eKD86LS1bXFwpXSkvaSwgL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xcbjtdKykvaSwgL14oPzpcXCspL2ksIC9eKD86LSkvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs0NSwgNDZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzQzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs0MV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSURcIjogeyBcInJ1bGVzXCI6IFsyLCAzLCAxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQUxJQVNcIjogeyBcInJ1bGVzXCI6IFsyLCAzLCAxMywgMTRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkxJTkVcIjogeyBcInJ1bGVzXCI6IFsyLCAzLCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQyLCA0NCwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2N10sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBzZXF1ZW5jZURpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL3NlcXVlbmNlL3NlcXVlbmNlRGIudHNcbnZhciBzdGF0ZSA9IG5ldyBJbXBlcmF0aXZlU3RhdGUoKCkgPT4gKHtcbiAgcHJldkFjdG9yOiB2b2lkIDAsXG4gIGFjdG9yczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgY3JlYXRlZEFjdG9yczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgZGVzdHJveWVkQWN0b3JzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLFxuICBib3hlczogW10sXG4gIG1lc3NhZ2VzOiBbXSxcbiAgbm90ZXM6IFtdLFxuICBzZXF1ZW5jZU51bWJlcnNFbmFibGVkOiBmYWxzZSxcbiAgd3JhcEVuYWJsZWQ6IHZvaWQgMCxcbiAgY3VycmVudEJveDogdm9pZCAwLFxuICBsYXN0Q3JlYXRlZDogdm9pZCAwLFxuICBsYXN0RGVzdHJveWVkOiB2b2lkIDBcbn0pKTtcbnZhciBhZGRCb3ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRhdGEpIHtcbiAgc3RhdGUucmVjb3Jkcy5ib3hlcy5wdXNoKHtcbiAgICBuYW1lOiBkYXRhLnRleHQsXG4gICAgd3JhcDogZGF0YS53cmFwID8/IGF1dG9XcmFwKCksXG4gICAgZmlsbDogZGF0YS5jb2xvcixcbiAgICBhY3RvcktleXM6IFtdXG4gIH0pO1xuICBzdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3ggPSBzdGF0ZS5yZWNvcmRzLmJveGVzLnNsaWNlKC0xKVswXTtcbn0sIFwiYWRkQm94XCIpO1xudmFyIGFkZEFjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCwgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUpIHtcbiAgbGV0IGFzc2lnbmVkQm94ID0gc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94O1xuICBjb25zdCBvbGQgPSBzdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoaWQpO1xuICBpZiAob2xkKSB7XG4gICAgaWYgKHN0YXRlLnJlY29yZHMuY3VycmVudEJveCAmJiBvbGQuYm94ICYmIHN0YXRlLnJlY29yZHMuY3VycmVudEJveCAhPT0gb2xkLmJveCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogJHtvbGQubmFtZX0gY2FuJ3QgYmUgaW4gJyR7b2xkLmJveC5uYW1lfScgYW5kIGluICcke3N0YXRlLnJlY29yZHMuY3VycmVudEJveC5uYW1lfScgYXQgdGhlIHNhbWUgdGltZS5gXG4gICAgICApO1xuICAgIH1cbiAgICBhc3NpZ25lZEJveCA9IG9sZC5ib3ggPyBvbGQuYm94IDogc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94O1xuICAgIG9sZC5ib3ggPSBhc3NpZ25lZEJveDtcbiAgICBpZiAob2xkICYmIG5hbWUgPT09IG9sZC5uYW1lICYmIGRlc2NyaXB0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyaXB0aW9uPy50ZXh0ID09IG51bGwpIHtcbiAgICBkZXNjcmlwdGlvbiA9IHsgdGV4dDogbmFtZSwgdHlwZSB9O1xuICB9XG4gIGlmICh0eXBlID09IG51bGwgfHwgZGVzY3JpcHRpb24udGV4dCA9PSBudWxsKSB7XG4gICAgZGVzY3JpcHRpb24gPSB7IHRleHQ6IG5hbWUsIHR5cGUgfTtcbiAgfVxuICBzdGF0ZS5yZWNvcmRzLmFjdG9ycy5zZXQoaWQsIHtcbiAgICBib3g6IGFzc2lnbmVkQm94LFxuICAgIG5hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnRleHQsXG4gICAgd3JhcDogZGVzY3JpcHRpb24ud3JhcCA/PyBhdXRvV3JhcCgpLFxuICAgIHByZXZBY3Rvcjogc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IsXG4gICAgbGlua3M6IHt9LFxuICAgIHByb3BlcnRpZXM6IHt9LFxuICAgIGFjdG9yQ250OiBudWxsLFxuICAgIHJlY3REYXRhOiBudWxsLFxuICAgIHR5cGU6IHR5cGUgPz8gXCJwYXJ0aWNpcGFudFwiXG4gIH0pO1xuICBpZiAoc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IpIHtcbiAgICBjb25zdCBwcmV2QWN0b3JJblJlY29yZHMgPSBzdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IpO1xuICAgIGlmIChwcmV2QWN0b3JJblJlY29yZHMpIHtcbiAgICAgIHByZXZBY3RvckluUmVjb3Jkcy5uZXh0QWN0b3IgPSBpZDtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXRlLnJlY29yZHMuY3VycmVudEJveCkge1xuICAgIHN0YXRlLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChpZCk7XG4gIH1cbiAgc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IgPSBpZDtcbn0sIFwiYWRkQWN0b3JcIik7XG52YXIgYWN0aXZhdGlvbkNvdW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFydCkgPT4ge1xuICBsZXQgaTtcbiAgbGV0IGNvdW50ID0gMDtcbiAgaWYgKCFwYXJ0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IHN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tpXS50eXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfU1RBUlQgJiYgc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tpXS5mcm9tID09PSBwYXJ0KSB7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tpXS50eXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfRU5EICYmIHN0YXRlLnJlY29yZHMubWVzc2FnZXNbaV0uZnJvbSA9PT0gcGFydCkge1xuICAgICAgY291bnQtLTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufSwgXCJhY3RpdmF0aW9uQ291bnRcIik7XG52YXIgYWRkTWVzc2FnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRGcm9tLCBpZFRvLCBtZXNzYWdlLCBhbnN3ZXIpIHtcbiAgc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBpZEZyb20sXG4gICAgdG86IGlkVG8sXG4gICAgbWVzc2FnZTogbWVzc2FnZS50ZXh0LFxuICAgIHdyYXA6IG1lc3NhZ2Uud3JhcCA/PyBhdXRvV3JhcCgpLFxuICAgIGFuc3dlclxuICB9KTtcbn0sIFwiYWRkTWVzc2FnZVwiKTtcbnZhciBhZGRTaWduYWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkRnJvbSwgaWRUbywgbWVzc2FnZSwgbWVzc2FnZVR5cGUsIGFjdGl2YXRlID0gZmFsc2UpIHtcbiAgaWYgKG1lc3NhZ2VUeXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfRU5EKSB7XG4gICAgY29uc3QgY250ID0gYWN0aXZhdGlvbkNvdW50KGlkRnJvbSA/PyBcIlwiKTtcbiAgICBpZiAoY250IDwgMSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gaW5hY3RpdmF0ZSBhbiBpbmFjdGl2ZSBwYXJ0aWNpcGFudCAoXCIgKyBpZEZyb20gKyBcIilcIik7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBcIi0+Pi1cIixcbiAgICAgICAgdG9rZW46IFwiLT4+LVwiLFxuICAgICAgICBsaW5lOiBcIjFcIixcbiAgICAgICAgbG9jOiB7IGZpcnN0X2xpbmU6IDEsIGxhc3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAxLCBsYXN0X2NvbHVtbjogMSB9LFxuICAgICAgICBleHBlY3RlZDogW1wiJ0FDVElWRV9QQVJUSUNJUEFOVCdcIl1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBpZEZyb20sXG4gICAgdG86IGlkVG8sXG4gICAgbWVzc2FnZTogbWVzc2FnZT8udGV4dCA/PyBcIlwiLFxuICAgIHdyYXA6IG1lc3NhZ2U/LndyYXAgPz8gYXV0b1dyYXAoKSxcbiAgICB0eXBlOiBtZXNzYWdlVHlwZSxcbiAgICBhY3RpdmF0ZVxuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59LCBcImFkZFNpZ25hbFwiKTtcbnZhciBoYXNBdExlYXN0T25lQm94ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuYm94ZXMubGVuZ3RoID4gMDtcbn0sIFwiaGFzQXRMZWFzdE9uZUJveFwiKTtcbnZhciBoYXNBdExlYXN0T25lQm94V2l0aFRpdGxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuYm94ZXMuc29tZSgoYikgPT4gYi5uYW1lKTtcbn0sIFwiaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZVwiKTtcbnZhciBnZXRNZXNzYWdlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzO1xufSwgXCJnZXRNZXNzYWdlc1wiKTtcbnZhciBnZXRCb3hlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLmJveGVzO1xufSwgXCJnZXRCb3hlc1wiKTtcbnZhciBnZXRBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5hY3RvcnM7XG59LCBcImdldEFjdG9yc1wiKTtcbnZhciBnZXRDcmVhdGVkQWN0b3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuY3JlYXRlZEFjdG9ycztcbn0sIFwiZ2V0Q3JlYXRlZEFjdG9yc1wiKTtcbnZhciBnZXREZXN0cm95ZWRBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnM7XG59LCBcImdldERlc3Ryb3llZEFjdG9yc1wiKTtcbnZhciBnZXRBY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuYWN0b3JzLmdldChpZCk7XG59LCBcImdldEFjdG9yXCIpO1xudmFyIGdldEFjdG9yS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBbLi4uc3RhdGUucmVjb3Jkcy5hY3RvcnMua2V5cygpXTtcbn0sIFwiZ2V0QWN0b3JLZXlzXCIpO1xudmFyIGVuYWJsZVNlcXVlbmNlTnVtYmVycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHN0YXRlLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZCA9IHRydWU7XG59LCBcImVuYWJsZVNlcXVlbmNlTnVtYmVyc1wiKTtcbnZhciBkaXNhYmxlU2VxdWVuY2VOdW1iZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc3RhdGUucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkID0gZmFsc2U7XG59LCBcImRpc2FibGVTZXF1ZW5jZU51bWJlcnNcIik7XG52YXIgc2hvd1NlcXVlbmNlTnVtYmVycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gc3RhdGUucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkLCBcInNob3dTZXF1ZW5jZU51bWJlcnNcIik7XG52YXIgc2V0V3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24od3JhcFNldHRpbmcpIHtcbiAgc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZCA9IHdyYXBTZXR0aW5nO1xufSwgXCJzZXRXcmFwXCIpO1xudmFyIGV4dHJhY3RXcmFwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCkgPT4ge1xuICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKTtcbiAgY29uc3Qgd3JhcCA9IC9eOj93cmFwOi8uZXhlYyh0ZXh0KSAhPT0gbnVsbCA/IHRydWUgOiAvXjo/bm93cmFwOi8uZXhlYyh0ZXh0KSAhPT0gbnVsbCA/IGZhbHNlIDogdm9pZCAwO1xuICBjb25zdCBjbGVhbmVkVGV4dCA9ICh3cmFwID09PSB2b2lkIDAgPyB0ZXh0IDogdGV4dC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCBcIlwiKSkudHJpbSgpO1xuICByZXR1cm4geyBjbGVhbmVkVGV4dCwgd3JhcCB9O1xufSwgXCJleHRyYWN0V3JhcFwiKTtcbnZhciBhdXRvV3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBpZiAoc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlLnJlY29yZHMud3JhcEVuYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGdldENvbmZpZzIoKS5zZXF1ZW5jZT8ud3JhcCA/PyBmYWxzZTtcbn0sIFwiYXV0b1dyYXBcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc3RhdGUucmVzZXQoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgcGFyc2VNZXNzYWdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdHIpIHtcbiAgY29uc3QgdHJpbW1lZFN0ciA9IHN0ci50cmltKCk7XG4gIGNvbnN0IHsgd3JhcCwgY2xlYW5lZFRleHQgfSA9IGV4dHJhY3RXcmFwKHRyaW1tZWRTdHIpO1xuICBjb25zdCBtZXNzYWdlID0ge1xuICAgIHRleHQ6IGNsZWFuZWRUZXh0LFxuICAgIHdyYXBcbiAgfTtcbiAgbG9nLmRlYnVnKGBwYXJzZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl9YCk7XG4gIHJldHVybiBtZXNzYWdlO1xufSwgXCJwYXJzZU1lc3NhZ2VcIik7XG52YXIgcGFyc2VCb3hEYXRhID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdHIpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXigoPzpyZ2JhP3xoc2xhPylcXHMqXFwoLipcXCl8XFx3KikoLiopJC8uZXhlYyhzdHIpO1xuICBsZXQgY29sb3IgPSBtYXRjaD8uWzFdID8gbWF0Y2hbMV0udHJpbSgpIDogXCJ0cmFuc3BhcmVudFwiO1xuICBsZXQgdGl0bGUgPSBtYXRjaD8uWzJdID8gbWF0Y2hbMl0udHJpbSgpIDogdm9pZCAwO1xuICBpZiAod2luZG93Py5DU1MpIHtcbiAgICBpZiAoIXdpbmRvdy5DU1Muc3VwcG9ydHMoXCJjb2xvclwiLCBjb2xvcikpIHtcbiAgICAgIGNvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgdGl0bGUgPSBzdHIudHJpbSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdHlsZSA9IG5ldyBPcHRpb24oKS5zdHlsZTtcbiAgICBzdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIGlmIChzdHlsZS5jb2xvciAhPT0gY29sb3IpIHtcbiAgICAgIGNvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgdGl0bGUgPSBzdHIudHJpbSgpO1xuICAgIH1cbiAgfVxuICBjb25zdCB7IHdyYXAsIGNsZWFuZWRUZXh0IH0gPSBleHRyYWN0V3JhcCh0aXRsZSk7XG4gIHJldHVybiB7XG4gICAgdGV4dDogY2xlYW5lZFRleHQgPyBzYW5pdGl6ZVRleHQoY2xlYW5lZFRleHQsIGdldENvbmZpZzIoKSkgOiB2b2lkIDAsXG4gICAgY29sb3IsXG4gICAgd3JhcFxuICB9O1xufSwgXCJwYXJzZUJveERhdGFcIik7XG52YXIgTElORVRZUEUgPSB7XG4gIFNPTElEOiAwLFxuICBET1RURUQ6IDEsXG4gIE5PVEU6IDIsXG4gIFNPTElEX0NST1NTOiAzLFxuICBET1RURURfQ1JPU1M6IDQsXG4gIFNPTElEX09QRU46IDUsXG4gIERPVFRFRF9PUEVOOiA2LFxuICBMT09QX1NUQVJUOiAxMCxcbiAgTE9PUF9FTkQ6IDExLFxuICBBTFRfU1RBUlQ6IDEyLFxuICBBTFRfRUxTRTogMTMsXG4gIEFMVF9FTkQ6IDE0LFxuICBPUFRfU1RBUlQ6IDE1LFxuICBPUFRfRU5EOiAxNixcbiAgQUNUSVZFX1NUQVJUOiAxNyxcbiAgQUNUSVZFX0VORDogMTgsXG4gIFBBUl9TVEFSVDogMTksXG4gIFBBUl9BTkQ6IDIwLFxuICBQQVJfRU5EOiAyMSxcbiAgUkVDVF9TVEFSVDogMjIsXG4gIFJFQ1RfRU5EOiAyMyxcbiAgU09MSURfUE9JTlQ6IDI0LFxuICBET1RURURfUE9JTlQ6IDI1LFxuICBBVVRPTlVNQkVSOiAyNixcbiAgQ1JJVElDQUxfU1RBUlQ6IDI3LFxuICBDUklUSUNBTF9PUFRJT046IDI4LFxuICBDUklUSUNBTF9FTkQ6IDI5LFxuICBCUkVBS19TVEFSVDogMzAsXG4gIEJSRUFLX0VORDogMzEsXG4gIFBBUl9PVkVSX1NUQVJUOiAzMixcbiAgQklESVJFQ1RJT05BTF9TT0xJRDogMzMsXG4gIEJJRElSRUNUSU9OQUxfRE9UVEVEOiAzNFxufTtcbnZhciBBUlJPV1RZUEUgPSB7XG4gIEZJTExFRDogMCxcbiAgT1BFTjogMVxufTtcbnZhciBQTEFDRU1FTlQgPSB7XG4gIExFRlRPRjogMCxcbiAgUklHSFRPRjogMSxcbiAgT1ZFUjogMlxufTtcbnZhciBhZGROb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3RvciwgcGxhY2VtZW50LCBtZXNzYWdlKSB7XG4gIGNvbnN0IG5vdGUgPSB7XG4gICAgYWN0b3IsXG4gICAgcGxhY2VtZW50LFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UudGV4dCxcbiAgICB3cmFwOiBtZXNzYWdlLndyYXAgPz8gYXV0b1dyYXAoKVxuICB9O1xuICBjb25zdCBhY3RvcnMgPSBbXS5jb25jYXQoYWN0b3IsIGFjdG9yKTtcbiAgc3RhdGUucmVjb3Jkcy5ub3Rlcy5wdXNoKG5vdGUpO1xuICBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe1xuICAgIGZyb206IGFjdG9yc1swXSxcbiAgICB0bzogYWN0b3JzWzFdLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UudGV4dCxcbiAgICB3cmFwOiBtZXNzYWdlLndyYXAgPz8gYXV0b1dyYXAoKSxcbiAgICB0eXBlOiBMSU5FVFlQRS5OT1RFLFxuICAgIHBsYWNlbWVudFxuICB9KTtcbn0sIFwiYWRkTm90ZVwiKTtcbnZhciBhZGRMaW5rcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWN0b3JJZCwgdGV4dCkge1xuICBjb25zdCBhY3RvciA9IGdldEFjdG9yKGFjdG9ySWQpO1xuICB0cnkge1xuICAgIGxldCBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVUZXh0KHRleHQudGV4dCwgZ2V0Q29uZmlnMigpKTtcbiAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC5yZXBsYWNlKC8mYW1wOy9nLCBcIiZcIik7XG4gICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQucmVwbGFjZSgvJmVxdWFsczsvZywgXCI9XCIpO1xuICAgIGNvbnN0IGxpbmtzID0gSlNPTi5wYXJzZShzYW5pdGl6ZWRUZXh0KTtcbiAgICBpbnNlcnRMaW5rcyhhY3RvciwgbGlua3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHRcIiwgZSk7XG4gIH1cbn0sIFwiYWRkTGlua3NcIik7XG52YXIgYWRkQUxpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGFjdG9ySWQsIHRleHQpIHtcbiAgY29uc3QgYWN0b3IgPSBnZXRBY3RvcihhY3RvcklkKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaW5rcyA9IHt9O1xuICAgIGxldCBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVUZXh0KHRleHQudGV4dCwgZ2V0Q29uZmlnMigpKTtcbiAgICBjb25zdCBzZXAgPSBzYW5pdGl6ZWRUZXh0LmluZGV4T2YoXCJAXCIpO1xuICAgIHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UoLyZhbXA7L2csIFwiJlwiKTtcbiAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC5yZXBsYWNlKC8mZXF1YWxzOy9nLCBcIj1cIik7XG4gICAgY29uc3QgbGFiZWwgPSBzYW5pdGl6ZWRUZXh0LnNsaWNlKDAsIHNlcCAtIDEpLnRyaW0oKTtcbiAgICBjb25zdCBsaW5rID0gc2FuaXRpemVkVGV4dC5zbGljZShzZXAgKyAxKS50cmltKCk7XG4gICAgbGlua3NbbGFiZWxdID0gbGluaztcbiAgICBpbnNlcnRMaW5rcyhhY3RvciwgbGlua3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHRcIiwgZSk7XG4gIH1cbn0sIFwiYWRkQUxpbmtcIik7XG5mdW5jdGlvbiBpbnNlcnRMaW5rcyhhY3RvciwgbGlua3MpIHtcbiAgaWYgKGFjdG9yLmxpbmtzID09IG51bGwpIHtcbiAgICBhY3Rvci5saW5rcyA9IGxpbmtzO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGxpbmtzKSB7XG4gICAgICBhY3Rvci5saW5rc1trZXldID0gbGlua3Nba2V5XTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShpbnNlcnRMaW5rcywgXCJpbnNlcnRMaW5rc1wiKTtcbnZhciBhZGRQcm9wZXJ0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3RvcklkLCB0ZXh0KSB7XG4gIGNvbnN0IGFjdG9yID0gZ2V0QWN0b3IoYWN0b3JJZCk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplVGV4dCh0ZXh0LnRleHQsIGdldENvbmZpZzIoKSk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IEpTT04ucGFyc2Uoc2FuaXRpemVkVGV4dCk7XG4gICAgaW5zZXJ0UHJvcGVydGllcyhhY3RvciwgcHJvcGVydGllcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoXCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIHByb3BlcnRpZXMgdGV4dFwiLCBlKTtcbiAgfVxufSwgXCJhZGRQcm9wZXJ0aWVzXCIpO1xuZnVuY3Rpb24gaW5zZXJ0UHJvcGVydGllcyhhY3RvciwgcHJvcGVydGllcykge1xuICBpZiAoYWN0b3IucHJvcGVydGllcyA9PSBudWxsKSB7XG4gICAgYWN0b3IucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgYWN0b3IucHJvcGVydGllc1trZXldID0gcHJvcGVydGllc1trZXldO1xuICAgIH1cbiAgfVxufVxuX19uYW1lKGluc2VydFByb3BlcnRpZXMsIFwiaW5zZXJ0UHJvcGVydGllc1wiKTtcbmZ1bmN0aW9uIGJveEVuZCgpIHtcbiAgc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94ID0gdm9pZCAwO1xufVxuX19uYW1lKGJveEVuZCwgXCJib3hFbmRcIik7XG52YXIgYWRkRGV0YWlscyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWN0b3JJZCwgdGV4dCkge1xuICBjb25zdCBhY3RvciA9IGdldEFjdG9yKGFjdG9ySWQpO1xuICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGV4dC50ZXh0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ZXh0MiA9IGVsZW0uaW5uZXJIVE1MO1xuICAgIGNvbnN0IGRldGFpbHMgPSBKU09OLnBhcnNlKHRleHQyKTtcbiAgICBpZiAoZGV0YWlscy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpbnNlcnRQcm9wZXJ0aWVzKGFjdG9yLCBkZXRhaWxzLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBpZiAoZGV0YWlscy5saW5rcykge1xuICAgICAgaW5zZXJ0TGlua3MoYWN0b3IsIGRldGFpbHMubGlua3MpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcihcImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0XCIsIGUpO1xuICB9XG59LCBcImFkZERldGFpbHNcIik7XG52YXIgZ2V0QWN0b3JQcm9wZXJ0eSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWN0b3IsIGtleSkge1xuICBpZiAoYWN0b3I/LnByb3BlcnRpZXMgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBhY3Rvci5wcm9wZXJ0aWVzW2tleV07XG4gIH1cbiAgcmV0dXJuIHZvaWQgMDtcbn0sIFwiZ2V0QWN0b3JQcm9wZXJ0eVwiKTtcbnZhciBhcHBseSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFyYW0pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgcGFyYW0uZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBhcHBseShpdGVtKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJzZXF1ZW5jZUluZGV4XCI6XG4gICAgICAgIHN0YXRlLnJlY29yZHMubWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgZnJvbTogdm9pZCAwLFxuICAgICAgICAgIHRvOiB2b2lkIDAsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgc3RhcnQ6IHBhcmFtLnNlcXVlbmNlSW5kZXgsXG4gICAgICAgICAgICBzdGVwOiBwYXJhbS5zZXF1ZW5jZUluZGV4U3RlcCxcbiAgICAgICAgICAgIHZpc2libGU6IHBhcmFtLnNlcXVlbmNlVmlzaWJsZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgd3JhcDogZmFsc2UsXG4gICAgICAgICAgdHlwZTogcGFyYW0uc2lnbmFsVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkUGFydGljaXBhbnRcIjpcbiAgICAgICAgYWRkQWN0b3IocGFyYW0uYWN0b3IsIHBhcmFtLmFjdG9yLCBwYXJhbS5kZXNjcmlwdGlvbiwgcGFyYW0uZHJhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNyZWF0ZVBhcnRpY2lwYW50XCI6XG4gICAgICAgIGlmIChzdGF0ZS5yZWNvcmRzLmFjdG9ycy5oYXMocGFyYW0uYWN0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvclwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkID0gcGFyYW0uYWN0b3I7XG4gICAgICAgIGFkZEFjdG9yKHBhcmFtLmFjdG9yLCBwYXJhbS5hY3RvciwgcGFyYW0uZGVzY3JpcHRpb24sIHBhcmFtLmRyYXcpO1xuICAgICAgICBzdGF0ZS5yZWNvcmRzLmNyZWF0ZWRBY3RvcnMuc2V0KHBhcmFtLmFjdG9yLCBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRlc3Ryb3lQYXJ0aWNpcGFudFwiOlxuICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQgPSBwYXJhbS5hY3RvcjtcbiAgICAgICAgc3RhdGUucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnMuc2V0KHBhcmFtLmFjdG9yLCBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFjdGl2ZVN0YXJ0XCI6XG4gICAgICAgIGFkZFNpZ25hbChwYXJhbS5hY3Rvciwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhY3RpdmVFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHBhcmFtLmFjdG9yLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZE5vdGVcIjpcbiAgICAgICAgYWRkTm90ZShwYXJhbS5hY3RvciwgcGFyYW0ucGxhY2VtZW50LCBwYXJhbS50ZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkTGlua3NcIjpcbiAgICAgICAgYWRkTGlua3MocGFyYW0uYWN0b3IsIHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRBTGlua1wiOlxuICAgICAgICBhZGRBTGluayhwYXJhbS5hY3RvciwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZFByb3BlcnRpZXNcIjpcbiAgICAgICAgYWRkUHJvcGVydGllcyhwYXJhbS5hY3RvciwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZERldGFpbHNcIjpcbiAgICAgICAgYWRkRGV0YWlscyhwYXJhbS5hY3RvciwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZE1lc3NhZ2VcIjpcbiAgICAgICAgaWYgKHN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQpIHtcbiAgICAgICAgICBpZiAocGFyYW0udG8gIT09IHN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudCBcIiArIHN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQubmFtZSArIFwiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjcmVhdGluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkID0gdm9pZCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpIHtcbiAgICAgICAgICBpZiAocGFyYW0udG8gIT09IHN0YXRlLnJlY29yZHMubGFzdERlc3Ryb3llZCAmJiBwYXJhbS5mcm9tICE9PSBzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50IFwiICsgc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkLm5hbWUgKyBcIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFkZFNpZ25hbChwYXJhbS5mcm9tLCBwYXJhbS50bywgcGFyYW0ubXNnLCBwYXJhbS5zaWduYWxUeXBlLCBwYXJhbS5hY3RpdmF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJveFN0YXJ0XCI6XG4gICAgICAgIGFkZEJveChwYXJhbS5ib3hEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm94RW5kXCI6XG4gICAgICAgIGJveEVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsb29wU3RhcnRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5sb29wVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxvb3BFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWN0U3RhcnRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5jb2xvciwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlY3RFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJvcHRTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLm9wdFRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJvcHRFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhbHRTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmFsdFRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlbHNlXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0uYWx0VGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFsdEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNldEFjY1RpdGxlXCI6XG4gICAgICAgIHNldEFjY1RpdGxlKHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwYXJTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLnBhclRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5wYXJUZXh0LCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicGFyRW5kXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiY3JpdGljYWxTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmNyaXRpY2FsVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLm9wdGlvblRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjcml0aWNhbEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyZWFrU3RhcnRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5icmVha1RleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJicmVha0VuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufSwgXCJhcHBseVwiKTtcbnZhciBzZXF1ZW5jZURiX2RlZmF1bHQgPSB7XG4gIGFkZEFjdG9yLFxuICBhZGRNZXNzYWdlLFxuICBhZGRTaWduYWwsXG4gIGFkZExpbmtzLFxuICBhZGREZXRhaWxzLFxuICBhZGRQcm9wZXJ0aWVzLFxuICBhdXRvV3JhcCxcbiAgc2V0V3JhcCxcbiAgZW5hYmxlU2VxdWVuY2VOdW1iZXJzLFxuICBkaXNhYmxlU2VxdWVuY2VOdW1iZXJzLFxuICBzaG93U2VxdWVuY2VOdW1iZXJzLFxuICBnZXRNZXNzYWdlcyxcbiAgZ2V0QWN0b3JzLFxuICBnZXRDcmVhdGVkQWN0b3JzLFxuICBnZXREZXN0cm95ZWRBY3RvcnMsXG4gIGdldEFjdG9yLFxuICBnZXRBY3RvcktleXMsXG4gIGdldEFjdG9yUHJvcGVydHksXG4gIGdldEFjY1RpdGxlLFxuICBnZXRCb3hlcyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldENvbmZpZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBnZXRDb25maWcyKCkuc2VxdWVuY2UsIFwiZ2V0Q29uZmlnXCIpLFxuICBjbGVhcjogY2xlYXIyLFxuICBwYXJzZU1lc3NhZ2UsXG4gIHBhcnNlQm94RGF0YSxcbiAgTElORVRZUEUsXG4gIEFSUk9XVFlQRSxcbiAgUExBQ0VNRU5ULFxuICBhZGROb3RlLFxuICBzZXRBY2NUaXRsZSxcbiAgYXBwbHksXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgaGFzQXRMZWFzdE9uZUJveCxcbiAgaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NlcXVlbmNlL3N0eWxlcy5qc1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGAuYWN0b3Ige1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdG9yQm9yZGVyfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JCa2d9O1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5hY3RvckxpbmVDb2xvcn07XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNlcXVlbmNlTnVtYmVyQ29sb3J9O1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNpZ25hbFRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxhYmVsQm94IHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5sYWJlbEJveEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubGFiZWxCb3hCa2dDb2xvcn07XG4gIH1cblxuICAubGFiZWxUZXh0LCAubGFiZWxUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5sYWJlbFRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7XG4gICAgZmlsbDogJHtvcHRpb25zLmxvb3BUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wTGluZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5sYWJlbEJveEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubGFiZWxCb3hCb3JkZXJDb2xvcn07XG4gIH1cblxuICAubm90ZSB7XG4gICAgLy9zdHJva2U6ICNkZWNjOTM7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm90ZUJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubm90ZUJrZ0NvbG9yfTtcbiAgfVxuXG4gIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5ub3RlVGV4dENvbG9yfTtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAuYWN0aXZhdGlvbjAge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZhdGlvbjEge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZhdGlvbjIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5hY3RvclBvcHVwTWVudVBhbmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdG9yQmtnfTtcbiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDNweCA1cHggMnB4IHJnYigwIDAgMCAvIDAuNCkpO1xufVxuICAuYWN0b3ItbWFuIGxpbmUge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdG9yQm9yZGVyfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JCa2d9O1xuICB9XG4gIC5hY3Rvci1tYW4gY2lyY2xlLCBsaW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5hY3RvckJvcmRlcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdG9yQmtnfTtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9zZXF1ZW5jZS9zZXF1ZW5jZVJlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3NlcXVlbmNlL3N2Z0RyYXcuanNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG52YXIgQUNUT1JfVFlQRV9XSURUSCA9IDE4ICogMjtcbnZhciBUT1BfQUNUT1JfQ0xBU1MgPSBcImFjdG9yLXRvcFwiO1xudmFyIEJPVFRPTV9BQ1RPUl9DTEFTUyA9IFwiYWN0b3ItYm90dG9tXCI7XG52YXIgQUNUT1JfQk9YX0NMQVNTID0gXCJhY3Rvci1ib3hcIjtcbnZhciBBQ1RPUl9NQU5fRklHVVJFX0NMQVNTID0gXCJhY3Rvci1tYW5cIjtcbnZhciBkcmF3UmVjdDIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHJlY3REYXRhKSB7XG4gIHJldHVybiBkcmF3UmVjdChlbGVtLCByZWN0RGF0YSk7XG59LCBcImRyYXdSZWN0XCIpO1xudmFyIGRyYXdQb3B1cCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYWN0b3IsIG1pbk1lbnVXaWR0aCwgdGV4dEF0dHJzLCBmb3JjZU1lbnVzKSB7XG4gIGlmIChhY3Rvci5saW5rcyA9PT0gdm9pZCAwIHx8IGFjdG9yLmxpbmtzID09PSBudWxsIHx8IE9iamVjdC5rZXlzKGFjdG9yLmxpbmtzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBoZWlnaHQ6IDAsIHdpZHRoOiAwIH07XG4gIH1cbiAgY29uc3QgbGlua3MgPSBhY3Rvci5saW5rcztcbiAgY29uc3QgYWN0b3JDbnQyID0gYWN0b3IuYWN0b3JDbnQ7XG4gIGNvbnN0IHJlY3REYXRhID0gYWN0b3IucmVjdERhdGE7XG4gIHZhciBkaXNwbGF5VmFsdWUgPSBcIm5vbmVcIjtcbiAgaWYgKGZvcmNlTWVudXMpIHtcbiAgICBkaXNwbGF5VmFsdWUgPSBcImJsb2NrICFpbXBvcnRhbnRcIjtcbiAgfVxuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBnLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudDIgKyBcIl9wb3B1cFwiKTtcbiAgZy5hdHRyKFwiY2xhc3NcIiwgXCJhY3RvclBvcHVwTWVudVwiKTtcbiAgZy5hdHRyKFwiZGlzcGxheVwiLCBkaXNwbGF5VmFsdWUpO1xuICB2YXIgYWN0b3JDbGFzcyA9IFwiXCI7XG4gIGlmIChyZWN0RGF0YS5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgYWN0b3JDbGFzcyA9IFwiIFwiICsgcmVjdERhdGEuY2xhc3M7XG4gIH1cbiAgbGV0IG1lbnVXaWR0aCA9IHJlY3REYXRhLndpZHRoID4gbWluTWVudVdpZHRoID8gcmVjdERhdGEud2lkdGggOiBtaW5NZW51V2lkdGg7XG4gIGNvbnN0IHJlY3RFbGVtID0gZy5hcHBlbmQoXCJyZWN0XCIpO1xuICByZWN0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhY3RvclBvcHVwTWVudVBhbmVsXCIgKyBhY3RvckNsYXNzKTtcbiAgcmVjdEVsZW0uYXR0cihcInhcIiwgcmVjdERhdGEueCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJ5XCIsIHJlY3REYXRhLmhlaWdodCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJmaWxsXCIsIHJlY3REYXRhLmZpbGwpO1xuICByZWN0RWxlbS5hdHRyKFwic3Ryb2tlXCIsIHJlY3REYXRhLnN0cm9rZSk7XG4gIHJlY3RFbGVtLmF0dHIoXCJ3aWR0aFwiLCBtZW51V2lkdGgpO1xuICByZWN0RWxlbS5hdHRyKFwiaGVpZ2h0XCIsIHJlY3REYXRhLmhlaWdodCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJyeFwiLCByZWN0RGF0YS5yeCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJyeVwiLCByZWN0RGF0YS5yeSk7XG4gIGlmIChsaW5rcyAhPSBudWxsKSB7XG4gICAgdmFyIGxpbmtZID0gMjA7XG4gICAgZm9yIChsZXQga2V5IGluIGxpbmtzKSB7XG4gICAgICB2YXIgbGlua0VsZW0gPSBnLmFwcGVuZChcImFcIik7XG4gICAgICB2YXIgc2FuaXRpemVkTGluayA9IHNhbml0aXplVXJsKGxpbmtzW2tleV0pO1xuICAgICAgbGlua0VsZW0uYXR0cihcInhsaW5rOmhyZWZcIiwgc2FuaXRpemVkTGluayk7XG4gICAgICBsaW5rRWxlbS5hdHRyKFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuICAgICAgX2RyYXdNZW51SXRlbVRleHRDYW5kaWRhdGVGdW5jKHRleHRBdHRycykoXG4gICAgICAgIGtleSxcbiAgICAgICAgbGlua0VsZW0sXG4gICAgICAgIHJlY3REYXRhLnggKyAxMCxcbiAgICAgICAgcmVjdERhdGEuaGVpZ2h0ICsgbGlua1ksXG4gICAgICAgIG1lbnVXaWR0aCxcbiAgICAgICAgMjAsXG4gICAgICAgIHsgY2xhc3M6IFwiYWN0b3JcIiB9LFxuICAgICAgICB0ZXh0QXR0cnNcbiAgICAgICk7XG4gICAgICBsaW5rWSArPSAzMDtcbiAgICB9XG4gIH1cbiAgcmVjdEVsZW0uYXR0cihcImhlaWdodFwiLCBsaW5rWSk7XG4gIHJldHVybiB7IGhlaWdodDogcmVjdERhdGEuaGVpZ2h0ICsgbGlua1ksIHdpZHRoOiBtZW51V2lkdGggfTtcbn0sIFwiZHJhd1BvcHVwXCIpO1xudmFyIHBvcHVwTWVudVRvZ2dsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocG9wSWQpIHtcbiAgcmV0dXJuIFwidmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1wiICsgcG9wSWQgKyBcIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gcHUuc3R5bGUuZGlzcGxheSA9PSAnYmxvY2snID8gJ25vbmUnIDogJ2Jsb2NrJzsgfVwiO1xufSwgXCJwb3B1cE1lbnVUb2dnbGVcIik7XG52YXIgZHJhd0thdGV4ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihlbGVtLCB0ZXh0RGF0YSwgbXNnTW9kZWwgPSBudWxsKSB7XG4gIGxldCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKTtcbiAgY29uc3QgbGluZXMgPSBhd2FpdCByZW5kZXJLYXRleCh0ZXh0RGF0YS50ZXh0LCBnZXRDb25maWcoKSk7XG4gIGNvbnN0IGRpdkVsZW0gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuYXR0cihcInN0eWxlXCIsIFwid2lkdGg6IGZpdC1jb250ZW50O1wiKS5hdHRyKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLmh0bWwobGluZXMpO1xuICBjb25zdCBkaW0gPSBkaXZFbGVtLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdGV4dEVsZW0uYXR0cihcImhlaWdodFwiLCBNYXRoLnJvdW5kKGRpbS5oZWlnaHQpKS5hdHRyKFwid2lkdGhcIiwgTWF0aC5yb3VuZChkaW0ud2lkdGgpKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzID09PSBcIm5vdGVUZXh0XCIpIHtcbiAgICBjb25zdCByZWN0RWxlbSA9IGVsZW0ubm9kZSgpLmZpcnN0Q2hpbGQ7XG4gICAgcmVjdEVsZW0uc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGRpbS5oZWlnaHQgKyAyICogdGV4dERhdGEudGV4dE1hcmdpbik7XG4gICAgY29uc3QgcmVjdERpbSA9IHJlY3RFbGVtLmdldEJCb3goKTtcbiAgICB0ZXh0RWxlbS5hdHRyKFwieFwiLCBNYXRoLnJvdW5kKHJlY3REaW0ueCArIHJlY3REaW0ud2lkdGggLyAyIC0gZGltLndpZHRoIC8gMikpLmF0dHIoXCJ5XCIsIE1hdGgucm91bmQocmVjdERpbS55ICsgcmVjdERpbS5oZWlnaHQgLyAyIC0gZGltLmhlaWdodCAvIDIpKTtcbiAgfSBlbHNlIGlmIChtc2dNb2RlbCkge1xuICAgIGxldCB7IHN0YXJ0eCwgc3RvcHgsIHN0YXJ0eSB9ID0gbXNnTW9kZWw7XG4gICAgaWYgKHN0YXJ0eCA+IHN0b3B4KSB7XG4gICAgICBjb25zdCB0ZW1wID0gc3RhcnR4O1xuICAgICAgc3RhcnR4ID0gc3RvcHg7XG4gICAgICBzdG9weCA9IHRlbXA7XG4gICAgfVxuICAgIHRleHRFbGVtLmF0dHIoXCJ4XCIsIE1hdGgucm91bmQoc3RhcnR4ICsgTWF0aC5hYnMoc3RhcnR4IC0gc3RvcHgpIC8gMiAtIGRpbS53aWR0aCAvIDIpKTtcbiAgICBpZiAodGV4dERhdGEuY2xhc3MgPT09IFwibG9vcFRleHRcIikge1xuICAgICAgdGV4dEVsZW0uYXR0cihcInlcIiwgTWF0aC5yb3VuZChzdGFydHkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dEVsZW0uYXR0cihcInlcIiwgTWF0aC5yb3VuZChzdGFydHkgLSBkaW0uaGVpZ2h0KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbdGV4dEVsZW1dO1xufSwgXCJkcmF3S2F0ZXhcIik7XG52YXIgZHJhd1RleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIGxldCBwcmV2VGV4dEhlaWdodCA9IDA7XG4gIGxldCB0ZXh0SGVpZ2h0ID0gMDtcbiAgY29uc3QgbGluZXMgPSB0ZXh0RGF0YS50ZXh0LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgY29uc3QgW190ZXh0Rm9udFNpemUsIF90ZXh0Rm9udFNpemVQeF0gPSBwYXJzZUZvbnRTaXplKHRleHREYXRhLmZvbnRTaXplKTtcbiAgbGV0IHRleHRFbGVtcyA9IFtdO1xuICBsZXQgZHkgPSAwO1xuICBsZXQgeWZ1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHRleHREYXRhLnksIFwieWZ1bmNcIik7XG4gIGlmICh0ZXh0RGF0YS52YWxpZ24gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luICE9PSB2b2lkIDAgJiYgdGV4dERhdGEudGV4dE1hcmdpbiA+IDApIHtcbiAgICBzd2l0Y2ggKHRleHREYXRhLnZhbGlnbikge1xuICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgIHlmdW5jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLnJvdW5kKHRleHREYXRhLnkgKyB0ZXh0RGF0YS50ZXh0TWFyZ2luKSwgXCJ5ZnVuY1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgIHlmdW5jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLnJvdW5kKHRleHREYXRhLnkgKyAocHJldlRleHRIZWlnaHQgKyB0ZXh0SGVpZ2h0ICsgdGV4dERhdGEudGV4dE1hcmdpbikgLyAyKSwgXCJ5ZnVuY1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgIHlmdW5jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLnJvdW5kKFxuICAgICAgICAgIHRleHREYXRhLnkgKyAocHJldlRleHRIZWlnaHQgKyB0ZXh0SGVpZ2h0ICsgMiAqIHRleHREYXRhLnRleHRNYXJnaW4pIC0gdGV4dERhdGEudGV4dE1hcmdpblxuICAgICAgICApLCBcInlmdW5jXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHRleHREYXRhLmFuY2hvciAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS53aWR0aCAhPT0gdm9pZCAwKSB7XG4gICAgc3dpdGNoICh0ZXh0RGF0YS5hbmNob3IpIHtcbiAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgdGV4dERhdGEueCA9IE1hdGgucm91bmQodGV4dERhdGEueCArIHRleHREYXRhLnRleHRNYXJnaW4pO1xuICAgICAgICB0ZXh0RGF0YS5hbmNob3IgPSBcInN0YXJ0XCI7XG4gICAgICAgIHRleHREYXRhLmRvbWluYW50QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICB0ZXh0RGF0YS5hbGlnbm1lbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICB0ZXh0RGF0YS54ID0gTWF0aC5yb3VuZCh0ZXh0RGF0YS54ICsgdGV4dERhdGEud2lkdGggLyAyKTtcbiAgICAgICAgdGV4dERhdGEuYW5jaG9yID0gXCJtaWRkbGVcIjtcbiAgICAgICAgdGV4dERhdGEuZG9taW5hbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIHRleHREYXRhLmFsaWdubWVudEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgdGV4dERhdGEueCA9IE1hdGgucm91bmQodGV4dERhdGEueCArIHRleHREYXRhLndpZHRoIC0gdGV4dERhdGEudGV4dE1hcmdpbik7XG4gICAgICAgIHRleHREYXRhLmFuY2hvciA9IFwiZW5kXCI7XG4gICAgICAgIHRleHREYXRhLmRvbWluYW50QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICB0ZXh0RGF0YS5hbGlnbm1lbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBbaSwgbGluZV0gb2YgbGluZXMuZW50cmllcygpKSB7XG4gICAgaWYgKHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luID09PSAwICYmIF90ZXh0Rm9udFNpemUgIT09IHZvaWQgMCkge1xuICAgICAgZHkgPSBpICogX3RleHRGb250U2l6ZTtcbiAgICB9XG4gICAgY29uc3QgdGV4dEVsZW0gPSBlbGVtLmFwcGVuZChcInRleHRcIik7XG4gICAgdGV4dEVsZW0uYXR0cihcInhcIiwgdGV4dERhdGEueCk7XG4gICAgdGV4dEVsZW0uYXR0cihcInlcIiwgeWZ1bmMoKSk7XG4gICAgaWYgKHRleHREYXRhLmFuY2hvciAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgdGV4dERhdGEuZG9taW5hbnRCYXNlbGluZSkuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCB0ZXh0RGF0YS5hbGlnbm1lbnRCYXNlbGluZSk7XG4gICAgfVxuICAgIGlmICh0ZXh0RGF0YS5mb250RmFtaWx5ICE9PSB2b2lkIDApIHtcbiAgICAgIHRleHRFbGVtLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgdGV4dERhdGEuZm9udEZhbWlseSk7XG4gICAgfVxuICAgIGlmIChfdGV4dEZvbnRTaXplUHggIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXNpemVcIiwgX3RleHRGb250U2l6ZVB4KTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLmZvbnRXZWlnaHQgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXdlaWdodFwiLCB0ZXh0RGF0YS5mb250V2VpZ2h0KTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLmZpbGwgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uYXR0cihcImZpbGxcIiwgdGV4dERhdGEuZmlsbCk7XG4gICAgfVxuICAgIGlmICh0ZXh0RGF0YS5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICAgIH1cbiAgICBpZiAodGV4dERhdGEuZHkgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uYXR0cihcImR5XCIsIHRleHREYXRhLmR5KTtcbiAgICB9IGVsc2UgaWYgKGR5ICE9PSAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwiZHlcIiwgZHkpO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gbGluZSB8fCBaRVJPX1dJRFRIX1NQQUNFO1xuICAgIGlmICh0ZXh0RGF0YS50c3Bhbikge1xuICAgICAgY29uc3Qgc3BhbiA9IHRleHRFbGVtLmFwcGVuZChcInRzcGFuXCIpO1xuICAgICAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgICAgIGlmICh0ZXh0RGF0YS5maWxsICE9PSB2b2lkIDApIHtcbiAgICAgICAgc3Bhbi5hdHRyKFwiZmlsbFwiLCB0ZXh0RGF0YS5maWxsKTtcbiAgICAgIH1cbiAgICAgIHNwYW4udGV4dCh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dEVsZW0udGV4dCh0ZXh0KTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLnZhbGlnbiAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luID4gMCkge1xuICAgICAgdGV4dEhlaWdodCArPSAodGV4dEVsZW0uX2dyb3VwcyB8fCB0ZXh0RWxlbSlbMF1bMF0uZ2V0QkJveCgpLmhlaWdodDtcbiAgICAgIHByZXZUZXh0SGVpZ2h0ID0gdGV4dEhlaWdodDtcbiAgICB9XG4gICAgdGV4dEVsZW1zLnB1c2godGV4dEVsZW0pO1xuICB9XG4gIHJldHVybiB0ZXh0RWxlbXM7XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBfX25hbWUoZ2VuUG9pbnRzLCBcImdlblBvaW50c1wiKTtcbiAgY29uc3QgcG9seWdvbiA9IGVsZW0uYXBwZW5kKFwicG9seWdvblwiKTtcbiAgcG9seWdvbi5hdHRyKFwicG9pbnRzXCIsIGdlblBvaW50cyh0eHRPYmplY3QueCwgdHh0T2JqZWN0LnksIHR4dE9iamVjdC53aWR0aCwgdHh0T2JqZWN0LmhlaWdodCwgNykpO1xuICBwb2x5Z29uLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsQm94XCIpO1xuICB0eHRPYmplY3QueSA9IHR4dE9iamVjdC55ICsgdHh0T2JqZWN0LmhlaWdodCAvIDI7XG4gIGRyYXdUZXh0KGVsZW0sIHR4dE9iamVjdCk7XG4gIHJldHVybiBwb2x5Z29uO1xufSwgXCJkcmF3TGFiZWxcIik7XG52YXIgYWN0b3JDbnQgPSAtMTtcbnZhciBmaXhMaWZlTGluZUhlaWdodHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkaWFncmFtMiwgYWN0b3JzLCBhY3RvcktleXMsIGNvbmYyKSA9PiB7XG4gIGlmICghZGlhZ3JhbTIuc2VsZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdG9yS2V5cy5mb3JFYWNoKChhY3RvcktleSkgPT4ge1xuICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzLmdldChhY3RvcktleSk7XG4gICAgY29uc3QgYWN0b3JET00gPSBkaWFncmFtMi5zZWxlY3QoXCIjYWN0b3JcIiArIGFjdG9yLmFjdG9yQ250KTtcbiAgICBpZiAoIWNvbmYyLm1pcnJvckFjdG9ycyAmJiBhY3Rvci5zdG9weSkge1xuICAgICAgYWN0b3JET00uYXR0cihcInkyXCIsIGFjdG9yLnN0b3B5ICsgYWN0b3IuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIGlmIChjb25mMi5taXJyb3JBY3RvcnMpIHtcbiAgICAgIGFjdG9yRE9NLmF0dHIoXCJ5MlwiLCBhY3Rvci5zdG9weSk7XG4gICAgfVxuICB9KTtcbn0sIFwiZml4TGlmZUxpbmVIZWlnaHRzXCIpO1xudmFyIGRyYXdBY3RvclR5cGVQYXJ0aWNpcGFudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBjb25zdCBhY3RvclkgPSBpc0Zvb3RlciA/IGFjdG9yLnN0b3B5IDogYWN0b3Iuc3RhcnR5O1xuICBjb25zdCBjZW50ZXIgPSBhY3Rvci54ICsgYWN0b3Iud2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJZID0gYWN0b3JZICsgNTtcbiAgY29uc3QgYm94cGx1c0xpbmVHcm91cCA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5sb3dlcigpO1xuICB2YXIgZyA9IGJveHBsdXNMaW5lR3JvdXA7XG4gIGlmICghaXNGb290ZXIpIHtcbiAgICBhY3RvckNudCsrO1xuICAgIGlmIChPYmplY3Qua2V5cyhhY3Rvci5saW5rcyB8fCB7fSkubGVuZ3RoICYmICFjb25mMi5mb3JjZU1lbnVzKSB7XG4gICAgICBnLmF0dHIoXCJvbmNsaWNrXCIsIHBvcHVwTWVudVRvZ2dsZShgYWN0b3Ike2FjdG9yQ250fV9wb3B1cGApKS5hdHRyKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcbiAgICB9XG4gICAgZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGNlbnRlclkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCAyZTMpLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yLWxpbmUgMjAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzk5OVwiKS5hdHRyKFwibmFtZVwiLCBhY3Rvci5uYW1lKTtcbiAgICBnID0gYm94cGx1c0xpbmVHcm91cC5hcHBlbmQoXCJnXCIpO1xuICAgIGFjdG9yLmFjdG9yQ250ID0gYWN0b3JDbnQ7XG4gICAgaWYgKGFjdG9yLmxpbmtzICE9IG51bGwpIHtcbiAgICAgIGcuYXR0cihcImlkXCIsIFwicm9vdC1cIiArIGFjdG9yQ250KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldE5vdGVSZWN0KCk7XG4gIHZhciBjc3NjbGFzcyA9IFwiYWN0b3JcIjtcbiAgaWYgKGFjdG9yLnByb3BlcnRpZXM/LmNsYXNzKSB7XG4gICAgY3NzY2xhc3MgPSBhY3Rvci5wcm9wZXJ0aWVzLmNsYXNzO1xuICB9IGVsc2Uge1xuICAgIHJlY3QuZmlsbCA9IFwiI2VhZWFlYVwiO1xuICB9XG4gIGlmIChpc0Zvb3Rlcikge1xuICAgIGNzc2NsYXNzICs9IGAgJHtCT1RUT01fQUNUT1JfQ0xBU1N9YDtcbiAgfSBlbHNlIHtcbiAgICBjc3NjbGFzcyArPSBgICR7VE9QX0FDVE9SX0NMQVNTfWA7XG4gIH1cbiAgcmVjdC54ID0gYWN0b3IueDtcbiAgcmVjdC55ID0gYWN0b3JZO1xuICByZWN0LndpZHRoID0gYWN0b3Iud2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gYWN0b3IuaGVpZ2h0O1xuICByZWN0LmNsYXNzID0gY3NzY2xhc3M7XG4gIHJlY3QucnggPSAzO1xuICByZWN0LnJ5ID0gMztcbiAgcmVjdC5uYW1lID0gYWN0b3IubmFtZTtcbiAgY29uc3QgcmVjdEVsZW0gPSBkcmF3UmVjdDIoZywgcmVjdCk7XG4gIGFjdG9yLnJlY3REYXRhID0gcmVjdDtcbiAgaWYgKGFjdG9yLnByb3BlcnRpZXM/Lmljb24pIHtcbiAgICBjb25zdCBpY29uU3JjID0gYWN0b3IucHJvcGVydGllcy5pY29uLnRyaW0oKTtcbiAgICBpZiAoaWNvblNyYy5jaGFyQXQoMCkgPT09IFwiQFwiKSB7XG4gICAgICBkcmF3RW1iZWRkZWRJbWFnZShnLCByZWN0LnggKyByZWN0LndpZHRoIC0gMjAsIHJlY3QueSArIDEwLCBpY29uU3JjLnN1YnN0cigxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXdJbWFnZShnLCByZWN0LnggKyByZWN0LndpZHRoIC0gMjAsIHJlY3QueSArIDEwLCBpY29uU3JjKTtcbiAgICB9XG4gIH1cbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMiwgaGFzS2F0ZXgoYWN0b3IuZGVzY3JpcHRpb24pKShcbiAgICBhY3Rvci5kZXNjcmlwdGlvbixcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBgYWN0b3IgJHtBQ1RPUl9CT1hfQ0xBU1N9YCB9LFxuICAgIGNvbmYyXG4gICk7XG4gIGxldCBoZWlnaHQgPSBhY3Rvci5oZWlnaHQ7XG4gIGlmIChyZWN0RWxlbS5ub2RlKSB7XG4gICAgY29uc3QgYm91bmRzMiA9IHJlY3RFbGVtLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgYWN0b3IuaGVpZ2h0ID0gYm91bmRzMi5oZWlnaHQ7XG4gICAgaGVpZ2h0ID0gYm91bmRzMi5oZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIGhlaWdodDtcbn0sIFwiZHJhd0FjdG9yVHlwZVBhcnRpY2lwYW50XCIpO1xudmFyIGRyYXdBY3RvclR5cGVBY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBjb25zdCBhY3RvclkgPSBpc0Zvb3RlciA/IGFjdG9yLnN0b3B5IDogYWN0b3Iuc3RhcnR5O1xuICBjb25zdCBjZW50ZXIgPSBhY3Rvci54ICsgYWN0b3Iud2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJZID0gYWN0b3JZICsgODA7XG4gIGNvbnN0IGxpbmUgPSBlbGVtLmFwcGVuZChcImdcIikubG93ZXIoKTtcbiAgaWYgKCFpc0Zvb3Rlcikge1xuICAgIGFjdG9yQ250Kys7XG4gICAgbGluZS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGNlbnRlclkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCAyZTMpLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yLWxpbmUgMjAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzk5OVwiKS5hdHRyKFwibmFtZVwiLCBhY3Rvci5uYW1lKTtcbiAgICBhY3Rvci5hY3RvckNudCA9IGFjdG9yQ250O1xuICB9XG4gIGNvbnN0IGFjdEVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGxldCBjc3NDbGFzcyA9IEFDVE9SX01BTl9GSUdVUkVfQ0xBU1M7XG4gIGlmIChpc0Zvb3Rlcikge1xuICAgIGNzc0NsYXNzICs9IGAgJHtCT1RUT01fQUNUT1JfQ0xBU1N9YDtcbiAgfSBlbHNlIHtcbiAgICBjc3NDbGFzcyArPSBgICR7VE9QX0FDVE9SX0NMQVNTfWA7XG4gIH1cbiAgYWN0RWxlbS5hdHRyKFwiY2xhc3NcIiwgY3NzQ2xhc3MpO1xuICBhY3RFbGVtLmF0dHIoXCJuYW1lXCIsIGFjdG9yLm5hbWUpO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gYWN0b3IueDtcbiAgcmVjdC55ID0gYWN0b3JZO1xuICByZWN0LmZpbGwgPSBcIiNlYWVhZWFcIjtcbiAgcmVjdC53aWR0aCA9IGFjdG9yLndpZHRoO1xuICByZWN0LmhlaWdodCA9IGFjdG9yLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwiYWN0b3JcIjtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcImlkXCIsIFwiYWN0b3ItbWFuLXRvcnNvXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGFjdG9yWSArIDI1KS5hdHRyKFwieDJcIiwgY2VudGVyKS5hdHRyKFwieTJcIiwgYWN0b3JZICsgNDUpO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcImlkXCIsIFwiYWN0b3ItbWFuLWFybXNcIiArIGFjdG9yQ250KS5hdHRyKFwieDFcIiwgY2VudGVyIC0gQUNUT1JfVFlQRV9XSURUSCAvIDIpLmF0dHIoXCJ5MVwiLCBhY3RvclkgKyAzMykuYXR0cihcIngyXCIsIGNlbnRlciArIEFDVE9SX1RZUEVfV0lEVEggLyAyKS5hdHRyKFwieTJcIiwgYWN0b3JZICsgMzMpO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIGNlbnRlciAtIEFDVE9SX1RZUEVfV0lEVEggLyAyKS5hdHRyKFwieTFcIiwgYWN0b3JZICsgNjApLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCBhY3RvclkgKyA0NSk7XG4gIGFjdEVsZW0uYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgY2VudGVyKS5hdHRyKFwieTFcIiwgYWN0b3JZICsgNDUpLmF0dHIoXCJ4MlwiLCBjZW50ZXIgKyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiAtIDIpLmF0dHIoXCJ5MlwiLCBhY3RvclkgKyA2MCk7XG4gIGNvbnN0IGNpcmNsZSA9IGFjdEVsZW0uYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGUuYXR0cihcImN4XCIsIGFjdG9yLnggKyBhY3Rvci53aWR0aCAvIDIpO1xuICBjaXJjbGUuYXR0cihcImN5XCIsIGFjdG9yWSArIDEwKTtcbiAgY2lyY2xlLmF0dHIoXCJyXCIsIDE1KTtcbiAgY2lyY2xlLmF0dHIoXCJ3aWR0aFwiLCBhY3Rvci53aWR0aCk7XG4gIGNpcmNsZS5hdHRyKFwiaGVpZ2h0XCIsIGFjdG9yLmhlaWdodCk7XG4gIGNvbnN0IGJvdW5kczIgPSBhY3RFbGVtLm5vZGUoKS5nZXRCQm94KCk7XG4gIGFjdG9yLmhlaWdodCA9IGJvdW5kczIuaGVpZ2h0O1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyLCBoYXNLYXRleChhY3Rvci5kZXNjcmlwdGlvbikpKFxuICAgIGFjdG9yLmRlc2NyaXB0aW9uLFxuICAgIGFjdEVsZW0sXG4gICAgcmVjdC54LFxuICAgIHJlY3QueSArIDM1LFxuICAgIHJlY3Qud2lkdGgsXG4gICAgcmVjdC5oZWlnaHQsXG4gICAgeyBjbGFzczogYGFjdG9yICR7QUNUT1JfTUFOX0ZJR1VSRV9DTEFTU31gIH0sXG4gICAgY29uZjJcbiAgKTtcbiAgcmV0dXJuIGFjdG9yLmhlaWdodDtcbn0sIFwiZHJhd0FjdG9yVHlwZUFjdG9yXCIpO1xudmFyIGRyYXdBY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBzd2l0Y2ggKGFjdG9yLnR5cGUpIHtcbiAgICBjYXNlIFwiYWN0b3JcIjpcbiAgICAgIHJldHVybiBhd2FpdCBkcmF3QWN0b3JUeXBlQWN0b3IoZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcik7XG4gICAgY2FzZSBcInBhcnRpY2lwYW50XCI6XG4gICAgICByZXR1cm4gYXdhaXQgZHJhd0FjdG9yVHlwZVBhcnRpY2lwYW50KGVsZW0sIGFjdG9yLCBjb25mMiwgaXNGb290ZXIpO1xuICB9XG59LCBcImRyYXdBY3RvclwiKTtcbnZhciBkcmF3Qm94ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBib3gsIGNvbmYyKSB7XG4gIGNvbnN0IGJveHBsdXNUZXh0R3JvdXAgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IGcgPSBib3hwbHVzVGV4dEdyb3VwO1xuICBkcmF3QmFja2dyb3VuZFJlY3QyKGcsIGJveCk7XG4gIGlmIChib3gubmFtZSkge1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYm94Lm5hbWUsXG4gICAgICBnLFxuICAgICAgYm94LngsXG4gICAgICBib3gueSArIChib3gudGV4dE1heEhlaWdodCB8fCAwKSAvIDIsXG4gICAgICBib3gud2lkdGgsXG4gICAgICAwLFxuICAgICAgeyBjbGFzczogXCJ0ZXh0XCIgfSxcbiAgICAgIGNvbmYyXG4gICAgKTtcbiAgfVxuICBnLmxvd2VyKCk7XG59LCBcImRyYXdCb3hcIik7XG52YXIgYW5jaG9yRWxlbWVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSkge1xuICByZXR1cm4gZWxlbS5hcHBlbmQoXCJnXCIpO1xufSwgXCJhbmNob3JFbGVtZW50XCIpO1xudmFyIGRyYXdBY3RpdmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBib3VuZHMyLCB2ZXJ0aWNhbFBvcywgY29uZjIsIGFjdG9yQWN0aXZhdGlvbnMyKSB7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICBjb25zdCBnID0gYm91bmRzMi5hbmNob3JlZDtcbiAgcmVjdC54ID0gYm91bmRzMi5zdGFydHg7XG4gIHJlY3QueSA9IGJvdW5kczIuc3RhcnR5O1xuICByZWN0LmNsYXNzID0gXCJhY3RpdmF0aW9uXCIgKyBhY3RvckFjdGl2YXRpb25zMiAlIDM7XG4gIHJlY3Qud2lkdGggPSBib3VuZHMyLnN0b3B4IC0gYm91bmRzMi5zdGFydHg7XG4gIHJlY3QuaGVpZ2h0ID0gdmVydGljYWxQb3MgLSBib3VuZHMyLnN0YXJ0eTtcbiAgZHJhd1JlY3QyKGcsIHJlY3QpO1xufSwgXCJkcmF3QWN0aXZhdGlvblwiKTtcbnZhciBkcmF3TG9vcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZWxlbSwgbG9vcE1vZGVsLCBsYWJlbFRleHQsIGNvbmYyKSB7XG4gIGNvbnN0IHtcbiAgICBib3hNYXJnaW4sXG4gICAgYm94VGV4dE1hcmdpbixcbiAgICBsYWJlbEJveEhlaWdodCxcbiAgICBsYWJlbEJveFdpZHRoLFxuICAgIG1lc3NhZ2VGb250RmFtaWx5OiBmb250RmFtaWx5LFxuICAgIG1lc3NhZ2VGb250U2l6ZTogZm9udFNpemUsXG4gICAgbWVzc2FnZUZvbnRXZWlnaHQ6IGZvbnRXZWlnaHRcbiAgfSA9IGNvbmYyO1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCBkcmF3TG9vcExpbmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICByZXR1cm4gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBzdGFydHgpLmF0dHIoXCJ5MVwiLCBzdGFydHkpLmF0dHIoXCJ4MlwiLCBzdG9weCkuYXR0cihcInkyXCIsIHN0b3B5KS5hdHRyKFwiY2xhc3NcIiwgXCJsb29wTGluZVwiKTtcbiAgfSwgXCJkcmF3TG9vcExpbmVcIik7XG4gIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RhcnR4LCBsb29wTW9kZWwuc3RhcnR5LCBsb29wTW9kZWwuc3RvcHgsIGxvb3BNb2RlbC5zdGFydHkpO1xuICBkcmF3TG9vcExpbmUobG9vcE1vZGVsLnN0b3B4LCBsb29wTW9kZWwuc3RhcnR5LCBsb29wTW9kZWwuc3RvcHgsIGxvb3BNb2RlbC5zdG9weSk7XG4gIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RhcnR4LCBsb29wTW9kZWwuc3RvcHksIGxvb3BNb2RlbC5zdG9weCwgbG9vcE1vZGVsLnN0b3B5KTtcbiAgZHJhd0xvb3BMaW5lKGxvb3BNb2RlbC5zdGFydHgsIGxvb3BNb2RlbC5zdGFydHksIGxvb3BNb2RlbC5zdGFydHgsIGxvb3BNb2RlbC5zdG9weSk7XG4gIGlmIChsb29wTW9kZWwuc2VjdGlvbnMgIT09IHZvaWQgMCkge1xuICAgIGxvb3BNb2RlbC5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RhcnR4LCBpdGVtLnksIGxvb3BNb2RlbC5zdG9weCwgaXRlbS55KS5zdHlsZShcbiAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCIsXG4gICAgICAgIFwiMywgM1wiXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGxldCB0eHQgPSBnZXRUZXh0T2JqKCk7XG4gIHR4dC50ZXh0ID0gbGFiZWxUZXh0O1xuICB0eHQueCA9IGxvb3BNb2RlbC5zdGFydHg7XG4gIHR4dC55ID0gbG9vcE1vZGVsLnN0YXJ0eTtcbiAgdHh0LmZvbnRGYW1pbHkgPSBmb250RmFtaWx5O1xuICB0eHQuZm9udFNpemUgPSBmb250U2l6ZTtcbiAgdHh0LmZvbnRXZWlnaHQgPSBmb250V2VpZ2h0O1xuICB0eHQuYW5jaG9yID0gXCJtaWRkbGVcIjtcbiAgdHh0LnZhbGlnbiA9IFwibWlkZGxlXCI7XG4gIHR4dC50c3BhbiA9IGZhbHNlO1xuICB0eHQud2lkdGggPSBsYWJlbEJveFdpZHRoIHx8IDUwO1xuICB0eHQuaGVpZ2h0ID0gbGFiZWxCb3hIZWlnaHQgfHwgMjA7XG4gIHR4dC50ZXh0TWFyZ2luID0gYm94VGV4dE1hcmdpbjtcbiAgdHh0LmNsYXNzID0gXCJsYWJlbFRleHRcIjtcbiAgZHJhd0xhYmVsKGcsIHR4dCk7XG4gIHR4dCA9IGdldFRleHRPYmoyKCk7XG4gIHR4dC50ZXh0ID0gbG9vcE1vZGVsLnRpdGxlO1xuICB0eHQueCA9IGxvb3BNb2RlbC5zdGFydHggKyBsYWJlbEJveFdpZHRoIC8gMiArIChsb29wTW9kZWwuc3RvcHggLSBsb29wTW9kZWwuc3RhcnR4KSAvIDI7XG4gIHR4dC55ID0gbG9vcE1vZGVsLnN0YXJ0eSArIGJveE1hcmdpbiArIGJveFRleHRNYXJnaW47XG4gIHR4dC5hbmNob3IgPSBcIm1pZGRsZVwiO1xuICB0eHQudmFsaWduID0gXCJtaWRkbGVcIjtcbiAgdHh0LnRleHRNYXJnaW4gPSBib3hUZXh0TWFyZ2luO1xuICB0eHQuY2xhc3MgPSBcImxvb3BUZXh0XCI7XG4gIHR4dC5mb250RmFtaWx5ID0gZm9udEZhbWlseTtcbiAgdHh0LmZvbnRTaXplID0gZm9udFNpemU7XG4gIHR4dC5mb250V2VpZ2h0ID0gZm9udFdlaWdodDtcbiAgdHh0LndyYXAgPSB0cnVlO1xuICBsZXQgdGV4dEVsZW0gPSBoYXNLYXRleCh0eHQudGV4dCkgPyBhd2FpdCBkcmF3S2F0ZXgoZywgdHh0LCBsb29wTW9kZWwpIDogZHJhd1RleHQoZywgdHh0KTtcbiAgaWYgKGxvb3BNb2RlbC5zZWN0aW9uVGl0bGVzICE9PSB2b2lkIDApIHtcbiAgICBmb3IgKGNvbnN0IFtpZHgsIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKGxvb3BNb2RlbC5zZWN0aW9uVGl0bGVzKSkge1xuICAgICAgaWYgKGl0ZW0ubWVzc2FnZSkge1xuICAgICAgICB0eHQudGV4dCA9IGl0ZW0ubWVzc2FnZTtcbiAgICAgICAgdHh0LnggPSBsb29wTW9kZWwuc3RhcnR4ICsgKGxvb3BNb2RlbC5zdG9weCAtIGxvb3BNb2RlbC5zdGFydHgpIC8gMjtcbiAgICAgICAgdHh0LnkgPSBsb29wTW9kZWwuc2VjdGlvbnNbaWR4XS55ICsgYm94TWFyZ2luICsgYm94VGV4dE1hcmdpbjtcbiAgICAgICAgdHh0LmNsYXNzID0gXCJsb29wVGV4dFwiO1xuICAgICAgICB0eHQuYW5jaG9yID0gXCJtaWRkbGVcIjtcbiAgICAgICAgdHh0LnZhbGlnbiA9IFwibWlkZGxlXCI7XG4gICAgICAgIHR4dC50c3BhbiA9IGZhbHNlO1xuICAgICAgICB0eHQuZm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICAgIHR4dC5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICB0eHQuZm9udFdlaWdodCA9IGZvbnRXZWlnaHQ7XG4gICAgICAgIHR4dC53cmFwID0gbG9vcE1vZGVsLndyYXA7XG4gICAgICAgIGlmIChoYXNLYXRleCh0eHQudGV4dCkpIHtcbiAgICAgICAgICBsb29wTW9kZWwuc3RhcnR5ID0gbG9vcE1vZGVsLnNlY3Rpb25zW2lkeF0ueTtcbiAgICAgICAgICBhd2FpdCBkcmF3S2F0ZXgoZywgdHh0LCBsb29wTW9kZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRyYXdUZXh0KGcsIHR4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlY3Rpb25IZWlnaHQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIHRleHRFbGVtLm1hcCgodGUpID0+ICh0ZS5fZ3JvdXBzIHx8IHRlKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3VycilcbiAgICAgICAgKTtcbiAgICAgICAgbG9vcE1vZGVsLnNlY3Rpb25zW2lkeF0uaGVpZ2h0ICs9IHNlY3Rpb25IZWlnaHQgLSAoYm94TWFyZ2luICsgYm94VGV4dE1hcmdpbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvb3BNb2RlbC5oZWlnaHQgPSBNYXRoLnJvdW5kKGxvb3BNb2RlbC5zdG9weSAtIGxvb3BNb2RlbC5zdGFydHkpO1xuICByZXR1cm4gZztcbn0sIFwiZHJhd0xvb3BcIik7XG52YXIgZHJhd0JhY2tncm91bmRSZWN0MiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYm91bmRzMikge1xuICBkcmF3QmFja2dyb3VuZFJlY3QoZWxlbSwgYm91bmRzMik7XG59LCBcImRyYXdCYWNrZ3JvdW5kUmVjdFwiKTtcbnZhciBpbnNlcnREYXRhYmFzZUljb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJkYXRhYmFzZVwiKS5hdHRyKFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKS5hdHRyKFwiY2xpcC1ydWxlXCIsIFwiZXZlbm9kZFwiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJzY2FsZSguNSlcIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXpcIlxuICApO1xufSwgXCJpbnNlcnREYXRhYmFzZUljb25cIik7XG52YXIgaW5zZXJ0Q29tcHV0ZXJJY29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiY29tcHV0ZXJcIikuYXR0cihcIndpZHRoXCIsIFwiMjRcIikuYXR0cihcImhlaWdodFwiLCBcIjI0XCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3pcIlxuICApO1xufSwgXCJpbnNlcnRDb21wdXRlckljb25cIik7XG52YXIgaW5zZXJ0Q2xvY2tJY29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiY2xvY2tcIikuYXR0cihcIndpZHRoXCIsIFwiMjRcIikuYXR0cihcImhlaWdodFwiLCBcIjI0XCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXpcIlxuICApO1xufSwgXCJpbnNlcnRDbG9ja0ljb25cIik7XG52YXIgaW5zZXJ0QXJyb3dIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYXJyb3doZWFkXCIpLmF0dHIoXCJyZWZYXCIsIDcuOSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0by1zdGFydC1yZXZlcnNlXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6XCIpO1xufSwgXCJpbnNlcnRBcnJvd0hlYWRcIik7XG52YXIgaW5zZXJ0QXJyb3dGaWxsZWRIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZmlsbGVkLWhlYWRcIikuYXR0cihcInJlZlhcIiwgMTUuNSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0QXJyb3dGaWxsZWRIZWFkXCIpO1xudmFyIGluc2VydFNlcXVlbmNlTnVtYmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwic2VxdWVuY2VudW1iZXJcIikuYXR0cihcInJlZlhcIiwgMTUpLmF0dHIoXCJyZWZZXCIsIDE1KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgNjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgMTUpLmF0dHIoXCJjeVwiLCAxNSkuYXR0cihcInJcIiwgNik7XG59LCBcImluc2VydFNlcXVlbmNlTnVtYmVyXCIpO1xudmFyIGluc2VydEFycm93Q3Jvc3NIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGNvbnN0IGRlZnMgPSBlbGVtLmFwcGVuZChcImRlZnNcIik7XG4gIGNvbnN0IG1hcmtlciA9IGRlZnMuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImNyb3NzaGVhZFwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTUpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXR0cihcInJlZlhcIiwgNCkuYXR0cihcInJlZllcIiwgNC41KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjMDAwMDAwXCIpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjAsIDBcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFwdFwiKS5hdHRyKFwiZFwiLCBcIk0gMSwyIEwgNiw3IE0gNiwyIEwgMSw3XCIpO1xufSwgXCJpbnNlcnRBcnJvd0Nyb3NzSGVhZFwiKTtcbnZhciBnZXRUZXh0T2JqMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IHZvaWQgMCxcbiAgICBhbmNob3I6IHZvaWQgMCxcbiAgICBzdHlsZTogXCIjNjY2XCIsXG4gICAgd2lkdGg6IHZvaWQgMCxcbiAgICBoZWlnaHQ6IHZvaWQgMCxcbiAgICB0ZXh0TWFyZ2luOiAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwLFxuICAgIHRzcGFuOiB0cnVlLFxuICAgIHZhbGlnbjogdm9pZCAwXG4gIH07XG59LCBcImdldFRleHRPYmpcIik7XG52YXIgZ2V0Tm90ZVJlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgZmlsbDogXCIjRURGMkFFXCIsXG4gICAgc3Ryb2tlOiBcIiM2NjZcIixcbiAgICB3aWR0aDogMTAwLFxuICAgIGFuY2hvcjogXCJzdGFydFwiLFxuICAgIGhlaWdodDogMTAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwXG4gIH07XG59LCBcImdldE5vdGVSZWN0XCIpO1xudmFyIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ5VGV4dChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyICsgNSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlUZXh0LCBcImJ5VGV4dFwiKTtcbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBhY3RvckZvbnRTaXplLCBhY3RvckZvbnRGYW1pbHksIGFjdG9yRm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgW19hY3RvckZvbnRTaXplLCBfYWN0b3JGb250U2l6ZVB4XSA9IHBhcnNlRm9udFNpemUoYWN0b3JGb250U2l6ZSk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkeSA9IGkgKiBfYWN0b3JGb250U2l6ZSAtIF9hY3RvckZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBfYWN0b3JGb250U2l6ZVB4KS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIGFjdG9yRm9udFdlaWdodCkuc3R5bGUoXCJmb250LWZhbWlseVwiLCBhY3RvckZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGJ5VHNwYW4sIFwiYnlUc3BhblwiKTtcbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgcyA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBzLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlXCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZS1jZWxsXCIpLnN0eWxlKFwidGV4dC1hbGlnblwiLCBcImNlbnRlclwiKS5zdHlsZShcInZlcnRpY2FsLWFsaWduXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5Rm8sIFwiYnlGb1wiKTtcbiAgYXN5bmMgZnVuY3Rpb24gYnlLYXRleChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgZGltID0gYXdhaXQgY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9ucyhjb250ZW50LCBnZXRDb25maWcoKSk7XG4gICAgY29uc3QgcyA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBzLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMiAtIGRpbS53aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyIC0gZGltLmhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBkaW0ud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgZGltLmhlaWdodCk7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5zdHlsZShcInRleHQtYWxpZ25cIiwgXCJjZW50ZXJcIikuc3R5bGUoXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcIm1pZGRsZVwiKS5odG1sKGF3YWl0IHJlbmRlckthdGV4KGNvbnRlbnQsIGdldENvbmZpZygpKSk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5S2F0ZXgsIFwiYnlLYXRleFwiKTtcbiAgZnVuY3Rpb24gX3NldFRleHRBdHRycyh0b1RleHQsIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgIGlmIChmcm9tVGV4dEF0dHJzRGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHRvVGV4dC5hdHRyKGtleSwgZnJvbVRleHRBdHRyc0RpY3Rba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9fbmFtZShfc2V0VGV4dEF0dHJzLCBcIl9zZXRUZXh0QXR0cnNcIik7XG4gIHJldHVybiBmdW5jdGlvbihjb25mMiwgaGFzS2F0ZXgyID0gZmFsc2UpIHtcbiAgICBpZiAoaGFzS2F0ZXgyKSB7XG4gICAgICByZXR1cm4gYnlLYXRleDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwiZm9cIiA/IGJ5Rm8gOiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbnZhciBfZHJhd01lbnVJdGVtVGV4dENhbmRpZGF0ZUZ1bmMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ5VGV4dChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlUZXh0LCBcImJ5VGV4dFwiKTtcbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBhY3RvckZvbnRTaXplLCBhY3RvckZvbnRGYW1pbHksIGFjdG9yRm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkeSA9IGkgKiBhY3RvckZvbnRTaXplIC0gYWN0b3JGb250U2l6ZSAqIChsaW5lcy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBhY3RvckZvbnRTaXplKS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIGFjdG9yRm9udFdlaWdodCkuc3R5bGUoXCJmb250LWZhbWlseVwiLCBhY3RvckZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGJ5VHNwYW4sIFwiYnlUc3BhblwiKTtcbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgcyA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBzLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlXCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZS1jZWxsXCIpLnN0eWxlKFwidGV4dC1hbGlnblwiLCBcImNlbnRlclwiKS5zdHlsZShcInZlcnRpY2FsLWFsaWduXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5Rm8sIFwiYnlGb1wiKTtcbiAgZnVuY3Rpb24gX3NldFRleHRBdHRycyh0b1RleHQsIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgIGlmIChmcm9tVGV4dEF0dHJzRGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHRvVGV4dC5hdHRyKGtleSwgZnJvbVRleHRBdHRyc0RpY3Rba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9fbmFtZShfc2V0VGV4dEF0dHJzLCBcIl9zZXRUZXh0QXR0cnNcIik7XG4gIHJldHVybiBmdW5jdGlvbihjb25mMikge1xuICAgIHJldHVybiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcImZvXCIgPyBieUZvIDogY29uZjIudGV4dFBsYWNlbWVudCA9PT0gXCJvbGRcIiA/IGJ5VGV4dCA6IGJ5VHNwYW47XG4gIH07XG59KCk7XG52YXIgc3ZnRHJhd19kZWZhdWx0ID0ge1xuICBkcmF3UmVjdDogZHJhd1JlY3QyLFxuICBkcmF3VGV4dCxcbiAgZHJhd0xhYmVsLFxuICBkcmF3QWN0b3IsXG4gIGRyYXdCb3gsXG4gIGRyYXdQb3B1cCxcbiAgYW5jaG9yRWxlbWVudCxcbiAgZHJhd0FjdGl2YXRpb24sXG4gIGRyYXdMb29wLFxuICBkcmF3QmFja2dyb3VuZFJlY3Q6IGRyYXdCYWNrZ3JvdW5kUmVjdDIsXG4gIGluc2VydEFycm93SGVhZCxcbiAgaW5zZXJ0QXJyb3dGaWxsZWRIZWFkLFxuICBpbnNlcnRTZXF1ZW5jZU51bWJlcixcbiAgaW5zZXJ0QXJyb3dDcm9zc0hlYWQsXG4gIGluc2VydERhdGFiYXNlSWNvbixcbiAgaW5zZXJ0Q29tcHV0ZXJJY29uLFxuICBpbnNlcnRDbG9ja0ljb24sXG4gIGdldFRleHRPYmo6IGdldFRleHRPYmoyLFxuICBnZXROb3RlUmVjdDogZ2V0Tm90ZVJlY3QyLFxuICBmaXhMaWZlTGluZUhlaWdodHMsXG4gIHNhbml0aXplVXJsXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2VxdWVuY2Uvc2VxdWVuY2VSZW5kZXJlci50c1xudmFyIGNvbmYgPSB7fTtcbnZhciBib3VuZHMgPSB7XG4gIGRhdGE6IHtcbiAgICBzdGFydHg6IHZvaWQgMCxcbiAgICBzdG9weDogdm9pZCAwLFxuICAgIHN0YXJ0eTogdm9pZCAwLFxuICAgIHN0b3B5OiB2b2lkIDBcbiAgfSxcbiAgdmVydGljYWxQb3M6IDAsXG4gIHNlcXVlbmNlSXRlbXM6IFtdLFxuICBhY3RpdmF0aW9uczogW10sXG4gIG1vZGVsczoge1xuICAgIGdldEhlaWdodDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5hY3RvcnMubGVuZ3RoID09PSAwID8gWzBdIDogdGhpcy5hY3RvcnMubWFwKChhY3RvcikgPT4gYWN0b3IuaGVpZ2h0IHx8IDApXG4gICAgICApICsgKHRoaXMubG9vcHMubGVuZ3RoID09PSAwID8gMCA6IHRoaXMubG9vcHMubWFwKChpdCkgPT4gaXQuaGVpZ2h0IHx8IDApLnJlZHVjZSgoYWNjLCBoKSA9PiBhY2MgKyBoKSkgKyAodGhpcy5tZXNzYWdlcy5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5tZXNzYWdlcy5tYXAoKGl0KSA9PiBpdC5oZWlnaHQgfHwgMCkucmVkdWNlKChhY2MsIGgpID0+IGFjYyArIGgpKSArICh0aGlzLm5vdGVzLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLm5vdGVzLm1hcCgoaXQpID0+IGl0LmhlaWdodCB8fCAwKS5yZWR1Y2UoKGFjYywgaCkgPT4gYWNjICsgaCkpO1xuICAgIH0sIFwiZ2V0SGVpZ2h0XCIpLFxuICAgIGNsZWFyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgIHRoaXMuYm94ZXMgPSBbXTtcbiAgICAgIHRoaXMubG9vcHMgPSBbXTtcbiAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgICAgIHRoaXMubm90ZXMgPSBbXTtcbiAgICB9LCBcImNsZWFyXCIpLFxuICAgIGFkZEJveDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihib3hNb2RlbCkge1xuICAgICAgdGhpcy5ib3hlcy5wdXNoKGJveE1vZGVsKTtcbiAgICB9LCBcImFkZEJveFwiKSxcbiAgICBhZGRBY3RvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3Rvck1vZGVsKSB7XG4gICAgICB0aGlzLmFjdG9ycy5wdXNoKGFjdG9yTW9kZWwpO1xuICAgIH0sIFwiYWRkQWN0b3JcIiksXG4gICAgYWRkTG9vcDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihsb29wTW9kZWwpIHtcbiAgICAgIHRoaXMubG9vcHMucHVzaChsb29wTW9kZWwpO1xuICAgIH0sIFwiYWRkTG9vcFwiKSxcbiAgICBhZGRNZXNzYWdlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1zZ01vZGVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnTW9kZWwpO1xuICAgIH0sIFwiYWRkTWVzc2FnZVwiKSxcbiAgICBhZGROb3RlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG5vdGVNb2RlbCkge1xuICAgICAgdGhpcy5ub3Rlcy5wdXNoKG5vdGVNb2RlbCk7XG4gICAgfSwgXCJhZGROb3RlXCIpLFxuICAgIGxhc3RBY3RvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdG9yc1t0aGlzLmFjdG9ycy5sZW5ndGggLSAxXTtcbiAgICB9LCBcImxhc3RBY3RvclwiKSxcbiAgICBsYXN0TG9vcDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoIC0gMV07XG4gICAgfSwgXCJsYXN0TG9vcFwiKSxcbiAgICBsYXN0TWVzc2FnZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgfSwgXCJsYXN0TWVzc2FnZVwiKSxcbiAgICBsYXN0Tm90ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoIC0gMV07XG4gICAgfSwgXCJsYXN0Tm90ZVwiKSxcbiAgICBhY3RvcnM6IFtdLFxuICAgIGJveGVzOiBbXSxcbiAgICBsb29wczogW10sXG4gICAgbWVzc2FnZXM6IFtdLFxuICAgIG5vdGVzOiBbXVxuICB9LFxuICBpbml0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcyA9IFtdO1xuICAgIHRoaXMuYWN0aXZhdGlvbnMgPSBbXTtcbiAgICB0aGlzLm1vZGVscy5jbGVhcigpO1xuICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgIHN0YXJ0eDogdm9pZCAwLFxuICAgICAgc3RvcHg6IHZvaWQgMCxcbiAgICAgIHN0YXJ0eTogdm9pZCAwLFxuICAgICAgc3RvcHk6IHZvaWQgMFxuICAgIH07XG4gICAgdGhpcy52ZXJ0aWNhbFBvcyA9IDA7XG4gICAgc2V0Q29uZihnZXRDb25maWcyKCkpO1xuICB9LCBcImluaXRcIiksXG4gIHVwZGF0ZVZhbDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihvYmosIGtleSwgdmFsLCBmdW4pIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gZnVuKHZhbCwgb2JqW2tleV0pO1xuICAgIH1cbiAgfSwgXCJ1cGRhdGVWYWxcIiksXG4gIHVwZGF0ZUJvdW5kczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdGFydHgsIHN0YXJ0eSwgc3RvcHgsIHN0b3B5KSB7XG4gICAgY29uc3QgX3NlbGYgPSB0aGlzO1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZUZuKHR5cGUpIHtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHVwZGF0ZUl0ZW1Cb3VuZHMoaXRlbSkge1xuICAgICAgICBjbnQrKztcbiAgICAgICAgY29uc3QgbiA9IF9zZWxmLnNlcXVlbmNlSXRlbXMubGVuZ3RoIC0gY250ICsgMTtcbiAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR5XCIsIHN0YXJ0eSAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weVwiLCBzdG9weSArIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5tYXgpO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHhcIiwgc3RvcHggKyBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgaWYgKCEodHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICAgIF9zZWxmLnVwZGF0ZVZhbChpdGVtLCBcInN0b3B4XCIsIHN0b3B4ICsgbiAqIGNvbmYuYm94TWFyZ2luLCBNYXRoLm1heCk7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eVwiLCBzdGFydHkgLSBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgc3RvcHkgKyBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ1cGRhdGVJdGVtQm91bmRzXCIpO1xuICAgIH1cbiAgICBfX25hbWUodXBkYXRlRm4sIFwidXBkYXRlRm5cIik7XG4gICAgdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2godXBkYXRlRm4oKSk7XG4gICAgdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKHVwZGF0ZUZuKFwiYWN0aXZhdGlvblwiKSk7XG4gIH0sIFwidXBkYXRlQm91bmRzXCIpLFxuICBpbnNlcnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3RhcnR4LCBzdGFydHksIHN0b3B4LCBzdG9weSkge1xuICAgIGNvbnN0IF9zdGFydHggPSBjb21tb25fZGVmYXVsdC5nZXRNaW4oc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0b3B4ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KHN0YXJ0eCwgc3RvcHgpO1xuICAgIGNvbnN0IF9zdGFydHkgPSBjb21tb25fZGVmYXVsdC5nZXRNaW4oc3RhcnR5LCBzdG9weSk7XG4gICAgY29uc3QgX3N0b3B5ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KHN0YXJ0eSwgc3RvcHkpO1xuICAgIHRoaXMudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBfc3RhcnR4LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weVwiLCBfc3RvcHksIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZUJvdW5kcyhfc3RhcnR4LCBfc3RhcnR5LCBfc3RvcHgsIF9zdG9weSk7XG4gIH0sIFwiaW5zZXJ0XCIpLFxuICBuZXdBY3RpdmF0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1lc3NhZ2UsIGRpYWdyYW0yLCBhY3RvcnMpIHtcbiAgICBjb25zdCBhY3RvclJlY3QgPSBhY3RvcnMuZ2V0KG1lc3NhZ2UuZnJvbSk7XG4gICAgY29uc3Qgc3RhY2tlZFNpemUgPSBhY3RvckFjdGl2YXRpb25zKG1lc3NhZ2UuZnJvbSkubGVuZ3RoIHx8IDA7XG4gICAgY29uc3QgeCA9IGFjdG9yUmVjdC54ICsgYWN0b3JSZWN0LndpZHRoIC8gMiArIChzdGFja2VkU2l6ZSAtIDEpICogY29uZi5hY3RpdmF0aW9uV2lkdGggLyAyO1xuICAgIHRoaXMuYWN0aXZhdGlvbnMucHVzaCh7XG4gICAgICBzdGFydHg6IHgsXG4gICAgICBzdGFydHk6IHRoaXMudmVydGljYWxQb3MgKyAyLFxuICAgICAgc3RvcHg6IHggKyBjb25mLmFjdGl2YXRpb25XaWR0aCxcbiAgICAgIHN0b3B5OiB2b2lkIDAsXG4gICAgICBhY3RvcjogbWVzc2FnZS5mcm9tLFxuICAgICAgYW5jaG9yZWQ6IHN2Z0RyYXdfZGVmYXVsdC5hbmNob3JFbGVtZW50KGRpYWdyYW0yKVxuICAgIH0pO1xuICB9LCBcIm5ld0FjdGl2YXRpb25cIiksXG4gIGVuZEFjdGl2YXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obWVzc2FnZSkge1xuICAgIGNvbnN0IGxhc3RBY3RvckFjdGl2YXRpb25JZHggPSB0aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihhY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gYWN0aXZhdGlvbi5hY3RvcjtcbiAgICB9KS5sYXN0SW5kZXhPZihtZXNzYWdlLmZyb20pO1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShsYXN0QWN0b3JBY3RpdmF0aW9uSWR4LCAxKVswXTtcbiAgfSwgXCJlbmRBY3RpdmF0aW9uXCIpLFxuICBjcmVhdGVMb29wOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRpdGxlID0geyBtZXNzYWdlOiB2b2lkIDAsIHdyYXA6IGZhbHNlLCB3aWR0aDogdm9pZCAwIH0sIGZpbGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdGFydHk6IHRoaXMudmVydGljYWxQb3MsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RvcHk6IHZvaWQgMCxcbiAgICAgIHRpdGxlOiB0aXRsZS5tZXNzYWdlLFxuICAgICAgd3JhcDogdGl0bGUud3JhcCxcbiAgICAgIHdpZHRoOiB0aXRsZS53aWR0aCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGZpbGxcbiAgICB9O1xuICB9LCBcImNyZWF0ZUxvb3BcIiksXG4gIG5ld0xvb3A6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGl0bGUgPSB7IG1lc3NhZ2U6IHZvaWQgMCwgd3JhcDogZmFsc2UsIHdpZHRoOiB2b2lkIDAgfSwgZmlsbCkge1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0aXRsZSwgZmlsbCkpO1xuICB9LCBcIm5ld0xvb3BcIiksXG4gIGVuZExvb3A6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtcbiAgfSwgXCJlbmRMb29wXCIpLFxuICBpc0xvb3BPdmVybGFwOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoID8gdGhpcy5zZXF1ZW5jZUl0ZW1zW3RoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGggLSAxXS5vdmVybGFwIDogZmFsc2U7XG4gIH0sIFwiaXNMb29wT3ZlcmxhcFwiKSxcbiAgYWRkU2VjdGlvblRvTG9vcDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgY29uc3QgbG9vcCA9IHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtcbiAgICBsb29wLnNlY3Rpb25zID0gbG9vcC5zZWN0aW9ucyB8fCBbXTtcbiAgICBsb29wLnNlY3Rpb25UaXRsZXMgPSBsb29wLnNlY3Rpb25UaXRsZXMgfHwgW107XG4gICAgbG9vcC5zZWN0aW9ucy5wdXNoKHsgeTogYm91bmRzLmdldFZlcnRpY2FsUG9zKCksIGhlaWdodDogMCB9KTtcbiAgICBsb29wLnNlY3Rpb25UaXRsZXMucHVzaChtZXNzYWdlKTtcbiAgICB0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChsb29wKTtcbiAgfSwgXCJhZGRTZWN0aW9uVG9Mb29wXCIpLFxuICBzYXZlVmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNMb29wT3ZlcmxhcCgpKSB7XG4gICAgICB0aGlzLnNhdmVkVmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zO1xuICAgIH1cbiAgfSwgXCJzYXZlVmVydGljYWxQb3NcIiksXG4gIHJlc2V0VmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNMb29wT3ZlcmxhcCgpKSB7XG4gICAgICB0aGlzLnZlcnRpY2FsUG9zID0gdGhpcy5zYXZlZFZlcnRpY2FsUG9zO1xuICAgIH1cbiAgfSwgXCJyZXNldFZlcnRpY2FsUG9zXCIpLFxuICBidW1wVmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYnVtcCkge1xuICAgIHRoaXMudmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zICsgYnVtcDtcbiAgICB0aGlzLmRhdGEuc3RvcHkgPSBjb21tb25fZGVmYXVsdC5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LCB0aGlzLnZlcnRpY2FsUG9zKTtcbiAgfSwgXCJidW1wVmVydGljYWxQb3NcIiksXG4gIGdldFZlcnRpY2FsUG9zOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsUG9zO1xuICB9LCBcImdldFZlcnRpY2FsUG9zXCIpLFxuICBnZXRCb3VuZHM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgYm91bmRzOiB0aGlzLmRhdGEsIG1vZGVsczogdGhpcy5tb2RlbHMgfTtcbiAgfSwgXCJnZXRCb3VuZHNcIilcbn07XG52YXIgZHJhd05vdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGVsZW0sIG5vdGVNb2RlbCkge1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGNvbmYuYm94TWFyZ2luKTtcbiAgbm90ZU1vZGVsLmhlaWdodCA9IGNvbmYuYm94TWFyZ2luO1xuICBub3RlTW9kZWwuc3RhcnR5ID0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCk7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICByZWN0LnggPSBub3RlTW9kZWwuc3RhcnR4O1xuICByZWN0LnkgPSBub3RlTW9kZWwuc3RhcnR5O1xuICByZWN0LndpZHRoID0gbm90ZU1vZGVsLndpZHRoIHx8IGNvbmYud2lkdGg7XG4gIHJlY3QuY2xhc3MgPSBcIm5vdGVcIjtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgcmVjdEVsZW0gPSBzdmdEcmF3X2RlZmF1bHQuZHJhd1JlY3QoZywgcmVjdCk7XG4gIGNvbnN0IHRleHRPYmogPSBnZXRUZXh0T2JqKCk7XG4gIHRleHRPYmoueCA9IG5vdGVNb2RlbC5zdGFydHg7XG4gIHRleHRPYmoueSA9IG5vdGVNb2RlbC5zdGFydHk7XG4gIHRleHRPYmoud2lkdGggPSByZWN0LndpZHRoO1xuICB0ZXh0T2JqLmR5ID0gXCIxZW1cIjtcbiAgdGV4dE9iai50ZXh0ID0gbm90ZU1vZGVsLm1lc3NhZ2U7XG4gIHRleHRPYmouY2xhc3MgPSBcIm5vdGVUZXh0XCI7XG4gIHRleHRPYmouZm9udEZhbWlseSA9IGNvbmYubm90ZUZvbnRGYW1pbHk7XG4gIHRleHRPYmouZm9udFNpemUgPSBjb25mLm5vdGVGb250U2l6ZTtcbiAgdGV4dE9iai5mb250V2VpZ2h0ID0gY29uZi5ub3RlRm9udFdlaWdodDtcbiAgdGV4dE9iai5hbmNob3IgPSBjb25mLm5vdGVBbGlnbjtcbiAgdGV4dE9iai50ZXh0TWFyZ2luID0gY29uZi5ub3RlTWFyZ2luO1xuICB0ZXh0T2JqLnZhbGlnbiA9IFwiY2VudGVyXCI7XG4gIGNvbnN0IHRleHRFbGVtID0gaGFzS2F0ZXgodGV4dE9iai50ZXh0KSA/IGF3YWl0IGRyYXdLYXRleChnLCB0ZXh0T2JqKSA6IGRyYXdUZXh0KGcsIHRleHRPYmopO1xuICBjb25zdCB0ZXh0SGVpZ2h0ID0gTWF0aC5yb3VuZChcbiAgICB0ZXh0RWxlbS5tYXAoKHRlKSA9PiAodGUuX2dyb3VwcyB8fCB0ZSlbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIpXG4gICk7XG4gIHJlY3RFbGVtLmF0dHIoXCJoZWlnaHRcIiwgdGV4dEhlaWdodCArIDIgKiBjb25mLm5vdGVNYXJnaW4pO1xuICBub3RlTW9kZWwuaGVpZ2h0ICs9IHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luO1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luKTtcbiAgbm90ZU1vZGVsLnN0b3B5ID0gbm90ZU1vZGVsLnN0YXJ0eSArIHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luO1xuICBub3RlTW9kZWwuc3RvcHggPSBub3RlTW9kZWwuc3RhcnR4ICsgcmVjdC53aWR0aDtcbiAgYm91bmRzLmluc2VydChub3RlTW9kZWwuc3RhcnR4LCBub3RlTW9kZWwuc3RhcnR5LCBub3RlTW9kZWwuc3RvcHgsIG5vdGVNb2RlbC5zdG9weSk7XG4gIGJvdW5kcy5tb2RlbHMuYWRkTm90ZShub3RlTW9kZWwpO1xufSwgXCJkcmF3Tm90ZVwiKTtcbnZhciBtZXNzYWdlRm9udCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5tZXNzYWdlRm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogY25mLm1lc3NhZ2VGb250U2l6ZSxcbiAgICBmb250V2VpZ2h0OiBjbmYubWVzc2FnZUZvbnRXZWlnaHRcbiAgfTtcbn0sIFwibWVzc2FnZUZvbnRcIik7XG52YXIgbm90ZUZvbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbmYpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmYubm90ZUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5ub3RlRm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLm5vdGVGb250V2VpZ2h0XG4gIH07XG59LCBcIm5vdGVGb250XCIpO1xudmFyIGFjdG9yRm9udCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5hY3RvckZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5hY3RvckZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHQ6IGNuZi5hY3RvckZvbnRXZWlnaHRcbiAgfTtcbn0sIFwiYWN0b3JGb250XCIpO1xuYXN5bmMgZnVuY3Rpb24gYm91bmRNZXNzYWdlKF9kaWFncmFtLCBtc2dNb2RlbCkge1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKDEwKTtcbiAgY29uc3QgeyBzdGFydHgsIHN0b3B4LCBtZXNzYWdlIH0gPSBtc2dNb2RlbDtcbiAgY29uc3QgbGluZXMgPSBjb21tb25fZGVmYXVsdC5zcGxpdEJyZWFrcyhtZXNzYWdlKS5sZW5ndGg7XG4gIGNvbnN0IGlzS2F0ZXhNc2cgPSBoYXNLYXRleChtZXNzYWdlKTtcbiAgY29uc3QgdGV4dERpbXMgPSBpc0thdGV4TXNnID8gYXdhaXQgY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9ucyhtZXNzYWdlLCBnZXRDb25maWcyKCkpIDogdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtZXNzYWdlLCBtZXNzYWdlRm9udChjb25mKSk7XG4gIGlmICghaXNLYXRleE1zZykge1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0ZXh0RGltcy5oZWlnaHQgLyBsaW5lcztcbiAgICBtc2dNb2RlbC5oZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxpbmVIZWlnaHQpO1xuICB9XG4gIGxldCBsaW5lU3RhcnRZO1xuICBsZXQgdG90YWxPZmZzZXQgPSB0ZXh0RGltcy5oZWlnaHQgLSAxMDtcbiAgY29uc3QgdGV4dFdpZHRoID0gdGV4dERpbXMud2lkdGg7XG4gIGlmIChzdGFydHggPT09IHN0b3B4KSB7XG4gICAgbGluZVN0YXJ0WSA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpICsgdG90YWxPZmZzZXQ7XG4gICAgaWYgKCFjb25mLnJpZ2h0QW5nbGVzKSB7XG4gICAgICB0b3RhbE9mZnNldCArPSBjb25mLmJveE1hcmdpbjtcbiAgICAgIGxpbmVTdGFydFkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSArIHRvdGFsT2Zmc2V0O1xuICAgIH1cbiAgICB0b3RhbE9mZnNldCArPSAzMDtcbiAgICBjb25zdCBkeCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heCh0ZXh0V2lkdGggLyAyLCBjb25mLndpZHRoIC8gMik7XG4gICAgYm91bmRzLmluc2VydChcbiAgICAgIHN0YXJ0eCAtIGR4LFxuICAgICAgYm91bmRzLmdldFZlcnRpY2FsUG9zKCkgLSAxMCArIHRvdGFsT2Zmc2V0LFxuICAgICAgc3RvcHggKyBkeCxcbiAgICAgIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpICsgMzAgKyB0b3RhbE9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdG90YWxPZmZzZXQgKz0gY29uZi5ib3hNYXJnaW47XG4gICAgbGluZVN0YXJ0WSA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpICsgdG90YWxPZmZzZXQ7XG4gICAgYm91bmRzLmluc2VydChzdGFydHgsIGxpbmVTdGFydFkgLSAxMCwgc3RvcHgsIGxpbmVTdGFydFkpO1xuICB9XG4gIGJvdW5kcy5idW1wVmVydGljYWxQb3ModG90YWxPZmZzZXQpO1xuICBtc2dNb2RlbC5oZWlnaHQgKz0gdG90YWxPZmZzZXQ7XG4gIG1zZ01vZGVsLnN0b3B5ID0gbXNnTW9kZWwuc3RhcnR5ICsgbXNnTW9kZWwuaGVpZ2h0O1xuICBib3VuZHMuaW5zZXJ0KG1zZ01vZGVsLmZyb21Cb3VuZHMsIG1zZ01vZGVsLnN0YXJ0eSwgbXNnTW9kZWwudG9Cb3VuZHMsIG1zZ01vZGVsLnN0b3B5KTtcbiAgcmV0dXJuIGxpbmVTdGFydFk7XG59XG5fX25hbWUoYm91bmRNZXNzYWdlLCBcImJvdW5kTWVzc2FnZVwiKTtcbnZhciBkcmF3TWVzc2FnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZGlhZ3JhbTIsIG1zZ01vZGVsLCBsaW5lU3RhcnRZLCBkaWFnT2JqKSB7XG4gIGNvbnN0IHsgc3RhcnR4LCBzdG9weCwgc3RhcnR5LCBtZXNzYWdlLCB0eXBlLCBzZXF1ZW5jZUluZGV4LCBzZXF1ZW5jZVZpc2libGUgfSA9IG1zZ01vZGVsO1xuICBjb25zdCB0ZXh0RGltcyA9IHV0aWxzX2RlZmF1bHQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobWVzc2FnZSwgbWVzc2FnZUZvbnQoY29uZikpO1xuICBjb25zdCB0ZXh0T2JqID0gZ2V0VGV4dE9iaigpO1xuICB0ZXh0T2JqLnggPSBzdGFydHg7XG4gIHRleHRPYmoueSA9IHN0YXJ0eSArIDEwO1xuICB0ZXh0T2JqLndpZHRoID0gc3RvcHggLSBzdGFydHg7XG4gIHRleHRPYmouY2xhc3MgPSBcIm1lc3NhZ2VUZXh0XCI7XG4gIHRleHRPYmouZHkgPSBcIjFlbVwiO1xuICB0ZXh0T2JqLnRleHQgPSBtZXNzYWdlO1xuICB0ZXh0T2JqLmZvbnRGYW1pbHkgPSBjb25mLm1lc3NhZ2VGb250RmFtaWx5O1xuICB0ZXh0T2JqLmZvbnRTaXplID0gY29uZi5tZXNzYWdlRm9udFNpemU7XG4gIHRleHRPYmouZm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQ7XG4gIHRleHRPYmouYW5jaG9yID0gY29uZi5tZXNzYWdlQWxpZ247XG4gIHRleHRPYmoudmFsaWduID0gXCJjZW50ZXJcIjtcbiAgdGV4dE9iai50ZXh0TWFyZ2luID0gY29uZi53cmFwUGFkZGluZztcbiAgdGV4dE9iai50c3BhbiA9IGZhbHNlO1xuICBpZiAoaGFzS2F0ZXgodGV4dE9iai50ZXh0KSkge1xuICAgIGF3YWl0IGRyYXdLYXRleChkaWFncmFtMiwgdGV4dE9iaiwgeyBzdGFydHgsIHN0b3B4LCBzdGFydHk6IGxpbmVTdGFydFkgfSk7XG4gIH0gZWxzZSB7XG4gICAgZHJhd1RleHQoZGlhZ3JhbTIsIHRleHRPYmopO1xuICB9XG4gIGNvbnN0IHRleHRXaWR0aCA9IHRleHREaW1zLndpZHRoO1xuICBsZXQgbGluZTtcbiAgaWYgKHN0YXJ0eCA9PT0gc3RvcHgpIHtcbiAgICBpZiAoY29uZi5yaWdodEFuZ2xlcykge1xuICAgICAgbGluZSA9IGRpYWdyYW0yLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIGBNICAke3N0YXJ0eH0sJHtsaW5lU3RhcnRZfSBIICR7c3RhcnR4ICsgY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGggLyAyLCB0ZXh0V2lkdGggLyAyKX0gViAke2xpbmVTdGFydFkgKyAyNX0gSCAke3N0YXJ0eH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lID0gZGlhZ3JhbTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNIFwiICsgc3RhcnR4ICsgXCIsXCIgKyBsaW5lU3RhcnRZICsgXCIgQyBcIiArIChzdGFydHggKyA2MCkgKyBcIixcIiArIChsaW5lU3RhcnRZIC0gMTApICsgXCIgXCIgKyAoc3RhcnR4ICsgNjApICsgXCIsXCIgKyAobGluZVN0YXJ0WSArIDMwKSArIFwiIFwiICsgc3RhcnR4ICsgXCIsXCIgKyAobGluZVN0YXJ0WSArIDIwKVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGluZSA9IGRpYWdyYW0yLmFwcGVuZChcImxpbmVcIik7XG4gICAgbGluZS5hdHRyKFwieDFcIiwgc3RhcnR4KTtcbiAgICBsaW5lLmF0dHIoXCJ5MVwiLCBsaW5lU3RhcnRZKTtcbiAgICBsaW5lLmF0dHIoXCJ4MlwiLCBzdG9weCk7XG4gICAgbGluZS5hdHRyKFwieTJcIiwgbGluZVN0YXJ0WSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX09QRU4gfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRCkge1xuICAgIGxpbmUuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMywgM1wiKTtcbiAgICBsaW5lLmF0dHIoXCJjbGFzc1wiLCBcIm1lc3NhZ2VMaW5lMVwiKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lLmF0dHIoXCJjbGFzc1wiLCBcIm1lc3NhZ2VMaW5lMFwiKTtcbiAgfVxuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIGxpbmUuYXR0cihcInN0cm9rZS13aWR0aFwiLCAyKTtcbiAgbGluZS5hdHRyKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcbiAgbGluZS5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpO1xuICBpZiAodHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRCB8fCB0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRCkge1xuICAgIGxpbmUuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2hlYWQpXCIpO1xuICB9XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQgfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRCkge1xuICAgIGxpbmUuYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gIH1cbiAgaWYgKHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfUE9JTlQgfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpIHtcbiAgICBsaW5lLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjZmlsbGVkLWhlYWQpXCIpO1xuICB9XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTKSB7XG4gICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Nyb3NzaGVhZClcIik7XG4gIH1cbiAgaWYgKHNlcXVlbmNlVmlzaWJsZSB8fCBjb25mLnNob3dTZXF1ZW5jZU51bWJlcnMpIHtcbiAgICBsaW5lLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNzZXF1ZW5jZW51bWJlcilcIik7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBzdGFydHgpLmF0dHIoXCJ5XCIsIGxpbmVTdGFydFkgKyA0KS5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpLmF0dHIoXCJmb250LXNpemVcIiwgXCIxMnB4XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJzZXF1ZW5jZU51bWJlclwiKS50ZXh0KHNlcXVlbmNlSW5kZXgpO1xuICB9XG59LCBcImRyYXdNZXNzYWdlXCIpO1xudmFyIGFkZEFjdG9yUmVuZGVyaW5nRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlhZ3JhbTIsIGFjdG9ycywgY3JlYXRlZEFjdG9ycywgYWN0b3JLZXlzLCB2ZXJ0aWNhbFBvcywgbWVzc2FnZXMsIGlzRm9vdGVyKSB7XG4gIGxldCBwcmV2V2lkdGggPSAwO1xuICBsZXQgcHJldk1hcmdpbiA9IDA7XG4gIGxldCBwcmV2Qm94ID0gdm9pZCAwO1xuICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgZm9yIChjb25zdCBhY3RvcktleSBvZiBhY3RvcktleXMpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQoYWN0b3JLZXkpO1xuICAgIGNvbnN0IGJveCA9IGFjdG9yLmJveDtcbiAgICBpZiAocHJldkJveCAmJiBwcmV2Qm94ICE9IGJveCkge1xuICAgICAgaWYgKCFpc0Zvb3Rlcikge1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZEJveChwcmV2Qm94KTtcbiAgICAgIH1cbiAgICAgIHByZXZNYXJnaW4gKz0gY29uZi5ib3hNYXJnaW4gKyBwcmV2Qm94Lm1hcmdpbjtcbiAgICB9XG4gICAgaWYgKGJveCAmJiBib3ggIT0gcHJldkJveCkge1xuICAgICAgaWYgKCFpc0Zvb3Rlcikge1xuICAgICAgICBib3gueCA9IHByZXZXaWR0aCArIHByZXZNYXJnaW47XG4gICAgICAgIGJveC55ID0gdmVydGljYWxQb3M7XG4gICAgICB9XG4gICAgICBwcmV2TWFyZ2luICs9IGJveC5tYXJnaW47XG4gICAgfVxuICAgIGFjdG9yLndpZHRoID0gYWN0b3Iud2lkdGggfHwgY29uZi53aWR0aDtcbiAgICBhY3Rvci5oZWlnaHQgPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoYWN0b3IuaGVpZ2h0IHx8IGNvbmYuaGVpZ2h0LCBjb25mLmhlaWdodCk7XG4gICAgYWN0b3IubWFyZ2luID0gYWN0b3IubWFyZ2luIHx8IGNvbmYuYWN0b3JNYXJnaW47XG4gICAgbWF4SGVpZ2h0ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KG1heEhlaWdodCwgYWN0b3IuaGVpZ2h0KTtcbiAgICBpZiAoY3JlYXRlZEFjdG9ycy5nZXQoYWN0b3IubmFtZSkpIHtcbiAgICAgIHByZXZNYXJnaW4gKz0gYWN0b3Iud2lkdGggLyAyO1xuICAgIH1cbiAgICBhY3Rvci54ID0gcHJldldpZHRoICsgcHJldk1hcmdpbjtcbiAgICBhY3Rvci5zdGFydHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgICBib3VuZHMuaW5zZXJ0KGFjdG9yLngsIHZlcnRpY2FsUG9zLCBhY3Rvci54ICsgYWN0b3Iud2lkdGgsIGFjdG9yLmhlaWdodCk7XG4gICAgcHJldldpZHRoICs9IGFjdG9yLndpZHRoICsgcHJldk1hcmdpbjtcbiAgICBpZiAoYWN0b3IuYm94KSB7XG4gICAgICBhY3Rvci5ib3gud2lkdGggPSBwcmV2V2lkdGggKyBib3gubWFyZ2luIC0gYWN0b3IuYm94Lng7XG4gICAgfVxuICAgIHByZXZNYXJnaW4gPSBhY3Rvci5tYXJnaW47XG4gICAgcHJldkJveCA9IGFjdG9yLmJveDtcbiAgICBib3VuZHMubW9kZWxzLmFkZEFjdG9yKGFjdG9yKTtcbiAgfVxuICBpZiAocHJldkJveCAmJiAhaXNGb290ZXIpIHtcbiAgICBib3VuZHMubW9kZWxzLmFkZEJveChwcmV2Qm94KTtcbiAgfVxuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKG1heEhlaWdodCk7XG59LCBcImFkZEFjdG9yUmVuZGVyaW5nRGF0YVwiKTtcbnZhciBkcmF3QWN0b3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihkaWFncmFtMiwgYWN0b3JzLCBhY3RvcktleXMsIGlzRm9vdGVyKSB7XG4gIGlmICghaXNGb290ZXIpIHtcbiAgICBmb3IgKGNvbnN0IGFjdG9yS2V5IG9mIGFjdG9yS2V5cykge1xuICAgICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KGFjdG9yS2V5KTtcbiAgICAgIGF3YWl0IHN2Z0RyYXdfZGVmYXVsdC5kcmF3QWN0b3IoZGlhZ3JhbTIsIGFjdG9yLCBjb25mLCBmYWxzZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBtYXhIZWlnaHQgPSAwO1xuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoY29uZi5ib3hNYXJnaW4gKiAyKTtcbiAgICBmb3IgKGNvbnN0IGFjdG9yS2V5IG9mIGFjdG9yS2V5cykge1xuICAgICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KGFjdG9yS2V5KTtcbiAgICAgIGlmICghYWN0b3Iuc3RvcHkpIHtcbiAgICAgICAgYWN0b3Iuc3RvcHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlaWdodCA9IGF3YWl0IHN2Z0RyYXdfZGVmYXVsdC5kcmF3QWN0b3IoZGlhZ3JhbTIsIGFjdG9yLCBjb25mLCB0cnVlKTtcbiAgICAgIG1heEhlaWdodCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChtYXhIZWlnaHQsIGhlaWdodCk7XG4gICAgfVxuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobWF4SGVpZ2h0ICsgY29uZi5ib3hNYXJnaW4pO1xuICB9XG59LCBcImRyYXdBY3RvcnNcIik7XG52YXIgZHJhd0FjdG9yc1BvcHVwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkaWFncmFtMiwgYWN0b3JzLCBhY3RvcktleXMsIGRvYykge1xuICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgbGV0IG1heFdpZHRoID0gMDtcbiAgZm9yIChjb25zdCBhY3RvcktleSBvZiBhY3RvcktleXMpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQoYWN0b3JLZXkpO1xuICAgIGNvbnN0IG1pbk1lbnVXaWR0aCA9IGdldFJlcXVpcmVkUG9wdXBXaWR0aChhY3Rvcik7XG4gICAgY29uc3QgbWVudURpbWVuc2lvbnMgPSBzdmdEcmF3X2RlZmF1bHQuZHJhd1BvcHVwKFxuICAgICAgZGlhZ3JhbTIsXG4gICAgICBhY3RvcixcbiAgICAgIG1pbk1lbnVXaWR0aCxcbiAgICAgIGNvbmYsXG4gICAgICBjb25mLmZvcmNlTWVudXMsXG4gICAgICBkb2NcbiAgICApO1xuICAgIGlmIChtZW51RGltZW5zaW9ucy5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIG1heEhlaWdodCA9IG1lbnVEaW1lbnNpb25zLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKG1lbnVEaW1lbnNpb25zLndpZHRoICsgYWN0b3IueCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IG1lbnVEaW1lbnNpb25zLndpZHRoICsgYWN0b3IueDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWF4SGVpZ2h0LCBtYXhXaWR0aCB9O1xufSwgXCJkcmF3QWN0b3JzUG9wdXBcIik7XG52YXIgc2V0Q29uZiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY25mKSB7XG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KGNvbmYsIGNuZik7XG4gIGlmIChjbmYuZm9udEZhbWlseSkge1xuICAgIGNvbmYuYWN0b3JGb250RmFtaWx5ID0gY29uZi5ub3RlRm9udEZhbWlseSA9IGNvbmYubWVzc2FnZUZvbnRGYW1pbHkgPSBjbmYuZm9udEZhbWlseTtcbiAgfVxuICBpZiAoY25mLmZvbnRTaXplKSB7XG4gICAgY29uZi5hY3RvckZvbnRTaXplID0gY29uZi5ub3RlRm9udFNpemUgPSBjb25mLm1lc3NhZ2VGb250U2l6ZSA9IGNuZi5mb250U2l6ZTtcbiAgfVxuICBpZiAoY25mLmZvbnRXZWlnaHQpIHtcbiAgICBjb25mLmFjdG9yRm9udFdlaWdodCA9IGNvbmYubm90ZUZvbnRXZWlnaHQgPSBjb25mLm1lc3NhZ2VGb250V2VpZ2h0ID0gY25mLmZvbnRXZWlnaHQ7XG4gIH1cbn0sIFwic2V0Q29uZlwiKTtcbnZhciBhY3RvckFjdGl2YXRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3Rvcikge1xuICByZXR1cm4gYm91bmRzLmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihhY3RpdmF0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGl2YXRpb24uYWN0b3IgPT09IGFjdG9yO1xuICB9KTtcbn0sIFwiYWN0b3JBY3RpdmF0aW9uc1wiKTtcbnZhciBhY3RpdmF0aW9uQm91bmRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3RvciwgYWN0b3JzKSB7XG4gIGNvbnN0IGFjdG9yT2JqID0gYWN0b3JzLmdldChhY3Rvcik7XG4gIGNvbnN0IGFjdGl2YXRpb25zID0gYWN0b3JBY3RpdmF0aW9ucyhhY3Rvcik7XG4gIGNvbnN0IGxlZnQgPSBhY3RpdmF0aW9ucy5yZWR1Y2UoXG4gICAgZnVuY3Rpb24oYWNjLCBhY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gY29tbW9uX2RlZmF1bHQuZ2V0TWluKGFjYywgYWN0aXZhdGlvbi5zdGFydHgpO1xuICAgIH0sXG4gICAgYWN0b3JPYmoueCArIGFjdG9yT2JqLndpZHRoIC8gMiAtIDFcbiAgKTtcbiAgY29uc3QgcmlnaHQgPSBhY3RpdmF0aW9ucy5yZWR1Y2UoXG4gICAgZnVuY3Rpb24oYWNjLCBhY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGFjYywgYWN0aXZhdGlvbi5zdG9weCk7XG4gICAgfSxcbiAgICBhY3Rvck9iai54ICsgYWN0b3JPYmoud2lkdGggLyAyICsgMVxuICApO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XTtcbn0sIFwiYWN0aXZhdGlvbkJvdW5kc1wiKTtcbmZ1bmN0aW9uIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKGxvb3BXaWR0aHMsIG1zZywgcHJlTWFyZ2luLCBwb3N0TWFyZ2luLCBhZGRMb29wRm4pIHtcbiAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhwcmVNYXJnaW4pO1xuICBsZXQgaGVpZ2h0QWRqdXN0ID0gcG9zdE1hcmdpbjtcbiAgaWYgKG1zZy5pZCAmJiBtc2cubWVzc2FnZSAmJiBsb29wV2lkdGhzW21zZy5pZF0pIHtcbiAgICBjb25zdCBsb29wV2lkdGggPSBsb29wV2lkdGhzW21zZy5pZF0ud2lkdGg7XG4gICAgY29uc3QgdGV4dENvbmYgPSBtZXNzYWdlRm9udChjb25mKTtcbiAgICBtc2cubWVzc2FnZSA9IHV0aWxzX2RlZmF1bHQud3JhcExhYmVsKGBbJHttc2cubWVzc2FnZX1dYCwgbG9vcFdpZHRoIC0gMiAqIGNvbmYud3JhcFBhZGRpbmcsIHRleHRDb25mKTtcbiAgICBtc2cud2lkdGggPSBsb29wV2lkdGg7XG4gICAgbXNnLndyYXAgPSB0cnVlO1xuICAgIGNvbnN0IHRleHREaW1zID0gdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtc2cubWVzc2FnZSwgdGV4dENvbmYpO1xuICAgIGNvbnN0IHRvdGFsT2Zmc2V0ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KHRleHREaW1zLmhlaWdodCwgY29uZi5sYWJlbEJveEhlaWdodCk7XG4gICAgaGVpZ2h0QWRqdXN0ID0gcG9zdE1hcmdpbiArIHRvdGFsT2Zmc2V0O1xuICAgIGxvZy5kZWJ1ZyhgJHt0b3RhbE9mZnNldH0gLSAke21zZy5tZXNzYWdlfWApO1xuICB9XG4gIGFkZExvb3BGbihtc2cpO1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGhlaWdodEFkanVzdCk7XG59XG5fX25hbWUoYWRqdXN0TG9vcEhlaWdodEZvcldyYXAsIFwiYWRqdXN0TG9vcEhlaWdodEZvcldyYXBcIik7XG5mdW5jdGlvbiBhZGp1c3RDcmVhdGVkRGVzdHJveWVkRGF0YShtc2csIG1zZ01vZGVsLCBsaW5lU3RhcnRZLCBpbmRleCwgYWN0b3JzLCBjcmVhdGVkQWN0b3JzLCBkZXN0cm95ZWRBY3RvcnMpIHtcbiAgZnVuY3Rpb24gcmVjZWl2ZXJBZGp1c3RtZW50KGFjdG9yLCBhZGp1c3RtZW50KSB7XG4gICAgaWYgKGFjdG9yLnggPCBhY3RvcnMuZ2V0KG1zZy5mcm9tKS54KSB7XG4gICAgICBib3VuZHMuaW5zZXJ0KFxuICAgICAgICBtc2dNb2RlbC5zdG9weCAtIGFkanVzdG1lbnQsXG4gICAgICAgIG1zZ01vZGVsLnN0YXJ0eSxcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4LFxuICAgICAgICBtc2dNb2RlbC5zdG9weSArIGFjdG9yLmhlaWdodCAvIDIgKyBjb25mLm5vdGVNYXJnaW5cbiAgICAgICk7XG4gICAgICBtc2dNb2RlbC5zdG9weCA9IG1zZ01vZGVsLnN0b3B4ICsgYWRqdXN0bWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRzLmluc2VydChcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4LFxuICAgICAgICBtc2dNb2RlbC5zdGFydHksXG4gICAgICAgIG1zZ01vZGVsLnN0b3B4ICsgYWRqdXN0bWVudCxcbiAgICAgICAgbXNnTW9kZWwuc3RvcHkgKyBhY3Rvci5oZWlnaHQgLyAyICsgY29uZi5ub3RlTWFyZ2luXG4gICAgICApO1xuICAgICAgbXNnTW9kZWwuc3RvcHggPSBtc2dNb2RlbC5zdG9weCAtIGFkanVzdG1lbnQ7XG4gICAgfVxuICB9XG4gIF9fbmFtZShyZWNlaXZlckFkanVzdG1lbnQsIFwicmVjZWl2ZXJBZGp1c3RtZW50XCIpO1xuICBmdW5jdGlvbiBzZW5kZXJBZGp1c3RtZW50KGFjdG9yLCBhZGp1c3RtZW50KSB7XG4gICAgaWYgKGFjdG9yLnggPCBhY3RvcnMuZ2V0KG1zZy50bykueCkge1xuICAgICAgYm91bmRzLmluc2VydChcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4IC0gYWRqdXN0bWVudCxcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR5LFxuICAgICAgICBtc2dNb2RlbC5zdG9weCxcbiAgICAgICAgbXNnTW9kZWwuc3RvcHkgKyBhY3Rvci5oZWlnaHQgLyAyICsgY29uZi5ub3RlTWFyZ2luXG4gICAgICApO1xuICAgICAgbXNnTW9kZWwuc3RhcnR4ID0gbXNnTW9kZWwuc3RhcnR4ICsgYWRqdXN0bWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRzLmluc2VydChcbiAgICAgICAgbXNnTW9kZWwuc3RvcHgsXG4gICAgICAgIG1zZ01vZGVsLnN0YXJ0eSxcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4ICsgYWRqdXN0bWVudCxcbiAgICAgICAgbXNnTW9kZWwuc3RvcHkgKyBhY3Rvci5oZWlnaHQgLyAyICsgY29uZi5ub3RlTWFyZ2luXG4gICAgICApO1xuICAgICAgbXNnTW9kZWwuc3RhcnR4ID0gbXNnTW9kZWwuc3RhcnR4IC0gYWRqdXN0bWVudDtcbiAgICB9XG4gIH1cbiAgX19uYW1lKHNlbmRlckFkanVzdG1lbnQsIFwic2VuZGVyQWRqdXN0bWVudFwiKTtcbiAgaWYgKGNyZWF0ZWRBY3RvcnMuZ2V0KG1zZy50bykgPT0gaW5kZXgpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQobXNnLnRvKTtcbiAgICBjb25zdCBhZGp1c3RtZW50ID0gYWN0b3IudHlwZSA9PSBcImFjdG9yXCIgPyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiArIDMgOiBhY3Rvci53aWR0aCAvIDIgKyAzO1xuICAgIHJlY2VpdmVyQWRqdXN0bWVudChhY3RvciwgYWRqdXN0bWVudCk7XG4gICAgYWN0b3Iuc3RhcnR5ID0gbGluZVN0YXJ0WSAtIGFjdG9yLmhlaWdodCAvIDI7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhhY3Rvci5oZWlnaHQgLyAyKTtcbiAgfSBlbHNlIGlmIChkZXN0cm95ZWRBY3RvcnMuZ2V0KG1zZy5mcm9tKSA9PSBpbmRleCkge1xuICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzLmdldChtc2cuZnJvbSk7XG4gICAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgICBjb25zdCBhZGp1c3RtZW50ID0gYWN0b3IudHlwZSA9PSBcImFjdG9yXCIgPyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiA6IGFjdG9yLndpZHRoIC8gMjtcbiAgICAgIHNlbmRlckFkanVzdG1lbnQoYWN0b3IsIGFkanVzdG1lbnQpO1xuICAgIH1cbiAgICBhY3Rvci5zdG9weSA9IGxpbmVTdGFydFkgLSBhY3Rvci5oZWlnaHQgLyAyO1xuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoYWN0b3IuaGVpZ2h0IC8gMik7XG4gIH0gZWxzZSBpZiAoZGVzdHJveWVkQWN0b3JzLmdldChtc2cudG8pID09IGluZGV4KSB7XG4gICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KG1zZy50byk7XG4gICAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgICBjb25zdCBhZGp1c3RtZW50ID0gYWN0b3IudHlwZSA9PSBcImFjdG9yXCIgPyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiArIDMgOiBhY3Rvci53aWR0aCAvIDIgKyAzO1xuICAgICAgcmVjZWl2ZXJBZGp1c3RtZW50KGFjdG9yLCBhZGp1c3RtZW50KTtcbiAgICB9XG4gICAgYWN0b3Iuc3RvcHkgPSBsaW5lU3RhcnRZIC0gYWN0b3IuaGVpZ2h0IC8gMjtcbiAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGFjdG9yLmhlaWdodCAvIDIpO1xuICB9XG59XG5fX25hbWUoYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGEsIFwiYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGFcIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oX3RleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIHNlcXVlbmNlIH0gPSBnZXRDb25maWcyKCk7XG4gIGNvbmYgPSBzZXF1ZW5jZTtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICBib3VuZHMuaW5pdCgpO1xuICBsb2cuZGVidWcoZGlhZ09iai5kYik7XG4gIGNvbnN0IGRpYWdyYW0yID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKSA6IHNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgY29uc3QgYWN0b3JzID0gZGlhZ09iai5kYi5nZXRBY3RvcnMoKTtcbiAgY29uc3QgY3JlYXRlZEFjdG9ycyA9IGRpYWdPYmouZGIuZ2V0Q3JlYXRlZEFjdG9ycygpO1xuICBjb25zdCBkZXN0cm95ZWRBY3RvcnMgPSBkaWFnT2JqLmRiLmdldERlc3Ryb3llZEFjdG9ycygpO1xuICBjb25zdCBib3hlcyA9IGRpYWdPYmouZGIuZ2V0Qm94ZXMoKTtcbiAgbGV0IGFjdG9yS2V5cyA9IGRpYWdPYmouZGIuZ2V0QWN0b3JLZXlzKCk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZGlhZ09iai5kYi5nZXRNZXNzYWdlcygpO1xuICBjb25zdCB0aXRsZSA9IGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGNvbnN0IGhhc0JveGVzID0gZGlhZ09iai5kYi5oYXNBdExlYXN0T25lQm94KCk7XG4gIGNvbnN0IGhhc0JveFRpdGxlcyA9IGRpYWdPYmouZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpO1xuICBjb25zdCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciA9IGF3YWl0IGdldE1heE1lc3NhZ2VXaWR0aFBlckFjdG9yKGFjdG9ycywgbWVzc2FnZXMsIGRpYWdPYmopO1xuICBjb25mLmhlaWdodCA9IGF3YWl0IGNhbGN1bGF0ZUFjdG9yTWFyZ2lucyhhY3RvcnMsIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yLCBib3hlcyk7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRDb21wdXRlckljb24oZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0RGF0YWJhc2VJY29uKGRpYWdyYW0yKTtcbiAgc3ZnRHJhd19kZWZhdWx0Lmluc2VydENsb2NrSWNvbihkaWFncmFtMik7XG4gIGlmIChoYXNCb3hlcykge1xuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoY29uZi5ib3hNYXJnaW4pO1xuICAgIGlmIChoYXNCb3hUaXRsZXMpIHtcbiAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoYm94ZXNbMF0udGV4dE1heEhlaWdodCk7XG4gICAgfVxuICB9XG4gIGlmIChjb25mLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHMgPT09IHRydWUpIHtcbiAgICBjb25zdCBuZXdBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgIG5ld0FjdG9ycy5hZGQobWVzc2FnZS5mcm9tKTtcbiAgICAgIG5ld0FjdG9ycy5hZGQobWVzc2FnZS50byk7XG4gICAgfSk7XG4gICAgYWN0b3JLZXlzID0gYWN0b3JLZXlzLmZpbHRlcigoYWN0b3JLZXkpID0+IG5ld0FjdG9ycy5oYXMoYWN0b3JLZXkpKTtcbiAgfVxuICBhZGRBY3RvclJlbmRlcmluZ0RhdGEoZGlhZ3JhbTIsIGFjdG9ycywgY3JlYXRlZEFjdG9ycywgYWN0b3JLZXlzLCAwLCBtZXNzYWdlcywgZmFsc2UpO1xuICBjb25zdCBsb29wV2lkdGhzID0gYXdhaXQgY2FsY3VsYXRlTG9vcEJvdW5kcyhtZXNzYWdlcywgYWN0b3JzLCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciwgZGlhZ09iaik7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRBcnJvd0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGRpYWdyYW0yKTtcbiAgc3ZnRHJhd19kZWZhdWx0Lmluc2VydFNlcXVlbmNlTnVtYmVyKGRpYWdyYW0yKTtcbiAgZnVuY3Rpb24gYWN0aXZlRW5kKG1zZywgdmVydGljYWxQb3MpIHtcbiAgICBjb25zdCBhY3RpdmF0aW9uRGF0YSA9IGJvdW5kcy5lbmRBY3RpdmF0aW9uKG1zZyk7XG4gICAgaWYgKGFjdGl2YXRpb25EYXRhLnN0YXJ0eSArIDE4ID4gdmVydGljYWxQb3MpIHtcbiAgICAgIGFjdGl2YXRpb25EYXRhLnN0YXJ0eSA9IHZlcnRpY2FsUG9zIC0gNjtcbiAgICAgIHZlcnRpY2FsUG9zICs9IDEyO1xuICAgIH1cbiAgICBzdmdEcmF3X2RlZmF1bHQuZHJhd0FjdGl2YXRpb24oXG4gICAgICBkaWFncmFtMixcbiAgICAgIGFjdGl2YXRpb25EYXRhLFxuICAgICAgdmVydGljYWxQb3MsXG4gICAgICBjb25mLFxuICAgICAgYWN0b3JBY3RpdmF0aW9ucyhtc2cuZnJvbSkubGVuZ3RoXG4gICAgKTtcbiAgICBib3VuZHMuaW5zZXJ0KGFjdGl2YXRpb25EYXRhLnN0YXJ0eCwgdmVydGljYWxQb3MgLSAxMCwgYWN0aXZhdGlvbkRhdGEuc3RvcHgsIHZlcnRpY2FsUG9zKTtcbiAgfVxuICBfX25hbWUoYWN0aXZlRW5kLCBcImFjdGl2ZUVuZFwiKTtcbiAgbGV0IHNlcXVlbmNlSW5kZXggPSAxO1xuICBsZXQgc2VxdWVuY2VJbmRleFN0ZXAgPSAxO1xuICBjb25zdCBtZXNzYWdlc1RvRHJhdyA9IFtdO1xuICBjb25zdCBiYWNrZ3JvdW5kcyA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIGxldCBsb29wTW9kZWwsIG5vdGVNb2RlbCwgbXNnTW9kZWw7XG4gICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLk5PVEU6XG4gICAgICAgIGJvdW5kcy5yZXNldFZlcnRpY2FsUG9zKCk7XG4gICAgICAgIG5vdGVNb2RlbCA9IG1zZy5ub3RlTW9kZWw7XG4gICAgICAgIGF3YWl0IGRyYXdOb3RlKGRpYWdyYW0yLCBub3RlTW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6XG4gICAgICAgIGJvdW5kcy5uZXdBY3RpdmF0aW9uKG1zZywgZGlhZ3JhbTIsIGFjdG9ycyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6XG4gICAgICAgIGFjdGl2ZUVuZChtc2csIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuTE9PUF9TVEFSVDpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5uZXdMb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkxPT1BfRU5EOlxuICAgICAgICBsb29wTW9kZWwgPSBib3VuZHMuZW5kTG9vcCgpO1xuICAgICAgICBhd2FpdCBzdmdEcmF3X2RlZmF1bHQuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJsb29wXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcCh2b2lkIDAsIG1lc3NhZ2UubWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUkVDVF9FTkQ6XG4gICAgICAgIGxvb3BNb2RlbCA9IGJvdW5kcy5lbmRMb29wKCk7XG4gICAgICAgIGJhY2tncm91bmRzLnB1c2gobG9vcE1vZGVsKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5PUFRfRU5EOlxuICAgICAgICBsb29wTW9kZWwgPSBib3VuZHMuZW5kTG9vcCgpO1xuICAgICAgICBhd2FpdCBzdmdEcmF3X2RlZmF1bHQuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJvcHRcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX1NUQVJUOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLm5ld0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX0VMU0U6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMuYWRkU2VjdGlvblRvTG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfRU5EOlxuICAgICAgICBsb29wTW9kZWwgPSBib3VuZHMuZW5kTG9vcCgpO1xuICAgICAgICBhd2FpdCBzdmdEcmF3X2RlZmF1bHQuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJhbHRcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX1NUQVJUOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLm5ld0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYm91bmRzLnNhdmVWZXJ0aWNhbFBvcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5QQVJfQU5EOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLmFkZFNlY3Rpb25Ub0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgYXdhaXQgc3ZnRHJhd19kZWZhdWx0LmRyYXdMb29wKGRpYWdyYW0yLCBsb29wTW9kZWwsIFwicGFyXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6XG4gICAgICAgIHNlcXVlbmNlSW5kZXggPSBtc2cubWVzc2FnZS5zdGFydCB8fCBzZXF1ZW5jZUluZGV4O1xuICAgICAgICBzZXF1ZW5jZUluZGV4U3RlcCA9IG1zZy5tZXNzYWdlLnN0ZXAgfHwgc2VxdWVuY2VJbmRleFN0ZXA7XG4gICAgICAgIGlmIChtc2cubWVzc2FnZS52aXNpYmxlKSB7XG4gICAgICAgICAgZGlhZ09iai5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaWFnT2JqLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5uZXdMb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5hZGRTZWN0aW9uVG9Mb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgYXdhaXQgc3ZnRHJhd19kZWZhdWx0LmRyYXdMb29wKGRpYWdyYW0yLCBsb29wTW9kZWwsIFwiY3JpdGljYWxcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6XG4gICAgICAgIGxvb3BNb2RlbCA9IGJvdW5kcy5lbmRMb29wKCk7XG4gICAgICAgIGF3YWl0IHN2Z0RyYXdfZGVmYXVsdC5kcmF3TG9vcChkaWFncmFtMiwgbG9vcE1vZGVsLCBcImJyZWFrXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtc2dNb2RlbCA9IG1zZy5tc2dNb2RlbDtcbiAgICAgICAgICBtc2dNb2RlbC5zdGFydHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgICAgICAgICBtc2dNb2RlbC5zZXF1ZW5jZUluZGV4ID0gc2VxdWVuY2VJbmRleDtcbiAgICAgICAgICBtc2dNb2RlbC5zZXF1ZW5jZVZpc2libGUgPSBkaWFnT2JqLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtcbiAgICAgICAgICBjb25zdCBsaW5lU3RhcnRZID0gYXdhaXQgYm91bmRNZXNzYWdlKGRpYWdyYW0yLCBtc2dNb2RlbCk7XG4gICAgICAgICAgYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGEoXG4gICAgICAgICAgICBtc2csXG4gICAgICAgICAgICBtc2dNb2RlbCxcbiAgICAgICAgICAgIGxpbmVTdGFydFksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGFjdG9ycyxcbiAgICAgICAgICAgIGNyZWF0ZWRBY3RvcnMsXG4gICAgICAgICAgICBkZXN0cm95ZWRBY3RvcnNcbiAgICAgICAgICApO1xuICAgICAgICAgIG1lc3NhZ2VzVG9EcmF3LnB1c2goeyBtZXNzYWdlTW9kZWw6IG1zZ01vZGVsLCBsaW5lU3RhcnRZIH0pO1xuICAgICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkTWVzc2FnZShtc2dNb2RlbCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2VcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFtcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfT1BFTixcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX09QRU4sXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElELFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURUQsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXG4gICAgXS5pbmNsdWRlcyhtc2cudHlwZSkpIHtcbiAgICAgIHNlcXVlbmNlSW5kZXggPSBzZXF1ZW5jZUluZGV4ICsgc2VxdWVuY2VJbmRleFN0ZXA7XG4gICAgfVxuICAgIGluZGV4Kys7XG4gIH1cbiAgbG9nLmRlYnVnKFwiY3JlYXRlZEFjdG9yc1wiLCBjcmVhdGVkQWN0b3JzKTtcbiAgbG9nLmRlYnVnKFwiZGVzdHJveWVkQWN0b3JzXCIsIGRlc3Ryb3llZEFjdG9ycyk7XG4gIGF3YWl0IGRyYXdBY3RvcnMoZGlhZ3JhbTIsIGFjdG9ycywgYWN0b3JLZXlzLCBmYWxzZSk7XG4gIGZvciAoY29uc3QgZSBvZiBtZXNzYWdlc1RvRHJhdykge1xuICAgIGF3YWl0IGRyYXdNZXNzYWdlKGRpYWdyYW0yLCBlLm1lc3NhZ2VNb2RlbCwgZS5saW5lU3RhcnRZLCBkaWFnT2JqKTtcbiAgfVxuICBpZiAoY29uZi5taXJyb3JBY3RvcnMpIHtcbiAgICBhd2FpdCBkcmF3QWN0b3JzKGRpYWdyYW0yLCBhY3RvcnMsIGFjdG9yS2V5cywgdHJ1ZSk7XG4gIH1cbiAgYmFja2dyb3VuZHMuZm9yRWFjaCgoZSkgPT4gc3ZnRHJhd19kZWZhdWx0LmRyYXdCYWNrZ3JvdW5kUmVjdChkaWFncmFtMiwgZSkpO1xuICBmaXhMaWZlTGluZUhlaWdodHMoZGlhZ3JhbTIsIGFjdG9ycywgYWN0b3JLZXlzLCBjb25mKTtcbiAgZm9yIChjb25zdCBib3gyIG9mIGJvdW5kcy5tb2RlbHMuYm94ZXMpIHtcbiAgICBib3gyLmhlaWdodCA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpIC0gYm94Mi55O1xuICAgIGJvdW5kcy5pbnNlcnQoYm94Mi54LCBib3gyLnksIGJveDIueCArIGJveDIud2lkdGgsIGJveDIuaGVpZ2h0KTtcbiAgICBib3gyLnN0YXJ0eCA9IGJveDIueDtcbiAgICBib3gyLnN0YXJ0eSA9IGJveDIueTtcbiAgICBib3gyLnN0b3B4ID0gYm94Mi5zdGFydHggKyBib3gyLndpZHRoO1xuICAgIGJveDIuc3RvcHkgPSBib3gyLnN0YXJ0eSArIGJveDIuaGVpZ2h0O1xuICAgIGJveDIuc3Ryb2tlID0gXCJyZ2IoMCwwLDAsIDAuNSlcIjtcbiAgICBzdmdEcmF3X2RlZmF1bHQuZHJhd0JveChkaWFncmFtMiwgYm94MiwgY29uZik7XG4gIH1cbiAgaWYgKGhhc0JveGVzKSB7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhjb25mLmJveE1hcmdpbik7XG4gIH1cbiAgY29uc3QgcmVxdWlyZWRCb3hTaXplID0gZHJhd0FjdG9yc1BvcHVwKGRpYWdyYW0yLCBhY3RvcnMsIGFjdG9yS2V5cywgZG9jKTtcbiAgY29uc3QgeyBib3VuZHM6IGJveCB9ID0gYm91bmRzLmdldEJvdW5kcygpO1xuICBpZiAoYm94LnN0YXJ0eCA9PT0gdm9pZCAwKSB7XG4gICAgYm94LnN0YXJ0eCA9IDA7XG4gIH1cbiAgaWYgKGJveC5zdGFydHkgPT09IHZvaWQgMCkge1xuICAgIGJveC5zdGFydHkgPSAwO1xuICB9XG4gIGlmIChib3guc3RvcHggPT09IHZvaWQgMCkge1xuICAgIGJveC5zdG9weCA9IDA7XG4gIH1cbiAgaWYgKGJveC5zdG9weSA9PT0gdm9pZCAwKSB7XG4gICAgYm94LnN0b3B5ID0gMDtcbiAgfVxuICBsZXQgYm94SGVpZ2h0ID0gYm94LnN0b3B5IC0gYm94LnN0YXJ0eTtcbiAgaWYgKGJveEhlaWdodCA8IHJlcXVpcmVkQm94U2l6ZS5tYXhIZWlnaHQpIHtcbiAgICBib3hIZWlnaHQgPSByZXF1aXJlZEJveFNpemUubWF4SGVpZ2h0O1xuICB9XG4gIGxldCBoZWlnaHQgPSBib3hIZWlnaHQgKyAyICogY29uZi5kaWFncmFtTWFyZ2luWTtcbiAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IC0gY29uZi5ib3hNYXJnaW4gKyBjb25mLmJvdHRvbU1hcmdpbkFkajtcbiAgfVxuICBsZXQgYm94V2lkdGggPSBib3guc3RvcHggLSBib3guc3RhcnR4O1xuICBpZiAoYm94V2lkdGggPCByZXF1aXJlZEJveFNpemUubWF4V2lkdGgpIHtcbiAgICBib3hXaWR0aCA9IHJlcXVpcmVkQm94U2l6ZS5tYXhXaWR0aDtcbiAgfVxuICBjb25zdCB3aWR0aCA9IGJveFdpZHRoICsgMiAqIGNvbmYuZGlhZ3JhbU1hcmdpblg7XG4gIGlmICh0aXRsZSkge1xuICAgIGRpYWdyYW0yLmFwcGVuZChcInRleHRcIikudGV4dCh0aXRsZSkuYXR0cihcInhcIiwgKGJveC5zdG9weCAtIGJveC5zdGFydHgpIC8gMiAtIDIgKiBjb25mLmRpYWdyYW1NYXJnaW5YKS5hdHRyKFwieVwiLCAtMjUpO1xuICB9XG4gIGNvbmZpZ3VyZVN2Z1NpemUoZGlhZ3JhbTIsIGhlaWdodCwgd2lkdGgsIGNvbmYudXNlTWF4V2lkdGgpO1xuICBjb25zdCBleHRyYVZlcnRGb3JUaXRsZSA9IHRpdGxlID8gNDAgOiAwO1xuICBkaWFncmFtMi5hdHRyKFxuICAgIFwidmlld0JveFwiLFxuICAgIGJveC5zdGFydHggLSBjb25mLmRpYWdyYW1NYXJnaW5YICsgXCIgLVwiICsgKGNvbmYuZGlhZ3JhbU1hcmdpblkgKyBleHRyYVZlcnRGb3JUaXRsZSkgKyBcIiBcIiArIHdpZHRoICsgXCIgXCIgKyAoaGVpZ2h0ICsgZXh0cmFWZXJ0Rm9yVGl0bGUpXG4gICk7XG4gIGxvZy5kZWJ1ZyhgbW9kZWxzOmAsIGJvdW5kcy5tb2RlbHMpO1xufSwgXCJkcmF3XCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IoYWN0b3JzLCBtZXNzYWdlcywgZGlhZ09iaikge1xuICBjb25zdCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciA9IHt9O1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIGlmIChhY3RvcnMuZ2V0KG1zZy50bykgJiYgYWN0b3JzLmdldChtc2cuZnJvbSkpIHtcbiAgICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzLmdldChtc2cudG8pO1xuICAgICAgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULkxFRlRPRiAmJiAhYWN0b3IucHJldkFjdG9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULlJJR0hUT0YgJiYgIWFjdG9yLm5leHRBY3Rvcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTm90ZSA9IG1zZy5wbGFjZW1lbnQgIT09IHZvaWQgMDtcbiAgICAgIGNvbnN0IGlzTWVzc2FnZSA9ICFpc05vdGU7XG4gICAgICBjb25zdCB0ZXh0Rm9udCA9IGlzTm90ZSA/IG5vdGVGb250KGNvbmYpIDogbWVzc2FnZUZvbnQoY29uZik7XG4gICAgICBjb25zdCB3cmFwcGVkTWVzc2FnZSA9IG1zZy53cmFwID8gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwobXNnLm1lc3NhZ2UsIGNvbmYud2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dEZvbnQpIDogbXNnLm1lc3NhZ2U7XG4gICAgICBjb25zdCBtZXNzYWdlRGltZW5zaW9ucyA9IGhhc0thdGV4KHdyYXBwZWRNZXNzYWdlKSA/IGF3YWl0IGNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIGdldENvbmZpZzIoKSkgOiB1dGlsc19kZWZhdWx0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHdyYXBwZWRNZXNzYWdlLCB0ZXh0Rm9udCk7XG4gICAgICBjb25zdCBtZXNzYWdlV2lkdGggPSBtZXNzYWdlRGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nO1xuICAgICAgaWYgKGlzTWVzc2FnZSAmJiBtc2cuZnJvbSA9PT0gYWN0b3IubmV4dEFjdG9yKSB7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLnRvXSB8fCAwLFxuICAgICAgICAgIG1lc3NhZ2VXaWR0aFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpc01lc3NhZ2UgJiYgbXNnLmZyb20gPT09IGFjdG9yLnByZXZBY3Rvcikge1xuICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dIHx8IDAsXG4gICAgICAgICAgbWVzc2FnZVdpZHRoXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWVzc2FnZSAmJiBtc2cuZnJvbSA9PT0gbXNnLnRvKSB7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy5mcm9tXSA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGggLyAyXG4gICAgICAgICk7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLnRvXSB8fCAwLFxuICAgICAgICAgIG1lc3NhZ2VXaWR0aCAvIDJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuUklHSFRPRikge1xuICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dIHx8IDAsXG4gICAgICAgICAgbWVzc2FnZVdpZHRoXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULkxFRlRPRikge1xuICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvclthY3Rvci5wcmV2QWN0b3JdID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW2FjdG9yLnByZXZBY3Rvcl0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuT1ZFUikge1xuICAgICAgICBpZiAoYWN0b3IucHJldkFjdG9yKSB7XG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbYWN0b3IucHJldkFjdG9yXSA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChcbiAgICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW2FjdG9yLnByZXZBY3Rvcl0gfHwgMCxcbiAgICAgICAgICAgIG1lc3NhZ2VXaWR0aCAvIDJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rvci5uZXh0QWN0b3IpIHtcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICAgIG1lc3NhZ2VXaWR0aCAvIDJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhcIm1heE1lc3NhZ2VXaWR0aFBlckFjdG9yOlwiLCBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvcik7XG4gIHJldHVybiBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvcjtcbn1cbl9fbmFtZShnZXRNYXhNZXNzYWdlV2lkdGhQZXJBY3RvciwgXCJnZXRNYXhNZXNzYWdlV2lkdGhQZXJBY3RvclwiKTtcbnZhciBnZXRSZXF1aXJlZFBvcHVwV2lkdGggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGFjdG9yKSB7XG4gIGxldCByZXF1aXJlZFBvcHVwV2lkdGggPSAwO1xuICBjb25zdCB0ZXh0Rm9udCA9IGFjdG9yRm9udChjb25mKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gYWN0b3IubGlua3MpIHtcbiAgICBjb25zdCBsYWJlbERpbWVuc2lvbnMgPSB1dGlsc19kZWZhdWx0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGtleSwgdGV4dEZvbnQpO1xuICAgIGNvbnN0IGxhYmVsV2lkdGggPSBsYWJlbERpbWVuc2lvbnMud2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZyArIDIgKiBjb25mLmJveE1hcmdpbjtcbiAgICBpZiAocmVxdWlyZWRQb3B1cFdpZHRoIDwgbGFiZWxXaWR0aCkge1xuICAgICAgcmVxdWlyZWRQb3B1cFdpZHRoID0gbGFiZWxXaWR0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcXVpcmVkUG9wdXBXaWR0aDtcbn0sIFwiZ2V0UmVxdWlyZWRQb3B1cFdpZHRoXCIpO1xuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlQWN0b3JNYXJnaW5zKGFjdG9ycywgYWN0b3JUb01lc3NhZ2VXaWR0aCwgYm94ZXMpIHtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBhY3RvcnMua2V5cygpKSB7XG4gICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KHByb3ApO1xuICAgIGlmIChhY3Rvci53cmFwKSB7XG4gICAgICBhY3Rvci5kZXNjcmlwdGlvbiA9IHV0aWxzX2RlZmF1bHQud3JhcExhYmVsKFxuICAgICAgICBhY3Rvci5kZXNjcmlwdGlvbixcbiAgICAgICAgY29uZi53aWR0aCAtIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgICBhY3RvckZvbnQoY29uZilcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFjdERpbXMgPSBoYXNLYXRleChhY3Rvci5kZXNjcmlwdGlvbikgPyBhd2FpdCBjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zKGFjdG9yLmRlc2NyaXB0aW9uLCBnZXRDb25maWcyKCkpIDogdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhY3Rvci5kZXNjcmlwdGlvbiwgYWN0b3JGb250KGNvbmYpKTtcbiAgICBhY3Rvci53aWR0aCA9IGFjdG9yLndyYXAgPyBjb25mLndpZHRoIDogY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGgsIGFjdERpbXMud2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZyk7XG4gICAgYWN0b3IuaGVpZ2h0ID0gYWN0b3Iud3JhcCA/IGNvbW1vbl9kZWZhdWx0LmdldE1heChhY3REaW1zLmhlaWdodCwgY29uZi5oZWlnaHQpIDogY29uZi5oZWlnaHQ7XG4gICAgbWF4SGVpZ2h0ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KG1heEhlaWdodCwgYWN0b3IuaGVpZ2h0KTtcbiAgfVxuICBmb3IgKGNvbnN0IGFjdG9yS2V5IGluIGFjdG9yVG9NZXNzYWdlV2lkdGgpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQoYWN0b3JLZXkpO1xuICAgIGlmICghYWN0b3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuZXh0QWN0b3IgPSBhY3RvcnMuZ2V0KGFjdG9yLm5leHRBY3Rvcik7XG4gICAgaWYgKCFuZXh0QWN0b3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaWR0aDIgPSBhY3RvclRvTWVzc2FnZVdpZHRoW2FjdG9yS2V5XTtcbiAgICAgIGNvbnN0IGFjdG9yV2lkdGgyID0gbWVzc2FnZVdpZHRoMiArIGNvbmYuYWN0b3JNYXJnaW4gLSBhY3Rvci53aWR0aCAvIDI7XG4gICAgICBhY3Rvci5tYXJnaW4gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoYWN0b3JXaWR0aDIsIGNvbmYuYWN0b3JNYXJnaW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VXaWR0aCA9IGFjdG9yVG9NZXNzYWdlV2lkdGhbYWN0b3JLZXldO1xuICAgIGNvbnN0IGFjdG9yV2lkdGggPSBtZXNzYWdlV2lkdGggKyBjb25mLmFjdG9yTWFyZ2luIC0gYWN0b3Iud2lkdGggLyAyIC0gbmV4dEFjdG9yLndpZHRoIC8gMjtcbiAgICBhY3Rvci5tYXJnaW4gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoYWN0b3JXaWR0aCwgY29uZi5hY3Rvck1hcmdpbik7XG4gIH1cbiAgbGV0IG1heEJveEhlaWdodCA9IDA7XG4gIGJveGVzLmZvckVhY2goKGJveCkgPT4ge1xuICAgIGNvbnN0IHRleHRGb250ID0gbWVzc2FnZUZvbnQoY29uZik7XG4gICAgbGV0IHRvdGFsV2lkdGggPSBib3guYWN0b3JLZXlzLnJlZHVjZSgodG90YWwsIGFLZXkpID0+IHtcbiAgICAgIHJldHVybiB0b3RhbCArPSBhY3RvcnMuZ2V0KGFLZXkpLndpZHRoICsgKGFjdG9ycy5nZXQoYUtleSkubWFyZ2luIHx8IDApO1xuICAgIH0sIDApO1xuICAgIHRvdGFsV2lkdGggLT0gMiAqIGNvbmYuYm94VGV4dE1hcmdpbjtcbiAgICBpZiAoYm94LndyYXApIHtcbiAgICAgIGJveC5uYW1lID0gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwoYm94Lm5hbWUsIHRvdGFsV2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dEZvbnQpO1xuICAgIH1cbiAgICBjb25zdCBib3hNc2dEaW1lbnNpb25zID0gdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhib3gubmFtZSwgdGV4dEZvbnQpO1xuICAgIG1heEJveEhlaWdodCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChib3hNc2dEaW1lbnNpb25zLmhlaWdodCwgbWF4Qm94SGVpZ2h0KTtcbiAgICBjb25zdCBtaW5XaWR0aCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heCh0b3RhbFdpZHRoLCBib3hNc2dEaW1lbnNpb25zLndpZHRoICsgMiAqIGNvbmYud3JhcFBhZGRpbmcpO1xuICAgIGJveC5tYXJnaW4gPSBjb25mLmJveFRleHRNYXJnaW47XG4gICAgaWYgKHRvdGFsV2lkdGggPCBtaW5XaWR0aCkge1xuICAgICAgY29uc3QgbWlzc2luZyA9IChtaW5XaWR0aCAtIHRvdGFsV2lkdGgpIC8gMjtcbiAgICAgIGJveC5tYXJnaW4gKz0gbWlzc2luZztcbiAgICB9XG4gIH0pO1xuICBib3hlcy5mb3JFYWNoKChib3gpID0+IGJveC50ZXh0TWF4SGVpZ2h0ID0gbWF4Qm94SGVpZ2h0KTtcbiAgcmV0dXJuIGNvbW1vbl9kZWZhdWx0LmdldE1heChtYXhIZWlnaHQsIGNvbmYuaGVpZ2h0KTtcbn1cbl9fbmFtZShjYWxjdWxhdGVBY3Rvck1hcmdpbnMsIFwiY2FsY3VsYXRlQWN0b3JNYXJnaW5zXCIpO1xudmFyIGJ1aWxkTm90ZU1vZGVsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihtc2csIGFjdG9ycywgZGlhZ09iaikge1xuICBjb25zdCBmcm9tQWN0b3IgPSBhY3RvcnMuZ2V0KG1zZy5mcm9tKTtcbiAgY29uc3QgdG9BY3RvciA9IGFjdG9ycy5nZXQobXNnLnRvKTtcbiAgY29uc3Qgc3RhcnR4ID0gZnJvbUFjdG9yLng7XG4gIGNvbnN0IHN0b3B4ID0gdG9BY3Rvci54O1xuICBjb25zdCBzaG91bGRXcmFwID0gbXNnLndyYXAgJiYgbXNnLm1lc3NhZ2U7XG4gIGxldCB0ZXh0RGltZW5zaW9ucyA9IGhhc0thdGV4KG1zZy5tZXNzYWdlKSA/IGF3YWl0IGNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIGdldENvbmZpZzIoKSkgOiB1dGlsc19kZWZhdWx0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKFxuICAgIHNob3VsZFdyYXAgPyB1dGlsc19kZWZhdWx0LndyYXBMYWJlbChtc2cubWVzc2FnZSwgY29uZi53aWR0aCwgbm90ZUZvbnQoY29uZikpIDogbXNnLm1lc3NhZ2UsXG4gICAgbm90ZUZvbnQoY29uZilcbiAgKTtcbiAgY29uc3Qgbm90ZU1vZGVsID0ge1xuICAgIHdpZHRoOiBzaG91bGRXcmFwID8gY29uZi53aWR0aCA6IGNvbW1vbl9kZWZhdWx0LmdldE1heChjb25mLndpZHRoLCB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW4pLFxuICAgIGhlaWdodDogMCxcbiAgICBzdGFydHg6IGZyb21BY3Rvci54LFxuICAgIHN0b3B4OiAwLFxuICAgIHN0YXJ0eTogMCxcbiAgICBzdG9weTogMCxcbiAgICBtZXNzYWdlOiBtc2cubWVzc2FnZVxuICB9O1xuICBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuUklHSFRPRikge1xuICAgIG5vdGVNb2RlbC53aWR0aCA9IHNob3VsZFdyYXAgPyBjb21tb25fZGVmYXVsdC5nZXRNYXgoY29uZi53aWR0aCwgdGV4dERpbWVuc2lvbnMud2lkdGgpIDogY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgZnJvbUFjdG9yLndpZHRoIC8gMiArIHRvQWN0b3Iud2lkdGggLyAyLFxuICAgICAgdGV4dERpbWVuc2lvbnMud2lkdGggKyAyICogY29uZi5ub3RlTWFyZ2luXG4gICAgKTtcbiAgICBub3RlTW9kZWwuc3RhcnR4ID0gc3RhcnR4ICsgKGZyb21BY3Rvci53aWR0aCArIGNvbmYuYWN0b3JNYXJnaW4pIC8gMjtcbiAgfSBlbHNlIGlmIChtc2cucGxhY2VtZW50ID09PSBkaWFnT2JqLmRiLlBMQUNFTUVOVC5MRUZUT0YpIHtcbiAgICBub3RlTW9kZWwud2lkdGggPSBzaG91bGRXcmFwID8gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGgsIHRleHREaW1lbnNpb25zLndpZHRoICsgMiAqIGNvbmYubm90ZU1hcmdpbikgOiBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICBmcm9tQWN0b3Iud2lkdGggLyAyICsgdG9BY3Rvci53aWR0aCAvIDIsXG4gICAgICB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW5cbiAgICApO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggLSBub3RlTW9kZWwud2lkdGggKyAoZnJvbUFjdG9yLndpZHRoIC0gY29uZi5hY3Rvck1hcmdpbikgLyAyO1xuICB9IGVsc2UgaWYgKG1zZy50byA9PT0gbXNnLmZyb20pIHtcbiAgICB0ZXh0RGltZW5zaW9ucyA9IHV0aWxzX2RlZmF1bHQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoXG4gICAgICBzaG91bGRXcmFwID8gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwobXNnLm1lc3NhZ2UsIGNvbW1vbl9kZWZhdWx0LmdldE1heChjb25mLndpZHRoLCBmcm9tQWN0b3Iud2lkdGgpLCBub3RlRm9udChjb25mKSkgOiBtc2cubWVzc2FnZSxcbiAgICAgIG5vdGVGb250KGNvbmYpXG4gICAgKTtcbiAgICBub3RlTW9kZWwud2lkdGggPSBzaG91bGRXcmFwID8gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGgsIGZyb21BY3Rvci53aWR0aCkgOiBjb21tb25fZGVmYXVsdC5nZXRNYXgoZnJvbUFjdG9yLndpZHRoLCBjb25mLndpZHRoLCB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW4pO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggKyAoZnJvbUFjdG9yLndpZHRoIC0gbm90ZU1vZGVsLndpZHRoKSAvIDI7XG4gIH0gZWxzZSB7XG4gICAgbm90ZU1vZGVsLndpZHRoID0gTWF0aC5hYnMoc3RhcnR4ICsgZnJvbUFjdG9yLndpZHRoIC8gMiAtIChzdG9weCArIHRvQWN0b3Iud2lkdGggLyAyKSkgKyBjb25mLmFjdG9yTWFyZ2luO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggPCBzdG9weCA/IHN0YXJ0eCArIGZyb21BY3Rvci53aWR0aCAvIDIgLSBjb25mLmFjdG9yTWFyZ2luIC8gMiA6IHN0b3B4ICsgdG9BY3Rvci53aWR0aCAvIDIgLSBjb25mLmFjdG9yTWFyZ2luIC8gMjtcbiAgfVxuICBpZiAoc2hvdWxkV3JhcCkge1xuICAgIG5vdGVNb2RlbC5tZXNzYWdlID0gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwoXG4gICAgICBtc2cubWVzc2FnZSxcbiAgICAgIG5vdGVNb2RlbC53aWR0aCAtIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgbm90ZUZvbnQoY29uZilcbiAgICApO1xuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBgTk06WyR7bm90ZU1vZGVsLnN0YXJ0eH0sJHtub3RlTW9kZWwuc3RvcHh9LCR7bm90ZU1vZGVsLnN0YXJ0eX0sJHtub3RlTW9kZWwuc3RvcHl9OiR7bm90ZU1vZGVsLndpZHRofSwke25vdGVNb2RlbC5oZWlnaHR9PSR7bXNnLm1lc3NhZ2V9XWBcbiAgKTtcbiAgcmV0dXJuIG5vdGVNb2RlbDtcbn0sIFwiYnVpbGROb3RlTW9kZWxcIik7XG52YXIgYnVpbGRNZXNzYWdlTW9kZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1zZywgYWN0b3JzLCBkaWFnT2JqKSB7XG4gIGlmICghW1xuICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfT1BFTixcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSUQsXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURUQsXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX1BPSU5ULFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRCxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXG4gIF0uaW5jbHVkZXMobXNnLnR5cGUpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IFtmcm9tTGVmdCwgZnJvbVJpZ2h0XSA9IGFjdGl2YXRpb25Cb3VuZHMobXNnLmZyb20sIGFjdG9ycyk7XG4gIGNvbnN0IFt0b0xlZnQsIHRvUmlnaHRdID0gYWN0aXZhdGlvbkJvdW5kcyhtc2cudG8sIGFjdG9ycyk7XG4gIGNvbnN0IGlzQXJyb3dUb1JpZ2h0ID0gZnJvbUxlZnQgPD0gdG9MZWZ0O1xuICBsZXQgc3RhcnR4ID0gaXNBcnJvd1RvUmlnaHQgPyBmcm9tUmlnaHQgOiBmcm9tTGVmdDtcbiAgbGV0IHN0b3B4ID0gaXNBcnJvd1RvUmlnaHQgPyB0b0xlZnQgOiB0b1JpZ2h0O1xuICBjb25zdCBpc0Fycm93VG9BY3RpdmF0aW9uID0gTWF0aC5hYnModG9MZWZ0IC0gdG9SaWdodCkgPiAyO1xuICBjb25zdCBhZGp1c3RWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIGlzQXJyb3dUb1JpZ2h0ID8gLXZhbHVlIDogdmFsdWU7XG4gIH0sIFwiYWRqdXN0VmFsdWVcIik7XG4gIGlmIChtc2cuZnJvbSA9PT0gbXNnLnRvKSB7XG4gICAgc3RvcHggPSBzdGFydHg7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG1zZy5hY3RpdmF0ZSAmJiAhaXNBcnJvd1RvQWN0aXZhdGlvbikge1xuICAgICAgc3RvcHggKz0gYWRqdXN0VmFsdWUoY29uZi5hY3RpdmF0aW9uV2lkdGggLyAyIC0gMSk7XG4gICAgfVxuICAgIGlmICghW2RpYWdPYmouZGIuTElORVRZUEUuU09MSURfT1BFTiwgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfT1BFTl0uaW5jbHVkZXMobXNnLnR5cGUpKSB7XG4gICAgICBzdG9weCArPSBhZGp1c3RWYWx1ZSgzKTtcbiAgICB9XG4gICAgaWYgKFtkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsIGRpYWdPYmouZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKFxuICAgICAgbXNnLnR5cGVcbiAgICApKSB7XG4gICAgICBzdGFydHggLT0gYWRqdXN0VmFsdWUoMyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGFsbEJvdW5kcyA9IFtmcm9tTGVmdCwgZnJvbVJpZ2h0LCB0b0xlZnQsIHRvUmlnaHRdO1xuICBjb25zdCBib3VuZGVkV2lkdGggPSBNYXRoLmFicyhzdGFydHggLSBzdG9weCk7XG4gIGlmIChtc2cud3JhcCAmJiBtc2cubWVzc2FnZSkge1xuICAgIG1zZy5tZXNzYWdlID0gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwoXG4gICAgICBtc2cubWVzc2FnZSxcbiAgICAgIGNvbW1vbl9kZWZhdWx0LmdldE1heChib3VuZGVkV2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZywgY29uZi53aWR0aCksXG4gICAgICBtZXNzYWdlRm9udChjb25mKVxuICAgICk7XG4gIH1cbiAgY29uc3QgbXNnRGltcyA9IHV0aWxzX2RlZmF1bHQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIG1lc3NhZ2VGb250KGNvbmYpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgbXNnLndyYXAgPyAwIDogbXNnRGltcy53aWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgYm91bmRlZFdpZHRoICsgMiAqIGNvbmYud3JhcFBhZGRpbmcsXG4gICAgICBjb25mLndpZHRoXG4gICAgKSxcbiAgICBoZWlnaHQ6IDAsXG4gICAgc3RhcnR4LFxuICAgIHN0b3B4LFxuICAgIHN0YXJ0eTogMCxcbiAgICBzdG9weTogMCxcbiAgICBtZXNzYWdlOiBtc2cubWVzc2FnZSxcbiAgICB0eXBlOiBtc2cudHlwZSxcbiAgICB3cmFwOiBtc2cud3JhcCxcbiAgICBmcm9tQm91bmRzOiBNYXRoLm1pbi5hcHBseShudWxsLCBhbGxCb3VuZHMpLFxuICAgIHRvQm91bmRzOiBNYXRoLm1heC5hcHBseShudWxsLCBhbGxCb3VuZHMpXG4gIH07XG59LCBcImJ1aWxkTWVzc2FnZU1vZGVsXCIpO1xudmFyIGNhbGN1bGF0ZUxvb3BCb3VuZHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKG1lc3NhZ2VzLCBhY3RvcnMsIF9tYXhXaWR0aFBlckFjdG9yLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGxvb3BzID0ge307XG4gIGNvbnN0IHN0YWNrID0gW107XG4gIGxldCBjdXJyZW50LCBub3RlTW9kZWwsIG1zZ01vZGVsO1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIG1zZy5pZCA9IHV0aWxzX2RlZmF1bHQucmFuZG9tKHsgbGVuZ3RoOiAxMCB9KTtcbiAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuTE9PUF9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuT1BUX1NUQVJUOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDpcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgaWQ6IG1zZy5pZCxcbiAgICAgICAgICBtc2c6IG1zZy5tZXNzYWdlLFxuICAgICAgICAgIGZyb206IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgIHRvOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICB3aWR0aDogMFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX0VMU0U6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0FORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046XG4gICAgICAgIGlmIChtc2cubWVzc2FnZSkge1xuICAgICAgICAgIGN1cnJlbnQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBsb29wc1tjdXJyZW50LmlkXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgbG9vcHNbbXNnLmlkXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgc3RhY2sucHVzaChjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5MT09QX0VORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfRU5EOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLk9QVF9FTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0VORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQlJFQUtfRU5EOlxuICAgICAgICBjdXJyZW50ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGxvb3BzW2N1cnJlbnQuaWRdID0gY3VycmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUNUSVZFX1NUQVJUOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgYWN0b3JSZWN0ID0gYWN0b3JzLmdldChtc2cuZnJvbSA/IG1zZy5mcm9tIDogbXNnLnRvLmFjdG9yKTtcbiAgICAgICAgICBjb25zdCBzdGFja2VkU2l6ZSA9IGFjdG9yQWN0aXZhdGlvbnMobXNnLmZyb20gPyBtc2cuZnJvbSA6IG1zZy50by5hY3RvcikubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IHggPSBhY3RvclJlY3QueCArIGFjdG9yUmVjdC53aWR0aCAvIDIgKyAoc3RhY2tlZFNpemUgLSAxKSAqIGNvbmYuYWN0aXZhdGlvbldpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB0b0FkZCA9IHtcbiAgICAgICAgICAgIHN0YXJ0eDogeCxcbiAgICAgICAgICAgIHN0b3B4OiB4ICsgY29uZi5hY3RpdmF0aW9uV2lkdGgsXG4gICAgICAgICAgICBhY3RvcjogbXNnLmZyb20sXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBib3VuZHMuYWN0aXZhdGlvbnMucHVzaCh0b0FkZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUNUSVZFX0VORDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxhc3RBY3RvckFjdGl2YXRpb25JZHggPSBib3VuZHMuYWN0aXZhdGlvbnMubWFwKChhKSA9PiBhLmFjdG9yKS5sYXN0SW5kZXhPZihtc2cuZnJvbSk7XG4gICAgICAgICAgYm91bmRzLmFjdGl2YXRpb25zLnNwbGljZShsYXN0QWN0b3JBY3RpdmF0aW9uSWR4LCAxKS5zcGxpY2UoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90ZSA9IG1zZy5wbGFjZW1lbnQgIT09IHZvaWQgMDtcbiAgICBpZiAoaXNOb3RlKSB7XG4gICAgICBub3RlTW9kZWwgPSBhd2FpdCBidWlsZE5vdGVNb2RlbChtc2csIGFjdG9ycywgZGlhZ09iaik7XG4gICAgICBtc2cubm90ZU1vZGVsID0gbm90ZU1vZGVsO1xuICAgICAgc3RhY2suZm9yRWFjaCgoc3RrKSA9PiB7XG4gICAgICAgIGN1cnJlbnQgPSBzdGs7XG4gICAgICAgIGN1cnJlbnQuZnJvbSA9IGNvbW1vbl9kZWZhdWx0LmdldE1pbihjdXJyZW50LmZyb20sIG5vdGVNb2RlbC5zdGFydHgpO1xuICAgICAgICBjdXJyZW50LnRvID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGN1cnJlbnQudG8sIG5vdGVNb2RlbC5zdGFydHggKyBub3RlTW9kZWwud2lkdGgpO1xuICAgICAgICBjdXJyZW50LndpZHRoID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGN1cnJlbnQud2lkdGgsIE1hdGguYWJzKGN1cnJlbnQuZnJvbSAtIGN1cnJlbnQudG8pKSAtIGNvbmYubGFiZWxCb3hXaWR0aDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2dNb2RlbCA9IGJ1aWxkTWVzc2FnZU1vZGVsKG1zZywgYWN0b3JzLCBkaWFnT2JqKTtcbiAgICAgIG1zZy5tc2dNb2RlbCA9IG1zZ01vZGVsO1xuICAgICAgaWYgKG1zZ01vZGVsLnN0YXJ0eCAmJiBtc2dNb2RlbC5zdG9weCAmJiBzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YWNrLmZvckVhY2goKHN0aykgPT4ge1xuICAgICAgICAgIGN1cnJlbnQgPSBzdGs7XG4gICAgICAgICAgaWYgKG1zZ01vZGVsLnN0YXJ0eCA9PT0gbXNnTW9kZWwuc3RvcHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSBhY3RvcnMuZ2V0KG1zZy5mcm9tKTtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gYWN0b3JzLmdldChtc2cudG8pO1xuICAgICAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uX2RlZmF1bHQuZ2V0TWluKFxuICAgICAgICAgICAgICBmcm9tLnggLSBtc2dNb2RlbC53aWR0aCAvIDIsXG4gICAgICAgICAgICAgIGZyb20ueCAtIGZyb20ud2lkdGggLyAyLFxuICAgICAgICAgICAgICBjdXJyZW50LmZyb21cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50LnRvID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgICAgICAgICB0by54ICsgbXNnTW9kZWwud2lkdGggLyAyLFxuICAgICAgICAgICAgICB0by54ICsgZnJvbS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgIGN1cnJlbnQudG9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50LndpZHRoID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGN1cnJlbnQud2lkdGgsIE1hdGguYWJzKGN1cnJlbnQudG8gLSBjdXJyZW50LmZyb20pKSAtIGNvbmYubGFiZWxCb3hXaWR0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uX2RlZmF1bHQuZ2V0TWluKG1zZ01vZGVsLnN0YXJ0eCwgY3VycmVudC5mcm9tKTtcbiAgICAgICAgICAgIGN1cnJlbnQudG8gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgobXNnTW9kZWwuc3RvcHgsIGN1cnJlbnQudG8pO1xuICAgICAgICAgICAgY3VycmVudC53aWR0aCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChjdXJyZW50LndpZHRoLCBtc2dNb2RlbC53aWR0aCkgLSBjb25mLmxhYmVsQm94V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYm91bmRzLmFjdGl2YXRpb25zID0gW107XG4gIGxvZy5kZWJ1ZyhcIkxvb3AgdHlwZSB3aWR0aHM6XCIsIGxvb3BzKTtcbiAgcmV0dXJuIGxvb3BzO1xufSwgXCJjYWxjdWxhdGVMb29wQm91bmRzXCIpO1xudmFyIHNlcXVlbmNlUmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgYm91bmRzLFxuICBkcmF3QWN0b3JzLFxuICBkcmF3QWN0b3JzUG9wdXAsXG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9zZXF1ZW5jZS9zZXF1ZW5jZURpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHNlcXVlbmNlRGlhZ3JhbV9kZWZhdWx0LFxuICBkYjogc2VxdWVuY2VEYl9kZWZhdWx0LFxuICByZW5kZXJlcjogc2VxdWVuY2VSZW5kZXJlcl9kZWZhdWx0LFxuICBzdHlsZXM6IHN0eWxlc19kZWZhdWx0LFxuICBpbml0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IHdyYXAgfSkgPT4ge1xuICAgIHNlcXVlbmNlRGJfZGVmYXVsdC5zZXRXcmFwKHdyYXApO1xuICB9LCBcImluaXRcIilcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgbG9nLFxuICBwYXJzZUdlbmVyaWNUeXBlcyxcbiAgc2FuaXRpemVUZXh0LFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL3BhcnNlci9jbGFzc0RpYWdyYW0uamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCAxN10sICRWMSA9IFsxLCAxOF0sICRWMiA9IFsxLCAxOV0sICRWMyA9IFsxLCAzOV0sICRWNCA9IFsxLCA0MF0sICRWNSA9IFsxLCAyNV0sICRWNiA9IFsxLCAyM10sICRWNyA9IFsxLCAyNF0sICRWOCA9IFsxLCAzMV0sICRWOSA9IFsxLCAzMl0sICRWYSA9IFsxLCAzM10sICRWYiA9IFsxLCAzNF0sICRWYyA9IFsxLCAzNV0sICRWZCA9IFsxLCAzNl0sICRWZSA9IFsxLCAyNl0sICRWZiA9IFsxLCAyN10sICRWZyA9IFsxLCAyOF0sICRWaCA9IFsxLCAyOV0sICRWaSA9IFsxLCA0M10sICRWaiA9IFsxLCAzMF0sICRWayA9IFsxLCA0Ml0sICRWbCA9IFsxLCA0NF0sICRWbSA9IFsxLCA0MV0sICRWbiA9IFsxLCA0NV0sICRWbyA9IFsxLCA5XSwgJFZwID0gWzEsIDgsIDldLCAkVnEgPSBbMSwgNTZdLCAkVnIgPSBbMSwgNTddLCAkVnMgPSBbMSwgNThdLCAkVnQgPSBbMSwgNTldLCAkVnUgPSBbMSwgNjBdLCAkVnYgPSBbMSwgNjFdLCAkVncgPSBbMSwgNjJdLCAkVnggPSBbMSwgOCwgOSwgMzldLCAkVnkgPSBbMSwgNzRdLCAkVnogPSBbMSwgOCwgOSwgMTIsIDEzLCAyMSwgMzcsIDM5LCA0MiwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDcwLCA3Ml0sICRWQSA9IFsxLCA4LCA5LCAxMiwgMTMsIDE5LCAyMSwgMzcsIDM5LCA0MiwgNDYsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA3MCwgNzIsIDc0LCA4MCwgOTUsIDk3LCA5OF0sICRWQiA9IFsxMywgNzQsIDgwLCA5NSwgOTcsIDk4XSwgJFZDID0gWzEzLCA2NCwgNjUsIDc0LCA4MCwgOTUsIDk3LCA5OF0sICRWRCA9IFsxMywgNTksIDYwLCA2MSwgNjIsIDYzLCA3NCwgODAsIDk1LCA5NywgOThdLCAkVkUgPSBbMSwgOTNdLCAkVkYgPSBbMSwgMTEwXSwgJFZHID0gWzEsIDEwOF0sICRWSCA9IFsxLCAxMDJdLCAkVkkgPSBbMSwgMTAzXSwgJFZKID0gWzEsIDEwNF0sICRWSyA9IFsxLCAxMDVdLCAkVkwgPSBbMSwgMTA2XSwgJFZNID0gWzEsIDEwN10sICRWTiA9IFsxLCAxMDldLCAkVk8gPSBbMSwgOCwgOSwgMzcsIDM5LCA0Ml0sICRWUCA9IFsxLCA4LCA5LCAyMV0sICRWUSA9IFsxLCA4LCA5LCA3OF0sICRWUiA9IFsxLCA4LCA5LCAyMSwgNzMsIDc0LCA3OCwgODAsIDgxLCA4MiwgODMsIDg0LCA4NV07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIm1lcm1haWREb2NcIjogNCwgXCJzdGF0ZW1lbnRzXCI6IDUsIFwiZ3JhcGhDb25maWdcIjogNiwgXCJDTEFTU19ESUFHUkFNXCI6IDcsIFwiTkVXTElORVwiOiA4LCBcIkVPRlwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJjbGFzc0xhYmVsXCI6IDExLCBcIlNRU1wiOiAxMiwgXCJTVFJcIjogMTMsIFwiU1FFXCI6IDE0LCBcIm5hbWVzcGFjZU5hbWVcIjogMTUsIFwiYWxwaGFOdW1Ub2tlblwiOiAxNiwgXCJjbGFzc05hbWVcIjogMTcsIFwiY2xhc3NMaXRlcmFsTmFtZVwiOiAxOCwgXCJHRU5FUklDVFlQRVwiOiAxOSwgXCJyZWxhdGlvblN0YXRlbWVudFwiOiAyMCwgXCJMQUJFTFwiOiAyMSwgXCJuYW1lc3BhY2VTdGF0ZW1lbnRcIjogMjIsIFwiY2xhc3NTdGF0ZW1lbnRcIjogMjMsIFwibWVtYmVyU3RhdGVtZW50XCI6IDI0LCBcImFubm90YXRpb25TdGF0ZW1lbnRcIjogMjUsIFwiY2xpY2tTdGF0ZW1lbnRcIjogMjYsIFwic3R5bGVTdGF0ZW1lbnRcIjogMjcsIFwiY3NzQ2xhc3NTdGF0ZW1lbnRcIjogMjgsIFwibm90ZVN0YXRlbWVudFwiOiAyOSwgXCJkaXJlY3Rpb25cIjogMzAsIFwiYWNjX3RpdGxlXCI6IDMxLCBcImFjY190aXRsZV92YWx1ZVwiOiAzMiwgXCJhY2NfZGVzY3JcIjogMzMsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDM0LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMzUsIFwibmFtZXNwYWNlSWRlbnRpZmllclwiOiAzNiwgXCJTVFJVQ1RfU1RBUlRcIjogMzcsIFwiY2xhc3NTdGF0ZW1lbnRzXCI6IDM4LCBcIlNUUlVDVF9TVE9QXCI6IDM5LCBcIk5BTUVTUEFDRVwiOiA0MCwgXCJjbGFzc0lkZW50aWZpZXJcIjogNDEsIFwiU1RZTEVfU0VQQVJBVE9SXCI6IDQyLCBcIm1lbWJlcnNcIjogNDMsIFwiQ0xBU1NcIjogNDQsIFwiQU5OT1RBVElPTl9TVEFSVFwiOiA0NSwgXCJBTk5PVEFUSU9OX0VORFwiOiA0NiwgXCJNRU1CRVJcIjogNDcsIFwiU0VQQVJBVE9SXCI6IDQ4LCBcInJlbGF0aW9uXCI6IDQ5LCBcIk5PVEVfRk9SXCI6IDUwLCBcIm5vdGVUZXh0XCI6IDUxLCBcIk5PVEVcIjogNTIsIFwiZGlyZWN0aW9uX3RiXCI6IDUzLCBcImRpcmVjdGlvbl9idFwiOiA1NCwgXCJkaXJlY3Rpb25fcmxcIjogNTUsIFwiZGlyZWN0aW9uX2xyXCI6IDU2LCBcInJlbGF0aW9uVHlwZVwiOiA1NywgXCJsaW5lVHlwZVwiOiA1OCwgXCJBR0dSRUdBVElPTlwiOiA1OSwgXCJFWFRFTlNJT05cIjogNjAsIFwiQ09NUE9TSVRJT05cIjogNjEsIFwiREVQRU5ERU5DWVwiOiA2MiwgXCJMT0xMSVBPUFwiOiA2MywgXCJMSU5FXCI6IDY0LCBcIkRPVFRFRF9MSU5FXCI6IDY1LCBcIkNBTExCQUNLXCI6IDY2LCBcIkxJTktcIjogNjcsIFwiTElOS19UQVJHRVRcIjogNjgsIFwiQ0xJQ0tcIjogNjksIFwiQ0FMTEJBQ0tfTkFNRVwiOiA3MCwgXCJDQUxMQkFDS19BUkdTXCI6IDcxLCBcIkhSRUZcIjogNzIsIFwiU1RZTEVcIjogNzMsIFwiQUxQSEFcIjogNzQsIFwic3R5bGVzT3B0XCI6IDc1LCBcIkNTU0NMQVNTXCI6IDc2LCBcInN0eWxlXCI6IDc3LCBcIkNPTU1BXCI6IDc4LCBcInN0eWxlQ29tcG9uZW50XCI6IDc5LCBcIk5VTVwiOiA4MCwgXCJDT0xPTlwiOiA4MSwgXCJVTklUXCI6IDgyLCBcIlNQQUNFXCI6IDgzLCBcIkJSS1RcIjogODQsIFwiUENUXCI6IDg1LCBcImNvbW1lbnRUb2tlblwiOiA4NiwgXCJ0ZXh0VG9rZW5cIjogODcsIFwiZ3JhcGhDb2RlVG9rZW5zXCI6IDg4LCBcInRleHROb1RhZ3NUb2tlblwiOiA4OSwgXCJUQUdTVEFSVFwiOiA5MCwgXCJUQUdFTkRcIjogOTEsIFwiPT1cIjogOTIsIFwiLS1cIjogOTMsIFwiREVGQVVMVFwiOiA5NCwgXCJNSU5VU1wiOiA5NSwgXCJrZXl3b3Jkc1wiOiA5NiwgXCJVTklDT0RFX1RFWFRcIjogOTcsIFwiQlFVT1RFX1NUUlwiOiA5OCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDc6IFwiQ0xBU1NfRElBR1JBTVwiLCA4OiBcIk5FV0xJTkVcIiwgOTogXCJFT0ZcIiwgMTI6IFwiU1FTXCIsIDEzOiBcIlNUUlwiLCAxNDogXCJTUUVcIiwgMTk6IFwiR0VORVJJQ1RZUEVcIiwgMjE6IFwiTEFCRUxcIiwgMzE6IFwiYWNjX3RpdGxlXCIsIDMyOiBcImFjY190aXRsZV92YWx1ZVwiLCAzMzogXCJhY2NfZGVzY3JcIiwgMzQ6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDM1OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMzc6IFwiU1RSVUNUX1NUQVJUXCIsIDM5OiBcIlNUUlVDVF9TVE9QXCIsIDQwOiBcIk5BTUVTUEFDRVwiLCA0MjogXCJTVFlMRV9TRVBBUkFUT1JcIiwgNDQ6IFwiQ0xBU1NcIiwgNDU6IFwiQU5OT1RBVElPTl9TVEFSVFwiLCA0NjogXCJBTk5PVEFUSU9OX0VORFwiLCA0NzogXCJNRU1CRVJcIiwgNDg6IFwiU0VQQVJBVE9SXCIsIDUwOiBcIk5PVEVfRk9SXCIsIDUyOiBcIk5PVEVcIiwgNTM6IFwiZGlyZWN0aW9uX3RiXCIsIDU0OiBcImRpcmVjdGlvbl9idFwiLCA1NTogXCJkaXJlY3Rpb25fcmxcIiwgNTY6IFwiZGlyZWN0aW9uX2xyXCIsIDU5OiBcIkFHR1JFR0FUSU9OXCIsIDYwOiBcIkVYVEVOU0lPTlwiLCA2MTogXCJDT01QT1NJVElPTlwiLCA2MjogXCJERVBFTkRFTkNZXCIsIDYzOiBcIkxPTExJUE9QXCIsIDY0OiBcIkxJTkVcIiwgNjU6IFwiRE9UVEVEX0xJTkVcIiwgNjY6IFwiQ0FMTEJBQ0tcIiwgNjc6IFwiTElOS1wiLCA2ODogXCJMSU5LX1RBUkdFVFwiLCA2OTogXCJDTElDS1wiLCA3MDogXCJDQUxMQkFDS19OQU1FXCIsIDcxOiBcIkNBTExCQUNLX0FSR1NcIiwgNzI6IFwiSFJFRlwiLCA3MzogXCJTVFlMRVwiLCA3NDogXCJBTFBIQVwiLCA3NjogXCJDU1NDTEFTU1wiLCA3ODogXCJDT01NQVwiLCA4MDogXCJOVU1cIiwgODE6IFwiQ09MT05cIiwgODI6IFwiVU5JVFwiLCA4MzogXCJTUEFDRVwiLCA4NDogXCJCUktUXCIsIDg1OiBcIlBDVFwiLCA4ODogXCJncmFwaENvZGVUb2tlbnNcIiwgOTA6IFwiVEFHU1RBUlRcIiwgOTE6IFwiVEFHRU5EXCIsIDkyOiBcIj09XCIsIDkzOiBcIi0tXCIsIDk0OiBcIkRFRkFVTFRcIiwgOTU6IFwiTUlOVVNcIiwgOTY6IFwia2V5d29yZHNcIiwgOTc6IFwiVU5JQ09ERV9URVhUXCIsIDk4OiBcIkJRVU9URV9TVFJcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDFdLCBbNCwgMV0sIFs2LCA0XSwgWzUsIDFdLCBbNSwgMl0sIFs1LCAzXSwgWzExLCAzXSwgWzE1LCAxXSwgWzE1LCAyXSwgWzE3LCAxXSwgWzE3LCAxXSwgWzE3LCAyXSwgWzE3LCAyXSwgWzE3LCAyXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzIyLCA0XSwgWzIyLCA1XSwgWzM2LCAyXSwgWzM4LCAxXSwgWzM4LCAyXSwgWzM4LCAzXSwgWzIzLCAxXSwgWzIzLCAzXSwgWzIzLCA0XSwgWzIzLCA2XSwgWzQxLCAyXSwgWzQxLCAzXSwgWzI1LCA0XSwgWzQzLCAxXSwgWzQzLCAyXSwgWzI0LCAxXSwgWzI0LCAyXSwgWzI0LCAxXSwgWzI0LCAxXSwgWzIwLCAzXSwgWzIwLCA0XSwgWzIwLCA0XSwgWzIwLCA1XSwgWzI5LCAzXSwgWzI5LCAyXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzQ5LCAzXSwgWzQ5LCAyXSwgWzQ5LCAyXSwgWzQ5LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU4LCAxXSwgWzU4LCAxXSwgWzI2LCAzXSwgWzI2LCA0XSwgWzI2LCAzXSwgWzI2LCA0XSwgWzI2LCA0XSwgWzI2LCA1XSwgWzI2LCAzXSwgWzI2LCA0XSwgWzI2LCA0XSwgWzI2LCA1XSwgWzI2LCA0XSwgWzI2LCA1XSwgWzI2LCA1XSwgWzI2LCA2XSwgWzI3LCAzXSwgWzI4LCAzXSwgWzc1LCAxXSwgWzc1LCAzXSwgWzc3LCAxXSwgWzc3LCAyXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg5LCAxXSwgWzg5LCAxXSwgWzg5LCAxXSwgWzg5LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE4LCAxXSwgWzUxLCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiflwiICsgJCRbJDBdICsgXCJ+XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb24oJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAkJFskMCAtIDFdLnRpdGxlID0geXkuY2xlYW51cExhYmVsKCQkWyQwXSk7XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb24oJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB5eS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgeXkuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKCQkWyQwIC0gNF0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICB5eS5hZGROYW1lc3BhY2UoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgJCRbJDBdLnVuc2hpZnQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIHl5LnNldENzc0NsYXNzKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgeXkuYWRkTWVtYmVycygkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB5eS5zZXRDc3NDbGFzcygkJFskMCAtIDVdLCAkJFskMCAtIDNdKTtcbiAgICAgICAgICB5eS5hZGRNZW1iZXJzKCQkWyQwIC0gNV0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICB5eS5hZGRDbGFzcygkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgeXkuYWRkQ2xhc3MoJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0Q2xhc3NMYWJlbCgkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIHl5LmFkZEFubm90YXRpb24oJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAkJFskMF0ucHVzaCgkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgeXkuYWRkTWVtYmVyKCQkWyQwIC0gMV0sIHl5LmNsZWFudXBMYWJlbCgkJFskMF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICB0aGlzLiQgPSB7IFwiaWQxXCI6ICQkWyQwIC0gMl0sIFwiaWQyXCI6ICQkWyQwXSwgcmVsYXRpb246ICQkWyQwIC0gMV0sIHJlbGF0aW9uVGl0bGUxOiBcIm5vbmVcIiwgcmVsYXRpb25UaXRsZTI6IFwibm9uZVwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgdGhpcy4kID0geyBpZDE6ICQkWyQwIC0gM10sIGlkMjogJCRbJDBdLCByZWxhdGlvbjogJCRbJDAgLSAxXSwgcmVsYXRpb25UaXRsZTE6ICQkWyQwIC0gMl0sIHJlbGF0aW9uVGl0bGUyOiBcIm5vbmVcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHRoaXMuJCA9IHsgaWQxOiAkJFskMCAtIDNdLCBpZDI6ICQkWyQwXSwgcmVsYXRpb246ICQkWyQwIC0gMl0sIHJlbGF0aW9uVGl0bGUxOiBcIm5vbmVcIiwgcmVsYXRpb25UaXRsZTI6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkMTogJCRbJDAgLSA0XSwgaWQyOiAkJFskMF0sIHJlbGF0aW9uOiAkJFskMCAtIDJdLCByZWxhdGlvblRpdGxlMTogJCRbJDAgLSAzXSwgcmVsYXRpb25UaXRsZTI6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB5eS5hZGROb3RlKCQkWyQwXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgeXkuYWRkTm90ZSgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlRCXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIkJUXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlJMXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIkxSXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTE6ICQkWyQwIC0gMl0sIHR5cGUyOiAkJFskMF0sIGxpbmVUeXBlOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogXCJub25lXCIsIHR5cGUyOiAkJFskMF0sIGxpbmVUeXBlOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogJCRbJDAgLSAxXSwgdHlwZTI6IFwibm9uZVwiLCBsaW5lVHlwZTogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogXCJub25lXCIsIHR5cGUyOiBcIm5vbmVcIiwgbGluZVR5cGU6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5yZWxhdGlvblR5cGUuRVhURU5TSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5yZWxhdGlvblR5cGUuTE9MTElQT1A7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgdGhpcy4kID0geXkubGluZVR5cGUuTElORTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5saW5lVHlwZS5ET1RURURfTElORTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDJdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gM10sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA1XTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gNF0sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDRdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIHl5LnNldENzc1N0eWxlKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgeXkuc2V0Q3NzQ2xhc3MoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICAkJFskMCAtIDJdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDU6IDMsIDY6IDQsIDc6IFsxLCA2XSwgMTA6IDUsIDE2OiAzNywgMTc6IDIwLCAxODogMzgsIDIwOiA3LCAyMjogOCwgMjM6IDksIDI0OiAxMCwgMjU6IDExLCAyNjogMTIsIDI3OiAxMywgMjg6IDE0LCAyOTogMTUsIDMwOiAxNiwgMzE6ICRWMCwgMzM6ICRWMSwgMzU6ICRWMiwgMzY6IDIxLCA0MDogJFYzLCA0MTogMjIsIDQ0OiAkVjQsIDQ1OiAkVjUsIDQ3OiAkVjYsIDQ4OiAkVjcsIDUwOiAkVjgsIDUyOiAkVjksIDUzOiAkVmEsIDU0OiAkVmIsIDU1OiAkVmMsIDU2OiAkVmQsIDY2OiAkVmUsIDY3OiAkVmYsIDY5OiAkVmcsIDczOiAkVmgsIDc0OiAkVmksIDc2OiAkVmosIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgM10gfSwgbygkVm8sIFsyLCA1XSwgeyA4OiBbMSwgNDZdIH0pLCB7IDg6IFsxLCA0N10gfSwgbygkVnAsIFsyLCAxNl0sIHsgMjE6IFsxLCA0OF0gfSksIG8oJFZwLCBbMiwgMThdKSwgbygkVnAsIFsyLCAxOV0pLCBvKCRWcCwgWzIsIDIwXSksIG8oJFZwLCBbMiwgMjFdKSwgbygkVnAsIFsyLCAyMl0pLCBvKCRWcCwgWzIsIDIzXSksIG8oJFZwLCBbMiwgMjRdKSwgbygkVnAsIFsyLCAyNV0pLCBvKCRWcCwgWzIsIDI2XSksIHsgMzI6IFsxLCA0OV0gfSwgeyAzNDogWzEsIDUwXSB9LCBvKCRWcCwgWzIsIDI5XSksIG8oJFZwLCBbMiwgNDVdLCB7IDQ5OiA1MSwgNTc6IDU0LCA1ODogNTUsIDEzOiBbMSwgNTJdLCAyMTogWzEsIDUzXSwgNTk6ICRWcSwgNjA6ICRWciwgNjE6ICRWcywgNjI6ICRWdCwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdyB9KSwgeyAzNzogWzEsIDYzXSB9LCBvKCRWeCwgWzIsIDM2XSwgeyAzNzogWzEsIDY1XSwgNDI6IFsxLCA2NF0gfSksIG8oJFZwLCBbMiwgNDddKSwgbygkVnAsIFsyLCA0OF0pLCB7IDE2OiA2NiwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSB9LCB7IDE2OiAzNywgMTc6IDY3LCAxODogMzgsIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgeyAxNjogMzcsIDE3OiA2OCwgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMTY6IDM3LCAxNzogNjksIDE4OiAzOCwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCB7IDc0OiBbMSwgNzBdIH0sIHsgMTM6IFsxLCA3MV0gfSwgeyAxNjogMzcsIDE3OiA3MiwgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMTM6ICRWeSwgNTE6IDczIH0sIG8oJFZwLCBbMiwgNTVdKSwgbygkVnAsIFsyLCA1Nl0pLCBvKCRWcCwgWzIsIDU3XSksIG8oJFZwLCBbMiwgNThdKSwgbygkVnosIFsyLCAxMV0sIHsgMTY6IDM3LCAxODogMzgsIDE3OiA3NSwgMTk6IFsxLCA3Nl0sIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSksIG8oJFZ6LCBbMiwgMTJdLCB7IDE5OiBbMSwgNzddIH0pLCB7IDE1OiA3OCwgMTY6IDc5LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtIH0sIHsgMTY6IDM3LCAxNzogODAsIDE4OiAzOCwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCBvKCRWQSwgWzIsIDExMl0pLCBvKCRWQSwgWzIsIDExM10pLCBvKCRWQSwgWzIsIDExNF0pLCBvKCRWQSwgWzIsIDExNV0pLCBvKFsxLCA4LCA5LCAxMiwgMTMsIDE5LCAyMSwgMzcsIDM5LCA0MiwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDcwLCA3Ml0sIFsyLCAxMTZdKSwgbygkVm8sIFsyLCA2XSwgeyAxMDogNSwgMjA6IDcsIDIyOiA4LCAyMzogOSwgMjQ6IDEwLCAyNTogMTEsIDI2OiAxMiwgMjc6IDEzLCAyODogMTQsIDI5OiAxNSwgMzA6IDE2LCAxNzogMjAsIDM2OiAyMSwgNDE6IDIyLCAxNjogMzcsIDE4OiAzOCwgNTogODEsIDMxOiAkVjAsIDMzOiAkVjEsIDM1OiAkVjIsIDQwOiAkVjMsIDQ0OiAkVjQsIDQ1OiAkVjUsIDQ3OiAkVjYsIDQ4OiAkVjcsIDUwOiAkVjgsIDUyOiAkVjksIDUzOiAkVmEsIDU0OiAkVmIsIDU1OiAkVmMsIDU2OiAkVmQsIDY2OiAkVmUsIDY3OiAkVmYsIDY5OiAkVmcsIDczOiAkVmgsIDc0OiAkVmksIDc2OiAkVmosIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSksIHsgNTogODIsIDEwOiA1LCAxNjogMzcsIDE3OiAyMCwgMTg6IDM4LCAyMDogNywgMjI6IDgsIDIzOiA5LCAyNDogMTAsIDI1OiAxMSwgMjY6IDEyLCAyNzogMTMsIDI4OiAxNCwgMjk6IDE1LCAzMDogMTYsIDMxOiAkVjAsIDMzOiAkVjEsIDM1OiAkVjIsIDM2OiAyMSwgNDA6ICRWMywgNDE6IDIyLCA0NDogJFY0LCA0NTogJFY1LCA0NzogJFY2LCA0ODogJFY3LCA1MDogJFY4LCA1MjogJFY5LCA1MzogJFZhLCA1NDogJFZiLCA1NTogJFZjLCA1NjogJFZkLCA2NjogJFZlLCA2NzogJFZmLCA2OTogJFZnLCA3MzogJFZoLCA3NDogJFZpLCA3NjogJFZqLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIG8oJFZwLCBbMiwgMTddKSwgbygkVnAsIFsyLCAyN10pLCBvKCRWcCwgWzIsIDI4XSksIHsgMTM6IFsxLCA4NF0sIDE2OiAzNywgMTc6IDgzLCAxODogMzgsIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgeyA0OTogODUsIDU3OiA1NCwgNTg6IDU1LCA1OTogJFZxLCA2MDogJFZyLCA2MTogJFZzLCA2MjogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3IH0sIG8oJFZwLCBbMiwgNDZdKSwgeyA1ODogODYsIDY0OiAkVnYsIDY1OiAkVncgfSwgbygkVkIsIFsyLCA2Ml0sIHsgNTc6IDg3LCA1OTogJFZxLCA2MDogJFZyLCA2MTogJFZzLCA2MjogJFZ0LCA2MzogJFZ1IH0pLCBvKCRWQywgWzIsIDYzXSksIG8oJFZDLCBbMiwgNjRdKSwgbygkVkMsIFsyLCA2NV0pLCBvKCRWQywgWzIsIDY2XSksIG8oJFZDLCBbMiwgNjddKSwgbygkVkQsIFsyLCA2OF0pLCBvKCRWRCwgWzIsIDY5XSksIHsgODogWzEsIDg5XSwgMjM6IDkwLCAzODogODgsIDQxOiAyMiwgNDQ6ICRWNCB9LCB7IDE2OiA5MSwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSB9LCB7IDQzOiA5MiwgNDc6ICRWRSB9LCB7IDQ2OiBbMSwgOTRdIH0sIHsgMTM6IFsxLCA5NV0gfSwgeyAxMzogWzEsIDk2XSB9LCB7IDcwOiBbMSwgOTddLCA3MjogWzEsIDk4XSB9LCB7IDIxOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc1OiA5OSwgNzc6IDEwMCwgNzk6IDEwMSwgODA6ICRWSSwgODE6ICRWSiwgODI6ICRWSywgODM6ICRWTCwgODQ6ICRWTSwgODU6ICRWTiB9LCB7IDc0OiBbMSwgMTExXSB9LCB7IDEzOiAkVnksIDUxOiAxMTIgfSwgbygkVnAsIFsyLCA1NF0pLCBvKCRWcCwgWzIsIDExN10pLCBvKCRWeiwgWzIsIDEzXSksIG8oJFZ6LCBbMiwgMTRdKSwgbygkVnosIFsyLCAxNV0pLCB7IDM3OiBbMiwgMzJdIH0sIHsgMTU6IDExMywgMTY6IDc5LCAzNzogWzIsIDldLCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtIH0sIG8oJFZPLCBbMiwgNDBdLCB7IDExOiAxMTQsIDEyOiBbMSwgMTE1XSB9KSwgbygkVm8sIFsyLCA3XSksIHsgOTogWzEsIDExNl0gfSwgbygkVlAsIFsyLCA0OV0pLCB7IDE2OiAzNywgMTc6IDExNywgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMTM6IFsxLCAxMTldLCAxNjogMzcsIDE3OiAxMTgsIDE4OiAzOCwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCBvKCRWQiwgWzIsIDYxXSwgeyA1NzogMTIwLCA1OTogJFZxLCA2MDogJFZyLCA2MTogJFZzLCA2MjogJFZ0LCA2MzogJFZ1IH0pLCBvKCRWQiwgWzIsIDYwXSksIHsgMzk6IFsxLCAxMjFdIH0sIHsgMjM6IDkwLCAzODogMTIyLCA0MTogMjIsIDQ0OiAkVjQgfSwgeyA4OiBbMSwgMTIzXSwgMzk6IFsyLCAzM10gfSwgbygkVngsIFsyLCAzN10sIHsgMzc6IFsxLCAxMjRdIH0pLCB7IDM5OiBbMSwgMTI1XSB9LCB7IDM5OiBbMiwgNDNdLCA0MzogMTI2LCA0NzogJFZFIH0sIHsgMTY6IDM3LCAxNzogMTI3LCAxODogMzgsIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgbygkVnAsIFsyLCA3MF0sIHsgMTM6IFsxLCAxMjhdIH0pLCBvKCRWcCwgWzIsIDcyXSwgeyAxMzogWzEsIDEzMF0sIDY4OiBbMSwgMTI5XSB9KSwgbygkVnAsIFsyLCA3Nl0sIHsgMTM6IFsxLCAxMzFdLCA3MTogWzEsIDEzMl0gfSksIHsgMTM6IFsxLCAxMzNdIH0sIG8oJFZwLCBbMiwgODRdLCB7IDc4OiBbMSwgMTM0XSB9KSwgbygkVlEsIFsyLCA4Nl0sIHsgNzk6IDEzNSwgMjE6ICRWRiwgNzM6ICRWRywgNzQ6ICRWSCwgODA6ICRWSSwgODE6ICRWSiwgODI6ICRWSywgODM6ICRWTCwgODQ6ICRWTSwgODU6ICRWTiB9KSwgbygkVlIsIFsyLCA4OF0pLCBvKCRWUiwgWzIsIDkwXSksIG8oJFZSLCBbMiwgOTFdKSwgbygkVlIsIFsyLCA5Ml0pLCBvKCRWUiwgWzIsIDkzXSksIG8oJFZSLCBbMiwgOTRdKSwgbygkVlIsIFsyLCA5NV0pLCBvKCRWUiwgWzIsIDk2XSksIG8oJFZSLCBbMiwgOTddKSwgbygkVlIsIFsyLCA5OF0pLCBvKCRWcCwgWzIsIDg1XSksIG8oJFZwLCBbMiwgNTNdKSwgeyAzNzogWzIsIDEwXSB9LCBvKCRWTywgWzIsIDQxXSksIHsgMTM6IFsxLCAxMzZdIH0sIHsgMTogWzIsIDRdIH0sIG8oJFZQLCBbMiwgNTFdKSwgbygkVlAsIFsyLCA1MF0pLCB7IDE2OiAzNywgMTc6IDEzNywgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIG8oJFZCLCBbMiwgNTldKSwgbygkVnAsIFsyLCAzMF0pLCB7IDM5OiBbMSwgMTM4XSB9LCB7IDIzOiA5MCwgMzg6IDEzOSwgMzk6IFsyLCAzNF0sIDQxOiAyMiwgNDQ6ICRWNCB9LCB7IDQzOiAxNDAsIDQ3OiAkVkUgfSwgbygkVngsIFsyLCAzOF0pLCB7IDM5OiBbMiwgNDRdIH0sIG8oJFZwLCBbMiwgNDJdKSwgbygkVnAsIFsyLCA3MV0pLCBvKCRWcCwgWzIsIDczXSksIG8oJFZwLCBbMiwgNzRdLCB7IDY4OiBbMSwgMTQxXSB9KSwgbygkVnAsIFsyLCA3N10pLCBvKCRWcCwgWzIsIDc4XSwgeyAxMzogWzEsIDE0Ml0gfSksIG8oJFZwLCBbMiwgODBdLCB7IDEzOiBbMSwgMTQ0XSwgNjg6IFsxLCAxNDNdIH0pLCB7IDIxOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc3OiAxNDUsIDc5OiAxMDEsIDgwOiAkVkksIDgxOiAkVkosIDgyOiAkVkssIDgzOiAkVkwsIDg0OiAkVk0sIDg1OiAkVk4gfSwgbygkVlIsIFsyLCA4OV0pLCB7IDE0OiBbMSwgMTQ2XSB9LCBvKCRWUCwgWzIsIDUyXSksIG8oJFZwLCBbMiwgMzFdKSwgeyAzOTogWzIsIDM1XSB9LCB7IDM5OiBbMSwgMTQ3XSB9LCBvKCRWcCwgWzIsIDc1XSksIG8oJFZwLCBbMiwgNzldKSwgbygkVnAsIFsyLCA4MV0pLCBvKCRWcCwgWzIsIDgyXSwgeyA2ODogWzEsIDE0OF0gfSksIG8oJFZRLCBbMiwgODddLCB7IDc5OiAxMzUsIDIxOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDgwOiAkVkksIDgxOiAkVkosIDgyOiAkVkssIDgzOiAkVkwsIDg0OiAkVk0sIDg1OiAkVk4gfSksIG8oJFZPLCBbMiwgOF0pLCBvKCRWeCwgWzIsIDM5XSksIG8oJFZwLCBbMiwgODNdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMjogWzIsIDFdLCAzOiBbMiwgMl0sIDQ6IFsyLCAzXSwgNzg6IFsyLCAzMl0sIDExMzogWzIsIDEwXSwgMTE2OiBbMiwgNF0sIDEyNjogWzIsIDQ0XSwgMTM5OiBbMiwgMzVdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiBcIkVER0VfU1RBVEVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2tfbmFtZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNhbGxiYWNrX2FyZ3NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIDcwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gNzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiBcIlNUUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDczO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJuYW1lc3BhY2VcIik7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJuYW1lc3BhY2UtYm9keVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIFwiRU9GX0lOX1NUUlVDVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gXCJFREdFX1NUQVRFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsYXNzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsYXNzLWJvZHlcIik7XG4gICAgICAgICAgICByZXR1cm4gMzc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDM5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiBcIkVPRl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gXCJFREdFX1NUQVRFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIFwiT1BFTl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgcmV0dXJuIFwiTUVNQkVSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgcmV0dXJuIDc2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHJldHVybiA2NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gNjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICByZXR1cm4gNzI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiBcIkdFTkVSSUNUWVBFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImdlbmVyaWNcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHJldHVybiBcIkJRVU9URV9TVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYnFzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIHJldHVybiA2MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICByZXR1cm4gNjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgICAgcmV0dXJuIDY1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgICAgcmV0dXJuIDk1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICAgIHJldHVybiBcIkRPVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgIHJldHVybiBcIlBMVVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICByZXR1cm4gODE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgICAgcmV0dXJuIDc4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MzpcbiAgICAgICAgICAgIHJldHVybiA4NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODQ6XG4gICAgICAgICAgICByZXR1cm4gODQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg1OlxuICAgICAgICAgICAgcmV0dXJuIDg1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICAgIHJldHVybiBcIkVRVUFMU1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICAgIHJldHVybiBcIkVRVUFMU1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4ODpcbiAgICAgICAgICAgIHJldHVybiA3NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODk6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgIHJldHVybiBcIlBVTkNUVUFUSU9OXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgcmV0dXJuIDgwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgIHJldHVybiA5NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgICByZXR1cm4gODM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgcmV0dXJuIDgzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICAgIHJldHVybiA5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1JMW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvLCAvXig/OiUlKD8hXFx7KSpbXlxcbl0qKFxccj9cXG4/KSspLywgL14oPzolJVteXFxuXSooXFxyP1xcbikqKS8sIC9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86Y2xhc3NEaWFncmFtLXYyXFxiKS8sIC9eKD86Y2xhc3NEaWFncmFtXFxiKS8sIC9eKD86XFxbXFwqXFxdKS8sIC9eKD86Y2FsbFtcXHNdKykvLCAvXig/OlxcKFtcXHNdKlxcKSkvLCAvXig/OlxcKCkvLCAvXig/OlteKF0qKS8sIC9eKD86XFwpKS8sIC9eKD86W14pXSopLywgL14oPzpbXCJdKS8sIC9eKD86W15cIl0qKS8sIC9eKD86W1wiXSkvLCAvXig/OnN0eWxlXFxiKS8sIC9eKD86bmFtZXNwYWNlXFxiKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86W3tdKS8sIC9eKD86W31dKS8sIC9eKD86JCkvLCAvXig/OlxccyooXFxyP1xcbikrKS8sIC9eKD86XFxzKykvLCAvXig/OlxcW1xcKlxcXSkvLCAvXig/OmNsYXNzXFxiKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86W31dKS8sIC9eKD86W3tdKS8sIC9eKD86W31dKS8sIC9eKD86JCkvLCAvXig/OlxcW1xcKlxcXSkvLCAvXig/Olt7XSkvLCAvXig/OltcXG5dKS8sIC9eKD86W157fVxcbl0qKS8sIC9eKD86Y3NzQ2xhc3NcXGIpLywgL14oPzpjYWxsYmFja1xcYikvLCAvXig/OmxpbmtcXGIpLywgL14oPzpjbGlja1xcYikvLCAvXig/Om5vdGUgZm9yXFxiKS8sIC9eKD86bm90ZVxcYikvLCAvXig/Ojw8KS8sIC9eKD86Pj4pLywgL14oPzpocmVmXFxiKS8sIC9eKD86W35dKS8sIC9eKD86W15+XSopLywgL14oPzp+KS8sIC9eKD86W2BdKS8sIC9eKD86W15gXSspLywgL14oPzpbYF0pLywgL14oPzpfc2VsZlxcYikvLCAvXig/Ol9ibGFua1xcYikvLCAvXig/Ol9wYXJlbnRcXGIpLywgL14oPzpfdG9wXFxiKS8sIC9eKD86XFxzKjxcXHwpLywgL14oPzpcXHMqXFx8PikvLCAvXig/Olxccyo+KS8sIC9eKD86XFxzKjwpLywgL14oPzpcXHMqXFwqKS8sIC9eKD86XFxzKm9cXGIpLywgL14oPzpcXHMqXFwoXFwpKS8sIC9eKD86LS0pLywgL14oPzpcXC5cXC4pLywgL14oPzo6ezF9W146XFxuO10rKS8sIC9eKD86OnszfSkvLCAvXig/Oi0pLywgL14oPzpcXC4pLywgL14oPzpcXCspLywgL14oPzo6KS8sIC9eKD86LCkvLCAvXig/OiMpLywgL14oPzojKS8sIC9eKD86JSkvLCAvXig/Oj0pLywgL14oPzo9KS8sIC9eKD86XFx3KykvLCAvXig/OlxcWykvLCAvXig/OlxcXSkvLCAvXig/OlshXCIjJCUmJyorLC0uYD9cXFxcL10pLywgL14oPzpbMC05XSspLywgL14oPzpbXFx1MDBBQVxcdTAwQjVcXHUwMEJBXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XXxbXFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N118W1xcdTAzN0EtXFx1MDM3RFxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XXxbXFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQV18W1xcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRV18W1xcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFdfFtcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwXXxbXFx1MDhBMi1cXHUwOEFDXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5NzddfFtcXHUwOTc5LVxcdTA5N0ZcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJdfFtcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFdfFtcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOV18W1xcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThdfFtcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENdfFtcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNdfFtcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XXxbXFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMF18W1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0RdfFtcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXXxbXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXXxbXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMV18W1xcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFdfFtcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNdfFtcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNl18W1xcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFdfFtcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXXxbXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXXxbXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMF18W1xcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBdfFtcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNdfFtcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFdfFtcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XXxbXFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNdfFtcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZdfFtcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZdfFtcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNdfFtcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRF18W1xcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RF18W1xcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNdfFtcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3Rl18W1xcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOF18W1xcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NF18W1xcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXXxbXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XXxbXFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXXxbXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NdfFtcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRdfFtcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NdfFtcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQl18W1xcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5N1xcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OF18W1xcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgwMVxcdUE4MDMtXFx1QTgwNV18W1xcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJdfFtcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QUEwMC1cXHVBQTI4XXxbXFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBODAtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XXxbXFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XXxbXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXXxbXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXXxbXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNl18W1xcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXXxbXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXXxbXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXXxbXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXSkvLCAvXig/OlxccykvLCAvXig/OlxccykvLCAvXig/OiQpL10sXG4gICAgICBjb25kaXRpb25zOiB7IFwibmFtZXNwYWNlLWJvZHlcIjogeyBcInJ1bGVzXCI6IFsyNiwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm5hbWVzcGFjZVwiOiB7IFwicnVsZXNcIjogWzI2LCAyOCwgMjksIDMwLCAzMSwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsYXNzLWJvZHlcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsYXNzXCI6IHsgXCJydWxlc1wiOiBbMjYsIDM4LCAzOSwgNDAsIDQxLCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1OSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzExLCAxMiwgMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFs5LCAyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzcsIDI2LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1OSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2FsbGJhY2tfYXJnc1wiOiB7IFwicnVsZXNcIjogWzIyLCAyMywgMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjYWxsYmFja19uYW1lXCI6IHsgXCJydWxlc1wiOiBbMTksIDIwLCAyMSwgMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJocmVmXCI6IHsgXCJydWxlc1wiOiBbMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJ1Y3RcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImdlbmVyaWNcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYnFzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbMjQsIDI1LCAyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMjYsIDI3LCAyOCwgMzcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTZdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgY2xhc3NEaWFncmFtX2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc0RiLnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzVHlwZXMudHNcbnZhciB2aXNpYmlsaXR5VmFsdWVzID0gW1wiI1wiLCBcIitcIiwgXCJ+XCIsIFwiLVwiLCBcIlwiXTtcbnZhciBDbGFzc01lbWJlciA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJDbGFzc01lbWJlclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihpbnB1dCwgbWVtYmVyVHlwZSkge1xuICAgIHRoaXMubWVtYmVyVHlwZSA9IG1lbWJlclR5cGU7XG4gICAgdGhpcy52aXNpYmlsaXR5ID0gXCJcIjtcbiAgICB0aGlzLmNsYXNzaWZpZXIgPSBcIlwiO1xuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVUZXh0KGlucHV0LCBnZXRDb25maWcoKSk7XG4gICAgdGhpcy5wYXJzZU1lbWJlcihzYW5pdGl6ZWRJbnB1dCk7XG4gIH1cbiAgZ2V0RGlzcGxheURldGFpbHMoKSB7XG4gICAgbGV0IGRpc3BsYXlUZXh0ID0gdGhpcy52aXNpYmlsaXR5ICsgcGFyc2VHZW5lcmljVHlwZXModGhpcy5pZCk7XG4gICAgaWYgKHRoaXMubWVtYmVyVHlwZSA9PT0gXCJtZXRob2RcIikge1xuICAgICAgZGlzcGxheVRleHQgKz0gYCgke3BhcnNlR2VuZXJpY1R5cGVzKHRoaXMucGFyYW1ldGVycy50cmltKCkpfSlgO1xuICAgICAgaWYgKHRoaXMucmV0dXJuVHlwZSkge1xuICAgICAgICBkaXNwbGF5VGV4dCArPSBcIiA6IFwiICsgcGFyc2VHZW5lcmljVHlwZXModGhpcy5yZXR1cm5UeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dC50cmltKCk7XG4gICAgY29uc3QgY3NzU3R5bGUgPSB0aGlzLnBhcnNlQ2xhc3NpZmllcigpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5VGV4dCxcbiAgICAgIGNzc1N0eWxlXG4gICAgfTtcbiAgfVxuICBwYXJzZU1lbWJlcihpbnB1dCkge1xuICAgIGxldCBwb3RlbnRpYWxDbGFzc2lmaWVyID0gXCJcIjtcbiAgICBpZiAodGhpcy5tZW1iZXJUeXBlID09PSBcIm1ldGhvZFwiKSB7XG4gICAgICBjb25zdCBtZXRob2RSZWdFeCA9IC8oWyMrfi1dKT8oLispXFwoKC4qKVxcKShbXFxzJCpdKT8oLiopKFskKl0pPy87XG4gICAgICBjb25zdCBtYXRjaCA9IG1ldGhvZFJlZ0V4LmV4ZWMoaW5wdXQpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkVmlzaWJpbGl0eSA9IG1hdGNoWzFdID8gbWF0Y2hbMV0udHJpbSgpIDogXCJcIjtcbiAgICAgICAgaWYgKHZpc2liaWxpdHlWYWx1ZXMuaW5jbHVkZXMoZGV0ZWN0ZWRWaXNpYmlsaXR5KSkge1xuICAgICAgICAgIHRoaXMudmlzaWJpbGl0eSA9IGRldGVjdGVkVmlzaWJpbGl0eTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlkID0gbWF0Y2hbMl0udHJpbSgpO1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSBtYXRjaFszXSA/IG1hdGNoWzNdLnRyaW0oKSA6IFwiXCI7XG4gICAgICAgIHBvdGVudGlhbENsYXNzaWZpZXIgPSBtYXRjaFs0XSA/IG1hdGNoWzRdLnRyaW0oKSA6IFwiXCI7XG4gICAgICAgIHRoaXMucmV0dXJuVHlwZSA9IG1hdGNoWzVdID8gbWF0Y2hbNV0udHJpbSgpIDogXCJcIjtcbiAgICAgICAgaWYgKHBvdGVudGlhbENsYXNzaWZpZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICBjb25zdCBsYXN0Q2hhciA9IHRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGlmICgvWyQqXS8uZXhlYyhsYXN0Q2hhcikpIHtcbiAgICAgICAgICAgIHBvdGVudGlhbENsYXNzaWZpZXIgPSBsYXN0Q2hhcjtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVHlwZSA9IHRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcoMCwgdGhpcy5yZXR1cm5UeXBlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBpbnB1dC5zdWJzdHJpbmcoMCwgMSk7XG4gICAgICBjb25zdCBsYXN0Q2hhciA9IGlucHV0LnN1YnN0cmluZyhsZW5ndGggLSAxKTtcbiAgICAgIGlmICh2aXNpYmlsaXR5VmFsdWVzLmluY2x1ZGVzKGZpcnN0Q2hhcikpIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gZmlyc3RDaGFyO1xuICAgICAgfVxuICAgICAgaWYgKC9bJCpdLy5leGVjKGxhc3RDaGFyKSkge1xuICAgICAgICBwb3RlbnRpYWxDbGFzc2lmaWVyID0gbGFzdENoYXI7XG4gICAgICB9XG4gICAgICB0aGlzLmlkID0gaW5wdXQuc3Vic3RyaW5nKFxuICAgICAgICB0aGlzLnZpc2liaWxpdHkgPT09IFwiXCIgPyAwIDogMSxcbiAgICAgICAgcG90ZW50aWFsQ2xhc3NpZmllciA9PT0gXCJcIiA/IGxlbmd0aCA6IGxlbmd0aCAtIDFcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NpZmllciA9IHBvdGVudGlhbENsYXNzaWZpZXI7XG4gIH1cbiAgcGFyc2VDbGFzc2lmaWVyKCkge1xuICAgIHN3aXRjaCAodGhpcy5jbGFzc2lmaWVyKSB7XG4gICAgICBjYXNlIFwiKlwiOlxuICAgICAgICByZXR1cm4gXCJmb250LXN0eWxlOml0YWxpYztcIjtcbiAgICAgIGNhc2UgXCIkXCI6XG4gICAgICAgIHJldHVybiBcInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc0RiLnRzXG52YXIgTUVSTUFJRF9ET01fSURfUFJFRklYID0gXCJjbGFzc0lkLVwiO1xudmFyIHJlbGF0aW9ucyA9IFtdO1xudmFyIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIG5vdGVzID0gW107XG52YXIgY2xhc3NDb3VudGVyID0gMDtcbnZhciBuYW1lc3BhY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBuYW1lc3BhY2VDb3VudGVyID0gMDtcbnZhciBmdW5jdGlvbnMgPSBbXTtcbnZhciBzYW5pdGl6ZVRleHQyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIHNwbGl0Q2xhc3NOYW1lQW5kVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX2lkKSB7XG4gIGNvbnN0IGlkID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KF9pZCwgZ2V0Q29uZmlnKCkpO1xuICBsZXQgZ2VuZXJpY1R5cGUgPSBcIlwiO1xuICBsZXQgY2xhc3NOYW1lID0gaWQ7XG4gIGlmIChpZC5pbmRleE9mKFwiflwiKSA+IDApIHtcbiAgICBjb25zdCBzcGxpdCA9IGlkLnNwbGl0KFwiflwiKTtcbiAgICBjbGFzc05hbWUgPSBzYW5pdGl6ZVRleHQyKHNwbGl0WzBdKTtcbiAgICBnZW5lcmljVHlwZSA9IHNhbml0aXplVGV4dDIoc3BsaXRbMV0pO1xuICB9XG4gIHJldHVybiB7IGNsYXNzTmFtZSwgdHlwZTogZ2VuZXJpY1R5cGUgfTtcbn0sIFwic3BsaXRDbGFzc05hbWVBbmRUeXBlXCIpO1xudmFyIHNldENsYXNzTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF9pZCwgbGFiZWwpIHtcbiAgY29uc3QgaWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2lkLCBnZXRDb25maWcoKSk7XG4gIGlmIChsYWJlbCkge1xuICAgIGxhYmVsID0gc2FuaXRpemVUZXh0MihsYWJlbCk7XG4gIH1cbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShpZCk7XG4gIGNsYXNzZXMuZ2V0KGNsYXNzTmFtZSkubGFiZWwgPSBsYWJlbDtcbn0sIFwic2V0Q2xhc3NMYWJlbFwiKTtcbnZhciBhZGRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX2lkKSB7XG4gIGNvbnN0IGlkID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KF9pZCwgZ2V0Q29uZmlnKCkpO1xuICBjb25zdCB7IGNsYXNzTmFtZSwgdHlwZSB9ID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKGlkKTtcbiAgaWYgKGNsYXNzZXMuaGFzKGNsYXNzTmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZSA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChjbGFzc05hbWUsIGdldENvbmZpZygpKTtcbiAgY2xhc3Nlcy5zZXQobmFtZSwge1xuICAgIGlkOiBuYW1lLFxuICAgIHR5cGUsXG4gICAgbGFiZWw6IG5hbWUsXG4gICAgY3NzQ2xhc3NlczogW10sXG4gICAgbWV0aG9kczogW10sXG4gICAgbWVtYmVyczogW10sXG4gICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgIHN0eWxlczogW10sXG4gICAgZG9tSWQ6IE1FUk1BSURfRE9NX0lEX1BSRUZJWCArIG5hbWUgKyBcIi1cIiArIGNsYXNzQ291bnRlclxuICB9KTtcbiAgY2xhc3NDb3VudGVyKys7XG59LCBcImFkZENsYXNzXCIpO1xudmFyIGxvb2tVcERvbUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihfaWQpIHtcbiAgY29uc3QgaWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2lkLCBnZXRDb25maWcoKSk7XG4gIGlmIChjbGFzc2VzLmhhcyhpZCkpIHtcbiAgICByZXR1cm4gY2xhc3Nlcy5nZXQoaWQpLmRvbUlkO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNsYXNzIG5vdCBmb3VuZDogXCIgKyBpZCk7XG59LCBcImxvb2tVcERvbUlkXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJlbGF0aW9ucyA9IFtdO1xuICBjbGFzc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgbm90ZXMgPSBbXTtcbiAgZnVuY3Rpb25zID0gW107XG4gIGZ1bmN0aW9ucy5wdXNoKHNldHVwVG9vbFRpcHMpO1xuICBuYW1lc3BhY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgbmFtZXNwYWNlQ291bnRlciA9IDA7XG4gIGRpcmVjdGlvbiA9IFwiVEJcIjtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZ2V0Q2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBjbGFzc2VzLmdldChpZCk7XG59LCBcImdldENsYXNzXCIpO1xudmFyIGdldENsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY2xhc3Nlcztcbn0sIFwiZ2V0Q2xhc3Nlc1wiKTtcbnZhciBnZXRSZWxhdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcmVsYXRpb25zO1xufSwgXCJnZXRSZWxhdGlvbnNcIik7XG52YXIgZ2V0Tm90ZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbm90ZXM7XG59LCBcImdldE5vdGVzXCIpO1xudmFyIGFkZFJlbGF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihyZWxhdGlvbikge1xuICBsb2cuZGVidWcoXCJBZGRpbmcgcmVsYXRpb246IFwiICsgSlNPTi5zdHJpbmdpZnkocmVsYXRpb24pKTtcbiAgYWRkQ2xhc3MocmVsYXRpb24uaWQxKTtcbiAgYWRkQ2xhc3MocmVsYXRpb24uaWQyKTtcbiAgcmVsYXRpb24uaWQxID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKHJlbGF0aW9uLmlkMSkuY2xhc3NOYW1lO1xuICByZWxhdGlvbi5pZDIgPSBzcGxpdENsYXNzTmFtZUFuZFR5cGUocmVsYXRpb24uaWQyKS5jbGFzc05hbWU7XG4gIHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSwgZ2V0Q29uZmlnKCkpO1xuICByZWxhdGlvbi5yZWxhdGlvblRpdGxlMiA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChyZWxhdGlvbi5yZWxhdGlvblRpdGxlMi50cmltKCksIGdldENvbmZpZygpKTtcbiAgcmVsYXRpb25zLnB1c2gocmVsYXRpb24pO1xufSwgXCJhZGRSZWxhdGlvblwiKTtcbnZhciBhZGRBbm5vdGF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc05hbWUsIGFubm90YXRpb24pIHtcbiAgY29uc3QgdmFsaWRhdGVkQ2xhc3NOYW1lID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKGNsYXNzTmFtZSkuY2xhc3NOYW1lO1xuICBjbGFzc2VzLmdldCh2YWxpZGF0ZWRDbGFzc05hbWUpLmFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbik7XG59LCBcImFkZEFubm90YXRpb25cIik7XG52YXIgYWRkTWVtYmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc05hbWUsIG1lbWJlcikge1xuICBhZGRDbGFzcyhjbGFzc05hbWUpO1xuICBjb25zdCB2YWxpZGF0ZWRDbGFzc05hbWUgPSBzcGxpdENsYXNzTmFtZUFuZFR5cGUoY2xhc3NOYW1lKS5jbGFzc05hbWU7XG4gIGNvbnN0IHRoZUNsYXNzID0gY2xhc3Nlcy5nZXQodmFsaWRhdGVkQ2xhc3NOYW1lKTtcbiAgaWYgKHR5cGVvZiBtZW1iZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBtZW1iZXJTdHJpbmcgPSBtZW1iZXIudHJpbSgpO1xuICAgIGlmIChtZW1iZXJTdHJpbmcuc3RhcnRzV2l0aChcIjw8XCIpICYmIG1lbWJlclN0cmluZy5lbmRzV2l0aChcIj4+XCIpKSB7XG4gICAgICB0aGVDbGFzcy5hbm5vdGF0aW9ucy5wdXNoKHNhbml0aXplVGV4dDIobWVtYmVyU3RyaW5nLnN1YnN0cmluZygyLCBtZW1iZXJTdHJpbmcubGVuZ3RoIC0gMikpKTtcbiAgICB9IGVsc2UgaWYgKG1lbWJlclN0cmluZy5pbmRleE9mKFwiKVwiKSA+IDApIHtcbiAgICAgIHRoZUNsYXNzLm1ldGhvZHMucHVzaChuZXcgQ2xhc3NNZW1iZXIobWVtYmVyU3RyaW5nLCBcIm1ldGhvZFwiKSk7XG4gICAgfSBlbHNlIGlmIChtZW1iZXJTdHJpbmcpIHtcbiAgICAgIHRoZUNsYXNzLm1lbWJlcnMucHVzaChuZXcgQ2xhc3NNZW1iZXIobWVtYmVyU3RyaW5nLCBcImF0dHJpYnV0ZVwiKSk7XG4gICAgfVxuICB9XG59LCBcImFkZE1lbWJlclwiKTtcbnZhciBhZGRNZW1iZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc05hbWUsIG1lbWJlcnMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWVtYmVycykpIHtcbiAgICBtZW1iZXJzLnJldmVyc2UoKTtcbiAgICBtZW1iZXJzLmZvckVhY2goKG1lbWJlcikgPT4gYWRkTWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyKSk7XG4gIH1cbn0sIFwiYWRkTWVtYmVyc1wiKTtcbnZhciBhZGROb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBjbGFzc05hbWUpIHtcbiAgY29uc3Qgbm90ZSA9IHtcbiAgICBpZDogYG5vdGUke25vdGVzLmxlbmd0aH1gLFxuICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgdGV4dFxuICB9O1xuICBub3Rlcy5wdXNoKG5vdGUpO1xufSwgXCJhZGROb3RlXCIpO1xudmFyIGNsZWFudXBMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obGFiZWwpIHtcbiAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoXCI6XCIpKSB7XG4gICAgbGFiZWwgPSBsYWJlbC5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIHNhbml0aXplVGV4dDIobGFiZWwudHJpbSgpKTtcbn0sIFwiY2xlYW51cExhYmVsXCIpO1xudmFyIHNldENzc0NsYXNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIGNsYXNzTmFtZSkge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oX2lkKSB7XG4gICAgbGV0IGlkID0gX2lkO1xuICAgIGlmICgvXFxkLy5leGVjKF9pZFswXSkpIHtcbiAgICAgIGlkID0gTUVSTUFJRF9ET01fSURfUFJFRklYICsgaWQ7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTm9kZSA9IGNsYXNzZXMuZ2V0KGlkKTtcbiAgICBpZiAoY2xhc3NOb2RlKSB7XG4gICAgICBjbGFzc05vZGUuY3NzQ2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0Q3NzQ2xhc3NcIik7XG52YXIgc2V0VG9vbHRpcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCB0b29sdGlwKSB7XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGlmICh0b29sdGlwICE9PSB2b2lkIDApIHtcbiAgICAgIGNsYXNzZXMuZ2V0KGlkKS50b29sdGlwID0gc2FuaXRpemVUZXh0Mih0b29sdGlwKTtcbiAgICB9XG4gIH0pO1xufSwgXCJzZXRUb29sdGlwXCIpO1xudmFyIGdldFRvb2x0aXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBuYW1lc3BhY2UpIHtcbiAgaWYgKG5hbWVzcGFjZSAmJiBuYW1lc3BhY2VzLmhhcyhuYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuIG5hbWVzcGFjZXMuZ2V0KG5hbWVzcGFjZSkuY2xhc3Nlcy5nZXQoaWQpLnRvb2x0aXA7XG4gIH1cbiAgcmV0dXJuIGNsYXNzZXMuZ2V0KGlkKS50b29sdGlwO1xufSwgXCJnZXRUb29sdGlwXCIpO1xudmFyIHNldExpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkcywgbGlua1N0ciwgdGFyZ2V0KSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oX2lkKSB7XG4gICAgbGV0IGlkID0gX2lkO1xuICAgIGlmICgvXFxkLy5leGVjKF9pZFswXSkpIHtcbiAgICAgIGlkID0gTUVSTUFJRF9ET01fSURfUFJFRklYICsgaWQ7XG4gICAgfVxuICAgIGNvbnN0IHRoZUNsYXNzID0gY2xhc3Nlcy5nZXQoaWQpO1xuICAgIGlmICh0aGVDbGFzcykge1xuICAgICAgdGhlQ2xhc3MubGluayA9IHV0aWxzX2RlZmF1bHQuZm9ybWF0VXJsKGxpbmtTdHIsIGNvbmZpZyk7XG4gICAgICBpZiAoY29uZmlnLnNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICAgIHRoZUNsYXNzLmxpbmtUYXJnZXQgPSBcIl90b3BcIjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGVDbGFzcy5saW5rVGFyZ2V0ID0gc2FuaXRpemVUZXh0Mih0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhlQ2xhc3MubGlua1RhcmdldCA9IFwiX2JsYW5rXCI7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgc2V0Q3NzQ2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0TGlua1wiKTtcbnZhciBzZXRDbGlja0V2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25BcmdzKSB7XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIHNldENsaWNrRnVuYyhpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICAgIGNsYXNzZXMuZ2V0KGlkKS5oYXZlQ2FsbGJhY2sgPSB0cnVlO1xuICB9KTtcbiAgc2V0Q3NzQ2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0Q2xpY2tFdmVudFwiKTtcbnZhciBzZXRDbGlja0Z1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF9kb21JZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpIHtcbiAgY29uc3QgZG9tSWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2RvbUlkLCBnZXRDb25maWcoKSk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBpZiAoY29uZmlnLnNlY3VyaXR5TGV2ZWwgIT09IFwibG9vc2VcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25OYW1lID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaWQgPSBkb21JZDtcbiAgaWYgKGNsYXNzZXMuaGFzKGlkKSkge1xuICAgIGNvbnN0IGVsZW1JZCA9IGxvb2tVcERvbUlkKGlkKTtcbiAgICBsZXQgYXJnTGlzdCA9IFtdO1xuICAgIGlmICh0eXBlb2YgZnVuY3Rpb25BcmdzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhcmdMaXN0ID0gZnVuY3Rpb25BcmdzLnNwbGl0KC8sKD89KD86KD86W15cIl0qXCIpezJ9KSpbXlwiXSokKS8pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtID0gYXJnTGlzdFtpXS50cmltKCk7XG4gICAgICAgIGlmIChpdGVtLnN0YXJ0c1dpdGgoJ1wiJykgJiYgaXRlbS5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgICAgIGl0ZW0gPSBpdGVtLnN1YnN0cigxLCBpdGVtLmxlbmd0aCAtIDIpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ0xpc3RbaV0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXJnTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIGFyZ0xpc3QucHVzaChlbGVtSWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbnMucHVzaChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2VsZW1JZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtICE9PSBudWxsKSB7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1dGlsc19kZWZhdWx0LnJ1bkZ1bmMoZnVuY3Rpb25OYW1lLCAuLi5hcmdMaXN0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0sIFwic2V0Q2xpY2tGdW5jXCIpO1xudmFyIGJpbmRGdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgZnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oZnVuKSB7XG4gICAgZnVuKGVsZW1lbnQpO1xuICB9KTtcbn0sIFwiYmluZEZ1bmN0aW9uc1wiKTtcbnZhciBsaW5lVHlwZSA9IHtcbiAgTElORTogMCxcbiAgRE9UVEVEX0xJTkU6IDFcbn07XG52YXIgcmVsYXRpb25UeXBlID0ge1xuICBBR0dSRUdBVElPTjogMCxcbiAgRVhURU5TSU9OOiAxLFxuICBDT01QT1NJVElPTjogMixcbiAgREVQRU5ERU5DWTogMyxcbiAgTE9MTElQT1A6IDRcbn07XG52YXIgc2V0dXBUb29sVGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCkge1xuICBsZXQgdG9vbHRpcEVsZW0gPSBzZWxlY3QoXCIubWVybWFpZFRvb2x0aXBcIik7XG4gIGlmICgodG9vbHRpcEVsZW0uX2dyb3VwcyB8fCB0b29sdGlwRWxlbSlbMF1bMF0gPT09IG51bGwpIHtcbiAgICB0b29sdGlwRWxlbSA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1lcm1haWRUb29sdGlwXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgfVxuICBjb25zdCBzdmcgPSBzZWxlY3QoZWxlbWVudCkuc2VsZWN0KFwic3ZnXCIpO1xuICBjb25zdCBub2RlcyA9IHN2Zy5zZWxlY3RBbGwoXCJnLm5vZGVcIik7XG4gIG5vZGVzLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGVsID0gc2VsZWN0KHRoaXMpO1xuICAgIGNvbnN0IHRpdGxlID0gZWwuYXR0cihcInRpdGxlXCIpO1xuICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0b29sdGlwRWxlbS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZShcIm9wYWNpdHlcIiwgXCIuOVwiKTtcbiAgICB0b29sdGlwRWxlbS50ZXh0KGVsLmF0dHIoXCJ0aXRsZVwiKSkuc3R5bGUoXCJsZWZ0XCIsIHdpbmRvdy5zY3JvbGxYICsgcmVjdC5sZWZ0ICsgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMiArIFwicHhcIikuc3R5bGUoXCJ0b3BcIiwgd2luZG93LnNjcm9sbFkgKyByZWN0LnRvcCAtIDE0ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyBcInB4XCIpO1xuICAgIHRvb2x0aXBFbGVtLmh0bWwodG9vbHRpcEVsZW0uaHRtbCgpLnJlcGxhY2UoLyZsdDticlxcLyZndDsvZywgXCI8YnIvPlwiKSk7XG4gICAgZWwuY2xhc3NlZChcImhvdmVyXCIsIHRydWUpO1xuICB9KS5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKCkge1xuICAgIHRvb2x0aXBFbGVtLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICBjb25zdCBlbCA9IHNlbGVjdCh0aGlzKTtcbiAgICBlbC5jbGFzc2VkKFwiaG92ZXJcIiwgZmFsc2UpO1xuICB9KTtcbn0sIFwic2V0dXBUb29sVGlwc1wiKTtcbmZ1bmN0aW9ucy5wdXNoKHNldHVwVG9vbFRpcHMpO1xudmFyIGRpcmVjdGlvbiA9IFwiVEJcIjtcbnZhciBnZXREaXJlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGRpcmVjdGlvbiwgXCJnZXREaXJlY3Rpb25cIik7XG52YXIgc2V0RGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGlyKSA9PiB7XG4gIGRpcmVjdGlvbiA9IGRpcjtcbn0sIFwic2V0RGlyZWN0aW9uXCIpO1xudmFyIGFkZE5hbWVzcGFjZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgaWYgKG5hbWVzcGFjZXMuaGFzKGlkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBuYW1lc3BhY2VzLnNldChpZCwge1xuICAgIGlkLFxuICAgIGNsYXNzZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgY2hpbGRyZW46IHt9LFxuICAgIGRvbUlkOiBNRVJNQUlEX0RPTV9JRF9QUkVGSVggKyBpZCArIFwiLVwiICsgbmFtZXNwYWNlQ291bnRlclxuICB9KTtcbiAgbmFtZXNwYWNlQ291bnRlcisrO1xufSwgXCJhZGROYW1lc3BhY2VcIik7XG52YXIgZ2V0TmFtZXNwYWNlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiBuYW1lc3BhY2VzLmdldChuYW1lKTtcbn0sIFwiZ2V0TmFtZXNwYWNlXCIpO1xudmFyIGdldE5hbWVzcGFjZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmFtZXNwYWNlcztcbn0sIFwiZ2V0TmFtZXNwYWNlc1wiKTtcbnZhciBhZGRDbGFzc2VzVG9OYW1lc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBjbGFzc05hbWVzKSB7XG4gIGlmICghbmFtZXNwYWNlcy5oYXMoaWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3QgbmFtZSBvZiBjbGFzc05hbWVzKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShuYW1lKTtcbiAgICBjbGFzc2VzLmdldChjbGFzc05hbWUpLnBhcmVudCA9IGlkO1xuICAgIG5hbWVzcGFjZXMuZ2V0KGlkKS5jbGFzc2VzLnNldChjbGFzc05hbWUsIGNsYXNzZXMuZ2V0KGNsYXNzTmFtZSkpO1xuICB9XG59LCBcImFkZENsYXNzZXNUb05hbWVzcGFjZVwiKTtcbnZhciBzZXRDc3NTdHlsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQsIHN0eWxlcykge1xuICBjb25zdCB0aGlzQ2xhc3MgPSBjbGFzc2VzLmdldChpZCk7XG4gIGlmICghc3R5bGVzIHx8ICF0aGlzQ2xhc3MpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBzIG9mIHN0eWxlcykge1xuICAgIGlmIChzLmluY2x1ZGVzKFwiLFwiKSkge1xuICAgICAgdGhpc0NsYXNzLnN0eWxlcy5wdXNoKC4uLnMuc3BsaXQoXCIsXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc0NsYXNzLnN0eWxlcy5wdXNoKHMpO1xuICAgIH1cbiAgfVxufSwgXCJzZXRDc3NTdHlsZVwiKTtcbnZhciBjbGFzc0RiX2RlZmF1bHQgPSB7XG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkuY2xhc3MsIFwiZ2V0Q29uZmlnXCIpLFxuICBhZGRDbGFzcyxcbiAgYmluZEZ1bmN0aW9ucyxcbiAgY2xlYXI6IGNsZWFyMixcbiAgZ2V0Q2xhc3MsXG4gIGdldENsYXNzZXMsXG4gIGdldE5vdGVzLFxuICBhZGRBbm5vdGF0aW9uLFxuICBhZGROb3RlLFxuICBnZXRSZWxhdGlvbnMsXG4gIGFkZFJlbGF0aW9uLFxuICBnZXREaXJlY3Rpb24sXG4gIHNldERpcmVjdGlvbixcbiAgYWRkTWVtYmVyLFxuICBhZGRNZW1iZXJzLFxuICBjbGVhbnVwTGFiZWwsXG4gIGxpbmVUeXBlLFxuICByZWxhdGlvblR5cGUsXG4gIHNldENsaWNrRXZlbnQsXG4gIHNldENzc0NsYXNzLFxuICBzZXRMaW5rLFxuICBnZXRUb29sdGlwLFxuICBzZXRUb29sdGlwLFxuICBsb29rVXBEb21JZCxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldENsYXNzTGFiZWwsXG4gIGFkZE5hbWVzcGFjZSxcbiAgYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlLFxuICBnZXROYW1lc3BhY2UsXG4gIGdldE5hbWVzcGFjZXMsXG4gIHNldENzc1N0eWxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvY2xhc3Mvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYGcuY2xhc3NHcm91cCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vZGVCb3JkZXIgfHwgb3B0aW9ucy5jbGFzc1RleHR9O1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gIGZvbnQtc2l6ZTogMTBweDtcblxuICAudGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxufVxuXG4ubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy5jbGFzc1RleHR9O1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbn1cbi5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLmNsYXNzVGV4dH07XG59XG4uZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHtcbiAgYmFja2dyb3VuZDogJHtvcHRpb25zLm1haW5Ca2d9O1xufVxuXG4uY2xhc3NUaXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG4ubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG5cbi5kaXZpZGVyIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuZy5jbGlja2FibGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmcuY2xhc3NHcm91cCByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbn1cblxuZy5jbGFzc0dyb3VwIGxpbmUge1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uY2xhc3NMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uY2xhc3NMYWJlbCAubGFiZWwge1xuICBmaWxsOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuLnJlbGF0aW9uIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xuICBmaWxsOiBub25lO1xufVxuXG4uZGFzaGVkLWxpbmV7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDM7XG59XG5cbi5kb3R0ZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfSAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2xvbGxpcG9wRW5kLCAubG9sbGlwb3Age1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ30gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5lZGdlVGVybWluYWxzIHtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBsaW5lLWhlaWdodDogaW5pdGlhbDtcbn1cblxuLmNsYXNzVGl0bGVUZXh0IHtcbiAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbn1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG5leHBvcnQge1xuICBjbGFzc0RpYWdyYW1fZGVmYXVsdCxcbiAgY2xhc3NEYl9kZWZhdWx0LFxuICBzdHlsZXNfZGVmYXVsdFxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgY2xhc3NEYl9kZWZhdWx0LFxuICBjbGFzc0RpYWdyYW1fZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstQkFWT0dLRlcubWpzXCI7XG5pbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgbG9nLFxuICBwYXJzZUdlbmVyaWNUeXBlc1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzUmVuZGVyZXIuanNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgbGF5b3V0IGFzIGRhZ3JlTGF5b3V0IH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvY2xhc3Mvc3ZnRHJhdy5qc1xuaW1wb3J0IHsgbGluZSwgY3VydmVCYXNpcyB9IGZyb20gXCJkM1wiO1xudmFyIGVkZ2VDb3VudCA9IDA7XG52YXIgZHJhd0VkZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHBhdGgsIHJlbGF0aW9uLCBjb25mLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGdldFJlbGF0aW9uVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpcbiAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25cIjtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuRVhURU5TSU9OOlxuICAgICAgICByZXR1cm4gXCJleHRlbnNpb25cIjtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046XG4gICAgICAgIHJldHVybiBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBjYXNlIGRpYWdPYmouZGIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6XG4gICAgICAgIHJldHVybiBcImRlcGVuZGVuY3lcIjtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuTE9MTElQT1A6XG4gICAgICAgIHJldHVybiBcImxvbGxpcG9wXCI7XG4gICAgfVxuICB9LCBcImdldFJlbGF0aW9uVHlwZVwiKTtcbiAgcGF0aC5wb2ludHMgPSBwYXRoLnBvaW50cy5maWx0ZXIoKHApID0+ICFOdW1iZXIuaXNOYU4ocC55KSk7XG4gIGNvbnN0IGxpbmVEYXRhID0gcGF0aC5wb2ludHM7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KS5jdXJ2ZShjdXJ2ZUJhc2lzKTtcbiAgY29uc3Qgc3ZnUGF0aCA9IGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24obGluZURhdGEpKS5hdHRyKFwiaWRcIiwgXCJlZGdlXCIgKyBlZGdlQ291bnQpLmF0dHIoXCJjbGFzc1wiLCBcInJlbGF0aW9uXCIpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIGlmIChyZWxhdGlvbi5yZWxhdGlvbi5saW5lVHlwZSA9PSAxKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFwiY2xhc3NcIiwgXCJyZWxhdGlvbiBkYXNoZWQtbGluZVwiKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb24ubGluZVR5cGUgPT0gMTApIHtcbiAgICBzdmdQYXRoLmF0dHIoXCJjbGFzc1wiLCBcInJlbGF0aW9uIGRvdHRlZC1saW5lXCIpO1xuICB9XG4gIGlmIChyZWxhdGlvbi5yZWxhdGlvbi50eXBlMSAhPT0gXCJub25lXCIpIHtcbiAgICBzdmdQYXRoLmF0dHIoXG4gICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGdldFJlbGF0aW9uVHlwZShyZWxhdGlvbi5yZWxhdGlvbi50eXBlMSkgKyBcIlN0YXJ0KVwiXG4gICAgKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb24udHlwZTIgIT09IFwibm9uZVwiKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgXCJtYXJrZXItZW5kXCIsXG4gICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZ2V0UmVsYXRpb25UeXBlKHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUyKSArIFwiRW5kKVwiXG4gICAgKTtcbiAgfVxuICBsZXQgeCwgeTtcbiAgY29uc3QgbCA9IHBhdGgucG9pbnRzLmxlbmd0aDtcbiAgbGV0IGxhYmVsUG9zaXRpb24gPSB1dGlsc19kZWZhdWx0LmNhbGNMYWJlbFBvc2l0aW9uKHBhdGgucG9pbnRzKTtcbiAgeCA9IGxhYmVsUG9zaXRpb24ueDtcbiAgeSA9IGxhYmVsUG9zaXRpb24ueTtcbiAgbGV0IHAxX2NhcmRfeCwgcDFfY2FyZF95O1xuICBsZXQgcDJfY2FyZF94LCBwMl9jYXJkX3k7XG4gIGlmIChsICUgMiAhPT0gMCAmJiBsID4gMSkge1xuICAgIGxldCBjYXJkaW5hbGl0eV8xX3BvaW50ID0gdXRpbHNfZGVmYXVsdC5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihcbiAgICAgIHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUxICE9PSBcIm5vbmVcIixcbiAgICAgIHBhdGgucG9pbnRzLFxuICAgICAgcGF0aC5wb2ludHNbMF1cbiAgICApO1xuICAgIGxldCBjYXJkaW5hbGl0eV8yX3BvaW50ID0gdXRpbHNfZGVmYXVsdC5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihcbiAgICAgIHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUyICE9PSBcIm5vbmVcIixcbiAgICAgIHBhdGgucG9pbnRzLFxuICAgICAgcGF0aC5wb2ludHNbbCAtIDFdXG4gICAgKTtcbiAgICBsb2cuZGVidWcoXCJjYXJkaW5hbGl0eV8xX3BvaW50IFwiICsgSlNPTi5zdHJpbmdpZnkoY2FyZGluYWxpdHlfMV9wb2ludCkpO1xuICAgIGxvZy5kZWJ1ZyhcImNhcmRpbmFsaXR5XzJfcG9pbnQgXCIgKyBKU09OLnN0cmluZ2lmeShjYXJkaW5hbGl0eV8yX3BvaW50KSk7XG4gICAgcDFfY2FyZF94ID0gY2FyZGluYWxpdHlfMV9wb2ludC54O1xuICAgIHAxX2NhcmRfeSA9IGNhcmRpbmFsaXR5XzFfcG9pbnQueTtcbiAgICBwMl9jYXJkX3ggPSBjYXJkaW5hbGl0eV8yX3BvaW50Lng7XG4gICAgcDJfY2FyZF95ID0gY2FyZGluYWxpdHlfMl9wb2ludC55O1xuICB9XG4gIGlmIChyZWxhdGlvbi50aXRsZSAhPT0gdm9pZCAwKSB7XG4gICAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc0xhYmVsXCIpO1xuICAgIGNvbnN0IGxhYmVsID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJmaWxsXCIsIFwicmVkXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KHJlbGF0aW9uLnRpdGxlKTtcbiAgICB3aW5kb3cubGFiZWwgPSBsYWJlbDtcbiAgICBjb25zdCBib3VuZHMgPSBsYWJlbC5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJib3hcIikuYXR0cihcInhcIiwgYm91bmRzLnggLSBjb25mLnBhZGRpbmcgLyAyKS5hdHRyKFwieVwiLCBib3VuZHMueSAtIGNvbmYucGFkZGluZyAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBib3VuZHMud2lkdGggKyBjb25mLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYm91bmRzLmhlaWdodCArIGNvbmYucGFkZGluZyk7XG4gIH1cbiAgbG9nLmluZm8oXCJSZW5kZXJpbmcgcmVsYXRpb24gXCIgKyBKU09OLnN0cmluZ2lmeShyZWxhdGlvbikpO1xuICBpZiAocmVsYXRpb24ucmVsYXRpb25UaXRsZTEgIT09IHZvaWQgMCAmJiByZWxhdGlvbi5yZWxhdGlvblRpdGxlMSAhPT0gXCJub25lXCIpIHtcbiAgICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNhcmRpbmFsaXR5XCIpO1xuICAgIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0eXBlMVwiKS5hdHRyKFwieFwiLCBwMV9jYXJkX3gpLmF0dHIoXCJ5XCIsIHAxX2NhcmRfeSkuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiNlwiKS50ZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb25UaXRsZTIgIT09IHZvaWQgMCAmJiByZWxhdGlvbi5yZWxhdGlvblRpdGxlMiAhPT0gXCJub25lXCIpIHtcbiAgICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNhcmRpbmFsaXR5XCIpO1xuICAgIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0eXBlMlwiKS5hdHRyKFwieFwiLCBwMl9jYXJkX3gpLmF0dHIoXCJ5XCIsIHAyX2NhcmRfeSkuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiNlwiKS50ZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUyKTtcbiAgfVxuICBlZGdlQ291bnQrKztcbn0sIFwiZHJhd0VkZ2VcIik7XG52YXIgZHJhd0NsYXNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBjbGFzc0RlZiwgY29uZiwgZGlhZ09iaikge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgY2xhc3MgXCIsIGNsYXNzRGVmLCBjb25mKTtcbiAgY29uc3QgaWQgPSBjbGFzc0RlZi5pZDtcbiAgY29uc3QgY2xhc3NJbmZvID0ge1xuICAgIGlkLFxuICAgIGxhYmVsOiBjbGFzc0RlZi5pZCxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfTtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgZGlhZ09iai5kYi5sb29rVXBEb21JZChpZCkpLmF0dHIoXCJjbGFzc1wiLCBcImNsYXNzR3JvdXBcIik7XG4gIGxldCB0aXRsZTtcbiAgaWYgKGNsYXNzRGVmLmxpbmspIHtcbiAgICB0aXRsZSA9IGcuYXBwZW5kKFwic3ZnOmFcIikuYXR0cihcInhsaW5rOmhyZWZcIiwgY2xhc3NEZWYubGluaykuYXR0cihcInRhcmdldFwiLCBjbGFzc0RlZi5saW5rVGFyZ2V0KS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIGNvbmYudGV4dEhlaWdodCArIGNvbmYucGFkZGluZykuYXR0cihcInhcIiwgMCk7XG4gIH0gZWxzZSB7XG4gICAgdGl0bGUgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nKS5hdHRyKFwieFwiLCAwKTtcbiAgfVxuICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gIGNsYXNzRGVmLmFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24obWVtYmVyKSB7XG4gICAgY29uc3QgdGl0bGVUZXh0MiA9IHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLnRleHQoXCJcXHhBQlwiICsgbWVtYmVyICsgXCJcXHhCQlwiKTtcbiAgICBpZiAoIWlzRmlyc3QpIHtcbiAgICAgIHRpdGxlVGV4dDIuYXR0cihcImR5XCIsIGNvbmYudGV4dEhlaWdodCk7XG4gICAgfVxuICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgfSk7XG4gIGxldCBjbGFzc1RpdGxlU3RyaW5nID0gZ2V0Q2xhc3NUaXRsZVN0cmluZyhjbGFzc0RlZik7XG4gIGNvbnN0IGNsYXNzVGl0bGUgPSB0aXRsZS5hcHBlbmQoXCJ0c3BhblwiKS50ZXh0KGNsYXNzVGl0bGVTdHJpbmcpLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlXCIpO1xuICBpZiAoIWlzRmlyc3QpIHtcbiAgICBjbGFzc1RpdGxlLmF0dHIoXCJkeVwiLCBjb25mLnRleHRIZWlnaHQpO1xuICB9XG4gIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGl0bGUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7XG4gIGxldCBtZW1iZXJzTGluZTtcbiAgbGV0IG1lbWJlcnNCb3g7XG4gIGxldCBtZXRob2RzTGluZTtcbiAgaWYgKGNsYXNzRGVmLm1lbWJlcnMubGVuZ3RoID4gMCkge1xuICAgIG1lbWJlcnNMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gLyAyKS5hdHRyKFwieTJcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gLyAyKTtcbiAgICBjb25zdCBtZW1iZXJzID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIGNvbmYucGFkZGluZykuYXR0cihcInlcIiwgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gKyBjb25mLnRleHRIZWlnaHQpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImNsYXNzXCIsIFwiY2xhc3NUZXh0XCIpO1xuICAgIGlzRmlyc3QgPSB0cnVlO1xuICAgIGNsYXNzRGVmLm1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbihtZW1iZXIpIHtcbiAgICAgIGFkZFRzcGFuKG1lbWJlcnMsIG1lbWJlciwgaXNGaXJzdCwgY29uZik7XG4gICAgICBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgfSk7XG4gICAgbWVtYmVyc0JveCA9IG1lbWJlcnMubm9kZSgpLmdldEJCb3goKTtcbiAgfVxuICBpZiAoY2xhc3NEZWYubWV0aG9kcy5sZW5ndGggPiAwKSB7XG4gICAgbWV0aG9kc0xpbmUgPSBnLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIDApLmF0dHIoXCJ5MVwiLCBjb25mLnBhZGRpbmcgKyB0aXRsZUhlaWdodCArIGNvbmYuZGl2aWRlck1hcmdpbiArIG1lbWJlcnNCb3guaGVpZ2h0KS5hdHRyKFwieTJcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gKyBtZW1iZXJzQm94LmhlaWdodCk7XG4gICAgY29uc3QgbWV0aG9kcyA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBjb25mLnBhZGRpbmcpLmF0dHIoXCJ5XCIsIHRpdGxlSGVpZ2h0ICsgMiAqIGNvbmYuZGl2aWRlck1hcmdpbiArIG1lbWJlcnNCb3guaGVpZ2h0ICsgY29uZi50ZXh0SGVpZ2h0KS5hdHRyKFwiZmlsbFwiLCBcIndoaXRlXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNsYXNzVGV4dFwiKTtcbiAgICBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICBjbGFzc0RlZi5tZXRob2RzLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBhZGRUc3BhbihtZXRob2RzLCBtZXRob2QsIGlzRmlyc3QsIGNvbmYpO1xuICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGNsYXNzQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICB2YXIgY3NzQ2xhc3NTdHIgPSBcIiBcIjtcbiAgaWYgKGNsYXNzRGVmLmNzc0NsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgIGNzc0NsYXNzU3RyID0gY3NzQ2xhc3NTdHIgKyBjbGFzc0RlZi5jc3NDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuYXR0cihcIndpZHRoXCIsIGNsYXNzQm94LndpZHRoICsgMiAqIGNvbmYucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBjbGFzc0JveC5oZWlnaHQgKyBjb25mLnBhZGRpbmcgKyAwLjUgKiBjb25mLmRpdmlkZXJNYXJnaW4pLmF0dHIoXCJjbGFzc1wiLCBjc3NDbGFzc1N0cik7XG4gIGNvbnN0IHJlY3RXaWR0aCA9IHJlY3Qubm9kZSgpLmdldEJCb3goKS53aWR0aDtcbiAgdGl0bGUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih4KSB7XG4gICAgeC5zZXRBdHRyaWJ1dGUoXCJ4XCIsIChyZWN0V2lkdGggLSB4LmdldEJCb3goKS53aWR0aCkgLyAyKTtcbiAgfSk7XG4gIGlmIChjbGFzc0RlZi50b29sdGlwKSB7XG4gICAgdGl0bGUuaW5zZXJ0KFwidGl0bGVcIikudGV4dChjbGFzc0RlZi50b29sdGlwKTtcbiAgfVxuICBpZiAobWVtYmVyc0xpbmUpIHtcbiAgICBtZW1iZXJzTGluZS5hdHRyKFwieDJcIiwgcmVjdFdpZHRoKTtcbiAgfVxuICBpZiAobWV0aG9kc0xpbmUpIHtcbiAgICBtZXRob2RzTGluZS5hdHRyKFwieDJcIiwgcmVjdFdpZHRoKTtcbiAgfVxuICBjbGFzc0luZm8ud2lkdGggPSByZWN0V2lkdGg7XG4gIGNsYXNzSW5mby5oZWlnaHQgPSBjbGFzc0JveC5oZWlnaHQgKyBjb25mLnBhZGRpbmcgKyAwLjUgKiBjb25mLmRpdmlkZXJNYXJnaW47XG4gIHJldHVybiBjbGFzc0luZm87XG59LCBcImRyYXdDbGFzc1wiKTtcbnZhciBnZXRDbGFzc1RpdGxlU3RyaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc0RlZikge1xuICBsZXQgY2xhc3NUaXRsZVN0cmluZyA9IGNsYXNzRGVmLmlkO1xuICBpZiAoY2xhc3NEZWYudHlwZSkge1xuICAgIGNsYXNzVGl0bGVTdHJpbmcgKz0gXCI8XCIgKyBwYXJzZUdlbmVyaWNUeXBlcyhjbGFzc0RlZi50eXBlKSArIFwiPlwiO1xuICB9XG4gIHJldHVybiBjbGFzc1RpdGxlU3RyaW5nO1xufSwgXCJnZXRDbGFzc1RpdGxlU3RyaW5nXCIpO1xudmFyIGRyYXdOb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBub3RlLCBjb25mLCBfZGlhZ09iaikge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgbm90ZSBcIiwgbm90ZSwgY29uZik7XG4gIGNvbnN0IGlkID0gbm90ZS5pZDtcbiAgY29uc3Qgbm90ZUluZm8gPSB7XG4gICAgaWQsXG4gICAgdGV4dDogbm90ZS50ZXh0LFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9O1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJpZFwiLCBpZCkuYXR0cihcImNsYXNzXCIsIFwiY2xhc3NHcm91cFwiKTtcbiAgbGV0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nKS5hdHRyKFwieFwiLCAwKTtcbiAgY29uc3QgbGluZXMgPSBKU09OLnBhcnNlKGBcIiR7bm90ZS50ZXh0fVwiYCkuc3BsaXQoXCJcXG5cIik7XG4gIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZTIpIHtcbiAgICBsb2cuZGVidWcoYEFkZGluZyBsaW5lOiAke2xpbmUyfWApO1xuICAgIHRleHQuYXBwZW5kKFwidHNwYW5cIikudGV4dChsaW5lMikuYXR0cihcImNsYXNzXCIsIFwidGl0bGVcIikuYXR0cihcImR5XCIsIGNvbmYudGV4dEhlaWdodCk7XG4gIH0pO1xuICBjb25zdCBub3RlQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCByZWN0ID0gZy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJ3aWR0aFwiLCBub3RlQm94LndpZHRoICsgMiAqIGNvbmYucGFkZGluZykuYXR0cihcbiAgICBcImhlaWdodFwiLFxuICAgIG5vdGVCb3guaGVpZ2h0ICsgbGluZXMubGVuZ3RoICogY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nICsgMC41ICogY29uZi5kaXZpZGVyTWFyZ2luXG4gICk7XG4gIGNvbnN0IHJlY3RXaWR0aCA9IHJlY3Qubm9kZSgpLmdldEJCb3goKS53aWR0aDtcbiAgdGV4dC5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcbiAgICB4LnNldEF0dHJpYnV0ZShcInhcIiwgKHJlY3RXaWR0aCAtIHguZ2V0QkJveCgpLndpZHRoKSAvIDIpO1xuICB9KTtcbiAgbm90ZUluZm8ud2lkdGggPSByZWN0V2lkdGg7XG4gIG5vdGVJbmZvLmhlaWdodCA9IG5vdGVCb3guaGVpZ2h0ICsgbGluZXMubGVuZ3RoICogY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nICsgMC41ICogY29uZi5kaXZpZGVyTWFyZ2luO1xuICByZXR1cm4gbm90ZUluZm87XG59LCBcImRyYXdOb3RlXCIpO1xudmFyIGFkZFRzcGFuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0RWwsIG1lbWJlciwgaXNGaXJzdCwgY29uZikge1xuICBjb25zdCB7IGRpc3BsYXlUZXh0LCBjc3NTdHlsZSB9ID0gbWVtYmVyLmdldERpc3BsYXlEZXRhaWxzKCk7XG4gIGNvbnN0IHRTcGFuID0gdGV4dEVsLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIGNvbmYucGFkZGluZykudGV4dChkaXNwbGF5VGV4dCk7XG4gIGlmIChjc3NTdHlsZSAhPT0gXCJcIikge1xuICAgIHRTcGFuLmF0dHIoXCJzdHlsZVwiLCBtZW1iZXIuY3NzU3R5bGUpO1xuICB9XG4gIGlmICghaXNGaXJzdCkge1xuICAgIHRTcGFuLmF0dHIoXCJkeVwiLCBjb25mLnRleHRIZWlnaHQpO1xuICB9XG59LCBcImFkZFRzcGFuXCIpO1xudmFyIHN2Z0RyYXdfZGVmYXVsdCA9IHtcbiAgZ2V0Q2xhc3NUaXRsZVN0cmluZyxcbiAgZHJhd0NsYXNzLFxuICBkcmF3RWRnZSxcbiAgZHJhd05vdGVcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc1JlbmRlcmVyLmpzXG52YXIgaWRDYWNoZSA9IHt9O1xudmFyIHBhZGRpbmcgPSAyMDtcbnZhciBnZXRHcmFwaElkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihsYWJlbCkge1xuICBjb25zdCBmb3VuZEVudHJ5ID0gT2JqZWN0LmVudHJpZXMoaWRDYWNoZSkuZmluZCgoZW50cnkpID0+IGVudHJ5WzFdLmxhYmVsID09PSBsYWJlbCk7XG4gIGlmIChmb3VuZEVudHJ5KSB7XG4gICAgcmV0dXJuIGZvdW5kRW50cnlbMF07XG4gIH1cbn0sIFwiZ2V0R3JhcGhJZFwiKTtcbnZhciBpbnNlcnRNYXJrZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZXh0ZW5zaW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwiZXh0ZW5zaW9uXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImV4dGVuc2lvbkVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwiZXh0ZW5zaW9uXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImNvbXBvc2l0aW9uRW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYWdncmVnYXRpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJleHRlbnNpb25cIikuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYWdncmVnYXRpb25FbmRcIikuYXR0cihcInJlZlhcIiwgMTkpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJkZXBlbmRlbmN5U3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwiZXh0ZW5zaW9uXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZGVwZW5kZW5jeUVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZiA9IGdldENvbmZpZygpLmNsYXNzO1xuICBpZENhY2hlID0ge307XG4gIGxvZy5pbmZvKFwiUmVuZGVyaW5nIGRpYWdyYW0gXCIgKyB0ZXh0KTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IGRpYWdyYW0yID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICBpbnNlcnRNYXJrZXJzKGRpYWdyYW0yKTtcbiAgY29uc3QgZyA9IG5ldyBncmFwaGxpYi5HcmFwaCh7XG4gICAgbXVsdGlncmFwaDogdHJ1ZVxuICB9KTtcbiAgZy5zZXRHcmFwaCh7XG4gICAgaXNNdWx0aUdyYXBoOiB0cnVlXG4gIH0pO1xuICBnLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xuICBjb25zdCBrZXlzID0gWy4uLmNsYXNzZXMua2V5cygpXTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGNsYXNzRGVmID0gY2xhc3Nlcy5nZXQoa2V5KTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhd19kZWZhdWx0LmRyYXdDbGFzcyhkaWFncmFtMiwgY2xhc3NEZWYsIGNvbmYsIGRpYWdPYmopO1xuICAgIGlkQ2FjaGVbbm9kZS5pZF0gPSBub2RlO1xuICAgIGcuc2V0Tm9kZShub2RlLmlkLCBub2RlKTtcbiAgICBsb2cuaW5mbyhcIk9yZyBoZWlnaHQ6IFwiICsgbm9kZS5oZWlnaHQpO1xuICB9XG4gIGNvbnN0IHJlbGF0aW9ucyA9IGRpYWdPYmouZGIuZ2V0UmVsYXRpb25zKCk7XG4gIHJlbGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uKSB7XG4gICAgbG9nLmluZm8oXG4gICAgICAvLyBjc3BlbGw6aWdub3JlIHRqb2hvXG4gICAgICBcInRqb2hvXCIgKyBnZXRHcmFwaElkKHJlbGF0aW9uLmlkMSkgKyBnZXRHcmFwaElkKHJlbGF0aW9uLmlkMikgKyBKU09OLnN0cmluZ2lmeShyZWxhdGlvbilcbiAgICApO1xuICAgIGcuc2V0RWRnZShcbiAgICAgIGdldEdyYXBoSWQocmVsYXRpb24uaWQxKSxcbiAgICAgIGdldEdyYXBoSWQocmVsYXRpb24uaWQyKSxcbiAgICAgIHtcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0sXG4gICAgICByZWxhdGlvbi50aXRsZSB8fCBcIkRFRkFVTFRcIlxuICAgICk7XG4gIH0pO1xuICBjb25zdCBub3RlcyA9IGRpYWdPYmouZGIuZ2V0Tm90ZXMoKTtcbiAgbm90ZXMuZm9yRWFjaChmdW5jdGlvbihub3RlKSB7XG4gICAgbG9nLmRlYnVnKGBBZGRpbmcgbm90ZTogJHtKU09OLnN0cmluZ2lmeShub3RlKX1gKTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhd19kZWZhdWx0LmRyYXdOb3RlKGRpYWdyYW0yLCBub3RlLCBjb25mLCBkaWFnT2JqKTtcbiAgICBpZENhY2hlW25vZGUuaWRdID0gbm9kZTtcbiAgICBnLnNldE5vZGUobm9kZS5pZCwgbm9kZSk7XG4gICAgaWYgKG5vdGUuY2xhc3MgJiYgY2xhc3Nlcy5oYXMobm90ZS5jbGFzcykpIHtcbiAgICAgIGcuc2V0RWRnZShcbiAgICAgICAgbm90ZS5pZCxcbiAgICAgICAgZ2V0R3JhcGhJZChub3RlLmNsYXNzKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGF0aW9uOiB7XG4gICAgICAgICAgICBpZDE6IG5vdGUuaWQsXG4gICAgICAgICAgICBpZDI6IG5vdGUuY2xhc3MsXG4gICAgICAgICAgICByZWxhdGlvbjoge1xuICAgICAgICAgICAgICB0eXBlMTogXCJub25lXCIsXG4gICAgICAgICAgICAgIHR5cGUyOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgbGluZVR5cGU6IDEwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkRFRkFVTFRcIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICBkYWdyZUxheW91dChnKTtcbiAgZy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIGlmICh2ICE9PSB2b2lkIDAgJiYgZy5ub2RlKHYpICE9PSB2b2lkIDApIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vZGUgXCIgKyB2ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZy5ub2RlKHYpKSk7XG4gICAgICByb290LnNlbGVjdChcIiNcIiArIChkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHYpIHx8IHYpKS5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArIChnLm5vZGUodikueCAtIGcubm9kZSh2KS53aWR0aCAvIDIpICsgXCIsXCIgKyAoZy5ub2RlKHYpLnkgLSBnLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbiAgZy5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGlmIChlICE9PSB2b2lkIDAgJiYgZy5lZGdlKGUpICE9PSB2b2lkIDApIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGcuZWRnZShlKSkpO1xuICAgICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdFZGdlKGRpYWdyYW0yLCBnLmVkZ2UoZSksIGcuZWRnZShlKS5yZWxhdGlvbiwgY29uZiwgZGlhZ09iaik7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3ZnQm91bmRzID0gZGlhZ3JhbTIubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgd2lkdGggPSBzdmdCb3VuZHMud2lkdGggKyBwYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHdpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgY29uc3QgdkJveCA9IGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7d2lkdGh9ICR7aGVpZ2h0fWA7XG4gIGxvZy5kZWJ1Zyhgdmlld0JveCAke3ZCb3h9YCk7XG4gIGRpYWdyYW0yLmF0dHIoXCJ2aWV3Qm94XCIsIHZCb3gpO1xufSwgXCJkcmF3XCIpO1xudmFyIGNsYXNzUmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzRGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogY2xhc3NEaWFncmFtX2RlZmF1bHQsXG4gIGRiOiBjbGFzc0RiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBjbGFzc1JlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHQsXG4gIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICAgIGlmICghY25mLmNsYXNzKSB7XG4gICAgICBjbmYuY2xhc3MgPSB7fTtcbiAgICB9XG4gICAgY25mLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGUgPSBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbiAgICBjbGFzc0RiX2RlZmF1bHQuY2xlYXIoKTtcbiAgfSwgXCJpbml0XCIpXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgY3JlYXRlTGFiZWxfZGVmYXVsdFxufSBmcm9tIFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCB7XG4gIGdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0LFxuICBnZXRTdWJHcmFwaFRpdGxlTWFyZ2luc1xufSBmcm9tIFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZVRleHRcbn0gZnJvbSBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBldmFsdWF0ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvbWFya2Vycy5qc1xudmFyIGluc2VydE1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCBtYXJrZXJBcnJheSwgdHlwZSwgaWQpID0+IHtcbiAgbWFya2VyQXJyYXkuZm9yRWFjaCgobWFya2VyTmFtZSkgPT4ge1xuICAgIG1hcmtlcnNbbWFya2VyTmFtZV0oZWxlbSwgdHlwZSwgaWQpO1xuICB9KTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBleHRlbnNpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBsb2cudHJhY2UoXCJNYWtpbmcgbWFya2VycyBmb3IgXCIsIGlkKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1leHRlbnNpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWV4dGVuc2lvbkVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xufSwgXCJleHRlbnNpb25cIik7XG52YXIgY29tcG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNvbXBvc2l0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBjb21wb3NpdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiY29tcG9zaXRpb25cIik7XG52YXIgYWdncmVnYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGFnZ3JlZ2F0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBhZ2dyZWdhdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiYWdncmVnYXRpb25cIik7XG52YXIgZGVwZW5kZW5jeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgNikuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1kZXBlbmRlbmN5RW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59LCBcImRlcGVuZGVuY3lcIik7XG52YXIgbG9sbGlwb3AgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWxvbGxpcG9wU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGxvbGxpcG9wIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIikuYXR0cihcImN4XCIsIDcpLmF0dHIoXCJjeVwiLCA3KS5hdHRyKFwiclwiLCA2KTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1sb2xsaXBvcEVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgbG9sbGlwb3AgXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxKS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTkwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpLmF0dHIoXCJjeFwiLCA3KS5hdHRyKFwiY3lcIiwgNykuYXR0cihcInJcIiwgNik7XG59LCBcImxvbGxpcG9wXCIpO1xudmFyIHBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItcG9pbnRFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgNikuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLXBvaW50U3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgNC41KS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTIpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59LCBcInBvaW50XCIpO1xudmFyIGNpcmNsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNpcmNsZUVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMCAxMFwiKS5hdHRyKFwicmVmWFwiLCAxMSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIFwiNVwiKS5hdHRyKFwiY3lcIiwgXCI1XCIpLmF0dHIoXCJyXCIsIFwiNVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1jaXJjbGVTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMCAxMFwiKS5hdHRyKFwicmVmWFwiLCAtMSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIFwiNVwiKS5hdHRyKFwiY3lcIiwgXCI1XCIpLmF0dHIoXCJyXCIsIFwiNVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xufSwgXCJjaXJjbGVcIik7XG52YXIgY3Jvc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1jcm9zc0VuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY3Jvc3MgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMSAxMVwiKS5hdHRyKFwicmVmWFwiLCAxMikuYXR0cihcInJlZllcIiwgNS4yKS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAyKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNyb3NzU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNyb3NzIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTEgMTFcIikuYXR0cihcInJlZlhcIiwgLTEpLmF0dHIoXCJyZWZZXCIsIDUuMikuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMikuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xufSwgXCJjcm9zc1wiKTtcbnZhciBiYXJiID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1iYXJiRW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTQpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInN0cm9rZVdpZHRoXCIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaXCIpO1xufSwgXCJiYXJiXCIpO1xudmFyIG1hcmtlcnMgPSB7XG4gIGV4dGVuc2lvbixcbiAgY29tcG9zaXRpb24sXG4gIGFnZ3JlZ2F0aW9uLFxuICBkZXBlbmRlbmN5LFxuICBsb2xsaXBvcCxcbiAgcG9pbnQsXG4gIGNpcmNsZSxcbiAgY3Jvc3MsXG4gIGJhcmJcbn07XG52YXIgbWFya2Vyc19kZWZhdWx0ID0gaW5zZXJ0TWFya2VycztcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvZWRnZXMuanNcbmltcG9ydCB7IGxpbmUsIGN1cnZlQmFzaXMsIHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9lZGdlTWFya2VyLnRzXG52YXIgYWRkRWRnZU1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSkgPT4ge1xuICBpZiAoZWRnZS5hcnJvd1R5cGVTdGFydCkge1xuICAgIGFkZEVkZ2VNYXJrZXIoc3ZnUGF0aCwgXCJzdGFydFwiLCBlZGdlLmFycm93VHlwZVN0YXJ0LCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIH1cbiAgaWYgKGVkZ2UuYXJyb3dUeXBlRW5kKSB7XG4gICAgYWRkRWRnZU1hcmtlcihzdmdQYXRoLCBcImVuZFwiLCBlZGdlLmFycm93VHlwZUVuZCwgdXJsLCBpZCwgZGlhZ3JhbVR5cGUpO1xuICB9XG59LCBcImFkZEVkZ2VNYXJrZXJzXCIpO1xudmFyIGFycm93VHlwZXNNYXAgPSB7XG4gIGFycm93X2Nyb3NzOiBcImNyb3NzXCIsXG4gIGFycm93X3BvaW50OiBcInBvaW50XCIsXG4gIGFycm93X2JhcmI6IFwiYmFyYlwiLFxuICBhcnJvd19jaXJjbGU6IFwiY2lyY2xlXCIsXG4gIGFnZ3JlZ2F0aW9uOiBcImFnZ3JlZ2F0aW9uXCIsXG4gIGV4dGVuc2lvbjogXCJleHRlbnNpb25cIixcbiAgY29tcG9zaXRpb246IFwiY29tcG9zaXRpb25cIixcbiAgZGVwZW5kZW5jeTogXCJkZXBlbmRlbmN5XCIsXG4gIGxvbGxpcG9wOiBcImxvbGxpcG9wXCJcbn07XG52YXIgYWRkRWRnZU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Z1BhdGgsIHBvc2l0aW9uLCBhcnJvd1R5cGUsIHVybCwgaWQsIGRpYWdyYW1UeXBlKSA9PiB7XG4gIGNvbnN0IGVuZE1hcmtlclR5cGUgPSBhcnJvd1R5cGVzTWFwW2Fycm93VHlwZV07XG4gIGlmICghZW5kTWFya2VyVHlwZSkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7YXJyb3dUeXBlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdWZmaXggPSBwb3NpdGlvbiA9PT0gXCJzdGFydFwiID8gXCJTdGFydFwiIDogXCJFbmRcIjtcbiAgc3ZnUGF0aC5hdHRyKGBtYXJrZXItJHtwb3NpdGlvbn1gLCBgdXJsKCR7dXJsfSMke2lkfV8ke2RpYWdyYW1UeXBlfS0ke2VuZE1hcmtlclR5cGV9JHtzdWZmaXh9KWApO1xufSwgXCJhZGRFZGdlTWFya2VyXCIpO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9lZGdlcy5qc1xudmFyIGVkZ2VMYWJlbHMgPSB7fTtcbnZhciB0ZXJtaW5hbExhYmVscyA9IHt9O1xudmFyIGNsZWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGVkZ2VMYWJlbHMgPSB7fTtcbiAgdGVybWluYWxMYWJlbHMgPSB7fTtcbn0sIFwiY2xlYXJcIik7XG52YXIgaW5zZXJ0RWRnZUxhYmVsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgZWRnZSkgPT4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IGV2YWx1YXRlKGNvbmZpZy5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGNvbnN0IGxhYmVsRWxlbWVudCA9IGVkZ2UubGFiZWxUeXBlID09PSBcIm1hcmtkb3duXCIgPyBjcmVhdGVUZXh0KFxuICAgIGVsZW0sXG4gICAgZWRnZS5sYWJlbCxcbiAgICB7XG4gICAgICBzdHlsZTogZWRnZS5sYWJlbFN0eWxlLFxuICAgICAgdXNlSHRtbExhYmVscyxcbiAgICAgIGFkZFN2Z0JhY2tncm91bmQ6IHRydWVcbiAgICB9LFxuICAgIGNvbmZpZ1xuICApIDogY3JlYXRlTGFiZWxfZGVmYXVsdChlZGdlLmxhYmVsLCBlZGdlLmxhYmVsU3R5bGUpO1xuICBjb25zdCBlZGdlTGFiZWwgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZUxhYmVsXCIpO1xuICBjb25zdCBsYWJlbCA9IGVkZ2VMYWJlbC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgbGV0IGJib3ggPSBsYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICBpZiAodXNlSHRtbExhYmVscykge1xuICAgIGNvbnN0IGRpdiA9IGxhYmVsRWxlbWVudC5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdChsYWJlbEVsZW1lbnQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGxhYmVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtYmJveC53aWR0aCAvIDIgKyBcIiwgXCIgKyAtYmJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICBlZGdlTGFiZWxzW2VkZ2UuaWRdID0gZWRnZUxhYmVsO1xuICBlZGdlLndpZHRoID0gYmJveC53aWR0aDtcbiAgZWRnZS5oZWlnaHQgPSBiYm94LmhlaWdodDtcbiAgbGV0IGZvO1xuICBpZiAoZWRnZS5zdGFydExhYmVsTGVmdCkge1xuICAgIGNvbnN0IHN0YXJ0TGFiZWxFbGVtZW50ID0gY3JlYXRlTGFiZWxfZGVmYXVsdChlZGdlLnN0YXJ0TGFiZWxMZWZ0LCBlZGdlLmxhYmVsU3R5bGUpO1xuICAgIGNvbnN0IHN0YXJ0RWRnZUxhYmVsTGVmdCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gc3RhcnRFZGdlTGFiZWxMZWZ0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBpbm5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoc3RhcnRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gc3RhcnRMYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIGlubmVyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtc2xCb3gud2lkdGggLyAyICsgXCIsIFwiICsgLXNsQm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVsc1tlZGdlLmlkXSkge1xuICAgICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0gPSB7fTtcbiAgICB9XG4gICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uc3RhcnRMZWZ0ID0gc3RhcnRFZGdlTGFiZWxMZWZ0O1xuICAgIHNldFRlcm1pbmFsV2lkdGgoZm8sIGVkZ2Uuc3RhcnRMYWJlbExlZnQpO1xuICB9XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxSaWdodCkge1xuICAgIGNvbnN0IHN0YXJ0TGFiZWxFbGVtZW50ID0gY3JlYXRlTGFiZWxfZGVmYXVsdChlZGdlLnN0YXJ0TGFiZWxSaWdodCwgZWRnZS5sYWJlbFN0eWxlKTtcbiAgICBjb25zdCBzdGFydEVkZ2VMYWJlbFJpZ2h0ID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VUZXJtaW5hbHNcIik7XG4gICAgY29uc3QgaW5uZXIgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChzdGFydExhYmVsRWxlbWVudCk7XG4gICAgaW5uZXIubm9kZSgpLmFwcGVuZENoaWxkKHN0YXJ0TGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBzbEJveCA9IHN0YXJ0TGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHNbZWRnZS5pZF0pIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdID0ge307XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0UmlnaHQgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0O1xuICAgIHNldFRlcm1pbmFsV2lkdGgoZm8sIGVkZ2Uuc3RhcnRMYWJlbFJpZ2h0KTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbmRMYWJlbEVsZW1lbnQgPSBjcmVhdGVMYWJlbF9kZWZhdWx0KGVkZ2UuZW5kTGFiZWxMZWZ0LCBlZGdlLmxhYmVsU3R5bGUpO1xuICAgIGNvbnN0IGVuZEVkZ2VMYWJlbExlZnQgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVRlcm1pbmFsc1wiKTtcbiAgICBjb25zdCBpbm5lciA9IGVuZEVkZ2VMYWJlbExlZnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbExlZnQubm9kZSgpLmFwcGVuZENoaWxkKGVuZExhYmVsRWxlbWVudCk7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVsc1tlZGdlLmlkXSkge1xuICAgICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0gPSB7fTtcbiAgICB9XG4gICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uZW5kTGVmdCA9IGVuZEVkZ2VMYWJlbExlZnQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5lbmRMYWJlbExlZnQpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbmRMYWJlbEVsZW1lbnQgPSBjcmVhdGVMYWJlbF9kZWZhdWx0KGVkZ2UuZW5kTGFiZWxSaWdodCwgZWRnZS5sYWJlbFN0eWxlKTtcbiAgICBjb25zdCBlbmRFZGdlTGFiZWxSaWdodCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gZW5kRWRnZUxhYmVsUmlnaHQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHNbZWRnZS5pZF0pIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdID0ge307XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLmVuZFJpZ2h0ID0gZW5kRWRnZUxhYmVsUmlnaHQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5lbmRMYWJlbFJpZ2h0KTtcbiAgfVxuICByZXR1cm4gbGFiZWxFbGVtZW50O1xufSwgXCJpbnNlcnRFZGdlTGFiZWxcIik7XG5mdW5jdGlvbiBzZXRUZXJtaW5hbFdpZHRoKGZvLCB2YWx1ZSkge1xuICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMgJiYgZm8pIHtcbiAgICBmby5zdHlsZS53aWR0aCA9IHZhbHVlLmxlbmd0aCAqIDkgKyBcInB4XCI7XG4gICAgZm8uc3R5bGUuaGVpZ2h0ID0gXCIxMnB4XCI7XG4gIH1cbn1cbl9fbmFtZShzZXRUZXJtaW5hbFdpZHRoLCBcInNldFRlcm1pbmFsV2lkdGhcIik7XG52YXIgcG9zaXRpb25FZGdlTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlZGdlLCBwYXRocykgPT4ge1xuICBsb2cuZGVidWcoXCJNb3ZpbmcgbGFiZWwgYWJjODggXCIsIGVkZ2UuaWQsIGVkZ2UubGFiZWwsIGVkZ2VMYWJlbHNbZWRnZS5pZF0sIHBhdGhzKTtcbiAgbGV0IHBhdGggPSBwYXRocy51cGRhdGVkUGF0aCA/IHBhdGhzLnVwZGF0ZWRQYXRoIDogcGF0aHMub3JpZ2luYWxQYXRoO1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgaWYgKGVkZ2UubGFiZWwpIHtcbiAgICBjb25zdCBlbCA9IGVkZ2VMYWJlbHNbZWRnZS5pZF07XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY0xhYmVsUG9zaXRpb24ocGF0aCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIFwiTW92aW5nIGxhYmVsIFwiICsgZWRnZS5sYWJlbCArIFwiIGZyb20gKFwiLFxuICAgICAgICB4LFxuICAgICAgICBcIixcIixcbiAgICAgICAgeSxcbiAgICAgICAgXCIpIHRvIChcIixcbiAgICAgICAgcG9zLngsXG4gICAgICAgIFwiLFwiLFxuICAgICAgICBwb3MueSxcbiAgICAgICAgXCIpIGFiYzg4XCJcbiAgICAgICk7XG4gICAgICBpZiAocGF0aHMudXBkYXRlZFBhdGgpIHtcbiAgICAgICAgeCA9IHBvcy54O1xuICAgICAgICB5ID0gcG9zLnk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3kgKyBzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW4gLyAyfSlgKTtcbiAgfVxuICBpZiAoZWRnZS5zdGFydExhYmVsTGVmdCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uc3RhcnRMZWZ0O1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlsc19kZWZhdWx0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oZWRnZS5hcnJvd1R5cGVTdGFydCA/IDEwIDogMCwgXCJzdGFydF9sZWZ0XCIsIHBhdGgpO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSlgKTtcbiAgfVxuICBpZiAoZWRnZS5zdGFydExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0UmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihcbiAgICAgICAgZWRnZS5hcnJvd1R5cGVTdGFydCA/IDEwIDogMCxcbiAgICAgICAgXCJzdGFydF9yaWdodFwiLFxuICAgICAgICBwYXRoXG4gICAgICApO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSlgKTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLmVuZExlZnQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZUVuZCA/IDEwIDogMCwgXCJlbmRfbGVmdFwiLCBwYXRoKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7eH0sICR7eX0pYCk7XG4gIH1cbiAgaWYgKGVkZ2UuZW5kTGFiZWxSaWdodCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uZW5kUmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZUVuZCA/IDEwIDogMCwgXCJlbmRfcmlnaHRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApO1xuICB9XG59LCBcInBvc2l0aW9uRWRnZUxhYmVsXCIpO1xudmFyIG91dHNpZGVOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgcG9pbnQyKSA9PiB7XG4gIGNvbnN0IHggPSBub2RlLng7XG4gIGNvbnN0IHkgPSBub2RlLnk7XG4gIGNvbnN0IGR4ID0gTWF0aC5hYnMocG9pbnQyLnggLSB4KTtcbiAgY29uc3QgZHkgPSBNYXRoLmFicyhwb2ludDIueSAtIHkpO1xuICBjb25zdCB3ID0gbm9kZS53aWR0aCAvIDI7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodCAvIDI7XG4gIGlmIChkeCA+PSB3IHx8IGR5ID49IGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcIm91dHNpZGVOb2RlXCIpO1xudmFyIGludGVyc2VjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUsIG91dHNpZGVQb2ludCwgaW5zaWRlUG9pbnQpID0+IHtcbiAgbG9nLmRlYnVnKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OTpcbiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KG91dHNpZGVQb2ludCl9XG4gIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShpbnNpZGVQb2ludCl9XG4gIG5vZGUgICAgICAgIDogeDoke25vZGUueH0geToke25vZGUueX0gdzoke25vZGUud2lkdGh9IGg6JHtub2RlLmhlaWdodH1gKTtcbiAgY29uc3QgeCA9IG5vZGUueDtcbiAgY29uc3QgeSA9IG5vZGUueTtcbiAgY29uc3QgZHggPSBNYXRoLmFicyh4IC0gaW5zaWRlUG9pbnQueCk7XG4gIGNvbnN0IHcgPSBub2RlLndpZHRoIC8gMjtcbiAgbGV0IHIgPSBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyB3IC0gZHggOiB3ICsgZHg7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodCAvIDI7XG4gIGNvbnN0IFEgPSBNYXRoLmFicyhvdXRzaWRlUG9pbnQueSAtIGluc2lkZVBvaW50LnkpO1xuICBjb25zdCBSID0gTWF0aC5hYnMob3V0c2lkZVBvaW50LnggLSBpbnNpZGVQb2ludC54KTtcbiAgaWYgKE1hdGguYWJzKHkgLSBvdXRzaWRlUG9pbnQueSkgKiB3ID4gTWF0aC5hYnMoeCAtIG91dHNpZGVQb2ludC54KSAqIGgpIHtcbiAgICBsZXQgcSA9IGluc2lkZVBvaW50LnkgPCBvdXRzaWRlUG9pbnQueSA/IG91dHNpZGVQb2ludC55IC0gaCAtIHkgOiB5IC0gaCAtIG91dHNpZGVQb2ludC55O1xuICAgIHIgPSBSICogcSAvIFE7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgeDogaW5zaWRlUG9pbnQueCA8IG91dHNpZGVQb2ludC54ID8gaW5zaWRlUG9pbnQueCArIHIgOiBpbnNpZGVQb2ludC54IC0gUiArIHIsXG4gICAgICB5OiBpbnNpZGVQb2ludC55IDwgb3V0c2lkZVBvaW50LnkgPyBpbnNpZGVQb2ludC55ICsgUSAtIHEgOiBpbnNpZGVQb2ludC55IC0gUSArIHFcbiAgICB9O1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICByZXMueCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgcmVzLnkgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIHJlcy54ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICByZXMueSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICBsb2cuZGVidWcoYGFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICR7UX0sIHEgJHtxfSwgUiAke1J9LCByICR7cn1gLCByZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCkge1xuICAgICAgciA9IG91dHNpZGVQb2ludC54IC0gdyAtIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSB4IC0gdyAtIG91dHNpZGVQb2ludC54O1xuICAgIH1cbiAgICBsZXQgcSA9IFEgKiByIC8gUjtcbiAgICBsZXQgX3ggPSBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgUiAtIHIgOiBpbnNpZGVQb2ludC54IC0gUiArIHI7XG4gICAgbGV0IF95ID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gaW5zaWRlUG9pbnQueSArIHEgOiBpbnNpZGVQb2ludC55IC0gcTtcbiAgICBsb2cuZGVidWcoYHNpZGVzIGNhbGMgYWJjODksIFEgJHtRfSwgcSAke3F9LCBSICR7Un0sIHIgJHtyfWAsIHsgX3gsIF95IH0pO1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICBfeCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgX3kgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIF94ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICBfeSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICByZXR1cm4geyB4OiBfeCwgeTogX3kgfTtcbiAgfVxufSwgXCJpbnRlcnNlY3Rpb25cIik7XG52YXIgY3V0UGF0aEF0SW50ZXJzZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3BvaW50cywgYm91bmRhcnlOb2RlKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdFwiLCBfcG9pbnRzLCBib3VuZGFyeU5vZGUpO1xuICBsZXQgcG9pbnRzID0gW107XG4gIGxldCBsYXN0UG9pbnRPdXRzaWRlID0gX3BvaW50c1swXTtcbiAgbGV0IGlzSW5zaWRlID0gZmFsc2U7XG4gIF9wb2ludHMuZm9yRWFjaCgocG9pbnQyKSA9PiB7XG4gICAgaWYgKCFvdXRzaWRlTm9kZShib3VuZGFyeU5vZGUsIHBvaW50MikgJiYgIWlzSW5zaWRlKSB7XG4gICAgICBjb25zdCBpbnRlciA9IGludGVyc2VjdGlvbihib3VuZGFyeU5vZGUsIGxhc3RQb2ludE91dHNpZGUsIHBvaW50Mik7XG4gICAgICBsZXQgcG9pbnRQcmVzZW50ID0gZmFsc2U7XG4gICAgICBwb2ludHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBwb2ludFByZXNlbnQgPSBwb2ludFByZXNlbnQgfHwgcC54ID09PSBpbnRlci54ICYmIHAueSA9PT0gaW50ZXIueTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFwb2ludHMuc29tZSgoZSkgPT4gZS54ID09PSBpbnRlci54ICYmIGUueSA9PT0gaW50ZXIueSkpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goaW50ZXIpO1xuICAgICAgfVxuICAgICAgaXNJbnNpZGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0UG9pbnRPdXRzaWRlID0gcG9pbnQyO1xuICAgICAgaWYgKCFpc0luc2lkZSkge1xuICAgICAgICBwb2ludHMucHVzaChwb2ludDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwb2ludHM7XG59LCBcImN1dFBhdGhBdEludGVyc2VjdFwiKTtcbnZhciBpbnNlcnRFZGdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBlLCBlZGdlLCBjbHVzdGVyRGIsIGRpYWdyYW1UeXBlLCBncmFwaCwgaWQpIHtcbiAgbGV0IHBvaW50cyA9IGVkZ2UucG9pbnRzO1xuICBsb2cuZGVidWcoXCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPVwiLCBlZGdlLCBcImU9XCIsIGUpO1xuICBsZXQgcG9pbnRzSGFzQ2hhbmdlZCA9IGZhbHNlO1xuICBjb25zdCB0YWlsID0gZ3JhcGgubm9kZShlLnYpO1xuICB2YXIgaGVhZCA9IGdyYXBoLm5vZGUoZS53KTtcbiAgaWYgKGhlYWQ/LmludGVyc2VjdCAmJiB0YWlsPy5pbnRlcnNlY3QpIHtcbiAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoMSwgZWRnZS5wb2ludHMubGVuZ3RoIC0gMSk7XG4gICAgcG9pbnRzLnVuc2hpZnQodGFpbC5pbnRlcnNlY3QocG9pbnRzWzBdKSk7XG4gICAgcG9pbnRzLnB1c2goaGVhZC5pbnRlcnNlY3QocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSkpO1xuICB9XG4gIGlmIChlZGdlLnRvQ2x1c3Rlcikge1xuICAgIGxvZy5kZWJ1ZyhcInRvIGNsdXN0ZXIgYWJjODhcIiwgY2x1c3RlckRiW2VkZ2UudG9DbHVzdGVyXSk7XG4gICAgcG9pbnRzID0gY3V0UGF0aEF0SW50ZXJzZWN0KGVkZ2UucG9pbnRzLCBjbHVzdGVyRGJbZWRnZS50b0NsdXN0ZXJdLm5vZGUpO1xuICAgIHBvaW50c0hhc0NoYW5nZWQgPSB0cnVlO1xuICB9XG4gIGlmIChlZGdlLmZyb21DbHVzdGVyKSB7XG4gICAgbG9nLmRlYnVnKFwiZnJvbSBjbHVzdGVyIGFiYzg4XCIsIGNsdXN0ZXJEYltlZGdlLmZyb21DbHVzdGVyXSk7XG4gICAgcG9pbnRzID0gY3V0UGF0aEF0SW50ZXJzZWN0KHBvaW50cy5yZXZlcnNlKCksIGNsdXN0ZXJEYltlZGdlLmZyb21DbHVzdGVyXS5ub2RlKS5yZXZlcnNlKCk7XG4gICAgcG9pbnRzSGFzQ2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgY29uc3QgbGluZURhdGEgPSBwb2ludHMuZmlsdGVyKChwKSA9PiAhTnVtYmVyLmlzTmFOKHAueSkpO1xuICBsZXQgY3VydmUgPSBjdXJ2ZUJhc2lzO1xuICBpZiAoZWRnZS5jdXJ2ZSAmJiAoZGlhZ3JhbVR5cGUgPT09IFwiZ3JhcGhcIiB8fCBkaWFncmFtVHlwZSA9PT0gXCJmbG93Y2hhcnRcIikpIHtcbiAgICBjdXJ2ZSA9IGVkZ2UuY3VydmU7XG4gIH1cbiAgY29uc3QgeyB4LCB5IH0gPSBnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldChlZGdlKTtcbiAgY29uc3QgbGluZUZ1bmN0aW9uID0gbGluZSgpLngoeCkueSh5KS5jdXJ2ZShjdXJ2ZSk7XG4gIGxldCBzdHJva2VDbGFzc2VzO1xuICBzd2l0Y2ggKGVkZ2UudGhpY2tuZXNzKSB7XG4gICAgY2FzZSBcIm5vcm1hbFwiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3Mtbm9ybWFsXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGhpY2tcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcImVkZ2UtdGhpY2tuZXNzLXRoaWNrXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaW52aXNpYmxlXCI6XG4gICAgICBzdHJva2VDbGFzc2VzID0gXCJlZGdlLXRoaWNrbmVzcy10aGlja1wiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcIlwiO1xuICB9XG4gIHN3aXRjaCAoZWRnZS5wYXR0ZXJuKSB7XG4gICAgY2FzZSBcInNvbGlkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1zb2xpZFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRvdHRlZFwiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyArPSBcIiBlZGdlLXBhdHRlcm4tZG90dGVkXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGFzaGVkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1kYXNoZWRcIjtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGNvbnN0IHN2Z1BhdGggPSBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgbGluZUZ1bmN0aW9uKGxpbmVEYXRhKSkuYXR0cihcImlkXCIsIGVkZ2UuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIiBcIiArIHN0cm9rZUNsYXNzZXMgKyAoZWRnZS5jbGFzc2VzID8gXCIgXCIgKyBlZGdlLmNsYXNzZXMgOiBcIlwiKSkuYXR0cihcInN0eWxlXCIsIGVkZ2Uuc3R5bGUpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGdldENvbmZpZygpLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlIHx8IGdldENvbmZpZygpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUpIHtcbiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKC9nLCBcIlxcXFwoXCIpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCkvZywgXCJcXFxcKVwiKTtcbiAgfVxuICBhZGRFZGdlTWFya2VycyhzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIGxldCBwYXRocyA9IHt9O1xuICBpZiAocG9pbnRzSGFzQ2hhbmdlZCkge1xuICAgIHBhdGhzLnVwZGF0ZWRQYXRoID0gcG9pbnRzO1xuICB9XG4gIHBhdGhzLm9yaWdpbmFsUGF0aCA9IGVkZ2UucG9pbnRzO1xuICByZXR1cm4gcGF0aHM7XG59LCBcImluc2VydEVkZ2VcIik7XG5cbmV4cG9ydCB7XG4gIG1hcmtlcnNfZGVmYXVsdCxcbiAgY2xlYXIsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgcG9zaXRpb25FZGdlTGFiZWwsXG4gIGluc2VydEVkZ2Vcbn07XG4iLAogICAgImltcG9ydCB7XG4gIGNsZWFyIGFzIGNsZWFyMixcbiAgaW5zZXJ0RWRnZSxcbiAgaW5zZXJ0RWRnZUxhYmVsLFxuICBtYXJrZXJzX2RlZmF1bHQsXG4gIHBvc2l0aW9uRWRnZUxhYmVsXG59IGZyb20gXCIuL2NodW5rLU1LQUlGS1c1Lm1qc1wiO1xuaW1wb3J0IHtcbiAgY2xhc3NEYl9kZWZhdWx0LFxuICBjbGFzc0RpYWdyYW1fZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstQkFWT0dLRlcubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhcixcbiAgY3JlYXRlTGFiZWxfZGVmYXVsdCxcbiAgaW5zZXJ0Tm9kZSxcbiAgaW50ZXJzZWN0X3JlY3RfZGVmYXVsdCxcbiAgcG9zaXRpb25Ob2RlLFxuICBzZXROb2RlRWxlbSxcbiAgdXBkYXRlTm9kZUJvdW5kc1xufSBmcm9tIFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCB7XG4gIGdldFN1YkdyYXBoVGl0bGVNYXJnaW5zXG59IGZyb20gXCIuL2NodW5rLTIzQVRNWlhWLm1qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVGV4dFxufSBmcm9tIFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCB7XG4gIGdldEVkZ2VJZCxcbiAgZ2V0U3R5bGVzRnJvbUFycmF5LFxuICBpbnRlcnBvbGF0ZVRvQ3VydmUsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBldmFsdWF0ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGxvZyxcbiAgc2V0dXBHcmFwaFZpZXdib3hcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc1JlbmRlcmVyLXYyLnRzXG5pbXBvcnQgeyBzZWxlY3QgYXMgc2VsZWN0MiwgY3VydmVMaW5lYXIgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliMiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2luZGV4LmpzXG5pbXBvcnQgeyBsYXlvdXQgYXMgZGFncmVMYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24yIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvanNvbi5qc1wiO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9tZXJtYWlkLWdyYXBobGliLmpzXG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG52YXIgY2x1c3RlckRiID0ge307XG52YXIgZGVzY2VuZGFudHMgPSB7fTtcbnZhciBwYXJlbnRzID0ge307XG52YXIgY2xlYXIzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRlc2NlbmRhbnRzID0ge307XG4gIHBhcmVudHMgPSB7fTtcbiAgY2x1c3RlckRiID0ge307XG59LCBcImNsZWFyXCIpO1xudmFyIGlzRGVzY2VuZGFudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkLCBhbmNlc3RvcklkKSA9PiB7XG4gIGxvZy50cmFjZShcIkluIGlzRGVzY2VuZGFudFwiLCBhbmNlc3RvcklkLCBcIiBcIiwgaWQsIFwiID0gXCIsIGRlc2NlbmRhbnRzW2FuY2VzdG9ySWRdLmluY2x1ZGVzKGlkKSk7XG4gIGlmIChkZXNjZW5kYW50c1thbmNlc3RvcklkXS5pbmNsdWRlcyhpZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcImlzRGVzY2VuZGFudFwiKTtcbnZhciBlZGdlSW5DbHVzdGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWRnZSwgY2x1c3RlcklkKSA9PiB7XG4gIGxvZy5pbmZvKFwiRGVzY2VuZGFudHMgb2YgXCIsIGNsdXN0ZXJJZCwgXCIgaXMgXCIsIGRlc2NlbmRhbnRzW2NsdXN0ZXJJZF0pO1xuICBsb2cuaW5mbyhcIkVkZ2UgaXMgXCIsIGVkZ2UpO1xuICBpZiAoZWRnZS52ID09PSBjbHVzdGVySWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGVkZ2UudyA9PT0gY2x1c3RlcklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghZGVzY2VuZGFudHNbY2x1c3RlcklkXSkge1xuICAgIGxvZy5kZWJ1ZyhcIlRpbHQsIFwiLCBjbHVzdGVySWQsIFwiLG5vdCBpbiBkZXNjZW5kYW50c1wiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRlc2NlbmRhbnRzW2NsdXN0ZXJJZF0uaW5jbHVkZXMoZWRnZS52KSB8fCBpc0Rlc2NlbmRhbnQoZWRnZS52LCBjbHVzdGVySWQpIHx8IGlzRGVzY2VuZGFudChlZGdlLncsIGNsdXN0ZXJJZCkgfHwgZGVzY2VuZGFudHNbY2x1c3RlcklkXS5pbmNsdWRlcyhlZGdlLncpO1xufSwgXCJlZGdlSW5DbHVzdGVyXCIpO1xudmFyIGNvcHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbHVzdGVySWQsIGdyYXBoLCBuZXdHcmFwaCwgcm9vdElkKSA9PiB7XG4gIGxvZy53YXJuKFxuICAgIFwiQ29weWluZyBjaGlsZHJlbiBvZiBcIixcbiAgICBjbHVzdGVySWQsXG4gICAgXCJyb290XCIsXG4gICAgcm9vdElkLFxuICAgIFwiZGF0YVwiLFxuICAgIGdyYXBoLm5vZGUoY2x1c3RlcklkKSxcbiAgICByb290SWRcbiAgKTtcbiAgY29uc3Qgbm9kZXMgPSBncmFwaC5jaGlsZHJlbihjbHVzdGVySWQpIHx8IFtdO1xuICBpZiAoY2x1c3RlcklkICE9PSByb290SWQpIHtcbiAgICBub2Rlcy5wdXNoKGNsdXN0ZXJJZCk7XG4gIH1cbiAgbG9nLndhcm4oXCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkXCIsIGNsdXN0ZXJJZCwgXCJub2Rlc1wiLCBub2Rlcyk7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBpZiAoZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgY29weShub2RlLCBncmFwaCwgbmV3R3JhcGgsIHJvb3RJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBncmFwaC5ub2RlKG5vZGUpO1xuICAgICAgbG9nLmluZm8oXCJjcCBcIiwgbm9kZSwgXCIgdG8gXCIsIHJvb3RJZCwgXCIgd2l0aCBwYXJlbnQgXCIsIGNsdXN0ZXJJZCk7XG4gICAgICBuZXdHcmFwaC5zZXROb2RlKG5vZGUsIGRhdGEpO1xuICAgICAgaWYgKHJvb3RJZCAhPT0gZ3JhcGgucGFyZW50KG5vZGUpKSB7XG4gICAgICAgIGxvZy53YXJuKFwiU2V0dGluZyBwYXJlbnRcIiwgbm9kZSwgZ3JhcGgucGFyZW50KG5vZGUpKTtcbiAgICAgICAgbmV3R3JhcGguc2V0UGFyZW50KG5vZGUsIGdyYXBoLnBhcmVudChub2RlKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2x1c3RlcklkICE9PSByb290SWQgJiYgbm9kZSAhPT0gY2x1c3RlcklkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlNldHRpbmcgcGFyZW50XCIsIG5vZGUsIGNsdXN0ZXJJZCk7XG4gICAgICAgIG5ld0dyYXBoLnNldFBhcmVudChub2RlLCBjbHVzdGVySWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oXCJJbiBjb3B5IFwiLCBjbHVzdGVySWQsIFwicm9vdFwiLCByb290SWQsIFwiZGF0YVwiLCBncmFwaC5ub2RlKGNsdXN0ZXJJZCksIHJvb3RJZCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBcIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT1cIixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIFwiY2x1c3RlciE9PXJvb3RJZFwiLFxuICAgICAgICAgIGNsdXN0ZXJJZCAhPT0gcm9vdElkLFxuICAgICAgICAgIFwibm9kZSE9PWNsdXN0ZXJJZFwiLFxuICAgICAgICAgIG5vZGUgIT09IGNsdXN0ZXJJZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZWRnZXMgPSBncmFwaC5lZGdlcyhub2RlKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNvcHlpbmcgRWRnZXNcIiwgZWRnZXMpO1xuICAgICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhcIkVkZ2VcIiwgZWRnZSk7XG4gICAgICAgIGNvbnN0IGRhdGEyID0gZ3JhcGguZWRnZShlZGdlLnYsIGVkZ2UudywgZWRnZS5uYW1lKTtcbiAgICAgICAgbG9nLmluZm8oXCJFZGdlIGRhdGFcIiwgZGF0YTIsIHJvb3RJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVkZ2VJbkNsdXN0ZXIoZWRnZSwgcm9vdElkKSkge1xuICAgICAgICAgICAgbG9nLmluZm8oXCJDb3B5aW5nIGFzIFwiLCBlZGdlLnYsIGVkZ2UudywgZGF0YTIsIGVkZ2UubmFtZSk7XG4gICAgICAgICAgICBuZXdHcmFwaC5zZXRFZGdlKGVkZ2UudiwgZWRnZS53LCBkYXRhMiwgZWRnZS5uYW1lKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwibmV3R3JhcGggZWRnZXMgXCIsIG5ld0dyYXBoLmVkZ2VzKCksIG5ld0dyYXBoLmVkZ2UobmV3R3JhcGguZWRnZXMoKVswXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgICAgXCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgXCIsXG4gICAgICAgICAgICAgIGVkZ2UudixcbiAgICAgICAgICAgICAgXCItLT5cIixcbiAgICAgICAgICAgICAgZWRnZS53LFxuICAgICAgICAgICAgICBcIiByb290SWQ6IFwiLFxuICAgICAgICAgICAgICByb290SWQsXG4gICAgICAgICAgICAgIFwiIGNsdXN0ZXJJZDpcIixcbiAgICAgICAgICAgICAgY2x1c3RlcklkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcIlJlbW92aW5nIG5vZGVcIiwgbm9kZSk7XG4gICAgZ3JhcGgucmVtb3ZlTm9kZShub2RlKTtcbiAgfSk7XG59LCBcImNvcHlcIik7XG52YXIgZXh0cmFjdERlc2NlbmRhbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQsIGdyYXBoKSA9PiB7XG4gIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICBsZXQgcmVzID0gWy4uLmNoaWxkcmVuXTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHBhcmVudHNbY2hpbGRdID0gaWQ7XG4gICAgcmVzID0gWy4uLnJlcywgLi4uZXh0cmFjdERlc2NlbmRhbnRzKGNoaWxkLCBncmFwaCldO1xuICB9XG4gIHJldHVybiByZXM7XG59LCBcImV4dHJhY3REZXNjZW5kYW50c1wiKTtcbnZhciBmaW5kTm9uQ2x1c3RlckNoaWxkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQsIGdyYXBoKSA9PiB7XG4gIGxvZy50cmFjZShcIlNlYXJjaGluZ1wiLCBpZCk7XG4gIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICBsb2cudHJhY2UoXCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgXCIsIGlkLCBjaGlsZHJlbik7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPCAxKSB7XG4gICAgbG9nLnRyYWNlKFwiVGhpcyBpcyBhIHZhbGlkIG5vZGVcIiwgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgY29uc3QgX2lkID0gZmluZE5vbkNsdXN0ZXJDaGlsZChjaGlsZCwgZ3JhcGgpO1xuICAgIGlmIChfaWQpIHtcbiAgICAgIGxvZy50cmFjZShcIkZvdW5kIHJlcGxhY2VtZW50IGZvclwiLCBpZCwgXCIgPT4gXCIsIF9pZCk7XG4gICAgICByZXR1cm4gX2lkO1xuICAgIH1cbiAgfVxufSwgXCJmaW5kTm9uQ2x1c3RlckNoaWxkXCIpO1xudmFyIGdldEFuY2hvcklkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQpID0+IHtcbiAgaWYgKCFjbHVzdGVyRGJbaWRdKSB7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGlmICghY2x1c3RlckRiW2lkXS5leHRlcm5hbENvbm5lY3Rpb25zKSB7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGlmIChjbHVzdGVyRGJbaWRdKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJEYltpZF0uaWQ7XG4gIH1cbiAgcmV0dXJuIGlkO1xufSwgXCJnZXRBbmNob3JJZFwiKTtcbnZhciBhZGp1c3RDbHVzdGVyc0FuZEVkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIGRlcHRoKSA9PiB7XG4gIGlmICghZ3JhcGggfHwgZGVwdGggPiAxMCkge1xuICAgIGxvZy5kZWJ1ZyhcIk9wdGluZyBvdXQsIG5vIGdyYXBoIFwiKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKFwiT3B0aW5nIGluLCBncmFwaCBcIik7XG4gIH1cbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihpZCk7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBcIkNsdXN0ZXIgaWRlbnRpZmllZFwiLFxuICAgICAgICBpZCxcbiAgICAgICAgXCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6IFwiLFxuICAgICAgICBmaW5kTm9uQ2x1c3RlckNoaWxkKGlkLCBncmFwaClcbiAgICAgICk7XG4gICAgICBkZXNjZW5kYW50c1tpZF0gPSBleHRyYWN0RGVzY2VuZGFudHMoaWQsIGdyYXBoKTtcbiAgICAgIGNsdXN0ZXJEYltpZF0gPSB7IGlkOiBmaW5kTm9uQ2x1c3RlckNoaWxkKGlkLCBncmFwaCksIGNsdXN0ZXJEYXRhOiBncmFwaC5ub2RlKGlkKSB9O1xuICAgIH1cbiAgfSk7XG4gIGdyYXBoLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICAgIGNvbnN0IGVkZ2VzID0gZ3JhcGguZWRnZXMoKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLmRlYnVnKFwiQ2x1c3RlciBpZGVudGlmaWVkXCIsIGlkLCBkZXNjZW5kYW50cyk7XG4gICAgICBlZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgICAgIGlmIChlZGdlLnYgIT09IGlkICYmIGVkZ2UudyAhPT0gaWQpIHtcbiAgICAgICAgICBjb25zdCBkMSA9IGlzRGVzY2VuZGFudChlZGdlLnYsIGlkKTtcbiAgICAgICAgICBjb25zdCBkMiA9IGlzRGVzY2VuZGFudChlZGdlLncsIGlkKTtcbiAgICAgICAgICBpZiAoZDEgXiBkMikge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJFZGdlOiBcIiwgZWRnZSwgXCIgbGVhdmVzIGNsdXN0ZXIgXCIsIGlkKTtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRGVzY2VuZGFudHMgb2YgWFhYIFwiLCBpZCwgXCI6IFwiLCBkZXNjZW5kYW50c1tpZF0pO1xuICAgICAgICAgICAgY2x1c3RlckRiW2lkXS5leHRlcm5hbENvbm5lY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZGVidWcoXCJOb3QgYSBjbHVzdGVyIFwiLCBpZCwgZGVzY2VuZGFudHMpO1xuICAgIH1cbiAgfSk7XG4gIGZvciAobGV0IGlkIG9mIE9iamVjdC5rZXlzKGNsdXN0ZXJEYikpIHtcbiAgICBjb25zdCBub25DbHVzdGVyQ2hpbGQgPSBjbHVzdGVyRGJbaWRdLmlkO1xuICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudChub25DbHVzdGVyQ2hpbGQpO1xuICAgIGlmIChwYXJlbnQgIT09IGlkICYmIGNsdXN0ZXJEYltwYXJlbnRdICYmICFjbHVzdGVyRGJbcGFyZW50XS5leHRlcm5hbENvbm5lY3Rpb25zKSB7XG4gICAgICBjbHVzdGVyRGJbaWRdLmlkID0gcGFyZW50O1xuICAgIH1cbiAgfVxuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgIGxldCB2ID0gZS52O1xuICAgIGxldCB3ID0gZS53O1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJGaXggWFhYXCIsXG4gICAgICBjbHVzdGVyRGIsXG4gICAgICBcImlkczpcIixcbiAgICAgIGUudixcbiAgICAgIGUudyxcbiAgICAgIFwiVHJhbnNsYXRpbmc6IFwiLFxuICAgICAgY2x1c3RlckRiW2Uudl0sXG4gICAgICBcIiAtLS0gXCIsXG4gICAgICBjbHVzdGVyRGJbZS53XVxuICAgICk7XG4gICAgaWYgKGNsdXN0ZXJEYltlLnZdICYmIGNsdXN0ZXJEYltlLnddICYmIGNsdXN0ZXJEYltlLnZdID09PSBjbHVzdGVyRGJbZS53XSkge1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYXCIsIGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFhcIiwgZS52LCBlLncsIGUubmFtZSk7XG4gICAgICB2ID0gZ2V0QW5jaG9ySWQoZS52KTtcbiAgICAgIHcgPSBnZXRBbmNob3JJZChlLncpO1xuICAgICAgZ3JhcGgucmVtb3ZlRWRnZShlLnYsIGUudywgZS5uYW1lKTtcbiAgICAgIGNvbnN0IHNwZWNpYWxJZCA9IGUudyArIFwiLS0tXCIgKyBlLnY7XG4gICAgICBncmFwaC5zZXROb2RlKHNwZWNpYWxJZCwge1xuICAgICAgICBkb21JZDogc3BlY2lhbElkLFxuICAgICAgICBpZDogc3BlY2lhbElkLFxuICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICBsYWJlbFRleHQ6IGVkZ2UubGFiZWwsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHNoYXBlOiBcImxhYmVsUmVjdFwiLFxuICAgICAgICBzdHlsZTogXCJcIlxuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGdlMSA9IHN0cnVjdHVyZWRDbG9uZShlZGdlKTtcbiAgICAgIGNvbnN0IGVkZ2UyID0gc3RydWN0dXJlZENsb25lKGVkZ2UpO1xuICAgICAgZWRnZTEubGFiZWwgPSBcIlwiO1xuICAgICAgZWRnZTEuYXJyb3dUeXBlRW5kID0gXCJub25lXCI7XG4gICAgICBlZGdlMi5sYWJlbCA9IFwiXCI7XG4gICAgICBlZGdlMS5mcm9tQ2x1c3RlciA9IGUudjtcbiAgICAgIGVkZ2UyLnRvQ2x1c3RlciA9IGUudjtcbiAgICAgIGdyYXBoLnNldEVkZ2Uodiwgc3BlY2lhbElkLCBlZGdlMSwgZS5uYW1lICsgXCItY3ljbGljLXNwZWNpYWxcIik7XG4gICAgICBncmFwaC5zZXRFZGdlKHNwZWNpYWxJZCwgdywgZWRnZTIsIGUubmFtZSArIFwiLWN5Y2xpYy1zcGVjaWFsXCIpO1xuICAgIH0gZWxzZSBpZiAoY2x1c3RlckRiW2Uudl0gfHwgY2x1c3RlckRiW2Uud10pIHtcbiAgICAgIGxvZy53YXJuKFwiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYXCIsIGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgdiA9IGdldEFuY2hvcklkKGUudik7XG4gICAgICB3ID0gZ2V0QW5jaG9ySWQoZS53KTtcbiAgICAgIGdyYXBoLnJlbW92ZUVkZ2UoZS52LCBlLncsIGUubmFtZSk7XG4gICAgICBpZiAodiAhPT0gZS52KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudCh2KTtcbiAgICAgICAgY2x1c3RlckRiW3BhcmVudF0uZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIGVkZ2UuZnJvbUNsdXN0ZXIgPSBlLnY7XG4gICAgICB9XG4gICAgICBpZiAodyAhPT0gZS53KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudCh3KTtcbiAgICAgICAgY2x1c3RlckRiW3BhcmVudF0uZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIGVkZ2UudG9DbHVzdGVyID0gZS53O1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oXCJGaXggUmVwbGFjaW5nIHdpdGggWFhYXCIsIHYsIHcsIGUubmFtZSk7XG4gICAgICBncmFwaC5zZXRFZGdlKHYsIHcsIGVkZ2UsIGUubmFtZSk7XG4gICAgfVxuICB9KTtcbiAgbG9nLndhcm4oXCJBZGp1c3RlZCBHcmFwaFwiLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpKTtcbiAgZXh0cmFjdG9yKGdyYXBoLCAwKTtcbiAgbG9nLnRyYWNlKGNsdXN0ZXJEYik7XG59LCBcImFkanVzdENsdXN0ZXJzQW5kRWRnZXNcIik7XG52YXIgZXh0cmFjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIGRlcHRoKSA9PiB7XG4gIGxvZy53YXJuKFwiZXh0cmFjdG9yIC0gXCIsIGRlcHRoLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpLCBncmFwaC5jaGlsZHJlbihcIkRcIikpO1xuICBpZiAoZGVwdGggPiAxMCkge1xuICAgIGxvZy5lcnJvcihcIkJhaWxpbmcgb3V0XCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbm9kZXMgPSBncmFwaC5ub2RlcygpO1xuICBsZXQgaGFzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihub2RlKTtcbiAgICBoYXNDaGlsZHJlbiA9IGhhc0NoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gIH1cbiAgaWYgKCFoYXNDaGlsZHJlbikge1xuICAgIGxvZy5kZWJ1ZyhcIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuXCIsIGdyYXBoLm5vZGVzKCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2cuZGVidWcoXCJOb2RlcyA9IFwiLCBub2RlcywgZGVwdGgpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcIkV4dHJhY3Rpbmcgbm9kZVwiLFxuICAgICAgbm9kZSxcbiAgICAgIGNsdXN0ZXJEYixcbiAgICAgIGNsdXN0ZXJEYltub2RlXSAmJiAhY2x1c3RlckRiW25vZGVdLmV4dGVybmFsQ29ubmVjdGlvbnMsXG4gICAgICAhZ3JhcGgucGFyZW50KG5vZGUpLFxuICAgICAgZ3JhcGgubm9kZShub2RlKSxcbiAgICAgIGdyYXBoLmNoaWxkcmVuKFwiRFwiKSxcbiAgICAgIFwiIERlcHRoIFwiLFxuICAgICAgZGVwdGhcbiAgICApO1xuICAgIGlmICghY2x1c3RlckRiW25vZGVdKSB7XG4gICAgICBsb2cuZGVidWcoXCJOb3QgYSBjbHVzdGVyXCIsIG5vZGUsIGRlcHRoKTtcbiAgICB9IGVsc2UgaWYgKCFjbHVzdGVyRGJbbm9kZV0uZXh0ZXJuYWxDb25uZWN0aW9ucyAmJiAvLyAhZ3JhcGgucGFyZW50KG5vZGUpICYmXG4gICAgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGRlcHRoXG4gICAgICApO1xuICAgICAgY29uc3QgZ3JhcGhTZXR0aW5ncyA9IGdyYXBoLmdyYXBoKCk7XG4gICAgICBsZXQgZGlyID0gZ3JhcGhTZXR0aW5ncy5yYW5rZGlyID09PSBcIlRCXCIgPyBcIkxSXCIgOiBcIlRCXCI7XG4gICAgICBpZiAoY2x1c3RlckRiW25vZGVdPy5jbHVzdGVyRGF0YT8uZGlyKSB7XG4gICAgICAgIGRpciA9IGNsdXN0ZXJEYltub2RlXS5jbHVzdGVyRGF0YS5kaXI7XG4gICAgICAgIGxvZy53YXJuKFwiRml4aW5nIGRpclwiLCBjbHVzdGVyRGJbbm9kZV0uY2x1c3RlckRhdGEuZGlyLCBkaXIpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2x1c3RlckdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgICAgY29tcG91bmQ6IHRydWVcbiAgICAgIH0pLnNldEdyYXBoKHtcbiAgICAgICAgcmFua2RpcjogZGlyLFxuICAgICAgICAvLyBUb2RvOiBzZXQgcHJvcGVyIHNwYWNpbmdcbiAgICAgICAgbm9kZXNlcDogNTAsXG4gICAgICAgIHJhbmtzZXA6IDUwLFxuICAgICAgICBtYXJnaW54OiA4LFxuICAgICAgICBtYXJnaW55OiA4XG4gICAgICB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcbiAgICAgIGxvZy53YXJuKFwiT2xkIGdyYXBoIGJlZm9yZSBjb3B5XCIsIGdyYXBobGliSnNvbi53cml0ZShncmFwaCkpO1xuICAgICAgY29weShub2RlLCBncmFwaCwgY2x1c3RlckdyYXBoLCBub2RlKTtcbiAgICAgIGdyYXBoLnNldE5vZGUobm9kZSwge1xuICAgICAgICBjbHVzdGVyTm9kZTogdHJ1ZSxcbiAgICAgICAgaWQ6IG5vZGUsXG4gICAgICAgIGNsdXN0ZXJEYXRhOiBjbHVzdGVyRGJbbm9kZV0uY2x1c3RlckRhdGEsXG4gICAgICAgIGxhYmVsVGV4dDogY2x1c3RlckRiW25vZGVdLmxhYmVsVGV4dCxcbiAgICAgICAgZ3JhcGg6IGNsdXN0ZXJHcmFwaFxuICAgICAgfSk7XG4gICAgICBsb2cud2FybihcIk5ldyBncmFwaCBhZnRlciBjb3B5IG5vZGU6IChcIiwgbm9kZSwgXCIpXCIsIGdyYXBobGliSnNvbi53cml0ZShjbHVzdGVyR3JhcGgpKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIk9sZCBncmFwaCBhZnRlciBjb3B5XCIsIGdyYXBobGliSnNvbi53cml0ZShncmFwaCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgXCJDbHVzdGVyICoqIFwiLFxuICAgICAgICBub2RlLFxuICAgICAgICBcIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczpcIixcbiAgICAgICAgIWNsdXN0ZXJEYltub2RlXS5leHRlcm5hbENvbm5lY3Rpb25zLFxuICAgICAgICBcIiBubyBwYXJlbnQ6IFwiLFxuICAgICAgICAhZ3JhcGgucGFyZW50KG5vZGUpLFxuICAgICAgICBcIiBjaGlsZHJlbiBcIixcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCxcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgICBkZXB0aFxuICAgICAgKTtcbiAgICAgIGxvZy5kZWJ1ZyhjbHVzdGVyRGIpO1xuICAgIH1cbiAgfVxuICBub2RlcyA9IGdyYXBoLm5vZGVzKCk7XG4gIGxvZy53YXJuKFwiTmV3IGxpc3Qgb2Ygbm9kZXNcIiwgbm9kZXMpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ3JhcGgubm9kZShub2RlKTtcbiAgICBsb2cud2FybihcIiBOb3cgbmV4dCBsZXZlbFwiLCBub2RlLCBkYXRhKTtcbiAgICBpZiAoZGF0YS5jbHVzdGVyTm9kZSkge1xuICAgICAgZXh0cmFjdG9yKGRhdGEuZ3JhcGgsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9XG59LCBcImV4dHJhY3RvclwiKTtcbnZhciBzb3J0ZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChncmFwaCwgbm9kZXMpID0+IHtcbiAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbihub2Rlcyk7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKG5vZGUpO1xuICAgIGNvbnN0IHNvcnRlZCA9IHNvcnRlcihncmFwaCwgY2hpbGRyZW4pO1xuICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIC4uLnNvcnRlZF07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSwgXCJzb3J0ZXJcIik7XG52YXIgc29ydE5vZGVzQnlIaWVyYXJjaHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChncmFwaCkgPT4gc29ydGVyKGdyYXBoLCBncmFwaC5jaGlsZHJlbigpKSwgXCJzb3J0Tm9kZXNCeUhpZXJhcmNoeVwiKTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvY2x1c3RlcnMuanNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIHJlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgbG9nLmluZm8oXCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciBcIiwgbm9kZS5pZCwgbm9kZSk7XG4gIGNvbnN0IHNpdGVDb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyXCIgKyAobm9kZS5jbGFzcyA/IFwiIFwiICsgbm9kZS5jbGFzcyA6IFwiXCIpKS5hdHRyKFwiaWRcIiwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBjb25zdCBsYWJlbCA9IHNoYXBlU3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiY2x1c3Rlci1sYWJlbFwiKTtcbiAgY29uc3QgdGV4dCA9IG5vZGUubGFiZWxUeXBlID09PSBcIm1hcmtkb3duXCIgPyBjcmVhdGVUZXh0KGxhYmVsLCBub2RlLmxhYmVsVGV4dCwgeyBzdHlsZTogbm9kZS5sYWJlbFN0eWxlLCB1c2VIdG1sTGFiZWxzIH0sIHNpdGVDb25maWcpIDogbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsX2RlZmF1bHQobm9kZS5sYWJlbFRleHQsIG5vZGUubGFiZWxTdHlsZSwgdm9pZCAwLCB0cnVlKSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QodGV4dCk7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgY29uc3QgcGFkZGluZyA9IDAgKiBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gcGFkZGluZyAvIDI7XG4gIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgcGFkZGluZyA/IGJib3gud2lkdGggKyBwYWRkaW5nIDogbm9kZS53aWR0aDtcbiAgaWYgKG5vZGUud2lkdGggPD0gYmJveC53aWR0aCArIHBhZGRpbmcpIHtcbiAgICBub2RlLmRpZmYgPSAoYmJveC53aWR0aCAtIG5vZGUud2lkdGgpIC8gMiAtIG5vZGUucGFkZGluZyAvIDI7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5kaWZmID0gLW5vZGUucGFkZGluZyAvIDI7XG4gIH1cbiAgbG9nLnRyYWNlKFwiRGF0YSBcIiwgbm9kZSwgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICByZWN0Mi5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCBub2RlLnggLSB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKTtcbiAgY29uc3QgeyBzdWJHcmFwaFRpdGxlVG9wTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgaWYgKHVzZUh0bWxMYWJlbHMpIHtcbiAgICBsYWJlbC5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIC8vIFRoaXMgcHV0cyB0aGUgbGFiZWwgb24gdG9wIG9mIHRoZSBib3ggaW5zdGVhZCBvZiBpbnNpZGUgaXRcbiAgICAgIGB0cmFuc2xhdGUoJHtub2RlLnggLSBiYm94LndpZHRoIC8gMn0sICR7bm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyICsgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbn0pYFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAvLyBUaGlzIHB1dHMgdGhlIGxhYmVsIG9uIHRvcCBvZiB0aGUgYm94IGluc3RlYWQgb2YgaW5zaWRlIGl0XG4gICAgICBgdHJhbnNsYXRlKCR7bm9kZS54fSwgJHtub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgKyBzdWJHcmFwaFRpdGxlVG9wTWFyZ2lufSlgXG4gICAgKTtcbiAgfVxuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X3JlY3RfZGVmYXVsdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdFwiKTtcbnZhciBub3RlR3JvdXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub3RlLWNsdXN0ZXJcIikuYXR0cihcImlkXCIsIG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IHBhZGRpbmcgLyAyO1xuICByZWN0Mi5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIG5vZGUud2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgbm9kZS53aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLndpZHRoID0gcmVjdEJveC53aWR0aDtcbiAgbm9kZS5oZWlnaHQgPSByZWN0Qm94LmhlaWdodDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJub3RlR3JvdXBcIik7XG52YXIgcm91bmRlZFdpdGhUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsXCIpO1xuICBjb25zdCBpbm5lclJlY3QgPSBzaGFwZVN2Zy5hcHBlbmQoXCJyZWN0XCIpO1xuICBjb25zdCB0ZXh0ID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsX2RlZmF1bHQobm9kZS5sYWJlbFRleHQsIG5vZGUubGFiZWxTdHlsZSwgdm9pZCAwLCB0cnVlKSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QodGV4dCk7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgYmJveCA9IHRleHQuZ2V0QkJveCgpO1xuICBjb25zdCBwYWRkaW5nID0gMCAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBwYWRkaW5nIC8gMjtcbiAgY29uc3Qgd2lkdGggPSBub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcgPyBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nIDogbm9kZS53aWR0aDtcbiAgaWYgKG5vZGUud2lkdGggPD0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZykge1xuICAgIG5vZGUuZGlmZiA9IChiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nICogMCAtIG5vZGUud2lkdGgpIC8gMjtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nIC8gMjtcbiAgfVxuICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJvdXRlclwiKS5hdHRyKFwieFwiLCBub2RlLnggLSB3aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKTtcbiAgaW5uZXJSZWN0LmF0dHIoXCJjbGFzc1wiLCBcImlubmVyXCIpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIHdpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCBub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIGJib3guaGVpZ2h0IC0gMSkuYXR0cihcIndpZHRoXCIsIHdpZHRoICsgcGFkZGluZykuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCArIHBhZGRpbmcgLSBiYm94LmhlaWdodCAtIDMpO1xuICBjb25zdCB7IHN1YkdyYXBoVGl0bGVUb3BNYXJnaW4gfSA9IGdldFN1YkdyYXBoVGl0bGVNYXJnaW5zKHNpdGVDb25maWcpO1xuICBsYWJlbC5hdHRyKFxuICAgIFwidHJhbnNmb3JtXCIsXG4gICAgYHRyYW5zbGF0ZSgke25vZGUueCAtIGJib3gud2lkdGggLyAyfSwgJHtub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBub2RlLnBhZGRpbmcgLyAzICsgKGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpID8gNSA6IDMpICsgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbn0pYFxuICApO1xuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS5oZWlnaHQgPSByZWN0Qm94LmhlaWdodDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJyb3VuZGVkV2l0aFRpdGxlXCIpO1xudmFyIGRpdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgbm9kZS5jbGFzc2VzKS5hdHRyKFwiaWRcIiwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgcGFkZGluZyA9IDAgKiBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gcGFkZGluZyAvIDI7XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImRpdmlkZXJcIikuYXR0cihcInhcIiwgbm9kZS54IC0gbm9kZS53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyKS5hdHRyKFwid2lkdGhcIiwgbm9kZS53aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKTtcbiAgY29uc3QgcmVjdEJveCA9IHJlY3QyLm5vZGUoKS5nZXRCQm94KCk7XG4gIG5vZGUud2lkdGggPSByZWN0Qm94LndpZHRoO1xuICBub2RlLmhlaWdodCA9IHJlY3RCb3guaGVpZ2h0O1xuICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nIC8gMjtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJkaXZpZGVyXCIpO1xudmFyIHNoYXBlcyA9IHsgcmVjdCwgcm91bmRlZFdpdGhUaXRsZSwgbm90ZUdyb3VwLCBkaXZpZGVyIH07XG52YXIgY2x1c3RlckVsZW1zID0ge307XG52YXIgaW5zZXJ0Q2x1c3RlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIG5vZGUpID0+IHtcbiAgbG9nLnRyYWNlKFwiSW5zZXJ0aW5nIGNsdXN0ZXJcIik7XG4gIGNvbnN0IHNoYXBlID0gbm9kZS5zaGFwZSB8fCBcInJlY3RcIjtcbiAgY2x1c3RlckVsZW1zW25vZGUuaWRdID0gc2hhcGVzW3NoYXBlXShlbGVtLCBub2RlKTtcbn0sIFwiaW5zZXJ0Q2x1c3RlclwiKTtcbnZhciBjbGVhcjQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY2x1c3RlckVsZW1zID0ge307XG59LCBcImNsZWFyXCIpO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbmRleC5qc1xudmFyIHJlY3Vyc2l2ZVJlbmRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKF9lbGVtLCBncmFwaCwgZGlhZ3JhbVR5cGUsIGlkLCBwYXJlbnRDbHVzdGVyLCBzaXRlQ29uZmlnKSA9PiB7XG4gIGxvZy5pbmZvKFwiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYXCIsIGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpLCBwYXJlbnRDbHVzdGVyKTtcbiAgY29uc3QgZGlyID0gZ3JhcGguZ3JhcGgoKS5yYW5rZGlyO1xuICBsb2cudHJhY2UoXCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjpcIiwgZGlyKTtcbiAgY29uc3QgZWxlbSA9IF9lbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwicm9vdFwiKTtcbiAgaWYgKCFncmFwaC5ub2RlcygpKSB7XG4gICAgbG9nLmluZm8oXCJObyBub2RlcyBmb3VuZCBmb3JcIiwgZ3JhcGgpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIHJlbmRlciBYWFhcIiwgZ3JhcGgubm9kZXMoKSk7XG4gIH1cbiAgaWYgKGdyYXBoLmVkZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIGxvZy50cmFjZShcIlJlY3Vyc2l2ZSBlZGdlc1wiLCBncmFwaC5lZGdlKGdyYXBoLmVkZ2VzKClbMF0pKTtcbiAgfVxuICBjb25zdCBjbHVzdGVycyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyc1wiKTtcbiAgY29uc3QgZWRnZVBhdGhzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VQYXRoc1wiKTtcbiAgY29uc3QgZWRnZUxhYmVscyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlTGFiZWxzXCIpO1xuICBjb25zdCBub2RlcyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2Rlc1wiKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZ3JhcGgubm9kZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24odikge1xuICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLm5vZGUodik7XG4gICAgICBpZiAocGFyZW50Q2x1c3RlciAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBhcmVudENsdXN0ZXIuY2x1c3RlckRhdGEpKTtcbiAgICAgICAgbG9nLmluZm8oXCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYIChcIiwgdiwgXCIpIFwiLCBkYXRhLCBwYXJlbnRDbHVzdGVyKTtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShwYXJlbnRDbHVzdGVyLmlkLCBkYXRhKTtcbiAgICAgICAgaWYgKCFncmFwaC5wYXJlbnQodikpIHtcbiAgICAgICAgICBsb2cudHJhY2UoXCJTZXR0aW5nIHBhcmVudFwiLCB2LCBwYXJlbnRDbHVzdGVyLmlkKTtcbiAgICAgICAgICBncmFwaC5zZXRQYXJlbnQodiwgcGFyZW50Q2x1c3Rlci5pZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKFwiKEluc2VydCkgTm9kZSBYWFhcIiArIHYgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5ub2RlKHYpKSk7XG4gICAgICBpZiAobm9kZT8uY2x1c3Rlck5vZGUpIHtcbiAgICAgICAgbG9nLmluZm8oXCJDbHVzdGVyIGlkZW50aWZpZWRcIiwgdiwgbm9kZS53aWR0aCwgZ3JhcGgubm9kZSh2KSk7XG4gICAgICAgIGNvbnN0IHsgcmFua3NlcCwgbm9kZXNlcCB9ID0gZ3JhcGguZ3JhcGgoKTtcbiAgICAgICAgbm9kZS5ncmFwaC5zZXRHcmFwaCh7XG4gICAgICAgICAgLi4ubm9kZS5ncmFwaC5ncmFwaCgpLFxuICAgICAgICAgIHJhbmtzZXAsXG4gICAgICAgICAgbm9kZXNlcFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbyA9IGF3YWl0IHJlY3Vyc2l2ZVJlbmRlcihcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBub2RlLmdyYXBoLFxuICAgICAgICAgIGRpYWdyYW1UeXBlLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGdyYXBoLm5vZGUodiksXG4gICAgICAgICAgc2l0ZUNvbmZpZ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdFbCA9IG8uZWxlbTtcbiAgICAgICAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBuZXdFbCk7XG4gICAgICAgIG5vZGUuZGlmZiA9IG8uZGlmZiB8fCAwO1xuICAgICAgICBsb2cuaW5mbyhcIk5vZGUgYm91bmRzIChhYmMxMjMpXCIsIHYsIG5vZGUsIG5vZGUud2lkdGgsIG5vZGUueCwgbm9kZS55KTtcbiAgICAgICAgc2V0Tm9kZUVsZW0obmV3RWwsIG5vZGUpO1xuICAgICAgICBsb2cud2FybihcIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUgXCIsIG5ld0VsLCBub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChncmFwaC5jaGlsZHJlbih2KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oXCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFhcIiwgdiwgbm9kZS5pZCwgbm9kZSwgZ3JhcGgpO1xuICAgICAgICAgIGxvZy5pbmZvKGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpKTtcbiAgICAgICAgICBjbHVzdGVyRGJbbm9kZS5pZF0gPSB7IGlkOiBmaW5kTm9uQ2x1c3RlckNoaWxkKG5vZGUuaWQsIGdyYXBoKSwgbm9kZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5pbmZvKFwiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGhcIiwgdiwgbm9kZS5pZCwgbm9kZSk7XG4gICAgICAgICAgYXdhaXQgaW5zZXJ0Tm9kZShub2RlcywgZ3JhcGgubm9kZSh2KSwgZGlyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG4gIGdyYXBoLmVkZ2VzKCkuZm9yRWFjaChhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgZWRnZSA9IGdyYXBoLmVkZ2UoZS52LCBlLncsIGUubmFtZSk7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIsIGUsIFwiIFwiLCBKU09OLnN0cmluZ2lmeShncmFwaC5lZGdlKGUpKSk7XG4gICAgbG9nLmluZm8oXCJGaXhcIiwgY2x1c3RlckRiLCBcImlkczpcIiwgZS52LCBlLncsIFwiVHJhbnNsYXRpbmc6IFwiLCBjbHVzdGVyRGJbZS52XSwgY2x1c3RlckRiW2Uud10pO1xuICAgIGF3YWl0IGluc2VydEVkZ2VMYWJlbChlZGdlTGFiZWxzLCBlZGdlKTtcbiAgfSk7XG4gIGdyYXBoLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShlKSk7XG4gIH0pO1xuICBsb2cuaW5mbyhcIkdyYXBoIGJlZm9yZSBsYXlvdXQ6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGxvZy5pbmZvKFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCIpO1xuICBsb2cuaW5mbyhcIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjI1wiKTtcbiAgbG9nLmluZm8oXCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcIik7XG4gIGxvZy5pbmZvKGdyYXBoKTtcbiAgZGFncmVMYXlvdXQoZ3JhcGgpO1xuICBsb2cuaW5mbyhcIkdyYXBoIGFmdGVyIGxheW91dDpcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGhsaWJKc29uMi53cml0ZShncmFwaCkpKTtcbiAgbGV0IGRpZmYgPSAwO1xuICBjb25zdCB7IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiB9ID0gZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnMoc2l0ZUNvbmZpZyk7XG4gIHNvcnROb2Rlc0J5SGllcmFyY2h5KGdyYXBoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBub2RlID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyhcIlBvc2l0aW9uIFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLm5vZGUodikpKTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIFwiUG9zaXRpb24gXCIgKyB2ICsgXCI6IChcIiArIG5vZGUueCxcbiAgICAgIFwiLFwiICsgbm9kZS55LFxuICAgICAgXCIpIHdpZHRoOiBcIixcbiAgICAgIG5vZGUud2lkdGgsXG4gICAgICBcIiBoZWlnaHQ6IFwiLFxuICAgICAgbm9kZS5oZWlnaHRcbiAgICApO1xuICAgIGlmIChub2RlPy5jbHVzdGVyTm9kZSkge1xuICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjtcbiAgICAgIHBvc2l0aW9uTm9kZShub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9kZS5oZWlnaHQgKz0gc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luO1xuICAgICAgICBpbnNlcnRDbHVzdGVyKGNsdXN0ZXJzLCBub2RlKTtcbiAgICAgICAgY2x1c3RlckRiW25vZGUuaWRdLm5vZGUgPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiAvIDI7XG4gICAgICAgIHBvc2l0aW9uTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy5pbmZvKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZWRnZSksIGVkZ2UpO1xuICAgIGVkZ2UucG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiBwb2ludC55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiAvIDIpO1xuICAgIGNvbnN0IHBhdGhzID0gaW5zZXJ0RWRnZShlZGdlUGF0aHMsIGUsIGVkZ2UsIGNsdXN0ZXJEYiwgZGlhZ3JhbVR5cGUsIGdyYXBoLCBpZCk7XG4gICAgcG9zaXRpb25FZGdlTGFiZWwoZWRnZSwgcGF0aHMpO1xuICB9KTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBuID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyh2LCBuLnR5cGUsIG4uZGlmZik7XG4gICAgaWYgKG4udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICBkaWZmID0gbi5kaWZmO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7IGVsZW0sIGRpZmYgfTtcbn0sIFwicmVjdXJzaXZlUmVuZGVyXCIpO1xudmFyIHJlbmRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsZW0sIGdyYXBoLCBtYXJrZXJzLCBkaWFncmFtVHlwZSwgaWQpID0+IHtcbiAgbWFya2Vyc19kZWZhdWx0KGVsZW0sIG1hcmtlcnMsIGRpYWdyYW1UeXBlLCBpZCk7XG4gIGNsZWFyKCk7XG4gIGNsZWFyMigpO1xuICBjbGVhcjQoKTtcbiAgY2xlYXIzKCk7XG4gIGxvZy53YXJuKFwiR3JhcGggYXQgZmlyc3Q6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGFkanVzdENsdXN0ZXJzQW5kRWRnZXMoZ3JhcGgpO1xuICBsb2cud2FybihcIkdyYXBoIGFmdGVyOlwiLCBKU09OLnN0cmluZ2lmeShncmFwaGxpYkpzb24yLndyaXRlKGdyYXBoKSkpO1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGF3YWl0IHJlY3Vyc2l2ZVJlbmRlcihlbGVtLCBncmFwaCwgZGlhZ3JhbVR5cGUsIGlkLCB2b2lkIDAsIHNpdGVDb25maWcpO1xufSwgXCJyZW5kZXJcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc1JlbmRlcmVyLXYyLnRzXG52YXIgc2FuaXRpemVUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIGNvbmYgPSB7XG4gIGRpdmlkZXJNYXJnaW46IDEwLFxuICBwYWRkaW5nOiA1LFxuICB0ZXh0SGVpZ2h0OiAxMCxcbiAgY3VydmU6IHZvaWQgMFxufTtcbnZhciBhZGROYW1lc3BhY2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuYW1lc3BhY2VzLCBnLCBfaWQsIGRpYWdPYmopIHtcbiAgbG9nLmluZm8oXCJrZXlzOlwiLCBbLi4ubmFtZXNwYWNlcy5rZXlzKCldKTtcbiAgbG9nLmluZm8obmFtZXNwYWNlcyk7XG4gIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbih2ZXJ0ZXgpIHtcbiAgICBjb25zdCBzaGFwZSA9IFwicmVjdFwiO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBzaGFwZSxcbiAgICAgIGlkOiB2ZXJ0ZXguaWQsXG4gICAgICBkb21JZDogdmVydGV4LmRvbUlkLFxuICAgICAgbGFiZWxUZXh0OiBzYW5pdGl6ZVRleHQodmVydGV4LmlkKSxcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBzdHlsZTogXCJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrXCIsXG4gICAgICAvLyBUT0RPIFYxMDogRmxvd2NoYXJ0ID8gS2VlcGluZyBmbG93Y2hhcnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBSZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICBwYWRkaW5nOiBnZXRDb25maWcoKS5mbG93Y2hhcnQ/LnBhZGRpbmcgPz8gZ2V0Q29uZmlnKCkuY2xhc3M/LnBhZGRpbmdcbiAgICB9O1xuICAgIGcuc2V0Tm9kZSh2ZXJ0ZXguaWQsIG5vZGUpO1xuICAgIGFkZENsYXNzZXModmVydGV4LmNsYXNzZXMsIGcsIF9pZCwgZGlhZ09iaiwgdmVydGV4LmlkKTtcbiAgICBsb2cuaW5mbyhcInNldE5vZGVcIiwgbm9kZSk7XG4gIH0pO1xufSwgXCJhZGROYW1lc3BhY2VzXCIpO1xudmFyIGFkZENsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNsYXNzZXMsIGcsIF9pZCwgZGlhZ09iaiwgcGFyZW50KSB7XG4gIGxvZy5pbmZvKFwia2V5czpcIiwgWy4uLmNsYXNzZXMua2V5cygpXSk7XG4gIGxvZy5pbmZvKGNsYXNzZXMpO1xuICBbLi4uY2xhc3Nlcy52YWx1ZXMoKV0uZmlsdGVyKCh2ZXJ0ZXgpID0+IHZlcnRleC5wYXJlbnQgPT09IHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbih2ZXJ0ZXgpIHtcbiAgICBjb25zdCBjc3NDbGFzc1N0ciA9IHZlcnRleC5jc3NDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgIGNvbnN0IHN0eWxlcyA9IGdldFN0eWxlc0Zyb21BcnJheSh2ZXJ0ZXguc3R5bGVzKTtcbiAgICBjb25zdCB2ZXJ0ZXhUZXh0ID0gdmVydGV4LmxhYmVsID8/IHZlcnRleC5pZDtcbiAgICBjb25zdCByYWRpdXMgPSAwO1xuICAgIGNvbnN0IHNoYXBlID0gXCJjbGFzc19ib3hcIjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgbGFiZWxTdHlsZTogc3R5bGVzLmxhYmVsU3R5bGUsXG4gICAgICBzaGFwZSxcbiAgICAgIGxhYmVsVGV4dDogc2FuaXRpemVUZXh0KHZlcnRleFRleHQpLFxuICAgICAgY2xhc3NEYXRhOiB2ZXJ0ZXgsXG4gICAgICByeDogcmFkaXVzLFxuICAgICAgcnk6IHJhZGl1cyxcbiAgICAgIGNsYXNzOiBjc3NDbGFzc1N0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgZG9tSWQ6IHZlcnRleC5kb21JZCxcbiAgICAgIHRvb2x0aXA6IGRpYWdPYmouZGIuZ2V0VG9vbHRpcCh2ZXJ0ZXguaWQsIHBhcmVudCkgfHwgXCJcIixcbiAgICAgIGhhdmVDYWxsYmFjazogdmVydGV4LmhhdmVDYWxsYmFjayxcbiAgICAgIGxpbms6IHZlcnRleC5saW5rLFxuICAgICAgd2lkdGg6IHZlcnRleC50eXBlID09PSBcImdyb3VwXCIgPyA1MDAgOiB2b2lkIDAsXG4gICAgICB0eXBlOiB2ZXJ0ZXgudHlwZSxcbiAgICAgIC8vIFRPRE8gVjEwOiBGbG93Y2hhcnQgPyBLZWVwaW5nIGZsb3djaGFydCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgIHBhZGRpbmc6IGdldENvbmZpZygpLmZsb3djaGFydD8ucGFkZGluZyA/PyBnZXRDb25maWcoKS5jbGFzcz8ucGFkZGluZ1xuICAgIH07XG4gICAgZy5zZXROb2RlKHZlcnRleC5pZCwgbm9kZSk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgZy5zZXRQYXJlbnQodmVydGV4LmlkLCBwYXJlbnQpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhcInNldE5vZGVcIiwgbm9kZSk7XG4gIH0pO1xufSwgXCJhZGRDbGFzc2VzXCIpO1xudmFyIGFkZE5vdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihub3RlcywgZywgc3RhcnRFZGdlSWQsIGNsYXNzZXMpIHtcbiAgbG9nLmluZm8obm90ZXMpO1xuICBub3Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vdGUsIGkpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSBub3RlO1xuICAgIGNvbnN0IGNzc05vdGVTdHIgPSBcIlwiO1xuICAgIGNvbnN0IHN0eWxlcyA9IHsgbGFiZWxTdHlsZTogXCJcIiwgc3R5bGU6IFwiXCIgfTtcbiAgICBjb25zdCB2ZXJ0ZXhUZXh0ID0gdmVydGV4LnRleHQ7XG4gICAgY29uc3QgcmFkaXVzID0gMDtcbiAgICBjb25zdCBzaGFwZSA9IFwibm90ZVwiO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZXMubGFiZWxTdHlsZSxcbiAgICAgIHNoYXBlLFxuICAgICAgbGFiZWxUZXh0OiBzYW5pdGl6ZVRleHQodmVydGV4VGV4dCksXG4gICAgICBub3RlRGF0YTogdmVydGV4LFxuICAgICAgcng6IHJhZGl1cyxcbiAgICAgIHJ5OiByYWRpdXMsXG4gICAgICBjbGFzczogY3NzTm90ZVN0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgZG9tSWQ6IHZlcnRleC5pZCxcbiAgICAgIHRvb2x0aXA6IFwiXCIsXG4gICAgICB0eXBlOiBcIm5vdGVcIixcbiAgICAgIC8vIFRPRE8gVjEwOiBGbG93Y2hhcnQgPyBLZWVwaW5nIGZsb3djaGFydCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgIHBhZGRpbmc6IGdldENvbmZpZygpLmZsb3djaGFydD8ucGFkZGluZyA/PyBnZXRDb25maWcoKS5jbGFzcz8ucGFkZGluZ1xuICAgIH07XG4gICAgZy5zZXROb2RlKHZlcnRleC5pZCwgbm9kZSk7XG4gICAgbG9nLmluZm8oXCJzZXROb2RlXCIsIG5vZGUpO1xuICAgIGlmICghdmVydGV4LmNsYXNzIHx8ICFjbGFzc2VzLmhhcyh2ZXJ0ZXguY2xhc3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVkZ2VJZCA9IHN0YXJ0RWRnZUlkICsgaTtcbiAgICBjb25zdCBlZGdlRGF0YSA9IHtcbiAgICAgIGlkOiBgZWRnZU5vdGUke2VkZ2VJZH1gLFxuICAgICAgLy9TZXQgcmVsYXRpb25zaGlwIHN0eWxlIGFuZCBsaW5lIHR5cGVcbiAgICAgIGNsYXNzZXM6IFwicmVsYXRpb25cIixcbiAgICAgIHBhdHRlcm46IFwiZG90dGVkXCIsXG4gICAgICAvLyBTZXQgbGluayB0eXBlIGZvciByZW5kZXJpbmdcbiAgICAgIGFycm93aGVhZDogXCJub25lXCIsXG4gICAgICAvL1NldCBlZGdlIGV4dHJhIGxhYmVsc1xuICAgICAgc3RhcnRMYWJlbFJpZ2h0OiBcIlwiLFxuICAgICAgZW5kTGFiZWxMZWZ0OiBcIlwiLFxuICAgICAgLy9TZXQgcmVsYXRpb24gYXJyb3cgdHlwZXNcbiAgICAgIGFycm93VHlwZVN0YXJ0OiBcIm5vbmVcIixcbiAgICAgIGFycm93VHlwZUVuZDogXCJub25lXCIsXG4gICAgICBzdHlsZTogXCJmaWxsOm5vbmVcIixcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBjdXJ2ZTogaW50ZXJwb2xhdGVUb0N1cnZlKGNvbmYuY3VydmUsIGN1cnZlTGluZWFyKVxuICAgIH07XG4gICAgZy5zZXRFZGdlKHZlcnRleC5pZCwgdmVydGV4LmNsYXNzLCBlZGdlRGF0YSwgZWRnZUlkKTtcbiAgfSk7XG59LCBcImFkZE5vdGVzXCIpO1xudmFyIGFkZFJlbGF0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocmVsYXRpb25zLCBnKSB7XG4gIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0O1xuICBsZXQgY250ID0gMDtcbiAgcmVsYXRpb25zLmZvckVhY2goZnVuY3Rpb24oZWRnZSkge1xuICAgIGNudCsrO1xuICAgIGNvbnN0IGVkZ2VEYXRhID0ge1xuICAgICAgLy9TZXQgcmVsYXRpb25zaGlwIHN0eWxlIGFuZCBsaW5lIHR5cGVcbiAgICAgIGNsYXNzZXM6IFwicmVsYXRpb25cIixcbiAgICAgIHBhdHRlcm46IGVkZ2UucmVsYXRpb24ubGluZVR5cGUgPT0gMSA/IFwiZGFzaGVkXCIgOiBcInNvbGlkXCIsXG4gICAgICBpZDogZ2V0RWRnZUlkKGVkZ2UuaWQxLCBlZGdlLmlkMiwge1xuICAgICAgICBwcmVmaXg6IFwiaWRcIixcbiAgICAgICAgY291bnRlcjogY250XG4gICAgICB9KSxcbiAgICAgIC8vIFNldCBsaW5rIHR5cGUgZm9yIHJlbmRlcmluZ1xuICAgICAgYXJyb3doZWFkOiBlZGdlLnR5cGUgPT09IFwiYXJyb3dfb3BlblwiID8gXCJub25lXCIgOiBcIm5vcm1hbFwiLFxuICAgICAgLy9TZXQgZWRnZSBleHRyYSBsYWJlbHNcbiAgICAgIHN0YXJ0TGFiZWxSaWdodDogZWRnZS5yZWxhdGlvblRpdGxlMSA9PT0gXCJub25lXCIgPyBcIlwiIDogZWRnZS5yZWxhdGlvblRpdGxlMSxcbiAgICAgIGVuZExhYmVsTGVmdDogZWRnZS5yZWxhdGlvblRpdGxlMiA9PT0gXCJub25lXCIgPyBcIlwiIDogZWRnZS5yZWxhdGlvblRpdGxlMixcbiAgICAgIC8vU2V0IHJlbGF0aW9uIGFycm93IHR5cGVzXG4gICAgICBhcnJvd1R5cGVTdGFydDogZ2V0QXJyb3dNYXJrZXIoZWRnZS5yZWxhdGlvbi50eXBlMSksXG4gICAgICBhcnJvd1R5cGVFbmQ6IGdldEFycm93TWFya2VyKGVkZ2UucmVsYXRpb24udHlwZTIpLFxuICAgICAgc3R5bGU6IFwiZmlsbDpub25lXCIsXG4gICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgY3VydmU6IGludGVycG9sYXRlVG9DdXJ2ZShjb25mMj8uY3VydmUsIGN1cnZlTGluZWFyKVxuICAgIH07XG4gICAgbG9nLmluZm8oZWRnZURhdGEsIGVkZ2UpO1xuICAgIGlmIChlZGdlLnN0eWxlICE9PSB2b2lkIDApIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGdldFN0eWxlc0Zyb21BcnJheShlZGdlLnN0eWxlKTtcbiAgICAgIGVkZ2VEYXRhLnN0eWxlID0gc3R5bGVzLnN0eWxlO1xuICAgICAgZWRnZURhdGEubGFiZWxTdHlsZSA9IHN0eWxlcy5sYWJlbFN0eWxlO1xuICAgIH1cbiAgICBlZGdlLnRleHQgPSBlZGdlLnRpdGxlO1xuICAgIGlmIChlZGdlLnRleHQgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKGVkZ2Uuc3R5bGUgIT09IHZvaWQgMCkge1xuICAgICAgICBlZGdlRGF0YS5hcnJvd2hlYWRTdHlsZSA9IFwiZmlsbDogIzMzM1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlRGF0YS5hcnJvd2hlYWRTdHlsZSA9IFwiZmlsbDogIzMzM1wiO1xuICAgICAgZWRnZURhdGEubGFiZWxwb3MgPSBcImNcIjtcbiAgICAgIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMgPz8gZ2V0Q29uZmlnKCkuaHRtbExhYmVscykge1xuICAgICAgICBlZGdlRGF0YS5sYWJlbFR5cGUgPSBcImh0bWxcIjtcbiAgICAgICAgZWRnZURhdGEubGFiZWwgPSAnPHNwYW4gY2xhc3M9XCJlZGdlTGFiZWxcIj4nICsgZWRnZS50ZXh0ICsgXCI8L3NwYW4+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlRGF0YS5sYWJlbFR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgZWRnZURhdGEubGFiZWwgPSBlZGdlLnRleHQucmVwbGFjZShjb21tb25fZGVmYXVsdC5saW5lQnJlYWtSZWdleCwgXCJcXG5cIik7XG4gICAgICAgIGlmIChlZGdlLnN0eWxlID09PSB2b2lkIDApIHtcbiAgICAgICAgICBlZGdlRGF0YS5zdHlsZSA9IGVkZ2VEYXRhLnN0eWxlIHx8IFwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZVwiO1xuICAgICAgICB9XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsU3R5bGUgPSBlZGdlRGF0YS5sYWJlbFN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZy5zZXRFZGdlKGVkZ2UuaWQxLCBlZGdlLmlkMiwgZWRnZURhdGEsIGNudCk7XG4gIH0pO1xufSwgXCJhZGRSZWxhdGlvbnNcIik7XG52YXIgc2V0Q29uZiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY25mKSB7XG4gIGNvbmYgPSB7XG4gICAgLi4uY29uZixcbiAgICAuLi5jbmZcbiAgfTtcbn0sIFwic2V0Q29uZlwiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgbG9nLmluZm8oXCJEcmF3aW5nIGNsYXNzIC0gXCIsIGlkKTtcbiAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5mbG93Y2hhcnQgPz8gZ2V0Q29uZmlnKCkuY2xhc3M7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICBsb2cuaW5mbyhcImNvbmZpZzpcIiwgY29uZjIpO1xuICBjb25zdCBub2RlU3BhY2luZyA9IGNvbmYyPy5ub2RlU3BhY2luZyA/PyA1MDtcbiAgY29uc3QgcmFua1NwYWNpbmcgPSBjb25mMj8ucmFua1NwYWNpbmcgPz8gNTA7XG4gIGNvbnN0IGcgPSBuZXcgZ3JhcGhsaWIyLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGNvbXBvdW5kOiB0cnVlXG4gIH0pLnNldEdyYXBoKHtcbiAgICByYW5rZGlyOiBkaWFnT2JqLmRiLmdldERpcmVjdGlvbigpLFxuICAgIG5vZGVzZXA6IG5vZGVTcGFjaW5nLFxuICAgIHJhbmtzZXA6IHJhbmtTcGFjaW5nLFxuICAgIG1hcmdpbng6IDgsXG4gICAgbWFyZ2lueTogOFxuICB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBkaWFnT2JqLmRiLmdldE5hbWVzcGFjZXMoKTtcbiAgY29uc3QgY2xhc3NlcyA9IGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xuICBjb25zdCByZWxhdGlvbnMgPSBkaWFnT2JqLmRiLmdldFJlbGF0aW9ucygpO1xuICBjb25zdCBub3RlcyA9IGRpYWdPYmouZGIuZ2V0Tm90ZXMoKTtcbiAgbG9nLmluZm8ocmVsYXRpb25zKTtcbiAgYWRkTmFtZXNwYWNlcyhuYW1lc3BhY2VzLCBnLCBpZCwgZGlhZ09iaik7XG4gIGFkZENsYXNzZXMoY2xhc3NlcywgZywgaWQsIGRpYWdPYmopO1xuICBhZGRSZWxhdGlvbnMocmVsYXRpb25zLCBnKTtcbiAgYWRkTm90ZXMobm90ZXMsIGcsIHJlbGF0aW9ucy5sZW5ndGggKyAxLCBjbGFzc2VzKTtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdDIoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdDIoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QyKFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGVsZW1lbnQgPSByb290LnNlbGVjdChcIiNcIiArIGlkICsgXCIgZ1wiKTtcbiAgYXdhaXQgcmVuZGVyKFxuICAgIGVsZW1lbnQsXG4gICAgZyxcbiAgICBbXCJhZ2dyZWdhdGlvblwiLCBcImV4dGVuc2lvblwiLCBcImNvbXBvc2l0aW9uXCIsIFwiZGVwZW5kZW5jeVwiLCBcImxvbGxpcG9wXCJdLFxuICAgIFwiY2xhc3NEaWFncmFtXCIsXG4gICAgaWRcbiAgKTtcbiAgdXRpbHNfZGVmYXVsdC5pbnNlcnRUaXRsZShzdmcsIFwiY2xhc3NUaXRsZVRleHRcIiwgY29uZjI/LnRpdGxlVG9wTWFyZ2luID8/IDUsIGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO1xuICBzZXR1cEdyYXBoVmlld2JveChnLCBzdmcsIGNvbmYyPy5kaWFncmFtUGFkZGluZywgY29uZjI/LnVzZU1heFdpZHRoKTtcbiAgaWYgKCFjb25mMj8uaHRtbExhYmVscykge1xuICAgIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgICBjb25zdCBsYWJlbHMgPSBkb2MucXVlcnlTZWxlY3RvckFsbCgnW2lkPVwiJyArIGlkICsgJ1wiXSAuZWRnZUxhYmVsIC5sYWJlbCcpO1xuICAgIGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSB7XG4gICAgICBjb25zdCBkaW0gPSBsYWJlbC5nZXRCQm94KCk7XG4gICAgICBjb25zdCByZWN0MiA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIik7XG4gICAgICByZWN0Mi5zZXRBdHRyaWJ1dGUoXCJyeFwiLCAwKTtcbiAgICAgIHJlY3QyLnNldEF0dHJpYnV0ZShcInJ5XCIsIDApO1xuICAgICAgcmVjdDIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgZGltLndpZHRoKTtcbiAgICAgIHJlY3QyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBkaW0uaGVpZ2h0KTtcbiAgICAgIGxhYmVsLmluc2VydEJlZm9yZShyZWN0MiwgbGFiZWwuZmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG59LCBcImRyYXdcIik7XG5mdW5jdGlvbiBnZXRBcnJvd01hcmtlcih0eXBlKSB7XG4gIGxldCBtYXJrZXI7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgMDpcbiAgICAgIG1hcmtlciA9IFwiYWdncmVnYXRpb25cIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIG1hcmtlciA9IFwiZXh0ZW5zaW9uXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBtYXJrZXIgPSBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBtYXJrZXIgPSBcImRlcGVuZGVuY3lcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIG1hcmtlciA9IFwibG9sbGlwb3BcIjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBtYXJrZXIgPSBcIm5vbmVcIjtcbiAgfVxuICByZXR1cm4gbWFya2VyO1xufVxuX19uYW1lKGdldEFycm93TWFya2VyLCBcImdldEFycm93TWFya2VyXCIpO1xudmFyIGNsYXNzUmVuZGVyZXJfdjJfZGVmYXVsdCA9IHtcbiAgc2V0Q29uZixcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzRGlhZ3JhbS12Mi50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogY2xhc3NEaWFncmFtX2RlZmF1bHQsXG4gIGRiOiBjbGFzc0RiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBjbGFzc1JlbmRlcmVyX3YyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHQsXG4gIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICAgIGlmICghY25mLmNsYXNzKSB7XG4gICAgICBjbmYuY2xhc3MgPSB7fTtcbiAgICB9XG4gICAgY25mLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGUgPSBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbiAgICBjbGFzc0RiX2RlZmF1bHQuY2xlYXIoKTtcbiAgfSwgXCJpbml0XCIpXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgZ2V0RGlhZ3JhbUVsZW1lbnQsXG4gIHNldHVwVmlld1BvcnRGb3JTVkdcbn0gZnJvbSBcIi4vY2h1bmstV1pCSUFUU0subWpzXCI7XG5pbXBvcnQge1xuICByZW5kZXJcbn0gZnJvbSBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQge1xuICBnZW5lcmF0ZUlkLFxuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgbG9nLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3BhcnNlci9zdGF0ZURpYWdyYW0uamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCAyXSwgJFYxID0gWzEsIDNdLCAkVjIgPSBbMSwgNF0sICRWMyA9IFsyLCA0XSwgJFY0ID0gWzEsIDldLCAkVjUgPSBbMSwgMTFdLCAkVjYgPSBbMSwgMTZdLCAkVjcgPSBbMSwgMTddLCAkVjggPSBbMSwgMThdLCAkVjkgPSBbMSwgMTldLCAkVmEgPSBbMSwgMzJdLCAkVmIgPSBbMSwgMjBdLCAkVmMgPSBbMSwgMjFdLCAkVmQgPSBbMSwgMjJdLCAkVmUgPSBbMSwgMjNdLCAkVmYgPSBbMSwgMjRdLCAkVmcgPSBbMSwgMjZdLCAkVmggPSBbMSwgMjddLCAkVmkgPSBbMSwgMjhdLCAkVmogPSBbMSwgMjldLCAkVmsgPSBbMSwgMzBdLCAkVmwgPSBbMSwgMzFdLCAkVm0gPSBbMSwgMzRdLCAkVm4gPSBbMSwgMzVdLCAkVm8gPSBbMSwgMzZdLCAkVnAgPSBbMSwgMzddLCAkVnEgPSBbMSwgMzNdLCAkVnIgPSBbMSwgNCwgNSwgMTYsIDE3LCAxOSwgMjEsIDIyLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMywgMzUsIDM3LCAzOCwgNDIsIDQ1LCA0OCwgNDksIDUwLCA1MSwgNTRdLCAkVnMgPSBbMSwgNCwgNSwgMTQsIDE1LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNDUsIDQ4LCA0OSwgNTAsIDUxLCA1NF0sICRWdCA9IFs0LCA1LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNDUsIDQ4LCA0OSwgNTAsIDUxLCA1NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIlNQQUNFXCI6IDQsIFwiTkxcIjogNSwgXCJTRFwiOiA2LCBcImRvY3VtZW50XCI6IDcsIFwibGluZVwiOiA4LCBcInN0YXRlbWVudFwiOiA5LCBcImNsYXNzRGVmU3RhdGVtZW50XCI6IDEwLCBcInN0eWxlU3RhdGVtZW50XCI6IDExLCBcImNzc0NsYXNzU3RhdGVtZW50XCI6IDEyLCBcImlkU3RhdGVtZW50XCI6IDEzLCBcIkRFU0NSXCI6IDE0LCBcIi0tPlwiOiAxNSwgXCJISURFX0VNUFRZXCI6IDE2LCBcInNjYWxlXCI6IDE3LCBcIldJRFRIXCI6IDE4LCBcIkNPTVBPU0lUX1NUQVRFXCI6IDE5LCBcIlNUUlVDVF9TVEFSVFwiOiAyMCwgXCJTVFJVQ1RfU1RPUFwiOiAyMSwgXCJTVEFURV9ERVNDUlwiOiAyMiwgXCJBU1wiOiAyMywgXCJJRFwiOiAyNCwgXCJGT1JLXCI6IDI1LCBcIkpPSU5cIjogMjYsIFwiQ0hPSUNFXCI6IDI3LCBcIkNPTkNVUlJFTlRcIjogMjgsIFwibm90ZVwiOiAyOSwgXCJub3RlUG9zaXRpb25cIjogMzAsIFwiTk9URV9URVhUXCI6IDMxLCBcImRpcmVjdGlvblwiOiAzMiwgXCJhY2NfdGl0bGVcIjogMzMsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDM0LCBcImFjY19kZXNjclwiOiAzNSwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMzYsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAzNywgXCJjbGFzc0RlZlwiOiAzOCwgXCJDTEFTU0RFRl9JRFwiOiAzOSwgXCJDTEFTU0RFRl9TVFlMRU9QVFNcIjogNDAsIFwiREVGQVVMVFwiOiA0MSwgXCJzdHlsZVwiOiA0MiwgXCJTVFlMRV9JRFNcIjogNDMsIFwiU1RZTEVERUZfU1RZTEVPUFRTXCI6IDQ0LCBcImNsYXNzXCI6IDQ1LCBcIkNMQVNTRU5USVRZX0lEU1wiOiA0NiwgXCJTVFlMRUNMQVNTXCI6IDQ3LCBcImRpcmVjdGlvbl90YlwiOiA0OCwgXCJkaXJlY3Rpb25fYnRcIjogNDksIFwiZGlyZWN0aW9uX3JsXCI6IDUwLCBcImRpcmVjdGlvbl9sclwiOiA1MSwgXCJlb2xcIjogNTIsIFwiO1wiOiA1MywgXCJFREdFX1NUQVRFXCI6IDU0LCBcIlNUWUxFX1NFUEFSQVRPUlwiOiA1NSwgXCJsZWZ0X29mXCI6IDU2LCBcInJpZ2h0X29mXCI6IDU3LCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJTUEFDRVwiLCA1OiBcIk5MXCIsIDY6IFwiU0RcIiwgMTQ6IFwiREVTQ1JcIiwgMTU6IFwiLS0+XCIsIDE2OiBcIkhJREVfRU1QVFlcIiwgMTc6IFwic2NhbGVcIiwgMTg6IFwiV0lEVEhcIiwgMTk6IFwiQ09NUE9TSVRfU1RBVEVcIiwgMjA6IFwiU1RSVUNUX1NUQVJUXCIsIDIxOiBcIlNUUlVDVF9TVE9QXCIsIDIyOiBcIlNUQVRFX0RFU0NSXCIsIDIzOiBcIkFTXCIsIDI0OiBcIklEXCIsIDI1OiBcIkZPUktcIiwgMjY6IFwiSk9JTlwiLCAyNzogXCJDSE9JQ0VcIiwgMjg6IFwiQ09OQ1VSUkVOVFwiLCAyOTogXCJub3RlXCIsIDMxOiBcIk5PVEVfVEVYVFwiLCAzMzogXCJhY2NfdGl0bGVcIiwgMzQ6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDM1OiBcImFjY19kZXNjclwiLCAzNjogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMzc6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAzODogXCJjbGFzc0RlZlwiLCAzOTogXCJDTEFTU0RFRl9JRFwiLCA0MDogXCJDTEFTU0RFRl9TVFlMRU9QVFNcIiwgNDE6IFwiREVGQVVMVFwiLCA0MjogXCJzdHlsZVwiLCA0MzogXCJTVFlMRV9JRFNcIiwgNDQ6IFwiU1RZTEVERUZfU1RZTEVPUFRTXCIsIDQ1OiBcImNsYXNzXCIsIDQ2OiBcIkNMQVNTRU5USVRZX0lEU1wiLCA0NzogXCJTVFlMRUNMQVNTXCIsIDQ4OiBcImRpcmVjdGlvbl90YlwiLCA0OTogXCJkaXJlY3Rpb25fYnRcIiwgNTA6IFwiZGlyZWN0aW9uX3JsXCIsIDUxOiBcImRpcmVjdGlvbl9sclwiLCA1MzogXCI7XCIsIDU0OiBcIkVER0VfU1RBVEVcIiwgNTU6IFwiU1RZTEVfU0VQQVJBVE9SXCIsIDU2OiBcImxlZnRfb2ZcIiwgNTc6IFwicmlnaHRfb2ZcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDJdLCBbMywgMl0sIFs3LCAwXSwgWzcsIDJdLCBbOCwgMl0sIFs4LCAxXSwgWzgsIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAyXSwgWzksIDNdLCBbOSwgNF0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMV0sIFs5LCA0XSwgWzksIDNdLCBbOSwgNl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDRdLCBbOSwgNF0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzEwLCAzXSwgWzEwLCAzXSwgWzExLCAzXSwgWzEyLCAzXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzUyLCAxXSwgWzUyLCAxXSwgWzEzLCAxXSwgWzEzLCAxXSwgWzEzLCAzXSwgWzEzLCAzXSwgWzMwLCAxXSwgWzMwLCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB5eS5zZXRSb290RG9jKCQkWyQwXSk7XG4gICAgICAgICAgcmV0dXJuICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKCQkWyQwXSAhPSBcIm5sXCIpIHtcbiAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHRoaXMuJCA9IFwibmxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgY29uc3Qgc3RhdGVTdG10ID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBzdGF0ZVN0bXQuZGVzY3JpcHRpb24gPSB5eS50cmltQ29sb24oJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSBzdGF0ZVN0bXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInJlbGF0aW9uXCIsIHN0YXRlMTogJCRbJDAgLSAyXSwgc3RhdGUyOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjb25zdCByZWxEZXNjcmlwdGlvbiA9IHl5LnRyaW1Db2xvbigkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJyZWxhdGlvblwiLCBzdGF0ZTE6ICQkWyQwIC0gM10sIHN0YXRlMjogJCRbJDAgLSAxXSwgZGVzY3JpcHRpb246IHJlbERlc2NyaXB0aW9uIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDNdLCB0eXBlOiBcImRlZmF1bHRcIiwgZGVzY3JpcHRpb246IFwiXCIsIGRvYzogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHZhciBpZCA9ICQkWyQwXTtcbiAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSAkJFskMCAtIDJdLnRyaW0oKTtcbiAgICAgICAgICBpZiAoJCRbJDBdLm1hdGNoKFwiOlwiKSkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gJCRbJDBdLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgIGlkID0gcGFydHNbMF07XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFtkZXNjcmlwdGlvbiwgcGFydHNbMV1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQsIHR5cGU6IFwiZGVmYXVsdFwiLCBkZXNjcmlwdGlvbiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAzXSwgdHlwZTogXCJkZWZhdWx0XCIsIGRlc2NyaXB0aW9uOiAkJFskMCAtIDVdLCBkb2M6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXSwgdHlwZTogXCJmb3JrXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXSwgdHlwZTogXCJqb2luXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXSwgdHlwZTogXCJjaG9pY2VcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogeXkuZ2V0RGl2aWRlcklkKCksIHR5cGU6IFwiZGl2aWRlclwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDFdLnRyaW0oKSwgbm90ZTogeyBwb3NpdGlvbjogJCRbJDAgLSAyXS50cmltKCksIHRleHQ6ICQkWyQwXS50cmltKCkgfSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcImNsYXNzRGVmXCIsIGlkOiAkJFskMCAtIDFdLnRyaW0oKSwgY2xhc3NlczogJCRbJDBdLnRyaW0oKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdHlsZVwiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiYXBwbHlDbGFzc1wiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJUQlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlRCXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJCVFwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkJUXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJSTFwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlJMXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJMUlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkxSXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXS50cmltKCksIHR5cGU6IFwiZGVmYXVsdFwiLCBkZXNjcmlwdGlvbjogXCJcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAyXS50cmltKCksIGNsYXNzZXM6IFskJFskMF0udHJpbSgpXSwgdHlwZTogXCJkZWZhdWx0XCIsIGRlc2NyaXB0aW9uOiBcIlwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDJdLnRyaW0oKSwgY2xhc3NlczogWyQkWyQwXS50cmltKCldLCB0eXBlOiBcImRlZmF1bHRcIiwgZGVzY3JpcHRpb246IFwiXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogJFYwLCA1OiAkVjEsIDY6ICRWMiB9LCB7IDE6IFszXSB9LCB7IDM6IDUsIDQ6ICRWMCwgNTogJFYxLCA2OiAkVjIgfSwgeyAzOiA2LCA0OiAkVjAsIDU6ICRWMSwgNjogJFYyIH0sIG8oWzEsIDQsIDUsIDE2LCAxNywgMTksIDIyLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMywgMzUsIDM3LCAzOCwgNDIsIDQ1LCA0OCwgNDksIDUwLCA1MSwgNTRdLCAkVjMsIHsgNzogNyB9KSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgM10sIDQ6ICRWNCwgNTogJFY1LCA4OiA4LCA5OiAxMCwgMTA6IDEyLCAxMTogMTMsIDEyOiAxNCwgMTM6IDE1LCAxNjogJFY2LCAxNzogJFY3LCAxOTogJFY4LCAyMjogJFY5LCAyNDogJFZhLCAyNTogJFZiLCAyNjogJFZjLCAyNzogJFZkLCAyODogJFZlLCAyOTogJFZmLCAzMjogMjUsIDMzOiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM4OiAkVmosIDQyOiAkVmssIDQ1OiAkVmwsIDQ4OiAkVm0sIDQ5OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDU0OiAkVnEgfSwgbygkVnIsIFsyLCA1XSksIHsgOTogMzgsIDEwOiAxMiwgMTE6IDEzLCAxMjogMTQsIDEzOiAxNSwgMTY6ICRWNiwgMTc6ICRWNywgMTk6ICRWOCwgMjI6ICRWOSwgMjQ6ICRWYSwgMjU6ICRWYiwgMjY6ICRWYywgMjc6ICRWZCwgMjg6ICRWZSwgMjk6ICRWZiwgMzI6IDI1LCAzMzogJFZnLCAzNTogJFZoLCAzNzogJFZpLCAzODogJFZqLCA0MjogJFZrLCA0NTogJFZsLCA0ODogJFZtLCA0OTogJFZuLCA1MDogJFZvLCA1MTogJFZwLCA1NDogJFZxIH0sIG8oJFZyLCBbMiwgN10pLCBvKCRWciwgWzIsIDhdKSwgbygkVnIsIFsyLCA5XSksIG8oJFZyLCBbMiwgMTBdKSwgbygkVnIsIFsyLCAxMV0pLCBvKCRWciwgWzIsIDEyXSwgeyAxNDogWzEsIDM5XSwgMTU6IFsxLCA0MF0gfSksIG8oJFZyLCBbMiwgMTZdKSwgeyAxODogWzEsIDQxXSB9LCBvKCRWciwgWzIsIDE4XSwgeyAyMDogWzEsIDQyXSB9KSwgeyAyMzogWzEsIDQzXSB9LCBvKCRWciwgWzIsIDIyXSksIG8oJFZyLCBbMiwgMjNdKSwgbygkVnIsIFsyLCAyNF0pLCBvKCRWciwgWzIsIDI1XSksIHsgMzA6IDQ0LCAzMTogWzEsIDQ1XSwgNTY6IFsxLCA0Nl0sIDU3OiBbMSwgNDddIH0sIG8oJFZyLCBbMiwgMjhdKSwgeyAzNDogWzEsIDQ4XSB9LCB7IDM2OiBbMSwgNDldIH0sIG8oJFZyLCBbMiwgMzFdKSwgeyAzOTogWzEsIDUwXSwgNDE6IFsxLCA1MV0gfSwgeyA0MzogWzEsIDUyXSB9LCB7IDQ2OiBbMSwgNTNdIH0sIG8oJFZzLCBbMiwgNDJdLCB7IDU1OiBbMSwgNTRdIH0pLCBvKCRWcywgWzIsIDQzXSwgeyA1NTogWzEsIDU1XSB9KSwgbygkVnIsIFsyLCAzNl0pLCBvKCRWciwgWzIsIDM3XSksIG8oJFZyLCBbMiwgMzhdKSwgbygkVnIsIFsyLCAzOV0pLCBvKCRWciwgWzIsIDZdKSwgbygkVnIsIFsyLCAxM10pLCB7IDEzOiA1NiwgMjQ6ICRWYSwgNTQ6ICRWcSB9LCBvKCRWciwgWzIsIDE3XSksIG8oJFZ0LCAkVjMsIHsgNzogNTcgfSksIHsgMjQ6IFsxLCA1OF0gfSwgeyAyNDogWzEsIDU5XSB9LCB7IDIzOiBbMSwgNjBdIH0sIHsgMjQ6IFsyLCA0Nl0gfSwgeyAyNDogWzIsIDQ3XSB9LCBvKCRWciwgWzIsIDI5XSksIG8oJFZyLCBbMiwgMzBdKSwgeyA0MDogWzEsIDYxXSB9LCB7IDQwOiBbMSwgNjJdIH0sIHsgNDQ6IFsxLCA2M10gfSwgeyA0NzogWzEsIDY0XSB9LCB7IDI0OiBbMSwgNjVdIH0sIHsgMjQ6IFsxLCA2Nl0gfSwgbygkVnIsIFsyLCAxNF0sIHsgMTQ6IFsxLCA2N10gfSksIHsgNDogJFY0LCA1OiAkVjUsIDg6IDgsIDk6IDEwLCAxMDogMTIsIDExOiAxMywgMTI6IDE0LCAxMzogMTUsIDE2OiAkVjYsIDE3OiAkVjcsIDE5OiAkVjgsIDIxOiBbMSwgNjhdLCAyMjogJFY5LCAyNDogJFZhLCAyNTogJFZiLCAyNjogJFZjLCAyNzogJFZkLCAyODogJFZlLCAyOTogJFZmLCAzMjogMjUsIDMzOiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM4OiAkVmosIDQyOiAkVmssIDQ1OiAkVmwsIDQ4OiAkVm0sIDQ5OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDU0OiAkVnEgfSwgbygkVnIsIFsyLCAyMF0sIHsgMjA6IFsxLCA2OV0gfSksIHsgMzE6IFsxLCA3MF0gfSwgeyAyNDogWzEsIDcxXSB9LCBvKCRWciwgWzIsIDMyXSksIG8oJFZyLCBbMiwgMzNdKSwgbygkVnIsIFsyLCAzNF0pLCBvKCRWciwgWzIsIDM1XSksIG8oJFZzLCBbMiwgNDRdKSwgbygkVnMsIFsyLCA0NV0pLCBvKCRWciwgWzIsIDE1XSksIG8oJFZyLCBbMiwgMTldKSwgbygkVnQsICRWMywgeyA3OiA3MiB9KSwgbygkVnIsIFsyLCAyNl0pLCBvKCRWciwgWzIsIDI3XSksIHsgNDogJFY0LCA1OiAkVjUsIDg6IDgsIDk6IDEwLCAxMDogMTIsIDExOiAxMywgMTI6IDE0LCAxMzogMTUsIDE2OiAkVjYsIDE3OiAkVjcsIDE5OiAkVjgsIDIxOiBbMSwgNzNdLCAyMjogJFY5LCAyNDogJFZhLCAyNTogJFZiLCAyNjogJFZjLCAyNzogJFZkLCAyODogJFZlLCAyOTogJFZmLCAzMjogMjUsIDMzOiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM4OiAkVmosIDQyOiAkVmssIDQ1OiAkVmwsIDQ4OiAkVm0sIDQ5OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDU0OiAkVnEgfSwgbygkVnIsIFsyLCAyMV0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyA1OiBbMiwgMV0sIDY6IFsyLCAyXSwgNDY6IFsyLCA0Nl0sIDQ3OiBbMiwgNDddIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTQ0FMRVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZcIik7XG4gICAgICAgICAgICByZXR1cm4gMzg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJDTEFTU0RFRklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiREVGQVVMVF9DTEFTU0RFRl9JRFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJDTEFTU1wiKTtcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTX1NUWUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUWUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiU1RZTEVERUZfU1RZTEVTXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNDQUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTVEFURVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgwLCAtOCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC04KS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTEwKS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTgpLnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgwLCAtOCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC0xMCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgcmV0dXJuIDUwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUQVRFX1NUUklOR1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUQVRFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJJRFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gXCJTVEFURV9ERVNDUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJ1Y3RcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PVEVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT1RFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9URV9JRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkZMT0FUSU5HX05PVEVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJGTE9BVElOR19OT1RFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIFwiTk9URV9URVhUXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PVEVfVEVYVFwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC04KS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICAgIHJldHVybiA1NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgICByZXR1cm4gMjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDczOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzpkZWZhdWx0XFxiKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvaSwgL14oPzouKmRpcmVjdGlvblxccytCVFteXFxuXSopL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrUkxbXlxcbl0qKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvaSwgL14oPzolJSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbXFxuXSspL2ksIC9eKD86W1xcc10rKS9pLCAvXig/OigoPyFcXG4pXFxzKSspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JVteXFxuXSopL2ksIC9eKD86c2NhbGVcXHMrKS9pLCAvXig/OlxcZCspL2ksIC9eKD86XFxzK3dpZHRoXFxiKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzpjbGFzc0RlZlxccyspL2ksIC9eKD86REVGQVVMVFxccyspL2ksIC9eKD86XFx3K1xccyspL2ksIC9eKD86W15cXG5dKikvaSwgL14oPzpjbGFzc1xccyspL2ksIC9eKD86KFxcdyspKygoLFxccypcXHcrKSopKS9pLCAvXig/OlteXFxuXSopL2ksIC9eKD86c3R5bGVcXHMrKS9pLCAvXig/OltcXHcsXStcXHMrKS9pLCAvXig/OlteXFxuXSopL2ksIC9eKD86c2NhbGVcXHMrKS9pLCAvXig/OlxcZCspL2ksIC9eKD86XFxzK3dpZHRoXFxiKS9pLCAvXig/OnN0YXRlXFxzKykvaSwgL14oPzouKjw8Zm9yaz4+KS9pLCAvXig/Oi4qPDxqb2luPj4pL2ksIC9eKD86Lio8PGNob2ljZT4+KS9pLCAvXig/Oi4qXFxbXFxbZm9ya1xcXVxcXSkvaSwgL14oPzouKlxcW1xcW2pvaW5cXF1cXF0pL2ksIC9eKD86LipcXFtcXFtjaG9pY2VcXF1cXF0pL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrVEJbXlxcbl0qKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvaSwgL14oPzouKmRpcmVjdGlvblxccytSTFteXFxuXSopL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrTFJbXlxcbl0qKS9pLCAvXig/OltcIl0pL2ksIC9eKD86XFxzKmFzXFxzKykvaSwgL14oPzpbXlxcblxce10qKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0qKS9pLCAvXig/OlteXFxuXFxzXFx7XSspL2ksIC9eKD86XFxuKS9pLCAvXig/OlxceykvaSwgL14oPzolJSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlxcfSkvaSwgL14oPzpbXFxuXSkvaSwgL14oPzpub3RlXFxzKykvaSwgL14oPzpsZWZ0IG9mXFxiKS9pLCAvXig/OnJpZ2h0IG9mXFxiKS9pLCAvXig/OlwiKS9pLCAvXig/Olxccyphc1xccyopL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86W15cXG5dKikvaSwgL14oPzpcXHMqW146XFxuXFxzXFwtXSspL2ksIC9eKD86XFxzKjpbXjpcXG47XSspL2ksIC9eKD86W1xcc1xcU10qP2VuZCBub3RlXFxiKS9pLCAvXig/OnN0YXRlRGlhZ3JhbVxccyspL2ksIC9eKD86c3RhdGVEaWFncmFtLXYyXFxzKykvaSwgL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXFxiKS9pLCAvXig/OlxcW1xcKlxcXSkvaSwgL14oPzpbXjpcXG5cXHNcXC1cXHtdKykvaSwgL14oPzpcXHMqOlteOlxcbjtdKykvaSwgL14oPzotLT4pL2ksIC9eKD86LS0pL2ksIC9eKD86Ojo6KS9pLCAvXig/OiQpL2ksIC9eKD86LikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiTElORVwiOiB7IFwicnVsZXNcIjogWzksIDEwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJ1Y3RcIjogeyBcInJ1bGVzXCI6IFs5LCAxMCwgMjIsIDI2LCAyOSwgMzUsIDQyLCA0MywgNDQsIDQ1LCA1NCwgNTUsIDU2LCA1NywgNzEsIDcyLCA3MywgNzQsIDc1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJGTE9BVElOR19OT1RFX0lEXCI6IHsgXCJydWxlc1wiOiBbNjRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkZMT0FUSU5HX05PVEVcIjogeyBcInJ1bGVzXCI6IFs2MSwgNjIsIDYzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOT1RFX1RFWFRcIjogeyBcInJ1bGVzXCI6IFs2NiwgNjddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIk5PVEVfSURcIjogeyBcInJ1bGVzXCI6IFs2NV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTk9URVwiOiB7IFwicnVsZXNcIjogWzU4LCA1OSwgNjBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUWUxFREVGX1NUWUxFT1BUU1wiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RZTEVERUZfU1RZTEVTXCI6IHsgXCJydWxlc1wiOiBbMzFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUWUxFX0lEU1wiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RZTEVcIjogeyBcInJ1bGVzXCI6IFszMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NfU1RZTEVcIjogeyBcInJ1bGVzXCI6IFsyOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NcIjogeyBcInJ1bGVzXCI6IFsyN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NERUZJRFwiOiB7IFwicnVsZXNcIjogWzI1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJDTEFTU0RFRlwiOiB7IFwicnVsZXNcIjogWzIzLCAyNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzIwLCAyMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMThdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzE2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJTQ0FMRVwiOiB7IFwicnVsZXNcIjogWzEzLCAxNCwgMzMsIDM0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJBTElBU1wiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RBVEVfSURcIjogeyBcInJ1bGVzXCI6IFs0OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RBVEVfU1RSSU5HXCI6IHsgXCJydWxlc1wiOiBbNDksIDUwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJGT1JLX1NUQVRFXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJTVEFURVwiOiB7IFwicnVsZXNcIjogWzksIDEwLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0NiwgNDcsIDUxLCA1MiwgNTNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklEXCI6IHsgXCJydWxlc1wiOiBbOSwgMTBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCAxMCwgMTEsIDEyLCAxNSwgMTcsIDE5LCAyMiwgMjYsIDI5LCAzMiwgMzUsIDUzLCA1NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc2LCA3NywgNzhdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc3RhdGVEaWFncmFtX2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9zdGF0ZS9zdGF0ZUNvbW1vbi50c1xudmFyIERFRkFVTFRfRElBR1JBTV9ESVJFQ1RJT04gPSBcIkxSXCI7XG52YXIgREVGQVVMVF9ORVNURURfRE9DX0RJUiA9IFwiVEJcIjtcbnZhciBTVE1UX1NUQVRFID0gXCJzdGF0ZVwiO1xudmFyIFNUTVRfUkVMQVRJT04gPSBcInJlbGF0aW9uXCI7XG52YXIgU1RNVF9DTEFTU0RFRiA9IFwiY2xhc3NEZWZcIjtcbnZhciBTVE1UX1NUWUxFREVGID0gXCJzdHlsZVwiO1xudmFyIFNUTVRfQVBQTFlDTEFTUyA9IFwiYXBwbHlDbGFzc1wiO1xudmFyIERFRkFVTFRfU1RBVEVfVFlQRSA9IFwiZGVmYXVsdFwiO1xudmFyIERJVklERVJfVFlQRSA9IFwiZGl2aWRlclwiO1xudmFyIEdfRURHRV9TVFlMRSA9IFwiZmlsbDpub25lXCI7XG52YXIgR19FREdFX0FSUk9XSEVBRFNUWUxFID0gXCJmaWxsOiAjMzMzXCI7XG52YXIgR19FREdFX0xBQkVMUE9TID0gXCJjXCI7XG52YXIgR19FREdFX0xBQkVMVFlQRSA9IFwidGV4dFwiO1xudmFyIEdfRURHRV9USElDS05FU1MgPSBcIm5vcm1hbFwiO1xudmFyIFNIQVBFX1NUQVRFID0gXCJyZWN0XCI7XG52YXIgU0hBUEVfU1RBVEVfV0lUSF9ERVNDID0gXCJyZWN0V2l0aFRpdGxlXCI7XG52YXIgU0hBUEVfU1RBUlQgPSBcInN0YXRlU3RhcnRcIjtcbnZhciBTSEFQRV9FTkQgPSBcInN0YXRlRW5kXCI7XG52YXIgU0hBUEVfRElWSURFUiA9IFwiZGl2aWRlclwiO1xudmFyIFNIQVBFX0dST1VQID0gXCJyb3VuZGVkV2l0aFRpdGxlXCI7XG52YXIgU0hBUEVfTk9URSA9IFwibm90ZVwiO1xudmFyIFNIQVBFX05PVEVHUk9VUCA9IFwibm90ZUdyb3VwXCI7XG52YXIgQ1NTX0RJQUdSQU0gPSBcInN0YXRlZGlhZ3JhbVwiO1xudmFyIENTU19TVEFURSA9IFwic3RhdGVcIjtcbnZhciBDU1NfRElBR1JBTV9TVEFURSA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19TVEFURX1gO1xudmFyIENTU19FREdFID0gXCJ0cmFuc2l0aW9uXCI7XG52YXIgQ1NTX05PVEUgPSBcIm5vdGVcIjtcbnZhciBDU1NfTk9URV9FREdFID0gXCJub3RlLWVkZ2VcIjtcbnZhciBDU1NfRURHRV9OT1RFX0VER0UgPSBgJHtDU1NfRURHRX0gJHtDU1NfTk9URV9FREdFfWA7XG52YXIgQ1NTX0RJQUdSQU1fTk9URSA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19OT1RFfWA7XG52YXIgQ1NTX0NMVVNURVIgPSBcImNsdXN0ZXJcIjtcbnZhciBDU1NfRElBR1JBTV9DTFVTVEVSID0gYCR7Q1NTX0RJQUdSQU19LSR7Q1NTX0NMVVNURVJ9YDtcbnZhciBDU1NfQ0xVU1RFUl9BTFQgPSBcImNsdXN0ZXItYWx0XCI7XG52YXIgQ1NTX0RJQUdSQU1fQ0xVU1RFUl9BTFQgPSBgJHtDU1NfRElBR1JBTX0tJHtDU1NfQ0xVU1RFUl9BTFR9YDtcbnZhciBQQVJFTlQgPSBcInBhcmVudFwiO1xudmFyIE5PVEUgPSBcIm5vdGVcIjtcbnZhciBET01JRF9TVEFURSA9IFwic3RhdGVcIjtcbnZhciBET01JRF9UWVBFX1NQQUNFUiA9IFwiLS0tLVwiO1xudmFyIE5PVEVfSUQgPSBgJHtET01JRF9UWVBFX1NQQUNFUn0ke05PVEV9YDtcbnZhciBQQVJFTlRfSUQgPSBgJHtET01JRF9UWVBFX1NQQUNFUn0ke1BBUkVOVH1gO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVSZW5kZXJlci12My11bmlmaWVkLnRzXG52YXIgZ2V0RGlyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyc2VkSXRlbSwgZGVmYXVsdERpciA9IERFRkFVTFRfTkVTVEVEX0RPQ19ESVIpID0+IHtcbiAgaWYgKCFwYXJzZWRJdGVtLmRvYykge1xuICAgIHJldHVybiBkZWZhdWx0RGlyO1xuICB9XG4gIGxldCBkaXIgPSBkZWZhdWx0RGlyO1xuICBmb3IgKGNvbnN0IHBhcnNlZEl0ZW1Eb2Mgb2YgcGFyc2VkSXRlbS5kb2MpIHtcbiAgICBpZiAocGFyc2VkSXRlbURvYy5zdG10ID09PSBcImRpclwiKSB7XG4gICAgICBkaXIgPSBwYXJzZWRJdGVtRG9jLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGlyO1xufSwgXCJnZXREaXJcIik7XG52YXIgZ2V0Q2xhc3NlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgZGlhZ3JhbU9iaikge1xuICBkaWFncmFtT2JqLmRiLmV4dHJhY3QoZGlhZ3JhbU9iai5kYi5nZXRSb290RG9jVjIoKSk7XG4gIHJldHVybiBkaWFncmFtT2JqLmRiLmdldENsYXNzZXMoKTtcbn0sIFwiZ2V0Q2xhc3Nlc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWcpIHtcbiAgbG9nLmluZm8oXCJSRUYwOlwiKTtcbiAgbG9nLmluZm8oXCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKVwiLCBpZCk7XG4gIGNvbnN0IHsgc2VjdXJpdHlMZXZlbCwgc3RhdGU6IGNvbmYsIGxheW91dCB9ID0gZ2V0Q29uZmlnKCk7XG4gIGRpYWcuZGIuZXh0cmFjdChkaWFnLmRiLmdldFJvb3REb2NWMigpKTtcbiAgY29uc3QgZGF0YTRMYXlvdXQgPSBkaWFnLmRiLmdldERhdGEoKTtcbiAgY29uc3Qgc3ZnID0gZ2V0RGlhZ3JhbUVsZW1lbnQoaWQsIHNlY3VyaXR5TGV2ZWwpO1xuICBkYXRhNExheW91dC50eXBlID0gZGlhZy50eXBlO1xuICBkYXRhNExheW91dC5sYXlvdXRBbGdvcml0aG0gPSBsYXlvdXQ7XG4gIGRhdGE0TGF5b3V0Lm5vZGVTcGFjaW5nID0gY29uZj8ubm9kZVNwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0LnJhbmtTcGFjaW5nID0gY29uZj8ucmFua1NwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0Lm1hcmtlcnMgPSBbXCJiYXJiXCJdO1xuICBkYXRhNExheW91dC5kaWFncmFtSWQgPSBpZDtcbiAgYXdhaXQgcmVuZGVyKGRhdGE0TGF5b3V0LCBzdmcpO1xuICBjb25zdCBwYWRkaW5nID0gODtcbiAgdXRpbHNfZGVmYXVsdC5pbnNlcnRUaXRsZShcbiAgICBzdmcsXG4gICAgXCJzdGF0ZWRpYWdyYW1UaXRsZVRleHRcIixcbiAgICBjb25mPy50aXRsZVRvcE1hcmdpbiA/PyAyNSxcbiAgICBkaWFnLmRiLmdldERpYWdyYW1UaXRsZSgpXG4gICk7XG4gIHNldHVwVmlld1BvcnRGb3JTVkcoc3ZnLCBwYWRkaW5nLCBDU1NfRElBR1JBTSwgY29uZj8udXNlTWF4V2lkdGggPz8gdHJ1ZSk7XG59LCBcImRyYXdcIik7XG52YXIgc3RhdGVSZW5kZXJlcl92M191bmlmaWVkX2RlZmF1bHQgPSB7XG4gIGdldENsYXNzZXMsXG4gIGRyYXcsXG4gIGdldERpclxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL2RhdGFGZXRjaGVyLmpzXG52YXIgbm9kZURiID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBncmFwaEl0ZW1Db3VudCA9IDA7XG5mdW5jdGlvbiBzdGF0ZURvbUlkKGl0ZW1JZCA9IFwiXCIsIGNvdW50ZXIgPSAwLCB0eXBlID0gXCJcIiwgdHlwZVNwYWNlciA9IERPTUlEX1RZUEVfU1BBQ0VSKSB7XG4gIGNvbnN0IHR5cGVTdHIgPSB0eXBlICE9PSBudWxsICYmIHR5cGUubGVuZ3RoID4gMCA/IGAke3R5cGVTcGFjZXJ9JHt0eXBlfWAgOiBcIlwiO1xuICByZXR1cm4gYCR7RE9NSURfU1RBVEV9LSR7aXRlbUlkfSR7dHlwZVN0cn0tJHtjb3VudGVyfWA7XG59XG5fX25hbWUoc3RhdGVEb21JZCwgXCJzdGF0ZURvbUlkXCIpO1xudmFyIHNldHVwRG9jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50UGFyc2VkSXRlbSwgZG9jLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpID0+IHtcbiAgbG9nLnRyYWNlKFwiaXRlbXNcIiwgZG9jKTtcbiAgZG9jLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0uc3RtdCkge1xuICAgICAgY2FzZSBTVE1UX1NUQVRFOlxuICAgICAgICBkYXRhRmV0Y2hlcihwYXJlbnRQYXJzZWRJdGVtLCBpdGVtLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREVGQVVMVF9TVEFURV9UWVBFOlxuICAgICAgICBkYXRhRmV0Y2hlcihwYXJlbnRQYXJzZWRJdGVtLCBpdGVtLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RNVF9SRUxBVElPTjpcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFGZXRjaGVyKFxuICAgICAgICAgICAgcGFyZW50UGFyc2VkSXRlbSxcbiAgICAgICAgICAgIGl0ZW0uc3RhdGUxLFxuICAgICAgICAgICAgZGlhZ3JhbVN0YXRlcyxcbiAgICAgICAgICAgIG5vZGVzMixcbiAgICAgICAgICAgIGVkZ2VzMixcbiAgICAgICAgICAgIGFsdEZsYWcsXG4gICAgICAgICAgICBsb29rLFxuICAgICAgICAgICAgY2xhc3NlczJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRhdGFGZXRjaGVyKFxuICAgICAgICAgICAgcGFyZW50UGFyc2VkSXRlbSxcbiAgICAgICAgICAgIGl0ZW0uc3RhdGUyLFxuICAgICAgICAgICAgZGlhZ3JhbVN0YXRlcyxcbiAgICAgICAgICAgIG5vZGVzMixcbiAgICAgICAgICAgIGVkZ2VzMixcbiAgICAgICAgICAgIGFsdEZsYWcsXG4gICAgICAgICAgICBsb29rLFxuICAgICAgICAgICAgY2xhc3NlczJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0ge1xuICAgICAgICAgICAgaWQ6IFwiZWRnZVwiICsgZ3JhcGhJdGVtQ291bnQsXG4gICAgICAgICAgICBzdGFydDogaXRlbS5zdGF0ZTEuaWQsXG4gICAgICAgICAgICBlbmQ6IGl0ZW0uc3RhdGUyLmlkLFxuICAgICAgICAgICAgYXJyb3doZWFkOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgYXJyb3dUeXBlRW5kOiBcImFycm93X2JhcmJcIixcbiAgICAgICAgICAgIHN0eWxlOiBHX0VER0VfU1RZTEUsXG4gICAgICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChpdGVtLmRlc2NyaXB0aW9uLCBnZXRDb25maWcoKSksXG4gICAgICAgICAgICBhcnJvd2hlYWRTdHlsZTogR19FREdFX0FSUk9XSEVBRFNUWUxFLFxuICAgICAgICAgICAgbGFiZWxwb3M6IEdfRURHRV9MQUJFTFBPUyxcbiAgICAgICAgICAgIGxhYmVsVHlwZTogR19FREdFX0xBQkVMVFlQRSxcbiAgICAgICAgICAgIHRoaWNrbmVzczogR19FREdFX1RISUNLTkVTUyxcbiAgICAgICAgICAgIGNsYXNzZXM6IENTU19FREdFLFxuICAgICAgICAgICAgbG9va1xuICAgICAgICAgIH07XG4gICAgICAgICAgZWRnZXMyLnB1c2goZWRnZURhdGEpO1xuICAgICAgICAgIGdyYXBoSXRlbUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0dXBEb2NcIik7XG52YXIgZ2V0RGlyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcnNlZEl0ZW0sIGRlZmF1bHREaXIgPSBERUZBVUxUX05FU1RFRF9ET0NfRElSKSA9PiB7XG4gIGxldCBkaXIgPSBkZWZhdWx0RGlyO1xuICBpZiAocGFyc2VkSXRlbS5kb2MpIHtcbiAgICBmb3IgKGNvbnN0IHBhcnNlZEl0ZW1Eb2Mgb2YgcGFyc2VkSXRlbS5kb2MpIHtcbiAgICAgIGlmIChwYXJzZWRJdGVtRG9jLnN0bXQgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgZGlyID0gcGFyc2VkSXRlbURvYy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpcjtcbn0sIFwiZ2V0RGlyXCIpO1xuZnVuY3Rpb24gaW5zZXJ0T3JVcGRhdGVOb2RlKG5vZGVzMiwgbm9kZURhdGEsIGNsYXNzZXMyKSB7XG4gIGlmICghbm9kZURhdGEuaWQgfHwgbm9kZURhdGEuaWQgPT09IFwiPC9qb2luPjwvZm9yaz5cIiB8fCBub2RlRGF0YS5pZCA9PT0gXCI8L2Nob2ljZT5cIikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobm9kZURhdGEuY3NzQ2xhc3Nlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShub2RlRGF0YS5jc3NDb21waWxlZFN0eWxlcykpIHtcbiAgICAgIG5vZGVEYXRhLmNzc0NvbXBpbGVkU3R5bGVzID0gW107XG4gICAgfVxuICAgIG5vZGVEYXRhLmNzc0NsYXNzZXMuc3BsaXQoXCIgXCIpLmZvckVhY2goKGNzc0NsYXNzKSA9PiB7XG4gICAgICBpZiAoY2xhc3NlczIuZ2V0KGNzc0NsYXNzKSkge1xuICAgICAgICBjb25zdCBjbGFzc0RlZiA9IGNsYXNzZXMyLmdldChjc3NDbGFzcyk7XG4gICAgICAgIG5vZGVEYXRhLmNzc0NvbXBpbGVkU3R5bGVzID0gWy4uLm5vZGVEYXRhLmNzc0NvbXBpbGVkU3R5bGVzLCAuLi5jbGFzc0RlZi5zdHlsZXNdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nTm9kZURhdGEgPSBub2RlczIuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gbm9kZURhdGEuaWQpO1xuICBpZiAoZXhpc3RpbmdOb2RlRGF0YSkge1xuICAgIE9iamVjdC5hc3NpZ24oZXhpc3RpbmdOb2RlRGF0YSwgbm9kZURhdGEpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzMi5wdXNoKG5vZGVEYXRhKTtcbiAgfVxufVxuX19uYW1lKGluc2VydE9yVXBkYXRlTm9kZSwgXCJpbnNlcnRPclVwZGF0ZU5vZGVcIik7XG5mdW5jdGlvbiBnZXRDbGFzc2VzRnJvbURiSW5mbyhkYkluZm9JdGVtKSB7XG4gIHJldHVybiBkYkluZm9JdGVtPy5jbGFzc2VzPy5qb2luKFwiIFwiKSA/PyBcIlwiO1xufVxuX19uYW1lKGdldENsYXNzZXNGcm9tRGJJbmZvLCBcImdldENsYXNzZXNGcm9tRGJJbmZvXCIpO1xuZnVuY3Rpb24gZ2V0U3R5bGVzRnJvbURiSW5mbyhkYkluZm9JdGVtKSB7XG4gIHJldHVybiBkYkluZm9JdGVtPy5zdHlsZXMgPz8gW107XG59XG5fX25hbWUoZ2V0U3R5bGVzRnJvbURiSW5mbywgXCJnZXRTdHlsZXNGcm9tRGJJbmZvXCIpO1xudmFyIGRhdGFGZXRjaGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBwYXJzZWRJdGVtLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpID0+IHtcbiAgY29uc3QgaXRlbUlkID0gcGFyc2VkSXRlbS5pZDtcbiAgY29uc3QgZGJTdGF0ZSA9IGRpYWdyYW1TdGF0ZXMuZ2V0KGl0ZW1JZCk7XG4gIGNvbnN0IGNsYXNzU3RyID0gZ2V0Q2xhc3Nlc0Zyb21EYkluZm8oZGJTdGF0ZSk7XG4gIGNvbnN0IHN0eWxlID0gZ2V0U3R5bGVzRnJvbURiSW5mbyhkYlN0YXRlKTtcbiAgbG9nLmluZm8oXCJkYXRhRmV0Y2hlciBwYXJzZWRJdGVtXCIsIHBhcnNlZEl0ZW0sIGRiU3RhdGUsIHN0eWxlKTtcbiAgaWYgKGl0ZW1JZCAhPT0gXCJyb290XCIpIHtcbiAgICBsZXQgc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICBpZiAocGFyc2VkSXRlbS5zdGFydCA9PT0gdHJ1ZSkge1xuICAgICAgc2hhcGUgPSBTSEFQRV9TVEFSVDtcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEl0ZW0uc3RhcnQgPT09IGZhbHNlKSB7XG4gICAgICBzaGFwZSA9IFNIQVBFX0VORDtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEl0ZW0udHlwZSAhPT0gREVGQVVMVF9TVEFURV9UWVBFKSB7XG4gICAgICBzaGFwZSA9IHBhcnNlZEl0ZW0udHlwZTtcbiAgICB9XG4gICAgaWYgKCFub2RlRGIuZ2V0KGl0ZW1JZCkpIHtcbiAgICAgIG5vZGVEYi5zZXQoaXRlbUlkLCB7XG4gICAgICAgIGlkOiBpdGVtSWQsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBkZXNjcmlwdGlvbjogY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KGl0ZW1JZCwgZ2V0Q29uZmlnKCkpLFxuICAgICAgICBjc3NDbGFzc2VzOiBgJHtjbGFzc1N0cn0gJHtDU1NfRElBR1JBTV9TVEFURX1gLFxuICAgICAgICBjc3NTdHlsZXM6IHN0eWxlXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbmV3Tm9kZSA9IG5vZGVEYi5nZXQoaXRlbUlkKTtcbiAgICBpZiAocGFyc2VkSXRlbS5kZXNjcmlwdGlvbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3Tm9kZS5kZXNjcmlwdGlvbikpIHtcbiAgICAgICAgbmV3Tm9kZS5zaGFwZSA9IFNIQVBFX1NUQVRFX1dJVEhfREVTQztcbiAgICAgICAgbmV3Tm9kZS5kZXNjcmlwdGlvbi5wdXNoKHBhcnNlZEl0ZW0uZGVzY3JpcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld05vZGUuZGVzY3JpcHRpb24/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBuZXdOb2RlLnNoYXBlID0gU0hBUEVfU1RBVEVfV0lUSF9ERVNDO1xuICAgICAgICAgIGlmIChuZXdOb2RlLmRlc2NyaXB0aW9uID09PSBpdGVtSWQpIHtcbiAgICAgICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24gPSBbcGFyc2VkSXRlbS5kZXNjcmlwdGlvbl07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24gPSBbbmV3Tm9kZS5kZXNjcmlwdGlvbiwgcGFyc2VkSXRlbS5kZXNjcmlwdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICAgICAgICBuZXdOb2RlLmRlc2NyaXB0aW9uID0gcGFyc2VkSXRlbS5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3Tm9kZS5kZXNjcmlwdGlvbiA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dE9yQXJyYXkobmV3Tm9kZS5kZXNjcmlwdGlvbiwgZ2V0Q29uZmlnKCkpO1xuICAgIH1cbiAgICBpZiAobmV3Tm9kZS5kZXNjcmlwdGlvbj8ubGVuZ3RoID09PSAxICYmIG5ld05vZGUuc2hhcGUgPT09IFNIQVBFX1NUQVRFX1dJVEhfREVTQykge1xuICAgICAgaWYgKG5ld05vZGUudHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9HUk9VUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFuZXdOb2RlLnR5cGUgJiYgcGFyc2VkSXRlbS5kb2MpIHtcbiAgICAgIGxvZy5pbmZvKFwiU2V0dGluZyBjbHVzdGVyIGZvciBYQ1hcIiwgaXRlbUlkLCBnZXREaXIyKHBhcnNlZEl0ZW0pKTtcbiAgICAgIG5ld05vZGUudHlwZSA9IFwiZ3JvdXBcIjtcbiAgICAgIG5ld05vZGUuaXNHcm91cCA9IHRydWU7XG4gICAgICBuZXdOb2RlLmRpciA9IGdldERpcjIocGFyc2VkSXRlbSk7XG4gICAgICBuZXdOb2RlLnNoYXBlID0gcGFyc2VkSXRlbS50eXBlID09PSBESVZJREVSX1RZUEUgPyBTSEFQRV9ESVZJREVSIDogU0hBUEVfR1JPVVA7XG4gICAgICBuZXdOb2RlLmNzc0NsYXNzZXMgPSBgJHtuZXdOb2RlLmNzc0NsYXNzZXN9ICR7Q1NTX0RJQUdSQU1fQ0xVU1RFUn0gJHthbHRGbGFnID8gQ1NTX0RJQUdSQU1fQ0xVU1RFUl9BTFQgOiBcIlwifWA7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVEYXRhID0ge1xuICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgIHNoYXBlOiBuZXdOb2RlLnNoYXBlLFxuICAgICAgbGFiZWw6IG5ld05vZGUuZGVzY3JpcHRpb24sXG4gICAgICBjc3NDbGFzc2VzOiBuZXdOb2RlLmNzc0NsYXNzZXMsXG4gICAgICBjc3NDb21waWxlZFN0eWxlczogW10sXG4gICAgICBjc3NTdHlsZXM6IG5ld05vZGUuY3NzU3R5bGVzLFxuICAgICAgaWQ6IGl0ZW1JZCxcbiAgICAgIGRpcjogbmV3Tm9kZS5kaXIsXG4gICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50KSxcbiAgICAgIHR5cGU6IG5ld05vZGUudHlwZSxcbiAgICAgIGlzR3JvdXA6IG5ld05vZGUudHlwZSA9PT0gXCJncm91cFwiLFxuICAgICAgcGFkZGluZzogOCxcbiAgICAgIHJ4OiAxMCxcbiAgICAgIHJ5OiAxMCxcbiAgICAgIGxvb2tcbiAgICB9O1xuICAgIGlmIChub2RlRGF0YS5zaGFwZSA9PT0gU0hBUEVfRElWSURFUikge1xuICAgICAgbm9kZURhdGEubGFiZWwgPSBcIlwiO1xuICAgIH1cbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pZCAhPT0gXCJyb290XCIpIHtcbiAgICAgIGxvZy50cmFjZShcIlNldHRpbmcgbm9kZSBcIiwgaXRlbUlkLCBcIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50IFwiLCBwYXJlbnQuaWQpO1xuICAgICAgbm9kZURhdGEucGFyZW50SWQgPSBwYXJlbnQuaWQ7XG4gICAgfVxuICAgIG5vZGVEYXRhLmNlbnRlckxhYmVsID0gdHJ1ZTtcbiAgICBpZiAocGFyc2VkSXRlbS5ub3RlKSB7XG4gICAgICBjb25zdCBub3RlRGF0YSA9IHtcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgc2hhcGU6IFNIQVBFX05PVEUsXG4gICAgICAgIGxhYmVsOiBwYXJzZWRJdGVtLm5vdGUudGV4dCxcbiAgICAgICAgY3NzQ2xhc3NlczogQ1NTX0RJQUdSQU1fTk9URSxcbiAgICAgICAgLy8gdXNlSHRtbExhYmVsczogZmFsc2UsXG4gICAgICAgIGNzc1N0eWxlczogW10sXG4gICAgICAgIGNzc0NvbXBpbGVzU3R5bGVzOiBbXSxcbiAgICAgICAgaWQ6IGl0ZW1JZCArIE5PVEVfSUQgKyBcIi1cIiArIGdyYXBoSXRlbUNvdW50LFxuICAgICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50LCBOT1RFKSxcbiAgICAgICAgdHlwZTogbmV3Tm9kZS50eXBlLFxuICAgICAgICBpc0dyb3VwOiBuZXdOb2RlLnR5cGUgPT09IFwiZ3JvdXBcIixcbiAgICAgICAgcGFkZGluZzogZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0LnBhZGRpbmcsXG4gICAgICAgIGxvb2ssXG4gICAgICAgIHBvc2l0aW9uOiBwYXJzZWRJdGVtLm5vdGUucG9zaXRpb25cbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJlbnROb2RlSWQgPSBpdGVtSWQgKyBQQVJFTlRfSUQ7XG4gICAgICBjb25zdCBncm91cERhdGEgPSB7XG4gICAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICAgIHNoYXBlOiBTSEFQRV9OT1RFR1JPVVAsXG4gICAgICAgIGxhYmVsOiBwYXJzZWRJdGVtLm5vdGUudGV4dCxcbiAgICAgICAgY3NzQ2xhc3NlczogbmV3Tm9kZS5jc3NDbGFzc2VzLFxuICAgICAgICBjc3NTdHlsZXM6IFtdLFxuICAgICAgICBpZDogaXRlbUlkICsgUEFSRU5UX0lELFxuICAgICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50LCBQQVJFTlQpLFxuICAgICAgICB0eXBlOiBcImdyb3VwXCIsXG4gICAgICAgIGlzR3JvdXA6IHRydWUsXG4gICAgICAgIHBhZGRpbmc6IDE2LFxuICAgICAgICAvL2dldENvbmZpZygpLmZsb3djaGFydC5wYWRkaW5nXG4gICAgICAgIGxvb2ssXG4gICAgICAgIHBvc2l0aW9uOiBwYXJzZWRJdGVtLm5vdGUucG9zaXRpb25cbiAgICAgIH07XG4gICAgICBncmFwaEl0ZW1Db3VudCsrO1xuICAgICAgZ3JvdXBEYXRhLmlkID0gcGFyZW50Tm9kZUlkO1xuICAgICAgbm90ZURhdGEucGFyZW50SWQgPSBwYXJlbnROb2RlSWQ7XG4gICAgICBpbnNlcnRPclVwZGF0ZU5vZGUobm9kZXMyLCBncm91cERhdGEsIGNsYXNzZXMyKTtcbiAgICAgIGluc2VydE9yVXBkYXRlTm9kZShub2RlczIsIG5vdGVEYXRhLCBjbGFzc2VzMik7XG4gICAgICBpbnNlcnRPclVwZGF0ZU5vZGUobm9kZXMyLCBub2RlRGF0YSwgY2xhc3NlczIpO1xuICAgICAgbGV0IGZyb20gPSBpdGVtSWQ7XG4gICAgICBsZXQgdG8gPSBub3RlRGF0YS5pZDtcbiAgICAgIGlmIChwYXJzZWRJdGVtLm5vdGUucG9zaXRpb24gPT09IFwibGVmdCBvZlwiKSB7XG4gICAgICAgIGZyb20gPSBub3RlRGF0YS5pZDtcbiAgICAgICAgdG8gPSBpdGVtSWQ7XG4gICAgICB9XG4gICAgICBlZGdlczIucHVzaCh7XG4gICAgICAgIGlkOiBmcm9tICsgXCItXCIgKyB0byxcbiAgICAgICAgc3RhcnQ6IGZyb20sXG4gICAgICAgIGVuZDogdG8sXG4gICAgICAgIGFycm93aGVhZDogXCJub25lXCIsXG4gICAgICAgIGFycm93VHlwZUVuZDogXCJcIixcbiAgICAgICAgc3R5bGU6IEdfRURHRV9TVFlMRSxcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgY2xhc3NlczogQ1NTX0VER0VfTk9URV9FREdFLFxuICAgICAgICBhcnJvd2hlYWRTdHlsZTogR19FREdFX0FSUk9XSEVBRFNUWUxFLFxuICAgICAgICBsYWJlbHBvczogR19FREdFX0xBQkVMUE9TLFxuICAgICAgICBsYWJlbFR5cGU6IEdfRURHRV9MQUJFTFRZUEUsXG4gICAgICAgIHRoaWNrbmVzczogR19FREdFX1RISUNLTkVTUyxcbiAgICAgICAgbG9va1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydE9yVXBkYXRlTm9kZShub2RlczIsIG5vZGVEYXRhLCBjbGFzc2VzMik7XG4gICAgfVxuICB9XG4gIGlmIChwYXJzZWRJdGVtLmRvYykge1xuICAgIGxvZy50cmFjZShcIkFkZGluZyBub2RlcyBjaGlsZHJlbiBcIik7XG4gICAgc2V0dXBEb2MocGFyc2VkSXRlbSwgcGFyc2VkSXRlbS5kb2MsIGRpYWdyYW1TdGF0ZXMsIG5vZGVzMiwgZWRnZXMyLCAhYWx0RmxhZywgbG9vaywgY2xhc3NlczIpO1xuICB9XG59LCBcImRhdGFGZXRjaGVyXCIpO1xudmFyIHJlc2V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIG5vZGVEYi5jbGVhcigpO1xuICBncmFwaEl0ZW1Db3VudCA9IDA7XG59LCBcInJlc2V0XCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEYi5qc1xudmFyIFNUQVJUX05PREUgPSBcIlsqXVwiO1xudmFyIFNUQVJUX1RZUEUgPSBcInN0YXJ0XCI7XG52YXIgRU5EX05PREUgPSBTVEFSVF9OT0RFO1xudmFyIEVORF9UWVBFID0gXCJlbmRcIjtcbnZhciBDT0xPUl9LRVlXT1JEID0gXCJjb2xvclwiO1xudmFyIEZJTExfS0VZV09SRCA9IFwiZmlsbFwiO1xudmFyIEJHX0ZJTEwgPSBcImJnRmlsbFwiO1xudmFyIFNUWUxFQ0xBU1NfU0VQID0gXCIsXCI7XG5mdW5jdGlvbiBuZXdDbGFzc2VzTGlzdCgpIHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG59XG5fX25hbWUobmV3Q2xhc3Nlc0xpc3QsIFwibmV3Q2xhc3Nlc0xpc3RcIik7XG52YXIgbm9kZXMgPSBbXTtcbnZhciBlZGdlcyA9IFtdO1xudmFyIGRpcmVjdGlvbiA9IERFRkFVTFRfRElBR1JBTV9ESVJFQ1RJT047XG52YXIgcm9vdERvYyA9IFtdO1xudmFyIGNsYXNzZXMgPSBuZXdDbGFzc2VzTGlzdCgpO1xudmFyIG5ld0RvYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8qKiBAdHlwZSB7eyBpZDE6IHN0cmluZywgaWQyOiBzdHJpbmcsIHJlbGF0aW9uVGl0bGU6IHN0cmluZyB9W119ICovXG4gICAgcmVsYXRpb25zOiBbXSxcbiAgICBzdGF0ZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgZG9jdW1lbnRzOiB7fVxuICB9O1xufSwgXCJuZXdEb2NcIik7XG52YXIgZG9jdW1lbnRzID0ge1xuICByb290OiBuZXdEb2MoKVxufTtcbnZhciBjdXJyZW50RG9jdW1lbnQgPSBkb2N1bWVudHMucm9vdDtcbnZhciBzdGFydEVuZENvdW50ID0gMDtcbnZhciBkaXZpZGVyQ250ID0gMDtcbnZhciBsaW5lVHlwZSA9IHtcbiAgTElORTogMCxcbiAgRE9UVEVEX0xJTkU6IDFcbn07XG52YXIgcmVsYXRpb25UeXBlID0ge1xuICBBR0dSRUdBVElPTjogMCxcbiAgRVhURU5TSU9OOiAxLFxuICBDT01QT1NJVElPTjogMixcbiAgREVQRU5ERU5DWTogM1xufTtcbnZhciBjbG9uZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG8pID0+IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpLCBcImNsb25lXCIpO1xudmFyIHNldFJvb3REb2MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvKSA9PiB7XG4gIGxvZy5pbmZvKFwiU2V0dGluZyByb290IGRvY1wiLCBvKTtcbiAgcm9vdERvYyA9IG87XG59LCBcInNldFJvb3REb2NcIik7XG52YXIgZ2V0Um9vdERvYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gcm9vdERvYywgXCJnZXRSb290RG9jXCIpO1xudmFyIGRvY1RyYW5zbGF0b3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUsIGZpcnN0KSA9PiB7XG4gIGlmIChub2RlLnN0bXQgPT09IFNUTVRfUkVMQVRJT04pIHtcbiAgICBkb2NUcmFuc2xhdG9yKHBhcmVudCwgbm9kZS5zdGF0ZTEsIHRydWUpO1xuICAgIGRvY1RyYW5zbGF0b3IocGFyZW50LCBub2RlLnN0YXRlMiwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIGlmIChub2RlLnN0bXQgPT09IFNUTVRfU1RBVEUpIHtcbiAgICAgIGlmIChub2RlLmlkID09PSBcIlsqXVwiKSB7XG4gICAgICAgIG5vZGUuaWQgPSBmaXJzdCA/IHBhcmVudC5pZCArIFwiX3N0YXJ0XCIgOiBwYXJlbnQuaWQgKyBcIl9lbmRcIjtcbiAgICAgICAgbm9kZS5zdGFydCA9IGZpcnN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5pZCA9IG5vZGUuaWQudHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5kb2MpIHtcbiAgICAgIGNvbnN0IGRvYyA9IFtdO1xuICAgICAgbGV0IGN1cnJlbnREb2MgPSBbXTtcbiAgICAgIGxldCBpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGUuZG9jLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChub2RlLmRvY1tpXS50eXBlID09PSBESVZJREVSX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBuZXdOb2RlID0gY2xvbmUobm9kZS5kb2NbaV0pO1xuICAgICAgICAgIG5ld05vZGUuZG9jID0gY2xvbmUoY3VycmVudERvYyk7XG4gICAgICAgICAgZG9jLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgICAgY3VycmVudERvYyA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnREb2MucHVzaChub2RlLmRvY1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkb2MubGVuZ3RoID4gMCAmJiBjdXJyZW50RG9jLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICBzdG10OiBTVE1UX1NUQVRFLFxuICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgdHlwZTogXCJkaXZpZGVyXCIsXG4gICAgICAgICAgZG9jOiBjbG9uZShjdXJyZW50RG9jKVxuICAgICAgICB9O1xuICAgICAgICBkb2MucHVzaChjbG9uZShuZXdOb2RlKSk7XG4gICAgICAgIG5vZGUuZG9jID0gZG9jO1xuICAgICAgfVxuICAgICAgbm9kZS5kb2MuZm9yRWFjaCgoZG9jTm9kZSkgPT4gZG9jVHJhbnNsYXRvcihub2RlLCBkb2NOb2RlLCB0cnVlKSk7XG4gICAgfVxuICB9XG59LCBcImRvY1RyYW5zbGF0b3JcIik7XG52YXIgZ2V0Um9vdERvY1YyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRvY1RyYW5zbGF0b3IoeyBpZDogXCJyb290XCIgfSwgeyBpZDogXCJyb290XCIsIGRvYzogcm9vdERvYyB9LCB0cnVlKTtcbiAgcmV0dXJuIHsgaWQ6IFwicm9vdFwiLCBkb2M6IHJvb3REb2MgfTtcbn0sIFwiZ2V0Um9vdERvY1YyXCIpO1xudmFyIGV4dHJhY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChfZG9jKSA9PiB7XG4gIGxldCBkb2M7XG4gIGlmIChfZG9jLmRvYykge1xuICAgIGRvYyA9IF9kb2MuZG9jO1xuICB9IGVsc2Uge1xuICAgIGRvYyA9IF9kb2M7XG4gIH1cbiAgbG9nLmluZm8oZG9jKTtcbiAgY2xlYXIyKHRydWUpO1xuICBsb2cuaW5mbyhcIkV4dHJhY3QgaW5pdGlhbCBkb2N1bWVudDpcIiwgZG9jKTtcbiAgZG9jLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBsb2cud2FybihcIlN0YXRlbWVudFwiLCBpdGVtLnN0bXQpO1xuICAgIHN3aXRjaCAoaXRlbS5zdG10KSB7XG4gICAgICBjYXNlIFNUTVRfU1RBVEU6XG4gICAgICAgIGFkZFN0YXRlKFxuICAgICAgICAgIGl0ZW0uaWQudHJpbSgpLFxuICAgICAgICAgIGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtLmRvYyxcbiAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGl0ZW0ubm90ZSxcbiAgICAgICAgICBpdGVtLmNsYXNzZXMsXG4gICAgICAgICAgaXRlbS5zdHlsZXMsXG4gICAgICAgICAgaXRlbS50ZXh0U3R5bGVzXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVE1UX1JFTEFUSU9OOlxuICAgICAgICBhZGRSZWxhdGlvbihpdGVtLnN0YXRlMSwgaXRlbS5zdGF0ZTIsIGl0ZW0uZGVzY3JpcHRpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RNVF9DTEFTU0RFRjpcbiAgICAgICAgYWRkU3R5bGVDbGFzcyhpdGVtLmlkLnRyaW0oKSwgaXRlbS5jbGFzc2VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUTVRfU1RZTEVERUY6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBpZHMgPSBpdGVtLmlkLnRyaW0oKS5zcGxpdChcIixcIik7XG4gICAgICAgICAgY29uc3Qgc3R5bGVzID0gaXRlbS5zdHlsZUNsYXNzLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICBpZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZFN0YXRlID0gZ2V0U3RhdGUoaWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkSWQgPSBpZC50cmltKCk7XG4gICAgICAgICAgICAgIGFkZFN0YXRlKHRyaW1tZWRJZCk7XG4gICAgICAgICAgICAgIGZvdW5kU3RhdGUgPSBnZXRTdGF0ZSh0cmltbWVkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm91bmRTdGF0ZS5zdHlsZXMgPSBzdHlsZXMubWFwKChzKSA9PiBzLnJlcGxhY2UoLzsvZywgXCJcIik/LnRyaW0oKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUTVRfQVBQTFlDTEFTUzpcbiAgICAgICAgc2V0Q3NzQ2xhc3MoaXRlbS5pZC50cmltKCksIGl0ZW0uc3R5bGVDbGFzcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGRpYWdyYW1TdGF0ZXMgPSBnZXRTdGF0ZXMoKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IGxvb2sgPSBjb25maWcubG9vaztcbiAgcmVzZXQoKTtcbiAgZGF0YUZldGNoZXIodm9pZCAwLCBnZXRSb290RG9jVjIoKSwgZGlhZ3JhbVN0YXRlcywgbm9kZXMsIGVkZ2VzLCB0cnVlLCBsb29rLCBjbGFzc2VzKTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUubGFiZWwpKSB7XG4gICAgICBub2RlLmRlc2NyaXB0aW9uID0gbm9kZS5sYWJlbC5zbGljZSgxKTtcbiAgICAgIGlmIChub2RlLmlzR3JvdXAgJiYgbm9kZS5kZXNjcmlwdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkdyb3VwIG5vZGVzIGNhbiBvbmx5IGhhdmUgbGFiZWwuIFJlbW92ZSB0aGUgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBmb3Igbm9kZSBbXCIgKyBub2RlLmlkICsgXCJdXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGUubGFiZWwgPSBub2RlLmxhYmVsWzBdO1xuICAgIH1cbiAgfSk7XG59LCBcImV4dHJhY3RcIik7XG52YXIgYWRkU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCB0eXBlID0gREVGQVVMVF9TVEFURV9UWVBFLCBkb2MgPSBudWxsLCBkZXNjciA9IG51bGwsIG5vdGUgPSBudWxsLCBjbGFzc2VzMiA9IG51bGwsIHN0eWxlcyA9IG51bGwsIHRleHRTdHlsZXMgPSBudWxsKSB7XG4gIGNvbnN0IHRyaW1tZWRJZCA9IGlkPy50cmltKCk7XG4gIGlmICghY3VycmVudERvY3VtZW50LnN0YXRlcy5oYXModHJpbW1lZElkKSkge1xuICAgIGxvZy5pbmZvKFwiQWRkaW5nIHN0YXRlIFwiLCB0cmltbWVkSWQsIGRlc2NyKTtcbiAgICBjdXJyZW50RG9jdW1lbnQuc3RhdGVzLnNldCh0cmltbWVkSWQsIHtcbiAgICAgIGlkOiB0cmltbWVkSWQsXG4gICAgICBkZXNjcmlwdGlvbnM6IFtdLFxuICAgICAgdHlwZSxcbiAgICAgIGRvYyxcbiAgICAgIG5vdGUsXG4gICAgICBjbGFzc2VzOiBbXSxcbiAgICAgIHN0eWxlczogW10sXG4gICAgICB0ZXh0U3R5bGVzOiBbXVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICghY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQodHJpbW1lZElkKS5kb2MpIHtcbiAgICAgIGN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KHRyaW1tZWRJZCkuZG9jID0gZG9jO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KHRyaW1tZWRJZCkudHlwZSkge1xuICAgICAgY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQodHJpbW1lZElkKS50eXBlID0gdHlwZTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyKSB7XG4gICAgbG9nLmluZm8oXCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uXCIsIHRyaW1tZWRJZCwgZGVzY3IpO1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFkZERlc2NyaXB0aW9uKHRyaW1tZWRJZCwgZGVzY3IudHJpbSgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZGVzY3IuZm9yRWFjaCgoZGVzKSA9PiBhZGREZXNjcmlwdGlvbih0cmltbWVkSWQsIGRlcy50cmltKCkpKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vdGUpIHtcbiAgICBjb25zdCBkb2MyID0gY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQodHJpbW1lZElkKTtcbiAgICBkb2MyLm5vdGUgPSBub3RlO1xuICAgIGRvYzIubm90ZS50ZXh0ID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KGRvYzIubm90ZS50ZXh0LCBnZXRDb25maWcoKSk7XG4gIH1cbiAgaWYgKGNsYXNzZXMyKSB7XG4gICAgbG9nLmluZm8oXCJTZXR0aW5nIHN0YXRlIGNsYXNzZXNcIiwgdHJpbW1lZElkLCBjbGFzc2VzMik7XG4gICAgY29uc3QgY2xhc3Nlc0xpc3QgPSB0eXBlb2YgY2xhc3NlczIgPT09IFwic3RyaW5nXCIgPyBbY2xhc3NlczJdIDogY2xhc3NlczI7XG4gICAgY2xhc3Nlc0xpc3QuZm9yRWFjaCgoY3NzQ2xhc3MpID0+IHNldENzc0NsYXNzKHRyaW1tZWRJZCwgY3NzQ2xhc3MudHJpbSgpKSk7XG4gIH1cbiAgaWYgKHN0eWxlcykge1xuICAgIGxvZy5pbmZvKFwiU2V0dGluZyBzdGF0ZSBzdHlsZXNcIiwgdHJpbW1lZElkLCBzdHlsZXMpO1xuICAgIGNvbnN0IHN0eWxlc0xpc3QgPSB0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiID8gW3N0eWxlc10gOiBzdHlsZXM7XG4gICAgc3R5bGVzTGlzdC5mb3JFYWNoKChzdHlsZSkgPT4gc2V0U3R5bGUodHJpbW1lZElkLCBzdHlsZS50cmltKCkpKTtcbiAgfVxuICBpZiAodGV4dFN0eWxlcykge1xuICAgIGxvZy5pbmZvKFwiU2V0dGluZyBzdGF0ZSBzdHlsZXNcIiwgdHJpbW1lZElkLCBzdHlsZXMpO1xuICAgIGNvbnN0IHRleHRTdHlsZXNMaXN0ID0gdHlwZW9mIHRleHRTdHlsZXMgPT09IFwic3RyaW5nXCIgPyBbdGV4dFN0eWxlc10gOiB0ZXh0U3R5bGVzO1xuICAgIHRleHRTdHlsZXNMaXN0LmZvckVhY2goKHRleHRTdHlsZSkgPT4gc2V0VGV4dFN0eWxlKHRyaW1tZWRJZCwgdGV4dFN0eWxlLnRyaW0oKSkpO1xuICB9XG59LCBcImFkZFN0YXRlXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc2F2ZUNvbW1vbikge1xuICBub2RlcyA9IFtdO1xuICBlZGdlcyA9IFtdO1xuICBkb2N1bWVudHMgPSB7XG4gICAgcm9vdDogbmV3RG9jKClcbiAgfTtcbiAgY3VycmVudERvY3VtZW50ID0gZG9jdW1lbnRzLnJvb3Q7XG4gIHN0YXJ0RW5kQ291bnQgPSAwO1xuICBjbGFzc2VzID0gbmV3Q2xhc3Nlc0xpc3QoKTtcbiAgaWYgKCFzYXZlQ29tbW9uKSB7XG4gICAgY2xlYXIoKTtcbiAgfVxufSwgXCJjbGVhclwiKTtcbnZhciBnZXRTdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIGN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGlkKTtcbn0sIFwiZ2V0U3RhdGVcIik7XG52YXIgZ2V0U3RhdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGN1cnJlbnREb2N1bWVudC5zdGF0ZXM7XG59LCBcImdldFN0YXRlc1wiKTtcbnZhciBsb2dEb2N1bWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBsb2cuaW5mbyhcIkRvY3VtZW50cyA9IFwiLCBkb2N1bWVudHMpO1xufSwgXCJsb2dEb2N1bWVudHNcIik7XG52YXIgZ2V0UmVsYXRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnM7XG59LCBcImdldFJlbGF0aW9uc1wiKTtcbmZ1bmN0aW9uIHN0YXJ0SWRJZk5lZWRlZChpZCA9IFwiXCIpIHtcbiAgbGV0IGZpeGVkSWQgPSBpZDtcbiAgaWYgKGlkID09PSBTVEFSVF9OT0RFKSB7XG4gICAgc3RhcnRFbmRDb3VudCsrO1xuICAgIGZpeGVkSWQgPSBgJHtTVEFSVF9UWVBFfSR7c3RhcnRFbmRDb3VudH1gO1xuICB9XG4gIHJldHVybiBmaXhlZElkO1xufVxuX19uYW1lKHN0YXJ0SWRJZk5lZWRlZCwgXCJzdGFydElkSWZOZWVkZWRcIik7XG5mdW5jdGlvbiBzdGFydFR5cGVJZk5lZWRlZChpZCA9IFwiXCIsIHR5cGUgPSBERUZBVUxUX1NUQVRFX1RZUEUpIHtcbiAgcmV0dXJuIGlkID09PSBTVEFSVF9OT0RFID8gU1RBUlRfVFlQRSA6IHR5cGU7XG59XG5fX25hbWUoc3RhcnRUeXBlSWZOZWVkZWQsIFwic3RhcnRUeXBlSWZOZWVkZWRcIik7XG5mdW5jdGlvbiBlbmRJZElmTmVlZGVkKGlkID0gXCJcIikge1xuICBsZXQgZml4ZWRJZCA9IGlkO1xuICBpZiAoaWQgPT09IEVORF9OT0RFKSB7XG4gICAgc3RhcnRFbmRDb3VudCsrO1xuICAgIGZpeGVkSWQgPSBgJHtFTkRfVFlQRX0ke3N0YXJ0RW5kQ291bnR9YDtcbiAgfVxuICByZXR1cm4gZml4ZWRJZDtcbn1cbl9fbmFtZShlbmRJZElmTmVlZGVkLCBcImVuZElkSWZOZWVkZWRcIik7XG5mdW5jdGlvbiBlbmRUeXBlSWZOZWVkZWQoaWQgPSBcIlwiLCB0eXBlID0gREVGQVVMVF9TVEFURV9UWVBFKSB7XG4gIHJldHVybiBpZCA9PT0gRU5EX05PREUgPyBFTkRfVFlQRSA6IHR5cGU7XG59XG5fX25hbWUoZW5kVHlwZUlmTmVlZGVkLCBcImVuZFR5cGVJZk5lZWRlZFwiKTtcbmZ1bmN0aW9uIGFkZFJlbGF0aW9uT2JqcyhpdGVtMSwgaXRlbTIsIHJlbGF0aW9uVGl0bGUpIHtcbiAgbGV0IGlkMSA9IHN0YXJ0SWRJZk5lZWRlZChpdGVtMS5pZC50cmltKCkpO1xuICBsZXQgdHlwZTEgPSBzdGFydFR5cGVJZk5lZWRlZChpdGVtMS5pZC50cmltKCksIGl0ZW0xLnR5cGUpO1xuICBsZXQgaWQyID0gc3RhcnRJZElmTmVlZGVkKGl0ZW0yLmlkLnRyaW0oKSk7XG4gIGxldCB0eXBlMiA9IHN0YXJ0VHlwZUlmTmVlZGVkKGl0ZW0yLmlkLnRyaW0oKSwgaXRlbTIudHlwZSk7XG4gIGFkZFN0YXRlKFxuICAgIGlkMSxcbiAgICB0eXBlMSxcbiAgICBpdGVtMS5kb2MsXG4gICAgaXRlbTEuZGVzY3JpcHRpb24sXG4gICAgaXRlbTEubm90ZSxcbiAgICBpdGVtMS5jbGFzc2VzLFxuICAgIGl0ZW0xLnN0eWxlcyxcbiAgICBpdGVtMS50ZXh0U3R5bGVzXG4gICk7XG4gIGFkZFN0YXRlKFxuICAgIGlkMixcbiAgICB0eXBlMixcbiAgICBpdGVtMi5kb2MsXG4gICAgaXRlbTIuZGVzY3JpcHRpb24sXG4gICAgaXRlbTIubm90ZSxcbiAgICBpdGVtMi5jbGFzc2VzLFxuICAgIGl0ZW0yLnN0eWxlcyxcbiAgICBpdGVtMi50ZXh0U3R5bGVzXG4gICk7XG4gIGN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7XG4gICAgaWQxLFxuICAgIGlkMixcbiAgICByZWxhdGlvblRpdGxlOiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQocmVsYXRpb25UaXRsZSwgZ2V0Q29uZmlnKCkpXG4gIH0pO1xufVxuX19uYW1lKGFkZFJlbGF0aW9uT2JqcywgXCJhZGRSZWxhdGlvbk9ianNcIik7XG52YXIgYWRkUmVsYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW0xLCBpdGVtMiwgdGl0bGUpIHtcbiAgaWYgKHR5cGVvZiBpdGVtMSA9PT0gXCJvYmplY3RcIikge1xuICAgIGFkZFJlbGF0aW9uT2JqcyhpdGVtMSwgaXRlbTIsIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZDEgPSBzdGFydElkSWZOZWVkZWQoaXRlbTEudHJpbSgpKTtcbiAgICBjb25zdCB0eXBlMSA9IHN0YXJ0VHlwZUlmTmVlZGVkKGl0ZW0xKTtcbiAgICBjb25zdCBpZDIgPSBlbmRJZElmTmVlZGVkKGl0ZW0yLnRyaW0oKSk7XG4gICAgY29uc3QgdHlwZTIgPSBlbmRUeXBlSWZOZWVkZWQoaXRlbTIpO1xuICAgIGFkZFN0YXRlKGlkMSwgdHlwZTEpO1xuICAgIGFkZFN0YXRlKGlkMiwgdHlwZTIpO1xuICAgIGN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7XG4gICAgICBpZDEsXG4gICAgICBpZDIsXG4gICAgICB0aXRsZTogY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KHRpdGxlLCBnZXRDb25maWcoKSlcbiAgICB9KTtcbiAgfVxufSwgXCJhZGRSZWxhdGlvblwiKTtcbnZhciBhZGREZXNjcmlwdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQsIGRlc2NyKSB7XG4gIGNvbnN0IHRoZVN0YXRlID0gY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaWQpO1xuICBjb25zdCBfZGVzY3IgPSBkZXNjci5zdGFydHNXaXRoKFwiOlwiKSA/IGRlc2NyLnJlcGxhY2UoXCI6XCIsIFwiXCIpLnRyaW0oKSA6IGRlc2NyO1xuICB0aGVTdGF0ZS5kZXNjcmlwdGlvbnMucHVzaChjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2Rlc2NyLCBnZXRDb25maWcoKSkpO1xufSwgXCJhZGREZXNjcmlwdGlvblwiKTtcbnZhciBjbGVhbnVwTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGxhYmVsKSB7XG4gIGlmIChsYWJlbC5zdWJzdHJpbmcoMCwgMSkgPT09IFwiOlwiKSB7XG4gICAgcmV0dXJuIGxhYmVsLnN1YnN0cigyKS50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhYmVsLnRyaW0oKTtcbiAgfVxufSwgXCJjbGVhbnVwTGFiZWxcIik7XG52YXIgZ2V0RGl2aWRlcklkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRpdmlkZXJDbnQrKztcbiAgcmV0dXJuIFwiZGl2aWRlci1pZC1cIiArIGRpdmlkZXJDbnQ7XG59LCBcImdldERpdmlkZXJJZFwiKTtcbnZhciBhZGRTdHlsZUNsYXNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCwgc3R5bGVBdHRyaWJ1dGVzID0gXCJcIikge1xuICBpZiAoIWNsYXNzZXMuaGFzKGlkKSkge1xuICAgIGNsYXNzZXMuc2V0KGlkLCB7IGlkLCBzdHlsZXM6IFtdLCB0ZXh0U3R5bGVzOiBbXSB9KTtcbiAgfVxuICBjb25zdCBmb3VuZENsYXNzID0gY2xhc3Nlcy5nZXQoaWQpO1xuICBpZiAoc3R5bGVBdHRyaWJ1dGVzICE9PSB2b2lkIDAgJiYgc3R5bGVBdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgc3R5bGVBdHRyaWJ1dGVzLnNwbGl0KFNUWUxFQ0xBU1NfU0VQKS5mb3JFYWNoKChhdHRyaWIpID0+IHtcbiAgICAgIGNvbnN0IGZpeGVkQXR0cmliID0gYXR0cmliLnJlcGxhY2UoLyhbXjtdKik7LywgXCIkMVwiKS50cmltKCk7XG4gICAgICBpZiAoUmVnRXhwKENPTE9SX0tFWVdPUkQpLmV4ZWMoYXR0cmliKSkge1xuICAgICAgICBjb25zdCBuZXdTdHlsZTEgPSBmaXhlZEF0dHJpYi5yZXBsYWNlKEZJTExfS0VZV09SRCwgQkdfRklMTCk7XG4gICAgICAgIGNvbnN0IG5ld1N0eWxlMiA9IG5ld1N0eWxlMS5yZXBsYWNlKENPTE9SX0tFWVdPUkQsIEZJTExfS0VZV09SRCk7XG4gICAgICAgIGZvdW5kQ2xhc3MudGV4dFN0eWxlcy5wdXNoKG5ld1N0eWxlMik7XG4gICAgICB9XG4gICAgICBmb3VuZENsYXNzLnN0eWxlcy5wdXNoKGZpeGVkQXR0cmliKTtcbiAgICB9KTtcbiAgfVxufSwgXCJhZGRTdHlsZUNsYXNzXCIpO1xudmFyIGdldENsYXNzZXMyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNsYXNzZXM7XG59LCBcImdldENsYXNzZXNcIik7XG52YXIgc2V0Q3NzQ2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW1JZHMsIGNzc0NsYXNzTmFtZSkge1xuICBpdGVtSWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgbGV0IGZvdW5kU3RhdGUgPSBnZXRTdGF0ZShpZCk7XG4gICAgaWYgKGZvdW5kU3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgY29uc3QgdHJpbW1lZElkID0gaWQudHJpbSgpO1xuICAgICAgYWRkU3RhdGUodHJpbW1lZElkKTtcbiAgICAgIGZvdW5kU3RhdGUgPSBnZXRTdGF0ZSh0cmltbWVkSWQpO1xuICAgIH1cbiAgICBmb3VuZFN0YXRlLmNsYXNzZXMucHVzaChjc3NDbGFzc05hbWUpO1xuICB9KTtcbn0sIFwic2V0Q3NzQ2xhc3NcIik7XG52YXIgc2V0U3R5bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW1JZCwgc3R5bGVUZXh0KSB7XG4gIGNvbnN0IGl0ZW0gPSBnZXRTdGF0ZShpdGVtSWQpO1xuICBpZiAoaXRlbSAhPT0gdm9pZCAwKSB7XG4gICAgaXRlbS5zdHlsZXMucHVzaChzdHlsZVRleHQpO1xuICB9XG59LCBcInNldFN0eWxlXCIpO1xudmFyIHNldFRleHRTdHlsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaXRlbUlkLCBjc3NDbGFzc05hbWUpIHtcbiAgY29uc3QgaXRlbSA9IGdldFN0YXRlKGl0ZW1JZCk7XG4gIGlmIChpdGVtICE9PSB2b2lkIDApIHtcbiAgICBpdGVtLnRleHRTdHlsZXMucHVzaChjc3NDbGFzc05hbWUpO1xuICB9XG59LCBcInNldFRleHRTdHlsZVwiKTtcbnZhciBnZXREaXJlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGRpcmVjdGlvbiwgXCJnZXREaXJlY3Rpb25cIik7XG52YXIgc2V0RGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGlyKSA9PiB7XG4gIGRpcmVjdGlvbiA9IGRpcjtcbn0sIFwic2V0RGlyZWN0aW9uXCIpO1xudmFyIHRyaW1Db2xvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0cikgPT4gc3RyICYmIHN0clswXSA9PT0gXCI6XCIgPyBzdHIuc3Vic3RyKDEpLnRyaW0oKSA6IHN0ci50cmltKCksIFwidHJpbUNvbG9uXCIpO1xudmFyIGdldERhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgb3RoZXI6IHt9LCBjb25maWcsIGRpcmVjdGlvbjogZ2V0RGlyKGdldFJvb3REb2NWMigpKSB9O1xufSwgXCJnZXREYXRhXCIpO1xudmFyIHN0YXRlRGJfZGVmYXVsdCA9IHtcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLnN0YXRlLCBcImdldENvbmZpZ1wiKSxcbiAgZ2V0RGF0YSxcbiAgYWRkU3RhdGUsXG4gIGNsZWFyOiBjbGVhcjIsXG4gIGdldFN0YXRlLFxuICBnZXRTdGF0ZXMsXG4gIGdldFJlbGF0aW9ucyxcbiAgZ2V0Q2xhc3NlczogZ2V0Q2xhc3NlczIsXG4gIGdldERpcmVjdGlvbixcbiAgYWRkUmVsYXRpb24sXG4gIGdldERpdmlkZXJJZCxcbiAgc2V0RGlyZWN0aW9uLFxuICBjbGVhbnVwTGFiZWwsXG4gIGxpbmVUeXBlLFxuICByZWxhdGlvblR5cGUsXG4gIGxvZ0RvY3VtZW50cyxcbiAgZ2V0Um9vdERvYyxcbiAgc2V0Um9vdERvYyxcbiAgZ2V0Um9vdERvY1YyLFxuICBleHRyYWN0LFxuICB0cmltQ29sb24sXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTdHlsZUNsYXNzLFxuICBzZXRDc3NDbGFzcyxcbiAgYWRkRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50cmFuc2l0aW9uQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnRyYW5zaXRpb25Db2xvcn07XG4gIH1cbmcuc3RhdGVHcm91cCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cbmcuc3RhdGVHcm91cCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMHB4O1xuXG59XG5nLnN0YXRlR3JvdXAgLnN0YXRlLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgZmlsbDogJHtvcHRpb25zLnN0YXRlTGFiZWxDb2xvcn07XG59XG5cbmcuc3RhdGVHcm91cCByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbn1cblxuZy5zdGF0ZUdyb3VwIGxpbmUge1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi50cmFuc2l0aW9uIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMudHJhbnNpdGlvbkNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xuICBmaWxsOiBub25lO1xufVxuXG4uc3RhdGVHcm91cCAuY29tcG9zaXQge1xuICBmaWxsOiAke29wdGlvbnMuYmFja2dyb3VuZH07XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGVHcm91cCAuYWx0LWNvbXBvc2l0IHtcbiAgZmlsbDogI2UwZTBlMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZS1ub3RlIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubm90ZUJvcmRlckNvbG9yfTtcbiAgZmlsbDogJHtvcHRpb25zLm5vdGVCa2dDb2xvcn07XG5cbiAgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gIH1cbn1cblxuLnN0YXRlTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ307XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5sYWJlbEJhY2tncm91bmRDb2xvcn07XG4gIG9wYWNpdHk6IDAuNTtcbn1cbi5lZGdlTGFiZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gIHAge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgfVxuICByZWN0IHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgfVxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLnRyYW5zaXRpb25MYWJlbENvbG9yIHx8IG9wdGlvbnMudGVydGlhcnlUZXh0Q29sb3J9O1xufVxuLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCBvcHRpb25zLnRlcnRpYXJ5VGV4dENvbG9yfTtcbn1cblxuLnN0YXRlTGFiZWwgdGV4dCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5zdGF0ZUxhYmVsQ29sb3J9O1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQge1xuICBmaWxsOiAke29wdGlvbnMuc3BlY2lhbFN0YXRlQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5zcGVjaWFsU3RhdGVDb2xvcn07XG59XG5cbi5ub2RlIC5mb3JrLWpvaW4ge1xuICBmaWxsOiAke29wdGlvbnMuc3BlY2lhbFN0YXRlQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5zcGVjaWFsU3RhdGVDb2xvcn07XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQge1xuICBmaWxsOiAke29wdGlvbnMuaW5uZXJFbmRCYWNrZ3JvdW5kfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuYmFja2dyb3VuZH07XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG4uZW5kLXN0YXRlLWlubmVyIHtcbiAgZmlsbDogJHtvcHRpb25zLmNvbXBvc2l0ZUJhY2tncm91bmQgfHwgb3B0aW9ucy5iYWNrZ3JvdW5kfTtcbiAgLy8gc3Ryb2tlOiAke29wdGlvbnMuYmFja2dyb3VuZH07XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAke29wdGlvbnMuc3RhdGVCa2cgfHwgb3B0aW9ucy5tYWluQmtnfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3RhdGVCb3JkZXIgfHwgb3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4ubm9kZSBwb2x5Z29uIHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5zdGF0ZUJvcmRlciB8fCBvcHRpb25zLm5vZGVCb3JkZXJ9OztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAke29wdGlvbnMubGluZUNvbG9yfTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAke29wdGlvbnMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3RhdGVCb3JkZXIgfHwgb3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG5cbi5jbHVzdGVyLWxhYmVsLCAubm9kZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy5zdGF0ZUxhYmVsQ29sb3J9O1xuICAvLyBsaW5lLWhlaWdodDogMTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogJHtvcHRpb25zLnN0YXRlQm9yZGVyIHx8IG9wdGlvbnMubm9kZUJvcmRlcn07XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLnRpdGxlLXN0YXRlIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIge1xuICBmaWxsOiAke29wdGlvbnMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCBvcHRpb25zLmJhY2tncm91bmR9O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIge1xuICBmaWxsOiAke29wdGlvbnMuYWx0QmFja2dyb3VuZCA/IG9wdGlvbnMuYWx0QmFja2dyb3VuZCA6IFwiI2VmZWZlZlwifTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAke29wdGlvbnMuYWx0QmFja2dyb3VuZCA/IG9wdGlvbnMuYWx0QmFja2dyb3VuZCA6IFwiI2VmZWZlZlwifTtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vdGVCa2dDb2xvcn07XG4gIHN0cm9rZTogJHtvcHRpb25zLm5vdGVCb3JkZXJDb2xvcn07XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5ub3RlQmtnQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub3RlQm9yZGVyQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5ub3RlVGV4dENvbG9yfTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xufVxuLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHtcbiAgY29sb3I6IHJlZDsgLy8gJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5zdGF0ZWRpYWdyYW1UaXRsZVRleHQge1xuICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9O1xufVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbmV4cG9ydCB7XG4gIHN0YXRlRGlhZ3JhbV9kZWZhdWx0LFxuICBzdGF0ZVJlbmRlcmVyX3YzX3VuaWZpZWRfZGVmYXVsdCxcbiAgc3RhdGVEYl9kZWZhdWx0LFxuICBzdHlsZXNfZGVmYXVsdFxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgc3RhdGVEYl9kZWZhdWx0LFxuICBzdGF0ZURpYWdyYW1fZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstTlFGN01KQU8ubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVdaQklBVFNLLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVJPS1lVVkNVLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjb21tb25fZGVmYXVsdCxcbiAgY29uZmlndXJlU3ZnU2l6ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3N0YXRlUmVuZGVyZXIuanNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgbGF5b3V0IGFzIGRhZ3JlTGF5b3V0IH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc2hhcGVzLmpzXG5pbXBvcnQgeyBsaW5lLCBjdXJ2ZUJhc2lzIH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9zdGF0ZS9pZC1jYWNoZS5qc1xudmFyIGlkQ2FjaGUgPSB7fTtcbnZhciBzZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChrZXksIHZhbCkgPT4ge1xuICBpZENhY2hlW2tleV0gPSB2YWw7XG59LCBcInNldFwiKTtcbnZhciBnZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChrKSA9PiBpZENhY2hlW2tdLCBcImdldFwiKTtcbnZhciBrZXlzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBPYmplY3Qua2V5cyhpZENhY2hlKSwgXCJrZXlzXCIpO1xudmFyIHNpemUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGtleXMoKS5sZW5ndGgsIFwic2l6ZVwiKTtcbnZhciBpZF9jYWNoZV9kZWZhdWx0ID0ge1xuICBnZXQsXG4gIHNldCxcbiAga2V5cyxcbiAgc2l6ZVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3NoYXBlcy5qc1xudmFyIGRyYXdTdGFydFN0YXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZykgPT4gZy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImNsYXNzXCIsIFwic3RhcnQtc3RhdGVcIikuYXR0cihcInJcIiwgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLCBcImRyYXdTdGFydFN0YXRlXCIpO1xudmFyIGRyYXdEaXZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZykgPT4gZy5hcHBlbmQoXCJsaW5lXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwiZ3JleVwiKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIzXCIpLmF0dHIoXCJ4MVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MlwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICogMikuYXR0cihcInkxXCIsIDApLmF0dHIoXCJ5MlwiLCAwKSwgXCJkcmF3RGl2aWRlclwiKTtcbnZhciBkcmF3U2ltcGxlU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChnLCBzdGF0ZURlZikgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwiZm9udC1zaXplXCIsIGdldENvbmZpZygpLnN0YXRlLmZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS10aXRsZVwiKS50ZXh0KHN0YXRlRGVmLmlkKTtcbiAgY29uc3QgY2xhc3NCb3ggPSBzdGF0ZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcIndpZHRoXCIsIGNsYXNzQm94LndpZHRoICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgY2xhc3NCb3guaGVpZ2h0ICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJyeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5yYWRpdXMpO1xuICByZXR1cm4gc3RhdGU7XG59LCBcImRyYXdTaW1wbGVTdGF0ZVwiKTtcbnZhciBkcmF3RGVzY3JTdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGcsIHN0YXRlRGVmKSA9PiB7XG4gIGNvbnN0IGFkZFRzcGFuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0RWwsIHR4dCwgaXNGaXJzdDIpIHtcbiAgICBjb25zdCB0U3BhbiA9IHRleHRFbC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykudGV4dCh0eHQpO1xuICAgIGlmICghaXNGaXJzdDIpIHtcbiAgICAgIHRTcGFuLmF0dHIoXCJkeVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0KTtcbiAgICB9XG4gIH0sIFwiYWRkVHNwYW5cIik7XG4gIGNvbnN0IHRpdGxlID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICsgMS4zICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcImZvbnQtc2l6ZVwiLCBnZXRDb25maWcoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtdGl0bGVcIikudGV4dChzdGF0ZURlZi5kZXNjcmlwdGlvbnNbMF0pO1xuICBjb25zdCB0aXRsZUJveCA9IHRpdGxlLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGl0bGVCb3guaGVpZ2h0O1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFxuICAgIFwieVwiLFxuICAgIHRpdGxlSGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyAqIDAuNCArIGdldENvbmZpZygpLnN0YXRlLmRpdmlkZXJNYXJnaW4gKyBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0XG4gICkuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtZGVzY3JpcHRpb25cIik7XG4gIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgbGV0IGlzU2Vjb25kID0gdHJ1ZTtcbiAgc3RhdGVEZWYuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24oZGVzY3IpIHtcbiAgICBpZiAoIWlzRmlyc3QpIHtcbiAgICAgIGFkZFRzcGFuKGRlc2NyaXB0aW9uLCBkZXNjciwgaXNTZWNvbmQpO1xuICAgICAgaXNTZWNvbmQgPSBmYWxzZTtcbiAgICB9XG4gICAgaXNGaXJzdCA9IGZhbHNlO1xuICB9KTtcbiAgY29uc3QgZGVzY3JMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieTFcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyArIHRpdGxlSGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUuZGl2aWRlck1hcmdpbiAvIDIpLmF0dHIoXCJ5MlwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBnZXRDb25maWcoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luIC8gMikuYXR0cihcImNsYXNzXCIsIFwiZGVzY3ItZGl2aWRlclwiKTtcbiAgY29uc3QgZGVzY3JCb3ggPSBkZXNjcmlwdGlvbi5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGRlc2NyQm94LndpZHRoLCB0aXRsZUJveC53aWR0aCk7XG4gIGRlc2NyTGluZS5hdHRyKFwieDJcIiwgd2lkdGggKyAzICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG4gIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgd2lkdGggKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBkZXNjckJveC5oZWlnaHQgKyB0aXRsZUhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwicnhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucmFkaXVzKTtcbiAgcmV0dXJuIGc7XG59LCBcImRyYXdEZXNjclN0YXRlXCIpO1xudmFyIGFkZFRpdGxlQW5kQm94ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZywgc3RhdGVEZWYsIGFsdEJrZykgPT4ge1xuICBjb25zdCBwYWQgPSBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nO1xuICBjb25zdCBkYmxQYWQgPSAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZztcbiAgY29uc3Qgb3JnQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCBvcmdXaWR0aCA9IG9yZ0JveC53aWR0aDtcbiAgY29uc3Qgb3JnWCA9IG9yZ0JveC54O1xuICBjb25zdCB0aXRsZSA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKFwiZm9udC1zaXplXCIsIGdldENvbmZpZygpLnN0YXRlLmZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS10aXRsZVwiKS50ZXh0KHN0YXRlRGVmLmlkKTtcbiAgY29uc3QgdGl0bGVCb3ggPSB0aXRsZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB0aXRsZVdpZHRoID0gdGl0bGVCb3gud2lkdGggKyBkYmxQYWQ7XG4gIGxldCB3aWR0aCA9IE1hdGgubWF4KHRpdGxlV2lkdGgsIG9yZ1dpZHRoKTtcbiAgaWYgKHdpZHRoID09PSBvcmdXaWR0aCkge1xuICAgIHdpZHRoID0gd2lkdGggKyBkYmxQYWQ7XG4gIH1cbiAgbGV0IHN0YXJ0WDtcbiAgY29uc3QgZ3JhcGhCb3ggPSBnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGlmIChzdGF0ZURlZi5kb2MpIHtcbiAgfVxuICBzdGFydFggPSBvcmdYIC0gcGFkO1xuICBpZiAodGl0bGVXaWR0aCA+IG9yZ1dpZHRoKSB7XG4gICAgc3RhcnRYID0gKG9yZ1dpZHRoIC0gd2lkdGgpIC8gMiArIHBhZDtcbiAgfVxuICBpZiAoTWF0aC5hYnMob3JnWCAtIGdyYXBoQm94LngpIDwgcGFkICYmIHRpdGxlV2lkdGggPiBvcmdXaWR0aCkge1xuICAgIHN0YXJ0WCA9IG9yZ1ggLSAodGl0bGVXaWR0aCAtIG9yZ1dpZHRoKSAvIDI7XG4gIH1cbiAgY29uc3QgbGluZVkgPSAxIC0gZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodDtcbiAgZy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ4XCIsIHN0YXJ0WCkuYXR0cihcInlcIiwgbGluZVkpLmF0dHIoXCJjbGFzc1wiLCBhbHRCa2cgPyBcImFsdC1jb21wb3NpdFwiIDogXCJjb21wb3NpdFwiKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXG4gICAgXCJoZWlnaHRcIixcbiAgICBncmFwaEJveC5oZWlnaHQgKyBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUudGl0bGVTaGlmdCArIDFcbiAgKS5hdHRyKFwicnhcIiwgXCIwXCIpO1xuICB0aXRsZS5hdHRyKFwieFwiLCBzdGFydFggKyBwYWQpO1xuICBpZiAodGl0bGVXaWR0aCA8PSBvcmdXaWR0aCkge1xuICAgIHRpdGxlLmF0dHIoXCJ4XCIsIG9yZ1ggKyAod2lkdGggLSBkYmxQYWQpIC8gMiAtIHRpdGxlV2lkdGggLyAyICsgcGFkKTtcbiAgfVxuICBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgc3RhcnRYKS5hdHRyKFxuICAgIFwieVwiLFxuICAgIGdldENvbmZpZygpLnN0YXRlLnRpdGxlU2hpZnQgLSBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0IC0gZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZ1xuICApLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICogMykuYXR0cihcInJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnJhZGl1cyk7XG4gIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCBzdGFydFgpLmF0dHIoXG4gICAgXCJ5XCIsXG4gICAgZ2V0Q29uZmlnKCkuc3RhdGUudGl0bGVTaGlmdCAtIGdldENvbmZpZygpLnN0YXRlLnRleHRIZWlnaHQgLSBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nXG4gICkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGdyYXBoQm94LmhlaWdodCArIDMgKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cihcInJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnJhZGl1cyk7XG4gIHJldHVybiBnO1xufSwgXCJhZGRUaXRsZUFuZEJveFwiKTtcbnZhciBkcmF3RW5kU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChnKSA9PiB7XG4gIGcuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVuZC1zdGF0ZS1vdXRlclwiKS5hdHRyKFwiclwiLCBnZXRDb25maWcoKS5zdGF0ZS5zaXplVW5pdCArIGdldENvbmZpZygpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKFxuICAgIFwiY3hcIixcbiAgICBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQgKyBnZXRDb25maWcoKS5zdGF0ZS5taW5pUGFkZGluZ1xuICApLmF0dHIoXG4gICAgXCJjeVwiLFxuICAgIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgKyBnZXRDb25maWcoKS5zdGF0ZS5zaXplVW5pdCArIGdldENvbmZpZygpLnN0YXRlLm1pbmlQYWRkaW5nXG4gICk7XG4gIHJldHVybiBnLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlbmQtc3RhdGUtaW5uZXJcIikuYXR0cihcInJcIiwgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQgKyAyKS5hdHRyKFwiY3lcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyArIGdldENvbmZpZygpLnN0YXRlLnNpemVVbml0ICsgMik7XG59LCBcImRyYXdFbmRTdGF0ZVwiKTtcbnZhciBkcmF3Rm9ya0pvaW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGcsIHN0YXRlRGVmKSA9PiB7XG4gIGxldCB3aWR0aCA9IGdldENvbmZpZygpLnN0YXRlLmZvcmtXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGdldENvbmZpZygpLnN0YXRlLmZvcmtIZWlnaHQ7XG4gIGlmIChzdGF0ZURlZi5wYXJlbnRJZCkge1xuICAgIGxldCB0bXAgPSB3aWR0aDtcbiAgICB3aWR0aCA9IGhlaWdodDtcbiAgICBoZWlnaHQgPSB0bXA7XG4gIH1cbiAgcmV0dXJuIGcuYXBwZW5kKFwicmVjdFwiKS5zdHlsZShcInN0cm9rZVwiLCBcImJsYWNrXCIpLnN0eWxlKFwiZmlsbFwiLCBcImJsYWNrXCIpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJ5XCIsIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpO1xufSwgXCJkcmF3Rm9ya0pvaW5TdGF0ZVwiKTtcbnZhciBfZHJhd0xvbmdUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3RleHQsIHgsIHksIGcpID0+IHtcbiAgbGV0IHRleHRIZWlnaHQgPSAwO1xuICBjb25zdCB0ZXh0RWxlbSA9IGcuYXBwZW5kKFwidGV4dFwiKTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpO1xuICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJub3RlVGV4dFwiKTtcbiAgbGV0IHRleHQgPSBfdGV4dC5yZXBsYWNlKC9cXHJcXG4vZywgXCI8YnIvPlwiKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxuL2csIFwiPGJyLz5cIik7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChjb21tb25fZGVmYXVsdC5saW5lQnJlYWtSZWdleCk7XG4gIGxldCB0SGVpZ2h0ID0gMS4yNSAqIGdldENvbmZpZygpLnN0YXRlLm5vdGVNYXJnaW47XG4gIGZvciAoY29uc3QgbGluZTIgb2YgbGluZXMpIHtcbiAgICBjb25zdCB0eHQgPSBsaW5lMi50cmltKCk7XG4gICAgaWYgKHR4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gICAgICBzcGFuLnRleHQodHh0KTtcbiAgICAgIGlmICh0SGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHRleHRCb3VuZHMgPSBzcGFuLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIHRIZWlnaHQgKz0gdGV4dEJvdW5kcy5oZWlnaHQ7XG4gICAgICB9XG4gICAgICB0ZXh0SGVpZ2h0ICs9IHRIZWlnaHQ7XG4gICAgICBzcGFuLmF0dHIoXCJ4XCIsIHggKyBnZXRDb25maWcoKS5zdGF0ZS5ub3RlTWFyZ2luKTtcbiAgICAgIHNwYW4uYXR0cihcInlcIiwgeSArIHRleHRIZWlnaHQgKyAxLjI1ICogZ2V0Q29uZmlnKCkuc3RhdGUubm90ZU1hcmdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHRleHRXaWR0aDogdGV4dEVsZW0ubm9kZSgpLmdldEJCb3goKS53aWR0aCwgdGV4dEhlaWdodCB9O1xufSwgXCJfZHJhd0xvbmdUZXh0XCIpO1xudmFyIGRyYXdOb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgZykgPT4ge1xuICBnLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLW5vdGVcIik7XG4gIGNvbnN0IG5vdGUgPSBnLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG4gIGNvbnN0IHJlY3RFbGVtID0gZy5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dEhlaWdodCB9ID0gX2RyYXdMb25nVGV4dCh0ZXh0LCAwLCAwLCByZWN0RWxlbSk7XG4gIG5vdGUuYXR0cihcImhlaWdodFwiLCB0ZXh0SGVpZ2h0ICsgMiAqIGdldENvbmZpZygpLnN0YXRlLm5vdGVNYXJnaW4pO1xuICBub3RlLmF0dHIoXCJ3aWR0aFwiLCB0ZXh0V2lkdGggKyBnZXRDb25maWcoKS5zdGF0ZS5ub3RlTWFyZ2luICogMik7XG4gIHJldHVybiBub3RlO1xufSwgXCJkcmF3Tm90ZVwiKTtcbnZhciBkcmF3U3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHN0YXRlRGVmKSB7XG4gIGNvbnN0IGlkID0gc3RhdGVEZWYuaWQ7XG4gIGNvbnN0IHN0YXRlSW5mbyA9IHtcbiAgICBpZCxcbiAgICBsYWJlbDogc3RhdGVEZWYuaWQsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH07XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIikuYXR0cihcImlkXCIsIGlkKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZUdyb3VwXCIpO1xuICBpZiAoc3RhdGVEZWYudHlwZSA9PT0gXCJzdGFydFwiKSB7XG4gICAgZHJhd1N0YXJ0U3RhdGUoZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZW5kXCIpIHtcbiAgICBkcmF3RW5kU3RhdGUoZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZm9ya1wiIHx8IHN0YXRlRGVmLnR5cGUgPT09IFwiam9pblwiKSB7XG4gICAgZHJhd0ZvcmtKb2luU3RhdGUoZywgc3RhdGVEZWYpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcIm5vdGVcIikge1xuICAgIGRyYXdOb3RlKHN0YXRlRGVmLm5vdGUudGV4dCwgZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZGl2aWRlclwiKSB7XG4gICAgZHJhd0RpdmlkZXIoZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZGVmYXVsdFwiICYmIHN0YXRlRGVmLmRlc2NyaXB0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBkcmF3U2ltcGxlU3RhdGUoZywgc3RhdGVEZWYpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcImRlZmF1bHRcIiAmJiBzdGF0ZURlZi5kZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIGRyYXdEZXNjclN0YXRlKGcsIHN0YXRlRGVmKTtcbiAgfVxuICBjb25zdCBzdGF0ZUJveCA9IGcubm9kZSgpLmdldEJCb3goKTtcbiAgc3RhdGVJbmZvLndpZHRoID0gc3RhdGVCb3gud2lkdGggKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZztcbiAgc3RhdGVJbmZvLmhlaWdodCA9IHN0YXRlQm94LmhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nO1xuICBpZF9jYWNoZV9kZWZhdWx0LnNldChpZCwgc3RhdGVJbmZvKTtcbiAgcmV0dXJuIHN0YXRlSW5mbztcbn0sIFwiZHJhd1N0YXRlXCIpO1xudmFyIGVkZ2VDb3VudCA9IDA7XG52YXIgZHJhd0VkZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHBhdGgsIHJlbGF0aW9uKSB7XG4gIGNvbnN0IGdldFJlbGF0aW9uVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBzdGF0ZURiX2RlZmF1bHQucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOlxuICAgICAgICByZXR1cm4gXCJhZ2dyZWdhdGlvblwiO1xuICAgICAgY2FzZSBzdGF0ZURiX2RlZmF1bHQucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpcbiAgICAgICAgcmV0dXJuIFwiZXh0ZW5zaW9uXCI7XG4gICAgICBjYXNlIHN0YXRlRGJfZGVmYXVsdC5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046XG4gICAgICAgIHJldHVybiBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBjYXNlIHN0YXRlRGJfZGVmYXVsdC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpcbiAgICAgICAgcmV0dXJuIFwiZGVwZW5kZW5jeVwiO1xuICAgIH1cbiAgfSwgXCJnZXRSZWxhdGlvblR5cGVcIik7XG4gIHBhdGgucG9pbnRzID0gcGF0aC5wb2ludHMuZmlsdGVyKChwKSA9PiAhTnVtYmVyLmlzTmFOKHAueSkpO1xuICBjb25zdCBsaW5lRGF0YSA9IHBhdGgucG9pbnRzO1xuICBjb25zdCBsaW5lRnVuY3Rpb24gPSBsaW5lKCkueChmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIGQueDtcbiAgfSkueShmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIGQueTtcbiAgfSkuY3VydmUoY3VydmVCYXNpcyk7XG4gIGNvbnN0IHN2Z1BhdGggPSBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgbGluZUZ1bmN0aW9uKGxpbmVEYXRhKSkuYXR0cihcImlkXCIsIFwiZWRnZVwiICsgZWRnZUNvdW50KS5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFuc2l0aW9uXCIpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGdldENvbmZpZygpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUpIHtcbiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKC9nLCBcIlxcXFwoXCIpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCkvZywgXCJcXFxcKVwiKTtcbiAgfVxuICBzdmdQYXRoLmF0dHIoXG4gICAgXCJtYXJrZXItZW5kXCIsXG4gICAgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGdldFJlbGF0aW9uVHlwZShzdGF0ZURiX2RlZmF1bHQucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpICsgXCJFbmQpXCJcbiAgKTtcbiAgaWYgKHJlbGF0aW9uLnRpdGxlICE9PSB2b2lkIDApIHtcbiAgICBjb25zdCBsYWJlbCA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZUxhYmVsXCIpO1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gdXRpbHNfZGVmYXVsdC5jYWxjTGFiZWxQb3NpdGlvbihwYXRoLnBvaW50cyk7XG4gICAgY29uc3Qgcm93cyA9IGNvbW1vbl9kZWZhdWx0LmdldFJvd3MocmVsYXRpb24udGl0bGUpO1xuICAgIGxldCB0aXRsZUhlaWdodCA9IDA7XG4gICAgY29uc3QgdGl0bGVSb3dzID0gW107XG4gICAgbGV0IG1heFdpZHRoID0gMDtcbiAgICBsZXQgbWluWCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGl0bGUgPSBsYWJlbC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KHJvd3NbaV0pLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkgKyB0aXRsZUhlaWdodCk7XG4gICAgICBjb25zdCBib3VuZHNUbXAgPSB0aXRsZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgYm91bmRzVG1wLndpZHRoKTtcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBib3VuZHNUbXAueCk7XG4gICAgICBsb2cuaW5mbyhib3VuZHNUbXAueCwgeCwgeSArIHRpdGxlSGVpZ2h0KTtcbiAgICAgIGlmICh0aXRsZUhlaWdodCA9PT0gMCkge1xuICAgICAgICBjb25zdCB0aXRsZUJveCA9IHRpdGxlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIHRpdGxlSGVpZ2h0ID0gdGl0bGVCb3guaGVpZ2h0O1xuICAgICAgICBsb2cuaW5mbyhcIlRpdGxlIGhlaWdodFwiLCB0aXRsZUhlaWdodCwgeSk7XG4gICAgICB9XG4gICAgICB0aXRsZVJvd3MucHVzaCh0aXRsZSk7XG4gICAgfVxuICAgIGxldCBib3hIZWlnaHQgPSB0aXRsZUhlaWdodCAqIHJvd3MubGVuZ3RoO1xuICAgIGlmIChyb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGhlaWdodEFkaiA9IChyb3dzLmxlbmd0aCAtIDEpICogdGl0bGVIZWlnaHQgKiAwLjU7XG4gICAgICB0aXRsZVJvd3MuZm9yRWFjaCgodGl0bGUsIGkpID0+IHRpdGxlLmF0dHIoXCJ5XCIsIHkgKyBpICogdGl0bGVIZWlnaHQgLSBoZWlnaHRBZGopKTtcbiAgICAgIGJveEhlaWdodCA9IHRpdGxlSGVpZ2h0ICogcm93cy5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kcyA9IGxhYmVsLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgbGFiZWwuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJib3hcIikuYXR0cihcInhcIiwgeCAtIG1heFdpZHRoIC8gMiAtIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgLyAyKS5hdHRyKFwieVwiLCB5IC0gYm94SGVpZ2h0IC8gMiAtIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgLyAyIC0gMy41KS5hdHRyKFwid2lkdGhcIiwgbWF4V2lkdGggKyBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIGJveEhlaWdodCArIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpO1xuICAgIGxvZy5pbmZvKGJvdW5kcyk7XG4gIH1cbiAgZWRnZUNvdW50Kys7XG59LCBcImRyYXdFZGdlXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVSZW5kZXJlci5qc1xudmFyIGNvbmY7XG52YXIgdHJhbnNmb3JtYXRpb25Mb2cgPSB7fTtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbn0sIFwic2V0Q29uZlwiKTtcbnZhciBpbnNlcnRNYXJrZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZGVwZW5kZW5jeUVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uZiA9IGdldENvbmZpZygpLnN0YXRlO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgZGlhZ3JhbSBcIiArIHRleHQpO1xuICBjb25zdCBkaWFncmFtMiA9IHJvb3Quc2VsZWN0KGBbaWQ9JyR7aWR9J11gKTtcbiAgaW5zZXJ0TWFya2VycyhkaWFncmFtMik7XG4gIGNvbnN0IHJvb3REb2MgPSBkaWFnT2JqLmRiLmdldFJvb3REb2MoKTtcbiAgcmVuZGVyRG9jKHJvb3REb2MsIGRpYWdyYW0yLCB2b2lkIDAsIGZhbHNlLCByb290LCBkb2MsIGRpYWdPYmopO1xuICBjb25zdCBwYWRkaW5nID0gY29uZi5wYWRkaW5nO1xuICBjb25zdCBib3VuZHMgPSBkaWFncmFtMi5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IGJvdW5kcy53aWR0aCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gIGNvbnN0IHN2Z1dpZHRoID0gd2lkdGggKiAxLjc1O1xuICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHN2Z1dpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgZGlhZ3JhbTIuYXR0cihcbiAgICBcInZpZXdCb3hcIixcbiAgICBgJHtib3VuZHMueCAtIGNvbmYucGFkZGluZ30gICR7Ym91bmRzLnkgLSBjb25mLnBhZGRpbmd9IGAgKyB3aWR0aCArIFwiIFwiICsgaGVpZ2h0XG4gICk7XG59LCBcImRyYXdcIik7XG52YXIgZ2V0TGFiZWxXaWR0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQgPyB0ZXh0Lmxlbmd0aCAqIGNvbmYuZm9udFNpemVGYWN0b3IgOiAxO1xufSwgXCJnZXRMYWJlbFdpZHRoXCIpO1xudmFyIHJlbmRlckRvYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRvYywgZGlhZ3JhbTIsIHBhcmVudElkLCBhbHRCa2csIHJvb3QsIGRvbURvY3VtZW50LCBkaWFnT2JqKSA9PiB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBjb21wb3VuZDogdHJ1ZSxcbiAgICBtdWx0aWdyYXBoOiB0cnVlXG4gIH0pO1xuICBsZXQgaTtcbiAgbGV0IGVkZ2VGcmVlRG9jID0gdHJ1ZTtcbiAgZm9yIChpID0gMDsgaSA8IGRvYy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2NbaV0uc3RtdCA9PT0gXCJyZWxhdGlvblwiKSB7XG4gICAgICBlZGdlRnJlZURvYyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwYXJlbnRJZCkge1xuICAgIGdyYXBoLnNldEdyYXBoKHtcbiAgICAgIHJhbmtkaXI6IFwiTFJcIixcbiAgICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgICBjb21wb3VuZDogdHJ1ZSxcbiAgICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgICByYW5rZXI6IFwidGlnaHQtdHJlZVwiLFxuICAgICAgcmFua3NlcDogZWRnZUZyZWVEb2MgPyAxIDogY29uZi5lZGdlTGVuZ3RoRmFjdG9yLFxuICAgICAgbm9kZVNlcDogZWRnZUZyZWVEb2MgPyAxIDogNTAsXG4gICAgICBpc011bHRpR3JhcGg6IHRydWVcbiAgICAgIC8vIHJhbmtzZXA6IDUsXG4gICAgICAvLyBub2Rlc2VwOiAxXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZ3JhcGguc2V0R3JhcGgoe1xuICAgICAgcmFua2RpcjogXCJUQlwiLFxuICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgIGNvbXBvdW5kOiB0cnVlLFxuICAgICAgLy8gaXNDb21wb3VuZDogdHJ1ZSxcbiAgICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgICAvLyByYW5rZXI6ICdsb25nZXN0LXBhdGgnXG4gICAgICByYW5rc2VwOiBlZGdlRnJlZURvYyA/IDEgOiBjb25mLmVkZ2VMZW5ndGhGYWN0b3IsXG4gICAgICBub2RlU2VwOiBlZGdlRnJlZURvYyA/IDEgOiA1MCxcbiAgICAgIHJhbmtlcjogXCJ0aWdodC10cmVlXCIsXG4gICAgICAvLyByYW5rZXI6ICduZXR3b3JrLXNpbXBsZXgnXG4gICAgICBpc011bHRpR3JhcGg6IHRydWVcbiAgICB9KTtcbiAgfVxuICBncmFwaC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGRpYWdPYmouZGIuZXh0cmFjdChkb2MpO1xuICBjb25zdCBzdGF0ZXMgPSBkaWFnT2JqLmRiLmdldFN0YXRlcygpO1xuICBjb25zdCByZWxhdGlvbnMgPSBkaWFnT2JqLmRiLmdldFJlbGF0aW9ucygpO1xuICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKHN0YXRlcyk7XG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMyKSB7XG4gICAgY29uc3Qgc3RhdGVEZWYgPSBzdGF0ZXNba2V5XTtcbiAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgIHN0YXRlRGVmLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgfVxuICAgIGxldCBub2RlO1xuICAgIGlmIChzdGF0ZURlZi5kb2MpIHtcbiAgICAgIGxldCBzdWIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJpZFwiLCBzdGF0ZURlZi5pZCkuYXR0cihcImNsYXNzXCIsIFwic3RhdGVHcm91cFwiKTtcbiAgICAgIG5vZGUgPSByZW5kZXJEb2Moc3RhdGVEZWYuZG9jLCBzdWIsIHN0YXRlRGVmLmlkLCAhYWx0QmtnLCByb290LCBkb21Eb2N1bWVudCwgZGlhZ09iaik7XG4gICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgc3ViID0gYWRkVGl0bGVBbmRCb3goc3ViLCBzdGF0ZURlZiwgYWx0QmtnKTtcbiAgICAgICAgbGV0IGJveEJvdW5kcyA9IHN1Yi5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgICBub2RlLndpZHRoID0gYm94Qm91bmRzLndpZHRoO1xuICAgICAgICBub2RlLmhlaWdodCA9IGJveEJvdW5kcy5oZWlnaHQgKyBjb25mLnBhZGRpbmcgLyAyO1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbkxvZ1tzdGF0ZURlZi5pZF0gPSB7IHk6IGNvbmYuY29tcG9zaXRUaXRsZVNpemUgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBib3hCb3VuZHMgPSBzdWIubm9kZSgpLmdldEJCb3goKTtcbiAgICAgICAgbm9kZS53aWR0aCA9IGJveEJvdW5kcy53aWR0aDtcbiAgICAgICAgbm9kZS5oZWlnaHQgPSBib3hCb3VuZHMuaGVpZ2h0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gZHJhd1N0YXRlKGRpYWdyYW0yLCBzdGF0ZURlZiwgZ3JhcGgpO1xuICAgIH1cbiAgICBpZiAoc3RhdGVEZWYubm90ZSkge1xuICAgICAgY29uc3Qgbm90ZURlZiA9IHtcbiAgICAgICAgZGVzY3JpcHRpb25zOiBbXSxcbiAgICAgICAgaWQ6IHN0YXRlRGVmLmlkICsgXCItbm90ZVwiLFxuICAgICAgICBub3RlOiBzdGF0ZURlZi5ub3RlLFxuICAgICAgICB0eXBlOiBcIm5vdGVcIlxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5vdGUgPSBkcmF3U3RhdGUoZGlhZ3JhbTIsIG5vdGVEZWYsIGdyYXBoKTtcbiAgICAgIGlmIChzdGF0ZURlZi5ub3RlLnBvc2l0aW9uID09PSBcImxlZnQgb2ZcIikge1xuICAgICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQgKyBcIi1ub3RlXCIsIG5vdGUpO1xuICAgICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLmlkLCBub2RlKTtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLmlkICsgXCItbm90ZVwiLCBub3RlKTtcbiAgICAgIH1cbiAgICAgIGdyYXBoLnNldFBhcmVudChub2RlLmlkLCBub2RlLmlkICsgXCItZ3JvdXBcIik7XG4gICAgICBncmFwaC5zZXRQYXJlbnQobm9kZS5pZCArIFwiLW5vdGVcIiwgbm9kZS5pZCArIFwiLWdyb3VwXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIG5vZGUpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoXCJDb3VudD1cIiwgZ3JhcGgubm9kZUNvdW50KCksIGdyYXBoKTtcbiAgbGV0IGNudCA9IDA7XG4gIHJlbGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uKSB7XG4gICAgY250Kys7XG4gICAgbG9nLmRlYnVnKFwiU2V0dGluZyBlZGdlXCIsIHJlbGF0aW9uKTtcbiAgICBncmFwaC5zZXRFZGdlKFxuICAgICAgcmVsYXRpb24uaWQxLFxuICAgICAgcmVsYXRpb24uaWQyLFxuICAgICAge1xuICAgICAgICByZWxhdGlvbixcbiAgICAgICAgd2lkdGg6IGdldExhYmVsV2lkdGgocmVsYXRpb24udGl0bGUpLFxuICAgICAgICBoZWlnaHQ6IGNvbmYubGFiZWxIZWlnaHQgKiBjb21tb25fZGVmYXVsdC5nZXRSb3dzKHJlbGF0aW9uLnRpdGxlKS5sZW5ndGgsXG4gICAgICAgIGxhYmVscG9zOiBcImNcIlxuICAgICAgfSxcbiAgICAgIFwiaWRcIiArIGNudFxuICAgICk7XG4gIH0pO1xuICBkYWdyZUxheW91dChncmFwaCk7XG4gIGxvZy5kZWJ1ZyhcIkdyYXBoIGFmdGVyIGxheW91dFwiLCBncmFwaC5ub2RlcygpKTtcbiAgY29uc3Qgc3ZnRWxlbSA9IGRpYWdyYW0yLm5vZGUoKTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAodiAhPT0gdm9pZCAwICYmIGdyYXBoLm5vZGUodikgIT09IHZvaWQgMCkge1xuICAgICAgbG9nLndhcm4oXCJOb2RlIFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLm5vZGUodikpKTtcbiAgICAgIHJvb3Quc2VsZWN0KFwiI1wiICsgc3ZnRWxlbS5pZCArIFwiICNcIiArIHYpLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKSArIFwiLFwiICsgKGdyYXBoLm5vZGUodikueSArICh0cmFuc2Zvcm1hdGlvbkxvZ1t2XSA/IHRyYW5zZm9ybWF0aW9uTG9nW3ZdLnkgOiAwKSAtIGdyYXBoLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgICByb290LnNlbGVjdChcIiNcIiArIHN2Z0VsZW0uaWQgKyBcIiAjXCIgKyB2KS5hdHRyKFwiZGF0YS14LXNoaWZ0XCIsIGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKTtcbiAgICAgIGNvbnN0IGRpdmlkZXJzID0gZG9tRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiNcIiArIHN2Z0VsZW0uaWQgKyBcIiAjXCIgKyB2ICsgXCIgLmRpdmlkZXJcIik7XG4gICAgICBkaXZpZGVycy5mb3JFYWNoKChkaXZpZGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRpdmlkZXIucGFyZW50RWxlbWVudDtcbiAgICAgICAgbGV0IHBXaWR0aCA9IDA7XG4gICAgICAgIGxldCBwU2hpZnQgPSAwO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBwV2lkdGggPSBwYXJlbnQucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBTaGlmdCA9IHBhcnNlSW50KHBhcmVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXgtc2hpZnRcIiksIDEwKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHBTaGlmdCkpIHtcbiAgICAgICAgICAgIHBTaGlmdCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpdmlkZXIuc2V0QXR0cmlidXRlKFwieDFcIiwgMCAtIHBTaGlmdCArIDgpO1xuICAgICAgICBkaXZpZGVyLnNldEF0dHJpYnV0ZShcIngyXCIsIHBXaWR0aCAtIHBTaGlmdCAtIDgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vIE5vZGUgXCIgKyB2ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGgubm9kZSh2KSkpO1xuICAgIH1cbiAgfSk7XG4gIGxldCBzdGF0ZUJveCA9IHN2Z0VsZW0uZ2V0QkJveCgpO1xuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGlmIChlICE9PSB2b2lkIDAgJiYgZ3JhcGguZWRnZShlKSAhPT0gdm9pZCAwKSB7XG4gICAgICBsb2cuZGVidWcoXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5lZGdlKGUpKSk7XG4gICAgICBkcmF3RWRnZShkaWFncmFtMiwgZ3JhcGguZWRnZShlKSwgZ3JhcGguZWRnZShlKS5yZWxhdGlvbik7XG4gICAgfVxuICB9KTtcbiAgc3RhdGVCb3ggPSBzdmdFbGVtLmdldEJCb3goKTtcbiAgY29uc3Qgc3RhdGVJbmZvID0ge1xuICAgIGlkOiBwYXJlbnRJZCA/IHBhcmVudElkIDogXCJyb290XCIsXG4gICAgbGFiZWw6IHBhcmVudElkID8gcGFyZW50SWQgOiBcInJvb3RcIixcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfTtcbiAgc3RhdGVJbmZvLndpZHRoID0gc3RhdGVCb3gud2lkdGggKyAyICogY29uZi5wYWRkaW5nO1xuICBzdGF0ZUluZm8uaGVpZ2h0ID0gc3RhdGVCb3guaGVpZ2h0ICsgMiAqIGNvbmYucGFkZGluZztcbiAgbG9nLmRlYnVnKFwiRG9jIHJlbmRlcmVkXCIsIHN0YXRlSW5mbywgZ3JhcGgpO1xuICByZXR1cm4gc3RhdGVJbmZvO1xufSwgXCJyZW5kZXJEb2NcIik7XG52YXIgc3RhdGVSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBzZXRDb25mLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBzdGF0ZURpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IHN0YXRlRGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IHN0YXRlUmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuc3RhdGUpIHtcbiAgICAgIGNuZi5zdGF0ZSA9IHt9O1xuICAgIH1cbiAgICBjbmYuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIHN0YXRlRGJfZGVmYXVsdC5jbGVhcigpO1xuICB9LCBcImluaXRcIilcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBzdGF0ZURiX2RlZmF1bHQsXG4gIHN0YXRlRGlhZ3JhbV9kZWZhdWx0LFxuICBzdGF0ZVJlbmRlcmVyX3YzX3VuaWZpZWRfZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstTlFGN01KQU8ubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVdaQklBVFNLLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVJPS1lVVkNVLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEaWFncmFtLXYyLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBzdGF0ZURpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IHN0YXRlRGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IHN0YXRlUmVuZGVyZXJfdjNfdW5pZmllZF9kZWZhdWx0LFxuICBzdHlsZXM6IHN0eWxlc19kZWZhdWx0LFxuICBpbml0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbmYpID0+IHtcbiAgICBpZiAoIWNuZi5zdGF0ZSkge1xuICAgICAgY25mLnN0YXRlID0ge307XG4gICAgfVxuICAgIGNuZi5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlID0gY25mLmFycm93TWFya2VyQWJzb2x1dGU7XG4gICAgc3RhdGVEYl9kZWZhdWx0LmNsZWFyKCk7XG4gIH0sIFwiaW5pdFwiKVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZHJhd1JlY3QsXG4gIGRyYXdUZXh0LFxuICBnZXROb3RlUmVjdFxufSBmcm9tIFwiLi9jaHVuay1YVk9ZT00yQy5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvcGFyc2VyL2pvdXJuZXkuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFs2LCA4LCAxMCwgMTEsIDEyLCAxNCwgMTYsIDE3LCAxOF0sICRWMSA9IFsxLCA5XSwgJFYyID0gWzEsIDEwXSwgJFYzID0gWzEsIDExXSwgJFY0ID0gWzEsIDEyXSwgJFY1ID0gWzEsIDEzXSwgJFY2ID0gWzEsIDE0XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiam91cm5leVwiOiA0LCBcImRvY3VtZW50XCI6IDUsIFwiRU9GXCI6IDYsIFwibGluZVwiOiA3LCBcIlNQQUNFXCI6IDgsIFwic3RhdGVtZW50XCI6IDksIFwiTkVXTElORVwiOiAxMCwgXCJ0aXRsZVwiOiAxMSwgXCJhY2NfdGl0bGVcIjogMTIsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDEzLCBcImFjY19kZXNjclwiOiAxNCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMTUsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAxNiwgXCJzZWN0aW9uXCI6IDE3LCBcInRhc2tOYW1lXCI6IDE4LCBcInRhc2tEYXRhXCI6IDE5LCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJqb3VybmV5XCIsIDY6IFwiRU9GXCIsIDg6IFwiU1BBQ0VcIiwgMTA6IFwiTkVXTElORVwiLCAxMTogXCJ0aXRsZVwiLCAxMjogXCJhY2NfdGl0bGVcIiwgMTM6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDE0OiBcImFjY19kZXNjclwiLCAxNTogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMTY6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAxNzogXCJzZWN0aW9uXCIsIDE4OiBcInRhc2tOYW1lXCIsIDE5OiBcInRhc2tEYXRhXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFs1LCAwXSwgWzUsIDJdLCBbNywgMl0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMl1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cig2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuYWRkU2VjdGlvbigkJFskMF0uc3Vic3RyKDgpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHl5LmFkZFRhc2soJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSBcInRhc2tcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IFsxLCA2XSwgOTogNywgMTA6IFsxLCA4XSwgMTE6ICRWMSwgMTI6ICRWMiwgMTQ6ICRWMywgMTY6ICRWNCwgMTc6ICRWNSwgMTg6ICRWNiB9LCBvKCRWMCwgWzIsIDddLCB7IDE6IFsyLCAxXSB9KSwgbygkVjAsIFsyLCAzXSksIHsgOTogMTUsIDExOiAkVjEsIDEyOiAkVjIsIDE0OiAkVjMsIDE2OiAkVjQsIDE3OiAkVjUsIDE4OiAkVjYgfSwgbygkVjAsIFsyLCA1XSksIG8oJFYwLCBbMiwgNl0pLCBvKCRWMCwgWzIsIDhdKSwgeyAxMzogWzEsIDE2XSB9LCB7IDE1OiBbMSwgMTddIH0sIG8oJFYwLCBbMiwgMTFdKSwgbygkVjAsIFsyLCAxMl0pLCB7IDE5OiBbMSwgMThdIH0sIG8oJFYwLCBbMiwgNF0pLCBvKCRWMCwgWzIsIDldKSwgbygkVjAsIFsyLCAxMF0pLCBvKCRWMCwgWzIsIDEzXSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7fSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgcmV0dXJuIFwiOlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzolKD8hXFx7KVteXFxuXSopL2ksIC9eKD86W15cXH1dJSVbXlxcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OmpvdXJuZXlcXGIpL2ksIC9eKD86dGl0bGVcXHNbXiNcXG47XSspL2ksIC9eKD86YWNjVGl0bGVcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqXFx7XFxzKikvaSwgL14oPzpbXFx9XSkvaSwgL14oPzpbXlxcfV0qKS9pLCAvXig/OnNlY3Rpb25cXHNbXiM6XFxuO10rKS9pLCAvXig/OlteIzpcXG47XSspL2ksIC9eKD86OlteI1xcbjtdKykvaSwgL14oPzo6KS9pLCAvXig/OiQpL2ksIC9eKD86LikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzEyLCAxM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMTBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA5LCAxMSwgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBqb3VybmV5X2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvam91cm5leURiLmpzXG52YXIgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xudmFyIHNlY3Rpb25zID0gW107XG52YXIgdGFza3MgPSBbXTtcbnZhciByYXdUYXNrcyA9IFtdO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHNlY3Rpb25zLmxlbmd0aCA9IDA7XG4gIHRhc2tzLmxlbmd0aCA9IDA7XG4gIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbiAgcmF3VGFza3MubGVuZ3RoID0gMDtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgYWRkU2VjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIGN1cnJlbnRTZWN0aW9uID0gdHh0O1xuICBzZWN0aW9ucy5wdXNoKHR4dCk7XG59LCBcImFkZFNlY3Rpb25cIik7XG52YXIgZ2V0U2VjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc2VjdGlvbnM7XG59LCBcImdldFNlY3Rpb25zXCIpO1xudmFyIGdldFRhc2tzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgbGV0IGFsbEl0ZW1zUHJvY2Vzc2VkID0gY29tcGlsZVRhc2tzKCk7XG4gIGNvbnN0IG1heERlcHRoID0gMTAwO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICB3aGlsZSAoIWFsbEl0ZW1zUHJvY2Vzc2VkICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4RGVwdGgpIHtcbiAgICBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gIH1cbiAgdGFza3MucHVzaCguLi5yYXdUYXNrcyk7XG4gIHJldHVybiB0YXNrcztcbn0sIFwiZ2V0VGFza3NcIik7XG52YXIgdXBkYXRlQWN0b3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY29uc3QgdGVtcEFjdG9ycyA9IFtdO1xuICB0YXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7XG4gICAgaWYgKHRhc2sucGVvcGxlKSB7XG4gICAgICB0ZW1wQWN0b3JzLnB1c2goLi4udGFzay5wZW9wbGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHVuaXF1ZSA9IG5ldyBTZXQodGVtcEFjdG9ycyk7XG4gIHJldHVybiBbLi4udW5pcXVlXS5zb3J0KCk7XG59LCBcInVwZGF0ZUFjdG9yc1wiKTtcbnZhciBhZGRUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkZXNjciwgdGFza0RhdGEpIHtcbiAgY29uc3QgcGllY2VzID0gdGFza0RhdGEuc3Vic3RyKDEpLnNwbGl0KFwiOlwiKTtcbiAgbGV0IHNjb3JlID0gMDtcbiAgbGV0IHBlZXBzID0gW107XG4gIGlmIChwaWVjZXMubGVuZ3RoID09PSAxKSB7XG4gICAgc2NvcmUgPSBOdW1iZXIocGllY2VzWzBdKTtcbiAgICBwZWVwcyA9IFtdO1xuICB9IGVsc2Uge1xuICAgIHNjb3JlID0gTnVtYmVyKHBpZWNlc1swXSk7XG4gICAgcGVlcHMgPSBwaWVjZXNbMV0uc3BsaXQoXCIsXCIpO1xuICB9XG4gIGNvbnN0IHBlb3BsZUxpc3QgPSBwZWVwcy5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgY29uc3QgcmF3VGFzayA9IHtcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICBwZW9wbGU6IHBlb3BsZUxpc3QsXG4gICAgdGFzazogZGVzY3IsXG4gICAgc2NvcmVcbiAgfTtcbiAgcmF3VGFza3MucHVzaChyYXdUYXNrKTtcbn0sIFwiYWRkVGFza1wiKTtcbnZhciBhZGRUYXNrT3JnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkZXNjcikge1xuICBjb25zdCBuZXdUYXNrID0ge1xuICAgIHNlY3Rpb246IGN1cnJlbnRTZWN0aW9uLFxuICAgIHR5cGU6IGN1cnJlbnRTZWN0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcixcbiAgICB0YXNrOiBkZXNjcixcbiAgICBjbGFzc2VzOiBbXVxuICB9O1xuICB0YXNrcy5wdXNoKG5ld1Rhc2spO1xufSwgXCJhZGRUYXNrT3JnXCIpO1xudmFyIGNvbXBpbGVUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGNvbXBpbGVUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH0sIFwiY29tcGlsZVRhc2tcIik7XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn0sIFwiY29tcGlsZVRhc2tzXCIpO1xudmFyIGdldEFjdG9ycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB1cGRhdGVBY3RvcnMoKTtcbn0sIFwiZ2V0QWN0b3JzXCIpO1xudmFyIGpvdXJuZXlEYl9kZWZhdWx0ID0ge1xuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkuam91cm5leSwgXCJnZXRDb25maWdcIiksXG4gIGNsZWFyOiBjbGVhcjIsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgYWRkU2VjdGlvbixcbiAgZ2V0U2VjdGlvbnMsXG4gIGdldFRhc2tzLFxuICBhZGRUYXNrLFxuICBhZGRUYXNrT3JnLFxuICBnZXRBY3RvcnNcbn07XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYC5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50ZXh0Q29sb3J9O1xuICB9XG4gIC5tb3V0aCB7XG4gICAgc3Ryb2tlOiAjNjY2O1xuICB9XG5cbiAgbGluZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMudGV4dENvbG9yfVxuICB9XG5cbiAgLmxlZ2VuZCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cblxuICAubGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIzMzMztcbiAgfVxuICAubGFiZWwge1xuICAgIGNvbG9yOiAke29wdGlvbnMudGV4dENvbG9yfVxuICB9XG5cbiAgLmZhY2Uge1xuICAgICR7b3B0aW9ucy5mYWNlQ29sb3IgPyBgZmlsbDogJHtvcHRpb25zLmZhY2VDb2xvcn1gIDogXCJmaWxsOiAjRkZGOERDXCJ9O1xuICAgIHN0cm9rZTogIzk5OTtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmFycm93aGVhZENvbG9yfTtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gICAgcmVjdCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5jbHVzdGVyIHJlY3Qge1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgZGl2Lm1lcm1haWRUb29sdGlwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1heC13aWR0aDogMjAwcHg7XG4gICAgcGFkZGluZzogMnB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtvcHRpb25zLmJvcmRlcjJ9O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlMH1gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTF9YCA6IFwiXCJ9O1xuICB9XG4gIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGUyfWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlM31gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTR9YCA6IFwiXCJ9O1xuICB9XG4gIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGU1fWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlNn1gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTd9YCA6IFwiXCJ9O1xuICB9XG5cbiAgLmFjdG9yLTAge1xuICAgICR7b3B0aW9ucy5hY3RvcjAgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yMH1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTEge1xuICAgICR7b3B0aW9ucy5hY3RvcjEgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yMX1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTIge1xuICAgICR7b3B0aW9ucy5hY3RvcjIgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yMn1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTMge1xuICAgICR7b3B0aW9ucy5hY3RvcjMgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yM31gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTQge1xuICAgICR7b3B0aW9ucy5hY3RvcjQgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yNH1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTUge1xuICAgICR7b3B0aW9ucy5hY3RvcjUgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yNX1gIDogXCJcIn07XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdXNlci1qb3VybmV5L2pvdXJuZXlSZW5kZXJlci50c1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvc3ZnRHJhdy5qc1xuaW1wb3J0IHsgYXJjIGFzIGQzYXJjIH0gZnJvbSBcImQzXCI7XG52YXIgZHJhd1JlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCByZWN0RGF0YSkge1xuICByZXR1cm4gZHJhd1JlY3QoZWxlbSwgcmVjdERhdGEpO1xufSwgXCJkcmF3UmVjdFwiKTtcbnZhciBkcmF3RmFjZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCwgZmFjZURhdGEpIHtcbiAgY29uc3QgcmFkaXVzID0gMTU7XG4gIGNvbnN0IGNpcmNsZUVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgZmFjZURhdGEuY3gpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSkuYXR0cihcImNsYXNzXCIsIFwiZmFjZVwiKS5hdHRyKFwiclwiLCByYWRpdXMpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMikuYXR0cihcIm92ZXJmbG93XCIsIFwidmlzaWJsZVwiKTtcbiAgY29uc3QgZmFjZSA9IGVsZW1lbnQuYXBwZW5kKFwiZ1wiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4IC0gcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4ICsgcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZnVuY3Rpb24gc21pbGUoZmFjZTIpIHtcbiAgICBjb25zdCBhcmMgPSBkM2FyYygpLnN0YXJ0QW5nbGUoTWF0aC5QSSAvIDIpLmVuZEFuZ2xlKDMgKiAoTWF0aC5QSSAvIDIpKS5pbm5lclJhZGl1cyhyYWRpdXMgLyAyKS5vdXRlclJhZGl1cyhyYWRpdXMgLyAyLjIpO1xuICAgIGZhY2UyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcImRcIiwgYXJjKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgZmFjZURhdGEuY3ggKyBcIixcIiArIChmYWNlRGF0YS5jeSArIDIpICsgXCIpXCIpO1xuICB9XG4gIF9fbmFtZShzbWlsZSwgXCJzbWlsZVwiKTtcbiAgZnVuY3Rpb24gc2FkKGZhY2UyKSB7XG4gICAgY29uc3QgYXJjID0gZDNhcmMoKS5zdGFydEFuZ2xlKDMgKiBNYXRoLlBJIC8gMikuZW5kQW5nbGUoNSAqIChNYXRoLlBJIC8gMikpLmlubmVyUmFkaXVzKHJhZGl1cyAvIDIpLm91dGVyUmFkaXVzKHJhZGl1cyAvIDIuMik7XG4gICAgZmFjZTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwiZFwiLCBhcmMpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBmYWNlRGF0YS5jeCArIFwiLFwiICsgKGZhY2VEYXRhLmN5ICsgNykgKyBcIilcIik7XG4gIH1cbiAgX19uYW1lKHNhZCwgXCJzYWRcIik7XG4gIGZ1bmN0aW9uIGFtYml2YWxlbnQoZmFjZTIpIHtcbiAgICBmYWNlMi5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1vdXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgMikuYXR0cihcIngxXCIsIGZhY2VEYXRhLmN4IC0gNSkuYXR0cihcInkxXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcIngyXCIsIGZhY2VEYXRhLmN4ICsgNSkuYXR0cihcInkyXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgfVxuICBfX25hbWUoYW1iaXZhbGVudCwgXCJhbWJpdmFsZW50XCIpO1xuICBpZiAoZmFjZURhdGEuc2NvcmUgPiAzKSB7XG4gICAgc21pbGUoZmFjZSk7XG4gIH0gZWxzZSBpZiAoZmFjZURhdGEuc2NvcmUgPCAzKSB7XG4gICAgc2FkKGZhY2UpO1xuICB9IGVsc2Uge1xuICAgIGFtYml2YWxlbnQoZmFjZSk7XG4gIH1cbiAgcmV0dXJuIGNpcmNsZUVsZW1lbnQ7XG59LCBcImRyYXdGYWNlXCIpO1xudmFyIGRyYXdDaXJjbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW1lbnQsIGNpcmNsZURhdGEpIHtcbiAgY29uc3QgY2lyY2xlRWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjeFwiLCBjaXJjbGVEYXRhLmN4KTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY3lcIiwgY2lyY2xlRGF0YS5jeSk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImNsYXNzXCIsIFwiYWN0b3ItXCIgKyBjaXJjbGVEYXRhLnBvcyk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImZpbGxcIiwgY2lyY2xlRGF0YS5maWxsKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwic3Ryb2tlXCIsIGNpcmNsZURhdGEuc3Ryb2tlKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiclwiLCBjaXJjbGVEYXRhLnIpO1xuICBpZiAoY2lyY2xlRWxlbWVudC5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgY2lyY2xlRWxlbWVudC5jbGFzcyk7XG4gIH1cbiAgaWYgKGNpcmNsZURhdGEudGl0bGUgIT09IHZvaWQgMCkge1xuICAgIGNpcmNsZUVsZW1lbnQuYXBwZW5kKFwidGl0bGVcIikudGV4dChjaXJjbGVEYXRhLnRpdGxlKTtcbiAgfVxuICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbn0sIFwiZHJhd0NpcmNsZVwiKTtcbnZhciBkcmF3VGV4dDIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIHJldHVybiBkcmF3VGV4dChlbGVtLCB0ZXh0RGF0YSk7XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBfX25hbWUoZ2VuUG9pbnRzLCBcImdlblBvaW50c1wiKTtcbiAgY29uc3QgcG9seWdvbiA9IGVsZW0uYXBwZW5kKFwicG9seWdvblwiKTtcbiAgcG9seWdvbi5hdHRyKFwicG9pbnRzXCIsIGdlblBvaW50cyh0eHRPYmplY3QueCwgdHh0T2JqZWN0LnksIDUwLCAyMCwgNykpO1xuICBwb2x5Z29uLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsQm94XCIpO1xuICB0eHRPYmplY3QueSA9IHR4dE9iamVjdC55ICsgdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICB0eHRPYmplY3QueCA9IHR4dE9iamVjdC54ICsgMC41ICogdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICBkcmF3VGV4dDIoZWxlbSwgdHh0T2JqZWN0KTtcbn0sIFwiZHJhd0xhYmVsXCIpO1xudmFyIGRyYXdTZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBzZWN0aW9uLCBjb25mMikge1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gc2VjdGlvbi54O1xuICByZWN0LnkgPSBzZWN0aW9uLnk7XG4gIHJlY3QuZmlsbCA9IHNlY3Rpb24uZmlsbDtcbiAgcmVjdC53aWR0aCA9IGNvbmYyLndpZHRoICogc2VjdGlvbi50YXNrQ291bnQgKyAvLyB3aWR0aCBvZiB0aGUgdGFza3NcbiAgY29uZjIuZGlhZ3JhbU1hcmdpblggKiAoc2VjdGlvbi50YXNrQ291bnQgLSAxKTtcbiAgcmVjdC5oZWlnaHQgPSBjb25mMi5oZWlnaHQ7XG4gIHJlY3QuY2xhc3MgPSBcImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtXCIgKyBzZWN0aW9uLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdDIoZywgcmVjdCk7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIHNlY3Rpb24udGV4dCxcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtXCIgKyBzZWN0aW9uLm51bSB9LFxuICAgIGNvbmYyLFxuICAgIHNlY3Rpb24uY29sb3VyXG4gICk7XG59LCBcImRyYXdTZWN0aW9uXCIpO1xudmFyIHRhc2tDb3VudCA9IC0xO1xudmFyIGRyYXdUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCB0YXNrLCBjb25mMikge1xuICBjb25zdCBjZW50ZXIgPSB0YXNrLnggKyBjb25mMi53aWR0aCAvIDI7XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIHRhc2tDb3VudCsrO1xuICBjb25zdCBtYXhIZWlnaHQgPSAzMDAgKyA1ICogMzA7XG4gIGcuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiaWRcIiwgXCJ0YXNrXCIgKyB0YXNrQ291bnQpLmF0dHIoXCJ4MVwiLCBjZW50ZXIpLmF0dHIoXCJ5MVwiLCB0YXNrLnkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCBtYXhIZWlnaHQpLmF0dHIoXCJjbGFzc1wiLCBcInRhc2stbGluZVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMXB4XCIpLmF0dHIoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiNCAyXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjNjY2XCIpO1xuICBkcmF3RmFjZShnLCB7XG4gICAgY3g6IGNlbnRlcixcbiAgICBjeTogMzAwICsgKDUgLSB0YXNrLnNjb3JlKSAqIDMwLFxuICAgIHNjb3JlOiB0YXNrLnNjb3JlXG4gIH0pO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gdGFzay54O1xuICByZWN0LnkgPSB0YXNrLnk7XG4gIHJlY3QuZmlsbCA9IHRhc2suZmlsbDtcbiAgcmVjdC53aWR0aCA9IGNvbmYyLndpZHRoO1xuICByZWN0LmhlaWdodCA9IGNvbmYyLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwidGFzayB0YXNrLXR5cGUtXCIgKyB0YXNrLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdDIoZywgcmVjdCk7XG4gIGxldCB4UG9zID0gdGFzay54ICsgMTQ7XG4gIHRhc2sucGVvcGxlLmZvckVhY2goKHBlcnNvbikgPT4ge1xuICAgIGNvbnN0IGNvbG91ciA9IHRhc2suYWN0b3JzW3BlcnNvbl0uY29sb3I7XG4gICAgY29uc3QgY2lyY2xlID0ge1xuICAgICAgY3g6IHhQb3MsXG4gICAgICBjeTogdGFzay55LFxuICAgICAgcjogNyxcbiAgICAgIGZpbGw6IGNvbG91cixcbiAgICAgIHN0cm9rZTogXCIjMDAwXCIsXG4gICAgICB0aXRsZTogcGVyc29uLFxuICAgICAgcG9zOiB0YXNrLmFjdG9yc1twZXJzb25dLnBvc2l0aW9uXG4gICAgfTtcbiAgICBkcmF3Q2lyY2xlKGcsIGNpcmNsZSk7XG4gICAgeFBvcyArPSAxMDtcbiAgfSk7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIHRhc2sudGFzayxcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcInRhc2tcIiB9LFxuICAgIGNvbmYyLFxuICAgIHRhc2suY29sb3VyXG4gICk7XG59LCBcImRyYXdUYXNrXCIpO1xudmFyIGRyYXdCYWNrZ3JvdW5kUmVjdDIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIGJvdW5kczIpIHtcbiAgZHJhd0JhY2tncm91bmRSZWN0KGVsZW0sIGJvdW5kczIpO1xufSwgXCJkcmF3QmFja2dyb3VuZFJlY3RcIik7XG52YXIgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29sb3VyKSB7XG4gICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMiArIDUpLnN0eWxlKFwiZm9udC1jb2xvclwiLCBjb2xvdXIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5VGV4dCwgXCJieVRleHRcIik7XG4gIGZ1bmN0aW9uIGJ5VHNwYW4oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMiwgY29sb3VyKSB7XG4gICAgY29uc3QgeyB0YXNrRm9udFNpemUsIHRhc2tGb250RmFtaWx5IH0gPSBjb25mMjtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoLzxiclxccypcXC8/Pi9naSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZHkgPSBpICogdGFza0ZvbnRTaXplIC0gdGFza0ZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuYXR0cihcImZpbGxcIiwgY29sb3VyKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZm9udC1zaXplXCIsIHRhc2tGb250U2l6ZSkuc3R5bGUoXCJmb250LWZhbWlseVwiLCB0YXNrRm9udEZhbWlseSk7XG4gICAgICB0ZXh0LmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJkeVwiLCBkeSkudGV4dChsaW5lc1tpXSk7XG4gICAgICB0ZXh0LmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpO1xuICAgICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICAgIH1cbiAgfVxuICBfX25hbWUoYnlUc3BhbiwgXCJieVRzcGFuXCIpO1xuICBmdW5jdGlvbiBieUZvKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpIHtcbiAgICBjb25zdCBib2R5ID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IGJvZHkuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KS5hdHRyKFwicG9zaXRpb25cIiwgXCJmaXhlZFwiKTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIGJvZHksIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlGbywgXCJieUZvXCIpO1xuICBmdW5jdGlvbiBfc2V0VGV4dEF0dHJzKHRvVGV4dCwgZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgaWYgKGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgICB0b1RleHQuYXR0cihrZXksIGZyb21UZXh0QXR0cnNEaWN0W2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfX25hbWUoX3NldFRleHRBdHRycywgXCJfc2V0VGV4dEF0dHJzXCIpO1xuICByZXR1cm4gZnVuY3Rpb24oY29uZjIpIHtcbiAgICByZXR1cm4gY29uZjIudGV4dFBsYWNlbWVudCA9PT0gXCJmb1wiID8gYnlGbyA6IGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwib2xkXCIgPyBieVRleHQgOiBieVRzcGFuO1xuICB9O1xufSgpO1xudmFyIGluaXRHcmFwaGljcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZ3JhcGhpY3MpIHtcbiAgZ3JhcGhpY3MuYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYXJyb3doZWFkXCIpLmF0dHIoXCJyZWZYXCIsIDUpLmF0dHIoXCJyZWZZXCIsIDIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA2KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDQpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDAsMCBWIDQgTDYsMiBaXCIpO1xufSwgXCJpbml0R3JhcGhpY3NcIik7XG52YXIgc3ZnRHJhd19kZWZhdWx0ID0ge1xuICBkcmF3UmVjdDogZHJhd1JlY3QyLFxuICBkcmF3Q2lyY2xlLFxuICBkcmF3U2VjdGlvbixcbiAgZHJhd1RleHQ6IGRyYXdUZXh0MixcbiAgZHJhd0xhYmVsLFxuICBkcmF3VGFzayxcbiAgZHJhd0JhY2tncm91bmRSZWN0OiBkcmF3QmFja2dyb3VuZFJlY3QyLFxuICBpbml0R3JhcGhpY3Ncbn07XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvam91cm5leVJlbmRlcmVyLnRzXG52YXIgc2V0Q29uZiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY25mKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjbmYpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgY29uZltrZXldID0gY25mW2tleV07XG4gIH0pO1xufSwgXCJzZXRDb25mXCIpO1xudmFyIGFjdG9ycyA9IHt9O1xuZnVuY3Rpb24gZHJhd0FjdG9yTGVnZW5kKGRpYWdyYW0yKSB7XG4gIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuam91cm5leTtcbiAgbGV0IHlQb3MgPSA2MDtcbiAgT2JqZWN0LmtleXMoYWN0b3JzKS5mb3JFYWNoKChwZXJzb24pID0+IHtcbiAgICBjb25zdCBjb2xvdXIgPSBhY3RvcnNbcGVyc29uXS5jb2xvcjtcbiAgICBjb25zdCBjaXJjbGVEYXRhID0ge1xuICAgICAgY3g6IDIwLFxuICAgICAgY3k6IHlQb3MsXG4gICAgICByOiA3LFxuICAgICAgZmlsbDogY29sb3VyLFxuICAgICAgc3Ryb2tlOiBcIiMwMDBcIixcbiAgICAgIHBvczogYWN0b3JzW3BlcnNvbl0ucG9zaXRpb25cbiAgICB9O1xuICAgIHN2Z0RyYXdfZGVmYXVsdC5kcmF3Q2lyY2xlKGRpYWdyYW0yLCBjaXJjbGVEYXRhKTtcbiAgICBjb25zdCBsYWJlbERhdGEgPSB7XG4gICAgICB4OiA0MCxcbiAgICAgIHk6IHlQb3MgKyA3LFxuICAgICAgZmlsbDogXCIjNjY2XCIsXG4gICAgICB0ZXh0OiBwZXJzb24sXG4gICAgICB0ZXh0TWFyZ2luOiBjb25mMi5ib3hUZXh0TWFyZ2luIHwgNVxuICAgIH07XG4gICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdUZXh0KGRpYWdyYW0yLCBsYWJlbERhdGEpO1xuICAgIHlQb3MgKz0gMjA7XG4gIH0pO1xufVxuX19uYW1lKGRyYXdBY3RvckxlZ2VuZCwgXCJkcmF3QWN0b3JMZWdlbmRcIik7XG52YXIgY29uZiA9IGdldENvbmZpZygpLmpvdXJuZXk7XG52YXIgTEVGVF9NQVJHSU4gPSBjb25mLmxlZnRNYXJnaW47XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgaWQsIHZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5qb3VybmV5O1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgYm91bmRzLmluaXQoKTtcbiAgY29uc3QgZGlhZ3JhbTIgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgc3ZnRHJhd19kZWZhdWx0LmluaXRHcmFwaGljcyhkaWFncmFtMik7XG4gIGNvbnN0IHRhc2tzMiA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgY29uc3QgdGl0bGUgPSBkaWFnT2JqLmRiLmdldERpYWdyYW1UaXRsZSgpO1xuICBjb25zdCBhY3Rvck5hbWVzID0gZGlhZ09iai5kYi5nZXRBY3RvcnMoKTtcbiAgZm9yIChjb25zdCBtZW1iZXIgaW4gYWN0b3JzKSB7XG4gICAgZGVsZXRlIGFjdG9yc1ttZW1iZXJdO1xuICB9XG4gIGxldCBhY3RvclBvcyA9IDA7XG4gIGFjdG9yTmFtZXMuZm9yRWFjaCgoYWN0b3JOYW1lKSA9PiB7XG4gICAgYWN0b3JzW2FjdG9yTmFtZV0gPSB7XG4gICAgICBjb2xvcjogY29uZjIuYWN0b3JDb2xvdXJzW2FjdG9yUG9zICUgY29uZjIuYWN0b3JDb2xvdXJzLmxlbmd0aF0sXG4gICAgICBwb3NpdGlvbjogYWN0b3JQb3NcbiAgICB9O1xuICAgIGFjdG9yUG9zKys7XG4gIH0pO1xuICBkcmF3QWN0b3JMZWdlbmQoZGlhZ3JhbTIpO1xuICBib3VuZHMuaW5zZXJ0KDAsIDAsIExFRlRfTUFSR0lOLCBPYmplY3Qua2V5cyhhY3RvcnMpLmxlbmd0aCAqIDUwKTtcbiAgZHJhd1Rhc2tzKGRpYWdyYW0yLCB0YXNrczIsIDApO1xuICBjb25zdCBib3ggPSBib3VuZHMuZ2V0Qm91bmRzKCk7XG4gIGlmICh0aXRsZSkge1xuICAgIGRpYWdyYW0yLmFwcGVuZChcInRleHRcIikudGV4dCh0aXRsZSkuYXR0cihcInhcIiwgTEVGVF9NQVJHSU4pLmF0dHIoXCJmb250LXNpemVcIiwgXCI0ZXhcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKS5hdHRyKFwieVwiLCAyNSk7XG4gIH1cbiAgY29uc3QgaGVpZ2h0ID0gYm94LnN0b3B5IC0gYm94LnN0YXJ0eSArIDIgKiBjb25mMi5kaWFncmFtTWFyZ2luWTtcbiAgY29uc3Qgd2lkdGggPSBMRUZUX01BUkdJTiArIGJveC5zdG9weCArIDIgKiBjb25mMi5kaWFncmFtTWFyZ2luWDtcbiAgY29uZmlndXJlU3ZnU2l6ZShkaWFncmFtMiwgaGVpZ2h0LCB3aWR0aCwgY29uZjIudXNlTWF4V2lkdGgpO1xuICBkaWFncmFtMi5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBMRUZUX01BUkdJTikuYXR0cihcInkxXCIsIGNvbmYyLmhlaWdodCAqIDQpLmF0dHIoXCJ4MlwiLCB3aWR0aCAtIExFRlRfTUFSR0lOIC0gNCkuYXR0cihcInkyXCIsIGNvbmYyLmhlaWdodCAqIDQpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgNCkuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKCNhcnJvd2hlYWQpXCIpO1xuICBjb25zdCBleHRyYVZlcnRGb3JUaXRsZSA9IHRpdGxlID8gNzAgOiAwO1xuICBkaWFncmFtMi5hdHRyKFwidmlld0JveFwiLCBgJHtib3guc3RhcnR4fSAtMjUgJHt3aWR0aH0gJHtoZWlnaHQgKyBleHRyYVZlcnRGb3JUaXRsZX1gKTtcbiAgZGlhZ3JhbTIuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWluWU1pbiBtZWV0XCIpO1xuICBkaWFncmFtMi5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCArIGV4dHJhVmVydEZvclRpdGxlICsgMjUpO1xufSwgXCJkcmF3XCIpO1xudmFyIGJvdW5kcyA9IHtcbiAgZGF0YToge1xuICAgIHN0YXJ0eDogdm9pZCAwLFxuICAgIHN0b3B4OiB2b2lkIDAsXG4gICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgc3RvcHk6IHZvaWQgMFxuICB9LFxuICB2ZXJ0aWNhbFBvczogMCxcbiAgc2VxdWVuY2VJdGVtczogW10sXG4gIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXF1ZW5jZUl0ZW1zID0gW107XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwXG4gICAgfTtcbiAgICB0aGlzLnZlcnRpY2FsUG9zID0gMDtcbiAgfSwgXCJpbml0XCIpLFxuICB1cGRhdGVWYWw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqLCBrZXksIHZhbCwgZnVuKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB2b2lkIDApIHtcbiAgICAgIG9ialtrZXldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IGZ1bih2YWwsIG9ialtrZXldKTtcbiAgICB9XG4gIH0sIFwidXBkYXRlVmFsXCIpLFxuICB1cGRhdGVCb3VuZHM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3RhcnR4LCBzdGFydHksIHN0b3B4LCBzdG9weSkge1xuICAgIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuam91cm5leTtcbiAgICBjb25zdCBfc2VsZiA9IHRoaXM7XG4gICAgbGV0IGNudCA9IDA7XG4gICAgZnVuY3Rpb24gdXBkYXRlRm4odHlwZSkge1xuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdXBkYXRlSXRlbUJvdW5kcyhpdGVtKSB7XG4gICAgICAgIGNudCsrO1xuICAgICAgICBjb25zdCBuID0gX3NlbGYuc2VxdWVuY2VJdGVtcy5sZW5ndGggLSBjbnQgKyAxO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdGFydHlcIiwgc3RhcnR5IC0gbiAqIGNvbmYyLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weVwiLCBzdG9weSArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgX3NlbGYudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBzdGFydHggLSBuICogY29uZjIuYm94TWFyZ2luLCBNYXRoLm1pbik7XG4gICAgICAgIF9zZWxmLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBzdG9weCArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgaWYgKCEodHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weFwiLCBzdG9weCArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIHN0YXJ0eSAtIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgc3RvcHkgKyBuICogY29uZjIuYm94TWFyZ2luLCBNYXRoLm1heCk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwidXBkYXRlSXRlbUJvdW5kc1wiKTtcbiAgICB9XG4gICAgX19uYW1lKHVwZGF0ZUZuLCBcInVwZGF0ZUZuXCIpO1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKHVwZGF0ZUZuKCkpO1xuICB9LCBcInVwZGF0ZUJvdW5kc1wiKSxcbiAgaW5zZXJ0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICBjb25zdCBfc3RhcnR4ID0gTWF0aC5taW4oc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0b3B4ID0gTWF0aC5tYXgoc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0YXJ0eSA9IE1hdGgubWluKHN0YXJ0eSwgc3RvcHkpO1xuICAgIGNvbnN0IF9zdG9weSA9IE1hdGgubWF4KHN0YXJ0eSwgc3RvcHkpO1xuICAgIHRoaXMudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBfc3RhcnR4LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weVwiLCBfc3RvcHksIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZUJvdW5kcyhfc3RhcnR4LCBfc3RhcnR5LCBfc3RvcHgsIF9zdG9weSk7XG4gIH0sIFwiaW5zZXJ0XCIpLFxuICBidW1wVmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYnVtcCkge1xuICAgIHRoaXMudmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zICsgYnVtcDtcbiAgICB0aGlzLmRhdGEuc3RvcHkgPSB0aGlzLnZlcnRpY2FsUG9zO1xuICB9LCBcImJ1bXBWZXJ0aWNhbFBvc1wiKSxcbiAgZ2V0VmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxQb3M7XG4gIH0sIFwiZ2V0VmVydGljYWxQb3NcIiksXG4gIGdldEJvdW5kczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9LCBcImdldEJvdW5kc1wiKVxufTtcbnZhciBmaWxscyA9IGNvbmYuc2VjdGlvbkZpbGxzO1xudmFyIHRleHRDb2xvdXJzID0gY29uZi5zZWN0aW9uQ29sb3VycztcbnZhciBkcmF3VGFza3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRpYWdyYW0yLCB0YXNrczIsIHZlcnRpY2FsUG9zKSB7XG4gIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuam91cm5leTtcbiAgbGV0IGxhc3RTZWN0aW9uID0gXCJcIjtcbiAgY29uc3Qgc2VjdGlvblZIZWlnaHQgPSBjb25mMi5oZWlnaHQgKiAyICsgY29uZjIuZGlhZ3JhbU1hcmdpblk7XG4gIGNvbnN0IHRhc2tQb3MgPSB2ZXJ0aWNhbFBvcyArIHNlY3Rpb25WSGVpZ2h0O1xuICBsZXQgc2VjdGlvbk51bWJlciA9IDA7XG4gIGxldCBmaWxsID0gXCIjQ0NDXCI7XG4gIGxldCBjb2xvdXIgPSBcImJsYWNrXCI7XG4gIGxldCBudW0gPSAwO1xuICBmb3IgKGNvbnN0IFtpLCB0YXNrXSBvZiB0YXNrczIuZW50cmllcygpKSB7XG4gICAgaWYgKGxhc3RTZWN0aW9uICE9PSB0YXNrLnNlY3Rpb24pIHtcbiAgICAgIGZpbGwgPSBmaWxsc1tzZWN0aW9uTnVtYmVyICUgZmlsbHMubGVuZ3RoXTtcbiAgICAgIG51bSA9IHNlY3Rpb25OdW1iZXIgJSBmaWxscy5sZW5ndGg7XG4gICAgICBjb2xvdXIgPSB0ZXh0Q29sb3Vyc1tzZWN0aW9uTnVtYmVyICUgdGV4dENvbG91cnMubGVuZ3RoXTtcbiAgICAgIGxldCB0YXNrSW5TZWN0aW9uQ291bnQgPSAwO1xuICAgICAgY29uc3QgY3VycmVudFNlY3Rpb24yID0gdGFzay5zZWN0aW9uO1xuICAgICAgZm9yIChsZXQgdGFza0luZGV4ID0gaTsgdGFza0luZGV4IDwgdGFza3MyLmxlbmd0aDsgdGFza0luZGV4KyspIHtcbiAgICAgICAgaWYgKHRhc2tzMlt0YXNrSW5kZXhdLnNlY3Rpb24gPT0gY3VycmVudFNlY3Rpb24yKSB7XG4gICAgICAgICAgdGFza0luU2VjdGlvbkNvdW50ID0gdGFza0luU2VjdGlvbkNvdW50ICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VjdGlvbiA9IHtcbiAgICAgICAgeDogaSAqIGNvbmYyLnRhc2tNYXJnaW4gKyBpICogY29uZjIud2lkdGggKyBMRUZUX01BUkdJTixcbiAgICAgICAgeTogNTAsXG4gICAgICAgIHRleHQ6IHRhc2suc2VjdGlvbixcbiAgICAgICAgZmlsbCxcbiAgICAgICAgbnVtLFxuICAgICAgICBjb2xvdXIsXG4gICAgICAgIHRhc2tDb3VudDogdGFza0luU2VjdGlvbkNvdW50XG4gICAgICB9O1xuICAgICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdTZWN0aW9uKGRpYWdyYW0yLCBzZWN0aW9uLCBjb25mMik7XG4gICAgICBsYXN0U2VjdGlvbiA9IHRhc2suc2VjdGlvbjtcbiAgICAgIHNlY3Rpb25OdW1iZXIrKztcbiAgICB9XG4gICAgY29uc3QgdGFza0FjdG9ycyA9IHRhc2sucGVvcGxlLnJlZHVjZSgoYWNjLCBhY3Rvck5hbWUpID0+IHtcbiAgICAgIGlmIChhY3RvcnNbYWN0b3JOYW1lXSkge1xuICAgICAgICBhY2NbYWN0b3JOYW1lXSA9IGFjdG9yc1thY3Rvck5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgdGFzay54ID0gaSAqIGNvbmYyLnRhc2tNYXJnaW4gKyBpICogY29uZjIud2lkdGggKyBMRUZUX01BUkdJTjtcbiAgICB0YXNrLnkgPSB0YXNrUG9zO1xuICAgIHRhc2sud2lkdGggPSBjb25mMi5kaWFncmFtTWFyZ2luWDtcbiAgICB0YXNrLmhlaWdodCA9IGNvbmYyLmRpYWdyYW1NYXJnaW5ZO1xuICAgIHRhc2suY29sb3VyID0gY29sb3VyO1xuICAgIHRhc2suZmlsbCA9IGZpbGw7XG4gICAgdGFzay5udW0gPSBudW07XG4gICAgdGFzay5hY3RvcnMgPSB0YXNrQWN0b3JzO1xuICAgIHN2Z0RyYXdfZGVmYXVsdC5kcmF3VGFzayhkaWFncmFtMiwgdGFzaywgY29uZjIpO1xuICAgIGJvdW5kcy5pbnNlcnQodGFzay54LCB0YXNrLnksIHRhc2sueCArIHRhc2sud2lkdGggKyBjb25mMi50YXNrTWFyZ2luLCAzMDAgKyA1ICogMzApO1xuICB9XG59LCBcImRyYXdUYXNrc1wiKTtcbnZhciBqb3VybmV5UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgc2V0Q29uZixcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3VzZXItam91cm5leS9qb3VybmV5RGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogam91cm5leV9kZWZhdWx0LFxuICBkYjogam91cm5leURiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBqb3VybmV5UmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gICAgam91cm5leVJlbmRlcmVyX2RlZmF1bHQuc2V0Q29uZihjbmYuam91cm5leSk7XG4gICAgam91cm5leURiX2RlZmF1bHQuY2xlYXIoKTtcbiAgfSwgXCJpbml0XCIpXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19leHBvcnQsXG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbW1vbkRiX2V4cG9ydHMsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2csXG4gIHNldHVwR3JhcGhWaWV3Ym94XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvcGFyc2VyL3RpbWVsaW5lLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbNiwgOCwgMTAsIDExLCAxMiwgMTQsIDE2LCAxNywgMjAsIDIxXSwgJFYxID0gWzEsIDldLCAkVjIgPSBbMSwgMTBdLCAkVjMgPSBbMSwgMTFdLCAkVjQgPSBbMSwgMTJdLCAkVjUgPSBbMSwgMTNdLCAkVjYgPSBbMSwgMTZdLCAkVjcgPSBbMSwgMTddO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LCBcInRyYWNlXCIpLFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJ0aW1lbGluZVwiOiA0LCBcImRvY3VtZW50XCI6IDUsIFwiRU9GXCI6IDYsIFwibGluZVwiOiA3LCBcIlNQQUNFXCI6IDgsIFwic3RhdGVtZW50XCI6IDksIFwiTkVXTElORVwiOiAxMCwgXCJ0aXRsZVwiOiAxMSwgXCJhY2NfdGl0bGVcIjogMTIsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDEzLCBcImFjY19kZXNjclwiOiAxNCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMTUsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAxNiwgXCJzZWN0aW9uXCI6IDE3LCBcInBlcmlvZF9zdGF0ZW1lbnRcIjogMTgsIFwiZXZlbnRfc3RhdGVtZW50XCI6IDE5LCBcInBlcmlvZFwiOiAyMCwgXCJldmVudFwiOiAyMSwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwidGltZWxpbmVcIiwgNjogXCJFT0ZcIiwgODogXCJTUEFDRVwiLCAxMDogXCJORVdMSU5FXCIsIDExOiBcInRpdGxlXCIsIDEyOiBcImFjY190aXRsZVwiLCAxMzogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMTQ6IFwiYWNjX2Rlc2NyXCIsIDE1OiBcImFjY19kZXNjcl92YWx1ZVwiLCAxNjogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDE3OiBcInNlY3Rpb25cIiwgMjA6IFwicGVyaW9kXCIsIDIxOiBcImV2ZW50XCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFs1LCAwXSwgWzUsIDJdLCBbNywgMl0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzE4LCAxXSwgWzE5LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0RGlhZ3JhbVRpdGxlKCQkWyQwXS5zdWJzdHIoNikpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoNik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgeXkuYWRkVGFzaygkJFskMF0sIDAsIFwiXCIpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICB5eS5hZGRFdmVudCgkJFskMF0uc3Vic3RyKDIpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IFsxLCAyXSB9LCB7IDE6IFszXSB9LCBvKCRWMCwgWzIsIDJdLCB7IDU6IDMgfSksIHsgNjogWzEsIDRdLCA3OiA1LCA4OiBbMSwgNl0sIDk6IDcsIDEwOiBbMSwgOF0sIDExOiAkVjEsIDEyOiAkVjIsIDE0OiAkVjMsIDE2OiAkVjQsIDE3OiAkVjUsIDE4OiAxNCwgMTk6IDE1LCAyMDogJFY2LCAyMTogJFY3IH0sIG8oJFYwLCBbMiwgN10sIHsgMTogWzIsIDFdIH0pLCBvKCRWMCwgWzIsIDNdKSwgeyA5OiAxOCwgMTE6ICRWMSwgMTI6ICRWMiwgMTQ6ICRWMywgMTY6ICRWNCwgMTc6ICRWNSwgMTg6IDE0LCAxOTogMTUsIDIwOiAkVjYsIDIxOiAkVjcgfSwgbygkVjAsIFsyLCA1XSksIG8oJFYwLCBbMiwgNl0pLCBvKCRWMCwgWzIsIDhdKSwgeyAxMzogWzEsIDE5XSB9LCB7IDE1OiBbMSwgMjBdIH0sIG8oJFYwLCBbMiwgMTFdKSwgbygkVjAsIFsyLCAxMl0pLCBvKCRWMCwgWzIsIDEzXSksIG8oJFYwLCBbMiwgMTRdKSwgbygkVjAsIFsyLCAxNV0pLCBvKCRWMCwgWzIsIDE2XSksIG8oJFYwLCBbMiwgNF0pLCBvKCRWMCwgWzIsIDldKSwgbygkVjAsIFsyLCAxMF0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczoge30sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiAxMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIDExO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gMjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzolKD8hXFx7KVteXFxuXSopL2ksIC9eKD86W15cXH1dJSVbXlxcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OnRpbWVsaW5lXFxiKS9pLCAvXig/OnRpdGxlXFxzW15cXG5dKykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86c2VjdGlvblxcc1teOlxcbl0rKS9pLCAvXig/OjpcXHNbXjpcXG5dKykvaSwgL14oPzpbXiM6XFxuXSspL2ksIC9eKD86JCkvaSwgL14oPzouKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTIsIDEzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFsxMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDksIDExLCAxNCwgMTUsIDE2LCAxNywgMThdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgdGltZWxpbmVfZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL3RpbWVsaW5lL3RpbWVsaW5lRGIuanNcbnZhciB0aW1lbGluZURiX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHRpbWVsaW5lRGJfZXhwb3J0cywge1xuICBhZGRFdmVudDogKCkgPT4gYWRkRXZlbnQsXG4gIGFkZFNlY3Rpb246ICgpID0+IGFkZFNlY3Rpb24sXG4gIGFkZFRhc2s6ICgpID0+IGFkZFRhc2ssXG4gIGFkZFRhc2tPcmc6ICgpID0+IGFkZFRhc2tPcmcsXG4gIGNsZWFyOiAoKSA9PiBjbGVhcjIsXG4gIGRlZmF1bHQ6ICgpID0+IHRpbWVsaW5lRGJfZGVmYXVsdCxcbiAgZ2V0Q29tbW9uRGI6ICgpID0+IGdldENvbW1vbkRiLFxuICBnZXRTZWN0aW9uczogKCkgPT4gZ2V0U2VjdGlvbnMsXG4gIGdldFRhc2tzOiAoKSA9PiBnZXRUYXNrc1xufSk7XG52YXIgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xudmFyIGN1cnJlbnRUYXNrSWQgPSAwO1xudmFyIHNlY3Rpb25zID0gW107XG52YXIgdGFza3MgPSBbXTtcbnZhciByYXdUYXNrcyA9IFtdO1xudmFyIGdldENvbW1vbkRiID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBjb21tb25EYl9leHBvcnRzLCBcImdldENvbW1vbkRiXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHNlY3Rpb25zLmxlbmd0aCA9IDA7XG4gIHRhc2tzLmxlbmd0aCA9IDA7XG4gIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbiAgcmF3VGFza3MubGVuZ3RoID0gMDtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgYWRkU2VjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIGN1cnJlbnRTZWN0aW9uID0gdHh0O1xuICBzZWN0aW9ucy5wdXNoKHR4dCk7XG59LCBcImFkZFNlY3Rpb25cIik7XG52YXIgZ2V0U2VjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc2VjdGlvbnM7XG59LCBcImdldFNlY3Rpb25zXCIpO1xudmFyIGdldFRhc2tzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgbGV0IGFsbEl0ZW1zUHJvY2Vzc2VkID0gY29tcGlsZVRhc2tzKCk7XG4gIGNvbnN0IG1heERlcHRoID0gMTAwO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICB3aGlsZSAoIWFsbEl0ZW1zUHJvY2Vzc2VkICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4RGVwdGgpIHtcbiAgICBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gIH1cbiAgdGFza3MucHVzaCguLi5yYXdUYXNrcyk7XG4gIHJldHVybiB0YXNrcztcbn0sIFwiZ2V0VGFza3NcIik7XG52YXIgYWRkVGFzayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGVyaW9kLCBsZW5ndGgsIGV2ZW50KSB7XG4gIGNvbnN0IHJhd1Rhc2sgPSB7XG4gICAgaWQ6IGN1cnJlbnRUYXNrSWQrKyxcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICB0YXNrOiBwZXJpb2QsXG4gICAgc2NvcmU6IGxlbmd0aCA/IGxlbmd0aCA6IDAsXG4gICAgLy9pZiBldmVudCBpcyBkZWZpbmVkLCB0aGVuIGFkZCBpdCB0aGUgZXZlbnRzIGFycmF5XG4gICAgZXZlbnRzOiBldmVudCA/IFtldmVudF0gOiBbXVxuICB9O1xuICByYXdUYXNrcy5wdXNoKHJhd1Rhc2spO1xufSwgXCJhZGRUYXNrXCIpO1xudmFyIGFkZEV2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihldmVudCkge1xuICBjb25zdCBjdXJyZW50VGFzayA9IHJhd1Rhc2tzLmZpbmQoKHRhc2spID0+IHRhc2suaWQgPT09IGN1cnJlbnRUYXNrSWQgLSAxKTtcbiAgY3VycmVudFRhc2suZXZlbnRzLnB1c2goZXZlbnQpO1xufSwgXCJhZGRFdmVudFwiKTtcbnZhciBhZGRUYXNrT3JnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkZXNjcikge1xuICBjb25zdCBuZXdUYXNrID0ge1xuICAgIHNlY3Rpb246IGN1cnJlbnRTZWN0aW9uLFxuICAgIHR5cGU6IGN1cnJlbnRTZWN0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcixcbiAgICB0YXNrOiBkZXNjcixcbiAgICBjbGFzc2VzOiBbXVxuICB9O1xuICB0YXNrcy5wdXNoKG5ld1Rhc2spO1xufSwgXCJhZGRUYXNrT3JnXCIpO1xudmFyIGNvbXBpbGVUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGNvbXBpbGVUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH0sIFwiY29tcGlsZVRhc2tcIik7XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn0sIFwiY29tcGlsZVRhc2tzXCIpO1xudmFyIHRpbWVsaW5lRGJfZGVmYXVsdCA9IHtcbiAgY2xlYXI6IGNsZWFyMixcbiAgZ2V0Q29tbW9uRGIsXG4gIGFkZFNlY3Rpb24sXG4gIGdldFNlY3Rpb25zLFxuICBnZXRUYXNrcyxcbiAgYWRkVGFzayxcbiAgYWRkVGFza09yZyxcbiAgYWRkRXZlbnRcbn07XG5cbi8vIHNyYy9kaWFncmFtcy90aW1lbGluZS90aW1lbGluZVJlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgYXMgc2VsZWN0MiB9IGZyb20gXCJkM1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvc3ZnRHJhdy5qc1xuaW1wb3J0IHsgYXJjIGFzIGQzYXJjLCBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbnZhciBNQVhfU0VDVElPTlMgPSAxMjtcbnZhciBkcmF3UmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgcmVjdERhdGEpIHtcbiAgY29uc3QgcmVjdEVsZW0gPSBlbGVtLmFwcGVuZChcInJlY3RcIik7XG4gIHJlY3RFbGVtLmF0dHIoXCJ4XCIsIHJlY3REYXRhLngpO1xuICByZWN0RWxlbS5hdHRyKFwieVwiLCByZWN0RGF0YS55KTtcbiAgcmVjdEVsZW0uYXR0cihcImZpbGxcIiwgcmVjdERhdGEuZmlsbCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJzdHJva2VcIiwgcmVjdERhdGEuc3Ryb2tlKTtcbiAgcmVjdEVsZW0uYXR0cihcIndpZHRoXCIsIHJlY3REYXRhLndpZHRoKTtcbiAgcmVjdEVsZW0uYXR0cihcImhlaWdodFwiLCByZWN0RGF0YS5oZWlnaHQpO1xuICByZWN0RWxlbS5hdHRyKFwicnhcIiwgcmVjdERhdGEucngpO1xuICByZWN0RWxlbS5hdHRyKFwicnlcIiwgcmVjdERhdGEucnkpO1xuICBpZiAocmVjdERhdGEuY2xhc3MgIT09IHZvaWQgMCkge1xuICAgIHJlY3RFbGVtLmF0dHIoXCJjbGFzc1wiLCByZWN0RGF0YS5jbGFzcyk7XG4gIH1cbiAgcmV0dXJuIHJlY3RFbGVtO1xufSwgXCJkcmF3UmVjdFwiKTtcbnZhciBkcmF3RmFjZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCwgZmFjZURhdGEpIHtcbiAgY29uc3QgcmFkaXVzID0gMTU7XG4gIGNvbnN0IGNpcmNsZUVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgZmFjZURhdGEuY3gpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSkuYXR0cihcImNsYXNzXCIsIFwiZmFjZVwiKS5hdHRyKFwiclwiLCByYWRpdXMpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMikuYXR0cihcIm92ZXJmbG93XCIsIFwidmlzaWJsZVwiKTtcbiAgY29uc3QgZmFjZSA9IGVsZW1lbnQuYXBwZW5kKFwiZ1wiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4IC0gcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4ICsgcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZnVuY3Rpb24gc21pbGUoZmFjZTIpIHtcbiAgICBjb25zdCBhcmMgPSBkM2FyYygpLnN0YXJ0QW5nbGUoTWF0aC5QSSAvIDIpLmVuZEFuZ2xlKDMgKiAoTWF0aC5QSSAvIDIpKS5pbm5lclJhZGl1cyhyYWRpdXMgLyAyKS5vdXRlclJhZGl1cyhyYWRpdXMgLyAyLjIpO1xuICAgIGZhY2UyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcImRcIiwgYXJjKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgZmFjZURhdGEuY3ggKyBcIixcIiArIChmYWNlRGF0YS5jeSArIDIpICsgXCIpXCIpO1xuICB9XG4gIF9fbmFtZShzbWlsZSwgXCJzbWlsZVwiKTtcbiAgZnVuY3Rpb24gc2FkKGZhY2UyKSB7XG4gICAgY29uc3QgYXJjID0gZDNhcmMoKS5zdGFydEFuZ2xlKDMgKiBNYXRoLlBJIC8gMikuZW5kQW5nbGUoNSAqIChNYXRoLlBJIC8gMikpLmlubmVyUmFkaXVzKHJhZGl1cyAvIDIpLm91dGVyUmFkaXVzKHJhZGl1cyAvIDIuMik7XG4gICAgZmFjZTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwiZFwiLCBhcmMpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBmYWNlRGF0YS5jeCArIFwiLFwiICsgKGZhY2VEYXRhLmN5ICsgNykgKyBcIilcIik7XG4gIH1cbiAgX19uYW1lKHNhZCwgXCJzYWRcIik7XG4gIGZ1bmN0aW9uIGFtYml2YWxlbnQoZmFjZTIpIHtcbiAgICBmYWNlMi5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1vdXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgMikuYXR0cihcIngxXCIsIGZhY2VEYXRhLmN4IC0gNSkuYXR0cihcInkxXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcIngyXCIsIGZhY2VEYXRhLmN4ICsgNSkuYXR0cihcInkyXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgfVxuICBfX25hbWUoYW1iaXZhbGVudCwgXCJhbWJpdmFsZW50XCIpO1xuICBpZiAoZmFjZURhdGEuc2NvcmUgPiAzKSB7XG4gICAgc21pbGUoZmFjZSk7XG4gIH0gZWxzZSBpZiAoZmFjZURhdGEuc2NvcmUgPCAzKSB7XG4gICAgc2FkKGZhY2UpO1xuICB9IGVsc2Uge1xuICAgIGFtYml2YWxlbnQoZmFjZSk7XG4gIH1cbiAgcmV0dXJuIGNpcmNsZUVsZW1lbnQ7XG59LCBcImRyYXdGYWNlXCIpO1xudmFyIGRyYXdDaXJjbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW1lbnQsIGNpcmNsZURhdGEpIHtcbiAgY29uc3QgY2lyY2xlRWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjeFwiLCBjaXJjbGVEYXRhLmN4KTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY3lcIiwgY2lyY2xlRGF0YS5jeSk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImNsYXNzXCIsIFwiYWN0b3ItXCIgKyBjaXJjbGVEYXRhLnBvcyk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImZpbGxcIiwgY2lyY2xlRGF0YS5maWxsKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwic3Ryb2tlXCIsIGNpcmNsZURhdGEuc3Ryb2tlKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiclwiLCBjaXJjbGVEYXRhLnIpO1xuICBpZiAoY2lyY2xlRWxlbWVudC5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgY2lyY2xlRWxlbWVudC5jbGFzcyk7XG4gIH1cbiAgaWYgKGNpcmNsZURhdGEudGl0bGUgIT09IHZvaWQgMCkge1xuICAgIGNpcmNsZUVsZW1lbnQuYXBwZW5kKFwidGl0bGVcIikudGV4dChjaXJjbGVEYXRhLnRpdGxlKTtcbiAgfVxuICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbn0sIFwiZHJhd0NpcmNsZVwiKTtcbnZhciBkcmF3VGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdGV4dERhdGEpIHtcbiAgY29uc3QgblRleHQgPSB0ZXh0RGF0YS50ZXh0LnJlcGxhY2UoLzxiclxccypcXC8/Pi9naSwgXCIgXCIpO1xuICBjb25zdCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwidGV4dFwiKTtcbiAgdGV4dEVsZW0uYXR0cihcInhcIiwgdGV4dERhdGEueCk7XG4gIHRleHRFbGVtLmF0dHIoXCJ5XCIsIHRleHREYXRhLnkpO1xuICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJsZWdlbmRcIik7XG4gIHRleHRFbGVtLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHNwYW4gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ0c3BhblwiKTtcbiAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54ICsgdGV4dERhdGEudGV4dE1hcmdpbiAqIDIpO1xuICBzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBfX25hbWUoZ2VuUG9pbnRzLCBcImdlblBvaW50c1wiKTtcbiAgY29uc3QgcG9seWdvbiA9IGVsZW0uYXBwZW5kKFwicG9seWdvblwiKTtcbiAgcG9seWdvbi5hdHRyKFwicG9pbnRzXCIsIGdlblBvaW50cyh0eHRPYmplY3QueCwgdHh0T2JqZWN0LnksIDUwLCAyMCwgNykpO1xuICBwb2x5Z29uLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsQm94XCIpO1xuICB0eHRPYmplY3QueSA9IHR4dE9iamVjdC55ICsgdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICB0eHRPYmplY3QueCA9IHR4dE9iamVjdC54ICsgMC41ICogdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICBkcmF3VGV4dChlbGVtLCB0eHRPYmplY3QpO1xufSwgXCJkcmF3TGFiZWxcIik7XG52YXIgZHJhd1NlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHNlY3Rpb24sIGNvbmYpIHtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgcmVjdCA9IGdldE5vdGVSZWN0KCk7XG4gIHJlY3QueCA9IHNlY3Rpb24ueDtcbiAgcmVjdC55ID0gc2VjdGlvbi55O1xuICByZWN0LmZpbGwgPSBzZWN0aW9uLmZpbGw7XG4gIHJlY3Qud2lkdGggPSBjb25mLndpZHRoO1xuICByZWN0LmhlaWdodCA9IGNvbmYuaGVpZ2h0O1xuICByZWN0LmNsYXNzID0gXCJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLVwiICsgc2VjdGlvbi5udW07XG4gIHJlY3QucnggPSAzO1xuICByZWN0LnJ5ID0gMztcbiAgZHJhd1JlY3QoZywgcmVjdCk7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZikoXG4gICAgc2VjdGlvbi50ZXh0LFxuICAgIGcsXG4gICAgcmVjdC54LFxuICAgIHJlY3QueSxcbiAgICByZWN0LndpZHRoLFxuICAgIHJlY3QuaGVpZ2h0LFxuICAgIHsgY2xhc3M6IFwiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS1cIiArIHNlY3Rpb24ubnVtIH0sXG4gICAgY29uZixcbiAgICBzZWN0aW9uLmNvbG91clxuICApO1xufSwgXCJkcmF3U2VjdGlvblwiKTtcbnZhciB0YXNrQ291bnQgPSAtMTtcbnZhciBkcmF3VGFzayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdGFzaywgY29uZikge1xuICBjb25zdCBjZW50ZXIgPSB0YXNrLnggKyBjb25mLndpZHRoIC8gMjtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgdGFza0NvdW50Kys7XG4gIGNvbnN0IG1heEhlaWdodCA9IDMwMCArIDUgKiAzMDtcbiAgZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcInRhc2tcIiArIHRhc2tDb3VudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIHRhc2sueSkuYXR0cihcIngyXCIsIGNlbnRlcikuYXR0cihcInkyXCIsIG1heEhlaWdodCkuYXR0cihcImNsYXNzXCIsIFwidGFzay1saW5lXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCI0IDJcIikuYXR0cihcInN0cm9rZVwiLCBcIiM2NjZcIik7XG4gIGRyYXdGYWNlKGcsIHtcbiAgICBjeDogY2VudGVyLFxuICAgIGN5OiAzMDAgKyAoNSAtIHRhc2suc2NvcmUpICogMzAsXG4gICAgc2NvcmU6IHRhc2suc2NvcmVcbiAgfSk7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICByZWN0LnggPSB0YXNrLng7XG4gIHJlY3QueSA9IHRhc2sueTtcbiAgcmVjdC5maWxsID0gdGFzay5maWxsO1xuICByZWN0LndpZHRoID0gY29uZi53aWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBjb25mLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwidGFzayB0YXNrLXR5cGUtXCIgKyB0YXNrLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdChnLCByZWN0KTtcbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mKShcbiAgICB0YXNrLnRhc2ssXG4gICAgZyxcbiAgICByZWN0LngsXG4gICAgcmVjdC55LFxuICAgIHJlY3Qud2lkdGgsXG4gICAgcmVjdC5oZWlnaHQsXG4gICAgeyBjbGFzczogXCJ0YXNrXCIgfSxcbiAgICBjb25mLFxuICAgIHRhc2suY29sb3VyXG4gICk7XG59LCBcImRyYXdUYXNrXCIpO1xudmFyIGRyYXdCYWNrZ3JvdW5kUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYm91bmRzKSB7XG4gIGNvbnN0IHJlY3RFbGVtID0gZHJhd1JlY3QoZWxlbSwge1xuICAgIHg6IGJvdW5kcy5zdGFydHgsXG4gICAgeTogYm91bmRzLnN0YXJ0eSxcbiAgICB3aWR0aDogYm91bmRzLnN0b3B4IC0gYm91bmRzLnN0YXJ0eCxcbiAgICBoZWlnaHQ6IGJvdW5kcy5zdG9weSAtIGJvdW5kcy5zdGFydHksXG4gICAgZmlsbDogYm91bmRzLmZpbGwsXG4gICAgY2xhc3M6IFwicmVjdFwiXG4gIH0pO1xuICByZWN0RWxlbS5sb3dlcigpO1xufSwgXCJkcmF3QmFja2dyb3VuZFJlY3RcIik7XG52YXIgZ2V0VGV4dE9iaiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IHZvaWQgMCxcbiAgICBcInRleHQtYW5jaG9yXCI6IFwic3RhcnRcIixcbiAgICB3aWR0aDogMTAwLFxuICAgIGhlaWdodDogMTAwLFxuICAgIHRleHRNYXJnaW46IDAsXG4gICAgcng6IDAsXG4gICAgcnk6IDBcbiAgfTtcbn0sIFwiZ2V0VGV4dE9ialwiKTtcbnZhciBnZXROb3RlUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgYW5jaG9yOiBcInN0YXJ0XCIsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgcng6IDAsXG4gICAgcnk6IDBcbiAgfTtcbn0sIFwiZ2V0Tm90ZVJlY3RcIik7XG52YXIgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29sb3VyKSB7XG4gICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMiArIDUpLnN0eWxlKFwiZm9udC1jb2xvclwiLCBjb2xvdXIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5VGV4dCwgXCJieVRleHRcIik7XG4gIGZ1bmN0aW9uIGJ5VHNwYW4oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mLCBjb2xvdXIpIHtcbiAgICBjb25zdCB7IHRhc2tGb250U2l6ZSwgdGFza0ZvbnRGYW1pbHkgfSA9IGNvbmY7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC88YnJcXHMqXFwvPz4vZ2kpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGR5ID0gaSAqIHRhc2tGb250U2l6ZSAtIHRhc2tGb250U2l6ZSAqIChsaW5lcy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJmaWxsXCIsIGNvbG91cikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCB0YXNrRm9udFNpemUpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgdGFza0ZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGJ5VHNwYW4sIFwiYnlUc3BhblwiKTtcbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYpIHtcbiAgICBjb25zdCBib2R5ID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IGJvZHkuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KS5hdHRyKFwicG9zaXRpb25cIiwgXCJmaXhlZFwiKTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIGJvZHksIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZik7XG4gICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICB9XG4gIF9fbmFtZShieUZvLCBcImJ5Rm9cIik7XG4gIGZ1bmN0aW9uIF9zZXRUZXh0QXR0cnModG9UZXh0LCBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgICBpZiAoa2V5IGluIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgICAgIHRvVGV4dC5hdHRyKGtleSwgZnJvbVRleHRBdHRyc0RpY3Rba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9fbmFtZShfc2V0VGV4dEF0dHJzLCBcIl9zZXRUZXh0QXR0cnNcIik7XG4gIHJldHVybiBmdW5jdGlvbihjb25mKSB7XG4gICAgcmV0dXJuIGNvbmYudGV4dFBsYWNlbWVudCA9PT0gXCJmb1wiID8gYnlGbyA6IGNvbmYudGV4dFBsYWNlbWVudCA9PT0gXCJvbGRcIiA/IGJ5VGV4dCA6IGJ5VHNwYW47XG4gIH07XG59KCk7XG52YXIgaW5pdEdyYXBoaWNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihncmFwaGljcykge1xuICBncmFwaGljcy5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhcnJvd2hlYWRcIikuYXR0cihcInJlZlhcIiwgNSkuYXR0cihcInJlZllcIiwgMikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDYpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgNCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCwwIFYgNCBMNiwyIFpcIik7XG59LCBcImluaXRHcmFwaGljc1wiKTtcbmZ1bmN0aW9uIHdyYXAodGV4dCwgd2lkdGgpIHtcbiAgdGV4dC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ZXh0MiA9IHNlbGVjdCh0aGlzKSwgd29yZHMgPSB0ZXh0Mi50ZXh0KCkuc3BsaXQoLyhcXHMrfDxicj4pLykucmV2ZXJzZSgpLCB3b3JkLCBsaW5lID0gW10sIGxpbmVIZWlnaHQgPSAxLjEsIHkgPSB0ZXh0Mi5hdHRyKFwieVwiKSwgZHkgPSBwYXJzZUZsb2F0KHRleHQyLmF0dHIoXCJkeVwiKSksIHRzcGFuID0gdGV4dDIudGV4dChudWxsKS5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCB5KS5hdHRyKFwiZHlcIiwgZHkgKyBcImVtXCIpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHdvcmQgPSB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxIC0gal07XG4gICAgICBsaW5lLnB1c2god29yZCk7XG4gICAgICB0c3Bhbi50ZXh0KGxpbmUuam9pbihcIiBcIikudHJpbSgpKTtcbiAgICAgIGlmICh0c3Bhbi5ub2RlKCkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgPiB3aWR0aCB8fCB3b3JkID09PSBcIjxicj5cIikge1xuICAgICAgICBsaW5lLnBvcCgpO1xuICAgICAgICB0c3Bhbi50ZXh0KGxpbmUuam9pbihcIiBcIikudHJpbSgpKTtcbiAgICAgICAgaWYgKHdvcmQgPT09IFwiPGJyPlwiKSB7XG4gICAgICAgICAgbGluZSA9IFtcIlwiXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lID0gW3dvcmRdO1xuICAgICAgICB9XG4gICAgICAgIHRzcGFuID0gdGV4dDIuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgeSkuYXR0cihcImR5XCIsIGxpbmVIZWlnaHQgKyBcImVtXCIpLnRleHQod29yZCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbl9fbmFtZSh3cmFwLCBcIndyYXBcIik7XG52YXIgZHJhd05vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIG5vZGUsIGZ1bGxTZWN0aW9uLCBjb25mKSB7XG4gIGNvbnN0IHNlY3Rpb24gPSBmdWxsU2VjdGlvbiAlIE1BWF9TRUNUSU9OUyAtIDE7XG4gIGNvbnN0IG5vZGVFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBub2RlLnNlY3Rpb24gPSBzZWN0aW9uO1xuICBub2RlRWxlbS5hdHRyKFxuICAgIFwiY2xhc3NcIixcbiAgICAobm9kZS5jbGFzcyA/IG5vZGUuY2xhc3MgKyBcIiBcIiA6IFwiXCIpICsgXCJ0aW1lbGluZS1ub2RlIFwiICsgKFwic2VjdGlvbi1cIiArIHNlY3Rpb24pXG4gICk7XG4gIGNvbnN0IGJrZ0VsZW0gPSBub2RlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB0ZXh0RWxlbSA9IG5vZGVFbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHR4dCA9IHRleHRFbGVtLmFwcGVuZChcInRleHRcIikudGV4dChub2RlLmRlc2NyKS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmNhbGwod3JhcCwgbm9kZS53aWR0aCk7XG4gIGNvbnN0IGJib3ggPSB0eHQubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3QgZm9udFNpemUgPSBjb25mLmZvbnRTaXplPy5yZXBsYWNlID8gY29uZi5mb250U2l6ZS5yZXBsYWNlKFwicHhcIiwgXCJcIikgOiBjb25mLmZvbnRTaXplO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0ICsgZm9udFNpemUgKiAxLjEgKiAwLjUgKyBub2RlLnBhZGRpbmc7XG4gIG5vZGUuaGVpZ2h0ID0gTWF0aC5tYXgobm9kZS5oZWlnaHQsIG5vZGUubWF4SGVpZ2h0KTtcbiAgbm9kZS53aWR0aCA9IG5vZGUud2lkdGggKyAyICogbm9kZS5wYWRkaW5nO1xuICB0ZXh0RWxlbS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbm9kZS53aWR0aCAvIDIgKyBcIiwgXCIgKyBub2RlLnBhZGRpbmcgLyAyICsgXCIpXCIpO1xuICBkZWZhdWx0QmtnKGJrZ0VsZW0sIG5vZGUsIHNlY3Rpb24sIGNvbmYpO1xuICByZXR1cm4gbm9kZTtcbn0sIFwiZHJhd05vZGVcIik7XG52YXIgZ2V0VmlydHVhbE5vZGVIZWlnaHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIG5vZGUsIGNvbmYpIHtcbiAgY29uc3QgdGV4dEVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHR4dCA9IHRleHRFbGVtLmFwcGVuZChcInRleHRcIikudGV4dChub2RlLmRlc2NyKS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmNhbGwod3JhcCwgbm9kZS53aWR0aCk7XG4gIGNvbnN0IGJib3ggPSB0eHQubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3QgZm9udFNpemUgPSBjb25mLmZvbnRTaXplPy5yZXBsYWNlID8gY29uZi5mb250U2l6ZS5yZXBsYWNlKFwicHhcIiwgXCJcIikgOiBjb25mLmZvbnRTaXplO1xuICB0ZXh0RWxlbS5yZW1vdmUoKTtcbiAgcmV0dXJuIGJib3guaGVpZ2h0ICsgZm9udFNpemUgKiAxLjEgKiAwLjUgKyBub2RlLnBhZGRpbmc7XG59LCBcImdldFZpcnR1YWxOb2RlSGVpZ2h0XCIpO1xudmFyIGRlZmF1bHRCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIG5vZGUsIHNlY3Rpb24pIHtcbiAgY29uc3QgcmQgPSA1O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBub2RlLnR5cGUpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgYE0wICR7bm9kZS5oZWlnaHQgLSByZH0gdiR7LW5vZGUuaGVpZ2h0ICsgMiAqIHJkfSBxMCwtNSA1LC01IGgke25vZGUud2lkdGggLSAyICogcmR9IHE1LDAgNSw1IHYke25vZGUuaGVpZ2h0IC0gcmR9IEgwIFpgXG4gICk7XG4gIGVsZW0uYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWxpbmUtXCIgKyBzZWN0aW9uKS5hdHRyKFwieDFcIiwgMCkuYXR0cihcInkxXCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwieDJcIiwgbm9kZS53aWR0aCkuYXR0cihcInkyXCIsIG5vZGUuaGVpZ2h0KTtcbn0sIFwiZGVmYXVsdEJrZ1wiKTtcbnZhciBzdmdEcmF3X2RlZmF1bHQgPSB7XG4gIGRyYXdSZWN0LFxuICBkcmF3Q2lyY2xlLFxuICBkcmF3U2VjdGlvbixcbiAgZHJhd1RleHQsXG4gIGRyYXdMYWJlbCxcbiAgZHJhd1Rhc2ssXG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZ2V0VGV4dE9iaixcbiAgZ2V0Tm90ZVJlY3QsXG4gIGluaXRHcmFwaGljcyxcbiAgZHJhd05vZGUsXG4gIGdldFZpcnR1YWxOb2RlSGVpZ2h0XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvdGltZWxpbmVSZW5kZXJlci50c1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGlkLCB2ZXJzaW9uLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgTEVGVF9NQVJHSU4gPSBjb25mLmxlZnRNYXJnaW4gPz8gNTA7XG4gIGxvZy5kZWJ1ZyhcInRpbWVsaW5lXCIsIGRpYWdPYmouZGIpO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gY29uZi5zZWN1cml0eUxldmVsO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0MihcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0MihzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdDIoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgc3ZnLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHRhc2tzMiA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgY29uc3QgdGl0bGUgPSBkaWFnT2JqLmRiLmdldENvbW1vbkRiKCkuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGxvZy5kZWJ1ZyhcInRhc2tcIiwgdGFza3MyKTtcbiAgc3ZnRHJhd19kZWZhdWx0LmluaXRHcmFwaGljcyhzdmcpO1xuICBjb25zdCBzZWN0aW9uczIgPSBkaWFnT2JqLmRiLmdldFNlY3Rpb25zKCk7XG4gIGxvZy5kZWJ1ZyhcInNlY3Rpb25zXCIsIHNlY3Rpb25zMik7XG4gIGxldCBtYXhTZWN0aW9uSGVpZ2h0ID0gMDtcbiAgbGV0IG1heFRhc2tIZWlnaHQgPSAwO1xuICBsZXQgZGVwdGhZID0gMDtcbiAgbGV0IHNlY3Rpb25CZWdpblkgPSAwO1xuICBsZXQgbWFzdGVyWCA9IDUwICsgTEVGVF9NQVJHSU47XG4gIGxldCBtYXN0ZXJZID0gNTA7XG4gIHNlY3Rpb25CZWdpblkgPSA1MDtcbiAgbGV0IHNlY3Rpb25OdW1iZXIgPSAwO1xuICBsZXQgaGFzU2VjdGlvbnMgPSB0cnVlO1xuICBzZWN0aW9uczIuZm9yRWFjaChmdW5jdGlvbihzZWN0aW9uKSB7XG4gICAgY29uc3Qgc2VjdGlvbk5vZGUgPSB7XG4gICAgICBudW1iZXI6IHNlY3Rpb25OdW1iZXIsXG4gICAgICBkZXNjcjogc2VjdGlvbixcbiAgICAgIHNlY3Rpb246IHNlY3Rpb25OdW1iZXIsXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IG1heFNlY3Rpb25IZWlnaHRcbiAgICB9O1xuICAgIGNvbnN0IHNlY3Rpb25IZWlnaHQgPSBzdmdEcmF3X2RlZmF1bHQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCBzZWN0aW9uTm9kZSwgY29uZik7XG4gICAgbG9nLmRlYnVnKFwic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhd1wiLCBzZWN0aW9uSGVpZ2h0KTtcbiAgICBtYXhTZWN0aW9uSGVpZ2h0ID0gTWF0aC5tYXgobWF4U2VjdGlvbkhlaWdodCwgc2VjdGlvbkhlaWdodCArIDIwKTtcbiAgfSk7XG4gIGxldCBtYXhFdmVudENvdW50ID0gMDtcbiAgbGV0IG1heEV2ZW50TGluZUxlbmd0aCA9IDA7XG4gIGxvZy5kZWJ1ZyhcInRhc2tzLmxlbmd0aFwiLCB0YXNrczIubGVuZ3RoKTtcbiAgZm9yIChjb25zdCBbaSwgdGFza10gb2YgdGFza3MyLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHRhc2tOb2RlID0ge1xuICAgICAgbnVtYmVyOiBpLFxuICAgICAgZGVzY3I6IHRhc2ssXG4gICAgICBzZWN0aW9uOiB0YXNrLnNlY3Rpb24sXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IG1heFRhc2tIZWlnaHRcbiAgICB9O1xuICAgIGNvbnN0IHRhc2tIZWlnaHQgPSBzdmdEcmF3X2RlZmF1bHQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCB0YXNrTm9kZSwgY29uZik7XG4gICAgbG9nLmRlYnVnKFwidGFza0hlaWdodCBiZWZvcmUgZHJhd1wiLCB0YXNrSGVpZ2h0KTtcbiAgICBtYXhUYXNrSGVpZ2h0ID0gTWF0aC5tYXgobWF4VGFza0hlaWdodCwgdGFza0hlaWdodCArIDIwKTtcbiAgICBtYXhFdmVudENvdW50ID0gTWF0aC5tYXgobWF4RXZlbnRDb3VudCwgdGFzay5ldmVudHMubGVuZ3RoKTtcbiAgICBsZXQgbWF4RXZlbnRMaW5lTGVuZ3RoVGVtcCA9IDA7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiB0YXNrLmV2ZW50cykge1xuICAgICAgY29uc3QgZXZlbnROb2RlID0ge1xuICAgICAgICBkZXNjcjogZXZlbnQsXG4gICAgICAgIHNlY3Rpb246IHRhc2suc2VjdGlvbixcbiAgICAgICAgbnVtYmVyOiB0YXNrLnNlY3Rpb24sXG4gICAgICAgIHdpZHRoOiAxNTAsXG4gICAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgICBtYXhIZWlnaHQ6IDUwXG4gICAgICB9O1xuICAgICAgbWF4RXZlbnRMaW5lTGVuZ3RoVGVtcCArPSBzdmdEcmF3X2RlZmF1bHQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCBldmVudE5vZGUsIGNvbmYpO1xuICAgIH1cbiAgICBtYXhFdmVudExpbmVMZW5ndGggPSBNYXRoLm1heChtYXhFdmVudExpbmVMZW5ndGgsIG1heEV2ZW50TGluZUxlbmd0aFRlbXApO1xuICB9XG4gIGxvZy5kZWJ1ZyhcIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXdcIiwgbWF4U2VjdGlvbkhlaWdodCk7XG4gIGxvZy5kZWJ1ZyhcIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXdcIiwgbWF4VGFza0hlaWdodCk7XG4gIGlmIChzZWN0aW9uczIgJiYgc2VjdGlvbnMyLmxlbmd0aCA+IDApIHtcbiAgICBzZWN0aW9uczIuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgY29uc3QgdGFza3NGb3JTZWN0aW9uID0gdGFza3MyLmZpbHRlcigodGFzaykgPT4gdGFzay5zZWN0aW9uID09PSBzZWN0aW9uKTtcbiAgICAgIGNvbnN0IHNlY3Rpb25Ob2RlID0ge1xuICAgICAgICBudW1iZXI6IHNlY3Rpb25OdW1iZXIsXG4gICAgICAgIGRlc2NyOiBzZWN0aW9uLFxuICAgICAgICBzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuICAgICAgICB3aWR0aDogMjAwICogTWF0aC5tYXgodGFza3NGb3JTZWN0aW9uLmxlbmd0aCwgMSkgLSA1MCxcbiAgICAgICAgcGFkZGluZzogMjAsXG4gICAgICAgIG1heEhlaWdodDogbWF4U2VjdGlvbkhlaWdodFxuICAgICAgfTtcbiAgICAgIGxvZy5kZWJ1ZyhcInNlY3Rpb25Ob2RlXCIsIHNlY3Rpb25Ob2RlKTtcbiAgICAgIGNvbnN0IHNlY3Rpb25Ob2RlV3JhcHBlciA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICAgICAgY29uc3Qgbm9kZSA9IHN2Z0RyYXdfZGVmYXVsdC5kcmF3Tm9kZShzZWN0aW9uTm9kZVdyYXBwZXIsIHNlY3Rpb25Ob2RlLCBzZWN0aW9uTnVtYmVyLCBjb25mKTtcbiAgICAgIGxvZy5kZWJ1ZyhcInNlY3Rpb25Ob2RlIG91dHB1dFwiLCBub2RlKTtcbiAgICAgIHNlY3Rpb25Ob2RlV3JhcHBlci5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHttYXN0ZXJYfSwgJHtzZWN0aW9uQmVnaW5ZfSlgKTtcbiAgICAgIG1hc3RlclkgKz0gbWF4U2VjdGlvbkhlaWdodCArIDUwO1xuICAgICAgaWYgKHRhc2tzRm9yU2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRyYXdUYXNrcyhcbiAgICAgICAgICBzdmcsXG4gICAgICAgICAgdGFza3NGb3JTZWN0aW9uLFxuICAgICAgICAgIHNlY3Rpb25OdW1iZXIsXG4gICAgICAgICAgbWFzdGVyWCxcbiAgICAgICAgICBtYXN0ZXJZLFxuICAgICAgICAgIG1heFRhc2tIZWlnaHQsXG4gICAgICAgICAgY29uZixcbiAgICAgICAgICBtYXhFdmVudENvdW50LFxuICAgICAgICAgIG1heEV2ZW50TGluZUxlbmd0aCxcbiAgICAgICAgICBtYXhTZWN0aW9uSGVpZ2h0LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBtYXN0ZXJYICs9IDIwMCAqIE1hdGgubWF4KHRhc2tzRm9yU2VjdGlvbi5sZW5ndGgsIDEpO1xuICAgICAgbWFzdGVyWSA9IHNlY3Rpb25CZWdpblk7XG4gICAgICBzZWN0aW9uTnVtYmVyKys7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaGFzU2VjdGlvbnMgPSBmYWxzZTtcbiAgICBkcmF3VGFza3MoXG4gICAgICBzdmcsXG4gICAgICB0YXNrczIsXG4gICAgICBzZWN0aW9uTnVtYmVyLFxuICAgICAgbWFzdGVyWCxcbiAgICAgIG1hc3RlclksXG4gICAgICBtYXhUYXNrSGVpZ2h0LFxuICAgICAgY29uZixcbiAgICAgIG1heEV2ZW50Q291bnQsXG4gICAgICBtYXhFdmVudExpbmVMZW5ndGgsXG4gICAgICBtYXhTZWN0aW9uSGVpZ2h0LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cbiAgY29uc3QgYm94ID0gc3ZnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGxvZy5kZWJ1ZyhcImJvdW5kc1wiLCBib3gpO1xuICBpZiAodGl0bGUpIHtcbiAgICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCBib3gud2lkdGggLyAyIC0gTEVGVF9NQVJHSU4pLmF0dHIoXCJmb250LXNpemVcIiwgXCI0ZXhcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKS5hdHRyKFwieVwiLCAyMCk7XG4gIH1cbiAgZGVwdGhZID0gaGFzU2VjdGlvbnMgPyBtYXhTZWN0aW9uSGVpZ2h0ICsgbWF4VGFza0hlaWdodCArIDE1MCA6IG1heFRhc2tIZWlnaHQgKyAxMDA7XG4gIGNvbnN0IGxpbmVXcmFwcGVyID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGluZVdyYXBwZXJcIik7XG4gIGxpbmVXcmFwcGVyLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIExFRlRfTUFSR0lOKS5hdHRyKFwieTFcIiwgZGVwdGhZKS5hdHRyKFwieDJcIiwgYm94LndpZHRoICsgMyAqIExFRlRfTUFSR0lOKS5hdHRyKFwieTJcIiwgZGVwdGhZKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDQpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybCgjYXJyb3doZWFkKVwiKTtcbiAgc2V0dXBHcmFwaFZpZXdib3goXG4gICAgdm9pZCAwLFxuICAgIHN2ZyxcbiAgICBjb25mLnRpbWVsaW5lPy5wYWRkaW5nID8/IDUwLFxuICAgIGNvbmYudGltZWxpbmU/LnVzZU1heFdpZHRoID8/IGZhbHNlXG4gICk7XG59LCBcImRyYXdcIik7XG52YXIgZHJhd1Rhc2tzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkaWFncmFtMiwgdGFza3MyLCBzZWN0aW9uQ29sb3IsIG1hc3RlclgsIG1hc3RlclksIG1heFRhc2tIZWlnaHQsIGNvbmYsIG1heEV2ZW50Q291bnQsIG1heEV2ZW50TGluZUxlbmd0aCwgbWF4U2VjdGlvbkhlaWdodCwgaXNXaXRob3V0U2VjdGlvbnMpIHtcbiAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzMikge1xuICAgIGNvbnN0IHRhc2tOb2RlID0ge1xuICAgICAgZGVzY3I6IHRhc2sudGFzayxcbiAgICAgIHNlY3Rpb246IHNlY3Rpb25Db2xvcixcbiAgICAgIG51bWJlcjogc2VjdGlvbkNvbG9yLFxuICAgICAgd2lkdGg6IDE1MCxcbiAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhUYXNrSGVpZ2h0XG4gICAgfTtcbiAgICBsb2cuZGVidWcoXCJ0YXNrTm9kZVwiLCB0YXNrTm9kZSk7XG4gICAgY29uc3QgdGFza1dyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRhc2tXcmFwcGVyXCIpO1xuICAgIGNvbnN0IG5vZGUgPSBzdmdEcmF3X2RlZmF1bHQuZHJhd05vZGUodGFza1dyYXBwZXIsIHRhc2tOb2RlLCBzZWN0aW9uQ29sb3IsIGNvbmYpO1xuICAgIGNvbnN0IHRhc2tIZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICBsb2cuZGVidWcoXCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXdcIiwgdGFza0hlaWdodCk7XG4gICAgdGFza1dyYXBwZXIuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFzdGVyWH0sICR7bWFzdGVyWX0pYCk7XG4gICAgbWF4VGFza0hlaWdodCA9IE1hdGgubWF4KG1heFRhc2tIZWlnaHQsIHRhc2tIZWlnaHQpO1xuICAgIGlmICh0YXNrLmV2ZW50cykge1xuICAgICAgY29uc3QgbGluZVdyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxpbmVXcmFwcGVyXCIpO1xuICAgICAgbGV0IGxpbmVMZW5ndGggPSBtYXhUYXNrSGVpZ2h0O1xuICAgICAgbWFzdGVyWSArPSAxMDA7XG4gICAgICBsaW5lTGVuZ3RoID0gbGluZUxlbmd0aCArIGRyYXdFdmVudHMoZGlhZ3JhbTIsIHRhc2suZXZlbnRzLCBzZWN0aW9uQ29sb3IsIG1hc3RlclgsIG1hc3RlclksIGNvbmYpO1xuICAgICAgbWFzdGVyWSAtPSAxMDA7XG4gICAgICBsaW5lV3JhcHBlci5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBtYXN0ZXJYICsgMTkwIC8gMikuYXR0cihcInkxXCIsIG1hc3RlclkgKyBtYXhUYXNrSGVpZ2h0KS5hdHRyKFwieDJcIiwgbWFzdGVyWCArIDE5MCAvIDIpLmF0dHIoXG4gICAgICAgIFwieTJcIixcbiAgICAgICAgbWFzdGVyWSArIG1heFRhc2tIZWlnaHQgKyAoaXNXaXRob3V0U2VjdGlvbnMgPyBtYXhUYXNrSGVpZ2h0IDogbWF4U2VjdGlvbkhlaWdodCkgKyBtYXhFdmVudExpbmVMZW5ndGggKyAxMjBcbiAgICAgICkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAyKS5hdHRyKFwic3Ryb2tlXCIsIFwiYmxhY2tcIikuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoI2Fycm93aGVhZClcIikuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCI1LDVcIik7XG4gICAgfVxuICAgIG1hc3RlclggPSBtYXN0ZXJYICsgMjAwO1xuICAgIGlmIChpc1dpdGhvdXRTZWN0aW9ucyAmJiAhY29uZi50aW1lbGluZT8uZGlzYWJsZU11bHRpY29sb3IpIHtcbiAgICAgIHNlY3Rpb25Db2xvcisrO1xuICAgIH1cbiAgfVxuICBtYXN0ZXJZID0gbWFzdGVyWSAtIDEwO1xufSwgXCJkcmF3VGFza3NcIik7XG52YXIgZHJhd0V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlhZ3JhbTIsIGV2ZW50cywgc2VjdGlvbkNvbG9yLCBtYXN0ZXJYLCBtYXN0ZXJZLCBjb25mKSB7XG4gIGxldCBtYXhFdmVudEhlaWdodCA9IDA7XG4gIGNvbnN0IGV2ZW50QmVnaW5ZID0gbWFzdGVyWTtcbiAgbWFzdGVyWSA9IG1hc3RlclkgKyAxMDA7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgY29uc3QgZXZlbnROb2RlID0ge1xuICAgICAgZGVzY3I6IGV2ZW50LFxuICAgICAgc2VjdGlvbjogc2VjdGlvbkNvbG9yLFxuICAgICAgbnVtYmVyOiBzZWN0aW9uQ29sb3IsXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IDUwXG4gICAgfTtcbiAgICBsb2cuZGVidWcoXCJldmVudE5vZGVcIiwgZXZlbnROb2RlKTtcbiAgICBjb25zdCBldmVudFdyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImV2ZW50V3JhcHBlclwiKTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhd19kZWZhdWx0LmRyYXdOb2RlKGV2ZW50V3JhcHBlciwgZXZlbnROb2RlLCBzZWN0aW9uQ29sb3IsIGNvbmYpO1xuICAgIGNvbnN0IGV2ZW50SGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gICAgbWF4RXZlbnRIZWlnaHQgPSBtYXhFdmVudEhlaWdodCArIGV2ZW50SGVpZ2h0O1xuICAgIGV2ZW50V3JhcHBlci5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHttYXN0ZXJYfSwgJHttYXN0ZXJZfSlgKTtcbiAgICBtYXN0ZXJZID0gbWFzdGVyWSArIDEwICsgZXZlbnRIZWlnaHQ7XG4gIH1cbiAgbWFzdGVyWSA9IGV2ZW50QmVnaW5ZO1xuICByZXR1cm4gbWF4RXZlbnRIZWlnaHQ7XG59LCBcImRyYXdFdmVudHNcIik7XG52YXIgdGltZWxpbmVSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBzZXRDb25mOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgfSwgXCJzZXRDb25mXCIpLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvc3R5bGVzLmpzXG5pbXBvcnQgeyBkYXJrZW4sIGxpZ2h0ZW4sIGlzRGFyayB9IGZyb20gXCJraHJvbWFcIjtcbnZhciBnZW5TZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IHtcbiAgbGV0IHNlY3Rpb25zMiA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gPSBvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSB8fCBvcHRpb25zW1wiY1NjYWxlSW52XCIgKyBpXTtcbiAgICBpZiAoaXNEYXJrKG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldKSkge1xuICAgICAgb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gPSBsaWdodGVuKG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldLCAyMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gZGFya2VuKG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldLCAyMCk7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgY29uc3Qgc3cgPSBcIlwiICsgKDE3IC0gMyAqIGkpO1xuICAgIHNlY3Rpb25zMiArPSBgXG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gcmVjdCwgLnNlY3Rpb24tJHtpIC0gMX0gcGF0aCwgLnNlY3Rpb24tJHtpIC0gMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2kgLSAxfSBwYXRoICB7XG4gICAgICBmaWxsOiAke29wdGlvbnNbXCJjU2NhbGVcIiArIGldfTtcbiAgICB9XG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gdGV4dCB7XG4gICAgIGZpbGw6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5ub2RlLWljb24tJHtpIC0gMX0ge1xuICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgY29sb3I6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5zZWN0aW9uLWVkZ2UtJHtpIC0gMX17XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZVwiICsgaV19O1xuICAgIH1cbiAgICAuZWRnZS1kZXB0aC0ke2kgLSAxfXtcbiAgICAgIHN0cm9rZS13aWR0aDogJHtzd307XG4gICAgfVxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IGxpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVJbnZcIiArIGldfSA7XG4gICAgICBzdHJva2Utd2lkdGg6IDM7XG4gICAgfVxuXG4gICAgLmxpbmVXcmFwcGVyIGxpbmV7XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX0gO1xuICAgIH1cblxuICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQge1xuICAgICAgZmlsbDogbGlnaHRncmF5O1xuICAgIH1cbiAgICAuZGlzYWJsZWQgdGV4dCB7XG4gICAgICBmaWxsOiAjZWZlZmVmO1xuICAgIH1cbiAgICBgO1xuICB9XG4gIHJldHVybiBzZWN0aW9uczI7XG59LCBcImdlblNlY3Rpb25zXCIpO1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGBcbiAgLmVkZ2Uge1xuICAgIHN0cm9rZS13aWR0aDogMztcbiAgfVxuICAke2dlblNlY3Rpb25zKG9wdGlvbnMpfVxuICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0MH07XG4gIH1cbiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0QnJhbmNoTGFiZWwwfTtcbiAgfVxuICAuaWNvbi1jb250YWluZXIge1xuICAgIGhlaWdodDoxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuZWRnZSB7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuICAuZXZlbnRXcmFwcGVyICB7XG4gICBmaWx0ZXI6IGJyaWdodG5lc3MoMTIwJSk7XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvdGltZWxpbmUtZGVmaW5pdGlvbi50c1xudmFyIGRpYWdyYW0gPSB7XG4gIGRiOiB0aW1lbGluZURiX2V4cG9ydHMsXG4gIHJlbmRlcmVyOiB0aW1lbGluZVJlbmRlcmVyX2RlZmF1bHQsXG4gIHBhcnNlcjogdGltZWxpbmVfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFRoZSBDeXRvc2NhcGUgQ29uc29ydGl1bS5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSDigJxTb2Z0d2FyZeKAnSksIHRvIGRlYWwgaW5cbiAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzXG4gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG9cbiAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIOKAnEFTIElT4oCdLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eSQxKG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfcywgX2U7XG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2Fycjtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7XG4gIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAoIWl0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKGl0KSBvID0gaXQ7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgczogRixcbiAgICAgICAgbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IG9baSsrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSxcbiAgICAgICAgZjogRlxuICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG4gIHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSxcbiAgICBkaWRFcnIgPSBmYWxzZSxcbiAgICBlcnI7XG4gIHJldHVybiB7XG4gICAgczogZnVuY3Rpb24gKCkge1xuICAgICAgaXQgPSBpdC5jYWxsKG8pO1xuICAgIH0sXG4gICAgbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7XG4gICAgICBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lO1xuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfSxcbiAgICBlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlkRXJyID0gdHJ1ZTtcbiAgICAgIGVyciA9IGU7XG4gICAgfSxcbiAgICBmOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGRpZEVycikgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIF93aW5kb3cgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxudmFyIG5hdmlnYXRvciA9IF93aW5kb3cgPyBfd2luZG93Lm5hdmlnYXRvciA6IG51bGw7XG5fd2luZG93ID8gX3dpbmRvdy5kb2N1bWVudCA6IG51bGw7XG52YXIgdHlwZW9mc3RyID0gX3R5cGVvZignJyk7XG52YXIgdHlwZW9mb2JqID0gX3R5cGVvZih7fSk7XG52YXIgdHlwZW9mZm4gPSBfdHlwZW9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciB0eXBlb2ZodG1sZWxlID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoSFRNTEVsZW1lbnQpO1xudmFyIGluc3RhbmNlU3RyID0gZnVuY3Rpb24gaW5zdGFuY2VTdHIob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLmluc3RhbmNlU3RyaW5nICYmIGZuJDYob2JqLmluc3RhbmNlU3RyaW5nKSA/IG9iai5pbnN0YW5jZVN0cmluZygpIDogbnVsbDtcbn07XG5cbnZhciBzdHJpbmcgPSBmdW5jdGlvbiBzdHJpbmcob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT0gdHlwZW9mc3RyO1xufTtcbnZhciBmbiQ2ID0gZnVuY3Rpb24gZm4ob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZmZuO1xufTtcbnZhciBhcnJheSA9IGZ1bmN0aW9uIGFycmF5KG9iaikge1xuICByZXR1cm4gIWVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSAmJiAoQXJyYXkuaXNBcnJheSA/IEFycmF5LmlzQXJyYXkob2JqKSA6IG9iaiAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIEFycmF5KTtcbn07XG52YXIgcGxhaW5PYmplY3QgPSBmdW5jdGlvbiBwbGFpbk9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIF90eXBlb2Yob2JqKSA9PT0gdHlwZW9mb2JqICYmICFhcnJheShvYmopICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufTtcbnZhciBvYmplY3QgPSBmdW5jdGlvbiBvYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZm9iajtcbn07XG52YXIgbnVtYmVyJDEgPSBmdW5jdGlvbiBudW1iZXIob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IF90eXBlb2YoMSkgJiYgIWlzTmFOKG9iaik7XG59O1xudmFyIGludGVnZXIgPSBmdW5jdGlvbiBpbnRlZ2VyKG9iaikge1xuICByZXR1cm4gbnVtYmVyJDEob2JqKSAmJiBNYXRoLmZsb29yKG9iaikgPT09IG9iajtcbn07XG52YXIgaHRtbEVsZW1lbnQgPSBmdW5jdGlvbiBodG1sRWxlbWVudChvYmopIHtcbiAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2ZodG1sZWxlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbCAhPSBvYmogJiYgb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gIH1cbn07XG52YXIgZWxlbWVudE9yQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIGVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSB7XG4gIHJldHVybiBlbGVtZW50KG9iaikgfHwgY29sbGVjdGlvbihvYmopO1xufTtcbnZhciBlbGVtZW50ID0gZnVuY3Rpb24gZWxlbWVudChvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb2xsZWN0aW9uJyAmJiBvYmouX3ByaXZhdGUuc2luZ2xlO1xufTtcbnZhciBjb2xsZWN0aW9uID0gZnVuY3Rpb24gY29sbGVjdGlvbihvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb2xsZWN0aW9uJyAmJiAhb2JqLl9wcml2YXRlLnNpbmdsZTtcbn07XG52YXIgY29yZSA9IGZ1bmN0aW9uIGNvcmUob2JqKSB7XG4gIHJldHVybiBpbnN0YW5jZVN0cihvYmopID09PSAnY29yZSc7XG59O1xudmFyIHN0eWxlc2hlZXQgPSBmdW5jdGlvbiBzdHlsZXNoZWV0KG9iaikge1xuICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ3N0eWxlc2hlZXQnO1xufTtcbnZhciBldmVudCA9IGZ1bmN0aW9uIGV2ZW50KG9iaikge1xuICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ2V2ZW50Jztcbn07XG52YXIgZW1wdHlTdHJpbmcgPSBmdW5jdGlvbiBlbXB0eVN0cmluZyhvYmopIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIC8vIG51bGwgaXMgZW1wdHlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChvYmogPT09ICcnIHx8IG9iai5tYXRjaCgvXlxccyskLykpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gZW1wdHkgc3RyaW5nIGlzIGVtcHR5XG4gIH1cblxuICByZXR1cm4gZmFsc2U7IC8vIG90aGVyd2lzZSwgd2UgZG9uJ3Qga25vdyB3aGF0IHdlJ3ZlIGdvdFxufTtcbnZhciBkb21FbGVtZW50ID0gZnVuY3Rpb24gZG9tRWxlbWVudChvYmopIHtcbiAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIHdlJ3JlIG5vdCBpbiBhIGJyb3dzZXIgc28gaXQgZG9lc24ndCBtYXR0ZXJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gIH1cbn07XG52YXIgYm91bmRpbmdCb3ggPSBmdW5jdGlvbiBib3VuZGluZ0JveChvYmopIHtcbiAgcmV0dXJuIHBsYWluT2JqZWN0KG9iaikgJiYgbnVtYmVyJDEob2JqLngxKSAmJiBudW1iZXIkMShvYmoueDIpICYmIG51bWJlciQxKG9iai55MSkgJiYgbnVtYmVyJDEob2JqLnkyKTtcbn07XG52YXIgcHJvbWlzZSA9IGZ1bmN0aW9uIHByb21pc2Uob2JqKSB7XG4gIHJldHVybiBvYmplY3Qob2JqKSAmJiBmbiQ2KG9iai50aGVuKTtcbn07XG52YXIgbXMgPSBmdW5jdGlvbiBtcygpIHtcbiAgcmV0dXJuIG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9tc2llfHRyaWRlbnR8ZWRnZS9pKTtcbn07IC8vIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkZXRlY3QgdGhpcy4uLlxuXG52YXIgbWVtb2l6ZSQxID0gZnVuY3Rpb24gbWVtb2l6ZShmbiwga2V5Rm4pIHtcbiAgaWYgKCFrZXlGbikge1xuICAgIGtleUZuID0gZnVuY3Rpb24ga2V5Rm4oKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJyQnKTtcbiAgICB9O1xuICB9XG4gIHZhciBtZW1vaXplZEZuID0gZnVuY3Rpb24gbWVtb2l6ZWRGbigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHJldDtcbiAgICB2YXIgayA9IGtleUZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIHZhciBjYWNoZSA9IG1lbW9pemVkRm4uY2FjaGU7XG4gICAgaWYgKCEocmV0ID0gY2FjaGVba10pKSB7XG4gICAgICByZXQgPSBjYWNoZVtrXSA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICBtZW1vaXplZEZuLmNhY2hlID0ge307XG4gIHJldHVybiBtZW1vaXplZEZuO1xufTtcblxudmFyIGNhbWVsMmRhc2ggPSBtZW1vaXplJDEoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gJy0nICsgdi50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbn0pO1xudmFyIGRhc2gyY2FtZWwgPSBtZW1vaXplJDEoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLygtXFx3KS9nLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB2WzFdLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufSk7XG52YXIgcHJlcGVuZENhbWVsID0gbWVtb2l6ZSQxKGZ1bmN0aW9uIChwcmVmaXgsIHN0cikge1xuICByZXR1cm4gcHJlZml4ICsgc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufSwgZnVuY3Rpb24gKHByZWZpeCwgc3RyKSB7XG4gIHJldHVybiBwcmVmaXggKyAnJCcgKyBzdHI7XG59KTtcbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgaWYgKGVtcHR5U3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufTtcblxudmFyIG51bWJlciA9ICcoPzpbLStdPyg/Oig/OlxcXFxkK3xcXFxcZCpcXFxcLlxcXFxkKykoPzpbRWVdWystXT9cXFxcZCspPykpJztcbnZhciByZ2JhID0gJ3JnYlthXT9cXFxcKCgnICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciByZ2JhTm9CYWNrUmVmcyA9ICdyZ2JbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdPylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0/KSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoc2xhID0gJ2hzbFthXT9cXFxcKCgnICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIgKyAnWyVdKVxcXFxzKixcXFxccyooJyArIG51bWJlciArICdbJV0pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoc2xhTm9CYWNrUmVmcyA9ICdoc2xbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdKSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoZXgzID0gJ1xcXFwjWzAtOWEtZkEtRl17M30nO1xudmFyIGhleDYgPSAnXFxcXCNbMC05YS1mQS1GXXs2fSc7XG5cbnZhciBhc2NlbmRpbmcgPSBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSBpZiAoYSA+IGIpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcbnZhciBkZXNjZW5kaW5nID0gZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn07XG5cbnZhciBleHRlbmQgPSBPYmplY3QuYXNzaWduICE9IG51bGwgPyBPYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KSA6IGZ1bmN0aW9uICh0Z3QpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBvYmogPSBhcmdzW2ldO1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBrID0ga2V5c1tqXTtcbiAgICAgIHRndFtrXSA9IG9ialtrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRndDtcbn07XG5cbi8vIGdldCBbciwgZywgYl0gZnJvbSAjYWJjIG9yICNhYWJiY2NcbnZhciBoZXgydHVwbGUgPSBmdW5jdGlvbiBoZXgydHVwbGUoaGV4KSB7XG4gIGlmICghKGhleC5sZW5ndGggPT09IDQgfHwgaGV4Lmxlbmd0aCA9PT0gNykgfHwgaGV4WzBdICE9PSAnIycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHNob3J0SGV4ID0gaGV4Lmxlbmd0aCA9PT0gNDtcbiAgdmFyIHIsIGcsIGI7XG4gIHZhciBiYXNlID0gMTY7XG4gIGlmIChzaG9ydEhleCkge1xuICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIGJhc2UpO1xuICAgIGcgPSBwYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIGJhc2UpO1xuICAgIGIgPSBwYXJzZUludChoZXhbM10gKyBoZXhbM10sIGJhc2UpO1xuICB9IGVsc2Uge1xuICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMl0sIGJhc2UpO1xuICAgIGcgPSBwYXJzZUludChoZXhbM10gKyBoZXhbNF0sIGJhc2UpO1xuICAgIGIgPSBwYXJzZUludChoZXhbNV0gKyBoZXhbNl0sIGJhc2UpO1xuICB9XG4gIHJldHVybiBbciwgZywgYl07XG59O1xuXG4vLyBnZXQgW3IsIGcsIGIsIGFdIGZyb20gaHNsKDAsIDAsIDApIG9yIGhzbGEoMCwgMCwgMCwgMClcbnZhciBoc2wydHVwbGUgPSBmdW5jdGlvbiBoc2wydHVwbGUoaHNsKSB7XG4gIHZhciByZXQ7XG4gIHZhciBoLCBzLCBsLCBhLCByLCBnLCBiO1xuICBmdW5jdGlvbiBodWUycmdiKHAsIHEsIHQpIHtcbiAgICBpZiAodCA8IDApIHQgKz0gMTtcbiAgICBpZiAodCA+IDEpIHQgLT0gMTtcbiAgICBpZiAodCA8IDEgLyA2KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICBpZiAodCA8IDEgLyAyKSByZXR1cm4gcTtcbiAgICBpZiAodCA8IDIgLyAzKSByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgdmFyIG0gPSBuZXcgUmVnRXhwKCdeJyArIGhzbGEgKyAnJCcpLmV4ZWMoaHNsKTtcbiAgaWYgKG0pIHtcbiAgICAvLyBnZXQgaHVlXG4gICAgaCA9IHBhcnNlSW50KG1bMV0pO1xuICAgIGlmIChoIDwgMCkge1xuICAgICAgaCA9ICgzNjAgLSAtMSAqIGggJSAzNjApICUgMzYwO1xuICAgIH0gZWxzZSBpZiAoaCA+IDM2MCkge1xuICAgICAgaCA9IGggJSAzNjA7XG4gICAgfVxuICAgIGggLz0gMzYwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICBzID0gcGFyc2VGbG9hdChtWzJdKTtcbiAgICBpZiAocyA8IDAgfHwgcyA+IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F0dXJhdGlvbiBpcyBbMCwgMTAwXVxuICAgIHMgPSBzIC8gMTAwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICBsID0gcGFyc2VGbG9hdChtWzNdKTtcbiAgICBpZiAobCA8IDAgfHwgbCA+IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbGlnaHRuZXNzIGlzIFswLCAxMDBdXG4gICAgbCA9IGwgLyAxMDA7IC8vIG5vcm1hbGlzZSBvbiBbMCwgMV1cblxuICAgIGEgPSBtWzRdO1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGEgPSBwYXJzZUZsb2F0KGEpO1xuICAgICAgaWYgKGEgPCAwIHx8IGEgPiAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gYWxwaGEgaXMgWzAsIDFdXG4gICAgfVxuXG4gICAgLy8gbm93LCBjb252ZXJ0IHRvIHJnYlxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vbWppamFja3Nvbi5jb20vMjAwOC8wMi9yZ2ItdG8taHNsLWFuZC1yZ2ItdG8taHN2LWNvbG9yLW1vZGVsLWNvbnZlcnNpb24tYWxnb3JpdGhtcy1pbi1qYXZhc2NyaXB0XG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IE1hdGgucm91bmQobCAqIDI1NSk7IC8vIGFjaHJvbWF0aWNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgdmFyIHAgPSAyICogbCAtIHE7XG4gICAgICByID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggKyAxIC8gMykpO1xuICAgICAgZyA9IE1hdGgucm91bmQoMjU1ICogaHVlMnJnYihwLCBxLCBoKSk7XG4gICAgICBiID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggLSAxIC8gMykpO1xuICAgIH1cbiAgICByZXQgPSBbciwgZywgYiwgYV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGdldCBbciwgZywgYiwgYV0gZnJvbSByZ2IoMCwgMCwgMCkgb3IgcmdiYSgwLCAwLCAwLCAwKVxudmFyIHJnYjJ0dXBsZSA9IGZ1bmN0aW9uIHJnYjJ0dXBsZShyZ2IpIHtcbiAgdmFyIHJldDtcbiAgdmFyIG0gPSBuZXcgUmVnRXhwKCdeJyArIHJnYmEgKyAnJCcpLmV4ZWMocmdiKTtcbiAgaWYgKG0pIHtcbiAgICByZXQgPSBbXTtcbiAgICB2YXIgaXNQY3QgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgIHZhciBjaGFubmVsID0gbVtpXTtcbiAgICAgIGlmIChjaGFubmVsW2NoYW5uZWwubGVuZ3RoIC0gMV0gPT09ICclJykge1xuICAgICAgICBpc1BjdFtpXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjaGFubmVsID0gcGFyc2VGbG9hdChjaGFubmVsKTtcbiAgICAgIGlmIChpc1BjdFtpXSkge1xuICAgICAgICBjaGFubmVsID0gY2hhbm5lbCAvIDEwMCAqIDI1NTsgLy8gbm9ybWFsaXNlIHRvIFswLCAyNTVdXG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFubmVsIDwgMCB8fCBjaGFubmVsID4gMjU1KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gaW52YWxpZCBjaGFubmVsIHZhbHVlXG5cbiAgICAgIHJldC5wdXNoKE1hdGguZmxvb3IoY2hhbm5lbCkpO1xuICAgIH1cbiAgICB2YXIgYXRMZWFzdE9uZUlzUGN0ID0gaXNQY3RbMV0gfHwgaXNQY3RbMl0gfHwgaXNQY3RbM107XG4gICAgdmFyIGFsbEFyZVBjdCA9IGlzUGN0WzFdICYmIGlzUGN0WzJdICYmIGlzUGN0WzNdO1xuICAgIGlmIChhdExlYXN0T25lSXNQY3QgJiYgIWFsbEFyZVBjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbXVzdCBhbGwgYmUgcGVyY2VudCB2YWx1ZXMgaWYgb25lIGlzXG5cbiAgICB2YXIgYWxwaGEgPSBtWzRdO1xuICAgIGlmIChhbHBoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbHBoYSA9IHBhcnNlRmxvYXQoYWxwaGEpO1xuICAgICAgaWYgKGFscGhhIDwgMCB8fCBhbHBoYSA+IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpbnZhbGlkIGFscGhhIHZhbHVlXG5cbiAgICAgIHJldC5wdXNoKGFscGhhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG52YXIgY29sb3JuYW1lMnR1cGxlID0gZnVuY3Rpb24gY29sb3JuYW1lMnR1cGxlKGNvbG9yKSB7XG4gIHJldHVybiBjb2xvcnNbY29sb3IudG9Mb3dlckNhc2UoKV07XG59O1xudmFyIGNvbG9yMnR1cGxlID0gZnVuY3Rpb24gY29sb3IydHVwbGUoY29sb3IpIHtcbiAgcmV0dXJuIChhcnJheShjb2xvcikgPyBjb2xvciA6IG51bGwpIHx8IGNvbG9ybmFtZTJ0dXBsZShjb2xvcikgfHwgaGV4MnR1cGxlKGNvbG9yKSB8fCByZ2IydHVwbGUoY29sb3IpIHx8IGhzbDJ0dXBsZShjb2xvcik7XG59O1xudmFyIGNvbG9ycyA9IHtcbiAgLy8gc3BlY2lhbCBjb2xvdXIgbmFtZXNcbiAgdHJhbnNwYXJlbnQ6IFswLCAwLCAwLCAwXSxcbiAgLy8gTkIgYWxwaGEgPT09IDBcblxuICAvLyByZWd1bGFyIGNvbG91cnNcbiAgYWxpY2VibHVlOiBbMjQwLCAyNDgsIDI1NV0sXG4gIGFudGlxdWV3aGl0ZTogWzI1MCwgMjM1LCAyMTVdLFxuICBhcXVhOiBbMCwgMjU1LCAyNTVdLFxuICBhcXVhbWFyaW5lOiBbMTI3LCAyNTUsIDIxMl0sXG4gIGF6dXJlOiBbMjQwLCAyNTUsIDI1NV0sXG4gIGJlaWdlOiBbMjQ1LCAyNDUsIDIyMF0sXG4gIGJpc3F1ZTogWzI1NSwgMjI4LCAxOTZdLFxuICBibGFjazogWzAsIDAsIDBdLFxuICBibGFuY2hlZGFsbW9uZDogWzI1NSwgMjM1LCAyMDVdLFxuICBibHVlOiBbMCwgMCwgMjU1XSxcbiAgYmx1ZXZpb2xldDogWzEzOCwgNDMsIDIyNl0sXG4gIGJyb3duOiBbMTY1LCA0MiwgNDJdLFxuICBidXJseXdvb2Q6IFsyMjIsIDE4NCwgMTM1XSxcbiAgY2FkZXRibHVlOiBbOTUsIDE1OCwgMTYwXSxcbiAgY2hhcnRyZXVzZTogWzEyNywgMjU1LCAwXSxcbiAgY2hvY29sYXRlOiBbMjEwLCAxMDUsIDMwXSxcbiAgY29yYWw6IFsyNTUsIDEyNywgODBdLFxuICBjb3JuZmxvd2VyYmx1ZTogWzEwMCwgMTQ5LCAyMzddLFxuICBjb3Juc2lsazogWzI1NSwgMjQ4LCAyMjBdLFxuICBjcmltc29uOiBbMjIwLCAyMCwgNjBdLFxuICBjeWFuOiBbMCwgMjU1LCAyNTVdLFxuICBkYXJrYmx1ZTogWzAsIDAsIDEzOV0sXG4gIGRhcmtjeWFuOiBbMCwgMTM5LCAxMzldLFxuICBkYXJrZ29sZGVucm9kOiBbMTg0LCAxMzQsIDExXSxcbiAgZGFya2dyYXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgZGFya2dyZWVuOiBbMCwgMTAwLCAwXSxcbiAgZGFya2dyZXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgZGFya2toYWtpOiBbMTg5LCAxODMsIDEwN10sXG4gIGRhcmttYWdlbnRhOiBbMTM5LCAwLCAxMzldLFxuICBkYXJrb2xpdmVncmVlbjogWzg1LCAxMDcsIDQ3XSxcbiAgZGFya29yYW5nZTogWzI1NSwgMTQwLCAwXSxcbiAgZGFya29yY2hpZDogWzE1MywgNTAsIDIwNF0sXG4gIGRhcmtyZWQ6IFsxMzksIDAsIDBdLFxuICBkYXJrc2FsbW9uOiBbMjMzLCAxNTAsIDEyMl0sXG4gIGRhcmtzZWFncmVlbjogWzE0MywgMTg4LCAxNDNdLFxuICBkYXJrc2xhdGVibHVlOiBbNzIsIDYxLCAxMzldLFxuICBkYXJrc2xhdGVncmF5OiBbNDcsIDc5LCA3OV0sXG4gIGRhcmtzbGF0ZWdyZXk6IFs0NywgNzksIDc5XSxcbiAgZGFya3R1cnF1b2lzZTogWzAsIDIwNiwgMjA5XSxcbiAgZGFya3Zpb2xldDogWzE0OCwgMCwgMjExXSxcbiAgZGVlcHBpbms6IFsyNTUsIDIwLCAxNDddLFxuICBkZWVwc2t5Ymx1ZTogWzAsIDE5MSwgMjU1XSxcbiAgZGltZ3JheTogWzEwNSwgMTA1LCAxMDVdLFxuICBkaW1ncmV5OiBbMTA1LCAxMDUsIDEwNV0sXG4gIGRvZGdlcmJsdWU6IFszMCwgMTQ0LCAyNTVdLFxuICBmaXJlYnJpY2s6IFsxNzgsIDM0LCAzNF0sXG4gIGZsb3JhbHdoaXRlOiBbMjU1LCAyNTAsIDI0MF0sXG4gIGZvcmVzdGdyZWVuOiBbMzQsIDEzOSwgMzRdLFxuICBmdWNoc2lhOiBbMjU1LCAwLCAyNTVdLFxuICBnYWluc2Jvcm86IFsyMjAsIDIyMCwgMjIwXSxcbiAgZ2hvc3R3aGl0ZTogWzI0OCwgMjQ4LCAyNTVdLFxuICBnb2xkOiBbMjU1LCAyMTUsIDBdLFxuICBnb2xkZW5yb2Q6IFsyMTgsIDE2NSwgMzJdLFxuICBncmF5OiBbMTI4LCAxMjgsIDEyOF0sXG4gIGdyZXk6IFsxMjgsIDEyOCwgMTI4XSxcbiAgZ3JlZW46IFswLCAxMjgsIDBdLFxuICBncmVlbnllbGxvdzogWzE3MywgMjU1LCA0N10sXG4gIGhvbmV5ZGV3OiBbMjQwLCAyNTUsIDI0MF0sXG4gIGhvdHBpbms6IFsyNTUsIDEwNSwgMTgwXSxcbiAgaW5kaWFucmVkOiBbMjA1LCA5MiwgOTJdLFxuICBpbmRpZ286IFs3NSwgMCwgMTMwXSxcbiAgaXZvcnk6IFsyNTUsIDI1NSwgMjQwXSxcbiAga2hha2k6IFsyNDAsIDIzMCwgMTQwXSxcbiAgbGF2ZW5kZXI6IFsyMzAsIDIzMCwgMjUwXSxcbiAgbGF2ZW5kZXJibHVzaDogWzI1NSwgMjQwLCAyNDVdLFxuICBsYXduZ3JlZW46IFsxMjQsIDI1MiwgMF0sXG4gIGxlbW9uY2hpZmZvbjogWzI1NSwgMjUwLCAyMDVdLFxuICBsaWdodGJsdWU6IFsxNzMsIDIxNiwgMjMwXSxcbiAgbGlnaHRjb3JhbDogWzI0MCwgMTI4LCAxMjhdLFxuICBsaWdodGN5YW46IFsyMjQsIDI1NSwgMjU1XSxcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsIDI1MCwgMjEwXSxcbiAgbGlnaHRncmF5OiBbMjExLCAyMTEsIDIxMV0sXG4gIGxpZ2h0Z3JlZW46IFsxNDQsIDIzOCwgMTQ0XSxcbiAgbGlnaHRncmV5OiBbMjExLCAyMTEsIDIxMV0sXG4gIGxpZ2h0cGluazogWzI1NSwgMTgyLCAxOTNdLFxuICBsaWdodHNhbG1vbjogWzI1NSwgMTYwLCAxMjJdLFxuICBsaWdodHNlYWdyZWVuOiBbMzIsIDE3OCwgMTcwXSxcbiAgbGlnaHRza3libHVlOiBbMTM1LCAyMDYsIDI1MF0sXG4gIGxpZ2h0c2xhdGVncmF5OiBbMTE5LCAxMzYsIDE1M10sXG4gIGxpZ2h0c2xhdGVncmV5OiBbMTE5LCAxMzYsIDE1M10sXG4gIGxpZ2h0c3RlZWxibHVlOiBbMTc2LCAxOTYsIDIyMl0sXG4gIGxpZ2h0eWVsbG93OiBbMjU1LCAyNTUsIDIyNF0sXG4gIGxpbWU6IFswLCAyNTUsIDBdLFxuICBsaW1lZ3JlZW46IFs1MCwgMjA1LCA1MF0sXG4gIGxpbmVuOiBbMjUwLCAyNDAsIDIzMF0sXG4gIG1hZ2VudGE6IFsyNTUsIDAsIDI1NV0sXG4gIG1hcm9vbjogWzEyOCwgMCwgMF0sXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFsxMDIsIDIwNSwgMTcwXSxcbiAgbWVkaXVtYmx1ZTogWzAsIDAsIDIwNV0sXG4gIG1lZGl1bW9yY2hpZDogWzE4NiwgODUsIDIxMV0sXG4gIG1lZGl1bXB1cnBsZTogWzE0NywgMTEyLCAyMTldLFxuICBtZWRpdW1zZWFncmVlbjogWzYwLCAxNzksIDExM10sXG4gIG1lZGl1bXNsYXRlYmx1ZTogWzEyMywgMTA0LCAyMzhdLFxuICBtZWRpdW1zcHJpbmdncmVlbjogWzAsIDI1MCwgMTU0XSxcbiAgbWVkaXVtdHVycXVvaXNlOiBbNzIsIDIwOSwgMjA0XSxcbiAgbWVkaXVtdmlvbGV0cmVkOiBbMTk5LCAyMSwgMTMzXSxcbiAgbWlkbmlnaHRibHVlOiBbMjUsIDI1LCAxMTJdLFxuICBtaW50Y3JlYW06IFsyNDUsIDI1NSwgMjUwXSxcbiAgbWlzdHlyb3NlOiBbMjU1LCAyMjgsIDIyNV0sXG4gIG1vY2Nhc2luOiBbMjU1LCAyMjgsIDE4MV0sXG4gIG5hdmFqb3doaXRlOiBbMjU1LCAyMjIsIDE3M10sXG4gIG5hdnk6IFswLCAwLCAxMjhdLFxuICBvbGRsYWNlOiBbMjUzLCAyNDUsIDIzMF0sXG4gIG9saXZlOiBbMTI4LCAxMjgsIDBdLFxuICBvbGl2ZWRyYWI6IFsxMDcsIDE0MiwgMzVdLFxuICBvcmFuZ2U6IFsyNTUsIDE2NSwgMF0sXG4gIG9yYW5nZXJlZDogWzI1NSwgNjksIDBdLFxuICBvcmNoaWQ6IFsyMTgsIDExMiwgMjE0XSxcbiAgcGFsZWdvbGRlbnJvZDogWzIzOCwgMjMyLCAxNzBdLFxuICBwYWxlZ3JlZW46IFsxNTIsIDI1MSwgMTUyXSxcbiAgcGFsZXR1cnF1b2lzZTogWzE3NSwgMjM4LCAyMzhdLFxuICBwYWxldmlvbGV0cmVkOiBbMjE5LCAxMTIsIDE0N10sXG4gIHBhcGF5YXdoaXA6IFsyNTUsIDIzOSwgMjEzXSxcbiAgcGVhY2hwdWZmOiBbMjU1LCAyMTgsIDE4NV0sXG4gIHBlcnU6IFsyMDUsIDEzMywgNjNdLFxuICBwaW5rOiBbMjU1LCAxOTIsIDIwM10sXG4gIHBsdW06IFsyMjEsIDE2MCwgMjIxXSxcbiAgcG93ZGVyYmx1ZTogWzE3NiwgMjI0LCAyMzBdLFxuICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXG4gIHJlZDogWzI1NSwgMCwgMF0sXG4gIHJvc3licm93bjogWzE4OCwgMTQzLCAxNDNdLFxuICByb3lhbGJsdWU6IFs2NSwgMTA1LCAyMjVdLFxuICBzYWRkbGVicm93bjogWzEzOSwgNjksIDE5XSxcbiAgc2FsbW9uOiBbMjUwLCAxMjgsIDExNF0sXG4gIHNhbmR5YnJvd246IFsyNDQsIDE2NCwgOTZdLFxuICBzZWFncmVlbjogWzQ2LCAxMzksIDg3XSxcbiAgc2Vhc2hlbGw6IFsyNTUsIDI0NSwgMjM4XSxcbiAgc2llbm5hOiBbMTYwLCA4MiwgNDVdLFxuICBzaWx2ZXI6IFsxOTIsIDE5MiwgMTkyXSxcbiAgc2t5Ymx1ZTogWzEzNSwgMjA2LCAyMzVdLFxuICBzbGF0ZWJsdWU6IFsxMDYsIDkwLCAyMDVdLFxuICBzbGF0ZWdyYXk6IFsxMTIsIDEyOCwgMTQ0XSxcbiAgc2xhdGVncmV5OiBbMTEyLCAxMjgsIDE0NF0sXG4gIHNub3c6IFsyNTUsIDI1MCwgMjUwXSxcbiAgc3ByaW5nZ3JlZW46IFswLCAyNTUsIDEyN10sXG4gIHN0ZWVsYmx1ZTogWzcwLCAxMzAsIDE4MF0sXG4gIHRhbjogWzIxMCwgMTgwLCAxNDBdLFxuICB0ZWFsOiBbMCwgMTI4LCAxMjhdLFxuICB0aGlzdGxlOiBbMjE2LCAxOTEsIDIxNl0sXG4gIHRvbWF0bzogWzI1NSwgOTksIDcxXSxcbiAgdHVycXVvaXNlOiBbNjQsIDIyNCwgMjA4XSxcbiAgdmlvbGV0OiBbMjM4LCAxMzAsIDIzOF0sXG4gIHdoZWF0OiBbMjQ1LCAyMjIsIDE3OV0sXG4gIHdoaXRlOiBbMjU1LCAyNTUsIDI1NV0sXG4gIHdoaXRlc21va2U6IFsyNDUsIDI0NSwgMjQ1XSxcbiAgeWVsbG93OiBbMjU1LCAyNTUsIDBdLFxuICB5ZWxsb3dncmVlbjogWzE1NCwgMjA1LCA1MF1cbn07XG5cbi8vIHNldHMgdGhlIHZhbHVlIGluIGEgbWFwIChtYXAgbWF5IG5vdCBiZSBidWlsdClcbnZhciBzZXRNYXAgPSBmdW5jdGlvbiBzZXRNYXAob3B0aW9ucykge1xuICB2YXIgb2JqID0gb3B0aW9ucy5tYXA7XG4gIHZhciBrZXlzID0gb3B0aW9ucy5rZXlzO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwbGFpbk9iamVjdChrZXkpKSB7XG4gICAgICB0aHJvdyBFcnJvcignVHJpZWQgdG8gc2V0IG1hcCB3aXRoIG9iamVjdCBrZXknKTtcbiAgICB9XG4gICAgaWYgKGkgPCBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGV4dGVuZCB0aGUgbWFwIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKG9ialtrZXldID09IG51bGwpIHtcbiAgICAgICAgb2JqW2tleV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZXQgdGhlIHZhbHVlXG4gICAgICBvYmpba2V5XSA9IG9wdGlvbnMudmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBnZXRzIHRoZSB2YWx1ZSBpbiBhIG1hcCBldmVuIGlmIGl0J3Mgbm90IGJ1aWx0IGluIHBsYWNlc1xudmFyIGdldE1hcCA9IGZ1bmN0aW9uIGdldE1hcChvcHRpb25zKSB7XG4gIHZhciBvYmogPSBvcHRpb25zLm1hcDtcbiAgdmFyIGtleXMgPSBvcHRpb25zLmtleXM7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKHBsYWluT2JqZWN0KGtleSkpIHtcbiAgICAgIHRocm93IEVycm9yKCdUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleScpO1xuICAgIH1cbiAgICBvYmogPSBvYmpba2V5XTtcbiAgICBpZiAob2JqID09IG51bGwpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxudmFyIGlzT2JqZWN0XzEgPSBpc09iamVjdDtcblxudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZuLCBtb2R1bGUpIHtcblx0cmV0dXJuIG1vZHVsZSA9IHsgZXhwb3J0czoge30gfSwgZm4obW9kdWxlLCBtb2R1bGUuZXhwb3J0cyksIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgY29tbW9uanNHbG9iYWwgPT0gJ29iamVjdCcgJiYgY29tbW9uanNHbG9iYWwgJiYgY29tbW9uanNHbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgY29tbW9uanNHbG9iYWw7XG5cbnZhciBfZnJlZUdsb2JhbCA9IGZyZWVHbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IF9mcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbnZhciBfcm9vdCA9IHJvb3Q7XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9yb290LkRhdGUubm93KCk7XG59O1xuXG52YXIgbm93XzEgPSBub3c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxudmFyIF90cmltbWVkRW5kSW5kZXggPSB0cmltbWVkRW5kSW5kZXg7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgX3RyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgOiBzdHJpbmc7XG59XG5cbnZhciBfYmFzZVRyaW0gPSBiYXNlVHJpbTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sJDEgPSBfcm9vdC5TeW1ib2w7XG5cbnZhciBfU3ltYm9sID0gU3ltYm9sJDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byQ1ID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkkNCA9IG9iamVjdFByb3RvJDUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyQxID0gb2JqZWN0UHJvdG8kNS50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWckMSA9IF9TeW1ib2wgPyBfU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eSQ0LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnJDEpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWckMV07XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZyQxXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnJDFdID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWckMV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBfZ2V0UmF3VGFnID0gZ2V0UmF3VGFnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8kNCA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvJDQudG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbnZhciBfb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RUb1N0cmluZztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gX1N5bWJvbCA/IF9TeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IF9nZXRSYXdUYWcodmFsdWUpXG4gICAgOiBfb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG52YXIgX2Jhc2VHZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxudmFyIGlzT2JqZWN0TGlrZV8xID0gaXNPYmplY3RMaWtlO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2VfMSh2YWx1ZSkgJiYgX2Jhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbnZhciBpc1N5bWJvbF8xID0gaXNTeW1ib2w7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbF8xKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0XzEodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3RfMShvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSBfYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxudmFyIHRvTnVtYmVyXzEgPSB0b051bWJlcjtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCQxID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUJDEpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcl8xKHdhaXQpIHx8IDA7XG4gIGlmIChpc09iamVjdF8xKG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXJfMShvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93XzEoKTtcbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH1cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93XzEoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3dfMSgpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG52YXIgZGVib3VuY2VfMSA9IGRlYm91bmNlO1xuXG52YXIgcGVyZm9ybWFuY2UgPSBfd2luZG93ID8gX3dpbmRvdy5wZXJmb3JtYW5jZSA6IG51bGw7XG52YXIgcG5vdyA9IHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xudmFyIHJhZiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF93aW5kb3cpIHtcbiAgICBpZiAoX3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgX3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKF93aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIF93aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChfd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICBfd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoX3dpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICBfd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmbihwbm93KCkpO1xuICAgICAgfSwgMTAwMCAvIDYwKTtcbiAgICB9XG4gIH07XG59KCk7XG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKSB7XG4gIHJldHVybiByYWYoZm4pO1xufTtcbnZhciBwZXJmb3JtYW5jZU5vdyA9IHBub3c7XG5cbnZhciBERUZBVUxUX0hBU0hfU0VFRCA9IDkyNjE7XG52YXIgSyA9IDY1NTk5OyAvLyAzNyBhbHNvIHdvcmtzIHByZXR0eSB3ZWxsXG52YXIgREVGQVVMVF9IQVNIX1NFRURfQUxUID0gNTM4MTtcbnZhciBoYXNoSXRlcmFibGVJbnRzID0gZnVuY3Rpb24gaGFzaEl0ZXJhYmxlSW50cyhpdGVyYXRvcikge1xuICB2YXIgc2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9IQVNIX1NFRUQ7XG4gIC8vIHNkYm0vc3RyaW5nLWhhc2hcbiAgdmFyIGhhc2ggPSBzZWVkO1xuICB2YXIgZW50cnk7XG4gIGZvciAoOzspIHtcbiAgICBlbnRyeSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICBpZiAoZW50cnkuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGhhc2ggPSBoYXNoICogSyArIGVudHJ5LnZhbHVlIHwgMDtcbiAgfVxuICByZXR1cm4gaGFzaDtcbn07XG52YXIgaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQobnVtKSB7XG4gIHZhciBzZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX0hBU0hfU0VFRDtcbiAgLy8gc2RibS9zdHJpbmctaGFzaFxuICByZXR1cm4gc2VlZCAqIEsgKyBudW0gfCAwO1xufTtcbnZhciBoYXNoSW50QWx0ID0gZnVuY3Rpb24gaGFzaEludEFsdChudW0pIHtcbiAgdmFyIHNlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfSEFTSF9TRUVEX0FMVDtcbiAgLy8gZGpiMi9zdHJpbmctaGFzaFxuICByZXR1cm4gKHNlZWQgPDwgNSkgKyBzZWVkICsgbnVtIHwgMDtcbn07XG52YXIgY29tYmluZUhhc2hlcyA9IGZ1bmN0aW9uIGNvbWJpbmVIYXNoZXMoaGFzaDEsIGhhc2gyKSB7XG4gIHJldHVybiBoYXNoMSAqIDB4MjAwMDAwICsgaGFzaDI7XG59O1xudmFyIGNvbWJpbmVIYXNoZXNBcnJheSA9IGZ1bmN0aW9uIGNvbWJpbmVIYXNoZXNBcnJheShoYXNoZXMpIHtcbiAgcmV0dXJuIGhhc2hlc1swXSAqIDB4MjAwMDAwICsgaGFzaGVzWzFdO1xufTtcbnZhciBoYXNoQXJyYXlzID0gZnVuY3Rpb24gaGFzaEFycmF5cyhoYXNoZXMxLCBoYXNoZXMyKSB7XG4gIHJldHVybiBbaGFzaEludChoYXNoZXMxWzBdLCBoYXNoZXMyWzBdKSwgaGFzaEludEFsdChoYXNoZXMxWzFdLCBoYXNoZXMyWzFdKV07XG59O1xudmFyIGhhc2hJbnRzQXJyYXkgPSBmdW5jdGlvbiBoYXNoSW50c0FycmF5KGludHMsIHNlZWQpIHtcbiAgdmFyIGVudHJ5ID0ge1xuICAgIHZhbHVlOiAwLFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG4gIHZhciBpID0gMDtcbiAgdmFyIGxlbmd0aCA9IGludHMubGVuZ3RoO1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gaW50c1tpKytdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50cnkuZG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gaGFzaEl0ZXJhYmxlSW50cyhpdGVyYXRvciwgc2VlZCk7XG59O1xudmFyIGhhc2hTdHJpbmcgPSBmdW5jdGlvbiBoYXNoU3RyaW5nKHN0ciwgc2VlZCkge1xuICB2YXIgZW50cnkgPSB7XG4gICAgdmFsdWU6IDAsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAoaSA8IGxlbmd0aCkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyeS5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBoYXNoSXRlcmFibGVJbnRzKGl0ZXJhdG9yLCBzZWVkKTtcbn07XG52YXIgaGFzaFN0cmluZ3MgPSBmdW5jdGlvbiBoYXNoU3RyaW5ncygpIHtcbiAgcmV0dXJuIGhhc2hTdHJpbmdzQXJyYXkoYXJndW1lbnRzKTtcbn07XG52YXIgaGFzaFN0cmluZ3NBcnJheSA9IGZ1bmN0aW9uIGhhc2hTdHJpbmdzQXJyYXkoc3Rycykge1xuICB2YXIgaGFzaDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHN0ciA9IHN0cnNbaV07XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGhhc2ggPSBoYXNoU3RyaW5nKHN0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc2ggPSBoYXNoU3RyaW5nKHN0ciwgaGFzaCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBoYXNoO1xufTtcblxuLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHdhcm5pbmdzRW5hYmxlZCA9IHRydWU7XG52YXIgd2FyblN1cHBvcnRlZCA9IGNvbnNvbGUud2FybiAhPSBudWxsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbnZhciB0cmFjZVN1cHBvcnRlZCA9IGNvbnNvbGUudHJhY2UgIT0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG5cbnZhciBNQVhfSU5UJDEgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCA5MDA3MTk5MjU0NzQwOTkxO1xudmFyIHRydWVpZnkgPSBmdW5jdGlvbiB0cnVlaWZ5KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZmFsc2lmeSA9IGZ1bmN0aW9uIGZhbHNpZnkoKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG52YXIgemVyb2lmeSA9IGZ1bmN0aW9uIHplcm9pZnkoKSB7XG4gIHJldHVybiAwO1xufTtcbnZhciBub29wJDEgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59O1xudmFyIHdhcm5pbmdzID0gZnVuY3Rpb24gd2FybmluZ3MoZW5hYmxlZCkge1xuICBpZiAoZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2FybmluZ3NFbmFibGVkID0gISFlbmFibGVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3YXJuaW5nc0VuYWJsZWQ7XG4gIH1cbn07XG52YXIgd2FybiA9IGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKCF3YXJuaW5ncygpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh3YXJuU3VwcG9ydGVkKSB7XG4gICAgY29uc29sZS53YXJuKG1zZyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2cobXNnKTtcbiAgICBpZiAodHJhY2VTdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICB9XG4gIH1cbn07IC8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIGNsb25lID0gZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gIHJldHVybiBleHRlbmQoe30sIG9iaik7XG59O1xuXG4vLyBnZXRzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBhcmd1bWVudFxudmFyIGNvcHkgPSBmdW5jdGlvbiBjb3B5KG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChhcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5zbGljZSgpO1xuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gY2xvbmUob2JqKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG59O1xudmFyIGNvcHlBcnJheSQxID0gZnVuY3Rpb24gY29weUFycmF5KGFycikge1xuICByZXR1cm4gYXJyLnNsaWNlKCk7XG59O1xudmFyIHV1aWQgPSBmdW5jdGlvbiB1dWlkKGEsIGIgLyogcGxhY2Vob2xkZXJzICovKSB7XG4gIGZvciAoXG4gIC8vIGxvb3AgOilcbiAgYiA9IGEgPSAnJztcbiAgLy8gYiAtIHJlc3VsdCAsIGEgLSBudW1lcmljIGxldGlhYmxlXG4gIGErKyA8IDM2O1xuICAvL1xuICBiICs9IGEgKiA1MSAmIDUyIC8vIGlmIFwiYVwiIGlzIG5vdCA5IG9yIDE0IG9yIDE5IG9yIDI0XG4gID9cbiAgLy8gIHJldHVybiBhIHJhbmRvbSBudW1iZXIgb3IgNFxuICAoYSBeIDE1IC8vIGlmIFwiYVwiIGlzIG5vdCAxNVxuICA/XG4gIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBmcm9tIDAgdG8gMTVcbiAgOCBeIE1hdGgucmFuZG9tKCkgKiAoYSBeIDIwID8gMTYgOiA0KSAvLyB1bmxlc3MgXCJhXCIgaXMgMjAsIGluIHdoaWNoIGNhc2UgYSByYW5kb20gbnVtYmVyIGZyb20gOCB0byAxMVxuICA6IDQgLy8gIG90aGVyd2lzZSA0XG4gICkudG9TdHJpbmcoMTYpIDogJy0nIC8vICBpbiBvdGhlciBjYXNlcyAoaWYgXCJhXCIgaXMgOSwxNCwxOSwyNCkgaW5zZXJ0IFwiLVwiXG4gICkge1xuICB9XG4gIHJldHVybiBiO1xufTtcbnZhciBfc3RhdGljRW1wdHlPYmplY3QgPSB7fTtcbnZhciBzdGF0aWNFbXB0eU9iamVjdCA9IGZ1bmN0aW9uIHN0YXRpY0VtcHR5T2JqZWN0KCkge1xuICByZXR1cm4gX3N0YXRpY0VtcHR5T2JqZWN0O1xufTtcbnZhciBkZWZhdWx0cyRnID0gZnVuY3Rpb24gZGVmYXVsdHMoX2RlZmF1bHRzKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoX2RlZmF1bHRzKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgdmFyIGZpbGxlZE9wdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIG9wdFZhbCA9IG9wdHMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9wdHNba2V5XTtcbiAgICAgIGZpbGxlZE9wdHNba2V5XSA9IG9wdFZhbCA9PT0gdW5kZWZpbmVkID8gX2RlZmF1bHRzW2tleV0gOiBvcHRWYWw7XG4gICAgfVxuICAgIHJldHVybiBmaWxsZWRPcHRzO1xuICB9O1xufTtcbnZhciByZW1vdmVGcm9tQXJyYXkgPSBmdW5jdGlvbiByZW1vdmVGcm9tQXJyYXkoYXJyLCBlbGUsIG9uZUNvcHkpIHtcbiAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChhcnJbaV0gPT09IGVsZSkge1xuICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgIGlmIChvbmVDb3B5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbnZhciBjbGVhckFycmF5ID0gZnVuY3Rpb24gY2xlYXJBcnJheShhcnIpIHtcbiAgYXJyLnNwbGljZSgwLCBhcnIubGVuZ3RoKTtcbn07XG52YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2goYXJyLCBvdGhlckFycikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG90aGVyQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0gb3RoZXJBcnJbaV07XG4gICAgYXJyLnB1c2goZWwpO1xuICB9XG59O1xudmFyIGdldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCkge1xuICBpZiAocHJlZml4KSB7XG4gICAgcHJvcE5hbWUgPSBwcmVwZW5kQ2FtZWwocHJlZml4LCBwcm9wTmFtZSk7IC8vIGUuZy4gKGxhYmVsV2lkdGgsIHNvdXJjZSkgPT4gc291cmNlTGFiZWxXaWR0aFxuICB9XG5cbiAgcmV0dXJuIG9ialtwcm9wTmFtZV07XG59O1xudmFyIHNldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpIHtcbiAgaWYgKHByZWZpeCkge1xuICAgIHByb3BOYW1lID0gcHJlcGVuZENhbWVsKHByZWZpeCwgcHJvcE5hbWUpOyAvLyBlLmcuIChsYWJlbFdpZHRoLCBzb3VyY2UpID0+IHNvdXJjZUxhYmVsV2lkdGhcbiAgfVxuXG4gIG9ialtwcm9wTmFtZV0gPSB2YWx1ZTtcbn07XG5cbi8qIGdsb2JhbCBNYXAgKi9cbnZhciBPYmplY3RNYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RNYXAoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE9iamVjdE1hcCk7XG4gICAgdGhpcy5fb2JqID0ge307XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKE9iamVjdE1hcCwgW3tcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChrZXksIHZhbCkge1xuICAgICAgdGhpcy5fb2JqW2tleV0gPSB2YWw7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICB0aGlzLl9vYmpba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuX29iaiA9IHt9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX29ialtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fb2JqW2tleV07XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBPYmplY3RNYXA7XG59KCk7XG52YXIgTWFwJDIgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyA/IE1hcCA6IE9iamVjdE1hcDtcblxuLyogZ2xvYmFsIFNldCAqL1xuXG52YXIgdW5kZWYgPSBcInVuZGVmaW5lZFwiIDtcbnZhciBPYmplY3RTZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RTZXQoYXJyYXlPck9iamVjdFNldCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPYmplY3RTZXQpO1xuICAgIHRoaXMuX29iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zaXplID0gMDtcbiAgICBpZiAoYXJyYXlPck9iamVjdFNldCAhPSBudWxsKSB7XG4gICAgICB2YXIgYXJyO1xuICAgICAgaWYgKGFycmF5T3JPYmplY3RTZXQuaW5zdGFuY2VTdHJpbmcgIT0gbnVsbCAmJiBhcnJheU9yT2JqZWN0U2V0Lmluc3RhbmNlU3RyaW5nKCkgPT09IHRoaXMuaW5zdGFuY2VTdHJpbmcoKSkge1xuICAgICAgICBhcnIgPSBhcnJheU9yT2JqZWN0U2V0LnRvQXJyYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyciA9IGFycmF5T3JPYmplY3RTZXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmFkZChhcnJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfY3JlYXRlQ2xhc3MoT2JqZWN0U2V0LCBbe1xuICAgIGtleTogXCJpbnN0YW5jZVN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnN0YW5jZVN0cmluZygpIHtcbiAgICAgIHJldHVybiAnc2V0JztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZCh2YWwpIHtcbiAgICAgIHZhciBvID0gdGhpcy5fb2JqO1xuICAgICAgaWYgKG9bdmFsXSAhPT0gMSkge1xuICAgICAgICBvW3ZhbF0gPSAxO1xuICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUodmFsKSB7XG4gICAgICB2YXIgbyA9IHRoaXMuX29iajtcbiAgICAgIGlmIChvW3ZhbF0gPT09IDEpIHtcbiAgICAgICAgb1t2YWxdID0gMDtcbiAgICAgICAgdGhpcy5zaXplLS07XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdGhpcy5fb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyh2YWwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmpbdmFsXSA9PT0gMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9BcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9vYmopLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYXMoa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JFYWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIE9iamVjdFNldDtcbn0oKTtcbnZhciBTZXQkMSA9ICh0eXBlb2YgU2V0ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoU2V0KSkgIT09IHVuZGVmID8gU2V0IDogT2JqZWN0U2V0O1xuXG4vLyByZXByZXNlbnRzIGEgbm9kZSBvciBhbiBlZGdlXG52YXIgRWxlbWVudCA9IGZ1bmN0aW9uIEVsZW1lbnQoY3ksIHBhcmFtcykge1xuICB2YXIgcmVzdG9yZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgaWYgKGN5ID09PSB1bmRlZmluZWQgfHwgcGFyYW1zID09PSB1bmRlZmluZWQgfHwgIWNvcmUoY3kpKSB7XG4gICAgZXJyb3IoJ0FuIGVsZW1lbnQgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UgYW5kIHBhcmFtZXRlcnMgc2V0Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBncm91cCA9IHBhcmFtcy5ncm91cDtcblxuICAvLyB0cnkgdG8gYXV0b21hdGljYWxseSBpbmZlciB0aGUgZ3JvdXAgaWYgdW5zcGVjaWZpZWRcbiAgaWYgKGdyb3VwID09IG51bGwpIHtcbiAgICBpZiAocGFyYW1zLmRhdGEgJiYgcGFyYW1zLmRhdGEuc291cmNlICE9IG51bGwgJiYgcGFyYW1zLmRhdGEudGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgIGdyb3VwID0gJ2VkZ2VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXAgPSAnbm9kZXMnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGdyb3VwXG4gIGlmIChncm91cCAhPT0gJ25vZGVzJyAmJiBncm91cCAhPT0gJ2VkZ2VzJykge1xuICAgIGVycm9yKCdBbiBlbGVtZW50IG11c3QgYmUgb2YgdHlwZSBgbm9kZXNgIG9yIGBlZGdlc2A7IHlvdSBzcGVjaWZpZWQgYCcgKyBncm91cCArICdgJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbWFrZSB0aGUgZWxlbWVudCBhcnJheS1saWtlLCBqdXN0IGxpa2UgYSBjb2xsZWN0aW9uXG4gIHRoaXMubGVuZ3RoID0gMTtcbiAgdGhpc1swXSA9IHRoaXM7XG5cbiAgLy8gTk9URTogd2hlbiBzb21ldGhpbmcgaXMgYWRkZWQgaGVyZSwgYWRkIGFsc28gdG8gZWxlLmpzb24oKVxuICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0ge1xuICAgIGN5OiBjeSxcbiAgICBzaW5nbGU6IHRydWUsXG4gICAgLy8gaW5kaWNhdGVzIHRoaXMgaXMgYW4gZWxlbWVudFxuICAgIGRhdGE6IHBhcmFtcy5kYXRhIHx8IHt9LFxuICAgIC8vIGRhdGEgb2JqZWN0XG4gICAgcG9zaXRpb246IHBhcmFtcy5wb3NpdGlvbiB8fCB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgLy8gKHgsIHkpIHBvc2l0aW9uIHBhaXJcbiAgICBhdXRvV2lkdGg6IHVuZGVmaW5lZCxcbiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IG9mIG5vZGVzIGNhbGN1bGF0ZWQgYnkgdGhlIHJlbmRlcmVyIHdoZW4gc2V0IHRvIHNwZWNpYWwgJ2F1dG8nIHZhbHVlXG4gICAgYXV0b0hlaWdodDogdW5kZWZpbmVkLFxuICAgIGF1dG9QYWRkaW5nOiB1bmRlZmluZWQsXG4gICAgY29tcG91bmRCb3VuZHNDbGVhbjogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgY29tcG91bmQgZGltZW5zaW9ucyBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCB0aGUgbmV4dCB0aW1lIGRpbWVuc2lvbnMgYXJlIHJlYWRcbiAgICBsaXN0ZW5lcnM6IFtdLFxuICAgIC8vIGFycmF5IG9mIGJvdW5kIGxpc3RlbmVyc1xuICAgIGdyb3VwOiBncm91cCxcbiAgICAvLyBzdHJpbmc7ICdub2Rlcycgb3IgJ2VkZ2VzJ1xuICAgIHN0eWxlOiB7fSxcbiAgICAvLyBwcm9wZXJ0aWVzIGFzIHNldCBieSB0aGUgc3R5bGVcbiAgICByc3R5bGU6IHt9LFxuICAgIC8vIHByb3BlcnRpZXMgZm9yIHN0eWxlIHNlbnQgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGNvcmVcbiAgICBzdHlsZUN4dHM6IFtdLFxuICAgIC8vIGFwcGxpZWQgc3R5bGUgY29udGV4dHMgZnJvbSB0aGUgc3R5bGVyXG4gICAgc3R5bGVLZXlzOiB7fSxcbiAgICAvLyBwZXItZ3JvdXAga2V5cyBvZiBzdHlsZSBwcm9wZXJ0eSB2YWx1ZXNcbiAgICByZW1vdmVkOiB0cnVlLFxuICAgIC8vIHdoZXRoZXIgaXQncyBpbnNpZGUgdGhlIHZpczsgdHJ1ZSBpZiByZW1vdmVkIChzZXQgdHJ1ZSBoZXJlIHNpbmNlIHdlIGNhbGwgcmVzdG9yZSlcbiAgICBzZWxlY3RlZDogcGFyYW1zLnNlbGVjdGVkID8gdHJ1ZSA6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgaXQncyBzZWxlY3RlZFxuICAgIHNlbGVjdGFibGU6IHBhcmFtcy5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcGFyYW1zLnNlbGVjdGFibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciBpdCdzIHNlbGVjdGFibGVcbiAgICBsb2NrZWQ6IHBhcmFtcy5sb2NrZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBsb2NrZWQgKGNhbm5vdCBiZSBtb3ZlZClcbiAgICBncmFiYmVkOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGdyYWJiZWQgYnkgdGhlIG1vdXNlOyByZW5kZXJlciBzZXRzIHRoaXMgcHJpdmF0ZWx5XG4gICAgZ3JhYmJhYmxlOiBwYXJhbXMuZ3JhYmJhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcGFyYW1zLmdyYWJiYWJsZSA/IHRydWUgOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBlbGVtZW50IGNhbiBiZSBncmFiYmVkXG4gICAgcGFubmFibGU6IHBhcmFtcy5wYW5uYWJsZSA9PT0gdW5kZWZpbmVkID8gZ3JvdXAgPT09ICdlZGdlcycgPyB0cnVlIDogZmFsc2UgOiBwYXJhbXMucGFubmFibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgcGFzc3Rocm91Z2ggcGFubmluZyBlbmFibGVkXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGFjdGl2ZSBmcm9tIHVzZXIgaW50ZXJhY3Rpb25cbiAgICBjbGFzc2VzOiBuZXcgU2V0JDEoKSxcbiAgICAvLyBtYXAgKCBjbGFzc05hbWUgPT4gdHJ1ZSApXG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAvLyBvYmplY3QgZm9yIGN1cnJlbnRseS1ydW5uaW5nIGFuaW1hdGlvbnNcbiAgICAgIGN1cnJlbnQ6IFtdLFxuICAgICAgcXVldWU6IFtdXG4gICAgfSxcbiAgICByc2NyYXRjaDoge30sXG4gICAgLy8gb2JqZWN0IGluIHdoaWNoIHRoZSByZW5kZXJlciBjYW4gc3RvcmUgaW5mb3JtYXRpb25cbiAgICBzY3JhdGNoOiBwYXJhbXMuc2NyYXRjaCB8fCB7fSxcbiAgICAvLyBzY3JhdGNoIG9iamVjdHNcbiAgICBlZGdlczogW10sXG4gICAgLy8gYXJyYXkgb2YgY29ubmVjdGVkIGVkZ2VzXG4gICAgY2hpbGRyZW46IFtdLFxuICAgIC8vIGFycmF5IG9mIGNoaWxkcmVuXG4gICAgcGFyZW50OiBwYXJhbXMucGFyZW50ICYmIHBhcmFtcy5wYXJlbnQuaXNOb2RlKCkgPyBwYXJhbXMucGFyZW50IDogbnVsbCxcbiAgICAvLyBwYXJlbnQgcmVmXG4gICAgdHJhdmVyc2FsQ2FjaGU6IHt9LFxuICAgIC8vIGNhY2hlIG9mIG91dHB1dCBvZiB0cmF2ZXJzYWwgZnVuY3Rpb25zXG4gICAgYmFja2dyb3VuZGluZzogZmFsc2UsXG4gICAgLy8gd2hldGhlciBiYWNrZ3JvdW5kIGltYWdlcyBhcmUgbG9hZGluZ1xuICAgIGJiQ2FjaGU6IG51bGwsXG4gICAgLy8gY2FjaGUgb2YgdGhlIGN1cnJlbnQgYm91bmRpbmcgYm94XG4gICAgYmJDYWNoZVNoaWZ0OiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgLy8gc2hpZnQgYXBwbGllZCB0byBjYWNoZWQgYmIgdG8gYmUgYXBwbGllZCBvbiBuZXh0IGdldFxuICAgIGJvZHlCb3VuZHM6IG51bGwsXG4gICAgLy8gYm91bmRzIGNhY2hlIG9mIGVsZW1lbnQgYm9keSwgdy9vIG92ZXJsYXlcbiAgICBvdmVybGF5Qm91bmRzOiBudWxsLFxuICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBlbGVtZW50IGJvZHksIGluY2x1ZGluZyBvdmVybGF5XG4gICAgbGFiZWxCb3VuZHM6IHtcbiAgICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBsYWJlbHNcbiAgICAgIGFsbDogbnVsbCxcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgIG1haW46IG51bGxcbiAgICB9LFxuICAgIGFycm93Qm91bmRzOiB7XG4gICAgICAvLyBib3VuZHMgY2FjaGUgb2YgZWRnZSBhcnJvd3NcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICdtaWQtc291cmNlJzogbnVsbCxcbiAgICAgICdtaWQtdGFyZ2V0JzogbnVsbFxuICAgIH1cbiAgfTtcbiAgaWYgKF9wLnBvc2l0aW9uLnggPT0gbnVsbCkge1xuICAgIF9wLnBvc2l0aW9uLnggPSAwO1xuICB9XG4gIGlmIChfcC5wb3NpdGlvbi55ID09IG51bGwpIHtcbiAgICBfcC5wb3NpdGlvbi55ID0gMDtcbiAgfVxuXG4gIC8vIHJlbmRlcmVkUG9zaXRpb24gb3ZlcnJpZGVzIGlmIHNwZWNpZmllZFxuICBpZiAocGFyYW1zLnJlbmRlcmVkUG9zaXRpb24pIHtcbiAgICB2YXIgcnBvcyA9IHBhcmFtcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICBfcC5wb3NpdGlvbiA9IHtcbiAgICAgIHg6IChycG9zLnggLSBwYW4ueCkgLyB6b29tLFxuICAgICAgeTogKHJwb3MueSAtIHBhbi55KSAvIHpvb21cbiAgICB9O1xuICB9XG4gIHZhciBjbGFzc2VzID0gW107XG4gIGlmIChhcnJheShwYXJhbXMuY2xhc3NlcykpIHtcbiAgICBjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXM7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHBhcmFtcy5jbGFzc2VzKSkge1xuICAgIGNsYXNzZXMgPSBwYXJhbXMuY2xhc3Nlcy5zcGxpdCgvXFxzKy8pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2xzID0gY2xhc3Nlc1tpXTtcbiAgICBpZiAoIWNscyB8fCBjbHMgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgX3AuY2xhc3Nlcy5hZGQoY2xzKTtcbiAgfVxuICB0aGlzLmNyZWF0ZUVtaXR0ZXIoKTtcbiAgdmFyIGJ5cGFzcyA9IHBhcmFtcy5zdHlsZSB8fCBwYXJhbXMuY3NzO1xuICBpZiAoYnlwYXNzKSB7XG4gICAgd2FybignU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLicpO1xuICAgIHRoaXMuc3R5bGUoYnlwYXNzKTtcbiAgfVxuICBpZiAocmVzdG9yZSA9PT0gdW5kZWZpbmVkIHx8IHJlc3RvcmUpIHtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgfVxufTtcblxudmFyIGRlZmluZVNlYXJjaCA9IGZ1bmN0aW9uIGRlZmluZVNlYXJjaChwYXJhbXMpIHtcbiAgcGFyYW1zID0ge1xuICAgIGJmczogcGFyYW1zLmJmcyB8fCAhcGFyYW1zLmRmcyxcbiAgICBkZnM6IHBhcmFtcy5kZnMgfHwgIXBhcmFtcy5iZnNcbiAgfTtcblxuICAvLyBmcm9tIHBzZXVkb2NvZGUgb24gd2lraXBlZGlhXG4gIHJldHVybiBmdW5jdGlvbiBzZWFyY2hGbihyb290cywgZm4sIGRpcmVjdGVkKSB7XG4gICAgdmFyIG9wdGlvbnM7XG4gICAgaWYgKHBsYWluT2JqZWN0KHJvb3RzKSAmJiAhZWxlbWVudE9yQ29sbGVjdGlvbihyb290cykpIHtcbiAgICAgIG9wdGlvbnMgPSByb290cztcbiAgICAgIHJvb3RzID0gb3B0aW9ucy5yb290cyB8fCBvcHRpb25zLnJvb3Q7XG4gICAgICBmbiA9IG9wdGlvbnMudmlzaXQ7XG4gICAgICBkaXJlY3RlZCA9IG9wdGlvbnMuZGlyZWN0ZWQ7XG4gICAgfVxuICAgIGRpcmVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAhZm4kNihmbikgPyBmbiA6IGRpcmVjdGVkO1xuICAgIGZuID0gZm4kNihmbikgPyBmbiA6IGZ1bmN0aW9uICgpIHt9O1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgdmFyIHYgPSByb290cyA9IHN0cmluZyhyb290cykgPyB0aGlzLmZpbHRlcihyb290cykgOiByb290cztcbiAgICB2YXIgUSA9IFtdO1xuICAgIHZhciBjb25uZWN0ZWROb2RlcyA9IFtdO1xuICAgIHZhciBjb25uZWN0ZWRCeSA9IHt9O1xuICAgIHZhciBpZDJkZXB0aCA9IHt9O1xuICAgIHZhciBWID0ge307XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBmb3VuZDtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuXG4gICAgLy8gZW5xdWV1ZSB2XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmkgPSB2W2ldO1xuICAgICAgdmFyIHZpSWQgPSB2aS5pZCgpO1xuICAgICAgaWYgKHZpLmlzTm9kZSgpKSB7XG4gICAgICAgIFEudW5zaGlmdCh2aSk7XG4gICAgICAgIGlmIChwYXJhbXMuYmZzKSB7XG4gICAgICAgICAgVlt2aUlkXSA9IHRydWU7XG4gICAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh2aSk7XG4gICAgICAgIH1cbiAgICAgICAgaWQyZGVwdGhbdmlJZF0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgIHZhciB2ID0gcGFyYW1zLmJmcyA/IFEuc2hpZnQoKSA6IFEucG9wKCk7XG4gICAgICB2YXIgdklkID0gdi5pZCgpO1xuICAgICAgaWYgKHBhcmFtcy5kZnMpIHtcbiAgICAgICAgaWYgKFZbdklkXSkge1xuICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgIH1cbiAgICAgICAgVlt2SWRdID0gdHJ1ZTtcbiAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh2KTtcbiAgICAgIH1cbiAgICAgIHZhciBkZXB0aCA9IGlkMmRlcHRoW3ZJZF07XG4gICAgICB2YXIgcHJldkVkZ2UgPSBjb25uZWN0ZWRCeVt2SWRdO1xuICAgICAgdmFyIHNyYyA9IHByZXZFZGdlICE9IG51bGwgPyBwcmV2RWRnZS5zb3VyY2UoKSA6IG51bGw7XG4gICAgICB2YXIgdGd0ID0gcHJldkVkZ2UgIT0gbnVsbCA/IHByZXZFZGdlLnRhcmdldCgpIDogbnVsbDtcbiAgICAgIHZhciBwcmV2Tm9kZSA9IHByZXZFZGdlID09IG51bGwgPyB1bmRlZmluZWQgOiB2LnNhbWUoc3JjKSA/IHRndFswXSA6IHNyY1swXTtcbiAgICAgIHZhciByZXQgPSB2b2lkIDA7XG4gICAgICByZXQgPSBmbih2LCBwcmV2RWRnZSwgcHJldk5vZGUsIGorKywgZGVwdGgpO1xuICAgICAgaWYgKHJldCA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZCA9IHY7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgICAgdmFyIHZ3RWRnZXMgPSB2LmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiAoIWRpcmVjdGVkIHx8IGUuc291cmNlKCkuc2FtZSh2KSkgJiYgZWRnZXMuaGFzKGUpO1xuICAgICAgfSk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCB2d0VkZ2VzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgdmFyIGUgPSB2d0VkZ2VzW19pMl07XG4gICAgICAgIHZhciB3ID0gZS5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgICAgIHJldHVybiAhbi5zYW1lKHYpICYmIG5vZGVzLmhhcyhuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB3SWQgPSB3LmlkKCk7XG4gICAgICAgIGlmICh3Lmxlbmd0aCAhPT0gMCAmJiAhVlt3SWRdKSB7XG4gICAgICAgICAgdyA9IHdbMF07XG4gICAgICAgICAgUS5wdXNoKHcpO1xuICAgICAgICAgIGlmIChwYXJhbXMuYmZzKSB7XG4gICAgICAgICAgICBWW3dJZF0gPSB0cnVlO1xuICAgICAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh3KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29ubmVjdGVkQnlbd0lkXSA9IGU7XG4gICAgICAgICAgaWQyZGVwdGhbd0lkXSA9IGlkMmRlcHRoW3ZJZF0gKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoUS5sZW5ndGggIT09IDApIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoKTtcbiAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICAgIHZhciBjb25uZWN0ZWRFbGVzID0gY3kuY29sbGVjdGlvbigpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb25uZWN0ZWROb2Rlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBub2RlID0gY29ubmVjdGVkTm9kZXNbX2ldO1xuICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRCeVtub2RlLmlkKCldO1xuICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xuICAgICAgICBjb25uZWN0ZWRFbGVzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgICBjb25uZWN0ZWRFbGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBjeS5jb2xsZWN0aW9uKGNvbm5lY3RlZEVsZXMpLFxuICAgICAgZm91bmQ6IGN5LmNvbGxlY3Rpb24oZm91bmQpXG4gICAgfTtcbiAgfTtcbn07XG5cbi8vIHNlYXJjaCwgc3Bhbm5pbmcgdHJlZXMsIGV0Y1xudmFyIGVsZXNmbiR2ID0ge1xuICBicmVhZHRoRmlyc3RTZWFyY2g6IGRlZmluZVNlYXJjaCh7XG4gICAgYmZzOiB0cnVlXG4gIH0pLFxuICBkZXB0aEZpcnN0U2VhcmNoOiBkZWZpbmVTZWFyY2goe1xuICAgIGRmczogdHJ1ZVxuICB9KVxufTtcblxuLy8gbmljZSwgc2hvcnQgbWF0aGVtYXRpY2FsIGFsaWFzXG5lbGVzZm4kdi5iZnMgPSBlbGVzZm4kdi5icmVhZHRoRmlyc3RTZWFyY2g7XG5lbGVzZm4kdi5kZnMgPSBlbGVzZm4kdi5kZXB0aEZpcnN0U2VhcmNoO1xuXG52YXIgaGVhcCQxID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjguMFxuKGZ1bmN0aW9uKCkge1xuICB2YXIgSGVhcCwgZGVmYXVsdENtcCwgZmxvb3IsIGhlYXBpZnksIGhlYXBwb3AsIGhlYXBwdXNoLCBoZWFwcHVzaHBvcCwgaGVhcHJlcGxhY2UsIGluc29ydCwgbWluLCBubGFyZ2VzdCwgbnNtYWxsZXN0LCB1cGRhdGVJdGVtLCBfc2lmdGRvd24sIF9zaWZ0dXA7XG5cbiAgZmxvb3IgPSBNYXRoLmZsb29yLCBtaW4gPSBNYXRoLm1pbjtcblxuXG4gIC8qXG4gIERlZmF1bHQgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSB1c2VkXG4gICAqL1xuXG4gIGRlZmF1bHRDbXAgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgaWYgKHggPCB5KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICh4ID4geSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9O1xuXG5cbiAgLypcbiAgSW5zZXJ0IGl0ZW0geCBpbiBsaXN0IGEsIGFuZCBrZWVwIGl0IHNvcnRlZCBhc3N1bWluZyBhIGlzIHNvcnRlZC5cbiAgXG4gIElmIHggaXMgYWxyZWFkeSBpbiBhLCBpbnNlcnQgaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgeC5cbiAgXG4gIE9wdGlvbmFsIGFyZ3MgbG8gKGRlZmF1bHQgMCkgYW5kIGhpIChkZWZhdWx0IGEubGVuZ3RoKSBib3VuZCB0aGUgc2xpY2VcbiAgb2YgYSB0byBiZSBzZWFyY2hlZC5cbiAgICovXG5cbiAgaW5zb3J0ID0gZnVuY3Rpb24oYSwgeCwgbG8sIGhpLCBjbXApIHtcbiAgICB2YXIgbWlkO1xuICAgIGlmIChsbyA9PSBudWxsKSB7XG4gICAgICBsbyA9IDA7XG4gICAgfVxuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgaWYgKGxvIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsbyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgIH1cbiAgICBpZiAoaGkgPT0gbnVsbCkge1xuICAgICAgaGkgPSBhLmxlbmd0aDtcbiAgICB9XG4gICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgIG1pZCA9IGZsb29yKChsbyArIGhpKSAvIDIpO1xuICAgICAgaWYgKGNtcCh4LCBhW21pZF0pIDwgMCkge1xuICAgICAgICBoaSA9IG1pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvID0gbWlkICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChbXS5zcGxpY2UuYXBwbHkoYSwgW2xvLCBsbyAtIGxvXS5jb25jYXQoeCkpLCB4KTtcbiAgfTtcblxuXG4gIC8qXG4gIFB1c2ggaXRlbSBvbnRvIGhlYXAsIG1haW50YWluaW5nIHRoZSBoZWFwIGludmFyaWFudC5cbiAgICovXG5cbiAgaGVhcHB1c2ggPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICBhcnJheS5wdXNoKGl0ZW0pO1xuICAgIHJldHVybiBfc2lmdGRvd24oYXJyYXksIDAsIGFycmF5Lmxlbmd0aCAtIDEsIGNtcCk7XG4gIH07XG5cblxuICAvKlxuICBQb3AgdGhlIHNtYWxsZXN0IGl0ZW0gb2ZmIHRoZSBoZWFwLCBtYWludGFpbmluZyB0aGUgaGVhcCBpbnZhcmlhbnQuXG4gICAqL1xuXG4gIGhlYXBwb3AgPSBmdW5jdGlvbihhcnJheSwgY21wKSB7XG4gICAgdmFyIGxhc3RlbHQsIHJldHVybml0ZW07XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICBsYXN0ZWx0ID0gYXJyYXkucG9wKCk7XG4gICAgaWYgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuaXRlbSA9IGFycmF5WzBdO1xuICAgICAgYXJyYXlbMF0gPSBsYXN0ZWx0O1xuICAgICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuaXRlbSA9IGxhc3RlbHQ7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5pdGVtO1xuICB9O1xuXG5cbiAgLypcbiAgUG9wIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgc21hbGxlc3QgdmFsdWUsIGFuZCBhZGQgdGhlIG5ldyBpdGVtLlxuICBcbiAgVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGhlYXBwb3AoKSBmb2xsb3dlZCBieSBoZWFwcHVzaCgpLCBhbmQgY2FuIGJlXG4gIG1vcmUgYXBwcm9wcmlhdGUgd2hlbiB1c2luZyBhIGZpeGVkIHNpemUgaGVhcC4gTm90ZSB0aGF0IHRoZSB2YWx1ZVxuICByZXR1cm5lZCBtYXkgYmUgbGFyZ2VyIHRoYW4gaXRlbSEgVGhhdCBjb25zdHJhaW5zIHJlYXNvbmFibGUgdXNlIG9mXG4gIHRoaXMgcm91dGluZSB1bmxlc3Mgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgcmVwbGFjZW1lbnQ6XG4gICAgICBpZiBpdGVtID4gYXJyYXlbMF1cbiAgICAgICAgaXRlbSA9IGhlYXByZXBsYWNlKGFycmF5LCBpdGVtKVxuICAgKi9cblxuICBoZWFwcmVwbGFjZSA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjbXApIHtcbiAgICB2YXIgcmV0dXJuaXRlbTtcbiAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgfVxuICAgIHJldHVybml0ZW0gPSBhcnJheVswXTtcbiAgICBhcnJheVswXSA9IGl0ZW07XG4gICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcbiAgICByZXR1cm4gcmV0dXJuaXRlbTtcbiAgfTtcblxuXG4gIC8qXG4gIEZhc3QgdmVyc2lvbiBvZiBhIGhlYXBwdXNoIGZvbGxvd2VkIGJ5IGEgaGVhcHBvcC5cbiAgICovXG5cbiAgaGVhcHB1c2hwb3AgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgdmFyIF9yZWY7XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICBpZiAoYXJyYXkubGVuZ3RoICYmIGNtcChhcnJheVswXSwgaXRlbSkgPCAwKSB7XG4gICAgICBfcmVmID0gW2FycmF5WzBdLCBpdGVtXSwgaXRlbSA9IF9yZWZbMF0sIGFycmF5WzBdID0gX3JlZlsxXTtcbiAgICAgIF9zaWZ0dXAoYXJyYXksIDAsIGNtcCk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9O1xuXG5cbiAgLypcbiAgVHJhbnNmb3JtIGxpc3QgaW50byBhIGhlYXAsIGluLXBsYWNlLCBpbiBPKGFycmF5Lmxlbmd0aCkgdGltZS5cbiAgICovXG5cbiAgaGVhcGlmeSA9IGZ1bmN0aW9uKGFycmF5LCBjbXApIHtcbiAgICB2YXIgaSwgX2ksIF9sZW4sIF9yZWYxLCBfcmVzdWx0cywgX3Jlc3VsdHMxO1xuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgX3JlZjEgPSAoZnVuY3Rpb24oKSB7XG4gICAgICBfcmVzdWx0czEgPSBbXTtcbiAgICAgIGZvciAodmFyIF9qID0gMCwgX3JlZiA9IGZsb29yKGFycmF5Lmxlbmd0aCAvIDIpOyAwIDw9IF9yZWYgPyBfaiA8IF9yZWYgOiBfaiA+IF9yZWY7IDAgPD0gX3JlZiA/IF9qKysgOiBfai0tKXsgX3Jlc3VsdHMxLnB1c2goX2opOyB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHMxO1xuICAgIH0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKTtcbiAgICBfcmVzdWx0cyA9IFtdO1xuICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGkgPSBfcmVmMVtfaV07XG4gICAgICBfcmVzdWx0cy5wdXNoKF9zaWZ0dXAoYXJyYXksIGksIGNtcCkpO1xuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHM7XG4gIH07XG5cblxuICAvKlxuICBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBnaXZlbiBpdGVtIGluIHRoZSBoZWFwLlxuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgaXRlbSBpcyBiZWluZyBtb2RpZmllZC5cbiAgICovXG5cbiAgdXBkYXRlSXRlbSA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjbXApIHtcbiAgICB2YXIgcG9zO1xuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgcG9zID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfc2lmdGRvd24oYXJyYXksIDAsIHBvcywgY21wKTtcbiAgICByZXR1cm4gX3NpZnR1cChhcnJheSwgcG9zLCBjbXApO1xuICB9O1xuXG5cbiAgLypcbiAgRmluZCB0aGUgbiBsYXJnZXN0IGVsZW1lbnRzIGluIGEgZGF0YXNldC5cbiAgICovXG5cbiAgbmxhcmdlc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgY21wKSB7XG4gICAgdmFyIGVsZW0sIHJlc3VsdCwgX2ksIF9sZW4sIF9yZWY7XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICByZXN1bHQgPSBhcnJheS5zbGljZSgwLCBuKTtcbiAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGhlYXBpZnkocmVzdWx0LCBjbXApO1xuICAgIF9yZWYgPSBhcnJheS5zbGljZShuKTtcbiAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGVsZW0gPSBfcmVmW19pXTtcbiAgICAgIGhlYXBwdXNocG9wKHJlc3VsdCwgZWxlbSwgY21wKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KGNtcCkucmV2ZXJzZSgpO1xuICB9O1xuXG5cbiAgLypcbiAgRmluZCB0aGUgbiBzbWFsbGVzdCBlbGVtZW50cyBpbiBhIGRhdGFzZXQuXG4gICAqL1xuXG4gIG5zbWFsbGVzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBjbXApIHtcbiAgICB2YXIgZWxlbSwgbG9zLCByZXN1bHQsIF9pLCBfaiwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgaWYgKG4gKiAxMCA8PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IGFycmF5LnNsaWNlKDAsIG4pLnNvcnQoY21wKTtcbiAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbG9zID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIF9yZWYgPSBhcnJheS5zbGljZShuKTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBlbGVtID0gX3JlZltfaV07XG4gICAgICAgIGlmIChjbXAoZWxlbSwgbG9zKSA8IDApIHtcbiAgICAgICAgICBpbnNvcnQocmVzdWx0LCBlbGVtLCAwLCBudWxsLCBjbXApO1xuICAgICAgICAgIHJlc3VsdC5wb3AoKTtcbiAgICAgICAgICBsb3MgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBoZWFwaWZ5KGFycmF5LCBjbXApO1xuICAgIF9yZXN1bHRzID0gW107XG4gICAgZm9yIChfaiA9IDAsIF9yZWYxID0gbWluKG4sIGFycmF5Lmxlbmd0aCk7IDAgPD0gX3JlZjEgPyBfaiA8IF9yZWYxIDogX2ogPiBfcmVmMTsgMCA8PSBfcmVmMSA/ICsrX2ogOiAtLV9qKSB7XG4gICAgICBfcmVzdWx0cy5wdXNoKGhlYXBwb3AoYXJyYXksIGNtcCkpO1xuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHM7XG4gIH07XG5cbiAgX3NpZnRkb3duID0gZnVuY3Rpb24oYXJyYXksIHN0YXJ0cG9zLCBwb3MsIGNtcCkge1xuICAgIHZhciBuZXdpdGVtLCBwYXJlbnQsIHBhcmVudHBvcztcbiAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgfVxuICAgIG5ld2l0ZW0gPSBhcnJheVtwb3NdO1xuICAgIHdoaWxlIChwb3MgPiBzdGFydHBvcykge1xuICAgICAgcGFyZW50cG9zID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICBwYXJlbnQgPSBhcnJheVtwYXJlbnRwb3NdO1xuICAgICAgaWYgKGNtcChuZXdpdGVtLCBwYXJlbnQpIDwgMCkge1xuICAgICAgICBhcnJheVtwb3NdID0gcGFyZW50O1xuICAgICAgICBwb3MgPSBwYXJlbnRwb3M7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBhcnJheVtwb3NdID0gbmV3aXRlbTtcbiAgfTtcblxuICBfc2lmdHVwID0gZnVuY3Rpb24oYXJyYXksIHBvcywgY21wKSB7XG4gICAgdmFyIGNoaWxkcG9zLCBlbmRwb3MsIG5ld2l0ZW0sIHJpZ2h0cG9zLCBzdGFydHBvcztcbiAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgfVxuICAgIGVuZHBvcyA9IGFycmF5Lmxlbmd0aDtcbiAgICBzdGFydHBvcyA9IHBvcztcbiAgICBuZXdpdGVtID0gYXJyYXlbcG9zXTtcbiAgICBjaGlsZHBvcyA9IDIgKiBwb3MgKyAxO1xuICAgIHdoaWxlIChjaGlsZHBvcyA8IGVuZHBvcykge1xuICAgICAgcmlnaHRwb3MgPSBjaGlsZHBvcyArIDE7XG4gICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MgJiYgIShjbXAoYXJyYXlbY2hpbGRwb3NdLCBhcnJheVtyaWdodHBvc10pIDwgMCkpIHtcbiAgICAgICAgY2hpbGRwb3MgPSByaWdodHBvcztcbiAgICAgIH1cbiAgICAgIGFycmF5W3Bvc10gPSBhcnJheVtjaGlsZHBvc107XG4gICAgICBwb3MgPSBjaGlsZHBvcztcbiAgICAgIGNoaWxkcG9zID0gMiAqIHBvcyArIDE7XG4gICAgfVxuICAgIGFycmF5W3Bvc10gPSBuZXdpdGVtO1xuICAgIHJldHVybiBfc2lmdGRvd24oYXJyYXksIHN0YXJ0cG9zLCBwb3MsIGNtcCk7XG4gIH07XG5cbiAgSGVhcCA9IChmdW5jdGlvbigpIHtcbiAgICBIZWFwLnB1c2ggPSBoZWFwcHVzaDtcblxuICAgIEhlYXAucG9wID0gaGVhcHBvcDtcblxuICAgIEhlYXAucmVwbGFjZSA9IGhlYXByZXBsYWNlO1xuXG4gICAgSGVhcC5wdXNocG9wID0gaGVhcHB1c2hwb3A7XG5cbiAgICBIZWFwLmhlYXBpZnkgPSBoZWFwaWZ5O1xuXG4gICAgSGVhcC51cGRhdGVJdGVtID0gdXBkYXRlSXRlbTtcblxuICAgIEhlYXAubmxhcmdlc3QgPSBubGFyZ2VzdDtcblxuICAgIEhlYXAubnNtYWxsZXN0ID0gbnNtYWxsZXN0O1xuXG4gICAgZnVuY3Rpb24gSGVhcChjbXApIHtcbiAgICAgIHRoaXMuY21wID0gY21wICE9IG51bGwgPyBjbXAgOiBkZWZhdWx0Q21wO1xuICAgICAgdGhpcy5ub2RlcyA9IFtdO1xuICAgIH1cblxuICAgIEhlYXAucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gaGVhcHB1c2godGhpcy5ub2RlcywgeCwgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBoZWFwcG9wKHRoaXMubm9kZXMsIHRoaXMuY21wKTtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXNbMF07XG4gICAgfTtcblxuICAgIEhlYXAucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZih4KSAhPT0gLTE7XG4gICAgfTtcblxuICAgIEhlYXAucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gaGVhcHJlcGxhY2UodGhpcy5ub2RlcywgeCwgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5wdXNocG9wID0gZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIGhlYXBwdXNocG9wKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUuaGVhcGlmeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGhlYXBpZnkodGhpcy5ub2RlcywgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS51cGRhdGVJdGVtID0gZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUl0ZW0odGhpcy5ub2RlcywgeCwgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMgPSBbXTtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhlYXA7XG4gICAgICBoZWFwID0gbmV3IEhlYXAoKTtcbiAgICAgIGhlYXAubm9kZXMgPSB0aGlzLm5vZGVzLnNsaWNlKDApO1xuICAgICAgcmV0dXJuIGhlYXA7XG4gICAgfTtcblxuICAgIEhlYXAucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBIZWFwLnByb3RvdHlwZS5wdXNoO1xuXG4gICAgSGVhcC5wcm90b3R5cGUudG9wID0gSGVhcC5wcm90b3R5cGUucGVlaztcblxuICAgIEhlYXAucHJvdG90eXBlLmZyb250ID0gSGVhcC5wcm90b3R5cGUucGVlaztcblxuICAgIEhlYXAucHJvdG90eXBlLmhhcyA9IEhlYXAucHJvdG90eXBlLmNvbnRhaW5zO1xuXG4gICAgSGVhcC5wcm90b3R5cGUuY29weSA9IEhlYXAucHJvdG90eXBlLmNsb25lO1xuXG4gICAgcmV0dXJuIEhlYXA7XG5cbiAgfSkoKTtcblxuICAoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIHtcbiAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9XG4gIH0pKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBIZWFwO1xuICB9KTtcblxufSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG59KTtcblxudmFyIGhlYXAgPSBoZWFwJDE7XG5cbnZhciBkaWprc3RyYURlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHJvb3Q6IG51bGwsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZGlyZWN0ZWQ6IGZhbHNlXG59KTtcbnZhciBlbGVzZm4kdSA9IHtcbiAgZGlqa3N0cmE6IGZ1bmN0aW9uIGRpamtzdHJhKG9wdGlvbnMpIHtcbiAgICBpZiAoIXBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHJvb3Q6IGFyZ3NbMF0sXG4gICAgICAgIHdlaWdodDogYXJnc1sxXSxcbiAgICAgICAgZGlyZWN0ZWQ6IGFyZ3NbMl1cbiAgICAgIH07XG4gICAgfVxuICAgIHZhciBfZGlqa3N0cmFEZWZhdWx0cyA9IGRpamtzdHJhRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICByb290ID0gX2RpamtzdHJhRGVmYXVsdHMucm9vdCxcbiAgICAgIHdlaWdodCA9IF9kaWprc3RyYURlZmF1bHRzLndlaWdodCxcbiAgICAgIGRpcmVjdGVkID0gX2RpamtzdHJhRGVmYXVsdHMuZGlyZWN0ZWQ7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciB3ZWlnaHRGbiA9IHdlaWdodDtcbiAgICB2YXIgc291cmNlID0gc3RyaW5nKHJvb3QpID8gdGhpcy5maWx0ZXIocm9vdClbMF0gOiByb290WzBdO1xuICAgIHZhciBkaXN0ID0ge307XG4gICAgdmFyIHByZXYgPSB7fTtcbiAgICB2YXIga25vd25EaXN0ID0ge307XG4gICAgdmFyIF90aGlzJGJ5R3JvdXAgPSB0aGlzLmJ5R3JvdXAoKSxcbiAgICAgIG5vZGVzID0gX3RoaXMkYnlHcm91cC5ub2RlcyxcbiAgICAgIGVkZ2VzID0gX3RoaXMkYnlHcm91cC5lZGdlcztcbiAgICBlZGdlcy51bm1lcmdlQnkoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0xvb3AoKTtcbiAgICB9KTtcbiAgICB2YXIgZ2V0RGlzdCA9IGZ1bmN0aW9uIGdldERpc3Qobm9kZSkge1xuICAgICAgcmV0dXJuIGRpc3Rbbm9kZS5pZCgpXTtcbiAgICB9O1xuICAgIHZhciBzZXREaXN0ID0gZnVuY3Rpb24gc2V0RGlzdChub2RlLCBkKSB7XG4gICAgICBkaXN0W25vZGUuaWQoKV0gPSBkO1xuICAgICAgUS51cGRhdGVJdGVtKG5vZGUpO1xuICAgIH07XG4gICAgdmFyIFEgPSBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGdldERpc3QoYSkgLSBnZXREaXN0KGIpO1xuICAgIH0pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICBkaXN0W25vZGUuaWQoKV0gPSBub2RlLnNhbWUoc291cmNlKSA/IDAgOiBJbmZpbml0eTtcbiAgICAgIFEucHVzaChub2RlKTtcbiAgICB9XG4gICAgdmFyIGRpc3RCZXR3ZWVuID0gZnVuY3Rpb24gZGlzdEJldHdlZW4odSwgdikge1xuICAgICAgdmFyIHV2cyA9IChkaXJlY3RlZCA/IHUuZWRnZXNUbyh2KSA6IHUuZWRnZXNXaXRoKHYpKS5pbnRlcnNlY3QoZWRnZXMpO1xuICAgICAgdmFyIHNtYWxsZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgIHZhciBzbWFsbGVzdEVkZ2U7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdXZzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZWRnZSA9IHV2c1tfaV07XG4gICAgICAgIHZhciBfd2VpZ2h0ID0gd2VpZ2h0Rm4oZWRnZSk7XG4gICAgICAgIGlmIChfd2VpZ2h0IDwgc21hbGxlc3REaXN0YW5jZSB8fCAhc21hbGxlc3RFZGdlKSB7XG4gICAgICAgICAgc21hbGxlc3REaXN0YW5jZSA9IF93ZWlnaHQ7XG4gICAgICAgICAgc21hbGxlc3RFZGdlID0gZWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRnZTogc21hbGxlc3RFZGdlLFxuICAgICAgICBkaXN0OiBzbWFsbGVzdERpc3RhbmNlXG4gICAgICB9O1xuICAgIH07XG4gICAgd2hpbGUgKFEuc2l6ZSgpID4gMCkge1xuICAgICAgdmFyIHUgPSBRLnBvcCgpO1xuICAgICAgdmFyIHNtYWxsZXRzRGlzdCA9IGdldERpc3QodSk7XG4gICAgICB2YXIgdWlkID0gdS5pZCgpO1xuICAgICAga25vd25EaXN0W3VpZF0gPSBzbWFsbGV0c0Rpc3Q7XG4gICAgICBpZiAoc21hbGxldHNEaXN0ID09PSBJbmZpbml0eSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBuZWlnaGJvcnMgPSB1Lm5laWdoYm9yaG9vZCgpLmludGVyc2VjdChub2Rlcyk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBuZWlnaGJvcnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgdiA9IG5laWdoYm9yc1tfaTJdO1xuICAgICAgICB2YXIgdmlkID0gdi5pZCgpO1xuICAgICAgICB2YXIgdkRpc3QgPSBkaXN0QmV0d2Vlbih1LCB2KTtcbiAgICAgICAgdmFyIGFsdCA9IHNtYWxsZXRzRGlzdCArIHZEaXN0LmRpc3Q7XG4gICAgICAgIGlmIChhbHQgPCBnZXREaXN0KHYpKSB7XG4gICAgICAgICAgc2V0RGlzdCh2LCBhbHQpO1xuICAgICAgICAgIHByZXZbdmlkXSA9IHtcbiAgICAgICAgICAgIG5vZGU6IHUsXG4gICAgICAgICAgICBlZGdlOiB2RGlzdC5lZGdlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBmb3JcbiAgICB9IC8vIHdoaWxlXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzdGFuY2VUbzogZnVuY3Rpb24gZGlzdGFuY2VUbyhub2RlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBzdHJpbmcobm9kZSkgPyBub2Rlcy5maWx0ZXIobm9kZSlbMF0gOiBub2RlWzBdO1xuICAgICAgICByZXR1cm4ga25vd25EaXN0W3RhcmdldC5pZCgpXTtcbiAgICAgIH0sXG4gICAgICBwYXRoVG86IGZ1bmN0aW9uIHBhdGhUbyhub2RlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBzdHJpbmcobm9kZSkgPyBub2Rlcy5maWx0ZXIobm9kZSlbMF0gOiBub2RlWzBdO1xuICAgICAgICB2YXIgUyA9IFtdO1xuICAgICAgICB2YXIgdSA9IHRhcmdldDtcbiAgICAgICAgdmFyIHVpZCA9IHUuaWQoKTtcbiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgUy51bnNoaWZ0KHRhcmdldCk7XG4gICAgICAgICAgd2hpbGUgKHByZXZbdWlkXSkge1xuICAgICAgICAgICAgdmFyIHAgPSBwcmV2W3VpZF07XG4gICAgICAgICAgICBTLnVuc2hpZnQocC5lZGdlKTtcbiAgICAgICAgICAgIFMudW5zaGlmdChwLm5vZGUpO1xuICAgICAgICAgICAgdSA9IHAubm9kZTtcbiAgICAgICAgICAgIHVpZCA9IHUuaWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZXMuc3Bhd24oUyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIGVsZXNmbiR0ID0ge1xuICAvLyBrcnVza2FsJ3MgYWxnb3JpdGhtIChmaW5kcyBtaW4gc3Bhbm5pbmcgdHJlZSwgYXNzdW1pbmcgdW5kaXJlY3RlZCBncmFwaClcbiAgLy8gaW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gIGtydXNrYWw6IGZ1bmN0aW9uIGtydXNrYWwod2VpZ2h0Rm4pIHtcbiAgICB3ZWlnaHRGbiA9IHdlaWdodEZuIHx8IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9O1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgdmFyIG51bU5vZGVzID0gbm9kZXMubGVuZ3RoO1xuICAgIHZhciBmb3Jlc3QgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciBBID0gbm9kZXM7IC8vIGFzc3VtZXMgYnlHcm91cCgpIGNyZWF0ZXMgbmV3IGNvbGxlY3Rpb25zIHRoYXQgY2FuIGJlIHNhZmVseSBtdXRhdGVkXG5cbiAgICB2YXIgZmluZFNldEluZGV4ID0gZnVuY3Rpb24gZmluZFNldEluZGV4KGVsZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZXMgPSBmb3Jlc3RbaV07XG4gICAgICAgIGlmIChlbGVzLmhhcyhlbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gc3RhcnQgd2l0aCBvbmUgZm9yZXN0IHBlciBub2RlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Ob2RlczsgaSsrKSB7XG4gICAgICBmb3Jlc3RbaV0gPSB0aGlzLnNwYXduKG5vZGVzW2ldKTtcbiAgICB9XG4gICAgdmFyIFMgPSBlZGdlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gd2VpZ2h0Rm4oYSkgLSB3ZWlnaHRGbihiKTtcbiAgICB9KTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgUy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBlZGdlID0gU1tfaV07XG4gICAgICB2YXIgdSA9IGVkZ2Uuc291cmNlKClbMF07XG4gICAgICB2YXIgdiA9IGVkZ2UudGFyZ2V0KClbMF07XG4gICAgICB2YXIgc2V0VUluZGV4ID0gZmluZFNldEluZGV4KHUpO1xuICAgICAgdmFyIHNldFZJbmRleCA9IGZpbmRTZXRJbmRleCh2KTtcbiAgICAgIHZhciBzZXRVID0gZm9yZXN0W3NldFVJbmRleF07XG4gICAgICB2YXIgc2V0ViA9IGZvcmVzdFtzZXRWSW5kZXhdO1xuICAgICAgaWYgKHNldFVJbmRleCAhPT0gc2V0VkluZGV4KSB7XG4gICAgICAgIEEubWVyZ2UoZWRnZSk7XG5cbiAgICAgICAgLy8gY29tYmluZSBmb3Jlc3RzIGZvciB1IGFuZCB2XG4gICAgICAgIHNldFUubWVyZ2Uoc2V0Vik7XG4gICAgICAgIGZvcmVzdC5zcGxpY2Uoc2V0VkluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEE7XG4gIH1cbn07XG5cbnZhciBhU3RhckRlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHJvb3Q6IG51bGwsXG4gIGdvYWw6IG51bGwsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgaGV1cmlzdGljOiBmdW5jdGlvbiBoZXVyaXN0aWMoZWRnZSkge1xuICAgIHJldHVybiAwO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRzID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgYVN0YXI6IGZ1bmN0aW9uIGFTdGFyKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIF9hU3RhckRlZmF1bHRzID0gYVN0YXJEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgIHJvb3QgPSBfYVN0YXJEZWZhdWx0cy5yb290LFxuICAgICAgZ29hbCA9IF9hU3RhckRlZmF1bHRzLmdvYWwsXG4gICAgICBoZXVyaXN0aWMgPSBfYVN0YXJEZWZhdWx0cy5oZXVyaXN0aWMsXG4gICAgICBkaXJlY3RlZCA9IF9hU3RhckRlZmF1bHRzLmRpcmVjdGVkLFxuICAgICAgd2VpZ2h0ID0gX2FTdGFyRGVmYXVsdHMud2VpZ2h0O1xuICAgIHJvb3QgPSBjeS5jb2xsZWN0aW9uKHJvb3QpWzBdO1xuICAgIGdvYWwgPSBjeS5jb2xsZWN0aW9uKGdvYWwpWzBdO1xuICAgIHZhciBzaWQgPSByb290LmlkKCk7XG4gICAgdmFyIHRpZCA9IGdvYWwuaWQoKTtcbiAgICB2YXIgZ1Njb3JlID0ge307XG4gICAgdmFyIGZTY29yZSA9IHt9O1xuICAgIHZhciBjbG9zZWRTZXRJZHMgPSB7fTtcbiAgICB2YXIgb3BlblNldCA9IG5ldyBoZWFwKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZlNjb3JlW2EuaWQoKV0gLSBmU2NvcmVbYi5pZCgpXTtcbiAgICB9KTtcbiAgICB2YXIgb3BlblNldElkcyA9IG5ldyBTZXQkMSgpO1xuICAgIHZhciBjYW1lRnJvbSA9IHt9O1xuICAgIHZhciBjYW1lRnJvbUVkZ2UgPSB7fTtcbiAgICB2YXIgYWRkVG9PcGVuU2V0ID0gZnVuY3Rpb24gYWRkVG9PcGVuU2V0KGVsZSwgaWQpIHtcbiAgICAgIG9wZW5TZXQucHVzaChlbGUpO1xuICAgICAgb3BlblNldElkcy5hZGQoaWQpO1xuICAgIH07XG4gICAgdmFyIGNNaW4sIGNNaW5JZDtcbiAgICB2YXIgcG9wRnJvbU9wZW5TZXQgPSBmdW5jdGlvbiBwb3BGcm9tT3BlblNldCgpIHtcbiAgICAgIGNNaW4gPSBvcGVuU2V0LnBvcCgpO1xuICAgICAgY01pbklkID0gY01pbi5pZCgpO1xuICAgICAgb3BlblNldElkc1tcImRlbGV0ZVwiXShjTWluSWQpO1xuICAgIH07XG4gICAgdmFyIGlzSW5PcGVuU2V0ID0gZnVuY3Rpb24gaXNJbk9wZW5TZXQoaWQpIHtcbiAgICAgIHJldHVybiBvcGVuU2V0SWRzLmhhcyhpZCk7XG4gICAgfTtcbiAgICBhZGRUb09wZW5TZXQocm9vdCwgc2lkKTtcbiAgICBnU2NvcmVbc2lkXSA9IDA7XG4gICAgZlNjb3JlW3NpZF0gPSBoZXVyaXN0aWMocm9vdCk7XG5cbiAgICAvLyBDb3VudGVyXG4gICAgdmFyIHN0ZXBzID0gMDtcblxuICAgIC8vIE1haW4gbG9vcFxuICAgIHdoaWxlIChvcGVuU2V0LnNpemUoKSA+IDApIHtcbiAgICAgIHBvcEZyb21PcGVuU2V0KCk7XG4gICAgICBzdGVwcysrO1xuXG4gICAgICAvLyBJZiB3ZSd2ZSBmb3VuZCBvdXIgZ29hbCwgdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgaWYgKGNNaW5JZCA9PT0gdGlkKSB7XG4gICAgICAgIHZhciBwYXRoID0gW107XG4gICAgICAgIHZhciBwYXRoTm9kZSA9IGdvYWw7XG4gICAgICAgIHZhciBwYXRoTm9kZUlkID0gdGlkO1xuICAgICAgICB2YXIgcGF0aEVkZ2UgPSBjYW1lRnJvbUVkZ2VbcGF0aE5vZGVJZF07XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICBwYXRoLnVuc2hpZnQocGF0aE5vZGUpO1xuICAgICAgICAgIGlmIChwYXRoRWRnZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQocGF0aEVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoTm9kZSA9IGNhbWVGcm9tW3BhdGhOb2RlSWRdO1xuICAgICAgICAgIGlmIChwYXRoTm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0aE5vZGVJZCA9IHBhdGhOb2RlLmlkKCk7XG4gICAgICAgICAgcGF0aEVkZ2UgPSBjYW1lRnJvbUVkZ2VbcGF0aE5vZGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmb3VuZDogdHJ1ZSxcbiAgICAgICAgICBkaXN0YW5jZTogZ1Njb3JlW2NNaW5JZF0sXG4gICAgICAgICAgcGF0aDogdGhpcy5zcGF3bihwYXRoKSxcbiAgICAgICAgICBzdGVwczogc3RlcHNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGNNaW4gdG8gcHJvY2Vzc2VkIG5vZGVzXG4gICAgICBjbG9zZWRTZXRJZHNbY01pbklkXSA9IHRydWU7XG5cbiAgICAgIC8vIFVwZGF0ZSBzY29yZXMgZm9yIG5laWdoYm9ycyBvZiBjTWluXG4gICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBpZiBncmFwaCBpcyBkaXJlY3RlZCBvciBub3RcbiAgICAgIHZhciB2d0VkZ2VzID0gY01pbi5fcHJpdmF0ZS5lZGdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdndFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZSA9IHZ3RWRnZXNbaV07XG5cbiAgICAgICAgLy8gZWRnZSBtdXN0IGJlIGluIHNldCBvZiBjYWxsaW5nIGVsZXNcbiAgICAgICAgaWYgKCF0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZS5pZCgpKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY01pbiBtdXN0IGJlIHRoZSBzb3VyY2Ugb2YgZWRnZSBpZiBkaXJlY3RlZFxuICAgICAgICBpZiAoZGlyZWN0ZWQgJiYgZS5kYXRhKCdzb3VyY2UnKSAhPT0gY01pbklkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdTcmMgPSBlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgd1RndCA9IGUudGFyZ2V0KCk7XG4gICAgICAgIHZhciB3ID0gd1NyYy5pZCgpICE9PSBjTWluSWQgPyB3U3JjIDogd1RndDtcbiAgICAgICAgdmFyIHdpZCA9IHcuaWQoKTtcblxuICAgICAgICAvLyBub2RlIG11c3QgYmUgaW4gc2V0IG9mIGNhbGxpbmcgZWxlc1xuICAgICAgICBpZiAoIXRoaXMuaGFzRWxlbWVudFdpdGhJZCh3aWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBub2RlIGlzIGluIGNsb3NlZFNldCwgaWdub3JlIGl0XG4gICAgICAgIGlmIChjbG9zZWRTZXRJZHNbd2lkXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmV3IHRlbnRhdGl2ZSBzY29yZSBmb3Igbm9kZSB3XG4gICAgICAgIHZhciB0ZW1wU2NvcmUgPSBnU2NvcmVbY01pbklkXSArIHdlaWdodChlKTtcblxuICAgICAgICAvLyBVcGRhdGUgZ1Njb3JlIGZvciBub2RlIHcgaWY6XG4gICAgICAgIC8vICAgdyBub3QgcHJlc2VudCBpbiBvcGVuU2V0XG4gICAgICAgIC8vIE9SXG4gICAgICAgIC8vICAgdGVudGF0aXZlIGdTY29yZSBpcyBsZXNzIHRoYW4gcHJldmlvdXMgdmFsdWVcblxuICAgICAgICAvLyB3IG5vdCBpbiBvcGVuU2V0XG4gICAgICAgIGlmICghaXNJbk9wZW5TZXQod2lkKSkge1xuICAgICAgICAgIGdTY29yZVt3aWRdID0gdGVtcFNjb3JlO1xuICAgICAgICAgIGZTY29yZVt3aWRdID0gdGVtcFNjb3JlICsgaGV1cmlzdGljKHcpO1xuICAgICAgICAgIGFkZFRvT3BlblNldCh3LCB3aWQpO1xuICAgICAgICAgIGNhbWVGcm9tW3dpZF0gPSBjTWluO1xuICAgICAgICAgIGNhbWVGcm9tRWRnZVt3aWRdID0gZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHcgYWxyZWFkeSBpbiBvcGVuU2V0LCBidXQgd2l0aCBncmVhdGVyIGdTY29yZVxuICAgICAgICBpZiAodGVtcFNjb3JlIDwgZ1Njb3JlW3dpZF0pIHtcbiAgICAgICAgICBnU2NvcmVbd2lkXSA9IHRlbXBTY29yZTtcbiAgICAgICAgICBmU2NvcmVbd2lkXSA9IHRlbXBTY29yZSArIGhldXJpc3RpYyh3KTtcbiAgICAgICAgICBjYW1lRnJvbVt3aWRdID0gY01pbjtcbiAgICAgICAgICBjYW1lRnJvbUVkZ2Vbd2lkXSA9IGU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRW5kIG9mIG5laWdoYm9ycyB1cGRhdGVcbiAgICB9IC8vIEVuZCBvZiBtYWluIGxvb3BcblxuICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwgdGhlbiB3ZSd2ZSBub3QgcmVhY2hlZCBvdXIgZ29hbFxuICAgIHJldHVybiB7XG4gICAgICBmb3VuZDogZmFsc2UsXG4gICAgICBkaXN0YW5jZTogdW5kZWZpbmVkLFxuICAgICAgcGF0aDogdW5kZWZpbmVkLFxuICAgICAgc3RlcHM6IHN0ZXBzXG4gICAgfTtcbiAgfVxufTsgLy8gZWxlc2ZuXG5cbnZhciBmbG95ZFdhcnNoYWxsRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRyID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgZmxveWRXYXJzaGFsbDogZnVuY3Rpb24gZmxveWRXYXJzaGFsbChvcHRpb25zKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBfZmxveWRXYXJzaGFsbERlZmF1bHQgPSBmbG95ZFdhcnNoYWxsRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICB3ZWlnaHQgPSBfZmxveWRXYXJzaGFsbERlZmF1bHQud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZmxveWRXYXJzaGFsbERlZmF1bHQuZGlyZWN0ZWQ7XG4gICAgdmFyIHdlaWdodEZuID0gd2VpZ2h0O1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgdmFyIE4gPSBub2Rlcy5sZW5ndGg7XG4gICAgdmFyIE5zcSA9IE4gKiBOO1xuICAgIHZhciBpbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICB9O1xuICAgIHZhciBhdEluZGV4ID0gZnVuY3Rpb24gYXRJbmRleChpKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgZGlzdGFuY2UgbWF0cml4XG4gICAgdmFyIGRpc3QgPSBuZXcgQXJyYXkoTnNxKTtcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IE5zcTsgbisrKSB7XG4gICAgICB2YXIgaiA9IG4gJSBOO1xuICAgICAgdmFyIGkgPSAobiAtIGopIC8gTjtcbiAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgIGRpc3Rbbl0gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzdFtuXSA9IEluZmluaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbWF0cml4IHVzZWQgZm9yIHBhdGggcmVjb25zdHJ1Y3Rpb25cbiAgICAvLyBJbml0aWFsaXplIGRpc3RhbmNlIG1hdHJpeFxuICAgIHZhciBuZXh0ID0gbmV3IEFycmF5KE5zcSk7XG4gICAgdmFyIGVkZ2VOZXh0ID0gbmV3IEFycmF5KE5zcSk7XG5cbiAgICAvLyBQcm9jZXNzIGVkZ2VzXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVkZ2VzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tfaV07XG4gICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKVswXTtcbiAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpWzBdO1xuICAgICAgaWYgKHNyYyA9PT0gdGd0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBleGNsdWRlIGxvb3BzXG5cbiAgICAgIHZhciBzID0gaW5kZXhPZihzcmMpO1xuICAgICAgdmFyIHQgPSBpbmRleE9mKHRndCk7XG4gICAgICB2YXIgc3QgPSBzICogTiArIHQ7IC8vIHNvdXJjZSB0byB0YXJnZXQgaW5kZXhcbiAgICAgIHZhciBfd2VpZ2h0ID0gd2VpZ2h0Rm4oZWRnZSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgcHJvY2VzcyBhbm90aGVyIGVkZ2UgYmV0d2VlbiBzYW1lIDIgbm9kZXNcbiAgICAgIGlmIChkaXN0W3N0XSA+IF93ZWlnaHQpIHtcbiAgICAgICAgZGlzdFtzdF0gPSBfd2VpZ2h0O1xuICAgICAgICBuZXh0W3N0XSA9IHQ7XG4gICAgICAgIGVkZ2VOZXh0W3N0XSA9IGVkZ2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVuZGlyZWN0ZWQgZ3JhcGgsIHByb2Nlc3MgJ3JldmVyc2VkJyBlZGdlXG4gICAgICBpZiAoIWRpcmVjdGVkKSB7XG4gICAgICAgIHZhciB0cyA9IHQgKiBOICsgczsgLy8gdGFyZ2V0IHRvIHNvdXJjZSBpbmRleFxuXG4gICAgICAgIGlmICghZGlyZWN0ZWQgJiYgZGlzdFt0c10gPiBfd2VpZ2h0KSB7XG4gICAgICAgICAgZGlzdFt0c10gPSBfd2VpZ2h0O1xuICAgICAgICAgIG5leHRbdHNdID0gcztcbiAgICAgICAgICBlZGdlTmV4dFt0c10gPSBlZGdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFpbiBsb29wXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHtcbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICAgIHZhciBpayA9IF9pMiAqIE4gKyBrO1xuICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgTjsgX2orKykge1xuICAgICAgICAgIHZhciBpaiA9IF9pMiAqIE4gKyBfajtcbiAgICAgICAgICB2YXIga2ogPSBrICogTiArIF9qO1xuICAgICAgICAgIGlmIChkaXN0W2lrXSArIGRpc3Rba2pdIDwgZGlzdFtpal0pIHtcbiAgICAgICAgICAgIGRpc3RbaWpdID0gZGlzdFtpa10gKyBkaXN0W2tqXTtcbiAgICAgICAgICAgIG5leHRbaWpdID0gbmV4dFtpa107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBnZXRBcmdFbGUgPSBmdW5jdGlvbiBnZXRBcmdFbGUoZWxlKSB7XG4gICAgICByZXR1cm4gKHN0cmluZyhlbGUpID8gY3kuZmlsdGVyKGVsZSkgOiBlbGUpWzBdO1xuICAgIH07XG4gICAgdmFyIGluZGV4T2ZBcmdFbGUgPSBmdW5jdGlvbiBpbmRleE9mQXJnRWxlKGVsZSkge1xuICAgICAgcmV0dXJuIGluZGV4T2YoZ2V0QXJnRWxlKGVsZSkpO1xuICAgIH07XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGRpc3RhbmNlOiBmdW5jdGlvbiBkaXN0YW5jZShmcm9tLCB0bykge1xuICAgICAgICB2YXIgaSA9IGluZGV4T2ZBcmdFbGUoZnJvbSk7XG4gICAgICAgIHZhciBqID0gaW5kZXhPZkFyZ0VsZSh0byk7XG4gICAgICAgIHJldHVybiBkaXN0W2kgKiBOICsgal07XG4gICAgICB9LFxuICAgICAgcGF0aDogZnVuY3Rpb24gcGF0aChmcm9tLCB0bykge1xuICAgICAgICB2YXIgaSA9IGluZGV4T2ZBcmdFbGUoZnJvbSk7XG4gICAgICAgIHZhciBqID0gaW5kZXhPZkFyZ0VsZSh0byk7XG4gICAgICAgIHZhciBmcm9tTm9kZSA9IGF0SW5kZXgoaSk7XG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21Ob2RlLmNvbGxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV4dFtpICogTiArIGpdID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXRoID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICB2YXIgcHJldiA9IGk7XG4gICAgICAgIHZhciBlZGdlO1xuICAgICAgICBwYXRoLm1lcmdlKGZyb21Ob2RlKTtcbiAgICAgICAgd2hpbGUgKGkgIT09IGopIHtcbiAgICAgICAgICBwcmV2ID0gaTtcbiAgICAgICAgICBpID0gbmV4dFtpICogTiArIGpdO1xuICAgICAgICAgIGVkZ2UgPSBlZGdlTmV4dFtwcmV2ICogTiArIGldO1xuICAgICAgICAgIHBhdGgubWVyZ2UoZWRnZSk7XG4gICAgICAgICAgcGF0aC5tZXJnZShhdEluZGV4KGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiByZXM7XG4gIH0gLy8gZmxveWRXYXJzaGFsbFxufTsgLy8gZWxlc2ZuXG5cbnZhciBiZWxsbWFuRm9yZERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZGlyZWN0ZWQ6IGZhbHNlLFxuICByb290OiBudWxsXG59KTtcbnZhciBlbGVzZm4kcSA9IHtcbiAgLy8gSW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gIGJlbGxtYW5Gb3JkOiBmdW5jdGlvbiBiZWxsbWFuRm9yZChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2JlbGxtYW5Gb3JkRGVmYXVsdHMgPSBiZWxsbWFuRm9yZERlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgd2VpZ2h0ID0gX2JlbGxtYW5Gb3JkRGVmYXVsdHMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfYmVsbG1hbkZvcmREZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgIHJvb3QgPSBfYmVsbG1hbkZvcmREZWZhdWx0cy5yb290O1xuICAgIHZhciB3ZWlnaHRGbiA9IHdlaWdodDtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXMsXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXM7XG4gICAgdmFyIG51bU5vZGVzID0gbm9kZXMubGVuZ3RoO1xuICAgIHZhciBpbmZvTWFwID0gbmV3IE1hcCQyKCk7XG4gICAgdmFyIGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGUgPSBmYWxzZTtcbiAgICB2YXIgbmVnYXRpdmVXZWlnaHRDeWNsZXMgPSBbXTtcbiAgICByb290ID0gY3kuY29sbGVjdGlvbihyb290KVswXTsgLy8gaW4gY2FzZSBzZWxlY3RvciBwYXNzZWRcblxuICAgIGVkZ2VzLnVubWVyZ2VCeShmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgcmV0dXJuIGVkZ2UuaXNMb29wKCk7XG4gICAgfSk7XG4gICAgdmFyIG51bUVkZ2VzID0gZWRnZXMubGVuZ3RoO1xuICAgIHZhciBnZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbyhub2RlKSB7XG4gICAgICB2YXIgb2JqID0gaW5mb01hcC5nZXQobm9kZS5pZCgpKTtcbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIG9iaiA9IHt9O1xuICAgICAgICBpbmZvTWFwLnNldChub2RlLmlkKCksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgdmFyIGdldE5vZGVGcm9tVG8gPSBmdW5jdGlvbiBnZXROb2RlRnJvbVRvKHRvKSB7XG4gICAgICByZXR1cm4gKHN0cmluZyh0bykgPyBjeS4kKHRvKSA6IHRvKVswXTtcbiAgICB9O1xuICAgIHZhciBkaXN0YW5jZVRvID0gZnVuY3Rpb24gZGlzdGFuY2VUbyh0bykge1xuICAgICAgcmV0dXJuIGdldEluZm8oZ2V0Tm9kZUZyb21Ubyh0bykpLmRpc3Q7XG4gICAgfTtcbiAgICB2YXIgcGF0aFRvID0gZnVuY3Rpb24gcGF0aFRvKHRvKSB7XG4gICAgICB2YXIgdGhpc1N0YXJ0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiByb290O1xuICAgICAgdmFyIGVuZCA9IGdldE5vZGVGcm9tVG8odG8pO1xuICAgICAgdmFyIHBhdGggPSBbXTtcbiAgICAgIHZhciBub2RlID0gZW5kO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnNwYXduKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9nZXRJbmZvID0gZ2V0SW5mbyhub2RlKSxcbiAgICAgICAgICBlZGdlID0gX2dldEluZm8uZWRnZSxcbiAgICAgICAgICBwcmVkID0gX2dldEluZm8ucHJlZDtcbiAgICAgICAgcGF0aC51bnNoaWZ0KG5vZGVbMF0pO1xuICAgICAgICBpZiAobm9kZS5zYW1lKHRoaXNTdGFydCkgJiYgcGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xuICAgICAgICAgIHBhdGgudW5zaGlmdChlZGdlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcHJlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVzLnNwYXduKHBhdGgpO1xuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXphdGlvbnMgeyBkaXN0LCBwcmVkLCBlZGdlIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5vZGVzOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICB2YXIgaW5mbyA9IGdldEluZm8obm9kZSk7XG4gICAgICBpZiAobm9kZS5zYW1lKHJvb3QpKSB7XG4gICAgICAgIGluZm8uZGlzdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvLmRpc3QgPSBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGluZm8ucHJlZCA9IG51bGw7XG4gICAgICBpbmZvLmVkZ2UgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEVkZ2VzIHJlbGF4YXRpb25cbiAgICB2YXIgcmVwbGFjZWRFZGdlID0gZmFsc2U7XG4gICAgdmFyIGNoZWNrRm9yRWRnZVJlcGxhY2VtZW50ID0gZnVuY3Rpb24gY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQobm9kZTEsIG5vZGUyLCBlZGdlLCBpbmZvMSwgaW5mbzIsIHdlaWdodCkge1xuICAgICAgdmFyIGRpc3QgPSBpbmZvMS5kaXN0ICsgd2VpZ2h0O1xuICAgICAgaWYgKGRpc3QgPCBpbmZvMi5kaXN0ICYmICFlZGdlLnNhbWUoaW5mbzEuZWRnZSkpIHtcbiAgICAgICAgaW5mbzIuZGlzdCA9IGRpc3Q7XG4gICAgICAgIGluZm8yLnByZWQgPSBub2RlMTtcbiAgICAgICAgaW5mbzIuZWRnZSA9IGVkZ2U7XG4gICAgICAgIHJlcGxhY2VkRWRnZSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgbnVtTm9kZXM7IF9pKyspIHtcbiAgICAgIHJlcGxhY2VkRWRnZSA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCBudW1FZGdlczsgZSsrKSB7XG4gICAgICAgIHZhciBlZGdlID0gZWRnZXNbZV07XG4gICAgICAgIHZhciBzcmMgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcbiAgICAgICAgdmFyIF93ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICAgICAgdmFyIHNyY0luZm8gPSBnZXRJbmZvKHNyYyk7XG4gICAgICAgIHZhciB0Z3RJbmZvID0gZ2V0SW5mbyh0Z3QpO1xuICAgICAgICBjaGVja0ZvckVkZ2VSZXBsYWNlbWVudChzcmMsIHRndCwgZWRnZSwgc3JjSW5mbywgdGd0SW5mbywgX3dlaWdodCk7XG5cbiAgICAgICAgLy8gSWYgdW5kaXJlY3RlZCBncmFwaCwgd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgJ3JldmVyc2UnIGVkZ2VcbiAgICAgICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgICAgIGNoZWNrRm9yRWRnZVJlcGxhY2VtZW50KHRndCwgc3JjLCBlZGdlLCB0Z3RJbmZvLCBzcmNJbmZvLCBfd2VpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFyZXBsYWNlZEVkZ2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXBsYWNlZEVkZ2UpIHtcbiAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGVzXG4gICAgICB2YXIgbmVnYXRpdmVXZWlnaHRDeWNsZUlkcyA9IFtdO1xuICAgICAgZm9yICh2YXIgX2UgPSAwOyBfZSA8IG51bUVkZ2VzOyBfZSsrKSB7XG4gICAgICAgIHZhciBfZWRnZSA9IGVkZ2VzW19lXTtcbiAgICAgICAgdmFyIF9zcmMgPSBfZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIF90Z3QgPSBfZWRnZS50YXJnZXQoKTtcbiAgICAgICAgdmFyIF93ZWlnaHQyID0gd2VpZ2h0Rm4oX2VkZ2UpO1xuICAgICAgICB2YXIgc3JjRGlzdCA9IGdldEluZm8oX3NyYykuZGlzdDtcbiAgICAgICAgdmFyIHRndERpc3QgPSBnZXRJbmZvKF90Z3QpLmRpc3Q7XG4gICAgICAgIGlmIChzcmNEaXN0ICsgX3dlaWdodDIgPCB0Z3REaXN0IHx8ICFkaXJlY3RlZCAmJiB0Z3REaXN0ICsgX3dlaWdodDIgPCBzcmNEaXN0KSB7XG4gICAgICAgICAgaWYgKCFoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlKSB7XG4gICAgICAgICAgICB3YXJuKCdHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkJyk7XG4gICAgICAgICAgICBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyIG5lZ2F0aXZlTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChzcmNEaXN0ICsgX3dlaWdodDIgPCB0Z3REaXN0KSB7XG4gICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZXMucHVzaChfc3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlyZWN0ZWQgJiYgdGd0RGlzdCArIF93ZWlnaHQyIDwgc3JjRGlzdCkge1xuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGVzLnB1c2goX3RndCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbnVtTmVnYXRpdmVOb2RlcyA9IG5lZ2F0aXZlTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBudW1OZWdhdGl2ZU5vZGVzOyBuKyspIHtcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmVnYXRpdmVOb2Rlc1tuXTtcbiAgICAgICAgICAgICAgdmFyIGN5Y2xlID0gW3N0YXJ0XTtcbiAgICAgICAgICAgICAgY3ljbGUucHVzaChnZXRJbmZvKHN0YXJ0KS5lZGdlKTtcbiAgICAgICAgICAgICAgdmFyIF9ub2RlID0gZ2V0SW5mbyhzdGFydCkucHJlZDtcbiAgICAgICAgICAgICAgd2hpbGUgKGN5Y2xlLmluZGV4T2YoX25vZGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGN5Y2xlLnB1c2goX25vZGUpO1xuICAgICAgICAgICAgICAgIGN5Y2xlLnB1c2goZ2V0SW5mbyhfbm9kZSkuZWRnZSk7XG4gICAgICAgICAgICAgICAgX25vZGUgPSBnZXRJbmZvKF9ub2RlKS5wcmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN5Y2xlID0gY3ljbGUuc2xpY2UoY3ljbGUuaW5kZXhPZihfbm9kZSkpO1xuICAgICAgICAgICAgICB2YXIgc21hbGxlc3RJZCA9IGN5Y2xlWzBdLmlkKCk7XG4gICAgICAgICAgICAgIHZhciBzbWFsbGVzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDI7IGMgPCBjeWNsZS5sZW5ndGg7IGMgKz0gMikge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZVtjXS5pZCgpIDwgc21hbGxlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgc21hbGxlc3RJZCA9IGN5Y2xlW2NdLmlkKCk7XG4gICAgICAgICAgICAgICAgICBzbWFsbGVzdEluZGV4ID0gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3ljbGUgPSBjeWNsZS5zbGljZShzbWFsbGVzdEluZGV4KS5jb25jYXQoY3ljbGUuc2xpY2UoMCwgc21hbGxlc3RJbmRleCkpO1xuICAgICAgICAgICAgICBjeWNsZS5wdXNoKGN5Y2xlWzBdKTtcbiAgICAgICAgICAgICAgdmFyIGN5Y2xlSWQgPSBjeWNsZS5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmlkKCk7XG4gICAgICAgICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICBpZiAobmVnYXRpdmVXZWlnaHRDeWNsZUlkcy5pbmRleE9mKGN5Y2xlSWQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzLnB1c2goZWxlcy5zcGF3bihjeWNsZSkpO1xuICAgICAgICAgICAgICAgIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVJZHMucHVzaChjeWNsZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3RhbmNlVG86IGRpc3RhbmNlVG8sXG4gICAgICBwYXRoVG86IHBhdGhUbyxcbiAgICAgIGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGU6IGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGUsXG4gICAgICBuZWdhdGl2ZVdlaWdodEN5Y2xlczogbmVnYXRpdmVXZWlnaHRDeWNsZXNcbiAgICB9O1xuICB9IC8vIGJlbGxtYW5Gb3JkXG59OyAvLyBlbGVzZm5cblxudmFyIHNxcnQyID0gTWF0aC5zcXJ0KDIpO1xuXG4vLyBGdW5jdGlvbiB3aGljaCBjb2xhcHNlcyAyIChtZXRhKSBub2RlcyBpbnRvIG9uZVxuLy8gVXBkYXRlcyB0aGUgcmVtYWluaW5nIGVkZ2UgbGlzdHNcbi8vIFJlY2VpdmVzIGFzIGEgcGFyYW1hdGVyIHRoZSBlZGdlIHdoaWNoIGNhdXNlcyB0aGUgY29sbGFwc2VcbnZhciBjb2xsYXBzZSA9IGZ1bmN0aW9uIGNvbGxhcHNlKGVkZ2VJbmRleCwgbm9kZU1hcCwgcmVtYWluaW5nRWRnZXMpIHtcbiAgaWYgKHJlbWFpbmluZ0VkZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGVycm9yKFwiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGhcIik7XG4gIH1cbiAgdmFyIGVkZ2VJbmZvID0gcmVtYWluaW5nRWRnZXNbZWRnZUluZGV4XTtcbiAgdmFyIHNvdXJjZUluID0gZWRnZUluZm9bMV07XG4gIHZhciB0YXJnZXRJbiA9IGVkZ2VJbmZvWzJdO1xuICB2YXIgcGFydGl0aW9uMSA9IG5vZGVNYXBbc291cmNlSW5dO1xuICB2YXIgcGFydGl0aW9uMiA9IG5vZGVNYXBbdGFyZ2V0SW5dO1xuICB2YXIgbmV3RWRnZXMgPSByZW1haW5pbmdFZGdlczsgLy8gcmUtdXNlIGFycmF5XG5cbiAgLy8gRGVsZXRlIGFsbCBlZGdlcyBiZXR3ZWVuIHBhcnRpdGlvbjEgYW5kIHBhcnRpdGlvbjJcbiAgZm9yICh2YXIgaSA9IG5ld0VkZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGVkZ2UgPSBuZXdFZGdlc1tpXTtcbiAgICB2YXIgc3JjID0gZWRnZVsxXTtcbiAgICB2YXIgdGd0ID0gZWRnZVsyXTtcbiAgICBpZiAobm9kZU1hcFtzcmNdID09PSBwYXJ0aXRpb24xICYmIG5vZGVNYXBbdGd0XSA9PT0gcGFydGl0aW9uMiB8fCBub2RlTWFwW3NyY10gPT09IHBhcnRpdGlvbjIgJiYgbm9kZU1hcFt0Z3RdID09PSBwYXJ0aXRpb24xKSB7XG4gICAgICBuZXdFZGdlcy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxsIGVkZ2VzIHBvaW50aW5nIHRvIHBhcnRpdGlvbjIgc2hvdWxkIG5vdyBwb2ludCB0byBwYXJ0aXRpb24xXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBuZXdFZGdlcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgX2VkZ2UgPSBuZXdFZGdlc1tfaV07XG4gICAgaWYgKF9lZGdlWzFdID09PSBwYXJ0aXRpb24yKSB7XG4gICAgICAvLyBDaGVjayBzb3VyY2VcbiAgICAgIG5ld0VkZ2VzW19pXSA9IF9lZGdlLnNsaWNlKCk7IC8vIGNvcHlcbiAgICAgIG5ld0VkZ2VzW19pXVsxXSA9IHBhcnRpdGlvbjE7XG4gICAgfSBlbHNlIGlmIChfZWRnZVsyXSA9PT0gcGFydGl0aW9uMikge1xuICAgICAgLy8gQ2hlY2sgdGFyZ2V0XG4gICAgICBuZXdFZGdlc1tfaV0gPSBfZWRnZS5zbGljZSgpOyAvLyBjb3B5XG4gICAgICBuZXdFZGdlc1tfaV1bMl0gPSBwYXJ0aXRpb24xO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdmUgYWxsIG5vZGVzIGZyb20gcGFydGl0aW9uMiB0byBwYXJ0aXRpb24xXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVNYXAubGVuZ3RoOyBfaTIrKykge1xuICAgIGlmIChub2RlTWFwW19pMl0gPT09IHBhcnRpdGlvbjIpIHtcbiAgICAgIG5vZGVNYXBbX2kyXSA9IHBhcnRpdGlvbjE7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdFZGdlcztcbn07XG5cbi8vIENvbnRyYWN0cyBhIGdyYXBoIHVudGlsIHdlIHJlYWNoIGEgY2VydGFpbiBudW1iZXIgb2YgbWV0YSBub2Rlc1xudmFyIGNvbnRyYWN0VW50aWwgPSBmdW5jdGlvbiBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwLCByZW1haW5pbmdFZGdlcywgc2l6ZSwgc2l6ZUxpbWl0KSB7XG4gIHdoaWxlIChzaXplID4gc2l6ZUxpbWl0KSB7XG4gICAgLy8gQ2hvb3NlIGFuIGVkZ2UgcmFuZG9tbHlcbiAgICB2YXIgZWRnZUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmVtYWluaW5nRWRnZXMubGVuZ3RoKTtcblxuICAgIC8vIENvbGxhcHNlIGdyYXBoIGJhc2VkIG9uIGVkZ2VcbiAgICByZW1haW5pbmdFZGdlcyA9IGNvbGxhcHNlKGVkZ2VJbmRleCwgbWV0YU5vZGVNYXAsIHJlbWFpbmluZ0VkZ2VzKTtcbiAgICBzaXplLS07XG4gIH1cbiAgcmV0dXJuIHJlbWFpbmluZ0VkZ2VzO1xufTtcbnZhciBlbGVzZm4kcCA9IHtcbiAgLy8gQ29tcHV0ZXMgdGhlIG1pbmltdW0gY3V0IG9mIGFuIHVuZGlyZWN0ZWQgZ3JhcGhcbiAgLy8gUmV0dXJucyB0aGUgY29ycmVjdCBhbnN3ZXIgd2l0aCBoaWdoIHByb2JhYmlsaXR5XG4gIGthcmdlclN0ZWluOiBmdW5jdGlvbiBrYXJnZXJTdGVpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgZWRnZXMudW5tZXJnZUJ5KGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICByZXR1cm4gZWRnZS5pc0xvb3AoKTtcbiAgICB9KTtcbiAgICB2YXIgbnVtTm9kZXMgPSBub2Rlcy5sZW5ndGg7XG4gICAgdmFyIG51bUVkZ2VzID0gZWRnZXMubGVuZ3RoO1xuICAgIHZhciBudW1JdGVyID0gTWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKG51bU5vZGVzKSAvIE1hdGguTE4yLCAyKSk7XG4gICAgdmFyIHN0b3BTaXplID0gTWF0aC5mbG9vcihudW1Ob2RlcyAvIHNxcnQyKTtcbiAgICBpZiAobnVtTm9kZXMgPCAyKSB7XG4gICAgICBlcnJvcignQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0nKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTm93IHN0b3JlIGVkZ2UgZGVzdGluYXRpb24gYXMgaW5kZXhlc1xuICAgIC8vIEZvcm1hdCBmb3IgZWFjaCBlZGdlIChlZGdlIGluZGV4LCBzb3VyY2Ugbm9kZSBpbmRleCwgdGFyZ2V0IG5vZGUgaW5kZXgpXG4gICAgdmFyIGVkZ2VJbmRleGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FZGdlczsgaSsrKSB7XG4gICAgICB2YXIgZSA9IGVkZ2VzW2ldO1xuICAgICAgZWRnZUluZGV4ZXMucHVzaChbaSwgbm9kZXMuaW5kZXhPZihlLnNvdXJjZSgpKSwgbm9kZXMuaW5kZXhPZihlLnRhcmdldCgpKV0pO1xuICAgIH1cblxuICAgIC8vIFdlIHdpbGwgc3RvcmUgdGhlIGJlc3QgY3V0IGZvdW5kIGhlcmVcbiAgICB2YXIgbWluQ3V0U2l6ZSA9IEluZmluaXR5O1xuICAgIHZhciBtaW5DdXRFZGdlSW5kZXhlcyA9IFtdO1xuICAgIHZhciBtaW5DdXROb2RlTWFwID0gbmV3IEFycmF5KG51bU5vZGVzKTtcblxuICAgIC8vIEluaXRpYWwgbWV0YSBub2RlIHBhcnRpdGlvblxuICAgIHZhciBtZXRhTm9kZU1hcCA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG4gICAgdmFyIG1ldGFOb2RlTWFwMiA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG4gICAgdmFyIGNvcHlOb2Rlc01hcCA9IGZ1bmN0aW9uIGNvcHlOb2Rlc01hcChmcm9tLCB0bykge1xuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbnVtTm9kZXM7IF9pMysrKSB7XG4gICAgICAgIHRvW19pM10gPSBmcm9tW19pM107XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIE1haW4gbG9vcFxuICAgIGZvciAodmFyIGl0ZXIgPSAwOyBpdGVyIDw9IG51bUl0ZXI7IGl0ZXIrKykge1xuICAgICAgLy8gUmVzZXQgbWV0YSBub2RlIHBhcnRpdGlvblxuICAgICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbnVtTm9kZXM7IF9pNCsrKSB7XG4gICAgICAgIG1ldGFOb2RlTWFwW19pNF0gPSBfaTQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRyYWN0IHVudGlsIHN0b3AgcG9pbnQgKHN0b3BTaXplIG5vZGVzKVxuICAgICAgdmFyIGVkZ2VzU3RhdGUgPSBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwLCBlZGdlSW5kZXhlcy5zbGljZSgpLCBudW1Ob2Rlcywgc3RvcFNpemUpO1xuICAgICAgdmFyIGVkZ2VzU3RhdGUyID0gZWRnZXNTdGF0ZS5zbGljZSgpOyAvLyBjb3B5XG5cbiAgICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGNvbGFwc2VkIG5vZGVzIHN0YXRlXG4gICAgICBjb3B5Tm9kZXNNYXAobWV0YU5vZGVNYXAsIG1ldGFOb2RlTWFwMik7XG5cbiAgICAgIC8vIFJ1biAyIGl0ZXJhdGlvbnMgc3RhcnRpbmcgaW4gdGhlIHN0b3Agc3RhdGVcbiAgICAgIHZhciByZXMxID0gY29udHJhY3RVbnRpbChtZXRhTm9kZU1hcCwgZWRnZXNTdGF0ZSwgc3RvcFNpemUsIDIpO1xuICAgICAgdmFyIHJlczIgPSBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwMiwgZWRnZXNTdGF0ZTIsIHN0b3BTaXplLCAyKTtcblxuICAgICAgLy8gSXMgYW55IG9mIHRoZSAyIHJlc3VsdHMgdGhlIGJlc3QgY3V0IHNvIGZhcj9cbiAgICAgIGlmIChyZXMxLmxlbmd0aCA8PSByZXMyLmxlbmd0aCAmJiByZXMxLmxlbmd0aCA8IG1pbkN1dFNpemUpIHtcbiAgICAgICAgbWluQ3V0U2l6ZSA9IHJlczEubGVuZ3RoO1xuICAgICAgICBtaW5DdXRFZGdlSW5kZXhlcyA9IHJlczE7XG4gICAgICAgIGNvcHlOb2Rlc01hcChtZXRhTm9kZU1hcCwgbWluQ3V0Tm9kZU1hcCk7XG4gICAgICB9IGVsc2UgaWYgKHJlczIubGVuZ3RoIDw9IHJlczEubGVuZ3RoICYmIHJlczIubGVuZ3RoIDwgbWluQ3V0U2l6ZSkge1xuICAgICAgICBtaW5DdXRTaXplID0gcmVzMi5sZW5ndGg7XG4gICAgICAgIG1pbkN1dEVkZ2VJbmRleGVzID0gcmVzMjtcbiAgICAgICAgY29weU5vZGVzTWFwKG1ldGFOb2RlTWFwMiwgbWluQ3V0Tm9kZU1hcCk7XG4gICAgICB9XG4gICAgfSAvLyBlbmQgb2YgbWFpbiBsb29wXG5cbiAgICAvLyBDb25zdHJ1Y3QgcmVzdWx0XG4gICAgdmFyIGN1dCA9IHRoaXMuc3Bhd24obWluQ3V0RWRnZUluZGV4ZXMubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZWRnZXNbZVswXV07XG4gICAgfSkpO1xuICAgIHZhciBwYXJ0aXRpb24xID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBwYXJ0aXRpb24yID0gdGhpcy5zcGF3bigpO1xuXG4gICAgLy8gdHJhdmVyc2UgbWV0YU5vZGVNYXAgZm9yIGJlc3QgY3V0XG4gICAgdmFyIHdpdG5lc3NOb2RlUGFydGl0aW9uID0gbWluQ3V0Tm9kZU1hcFswXTtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBtaW5DdXROb2RlTWFwLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgIHZhciBwYXJ0aXRpb25JZCA9IG1pbkN1dE5vZGVNYXBbX2k1XTtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbX2k1XTtcbiAgICAgIGlmIChwYXJ0aXRpb25JZCA9PT0gd2l0bmVzc05vZGVQYXJ0aXRpb24pIHtcbiAgICAgICAgcGFydGl0aW9uMS5tZXJnZShub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRpdGlvbjIubWVyZ2Uobm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGNvbXBvbmVudHMgY29ycmVzcG9uZGluZyB0byBlYWNoIGRpc2pvaW50IHN1YnNldCBvZiBub2Rlc1xuICAgIHZhciBjb25zdHJ1Y3RDb21wb25lbnQgPSBmdW5jdGlvbiBjb25zdHJ1Y3RDb21wb25lbnQoc3Vic2V0KSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gX3RoaXMuc3Bhd24oKTtcbiAgICAgIHN1YnNldC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGNvbXBvbmVudC5tZXJnZShub2RlKTtcbiAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAvLyBlbnN1cmUgZWRnZSBpcyB3aXRoaW4gY2FsbGluZyBjb2xsZWN0aW9uIGFuZCBlZGdlIGlzIG5vdCBpbiBjdXRcbiAgICAgICAgICBpZiAoX3RoaXMuY29udGFpbnMoZWRnZSkgJiYgIWN1dC5jb250YWlucyhlZGdlKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1lcmdlKGVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50cyA9IFtjb25zdHJ1Y3RDb21wb25lbnQocGFydGl0aW9uMSksIGNvbnN0cnVjdENvbXBvbmVudChwYXJ0aXRpb24yKV07XG4gICAgdmFyIHJldCA9IHtcbiAgICAgIGN1dDogY3V0LFxuICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgIC8vIG4uYi4gcGFydGl0aW9ucyBhcmUgaW5jbHVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgYXBpIHNwZWNcbiAgICAgIC8vIChjb3VsZCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24pXG4gICAgICBwYXJ0aXRpb24xOiBwYXJ0aXRpb24xLFxuICAgICAgcGFydGl0aW9uMjogcGFydGl0aW9uMlxuICAgIH07XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsgLy8gZWxlc2ZuXG5cbnZhciBjb3B5UG9zaXRpb24gPSBmdW5jdGlvbiBjb3B5UG9zaXRpb24ocCkge1xuICByZXR1cm4ge1xuICAgIHg6IHAueCxcbiAgICB5OiBwLnlcbiAgfTtcbn07XG52YXIgbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwLCB6b29tLCBwYW4pIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBwLnggKiB6b29tICsgcGFuLngsXG4gICAgeTogcC55ICogem9vbSArIHBhbi55XG4gIH07XG59O1xudmFyIHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uID0gZnVuY3Rpb24gcmVuZGVyZWRUb01vZGVsUG9zaXRpb24ocCwgem9vbSwgcGFuKSB7XG4gIHJldHVybiB7XG4gICAgeDogKHAueCAtIHBhbi54KSAvIHpvb20sXG4gICAgeTogKHAueSAtIHBhbi55KSAvIHpvb21cbiAgfTtcbn07XG52YXIgYXJyYXkycG9pbnQgPSBmdW5jdGlvbiBhcnJheTJwb2ludChhcnIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBhcnJbMF0sXG4gICAgeTogYXJyWzFdXG4gIH07XG59O1xudmFyIG1pbiA9IGZ1bmN0aW9uIG1pbihhcnIpIHtcbiAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICB2YXIgbWluID0gSW5maW5pdHk7XG4gIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIHZhbCA9IGFycltpXTtcbiAgICBpZiAoaXNGaW5pdGUodmFsKSkge1xuICAgICAgbWluID0gTWF0aC5taW4odmFsLCBtaW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluO1xufTtcbnZhciBtYXggPSBmdW5jdGlvbiBtYXgoYXJyKSB7XG4gIHZhciBiZWdpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyLmxlbmd0aDtcbiAgdmFyIG1heCA9IC1JbmZpbml0eTtcbiAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICBtYXggPSBNYXRoLm1heCh2YWwsIG1heCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59O1xudmFyIG1lYW4gPSBmdW5jdGlvbiBtZWFuKGFycikge1xuICB2YXIgYmVnaW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGFyci5sZW5ndGg7XG4gIHZhciB0b3RhbCA9IDA7XG4gIHZhciBuID0gMDtcbiAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICB0b3RhbCArPSB2YWw7XG4gICAgICBuKys7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b3RhbCAvIG47XG59O1xudmFyIG1lZGlhbiA9IGZ1bmN0aW9uIG1lZGlhbihhcnIpIHtcbiAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICB2YXIgY29weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcbiAgdmFyIHNvcnQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBpbmNsdWRlSG9sZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gIGlmIChjb3B5KSB7XG4gICAgYXJyID0gYXJyLnNsaWNlKGJlZ2luLCBlbmQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChlbmQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICBhcnIuc3BsaWNlKGVuZCwgYXJyLmxlbmd0aCAtIGVuZCk7XG4gICAgfVxuICAgIGlmIChiZWdpbiA+IDApIHtcbiAgICAgIGFyci5zcGxpY2UoMCwgYmVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFsbCBub24gZmluaXRlIChlLmcuIEluZmluaXR5LCBOYU4pIGVsZW1lbnRzIG11c3QgYmUgLUluZmluaXR5IHNvIHRoZXkgZ28gdG8gdGhlIHN0YXJ0XG4gIHZhciBvZmYgPSAwOyAvLyBvZmZzZXQgZnJvbSBub24tZmluaXRlIHZhbHVlc1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIHYgPSBhcnJbaV07XG4gICAgaWYgKGluY2x1ZGVIb2xlcykge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh2KSkge1xuICAgICAgICBhcnJbaV0gPSAtSW5maW5pdHk7XG4gICAgICAgIG9mZisrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqdXN0IHJlbW92ZSBpdCBpZiB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIGhvbGVzXG4gICAgICBhcnIuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuICBpZiAoc29ydCkge1xuICAgIGFyci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7IC8vIHJlcXVpcmVzIGNvcHkgPSB0cnVlIGlmIHlvdSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgb3JpZ1xuICB9XG5cbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKGxlbiAvIDIpO1xuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHJldHVybiBhcnJbbWlkICsgMSArIG9mZl07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChhcnJbbWlkIC0gMSArIG9mZl0gKyBhcnJbbWlkICsgb2ZmXSkgLyAyO1xuICB9XG59O1xudmFyIGRlZzJyYWQgPSBmdW5jdGlvbiBkZWcycmFkKGRlZykge1xuICByZXR1cm4gTWF0aC5QSSAqIGRlZyAvIDE4MDtcbn07XG52YXIgZ2V0QW5nbGVGcm9tRGlzcCA9IGZ1bmN0aW9uIGdldEFuZ2xlRnJvbURpc3AoZGlzcFgsIGRpc3BZKSB7XG4gIHJldHVybiBNYXRoLmF0YW4yKGRpc3BZLCBkaXNwWCkgLSBNYXRoLlBJIC8gMjtcbn07XG52YXIgbG9nMiA9IE1hdGgubG9nMiB8fCBmdW5jdGlvbiAobikge1xuICByZXR1cm4gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTtcbn07XG52YXIgc2lnbnVtID0gZnVuY3Rpb24gc2lnbnVtKHgpIHtcbiAgaWYgKHggPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoeCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG52YXIgZGlzdCA9IGZ1bmN0aW9uIGRpc3QocDEsIHAyKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoc3FkaXN0KHAxLCBwMikpO1xufTtcbnZhciBzcWRpc3QgPSBmdW5jdGlvbiBzcWRpc3QocDEsIHAyKSB7XG4gIHZhciBkeCA9IHAyLnggLSBwMS54O1xuICB2YXIgZHkgPSBwMi55IC0gcDEueTtcbiAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufTtcbnZhciBpblBsYWNlU3VtTm9ybWFsaXplID0gZnVuY3Rpb24gaW5QbGFjZVN1bU5vcm1hbGl6ZSh2KSB7XG4gIHZhciBsZW5ndGggPSB2Lmxlbmd0aDtcblxuICAvLyBGaXJzdCwgZ2V0IHN1bSBvZiBhbGwgZWxlbWVudHNcbiAgdmFyIHRvdGFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRvdGFsICs9IHZbaV07XG4gIH1cblxuICAvLyBOb3csIGRpdmlkZSBlYWNoIGJ5IHRoZSBzdW0gb2YgYWxsIGVsZW1lbnRzXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBsZW5ndGg7IF9pKyspIHtcbiAgICB2W19pXSA9IHZbX2ldIC8gdG90YWw7XG4gIH1cbiAgcmV0dXJuIHY7XG59O1xuXG4vLyBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQsOpemllcl9jdXJ2ZSNRdWFkcmF0aWNfY3VydmVzXG52YXIgcWJlemllckF0ID0gZnVuY3Rpb24gcWJlemllckF0KHAwLCBwMSwgcDIsIHQpIHtcbiAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpICogcDAgKyAyICogKDEgLSB0KSAqIHQgKiBwMSArIHQgKiB0ICogcDI7XG59O1xudmFyIHFiZXppZXJQdEF0ID0gZnVuY3Rpb24gcWJlemllclB0QXQocDAsIHAxLCBwMiwgdCkge1xuICByZXR1cm4ge1xuICAgIHg6IHFiZXppZXJBdChwMC54LCBwMS54LCBwMi54LCB0KSxcbiAgICB5OiBxYmV6aWVyQXQocDAueSwgcDEueSwgcDIueSwgdClcbiAgfTtcbn07XG52YXIgbGluZUF0ID0gZnVuY3Rpb24gbGluZUF0KHAwLCBwMSwgdCwgZCkge1xuICB2YXIgdmVjID0ge1xuICAgIHg6IHAxLnggLSBwMC54LFxuICAgIHk6IHAxLnkgLSBwMC55XG4gIH07XG4gIHZhciB2ZWNEaXN0ID0gZGlzdChwMCwgcDEpO1xuICB2YXIgbm9ybVZlYyA9IHtcbiAgICB4OiB2ZWMueCAvIHZlY0Rpc3QsXG4gICAgeTogdmVjLnkgLyB2ZWNEaXN0XG4gIH07XG4gIHQgPSB0ID09IG51bGwgPyAwIDogdDtcbiAgZCA9IGQgIT0gbnVsbCA/IGQgOiB0ICogdmVjRGlzdDtcbiAgcmV0dXJuIHtcbiAgICB4OiBwMC54ICsgbm9ybVZlYy54ICogZCxcbiAgICB5OiBwMC55ICsgbm9ybVZlYy55ICogZFxuICB9O1xufTtcbnZhciBib3VuZCA9IGZ1bmN0aW9uIGJvdW5kKG1pbiwgdmFsLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWwpKTtcbn07XG5cbi8vIG1ha2VzIGEgZnVsbCBiYiAoeDEsIHkxLCB4MiwgeTIsIHcsIGgpIGZyb20gaW1wbGljaXQgcGFyYW1zXG52YXIgbWFrZUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gbWFrZUJvdW5kaW5nQm94KGJiKSB7XG4gIGlmIChiYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgxOiBJbmZpbml0eSxcbiAgICAgIHkxOiBJbmZpbml0eSxcbiAgICAgIHgyOiAtSW5maW5pdHksXG4gICAgICB5MjogLUluZmluaXR5LFxuICAgICAgdzogMCxcbiAgICAgIGg6IDBcbiAgICB9O1xuICB9IGVsc2UgaWYgKGJiLngxICE9IG51bGwgJiYgYmIueTEgIT0gbnVsbCkge1xuICAgIGlmIChiYi54MiAhPSBudWxsICYmIGJiLnkyICE9IG51bGwgJiYgYmIueDIgPj0gYmIueDEgJiYgYmIueTIgPj0gYmIueTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgxOiBiYi54MSxcbiAgICAgICAgeTE6IGJiLnkxLFxuICAgICAgICB4MjogYmIueDIsXG4gICAgICAgIHkyOiBiYi55MixcbiAgICAgICAgdzogYmIueDIgLSBiYi54MSxcbiAgICAgICAgaDogYmIueTIgLSBiYi55MVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGJiLncgIT0gbnVsbCAmJiBiYi5oICE9IG51bGwgJiYgYmIudyA+PSAwICYmIGJiLmggPj0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDE6IGJiLngxLFxuICAgICAgICB5MTogYmIueTEsXG4gICAgICAgIHgyOiBiYi54MSArIGJiLncsXG4gICAgICAgIHkyOiBiYi55MSArIGJiLmgsXG4gICAgICAgIHc6IGJiLncsXG4gICAgICAgIGg6IGJiLmhcbiAgICAgIH07XG4gICAgfVxuICB9XG59O1xudmFyIGNvcHlCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGNvcHlCb3VuZGluZ0JveChiYikge1xuICByZXR1cm4ge1xuICAgIHgxOiBiYi54MSxcbiAgICB4MjogYmIueDIsXG4gICAgdzogYmIudyxcbiAgICB5MTogYmIueTEsXG4gICAgeTI6IGJiLnkyLFxuICAgIGg6IGJiLmhcbiAgfTtcbn07XG52YXIgY2xlYXJCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGNsZWFyQm91bmRpbmdCb3goYmIpIHtcbiAgYmIueDEgPSBJbmZpbml0eTtcbiAgYmIueTEgPSBJbmZpbml0eTtcbiAgYmIueDIgPSAtSW5maW5pdHk7XG4gIGJiLnkyID0gLUluZmluaXR5O1xuICBiYi53ID0gMDtcbiAgYmIuaCA9IDA7XG59O1xudmFyIHNoaWZ0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiBzaGlmdEJvdW5kaW5nQm94KGJiLCBkeCwgZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4MTogYmIueDEgKyBkeCxcbiAgICB4MjogYmIueDIgKyBkeCxcbiAgICB5MTogYmIueTEgKyBkeSxcbiAgICB5MjogYmIueTIgKyBkeSxcbiAgICB3OiBiYi53LFxuICAgIGg6IGJiLmhcbiAgfTtcbn07XG52YXIgdXBkYXRlQm91bmRpbmdCb3ggPSBmdW5jdGlvbiB1cGRhdGVCb3VuZGluZ0JveChiYjEsIGJiMikge1xuICAvLyB1cGRhdGUgYmIxIHdpdGggYmIyIGJvdW5kc1xuXG4gIGJiMS54MSA9IE1hdGgubWluKGJiMS54MSwgYmIyLngxKTtcbiAgYmIxLngyID0gTWF0aC5tYXgoYmIxLngyLCBiYjIueDIpO1xuICBiYjEudyA9IGJiMS54MiAtIGJiMS54MTtcbiAgYmIxLnkxID0gTWF0aC5taW4oYmIxLnkxLCBiYjIueTEpO1xuICBiYjEueTIgPSBNYXRoLm1heChiYjEueTIsIGJiMi55Mik7XG4gIGJiMS5oID0gYmIxLnkyIC0gYmIxLnkxO1xufTtcbnZhciBleHBhbmRCb3VuZGluZ0JveEJ5UG9pbnQgPSBmdW5jdGlvbiBleHBhbmRCb3VuZGluZ0JveEJ5UG9pbnQoYmIsIHgsIHkpIHtcbiAgYmIueDEgPSBNYXRoLm1pbihiYi54MSwgeCk7XG4gIGJiLngyID0gTWF0aC5tYXgoYmIueDIsIHgpO1xuICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgYmIueTEgPSBNYXRoLm1pbihiYi55MSwgeSk7XG4gIGJiLnkyID0gTWF0aC5tYXgoYmIueTIsIHkpO1xuICBiYi5oID0gYmIueTIgLSBiYi55MTtcbn07XG52YXIgZXhwYW5kQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBleHBhbmRCb3VuZGluZ0JveChiYikge1xuICB2YXIgcGFkZGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgYmIueDEgLT0gcGFkZGluZztcbiAgYmIueDIgKz0gcGFkZGluZztcbiAgYmIueTEgLT0gcGFkZGluZztcbiAgYmIueTIgKz0gcGFkZGluZztcbiAgYmIudyA9IGJiLngyIC0gYmIueDE7XG4gIGJiLmggPSBiYi55MiAtIGJiLnkxO1xuICByZXR1cm4gYmI7XG59O1xudmFyIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMgPSBmdW5jdGlvbiBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJiKSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbMF07XG4gIHZhciB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7XG4gIGlmIChwYWRkaW5nLmxlbmd0aCA9PT0gMSkge1xuICAgIHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gbGVmdCA9IHBhZGRpbmdbMF07XG4gIH0gZWxzZSBpZiAocGFkZGluZy5sZW5ndGggPT09IDIpIHtcbiAgICB0b3AgPSBib3R0b20gPSBwYWRkaW5nWzBdO1xuICAgIGxlZnQgPSByaWdodCA9IHBhZGRpbmdbMV07XG4gIH0gZWxzZSBpZiAocGFkZGluZy5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgX3BhZGRpbmcgPSBfc2xpY2VkVG9BcnJheShwYWRkaW5nLCA0KTtcbiAgICB0b3AgPSBfcGFkZGluZ1swXTtcbiAgICByaWdodCA9IF9wYWRkaW5nWzFdO1xuICAgIGJvdHRvbSA9IF9wYWRkaW5nWzJdO1xuICAgIGxlZnQgPSBfcGFkZGluZ1szXTtcbiAgfVxuICBiYi54MSAtPSBsZWZ0O1xuICBiYi54MiArPSByaWdodDtcbiAgYmIueTEgLT0gdG9wO1xuICBiYi55MiArPSBib3R0b207XG4gIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgcmV0dXJuIGJiO1xufTtcblxuLy8gYXNzaWduIHRoZSB2YWx1ZXMgb2YgYmIyIGludG8gYmIxXG52YXIgYXNzaWduQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBhc3NpZ25Cb3VuZGluZ0JveChiYjEsIGJiMikge1xuICBiYjEueDEgPSBiYjIueDE7XG4gIGJiMS55MSA9IGJiMi55MTtcbiAgYmIxLngyID0gYmIyLngyO1xuICBiYjEueTIgPSBiYjIueTI7XG4gIGJiMS53ID0gYmIxLngyIC0gYmIxLngxO1xuICBiYjEuaCA9IGJiMS55MiAtIGJiMS55MTtcbn07XG52YXIgYm91bmRpbmdCb3hlc0ludGVyc2VjdCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYmIxLCBiYjIpIHtcbiAgLy8gY2FzZTogb25lIGJiIHRvIHJpZ2h0IG9mIG90aGVyXG4gIGlmIChiYjEueDEgPiBiYjIueDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGJiMi54MSA+IGJiMS54Mikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGNhc2U6IG9uZSBiYiB0byBsZWZ0IG9mIG90aGVyXG4gIGlmIChiYjEueDIgPCBiYjIueDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGJiMi54MiA8IGJiMS54MSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGNhc2U6IG9uZSBiYiBhYm92ZSBvdGhlclxuICBpZiAoYmIxLnkyIDwgYmIyLnkxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChiYjIueTIgPCBiYjEueTEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjYXNlOiBvbmUgYmIgYmVsb3cgb3RoZXJcbiAgaWYgKGJiMS55MSA+IGJiMi55Mikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYmIyLnkxID4gYmIxLnkyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlLCBtdXN0IGhhdmUgc29tZSBvdmVybGFwXG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBpbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gaW5Cb3VuZGluZ0JveChiYiwgeCwgeSkge1xuICByZXR1cm4gYmIueDEgPD0geCAmJiB4IDw9IGJiLngyICYmIGJiLnkxIDw9IHkgJiYgeSA8PSBiYi55Mjtcbn07XG52YXIgcG9pbnRJbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gcG9pbnRJbkJvdW5kaW5nQm94KGJiLCBwdCkge1xuICByZXR1cm4gaW5Cb3VuZGluZ0JveChiYiwgcHQueCwgcHQueSk7XG59O1xudmFyIGJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChiYjEsIGJiMikge1xuICByZXR1cm4gaW5Cb3VuZGluZ0JveChiYjEsIGJiMi54MSwgYmIyLnkxKSAmJiBpbkJvdW5kaW5nQm94KGJiMSwgYmIyLngyLCBiYjIueTIpO1xufTtcbnZhciByb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUgPSBmdW5jdGlvbiByb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUoeCwgeSwgbm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSB7XG4gIHZhciByYWRpdXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNyAmJiBhcmd1bWVudHNbN10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s3XSA6ICdhdXRvJztcbiAgdmFyIGNvcm5lclJhZGl1cyA9IHJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMod2lkdGgsIGhlaWdodCkgOiByYWRpdXM7XG4gIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgY29ybmVyUmFkaXVzID0gTWF0aC5taW4oY29ybmVyUmFkaXVzLCBoYWxmV2lkdGgsIGhhbGZIZWlnaHQpO1xuICB2YXIgZG9XaWR0aCA9IGNvcm5lclJhZGl1cyAhPT0gaGFsZldpZHRoLFxuICAgIGRvSGVpZ2h0ID0gY29ybmVyUmFkaXVzICE9PSBoYWxmSGVpZ2h0O1xuXG4gIC8vIENoZWNrIGludGVyc2VjdGlvbnMgd2l0aCBzdHJhaWdodCBsaW5lIHNlZ21lbnRzXG4gIHZhciBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuXG4gIC8vIFRvcCBzZWdtZW50LCBsZWZ0IHRvIHJpZ2h0XG4gIGlmIChkb1dpZHRoKSB7XG4gICAgdmFyIHRvcFN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICB2YXIgdG9wRW5kWSA9IHRvcFN0YXJ0WTtcbiAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCB0b3BTdGFydFgsIHRvcFN0YXJ0WSwgdG9wRW5kWCwgdG9wRW5kWSwgZmFsc2UpO1xuICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJpZ2h0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgaWYgKGRvSGVpZ2h0KSB7XG4gICAgdmFyIHJpZ2h0U3RhcnRYID0gbm9kZVggKyBoYWxmV2lkdGggKyBwYWRkaW5nO1xuICAgIHZhciByaWdodFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgdmFyIHJpZ2h0RW5kWCA9IHJpZ2h0U3RhcnRYO1xuICAgIHZhciByaWdodEVuZFkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIHJpZ2h0U3RhcnRYLCByaWdodFN0YXJ0WSwgcmlnaHRFbmRYLCByaWdodEVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBCb3R0b20gc2VnbWVudCwgbGVmdCB0byByaWdodFxuICBpZiAoZG9XaWR0aCkge1xuICAgIHZhciBib3R0b21TdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgdmFyIGJvdHRvbVN0YXJ0WSA9IG5vZGVZICsgaGFsZkhlaWdodCArIHBhZGRpbmc7XG4gICAgdmFyIGJvdHRvbUVuZFggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgdmFyIGJvdHRvbUVuZFkgPSBib3R0b21TdGFydFk7XG4gICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIG5vZGVYLCBub2RlWSwgYm90dG9tU3RhcnRYLCBib3R0b21TdGFydFksIGJvdHRvbUVuZFgsIGJvdHRvbUVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBMZWZ0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgaWYgKGRvSGVpZ2h0KSB7XG4gICAgdmFyIGxlZnRTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgdmFyIGxlZnRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgIHZhciBsZWZ0RW5kWCA9IGxlZnRTdGFydFg7XG4gICAgdmFyIGxlZnRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCBsZWZ0U3RhcnRYLCBsZWZ0U3RhcnRZLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggYXJjIHNlZ21lbnRzXG4gIHZhciBhcmNJbnRlcnNlY3Rpb25zO1xuXG4gIC8vIFRvcCBMZWZ0XG4gIHtcbiAgICB2YXIgdG9wTGVmdENlbnRlclggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cztcbiAgICB2YXIgdG9wTGVmdENlbnRlclkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXM7XG4gICAgYXJjSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgbm9kZVgsIG5vZGVZLCB0b3BMZWZ0Q2VudGVyWCwgdG9wTGVmdENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG4gICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMCAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdIDw9IHRvcExlZnRDZW50ZXJYICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPD0gdG9wTGVmdENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG5cbiAgLy8gVG9wIFJpZ2h0XG4gIHtcbiAgICB2YXIgdG9wUmlnaHRDZW50ZXJYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXM7XG4gICAgdmFyIHRvcFJpZ2h0Q2VudGVyWSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cztcbiAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIHRvcFJpZ2h0Q2VudGVyWCwgdG9wUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSB0b3BSaWdodENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA8PSB0b3BSaWdodENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG5cbiAgLy8gQm90dG9tIFJpZ2h0XG4gIHtcbiAgICB2YXIgYm90dG9tUmlnaHRDZW50ZXJYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXM7XG4gICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cztcbiAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbVJpZ2h0Q2VudGVyWCwgYm90dG9tUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSBib3R0b21SaWdodENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA+PSBib3R0b21SaWdodENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG5cbiAgLy8gQm90dG9tIExlZnRcbiAge1xuICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzO1xuICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cztcbiAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbUxlZnRDZW50ZXJYLCBib3R0b21MZWZ0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPD0gYm90dG9tTGVmdENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA+PSBib3R0b21MZWZ0Q2VudGVyWSkge1xuICAgICAgcmV0dXJuIFthcmNJbnRlcnNlY3Rpb25zWzBdLCBhcmNJbnRlcnNlY3Rpb25zWzFdXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdOyAvLyBpZiBub3RoaW5nXG59O1xuXG52YXIgaW5MaW5lVmljaW5pdHkgPSBmdW5jdGlvbiBpbkxpbmVWaWNpbml0eSh4LCB5LCBseDEsIGx5MSwgbHgyLCBseTIsIHRvbGVyYW5jZSkge1xuICB2YXIgdCA9IHRvbGVyYW5jZTtcbiAgdmFyIHgxID0gTWF0aC5taW4obHgxLCBseDIpO1xuICB2YXIgeDIgPSBNYXRoLm1heChseDEsIGx4Mik7XG4gIHZhciB5MSA9IE1hdGgubWluKGx5MSwgbHkyKTtcbiAgdmFyIHkyID0gTWF0aC5tYXgobHkxLCBseTIpO1xuICByZXR1cm4geDEgLSB0IDw9IHggJiYgeCA8PSB4MiArIHQgJiYgeTEgLSB0IDw9IHkgJiYgeSA8PSB5MiArIHQ7XG59O1xudmFyIGluQmV6aWVyVmljaW5pdHkgPSBmdW5jdGlvbiBpbkJlemllclZpY2luaXR5KHgsIHksIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHRvbGVyYW5jZSkge1xuICB2YXIgYmIgPSB7XG4gICAgeDE6IE1hdGgubWluKHgxLCB4MywgeDIpIC0gdG9sZXJhbmNlLFxuICAgIHgyOiBNYXRoLm1heCh4MSwgeDMsIHgyKSArIHRvbGVyYW5jZSxcbiAgICB5MTogTWF0aC5taW4oeTEsIHkzLCB5MikgLSB0b2xlcmFuY2UsXG4gICAgeTI6IE1hdGgubWF4KHkxLCB5MywgeTIpICsgdG9sZXJhbmNlXG4gIH07XG5cbiAgLy8gaWYgb3V0c2lkZSB0aGUgcm91Z2ggYm91bmRpbmcgYm94IGZvciB0aGUgYmV6aWVyLCB0aGVuIGl0IGNhbid0IGJlIGEgaGl0XG4gIGlmICh4IDwgYmIueDEgfHwgeCA+IGJiLngyIHx8IHkgPCBiYi55MSB8fCB5ID4gYmIueTIpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnYmV6aWVyIG91dCBvZiByb3VnaCBiYicpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIC8vIGNvbnNvbGUubG9nKCdkbyBtb3JlIGV4cGVuc2l2ZSBjaGVjaycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xudmFyIHNvbHZlUXVhZHJhdGljID0gZnVuY3Rpb24gc29sdmVRdWFkcmF0aWMoYSwgYiwgYywgdmFsKSB7XG4gIGMgLT0gdmFsO1xuICB2YXIgciA9IGIgKiBiIC0gNCAqIGEgKiBjO1xuICBpZiAociA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIHNxcnRSID0gTWF0aC5zcXJ0KHIpO1xuICB2YXIgZGVub20gPSAyICogYTtcbiAgdmFyIHJvb3QxID0gKC1iICsgc3FydFIpIC8gZGVub207XG4gIHZhciByb290MiA9ICgtYiAtIHNxcnRSKSAvIGRlbm9tO1xuICByZXR1cm4gW3Jvb3QxLCByb290Ml07XG59O1xudmFyIHNvbHZlQ3ViaWMgPSBmdW5jdGlvbiBzb2x2ZUN1YmljKGEsIGIsIGMsIGQsIHJlc3VsdCkge1xuICAvLyBTb2x2ZXMgYSBjdWJpYyBmdW5jdGlvbiwgcmV0dXJucyByb290IGluIGZvcm0gW3IxLCBpMSwgcjIsIGkyLCByMywgaTNdLCB3aGVyZVxuICAvLyByIGlzIHRoZSByZWFsIGNvbXBvbmVudCwgaSBpcyB0aGUgaW1hZ2luYXJ5IGNvbXBvbmVudFxuXG4gIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYXJkYW5vIG1ldGhvZCBmcm9tIHRoZSB5ZWFyIDE1NDVcbiAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19mdW5jdGlvbiNUaGVfbmF0dXJlX29mX3RoZV9yb290c1xuXG4gIHZhciBlcHNpbG9uID0gMC4wMDAwMTtcblxuICAvLyBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvIHdoaWxlIGtlZXBpbmcgdGhlIG92ZXJhbGwgZXhwcmVzc2lvbiBjbG9zZSBpbiB2YWx1ZVxuICBpZiAoYSA9PT0gMCkge1xuICAgIGEgPSBlcHNpbG9uO1xuICB9XG4gIGIgLz0gYTtcbiAgYyAvPSBhO1xuICBkIC89IGE7XG4gIHZhciBkaXNjcmltaW5hbnQsIHEsIHIsIGR1bTEsIHMsIHQsIHRlcm0xLCByMTM7XG4gIHEgPSAoMy4wICogYyAtIGIgKiBiKSAvIDkuMDtcbiAgciA9IC0oMjcuMCAqIGQpICsgYiAqICg5LjAgKiBjIC0gMi4wICogKGIgKiBiKSk7XG4gIHIgLz0gNTQuMDtcbiAgZGlzY3JpbWluYW50ID0gcSAqIHEgKiBxICsgciAqIHI7XG4gIHJlc3VsdFsxXSA9IDA7XG4gIHRlcm0xID0gYiAvIDMuMDtcbiAgaWYgKGRpc2NyaW1pbmFudCA+IDApIHtcbiAgICBzID0gciArIE1hdGguc3FydChkaXNjcmltaW5hbnQpO1xuICAgIHMgPSBzIDwgMCA/IC1NYXRoLnBvdygtcywgMS4wIC8gMy4wKSA6IE1hdGgucG93KHMsIDEuMCAvIDMuMCk7XG4gICAgdCA9IHIgLSBNYXRoLnNxcnQoZGlzY3JpbWluYW50KTtcbiAgICB0ID0gdCA8IDAgPyAtTWF0aC5wb3coLXQsIDEuMCAvIDMuMCkgOiBNYXRoLnBvdyh0LCAxLjAgLyAzLjApO1xuICAgIHJlc3VsdFswXSA9IC10ZXJtMSArIHMgKyB0O1xuICAgIHRlcm0xICs9IChzICsgdCkgLyAyLjA7XG4gICAgcmVzdWx0WzRdID0gcmVzdWx0WzJdID0gLXRlcm0xO1xuICAgIHRlcm0xID0gTWF0aC5zcXJ0KDMuMCkgKiAoLXQgKyBzKSAvIDI7XG4gICAgcmVzdWx0WzNdID0gdGVybTE7XG4gICAgcmVzdWx0WzVdID0gLXRlcm0xO1xuICAgIHJldHVybjtcbiAgfVxuICByZXN1bHRbNV0gPSByZXN1bHRbM10gPSAwO1xuICBpZiAoZGlzY3JpbWluYW50ID09PSAwKSB7XG4gICAgcjEzID0gciA8IDAgPyAtTWF0aC5wb3coLXIsIDEuMCAvIDMuMCkgOiBNYXRoLnBvdyhyLCAxLjAgLyAzLjApO1xuICAgIHJlc3VsdFswXSA9IC10ZXJtMSArIDIuMCAqIHIxMztcbiAgICByZXN1bHRbNF0gPSByZXN1bHRbMl0gPSAtKHIxMyArIHRlcm0xKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcSA9IC1xO1xuICBkdW0xID0gcSAqIHEgKiBxO1xuICBkdW0xID0gTWF0aC5hY29zKHIgLyBNYXRoLnNxcnQoZHVtMSkpO1xuICByMTMgPSAyLjAgKiBNYXRoLnNxcnQocSk7XG4gIHJlc3VsdFswXSA9IC10ZXJtMSArIHIxMyAqIE1hdGguY29zKGR1bTEgLyAzLjApO1xuICByZXN1bHRbMl0gPSAtdGVybTEgKyByMTMgKiBNYXRoLmNvcygoZHVtMSArIDIuMCAqIE1hdGguUEkpIC8gMy4wKTtcbiAgcmVzdWx0WzRdID0gLXRlcm0xICsgcjEzICogTWF0aC5jb3MoKGR1bTEgKyA0LjAgKiBNYXRoLlBJKSAvIDMuMCk7XG4gIHJldHVybjtcbn07XG52YXIgc3FkaXN0VG9RdWFkcmF0aWNCZXppZXIgPSBmdW5jdGlvbiBzcWRpc3RUb1F1YWRyYXRpY0Jlemllcih4LCB5LCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gIC8vIEZpbmQgbWluaW11bSBkaXN0YW5jZSBieSB1c2luZyB0aGUgbWluaW11bSBvZiB0aGUgZGlzdGFuY2VcbiAgLy8gZnVuY3Rpb24gYmV0d2VlbiB0aGUgZ2l2ZW4gcG9pbnQgYW5kIHRoZSBjdXJ2ZVxuXG4gIC8vIFRoaXMgZ2l2ZXMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcmVzdWx0aW5nIGN1YmljIGVxdWF0aW9uXG4gIC8vIHdob3NlIHJvb3RzIHRlbGwgdXMgd2hlcmUgYSBwb3NzaWJsZSBtaW5pbXVtIGlzXG4gIC8vIChDb2VmZmljaWVudHMgYXJlIGRpdmlkZWQgYnkgNClcblxuICB2YXIgYSA9IDEuMCAqIHgxICogeDEgLSA0ICogeDEgKiB4MiArIDIgKiB4MSAqIHgzICsgNCAqIHgyICogeDIgLSA0ICogeDIgKiB4MyArIHgzICogeDMgKyB5MSAqIHkxIC0gNCAqIHkxICogeTIgKyAyICogeTEgKiB5MyArIDQgKiB5MiAqIHkyIC0gNCAqIHkyICogeTMgKyB5MyAqIHkzO1xuICB2YXIgYiA9IDEuMCAqIDkgKiB4MSAqIHgyIC0gMyAqIHgxICogeDEgLSAzICogeDEgKiB4MyAtIDYgKiB4MiAqIHgyICsgMyAqIHgyICogeDMgKyA5ICogeTEgKiB5MiAtIDMgKiB5MSAqIHkxIC0gMyAqIHkxICogeTMgLSA2ICogeTIgKiB5MiArIDMgKiB5MiAqIHkzO1xuICB2YXIgYyA9IDEuMCAqIDMgKiB4MSAqIHgxIC0gNiAqIHgxICogeDIgKyB4MSAqIHgzIC0geDEgKiB4ICsgMiAqIHgyICogeDIgKyAyICogeDIgKiB4IC0geDMgKiB4ICsgMyAqIHkxICogeTEgLSA2ICogeTEgKiB5MiArIHkxICogeTMgLSB5MSAqIHkgKyAyICogeTIgKiB5MiArIDIgKiB5MiAqIHkgLSB5MyAqIHk7XG4gIHZhciBkID0gMS4wICogeDEgKiB4MiAtIHgxICogeDEgKyB4MSAqIHggLSB4MiAqIHggKyB5MSAqIHkyIC0geTEgKiB5MSArIHkxICogeSAtIHkyICogeTtcblxuICAvLyBkZWJ1ZyhcImNvZWZmaWNpZW50czogXCIgKyBhIC8gYSArIFwiLCBcIiArIGIgLyBhICsgXCIsIFwiICsgYyAvIGEgKyBcIiwgXCIgKyBkIC8gYSk7XG5cbiAgdmFyIHJvb3RzID0gW107XG5cbiAgLy8gVXNlIHRoZSBjdWJpYyBzb2x2aW5nIGFsZ29yaXRobVxuICBzb2x2ZUN1YmljKGEsIGIsIGMsIGQsIHJvb3RzKTtcbiAgdmFyIHplcm9UaHJlc2hvbGQgPSAwLjAwMDAwMDE7XG4gIHZhciBwYXJhbXMgPSBbXTtcbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDY7IGluZGV4ICs9IDIpIHtcbiAgICBpZiAoTWF0aC5hYnMocm9vdHNbaW5kZXggKyAxXSkgPCB6ZXJvVGhyZXNob2xkICYmIHJvb3RzW2luZGV4XSA+PSAwICYmIHJvb3RzW2luZGV4XSA8PSAxLjApIHtcbiAgICAgIHBhcmFtcy5wdXNoKHJvb3RzW2luZGV4XSk7XG4gICAgfVxuICB9XG4gIHBhcmFtcy5wdXNoKDEuMCk7XG4gIHBhcmFtcy5wdXNoKDAuMCk7XG4gIHZhciBtaW5EaXN0YW5jZVNxdWFyZWQgPSAtMTtcbiAgdmFyIGN1clgsIGN1clksIGRpc3RTcXVhcmVkO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgIGN1clggPSBNYXRoLnBvdygxLjAgLSBwYXJhbXNbaV0sIDIuMCkgKiB4MSArIDIuMCAqICgxIC0gcGFyYW1zW2ldKSAqIHBhcmFtc1tpXSAqIHgyICsgcGFyYW1zW2ldICogcGFyYW1zW2ldICogeDM7XG4gICAgY3VyWSA9IE1hdGgucG93KDEgLSBwYXJhbXNbaV0sIDIuMCkgKiB5MSArIDIgKiAoMS4wIC0gcGFyYW1zW2ldKSAqIHBhcmFtc1tpXSAqIHkyICsgcGFyYW1zW2ldICogcGFyYW1zW2ldICogeTM7XG4gICAgZGlzdFNxdWFyZWQgPSBNYXRoLnBvdyhjdXJYIC0geCwgMikgKyBNYXRoLnBvdyhjdXJZIC0geSwgMik7XG4gICAgLy8gZGVidWcoJ2Rpc3RhbmNlIGZvciBwYXJhbSAnICsgcGFyYW1zW2ldICsgXCI6IFwiICsgTWF0aC5zcXJ0KGRpc3RTcXVhcmVkKSk7XG4gICAgaWYgKG1pbkRpc3RhbmNlU3F1YXJlZCA+PSAwKSB7XG4gICAgICBpZiAoZGlzdFNxdWFyZWQgPCBtaW5EaXN0YW5jZVNxdWFyZWQpIHtcbiAgICAgICAgbWluRGlzdGFuY2VTcXVhcmVkID0gZGlzdFNxdWFyZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbkRpc3RhbmNlU3F1YXJlZCA9IGRpc3RTcXVhcmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluRGlzdGFuY2VTcXVhcmVkO1xufTtcbnZhciBzcWRpc3RUb0Zpbml0ZUxpbmUgPSBmdW5jdGlvbiBzcWRpc3RUb0Zpbml0ZUxpbmUoeCwgeSwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIG9mZnNldCA9IFt4IC0geDEsIHkgLSB5MV07XG4gIHZhciBsaW5lID0gW3gyIC0geDEsIHkyIC0geTFdO1xuICB2YXIgbGluZVNxID0gbGluZVswXSAqIGxpbmVbMF0gKyBsaW5lWzFdICogbGluZVsxXTtcbiAgdmFyIGh5cFNxID0gb2Zmc2V0WzBdICogb2Zmc2V0WzBdICsgb2Zmc2V0WzFdICogb2Zmc2V0WzFdO1xuICB2YXIgZG90UHJvZHVjdCA9IG9mZnNldFswXSAqIGxpbmVbMF0gKyBvZmZzZXRbMV0gKiBsaW5lWzFdO1xuICB2YXIgYWRqU3EgPSBkb3RQcm9kdWN0ICogZG90UHJvZHVjdCAvIGxpbmVTcTtcbiAgaWYgKGRvdFByb2R1Y3QgPCAwKSB7XG4gICAgcmV0dXJuIGh5cFNxO1xuICB9XG4gIGlmIChhZGpTcSA+IGxpbmVTcSkge1xuICAgIHJldHVybiAoeCAtIHgyKSAqICh4IC0geDIpICsgKHkgLSB5MikgKiAoeSAtIHkyKTtcbiAgfVxuICByZXR1cm4gaHlwU3EgLSBhZGpTcTtcbn07XG52YXIgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzID0gZnVuY3Rpb24gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHBvaW50cykge1xuICB2YXIgeDEsIHkxLCB4MiwgeTI7XG4gIHZhciB5MztcblxuICAvLyBJbnRlcnNlY3Qgd2l0aCB2ZXJ0aWNhbCBsaW5lIHRocm91Z2ggKHgsIHkpXG4gIHZhciB1cCA9IDA7XG4gIC8vIGxldCBkb3duID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgeDEgPSBwb2ludHNbaSAqIDJdO1xuICAgIHkxID0gcG9pbnRzW2kgKiAyICsgMV07XG4gICAgaWYgKGkgKyAxIDwgcG9pbnRzLmxlbmd0aCAvIDIpIHtcbiAgICAgIHgyID0gcG9pbnRzWyhpICsgMSkgKiAyXTtcbiAgICAgIHkyID0gcG9pbnRzWyhpICsgMSkgKiAyICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHgyID0gcG9pbnRzWyhpICsgMSAtIHBvaW50cy5sZW5ndGggLyAyKSAqIDJdO1xuICAgICAgeTIgPSBwb2ludHNbKGkgKyAxIC0gcG9pbnRzLmxlbmd0aCAvIDIpICogMiArIDFdO1xuICAgIH1cbiAgICBpZiAoeDEgPT0geCAmJiB4MiA9PSB4KSA7IGVsc2UgaWYgKHgxID49IHggJiYgeCA+PSB4MiB8fCB4MSA8PSB4ICYmIHggPD0geDIpIHtcbiAgICAgIHkzID0gKHggLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTtcbiAgICAgIGlmICh5MyA+IHkpIHtcbiAgICAgICAgdXArKztcbiAgICAgIH1cblxuICAgICAgLy8gaWYoIHkzIDwgeSApe1xuICAgICAgLy8gZG93bisrO1xuICAgICAgLy8gfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHVwICUgMiA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbnZhciBwb2ludEluc2lkZVBvbHlnb24gPSBmdW5jdGlvbiBwb2ludEluc2lkZVBvbHlnb24oeCwgeSwgYmFzZVBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgZGlyZWN0aW9uLCBwYWRkaW5nKSB7XG4gIHZhciB0cmFuc2Zvcm1lZFBvaW50cyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCk7XG5cbiAgLy8gR2l2ZXMgbmVnYXRpdmUgYW5nbGVcbiAgdmFyIGFuZ2xlO1xuICBpZiAoZGlyZWN0aW9uWzBdICE9IG51bGwpIHtcbiAgICBhbmdsZSA9IE1hdGguYXRhbihkaXJlY3Rpb25bMV0gLyBkaXJlY3Rpb25bMF0pO1xuICAgIGlmIChkaXJlY3Rpb25bMF0gPCAwKSB7XG4gICAgICBhbmdsZSA9IGFuZ2xlICsgTWF0aC5QSSAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuZ2xlID0gLWFuZ2xlIC0gTWF0aC5QSSAvIDI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFuZ2xlID0gZGlyZWN0aW9uO1xuICB9XG4gIHZhciBjb3MgPSBNYXRoLmNvcygtYW5nbGUpO1xuICB2YXIgc2luID0gTWF0aC5zaW4oLWFuZ2xlKTtcblxuICAvLyAgICBjb25zb2xlLmxvZyhcImJhc2U6IFwiICsgYmFzZVBvaW50cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3JtZWRQb2ludHMubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdID0gd2lkdGggLyAyICogKGJhc2VQb2ludHNbaSAqIDJdICogY29zIC0gYmFzZVBvaW50c1tpICogMiArIDFdICogc2luKTtcbiAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMiArIDFdID0gaGVpZ2h0IC8gMiAqIChiYXNlUG9pbnRzW2kgKiAyICsgMV0gKiBjb3MgKyBiYXNlUG9pbnRzW2kgKiAyXSAqIHNpbik7XG4gICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdICs9IGNlbnRlclg7XG4gICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDIgKyAxXSArPSBjZW50ZXJZO1xuICB9XG4gIHZhciBwb2ludHM7XG4gIGlmIChwYWRkaW5nID4gMCkge1xuICAgIHZhciBleHBhbmRlZExpbmVTZXQgPSBleHBhbmRQb2x5Z29uKHRyYW5zZm9ybWVkUG9pbnRzLCAtcGFkZGluZyk7XG4gICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZGVkTGluZVNldCk7XG4gIH0gZWxzZSB7XG4gICAgcG9pbnRzID0gdHJhbnNmb3JtZWRQb2ludHM7XG4gIH1cbiAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpO1xufTtcbnZhciBwb2ludEluc2lkZVJvdW5kUG9seWdvbiA9IGZ1bmN0aW9uIHBvaW50SW5zaWRlUm91bmRQb2x5Z29uKHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lcnMpIHtcbiAgdmFyIGN1dFBvbHlnb25Qb2ludHMgPSBuZXcgQXJyYXkoYmFzZVBvaW50cy5sZW5ndGggKiAyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3JuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvcm5lciA9IGNvcm5lcnNbaV07XG4gICAgY3V0UG9seWdvblBvaW50c1tpICogNCArIDBdID0gY29ybmVyLnN0YXJ0WDtcbiAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0ICsgMV0gPSBjb3JuZXIuc3RhcnRZO1xuICAgIGN1dFBvbHlnb25Qb2ludHNbaSAqIDQgKyAyXSA9IGNvcm5lci5zdG9wWDtcbiAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0ICsgM10gPSBjb3JuZXIuc3RvcFk7XG4gICAgdmFyIHNxdWFyZWREaXN0YW5jZSA9IE1hdGgucG93KGNvcm5lci5jeCAtIHgsIDIpICsgTWF0aC5wb3coY29ybmVyLmN5IC0geSwgMik7XG4gICAgaWYgKHNxdWFyZWREaXN0YW5jZSA8PSBNYXRoLnBvdyhjb3JuZXIucmFkaXVzLCAyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0UG9seWdvblBvaW50cyk7XG59O1xudmFyIGpvaW5MaW5lcyA9IGZ1bmN0aW9uIGpvaW5MaW5lcyhsaW5lU2V0KSB7XG4gIHZhciB2ZXJ0aWNlcyA9IG5ldyBBcnJheShsaW5lU2V0Lmxlbmd0aCAvIDIpO1xuICB2YXIgY3VycmVudExpbmVTdGFydFgsIGN1cnJlbnRMaW5lU3RhcnRZLCBjdXJyZW50TGluZUVuZFgsIGN1cnJlbnRMaW5lRW5kWTtcbiAgdmFyIG5leHRMaW5lU3RhcnRYLCBuZXh0TGluZVN0YXJ0WSwgbmV4dExpbmVFbmRYLCBuZXh0TGluZUVuZFk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVNldC5sZW5ndGggLyA0OyBpKyspIHtcbiAgICBjdXJyZW50TGluZVN0YXJ0WCA9IGxpbmVTZXRbaSAqIDRdO1xuICAgIGN1cnJlbnRMaW5lU3RhcnRZID0gbGluZVNldFtpICogNCArIDFdO1xuICAgIGN1cnJlbnRMaW5lRW5kWCA9IGxpbmVTZXRbaSAqIDQgKyAyXTtcbiAgICBjdXJyZW50TGluZUVuZFkgPSBsaW5lU2V0W2kgKiA0ICsgM107XG4gICAgaWYgKGkgPCBsaW5lU2V0Lmxlbmd0aCAvIDQgLSAxKSB7XG4gICAgICBuZXh0TGluZVN0YXJ0WCA9IGxpbmVTZXRbKGkgKyAxKSAqIDRdO1xuICAgICAgbmV4dExpbmVTdGFydFkgPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgMV07XG4gICAgICBuZXh0TGluZUVuZFggPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgMl07XG4gICAgICBuZXh0TGluZUVuZFkgPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgM107XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRMaW5lU3RhcnRYID0gbGluZVNldFswXTtcbiAgICAgIG5leHRMaW5lU3RhcnRZID0gbGluZVNldFsxXTtcbiAgICAgIG5leHRMaW5lRW5kWCA9IGxpbmVTZXRbMl07XG4gICAgICBuZXh0TGluZUVuZFkgPSBsaW5lU2V0WzNdO1xuICAgIH1cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gZmluaXRlTGluZXNJbnRlcnNlY3QoY3VycmVudExpbmVTdGFydFgsIGN1cnJlbnRMaW5lU3RhcnRZLCBjdXJyZW50TGluZUVuZFgsIGN1cnJlbnRMaW5lRW5kWSwgbmV4dExpbmVTdGFydFgsIG5leHRMaW5lU3RhcnRZLCBuZXh0TGluZUVuZFgsIG5leHRMaW5lRW5kWSwgdHJ1ZSk7XG4gICAgdmVydGljZXNbaSAqIDJdID0gaW50ZXJzZWN0aW9uWzBdO1xuICAgIHZlcnRpY2VzW2kgKiAyICsgMV0gPSBpbnRlcnNlY3Rpb25bMV07XG4gIH1cbiAgcmV0dXJuIHZlcnRpY2VzO1xufTtcbnZhciBleHBhbmRQb2x5Z29uID0gZnVuY3Rpb24gZXhwYW5kUG9seWdvbihwb2ludHMsIHBhZCkge1xuICB2YXIgZXhwYW5kZWRMaW5lU2V0ID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcbiAgdmFyIGN1cnJlbnRQb2ludFgsIGN1cnJlbnRQb2ludFksIG5leHRQb2ludFgsIG5leHRQb2ludFk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgIGN1cnJlbnRQb2ludFggPSBwb2ludHNbaSAqIDJdO1xuICAgIGN1cnJlbnRQb2ludFkgPSBwb2ludHNbaSAqIDIgKyAxXTtcbiAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGggLyAyIC0gMSkge1xuICAgICAgbmV4dFBvaW50WCA9IHBvaW50c1soaSArIDEpICogMl07XG4gICAgICBuZXh0UG9pbnRZID0gcG9pbnRzWyhpICsgMSkgKiAyICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRQb2ludFggPSBwb2ludHNbMF07XG4gICAgICBuZXh0UG9pbnRZID0gcG9pbnRzWzFdO1xuICAgIH1cblxuICAgIC8vIEN1cnJlbnQgbGluZTogW2N1cnJlbnRQb2ludFgsIGN1cnJlbnRQb2ludFldIHRvIFtuZXh0UG9pbnRYLCBuZXh0UG9pbnRZXVxuXG4gICAgLy8gQXNzdW1lIENDVyBwb2x5Z29uIHdpbmRpbmdcblxuICAgIHZhciBvZmZzZXRYID0gbmV4dFBvaW50WSAtIGN1cnJlbnRQb2ludFk7XG4gICAgdmFyIG9mZnNldFkgPSAtKG5leHRQb2ludFggLSBjdXJyZW50UG9pbnRYKTtcblxuICAgIC8vIE5vcm1hbGl6ZVxuICAgIHZhciBvZmZzZXRMZW5ndGggPSBNYXRoLnNxcnQob2Zmc2V0WCAqIG9mZnNldFggKyBvZmZzZXRZICogb2Zmc2V0WSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRPZmZzZXRYID0gb2Zmc2V0WCAvIG9mZnNldExlbmd0aDtcbiAgICB2YXIgbm9ybWFsaXplZE9mZnNldFkgPSBvZmZzZXRZIC8gb2Zmc2V0TGVuZ3RoO1xuICAgIGV4cGFuZGVkTGluZVNldFtpICogNF0gPSBjdXJyZW50UG9pbnRYICsgbm9ybWFsaXplZE9mZnNldFggKiBwYWQ7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgMV0gPSBjdXJyZW50UG9pbnRZICsgbm9ybWFsaXplZE9mZnNldFkgKiBwYWQ7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgMl0gPSBuZXh0UG9pbnRYICsgbm9ybWFsaXplZE9mZnNldFggKiBwYWQ7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgM10gPSBuZXh0UG9pbnRZICsgbm9ybWFsaXplZE9mZnNldFkgKiBwYWQ7XG4gIH1cbiAgcmV0dXJuIGV4cGFuZGVkTGluZVNldDtcbn07XG52YXIgaW50ZXJzZWN0TGluZUVsbGlwc2UgPSBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lRWxsaXBzZSh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCBlbGxpcHNlV3JhZGl1cywgZWxsaXBzZUhyYWRpdXMpIHtcbiAgdmFyIGRpc3BYID0gY2VudGVyWCAtIHg7XG4gIHZhciBkaXNwWSA9IGNlbnRlclkgLSB5O1xuICBkaXNwWCAvPSBlbGxpcHNlV3JhZGl1cztcbiAgZGlzcFkgLz0gZWxsaXBzZUhyYWRpdXM7XG4gIHZhciBsZW4gPSBNYXRoLnNxcnQoZGlzcFggKiBkaXNwWCArIGRpc3BZICogZGlzcFkpO1xuICB2YXIgbmV3TGVuZ3RoID0gbGVuIC0gMTtcbiAgaWYgKG5ld0xlbmd0aCA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlblByb3BvcnRpb24gPSBuZXdMZW5ndGggLyBsZW47XG4gIHJldHVybiBbKGNlbnRlclggLSB4KSAqIGxlblByb3BvcnRpb24gKyB4LCAoY2VudGVyWSAtIHkpICogbGVuUHJvcG9ydGlvbiArIHldO1xufTtcbnZhciBjaGVja0luRWxsaXBzZSA9IGZ1bmN0aW9uIGNoZWNrSW5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHBhZGRpbmcpIHtcbiAgeCAtPSBjZW50ZXJYO1xuICB5IC09IGNlbnRlclk7XG4gIHggLz0gd2lkdGggLyAyICsgcGFkZGluZztcbiAgeSAvPSBoZWlnaHQgLyAyICsgcGFkZGluZztcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgPD0gMTtcbn07XG5cbi8vIFJldHVybnMgaW50ZXJzZWN0aW9ucyBvZiBpbmNyZWFzaW5nIGRpc3RhbmNlIGZyb20gbGluZSdzIHN0YXJ0IHBvaW50XG52YXIgaW50ZXJzZWN0TGluZUNpcmNsZSA9IGZ1bmN0aW9uIGludGVyc2VjdExpbmVDaXJjbGUoeDEsIHkxLCB4MiwgeTIsIGNlbnRlclgsIGNlbnRlclksIHJhZGl1cykge1xuICAvLyBDYWxjdWxhdGUgZCwgZGlyZWN0aW9uIHZlY3RvciBvZiBsaW5lXG4gIHZhciBkID0gW3gyIC0geDEsIHkyIC0geTFdOyAvLyBEaXJlY3Rpb24gdmVjdG9yIG9mIGxpbmVcbiAgdmFyIGYgPSBbeDEgLSBjZW50ZXJYLCB5MSAtIGNlbnRlclldO1xuICB2YXIgYSA9IGRbMF0gKiBkWzBdICsgZFsxXSAqIGRbMV07XG4gIHZhciBiID0gMiAqIChmWzBdICogZFswXSArIGZbMV0gKiBkWzFdKTtcbiAgdmFyIGMgPSBmWzBdICogZlswXSArIGZbMV0gKiBmWzFdIC0gcmFkaXVzICogcmFkaXVzO1xuICB2YXIgZGlzY3JpbWluYW50ID0gYiAqIGIgLSA0ICogYSAqIGM7XG4gIGlmIChkaXNjcmltaW5hbnQgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciB0MSA9ICgtYiArIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG4gIHZhciB0MiA9ICgtYiAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG4gIHZhciB0TWluID0gTWF0aC5taW4odDEsIHQyKTtcbiAgdmFyIHRNYXggPSBNYXRoLm1heCh0MSwgdDIpO1xuICB2YXIgaW5SYW5nZVBhcmFtcyA9IFtdO1xuICBpZiAodE1pbiA+PSAwICYmIHRNaW4gPD0gMSkge1xuICAgIGluUmFuZ2VQYXJhbXMucHVzaCh0TWluKTtcbiAgfVxuICBpZiAodE1heCA+PSAwICYmIHRNYXggPD0gMSkge1xuICAgIGluUmFuZ2VQYXJhbXMucHVzaCh0TWF4KTtcbiAgfVxuICBpZiAoaW5SYW5nZVBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIG5lYXJJbnRlcnNlY3Rpb25YID0gaW5SYW5nZVBhcmFtc1swXSAqIGRbMF0gKyB4MTtcbiAgdmFyIG5lYXJJbnRlcnNlY3Rpb25ZID0gaW5SYW5nZVBhcmFtc1swXSAqIGRbMV0gKyB5MTtcbiAgaWYgKGluUmFuZ2VQYXJhbXMubGVuZ3RoID4gMSkge1xuICAgIGlmIChpblJhbmdlUGFyYW1zWzBdID09IGluUmFuZ2VQYXJhbXNbMV0pIHtcbiAgICAgIHJldHVybiBbbmVhckludGVyc2VjdGlvblgsIG5lYXJJbnRlcnNlY3Rpb25ZXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZhckludGVyc2VjdGlvblggPSBpblJhbmdlUGFyYW1zWzFdICogZFswXSArIHgxO1xuICAgICAgdmFyIGZhckludGVyc2VjdGlvblkgPSBpblJhbmdlUGFyYW1zWzFdICogZFsxXSArIHkxO1xuICAgICAgcmV0dXJuIFtuZWFySW50ZXJzZWN0aW9uWCwgbmVhckludGVyc2VjdGlvblksIGZhckludGVyc2VjdGlvblgsIGZhckludGVyc2VjdGlvblldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW25lYXJJbnRlcnNlY3Rpb25YLCBuZWFySW50ZXJzZWN0aW9uWV07XG4gIH1cbn07XG52YXIgbWlkT2ZUaHJlZSA9IGZ1bmN0aW9uIG1pZE9mVGhyZWUoYSwgYiwgYykge1xuICBpZiAoYiA8PSBhICYmIGEgPD0gYyB8fCBjIDw9IGEgJiYgYSA8PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0gZWxzZSBpZiAoYSA8PSBiICYmIGIgPD0gYyB8fCBjIDw9IGIgJiYgYiA8PSBhKSB7XG4gICAgcmV0dXJuIGI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGM7XG4gIH1cbn07XG5cbi8vICh4MSx5MSk9Pih4Mix5MikgaW50ZXJzZWN0IHdpdGggKHgzLHkzKT0+KHg0LHk0KVxudmFyIGZpbml0ZUxpbmVzSW50ZXJzZWN0ID0gZnVuY3Rpb24gZmluaXRlTGluZXNJbnRlcnNlY3QoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBpbmZpbml0ZUxpbmVzKSB7XG4gIHZhciBkeDEzID0geDEgLSB4MztcbiAgdmFyIGR4MjEgPSB4MiAtIHgxO1xuICB2YXIgZHg0MyA9IHg0IC0geDM7XG4gIHZhciBkeTEzID0geTEgLSB5MztcbiAgdmFyIGR5MjEgPSB5MiAtIHkxO1xuICB2YXIgZHk0MyA9IHk0IC0geTM7XG4gIHZhciB1YV90ID0gZHg0MyAqIGR5MTMgLSBkeTQzICogZHgxMztcbiAgdmFyIHViX3QgPSBkeDIxICogZHkxMyAtIGR5MjEgKiBkeDEzO1xuICB2YXIgdV9iID0gZHk0MyAqIGR4MjEgLSBkeDQzICogZHkyMTtcbiAgaWYgKHVfYiAhPT0gMCkge1xuICAgIHZhciB1YSA9IHVhX3QgLyB1X2I7XG4gICAgdmFyIHViID0gdWJfdCAvIHVfYjtcbiAgICB2YXIgZmxwdFRocmVzaG9sZCA9IDAuMDAxO1xuICAgIHZhciBfbWluID0gMCAtIGZscHRUaHJlc2hvbGQ7XG4gICAgdmFyIF9tYXggPSAxICsgZmxwdFRocmVzaG9sZDtcbiAgICBpZiAoX21pbiA8PSB1YSAmJiB1YSA8PSBfbWF4ICYmIF9taW4gPD0gdWIgJiYgdWIgPD0gX21heCkge1xuICAgICAgcmV0dXJuIFt4MSArIHVhICogZHgyMSwgeTEgKyB1YSAqIGR5MjFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWluZmluaXRlTGluZXMpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt4MSArIHVhICogZHgyMSwgeTEgKyB1YSAqIGR5MjFdO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodWFfdCA9PT0gMCB8fCB1Yl90ID09PSAwKSB7XG4gICAgICAvLyBQYXJhbGxlbCwgY29pbmNpZGVudCBsaW5lcy4gQ2hlY2sgaWYgb3ZlcmxhcFxuXG4gICAgICAvLyBDaGVjayBlbmRwb2ludCBvZiBzZWNvbmQgbGluZVxuICAgICAgaWYgKG1pZE9mVGhyZWUoeDEsIHgyLCB4NCkgPT09IHg0KSB7XG4gICAgICAgIHJldHVybiBbeDQsIHk0XTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgc3RhcnQgcG9pbnQgb2Ygc2Vjb25kIGxpbmVcbiAgICAgIGlmIChtaWRPZlRocmVlKHgxLCB4MiwgeDMpID09PSB4Mykge1xuICAgICAgICByZXR1cm4gW3gzLCB5M107XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZHBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICAgIGlmIChtaWRPZlRocmVlKHgzLCB4NCwgeDIpID09PSB4Mikge1xuICAgICAgICByZXR1cm4gW3gyLCB5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcmFsbGVsLCBub24tY29pbmNpZGVudFxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufTtcblxuLy8gbWF0aC5wb2x5Z29uSW50ZXJzZWN0TGluZSggeCwgeSwgYmFzZVBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZyApXG4vLyBpbnRlcnNlY3QgYSBub2RlIHBvbHlnb24gKHB0cyB0cmFuc2Zvcm1lZClcbi8vXG4vLyBtYXRoLnBvbHlnb25JbnRlcnNlY3RMaW5lKCB4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZIClcbi8vIGludGVyc2VjdCB0aGUgcG9pbnRzIChubyB0cmFuc2Zvcm0pXG52YXIgcG9seWdvbkludGVyc2VjdExpbmUgPSBmdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSB7XG4gIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG4gIHZhciBpbnRlcnNlY3Rpb247XG4gIHZhciB0cmFuc2Zvcm1lZFBvaW50cyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCk7XG4gIHZhciBkb1RyYW5zZm9ybSA9IHRydWU7XG4gIGlmICh3aWR0aCA9PSBudWxsKSB7XG4gICAgZG9UcmFuc2Zvcm0gPSBmYWxzZTtcbiAgfVxuICB2YXIgcG9pbnRzO1xuICBpZiAoZG9UcmFuc2Zvcm0pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybWVkUG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdID0gYmFzZVBvaW50c1tpICogMl0gKiB3aWR0aCArIGNlbnRlclg7XG4gICAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMiArIDFdID0gYmFzZVBvaW50c1tpICogMiArIDFdICogaGVpZ2h0ICsgY2VudGVyWTtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICB2YXIgZXhwYW5kZWRMaW5lU2V0ID0gZXhwYW5kUG9seWdvbih0cmFuc2Zvcm1lZFBvaW50cywgLXBhZGRpbmcpO1xuICAgICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZGVkTGluZVNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50cyA9IHRyYW5zZm9ybWVkUG9pbnRzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBiYXNlUG9pbnRzO1xuICB9XG4gIHZhciBjdXJyZW50WCwgY3VycmVudFksIG5leHRYLCBuZXh0WTtcbiAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcG9pbnRzLmxlbmd0aCAvIDI7IF9pMisrKSB7XG4gICAgY3VycmVudFggPSBwb2ludHNbX2kyICogMl07XG4gICAgY3VycmVudFkgPSBwb2ludHNbX2kyICogMiArIDFdO1xuICAgIGlmIChfaTIgPCBwb2ludHMubGVuZ3RoIC8gMiAtIDEpIHtcbiAgICAgIG5leHRYID0gcG9pbnRzWyhfaTIgKyAxKSAqIDJdO1xuICAgICAgbmV4dFkgPSBwb2ludHNbKF9pMiArIDEpICogMiArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0WCA9IHBvaW50c1swXTtcbiAgICAgIG5leHRZID0gcG9pbnRzWzFdO1xuICAgIH1cbiAgICBpbnRlcnNlY3Rpb24gPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCBjdXJyZW50WCwgY3VycmVudFksIG5leHRYLCBuZXh0WSk7XG4gICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgIGludGVyc2VjdGlvbnMucHVzaChpbnRlcnNlY3Rpb25bMF0sIGludGVyc2VjdGlvblsxXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnRlcnNlY3Rpb25zO1xufTtcbnZhciByb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lID0gZnVuY3Rpb24gcm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCBjb3JuZXJzKSB7XG4gIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG4gIHZhciBpbnRlcnNlY3Rpb247XG4gIHZhciBsaW5lcyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCAqIDIpO1xuICBjb3JuZXJzLmZvckVhY2goZnVuY3Rpb24gKGNvcm5lciwgaSkge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAyXSA9IGNvcm5lci5zdGFydFg7XG4gICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9IGNvcm5lci5zdGFydFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzW2kgKiA0IC0gMl0gPSBjb3JuZXIuc3RhcnRYO1xuICAgICAgbGluZXNbaSAqIDQgLSAxXSA9IGNvcm5lci5zdGFydFk7XG4gICAgfVxuICAgIGxpbmVzW2kgKiA0XSA9IGNvcm5lci5zdG9wWDtcbiAgICBsaW5lc1tpICogNCArIDFdID0gY29ybmVyLnN0b3BZO1xuICAgIGludGVyc2VjdGlvbiA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgY29ybmVyLmN4LCBjb3JuZXIuY3ksIGNvcm5lci5yYWRpdXMpO1xuICAgIGlmIChpbnRlcnNlY3Rpb24ubGVuZ3RoICE9PSAwKSB7XG4gICAgICBpbnRlcnNlY3Rpb25zLnB1c2goaW50ZXJzZWN0aW9uWzBdLCBpbnRlcnNlY3Rpb25bMV0pO1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoIC8gNDsgaSsrKSB7XG4gICAgaW50ZXJzZWN0aW9uID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgbGluZXNbaSAqIDRdLCBsaW5lc1tpICogNCArIDFdLCBsaW5lc1tpICogNCArIDJdLCBsaW5lc1tpICogNCArIDNdLCBmYWxzZSk7XG4gICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgIGludGVyc2VjdGlvbnMucHVzaChpbnRlcnNlY3Rpb25bMF0sIGludGVyc2VjdGlvblsxXSk7XG4gICAgfVxuICB9XG4gIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDIpIHtcbiAgICB2YXIgbG93ZXN0SW50ZXJzZWN0aW9uID0gW2ludGVyc2VjdGlvbnNbMF0sIGludGVyc2VjdGlvbnNbMV1dO1xuICAgIHZhciBsb3dlc3RTcXVhcmVkRGlzdGFuY2UgPSBNYXRoLnBvdyhsb3dlc3RJbnRlcnNlY3Rpb25bMF0gLSB4LCAyKSArIE1hdGgucG93KGxvd2VzdEludGVyc2VjdGlvblsxXSAtIHksIDIpO1xuICAgIGZvciAodmFyIF9pMyA9IDE7IF9pMyA8IGludGVyc2VjdGlvbnMubGVuZ3RoIC8gMjsgX2kzKyspIHtcbiAgICAgIHZhciBzcXVhcmVkRGlzdGFuY2UgPSBNYXRoLnBvdyhpbnRlcnNlY3Rpb25zW19pMyAqIDJdIC0geCwgMikgKyBNYXRoLnBvdyhpbnRlcnNlY3Rpb25zW19pMyAqIDIgKyAxXSAtIHksIDIpO1xuICAgICAgaWYgKHNxdWFyZWREaXN0YW5jZSA8PSBsb3dlc3RTcXVhcmVkRGlzdGFuY2UpIHtcbiAgICAgICAgbG93ZXN0SW50ZXJzZWN0aW9uWzBdID0gaW50ZXJzZWN0aW9uc1tfaTMgKiAyXTtcbiAgICAgICAgbG93ZXN0SW50ZXJzZWN0aW9uWzFdID0gaW50ZXJzZWN0aW9uc1tfaTMgKiAyICsgMV07XG4gICAgICAgIGxvd2VzdFNxdWFyZWREaXN0YW5jZSA9IHNxdWFyZWREaXN0YW5jZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvd2VzdEludGVyc2VjdGlvbjtcbiAgfVxuICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbn07XG52YXIgc2hvcnRlbkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0aW9uLCBvZmZzZXQsIGFtb3VudCkge1xuICB2YXIgZGlzcCA9IFtpbnRlcnNlY3Rpb25bMF0gLSBvZmZzZXRbMF0sIGludGVyc2VjdGlvblsxXSAtIG9mZnNldFsxXV07XG4gIHZhciBsZW5ndGggPSBNYXRoLnNxcnQoZGlzcFswXSAqIGRpc3BbMF0gKyBkaXNwWzFdICogZGlzcFsxXSk7XG4gIHZhciBsZW5SYXRpbyA9IChsZW5ndGggLSBhbW91bnQpIC8gbGVuZ3RoO1xuICBpZiAobGVuUmF0aW8gPCAwKSB7XG4gICAgbGVuUmF0aW8gPSAwLjAwMDAxO1xuICB9XG4gIHJldHVybiBbb2Zmc2V0WzBdICsgbGVuUmF0aW8gKiBkaXNwWzBdLCBvZmZzZXRbMV0gKyBsZW5SYXRpbyAqIGRpc3BbMV1dO1xufTtcbnZhciBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUgPSBmdW5jdGlvbiBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoc2lkZXMsIHJvdGF0aW9uUmFkaWFucykge1xuICB2YXIgcG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyhzaWRlcywgcm90YXRpb25SYWRpYW5zKTtcbiAgcG9pbnRzID0gZml0UG9seWdvblRvU3F1YXJlKHBvaW50cyk7XG4gIHJldHVybiBwb2ludHM7XG59O1xudmFyIGZpdFBvbHlnb25Ub1NxdWFyZSA9IGZ1bmN0aW9uIGZpdFBvbHlnb25Ub1NxdWFyZShwb2ludHMpIHtcbiAgdmFyIHgsIHk7XG4gIHZhciBzaWRlcyA9IHBvaW50cy5sZW5ndGggLyAyO1xuICB2YXIgbWluWCA9IEluZmluaXR5LFxuICAgIG1pblkgPSBJbmZpbml0eSxcbiAgICBtYXhYID0gLUluZmluaXR5LFxuICAgIG1heFkgPSAtSW5maW5pdHk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2lkZXM7IGkrKykge1xuICAgIHggPSBwb2ludHNbMiAqIGldO1xuICAgIHkgPSBwb2ludHNbMiAqIGkgKyAxXTtcbiAgICBtaW5YID0gTWF0aC5taW4obWluWCwgeCk7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHgpO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcbiAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgeSk7XG4gIH1cblxuICAvLyBzdHJldGNoIGZhY3RvcnNcbiAgdmFyIHN4ID0gMiAvIChtYXhYIC0gbWluWCk7XG4gIHZhciBzeSA9IDIgLyAobWF4WSAtIG1pblkpO1xuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBzaWRlczsgX2k0KyspIHtcbiAgICB4ID0gcG9pbnRzWzIgKiBfaTRdID0gcG9pbnRzWzIgKiBfaTRdICogc3g7XG4gICAgeSA9IHBvaW50c1syICogX2k0ICsgMV0gPSBwb2ludHNbMiAqIF9pNCArIDFdICogc3k7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHgpO1xuICAgIG1heFggPSBNYXRoLm1heChtYXhYLCB4KTtcbiAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7XG4gICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkpO1xuICB9XG4gIGlmIChtaW5ZIDwgLTEpIHtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBzaWRlczsgX2k1KyspIHtcbiAgICAgIHkgPSBwb2ludHNbMiAqIF9pNSArIDFdID0gcG9pbnRzWzIgKiBfaTUgKyAxXSArICgtMSAtIG1pblkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcG9pbnRzO1xufTtcbnZhciBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVVbml0TmdvblBvaW50cyhzaWRlcywgcm90YXRpb25SYWRpYW5zKSB7XG4gIHZhciBpbmNyZW1lbnQgPSAxLjAgLyBzaWRlcyAqIDIgKiBNYXRoLlBJO1xuICB2YXIgc3RhcnRBbmdsZSA9IHNpZGVzICUgMiA9PT0gMCA/IE1hdGguUEkgLyAyLjAgKyBpbmNyZW1lbnQgLyAyLjAgOiBNYXRoLlBJIC8gMi4wO1xuICBzdGFydEFuZ2xlICs9IHJvdGF0aW9uUmFkaWFucztcbiAgdmFyIHBvaW50cyA9IG5ldyBBcnJheShzaWRlcyAqIDIpO1xuICB2YXIgY3VycmVudEFuZ2xlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICBjdXJyZW50QW5nbGUgPSBpICogaW5jcmVtZW50ICsgc3RhcnRBbmdsZTtcbiAgICBwb2ludHNbMiAqIGldID0gTWF0aC5jb3MoY3VycmVudEFuZ2xlKTsgLy8geFxuICAgIHBvaW50c1syICogaSArIDFdID0gTWF0aC5zaW4oLWN1cnJlbnRBbmdsZSk7IC8vIHlcbiAgfVxuXG4gIHJldHVybiBwb2ludHM7XG59O1xuXG4vLyBTZXQgdGhlIGRlZmF1bHQgcmFkaXVzLCB1bmxlc3MgaGFsZiBvZiB3aWR0aCBvciBoZWlnaHQgaXMgc21hbGxlciB0aGFuIGRlZmF1bHRcbnZhciBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyA9IGZ1bmN0aW9uIGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIE1hdGgubWluKHdpZHRoIC8gNCwgaGVpZ2h0IC8gNCwgOCk7XG59O1xuXG4vLyBTZXQgdGhlIGRlZmF1bHQgcmFkaXVzXG52YXIgZ2V0Um91bmRQb2x5Z29uUmFkaXVzID0gZnVuY3Rpb24gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIE1hdGgubWluKHdpZHRoIC8gMTAsIGhlaWdodCAvIDEwLCA4KTtcbn07XG52YXIgZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkge1xuICByZXR1cm4gODtcbn07XG52YXIgYmV6aWVyUHRzVG9RdWFkQ29lZmYgPSBmdW5jdGlvbiBiZXppZXJQdHNUb1F1YWRDb2VmZihwMCwgcDEsIHAyKSB7XG4gIHJldHVybiBbcDAgLSAyICogcDEgKyBwMiwgMiAqIChwMSAtIHAwKSwgcDBdO1xufTtcblxuLy8gZ2V0IGN1cnZlIHdpZHRoLCBoZWlnaHQsIGFuZCBjb250cm9sIHBvaW50IHBvc2l0aW9uIG9mZnNldHMgYXMgYSBwZXJjZW50YWdlIG9mIG5vZGUgaGVpZ2h0IC8gd2lkdGhcbnZhciBnZXRCYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGZ1bmN0aW9uIGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHRPZmZzZXQ6IE1hdGgubWluKDE1LCAwLjA1ICogaGVpZ2h0KSxcbiAgICB3aWR0aE9mZnNldDogTWF0aC5taW4oMTAwLCAwLjI1ICogd2lkdGgpLFxuICAgIGN0cmxQdE9mZnNldFBjdDogMC4wNVxuICB9O1xufTtcblxudmFyIHBhZ2VSYW5rRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgZGFtcGluZ0ZhY3RvcjogMC44LFxuICBwcmVjaXNpb246IDAuMDAwMDAxLFxuICBpdGVyYXRpb25zOiAyMDAsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufSk7XG52YXIgZWxlc2ZuJG8gPSB7XG4gIHBhZ2VSYW5rOiBmdW5jdGlvbiBwYWdlUmFuayhvcHRpb25zKSB7XG4gICAgdmFyIF9wYWdlUmFua0RlZmF1bHRzID0gcGFnZVJhbmtEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgIGRhbXBpbmdGYWN0b3IgPSBfcGFnZVJhbmtEZWZhdWx0cy5kYW1waW5nRmFjdG9yLFxuICAgICAgcHJlY2lzaW9uID0gX3BhZ2VSYW5rRGVmYXVsdHMucHJlY2lzaW9uLFxuICAgICAgaXRlcmF0aW9ucyA9IF9wYWdlUmFua0RlZmF1bHRzLml0ZXJhdGlvbnMsXG4gICAgICB3ZWlnaHQgPSBfcGFnZVJhbmtEZWZhdWx0cy53ZWlnaHQ7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICB2YXIgbnVtTm9kZXNTcWQgPSBudW1Ob2RlcyAqIG51bU5vZGVzO1xuICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDtcblxuICAgIC8vIENvbnN0cnVjdCB0cmFuc3Bvc2VkIGFkamFjZW5jeSBtYXRyaXhcbiAgICAvLyBGaXJzdCBsZXRzIGhhdmUgYSB6ZXJvZWQgbWF0cml4IG9mIHRoZSByaWdodCBzaXplXG4gICAgLy8gV2UnbGwgYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBzdW0gb2YgZWFjaCBjb2x1bW5cbiAgICB2YXIgbWF0cml4ID0gbmV3IEFycmF5KG51bU5vZGVzU3FkKTtcbiAgICB2YXIgY29sdW1uU3VtID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgYWRkaXRpb25hbFByb2IgPSAoMSAtIGRhbXBpbmdGYWN0b3IpIC8gbnVtTm9kZXM7XG5cbiAgICAvLyBDcmVhdGUgbnVsbCBtYXRyaXhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5vZGVzOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtTm9kZXM7IGorKykge1xuICAgICAgICB2YXIgbiA9IGkgKiBudW1Ob2RlcyArIGo7XG4gICAgICAgIG1hdHJpeFtuXSA9IDA7XG4gICAgICB9XG4gICAgICBjb2x1bW5TdW1baV0gPSAwO1xuICAgIH1cblxuICAgIC8vIE5vdywgcHJvY2VzcyBlZGdlc1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBudW1FZGdlczsgX2krKykge1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tfaV07XG4gICAgICB2YXIgc3JjSWQgPSBlZGdlLmRhdGEoJ3NvdXJjZScpO1xuICAgICAgdmFyIHRndElkID0gZWRnZS5kYXRhKCd0YXJnZXQnKTtcblxuICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBsb29wcyBpbiB0aGUgbWF0cml4XG4gICAgICBpZiAoc3JjSWQgPT09IHRndElkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHMgPSBub2Rlcy5pbmRleE9mSWQoc3JjSWQpO1xuICAgICAgdmFyIHQgPSBub2Rlcy5pbmRleE9mSWQodGd0SWQpO1xuICAgICAgdmFyIHcgPSB3ZWlnaHQoZWRnZSk7XG4gICAgICB2YXIgX24gPSB0ICogbnVtTm9kZXMgKyBzO1xuXG4gICAgICAvLyBVcGRhdGUgbWF0cml4XG4gICAgICBtYXRyaXhbX25dICs9IHc7XG5cbiAgICAgIC8vIFVwZGF0ZSBjb2x1bW4gc3VtXG4gICAgICBjb2x1bW5TdW1bc10gKz0gdztcbiAgICB9XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBwcm9iYWJpbGl0eSBiYXNlZCBvbiBkYW1waW5nIGZhY3RvclxuICAgIC8vIEFsc28sIHRha2UgaW50byBhY2NvdW50IGNvbHVtbnMgdGhhdCBoYXZlIHN1bSA9IDBcbiAgICB2YXIgcCA9IDEuMCAvIG51bU5vZGVzICsgYWRkaXRpb25hbFByb2I7IC8vIFNob3J0aGFuZFxuXG4gICAgLy8gVHJhdmVyc2UgbWF0cml4LCBjb2x1bW4gYnkgY29sdW1uXG4gICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG51bU5vZGVzOyBfaisrKSB7XG4gICAgICBpZiAoY29sdW1uU3VtW19qXSA9PT0gMCkge1xuICAgICAgICAvLyBObyAnbGlua3MnIG91dCBmcm9tIG5vZGUganRoLCBhc3N1bWUgZXF1YWwgcHJvYmFiaWxpdHkgZm9yIGVhY2ggcG9zc2libGUgbm9kZVxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBudW1Ob2RlczsgX2kyKyspIHtcbiAgICAgICAgICB2YXIgX24yID0gX2kyICogbnVtTm9kZXMgKyBfajtcbiAgICAgICAgICBtYXRyaXhbX24yXSA9IHA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vZGUganRoIGhhcyBvdXRnb2luZyBsaW5rLCBjb21wdXRlIG5vcm1hbGl6ZWQgcHJvYmFiaWxpdGllc1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBudW1Ob2RlczsgX2kzKyspIHtcbiAgICAgICAgICB2YXIgX24zID0gX2kzICogbnVtTm9kZXMgKyBfajtcbiAgICAgICAgICBtYXRyaXhbX24zXSA9IG1hdHJpeFtfbjNdIC8gY29sdW1uU3VtW19qXSArIGFkZGl0aW9uYWxQcm9iO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBkb21pbmFudCBlaWdlbnZlY3RvciB1c2luZyBwb3dlciBtZXRob2RcbiAgICB2YXIgZWlnZW52ZWN0b3IgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciB0ZW1wID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgcHJldmlvdXM7XG5cbiAgICAvLyBTdGFydCB3aXRoIGEgdmVjdG9yIG9mIGFsbCAxJ3NcbiAgICAvLyBBbHNvLCBpbml0aWFsaXplIGEgbnVsbCB2ZWN0b3Igd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHNob3J0aGFuZFxuICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG51bU5vZGVzOyBfaTQrKykge1xuICAgICAgZWlnZW52ZWN0b3JbX2k0XSA9IDE7XG4gICAgfVxuICAgIGZvciAodmFyIGl0ZXIgPSAwOyBpdGVyIDwgaXRlcmF0aW9uczsgaXRlcisrKSB7XG4gICAgICAvLyBUZW1wIGFycmF5IHdpdGggYWxsIDAnc1xuICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbnVtTm9kZXM7IF9pNSsrKSB7XG4gICAgICAgIHRlbXBbX2k1XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIE11bHRpcGx5IG1hdHJpeCB3aXRoIHByZXZpb3VzIHJlc3VsdFxuICAgICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbnVtTm9kZXM7IF9pNisrKSB7XG4gICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IG51bU5vZGVzOyBfajIrKykge1xuICAgICAgICAgIHZhciBfbjQgPSBfaTYgKiBudW1Ob2RlcyArIF9qMjtcbiAgICAgICAgICB0ZW1wW19pNl0gKz0gbWF0cml4W19uNF0gKiBlaWdlbnZlY3RvcltfajJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpblBsYWNlU3VtTm9ybWFsaXplKHRlbXApO1xuICAgICAgcHJldmlvdXMgPSBlaWdlbnZlY3RvcjtcbiAgICAgIGVpZ2VudmVjdG9yID0gdGVtcDtcbiAgICAgIHRlbXAgPSBwcmV2aW91cztcbiAgICAgIHZhciBkaWZmID0gMDtcbiAgICAgIC8vIENvbXB1dGUgZGlmZmVyZW5jZSAoc3F1YXJlZCBtb2R1bGUpIG9mIGJvdGggdmVjdG9yc1xuICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgbnVtTm9kZXM7IF9pNysrKSB7XG4gICAgICAgIHZhciBkZWx0YSA9IHByZXZpb3VzW19pN10gLSBlaWdlbnZlY3RvcltfaTddO1xuICAgICAgICBkaWZmICs9IGRlbHRhICogZGVsdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuIHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgc3RvcCBpdGVyYXRpbmdcbiAgICAgIGlmIChkaWZmIDwgcHJlY2lzaW9uKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCByZXN1bHRcbiAgICB2YXIgcmVzID0ge1xuICAgICAgcmFuazogZnVuY3Rpb24gcmFuayhub2RlKSB7XG4gICAgICAgIG5vZGUgPSBjeS5jb2xsZWN0aW9uKG5vZGUpWzBdO1xuICAgICAgICByZXR1cm4gZWlnZW52ZWN0b3Jbbm9kZXMuaW5kZXhPZihub2RlKV07XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gcmVzO1xuICB9IC8vIHBhZ2VSYW5rXG59OyAvLyBlbGVzZm5cblxudmFyIGRlZmF1bHRzJGYgPSBkZWZhdWx0cyRnKHtcbiAgcm9vdDogbnVsbCxcbiAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2UsXG4gIGFscGhhOiAwXG59KTtcbnZhciBlbGVzZm4kbiA9IHtcbiAgZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6IGZ1bmN0aW9uIGRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHMkZihvcHRpb25zKTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICBpZiAoIW9wdGlvbnMuZGlyZWN0ZWQpIHtcbiAgICAgIHZhciBkZWdyZWVzID0ge307XG4gICAgICB2YXIgbWF4RGVncmVlID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuICAgICAgICBvcHRpb25zLnJvb3QgPSBub2RlO1xuICAgICAgICB2YXIgY3VyckRlZ3JlZSA9IHRoaXMuZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKTtcbiAgICAgICAgaWYgKG1heERlZ3JlZSA8IGN1cnJEZWdyZWUuZGVncmVlKSB7XG4gICAgICAgICAgbWF4RGVncmVlID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICAgIH1cbiAgICAgICAgZGVncmVlc1tub2RlLmlkKCldID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWdyZWU6IGZ1bmN0aW9uIGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgaWYgKG1heERlZ3JlZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkZWdyZWVzW25vZGUuaWQoKV0gLyBtYXhEZWdyZWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRlZ3JlZXMgPSB7fTtcbiAgICAgIHZhciBvdXRkZWdyZWVzID0ge307XG4gICAgICB2YXIgbWF4SW5kZWdyZWUgPSAwO1xuICAgICAgdmFyIG1heE91dGRlZ3JlZSA9IDA7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbnVtTm9kZXM7IF9pKyspIHtcbiAgICAgICAgdmFyIF9ub2RlID0gbm9kZXNbX2ldO1xuICAgICAgICB2YXIgaWQgPSBfbm9kZS5pZCgpO1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuICAgICAgICBvcHRpb25zLnJvb3QgPSBfbm9kZTtcbiAgICAgICAgdmFyIF9jdXJyRGVncmVlID0gdGhpcy5kZWdyZWVDZW50cmFsaXR5KG9wdGlvbnMpO1xuICAgICAgICBpZiAobWF4SW5kZWdyZWUgPCBfY3VyckRlZ3JlZS5pbmRlZ3JlZSkgbWF4SW5kZWdyZWUgPSBfY3VyckRlZ3JlZS5pbmRlZ3JlZTtcbiAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA8IF9jdXJyRGVncmVlLm91dGRlZ3JlZSkgbWF4T3V0ZGVncmVlID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgICBpbmRlZ3JlZXNbaWRdID0gX2N1cnJEZWdyZWUuaW5kZWdyZWU7XG4gICAgICAgIG91dGRlZ3JlZXNbaWRdID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZWdyZWU6IGZ1bmN0aW9uIGluZGVncmVlKG5vZGUpIHtcbiAgICAgICAgICBpZiAobWF4SW5kZWdyZWUgPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbmRlZ3JlZXNbbm9kZS5pZCgpXSAvIG1heEluZGVncmVlO1xuICAgICAgICB9LFxuICAgICAgICBvdXRkZWdyZWU6IGZ1bmN0aW9uIG91dGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXRkZWdyZWVzW25vZGUuaWQoKV0gLyBtYXhPdXRkZWdyZWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICAvLyBkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZFxuXG4gIC8vIEltcGxlbWVudGVkIGZyb20gdGhlIGFsZ29yaXRobSBpbiBPcHNhaGwncyBwYXBlclxuICAvLyBcIk5vZGUgY2VudHJhbGl0eSBpbiB3ZWlnaHRlZCBuZXR3b3JrczogR2VuZXJhbGl6aW5nIGRlZ3JlZSBhbmQgc2hvcnRlc3QgcGF0aHNcIlxuICAvLyBjaGVjayB0aGUgaGVhZGluZyAyIFwiRGVncmVlXCJcbiAgZGVncmVlQ2VudHJhbGl0eTogZnVuY3Rpb24gZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRzJGYob3B0aW9ucyk7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBjYWxsaW5nRWxlcyA9IHRoaXM7XG4gICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHJvb3QgPSBfb3B0aW9ucy5yb290LFxuICAgICAgd2VpZ2h0ID0gX29wdGlvbnMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfb3B0aW9ucy5kaXJlY3RlZCxcbiAgICAgIGFscGhhID0gX29wdGlvbnMuYWxwaGE7XG4gICAgcm9vdCA9IGN5LmNvbGxlY3Rpb24ocm9vdClbMF07XG4gICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgdmFyIGNvbm5FZGdlcyA9IHJvb3QuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oY2FsbGluZ0VsZXMpO1xuICAgICAgdmFyIGsgPSBjb25uRWRnZXMubGVuZ3RoO1xuICAgICAgdmFyIHMgPSAwO1xuXG4gICAgICAvLyBOb3csIHN1bSBlZGdlIHdlaWdodHNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29ubkVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHMgKz0gd2VpZ2h0KGNvbm5FZGdlc1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWdyZWU6IE1hdGgucG93KGssIDEgLSBhbHBoYSkgKiBNYXRoLnBvdyhzLCBhbHBoYSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlZGdlcyA9IHJvb3QuY29ubmVjdGVkRWRnZXMoKTtcbiAgICAgIHZhciBpbmNvbWluZyA9IGVkZ2VzLmZpbHRlcihmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICByZXR1cm4gZWRnZS50YXJnZXQoKS5zYW1lKHJvb3QpICYmIGNhbGxpbmdFbGVzLmhhcyhlZGdlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG91dGdvaW5nID0gZWRnZXMuZmlsdGVyKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLnNvdXJjZSgpLnNhbWUocm9vdCkgJiYgY2FsbGluZ0VsZXMuaGFzKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgICB2YXIga19pbiA9IGluY29taW5nLmxlbmd0aDtcbiAgICAgIHZhciBrX291dCA9IG91dGdvaW5nLmxlbmd0aDtcbiAgICAgIHZhciBzX2luID0gMDtcbiAgICAgIHZhciBzX291dCA9IDA7XG5cbiAgICAgIC8vIE5vdywgc3VtIGluY29taW5nIGVkZ2Ugd2VpZ2h0c1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgaW5jb21pbmcubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICBzX2luICs9IHdlaWdodChpbmNvbWluZ1tfaTJdKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm93LCBzdW0gb3V0Z29pbmcgZWRnZSB3ZWlnaHRzXG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBvdXRnb2luZy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgIHNfb3V0ICs9IHdlaWdodChvdXRnb2luZ1tfaTNdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluZGVncmVlOiBNYXRoLnBvdyhrX2luLCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19pbiwgYWxwaGEpLFxuICAgICAgICBvdXRkZWdyZWU6IE1hdGgucG93KGtfb3V0LCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19vdXQsIGFscGhhKVxuICAgICAgfTtcbiAgICB9XG4gIH0gLy8gZGVncmVlQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJG4uZGMgPSBlbGVzZm4kbi5kZWdyZWVDZW50cmFsaXR5O1xuZWxlc2ZuJG4uZGNuID0gZWxlc2ZuJG4uZGVncmVlQ2VudHJhbGl0eU5vcm1hbGlzZWQgPSBlbGVzZm4kbi5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDtcblxudmFyIGRlZmF1bHRzJGUgPSBkZWZhdWx0cyRnKHtcbiAgaGFybW9uaWM6IHRydWUsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KCkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2UsXG4gIHJvb3Q6IG51bGxcbn0pO1xudmFyIGVsZXNmbiRtID0ge1xuICBjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQob3B0aW9ucykge1xuICAgIHZhciBfZGVmYXVsdHMgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMuaGFybW9uaWMsXG4gICAgICB3ZWlnaHQgPSBfZGVmYXVsdHMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMuZGlyZWN0ZWQ7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBjbG9zZW5lc3NlcyA9IHt9O1xuICAgIHZhciBtYXhDbG9zZW5lc3MgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgZncgPSB0aGlzLmZsb3lkV2Fyc2hhbGwoe1xuICAgICAgd2VpZ2h0OiB3ZWlnaHQsXG4gICAgICBkaXJlY3RlZDogZGlyZWN0ZWRcbiAgICB9KTtcblxuICAgIC8vIENvbXB1dGUgY2xvc2VuZXNzIGZvciBldmVyeSBub2RlIGFuZCBmaW5kIHRoZSBtYXhpbXVtIGNsb3NlbmVzc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXJyQ2xvc2VuZXNzID0gMDtcbiAgICAgIHZhciBub2RlX2kgPSBub2Rlc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGkgIT09IGopIHtcbiAgICAgICAgICB2YXIgZCA9IGZ3LmRpc3RhbmNlKG5vZGVfaSwgbm9kZXNbal0pO1xuICAgICAgICAgIGlmIChoYXJtb25pYykge1xuICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSAxIC8gZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSBkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFoYXJtb25pYykge1xuICAgICAgICBjdXJyQ2xvc2VuZXNzID0gMSAvIGN1cnJDbG9zZW5lc3M7XG4gICAgICB9XG4gICAgICBpZiAobWF4Q2xvc2VuZXNzIDwgY3VyckNsb3NlbmVzcykge1xuICAgICAgICBtYXhDbG9zZW5lc3MgPSBjdXJyQ2xvc2VuZXNzO1xuICAgICAgfVxuICAgICAgY2xvc2VuZXNzZXNbbm9kZV9pLmlkKCldID0gY3VyckNsb3NlbmVzcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3NlbmVzczogZnVuY3Rpb24gY2xvc2VuZXNzKG5vZGUpIHtcbiAgICAgICAgaWYgKG1heENsb3NlbmVzcyA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmluZyhub2RlKSkge1xuICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICBub2RlID0gY3kuZmlsdGVyKG5vZGUpWzBdLmlkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZnJvbSBpcyBhIG5vZGVcbiAgICAgICAgICBub2RlID0gbm9kZS5pZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZW5lc3Nlc1tub2RlXSAvIG1heENsb3NlbmVzcztcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgY2xvc2VuZXNzQ2VudHJhbGl0eTogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgdmFyIF9kZWZhdWx0czIgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgcm9vdCA9IF9kZWZhdWx0czIucm9vdCxcbiAgICAgIHdlaWdodCA9IF9kZWZhdWx0czIud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMyLmRpcmVjdGVkLFxuICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMyLmhhcm1vbmljO1xuICAgIHJvb3QgPSB0aGlzLmZpbHRlcihyb290KVswXTtcblxuICAgIC8vIHdlIG5lZWQgZGlzdGFuY2UgZnJvbSB0aGlzIG5vZGUgdG8gZXZlcnkgb3RoZXIgbm9kZVxuICAgIHZhciBkaWprc3RyYSA9IHRoaXMuZGlqa3N0cmEoe1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHdlaWdodDogd2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQ6IGRpcmVjdGVkXG4gICAgfSk7XG4gICAgdmFyIHRvdGFsRGlzdGFuY2UgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbiA9IG5vZGVzW2ldO1xuICAgICAgaWYgKCFuLnNhbWUocm9vdCkpIHtcbiAgICAgICAgdmFyIGQgPSBkaWprc3RyYS5kaXN0YW5jZVRvKG4pO1xuICAgICAgICBpZiAoaGFybW9uaWMpIHtcbiAgICAgICAgICB0b3RhbERpc3RhbmNlICs9IDEgLyBkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFybW9uaWMgPyB0b3RhbERpc3RhbmNlIDogMSAvIHRvdGFsRGlzdGFuY2U7XG4gIH0gLy8gY2xvc2VuZXNzQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJG0uY2MgPSBlbGVzZm4kbS5jbG9zZW5lc3NDZW50cmFsaXR5O1xuZWxlc2ZuJG0uY2NuID0gZWxlc2ZuJG0uY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQgPSBlbGVzZm4kbS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDtcblxudmFyIGRlZmF1bHRzJGQgPSBkZWZhdWx0cyRnKHtcbiAgd2VpZ2h0OiBudWxsLFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRsID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHRoZSBhbGdvcml0aG0gaW4gdGhlIHBhcGVyIFwiT24gVmFyaWFudHMgb2YgU2hvcnRlc3QtUGF0aCBCZXR3ZWVubmVzcyBDZW50cmFsaXR5IGFuZCB0aGVpciBHZW5lcmljIENvbXB1dGF0aW9uXCIgYnkgVWxyaWsgQnJhbmRlc1xuICBiZXR3ZWVubmVzc0NlbnRyYWxpdHk6IGZ1bmN0aW9uIGJldHdlZW5uZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgdmFyIF9kZWZhdWx0cyA9IGRlZmF1bHRzJGQob3B0aW9ucyksXG4gICAgICBkaXJlY3RlZCA9IF9kZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgIHdlaWdodCA9IF9kZWZhdWx0cy53ZWlnaHQ7XG4gICAgdmFyIHdlaWdodGVkID0gd2VpZ2h0ICE9IG51bGw7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgLy8gc3RhcnRpbmdcbiAgICB2YXIgViA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgQSA9IHt9O1xuICAgIHZhciBfQyA9IHt9O1xuICAgIHZhciBtYXggPSAwO1xuICAgIHZhciBDID0ge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgX0Nba2V5XSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA+IG1heCkge1xuICAgICAgICAgIG1heCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gX0Nba2V5XTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQSBjb250YWlucyB0aGUgbmVpZ2hib3Job29kcyBvZiBldmVyeSBub2RlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBWLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdiA9IFZbaV07XG4gICAgICB2YXIgdmlkID0gdi5pZCgpO1xuICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgIEFbdmlkXSA9IHYub3V0Z29lcnMoKS5ub2RlcygpOyAvLyBnZXQgb3V0Z29lcnMgb2YgZXZlcnkgbm9kZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQVt2aWRdID0gdi5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKTsgLy8gZ2V0IG5laWdoYm9ycyBvZiBldmVyeSBub2RlXG4gICAgICB9XG5cbiAgICAgIEMuc2V0KHZpZCwgMCk7XG4gICAgfVxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKHMpIHtcbiAgICAgIHZhciBzaWQgPSBWW3NdLmlkKCk7XG4gICAgICB2YXIgUyA9IFtdOyAvLyBzdGFja1xuICAgICAgdmFyIFAgPSB7fTtcbiAgICAgIHZhciBnID0ge307XG4gICAgICB2YXIgZCA9IHt9O1xuICAgICAgdmFyIFEgPSBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gZFthXSAtIGRbYl07XG4gICAgICB9KTsgLy8gcXVldWVcblxuICAgICAgLy8gaW5pdCBkaWN0aW9uYXJpZXNcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBWLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgX3ZpZCA9IFZbX2ldLmlkKCk7XG4gICAgICAgIFBbX3ZpZF0gPSBbXTtcbiAgICAgICAgZ1tfdmlkXSA9IDA7XG4gICAgICAgIGRbX3ZpZF0gPSBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGdbc2lkXSA9IDE7IC8vIHNpZ21hXG4gICAgICBkW3NpZF0gPSAwOyAvLyBkaXN0YW5jZSB0byBzXG5cbiAgICAgIFEucHVzaChzaWQpO1xuICAgICAgd2hpbGUgKCFRLmVtcHR5KCkpIHtcbiAgICAgICAgdmFyIF92ID0gUS5wb3AoKTtcbiAgICAgICAgUy5wdXNoKF92KTtcbiAgICAgICAgaWYgKHdlaWdodGVkKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBBW192XS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHcgPSBBW192XVtqXTtcbiAgICAgICAgICAgIHZhciB2RWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoX3YpO1xuICAgICAgICAgICAgdmFyIGVkZ2UgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAodkVsZS5lZGdlc1RvKHcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZWRnZSA9IHZFbGUuZWRnZXNUbyh3KVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVkZ2UgPSB3LmVkZ2VzVG8odkVsZSlbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZWRnZVdlaWdodCA9IHdlaWdodChlZGdlKTtcbiAgICAgICAgICAgIHcgPSB3LmlkKCk7XG4gICAgICAgICAgICBpZiAoZFt3XSA+IGRbX3ZdICsgZWRnZVdlaWdodCkge1xuICAgICAgICAgICAgICBkW3ddID0gZFtfdl0gKyBlZGdlV2VpZ2h0O1xuICAgICAgICAgICAgICBpZiAoUS5ub2Rlcy5pbmRleE9mKHcpIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vaWYgdyBpcyBub3QgaW4gUVxuICAgICAgICAgICAgICAgIFEucHVzaCh3KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9zaXRpb24gaWYgdyBpcyBpbiBRXG4gICAgICAgICAgICAgICAgUS51cGRhdGVJdGVtKHcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGdbd10gPSAwO1xuICAgICAgICAgICAgICBQW3ddID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZFt3XSA9PSBkW192XSArIGVkZ2VXZWlnaHQpIHtcbiAgICAgICAgICAgICAgZ1t3XSA9IGdbd10gKyBnW192XTtcbiAgICAgICAgICAgICAgUFt3XS5wdXNoKF92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IEFbX3ZdLmxlbmd0aDsgX2orKykge1xuICAgICAgICAgICAgdmFyIF93ID0gQVtfdl1bX2pdLmlkKCk7XG4gICAgICAgICAgICBpZiAoZFtfd10gPT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgUS5wdXNoKF93KTtcbiAgICAgICAgICAgICAgZFtfd10gPSBkW192XSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZFtfd10gPT0gZFtfdl0gKyAxKSB7XG4gICAgICAgICAgICAgIGdbX3ddID0gZ1tfd10gKyBnW192XTtcbiAgICAgICAgICAgICAgUFtfd10ucHVzaChfdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZSA9IHt9O1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgVi5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIGVbVltfaTJdLmlkKCldID0gMDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChTLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIF93MiA9IFMucG9wKCk7XG4gICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IFBbX3cyXS5sZW5ndGg7IF9qMisrKSB7XG4gICAgICAgICAgdmFyIF92MiA9IFBbX3cyXVtfajJdO1xuICAgICAgICAgIGVbX3YyXSA9IGVbX3YyXSArIGdbX3YyXSAvIGdbX3cyXSAqICgxICsgZVtfdzJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3cyICE9IFZbc10uaWQoKSkge1xuICAgICAgICAgIEMuc2V0KF93MiwgQy5nZXQoX3cyKSArIGVbX3cyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDwgVi5sZW5ndGg7IHMrKykge1xuICAgICAgX2xvb3Aocyk7XG4gICAgfVxuICAgIHZhciByZXQgPSB7XG4gICAgICBiZXR3ZWVubmVzczogZnVuY3Rpb24gYmV0d2Vlbm5lc3Mobm9kZSkge1xuICAgICAgICB2YXIgaWQgPSBjeS5jb2xsZWN0aW9uKG5vZGUpLmlkKCk7XG4gICAgICAgIHJldHVybiBDLmdldChpZCk7XG4gICAgICB9LFxuICAgICAgYmV0d2Vlbm5lc3NOb3JtYWxpemVkOiBmdW5jdGlvbiBiZXR3ZWVubmVzc05vcm1hbGl6ZWQobm9kZSkge1xuICAgICAgICBpZiAobWF4ID09IDApIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWQgPSBjeS5jb2xsZWN0aW9uKG5vZGUpLmlkKCk7XG4gICAgICAgIHJldHVybiBDLmdldChpZCkgLyBtYXg7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGFsaWFzXG4gICAgcmV0LmJldHdlZW5uZXNzTm9ybWFsaXNlZCA9IHJldC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQ7XG4gICAgcmV0dXJuIHJldDtcbiAgfSAvLyBiZXR3ZWVubmVzc0NlbnRyYWxpdHlcbn07IC8vIGVsZXNmblxuXG4vLyBuaWNlLCBzaG9ydCBtYXRoZW1hdGljYWwgYWxpYXNcbmVsZXNmbiRsLmJjID0gZWxlc2ZuJGwuYmV0d2Vlbm5lc3NDZW50cmFsaXR5O1xuXG4vLyBJbXBsZW1lbnRlZCBieSBab2UgWGkgQHpvZXhpIGZvciBHU09DIDIwMTZcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBkZWZhdWx0cyRjID0gZGVmYXVsdHMkZyh7XG4gIGV4cGFuZEZhY3RvcjogMixcbiAgLy8gYWZmZWN0cyB0aW1lIG9mIGNvbXB1dGF0aW9uIGFuZCBjbHVzdGVyIGdyYW51bGFyaXR5IHRvIHNvbWUgZXh0ZW50OiBNICogTVxuICBpbmZsYXRlRmFjdG9yOiAyLFxuICAvLyBhZmZlY3RzIGNsdXN0ZXIgZ3JhbnVsYXJpdHkgKHRoZSBncmVhdGVyIHRoZSB2YWx1ZSwgdGhlIG1vcmUgY2x1c3RlcnMpOiBNKGksaikgLyBFKGopXG4gIG11bHRGYWN0b3I6IDEsXG4gIC8vIG9wdGlvbmFsIHNlbGYgbG9vcHMgZm9yIGVhY2ggbm9kZS4gVXNlIGEgbmV1dHJhbCB2YWx1ZSB0byBpbXByb3ZlIGNsdXN0ZXIgY29tcHV0YXRpb25zLlxuICBtYXhJdGVyYXRpb25zOiAyMCxcbiAgLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgTUNMIGFsZ29yaXRobSBpbiBhIHNpbmdsZSBydW5cbiAgYXR0cmlidXRlczogW1xuICAvLyBhdHRyaWJ1dGVzL2ZlYXR1cmVzIHVzZWQgdG8gZ3JvdXAgbm9kZXMsIGllLiBzaW1pbGFyaXR5IHZhbHVlcyBiZXR3ZWVuIG5vZGVzXG4gIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1dXG59KTtcbi8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIHNldE9wdGlvbnMkMyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4gZGVmYXVsdHMkYyhvcHRpb25zKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnZhciBnZXRTaW1pbGFyaXR5JDEgPSBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5KGVkZ2UsIGF0dHJpYnV0ZXMpIHtcbiAgdmFyIHRvdGFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdG90YWwgKz0gYXR0cmlidXRlc1tpXShlZGdlKTtcbiAgfVxuICByZXR1cm4gdG90YWw7XG59O1xudmFyIGFkZExvb3BzID0gZnVuY3Rpb24gYWRkTG9vcHMoTSwgbiwgdmFsKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgTVtpICogbiArIGldID0gdmFsO1xuICB9XG59O1xudmFyIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShNLCBuKSB7XG4gIHZhciBzdW07XG4gIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG47IGNvbCsrKSB7XG4gICAgc3VtID0gMDtcbiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBuOyByb3crKykge1xuICAgICAgc3VtICs9IE1bcm93ICogbiArIGNvbF07XG4gICAgfVxuICAgIGZvciAodmFyIF9yb3cgPSAwOyBfcm93IDwgbjsgX3JvdysrKSB7XG4gICAgICBNW19yb3cgKiBuICsgY29sXSA9IE1bX3JvdyAqIG4gKyBjb2xdIC8gc3VtO1xuICAgIH1cbiAgfVxufTtcblxuLy8gVE9ETzogYmxvY2tlZCBtYXRyaXggbXVsdGlwbGljYXRpb24/XG52YXIgbW11bHQgPSBmdW5jdGlvbiBtbXVsdChBLCBCLCBuKSB7XG4gIHZhciBDID0gbmV3IEFycmF5KG4gKiBuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgQ1tpICogbiArIGpdID0gMDtcbiAgICB9XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBuOyBfaisrKSB7XG4gICAgICAgIENbaSAqIG4gKyBfal0gKz0gQVtpICogbiArIGtdICogQltrICogbiArIF9qXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEM7XG59O1xudmFyIGV4cGFuZCA9IGZ1bmN0aW9uIGV4cGFuZChNLCBuLCBleHBhbmRGYWN0b3IgLyoqIHBvd2VyICoqLykge1xuICB2YXIgX00gPSBNLnNsaWNlKDApO1xuICBmb3IgKHZhciBwID0gMTsgcCA8IGV4cGFuZEZhY3RvcjsgcCsrKSB7XG4gICAgTSA9IG1tdWx0KE0sIF9NLCBuKTtcbiAgfVxuICByZXR1cm4gTTtcbn07XG52YXIgaW5mbGF0ZSA9IGZ1bmN0aW9uIGluZmxhdGUoTSwgbiwgaW5mbGF0ZUZhY3RvciAvKiogciAqKi8pIHtcbiAgdmFyIF9NID0gbmV3IEFycmF5KG4gKiBuKTtcblxuICAvLyBNKGksaikgXiBpbmZsYXRlUG93ZXJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuICogbjsgaSsrKSB7XG4gICAgX01baV0gPSBNYXRoLnBvdyhNW2ldLCBpbmZsYXRlRmFjdG9yKTtcbiAgfVxuICBub3JtYWxpemUoX00sIG4pO1xuICByZXR1cm4gX007XG59O1xudmFyIGhhc0NvbnZlcmdlZCA9IGZ1bmN0aW9uIGhhc0NvbnZlcmdlZChNLCBfTSwgbjIsIHJvdW5kRmFjdG9yKSB7XG4gIC8vIENoZWNrIHRoYXQgYm90aCBtYXRyaWNlcyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIChpLGopXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjI7IGkrKykge1xuICAgIHZhciB2MSA9IE1hdGgucm91bmQoTVtpXSAqIE1hdGgucG93KDEwLCByb3VuZEZhY3RvcikpIC8gTWF0aC5wb3coMTAsIHJvdW5kRmFjdG9yKTsgLy8gdHJ1bmNhdGUgdG8gJ3JvdW5kRmFjdG9yJyBkZWNpbWFsIHBsYWNlc1xuICAgIHZhciB2MiA9IE1hdGgucm91bmQoX01baV0gKiBNYXRoLnBvdygxMCwgcm91bmRGYWN0b3IpKSAvIE1hdGgucG93KDEwLCByb3VuZEZhY3Rvcik7XG4gICAgaWYgKHYxICE9PSB2Mikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgYXNzaWduJDIgPSBmdW5jdGlvbiBhc3NpZ24oTSwgbiwgbm9kZXMsIGN5KSB7XG4gIHZhciBjbHVzdGVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIHZhciBjbHVzdGVyID0gW107XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgIC8vIFJvdy13aXNlIGF0dHJhY3RvcnMgYW5kIGVsZW1lbnRzIHRoYXQgdGhleSBhdHRyYWN0IGJlbG9uZyBpbiBzYW1lIGNsdXN0ZXJcbiAgICAgIGlmIChNYXRoLnJvdW5kKE1baSAqIG4gKyBqXSAqIDEwMDApIC8gMTAwMCA+IDApIHtcbiAgICAgICAgY2x1c3Rlci5wdXNoKG5vZGVzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNsdXN0ZXIubGVuZ3RoICE9PSAwKSB7XG4gICAgICBjbHVzdGVycy5wdXNoKGN5LmNvbGxlY3Rpb24oY2x1c3RlcikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIGlzRHVwbGljYXRlID0gZnVuY3Rpb24gaXNEdXBsaWNhdGUoYzEsIGMyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYzEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWMyW2ldIHx8IGMxW2ldLmlkKCkgIT09IGMyW2ldLmlkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIHJlbW92ZUR1cGxpY2F0ZXMgPSBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzKGNsdXN0ZXJzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsdXN0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoaSAhPSBqICYmIGlzRHVwbGljYXRlKGNsdXN0ZXJzW2ldLCBjbHVzdGVyc1tqXSkpIHtcbiAgICAgICAgY2x1c3RlcnMuc3BsaWNlKGosIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIG1hcmtvdkNsdXN0ZXJpbmcgPSBmdW5jdGlvbiBtYXJrb3ZDbHVzdGVyaW5nKG9wdGlvbnMpIHtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgZWRnZXMgPSB0aGlzLmVkZ2VzKCk7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAvLyBTZXQgcGFyYW1ldGVycyBvZiBhbGdvcml0aG06XG4gIHZhciBvcHRzID0gc2V0T3B0aW9ucyQzKG9wdGlvbnMpO1xuXG4gIC8vIE1hcCBlYWNoIG5vZGUgdG8gaXRzIHBvc2l0aW9uIGluIG5vZGUgYXJyYXlcbiAgdmFyIGlkMnBvc2l0aW9uID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZDJwb3NpdGlvbltub2Rlc1tpXS5pZCgpXSA9IGk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBzdG9jaGFzdGljIG1hdHJpeCBNIGZyb20gaW5wdXQgZ3JhcGggRyAoc2hvdWxkIGJlIHN5bW1ldHJpYy91bmRpcmVjdGVkKVxuICB2YXIgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICBuMiA9IG4gKiBuO1xuICB2YXIgTSA9IG5ldyBBcnJheShuMiksXG4gICAgX007XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBuMjsgX2krKykge1xuICAgIE1bX2ldID0gMDtcbiAgfVxuICBmb3IgKHZhciBlID0gMDsgZSA8IGVkZ2VzLmxlbmd0aDsgZSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tlXTtcbiAgICB2YXIgX2kyID0gaWQycG9zaXRpb25bZWRnZS5zb3VyY2UoKS5pZCgpXTtcbiAgICB2YXIgaiA9IGlkMnBvc2l0aW9uW2VkZ2UudGFyZ2V0KCkuaWQoKV07XG4gICAgdmFyIHNpbSA9IGdldFNpbWlsYXJpdHkkMShlZGdlLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgIE1bX2kyICogbiArIGpdICs9IHNpbTsgLy8gRyBzaG91bGQgYmUgc3ltbWV0cmljIGFuZCB1bmRpcmVjdGVkXG4gICAgTVtqICogbiArIF9pMl0gKz0gc2ltO1xuICB9XG5cbiAgLy8gQmVnaW4gTWFya292IGNsdXN0ZXIgYWxnb3JpdGhtXG5cbiAgLy8gU3RlcCAxOiBBZGQgc2VsZiBsb29wcyB0byBlYWNoIG5vZGUsIGllLiBhZGQgbXVsdEZhY3RvciB0byBtYXRyaXggZGlhZ29uYWxcbiAgYWRkTG9vcHMoTSwgbiwgb3B0cy5tdWx0RmFjdG9yKTtcblxuICAvLyBTdGVwIDI6IE0gPSBub3JtYWxpemUoIE0gKTtcbiAgbm9ybWFsaXplKE0sIG4pO1xuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8vIFN0ZXAgMzpcbiAgICBfTSA9IGV4cGFuZChNLCBuLCBvcHRzLmV4cGFuZEZhY3Rvcik7XG5cbiAgICAvLyBTdGVwIDQ6XG4gICAgTSA9IGluZmxhdGUoX00sIG4sIG9wdHMuaW5mbGF0ZUZhY3Rvcik7XG5cbiAgICAvLyBTdGVwIDU6IGNoZWNrIHRvIHNlZSBpZiB+c3RlYWR5IHN0YXRlIGhhcyBiZWVuIHJlYWNoZWRcbiAgICBpZiAoIWhhc0NvbnZlcmdlZChNLCBfTSwgbjIsIDQpKSB7XG4gICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgaXRlcmF0aW9ucysrO1xuICB9XG5cbiAgLy8gQnVpbGQgY2x1c3RlcnMgZnJvbSBtYXRyaXhcbiAgdmFyIGNsdXN0ZXJzID0gYXNzaWduJDIoTSwgbiwgbm9kZXMsIGN5KTtcblxuICAvLyBSZW1vdmUgZHVwbGljYXRlIGNsdXN0ZXJzIGR1ZSB0byBzeW1tZXRyeSBvZiBncmFwaCBhbmQgTSBtYXRyaXhcbiAgY2x1c3RlcnMgPSByZW1vdmVEdXBsaWNhdGVzKGNsdXN0ZXJzKTtcbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciBtYXJrb3ZDbHVzdGVyaW5nJDEgPSB7XG4gIG1hcmtvdkNsdXN0ZXJpbmc6IG1hcmtvdkNsdXN0ZXJpbmcsXG4gIG1jbDogbWFya292Q2x1c3RlcmluZ1xufTtcblxuLy8gQ29tbW9uIGRpc3RhbmNlIG1ldHJpY3MgZm9yIGNsdXN0ZXJpbmcgYWxnb3JpdGhtc1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn07XG52YXIgYWJzRGlmZiA9IGZ1bmN0aW9uIGFic0RpZmYocCwgcSkge1xuICByZXR1cm4gTWF0aC5hYnMocSAtIHApO1xufTtcbnZhciBhZGRBYnNEaWZmID0gZnVuY3Rpb24gYWRkQWJzRGlmZih0b3RhbCwgcCwgcSkge1xuICByZXR1cm4gdG90YWwgKyBhYnNEaWZmKHAsIHEpO1xufTtcbnZhciBhZGRTcXVhcmVkRGlmZiA9IGZ1bmN0aW9uIGFkZFNxdWFyZWREaWZmKHRvdGFsLCBwLCBxKSB7XG4gIHJldHVybiB0b3RhbCArIE1hdGgucG93KHEgLSBwLCAyKTtcbn07XG52YXIgc3FydCA9IGZ1bmN0aW9uIHNxcnQoeCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KHgpO1xufTtcbnZhciBtYXhBYnNEaWZmID0gZnVuY3Rpb24gbWF4QWJzRGlmZihjdXJyZW50TWF4LCBwLCBxKSB7XG4gIHJldHVybiBNYXRoLm1heChjdXJyZW50TWF4LCBhYnNEaWZmKHAsIHEpKTtcbn07XG52YXIgZ2V0RGlzdGFuY2UgPSBmdW5jdGlvbiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIGluaXQsIHZpc2l0KSB7XG4gIHZhciBwb3N0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiBpZGVudGl0eTtcbiAgdmFyIHJldCA9IGluaXQ7XG4gIHZhciBwLCBxO1xuICBmb3IgKHZhciBkaW0gPSAwOyBkaW0gPCBsZW5ndGg7IGRpbSsrKSB7XG4gICAgcCA9IGdldFAoZGltKTtcbiAgICBxID0gZ2V0UShkaW0pO1xuICAgIHJldCA9IHZpc2l0KHJldCwgcCwgcSk7XG4gIH1cbiAgcmV0dXJuIHBvc3QocmV0KTtcbn07XG52YXIgZGlzdGFuY2VzID0ge1xuICBldWNsaWRlYW46IGZ1bmN0aW9uIGV1Y2xpZGVhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICBpZiAobGVuZ3RoID49IDIpIHtcbiAgICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZFNxdWFyZWREaWZmLCBzcXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIHNpbmdsZSBhdHRyIGNhc2UsIG1vcmUgZWZmaWNpZW50IHRvIGF2b2lkIHNxcnRcbiAgICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZEFic0RpZmYpO1xuICAgIH1cbiAgfSxcbiAgc3F1YXJlZEV1Y2xpZGVhbjogZnVuY3Rpb24gc3F1YXJlZEV1Y2xpZGVhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRTcXVhcmVkRGlmZik7XG4gIH0sXG4gIG1hbmhhdHRhbjogZnVuY3Rpb24gbWFuaGF0dGFuKGxlbmd0aCwgZ2V0UCwgZ2V0USkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZEFic0RpZmYpO1xuICB9LFxuICBtYXg6IGZ1bmN0aW9uIG1heChsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAtSW5maW5pdHksIG1heEFic0RpZmYpO1xuICB9XG59O1xuXG4vLyBpbiBjYXNlIHRoZSB1c2VyIGFjY2lkZW50YWxseSBkb2Vzbid0IHVzZSBjYW1lbCBjYXNlXG5kaXN0YW5jZXNbJ3NxdWFyZWQtZXVjbGlkZWFuJ10gPSBkaXN0YW5jZXNbJ3NxdWFyZWRFdWNsaWRlYW4nXTtcbmRpc3RhbmNlc1snc3F1YXJlZGV1Y2xpZGVhbiddID0gZGlzdGFuY2VzWydzcXVhcmVkRXVjbGlkZWFuJ107XG5mdW5jdGlvbiBjbHVzdGVyaW5nRGlzdGFuY2UgKG1ldGhvZCwgbGVuZ3RoLCBnZXRQLCBnZXRRLCBub2RlUCwgbm9kZVEpIHtcbiAgdmFyIGltcGw7XG4gIGlmIChmbiQ2KG1ldGhvZCkpIHtcbiAgICBpbXBsID0gbWV0aG9kO1xuICB9IGVsc2Uge1xuICAgIGltcGwgPSBkaXN0YW5jZXNbbWV0aG9kXSB8fCBkaXN0YW5jZXMuZXVjbGlkZWFuO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDAgJiYgZm4kNihtZXRob2QpKSB7XG4gICAgcmV0dXJuIGltcGwobm9kZVAsIG5vZGVRKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW1wbChsZW5ndGgsIGdldFAsIGdldFEsIG5vZGVQLCBub2RlUSk7XG4gIH1cbn1cblxudmFyIGRlZmF1bHRzJGIgPSBkZWZhdWx0cyRnKHtcbiAgazogMixcbiAgbTogMixcbiAgc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6IDAuMDAwMSxcbiAgZGlzdGFuY2U6ICdldWNsaWRlYW4nLFxuICBtYXhJdGVyYXRpb25zOiAxMCxcbiAgYXR0cmlidXRlczogW10sXG4gIHRlc3RNb2RlOiBmYWxzZSxcbiAgdGVzdENlbnRyb2lkczogbnVsbFxufSk7XG52YXIgc2V0T3B0aW9ucyQyID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHJldHVybiBkZWZhdWx0cyRiKG9wdGlvbnMpO1xufTtcblxudmFyIGdldERpc3QgPSBmdW5jdGlvbiBnZXREaXN0KHR5cGUsIG5vZGUsIGNlbnRyb2lkLCBhdHRyaWJ1dGVzLCBtb2RlKSB7XG4gIHZhciBub05vZGVQID0gbW9kZSAhPT0gJ2tNZWRvaWRzJztcbiAgdmFyIGdldFAgPSBub05vZGVQID8gZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gY2VudHJvaWRbaV07XG4gIH0gOiBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzW2ldKGNlbnRyb2lkKTtcbiAgfTtcbiAgdmFyIGdldFEgPSBmdW5jdGlvbiBnZXRRKGkpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlc1tpXShub2RlKTtcbiAgfTtcbiAgdmFyIG5vZGVQID0gY2VudHJvaWQ7XG4gIHZhciBub2RlUSA9IG5vZGU7XG4gIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2UodHlwZSwgYXR0cmlidXRlcy5sZW5ndGgsIGdldFAsIGdldFEsIG5vZGVQLCBub2RlUSk7XG59O1xudmFyIHJhbmRvbUNlbnRyb2lkcyA9IGZ1bmN0aW9uIHJhbmRvbUNlbnRyb2lkcyhub2RlcywgaywgYXR0cmlidXRlcykge1xuICB2YXIgbmRpbSA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICB2YXIgbWluID0gbmV3IEFycmF5KG5kaW0pO1xuICB2YXIgbWF4ID0gbmV3IEFycmF5KG5kaW0pO1xuICB2YXIgY2VudHJvaWRzID0gbmV3IEFycmF5KGspO1xuICB2YXIgY2VudHJvaWQgPSBudWxsO1xuXG4gIC8vIEZpbmQgbWluLCBtYXggdmFsdWVzIGZvciBlYWNoIGF0dHJpYnV0ZSBkaW1lbnNpb25cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZGltOyBpKyspIHtcbiAgICBtaW5baV0gPSBub2Rlcy5taW4oYXR0cmlidXRlc1tpXSkudmFsdWU7XG4gICAgbWF4W2ldID0gbm9kZXMubWF4KGF0dHJpYnV0ZXNbaV0pLnZhbHVlO1xuICB9XG5cbiAgLy8gQnVpbGQgayBjZW50cm9pZHMsIGVhY2ggcmVwcmVzZW50ZWQgYXMgYW4gbi1kaW0gZmVhdHVyZSB2ZWN0b3JcbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICBjZW50cm9pZCA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBuZGltOyBfaSsrKSB7XG4gICAgICBjZW50cm9pZFtfaV0gPSBNYXRoLnJhbmRvbSgpICogKG1heFtfaV0gLSBtaW5bX2ldKSArIG1pbltfaV07IC8vIHJhbmRvbSBpbml0aWFsIHZhbHVlXG4gICAgfVxuXG4gICAgY2VudHJvaWRzW2NdID0gY2VudHJvaWQ7XG4gIH1cbiAgcmV0dXJuIGNlbnRyb2lkcztcbn07XG52YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiBjbGFzc2lmeShub2RlLCBjZW50cm9pZHMsIGRpc3RhbmNlLCBhdHRyaWJ1dGVzLCB0eXBlKSB7XG4gIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZW50cm9pZHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGlzdCA9IGdldERpc3QoZGlzdGFuY2UsIG5vZGUsIGNlbnRyb2lkc1tpXSwgYXR0cmlidXRlcywgdHlwZSk7XG4gICAgaWYgKGRpc3QgPCBtaW4pIHtcbiAgICAgIG1pbiA9IGRpc3Q7XG4gICAgICBpbmRleCA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmRleDtcbn07XG52YXIgYnVpbGRDbHVzdGVyID0gZnVuY3Rpb24gYnVpbGRDbHVzdGVyKGNlbnRyb2lkLCBub2RlcywgYXNzaWdubWVudCkge1xuICB2YXIgY2x1c3RlciA9IFtdO1xuICB2YXIgbm9kZSA9IG51bGw7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICBub2RlID0gbm9kZXNbbl07XG4gICAgaWYgKGFzc2lnbm1lbnRbbm9kZS5pZCgpXSA9PT0gY2VudHJvaWQpIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJOb2RlIFwiICsgbm9kZS5pZCgpICsgXCIgaXMgYXNzb2NpYXRlZCB3aXRoIG1lZG9pZCAjOiBcIiArIG0pO1xuICAgICAgY2x1c3Rlci5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2x1c3Rlcjtcbn07XG52YXIgaGF2ZVZhbHVlc0NvbnZlcmdlZCA9IGZ1bmN0aW9uIGhhdmVWYWx1ZXNDb252ZXJnZWQodjEsIHYyLCBzZW5zaXRpdml0eVRocmVzaG9sZCkge1xuICByZXR1cm4gTWF0aC5hYnModjIgLSB2MSkgPD0gc2Vuc2l0aXZpdHlUaHJlc2hvbGQ7XG59O1xudmFyIGhhdmVNYXRyaWNlc0NvbnZlcmdlZCA9IGZ1bmN0aW9uIGhhdmVNYXRyaWNlc0NvbnZlcmdlZCh2MSwgdjIsIHNlbnNpdGl2aXR5VGhyZXNob2xkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdjEubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHYxW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHYxW2ldW2pdIC0gdjJbaV1bal0pO1xuICAgICAgaWYgKGRpZmYgPiBzZW5zaXRpdml0eVRocmVzaG9sZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBzZWVuQmVmb3JlID0gZnVuY3Rpb24gc2VlbkJlZm9yZShub2RlLCBtZWRvaWRzLCBuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgaWYgKG5vZGUgPT09IG1lZG9pZHNbaV0pIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG52YXIgcmFuZG9tTWVkb2lkcyA9IGZ1bmN0aW9uIHJhbmRvbU1lZG9pZHMobm9kZXMsIGspIHtcbiAgdmFyIG1lZG9pZHMgPSBuZXcgQXJyYXkoayk7XG5cbiAgLy8gRm9yIHNtYWxsIGRhdGEgc2V0cywgdGhlIHByb2JhYmlsaXR5IG9mIG1lZG9pZCBjb25mbGljdCBpcyBncmVhdGVyLFxuICAvLyBzbyB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gb3IgY2hvc2UgdGhpcyBub2RlIGJlZm9yZS5cbiAgaWYgKG5vZGVzLmxlbmd0aCA8IDUwKSB7XG4gICAgLy8gUmFuZG9tbHkgc2VsZWN0IGsgbWVkb2lkcyBmcm9tIHRoZSBuIG5vZGVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm9kZXMubGVuZ3RoKV07XG5cbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgY2hvc2VuIHRoaXMgbm9kZSB0byBiZSBhIG1lZG9pZCwgZG9uJ3QgY2hvb3NlIGl0IGFnYWluIChmb3Igc21hbGwgZGF0YSBzZXRzKS5cbiAgICAgIC8vIEluc3RlYWQgY2hvb3NlIGEgZGlmZmVyZW50IHJhbmRvbSBub2RlLlxuICAgICAgd2hpbGUgKHNlZW5CZWZvcmUobm9kZSwgbWVkb2lkcywgaSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVzLmxlbmd0aCldO1xuICAgICAgfVxuICAgICAgbWVkb2lkc1tpXSA9IG5vZGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlbGF0aXZlbHkgbGFyZ2UgZGF0YSBzZXQsIHNvIHByZXR0eSBzYWZlIHRvIG5vdCBjaGVjayBhbmQganVzdCBzZWxlY3QgcmFuZG9tIG5vZGVzXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgazsgX2kyKyspIHtcbiAgICAgIG1lZG9pZHNbX2kyXSA9IG5vZGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVzLmxlbmd0aCldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVkb2lkcztcbn07XG52YXIgZmluZENvc3QgPSBmdW5jdGlvbiBmaW5kQ29zdChwb3RlbnRpYWxOZXdNZWRvaWQsIGNsdXN0ZXIsIGF0dHJpYnV0ZXMpIHtcbiAgdmFyIGNvc3QgPSAwO1xuICBmb3IgKHZhciBuID0gMDsgbiA8IGNsdXN0ZXIubGVuZ3RoOyBuKyspIHtcbiAgICBjb3N0ICs9IGdldERpc3QoJ21hbmhhdHRhbicsIGNsdXN0ZXJbbl0sIHBvdGVudGlhbE5ld01lZG9pZCwgYXR0cmlidXRlcywgJ2tNZWRvaWRzJyk7XG4gIH1cbiAgcmV0dXJuIGNvc3Q7XG59O1xudmFyIGtNZWFucyA9IGZ1bmN0aW9uIGtNZWFucyhvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgbm9kZSA9IG51bGw7XG5cbiAgLy8gU2V0IHBhcmFtZXRlcnMgb2YgYWxnb3JpdGhtOiAjIG9mIGNsdXN0ZXJzLCBkaXN0YW5jZSBtZXRyaWMsIGV0Yy5cbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDIob3B0aW9ucyk7XG5cbiAgLy8gQmVnaW4gay1tZWFucyBhbGdvcml0aG1cbiAgdmFyIGNsdXN0ZXJzID0gbmV3IEFycmF5KG9wdHMuayk7XG4gIHZhciBhc3NpZ25tZW50ID0ge307XG4gIHZhciBjZW50cm9pZHM7XG5cbiAgLy8gU3RlcCAxOiBJbml0aWFsaXplIGNlbnRyb2lkIHBvc2l0aW9uc1xuICBpZiAob3B0cy50ZXN0TW9kZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cy50ZXN0Q2VudHJvaWRzID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGEgc2VlZGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICAgICAgb3B0cy50ZXN0Q2VudHJvaWRzO1xuICAgICAgY2VudHJvaWRzID0gcmFuZG9tQ2VudHJvaWRzKG5vZGVzLCBvcHRzLmssIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgfSBlbHNlIGlmIChfdHlwZW9mKG9wdHMudGVzdENlbnRyb2lkcykgPT09ICdvYmplY3QnKSB7XG4gICAgICBjZW50cm9pZHMgPSBvcHRzLnRlc3RDZW50cm9pZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNlbnRyb2lkcyA9IHJhbmRvbUNlbnRyb2lkcyhub2Rlcywgb3B0cy5rLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjZW50cm9pZHMgPSByYW5kb21DZW50cm9pZHMobm9kZXMsIG9wdHMuaywgb3B0cy5hdHRyaWJ1dGVzKTtcbiAgfVxuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIC8vIFN0ZXAgMjogQXNzaWduIG5vZGVzIHRvIHRoZSBuZWFyZXN0IGNlbnRyb2lkXG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgICAgbm9kZSA9IG5vZGVzW25dO1xuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNsdXN0ZXIgdGhpcyBub2RlIGJlbG9uZ3MgdG86IG5vZGUgaWQgPT4gY2x1c3RlciAjXG4gICAgICBhc3NpZ25tZW50W25vZGUuaWQoKV0gPSBjbGFzc2lmeShub2RlLCBjZW50cm9pZHMsIG9wdHMuZGlzdGFuY2UsIG9wdHMuYXR0cmlidXRlcywgJ2tNZWFucycpO1xuICAgIH1cblxuICAgIC8vIFN0ZXAgMzogRm9yIGVhY2ggb2YgdGhlIGsgY2x1c3RlcnMsIHVwZGF0ZSBpdHMgY2VudHJvaWRcbiAgICBpc1N0aWxsTW92aW5nID0gZmFsc2U7XG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBvcHRzLms7IGMrKykge1xuICAgICAgLy8gR2V0IGFsbCBub2RlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGNsdXN0ZXJcbiAgICAgIHZhciBjbHVzdGVyID0gYnVpbGRDbHVzdGVyKGMsIG5vZGVzLCBhc3NpZ25tZW50KTtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBJZiBjbHVzdGVyIGlzIGVtcHR5LCBicmVhayBvdXQgZWFybHkgJiBtb3ZlIHRvIG5leHQgY2x1c3RlclxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNlbnRyb2lkcyBieSBjYWxjdWxhdGluZyBhdmcgb2YgYWxsIG5vZGVzIHdpdGhpbiB0aGUgY2x1c3Rlci5cbiAgICAgIHZhciBuZGltID0gb3B0cy5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgIHZhciBjZW50cm9pZCA9IGNlbnRyb2lkc1tjXTsgLy8gWyBkaW1fMSwgZGltXzIsIGRpbV8zLCAuLi4gLCBkaW1fbiBdXG4gICAgICB2YXIgbmV3Q2VudHJvaWQgPSBuZXcgQXJyYXkobmRpbSk7XG4gICAgICB2YXIgc3VtID0gbmV3IEFycmF5KG5kaW0pO1xuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuZGltOyBkKyspIHtcbiAgICAgICAgc3VtW2RdID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsdXN0ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlID0gY2x1c3RlcltpXTtcbiAgICAgICAgICBzdW1bZF0gKz0gb3B0cy5hdHRyaWJ1dGVzW2RdKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0NlbnRyb2lkW2RdID0gc3VtW2RdIC8gY2x1c3Rlci5sZW5ndGg7XG5cbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFsZ29yaXRobSBoYXMgY29udmVyZ2VkLCBpLmUuIHdoZW4gY2VudHJvaWRzIG5vIGxvbmdlciBjaGFuZ2VcbiAgICAgICAgaWYgKCFoYXZlVmFsdWVzQ29udmVyZ2VkKG5ld0NlbnRyb2lkW2RdLCBjZW50cm9pZFtkXSwgb3B0cy5zZW5zaXRpdml0eVRocmVzaG9sZCkpIHtcbiAgICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2VudHJvaWRzW2NdID0gbmV3Q2VudHJvaWQ7XG4gICAgICBjbHVzdGVyc1tjXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlcik7XG4gICAgfVxuICAgIGl0ZXJhdGlvbnMrKztcbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIGtNZWRvaWRzID0gZnVuY3Rpb24ga01lZG9pZHMob3B0aW9ucykge1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIG5vZGUgPSBudWxsO1xuICB2YXIgb3B0cyA9IHNldE9wdGlvbnMkMihvcHRpb25zKTtcblxuICAvLyBCZWdpbiBrLW1lZG9pZHMgYWxnb3JpdGhtXG4gIHZhciBjbHVzdGVycyA9IG5ldyBBcnJheShvcHRzLmspO1xuICB2YXIgbWVkb2lkcztcbiAgdmFyIGFzc2lnbm1lbnQgPSB7fTtcbiAgdmFyIGN1ckNvc3Q7XG4gIHZhciBtaW5Db3N0cyA9IG5ldyBBcnJheShvcHRzLmspOyAvLyBtaW5pbXVtIGNvc3QgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBjbHVzdGVyXG5cbiAgLy8gU3RlcCAxOiBJbml0aWFsaXplIGsgbWVkb2lkc1xuICBpZiAob3B0cy50ZXN0TW9kZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cy50ZXN0Q2VudHJvaWRzID09PSAnbnVtYmVyJykgOyBlbHNlIGlmIChfdHlwZW9mKG9wdHMudGVzdENlbnRyb2lkcykgPT09ICdvYmplY3QnKSB7XG4gICAgICBtZWRvaWRzID0gb3B0cy50ZXN0Q2VudHJvaWRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZWRvaWRzID0gcmFuZG9tTWVkb2lkcyhub2Rlcywgb3B0cy5rKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWVkb2lkcyA9IHJhbmRvbU1lZG9pZHMobm9kZXMsIG9wdHMuayk7XG4gIH1cbiAgdmFyIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gIHdoaWxlIChpc1N0aWxsTW92aW5nICYmIGl0ZXJhdGlvbnMgPCBvcHRzLm1heEl0ZXJhdGlvbnMpIHtcbiAgICAvLyBTdGVwIDI6IEFzc2lnbiBub2RlcyB0byB0aGUgbmVhcmVzdCBtZWRvaWRcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbl07XG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGlzIG5vZGUgYmVsb25ncyB0bzogbm9kZSBpZCA9PiBjbHVzdGVyICNcbiAgICAgIGFzc2lnbm1lbnRbbm9kZS5pZCgpXSA9IGNsYXNzaWZ5KG5vZGUsIG1lZG9pZHMsIG9wdHMuZGlzdGFuY2UsIG9wdHMuYXR0cmlidXRlcywgJ2tNZWRvaWRzJyk7XG4gICAgfVxuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcbiAgICAvLyBTdGVwIDM6IEZvciBlYWNoIG1lZG9pZCBtLCBhbmQgZm9yIGVhY2ggbm9kZSBhc3NvY2lhdGVkIHdpdGggbWVkaW9kIG0sXG4gICAgLy8gc2VsZWN0IHRoZSBub2RlIHdpdGggdGhlIGxvd2VzdCBjb25maWd1cmF0aW9uIGNvc3QgYXMgbmV3IG1lZG9pZC5cbiAgICBmb3IgKHZhciBtID0gMDsgbSA8IG1lZG9pZHMubGVuZ3RoOyBtKyspIHtcbiAgICAgIC8vIEdldCBhbGwgbm9kZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBtZWRvaWRcbiAgICAgIHZhciBjbHVzdGVyID0gYnVpbGRDbHVzdGVyKG0sIG5vZGVzLCBhc3NpZ25tZW50KTtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBJZiBjbHVzdGVyIGlzIGVtcHR5LCBicmVhayBvdXQgZWFybHkgJiBtb3ZlIHRvIG5leHQgY2x1c3RlclxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1pbkNvc3RzW21dID0gZmluZENvc3QobWVkb2lkc1ttXSwgY2x1c3Rlciwgb3B0cy5hdHRyaWJ1dGVzKTsgLy8gb3JpZ2luYWwgY29zdFxuXG4gICAgICAvLyBTZWxlY3QgZGlmZmVyZW50IG1lZG9pZCBpZiBpdHMgY29uZmlndXJhdGlvbiBoYXMgdGhlIGxvd2VzdCBjb3N0XG4gICAgICBmb3IgKHZhciBfbiA9IDA7IF9uIDwgY2x1c3Rlci5sZW5ndGg7IF9uKyspIHtcbiAgICAgICAgY3VyQ29zdCA9IGZpbmRDb3N0KGNsdXN0ZXJbX25dLCBjbHVzdGVyLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoY3VyQ29zdCA8IG1pbkNvc3RzW21dKSB7XG4gICAgICAgICAgbWluQ29zdHNbbV0gPSBjdXJDb3N0O1xuICAgICAgICAgIG1lZG9pZHNbbV0gPSBjbHVzdGVyW19uXTtcbiAgICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2x1c3RlcnNbbV0gPSBjeS5jb2xsZWN0aW9uKGNsdXN0ZXIpO1xuICAgIH1cbiAgICBpdGVyYXRpb25zKys7XG4gIH1cbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciB1cGRhdGVDZW50cm9pZHMgPSBmdW5jdGlvbiB1cGRhdGVDZW50cm9pZHMoY2VudHJvaWRzLCBub2RlcywgVSwgd2VpZ2h0LCBvcHRzKSB7XG4gIHZhciBudW1lcmF0b3IsIGRlbm9taW5hdG9yO1xuICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjZW50cm9pZHMubGVuZ3RoOyBjKyspIHtcbiAgICAgIHdlaWdodFtuXVtjXSA9IE1hdGgucG93KFVbbl1bY10sIG9wdHMubSk7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIF9jID0gMDsgX2MgPCBjZW50cm9pZHMubGVuZ3RoOyBfYysrKSB7XG4gICAgZm9yICh2YXIgZGltID0gMDsgZGltIDwgb3B0cy5hdHRyaWJ1dGVzLmxlbmd0aDsgZGltKyspIHtcbiAgICAgIG51bWVyYXRvciA9IDA7XG4gICAgICBkZW5vbWluYXRvciA9IDA7XG4gICAgICBmb3IgKHZhciBfbjIgPSAwOyBfbjIgPCBub2Rlcy5sZW5ndGg7IF9uMisrKSB7XG4gICAgICAgIG51bWVyYXRvciArPSB3ZWlnaHRbX24yXVtfY10gKiBvcHRzLmF0dHJpYnV0ZXNbZGltXShub2Rlc1tfbjJdKTtcbiAgICAgICAgZGVub21pbmF0b3IgKz0gd2VpZ2h0W19uMl1bX2NdO1xuICAgICAgfVxuICAgICAgY2VudHJvaWRzW19jXVtkaW1dID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gICAgfVxuICB9XG59O1xudmFyIHVwZGF0ZU1lbWJlcnNoaXAgPSBmdW5jdGlvbiB1cGRhdGVNZW1iZXJzaGlwKFUsIF9VLCBjZW50cm9pZHMsIG5vZGVzLCBvcHRzKSB7XG4gIC8vIFNhdmUgcHJldmlvdXMgc3RlcFxuICBmb3IgKHZhciBpID0gMDsgaSA8IFUubGVuZ3RoOyBpKyspIHtcbiAgICBfVVtpXSA9IFVbaV0uc2xpY2UoKTtcbiAgfVxuICB2YXIgc3VtLCBudW1lcmF0b3IsIGRlbm9taW5hdG9yO1xuICB2YXIgcG93ID0gMiAvIChvcHRzLm0gLSAxKTtcbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBjZW50cm9pZHMubGVuZ3RoOyBjKyspIHtcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgICBzdW0gPSAwO1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjZW50cm9pZHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgLy8gYWdhaW5zdCBhbGwgb3RoZXIgY2VudHJvaWRzXG4gICAgICAgIG51bWVyYXRvciA9IGdldERpc3Qob3B0cy5kaXN0YW5jZSwgbm9kZXNbbl0sIGNlbnRyb2lkc1tjXSwgb3B0cy5hdHRyaWJ1dGVzLCAnY21lYW5zJyk7XG4gICAgICAgIGRlbm9taW5hdG9yID0gZ2V0RGlzdChvcHRzLmRpc3RhbmNlLCBub2Rlc1tuXSwgY2VudHJvaWRzW2tdLCBvcHRzLmF0dHJpYnV0ZXMsICdjbWVhbnMnKTtcbiAgICAgICAgc3VtICs9IE1hdGgucG93KG51bWVyYXRvciAvIGRlbm9taW5hdG9yLCBwb3cpO1xuICAgICAgfVxuICAgICAgVVtuXVtjXSA9IDEgLyBzdW07XG4gICAgfVxuICB9XG59O1xudmFyIGFzc2lnbiQxID0gZnVuY3Rpb24gYXNzaWduKG5vZGVzLCBVLCBvcHRzLCBjeSkge1xuICB2YXIgY2x1c3RlcnMgPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBjbHVzdGVycy5sZW5ndGg7IGMrKykge1xuICAgIGNsdXN0ZXJzW2NdID0gW107XG4gIH1cbiAgdmFyIG1heDtcbiAgdmFyIGluZGV4O1xuICBmb3IgKHZhciBuID0gMDsgbiA8IFUubGVuZ3RoOyBuKyspIHtcbiAgICAvLyBmb3IgZWFjaCBub2RlIChVIGlzIE4geCBDIG1hdHJpeClcbiAgICBtYXggPSAtSW5maW5pdHk7XG4gICAgaW5kZXggPSAtMTtcbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGUgbm9kZSBpcyBtb3N0IGxpa2VseSB0byBiZWxvbmcgaW5cbiAgICBmb3IgKHZhciBfYzIgPSAwOyBfYzIgPCBVWzBdLmxlbmd0aDsgX2MyKyspIHtcbiAgICAgIGlmIChVW25dW19jMl0gPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gVVtuXVtfYzJdO1xuICAgICAgICBpbmRleCA9IF9jMjtcbiAgICAgIH1cbiAgICB9XG4gICAgY2x1c3RlcnNbaW5kZXhdLnB1c2gobm9kZXNbbl0pO1xuICB9XG5cbiAgLy8gVHVybiBldmVyeSBhcnJheSBpbnRvIGEgY29sbGVjdGlvbiBvZiBub2Rlc1xuICBmb3IgKHZhciBfYzMgPSAwOyBfYzMgPCBjbHVzdGVycy5sZW5ndGg7IF9jMysrKSB7XG4gICAgY2x1c3RlcnNbX2MzXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3RlcnNbX2MzXSk7XG4gIH1cbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciBmdXp6eUNNZWFucyA9IGZ1bmN0aW9uIGZ1enp5Q01lYW5zKG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gIHZhciBvcHRzID0gc2V0T3B0aW9ucyQyKG9wdGlvbnMpO1xuXG4gIC8vIEJlZ2luIGZ1enp5IGMtbWVhbnMgYWxnb3JpdGhtXG4gIHZhciBjbHVzdGVycztcbiAgdmFyIGNlbnRyb2lkcztcbiAgdmFyIFU7XG4gIHZhciBfVTtcbiAgdmFyIHdlaWdodDtcblxuICAvLyBTdGVwIDE6IEluaXRpYWxpemUgbGV0aWFibGVzLlxuICBfVSA9IG5ldyBBcnJheShub2Rlcy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gTiB4IEMgbWF0cml4XG4gICAgX1VbaV0gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgfVxuICBVID0gbmV3IEFycmF5KG5vZGVzLmxlbmd0aCk7XG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IG5vZGVzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAvLyBOIHggQyBtYXRyaXhcbiAgICBVW19pM10gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgfVxuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBub2Rlcy5sZW5ndGg7IF9pNCsrKSB7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9wdHMuazsgaisrKSB7XG4gICAgICBVW19pNF1bal0gPSBNYXRoLnJhbmRvbSgpO1xuICAgICAgdG90YWwgKz0gVVtfaTRdW2pdO1xuICAgIH1cbiAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgb3B0cy5rOyBfaisrKSB7XG4gICAgICBVW19pNF1bX2pdID0gVVtfaTRdW19qXSAvIHRvdGFsO1xuICAgIH1cbiAgfVxuICBjZW50cm9pZHMgPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgb3B0cy5rOyBfaTUrKykge1xuICAgIGNlbnRyb2lkc1tfaTVdID0gbmV3IEFycmF5KG9wdHMuYXR0cmlidXRlcy5sZW5ndGgpO1xuICB9XG4gIHdlaWdodCA9IG5ldyBBcnJheShub2Rlcy5sZW5ndGgpO1xuICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBub2Rlcy5sZW5ndGg7IF9pNisrKSB7XG4gICAgLy8gTiB4IEMgbWF0cml4XG4gICAgd2VpZ2h0W19pNl0gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgfVxuICAvLyBlbmQgaW5pdCBGQ01cblxuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8vIFN0ZXAgMjogQ2FsY3VsYXRlIHRoZSBjZW50cm9pZHMgZm9yIGVhY2ggc3RlcC5cbiAgICB1cGRhdGVDZW50cm9pZHMoY2VudHJvaWRzLCBub2RlcywgVSwgd2VpZ2h0LCBvcHRzKTtcblxuICAgIC8vIFN0ZXAgMzogVXBkYXRlIHRoZSBwYXJ0aXRpb24gbWF0cml4IFUuXG4gICAgdXBkYXRlTWVtYmVyc2hpcChVLCBfVSwgY2VudHJvaWRzLCBub2Rlcywgb3B0cyk7XG5cbiAgICAvLyBTdGVwIDQ6IENoZWNrIGZvciBjb252ZXJnZW5jZS5cbiAgICBpZiAoIWhhdmVNYXRyaWNlc0NvbnZlcmdlZChVLCBfVSwgb3B0cy5zZW5zaXRpdml0eVRocmVzaG9sZCkpIHtcbiAgICAgIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpdGVyYXRpb25zKys7XG4gIH1cblxuICAvLyBBc3NpZ24gbm9kZXMgdG8gY2x1c3RlcnMgd2l0aCBoaWdoZXN0IHByb2JhYmlsaXR5LlxuICBjbHVzdGVycyA9IGFzc2lnbiQxKG5vZGVzLCBVLCBvcHRzLCBjeSk7XG4gIHJldHVybiB7XG4gICAgY2x1c3RlcnM6IGNsdXN0ZXJzLFxuICAgIGRlZ3JlZU9mTWVtYmVyc2hpcDogVVxuICB9O1xufTtcbnZhciBrQ2x1c3RlcmluZyA9IHtcbiAga01lYW5zOiBrTWVhbnMsXG4gIGtNZWRvaWRzOiBrTWVkb2lkcyxcbiAgZnV6enlDTWVhbnM6IGZ1enp5Q01lYW5zLFxuICBmY206IGZ1enp5Q01lYW5zXG59O1xuXG4vLyBJbXBsZW1lbnRlZCBieSBab2UgWGkgQHpvZXhpIGZvciBHU09DIDIwMTZcbnZhciBkZWZhdWx0cyRhID0gZGVmYXVsdHMkZyh7XG4gIGRpc3RhbmNlOiAnZXVjbGlkZWFuJyxcbiAgLy8gZGlzdGFuY2UgbWV0cmljIHRvIGNvbXBhcmUgbm9kZXNcbiAgbGlua2FnZTogJ21pbicsXG4gIC8vIGxpbmthZ2UgY3JpdGVyaW9uIDogaG93IHRvIGRldGVybWluZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBjbHVzdGVycyBvZiBub2Rlc1xuICBtb2RlOiAndGhyZXNob2xkJyxcbiAgLy8gbW9kZTondGhyZXNob2xkJyA9PiBjbHVzdGVycyBtdXN0IGJlIHRocmVzaG9sZCBkaXN0YW5jZSBhcGFydFxuICB0aHJlc2hvbGQ6IEluZmluaXR5LFxuICAvLyB0aGUgZGlzdGFuY2UgdGhyZXNob2xkXG4gIC8vIG1vZGU6J2RlbmRyb2dyYW0nID0+IHRoZSBub2RlcyBhcmUgb3JnYW5pc2VkIGFzIGxlYXZlcyBpbiBhIHRyZWUgKHNpYmxpbmdzIGFyZSBjbG9zZSksIG1lcmdpbmcgbWFrZXMgY2x1c3RlcnNcbiAgYWRkRGVuZHJvZ3JhbTogZmFsc2UsXG4gIC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBkZW5kcm9ncmFtIHRvIHRoZSBncmFwaCBmb3Igdml6XG4gIGRlbmRyb2dyYW1EZXB0aDogMCxcbiAgLy8gZGVwdGggYXQgd2hpY2ggZGVuZHJvZ3JhbSBicmFuY2hlcyBhcmUgbWVyZ2VkIGludG8gdGhlIHJldHVybmVkIGNsdXN0ZXJzXG4gIGF0dHJpYnV0ZXM6IFtdIC8vIGFycmF5IG9mIGF0dHIgZnVuY3Rpb25zXG59KTtcblxudmFyIGxpbmthZ2VBbGlhc2VzID0ge1xuICAnc2luZ2xlJzogJ21pbicsXG4gICdjb21wbGV0ZSc6ICdtYXgnXG59O1xudmFyIHNldE9wdGlvbnMkMSA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICB2YXIgb3B0cyA9IGRlZmF1bHRzJGEob3B0aW9ucyk7XG4gIHZhciBwcmVmZXJyZWRBbGlhcyA9IGxpbmthZ2VBbGlhc2VzW29wdHMubGlua2FnZV07XG4gIGlmIChwcmVmZXJyZWRBbGlhcyAhPSBudWxsKSB7XG4gICAgb3B0cy5saW5rYWdlID0gcHJlZmVycmVkQWxpYXM7XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59O1xudmFyIG1lcmdlQ2xvc2VzdCA9IGZ1bmN0aW9uIG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKSB7XG4gIC8vIEZpbmQgdHdvIGNsb3Nlc3QgY2x1c3RlcnMgZnJvbSBjYWNoZWQgbWluc1xuICB2YXIgbWluS2V5ID0gMDtcbiAgdmFyIG1pbiA9IEluZmluaXR5O1xuICB2YXIgZGlzdDtcbiAgdmFyIGF0dHJzID0gb3B0cy5hdHRyaWJ1dGVzO1xuICB2YXIgZ2V0RGlzdCA9IGZ1bmN0aW9uIGdldERpc3QobjEsIG4yKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJpbmdEaXN0YW5jZShvcHRzLmRpc3RhbmNlLCBhdHRycy5sZW5ndGgsIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cnNbaV0objEpO1xuICAgIH0sIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cnNbaV0objIpO1xuICAgIH0sIG4xLCBuMik7XG4gIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gY2x1c3RlcnNbaV0ua2V5O1xuICAgIHZhciBfZGlzdCA9IGRpc3RzW2tleV1bbWluc1trZXldXTtcbiAgICBpZiAoX2Rpc3QgPCBtaW4pIHtcbiAgICAgIG1pbktleSA9IGtleTtcbiAgICAgIG1pbiA9IF9kaXN0O1xuICAgIH1cbiAgfVxuICBpZiAob3B0cy5tb2RlID09PSAndGhyZXNob2xkJyAmJiBtaW4gPj0gb3B0cy50aHJlc2hvbGQgfHwgb3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScgJiYgY2x1c3RlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBjMSA9IGluZGV4W21pbktleV07XG4gIHZhciBjMiA9IGluZGV4W21pbnNbbWluS2V5XV07XG4gIHZhciBtZXJnZWQ7XG5cbiAgLy8gTWVyZ2UgdHdvIGNsb3Nlc3QgY2x1c3RlcnNcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nKSB7XG4gICAgbWVyZ2VkID0ge1xuICAgICAgbGVmdDogYzEsXG4gICAgICByaWdodDogYzIsXG4gICAgICBrZXk6IGMxLmtleVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbWVyZ2VkID0ge1xuICAgICAgdmFsdWU6IGMxLnZhbHVlLmNvbmNhdChjMi52YWx1ZSksXG4gICAgICBrZXk6IGMxLmtleVxuICAgIH07XG4gIH1cbiAgY2x1c3RlcnNbYzEuaW5kZXhdID0gbWVyZ2VkO1xuICBjbHVzdGVycy5zcGxpY2UoYzIuaW5kZXgsIDEpO1xuICBpbmRleFtjMS5rZXldID0gbWVyZ2VkO1xuXG4gIC8vIFVwZGF0ZSBkaXN0YW5jZXMgd2l0aCBuZXcgbWVyZ2VkIGNsdXN0ZXJcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGNsdXN0ZXJzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBjdXIgPSBjbHVzdGVyc1tfaV07XG4gICAgaWYgKGMxLmtleSA9PT0gY3VyLmtleSkge1xuICAgICAgZGlzdCA9IEluZmluaXR5O1xuICAgIH0gZWxzZSBpZiAob3B0cy5saW5rYWdlID09PSAnbWluJykge1xuICAgICAgZGlzdCA9IGRpc3RzW2MxLmtleV1bY3VyLmtleV07XG4gICAgICBpZiAoZGlzdHNbYzEua2V5XVtjdXIua2V5XSA+IGRpc3RzW2MyLmtleV1bY3VyLmtleV0pIHtcbiAgICAgICAgZGlzdCA9IGRpc3RzW2MyLmtleV1bY3VyLmtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRzLmxpbmthZ2UgPT09ICdtYXgnKSB7XG4gICAgICBkaXN0ID0gZGlzdHNbYzEua2V5XVtjdXIua2V5XTtcbiAgICAgIGlmIChkaXN0c1tjMS5rZXldW2N1ci5rZXldIDwgZGlzdHNbYzIua2V5XVtjdXIua2V5XSkge1xuICAgICAgICBkaXN0ID0gZGlzdHNbYzIua2V5XVtjdXIua2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdHMubGlua2FnZSA9PT0gJ21lYW4nKSB7XG4gICAgICBkaXN0ID0gKGRpc3RzW2MxLmtleV1bY3VyLmtleV0gKiBjMS5zaXplICsgZGlzdHNbYzIua2V5XVtjdXIua2V5XSAqIGMyLnNpemUpIC8gKGMxLnNpemUgKyBjMi5zaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nKSBkaXN0ID0gZ2V0RGlzdChjdXIudmFsdWUsIGMxLnZhbHVlKTtlbHNlIGRpc3QgPSBnZXREaXN0KGN1ci52YWx1ZVswXSwgYzEudmFsdWVbMF0pO1xuICAgIH1cbiAgICBkaXN0c1tjMS5rZXldW2N1ci5rZXldID0gZGlzdHNbY3VyLmtleV1bYzEua2V5XSA9IGRpc3Q7IC8vIGRpc3RhbmNlIG1hdHJpeCBpcyBzeW1tZXRyaWNcbiAgfVxuXG4gIC8vIFVwZGF0ZSBjYWNoZWQgbWluc1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjbHVzdGVycy5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIGtleTEgPSBjbHVzdGVyc1tfaTJdLmtleTtcbiAgICBpZiAobWluc1trZXkxXSA9PT0gYzEua2V5IHx8IG1pbnNba2V5MV0gPT09IGMyLmtleSkge1xuICAgICAgdmFyIF9taW4gPSBrZXkxO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbHVzdGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIga2V5MiA9IGNsdXN0ZXJzW2pdLmtleTtcbiAgICAgICAgaWYgKGRpc3RzW2tleTFdW2tleTJdIDwgZGlzdHNba2V5MV1bX21pbl0pIHtcbiAgICAgICAgICBfbWluID0ga2V5MjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWluc1trZXkxXSA9IF9taW47XG4gICAgfVxuICAgIGNsdXN0ZXJzW19pMl0uaW5kZXggPSBfaTI7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBtZXRhIGRhdGEgdXNlZCBmb3IgY2x1c3RlcmluZ1xuICBjMS5rZXkgPSBjMi5rZXkgPSBjMS5pbmRleCA9IGMyLmluZGV4ID0gbnVsbDtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIGdldEFsbENoaWxkcmVuID0gZnVuY3Rpb24gZ2V0QWxsQ2hpbGRyZW4ocm9vdCwgYXJyLCBjeSkge1xuICBpZiAoIXJvb3QpIHJldHVybjtcbiAgaWYgKHJvb3QudmFsdWUpIHtcbiAgICBhcnIucHVzaChyb290LnZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocm9vdC5sZWZ0KSBnZXRBbGxDaGlsZHJlbihyb290LmxlZnQsIGFycik7XG4gICAgaWYgKHJvb3QucmlnaHQpIGdldEFsbENoaWxkcmVuKHJvb3QucmlnaHQsIGFycik7XG4gIH1cbn07XG52YXIgYnVpbGREZW5kcm9ncmFtID0gZnVuY3Rpb24gYnVpbGREZW5kcm9ncmFtKHJvb3QsIGN5KSB7XG4gIGlmICghcm9vdCkgcmV0dXJuICcnO1xuICBpZiAocm9vdC5sZWZ0ICYmIHJvb3QucmlnaHQpIHtcbiAgICB2YXIgbGVmdFN0ciA9IGJ1aWxkRGVuZHJvZ3JhbShyb290LmxlZnQsIGN5KTtcbiAgICB2YXIgcmlnaHRTdHIgPSBidWlsZERlbmRyb2dyYW0ocm9vdC5yaWdodCwgY3kpO1xuICAgIHZhciBub2RlID0gY3kuYWRkKHtcbiAgICAgIGdyb3VwOiAnbm9kZXMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBpZDogbGVmdFN0ciArICcsJyArIHJpZ2h0U3RyXG4gICAgICB9XG4gICAgfSk7XG4gICAgY3kuYWRkKHtcbiAgICAgIGdyb3VwOiAnZWRnZXMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzb3VyY2U6IGxlZnRTdHIsXG4gICAgICAgIHRhcmdldDogbm9kZS5pZCgpXG4gICAgICB9XG4gICAgfSk7XG4gICAgY3kuYWRkKHtcbiAgICAgIGdyb3VwOiAnZWRnZXMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzb3VyY2U6IHJpZ2h0U3RyLFxuICAgICAgICB0YXJnZXQ6IG5vZGUuaWQoKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBub2RlLmlkKCk7XG4gIH0gZWxzZSBpZiAocm9vdC52YWx1ZSkge1xuICAgIHJldHVybiByb290LnZhbHVlLmlkKCk7XG4gIH1cbn07XG52YXIgYnVpbGRDbHVzdGVyc0Zyb21UcmVlID0gZnVuY3Rpb24gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QsIGssIGN5KSB7XG4gIGlmICghcm9vdCkgcmV0dXJuIFtdO1xuICB2YXIgbGVmdCA9IFtdLFxuICAgIHJpZ2h0ID0gW10sXG4gICAgbGVhdmVzID0gW107XG4gIGlmIChrID09PSAwKSB7XG4gICAgLy8gZG9uJ3QgY3V0IHRyZWUsIHNpbXBseSByZXR1cm4gYWxsIG5vZGVzIGFzIDEgc2luZ2xlIGNsdXN0ZXJcbiAgICBpZiAocm9vdC5sZWZ0KSBnZXRBbGxDaGlsZHJlbihyb290LmxlZnQsIGxlZnQpO1xuICAgIGlmIChyb290LnJpZ2h0KSBnZXRBbGxDaGlsZHJlbihyb290LnJpZ2h0LCByaWdodCk7XG4gICAgbGVhdmVzID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgIHJldHVybiBbY3kuY29sbGVjdGlvbihsZWF2ZXMpXTtcbiAgfSBlbHNlIGlmIChrID09PSAxKSB7XG4gICAgLy8gY3V0IGF0IHJvb3RcblxuICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICAvLyBsZWFmIG5vZGVcbiAgICAgIHJldHVybiBbY3kuY29sbGVjdGlvbihyb290LnZhbHVlKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyb290LmxlZnQpIGdldEFsbENoaWxkcmVuKHJvb3QubGVmdCwgbGVmdCk7XG4gICAgICBpZiAocm9vdC5yaWdodCkgZ2V0QWxsQ2hpbGRyZW4ocm9vdC5yaWdodCwgcmlnaHQpO1xuICAgICAgcmV0dXJuIFtjeS5jb2xsZWN0aW9uKGxlZnQpLCBjeS5jb2xsZWN0aW9uKHJpZ2h0KV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICByZXR1cm4gW2N5LmNvbGxlY3Rpb24ocm9vdC52YWx1ZSldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocm9vdC5sZWZ0KSBsZWZ0ID0gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QubGVmdCwgayAtIDEsIGN5KTtcbiAgICAgIGlmIChyb290LnJpZ2h0KSByaWdodCA9IGJ1aWxkQ2x1c3RlcnNGcm9tVHJlZShyb290LnJpZ2h0LCBrIC0gMSwgY3kpO1xuICAgICAgcmV0dXJuIGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBoaWVyYXJjaGljYWxDbHVzdGVyaW5nID0gZnVuY3Rpb24gaGllcmFyY2hpY2FsQ2x1c3RlcmluZyhvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuXG4gIC8vIFNldCBwYXJhbWV0ZXJzIG9mIGFsZ29yaXRobTogbGlua2FnZSB0eXBlLCBkaXN0YW5jZSBtZXRyaWMsIGV0Yy5cbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDEob3B0aW9ucyk7XG4gIHZhciBhdHRycyA9IG9wdHMuYXR0cmlidXRlcztcbiAgdmFyIGdldERpc3QgPSBmdW5jdGlvbiBnZXREaXN0KG4xLCBuMikge1xuICAgIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2Uob3B0cy5kaXN0YW5jZSwgYXR0cnMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGF0dHJzW2ldKG4xKTtcbiAgICB9LCBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGF0dHJzW2ldKG4yKTtcbiAgICB9LCBuMSwgbjIpO1xuICB9O1xuXG4gIC8vIEJlZ2luIGhpZXJhcmNoaWNhbCBhbGdvcml0aG1cbiAgdmFyIGNsdXN0ZXJzID0gW107XG4gIHZhciBkaXN0cyA9IFtdOyAvLyBkaXN0YW5jZXMgYmV0d2VlbiBlYWNoIHBhaXIgb2YgY2x1c3RlcnNcbiAgdmFyIG1pbnMgPSBbXTsgLy8gY2xvc2VzdCBjbHVzdGVyIGZvciBlYWNoIGNsdXN0ZXJcbiAgdmFyIGluZGV4ID0gW107IC8vIGhhc2ggb2YgYWxsIGNsdXN0ZXJzIGJ5IGtleVxuXG4gIC8vIEluIGFnZ2xvbWVyYXRpdmUgKGJvdHRvbS11cCkgY2x1c3RlcmluZywgZWFjaCBub2RlIHN0YXJ0cyBhcyBpdHMgb3duIGNsdXN0ZXJcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgIHZhciBjbHVzdGVyID0ge1xuICAgICAgdmFsdWU6IG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nID8gbm9kZXNbbl0gOiBbbm9kZXNbbl1dLFxuICAgICAga2V5OiBuLFxuICAgICAgaW5kZXg6IG5cbiAgICB9O1xuICAgIGNsdXN0ZXJzW25dID0gY2x1c3RlcjtcbiAgICBpbmRleFtuXSA9IGNsdXN0ZXI7XG4gICAgZGlzdHNbbl0gPSBbXTtcbiAgICBtaW5zW25dID0gMDtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHBhaXIgb2YgY2x1c3RlcnNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IGk7IGorKykge1xuICAgICAgdmFyIGRpc3QgPSB2b2lkIDA7XG4gICAgICBpZiAob3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScpIHtcbiAgICAgICAgLy8gbW9kZXMgc3RvcmUgY2x1c3RlciB2YWx1ZXMgZGlmZmVyZW50bHlcbiAgICAgICAgZGlzdCA9IGkgPT09IGogPyBJbmZpbml0eSA6IGdldERpc3QoY2x1c3RlcnNbaV0udmFsdWUsIGNsdXN0ZXJzW2pdLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3QgPSBpID09PSBqID8gSW5maW5pdHkgOiBnZXREaXN0KGNsdXN0ZXJzW2ldLnZhbHVlWzBdLCBjbHVzdGVyc1tqXS52YWx1ZVswXSk7XG4gICAgICB9XG4gICAgICBkaXN0c1tpXVtqXSA9IGRpc3Q7XG4gICAgICBkaXN0c1tqXVtpXSA9IGRpc3Q7XG4gICAgICBpZiAoZGlzdCA8IGRpc3RzW2ldW21pbnNbaV1dKSB7XG4gICAgICAgIG1pbnNbaV0gPSBqOyAvLyBDYWNoZSBtaW5zOiBjbG9zZXN0IGNsdXN0ZXIgdG8gY2x1c3RlciBpIGlzIGNsdXN0ZXIgalxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgdGhlIGNsb3Nlc3QgcGFpciBvZiBjbHVzdGVycyBhbmQgbWVyZ2UgdGhlbSBpbnRvIGEgc2luZ2xlIGNsdXN0ZXIuXG4gIC8vIFVwZGF0ZSBkaXN0YW5jZXMgYmV0d2VlbiBuZXcgY2x1c3RlciBhbmQgZWFjaCBvZiB0aGUgb2xkIGNsdXN0ZXJzLCBhbmQgbG9vcCB1bnRpbCB0aHJlc2hvbGQgcmVhY2hlZC5cbiAgdmFyIG1lcmdlZCA9IG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKTtcbiAgd2hpbGUgKG1lcmdlZCkge1xuICAgIG1lcmdlZCA9IG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKTtcbiAgfVxuICB2YXIgcmV0Q2x1c3RlcnM7XG5cbiAgLy8gRGVuZHJvZ3JhbSBtb2RlIGJ1aWxkcyB0aGUgaGllcmFyY2h5IGFuZCBhZGRzIGludGVybWVkaWFyeSBub2RlcyArIGVkZ2VzXG4gIC8vIGluIGFkZGl0aW9uIHRvIHJldHVybmluZyB0aGUgY2x1c3RlcnMuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykge1xuICAgIHJldENsdXN0ZXJzID0gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKGNsdXN0ZXJzWzBdLCBvcHRzLmRlbmRyb2dyYW1EZXB0aCwgY3kpO1xuICAgIGlmIChvcHRzLmFkZERlbmRyb2dyYW0pIGJ1aWxkRGVuZHJvZ3JhbShjbHVzdGVyc1swXSwgY3kpO1xuICB9IGVsc2Uge1xuICAgIC8vIFJlZ3VsYXIgbW9kZSBzaW1wbHkgcmV0dXJucyB0aGUgY2x1c3RlcnNcblxuICAgIHJldENsdXN0ZXJzID0gbmV3IEFycmF5KGNsdXN0ZXJzLmxlbmd0aCk7XG4gICAgY2x1c3RlcnMuZm9yRWFjaChmdW5jdGlvbiAoY2x1c3RlciwgaSkge1xuICAgICAgLy8gQ2xlYW4gdXAgbWV0YSBkYXRhIHVzZWQgZm9yIGNsdXN0ZXJpbmdcbiAgICAgIGNsdXN0ZXIua2V5ID0gY2x1c3Rlci5pbmRleCA9IG51bGw7XG4gICAgICByZXRDbHVzdGVyc1tpXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlci52YWx1ZSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJldENsdXN0ZXJzO1xufTtcbnZhciBoaWVyYXJjaGljYWxDbHVzdGVyaW5nJDEgPSB7XG4gIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmc6IGhpZXJhcmNoaWNhbENsdXN0ZXJpbmcsXG4gIGhjYTogaGllcmFyY2hpY2FsQ2x1c3RlcmluZ1xufTtcblxuLy8gSW1wbGVtZW50ZWQgYnkgWm9lIFhpIEB6b2V4aSBmb3IgR1NPQyAyMDE2XG52YXIgZGVmYXVsdHMkOSA9IGRlZmF1bHRzJGcoe1xuICBkaXN0YW5jZTogJ2V1Y2xpZGVhbicsXG4gIC8vIGRpc3RhbmNlIG1ldHJpYyB0byBjb21wYXJlIGF0dHJpYnV0ZXMgYmV0d2VlbiB0d28gbm9kZXNcbiAgcHJlZmVyZW5jZTogJ21lZGlhbicsXG4gIC8vIHN1aXRhYmlsaXR5IG9mIGEgZGF0YSBwb2ludCB0byBzZXJ2ZSBhcyBhbiBleGVtcGxhclxuICBkYW1waW5nOiAwLjgsXG4gIC8vIGRhbXBpbmcgZmFjdG9yIGJldHdlZW4gWzAuNSwgMSlcbiAgbWF4SXRlcmF0aW9uczogMTAwMCxcbiAgLy8gbWF4IG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHJ1blxuICBtaW5JdGVyYXRpb25zOiAxMDAsXG4gIC8vIG1pbiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBydW4gaW4gb3JkZXIgZm9yIGNsdXN0ZXJpbmcgdG8gc3RvcFxuICBhdHRyaWJ1dGVzOiBbLy8gZnVuY3Rpb25zIHRvIHF1YW50aWZ5IHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYW55IHR3byBwb2ludHNcbiAgICAvLyBlLmcuIG5vZGUgPT4gbm9kZS5kYXRhKCd3ZWlnaHQnKVxuICBdXG59KTtcbnZhciBzZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHZhciBkbXAgPSBvcHRpb25zLmRhbXBpbmc7XG4gIHZhciBwcmVmID0gb3B0aW9ucy5wcmVmZXJlbmNlO1xuICBpZiAoISgwLjUgPD0gZG1wICYmIGRtcCA8IDEpKSB7XG4gICAgZXJyb3IoXCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6IFwiLmNvbmNhdChkbXApKTtcbiAgfVxuICB2YXIgdmFsaWRQcmVmcyA9IFsnbWVkaWFuJywgJ21lYW4nLCAnbWluJywgJ21heCddO1xuICBpZiAoISh2YWxpZFByZWZzLnNvbWUoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gcHJlZjtcbiAgfSkgfHwgbnVtYmVyJDEocHJlZikpKSB7XG4gICAgZXJyb3IoXCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFtcIi5jb25jYXQodmFsaWRQcmVmcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBcIidcIi5jb25jYXQocCwgXCInXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiXSBvciBhIG51bWJlci4gIEdvdDogXCIpLmNvbmNhdChwcmVmKSk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRzJDkob3B0aW9ucyk7XG59O1xuXG52YXIgZ2V0U2ltaWxhcml0eSA9IGZ1bmN0aW9uIGdldFNpbWlsYXJpdHkodHlwZSwgbjEsIG4yLCBhdHRyaWJ1dGVzKSB7XG4gIHZhciBhdHRyID0gZnVuY3Rpb24gYXR0cihuLCBpKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNbaV0obik7XG4gIH07XG5cbiAgLy8gbmIgbmVnYXRpdmUgYmVjYXVzZSBzaW1pbGFyaXR5IHNob3VsZCBoYXZlIGFuIGludmVyc2UgcmVsYXRpb25zaGlwIHRvIGRpc3RhbmNlXG4gIHJldHVybiAtY2x1c3RlcmluZ0Rpc3RhbmNlKHR5cGUsIGF0dHJpYnV0ZXMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBhdHRyKG4xLCBpKTtcbiAgfSwgZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gYXR0cihuMiwgaSk7XG4gIH0sIG4xLCBuMik7XG59O1xudmFyIGdldFByZWZlcmVuY2UgPSBmdW5jdGlvbiBnZXRQcmVmZXJlbmNlKFMsIHByZWZlcmVuY2UpIHtcbiAgLy8gbGFyZ2VyIHByZWZlcmVuY2UgPSBncmVhdGVyICMgb2YgY2x1c3RlcnNcbiAgdmFyIHAgPSBudWxsO1xuICBpZiAocHJlZmVyZW5jZSA9PT0gJ21lZGlhbicpIHtcbiAgICBwID0gbWVkaWFuKFMpO1xuICB9IGVsc2UgaWYgKHByZWZlcmVuY2UgPT09ICdtZWFuJykge1xuICAgIHAgPSBtZWFuKFMpO1xuICB9IGVsc2UgaWYgKHByZWZlcmVuY2UgPT09ICdtaW4nKSB7XG4gICAgcCA9IG1pbihTKTtcbiAgfSBlbHNlIGlmIChwcmVmZXJlbmNlID09PSAnbWF4Jykge1xuICAgIHAgPSBtYXgoUyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ3VzdG9tIHByZWZlcmVuY2UgbnVtYmVyLCBhcyBzZXQgYnkgdXNlclxuICAgIHAgPSBwcmVmZXJlbmNlO1xuICB9XG4gIHJldHVybiBwO1xufTtcbnZhciBmaW5kRXhlbXBsYXJzID0gZnVuY3Rpb24gZmluZEV4ZW1wbGFycyhuLCBSLCBBKSB7XG4gIHZhciBpbmRpY2VzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgaWYgKFJbaSAqIG4gKyBpXSArIEFbaSAqIG4gKyBpXSA+IDApIHtcbiAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZGljZXM7XG59O1xudmFyIGFzc2lnbkNsdXN0ZXJzID0gZnVuY3Rpb24gYXNzaWduQ2x1c3RlcnMobiwgUywgZXhlbXBsYXJzKSB7XG4gIHZhciBjbHVzdGVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIHZhciBtYXggPSAtSW5maW5pdHk7XG4gICAgZm9yICh2YXIgZWkgPSAwOyBlaSA8IGV4ZW1wbGFycy5sZW5ndGg7IGVpKyspIHtcbiAgICAgIHZhciBlID0gZXhlbXBsYXJzW2VpXTtcbiAgICAgIGlmIChTW2kgKiBuICsgZV0gPiBtYXgpIHtcbiAgICAgICAgaW5kZXggPSBlO1xuICAgICAgICBtYXggPSBTW2kgKiBuICsgZV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBfZWkgPSAwOyBfZWkgPCBleGVtcGxhcnMubGVuZ3RoOyBfZWkrKykge1xuICAgIGNsdXN0ZXJzW2V4ZW1wbGFyc1tfZWldXSA9IGV4ZW1wbGFyc1tfZWldO1xuICB9XG4gIHJldHVybiBjbHVzdGVycztcbn07XG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKG4sIFMsIGV4ZW1wbGFycykge1xuICB2YXIgY2x1c3RlcnMgPSBhc3NpZ25DbHVzdGVycyhuLCBTLCBleGVtcGxhcnMpO1xuICBmb3IgKHZhciBlaSA9IDA7IGVpIDwgZXhlbXBsYXJzLmxlbmd0aDsgZWkrKykge1xuICAgIHZhciBpaSA9IFtdO1xuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2x1c3RlcnMubGVuZ3RoOyBjKyspIHtcbiAgICAgIGlmIChjbHVzdGVyc1tjXSA9PT0gZXhlbXBsYXJzW2VpXSkge1xuICAgICAgICBpaS5wdXNoKGMpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbWF4SSA9IC0xO1xuICAgIHZhciBtYXhTdW0gPSAtSW5maW5pdHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpaS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGlpLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHN1bSArPSBTW2lpW2pdICogbiArIGlpW2ldXTtcbiAgICAgIH1cbiAgICAgIGlmIChzdW0gPiBtYXhTdW0pIHtcbiAgICAgICAgbWF4SSA9IGk7XG4gICAgICAgIG1heFN1bSA9IHN1bTtcbiAgICAgIH1cbiAgICB9XG4gICAgZXhlbXBsYXJzW2VpXSA9IGlpW21heEldO1xuICB9XG4gIGNsdXN0ZXJzID0gYXNzaWduQ2x1c3RlcnMobiwgUywgZXhlbXBsYXJzKTtcbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciBhZmZpbml0eVByb3BhZ2F0aW9uID0gZnVuY3Rpb24gYWZmaW5pdHlQcm9wYWdhdGlvbihvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgb3B0cyA9IHNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gTWFwIGVhY2ggbm9kZSB0byBpdHMgcG9zaXRpb24gaW4gbm9kZSBhcnJheVxuICB2YXIgaWQycG9zaXRpb24gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlkMnBvc2l0aW9uW25vZGVzW2ldLmlkKCldID0gaTtcbiAgfVxuXG4gIC8vIEJlZ2luIGFmZmluaXR5IHByb3BhZ2F0aW9uIGFsZ29yaXRobVxuXG4gIHZhciBuOyAvLyBudW1iZXIgb2YgZGF0YSBwb2ludHNcbiAgdmFyIG4yOyAvLyBzaXplIG9mIG1hdHJpY2VzXG4gIHZhciBTOyAvLyBzaW1pbGFyaXR5IG1hdHJpeCAoMUQgYXJyYXkpXG4gIHZhciBwOyAvLyBwcmVmZXJlbmNlL3N1aXRhYmlsaXR5IG9mIGEgZGF0YSBwb2ludCB0byBzZXJ2ZSBhcyBhbiBleGVtcGxhclxuICB2YXIgUjsgLy8gcmVzcG9uc2liaWxpdHkgbWF0cml4ICgxRCBhcnJheSlcbiAgdmFyIEE7IC8vIGF2YWlsYWJpbGl0eSBtYXRyaXggKDFEIGFycmF5KVxuXG4gIG4gPSBub2Rlcy5sZW5ndGg7XG4gIG4yID0gbiAqIG47XG5cbiAgLy8gSW5pdGlhbGl6ZSBhbmQgYnVpbGQgUyBzaW1pbGFyaXR5IG1hdHJpeFxuICBTID0gbmV3IEFycmF5KG4yKTtcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG4yOyBfaSsrKSB7XG4gICAgU1tfaV0gPSAtSW5maW5pdHk7IC8vIGZvciBjYXNlcyB3aGVyZSB0d28gZGF0YSBwb2ludHMgc2hvdWxkbid0IGJlIGxpbmtlZCB0b2dldGhlclxuICB9XG5cbiAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbjsgX2kyKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgaWYgKF9pMiAhPT0gaikge1xuICAgICAgICBTW19pMiAqIG4gKyBqXSA9IGdldFNpbWlsYXJpdHkob3B0cy5kaXN0YW5jZSwgbm9kZXNbX2kyXSwgbm9kZXNbal0sIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGxhY2UgcHJlZmVyZW5jZXMgb24gdGhlIGRpYWdvbmFsIG9mIFNcbiAgcCA9IGdldFByZWZlcmVuY2UoUywgb3B0cy5wcmVmZXJlbmNlKTtcbiAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbjsgX2kzKyspIHtcbiAgICBTW19pMyAqIG4gKyBfaTNdID0gcDtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgUiByZXNwb25zaWJpbGl0eSBtYXRyaXhcbiAgUiA9IG5ldyBBcnJheShuMik7XG4gIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG4yOyBfaTQrKykge1xuICAgIFJbX2k0XSA9IDAuMDtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgQSBhdmFpbGFiaWxpdHkgbWF0cml4XG4gIEEgPSBuZXcgQXJyYXkobjIpO1xuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBuMjsgX2k1KyspIHtcbiAgICBBW19pNV0gPSAwLjA7XG4gIH1cbiAgdmFyIG9sZCA9IG5ldyBBcnJheShuKTtcbiAgdmFyIFJwID0gbmV3IEFycmF5KG4pO1xuICB2YXIgc2UgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IG47IF9pNisrKSB7XG4gICAgb2xkW19pNl0gPSAwLjA7XG4gICAgUnBbX2k2XSA9IDAuMDtcbiAgICBzZVtfaTZdID0gMDtcbiAgfVxuICB2YXIgZSA9IG5ldyBBcnJheShuICogb3B0cy5taW5JdGVyYXRpb25zKTtcbiAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgZS5sZW5ndGg7IF9pNysrKSB7XG4gICAgZVtfaTddID0gMDtcbiAgfVxuICB2YXIgaXRlcjtcbiAgZm9yIChpdGVyID0gMDsgaXRlciA8IG9wdHMubWF4SXRlcmF0aW9uczsgaXRlcisrKSB7XG4gICAgLy8gbWFpbiBhbGdvcml0aG1pYyBsb29wXG5cbiAgICAvLyBVcGRhdGUgUiByZXNwb25zaWJpbGl0eSBtYXRyaXhcbiAgICBmb3IgKHZhciBfaTggPSAwOyBfaTggPCBuOyBfaTgrKykge1xuICAgICAgdmFyIG1heCA9IC1JbmZpbml0eSxcbiAgICAgICAgbWF4MiA9IC1JbmZpbml0eSxcbiAgICAgICAgbWF4SSA9IC0xLFxuICAgICAgICBBUyA9IDAuMDtcbiAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBuOyBfaisrKSB7XG4gICAgICAgIG9sZFtfal0gPSBSW19pOCAqIG4gKyBfal07XG4gICAgICAgIEFTID0gQVtfaTggKiBuICsgX2pdICsgU1tfaTggKiBuICsgX2pdO1xuICAgICAgICBpZiAoQVMgPj0gbWF4KSB7XG4gICAgICAgICAgbWF4MiA9IG1heDtcbiAgICAgICAgICBtYXggPSBBUztcbiAgICAgICAgICBtYXhJID0gX2o7XG4gICAgICAgIH0gZWxzZSBpZiAoQVMgPiBtYXgyKSB7XG4gICAgICAgICAgbWF4MiA9IEFTO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBfajIgPSAwOyBfajIgPCBuOyBfajIrKykge1xuICAgICAgICBSW19pOCAqIG4gKyBfajJdID0gKDEgLSBvcHRzLmRhbXBpbmcpICogKFNbX2k4ICogbiArIF9qMl0gLSBtYXgpICsgb3B0cy5kYW1waW5nICogb2xkW19qMl07XG4gICAgICB9XG4gICAgICBSW19pOCAqIG4gKyBtYXhJXSA9ICgxIC0gb3B0cy5kYW1waW5nKSAqIChTW19pOCAqIG4gKyBtYXhJXSAtIG1heDIpICsgb3B0cy5kYW1waW5nICogb2xkW21heEldO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBBIGF2YWlsYWJpbGl0eSBtYXRyaXhcbiAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCBuOyBfaTkrKykge1xuICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICBmb3IgKHZhciBfajMgPSAwOyBfajMgPCBuOyBfajMrKykge1xuICAgICAgICBvbGRbX2ozXSA9IEFbX2ozICogbiArIF9pOV07XG4gICAgICAgIFJwW19qM10gPSBNYXRoLm1heCgwLCBSW19qMyAqIG4gKyBfaTldKTtcbiAgICAgICAgc3VtICs9IFJwW19qM107XG4gICAgICB9XG4gICAgICBzdW0gLT0gUnBbX2k5XTtcbiAgICAgIFJwW19pOV0gPSBSW19pOSAqIG4gKyBfaTldO1xuICAgICAgc3VtICs9IFJwW19pOV07XG4gICAgICBmb3IgKHZhciBfajQgPSAwOyBfajQgPCBuOyBfajQrKykge1xuICAgICAgICBBW19qNCAqIG4gKyBfaTldID0gKDEgLSBvcHRzLmRhbXBpbmcpICogTWF0aC5taW4oMCwgc3VtIC0gUnBbX2o0XSkgKyBvcHRzLmRhbXBpbmcgKiBvbGRbX2o0XTtcbiAgICAgIH1cbiAgICAgIEFbX2k5ICogbiArIF9pOV0gPSAoMSAtIG9wdHMuZGFtcGluZykgKiAoc3VtIC0gUnBbX2k5XSkgKyBvcHRzLmRhbXBpbmcgKiBvbGRbX2k5XTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgY29udmVyZ2VuY2VcbiAgICB2YXIgSyA9IDA7XG4gICAgZm9yICh2YXIgX2kxMCA9IDA7IF9pMTAgPCBuOyBfaTEwKyspIHtcbiAgICAgIHZhciBFID0gQVtfaTEwICogbiArIF9pMTBdICsgUltfaTEwICogbiArIF9pMTBdID4gMCA/IDEgOiAwO1xuICAgICAgZVtpdGVyICUgb3B0cy5taW5JdGVyYXRpb25zICogbiArIF9pMTBdID0gRTtcbiAgICAgIEsgKz0gRTtcbiAgICB9XG4gICAgaWYgKEsgPiAwICYmIChpdGVyID49IG9wdHMubWluSXRlcmF0aW9ucyAtIDEgfHwgaXRlciA9PSBvcHRzLm1heEl0ZXJhdGlvbnMgLSAxKSkge1xuICAgICAgdmFyIF9zdW0gPSAwO1xuICAgICAgZm9yICh2YXIgX2kxMSA9IDA7IF9pMTEgPCBuOyBfaTExKyspIHtcbiAgICAgICAgc2VbX2kxMV0gPSAwO1xuICAgICAgICBmb3IgKHZhciBfajUgPSAwOyBfajUgPCBvcHRzLm1pbkl0ZXJhdGlvbnM7IF9qNSsrKSB7XG4gICAgICAgICAgc2VbX2kxMV0gKz0gZVtfajUgKiBuICsgX2kxMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlW19pMTFdID09PSAwIHx8IHNlW19pMTFdID09PSBvcHRzLm1pbkl0ZXJhdGlvbnMpIHtcbiAgICAgICAgICBfc3VtKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChfc3VtID09PSBuKSB7XG4gICAgICAgIC8vIHRoZW4gd2UgaGF2ZSBjb252ZXJnZW5jZVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZGVudGlmeSBleGVtcGxhcnMgKGNsdXN0ZXIgY2VudGVycylcbiAgdmFyIGV4ZW1wbGFyc0luZGljZXMgPSBmaW5kRXhlbXBsYXJzKG4sIFIsIEEpO1xuXG4gIC8vIEFzc2lnbiBub2RlcyB0byBjbHVzdGVyc1xuICB2YXIgY2x1c3RlckluZGljZXMgPSBhc3NpZ24obiwgUywgZXhlbXBsYXJzSW5kaWNlcyk7XG4gIHZhciBjbHVzdGVycyA9IHt9O1xuICBmb3IgKHZhciBjID0gMDsgYyA8IGV4ZW1wbGFyc0luZGljZXMubGVuZ3RoOyBjKyspIHtcbiAgICBjbHVzdGVyc1tleGVtcGxhcnNJbmRpY2VzW2NdXSA9IFtdO1xuICB9XG4gIGZvciAodmFyIF9pMTIgPSAwOyBfaTEyIDwgbm9kZXMubGVuZ3RoOyBfaTEyKyspIHtcbiAgICB2YXIgcG9zID0gaWQycG9zaXRpb25bbm9kZXNbX2kxMl0uaWQoKV07XG4gICAgdmFyIGNsdXN0ZXJJbmRleCA9IGNsdXN0ZXJJbmRpY2VzW3Bvc107XG4gICAgaWYgKGNsdXN0ZXJJbmRleCAhPSBudWxsKSB7XG4gICAgICAvLyB0aGUgbm9kZSBtYXkgaGF2ZSBub3QgYmVlbiBhc3NpZ25lZCBhIGNsdXN0ZXIgaWYgbm8gdmFsaWQgYXR0cmlidXRlcyB3ZXJlIHNwZWNpZmllZFxuICAgICAgY2x1c3RlcnNbY2x1c3RlckluZGV4XS5wdXNoKG5vZGVzW19pMTJdKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJldENsdXN0ZXJzID0gbmV3IEFycmF5KGV4ZW1wbGFyc0luZGljZXMubGVuZ3RoKTtcbiAgZm9yICh2YXIgX2MgPSAwOyBfYyA8IGV4ZW1wbGFyc0luZGljZXMubGVuZ3RoOyBfYysrKSB7XG4gICAgcmV0Q2x1c3RlcnNbX2NdID0gY3kuY29sbGVjdGlvbihjbHVzdGVyc1tleGVtcGxhcnNJbmRpY2VzW19jXV0pO1xuICB9XG4gIHJldHVybiByZXRDbHVzdGVycztcbn07XG52YXIgYWZmaW5pdHlQcm9wYWdhdGlvbiQxID0ge1xuICBhZmZpbml0eVByb3BhZ2F0aW9uOiBhZmZpbml0eVByb3BhZ2F0aW9uLFxuICBhcDogYWZmaW5pdHlQcm9wYWdhdGlvblxufTtcblxudmFyIGhpZXJob2x6ZXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICByb290OiB1bmRlZmluZWQsXG4gIGRpcmVjdGVkOiBmYWxzZVxufSk7XG52YXIgZWxlc2ZuJGsgPSB7XG4gIGhpZXJob2x6ZXI6IGZ1bmN0aW9uIGhpZXJob2x6ZXIob3B0aW9ucykge1xuICAgIGlmICghcGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgcm9vdDogYXJnc1swXSxcbiAgICAgICAgZGlyZWN0ZWQ6IGFyZ3NbMV1cbiAgICAgIH07XG4gICAgfVxuICAgIHZhciBfaGllcmhvbHplckRlZmF1bHRzID0gaGllcmhvbHplckRlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgcm9vdCA9IF9oaWVyaG9semVyRGVmYXVsdHMucm9vdCxcbiAgICAgIGRpcmVjdGVkID0gX2hpZXJob2x6ZXJEZWZhdWx0cy5kaXJlY3RlZDtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGRmbGFnID0gZmFsc2U7XG4gICAgdmFyIG9kZEluO1xuICAgIHZhciBvZGRPdXQ7XG4gICAgdmFyIHN0YXJ0VmVydGV4O1xuICAgIGlmIChyb290KSBzdGFydFZlcnRleCA9IHN0cmluZyhyb290KSA/IHRoaXMuZmlsdGVyKHJvb3QpWzBdLmlkKCkgOiByb290WzBdLmlkKCk7XG4gICAgdmFyIG5vZGVzID0ge307XG4gICAgdmFyIGVkZ2VzID0ge307XG4gICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgIHZhciBpbmQgPSBlbGUuaW5kZWdyZWUodHJ1ZSk7XG4gICAgICAgICAgdmFyIG91dGQgPSBlbGUub3V0ZGVncmVlKHRydWUpO1xuICAgICAgICAgIHZhciBkMSA9IGluZCAtIG91dGQ7XG4gICAgICAgICAgdmFyIGQyID0gb3V0ZCAtIGluZDtcbiAgICAgICAgICBpZiAoZDEgPT0gMSkge1xuICAgICAgICAgICAgaWYgKG9kZEluKSBkZmxhZyA9IHRydWU7ZWxzZSBvZGRJbiA9IGlkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZDIgPT0gMSkge1xuICAgICAgICAgICAgaWYgKG9kZE91dCkgZGZsYWcgPSB0cnVlO2Vsc2Ugb2RkT3V0ID0gaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChkMiA+IDEgfHwgZDEgPiAxKSB7XG4gICAgICAgICAgICBkZmxhZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGVzW2lkXSA9IFtdO1xuICAgICAgICAgIGVsZS5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmlzRWRnZSgpKSBub2Rlc1tpZF0ucHVzaChlLmlkKCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkZ2VzW2lkXSA9IFt1bmRlZmluZWQsIGVsZS50YXJnZXQoKS5pZCgpXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgICAgdmFyIGQgPSBlbGUuZGVncmVlKHRydWUpO1xuICAgICAgICAgIGlmIChkICUgMikge1xuICAgICAgICAgICAgaWYgKCFvZGRJbikgb2RkSW4gPSBpZDtlbHNlIGlmICghb2RkT3V0KSBvZGRPdXQgPSBpZDtlbHNlIGRmbGFnID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZXNbaWRdID0gW107XG4gICAgICAgICAgZWxlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzW2lkXS5wdXNoKGUuaWQoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRnZXNbaWRdID0gW2VsZS5zb3VyY2UoKS5pZCgpLCBlbGUudGFyZ2V0KCkuaWQoKV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgdHJhaWw6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgaWYgKGRmbGFnKSByZXR1cm4gcmVzdWx0O2Vsc2UgaWYgKG9kZE91dCAmJiBvZGRJbikge1xuICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgIGlmIChzdGFydFZlcnRleCAmJiBvZGRPdXQgIT0gc3RhcnRWZXJ0ZXgpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0VmVydGV4ID0gb2RkT3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXJ0VmVydGV4ICYmIG9kZE91dCAhPSBzdGFydFZlcnRleCAmJiBvZGRJbiAhPSBzdGFydFZlcnRleCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0YXJ0VmVydGV4KSB7XG4gICAgICAgICAgc3RhcnRWZXJ0ZXggPSBvZGRPdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzdGFydFZlcnRleCkgc3RhcnRWZXJ0ZXggPSBlbGVzWzBdLmlkKCk7XG4gICAgfVxuICAgIHZhciB3YWxrID0gZnVuY3Rpb24gd2Fsayh2KSB7XG4gICAgICB2YXIgY3VycmVudE5vZGUgPSB2O1xuICAgICAgdmFyIHN1YnRvdXIgPSBbdl07XG4gICAgICB2YXIgYWRqLCBhZGpUYWlsLCBhZGpIZWFkO1xuICAgICAgd2hpbGUgKG5vZGVzW2N1cnJlbnROb2RlXS5sZW5ndGgpIHtcbiAgICAgICAgYWRqID0gbm9kZXNbY3VycmVudE5vZGVdLnNoaWZ0KCk7XG4gICAgICAgIGFkalRhaWwgPSBlZGdlc1thZGpdWzBdO1xuICAgICAgICBhZGpIZWFkID0gZWRnZXNbYWRqXVsxXTtcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGFkakhlYWQpIHtcbiAgICAgICAgICBub2Rlc1thZGpIZWFkXSA9IG5vZGVzW2FkakhlYWRdLmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgIT0gYWRqO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gYWRqSGVhZDtcbiAgICAgICAgfSBlbHNlIGlmICghZGlyZWN0ZWQgJiYgY3VycmVudE5vZGUgIT0gYWRqVGFpbCkge1xuICAgICAgICAgIG5vZGVzW2FkalRhaWxdID0gbm9kZXNbYWRqVGFpbF0uZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSAhPSBhZGo7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSBhZGpUYWlsO1xuICAgICAgICB9XG4gICAgICAgIHN1YnRvdXIudW5zaGlmdChhZGopO1xuICAgICAgICBzdWJ0b3VyLnVuc2hpZnQoY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnRvdXI7XG4gICAgfTtcbiAgICB2YXIgdHJhaWwgPSBbXTtcbiAgICB2YXIgc3VidG91ciA9IFtdO1xuICAgIHN1YnRvdXIgPSB3YWxrKHN0YXJ0VmVydGV4KTtcbiAgICB3aGlsZSAoc3VidG91ci5sZW5ndGggIT0gMSkge1xuICAgICAgaWYgKG5vZGVzW3N1YnRvdXJbMF1dLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRyYWlsLnVuc2hpZnQoZWxlcy5nZXRFbGVtZW50QnlJZChzdWJ0b3VyLnNoaWZ0KCkpKTtcbiAgICAgICAgdHJhaWwudW5zaGlmdChlbGVzLmdldEVsZW1lbnRCeUlkKHN1YnRvdXIuc2hpZnQoKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VidG91ciA9IHdhbGsoc3VidG91ci5zaGlmdCgpKS5jb25jYXQoc3VidG91cik7XG4gICAgICB9XG4gICAgfVxuICAgIHRyYWlsLnVuc2hpZnQoZWxlcy5nZXRFbGVtZW50QnlJZChzdWJ0b3VyLnNoaWZ0KCkpKTsgLy8gZmluYWwgbm9kZVxuXG4gICAgZm9yICh2YXIgZCBpbiBub2Rlcykge1xuICAgICAgaWYgKG5vZGVzW2RdLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZm91bmQgPSB0cnVlO1xuICAgIHJlc3VsdC50cmFpbCA9IHRoaXMuc3Bhd24odHJhaWwsIHRydWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbnZhciBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkID0gZnVuY3Rpb24gaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCgpIHtcbiAgdmFyIGVsZXMgPSB0aGlzO1xuICB2YXIgbm9kZXMgPSB7fTtcbiAgdmFyIGlkID0gMDtcbiAgdmFyIGVkZ2VDb3VudCA9IDA7XG4gIHZhciBjb21wb25lbnRzID0gW107XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgdmlzaXRlZEVkZ2VzID0ge307XG4gIHZhciBidWlsZENvbXBvbmVudCA9IGZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50KHgsIHkpIHtcbiAgICB2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgdmFyIGN1dHNldCA9IFtdO1xuICAgIHZhciBjb21wb25lbnQgPSBlbGVzLnNwYXduKCk7XG4gICAgd2hpbGUgKHN0YWNrW2ldLnggIT0geCB8fCBzdGFja1tpXS55ICE9IHkpIHtcbiAgICAgIGN1dHNldC5wdXNoKHN0YWNrLnBvcCgpLmVkZ2UpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBjdXRzZXQucHVzaChzdGFjay5wb3AoKS5lZGdlKTtcbiAgICBjdXRzZXQuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgdmFyIGNvbm5lY3RlZE5vZGVzID0gZWRnZS5jb25uZWN0ZWROb2RlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICAgIGNvbXBvbmVudC5tZXJnZShlZGdlKTtcbiAgICAgIGNvbm5lY3RlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGUuaWQoKTtcbiAgICAgICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICAgICAgY29tcG9uZW50Lm1lcmdlKG5vZGUpO1xuICAgICAgICBpZiAoIW5vZGVzW25vZGVJZF0uY3V0VmVydGV4KSB7XG4gICAgICAgICAgY29tcG9uZW50Lm1lcmdlKGNvbm5lY3RlZEVkZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wb25lbnQubWVyZ2UoY29ubmVjdGVkRWRnZXMuZmlsdGVyKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWRnZS5pc0xvb3AoKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICB9O1xuICB2YXIgYmljb25uZWN0ZWRTZWFyY2ggPSBmdW5jdGlvbiBiaWNvbm5lY3RlZFNlYXJjaChyb290LCBjdXJyZW50Tm9kZSwgcGFyZW50KSB7XG4gICAgaWYgKHJvb3QgPT09IHBhcmVudCkgZWRnZUNvdW50ICs9IDE7XG4gICAgbm9kZXNbY3VycmVudE5vZGVdID0ge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbG93OiBpZCsrLFxuICAgICAgY3V0VmVydGV4OiBmYWxzZVxuICAgIH07XG4gICAgdmFyIGVkZ2VzID0gZWxlcy5nZXRFbGVtZW50QnlJZChjdXJyZW50Tm9kZSkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZWxlcyk7XG4gICAgaWYgKGVkZ2VzLnNpemUoKSA9PT0gMCkge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGVsZXMuc3Bhd24oZWxlcy5nZXRFbGVtZW50QnlJZChjdXJyZW50Tm9kZSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNvdXJjZUlkLCB0YXJnZXRJZCwgb3RoZXJOb2RlSWQsIGVkZ2VJZDtcbiAgICAgIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgc291cmNlSWQgPSBlZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICAgIHRhcmdldElkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgICBvdGhlck5vZGVJZCA9IHNvdXJjZUlkID09PSBjdXJyZW50Tm9kZSA/IHRhcmdldElkIDogc291cmNlSWQ7XG4gICAgICAgIGlmIChvdGhlck5vZGVJZCAhPT0gcGFyZW50KSB7XG4gICAgICAgICAgZWRnZUlkID0gZWRnZS5pZCgpO1xuICAgICAgICAgIGlmICghdmlzaXRlZEVkZ2VzW2VkZ2VJZF0pIHtcbiAgICAgICAgICAgIHZpc2l0ZWRFZGdlc1tlZGdlSWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICB4OiBjdXJyZW50Tm9kZSxcbiAgICAgICAgICAgICAgeTogb3RoZXJOb2RlSWQsXG4gICAgICAgICAgICAgIGVkZ2U6IGVkZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShvdGhlck5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICAgIGJpY29ubmVjdGVkU2VhcmNoKHJvb3QsIG90aGVyTm9kZUlkLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBub2Rlc1tjdXJyZW50Tm9kZV0ubG93ID0gTWF0aC5taW4obm9kZXNbY3VycmVudE5vZGVdLmxvdywgbm9kZXNbb3RoZXJOb2RlSWRdLmxvdyk7XG4gICAgICAgICAgICBpZiAobm9kZXNbY3VycmVudE5vZGVdLmlkIDw9IG5vZGVzW290aGVyTm9kZUlkXS5sb3cpIHtcbiAgICAgICAgICAgICAgbm9kZXNbY3VycmVudE5vZGVdLmN1dFZlcnRleCA9IHRydWU7XG4gICAgICAgICAgICAgIGJ1aWxkQ29tcG9uZW50KGN1cnJlbnROb2RlLCBvdGhlck5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzW2N1cnJlbnROb2RlXS5sb3cgPSBNYXRoLm1pbihub2Rlc1tjdXJyZW50Tm9kZV0ubG93LCBub2Rlc1tvdGhlck5vZGVJZF0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgIHZhciBub2RlSWQgPSBlbGUuaWQoKTtcbiAgICAgIGlmICghKG5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgZWRnZUNvdW50ID0gMDtcbiAgICAgICAgYmljb25uZWN0ZWRTZWFyY2gobm9kZUlkLCBub2RlSWQpO1xuICAgICAgICBub2Rlc1tub2RlSWRdLmN1dFZlcnRleCA9IGVkZ2VDb3VudCA+IDE7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIGN1dFZlcnRpY2VzID0gT2JqZWN0LmtleXMobm9kZXMpLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gbm9kZXNbaWRdLmN1dFZlcnRleDtcbiAgfSkubWFwKGZ1bmN0aW9uIChpZCkge1xuICAgIHJldHVybiBlbGVzLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY3V0OiBlbGVzLnNwYXduKGN1dFZlcnRpY2VzKSxcbiAgICBjb21wb25lbnRzOiBjb21wb25lbnRzXG4gIH07XG59O1xudmFyIGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQkMSA9IHtcbiAgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCxcbiAgaHRiYzogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCxcbiAgaHRiOiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkLFxuICBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZFxufTtcblxudmFyIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkID0gZnVuY3Rpb24gdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQoKSB7XG4gIHZhciBlbGVzID0gdGhpcztcbiAgdmFyIG5vZGVzID0ge307XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBjb21wb25lbnRzID0gW107XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgY3V0ID0gZWxlcy5zcGF3bihlbGVzKTtcbiAgdmFyIHN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoID0gZnVuY3Rpb24gc3Ryb25nbHlDb25uZWN0ZWRTZWFyY2goc291cmNlTm9kZUlkKSB7XG4gICAgc3RhY2sucHVzaChzb3VyY2VOb2RlSWQpO1xuICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0gPSB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBsb3c6IGluZGV4KyssXG4gICAgICBleHBsb3JlZDogZmFsc2VcbiAgICB9O1xuICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IGVsZXMuZ2V0RWxlbWVudEJ5SWQoc291cmNlTm9kZUlkKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICBjb25uZWN0ZWRFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICB2YXIgdGFyZ2V0Tm9kZUlkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgaWYgKHRhcmdldE5vZGVJZCAhPT0gc291cmNlTm9kZUlkKSB7XG4gICAgICAgIGlmICghKHRhcmdldE5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICBzdHJvbmdseUNvbm5lY3RlZFNlYXJjaCh0YXJnZXROb2RlSWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbm9kZXNbdGFyZ2V0Tm9kZUlkXS5leHBsb3JlZCkge1xuICAgICAgICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0ubG93ID0gTWF0aC5taW4obm9kZXNbc291cmNlTm9kZUlkXS5sb3csIG5vZGVzW3RhcmdldE5vZGVJZF0ubG93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChub2Rlc1tzb3VyY2VOb2RlSWRdLmluZGV4ID09PSBub2Rlc1tzb3VyY2VOb2RlSWRdLmxvdykge1xuICAgICAgdmFyIGNvbXBvbmVudE5vZGVzID0gZWxlcy5zcGF3bigpO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICB2YXIgbm9kZUlkID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbXBvbmVudE5vZGVzLm1lcmdlKGVsZXMuZ2V0RWxlbWVudEJ5SWQobm9kZUlkKSk7XG4gICAgICAgIG5vZGVzW25vZGVJZF0ubG93ID0gbm9kZXNbc291cmNlTm9kZUlkXS5pbmRleDtcbiAgICAgICAgbm9kZXNbbm9kZUlkXS5leHBsb3JlZCA9IHRydWU7XG4gICAgICAgIGlmIChub2RlSWQgPT09IHNvdXJjZU5vZGVJZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY29tcG9uZW50RWRnZXMgPSBjb21wb25lbnROb2Rlcy5lZGdlc1dpdGgoY29tcG9uZW50Tm9kZXMpO1xuICAgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudE5vZGVzLm1lcmdlKGNvbXBvbmVudEVkZ2VzKTtcbiAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgY3V0ID0gY3V0LmRpZmZlcmVuY2UoY29tcG9uZW50KTtcbiAgICB9XG4gIH07XG4gIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgdmFyIG5vZGVJZCA9IGVsZS5pZCgpO1xuICAgICAgaWYgKCEobm9kZUlkIGluIG5vZGVzKSkge1xuICAgICAgICBzdHJvbmdseUNvbm5lY3RlZFNlYXJjaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY3V0OiBjdXQsXG4gICAgY29tcG9uZW50czogY29tcG9uZW50c1xuICB9O1xufTtcbnZhciB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCQxID0ge1xuICB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZDogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQsXG4gIHRzYzogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQsXG4gIHRzY2M6IHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkLFxuICB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHM6IHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkXG59O1xuXG52YXIgZWxlc2ZuJGogPSB7fTtcbltlbGVzZm4kdiwgZWxlc2ZuJHUsIGVsZXNmbiR0LCBlbGVzZm4kcywgZWxlc2ZuJHIsIGVsZXNmbiRxLCBlbGVzZm4kcCwgZWxlc2ZuJG8sIGVsZXNmbiRuLCBlbGVzZm4kbSwgZWxlc2ZuJGwsIG1hcmtvdkNsdXN0ZXJpbmckMSwga0NsdXN0ZXJpbmcsIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmckMSwgYWZmaW5pdHlQcm9wYWdhdGlvbiQxLCBlbGVzZm4kaywgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCQxLCB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoZWxlc2ZuJGosIHByb3BzKTtcbn0pO1xuXG4vKiFcbkVtYmVkZGFibGUgTWluaW11bSBTdHJpY3RseS1Db21wbGlhbnQgUHJvbWlzZXMvQSsgMS4xLjEgVGhlbmFibGVcbkNvcHlyaWdodCAoYykgMjAxMy0yMDE0IFJhbGYgUy4gRW5nZWxzY2hhbGwgKGh0dHA6Ly9lbmdlbHNjaGFsbC5jb20pXG5MaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpXG4qL1xuXG4vKiAgcHJvbWlzZSBzdGF0ZXMgW1Byb21pc2VzL0ErIDIuMV0gICovXG52YXIgU1RBVEVfUEVORElORyA9IDA7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjFdICAqL1xudmFyIFNUQVRFX0ZVTEZJTExFRCA9IDE7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjJdICAqL1xudmFyIFNUQVRFX1JFSkVDVEVEID0gMjsgLyogIFtQcm9taXNlcy9BKyAyLjEuM10gICovXG5cbi8qICBwcm9taXNlIG9iamVjdCBjb25zdHJ1Y3RvciAgKi9cbnZhciBhcGkgPSBmdW5jdGlvbiBhcGkoZXhlY3V0b3IpIHtcbiAgLyogIG9wdGlvbmFsbHkgc3VwcG9ydCBub24tY29uc3RydWN0b3IvcGxhaW4tZnVuY3Rpb24gY2FsbCAgKi9cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGFwaSkpIHJldHVybiBuZXcgYXBpKGV4ZWN1dG9yKTtcblxuICAvKiAgaW5pdGlhbGl6ZSBvYmplY3QgICovXG4gIHRoaXMuaWQgPSAnVGhlbmFibGUvMS4wLjcnO1xuICB0aGlzLnN0YXRlID0gU1RBVEVfUEVORElORzsgLyogIGluaXRpYWwgc3RhdGUgICovXG4gIHRoaXMuZnVsZmlsbFZhbHVlID0gdW5kZWZpbmVkOyAvKiAgaW5pdGlhbCB2YWx1ZSAgKi8gLyogIFtQcm9taXNlcy9BKyAxLjMsIDIuMS4yLjJdICAqL1xuICB0aGlzLnJlamVjdFJlYXNvbiA9IHVuZGVmaW5lZDsgLyogIGluaXRpYWwgcmVhc29uICovIC8qICBbUHJvbWlzZXMvQSsgMS41LCAyLjEuMy4yXSAgKi9cbiAgdGhpcy5vbkZ1bGZpbGxlZCA9IFtdOyAvKiAgaW5pdGlhbCBoYW5kbGVycyAgKi9cbiAgdGhpcy5vblJlamVjdGVkID0gW107IC8qICBpbml0aWFsIGhhbmRsZXJzICAqL1xuXG4gIC8qICBwcm92aWRlIG9wdGlvbmFsIGluZm9ybWF0aW9uLWhpZGluZyBwcm94eSAgKi9cbiAgdGhpcy5wcm94eSA9IHtcbiAgICB0aGVuOiB0aGlzLnRoZW4uYmluZCh0aGlzKVxuICB9O1xuXG4gIC8qICBzdXBwb3J0IG9wdGlvbmFsIGV4ZWN1dG9yIGZ1bmN0aW9uICAqL1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yID09PSAnZnVuY3Rpb24nKSBleGVjdXRvci5jYWxsKHRoaXMsIHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLCB0aGlzLnJlamVjdC5iaW5kKHRoaXMpKTtcbn07XG5cbi8qICBwcm9taXNlIEFQSSBtZXRob2RzICAqL1xuYXBpLnByb3RvdHlwZSA9IHtcbiAgLyogIHByb21pc2UgcmVzb2x2aW5nIG1ldGhvZHMgICovXG4gIGZ1bGZpbGw6IGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHtcbiAgICByZXR1cm4gZGVsaXZlcih0aGlzLCBTVEFURV9GVUxGSUxMRUQsICdmdWxmaWxsVmFsdWUnLCB2YWx1ZSk7XG4gIH0sXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXIodGhpcywgU1RBVEVfUkVKRUNURUQsICdyZWplY3RSZWFzb24nLCB2YWx1ZSk7XG4gIH0sXG4gIC8qICBcIlRoZSB0aGVuIE1ldGhvZFwiIFtQcm9taXNlcy9BKyAxLjEsIDEuMiwgMi4yXSAgKi9cbiAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBjdXJyID0gdGhpcztcbiAgICB2YXIgbmV4dCA9IG5ldyBhcGkoKTsgLyogIFtQcm9taXNlcy9BKyAyLjIuN10gICovXG4gICAgY3Vyci5vbkZ1bGZpbGxlZC5wdXNoKHJlc29sdmVyKG9uRnVsZmlsbGVkLCBuZXh0LCAnZnVsZmlsbCcpKTsgLyogIFtQcm9taXNlcy9BKyAyLjIuMi8yLjIuNl0gICovXG4gICAgY3Vyci5vblJlamVjdGVkLnB1c2gocmVzb2x2ZXIob25SZWplY3RlZCwgbmV4dCwgJ3JlamVjdCcpKTsgLyogIFtQcm9taXNlcy9BKyAyLjIuMy8yLjIuNl0gICovXG4gICAgZXhlY3V0ZShjdXJyKTtcbiAgICByZXR1cm4gbmV4dC5wcm94eTsgLyogIFtQcm9taXNlcy9BKyAyLjIuNywgMy4zXSAgKi9cbiAgfVxufTtcblxuLyogIGRlbGl2ZXIgYW4gYWN0aW9uICAqL1xudmFyIGRlbGl2ZXIgPSBmdW5jdGlvbiBkZWxpdmVyKGN1cnIsIHN0YXRlLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAoY3Vyci5zdGF0ZSA9PT0gU1RBVEVfUEVORElORykge1xuICAgIGN1cnIuc3RhdGUgPSBzdGF0ZTsgLyogIFtQcm9taXNlcy9BKyAyLjEuMi4xLCAyLjEuMy4xXSAgKi9cbiAgICBjdXJyW25hbWVdID0gdmFsdWU7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjIuMiwgMi4xLjMuMl0gICovXG4gICAgZXhlY3V0ZShjdXJyKTtcbiAgfVxuICByZXR1cm4gY3Vycjtcbn07XG5cbi8qICBleGVjdXRlIGFsbCBoYW5kbGVycyAgKi9cbnZhciBleGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZShjdXJyKSB7XG4gIGlmIChjdXJyLnN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpIGV4ZWN1dGVfaGFuZGxlcnMoY3VyciwgJ29uRnVsZmlsbGVkJywgY3Vyci5mdWxmaWxsVmFsdWUpO2Vsc2UgaWYgKGN1cnIuc3RhdGUgPT09IFNUQVRFX1JFSkVDVEVEKSBleGVjdXRlX2hhbmRsZXJzKGN1cnIsICdvblJlamVjdGVkJywgY3Vyci5yZWplY3RSZWFzb24pO1xufTtcblxuLyogIGV4ZWN1dGUgcGFydGljdWxhciBzZXQgb2YgaGFuZGxlcnMgICovXG52YXIgZXhlY3V0ZV9oYW5kbGVycyA9IGZ1bmN0aW9uIGV4ZWN1dGVfaGFuZGxlcnMoY3VyciwgbmFtZSwgdmFsdWUpIHtcbiAgLyogZ2xvYmFsIHNldEltbWVkaWF0ZTogdHJ1ZSAqL1xuICAvKiBnbG9iYWwgc2V0VGltZW91dDogdHJ1ZSAqL1xuXG4gIC8qICBzaG9ydC1jaXJjdWl0IHByb2Nlc3NpbmcgICovXG4gIGlmIChjdXJyW25hbWVdLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIC8qICBpdGVyYXRlIG92ZXIgYWxsIGhhbmRsZXJzLCBleGFjdGx5IG9uY2UgICovXG4gIHZhciBoYW5kbGVycyA9IGN1cnJbbmFtZV07XG4gIGN1cnJbbmFtZV0gPSBbXTsgLyogIFtQcm9taXNlcy9BKyAyLjIuMi4zLCAyLjIuMy4zXSAgKi9cbiAgdmFyIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXJzW2ldKHZhbHVlKTtcbiAgICB9IC8qICBbUHJvbWlzZXMvQSsgMi4yLjVdICAqL1xuICB9O1xuXG4gIC8qICBleGVjdXRlIHByb2NlZHVyZSBhc3luY2hyb25vdXNseSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjIuNCwgMy4xXSAgKi9cbiAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHNldEltbWVkaWF0ZShmdW5jKTtlbHNlIHNldFRpbWVvdXQoZnVuYywgMCk7XG59O1xuXG4vKiAgZ2VuZXJhdGUgYSByZXNvbHZlciBmdW5jdGlvbiAgKi9cbnZhciByZXNvbHZlciA9IGZ1bmN0aW9uIHJlc29sdmVyKGNiLCBuZXh0LCBtZXRob2QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIC8qICBbUHJvbWlzZXMvQSsgMi4yLjEsIDIuMi43LjMsIDIuMi43LjRdICAqL1xuICAgICAgbmV4dFttZXRob2RdLmNhbGwobmV4dCwgdmFsdWUpOyAvKiAgW1Byb21pc2VzL0ErIDIuMi43LjMsIDIuMi43LjRdICAqL2Vsc2Uge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNiKHZhbHVlKTtcbiAgICAgIH0gLyogIFtQcm9taXNlcy9BKyAyLjIuMi4xLCAyLjIuMy4xLCAyLjIuNSwgMy4yXSAgKi8gY2F0Y2ggKGUpIHtcbiAgICAgICAgbmV4dC5yZWplY3QoZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjcuMl0gICovXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobmV4dCwgcmVzdWx0KTsgLyogIFtQcm9taXNlcy9BKyAyLjIuNy4xXSAgKi9cbiAgICB9XG4gIH07XG59O1xuXG4vKiAgXCJQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlXCIgICovIC8qICBbUHJvbWlzZXMvQSsgMi4zXSAgKi9cbnZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShwcm9taXNlLCB4KSB7XG4gIC8qICBzYW5pdHkgY2hlY2sgYXJndW1lbnRzICAqLyAvKiAgW1Byb21pc2VzL0ErIDIuMy4xXSAgKi9cbiAgaWYgKHByb21pc2UgPT09IHggfHwgcHJvbWlzZS5wcm94eSA9PT0geCkge1xuICAgIHByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyogIHN1cmdpY2FsbHkgY2hlY2sgZm9yIGEgXCJ0aGVuXCIgbWV0aG9kXG4gICAgKG1haW5seSB0byBqdXN0IGNhbGwgdGhlIFwiZ2V0dGVyXCIgb2YgXCJ0aGVuXCIgb25seSBvbmNlKSAgKi9cbiAgdmFyIHRoZW47XG4gIGlmIChfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoZW4gPSB4LnRoZW47XG4gICAgfSAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjEsIDMuNV0gICovIGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnJlamVjdChlKTsgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4yXSAgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiAgaGFuZGxlIG93biBUaGVuYWJsZXMgICAgW1Byb21pc2VzL0ErIDIuMy4yXVxuICAgIGFuZCBzaW1pbGFyIFwidGhlbmFibGVzXCIgW1Byb21pc2VzL0ErIDIuMy4zXSAgKi9cbiAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc29sdmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIC8qICBjYWxsIHJldHJpZXZlZCBcInRoZW5cIiBtZXRob2QgKi8gLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zXSAgKi9cbiAgICAgIHRoZW4uY2FsbCh4LCAvKiAgcmVzb2x2ZVByb21pc2UgICovIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4xXSAgKi9cbiAgICAgIGZ1bmN0aW9uICh5KSB7XG4gICAgICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICByZXNvbHZlZCA9IHRydWU7IC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cbiAgICAgICAgaWYgKHkgPT09IHgpIC8qICBbUHJvbWlzZXMvQSsgMy42XSAgKi9cbiAgICAgICAgICBwcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdjaXJjdWxhciB0aGVuYWJsZSBjaGFpbicpKTtlbHNlIHJlc29sdmUocHJvbWlzZSwgeSk7XG4gICAgICB9LCAvKiAgcmVqZWN0UHJvbWlzZSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjJdICAqL1xuICAgICAgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm47XG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZTsgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjNdICAqL1xuICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghcmVzb2x2ZWQpIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cbiAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy40XSAgKi9cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvKiAgaGFuZGxlIG90aGVyIHZhbHVlcyAgKi9cbiAgcHJvbWlzZS5mdWxmaWxsKHgpOyAvKiAgW1Byb21pc2VzL0ErIDIuMy40LCAyLjMuMy40XSAgKi9cbn07XG5cbi8vIHNvIHdlIGFsd2F5cyBoYXZlIFByb21pc2UuYWxsKClcbmFwaS5hbGwgPSBmdW5jdGlvbiAocHMpIHtcbiAgcmV0dXJuIG5ldyBhcGkoZnVuY3Rpb24gKHJlc29sdmVBbGwsIHJlamVjdEFsbCkge1xuICAgIHZhciB2YWxzID0gbmV3IEFycmF5KHBzLmxlbmd0aCk7XG4gICAgdmFyIGRvbmVDb3VudCA9IDA7XG4gICAgdmFyIGZ1bGZpbGwgPSBmdW5jdGlvbiBmdWxmaWxsKGksIHZhbCkge1xuICAgICAgdmFsc1tpXSA9IHZhbDtcbiAgICAgIGRvbmVDb3VudCsrO1xuICAgICAgaWYgKGRvbmVDb3VudCA9PT0gcHMubGVuZ3RoKSB7XG4gICAgICAgIHJlc29sdmVBbGwodmFscyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIHAgPSBwc1tpXTtcbiAgICAgICAgdmFyIGlzUHJvbWlzZSA9IHAgIT0gbnVsbCAmJiBwLnRoZW4gIT0gbnVsbDtcbiAgICAgICAgaWYgKGlzUHJvbWlzZSkge1xuICAgICAgICAgIHAudGhlbihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBmdWxmaWxsKGksIHZhbCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmVqZWN0QWxsKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHA7XG4gICAgICAgICAgZnVsZmlsbChpLCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KShpKTtcbiAgICB9XG4gIH0pO1xufTtcbmFwaS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gbmV3IGFwaShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzb2x2ZSh2YWwpO1xuICB9KTtcbn07XG5hcGkucmVqZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gbmV3IGFwaShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVqZWN0KHZhbCk7XG4gIH0pO1xufTtcbnZhciBQcm9taXNlJDEgPSB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgPyBQcm9taXNlIDogYXBpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbnZhciBBbmltYXRpb24gPSBmdW5jdGlvbiBBbmltYXRpb24odGFyZ2V0LCBvcHRzLCBvcHRzMikge1xuICB2YXIgaXNDb3JlID0gY29yZSh0YXJnZXQpO1xuICB2YXIgaXNFbGUgPSAhaXNDb3JlO1xuICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0gZXh0ZW5kKHtcbiAgICBkdXJhdGlvbjogMTAwMFxuICB9LCBvcHRzLCBvcHRzMik7XG4gIF9wLnRhcmdldCA9IHRhcmdldDtcbiAgX3Auc3R5bGUgPSBfcC5zdHlsZSB8fCBfcC5jc3M7XG4gIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgX3AucGxheWluZyA9IGZhbHNlO1xuICBfcC5ob29rZWQgPSBmYWxzZTtcbiAgX3AuYXBwbHlpbmcgPSBmYWxzZTtcbiAgX3AucHJvZ3Jlc3MgPSAwO1xuICBfcC5jb21wbGV0ZXMgPSBbXTtcbiAgX3AuZnJhbWVzID0gW107XG4gIGlmIChfcC5jb21wbGV0ZSAmJiBmbiQ2KF9wLmNvbXBsZXRlKSkge1xuICAgIF9wLmNvbXBsZXRlcy5wdXNoKF9wLmNvbXBsZXRlKTtcbiAgfVxuICBpZiAoaXNFbGUpIHtcbiAgICB2YXIgcG9zID0gdGFyZ2V0LnBvc2l0aW9uKCk7XG4gICAgX3Auc3RhcnRQb3NpdGlvbiA9IF9wLnN0YXJ0UG9zaXRpb24gfHwge1xuICAgICAgeDogcG9zLngsXG4gICAgICB5OiBwb3MueVxuICAgIH07XG4gICAgX3Auc3RhcnRTdHlsZSA9IF9wLnN0YXJ0U3R5bGUgfHwgdGFyZ2V0LmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKHRhcmdldCwgX3Auc3R5bGUpO1xuICB9XG4gIGlmIChpc0NvcmUpIHtcbiAgICB2YXIgcGFuID0gdGFyZ2V0LnBhbigpO1xuICAgIF9wLnN0YXJ0UGFuID0ge1xuICAgICAgeDogcGFuLngsXG4gICAgICB5OiBwYW4ueVxuICAgIH07XG4gICAgX3Auc3RhcnRab29tID0gdGFyZ2V0Lnpvb20oKTtcbiAgfVxuXG4gIC8vIGZvciBmdXR1cmUgdGltZWxpbmUvYW5pbWF0aW9ucyBpbXBsXG4gIHRoaXMubGVuZ3RoID0gMTtcbiAgdGhpc1swXSA9IHRoaXM7XG59O1xudmFyIGFuaWZuID0gQW5pbWF0aW9uLnByb3RvdHlwZTtcbmV4dGVuZChhbmlmbiwge1xuICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgcmV0dXJuICdhbmltYXRpb24nO1xuICB9LFxuICBob29rOiBmdW5jdGlvbiBob29rKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5ob29rZWQpIHtcbiAgICAgIC8vIGFkZCB0byB0YXJnZXQncyBhbmltYXRpb24gcXVldWVcbiAgICAgIHZhciBxO1xuICAgICAgdmFyIHRBbmkgPSBfcC50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO1xuICAgICAgaWYgKF9wLnF1ZXVlKSB7XG4gICAgICAgIHEgPSB0QW5pLnF1ZXVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcSA9IHRBbmkuY3VycmVudDtcbiAgICAgIH1cbiAgICAgIHEucHVzaCh0aGlzKTtcblxuICAgICAgLy8gYWRkIHRvIHRoZSBhbmltYXRpb24gbG9vcCBwb29sXG4gICAgICBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihfcC50YXJnZXQpKSB7XG4gICAgICAgIF9wLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChfcC50YXJnZXQpO1xuICAgICAgfVxuICAgICAgX3AuaG9va2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBsYXk6IGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcblxuICAgIC8vIGF1dG9yZXdpbmRcbiAgICBpZiAoX3AucHJvZ3Jlc3MgPT09IDEpIHtcbiAgICAgIF9wLnByb2dyZXNzID0gMDtcbiAgICB9XG4gICAgX3AucGxheWluZyA9IHRydWU7XG4gICAgX3Auc3RhcnRlZCA9IGZhbHNlOyAvLyBuZWVkcyB0byBiZSBzdGFydGVkIGJ5IGFuaW1hdGlvbiBsb29wXG4gICAgX3Auc3RvcHBlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG9vaygpO1xuXG4gICAgLy8gdGhlIGFuaW1hdGlvbiBsb29wIHdpbGwgc3RhcnQgdGhlIGFuaW1hdGlvbi4uLlxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBsYXlpbmc6IGZ1bmN0aW9uIHBsYXlpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZztcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgX3AuYXBwbHlpbmcgPSB0cnVlO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTsgLy8gbmVlZHMgdG8gYmUgc3RhcnRlZCBieSBhbmltYXRpb24gbG9vcFxuICAgIF9wLnN0b3BwZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvb2soKTtcblxuICAgIC8vIHRoZSBhbmltYXRpb24gbG9vcCB3aWxsIGFwcGx5IHRoZSBhbmltYXRpb24gYXQgdGhpcyBwcm9ncmVzc1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGFwcGx5aW5nOiBmdW5jdGlvbiBhcHBseWluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZztcbiAgfSxcbiAgcGF1c2U6IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgX3AucGxheWluZyA9IGZhbHNlO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIF9wLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgX3Auc3RvcHBlZCA9IHRydWU7IC8vIHRvIGJlIHJlbW92ZWQgZnJvbSBhbmltYXRpb24gcXVldWVzXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmV3aW5kOiBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCk7XG4gIH0sXG4gIGZhc3Rmb3J3YXJkOiBmdW5jdGlvbiBmYXN0Zm9yd2FyZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzcygxKTtcbiAgfSxcbiAgdGltZTogZnVuY3Rpb24gdGltZSh0KSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gX3AucHJvZ3Jlc3MgKiBfcC5kdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3ModCAvIF9wLmR1cmF0aW9uKTtcbiAgICB9XG4gIH0sXG4gIHByb2dyZXNzOiBmdW5jdGlvbiBwcm9ncmVzcyhwKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgd2FzUGxheWluZyA9IF9wLnBsYXlpbmc7XG4gICAgaWYgKHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIF9wLnByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAod2FzUGxheWluZykge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgICBfcC5wcm9ncmVzcyA9IHA7XG4gICAgICBfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICBpZiAod2FzUGxheWluZykge1xuICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvbXBsZXRlZDogZnVuY3Rpb24gY29tcGxldGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnByb2dyZXNzID09PSAxO1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIHdhc1BsYXlpbmcgPSBfcC5wbGF5aW5nO1xuICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICAgIF9wLnByb2dyZXNzID0gMSAtIF9wLnByb2dyZXNzO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB2YXIgc3dhcCA9IGZ1bmN0aW9uIHN3YXAoYSwgYikge1xuICAgICAgdmFyIF9wYSA9IF9wW2FdO1xuICAgICAgaWYgKF9wYSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9wW2FdID0gX3BbYl07XG4gICAgICBfcFtiXSA9IF9wYTtcbiAgICB9O1xuICAgIHN3YXAoJ3pvb20nLCAnc3RhcnRab29tJyk7XG4gICAgc3dhcCgncGFuJywgJ3N0YXJ0UGFuJyk7XG4gICAgc3dhcCgncG9zaXRpb24nLCAnc3RhcnRQb3NpdGlvbicpO1xuXG4gICAgLy8gc3dhcCBzdHlsZXNcbiAgICBpZiAoX3Auc3R5bGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3Auc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBfcC5zdHlsZVtpXTtcbiAgICAgICAgdmFyIG5hbWUgPSBwcm9wLm5hbWU7XG4gICAgICAgIHZhciBzdGFydFN0eWxlUHJvcCA9IF9wLnN0YXJ0U3R5bGVbbmFtZV07XG4gICAgICAgIF9wLnN0YXJ0U3R5bGVbbmFtZV0gPSBwcm9wO1xuICAgICAgICBfcC5zdHlsZVtpXSA9IHN0YXJ0U3R5bGVQcm9wO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAod2FzUGxheWluZykge1xuICAgICAgdGhpcy5wbGF5KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBwcm9taXNlOiBmdW5jdGlvbiBwcm9taXNlKHR5cGUpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBhcnI7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICAgIGFyciA9IF9wLmZyYW1lcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgYXJyID0gX3AuY29tcGxldGVzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhcnIucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcbmFuaWZuLmNvbXBsZXRlID0gYW5pZm4uY29tcGxldGVkO1xuYW5pZm4ucnVuID0gYW5pZm4ucGxheTtcbmFuaWZuLnJ1bm5pbmcgPSBhbmlmbi5wbGF5aW5nO1xuXG52YXIgZGVmaW5lJDMgPSB7XG4gIGFuaW1hdGVkOiBmdW5jdGlvbiBhbmltYXRlZCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYW5pbWF0ZWRJbXBsKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBlbGUgPSBhbGxbMF07XG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICAvLyBhbmltYXRlZFxuXG4gIGNsZWFyUXVldWU6IGZ1bmN0aW9uIGNsZWFyUXVldWUoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFyUXVldWVJbXBsKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGFsbFtpXTtcbiAgICAgICAgZWxlLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfSxcbiAgLy8gY2xlYXJRdWV1ZVxuXG4gIGRlbGF5OiBmdW5jdGlvbiBkZWxheSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVsYXlJbXBsKHRpbWUsIGNvbXBsZXRlKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSh7XG4gICAgICAgIGRlbGF5OiB0aW1lLFxuICAgICAgICBkdXJhdGlvbjogdGltZSxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlXG4gICAgICB9KTtcbiAgICB9O1xuICB9LFxuICAvLyBkZWxheVxuXG4gIGRlbGF5QW5pbWF0aW9uOiBmdW5jdGlvbiBkZWxheUFuaW1hdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVsYXlBbmltYXRpb25JbXBsKHRpbWUsIGNvbXBsZXRlKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0aW9uKHtcbiAgICAgICAgZGVsYXk6IHRpbWUsXG4gICAgICAgIGR1cmF0aW9uOiB0aW1lLFxuICAgICAgICBjb21wbGV0ZTogY29tcGxldGVcbiAgICAgIH0pO1xuICAgIH07XG4gIH0sXG4gIC8vIGRlbGF5XG5cbiAgYW5pbWF0aW9uOiBmdW5jdGlvbiBhbmltYXRpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGFuaW1hdGlvbkltcGwocHJvcGVydGllcywgcGFyYW1zKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIHZhciBpc0NvcmUgPSAhc2VsZklzQXJyYXlMaWtlO1xuICAgICAgdmFyIGlzRWxlcyA9ICFpc0NvcmU7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgICAgIHByb3BlcnRpZXMgPSBleHRlbmQoe30sIHByb3BlcnRpZXMsIHBhcmFtcyk7XG4gICAgICB2YXIgcHJvcGVydGllc0VtcHR5ID0gT2JqZWN0LmtleXMocHJvcGVydGllcykubGVuZ3RoID09PSAwO1xuICAgICAgaWYgKHByb3BlcnRpZXNFbXB0eSkge1xuICAgICAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihhbGxbMF0sIHByb3BlcnRpZXMpOyAvLyBub3RoaW5nIHRvIGFuaW1hdGVcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnRpZXMuZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wZXJ0aWVzLmR1cmF0aW9uID0gNDAwO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwcm9wZXJ0aWVzLmR1cmF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3Nsb3cnOlxuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSA2MDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zhc3QnOlxuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSAyMDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVzKSB7XG4gICAgICAgIHByb3BlcnRpZXMuc3R5bGUgPSBzdHlsZS5nZXRQcm9wc0xpc3QocHJvcGVydGllcy5zdHlsZSB8fCBwcm9wZXJ0aWVzLmNzcyk7XG4gICAgICAgIHByb3BlcnRpZXMuY3NzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlcyAmJiBwcm9wZXJ0aWVzLnJlbmRlcmVkUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICB2YXIgcnBvcyA9IHByb3BlcnRpZXMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICAgICAgcHJvcGVydGllcy5wb3NpdGlvbiA9IHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uKHJwb3MsIHpvb20sIHBhbik7XG4gICAgICB9XG5cbiAgICAgIC8vIG92ZXJyaWRlIHBhbiB3LyBwYW5CeSBpZiBzZXRcbiAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5wYW5CeSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBwYW5CeSA9IHByb3BlcnRpZXMucGFuQnk7XG4gICAgICAgIHZhciBjeVBhbiA9IGN5LnBhbigpO1xuICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IHtcbiAgICAgICAgICB4OiBjeVBhbi54ICsgcGFuQnkueCxcbiAgICAgICAgICB5OiBjeVBhbi55ICsgcGFuQnkueVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBvdmVycmlkZSBwYW4gdy8gY2VudGVyIGlmIHNldFxuICAgICAgdmFyIGNlbnRlciA9IHByb3BlcnRpZXMuY2VudGVyIHx8IHByb3BlcnRpZXMuY2VudHJlO1xuICAgICAgaWYgKGlzQ29yZSAmJiBjZW50ZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY2VudGVyUGFuID0gY3kuZ2V0Q2VudGVyUGFuKGNlbnRlci5lbGVzLCBwcm9wZXJ0aWVzLnpvb20pO1xuICAgICAgICBpZiAoY2VudGVyUGFuICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IGNlbnRlclBhbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBvdmVycmlkZSBwYW4gJiB6b29tIHcvIGZpdCBpZiBzZXRcbiAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5maXQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgZml0ID0gcHJvcGVydGllcy5maXQ7XG4gICAgICAgIHZhciBmaXRWcCA9IGN5LmdldEZpdFZpZXdwb3J0KGZpdC5lbGVzIHx8IGZpdC5ib3VuZGluZ0JveCwgZml0LnBhZGRpbmcpO1xuICAgICAgICBpZiAoZml0VnAgIT0gbnVsbCkge1xuICAgICAgICAgIHByb3BlcnRpZXMucGFuID0gZml0VnAucGFuO1xuICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IGZpdFZwLnpvb207XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gb3ZlcnJpZGUgem9vbSAoJiBwb3RlbnRpYWxseSBwYW4pIHcvIHpvb20gb2JqIGlmIHNldFxuICAgICAgaWYgKGlzQ29yZSAmJiBwbGFpbk9iamVjdChwcm9wZXJ0aWVzLnpvb20pKSB7XG4gICAgICAgIHZhciB2cCA9IGN5LmdldFpvb21lZFZpZXdwb3J0KHByb3BlcnRpZXMuem9vbSk7XG4gICAgICAgIGlmICh2cCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHZwLnpvb21lZCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy56b29tID0gdnAuem9vbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZwLnBhbm5lZCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5wYW4gPSB2cC5wYW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IG51bGw7IC8vIGFuIGluYXZhbGlkIHpvb20gKGUuZy4gbm8gZGVsdGEpIGdldHMgYXV0b21hdGljYWxseSBkZXN0cm95ZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihhbGxbMF0sIHByb3BlcnRpZXMpO1xuICAgIH07XG4gIH0sXG4gIC8vIGFuaW1hdGVcblxuICBhbmltYXRlOiBmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBhbmltYXRlSW1wbChwcm9wZXJ0aWVzLCBwYXJhbXMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeSB8fCB0aGlzO1xuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IGV4dGVuZCh7fSwgcHJvcGVydGllcywgcGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgLy8gbWFudWFsbHkgaG9vayBhbmQgcnVuIHRoZSBhbmltYXRpb25cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBhbGxbaV07XG4gICAgICAgIHZhciBxdWV1ZSA9IGVsZS5hbmltYXRlZCgpICYmIChwcm9wZXJ0aWVzLnF1ZXVlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydGllcy5xdWV1ZSk7XG4gICAgICAgIHZhciBhbmkgPSBlbGUuYW5pbWF0aW9uKHByb3BlcnRpZXMsIHF1ZXVlID8ge1xuICAgICAgICAgIHF1ZXVlOiB0cnVlXG4gICAgICAgIH0gOiB1bmRlZmluZWQpO1xuICAgICAgICBhbmkucGxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfTtcbiAgfSxcblxuICAvLyBhbmltYXRlXG5cbiAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc3RvcEltcGwoY2xlYXJRdWV1ZSwganVtcFRvRW5kKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICAgIHZhciBhbmlzID0gX3AuYW5pbWF0aW9uLmN1cnJlbnQ7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYW5pcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBhbmkgPSBhbmlzW2pdO1xuICAgICAgICAgIHZhciBhbmlfcCA9IGFuaS5fcHJpdmF0ZTtcbiAgICAgICAgICBpZiAoanVtcFRvRW5kKSB7XG4gICAgICAgICAgICAvLyBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGxvb3AsIHRoZSBhbmltYXRpb25cbiAgICAgICAgICAgIC8vIHdpbGwgZ28gc3RyYWlnaHQgdG8gdGhlIGVuZCBhbmQgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgYW5pX3AuZHVyYXRpb24gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBxdWV1ZSBvZiBmdXR1cmUgYW5pbWF0aW9uc1xuICAgICAgICBpZiAoY2xlYXJRdWV1ZSkge1xuICAgICAgICAgIF9wLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanVtcFRvRW5kKSB7XG4gICAgICAgICAgX3AuYW5pbWF0aW9uLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3ZSBoYXZlIHRvIG5vdGlmeSAodGhlIGFuaW1hdGlvbiBsb29wIGRvZXNuJ3QgZG8gaXQgZm9yIHVzIG9uIGBzdG9wYClcbiAgICAgIGN5Lm5vdGlmeSgnZHJhdycpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfSAvLyBzdG9wXG59OyAvLyBkZWZpbmVcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBpc0FycmF5XzEgPSBpc0FycmF5O1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheV8xKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbF8xKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG52YXIgX2lzS2V5ID0gaXNLZXk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdF8xKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBfYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbnZhciBpc0Z1bmN0aW9uXzEgPSBpc0Z1bmN0aW9uO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IF9yb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxudmFyIF9jb3JlSnNEYXRhID0gY29yZUpzRGF0YTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhfY29yZUpzRGF0YSAmJiBfY29yZUpzRGF0YS5rZXlzICYmIF9jb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxudmFyIF9pc01hc2tlZCA9IGlzTWFza2VkO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvJDEgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmckMSA9IGZ1bmNQcm90byQxLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmckMS5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxudmFyIF90b1NvdXJjZSA9IHRvU291cmNlO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byQzID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkkMyA9IG9iamVjdFByb3RvJDMuaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSQzKS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdF8xKHZhbHVlKSB8fCBfaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbl8xKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoX3RvU291cmNlKHZhbHVlKSk7XG59XG5cbnZhciBfYmFzZUlzTmF0aXZlID0gYmFzZUlzTmF0aXZlO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZSQxKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG52YXIgX2dldFZhbHVlID0gZ2V0VmFsdWUkMTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IF9nZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBfYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG52YXIgX2dldE5hdGl2ZSA9IGdldE5hdGl2ZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IF9nZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbnZhciBfbmF0aXZlQ3JlYXRlID0gbmF0aXZlQ3JlYXRlO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBfbmF0aXZlQ3JlYXRlID8gX25hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG52YXIgX2hhc2hDbGVhciA9IGhhc2hDbGVhcjtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIF9oYXNoRGVsZXRlID0gaGFzaERlbGV0ZTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEJDEgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byQyID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IG9iamVjdFByb3RvJDIuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChfbmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCQxID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSQyLmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxudmFyIF9oYXNoR2V0ID0gaGFzaEdldDtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvJDEgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gb2JqZWN0UHJvdG8kMS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBfbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5JDEuY2FsbChkYXRhLCBrZXkpO1xufVxuXG52YXIgX2hhc2hIYXMgPSBoYXNoSGFzO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChfbmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbnZhciBfaGFzaFNldCA9IGhhc2hTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBfaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX2hhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IF9oYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gX2hhc2hTZXQ7XG5cbnZhciBfSGFzaCA9IEhhc2g7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxudmFyIF9saXN0Q2FjaGVDbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuXG4vKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxudmFyIGVxXzEgPSBlcTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxXzEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG52YXIgX2Fzc29jSW5kZXhPZiA9IGFzc29jSW5kZXhPZjtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gX2Fzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxudmFyIF9saXN0Q2FjaGVEZWxldGUgPSBsaXN0Q2FjaGVEZWxldGU7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBfYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG52YXIgX2xpc3RDYWNoZUdldCA9IGxpc3RDYWNoZUdldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIF9hc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG52YXIgX2xpc3RDYWNoZUhhcyA9IGxpc3RDYWNoZUhhcztcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IF9hc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxudmFyIF9saXN0Q2FjaGVTZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gX2xpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBfbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBfbGlzdENhY2hlU2V0O1xuXG52YXIgX0xpc3RDYWNoZSA9IExpc3RDYWNoZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCQxID0gX2dldE5hdGl2ZShfcm9vdCwgJ01hcCcpO1xuXG52YXIgX01hcCA9IE1hcCQxO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IF9IYXNoLFxuICAgICdtYXAnOiBuZXcgKF9NYXAgfHwgX0xpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBfSGFzaFxuICB9O1xufVxuXG52YXIgX21hcENhY2hlQ2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbnZhciBfaXNLZXlhYmxlID0gaXNLZXlhYmxlO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gX2lzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG52YXIgX2dldE1hcERhdGEgPSBnZXRNYXBEYXRhO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBfZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBfbWFwQ2FjaGVEZWxldGUgPSBtYXBDYWNoZURlbGV0ZTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gX2dldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxudmFyIF9tYXBDYWNoZUdldCA9IG1hcENhY2hlR2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gX2dldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxudmFyIF9tYXBDYWNoZUhhcyA9IG1hcENhY2hlSGFzO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBfZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG52YXIgX21hcENhY2hlU2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX21hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IF9tYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfbWFwQ2FjaGVTZXQ7XG5cbnZhciBfTWFwQ2FjaGUgPSBNYXBDYWNoZTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgX01hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBfTWFwQ2FjaGU7XG5cbnZhciBtZW1vaXplXzEgPSBtZW1vaXplO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplXzEoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIF9tZW1vaXplQ2FwcGVkID0gbWVtb2l6ZUNhcHBlZDtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBfbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxudmFyIF9zdHJpbmdUb1BhdGggPSBzdHJpbmdUb1BhdGg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBfYXJyYXlNYXAgPSBhcnJheU1hcDtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkkMSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IF9TeW1ib2wgPyBfU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlfMSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBfYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2xfMSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkkMSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG52YXIgX2Jhc2VUb1N0cmluZyA9IGJhc2VUb1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nJDEodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IF9iYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG52YXIgdG9TdHJpbmdfMSA9IHRvU3RyaW5nJDE7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5XzEodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBfaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogX3N0cmluZ1RvUGF0aCh0b1N0cmluZ18xKHZhbHVlKSk7XG59XG5cbnZhciBfY2FzdFBhdGggPSBjYXN0UGF0aDtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sXzEodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxudmFyIF90b0tleSA9IHRvS2V5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IF9jYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbX3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbnZhciBfYmFzZUdldCA9IGJhc2VHZXQ7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBfYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbnZhciBnZXRfMSA9IGdldDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gX2dldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX2RlZmluZVByb3BlcnR5KSB7XG4gICAgX2RlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxudmFyIF9iYXNlQXNzaWduVmFsdWUgPSBiYXNlQXNzaWduVmFsdWU7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxXzEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgX2Jhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBfYXNzaWduVmFsdWUgPSBhc3NpZ25WYWx1ZTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG52YXIgX2lzSW5kZXggPSBpc0luZGV4O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICBpZiAoIWlzT2JqZWN0XzEob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cbiAgcGF0aCA9IF9jYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgbmVzdGVkID0gb2JqZWN0O1xuXG4gIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IF90b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3RfMShvYmpWYWx1ZSlcbiAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgOiAoX2lzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBfYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG52YXIgX2Jhc2VTZXQgPSBiYXNlU2V0O1xuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICogaXQncyBjcmVhdGVkLiBBcnJheXMgYXJlIGNyZWF0ZWQgZm9yIG1pc3NpbmcgaW5kZXggcHJvcGVydGllcyB3aGlsZSBvYmplY3RzXG4gKiBhcmUgY3JlYXRlZCBmb3IgYWxsIG90aGVyIG1pc3NpbmcgcHJvcGVydGllcy4gVXNlIGBfLnNldFdpdGhgIHRvIGN1c3RvbWl6ZVxuICogYHBhdGhgIGNyZWF0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLnNldChvYmplY3QsICdhWzBdLmIuYycsIDQpO1xuICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnNldChvYmplY3QsIFsneCcsICcwJywgJ3knLCAneiddLCA1KTtcbiAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IF9iYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xufVxuXG52YXIgc2V0XzEgPSBzZXQ7XG5cbi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG52YXIgX2NvcHlBcnJheSA9IGNvcHlBcnJheTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9QYXRoKCdhLmIuYycpO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gKlxuICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICovXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXlfMSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gX2FycmF5TWFwKHZhbHVlLCBfdG9LZXkpO1xuICB9XG4gIHJldHVybiBpc1N5bWJvbF8xKHZhbHVlKSA/IFt2YWx1ZV0gOiBfY29weUFycmF5KF9zdHJpbmdUb1BhdGgodG9TdHJpbmdfMSh2YWx1ZSkpKTtcbn1cblxudmFyIHRvUGF0aF8xID0gdG9QYXRoO1xuXG52YXIgZGVmaW5lJDIgPSB7XG4gIC8vIGFjY2VzcyBkYXRhIGZpZWxkXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEocGFyYW1zKSB7XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgZmllbGQ6ICdkYXRhJyxcbiAgICAgIGJpbmRpbmdFdmVudDogJ2RhdGEnLFxuICAgICAgYWxsb3dCaW5kaW5nOiBmYWxzZSxcbiAgICAgIGFsbG93U2V0dGluZzogZmFsc2UsXG4gICAgICBhbGxvd0dldHRpbmc6IGZhbHNlLFxuICAgICAgc2V0dGluZ0V2ZW50OiAnZGF0YScsXG4gICAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogZmFsc2UsXG4gICAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgICBpbW11dGFibGVLZXlzOiB7fSxcbiAgICAgIC8vIGtleSA9PiB0cnVlIGlmIGltbXV0YWJsZVxuICAgICAgdXBkYXRlU3R5bGU6IGZhbHNlLFxuICAgICAgYmVmb3JlR2V0OiBmdW5jdGlvbiBiZWZvcmVHZXQoc2VsZikge30sXG4gICAgICBiZWZvcmVTZXQ6IGZ1bmN0aW9uIGJlZm9yZVNldChzZWxmLCBvYmopIHt9LFxuICAgICAgb25TZXQ6IGZ1bmN0aW9uIG9uU2V0KHNlbGYpIHt9LFxuICAgICAgY2FuU2V0OiBmdW5jdGlvbiBjYW5TZXQoc2VsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRhdGFJbXBsKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgcCA9IHBhcmFtcztcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuICAgICAgdmFyIHNpbmdsZSA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGZbMF0gOiBzZWxmO1xuXG4gICAgICAvLyAuZGF0YSgnZm9vJywgLi4uKVxuICAgICAgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgICAgICAvLyBzZXQgb3IgZ2V0IHByb3BlcnR5XG4gICAgICAgIHZhciBpc1BhdGhMaWtlID0gbmFtZS5pbmRleE9mKCcuJykgIT09IC0xOyAvLyB0aGVyZSBtaWdodCBiZSBhIG5vcm1hbCBmaWVsZCB3aXRoIGEgZG90IFxuICAgICAgICB2YXIgcGF0aCA9IGlzUGF0aExpa2UgJiYgdG9QYXRoXzEobmFtZSk7XG5cbiAgICAgICAgLy8gLmRhdGEoJ2ZvbycpXG4gICAgICAgIGlmIChwLmFsbG93R2V0dGluZyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gZ2V0XG5cbiAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICAgIHAuYmVmb3JlR2V0KHNpbmdsZSk7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgcGF0aCBhbmQgYSBmaWVsZCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgaWYgKHBhdGggJiYgc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdW25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0ID0gZ2V0XzEoc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdLCBwYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldCA9IHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXVtuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldDtcblxuICAgICAgICAgIC8vIC5kYXRhKCdmb28nLCAnYmFyJylcbiAgICAgICAgfSBlbHNlIGlmIChwLmFsbG93U2V0dGluZyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gc2V0XG4gICAgICAgICAgdmFyIHZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1tuYW1lXTtcbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBfZGVmaW5lUHJvcGVydHkkMSh7fSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcC5iZWZvcmVTZXQoc2VsZiwgY2hhbmdlKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICAgICAgICBpZiAocC5jYW5TZXQoZWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXRoICYmIHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBzZXRfMShlbGUuX3ByaXZhdGVbcC5maWVsZF0sIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWxlLl9wcml2YXRlW3AuZmllbGRdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSBtYXBwZXJzIGlmIGFza2VkXG4gICAgICAgICAgICBpZiAocC51cGRhdGVTdHlsZSkge1xuICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVN0eWxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhbGwgb25TZXQgY2FsbGJhY2tcbiAgICAgICAgICAgIHAub25TZXQoc2VsZik7XG4gICAgICAgICAgICBpZiAocC5zZXR0aW5nVHJpZ2dlcnNFdmVudCkge1xuICAgICAgICAgICAgICBzZWxmW3AudHJpZ2dlckZuTmFtZV0ocC5zZXR0aW5nRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kYXRhKHsgJ2Zvbyc6ICdiYXInIH0pXG4gICAgICB9IGVsc2UgaWYgKHAuYWxsb3dTZXR0aW5nICYmIHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgICAgIC8vIGV4dGVuZFxuICAgICAgICB2YXIgb2JqID0gbmFtZTtcbiAgICAgICAgdmFyIGssIHY7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgcC5iZWZvcmVTZXQoc2VsZiwgb2JqKTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgayA9IGtleXNbX2ldO1xuICAgICAgICAgIHYgPSBvYmpba107XG4gICAgICAgICAgdmFyIF92YWxpZCA9ICFwLmltbXV0YWJsZUtleXNba107XG4gICAgICAgICAgaWYgKF92YWxpZCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbGwubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIF9lbGUgPSBhbGxbal07XG4gICAgICAgICAgICAgIGlmIChwLmNhblNldChfZWxlKSkge1xuICAgICAgICAgICAgICAgIF9lbGUuX3ByaXZhdGVbcC5maWVsZF1ba10gPSB2O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIG1hcHBlcnMgaWYgYXNrZWRcbiAgICAgICAgaWYgKHAudXBkYXRlU3R5bGUpIHtcbiAgICAgICAgICBzZWxmLnVwZGF0ZVN0eWxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjYWxsIG9uU2V0IGNhbGxiYWNrXG4gICAgICAgIHAub25TZXQoc2VsZik7XG4gICAgICAgIGlmIChwLnNldHRpbmdUcmlnZ2Vyc0V2ZW50KSB7XG4gICAgICAgICAgc2VsZltwLnRyaWdnZXJGbk5hbWVdKHAuc2V0dGluZ0V2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kYXRhKGZ1bmN0aW9uKCl7IC4uLiB9KVxuICAgICAgfSBlbHNlIGlmIChwLmFsbG93QmluZGluZyAmJiBmbiQ2KG5hbWUpKSB7XG4gICAgICAgIC8vIGJpbmQgdG8gZXZlbnRcbiAgICAgICAgdmFyIGZuID0gbmFtZTtcbiAgICAgICAgc2VsZi5vbihwLmJpbmRpbmdFdmVudCwgZm4pO1xuXG4gICAgICAgIC8vIC5kYXRhKClcbiAgICAgIH0gZWxzZSBpZiAocC5hbGxvd0dldHRpbmcgJiYgbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGdldCB3aG9sZSBvYmplY3RcbiAgICAgICAgdmFyIF9yZXQ7XG4gICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICBwLmJlZm9yZUdldChzaW5nbGUpO1xuICAgICAgICAgIF9yZXQgPSBzaW5nbGUuX3ByaXZhdGVbcC5maWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZjsgLy8gbWFpbnRhaW4gY2hhaW5hYmlsaXR5XG4gICAgfTsgLy8gZnVuY3Rpb25cbiAgfSxcblxuICAvLyBkYXRhXG5cbiAgLy8gcmVtb3ZlIGRhdGEgZmllbGRcbiAgcmVtb3ZlRGF0YTogZnVuY3Rpb24gcmVtb3ZlRGF0YShwYXJhbXMpIHtcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICBmaWVsZDogJ2RhdGEnLFxuICAgICAgZXZlbnQ6ICdkYXRhJyxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIHRyaWdnZXJFdmVudDogZmFsc2UsXG4gICAgICBpbW11dGFibGVLZXlzOiB7fSAvLyBrZXkgPT4gdHJ1ZSBpZiBpbW11dGFibGVcbiAgICB9O1xuXG4gICAgcGFyYW1zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgcGFyYW1zKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVtb3ZlRGF0YUltcGwobmFtZXMpIHtcbiAgICAgIHZhciBwID0gcGFyYW1zO1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG5cbiAgICAgIC8vIC5yZW1vdmVEYXRhKCdmb28gYmFyJylcbiAgICAgIGlmIChzdHJpbmcobmFtZXMpKSB7XG4gICAgICAgIC8vIHRoZW4gZ2V0IHRoZSBsaXN0IG9mIGtleXMsIGFuZCBkZWxldGUgdGhlbVxuICAgICAgICB2YXIga2V5cyA9IG5hbWVzLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgLy8gZGVsZXRlIGVhY2ggbm9uLWVtcHR5IGtleVxuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChlbXB0eVN0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1trZXldOyAvLyBub3QgdmFsaWQgaWYgaW1tdXRhYmxlXG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpX2EgPSAwLCBsX2EgPSBhbGwubGVuZ3RoOyBpX2EgPCBsX2E7IGlfYSsrKSB7XG4gICAgICAgICAgICAgIGFsbFtpX2FdLl9wcml2YXRlW3AuZmllbGRdW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwLnRyaWdnZXJFdmVudCkge1xuICAgICAgICAgIHNlbGZbcC50cmlnZ2VyRm5OYW1lXShwLmV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5yZW1vdmVEYXRhKClcbiAgICAgIH0gZWxzZSBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB0aGVuIGRlbGV0ZSBhbGwga2V5c1xuXG4gICAgICAgIGZvciAodmFyIF9pX2EgPSAwLCBfbF9hID0gYWxsLmxlbmd0aDsgX2lfYSA8IF9sX2E7IF9pX2ErKykge1xuICAgICAgICAgIHZhciBfcHJpdmF0ZUZpZWxkcyA9IGFsbFtfaV9hXS5fcHJpdmF0ZVtwLmZpZWxkXTtcbiAgICAgICAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyhfcHJpdmF0ZUZpZWxkcyk7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgX2tleXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgICAgdmFyIF9rZXkgPSBfa2V5c1tfaTJdO1xuICAgICAgICAgICAgdmFyIHZhbGlkS2V5VG9EZWxldGUgPSAhcC5pbW11dGFibGVLZXlzW19rZXldO1xuICAgICAgICAgICAgaWYgKHZhbGlkS2V5VG9EZWxldGUpIHtcbiAgICAgICAgICAgICAgX3ByaXZhdGVGaWVsZHNbX2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwLnRyaWdnZXJFdmVudCkge1xuICAgICAgICAgIHNlbGZbcC50cmlnZ2VyRm5OYW1lXShwLmV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGY7IC8vIG1haW50YWluIGNoYWluaW5nXG4gICAgfTsgLy8gZnVuY3Rpb25cbiAgfSAvLyByZW1vdmVEYXRhXG59OyAvLyBkZWZpbmVcblxudmFyIGRlZmluZSQxID0ge1xuICBldmVudEFsaWFzZXNPbjogZnVuY3Rpb24gZXZlbnRBbGlhc2VzT24ocHJvdG8pIHtcbiAgICB2YXIgcCA9IHByb3RvO1xuICAgIHAuYWRkTGlzdGVuZXIgPSBwLmxpc3RlbiA9IHAuYmluZCA9IHAub247XG4gICAgcC51bmxpc3RlbiA9IHAudW5iaW5kID0gcC5vZmYgPSBwLnJlbW92ZUxpc3RlbmVyO1xuICAgIHAudHJpZ2dlciA9IHAuZW1pdDtcblxuICAgIC8vIHRoaXMgaXMganVzdCBhIHdyYXBwZXIgYWxpYXMgb2YgLm9uKClcbiAgICBwLnBvbiA9IHAucHJvbWlzZU9uID0gZnVuY3Rpb24gKGV2ZW50cywgc2VsZWN0b3IpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soZSkge1xuICAgICAgICAgIHNlbGYub2ZmLmFwcGx5KHNlbGYsIG9mZkFyZ3MpO1xuICAgICAgICAgIHJlc29sdmUoZSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbkFyZ3MgPSBhcmdzLmNvbmNhdChbY2FsbGJhY2tdKTtcbiAgICAgICAgdmFyIG9mZkFyZ3MgPSBvbkFyZ3MuY29uY2F0KFtdKTtcbiAgICAgICAgc2VsZi5vbi5hcHBseShzZWxmLCBvbkFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufTsgLy8gZGVmaW5lXG5cbi8vIHVzZSB0aGlzIG1vZHVsZSB0byBjaGVycnkgcGljayBmdW5jdGlvbnMgaW50byB5b3VyIHByb3RvdHlwZVxudmFyIGRlZmluZSA9IHt9O1xuW2RlZmluZSQzLCBkZWZpbmUkMiwgZGVmaW5lJDFdLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgZXh0ZW5kKGRlZmluZSwgbSk7XG59KTtcblxudmFyIGVsZXNmbiRpID0ge1xuICBhbmltYXRlOiBkZWZpbmUuYW5pbWF0ZSgpLFxuICBhbmltYXRpb246IGRlZmluZS5hbmltYXRpb24oKSxcbiAgYW5pbWF0ZWQ6IGRlZmluZS5hbmltYXRlZCgpLFxuICBjbGVhclF1ZXVlOiBkZWZpbmUuY2xlYXJRdWV1ZSgpLFxuICBkZWxheTogZGVmaW5lLmRlbGF5KCksXG4gIGRlbGF5QW5pbWF0aW9uOiBkZWZpbmUuZGVsYXlBbmltYXRpb24oKSxcbiAgc3RvcDogZGVmaW5lLnN0b3AoKVxufTtcblxudmFyIGVsZXNmbiRoID0ge1xuICBjbGFzc2VzOiBmdW5jdGlvbiBjbGFzc2VzKF9jbGFzc2VzKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChfY2xhc3NlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmV0ID0gW107XG4gICAgICBzZWxmWzBdLl9wcml2YXRlLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7XG4gICAgICAgIHJldHVybiByZXQucHVzaChjbHMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSBpZiAoIWFycmF5KF9jbGFzc2VzKSkge1xuICAgICAgLy8gZXh0cmFjdCBjbGFzc2VzIGZyb20gc3RyaW5nXG4gICAgICBfY2xhc3NlcyA9IChfY2xhc3NlcyB8fCAnJykubWF0Y2goL1xcUysvZykgfHwgW107XG4gICAgfVxuICAgIHZhciBjaGFuZ2VkID0gW107XG4gICAgdmFyIGNsYXNzZXNTZXQgPSBuZXcgU2V0JDEoX2NsYXNzZXMpO1xuXG4gICAgLy8gY2hlY2sgYW5kIHVwZGF0ZSBlYWNoIGVsZVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VsZi5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGVsZSA9IHNlbGZbal07XG4gICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICB2YXIgZWxlQ2xhc3NlcyA9IF9wLmNsYXNzZXM7XG4gICAgICB2YXIgY2hhbmdlZEVsZSA9IGZhbHNlO1xuXG4gICAgICAvLyBjaGVjayBpZiBlbGUgaGFzIGFsbCBvZiB0aGUgcGFzc2VkIGNsYXNzZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNscyA9IF9jbGFzc2VzW2ldO1xuICAgICAgICB2YXIgZWxlSGFzQ2xhc3MgPSBlbGVDbGFzc2VzLmhhcyhjbHMpO1xuICAgICAgICBpZiAoIWVsZUhhc0NsYXNzKSB7XG4gICAgICAgICAgY2hhbmdlZEVsZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgaWYgZWxlIGhhcyBjbGFzc2VzIG91dHNpZGUgb2YgdGhvc2UgcGFzc2VkXG4gICAgICBpZiAoIWNoYW5nZWRFbGUpIHtcbiAgICAgICAgY2hhbmdlZEVsZSA9IGVsZUNsYXNzZXMuc2l6ZSAhPT0gX2NsYXNzZXMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZWRFbGUpIHtcbiAgICAgICAgX3AuY2xhc3NlcyA9IGNsYXNzZXNTZXQ7XG4gICAgICAgIGNoYW5nZWQucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyaWdnZXIgdXBkYXRlIHN0eWxlIG9uIHRob3NlIGVsZXMgdGhhdCBoYWQgY2xhc3MgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3Bhd24oY2hhbmdlZCkudXBkYXRlU3R5bGUoKS5lbWl0KCdjbGFzcycpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgYWRkQ2xhc3M6IGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzZXMpIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhjbGFzc2VzLCB0cnVlKTtcbiAgfSxcbiAgaGFzQ2xhc3M6IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHJldHVybiBlbGUgIT0gbnVsbCAmJiBlbGUuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoY2xhc3NOYW1lKTtcbiAgfSxcbiAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGNsYXNzZXMsIHRvZ2dsZSkge1xuICAgIGlmICghYXJyYXkoY2xhc3NlcykpIHtcbiAgICAgIC8vIGV4dHJhY3QgY2xhc3NlcyBmcm9tIHN0cmluZ1xuICAgICAgY2xhc3NlcyA9IGNsYXNzZXMubWF0Y2goL1xcUysvZykgfHwgW107XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgdG9nZ2xlVW5kZWZkID0gdG9nZ2xlID09PSB1bmRlZmluZWQ7XG4gICAgdmFyIGNoYW5nZWQgPSBbXTsgLy8gZWxlcyB3aG8gaGFkIGNsYXNzZXMgY2hhbmdlZFxuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gc2VsZi5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gc2VsZltpXTtcbiAgICAgIHZhciBlbGVDbGFzc2VzID0gZWxlLl9wcml2YXRlLmNsYXNzZXM7XG4gICAgICB2YXIgY2hhbmdlZEVsZSA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFzc2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBjbHMgPSBjbGFzc2VzW2pdO1xuICAgICAgICB2YXIgaGFzQ2xhc3MgPSBlbGVDbGFzc2VzLmhhcyhjbHMpO1xuICAgICAgICB2YXIgY2hhbmdlZE5vdyA9IGZhbHNlO1xuICAgICAgICBpZiAodG9nZ2xlIHx8IHRvZ2dsZVVuZGVmZCAmJiAhaGFzQ2xhc3MpIHtcbiAgICAgICAgICBlbGVDbGFzc2VzLmFkZChjbHMpO1xuICAgICAgICAgIGNoYW5nZWROb3cgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCF0b2dnbGUgfHwgdG9nZ2xlVW5kZWZkICYmIGhhc0NsYXNzKSB7XG4gICAgICAgICAgZWxlQ2xhc3Nlc1tcImRlbGV0ZVwiXShjbHMpO1xuICAgICAgICAgIGNoYW5nZWROb3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hhbmdlZEVsZSAmJiBjaGFuZ2VkTm93KSB7XG4gICAgICAgICAgY2hhbmdlZC5wdXNoKGVsZSk7XG4gICAgICAgICAgY2hhbmdlZEVsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yIGogY2xhc3Nlc1xuICAgIH0gLy8gZm9yIGkgZWxlc1xuXG4gICAgLy8gdHJpZ2dlciB1cGRhdGUgc3R5bGUgb24gdGhvc2UgZWxlcyB0aGF0IGhhZCBjbGFzcyBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zcGF3bihjaGFuZ2VkKS51cGRhdGVTdHlsZSgpLmVtaXQoJ2NsYXNzJyk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICByZW1vdmVDbGFzczogZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoY2xhc3Nlcykge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzZXMsIGZhbHNlKTtcbiAgfSxcbiAgZmxhc2hDbGFzczogZnVuY3Rpb24gZmxhc2hDbGFzcyhjbGFzc2VzLCBkdXJhdGlvbikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgZHVyYXRpb24gPSAyNTA7XG4gICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIHNlbGY7IC8vIG5vdGhpbmcgdG8gZG8gcmVhbGx5XG4gICAgfVxuXG4gICAgc2VsZi5hZGRDbGFzcyhjbGFzc2VzKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYucmVtb3ZlQ2xhc3MoY2xhc3Nlcyk7XG4gICAgfSwgZHVyYXRpb24pO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG59O1xuZWxlc2ZuJGguY2xhc3NOYW1lID0gZWxlc2ZuJGguY2xhc3NOYW1lcyA9IGVsZXNmbiRoLmNsYXNzZXM7XG5cbi8vIHRva2VucyBpbiB0aGUgcXVlcnkgbGFuZ3VhZ2VcbnZhciB0b2tlbnMgPSB7XG4gIG1ldGFDaGFyOiAnW1xcXFwhXFxcXFwiXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwuXFxcXC9cXFxcOlxcXFw7XFxcXDxcXFxcPVxcXFw+XFxcXD9cXFxcQFxcXFxbXFxcXF1cXFxcXlxcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dJyxcbiAgLy8gY2hhcnMgd2UgbmVlZCB0byBlc2NhcGUgaW4gbGV0IG5hbWVzLCBldGNcbiAgY29tcGFyYXRvck9wOiAnPXxcXFxcIT18Pnw+PXw8fDw9fFxcXFwkPXxcXFxcXj18XFxcXCo9JyxcbiAgLy8gYmluYXJ5IGNvbXBhcmlzb24gb3AgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpXG4gIGJvb2xPcDogJ1xcXFw/fFxcXFwhfFxcXFxeJyxcbiAgLy8gYm9vbGVhbiAodW5hcnkpIG9wZXJhdG9ycyAodXNlZCBpbiBkYXRhIHNlbGVjdG9ycylcbiAgc3RyaW5nOiAnXCIoPzpcXFxcXFxcXFwifFteXCJdKSpcIicgKyAnfCcgKyBcIicoPzpcXFxcXFxcXCd8W14nXSkqJ1wiLFxuICAvLyBzdHJpbmcgbGl0ZXJhbHMgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tIGRvdWJsZXF1b3RlcyB8IHNpbmdsZXF1b3Rlc1xuICBudW1iZXI6IG51bWJlcixcbiAgLy8gbnVtYmVyIGxpdGVyYWwgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tLSBlLmcuIDAuMTIzNCwgMTIzNCwgMTJlMTIzXG4gIG1ldGE6ICdkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlJyxcbiAgLy8gYWxsb3dlZCBtZXRhZGF0YSBmaWVsZHMgKGkuZS4gYWxsb3dlZCBmdW5jdGlvbnMgdG8gdXNlIGZyb20gQ29sbGVjdGlvbilcbiAgc2VwYXJhdG9yOiAnXFxcXHMqLFxcXFxzKicsXG4gIC8vIHF1ZXJpZXMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGUuZy4gZWRnZVtmb28gPSAnYmFyJ10sIG5vZGUuc29tZUNsYXNzXG4gIGRlc2NlbmRhbnQ6ICdcXFxccysnLFxuICBjaGlsZDogJ1xcXFxzKz5cXFxccysnLFxuICBzdWJqZWN0OiAnXFxcXCQnLFxuICBncm91cDogJ25vZGV8ZWRnZXxcXFxcKicsXG4gIGRpcmVjdGVkRWRnZTogJ1xcXFxzKy0+XFxcXHMrJyxcbiAgdW5kaXJlY3RlZEVkZ2U6ICdcXFxccys8LT5cXFxccysnXG59O1xudG9rZW5zLnZhcmlhYmxlID0gJyg/OltcXFxcdy0uXXwoPzpcXFxcXFxcXCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKSkrJzsgLy8gYSB2YXJpYWJsZSBuYW1lIGNhbiBoYXZlIGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcywgYW5kIHBlcmlvZHNcbnRva2Vucy5jbGFzc05hbWUgPSAnKD86W1xcXFx3LV18KD86XFxcXFxcXFwnICsgdG9rZW5zLm1ldGFDaGFyICsgJykpKyc7IC8vIGEgY2xhc3MgbmFtZSBoYXMgdGhlIHNhbWUgcnVsZXMgYXMgYSB2YXJpYWJsZSBleGNlcHQgaXQgY2FuJ3QgaGF2ZSBhICcuJyBpbiB0aGUgbmFtZVxudG9rZW5zLnZhbHVlID0gdG9rZW5zLnN0cmluZyArICd8JyArIHRva2Vucy5udW1iZXI7IC8vIGEgdmFsdWUgbGl0ZXJhbCwgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlclxudG9rZW5zLmlkID0gdG9rZW5zLnZhcmlhYmxlOyAvLyBhbiBlbGVtZW50IGlkIChmb2xsb3dzIHZhcmlhYmxlIGNvbnZlbnRpb25zKVxuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgb3BzLCBvcCwgaTtcblxuICAvLyBhZGQgQCB2YXJpYW50cyB0byBjb21wYXJhdG9yT3BcbiAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3AgPSBvcHNbaV07XG4gICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfEAnICsgb3A7XG4gIH1cblxuICAvLyBhZGQgISB2YXJpYW50cyB0byBjb21wYXJhdG9yT3BcbiAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3AgPSBvcHNbaV07XG4gICAgaWYgKG9wLmluZGV4T2YoJyEnKSA+PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIHNraXAgb3BzIHRoYXQgZXhwbGljaXRseSBjb250YWluICFcbiAgICBpZiAob3AgPT09ICc9Jykge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBza2lwID0gYi9jICE9IGlzIGV4cGxpY2l0bHkgZGVmaW5lZFxuXG4gICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfFxcXFwhJyArIG9wO1xuICB9XG59KSgpO1xuXG4vKipcbiAqIE1ha2UgYSBuZXcgcXVlcnkgb2JqZWN0XG4gKlxuICogQHByb3AgdHlwZSB7VHlwZX0gVGhlIHR5cGUgZW51bSAoaW50KSBvZiB0aGUgcXVlcnlcbiAqIEBwcm9wIGNoZWNrcyBMaXN0IG9mIGNoZWNrcyB0byBtYWtlIGFnYWluc3QgYW4gZWxlIHRvIHRlc3QgZm9yIGEgbWF0Y2hcbiAqL1xudmFyIG5ld1F1ZXJ5ID0gZnVuY3Rpb24gbmV3UXVlcnkoKSB7XG4gIHJldHVybiB7XG4gICAgY2hlY2tzOiBbXVxuICB9O1xufTtcblxuLyoqXG4gKiBBIGNoZWNrIHR5cGUgZW51bS1saWtlIG9iamVjdC4gIFVzZXMgaW50ZWdlciB2YWx1ZXMgZm9yIGZhc3QgbWF0Y2goKSBsb29rdXAuXG4gKiBUaGUgb3JkZXJpbmcgZG9lcyBub3QgbWF0dGVyIGFzIGxvbmcgYXMgdGhlIGludHMgYXJlIHVuaXF1ZS5cbiAqL1xudmFyIFR5cGUgPSB7XG4gIC8qKiBFLmcuIG5vZGUgKi9cbiAgR1JPVVA6IDAsXG4gIC8qKiBBIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgKi9cbiAgQ09MTEVDVElPTjogMSxcbiAgLyoqIEEgZmlsdGVyKGVsZSkgZnVuY3Rpb24gKi9cbiAgRklMVEVSOiAyLFxuICAvKiogRS5nLiBbZm9vID4gMV0gKi9cbiAgREFUQV9DT01QQVJFOiAzLFxuICAvKiogRS5nLiBbZm9vXSAqL1xuICBEQVRBX0VYSVNUOiA0LFxuICAvKiogRS5nLiBbP2Zvb10gKi9cbiAgREFUQV9CT09MOiA1LFxuICAvKiogRS5nLiBbW2RlZ3JlZSA+IDJdXSAqL1xuICBNRVRBX0NPTVBBUkU6IDYsXG4gIC8qKiBFLmcuIDpzZWxlY3RlZCAqL1xuICBTVEFURTogNyxcbiAgLyoqIEUuZy4gI2ZvbyAqL1xuICBJRDogOCxcbiAgLyoqIEUuZy4gLmZvbyAqL1xuICBDTEFTUzogOSxcbiAgLyoqIEUuZy4gI2ZvbyA8LT4gI2JhciAqL1xuICBVTkRJUkVDVEVEX0VER0U6IDEwLFxuICAvKiogRS5nLiAjZm9vIC0+ICNiYXIgKi9cbiAgRElSRUNURURfRURHRTogMTEsXG4gIC8qKiBFLmcuICQjZm9vIC0+ICNiYXIgKi9cbiAgTk9ERV9TT1VSQ0U6IDEyLFxuICAvKiogRS5nLiAjZm9vIC0+ICQjYmFyICovXG4gIE5PREVfVEFSR0VUOiAxMyxcbiAgLyoqIEUuZy4gJCNmb28gPC0+ICNiYXIgKi9cbiAgTk9ERV9ORUlHSEJPUjogMTQsXG4gIC8qKiBFLmcuICNmb28gPiAjYmFyICovXG4gIENISUxEOiAxNSxcbiAgLyoqIEUuZy4gI2ZvbyAjYmFyICovXG4gIERFU0NFTkRBTlQ6IDE2LFxuICAvKiogRS5nLiAkI2ZvbyA+ICNiYXIgKi9cbiAgUEFSRU5UOiAxNyxcbiAgLyoqIEUuZy4gJCNmb28gI2JhciAqL1xuICBBTkNFU1RPUjogMTgsXG4gIC8qKiBFLmcuICNmb28gPiAkYmFyID4gI2JheiAqL1xuICBDT01QT1VORF9TUExJVDogMTksXG4gIC8qKiBBbHdheXMgbWF0Y2hlcywgdXNlZnVsIHBsYWNlaG9sZGVyIGZvciBzdWJqZWN0IGluIGBDT01QT1VORF9TUExJVGAgKi9cbiAgVFJVRTogMjBcbn07XG5cbnZhciBzdGF0ZVNlbGVjdG9ycyA9IFt7XG4gIHNlbGVjdG9yOiAnOnNlbGVjdGVkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnNlbGVjdGVkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6dW5zZWxlY3RlZCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuc2VsZWN0ZWQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpzZWxlY3RhYmxlJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bnNlbGVjdGFibGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLnNlbGVjdGFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpsb2NrZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUubG9ja2VkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6dW5sb2NrZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmxvY2tlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnZpc2libGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUudmlzaWJsZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmhpZGRlbicsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUudmlzaWJsZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnRyYW5zcGFyZW50JyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnRyYW5zcGFyZW50KCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6Z3JhYmJlZCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5ncmFiYmVkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6ZnJlZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuZ3JhYmJlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnJlbW92ZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUucmVtb3ZlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmluc2lkZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUucmVtb3ZlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmdyYWJiYWJsZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5ncmFiYmFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bmdyYWJiYWJsZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuZ3JhYmJhYmxlKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6YW5pbWF0ZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYW5pbWF0ZWQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bmFuaW1hdGVkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5hbmltYXRlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnBhcmVudCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc1BhcmVudCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNoaWxkbGVzcycsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc0NoaWxkbGVzcygpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNoaWxkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpvcnBoYW4nLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNPcnBoYW4oKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpub25vcnBoYW4nLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNDaGlsZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNvbXBvdW5kJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICByZXR1cm4gZWxlLmlzUGFyZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGUuc291cmNlKCkuaXNQYXJlbnQoKSB8fCBlbGUudGFyZ2V0KCkuaXNQYXJlbnQoKTtcbiAgICB9XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6bG9vcCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc0xvb3AoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpzaW1wbGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNTaW1wbGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzphY3RpdmUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYWN0aXZlKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6aW5hY3RpdmUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmFjdGl2ZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmJhY2tncm91bmRpbmcnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYmFja2dyb3VuZGluZygpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOm5vbmJhY2tncm91bmRpbmcnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmJhY2tncm91bmRpbmcoKTtcbiAgfVxufV0uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAvLyBuLmIuIHNlbGVjdG9ycyB0aGF0IGFyZSBzdGFydGluZyBzdWJzdHJpbmdzIG9mIG90aGVycyBtdXN0IGhhdmUgdGhlIGxvbmdlciBvbmVzIGZpcnN0XG4gIHJldHVybiBkZXNjZW5kaW5nKGEuc2VsZWN0b3IsIGIuc2VsZWN0b3IpO1xufSk7XG52YXIgbG9va3VwID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsVG9GbiA9IHt9O1xuICB2YXIgcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZVNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgIHMgPSBzdGF0ZVNlbGVjdG9yc1tpXTtcbiAgICBzZWxUb0ZuW3Muc2VsZWN0b3JdID0gcy5tYXRjaGVzO1xuICB9XG4gIHJldHVybiBzZWxUb0ZuO1xufSgpO1xudmFyIHN0YXRlU2VsZWN0b3JNYXRjaGVzID0gZnVuY3Rpb24gc3RhdGVTZWxlY3Rvck1hdGNoZXMoc2VsLCBlbGUpIHtcbiAgcmV0dXJuIGxvb2t1cFtzZWxdKGVsZSk7XG59O1xudmFyIHN0YXRlU2VsZWN0b3JSZWdleCA9ICcoJyArIHN0YXRlU2VsZWN0b3JzLm1hcChmdW5jdGlvbiAocykge1xuICByZXR1cm4gcy5zZWxlY3Rvcjtcbn0pLmpvaW4oJ3wnKSArICcpJztcblxuLy8gd2hlbiBhIHRva2VuIGxpa2UgYSB2YXJpYWJsZSBoYXMgZXNjYXBlZCBtZXRhIGNoYXJhY3RlcnMsIHdlIG5lZWQgdG8gY2xlYW4gdGhlIGJhY2tzbGFzaGVzIG91dFxuLy8gc28gdGhhdCB2YWx1ZXMgZ2V0IGNvbXBhcmVkIHByb3Blcmx5IGluIFNlbGVjdG9yLmZpbHRlcigpXG52YXIgY2xlYW5NZXRhQ2hhcnMgPSBmdW5jdGlvbiBjbGVhbk1ldGFDaGFycyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxcXFxcKCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKScsICdnJyksIGZ1bmN0aW9uIChtYXRjaCwgJDEpIHtcbiAgICByZXR1cm4gJDE7XG4gIH0pO1xufTtcbnZhciByZXBsYWNlTGFzdFF1ZXJ5ID0gZnVuY3Rpb24gcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgZXhhbWluaW5nUXVlcnksIHJlcGxhY2VtZW50UXVlcnkpIHtcbiAgc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV0gPSByZXBsYWNlbWVudFF1ZXJ5O1xufTtcblxuLy8gTk9URTogYWRkIG5ldyBleHByZXNzaW9uIHN5bnRheCBoZXJlIHRvIGhhdmUgaXQgcmVjb2duaXNlZCBieSB0aGUgcGFyc2VyO1xuLy8gLSBhIHF1ZXJ5IGNvbnRhaW5zIGFsbCBhZGphY2VudCAoaS5lLiBubyBzZXBhcmF0b3IgaW4gYmV0d2VlbikgZXhwcmVzc2lvbnM7XG4vLyAtIHRoZSBjdXJyZW50IHF1ZXJ5IGlzIHN0b3JlZCBpbiBzZWxlY3RvcltpXVxuLy8gLSB5b3UgbmVlZCB0byBjaGVjayB0aGUgcXVlcnkgb2JqZWN0cyBpbiBtYXRjaCgpIGZvciBpdCBhY3R1YWxseSBmaWx0ZXIgcHJvcGVybHksIGJ1dCB0aGF0J3MgcHJldHR5IHN0cmFpZ2h0IGZvcndhcmRcbnZhciBleHBycyA9IFt7XG4gIG5hbWU6ICdncm91cCcsXG4gIC8vIGp1c3QgdXNlZCBmb3IgaWRlbnRpZnlpbmcgd2hlbiBkZWJ1Z2dpbmdcbiAgcXVlcnk6IHRydWUsXG4gIHJlZ2V4OiAnKCcgKyB0b2tlbnMuZ3JvdXAgKyAnKScsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGdyb3VwID0gX3JlZjJbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5HUk9VUCxcbiAgICAgIHZhbHVlOiBncm91cCA9PT0gJyonID8gZ3JvdXAgOiBncm91cCArICdzJ1xuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdzdGF0ZScsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogc3RhdGVTZWxlY3RvclJlZ2V4LFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAxKSxcbiAgICAgIHN0YXRlID0gX3JlZjRbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5TVEFURSxcbiAgICAgIHZhbHVlOiBzdGF0ZVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdpZCcsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFwjKCcgKyB0b2tlbnMuaWQgKyAnKScsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWY1KSB7XG4gICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDEpLFxuICAgICAgaWQgPSBfcmVmNlswXTtcbiAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICB0eXBlOiBUeXBlLklELFxuICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGlkKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdjbGFzc05hbWUnLFxuICBxdWVyeTogdHJ1ZSxcbiAgcmVnZXg6ICdcXFxcLignICsgdG9rZW5zLmNsYXNzTmFtZSArICcpJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjcpIHtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMSksXG4gICAgICBjbGFzc05hbWUgPSBfcmVmOFswXTtcbiAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICB0eXBlOiBUeXBlLkNMQVNTLFxuICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGNsYXNzTmFtZSlcbiAgICB9KTtcbiAgfVxufSwge1xuICBuYW1lOiAnZGF0YUV4aXN0cycsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjkpIHtcbiAgICB2YXIgX3JlZjEwID0gX3NsaWNlZFRvQXJyYXkoX3JlZjksIDEpLFxuICAgICAgdmFyaWFibGUgPSBfcmVmMTBbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5EQVRBX0VYSVNULFxuICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKHZhcmlhYmxlKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdkYXRhQ29tcGFyZScsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKignICsgdG9rZW5zLmNvbXBhcmF0b3JPcCArICcpXFxcXHMqKCcgKyB0b2tlbnMudmFsdWUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjExKSB7XG4gICAgdmFyIF9yZWYxMiA9IF9zbGljZWRUb0FycmF5KF9yZWYxMSwgMyksXG4gICAgICB2YXJpYWJsZSA9IF9yZWYxMlswXSxcbiAgICAgIGNvbXBhcmF0b3JPcCA9IF9yZWYxMlsxXSxcbiAgICAgIHZhbHVlID0gX3JlZjEyWzJdO1xuICAgIHZhciB2YWx1ZUlzU3RyaW5nID0gbmV3IFJlZ0V4cCgnXicgKyB0b2tlbnMuc3RyaW5nICsgJyQnKS5leGVjKHZhbHVlKSAhPSBudWxsO1xuICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5EQVRBX0NPTVBBUkUsXG4gICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnModmFyaWFibGUpLFxuICAgICAgb3BlcmF0b3I6IGNvbXBhcmF0b3JPcCxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdkYXRhQm9vbCcsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMuYm9vbE9wICsgJylcXFxccyooJyArIHRva2Vucy52YXJpYWJsZSArICcpXFxcXHMqXFxcXF0nLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTMpIHtcbiAgICB2YXIgX3JlZjE0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEzLCAyKSxcbiAgICAgIGJvb2xPcCA9IF9yZWYxNFswXSxcbiAgICAgIHZhcmlhYmxlID0gX3JlZjE0WzFdO1xuICAgIHF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgIHR5cGU6IFR5cGUuREFUQV9CT09MLFxuICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKHZhcmlhYmxlKSxcbiAgICAgIG9wZXJhdG9yOiBib29sT3BcbiAgICB9KTtcbiAgfVxufSwge1xuICBuYW1lOiAnbWV0YUNvbXBhcmUnLFxuICBxdWVyeTogdHJ1ZSxcbiAgcmVnZXg6ICdcXFxcW1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMubWV0YSArICcpXFxcXHMqKCcgKyB0b2tlbnMuY29tcGFyYXRvck9wICsgJylcXFxccyooJyArIHRva2Vucy5udW1iZXIgKyAnKVxcXFxzKlxcXFxdXFxcXF0nLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAzKSxcbiAgICAgIG1ldGEgPSBfcmVmMTZbMF0sXG4gICAgICBjb21wYXJhdG9yT3AgPSBfcmVmMTZbMV0sXG4gICAgICBudW1iZXIgPSBfcmVmMTZbMl07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5NRVRBX0NPTVBBUkUsXG4gICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnMobWV0YSksXG4gICAgICBvcGVyYXRvcjogY29tcGFyYXRvck9wLFxuICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICduZXh0UXVlcnknLFxuICBzZXBhcmF0b3I6IHRydWUsXG4gIHJlZ2V4OiB0b2tlbnMuc2VwYXJhdG9yLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgdmFyIGN1cnJlbnRTdWJqZWN0ID0gc2VsZWN0b3IuY3VycmVudFN1YmplY3Q7XG4gICAgdmFyIGVkZ2VDb3VudCA9IHNlbGVjdG9yLmVkZ2VDb3VudDtcbiAgICB2YXIgY29tcG91bmRDb3VudCA9IHNlbGVjdG9yLmNvbXBvdW5kQ291bnQ7XG4gICAgdmFyIGxhc3RRID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgaWYgKGN1cnJlbnRTdWJqZWN0ICE9IG51bGwpIHtcbiAgICAgIGxhc3RRLnN1YmplY3QgPSBjdXJyZW50U3ViamVjdDtcbiAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gbnVsbDtcbiAgICB9XG4gICAgbGFzdFEuZWRnZUNvdW50ID0gZWRnZUNvdW50O1xuICAgIGxhc3RRLmNvbXBvdW5kQ291bnQgPSBjb21wb3VuZENvdW50O1xuICAgIHNlbGVjdG9yLmVkZ2VDb3VudCA9IDA7XG4gICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCA9IDA7XG5cbiAgICAvLyBnbyBvbiB0byBuZXh0IHF1ZXJ5XG4gICAgdmFyIG5leHRRdWVyeSA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCsrXSA9IG5ld1F1ZXJ5KCk7XG4gICAgcmV0dXJuIG5leHRRdWVyeTsgLy8gdGhpcyBpcyB0aGUgbmV3IHF1ZXJ5IHRvIGJlIGZpbGxlZCBieSB0aGUgZm9sbG93aW5nIGV4cHJzXG4gIH1cbn0sIHtcbiAgbmFtZTogJ2RpcmVjdGVkRWRnZScsXG4gIHNlcGFyYXRvcjogdHJ1ZSxcbiAgcmVnZXg6IHRva2Vucy5kaXJlY3RlZEVkZ2UsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgLy8gdW5kaXJlY3RlZCBlZGdlXG4gICAgICB2YXIgZWRnZVF1ZXJ5ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBzb3VyY2UgPSBxdWVyeTtcbiAgICAgIHZhciB0YXJnZXQgPSBuZXdRdWVyeSgpO1xuICAgICAgZWRnZVF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5ESVJFQ1RFRF9FREdFLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgZWRnZSByYXRoZXIgdGhhbiB0aGUgc291cmNlXG4gICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBxdWVyeSwgZWRnZVF1ZXJ5KTtcbiAgICAgIHNlbGVjdG9yLmVkZ2VDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgdGFyZ2V0IHF1ZXJ5IHdpdGggZXhwcmVzc2lvbnMgdGhhdCBmb2xsb3dcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNvdXJjZS90YXJnZXRcbiAgICAgIHZhciBzcmNUZ3RRID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfc291cmNlID0gcXVlcnk7XG4gICAgICB2YXIgX3RhcmdldCA9IG5ld1F1ZXJ5KCk7XG4gICAgICBzcmNUZ3RRLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5OT0RFX1NPVVJDRSxcbiAgICAgICAgc291cmNlOiBfc291cmNlLFxuICAgICAgICB0YXJnZXQ6IF90YXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgbmVpZ2hib3VyaG9vZCByYXRoZXIgdGhhbiB0aGUgbm9kZVxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIHNyY1RndFEpO1xuICAgICAgc2VsZWN0b3IuZWRnZUNvdW50Kys7XG4gICAgICByZXR1cm4gX3RhcmdldDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHRhcmdldCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogJ3VuZGlyZWN0ZWRFZGdlJyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLnVuZGlyZWN0ZWRFZGdlLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIHVuZGlyZWN0ZWQgZWRnZVxuICAgICAgdmFyIGVkZ2VRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgc291cmNlID0gcXVlcnk7XG4gICAgICB2YXIgdGFyZ2V0ID0gbmV3UXVlcnkoKTtcbiAgICAgIGVkZ2VRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuVU5ESVJFQ1RFRF9FREdFLFxuICAgICAgICBub2RlczogW3NvdXJjZSwgdGFyZ2V0XVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoZSBxdWVyeSBpbiB0aGUgc2VsZWN0b3Igc2hvdWxkIGJlIHRoZSBlZGdlIHJhdGhlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBlZGdlUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuZWRnZUNvdW50Kys7XG5cbiAgICAgIC8vIHdlJ3JlIG5vdyBwb3B1bGF0aW5nIHRoZSB0YXJnZXQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbmVpZ2hib3VyaG9vZFxuICAgICAgdmFyIG5ob29kUSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgbm9kZSA9IHF1ZXJ5O1xuICAgICAgdmFyIG5laWdoYm9yID0gbmV3UXVlcnkoKTtcbiAgICAgIG5ob29kUS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuTk9ERV9ORUlHSEJPUixcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgbmVpZ2hib3I6IG5laWdoYm9yXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhlIHF1ZXJ5IGluIHRoZSBzZWxlY3RvciBzaG91bGQgYmUgdGhlIG5laWdoYm91cmhvb2QgcmF0aGVyIHRoYW4gdGhlIG5vZGVcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBuaG9vZFEpO1xuICAgICAgcmV0dXJuIG5laWdoYm9yOyAvLyBub3cgcG9wdWxhdGluZyB0aGUgbmVpZ2hib3Igd2l0aCBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogJ2NoaWxkJyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLmNoaWxkLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIGRlZmF1bHQ6IGNoaWxkIHF1ZXJ5XG4gICAgICB2YXIgcGFyZW50Q2hpbGRRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgY2hpbGQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIHBhcmVudCA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgcGFyZW50Q2hpbGRRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ0hJTEQsXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBjaGlsZDogY2hpbGRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIHBhcmVudENoaWxkUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgY2hpbGQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT09IHF1ZXJ5KSB7XG4gICAgICAvLyBjb21wb3VuZCBzcGxpdCBxdWVyeVxuICAgICAgdmFyIGNvbXBvdW5kID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBsZWZ0ID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgcmlnaHQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIHN1YmplY3QgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIF9jaGlsZCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX3BhcmVudCA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgIC8vIHNldCB1cCB0aGUgcm9vdCBjb21wb3VuZCBxXG4gICAgICBjb21wb3VuZC5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ09NUE9VTkRfU1BMSVQsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvcHVsYXRlIHRoZSBzdWJqZWN0IGFuZCByZXBsYWNlIHRoZSBxIGF0IHRoZSBvbGQgc3BvdCAod2l0aGluIGxlZnQpIHdpdGggVFJVRVxuICAgICAgc3ViamVjdC5jaGVja3MgPSBxdWVyeS5jaGVja3M7IC8vIHRha2UgdGhlIGNoZWNrcyBmcm9tIHRoZSBsZWZ0XG4gICAgICBxdWVyeS5jaGVja3MgPSBbe1xuICAgICAgICB0eXBlOiBUeXBlLlRSVUVcbiAgICAgIH1dOyAvLyBjaGVja3MgdW5kZXIgbGVmdCByZWZzIHRoZSBzdWJqZWN0IGltcGxpY2l0bHlcblxuICAgICAgLy8gc2V0IHVwIHRoZSByaWdodCBxXG4gICAgICBfcGFyZW50LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5UUlVFXG4gICAgICB9KTsgLy8gcGFyZW50IGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLlBBUkVOVCxcbiAgICAgICAgLy8gdHlwZSBpcyBzd2FwcGVkIG9uIHJpZ2h0IHNpZGUgcXVlcmllc1xuICAgICAgICBwYXJlbnQ6IF9wYXJlbnQsXG4gICAgICAgIGNoaWxkOiBfY2hpbGQgLy8gZW1wdHkgZm9yIG5vd1xuICAgICAgfSk7XG5cbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIGxlZnQsIGNvbXBvdW5kKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSByZWYgc2luY2Ugd2UgbW92ZWQgdGhpbmdzIGFyb3VuZCBmb3IgYHF1ZXJ5YFxuICAgICAgc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPSBzdWJqZWN0O1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuICAgICAgcmV0dXJuIF9jaGlsZDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHJpZ2h0IHNpZGUncyBjaGlsZFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwYXJlbnQgcXVlcnlcbiAgICAgIC8vIGluZm8gZm9yIHBhcmVudCBxdWVyeVxuICAgICAgdmFyIF9wYXJlbnQyID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfY2hpbGQyID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBwY1FDaGVja3MgPSBbe1xuICAgICAgICB0eXBlOiBUeXBlLlBBUkVOVCxcbiAgICAgICAgcGFyZW50OiBfcGFyZW50MixcbiAgICAgICAgY2hpbGQ6IF9jaGlsZDJcbiAgICAgIH1dO1xuXG4gICAgICAvLyB0aGUgcGFyZW50LWNoaWxkIHF1ZXJ5IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgcXVlcnkgcHJldmlvdXNseSBiZWluZyBwb3B1bGF0ZWRcbiAgICAgIF9wYXJlbnQyLmNoZWNrcyA9IHF1ZXJ5LmNoZWNrczsgLy8gdGhlIHByZXZpb3VzIHF1ZXJ5IGNvbnRhaW5zIHRoZSBjaGVja3MgZm9yIHRoZSBwYXJlbnRcbiAgICAgIHF1ZXJ5LmNoZWNrcyA9IHBjUUNoZWNrczsgLy8gcGMgcXVlcnkgdGFrZXMgb3ZlclxuXG4gICAgICBzZWxlY3Rvci5jb21wb3VuZENvdW50Kys7XG4gICAgICByZXR1cm4gX2NoaWxkMjsgLy8gd2UncmUgbm93IHBvcHVsYXRpbmcgdGhlIGNoaWxkXG4gICAgfVxuICB9XG59LCB7XG4gIG5hbWU6ICdkZXNjZW5kYW50JyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLmRlc2NlbmRhbnQsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgLy8gZGVmYXVsdDogZGVzY2VuZGFudCBxdWVyeVxuICAgICAgdmFyIGFuY0NoUXVlcnkgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGRlc2NlbmRhbnQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGFuY2VzdG9yID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICBhbmNDaFF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5ERVNDRU5EQU5ULFxuICAgICAgICBhbmNlc3RvcjogYW5jZXN0b3IsXG4gICAgICAgIGRlc2NlbmRhbnQ6IGRlc2NlbmRhbnRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIGFuY0NoUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgZGVzY2VuZGFudCBxdWVyeSB3aXRoIGV4cHJlc3Npb25zIHRoYXQgZm9sbG93XG4gICAgICByZXR1cm4gZGVzY2VuZGFudDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09PSBxdWVyeSkge1xuICAgICAgLy8gY29tcG91bmQgc3BsaXQgcXVlcnlcbiAgICAgIHZhciBjb21wb3VuZCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgbGVmdCA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHJpZ2h0ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBzdWJqZWN0ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfZGVzY2VuZGFudCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX2FuY2VzdG9yID0gbmV3UXVlcnkoKTtcblxuICAgICAgLy8gc2V0IHVwIHRoZSByb290IGNvbXBvdW5kIHFcbiAgICAgIGNvbXBvdW5kLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5DT01QT1VORF9TUExJVCxcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICB9KTtcblxuICAgICAgLy8gcG9wdWxhdGUgdGhlIHN1YmplY3QgYW5kIHJlcGxhY2UgdGhlIHEgYXQgdGhlIG9sZCBzcG90ICh3aXRoaW4gbGVmdCkgd2l0aCBUUlVFXG4gICAgICBzdWJqZWN0LmNoZWNrcyA9IHF1ZXJ5LmNoZWNrczsgLy8gdGFrZSB0aGUgY2hlY2tzIGZyb20gdGhlIGxlZnRcbiAgICAgIHF1ZXJ5LmNoZWNrcyA9IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuVFJVRVxuICAgICAgfV07IC8vIGNoZWNrcyB1bmRlciBsZWZ0IHJlZnMgdGhlIHN1YmplY3QgaW1wbGljaXRseVxuXG4gICAgICAvLyBzZXQgdXAgdGhlIHJpZ2h0IHFcbiAgICAgIF9hbmNlc3Rvci5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuVFJVRVxuICAgICAgfSk7IC8vIGFuY2VzdG9yIGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLkFOQ0VTVE9SLFxuICAgICAgICAvLyB0eXBlIGlzIHN3YXBwZWQgb24gcmlnaHQgc2lkZSBxdWVyaWVzXG4gICAgICAgIGFuY2VzdG9yOiBfYW5jZXN0b3IsXG4gICAgICAgIGRlc2NlbmRhbnQ6IF9kZXNjZW5kYW50IC8vIGVtcHR5IGZvciBub3dcbiAgICAgIH0pO1xuXG4gICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBsZWZ0LCBjb21wb3VuZCk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgcmVmIHNpbmNlIHdlIG1vdmVkIHRoaW5ncyBhcm91bmQgZm9yIGBxdWVyeWBcbiAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gc3ViamVjdDtcbiAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgIHJldHVybiBfZGVzY2VuZGFudDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHJpZ2h0IHNpZGUncyBkZXNjZW5kYW50XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFuY2VzdG9yIHF1ZXJ5XG4gICAgICAvLyBpbmZvIGZvciBwYXJlbnQgcXVlcnlcbiAgICAgIHZhciBfYW5jZXN0b3IyID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfZGVzY2VuZGFudDIgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGFkUUNoZWNrcyA9IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuQU5DRVNUT1IsXG4gICAgICAgIGFuY2VzdG9yOiBfYW5jZXN0b3IyLFxuICAgICAgICBkZXNjZW5kYW50OiBfZGVzY2VuZGFudDJcbiAgICAgIH1dO1xuXG4gICAgICAvLyB0aGUgcGFyZW50LWNoaWxkIHF1ZXJ5IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgcXVlcnkgcHJldmlvdXNseSBiZWluZyBwb3B1bGF0ZWRcbiAgICAgIF9hbmNlc3RvcjIuY2hlY2tzID0gcXVlcnkuY2hlY2tzOyAvLyB0aGUgcHJldmlvdXMgcXVlcnkgY29udGFpbnMgdGhlIGNoZWNrcyBmb3IgdGhlIHBhcmVudFxuICAgICAgcXVlcnkuY2hlY2tzID0gYWRRQ2hlY2tzOyAvLyBwYyBxdWVyeSB0YWtlcyBvdmVyXG5cbiAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgIHJldHVybiBfZGVzY2VuZGFudDI7IC8vIHdlJ3JlIG5vdyBwb3B1bGF0aW5nIHRoZSBjaGlsZFxuICAgIH1cbiAgfVxufSwge1xuICBuYW1lOiAnc3ViamVjdCcsXG4gIG1vZGlmaWVyOiB0cnVlLFxuICByZWdleDogdG9rZW5zLnN1YmplY3QsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgIT0gbnVsbCAmJiBzZWxlY3Rvci5jdXJyZW50U3ViamVjdCAhPT0gcXVlcnkpIHtcbiAgICAgIHdhcm4oJ1JlZGVmaW5pdGlvbiBvZiBzdWJqZWN0IGluIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IudG9TdHJpbmcoKSArICdgJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gcXVlcnk7XG4gICAgdmFyIHRvcFEgPSBzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGggLSAxXTtcbiAgICB2YXIgdG9wQ2hrID0gdG9wUS5jaGVja3NbMF07XG4gICAgdmFyIHRvcFR5cGUgPSB0b3BDaGsgPT0gbnVsbCA/IG51bGwgOiB0b3BDaGsudHlwZTtcbiAgICBpZiAodG9wVHlwZSA9PT0gVHlwZS5ESVJFQ1RFRF9FREdFKSB7XG4gICAgICAvLyBkaXJlY3RlZCBlZGdlIHdpdGggc3ViamVjdCBvbiB0aGUgdGFyZ2V0XG5cbiAgICAgIC8vIGNoYW5nZSB0byB0YXJnZXQgbm9kZSBjaGVja1xuICAgICAgdG9wQ2hrLnR5cGUgPSBUeXBlLk5PREVfVEFSR0VUO1xuICAgIH0gZWxzZSBpZiAodG9wVHlwZSA9PT0gVHlwZS5VTkRJUkVDVEVEX0VER0UpIHtcbiAgICAgIC8vIHVuZGlyZWN0ZWQgZWRnZSB3aXRoIHN1YmplY3Qgb24gdGhlIHNlY29uZCBub2RlXG5cbiAgICAgIC8vIGNoYW5nZSB0byBuZWlnaGJvciBjaGVja1xuICAgICAgdG9wQ2hrLnR5cGUgPSBUeXBlLk5PREVfTkVJR0hCT1I7XG4gICAgICB0b3BDaGsubm9kZSA9IHRvcENoay5ub2Rlc1sxXTsgLy8gc2Vjb25kIG5vZGUgaXMgc3ViamVjdFxuICAgICAgdG9wQ2hrLm5laWdoYm9yID0gdG9wQ2hrLm5vZGVzWzBdO1xuXG4gICAgICAvLyBjbGVhbiB1cCB1bnVzZWQgZmllbGRzIGZvciBuZXcgdHlwZVxuICAgICAgdG9wQ2hrLm5vZGVzID0gbnVsbDtcbiAgICB9XG4gIH1cbn1dO1xuZXhwcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICByZXR1cm4gZS5yZWdleE9iaiA9IG5ldyBSZWdFeHAoJ14nICsgZS5yZWdleCk7XG59KTtcblxuLyoqXG4gKiBPZiBhbGwgdGhlIGV4cHJlc3Npb25zLCBmaW5kIHRoZSBmaXJzdCBtYXRjaCBpbiB0aGUgcmVtYWluaW5nIHRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtYWluaW5nIFRoZSByZW1haW5pbmcgdGV4dCB0byBwYXJzZVxuICogQHJldHVybnMgVGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBhbmQgdGhlIG5ld2x5IHJlbWFpbmluZyB0ZXh0IGB7IGV4cHIsIG1hdGNoLCBuYW1lLCByZW1haW5pbmcgfWBcbiAqL1xudmFyIGNvbnN1bWVFeHByID0gZnVuY3Rpb24gY29uc3VtZUV4cHIocmVtYWluaW5nKSB7XG4gIHZhciBleHByO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBuYW1lO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGV4cHJzLmxlbmd0aDsgaisrKSB7XG4gICAgdmFyIGUgPSBleHByc1tqXTtcbiAgICB2YXIgbiA9IGUubmFtZTtcbiAgICB2YXIgbSA9IHJlbWFpbmluZy5tYXRjaChlLnJlZ2V4T2JqKTtcbiAgICBpZiAobSAhPSBudWxsKSB7XG4gICAgICBtYXRjaCA9IG07XG4gICAgICBleHByID0gZTtcbiAgICAgIG5hbWUgPSBuO1xuICAgICAgdmFyIGNvbnN1bWVkID0gbVswXTtcbiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoY29uc3VtZWQubGVuZ3RoKTtcbiAgICAgIGJyZWFrOyAvLyB3ZSd2ZSBjb25zdW1lZCBvbmUgZXhwciwgc28gd2UgY2FuIHJldHVybiBub3dcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cHI6IGV4cHIsXG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcmVtYWluaW5nOiByZW1haW5pbmdcbiAgfTtcbn07XG5cbi8qKlxuICogQ29uc3VtZSBhbGwgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbWFpbmluZyBUaGUgdGV4dCB0byBjb25zdW1lXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZFxuICovXG52YXIgY29uc3VtZVdoaXRlc3BhY2UgPSBmdW5jdGlvbiBjb25zdW1lV2hpdGVzcGFjZShyZW1haW5pbmcpIHtcbiAgdmFyIG1hdGNoID0gcmVtYWluaW5nLm1hdGNoKC9eXFxzKy8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgY29uc3VtZWQgPSBtYXRjaFswXTtcbiAgICByZW1haW5pbmcgPSByZW1haW5pbmcuc3Vic3RyaW5nKGNvbnN1bWVkLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHJlbWFpbmluZztcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIHN0cmluZyBhbmQgc3RvcmUgdGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBpbiB0aGUgU2VsZWN0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgVGhlIHNlbGVjdG9yIHN0cmluZ1xuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3RvciB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xudmFyIHBhcnNlID0gZnVuY3Rpb24gcGFyc2Uoc2VsZWN0b3IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcmVtYWluaW5nID0gc2VsZi5pbnB1dFRleHQgPSBzZWxlY3RvcjtcbiAgdmFyIGN1cnJlbnRRdWVyeSA9IHNlbGZbMF0gPSBuZXdRdWVyeSgpO1xuICBzZWxmLmxlbmd0aCA9IDE7XG4gIHJlbWFpbmluZyA9IGNvbnN1bWVXaGl0ZXNwYWNlKHJlbWFpbmluZyk7IC8vIGdldCByaWQgb2YgbGVhZGluZyB3aGl0ZXNwYWNlXG5cbiAgZm9yICg7Oykge1xuICAgIHZhciBleHBySW5mbyA9IGNvbnN1bWVFeHByKHJlbWFpbmluZyk7XG4gICAgaWYgKGV4cHJJbmZvLmV4cHIgPT0gbnVsbCkge1xuICAgICAgd2FybignVGhlIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IgKyAnYGlzIGludmFsaWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBleHBySW5mby5tYXRjaC5zbGljZSgxKTtcblxuICAgICAgLy8gbGV0IHRoZSB0b2tlbiBwb3B1bGF0ZSB0aGUgc2VsZWN0b3Igb2JqZWN0IGluIGN1cnJlbnRRdWVyeVxuICAgICAgdmFyIHJldCA9IGV4cHJJbmZvLmV4cHIucG9wdWxhdGUoc2VsZiwgY3VycmVudFF1ZXJ5LCBhcmdzKTtcbiAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXhpdCBpZiBwb3B1bGF0aW9uIGZhaWxlZFxuICAgICAgfSBlbHNlIGlmIChyZXQgIT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50UXVlcnkgPSByZXQ7IC8vIGNoYW5nZSB0aGUgY3VycmVudCBxdWVyeSB0byBiZSBmaWxsZWQgaWYgdGhlIGV4cHIgc3BlY2lmaWVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVtYWluaW5nID0gZXhwckluZm8ucmVtYWluaW5nO1xuXG4gICAgLy8gd2UncmUgZG9uZSB3aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIHBhcnNlXG4gICAgaWYgKHJlbWFpbmluZy5tYXRjaCgvXlxccyokLykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgbGFzdFEgPSBzZWxmW3NlbGYubGVuZ3RoIC0gMV07XG4gIGlmIChzZWxmLmN1cnJlbnRTdWJqZWN0ICE9IG51bGwpIHtcbiAgICBsYXN0US5zdWJqZWN0ID0gc2VsZi5jdXJyZW50U3ViamVjdDtcbiAgfVxuICBsYXN0US5lZGdlQ291bnQgPSBzZWxmLmVkZ2VDb3VudDtcbiAgbGFzdFEuY29tcG91bmRDb3VudCA9IHNlbGYuY29tcG91bmRDb3VudDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHEgPSBzZWxmW2ldO1xuXG4gICAgLy8gaW4gZnV0dXJlLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGJlIGFsbG93ZWQgaWYgdGhlcmUgd2VyZSBvcGVyYXRvciBwcmVjZWRlbmNlIGFuZCBkZXRlY3Rpb24gb2YgaW52YWxpZCBjb21iaW5hdGlvbnNcbiAgICBpZiAocS5jb21wb3VuZENvdW50ID4gMCAmJiBxLmVkZ2VDb3VudCA+IDApIHtcbiAgICAgIHdhcm4oJ1RoZSBzZWxlY3RvciBgJyArIHNlbGVjdG9yICsgJ2AgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChxLmVkZ2VDb3VudCA+IDEpIHtcbiAgICAgIHdhcm4oJ1RoZSBzZWxlY3RvciBgJyArIHNlbGVjdG9yICsgJ2AgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHEuZWRnZUNvdW50ID09PSAxKSB7XG4gICAgICB3YXJuKCdUaGUgc2VsZWN0b3IgYCcgKyBzZWxlY3RvciArICdgIGlzIGRlcHJlY2F0ZWQuICBFZGdlIHNlbGVjdG9ycyBkbyBub3QgdGFrZSBlZmZlY3Qgb24gY2hhbmdlcyB0byBzb3VyY2UgYW5kIHRhcmdldCBub2RlcyBhZnRlciBhbiBlZGdlIGlzIGFkZGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIFVzZSBhIGNsYXNzIG9yIGRhdGEgc2VsZWN0b3Igb24gZWRnZXMgaW5zdGVhZCwgdXBkYXRpbmcgdGhlIGNsYXNzIG9yIGRhdGEgb2YgYW4gZWRnZSB3aGVuIHlvdXIgYXBwIGRldGVjdHMgYSBjaGFuZ2UgaW4gc291cmNlIG9yIHRhcmdldCBub2Rlcy4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7IC8vIHN1Y2Nlc3Ncbn07XG5cbi8qKlxuICogR2V0IHRoZSBzZWxlY3RvciByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4gIFRoaXMgdmFsdWUgdXNlcyBkZWZhdWx0IGZvcm1hdHRpbmcsXG4gKiBzbyB0aGluZ3MgbGlrZSBzcGFjaW5nIG1heSBkaWZmZXIgZnJvbSB0aGUgaW5wdXQgdGV4dCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHNlbGVjdG9yIHN0cmluZ1xuICovXG52YXIgdG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgaWYgKHRoaXMudG9TdHJpbmdDYWNoZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmdDYWNoZTtcbiAgfVxuICB2YXIgY2xlYW4gPSBmdW5jdGlvbiBjbGVhbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG4gIHZhciBjbGVhblZhbCA9IGZ1bmN0aW9uIGNsZWFuVmFsKHZhbCkge1xuICAgIGlmIChzdHJpbmcodmFsKSkge1xuICAgICAgcmV0dXJuICdcIicgKyB2YWwgKyAnXCInO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2xlYW4odmFsKTtcbiAgICB9XG4gIH07XG4gIHZhciBzcGFjZSA9IGZ1bmN0aW9uIHNwYWNlKHZhbCkge1xuICAgIHJldHVybiAnICcgKyB2YWwgKyAnICc7XG4gIH07XG4gIHZhciBjaGVja1RvU3RyaW5nID0gZnVuY3Rpb24gY2hlY2tUb1N0cmluZyhjaGVjaywgc3ViamVjdCkge1xuICAgIHZhciB0eXBlID0gY2hlY2sudHlwZSxcbiAgICAgIHZhbHVlID0gY2hlY2sudmFsdWU7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFR5cGUuR1JPVVA6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZ3JvdXAgPSBjbGVhbih2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGdyb3VwLnN1YnN0cmluZygwLCBncm91cC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLkRBVEFfQ09NUEFSRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGNoZWNrLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcjtcbiAgICAgICAgICByZXR1cm4gJ1snICsgZmllbGQgKyBzcGFjZShjbGVhbihvcGVyYXRvcikpICsgY2xlYW5WYWwodmFsdWUpICsgJ10nO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuREFUQV9CT09MOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9vcGVyYXRvciA9IGNoZWNrLm9wZXJhdG9yLFxuICAgICAgICAgICAgX2ZpZWxkID0gY2hlY2suZmllbGQ7XG4gICAgICAgICAgcmV0dXJuICdbJyArIGNsZWFuKF9vcGVyYXRvcikgKyBfZmllbGQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5EQVRBX0VYSVNUOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9maWVsZDIgPSBjaGVjay5maWVsZDtcbiAgICAgICAgICByZXR1cm4gJ1snICsgX2ZpZWxkMiArICddJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLk1FVEFfQ09NUEFSRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfb3BlcmF0b3IyID0gY2hlY2sub3BlcmF0b3IsXG4gICAgICAgICAgICBfZmllbGQzID0gY2hlY2suZmllbGQ7XG4gICAgICAgICAgcmV0dXJuICdbWycgKyBfZmllbGQzICsgc3BhY2UoY2xlYW4oX29wZXJhdG9yMikpICsgY2xlYW5WYWwodmFsdWUpICsgJ11dJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLlNUQVRFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuSUQ6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gJyMnICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5DTEFTUzpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiAnLicgKyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLlBBUkVOVDpcbiAgICAgIGNhc2UgVHlwZS5DSElMRDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBxdWVyeVRvU3RyaW5nKGNoZWNrLnBhcmVudCwgc3ViamVjdCkgKyBzcGFjZSgnPicpICsgcXVlcnlUb1N0cmluZyhjaGVjay5jaGlsZCwgc3ViamVjdCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5BTkNFU1RPUjpcbiAgICAgIGNhc2UgVHlwZS5ERVNDRU5EQU5UOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHF1ZXJ5VG9TdHJpbmcoY2hlY2suYW5jZXN0b3IsIHN1YmplY3QpICsgJyAnICsgcXVlcnlUb1N0cmluZyhjaGVjay5kZXNjZW5kYW50LCBzdWJqZWN0KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLkNPTVBPVU5EX1NQTElUOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxocyA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2subGVmdCwgc3ViamVjdCk7XG4gICAgICAgICAgdmFyIHN1YiA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2suc3ViamVjdCwgc3ViamVjdCk7XG4gICAgICAgICAgdmFyIHJocyA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2sucmlnaHQsIHN1YmplY3QpO1xuICAgICAgICAgIHJldHVybiBsaHMgKyAobGhzLmxlbmd0aCA+IDAgPyAnICcgOiAnJykgKyBzdWIgKyByaHM7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5UUlVFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgcXVlcnlUb1N0cmluZyA9IGZ1bmN0aW9uIHF1ZXJ5VG9TdHJpbmcocXVlcnksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gcXVlcnkuY2hlY2tzLnJlZHVjZShmdW5jdGlvbiAoc3RyLCBjaGssIGkpIHtcbiAgICAgIHJldHVybiBzdHIgKyAoc3ViamVjdCA9PT0gcXVlcnkgJiYgaSA9PT0gMCA/ICckJyA6ICcnKSArIGNoZWNrVG9TdHJpbmcoY2hrLCBzdWJqZWN0KTtcbiAgICB9LCAnJyk7XG4gIH07XG4gIHZhciBzdHIgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpc1tpXTtcbiAgICBzdHIgKz0gcXVlcnlUb1N0cmluZyhxdWVyeSwgcXVlcnkuc3ViamVjdCk7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSAmJiBpIDwgdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICBzdHIgKz0gJywgJztcbiAgICB9XG4gIH1cbiAgdGhpcy50b1N0cmluZ0NhY2hlID0gc3RyO1xuICByZXR1cm4gc3RyO1xufTtcbnZhciBwYXJzZSQxID0ge1xuICBwYXJzZTogcGFyc2UsXG4gIHRvU3RyaW5nOiB0b1N0cmluZ1xufTtcblxudmFyIHZhbENtcCA9IGZ1bmN0aW9uIHZhbENtcChmaWVsZFZhbCwgb3BlcmF0b3IsIHZhbHVlKSB7XG4gIHZhciBtYXRjaGVzO1xuICB2YXIgaXNGaWVsZFN0ciA9IHN0cmluZyhmaWVsZFZhbCk7XG4gIHZhciBpc0ZpZWxkTnVtID0gbnVtYmVyJDEoZmllbGRWYWwpO1xuICB2YXIgaXNWYWxTdHIgPSBzdHJpbmcodmFsdWUpO1xuICB2YXIgZmllbGRTdHIsIHZhbFN0cjtcbiAgdmFyIGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlO1xuICB2YXIgbm90RXhwciA9IGZhbHNlO1xuICB2YXIgaXNJbmVxQ21wID0gZmFsc2U7XG4gIGlmIChvcGVyYXRvci5pbmRleE9mKCchJykgPj0gMCkge1xuICAgIG9wZXJhdG9yID0gb3BlcmF0b3IucmVwbGFjZSgnIScsICcnKTtcbiAgICBub3RFeHByID0gdHJ1ZTtcbiAgfVxuICBpZiAob3BlcmF0b3IuaW5kZXhPZignQCcpID49IDApIHtcbiAgICBvcGVyYXRvciA9IG9wZXJhdG9yLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgY2FzZUluc2Vuc2l0aXZlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNGaWVsZFN0ciB8fCBpc1ZhbFN0ciB8fCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBmaWVsZFN0ciA9ICFpc0ZpZWxkU3RyICYmICFpc0ZpZWxkTnVtID8gJycgOiAnJyArIGZpZWxkVmFsO1xuICAgIHZhbFN0ciA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBpZiB3ZSdyZSBkb2luZyBhIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiwgdGhlbiB3ZSdyZSB1c2luZyBhIFNUUklORyBjb21wYXJpc29uXG4gIC8vIGV2ZW4gaWYgd2UncmUgY29tcGFyaW5nIG51bWJlcnNcbiAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgIGZpZWxkVmFsID0gZmllbGRTdHIgPSBmaWVsZFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbHVlID0gdmFsU3RyID0gdmFsU3RyLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgIGNhc2UgJyo9JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0cikgPj0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJyQ9JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0ciwgZmllbGRTdHIubGVuZ3RoIC0gdmFsU3RyLmxlbmd0aCkgPj0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ149JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0cikgPT09IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc9JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFZhbCA9PT0gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc+JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPiB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJz49JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPj0gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc8JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPCB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJzw9JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPD0gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbWF0Y2hlcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBhcHBseSB0aGUgbm90IG9wLCBidXQgbnVsbCB2YWxzIGZvciBpbmVxdWFsaXRpZXMgc2hvdWxkIGFsd2F5cyBzdGF5IG5vbi1tYXRjaGluZ1xuICBpZiAobm90RXhwciAmJiAoZmllbGRWYWwgIT0gbnVsbCB8fCAhaXNJbmVxQ21wKSkge1xuICAgIG1hdGNoZXMgPSAhbWF0Y2hlcztcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG52YXIgYm9vbENtcCA9IGZ1bmN0aW9uIGJvb2xDbXAoZmllbGRWYWwsIG9wZXJhdG9yKSB7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlICc/JzpcbiAgICAgIHJldHVybiBmaWVsZFZhbCA/IHRydWUgOiBmYWxzZTtcbiAgICBjYXNlICchJzpcbiAgICAgIHJldHVybiBmaWVsZFZhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICBjYXNlICdeJzpcbiAgICAgIHJldHVybiBmaWVsZFZhbCA9PT0gdW5kZWZpbmVkO1xuICB9XG59O1xudmFyIGV4aXN0Q21wID0gZnVuY3Rpb24gZXhpc3RDbXAoZmllbGRWYWwpIHtcbiAgcmV0dXJuIGZpZWxkVmFsICE9PSB1bmRlZmluZWQ7XG59O1xudmFyIGRhdGEkMSA9IGZ1bmN0aW9uIGRhdGEoZWxlLCBmaWVsZCkge1xuICByZXR1cm4gZWxlLmRhdGEoZmllbGQpO1xufTtcbnZhciBtZXRhID0gZnVuY3Rpb24gbWV0YShlbGUsIGZpZWxkKSB7XG4gIHJldHVybiBlbGVbZmllbGRdKCk7XG59O1xuXG4vKiogQSBsb29rdXAgb2YgYG1hdGNoKGNoZWNrLCBlbGUpYCBmdW5jdGlvbnMgYnkgYFR5cGVgIGludCAqL1xudmFyIG1hdGNoID0gW107XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBxdWVyeSBtYXRjaGVzIGZvciB0aGUgZWxlbWVudFxuICogQHBhcmFtIHF1ZXJ5IFRoZSBgeyB0eXBlLCB2YWx1ZSwgLi4uIH1gIHF1ZXJ5IG9iamVjdFxuICogQHBhcmFtIGVsZSBUaGUgZWxlbWVudCB0byBjb21wYXJlIGFnYWluc3RcbiovXG52YXIgbWF0Y2hlcyQxID0gZnVuY3Rpb24gbWF0Y2hlcyhxdWVyeSwgZWxlKSB7XG4gIHJldHVybiBxdWVyeS5jaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoaykge1xuICAgIHJldHVybiBtYXRjaFtjaGsudHlwZV0oY2hrLCBlbGUpO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkdST1VQXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBncm91cCA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gZ3JvdXAgPT09ICcqJyB8fCBncm91cCA9PT0gZWxlLmdyb3VwKCk7XG59O1xubWF0Y2hbVHlwZS5TVEFURV0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgc3RhdGVTZWxlY3RvciA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gc3RhdGVTZWxlY3Rvck1hdGNoZXMoc3RhdGVTZWxlY3RvciwgZWxlKTtcbn07XG5tYXRjaFtUeXBlLklEXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBpZCA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gZWxlLmlkKCkgPT09IGlkO1xufTtcbm1hdGNoW1R5cGUuQ0xBU1NdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGNscyA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gZWxlLmhhc0NsYXNzKGNscyk7XG59O1xubWF0Y2hbVHlwZS5NRVRBX0NPTVBBUkVdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcixcbiAgICB2YWx1ZSA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gdmFsQ21wKG1ldGEoZWxlLCBmaWVsZCksIG9wZXJhdG9yLCB2YWx1ZSk7XG59O1xubWF0Y2hbVHlwZS5EQVRBX0NPTVBBUkVdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcixcbiAgICB2YWx1ZSA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gdmFsQ21wKGRhdGEkMShlbGUsIGZpZWxkKSwgb3BlcmF0b3IsIHZhbHVlKTtcbn07XG5tYXRjaFtUeXBlLkRBVEFfQk9PTF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgZmllbGQgPSBjaGVjay5maWVsZCxcbiAgICBvcGVyYXRvciA9IGNoZWNrLm9wZXJhdG9yO1xuICByZXR1cm4gYm9vbENtcChkYXRhJDEoZWxlLCBmaWVsZCksIG9wZXJhdG9yKTtcbn07XG5tYXRjaFtUeXBlLkRBVEFfRVhJU1RdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQ7XG4gICAgY2hlY2sub3BlcmF0b3I7XG4gIHJldHVybiBleGlzdENtcChkYXRhJDEoZWxlLCBmaWVsZCkpO1xufTtcbm1hdGNoW1R5cGUuVU5ESVJFQ1RFRF9FREdFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBxQSA9IGNoZWNrLm5vZGVzWzBdO1xuICB2YXIgcUIgPSBjaGVjay5ub2Rlc1sxXTtcbiAgdmFyIHNyYyA9IGVsZS5zb3VyY2UoKTtcbiAgdmFyIHRndCA9IGVsZS50YXJnZXQoKTtcbiAgcmV0dXJuIG1hdGNoZXMkMShxQSwgc3JjKSAmJiBtYXRjaGVzJDEocUIsIHRndCkgfHwgbWF0Y2hlcyQxKHFCLCBzcmMpICYmIG1hdGNoZXMkMShxQSwgdGd0KTtcbn07XG5tYXRjaFtUeXBlLk5PREVfTkVJR0hCT1JdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5ub2RlLCBlbGUpICYmIGVsZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4uaXNOb2RlKCkgJiYgbWF0Y2hlcyQxKGNoZWNrLm5laWdoYm9yLCBuKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5ESVJFQ1RFRF9FREdFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2suc291cmNlLCBlbGUuc291cmNlKCkpICYmIG1hdGNoZXMkMShjaGVjay50YXJnZXQsIGVsZS50YXJnZXQoKSk7XG59O1xubWF0Y2hbVHlwZS5OT0RFX1NPVVJDRV0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnNvdXJjZSwgZWxlKSAmJiBlbGUub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4uaXNOb2RlKCkgJiYgbWF0Y2hlcyQxKGNoZWNrLnRhcmdldCwgbik7XG4gIH0pO1xufTtcbm1hdGNoW1R5cGUuTk9ERV9UQVJHRVRdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay50YXJnZXQsIGVsZSkgJiYgZWxlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbiAobikge1xuICAgIHJldHVybiBuLmlzTm9kZSgpICYmIG1hdGNoZXMkMShjaGVjay5zb3VyY2UsIG4pO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkNISUxEXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2suY2hpbGQsIGVsZSkgJiYgbWF0Y2hlcyQxKGNoZWNrLnBhcmVudCwgZWxlLnBhcmVudCgpKTtcbn07XG5tYXRjaFtUeXBlLlBBUkVOVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnBhcmVudCwgZWxlKSAmJiBlbGUuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5jaGlsZCwgYyk7XG4gIH0pO1xufTtcbm1hdGNoW1R5cGUuREVTQ0VOREFOVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmRlc2NlbmRhbnQsIGVsZSkgJiYgZWxlLmFuY2VzdG9ycygpLnNvbWUoZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmFuY2VzdG9yLCBhKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5BTkNFU1RPUl0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmFuY2VzdG9yLCBlbGUpICYmIGVsZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24gKGQpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmRlc2NlbmRhbnQsIGQpO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkNPTVBPVU5EX1NQTElUXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2suc3ViamVjdCwgZWxlKSAmJiBtYXRjaGVzJDEoY2hlY2subGVmdCwgZWxlKSAmJiBtYXRjaGVzJDEoY2hlY2sucmlnaHQsIGVsZSk7XG59O1xubWF0Y2hbVHlwZS5UUlVFXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xubWF0Y2hbVHlwZS5DT0xMRUNUSU9OXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBjb2xsZWN0aW9uID0gY2hlY2sudmFsdWU7XG4gIHJldHVybiBjb2xsZWN0aW9uLmhhcyhlbGUpO1xufTtcbm1hdGNoW1R5cGUuRklMVEVSXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBmaWx0ZXIgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIGZpbHRlcihlbGUpO1xufTtcblxuLy8gZmlsdGVyIGFuIGV4aXN0aW5nIGNvbGxlY3Rpb25cbnZhciBmaWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gZm9yIDEgaWQgI2ZvbyBxdWVyaWVzLCBqdXN0IGdldCB0aGUgZWxlbWVudFxuICBpZiAoc2VsZi5sZW5ndGggPT09IDEgJiYgc2VsZlswXS5jaGVja3MubGVuZ3RoID09PSAxICYmIHNlbGZbMF0uY2hlY2tzWzBdLnR5cGUgPT09IFR5cGUuSUQpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5nZXRFbGVtZW50QnlJZChzZWxmWzBdLmNoZWNrc1swXS52YWx1ZSkuY29sbGVjdGlvbigpO1xuICB9XG4gIHZhciBzZWxlY3RvckZ1bmN0aW9uID0gZnVuY3Rpb24gc2VsZWN0b3JGdW5jdGlvbihlbGVtZW50KSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgcXVlcnkgPSBzZWxmW2pdO1xuICAgICAgaWYgKG1hdGNoZXMkMShxdWVyeSwgZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgaWYgKHNlbGYudGV4dCgpID09IG51bGwpIHtcbiAgICBzZWxlY3RvckZ1bmN0aW9uID0gZnVuY3Rpb24gc2VsZWN0b3JGdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGNvbGxlY3Rpb24uZmlsdGVyKHNlbGVjdG9yRnVuY3Rpb24pO1xufTsgLy8gZmlsdGVyXG5cbi8vIGRvZXMgc2VsZWN0b3IgbWF0Y2ggYSBzaW5nbGUgZWxlbWVudD9cbnZhciBtYXRjaGVzID0gZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGYubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgcXVlcnkgPSBzZWxmW2pdO1xuICAgIGlmIChtYXRjaGVzJDEocXVlcnksIGVsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59OyAvLyBtYXRjaGVzXG5cbnZhciBtYXRjaGluZyA9IHtcbiAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgZmlsdGVyOiBmaWx0ZXJcbn07XG5cbnZhciBTZWxlY3RvciA9IGZ1bmN0aW9uIFNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gIHRoaXMuaW5wdXRUZXh0ID0gc2VsZWN0b3I7XG4gIHRoaXMuY3VycmVudFN1YmplY3QgPSBudWxsO1xuICB0aGlzLmNvbXBvdW5kQ291bnQgPSAwO1xuICB0aGlzLmVkZ2VDb3VudCA9IDA7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgaWYgKHNlbGVjdG9yID09IG51bGwgfHwgc3RyaW5nKHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5tYXRjaCgvXlxccyokLykpIDsgZWxzZSBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihzZWxlY3RvcikpIHtcbiAgICB0aGlzLmFkZFF1ZXJ5KHtcbiAgICAgIGNoZWNrczogW3tcbiAgICAgICAgdHlwZTogVHlwZS5DT0xMRUNUSU9OLFxuICAgICAgICB2YWx1ZTogc2VsZWN0b3IuY29sbGVjdGlvbigpXG4gICAgICB9XVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGZuJDYoc2VsZWN0b3IpKSB7XG4gICAgdGhpcy5hZGRRdWVyeSh7XG4gICAgICBjaGVja3M6IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuRklMVEVSLFxuICAgICAgICB2YWx1ZTogc2VsZWN0b3JcbiAgICAgIH1dXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHNlbGVjdG9yKSkge1xuICAgIGlmICghdGhpcy5wYXJzZShzZWxlY3RvcikpIHtcbiAgICAgIHRoaXMuaW52YWxpZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVycm9yKCdBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAnKTtcbiAgfVxufTtcbnZhciBzZWxmbiA9IFNlbGVjdG9yLnByb3RvdHlwZTtcbltwYXJzZSQxLCBtYXRjaGluZ10uZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICByZXR1cm4gZXh0ZW5kKHNlbGZuLCBwKTtcbn0pO1xuc2VsZm4udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0O1xufTtcbnNlbGZuLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5zZWxmbi5lcSA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiB0aGlzW2ldO1xufTtcbnNlbGZuLnNhbWVUZXh0ID0gZnVuY3Rpb24gKG90aGVyU2VsKSB7XG4gIHJldHVybiAhdGhpcy5pbnZhbGlkICYmICFvdGhlclNlbC5pbnZhbGlkICYmIHRoaXMudGV4dCgpID09PSBvdGhlclNlbC50ZXh0KCk7XG59O1xuc2VsZm4uYWRkUXVlcnkgPSBmdW5jdGlvbiAocSkge1xuICB0aGlzW3RoaXMubGVuZ3RoKytdID0gcTtcbn07XG5zZWxmbi5zZWxlY3RvciA9IHNlbGZuLnRvU3RyaW5nO1xuXG52YXIgZWxlc2ZuJGcgPSB7XG4gIGFsbEFyZTogZnVuY3Rpb24gYWxsQXJlKHNlbGVjdG9yKSB7XG4gICAgdmFyIHNlbE9iaiA9IG5ldyBTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIHNlbE9iai5tYXRjaGVzKGVsZSk7XG4gICAgfSk7XG4gIH0sXG4gIGlzOiBmdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICAgIHZhciBzZWxPYmogPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIHNlbE9iai5tYXRjaGVzKGVsZSk7XG4gICAgfSk7XG4gIH0sXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoZm4sIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXQgPSAhdGhpc0FyZyA/IGZuKHRoaXNbaV0sIGksIHRoaXMpIDogZm4uYXBwbHkodGhpc0FyZywgW3RoaXNbaV0sIGksIHRoaXNdKTtcbiAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGZuLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmV0ID0gIXRoaXNBcmcgPyBmbih0aGlzW2ldLCBpLCB0aGlzKSA6IGZuLmFwcGx5KHRoaXNBcmcsIFt0aGlzW2ldLCBpLCB0aGlzXSk7XG4gICAgICBpZiAoIXJldCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBzYW1lOiBmdW5jdGlvbiBzYW1lKGNvbGxlY3Rpb24pIHtcbiAgICAvLyBjaGVhcCBjb2xsZWN0aW9uIHJlZiBjaGVja1xuICAgIGlmICh0aGlzID09PSBjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29sbGVjdGlvbiA9IHRoaXMuY3koKS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIHZhciB0aGlzTGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIGNvbGxlY3Rpb25MZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblxuICAgIC8vIGNoZWFwIGxlbmd0aCBjaGVja1xuICAgIGlmICh0aGlzTGVuZ3RoICE9PSBjb2xsZWN0aW9uTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY2hlYXAgZWxlbWVudCByZWYgY2hlY2tcbiAgICBpZiAodGhpc0xlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXNbMF0gPT09IGNvbGxlY3Rpb25bMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uLmhhc0VsZW1lbnRXaXRoSWQoZWxlLmlkKCkpO1xuICAgIH0pO1xuICB9LFxuICBhbnlTYW1lOiBmdW5jdGlvbiBhbnlTYW1lKGNvbGxlY3Rpb24pIHtcbiAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbi5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICB9KTtcbiAgfSxcbiAgYWxsQXJlTmVpZ2hib3JzOiBmdW5jdGlvbiBhbGxBcmVOZWlnaGJvcnMoY29sbGVjdGlvbikge1xuICAgIGNvbGxlY3Rpb24gPSB0aGlzLmN5KCkuY29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICB2YXIgbmhvb2QgPSB0aGlzLm5laWdoYm9yaG9vZCgpO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBuaG9vZC5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICB9KTtcbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uIGNvbnRhaW5zKGNvbGxlY3Rpb24pIHtcbiAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBzZWxmLmhhc0VsZW1lbnRXaXRoSWQoZWxlLmlkKCkpO1xuICAgIH0pO1xuICB9XG59O1xuZWxlc2ZuJGcuYWxsQXJlTmVpZ2hib3VycyA9IGVsZXNmbiRnLmFsbEFyZU5laWdoYm9ycztcbmVsZXNmbiRnLmhhcyA9IGVsZXNmbiRnLmNvbnRhaW5zO1xuZWxlc2ZuJGcuZXF1YWwgPSBlbGVzZm4kZy5lcXVhbHMgPSBlbGVzZm4kZy5zYW1lO1xuXG52YXIgY2FjaGUgPSBmdW5jdGlvbiBjYWNoZShmbiwgbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJhdmVyc2FsQ2FjaGUoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgIHZhciBzZWxlY3Rvck9yRWxlcyA9IGFyZzE7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciBrZXk7XG4gICAgaWYgKHNlbGVjdG9yT3JFbGVzID09IG51bGwpIHtcbiAgICAgIGtleSA9ICcnO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihzZWxlY3Rvck9yRWxlcykgJiYgc2VsZWN0b3JPckVsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBrZXkgPSBzZWxlY3Rvck9yRWxlcy5pZCgpO1xuICAgIH1cbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDEgJiYga2V5KSB7XG4gICAgICB2YXIgX3AgPSBlbGVzWzBdLl9wcml2YXRlO1xuICAgICAgdmFyIHRjaCA9IF9wLnRyYXZlcnNhbENhY2hlID0gX3AudHJhdmVyc2FsQ2FjaGUgfHwge307XG4gICAgICB2YXIgY2ggPSB0Y2hbbmFtZV0gPSB0Y2hbbmFtZV0gfHwgW107XG4gICAgICB2YXIgaGFzaCA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgICAgIHZhciBjYWNoZUhpdCA9IGNoW2hhc2hdO1xuICAgICAgaWYgKGNhY2hlSGl0KSB7XG4gICAgICAgIHJldHVybiBjYWNoZUhpdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaFtoYXNoXSA9IGZuLmNhbGwoZWxlcywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKGVsZXMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBlbGVzZm4kZiA9IHtcbiAgcGFyZW50OiBmdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdO1xuXG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBzaW5nbGUgZWxlIGNhbGxcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzWzBdLl9wcml2YXRlLnBhcmVudDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBfcGFyZW50ID0gZWxlLl9wcml2YXRlLnBhcmVudDtcbiAgICAgIGlmIChfcGFyZW50KSB7XG4gICAgICAgIHBhcmVudHMucHVzaChfcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocGFyZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgcGFyZW50czogZnVuY3Rpb24gcGFyZW50cyhzZWxlY3Rvcikge1xuICAgIHZhciBwYXJlbnRzID0gW107XG4gICAgdmFyIGVsZXMgPSB0aGlzLnBhcmVudCgpO1xuICAgIHdoaWxlIChlbGVzLm5vbmVtcHR5KCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgcGFyZW50cy5wdXNoKGVsZSk7XG4gICAgICB9XG4gICAgICBlbGVzID0gZWxlcy5wYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocGFyZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgY29tbW9uQW5jZXN0b3JzOiBmdW5jdGlvbiBjb21tb25BbmNlc3RvcnMoc2VsZWN0b3IpIHtcbiAgICB2YXIgYW5jZXN0b3JzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgcGFyZW50cyA9IGVsZS5wYXJlbnRzKCk7XG4gICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMgfHwgcGFyZW50cztcbiAgICAgIGFuY2VzdG9ycyA9IGFuY2VzdG9ycy5pbnRlcnNlY3QocGFyZW50cyk7IC8vIGN1cnJlbnQgbGlzdCBtdXN0IGJlIGNvbW1vbiB3aXRoIGN1cnJlbnQgZWxlIHBhcmVudHMgc2V0XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ycy5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LFxuICBvcnBoYW5zOiBmdW5jdGlvbiBvcnBoYW5zKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNPcnBoYW4oKTtcbiAgICB9KS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LFxuICBub25vcnBoYW5zOiBmdW5jdGlvbiBub25vcnBoYW5zKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNDaGlsZCgpO1xuICAgIH0pLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIGNoaWxkcmVuOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgdmFyIGVsZUNoaWxkcmVuID0gZWxlLl9wcml2YXRlLmNoaWxkcmVuO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZUNoaWxkcmVuW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oY2hpbGRyZW4sIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICdjaGlsZHJlbicpLFxuICBzaWJsaW5nczogZnVuY3Rpb24gc2libGluZ3Moc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LFxuICBpc1BhcmVudDogZnVuY3Rpb24gaXNQYXJlbnQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoICE9PSAwO1xuICAgIH1cbiAgfSxcbiAgaXNDaGlsZGxlc3M6IGZ1bmN0aW9uIGlzQ2hpbGRsZXNzKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCkgJiYgZWxlLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gIH0sXG4gIGlzQ2hpbGQ6IGZ1bmN0aW9uIGlzQ2hpbGQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUucGFyZW50ICE9IG51bGw7XG4gICAgfVxuICB9LFxuICBpc09ycGhhbjogZnVuY3Rpb24gaXNPcnBoYW4oKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUucGFyZW50ID09IG51bGw7XG4gICAgfVxuICB9LFxuICBkZXNjZW5kYW50czogZnVuY3Rpb24gZGVzY2VuZGFudHMoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICBmdW5jdGlvbiBhZGQoZWxlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICBlbGVtZW50cy5wdXNoKGVsZSk7XG4gICAgICAgIGlmIChlbGUuY2hpbGRyZW4oKS5ub25lbXB0eSgpKSB7XG4gICAgICAgICAgYWRkKGVsZS5jaGlsZHJlbigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhZGQodGhpcy5jaGlsZHJlbigpKTtcbiAgICByZXR1cm4gdGhpcy5zcGF3bihlbGVtZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvckVhY2hDb21wb3VuZChlbGVzLCBmbiwgaW5jbHVkZVNlbGYsIHJlY3Vyc2l2ZVN0ZXApIHtcbiAgdmFyIHEgPSBbXTtcbiAgdmFyIGRpZCA9IG5ldyBTZXQkMSgpO1xuICB2YXIgY3kgPSBlbGVzLmN5KCk7XG4gIHZhciBoYXNDb21wb3VuZHMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIGlmIChpbmNsdWRlU2VsZikge1xuICAgICAgcS5wdXNoKGVsZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgIHJlY3Vyc2l2ZVN0ZXAocSwgZGlkLCBlbGUpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAocS5sZW5ndGggPiAwKSB7XG4gICAgdmFyIF9lbGUgPSBxLnNoaWZ0KCk7XG4gICAgZm4oX2VsZSk7XG4gICAgZGlkLmFkZChfZWxlLmlkKCkpO1xuICAgIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgIHJlY3Vyc2l2ZVN0ZXAocSwgZGlkLCBfZWxlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZXM7XG59XG5mdW5jdGlvbiBhZGRDaGlsZHJlbihxLCBkaWQsIGVsZSkge1xuICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBlbGUuX3ByaXZhdGUuY2hpbGRyZW47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoIWRpZC5oYXMoY2hpbGQuaWQoKSkpIHtcbiAgICAgICAgcS5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gdmVyeSBlZmZpY2llbnQgdmVyc2lvbiBvZiBlbGVzLmFkZCggZWxlcy5kZXNjZW5kYW50cygpICkuZm9yRWFjaCgpXG4vLyBmb3IgaW50ZXJuYWwgdXNlXG5lbGVzZm4kZi5mb3JFYWNoRG93biA9IGZ1bmN0aW9uIChmbikge1xuICB2YXIgaW5jbHVkZVNlbGYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHJldHVybiBmb3JFYWNoQ29tcG91bmQodGhpcywgZm4sIGluY2x1ZGVTZWxmLCBhZGRDaGlsZHJlbik7XG59O1xuZnVuY3Rpb24gYWRkUGFyZW50KHEsIGRpZCwgZWxlKSB7XG4gIGlmIChlbGUuaXNDaGlsZCgpKSB7XG4gICAgdmFyIHBhcmVudCA9IGVsZS5fcHJpdmF0ZS5wYXJlbnQ7XG4gICAgaWYgKCFkaWQuaGFzKHBhcmVudC5pZCgpKSkge1xuICAgICAgcS5wdXNoKHBhcmVudCk7XG4gICAgfVxuICB9XG59XG5lbGVzZm4kZi5mb3JFYWNoVXAgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdmFyIGluY2x1ZGVTZWxmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICByZXR1cm4gZm9yRWFjaENvbXBvdW5kKHRoaXMsIGZuLCBpbmNsdWRlU2VsZiwgYWRkUGFyZW50KTtcbn07XG5mdW5jdGlvbiBhZGRQYXJlbnRBbmRDaGlsZHJlbihxLCBkaWQsIGVsZSkge1xuICBhZGRQYXJlbnQocSwgZGlkLCBlbGUpO1xuICBhZGRDaGlsZHJlbihxLCBkaWQsIGVsZSk7XG59XG5lbGVzZm4kZi5mb3JFYWNoVXBBbmREb3duID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBpbmNsdWRlU2VsZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgcmV0dXJuIGZvckVhY2hDb21wb3VuZCh0aGlzLCBmbiwgaW5jbHVkZVNlbGYsIGFkZFBhcmVudEFuZENoaWxkcmVuKTtcbn07XG5cbi8vIGFsaWFzZXNcbmVsZXNmbiRmLmFuY2VzdG9ycyA9IGVsZXNmbiRmLnBhcmVudHM7XG5cbnZhciBmbiQ1LCBlbGVzZm4kZTtcbmZuJDUgPSBlbGVzZm4kZSA9IHtcbiAgZGF0YTogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAnZGF0YScsXG4gICAgYmluZGluZ0V2ZW50OiAnZGF0YScsXG4gICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nRXZlbnQ6ICdkYXRhJyxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgIGltbXV0YWJsZUtleXM6IHtcbiAgICAgICdpZCc6IHRydWUsXG4gICAgICAnc291cmNlJzogdHJ1ZSxcbiAgICAgICd0YXJnZXQnOiB0cnVlLFxuICAgICAgJ3BhcmVudCc6IHRydWVcbiAgICB9LFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByZW1vdmVEYXRhOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdkYXRhJyxcbiAgICBldmVudDogJ2RhdGEnLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgaW1tdXRhYmxlS2V5czoge1xuICAgICAgJ2lkJzogdHJ1ZSxcbiAgICAgICdzb3VyY2UnOiB0cnVlLFxuICAgICAgJ3RhcmdldCc6IHRydWUsXG4gICAgICAncGFyZW50JzogdHJ1ZVxuICAgIH0sXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHNjcmF0Y2g6IGRlZmluZS5kYXRhKHtcbiAgICBmaWVsZDogJ3NjcmF0Y2gnLFxuICAgIGJpbmRpbmdFdmVudDogJ3NjcmF0Y2gnLFxuICAgIGFsbG93QmluZGluZzogdHJ1ZSxcbiAgICBhbGxvd1NldHRpbmc6IHRydWUsXG4gICAgc2V0dGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IHRydWUsXG4gICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgIGFsbG93R2V0dGluZzogdHJ1ZSxcbiAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICB9KSxcbiAgcmVtb3ZlU2NyYXRjaDogZGVmaW5lLnJlbW92ZURhdGEoe1xuICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgZXZlbnQ6ICdzY3JhdGNoJyxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgdHJpZ2dlckV2ZW50OiB0cnVlLFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAncnNjcmF0Y2gnLFxuICAgIGFsbG93QmluZGluZzogZmFsc2UsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiBmYWxzZSxcbiAgICBhbGxvd0dldHRpbmc6IHRydWVcbiAgfSksXG4gIHJlbW92ZVJzY3JhdGNoOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdyc2NyYXRjaCcsXG4gICAgdHJpZ2dlckV2ZW50OiBmYWxzZVxuICB9KSxcbiAgaWQ6IGZ1bmN0aW9uIGlkKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFsaWFzZXNcbmZuJDUuYXR0ciA9IGZuJDUuZGF0YTtcbmZuJDUucmVtb3ZlQXR0ciA9IGZuJDUucmVtb3ZlRGF0YTtcbnZhciBkYXRhID0gZWxlc2ZuJGU7XG5cbnZhciBlbGVzZm4kZCA9IHt9O1xuZnVuY3Rpb24gZGVmaW5lRGVncmVlRnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmNsdWRlTG9vcHMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKGluY2x1ZGVMb29wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmNsdWRlTG9vcHMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNlbGYuaXNOb2RlKCkgJiYgIXNlbGYucmVtb3ZlZCgpKSB7XG4gICAgICB2YXIgZGVncmVlID0gMDtcbiAgICAgIHZhciBub2RlID0gc2VsZlswXTtcbiAgICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IG5vZGUuX3ByaXZhdGUuZWRnZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbm5lY3RlZEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlZGdlID0gY29ubmVjdGVkRWRnZXNbaV07XG4gICAgICAgIGlmICghaW5jbHVkZUxvb3BzICYmIGVkZ2UuaXNMb29wKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBkZWdyZWUgKz0gY2FsbGJhY2sobm9kZSwgZWRnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVncmVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xufVxuZXh0ZW5kKGVsZXNmbiRkLCB7XG4gIGRlZ3JlZTogZGVmaW5lRGVncmVlRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGVkZ2UpIHtcbiAgICBpZiAoZWRnZS5zb3VyY2UoKS5zYW1lKGVkZ2UudGFyZ2V0KCkpKSB7XG4gICAgICByZXR1cm4gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9KSxcbiAgaW5kZWdyZWU6IGRlZmluZURlZ3JlZUZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBlZGdlKSB7XG4gICAgaWYgKGVkZ2UudGFyZ2V0KCkuc2FtZShub2RlKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSksXG4gIG91dGRlZ3JlZTogZGVmaW5lRGVncmVlRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGVkZ2UpIHtcbiAgICBpZiAoZWRnZS5zb3VyY2UoKS5zYW1lKG5vZGUpKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KVxufSk7XG5mdW5jdGlvbiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbihkZWdyZWVGbiwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmNsdWRlTG9vcHMpIHtcbiAgICB2YXIgcmV0O1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gbm9kZXNbaV07XG4gICAgICB2YXIgZGVncmVlID0gZWxlW2RlZ3JlZUZuXShpbmNsdWRlTG9vcHMpO1xuICAgICAgaWYgKGRlZ3JlZSAhPT0gdW5kZWZpbmVkICYmIChyZXQgPT09IHVuZGVmaW5lZCB8fCBjYWxsYmFjayhkZWdyZWUsIHJldCkpKSB7XG4gICAgICAgIHJldCA9IGRlZ3JlZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn1cbmV4dGVuZChlbGVzZm4kZCwge1xuICBtaW5EZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtaW4pIHtcbiAgICByZXR1cm4gZGVncmVlIDwgbWluO1xuICB9KSxcbiAgbWF4RGVncmVlOiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbignZGVncmVlJywgZnVuY3Rpb24gKGRlZ3JlZSwgbWF4KSB7XG4gICAgcmV0dXJuIGRlZ3JlZSA+IG1heDtcbiAgfSksXG4gIG1pbkluZGVncmVlOiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbignaW5kZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtaW4pIHtcbiAgICByZXR1cm4gZGVncmVlIDwgbWluO1xuICB9KSxcbiAgbWF4SW5kZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdpbmRlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1heCkge1xuICAgIHJldHVybiBkZWdyZWUgPiBtYXg7XG4gIH0pLFxuICBtaW5PdXRkZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdvdXRkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtaW4pIHtcbiAgICByZXR1cm4gZGVncmVlIDwgbWluO1xuICB9KSxcbiAgbWF4T3V0ZGVncmVlOiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbignb3V0ZGVncmVlJywgZnVuY3Rpb24gKGRlZ3JlZSwgbWF4KSB7XG4gICAgcmV0dXJuIGRlZ3JlZSA+IG1heDtcbiAgfSlcbn0pO1xuZXh0ZW5kKGVsZXNmbiRkLCB7XG4gIHRvdGFsRGVncmVlOiBmdW5jdGlvbiB0b3RhbERlZ3JlZShpbmNsdWRlTG9vcHMpIHtcbiAgICB2YXIgdG90YWwgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbCArPSBub2Rlc1tpXS5kZWdyZWUoaW5jbHVkZUxvb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG59KTtcblxudmFyIGZuJDQsIGVsZXNmbiRjO1xudmFyIGJlZm9yZVBvc2l0aW9uU2V0ID0gZnVuY3Rpb24gYmVmb3JlUG9zaXRpb25TZXQoZWxlcywgbmV3UG9zLCBzaWxlbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgaWYgKCFlbGUubG9ja2VkKCkpIHtcbiAgICAgIHZhciBvbGRQb3MgPSBlbGUuX3ByaXZhdGUucG9zaXRpb247XG4gICAgICB2YXIgZGVsdGEgPSB7XG4gICAgICAgIHg6IG5ld1Bvcy54ICE9IG51bGwgPyBuZXdQb3MueCAtIG9sZFBvcy54IDogMCxcbiAgICAgICAgeTogbmV3UG9zLnkgIT0gbnVsbCA/IG5ld1Bvcy55IC0gb2xkUG9zLnkgOiAwXG4gICAgICB9O1xuICAgICAgaWYgKGVsZS5pc1BhcmVudCgpICYmICEoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSkge1xuICAgICAgICBlbGUuY2hpbGRyZW4oKS5zaGlmdChkZWx0YSwgc2lsZW50KTtcbiAgICAgIH1cbiAgICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICB9XG4gIH1cbn07XG52YXIgcG9zaXRpb25EZWYgPSB7XG4gIGZpZWxkOiAncG9zaXRpb24nLFxuICBiaW5kaW5nRXZlbnQ6ICdwb3NpdGlvbicsXG4gIGFsbG93QmluZGluZzogdHJ1ZSxcbiAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICBzZXR0aW5nRXZlbnQ6ICdwb3NpdGlvbicsXG4gIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICB0cmlnZ2VyRm5OYW1lOiAnZW1pdEFuZE5vdGlmeScsXG4gIGFsbG93R2V0dGluZzogdHJ1ZSxcbiAgdmFsaWRLZXlzOiBbJ3gnLCAneSddLFxuICBiZWZvcmVHZXQ6IGZ1bmN0aW9uIGJlZm9yZUdldChlbGUpIHtcbiAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgfSxcbiAgYmVmb3JlU2V0OiBmdW5jdGlvbiBiZWZvcmVTZXQoZWxlcywgbmV3UG9zKSB7XG4gICAgYmVmb3JlUG9zaXRpb25TZXQoZWxlcywgbmV3UG9zLCBmYWxzZSk7XG4gIH0sXG4gIG9uU2V0OiBmdW5jdGlvbiBvblNldChlbGVzKSB7XG4gICAgZWxlcy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgfSxcbiAgY2FuU2V0OiBmdW5jdGlvbiBjYW5TZXQoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUubG9ja2VkKCk7XG4gIH1cbn07XG5mbiQ0ID0gZWxlc2ZuJGMgPSB7XG4gIHBvc2l0aW9uOiBkZWZpbmUuZGF0YShwb3NpdGlvbkRlZiksXG4gIC8vIHBvc2l0aW9uIGJ1dCBubyBub3RpZmljYXRpb24gdG8gcmVuZGVyZXJcbiAgc2lsZW50UG9zaXRpb246IGRlZmluZS5kYXRhKGV4dGVuZCh7fSwgcG9zaXRpb25EZWYsIHtcbiAgICBhbGxvd0JpbmRpbmc6IGZhbHNlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogZmFsc2UsXG4gICAgYWxsb3dHZXR0aW5nOiBmYWxzZSxcbiAgICBiZWZvcmVTZXQ6IGZ1bmN0aW9uIGJlZm9yZVNldChlbGVzLCBuZXdQb3MpIHtcbiAgICAgIGJlZm9yZVBvc2l0aW9uU2V0KGVsZXMsIG5ld1BvcywgdHJ1ZSk7XG4gICAgfSxcbiAgICBvblNldDogZnVuY3Rpb24gb25TZXQoZWxlcykge1xuICAgICAgZWxlcy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICB9XG4gIH0pKSxcbiAgcG9zaXRpb25zOiBmdW5jdGlvbiBwb3NpdGlvbnMocG9zLCBzaWxlbnQpIHtcbiAgICBpZiAocGxhaW5PYmplY3QocG9zKSkge1xuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICB0aGlzLnNpbGVudFBvc2l0aW9uKHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aW9uKHBvcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmbiQ2KHBvcykpIHtcbiAgICAgIHZhciBfZm4gPSBwb3M7XG4gICAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgIHZhciBfcG9zID0gdm9pZCAwO1xuICAgICAgICBpZiAoX3BvcyA9IF9mbihlbGUsIGkpKSB7XG4gICAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgICAgZWxlLnNpbGVudFBvc2l0aW9uKF9wb3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGUucG9zaXRpb24oX3Bvcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBzaWxlbnRQb3NpdGlvbnM6IGZ1bmN0aW9uIHNpbGVudFBvc2l0aW9ucyhwb3MpIHtcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbnMocG9zLCB0cnVlKTtcbiAgfSxcbiAgc2hpZnQ6IGZ1bmN0aW9uIHNoaWZ0KGRpbSwgdmFsLCBzaWxlbnQpIHtcbiAgICB2YXIgZGVsdGE7XG4gICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICB4OiBudW1iZXIkMShkaW0ueCkgPyBkaW0ueCA6IDAsXG4gICAgICAgIHk6IG51bWJlciQxKGRpbS55KSA/IGRpbS55IDogMFxuICAgICAgfTtcbiAgICAgIHNpbGVudCA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyhkaW0pICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9O1xuICAgICAgZGVsdGFbZGltXSA9IHZhbDtcbiAgICB9XG4gICAgaWYgKGRlbHRhICE9IG51bGwpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcblxuICAgICAgICAvLyBleGNsdWRlIGFueSBub2RlIHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjYWxsaW5nIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSAmJiBlbGUuaXNDaGlsZCgpICYmIGVsZS5hbmNlc3RvcnMoKS5hbnlTYW1lKHRoaXMpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICB2YXIgbmV3UG9zID0ge1xuICAgICAgICAgIHg6IHBvcy54ICsgZGVsdGEueCxcbiAgICAgICAgICB5OiBwb3MueSArIGRlbHRhLnlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIGVsZS5zaWxlbnRQb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZS5wb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgc2lsZW50U2hpZnQ6IGZ1bmN0aW9uIHNpbGVudFNoaWZ0KGRpbSwgdmFsKSB7XG4gICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgIHRoaXMuc2hpZnQoZGltLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyhkaW0pICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgIHRoaXMuc2hpZnQoZGltLCB2YWwsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgLy8gZ2V0L3NldCB0aGUgcmVuZGVyZWQgKGkuZS4gb24gc2NyZWVuKSBwb3NpdG9uIG9mIHRoZSBlbGVtZW50XG4gIHJlbmRlcmVkUG9zaXRpb246IGZ1bmN0aW9uIHJlbmRlcmVkUG9zaXRpb24oZGltLCB2YWwpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgIHZhciBycG9zID0gcGxhaW5PYmplY3QoZGltKSA/IGRpbSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgc2V0dGluZyA9IHJwb3MgIT09IHVuZGVmaW5lZCB8fCB2YWwgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmcoZGltKTtcbiAgICBpZiAoZWxlICYmIGVsZS5pc05vZGUoKSkge1xuICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbGUgPSB0aGlzW2ldO1xuICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc2V0IG9uZSBkaW1lbnNpb25cbiAgICAgICAgICAgIF9lbGUucG9zaXRpb24oZGltLCAodmFsIC0gcGFuW2RpbV0pIC8gem9vbSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChycG9zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldCB3aG9sZSBwb3NpdGlvblxuICAgICAgICAgICAgX2VsZS5wb3NpdGlvbihyZW5kZXJlZFRvTW9kZWxQb3NpdGlvbihycG9zLCB6b29tLCBwYW4pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldHRpbmdcbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICBycG9zID0gbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24ocG9zLCB6b29tLCBwYW4pO1xuICAgICAgICBpZiAoZGltID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgd2hvbGUgcmVuZGVyZWQgcG9zaXRpb25cbiAgICAgICAgICByZXR1cm4gcnBvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvblxuICAgICAgICAgIHJldHVybiBycG9zW2RpbV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5nKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBmb3IgZW1wdHkgY29sbGVjdGlvbiBjYXNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgLy8gZ2V0L3NldCB0aGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICByZWxhdGl2ZVBvc2l0aW9uOiBmdW5jdGlvbiByZWxhdGl2ZVBvc2l0aW9uKGRpbSwgdmFsKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBwcG9zID0gcGxhaW5PYmplY3QoZGltKSA/IGRpbSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgc2V0dGluZyA9IHBwb3MgIT09IHVuZGVmaW5lZCB8fCB2YWwgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmcoZGltKTtcbiAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgICBpZiAoZWxlICYmIGVsZS5pc05vZGUoKSkge1xuICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbGUyID0gdGhpc1tpXTtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gaGFzQ29tcG91bmROb2RlcyA/IF9lbGUyLnBhcmVudCgpIDogbnVsbDtcbiAgICAgICAgICB2YXIgaGFzUGFyZW50ID0gcGFyZW50ICYmIHBhcmVudC5sZW5ndGggPiAwO1xuICAgICAgICAgIHZhciByZWxhdGl2ZVRvUGFyZW50ID0gaGFzUGFyZW50O1xuICAgICAgICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFswXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9yaWdpbiA9IHJlbGF0aXZlVG9QYXJlbnQgPyBwYXJlbnQucG9zaXRpb24oKSA6IHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldCBvbmUgZGltZW5zaW9uXG4gICAgICAgICAgICBfZWxlMi5wb3NpdGlvbihkaW0sIHZhbCArIG9yaWdpbltkaW1dKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBwb3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc2V0IHdob2xlIHBvc2l0aW9uXG4gICAgICAgICAgICBfZWxlMi5wb3NpdGlvbih7XG4gICAgICAgICAgICAgIHg6IHBwb3MueCArIG9yaWdpbi54LFxuICAgICAgICAgICAgICB5OiBwcG9zLnkgKyBvcmlnaW4ueVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXR0aW5nXG4gICAgICAgIHZhciBwb3MgPSBlbGUucG9zaXRpb24oKTtcbiAgICAgICAgdmFyIF9wYXJlbnQgPSBoYXNDb21wb3VuZE5vZGVzID8gZWxlLnBhcmVudCgpIDogbnVsbDtcbiAgICAgICAgdmFyIF9oYXNQYXJlbnQgPSBfcGFyZW50ICYmIF9wYXJlbnQubGVuZ3RoID4gMDtcbiAgICAgICAgdmFyIF9yZWxhdGl2ZVRvUGFyZW50ID0gX2hhc1BhcmVudDtcbiAgICAgICAgaWYgKF9oYXNQYXJlbnQpIHtcbiAgICAgICAgICBfcGFyZW50ID0gX3BhcmVudFswXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX29yaWdpbiA9IF9yZWxhdGl2ZVRvUGFyZW50ID8gX3BhcmVudC5wb3NpdGlvbigpIDoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9O1xuICAgICAgICBwcG9zID0ge1xuICAgICAgICAgIHg6IHBvcy54IC0gX29yaWdpbi54LFxuICAgICAgICAgIHk6IHBvcy55IC0gX29yaWdpbi55XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkaW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSB3aG9sZSByZW5kZXJlZCBwb3NpdGlvblxuICAgICAgICAgIHJldHVybiBwcG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uXG4gICAgICAgICAgcmV0dXJuIHBwb3NbZGltXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNldHRpbmcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGZvciBlbXB0eSBjb2xsZWN0aW9uIGNhc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuZm4kNC5tb2RlbFBvc2l0aW9uID0gZm4kNC5wb2ludCA9IGZuJDQucG9zaXRpb247XG5mbiQ0Lm1vZGVsUG9zaXRpb25zID0gZm4kNC5wb2ludHMgPSBmbiQ0LnBvc2l0aW9ucztcbmZuJDQucmVuZGVyZWRQb2ludCA9IGZuJDQucmVuZGVyZWRQb3NpdGlvbjtcbmZuJDQucmVsYXRpdmVQb2ludCA9IGZuJDQucmVsYXRpdmVQb3NpdGlvbjtcbnZhciBwb3NpdGlvbiA9IGVsZXNmbiRjO1xuXG52YXIgZm4kMywgZWxlc2ZuJGI7XG5mbiQzID0gZWxlc2ZuJGIgPSB7fTtcbmVsZXNmbiRiLnJlbmRlcmVkQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYmIgPSB0aGlzLmJvdW5kaW5nQm94KG9wdGlvbnMpO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIHZhciB6b29tID0gY3kuem9vbSgpO1xuICB2YXIgcGFuID0gY3kucGFuKCk7XG4gIHZhciB4MSA9IGJiLngxICogem9vbSArIHBhbi54O1xuICB2YXIgeDIgPSBiYi54MiAqIHpvb20gKyBwYW4ueDtcbiAgdmFyIHkxID0gYmIueTEgKiB6b29tICsgcGFuLnk7XG4gIHZhciB5MiA9IGJiLnkyICogem9vbSArIHBhbi55O1xuICByZXR1cm4ge1xuICAgIHgxOiB4MSxcbiAgICB4MjogeDIsXG4gICAgeTE6IHkxLFxuICAgIHkyOiB5MixcbiAgICB3OiB4MiAtIHgxLFxuICAgIGg6IHkyIC0geTFcbiAgfTtcbn07XG5lbGVzZm4kYi5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzaWxlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIGlmICghY3kuc3R5bGVFbmFibGVkKCkgfHwgIWN5Lmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uIChlbGUpIHtcbiAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIF9wLmNvbXBvdW5kQm91bmRzQ2xlYW4gPSBmYWxzZTtcbiAgICAgIF9wLmJiQ2FjaGUgPSBudWxsO1xuICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgZWxlLmVtaXRBbmROb3RpZnkoJ2JvdW5kcycpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufTtcbmVsZXNmbiRiLnVwZGF0ZUNvbXBvdW5kQm91bmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG5cbiAgLy8gbm90IHBvc3NpYmxlIHRvIGRvIG9uIG5vbi1jb21wb3VuZCBncmFwaHMgb3Igd2l0aCB0aGUgc3R5bGUgZGlzYWJsZWRcbiAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSB8fCAhY3kuaGFzQ29tcG91bmROb2RlcygpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzYXZlIGN5Y2xlcyB3aGVuIGJhdGNoaW5nIC0tIGJ1dCBib3VuZHMgd2lsbCBiZSBzdGFsZSAob3Igbm90IGV4aXN0IHlldClcbiAgaWYgKCFmb3JjZSAmJiBjeS5iYXRjaGluZygpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmlzUGFyZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIF9wID0gcGFyZW50Ll9wcml2YXRlO1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbigpO1xuICAgIHZhciBpbmNsdWRlTGFiZWxzID0gcGFyZW50LnBzdHlsZSgnY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMnKS52YWx1ZSA9PT0gJ2luY2x1ZGUnO1xuICAgIHZhciBtaW4gPSB7XG4gICAgICB3aWR0aDoge1xuICAgICAgICB2YWw6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aCcpLnBmVmFsdWUsXG4gICAgICAgIGxlZnQ6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aC1iaWFzLWxlZnQnKSxcbiAgICAgICAgcmlnaHQ6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aC1iaWFzLXJpZ2h0JylcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgdmFsOiBwYXJlbnQucHN0eWxlKCdtaW4taGVpZ2h0JykucGZWYWx1ZSxcbiAgICAgICAgdG9wOiBwYXJlbnQucHN0eWxlKCdtaW4taGVpZ2h0LWJpYXMtdG9wJyksXG4gICAgICAgIGJvdHRvbTogcGFyZW50LnBzdHlsZSgnbWluLWhlaWdodC1iaWFzLWJvdHRvbScpXG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgYmIgPSBjaGlsZHJlbi5ib3VuZGluZ0JveCh7XG4gICAgICBpbmNsdWRlTGFiZWxzOiBpbmNsdWRlTGFiZWxzLFxuICAgICAgaW5jbHVkZU92ZXJsYXlzOiBmYWxzZSxcbiAgICAgIC8vIHVwZGF0aW5nIHRoZSBjb21wb3VuZCBib3VuZHMgaGFwcGVucyBvdXRzaWRlIG9mIHRoZSByZWd1bGFyXG4gICAgICAvLyBjYWNoZSBjeWNsZSAoaS5lLiBiZWZvcmUgZmlyZWQgZXZlbnRzKVxuICAgICAgdXNlQ2FjaGU6IGZhbHNlXG4gICAgfSk7XG4gICAgdmFyIHBvcyA9IF9wLnBvc2l0aW9uO1xuXG4gICAgLy8gaWYgY2hpbGRyZW4gdGFrZSB1cCB6ZXJvIGFyZWEgdGhlbiBrZWVwIHBvc2l0aW9uIGFuZCBmYWxsIGJhY2sgb24gc3R5bGVzaGVldCB3L2hcbiAgICBpZiAoYmIudyA9PT0gMCB8fCBiYi5oID09PSAwKSB7XG4gICAgICBiYiA9IHtcbiAgICAgICAgdzogcGFyZW50LnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlLFxuICAgICAgICBoOiBwYXJlbnQucHN0eWxlKCdoZWlnaHQnKS5wZlZhbHVlXG4gICAgICB9O1xuICAgICAgYmIueDEgPSBwb3MueCAtIGJiLncgLyAyO1xuICAgICAgYmIueDIgPSBwb3MueCArIGJiLncgLyAyO1xuICAgICAgYmIueTEgPSBwb3MueSAtIGJiLmggLyAyO1xuICAgICAgYmIueTIgPSBwb3MueSArIGJiLmggLyAyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlQmlhc1ZhbHVlcyhwcm9wRGlmZiwgcHJvcEJpYXMsIHByb3BCaWFzQ29tcGxlbWVudCkge1xuICAgICAgdmFyIGJpYXNEaWZmID0gMDtcbiAgICAgIHZhciBiaWFzQ29tcGxlbWVudERpZmYgPSAwO1xuICAgICAgdmFyIGJpYXNUb3RhbCA9IHByb3BCaWFzICsgcHJvcEJpYXNDb21wbGVtZW50O1xuICAgICAgaWYgKHByb3BEaWZmID4gMCAmJiBiaWFzVG90YWwgPiAwKSB7XG4gICAgICAgIGJpYXNEaWZmID0gcHJvcEJpYXMgLyBiaWFzVG90YWwgKiBwcm9wRGlmZjtcbiAgICAgICAgYmlhc0NvbXBsZW1lbnREaWZmID0gcHJvcEJpYXNDb21wbGVtZW50IC8gYmlhc1RvdGFsICogcHJvcERpZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiaWFzRGlmZjogYmlhc0RpZmYsXG4gICAgICAgIGJpYXNDb21wbGVtZW50RGlmZjogYmlhc0NvbXBsZW1lbnREaWZmXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlUGFkZGluZ1ZhbHVlcyh3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nT2JqZWN0LCByZWxhdGl2ZVRvKSB7XG4gICAgICAvLyBBc3N1bWluZyBwZXJjZW50YWdlIGlzIG51bWJlciBmcm9tIDAgdG8gMVxuICAgICAgaWYgKHBhZGRpbmdPYmplY3QudW5pdHMgPT09ICclJykge1xuICAgICAgICBzd2l0Y2ggKHJlbGF0aXZlVG8pIHtcbiAgICAgICAgICBjYXNlICd3aWR0aCc6XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiAwO1xuICAgICAgICAgIGNhc2UgJ2hlaWdodCc6XG4gICAgICAgICAgICByZXR1cm4gaGVpZ2h0ID4gMCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqIGhlaWdodCA6IDA7XG4gICAgICAgICAgY2FzZSAnYXZlcmFnZSc6XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiAod2lkdGggKyBoZWlnaHQpIC8gMiA6IDA7XG4gICAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHdpZHRoID4gaGVpZ2h0ID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiAwO1xuICAgICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyB3aWR0aCA+IGhlaWdodCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqIHdpZHRoIDogcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogMDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFkZGluZ09iamVjdC51bml0cyA9PT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4gcGFkZGluZ09iamVjdC5wZlZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBsZWZ0VmFsID0gbWluLndpZHRoLmxlZnQudmFsdWU7XG4gICAgaWYgKG1pbi53aWR0aC5sZWZ0LnVuaXRzID09PSAncHgnICYmIG1pbi53aWR0aC52YWwgPiAwKSB7XG4gICAgICBsZWZ0VmFsID0gbGVmdFZhbCAqIDEwMCAvIG1pbi53aWR0aC52YWw7XG4gICAgfVxuICAgIHZhciByaWdodFZhbCA9IG1pbi53aWR0aC5yaWdodC52YWx1ZTtcbiAgICBpZiAobWluLndpZHRoLnJpZ2h0LnVuaXRzID09PSAncHgnICYmIG1pbi53aWR0aC52YWwgPiAwKSB7XG4gICAgICByaWdodFZhbCA9IHJpZ2h0VmFsICogMTAwIC8gbWluLndpZHRoLnZhbDtcbiAgICB9XG4gICAgdmFyIHRvcFZhbCA9IG1pbi5oZWlnaHQudG9wLnZhbHVlO1xuICAgIGlmIChtaW4uaGVpZ2h0LnRvcC51bml0cyA9PT0gJ3B4JyAmJiBtaW4uaGVpZ2h0LnZhbCA+IDApIHtcbiAgICAgIHRvcFZhbCA9IHRvcFZhbCAqIDEwMCAvIG1pbi5oZWlnaHQudmFsO1xuICAgIH1cbiAgICB2YXIgYm90dG9tVmFsID0gbWluLmhlaWdodC5ib3R0b20udmFsdWU7XG4gICAgaWYgKG1pbi5oZWlnaHQuYm90dG9tLnVuaXRzID09PSAncHgnICYmIG1pbi5oZWlnaHQudmFsID4gMCkge1xuICAgICAgYm90dG9tVmFsID0gYm90dG9tVmFsICogMTAwIC8gbWluLmhlaWdodC52YWw7XG4gICAgfVxuICAgIHZhciB3aWR0aEJpYXNEaWZmcyA9IGNvbXB1dGVCaWFzVmFsdWVzKG1pbi53aWR0aC52YWwgLSBiYi53LCBsZWZ0VmFsLCByaWdodFZhbCk7XG4gICAgdmFyIGRpZmZMZWZ0ID0gd2lkdGhCaWFzRGlmZnMuYmlhc0RpZmY7XG4gICAgdmFyIGRpZmZSaWdodCA9IHdpZHRoQmlhc0RpZmZzLmJpYXNDb21wbGVtZW50RGlmZjtcbiAgICB2YXIgaGVpZ2h0Qmlhc0RpZmZzID0gY29tcHV0ZUJpYXNWYWx1ZXMobWluLmhlaWdodC52YWwgLSBiYi5oLCB0b3BWYWwsIGJvdHRvbVZhbCk7XG4gICAgdmFyIGRpZmZUb3AgPSBoZWlnaHRCaWFzRGlmZnMuYmlhc0RpZmY7XG4gICAgdmFyIGRpZmZCb3R0b20gPSBoZWlnaHRCaWFzRGlmZnMuYmlhc0NvbXBsZW1lbnREaWZmO1xuICAgIF9wLmF1dG9QYWRkaW5nID0gY29tcHV0ZVBhZGRpbmdWYWx1ZXMoYmIudywgYmIuaCwgcGFyZW50LnBzdHlsZSgncGFkZGluZycpLCBwYXJlbnQucHN0eWxlKCdwYWRkaW5nLXJlbGF0aXZlLXRvJykudmFsdWUpO1xuICAgIF9wLmF1dG9XaWR0aCA9IE1hdGgubWF4KGJiLncsIG1pbi53aWR0aC52YWwpO1xuICAgIHBvcy54ID0gKC1kaWZmTGVmdCArIGJiLngxICsgYmIueDIgKyBkaWZmUmlnaHQpIC8gMjtcbiAgICBfcC5hdXRvSGVpZ2h0ID0gTWF0aC5tYXgoYmIuaCwgbWluLmhlaWdodC52YWwpO1xuICAgIHBvcy55ID0gKC1kaWZmVG9wICsgYmIueTEgKyBiYi55MiArIGRpZmZCb3R0b20pIC8gMjtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5jb21wb3VuZEJvdW5kc0NsZWFuIHx8IGZvcmNlKSB7XG4gICAgICB1cGRhdGUoZWxlKTtcbiAgICAgIGlmICghY3kuYmF0Y2hpbmcoKSkge1xuICAgICAgICBfcC5jb21wb3VuZEJvdW5kc0NsZWFuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xudmFyIG5vbmluZiA9IGZ1bmN0aW9uIG5vbmluZih4KSB7XG4gIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4geDtcbn07XG52YXIgdXBkYXRlQm91bmRzID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzKGIsIHgxLCB5MSwgeDIsIHkyKSB7XG4gIC8vIGRvbid0IHVwZGF0ZSB3aXRoIHplcm8gYXJlYSBib3hlc1xuICBpZiAoeDIgLSB4MSA9PT0gMCB8fCB5MiAtIHkxID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZG9uJ3QgdXBkYXRlIHdpdGggbnVsbCBkaW1cbiAgaWYgKHgxID09IG51bGwgfHwgeTEgPT0gbnVsbCB8fCB4MiA9PSBudWxsIHx8IHkyID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYi54MSA9IHgxIDwgYi54MSA/IHgxIDogYi54MTtcbiAgYi54MiA9IHgyID4gYi54MiA/IHgyIDogYi54MjtcbiAgYi55MSA9IHkxIDwgYi55MSA/IHkxIDogYi55MTtcbiAgYi55MiA9IHkyID4gYi55MiA/IHkyIDogYi55MjtcbiAgYi53ID0gYi54MiAtIGIueDE7XG4gIGIuaCA9IGIueTIgLSBiLnkxO1xufTtcbnZhciB1cGRhdGVCb3VuZHNGcm9tQm94ID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbUJveChiLCBiMikge1xuICBpZiAoYjIgPT0gbnVsbCkge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHJldHVybiB1cGRhdGVCb3VuZHMoYiwgYjIueDEsIGIyLnkxLCBiMi54MiwgYjIueTIpO1xufTtcbnZhciBwcmVmaXhlZFByb3BlcnR5ID0gZnVuY3Rpb24gcHJlZml4ZWRQcm9wZXJ0eShvYmosIGZpZWxkLCBwcmVmaXgpIHtcbiAgcmV0dXJuIGdldFByZWZpeGVkUHJvcGVydHkob2JqLCBmaWVsZCwgcHJlZml4KTtcbn07XG52YXIgdXBkYXRlQm91bmRzRnJvbUFycm93ID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCBwcmVmaXgpIHtcbiAgaWYgKGVsZS5jeSgpLmhlYWRsZXNzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICB2YXIgaGFsZkFyVyA9IHJzdHlsZS5hcnJvd1dpZHRoIC8gMjtcbiAgdmFyIGFycm93VHlwZSA9IGVsZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1zaGFwZScpLnZhbHVlO1xuICB2YXIgeDtcbiAgdmFyIHk7XG4gIGlmIChhcnJvd1R5cGUgIT09ICdub25lJykge1xuICAgIGlmIChwcmVmaXggPT09ICdzb3VyY2UnKSB7XG4gICAgICB4ID0gcnN0eWxlLnNyY1g7XG4gICAgICB5ID0gcnN0eWxlLnNyY1k7XG4gICAgfSBlbHNlIGlmIChwcmVmaXggPT09ICd0YXJnZXQnKSB7XG4gICAgICB4ID0gcnN0eWxlLnRndFg7XG4gICAgICB5ID0gcnN0eWxlLnRndFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSByc3R5bGUubWlkWDtcbiAgICAgIHkgPSByc3R5bGUubWlkWTtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgc3RvcmUgdGhlIGluZGl2aWR1YWwgYXJyb3cgYm91bmRzXG4gICAgdmFyIGJicyA9IF9wLmFycm93Qm91bmRzID0gX3AuYXJyb3dCb3VuZHMgfHwge307XG4gICAgdmFyIGJiID0gYmJzW3ByZWZpeF0gPSBiYnNbcHJlZml4XSB8fCB7fTtcbiAgICBiYi54MSA9IHggLSBoYWxmQXJXO1xuICAgIGJiLnkxID0geSAtIGhhbGZBclc7XG4gICAgYmIueDIgPSB4ICsgaGFsZkFyVztcbiAgICBiYi55MiA9IHkgKyBoYWxmQXJXO1xuICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgIGJiLmggPSBiYi55MiAtIGJiLnkxO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJiLCAxKTtcbiAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBiYi54MSwgYmIueTEsIGJiLngyLCBiYi55Mik7XG4gIH1cbn07XG52YXIgdXBkYXRlQm91bmRzRnJvbUxhYmVsID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbUxhYmVsKGJvdW5kcywgZWxlLCBwcmVmaXgpIHtcbiAgaWYgKGVsZS5jeSgpLmhlYWRsZXNzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHByZWZpeERhc2g7XG4gIGlmIChwcmVmaXgpIHtcbiAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICB9IGVsc2Uge1xuICAgIHByZWZpeERhc2ggPSAnJztcbiAgfVxuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciByc3R5bGUgPSBfcC5yc3R5bGU7XG4gIHZhciBsYWJlbCA9IGVsZS5wc3R5bGUocHJlZml4RGFzaCArICdsYWJlbCcpLnN0clZhbHVlO1xuICBpZiAobGFiZWwpIHtcbiAgICB2YXIgaGFsaWduID0gZWxlLnBzdHlsZSgndGV4dC1oYWxpZ24nKTtcbiAgICB2YXIgdmFsaWduID0gZWxlLnBzdHlsZSgndGV4dC12YWxpZ24nKTtcbiAgICB2YXIgbGFiZWxXaWR0aCA9IHByZWZpeGVkUHJvcGVydHkocnN0eWxlLCAnbGFiZWxXaWR0aCcsIHByZWZpeCk7XG4gICAgdmFyIGxhYmVsSGVpZ2h0ID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbEhlaWdodCcsIHByZWZpeCk7XG4gICAgdmFyIGxhYmVsWCA9IHByZWZpeGVkUHJvcGVydHkocnN0eWxlLCAnbGFiZWxYJywgcHJlZml4KTtcbiAgICB2YXIgbGFiZWxZID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbFknLCBwcmVmaXgpO1xuICAgIHZhciBtYXJnaW5YID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ3RleHQtbWFyZ2luLXgnKS5wZlZhbHVlO1xuICAgIHZhciBtYXJnaW5ZID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ3RleHQtbWFyZ2luLXknKS5wZlZhbHVlO1xuICAgIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gICAgdmFyIHJvdGF0aW9uID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ3RleHQtcm90YXRpb24nKTtcbiAgICB2YXIgb3V0bGluZVdpZHRoID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgYm9yZGVyV2lkdGggPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci13aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIGhhbGZCb3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoIC8gMjtcbiAgICB2YXIgcGFkZGluZyA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1wYWRkaW5nJykucGZWYWx1ZTtcbiAgICB2YXIgbWFyZ2luT2ZFcnJvciA9IDI7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcblxuICAgIHZhciBsaCA9IGxhYmVsSGVpZ2h0O1xuICAgIHZhciBsdyA9IGxhYmVsV2lkdGg7XG4gICAgdmFyIGx3XzIgPSBsdyAvIDI7XG4gICAgdmFyIGxoXzIgPSBsaCAvIDI7XG4gICAgdmFyIGx4MSwgbHgyLCBseTEsIGx5MjtcbiAgICBpZiAoaXNFZGdlKSB7XG4gICAgICBseDEgPSBsYWJlbFggLSBsd18yO1xuICAgICAgbHgyID0gbGFiZWxYICsgbHdfMjtcbiAgICAgIGx5MSA9IGxhYmVsWSAtIGxoXzI7XG4gICAgICBseTIgPSBsYWJlbFkgKyBsaF8yO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKGhhbGlnbi52YWx1ZSkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBseDEgPSBsYWJlbFggLSBsdztcbiAgICAgICAgICBseDIgPSBsYWJlbFg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgbHgxID0gbGFiZWxYIC0gbHdfMjtcbiAgICAgICAgICBseDIgPSBsYWJlbFggKyBsd18yO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbHgxID0gbGFiZWxYO1xuICAgICAgICAgIGx4MiA9IGxhYmVsWCArIGx3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh2YWxpZ24udmFsdWUpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICBseTEgPSBsYWJlbFkgLSBsaDtcbiAgICAgICAgICBseTIgPSBsYWJlbFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgbHkxID0gbGFiZWxZIC0gbGhfMjtcbiAgICAgICAgICBseTIgPSBsYWJlbFkgKyBsaF8yO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGx5MSA9IGxhYmVsWTtcbiAgICAgICAgICBseTIgPSBsYWJlbFkgKyBsaDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzaGlmdCBieSBtYXJnaW4gYW5kIGV4cGFuZCBieSBvdXRsaW5lIGFuZCBib3JkZXJcbiAgICBseDEgKz0gbWFyZ2luWCAtIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSAtIHBhZGRpbmcgLSBtYXJnaW5PZkVycm9yO1xuICAgIGx4MiArPSBtYXJnaW5YICsgTWF0aC5tYXgob3V0bGluZVdpZHRoLCBoYWxmQm9yZGVyV2lkdGgpICsgcGFkZGluZyArIG1hcmdpbk9mRXJyb3I7XG4gICAgbHkxICs9IG1hcmdpblkgLSBNYXRoLm1heChvdXRsaW5lV2lkdGgsIGhhbGZCb3JkZXJXaWR0aCkgLSBwYWRkaW5nIC0gbWFyZ2luT2ZFcnJvcjtcbiAgICBseTIgKz0gbWFyZ2luWSArIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSArIHBhZGRpbmcgKyBtYXJnaW5PZkVycm9yO1xuXG4gICAgLy8gYWx3YXlzIHN0b3JlIHRoZSB1bnJvdGF0ZWQgbGFiZWwgYm91bmRzIHNlcGFyYXRlbHlcbiAgICB2YXIgYmJQcmVmaXggPSBwcmVmaXggfHwgJ21haW4nO1xuICAgIHZhciBiYnMgPSBfcC5sYWJlbEJvdW5kcztcbiAgICB2YXIgYmIgPSBiYnNbYmJQcmVmaXhdID0gYmJzW2JiUHJlZml4XSB8fCB7fTtcbiAgICBiYi54MSA9IGx4MTtcbiAgICBiYi55MSA9IGx5MTtcbiAgICBiYi54MiA9IGx4MjtcbiAgICBiYi55MiA9IGx5MjtcbiAgICBiYi53ID0gbHgyIC0gbHgxO1xuICAgIGJiLmggPSBseTIgLSBseTE7XG4gICAgdmFyIGlzQXV0b3JvdGF0ZSA9IGlzRWRnZSAmJiByb3RhdGlvbi5zdHJWYWx1ZSA9PT0gJ2F1dG9yb3RhdGUnO1xuICAgIHZhciBpc1BmVmFsdWUgPSByb3RhdGlvbi5wZlZhbHVlICE9IG51bGwgJiYgcm90YXRpb24ucGZWYWx1ZSAhPT0gMDtcbiAgICBpZiAoaXNBdXRvcm90YXRlIHx8IGlzUGZWYWx1ZSkge1xuICAgICAgdmFyIHRoZXRhID0gaXNBdXRvcm90YXRlID8gcHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbEFuZ2xlJywgcHJlZml4KSA6IHJvdGF0aW9uLnBmVmFsdWU7XG4gICAgICB2YXIgY29zID0gTWF0aC5jb3ModGhldGEpO1xuICAgICAgdmFyIHNpbiA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgICAgLy8gcm90YXRpb24gcG9pbnQgKGRlZmF1bHQgdmFsdWUgZm9yIGNlbnRlci1jZW50ZXIpXG4gICAgICB2YXIgeG8gPSAobHgxICsgbHgyKSAvIDI7XG4gICAgICB2YXIgeW8gPSAobHkxICsgbHkyKSAvIDI7XG4gICAgICBpZiAoIWlzRWRnZSkge1xuICAgICAgICBzd2l0Y2ggKGhhbGlnbi52YWx1ZSkge1xuICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgeG8gPSBseDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICB4byA9IGx4MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodmFsaWduLnZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHlvID0gbHkyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHlvID0gbHkxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciByb3RhdGUgPSBmdW5jdGlvbiByb3RhdGUoeCwgeSkge1xuICAgICAgICB4ID0geCAtIHhvO1xuICAgICAgICB5ID0geSAtIHlvO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHggKiBjb3MgLSB5ICogc2luICsgeG8sXG4gICAgICAgICAgeTogeCAqIHNpbiArIHkgKiBjb3MgKyB5b1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHZhciBweDF5MSA9IHJvdGF0ZShseDEsIGx5MSk7XG4gICAgICB2YXIgcHgxeTIgPSByb3RhdGUobHgxLCBseTIpO1xuICAgICAgdmFyIHB4MnkxID0gcm90YXRlKGx4MiwgbHkxKTtcbiAgICAgIHZhciBweDJ5MiA9IHJvdGF0ZShseDIsIGx5Mik7XG4gICAgICBseDEgPSBNYXRoLm1pbihweDF5MS54LCBweDF5Mi54LCBweDJ5MS54LCBweDJ5Mi54KTtcbiAgICAgIGx4MiA9IE1hdGgubWF4KHB4MXkxLngsIHB4MXkyLngsIHB4MnkxLngsIHB4MnkyLngpO1xuICAgICAgbHkxID0gTWF0aC5taW4ocHgxeTEueSwgcHgxeTIueSwgcHgyeTEueSwgcHgyeTIueSk7XG4gICAgICBseTIgPSBNYXRoLm1heChweDF5MS55LCBweDF5Mi55LCBweDJ5MS55LCBweDJ5Mi55KTtcbiAgICB9XG4gICAgdmFyIGJiUHJlZml4Um90ID0gYmJQcmVmaXggKyAnUm90JztcbiAgICB2YXIgYmJSb3QgPSBiYnNbYmJQcmVmaXhSb3RdID0gYmJzW2JiUHJlZml4Um90XSB8fCB7fTtcbiAgICBiYlJvdC54MSA9IGx4MTtcbiAgICBiYlJvdC55MSA9IGx5MTtcbiAgICBiYlJvdC54MiA9IGx4MjtcbiAgICBiYlJvdC55MiA9IGx5MjtcbiAgICBiYlJvdC53ID0gbHgyIC0gbHgxO1xuICAgIGJiUm90LmggPSBseTIgLSBseTE7XG4gICAgdXBkYXRlQm91bmRzKGJvdW5kcywgbHgxLCBseTEsIGx4MiwgbHkyKTtcbiAgICB1cGRhdGVCb3VuZHMoX3AubGFiZWxCb3VuZHMuYWxsLCBseDEsIGx5MSwgbHgyLCBseTIpO1xuICB9XG4gIHJldHVybiBib3VuZHM7XG59O1xudmFyIHVwZGF0ZUJvdW5kc0Zyb21PdXRsaW5lID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbU91dGxpbmUoYm91bmRzLCBlbGUpIHtcbiAgaWYgKGVsZS5jeSgpLmhlYWRsZXNzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG91dGxpbmVPcGFjaXR5ID0gZWxlLnBzdHlsZSgnb3V0bGluZS1vcGFjaXR5JykudmFsdWU7XG4gIHZhciBvdXRsaW5lV2lkdGggPSBlbGUucHN0eWxlKCdvdXRsaW5lLXdpZHRoJykudmFsdWU7XG4gIGlmIChvdXRsaW5lT3BhY2l0eSA+IDAgJiYgb3V0bGluZVdpZHRoID4gMCkge1xuICAgIHZhciBvdXRsaW5lT2Zmc2V0ID0gZWxlLnBzdHlsZSgnb3V0bGluZS1vZmZzZXQnKS52YWx1ZTtcbiAgICB2YXIgbm9kZVNoYXBlID0gZWxlLnBzdHlsZSgnc2hhcGUnKS52YWx1ZTtcbiAgICB2YXIgb3V0bGluZVNpemUgPSBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0O1xuICAgIHZhciBzY2FsZVggPSAoYm91bmRzLncgKyBvdXRsaW5lU2l6ZSAqIDIpIC8gYm91bmRzLnc7XG4gICAgdmFyIHNjYWxlWSA9IChib3VuZHMuaCArIG91dGxpbmVTaXplICogMikgLyBib3VuZHMuaDtcbiAgICB2YXIgeE9mZnNldCA9IDA7XG4gICAgdmFyIHlPZmZzZXQgPSAwO1xuICAgIGlmIChbXCJkaWFtb25kXCIsIFwicGVudGFnb25cIiwgXCJyb3VuZC10cmlhbmdsZVwiXS5pbmNsdWRlcyhub2RlU2hhcGUpKSB7XG4gICAgICBzY2FsZVggPSAoYm91bmRzLncgKyBvdXRsaW5lU2l6ZSAqIDIuNCkgLyBib3VuZHMudztcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgLyAzLjY7XG4gICAgfSBlbHNlIGlmIChbXCJjb25jYXZlLWhleGFnb25cIiwgXCJyaG9tYm9pZFwiLCBcInJpZ2h0LXJob21ib2lkXCJdLmluY2x1ZGVzKG5vZGVTaGFwZSkpIHtcbiAgICAgIHNjYWxlWCA9IChib3VuZHMudyArIG91dGxpbmVTaXplICogMi40KSAvIGJvdW5kcy53O1xuICAgIH0gZWxzZSBpZiAobm9kZVNoYXBlID09PSBcInN0YXJcIikge1xuICAgICAgc2NhbGVYID0gKGJvdW5kcy53ICsgb3V0bGluZVNpemUgKiAyLjgpIC8gYm91bmRzLnc7XG4gICAgICBzY2FsZVkgPSAoYm91bmRzLmggKyBvdXRsaW5lU2l6ZSAqIDIuNikgLyBib3VuZHMuaDtcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgLyAzLjg7XG4gICAgfSBlbHNlIGlmIChub2RlU2hhcGUgPT09IFwidHJpYW5nbGVcIikge1xuICAgICAgc2NhbGVYID0gKGJvdW5kcy53ICsgb3V0bGluZVNpemUgKiAyLjgpIC8gYm91bmRzLnc7XG4gICAgICBzY2FsZVkgPSAoYm91bmRzLmggKyBvdXRsaW5lU2l6ZSAqIDIuNCkgLyBib3VuZHMuaDtcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgLyAxLjQ7XG4gICAgfSBlbHNlIGlmIChub2RlU2hhcGUgPT09IFwidmVlXCIpIHtcbiAgICAgIHNjYWxlWCA9IChib3VuZHMudyArIG91dGxpbmVTaXplICogNC40KSAvIGJvdW5kcy53O1xuICAgICAgc2NhbGVZID0gKGJvdW5kcy5oICsgb3V0bGluZVNpemUgKiAzLjgpIC8gYm91bmRzLmg7XG4gICAgICB5T2Zmc2V0ID0gLW91dGxpbmVTaXplICogLjU7XG4gICAgfVxuICAgIHZhciBoRGVsdGEgPSBib3VuZHMuaCAqIHNjYWxlWSAtIGJvdW5kcy5oO1xuICAgIHZhciB3RGVsdGEgPSBib3VuZHMudyAqIHNjYWxlWCAtIGJvdW5kcy53O1xuICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYm91bmRzLCBbTWF0aC5jZWlsKGhEZWx0YSAvIDIpLCBNYXRoLmNlaWwod0RlbHRhIC8gMildKTtcbiAgICBpZiAoeE9mZnNldCAhPSAwIHx8IHlPZmZzZXQgIT09IDApIHtcbiAgICAgIHZhciBvQm91bmRzID0gc2hpZnRCb3VuZGluZ0JveChib3VuZHMsIHhPZmZzZXQsIHlPZmZzZXQpO1xuICAgICAgdXBkYXRlQm91bmRpbmdCb3goYm91bmRzLCBvQm91bmRzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGdldCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBlbGVtZW50cyAoaW4gcmF3IG1vZGVsIHBvc2l0aW9uKVxudmFyIGJvdW5kaW5nQm94SW1wbCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94SW1wbChlbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gZWxlLl9wcml2YXRlLmN5O1xuICB2YXIgc3R5bGVFbmFibGVkID0gY3kuc3R5bGVFbmFibGVkKCk7XG4gIHZhciBoZWFkbGVzcyA9IGN5LmhlYWRsZXNzKCk7XG4gIHZhciBib3VuZHMgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgaXNOb2RlID0gZWxlLmlzTm9kZSgpO1xuICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICB2YXIgZXgxLCBleDIsIGV5MSwgZXkyOyAvLyBleHRyZW1hIG9mIGJvZHkgLyBsaW5lc1xuICB2YXIgeCwgeTsgLy8gbm9kZSBwb3NcbiAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgdmFyIG1hbnVhbEV4cGFuc2lvbiA9IGlzTm9kZSAmJiBzdHlsZUVuYWJsZWQgPyBlbGUucHN0eWxlKCdib3VuZHMtZXhwYW5zaW9uJykucGZWYWx1ZSA6IFswXTtcblxuICAvLyBtdXN0IHVzZSBgZGlzcGxheWAgcHJvcCBvbmx5LCBhcyByZWFkaW5nIGBjb21wb3VuZC53aWR0aCgpYCBjYXVzZXMgcmVjdXJzaW9uXG4gIC8vIChvdGhlciBmYWN0b3JzIGxpa2Ugd2lkdGggdmFsdWVzIHdpbGwgYmUgY29uc2lkZXJlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGFueXdheSlcbiAgdmFyIGlzRGlzcGxheWVkID0gZnVuY3Rpb24gaXNEaXNwbGF5ZWQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5wc3R5bGUoJ2Rpc3BsYXknKS52YWx1ZSAhPT0gJ25vbmUnO1xuICB9O1xuICB2YXIgZGlzcGxheWVkID0gIXN0eWxlRW5hYmxlZCB8fCBpc0Rpc3BsYXllZChlbGUpXG5cbiAgLy8gbXVzdCB0YWtlIGludG8gYWNjb3VudCBjb25uZWN0ZWQgbm9kZXMgYi9jIG9mIGltcGxpY2l0IGVkZ2UgaGlkaW5nIG9uIGRpc3BsYXk6bm9uZSBub2RlXG4gICYmICghaXNFZGdlIHx8IGlzRGlzcGxheWVkKGVsZS5zb3VyY2UoKSkgJiYgaXNEaXNwbGF5ZWQoZWxlLnRhcmdldCgpKSk7XG4gIGlmIChkaXNwbGF5ZWQpIHtcbiAgICAvLyBkaXNwbGF5ZWQgc3VmZmljZXMsIHNpbmNlIHdlIHdpbGwgZmluZCB6ZXJvIGFyZWEgZWxlcyBhbnl3YXlcbiAgICB2YXIgb3ZlcmxheU9wYWNpdHkgPSAwO1xuICAgIHZhciBvdmVybGF5UGFkZGluZyA9IDA7XG4gICAgaWYgKHN0eWxlRW5hYmxlZCAmJiBvcHRpb25zLmluY2x1ZGVPdmVybGF5cykge1xuICAgICAgb3ZlcmxheU9wYWNpdHkgPSBlbGUucHN0eWxlKCdvdmVybGF5LW9wYWNpdHknKS52YWx1ZTtcbiAgICAgIGlmIChvdmVybGF5T3BhY2l0eSAhPT0gMCkge1xuICAgICAgICBvdmVybGF5UGFkZGluZyA9IGVsZS5wc3R5bGUoJ292ZXJsYXktcGFkZGluZycpLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgdW5kZXJsYXlPcGFjaXR5ID0gMDtcbiAgICB2YXIgdW5kZXJsYXlQYWRkaW5nID0gMDtcbiAgICBpZiAoc3R5bGVFbmFibGVkICYmIG9wdGlvbnMuaW5jbHVkZVVuZGVybGF5cykge1xuICAgICAgdW5kZXJsYXlPcGFjaXR5ID0gZWxlLnBzdHlsZSgndW5kZXJsYXktb3BhY2l0eScpLnZhbHVlO1xuICAgICAgaWYgKHVuZGVybGF5T3BhY2l0eSAhPT0gMCkge1xuICAgICAgICB1bmRlcmxheVBhZGRpbmcgPSBlbGUucHN0eWxlKCd1bmRlcmxheS1wYWRkaW5nJykudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBwYWRkaW5nID0gTWF0aC5tYXgob3ZlcmxheVBhZGRpbmcsIHVuZGVybGF5UGFkZGluZyk7XG4gICAgdmFyIHcgPSAwO1xuICAgIHZhciB3SGFsZiA9IDA7XG4gICAgaWYgKHN0eWxlRW5hYmxlZCkge1xuICAgICAgdyA9IGVsZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICAgIHdIYWxmID0gdyAvIDI7XG4gICAgfVxuICAgIGlmIChpc05vZGUgJiYgb3B0aW9ucy5pbmNsdWRlTm9kZXMpIHtcbiAgICAgIHZhciBwb3MgPSBlbGUucG9zaXRpb24oKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICAgIHZhciBfdyA9IGVsZS5vdXRlcldpZHRoKCk7XG4gICAgICB2YXIgaGFsZlcgPSBfdyAvIDI7XG4gICAgICB2YXIgaCA9IGVsZS5vdXRlckhlaWdodCgpO1xuICAgICAgdmFyIGhhbGZIID0gaCAvIDI7XG5cbiAgICAgIC8vIGhhbmRsZSBub2RlIGRpbWVuc2lvbnNcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgZXgxID0geCAtIGhhbGZXO1xuICAgICAgZXgyID0geCArIGhhbGZXO1xuICAgICAgZXkxID0geSAtIGhhbGZIO1xuICAgICAgZXkyID0geSArIGhhbGZIO1xuICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgZXgxLCBleTEsIGV4MiwgZXkyKTtcbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlT3V0bGluZXMpIHtcbiAgICAgICAgdXBkYXRlQm91bmRzRnJvbU91dGxpbmUoYm91bmRzLCBlbGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFZGdlICYmIG9wdGlvbnMuaW5jbHVkZUVkZ2VzKSB7XG4gICAgICBpZiAoc3R5bGVFbmFibGVkICYmICFoZWFkbGVzcykge1xuICAgICAgICB2YXIgY3VydmVTdHlsZSA9IGVsZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykuc3RyVmFsdWU7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVkZ2UgZGltZW5zaW9ucyAocm91Z2ggYm94IGVzdGltYXRlKVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgZXgxID0gTWF0aC5taW4ocnN0eWxlLnNyY1gsIHJzdHlsZS5taWRYLCByc3R5bGUudGd0WCk7XG4gICAgICAgIGV4MiA9IE1hdGgubWF4KHJzdHlsZS5zcmNYLCByc3R5bGUubWlkWCwgcnN0eWxlLnRndFgpO1xuICAgICAgICBleTEgPSBNYXRoLm1pbihyc3R5bGUuc3JjWSwgcnN0eWxlLm1pZFksIHJzdHlsZS50Z3RZKTtcbiAgICAgICAgZXkyID0gTWF0aC5tYXgocnN0eWxlLnNyY1ksIHJzdHlsZS5taWRZLCByc3R5bGUudGd0WSk7XG5cbiAgICAgICAgLy8gdGFrZSBpbnRvIGFjY291bnQgZWRnZSB3aWR0aFxuICAgICAgICBleDEgLT0gd0hhbGY7XG4gICAgICAgIGV4MiArPSB3SGFsZjtcbiAgICAgICAgZXkxIC09IHdIYWxmO1xuICAgICAgICBleTIgKz0gd0hhbGY7XG4gICAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSwgZXkxLCBleDIsIGV5Mik7XG5cbiAgICAgICAgLy8gcHJlY2lzZSBlZGdlc1xuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgaWYgKGN1cnZlU3R5bGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgICAgICB2YXIgaHB0cyA9IHJzdHlsZS5oYXlzdGFja1B0cztcbiAgICAgICAgICBpZiAoaHB0cyAmJiBocHRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZXgxID0gaHB0c1swXS54O1xuICAgICAgICAgICAgZXkxID0gaHB0c1swXS55O1xuICAgICAgICAgICAgZXgyID0gaHB0c1sxXS54O1xuICAgICAgICAgICAgZXkyID0gaHB0c1sxXS55O1xuICAgICAgICAgICAgaWYgKGV4MSA+IGV4Mikge1xuICAgICAgICAgICAgICB2YXIgdGVtcCA9IGV4MTtcbiAgICAgICAgICAgICAgZXgxID0gZXgyO1xuICAgICAgICAgICAgICBleDIgPSB0ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV5MSA+IGV5Mikge1xuICAgICAgICAgICAgICB2YXIgX3RlbXAgPSBleTE7XG4gICAgICAgICAgICAgIGV5MSA9IGV5MjtcbiAgICAgICAgICAgICAgZXkyID0gX3RlbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEgLSB3SGFsZiwgZXkxIC0gd0hhbGYsIGV4MiArIHdIYWxmLCBleTIgKyB3SGFsZik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGN1cnZlU3R5bGUgPT09ICdiZXppZXInIHx8IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCdzZWdtZW50cycpIHx8IGN1cnZlU3R5bGUuZW5kc1dpdGgoJ3RheGknKSkge1xuICAgICAgICAgIHZhciBwdHM7XG4gICAgICAgICAgc3dpdGNoIChjdXJ2ZVN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdiZXppZXInOlxuICAgICAgICAgICAgY2FzZSAndW5idW5kbGVkLWJlemllcic6XG4gICAgICAgICAgICAgIHB0cyA9IHJzdHlsZS5iZXppZXJQdHM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VnbWVudHMnOlxuICAgICAgICAgICAgY2FzZSAndGF4aSc6XG4gICAgICAgICAgICBjYXNlICdyb3VuZC1zZWdtZW50cyc6XG4gICAgICAgICAgICBjYXNlICdyb3VuZC10YXhpJzpcbiAgICAgICAgICAgICAgcHRzID0gcnN0eWxlLmxpbmVQdHM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHRzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIHZhciBwdCA9IHB0c1tqXTtcbiAgICAgICAgICAgICAgZXgxID0gcHQueCAtIHdIYWxmO1xuICAgICAgICAgICAgICBleDIgPSBwdC54ICsgd0hhbGY7XG4gICAgICAgICAgICAgIGV5MSA9IHB0LnkgLSB3SGFsZjtcbiAgICAgICAgICAgICAgZXkyID0gcHQueSArIHdIYWxmO1xuICAgICAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEsIGV5MSwgZXgyLCBleTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBiZXppZXItbGlrZSBvciBzZWdtZW50LWxpa2UgZWRnZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaGVhZGxlc3Mgb3Igc3R5bGUgZGlzYWJsZWRcblxuICAgICAgICAvLyBmYWxsYmFjayBvbiBzb3VyY2UgYW5kIHRhcmdldCBwb3NpdGlvbnNcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgdmFyIG4xID0gZWxlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgbjFwb3MgPSBuMS5wb3NpdGlvbigpO1xuICAgICAgICB2YXIgbjIgPSBlbGUudGFyZ2V0KCk7XG4gICAgICAgIHZhciBuMnBvcyA9IG4yLnBvc2l0aW9uKCk7XG4gICAgICAgIGV4MSA9IG4xcG9zLng7XG4gICAgICAgIGV4MiA9IG4ycG9zLng7XG4gICAgICAgIGV5MSA9IG4xcG9zLnk7XG4gICAgICAgIGV5MiA9IG4ycG9zLnk7XG4gICAgICAgIGlmIChleDEgPiBleDIpIHtcbiAgICAgICAgICB2YXIgX3RlbXAyID0gZXgxO1xuICAgICAgICAgIGV4MSA9IGV4MjtcbiAgICAgICAgICBleDIgPSBfdGVtcDI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV5MSA+IGV5Mikge1xuICAgICAgICAgIHZhciBfdGVtcDMgPSBleTE7XG4gICAgICAgICAgZXkxID0gZXkyO1xuICAgICAgICAgIGV5MiA9IF90ZW1wMztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRha2UgaW50byBhY2NvdW50IGVkZ2Ugd2lkdGhcbiAgICAgICAgZXgxIC09IHdIYWxmO1xuICAgICAgICBleDIgKz0gd0hhbGY7XG4gICAgICAgIGV5MSAtPSB3SGFsZjtcbiAgICAgICAgZXkyICs9IHdIYWxmO1xuICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEsIGV5MSwgZXgyLCBleTIpO1xuICAgICAgfSAvLyBoZWFkbGVzcyBvciBzdHlsZSBkaXNhYmxlZFxuICAgIH0gLy8gZWRnZXNcblxuICAgIC8vIGhhbmRsZSBlZGdlIGFycm93IHNpemVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoc3R5bGVFbmFibGVkICYmIG9wdGlvbnMuaW5jbHVkZUVkZ2VzICYmIGlzRWRnZSkge1xuICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnbWlkLXNvdXJjZScpO1xuICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnbWlkLXRhcmdldCcpO1xuICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnc291cmNlJyk7XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsICd0YXJnZXQnKTtcbiAgICB9XG5cbiAgICAvLyBnaG9zdFxuICAgIC8vLy8vLy8vXG5cbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICB2YXIgZ2hvc3QgPSBlbGUucHN0eWxlKCdnaG9zdCcpLnZhbHVlID09PSAneWVzJztcbiAgICAgIGlmIChnaG9zdCkge1xuICAgICAgICB2YXIgZ3ggPSBlbGUucHN0eWxlKCdnaG9zdC1vZmZzZXQteCcpLnBmVmFsdWU7XG4gICAgICAgIHZhciBneSA9IGVsZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgYm91bmRzLngxICsgZ3gsIGJvdW5kcy55MSArIGd5LCBib3VuZHMueDIgKyBneCwgYm91bmRzLnkyICsgZ3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsd2F5cyBzdG9yZSB0aGUgYm9keSBib3VuZHMgc2VwYXJhdGVseSBmcm9tIHRoZSBsYWJlbHNcbiAgICB2YXIgYmJCb2R5ID0gX3AuYm9keUJvdW5kcyA9IF9wLmJvZHlCb3VuZHMgfHwge307XG4gICAgYXNzaWduQm91bmRpbmdCb3goYmJCb2R5LCBib3VuZHMpO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYmJCb2R5LCBtYW51YWxFeHBhbnNpb24pO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJiQm9keSwgMSk7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcblxuICAgIC8vIG92ZXJsYXlcbiAgICAvLy8vLy8vLy8vXG5cbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICBleDEgPSBib3VuZHMueDE7XG4gICAgICBleDIgPSBib3VuZHMueDI7XG4gICAgICBleTEgPSBib3VuZHMueTE7XG4gICAgICBleTIgPSBib3VuZHMueTI7XG4gICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEgLSBwYWRkaW5nLCBleTEgLSBwYWRkaW5nLCBleDIgKyBwYWRkaW5nLCBleTIgKyBwYWRkaW5nKTtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgc3RvcmUgdGhlIGJvZHkgYm91bmRzIHNlcGFyYXRlbHkgZnJvbSB0aGUgbGFiZWxzXG4gICAgdmFyIGJiT3ZlcmxheSA9IF9wLm92ZXJsYXlCb3VuZHMgPSBfcC5vdmVybGF5Qm91bmRzIHx8IHt9O1xuICAgIGFzc2lnbkJvdW5kaW5nQm94KGJiT3ZlcmxheSwgYm91bmRzKTtcbiAgICBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJiT3ZlcmxheSwgbWFudWFsRXhwYW5zaW9uKTtcbiAgICBleHBhbmRCb3VuZGluZ0JveChiYk92ZXJsYXksIDEpOyAvLyBleHBhbmQgdG8gd29yayBhcm91bmQgYnJvd3NlciBkaW1lbnNpb24gaW5hY2N1cmFjaWVzXG5cbiAgICAvLyBoYW5kbGUgbGFiZWwgZGltZW5zaW9uc1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgYmJMYWJlbHMgPSBfcC5sYWJlbEJvdW5kcyA9IF9wLmxhYmVsQm91bmRzIHx8IHt9O1xuICAgIGlmIChiYkxhYmVscy5hbGwgIT0gbnVsbCkge1xuICAgICAgY2xlYXJCb3VuZGluZ0JveChiYkxhYmVscy5hbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYkxhYmVscy5hbGwgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICB9XG4gICAgaWYgKHN0eWxlRW5hYmxlZCAmJiBvcHRpb25zLmluY2x1ZGVMYWJlbHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVNYWluTGFiZWxzKSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21MYWJlbChib3VuZHMsIGVsZSwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFZGdlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTb3VyY2VMYWJlbHMpIHtcbiAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsICdzb3VyY2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUxhYmVsKGJvdW5kcywgZWxlLCAndGFyZ2V0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHN0eWxlIGVuYWJsZWQgZm9yIGxhYmVsc1xuICB9IC8vIGlmIGRpc3BsYXllZFxuXG4gIGJvdW5kcy54MSA9IG5vbmluZihib3VuZHMueDEpO1xuICBib3VuZHMueTEgPSBub25pbmYoYm91bmRzLnkxKTtcbiAgYm91bmRzLngyID0gbm9uaW5mKGJvdW5kcy54Mik7XG4gIGJvdW5kcy55MiA9IG5vbmluZihib3VuZHMueTIpO1xuICBib3VuZHMudyA9IG5vbmluZihib3VuZHMueDIgLSBib3VuZHMueDEpO1xuICBib3VuZHMuaCA9IG5vbmluZihib3VuZHMueTIgLSBib3VuZHMueTEpO1xuICBpZiAoYm91bmRzLncgPiAwICYmIGJvdW5kcy5oID4gMCAmJiBkaXNwbGF5ZWQpIHtcbiAgICBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJvdW5kcywgbWFudWFsRXhwYW5zaW9uKTtcblxuICAgIC8vIGV4cGFuZCBib3VuZHMgYnkgMSBiZWNhdXNlIGFudGlhbGlhc2luZyBjYW4gaW5jcmVhc2UgdGhlIHZpc3VhbC9lZmZlY3RpdmUgc2l6ZSBieSAxIG9uIGFsbCBzaWRlc1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJvdW5kcywgMSk7XG4gIH1cbiAgcmV0dXJuIGJvdW5kcztcbn07XG52YXIgZ2V0S2V5ID0gZnVuY3Rpb24gZ2V0S2V5KG9wdHMpIHtcbiAgdmFyIGkgPSAwO1xuICB2YXIgdGYgPSBmdW5jdGlvbiB0Zih2YWwpIHtcbiAgICByZXR1cm4gKHZhbCA/IDEgOiAwKSA8PCBpKys7XG4gIH07XG4gIHZhciBrZXkgPSAwO1xuICBrZXkgKz0gdGYob3B0cy5pbmN1ZGVOb2Rlcyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVFZGdlcyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVMYWJlbHMpO1xuICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlTWFpbkxhYmVscyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMpO1xuICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZU92ZXJsYXlzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZU91dGxpbmVzKTtcbiAgcmV0dXJuIGtleTtcbn07XG52YXIgZ2V0Qm91bmRpbmdCb3hQb3NLZXkgPSBmdW5jdGlvbiBnZXRCb3VuZGluZ0JveFBvc0tleShlbGUpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgIHZhciBwMSA9IGVsZS5zb3VyY2UoKS5wb3NpdGlvbigpO1xuICAgIHZhciBwMiA9IGVsZS50YXJnZXQoKS5wb3NpdGlvbigpO1xuICAgIHZhciByID0gZnVuY3Rpb24gcih4KSB7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZCh4KTtcbiAgICB9O1xuICAgIHJldHVybiBoYXNoSW50c0FycmF5KFtyKHAxLngpLCByKHAxLnkpLCByKHAyLngpLCByKHAyLnkpXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG52YXIgY2FjaGVkQm91bmRpbmdCb3hJbXBsID0gZnVuY3Rpb24gY2FjaGVkQm91bmRpbmdCb3hJbXBsKGVsZSwgb3B0cykge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBiYjtcbiAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgdmFyIGtleSA9IG9wdHMgPT0gbnVsbCA/IGRlZkJiT3B0c0tleSA6IGdldEtleShvcHRzKTtcbiAgdmFyIHVzaW5nRGVmT3B0cyA9IGtleSA9PT0gZGVmQmJPcHRzS2V5O1xuICB2YXIgY3VyclBvc0tleSA9IGdldEJvdW5kaW5nQm94UG9zS2V5KGVsZSk7XG4gIHZhciBpc1Bvc0tleVNhbWUgPSBfcC5iYkNhY2hlUG9zS2V5ID09PSBjdXJyUG9zS2V5O1xuICB2YXIgdXNlQ2FjaGUgPSBvcHRzLnVzZUNhY2hlICYmIGlzUG9zS2V5U2FtZTtcbiAgdmFyIGlzRGlydHkgPSBmdW5jdGlvbiBpc0RpcnR5KGVsZSkge1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYmJDYWNoZSA9PSBudWxsIHx8IGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5O1xuICB9O1xuICB2YXIgbmVlZFJlY2FsYyA9ICF1c2VDYWNoZSB8fCBpc0RpcnR5KGVsZSkgfHwgaXNFZGdlICYmIGlzRGlydHkoZWxlLnNvdXJjZSgpKSB8fCBpc0RpcnR5KGVsZS50YXJnZXQoKSk7XG4gIGlmIChuZWVkUmVjYWxjKSB7XG4gICAgaWYgKCFpc1Bvc0tleVNhbWUpIHtcbiAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodXNlQ2FjaGUpO1xuICAgIH1cbiAgICBiYiA9IGJvdW5kaW5nQm94SW1wbChlbGUsIGRlZkJiT3B0cyk7XG4gICAgX3AuYmJDYWNoZSA9IGJiO1xuICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBjdXJyUG9zS2V5O1xuICB9IGVsc2Uge1xuICAgIGJiID0gX3AuYmJDYWNoZTtcbiAgfVxuXG4gIC8vIG5vdCB1c2luZyBkZWYgb3B0cyA9PiBuZWVkIHRvIGJ1aWxkIHVwIGJiIGZyb20gY29tYmluYXRpb24gb2Ygc3ViIGJic1xuICBpZiAoIXVzaW5nRGVmT3B0cykge1xuICAgIHZhciBpc05vZGUgPSBlbGUuaXNOb2RlKCk7XG4gICAgYmIgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICBpZiAob3B0cy5pbmNsdWRlTm9kZXMgJiYgaXNOb2RlIHx8IG9wdHMuaW5jbHVkZUVkZ2VzICYmICFpc05vZGUpIHtcbiAgICAgIGlmIChvcHRzLmluY2x1ZGVPdmVybGF5cykge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5vdmVybGF5Qm91bmRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21Cb3goYmIsIF9wLmJvZHlCb3VuZHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0cy5pbmNsdWRlTGFiZWxzKSB7XG4gICAgICBpZiAob3B0cy5pbmNsdWRlTWFpbkxhYmVscyAmJiAoIWlzRWRnZSB8fCBvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMgJiYgb3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSkge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5sYWJlbEJvdW5kcy5hbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wdHMuaW5jbHVkZU1haW5MYWJlbHMpIHtcbiAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5sYWJlbEJvdW5kcy5tYWluUm90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pbmNsdWRlU291cmNlTGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMuc291cmNlUm90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgfVxuICByZXR1cm4gYmI7XG59O1xudmFyIGRlZkJiT3B0cyA9IHtcbiAgaW5jbHVkZU5vZGVzOiB0cnVlLFxuICBpbmNsdWRlRWRnZXM6IHRydWUsXG4gIGluY2x1ZGVMYWJlbHM6IHRydWUsXG4gIGluY2x1ZGVNYWluTGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlU291cmNlTGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlVGFyZ2V0TGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlT3ZlcmxheXM6IHRydWUsXG4gIGluY2x1ZGVVbmRlcmxheXM6IHRydWUsXG4gIGluY2x1ZGVPdXRsaW5lczogdHJ1ZSxcbiAgdXNlQ2FjaGU6IHRydWVcbn07XG52YXIgZGVmQmJPcHRzS2V5ID0gZ2V0S2V5KGRlZkJiT3B0cyk7XG52YXIgZmlsbGVkQmJPcHRzID0gZGVmYXVsdHMkZyhkZWZCYk9wdHMpO1xuZWxlc2ZuJGIuYm91bmRpbmdCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYm91bmRzO1xuXG4gIC8vIHRoZSBtYWluIHVzZWNhc2UgaXMgZWxlLmJvdW5kaW5nQm94KCkgZm9yIGEgc2luZ2xlIGVsZW1lbnQgd2l0aCBuby9kZWYgb3B0aW9uc1xuICAvLyBzcGVjaWZpZWQgcy50LiB0aGUgY2FjaGUgaXMgdXNlZCwgc28gY2hlY2sgZm9yIHRoaXMgY2FzZSB0byBtYWtlIGl0IGZhc3RlciBieVxuICAvLyBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUgIT0gbnVsbCAmJiAhdGhpc1swXS5fcHJpdmF0ZS5zdHlsZURpcnR5ICYmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy51c2VDYWNoZSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMudXNlQ2FjaGUgPT09IHRydWUpKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucyA9IGRlZkJiT3B0cztcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgYm91bmRzID0gY2FjaGVkQm91bmRpbmdCb3hJbXBsKHRoaXNbMF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kcyA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IGRlZkJiT3B0cztcbiAgICB2YXIgb3B0cyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGN5ID0gZWxlcy5jeSgpO1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5zdHlsZUVuYWJsZWQoKTtcbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIGN1cnJQb3NLZXkgPSBnZXRCb3VuZGluZ0JveFBvc0tleShlbGUpO1xuICAgICAgICB2YXIgaXNQb3NLZXlTYW1lID0gX3AuYmJDYWNoZVBvc0tleSA9PT0gY3VyclBvc0tleTtcbiAgICAgICAgdmFyIHVzZUNhY2hlID0gb3B0cy51c2VDYWNoZSAmJiBpc1Bvc0tleVNhbWUgJiYgIV9wLnN0eWxlRGlydHk7XG4gICAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodXNlQ2FjaGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCFvcHRpb25zLnVzZUNhY2hlKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZWxlID0gZWxlc1tfaV07XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJvdW5kcywgY2FjaGVkQm91bmRpbmdCb3hJbXBsKF9lbGUsIG9wdHMpKTtcbiAgICB9XG4gIH1cbiAgYm91bmRzLngxID0gbm9uaW5mKGJvdW5kcy54MSk7XG4gIGJvdW5kcy55MSA9IG5vbmluZihib3VuZHMueTEpO1xuICBib3VuZHMueDIgPSBub25pbmYoYm91bmRzLngyKTtcbiAgYm91bmRzLnkyID0gbm9uaW5mKGJvdW5kcy55Mik7XG4gIGJvdW5kcy53ID0gbm9uaW5mKGJvdW5kcy54MiAtIGJvdW5kcy54MSk7XG4gIGJvdW5kcy5oID0gbm9uaW5mKGJvdW5kcy55MiAtIGJvdW5kcy55MSk7XG4gIHJldHVybiBib3VuZHM7XG59O1xuZWxlc2ZuJGIuZGlydHlCb3VuZGluZ0JveENhY2hlID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3AgPSB0aGlzW2ldLl9wcml2YXRlO1xuICAgIF9wLmJiQ2FjaGUgPSBudWxsO1xuICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBudWxsO1xuICAgIF9wLmJvZHlCb3VuZHMgPSBudWxsO1xuICAgIF9wLm92ZXJsYXlCb3VuZHMgPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLmFsbCA9IG51bGw7XG4gICAgX3AubGFiZWxCb3VuZHMuc291cmNlID0gbnVsbDtcbiAgICBfcC5sYWJlbEJvdW5kcy50YXJnZXQgPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLm1haW4gPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLnNvdXJjZVJvdCA9IG51bGw7XG4gICAgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90ID0gbnVsbDtcbiAgICBfcC5sYWJlbEJvdW5kcy5tYWluUm90ID0gbnVsbDtcbiAgICBfcC5hcnJvd0JvdW5kcy5zb3VyY2UgPSBudWxsO1xuICAgIF9wLmFycm93Qm91bmRzLnRhcmdldCA9IG51bGw7XG4gICAgX3AuYXJyb3dCb3VuZHNbJ21pZC1zb3VyY2UnXSA9IG51bGw7XG4gICAgX3AuYXJyb3dCb3VuZHNbJ21pZC10YXJnZXQnXSA9IG51bGw7XG4gIH1cbiAgdGhpcy5lbWl0QW5kTm90aWZ5KCdib3VuZHMnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBwcml2YXRlIGhlbHBlciB0byBnZXQgYm91bmRpbmcgYm94IGZvciBjdXN0b20gbm9kZSBwb3NpdGlvbnNcbi8vIC0gZ29vZCBmb3IgcGVyZiBpbiBjZXJ0YWluIGNhc2VzIGJ1dCBjdXJyZW50bHkgcmVxdWlyZXMgZGlydHlpbmcgdGhlIHJlbmRlcmVkIHN0eWxlXG4vLyAtIHdvdWxkIGJlIGJldHRlciB0byBub3QgbW9kaWZ5IHRoZSBub2RlcyBidXQgdGhlIG5vZGVzIGFyZSByZWFkIGRpcmVjdGx5IGV2ZXJ5d2hlcmUgaW4gdGhlIHJlbmRlcmVyLi4uXG4vLyAtIHRyeSB0byB1c2UgZm9yIG9ubHkgdGhpbmdzIGxpa2UgZGlzY3JldGUgbGF5b3V0cyB3aGVyZSB0aGUgbm9kZSBwb3NpdGlvbiB3b3VsZCBjaGFuZ2UgYW55d2F5XG5lbGVzZm4kYi5ib3VuZGluZ0JveEF0ID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIHBhcmVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gIGlmIChoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgcGFyZW50cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaXNQYXJlbnQoKTtcbiAgICB9KTtcbiAgICBub2RlcyA9IG5vZGVzLm5vdChwYXJlbnRzKTtcbiAgfVxuICBpZiAocGxhaW5PYmplY3QoZm4pKSB7XG4gICAgdmFyIG9iaiA9IGZuO1xuICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH1cbiAgdmFyIHN0b3JlT2xkUG9zID0gZnVuY3Rpb24gc3RvcmVPbGRQb3Mobm9kZSwgaSkge1xuICAgIHJldHVybiBub2RlLl9wcml2YXRlLmJiQXRPbGRQb3MgPSBmbihub2RlLCBpKTtcbiAgfTtcbiAgdmFyIGdldE9sZFBvcyA9IGZ1bmN0aW9uIGdldE9sZFBvcyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuX3ByaXZhdGUuYmJBdE9sZFBvcztcbiAgfTtcbiAgY3kuc3RhcnRCYXRjaCgpO1xuICBub2Rlcy5mb3JFYWNoKHN0b3JlT2xkUG9zKS5zaWxlbnRQb3NpdGlvbnMoZm4pO1xuICBpZiAoaGFzQ29tcG91bmROb2Rlcykge1xuICAgIHBhcmVudHMuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgcGFyZW50cy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBwYXJlbnRzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKHRydWUpOyAvLyBmb3JjZSB1cGRhdGUgYi9jIHdlJ3JlIGluc2lkZSBhIGJhdGNoIGN5Y2xlXG4gIH1cblxuICB2YXIgYmIgPSBjb3B5Qm91bmRpbmdCb3godGhpcy5ib3VuZGluZ0JveCh7XG4gICAgdXNlQ2FjaGU6IGZhbHNlXG4gIH0pKTtcbiAgbm9kZXMuc2lsZW50UG9zaXRpb25zKGdldE9sZFBvcyk7XG4gIGlmIChoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgcGFyZW50cy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICBwYXJlbnRzLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgIHBhcmVudHMudXBkYXRlQ29tcG91bmRCb3VuZHModHJ1ZSk7IC8vIGZvcmNlIHVwZGF0ZSBiL2Mgd2UncmUgaW5zaWRlIGEgYmF0Y2ggY3ljbGVcbiAgfVxuXG4gIGN5LmVuZEJhdGNoKCk7XG4gIHJldHVybiBiYjtcbn07XG5mbiQzLmJvdW5kaW5nYm94ID0gZm4kMy5iYiA9IGZuJDMuYm91bmRpbmdCb3g7XG5mbiQzLnJlbmRlcmVkQm91bmRpbmdib3ggPSBmbiQzLnJlbmRlcmVkQm91bmRpbmdCb3g7XG52YXIgYm91bmRzID0gZWxlc2ZuJGI7XG5cbnZhciBmbiQyLCBlbGVzZm4kYTtcbmZuJDIgPSBlbGVzZm4kYSA9IHt9O1xudmFyIGRlZmluZURpbUZucyA9IGZ1bmN0aW9uIGRlZmluZURpbUZucyhvcHRzKSB7XG4gIG9wdHMudXBwZXJjYXNlTmFtZSA9IGNhcGl0YWxpemUob3B0cy5uYW1lKTtcbiAgb3B0cy5hdXRvTmFtZSA9ICdhdXRvJyArIG9wdHMudXBwZXJjYXNlTmFtZTtcbiAgb3B0cy5sYWJlbE5hbWUgPSAnbGFiZWwnICsgb3B0cy51cHBlcmNhc2VOYW1lO1xuICBvcHRzLm91dGVyTmFtZSA9ICdvdXRlcicgKyBvcHRzLnVwcGVyY2FzZU5hbWU7XG4gIG9wdHMudXBwZXJjYXNlT3V0ZXJOYW1lID0gY2FwaXRhbGl6ZShvcHRzLm91dGVyTmFtZSk7XG4gIGZuJDJbb3B0cy5uYW1lXSA9IGZ1bmN0aW9uIGRpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciBjeSA9IF9wLmN5O1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7XG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKHN0eWxlRW5hYmxlZCkge1xuICAgICAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgICAgICAgICByZXR1cm4gX3Bbb3B0cy5hdXRvTmFtZV0gfHwgMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZCA9IGVsZS5wc3R5bGUob3B0cy5uYW1lKTtcbiAgICAgICAgc3dpdGNoIChkLnN0clZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbGFiZWwnOlxuICAgICAgICAgICAgZWxlLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIF9wLnJzdHlsZVtvcHRzLmxhYmVsTmFtZV0gfHwgMDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGQucGZWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBmbiQyWydvdXRlcicgKyBvcHRzLnVwcGVyY2FzZU5hbWVdID0gZnVuY3Rpb24gb3V0ZXJEaW1JbXBsKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgY3kgPSBfcC5jeTtcbiAgICB2YXIgc3R5bGVFbmFibGVkID0gY3kuX3ByaXZhdGUuc3R5bGVFbmFibGVkO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIGlmIChzdHlsZUVuYWJsZWQpIHtcbiAgICAgICAgdmFyIGRpbSA9IGVsZVtvcHRzLm5hbWVdKCk7XG4gICAgICAgIHZhciBib3JkZXIgPSBlbGUucHN0eWxlKCdib3JkZXItd2lkdGgnKS5wZlZhbHVlOyAvLyBuLmIuIDEvMiBlYWNoIHNpZGVcbiAgICAgICAgdmFyIHBhZGRpbmcgPSAyICogZWxlLnBhZGRpbmcoKTtcbiAgICAgICAgcmV0dXJuIGRpbSArIGJvcmRlciArIHBhZGRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGZuJDJbJ3JlbmRlcmVkJyArIG9wdHMudXBwZXJjYXNlTmFtZV0gPSBmdW5jdGlvbiByZW5kZXJlZERpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIGQgPSBlbGVbb3B0cy5uYW1lXSgpO1xuICAgICAgcmV0dXJuIGQgKiB0aGlzLmN5KCkuem9vbSgpO1xuICAgIH1cbiAgfTtcbiAgZm4kMlsncmVuZGVyZWQnICsgb3B0cy51cHBlcmNhc2VPdXRlck5hbWVdID0gZnVuY3Rpb24gcmVuZGVyZWRPdXRlckRpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIG9kID0gZWxlW29wdHMub3V0ZXJOYW1lXSgpO1xuICAgICAgcmV0dXJuIG9kICogdGhpcy5jeSgpLnpvb20oKTtcbiAgICB9XG4gIH07XG59O1xuZGVmaW5lRGltRm5zKHtcbiAgbmFtZTogJ3dpZHRoJ1xufSk7XG5kZWZpbmVEaW1GbnMoe1xuICBuYW1lOiAnaGVpZ2h0J1xufSk7XG5lbGVzZm4kYS5wYWRkaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlID0gdGhpc1swXTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgICBpZiAoX3AuYXV0b1BhZGRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIF9wLmF1dG9QYWRkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlLnBzdHlsZSgncGFkZGluZycpLnBmVmFsdWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbGUucHN0eWxlKCdwYWRkaW5nJykucGZWYWx1ZTtcbiAgfVxufTtcbmVsZXNmbiRhLnBhZGRlZEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUuaGVpZ2h0KCkgKyAyICogZWxlLnBhZGRpbmcoKTtcbn07XG5lbGVzZm4kYS5wYWRkZWRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUud2lkdGgoKSArIDIgKiBlbGUucGFkZGluZygpO1xufTtcbnZhciB3aWR0aEhlaWdodCA9IGVsZXNmbiRhO1xuXG52YXIgaWZFZGdlID0gZnVuY3Rpb24gaWZFZGdlKGVsZSwgZ2V0VmFsdWUpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgIHJldHVybiBnZXRWYWx1ZShlbGUpO1xuICB9XG59O1xudmFyIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9uKGVsZSwgZ2V0UG9pbnQpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgIHZhciBjeSA9IGVsZS5jeSgpO1xuICAgIHJldHVybiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihnZXRQb2ludChlbGUpLCBjeS56b29tKCksIGN5LnBhbigpKTtcbiAgfVxufTtcbnZhciBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyA9IGZ1bmN0aW9uIGlmRWRnZVJlbmRlcmVkUG9zaXRpb25zKGVsZSwgZ2V0UG9pbnRzKSB7XG4gIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICB2YXIgY3kgPSBlbGUuY3koKTtcbiAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgcmV0dXJuIGdldFBvaW50cyhlbGUpLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgcmV0dXJuIG1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uKHAsIHpvb20sIHBhbik7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgY29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoZWxlKSB7XG4gIHJldHVybiBlbGUucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKGVsZSk7XG59O1xudmFyIHNlZ21lbnRQb2ludHMgPSBmdW5jdGlvbiBzZWdtZW50UG9pbnRzKGVsZSkge1xuICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U2VnbWVudFBvaW50cyhlbGUpO1xufTtcbnZhciBzb3VyY2VFbmRwb2ludCA9IGZ1bmN0aW9uIHNvdXJjZUVuZHBvaW50KGVsZSkge1xuICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZWxlKTtcbn07XG52YXIgdGFyZ2V0RW5kcG9pbnQgPSBmdW5jdGlvbiB0YXJnZXRFbmRwb2ludChlbGUpIHtcbiAgcmV0dXJuIGVsZS5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGVsZSk7XG59O1xudmFyIG1pZHBvaW50ID0gZnVuY3Rpb24gbWlkcG9pbnQoZWxlKSB7XG4gIHJldHVybiBlbGUucmVuZGVyZXIoKS5nZXRFZGdlTWlkcG9pbnQoZWxlKTtcbn07XG52YXIgcHRzID0ge1xuICBjb250cm9sUG9pbnRzOiB7XG4gICAgZ2V0OiBjb250cm9sUG9pbnRzLFxuICAgIG11bHQ6IHRydWVcbiAgfSxcbiAgc2VnbWVudFBvaW50czoge1xuICAgIGdldDogc2VnbWVudFBvaW50cyxcbiAgICBtdWx0OiB0cnVlXG4gIH0sXG4gIHNvdXJjZUVuZHBvaW50OiB7XG4gICAgZ2V0OiBzb3VyY2VFbmRwb2ludFxuICB9LFxuICB0YXJnZXRFbmRwb2ludDoge1xuICAgIGdldDogdGFyZ2V0RW5kcG9pbnRcbiAgfSxcbiAgbWlkcG9pbnQ6IHtcbiAgICBnZXQ6IG1pZHBvaW50XG4gIH1cbn07XG52YXIgcmVuZGVyZWROYW1lID0gZnVuY3Rpb24gcmVuZGVyZWROYW1lKG5hbWUpIHtcbiAgcmV0dXJuICdyZW5kZXJlZCcgKyBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cigxKTtcbn07XG52YXIgZWRnZVBvaW50cyA9IE9iamVjdC5rZXlzKHB0cykucmVkdWNlKGZ1bmN0aW9uIChvYmosIG5hbWUpIHtcbiAgdmFyIHNwZWMgPSBwdHNbbmFtZV07XG4gIHZhciByTmFtZSA9IHJlbmRlcmVkTmFtZShuYW1lKTtcbiAgb2JqW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpZkVkZ2UodGhpcywgc3BlYy5nZXQpO1xuICB9O1xuICBpZiAoc3BlYy5tdWx0KSB7XG4gICAgb2JqW3JOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyh0aGlzLCBzcGVjLmdldCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvYmpbck5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24odGhpcywgc3BlYy5nZXQpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0sIHt9KTtcblxudmFyIGRpbWVuc2lvbnMgPSBleHRlbmQoe30sIHBvc2l0aW9uLCBib3VuZHMsIHdpZHRoSGVpZ2h0LCBlZGdlUG9pbnRzKTtcblxuLyohXG5FdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2VcblxuaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvXG5odHRwczovL3RsZHJsZWdhbC5jb20vbGljZW5zZS9taXQtbGljZW5zZVxuaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvc3JjL2V2ZW50LmpzXG4qL1xuXG52YXIgRXZlbnQgPSBmdW5jdGlvbiBFdmVudChzcmMsIHByb3BzKSB7XG4gIHRoaXMucmVjeWNsZShzcmMsIHByb3BzKTtcbn07XG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxuRXZlbnQucHJvdG90eXBlID0ge1xuICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgcmV0dXJuICdldmVudCc7XG4gIH0sXG4gIHJlY3ljbGU6IGZ1bmN0aW9uIHJlY3ljbGUoc3JjLCBwcm9wcykge1xuICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5GYWxzZTtcbiAgICBpZiAoc3JjICE9IG51bGwgJiYgc3JjLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAvLyBCcm93c2VyIEV2ZW50IG9iamVjdFxuICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7XG5cbiAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG4gICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7XG4gICAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMudHlwZSkge1xuICAgICAgLy8gUGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGV2ZW50IGRldGFpbHNcbiAgICAgIHByb3BzID0gc3JjO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVudCBzdHJpbmdcbiAgICAgIHRoaXMudHlwZSA9IHNyYztcbiAgICB9XG5cbiAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuICAgIGlmIChwcm9wcyAhPSBudWxsKSB7XG4gICAgICAvLyBtb3JlIGVmZmljaWVudCB0byBtYW51YWxseSBjb3B5IGZpZWxkcyB3ZSB1c2VcbiAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHByb3BzLm9yaWdpbmFsRXZlbnQ7XG4gICAgICB0aGlzLnR5cGUgPSBwcm9wcy50eXBlICE9IG51bGwgPyBwcm9wcy50eXBlIDogdGhpcy50eXBlO1xuICAgICAgdGhpcy5jeSA9IHByb3BzLmN5O1xuICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gcHJvcHMucG9zaXRpb247XG4gICAgICB0aGlzLnJlbmRlcmVkUG9zaXRpb24gPSBwcm9wcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2U7XG4gICAgICB0aGlzLmxheW91dCA9IHByb3BzLmxheW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3kgIT0gbnVsbCAmJiB0aGlzLnBvc2l0aW9uICE9IG51bGwgJiYgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIGNyZWF0ZSBhIHJlbmRlcmVkIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBwYXNzZWQgcG9zaXRpb25cbiAgICAgIHZhciBwb3MgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgdmFyIHpvb20gPSB0aGlzLmN5Lnpvb20oKTtcbiAgICAgIHZhciBwYW4gPSB0aGlzLmN5LnBhbigpO1xuICAgICAgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID0ge1xuICAgICAgICB4OiBwb3MueCAqIHpvb20gKyBwYW4ueCxcbiAgICAgICAgeTogcG9zLnkgKiB6b29tICsgcGFuLnlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcbiAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG4gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnRcbiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcbiAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSxcbiAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSxcbiAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcbiAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2Vcbn07XG5cbnZhciBldmVudFJlZ2V4ID0gL14oW14uXSspKFxcLig/OlteLl0rKSk/JC87IC8vIHJlZ2V4IGZvciBtYXRjaGluZyBldmVudCBzdHJpbmdzIChlLmcuIFwiY2xpY2submFtZXNwYWNlXCIpXG52YXIgdW5pdmVyc2FsTmFtZXNwYWNlID0gJy4qJzsgLy8gbWF0Y2hlcyBhcyBpZiBubyBuYW1lc3BhY2Ugc3BlY2lmaWVkIGFuZCBwcmV2ZW50cyB1c2VycyBmcm9tIHVuYmluZGluZyBhY2NpZGVudGFsbHlcblxudmFyIGRlZmF1bHRzJDggPSB7XG4gIHF1YWxpZmllckNvbXBhcmU6IGZ1bmN0aW9uIHF1YWxpZmllckNvbXBhcmUocTEsIHEyKSB7XG4gICAgcmV0dXJuIHExID09PSBxMjtcbiAgfSxcbiAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoIC8qY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKi9cbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyggLypjb250ZXh0LCBldnQqL1xuICApIHt9LFxuICBjYWxsYmFja0NvbnRleHQ6IGZ1bmN0aW9uIGNhbGxiYWNrQ29udGV4dChjb250ZXh0IC8qLCBsaXN0ZW5lciwgZXZlbnRPYmoqLykge1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9LFxuICBiZWZvcmVFbWl0OiBmdW5jdGlvbiBiZWZvcmVFbWl0KCAvKiBjb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmogKi9cbiAgKSB7fSxcbiAgYWZ0ZXJFbWl0OiBmdW5jdGlvbiBhZnRlckVtaXQoIC8qIGNvbnRleHQsIGxpc3RlbmVyLCBldmVudE9iaiAqL1xuICApIHt9LFxuICBidWJibGU6IGZ1bmN0aW9uIGJ1YmJsZSggLypjb250ZXh0Ki9cbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBwYXJlbnQ6IGZ1bmN0aW9uIHBhcmVudCggLypjb250ZXh0Ki9cbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGNvbnRleHQ6IG51bGxcbn07XG52YXIgZGVmYXVsdHNLZXlzID0gT2JqZWN0LmtleXMoZGVmYXVsdHMkOCk7XG52YXIgZW1wdHlPcHRzID0ge307XG5mdW5jdGlvbiBFbWl0dGVyKCkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHlPcHRzO1xuICB2YXIgY29udGV4dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAvLyBtaWNyby1vcHRpbWlzYXRpb24gdnMgT2JqZWN0LmFzc2lnbigpIC0tIHJlZHVjZXMgRWxlbWVudCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZhdWx0c0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gZGVmYXVsdHNLZXlzW2ldO1xuICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XSB8fCBkZWZhdWx0cyQ4W2tleV07XG4gIH1cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLmNvbnRleHQ7XG4gIHRoaXMubGlzdGVuZXJzID0gW107XG4gIHRoaXMuZW1pdHRpbmcgPSAwO1xufVxudmFyIHAgPSBFbWl0dGVyLnByb3RvdHlwZTtcbnZhciBmb3JFYWNoRXZlbnQgPSBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoc2VsZiwgaGFuZGxlciwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKSB7XG4gIGlmIChmbiQ2KHF1YWxpZmllcikpIHtcbiAgICBjYWxsYmFjayA9IHF1YWxpZmllcjtcbiAgICBxdWFsaWZpZXIgPSBudWxsO1xuICB9XG4gIGlmIChjb25mT3ZlcnJpZGVzKSB7XG4gICAgaWYgKGNvbmYgPT0gbnVsbCkge1xuICAgICAgY29uZiA9IGNvbmZPdmVycmlkZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmYgPSBleHRlbmQoe30sIGNvbmYsIGNvbmZPdmVycmlkZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG4gICAgaWYgKGVtcHR5U3RyaW5nKGV2dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgIHZhciByZXQgPSBoYW5kbGVyKHNlbGYsIGV2dCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKTtcbiAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBhbGxvdyBleGl0aW5nIGVhcmx5XG4gICAgfVxuICB9XG59O1xuXG52YXIgbWFrZUV2ZW50T2JqID0gZnVuY3Rpb24gbWFrZUV2ZW50T2JqKHNlbGYsIG9iaikge1xuICBzZWxmLmFkZEV2ZW50RmllbGRzKHNlbGYuY29udGV4dCwgb2JqKTtcbiAgcmV0dXJuIG5ldyBFdmVudChvYmoudHlwZSwgb2JqKTtcbn07XG52YXIgZm9yRWFjaEV2ZW50T2JqID0gZnVuY3Rpb24gZm9yRWFjaEV2ZW50T2JqKHNlbGYsIGhhbmRsZXIsIGV2ZW50cykge1xuICBpZiAoZXZlbnQoZXZlbnRzKSkge1xuICAgIGhhbmRsZXIoc2VsZiwgZXZlbnRzKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAocGxhaW5PYmplY3QoZXZlbnRzKSkge1xuICAgIGhhbmRsZXIoc2VsZiwgbWFrZUV2ZW50T2JqKHNlbGYsIGV2ZW50cykpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG4gICAgaWYgKGVtcHR5U3RyaW5nKGV2dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgIHZhciBldmVudE9iaiA9IG1ha2VFdmVudE9iaihzZWxmLCB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB0YXJnZXQ6IHNlbGYuY29udGV4dFxuICAgICAgfSk7XG4gICAgICBoYW5kbGVyKHNlbGYsIGV2ZW50T2JqKTtcbiAgICB9XG4gIH1cbn07XG5wLm9uID0gcC5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudHMsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYsIGNvbmZPdmVycmlkZXMpIHtcbiAgZm9yRWFjaEV2ZW50KHRoaXMsIGZ1bmN0aW9uIChzZWxmLCBldmVudCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gICAgaWYgKGZuJDYoY2FsbGJhY2spKSB7XG4gICAgICBzZWxmLmxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAvLyBmdWxsIGV2ZW50IHN0cmluZ1xuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIC8vIGNhbGxiYWNrIHRvIHJ1blxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAvLyB0aGUgZXZlbnQgdHlwZSAoZS5nLiAnY2xpY2snKVxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgLy8gdGhlIGV2ZW50IG5hbWVzcGFjZSAoZS5nLiBcIi5mb29cIilcbiAgICAgICAgcXVhbGlmaWVyOiBxdWFsaWZpZXIsXG4gICAgICAgIC8vIGEgcmVzdHJpY3Rpb24gb24gd2hldGhlciB0byBtYXRjaCB0aGlzIGVtaXR0ZXJcbiAgICAgICAgY29uZjogY29uZiAvLyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xucC5vbmUgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gIHJldHVybiB0aGlzLm9uKGV2ZW50cywgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZiwge1xuICAgIG9uZTogdHJ1ZVxuICB9KTtcbn07XG5wLnJlbW92ZUxpc3RlbmVyID0gcC5vZmYgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIGlmICh0aGlzLmVtaXR0aW5nICE9PSAwKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBjb3B5QXJyYXkkMSh0aGlzLmxpc3RlbmVycyk7XG4gIH1cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzO1xuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgIGZvckVhY2hFdmVudChfdGhpcywgZnVuY3Rpb24gKHNlbGYsIGV2ZW50LCB0eXBlLCBuYW1lc3BhY2UsIHF1YWxpZmllciwgY2FsbGJhY2sgLyosIGNvbmYqLykge1xuICAgICAgaWYgKChsaXN0ZW5lci50eXBlID09PSB0eXBlIHx8IGV2ZW50cyA9PT0gJyonKSAmJiAoIW5hbWVzcGFjZSAmJiBsaXN0ZW5lci5uYW1lc3BhY2UgIT09ICcuKicgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSBuYW1lc3BhY2UpICYmICghcXVhbGlmaWVyIHx8IHNlbGYucXVhbGlmaWVyQ29tcGFyZShsaXN0ZW5lci5xdWFsaWZpZXIsIHF1YWxpZmllcikpICYmICghY2FsbGJhY2sgfHwgbGlzdGVuZXIuY2FsbGJhY2sgPT09IGNhbGxiYWNrKSkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKTtcbiAgfTtcbiAgZm9yICh2YXIgaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIF9sb29wKGkpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcbnAucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcignKicpO1xufTtcbnAuZW1pdCA9IHAudHJpZ2dlciA9IGZ1bmN0aW9uIChldmVudHMsIGV4dHJhUGFyYW1zLCBtYW51YWxDYWxsYmFjaykge1xuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnM7XG4gIHZhciBudW1MaXN0ZW5lcnNCZWZvcmVFbWl0ID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgdGhpcy5lbWl0dGluZysrO1xuICBpZiAoIWFycmF5KGV4dHJhUGFyYW1zKSkge1xuICAgIGV4dHJhUGFyYW1zID0gW2V4dHJhUGFyYW1zXTtcbiAgfVxuICBmb3JFYWNoRXZlbnRPYmoodGhpcywgZnVuY3Rpb24gKHNlbGYsIGV2ZW50T2JqKSB7XG4gICAgaWYgKG1hbnVhbENhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgIGxpc3RlbmVycyA9IFt7XG4gICAgICAgIGV2ZW50OiBldmVudE9iai5ldmVudCxcbiAgICAgICAgdHlwZTogZXZlbnRPYmoudHlwZSxcbiAgICAgICAgbmFtZXNwYWNlOiBldmVudE9iai5uYW1lc3BhY2UsXG4gICAgICAgIGNhbGxiYWNrOiBtYW51YWxDYWxsYmFja1xuICAgICAgfV07XG4gICAgICBudW1MaXN0ZW5lcnNCZWZvcmVFbWl0ID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICB9XG4gICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMihpKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBpZiAobGlzdGVuZXIudHlwZSA9PT0gZXZlbnRPYmoudHlwZSAmJiAoIWxpc3RlbmVyLm5hbWVzcGFjZSB8fCBsaXN0ZW5lci5uYW1lc3BhY2UgPT09IGV2ZW50T2JqLm5hbWVzcGFjZSB8fCBsaXN0ZW5lci5uYW1lc3BhY2UgPT09IHVuaXZlcnNhbE5hbWVzcGFjZSkgJiYgc2VsZi5ldmVudE1hdGNoZXMoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopKSB7XG4gICAgICAgIHZhciBhcmdzID0gW2V2ZW50T2JqXTtcbiAgICAgICAgaWYgKGV4dHJhUGFyYW1zICE9IG51bGwpIHtcbiAgICAgICAgICBwdXNoKGFyZ3MsIGV4dHJhUGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmJlZm9yZUVtaXQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuICAgICAgICBpZiAobGlzdGVuZXIuY29uZiAmJiBsaXN0ZW5lci5jb25mLm9uZSkge1xuICAgICAgICAgIHNlbGYubGlzdGVuZXJzID0gc2VsZi5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gbCAhPT0gbGlzdGVuZXI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbnRleHQgPSBzZWxmLmNhbGxiYWNrQ29udGV4dChzZWxmLmNvbnRleHQsIGxpc3RlbmVyLCBldmVudE9iaik7XG4gICAgICAgIHZhciByZXQgPSBsaXN0ZW5lci5jYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgc2VsZi5hZnRlckVtaXQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgIGV2ZW50T2JqLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50T2JqLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaWYgbGlzdGVuZXIgbWF0Y2hlc1xuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1MaXN0ZW5lcnNCZWZvcmVFbWl0OyBpKyspIHtcbiAgICAgIF9sb29wMihpKTtcbiAgICB9IC8vIGZvciBsaXN0ZW5lclxuXG4gICAgaWYgKHNlbGYuYnViYmxlKHNlbGYuY29udGV4dCkgJiYgIWV2ZW50T2JqLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgIHNlbGYucGFyZW50KHNlbGYuY29udGV4dCkuZW1pdChldmVudE9iaiwgZXh0cmFQYXJhbXMpO1xuICAgIH1cbiAgfSwgZXZlbnRzKTtcbiAgdGhpcy5lbWl0dGluZy0tO1xuICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBlbWl0dGVyT3B0aW9ucyQxID0ge1xuICBxdWFsaWZpZXJDb21wYXJlOiBmdW5jdGlvbiBxdWFsaWZpZXJDb21wYXJlKHNlbGVjdG9yMSwgc2VsZWN0b3IyKSB7XG4gICAgaWYgKHNlbGVjdG9yMSA9PSBudWxsIHx8IHNlbGVjdG9yMiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3IxID09IG51bGwgJiYgc2VsZWN0b3IyID09IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzZWxlY3RvcjEuc2FtZVRleHQoc2VsZWN0b3IyKTtcbiAgICB9XG4gIH0sXG4gIGV2ZW50TWF0Y2hlczogZnVuY3Rpb24gZXZlbnRNYXRjaGVzKGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgdmFyIHNlbGVjdG9yID0gbGlzdGVuZXIucXVhbGlmaWVyO1xuICAgIGlmIChzZWxlY3RvciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlICE9PSBldmVudE9iai50YXJnZXQgJiYgZWxlbWVudChldmVudE9iai50YXJnZXQpICYmIHNlbGVjdG9yLm1hdGNoZXMoZXZlbnRPYmoudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhlbGUsIGV2dCkge1xuICAgIGV2dC5jeSA9IGVsZS5jeSgpO1xuICAgIGV2dC50YXJnZXQgPSBlbGU7XG4gIH0sXG4gIGNhbGxiYWNrQ29udGV4dDogZnVuY3Rpb24gY2FsbGJhY2tDb250ZXh0KGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnF1YWxpZmllciAhPSBudWxsID8gZXZlbnRPYmoudGFyZ2V0IDogZWxlO1xuICB9LFxuICBiZWZvcmVFbWl0OiBmdW5jdGlvbiBiZWZvcmVFbWl0KGNvbnRleHQsIGxpc3RlbmVyIC8qLCBldmVudE9iaiovKSB7XG4gICAgaWYgKGxpc3RlbmVyLmNvbmYgJiYgbGlzdGVuZXIuY29uZi5vbmNlKSB7XG4gICAgICBsaXN0ZW5lci5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyLmV2ZW50LCBsaXN0ZW5lci5xdWFsaWZpZXIsIGxpc3RlbmVyLmNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG4gIGJ1YmJsZTogZnVuY3Rpb24gYnViYmxlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBwYXJlbnQ6IGZ1bmN0aW9uIHBhcmVudChlbGUpIHtcbiAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKSA/IGVsZS5wYXJlbnQoKSA6IGVsZS5jeSgpO1xuICB9XG59O1xudmFyIGFyZ1NlbGVjdG9yJDEgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgaWYgKHN0cmluZyhhcmcpKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvcihhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcmc7XG4gIH1cbn07XG52YXIgZWxlc2ZuJDkgPSB7XG4gIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIGNyZWF0ZUVtaXR0ZXIoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIGlmICghX3AuZW1pdHRlcikge1xuICAgICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMkMSwgZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGVtaXR0ZXI6IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcjtcbiAgfSxcbiAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGVsZS5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBhcmdTZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZUFsbExpc3RlbmVyczogZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGVsZS5lbWl0dGVyKCkub25lKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBvbmNlOiBmdW5jdGlvbiBvbmNlKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjaywge1xuICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICBvbmNlQ29sbGVjdGlvbjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgZWxlLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZW1pdEFuZE5vdGlmeTogZnVuY3Rpb24gZW1pdEFuZE5vdGlmeShldmVudCwgZXh0cmFQYXJhbXMpIHtcbiAgICAvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHlcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGVtcHR5IGNvbGxlY3Rpb25zIGRvbid0IG5lZWQgdG8gbm90aWZ5IGFueXRoaW5nXG5cbiAgICAvLyBub3RpZnkgcmVuZGVyZXJcbiAgICB0aGlzLmN5KCkubm90aWZ5KGV2ZW50LCB0aGlzKTtcbiAgICB0aGlzLmVtaXQoZXZlbnQsIGV4dHJhUGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcbmRlZmluZS5ldmVudEFsaWFzZXNPbihlbGVzZm4kOSk7XG5cbnZhciBlbGVzZm4kOCA9IHtcbiAgbm9kZXM6IGZ1bmN0aW9uIG5vZGVzKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgZWRnZXM6IGZ1bmN0aW9uIGVkZ2VzKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNFZGdlKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgLy8gaW50ZXJuYWwgaGVscGVyIHRvIGdldCBub2RlcyBhbmQgZWRnZXMgYXMgc2VwYXJhdGUgY29sbGVjdGlvbnMgd2l0aCBzaW5nbGUgaXRlcmF0aW9uIG92ZXIgZWxlbWVudHNcbiAgYnlHcm91cDogZnVuY3Rpb24gYnlHcm91cCgpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5zcGF3bigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgIGVkZ2VzOiBlZGdlc1xuICAgIH07XG4gIH0sXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKF9maWx0ZXIsIHRoaXNBcmcpIHtcbiAgICBpZiAoX2ZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjaGVjayB0aGlzIGZpcnN0IGIvYyBpdCdzIHRoZSBtb3N0IGNvbW1vbi9wZXJmb3JtYW50IGNhc2VcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nKF9maWx0ZXIpIHx8IGVsZW1lbnRPckNvbGxlY3Rpb24oX2ZpbHRlcikpIHtcbiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoX2ZpbHRlcikuZmlsdGVyKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoZm4kNihfZmlsdGVyKSkge1xuICAgICAgdmFyIGZpbHRlckVsZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBpbmNsdWRlID0gdGhpc0FyZyA/IF9maWx0ZXIuYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogX2ZpbHRlcihlbGUsIGksIGVsZXMpO1xuICAgICAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgICAgIGZpbHRlckVsZXMucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyRWxlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oKTsgLy8gaWYgbm90IGhhbmRsZWQgYnkgYWJvdmUsIGdpdmUgJ2VtIGFuIGVtcHR5IGNvbGxlY3Rpb25cbiAgfSxcblxuICBub3Q6IGZ1bmN0aW9uIG5vdCh0b1JlbW92ZSkge1xuICAgIGlmICghdG9SZW1vdmUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RyaW5nKHRvUmVtb3ZlKSkge1xuICAgICAgICB0b1JlbW92ZSA9IHRoaXMuZmlsdGVyKHRvUmVtb3ZlKTtcbiAgICAgIH1cbiAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuc3Bhd24oKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07XG4gICAgICAgIHZhciByZW1vdmUgPSB0b1JlbW92ZS5oYXMoZWxlbWVudCk7XG4gICAgICAgIGlmICghcmVtb3ZlKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cbiAgfSxcbiAgYWJzb2x1dGVDb21wbGVtZW50OiBmdW5jdGlvbiBhYnNvbHV0ZUNvbXBsZW1lbnQoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHJldHVybiBjeS5tdXRhYmxlRWxlbWVudHMoKS5ub3QodGhpcyk7XG4gIH0sXG4gIGludGVyc2VjdDogZnVuY3Rpb24gaW50ZXJzZWN0KG90aGVyKSB7XG4gICAgLy8gaWYgYSBzZWxlY3RvciBpcyBzcGVjaWZpZWQsIHRoZW4gZmlsdGVyIGJ5IGl0IGluc3RlYWRcbiAgICBpZiAoc3RyaW5nKG90aGVyKSkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gb3RoZXI7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGNvbDEgPSB0aGlzO1xuICAgIHZhciBjb2wyID0gb3RoZXI7XG4gICAgdmFyIGNvbDFTbWFsbGVyID0gdGhpcy5sZW5ndGggPCBvdGhlci5sZW5ndGg7XG4gICAgdmFyIGNvbFMgPSBjb2wxU21hbGxlciA/IGNvbDEgOiBjb2wyO1xuICAgIHZhciBjb2xMID0gY29sMVNtYWxsZXIgPyBjb2wyIDogY29sMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbFMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBjb2xTW2ldO1xuICAgICAgaWYgKGNvbEwuaGFzKGVsZSkpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sXG4gIHhvcjogZnVuY3Rpb24geG9yKG90aGVyKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoc3RyaW5nKG90aGVyKSkge1xuICAgICAgb3RoZXIgPSBjeS4kKG90aGVyKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBjb2wxID0gdGhpcztcbiAgICB2YXIgY29sMiA9IG90aGVyO1xuICAgIHZhciBhZGQgPSBmdW5jdGlvbiBhZGQoY29sLCBvdGhlcikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGNvbFtpXTtcbiAgICAgICAgdmFyIGlkID0gZWxlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICAgIHZhciBpbk90aGVyID0gb3RoZXIuaGFzRWxlbWVudFdpdGhJZChpZCk7XG4gICAgICAgIGlmICghaW5PdGhlcikge1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgYWRkKGNvbDEsIGNvbDIpO1xuICAgIGFkZChjb2wyLCBjb2wxKTtcbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sXG4gIGRpZmY6IGZ1bmN0aW9uIGRpZmYob3RoZXIpIHtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIGlmIChzdHJpbmcob3RoZXIpKSB7XG4gICAgICBvdGhlciA9IGN5LiQob3RoZXIpO1xuICAgIH1cbiAgICB2YXIgbGVmdCA9IHRoaXMuc3Bhd24oKTtcbiAgICB2YXIgcmlnaHQgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGJvdGggPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGNvbDEgPSB0aGlzO1xuICAgIHZhciBjb2wyID0gb3RoZXI7XG4gICAgdmFyIGFkZCA9IGZ1bmN0aW9uIGFkZChjb2wsIG90aGVyLCByZXRFbGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gY29sW2ldO1xuICAgICAgICB2YXIgaWQgPSBlbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICAgICAgdmFyIGluT3RoZXIgPSBvdGhlci5oYXNFbGVtZW50V2l0aElkKGlkKTtcbiAgICAgICAgaWYgKGluT3RoZXIpIHtcbiAgICAgICAgICBib3RoLm1lcmdlKGVsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0RWxlcy5wdXNoKGVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGFkZChjb2wxLCBjb2wyLCBsZWZ0KTtcbiAgICBhZGQoY29sMiwgY29sMSwgcmlnaHQpO1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgYm90aDogYm90aFxuICAgIH07XG4gIH0sXG4gIGFkZDogZnVuY3Rpb24gYWRkKHRvQWRkKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoIXRvQWRkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHN0cmluZyh0b0FkZCkpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHRvQWRkO1xuICAgICAgdG9BZGQgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnNwYXduU2VsZigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9BZGQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0b0FkZFtpXTtcbiAgICAgIHZhciBhZGQgPSAhdGhpcy5oYXMoZWxlKTtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sXG4gIC8vIGluIHBsYWNlIG1lcmdlIG9uIGNhbGxpbmcgY29sbGVjdGlvblxuICBtZXJnZTogZnVuY3Rpb24gbWVyZ2UodG9BZGQpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBjeSA9IF9wLmN5O1xuICAgIGlmICghdG9BZGQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodG9BZGQgJiYgc3RyaW5nKHRvQWRkKSkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gdG9BZGQ7XG4gICAgICB0b0FkZCA9IGN5Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfVxuICAgIHZhciBtYXAgPSBfcC5tYXA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0FkZC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRvQWRkRWxlID0gdG9BZGRbaV07XG4gICAgICB2YXIgaWQgPSB0b0FkZEVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgdmFyIGFkZCA9ICFtYXAuaGFzKGlkKTtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sZW5ndGgrKztcbiAgICAgICAgdGhpc1tpbmRleF0gPSB0b0FkZEVsZTtcbiAgICAgICAgbWFwLnNldChpZCwge1xuICAgICAgICAgIGVsZTogdG9BZGRFbGUsXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1bm1lcmdlQXQ6IGZ1bmN0aW9uIHVubWVyZ2VBdChpKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgbWFwID0gX3AubWFwO1xuXG4gICAgLy8gcmVtb3ZlIGVsZVxuICAgIHRoaXNbaV0gPSB1bmRlZmluZWQ7XG4gICAgbWFwW1wiZGVsZXRlXCJdKGlkKTtcbiAgICB2YXIgdW5tZXJnZWRMYXN0RWxlID0gaSA9PT0gdGhpcy5sZW5ndGggLSAxO1xuXG4gICAgLy8gcmVwbGFjZSBlbXB0eSBzcG90IHdpdGggbGFzdCBlbGUgaW4gY29sbGVjdGlvblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEgJiYgIXVubWVyZ2VkTGFzdEVsZSkge1xuICAgICAgdmFyIGxhc3RFbGVJID0gdGhpcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3RFbGUgPSB0aGlzW2xhc3RFbGVJXTtcbiAgICAgIHZhciBsYXN0RWxlSWQgPSBsYXN0RWxlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICB0aGlzW2xhc3RFbGVJXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXNbaV0gPSBsYXN0RWxlO1xuICAgICAgbWFwLnNldChsYXN0RWxlSWQsIHtcbiAgICAgICAgZWxlOiBsYXN0RWxlLFxuICAgICAgICBpbmRleDogaVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGNvbGxlY3Rpb24gaXMgbm93IDEgZWxlIHNtYWxsZXJcbiAgICB0aGlzLmxlbmd0aC0tO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICAvLyByZW1vdmUgc2luZ2xlIGVsZSBpbiBwbGFjZSBpbiBjYWxsaW5nIGNvbGxlY3Rpb25cbiAgdW5tZXJnZU9uZTogZnVuY3Rpb24gdW5tZXJnZU9uZShlbGUpIHtcbiAgICBlbGUgPSBlbGVbMF07XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgaWQgPSBlbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICB2YXIgbWFwID0gX3AubWFwO1xuICAgIHZhciBlbnRyeSA9IG1hcC5nZXQoaWQpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBubyBuZWVkIHRvIHJlbW92ZVxuICAgIH1cblxuICAgIHZhciBpID0gZW50cnkuaW5kZXg7XG4gICAgdGhpcy51bm1lcmdlQXQoaSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIHJlbW92ZSBlbGVzIGluIHBsYWNlIG9uIGNhbGxpbmcgY29sbGVjdGlvblxuICB1bm1lcmdlOiBmdW5jdGlvbiB1bm1lcmdlKHRvUmVtb3ZlKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoIXRvUmVtb3ZlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRvUmVtb3ZlICYmIHN0cmluZyh0b1JlbW92ZSkpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHRvUmVtb3ZlO1xuICAgICAgdG9SZW1vdmUgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVubWVyZ2VPbmUodG9SZW1vdmVbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1bm1lcmdlQnk6IGZ1bmN0aW9uIHVubWVyZ2VCeSh0b1JtRm4pIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBpZiAodG9SbUZuKGVsZSkpIHtcbiAgICAgICAgdGhpcy51bm1lcmdlQXQoaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBGbiwgdGhpc0FyZykge1xuICAgIHZhciBhcnIgPSBbXTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIHZhciByZXQgPSB0aGlzQXJnID8gbWFwRm4uYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogbWFwRm4oZWxlLCBpLCBlbGVzKTtcbiAgICAgIGFyci5wdXNoKHJldCk7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG4gIH0sXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGZuLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgdmFsID0gaW5pdGlhbFZhbHVlO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbCA9IGZuKHZhbCwgZWxlc1tpXSwgaSwgZWxlcyk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH0sXG4gIG1heDogZnVuY3Rpb24gbWF4KHZhbEZuLCB0aGlzQXJnKSB7XG4gICAgdmFyIG1heCA9IC1JbmZpbml0eTtcbiAgICB2YXIgbWF4RWxlO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgdmFyIHZhbCA9IHRoaXNBcmcgPyB2YWxGbi5hcHBseSh0aGlzQXJnLCBbZWxlLCBpLCBlbGVzXSkgOiB2YWxGbihlbGUsIGksIGVsZXMpO1xuICAgICAgaWYgKHZhbCA+IG1heCkge1xuICAgICAgICBtYXggPSB2YWw7XG4gICAgICAgIG1heEVsZSA9IGVsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBtYXgsXG4gICAgICBlbGU6IG1heEVsZVxuICAgIH07XG4gIH0sXG4gIG1pbjogZnVuY3Rpb24gbWluKHZhbEZuLCB0aGlzQXJnKSB7XG4gICAgdmFyIG1pbiA9IEluZmluaXR5O1xuICAgIHZhciBtaW5FbGU7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpc0FyZyA/IHZhbEZuLmFwcGx5KHRoaXNBcmcsIFtlbGUsIGksIGVsZXNdKSA6IHZhbEZuKGVsZSwgaSwgZWxlcyk7XG4gICAgICBpZiAodmFsIDwgbWluKSB7XG4gICAgICAgIG1pbiA9IHZhbDtcbiAgICAgICAgbWluRWxlID0gZWxlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG1pbixcbiAgICAgIGVsZTogbWluRWxlXG4gICAgfTtcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xudmFyIGZuJDEgPSBlbGVzZm4kODtcbmZuJDFbJ3UnXSA9IGZuJDFbJ3wnXSA9IGZuJDFbJysnXSA9IGZuJDEudW5pb24gPSBmbiQxLm9yID0gZm4kMS5hZGQ7XG5mbiQxWydcXFxcJ10gPSBmbiQxWychJ10gPSBmbiQxWyctJ10gPSBmbiQxLmRpZmZlcmVuY2UgPSBmbiQxLnJlbGF0aXZlQ29tcGxlbWVudCA9IGZuJDEuc3VidHJhY3QgPSBmbiQxLm5vdDtcbmZuJDFbJ24nXSA9IGZuJDFbJyYnXSA9IGZuJDFbJy4nXSA9IGZuJDEuYW5kID0gZm4kMS5pbnRlcnNlY3Rpb24gPSBmbiQxLmludGVyc2VjdDtcbmZuJDFbJ14nXSA9IGZuJDFbJygrKSddID0gZm4kMVsnKC0pJ10gPSBmbiQxLnN5bW1ldHJpY0RpZmZlcmVuY2UgPSBmbiQxLnN5bWRpZmYgPSBmbiQxLnhvcjtcbmZuJDEuZm5GaWx0ZXIgPSBmbiQxLmZpbHRlckZuID0gZm4kMS5zdGRGaWx0ZXIgPSBmbiQxLmZpbHRlcjtcbmZuJDEuY29tcGxlbWVudCA9IGZuJDEuYWJzY29tcCA9IGZuJDEuYWJzb2x1dGVDb21wbGVtZW50O1xuXG52YXIgZWxlc2ZuJDcgPSB7XG4gIGlzTm9kZTogZnVuY3Rpb24gaXNOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwKCkgPT09ICdub2Rlcyc7XG4gIH0sXG4gIGlzRWRnZTogZnVuY3Rpb24gaXNFZGdlKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwKCkgPT09ICdlZGdlcyc7XG4gIH0sXG4gIGlzTG9vcDogZnVuY3Rpb24gaXNMb29wKCkge1xuICAgIHJldHVybiB0aGlzLmlzRWRnZSgpICYmIHRoaXMuc291cmNlKClbMF0gPT09IHRoaXMudGFyZ2V0KClbMF07XG4gIH0sXG4gIGlzU2ltcGxlOiBmdW5jdGlvbiBpc1NpbXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkZ2UoKSAmJiB0aGlzLnNvdXJjZSgpWzBdICE9PSB0aGlzLnRhcmdldCgpWzBdO1xuICB9LFxuICBncm91cDogZnVuY3Rpb24gZ3JvdXAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5ncm91cDtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogIEVsZW1lbnRzIGFyZSBkcmF3biBpbiBhIHNwZWNpZmljIG9yZGVyIGJhc2VkIG9uIGNvbXBvdW5kIGRlcHRoIChsb3cgdG8gaGlnaCksIHRoZSBlbGVtZW50IHR5cGUgKG5vZGVzIGFib3ZlIGVkZ2VzKSxcbiAqICBhbmQgei1pbmRleCAobG93IHRvIGhpZ2gpLiAgVGhlc2Ugc3R5bGVzIGFmZmVjdCBob3cgdGhpcyBhcHBsaWVzOlxuICpcbiAqICB6LWNvbXBvdW5kLWRlcHRoOiBNYXkgYmUgYGJvdHRvbSB8IG9ycGhhbiB8IGF1dG8gfCB0b3BgLiAgVGhlIGZpcnN0IGRyYXduIGlzIGBib3R0b21gLCB0aGVuIGBvcnBoYW5gIHdoaWNoIGlzIHRoZVxuICogICAgICBzYW1lIGRlcHRoIGFzIHRoZSByb290IG9mIHRoZSBjb21wb3VuZCBncmFwaCwgZm9sbG93ZWQgYnkgdGhlIGRlZmF1bHQgdmFsdWUgYGF1dG9gIHdoaWNoIGRyYXdzIGluIG9yZGVyIGZyb21cbiAqICAgICAgcm9vdCB0byBsZWF2ZXMgb2YgdGhlIGNvbXBvdW5kIGdyYXBoLiAgVGhlIGxhc3QgZHJhd24gaXMgYHRvcGAuXG4gKiAgei1pbmRleC1jb21wYXJlOiBNYXkgYmUgYGF1dG8gfCBtYW51YWxgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGF1dG9gIHdoaWNoIGFsd2F5cyBkcmF3cyBlZGdlcyB1bmRlciBub2Rlcy5cbiAqICAgICAgYG1hbnVhbGAgaWdub3JlcyB0aGlzIGNvbnZlbnRpb24gYW5kIGRyYXdzIGJhc2VkIG9uIHRoZSBgei1pbmRleGAgdmFsdWUgc2V0dGluZy5cbiAqICB6LWluZGV4OiBBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgYWZmZWN0cyB0aGUgcmVsYXRpdmUgZHJhdyBvcmRlciBvZiBlbGVtZW50cy4gIEluIGdlbmVyYWwsIGFuIGVsZW1lbnQgd2l0aCBhIGhpZ2hlclxuICogICAgICBgei1pbmRleGAgd2lsbCBiZSBkcmF3biBvbiB0b3Agb2YgYW4gZWxlbWVudCB3aXRoIGEgbG93ZXIgYHotaW5kZXhgLlxuICovXG52YXIgekluZGV4U29ydCA9IGZ1bmN0aW9uIHpJbmRleFNvcnQoYSwgYikge1xuICB2YXIgY3kgPSBhLmN5KCk7XG4gIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICBmdW5jdGlvbiBnZXREZXB0aChlbGUpIHtcbiAgICB2YXIgc3R5bGUgPSBlbGUucHN0eWxlKCd6LWNvbXBvdW5kLWRlcHRoJyk7XG4gICAgaWYgKHN0eWxlLnZhbHVlID09PSAnYXV0bycpIHtcbiAgICAgIHJldHVybiBoYXNDb21wb3VuZE5vZGVzID8gZWxlLnpEZXB0aCgpIDogMDtcbiAgICB9IGVsc2UgaWYgKHN0eWxlLnZhbHVlID09PSAnYm90dG9tJykge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoc3R5bGUudmFsdWUgPT09ICd0b3AnKSB7XG4gICAgICByZXR1cm4gTUFYX0lOVCQxO1xuICAgIH1cbiAgICAvLyAnb3JwaGFuJ1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBkZXB0aERpZmYgPSBnZXREZXB0aChhKSAtIGdldERlcHRoKGIpO1xuICBpZiAoZGVwdGhEaWZmICE9PSAwKSB7XG4gICAgcmV0dXJuIGRlcHRoRGlmZjtcbiAgfVxuICBmdW5jdGlvbiBnZXRFbGVEZXB0aChlbGUpIHtcbiAgICB2YXIgc3R5bGUgPSBlbGUucHN0eWxlKCd6LWluZGV4LWNvbXBhcmUnKTtcbiAgICBpZiAoc3R5bGUudmFsdWUgPT09ICdhdXRvJykge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSA/IDEgOiAwO1xuICAgIH1cbiAgICAvLyAnbWFudWFsJ1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBlbGVEaWZmID0gZ2V0RWxlRGVwdGgoYSkgLSBnZXRFbGVEZXB0aChiKTtcbiAgaWYgKGVsZURpZmYgIT09IDApIHtcbiAgICByZXR1cm4gZWxlRGlmZjtcbiAgfVxuICB2YXIgekRpZmYgPSBhLnBzdHlsZSgnei1pbmRleCcpLnZhbHVlIC0gYi5wc3R5bGUoJ3otaW5kZXgnKS52YWx1ZTtcbiAgaWYgKHpEaWZmICE9PSAwKSB7XG4gICAgcmV0dXJuIHpEaWZmO1xuICB9XG4gIC8vIGNvbXBhcmUgaW5kaWNlcyBpbiB0aGUgY29yZSAob3JkZXIgYWRkZWQgdG8gZ3JhcGggdy8gbGFzdCBvbiB0b3ApXG4gIHJldHVybiBhLnBvb2xJbmRleCgpIC0gYi5wb29sSW5kZXgoKTtcbn07XG5cbnZhciBlbGVzZm4kNiA9IHtcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbiwgdGhpc0FyZykge1xuICAgIGlmIChmbiQ2KGZuKSkge1xuICAgICAgdmFyIE4gPSB0aGlzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICB2YXIgcmV0ID0gdGhpc0FyZyA/IGZuLmFwcGx5KHRoaXNBcmcsIFtlbGUsIGksIHRoaXNdKSA6IGZuKGVsZSwgaSwgdGhpcyk7XG4gICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gZXhpdCBlYWNoIGVhcmx5IG9uIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICB0b0FycmF5OiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyYXkucHVzaCh0aGlzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9LFxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB0aGlzU2l6ZSA9IHRoaXMubGVuZ3RoO1xuICAgIGlmIChlbmQgPT0gbnVsbCkge1xuICAgICAgZW5kID0gdGhpc1NpemU7XG4gICAgfVxuICAgIGlmIChzdGFydCA9PSBudWxsKSB7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gdGhpc1NpemUgKyBzdGFydDtcbiAgICB9XG4gICAgaWYgKGVuZCA8IDApIHtcbiAgICAgIGVuZCA9IHRoaXNTaXplICsgZW5kO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPj0gMCAmJiBpIDwgZW5kICYmIGkgPCB0aGlzU2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKHRoaXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihhcnJheSk7XG4gIH0sXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xuICB9LFxuICBlcTogZnVuY3Rpb24gZXEoaSkge1xuICAgIHJldHVybiB0aGlzW2ldIHx8IHRoaXMuc3Bhd24oKTtcbiAgfSxcbiAgZmlyc3Q6IGZ1bmN0aW9uIGZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzWzBdIHx8IHRoaXMuc3Bhd24oKTtcbiAgfSxcbiAgbGFzdDogZnVuY3Rpb24gbGFzdCgpIHtcbiAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIHx8IHRoaXMuc3Bhd24oKTtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgfSxcbiAgbm9uZW1wdHk6IGZ1bmN0aW9uIG5vbmVtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5lbXB0eSgpO1xuICB9LFxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KHNvcnRGbikge1xuICAgIGlmICghZm4kNihzb3J0Rm4pKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHNvcnRlZCA9IHRoaXMudG9BcnJheSgpLnNvcnQoc29ydEZuKTtcbiAgICByZXR1cm4gdGhpcy5zcGF3bihzb3J0ZWQpO1xuICB9LFxuICBzb3J0QnlaSW5kZXg6IGZ1bmN0aW9uIHNvcnRCeVpJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0KHpJbmRleFNvcnQpO1xuICB9LFxuICB6RGVwdGg6IGZ1bmN0aW9uIHpEZXB0aCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBsZXQgY3kgPSBlbGUuY3koKTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIGdyb3VwID0gX3AuZ3JvdXA7XG4gICAgaWYgKGdyb3VwID09PSAnbm9kZXMnKSB7XG4gICAgICB2YXIgZGVwdGggPSBfcC5kYXRhLnBhcmVudCA/IGVsZS5wYXJlbnRzKCkuc2l6ZSgpIDogMDtcbiAgICAgIGlmICghZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuIE1BWF9JTlQkMSAtIDE7IC8vIGNoaWxkbGVzcyBub2RlcyBhbHdheXMgb24gdG9wXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXB0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgICB2YXIgc3JjRGVwdGggPSBzcmMuekRlcHRoKCk7XG4gICAgICB2YXIgdGd0RGVwdGggPSB0Z3QuekRlcHRoKCk7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoc3JjRGVwdGgsIHRndERlcHRoLCAwKTsgLy8gZGVwdGggb2YgZGVlcGVzdCBwYXJlbnRcbiAgICB9XG4gIH1cbn07XG5cbmVsZXNmbiQ2LmVhY2ggPSBlbGVzZm4kNi5mb3JFYWNoO1xudmFyIGRlZmluZVN5bWJvbEl0ZXJhdG9yID0gZnVuY3Rpb24gZGVmaW5lU3ltYm9sSXRlcmF0b3IoKSB7XG4gIHZhciB0eXBlb2ZVbmRlZiA9IFwidW5kZWZpbmVkXCIgO1xuICB2YXIgaXNJdGVyYXRvclN1cHBvcnRlZCA9ICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoU3ltYm9sKSkgIT0gdHlwZW9mVW5kZWYgJiYgX3R5cGVvZihTeW1ib2wuaXRlcmF0b3IpICE9IHR5cGVvZlVuZGVmOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgaWYgKGlzSXRlcmF0b3JTdXBwb3J0ZWQpIHtcbiAgICBlbGVzZm4kNltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5JDEoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIGlmIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IF90aGlzW2krK107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZW50cnkuZG9uZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgfSwgU3ltYm9sLml0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59O1xuZGVmaW5lU3ltYm9sSXRlcmF0b3IoKTtcblxudmFyIGdldExheW91dERpbWVuc2lvbk9wdGlvbnMgPSBkZWZhdWx0cyRnKHtcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZVxufSk7XG52YXIgZWxlc2ZuJDUgPSB7XG4gIC8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgbm9kZSBkaW1lbnNpb25zIHsgeCwgeSB9IGJhc2VkIG9uIG9wdGlvbnMgZ2l2ZW5cbiAgbGF5b3V0RGltZW5zaW9uczogZnVuY3Rpb24gbGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IGdldExheW91dERpbWVuc2lvbk9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIGRpbXM7XG4gICAgaWYgKCF0aGlzLnRha2VzVXBTcGFjZSgpKSB7XG4gICAgICBkaW1zID0ge1xuICAgICAgICB3OiAwLFxuICAgICAgICBoOiAwXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpIHtcbiAgICAgIHZhciBiYkRpbSA9IHRoaXMuYm91bmRpbmdCb3goKTtcbiAgICAgIGRpbXMgPSB7XG4gICAgICAgIHc6IGJiRGltLncsXG4gICAgICAgIGg6IGJiRGltLmhcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpbXMgPSB7XG4gICAgICAgIHc6IHRoaXMub3V0ZXJXaWR0aCgpLFxuICAgICAgICBoOiB0aGlzLm91dGVySGVpZ2h0KClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc2FuaXRpc2UgdGhlIGRpbWVuc2lvbnMgZm9yIGV4dGVybmFsIGxheW91dHMgKGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8pXG4gICAgaWYgKGRpbXMudyA9PT0gMCB8fCBkaW1zLmggPT09IDApIHtcbiAgICAgIGRpbXMudyA9IGRpbXMuaCA9IDE7XG4gICAgfVxuICAgIHJldHVybiBkaW1zO1xuICB9LFxuICAvLyB1c2luZyBzdGFuZGFyZCBsYXlvdXQgb3B0aW9ucywgYXBwbHkgcG9zaXRpb24gZnVuY3Rpb24gKHcvIG9yIHcvbyBhbmltYXRpb24pXG4gIGxheW91dFBvc2l0aW9uczogZnVuY3Rpb24gbGF5b3V0UG9zaXRpb25zKGxheW91dCwgb3B0aW9ucywgZm4pIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gIW4uaXNQYXJlbnQoKTtcbiAgICB9KTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIGxheW91dEVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIG5vZGVzICYgZWRnZXNcbiAgICB2YXIgZ2V0TWVtb2l6ZUtleSA9IGZ1bmN0aW9uIGdldE1lbW9pemVLZXkobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaWQoKTtcbiAgICB9O1xuICAgIHZhciBmbk1lbSA9IG1lbW9pemUkMShmbiwgZ2V0TWVtb2l6ZUtleSk7IC8vIG1lbW9pemVkIHZlcnNpb24gb2YgcG9zaXRpb24gZnVuY3Rpb25cblxuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRzdGFydCcsXG4gICAgICBsYXlvdXQ6IGxheW91dFxuICAgIH0pO1xuICAgIGxheW91dC5hbmltYXRpb25zID0gW107XG4gICAgdmFyIGNhbGN1bGF0ZVNwYWNpbmcgPSBmdW5jdGlvbiBjYWxjdWxhdGVTcGFjaW5nKHNwYWNpbmcsIG5vZGVzQmIsIHBvcykge1xuICAgICAgdmFyIGNlbnRlciA9IHtcbiAgICAgICAgeDogbm9kZXNCYi54MSArIG5vZGVzQmIudyAvIDIsXG4gICAgICAgIHk6IG5vZGVzQmIueTEgKyBub2Rlc0JiLmggLyAyXG4gICAgICB9O1xuICAgICAgdmFyIHNwYWNpbmdWZWN0b3IgPSB7XG4gICAgICAgIC8vIHNjYWxlIGZyb20gY2VudGVyIG9mIGJvdW5kaW5nIGJveCAobm90IG5lY2Vzc2FyaWx5IDAsMClcbiAgICAgICAgeDogKHBvcy54IC0gY2VudGVyLngpICogc3BhY2luZyxcbiAgICAgICAgeTogKHBvcy55IC0gY2VudGVyLnkpICogc3BhY2luZ1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgc3BhY2luZ1ZlY3Rvci54LFxuICAgICAgICB5OiBjZW50ZXIueSArIHNwYWNpbmdWZWN0b3IueVxuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciB1c2VTcGFjaW5nRmFjdG9yID0gb3B0aW9ucy5zcGFjaW5nRmFjdG9yICYmIG9wdGlvbnMuc3BhY2luZ0ZhY3RvciAhPT0gMTtcbiAgICB2YXIgc3BhY2luZ0JiID0gZnVuY3Rpb24gc3BhY2luZ0JiKCkge1xuICAgICAgaWYgKCF1c2VTcGFjaW5nRmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBwb3MgPSBmbk1lbShub2RlLCBpKTtcbiAgICAgICAgZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50KGJiLCBwb3MueCwgcG9zLnkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJiO1xuICAgIH07XG4gICAgdmFyIGJiID0gc3BhY2luZ0JiKCk7XG4gICAgdmFyIGdldEZpbmFsUG9zID0gbWVtb2l6ZSQxKGZ1bmN0aW9uIChub2RlLCBpKSB7XG4gICAgICB2YXIgbmV3UG9zID0gZm5NZW0obm9kZSwgaSk7XG4gICAgICBpZiAodXNlU3BhY2luZ0ZhY3Rvcikge1xuICAgICAgICB2YXIgc3BhY2luZyA9IE1hdGguYWJzKG9wdGlvbnMuc3BhY2luZ0ZhY3Rvcik7XG4gICAgICAgIG5ld1BvcyA9IGNhbGN1bGF0ZVNwYWNpbmcoc3BhY2luZywgYmIsIG5ld1Bvcyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm0gIT0gbnVsbCkge1xuICAgICAgICBuZXdQb3MgPSBvcHRpb25zLnRyYW5zZm9ybShub2RlLCBuZXdQb3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1BvcztcbiAgICB9LCBnZXRNZW1vaXplS2V5KTtcbiAgICBpZiAob3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBuZXdQb3MgPSBnZXRGaW5hbFBvcyhub2RlLCBpKTtcbiAgICAgICAgdmFyIGFuaW1hdGVOb2RlID0gb3B0aW9ucy5hbmltYXRlRmlsdGVyID09IG51bGwgfHwgb3B0aW9ucy5hbmltYXRlRmlsdGVyKG5vZGUsIGkpO1xuICAgICAgICBpZiAoYW5pbWF0ZU5vZGUpIHtcbiAgICAgICAgICB2YXIgYW5pID0gbm9kZS5hbmltYXRpb24oe1xuICAgICAgICAgICAgcG9zaXRpb246IG5ld1BvcyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgICAgZWFzaW5nOiBvcHRpb25zLmFuaW1hdGlvbkVhc2luZ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goYW5pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnBvc2l0aW9uKG5ld1Bvcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgICB2YXIgZml0QW5pID0gY3kuYW5pbWF0aW9uKHtcbiAgICAgICAgICBmaXQ6IHtcbiAgICAgICAgICAgIGJvdW5kaW5nQm94OiBsYXlvdXRFbGVzLmJvdW5kaW5nQm94QXQoZ2V0RmluYWxQb3MpLFxuICAgICAgICAgICAgcGFkZGluZzogb3B0aW9ucy5wYWRkaW5nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgICBlYXNpbmc6IG9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nXG4gICAgICAgIH0pO1xuICAgICAgICBsYXlvdXQuYW5pbWF0aW9ucy5wdXNoKGZpdEFuaSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuem9vbSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucGFuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIHpvb21QYW5BbmkgPSBjeS5hbmltYXRpb24oe1xuICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICBwYW46IG9wdGlvbnMucGFuLFxuICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZzogb3B0aW9ucy5hbmltYXRpb25FYXNpbmdcbiAgICAgICAgfSk7XG4gICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goem9vbVBhbkFuaSk7XG4gICAgICB9XG4gICAgICBsYXlvdXQuYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmkpIHtcbiAgICAgICAgcmV0dXJuIGFuaS5wbGF5KCk7XG4gICAgICB9KTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICAgIFByb21pc2UkMS5hbGwobGF5b3V0LmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uIChhbmkpIHtcbiAgICAgICAgcmV0dXJuIGFuaS5wcm9taXNlKCk7XG4gICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2xheW91dHN0b3AnLFxuICAgICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnBvc2l0aW9ucyhnZXRGaW5hbFBvcyk7XG4gICAgICBpZiAob3B0aW9ucy5maXQpIHtcbiAgICAgICAgY3kuZml0KG9wdGlvbnMuZWxlcywgb3B0aW9ucy5wYWRkaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnpvb20gIT0gbnVsbCkge1xuICAgICAgICBjeS56b29tKG9wdGlvbnMuem9vbSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5wYW4pIHtcbiAgICAgICAgY3kucGFuKG9wdGlvbnMucGFuKTtcbiAgICAgIH1cbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RvcCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgbGF5b3V0OiBmdW5jdGlvbiBsYXlvdXQob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICByZXR1cm4gY3kubWFrZUxheW91dChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGVsZXM6IHRoaXNcbiAgICB9KSk7XG4gIH1cbn07XG5cbi8vIGFsaWFzZXM6XG5lbGVzZm4kNS5jcmVhdGVMYXlvdXQgPSBlbGVzZm4kNS5tYWtlTGF5b3V0ID0gZWxlc2ZuJDUubGF5b3V0O1xuXG5mdW5jdGlvbiBzdHlsZUNhY2hlKGtleSwgZm4sIGVsZSkge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBjYWNoZSA9IF9wLnN0eWxlQ2FjaGUgPSBfcC5zdHlsZUNhY2hlIHx8IFtdO1xuICB2YXIgdmFsO1xuICBpZiAoKHZhbCA9IGNhY2hlW2tleV0pICE9IG51bGwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9IGVsc2Uge1xuICAgIHZhbCA9IGNhY2hlW2tleV0gPSBmbihlbGUpO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhY2hlU3R5bGVGdW5jdGlvbihrZXksIGZuKSB7XG4gIGtleSA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZFN0eWxlRnVuY3Rpb24oZWxlKSB7XG4gICAgcmV0dXJuIHN0eWxlQ2FjaGUoa2V5LCBmbiwgZWxlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNhY2hlUHJvdG90eXBlU3R5bGVGdW5jdGlvbihrZXksIGZuKSB7XG4gIGtleSA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgdmFyIHNlbGZGbiA9IGZ1bmN0aW9uIHNlbGZGbihlbGUpIHtcbiAgICByZXR1cm4gZm4uY2FsbChlbGUpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gY2FjaGVkUHJvdG90eXBlU3R5bGVGdW5jdGlvbigpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGVDYWNoZShrZXksIHNlbGZGbiwgZWxlKTtcbiAgICB9XG4gIH07XG59XG52YXIgZWxlc2ZuJDQgPSB7XG4gIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogZnVuY3Rpb24gcmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHVzZUNhY2hlKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciByZW5kZXJlciA9IGN5LnJlbmRlcmVyKCk7XG4gICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5LnN0eWxlRW5hYmxlZCgpO1xuICAgIGlmIChyZW5kZXJlciAmJiBzdHlsZUVuYWJsZWQpIHtcbiAgICAgIHJlbmRlcmVyLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLCB1c2VDYWNoZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXJ0eVN0eWxlQ2FjaGU6IGZ1bmN0aW9uIGRpcnR5U3R5bGVDYWNoZSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIGRpcnR5ID0gZnVuY3Rpb24gZGlydHkoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnN0eWxlQ2FjaGUgPSBudWxsO1xuICAgIH07XG4gICAgaWYgKGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgdmFyIGVsZXM7XG4gICAgICBlbGVzID0gdGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKTtcbiAgICAgIGVsZXMubWVyZ2UoZWxlcy5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgIGVsZXMuZm9yRWFjaChkaXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIGRpcnR5KGVsZSk7XG4gICAgICAgIGVsZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZGlydHkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICAvLyBmdWxseSB1cGRhdGVzIChyZWNhbGN1bGF0ZXMpIHRoZSBzdHlsZSBmb3IgdGhlIGVsZW1lbnRzXG4gIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZShub3RpZnlSZW5kZXJlcikge1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmIChjeS5iYXRjaGluZygpKSB7XG4gICAgICB2YXIgYkVsZXMgPSBjeS5fcHJpdmF0ZS5iYXRjaFN0eWxlRWxlcztcbiAgICAgIGJFbGVzLm1lcmdlKHRoaXMpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nIGFuZCBleGl0IGVhcmx5IHdoZW4gYmF0Y2hpbmdcbiAgICB9XG5cbiAgICB2YXIgaGFzQ29tcG91bmRzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciB1cGRhdGVkRWxlcyA9IHRoaXM7XG4gICAgbm90aWZ5UmVuZGVyZXIgPSBub3RpZnlSZW5kZXJlciB8fCBub3RpZnlSZW5kZXJlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgIC8vIHRoZW4gYWRkIGV2ZXJ5dGhpbmcgdXAgYW5kIGRvd24gZm9yIGNvbXBvdW5kIHNlbGVjdG9yIGNoZWNrc1xuICAgICAgdXBkYXRlZEVsZXMgPSB0aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpO1xuICAgIH1cblxuICAgIC8vIGxldCBjaGFuZ2VkRWxlcyA9IHN0eWxlLmFwcGx5KCB1cGRhdGVkRWxlcyApO1xuICAgIHZhciBjaGFuZ2VkRWxlcyA9IHVwZGF0ZWRFbGVzO1xuICAgIGlmIChub3RpZnlSZW5kZXJlcikge1xuICAgICAgY2hhbmdlZEVsZXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHJlbmRlcmVyIGtub3cgd2UgY2hhbmdlZCBzdHlsZVxuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VkRWxlcy5lbWl0KCdzdHlsZScpOyAvLyBqdXN0IGZpcmUgdGhlIGV2ZW50XG4gICAgfVxuXG4gICAgdXBkYXRlZEVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnN0eWxlRGlydHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIC8vIHByaXZhdGU6IGNsZWFycyBkaXJ0eSBmbGFnIGFuZCByZWNhbGN1bGF0ZXMgc3R5bGVcbiAgY2xlYW5TdHlsZTogZnVuY3Rpb24gY2xlYW5TdHlsZSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgaWYgKGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5KSB7XG4gICAgICAgIC8vIG4uYi4gdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYmVmb3JlIGFwcGx5KCkgdG8gYXZvaWQgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvblxuICAgICAgICBlbGUuX3ByaXZhdGUuc3R5bGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICBjeS5zdHlsZSgpLmFwcGx5KGVsZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvLyBnZXQgdGhlIGludGVybmFsIHBhcnNlZCBzdHlsZSBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHlcbiAgcGFyc2VkU3R5bGU6IGZ1bmN0aW9uIHBhcnNlZFN0eWxlKHByb3BlcnR5KSB7XG4gICAgdmFyIGluY2x1ZGVOb25EZWZhdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBjeSA9IGVsZS5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgdGhpcy5jbGVhblN0eWxlKCk7XG4gICAgICB2YXIgb3ZlcnJpZGRlblN0eWxlID0gZWxlLl9wcml2YXRlLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIGlmIChvdmVycmlkZGVuU3R5bGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGRlblN0eWxlO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlTm9uRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBudW1lcmljU3R5bGU6IGZ1bmN0aW9uIG51bWVyaWNTdHlsZShwcm9wZXJ0eSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIHBzdHlsZSA9IGVsZS5wc3R5bGUocHJvcGVydHkpO1xuICAgICAgcmV0dXJuIHBzdHlsZS5wZlZhbHVlICE9PSB1bmRlZmluZWQgPyBwc3R5bGUucGZWYWx1ZSA6IHBzdHlsZS52YWx1ZTtcbiAgICB9XG4gIH0sXG4gIG51bWVyaWNTdHlsZVVuaXRzOiBmdW5jdGlvbiBudW1lcmljU3R5bGVVbml0cyhwcm9wZXJ0eSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5wc3R5bGUocHJvcGVydHkpLnVuaXRzO1xuICAgIH1cbiAgfSxcbiAgLy8gZ2V0IHRoZSBzcGVjaWZpZWQgY3NzIHByb3BlcnR5IGFzIGEgcmVuZGVyZWQgdmFsdWUgKGkuZS4gb24tc2NyZWVuIHZhbHVlKVxuICAvLyBvciBnZXQgdGhlIHdob2xlIHJlbmRlcmVkIHN0eWxlIGlmIG5vIHByb3BlcnR5IHNwZWNpZmllZCAoTkIgZG9lc24ndCBhbGxvdyBzZXR0aW5nKVxuICByZW5kZXJlZFN0eWxlOiBmdW5jdGlvbiByZW5kZXJlZFN0eWxlKHByb3BlcnR5KSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXRSZW5kZXJlZFN0eWxlKGVsZSwgcHJvcGVydHkpO1xuICAgIH1cbiAgfSxcbiAgLy8gcmVhZCB0aGUgY2FsY3VsYXRlZCBjc3Mgc3R5bGUgb2YgdGhlIGVsZW1lbnQgb3Igb3ZlcnJpZGUgdGhlIHN0eWxlICh2aWEgYSBieXBhc3MpXG4gIHN0eWxlOiBmdW5jdGlvbiBzdHlsZShuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHVwZGF0ZVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgICBpZiAocGxhaW5PYmplY3QobmFtZSkpIHtcbiAgICAgIC8vIHRoZW4gZXh0ZW5kIHRoZSBieXBhc3NcbiAgICAgIHZhciBwcm9wcyA9IG5hbWU7XG4gICAgICBzdHlsZS5hcHBseUJ5cGFzcyh0aGlzLCBwcm9wcywgdXBkYXRlVHJhbnNpdGlvbnMpO1xuICAgICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyBsZXQgdGhlIHJlbmRlcmVyIGtub3cgd2UndmUgdXBkYXRlZCBzdHlsZVxuICAgIH0gZWxzZSBpZiAoc3RyaW5nKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB0aGVuIGdldCB0aGUgcHJvcGVydHkgZnJvbSB0aGUgc3R5bGVcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICByZXR1cm4gc3R5bGUuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKGVsZSwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZW1wdHkgY29sbGVjdGlvbiA9PiBjYW4ndCBnZXQgYW55IHZhbHVlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVuIHNldCB0aGUgYnlwYXNzIHdpdGggdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICAgIHN0eWxlLmFwcGx5QnlwYXNzKHRoaXMsIG5hbWUsIHZhbHVlLCB1cGRhdGVUcmFuc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHRoZSByZW5kZXJlciBrbm93IHdlJ3ZlIHVwZGF0ZWQgc3R5bGVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9lbGUgPSB0aGlzWzBdO1xuICAgICAgaWYgKF9lbGUpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlLmdldFJhd1N0eWxlKF9lbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW1wdHkgY29sbGVjdGlvbiA9PiBjYW4ndCBnZXQgYW55IHZhbHVlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgcmVtb3ZlU3R5bGU6IGZ1bmN0aW9uIHJlbW92ZVN0eWxlKG5hbWVzKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgdXBkYXRlVHJhbnNpdGlvbnMgPSBmYWxzZTtcbiAgICB2YXIgc3R5bGUgPSBjeS5zdHlsZSgpO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICBzdHlsZS5yZW1vdmVBbGxCeXBhc3NlcyhlbGUsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXMgPSBuYW1lcy5zcGxpdCgvXFxzKy8pO1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBfZWxlMiA9IGVsZXNbX2ldO1xuICAgICAgICBzdHlsZS5yZW1vdmVCeXBhc3NlcyhfZWxlMiwgbmFtZXMsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyBsZXQgdGhlIHJlbmRlcmVyIGtub3cgd2UndmUgdXBkYXRlZCBzdHlsZVxuXG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgc2hvdzogZnVuY3Rpb24gc2hvdygpIHtcbiAgICB0aGlzLmNzcygnZGlzcGxheScsICdlbGVtZW50Jyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB0aGlzLmNzcygnZGlzcGxheScsICdub25lJyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgZWZmZWN0aXZlT3BhY2l0eTogZnVuY3Rpb24gZWZmZWN0aXZlT3BhY2l0eSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBwYXJlbnRPcGFjaXR5ID0gZWxlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICAgICAgaWYgKCFoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRPcGFjaXR5O1xuICAgICAgfVxuICAgICAgdmFyIHBhcmVudHMgPSAhX3AuZGF0YS5wYXJlbnQgPyBudWxsIDogZWxlLnBhcmVudHMoKTtcbiAgICAgIGlmIChwYXJlbnRzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2ldO1xuICAgICAgICAgIHZhciBvcGFjaXR5ID0gcGFyZW50LnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICAgICAgICAgIHBhcmVudE9wYWNpdHkgPSBvcGFjaXR5ICogcGFyZW50T3BhY2l0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudE9wYWNpdHk7XG4gICAgfVxuICB9LFxuICB0cmFuc3BhcmVudDogZnVuY3Rpb24gdHJhbnNwYXJlbnQoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBlbGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKCFoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICAgIHJldHVybiBlbGUucHN0eWxlKCdvcGFjaXR5JykudmFsdWUgPT09IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSA9PT0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGJhY2tncm91bmRpbmc6IGZ1bmN0aW9uIGJhY2tncm91bmRpbmcoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG59O1xuZnVuY3Rpb24gY2hlY2tDb21wb3VuZChlbGUsIHBhcmVudE9rKSB7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHBhcmVudHMgPSBfcC5kYXRhLnBhcmVudCA/IGVsZS5wYXJlbnRzKCkgOiBudWxsO1xuICBpZiAocGFyZW50cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcmVudCA9IHBhcmVudHNbaV07XG4gICAgICBpZiAoIXBhcmVudE9rKHBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRlZmluZURlcml2ZWRTdGF0ZUZ1bmN0aW9uKHNwZWNzKSB7XG4gIHZhciBvayA9IHNwZWNzLm9rO1xuICB2YXIgZWRnZU9rVmlhTm9kZSA9IHNwZWNzLmVkZ2VPa1ZpYU5vZGUgfHwgc3BlY3Mub2s7XG4gIHZhciBwYXJlbnRPayA9IHNwZWNzLnBhcmVudE9rIHx8IHNwZWNzLm9rO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgaWYgKCFvayhlbGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgcmV0dXJuICFoYXNDb21wb3VuZE5vZGVzIHx8IGNoZWNrQ29tcG91bmQoZWxlLCBwYXJlbnRPayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgICAgICB2YXIgdGd0ID0gX3AudGFyZ2V0O1xuICAgICAgICByZXR1cm4gZWRnZU9rVmlhTm9kZShzcmMpICYmICghaGFzQ29tcG91bmROb2RlcyB8fCBjaGVja0NvbXBvdW5kKHNyYywgZWRnZU9rVmlhTm9kZSkpICYmIChzcmMgPT09IHRndCB8fCBlZGdlT2tWaWFOb2RlKHRndCkgJiYgKCFoYXNDb21wb3VuZE5vZGVzIHx8IGNoZWNrQ29tcG91bmQodGd0LCBlZGdlT2tWaWFOb2RlKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbnZhciBlbGVUYWtlc1VwU3BhY2UgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ2VsZVRha2VzVXBTcGFjZScsIGZ1bmN0aW9uIChlbGUpIHtcbiAgcmV0dXJuIGVsZS5wc3R5bGUoJ2Rpc3BsYXknKS52YWx1ZSA9PT0gJ2VsZW1lbnQnICYmIGVsZS53aWR0aCgpICE9PSAwICYmIChlbGUuaXNOb2RlKCkgPyBlbGUuaGVpZ2h0KCkgIT09IDAgOiB0cnVlKTtcbn0pO1xuZWxlc2ZuJDQudGFrZXNVcFNwYWNlID0gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKCd0YWtlc1VwU3BhY2UnLCBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbih7XG4gIG9rOiBlbGVUYWtlc1VwU3BhY2Vcbn0pKTtcbnZhciBlbGVJbnRlcmFjdGl2ZSA9IGNhY2hlU3R5bGVGdW5jdGlvbignZWxlSW50ZXJhY3RpdmUnLCBmdW5jdGlvbiAoZWxlKSB7XG4gIHJldHVybiBlbGUucHN0eWxlKCdldmVudHMnKS52YWx1ZSA9PT0gJ3llcycgJiYgZWxlLnBzdHlsZSgndmlzaWJpbGl0eScpLnZhbHVlID09PSAndmlzaWJsZScgJiYgZWxlVGFrZXNVcFNwYWNlKGVsZSk7XG59KTtcbnZhciBwYXJlbnRJbnRlcmFjdGl2ZSA9IGNhY2hlU3R5bGVGdW5jdGlvbigncGFyZW50SW50ZXJhY3RpdmUnLCBmdW5jdGlvbiAocGFyZW50KSB7XG4gIHJldHVybiBwYXJlbnQucHN0eWxlKCd2aXNpYmlsaXR5JykudmFsdWUgPT09ICd2aXNpYmxlJyAmJiBlbGVUYWtlc1VwU3BhY2UocGFyZW50KTtcbn0pO1xuZWxlc2ZuJDQuaW50ZXJhY3RpdmUgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ2ludGVyYWN0aXZlJywgZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24oe1xuICBvazogZWxlSW50ZXJhY3RpdmUsXG4gIHBhcmVudE9rOiBwYXJlbnRJbnRlcmFjdGl2ZSxcbiAgZWRnZU9rVmlhTm9kZTogZWxlVGFrZXNVcFNwYWNlXG59KSk7XG5lbGVzZm4kNC5ub25pbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5pbnRlcmFjdGl2ZSgpO1xuICB9XG59O1xudmFyIGVsZVZpc2libGUgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ2VsZVZpc2libGUnLCBmdW5jdGlvbiAoZWxlKSB7XG4gIHJldHVybiBlbGUucHN0eWxlKCd2aXNpYmlsaXR5JykudmFsdWUgPT09ICd2aXNpYmxlJyAmJiBlbGUucHN0eWxlKCdvcGFjaXR5JykucGZWYWx1ZSAhPT0gMCAmJiBlbGVUYWtlc1VwU3BhY2UoZWxlKTtcbn0pO1xudmFyIGVkZ2VWaXNpYmxlVmlhTm9kZSA9IGVsZVRha2VzVXBTcGFjZTtcbmVsZXNmbiQ0LnZpc2libGUgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ3Zpc2libGUnLCBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbih7XG4gIG9rOiBlbGVWaXNpYmxlLFxuICBlZGdlT2tWaWFOb2RlOiBlZGdlVmlzaWJsZVZpYU5vZGVcbn0pKTtcbmVsZXNmbiQ0LmhpZGRlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gIWVsZS52aXNpYmxlKCk7XG4gIH1cbn07XG5lbGVzZm4kNC5pc0J1bmRsZWRCZXppZXIgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ2lzQnVuZGxlZEJlemllcicsIGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICF0aGlzLnJlbW92ZWQoKSAmJiB0aGlzLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZSA9PT0gJ2JlemllcicgJiYgdGhpcy50YWtlc1VwU3BhY2UoKTtcbn0pO1xuZWxlc2ZuJDQuYnlwYXNzID0gZWxlc2ZuJDQuY3NzID0gZWxlc2ZuJDQuc3R5bGU7XG5lbGVzZm4kNC5yZW5kZXJlZENzcyA9IGVsZXNmbiQ0LnJlbmRlcmVkU3R5bGU7XG5lbGVzZm4kNC5yZW1vdmVCeXBhc3MgPSBlbGVzZm4kNC5yZW1vdmVDc3MgPSBlbGVzZm4kNC5yZW1vdmVTdHlsZTtcbmVsZXNmbiQ0LnBzdHlsZSA9IGVsZXNmbiQ0LnBhcnNlZFN0eWxlO1xuXG52YXIgZWxlc2ZuJDMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZVN3aXRjaEZ1bmN0aW9uKHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBjaGFuZ2VkRWxlcyA9IFtdO1xuXG4gICAgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCggZGF0YSwgaGFuZGxlciApXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgZGF0YSA9IGFyZ3NbMF07XG4gICAgICB2YXIgaGFuZGxlciA9IGFyZ3NbMV07XG4gICAgICB0aGlzLm9uKHBhcmFtcy5ldmVudCwgZGF0YSwgaGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCggaGFuZGxlciApXG4gICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgZm4kNihhcmdzWzBdKSkge1xuICAgICAgdmFyIF9oYW5kbGVyID0gYXJnc1swXTtcbiAgICAgIHRoaXMub24ocGFyYW1zLmV2ZW50LCBfaGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCgpXG4gICAgLy8gZS5nLiAocHJpdmF0ZSkgY3kubm9kZXMoKS5zZWxlY3QoWyd0YXBzZWxlY3QnXSlcbiAgICBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMCB8fCBhcmdzLmxlbmd0aCA9PT0gMSAmJiBhcnJheShhcmdzWzBdKSkge1xuICAgICAgdmFyIGFkZGxFdmVudHMgPSBhcmdzLmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICB2YXIgYWJsZSA9ICFwYXJhbXMuYWJsZUZpZWxkIHx8IGVsZS5fcHJpdmF0ZVtwYXJhbXMuYWJsZUZpZWxkXTtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBlbGUuX3ByaXZhdGVbcGFyYW1zLmZpZWxkXSAhPSBwYXJhbXMudmFsdWU7XG4gICAgICAgIGlmIChwYXJhbXMub3ZlcnJpZGVBYmxlKSB7XG4gICAgICAgICAgdmFyIG92ZXJyaWRlQWJsZSA9IHBhcmFtcy5vdmVycmlkZUFibGUoZWxlKTtcbiAgICAgICAgICBpZiAob3ZlcnJpZGVBYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFibGUgPSBvdmVycmlkZUFibGU7XG4gICAgICAgICAgICBpZiAoIW92ZXJyaWRlQWJsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gLy8gdG8gc2F2ZSBjeWNsZXMgYXNzdW1lIG5vdCBhYmxlIGZvciBhbGwgb24gb3ZlcnJpZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJsZSkge1xuICAgICAgICAgIGVsZS5fcHJpdmF0ZVtwYXJhbXMuZmllbGRdID0gcGFyYW1zLnZhbHVlO1xuICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICBjaGFuZ2VkRWxlcy5wdXNoKGVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hhbmdlZENvbGwgPSB0aGlzLnNwYXduKGNoYW5nZWRFbGVzKTtcbiAgICAgIGNoYW5nZWRDb2xsLnVwZGF0ZVN0eWxlKCk7IC8vIGNoYW5nZSBvZiBzdGF0ZSA9PiBwb3NzaWJsZSBjaGFuZ2Ugb2Ygc3R5bGVcbiAgICAgIGNoYW5nZWRDb2xsLmVtaXQocGFyYW1zLmV2ZW50KTtcbiAgICAgIGlmIChhZGRsRXZlbnRzKSB7XG4gICAgICAgIGNoYW5nZWRDb2xsLmVtaXQoYWRkbEV2ZW50cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gZGVmaW5lU3dpdGNoU2V0KHBhcmFtcykge1xuICBlbGVzZm4kM1twYXJhbXMuZmllbGRdID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIGlmIChwYXJhbXMub3ZlcnJpZGVGaWVsZCkge1xuICAgICAgICB2YXIgdmFsID0gcGFyYW1zLm92ZXJyaWRlRmllbGQoZWxlKTtcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZVtwYXJhbXMuZmllbGRdO1xuICAgIH1cbiAgfTtcbiAgZWxlc2ZuJDNbcGFyYW1zLm9uXSA9IGRlZmluZVN3aXRjaEZ1bmN0aW9uKHtcbiAgICBldmVudDogcGFyYW1zLm9uLFxuICAgIGZpZWxkOiBwYXJhbXMuZmllbGQsXG4gICAgYWJsZUZpZWxkOiBwYXJhbXMuYWJsZUZpZWxkLFxuICAgIG92ZXJyaWRlQWJsZTogcGFyYW1zLm92ZXJyaWRlQWJsZSxcbiAgICB2YWx1ZTogdHJ1ZVxuICB9KTtcbiAgZWxlc2ZuJDNbcGFyYW1zLm9mZl0gPSBkZWZpbmVTd2l0Y2hGdW5jdGlvbih7XG4gICAgZXZlbnQ6IHBhcmFtcy5vZmYsXG4gICAgZmllbGQ6IHBhcmFtcy5maWVsZCxcbiAgICBhYmxlRmllbGQ6IHBhcmFtcy5hYmxlRmllbGQsXG4gICAgb3ZlcnJpZGVBYmxlOiBwYXJhbXMub3ZlcnJpZGVBYmxlLFxuICAgIHZhbHVlOiBmYWxzZVxuICB9KTtcbn1cbmRlZmluZVN3aXRjaFNldCh7XG4gIGZpZWxkOiAnbG9ja2VkJyxcbiAgb3ZlcnJpZGVGaWVsZDogZnVuY3Rpb24gb3ZlcnJpZGVGaWVsZChlbGUpIHtcbiAgICByZXR1cm4gZWxlLmN5KCkuYXV0b2xvY2soKSA/IHRydWUgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG9uOiAnbG9jaycsXG4gIG9mZjogJ3VubG9jaydcbn0pO1xuZGVmaW5lU3dpdGNoU2V0KHtcbiAgZmllbGQ6ICdncmFiYmFibGUnLFxuICBvdmVycmlkZUZpZWxkOiBmdW5jdGlvbiBvdmVycmlkZUZpZWxkKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvdW5ncmFiaWZ5KCkgfHwgZWxlLnBhbm5hYmxlKCkgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgb246ICdncmFiaWZ5JyxcbiAgb2ZmOiAndW5ncmFiaWZ5J1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ3NlbGVjdGVkJyxcbiAgYWJsZUZpZWxkOiAnc2VsZWN0YWJsZScsXG4gIG92ZXJyaWRlQWJsZTogZnVuY3Rpb24gb3ZlcnJpZGVBYmxlKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKSA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICB9LFxuICBvbjogJ3NlbGVjdCcsXG4gIG9mZjogJ3Vuc2VsZWN0J1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ3NlbGVjdGFibGUnLFxuICBvdmVycmlkZUZpZWxkOiBmdW5jdGlvbiBvdmVycmlkZUZpZWxkKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKSA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICB9LFxuICBvbjogJ3NlbGVjdGlmeScsXG4gIG9mZjogJ3Vuc2VsZWN0aWZ5J1xufSk7XG5lbGVzZm4kMy5kZXNlbGVjdCA9IGVsZXNmbiQzLnVuc2VsZWN0O1xuZWxlc2ZuJDMuZ3JhYmJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gZWxlLl9wcml2YXRlLmdyYWJiZWQ7XG4gIH1cbn07XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ2FjdGl2ZScsXG4gIG9uOiAnYWN0aXZhdGUnLFxuICBvZmY6ICd1bmFjdGl2YXRlJ1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ3Bhbm5hYmxlJyxcbiAgb246ICdwYW5pZnknLFxuICBvZmY6ICd1bnBhbmlmeSdcbn0pO1xuZWxlc2ZuJDMuaW5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICBpZiAoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuX3ByaXZhdGUuYWN0aXZlO1xuICB9XG59O1xuXG52YXIgZWxlc2ZuJDIgPSB7fTtcblxuLy8gREFHIGZ1bmN0aW9uc1xuLy8vLy8vLy8vLy8vLy8vL1xuXG52YXIgZGVmaW5lRGFnRXh0cmVtaXR5ID0gZnVuY3Rpb24gZGVmaW5lRGFnRXh0cmVtaXR5KHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gZGFnRXh0cmVtaXR5SW1wbChzZWxlY3Rvcikge1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIgcmV0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIGlmICghZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRpc3F1YWxpZmllZCA9IGZhbHNlO1xuICAgICAgdmFyIGVkZ2VzID0gZWxlLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlZGdlID0gZWRnZXNbal07XG4gICAgICAgIHZhciBzcmMgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcbiAgICAgICAgaWYgKHBhcmFtcy5ub0luY29taW5nRWRnZXMgJiYgdGd0ID09PSBlbGUgJiYgc3JjICE9PSBlbGUgfHwgcGFyYW1zLm5vT3V0Z29pbmdFZGdlcyAmJiBzcmMgPT09IGVsZSAmJiB0Z3QgIT09IGVsZSkge1xuICAgICAgICAgIGRpc3F1YWxpZmllZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZGlzcXVhbGlmaWVkKSB7XG4gICAgICAgIHJldC5wdXNoKGVsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHJldCwgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn07XG52YXIgZGVmaW5lRGFnT25lSG9wID0gZnVuY3Rpb24gZGVmaW5lRGFnT25lSG9wKHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciBvRWxlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICBpZiAoIWVsZS5pc05vZGUoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlZGdlcyA9IGVsZS5jb25uZWN0ZWRFZGdlcygpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2pdO1xuICAgICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIHRndCA9IGVkZ2UudGFyZ2V0KCk7XG4gICAgICAgIGlmIChwYXJhbXMub3V0Z29pbmcgJiYgc3JjID09PSBlbGUpIHtcbiAgICAgICAgICBvRWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgICAgIG9FbGVzLnB1c2godGd0KTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMuaW5jb21pbmcgJiYgdGd0ID09PSBlbGUpIHtcbiAgICAgICAgICBvRWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgICAgIG9FbGVzLnB1c2goc3JjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihvRWxlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn07XG52YXIgZGVmaW5lRGFnQWxsSG9wcyA9IGZ1bmN0aW9uIGRlZmluZURhZ0FsbEhvcHMocGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIHNFbGVzID0gW107XG4gICAgdmFyIHNFbGVzSWRzID0ge307XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG5leHQgPSBwYXJhbXMub3V0Z29pbmcgPyBlbGVzLm91dGdvZXJzKCkgOiBlbGVzLmluY29tZXJzKCk7XG4gICAgICBpZiAobmV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIGRvbmUgaWYgbm9uZSBsZWZ0XG5cbiAgICAgIHZhciBuZXdOZXh0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG4gPSBuZXh0W2ldO1xuICAgICAgICB2YXIgbmlkID0gbi5pZCgpO1xuICAgICAgICBpZiAoIXNFbGVzSWRzW25pZF0pIHtcbiAgICAgICAgICBzRWxlc0lkc1tuaWRdID0gdHJ1ZTtcbiAgICAgICAgICBzRWxlcy5wdXNoKG4pO1xuICAgICAgICAgIG5ld05leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW5ld05leHQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIGRvbmUgaWYgdG91Y2hlZCBhbGwgb3V0Z29lcnMgYWxyZWFkeVxuXG4gICAgICBlbGVzID0gbmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oc0VsZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH07XG59O1xuZWxlc2ZuJDIuY2xlYXJUcmF2ZXJzYWxDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpc1tpXS5fcHJpdmF0ZS50cmF2ZXJzYWxDYWNoZSA9IG51bGw7XG4gIH1cbn07XG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgLy8gZ2V0IHRoZSByb290IG5vZGVzIGluIHRoZSBEQUdcbiAgcm9vdHM6IGRlZmluZURhZ0V4dHJlbWl0eSh7XG4gICAgbm9JbmNvbWluZ0VkZ2VzOiB0cnVlXG4gIH0pLFxuICAvLyBnZXQgdGhlIGxlYWYgbm9kZXMgaW4gdGhlIERBR1xuICBsZWF2ZXM6IGRlZmluZURhZ0V4dHJlbWl0eSh7XG4gICAgbm9PdXRnb2luZ0VkZ2VzOiB0cnVlXG4gIH0pLFxuICAvLyBub3JtYWxseSBjYWxsZWQgY2hpbGRyZW4gaW4gZ3JhcGggdGhlb3J5XG4gIC8vIHRoZXNlIG5vZGVzID1lZGdlcz0+IG91dGdvaW5nIG5vZGVzXG4gIG91dGdvZXJzOiBjYWNoZShkZWZpbmVEYWdPbmVIb3Aoe1xuICAgIG91dGdvaW5nOiB0cnVlXG4gIH0pLCAnb3V0Z29lcnMnKSxcbiAgLy8gYWthIERBRyBkZXNjZW5kYW50c1xuICBzdWNjZXNzb3JzOiBkZWZpbmVEYWdBbGxIb3BzKHtcbiAgICBvdXRnb2luZzogdHJ1ZVxuICB9KSxcbiAgLy8gbm9ybWFsbHkgY2FsbGVkIHBhcmVudHMgaW4gZ3JhcGggdGhlb3J5XG4gIC8vIHRoZXNlIG5vZGVzIDw9ZWRnZXM9IGluY29taW5nIG5vZGVzXG4gIGluY29tZXJzOiBjYWNoZShkZWZpbmVEYWdPbmVIb3Aoe1xuICAgIGluY29taW5nOiB0cnVlXG4gIH0pLCAnaW5jb21lcnMnKSxcbiAgLy8gYWthIERBRyBhbmNlc3RvcnNcbiAgcHJlZGVjZXNzb3JzOiBkZWZpbmVEYWdBbGxIb3BzKHtcbiAgICBpbmNvbWluZzogdHJ1ZVxuICB9KVxufSk7XG5cbi8vIE5laWdoYm91cmhvb2QgZnVuY3Rpb25zXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgbmVpZ2hib3Job29kOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gZm9yIGFsbCBub2Rlc1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKTtcblxuICAgICAgLy8gZm9yIGVhY2ggY29ubmVjdGVkIGVkZ2UsIGFkZCB0aGUgZWRnZSBhbmQgdGhlIG90aGVyIG5vZGVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tqXTtcbiAgICAgICAgdmFyIHNyYyA9IGVkZ2Uuc291cmNlKCk7XG4gICAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpO1xuICAgICAgICB2YXIgb3RoZXJOb2RlID0gbm9kZSA9PT0gc3JjID8gdGd0IDogc3JjO1xuXG4gICAgICAgIC8vIG5lZWQgY2hlY2sgaW4gY2FzZSBvZiBsb29wXG4gICAgICAgIGlmIChvdGhlck5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2gob3RoZXJOb2RlWzBdKTsgLy8gYWRkIG5vZGUgMSBob3AgYXdheVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGNvbm5lY3RlZCBlZGdlXG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWRnZVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LCAnbmVpZ2hib3Job29kJyksXG4gIGNsb3NlZE5laWdoYm9yaG9vZDogZnVuY3Rpb24gY2xvc2VkTmVpZ2hib3Job29kKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMubmVpZ2hib3Job29kKCkuYWRkKHRoaXMpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIG9wZW5OZWlnaGJvcmhvb2Q6IGZ1bmN0aW9uIG9wZW5OZWlnaGJvcmhvb2Qoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2Qoc2VsZWN0b3IpO1xuICB9XG59KTtcblxuLy8gYWxpYXNlc1xuZWxlc2ZuJDIubmVpZ2hib3VyaG9vZCA9IGVsZXNmbiQyLm5laWdoYm9yaG9vZDtcbmVsZXNmbiQyLmNsb3NlZE5laWdoYm91cmhvb2QgPSBlbGVzZm4kMi5jbG9zZWROZWlnaGJvcmhvb2Q7XG5lbGVzZm4kMi5vcGVuTmVpZ2hib3VyaG9vZCA9IGVsZXNmbiQyLm9wZW5OZWlnaGJvcmhvb2Q7XG5cbi8vIEVkZ2UgZnVuY3Rpb25zXG4vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgc291cmNlOiBjYWNoZShmdW5jdGlvbiBzb3VyY2VJbXBsKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIHNyYztcbiAgICBpZiAoZWxlKSB7XG4gICAgICBzcmMgPSBlbGUuX3ByaXZhdGUuc291cmNlIHx8IGVsZS5jeSgpLmNvbGxlY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHNyYyAmJiBzZWxlY3RvciA/IHNyYy5maWx0ZXIoc2VsZWN0b3IpIDogc3JjO1xuICB9LCAnc291cmNlJyksXG4gIHRhcmdldDogY2FjaGUoZnVuY3Rpb24gdGFyZ2V0SW1wbChzZWxlY3Rvcikge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciB0Z3Q7XG4gICAgaWYgKGVsZSkge1xuICAgICAgdGd0ID0gZWxlLl9wcml2YXRlLnRhcmdldCB8fCBlbGUuY3koKS5jb2xsZWN0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0Z3QgJiYgc2VsZWN0b3IgPyB0Z3QuZmlsdGVyKHNlbGVjdG9yKSA6IHRndDtcbiAgfSwgJ3RhcmdldCcpLFxuICBzb3VyY2VzOiBkZWZpbmVTb3VyY2VGdW5jdGlvbih7XG4gICAgYXR0cjogJ3NvdXJjZSdcbiAgfSksXG4gIHRhcmdldHM6IGRlZmluZVNvdXJjZUZ1bmN0aW9uKHtcbiAgICBhdHRyOiAndGFyZ2V0J1xuICB9KVxufSk7XG5mdW5jdGlvbiBkZWZpbmVTb3VyY2VGdW5jdGlvbihwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNvdXJjZUltcGwoc2VsZWN0b3IpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgc3JjID0gZWxlLl9wcml2YXRlW3BhcmFtcy5hdHRyXTtcbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHNyYyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHNvdXJjZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH07XG59XG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgZWRnZXNXaXRoOiBjYWNoZShkZWZpbmVFZGdlc1dpdGhGdW5jdGlvbigpLCAnZWRnZXNXaXRoJyksXG4gIGVkZ2VzVG86IGNhY2hlKGRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uKHtcbiAgICB0aGlzSXNTcmM6IHRydWVcbiAgfSksICdlZGdlc1RvJylcbn0pO1xuZnVuY3Rpb24gZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24ocGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBlZGdlc1dpdGhJbXBsKG90aGVyTm9kZXMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIHZhciBwID0gcGFyYW1zIHx8IHt9O1xuXG4gICAgLy8gZ2V0IGVsZW1lbnRzIGlmIGEgc2VsZWN0b3IgaXMgc3BlY2lmaWVkXG4gICAgaWYgKHN0cmluZyhvdGhlck5vZGVzKSkge1xuICAgICAgb3RoZXJOb2RlcyA9IGN5LiQob3RoZXJOb2Rlcyk7XG4gICAgfVxuICAgIGZvciAodmFyIGggPSAwOyBoIDwgb3RoZXJOb2Rlcy5sZW5ndGg7IGgrKykge1xuICAgICAgdmFyIGVkZ2VzID0gb3RoZXJOb2Rlc1toXS5fcHJpdmF0ZS5lZGdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICAgICAgdmFyIGVkZ2VEYXRhID0gZWRnZS5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICB2YXIgdGhpc1RvT3RoZXIgPSB0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZWRnZURhdGEuc291cmNlKSAmJiBvdGhlck5vZGVzLmhhc0VsZW1lbnRXaXRoSWQoZWRnZURhdGEudGFyZ2V0KTtcbiAgICAgICAgdmFyIG90aGVyVG9UaGlzID0gb3RoZXJOb2Rlcy5oYXNFbGVtZW50V2l0aElkKGVkZ2VEYXRhLnNvdXJjZSkgJiYgdGhpcy5oYXNFbGVtZW50V2l0aElkKGVkZ2VEYXRhLnRhcmdldCk7XG4gICAgICAgIHZhciBlZGdlQ29ubmVjdHNUaGlzQW5kT3RoZXIgPSB0aGlzVG9PdGhlciB8fCBvdGhlclRvVGhpcztcbiAgICAgICAgaWYgKCFlZGdlQ29ubmVjdHNUaGlzQW5kT3RoZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocC50aGlzSXNTcmMgfHwgcC50aGlzSXNUZ3QpIHtcbiAgICAgICAgICBpZiAocC50aGlzSXNTcmMgJiYgIXRoaXNUb090aGVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHAudGhpc0lzVGd0ICYmICFvdGhlclRvVGhpcykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKTtcbiAgfTtcbn1cbmV4dGVuZChlbGVzZm4kMiwge1xuICBjb25uZWN0ZWRFZGdlczogY2FjaGUoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgdmFyIHJldEVsZXMgPSBbXTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGVsZXNbaV07XG4gICAgICBpZiAoIW5vZGUuaXNOb2RlKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2pdO1xuICAgICAgICByZXRFbGVzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHJldEVsZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICdjb25uZWN0ZWRFZGdlcycpLFxuICBjb25uZWN0ZWROb2RlczogY2FjaGUoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgdmFyIHJldEVsZXMgPSBbXTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWRnZSA9IGVsZXNbaV07XG4gICAgICBpZiAoIWVkZ2UuaXNFZGdlKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXRFbGVzLnB1c2goZWRnZS5zb3VyY2UoKVswXSk7XG4gICAgICByZXRFbGVzLnB1c2goZWRnZS50YXJnZXQoKVswXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHJldEVsZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICdjb25uZWN0ZWROb2RlcycpLFxuICBwYXJhbGxlbEVkZ2VzOiBjYWNoZShkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24oKSwgJ3BhcmFsbGVsRWRnZXMnKSxcbiAgY29kaXJlY3RlZEVkZ2VzOiBjYWNoZShkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24oe1xuICAgIGNvZGlyZWN0ZWQ6IHRydWVcbiAgfSksICdjb2RpcmVjdGVkRWRnZXMnKVxufSk7XG5mdW5jdGlvbiBkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24ocGFyYW1zKSB7XG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBjb2RpcmVjdGVkOiBmYWxzZVxuICB9O1xuICBwYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBwYXJhbXMpO1xuICByZXR1cm4gZnVuY3Rpb24gcGFyYWxsZWxFZGdlc0ltcGwoc2VsZWN0b3IpIHtcbiAgICAvLyBtaWNyby1vcHRpbWlzZWQgZm9yIHJlbmRlcmVyXG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5lZGdlcygpO1xuICAgIHZhciBwID0gcGFyYW1zO1xuXG4gICAgLy8gbG9vayBhdCBhbGwgdGhlIGVkZ2VzIGluIHRoZSBjb2xsZWN0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVkZ2UxID0gZWRnZXNbaV07XG4gICAgICB2YXIgZWRnZTFfcCA9IGVkZ2UxLl9wcml2YXRlO1xuICAgICAgdmFyIHNyYzEgPSBlZGdlMV9wLnNvdXJjZTtcbiAgICAgIHZhciBzcmNpZDEgPSBzcmMxLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICB2YXIgdGd0aWQxID0gZWRnZTFfcC5kYXRhLnRhcmdldDtcbiAgICAgIHZhciBzcmNFZGdlczEgPSBzcmMxLl9wcml2YXRlLmVkZ2VzO1xuXG4gICAgICAvLyBsb29rIGF0IGVkZ2VzIGNvbm5lY3RlZCB0byB0aGUgc3JjIG5vZGUgb2YgdGhpcyBlZGdlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNyY0VkZ2VzMS5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZTIgPSBzcmNFZGdlczFbal07XG4gICAgICAgIHZhciBlZGdlMmRhdGEgPSBlZGdlMi5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICB2YXIgdGd0aWQyID0gZWRnZTJkYXRhLnRhcmdldDtcbiAgICAgICAgdmFyIHNyY2lkMiA9IGVkZ2UyZGF0YS5zb3VyY2U7XG4gICAgICAgIHZhciBjb2RpcmVjdGVkID0gdGd0aWQyID09PSB0Z3RpZDEgJiYgc3JjaWQyID09PSBzcmNpZDE7XG4gICAgICAgIHZhciBvcHBkaXJlY3RlZCA9IHNyY2lkMSA9PT0gdGd0aWQyICYmIHRndGlkMSA9PT0gc3JjaWQyO1xuICAgICAgICBpZiAocC5jb2RpcmVjdGVkICYmIGNvZGlyZWN0ZWQgfHwgIXAuY29kaXJlY3RlZCAmJiAoY29kaXJlY3RlZCB8fCBvcHBkaXJlY3RlZCkpIHtcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKGVkZ2UyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihlbGVtZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuLy8gTWlzYyBmdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4dGVuZChlbGVzZm4kMiwge1xuICBjb21wb25lbnRzOiBmdW5jdGlvbiBjb21wb25lbnRzKHJvb3QpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN5ID0gc2VsZi5jeSgpO1xuICAgIHZhciB2aXNpdGVkID0gY3kuY29sbGVjdGlvbigpO1xuICAgIHZhciB1bnZpc2l0ZWQgPSByb290ID09IG51bGwgPyBzZWxmLm5vZGVzKCkgOiByb290Lm5vZGVzKCk7XG4gICAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgICBpZiAocm9vdCAhPSBudWxsICYmIHVudmlzaXRlZC5lbXB0eSgpKSB7XG4gICAgICAvLyByb290IG1heSBjb250YWluIG9ubHkgZWRnZXNcbiAgICAgIHVudmlzaXRlZCA9IHJvb3Quc291cmNlcygpOyAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBub2RlIHRvIHVzZSAodW5kaXJlY3RlZCksIHNvIGp1c3QgdXNlIHRoZSBzb3VyY2Ugc2lkZXNcbiAgICB9XG5cbiAgICB2YXIgdmlzaXRJbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHZpc2l0SW5Db21wb25lbnQobm9kZSwgY29tcG9uZW50KSB7XG4gICAgICB2aXNpdGVkLm1lcmdlKG5vZGUpO1xuICAgICAgdW52aXNpdGVkLnVubWVyZ2Uobm9kZSk7XG4gICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgfTtcbiAgICBpZiAodW52aXNpdGVkLmVtcHR5KCkpIHtcbiAgICAgIHJldHVybiBzZWxmLnNwYXduKCk7XG4gICAgfVxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gZWFjaCBpdGVyYXRpb24geWllbGRzIGEgY29tcG9uZW50XG4gICAgICB2YXIgY21wdCA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgIGNvbXBvbmVudHMucHVzaChjbXB0KTtcbiAgICAgIHZhciByb290ID0gdW52aXNpdGVkWzBdO1xuICAgICAgdmlzaXRJbkNvbXBvbmVudChyb290LCBjbXB0KTtcbiAgICAgIHNlbGYuYmZzKHtcbiAgICAgICAgZGlyZWN0ZWQ6IGZhbHNlLFxuICAgICAgICByb290czogcm9vdCxcbiAgICAgICAgdmlzaXQ6IGZ1bmN0aW9uIHZpc2l0KHYpIHtcbiAgICAgICAgICByZXR1cm4gdmlzaXRJbkNvbXBvbmVudCh2LCBjbXB0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjbXB0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAvLyBjb25uZWN0ZWRFZGdlcygpIHVzdWFsbHkgY2FjaGVkXG4gICAgICAgICAgaWYgKHNlbGYuaGFzKGUpICYmIGNtcHQuaGFzKGUuc291cmNlKCkpICYmIGNtcHQuaGFzKGUudGFyZ2V0KCkpKSB7XG4gICAgICAgICAgICAvLyBoYXMoKSBpcyBjaGVhcFxuICAgICAgICAgICAgY21wdC5tZXJnZShlKTsgLy8gZm9yRWFjaCgpIG9ubHkgY29uc2lkZXJzIG5vZGVzIC0tIHNldHMgTiBhdCBjYWxsIHRpbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBfbG9vcCgpO1xuICAgIH0gd2hpbGUgKHVudmlzaXRlZC5sZW5ndGggPiAwKTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbiAgfSxcbiAgY29tcG9uZW50OiBmdW5jdGlvbiBjb21wb25lbnQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZWxlKVswXTtcbiAgfVxufSk7XG5lbGVzZm4kMi5jb21wb25lbnRzT2YgPSBlbGVzZm4kMi5jb21wb25lbnRzO1xuXG4vLyByZXByZXNlbnRzIGEgc2V0IG9mIG5vZGVzLCBlZGdlcywgb3IgYm90aCB0b2dldGhlclxudmFyIENvbGxlY3Rpb24gPSBmdW5jdGlvbiBDb2xsZWN0aW9uKGN5LCBlbGVtZW50cykge1xuICB2YXIgdW5pcXVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIHJlbW92ZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICBpZiAoY3kgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yKCdBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXAgPSBuZXcgTWFwJDIoKTtcbiAgdmFyIGNyZWF0ZWRFbGVtZW50cyA9IGZhbHNlO1xuICBpZiAoIWVsZW1lbnRzKSB7XG4gICAgZWxlbWVudHMgPSBbXTtcbiAgfSBlbHNlIGlmIChlbGVtZW50cy5sZW5ndGggPiAwICYmIHBsYWluT2JqZWN0KGVsZW1lbnRzWzBdKSAmJiAhZWxlbWVudChlbGVtZW50c1swXSkpIHtcbiAgICBjcmVhdGVkRWxlbWVudHMgPSB0cnVlO1xuXG4gICAgLy8gbWFrZSBlbGVtZW50cyBmcm9tIGpzb24gYW5kIHJlc3RvcmUgYWxsIGF0IG9uY2UgbGF0ZXJcbiAgICB2YXIgZWxlcyA9IFtdO1xuICAgIHZhciBlbGVzSWRzID0gbmV3IFNldCQxKCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBqc29uID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoanNvbi5kYXRhID09IG51bGwpIHtcbiAgICAgICAganNvbi5kYXRhID0ge307XG4gICAgICB9XG4gICAgICB2YXIgX2RhdGEgPSBqc29uLmRhdGE7XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRzIGhhdmUgdmFsaWQgaWRzXG4gICAgICBpZiAoX2RhdGEuaWQgPT0gbnVsbCkge1xuICAgICAgICBfZGF0YS5pZCA9IHV1aWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoY3kuaGFzRWxlbWVudFdpdGhJZChfZGF0YS5pZCkgfHwgZWxlc0lkcy5oYXMoX2RhdGEuaWQpKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBwcmlvciBpZCBhbHJlYWR5IGV4aXN0c1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlID0gbmV3IEVsZW1lbnQoY3ksIGpzb24sIGZhbHNlKTtcbiAgICAgIGVsZXMucHVzaChlbGUpO1xuICAgICAgZWxlc0lkcy5hZGQoX2RhdGEuaWQpO1xuICAgIH1cbiAgICBlbGVtZW50cyA9IGVsZXM7XG4gIH1cbiAgdGhpcy5sZW5ndGggPSAwO1xuICBmb3IgKHZhciBfaSA9IDAsIF9sID0gZWxlbWVudHMubGVuZ3RoOyBfaSA8IF9sOyBfaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQkMSA9IGVsZW1lbnRzW19pXVswXTsgLy8gWzBdIGluIGNhc2UgZWxlbWVudHMgaXMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMsIHJhdGhlciB0aGFuIGFycmF5IG9mIGVsZW1lbnRzXG4gICAgaWYgKGVsZW1lbnQkMSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlkID0gZWxlbWVudCQxLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgaWYgKCF1bmlxdWUgfHwgIW1hcC5oYXMoaWQpKSB7XG4gICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgIG1hcC5zZXQoaWQsIHtcbiAgICAgICAgICBpbmRleDogdGhpcy5sZW5ndGgsXG4gICAgICAgICAgZWxlOiBlbGVtZW50JDFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzW3RoaXMubGVuZ3RoXSA9IGVsZW1lbnQkMTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICB9XG4gIHRoaXMuX3ByaXZhdGUgPSB7XG4gICAgZWxlczogdGhpcyxcbiAgICBjeTogY3ksXG4gICAgZ2V0IG1hcCgpIHtcbiAgICAgIGlmICh0aGlzLmxhenlNYXAgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlYnVpbGRNYXAoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxhenlNYXA7XG4gICAgfSxcbiAgICBzZXQgbWFwKG0pIHtcbiAgICAgIHRoaXMubGF6eU1hcCA9IG07XG4gICAgfSxcbiAgICByZWJ1aWxkTWFwOiBmdW5jdGlvbiByZWJ1aWxkTWFwKCkge1xuICAgICAgdmFyIG0gPSB0aGlzLmxhenlNYXAgPSBuZXcgTWFwJDIoKTtcbiAgICAgIHZhciBlbGVzID0gdGhpcy5lbGVzO1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgZWxlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIHZhciBfZWxlID0gZWxlc1tfaTJdO1xuICAgICAgICBtLnNldChfZWxlLmlkKCksIHtcbiAgICAgICAgICBpbmRleDogX2kyLFxuICAgICAgICAgIGVsZTogX2VsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGlmICh1bmlxdWUpIHtcbiAgICB0aGlzLl9wcml2YXRlLm1hcCA9IG1hcDtcbiAgfVxuXG4gIC8vIHJlc3RvcmUgdGhlIGVsZW1lbnRzIGlmIHdlIGNyZWF0ZWQgdGhlbSBmcm9tIGpzb25cbiAgaWYgKGNyZWF0ZWRFbGVtZW50cyAmJiAhcmVtb3ZlZCkge1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG59O1xuXG4vLyBGdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy8ga2VlcCB0aGUgcHJvdG90eXBlcyBpbiBzeW5jIChhbiBlbGVtZW50IGhhcyB0aGUgc2FtZSBmdW5jdGlvbnMgYXMgYSBjb2xsZWN0aW9uKVxuLy8gYW5kIHVzZSBlbGVmbiBhbmQgZWxlc2ZuIGFzIHNob3J0aGFuZHMgdG8gdGhlIHByb3RvdHlwZXNcbnZhciBlbGVzZm4kMSA9IEVsZW1lbnQucHJvdG90eXBlID0gQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7XG5lbGVzZm4kMS5pbnN0YW5jZVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdjb2xsZWN0aW9uJztcbn07XG5lbGVzZm4kMS5zcGF3biA9IGZ1bmN0aW9uIChlbGVzLCB1bmlxdWUpIHtcbiAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMuY3koKSwgZWxlcywgdW5pcXVlKTtcbn07XG5lbGVzZm4kMS5zcGF3blNlbGYgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNwYXduKHRoaXMpO1xufTtcbmVsZXNmbiQxLmN5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeTtcbn07XG5lbGVzZm4kMS5yZW5kZXJlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKTtcbn07XG5lbGVzZm4kMS5lbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpc1swXTtcbn07XG5lbGVzZm4kMS5jb2xsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICBpZiAoY29sbGVjdGlvbih0aGlzKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2Uge1xuICAgIC8vIGFuIGVsZW1lbnRcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcy5fcHJpdmF0ZS5jeSwgW3RoaXNdKTtcbiAgfVxufTtcbmVsZXNmbiQxLnVuaXF1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMuX3ByaXZhdGUuY3ksIHRoaXMsIHRydWUpO1xufTtcbmVsZXNmbiQxLmhhc0VsZW1lbnRXaXRoSWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWQgPSAnJyArIGlkOyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuXG4gIHJldHVybiB0aGlzLl9wcml2YXRlLm1hcC5oYXMoaWQpO1xufTtcbmVsZXNmbiQxLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlkID0gJycgKyBpZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZW50cnkgPSB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpO1xuICByZXR1cm4gZW50cnkgPyBlbnRyeS5lbGUgOiBuZXcgQ29sbGVjdGlvbihjeSk7IC8vIGdldCBlbGUgb3IgZW1wdHkgY29sbGVjdGlvblxufTtcblxuZWxlc2ZuJDEuJGlkID0gZWxlc2ZuJDEuZ2V0RWxlbWVudEJ5SWQ7XG5lbGVzZm4kMS5wb29sSW5kZXggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gIHZhciBlbGVzID0gY3kuX3ByaXZhdGUuZWxlbWVudHM7XG4gIHZhciBpZCA9IHRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtcbiAgcmV0dXJuIGVsZXMuX3ByaXZhdGUubWFwLmdldChpZCkuaW5kZXg7XG59O1xuZWxlc2ZuJDEuaW5kZXhPZiA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIGlkID0gZWxlWzBdLl9wcml2YXRlLmRhdGEuaWQ7XG4gIHJldHVybiB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpLmluZGV4O1xufTtcbmVsZXNmbiQxLmluZGV4T2ZJZCA9IGZ1bmN0aW9uIChpZCkge1xuICBpZCA9ICcnICsgaWQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG5cbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChpZCkuaW5kZXg7XG59O1xuZWxlc2ZuJDEuanNvbiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGVsZSA9IHRoaXMuZWxlbWVudCgpO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIGlmIChlbGUgPT0gbnVsbCAmJiBvYmopIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSAvLyBjYW4ndCBzZXQgdG8gbm8gZWxlc1xuXG4gIGlmIChlbGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gLy8gY2FuJ3QgZ2V0IGZyb20gbm8gZWxlc1xuXG4gIHZhciBwID0gZWxlLl9wcml2YXRlO1xuICBpZiAocGxhaW5PYmplY3Qob2JqKSkge1xuICAgIC8vIHNldFxuXG4gICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgIGlmIChvYmouZGF0YSkge1xuICAgICAgZWxlLmRhdGEob2JqLmRhdGEpO1xuICAgICAgdmFyIF9kYXRhMiA9IHAuZGF0YTtcbiAgICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgICAgLy8gc291cmNlIGFuZCB0YXJnZXQgYXJlIGltbXV0YWJsZSB2aWEgZGF0YSgpXG4gICAgICAgIHZhciBtb3ZlID0gZmFsc2U7XG4gICAgICAgIHZhciBzcGVjID0ge307XG4gICAgICAgIHZhciBzcmMgPSBvYmouZGF0YS5zb3VyY2U7XG4gICAgICAgIHZhciB0Z3QgPSBvYmouZGF0YS50YXJnZXQ7XG4gICAgICAgIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMgIT0gX2RhdGEyLnNvdXJjZSkge1xuICAgICAgICAgIHNwZWMuc291cmNlID0gJycgKyBzcmM7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG4gICAgICAgICAgbW92ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRndCAhPSBudWxsICYmIHRndCAhPSBfZGF0YTIudGFyZ2V0KSB7XG4gICAgICAgICAgc3BlYy50YXJnZXQgPSAnJyArIHRndDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcbiAgICAgICAgICBtb3ZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW92ZSkge1xuICAgICAgICAgIGVsZSA9IGVsZS5tb3ZlKHNwZWMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgaXMgaW1tdXRhYmxlIHZpYSBkYXRhKClcbiAgICAgICAgdmFyIG5ld1BhcmVudFZhbFNwZWNkID0gKCdwYXJlbnQnIGluIG9iai5kYXRhKTtcbiAgICAgICAgdmFyIHBhcmVudCA9IG9iai5kYXRhLnBhcmVudDtcbiAgICAgICAgaWYgKG5ld1BhcmVudFZhbFNwZWNkICYmIChwYXJlbnQgIT0gbnVsbCB8fCBfZGF0YTIucGFyZW50ICE9IG51bGwpICYmIHBhcmVudCAhPSBfZGF0YTIucGFyZW50KSB7XG4gICAgICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBjYW4ndCBzZXQgdW5kZWZpbmVkIGltcGVyYXRpdmVseSwgc28gdXNlIG51bGxcbiAgICAgICAgICAgIHBhcmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyZW50ID0gJycgKyBwYXJlbnQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlID0gZWxlLm1vdmUoe1xuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2JqLnBvc2l0aW9uKSB7XG4gICAgICBlbGUucG9zaXRpb24ob2JqLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgZ3JvdXAgLS0gaW1tdXRhYmxlXG5cbiAgICB2YXIgY2hlY2tTd2l0Y2ggPSBmdW5jdGlvbiBjaGVja1N3aXRjaChrLCB0cnVlRm5OYW1lLCBmYWxzZUZuTmFtZSkge1xuICAgICAgdmFyIG9ial9rID0gb2JqW2tdO1xuICAgICAgaWYgKG9ial9rICE9IG51bGwgJiYgb2JqX2sgIT09IHBba10pIHtcbiAgICAgICAgaWYgKG9ial9rKSB7XG4gICAgICAgICAgZWxlW3RydWVGbk5hbWVdKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlW2ZhbHNlRm5OYW1lXSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjaGVja1N3aXRjaCgncmVtb3ZlZCcsICdyZW1vdmUnLCAncmVzdG9yZScpO1xuICAgIGNoZWNrU3dpdGNoKCdzZWxlY3RlZCcsICdzZWxlY3QnLCAndW5zZWxlY3QnKTtcbiAgICBjaGVja1N3aXRjaCgnc2VsZWN0YWJsZScsICdzZWxlY3RpZnknLCAndW5zZWxlY3RpZnknKTtcbiAgICBjaGVja1N3aXRjaCgnbG9ja2VkJywgJ2xvY2snLCAndW5sb2NrJyk7XG4gICAgY2hlY2tTd2l0Y2goJ2dyYWJiYWJsZScsICdncmFiaWZ5JywgJ3VuZ3JhYmlmeScpO1xuICAgIGNoZWNrU3dpdGNoKCdwYW5uYWJsZScsICdwYW5pZnknLCAndW5wYW5pZnknKTtcbiAgICBpZiAob2JqLmNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgZWxlLmNsYXNzZXMob2JqLmNsYXNzZXMpO1xuICAgIH1cbiAgICBjeS5lbmRCYXRjaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2UgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZ2V0XG5cbiAgICB2YXIganNvbiA9IHtcbiAgICAgIGRhdGE6IGNvcHkocC5kYXRhKSxcbiAgICAgIHBvc2l0aW9uOiBjb3B5KHAucG9zaXRpb24pLFxuICAgICAgZ3JvdXA6IHAuZ3JvdXAsXG4gICAgICByZW1vdmVkOiBwLnJlbW92ZWQsXG4gICAgICBzZWxlY3RlZDogcC5zZWxlY3RlZCxcbiAgICAgIHNlbGVjdGFibGU6IHAuc2VsZWN0YWJsZSxcbiAgICAgIGxvY2tlZDogcC5sb2NrZWQsXG4gICAgICBncmFiYmFibGU6IHAuZ3JhYmJhYmxlLFxuICAgICAgcGFubmFibGU6IHAucGFubmFibGUsXG4gICAgICBjbGFzc2VzOiBudWxsXG4gICAgfTtcbiAgICBqc29uLmNsYXNzZXMgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgcC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgcmV0dXJuIGpzb24uY2xhc3NlcyArPSBpKysgPT09IDAgPyBjbHMgOiAnICcgKyBjbHM7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn07XG5lbGVzZm4kMS5qc29ucyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGpzb25zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgIHZhciBqc29uID0gZWxlLmpzb24oKTtcbiAgICBqc29ucy5wdXNoKGpzb24pO1xuICB9XG4gIHJldHVybiBqc29ucztcbn07XG5lbGVzZm4kMS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgZWxlc0FyciA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICB2YXIganNvbiA9IGVsZS5qc29uKCk7XG4gICAgdmFyIGNsb25lID0gbmV3IEVsZW1lbnQoY3ksIGpzb24sIGZhbHNlKTsgLy8gTkIgbm8gcmVzdG9yZVxuXG4gICAgZWxlc0Fyci5wdXNoKGNsb25lKTtcbiAgfVxuICByZXR1cm4gbmV3IENvbGxlY3Rpb24oY3ksIGVsZXNBcnIpO1xufTtcbmVsZXNmbiQxLmNvcHkgPSBlbGVzZm4kMS5jbG9uZTtcbmVsZXNmbiQxLnJlc3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub3RpZnlSZW5kZXJlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgdmFyIGFkZFRvUG9vbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY3kgPSBzZWxmLmN5KCk7XG4gIHZhciBjeV9wID0gY3kuX3ByaXZhdGU7XG5cbiAgLy8gY3JlYXRlIGFycmF5cyBvZiBub2RlcyBhbmQgZWRnZXMsIHNpbmNlIHdlIG5lZWQgdG9cbiAgLy8gcmVzdG9yZSB0aGUgbm9kZXMgZmlyc3RcbiAgdmFyIG5vZGVzID0gW107XG4gIHZhciBlZGdlcyA9IFtdO1xuICB2YXIgZWxlbWVudHM7XG4gIGZvciAodmFyIF9pMyA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgX2kzIDwgbDsgX2kzKyspIHtcbiAgICB2YXIgZWxlID0gc2VsZltfaTNdO1xuICAgIGlmIChhZGRUb1Bvb2wgJiYgIWVsZS5yZW1vdmVkKCkpIHtcbiAgICAgIC8vIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoaXMgZWxlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIG5vZGVzIGZpcnN0IGluIHRoZSBhcnJheSBhbmQgZWRnZXMgYWZ0ZXJcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAvLyBwdXQgdG8gZnJvbnQgb2YgYXJyYXkgaWYgbm9kZVxuICAgICAgbm9kZXMucHVzaChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwdXQgdG8gZW5kIG9mIGFycmF5IGlmIGVkZ2VcbiAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICB9XG4gIH1cbiAgZWxlbWVudHMgPSBub2Rlcy5jb25jYXQoZWRnZXMpO1xuICB2YXIgaTtcbiAgdmFyIHJlbW92ZUZyb21FbGVtZW50cyA9IGZ1bmN0aW9uIHJlbW92ZUZyb21FbGVtZW50cygpIHtcbiAgICBlbGVtZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgaS0tO1xuICB9O1xuXG4gIC8vIG5vdywgcmVzdG9yZSBlYWNoIGVsZW1lbnRcbiAgZm9yIChpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9lbGUyID0gZWxlbWVudHNbaV07XG4gICAgdmFyIF9wcml2YXRlID0gX2VsZTIuX3ByaXZhdGU7XG4gICAgdmFyIF9kYXRhMyA9IF9wcml2YXRlLmRhdGE7XG5cbiAgICAvLyB0aGUgdHJhdmVyc2FsIGNhY2hlIHNob3VsZCBzdGFydCBmcmVzaCB3aGVuIGVsZSBpcyBhZGRlZFxuICAgIF9lbGUyLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcblxuICAgIC8vIHNldCBpZCBhbmQgdmFsaWRhdGVcbiAgICBpZiAoIWFkZFRvUG9vbCAmJiAhX3ByaXZhdGUucmVtb3ZlZCkgOyBlbHNlIGlmIChfZGF0YTMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX2RhdGEzLmlkID0gdXVpZCgpO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyJDEoX2RhdGEzLmlkKSkge1xuICAgICAgX2RhdGEzLmlkID0gJycgKyBfZGF0YTMuaWQ7IC8vIG5vdyBpdCdzIGEgc3RyaW5nXG4gICAgfSBlbHNlIGlmIChlbXB0eVN0cmluZyhfZGF0YTMuaWQpIHx8ICFzdHJpbmcoX2RhdGEzLmlkKSkge1xuICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIGVsZW1lbnQgd2l0aCBpbnZhbGlkIHN0cmluZyBJRCBgJyArIF9kYXRhMy5pZCArICdgJyk7XG5cbiAgICAgIC8vIGNhbid0IGNyZWF0ZSBlbGVtZW50IGlmIGl0IGhhcyBlbXB0eSBzdHJpbmcgYXMgaWQgb3Igbm9uLXN0cmluZyBpZFxuICAgICAgcmVtb3ZlRnJvbUVsZW1lbnRzKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKGN5Lmhhc0VsZW1lbnRXaXRoSWQoX2RhdGEzLmlkKSkge1xuICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCcgKyBfZGF0YTMuaWQgKyAnYCcpO1xuXG4gICAgICAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBvbmUgYWxyZWFkeSBoYXMgdGhhdCBpZFxuICAgICAgcmVtb3ZlRnJvbUVsZW1lbnRzKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlkID0gX2RhdGEzLmlkOyAvLyBpZCBpcyBmaW5hbGlzZWQsIG5vdyBsZXQncyBrZWVwIGEgcmVmXG5cbiAgICBpZiAoX2VsZTIuaXNOb2RlKCkpIHtcbiAgICAgIC8vIGV4dHJhIGNoZWNrcyBmb3Igbm9kZXNcbiAgICAgIHZhciBwb3MgPSBfcHJpdmF0ZS5wb3NpdGlvbjtcblxuICAgICAgLy8gbWFrZSBzdXJlIHRoZSBub2RlcyBoYXZlIGEgZGVmaW5lZCBwb3NpdGlvblxuXG4gICAgICBpZiAocG9zLnggPT0gbnVsbCkge1xuICAgICAgICBwb3MueCA9IDA7XG4gICAgICB9XG4gICAgICBpZiAocG9zLnkgPT0gbnVsbCkge1xuICAgICAgICBwb3MueSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChfZWxlMi5pc0VkZ2UoKSkge1xuICAgICAgLy8gZXh0cmEgY2hlY2tzIGZvciBlZGdlc1xuXG4gICAgICB2YXIgZWRnZSA9IF9lbGUyO1xuICAgICAgdmFyIGZpZWxkcyA9IFsnc291cmNlJywgJ3RhcmdldCddO1xuICAgICAgdmFyIGZpZWxkc0xlbmd0aCA9IGZpZWxkcy5sZW5ndGg7XG4gICAgICB2YXIgYmFkU291cmNlT3JUYXJnZXQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmllbGRzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2pdO1xuICAgICAgICB2YXIgdmFsID0gX2RhdGEzW2ZpZWxkXTtcbiAgICAgICAgaWYgKG51bWJlciQxKHZhbCkpIHtcbiAgICAgICAgICB2YWwgPSBfZGF0YTNbZmllbGRdID0gJycgKyBfZGF0YTNbZmllbGRdOyAvLyBub3cgc3RyaW5nXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSAnJykge1xuICAgICAgICAgIC8vIGNhbid0IGNyZWF0ZSBpZiBzb3VyY2Ugb3IgdGFyZ2V0IGlzIG5vdCBkZWZpbmVkIHByb3Blcmx5XG4gICAgICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIGVkZ2UgYCcgKyBpZCArICdgIHdpdGggdW5zcGVjaWZpZWQgJyArIGZpZWxkKTtcbiAgICAgICAgICBiYWRTb3VyY2VPclRhcmdldCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIWN5Lmhhc0VsZW1lbnRXaXRoSWQodmFsKSkge1xuICAgICAgICAgIC8vIGNhbid0IGNyZWF0ZSBlZGdlIGlmIG9uZSBvZiBpdHMgbm9kZXMgZG9lc24ndCBleGlzdFxuICAgICAgICAgIGVycm9yKCdDYW4gbm90IGNyZWF0ZSBlZGdlIGAnICsgaWQgKyAnYCB3aXRoIG5vbmV4aXN0YW50ICcgKyBmaWVsZCArICcgYCcgKyB2YWwgKyAnYCcpO1xuICAgICAgICAgIGJhZFNvdXJjZU9yVGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJhZFNvdXJjZU9yVGFyZ2V0KSB7XG4gICAgICAgIHJlbW92ZUZyb21FbGVtZW50cygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2FuJ3QgY3JlYXRlIHRoaXNcblxuICAgICAgdmFyIHNyYyA9IGN5LmdldEVsZW1lbnRCeUlkKF9kYXRhMy5zb3VyY2UpO1xuICAgICAgdmFyIHRndCA9IGN5LmdldEVsZW1lbnRCeUlkKF9kYXRhMy50YXJnZXQpO1xuXG4gICAgICAvLyBvbmx5IG9uZSBlZGdlIGluIG5vZGUgaWYgbG9vcFxuICAgICAgaWYgKHNyYy5zYW1lKHRndCkpIHtcbiAgICAgICAgc3JjLl9wcml2YXRlLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcmMuX3ByaXZhdGUuZWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgdGd0Ll9wcml2YXRlLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgICBlZGdlLl9wcml2YXRlLnNvdXJjZSA9IHNyYztcbiAgICAgIGVkZ2UuX3ByaXZhdGUudGFyZ2V0ID0gdGd0O1xuICAgIH0gLy8gaWYgaXMgZWRnZVxuXG4gICAgLy8gY3JlYXRlIG1vY2sgaWRzIC8gaW5kZXhlcyBtYXBzIGZvciBlbGVtZW50IHNvIGl0IGNhbiBiZSB1c2VkIGxpa2UgY29sbGVjdGlvbnNcbiAgICBfcHJpdmF0ZS5tYXAgPSBuZXcgTWFwJDIoKTtcbiAgICBfcHJpdmF0ZS5tYXAuc2V0KGlkLCB7XG4gICAgICBlbGU6IF9lbGUyLFxuICAgICAgaW5kZXg6IDBcbiAgICB9KTtcbiAgICBfcHJpdmF0ZS5yZW1vdmVkID0gZmFsc2U7XG4gICAgaWYgKGFkZFRvUG9vbCkge1xuICAgICAgY3kuYWRkVG9Qb29sKF9lbGUyKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVhY2ggZWxlbWVudFxuXG4gIC8vIGRvIGNvbXBvdW5kIG5vZGUgc2FuaXR5IGNoZWNrc1xuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBub2Rlcy5sZW5ndGg7IF9pNCsrKSB7XG4gICAgLy8gZWFjaCBub2RlXG4gICAgdmFyIG5vZGUgPSBub2Rlc1tfaTRdO1xuICAgIHZhciBfZGF0YTQgPSBub2RlLl9wcml2YXRlLmRhdGE7XG4gICAgaWYgKG51bWJlciQxKF9kYXRhNC5wYXJlbnQpKSB7XG4gICAgICAvLyB0aGVuIGF1dG9tYWtlIHN0cmluZ1xuICAgICAgX2RhdGE0LnBhcmVudCA9ICcnICsgX2RhdGE0LnBhcmVudDtcbiAgICB9XG4gICAgdmFyIHBhcmVudElkID0gX2RhdGE0LnBhcmVudDtcbiAgICB2YXIgc3BlY2lmaWVkUGFyZW50ID0gcGFyZW50SWQgIT0gbnVsbDtcbiAgICBpZiAoc3BlY2lmaWVkUGFyZW50IHx8IG5vZGUuX3ByaXZhdGUucGFyZW50KSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPyBjeS5jb2xsZWN0aW9uKCkubWVyZ2Uobm9kZS5fcHJpdmF0ZS5wYXJlbnQpIDogY3kuZ2V0RWxlbWVudEJ5SWQocGFyZW50SWQpO1xuICAgICAgaWYgKHBhcmVudC5lbXB0eSgpKSB7XG4gICAgICAgIC8vIG5vbi1leGlzdGFudCBwYXJlbnQ7IGp1c3QgcmVtb3ZlIGl0XG4gICAgICAgIF9kYXRhNC5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKHBhcmVudFswXS5yZW1vdmVkKCkpIHtcbiAgICAgICAgd2FybignTm9kZSBhZGRlZCB3aXRoIG1pc3NpbmcgcGFyZW50LCByZWZlcmVuY2UgdG8gcGFyZW50IHJlbW92ZWQnKTtcbiAgICAgICAgX2RhdGE0LnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNlbGZBc1BhcmVudCA9IGZhbHNlO1xuICAgICAgICB2YXIgYW5jZXN0b3IgPSBwYXJlbnQ7XG4gICAgICAgIHdoaWxlICghYW5jZXN0b3IuZW1wdHkoKSkge1xuICAgICAgICAgIGlmIChub2RlLnNhbWUoYW5jZXN0b3IpKSB7XG4gICAgICAgICAgICAvLyBtYXJrIHNlbGYgYXMgcGFyZW50IGFuZCByZW1vdmUgZnJvbSBkYXRhXG4gICAgICAgICAgICBzZWxmQXNQYXJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgX2RhdGE0LnBhcmVudCA9IHVuZGVmaW5lZDsgLy8gcmVtb3ZlIHBhcmVudCByZWZlcmVuY2VcblxuICAgICAgICAgICAgLy8gZXhpdCBvciB3ZSBsb29wIGZvcmV2ZXJcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZkFzUGFyZW50KSB7XG4gICAgICAgICAgLy8gY29ubmVjdCB3aXRoIGNoaWxkcmVuXG4gICAgICAgICAgcGFyZW50WzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgICAgbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPSBwYXJlbnRbMF07XG5cbiAgICAgICAgICAvLyBsZXQgdGhlIGNvcmUga25vdyB3ZSBoYXZlIGEgY29tcG91bmQgZ3JhcGhcbiAgICAgICAgICBjeV9wLmhhc0NvbXBvdW5kTm9kZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIGVsc2VcbiAgICB9IC8vIGlmIHNwZWNpZmllZCBwYXJlbnRcbiAgfSAvLyBmb3IgZWFjaCBub2RlXG5cbiAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgcmVzdG9yZWQgPSBlbGVtZW50cy5sZW5ndGggPT09IHNlbGYubGVuZ3RoID8gc2VsZiA6IG5ldyBDb2xsZWN0aW9uKGN5LCBlbGVtZW50cyk7XG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgcmVzdG9yZWQubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdmFyIF9lbGUzID0gcmVzdG9yZWRbX2k1XTtcbiAgICAgIGlmIChfZWxlMy5pc05vZGUoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkaW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZXMgZm9yIHRoZSBwYXJhbGxlbCBlZGdlc1xuICAgICAgX2VsZTMucGFyYWxsZWxFZGdlcygpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcblxuICAgICAgLy8gYWRkaW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZSBmb3IgdGhlIGNvbm5lY3RlZCBub2Rlc1xuICAgICAgX2VsZTMuc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuICAgICAgX2VsZTMudGFyZ2V0KCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuICAgIH1cbiAgICB2YXIgdG9VcGRhdGVTdHlsZTtcbiAgICBpZiAoY3lfcC5oYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICB0b1VwZGF0ZVN0eWxlID0gY3kuY29sbGVjdGlvbigpLm1lcmdlKHJlc3RvcmVkKS5tZXJnZShyZXN0b3JlZC5jb25uZWN0ZWROb2RlcygpKS5tZXJnZShyZXN0b3JlZC5wYXJlbnQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvVXBkYXRlU3R5bGUgPSByZXN0b3JlZDtcbiAgICB9XG4gICAgdG9VcGRhdGVTdHlsZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKS51cGRhdGVTdHlsZShub3RpZnlSZW5kZXJlcik7XG4gICAgaWYgKG5vdGlmeVJlbmRlcmVyKSB7XG4gICAgICByZXN0b3JlZC5lbWl0QW5kTm90aWZ5KCdhZGQnKTtcbiAgICB9IGVsc2UgaWYgKGFkZFRvUG9vbCkge1xuICAgICAgcmVzdG9yZWQuZW1pdCgnYWRkJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWxmOyAvLyBjaGFpbmFiaWxpdHlcbn07XG5cbmVsZXNmbiQxLnJlbW92ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICByZXR1cm4gZWxlICYmIGVsZS5fcHJpdmF0ZS5yZW1vdmVkO1xufTtcbmVsZXNmbiQxLmluc2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUgJiYgIWVsZS5fcHJpdmF0ZS5yZW1vdmVkO1xufTtcbmVsZXNmbiQxLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vdGlmeVJlbmRlcmVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICB2YXIgcmVtb3ZlRnJvbVBvb2wgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGVsZXNUb1JlbW92ZSA9IFtdO1xuICB2YXIgZWxlc1RvUmVtb3ZlSWRzID0ge307XG4gIHZhciBjeSA9IHNlbGYuX3ByaXZhdGUuY3k7XG5cbiAgLy8gYWRkIGNvbm5lY3RlZCBlZGdlc1xuICBmdW5jdGlvbiBhZGRDb25uZWN0ZWRFZGdlcyhub2RlKSB7XG4gICAgdmFyIGVkZ2VzID0gbm9kZS5fcHJpdmF0ZS5lZGdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhZGQoZWRnZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBkZXNjZW5kYW50IG5vZGVzXG4gIGZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLl9wcml2YXRlLmNoaWxkcmVuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFkZChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFkZChlbGUpIHtcbiAgICB2YXIgYWxyZWFkeUFkZGVkID0gZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXTtcbiAgICBpZiAocmVtb3ZlRnJvbVBvb2wgJiYgZWxlLnJlbW92ZWQoKSB8fCBhbHJlYWR5QWRkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgIGVsZXNUb1JlbW92ZS5wdXNoKGVsZSk7IC8vIG5vZGVzIGFyZSByZW1vdmVkIGxhc3RcblxuICAgICAgYWRkQ29ubmVjdGVkRWRnZXMoZWxlKTtcbiAgICAgIGFkZENoaWxkcmVuKGVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZXNUb1JlbW92ZS51bnNoaWZ0KGVsZSk7IC8vIGVkZ2VzIGFyZSByZW1vdmVkIGZpcnN0XG4gICAgfVxuICB9XG5cbiAgLy8gbWFrZSB0aGUgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmVcbiAgLy8gKG1heSBiZSByZW1vdmluZyBtb3JlIHRoYW4gc3BlY2lmaWVkIGR1ZSB0byBjb25uZWN0ZWQgZWRnZXMgZXRjKVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgZWxlID0gc2VsZltpXTtcbiAgICBhZGQoZWxlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVFZGdlUmVmKG5vZGUsIGVkZ2UpIHtcbiAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuICAgIHJlbW92ZUZyb21BcnJheShjb25uZWN0ZWRFZGdlcywgZWRnZSk7XG5cbiAgICAvLyByZW1vdmluZyBhbiBlZGdlcyBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlIGZvciBpdHMgbm9kZXNcbiAgICBub2RlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVQYXJhbGxlbFJlZihwbGxFZGdlKSB7XG4gICAgLy8gcmVtb3ZpbmcgYW4gZWRnZSBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlcyBmb3IgdGhlIHBhcmFsbGVsIGVkZ2VzXG4gICAgcGxsRWRnZS5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG4gIH1cbiAgdmFyIGFsdGVyZWRQYXJlbnRzID0gW107XG4gIGFsdGVyZWRQYXJlbnRzLmlkcyA9IHt9O1xuICBmdW5jdGlvbiByZW1vdmVDaGlsZFJlZihwYXJlbnQsIGVsZSkge1xuICAgIGVsZSA9IGVsZVswXTtcbiAgICBwYXJlbnQgPSBwYXJlbnRbMF07XG4gICAgdmFyIGNoaWxkcmVuID0gcGFyZW50Ll9wcml2YXRlLmNoaWxkcmVuO1xuICAgIHZhciBwaWQgPSBwYXJlbnQuaWQoKTtcbiAgICByZW1vdmVGcm9tQXJyYXkoY2hpbGRyZW4sIGVsZSk7IC8vIHJlbW92ZSBwYXJlbnQgPT4gY2hpbGQgcmVmXG5cbiAgICBlbGUuX3ByaXZhdGUucGFyZW50ID0gbnVsbDsgLy8gcmVtb3ZlIGNoaWxkID0+IHBhcmVudCByZWZcblxuICAgIGlmICghYWx0ZXJlZFBhcmVudHMuaWRzW3BpZF0pIHtcbiAgICAgIGFsdGVyZWRQYXJlbnRzLmlkc1twaWRdID0gdHJ1ZTtcbiAgICAgIGFsdGVyZWRQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gIH1cbiAgc2VsZi5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgY3kucmVtb3ZlRnJvbVBvb2woZWxlc1RvUmVtb3ZlKTsgLy8gcmVtb3ZlIGZyb20gY29yZSBwb29sXG4gIH1cblxuICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBlbGVzVG9SZW1vdmUubGVuZ3RoOyBfaTYrKykge1xuICAgIHZhciBfZWxlNCA9IGVsZXNUb1JlbW92ZVtfaTZdO1xuICAgIGlmIChfZWxlNC5pc0VkZ2UoKSkge1xuICAgICAgLy8gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhpcyBlZGdlIGluIGl0cyBjb25uZWN0ZWQgbm9kZXNcbiAgICAgIHZhciBzcmMgPSBfZWxlNC5zb3VyY2UoKVswXTtcbiAgICAgIHZhciB0Z3QgPSBfZWxlNC50YXJnZXQoKVswXTtcbiAgICAgIHJlbW92ZUVkZ2VSZWYoc3JjLCBfZWxlNCk7XG4gICAgICByZW1vdmVFZGdlUmVmKHRndCwgX2VsZTQpO1xuICAgICAgdmFyIHBsbEVkZ2VzID0gX2VsZTQucGFyYWxsZWxFZGdlcygpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwbGxFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcGxsRWRnZSA9IHBsbEVkZ2VzW2pdO1xuICAgICAgICByZW1vdmVQYXJhbGxlbFJlZihwbGxFZGdlKTtcbiAgICAgICAgaWYgKHBsbEVkZ2UuaXNCdW5kbGVkQmV6aWVyKCkpIHtcbiAgICAgICAgICBwbGxFZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gcGFyZW50XG4gICAgICB2YXIgcGFyZW50ID0gX2VsZTQucGFyZW50KCk7XG4gICAgICBpZiAocGFyZW50Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZW1vdmVDaGlsZFJlZihwYXJlbnQsIF9lbGU0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgICAvLyBtYXJrIGFzIHJlbW92ZWRcbiAgICAgIF9lbGU0Ll9wcml2YXRlLnJlbW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgY29tcG91bmQgZ3JhcGggb3Igbm90XG4gIHZhciBlbGVzU3RpbGxJbnNpZGUgPSBjeS5fcHJpdmF0ZS5lbGVtZW50cztcbiAgY3kuX3ByaXZhdGUuaGFzQ29tcG91bmROb2RlcyA9IGZhbHNlO1xuICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCBlbGVzU3RpbGxJbnNpZGUubGVuZ3RoOyBfaTcrKykge1xuICAgIHZhciBfZWxlNSA9IGVsZXNTdGlsbEluc2lkZVtfaTddO1xuICAgIGlmIChfZWxlNS5pc1BhcmVudCgpKSB7XG4gICAgICBjeS5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgcmVtb3ZlZEVsZW1lbnRzID0gbmV3IENvbGxlY3Rpb24odGhpcy5jeSgpLCBlbGVzVG9SZW1vdmUpO1xuICBpZiAocmVtb3ZlZEVsZW1lbnRzLnNpemUoKSA+IDApIHtcbiAgICAvLyBtdXN0IG1hbnVhbGx5IG5vdGlmeSBzaW5jZSB0cmlnZ2VyIHdvbid0IGRvIHRoaXMgYXV0b21hdGljYWxseSBvbmNlIHJlbW92ZWRcblxuICAgIGlmIChub3RpZnlSZW5kZXJlcikge1xuICAgICAgcmVtb3ZlZEVsZW1lbnRzLmVtaXRBbmROb3RpZnkoJ3JlbW92ZScpO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVBvb2wpIHtcbiAgICAgIHJlbW92ZWRFbGVtZW50cy5lbWl0KCdyZW1vdmUnKTtcbiAgICB9XG4gIH1cblxuICAvLyB0aGUgcGFyZW50cyB3aG8gd2VyZSBtb2RpZmllZCBieSB0aGUgcmVtb3ZhbCBuZWVkIHRoZWlyIHN0eWxlIHVwZGF0ZWRcbiAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgYWx0ZXJlZFBhcmVudHMubGVuZ3RoOyBfaTgrKykge1xuICAgIHZhciBfZWxlNiA9IGFsdGVyZWRQYXJlbnRzW19pOF07XG4gICAgaWYgKCFyZW1vdmVGcm9tUG9vbCB8fCAhX2VsZTYucmVtb3ZlZCgpKSB7XG4gICAgICBfZWxlNi51cGRhdGVTdHlsZSgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVtb3ZlZEVsZW1lbnRzO1xufTtcbmVsZXNmbiQxLm1vdmUgPSBmdW5jdGlvbiAoc3RydWN0KSB7XG4gIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gIHZhciBlbGVzID0gdGhpcztcblxuICAvLyBqdXN0IGNsZWFuIHVwIHJlZnMsIGNhY2hlcywgZXRjLiBpbiB0aGUgc2FtZSB3YXkgYXMgd2hlbiByZW1vdmluZyBhbmQgdGhlbiByZXN0b3JpbmdcbiAgLy8gKG91ciBjYWxscyB0byByZW1vdmUvcmVzdG9yZSBkbyBub3QgcmVtb3ZlIGZyb20gdGhlIGdyYXBoIG9yIG1ha2UgZXZlbnRzKVxuICB2YXIgbm90aWZ5UmVuZGVyZXIgPSBmYWxzZTtcbiAgdmFyIG1vZGlmeVBvb2wgPSBmYWxzZTtcbiAgdmFyIHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoaWQpIHtcbiAgICByZXR1cm4gaWQgPT0gbnVsbCA/IGlkIDogJycgKyBpZDtcbiAgfTsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICBpZiAoc3RydWN0LnNvdXJjZSAhPT0gdW5kZWZpbmVkIHx8IHN0cnVjdC50YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBzcmNJZCA9IHRvU3RyaW5nKHN0cnVjdC5zb3VyY2UpO1xuICAgIHZhciB0Z3RJZCA9IHRvU3RyaW5nKHN0cnVjdC50YXJnZXQpO1xuICAgIHZhciBzcmNFeGlzdHMgPSBzcmNJZCAhPSBudWxsICYmIGN5Lmhhc0VsZW1lbnRXaXRoSWQoc3JjSWQpO1xuICAgIHZhciB0Z3RFeGlzdHMgPSB0Z3RJZCAhPSBudWxsICYmIGN5Lmhhc0VsZW1lbnRXaXRoSWQodGd0SWQpO1xuICAgIGlmIChzcmNFeGlzdHMgfHwgdGd0RXhpc3RzKSB7XG4gICAgICBjeS5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGF2b2lkIGR1cGxpY2F0ZSBzdHlsZSB1cGRhdGVzXG4gICAgICAgIGVsZXMucmVtb3ZlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gY2xlYW4gdXAgcmVmcyBldGMuXG4gICAgICAgIGVsZXMuZW1pdEFuZE5vdGlmeSgnbW92ZW91dCcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgICB2YXIgX2RhdGE1ID0gZWxlLl9wcml2YXRlLmRhdGE7XG4gICAgICAgICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgaWYgKHNyY0V4aXN0cykge1xuICAgICAgICAgICAgICBfZGF0YTUuc291cmNlID0gc3JjSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGd0RXhpc3RzKSB7XG4gICAgICAgICAgICAgIF9kYXRhNS50YXJnZXQgPSB0Z3RJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxlcy5yZXN0b3JlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gbWFrZSBuZXcgcmVmcywgc3R5bGUsIGV0Yy5cbiAgICAgIH0pO1xuXG4gICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmUnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RydWN0LnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gbW92ZSBub2RlIHRvIG5ldyBwYXJlbnRcbiAgICB2YXIgcGFyZW50SWQgPSB0b1N0cmluZyhzdHJ1Y3QucGFyZW50KTtcbiAgICB2YXIgcGFyZW50RXhpc3RzID0gcGFyZW50SWQgPT09IG51bGwgfHwgY3kuaGFzRWxlbWVudFdpdGhJZChwYXJlbnRJZCk7XG4gICAgaWYgKHBhcmVudEV4aXN0cykge1xuICAgICAgdmFyIHBpZFRvQXNzaWduID0gcGFyZW50SWQgPT09IG51bGwgPyB1bmRlZmluZWQgOiBwYXJlbnRJZDtcbiAgICAgIGN5LmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYXZvaWQgZHVwbGljYXRlIHN0eWxlIHVwZGF0ZXNcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBlbGVzLnJlbW92ZShub3RpZnlSZW5kZXJlciwgbW9kaWZ5UG9vbCk7IC8vIGNsZWFuIHVwIHJlZnMgZXRjLlxuICAgICAgICB1cGRhdGVkLmVtaXRBbmROb3RpZnkoJ21vdmVvdXQnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAgdmFyIF9kYXRhNiA9IGVsZS5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgICAgIF9kYXRhNi5wYXJlbnQgPSBwaWRUb0Fzc2lnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlZC5yZXN0b3JlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gbWFrZSBuZXcgcmVmcywgc3R5bGUsIGV0Yy5cbiAgICAgIH0pO1xuXG4gICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmUnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuW2VsZXNmbiRqLCBlbGVzZm4kaSwgZWxlc2ZuJGgsIGVsZXNmbiRnLCBlbGVzZm4kZiwgZGF0YSwgZWxlc2ZuJGQsIGRpbWVuc2lvbnMsIGVsZXNmbiQ5LCBlbGVzZm4kOCwgZWxlc2ZuJDcsIGVsZXNmbiQ2LCBlbGVzZm4kNSwgZWxlc2ZuJDQsIGVsZXNmbiQzLCBlbGVzZm4kMl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKGVsZXNmbiQxLCBwcm9wcyk7XG59KTtcblxudmFyIGNvcmVmbiQ5ID0ge1xuICBhZGQ6IGZ1bmN0aW9uIGFkZChvcHRzKSB7XG4gICAgdmFyIGVsZW1lbnRzO1xuICAgIHZhciBjeSA9IHRoaXM7XG5cbiAgICAvLyBhZGQgdGhlIGVsZW1lbnRzXG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24ob3B0cykpIHtcbiAgICAgIHZhciBlbGVzID0gb3B0cztcbiAgICAgIGlmIChlbGVzLl9wcml2YXRlLmN5ID09PSBjeSkge1xuICAgICAgICAvLyBzYW1lIGluc3RhbmNlID0+IGp1c3QgcmVzdG9yZVxuICAgICAgICBlbGVtZW50cyA9IGVsZXMucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBjb3B5IGZyb20ganNvblxuICAgICAgICB2YXIganNvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAganNvbnMucHVzaChlbGUuanNvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBqc29ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3BlY2lmeSBhbiBhcnJheSBvZiBvcHRpb25zXG4gICAgZWxzZSBpZiAoYXJyYXkob3B0cykpIHtcbiAgICAgIHZhciBfanNvbnMgPSBvcHRzO1xuICAgICAgZWxlbWVudHMgPSBuZXcgQ29sbGVjdGlvbihjeSwgX2pzb25zKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWZ5IHZpYSBvcHRzLm5vZGVzIGFuZCBvcHRzLmVkZ2VzXG4gICAgZWxzZSBpZiAocGxhaW5PYmplY3Qob3B0cykgJiYgKGFycmF5KG9wdHMubm9kZXMpIHx8IGFycmF5KG9wdHMuZWRnZXMpKSkge1xuICAgICAgdmFyIGVsZXNCeUdyb3VwID0gb3B0cztcbiAgICAgIHZhciBfanNvbnMyID0gW107XG4gICAgICB2YXIgZ3JzID0gWydub2RlcycsICdlZGdlcyddO1xuICAgICAgZm9yICh2YXIgX2kgPSAwLCBpbCA9IGdycy5sZW5ndGg7IF9pIDwgaWw7IF9pKyspIHtcbiAgICAgICAgdmFyIGdyb3VwID0gZ3JzW19pXTtcbiAgICAgICAgdmFyIGVsZXNBcnJheSA9IGVsZXNCeUdyb3VwW2dyb3VwXTtcbiAgICAgICAgaWYgKGFycmF5KGVsZXNBcnJheSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamwgPSBlbGVzQXJyYXkubGVuZ3RoOyBqIDwgamw7IGorKykge1xuICAgICAgICAgICAgdmFyIGpzb24gPSBleHRlbmQoe1xuICAgICAgICAgICAgICBncm91cDogZ3JvdXBcbiAgICAgICAgICAgIH0sIGVsZXNBcnJheVtqXSk7XG4gICAgICAgICAgICBfanNvbnMyLnB1c2goanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBfanNvbnMyKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWZ5IG9wdGlvbnMgZm9yIG9uZSBlbGVtZW50XG4gICAgZWxzZSB7XG4gICAgICB2YXIgX2pzb24gPSBvcHRzO1xuICAgICAgZWxlbWVudHMgPSBuZXcgRWxlbWVudChjeSwgX2pzb24pLmNvbGxlY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShjb2xsZWN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oY29sbGVjdGlvbikpIDsgZWxzZSBpZiAoc3RyaW5nKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBjb2xsZWN0aW9uO1xuICAgICAgY29sbGVjdGlvbiA9IHRoaXMuJChzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbW92ZSgpO1xuICB9XG59O1xuXG4vKiBnbG9iYWwgRmxvYXQzMkFycmF5ICovXG5cbi8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQ3ViaWNCZXppZXIobVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gIHZhciBORVdUT05fSVRFUkFUSU9OUyA9IDQsXG4gICAgTkVXVE9OX01JTl9TTE9QRSA9IDAuMDAxLFxuICAgIFNVQkRJVklTSU9OX1BSRUNJU0lPTiA9IDAuMDAwMDAwMSxcbiAgICBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyA9IDEwLFxuICAgIGtTcGxpbmVUYWJsZVNpemUgPSAxMSxcbiAgICBrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCksXG4gICAgZmxvYXQzMkFycmF5U3VwcG9ydGVkID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgLyogTXVzdCBjb250YWluIGZvdXIgYXJndW1lbnRzLiAqL1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIEFyZ3VtZW50cyBtdXN0IGJlIG51bWJlcnMuICovXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oYXJndW1lbnRzW2ldKSB8fCAhaXNGaW5pdGUoYXJndW1lbnRzW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qIFggdmFsdWVzIG11c3QgYmUgaW4gdGhlIFswLCAxXSByYW5nZS4gKi9cbiAgbVgxID0gTWF0aC5taW4obVgxLCAxKTtcbiAgbVgyID0gTWF0aC5taW4obVgyLCAxKTtcbiAgbVgxID0gTWF0aC5tYXgobVgxLCAwKTtcbiAgbVgyID0gTWF0aC5tYXgobVgyLCAwKTtcbiAgdmFyIG1TYW1wbGVWYWx1ZXMgPSBmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPyBuZXcgRmxvYXQzMkFycmF5KGtTcGxpbmVUYWJsZVNpemUpIDogbmV3IEFycmF5KGtTcGxpbmVUYWJsZVNpemUpO1xuICBmdW5jdGlvbiBBKGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDEuMCAtIDMuMCAqIGFBMiArIDMuMCAqIGFBMTtcbiAgfVxuICBmdW5jdGlvbiBCKGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDMuMCAqIGFBMiAtIDYuMCAqIGFBMTtcbiAgfVxuICBmdW5jdGlvbiBDKGFBMSkge1xuICAgIHJldHVybiAzLjAgKiBhQTE7XG4gIH1cbiAgZnVuY3Rpb24gY2FsY0JlemllcihhVCwgYUExLCBhQTIpIHtcbiAgICByZXR1cm4gKChBKGFBMSwgYUEyKSAqIGFUICsgQihhQTEsIGFBMikpICogYVQgKyBDKGFBMSkpICogYVQ7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U2xvcGUoYVQsIGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDMuMCAqIEEoYUExLCBhQTIpICogYVQgKiBhVCArIDIuMCAqIEIoYUExLCBhQTIpICogYVQgKyBDKGFBMSk7XG4gIH1cbiAgZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGFHdWVzc1QpIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgTkVXVE9OX0lURVJBVElPTlM7ICsrX2kpIHtcbiAgICAgIHZhciBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XG4gICAgICBpZiAoY3VycmVudFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgcmV0dXJuIGFHdWVzc1Q7XG4gICAgICB9XG4gICAgICB2YXIgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgYUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcbiAgICB9XG4gICAgcmV0dXJuIGFHdWVzc1Q7XG4gIH1cbiAgZnVuY3Rpb24gY2FsY1NhbXBsZVZhbHVlcygpIHtcbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrU3BsaW5lVGFibGVTaXplOyArK19pMikge1xuICAgICAgbVNhbXBsZVZhbHVlc1tfaTJdID0gY2FsY0JlemllcihfaTIgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYmluYXJ5U3ViZGl2aWRlKGFYLCBhQSwgYUIpIHtcbiAgICB2YXIgY3VycmVudFgsXG4gICAgICBjdXJyZW50VCxcbiAgICAgIGkgPSAwO1xuICAgIGRvIHtcbiAgICAgIGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XG4gICAgICBjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgaWYgKGN1cnJlbnRYID4gMC4wKSB7XG4gICAgICAgIGFCID0gY3VycmVudFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhQSA9IGN1cnJlbnRUO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJiArK2kgPCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUO1xuICB9XG4gIGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XG4gICAgdmFyIGludGVydmFsU3RhcnQgPSAwLjAsXG4gICAgICBjdXJyZW50U2FtcGxlID0gMSxcbiAgICAgIGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcbiAgICBmb3IgKDsgY3VycmVudFNhbXBsZSAhPT0gbGFzdFNhbXBsZSAmJiBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdIDw9IGFYOyArK2N1cnJlbnRTYW1wbGUpIHtcbiAgICAgIGludGVydmFsU3RhcnQgKz0ga1NhbXBsZVN0ZXBTaXplO1xuICAgIH1cbiAgICAtLWN1cnJlbnRTYW1wbGU7XG4gICAgdmFyIGRpc3QgPSAoYVggLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvIChtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pLFxuICAgICAgZ3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemUsXG4gICAgICBpbml0aWFsU2xvcGUgPSBnZXRTbG9wZShndWVzc0ZvclQsIG1YMSwgbVgyKTtcbiAgICBpZiAoaW5pdGlhbFNsb3BlID49IE5FV1RPTl9NSU5fU0xPUEUpIHtcbiAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JUKTtcbiAgICB9IGVsc2UgaWYgKGluaXRpYWxTbG9wZSA9PT0gMC4wKSB7XG4gICAgICByZXR1cm4gZ3Vlc3NGb3JUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplKTtcbiAgICB9XG4gIH1cbiAgdmFyIF9wcmVjb21wdXRlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBwcmVjb21wdXRlKCkge1xuICAgIF9wcmVjb21wdXRlZCA9IHRydWU7XG4gICAgaWYgKG1YMSAhPT0gbVkxIHx8IG1YMiAhPT0gbVkyKSB7XG4gICAgICBjYWxjU2FtcGxlVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIHZhciBmID0gZnVuY3Rpb24gZihhWCkge1xuICAgIGlmICghX3ByZWNvbXB1dGVkKSB7XG4gICAgICBwcmVjb21wdXRlKCk7XG4gICAgfVxuICAgIGlmIChtWDEgPT09IG1ZMSAmJiBtWDIgPT09IG1ZMikge1xuICAgICAgcmV0dXJuIGFYO1xuICAgIH1cbiAgICBpZiAoYVggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoYVggPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gY2FsY0JlemllcihnZXRURm9yWChhWCksIG1ZMSwgbVkyKTtcbiAgfTtcbiAgZi5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbe1xuICAgICAgeDogbVgxLFxuICAgICAgeTogbVkxXG4gICAgfSwge1xuICAgICAgeDogbVgyLFxuICAgICAgeTogbVkyXG4gICAgfV07XG4gIH07XG4gIHZhciBzdHIgPSBcImdlbmVyYXRlQmV6aWVyKFwiICsgW21YMSwgbVkxLCBtWDIsIG1ZMl0gKyBcIilcIjtcbiAgZi50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICByZXR1cm4gZjtcbn1cblxuLyohIFJ1bmdlLUt1dHRhIHNwcmluZyBwaHlzaWNzIGZ1bmN0aW9uIGdlbmVyYXRvci4gQWRhcHRlZCBmcm9tIEZyYW1lci5qcywgY29weXJpZ2h0IEtvZW4gQm9rLiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xuLyogR2l2ZW4gYSB0ZW5zaW9uLCBmcmljdGlvbiwgYW5kIGR1cmF0aW9uLCBhIHNpbXVsYXRpb24gYXQgNjBGUFMgd2lsbCBmaXJzdCBydW4gd2l0aG91dCBhIGRlZmluZWQgZHVyYXRpb24gaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBmdWxsIHBhdGguIEEgc2Vjb25kIHBhc3NcbiAgIHRoZW4gYWRqdXN0cyB0aGUgdGltZSBkZWx0YSAtLSB1c2luZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBhY3R1YWwgdGltZSBhbmQgZHVyYXRpb24gLS0gdG8gY2FsY3VsYXRlIHRoZSBwYXRoIGZvciB0aGUgZHVyYXRpb24tY29uc3RyYWluZWQgYW5pbWF0aW9uLiAqL1xudmFyIGdlbmVyYXRlU3ByaW5nUks0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSkge1xuICAgIHJldHVybiAtc3RhdGUudGVuc2lvbiAqIHN0YXRlLnggLSBzdGF0ZS5mcmljdGlvbiAqIHN0YXRlLnY7XG4gIH1cbiAgZnVuY3Rpb24gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKGluaXRpYWxTdGF0ZSwgZHQsIGRlcml2YXRpdmUpIHtcbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICB4OiBpbml0aWFsU3RhdGUueCArIGRlcml2YXRpdmUuZHggKiBkdCxcbiAgICAgIHY6IGluaXRpYWxTdGF0ZS52ICsgZGVyaXZhdGl2ZS5kdiAqIGR0LFxuICAgICAgdGVuc2lvbjogaW5pdGlhbFN0YXRlLnRlbnNpb24sXG4gICAgICBmcmljdGlvbjogaW5pdGlhbFN0YXRlLmZyaWN0aW9uXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgZHg6IHN0YXRlLnYsXG4gICAgICBkdjogc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShzdGF0ZSwgZHQpIHtcbiAgICB2YXIgYSA9IHtcbiAgICAgICAgZHg6IHN0YXRlLnYsXG4gICAgICAgIGR2OiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSlcbiAgICAgIH0sXG4gICAgICBiID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYSksXG4gICAgICBjID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYiksXG4gICAgICBkID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCwgYyksXG4gICAgICBkeGR0ID0gMS4wIC8gNi4wICogKGEuZHggKyAyLjAgKiAoYi5keCArIGMuZHgpICsgZC5keCksXG4gICAgICBkdmR0ID0gMS4wIC8gNi4wICogKGEuZHYgKyAyLjAgKiAoYi5kdiArIGMuZHYpICsgZC5kdik7XG4gICAgc3RhdGUueCA9IHN0YXRlLnggKyBkeGR0ICogZHQ7XG4gICAgc3RhdGUudiA9IHN0YXRlLnYgKyBkdmR0ICogZHQ7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xuICAgIHZhciBpbml0U3RhdGUgPSB7XG4gICAgICAgIHg6IC0xLFxuICAgICAgICB2OiAwLFxuICAgICAgICB0ZW5zaW9uOiBudWxsLFxuICAgICAgICBmcmljdGlvbjogbnVsbFxuICAgICAgfSxcbiAgICAgIHBhdGggPSBbMF0sXG4gICAgICB0aW1lX2xhcHNlZCA9IDAsXG4gICAgICB0b2xlcmFuY2UgPSAxIC8gMTAwMDAsXG4gICAgICBEVCA9IDE2IC8gMTAwMCxcbiAgICAgIGhhdmVfZHVyYXRpb24sXG4gICAgICBkdCxcbiAgICAgIGxhc3Rfc3RhdGU7XG4gICAgdGVuc2lvbiA9IHBhcnNlRmxvYXQodGVuc2lvbikgfHwgNTAwO1xuICAgIGZyaWN0aW9uID0gcGFyc2VGbG9hdChmcmljdGlvbikgfHwgMjA7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiB8fCBudWxsO1xuICAgIGluaXRTdGF0ZS50ZW5zaW9uID0gdGVuc2lvbjtcbiAgICBpbml0U3RhdGUuZnJpY3Rpb24gPSBmcmljdGlvbjtcbiAgICBoYXZlX2R1cmF0aW9uID0gZHVyYXRpb24gIT09IG51bGw7XG5cbiAgICAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCB0aW1lIGl0IHRha2VzIGZvciB0aGlzIGFuaW1hdGlvbiB0byBjb21wbGV0ZSB3aXRoIHRoZSBwcm92aWRlZCBjb25kaXRpb25zLiAqL1xuICAgIGlmIChoYXZlX2R1cmF0aW9uKSB7XG4gICAgICAvKiBSdW4gdGhlIHNpbXVsYXRpb24gd2l0aG91dCBhIGR1cmF0aW9uLiAqL1xuICAgICAgdGltZV9sYXBzZWQgPSBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uKTtcbiAgICAgIC8qIENvbXB1dGUgdGhlIGFkanVzdGVkIHRpbWUgZGVsdGEuICovXG4gICAgICBkdCA9IHRpbWVfbGFwc2VkIC8gZHVyYXRpb24gKiBEVDtcbiAgICB9IGVsc2Uge1xuICAgICAgZHQgPSBEVDtcbiAgICB9XG4gICAgZm9yICg7Oykge1xuICAgICAgLyogTmV4dC9zdGVwIGZ1bmN0aW9uIC4qL1xuICAgICAgbGFzdF9zdGF0ZSA9IHNwcmluZ0ludGVncmF0ZVN0YXRlKGxhc3Rfc3RhdGUgfHwgaW5pdFN0YXRlLCBkdCk7XG4gICAgICAvKiBTdG9yZSB0aGUgcG9zaXRpb24uICovXG4gICAgICBwYXRoLnB1c2goMSArIGxhc3Rfc3RhdGUueCk7XG4gICAgICB0aW1lX2xhcHNlZCArPSAxNjtcbiAgICAgIC8qIElmIHRoZSBjaGFuZ2UgdGhyZXNob2xkIGlzIHJlYWNoZWQsIGJyZWFrLiAqL1xuICAgICAgaWYgKCEoTWF0aC5hYnMobGFzdF9zdGF0ZS54KSA+IHRvbGVyYW5jZSAmJiBNYXRoLmFicyhsYXN0X3N0YXRlLnYpID4gdG9sZXJhbmNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJZiBkdXJhdGlvbiBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIHRoZSBhY3R1YWwgdGltZSByZXF1aXJlZCBmb3IgY29tcGxldGluZyB0aGlzIGFuaW1hdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBjbG9zdXJlIHRoYXQgaG9sZHMgdGhlXG4gICAgICAgY29tcHV0ZWQgcGF0aCBhbmQgcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwZXJjZW50Q29tcGxldGUuICovXG4gICAgcmV0dXJuICFoYXZlX2R1cmF0aW9uID8gdGltZV9sYXBzZWQgOiBmdW5jdGlvbiAocGVyY2VudENvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gcGF0aFtwZXJjZW50Q29tcGxldGUgKiAocGF0aC5sZW5ndGggLSAxKSB8IDBdO1xuICAgIH07XG4gIH07XG59KCk7XG5cbnZhciBjdWJpY0JlemllciA9IGZ1bmN0aW9uIGN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKSB7XG4gIHZhciBiZXppZXIgPSBnZW5lcmF0ZUN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIGJlemllcihwZXJjZW50KTtcbiAgfTtcbn07XG52YXIgZWFzaW5ncyA9IHtcbiAgJ2xpbmVhcic6IGZ1bmN0aW9uIGxpbmVhcihzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHBlcmNlbnQ7XG4gIH0sXG4gIC8vIGRlZmF1bHQgZWFzaW5nc1xuICAnZWFzZSc6IGN1YmljQmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSksXG4gICdlYXNlLWluJzogY3ViaWNCZXppZXIoMC40MiwgMCwgMSwgMSksXG4gICdlYXNlLW91dCc6IGN1YmljQmV6aWVyKDAsIDAsIDAuNTgsIDEpLFxuICAnZWFzZS1pbi1vdXQnOiBjdWJpY0JlemllcigwLjQyLCAwLCAwLjU4LCAxKSxcbiAgLy8gc2luZVxuICAnZWFzZS1pbi1zaW5lJzogY3ViaWNCZXppZXIoMC40NywgMCwgMC43NDUsIDAuNzE1KSxcbiAgJ2Vhc2Utb3V0LXNpbmUnOiBjdWJpY0JlemllcigwLjM5LCAwLjU3NSwgMC41NjUsIDEpLFxuICAnZWFzZS1pbi1vdXQtc2luZSc6IGN1YmljQmV6aWVyKDAuNDQ1LCAwLjA1LCAwLjU1LCAwLjk1KSxcbiAgLy8gcXVhZFxuICAnZWFzZS1pbi1xdWFkJzogY3ViaWNCZXppZXIoMC41NSwgMC4wODUsIDAuNjgsIDAuNTMpLFxuICAnZWFzZS1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpLFxuICAnZWFzZS1pbi1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuNDU1LCAwLjAzLCAwLjUxNSwgMC45NTUpLFxuICAvLyBjdWJpY1xuICAnZWFzZS1pbi1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNTUsIDAuMDU1LCAwLjY3NSwgMC4xOSksXG4gICdlYXNlLW91dC1jdWJpYyc6IGN1YmljQmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksXG4gICdlYXNlLWluLW91dC1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNjQ1LCAwLjA0NSwgMC4zNTUsIDEpLFxuICAvLyBxdWFydFxuICAnZWFzZS1pbi1xdWFydCc6IGN1YmljQmV6aWVyKDAuODk1LCAwLjAzLCAwLjY4NSwgMC4yMiksXG4gICdlYXNlLW91dC1xdWFydCc6IGN1YmljQmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LXF1YXJ0JzogY3ViaWNCZXppZXIoMC43NywgMCwgMC4xNzUsIDEpLFxuICAvLyBxdWludFxuICAnZWFzZS1pbi1xdWludCc6IGN1YmljQmV6aWVyKDAuNzU1LCAwLjA1LCAwLjg1NSwgMC4wNiksXG4gICdlYXNlLW91dC1xdWludCc6IGN1YmljQmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLFxuICAnZWFzZS1pbi1vdXQtcXVpbnQnOiBjdWJpY0JlemllcigwLjg2LCAwLCAwLjA3LCAxKSxcbiAgLy8gZXhwb1xuICAnZWFzZS1pbi1leHBvJzogY3ViaWNCZXppZXIoMC45NSwgMC4wNSwgMC43OTUsIDAuMDM1KSxcbiAgJ2Vhc2Utb3V0LWV4cG8nOiBjdWJpY0JlemllcigwLjE5LCAxLCAwLjIyLCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LWV4cG8nOiBjdWJpY0JlemllcigxLCAwLCAwLCAxKSxcbiAgLy8gY2lyY1xuICAnZWFzZS1pbi1jaXJjJzogY3ViaWNCZXppZXIoMC42LCAwLjA0LCAwLjk4LCAwLjMzNSksXG4gICdlYXNlLW91dC1jaXJjJzogY3ViaWNCZXppZXIoMC4wNzUsIDAuODIsIDAuMTY1LCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LWNpcmMnOiBjdWJpY0JlemllcigwLjc4NSwgMC4xMzUsIDAuMTUsIDAuODYpLFxuICAvLyB1c2VyIHBhcmFtIGVhc2luZ3MuLi5cblxuICAnc3ByaW5nJzogZnVuY3Rpb24gc3ByaW5nKHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gY2FuJ3QgZ2V0IGEgc3ByaW5nIHcvIGR1cmF0aW9uIDBcbiAgICAgIHJldHVybiBlYXNpbmdzLmxpbmVhcjsgLy8gZHVyYXRpb24gMCA9PiBqdW1wIHRvIGVuZCBzbyBpbXBsIGRvZXNuJ3QgbWF0dGVyXG4gICAgfVxuXG4gICAgdmFyIHNwcmluZyA9IGdlbmVyYXRlU3ByaW5nUks0KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgICByZXR1cm4gc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogc3ByaW5nKHBlcmNlbnQpO1xuICAgIH07XG4gIH0sXG4gICdjdWJpYy1iZXppZXInOiBjdWJpY0JlemllclxufTtcblxuZnVuY3Rpb24gZ2V0RWFzZWRWYWx1ZSh0eXBlLCBzdGFydCwgZW5kLCBwZXJjZW50LCBlYXNpbmdGbikge1xuICBpZiAocGVyY2VudCA9PT0gMSkge1xuICAgIHJldHVybiBlbmQ7XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICByZXR1cm4gZW5kO1xuICB9XG4gIHZhciB2YWwgPSBlYXNpbmdGbihzdGFydCwgZW5kLCBwZXJjZW50KTtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgaWYgKHR5cGUucm91bmRWYWx1ZSB8fCB0eXBlLmNvbG9yKSB7XG4gICAgdmFsID0gTWF0aC5yb3VuZCh2YWwpO1xuICB9XG4gIGlmICh0eXBlLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsID0gTWF0aC5tYXgodmFsLCB0eXBlLm1pbik7XG4gIH1cbiAgaWYgKHR5cGUubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWwgPSBNYXRoLm1pbih2YWwsIHR5cGUubWF4KTtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUocHJvcCwgc3BlYykge1xuICBpZiAocHJvcC5wZlZhbHVlICE9IG51bGwgfHwgcHJvcC52YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHByb3AucGZWYWx1ZSAhPSBudWxsICYmIChzcGVjID09IG51bGwgfHwgc3BlYy50eXBlLnVuaXRzICE9PSAnJScpKSB7XG4gICAgICByZXR1cm4gcHJvcC5wZlZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvcC52YWx1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByb3A7XG4gIH1cbn1cbmZ1bmN0aW9uIGVhc2Uoc3RhcnRQcm9wLCBlbmRQcm9wLCBwZXJjZW50LCBlYXNpbmdGbiwgcHJvcFNwZWMpIHtcbiAgdmFyIHR5cGUgPSBwcm9wU3BlYyAhPSBudWxsID8gcHJvcFNwZWMudHlwZSA6IG51bGw7XG4gIGlmIChwZXJjZW50IDwgMCkge1xuICAgIHBlcmNlbnQgPSAwO1xuICB9IGVsc2UgaWYgKHBlcmNlbnQgPiAxKSB7XG4gICAgcGVyY2VudCA9IDE7XG4gIH1cbiAgdmFyIHN0YXJ0ID0gZ2V0VmFsdWUoc3RhcnRQcm9wLCBwcm9wU3BlYyk7XG4gIHZhciBlbmQgPSBnZXRWYWx1ZShlbmRQcm9wLCBwcm9wU3BlYyk7XG4gIGlmIChudW1iZXIkMShzdGFydCkgJiYgbnVtYmVyJDEoZW5kKSkge1xuICAgIHJldHVybiBnZXRFYXNlZFZhbHVlKHR5cGUsIHN0YXJ0LCBlbmQsIHBlcmNlbnQsIGVhc2luZ0ZuKTtcbiAgfSBlbHNlIGlmIChhcnJheShzdGFydCkgJiYgYXJyYXkoZW5kKSkge1xuICAgIHZhciBlYXNlZEFyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2kgPSBzdGFydFtpXTtcbiAgICAgIHZhciBlaSA9IGVuZFtpXTtcbiAgICAgIGlmIChzaSAhPSBudWxsICYmIGVpICE9IG51bGwpIHtcbiAgICAgICAgdmFyIHZhbCA9IGdldEVhc2VkVmFsdWUodHlwZSwgc2ksIGVpLCBwZXJjZW50LCBlYXNpbmdGbik7XG4gICAgICAgIGVhc2VkQXJyLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVhc2VkQXJyLnB1c2goZWkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWFzZWRBcnI7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RlcCQxKHNlbGYsIGFuaSwgbm93LCBpc0NvcmUpIHtcbiAgdmFyIGlzRWxlcyA9ICFpc0NvcmU7XG4gIHZhciBfcCA9IHNlbGYuX3ByaXZhdGU7XG4gIHZhciBhbmlfcCA9IGFuaS5fcHJpdmF0ZTtcbiAgdmFyIHBFYXNpbmcgPSBhbmlfcC5lYXNpbmc7XG4gIHZhciBzdGFydFRpbWUgPSBhbmlfcC5zdGFydFRpbWU7XG4gIHZhciBjeSA9IGlzQ29yZSA/IHNlbGYgOiBzZWxmLmN5KCk7XG4gIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG4gIGlmICghYW5pX3AuZWFzaW5nSW1wbCkge1xuICAgIGlmIChwRWFzaW5nID09IG51bGwpIHtcbiAgICAgIC8vIHVzZSBkZWZhdWx0XG4gICAgICBhbmlfcC5lYXNpbmdJbXBsID0gZWFzaW5nc1snbGluZWFyJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZW4gZGVmaW5lIHcvIG5hbWVcbiAgICAgIHZhciBlYXNpbmdWYWxzO1xuICAgICAgaWYgKHN0cmluZyhwRWFzaW5nKSkge1xuICAgICAgICB2YXIgZWFzaW5nUHJvcCA9IHN0eWxlLnBhcnNlKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIHBFYXNpbmcpO1xuICAgICAgICBlYXNpbmdWYWxzID0gZWFzaW5nUHJvcC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZW4gYXNzdW1lIHByZXBhcnNlZCBhcnJheVxuICAgICAgICBlYXNpbmdWYWxzID0gcEVhc2luZztcbiAgICAgIH1cbiAgICAgIHZhciBuYW1lLCBhcmdzO1xuICAgICAgaWYgKHN0cmluZyhlYXNpbmdWYWxzKSkge1xuICAgICAgICBuYW1lID0gZWFzaW5nVmFscztcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IGVhc2luZ1ZhbHNbMV07XG4gICAgICAgIGFyZ3MgPSBlYXNpbmdWYWxzLnNsaWNlKDIpLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICAgIHJldHVybiArbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGNyZWF0ZSB3aXRoIGFyZ3NcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzcHJpbmcnKSB7XG4gICAgICAgICAgYXJncy5wdXNoKGFuaV9wLmR1cmF0aW9uKTsgLy8gbmVlZCBkdXJhdGlvbiB0byBnZW5lcmF0ZSBzcHJpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGFuaV9wLmVhc2luZ0ltcGwgPSBlYXNpbmdzW25hbWVdLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3RhdGljIGltcGwgYnkgbmFtZVxuICAgICAgICBhbmlfcC5lYXNpbmdJbXBsID0gZWFzaW5nc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIGVhc2luZyA9IGFuaV9wLmVhc2luZ0ltcGw7XG4gIHZhciBwZXJjZW50O1xuICBpZiAoYW5pX3AuZHVyYXRpb24gPT09IDApIHtcbiAgICBwZXJjZW50ID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwZXJjZW50ID0gKG5vdyAtIHN0YXJ0VGltZSkgLyBhbmlfcC5kdXJhdGlvbjtcbiAgfVxuICBpZiAoYW5pX3AuYXBwbHlpbmcpIHtcbiAgICBwZXJjZW50ID0gYW5pX3AucHJvZ3Jlc3M7XG4gIH1cbiAgaWYgKHBlcmNlbnQgPCAwKSB7XG4gICAgcGVyY2VudCA9IDA7XG4gIH0gZWxzZSBpZiAocGVyY2VudCA+IDEpIHtcbiAgICBwZXJjZW50ID0gMTtcbiAgfVxuICBpZiAoYW5pX3AuZGVsYXkgPT0gbnVsbCkge1xuICAgIC8vIHRoZW4gdXBkYXRlXG5cbiAgICB2YXIgc3RhcnRQb3MgPSBhbmlfcC5zdGFydFBvc2l0aW9uO1xuICAgIHZhciBlbmRQb3MgPSBhbmlfcC5wb3NpdGlvbjtcbiAgICBpZiAoZW5kUG9zICYmIGlzRWxlcyAmJiAhc2VsZi5sb2NrZWQoKSkge1xuICAgICAgdmFyIG5ld1BvcyA9IHt9O1xuICAgICAgaWYgKHZhbGlkKHN0YXJ0UG9zLngsIGVuZFBvcy54KSkge1xuICAgICAgICBuZXdQb3MueCA9IGVhc2Uoc3RhcnRQb3MueCwgZW5kUG9zLngsIHBlcmNlbnQsIGVhc2luZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWQoc3RhcnRQb3MueSwgZW5kUG9zLnkpKSB7XG4gICAgICAgIG5ld1Bvcy55ID0gZWFzZShzdGFydFBvcy55LCBlbmRQb3MueSwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgIH1cbiAgICAgIHNlbGYucG9zaXRpb24obmV3UG9zKTtcbiAgICB9XG4gICAgdmFyIHN0YXJ0UGFuID0gYW5pX3Auc3RhcnRQYW47XG4gICAgdmFyIGVuZFBhbiA9IGFuaV9wLnBhbjtcbiAgICB2YXIgcGFuID0gX3AucGFuO1xuICAgIHZhciBhbmltYXRpbmdQYW4gPSBlbmRQYW4gIT0gbnVsbCAmJiBpc0NvcmU7XG4gICAgaWYgKGFuaW1hdGluZ1Bhbikge1xuICAgICAgaWYgKHZhbGlkKHN0YXJ0UGFuLngsIGVuZFBhbi54KSkge1xuICAgICAgICBwYW4ueCA9IGVhc2Uoc3RhcnRQYW4ueCwgZW5kUGFuLngsIHBlcmNlbnQsIGVhc2luZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWQoc3RhcnRQYW4ueSwgZW5kUGFuLnkpKSB7XG4gICAgICAgIHBhbi55ID0gZWFzZShzdGFydFBhbi55LCBlbmRQYW4ueSwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgncGFuJyk7XG4gICAgfVxuICAgIHZhciBzdGFydFpvb20gPSBhbmlfcC5zdGFydFpvb207XG4gICAgdmFyIGVuZFpvb20gPSBhbmlfcC56b29tO1xuICAgIHZhciBhbmltYXRpbmdab29tID0gZW5kWm9vbSAhPSBudWxsICYmIGlzQ29yZTtcbiAgICBpZiAoYW5pbWF0aW5nWm9vbSkge1xuICAgICAgaWYgKHZhbGlkKHN0YXJ0Wm9vbSwgZW5kWm9vbSkpIHtcbiAgICAgICAgX3Auem9vbSA9IGJvdW5kKF9wLm1pblpvb20sIGVhc2Uoc3RhcnRab29tLCBlbmRab29tLCBwZXJjZW50LCBlYXNpbmcpLCBfcC5tYXhab29tKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnem9vbScpO1xuICAgIH1cbiAgICBpZiAoYW5pbWF0aW5nUGFuIHx8IGFuaW1hdGluZ1pvb20pIHtcbiAgICAgIHNlbGYuZW1pdCgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgdmFyIHByb3BzID0gYW5pX3Auc3R5bGU7XG4gICAgaWYgKHByb3BzICYmIHByb3BzLmxlbmd0aCA+IDAgJiYgaXNFbGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07XG4gICAgICAgIHZhciBfbmFtZSA9IHByb3AubmFtZTtcbiAgICAgICAgdmFyIGVuZCA9IHByb3A7XG4gICAgICAgIHZhciBzdGFydCA9IGFuaV9wLnN0YXJ0U3R5bGVbX25hbWVdO1xuICAgICAgICB2YXIgcHJvcFNwZWMgPSBzdHlsZS5wcm9wZXJ0aWVzW3N0YXJ0Lm5hbWVdO1xuICAgICAgICB2YXIgZWFzZWRWYWwgPSBlYXNlKHN0YXJ0LCBlbmQsIHBlcmNlbnQsIGVhc2luZywgcHJvcFNwZWMpO1xuICAgICAgICBzdHlsZS5vdmVycmlkZUJ5cGFzcyhzZWxmLCBfbmFtZSwgZWFzZWRWYWwpO1xuICAgICAgfSAvLyBmb3IgcHJvcHNcblxuICAgICAgc2VsZi5lbWl0KCdzdHlsZScpO1xuICAgIH0gLy8gaWZcbiAgfVxuXG4gIGFuaV9wLnByb2dyZXNzID0gcGVyY2VudDtcbiAgcmV0dXJuIHBlcmNlbnQ7XG59XG5mdW5jdGlvbiB2YWxpZChzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PSBudWxsIHx8IGVuZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChudW1iZXIkMShzdGFydCkgJiYgbnVtYmVyJDEoZW5kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRBbmltYXRpb24oc2VsZiwgYW5pLCBub3csIGlzQ29yZSkge1xuICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gIGFuaV9wLnN0YXJ0ZWQgPSB0cnVlO1xuICBhbmlfcC5zdGFydFRpbWUgPSBub3cgLSBhbmlfcC5wcm9ncmVzcyAqIGFuaV9wLmR1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBzdGVwQWxsKG5vdywgY3kpIHtcbiAgdmFyIGVsZXMgPSBjeS5fcHJpdmF0ZS5hbmlFbGVzO1xuICB2YXIgZG9uZUVsZXMgPSBbXTtcbiAgZnVuY3Rpb24gc3RlcE9uZShlbGUsIGlzQ29yZSkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgY3VycmVudCA9IF9wLmFuaW1hdGlvbi5jdXJyZW50O1xuICAgIHZhciBxdWV1ZSA9IF9wLmFuaW1hdGlvbi5xdWV1ZTtcbiAgICB2YXIgcmFuQW5pcyA9IGZhbHNlO1xuXG4gICAgLy8gaWYgbm90aGluZyBjdXJyZW50bHkgYW5pbWF0aW5nLCBnZXQgc29tZXRoaW5nIGZyb20gdGhlIHF1ZXVlXG4gICAgaWYgKGN1cnJlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgbmV4dCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsYmFja3MgPSBmdW5jdGlvbiBjYWxsYmFja3MoX2NhbGxiYWNrcykge1xuICAgICAgZm9yICh2YXIgaiA9IF9jYWxsYmFja3MubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGNiID0gX2NhbGxiYWNrc1tqXTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgICAgIF9jYWxsYmFja3Muc3BsaWNlKDAsIF9jYWxsYmFja3MubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgLy8gc3RlcCBhbmQgcmVtb3ZlIGlmIGRvbmVcbiAgICBmb3IgKHZhciBpID0gY3VycmVudC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGFuaSA9IGN1cnJlbnRbaV07XG4gICAgICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gICAgICBpZiAoYW5pX3Auc3RvcHBlZCkge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpLCAxKTtcbiAgICAgICAgYW5pX3AuaG9va2VkID0gZmFsc2U7XG4gICAgICAgIGFuaV9wLnBsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgYW5pX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBjYWxsYmFja3MoYW5pX3AuZnJhbWVzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWFuaV9wLnBsYXlpbmcgJiYgIWFuaV9wLmFwcGx5aW5nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbiBhcHBseSgpIHdoaWxlIHBsYXlpbmcgc2hvdWxkbid0IGRvIGFueXRoaW5nXG4gICAgICBpZiAoYW5pX3AucGxheWluZyAmJiBhbmlfcC5hcHBseWluZykge1xuICAgICAgICBhbmlfcC5hcHBseWluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFhbmlfcC5zdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0QW5pbWF0aW9uKGVsZSwgYW5pLCBub3cpO1xuICAgICAgfVxuICAgICAgc3RlcCQxKGVsZSwgYW5pLCBub3csIGlzQ29yZSk7XG4gICAgICBpZiAoYW5pX3AuYXBwbHlpbmcpIHtcbiAgICAgICAgYW5pX3AuYXBwbHlpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcyhhbmlfcC5mcmFtZXMpO1xuICAgICAgaWYgKGFuaV9wLnN0ZXAgIT0gbnVsbCkge1xuICAgICAgICBhbmlfcC5zdGVwKG5vdyk7XG4gICAgICB9XG4gICAgICBpZiAoYW5pLmNvbXBsZXRlZCgpKSB7XG4gICAgICAgIGN1cnJlbnQuc3BsaWNlKGksIDEpO1xuICAgICAgICBhbmlfcC5ob29rZWQgPSBmYWxzZTtcbiAgICAgICAgYW5pX3AucGxheWluZyA9IGZhbHNlO1xuICAgICAgICBhbmlfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIGNhbGxiYWNrcyhhbmlfcC5jb21wbGV0ZXMpO1xuICAgICAgfVxuICAgICAgcmFuQW5pcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaXNDb3JlICYmIGN1cnJlbnQubGVuZ3RoID09PSAwICYmIHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZG9uZUVsZXMucHVzaChlbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuQW5pcztcbiAgfSAvLyBzdGVwRWxlbWVudFxuXG4gIC8vIGhhbmRsZSBhbGwgZWxlc1xuICB2YXIgcmFuRWxlQW5pID0gZmFsc2U7XG4gIGZvciAodmFyIGUgPSAwOyBlIDwgZWxlcy5sZW5ndGg7IGUrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2VdO1xuICAgIHZhciBoYW5kbGVkVGhpc0VsZSA9IHN0ZXBPbmUoZWxlKTtcbiAgICByYW5FbGVBbmkgPSByYW5FbGVBbmkgfHwgaGFuZGxlZFRoaXNFbGU7XG4gIH0gLy8gZWFjaCBlbGVtZW50XG5cbiAgdmFyIHJhbkNvcmVBbmkgPSBzdGVwT25lKGN5LCB0cnVlKTtcblxuICAvLyBub3RpZnkgcmVuZGVyZXJcbiAgaWYgKHJhbkVsZUFuaSB8fCByYW5Db3JlQW5pKSB7XG4gICAgaWYgKGVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY3kubm90aWZ5KCdkcmF3JywgZWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN5Lm5vdGlmeSgnZHJhdycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBlbGVtZW50cyBmcm9tIGxpc3Qgb2YgY3VycmVudGx5IGFuaW1hdGluZyBpZiBpdHMgcXVldWVzIGFyZSBlbXB0eVxuICBlbGVzLnVubWVyZ2UoZG9uZUVsZXMpO1xuICBjeS5lbWl0KCdzdGVwJyk7XG59IC8vIHN0ZXBBbGxcblxudmFyIGNvcmVmbiQ4ID0ge1xuICAvLyBwdWxsIGluIGFuaW1hdGlvbiBmdW5jdGlvbnNcbiAgYW5pbWF0ZTogZGVmaW5lLmFuaW1hdGUoKSxcbiAgYW5pbWF0aW9uOiBkZWZpbmUuYW5pbWF0aW9uKCksXG4gIGFuaW1hdGVkOiBkZWZpbmUuYW5pbWF0ZWQoKSxcbiAgY2xlYXJRdWV1ZTogZGVmaW5lLmNsZWFyUXVldWUoKSxcbiAgZGVsYXk6IGRlZmluZS5kZWxheSgpLFxuICBkZWxheUFuaW1hdGlvbjogZGVmaW5lLmRlbGF5QW5pbWF0aW9uKCksXG4gIHN0b3A6IGRlZmluZS5zdG9wKCksXG4gIGFkZFRvQW5pbWF0aW9uUG9vbDogZnVuY3Rpb24gYWRkVG9BbmltYXRpb25Qb29sKGVsZXMpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHNhdmUgY3ljbGVzIHdoZW4gbm8gc3R5bGUgdXNlZFxuXG4gICAgY3kuX3ByaXZhdGUuYW5pRWxlcy5tZXJnZShlbGVzKTtcbiAgfSxcbiAgc3RvcEFuaW1hdGlvbkxvb3A6IGZ1bmN0aW9uIHN0b3BBbmltYXRpb25Mb29wKCkge1xuICAgIHRoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcgPSBmYWxzZTtcbiAgfSxcbiAgc3RhcnRBbmltYXRpb25Mb29wOiBmdW5jdGlvbiBzdGFydEFuaW1hdGlvbkxvb3AoKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICBjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyA9IHRydWU7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F2ZSBjeWNsZXMgd2hlbiBubyBzdHlsZSB1c2VkXG5cbiAgICAvLyBOQiB0aGUgYW5pbWF0aW9uIGxvb3Agd2lsbCBleGVjIGluIGhlYWRsZXNzIGVudmlyb25tZW50cyBpZiBzdHlsZSBlbmFibGVkXG4gICAgLy8gYW5kIGV4cGxpY2l0IGN5LmRlc3Ryb3koKSBpcyBuZWNlc3NhcnkgdG8gc3RvcCB0aGUgbG9vcFxuXG4gICAgZnVuY3Rpb24gaGVhZGxlc3NTdGVwKCkge1xuICAgICAgaWYgKCFjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uU3RlcChub3cpIHtcbiAgICAgICAgc3RlcEFsbChub3csIGN5KTtcbiAgICAgICAgaGVhZGxlc3NTdGVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHJlbmRlcmVyID0gY3kucmVuZGVyZXIoKTtcbiAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuYmVmb3JlUmVuZGVyKSB7XG4gICAgICAvLyBsZXQgdGhlIHJlbmRlcmVyIHNjaGVkdWxlIGFuaW1hdGlvbnNcbiAgICAgIHJlbmRlcmVyLmJlZm9yZVJlbmRlcihmdW5jdGlvbiByZW5kZXJlckFuaW1hdGlvblN0ZXAod2lsbERyYXcsIG5vdykge1xuICAgICAgICBzdGVwQWxsKG5vdywgY3kpO1xuICAgICAgfSwgcmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbWFuYWdlIHRoZSBhbmltYXRpb24gbG9vcCBvdXJzZWx2ZXNcbiAgICAgIGhlYWRsZXNzU3RlcCgpOyAvLyBmaXJzdCBjYWxsXG4gICAgfVxuICB9XG59O1xuXG52YXIgZW1pdHRlck9wdGlvbnMgPSB7XG4gIHF1YWxpZmllckNvbXBhcmU6IGZ1bmN0aW9uIHF1YWxpZmllckNvbXBhcmUoc2VsZWN0b3IxLCBzZWxlY3RvcjIpIHtcbiAgICBpZiAoc2VsZWN0b3IxID09IG51bGwgfHwgc2VsZWN0b3IyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBzZWxlY3RvcjEgPT0gbnVsbCAmJiBzZWxlY3RvcjIgPT0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yMS5zYW1lVGV4dChzZWxlY3RvcjIpO1xuICAgIH1cbiAgfSxcbiAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoY3ksIGxpc3RlbmVyLCBldmVudE9iaikge1xuICAgIHZhciBzZWxlY3RvciA9IGxpc3RlbmVyLnF1YWxpZmllcjtcbiAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGN5ICE9PSBldmVudE9iai50YXJnZXQgJiYgZWxlbWVudChldmVudE9iai50YXJnZXQpICYmIHNlbGVjdG9yLm1hdGNoZXMoZXZlbnRPYmoudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhjeSwgZXZ0KSB7XG4gICAgZXZ0LmN5ID0gY3k7XG4gICAgZXZ0LnRhcmdldCA9IGN5O1xuICB9LFxuICBjYWxsYmFja0NvbnRleHQ6IGZ1bmN0aW9uIGNhbGxiYWNrQ29udGV4dChjeSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnF1YWxpZmllciAhPSBudWxsID8gZXZlbnRPYmoudGFyZ2V0IDogY3k7XG4gIH1cbn07XG52YXIgYXJnU2VsZWN0b3IgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgaWYgKHN0cmluZyhhcmcpKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvcihhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcmc7XG4gIH1cbn07XG52YXIgZWxlc2ZuID0ge1xuICBjcmVhdGVFbWl0dGVyOiBmdW5jdGlvbiBjcmVhdGVFbWl0dGVyKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5lbWl0dGVyKSB7XG4gICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMsIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZW1pdHRlcjogZnVuY3Rpb24gZW1pdHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyO1xuICB9LFxuICBvbjogZnVuY3Rpb24gb24oZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5vbihldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycygpIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5vbmUoZXZlbnRzLCBhcmdTZWxlY3RvcihzZWxlY3RvciksIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25jZTogZnVuY3Rpb24gb25jZShldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZW1pdHRlcigpLm9uZShldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbWl0QW5kTm90aWZ5OiBmdW5jdGlvbiBlbWl0QW5kTm90aWZ5KGV2ZW50LCBlbGVzKSB7XG4gICAgdGhpcy5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLm5vdGlmeShldmVudCwgZWxlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5kZWZpbmUuZXZlbnRBbGlhc2VzT24oZWxlc2ZuKTtcblxudmFyIGNvcmVmbiQ3ID0ge1xuICBwbmc6IGZ1bmN0aW9uIHBuZyhvcHRpb25zKSB7XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gcmVuZGVyZXIucG5nKG9wdGlvbnMpO1xuICB9LFxuICBqcGc6IGZ1bmN0aW9uIGpwZyhvcHRpb25zKSB7XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmJnID0gb3B0aW9ucy5iZyB8fCAnI2ZmZic7XG4gICAgcmV0dXJuIHJlbmRlcmVyLmpwZyhvcHRpb25zKTtcbiAgfVxufTtcbmNvcmVmbiQ3LmpwZWcgPSBjb3JlZm4kNy5qcGc7XG5cbnZhciBjb3JlZm4kNiA9IHtcbiAgbGF5b3V0OiBmdW5jdGlvbiBsYXlvdXQob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0xheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PSBudWxsKSB7XG4gICAgICBlcnJvcignQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB2YXIgTGF5b3V0ID0gY3kuZXh0ZW5zaW9uKCdsYXlvdXQnLCBuYW1lKTtcbiAgICBpZiAoTGF5b3V0ID09IG51bGwpIHtcbiAgICAgIGVycm9yKCdObyBzdWNoIGxheW91dCBgJyArIG5hbWUgKyAnYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlbGVzO1xuICAgIGlmIChzdHJpbmcob3B0aW9ucy5lbGVzKSkge1xuICAgICAgZWxlcyA9IGN5LiQob3B0aW9ucy5lbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlcyA9IG9wdGlvbnMuZWxlcyAhPSBudWxsID8gb3B0aW9ucy5lbGVzIDogY3kuJCgpO1xuICAgIH1cbiAgICB2YXIgbGF5b3V0ID0gbmV3IExheW91dChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGN5OiBjeSxcbiAgICAgIGVsZXM6IGVsZXNcbiAgICB9KSk7XG4gICAgcmV0dXJuIGxheW91dDtcbiAgfVxufTtcbmNvcmVmbiQ2LmNyZWF0ZUxheW91dCA9IGNvcmVmbiQ2Lm1ha2VMYXlvdXQgPSBjb3JlZm4kNi5sYXlvdXQ7XG5cbnZhciBjb3JlZm4kNSA9IHtcbiAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoZXZlbnROYW1lLCBldmVudEVsZXMpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmICh0aGlzLmJhdGNoaW5nKCkpIHtcbiAgICAgIF9wLmJhdGNoTm90aWZpY2F0aW9ucyA9IF9wLmJhdGNoTm90aWZpY2F0aW9ucyB8fCB7fTtcbiAgICAgIHZhciBlbGVzID0gX3AuYmF0Y2hOb3RpZmljYXRpb25zW2V2ZW50TmFtZV0gPSBfcC5iYXRjaE5vdGlmaWNhdGlvbnNbZXZlbnROYW1lXSB8fCB0aGlzLmNvbGxlY3Rpb24oKTtcbiAgICAgIGlmIChldmVudEVsZXMgIT0gbnVsbCkge1xuICAgICAgICBlbGVzLm1lcmdlKGV2ZW50RWxlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm47IC8vIG5vdGlmaWNhdGlvbnMgYXJlIGRpc2FibGVkIGR1cmluZyBiYXRjaGluZ1xuICAgIH1cblxuICAgIGlmICghX3Aubm90aWZpY2F0aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGV4aXQgb24gZGlzYWJsZWRcblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIoKTtcblxuICAgIC8vIGV4aXQgaWYgZGVzdHJveSgpIGNhbGxlZCBvbiBjb3JlIG9yIHJlbmRlcmVyIGluIGJldHdlZW4gZnJhbWVzICMxNDk5ICMxNTI4XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKCkgfHwgIXJlbmRlcmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlbmRlcmVyLm5vdGlmeShldmVudE5hbWUsIGV2ZW50RWxlcyk7XG4gIH0sXG4gIG5vdGlmaWNhdGlvbnM6IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbnMoYm9vbCkge1xuICAgIHZhciBwID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoYm9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcC5ub3RpZmljYXRpb25zRW5hYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcC5ub3RpZmljYXRpb25zRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBub05vdGlmaWNhdGlvbnM6IGZ1bmN0aW9uIG5vTm90aWZpY2F0aW9ucyhjYWxsYmFjaykge1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyhmYWxzZSk7XG4gICAgY2FsbGJhY2soKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnModHJ1ZSk7XG4gIH0sXG4gIGJhdGNoaW5nOiBmdW5jdGlvbiBiYXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5iYXRjaENvdW50ID4gMDtcbiAgfSxcbiAgc3RhcnRCYXRjaDogZnVuY3Rpb24gc3RhcnRCYXRjaCgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChfcC5iYXRjaENvdW50ID09IG51bGwpIHtcbiAgICAgIF9wLmJhdGNoQ291bnQgPSAwO1xuICAgIH1cbiAgICBpZiAoX3AuYmF0Y2hDb3VudCA9PT0gMCkge1xuICAgICAgX3AuYmF0Y2hTdHlsZUVsZXMgPSB0aGlzLmNvbGxlY3Rpb24oKTtcbiAgICAgIF9wLmJhdGNoTm90aWZpY2F0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBfcC5iYXRjaENvdW50Kys7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGVuZEJhdGNoOiBmdW5jdGlvbiBlbmRCYXRjaCgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX3AuYmF0Y2hDb3VudC0tO1xuICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICAvLyB1cGRhdGUgc3R5bGUgZm9yIGRpcnR5IGVsZXNcbiAgICAgIF9wLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7XG4gICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyKCk7XG5cbiAgICAgIC8vIG5vdGlmeSB0aGUgcmVuZGVyZXIgb2YgcXVldWVkIGVsZXMgYW5kIGV2ZW50IHR5cGVzXG4gICAgICBPYmplY3Qua2V5cyhfcC5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICB2YXIgZWxlcyA9IF9wLmJhdGNoTm90aWZpY2F0aW9uc1tldmVudE5hbWVdO1xuICAgICAgICBpZiAoZWxlcy5lbXB0eSgpKSB7XG4gICAgICAgICAgcmVuZGVyZXIubm90aWZ5KGV2ZW50TmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVuZGVyZXIubm90aWZ5KGV2ZW50TmFtZSwgZWxlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYmF0Y2g6IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5zdGFydEJhdGNoKCk7XG4gICAgY2FsbGJhY2soKTtcbiAgICB0aGlzLmVuZEJhdGNoKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBiYXRjaERhdGE6IGZ1bmN0aW9uIGJhdGNoRGF0YShtYXApIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIHJldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpZHMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGlkID0gaWRzW2ldO1xuICAgICAgICB2YXIgZGF0YSA9IG1hcFtpZF07XG4gICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGVsZS5kYXRhKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgcmVuZGVyZXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICBoaWRlRWRnZXNPblZpZXdwb3J0OiBmYWxzZSxcbiAgdGV4dHVyZU9uVmlld3BvcnQ6IGZhbHNlLFxuICBtb3Rpb25CbHVyOiBmYWxzZSxcbiAgbW90aW9uQmx1ck9wYWNpdHk6IDAuMDUsXG4gIHBpeGVsUmF0aW86IHVuZGVmaW5lZCxcbiAgZGVza3RvcFRhcFRocmVzaG9sZDogNCxcbiAgdG91Y2hUYXBUaHJlc2hvbGQ6IDgsXG4gIHdoZWVsU2Vuc2l0aXZpdHk6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgc2hvd0ZwczogZmFsc2Vcbn0pO1xudmFyIGNvcmVmbiQ0ID0ge1xuICByZW5kZXJUbzogZnVuY3Rpb24gcmVuZGVyVG8oY29udGV4dCwgem9vbSwgcGFuLCBweFJhdGlvKSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wcml2YXRlLnJlbmRlcmVyO1xuICAgIHIucmVuZGVyVG8oY29udGV4dCwgem9vbSwgcGFuLCBweFJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVuZGVyZXI6IGZ1bmN0aW9uIHJlbmRlcmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyO1xuICB9LFxuICBmb3JjZVJlbmRlcjogZnVuY3Rpb24gZm9yY2VSZW5kZXIoKSB7XG4gICAgdGhpcy5ub3RpZnkoJ2RyYXcnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoKSB7XG4gICAgdGhpcy5pbnZhbGlkYXRlU2l6ZSgpO1xuICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgncmVzaXplJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGluaXRSZW5kZXJlcjogZnVuY3Rpb24gaW5pdFJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIHZhciBSZW5kZXJlclByb3RvID0gY3kuZXh0ZW5zaW9uKCdyZW5kZXJlcicsIG9wdGlvbnMubmFtZSk7XG4gICAgaWYgKFJlbmRlcmVyUHJvdG8gPT0gbnVsbCkge1xuICAgICAgZXJyb3IoXCJDYW4gbm90IGluaXRpYWxpc2U6IE5vIHN1Y2ggcmVuZGVyZXIgYFwiLmNvbmNhdChvcHRpb25zLm5hbWUsIFwiYCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD9cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdhcm4oXCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS5cIik7XG4gICAgfVxuICAgIHZhciByT3B0cyA9IHJlbmRlcmVyRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgck9wdHMuY3kgPSBjeTtcbiAgICBjeS5fcHJpdmF0ZS5yZW5kZXJlciA9IG5ldyBSZW5kZXJlclByb3RvKHJPcHRzKTtcbiAgICB0aGlzLm5vdGlmeSgnaW5pdCcpO1xuICB9LFxuICBkZXN0cm95UmVuZGVyZXI6IGZ1bmN0aW9uIGRlc3Ryb3lSZW5kZXJlcigpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIGN5Lm5vdGlmeSgnZGVzdHJveScpOyAvLyBkZXN0cm95IHRoZSByZW5kZXJlclxuXG4gICAgdmFyIGRvbUVsZSA9IGN5LmNvbnRhaW5lcigpO1xuICAgIGlmIChkb21FbGUpIHtcbiAgICAgIGRvbUVsZS5fY3lyZWcgPSBudWxsO1xuICAgICAgd2hpbGUgKGRvbUVsZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZG9tRWxlLnJlbW92ZUNoaWxkKGRvbUVsZS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3kuX3ByaXZhdGUucmVuZGVyZXIgPSBudWxsOyAvLyB0byBiZSBleHRyYSBzYWZlLCByZW1vdmUgdGhlIHJlZlxuICAgIGN5Lm11dGFibGVFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgX3AucnNjcmF0Y2ggPSB7fTtcbiAgICAgIF9wLnJzdHlsZSA9IHt9O1xuICAgICAgX3AuYW5pbWF0aW9uLmN1cnJlbnQgPSBbXTtcbiAgICAgIF9wLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgIH0pO1xuICB9LFxuICBvblJlbmRlcjogZnVuY3Rpb24gb25SZW5kZXIoZm4pIHtcbiAgICByZXR1cm4gdGhpcy5vbigncmVuZGVyJywgZm4pO1xuICB9LFxuICBvZmZSZW5kZXI6IGZ1bmN0aW9uIG9mZlJlbmRlcihmbikge1xuICAgIHJldHVybiB0aGlzLm9mZigncmVuZGVyJywgZm4pO1xuICB9XG59O1xuY29yZWZuJDQuaW52YWxpZGF0ZURpbWVuc2lvbnMgPSBjb3JlZm4kNC5yZXNpemU7XG5cbnZhciBjb3JlZm4kMyA9IHtcbiAgLy8gZ2V0IGEgY29sbGVjdGlvblxuICAvLyAtIGVtcHR5IGNvbGxlY3Rpb24gb24gbm8gYXJnc1xuICAvLyAtIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgaW4gdGhlIGdyYXBoIG9uIHNlbGVjdG9yIGFyZ1xuICAvLyAtIGd1YXJhbnRlZSBhIHJldHVybmVkIGNvbGxlY3Rpb24gd2hlbiBlbGVtZW50cyBvciBjb2xsZWN0aW9uIHNwZWNpZmllZFxuICBjb2xsZWN0aW9uOiBmdW5jdGlvbiBjb2xsZWN0aW9uKGVsZXMsIG9wdHMpIHtcbiAgICBpZiAoc3RyaW5nKGVsZXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy4kKGVsZXMpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihlbGVzKSkge1xuICAgICAgcmV0dXJuIGVsZXMuY29sbGVjdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoYXJyYXkoZWxlcykpIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcywgZWxlcywgb3B0cy51bmlxdWUsIG9wdHMucmVtb3ZlZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzKTtcbiAgfSxcbiAgbm9kZXM6IGZ1bmN0aW9uIG5vZGVzKHNlbGVjdG9yKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy4kKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCk7XG4gICAgfSk7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9LFxuICBlZGdlczogZnVuY3Rpb24gZWRnZXMoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWRnZXMgPSB0aGlzLiQoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0VkZ2UoKTtcbiAgICB9KTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBlZGdlcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZXM7XG4gIH0sXG4gIC8vIHNlYXJjaCB0aGUgZ3JhcGggbGlrZSBqUXVlcnlcbiAgJDogZnVuY3Rpb24gJChzZWxlY3Rvcikge1xuICAgIHZhciBlbGVzID0gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cztcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBlbGVzLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVzLnNwYXduU2VsZigpO1xuICAgIH1cbiAgfSxcbiAgbXV0YWJsZUVsZW1lbnRzOiBmdW5jdGlvbiBtdXRhYmxlRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHM7XG4gIH1cbn07XG5cbi8vIGFsaWFzZXNcbmNvcmVmbiQzLmVsZW1lbnRzID0gY29yZWZuJDMuZmlsdGVyID0gY29yZWZuJDMuJDtcblxudmFyIHN0eWZuJDggPSB7fTtcblxuLy8ga2V5cyBmb3Igc3R5bGUgYmxvY2tzLCBlLmcuIHR0ZmZ0dFxudmFyIFRSVUUgPSAndCc7XG52YXIgRkFMU0UgPSAnZic7XG5cbi8vIChwb3RlbnRpYWxseSBleHBlbnNpdmUgY2FsY3VsYXRpb24pXG4vLyBhcHBseSB0aGUgc3R5bGUgdG8gdGhlIGVsZW1lbnQgYmFzZWQgb25cbi8vIC0gaXRzIGJ5cGFzc1xuLy8gLSB3aGF0IHNlbGVjdG9ycyBtYXRjaCBpdFxuc3R5Zm4kOC5hcHBseSA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIF9wID0gc2VsZi5fcHJpdmF0ZTtcbiAgdmFyIGN5ID0gX3AuY3k7XG4gIHZhciB1cGRhdGVkRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgZm9yICh2YXIgaWUgPSAwOyBpZSA8IGVsZXMubGVuZ3RoOyBpZSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbaWVdO1xuICAgIHZhciBjeHRNZXRhID0gc2VsZi5nZXRDb250ZXh0TWV0YShlbGUpO1xuICAgIGlmIChjeHRNZXRhLmVtcHR5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGN4dFN0eWxlID0gc2VsZi5nZXRDb250ZXh0U3R5bGUoY3h0TWV0YSk7XG4gICAgdmFyIGFwcCA9IHNlbGYuYXBwbHlDb250ZXh0U3R5bGUoY3h0TWV0YSwgY3h0U3R5bGUsIGVsZSk7XG4gICAgaWYgKGVsZS5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlKSB7XG4gICAgICBzZWxmLnVwZGF0ZVRyYW5zaXRpb25zKGVsZSwgYXBwLmRpZmZQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZS5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGhpbnRzRGlmZiA9IHNlbGYudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIGlmIChoaW50c0RpZmYpIHtcbiAgICAgIHVwZGF0ZWRFbGVzLnB1c2goZWxlKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVsZW1lbnRzXG5cbiAgcmV0dXJuIHVwZGF0ZWRFbGVzO1xufTtcbnN0eWZuJDguZ2V0UHJvcGVydGllc0RpZmYgPSBmdW5jdGlvbiAob2xkQ3h0S2V5LCBuZXdDeHRLZXkpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY2FjaGUgPSBzZWxmLl9wcml2YXRlLnByb3BEaWZmcyA9IHNlbGYuX3ByaXZhdGUucHJvcERpZmZzIHx8IHt9O1xuICB2YXIgZHVhbEN4dEtleSA9IG9sZEN4dEtleSArICctJyArIG5ld0N4dEtleTtcbiAgdmFyIGNhY2hlZFZhbCA9IGNhY2hlW2R1YWxDeHRLZXldO1xuICBpZiAoY2FjaGVkVmFsKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZhbDtcbiAgfVxuICB2YXIgZGlmZlByb3BzID0gW107XG4gIHZhciBhZGRlZFByb3AgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN4dCA9IHNlbGZbaV07XG4gICAgdmFyIG9sZEhhc0N4dCA9IG9sZEN4dEtleVtpXSA9PT0gVFJVRTtcbiAgICB2YXIgbmV3SGFzQ3h0ID0gbmV3Q3h0S2V5W2ldID09PSBUUlVFO1xuICAgIHZhciBjeHRIYXNEaWZmZWQgPSBvbGRIYXNDeHQgIT09IG5ld0hhc0N4dDtcbiAgICB2YXIgY3h0SGFzTWFwcGVkUHJvcHMgPSBjeHQubWFwcGVkUHJvcGVydGllcy5sZW5ndGggPiAwO1xuICAgIGlmIChjeHRIYXNEaWZmZWQgfHwgbmV3SGFzQ3h0ICYmIGN4dEhhc01hcHBlZFByb3BzKSB7XG4gICAgICB2YXIgcHJvcHMgPSB2b2lkIDA7XG4gICAgICBpZiAoY3h0SGFzRGlmZmVkICYmIGN4dEhhc01hcHBlZFByb3BzKSB7XG4gICAgICAgIHByb3BzID0gY3h0LnByb3BlcnRpZXM7IC8vIHN1ZmZpY2VzIGIvYyBtYXBwZWRQcm9wZXJ0aWVzIGlzIGEgc3Vic2V0IG9mIHByb3BlcnRpZXNcbiAgICAgIH0gZWxzZSBpZiAoY3h0SGFzRGlmZmVkKSB7XG4gICAgICAgIHByb3BzID0gY3h0LnByb3BlcnRpZXM7IC8vIG5lZWQgdG8gY2hlY2sgdGhlbSBhbGxcbiAgICAgIH0gZWxzZSBpZiAoY3h0SGFzTWFwcGVkUHJvcHMpIHtcbiAgICAgICAgcHJvcHMgPSBjeHQubWFwcGVkUHJvcGVydGllczsgLy8gb25seSBuZWVkIHRvIGNoZWNrIG1hcHBlZFxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICAgIHZhciBuYW1lID0gcHJvcC5uYW1lO1xuXG4gICAgICAgIC8vIGlmIGEgbGF0ZXIgY29udGV4dCBvdmVycmlkZXMgdGhpcyBwcm9wZXJ0eSwgdGhlbiB0aGUgZmFjdCB0aGF0IHRoaXMgY29udGV4dCBoYXMgc3dpdGNoZWQvZGlmZmVkIGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgIC8vIChzZW1pIGV4cGVuc2l2ZSBjaGVjayBzaW5jZSBpdCBtYWtlcyB0aGlzIGZ1bmN0aW9uIE8obl4yKSBvbiBjb250ZXh0IGxlbmd0aCwgYnV0IHdvcnRoIGl0IHNpbmNlIG92ZXJhbGwgcmVzdWx0XG4gICAgICAgIC8vIGlzIGNhY2hlZClcbiAgICAgICAgdmFyIGxhdGVyQ3h0T3ZlcnJpZGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGsgPSBpICsgMTsgayA8IHNlbGYubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB2YXIgbGF0ZXJDeHQgPSBzZWxmW2tdO1xuICAgICAgICAgIHZhciBoYXNMYXRlckN4dCA9IG5ld0N4dEtleVtrXSA9PT0gVFJVRTtcbiAgICAgICAgICBpZiAoIWhhc0xhdGVyQ3h0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGNhbid0IG92ZXJyaWRlIHVubGVzcyB0aGUgY29udGV4dCBpcyBhY3RpdmVcblxuICAgICAgICAgIGxhdGVyQ3h0T3ZlcnJpZGVzID0gbGF0ZXJDeHQucHJvcGVydGllc1twcm9wLm5hbWVdICE9IG51bGw7XG4gICAgICAgICAgaWYgKGxhdGVyQ3h0T3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIGV4aXQgZWFybHkgYXMgbG9uZyBhcyBvbmUgbGF0ZXIgY29udGV4dCBvdmVycmlkZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWRkZWRQcm9wW25hbWVdICYmICFsYXRlckN4dE92ZXJyaWRlcykge1xuICAgICAgICAgIGFkZGVkUHJvcFtuYW1lXSA9IHRydWU7XG4gICAgICAgICAgZGlmZlByb3BzLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yIHByb3BzXG4gICAgfSAvLyBpZlxuICB9IC8vIGZvciBjb250ZXh0c1xuXG4gIGNhY2hlW2R1YWxDeHRLZXldID0gZGlmZlByb3BzO1xuICByZXR1cm4gZGlmZlByb3BzO1xufTtcbnN0eWZuJDguZ2V0Q29udGV4dE1ldGEgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGN4dEtleSA9ICcnO1xuICB2YXIgZGlmZlByb3BzO1xuICB2YXIgcHJldktleSA9IGVsZS5fcHJpdmF0ZS5zdHlsZUN4dEtleSB8fCAnJztcblxuICAvLyBnZXQgdGhlIGN4dCBrZXlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbnRleHQgPSBzZWxmW2ldO1xuICAgIHZhciBjb250ZXh0U2VsZWN0b3JNYXRjaGVzID0gY29udGV4dC5zZWxlY3RvciAmJiBjb250ZXh0LnNlbGVjdG9yLm1hdGNoZXMoZWxlKTsgLy8gTkI6IGNvbnRleHQuc2VsZWN0b3IgbWF5IGJlIG51bGwgZm9yICdjb3JlJ1xuXG4gICAgaWYgKGNvbnRleHRTZWxlY3Rvck1hdGNoZXMpIHtcbiAgICAgIGN4dEtleSArPSBUUlVFO1xuICAgIH0gZWxzZSB7XG4gICAgICBjeHRLZXkgKz0gRkFMU0U7XG4gICAgfVxuICB9IC8vIGZvciBjb250ZXh0XG5cbiAgZGlmZlByb3BzID0gc2VsZi5nZXRQcm9wZXJ0aWVzRGlmZihwcmV2S2V5LCBjeHRLZXkpO1xuICBlbGUuX3ByaXZhdGUuc3R5bGVDeHRLZXkgPSBjeHRLZXk7XG4gIHJldHVybiB7XG4gICAga2V5OiBjeHRLZXksXG4gICAgZGlmZlByb3BOYW1lczogZGlmZlByb3BzLFxuICAgIGVtcHR5OiBkaWZmUHJvcHMubGVuZ3RoID09PSAwXG4gIH07XG59O1xuXG4vLyBnZXRzIGEgY29tcHV0ZWQgZWxlIHN0eWxlIG9iamVjdCBiYXNlZCBvbiBtYXRjaGVkIGNvbnRleHRzXG5zdHlmbiQ4LmdldENvbnRleHRTdHlsZSA9IGZ1bmN0aW9uIChjeHRNZXRhKSB7XG4gIHZhciBjeHRLZXkgPSBjeHRNZXRhLmtleTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY3h0U3R5bGVzID0gdGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzID0gdGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzIHx8IHt9O1xuXG4gIC8vIGlmIGFscmVhZHkgY29tcHV0ZWQgc3R5bGUsIHJldHVybmVkIGNhY2hlZCBjb3B5XG4gIGlmIChjeHRTdHlsZXNbY3h0S2V5XSkge1xuICAgIHJldHVybiBjeHRTdHlsZXNbY3h0S2V5XTtcbiAgfVxuICB2YXIgc3R5bGUgPSB7XG4gICAgX3ByaXZhdGU6IHtcbiAgICAgIGtleTogY3h0S2V5XG4gICAgfVxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3h0ID0gc2VsZltpXTtcbiAgICB2YXIgaGFzQ3h0ID0gY3h0S2V5W2ldID09PSBUUlVFO1xuICAgIGlmICghaGFzQ3h0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjeHQucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHByb3AgPSBjeHQucHJvcGVydGllc1tqXTtcbiAgICAgIHN0eWxlW3Byb3AubmFtZV0gPSBwcm9wO1xuICAgIH1cbiAgfVxuICBjeHRTdHlsZXNbY3h0S2V5XSA9IHN0eWxlO1xuICByZXR1cm4gc3R5bGU7XG59O1xuc3R5Zm4kOC5hcHBseUNvbnRleHRTdHlsZSA9IGZ1bmN0aW9uIChjeHRNZXRhLCBjeHRTdHlsZSwgZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGRpZmZQcm9wcyA9IGN4dE1ldGEuZGlmZlByb3BOYW1lcztcbiAgdmFyIHJldERpZmZQcm9wcyA9IHt9O1xuICB2YXIgdHlwZXMgPSBzZWxmLnR5cGVzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmZQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkaWZmUHJvcE5hbWUgPSBkaWZmUHJvcHNbaV07XG4gICAgdmFyIGN4dFByb3AgPSBjeHRTdHlsZVtkaWZmUHJvcE5hbWVdO1xuICAgIHZhciBlbGVQcm9wID0gZWxlLnBzdHlsZShkaWZmUHJvcE5hbWUpO1xuICAgIGlmICghY3h0UHJvcCkge1xuICAgICAgLy8gbm8gY29udGV4dCBwcm9wIG1lYW5zIGRlbGV0ZVxuICAgICAgaWYgKCFlbGVQcm9wKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBubyBleGlzdGluZyBwcm9wIG1lYW5zIG5vdGhpbmcgbmVlZHMgdG8gYmUgcmVtb3ZlZFxuICAgICAgICAvLyBuYiBhZmZlY3RzIGluaXRpYWwgYXBwbGljYXRpb24gb24gbWFwcGVkIHZhbHVlcyBsaWtlIGNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzXG4gICAgICB9IGVsc2UgaWYgKGVsZVByb3AuYnlwYXNzKSB7XG4gICAgICAgIGN4dFByb3AgPSB7XG4gICAgICAgICAgbmFtZTogZGlmZlByb3BOYW1lLFxuICAgICAgICAgIGRlbGV0ZUJ5cGFzc2VkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjeHRQcm9wID0ge1xuICAgICAgICAgIG5hbWU6IGRpZmZQcm9wTmFtZSxcbiAgICAgICAgICBcImRlbGV0ZVwiOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2F2ZSBjeWNsZXMgd2hlbiB0aGUgY29udGV4dCBwcm9wIGRvZXNuJ3QgbmVlZCB0byBiZSBhcHBsaWVkXG4gICAgaWYgKGVsZVByb3AgPT09IGN4dFByb3ApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNhdmUgY3ljbGVzIHdoZW4gYSBtYXBwZWQgY29udGV4dCBwcm9wIGRvZXNuJ3QgbmVlZCB0byBiZSBhcHBsaWVkXG4gICAgaWYgKGN4dFByb3AubWFwcGVkID09PSB0eXBlcy5mbiAvLyBjb250ZXh0IHByb3AgaXMgZnVuY3Rpb24gbWFwcGVyXG4gICAgJiYgZWxlUHJvcCAhPSBudWxsIC8vIHNvbWUgcHJvcHMgY2FuIGJlIG51bGwgZXZlbiBieSBkZWZhdWx0IChlLmcuIGEgcHJvcCB0aGF0IG92ZXJyaWRlcyBhbm90aGVyIG9uZSlcbiAgICAmJiBlbGVQcm9wLm1hcHBpbmcgIT0gbnVsbCAvLyBlbGUgcHJvcCBpcyBhIGNvbmNyZXRlIHZhbHVlIGZyb20gZnJvbSBhIG1hcHBlclxuICAgICYmIGVsZVByb3AubWFwcGluZy52YWx1ZSA9PT0gY3h0UHJvcC52YWx1ZSAvLyB0aGUgY3VycmVudCBwcm9wIG9uIHRoZSBlbGUgaXMgYSBmbGF0IHByb3AgdmFsdWUgZm9yIHRoZSBmdW5jdGlvbiBtYXBwZXJcbiAgICApIHtcbiAgICAgIC8vIE5CIGRvbid0IHdyaXRlIHRvIGN4dFByb3AsIGFzIGl0J3Mgc2hhcmVkIGFtb25nIGVsZXMgKHN0b3JlZCBpbiBzdHlsZXNoZWV0KVxuICAgICAgdmFyIG1hcHBpbmcgPSBlbGVQcm9wLm1hcHBpbmc7IC8vIGNhbiB3cml0ZSB0byBtYXBwaW5nLCBhcyBpdCdzIGEgcGVyLWVsZSBjb3B5XG4gICAgICB2YXIgZm5WYWx1ZSA9IG1hcHBpbmcuZm5WYWx1ZSA9IGN4dFByb3AudmFsdWUoZWxlKTsgLy8gdGVtcG9yYXJpbHkgY2FjaGUgdGhlIHZhbHVlIGluIGNhc2Ugb2YgYSBtaXNzXG5cbiAgICAgIGlmIChmblZhbHVlID09PSBtYXBwaW5nLnByZXZGblZhbHVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmV0RGlmZlByb3AgPSByZXREaWZmUHJvcHNbZGlmZlByb3BOYW1lXSA9IHtcbiAgICAgIHByZXY6IGVsZVByb3BcbiAgICB9O1xuICAgIHNlbGYuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIGN4dFByb3ApO1xuICAgIHJldERpZmZQcm9wLm5leHQgPSBlbGUucHN0eWxlKGRpZmZQcm9wTmFtZSk7XG4gICAgaWYgKHJldERpZmZQcm9wLm5leHQgJiYgcmV0RGlmZlByb3AubmV4dC5ieXBhc3MpIHtcbiAgICAgIHJldERpZmZQcm9wLm5leHQgPSByZXREaWZmUHJvcC5uZXh0LmJ5cGFzc2VkO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGRpZmZQcm9wczogcmV0RGlmZlByb3BzXG4gIH07XG59O1xuc3R5Zm4kOC51cGRhdGVTdHlsZUhpbnRzID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3BOYW1lcyA9IHNlbGYucHJvcGVydHlHcm91cE5hbWVzO1xuICB2YXIgcHJvcEdyS2V5cyA9IHNlbGYucHJvcGVydHlHcm91cEtleXM7XG4gIHZhciBwcm9wSGFzaCA9IGZ1bmN0aW9uIHByb3BIYXNoKGVsZSwgcHJvcE5hbWVzLCBzZWVkS2V5KSB7XG4gICAgcmV0dXJuIHNlbGYuZ2V0UHJvcGVydGllc0hhc2goZWxlLCBwcm9wTmFtZXMsIHNlZWRLZXkpO1xuICB9O1xuICB2YXIgb2xkU3R5bGVLZXkgPSBfcC5zdHlsZUtleTtcbiAgaWYgKGVsZS5yZW1vdmVkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGlzTm9kZSA9IF9wLmdyb3VwID09PSAnbm9kZXMnO1xuXG4gIC8vIGdldCB0aGUgc3R5bGUga2V5IGhhc2hlcyBwZXIgcHJvcCBncm91cFxuICAvLyBidXQgbGF6aWx5IC0tIG9ubHkgdXNlIG5vbi1kZWZhdWx0IHByb3AgdmFsdWVzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGhhc2hlc1xuICAvL1xuXG4gIHZhciBvdmVycmlkZGVuU3R5bGVzID0gZWxlLl9wcml2YXRlLnN0eWxlO1xuICBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZGVuU3R5bGVzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wR3JLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyS2V5ID0gcHJvcEdyS2V5c1tpXTtcbiAgICBfcC5zdHlsZUtleXNbZ3JLZXldID0gW0RFRkFVTFRfSEFTSF9TRUVELCBERUZBVUxUX0hBU0hfU0VFRF9BTFRdO1xuICB9XG4gIHZhciB1cGRhdGVHcktleTEgPSBmdW5jdGlvbiB1cGRhdGVHcktleTEodmFsLCBncktleSkge1xuICAgIHJldHVybiBfcC5zdHlsZUtleXNbZ3JLZXldWzBdID0gaGFzaEludCh2YWwsIF9wLnN0eWxlS2V5c1tncktleV1bMF0pO1xuICB9O1xuICB2YXIgdXBkYXRlR3JLZXkyID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkyKHZhbCwgZ3JLZXkpIHtcbiAgICByZXR1cm4gX3Auc3R5bGVLZXlzW2dyS2V5XVsxXSA9IGhhc2hJbnRBbHQodmFsLCBfcC5zdHlsZUtleXNbZ3JLZXldWzFdKTtcbiAgfTtcbiAgdmFyIHVwZGF0ZUdyS2V5ID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkodmFsLCBncktleSkge1xuICAgIHVwZGF0ZUdyS2V5MSh2YWwsIGdyS2V5KTtcbiAgICB1cGRhdGVHcktleTIodmFsLCBncktleSk7XG4gIH07XG4gIHZhciB1cGRhdGVHcktleVdTdHIgPSBmdW5jdGlvbiB1cGRhdGVHcktleVdTdHIoc3RyVmFsLCBncktleSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RyVmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgY2ggPSBzdHJWYWwuY2hhckNvZGVBdChqKTtcbiAgICAgIHVwZGF0ZUdyS2V5MShjaCwgZ3JLZXkpO1xuICAgICAgdXBkYXRlR3JLZXkyKGNoLCBncktleSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIC0gaGFzaGluZyB3b3JrcyBvbiAzMiBiaXQgaW50cyBiL2Mgd2UgdXNlIGJpdHdpc2Ugb3BzXG4gIC8vIC0gc21hbGwgbnVtYmVycyBnZXQgY3V0IG9mZiAoZS5nLiAwLjEyMyBpcyBzZWVuIGFzIDAgYnkgdGhlIGhhc2hpbmcgZnVuY3Rpb24pXG4gIC8vIC0gcmFpc2UgdXAgc21hbGwgbnVtYmVycyBzbyBtb3JlIHNpZ25pZmljYW50IGRpZ2l0cyBhcmUgc2VlbiBieSBoYXNoaW5nXG4gIC8vIC0gbWFrZSBzbWFsbCBudW1iZXJzIGxhcmdlciB0aGFuIGEgbm9ybWFsIHZhbHVlIHRvIGF2b2lkIGNvbGxpc2lvbnNcbiAgLy8gLSB3b3JrcyBpbiBwcmFjdGljZSBhbmQgaXQncyByZWxhdGl2ZWx5IGNoZWFwXG4gIHZhciBOID0gMjAwMDAwMDAwMDtcbiAgdmFyIGNsZWFuTnVtID0gZnVuY3Rpb24gY2xlYW5OdW0odmFsKSB7XG4gICAgcmV0dXJuIC0xMjggPCB2YWwgJiYgdmFsIDwgMTI4ICYmIE1hdGguZmxvb3IodmFsKSAhPT0gdmFsID8gTiAtICh2YWwgKiAxMDI0IHwgMCkgOiB2YWw7XG4gIH07XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBwcm9wTmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIG5hbWUgPSBwcm9wTmFtZXNbX2ldO1xuICAgIHZhciBwYXJzZWRQcm9wID0gb3ZlcnJpZGRlblN0eWxlc1tuYW1lXTtcbiAgICBpZiAocGFyc2VkUHJvcCA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIHByb3BJbmZvID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgIHZhciB0eXBlID0gcHJvcEluZm8udHlwZTtcbiAgICB2YXIgX2dyS2V5ID0gcHJvcEluZm8uZ3JvdXBLZXk7XG4gICAgdmFyIG5vcm1hbGl6ZWROdW1iZXJWYWwgPSB2b2lkIDA7XG4gICAgaWYgKHByb3BJbmZvLmhhc2hPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBub3JtYWxpemVkTnVtYmVyVmFsID0gcHJvcEluZm8uaGFzaE92ZXJyaWRlKGVsZSwgcGFyc2VkUHJvcCk7XG4gICAgfSBlbHNlIGlmIChwYXJzZWRQcm9wLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgbm9ybWFsaXplZE51bWJlclZhbCA9IHBhcnNlZFByb3AucGZWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCBub3QgYmUgYSBudW1iZXIgaWYgaXQgYWxsb3dzIGVudW1zXG4gICAgdmFyIG51bWJlclZhbCA9IHByb3BJbmZvLmVudW1zID09IG51bGwgPyBwYXJzZWRQcm9wLnZhbHVlIDogbnVsbDtcbiAgICB2YXIgaGF2ZU5vcm1OdW0gPSBub3JtYWxpemVkTnVtYmVyVmFsICE9IG51bGw7XG4gICAgdmFyIGhhdmVVbml0ZWROdW0gPSBudW1iZXJWYWwgIT0gbnVsbDtcbiAgICB2YXIgaGF2ZU51bSA9IGhhdmVOb3JtTnVtIHx8IGhhdmVVbml0ZWROdW07XG4gICAgdmFyIHVuaXRzID0gcGFyc2VkUHJvcC51bml0cztcblxuICAgIC8vIG51bWJlcnMgYXJlIGNoZWFwZXIgdG8gaGFzaCB0aGFuIHN0cmluZ3NcbiAgICAvLyAxIGhhc2ggb3AgdnMgbiBoYXNoIG9wcyAoZm9yIGxlbmd0aCBuIHN0cmluZylcbiAgICBpZiAodHlwZS5udW1iZXIgJiYgaGF2ZU51bSAmJiAhdHlwZS5tdWx0aXBsZSkge1xuICAgICAgdmFyIHYgPSBoYXZlTm9ybU51bSA/IG5vcm1hbGl6ZWROdW1iZXJWYWwgOiBudW1iZXJWYWw7XG4gICAgICB1cGRhdGVHcktleShjbGVhbk51bSh2KSwgX2dyS2V5KTtcbiAgICAgIGlmICghaGF2ZU5vcm1OdW0gJiYgdW5pdHMgIT0gbnVsbCkge1xuICAgICAgICB1cGRhdGVHcktleVdTdHIodW5pdHMsIF9ncktleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZUdyS2V5V1N0cihwYXJzZWRQcm9wLnN0clZhbHVlLCBfZ3JLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG92ZXJhbGwgc3R5bGUga2V5XG4gIC8vXG5cbiAgdmFyIGhhc2ggPSBbREVGQVVMVF9IQVNIX1NFRUQsIERFRkFVTFRfSEFTSF9TRUVEX0FMVF07XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHByb3BHcktleXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBfZ3JLZXkyID0gcHJvcEdyS2V5c1tfaTJdO1xuICAgIHZhciBnckhhc2ggPSBfcC5zdHlsZUtleXNbX2dyS2V5Ml07XG4gICAgaGFzaFswXSA9IGhhc2hJbnQoZ3JIYXNoWzBdLCBoYXNoWzBdKTtcbiAgICBoYXNoWzFdID0gaGFzaEludEFsdChnckhhc2hbMV0sIGhhc2hbMV0pO1xuICB9XG4gIF9wLnN0eWxlS2V5ID0gY29tYmluZUhhc2hlcyhoYXNoWzBdLCBoYXNoWzFdKTtcblxuICAvLyBsYWJlbCBkaW1zXG4gIC8vXG5cbiAgdmFyIHNrID0gX3Auc3R5bGVLZXlzO1xuICBfcC5sYWJlbERpbXNLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkoc2subGFiZWxEaW1lbnNpb25zKTtcbiAgdmFyIGxhYmVsS2V5cyA9IHByb3BIYXNoKGVsZSwgWydsYWJlbCddLCBzay5sYWJlbERpbWVuc2lvbnMpO1xuICBfcC5sYWJlbEtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShsYWJlbEtleXMpO1xuICBfcC5sYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIGxhYmVsS2V5cykpO1xuICBpZiAoIWlzTm9kZSkge1xuICAgIHZhciBzb3VyY2VMYWJlbEtleXMgPSBwcm9wSGFzaChlbGUsIFsnc291cmNlLWxhYmVsJ10sIHNrLmxhYmVsRGltZW5zaW9ucyk7XG4gICAgX3Auc291cmNlTGFiZWxLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkoc291cmNlTGFiZWxLZXlzKTtcbiAgICBfcC5zb3VyY2VMYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIHNvdXJjZUxhYmVsS2V5cykpO1xuICAgIHZhciB0YXJnZXRMYWJlbEtleXMgPSBwcm9wSGFzaChlbGUsIFsndGFyZ2V0LWxhYmVsJ10sIHNrLmxhYmVsRGltZW5zaW9ucyk7XG4gICAgX3AudGFyZ2V0TGFiZWxLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkodGFyZ2V0TGFiZWxLZXlzKTtcbiAgICBfcC50YXJnZXRMYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIHRhcmdldExhYmVsS2V5cykpO1xuICB9XG5cbiAgLy8gbm9kZVxuICAvL1xuXG4gIGlmIChpc05vZGUpIHtcbiAgICB2YXIgX3Akc3R5bGVLZXlzID0gX3Auc3R5bGVLZXlzLFxuICAgICAgbm9kZUJvZHkgPSBfcCRzdHlsZUtleXMubm9kZUJvZHksXG4gICAgICBub2RlQm9yZGVyID0gX3Akc3R5bGVLZXlzLm5vZGVCb3JkZXIsXG4gICAgICBub2RlT3V0bGluZSA9IF9wJHN0eWxlS2V5cy5ub2RlT3V0bGluZSxcbiAgICAgIGJhY2tncm91bmRJbWFnZSA9IF9wJHN0eWxlS2V5cy5iYWNrZ3JvdW5kSW1hZ2UsXG4gICAgICBjb21wb3VuZCA9IF9wJHN0eWxlS2V5cy5jb21wb3VuZCxcbiAgICAgIHBpZSA9IF9wJHN0eWxlS2V5cy5waWU7XG4gICAgdmFyIG5vZGVLZXlzID0gW25vZGVCb2R5LCBub2RlQm9yZGVyLCBub2RlT3V0bGluZSwgYmFja2dyb3VuZEltYWdlLCBjb21wb3VuZCwgcGllXS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiBrICE9IG51bGw7XG4gICAgfSkucmVkdWNlKGhhc2hBcnJheXMsIFtERUZBVUxUX0hBU0hfU0VFRCwgREVGQVVMVF9IQVNIX1NFRURfQUxUXSk7XG4gICAgX3Aubm9kZUtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShub2RlS2V5cyk7XG4gICAgX3AuaGFzUGllID0gcGllICE9IG51bGwgJiYgcGllWzBdICE9PSBERUZBVUxUX0hBU0hfU0VFRCAmJiBwaWVbMV0gIT09IERFRkFVTFRfSEFTSF9TRUVEX0FMVDtcbiAgfVxuICByZXR1cm4gb2xkU3R5bGVLZXkgIT09IF9wLnN0eWxlS2V5O1xufTtcbnN0eWZuJDguY2xlYXJTdHlsZUhpbnRzID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIF9wLnN0eWxlQ3h0S2V5ID0gJyc7XG4gIF9wLnN0eWxlS2V5cyA9IHt9O1xuICBfcC5zdHlsZUtleSA9IG51bGw7XG4gIF9wLmxhYmVsS2V5ID0gbnVsbDtcbiAgX3AubGFiZWxTdHlsZUtleSA9IG51bGw7XG4gIF9wLnNvdXJjZUxhYmVsS2V5ID0gbnVsbDtcbiAgX3Auc291cmNlTGFiZWxTdHlsZUtleSA9IG51bGw7XG4gIF9wLnRhcmdldExhYmVsS2V5ID0gbnVsbDtcbiAgX3AudGFyZ2V0TGFiZWxTdHlsZUtleSA9IG51bGw7XG4gIF9wLm5vZGVLZXkgPSBudWxsO1xuICBfcC5oYXNQaWUgPSBudWxsO1xufTtcblxuLy8gYXBwbHkgYSBwcm9wZXJ0eSB0byB0aGUgc3R5bGUgKGZvciBpbnRlcm5hbCB1c2UpXG4vLyByZXR1cm5zIHdoZXRoZXIgYXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWxcbi8vXG4vLyBub3csIHRoaXMgZnVuY3Rpb24gZmxhdHRlbnMgdGhlIHByb3BlcnR5LCBhbmQgaGVyZSdzIGhvdzpcbi8vXG4vLyBmb3IgcGFyc2VkUHJvcDp7IGJ5cGFzczogdHJ1ZSwgZGVsZXRlQnlwYXNzOiB0cnVlIH1cbi8vIG5vIHByb3BlcnR5IGlzIGdlbmVyYXRlZCwgaW5zdGVhZCB0aGUgYnlwYXNzIHByb3BlcnR5IGluIHRoZVxuLy8gZWxlbWVudCdzIHN0eWxlIGlzIHJlcGxhY2VkIGJ5IHdoYXQncyBwb2ludGVkIHRvIGJ5IHRoZSBgYnlwYXNzZWRgXG4vLyBmaWVsZCBpbiB0aGUgYnlwYXNzIHByb3BlcnR5IChpLmUuIHJlc3RvcmluZyB0aGUgcHJvcGVydHkgdGhlXG4vLyBieXBhc3Mgd2FzIG92ZXJyaWRpbmcpXG4vL1xuLy8gZm9yIHBhcnNlZFByb3A6eyBtYXBwZWQ6IHRydXRoeSB9XG4vLyB0aGUgZ2VuZXJhdGVkIGZsYXR0ZW5lZFByb3A6eyBtYXBwaW5nOiBwcm9wIH1cbi8vXG4vLyBmb3IgcGFyc2VkUHJvcDp7IGJ5cGFzczogdHJ1ZSB9XG4vLyB0aGUgZ2VuZXJhdGVkIGZsYXR0ZW5lZFByb3A6eyBieXBhc3NlZDogcGFyc2VkUHJvcCB9XG5zdHlmbiQ4LmFwcGx5UGFyc2VkUHJvcGVydHkgPSBmdW5jdGlvbiAoZWxlLCBwYXJzZWRQcm9wKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3AgPSBwYXJzZWRQcm9wO1xuICB2YXIgc3R5bGUgPSBlbGUuX3ByaXZhdGUuc3R5bGU7XG4gIHZhciBmbGF0UHJvcDtcbiAgdmFyIHR5cGVzID0gc2VsZi50eXBlcztcbiAgdmFyIHR5cGUgPSBzZWxmLnByb3BlcnRpZXNbcHJvcC5uYW1lXS50eXBlO1xuICB2YXIgcHJvcElzQnlwYXNzID0gcHJvcC5ieXBhc3M7XG4gIHZhciBvcmlnUHJvcCA9IHN0eWxlW3Byb3AubmFtZV07XG4gIHZhciBvcmlnUHJvcElzQnlwYXNzID0gb3JpZ1Byb3AgJiYgb3JpZ1Byb3AuYnlwYXNzO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBmbGF0UHJvcE1hcHBpbmcgPSAnbWFwcGluZyc7XG4gIHZhciBnZXRWYWwgPSBmdW5jdGlvbiBnZXRWYWwocCkge1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwLnBmVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwLnZhbHVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiBjaGVja1RyaWdnZXJzKCkge1xuICAgIHZhciBmcm9tVmFsID0gZ2V0VmFsKG9yaWdQcm9wKTtcbiAgICB2YXIgdG9WYWwgPSBnZXRWYWwocHJvcCk7XG4gICAgc2VsZi5jaGVja1RyaWdnZXJzKGVsZSwgcHJvcC5uYW1lLCBmcm9tVmFsLCB0b1ZhbCk7XG4gIH07XG5cbiAgLy8gZWRnZSBzYW5pdHkgY2hlY2tzIHRvIHByZXZlbnQgdGhlIGNsaWVudCBmcm9tIG1ha2luZyBzZXJpb3VzIG1pc3Rha2VzXG4gIGlmIChwYXJzZWRQcm9wLm5hbWUgPT09ICdjdXJ2ZS1zdHlsZScgJiYgZWxlLmlzRWRnZSgpICYmIChcbiAgLy8gbG9vcHMgbXVzdCBiZSBidW5kbGVkIGJlemllcnNcbiAgcGFyc2VkUHJvcC52YWx1ZSAhPT0gJ2JlemllcicgJiYgZWxlLmlzTG9vcCgpIHx8XG4gIC8vIGVkZ2VzIGNvbm5lY3RlZCB0byBjb21wb3VuZCBub2RlcyBjYW4gbm90IGJlIGhheXN0YWNrc1xuICBwYXJzZWRQcm9wLnZhbHVlID09PSAnaGF5c3RhY2snICYmIChlbGUuc291cmNlKCkuaXNQYXJlbnQoKSB8fCBlbGUudGFyZ2V0KCkuaXNQYXJlbnQoKSkpKSB7XG4gICAgcHJvcCA9IHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKHBhcnNlZFByb3AubmFtZSwgJ2JlemllcicsIHByb3BJc0J5cGFzcyk7XG4gIH1cbiAgaWYgKHByb3BbXCJkZWxldGVcIl0pIHtcbiAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5IGFuZCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb24gZmFsc2V5IHZhbHVlXG4gICAgc3R5bGVbcHJvcC5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHByb3AuZGVsZXRlQnlwYXNzZWQpIHtcbiAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5IHRoYXQgdGhlXG4gICAgaWYgKCFvcmlnUHJvcCkge1xuICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGNhbid0IGRlbGV0ZSBpZiBubyBwcm9wXG4gICAgfSBlbHNlIGlmIChvcmlnUHJvcC5ieXBhc3MpIHtcbiAgICAgIC8vIGRlbGV0ZSBieXBhc3NlZFxuICAgICAgb3JpZ1Byb3AuYnlwYXNzZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyB3ZSdyZSB1bnN1Y2Nlc3NmdWwgZGVsZXRpbmcgdGhlIGJ5cGFzc2VkXG4gICAgfVxuICB9XG5cbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBkZWxldGUgdGhlIGN1cnJlbnQgYnlwYXNzXG4gIGlmIChwcm9wLmRlbGV0ZUJ5cGFzcykge1xuICAgIC8vIHRoZW4gdGhpcyBwcm9wZXJ0eSBpcyBqdXN0IGhlcmUgdG8gaW5kaWNhdGUgd2UgbmVlZCB0byBkZWxldGVcbiAgICBpZiAoIW9yaWdQcm9wKSB7XG4gICAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gcHJvcGVydHkgaXMgYWxyZWFkeSBub3QgZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAob3JpZ1Byb3AuYnlwYXNzKSB7XG4gICAgICAvLyB0aGVuIHJlcGxhY2UgdGhlIGJ5cGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gYmVjYXVzZSB0aGUgYnlwYXNzZWQgcHJvcGVydHkgd2FzIGFscmVhZHkgYXBwbGllZCAoYW5kIHRoZXJlZm9yZSBwYXJzZWQpLCB3ZSBjYW4ganVzdCByZXBsYWNlIGl0IChubyByZWFwcGx5aW5nIG5lY2Vzc2FyeSlcbiAgICAgIHN0eWxlW3Byb3AubmFtZV0gPSBvcmlnUHJvcC5ieXBhc3NlZDtcbiAgICAgIGNoZWNrVHJpZ2dlcnMoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIHdlJ3JlIHVuc3VjY2Vzc2Z1bCBkZWxldGluZyB0aGUgYnlwYXNzXG4gICAgfVxuICB9XG5cbiAgdmFyIHByaW50TWFwcGluZ0VyciA9IGZ1bmN0aW9uIHByaW50TWFwcGluZ0VycigpIHtcbiAgICB3YXJuKCdEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgJyArIGVsZS5pZCgpICsgJ2AgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAnICsgcHJvcC5uYW1lICsgJ2Agd2l0aCBkYXRhIGZpZWxkIGAnICsgcHJvcC5maWVsZCArICdgKTsgdHJ5IGEgYFsnICsgcHJvcC5maWVsZCArICddYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAnICsgcHJvcC5maWVsZCArICdgIGRlZmluZWQnKTtcbiAgfTtcblxuICAvLyBwdXQgdGhlIHByb3BlcnR5IGluIHRoZSBzdHlsZSBvYmplY3RzXG4gIHN3aXRjaCAocHJvcC5tYXBwZWQpIHtcbiAgICAvLyBmbGF0dGVuIHRoZSBwcm9wZXJ0eSBpZiBtYXBwZWRcbiAgICBjYXNlIHR5cGVzLm1hcERhdGE6XG4gICAgICB7XG4gICAgICAgIC8vIGZsYXR0ZW4gdGhlIGZpZWxkIChlLmcuIGRhdGEuZm9vLmJhcilcbiAgICAgICAgdmFyIGZpZWxkcyA9IHByb3AuZmllbGQuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIGZpZWxkVmFsID0gX3AuZGF0YTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoICYmIGZpZWxkVmFsOyBpKyspIHtcbiAgICAgICAgICB2YXIgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgZmllbGRWYWwgPSBmaWVsZFZhbFtmaWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkVmFsID09IG51bGwpIHtcbiAgICAgICAgICBwcmludE1hcHBpbmdFcnIoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBlcmNlbnQ7XG4gICAgICAgIGlmICghbnVtYmVyJDEoZmllbGRWYWwpKSB7XG4gICAgICAgICAgLy8gdGhlbiBkb24ndCBhcHBseSBhbmQgZmFsbCBiYWNrIG9uIHRoZSBleGlzdGluZyBzdHlsZVxuICAgICAgICAgIHdhcm4oJ0RvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCcgKyBwcm9wLmZpZWxkICsgJzogJyArIGZpZWxkVmFsICsgJ2AgZm9yIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBub24tbnVtZXJpYyknKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGZpZWxkV2lkdGggPSBwcm9wLmZpZWxkTWF4IC0gcHJvcC5maWVsZE1pbjtcbiAgICAgICAgICBpZiAoZmllbGRXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc2FmZXR5IGNoZWNrIC0tIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYXMgbm8gcHJvcHMgb2YgemVybyByYW5nZSBzaG91bGQgYmUgcGFzc2VkIGhlcmVcbiAgICAgICAgICAgIHBlcmNlbnQgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZXJjZW50ID0gKGZpZWxkVmFsIC0gcHJvcC5maWVsZE1pbikgLyBmaWVsZFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBib3VuZCBwZXJjZW50IHZhbHVlXG4gICAgICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgICAgIHBlcmNlbnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPiAxKSB7XG4gICAgICAgICAgcGVyY2VudCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUuY29sb3IpIHtcbiAgICAgICAgICB2YXIgcjEgPSBwcm9wLnZhbHVlTWluWzBdO1xuICAgICAgICAgIHZhciByMiA9IHByb3AudmFsdWVNYXhbMF07XG4gICAgICAgICAgdmFyIGcxID0gcHJvcC52YWx1ZU1pblsxXTtcbiAgICAgICAgICB2YXIgZzIgPSBwcm9wLnZhbHVlTWF4WzFdO1xuICAgICAgICAgIHZhciBiMSA9IHByb3AudmFsdWVNaW5bMl07XG4gICAgICAgICAgdmFyIGIyID0gcHJvcC52YWx1ZU1heFsyXTtcbiAgICAgICAgICB2YXIgYTEgPSBwcm9wLnZhbHVlTWluWzNdID09IG51bGwgPyAxIDogcHJvcC52YWx1ZU1pblszXTtcbiAgICAgICAgICB2YXIgYTIgPSBwcm9wLnZhbHVlTWF4WzNdID09IG51bGwgPyAxIDogcHJvcC52YWx1ZU1heFszXTtcbiAgICAgICAgICB2YXIgY2xyID0gW01hdGgucm91bmQocjEgKyAocjIgLSByMSkgKiBwZXJjZW50KSwgTWF0aC5yb3VuZChnMSArIChnMiAtIGcxKSAqIHBlcmNlbnQpLCBNYXRoLnJvdW5kKGIxICsgKGIyIC0gYjEpICogcGVyY2VudCksIE1hdGgucm91bmQoYTEgKyAoYTIgLSBhMSkgKiBwZXJjZW50KV07XG4gICAgICAgICAgZmxhdFByb3AgPSB7XG4gICAgICAgICAgICAvLyBjb2xvdXJzIGFyZSBzaW1wbGUsIHNvIGp1c3QgY3JlYXRlIHRoZSBmbGF0IHByb3BlcnR5IGluc3RlYWQgb2YgZXhwZW5zaXZlIHN0cmluZyBwYXJzaW5nXG4gICAgICAgICAgICBieXBhc3M6IHByb3AuYnlwYXNzLFxuICAgICAgICAgICAgLy8gd2UncmUgYSBieXBhc3MgaWYgdGhlIG1hcHBpbmcgcHJvcGVydHkgaXMgYSBieXBhc3NcbiAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBjbHIsXG4gICAgICAgICAgICBzdHJWYWx1ZTogJ3JnYignICsgY2xyWzBdICsgJywgJyArIGNsclsxXSArICcsICcgKyBjbHJbMl0gKyAnKSdcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgdmFyIGNhbGNWYWx1ZSA9IHByb3AudmFsdWVNaW4gKyAocHJvcC52YWx1ZU1heCAtIHByb3AudmFsdWVNaW4pICogcGVyY2VudDtcbiAgICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBjYWxjVmFsdWUsIHByb3AuYnlwYXNzLCBmbGF0UHJvcE1hcHBpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2FuIG9ubHkgbWFwIHRvIGNvbG91cnMgYW5kIG51bWJlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmbGF0dGVuIHRoZSBwcm9wZXJ0eSwgdGhlbiBkb24ndCBhcHBseSB0aGUgcHJvcGVydHkgYW5kIGZhbGwgYmFjayBvbiB0aGUgZXhpc3Rpbmcgc3R5bGVcbiAgICAgICAgICBwcmludE1hcHBpbmdFcnIoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmxhdFByb3AubWFwcGluZyA9IHByb3A7IC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1hcHBpbmdcbiAgICAgICAgcHJvcCA9IGZsYXRQcm9wOyAvLyB0aGUgZmxhdHRlbmVkIChtYXBwZWQpIHByb3BlcnR5IGlzIHRoZSBvbmUgd2Ugd2FudFxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZGlyZWN0IG1hcHBpbmdcbiAgICBjYXNlIHR5cGVzLmRhdGE6XG4gICAgICB7XG4gICAgICAgIC8vIGZsYXR0ZW4gdGhlIGZpZWxkIChlLmcuIGRhdGEuZm9vLmJhcilcbiAgICAgICAgdmFyIF9maWVsZHMgPSBwcm9wLmZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBfZmllbGRWYWwgPSBfcC5kYXRhO1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBfZmllbGRzLmxlbmd0aCAmJiBfZmllbGRWYWw7IF9pMysrKSB7XG4gICAgICAgICAgdmFyIF9maWVsZCA9IF9maWVsZHNbX2kzXTtcbiAgICAgICAgICBfZmllbGRWYWwgPSBfZmllbGRWYWxbX2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2ZpZWxkVmFsICE9IG51bGwpIHtcbiAgICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBfZmllbGRWYWwsIHByb3AuYnlwYXNzLCBmbGF0UHJvcE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmbGF0dGVuIHRoZSBwcm9wZXJ0eSwgdGhlbiBkb24ndCBhcHBseSBhbmQgZmFsbCBiYWNrIG9uIHRoZSBleGlzdGluZyBzdHlsZVxuICAgICAgICAgIHByaW50TWFwcGluZ0VycigpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcC5tYXBwaW5nID0gcHJvcDsgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGluZ1xuICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSB0eXBlcy5mbjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZuID0gcHJvcC52YWx1ZTtcbiAgICAgICAgdmFyIGZuUmV0VmFsID0gcHJvcC5mblZhbHVlICE9IG51bGwgPyBwcm9wLmZuVmFsdWUgOiBmbihlbGUpOyAvLyBjaGVjayBmb3IgY2FjaGVkIHZhbHVlIGJlZm9yZSBjYWxsaW5nIGZ1bmN0aW9uXG5cbiAgICAgICAgcHJvcC5wcmV2Rm5WYWx1ZSA9IGZuUmV0VmFsO1xuICAgICAgICBpZiAoZm5SZXRWYWwgPT0gbnVsbCkge1xuICAgICAgICAgIHdhcm4oJ0N1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBudWxsKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBmblJldFZhbCwgcHJvcC5ieXBhc3MsIGZsYXRQcm9wTWFwcGluZyk7XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICB3YXJuKCdDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBpbnZhbGlkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHR5cGUgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBpbnZhbGlkKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcC5tYXBwaW5nID0gY29weShwcm9wKTsgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGluZ1xuICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBicmVhaztcbiAgICAvLyBqdXN0IHNldCB0aGUgcHJvcGVydHlcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gbm90IGEgdmFsaWQgbWFwcGluZ1xuICB9XG5cbiAgLy8gaWYgdGhlIHByb3BlcnR5IGlzIGEgYnlwYXNzIHByb3BlcnR5LCB0aGVuIGxpbmsgdGhlIHJlc3VsdGFudCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgb25lXG4gIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICBpZiAob3JpZ1Byb3BJc0J5cGFzcykge1xuICAgICAgLy8gdGhlbiB0aGlzIGJ5cGFzcyBvdmVycmlkZXMgdGhlIGV4aXN0aW5nIG9uZVxuICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wLmJ5cGFzc2VkOyAvLyBzdGVhbCBieXBhc3NlZCBwcm9wIGZyb20gb2xkIGJ5cGFzc1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGxpbmsgdGhlIG9yaWcgcHJvcCB0byB0aGUgbmV3IGJ5cGFzc1xuICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wO1xuICAgIH1cbiAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDsgLy8gYW5kIHNldFxuICB9IGVsc2Uge1xuICAgIC8vIHByb3AgaXMgbm90IGJ5cGFzc1xuICAgIGlmIChvcmlnUHJvcElzQnlwYXNzKSB7XG4gICAgICAvLyB0aGVuIGtlZXAgdGhlIG9yaWcgcHJvcCAoc2luY2UgaXQncyBhIGJ5cGFzcykgYW5kIGxpbmsgdG8gdGhlIG5ldyBwcm9wXG4gICAgICBvcmlnUHJvcC5ieXBhc3NlZCA9IHByb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZW4ganVzdCByZXBsYWNlIHRoZSBvbGQgcHJvcCB3aXRoIHRoZSBuZXcgb25lXG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDtcbiAgICB9XG4gIH1cbiAgY2hlY2tUcmlnZ2VycygpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5zdHlmbiQ4LmNsZWFuRWxlbWVudHMgPSBmdW5jdGlvbiAoZWxlcywga2VlcEJ5cGFzc2VzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHRoaXMuY2xlYXJTdHlsZUhpbnRzKGVsZSk7XG4gICAgZWxlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBpZiAoIWtlZXBCeXBhc3Nlcykge1xuICAgICAgZWxlLl9wcml2YXRlLnN0eWxlID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdHlsZSA9IGVsZS5fcHJpdmF0ZS5zdHlsZTtcbiAgICAgIHZhciBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BOYW1lcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTmFtZXNbal07XG4gICAgICAgIHZhciBlbGVQcm9wID0gc3R5bGVbcHJvcE5hbWVdO1xuICAgICAgICBpZiAoZWxlUHJvcCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGVsZVByb3AuYnlwYXNzKSB7XG4gICAgICAgICAgICBlbGVQcm9wLmJ5cGFzc2VkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVbcHJvcE5hbWVdID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8vIHVwZGF0ZXMgdGhlIHZpc3VhbCBzdHlsZSBmb3IgYWxsIGVsZW1lbnRzICh1c2VmdWwgZm9yIG1hbnVhbCBzdHlsZSBtb2RpZmljYXRpb24gYWZ0ZXIgaW5pdClcbnN0eWZuJDgudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICBlbGVzLnVwZGF0ZVN0eWxlKCk7XG59O1xuXG4vLyBkaWZmUHJvcHMgOiB7IG5hbWUgPT4geyBwcmV2LCBuZXh0IH0gfVxuc3R5Zm4kOC51cGRhdGVUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uIChlbGUsIGRpZmZQcm9wcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHByb3BzID0gZWxlLnBzdHlsZSgndHJhbnNpdGlvbi1wcm9wZXJ0eScpLnZhbHVlO1xuICB2YXIgZHVyYXRpb24gPSBlbGUucHN0eWxlKCd0cmFuc2l0aW9uLWR1cmF0aW9uJykucGZWYWx1ZTtcbiAgdmFyIGRlbGF5ID0gZWxlLnBzdHlsZSgndHJhbnNpdGlvbi1kZWxheScpLnBmVmFsdWU7XG4gIGlmIChwcm9wcy5sZW5ndGggPiAwICYmIGR1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdHlsZSA9IHt9O1xuXG4gICAgLy8gYnVpbGQgdXAgdGhlIHN0eWxlIHRvIGFuaW1hdGUgdG93YXJkc1xuICAgIHZhciBhbnlQcmV2ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIHZhciBzdHlQcm9wID0gZWxlLnBzdHlsZShwcm9wKTtcbiAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wXTtcbiAgICAgIGlmICghZGlmZlByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJldlByb3AgPSBkaWZmUHJvcC5wcmV2O1xuICAgICAgdmFyIGZyb21Qcm9wID0gcHJldlByb3A7XG4gICAgICB2YXIgdG9Qcm9wID0gZGlmZlByb3AubmV4dCAhPSBudWxsID8gZGlmZlByb3AubmV4dCA6IHN0eVByb3A7XG4gICAgICB2YXIgZGlmZiA9IGZhbHNlO1xuICAgICAgdmFyIGluaXRWYWwgPSB2b2lkIDA7XG4gICAgICB2YXIgaW5pdER0ID0gMC4wMDAwMDE7IC8vIGRlbHRhIHRpbWUgJSB2YWx1ZSBmb3IgaW5pdFZhbCAoYWxsb3dzIGFuaW1hdGluZyBvdXQgb2YgaW5pdCB6ZXJvIG9wYWNpdHkpXG5cbiAgICAgIGlmICghZnJvbVByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNpZGVyIHB4IHZhbHVlc1xuICAgICAgaWYgKG51bWJlciQxKGZyb21Qcm9wLnBmVmFsdWUpICYmIG51bWJlciQxKHRvUHJvcC5wZlZhbHVlKSkge1xuICAgICAgICBkaWZmID0gdG9Qcm9wLnBmVmFsdWUgLSBmcm9tUHJvcC5wZlZhbHVlOyAvLyBub256ZXJvIGlzIHRydXRoeVxuICAgICAgICBpbml0VmFsID0gZnJvbVByb3AucGZWYWx1ZSArIGluaXREdCAqIGRpZmY7XG5cbiAgICAgICAgLy8gY29uc2lkZXIgbnVtZXJpY2FsIHZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChudW1iZXIkMShmcm9tUHJvcC52YWx1ZSkgJiYgbnVtYmVyJDEodG9Qcm9wLnZhbHVlKSkge1xuICAgICAgICBkaWZmID0gdG9Qcm9wLnZhbHVlIC0gZnJvbVByb3AudmFsdWU7IC8vIG5vbnplcm8gaXMgdHJ1dGh5XG4gICAgICAgIGluaXRWYWwgPSBmcm9tUHJvcC52YWx1ZSArIGluaXREdCAqIGRpZmY7XG5cbiAgICAgICAgLy8gY29uc2lkZXIgY29sb3VyIHZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChhcnJheShmcm9tUHJvcC52YWx1ZSkgJiYgYXJyYXkodG9Qcm9wLnZhbHVlKSkge1xuICAgICAgICBkaWZmID0gZnJvbVByb3AudmFsdWVbMF0gIT09IHRvUHJvcC52YWx1ZVswXSB8fCBmcm9tUHJvcC52YWx1ZVsxXSAhPT0gdG9Qcm9wLnZhbHVlWzFdIHx8IGZyb21Qcm9wLnZhbHVlWzJdICE9PSB0b1Byb3AudmFsdWVbMl07XG4gICAgICAgIGluaXRWYWwgPSBmcm9tUHJvcC5zdHJWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhlIHByZXZpb3VzIHZhbHVlIGlzIGdvb2QgZm9yIGFuIGFuaW1hdGlvbiBvbmx5IGlmIGl0J3MgZGlmZmVyZW50XG4gICAgICBpZiAoZGlmZikge1xuICAgICAgICBzdHlsZVtwcm9wXSA9IHRvUHJvcC5zdHJWYWx1ZTsgLy8gdG8gdmFsXG4gICAgICAgIHRoaXMuYXBwbHlCeXBhc3MoZWxlLCBwcm9wLCBpbml0VmFsKTsgLy8gZnJvbSB2YWxcbiAgICAgICAgYW55UHJldiA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBlbmQgaWYgcHJvcHMgYWxsb3cgYW5pXG5cbiAgICAvLyBjYW4ndCB0cmFuc2l0aW9uIGlmIHRoZXJlJ3Mgbm90aGluZyBwcmV2aW91cyB0byB0cmFuc2l0aW9uIGZyb21cbiAgICBpZiAoIWFueVByZXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX3AudHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgICBlbGUuZGVsYXlBbmltYXRpb24oZGVsYXkpLnBsYXkoKS5wcm9taXNlKCkudGhlbihyZXNvbHZlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBlbGUuYW5pbWF0aW9uKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgIGVhc2luZzogZWxlLnBzdHlsZSgndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nKS52YWx1ZSxcbiAgICAgICAgcXVldWU6IGZhbHNlXG4gICAgICB9KS5wbGF5KCkucHJvbWlzZSgpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWYoICFpc0J5cGFzcyApe1xuICAgICAgc2VsZi5yZW1vdmVCeXBhc3NlcyhlbGUsIHByb3BzKTtcbiAgICAgIGVsZS5lbWl0QW5kTm90aWZ5KCdzdHlsZScpO1xuICAgICAgLy8gfVxuXG4gICAgICBfcC50cmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoX3AudHJhbnNpdGlvbmluZykge1xuICAgIHRoaXMucmVtb3ZlQnlwYXNzZXMoZWxlLCBwcm9wcyk7XG4gICAgZWxlLmVtaXRBbmROb3RpZnkoJ3N0eWxlJyk7XG4gICAgX3AudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICB9XG59O1xuc3R5Zm4kOC5jaGVja1RyaWdnZXIgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUsIGdldFRyaWdnZXIsIG9uVHJpZ2dlcikge1xuICB2YXIgcHJvcCA9IHRoaXMucHJvcGVydGllc1tuYW1lXTtcbiAgdmFyIHRyaWdnZXJDaGVjayA9IGdldFRyaWdnZXIocHJvcCk7XG4gIGlmICh0cmlnZ2VyQ2hlY2sgIT0gbnVsbCAmJiB0cmlnZ2VyQ2hlY2soZnJvbVZhbHVlLCB0b1ZhbHVlKSkge1xuICAgIG9uVHJpZ2dlcihwcm9wKTtcbiAgfVxufTtcbnN0eWZuJDguY2hlY2taT3JkZXJUcmlnZ2VyID0gZnVuY3Rpb24gKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHRoaXMuY2hlY2tUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlLCBmdW5jdGlvbiAocHJvcCkge1xuICAgIHJldHVybiBwcm9wLnRyaWdnZXJzWk9yZGVyO1xuICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgX3RoaXMuX3ByaXZhdGUuY3kubm90aWZ5KCd6b3JkZXInLCBlbGUpO1xuICB9KTtcbn07XG5zdHlmbiQ4LmNoZWNrQm91bmRzVHJpZ2dlciA9IGZ1bmN0aW9uIChlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSkge1xuICB0aGlzLmNoZWNrVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gcHJvcC50cmlnZ2Vyc0JvdW5kcztcbiAgfSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICBlbGUuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgZWxlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuXG4gICAgLy8gaWYgdGhlIHByb3AgY2hhbmdlIG1ha2VzIHRoZSBiYiBvZiBwbGwgYmV6aWVyIGVkZ2VzIGludmFsaWQsXG4gICAgLy8gdGhlbiBkaXJ0eSB0aGUgcGxsIGVkZ2UgYmIgY2FjaGUgYXMgd2VsbFxuICAgIGlmIChcbiAgICAvLyBvbmx5IGZvciBiZXppZXJzIC0tIHNvIHBlcmZvcm1hbmNlIG9mIG90aGVyIGVkZ2VzIGlzbid0IGFmZmVjdGVkXG4gICAgcHJvcC50cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzICYmIG5hbWUgPT09ICdjdXJ2ZS1zdHlsZScgJiYgKGZyb21WYWx1ZSA9PT0gJ2JlemllcicgfHwgdG9WYWx1ZSA9PT0gJ2JlemllcicpKSB7XG4gICAgICBlbGUucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKHBsbEVkZ2UpIHtcbiAgICAgICAgaWYgKHBsbEVkZ2UuaXNCdW5kbGVkQmV6aWVyKCkpIHtcbiAgICAgICAgICBwbGxFZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByb3AudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzICYmIG5hbWUgPT09ICdkaXNwbGF5JyAmJiAoZnJvbVZhbHVlID09PSAnbm9uZScgfHwgdG9WYWx1ZSA9PT0gJ25vbmUnKSkge1xuICAgICAgZWxlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICBlZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5zdHlmbiQ4LmNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUpIHtcbiAgZWxlLmRpcnR5U3R5bGVDYWNoZSgpO1xuICB0aGlzLmNoZWNrWk9yZGVyVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSk7XG4gIHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbn07XG5cbnZhciBzdHlmbiQ3ID0ge307XG5cbi8vIGJ5cGFzc2VzIGFyZSBhcHBsaWVkIHRvIGFuIGV4aXN0aW5nIHN0eWxlIG9uIGFuIGVsZW1lbnQsIGFuZCBqdXN0IHRhY2tlZCBvbiB0ZW1wb3JhcmlseVxuLy8gcmV0dXJucyB0cnVlIGlmZiBhcHBsaWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBmb3IgYXQgbGVhc3QgMSBzcGVjaWZpZWQgcHJvcGVydHlcbnN0eWZuJDcuYXBwbHlCeXBhc3MgPSBmdW5jdGlvbiAoZWxlcywgbmFtZSwgdmFsdWUsIHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3BzID0gW107XG4gIHZhciBpc0J5cGFzcyA9IHRydWU7XG5cbiAgLy8gcHV0IGFsbCB0aGUgcHJvcGVydGllcyAoY2FuIHNwZWNpZnkgb25lIG9yIG1hbnkpIGluIGFuIGFycmF5IGFmdGVyIHBhcnNpbmcgdGhlbVxuICBpZiAobmFtZSA9PT0gJyonIHx8IG5hbWUgPT09ICcqKicpIHtcbiAgICAvLyBhcHBseSB0byBhbGwgcHJvcGVydHkgbmFtZXNcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IHNlbGYucHJvcGVydGllc1tpXTtcbiAgICAgICAgdmFyIF9uYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICB2YXIgcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UoX25hbWUsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKHBhcnNlZFByb3ApIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKHBhcnNlZFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgIC8vIHRoZW4gcGFyc2UgdGhlIHNpbmdsZSBwcm9wZXJ0eVxuICAgIHZhciBfcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgdmFsdWUsIHRydWUpO1xuICAgIGlmIChfcGFyc2VkUHJvcCkge1xuICAgICAgcHJvcHMucHVzaChfcGFyc2VkUHJvcCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgLy8gdGhlbiBwYXJzZSBlYWNoIHByb3BlcnR5XG4gICAgdmFyIHNwZWNpZmllZFByb3BzID0gbmFtZTtcbiAgICB1cGRhdGVUcmFuc2l0aW9ucyA9IHZhbHVlO1xuICAgIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHNwZWNpZmllZFByb3BzKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25hbWUyID0gbmFtZXNbX2ldO1xuICAgICAgdmFyIF92YWx1ZSA9IHNwZWNpZmllZFByb3BzW19uYW1lMl07XG4gICAgICBpZiAoX3ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdHJ5IGNhbWVsIGNhc2UgbmFtZSB0b29cbiAgICAgICAgX3ZhbHVlID0gc3BlY2lmaWVkUHJvcHNbZGFzaDJjYW1lbChfbmFtZTIpXTtcbiAgICAgIH1cbiAgICAgIGlmIChfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgX3BhcnNlZFByb3AyID0gdGhpcy5wYXJzZShfbmFtZTIsIF92YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChfcGFyc2VkUHJvcDIpIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKF9wYXJzZWRQcm9wMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCB3ZWxsIGRlZmluZWQgcHJvcGVydGllc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHdlJ3ZlIGZhaWxlZCBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgcHJvcGVydGllc1xuICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gbm93LCBhcHBseSB0aGUgYnlwYXNzIHByb3BlcnRpZXMgb24gdGhlIGVsZW1lbnRzXG4gIHZhciByZXQgPSBmYWxzZTsgLy8gcmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIHN1Y2Nlc2Z1bCBieXBhc3MgYXBwbGllZFxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBlbGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAvLyBmb3IgZWFjaCBlbGVcbiAgICB2YXIgZWxlID0gZWxlc1tfaTJdO1xuICAgIHZhciBkaWZmUHJvcHMgPSB7fTtcbiAgICB2YXIgZGlmZlByb3AgPSB2b2lkIDA7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgLy8gZm9yIGVhY2ggcHJvcFxuICAgICAgdmFyIF9wcm9wID0gcHJvcHNbal07XG4gICAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShfcHJvcC5uYW1lKTtcbiAgICAgICAgZGlmZlByb3AgPSBkaWZmUHJvcHNbX3Byb3AubmFtZV0gPSB7XG4gICAgICAgICAgcHJldjogcHJldlByb3BcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldCA9IHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIGNvcHkoX3Byb3ApKSB8fCByZXQ7XG4gICAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUoX3Byb3AubmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBmb3IgcHJvcHNcblxuICAgIGlmIChyZXQpIHtcbiAgICAgIHRoaXMudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlVHJhbnNpdGlvbnMoZWxlLCBkaWZmUHJvcHMsIGlzQnlwYXNzKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVsZXNcblxuICByZXR1cm4gcmV0O1xufTtcblxuLy8gb25seSB1c2VmdWwgaW4gc3BlY2lmaWMgY2FzZXMgbGlrZSBhbmltYXRpb25cbnN0eWZuJDcub3ZlcnJpZGVCeXBhc3MgPSBmdW5jdGlvbiAoZWxlcywgbmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IGNhbWVsMmRhc2gobmFtZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBwcm9wID0gZWxlLl9wcml2YXRlLnN0eWxlW25hbWVdO1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdLnR5cGU7XG4gICAgdmFyIGlzQ29sb3IgPSB0eXBlLmNvbG9yO1xuICAgIHZhciBpc011bHRpID0gdHlwZS5tdXRpcGxlO1xuICAgIHZhciBvbGRWYWx1ZSA9ICFwcm9wID8gbnVsbCA6IHByb3AucGZWYWx1ZSAhPSBudWxsID8gcHJvcC5wZlZhbHVlIDogcHJvcC52YWx1ZTtcbiAgICBpZiAoIXByb3AgfHwgIXByb3AuYnlwYXNzKSB7XG4gICAgICAvLyBuZWVkIGEgYnlwYXNzIGlmIG9uZSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLmFwcGx5QnlwYXNzKGVsZSwgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAocHJvcC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcHJvcC5wZlZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNDb2xvcikge1xuICAgICAgICBwcm9wLnN0clZhbHVlID0gJ3JnYignICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgfSBlbHNlIGlmIChpc011bHRpKSB7XG4gICAgICAgIHByb3Auc3RyVmFsdWUgPSB2YWx1ZS5qb2luKCcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wLnN0clZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnMoZWxlLCBuYW1lLCBvbGRWYWx1ZSwgdmFsdWUpO1xuICB9XG59O1xuc3R5Zm4kNy5yZW1vdmVBbGxCeXBhc3NlcyA9IGZ1bmN0aW9uIChlbGVzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICByZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3NlcyhlbGVzLCB0aGlzLnByb3BlcnR5TmFtZXMsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbn07XG5zdHlmbiQ3LnJlbW92ZUJ5cGFzc2VzID0gZnVuY3Rpb24gKGVsZXMsIHByb3BzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICB2YXIgaXNCeXBhc3MgPSB0cnVlO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tqXTtcbiAgICB2YXIgZGlmZlByb3BzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBwcm9wc1tpXTtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShwcm9wLm5hbWUpO1xuICAgICAgaWYgKCFwcmV2UHJvcCB8fCAhcHJldlByb3AuYnlwYXNzKSB7XG4gICAgICAgIC8vIGlmIGEgYnlwYXNzIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBwcm9wLCBub3RoaW5nIG5lZWRzIHRvIGJlIHJlbW92ZWRcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSAnJzsgLy8gZW1wdHkgPT4gcmVtb3ZlIGJ5cGFzc1xuICAgICAgdmFyIHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKG5hbWUsIHZhbHVlLCB0cnVlKTtcbiAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wLm5hbWVdID0ge1xuICAgICAgICBwcmV2OiBwcmV2UHJvcFxuICAgICAgfTtcbiAgICAgIHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIHBhcnNlZFByb3ApO1xuICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUocHJvcC5uYW1lKTtcbiAgICB9IC8vIGZvciBwcm9wc1xuXG4gICAgdGhpcy51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG4gICAgaWYgKHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGVsZSwgZGlmZlByb3BzLCBpc0J5cGFzcyk7XG4gICAgfVxuICB9IC8vIGZvciBlbGVzXG59O1xuXG52YXIgc3R5Zm4kNiA9IHt9O1xuXG4vLyBnZXRzIHdoYXQgYW4gZW0gc2l6ZSBjb3JyZXNwb25kcyB0byBpbiBwaXhlbHMgcmVsYXRpdmUgdG8gYSBkb20gZWxlbWVudFxuc3R5Zm4kNi5nZXRFbVNpemVJblBpeGVscyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHB4ID0gdGhpcy5jb250YWluZXJDc3MoJ2ZvbnQtc2l6ZScpO1xuICBpZiAocHggIT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHB4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTsgLy8gZm9yIGhlYWRsZXNzXG4gIH1cbn07XG5cbi8vIGdldHMgY3NzIHByb3BlcnR5IGZyb20gdGhlIGNvcmUgY29udGFpbmVyXG5zdHlmbiQ2LmNvbnRhaW5lckNzcyA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZG9tRWxlbWVudCA9IGN5LmNvbnRhaW5lcigpO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gY3kud2luZG93KCk7XG4gIGlmIChjb250YWluZXJXaW5kb3cgJiYgZG9tRWxlbWVudCAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgIHJldHVybiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb21FbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BOYW1lKTtcbiAgfVxufTtcblxudmFyIHN0eWZuJDUgPSB7fTtcblxuLy8gZ2V0cyB0aGUgcmVuZGVyZWQgc3R5bGUgZm9yIGFuIGVsZW1lbnRcbnN0eWZuJDUuZ2V0UmVuZGVyZWRTdHlsZSA9IGZ1bmN0aW9uIChlbGUsIHByb3ApIHtcbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUoZWxlLCBwcm9wLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSYXdTdHlsZShlbGUsIHRydWUpO1xuICB9XG59O1xuXG4vLyBnZXRzIHRoZSByYXcgc3R5bGUgZm9yIGFuIGVsZW1lbnRcbnN0eWZuJDUuZ2V0UmF3U3R5bGUgPSBmdW5jdGlvbiAoZWxlLCBpc1JlbmRlcmVkVmFsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZWxlID0gZWxlWzBdOyAvLyBpbnN1cmUgaXQncyBhbiBlbGVtZW50XG5cbiAgaWYgKGVsZSkge1xuICAgIHZhciByc3R5bGUgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbaV07XG4gICAgICB2YXIgdmFsID0gc2VsZi5nZXRTdHlsZVByb3BlcnR5VmFsdWUoZWxlLCBwcm9wLm5hbWUsIGlzUmVuZGVyZWRWYWwpO1xuICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgIHJzdHlsZVtwcm9wLm5hbWVdID0gdmFsO1xuICAgICAgICByc3R5bGVbZGFzaDJjYW1lbChwcm9wLm5hbWUpXSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJzdHlsZTtcbiAgfVxufTtcbnN0eWZuJDUuZ2V0SW5kZXhlZFN0eWxlID0gZnVuY3Rpb24gKGVsZSwgcHJvcGVydHksIHN1YnByb3BlcnR5LCBpbmRleCkge1xuICB2YXIgcHN0eWxlID0gZWxlLnBzdHlsZShwcm9wZXJ0eSlbc3VicHJvcGVydHldW2luZGV4XTtcbiAgcmV0dXJuIHBzdHlsZSAhPSBudWxsID8gcHN0eWxlIDogZWxlLmN5KCkuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpW3N1YnByb3BlcnR5XVswXTtcbn07XG5zdHlmbiQ1LmdldFN0eWxlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChlbGUsIHByb3BOYW1lLCBpc1JlbmRlcmVkVmFsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZWxlID0gZWxlWzBdOyAvLyBpbnN1cmUgaXQncyBhbiBlbGVtZW50XG5cbiAgaWYgKGVsZSkge1xuICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICBpZiAocHJvcC5hbGlhcykge1xuICAgICAgcHJvcCA9IHByb3AucG9pbnRzVG87XG4gICAgfVxuICAgIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICAgIHZhciBzdHlsZVByb3AgPSBlbGUucHN0eWxlKHByb3AubmFtZSk7XG4gICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgdmFyIHZhbHVlID0gc3R5bGVQcm9wLnZhbHVlLFxuICAgICAgICB1bml0cyA9IHN0eWxlUHJvcC51bml0cyxcbiAgICAgICAgc3RyVmFsdWUgPSBzdHlsZVByb3Auc3RyVmFsdWU7XG4gICAgICBpZiAoaXNSZW5kZXJlZFZhbCAmJiB0eXBlLm51bWJlciAmJiB2YWx1ZSAhPSBudWxsICYmIG51bWJlciQxKHZhbHVlKSkge1xuICAgICAgICB2YXIgem9vbSA9IGVsZS5jeSgpLnpvb20oKTtcbiAgICAgICAgdmFyIGdldFJlbmRlcmVkVmFsdWUgPSBmdW5jdGlvbiBnZXRSZW5kZXJlZFZhbHVlKHZhbCkge1xuICAgICAgICAgIHJldHVybiB2YWwgKiB6b29tO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0VmFsdWVTdHJpbmdXaXRoVW5pdHMgPSBmdW5jdGlvbiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWwsIHVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJlbmRlcmVkVmFsdWUodmFsKSArIHVuaXRzO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaXNBcnJheVZhbHVlID0gYXJyYXkodmFsdWUpO1xuICAgICAgICB2YXIgaGF2ZVVuaXRzID0gaXNBcnJheVZhbHVlID8gdW5pdHMuZXZlcnkoZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICByZXR1cm4gdSAhPSBudWxsO1xuICAgICAgICB9KSA6IHVuaXRzICE9IG51bGw7XG4gICAgICAgIGlmIChoYXZlVW5pdHMpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2LCB1bml0c1tpXSk7XG4gICAgICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWx1ZSwgdW5pdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBzdHJpbmcodikgPyB2IDogJycgKyBnZXRSZW5kZXJlZFZhbHVlKHYpO1xuICAgICAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJycgKyBnZXRSZW5kZXJlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuc3R5Zm4kNS5nZXRBbmltYXRpb25TdGFydFN0eWxlID0gZnVuY3Rpb24gKGVsZSwgYW5pUHJvcHMpIHtcbiAgdmFyIHJzdHlsZSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFuaVByb3AgPSBhbmlQcm9wc1tpXTtcbiAgICB2YXIgbmFtZSA9IGFuaVByb3AubmFtZTtcbiAgICB2YXIgc3R5bGVQcm9wID0gZWxlLnBzdHlsZShuYW1lKTtcbiAgICBpZiAoc3R5bGVQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRoZW4gbWFrZSBhIHByb3Agb2YgaXRcbiAgICAgIGlmIChwbGFpbk9iamVjdChzdHlsZVByb3ApKSB7XG4gICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wLnN0clZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgcnN0eWxlW25hbWVdID0gc3R5bGVQcm9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnN0eWxlO1xufTtcbnN0eWZuJDUuZ2V0UHJvcHNMaXN0ID0gZnVuY3Rpb24gKHByb3BzT2JqKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHJzdHlsZSA9IFtdO1xuICB2YXIgc3R5bGUgPSBwcm9wc09iajtcbiAgdmFyIHByb3BzID0gc2VsZi5wcm9wZXJ0aWVzO1xuICBpZiAoc3R5bGUpIHtcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgIHZhciB2YWwgPSBzdHlsZVtuYW1lXTtcbiAgICAgIHZhciBwcm9wID0gcHJvcHNbbmFtZV0gfHwgcHJvcHNbY2FtZWwyZGFzaChuYW1lKV07XG4gICAgICB2YXIgc3R5bGVQcm9wID0gdGhpcy5wYXJzZShwcm9wLm5hbWUsIHZhbCk7XG4gICAgICBpZiAoc3R5bGVQcm9wKSB7XG4gICAgICAgIHJzdHlsZS5wdXNoKHN0eWxlUHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByc3R5bGU7XG59O1xuc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2ggPSBmdW5jdGlvbiAoZWxlLCBwcm9wTmFtZXMsIHNlZWQpIHtcbiAgdmFyIGhhc2ggPSBzZWVkLnNsaWNlKCk7XG4gIHZhciBuYW1lLCB2YWwsIHN0clZhbCwgY2hWYWw7XG4gIHZhciBpLCBqO1xuICBmb3IgKGkgPSAwOyBpIDwgcHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbmFtZSA9IHByb3BOYW1lc1tpXTtcbiAgICB2YWwgPSBlbGUucHN0eWxlKG5hbWUsIGZhbHNlKTtcbiAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAodmFsLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgaGFzaFswXSA9IGhhc2hJbnQoY2hWYWwsIGhhc2hbMF0pO1xuICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoY2hWYWwsIGhhc2hbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJWYWwgPSB2YWwuc3RyVmFsdWU7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgc3RyVmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoVmFsID0gc3RyVmFsLmNoYXJDb2RlQXQoaik7XG4gICAgICAgIGhhc2hbMF0gPSBoYXNoSW50KGNoVmFsLCBoYXNoWzBdKTtcbiAgICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoY2hWYWwsIGhhc2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzaDtcbn07XG5zdHlmbiQ1LmdldFByb3BlcnRpZXNIYXNoID0gc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7XG5cbnZhciBzdHlmbiQ0ID0ge307XG5zdHlmbiQ0LmFwcGVuZEZyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgdmFyIHN0eWxlID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbnRleHQgPSBqc29uW2ldO1xuICAgIHZhciBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7XG4gICAgdmFyIHByb3BzID0gY29udGV4dC5zdHlsZSB8fCBjb250ZXh0LmNzcztcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gICAgc3R5bGUuc2VsZWN0b3Ioc2VsZWN0b3IpOyAvLyBhcHBseSBzZWxlY3RvclxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBuYW1lcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tqXTtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgICAgc3R5bGUuY3NzKG5hbWUsIHZhbHVlKTsgLy8gYXBwbHkgcHJvcGVydHlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG4vLyBhY2Nlc3NpYmxlIGN5LnN0eWxlKCkgZnVuY3Rpb25cbnN0eWZuJDQuZnJvbUpzb24gPSBmdW5jdGlvbiAoanNvbikge1xuICB2YXIgc3R5bGUgPSB0aGlzO1xuICBzdHlsZS5yZXNldFRvRGVmYXVsdCgpO1xuICBzdHlsZS5hcHBlbmRGcm9tSnNvbihqc29uKTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcblxuLy8gZ2V0IGpzb24gZnJvbSBjeS5zdHlsZSgpIGFwaVxuc3R5Zm4kNC5qc29uID0gZnVuY3Rpb24gKCkge1xuICB2YXIganNvbiA9IFtdO1xuICBmb3IgKHZhciBpID0gdGhpcy5kZWZhdWx0TGVuZ3RoOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjeHQgPSB0aGlzW2ldO1xuICAgIHZhciBzZWxlY3RvciA9IGN4dC5zZWxlY3RvcjtcbiAgICB2YXIgcHJvcHMgPSBjeHQucHJvcGVydGllcztcbiAgICB2YXIgY3NzID0ge307XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wc1tqXTtcbiAgICAgIGNzc1twcm9wLm5hbWVdID0gcHJvcC5zdHJWYWx1ZTtcbiAgICB9XG4gICAganNvbi5wdXNoKHtcbiAgICAgIHNlbGVjdG9yOiAhc2VsZWN0b3IgPyAnY29yZScgOiBzZWxlY3Rvci50b1N0cmluZygpLFxuICAgICAgc3R5bGU6IGNzc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBqc29uO1xufTtcblxudmFyIHN0eWZuJDMgPSB7fTtcbnN0eWZuJDMuYXBwZW5kRnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc3R5bGUgPSB0aGlzO1xuICB2YXIgcmVtYWluaW5nID0gJycgKyBzdHJpbmc7XG4gIHZhciBzZWxBbmRCbG9ja1N0cjtcbiAgdmFyIGJsb2NrUmVtO1xuICB2YXIgcHJvcEFuZFZhbFN0cjtcblxuICAvLyByZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgc3R5bGUgc3RyaW5nXG4gIHJlbWFpbmluZyA9IHJlbWFpbmluZy5yZXBsYWNlKC9bL11bKl0oXFxzfC4pKz9bKl1bL10vZywgJycpO1xuICBmdW5jdGlvbiByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKSB7XG4gICAgLy8gcmVtb3ZlIHRoZSBwYXJzZWQgc2VsZWN0b3IgYW5kIGJsb2NrIGZyb20gdGhlIHJlbWFpbmluZyB0ZXh0IHRvIHBhcnNlXG4gICAgaWYgKHJlbWFpbmluZy5sZW5ndGggPiBzZWxBbmRCbG9ja1N0ci5sZW5ndGgpIHtcbiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHIoc2VsQW5kQmxvY2tTdHIubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtYWluaW5nID0gJyc7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlbW92ZVByb3BBbmRWYWxGcm9tUmVtKCkge1xuICAgIC8vIHJlbW92ZSB0aGUgcGFyc2VkIHByb3BlcnR5IGFuZCB2YWx1ZSBmcm9tIHRoZSByZW1haW5pbmcgYmxvY2sgdGV4dCB0byBwYXJzZVxuICAgIGlmIChibG9ja1JlbS5sZW5ndGggPiBwcm9wQW5kVmFsU3RyLmxlbmd0aCkge1xuICAgICAgYmxvY2tSZW0gPSBibG9ja1JlbS5zdWJzdHIocHJvcEFuZFZhbFN0ci5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBibG9ja1JlbSA9ICcnO1xuICAgIH1cbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgdmFyIG5vdGhpbmdMZWZ0VG9QYXJzZSA9IHJlbWFpbmluZy5tYXRjaCgvXlxccyokLyk7XG4gICAgaWYgKG5vdGhpbmdMZWZ0VG9QYXJzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBzZWxBbmRCbG9jayA9IHJlbWFpbmluZy5tYXRjaCgvXlxccyooKD86LnxcXHMpKz8pXFxzKlxceygoPzoufFxccykrPylcXH0vKTtcbiAgICBpZiAoIXNlbEFuZEJsb2NrKSB7XG4gICAgICB3YXJuKCdIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAnICsgcmVtYWluaW5nKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzZWxBbmRCbG9ja1N0ciA9IHNlbEFuZEJsb2NrWzBdO1xuXG4gICAgLy8gcGFyc2UgdGhlIHNlbGVjdG9yXG4gICAgdmFyIHNlbGVjdG9yU3RyID0gc2VsQW5kQmxvY2tbMV07XG4gICAgaWYgKHNlbGVjdG9yU3RyICE9PSAnY29yZScpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihzZWxlY3RvclN0cik7XG4gICAgICBpZiAoc2VsZWN0b3IuaW52YWxpZCkge1xuICAgICAgICB3YXJuKCdTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIHNlbGVjdG9yIGZvdW5kIGluIHN0cmluZyBzdHlsZXNoZWV0OiAnICsgc2VsZWN0b3JTdHIpO1xuXG4gICAgICAgIC8vIHNraXAgdGhpcyBzZWxlY3RvciBhbmQgYmxvY2tcbiAgICAgICAgcmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBhcnNlIHRoZSBibG9jayBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXNcbiAgICB2YXIgYmxvY2tTdHIgPSBzZWxBbmRCbG9ja1syXTtcbiAgICB2YXIgaW52YWxpZEJsb2NrID0gZmFsc2U7XG4gICAgYmxvY2tSZW0gPSBibG9ja1N0cjtcbiAgICB2YXIgcHJvcHMgPSBbXTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgX25vdGhpbmdMZWZ0VG9QYXJzZSA9IGJsb2NrUmVtLm1hdGNoKC9eXFxzKiQvKTtcbiAgICAgIGlmIChfbm90aGluZ0xlZnRUb1BhcnNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BBbmRWYWwgPSBibG9ja1JlbS5tYXRjaCgvXlxccyooLis/KVxccyo6XFxzKiguKz8pKD86XFxzKjt8XFxzKiQpLyk7XG4gICAgICBpZiAoIXByb3BBbmRWYWwpIHtcbiAgICAgICAgd2FybignU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBmb3JtYXR0aW5nIG9mIHN0eWxlIHByb3BlcnR5IGFuZCB2YWx1ZSBkZWZpbml0aW9ucyBmb3VuZCBpbjonICsgYmxvY2tTdHIpO1xuICAgICAgICBpbnZhbGlkQmxvY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByb3BBbmRWYWxTdHIgPSBwcm9wQW5kVmFsWzBdO1xuICAgICAgdmFyIHByb3BTdHIgPSBwcm9wQW5kVmFsWzFdO1xuICAgICAgdmFyIHZhbFN0ciA9IHByb3BBbmRWYWxbMl07XG4gICAgICB2YXIgcHJvcCA9IHNlbGYucHJvcGVydGllc1twcm9wU3RyXTtcbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICB3YXJuKCdTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiAnICsgcHJvcEFuZFZhbFN0cik7XG5cbiAgICAgICAgLy8gc2tpcCB0aGlzIHByb3BlcnR5IGluIHRoZSBibG9ja1xuICAgICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJzZWRQcm9wID0gc3R5bGUucGFyc2UocHJvcFN0ciwgdmFsU3RyKTtcbiAgICAgIGlmICghcGFyc2VkUHJvcCkge1xuICAgICAgICB3YXJuKCdTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAnICsgcHJvcEFuZFZhbFN0cik7XG5cbiAgICAgICAgLy8gc2tpcCB0aGlzIHByb3BlcnR5IGluIHRoZSBibG9ja1xuICAgICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByb3BzLnB1c2goe1xuICAgICAgICBuYW1lOiBwcm9wU3RyLFxuICAgICAgICB2YWw6IHZhbFN0clxuICAgICAgfSk7XG4gICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgIH1cbiAgICBpZiAoaW52YWxpZEJsb2NrKSB7XG4gICAgICByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHB1dCB0aGUgcGFyc2VkIGJsb2NrIGluIHRoZSBzdHlsZVxuICAgIHN0eWxlLnNlbGVjdG9yKHNlbGVjdG9yU3RyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgX3Byb3AgPSBwcm9wc1tpXTtcbiAgICAgIHN0eWxlLmNzcyhfcHJvcC5uYW1lLCBfcHJvcC52YWwpO1xuICAgIH1cbiAgICByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKTtcbiAgfVxuICByZXR1cm4gc3R5bGU7XG59O1xuc3R5Zm4kMy5mcm9tU3RyaW5nID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgc3R5bGUgPSB0aGlzO1xuICBzdHlsZS5yZXNldFRvRGVmYXVsdCgpO1xuICBzdHlsZS5hcHBlbmRGcm9tU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciBzdHlmbiQyID0ge307XG4oZnVuY3Rpb24gKCkge1xuICB2YXIgbnVtYmVyJDEgPSBudW1iZXI7XG4gIHZhciByZ2JhID0gcmdiYU5vQmFja1JlZnM7XG4gIHZhciBoc2xhID0gaHNsYU5vQmFja1JlZnM7XG4gIHZhciBoZXgzJDEgPSBoZXgzO1xuICB2YXIgaGV4NiQxID0gaGV4NjtcbiAgdmFyIGRhdGEgPSBmdW5jdGlvbiBkYXRhKHByZWZpeCkge1xuICAgIHJldHVybiAnXicgKyBwcmVmaXggKyAnXFxcXHMqXFxcXChcXFxccyooW1xcXFx3XFxcXC5dKylcXFxccypcXFxcKSQnO1xuICB9O1xuICB2YXIgbWFwRGF0YSA9IGZ1bmN0aW9uIG1hcERhdGEocHJlZml4KSB7XG4gICAgdmFyIG1hcEFyZyA9IG51bWJlciQxICsgJ3xcXFxcdyt8JyArIHJnYmEgKyAnfCcgKyBoc2xhICsgJ3wnICsgaGV4MyQxICsgJ3wnICsgaGV4NiQxO1xuICAgIHJldHVybiAnXicgKyBwcmVmaXggKyAnXFxcXHMqXFxcXCgoW1xcXFx3XFxcXC5dKylcXFxccypcXFxcLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKlxcXFwsXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqLFxcXFxzKignICsgbWFwQXJnICsgJylcXFxccypcXFxcLFxcXFxzKignICsgbWFwQXJnICsgJylcXFxcKSQnO1xuICB9O1xuICB2YXIgdXJsUmVnZXhlcyA9IFsnXnVybFxcXFxzKlxcXFwoXFxcXHMqW1xcJ1wiXT8oLis/KVtcXCdcIl0/XFxcXHMqXFxcXCkkJywgJ14obm9uZSkkJywgJ14oLispJCddO1xuXG4gIC8vIGVhY2ggdmlzdWFsIHN0eWxlIHByb3BlcnR5IGhhcyBhIHR5cGUgYW5kIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gaXRcbiAgc3R5Zm4kMi50eXBlcyA9IHtcbiAgICB0aW1lOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICB1bml0czogJ3N8bXMnLFxuICAgICAgaW1wbGljaXRVbml0czogJ21zJ1xuICAgIH0sXG4gICAgcGVyY2VudDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMDAsXG4gICAgICB1bml0czogJyUnLFxuICAgICAgaW1wbGljaXRVbml0czogJyUnXG4gICAgfSxcbiAgICBwZXJjZW50YWdlczoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMDAsXG4gICAgICB1bml0czogJyUnLFxuICAgICAgaW1wbGljaXRVbml0czogJyUnLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIHplcm9PbmVOdW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIG1heDogMSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICB6ZXJvT25lTnVtYmVyczoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxLFxuICAgICAgdW5pdGxlc3M6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgbk9uZU9uZU51bWJlcjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAtMSxcbiAgICAgIG1heDogMSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBub25OZWdhdGl2ZUludDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgaW50ZWdlcjogdHJ1ZSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBub25OZWdhdGl2ZU51bWJlcjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgdW5pdGxlc3M6IHRydWVcbiAgICB9LFxuICAgIHBvc2l0aW9uOiB7XG4gICAgICBlbnVtczogWydwYXJlbnQnLCAnb3JpZ2luJ11cbiAgICB9LFxuICAgIG5vZGVTaXplOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBlbnVtczogWydsYWJlbCddXG4gICAgfSxcbiAgICBudW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBudW1iZXJzOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0bGVzczogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBwb3NpdGl2ZU51bWJlcjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgdW5pdGxlc3M6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBzdHJpY3RNaW46IHRydWVcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMFxuICAgIH0sXG4gICAgYmlkaXJlY3Rpb25hbFNpemU6IHtcbiAgICAgIG51bWJlcjogdHJ1ZVxuICAgIH0sXG4gICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIGFsbG93UGVyY2VudDogdHJ1ZVxuICAgIH0sXG4gICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgYmlkaXJlY3Rpb25hbFNpemVzOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgc2l6ZU1heWJlUGVyY2VudDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgYWxsb3dQZXJjZW50OiB0cnVlXG4gICAgfSxcbiAgICBheGlzRGlyZWN0aW9uOiB7XG4gICAgICBlbnVtczogWydob3Jpem9udGFsJywgJ2xlZnR3YXJkJywgJ3JpZ2h0d2FyZCcsICd2ZXJ0aWNhbCcsICd1cHdhcmQnLCAnZG93bndhcmQnLCAnYXV0byddXG4gICAgfSxcbiAgICBwYWRkaW5nUmVsYXRpdmVUbzoge1xuICAgICAgZW51bXM6IFsnd2lkdGgnLCAnaGVpZ2h0JywgJ2F2ZXJhZ2UnLCAnbWluJywgJ21heCddXG4gICAgfSxcbiAgICBiZ1dIOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBhbGxvd1BlcmNlbnQ6IHRydWUsXG4gICAgICBlbnVtczogWydhdXRvJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdQb3M6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIGFsbG93UGVyY2VudDogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBiZ1JlbGF0aXZlVG86IHtcbiAgICAgIGVudW1zOiBbJ2lubmVyJywgJ2luY2x1ZGUtcGFkZGluZyddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnUmVwZWF0OiB7XG4gICAgICBlbnVtczogWydyZXBlYXQnLCAncmVwZWF0LXgnLCAncmVwZWF0LXknLCAnbm8tcmVwZWF0J10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdGaXQ6IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAnY29udGFpbicsICdjb3ZlciddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnQ3Jvc3NPcmlnaW46IHtcbiAgICAgIGVudW1zOiBbJ2Fub255bW91cycsICd1c2UtY3JlZGVudGlhbHMnLCAnbnVsbCddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnQ2xpcDoge1xuICAgICAgZW51bXM6IFsnbm9uZScsICdub2RlJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdDb250YWlubWVudDoge1xuICAgICAgZW51bXM6IFsnaW5zaWRlJywgJ292ZXInXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgY29sb3I6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yczoge1xuICAgICAgY29sb3I6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgZmlsbDoge1xuICAgICAgZW51bXM6IFsnc29saWQnLCAnbGluZWFyLWdyYWRpZW50JywgJ3JhZGlhbC1ncmFkaWVudCddXG4gICAgfSxcbiAgICBib29sOiB7XG4gICAgICBlbnVtczogWyd5ZXMnLCAnbm8nXVxuICAgIH0sXG4gICAgYm9vbHM6IHtcbiAgICAgIGVudW1zOiBbJ3llcycsICdubyddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGxpbmVTdHlsZToge1xuICAgICAgZW51bXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCddXG4gICAgfSxcbiAgICBsaW5lQ2FwOiB7XG4gICAgICBlbnVtczogWydidXR0JywgJ3JvdW5kJywgJ3NxdWFyZSddXG4gICAgfSxcbiAgICBsaW5lUG9zaXRpb246IHtcbiAgICAgIGVudW1zOiBbJ2NlbnRlcicsICdpbnNpZGUnLCAnb3V0c2lkZSddXG4gICAgfSxcbiAgICBsaW5lSm9pbjoge1xuICAgICAgZW51bXM6IFsncm91bmQnLCAnYmV2ZWwnLCAnbWl0ZXInXVxuICAgIH0sXG4gICAgYm9yZGVyU3R5bGU6IHtcbiAgICAgIGVudW1zOiBbJ3NvbGlkJywgJ2RvdHRlZCcsICdkYXNoZWQnLCAnZG91YmxlJ11cbiAgICB9LFxuICAgIGN1cnZlU3R5bGU6IHtcbiAgICAgIGVudW1zOiBbJ2JlemllcicsICd1bmJ1bmRsZWQtYmV6aWVyJywgJ2hheXN0YWNrJywgJ3NlZ21lbnRzJywgJ3N0cmFpZ2h0JywgJ3N0cmFpZ2h0LXRyaWFuZ2xlJywgJ3RheGknLCAncm91bmQtc2VnbWVudHMnLCAncm91bmQtdGF4aSddXG4gICAgfSxcbiAgICByYWRpdXNUeXBlOiB7XG4gICAgICBlbnVtczogWydhcmMtcmFkaXVzJywgJ2luZmx1ZW5jZS1yYWRpdXMnXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBmb250RmFtaWx5OiB7XG4gICAgICByZWdleDogJ14oW1xcXFx3LSBcXFxcXCJdKyg/OlxcXFxzKixcXFxccypbXFxcXHctIFxcXFxcIl0rKSopJCdcbiAgICB9LFxuICAgIGZvbnRTdHlsZToge1xuICAgICAgZW51bXM6IFsnaXRhbGljJywgJ25vcm1hbCcsICdvYmxpcXVlJ11cbiAgICB9LFxuICAgIGZvbnRXZWlnaHQ6IHtcbiAgICAgIGVudW1zOiBbJ25vcm1hbCcsICdib2xkJywgJ2JvbGRlcicsICdsaWdodGVyJywgJzEwMCcsICcyMDAnLCAnMzAwJywgJzQwMCcsICc1MDAnLCAnNjAwJywgJzgwMCcsICc5MDAnLCAxMDAsIDIwMCwgMzAwLCA0MDAsIDUwMCwgNjAwLCA3MDAsIDgwMCwgOTAwXVxuICAgIH0sXG4gICAgdGV4dERlY29yYXRpb246IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAndW5kZXJsaW5lJywgJ292ZXJsaW5lJywgJ2xpbmUtdGhyb3VnaCddXG4gICAgfSxcbiAgICB0ZXh0VHJhbnNmb3JtOiB7XG4gICAgICBlbnVtczogWydub25lJywgJ3VwcGVyY2FzZScsICdsb3dlcmNhc2UnXVxuICAgIH0sXG4gICAgdGV4dFdyYXA6IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAnd3JhcCcsICdlbGxpcHNpcyddXG4gICAgfSxcbiAgICB0ZXh0T3ZlcmZsb3dXcmFwOiB7XG4gICAgICBlbnVtczogWyd3aGl0ZXNwYWNlJywgJ2FueXdoZXJlJ11cbiAgICB9LFxuICAgIHRleHRCYWNrZ3JvdW5kU2hhcGU6IHtcbiAgICAgIGVudW1zOiBbJ3JlY3RhbmdsZScsICdyb3VuZHJlY3RhbmdsZScsICdyb3VuZC1yZWN0YW5nbGUnXVxuICAgIH0sXG4gICAgbm9kZVNoYXBlOiB7XG4gICAgICBlbnVtczogWydyZWN0YW5nbGUnLCAncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJywgJ2N1dHJlY3RhbmdsZScsICdjdXQtcmVjdGFuZ2xlJywgJ2JvdHRvbXJvdW5kcmVjdGFuZ2xlJywgJ2JvdHRvbS1yb3VuZC1yZWN0YW5nbGUnLCAnYmFycmVsJywgJ2VsbGlwc2UnLCAndHJpYW5nbGUnLCAncm91bmQtdHJpYW5nbGUnLCAnc3F1YXJlJywgJ3BlbnRhZ29uJywgJ3JvdW5kLXBlbnRhZ29uJywgJ2hleGFnb24nLCAncm91bmQtaGV4YWdvbicsICdjb25jYXZlaGV4YWdvbicsICdjb25jYXZlLWhleGFnb24nLCAnaGVwdGFnb24nLCAncm91bmQtaGVwdGFnb24nLCAnb2N0YWdvbicsICdyb3VuZC1vY3RhZ29uJywgJ3RhZycsICdyb3VuZC10YWcnLCAnc3RhcicsICdkaWFtb25kJywgJ3JvdW5kLWRpYW1vbmQnLCAndmVlJywgJ3Job21ib2lkJywgJ3JpZ2h0LXJob21ib2lkJywgJ3BvbHlnb24nXVxuICAgIH0sXG4gICAgb3ZlcmxheVNoYXBlOiB7XG4gICAgICBlbnVtczogWydyb3VuZHJlY3RhbmdsZScsICdyb3VuZC1yZWN0YW5nbGUnLCAnZWxsaXBzZSddXG4gICAgfSxcbiAgICBjb3JuZXJSYWRpdXM6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIHVuaXRzOiAncHh8ZW0nLFxuICAgICAgaW1wbGljaXRVbml0czogJ3B4JyxcbiAgICAgIGVudW1zOiBbJ2F1dG8nXVxuICAgIH0sXG4gICAgY29tcG91bmRJbmNsdWRlTGFiZWxzOiB7XG4gICAgICBlbnVtczogWydpbmNsdWRlJywgJ2V4Y2x1ZGUnXVxuICAgIH0sXG4gICAgYXJyb3dTaGFwZToge1xuICAgICAgZW51bXM6IFsndGVlJywgJ3RyaWFuZ2xlJywgJ3RyaWFuZ2xlLXRlZScsICdjaXJjbGUtdHJpYW5nbGUnLCAndHJpYW5nbGUtY3Jvc3MnLCAndHJpYW5nbGUtYmFja2N1cnZlJywgJ3ZlZScsICdzcXVhcmUnLCAnY2lyY2xlJywgJ2RpYW1vbmQnLCAnY2hldnJvbicsICdub25lJ11cbiAgICB9LFxuICAgIGFycm93RmlsbDoge1xuICAgICAgZW51bXM6IFsnZmlsbGVkJywgJ2hvbGxvdyddXG4gICAgfSxcbiAgICBhcnJvd1dpZHRoOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0czogJyV8cHh8ZW0nLFxuICAgICAgaW1wbGljaXRVbml0czogJ3B4JyxcbiAgICAgIGVudW1zOiBbJ21hdGNoLWxpbmUnXVxuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgZW51bXM6IFsnZWxlbWVudCcsICdub25lJ11cbiAgICB9LFxuICAgIHZpc2liaWxpdHk6IHtcbiAgICAgIGVudW1zOiBbJ2hpZGRlbicsICd2aXNpYmxlJ11cbiAgICB9LFxuICAgIHpDb21wb3VuZERlcHRoOiB7XG4gICAgICBlbnVtczogWydib3R0b20nLCAnb3JwaGFuJywgJ2F1dG8nLCAndG9wJ11cbiAgICB9LFxuICAgIHpJbmRleENvbXBhcmU6IHtcbiAgICAgIGVudW1zOiBbJ2F1dG8nLCAnbWFudWFsJ11cbiAgICB9LFxuICAgIHZhbGlnbjoge1xuICAgICAgZW51bXM6IFsndG9wJywgJ2NlbnRlcicsICdib3R0b20nXVxuICAgIH0sXG4gICAgaGFsaWduOiB7XG4gICAgICBlbnVtczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddXG4gICAgfSxcbiAgICBqdXN0aWZpY2F0aW9uOiB7XG4gICAgICBlbnVtczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCcsICdhdXRvJ11cbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIHN0cmluZzogdHJ1ZVxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4OiBkYXRhKCdkYXRhJylcbiAgICB9LFxuICAgIGxheW91dERhdGE6IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICByZWdleDogZGF0YSgnbGF5b3V0RGF0YScpXG4gICAgfSxcbiAgICBzY3JhdGNoOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgcmVnZXg6IGRhdGEoJ3NjcmF0Y2gnKVxuICAgIH0sXG4gICAgbWFwRGF0YToge1xuICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4OiBtYXBEYXRhKCdtYXBEYXRhJylcbiAgICB9LFxuICAgIG1hcExheW91dERhdGE6IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICByZWdleDogbWFwRGF0YSgnbWFwTGF5b3V0RGF0YScpXG4gICAgfSxcbiAgICBtYXBTY3JhdGNoOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgcmVnZXg6IG1hcERhdGEoJ21hcFNjcmF0Y2gnKVxuICAgIH0sXG4gICAgZm46IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICBmbjogdHJ1ZVxuICAgIH0sXG4gICAgdXJsOiB7XG4gICAgICByZWdleGVzOiB1cmxSZWdleGVzLFxuICAgICAgc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICB1cmxzOiB7XG4gICAgICByZWdleGVzOiB1cmxSZWdleGVzLFxuICAgICAgc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIHByb3BMaXN0OiB7XG4gICAgICBwcm9wTGlzdDogdHJ1ZVxuICAgIH0sXG4gICAgYW5nbGU6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIHVuaXRzOiAnZGVnfHJhZCcsXG4gICAgICBpbXBsaWNpdFVuaXRzOiAncmFkJ1xuICAgIH0sXG4gICAgdGV4dFJvdGF0aW9uOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0czogJ2RlZ3xyYWQnLFxuICAgICAgaW1wbGljaXRVbml0czogJ3JhZCcsXG4gICAgICBlbnVtczogWydub25lJywgJ2F1dG9yb3RhdGUnXVxuICAgIH0sXG4gICAgcG9seWdvblBvaW50TGlzdDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBldmVuTXVsdGlwbGU6IHRydWUsXG4gICAgICBtaW46IC0xLFxuICAgICAgbWF4OiAxLFxuICAgICAgdW5pdGxlc3M6IHRydWVcbiAgICB9LFxuICAgIGVkZ2VEaXN0YW5jZXM6IHtcbiAgICAgIGVudW1zOiBbJ2ludGVyc2VjdGlvbicsICdub2RlLXBvc2l0aW9uJywgJ2VuZHBvaW50cyddXG4gICAgfSxcbiAgICBlZGdlRW5kcG9pbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgdW5pdHM6ICclfHB4fGVtfGRlZ3xyYWQnLFxuICAgICAgaW1wbGljaXRVbml0czogJ3B4JyxcbiAgICAgIGVudW1zOiBbJ2luc2lkZS10by1ub2RlJywgJ291dHNpZGUtdG8tbm9kZScsICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnLCAnb3V0c2lkZS10by1saW5lJywgJ291dHNpZGUtdG8tbGluZS1vci1sYWJlbCddLFxuICAgICAgc2luZ2xlRW51bTogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh2YWxBcnIsIHVuaXRzQXJyKSB7XG4gICAgICAgIHN3aXRjaCAodmFsQXJyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIC8vIGNhbiBiZSAlIG9yIHB4IG9ubHlcbiAgICAgICAgICAgIHJldHVybiB1bml0c0FyclswXSAhPT0gJ2RlZycgJiYgdW5pdHNBcnJbMF0gIT09ICdyYWQnICYmIHVuaXRzQXJyWzFdICE9PSAnZGVnJyAmJiB1bml0c0FyclsxXSAhPT0gJ3JhZCc7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgLy8gY2FuIGJlIGVudW0sIGRlZywgb3IgcmFkIG9ubHlcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcodmFsQXJyWzBdKSB8fCB1bml0c0FyclswXSA9PT0gJ2RlZycgfHwgdW5pdHNBcnJbMF0gPT09ICdyYWQnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGVhc2luZzoge1xuICAgICAgcmVnZXhlczogWydeKHNwcmluZylcXFxccypcXFxcKFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccypcXFxcKSQnLCAnXihjdWJpYy1iZXppZXIpXFxcXHMqXFxcXChcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccypcXFxcKSQnXSxcbiAgICAgIGVudW1zOiBbJ2xpbmVhcicsICdlYXNlJywgJ2Vhc2UtaW4nLCAnZWFzZS1vdXQnLCAnZWFzZS1pbi1vdXQnLCAnZWFzZS1pbi1zaW5lJywgJ2Vhc2Utb3V0LXNpbmUnLCAnZWFzZS1pbi1vdXQtc2luZScsICdlYXNlLWluLXF1YWQnLCAnZWFzZS1vdXQtcXVhZCcsICdlYXNlLWluLW91dC1xdWFkJywgJ2Vhc2UtaW4tY3ViaWMnLCAnZWFzZS1vdXQtY3ViaWMnLCAnZWFzZS1pbi1vdXQtY3ViaWMnLCAnZWFzZS1pbi1xdWFydCcsICdlYXNlLW91dC1xdWFydCcsICdlYXNlLWluLW91dC1xdWFydCcsICdlYXNlLWluLXF1aW50JywgJ2Vhc2Utb3V0LXF1aW50JywgJ2Vhc2UtaW4tb3V0LXF1aW50JywgJ2Vhc2UtaW4tZXhwbycsICdlYXNlLW91dC1leHBvJywgJ2Vhc2UtaW4tb3V0LWV4cG8nLCAnZWFzZS1pbi1jaXJjJywgJ2Vhc2Utb3V0LWNpcmMnLCAnZWFzZS1pbi1vdXQtY2lyYyddXG4gICAgfSxcbiAgICBncmFkaWVudERpcmVjdGlvbjoge1xuICAgICAgZW51bXM6IFsndG8tYm90dG9tJywgJ3RvLXRvcCcsICd0by1sZWZ0JywgJ3RvLXJpZ2h0JywgJ3RvLWJvdHRvbS1yaWdodCcsICd0by1ib3R0b20tbGVmdCcsICd0by10b3AtcmlnaHQnLCAndG8tdG9wLWxlZnQnLCAndG8tcmlnaHQtYm90dG9tJywgJ3RvLWxlZnQtYm90dG9tJywgJ3RvLXJpZ2h0LXRvcCcsICd0by1sZWZ0LXRvcCcgLy8gZGlmZmVyZW50IG9yZGVyXG4gICAgICBdXG4gICAgfSxcblxuICAgIGJvdW5kc0V4cGFuc2lvbjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUodmFsQXJyKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB2YWxBcnIubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbGVuZ3RoID09PSAxIHx8IGxlbmd0aCA9PT0gMiB8fCBsZW5ndGggPT09IDQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZGlmZiA9IHtcbiAgICB6ZXJvTm9uWmVybzogZnVuY3Rpb24gemVyb05vblplcm8odmFsMSwgdmFsMikge1xuICAgICAgaWYgKCh2YWwxID09IG51bGwgfHwgdmFsMiA9PSBudWxsKSAmJiB2YWwxICE9PSB2YWwyKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBudWxsIGNhc2VzIGNvdWxkIHJlcHJlc2VudCBhbnkgdmFsdWVcbiAgICAgIH1cbiAgICAgIGlmICh2YWwxID09IDAgJiYgdmFsMiAhPSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh2YWwxICE9IDAgJiYgdmFsMiA9PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkodmFsMSwgdmFsMikge1xuICAgICAgcmV0dXJuIHZhbDEgIT0gdmFsMjtcbiAgICB9LFxuICAgIGVtcHR5Tm9uRW1wdHk6IGZ1bmN0aW9uIGVtcHR5Tm9uRW1wdHkoc3RyMSwgc3RyMikge1xuICAgICAgdmFyIGVtcHR5MSA9IGVtcHR5U3RyaW5nKHN0cjEpO1xuICAgICAgdmFyIGVtcHR5MiA9IGVtcHR5U3RyaW5nKHN0cjIpO1xuICAgICAgcmV0dXJuIGVtcHR5MSAmJiAhZW1wdHkyIHx8ICFlbXB0eTEgJiYgZW1wdHkyO1xuICAgIH1cbiAgfTtcblxuICAvLyBkZWZpbmUgdmlzdWFsIHN0eWxlIHByb3BlcnRpZXNcbiAgLy9cbiAgLy8gLSBuLmIuIGFkZGluZyBhIG5ldyBncm91cCBvZiBwcm9wcyBtYXkgcmVxdWlyZSB1cGRhdGVzIHRvIHVwZGF0ZVN0eWxlSGludHMoKVxuICAvLyAtIGFkZGluZyBuZXcgcHJvcHMgdG8gYW4gZXhpc3RpbmcgZ3JvdXAgZ2V0cyBoYW5kbGVkIGF1dG9tYXRpY2FsbHlcblxuICB2YXIgdCA9IHN0eWZuJDIudHlwZXM7XG4gIHZhciBtYWluTGFiZWwgPSBbe1xuICAgIG5hbWU6ICdsYWJlbCcsXG4gICAgdHlwZTogdC50ZXh0LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5lbXB0eU5vbkVtcHR5XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1yb3RhdGlvbicsXG4gICAgdHlwZTogdC50ZXh0Um90YXRpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1tYXJnaW4teCcsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW1hcmdpbi15JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIHNvdXJjZUxhYmVsID0gW3tcbiAgICBuYW1lOiAnc291cmNlLWxhYmVsJyxcbiAgICB0eXBlOiB0LnRleHQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLXRleHQtcm90YXRpb24nLFxuICAgIHR5cGU6IHQudGV4dFJvdGF0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NvdXJjZS10ZXh0LW1hcmdpbi14JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NvdXJjZS10ZXh0LW1hcmdpbi15JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NvdXJjZS10ZXh0LW9mZnNldCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIHRhcmdldExhYmVsID0gW3tcbiAgICBuYW1lOiAndGFyZ2V0LWxhYmVsJyxcbiAgICB0eXBlOiB0LnRleHQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LXRleHQtcm90YXRpb24nLFxuICAgIHR5cGU6IHQudGV4dFJvdGF0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RhcmdldC10ZXh0LW1hcmdpbi14JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RhcmdldC10ZXh0LW1hcmdpbi15JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RhcmdldC10ZXh0LW9mZnNldCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGxhYmVsRGltZW5zaW9ucyA9IFt7XG4gICAgbmFtZTogJ2ZvbnQtZmFtaWx5JyxcbiAgICB0eXBlOiB0LmZvbnRGYW1pbHksXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnZm9udC1zdHlsZScsXG4gICAgdHlwZTogdC5mb250U3R5bGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnZm9udC13ZWlnaHQnLFxuICAgIHR5cGU6IHQuZm9udFdlaWdodCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdmb250LXNpemUnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LXRyYW5zZm9ybScsXG4gICAgdHlwZTogdC50ZXh0VHJhbnNmb3JtLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtd3JhcCcsXG4gICAgdHlwZTogdC50ZXh0V3JhcCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW92ZXJmbG93LXdyYXAnLFxuICAgIHR5cGU6IHQudGV4dE92ZXJmbG93V3JhcCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW1heC13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3V0bGluZS13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtaGVpZ2h0JyxcbiAgICB0eXBlOiB0LnBvc2l0aXZlTnVtYmVyLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGNvbW1vbkxhYmVsID0gW3tcbiAgICBuYW1lOiAndGV4dC12YWxpZ24nLFxuICAgIHR5cGU6IHQudmFsaWduLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtaGFsaWduJyxcbiAgICB0eXBlOiB0LmhhbGlnbixcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdjb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3V0bGluZS1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3V0bGluZS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmcnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJvcmRlci1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJvcmRlci1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtYm9yZGVyLXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1ib3JkZXItc3R5bGUnLFxuICAgIHR5cGU6IHQuYm9yZGVyU3R5bGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1iYWNrZ3JvdW5kLXNoYXBlJyxcbiAgICB0eXBlOiB0LnRleHRCYWNrZ3JvdW5kU2hhcGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1qdXN0aWZpY2F0aW9uJyxcbiAgICB0eXBlOiB0Lmp1c3RpZmljYXRpb25cbiAgfV07XG4gIHZhciBiZWhhdmlvciA9IFt7XG4gICAgbmFtZTogJ2V2ZW50cycsXG4gICAgdHlwZTogdC5ib29sLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtZXZlbnRzJyxcbiAgICB0eXBlOiB0LmJvb2wsXG4gICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuYW55XG4gIH1dO1xuICB2YXIgdmlzaWJpbGl0eSA9IFt7XG4gICAgbmFtZTogJ2Rpc3BsYXknLFxuICAgIHR5cGU6IHQuZGlzcGxheSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5hbnksXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55LFxuICAgIHRyaWdnZXJzQm91bmRzT2ZDb25uZWN0ZWRFZGdlczogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogJ3Zpc2liaWxpdHknLFxuICAgIHR5cGU6IHQudmlzaWJpbGl0eSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ21pbi16b29tZWQtZm9udC1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICd6LWNvbXBvdW5kLWRlcHRoJyxcbiAgICB0eXBlOiB0LnpDb21wb3VuZERlcHRoLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3otaW5kZXgtY29tcGFyZScsXG4gICAgdHlwZTogdC56SW5kZXhDb21wYXJlLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3otaW5kZXgnLFxuICAgIHR5cGU6IHQubnVtYmVyLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIG92ZXJsYXkgPSBbe1xuICAgIG5hbWU6ICdvdmVybGF5LXBhZGRpbmcnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnb3ZlcmxheS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LXNoYXBlJyxcbiAgICB0eXBlOiB0Lm92ZXJsYXlTaGFwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LWNvcm5lci1yYWRpdXMnLFxuICAgIHR5cGU6IHQuY29ybmVyUmFkaXVzXG4gIH1dO1xuICB2YXIgdW5kZXJsYXkgPSBbe1xuICAgIG5hbWU6ICd1bmRlcmxheS1wYWRkaW5nJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kZXJsYXktY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlcmxheS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlcmxheS1zaGFwZScsXG4gICAgdHlwZTogdC5vdmVybGF5U2hhcGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kZXJsYXktY29ybmVyLXJhZGl1cycsXG4gICAgdHlwZTogdC5jb3JuZXJSYWRpdXNcbiAgfV07XG4gIHZhciB0cmFuc2l0aW9uID0gW3tcbiAgICBuYW1lOiAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICAgdHlwZTogdC5wcm9wTGlzdFxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAgIHR5cGU6IHQudGltZVxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tZGVsYXknLFxuICAgIHR5cGU6IHQudGltZVxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgICB0eXBlOiB0LmVhc2luZ1xuICB9XTtcbiAgdmFyIG5vZGVTaXplSGFzaE92ZXJyaWRlID0gZnVuY3Rpb24gbm9kZVNpemVIYXNoT3ZlcnJpZGUoZWxlLCBwYXJzZWRQcm9wKSB7XG4gICAgaWYgKHBhcnNlZFByb3AudmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybiAtZWxlLnBvb2xJbmRleCgpOyAvLyBubyBoYXNoIGtleSBoaXRzIGlzIHVzaW5nIGxhYmVsIHNpemUgKGhpdHJhdGUgZm9yIHBlcmYgcHJvYmFibHkgbG93IGFueXdheSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnNlZFByb3AucGZWYWx1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBub2RlQm9keSA9IFt7XG4gICAgbmFtZTogJ2hlaWdodCcsXG4gICAgdHlwZTogdC5ub2RlU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnksXG4gICAgaGFzaE92ZXJyaWRlOiBub2RlU2l6ZUhhc2hPdmVycmlkZVxuICB9LCB7XG4gICAgbmFtZTogJ3dpZHRoJyxcbiAgICB0eXBlOiB0Lm5vZGVTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICBoYXNoT3ZlcnJpZGU6IG5vZGVTaXplSGFzaE92ZXJyaWRlXG4gIH0sIHtcbiAgICBuYW1lOiAnc2hhcGUnLFxuICAgIHR5cGU6IHQubm9kZVNoYXBlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NoYXBlLXBvbHlnb24tcG9pbnRzJyxcbiAgICB0eXBlOiB0LnBvbHlnb25Qb2ludExpc3QsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnY29ybmVyLXJhZGl1cycsXG4gICAgdHlwZTogdC5jb3JuZXJSYWRpdXNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1maWxsJyxcbiAgICB0eXBlOiB0LmZpbGxcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtYmxhY2tlbicsXG4gICAgdHlwZTogdC5uT25lT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycycsXG4gICAgdHlwZTogdC5jb2xvcnNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zJyxcbiAgICB0eXBlOiB0LnBlcmNlbnRhZ2VzXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24nLFxuICAgIHR5cGU6IHQuZ3JhZGllbnREaXJlY3Rpb25cbiAgfSwge1xuICAgIG5hbWU6ICdwYWRkaW5nJyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1yZWxhdGl2ZS10bycsXG4gICAgdHlwZTogdC5wYWRkaW5nUmVsYXRpdmVUbyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdib3VuZHMtZXhwYW5zaW9uJyxcbiAgICB0eXBlOiB0LmJvdW5kc0V4cGFuc2lvbixcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBub2RlQm9yZGVyID0gW3tcbiAgICBuYW1lOiAnYm9yZGVyLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1zdHlsZScsXG4gICAgdHlwZTogdC5ib3JkZXJTdHlsZVxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1jYXAnLFxuICAgIHR5cGU6IHQubGluZUNhcFxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1qb2luJyxcbiAgICB0eXBlOiB0LmxpbmVKb2luXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLWRhc2gtcGF0dGVybicsXG4gICAgdHlwZTogdC5udW1iZXJzXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLWRhc2gtb2Zmc2V0JyxcbiAgICB0eXBlOiB0Lm51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1wb3NpdGlvbicsXG4gICAgdHlwZTogdC5saW5lUG9zaXRpb25cbiAgfV07XG4gIHZhciBub2RlT3V0bGluZSA9IFt7XG4gICAgbmFtZTogJ291dGxpbmUtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRsaW5lLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ291dGxpbmUtd2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRsaW5lLXN0eWxlJyxcbiAgICB0eXBlOiB0LmJvcmRlclN0eWxlXG4gIH0sIHtcbiAgICBuYW1lOiAnb3V0bGluZS1vZmZzZXQnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBiYWNrZ3JvdW5kSW1hZ2UgPSBbe1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICB0eXBlOiB0LnVybHNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luJyxcbiAgICB0eXBlOiB0LmJnQ3Jvc3NPcmlnaW5cbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlcnNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50JyxcbiAgICB0eXBlOiB0LmJnQ29udGFpbm1lbnRcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZycsXG4gICAgdHlwZTogdC5ib29sc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teCcsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teScsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLFxuICAgIHR5cGU6IHQuYmdSZWxhdGl2ZVRvXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nLFxuICAgIHR5cGU6IHQuYmdSZWxhdGl2ZVRvXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAgIHR5cGU6IHQuYmdSZXBlYXRcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWZpdCcsXG4gICAgdHlwZTogdC5iZ0ZpdFxuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtY2xpcCcsXG4gICAgdHlwZTogdC5iZ0NsaXBcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLXdpZHRoJyxcbiAgICB0eXBlOiB0LmJnV0hcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWhlaWdodCcsXG4gICAgdHlwZTogdC5iZ1dIXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1vZmZzZXQteCcsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtb2Zmc2V0LXknLFxuICAgIHR5cGU6IHQuYmdQb3NcbiAgfV07XG4gIHZhciBjb21wb3VuZCA9IFt7XG4gICAgbmFtZTogJ3Bvc2l0aW9uJyxcbiAgICB0eXBlOiB0LnBvc2l0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJyxcbiAgICB0eXBlOiB0LmNvbXBvdW5kSW5jbHVkZUxhYmVscyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4td2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4td2lkdGgtYmlhcy1sZWZ0JyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbWluLXdpZHRoLWJpYXMtcmlnaHQnLFxuICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4taGVpZ2h0JyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbWluLWhlaWdodC1iaWFzLXRvcCcsXG4gICAgdHlwZTogdC5zaXplTWF5YmVQZXJjZW50LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nLFxuICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBlZGdlTGluZSA9IFt7XG4gICAgbmFtZTogJ2xpbmUtc3R5bGUnLFxuICAgIHR5cGU6IHQubGluZVN0eWxlXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZmlsbCcsXG4gICAgdHlwZTogdC5maWxsXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1jYXAnLFxuICAgIHR5cGU6IHQubGluZUNhcFxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1kYXNoLXBhdHRlcm4nLFxuICAgIHR5cGU6IHQubnVtYmVyc1xuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZGFzaC1vZmZzZXQnLFxuICAgIHR5cGU6IHQubnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1vdXRsaW5lLXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICdsaW5lLW91dGxpbmUtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzJyxcbiAgICB0eXBlOiB0LmNvbG9yc1xuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnLFxuICAgIHR5cGU6IHQucGVyY2VudGFnZXNcbiAgfSwge1xuICAgIG5hbWU6ICdjdXJ2ZS1zdHlsZScsXG4gICAgdHlwZTogdC5jdXJ2ZVN0eWxlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiAnaGF5c3RhY2stcmFkaXVzJyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLWVuZHBvaW50JyxcbiAgICB0eXBlOiB0LmVkZ2VFbmRwb2ludCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXJnZXQtZW5kcG9pbnQnLFxuICAgIHR5cGU6IHQuZWRnZUVuZHBvaW50LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemVzLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtd2VpZ2h0cycsXG4gICAgdHlwZTogdC5udW1iZXJzLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtZGlzdGFuY2VzJyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplcyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzZWdtZW50LXdlaWdodHMnLFxuICAgIHR5cGU6IHQubnVtYmVycyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzZWdtZW50LXJhZGlpJyxcbiAgICB0eXBlOiB0Lm51bWJlcnMsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAncmFkaXVzLXR5cGUnLFxuICAgIHR5cGU6IHQucmFkaXVzVHlwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXhpLXR1cm4nLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGF4aS10dXJuLW1pbi1kaXN0YW5jZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RheGktZGlyZWN0aW9uJyxcbiAgICB0eXBlOiB0LmF4aXNEaXJlY3Rpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGF4aS1yYWRpdXMnLFxuICAgIHR5cGU6IHQubnVtYmVyLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2VkZ2UtZGlzdGFuY2VzJyxcbiAgICB0eXBlOiB0LmVkZ2VEaXN0YW5jZXMsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctc2NhbGUnLFxuICAgIHR5cGU6IHQucG9zaXRpdmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbG9vcC1kaXJlY3Rpb24nLFxuICAgIHR5cGU6IHQuYW5nbGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbG9vcC1zd2VlcCcsXG4gICAgdHlwZTogdC5hbmdsZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGdob3N0ID0gW3tcbiAgICBuYW1lOiAnZ2hvc3QnLFxuICAgIHR5cGU6IHQuYm9vbCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vZmZzZXQteCcsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vZmZzZXQteScsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfV07XG4gIHZhciBjb3JlID0gW3tcbiAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplXG4gIH0sIHtcbiAgICBuYW1lOiAnYWN0aXZlLWJnLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYWN0aXZlLWJnLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2FjdGl2ZS1iZy1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH1dO1xuXG4gIC8vIHBpZSBiYWNrZ3JvdW5kcyBmb3Igbm9kZXNcbiAgdmFyIHBpZSA9IFtdO1xuICBzdHlmbiQyLnBpZUJhY2tncm91bmROID0gMTY7IC8vIGJlY2F1c2UgdGhlIHBpZSBwcm9wZXJ0aWVzIGFyZSBudW1iZXJlZCwgZ2l2ZSBhY2Nlc3MgdG8gYSBjb25zdGFudCBOIChmb3IgcmVuZGVyZXIgdXNlKVxuICBwaWUucHVzaCh7XG4gICAgbmFtZTogJ3BpZS1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnRcbiAgfSk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0eWZuJDIucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0pO1xuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtc2l6ZScsXG4gICAgICB0eXBlOiB0LnBlcmNlbnRcbiAgICB9KTtcbiAgICBwaWUucHVzaCh7XG4gICAgICBuYW1lOiAncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gICAgfSk7XG4gIH1cblxuICAvLyBlZGdlIGFycm93c1xuICB2YXIgZWRnZUFycm93ID0gW107XG4gIHZhciBhcnJvd1ByZWZpeGVzID0gc3R5Zm4kMi5hcnJvd1ByZWZpeGVzID0gWydzb3VyY2UnLCAnbWlkLXNvdXJjZScsICd0YXJnZXQnLCAnbWlkLXRhcmdldCddO1xuICBbe1xuICAgIG5hbWU6ICdhcnJvdy1zaGFwZScsXG4gICAgdHlwZTogdC5hcnJvd1NoYXBlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctZmlsbCcsXG4gICAgdHlwZTogdC5hcnJvd0ZpbGxcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy13aWR0aCcsXG4gICAgdHlwZTogdC5hcnJvd1dpZHRoXG4gIH1dLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICBhcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgdmFyIG5hbWUgPSBwcmVmaXggKyAnLScgKyBwcm9wLm5hbWU7XG4gICAgICB2YXIgdHlwZSA9IHByb3AudHlwZSxcbiAgICAgICAgdHJpZ2dlcnNCb3VuZHMgPSBwcm9wLnRyaWdnZXJzQm91bmRzO1xuICAgICAgZWRnZUFycm93LnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB0cmlnZ2Vyc0JvdW5kczogdHJpZ2dlcnNCb3VuZHNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB7fSk7XG4gIHZhciBwcm9wcyA9IHN0eWZuJDIucHJvcGVydGllcyA9IFtdLmNvbmNhdChiZWhhdmlvciwgdHJhbnNpdGlvbiwgdmlzaWJpbGl0eSwgb3ZlcmxheSwgdW5kZXJsYXksIGdob3N0LCBjb21tb25MYWJlbCwgbGFiZWxEaW1lbnNpb25zLCBtYWluTGFiZWwsIHNvdXJjZUxhYmVsLCB0YXJnZXRMYWJlbCwgbm9kZUJvZHksIG5vZGVCb3JkZXIsIG5vZGVPdXRsaW5lLCBiYWNrZ3JvdW5kSW1hZ2UsIHBpZSwgY29tcG91bmQsIGVkZ2VMaW5lLCBlZGdlQXJyb3csIGNvcmUpO1xuICB2YXIgcHJvcEdyb3VwcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cHMgPSB7XG4gICAgLy8gY29tbW9uIHRvIGFsbCBlbGVzXG4gICAgYmVoYXZpb3I6IGJlaGF2aW9yLFxuICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24sXG4gICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eSxcbiAgICBvdmVybGF5OiBvdmVybGF5LFxuICAgIHVuZGVybGF5OiB1bmRlcmxheSxcbiAgICBnaG9zdDogZ2hvc3QsXG4gICAgLy8gbGFiZWxzXG4gICAgY29tbW9uTGFiZWw6IGNvbW1vbkxhYmVsLFxuICAgIGxhYmVsRGltZW5zaW9uczogbGFiZWxEaW1lbnNpb25zLFxuICAgIG1haW5MYWJlbDogbWFpbkxhYmVsLFxuICAgIHNvdXJjZUxhYmVsOiBzb3VyY2VMYWJlbCxcbiAgICB0YXJnZXRMYWJlbDogdGFyZ2V0TGFiZWwsXG4gICAgLy8gbm9kZSBwcm9wc1xuICAgIG5vZGVCb2R5OiBub2RlQm9keSxcbiAgICBub2RlQm9yZGVyOiBub2RlQm9yZGVyLFxuICAgIG5vZGVPdXRsaW5lOiBub2RlT3V0bGluZSxcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGJhY2tncm91bmRJbWFnZSxcbiAgICBwaWU6IHBpZSxcbiAgICBjb21wb3VuZDogY29tcG91bmQsXG4gICAgLy8gZWRnZSBwcm9wc1xuICAgIGVkZ2VMaW5lOiBlZGdlTGluZSxcbiAgICBlZGdlQXJyb3c6IGVkZ2VBcnJvdyxcbiAgICBjb3JlOiBjb3JlXG4gIH07XG4gIHZhciBwcm9wR3JvdXBOYW1lcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cE5hbWVzID0ge307XG4gIHZhciBwcm9wR3JvdXBLZXlzID0gc3R5Zm4kMi5wcm9wZXJ0eUdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKHByb3BHcm91cHMpO1xuICBwcm9wR3JvdXBLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHByb3BHcm91cE5hbWVzW2tleV0gPSBwcm9wR3JvdXBzW2tleV0ubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcC5uYW1lO1xuICAgIH0pO1xuICAgIHByb3BHcm91cHNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcC5ncm91cEtleSA9IGtleTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gZGVmaW5lIGFsaWFzZXNcbiAgdmFyIGFsaWFzZXMgPSBzdHlmbiQyLmFsaWFzZXMgPSBbe1xuICAgIG5hbWU6ICdjb250ZW50JyxcbiAgICBwb2ludHNUbzogJ2xhYmVsJ1xuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2UnLFxuICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnXG4gIH0sIHtcbiAgICBuYW1lOiAnY29udHJvbC1wb2ludC13ZWlnaHQnLFxuICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC13ZWlnaHRzJ1xuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtZGlzdGFuY2UnLFxuICAgIHBvaW50c1RvOiAnc2VnbWVudC1kaXN0YW5jZXMnXG4gIH0sIHtcbiAgICBuYW1lOiAnc2VnbWVudC13ZWlnaHQnLFxuICAgIHBvaW50c1RvOiAnc2VnbWVudC13ZWlnaHRzJ1xuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtcmFkaXVzJyxcbiAgICBwb2ludHNUbzogJ3NlZ21lbnQtcmFkaWknXG4gIH0sIHtcbiAgICBuYW1lOiAnZWRnZS10ZXh0LXJvdGF0aW9uJyxcbiAgICBwb2ludHNUbzogJ3RleHQtcm90YXRpb24nXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1sZWZ0JyxcbiAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1yaWdodCcsXG4gICAgcG9pbnRzVG86ICdwYWRkaW5nJ1xuICB9LCB7XG4gICAgbmFtZTogJ3BhZGRpbmctdG9wJyxcbiAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1ib3R0b20nLFxuICAgIHBvaW50c1RvOiAncGFkZGluZydcbiAgfV07XG5cbiAgLy8gbGlzdCBvZiBwcm9wZXJ0eSBuYW1lc1xuICBzdHlmbiQyLnByb3BlcnR5TmFtZXMgPSBwcm9wcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcC5uYW1lO1xuICB9KTtcblxuICAvLyBhbGxvdyBhY2Nlc3Mgb2YgcHJvcGVydGllcyBieSBuYW1lICggZS5nLiBzdHlsZS5wcm9wZXJ0aWVzLmhlaWdodCApXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBwcm9wcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcHJvcCA9IHByb3BzW19pXTtcbiAgICBwcm9wc1twcm9wLm5hbWVdID0gcHJvcDsgLy8gYWxsb3cgbG9va3VwIGJ5IG5hbWVcbiAgfVxuXG4gIC8vIG1hcCBhbGlhc2VzXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGFsaWFzZXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBhbGlhcyA9IGFsaWFzZXNbX2kyXTtcbiAgICB2YXIgcG9pbnRzVG9Qcm9wID0gcHJvcHNbYWxpYXMucG9pbnRzVG9dO1xuICAgIHZhciBhbGlhc1Byb3AgPSB7XG4gICAgICBuYW1lOiBhbGlhcy5uYW1lLFxuICAgICAgYWxpYXM6IHRydWUsXG4gICAgICBwb2ludHNUbzogcG9pbnRzVG9Qcm9wXG4gICAgfTtcblxuICAgIC8vIGFkZCBhbGlhcyBwcm9wIGZvciBwYXJzaW5nXG4gICAgcHJvcHMucHVzaChhbGlhc1Byb3ApO1xuICAgIHByb3BzW2FsaWFzLm5hbWVdID0gYWxpYXNQcm9wOyAvLyBhbGxvdyBsb29rdXAgYnkgbmFtZVxuICB9XG59KSgpO1xuXG5zdHlmbiQyLmdldERlZmF1bHRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbbmFtZV07XG59O1xuc3R5Zm4kMi5nZXREZWZhdWx0UHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgaWYgKF9wLmRlZmF1bHRQcm9wZXJ0aWVzICE9IG51bGwpIHtcbiAgICByZXR1cm4gX3AuZGVmYXVsdFByb3BlcnRpZXM7XG4gIH1cbiAgdmFyIHJhd1Byb3BzID0gZXh0ZW5kKHtcbiAgICAvLyBjb3JlIHByb3BzXG4gICAgJ3NlbGVjdGlvbi1ib3gtY29sb3InOiAnI2RkZCcsXG4gICAgJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eSc6IDAuNjUsXG4gICAgJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJzogJyNhYWEnLFxuICAgICdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCc6IDEsXG4gICAgJ2FjdGl2ZS1iZy1jb2xvcic6ICdibGFjaycsXG4gICAgJ2FjdGl2ZS1iZy1vcGFjaXR5JzogMC4xNSxcbiAgICAnYWN0aXZlLWJnLXNpemUnOiAzMCxcbiAgICAnb3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yJzogJyMwMDAnLFxuICAgICdvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSc6IDAuMTI1LFxuICAgIC8vIGNvbW1vbiBub2RlL2VkZ2UgcHJvcHNcbiAgICAnZXZlbnRzJzogJ3llcycsXG4gICAgJ3RleHQtZXZlbnRzJzogJ25vJyxcbiAgICAndGV4dC12YWxpZ24nOiAndG9wJyxcbiAgICAndGV4dC1oYWxpZ24nOiAnY2VudGVyJyxcbiAgICAndGV4dC1qdXN0aWZpY2F0aW9uJzogJ2F1dG8nLFxuICAgICdsaW5lLWhlaWdodCc6IDEsXG4gICAgJ2NvbG9yJzogJyMwMDAnLFxuICAgICd0ZXh0LW91dGxpbmUtY29sb3InOiAnIzAwMCcsXG4gICAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDAsXG4gICAgJ3RleHQtb3V0bGluZS1vcGFjaXR5JzogMSxcbiAgICAndGV4dC1vcGFjaXR5JzogMSxcbiAgICAndGV4dC1kZWNvcmF0aW9uJzogJ25vbmUnLFxuICAgICd0ZXh0LXRyYW5zZm9ybSc6ICdub25lJyxcbiAgICAndGV4dC13cmFwJzogJ25vbmUnLFxuICAgICd0ZXh0LW92ZXJmbG93LXdyYXAnOiAnd2hpdGVzcGFjZScsXG4gICAgJ3RleHQtbWF4LXdpZHRoJzogOTk5OSxcbiAgICAndGV4dC1iYWNrZ3JvdW5kLWNvbG9yJzogJyMwMDAnLFxuICAgICd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSc6IDAsXG4gICAgJ3RleHQtYmFja2dyb3VuZC1zaGFwZSc6ICdyZWN0YW5nbGUnLFxuICAgICd0ZXh0LWJhY2tncm91bmQtcGFkZGluZyc6IDAsXG4gICAgJ3RleHQtYm9yZGVyLW9wYWNpdHknOiAwLFxuICAgICd0ZXh0LWJvcmRlci13aWR0aCc6IDAsXG4gICAgJ3RleHQtYm9yZGVyLXN0eWxlJzogJ3NvbGlkJyxcbiAgICAndGV4dC1ib3JkZXItY29sb3InOiAnIzAwMCcsXG4gICAgJ2ZvbnQtZmFtaWx5JzogJ0hlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYnLFxuICAgICdmb250LXN0eWxlJzogJ25vcm1hbCcsXG4gICAgJ2ZvbnQtd2VpZ2h0JzogJ25vcm1hbCcsXG4gICAgJ2ZvbnQtc2l6ZSc6IDE2LFxuICAgICdtaW4tem9vbWVkLWZvbnQtc2l6ZSc6IDAsXG4gICAgJ3RleHQtcm90YXRpb24nOiAnbm9uZScsXG4gICAgJ3NvdXJjZS10ZXh0LXJvdGF0aW9uJzogJ25vbmUnLFxuICAgICd0YXJnZXQtdGV4dC1yb3RhdGlvbic6ICdub25lJyxcbiAgICAndmlzaWJpbGl0eSc6ICd2aXNpYmxlJyxcbiAgICAnZGlzcGxheSc6ICdlbGVtZW50JyxcbiAgICAnb3BhY2l0eSc6IDEsXG4gICAgJ3otY29tcG91bmQtZGVwdGgnOiAnYXV0bycsXG4gICAgJ3otaW5kZXgtY29tcGFyZSc6ICdhdXRvJyxcbiAgICAnei1pbmRleCc6IDAsXG4gICAgJ2xhYmVsJzogJycsXG4gICAgJ3RleHQtbWFyZ2luLXgnOiAwLFxuICAgICd0ZXh0LW1hcmdpbi15JzogMCxcbiAgICAnc291cmNlLWxhYmVsJzogJycsXG4gICAgJ3NvdXJjZS10ZXh0LW9mZnNldCc6IDAsXG4gICAgJ3NvdXJjZS10ZXh0LW1hcmdpbi14JzogMCxcbiAgICAnc291cmNlLXRleHQtbWFyZ2luLXknOiAwLFxuICAgICd0YXJnZXQtbGFiZWwnOiAnJyxcbiAgICAndGFyZ2V0LXRleHQtb2Zmc2V0JzogMCxcbiAgICAndGFyZ2V0LXRleHQtbWFyZ2luLXgnOiAwLFxuICAgICd0YXJnZXQtdGV4dC1tYXJnaW4teSc6IDAsXG4gICAgJ292ZXJsYXktb3BhY2l0eSc6IDAsXG4gICAgJ292ZXJsYXktY29sb3InOiAnIzAwMCcsXG4gICAgJ292ZXJsYXktcGFkZGluZyc6IDEwLFxuICAgICdvdmVybGF5LXNoYXBlJzogJ3JvdW5kLXJlY3RhbmdsZScsXG4gICAgJ292ZXJsYXktY29ybmVyLXJhZGl1cyc6ICdhdXRvJyxcbiAgICAndW5kZXJsYXktb3BhY2l0eSc6IDAsXG4gICAgJ3VuZGVybGF5LWNvbG9yJzogJyMwMDAnLFxuICAgICd1bmRlcmxheS1wYWRkaW5nJzogMTAsXG4gICAgJ3VuZGVybGF5LXNoYXBlJzogJ3JvdW5kLXJlY3RhbmdsZScsXG4gICAgJ3VuZGVybGF5LWNvcm5lci1yYWRpdXMnOiAnYXV0bycsXG4gICAgJ3RyYW5zaXRpb24tcHJvcGVydHknOiAnbm9uZScsXG4gICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nOiAwLFxuICAgICd0cmFuc2l0aW9uLWRlbGF5JzogMCxcbiAgICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nOiAnbGluZWFyJyxcbiAgICAvLyBub2RlIHByb3BzXG4gICAgJ2JhY2tncm91bmQtYmxhY2tlbic6IDAsXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzk5OScsXG4gICAgJ2JhY2tncm91bmQtZmlsbCc6ICdzb2xpZCcsXG4gICAgJ2JhY2tncm91bmQtb3BhY2l0eSc6IDEsXG4gICAgJ2JhY2tncm91bmQtaW1hZ2UnOiAnbm9uZScsXG4gICAgJ2JhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4nOiAnYW5vbnltb3VzJyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JzogMSxcbiAgICAnYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCc6ICdpbnNpZGUnLFxuICAgICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyc6ICd5ZXMnLFxuICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOiAnNTAlJyxcbiAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi15JzogJzUwJScsXG4gICAgJ2JhY2tncm91bmQtb2Zmc2V0LXgnOiAwLFxuICAgICdiYWNrZ3JvdW5kLW9mZnNldC15JzogMCxcbiAgICAnYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byc6ICdpbmNsdWRlLXBhZGRpbmcnLFxuICAgICdiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byc6ICdpbmNsdWRlLXBhZGRpbmcnLFxuICAgICdiYWNrZ3JvdW5kLXJlcGVhdCc6ICduby1yZXBlYXQnLFxuICAgICdiYWNrZ3JvdW5kLWZpdCc6ICdub25lJyxcbiAgICAnYmFja2dyb3VuZC1jbGlwJzogJ25vZGUnLFxuICAgICdiYWNrZ3JvdW5kLXdpZHRoJzogJ2F1dG8nLFxuICAgICdiYWNrZ3JvdW5kLWhlaWdodCc6ICdhdXRvJyxcbiAgICAnYm9yZGVyLWNvbG9yJzogJyMwMDAnLFxuICAgICdib3JkZXItb3BhY2l0eSc6IDEsXG4gICAgJ2JvcmRlci13aWR0aCc6IDAsXG4gICAgJ2JvcmRlci1zdHlsZSc6ICdzb2xpZCcsXG4gICAgJ2JvcmRlci1kYXNoLXBhdHRlcm4nOiBbNCwgMl0sXG4gICAgJ2JvcmRlci1kYXNoLW9mZnNldCc6IDAsXG4gICAgJ2JvcmRlci1jYXAnOiAnYnV0dCcsXG4gICAgJ2JvcmRlci1qb2luJzogJ21pdGVyJyxcbiAgICAnYm9yZGVyLXBvc2l0aW9uJzogJ2NlbnRlcicsXG4gICAgJ291dGxpbmUtY29sb3InOiAnIzk5OScsXG4gICAgJ291dGxpbmUtb3BhY2l0eSc6IDEsXG4gICAgJ291dGxpbmUtd2lkdGgnOiAwLFxuICAgICdvdXRsaW5lLW9mZnNldCc6IDAsXG4gICAgJ291dGxpbmUtc3R5bGUnOiAnc29saWQnLFxuICAgICdoZWlnaHQnOiAzMCxcbiAgICAnd2lkdGgnOiAzMCxcbiAgICAnc2hhcGUnOiAnZWxsaXBzZScsXG4gICAgJ3NoYXBlLXBvbHlnb24tcG9pbnRzJzogJy0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxJyxcbiAgICAnY29ybmVyLXJhZGl1cyc6ICdhdXRvJyxcbiAgICAnYm91bmRzLWV4cGFuc2lvbic6IDAsXG4gICAgLy8gbm9kZSBncmFkaWVudFxuICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbic6ICd0by1ib3R0b20nLFxuICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzJzogJyM5OTknLFxuICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zJzogJzAlJyxcbiAgICAvLyBnaG9zdCBwcm9wc1xuICAgICdnaG9zdCc6ICdubycsXG4gICAgJ2dob3N0LW9mZnNldC15JzogMCxcbiAgICAnZ2hvc3Qtb2Zmc2V0LXgnOiAwLFxuICAgICdnaG9zdC1vcGFjaXR5JzogMCxcbiAgICAvLyBjb21wb3VuZCBwcm9wc1xuICAgICdwYWRkaW5nJzogMCxcbiAgICAncGFkZGluZy1yZWxhdGl2ZS10byc6ICd3aWR0aCcsXG4gICAgJ3Bvc2l0aW9uJzogJ29yaWdpbicsXG4gICAgJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJzogJ2luY2x1ZGUnLFxuICAgICdtaW4td2lkdGgnOiAwLFxuICAgICdtaW4td2lkdGgtYmlhcy1sZWZ0JzogMCxcbiAgICAnbWluLXdpZHRoLWJpYXMtcmlnaHQnOiAwLFxuICAgICdtaW4taGVpZ2h0JzogMCxcbiAgICAnbWluLWhlaWdodC1iaWFzLXRvcCc6IDAsXG4gICAgJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nOiAwXG4gIH0sIHtcbiAgICAvLyBub2RlIHBpZSBiZ1xuICAgICdwaWUtc2l6ZSc6ICcxMDAlJ1xuICB9LCBbe1xuICAgIG5hbWU6ICdwaWUte3tpfX0tYmFja2dyb3VuZC1jb2xvcicsXG4gICAgdmFsdWU6ICdibGFjaydcbiAgfSwge1xuICAgIG5hbWU6ICdwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplJyxcbiAgICB2YWx1ZTogJzAlJ1xuICB9LCB7XG4gICAgbmFtZTogJ3BpZS17e2l9fS1iYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgIHZhbHVlOiAxXG4gIH1dLnJlZHVjZShmdW5jdGlvbiAoY3NzLCBwcm9wKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc3R5Zm4kMi5waWVCYWNrZ3JvdW5kTjsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHByb3AubmFtZS5yZXBsYWNlKCd7e2l9fScsIGkpO1xuICAgICAgdmFyIHZhbCA9IHByb3AudmFsdWU7XG4gICAgICBjc3NbbmFtZV0gPSB2YWw7XG4gICAgfVxuICAgIHJldHVybiBjc3M7XG4gIH0sIHt9KSwge1xuICAgIC8vIGVkZ2UgcHJvcHNcbiAgICAnbGluZS1zdHlsZSc6ICdzb2xpZCcsXG4gICAgJ2xpbmUtY29sb3InOiAnIzk5OScsXG4gICAgJ2xpbmUtZmlsbCc6ICdzb2xpZCcsXG4gICAgJ2xpbmUtY2FwJzogJ2J1dHQnLFxuICAgICdsaW5lLW9wYWNpdHknOiAxLFxuICAgICdsaW5lLW91dGxpbmUtd2lkdGgnOiAwLFxuICAgICdsaW5lLW91dGxpbmUtY29sb3InOiAnIzAwMCcsXG4gICAgJ2xpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMnOiAnIzk5OScsXG4gICAgJ2xpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnOiAnMCUnLFxuICAgICdjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSc6IDQwLFxuICAgICdjb250cm9sLXBvaW50LXdlaWdodHMnOiAwLjUsXG4gICAgJ3NlZ21lbnQtd2VpZ2h0cyc6IDAuNSxcbiAgICAnc2VnbWVudC1kaXN0YW5jZXMnOiAyMCxcbiAgICAnc2VnbWVudC1yYWRpaSc6IDE1LFxuICAgICdyYWRpdXMtdHlwZSc6ICdhcmMtcmFkaXVzJyxcbiAgICAndGF4aS10dXJuJzogJzUwJScsXG4gICAgJ3RheGktcmFkaXVzJzogMTUsXG4gICAgJ3RheGktdHVybi1taW4tZGlzdGFuY2UnOiAxMCxcbiAgICAndGF4aS1kaXJlY3Rpb24nOiAnYXV0bycsXG4gICAgJ2VkZ2UtZGlzdGFuY2VzJzogJ2ludGVyc2VjdGlvbicsXG4gICAgJ2N1cnZlLXN0eWxlJzogJ2hheXN0YWNrJyxcbiAgICAnaGF5c3RhY2stcmFkaXVzJzogMCxcbiAgICAnYXJyb3ctc2NhbGUnOiAxLFxuICAgICdsb29wLWRpcmVjdGlvbic6ICctNDVkZWcnLFxuICAgICdsb29wLXN3ZWVwJzogJy05MGRlZycsXG4gICAgJ3NvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUnOiAwLFxuICAgICd0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlJzogMCxcbiAgICAnc291cmNlLWVuZHBvaW50JzogJ291dHNpZGUtdG8tbm9kZScsXG4gICAgJ3RhcmdldC1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLW5vZGUnLFxuICAgICdsaW5lLWRhc2gtcGF0dGVybic6IFs2LCAzXSxcbiAgICAnbGluZS1kYXNoLW9mZnNldCc6IDBcbiAgfSwgW3tcbiAgICBuYW1lOiAnYXJyb3ctc2hhcGUnLFxuICAgIHZhbHVlOiAnbm9uZSdcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy1jb2xvcicsXG4gICAgdmFsdWU6ICcjOTk5J1xuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LWZpbGwnLFxuICAgIHZhbHVlOiAnZmlsbGVkJ1xuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LXdpZHRoJyxcbiAgICB2YWx1ZTogMVxuICB9XS5yZWR1Y2UoZnVuY3Rpb24gKGNzcywgcHJvcCkge1xuICAgIHN0eWZuJDIuYXJyb3dQcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICAgIHZhciBuYW1lID0gcHJlZml4ICsgJy0nICsgcHJvcC5uYW1lO1xuICAgICAgdmFyIHZhbCA9IHByb3AudmFsdWU7XG4gICAgICBjc3NbbmFtZV0gPSB2YWw7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzcztcbiAgfSwge30pKTtcbiAgdmFyIHBhcnNlZFByb3BzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSB0aGlzLnByb3BlcnRpZXNbaV07XG4gICAgaWYgKHByb3AucG9pbnRzVG8pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IHByb3AubmFtZTtcbiAgICB2YXIgdmFsID0gcmF3UHJvcHNbbmFtZV07XG4gICAgdmFyIHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKG5hbWUsIHZhbCk7XG4gICAgcGFyc2VkUHJvcHNbbmFtZV0gPSBwYXJzZWRQcm9wO1xuICB9XG4gIF9wLmRlZmF1bHRQcm9wZXJ0aWVzID0gcGFyc2VkUHJvcHM7XG4gIHJldHVybiBfcC5kZWZhdWx0UHJvcGVydGllcztcbn07XG5zdHlmbiQyLmFkZERlZmF1bHRTdHlsZXNoZWV0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlbGVjdG9yKCc6cGFyZW50JykuY3NzKHtcbiAgICAnc2hhcGUnOiAncmVjdGFuZ2xlJyxcbiAgICAncGFkZGluZyc6IDEwLFxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNlZWUnLFxuICAgICdib3JkZXItY29sb3InOiAnI2NjYycsXG4gICAgJ2JvcmRlci13aWR0aCc6IDFcbiAgfSkuc2VsZWN0b3IoJ2VkZ2UnKS5jc3Moe1xuICAgICd3aWR0aCc6IDNcbiAgfSkuc2VsZWN0b3IoJzpsb29wJykuY3NzKHtcbiAgICAnY3VydmUtc3R5bGUnOiAnYmV6aWVyJ1xuICB9KS5zZWxlY3RvcignZWRnZTpjb21wb3VuZCcpLmNzcyh7XG4gICAgJ2N1cnZlLXN0eWxlJzogJ2JlemllcicsXG4gICAgJ3NvdXJjZS1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLWxpbmUnLFxuICAgICd0YXJnZXQtZW5kcG9pbnQnOiAnb3V0c2lkZS10by1saW5lJ1xuICB9KS5zZWxlY3RvcignOnNlbGVjdGVkJykuY3NzKHtcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjMDE2OUQ5JyxcbiAgICAnbGluZS1jb2xvcic6ICcjMDE2OUQ5JyxcbiAgICAnc291cmNlLWFycm93LWNvbG9yJzogJyMwMTY5RDknLFxuICAgICd0YXJnZXQtYXJyb3ctY29sb3InOiAnIzAxNjlEOScsXG4gICAgJ21pZC1zb3VyY2UtYXJyb3ctY29sb3InOiAnIzAxNjlEOScsXG4gICAgJ21pZC10YXJnZXQtYXJyb3ctY29sb3InOiAnIzAxNjlEOSdcbiAgfSkuc2VsZWN0b3IoJzpwYXJlbnQ6c2VsZWN0ZWQnKS5jc3Moe1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNDQ0UxRjknLFxuICAgICdib3JkZXItY29sb3InOiAnI2FlYzhlNSdcbiAgfSkuc2VsZWN0b3IoJzphY3RpdmUnKS5jc3Moe1xuICAgICdvdmVybGF5LWNvbG9yJzogJ2JsYWNrJyxcbiAgICAnb3ZlcmxheS1wYWRkaW5nJzogMTAsXG4gICAgJ292ZXJsYXktb3BhY2l0eSc6IDAuMjVcbiAgfSk7XG4gIHRoaXMuZGVmYXVsdExlbmd0aCA9IHRoaXMubGVuZ3RoO1xufTtcblxudmFyIHN0eWZuJDEgPSB7fTtcblxuLy8gYSBjYWNoaW5nIGxheWVyIGZvciBwcm9wZXJ0eSBwYXJzaW5nXG5zdHlmbiQxLnBhcnNlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGZ1bmN0aW9uIHZhbHVlcyBjYW4ndCBiZSBjYWNoZWQgaW4gYWxsIGNhc2VzLCBhbmQgdGhlcmUgaXNuJ3QgbXVjaCBiZW5lZml0IG9mIGNhY2hpbmcgdGhlbSBhbnl3YXlcbiAgaWYgKGZuJDYodmFsdWUpKSB7XG4gICAgcmV0dXJuIHNlbGYucGFyc2VJbXBsV2FybihuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KTtcbiAgfVxuICB2YXIgZmxhdEtleSA9IHByb3BJc0ZsYXQgPT09ICdtYXBwaW5nJyB8fCBwcm9wSXNGbGF0ID09PSB0cnVlIHx8IHByb3BJc0ZsYXQgPT09IGZhbHNlIHx8IHByb3BJc0ZsYXQgPT0gbnVsbCA/ICdkb250Y2FyZScgOiBwcm9wSXNGbGF0O1xuICB2YXIgYnlwYXNzS2V5ID0gcHJvcElzQnlwYXNzID8gJ3QnIDogJ2YnO1xuICB2YXIgdmFsdWVLZXkgPSAnJyArIHZhbHVlO1xuICB2YXIgYXJnSGFzaCA9IGhhc2hTdHJpbmdzKG5hbWUsIHZhbHVlS2V5LCBieXBhc3NLZXksIGZsYXRLZXkpO1xuICB2YXIgcHJvcENhY2hlID0gc2VsZi5wcm9wQ2FjaGUgPSBzZWxmLnByb3BDYWNoZSB8fCBbXTtcbiAgdmFyIHJldDtcbiAgaWYgKCEocmV0ID0gcHJvcENhY2hlW2FyZ0hhc2hdKSkge1xuICAgIHJldCA9IHByb3BDYWNoZVthcmdIYXNoXSA9IHNlbGYucGFyc2VJbXBsV2FybihuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KTtcbiAgfVxuXG4gIC8vIC0gYnlwYXNzZXMgY2FuJ3QgYmUgc2hhcmVkIGIvYyB0aGUgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYnkgYW5pbWF0aW9ucyBvciBvdGhlcndpc2Ugb3ZlcnJpZGRlblxuICAvLyAtIG1hcHBpbmdzIGNhbid0IGJlIHNoYXJlZCBiL2MgbWFwcGluZ3MgYXJlIHBlci1lbGVtZW50XG4gIGlmIChwcm9wSXNCeXBhc3MgfHwgcHJvcElzRmxhdCA9PT0gJ21hcHBpbmcnKSB7XG4gICAgLy8gbmVlZCBhIGNvcHkgc2luY2UgcHJvcHMgYXJlIG11dGF0ZWQgbGF0ZXIgaW4gdGhlaXIgbGlmZWN5Y2xlc1xuICAgIHJldCA9IGNvcHkocmV0KTtcbiAgICBpZiAocmV0KSB7XG4gICAgICByZXQudmFsdWUgPSBjb3B5KHJldC52YWx1ZSk7IC8vIGJlY2F1c2UgaXQgY291bGQgYmUgYW4gYXJyYXksIGUuZy4gY29sb3VyXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5zdHlmbiQxLnBhcnNlSW1wbFdhcm4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCkge1xuICB2YXIgcHJvcCA9IHRoaXMucGFyc2VJbXBsKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpO1xuICBpZiAoIXByb3AgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIHdhcm4oXCJUaGUgc3R5bGUgcHJvcGVydHkgYFwiLmNvbmNhdChuYW1lLCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCJgIGlzIGludmFsaWRcIikpO1xuICB9XG4gIGlmIChwcm9wICYmIChwcm9wLm5hbWUgPT09ICd3aWR0aCcgfHwgcHJvcC5uYW1lID09PSAnaGVpZ2h0JykgJiYgdmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICB3YXJuKCdUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgJyArIHByb3AubmFtZSArICdgJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59O1xuXG4vLyBwYXJzZSBhIHByb3BlcnR5OyByZXR1cm4gbnVsbCBvbiBpbnZhbGlkOyByZXR1cm4gcGFyc2VkIHByb3BlcnR5IG90aGVyd2lzZVxuLy8gZmllbGRzIDpcbi8vIC0gbmFtZSA6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eVxuLy8gLSB2YWx1ZSA6IHRoZSBwYXJzZWQsIG5hdGl2ZS10eXBlZCB2YWx1ZSBvZiB0aGUgcHJvcGVydHlcbi8vIC0gc3RyVmFsdWUgOiBhIHN0cmluZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHByb3BlcnR5IHZhbHVlIGluIHZhbGlkIGNzc1xuLy8gLSBieXBhc3MgOiB0cnVlIGlmZiB0aGUgcHJvcGVydHkgaXMgYSBieXBhc3MgcHJvcGVydHlcbnN0eWZuJDEucGFyc2VJbXBsID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBuYW1lID0gY2FtZWwyZGFzaChuYW1lKTsgLy8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGluIGRhc2ggZm9ybSAoZS5nLiAncHJvcGVydHktbmFtZScgbm90ICdwcm9wZXJ0eU5hbWUnKVxuXG4gIHZhciBwcm9wZXJ0eSA9IHNlbGYucHJvcGVydGllc1tuYW1lXTtcbiAgdmFyIHBhc3NlZFZhbHVlID0gdmFsdWU7XG4gIHZhciB0eXBlcyA9IHNlbGYudHlwZXM7XG4gIGlmICghcHJvcGVydHkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyByZXR1cm4gbnVsbCBvbiBwcm9wZXJ0eSBvZiB1bmtub3duIG5hbWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBjYW4ndCBhc3NpZ24gdW5kZWZpbmVkXG5cbiAgLy8gdGhlIHByb3BlcnR5IG1heSBiZSBhbiBhbGlhc1xuICBpZiAocHJvcGVydHkuYWxpYXMpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5LnBvaW50c1RvO1xuICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuICB9XG4gIHZhciB2YWx1ZUlzU3RyaW5nID0gc3RyaW5nKHZhbHVlKTtcbiAgaWYgKHZhbHVlSXNTdHJpbmcpIHtcbiAgICAvLyB0cmltIHRoZSB2YWx1ZSB0byBtYWtlIHBhcnNpbmcgZWFzaWVyXG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wZXJ0eS50eXBlO1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBubyB0eXBlLCBubyBsdWNrXG5cbiAgLy8gY2hlY2sgaWYgYnlwYXNzIGlzIG51bGwgb3IgZW1wdHkgc3RyaW5nIChpLmUuIGluZGljYXRpb24gdG8gZGVsZXRlIGJ5cGFzcyBwcm9wZXJ0eSlcbiAgaWYgKHByb3BJc0J5cGFzcyAmJiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsKSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgYnlwYXNzOiB0cnVlLFxuICAgICAgZGVsZXRlQnlwYXNzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIC8vIGNoZWNrIGlmIHZhbHVlIGlzIGEgZnVuY3Rpb24gdXNlZCBhcyBhIG1hcHBlclxuICBpZiAoZm4kNih2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHN0clZhbHVlOiAnZm4nLFxuICAgICAgbWFwcGVkOiB0eXBlcy5mbixcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcbiAgfVxuXG4gIC8vIGNoZWNrIGlmIHZhbHVlIGlzIG1hcHBlZFxuICB2YXIgZGF0YSwgbWFwRGF0YTtcbiAgaWYgKCF2YWx1ZUlzU3RyaW5nIHx8IHByb3BJc0ZsYXQgfHwgdmFsdWUubGVuZ3RoIDwgNyB8fCB2YWx1ZVsxXSAhPT0gJ2EnKSA7IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+PSA3ICYmIHZhbHVlWzBdID09PSAnZCcgJiYgKGRhdGEgPSBuZXcgUmVnRXhwKHR5cGVzLmRhdGEucmVnZXgpLmV4ZWModmFsdWUpKSkge1xuICAgIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIG1hcHBlcnMgbm90IGFsbG93ZWQgaW4gYnlwYXNzXG5cbiAgICB2YXIgbWFwcGVkID0gdHlwZXMuZGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgc3RyVmFsdWU6ICcnICsgdmFsdWUsXG4gICAgICBtYXBwZWQ6IG1hcHBlZCxcbiAgICAgIGZpZWxkOiBkYXRhWzFdLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+PSAxMCAmJiB2YWx1ZVswXSA9PT0gJ20nICYmIChtYXBEYXRhID0gbmV3IFJlZ0V4cCh0eXBlcy5tYXBEYXRhLnJlZ2V4KS5leGVjKHZhbHVlKSkpIHtcbiAgICBpZiAocHJvcElzQnlwYXNzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBtYXBwZXJzIG5vdCBhbGxvd2VkIGluIGJ5cGFzc1xuICAgIGlmICh0eXBlLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBpbXBvc3NpYmxlIHRvIG1hcCB0byBudW1cblxuICAgIHZhciBfbWFwcGVkID0gdHlwZXMubWFwRGF0YTtcblxuICAgIC8vIHdlIGNhbiBtYXAgb25seSBpZiB0aGUgdHlwZSBpcyBhIGNvbG91ciBvciBhIG51bWJlclxuICAgIGlmICghKHR5cGUuY29sb3IgfHwgdHlwZS5udW1iZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB2YWx1ZU1pbiA9IHRoaXMucGFyc2UobmFtZSwgbWFwRGF0YVs0XSk7IC8vIHBhcnNlIHRvIHZhbGlkYXRlXG4gICAgaWYgKCF2YWx1ZU1pbiB8fCB2YWx1ZU1pbi5tYXBwZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGNhbid0IGJlIGludmFsaWQgb3IgbWFwcGVkXG5cbiAgICB2YXIgdmFsdWVNYXggPSB0aGlzLnBhcnNlKG5hbWUsIG1hcERhdGFbNV0pOyAvLyBwYXJzZSB0byB2YWxpZGF0ZVxuICAgIGlmICghdmFsdWVNYXggfHwgdmFsdWVNYXgubWFwcGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBjYW4ndCBiZSBpbnZhbGlkIG9yIG1hcHBlZFxuXG4gICAgLy8gY2hlY2sgaWYgdmFsdWVNaW4gYW5kIHZhbHVlTWF4IGFyZSB0aGUgc2FtZVxuICAgIGlmICh2YWx1ZU1pbi5wZlZhbHVlID09PSB2YWx1ZU1heC5wZlZhbHVlIHx8IHZhbHVlTWluLnN0clZhbHVlID09PSB2YWx1ZU1heC5zdHJWYWx1ZSkge1xuICAgICAgd2FybignYCcgKyBuYW1lICsgJzogJyArIHZhbHVlICsgJ2AgaXMgbm90IGEgdmFsaWQgbWFwcGVyIGJlY2F1c2UgdGhlIG91dHB1dCByYW5nZSBpcyB6ZXJvOyBjb252ZXJ0aW5nIHRvIGAnICsgbmFtZSArICc6ICcgKyB2YWx1ZU1pbi5zdHJWYWx1ZSArICdgJyk7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZShuYW1lLCB2YWx1ZU1pbi5zdHJWYWx1ZSk7IC8vIGNhbid0IG1ha2UgbXVjaCBvZiBhIG1hcHBlciB3aXRob3V0IGEgcmFuZ2VcbiAgICB9IGVsc2UgaWYgKHR5cGUuY29sb3IpIHtcbiAgICAgIHZhciBjMSA9IHZhbHVlTWluLnZhbHVlO1xuICAgICAgdmFyIGMyID0gdmFsdWVNYXgudmFsdWU7XG4gICAgICB2YXIgc2FtZSA9IGMxWzBdID09PSBjMlswXSAvLyByZWRcbiAgICAgICYmIGMxWzFdID09PSBjMlsxXSAvLyBncmVlblxuICAgICAgJiYgYzFbMl0gPT09IGMyWzJdIC8vIGJsdWVcbiAgICAgICYmIChcbiAgICAgIC8vIG9wdGlvbmFsIGFscGhhXG4gICAgICBjMVszXSA9PT0gYzJbM10gLy8gc2FtZSBhbHBoYSBvdXRyaWdodFxuICAgICAgfHwgKGMxWzNdID09IG51bGwgfHwgYzFbM10gPT09IDEgLy8gZnVsbCBvcGFjaXR5IGZvciBjb2xvdXIgMT9cbiAgICAgICkgJiYgKGMyWzNdID09IG51bGwgfHwgYzJbM10gPT09IDEpIC8vIGZ1bGwgb3BhY2l0eSBmb3IgY29sb3VyIDI/XG4gICAgICApO1xuXG4gICAgICBpZiAoc2FtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGNhbid0IG1ha2UgYSBtYXBwZXIgd2l0aG91dCBhIHJhbmdlXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbWFwRGF0YSxcbiAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgbWFwcGVkOiBfbWFwcGVkLFxuICAgICAgZmllbGQ6IG1hcERhdGFbMV0sXG4gICAgICBmaWVsZE1pbjogcGFyc2VGbG9hdChtYXBEYXRhWzJdKSxcbiAgICAgIC8vIG1pbiAmIG1heCBhcmUgbnVtZXJpY1xuICAgICAgZmllbGRNYXg6IHBhcnNlRmxvYXQobWFwRGF0YVszXSksXG4gICAgICB2YWx1ZU1pbjogdmFsdWVNaW4udmFsdWUsXG4gICAgICB2YWx1ZU1heDogdmFsdWVNYXgudmFsdWUsXG4gICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUubXVsdGlwbGUgJiYgcHJvcElzRmxhdCAhPT0gJ211bHRpcGxlJykge1xuICAgIHZhciB2YWxzO1xuICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICB2YWxzID0gdmFsdWUuc3BsaXQoL1xccysvKTtcbiAgICB9IGVsc2UgaWYgKGFycmF5KHZhbHVlKSkge1xuICAgICAgdmFscyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxzID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgaWYgKHR5cGUuZXZlbk11bHRpcGxlICYmIHZhbHMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciB2YWxBcnIgPSBbXTtcbiAgICB2YXIgdW5pdHNBcnIgPSBbXTtcbiAgICB2YXIgcGZWYWxBcnIgPSBbXTtcbiAgICB2YXIgc3RyVmFsID0gJyc7XG4gICAgdmFyIGhhc0VudW0gPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwID0gc2VsZi5wYXJzZShuYW1lLCB2YWxzW2ldLCBwcm9wSXNCeXBhc3MsICdtdWx0aXBsZScpO1xuICAgICAgaGFzRW51bSA9IGhhc0VudW0gfHwgc3RyaW5nKHAudmFsdWUpO1xuICAgICAgdmFsQXJyLnB1c2gocC52YWx1ZSk7XG4gICAgICBwZlZhbEFyci5wdXNoKHAucGZWYWx1ZSAhPSBudWxsID8gcC5wZlZhbHVlIDogcC52YWx1ZSk7XG4gICAgICB1bml0c0Fyci5wdXNoKHAudW5pdHMpO1xuICAgICAgc3RyVmFsICs9IChpID4gMCA/ICcgJyA6ICcnKSArIHAuc3RyVmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlLnZhbGlkYXRlICYmICF0eXBlLnZhbGlkYXRlKHZhbEFyciwgdW5pdHNBcnIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGUuc2luZ2xlRW51bSAmJiBoYXNFbnVtKSB7XG4gICAgICBpZiAodmFsQXJyLmxlbmd0aCA9PT0gMSAmJiBzdHJpbmcodmFsQXJyWzBdKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHZhbEFyclswXSxcbiAgICAgICAgICBzdHJWYWx1ZTogdmFsQXJyWzBdLFxuICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsQXJyLFxuICAgICAgcGZWYWx1ZTogcGZWYWxBcnIsXG4gICAgICBzdHJWYWx1ZTogc3RyVmFsLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3MsXG4gICAgICB1bml0czogdW5pdHNBcnJcbiAgICB9O1xuICB9XG5cbiAgLy8gc2V2ZXJhbCB0eXBlcyBhbHNvIGFsbG93IGVudW1zXG4gIHZhciBjaGVja0VudW1zID0gZnVuY3Rpb24gY2hlY2tFbnVtcygpIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdHlwZS5lbnVtcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBlbiA9IHR5cGUuZW51bXNbX2ldO1xuICAgICAgaWYgKGVuID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8vIGNoZWNrIHRoZSB0eXBlIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG9iamVjdFxuICBpZiAodHlwZS5udW1iZXIpIHtcbiAgICB2YXIgdW5pdHM7XG4gICAgdmFyIGltcGxpY2l0VW5pdHMgPSAncHgnOyAvLyBub3Qgc2V0ID0+IHB4XG5cbiAgICBpZiAodHlwZS51bml0cykge1xuICAgICAgLy8gdXNlIHNwZWNpZmllZCB1bml0cyBpZiBzZXRcbiAgICAgIHVuaXRzID0gdHlwZS51bml0cztcbiAgICB9XG4gICAgaWYgKHR5cGUuaW1wbGljaXRVbml0cykge1xuICAgICAgaW1wbGljaXRVbml0cyA9IHR5cGUuaW1wbGljaXRVbml0cztcbiAgICB9XG4gICAgaWYgKCF0eXBlLnVuaXRsZXNzKSB7XG4gICAgICBpZiAodmFsdWVJc1N0cmluZykge1xuICAgICAgICB2YXIgdW5pdHNSZWdleCA9ICdweHxlbScgKyAodHlwZS5hbGxvd1BlcmNlbnQgPyAnfFxcXFwlJyA6ICcnKTtcbiAgICAgICAgaWYgKHVuaXRzKSB7XG4gICAgICAgICAgdW5pdHNSZWdleCA9IHVuaXRzO1xuICAgICAgICB9IC8vIG9ubHkgYWxsb3cgZXhwbGljaXQgdW5pdHMgaWYgc28gc2V0XG4gICAgICAgIHZhciBtYXRjaCA9IHZhbHVlLm1hdGNoKCdeKCcgKyBudW1iZXIgKyAnKSgnICsgdW5pdHNSZWdleCArICcpPycgKyAnJCcpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1hdGNoWzFdO1xuICAgICAgICAgIHVuaXRzID0gbWF0Y2hbMl0gfHwgaW1wbGljaXRVbml0cztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdW5pdHMgfHwgdHlwZS5pbXBsaWNpdFVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gaW1wbGljaXRVbml0czsgLy8gaW1wbGljaXRseSBweCBpZiB1bnNwZWNpZmllZFxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cbiAgICAvLyBpZiBub3QgYSBudW1iZXIgYW5kIGVudW1zIG5vdCBhbGxvd2VkLCB0aGVuIHRoZSB2YWx1ZSBpcyBpbnZhbGlkXG4gICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlLmVudW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoaXMgbnVtYmVyIHR5cGUgYWxzbyBhY2NlcHRzIHNwZWNpYWwga2V5d29yZHMgaW4gcGxhY2Ugb2YgbnVtYmVyc1xuICAgIC8vIChpLmUuIGBsZWZ0YCwgYGF1dG9gLCBldGMpXG4gICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlLmVudW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlID0gcGFzc2VkVmFsdWU7XG4gICAgICByZXR1cm4gY2hlY2tFbnVtcygpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlclxuICAgIGlmICh0eXBlLmludGVnZXIgJiYgIWludGVnZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB2YWx1ZSBpcyB3aXRoaW4gcmFuZ2VcbiAgICBpZiAodHlwZS5taW4gIT09IHVuZGVmaW5lZCAmJiAodmFsdWUgPCB0eXBlLm1pbiB8fCB0eXBlLnN0cmljdE1pbiAmJiB2YWx1ZSA9PT0gdHlwZS5taW4pIHx8IHR5cGUubWF4ICE9PSB1bmRlZmluZWQgJiYgKHZhbHVlID4gdHlwZS5tYXggfHwgdHlwZS5zdHJpY3RNYXggJiYgdmFsdWUgPT09IHR5cGUubWF4KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciByZXQgPSB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgc3RyVmFsdWU6ICcnICsgdmFsdWUgKyAodW5pdHMgPyB1bml0cyA6ICcnKSxcbiAgICAgIHVuaXRzOiB1bml0cyxcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcblxuICAgIC8vIG5vcm1hbGlzZSB2YWx1ZSBpbiBwaXhlbHNcbiAgICBpZiAodHlwZS51bml0bGVzcyB8fCB1bml0cyAhPT0gJ3B4JyAmJiB1bml0cyAhPT0gJ2VtJykge1xuICAgICAgcmV0LnBmVmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnBmVmFsdWUgPSB1bml0cyA9PT0gJ3B4JyB8fCAhdW5pdHMgPyB2YWx1ZSA6IHRoaXMuZ2V0RW1TaXplSW5QaXhlbHMoKSAqIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGlzZSB2YWx1ZSBpbiBtc1xuICAgIGlmICh1bml0cyA9PT0gJ21zJyB8fCB1bml0cyA9PT0gJ3MnKSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAnbXMnID8gdmFsdWUgOiAxMDAwICogdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXNlIHZhbHVlIGluIHJhZFxuICAgIGlmICh1bml0cyA9PT0gJ2RlZycgfHwgdW5pdHMgPT09ICdyYWQnKSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAncmFkJyA/IHZhbHVlIDogZGVnMnJhZCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIHZhbHVlIGluICVcbiAgICBpZiAodW5pdHMgPT09ICclJykge1xuICAgICAgcmV0LnBmVmFsdWUgPSB2YWx1ZSAvIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlLnByb3BMaXN0KSB7XG4gICAgdmFyIHByb3BzID0gW107XG4gICAgdmFyIHByb3BzU3RyID0gJycgKyB2YWx1ZTtcbiAgICBpZiAocHJvcHNTdHIgPT09ICdub25lJykgOyBlbHNlIHtcbiAgICAgIC8vIGdvIG92ZXIgZWFjaCBwcm9wXG5cbiAgICAgIHZhciBwcm9wc1NwbGl0ID0gcHJvcHNTdHIuc3BsaXQoL1xccyosXFxzKnxcXHMrLyk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwcm9wc1NwbGl0Lmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcHNTcGxpdFtfaTJdLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlbGYucHJvcGVydGllc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKHByb3BOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuKCdgJyArIHByb3BOYW1lICsgJ2AgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgbmFtZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBwcm9wcyxcbiAgICAgIHN0clZhbHVlOiBwcm9wcy5sZW5ndGggPT09IDAgPyAnbm9uZScgOiBwcm9wcy5qb2luKCcgJyksXG4gICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZS5jb2xvcikge1xuICAgIHZhciB0dXBsZSA9IGNvbG9yMnR1cGxlKHZhbHVlKTtcbiAgICBpZiAoIXR1cGxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdHVwbGUsXG4gICAgICBwZlZhbHVlOiB0dXBsZSxcbiAgICAgIHN0clZhbHVlOiAncmdiKCcgKyB0dXBsZVswXSArICcsJyArIHR1cGxlWzFdICsgJywnICsgdHVwbGVbMl0gKyAnKScsXG4gICAgICAvLyBuLmIuIG5vIHNwYWNlcyBiL2Mgb2YgbXVsdGlwbGUgc3VwcG9ydFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUucmVnZXggfHwgdHlwZS5yZWdleGVzKSB7XG4gICAgLy8gZmlyc3QgY2hlY2sgZW51bXNcbiAgICBpZiAodHlwZS5lbnVtcykge1xuICAgICAgdmFyIGVudW1Qcm9wID0gY2hlY2tFbnVtcygpO1xuICAgICAgaWYgKGVudW1Qcm9wKSB7XG4gICAgICAgIHJldHVybiBlbnVtUHJvcDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlZ2V4ZXMgPSB0eXBlLnJlZ2V4ZXMgPyB0eXBlLnJlZ2V4ZXMgOiBbdHlwZS5yZWdleF07XG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgcmVnZXhlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4ZXNbX2kzXSk7IC8vIG1ha2UgYSByZWdleCBmcm9tIHRoZSB0eXBlIHN0cmluZ1xuICAgICAgdmFyIG0gPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIC8vIHJlZ2V4IG1hdGNoZXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB0eXBlLnNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZSA/IG1bMV0gOiBtLFxuICAgICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBkaWRuJ3QgbWF0Y2ggYW55XG4gIH0gZWxzZSBpZiAodHlwZS5zdHJpbmcpIHtcbiAgICAvLyBqdXN0IHJldHVyblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6ICcnICsgdmFsdWUsXG4gICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlLmVudW1zKSB7XG4gICAgLy8gY2hlY2sgZW51bXMgbGFzdCBiZWNhdXNlIGl0J3MgYSBjb21ibyB0eXBlIGluIG90aGVyc1xuICAgIHJldHVybiBjaGVja0VudW1zKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIG5vdCBhIHR5cGUgd2UgY2FuIGhhbmRsZVxuICB9XG59O1xuXG52YXIgU3R5bGUgPSBmdW5jdGlvbiBTdHlsZShjeSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3R5bGUpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHlsZShjeSk7XG4gIH1cbiAgaWYgKCFjb3JlKGN5KSkge1xuICAgIGVycm9yKCdBIHN0eWxlIG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuX3ByaXZhdGUgPSB7XG4gICAgY3k6IGN5LFxuICAgIGNvcmVTdHlsZToge31cbiAgfTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnJlc2V0VG9EZWZhdWx0KCk7XG59O1xudmFyIHN0eWZuID0gU3R5bGUucHJvdG90eXBlO1xuc3R5Zm4uaW5zdGFuY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnc3R5bGUnO1xufTtcblxuLy8gcmVtb3ZlIGFsbCBjb250ZXh0c1xuc3R5Zm4uY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gIHZhciBjeSA9IF9wLmN5O1xuICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHRoaXNbaV0gPSB1bmRlZmluZWQ7XG4gIH1cbiAgdGhpcy5sZW5ndGggPSAwO1xuICBfcC5jb250ZXh0U3R5bGVzID0ge307XG4gIF9wLnByb3BEaWZmcyA9IHt9O1xuICB0aGlzLmNsZWFuRWxlbWVudHMoZWxlcywgdHJ1ZSk7XG4gIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIGVsZV9wID0gZWxlWzBdLl9wcml2YXRlO1xuICAgIGVsZV9wLnN0eWxlRGlydHkgPSB0cnVlO1xuICAgIGVsZV9wLmFwcGxpZWRJbml0U3R5bGUgPSBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuc3R5Zm4ucmVzZXRUb0RlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2xlYXIoKTtcbiAgdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGJ1aWxkcyBhIHN0eWxlIG9iamVjdCBmb3IgdGhlICdjb3JlJyBzZWxlY3Rvclxuc3R5Zm4uY29yZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb3JlU3R5bGVbcHJvcE5hbWVdIHx8IHRoaXMuZ2V0RGVmYXVsdFByb3BlcnR5KHByb3BOYW1lKTtcbn07XG5cbi8vIGNyZWF0ZSBhIG5ldyBjb250ZXh0IGZyb20gdGhlIHNwZWNpZmllZCBzZWxlY3RvciBzdHJpbmcgYW5kIHN3aXRjaCB0byB0aGF0IGNvbnRleHRcbnN0eWZuLnNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yU3RyKSB7XG4gIC8vICdjb3JlJyBpcyBhIHNwZWNpYWwgY2FzZSBhbmQgZG9lcyBub3QgbmVlZCBhIHNlbGVjdG9yXG4gIHZhciBzZWxlY3RvciA9IHNlbGVjdG9yU3RyID09PSAnY29yZScgPyBudWxsIDogbmV3IFNlbGVjdG9yKHNlbGVjdG9yU3RyKTtcbiAgdmFyIGkgPSB0aGlzLmxlbmd0aCsrOyAvLyBuZXcgY29udGV4dCBtZWFucyBuZXcgaW5kZXhcbiAgdGhpc1tpXSA9IHtcbiAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgcHJvcGVydGllczogW10sXG4gICAgbWFwcGVkUHJvcGVydGllczogW10sXG4gICAgaW5kZXg6IGlcbiAgfTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vLyBhZGQgb25lIG9yIG1hbnkgY3NzIHJ1bGVzIHRvIHRoZSBjdXJyZW50IGNvbnRleHRcbnN0eWZuLmNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgdmFyIG1hcCA9IGFyZ3NbMF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW2ldO1xuICAgICAgdmFyIG1hcFZhbCA9IG1hcFtwcm9wLm5hbWVdO1xuICAgICAgaWYgKG1hcFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcFZhbCA9IG1hcFtkYXNoMmNhbWVsKHByb3AubmFtZSldO1xuICAgICAgfVxuICAgICAgaWYgKG1hcFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3NzUnVsZShwcm9wLm5hbWUsIG1hcFZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgdGhpcy5jc3NSdWxlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICB9XG5cbiAgLy8gZG8gbm90aGluZyBpZiBhcmdzIGFyZSBpbnZhbGlkXG5cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG5zdHlmbi5zdHlsZSA9IHN0eWZuLmNzcztcblxuLy8gYWRkIGEgc2luZ2xlIGNzcyBydWxlIHRvIHRoZSBjdXJyZW50IGNvbnRleHRcbnN0eWZuLmNzc1J1bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgLy8gbmFtZS12YWx1ZSBwYWlyXG4gIHZhciBwcm9wZXJ0eSA9IHRoaXMucGFyc2UobmFtZSwgdmFsdWUpO1xuXG4gIC8vIGFkZCBwcm9wZXJ0eSB0byBjdXJyZW50IGNvbnRleHQgaWYgdmFsaWRcbiAgaWYgKHByb3BlcnR5KSB7XG4gICAgdmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7XG4gICAgdGhpc1tpXS5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgIHRoaXNbaV0ucHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHByb3BlcnR5OyAvLyBhbGxvdyBhY2Nlc3MgYnkgbmFtZSBhcyB3ZWxsXG5cbiAgICBpZiAocHJvcGVydHkubmFtZS5tYXRjaCgvcGllLShcXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSAmJiBwcm9wZXJ0eS52YWx1ZSkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5oYXNQaWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocHJvcGVydHkubWFwcGVkKSB7XG4gICAgICB0aGlzW2ldLm1hcHBlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHRvIGNvcmUgc3R5bGUgaWYgbmVjZXNzYXJ5XG4gICAgdmFyIGN1cnJlbnRTZWxlY3RvcklzQ29yZSA9ICF0aGlzW2ldLnNlbGVjdG9yO1xuICAgIGlmIChjdXJyZW50U2VsZWN0b3JJc0NvcmUpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3Byb3BlcnR5Lm5hbWVdID0gcHJvcGVydHk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuc3R5Zm4uYXBwZW5kID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gIGlmIChzdHlsZXNoZWV0KHN0eWxlKSkge1xuICAgIHN0eWxlLmFwcGVuZFRvU3R5bGUodGhpcyk7XG4gIH0gZWxzZSBpZiAoYXJyYXkoc3R5bGUpKSB7XG4gICAgdGhpcy5hcHBlbmRGcm9tSnNvbihzdHlsZSk7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHN0eWxlKSkge1xuICAgIHRoaXMuYXBwZW5kRnJvbVN0cmluZyhzdHlsZSk7XG4gIH0gLy8geW91IHByb2JhYmx5IHdvdWxkbid0IHdhbnQgdG8gYXBwZW5kIGEgU3R5bGUsIHNpbmNlIHlvdSdkIGR1cGxpY2F0ZSB0aGUgZGVmYXVsdCBwYXJ0c1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc3RhdGljIGZ1bmN0aW9uXG5TdHlsZS5mcm9tSnNvbiA9IGZ1bmN0aW9uIChjeSwganNvbikge1xuICB2YXIgc3R5bGUgPSBuZXcgU3R5bGUoY3kpO1xuICBzdHlsZS5mcm9tSnNvbihqc29uKTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcblN0eWxlLmZyb21TdHJpbmcgPSBmdW5jdGlvbiAoY3ksIHN0cmluZykge1xuICByZXR1cm4gbmV3IFN0eWxlKGN5KS5mcm9tU3RyaW5nKHN0cmluZyk7XG59O1xuW3N0eWZuJDgsIHN0eWZuJDcsIHN0eWZuJDYsIHN0eWZuJDUsIHN0eWZuJDQsIHN0eWZuJDMsIHN0eWZuJDIsIHN0eWZuJDFdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gIGV4dGVuZChzdHlmbiwgcHJvcHMpO1xufSk7XG5TdHlsZS50eXBlcyA9IHN0eWZuLnR5cGVzO1xuU3R5bGUucHJvcGVydGllcyA9IHN0eWZuLnByb3BlcnRpZXM7XG5TdHlsZS5wcm9wZXJ0eUdyb3VwcyA9IHN0eWZuLnByb3BlcnR5R3JvdXBzO1xuU3R5bGUucHJvcGVydHlHcm91cE5hbWVzID0gc3R5Zm4ucHJvcGVydHlHcm91cE5hbWVzO1xuU3R5bGUucHJvcGVydHlHcm91cEtleXMgPSBzdHlmbi5wcm9wZXJ0eUdyb3VwS2V5cztcblxudmFyIGNvcmVmbiQyID0ge1xuICBzdHlsZTogZnVuY3Rpb24gc3R5bGUobmV3U3R5bGUpIHtcbiAgICBpZiAobmV3U3R5bGUpIHtcbiAgICAgIHZhciBzID0gdGhpcy5zZXRTdHlsZShuZXdTdHlsZSk7XG4gICAgICBzLnVwZGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZTtcbiAgfSxcbiAgc2V0U3R5bGU6IGZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoc3R5bGVzaGVldChzdHlsZSkpIHtcbiAgICAgIF9wLnN0eWxlID0gc3R5bGUuZ2VuZXJhdGVTdHlsZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGFycmF5KHN0eWxlKSkge1xuICAgICAgX3Auc3R5bGUgPSBTdHlsZS5mcm9tSnNvbih0aGlzLCBzdHlsZSk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcoc3R5bGUpKSB7XG4gICAgICBfcC5zdHlsZSA9IFN0eWxlLmZyb21TdHJpbmcodGhpcywgc3R5bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfcC5zdHlsZSA9IFN0eWxlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gX3Auc3R5bGU7XG4gIH0sXG4gIC8vIGUuZy4gY3kuZGF0YSgpIGNoYW5nZWQgPT4gcmVjYWxjIGVsZSBtYXBwZXJzXG4gIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZSgpIHtcbiAgICB0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCk7IC8vIGp1c3Qgc2VuZCB0byBhbGwgZWxlc1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFNlbGVjdGlvblR5cGUgPSAnc2luZ2xlJztcbnZhciBjb3JlZm4kMSA9IHtcbiAgYXV0b2xvY2s6IGZ1bmN0aW9uIGF1dG9sb2NrKGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmF1dG9sb2NrID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGF1dG91bmdyYWJpZnk6IGZ1bmN0aW9uIGF1dG91bmdyYWJpZnkoYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeSA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGF1dG91bnNlbGVjdGlmeTogZnVuY3Rpb24gYXV0b3Vuc2VsZWN0aWZ5KGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeSA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgc2VsZWN0aW9uVHlwZTogZnVuY3Rpb24gc2VsZWN0aW9uVHlwZShzZWxUeXBlKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoX3Auc2VsZWN0aW9uVHlwZSA9PSBudWxsKSB7XG4gICAgICBfcC5zZWxlY3Rpb25UeXBlID0gZGVmYXVsdFNlbGVjdGlvblR5cGU7XG4gICAgfVxuICAgIGlmIChzZWxUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzZWxUeXBlID09PSAnYWRkaXRpdmUnIHx8IHNlbFR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIF9wLnNlbGVjdGlvblR5cGUgPSBzZWxUeXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX3Auc2VsZWN0aW9uVHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBhbm5pbmdFbmFibGVkOiBmdW5jdGlvbiBwYW5uaW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1c2VyUGFubmluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHVzZXJQYW5uaW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIHpvb21pbmdFbmFibGVkOiBmdW5jdGlvbiB6b29taW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1c2VyWm9vbWluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHVzZXJab29taW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGZ1bmN0aW9uIGJveFNlbGVjdGlvbkVuYWJsZWQoYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIHBhbjogZnVuY3Rpb24gcGFuKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICB2YXIgZGltLCB2YWwsIGRpbXMsIHgsIHk7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAucGFuKClcbiAgICAgICAgcmV0dXJuIHBhbjtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKHN0cmluZyhhcmdzWzBdKSkge1xuICAgICAgICAgIC8vIC5wYW4oJ3gnKVxuICAgICAgICAgIGRpbSA9IGFyZ3NbMF07XG4gICAgICAgICAgcmV0dXJuIHBhbltkaW1dO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgLy8gLnBhbih7IHg6IDAsIHk6IDEwMCB9KVxuICAgICAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpbXMgPSBhcmdzWzBdO1xuICAgICAgICAgIHggPSBkaW1zLng7XG4gICAgICAgICAgeSA9IGRpbXMueTtcbiAgICAgICAgICBpZiAobnVtYmVyJDEoeCkpIHtcbiAgICAgICAgICAgIHBhbi54ID0geDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bWJlciQxKHkpKSB7XG4gICAgICAgICAgICBwYW4ueSA9IHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIC5wYW4oJ3gnLCAxMDApXG4gICAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGRpbSA9IGFyZ3NbMF07XG4gICAgICAgIHZhbCA9IGFyZ3NbMV07XG4gICAgICAgIGlmICgoZGltID09PSAneCcgfHwgZGltID09PSAneScpICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgICAgICBwYW5bZGltXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGludmFsaWRcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBwYW5CeTogZnVuY3Rpb24gcGFuQnkoYXJnMCwgYXJnMSkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICB2YXIgZGltLCB2YWwsIGRpbXMsIHgsIHk7XG4gICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAocGxhaW5PYmplY3QoYXJnMCkpIHtcbiAgICAgICAgICAvLyAucGFuQnkoeyB4OiAwLCB5OiAxMDAgfSlcbiAgICAgICAgICBkaW1zID0gYXJnc1swXTtcbiAgICAgICAgICB4ID0gZGltcy54O1xuICAgICAgICAgIHkgPSBkaW1zLnk7XG4gICAgICAgICAgaWYgKG51bWJlciQxKHgpKSB7XG4gICAgICAgICAgICBwYW4ueCArPSB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobnVtYmVyJDEoeSkpIHtcbiAgICAgICAgICAgIHBhbi55ICs9IHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIC5wYW5CeSgneCcsIDEwMClcbiAgICAgICAgZGltID0gYXJnMDtcbiAgICAgICAgdmFsID0gYXJnMTtcbiAgICAgICAgaWYgKChkaW0gPT09ICd4JyB8fCBkaW0gPT09ICd5JykgJiYgbnVtYmVyJDEodmFsKSkge1xuICAgICAgICAgIHBhbltkaW1dICs9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGludmFsaWRcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBmaXQ6IGZ1bmN0aW9uIGZpdChlbGVtZW50cywgcGFkZGluZykge1xuICAgIHZhciB2aWV3cG9ydFN0YXRlID0gdGhpcy5nZXRGaXRWaWV3cG9ydChlbGVtZW50cywgcGFkZGluZyk7XG4gICAgaWYgKHZpZXdwb3J0U3RhdGUpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgICBfcC56b29tID0gdmlld3BvcnRTdGF0ZS56b29tO1xuICAgICAgX3AucGFuID0gdmlld3BvcnRTdGF0ZS5wYW47XG4gICAgICB0aGlzLmVtaXQoJ3BhbiB6b29tIHZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgZ2V0Rml0Vmlld3BvcnQ6IGZ1bmN0aW9uIGdldEZpdFZpZXdwb3J0KGVsZW1lbnRzLCBwYWRkaW5nKSB7XG4gICAgaWYgKG51bWJlciQxKGVsZW1lbnRzKSAmJiBwYWRkaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVsZW1lbnRzIGlzIG9wdGlvbmFsXG4gICAgICBwYWRkaW5nID0gZWxlbWVudHM7XG4gICAgICBlbGVtZW50cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkIHx8ICF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBiYjtcbiAgICBpZiAoc3RyaW5nKGVsZW1lbnRzKSkge1xuICAgICAgdmFyIHNlbCA9IGVsZW1lbnRzO1xuICAgICAgZWxlbWVudHMgPSB0aGlzLiQoc2VsKTtcbiAgICB9IGVsc2UgaWYgKGJvdW5kaW5nQm94KGVsZW1lbnRzKSkge1xuICAgICAgLy8gYXNzdW1lIGJiXG4gICAgICB2YXIgYmJlID0gZWxlbWVudHM7XG4gICAgICBiYiA9IHtcbiAgICAgICAgeDE6IGJiZS54MSxcbiAgICAgICAgeTE6IGJiZS55MSxcbiAgICAgICAgeDI6IGJiZS54MixcbiAgICAgICAgeTI6IGJiZS55MlxuICAgICAgfTtcbiAgICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gICAgfSBlbHNlIGlmICghZWxlbWVudE9yQ29sbGVjdGlvbihlbGVtZW50cykpIHtcbiAgICAgIGVsZW1lbnRzID0gdGhpcy5tdXRhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oZWxlbWVudHMpICYmIGVsZW1lbnRzLmVtcHR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNhbid0IGZpdCB0byBub3RoaW5nXG5cbiAgICBiYiA9IGJiIHx8IGVsZW1lbnRzLmJvdW5kaW5nQm94KCk7XG4gICAgdmFyIHcgPSB0aGlzLndpZHRoKCk7XG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCgpO1xuICAgIHZhciB6b29tO1xuICAgIHBhZGRpbmcgPSBudW1iZXIkMShwYWRkaW5nKSA/IHBhZGRpbmcgOiAwO1xuICAgIGlmICghaXNOYU4odykgJiYgIWlzTmFOKGgpICYmIHcgPiAwICYmIGggPiAwICYmICFpc05hTihiYi53KSAmJiAhaXNOYU4oYmIuaCkgJiYgYmIudyA+IDAgJiYgYmIuaCA+IDApIHtcbiAgICAgIHpvb20gPSBNYXRoLm1pbigodyAtIDIgKiBwYWRkaW5nKSAvIGJiLncsIChoIC0gMiAqIHBhZGRpbmcpIC8gYmIuaCk7XG5cbiAgICAgIC8vIGNyb3Agem9vbVxuICAgICAgem9vbSA9IHpvb20gPiB0aGlzLl9wcml2YXRlLm1heFpvb20gPyB0aGlzLl9wcml2YXRlLm1heFpvb20gOiB6b29tO1xuICAgICAgem9vbSA9IHpvb20gPCB0aGlzLl9wcml2YXRlLm1pblpvb20gPyB0aGlzLl9wcml2YXRlLm1pblpvb20gOiB6b29tO1xuICAgICAgdmFyIHBhbiA9IHtcbiAgICAgICAgLy8gbm93IHBhbiB0byBtaWRkbGVcbiAgICAgICAgeDogKHcgLSB6b29tICogKGJiLngxICsgYmIueDIpKSAvIDIsXG4gICAgICAgIHk6IChoIC0gem9vbSAqIChiYi55MSArIGJiLnkyKSkgLyAyXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgICAgcGFuOiBwYW5cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSxcbiAgem9vbVJhbmdlOiBmdW5jdGlvbiB6b29tUmFuZ2UobWluLCBtYXgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgdmFyIG9wdHMgPSBtaW47XG4gICAgICBtaW4gPSBvcHRzLm1pbjtcbiAgICAgIG1heCA9IG9wdHMubWF4O1xuICAgIH1cbiAgICBpZiAobnVtYmVyJDEobWluKSAmJiBudW1iZXIkMShtYXgpICYmIG1pbiA8PSBtYXgpIHtcbiAgICAgIF9wLm1pblpvb20gPSBtaW47XG4gICAgICBfcC5tYXhab29tID0gbWF4O1xuICAgIH0gZWxzZSBpZiAobnVtYmVyJDEobWluKSAmJiBtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPD0gX3AubWF4Wm9vbSkge1xuICAgICAgX3AubWluWm9vbSA9IG1pbjtcbiAgICB9IGVsc2UgaWYgKG51bWJlciQxKG1heCkgJiYgbWluID09PSB1bmRlZmluZWQgJiYgbWF4ID49IF9wLm1pblpvb20pIHtcbiAgICAgIF9wLm1heFpvb20gPSBtYXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBtaW5ab29tOiBmdW5jdGlvbiBtaW5ab29tKHpvb20pIHtcbiAgICBpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5taW5ab29tO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy56b29tUmFuZ2Uoe1xuICAgICAgICBtaW46IHpvb21cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbWF4Wm9vbTogZnVuY3Rpb24gbWF4Wm9vbSh6b29tKSB7XG4gICAgaWYgKHpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUubWF4Wm9vbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuem9vbVJhbmdlKHtcbiAgICAgICAgbWF4OiB6b29tXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGdldFpvb21lZFZpZXdwb3J0OiBmdW5jdGlvbiBnZXRab29tZWRWaWV3cG9ydChwYXJhbXMpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBjdXJyZW50UGFuID0gX3AucGFuO1xuICAgIHZhciBjdXJyZW50Wm9vbSA9IF9wLnpvb207XG4gICAgdmFyIHBvczsgLy8gaW4gcmVuZGVyZWQgcHhcbiAgICB2YXIgem9vbTtcbiAgICB2YXIgYmFpbCA9IGZhbHNlO1xuICAgIGlmICghX3Auem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgIC8vIHpvb21pbmcgZGlzYWJsZWRcbiAgICAgIGJhaWwgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobnVtYmVyJDEocGFyYW1zKSkge1xuICAgICAgLy8gdGhlbiBzZXQgdGhlIHpvb21cbiAgICAgIHpvb20gPSBwYXJhbXM7XG4gICAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChwYXJhbXMpKSB7XG4gICAgICAvLyB0aGVuIHpvb20gYWJvdXQgYSBwb2ludFxuICAgICAgem9vbSA9IHBhcmFtcy5sZXZlbDtcbiAgICAgIGlmIChwYXJhbXMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3MgPSBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwYXJhbXMucG9zaXRpb24sIGN1cnJlbnRab29tLCBjdXJyZW50UGFuKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlbmRlcmVkUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3MgPSBwYXJhbXMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChwb3MgIT0gbnVsbCAmJiAhX3AucGFubmluZ0VuYWJsZWQpIHtcbiAgICAgICAgLy8gcGFubmluZyBkaXNhYmxlZFxuICAgICAgICBiYWlsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjcm9wIHpvb21cbiAgICB6b29tID0gem9vbSA+IF9wLm1heFpvb20gPyBfcC5tYXhab29tIDogem9vbTtcbiAgICB6b29tID0gem9vbSA8IF9wLm1pblpvb20gPyBfcC5taW5ab29tIDogem9vbTtcblxuICAgIC8vIGNhbid0IHpvb20gd2l0aCBpbnZhbGlkIHBhcmFtc1xuICAgIGlmIChiYWlsIHx8ICFudW1iZXIkMSh6b29tKSB8fCB6b29tID09PSBjdXJyZW50Wm9vbSB8fCBwb3MgIT0gbnVsbCAmJiAoIW51bWJlciQxKHBvcy54KSB8fCAhbnVtYmVyJDEocG9zLnkpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwb3MgIT0gbnVsbCkge1xuICAgICAgLy8gc2V0IHpvb20gYWJvdXQgcG9zaXRpb25cbiAgICAgIHZhciBwYW4xID0gY3VycmVudFBhbjtcbiAgICAgIHZhciB6b29tMSA9IGN1cnJlbnRab29tO1xuICAgICAgdmFyIHpvb20yID0gem9vbTtcbiAgICAgIHZhciBwYW4yID0ge1xuICAgICAgICB4OiAtem9vbTIgLyB6b29tMSAqIChwb3MueCAtIHBhbjEueCkgKyBwb3MueCxcbiAgICAgICAgeTogLXpvb20yIC8gem9vbTEgKiAocG9zLnkgLSBwYW4xLnkpICsgcG9zLnlcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB6b29tZWQ6IHRydWUsXG4gICAgICAgIHBhbm5lZDogdHJ1ZSxcbiAgICAgICAgem9vbTogem9vbTIsXG4gICAgICAgIHBhbjogcGFuMlxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8ganVzdCBzZXQgdGhlIHpvb21cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHpvb21lZDogdHJ1ZSxcbiAgICAgICAgcGFubmVkOiBmYWxzZSxcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgICAgcGFuOiBjdXJyZW50UGFuXG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgem9vbTogZnVuY3Rpb24gem9vbShwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGdldFxuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2V0XG4gICAgICB2YXIgdnAgPSB0aGlzLmdldFpvb21lZFZpZXdwb3J0KHBhcmFtcyk7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgaWYgKHZwID09IG51bGwgfHwgIXZwLnpvb21lZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIF9wLnpvb20gPSB2cC56b29tO1xuICAgICAgaWYgKHZwLnBhbm5lZCkge1xuICAgICAgICBfcC5wYW4ueCA9IHZwLnBhbi54O1xuICAgICAgICBfcC5wYW4ueSA9IHZwLnBhbi55O1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0KCd6b29tJyArICh2cC5wYW5uZWQgPyAnIHBhbicgOiAnJykgKyAnIHZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH1cbiAgfSxcblxuICB2aWV3cG9ydDogZnVuY3Rpb24gdmlld3BvcnQob3B0cykge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIHpvb21EZWZkID0gdHJ1ZTtcbiAgICB2YXIgcGFuRGVmZCA9IHRydWU7XG4gICAgdmFyIGV2ZW50cyA9IFtdOyAvLyB0byB0cmlnZ2VyXG4gICAgdmFyIHpvb21GYWlsZWQgPSBmYWxzZTtcbiAgICB2YXIgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKCFudW1iZXIkMShvcHRzLnpvb20pKSB7XG4gICAgICB6b29tRGVmZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXBsYWluT2JqZWN0KG9wdHMucGFuKSkge1xuICAgICAgcGFuRGVmZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXpvb21EZWZkICYmICFwYW5EZWZkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHpvb21EZWZkKSB7XG4gICAgICB2YXIgeiA9IG9wdHMuem9vbTtcbiAgICAgIGlmICh6IDwgX3AubWluWm9vbSB8fCB6ID4gX3AubWF4Wm9vbSB8fCAhX3Auem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgICAgem9vbUZhaWxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcC56b29tID0gejtcbiAgICAgICAgZXZlbnRzLnB1c2goJ3pvb20nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhbkRlZmQgJiYgKCF6b29tRmFpbGVkIHx8ICFvcHRzLmNhbmNlbE9uRmFpbGVkWm9vbSkgJiYgX3AucGFubmluZ0VuYWJsZWQpIHtcbiAgICAgIHZhciBwID0gb3B0cy5wYW47XG4gICAgICBpZiAobnVtYmVyJDEocC54KSkge1xuICAgICAgICBfcC5wYW4ueCA9IHAueDtcbiAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyJDEocC55KSkge1xuICAgICAgICBfcC5wYW4ueSA9IHAueTtcbiAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXBhbkZhaWxlZCkge1xuICAgICAgICBldmVudHMucHVzaCgncGFuJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnRzLnB1c2goJ3ZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLmVtaXQoZXZlbnRzLmpvaW4oJyAnKSk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgY2VudGVyOiBmdW5jdGlvbiBjZW50ZXIoZWxlbWVudHMpIHtcbiAgICB2YXIgcGFuID0gdGhpcy5nZXRDZW50ZXJQYW4oZWxlbWVudHMpO1xuICAgIGlmIChwYW4pIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUucGFuID0gcGFuO1xuICAgICAgdGhpcy5lbWl0KCdwYW4gdmlld3BvcnQnKTtcbiAgICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBnZXRDZW50ZXJQYW46IGZ1bmN0aW9uIGdldENlbnRlclBhbihlbGVtZW50cywgem9vbSkge1xuICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RyaW5nKGVsZW1lbnRzKSkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudHM7XG4gICAgICBlbGVtZW50cyA9IHRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9IGVsc2UgaWYgKCFlbGVtZW50T3JDb2xsZWN0aW9uKGVsZW1lbnRzKSkge1xuICAgICAgZWxlbWVudHMgPSB0aGlzLm11dGFibGVFbGVtZW50cygpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjYW4ndCBjZW50cmUgcGFuIHRvIG5vdGhpbmdcblxuICAgIHZhciBiYiA9IGVsZW1lbnRzLmJvdW5kaW5nQm94KCk7XG4gICAgdmFyIHcgPSB0aGlzLndpZHRoKCk7XG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCgpO1xuICAgIHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl9wcml2YXRlLnpvb20gOiB6b29tO1xuICAgIHZhciBwYW4gPSB7XG4gICAgICAvLyBtaWRkbGVcbiAgICAgIHg6ICh3IC0gem9vbSAqIChiYi54MSArIGJiLngyKSkgLyAyLFxuICAgICAgeTogKGggLSB6b29tICogKGJiLnkxICsgYmIueTIpKSAvIDJcbiAgICB9O1xuICAgIHJldHVybiBwYW47XG4gIH0sXG4gIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBpZiAoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQgfHwgIXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnZpZXdwb3J0KHtcbiAgICAgIHBhbjoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgem9vbTogMVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGludmFsaWRhdGVTaXplOiBmdW5jdGlvbiBpbnZhbGlkYXRlU2l6ZSgpIHtcbiAgICB0aGlzLl9wcml2YXRlLnNpemVDYWNoZSA9IG51bGw7XG4gIH0sXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgY29udGFpbmVyID0gX3AuY29udGFpbmVyO1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgcmV0dXJuIF9wLnNpemVDYWNoZSA9IF9wLnNpemVDYWNoZSB8fCAoY29udGFpbmVyID8gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0eWxlID0gY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgdmFyIHZhbCA9IGZ1bmN0aW9uIHZhbChuYW1lKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGggLSB2YWwoJ3BhZGRpbmctbGVmdCcpIC0gdmFsKCdwYWRkaW5nLXJpZ2h0JyksXG4gICAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIHZhbCgncGFkZGluZy10b3AnKSAtIHZhbCgncGFkZGluZy1ib3R0b20nKVxuICAgICAgfTtcbiAgICB9KCkgOiB7XG4gICAgICAvLyBmYWxsYmFjayBpZiBubyBjb250YWluZXIgKG5vdCAwIGIvYyBjYW4gYmUgdXNlZCBmb3IgZGl2aWRpbmcgZXRjKVxuICAgICAgd2lkdGg6IDEsXG4gICAgICBoZWlnaHQ6IDFcbiAgICB9KTtcbiAgfSxcbiAgd2lkdGg6IGZ1bmN0aW9uIHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnNpemUoKS53aWR0aDtcbiAgfSxcbiAgaGVpZ2h0OiBmdW5jdGlvbiBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodDtcbiAgfSxcbiAgZXh0ZW50OiBmdW5jdGlvbiBleHRlbnQoKSB7XG4gICAgdmFyIHBhbiA9IHRoaXMuX3ByaXZhdGUucGFuO1xuICAgIHZhciB6b29tID0gdGhpcy5fcHJpdmF0ZS56b29tO1xuICAgIHZhciByYiA9IHRoaXMucmVuZGVyZWRFeHRlbnQoKTtcbiAgICB2YXIgYiA9IHtcbiAgICAgIHgxOiAocmIueDEgLSBwYW4ueCkgLyB6b29tLFxuICAgICAgeDI6IChyYi54MiAtIHBhbi54KSAvIHpvb20sXG4gICAgICB5MTogKHJiLnkxIC0gcGFuLnkpIC8gem9vbSxcbiAgICAgIHkyOiAocmIueTIgLSBwYW4ueSkgLyB6b29tXG4gICAgfTtcbiAgICBiLncgPSBiLngyIC0gYi54MTtcbiAgICBiLmggPSBiLnkyIC0gYi55MTtcbiAgICByZXR1cm4gYjtcbiAgfSxcbiAgcmVuZGVyZWRFeHRlbnQ6IGZ1bmN0aW9uIHJlbmRlcmVkRXh0ZW50KCkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKTtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHgyOiB3aWR0aCxcbiAgICAgIHkyOiBoZWlnaHQsXG4gICAgICB3OiB3aWR0aCxcbiAgICAgIGg6IGhlaWdodFxuICAgIH07XG4gIH0sXG4gIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6IGZ1bmN0aW9uIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoX2ludCkge1xuICAgIGlmIChfaW50KSB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUgPSBfaW50O2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuY29yZWZuJDEuY2VudHJlID0gY29yZWZuJDEuY2VudGVyO1xuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29yZWZuJDEuYXV0b2xvY2tOb2RlcyA9IGNvcmVmbiQxLmF1dG9sb2NrO1xuY29yZWZuJDEuYXV0b3VuZ3JhYmlmeU5vZGVzID0gY29yZWZuJDEuYXV0b3VuZ3JhYmlmeTtcblxudmFyIGZuID0ge1xuICBkYXRhOiBkZWZpbmUuZGF0YSh7XG4gICAgZmllbGQ6ICdkYXRhJyxcbiAgICBiaW5kaW5nRXZlbnQ6ICdkYXRhJyxcbiAgICBhbGxvd0JpbmRpbmc6IHRydWUsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdFdmVudDogJ2RhdGEnLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICBhbGxvd0dldHRpbmc6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHJlbW92ZURhdGE6IGRlZmluZS5yZW1vdmVEYXRhKHtcbiAgICBmaWVsZDogJ2RhdGEnLFxuICAgIGV2ZW50OiAnZGF0YScsXG4gICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgIHRyaWdnZXJFdmVudDogdHJ1ZSxcbiAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICB9KSxcbiAgc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgYmluZGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nRXZlbnQ6ICdzY3JhdGNoJyxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByZW1vdmVTY3JhdGNoOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdzY3JhdGNoJyxcbiAgICBldmVudDogJ3NjcmF0Y2gnLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSlcbn07XG5cbi8vIGFsaWFzZXNcbmZuLmF0dHIgPSBmbi5kYXRhO1xuZm4ucmVtb3ZlQXR0ciA9IGZuLnJlbW92ZURhdGE7XG5cbnZhciBDb3JlID0gZnVuY3Rpb24gQ29yZShvcHRzKSB7XG4gIHZhciBjeSA9IHRoaXM7XG4gIG9wdHMgPSBleHRlbmQoe30sIG9wdHMpO1xuICB2YXIgY29udGFpbmVyID0gb3B0cy5jb250YWluZXI7XG5cbiAgLy8gYWxsb3cgZm9yIHBhc3NpbmcgYSB3cmFwcGVkIGpxdWVyeSBvYmplY3RcbiAgLy8gZS5nLiBjeXRvc2NhcGUoeyBjb250YWluZXI6ICQoJyNjeScpIH0pXG4gIGlmIChjb250YWluZXIgJiYgIWh0bWxFbGVtZW50KGNvbnRhaW5lcikgJiYgaHRtbEVsZW1lbnQoY29udGFpbmVyWzBdKSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclswXTtcbiAgfVxuICB2YXIgcmVnID0gY29udGFpbmVyID8gY29udGFpbmVyLl9jeXJlZyA6IG51bGw7IC8vIGUuZy4gYWxyZWFkeSByZWdpc3RlcmVkIHNvbWUgaW5mbyAoZS5nLiByZWFkaWVzKSB2aWEganF1ZXJ5XG4gIHJlZyA9IHJlZyB8fCB7fTtcbiAgaWYgKHJlZyAmJiByZWcuY3kpIHtcbiAgICByZWcuY3kuZGVzdHJveSgpO1xuICAgIHJlZyA9IHt9OyAvLyBvbGQgaW5zdGFuY2UgPT4gcmVwbGFjZSByZWcgY29tcGxldGVseVxuICB9XG5cbiAgdmFyIHJlYWRpZXMgPSByZWcucmVhZGllcyA9IHJlZy5yZWFkaWVzIHx8IFtdO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgY29udGFpbmVyLl9jeXJlZyA9IHJlZztcbiAgfSAvLyBtYWtlIHN1cmUgY29udGFpbmVyIGFzc29jJ2QgcmVnIHBvaW50cyB0byB0aGlzIGN5XG4gIHJlZy5jeSA9IGN5O1xuICB2YXIgaGVhZCA9IF93aW5kb3cgIT09IHVuZGVmaW5lZCAmJiBjb250YWluZXIgIT09IHVuZGVmaW5lZCAmJiAhb3B0cy5oZWFkbGVzcztcbiAgdmFyIG9wdGlvbnMgPSBvcHRzO1xuICBvcHRpb25zLmxheW91dCA9IGV4dGVuZCh7XG4gICAgbmFtZTogaGVhZCA/ICdncmlkJyA6ICdudWxsJ1xuICB9LCBvcHRpb25zLmxheW91dCk7XG4gIG9wdGlvbnMucmVuZGVyZXIgPSBleHRlbmQoe1xuICAgIG5hbWU6IGhlYWQgPyAnY2FudmFzJyA6ICdudWxsJ1xuICB9LCBvcHRpb25zLnJlbmRlcmVyKTtcbiAgdmFyIGRlZlZhbCA9IGZ1bmN0aW9uIGRlZlZhbChkZWYsIHZhbCwgYWx0VmFsKSB7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0gZWxzZSBpZiAoYWx0VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhbHRWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWY7XG4gICAgfVxuICB9O1xuICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0ge1xuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIC8vIGh0bWwgZG9tIGVsZSBjb250YWluZXJcbiAgICByZWFkeTogZmFsc2UsXG4gICAgLy8gd2hldGhlciByZWFkeSBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIC8vIGNhY2hlZCBvcHRpb25zXG4gICAgZWxlbWVudHM6IG5ldyBDb2xsZWN0aW9uKHRoaXMpLFxuICAgIC8vIGVsZW1lbnRzIGluIHRoZSBncmFwaFxuICAgIGxpc3RlbmVyczogW10sXG4gICAgLy8gbGlzdCBvZiBsaXN0ZW5lcnNcbiAgICBhbmlFbGVzOiBuZXcgQ29sbGVjdGlvbih0aGlzKSxcbiAgICAvLyBlbGVtZW50cyBiZWluZyBhbmltYXRlZFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSB8fCB7fSxcbiAgICAvLyBkYXRhIGZvciB0aGUgY29yZVxuICAgIHNjcmF0Y2g6IHt9LFxuICAgIC8vIHNjcmF0Y2ggb2JqZWN0IGZvciBjb3JlXG4gICAgbGF5b3V0OiBudWxsLFxuICAgIHJlbmRlcmVyOiBudWxsLFxuICAgIGRlc3Ryb3llZDogZmFsc2UsXG4gICAgLy8gd2hldGhlciBkZXN0cm95IHdhcyBjYWxsZWRcbiAgICBub3RpZmljYXRpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHJlbmRlcmVyXG4gICAgbWluWm9vbTogMWUtNTAsXG4gICAgbWF4Wm9vbTogMWU1MCxcbiAgICB6b29taW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMuem9vbWluZ0VuYWJsZWQpLFxuICAgIHVzZXJab29taW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMudXNlclpvb21pbmdFbmFibGVkKSxcbiAgICBwYW5uaW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMucGFubmluZ0VuYWJsZWQpLFxuICAgIHVzZXJQYW5uaW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMudXNlclBhbm5pbmdFbmFibGVkKSxcbiAgICBib3hTZWxlY3Rpb25FbmFibGVkOiBkZWZWYWwodHJ1ZSwgb3B0aW9ucy5ib3hTZWxlY3Rpb25FbmFibGVkKSxcbiAgICBhdXRvbG9jazogZGVmVmFsKGZhbHNlLCBvcHRpb25zLmF1dG9sb2NrLCBvcHRpb25zLmF1dG9sb2NrTm9kZXMpLFxuICAgIGF1dG91bmdyYWJpZnk6IGRlZlZhbChmYWxzZSwgb3B0aW9ucy5hdXRvdW5ncmFiaWZ5LCBvcHRpb25zLmF1dG91bmdyYWJpZnlOb2RlcyksXG4gICAgYXV0b3Vuc2VsZWN0aWZ5OiBkZWZWYWwoZmFsc2UsIG9wdGlvbnMuYXV0b3Vuc2VsZWN0aWZ5KSxcbiAgICBzdHlsZUVuYWJsZWQ6IG9wdGlvbnMuc3R5bGVFbmFibGVkID09PSB1bmRlZmluZWQgPyBoZWFkIDogb3B0aW9ucy5zdHlsZUVuYWJsZWQsXG4gICAgem9vbTogbnVtYmVyJDEob3B0aW9ucy56b29tKSA/IG9wdGlvbnMuem9vbSA6IDEsXG4gICAgcGFuOiB7XG4gICAgICB4OiBwbGFpbk9iamVjdChvcHRpb25zLnBhbikgJiYgbnVtYmVyJDEob3B0aW9ucy5wYW4ueCkgPyBvcHRpb25zLnBhbi54IDogMCxcbiAgICAgIHk6IHBsYWluT2JqZWN0KG9wdGlvbnMucGFuKSAmJiBudW1iZXIkMShvcHRpb25zLnBhbi55KSA/IG9wdGlvbnMucGFuLnkgOiAwXG4gICAgfSxcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC8vIG9iamVjdCBmb3IgY3VycmVudGx5LXJ1bm5pbmcgYW5pbWF0aW9uc1xuICAgICAgY3VycmVudDogW10sXG4gICAgICBxdWV1ZTogW11cbiAgICB9LFxuICAgIGhhc0NvbXBvdW5kTm9kZXM6IGZhbHNlLFxuICAgIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6IGRlZlZhbCgyNTAsIG9wdGlvbnMubXVsdGlDbGlja0RlYm91bmNlVGltZSlcbiAgfTtcbiAgdGhpcy5jcmVhdGVFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiB0eXBlXG4gIHRoaXMuc2VsZWN0aW9uVHlwZShvcHRpb25zLnNlbGVjdGlvblR5cGUpO1xuXG4gIC8vIGluaXQgem9vbSBib3VuZHNcbiAgdGhpcy56b29tUmFuZ2Uoe1xuICAgIG1pbjogb3B0aW9ucy5taW5ab29tLFxuICAgIG1heDogb3B0aW9ucy5tYXhab29tXG4gIH0pO1xuICB2YXIgbG9hZEV4dERhdGEgPSBmdW5jdGlvbiBsb2FkRXh0RGF0YShleHREYXRhLCBuZXh0KSB7XG4gICAgdmFyIGFueUlzUHJvbWlzZSA9IGV4dERhdGEuc29tZShwcm9taXNlKTtcbiAgICBpZiAoYW55SXNQcm9taXNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZSQxLmFsbChleHREYXRhKS50aGVuKG5leHQpOyAvLyBsb2FkIGFsbCBkYXRhIGFzeW5jaHJvbm91c2x5LCB0aGVuIGV4ZWMgcmVzdCBvZiBpbml0XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQoZXh0RGF0YSk7IC8vIGV4ZWMgc3luY2hyb25vdXNseSBmb3IgY29udmVuaWVuY2VcbiAgICB9XG4gIH07XG5cbiAgLy8gc3RhcnQgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZXNoZWV0IHNvIHdlIGhhdmUgc29tZXRoaW5nIGJlZm9yZSBsb2FkaW5nIGFuIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgaWYgKF9wLnN0eWxlRW5hYmxlZCkge1xuICAgIGN5LnNldFN0eWxlKFtdKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgcmVuZGVyZXJcbiAgdmFyIHJlbmRlcmVyT3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucywgb3B0aW9ucy5yZW5kZXJlcik7IC8vIGFsbG93IHJlbmRlcmluZyBoaW50cyBpbiB0b3AgbGV2ZWwgb3B0aW9uc1xuICBjeS5pbml0UmVuZGVyZXIocmVuZGVyZXJPcHRpb25zKTtcbiAgdmFyIHNldEVsZXNBbmRMYXlvdXQgPSBmdW5jdGlvbiBzZXRFbGVzQW5kTGF5b3V0KGVsZW1lbnRzLCBvbmxvYWQsIG9uZG9uZSkge1xuICAgIGN5Lm5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuXG4gICAgLy8gcmVtb3ZlIG9sZCBlbGVtZW50c1xuICAgIHZhciBvbGRFbGVzID0gY3kubXV0YWJsZUVsZW1lbnRzKCk7XG4gICAgaWYgKG9sZEVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgb2xkRWxlcy5yZW1vdmUoKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHtcbiAgICAgIGlmIChwbGFpbk9iamVjdChlbGVtZW50cykgfHwgYXJyYXkoZWxlbWVudHMpKSB7XG4gICAgICAgIGN5LmFkZChlbGVtZW50cyk7XG4gICAgICB9XG4gICAgfVxuICAgIGN5Lm9uZSgnbGF5b3V0cmVhZHknLCBmdW5jdGlvbiAoZSkge1xuICAgICAgY3kubm90aWZpY2F0aW9ucyh0cnVlKTtcbiAgICAgIGN5LmVtaXQoZSk7IC8vIHdlIG1pc3NlZCB0aGlzIGV2ZW50IGJ5IHR1cm5pbmcgbm90aWZpY2F0aW9ucyBvZmYsIHNvIHBhc3MgaXQgb25cblxuICAgICAgY3kub25lKCdsb2FkJywgb25sb2FkKTtcbiAgICAgIGN5LmVtaXRBbmROb3RpZnkoJ2xvYWQnKTtcbiAgICB9KS5vbmUoJ2xheW91dHN0b3AnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjeS5vbmUoJ2RvbmUnLCBvbmRvbmUpO1xuICAgICAgY3kuZW1pdCgnZG9uZScpO1xuICAgIH0pO1xuICAgIHZhciBsYXlvdXRPcHRzID0gZXh0ZW5kKHt9LCBjeS5fcHJpdmF0ZS5vcHRpb25zLmxheW91dCk7XG4gICAgbGF5b3V0T3B0cy5lbGVzID0gY3kuZWxlbWVudHMoKTtcbiAgICBjeS5sYXlvdXQobGF5b3V0T3B0cykucnVuKCk7XG4gIH07XG4gIGxvYWRFeHREYXRhKFtvcHRpb25zLnN0eWxlLCBvcHRpb25zLmVsZW1lbnRzXSwgZnVuY3Rpb24gKHRoZW5zKSB7XG4gICAgdmFyIGluaXRTdHlsZSA9IHRoZW5zWzBdO1xuICAgIHZhciBpbml0RWxlcyA9IHRoZW5zWzFdO1xuXG4gICAgLy8gaW5pdCBzdHlsZVxuICAgIGlmIChfcC5zdHlsZUVuYWJsZWQpIHtcbiAgICAgIGN5LnN0eWxlKCkuYXBwZW5kKGluaXRTdHlsZSk7XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbCBsb2FkXG4gICAgc2V0RWxlc0FuZExheW91dChpbml0RWxlcywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gb25yZWFkeVxuICAgICAgY3kuc3RhcnRBbmltYXRpb25Mb29wKCk7XG4gICAgICBfcC5yZWFkeSA9IHRydWU7XG5cbiAgICAgIC8vIGlmIGEgcmVhZHkgY2FsbGJhY2sgaXMgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiwgdGhlIGJpbmQgaXRcbiAgICAgIGlmIChmbiQ2KG9wdGlvbnMucmVhZHkpKSB7XG4gICAgICAgIGN5Lm9uKCdyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgICAgfVxuXG4gICAgICAvLyBiaW5kIGFsbCB0aGUgcmVhZHkgaGFuZGxlcnMgcmVnaXN0ZXJlZCBiZWZvcmUgY3JlYXRpbmcgdGhpcyBpbnN0YW5jZVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFkaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IHJlYWRpZXNbaV07XG4gICAgICAgIGN5Lm9uKCdyZWFkeScsIGZuKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWcpIHtcbiAgICAgICAgcmVnLnJlYWRpZXMgPSBbXTtcbiAgICAgIH0gLy8gY2xlYXIgYi9jIHdlJ3ZlIGJvdW5kIHRoZW0gYWxsIGFuZCBkb24ndCB3YW50IHRvIGtlZXAgaXQgYXJvdW5kIGluIGNhc2UgYSBuZXcgY29yZSB1c2VzIHRoZSBzYW1lIGRpdiBldGNcblxuICAgICAgY3kuZW1pdCgncmVhZHknKTtcbiAgICB9LCBvcHRpb25zLmRvbmUpO1xuICB9KTtcbn07XG52YXIgY29yZWZuID0gQ29yZS5wcm90b3R5cGU7IC8vIHNob3J0IGFsaWFzXG5cbmV4dGVuZChjb3JlZm4sIHtcbiAgaW5zdGFuY2VTdHJpbmc6IGZ1bmN0aW9uIGluc3RhbmNlU3RyaW5nKCkge1xuICAgIHJldHVybiAnY29yZSc7XG4gIH0sXG4gIGlzUmVhZHk6IGZ1bmN0aW9uIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucmVhZHk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgcmVhZHk6IGZ1bmN0aW9uIHJlYWR5KGZuKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkeSgpKSB7XG4gICAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KCdyZWFkeScsIFtdLCBmbik7IC8vIGp1c3QgY2FsbHMgZm4gYXMgdGhvdWdoIHRyaWdnZXJlZCB2aWEgcmVhZHkgZXZlbnRcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbigncmVhZHknLCBmbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgaWYgKGN5LmRlc3Ryb3llZCgpKSByZXR1cm47XG4gICAgY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICB0aGlzLmVtaXQoJ2Rlc3Ryb3knKTtcbiAgICBjeS5fcHJpdmF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHJldHVybiBjeTtcbiAgfSxcbiAgaGFzRWxlbWVudFdpdGhJZDogZnVuY3Rpb24gaGFzRWxlbWVudFdpdGhJZChpZCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoaWQpO1xuICB9LFxuICBnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChpZCk7XG4gIH0sXG4gIGhhc0NvbXBvdW5kTm9kZXM6IGZ1bmN0aW9uIGhhc0NvbXBvdW5kTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2RlcztcbiAgfSxcbiAgaGVhZGxlc3M6IGZ1bmN0aW9uIGhlYWRsZXNzKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyLmlzSGVhZGxlc3MoKTtcbiAgfSxcbiAgc3R5bGVFbmFibGVkOiBmdW5jdGlvbiBzdHlsZUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkO1xuICB9LFxuICBhZGRUb1Bvb2w6IGZ1bmN0aW9uIGFkZFRvUG9vbChlbGVzKSB7XG4gICAgdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShlbGVzKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICByZW1vdmVGcm9tUG9vbDogZnVuY3Rpb24gcmVtb3ZlRnJvbVBvb2woZWxlcykge1xuICAgIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMudW5tZXJnZShlbGVzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29udGFpbmVyOiBmdW5jdGlvbiBjb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY29udGFpbmVyIHx8IG51bGw7XG4gIH0sXG4gIHdpbmRvdzogZnVuY3Rpb24gd2luZG93KCkge1xuICAgIHZhciBjb250YWluZXIgPSB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcjtcbiAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHJldHVybiBfd2luZG93O1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gdGhpcy5fcHJpdmF0ZS5jb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgICBpZiAob3duZXJEb2N1bWVudCA9PT0gdW5kZWZpbmVkIHx8IG93bmVyRG9jdW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIF93aW5kb3c7XG4gICAgfVxuICAgIHJldHVybiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IF93aW5kb3c7XG4gIH0sXG4gIG1vdW50OiBmdW5jdGlvbiBtb3VudChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICB2YXIgX3AgPSBjeS5fcHJpdmF0ZTtcbiAgICB2YXIgb3B0aW9ucyA9IF9wLm9wdGlvbnM7XG4gICAgaWYgKCFodG1sRWxlbWVudChjb250YWluZXIpICYmIGh0bWxFbGVtZW50KGNvbnRhaW5lclswXSkpIHtcbiAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclswXTtcbiAgICB9XG4gICAgY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICBfcC5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgX3Auc3R5bGVFbmFibGVkID0gdHJ1ZTtcbiAgICBjeS5pbnZhbGlkYXRlU2l6ZSgpO1xuICAgIGN5LmluaXRSZW5kZXJlcihleHRlbmQoe30sIG9wdGlvbnMsIG9wdGlvbnMucmVuZGVyZXIsIHtcbiAgICAgIC8vIGFsbG93IGN1c3RvbSByZW5kZXJlciBuYW1lIHRvIGJlIHJlLXVzZWQsIG90aGVyd2lzZSB1c2UgY2FudmFzXG4gICAgICBuYW1lOiBvcHRpb25zLnJlbmRlcmVyLm5hbWUgPT09ICdudWxsJyA/ICdjYW52YXMnIDogb3B0aW9ucy5yZW5kZXJlci5uYW1lXG4gICAgfSkpO1xuICAgIGN5LnN0YXJ0QW5pbWF0aW9uTG9vcCgpO1xuICAgIGN5LnN0eWxlKG9wdGlvbnMuc3R5bGUpO1xuICAgIGN5LmVtaXQoJ21vdW50Jyk7XG4gICAgcmV0dXJuIGN5O1xuICB9LFxuICB1bm1vdW50OiBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICBjeS5pbml0UmVuZGVyZXIoe1xuICAgICAgbmFtZTogJ251bGwnXG4gICAgfSk7XG4gICAgY3kuZW1pdCgndW5tb3VudCcpO1xuICAgIHJldHVybiBjeTtcbiAgfSxcbiAgb3B0aW9uczogZnVuY3Rpb24gb3B0aW9ucygpIHtcbiAgICByZXR1cm4gY29weSh0aGlzLl9wcml2YXRlLm9wdGlvbnMpO1xuICB9LFxuICBqc29uOiBmdW5jdGlvbiBqc29uKG9iaikge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgdmFyIF9wID0gY3kuX3ByaXZhdGU7XG4gICAgdmFyIGVsZXMgPSBjeS5tdXRhYmxlRWxlbWVudHMoKTtcbiAgICB2YXIgZ2V0RnJlc2hSZWYgPSBmdW5jdGlvbiBnZXRGcmVzaFJlZihlbGUpIHtcbiAgICAgIHJldHVybiBjeS5nZXRFbGVtZW50QnlJZChlbGUuaWQoKSk7XG4gICAgfTtcbiAgICBpZiAocGxhaW5PYmplY3Qob2JqKSkge1xuICAgICAgLy8gc2V0XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGlmIChvYmouZWxlbWVudHMpIHtcbiAgICAgICAgdmFyIGlkSW5Kc29uID0ge307XG4gICAgICAgIHZhciB1cGRhdGVFbGVzID0gZnVuY3Rpb24gdXBkYXRlRWxlcyhqc29ucywgZ3IpIHtcbiAgICAgICAgICB2YXIgdG9BZGQgPSBbXTtcbiAgICAgICAgICB2YXIgdG9Nb2QgPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIganNvbiA9IGpzb25zW2ldO1xuICAgICAgICAgICAgaWYgKCFqc29uLmRhdGEuaWQpIHtcbiAgICAgICAgICAgICAgd2FybignY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUnKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWQgPSAnJyArIGpzb24uZGF0YS5pZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcbiAgICAgICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgICAgICBpZEluSnNvbltpZF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVsZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgZWxlbWVudCBzaG91bGQgYmUgdXBkYXRlZFxuICAgICAgICAgICAgICB0b01vZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGU6IGVsZSxcbiAgICAgICAgICAgICAgICBqc29uOiBqc29uXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNob3VsZCBiZSBhZGRlZFxuICAgICAgICAgICAgICBpZiAoZ3IpIHtcbiAgICAgICAgICAgICAgICBqc29uLmdyb3VwID0gZ3I7XG4gICAgICAgICAgICAgICAgdG9BZGQucHVzaChqc29uKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKGpzb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGN5LmFkZCh0b0FkZCk7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRvTW9kLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIF90b01vZCRfaSA9IHRvTW9kW19pXSxcbiAgICAgICAgICAgICAgX2VsZSA9IF90b01vZCRfaS5lbGUsXG4gICAgICAgICAgICAgIF9qc29uID0gX3RvTW9kJF9pLmpzb247XG4gICAgICAgICAgICBfZWxlLmpzb24oX2pzb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFycmF5KG9iai5lbGVtZW50cykpIHtcbiAgICAgICAgICAvLyBlbGVtZW50czogW11cbiAgICAgICAgICB1cGRhdGVFbGVzKG9iai5lbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZWxlbWVudHM6IHsgbm9kZXM6IFtdLCBlZGdlczogW10gfVxuICAgICAgICAgIHZhciBncnMgPSBbJ25vZGVzJywgJ2VkZ2VzJ107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBnciA9IGdyc1tpXTtcbiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IG9iai5lbGVtZW50c1tncl07XG4gICAgICAgICAgICBpZiAoYXJyYXkoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVsZXMoZWxlbWVudHMsIGdyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudHNUb1JlbW92ZSA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiAhaWRJbkpzb25bZWxlLmlkKCldO1xuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgICAgIHBhcmVudHNUb1JlbW92ZS5tZXJnZShlbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzbyB0aGF0IGNoaWxkcmVuIGFyZSBub3QgcmVtb3ZlZCB3L3BhcmVudFxuICAgICAgICBwYXJlbnRzVG9SZW1vdmUuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5jaGlsZHJlbigpLm1vdmUoe1xuICAgICAgICAgICAgcGFyZW50OiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBwYXJlbnRzIG1heSBiZSBtb3ZlZCBieSBwcmlvciBsaW5lLCBzbyBtYWtlIHN1cmUgd2UgcmVtb3ZlIGJ5IGZyZXNoIHJlZnNcbiAgICAgICAgcGFyZW50c1RvUmVtb3ZlLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiBnZXRGcmVzaFJlZihlbGUpLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvYmouc3R5bGUpIHtcbiAgICAgICAgY3kuc3R5bGUob2JqLnN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChvYmouem9vbSAhPSBudWxsICYmIG9iai56b29tICE9PSBfcC56b29tKSB7XG4gICAgICAgIGN5Lnpvb20ob2JqLnpvb20pO1xuICAgICAgfVxuICAgICAgaWYgKG9iai5wYW4pIHtcbiAgICAgICAgaWYgKG9iai5wYW4ueCAhPT0gX3AucGFuLnggfHwgb2JqLnBhbi55ICE9PSBfcC5wYW4ueSkge1xuICAgICAgICAgIGN5LnBhbihvYmoucGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9iai5kYXRhKSB7XG4gICAgICAgIGN5LmRhdGEob2JqLmRhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIGZpZWxkcyA9IFsnbWluWm9vbScsICdtYXhab29tJywgJ3pvb21pbmdFbmFibGVkJywgJ3VzZXJab29taW5nRW5hYmxlZCcsICdwYW5uaW5nRW5hYmxlZCcsICd1c2VyUGFubmluZ0VuYWJsZWQnLCAnYm94U2VsZWN0aW9uRW5hYmxlZCcsICdhdXRvbG9jaycsICdhdXRvdW5ncmFiaWZ5JywgJ2F1dG91bnNlbGVjdGlmeScsICdtdWx0aUNsaWNrRGVib3VuY2VUaW1lJ107XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBmaWVsZHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgZiA9IGZpZWxkc1tfaTJdO1xuICAgICAgICBpZiAob2JqW2ZdICE9IG51bGwpIHtcbiAgICAgICAgICBjeVtmXShvYmpbZl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldFxuICAgICAgdmFyIGZsYXQgPSAhIW9iajtcbiAgICAgIHZhciBqc29uID0ge307XG4gICAgICBpZiAoZmxhdCkge1xuICAgICAgICBqc29uLmVsZW1lbnRzID0gdGhpcy5lbGVtZW50cygpLm1hcChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5qc29uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAganNvbi5lbGVtZW50cyA9IHt9O1xuICAgICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHZhciBncm91cCA9IGVsZS5ncm91cCgpO1xuICAgICAgICAgIGlmICghanNvbi5lbGVtZW50c1tncm91cF0pIHtcbiAgICAgICAgICAgIGpzb24uZWxlbWVudHNbZ3JvdXBdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGpzb24uZWxlbWVudHNbZ3JvdXBdLnB1c2goZWxlLmpzb24oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIGpzb24uc3R5bGUgPSBjeS5zdHlsZSgpLmpzb24oKTtcbiAgICAgIH1cbiAgICAgIGpzb24uZGF0YSA9IGNvcHkoY3kuZGF0YSgpKTtcbiAgICAgIHZhciBvcHRpb25zID0gX3Aub3B0aW9ucztcbiAgICAgIGpzb24uem9vbWluZ0VuYWJsZWQgPSBfcC56b29taW5nRW5hYmxlZDtcbiAgICAgIGpzb24udXNlclpvb21pbmdFbmFibGVkID0gX3AudXNlclpvb21pbmdFbmFibGVkO1xuICAgICAganNvbi56b29tID0gX3Auem9vbTtcbiAgICAgIGpzb24ubWluWm9vbSA9IF9wLm1pblpvb207XG4gICAgICBqc29uLm1heFpvb20gPSBfcC5tYXhab29tO1xuICAgICAganNvbi5wYW5uaW5nRW5hYmxlZCA9IF9wLnBhbm5pbmdFbmFibGVkO1xuICAgICAganNvbi51c2VyUGFubmluZ0VuYWJsZWQgPSBfcC51c2VyUGFubmluZ0VuYWJsZWQ7XG4gICAgICBqc29uLnBhbiA9IGNvcHkoX3AucGFuKTtcbiAgICAgIGpzb24uYm94U2VsZWN0aW9uRW5hYmxlZCA9IF9wLmJveFNlbGVjdGlvbkVuYWJsZWQ7XG4gICAgICBqc29uLnJlbmRlcmVyID0gY29weShvcHRpb25zLnJlbmRlcmVyKTtcbiAgICAgIGpzb24uaGlkZUVkZ2VzT25WaWV3cG9ydCA9IG9wdGlvbnMuaGlkZUVkZ2VzT25WaWV3cG9ydDtcbiAgICAgIGpzb24udGV4dHVyZU9uVmlld3BvcnQgPSBvcHRpb25zLnRleHR1cmVPblZpZXdwb3J0O1xuICAgICAganNvbi53aGVlbFNlbnNpdGl2aXR5ID0gb3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5O1xuICAgICAganNvbi5tb3Rpb25CbHVyID0gb3B0aW9ucy5tb3Rpb25CbHVyO1xuICAgICAganNvbi5tdWx0aUNsaWNrRGVib3VuY2VUaW1lID0gb3B0aW9ucy5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO1xuICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICB9XG59KTtcbmNvcmVmbi4kaWQgPSBjb3JlZm4uZ2V0RWxlbWVudEJ5SWQ7XG5bY29yZWZuJDksIGNvcmVmbiQ4LCBlbGVzZm4sIGNvcmVmbiQ3LCBjb3JlZm4kNiwgY29yZWZuJDUsIGNvcmVmbiQ0LCBjb3JlZm4kMywgY29yZWZuJDIsIGNvcmVmbiQxLCBmbl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKGNvcmVmbiwgcHJvcHMpO1xufSk7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZGVmYXVsdHMkNyA9IHtcbiAgZml0OiB0cnVlLFxuICAvLyB3aGV0aGVyIHRvIGZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIGdyYXBoXG4gIGRpcmVjdGVkOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0aGUgdHJlZSBpcyBkaXJlY3RlZCBkb3dud2FyZHMgKG9yIGVkZ2VzIGNhbiBwb2ludCBpbiBhbnkgZGlyZWN0aW9uIGlmIGZhbHNlKVxuICBwYWRkaW5nOiAzMCxcbiAgLy8gcGFkZGluZyBvbiBmaXRcbiAgY2lyY2xlOiBmYWxzZSxcbiAgLy8gcHV0IGRlcHRocyBpbiBjb25jZW50cmljIGNpcmNsZXMgaWYgdHJ1ZSwgcHV0IGRlcHRocyB0b3AgZG93biBpZiBmYWxzZVxuICBncmlkOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBjcmVhdGUgYW4gZXZlbiBncmlkIGludG8gd2hpY2ggdGhlIERBRyBpcyBwbGFjZWQgKGNpcmNsZTpmYWxzZSBvbmx5KVxuICBzcGFjaW5nRmFjdG9yOiAxLjc1LFxuICAvLyBwb3NpdGl2ZSBzcGFjaW5nIGZhY3RvciwgbGFyZ2VyID0+IG1vcmUgc3BhY2UgYmV0d2VlbiBub2RlcyAoTi5CLiBuL2EgaWYgY2F1c2VzIG92ZXJsYXApXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gIC8vIHByZXZlbnRzIG5vZGUgb3ZlcmxhcCwgbWF5IG92ZXJmbG93IGJvdW5kaW5nQm94IGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgcm9vdHM6IHVuZGVmaW5lZCxcbiAgLy8gdGhlIHJvb3RzIG9mIHRoZSB0cmVlc1xuICBkZXB0aFNvcnQ6IHVuZGVmaW5lZCxcbiAgLy8gYSBzb3J0aW5nIGZ1bmN0aW9uIHRvIG9yZGVyIG5vZGVzIGF0IGVxdWFsIGRlcHRoLiBlLmcuIGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYS5kYXRhKCd3ZWlnaHQnKSAtIGIuZGF0YSgnd2VpZ2h0JykgfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkLFxuICBhbmltYXRlRmlsdGVyOiBmdW5jdGlvbiBhbmltYXRlRmlsdGVyKG5vZGUsIGkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgLy8gYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWQuICBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWQuICBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICByZWFkeTogdW5kZWZpbmVkLFxuICAvLyBjYWxsYmFjayBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHN0b3BcbiAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH0gLy8gdHJhbnNmb3JtIGEgZ2l2ZW4gbm9kZSBwb3NpdGlvbi4gVXNlZnVsIGZvciBjaGFuZ2luZyBmbG93IGRpcmVjdGlvbiBpbiBkaXNjcmV0ZSBsYXlvdXRzXG59O1xuXG52YXIgZGVwcmVjYXRlZE9wdGlvbkRlZmF1bHRzID0ge1xuICBtYXhpbWFsOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBzaGlmdCBub2RlcyBkb3duIHRoZWlyIG5hdHVyYWwgQkZTIGRlcHRocyBpbiBvcmRlciB0byBhdm9pZCB1cHdhcmRzIGVkZ2VzIChEQUdTIG9ubHkpOyBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZSBhbHNvXG4gIGFjeWNsaWM6IGZhbHNlIC8vIHdoZXRoZXIgdGhlIHRyZWUgaXMgYWN5Y2xpYyBhbmQgdGh1cyBhIG5vZGUgY291bGQgYmUgc2hpZnRlZCAoZHVlIHRvIHRoZSBtYXhpbWFsIG9wdGlvbikgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3A7IHNldHRpbmcgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZSBhbHNvOyBpZiB5b3UgYXJlIHVuY2VydGFpbiB3aGV0aGVyIGEgdHJlZSBpcyBhY3ljbGljLCBzZXQgdG8gZmFsc2UgdG8gYXZvaWQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzXG59O1xuXG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnZhciBnZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbyhlbGUpIHtcbiAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnKTtcbn07XG52YXIgc2V0SW5mbyA9IGZ1bmN0aW9uIHNldEluZm8oZWxlLCBvYmopIHtcbiAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnLCBvYmopO1xufTtcbmZ1bmN0aW9uIEJyZWFkdGhGaXJzdExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkNywgZGVwcmVjYXRlZE9wdGlvbkRlZmF1bHRzLCBvcHRpb25zKTtcbn1cbkJyZWFkdGhGaXJzdExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgb3B0aW9ucyA9IHBhcmFtcztcbiAgdmFyIGN5ID0gcGFyYW1zLmN5O1xuICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgIHJldHVybiAhbi5pc1BhcmVudCgpO1xuICB9KTtcbiAgdmFyIGdyYXBoID0gZWxlcztcbiAgdmFyIGRpcmVjdGVkID0gb3B0aW9ucy5kaXJlY3RlZDtcbiAgdmFyIG1heGltYWwgPSBvcHRpb25zLmFjeWNsaWMgfHwgb3B0aW9ucy5tYXhpbWFsIHx8IG9wdGlvbnMubWF4aW1hbEFkanVzdG1lbnRzID4gMDsgLy8gbWF4aW1hbEFkanVzdG1lbnRzIGZvciBjb21wYXQuIHcvIG9sZCBjb2RlOyBhbHNvLCBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZVxuXG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgcm9vdHM7XG4gIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKG9wdGlvbnMucm9vdHMpKSB7XG4gICAgcm9vdHMgPSBvcHRpb25zLnJvb3RzO1xuICB9IGVsc2UgaWYgKGFycmF5KG9wdGlvbnMucm9vdHMpKSB7XG4gICAgdmFyIHJvb3RzQXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucm9vdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZCA9IG9wdGlvbnMucm9vdHNbaV07XG4gICAgICB2YXIgZWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgcm9vdHNBcnJheS5wdXNoKGVsZSk7XG4gICAgfVxuICAgIHJvb3RzID0gY3kuY29sbGVjdGlvbihyb290c0FycmF5KTtcbiAgfSBlbHNlIGlmIChzdHJpbmcob3B0aW9ucy5yb290cykpIHtcbiAgICByb290cyA9IGN5LiQob3B0aW9ucy5yb290cyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICByb290cyA9IG5vZGVzLnJvb3RzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb21wb25lbnRzID0gZWxlcy5jb21wb25lbnRzKCk7XG4gICAgICByb290cyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICAgIHZhciBjb21wID0gY29tcG9uZW50c1tfaV07XG4gICAgICAgIHZhciBtYXhEZWdyZWUgPSBjb21wLm1heERlZ3JlZShmYWxzZSk7XG4gICAgICAgIHZhciBjb21wUm9vdHMgPSBjb21wLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5kZWdyZWUoZmFsc2UpID09PSBtYXhEZWdyZWU7XG4gICAgICAgIH0pO1xuICAgICAgICByb290cyA9IHJvb3RzLmFkZChjb21wUm9vdHMpO1xuICAgICAgfTtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb21wb25lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBfbG9vcChfaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBkZXB0aHMgPSBbXTtcbiAgdmFyIGZvdW5kQnlCZnMgPSB7fTtcbiAgdmFyIGFkZFRvRGVwdGggPSBmdW5jdGlvbiBhZGRUb0RlcHRoKGVsZSwgZCkge1xuICAgIGlmIChkZXB0aHNbZF0gPT0gbnVsbCkge1xuICAgICAgZGVwdGhzW2RdID0gW107XG4gICAgfVxuICAgIHZhciBpID0gZGVwdGhzW2RdLmxlbmd0aDtcbiAgICBkZXB0aHNbZF0ucHVzaChlbGUpO1xuICAgIHNldEluZm8oZWxlLCB7XG4gICAgICBpbmRleDogaSxcbiAgICAgIGRlcHRoOiBkXG4gICAgfSk7XG4gIH07XG4gIHZhciBjaGFuZ2VEZXB0aCA9IGZ1bmN0aW9uIGNoYW5nZURlcHRoKGVsZSwgbmV3RGVwdGgpIHtcbiAgICB2YXIgX2dldEluZm8gPSBnZXRJbmZvKGVsZSksXG4gICAgICBkZXB0aCA9IF9nZXRJbmZvLmRlcHRoLFxuICAgICAgaW5kZXggPSBfZ2V0SW5mby5pbmRleDtcbiAgICBkZXB0aHNbZGVwdGhdW2luZGV4XSA9IG51bGw7XG4gICAgYWRkVG9EZXB0aChlbGUsIG5ld0RlcHRoKTtcbiAgfTtcblxuICAvLyBmaW5kIHRoZSBkZXB0aHMgb2YgdGhlIG5vZGVzXG4gIGdyYXBoLmJmcyh7XG4gICAgcm9vdHM6IHJvb3RzLFxuICAgIGRpcmVjdGVkOiBvcHRpb25zLmRpcmVjdGVkLFxuICAgIHZpc2l0OiBmdW5jdGlvbiB2aXNpdChub2RlLCBlZGdlLCBwTm9kZSwgaSwgZGVwdGgpIHtcbiAgICAgIHZhciBlbGUgPSBub2RlWzBdO1xuICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICBhZGRUb0RlcHRoKGVsZSwgZGVwdGgpO1xuICAgICAgZm91bmRCeUJmc1tpZF0gPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY2hlY2sgZm9yIG5vZGVzIG5vdCBmb3VuZCBieSBiZnNcbiAgdmFyIG9ycGhhbk5vZGVzID0gW107XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2VsZSA9IG5vZGVzW19pMl07XG4gICAgaWYgKGZvdW5kQnlCZnNbX2VsZS5pZCgpXSkge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ycGhhbk5vZGVzLnB1c2goX2VsZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXNzaWduIHRoZSBub2RlcyBhIGRlcHRoIGFuZCBpbmRleFxuXG4gIHZhciBhc3NpZ25EZXB0aHNBdCA9IGZ1bmN0aW9uIGFzc2lnbkRlcHRoc0F0KGkpIHtcbiAgICB2YXIgZWxlcyA9IGRlcHRoc1tpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBfZWxlMiA9IGVsZXNbal07XG4gICAgICBpZiAoX2VsZTIgPT0gbnVsbCkge1xuICAgICAgICBlbGVzLnNwbGljZShqLCAxKTtcbiAgICAgICAgai0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNldEluZm8oX2VsZTIsIHtcbiAgICAgICAgZGVwdGg6IGksXG4gICAgICAgIGluZGV4OiBqXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBhc3NpZ25EZXB0aHMgPSBmdW5jdGlvbiBhc3NpZ25EZXB0aHMoKSB7XG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgZGVwdGhzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIGFzc2lnbkRlcHRoc0F0KF9pMyk7XG4gICAgfVxuICB9O1xuICB2YXIgYWRqdXN0TWF4aW1hbGx5ID0gZnVuY3Rpb24gYWRqdXN0TWF4aW1hbGx5KGVsZSwgc2hpZnRlZCkge1xuICAgIHZhciBlSW5mbyA9IGdldEluZm8oZWxlKTtcbiAgICB2YXIgaW5jb21lcnMgPSBlbGUuaW5jb21lcnMoKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwuaXNOb2RlKCkgJiYgZWxlcy5oYXMoZWwpO1xuICAgIH0pO1xuICAgIHZhciBtYXhEZXB0aCA9IC0xO1xuICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaW5jb21lcnMubGVuZ3RoOyBrKyspIHtcbiAgICAgIHZhciBpbmNtciA9IGluY29tZXJzW2tdO1xuICAgICAgdmFyIGlJbmZvID0gZ2V0SW5mbyhpbmNtcik7XG4gICAgICBtYXhEZXB0aCA9IE1hdGgubWF4KG1heERlcHRoLCBpSW5mby5kZXB0aCk7XG4gICAgfVxuICAgIGlmIChlSW5mby5kZXB0aCA8PSBtYXhEZXB0aCkge1xuICAgICAgaWYgKCFvcHRpb25zLmFjeWNsaWMgJiYgc2hpZnRlZFtpZF0pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgbmV3RGVwdGggPSBtYXhEZXB0aCArIDE7XG4gICAgICBjaGFuZ2VEZXB0aChlbGUsIG5ld0RlcHRoKTtcbiAgICAgIHNoaWZ0ZWRbaWRdID0gbmV3RGVwdGg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIGZvciB0aGUgZGlyZWN0ZWQgY2FzZSwgdHJ5IHRvIG1ha2UgdGhlIGVkZ2VzIGFsbCBnbyBkb3duIChpLmUuIGRlcHRoIGkgPT4gZGVwdGggaSArIDEpXG4gIGlmIChkaXJlY3RlZCAmJiBtYXhpbWFsKSB7XG4gICAgdmFyIFEgPSBbXTtcbiAgICB2YXIgc2hpZnRlZCA9IHt9O1xuICAgIHZhciBlbnF1ZXVlID0gZnVuY3Rpb24gZW5xdWV1ZShuKSB7XG4gICAgICByZXR1cm4gUS5wdXNoKG4pO1xuICAgIH07XG4gICAgdmFyIGRlcXVldWUgPSBmdW5jdGlvbiBkZXF1ZXVlKCkge1xuICAgICAgcmV0dXJuIFEuc2hpZnQoKTtcbiAgICB9O1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBRLnB1c2gobik7XG4gICAgfSk7XG4gICAgd2hpbGUgKFEubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIF9lbGUzID0gZGVxdWV1ZSgpO1xuICAgICAgdmFyIGRpZFNoaWZ0ID0gYWRqdXN0TWF4aW1hbGx5KF9lbGUzLCBzaGlmdGVkKTtcbiAgICAgIGlmIChkaWRTaGlmdCkge1xuICAgICAgICBfZWxlMy5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICByZXR1cm4gZWwuaXNOb2RlKCkgJiYgZWxlcy5oYXMoZWwpO1xuICAgICAgICB9KS5mb3JFYWNoKGVucXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChkaWRTaGlmdCA9PT0gbnVsbCkge1xuICAgICAgICB3YXJuKCdEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgJyArIF9lbGUzLmlkKCkgKyAnYC4gIEJhaWxpbmcgbWF4aW1hbCBhZGp1c3RtZW50IGR1ZSB0byBjeWNsZS4gIFVzZSBgb3B0aW9ucy5tYXhpbWFsOiB0cnVlYCBvbmx5IG9uIERBR3MuJyk7XG4gICAgICAgIGJyZWFrOyAvLyBleGl0IG9uIGZhaWx1cmVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3NpZ25EZXB0aHMoKTsgLy8gY2xlYXIgaG9sZXNcblxuICAvLyBmaW5kIG1pbiBkaXN0YW5jZSB3ZSBuZWVkIHRvIGxlYXZlIGJldHdlZW4gbm9kZXNcbiAgdmFyIG1pbkRpc3RhbmNlID0gMDtcbiAgaWYgKG9wdGlvbnMuYXZvaWRPdmVybGFwKSB7XG4gICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbm9kZXMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgdmFyIG4gPSBub2Rlc1tfaTRdO1xuICAgICAgdmFyIG5iYiA9IG4ubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICAgIHZhciB3ID0gbmJiLnc7XG4gICAgICB2YXIgaCA9IG5iYi5oO1xuICAgICAgbWluRGlzdGFuY2UgPSBNYXRoLm1heChtaW5EaXN0YW5jZSwgdywgaCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZ2V0IHRoZSB3ZWlnaHRlZCBwZXJjZW50IGZvciBhbiBlbGVtZW50IGJhc2VkIG9uIGl0cyBjb25uZWN0aXZpdHkgdG8gb3RoZXIgbGV2ZWxzXG4gIHZhciBjYWNoZWRXZWlnaHRlZFBlcmNlbnQgPSB7fTtcbiAgdmFyIGdldFdlaWdodGVkUGVyY2VudCA9IGZ1bmN0aW9uIGdldFdlaWdodGVkUGVyY2VudChlbGUpIHtcbiAgICBpZiAoY2FjaGVkV2VpZ2h0ZWRQZXJjZW50W2VsZS5pZCgpXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV07XG4gICAgfVxuICAgIHZhciBlbGVEZXB0aCA9IGdldEluZm8oZWxlKS5kZXB0aDtcbiAgICB2YXIgbmVpZ2hib3JzID0gZWxlLm5laWdoYm9yaG9vZCgpO1xuICAgIHZhciBwZXJjZW50ID0gMDtcbiAgICB2YXIgc2FtcGxlcyA9IDA7XG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbmVpZ2hib3JzLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgIHZhciBuZWlnaGJvciA9IG5laWdoYm9yc1tfaTVdO1xuICAgICAgaWYgKG5laWdoYm9yLmlzRWRnZSgpIHx8IG5laWdoYm9yLmlzUGFyZW50KCkgfHwgIW5vZGVzLmhhcyhuZWlnaGJvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgYmYgPSBnZXRJbmZvKG5laWdoYm9yKTtcbiAgICAgIGlmIChiZiA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gYmYuaW5kZXg7XG4gICAgICB2YXIgZGVwdGggPSBiZi5kZXB0aDtcblxuICAgICAgLy8gdW5hc3NpZ25lZCBuZWlnaGJvdXJzIHNob3VsZG4ndCBhZmZlY3QgdGhlIG9yZGVyaW5nXG4gICAgICBpZiAoaW5kZXggPT0gbnVsbCB8fCBkZXB0aCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIG5EZXB0aCA9IGRlcHRoc1tkZXB0aF0ubGVuZ3RoO1xuICAgICAgaWYgKGRlcHRoIDwgZWxlRGVwdGgpIHtcbiAgICAgICAgLy8gb25seSBnZXQgaW5mbHVlbmNlZCBieSBlbGVtZW50cyBhYm92ZVxuICAgICAgICBwZXJjZW50ICs9IGluZGV4IC8gbkRlcHRoO1xuICAgICAgICBzYW1wbGVzKys7XG4gICAgICB9XG4gICAgfVxuICAgIHNhbXBsZXMgPSBNYXRoLm1heCgxLCBzYW1wbGVzKTtcbiAgICBwZXJjZW50ID0gcGVyY2VudCAvIHNhbXBsZXM7XG4gICAgaWYgKHNhbXBsZXMgPT09IDApIHtcbiAgICAgIC8vIHB1dCBsb25lIG5vZGVzIGF0IHRoZSBzdGFydFxuICAgICAgcGVyY2VudCA9IDA7XG4gICAgfVxuICAgIGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV0gPSBwZXJjZW50O1xuICAgIHJldHVybiBwZXJjZW50O1xuICB9O1xuXG4gIC8vIHJlYXJyYW5nZSB0aGUgaW5kaWNlcyBpbiBlYWNoIGRlcHRoIGxldmVsIGJhc2VkIG9uIGNvbm5lY3Rpdml0eVxuXG4gIHZhciBzb3J0Rm4gPSBmdW5jdGlvbiBzb3J0Rm4oYSwgYikge1xuICAgIHZhciBhcGN0ID0gZ2V0V2VpZ2h0ZWRQZXJjZW50KGEpO1xuICAgIHZhciBicGN0ID0gZ2V0V2VpZ2h0ZWRQZXJjZW50KGIpO1xuICAgIHZhciBkaWZmID0gYXBjdCAtIGJwY3Q7XG4gICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgIHJldHVybiBhc2NlbmRpbmcoYS5pZCgpLCBiLmlkKCkpOyAvLyBtYWtlIHN1cmUgc29ydCBkb2Vzbid0IGhhdmUgZG9uJ3QtY2FyZSBjb21wYXJpc29uc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH07XG4gIGlmIChvcHRpb25zLmRlcHRoU29ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc29ydEZuID0gb3B0aW9ucy5kZXB0aFNvcnQ7XG4gIH1cblxuICAvLyBzb3J0IGVhY2ggbGV2ZWwgdG8gbWFrZSBjb25uZWN0ZWQgbm9kZXMgY2xvc2VyXG4gIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IGRlcHRocy5sZW5ndGg7IF9pNisrKSB7XG4gICAgZGVwdGhzW19pNl0uc29ydChzb3J0Rm4pO1xuICAgIGFzc2lnbkRlcHRoc0F0KF9pNik7XG4gIH1cblxuICAvLyBhc3NpZ24gb3JwaGFuIG5vZGVzIHRvIGEgbmV3IHRvcC1sZXZlbCBkZXB0aFxuICB2YXIgb3JwaGFuRGVwdGggPSBbXTtcbiAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgb3JwaGFuTm9kZXMubGVuZ3RoOyBfaTcrKykge1xuICAgIG9ycGhhbkRlcHRoLnB1c2gob3JwaGFuTm9kZXNbX2k3XSk7XG4gIH1cbiAgZGVwdGhzLnVuc2hpZnQob3JwaGFuRGVwdGgpO1xuICBhc3NpZ25EZXB0aHMoKTtcbiAgdmFyIGJpZ2dlc3REZXB0aFNpemUgPSAwO1xuICBmb3IgKHZhciBfaTggPSAwOyBfaTggPCBkZXB0aHMubGVuZ3RoOyBfaTgrKykge1xuICAgIGJpZ2dlc3REZXB0aFNpemUgPSBNYXRoLm1heChkZXB0aHNbX2k4XS5sZW5ndGgsIGJpZ2dlc3REZXB0aFNpemUpO1xuICB9XG4gIHZhciBjZW50ZXIgPSB7XG4gICAgeDogYmIueDEgKyBiYi53IC8gMixcbiAgICB5OiBiYi54MSArIGJiLmggLyAyXG4gIH07XG4gIHZhciBtYXhEZXB0aFNpemUgPSBkZXB0aHMucmVkdWNlKGZ1bmN0aW9uIChtYXgsIGVsZXMpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBlbGVzLmxlbmd0aCk7XG4gIH0sIDApO1xuICB2YXIgZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQb3NpdGlvbihlbGUpIHtcbiAgICB2YXIgX2dldEluZm8yID0gZ2V0SW5mbyhlbGUpLFxuICAgICAgZGVwdGggPSBfZ2V0SW5mbzIuZGVwdGgsXG4gICAgICBpbmRleCA9IF9nZXRJbmZvMi5pbmRleDtcbiAgICB2YXIgZGVwdGhTaXplID0gZGVwdGhzW2RlcHRoXS5sZW5ndGg7XG4gICAgdmFyIGRpc3RhbmNlWCA9IE1hdGgubWF4KGJiLncgLyAoKG9wdGlvbnMuZ3JpZCA/IG1heERlcHRoU2l6ZSA6IGRlcHRoU2l6ZSkgKyAxKSwgbWluRGlzdGFuY2UpO1xuICAgIHZhciBkaXN0YW5jZVkgPSBNYXRoLm1heChiYi5oIC8gKGRlcHRocy5sZW5ndGggKyAxKSwgbWluRGlzdGFuY2UpO1xuICAgIHZhciByYWRpdXNTdGVwU2l6ZSA9IE1hdGgubWluKGJiLncgLyAyIC8gZGVwdGhzLmxlbmd0aCwgYmIuaCAvIDIgLyBkZXB0aHMubGVuZ3RoKTtcbiAgICByYWRpdXNTdGVwU2l6ZSA9IE1hdGgubWF4KHJhZGl1c1N0ZXBTaXplLCBtaW5EaXN0YW5jZSk7XG4gICAgaWYgKCFvcHRpb25zLmNpcmNsZSkge1xuICAgICAgdmFyIGVwb3MgPSB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgKGluZGV4ICsgMSAtIChkZXB0aFNpemUgKyAxKSAvIDIpICogZGlzdGFuY2VYLFxuICAgICAgICB5OiAoZGVwdGggKyAxKSAqIGRpc3RhbmNlWVxuICAgICAgfTtcbiAgICAgIHJldHVybiBlcG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmFkaXVzID0gcmFkaXVzU3RlcFNpemUgKiBkZXB0aCArIHJhZGl1c1N0ZXBTaXplIC0gKGRlcHRocy5sZW5ndGggPiAwICYmIGRlcHRoc1swXS5sZW5ndGggPD0gMyA/IHJhZGl1c1N0ZXBTaXplIC8gMiA6IDApO1xuICAgICAgdmFyIHRoZXRhID0gMiAqIE1hdGguUEkgLyBkZXB0aHNbZGVwdGhdLmxlbmd0aCAqIGluZGV4O1xuICAgICAgaWYgKGRlcHRoID09PSAwICYmIGRlcHRoc1swXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmFkaXVzID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgcmFkaXVzICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiBjZW50ZXIueSArIHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZ2V0UG9zaXRpb24pO1xuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbnZhciBkZWZhdWx0cyQ2ID0ge1xuICBmaXQ6IHRydWUsXG4gIC8vIHdoZXRoZXIgdG8gZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgZ3JhcGhcbiAgcGFkZGluZzogMzAsXG4gIC8vIHRoZSBwYWRkaW5nIG9uIGZpdFxuICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYXZvaWRPdmVybGFwOiB0cnVlLFxuICAvLyBwcmV2ZW50cyBub2RlIG92ZXJsYXAsIG1heSBvdmVyZmxvdyBib3VuZGluZ0JveCBhbmQgcmFkaXVzIGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICByYWRpdXM6IHVuZGVmaW5lZCxcbiAgLy8gdGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gIHN0YXJ0QW5nbGU6IDMgLyAyICogTWF0aC5QSSxcbiAgLy8gd2hlcmUgbm9kZXMgc3RhcnQgaW4gcmFkaWFuc1xuICBzd2VlcDogdW5kZWZpbmVkLFxuICAvLyBob3cgbWFueSByYWRpYW5zIHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIChkZWZhdWx0cyB0byBmdWxsIGNpcmNsZSlcbiAgY2xvY2t3aXNlOiB0cnVlLFxuICAvLyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGdvIGNsb2Nrd2lzZSAodHJ1ZSkgb3IgY291bnRlcmNsb2Nrd2lzZS9hbnRpY2xvY2t3aXNlIChmYWxzZSlcbiAgc29ydDogdW5kZWZpbmVkLFxuICAvLyBhIHNvcnRpbmcgZnVuY3Rpb24gdG8gb3JkZXIgdGhlIG5vZGVzOyBlLmcuIGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYS5kYXRhKCd3ZWlnaHQnKSAtIGIuZGF0YSgnd2VpZ2h0JykgfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG59O1xuXG5mdW5jdGlvbiBDaXJjbGVMYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDYsIG9wdGlvbnMpO1xufVxuQ2lyY2xlTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwYXJhbXMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBvcHRpb25zID0gcGFyYW1zO1xuICB2YXIgY3kgPSBwYXJhbXMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgY2xvY2t3aXNlID0gb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlICE9PSB1bmRlZmluZWQgPyAhb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlIDogb3B0aW9ucy5jbG9ja3dpc2U7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcbiAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICB9XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgY2VudGVyID0ge1xuICAgIHg6IGJiLngxICsgYmIudyAvIDIsXG4gICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICB9O1xuICB2YXIgc3dlZXAgPSBvcHRpb25zLnN3ZWVwID09PSB1bmRlZmluZWQgPyAyICogTWF0aC5QSSAtIDIgKiBNYXRoLlBJIC8gbm9kZXMubGVuZ3RoIDogb3B0aW9ucy5zd2VlcDtcbiAgdmFyIGRUaGV0YSA9IHN3ZWVwIC8gTWF0aC5tYXgoMSwgbm9kZXMubGVuZ3RoIC0gMSk7XG4gIHZhciByO1xuICB2YXIgbWluRGlzdGFuY2UgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG4gPSBub2Rlc1tpXTtcbiAgICB2YXIgbmJiID0gbi5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuICAgIHZhciB3ID0gbmJiLnc7XG4gICAgdmFyIGggPSBuYmIuaDtcbiAgICBtaW5EaXN0YW5jZSA9IE1hdGgubWF4KG1pbkRpc3RhbmNlLCB3LCBoKTtcbiAgfVxuICBpZiAobnVtYmVyJDEob3B0aW9ucy5yYWRpdXMpKSB7XG4gICAgciA9IG9wdGlvbnMucmFkaXVzO1xuICB9IGVsc2UgaWYgKG5vZGVzLmxlbmd0aCA8PSAxKSB7XG4gICAgciA9IDA7XG4gIH0gZWxzZSB7XG4gICAgciA9IE1hdGgubWluKGJiLmgsIGJiLncpIC8gMiAtIG1pbkRpc3RhbmNlO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSByYWRpdXNcbiAgaWYgKG5vZGVzLmxlbmd0aCA+IDEgJiYgb3B0aW9ucy5hdm9pZE92ZXJsYXApIHtcbiAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgbWluRGlzdGFuY2UgKj0gMS43NTsgLy8ganVzdCB0byBoYXZlIHNvbWUgbmljZSBzcGFjaW5nXG5cbiAgICB2YXIgZGNvcyA9IE1hdGguY29zKGRUaGV0YSkgLSBNYXRoLmNvcygwKTtcbiAgICB2YXIgZHNpbiA9IE1hdGguc2luKGRUaGV0YSkgLSBNYXRoLnNpbigwKTtcbiAgICB2YXIgck1pbiA9IE1hdGguc3FydChtaW5EaXN0YW5jZSAqIG1pbkRpc3RhbmNlIC8gKGRjb3MgKiBkY29zICsgZHNpbiAqIGRzaW4pKTsgLy8gcy50LiBubyBub2RlcyBvdmVybGFwcGluZ1xuICAgIHIgPSBNYXRoLm1heChyTWluLCByKTtcbiAgfVxuICB2YXIgZ2V0UG9zID0gZnVuY3Rpb24gZ2V0UG9zKGVsZSwgaSkge1xuICAgIHZhciB0aGV0YSA9IG9wdGlvbnMuc3RhcnRBbmdsZSArIGkgKiBkVGhldGEgKiAoY2xvY2t3aXNlID8gMSA6IC0xKTtcbiAgICB2YXIgcnggPSByICogTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciByeSA9IHIgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIHBvcyA9IHtcbiAgICAgIHg6IGNlbnRlci54ICsgcngsXG4gICAgICB5OiBjZW50ZXIueSArIHJ5XG4gICAgfTtcbiAgICByZXR1cm4gcG9zO1xuICB9O1xuICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGRlZmF1bHRzJDUgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBncmFwaFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gdGhlIHBhZGRpbmcgb24gZml0XG4gIHN0YXJ0QW5nbGU6IDMgLyAyICogTWF0aC5QSSxcbiAgLy8gd2hlcmUgbm9kZXMgc3RhcnQgaW4gcmFkaWFuc1xuICBzd2VlcDogdW5kZWZpbmVkLFxuICAvLyBob3cgbWFueSByYWRpYW5zIHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIChkZWZhdWx0cyB0byBmdWxsIGNpcmNsZSlcbiAgY2xvY2t3aXNlOiB0cnVlLFxuICAvLyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGdvIGNsb2Nrd2lzZSAodHJ1ZSkgb3IgY291bnRlcmNsb2Nrd2lzZS9hbnRpY2xvY2t3aXNlIChmYWxzZSlcbiAgZXF1aWRpc3RhbnQ6IGZhbHNlLFxuICAvLyB3aGV0aGVyIGxldmVscyBoYXZlIGFuIGVxdWFsIHJhZGlhbCBkaXN0YW5jZSBiZXR3ZW4gdGhlbSwgbWF5IGNhdXNlIGJvdW5kaW5nIGJveCBvdmVyZmxvd1xuICBtaW5Ob2RlU3BhY2luZzogMTAsXG4gIC8vIG1pbiBzcGFjaW5nIGJldHdlZW4gb3V0c2lkZSBvZiBub2RlcyAodXNlZCBmb3IgcmFkaXVzIGFkanVzdG1lbnQpXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gIC8vIHByZXZlbnRzIG5vZGUgb3ZlcmxhcCwgbWF5IG92ZXJmbG93IGJvdW5kaW5nQm94IGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gIC8vIGhlaWdodCBvZiBsYXlvdXQgYXJlYSAob3ZlcnJpZGVzIGNvbnRhaW5lciBoZWlnaHQpXG4gIHdpZHRoOiB1bmRlZmluZWQsXG4gIC8vIHdpZHRoIG9mIGxheW91dCBhcmVhIChvdmVycmlkZXMgY29udGFpbmVyIHdpZHRoKVxuICBzcGFjaW5nRmFjdG9yOiB1bmRlZmluZWQsXG4gIC8vIEFwcGxpZXMgYSBtdWx0aXBsaWNhdGl2ZSBmYWN0b3IgKD4wKSB0byBleHBhbmQgb3IgY29tcHJlc3MgdGhlIG92ZXJhbGwgYXJlYSB0aGF0IHRoZSBub2RlcyB0YWtlIHVwXG4gIGNvbmNlbnRyaWM6IGZ1bmN0aW9uIGNvbmNlbnRyaWMobm9kZSkge1xuICAgIC8vIHJldHVybnMgbnVtZXJpYyB2YWx1ZSBmb3IgZWFjaCBub2RlLCBwbGFjaW5nIGhpZ2hlciBub2RlcyBpbiBsZXZlbHMgdG93YXJkcyB0aGUgY2VudHJlXG4gICAgcmV0dXJuIG5vZGUuZGVncmVlKCk7XG4gIH0sXG4gIGxldmVsV2lkdGg6IGZ1bmN0aW9uIGxldmVsV2lkdGgobm9kZXMpIHtcbiAgICAvLyB0aGUgdmFyaWF0aW9uIG9mIGNvbmNlbnRyaWMgdmFsdWVzIGluIGVhY2ggbGV2ZWxcbiAgICByZXR1cm4gbm9kZXMubWF4RGVncmVlKCkgLyA0O1xuICB9LFxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG5cbmZ1bmN0aW9uIENvbmNlbnRyaWNMYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDUsIG9wdGlvbnMpO1xufVxuQ29uY2VudHJpY0xheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgb3B0aW9ucyA9IHBhcmFtcztcbiAgdmFyIGNsb2Nrd2lzZSA9IG9wdGlvbnMuY291bnRlcmNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkID8gIW9wdGlvbnMuY291bnRlcmNsb2Nrd2lzZSA6IG9wdGlvbnMuY2xvY2t3aXNlO1xuICB2YXIgY3kgPSBwYXJhbXMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCkubm90KCc6cGFyZW50Jyk7XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgY2VudGVyID0ge1xuICAgIHg6IGJiLngxICsgYmIudyAvIDIsXG4gICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICB9O1xuICB2YXIgbm9kZVZhbHVlcyA9IFtdOyAvLyB7IG5vZGUsIHZhbHVlIH1cbiAgdmFyIG1heE5vZGVTaXplID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgdmFyIHZhbHVlID0gdm9pZCAwO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBub2RlIHZhbHVlXG4gICAgdmFsdWUgPSBvcHRpb25zLmNvbmNlbnRyaWMobm9kZSk7XG4gICAgbm9kZVZhbHVlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG5vZGU6IG5vZGVcbiAgICB9KTtcblxuICAgIC8vIGZvciBzdHlsZSBtYXBwaW5nXG4gICAgbm9kZS5fcHJpdmF0ZS5zY3JhdGNoLmNvbmNlbnRyaWMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIGluIGNhc2Ugd2UgdXNlZCB0aGUgYGNvbmNlbnRyaWNgIGluIHN0eWxlXG4gIG5vZGVzLnVwZGF0ZVN0eWxlKCk7XG5cbiAgLy8gY2FsY3VsYXRlIG1heCBzaXplIG5vdyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1cGRhdGVkIG1hcHBlcnNcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG5vZGVzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBfbm9kZSA9IG5vZGVzW19pXTtcbiAgICB2YXIgbmJiID0gX25vZGUubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICBtYXhOb2RlU2l6ZSA9IE1hdGgubWF4KG1heE5vZGVTaXplLCBuYmIudywgbmJiLmgpO1xuICB9XG5cbiAgLy8gc29ydCBub2RlIHZhbHVlcyBpbiBkZXNjcmVhc2luZyBvcmRlclxuICBub2RlVmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYi52YWx1ZSAtIGEudmFsdWU7XG4gIH0pO1xuICB2YXIgbGV2ZWxXaWR0aCA9IG9wdGlvbnMubGV2ZWxXaWR0aChub2Rlcyk7XG5cbiAgLy8gcHV0IHRoZSB2YWx1ZXMgaW50byBsZXZlbHNcbiAgdmFyIGxldmVscyA9IFtbXV07XG4gIHZhciBjdXJyZW50TGV2ZWwgPSBsZXZlbHNbMF07XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVWYWx1ZXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciB2YWwgPSBub2RlVmFsdWVzW19pMl07XG4gICAgaWYgKGN1cnJlbnRMZXZlbC5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRMZXZlbFswXS52YWx1ZSAtIHZhbC52YWx1ZSk7XG4gICAgICBpZiAoZGlmZiA+PSBsZXZlbFdpZHRoKSB7XG4gICAgICAgIGN1cnJlbnRMZXZlbCA9IFtdO1xuICAgICAgICBsZXZlbHMucHVzaChjdXJyZW50TGV2ZWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50TGV2ZWwucHVzaCh2YWwpO1xuICB9XG5cbiAgLy8gY3JlYXRlIHBvc2l0aW9ucyBmcm9tIGxldmVsc1xuXG4gIHZhciBtaW5EaXN0ID0gbWF4Tm9kZVNpemUgKyBvcHRpb25zLm1pbk5vZGVTcGFjaW5nOyAvLyBtaW4gZGlzdCBiZXR3ZWVuIG5vZGVzXG5cbiAgaWYgKCFvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgIC8vIHRoZW4gc3RyaWN0bHkgY29uc3RyYWluIHRvIGJiXG4gICAgdmFyIGZpcnN0THZsSGFzTXVsdGkgPSBsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbHNbMF0ubGVuZ3RoID4gMTtcbiAgICB2YXIgbWF4UiA9IE1hdGgubWluKGJiLncsIGJiLmgpIC8gMiAtIG1pbkRpc3Q7XG4gICAgdmFyIHJTdGVwID0gbWF4UiAvIChsZXZlbHMubGVuZ3RoICsgZmlyc3RMdmxIYXNNdWx0aSA/IDEgOiAwKTtcbiAgICBtaW5EaXN0ID0gTWF0aC5taW4obWluRGlzdCwgclN0ZXApO1xuICB9XG5cbiAgLy8gZmluZCB0aGUgbWV0cmljcyBmb3IgZWFjaCBsZXZlbFxuICB2YXIgciA9IDA7XG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGxldmVscy5sZW5ndGg7IF9pMysrKSB7XG4gICAgdmFyIGxldmVsID0gbGV2ZWxzW19pM107XG4gICAgdmFyIHN3ZWVwID0gb3B0aW9ucy5zd2VlcCA9PT0gdW5kZWZpbmVkID8gMiAqIE1hdGguUEkgLSAyICogTWF0aC5QSSAvIGxldmVsLmxlbmd0aCA6IG9wdGlvbnMuc3dlZXA7XG4gICAgdmFyIGRUaGV0YSA9IGxldmVsLmRUaGV0YSA9IHN3ZWVwIC8gTWF0aC5tYXgoMSwgbGV2ZWwubGVuZ3RoIC0gMSk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIHJhZGl1c1xuICAgIGlmIChsZXZlbC5sZW5ndGggPiAxICYmIG9wdGlvbnMuYXZvaWRPdmVybGFwKSB7XG4gICAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgICB2YXIgZGNvcyA9IE1hdGguY29zKGRUaGV0YSkgLSBNYXRoLmNvcygwKTtcbiAgICAgIHZhciBkc2luID0gTWF0aC5zaW4oZFRoZXRhKSAtIE1hdGguc2luKDApO1xuICAgICAgdmFyIHJNaW4gPSBNYXRoLnNxcnQobWluRGlzdCAqIG1pbkRpc3QgLyAoZGNvcyAqIGRjb3MgKyBkc2luICogZHNpbikpOyAvLyBzLnQuIG5vIG5vZGVzIG92ZXJsYXBwaW5nXG5cbiAgICAgIHIgPSBNYXRoLm1heChyTWluLCByKTtcbiAgICB9XG4gICAgbGV2ZWwuciA9IHI7XG4gICAgciArPSBtaW5EaXN0O1xuICB9XG4gIGlmIChvcHRpb25zLmVxdWlkaXN0YW50KSB7XG4gICAgdmFyIHJEZWx0YU1heCA9IDA7XG4gICAgdmFyIF9yID0gMDtcbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBsZXZlbHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgdmFyIF9sZXZlbCA9IGxldmVsc1tfaTRdO1xuICAgICAgdmFyIHJEZWx0YSA9IF9sZXZlbC5yIC0gX3I7XG4gICAgICByRGVsdGFNYXggPSBNYXRoLm1heChyRGVsdGFNYXgsIHJEZWx0YSk7XG4gICAgfVxuICAgIF9yID0gMDtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBsZXZlbHMubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdmFyIF9sZXZlbDIgPSBsZXZlbHNbX2k1XTtcbiAgICAgIGlmIChfaTUgPT09IDApIHtcbiAgICAgICAgX3IgPSBfbGV2ZWwyLnI7XG4gICAgICB9XG4gICAgICBfbGV2ZWwyLnIgPSBfcjtcbiAgICAgIF9yICs9IHJEZWx0YU1heDtcbiAgICB9XG4gIH1cblxuICAvLyBjYWxjdWxhdGUgdGhlIG5vZGUgcG9zaXRpb25zXG4gIHZhciBwb3MgPSB7fTsgLy8gaWQgPT4gcG9zaXRpb25cbiAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbGV2ZWxzLmxlbmd0aDsgX2k2KyspIHtcbiAgICB2YXIgX2xldmVsMyA9IGxldmVsc1tfaTZdO1xuICAgIHZhciBfZFRoZXRhID0gX2xldmVsMy5kVGhldGE7XG4gICAgdmFyIF9yMiA9IF9sZXZlbDMucjtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9sZXZlbDMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBfdmFsID0gX2xldmVsM1tqXTtcbiAgICAgIHZhciB0aGV0YSA9IG9wdGlvbnMuc3RhcnRBbmdsZSArIChjbG9ja3dpc2UgPyAxIDogLTEpICogX2RUaGV0YSAqIGo7XG4gICAgICB2YXIgcCA9IHtcbiAgICAgICAgeDogY2VudGVyLnggKyBfcjIgKiBNYXRoLmNvcyh0aGV0YSksXG4gICAgICAgIHk6IGNlbnRlci55ICsgX3IyICogTWF0aC5zaW4odGhldGEpXG4gICAgICB9O1xuICAgICAgcG9zW192YWwubm9kZS5pZCgpXSA9IHA7XG4gICAgfVxuICB9XG5cbiAgLy8gcG9zaXRpb24gdGhlIG5vZGVzXG4gIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgIHJldHVybiBwb3NbaWRdO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vKlxuVGhlIENvU0UgbGF5b3V0IHdhcyB3cml0dGVuIGJ5IEdlcmFyZG8gSHVjay5cbmh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9nZXJhcmRvaHVjay9cblxuQmFzZWQgb24gdGhlIGZvbGxvd2luZyBhcnRpY2xlOlxuaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTE0OTgwNDdcblxuTW9kaWZpY2F0aW9ucyB0cmFja2VkIG9uIEdpdGh1Yi5cbiovXG52YXIgREVCVUc7XG5cbi8qKlxuICogQGJyaWVmIDogIGRlZmF1bHQgbGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIGRlZmF1bHRzJDQgPSB7XG4gIC8vIENhbGxlZCBvbiBgbGF5b3V0cmVhZHlgXG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAvLyBDYWxsZWQgb24gYGxheW91dHN0b3BgXG4gIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7fSxcbiAgLy8gV2hldGhlciB0byBhbmltYXRlIHdoaWxlIHJ1bm5pbmcgdGhlIGxheW91dFxuICAvLyB0cnVlIDogQW5pbWF0ZSBjb250aW51b3VzbHkgYXMgdGhlIGxheW91dCBpcyBydW5uaW5nXG4gIC8vIGZhbHNlIDogSnVzdCBzaG93IHRoZSBlbmQgcmVzdWx0XG4gIC8vICdlbmQnIDogQW5pbWF0ZSB3aXRoIHRoZSBlbmQgcmVzdWx0LCBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9ucyB0byB0aGUgZW5kIHBvc2l0aW9uc1xuICBhbmltYXRlOiB0cnVlLFxuICAvLyBFYXNpbmcgb2YgdGhlIGFuaW1hdGlvbiBmb3IgYW5pbWF0ZTonZW5kJ1xuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIGFuaW1hdGU6J2VuZCdcbiAgYW5pbWF0aW9uRHVyYXRpb246IHVuZGVmaW5lZCxcbiAgLy8gQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWRcbiAgLy8gQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkXG4gIC8vIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBUaGUgbGF5b3V0IGFuaW1hdGVzIG9ubHkgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcyBmb3IgYW5pbWF0ZTp0cnVlXG4gIC8vIChwcmV2ZW50cyBmbGFzaGluZyBvbiBmYXN0IHJ1bnMpXG4gIGFuaW1hdGlvblRocmVzaG9sZDogMjUwLFxuICAvLyBOdW1iZXIgb2YgaXRlcmF0aW9ucyBiZXR3ZWVuIGNvbnNlY3V0aXZlIHNjcmVlbiBwb3NpdGlvbnMgdXBkYXRlXG4gIHJlZnJlc2g6IDIwLFxuICAvLyBXaGV0aGVyIHRvIGZpdCB0aGUgbmV0d29yayB2aWV3IGFmdGVyIHdoZW4gZG9uZVxuICBmaXQ6IHRydWUsXG4gIC8vIFBhZGRpbmcgb24gZml0XG4gIHBhZGRpbmc6IDMwLFxuICAvLyBDb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gUmFuZG9taXplIHRoZSBpbml0aWFsIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgKHRydWUpIG9yIHVzZSBleGlzdGluZyBwb3NpdGlvbnMgKGZhbHNlKVxuICByYW5kb21pemU6IGZhbHNlLFxuICAvLyBFeHRyYSBzcGFjaW5nIGJldHdlZW4gY29tcG9uZW50cyBpbiBub24tY29tcG91bmQgZ3JhcGhzXG4gIGNvbXBvbmVudFNwYWNpbmc6IDQwLFxuICAvLyBOb2RlIHJlcHVsc2lvbiAobm9uIG92ZXJsYXBwaW5nKSBtdWx0aXBsaWVyXG4gIG5vZGVSZXB1bHNpb246IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZSkge1xuICAgIHJldHVybiAyMDQ4O1xuICB9LFxuICAvLyBOb2RlIHJlcHVsc2lvbiAob3ZlcmxhcHBpbmcpIG11bHRpcGxpZXJcbiAgbm9kZU92ZXJsYXA6IDQsXG4gIC8vIElkZWFsIGVkZ2UgKG5vbiBuZXN0ZWQpIGxlbmd0aFxuICBpZGVhbEVkZ2VMZW5ndGg6IGZ1bmN0aW9uIGlkZWFsRWRnZUxlbmd0aChlZGdlKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9LFxuICAvLyBEaXZpc29yIHRvIGNvbXB1dGUgZWRnZSBmb3JjZXNcbiAgZWRnZUVsYXN0aWNpdHk6IGZ1bmN0aW9uIGVkZ2VFbGFzdGljaXR5KGVkZ2UpIHtcbiAgICByZXR1cm4gMzI7XG4gIH0sXG4gIC8vIE5lc3RpbmcgZmFjdG9yIChtdWx0aXBsaWVyKSB0byBjb21wdXRlIGlkZWFsIGVkZ2UgbGVuZ3RoIGZvciBuZXN0ZWQgZWRnZXNcbiAgbmVzdGluZ0ZhY3RvcjogMS4yLFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudClcbiAgZ3Jhdml0eTogMSxcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtXG4gIG51bUl0ZXI6IDEwMDAsXG4gIC8vIEluaXRpYWwgdGVtcGVyYXR1cmUgKG1heGltdW0gbm9kZSBkaXNwbGFjZW1lbnQpXG4gIGluaXRpYWxUZW1wOiAxMDAwLFxuICAvLyBDb29saW5nIGZhY3RvciAoaG93IHRoZSB0ZW1wZXJhdHVyZSBpcyByZWR1Y2VkIGJldHdlZW4gY29uc2VjdXRpdmUgaXRlcmF0aW9uc1xuICBjb29saW5nRmFjdG9yOiAwLjk5LFxuICAvLyBMb3dlciB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQgKGJlbG93IHRoaXMgcG9pbnQgdGhlIGxheW91dCB3aWxsIGVuZClcbiAgbWluVGVtcDogMS4wXG59O1xuXG4vKipcbiAqIEBicmllZiAgICAgICA6IGNvbnN0cnVjdG9yXG4gKiBAYXJnIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBDb3NlTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQ0LCBvcHRpb25zKTtcbiAgdGhpcy5vcHRpb25zLmxheW91dCA9IHRoaXM7XG5cbiAgLy8gRXhjbHVkZSBhbnkgZWRnZSB0aGF0IGhhcyBhIHNvdXJjZSBvciB0YXJnZXQgbm9kZSB0aGF0IGlzIG5vdCBpbiB0aGUgc2V0IG9mIHBhc3NlZC1pbiBub2Rlc1xuICB2YXIgbm9kZXMgPSB0aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpO1xuICB2YXIgZWRnZXMgPSB0aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO1xuICB2YXIgbm90RWRnZXMgPSBlZGdlcy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc291cmNlSWQgPSBlLnNvdXJjZSgpLmRhdGEoJ2lkJyk7XG4gICAgdmFyIHRhcmdldElkID0gZS50YXJnZXQoKS5kYXRhKCdpZCcpO1xuICAgIHZhciBoYXNTb3VyY2UgPSBub2Rlcy5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbi5kYXRhKCdpZCcpID09PSBzb3VyY2VJZDtcbiAgICB9KTtcbiAgICB2YXIgaGFzVGFyZ2V0ID0gbm9kZXMuc29tZShmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4uZGF0YSgnaWQnKSA9PT0gdGFyZ2V0SWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuICFoYXNTb3VyY2UgfHwgIWhhc1RhcmdldDtcbiAgfSk7XG4gIHRoaXMub3B0aW9ucy5lbGVzID0gdGhpcy5vcHRpb25zLmVsZXMubm90KG5vdEVkZ2VzKTtcbn1cblxuLyoqXG4gKiBAYnJpZWYgOiBydW5zIHRoZSBsYXlvdXRcbiAqL1xuQ29zZUxheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGxheW91dCA9IHRoaXM7XG4gIGxheW91dC5zdG9wcGVkID0gZmFsc2U7XG4gIGlmIChvcHRpb25zLmFuaW1hdGUgPT09IHRydWUgfHwgb3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSkge1xuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRzdGFydCcsXG4gICAgICBsYXlvdXQ6IGxheW91dFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU2V0IERFQlVHIC0gR2xvYmFsIHZhcmlhYmxlXG4gIGlmICh0cnVlID09PSBvcHRpb25zLmRlYnVnKSB7XG4gICAgREVCVUcgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIERFQlVHID0gZmFsc2U7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIGxheW91dCBpbmZvXG4gIHZhciBsYXlvdXRJbmZvID0gY3JlYXRlTGF5b3V0SW5mbyhjeSwgbGF5b3V0LCBvcHRpb25zKTtcblxuICAvLyBTaG93IExheW91dEluZm8gY29udGVudHMgaWYgZGVidWdnaW5nXG4gIGlmIChERUJVRykge1xuICAgIHByaW50TGF5b3V0SW5mbyhsYXlvdXRJbmZvKTtcbiAgfVxuXG4gIC8vIElmIHJlcXVpcmVkLCByYW5kb21pemUgbm9kZSBwb3NpdGlvbnNcbiAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgcmFuZG9taXplUG9zaXRpb25zKGxheW91dEluZm8pO1xuICB9XG4gIHZhciBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICB2YXIgcmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgcmVmcmVzaFBvc2l0aW9ucyhsYXlvdXRJbmZvLCBjeSwgb3B0aW9ucyk7XG5cbiAgICAvLyBGaXQgdGhlIGdyYXBoIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0cnVlID09PSBvcHRpb25zLmZpdCkge1xuICAgICAgY3kuZml0KG9wdGlvbnMucGFkZGluZyk7XG4gICAgfVxuICB9O1xuICB2YXIgbWFpbkxvb3AgPSBmdW5jdGlvbiBtYWluTG9vcChpKSB7XG4gICAgaWYgKGxheW91dC5zdG9wcGVkIHx8IGkgPj0gb3B0aW9ucy5udW1JdGVyKSB7XG4gICAgICAvLyBsb2dEZWJ1ZyhcIkxheW91dCBtYW51YWxseSBzdG9wcGVkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRG8gb25lIHN0ZXAgaW4gdGhlIHBoaXNpY2FsIHNpbXVsYXRpb25cbiAgICBzdGVwKGxheW91dEluZm8sIG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIHRlbXBlcmF0dXJlXG4gICAgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSA9IGxheW91dEluZm8udGVtcGVyYXR1cmUgKiBvcHRpb25zLmNvb2xpbmdGYWN0b3I7XG4gICAgLy8gbG9nRGVidWcoXCJOZXcgdGVtcGVyYXR1cmU6IFwiICsgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSk7XG5cbiAgICBpZiAobGF5b3V0SW5mby50ZW1wZXJhdHVyZSA8IG9wdGlvbnMubWluVGVtcCkge1xuICAgICAgLy8gbG9nRGVidWcoXCJUZW1wZXJhdHVyZSBkcm9wIGJlbG93IG1pbmltdW0gdGhyZXNob2xkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSB8fCBvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlKSB7XG4gICAgICByZWZyZXNoKCk7XG5cbiAgICAgIC8vIExheW91dCBoYXMgZmluaXNoZWRcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RvcCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGVzID0gb3B0aW9ucy5lbGVzLm5vZGVzKCk7XG4gICAgICB2YXIgZ2V0U2NhbGVkUG9zID0gZ2V0U2NhbGVJbkJvdW5kc0ZuKGxheW91dEluZm8sIG9wdGlvbnMsIG5vZGVzKTtcbiAgICAgIG5vZGVzLmxheW91dFBvc2l0aW9ucyhsYXlvdXQsIG9wdGlvbnMsIGdldFNjYWxlZFBvcyk7XG4gICAgfVxuICB9O1xuICB2YXIgaSA9IDA7XG4gIHZhciBsb29wUmV0ID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSkge1xuICAgIHZhciBmcmFtZSA9IGZ1bmN0aW9uIGZyYW1lKCkge1xuICAgICAgdmFyIGYgPSAwO1xuICAgICAgd2hpbGUgKGxvb3BSZXQgJiYgZiA8IG9wdGlvbnMucmVmcmVzaCkge1xuICAgICAgICBsb29wUmV0ID0gbWFpbkxvb3AoaSk7XG4gICAgICAgIGkrKztcbiAgICAgICAgZisrO1xuICAgICAgfVxuICAgICAgaWYgKCFsb29wUmV0KSB7XG4gICAgICAgIC8vIGl0J3MgZG9uZVxuICAgICAgICBzZXBhcmF0ZUNvbXBvbmVudHMobGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub3cgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBpZiAobm93IC0gc3RhcnRUaW1lID49IG9wdGlvbnMuYW5pbWF0aW9uVGhyZXNob2xkKSB7XG4gICAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmcmFtZSgpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChsb29wUmV0KSB7XG4gICAgICBsb29wUmV0ID0gbWFpbkxvb3AoaSk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHNlcGFyYXRlQ29tcG9uZW50cyhsYXlvdXRJbmZvLCBvcHRpb25zKTtcbiAgICBkb25lKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vKipcbiAqIEBicmllZiA6IGNhbGxlZCBvbiBjb250aW51b3VzIGxheW91dHMgdG8gc3RvcCB0aGVtIGJlZm9yZSB0aGV5IGZpbmlzaFxuICovXG5Db3NlTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICBpZiAodGhpcy50aHJlYWQpIHtcbiAgICB0aGlzLnRocmVhZC5zdG9wKCk7XG4gIH1cbiAgdGhpcy5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuQ29zZUxheW91dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMudGhyZWFkKSB7XG4gICAgdGhpcy50aHJlYWQuc3RvcCgpO1xuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLyoqXG4gKiBAYnJpZWYgICAgIDogQ3JlYXRlcyBhbiBvYmplY3Qgd2hpY2ggaXMgY29udGFpbnMgYWxsIHRoZSBkYXRhXG4gKiAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3NcbiAqIEBhcmcgY3kgICAgOiBjeXRvc2NhcGUuanMgb2JqZWN0XG4gKiBAcmV0dXJuICAgIDogbGF5b3V0SW5mbyBvYmplY3QgaW5pdGlhbGl6ZWRcbiAqL1xudmFyIGNyZWF0ZUxheW91dEluZm8gPSBmdW5jdGlvbiBjcmVhdGVMYXlvdXRJbmZvKGN5LCBsYXlvdXQsIG9wdGlvbnMpIHtcbiAgLy8gU2hvcnRjdXRcbiAgdmFyIGVkZ2VzID0gb3B0aW9ucy5lbGVzLmVkZ2VzKCk7XG4gIHZhciBub2RlcyA9IG9wdGlvbnMuZWxlcy5ub2RlcygpO1xuICB2YXIgYmIgPSBtYWtlQm91bmRpbmdCb3gob3B0aW9ucy5ib3VuZGluZ0JveCA/IG9wdGlvbnMuYm91bmRpbmdCb3ggOiB7XG4gICAgeDE6IDAsXG4gICAgeTE6IDAsXG4gICAgdzogY3kud2lkdGgoKSxcbiAgICBoOiBjeS5oZWlnaHQoKVxuICB9KTtcbiAgdmFyIGxheW91dEluZm8gPSB7XG4gICAgaXNDb21wb3VuZDogY3kuaGFzQ29tcG91bmROb2RlcygpLFxuICAgIGxheW91dE5vZGVzOiBbXSxcbiAgICBpZFRvSW5kZXg6IHt9LFxuICAgIG5vZGVTaXplOiBub2Rlcy5zaXplKCksXG4gICAgZ3JhcGhTZXQ6IFtdLFxuICAgIGluZGV4VG9HcmFwaDogW10sXG4gICAgbGF5b3V0RWRnZXM6IFtdLFxuICAgIGVkZ2VTaXplOiBlZGdlcy5zaXplKCksXG4gICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMuaW5pdGlhbFRlbXAsXG4gICAgY2xpZW50V2lkdGg6IGJiLncsXG4gICAgY2xpZW50SGVpZ2h0OiBiYi5oLFxuICAgIGJvdW5kaW5nQm94OiBiYlxuICB9O1xuICB2YXIgY29tcG9uZW50cyA9IG9wdGlvbnMuZWxlcy5jb21wb25lbnRzKCk7XG4gIHZhciBpZDJjbXB0SWQgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb21wb25lbnQubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBub2RlID0gY29tcG9uZW50W2pdO1xuICAgICAgaWQyY21wdElkW25vZGUuaWQoKV0gPSBpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBhbGwgbm9kZXMsIGNyZWF0aW5nIGxheW91dCBub2Rlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbm9kZXNbaV07XG4gICAgdmFyIG5iYiA9IG4ubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICB2YXIgdGVtcE5vZGUgPSB7fTtcbiAgICB0ZW1wTm9kZS5pc0xvY2tlZCA9IG4ubG9ja2VkKCk7XG4gICAgdGVtcE5vZGUuaWQgPSBuLmRhdGEoJ2lkJyk7XG4gICAgdGVtcE5vZGUucGFyZW50SWQgPSBuLmRhdGEoJ3BhcmVudCcpO1xuICAgIHRlbXBOb2RlLmNtcHRJZCA9IGlkMmNtcHRJZFtuLmlkKCldO1xuICAgIHRlbXBOb2RlLmNoaWxkcmVuID0gW107XG4gICAgdGVtcE5vZGUucG9zaXRpb25YID0gbi5wb3NpdGlvbigneCcpO1xuICAgIHRlbXBOb2RlLnBvc2l0aW9uWSA9IG4ucG9zaXRpb24oJ3knKTtcbiAgICB0ZW1wTm9kZS5vZmZzZXRYID0gMDtcbiAgICB0ZW1wTm9kZS5vZmZzZXRZID0gMDtcbiAgICB0ZW1wTm9kZS5oZWlnaHQgPSBuYmIudztcbiAgICB0ZW1wTm9kZS53aWR0aCA9IG5iYi5oO1xuICAgIHRlbXBOb2RlLm1heFggPSB0ZW1wTm9kZS5wb3NpdGlvblggKyB0ZW1wTm9kZS53aWR0aCAvIDI7XG4gICAgdGVtcE5vZGUubWluWCA9IHRlbXBOb2RlLnBvc2l0aW9uWCAtIHRlbXBOb2RlLndpZHRoIC8gMjtcbiAgICB0ZW1wTm9kZS5tYXhZID0gdGVtcE5vZGUucG9zaXRpb25ZICsgdGVtcE5vZGUuaGVpZ2h0IC8gMjtcbiAgICB0ZW1wTm9kZS5taW5ZID0gdGVtcE5vZGUucG9zaXRpb25ZIC0gdGVtcE5vZGUuaGVpZ2h0IC8gMjtcbiAgICB0ZW1wTm9kZS5wYWRMZWZ0ID0gcGFyc2VGbG9hdChuLnN0eWxlKCdwYWRkaW5nJykpO1xuICAgIHRlbXBOb2RlLnBhZFJpZ2h0ID0gcGFyc2VGbG9hdChuLnN0eWxlKCdwYWRkaW5nJykpO1xuICAgIHRlbXBOb2RlLnBhZFRvcCA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTtcbiAgICB0ZW1wTm9kZS5wYWRCb3R0b20gPSBwYXJzZUZsb2F0KG4uc3R5bGUoJ3BhZGRpbmcnKSk7XG5cbiAgICAvLyBmb3JjZXNcbiAgICB0ZW1wTm9kZS5ub2RlUmVwdWxzaW9uID0gZm4kNihvcHRpb25zLm5vZGVSZXB1bHNpb24pID8gb3B0aW9ucy5ub2RlUmVwdWxzaW9uKG4pIDogb3B0aW9ucy5ub2RlUmVwdWxzaW9uO1xuXG4gICAgLy8gQWRkIG5ldyBub2RlXG4gICAgbGF5b3V0SW5mby5sYXlvdXROb2Rlcy5wdXNoKHRlbXBOb2RlKTtcbiAgICAvLyBBZGQgZW50cnkgdG8gaWQtaW5kZXggbWFwXG4gICAgbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUuaWRdID0gaTtcbiAgfVxuXG4gIC8vIElubGluZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHF1ZXVlLCB1c2VkIGZvciB0cmF2ZXJzaW5nIHRoZSBncmFwaCBpbiBCRlMgb3JkZXJcbiAgdmFyIHF1ZXVlID0gW107XG4gIHZhciBzdGFydCA9IDA7IC8vIFBvaW50cyB0byB0aGUgc3RhcnQgdGhlIHF1ZXVlXG4gIHZhciBlbmQgPSAtMTsgLy8gUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG5cbiAgdmFyIHRlbXBHcmFwaCA9IFtdO1xuXG4gIC8vIFNlY29uZCBwYXNzIHRvIGFkZCBjaGlsZCBpbmZvcm1hdGlvbiBhbmRcbiAgLy8gaW5pdGlhbGl6ZSBxdWV1ZSBmb3IgaGllcmFyY2hpY2FsIHRyYXZlcnNhbFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcbiAgICB2YXIgcF9pZCA9IG4ucGFyZW50SWQ7XG4gICAgLy8gQ2hlY2sgaWYgbm9kZSBuIGhhcyBhIHBhcmVudCBub2RlXG4gICAgaWYgKG51bGwgIT0gcF9pZCkge1xuICAgICAgLy8gQWRkIG5vZGUgSWQgdG8gcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlblxuICAgICAgbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtwX2lkXV0uY2hpbGRyZW4ucHVzaChuLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgYSBub2RlIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgdGhlbiBpdCdzIGluIHRoZSByb290IGdyYXBoXG4gICAgICBxdWV1ZVsrK2VuZF0gPSBuLmlkO1xuICAgICAgdGVtcEdyYXBoLnB1c2gobi5pZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHJvb3QgZ3JhcGggdG8gZ3JhcGhTZXRcbiAgbGF5b3V0SW5mby5ncmFwaFNldC5wdXNoKHRlbXBHcmFwaCk7XG5cbiAgLy8gVHJhdmVyc2UgdGhlIGdyYXBoLCBsZXZlbCBieSBsZXZlbCxcbiAgd2hpbGUgKHN0YXJ0IDw9IGVuZCkge1xuICAgIC8vIEdldCB0aGUgbm9kZSB0byB2aXNpdCBhbmQgcmVtb3ZlIGl0IGZyb20gcXVldWVcbiAgICB2YXIgbm9kZV9pZCA9IHF1ZXVlW3N0YXJ0KytdO1xuICAgIHZhciBub2RlX2l4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbbm9kZV9pZF07XG4gICAgdmFyIG5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW25vZGVfaXhdO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFkZCBjaGlsZHJlbiBub2RlcyBhcyBhIG5ldyBncmFwaCB0byBncmFwaCBzZXRcbiAgICAgIGxheW91dEluZm8uZ3JhcGhTZXQucHVzaChjaGlsZHJlbik7XG4gICAgICAvLyBBZGQgY2hpbGRyZW4gdG8gcXVlIHF1ZXVlIHRvIGJlIHZpc2l0ZWRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVldWVbKytlbmRdID0gY2hpbGRyZW5baV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIGluZGV4VG9HcmFwaCBtYXBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmdyYXBoU2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyYXBoLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgaW5kZXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtqXV07XG4gICAgICBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtpbmRleF0gPSBpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBhbGwgZWRnZXMsIGNyZWF0aW5nIExheW91dCBFZGdlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8uZWRnZVNpemU7IGkrKykge1xuICAgIHZhciBlID0gZWRnZXNbaV07XG4gICAgdmFyIHRlbXBFZGdlID0ge307XG4gICAgdGVtcEVkZ2UuaWQgPSBlLmRhdGEoJ2lkJyk7XG4gICAgdGVtcEVkZ2Uuc291cmNlSWQgPSBlLmRhdGEoJ3NvdXJjZScpO1xuICAgIHRlbXBFZGdlLnRhcmdldElkID0gZS5kYXRhKCd0YXJnZXQnKTtcblxuICAgIC8vIENvbXB1dGUgaWRlYWwgbGVuZ3RoXG4gICAgdmFyIGlkZWFsTGVuZ3RoID0gZm4kNihvcHRpb25zLmlkZWFsRWRnZUxlbmd0aCkgPyBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aChlKSA6IG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoO1xuICAgIHZhciBlbGFzdGljaXR5ID0gZm4kNihvcHRpb25zLmVkZ2VFbGFzdGljaXR5KSA/IG9wdGlvbnMuZWRnZUVsYXN0aWNpdHkoZSkgOiBvcHRpb25zLmVkZ2VFbGFzdGljaXR5O1xuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhbiBpbnRlciBncmFwaCBlZGdlXG4gICAgdmFyIHNvdXJjZUl4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcEVkZ2Uuc291cmNlSWRdO1xuICAgIHZhciB0YXJnZXRJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W3RlbXBFZGdlLnRhcmdldElkXTtcbiAgICB2YXIgc291cmNlR3JhcGggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtzb3VyY2VJeF07XG4gICAgdmFyIHRhcmdldEdyYXBoID0gbGF5b3V0SW5mby5pbmRleFRvR3JhcGhbdGFyZ2V0SXhdO1xuICAgIGlmIChzb3VyY2VHcmFwaCAhPSB0YXJnZXRHcmFwaCkge1xuICAgICAgLy8gRmluZCBsb3dlc3QgY29tbW9uIGdyYXBoIGFuY2VzdG9yXG4gICAgICB2YXIgbGNhID0gZmluZExDQSh0ZW1wRWRnZS5zb3VyY2VJZCwgdGVtcEVkZ2UudGFyZ2V0SWQsIGxheW91dEluZm8pO1xuXG4gICAgICAvLyBDb21wdXRlIHN1bSBvZiBub2RlIGRlcHRocywgcmVsYXRpdmUgdG8gbGNhIGdyYXBoXG4gICAgICB2YXIgbGNhR3JhcGggPSBsYXlvdXRJbmZvLmdyYXBoU2V0W2xjYV07XG4gICAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgICAvLyBTb3VyY2UgZGVwdGhcbiAgICAgIHZhciB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbc291cmNlSXhdO1xuICAgICAgd2hpbGUgKC0xID09PSBsY2FHcmFwaC5pbmRleE9mKHRlbXBOb2RlLmlkKSkge1xuICAgICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUucGFyZW50SWRdXTtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cblxuICAgICAgLy8gVGFyZ2V0IGRlcHRoXG4gICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbdGFyZ2V0SXhdO1xuICAgICAgd2hpbGUgKC0xID09PSBsY2FHcmFwaC5pbmRleE9mKHRlbXBOb2RlLmlkKSkge1xuICAgICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUucGFyZW50SWRdXTtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cblxuICAgICAgLy8gbG9nRGVidWcoJ0xDQSBvZiBub2RlcyAnICsgdGVtcEVkZ2Uuc291cmNlSWQgKyAnIGFuZCAnICsgdGVtcEVkZ2UudGFyZ2V0SWQgK1xuICAgICAgLy8gIFwiLiBJbmRleDogXCIgKyBsY2EgKyBcIiBDb250ZW50czogXCIgKyBsY2FHcmFwaC50b1N0cmluZygpICtcbiAgICAgIC8vICBcIi4gRGVwdGg6IFwiICsgZGVwdGgpO1xuXG4gICAgICAvLyBVcGRhdGUgaWRlYWxMZW5ndGhcbiAgICAgIGlkZWFsTGVuZ3RoICo9IGRlcHRoICogb3B0aW9ucy5uZXN0aW5nRmFjdG9yO1xuICAgIH1cbiAgICB0ZW1wRWRnZS5pZGVhbExlbmd0aCA9IGlkZWFsTGVuZ3RoO1xuICAgIHRlbXBFZGdlLmVsYXN0aWNpdHkgPSBlbGFzdGljaXR5O1xuICAgIGxheW91dEluZm8ubGF5b3V0RWRnZXMucHVzaCh0ZW1wRWRnZSk7XG4gIH1cblxuICAvLyBGaW5hbGx5LCByZXR1cm4gbGF5b3V0SW5mbyBvYmplY3RcbiAgcmV0dXJuIGxheW91dEluZm87XG59O1xuXG4vKipcbiAqIEBicmllZiA6IFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGluZGV4IG9mIHRoZSBsb3dlc3QgY29tbW9uXG4gKiAgICAgICAgICBncmFwaCBhbmNlc3RvciBiZXR3ZWVuIDIgbm9kZXMgaW4gdGhlIHN1YnRyZWVcbiAqICAgICAgICAgIChmcm9tIHRoZSBncmFwaCBoaWVyYXJjaHkgaW5kdWNlZCB0cmVlKSB3aG9zZVxuICogICAgICAgICAgcm9vdCBpcyBncmFwaEl4XG4gKlxuICogQGFyZyBub2RlMTogbm9kZTEncyBJRFxuICogQGFyZyBub2RlMjogbm9kZTIncyBJRFxuICogQGFyZyBsYXlvdXRJbmZvOiBsYXlvdXRJbmZvIG9iamVjdFxuICpcbiAqL1xudmFyIGZpbmRMQ0EgPSBmdW5jdGlvbiBmaW5kTENBKG5vZGUxLCBub2RlMiwgbGF5b3V0SW5mbykge1xuICAvLyBGaW5kIHRoZWlyIGNvbW1vbiBhbmNlc3Rlciwgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCBncmFwaFxuICB2YXIgcmVzID0gZmluZExDQV9hdXgobm9kZTEsIG5vZGUyLCAwLCBsYXlvdXRJbmZvKTtcbiAgaWYgKDIgPiByZXMuY291bnQpIHtcbiAgICAvLyBJZiBhdXggZnVuY3Rpb24gY291bGRuJ3QgZmluZCB0aGUgY29tbW9uIGFuY2VzdGVyLFxuICAgIC8vIHRoZW4gaXQgaXMgdGhlIHJvb3QgZ3JhcGhcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzLmdyYXBoO1xuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiAgICAgICAgICA6IEF1eGlsaWFyeSBmdW5jdGlvbiB1c2VkIGZvciBMQ0EgY29tcHV0YXRpb25cbiAqXG4gKiBAYXJnIG5vZGUxICAgICAgOiBub2RlMSdzIElEXG4gKiBAYXJnIG5vZGUyICAgICAgOiBub2RlMidzIElEXG4gKiBAYXJnIGdyYXBoSXggICAgOiBzdWJncmFwaCBpbmRleFxuICogQGFyZyBsYXlvdXRJbmZvIDogbGF5b3V0SW5mbyBvYmplY3RcbiAqXG4gKiBAcmV0dXJuICAgICAgICAgOiBvYmplY3Qgb2YgdGhlIGZvcm0ge2NvdW50OiBYLCBncmFwaDogWX0sIHdoZXJlOlxuICogICAgICAgICAgICAgICAgICAgWCBpcyB0aGUgbnVtYmVyIG9mIGFuY2VzdG9ycyAobWF4OiAyKSBmb3VuZCBpblxuICogICAgICAgICAgICAgICAgICAgZ3JhcGhJeCAoYW5kIGl0J3Mgc3ViZ3JhcGhzKSxcbiAqICAgICAgICAgICAgICAgICAgIFkgaXMgdGhlIGdyYXBoIGluZGV4IG9mIHRoZSBsb3dlc3QgZ3JhcGggY29udGFpbmluZ1xuICogICAgICAgICAgICAgICAgICAgYWxsIFggbm9kZXNcbiAqL1xudmFyIGZpbmRMQ0FfYXV4ID0gZnVuY3Rpb24gZmluZExDQV9hdXgobm9kZTEsIG5vZGUyLCBncmFwaEl4LCBsYXlvdXRJbmZvKSB7XG4gIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbZ3JhcGhJeF07XG4gIC8vIElmIGJvdGggbm9kZXMgYmVsb25ncyB0byBncmFwaEl4XG4gIGlmICgtMSA8IGdyYXBoLmluZGV4T2Yobm9kZTEpICYmIC0xIDwgZ3JhcGguaW5kZXhPZihub2RlMikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnQ6IDIsXG4gICAgICBncmFwaDogZ3JhcGhJeFxuICAgIH07XG4gIH1cblxuICAvLyBNYWtlIHJlY3Vyc2l2ZSBjYWxscyBmb3IgYWxsIHN1YmdyYXBoc1xuICB2YXIgYyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZUlkID0gZ3JhcGhbaV07XG4gICAgdmFyIG5vZGVJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W25vZGVJZF07XG4gICAgdmFyIGNoaWxkcmVuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlSXhdLmNoaWxkcmVuO1xuXG4gICAgLy8gSWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkLCBza2lwIGl0XG4gICAgaWYgKDAgPT09IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBjaGlsZEdyYXBoSXggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtsYXlvdXRJbmZvLmlkVG9JbmRleFtjaGlsZHJlblswXV1dO1xuICAgIHZhciByZXN1bHQgPSBmaW5kTENBX2F1eChub2RlMSwgbm9kZTIsIGNoaWxkR3JhcGhJeCwgbGF5b3V0SW5mbyk7XG4gICAgaWYgKDAgPT09IHJlc3VsdC5jb3VudCkge1xuICAgICAgLy8gTmVpdGhlciBub2RlMSBub3Igbm9kZTIgYXJlIHByZXNlbnQgaW4gdGhpcyBzdWJncmFwaFxuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmICgxID09PSByZXN1bHQuY291bnQpIHtcbiAgICAgIC8vIE9uZSBvZiAobm9kZTEsIG5vZGUyKSBpcyBwcmVzZW50IGluIHRoaXMgc3ViZ3JhcGhcbiAgICAgIGMrKztcbiAgICAgIGlmICgyID09PSBjKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZm91bmQgYm90aCBub2Rlcywgbm8gbmVlZCB0byBrZWVwIHNlYXJjaGluZ1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQm90aCBub2RlcyBhcmUgcHJlc2VudCBpbiB0aGlzIHN1YmdyYXBoXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNvdW50OiBjLFxuICAgIGdyYXBoOiBncmFwaEl4XG4gIH07XG59O1xuXG4vKipcbiAqIEBicmllZjogcHJpbnRzTGF5b3V0SW5mbyBpbnRvIGpzIGNvbnNvbGVcbiAqICAgICAgICAgT25seSB1c2VkIGZvciBkZWJidWdpbmdcbiAqL1xudmFyIHByaW50TGF5b3V0SW5mbzsgXG5cbi8qKlxuICogQGJyaWVmIDogUmFuZG9taXplcyB0aGUgcG9zaXRpb24gb2YgYWxsIG5vZGVzXG4gKi9cbnZhciByYW5kb21pemVQb3NpdGlvbnMgPSBmdW5jdGlvbiByYW5kb21pemVQb3NpdGlvbnMobGF5b3V0SW5mbywgY3kpIHtcbiAgdmFyIHdpZHRoID0gbGF5b3V0SW5mby5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGxheW91dEluZm8uY2xpZW50SGVpZ2h0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcblxuICAgIC8vIE5vIG5lZWQgdG8gcmFuZG9taXplIGNvbXBvdW5kIG5vZGVzIG9yIGxvY2tlZCBub2Rlc1xuICAgIGlmICgwID09PSBuLmNoaWxkcmVuLmxlbmd0aCAmJiAhbi5pc0xvY2tlZCkge1xuICAgICAgbi5wb3NpdGlvblggPSBNYXRoLnJhbmRvbSgpICogd2lkdGg7XG4gICAgICBuLnBvc2l0aW9uWSA9IE1hdGgucmFuZG9tKCkgKiBoZWlnaHQ7XG4gICAgfVxuICB9XG59O1xudmFyIGdldFNjYWxlSW5Cb3VuZHNGbiA9IGZ1bmN0aW9uIGdldFNjYWxlSW5Cb3VuZHNGbihsYXlvdXRJbmZvLCBvcHRpb25zLCBub2Rlcykge1xuICB2YXIgYmIgPSBsYXlvdXRJbmZvLmJvdW5kaW5nQm94O1xuICB2YXIgY29zZUJCID0ge1xuICAgIHgxOiBJbmZpbml0eSxcbiAgICB4MjogLUluZmluaXR5LFxuICAgIHkxOiBJbmZpbml0eSxcbiAgICB5MjogLUluZmluaXR5XG4gIH07XG4gIGlmIChvcHRpb25zLmJvdW5kaW5nQm94KSB7XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGxub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlLmRhdGEoJ2lkJyldXTtcbiAgICAgIGNvc2VCQi54MSA9IE1hdGgubWluKGNvc2VCQi54MSwgbG5vZGUucG9zaXRpb25YKTtcbiAgICAgIGNvc2VCQi54MiA9IE1hdGgubWF4KGNvc2VCQi54MiwgbG5vZGUucG9zaXRpb25YKTtcbiAgICAgIGNvc2VCQi55MSA9IE1hdGgubWluKGNvc2VCQi55MSwgbG5vZGUucG9zaXRpb25ZKTtcbiAgICAgIGNvc2VCQi55MiA9IE1hdGgubWF4KGNvc2VCQi55MiwgbG5vZGUucG9zaXRpb25ZKTtcbiAgICB9KTtcbiAgICBjb3NlQkIudyA9IGNvc2VCQi54MiAtIGNvc2VCQi54MTtcbiAgICBjb3NlQkIuaCA9IGNvc2VCQi55MiAtIGNvc2VCQi55MTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGVsZSwgaSkge1xuICAgIHZhciBsbm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZWxlLmRhdGEoJ2lkJyldXTtcbiAgICBpZiAob3B0aW9ucy5ib3VuZGluZ0JveCkge1xuICAgICAgLy8gdGhlbiBhZGQgZXh0cmEgYm91bmRpbmcgYm94IGNvbnN0cmFpbnRcbiAgICAgIHZhciBwY3RYID0gKGxub2RlLnBvc2l0aW9uWCAtIGNvc2VCQi54MSkgLyBjb3NlQkIudztcbiAgICAgIHZhciBwY3RZID0gKGxub2RlLnBvc2l0aW9uWSAtIGNvc2VCQi55MSkgLyBjb3NlQkIuaDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGJiLngxICsgcGN0WCAqIGJiLncsXG4gICAgICAgIHk6IGJiLnkxICsgcGN0WSAqIGJiLmhcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGxub2RlLnBvc2l0aW9uWCxcbiAgICAgICAgeTogbG5vZGUucG9zaXRpb25ZXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogVXBkYXRlcyB0aGUgcG9zaXRpb25zIG9mIG5vZGVzIGluIHRoZSBuZXR3b3JrXG4gKiBAYXJnIGxheW91dEluZm8gOiBMYXlvdXRJbmZvIG9iamVjdFxuICogQGFyZyBjeSAgICAgICAgIDogQ3l0b3NjYXBlIG9iamVjdFxuICogQGFyZyBvcHRpb25zICAgIDogTGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIHJlZnJlc2hQb3NpdGlvbnMgPSBmdW5jdGlvbiByZWZyZXNoUG9zaXRpb25zKGxheW91dEluZm8sIGN5LCBvcHRpb25zKSB7XG4gIC8vIHZhciBzID0gJ1JlZnJlc2hpbmcgcG9zaXRpb25zJztcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgdmFyIGxheW91dCA9IG9wdGlvbnMubGF5b3V0O1xuICB2YXIgbm9kZXMgPSBvcHRpb25zLmVsZXMubm9kZXMoKTtcbiAgdmFyIGdldFNjYWxlZFBvcyA9IGdldFNjYWxlSW5Cb3VuZHNGbihsYXlvdXRJbmZvLCBvcHRpb25zLCBub2Rlcyk7XG4gIG5vZGVzLnBvc2l0aW9ucyhnZXRTY2FsZWRQb3MpO1xuXG4gIC8vIFRyaWdnZXIgbGF5b3V0UmVhZHkgb25seSBvbiBmaXJzdCBjYWxsXG4gIGlmICh0cnVlICE9PSBsYXlvdXRJbmZvLnJlYWR5KSB7XG4gICAgLy8gcyA9ICdUcmlnZ2VyaW5nIGxheW91dHJlYWR5JztcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICBsYXlvdXRJbmZvLnJlYWR5ID0gdHJ1ZTtcbiAgICBsYXlvdXQub25lKCdsYXlvdXRyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICBsYXlvdXQ6IHRoaXNcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBMb2dzIGEgZGVidWcgbWVzc2FnZSBpbiBKUyBjb25zb2xlLCBpZiBERUJVRyBpcyBPTlxuICovXG4vLyB2YXIgbG9nRGVidWcgPSBmdW5jdGlvbih0ZXh0KSB7XG4vLyAgIGlmIChERUJVRykge1xuLy8gICAgIGNvbnNvbGUuZGVidWcodGV4dCk7XG4vLyAgIH1cbi8vIH07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogUGVyZm9ybXMgb25lIGl0ZXJhdGlvbiBvZiB0aGUgcGh5c2ljYWwgc2ltdWxhdGlvblxuICogQGFyZyBsYXlvdXRJbmZvIDogTGF5b3V0SW5mbyBvYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZFxuICogQGFyZyBjeSAgICAgICAgIDogQ3l0b3NjYXBlIG9iamVjdFxuICogQGFyZyBvcHRpb25zICAgIDogTGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIHN0ZXAgPSBmdW5jdGlvbiBzdGVwKGxheW91dEluZm8sIG9wdGlvbnMsIF9zdGVwKSB7XG4gIC8vIHZhciBzID0gXCJcXG5cXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCI7XG4gIC8vIHMgKz0gXCJcXG5TVEVQOiBcIiArIHN0ZXA7XG4gIC8vIHMgKz0gXCJcXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXFxuXCI7XG4gIC8vIGxvZ0RlYnVnKHMpO1xuXG4gIC8vIENhbGN1bGF0ZSBub2RlIHJlcHVsc2lvbnNcbiAgY2FsY3VsYXRlTm9kZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKTtcbiAgLy8gQ2FsY3VsYXRlIGVkZ2UgZm9yY2VzXG4gIGNhbGN1bGF0ZUVkZ2VGb3JjZXMobGF5b3V0SW5mbyk7XG4gIC8vIENhbGN1bGF0ZSBncmF2aXR5IGZvcmNlc1xuICBjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpO1xuICAvLyBQcm9wYWdhdGUgZm9yY2VzIGZyb20gcGFyZW50IHRvIGNoaWxkXG4gIHByb3BhZ2F0ZUZvcmNlcyhsYXlvdXRJbmZvKTtcbiAgLy8gVXBkYXRlIHBvc2l0aW9ucyBiYXNlZCBvbiBjYWxjdWxhdGVkIGZvcmNlc1xuICB1cGRhdGVQb3NpdGlvbnMobGF5b3V0SW5mbyk7XG59O1xuXG4vKipcbiAqIEBicmllZiA6IENvbXB1dGVzIHRoZSBub2RlIHJlcHVsc2lvbiBmb3JjZXNcbiAqL1xudmFyIGNhbGN1bGF0ZU5vZGVGb3JjZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVOb2RlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gR28gdGhyb3VnaCBlYWNoIG9mIHRoZSBncmFwaHMgaW4gZ3JhcGhTZXRcbiAgLy8gTm9kZXMgb25seSByZXBlbCBlYWNoIG90aGVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIGdyYXBoXG4gIC8vIHZhciBzID0gJ2NhbGN1bGF0ZU5vZGVGb3JjZXMnO1xuICAvLyBsb2dEZWJ1ZyhzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmdyYXBoU2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICB2YXIgbnVtTm9kZXMgPSBncmFwaC5sZW5ndGg7XG5cbiAgICAvLyBzID0gXCJTZXQ6IFwiICsgZ3JhcGgudG9TdHJpbmcoKTtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAgIC8vIE5vdyBnZXQgYWxsIHRoZSBwYWlycyBvZiBub2Rlc1xuICAgIC8vIE9ubHkgZ2V0IGVhY2ggcGFpciBvbmNlLCAoQSwgQikgPSAoQiwgQSlcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bU5vZGVzOyBqKyspIHtcbiAgICAgIHZhciBub2RlMSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbal1dXTtcbiAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IG51bU5vZGVzOyBrKyspIHtcbiAgICAgICAgdmFyIG5vZGUyID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtrXV1dO1xuICAgICAgICBub2RlUmVwdWxzaW9uKG5vZGUxLCBub2RlMiwgbGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xudmFyIHJhbmRvbURpc3RhbmNlID0gZnVuY3Rpb24gcmFuZG9tRGlzdGFuY2UobWF4KSB7XG4gIHJldHVybiAtbWF4ICsgMiAqIG1heCAqIE1hdGgucmFuZG9tKCk7XG59O1xuXG4vKipcbiAqIEBicmllZiA6IENvbXB1dGUgdGhlIG5vZGUgcmVwdWxzaW9uIGZvcmNlcyBiZXR3ZWVuIGEgcGFpciBvZiBub2Rlc1xuICovXG52YXIgbm9kZVJlcHVsc2lvbiA9IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZTEsIG5vZGUyLCBsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIHZhciBzID0gXCJOb2RlIHJlcHVsc2lvbi4gTm9kZTE6IFwiICsgbm9kZTEuaWQgKyBcIiBOb2RlMjogXCIgKyBub2RlMi5pZDtcblxuICB2YXIgY21wdElkMSA9IG5vZGUxLmNtcHRJZDtcbiAgdmFyIGNtcHRJZDIgPSBub2RlMi5jbXB0SWQ7XG4gIGlmIChjbXB0SWQxICE9PSBjbXB0SWQyICYmICFsYXlvdXRJbmZvLmlzQ29tcG91bmQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgZGlyZWN0aW9uIG9mIGxpbmUgY29ubmVjdGluZyBib3RoIG5vZGUgY2VudGVyc1xuICB2YXIgZGlyZWN0aW9uWCA9IG5vZGUyLnBvc2l0aW9uWCAtIG5vZGUxLnBvc2l0aW9uWDtcbiAgdmFyIGRpcmVjdGlvblkgPSBub2RlMi5wb3NpdGlvblkgLSBub2RlMS5wb3NpdGlvblk7XG4gIHZhciBtYXhSYW5kRGlzdCA9IDE7XG4gIC8vIHMgKz0gXCJcXG5kaXJlY3Rpb25YOiBcIiArIGRpcmVjdGlvblggKyBcIiwgZGlyZWN0aW9uWTogXCIgKyBkaXJlY3Rpb25ZO1xuXG4gIC8vIElmIGJvdGggY2VudGVycyBhcmUgdGhlIHNhbWUsIGFwcGx5IGEgcmFuZG9tIGZvcmNlXG4gIGlmICgwID09PSBkaXJlY3Rpb25YICYmIDAgPT09IGRpcmVjdGlvblkpIHtcbiAgICBkaXJlY3Rpb25YID0gcmFuZG9tRGlzdGFuY2UobWF4UmFuZERpc3QpO1xuICAgIGRpcmVjdGlvblkgPSByYW5kb21EaXN0YW5jZShtYXhSYW5kRGlzdCk7XG4gIH1cbiAgdmFyIG92ZXJsYXAgPSBub2Rlc092ZXJsYXAobm9kZTEsIG5vZGUyLCBkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTtcbiAgaWYgKG92ZXJsYXAgPiAwKSB7XG4gICAgLy8gcyArPSBcIlxcbk5vZGVzIERPIG92ZXJsYXAuXCI7XG4gICAgLy8gcyArPSBcIlxcbk92ZXJsYXA6IFwiICsgb3ZlcmxhcDtcbiAgICAvLyBJZiBub2RlcyBvdmVybGFwLCByZXB1bHNpb24gZm9yY2UgaXMgcHJvcG9ydGlvbmFsXG4gICAgLy8gdG8gdGhlIG92ZXJsYXBcbiAgICB2YXIgZm9yY2UgPSBvcHRpb25zLm5vZGVPdmVybGFwICogb3ZlcmxhcDtcblxuICAgIC8vIENvbXB1dGUgdGhlIG1vZHVsZSBhbmQgY29tcG9uZW50cyBvZiB0aGUgZm9yY2UgdmVjdG9yXG4gICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpcmVjdGlvblggKiBkaXJlY3Rpb25YICsgZGlyZWN0aW9uWSAqIGRpcmVjdGlvblkpO1xuICAgIC8vIHMgKz0gXCJcXG5EaXN0YW5jZTogXCIgKyBkaXN0YW5jZTtcbiAgICB2YXIgZm9yY2VYID0gZm9yY2UgKiBkaXJlY3Rpb25YIC8gZGlzdGFuY2U7XG4gICAgdmFyIGZvcmNlWSA9IGZvcmNlICogZGlyZWN0aW9uWSAvIGRpc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIC8vIHMgKz0gXCJcXG5Ob2RlcyBkbyBOT1Qgb3ZlcmxhcC5cIjtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG92ZXJsYXAsIGZvcmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWxcbiAgICAvLyB0byBzcXVhcmVkIGRpc3RhbmNlXG5cbiAgICAvLyBHZXQgY2xpcHBpbmcgcG9pbnRzIGZvciBib3RoIG5vZGVzXG4gICAgdmFyIHBvaW50MSA9IGZpbmRDbGlwcGluZ1BvaW50KG5vZGUxLCBkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTtcbiAgICB2YXIgcG9pbnQyID0gZmluZENsaXBwaW5nUG9pbnQobm9kZTIsIC0xICogZGlyZWN0aW9uWCwgLTEgKiBkaXJlY3Rpb25ZKTtcblxuICAgIC8vIFVzZSBjbGlwcGluZyBwb2ludHMgdG8gY29tcHV0ZSBkaXN0YW5jZVxuICAgIHZhciBkaXN0YW5jZVggPSBwb2ludDIueCAtIHBvaW50MS54O1xuICAgIHZhciBkaXN0YW5jZVkgPSBwb2ludDIueSAtIHBvaW50MS55O1xuICAgIHZhciBkaXN0YW5jZVNxciA9IGRpc3RhbmNlWCAqIGRpc3RhbmNlWCArIGRpc3RhbmNlWSAqIGRpc3RhbmNlWTtcbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZGlzdGFuY2VTcXIpO1xuICAgIC8vIHMgKz0gXCJcXG5EaXN0YW5jZTogXCIgKyBkaXN0YW5jZTtcblxuICAgIC8vIENvbXB1dGUgdGhlIG1vZHVsZSBhbmQgY29tcG9uZW50cyBvZiB0aGUgZm9yY2UgdmVjdG9yXG4gICAgdmFyIGZvcmNlID0gKG5vZGUxLm5vZGVSZXB1bHNpb24gKyBub2RlMi5ub2RlUmVwdWxzaW9uKSAvIGRpc3RhbmNlU3FyO1xuICAgIHZhciBmb3JjZVggPSBmb3JjZSAqIGRpc3RhbmNlWCAvIGRpc3RhbmNlO1xuICAgIHZhciBmb3JjZVkgPSBmb3JjZSAqIGRpc3RhbmNlWSAvIGRpc3RhbmNlO1xuICB9XG5cbiAgLy8gQXBwbHkgZm9yY2VcbiAgaWYgKCFub2RlMS5pc0xvY2tlZCkge1xuICAgIG5vZGUxLm9mZnNldFggLT0gZm9yY2VYO1xuICAgIG5vZGUxLm9mZnNldFkgLT0gZm9yY2VZO1xuICB9XG4gIGlmICghbm9kZTIuaXNMb2NrZWQpIHtcbiAgICBub2RlMi5vZmZzZXRYICs9IGZvcmNlWDtcbiAgICBub2RlMi5vZmZzZXRZICs9IGZvcmNlWTtcbiAgfVxuXG4gIC8vIHMgKz0gXCJcXG5Gb3JjZVg6IFwiICsgZm9yY2VYICsgXCIgRm9yY2VZOiBcIiArIGZvcmNlWTtcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgcmV0dXJuO1xufTtcblxuLyoqXG4gKiBAYnJpZWYgIDogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBub2RlcyBvdmVybGFwIG9yIG5vdFxuICogQHJldHVybiA6IEFtb3VudCBvZiBvdmVybGFwcGluZyAoMCA9PiBubyBvdmVybGFwKVxuICovXG52YXIgbm9kZXNPdmVybGFwID0gZnVuY3Rpb24gbm9kZXNPdmVybGFwKG5vZGUxLCBub2RlMiwgZFgsIGRZKSB7XG4gIGlmIChkWCA+IDApIHtcbiAgICB2YXIgb3ZlcmxhcFggPSBub2RlMS5tYXhYIC0gbm9kZTIubWluWDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgb3ZlcmxhcFggPSBub2RlMi5tYXhYIC0gbm9kZTEubWluWDtcbiAgfVxuICBpZiAoZFkgPiAwKSB7XG4gICAgdmFyIG92ZXJsYXBZID0gbm9kZTEubWF4WSAtIG5vZGUyLm1pblk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG92ZXJsYXBZID0gbm9kZTIubWF4WSAtIG5vZGUxLm1pblk7XG4gIH1cbiAgaWYgKG92ZXJsYXBYID49IDAgJiYgb3ZlcmxhcFkgPj0gMCkge1xuICAgIHJldHVybiBNYXRoLnNxcnQob3ZlcmxhcFggKiBvdmVybGFwWCArIG92ZXJsYXBZICogb3ZlcmxhcFkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IEZpbmRzIHRoZSBwb2ludCBpbiB3aGljaCBhbiBlZGdlIChkaXJlY3Rpb24gZFgsIGRZKSBpbnRlcnNlY3RzXG4gKiAgICAgICAgICB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IG9mIGl0J3Mgc291cmNlL3RhcmdldCBub2RlXG4gKi9cbnZhciBmaW5kQ2xpcHBpbmdQb2ludCA9IGZ1bmN0aW9uIGZpbmRDbGlwcGluZ1BvaW50KG5vZGUsIGRYLCBkWSkge1xuICAvLyBTaG9yY3V0c1xuICB2YXIgWCA9IG5vZGUucG9zaXRpb25YO1xuICB2YXIgWSA9IG5vZGUucG9zaXRpb25ZO1xuICB2YXIgSCA9IG5vZGUuaGVpZ2h0IHx8IDE7XG4gIHZhciBXID0gbm9kZS53aWR0aCB8fCAxO1xuICB2YXIgZGlyU2xvcGUgPSBkWSAvIGRYO1xuICB2YXIgbm9kZVNsb3BlID0gSCAvIFc7XG5cbiAgLy8gdmFyIHMgPSAnQ29tcHV0aW5nIGNsaXBwaW5nIHBvaW50IG9mIG5vZGUgJyArIG5vZGUuaWQgK1xuICAvLyAgIFwiIC4gSGVpZ2h0OiAgXCIgKyBIICsgXCIsIFdpZHRoOiBcIiArIFcgK1xuICAvLyAgIFwiXFxuRGlyZWN0aW9uIFwiICsgZFggKyBcIiwgXCIgKyBkWTtcbiAgLy9cbiAgLy8gQ29tcHV0ZSBpbnRlcnNlY3Rpb25cbiAgdmFyIHJlcyA9IHt9O1xuXG4gIC8vIENhc2U6IFZlcnRpY2FsIGRpcmVjdGlvbiAodXApXG4gIGlmICgwID09PSBkWCAmJiAwIDwgZFkpIHtcbiAgICByZXMueCA9IFg7XG4gICAgLy8gcyArPSBcIlxcblVwIGRpcmVjdGlvblwiO1xuICAgIHJlcy55ID0gWSArIEggLyAyO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBDYXNlOiBWZXJ0aWNhbCBkaXJlY3Rpb24gKGRvd24pXG4gIGlmICgwID09PSBkWCAmJiAwID4gZFkpIHtcbiAgICByZXMueCA9IFg7XG4gICAgcmVzLnkgPSBZICsgSCAvIDI7XG4gICAgLy8gcyArPSBcIlxcbkRvd24gZGlyZWN0aW9uXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgcmlnaHQgYm9yZGVyXG4gIGlmICgwIDwgZFggJiYgLTEgKiBub2RlU2xvcGUgPD0gZGlyU2xvcGUgJiYgZGlyU2xvcGUgPD0gbm9kZVNsb3BlKSB7XG4gICAgcmVzLnggPSBYICsgVyAvIDI7XG4gICAgcmVzLnkgPSBZICsgVyAqIGRZIC8gMiAvIGRYO1xuICAgIC8vIHMgKz0gXCJcXG5SaWdodGJvcmRlclwiO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8vIENhc2U6IEludGVyc2VjdHMgdGhlIGxlZnQgYm9yZGVyXG4gIGlmICgwID4gZFggJiYgLTEgKiBub2RlU2xvcGUgPD0gZGlyU2xvcGUgJiYgZGlyU2xvcGUgPD0gbm9kZVNsb3BlKSB7XG4gICAgcmVzLnggPSBYIC0gVyAvIDI7XG4gICAgcmVzLnkgPSBZIC0gVyAqIGRZIC8gMiAvIGRYO1xuICAgIC8vIHMgKz0gXCJcXG5MZWZ0Ym9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgdG9wIGJvcmRlclxuICBpZiAoMCA8IGRZICYmIChkaXJTbG9wZSA8PSAtMSAqIG5vZGVTbG9wZSB8fCBkaXJTbG9wZSA+PSBub2RlU2xvcGUpKSB7XG4gICAgcmVzLnggPSBYICsgSCAqIGRYIC8gMiAvIGRZO1xuICAgIHJlcy55ID0gWSArIEggLyAyO1xuICAgIC8vIHMgKz0gXCJcXG5Ub3AgYm9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgYm90dG9tIGJvcmRlclxuICBpZiAoMCA+IGRZICYmIChkaXJTbG9wZSA8PSAtMSAqIG5vZGVTbG9wZSB8fCBkaXJTbG9wZSA+PSBub2RlU2xvcGUpKSB7XG4gICAgcmVzLnggPSBYIC0gSCAqIGRYIC8gMiAvIGRZO1xuICAgIHJlcy55ID0gWSAtIEggLyAyO1xuICAgIC8vIHMgKz0gXCJcXG5Cb3R0b20gYm9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gcyArPSBcIlxcbkNsaXBwaW5nIHBvaW50IGZvdW5kIGF0IFwiICsgcmVzLnggKyBcIiwgXCIgKyByZXMueTtcbiAgLy8gbG9nRGVidWcocyk7XG4gIHJldHVybiByZXM7XG59O1xuXG4vKipcbiAqIEBicmllZiA6IENhbGN1bGF0ZXMgYWxsIGVkZ2UgZm9yY2VzXG4gKi9cbnZhciBjYWxjdWxhdGVFZGdlRm9yY2VzID0gZnVuY3Rpb24gY2FsY3VsYXRlRWRnZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIEl0ZXJhdGUgb3ZlciBhbGwgZWRnZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmVkZ2VTaXplOyBpKyspIHtcbiAgICAvLyBHZXQgZWRnZSwgc291cmNlICYgdGFyZ2V0IG5vZGVzXG4gICAgdmFyIGVkZ2UgPSBsYXlvdXRJbmZvLmxheW91dEVkZ2VzW2ldO1xuICAgIHZhciBzb3VyY2VJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W2VkZ2Uuc291cmNlSWRdO1xuICAgIHZhciBzb3VyY2UgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW3NvdXJjZUl4XTtcbiAgICB2YXIgdGFyZ2V0SXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtlZGdlLnRhcmdldElkXTtcbiAgICB2YXIgdGFyZ2V0ID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1t0YXJnZXRJeF07XG5cbiAgICAvLyBHZXQgZGlyZWN0aW9uIG9mIGxpbmUgY29ubmVjdGluZyBib3RoIG5vZGUgY2VudGVyc1xuICAgIHZhciBkaXJlY3Rpb25YID0gdGFyZ2V0LnBvc2l0aW9uWCAtIHNvdXJjZS5wb3NpdGlvblg7XG4gICAgdmFyIGRpcmVjdGlvblkgPSB0YXJnZXQucG9zaXRpb25ZIC0gc291cmNlLnBvc2l0aW9uWTtcblxuICAgIC8vIElmIGJvdGggY2VudGVycyBhcmUgdGhlIHNhbWUsIGRvIG5vdGhpbmcuXG4gICAgLy8gQSByYW5kb20gZm9yY2UgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFzIG5vZGUgcmVwdWxzaW9uXG4gICAgaWYgKDAgPT09IGRpcmVjdGlvblggJiYgMCA9PT0gZGlyZWN0aW9uWSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNsaXBwaW5nIHBvaW50cyBmb3IgYm90aCBub2Rlc1xuICAgIHZhciBwb2ludDEgPSBmaW5kQ2xpcHBpbmdQb2ludChzb3VyY2UsIGRpcmVjdGlvblgsIGRpcmVjdGlvblkpO1xuICAgIHZhciBwb2ludDIgPSBmaW5kQ2xpcHBpbmdQb2ludCh0YXJnZXQsIC0xICogZGlyZWN0aW9uWCwgLTEgKiBkaXJlY3Rpb25ZKTtcbiAgICB2YXIgbHggPSBwb2ludDIueCAtIHBvaW50MS54O1xuICAgIHZhciBseSA9IHBvaW50Mi55IC0gcG9pbnQxLnk7XG4gICAgdmFyIGwgPSBNYXRoLnNxcnQobHggKiBseCArIGx5ICogbHkpO1xuICAgIHZhciBmb3JjZSA9IE1hdGgucG93KGVkZ2UuaWRlYWxMZW5ndGggLSBsLCAyKSAvIGVkZ2UuZWxhc3RpY2l0eTtcbiAgICBpZiAoMCAhPT0gbCkge1xuICAgICAgdmFyIGZvcmNlWCA9IGZvcmNlICogbHggLyBsO1xuICAgICAgdmFyIGZvcmNlWSA9IGZvcmNlICogbHkgLyBsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZm9yY2VYID0gMDtcbiAgICAgIHZhciBmb3JjZVkgPSAwO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGlzIGZvcmNlIHRvIHRhcmdldCBhbmQgc291cmNlIG5vZGVzXG4gICAgaWYgKCFzb3VyY2UuaXNMb2NrZWQpIHtcbiAgICAgIHNvdXJjZS5vZmZzZXRYICs9IGZvcmNlWDtcbiAgICAgIHNvdXJjZS5vZmZzZXRZICs9IGZvcmNlWTtcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQuaXNMb2NrZWQpIHtcbiAgICAgIHRhcmdldC5vZmZzZXRYIC09IGZvcmNlWDtcbiAgICAgIHRhcmdldC5vZmZzZXRZIC09IGZvcmNlWTtcbiAgICB9XG5cbiAgICAvLyB2YXIgcyA9ICdFZGdlIGZvcmNlIGJldHdlZW4gbm9kZXMgJyArIHNvdXJjZS5pZCArICcgYW5kICcgKyB0YXJnZXQuaWQ7XG4gICAgLy8gcyArPSBcIlxcbkRpc3RhbmNlOiBcIiArIGwgKyBcIiBGb3JjZTogKFwiICsgZm9yY2VYICsgXCIsIFwiICsgZm9yY2VZICsgXCIpXCI7XG4gICAgLy8gbG9nRGVidWcocyk7XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmIDogQ29tcHV0ZXMgZ3Jhdml0eSBmb3JjZXMgZm9yIGFsbCBub2Rlc1xuICovXG52YXIgY2FsY3VsYXRlR3Jhdml0eUZvcmNlcyA9IGZ1bmN0aW9uIGNhbGN1bGF0ZUdyYXZpdHlGb3JjZXMobGF5b3V0SW5mbywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5ncmF2aXR5ID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBkaXN0VGhyZXNob2xkID0gMTtcblxuICAvLyB2YXIgcyA9ICdjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzJztcbiAgLy8gbG9nRGVidWcocyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ncmFwaFNldC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbaV07XG4gICAgdmFyIG51bU5vZGVzID0gZ3JhcGgubGVuZ3RoO1xuXG4gICAgLy8gcyA9IFwiU2V0OiBcIiArIGdyYXBoLnRvU3RyaW5nKCk7XG4gICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAvLyBDb21wdXRlIGdyYXBoIGNlbnRlclxuICAgIGlmICgwID09PSBpKSB7XG4gICAgICB2YXIgY2VudGVyWCA9IGxheW91dEluZm8uY2xpZW50SGVpZ2h0IC8gMjtcbiAgICAgIHZhciBjZW50ZXJZID0gbGF5b3V0SW5mby5jbGllbnRXaWR0aCAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBQYXJlbnQgbm9kZSBmb3IgdGhpcyBncmFwaCwgYW5kIHVzZSBpdHMgcG9zaXRpb24gYXMgY2VudGVyXG4gICAgICB2YXIgdGVtcCA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbMF1dXTtcbiAgICAgIHZhciBwYXJlbnQgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3RlbXAucGFyZW50SWRdXTtcbiAgICAgIHZhciBjZW50ZXJYID0gcGFyZW50LnBvc2l0aW9uWDtcbiAgICAgIHZhciBjZW50ZXJZID0gcGFyZW50LnBvc2l0aW9uWTtcbiAgICB9XG4gICAgLy8gcyA9IFwiQ2VudGVyIGZvdW5kIGF0OiBcIiArIGNlbnRlclggKyBcIiwgXCIgKyBjZW50ZXJZO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuXG4gICAgLy8gQXBwbHkgZm9yY2UgdG8gYWxsIG5vZGVzIGluIGdyYXBoXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1Ob2RlczsgaisrKSB7XG4gICAgICB2YXIgbm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbal1dXTtcbiAgICAgIC8vIHMgPSBcIk5vZGU6IFwiICsgbm9kZS5pZDtcblxuICAgICAgaWYgKG5vZGUuaXNMb2NrZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZHggPSBjZW50ZXJYIC0gbm9kZS5wb3NpdGlvblg7XG4gICAgICB2YXIgZHkgPSBjZW50ZXJZIC0gbm9kZS5wb3NpdGlvblk7XG4gICAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBpZiAoZCA+IGRpc3RUaHJlc2hvbGQpIHtcbiAgICAgICAgdmFyIGZ4ID0gb3B0aW9ucy5ncmF2aXR5ICogZHggLyBkO1xuICAgICAgICB2YXIgZnkgPSBvcHRpb25zLmdyYXZpdHkgKiBkeSAvIGQ7XG4gICAgICAgIG5vZGUub2Zmc2V0WCArPSBmeDtcbiAgICAgICAgbm9kZS5vZmZzZXRZICs9IGZ5O1xuICAgICAgICAvLyBzICs9IFwiOiBBcHBsaWVkIGZvcmNlOiBcIiArIGZ4ICsgXCIsIFwiICsgZnk7XG4gICAgICB9XG4gICAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogVGhpcyBmdW5jdGlvbiBwcm9wYWdhdGVzIHRoZSBleGlzdGluZyBvZmZzZXRzIGZyb21cbiAqICAgICAgICAgICAgICAgICAgIHBhcmVudCBub2RlcyB0byBpdHMgZGVzY2VuZGVudHMuXG4gKiBAYXJnIGxheW91dEluZm8gOiBsYXlvdXRJbmZvIE9iamVjdFxuICogQGFyZyBjeSAgICAgICAgIDogY3l0b3NjYXBlIE9iamVjdFxuICogQGFyZyBvcHRpb25zICAgIDogTGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIHByb3BhZ2F0ZUZvcmNlcyA9IGZ1bmN0aW9uIHByb3BhZ2F0ZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIElubGluZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHF1ZXVlLCB1c2VkIGZvciB0cmF2ZXJzaW5nIHRoZSBncmFwaCBpbiBCRlMgb3JkZXJcbiAgdmFyIHF1ZXVlID0gW107XG4gIHZhciBzdGFydCA9IDA7IC8vIFBvaW50cyB0byB0aGUgc3RhcnQgdGhlIHF1ZXVlXG4gIHZhciBlbmQgPSAtMTsgLy8gUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG5cbiAgLy8gbG9nRGVidWcoJ3Byb3BhZ2F0ZUZvcmNlcycpO1xuXG4gIC8vIFN0YXJ0IGJ5IHZpc2l0aW5nIHRoZSBub2RlcyBpbiB0aGUgcm9vdCBncmFwaFxuICBxdWV1ZS5wdXNoLmFwcGx5KHF1ZXVlLCBsYXlvdXRJbmZvLmdyYXBoU2V0WzBdKTtcbiAgZW5kICs9IGxheW91dEluZm8uZ3JhcGhTZXRbMF0ubGVuZ3RoO1xuXG4gIC8vIFRyYXZlcnNlIHRoZSBncmFwaCwgbGV2ZWwgYnkgbGV2ZWwsXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICAvLyBHZXQgdGhlIG5vZGUgdG8gdmlzaXQgYW5kIHJlbW92ZSBpdCBmcm9tIHF1ZXVlXG4gICAgdmFyIG5vZGVJZCA9IHF1ZXVlW3N0YXJ0KytdO1xuICAgIHZhciBub2RlSW5kZXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlSWRdO1xuICAgIHZhciBub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlSW5kZXhdO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgbm9kZSBpZiBpdCdzIGNvbXBvdW5kXG4gICAgaWYgKDAgPCBjaGlsZHJlbi5sZW5ndGggJiYgIW5vZGUuaXNMb2NrZWQpIHtcbiAgICAgIHZhciBvZmZYID0gbm9kZS5vZmZzZXRYO1xuICAgICAgdmFyIG9mZlkgPSBub2RlLm9mZnNldFk7XG5cbiAgICAgIC8vIHZhciBzID0gXCJQcm9wYWdhdGluZyBvZmZzZXQgZnJvbSBwYXJlbnQgbm9kZSA6IFwiICsgbm9kZS5pZCArXG4gICAgICAvLyAgIFwiLiBPZmZzZXRYOiBcIiArIG9mZlggKyBcIi4gT2Zmc2V0WTogXCIgKyBvZmZZO1xuICAgICAgLy8gcyArPSBcIlxcbiBDaGlsZHJlbjogXCIgKyBjaGlsZHJlbi50b1N0cmluZygpO1xuICAgICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbY2hpbGRyZW5baV1dXTtcbiAgICAgICAgLy8gUHJvcGFnYXRlIG9mZnNldFxuICAgICAgICBjaGlsZE5vZGUub2Zmc2V0WCArPSBvZmZYO1xuICAgICAgICBjaGlsZE5vZGUub2Zmc2V0WSArPSBvZmZZO1xuICAgICAgICAvLyBBZGQgY2hpbGRyZW4gdG8gcXVldWUgdG8gYmUgdmlzaXRlZFxuICAgICAgICBxdWV1ZVsrK2VuZF0gPSBjaGlsZHJlbltpXTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgcGFyZW50IG9mZnNldHNcbiAgICAgIG5vZGUub2Zmc2V0WCA9IDA7XG4gICAgICBub2RlLm9mZnNldFkgPSAwO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBVcGRhdGVzIHRoZSBsYXlvdXQgbW9kZWwgcG9zaXRpb25zLCBiYXNlZCBvblxuICogICAgICAgICAgdGhlIGFjY3VtdWxhdGVkIGZvcmNlc1xuICovXG52YXIgdXBkYXRlUG9zaXRpb25zID0gZnVuY3Rpb24gdXBkYXRlUG9zaXRpb25zKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gdmFyIHMgPSAnVXBkYXRpbmcgcG9zaXRpb25zJztcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgLy8gUmVzZXQgYm91bmRhcmllcyBmb3IgY29tcG91bmQgbm9kZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICB2YXIgbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbaV07XG4gICAgaWYgKDAgPCBuLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gbG9nRGVidWcoXCJSZXNldHRpbmcgYm91bmRhcmllcyBvZiBjb21wb3VuZCBub2RlOiBcIiArIG4uaWQpO1xuICAgICAgbi5tYXhYID0gdW5kZWZpbmVkO1xuICAgICAgbi5taW5YID0gdW5kZWZpbmVkO1xuICAgICAgbi5tYXhZID0gdW5kZWZpbmVkO1xuICAgICAgbi5taW5ZID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcbiAgICBpZiAoMCA8IG4uY2hpbGRyZW4ubGVuZ3RoIHx8IG4uaXNMb2NrZWQpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IGNvbXBvdW5kIG9yIGxvY2tlZCBub2RlIHBvc2l0aW9uXG4gICAgICAvLyBsb2dEZWJ1ZyhcIlNraXBwaW5nIHBvc2l0aW9uIHVwZGF0ZSBvZiBub2RlOiBcIiArIG4uaWQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIHMgPSBcIk5vZGU6IFwiICsgbi5pZCArIFwiIFByZXZpb3VzIHBvc2l0aW9uOiAoXCIgK1xuICAgIC8vIG4ucG9zaXRpb25YICsgXCIsIFwiICsgbi5wb3NpdGlvblkgKyBcIikuXCI7XG5cbiAgICAvLyBMaW1pdCBkaXNwbGFjZW1lbnQgaW4gb3JkZXIgdG8gaW1wcm92ZSBzdGFiaWxpdHlcbiAgICB2YXIgdGVtcEZvcmNlID0gbGltaXRGb3JjZShuLm9mZnNldFgsIG4ub2Zmc2V0WSwgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSk7XG4gICAgbi5wb3NpdGlvblggKz0gdGVtcEZvcmNlLng7XG4gICAgbi5wb3NpdGlvblkgKz0gdGVtcEZvcmNlLnk7XG4gICAgbi5vZmZzZXRYID0gMDtcbiAgICBuLm9mZnNldFkgPSAwO1xuICAgIG4ubWluWCA9IG4ucG9zaXRpb25YIC0gbi53aWR0aDtcbiAgICBuLm1heFggPSBuLnBvc2l0aW9uWCArIG4ud2lkdGg7XG4gICAgbi5taW5ZID0gbi5wb3NpdGlvblkgLSBuLmhlaWdodDtcbiAgICBuLm1heFkgPSBuLnBvc2l0aW9uWSArIG4uaGVpZ2h0O1xuICAgIC8vIHMgKz0gXCIgTmV3IFBvc2l0aW9uOiAoXCIgKyBuLnBvc2l0aW9uWCArIFwiLCBcIiArIG4ucG9zaXRpb25ZICsgXCIpLlwiO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuXG4gICAgLy8gVXBkYXRlIGFuY2VzdHJ5IGJvdWRhcmllc1xuICAgIHVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyhuLCBsYXlvdXRJbmZvKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBzaXplLCBwb3NpdGlvbiBvZiBjb21wdW5kIG5vZGVzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ub2RlU2l6ZTsgaSsrKSB7XG4gICAgdmFyIG4gPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2ldO1xuICAgIGlmICgwIDwgbi5jaGlsZHJlbi5sZW5ndGggJiYgIW4uaXNMb2NrZWQpIHtcbiAgICAgIG4ucG9zaXRpb25YID0gKG4ubWF4WCArIG4ubWluWCkgLyAyO1xuICAgICAgbi5wb3NpdGlvblkgPSAobi5tYXhZICsgbi5taW5ZKSAvIDI7XG4gICAgICBuLndpZHRoID0gbi5tYXhYIC0gbi5taW5YO1xuICAgICAgbi5oZWlnaHQgPSBuLm1heFkgLSBuLm1pblk7XG4gICAgICAvLyBzID0gXCJVcGRhdGluZyBwb3NpdGlvbiwgc2l6ZSBvZiBjb21wb3VuZCBub2RlIFwiICsgbi5pZDtcbiAgICAgIC8vIHMgKz0gXCJcXG5Qb3NpdGlvblg6IFwiICsgbi5wb3NpdGlvblggKyBcIiwgUG9zaXRpb25ZOiBcIiArIG4ucG9zaXRpb25ZO1xuICAgICAgLy8gcyArPSBcIlxcbldpZHRoOiBcIiArIG4ud2lkdGggKyBcIiwgSGVpZ2h0OiBcIiArIG4uaGVpZ2h0O1xuICAgICAgLy8gbG9nRGVidWcocyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IExpbWl0cyBhIGZvcmNlIChmb3JjZVgsIGZvcmNlWSkgdG8gYmUgbm90XG4gKiAgICAgICAgICBncmVhdGVyIChpbiBtb2R1bG8pIHRoYW4gbWF4LlxuIDggICAgICAgICAgUHJlc2VydmVzIGZvcmNlIGRpcmVjdGlvbi5cbiAgKi9cbnZhciBsaW1pdEZvcmNlID0gZnVuY3Rpb24gbGltaXRGb3JjZShmb3JjZVgsIGZvcmNlWSwgbWF4KSB7XG4gIC8vIHZhciBzID0gXCJMaW1pdGluZyBmb3JjZTogKFwiICsgZm9yY2VYICsgXCIsIFwiICsgZm9yY2VZICsgXCIpLiBNYXg6IFwiICsgbWF4O1xuICB2YXIgZm9yY2UgPSBNYXRoLnNxcnQoZm9yY2VYICogZm9yY2VYICsgZm9yY2VZICogZm9yY2VZKTtcbiAgaWYgKGZvcmNlID4gbWF4KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHg6IG1heCAqIGZvcmNlWCAvIGZvcmNlLFxuICAgICAgeTogbWF4ICogZm9yY2VZIC8gZm9yY2VcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciByZXMgPSB7XG4gICAgICB4OiBmb3JjZVgsXG4gICAgICB5OiBmb3JjZVlcbiAgICB9O1xuICB9XG5cbiAgLy8gcyArPSBcIi5cXG5SZXN1bHQ6IChcIiArIHJlcy54ICsgXCIsIFwiICsgcmVzLnkgKyBcIilcIjtcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogQGJyaWVmIDogRnVuY3Rpb24gdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBjb21wb3VuZCBub2RlXG4gKiAgICAgICAgICBzaXplcywgc2luY2UgdGhleSBzaG91bGQgYm91bmQgYWxsIHRoZWlyIHN1Ym5vZGVzLlxuICovXG52YXIgdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzID0gZnVuY3Rpb24gdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzKG5vZGUsIGxheW91dEluZm8pIHtcbiAgLy8gdmFyIHMgPSBcIlByb3BhZ2F0aW5nIG5ldyBwb3NpdGlvbi9zaXplIG9mIG5vZGUgXCIgKyBub2RlLmlkO1xuICB2YXIgcGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICBpZiAobnVsbCA9PSBwYXJlbnRJZCkge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSBhcmUgZG9uZVxuICAgIC8vIHMgKz0gXCIuIE5vIHBhcmVudCBub2RlLlwiO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEdldCBQYXJlbnQgTm9kZVxuICB2YXIgcCA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbcGFyZW50SWRdXTtcbiAgdmFyIGZsYWcgPSBmYWxzZTtcblxuICAvLyBNYXhYXG4gIGlmIChudWxsID09IHAubWF4WCB8fCBub2RlLm1heFggKyBwLnBhZFJpZ2h0ID4gcC5tYXhYKSB7XG4gICAgcC5tYXhYID0gbm9kZS5tYXhYICsgcC5wYWRSaWdodDtcbiAgICBmbGFnID0gdHJ1ZTtcbiAgICAvLyBzICs9IFwiXFxuTmV3IG1heFggZm9yIHBhcmVudCBub2RlIFwiICsgcC5pZCArIFwiOiBcIiArIHAubWF4WDtcbiAgfVxuXG4gIC8vIE1pblhcbiAgaWYgKG51bGwgPT0gcC5taW5YIHx8IG5vZGUubWluWCAtIHAucGFkTGVmdCA8IHAubWluWCkge1xuICAgIHAubWluWCA9IG5vZGUubWluWCAtIHAucGFkTGVmdDtcbiAgICBmbGFnID0gdHJ1ZTtcbiAgICAvLyBzICs9IFwiXFxuTmV3IG1pblggZm9yIHBhcmVudCBub2RlIFwiICsgcC5pZCArIFwiOiBcIiArIHAubWluWDtcbiAgfVxuXG4gIC8vIE1heFlcbiAgaWYgKG51bGwgPT0gcC5tYXhZIHx8IG5vZGUubWF4WSArIHAucGFkQm90dG9tID4gcC5tYXhZKSB7XG4gICAgcC5tYXhZID0gbm9kZS5tYXhZICsgcC5wYWRCb3R0b207XG4gICAgZmxhZyA9IHRydWU7XG4gICAgLy8gcyArPSBcIlxcbk5ldyBtYXhZIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1heFk7XG4gIH1cblxuICAvLyBNaW5ZXG4gIGlmIChudWxsID09IHAubWluWSB8fCBub2RlLm1pblkgLSBwLnBhZFRvcCA8IHAubWluWSkge1xuICAgIHAubWluWSA9IG5vZGUubWluWSAtIHAucGFkVG9wO1xuICAgIGZsYWcgPSB0cnVlO1xuICAgIC8vIHMgKz0gXCJcXG5OZXcgbWluWSBmb3IgcGFyZW50IG5vZGUgXCIgKyBwLmlkICsgXCI6IFwiICsgcC5taW5ZO1xuICB9XG5cbiAgLy8gSWYgdXBkYXRlZCBib3VuZGFyaWVzLCBwcm9wYWdhdGUgY2hhbmdlcyB1cHdhcmRcbiAgaWYgKGZsYWcpIHtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICByZXR1cm4gdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzKHAsIGxheW91dEluZm8pO1xuICB9XG5cbiAgLy8gcyArPSBcIi4gTm8gY2hhbmdlcyBpbiBib3VuZGFyaWVzL3Bvc2l0aW9uIG9mIHBhcmVudCBub2RlIFwiICsgcC5pZDtcbiAgLy8gbG9nRGVidWcocyk7XG4gIHJldHVybjtcbn07XG52YXIgc2VwYXJhdGVDb21wb25lbnRzID0gZnVuY3Rpb24gc2VwYXJhdGVDb21wb25lbnRzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGVzID0gbGF5b3V0SW5mby5sYXlvdXROb2RlcztcbiAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgdmFyIGNpZCA9IG5vZGUuY21wdElkO1xuICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzW2NpZF0gPSBjb21wb25lbnRzW2NpZF0gfHwgW107XG4gICAgY29tcG9uZW50LnB1c2gobm9kZSk7XG4gIH1cbiAgdmFyIHRvdGFsQSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gY29tcG9uZW50c1tpXTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjLngxID0gSW5maW5pdHk7XG4gICAgYy54MiA9IC1JbmZpbml0eTtcbiAgICBjLnkxID0gSW5maW5pdHk7XG4gICAgYy55MiA9IC1JbmZpbml0eTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBuID0gY1tqXTtcbiAgICAgIGMueDEgPSBNYXRoLm1pbihjLngxLCBuLnBvc2l0aW9uWCAtIG4ud2lkdGggLyAyKTtcbiAgICAgIGMueDIgPSBNYXRoLm1heChjLngyLCBuLnBvc2l0aW9uWCArIG4ud2lkdGggLyAyKTtcbiAgICAgIGMueTEgPSBNYXRoLm1pbihjLnkxLCBuLnBvc2l0aW9uWSAtIG4uaGVpZ2h0IC8gMik7XG4gICAgICBjLnkyID0gTWF0aC5tYXgoYy55Miwgbi5wb3NpdGlvblkgKyBuLmhlaWdodCAvIDIpO1xuICAgIH1cbiAgICBjLncgPSBjLngyIC0gYy54MTtcbiAgICBjLmggPSBjLnkyIC0gYy55MTtcbiAgICB0b3RhbEEgKz0gYy53ICogYy5oO1xuICB9XG4gIGNvbXBvbmVudHMuc29ydChmdW5jdGlvbiAoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLncgKiBjMi5oIC0gYzEudyAqIGMxLmg7XG4gIH0pO1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIHVzZWRXID0gMDtcbiAgdmFyIHJvd0ggPSAwO1xuICB2YXIgbWF4Um93VyA9IE1hdGguc3FydCh0b3RhbEEpICogbGF5b3V0SW5mby5jbGllbnRXaWR0aCAvIGxheW91dEluZm8uY2xpZW50SGVpZ2h0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGNvbXBvbmVudHNbaV07XG4gICAgaWYgKCFjKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbiA9IGNbal07XG4gICAgICBpZiAoIW4uaXNMb2NrZWQpIHtcbiAgICAgICAgbi5wb3NpdGlvblggKz0geCAtIGMueDE7XG4gICAgICAgIG4ucG9zaXRpb25ZICs9IHkgLSBjLnkxO1xuICAgICAgfVxuICAgIH1cbiAgICB4ICs9IGMudyArIG9wdGlvbnMuY29tcG9uZW50U3BhY2luZztcbiAgICB1c2VkVyArPSBjLncgKyBvcHRpb25zLmNvbXBvbmVudFNwYWNpbmc7XG4gICAgcm93SCA9IE1hdGgubWF4KHJvd0gsIGMuaCk7XG4gICAgaWYgKHVzZWRXID4gbWF4Um93Vykge1xuICAgICAgeSArPSByb3dIICsgb3B0aW9ucy5jb21wb25lbnRTcGFjaW5nO1xuICAgICAgeCA9IDA7XG4gICAgICB1c2VkVyA9IDA7XG4gICAgICByb3dIID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0cyQzID0ge1xuICBmaXQ6IHRydWUsXG4gIC8vIHdoZXRoZXIgdG8gZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgZ3JhcGhcbiAgcGFkZGluZzogMzAsXG4gIC8vIHBhZGRpbmcgdXNlZCBvbiBmaXRcbiAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgLy8gY29uc3RyYWluIGxheW91dCBib3VuZHM7IHsgeDEsIHkxLCB4MiwgeTIgfSBvciB7IHgxLCB5MSwgdywgaCB9XG4gIGF2b2lkT3ZlcmxhcDogdHJ1ZSxcbiAgLy8gcHJldmVudHMgbm9kZSBvdmVybGFwLCBtYXkgb3ZlcmZsb3cgYm91bmRpbmdCb3ggaWYgbm90IGVub3VnaCBzcGFjZVxuICBhdm9pZE92ZXJsYXBQYWRkaW5nOiAxMCxcbiAgLy8gZXh0cmEgc3BhY2luZyBhcm91bmQgbm9kZXMgd2hlbiBhdm9pZE92ZXJsYXA6IHRydWVcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICBjb25kZW5zZTogZmFsc2UsXG4gIC8vIHVzZXMgYWxsIGF2YWlsYWJsZSBzcGFjZSBvbiBmYWxzZSwgdXNlcyBtaW5pbWFsIHNwYWNlIG9uIHRydWVcbiAgcm93czogdW5kZWZpbmVkLFxuICAvLyBmb3JjZSBudW0gb2Ygcm93cyBpbiB0aGUgZ3JpZFxuICBjb2xzOiB1bmRlZmluZWQsXG4gIC8vIGZvcmNlIG51bSBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4gIHBvc2l0aW9uOiBmdW5jdGlvbiBwb3NpdGlvbihub2RlKSB7fSxcbiAgLy8gcmV0dXJucyB7IHJvdywgY29sIH0gZm9yIGVsZW1lbnRcbiAgc29ydDogdW5kZWZpbmVkLFxuICAvLyBhIHNvcnRpbmcgZnVuY3Rpb24gdG8gb3JkZXIgdGhlIG5vZGVzOyBlLmcuIGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYS5kYXRhKCd3ZWlnaHQnKSAtIGIuZGF0YSgnd2VpZ2h0JykgfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG59O1xuXG5mdW5jdGlvbiBHcmlkTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQzLCBvcHRpb25zKTtcbn1cbkdyaWRMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhcmFtcyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIG9wdGlvbnMgPSBwYXJhbXM7XG4gIHZhciBjeSA9IHBhcmFtcy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcbiAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICB9XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICBpZiAoYmIuaCA9PT0gMCB8fCBiYi53ID09PSAwKSB7XG4gICAgZWxlcy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBiYi54MSxcbiAgICAgICAgeTogYmIueTFcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2lkdGgvaGVpZ2h0ICogc3BsaXRzXjIgPSBjZWxscyB3aGVyZSBzcGxpdHMgaXMgbnVtYmVyIG9mIHRpbWVzIHRvIHNwbGl0IHdpZHRoXG4gICAgdmFyIGNlbGxzID0gbm9kZXMuc2l6ZSgpO1xuICAgIHZhciBzcGxpdHMgPSBNYXRoLnNxcnQoY2VsbHMgKiBiYi5oIC8gYmIudyk7XG4gICAgdmFyIHJvd3MgPSBNYXRoLnJvdW5kKHNwbGl0cyk7XG4gICAgdmFyIGNvbHMgPSBNYXRoLnJvdW5kKGJiLncgLyBiYi5oICogc3BsaXRzKTtcbiAgICB2YXIgc21hbGwgPSBmdW5jdGlvbiBzbWFsbCh2YWwpIHtcbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4ocm93cywgY29scyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ocm93cywgY29scyk7XG4gICAgICAgIGlmIChtaW4gPT0gcm93cykge1xuICAgICAgICAgIHJvd3MgPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29scyA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGxhcmdlID0gZnVuY3Rpb24gbGFyZ2UodmFsKSB7XG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuICAgICAgICBpZiAobWF4ID09IHJvd3MpIHtcbiAgICAgICAgICByb3dzID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHMgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvUm93cyA9IG9wdGlvbnMucm93cztcbiAgICB2YXIgb0NvbHMgPSBvcHRpb25zLmNvbHMgIT0gbnVsbCA/IG9wdGlvbnMuY29scyA6IG9wdGlvbnMuY29sdW1ucztcblxuICAgIC8vIGlmIHJvd3Mgb3IgY29sdW1ucyB3ZXJlIHNldCBpbiBvcHRpb25zLCB1c2UgdGhvc2UgdmFsdWVzXG4gICAgaWYgKG9Sb3dzICE9IG51bGwgJiYgb0NvbHMgIT0gbnVsbCkge1xuICAgICAgcm93cyA9IG9Sb3dzO1xuICAgICAgY29scyA9IG9Db2xzO1xuICAgIH0gZWxzZSBpZiAob1Jvd3MgIT0gbnVsbCAmJiBvQ29scyA9PSBudWxsKSB7XG4gICAgICByb3dzID0gb1Jvd3M7XG4gICAgICBjb2xzID0gTWF0aC5jZWlsKGNlbGxzIC8gcm93cyk7XG4gICAgfSBlbHNlIGlmIChvUm93cyA9PSBudWxsICYmIG9Db2xzICE9IG51bGwpIHtcbiAgICAgIGNvbHMgPSBvQ29scztcbiAgICAgIHJvd3MgPSBNYXRoLmNlaWwoY2VsbHMgLyBjb2xzKTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgdXNlIHRoZSBhdXRvbWF0aWMgdmFsdWVzIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcblxuICAgIC8vIGlmIHJvdW5kaW5nIHdhcyB1cCwgc2VlIGlmIHdlIGNhbiByZWR1Y2Ugcm93cyBvciBjb2x1bW5zXG4gICAgZWxzZSBpZiAoY29scyAqIHJvd3MgPiBjZWxscykge1xuICAgICAgdmFyIHNtID0gc21hbGwoKTtcbiAgICAgIHZhciBsZyA9IGxhcmdlKCk7XG5cbiAgICAgIC8vIHJlZHVjaW5nIHRoZSBzbWFsbCBzaWRlIHRha2VzIGF3YXkgdGhlIG1vc3QgY2VsbHMsIHNvIHRyeSBpdCBmaXJzdFxuICAgICAgaWYgKChzbSAtIDEpICogbGcgPj0gY2VsbHMpIHtcbiAgICAgICAgc21hbGwoc20gLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAoKGxnIC0gMSkgKiBzbSA+PSBjZWxscykge1xuICAgICAgICBsYXJnZShsZyAtIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiByb3VuZGluZyB3YXMgdG9vIGxvdywgYWRkIHJvd3Mgb3IgY29sdW1uc1xuICAgICAgd2hpbGUgKGNvbHMgKiByb3dzIDwgY2VsbHMpIHtcbiAgICAgICAgdmFyIF9zbSA9IHNtYWxsKCk7XG4gICAgICAgIHZhciBfbGcgPSBsYXJnZSgpO1xuXG4gICAgICAgIC8vIHRyeSB0byBhZGQgdG8gbGFyZ2VyIHNpZGUgZmlyc3QgKGFkZHMgbGVzcyBpbiBtdWx0aXBsaWNhdGlvbilcbiAgICAgICAgaWYgKChfbGcgKyAxKSAqIF9zbSA+PSBjZWxscykge1xuICAgICAgICAgIGxhcmdlKF9sZyArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYWxsKF9zbSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjZWxsV2lkdGggPSBiYi53IC8gY29scztcbiAgICB2YXIgY2VsbEhlaWdodCA9IGJiLmggLyByb3dzO1xuICAgIGlmIChvcHRpb25zLmNvbmRlbnNlKSB7XG4gICAgICBjZWxsV2lkdGggPSAwO1xuICAgICAgY2VsbEhlaWdodCA9IDA7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgcG9zID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvcy54ID09IG51bGwgfHwgcG9zLnkgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIGZvciBiYlxuICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICBwb3MueSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5iYiA9IG5vZGUubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIHAgPSBvcHRpb25zLmF2b2lkT3ZlcmxhcFBhZGRpbmc7XG4gICAgICAgIHZhciB3ID0gbmJiLncgKyBwO1xuICAgICAgICB2YXIgaCA9IG5iYi5oICsgcDtcbiAgICAgICAgY2VsbFdpZHRoID0gTWF0aC5tYXgoY2VsbFdpZHRoLCB3KTtcbiAgICAgICAgY2VsbEhlaWdodCA9IE1hdGgubWF4KGNlbGxIZWlnaHQsIGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2VsbFVzZWQgPSB7fTsgLy8gZS5nLiAnYy0wLTInID0+IHRydWVcblxuICAgIHZhciB1c2VkID0gZnVuY3Rpb24gdXNlZChyb3csIGNvbCkge1xuICAgICAgcmV0dXJuIGNlbGxVc2VkWydjLScgKyByb3cgKyAnLScgKyBjb2xdID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH07XG4gICAgdmFyIHVzZSA9IGZ1bmN0aW9uIHVzZShyb3csIGNvbCkge1xuICAgICAgY2VsbFVzZWRbJ2MtJyArIHJvdyArICctJyArIGNvbF0gPSB0cnVlO1xuICAgIH07XG5cbiAgICAvLyB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgY2VsbCBwb3NpdGlvblxuICAgIHZhciByb3cgPSAwO1xuICAgIHZhciBjb2wgPSAwO1xuICAgIHZhciBtb3ZlVG9OZXh0Q2VsbCA9IGZ1bmN0aW9uIG1vdmVUb05leHRDZWxsKCkge1xuICAgICAgY29sKys7XG4gICAgICBpZiAoY29sID49IGNvbHMpIHtcbiAgICAgICAgY29sID0gMDtcbiAgICAgICAgcm93Kys7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGdldCBhIGNhY2hlIG9mIGFsbCB0aGUgbWFudWFsIHBvc2l0aW9uc1xuICAgIHZhciBpZDJtYW5Qb3MgPSB7fTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25vZGUgPSBub2Rlc1tfaV07XG4gICAgICB2YXIgcmNQb3MgPSBvcHRpb25zLnBvc2l0aW9uKF9ub2RlKTtcbiAgICAgIGlmIChyY1BvcyAmJiAocmNQb3Mucm93ICE9PSB1bmRlZmluZWQgfHwgcmNQb3MuY29sICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIC8vIG11c3QgaGF2ZSBhdCBsZWFzdCByb3cgb3IgY29sIGRlZidkXG4gICAgICAgIHZhciBfcG9zID0ge1xuICAgICAgICAgIHJvdzogcmNQb3Mucm93LFxuICAgICAgICAgIGNvbDogcmNQb3MuY29sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChfcG9zLmNvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gZmluZCB1bnVzZWQgY29sXG4gICAgICAgICAgX3Bvcy5jb2wgPSAwO1xuICAgICAgICAgIHdoaWxlICh1c2VkKF9wb3Mucm93LCBfcG9zLmNvbCkpIHtcbiAgICAgICAgICAgIF9wb3MuY29sKys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF9wb3Mucm93ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBmaW5kIHVudXNlZCByb3dcbiAgICAgICAgICBfcG9zLnJvdyA9IDA7XG4gICAgICAgICAgd2hpbGUgKHVzZWQoX3Bvcy5yb3csIF9wb3MuY29sKSkge1xuICAgICAgICAgICAgX3Bvcy5yb3crKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWQybWFuUG9zW19ub2RlLmlkKCldID0gX3BvcztcbiAgICAgICAgdXNlKF9wb3Mucm93LCBfcG9zLmNvbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBnZXRQb3MgPSBmdW5jdGlvbiBnZXRQb3MoZWxlbWVudCwgaSkge1xuICAgICAgdmFyIHgsIHk7XG4gICAgICBpZiAoZWxlbWVudC5sb2NrZWQoKSB8fCBlbGVtZW50LmlzUGFyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWUgaWYgd2UgaGF2ZSBhIG1hbnVhbCBwb3NpdGlvbiBzZXRcbiAgICAgIHZhciByY1BvcyA9IGlkMm1hblBvc1tlbGVtZW50LmlkKCldO1xuICAgICAgaWYgKHJjUG9zKSB7XG4gICAgICAgIHggPSByY1Bvcy5jb2wgKiBjZWxsV2lkdGggKyBjZWxsV2lkdGggLyAyICsgYmIueDE7XG4gICAgICAgIHkgPSByY1Bvcy5yb3cgKiBjZWxsSGVpZ2h0ICsgY2VsbEhlaWdodCAvIDIgKyBiYi55MTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBzZXQgYXV0b21hdGljYWxseVxuXG4gICAgICAgIHdoaWxlICh1c2VkKHJvdywgY29sKSkge1xuICAgICAgICAgIG1vdmVUb05leHRDZWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgeCA9IGNvbCAqIGNlbGxXaWR0aCArIGNlbGxXaWR0aCAvIDIgKyBiYi54MTtcbiAgICAgICAgeSA9IHJvdyAqIGNlbGxIZWlnaHQgKyBjZWxsSGVpZ2h0IC8gMiArIGJiLnkxO1xuICAgICAgICB1c2Uocm93LCBjb2wpO1xuICAgICAgICBtb3ZlVG9OZXh0Q2VsbCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCxcbiAgICAgICAgeTogeVxuICAgICAgfTtcbiAgICB9O1xuICAgIG5vZGVzLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBnZXRQb3MpO1xuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gZGVmYXVsdCBsYXlvdXQgb3B0aW9uc1xudmFyIGRlZmF1bHRzJDIgPSB7XG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAvLyBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30gLy8gb24gbGF5b3V0c3RvcFxufTtcblxuLy8gY29uc3RydWN0b3Jcbi8vIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuZnVuY3Rpb24gTnVsbExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkMiwgb3B0aW9ucyk7XG59XG5cbi8vIHJ1bnMgdGhlIGxheW91dFxuTnVsbExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIGVsZW1lbnRzIHRvIGNvbnNpZGVyIGluIHRoZSBsYXlvdXRcbiAgdmFyIGxheW91dCA9IHRoaXM7XG5cbiAgLy8gY3kgaXMgYXV0b21hdGljYWxseSBwb3B1bGF0ZWQgZm9yIHVzIGluIHRoZSBjb25zdHJ1Y3RvclxuICAvLyAoZGlzYWJsZSBlc2xpbnQgZm9yIG5leHQgbGluZSBhcyB0aGlzIHNlcnZlcyBhcyBleGFtcGxlIGxheW91dCBjb2RlIHRvIGV4dGVybmFsIGRldmVsb3BlcnMpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBvcHRpb25zLmN5O1xuICBsYXlvdXQuZW1pdCgnbGF5b3V0c3RhcnQnKTtcblxuICAvLyBwdXRzIGFsbCBub2RlcyBhdCAoMCwgMClcbiAgLy8gbi5iLiBtb3N0IGxheW91dHMgd291bGQgdXNlIGxheW91dFBvc2l0aW9ucygpLCBpbnN0ZWFkIG9mIHBvc2l0aW9ucygpIGFuZCBtYW51YWwgZXZlbnRzXG4gIGVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHRyaWdnZXIgbGF5b3V0cmVhZHkgd2hlbiBlYWNoIG5vZGUgaGFzIGhhZCBpdHMgcG9zaXRpb24gc2V0IGF0IGxlYXN0IG9uY2VcbiAgbGF5b3V0Lm9uZSgnbGF5b3V0cmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgbGF5b3V0LmVtaXQoJ2xheW91dHJlYWR5Jyk7XG5cbiAgLy8gdHJpZ2dlciBsYXlvdXRzdG9wIHdoZW4gdGhlIGxheW91dCBzdG9wcyAoZS5nLiBmaW5pc2hlcylcbiAgbGF5b3V0Lm9uZSgnbGF5b3V0c3RvcCcsIG9wdGlvbnMuc3RvcCk7XG4gIGxheW91dC5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gY2FsbGVkIG9uIGNvbnRpbnVvdXMgbGF5b3V0cyB0byBzdG9wIHRoZW0gYmVmb3JlIHRoZXkgZmluaXNoXG5OdWxsTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbnZhciBkZWZhdWx0cyQxID0ge1xuICBwb3NpdGlvbnM6IHVuZGVmaW5lZCxcbiAgLy8gbWFwIG9mIChub2RlIGlkKSA9PiAocG9zaXRpb24gb2JqKTsgb3IgZnVuY3Rpb24obm9kZSl7IHJldHVybiBzb21Qb3M7IH1cbiAgem9vbTogdW5kZWZpbmVkLFxuICAvLyB0aGUgem9vbSBsZXZlbCB0byBzZXQgKHByb2Igd2FudCBmaXQgPSBmYWxzZSBpZiBzZXQpXG4gIHBhbjogdW5kZWZpbmVkLFxuICAvLyB0aGUgcGFuIGxldmVsIHRvIHNldCAocHJvYiB3YW50IGZpdCA9IGZhbHNlIGlmIHNldClcbiAgZml0OiB0cnVlLFxuICAvLyB3aGV0aGVyIHRvIGZpdCB0byB2aWV3cG9ydFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gcGFkZGluZyBvbiBmaXRcbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG5cbmZ1bmN0aW9uIFByZXNldExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkMSwgb3B0aW9ucyk7XG59XG5QcmVzZXRMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCk7XG4gIHZhciBwb3NJc0ZuID0gZm4kNihvcHRpb25zLnBvc2l0aW9ucyk7XG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICBpZiAob3B0aW9ucy5wb3NpdGlvbnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvcHlQb3NpdGlvbihub2RlLnBvc2l0aW9uKCkpO1xuICAgIH1cbiAgICBpZiAocG9zSXNGbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucG9zaXRpb25zKG5vZGUpO1xuICAgIH1cbiAgICB2YXIgcG9zID0gb3B0aW9ucy5wb3NpdGlvbnNbbm9kZS5fcHJpdmF0ZS5kYXRhLmlkXTtcbiAgICBpZiAocG9zID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcG9zO1xuICB9XG4gIG5vZGVzLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBmdW5jdGlvbiAobm9kZSwgaSkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFBvc2l0aW9uKG5vZGUpO1xuICAgIGlmIChub2RlLmxvY2tlZCgpIHx8IHBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdG8gdmlld3BvcnRcbiAgcGFkZGluZzogMzAsXG4gIC8vIGZpdCBwYWRkaW5nXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG59O1xuXG5mdW5jdGlvbiBSYW5kb21MYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblJhbmRvbUxheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgZ2V0UG9zID0gZnVuY3Rpb24gZ2V0UG9zKG5vZGUsIGkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogYmIueDEgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiBiYi53KSxcbiAgICAgIHk6IGJiLnkxICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogYmIuaClcbiAgICB9O1xuICB9O1xuICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGxheW91dCA9IFt7XG4gIG5hbWU6ICdicmVhZHRoZmlyc3QnLFxuICBpbXBsOiBCcmVhZHRoRmlyc3RMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ2NpcmNsZScsXG4gIGltcGw6IENpcmNsZUxheW91dFxufSwge1xuICBuYW1lOiAnY29uY2VudHJpYycsXG4gIGltcGw6IENvbmNlbnRyaWNMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ2Nvc2UnLFxuICBpbXBsOiBDb3NlTGF5b3V0XG59LCB7XG4gIG5hbWU6ICdncmlkJyxcbiAgaW1wbDogR3JpZExheW91dFxufSwge1xuICBuYW1lOiAnbnVsbCcsXG4gIGltcGw6IE51bGxMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ3ByZXNldCcsXG4gIGltcGw6IFByZXNldExheW91dFxufSwge1xuICBuYW1lOiAncmFuZG9tJyxcbiAgaW1wbDogUmFuZG9tTGF5b3V0XG59XTtcblxuZnVuY3Rpb24gTnVsbFJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5ub3RpZmljYXRpb25zID0gMDsgLy8gZm9yIHRlc3Rpbmdcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgdGhyb3dJbWdFcnIgPSBmdW5jdGlvbiB0aHJvd0ltZ0VycigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcycpO1xufTtcbk51bGxSZW5kZXJlci5wcm90b3R5cGUgPSB7XG4gIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogbm9vcCxcbiAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zKys7XG4gIH0sXG4gIGluaXQ6IG5vb3AsXG4gIGlzSGVhZGxlc3M6IGZ1bmN0aW9uIGlzSGVhZGxlc3MoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIHBuZzogdGhyb3dJbWdFcnIsXG4gIGpwZzogdGhyb3dJbWdFcnJcbn07XG5cbnZhciBCUnAkZiA9IHt9O1xuQlJwJGYuYXJyb3dTaGFwZVdpZHRoID0gMC4zO1xuQlJwJGYucmVnaXN0ZXJBcnJvd1NoYXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycm93U2hhcGVzID0gdGhpcy5hcnJvd1NoYXBlcyA9IHt9O1xuICB2YXIgcmVuZGVyZXIgPSB0aGlzO1xuXG4gIC8vIENvbnRyYWN0IGZvciBhcnJvdyBzaGFwZXM6XG4gIC8vIDAsIDAgaXMgYXJyb3cgdGlwXG4gIC8vICgwLCAxKSBpcyBkaXJlY3Rpb24gdG93YXJkcyBub2RlXG4gIC8vICgxLCAwKSBpcyByaWdodFxuICAvL1xuICAvLyBmdW5jdGlvbmFsIGFwaTpcbiAgLy8gY29sbGlkZTogY2hlY2sgeCwgeSBpbiBzaGFwZVxuICAvLyByb3VnaENvbGxpZGU6IGNhbGxlZCBiZWZvcmUgY29sbGlkZSwgbm8gZmFsc2UgbmVnYXRpdmVzXG4gIC8vIGRyYXc6IGRyYXdcbiAgLy8gc3BhY2luZzogZGlzdChhcnJvd1RpcCwgbm9kZUJvdW5kYXJ5KVxuICAvLyBnYXA6IGRpc3QoZWRnZVRpcCwgbm9kZUJvdW5kYXJ5KSwgZWRnZVRpcCBtYXkgIT0gYXJyb3dUaXBcblxuICB2YXIgYmJDb2xsaWRlID0gZnVuY3Rpb24gYmJDb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgdmFyIHgxID0gdHJhbnNsYXRpb24ueCAtIHNpemUgLyAyIC0gcGFkZGluZztcbiAgICB2YXIgeDIgPSB0cmFuc2xhdGlvbi54ICsgc2l6ZSAvIDIgKyBwYWRkaW5nO1xuICAgIHZhciB5MSA9IHRyYW5zbGF0aW9uLnkgLSBzaXplIC8gMiAtIHBhZGRpbmc7XG4gICAgdmFyIHkyID0gdHJhbnNsYXRpb24ueSArIHNpemUgLyAyICsgcGFkZGluZztcbiAgICB2YXIgaW5zaWRlID0geDEgPD0geCAmJiB4IDw9IHgyICYmIHkxIDw9IHkgJiYgeSA8PSB5MjtcbiAgICByZXR1cm4gaW5zaWRlO1xuICB9O1xuICB2YXIgdHJhbnNmb3JtID0gZnVuY3Rpb24gdHJhbnNmb3JtKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgIHZhciB4Um90YXRlZCA9IHggKiBNYXRoLmNvcyhhbmdsZSkgLSB5ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgIHZhciB5Um90YXRlZCA9IHggKiBNYXRoLnNpbihhbmdsZSkgKyB5ICogTWF0aC5jb3MoYW5nbGUpO1xuICAgIHZhciB4U2NhbGVkID0geFJvdGF0ZWQgKiBzaXplO1xuICAgIHZhciB5U2NhbGVkID0geVJvdGF0ZWQgKiBzaXplO1xuICAgIHZhciB4VHJhbnNsYXRlZCA9IHhTY2FsZWQgKyB0cmFuc2xhdGlvbi54O1xuICAgIHZhciB5VHJhbnNsYXRlZCA9IHlTY2FsZWQgKyB0cmFuc2xhdGlvbi55O1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4VHJhbnNsYXRlZCxcbiAgICAgIHk6IHlUcmFuc2xhdGVkXG4gICAgfTtcbiAgfTtcbiAgdmFyIHRyYW5zZm9ybVBvaW50cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50cyhwdHMsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgIHZhciByZXRQdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgdmFyIHggPSBwdHNbaV07XG4gICAgICB2YXIgeSA9IHB0c1tpICsgMV07XG4gICAgICByZXRQdHMucHVzaCh0cmFuc2Zvcm0oeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiByZXRQdHM7XG4gIH07XG4gIHZhciBwb2ludHNUb0FyciA9IGZ1bmN0aW9uIHBvaW50c1RvQXJyKHB0cykge1xuICAgIHZhciByZXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHAgPSBwdHNbaV07XG4gICAgICByZXQucHVzaChwLngsIHAueSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIHZhciBzdGFuZGFyZEdhcCA9IGZ1bmN0aW9uIHN0YW5kYXJkR2FwKGVkZ2UpIHtcbiAgICByZXR1cm4gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnBmVmFsdWUgKiAyO1xuICB9O1xuICB2YXIgZGVmaW5lQXJyb3dTaGFwZSA9IGZ1bmN0aW9uIGRlZmluZUFycm93U2hhcGUobmFtZSwgZGVmbikge1xuICAgIGlmIChzdHJpbmcoZGVmbikpIHtcbiAgICAgIGRlZm4gPSBhcnJvd1NoYXBlc1tkZWZuXTtcbiAgICB9XG4gICAgYXJyb3dTaGFwZXNbbmFtZV0gPSBleHRlbmQoe1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHBvaW50czogWy0wLjE1LCAtMC4zLCAwLjE1LCAtMC4zLCAwLjE1LCAwLjMsIC0wLjE1LCAwLjNdLFxuICAgICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIHBhZGRpbmcpIHtcbiAgICAgICAgdmFyIHBvaW50cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgICAgdmFyIGluc2lkZSA9IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpO1xuICAgICAgICByZXR1cm4gaW5zaWRlO1xuICAgICAgfSxcbiAgICAgIHJvdWdoQ29sbGlkZTogYmJDb2xsaWRlLFxuICAgICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pIHtcbiAgICAgICAgdmFyIHBvaW50cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwoJ3BvbHlnb24nKShjb250ZXh0LCBwb2ludHMpO1xuICAgICAgfSxcbiAgICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0sXG4gICAgICBnYXA6IHN0YW5kYXJkR2FwXG4gICAgfSwgZGVmbik7XG4gIH07XG4gIGRlZmluZUFycm93U2hhcGUoJ25vbmUnLCB7XG4gICAgY29sbGlkZTogZmFsc2lmeSxcbiAgICByb3VnaENvbGxpZGU6IGZhbHNpZnksXG4gICAgZHJhdzogbm9vcCQxLFxuICAgIHNwYWNpbmc6IHplcm9pZnksXG4gICAgZ2FwOiB6ZXJvaWZ5XG4gIH0pO1xuICBkZWZpbmVBcnJvd1NoYXBlKCd0cmlhbmdsZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuM11cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2Fycm93JywgJ3RyaWFuZ2xlJyk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWJhY2tjdXJ2ZScsIHtcbiAgICBwb2ludHM6IGFycm93U2hhcGVzWyd0cmlhbmdsZSddLnBvaW50cyxcbiAgICBjb250cm9sUG9pbnQ6IFswLCAtMC4xNV0sXG4gICAgcm91Z2hDb2xsaWRlOiBiYkNvbGxpZGUsXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHB0c1RyYW5zID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgdmFyIGN0cmxQdCA9IHRoaXMuY29udHJvbFBvaW50O1xuICAgICAgdmFyIGN0cmxQdFRyYW5zID0gdHJhbnNmb3JtKGN0cmxQdFswXSwgY3RybFB0WzFdLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCBwdHNUcmFucywgY3RybFB0VHJhbnMpO1xuICAgIH0sXG4gICAgZ2FwOiBmdW5jdGlvbiBnYXAoZWRnZSkge1xuICAgICAgcmV0dXJuIHN0YW5kYXJkR2FwKGVkZ2UpICogMC44O1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLXRlZScsIHtcbiAgICBwb2ludHM6IFswLCAwLCAwLjE1LCAtMC4zLCAtMC4xNSwgLTAuMywgMCwgMF0sXG4gICAgcG9pbnRzVGVlOiBbLTAuMTUsIC0wLjQsIC0wLjE1LCAtMC41LCAwLjE1LCAtMC41LCAwLjE1LCAtMC40XSxcbiAgICBjb2xsaWRlOiBmdW5jdGlvbiBjb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgICB2YXIgdHJpUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplICsgMiAqIHBhZGRpbmcsIGFuZ2xlLCB0cmFuc2xhdGlvbikpO1xuICAgICAgdmFyIHRlZVB0cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RlZSwgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgIHZhciBpbnNpZGUgPSBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgdHJpUHRzKSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgdGVlUHRzKTtcbiAgICAgIHJldHVybiBpbnNpZGU7XG4gICAgfSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoKSB7XG4gICAgICB2YXIgdHJpUHRzID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgdmFyIHRlZVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RlZSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJpUHRzLCB0ZWVQdHMpO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2NpcmNsZS10cmlhbmdsZScsIHtcbiAgICByYWRpdXM6IDAuMTUsXG4gICAgcG9pbnRzVHI6IFswLCAtMC4xNSwgMC4xNSwgLTAuNDUsIC0wLjE1LCAtMC40NSwgMCwgLTAuMTVdLFxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgsIHBhZGRpbmcpIHtcbiAgICAgIHZhciB0ID0gdHJhbnNsYXRpb247XG4gICAgICB2YXIgY2lyY2xlSW5zaWRlID0gTWF0aC5wb3codC54IC0geCwgMikgKyBNYXRoLnBvdyh0LnkgLSB5LCAyKSA8PSBNYXRoLnBvdygoc2l6ZSArIDIgKiBwYWRkaW5nKSAqIHRoaXMucmFkaXVzLCAyKTtcbiAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICByZXR1cm4gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgY2lyY2xlSW5zaWRlO1xuICAgIH0sXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RyLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCB0cmlQdHMsIHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnksIHRoaXMucmFkaXVzICogc2l6ZSk7XG4gICAgfSxcbiAgICBzcGFjaW5nOiBmdW5jdGlvbiBzcGFjaW5nKGVkZ2UpIHtcbiAgICAgIHJldHVybiByZW5kZXJlci5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMucmFkaXVzO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWNyb3NzJywge1xuICAgIHBvaW50czogWzAsIDAsIDAuMTUsIC0wLjMsIC0wLjE1LCAtMC4zLCAwLCAwXSxcbiAgICBiYXNlQ3Jvc3NMaW5lUHRzOiBbLTAuMTUsIC0wLjQsXG4gICAgLy8gZmlyc3QgaGFsZiBvZiB0aGUgcmVjdGFuZ2xlXG4gICAgLTAuMTUsIC0wLjQsIDAuMTUsIC0wLjQsXG4gICAgLy8gc2Vjb25kIGhhbGYgb2YgdGhlIHJlY3RhbmdsZVxuICAgIDAuMTUsIC0wLjRdLFxuICAgIGNyb3NzTGluZVB0czogZnVuY3Rpb24gY3Jvc3NMaW5lUHRzKHNpemUsIGVkZ2VXaWR0aCkge1xuICAgICAgLy8gc2hpZnQgcG9pbnRzIHNvIHRoYXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNyb3NzIHBvaW50cyBtYXRjaGVzIGVkZ2Ugd2lkdGhcbiAgICAgIHZhciBwID0gdGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCk7XG4gICAgICB2YXIgc2hpZnRGYWN0b3IgPSBlZGdlV2lkdGggLyBzaXplO1xuICAgICAgdmFyIHkwID0gMztcbiAgICAgIHZhciB5MSA9IDU7XG4gICAgICBwW3kwXSA9IHBbeTBdIC0gc2hpZnRGYWN0b3I7XG4gICAgICBwW3kxXSA9IHBbeTFdIC0gc2hpZnRGYWN0b3I7XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgsIHBhZGRpbmcpIHtcbiAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB2YXIgdGVlUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMuY3Jvc3NMaW5lUHRzKHNpemUsIGVkZ2VXaWR0aCksIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB2YXIgaW5zaWRlID0gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRlZVB0cyk7XG4gICAgICByZXR1cm4gaW5zaWRlO1xuICAgIH0sXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHZhciBjcm9zc0xpbmVQdHMgPSB0cmFuc2Zvcm1Qb2ludHModGhpcy5jcm9zc0xpbmVQdHMoc2l6ZSwgZWRnZVdpZHRoKSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJpUHRzLCBjcm9zc0xpbmVQdHMpO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3ZlZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuMywgMCwgLTAuMTVdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZEdhcChlZGdlKSAqIDAuNTI1O1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2NpcmNsZScsIHtcbiAgICByYWRpdXM6IDAuMTUsXG4gICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCwgcGFkZGluZykge1xuICAgICAgdmFyIHQgPSB0cmFuc2xhdGlvbjtcbiAgICAgIHZhciBpbnNpZGUgPSBNYXRoLnBvdyh0LnggLSB4LCAyKSArIE1hdGgucG93KHQueSAtIHksIDIpIDw9IE1hdGgucG93KChzaXplICsgMiAqIHBhZGRpbmcpICogdGhpcy5yYWRpdXMsIDIpO1xuICAgICAgcmV0dXJuIGluc2lkZTtcbiAgICB9LFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpIHtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJhbnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSwgdGhpcy5yYWRpdXMgKiBzaXplKTtcbiAgICB9LFxuICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEFycm93V2lkdGgoZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSwgZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWUpICogdGhpcy5yYWRpdXM7XG4gICAgfVxuICB9KTtcbiAgZGVmaW5lQXJyb3dTaGFwZSgndGVlJywge1xuICAgIHBvaW50czogWy0wLjE1LCAwLCAtMC4xNSwgLTAuMSwgMC4xNSwgLTAuMSwgMC4xNSwgMF0sXG4gICAgc3BhY2luZzogZnVuY3Rpb24gc3BhY2luZyhlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3NxdWFyZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgMC4wMCwgMC4xNSwgMC4wMCwgMC4xNSwgLTAuMywgLTAuMTUsIC0wLjNdXG4gIH0pO1xuICBkZWZpbmVBcnJvd1NoYXBlKCdkaWFtb25kJywge1xuICAgIHBvaW50czogWy0wLjE1LCAtMC4xNSwgMCwgLTAuMywgMC4xNSwgLTAuMTUsIDAsIDBdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlICogZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgfVxuICB9KTtcbiAgZGVmaW5lQXJyb3dTaGFwZSgnY2hldnJvbicsIHtcbiAgICBwb2ludHM6IFswLCAwLCAtMC4xNSwgLTAuMTUsIC0wLjEsIC0wLjIsIDAsIC0wLjEsIDAuMSwgLTAuMiwgMC4xNSwgLTAuMTVdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiAwLjk1ICogZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgQlJwJGUgPSB7fTtcblxuLy8gUHJvamVjdCBtb3VzZVxuQlJwJGUucHJvamVjdEludG9WaWV3cG9ydCA9IGZ1bmN0aW9uIChjbGllbnRYLCBjbGllbnRZKSB7XG4gIHZhciBjeSA9IHRoaXMuY3k7XG4gIHZhciBvZmZzZXRzID0gdGhpcy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gIHZhciBvZmZzZXRMZWZ0ID0gb2Zmc2V0c1swXTtcbiAgdmFyIG9mZnNldFRvcCA9IG9mZnNldHNbMV07XG4gIHZhciBzY2FsZSA9IG9mZnNldHNbNF07XG4gIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciB4ID0gKChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgLyBzY2FsZSAtIHBhbi54KSAvIHpvb207XG4gIHZhciB5ID0gKChjbGllbnRZIC0gb2Zmc2V0VG9wKSAvIHNjYWxlIC0gcGFuLnkpIC8gem9vbTtcbiAgcmV0dXJuIFt4LCB5XTtcbn07XG5CUnAkZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jb250YWluZXJCQikge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckJCO1xuICB9XG4gIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjtcbiAgdmFyIHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzdHlsZSA9IHRoaXMuY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICB2YXIgc3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHN0eWxlVmFsdWUobmFtZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICB9O1xuICB2YXIgcGFkZGluZyA9IHtcbiAgICBsZWZ0OiBzdHlsZVZhbHVlKCdwYWRkaW5nLWxlZnQnKSxcbiAgICByaWdodDogc3R5bGVWYWx1ZSgncGFkZGluZy1yaWdodCcpLFxuICAgIHRvcDogc3R5bGVWYWx1ZSgncGFkZGluZy10b3AnKSxcbiAgICBib3R0b206IHN0eWxlVmFsdWUoJ3BhZGRpbmctYm90dG9tJylcbiAgfTtcbiAgdmFyIGJvcmRlciA9IHtcbiAgICBsZWZ0OiBzdHlsZVZhbHVlKCdib3JkZXItbGVmdC13aWR0aCcpLFxuICAgIHJpZ2h0OiBzdHlsZVZhbHVlKCdib3JkZXItcmlnaHQtd2lkdGgnKSxcbiAgICB0b3A6IHN0eWxlVmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSxcbiAgICBib3R0b206IHN0eWxlVmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKVxuICB9O1xuICB2YXIgY2xpZW50V2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gIHZhciBjbGllbnRIZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICB2YXIgcGFkZGluZ0hvciA9IHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7XG4gIHZhciBwYWRkaW5nVmVyID0gcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcbiAgdmFyIGJvcmRlckhvciA9IGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0O1xuICB2YXIgc2NhbGUgPSByZWN0LndpZHRoIC8gKGNsaWVudFdpZHRoICsgYm9yZGVySG9yKTtcbiAgdmFyIHVuc2NhbGVkVyA9IGNsaWVudFdpZHRoIC0gcGFkZGluZ0hvcjtcbiAgdmFyIHVuc2NhbGVkSCA9IGNsaWVudEhlaWdodCAtIHBhZGRpbmdWZXI7XG4gIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgcGFkZGluZy5sZWZ0ICsgYm9yZGVyLmxlZnQ7XG4gIHZhciB0b3AgPSByZWN0LnRvcCArIHBhZGRpbmcudG9wICsgYm9yZGVyLnRvcDtcbiAgcmV0dXJuIHRoaXMuY29udGFpbmVyQkIgPSBbbGVmdCwgdG9wLCB1bnNjYWxlZFcsIHVuc2NhbGVkSCwgc2NhbGVdO1xufTtcbkJScCRlLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jb250YWluZXJCQiA9IG51bGw7XG59O1xuQlJwJGUuZmluZE5lYXJlc3RFbGVtZW50ID0gZnVuY3Rpb24gKHgsIHksIGludGVyYWN0aXZlRWxlbWVudHNPbmx5LCBpc1RvdWNoKSB7XG4gIHJldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpWzBdO1xufTtcbkJScCRlLmZpbmROZWFyZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICB2YXIgbmVhciA9IFtdOyAvLyAxIG5vZGUgbWF4LCAxIGVkZ2UgbWF4XG4gIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gIHZhciBoYXNDb21wb3VuZHMgPSByLmN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIGVkZ2VUaHJlc2hvbGQgPSAoaXNUb3VjaCA/IDI0IDogOCkgLyB6b29tO1xuICB2YXIgbm9kZVRocmVzaG9sZCA9IChpc1RvdWNoID8gOCA6IDIpIC8gem9vbTtcbiAgdmFyIGxhYmVsVGhyZXNob2xkID0gKGlzVG91Y2ggPyA4IDogMikgLyB6b29tO1xuICB2YXIgbWluU3FEaXN0ID0gSW5maW5pdHk7XG4gIHZhciBuZWFyRWRnZTtcbiAgdmFyIG5lYXJOb2RlO1xuICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50c09ubHkpIHtcbiAgICBlbGVzID0gZWxlcy5pbnRlcmFjdGl2ZTtcbiAgfVxuICBmdW5jdGlvbiBhZGRFbGUoZWxlLCBzcURpc3QpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBpZiAobmVhck5vZGUpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBjYW4ndCByZXBsYWNlIG5vZGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5lYXJOb2RlID0gZWxlO1xuICAgICAgICBuZWFyLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSAmJiAoc3FEaXN0ID09IG51bGwgfHwgc3FEaXN0IDwgbWluU3FEaXN0KSkge1xuICAgICAgaWYgKG5lYXJFZGdlKSB7XG4gICAgICAgIC8vIHRoZW4gcmVwbGFjZSBleGlzdGluZyBlZGdlXG4gICAgICAgIC8vIGNhbiByZXBsYWNlIG9ubHkgaWYgc2FtZSB6LWluZGV4XG4gICAgICAgIGlmIChuZWFyRWRnZS5wc3R5bGUoJ3otY29tcG91bmQtZGVwdGgnKS52YWx1ZSA9PT0gZWxlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlICYmIG5lYXJFZGdlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlID09PSBlbGUucHN0eWxlKCd6LWNvbXBvdW5kLWRlcHRoJykudmFsdWUpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lYXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChuZWFyW2ldLmlzRWRnZSgpKSB7XG4gICAgICAgICAgICAgIG5lYXJbaV0gPSBlbGU7XG4gICAgICAgICAgICAgIG5lYXJFZGdlID0gZWxlO1xuICAgICAgICAgICAgICBtaW5TcURpc3QgPSBzcURpc3QgIT0gbnVsbCA/IHNxRGlzdCA6IG1pblNxRGlzdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZWFyLnB1c2goZWxlKTtcbiAgICAgICAgbmVhckVkZ2UgPSBlbGU7XG4gICAgICAgIG1pblNxRGlzdCA9IHNxRGlzdCAhPSBudWxsID8gc3FEaXN0IDogbWluU3FEaXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjaGVja05vZGUobm9kZSkge1xuICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpICsgMiAqIG5vZGVUaHJlc2hvbGQ7XG4gICAgdmFyIGhlaWdodCA9IG5vZGUub3V0ZXJIZWlnaHQoKSArIDIgKiBub2RlVGhyZXNob2xkO1xuICAgIHZhciBodyA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgIHZhciBwb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gICAgdmFyIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWUgPT09ICdhdXRvJyA/ICdhdXRvJyA6IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgICB2YXIgcnMgPSBub2RlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIGlmIChwb3MueCAtIGh3IDw9IHggJiYgeCA8PSBwb3MueCArIGh3IC8vIGJiIGNoZWNrIHhcbiAgICAmJiBwb3MueSAtIGhoIDw9IHkgJiYgeSA8PSBwb3MueSArIGhoIC8vIGJiIGNoZWNrIHlcbiAgICApIHtcbiAgICAgIHZhciBzaGFwZSA9IHIubm9kZVNoYXBlc1tzZWxmLmdldE5vZGVTaGFwZShub2RlKV07XG4gICAgICBpZiAoc2hhcGUuY2hlY2tQb2ludCh4LCB5LCAwLCB3aWR0aCwgaGVpZ2h0LCBwb3MueCwgcG9zLnksIGNvcm5lclJhZGl1cywgcnMpKSB7XG4gICAgICAgIGFkZEVsZShub2RlLCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNoZWNrRWRnZShlZGdlKSB7XG4gICAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgc3R5bGVXaWR0aCA9IGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIHNjYWxlID0gZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgdmFyIHdpZHRoID0gc3R5bGVXaWR0aCAvIDIgKyBlZGdlVGhyZXNob2xkOyAvLyBtb3JlIGxpa2UgYSBkaXN0YW5jZSByYWRpdXMgZnJvbSBjZW50cmVcbiAgICB2YXIgd2lkdGhTcSA9IHdpZHRoICogd2lkdGg7XG4gICAgdmFyIHdpZHRoMiA9IHdpZHRoICogMjtcbiAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgdmFyIHNxRGlzdDtcbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcgfHwgcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSArIDMgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgaWYgKGluTGluZVZpY2luaXR5KHgsIHksIHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSwgd2lkdGgyKSAmJiB3aWR0aFNxID4gKHNxRGlzdCA9IHNxZGlzdFRvRmluaXRlTGluZSh4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10pKSkge1xuICAgICAgICAgIGFkZEVsZShlZGdlLCBzcURpc3QpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpICsgNSA8IHJzLmFsbHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBpZiAoaW5CZXppZXJWaWNpbml0eSh4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10sIHB0c1tpICsgNF0sIHB0c1tpICsgNV0sIHdpZHRoMikgJiYgd2lkdGhTcSA+IChzcURpc3QgPSBzcWRpc3RUb1F1YWRyYXRpY0Jlemllcih4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10sIHB0c1tpICsgNF0sIHB0c1tpICsgNV0pKSkge1xuICAgICAgICAgIGFkZEVsZShlZGdlLCBzcURpc3QpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgY2xvc2UgdG8gdGhlIGVkZ2UgYnV0IGRpZG4ndCBoaXQgaXQsIG1heWJlIHdlIGhpdCBpdHMgYXJyb3dzXG5cbiAgICB2YXIgc3JjID0gc3JjIHx8IF9wLnNvdXJjZTtcbiAgICB2YXIgdGd0ID0gdGd0IHx8IF9wLnRhcmdldDtcbiAgICB2YXIgYXJTaXplID0gc2VsZi5nZXRBcnJvd1dpZHRoKHN0eWxlV2lkdGgsIHNjYWxlKTtcbiAgICB2YXIgYXJyb3dzID0gW3tcbiAgICAgIG5hbWU6ICdzb3VyY2UnLFxuICAgICAgeDogcnMuYXJyb3dTdGFydFgsXG4gICAgICB5OiBycy5hcnJvd1N0YXJ0WSxcbiAgICAgIGFuZ2xlOiBycy5zcmNBcnJvd0FuZ2xlXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RhcmdldCcsXG4gICAgICB4OiBycy5hcnJvd0VuZFgsXG4gICAgICB5OiBycy5hcnJvd0VuZFksXG4gICAgICBhbmdsZTogcnMudGd0QXJyb3dBbmdsZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaWQtc291cmNlJyxcbiAgICAgIHg6IHJzLm1pZFgsXG4gICAgICB5OiBycy5taWRZLFxuICAgICAgYW5nbGU6IHJzLm1pZHNyY0Fycm93QW5nbGVcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbWlkLXRhcmdldCcsXG4gICAgICB4OiBycy5taWRYLFxuICAgICAgeTogcnMubWlkWSxcbiAgICAgIGFuZ2xlOiBycy5taWR0Z3RBcnJvd0FuZ2xlXG4gICAgfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBhciA9IGFycm93c1tpXTtcbiAgICAgIHZhciBzaGFwZSA9IHIuYXJyb3dTaGFwZXNbZWRnZS5wc3R5bGUoYXIubmFtZSArICctYXJyb3ctc2hhcGUnKS52YWx1ZV07XG4gICAgICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICAgIGlmIChzaGFwZS5yb3VnaENvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICB4OiBhci54LFxuICAgICAgICB5OiBhci55XG4gICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpICYmIHNoYXBlLmNvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICB4OiBhci54LFxuICAgICAgICB5OiBhci55XG4gICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpKSB7XG4gICAgICAgIGFkZEVsZShlZGdlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9yIGNvbXBvdW5kIGdyYXBocywgaGl0dGluZyBlZGdlIG1heSBhY3R1YWxseSB3YW50IGEgY29ubmVjdGVkIG5vZGUgaW5zdGVhZCAoYi9jIGVkZ2UgbWF5IGhhdmUgZ3JlYXRlciB6LWluZGV4IHByZWNlZGVuY2UpXG4gICAgaWYgKGhhc0NvbXBvdW5kcyAmJiBuZWFyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrTm9kZShzcmMpO1xuICAgICAgY2hlY2tOb2RlKHRndCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByZXByb3Aob2JqLCBuYW1lLCBwcmUpIHtcbiAgICByZXR1cm4gZ2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIG5hbWUsIHByZSk7XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tMYWJlbChlbGUsIHByZWZpeCkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgdGggPSBsYWJlbFRocmVzaG9sZDtcbiAgICB2YXIgcHJlZml4RGFzaDtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhEYXNoID0gJyc7XG4gICAgfVxuICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgIHZhciBiYiA9IF9wLmxhYmVsQm91bmRzW3ByZWZpeCB8fCAnbWFpbiddO1xuICAgIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ2xhYmVsJykudmFsdWU7XG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSBlbGUucHN0eWxlKCd0ZXh0LWV2ZW50cycpLnN0clZhbHVlID09PSAneWVzJztcbiAgICBpZiAoIWV2ZW50c0VuYWJsZWQgfHwgIXRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGx4ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWCcsIHByZWZpeCk7XG4gICAgdmFyIGx5ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWScsIHByZWZpeCk7XG4gICAgdmFyIHRoZXRhID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsQW5nbGUnLCBwcmVmaXgpO1xuICAgIHZhciBveCA9IGVsZS5wc3R5bGUocHJlZml4RGFzaCArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZTtcbiAgICB2YXIgb3kgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGx4MSA9IGJiLngxIC0gdGggLSBveDsgLy8gKC1veCwgLW95KSBhcyBiYiBhbHJlYWR5IGluY2x1ZGVzIG1hcmdpblxuICAgIHZhciBseDIgPSBiYi54MiArIHRoIC0gb3g7IC8vIGFuZCByb3RhdGlvbiBpcyBhYm91dCAobHgsIGx5KVxuICAgIHZhciBseTEgPSBiYi55MSAtIHRoIC0gb3k7XG4gICAgdmFyIGx5MiA9IGJiLnkyICsgdGggLSBveTtcbiAgICBpZiAodGhldGEpIHtcbiAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICB2YXIgc2luID0gTWF0aC5zaW4odGhldGEpO1xuICAgICAgdmFyIHJvdGF0ZSA9IGZ1bmN0aW9uIHJvdGF0ZSh4LCB5KSB7XG4gICAgICAgIHggPSB4IC0gbHg7XG4gICAgICAgIHkgPSB5IC0gbHk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeCAqIGNvcyAtIHkgKiBzaW4gKyBseCxcbiAgICAgICAgICB5OiB4ICogc2luICsgeSAqIGNvcyArIGx5XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgdmFyIHB4MXkxID0gcm90YXRlKGx4MSwgbHkxKTtcbiAgICAgIHZhciBweDF5MiA9IHJvdGF0ZShseDEsIGx5Mik7XG4gICAgICB2YXIgcHgyeTEgPSByb3RhdGUobHgyLCBseTEpO1xuICAgICAgdmFyIHB4MnkyID0gcm90YXRlKGx4MiwgbHkyKTtcbiAgICAgIHZhciBwb2ludHMgPSBbXG4gICAgICAvLyB3aXRoIHRoZSBtYXJnaW4gYWRkZWQgYWZ0ZXIgdGhlIHJvdGF0aW9uIGlzIGFwcGxpZWRcbiAgICAgIHB4MXkxLnggKyBveCwgcHgxeTEueSArIG95LCBweDJ5MS54ICsgb3gsIHB4MnkxLnkgKyBveSwgcHgyeTIueCArIG94LCBweDJ5Mi55ICsgb3ksIHB4MXkyLnggKyBveCwgcHgxeTIueSArIG95XTtcbiAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKSkge1xuICAgICAgICBhZGRFbGUoZWxlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIGEgY2hlYXBlciBiYiBjaGVja1xuICAgICAgaWYgKGluQm91bmRpbmdCb3goYmIsIHgsIHkpKSB7XG4gICAgICAgIGFkZEVsZShlbGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgaSA9IGVsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyByZXZlcnNlIG9yZGVyIGZvciBwcmVjZWRlbmNlXG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgY2hlY2tOb2RlKGVsZSkgfHwgY2hlY2tMYWJlbChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGVkZ2VcbiAgICAgIGNoZWNrRWRnZShlbGUpIHx8IGNoZWNrTGFiZWwoZWxlKSB8fCBjaGVja0xhYmVsKGVsZSwgJ3NvdXJjZScpIHx8IGNoZWNrTGFiZWwoZWxlLCAndGFyZ2V0Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWFyO1xufTtcblxuLy8gJ0dpdmUgbWUgZXZlcnl0aGluZyBmcm9tIHRoaXMgYm94J1xuQlJwJGUuZ2V0QWxsSW5Cb3ggPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIGVsZXMgPSB0aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmU7XG4gIHZhciBib3ggPSBbXTtcbiAgdmFyIHgxYyA9IE1hdGgubWluKHgxLCB4Mik7XG4gIHZhciB4MmMgPSBNYXRoLm1heCh4MSwgeDIpO1xuICB2YXIgeTFjID0gTWF0aC5taW4oeTEsIHkyKTtcbiAgdmFyIHkyYyA9IE1hdGgubWF4KHkxLCB5Mik7XG4gIHgxID0geDFjO1xuICB4MiA9IHgyYztcbiAgeTEgPSB5MWM7XG4gIHkyID0geTJjO1xuICB2YXIgYm94QmIgPSBtYWtlQm91bmRpbmdCb3goe1xuICAgIHgxOiB4MSxcbiAgICB5MTogeTEsXG4gICAgeDI6IHgyLFxuICAgIHkyOiB5MlxuICB9KTtcbiAgZm9yICh2YXIgZSA9IDA7IGUgPCBlbGVzLmxlbmd0aDsgZSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbZV07XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgdmFyIG5vZGUgPSBlbGU7XG4gICAgICB2YXIgbm9kZUJiID0gbm9kZS5ib3VuZGluZ0JveCh7XG4gICAgICAgIGluY2x1ZGVOb2RlczogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZUVkZ2VzOiBmYWxzZSxcbiAgICAgICAgaW5jbHVkZUxhYmVsczogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgaWYgKGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYm94QmIsIG5vZGVCYikgJiYgIWJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChub2RlQmIsIGJveEJiKSkge1xuICAgICAgICBib3gucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVkZ2UgPSBlbGU7XG4gICAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgICBpZiAocnMuc3RhcnRYICE9IG51bGwgJiYgcnMuc3RhcnRZICE9IG51bGwgJiYgIWluQm91bmRpbmdCb3goYm94QmIsIHJzLnN0YXJ0WCwgcnMuc3RhcnRZKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChycy5lbmRYICE9IG51bGwgJiYgcnMuZW5kWSAhPSBudWxsICYmICFpbkJvdW5kaW5nQm94KGJveEJiLCBycy5lbmRYLCBycy5lbmRZKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJyB8fCBycy5lZGdlVHlwZSA9PT0gJ3NlZ21lbnRzJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJykge1xuICAgICAgICB2YXIgcHRzID0gX3AucnN0eWxlLmJlemllclB0cyB8fCBfcC5yc3R5bGUubGluZVB0cyB8fCBfcC5yc3R5bGUuaGF5c3RhY2tQdHM7XG4gICAgICAgIHZhciBhbGxJbnNpZGUgPSB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghcG9pbnRJbkJvdW5kaW5nQm94KGJveEJiLCBwdHNbaV0pKSB7XG4gICAgICAgICAgICBhbGxJbnNpZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsSW5zaWRlKSB7XG4gICAgICAgICAgYm94LnB1c2goZWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcpIHtcbiAgICAgICAgYm94LnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBib3g7XG59O1xuXG52YXIgQlJwJGQgPSB7fTtcbkJScCRkLmNhbGN1bGF0ZUFycm93QW5nbGVzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGlzSGF5c3RhY2sgPSBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJztcbiAgdmFyIGlzQmV6aWVyID0gcnMuZWRnZVR5cGUgPT09ICdiZXppZXInO1xuICB2YXIgaXNNdWx0aWJlemllciA9IHJzLmVkZ2VUeXBlID09PSAnbXVsdGliZXppZXInO1xuICB2YXIgaXNTZWdtZW50cyA9IHJzLmVkZ2VUeXBlID09PSAnc2VnbWVudHMnO1xuICB2YXIgaXNDb21wb3VuZCA9IHJzLmVkZ2VUeXBlID09PSAnY29tcG91bmQnO1xuICB2YXIgaXNTZWxmID0gcnMuZWRnZVR5cGUgPT09ICdzZWxmJztcblxuICAvLyBEaXNwbGFjZW1lbnQgZ2l2ZXMgZGlyZWN0aW9uIGZvciBhcnJvd2hlYWQgb3JpZW50YXRpb25cbiAgdmFyIGRpc3BYLCBkaXNwWTtcbiAgdmFyIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBtaWRYLCBtaWRZO1xuICBpZiAoaXNIYXlzdGFjaykge1xuICAgIHN0YXJ0WCA9IHJzLmhheXN0YWNrUHRzWzBdO1xuICAgIHN0YXJ0WSA9IHJzLmhheXN0YWNrUHRzWzFdO1xuICAgIGVuZFggPSBycy5oYXlzdGFja1B0c1syXTtcbiAgICBlbmRZID0gcnMuaGF5c3RhY2tQdHNbM107XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRYID0gcnMuYXJyb3dTdGFydFg7XG4gICAgc3RhcnRZID0gcnMuYXJyb3dTdGFydFk7XG4gICAgZW5kWCA9IHJzLmFycm93RW5kWDtcbiAgICBlbmRZID0gcnMuYXJyb3dFbmRZO1xuICB9XG4gIG1pZFggPSBycy5taWRYO1xuICBtaWRZID0gcnMubWlkWTtcblxuICAvLyBzb3VyY2VcbiAgLy9cblxuICBpZiAoaXNTZWdtZW50cykge1xuICAgIGRpc3BYID0gc3RhcnRYIC0gcnMuc2VncHRzWzBdO1xuICAgIGRpc3BZID0gc3RhcnRZIC0gcnMuc2VncHRzWzFdO1xuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBiWCA9IHFiZXppZXJBdChwdHNbMF0sIHB0c1syXSwgcHRzWzRdLCAwLjEpO1xuICAgIHZhciBiWSA9IHFiZXppZXJBdChwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCAwLjEpO1xuICAgIGRpc3BYID0gc3RhcnRYIC0gYlg7XG4gICAgZGlzcFkgPSBzdGFydFkgLSBiWTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwWCA9IHN0YXJ0WCAtIG1pZFg7XG4gICAgZGlzcFkgPSBzdGFydFkgLSBtaWRZO1xuICB9XG4gIHJzLnNyY0Fycm93QW5nbGUgPSBnZXRBbmdsZUZyb21EaXNwKGRpc3BYLCBkaXNwWSk7XG5cbiAgLy8gbWlkIHRhcmdldFxuICAvL1xuXG4gIHZhciBtaWRYID0gcnMubWlkWDtcbiAgdmFyIG1pZFkgPSBycy5taWRZO1xuICBpZiAoaXNIYXlzdGFjaykge1xuICAgIG1pZFggPSAoc3RhcnRYICsgZW5kWCkgLyAyO1xuICAgIG1pZFkgPSAoc3RhcnRZICsgZW5kWSkgLyAyO1xuICB9XG4gIGRpc3BYID0gZW5kWCAtIHN0YXJ0WDtcbiAgZGlzcFkgPSBlbmRZIC0gc3RhcnRZO1xuICBpZiAoaXNTZWdtZW50cykge1xuICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgaWYgKHB0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgdmFyIGkyID0gcHRzLmxlbmd0aCAvIDI7XG4gICAgICB2YXIgaTEgPSBpMiAtIDI7XG4gICAgICBkaXNwWCA9IHB0c1tpMl0gLSBwdHNbaTFdO1xuICAgICAgZGlzcFkgPSBwdHNbaTIgKyAxXSAtIHB0c1tpMSArIDFdO1xuICAgIH0gZWxzZSBpZiAocnMuaXNSb3VuZCkge1xuICAgICAgZGlzcFggPSBycy5taWRWZWN0b3JbMV07XG4gICAgICBkaXNwWSA9IC1ycy5taWRWZWN0b3JbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpMiA9IHB0cy5sZW5ndGggLyAyIC0gMTtcbiAgICAgIHZhciBpMSA9IGkyIC0gMjtcbiAgICAgIGRpc3BYID0gcHRzW2kyXSAtIHB0c1tpMV07XG4gICAgICBkaXNwWSA9IHB0c1tpMiArIDFdIC0gcHRzW2kxICsgMV07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBjcHRzID0gcnMuY3RybHB0cztcbiAgICB2YXIgYnAweCwgYnAweTtcbiAgICB2YXIgYnAxeCwgYnAxeTtcbiAgICBpZiAoY3B0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgdmFyIHAwID0gcHRzLmxlbmd0aCAvIDIgLSAxOyAvLyBzdGFydHB0XG4gICAgICB2YXIgaWMgPSBwMCArIDI7XG4gICAgICB2YXIgcDEgPSBpYyArIDI7XG4gICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMCk7XG4gICAgICBicDB5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMCk7XG4gICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMDAwMSk7XG4gICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMDAwMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpYyA9IHB0cy5sZW5ndGggLyAyIC0gMTsgLy8gY3RycHRcbiAgICAgIHZhciBwMCA9IGljIC0gMjsgLy8gc3RhcnRwdFxuICAgICAgdmFyIHAxID0gaWMgKyAyOyAvLyBlbmRwdFxuXG4gICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNDk5OSk7XG4gICAgICBicDB5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuNDk5OSk7XG4gICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNSk7XG4gICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuNSk7XG4gICAgfVxuICAgIGRpc3BYID0gYnAxeCAtIGJwMHg7XG4gICAgZGlzcFkgPSBicDF5IC0gYnAweTtcbiAgfVxuICBycy5taWR0Z3RBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuICBycy5taWREaXNwWCA9IGRpc3BYO1xuICBycy5taWREaXNwWSA9IGRpc3BZO1xuXG4gIC8vIG1pZCBzb3VyY2VcbiAgLy9cblxuICBkaXNwWCAqPSAtMTtcbiAgZGlzcFkgKj0gLTE7XG4gIGlmIChpc1NlZ21lbnRzKSB7XG4gICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICBpZiAocHRzLmxlbmd0aCAvIDIgJSAyID09PSAwKSA7IGVsc2UgaWYgKCFycy5pc1JvdW5kKSB7XG4gICAgICB2YXIgaTIgPSBwdHMubGVuZ3RoIC8gMiAtIDE7XG4gICAgICB2YXIgaTMgPSBpMiArIDI7XG4gICAgICBkaXNwWCA9IC0ocHRzW2kzXSAtIHB0c1tpMl0pO1xuICAgICAgZGlzcFkgPSAtKHB0c1tpMyArIDFdIC0gcHRzW2kyICsgMV0pO1xuICAgIH1cbiAgfVxuICBycy5taWRzcmNBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuXG4gIC8vIHRhcmdldFxuICAvL1xuXG4gIGlmIChpc1NlZ21lbnRzKSB7XG4gICAgZGlzcFggPSBlbmRYIC0gcnMuc2VncHRzW3JzLnNlZ3B0cy5sZW5ndGggLSAyXTtcbiAgICBkaXNwWSA9IGVuZFkgLSBycy5zZWdwdHNbcnMuc2VncHRzLmxlbmd0aCAtIDFdO1xuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBsID0gcHRzLmxlbmd0aDtcbiAgICB2YXIgYlggPSBxYmV6aWVyQXQocHRzW2wgLSA2XSwgcHRzW2wgLSA0XSwgcHRzW2wgLSAyXSwgMC45KTtcbiAgICB2YXIgYlkgPSBxYmV6aWVyQXQocHRzW2wgLSA1XSwgcHRzW2wgLSAzXSwgcHRzW2wgLSAxXSwgMC45KTtcbiAgICBkaXNwWCA9IGVuZFggLSBiWDtcbiAgICBkaXNwWSA9IGVuZFkgLSBiWTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwWCA9IGVuZFggLSBtaWRYO1xuICAgIGRpc3BZID0gZW5kWSAtIG1pZFk7XG4gIH1cbiAgcnMudGd0QXJyb3dBbmdsZSA9IGdldEFuZ2xlRnJvbURpc3AoZGlzcFgsIGRpc3BZKTtcbn07XG5CUnAkZC5nZXRBcnJvd1dpZHRoID0gQlJwJGQuZ2V0QXJyb3dIZWlnaHQgPSBmdW5jdGlvbiAoZWRnZVdpZHRoLCBzY2FsZSkge1xuICB2YXIgY2FjaGUgPSB0aGlzLmFycm93V2lkdGhDYWNoZSA9IHRoaXMuYXJyb3dXaWR0aENhY2hlIHx8IHt9O1xuICB2YXIgY2FjaGVkVmFsID0gY2FjaGVbZWRnZVdpZHRoICsgJywgJyArIHNjYWxlXTtcbiAgaWYgKGNhY2hlZFZhbCkge1xuICAgIHJldHVybiBjYWNoZWRWYWw7XG4gIH1cbiAgY2FjaGVkVmFsID0gTWF0aC5tYXgoTWF0aC5wb3coZWRnZVdpZHRoICogMTMuMzcsIDAuOSksIDI5KSAqIHNjYWxlO1xuICBjYWNoZVtlZGdlV2lkdGggKyAnLCAnICsgc2NhbGVdID0gY2FjaGVkVmFsO1xuICByZXR1cm4gY2FjaGVkVmFsO1xufTtcblxuLyoqXG4gKiBFeHBsYWluZWQgYnkgQmxpbmRtYW42NyBhdCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQ4NTY5MjUvMTEwMjg4MjhcbiAqL1xuXG4vLyBEZWNsYXJlIHJldXNlZCB2YXJpYWJsZSB0byBhdm9pZCByZWFsbG9jYXRpbmcgdmFyaWFibGVzIGV2ZXJ5IHRpbWUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxudmFyIHgsXG4gIHksXG4gIHYxID0ge30sXG4gIHYyID0ge30sXG4gIHNpbkEsXG4gIHNpbkE5MCxcbiAgcmFkRGlyZWN0aW9uLFxuICBkcmF3RGlyZWN0aW9uLFxuICBhbmdsZSxcbiAgaGFsZkFuZ2xlLFxuICBjUmFkaXVzLFxuICBsZW5PdXQsXG4gIHJhZGl1cyxcbiAgbGltaXQ7XG52YXIgc3RhcnRYLCBzdGFydFksIHN0b3BYLCBzdG9wWTtcbnZhciBsYXN0UG9pbnQ7XG5cbi8vIGNvbnZlcnQgMiBwb2ludHMgaW50byB2ZWN0b3IgZm9ybSwgcG9sYXIgZm9ybSwgYW5kIG5vcm1hbGlzZWRcbnZhciBhc1ZlYyA9IGZ1bmN0aW9uIGFzVmVjKHAsIHBwLCB2KSB7XG4gIHYueCA9IHBwLnggLSBwLng7XG4gIHYueSA9IHBwLnkgLSBwLnk7XG4gIHYubGVuID0gTWF0aC5zcXJ0KHYueCAqIHYueCArIHYueSAqIHYueSk7XG4gIHYubnggPSB2LnggLyB2LmxlbjtcbiAgdi5ueSA9IHYueSAvIHYubGVuO1xuICB2LmFuZyA9IE1hdGguYXRhbjIodi5ueSwgdi5ueCk7XG59O1xudmFyIGludmVydFZlYyA9IGZ1bmN0aW9uIGludmVydFZlYyhvcmlnaW5hbFYsIGludmVydGVkVikge1xuICBpbnZlcnRlZFYueCA9IG9yaWdpbmFsVi54ICogLTE7XG4gIGludmVydGVkVi55ID0gb3JpZ2luYWxWLnkgKiAtMTtcbiAgaW52ZXJ0ZWRWLm54ID0gb3JpZ2luYWxWLm54ICogLTE7XG4gIGludmVydGVkVi5ueSA9IG9yaWdpbmFsVi5ueSAqIC0xO1xuICBpbnZlcnRlZFYuYW5nID0gb3JpZ2luYWxWLmFuZyA+IDAgPyAtKE1hdGguUEkgLSBvcmlnaW5hbFYuYW5nKSA6IE1hdGguUEkgKyBvcmlnaW5hbFYuYW5nO1xufTtcbnZhciBjYWxjQ29ybmVyQXJjID0gZnVuY3Rpb24gY2FsY0Nvcm5lckFyYyhwcmV2aW91c1BvaW50LCBjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgcmFkaXVzTWF4LCBpc0FyY1JhZGl1cykge1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBhcnQgMVxuICBwcmV2aW91c1BvaW50ICE9PSBsYXN0UG9pbnQgPyBhc1ZlYyhjdXJyZW50UG9pbnQsIHByZXZpb3VzUG9pbnQsIHYxKSA6IGludmVydFZlYyh2MiwgdjEpOyAvLyBBdm9pZCByZWNhbGN1bGF0aW5nIHZlYyBpZiBpdCBpcyB0aGUgaW52ZXJ0IG9mIHRoZSBsYXN0IG9uZSBjYWxjdWxhdGVkXG4gIGFzVmVjKGN1cnJlbnRQb2ludCwgbmV4dFBvaW50LCB2Mik7XG4gIHNpbkEgPSB2MS5ueCAqIHYyLm55IC0gdjEubnkgKiB2Mi5ueDtcbiAgc2luQTkwID0gdjEubnggKiB2Mi5ueCAtIHYxLm55ICogLXYyLm55O1xuICBhbmdsZSA9IE1hdGguYXNpbihNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgc2luQSkpKTtcbiAgaWYgKE1hdGguYWJzKGFuZ2xlKSA8IDFlLTYpIHtcbiAgICB4ID0gY3VycmVudFBvaW50Lng7XG4gICAgeSA9IGN1cnJlbnRQb2ludC55O1xuICAgIGNSYWRpdXMgPSByYWRpdXMgPSAwO1xuICAgIHJldHVybjtcbiAgfVxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHJhZERpcmVjdGlvbiA9IDE7XG4gIGRyYXdEaXJlY3Rpb24gPSBmYWxzZTtcbiAgaWYgKHNpbkE5MCA8IDApIHtcbiAgICBpZiAoYW5nbGUgPCAwKSB7XG4gICAgICBhbmdsZSA9IE1hdGguUEkgKyBhbmdsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5nbGUgPSBNYXRoLlBJIC0gYW5nbGU7XG4gICAgICByYWREaXJlY3Rpb24gPSAtMTtcbiAgICAgIGRyYXdEaXJlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYW5nbGUgPiAwKSB7XG4gICAgICByYWREaXJlY3Rpb24gPSAtMTtcbiAgICAgIGRyYXdEaXJlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoY3VycmVudFBvaW50LnJhZGl1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmFkaXVzID0gY3VycmVudFBvaW50LnJhZGl1cztcbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSByYWRpdXNNYXg7XG4gIH1cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQYXJ0IDJcbiAgaGFsZkFuZ2xlID0gYW5nbGUgLyAyO1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbGltaXQgPSBNYXRoLm1pbih2MS5sZW4gLyAyLCB2Mi5sZW4gLyAyKTtcbiAgaWYgKGlzQXJjUmFkaXVzKSB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFBhcnQgM1xuICAgIGxlbk91dCA9IE1hdGguYWJzKE1hdGguY29zKGhhbGZBbmdsZSkgKiByYWRpdXMgLyBNYXRoLnNpbihoYWxmQW5nbGUpKTtcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTcGVjaWFsIHBhcnQgQVxuICAgIGlmIChsZW5PdXQgPiBsaW1pdCkge1xuICAgICAgbGVuT3V0ID0gbGltaXQ7XG4gICAgICBjUmFkaXVzID0gTWF0aC5hYnMobGVuT3V0ICogTWF0aC5zaW4oaGFsZkFuZ2xlKSAvIE1hdGguY29zKGhhbGZBbmdsZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjUmFkaXVzID0gcmFkaXVzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5PdXQgPSBNYXRoLm1pbihsaW1pdCwgcmFkaXVzKTtcbiAgICBjUmFkaXVzID0gTWF0aC5hYnMobGVuT3V0ICogTWF0aC5zaW4oaGFsZkFuZ2xlKSAvIE1hdGguY29zKGhhbGZBbmdsZSkpO1xuICB9XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBhcnQgNFxuICBzdG9wWCA9IGN1cnJlbnRQb2ludC54ICsgdjIubnggKiBsZW5PdXQ7XG4gIHN0b3BZID0gY3VycmVudFBvaW50LnkgKyB2Mi5ueSAqIGxlbk91dDtcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQYXJ0IDVcbiAgeCA9IHN0b3BYIC0gdjIubnkgKiBjUmFkaXVzICogcmFkRGlyZWN0aW9uO1xuICB5ID0gc3RvcFkgKyB2Mi5ueCAqIGNSYWRpdXMgKiByYWREaXJlY3Rpb247XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQWRkaXRpb25hbCBQYXJ0IDogY2FsY3VsYXRlIHN0YXJ0IHBvaW50IEVcbiAgc3RhcnRYID0gY3VycmVudFBvaW50LnggKyB2MS5ueCAqIGxlbk91dDtcbiAgc3RhcnRZID0gY3VycmVudFBvaW50LnkgKyB2MS5ueSAqIGxlbk91dDtcblxuICAvLyBTYXZlIGxhc3QgcG9pbnQgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyB2ZWN0b3Igd2hlbiBub3QgbmVlZGVkXG4gIGxhc3RQb2ludCA9IGN1cnJlbnRQb2ludDtcbn07XG5cbi8qKlxuICogRHJhdyBjb3JuZXIgcHJvdmlkZWQgYnkge0BsaW5rIGdldFJvdW5kQ29ybmVyfVxuICpcbiAqIEBwYXJhbSBjdHggOkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICogQHBhcmFtIHJvdW5kQ29ybmVyIHt7Y3g6bnVtYmVyLCBjeTpudW1iZXIsIHJhZGl1czpudW1iZXIsIGVuZEFuZ2xlOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgY291bnRlckNsb2Nrd2lzZTogYm9vbGVhbn19XG4gKi9cbmZ1bmN0aW9uIGRyYXdQcmVwYXJlZFJvdW5kQ29ybmVyKGN0eCwgcm91bmRDb3JuZXIpIHtcbiAgaWYgKHJvdW5kQ29ybmVyLnJhZGl1cyA9PT0gMCkgY3R4LmxpbmVUbyhyb3VuZENvcm5lci5jeCwgcm91bmRDb3JuZXIuY3kpO2Vsc2UgY3R4LmFyYyhyb3VuZENvcm5lci5jeCwgcm91bmRDb3JuZXIuY3ksIHJvdW5kQ29ybmVyLnJhZGl1cywgcm91bmRDb3JuZXIuc3RhcnRBbmdsZSwgcm91bmRDb3JuZXIuZW5kQW5nbGUsIHJvdW5kQ29ybmVyLmNvdW50ZXJDbG9ja3dpc2UpO1xufVxuXG4vKipcbiAqIEdldCByb3VuZCBjb3JuZXIgZnJvbSBhIHBvaW50IGFuZCBpdHMgcHJldmlvdXMgYW5kIG5leHQgbmVpZ2hib3VycyBpbiBhIHBhdGhcbiAqXG4gKiBAcGFyYW0gcHJldmlvdXNQb2ludCB7e3g6IG51bWJlciwgeTpudW1iZXIsIHJhZGl1czogbnVtYmVyP319XG4gKiBAcGFyYW0gY3VycmVudFBvaW50IHt7eDogbnVtYmVyLCB5Om51bWJlciwgcmFkaXVzOiBudW1iZXI/fX1cbiAqIEBwYXJhbSBuZXh0UG9pbnQge3t4OiBudW1iZXIsIHk6bnVtYmVyLCByYWRpdXM6IG51bWJlcj99fVxuICogQHBhcmFtIHJhZGl1c01heCA6bnVtYmVyXG4gKiBAcGFyYW0gaXNBcmNSYWRpdXMgOmJvb2xlYW5cbiAqIEByZXR1cm4ge3tcbiAqIGN4Om51bWJlciwgY3k6bnVtYmVyLCByYWRpdXM6bnVtYmVyLFxuICogc3RhcnRYOm51bWJlciwgc3RhcnRZOm51bWJlcixcbiAqIHN0b3BYOm51bWJlciwgc3RvcFk6IG51bWJlcixcbiAqIGVuZEFuZ2xlOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgY291bnRlckNsb2Nrd2lzZTogYm9vbGVhblxuICogfX1cbiAqL1xuZnVuY3Rpb24gZ2V0Um91bmRDb3JuZXIocHJldmlvdXNQb2ludCwgY3VycmVudFBvaW50LCBuZXh0UG9pbnQsIHJhZGl1c01heCkge1xuICB2YXIgaXNBcmNSYWRpdXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIGlmIChyYWRpdXNNYXggPT09IDAgfHwgY3VycmVudFBvaW50LnJhZGl1cyA9PT0gMCkgcmV0dXJuIHtcbiAgICBjeDogY3VycmVudFBvaW50LngsXG4gICAgY3k6IGN1cnJlbnRQb2ludC55LFxuICAgIHJhZGl1czogMCxcbiAgICBzdGFydFg6IGN1cnJlbnRQb2ludC54LFxuICAgIHN0YXJ0WTogY3VycmVudFBvaW50LnksXG4gICAgc3RvcFg6IGN1cnJlbnRQb2ludC54LFxuICAgIHN0b3BZOiBjdXJyZW50UG9pbnQueSxcbiAgICBzdGFydEFuZ2xlOiB1bmRlZmluZWQsXG4gICAgZW5kQW5nbGU6IHVuZGVmaW5lZCxcbiAgICBjb3VudGVyQ2xvY2t3aXNlOiB1bmRlZmluZWRcbiAgfTtcbiAgY2FsY0Nvcm5lckFyYyhwcmV2aW91c1BvaW50LCBjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgcmFkaXVzTWF4LCBpc0FyY1JhZGl1cyk7XG4gIHJldHVybiB7XG4gICAgY3g6IHgsXG4gICAgY3k6IHksXG4gICAgcmFkaXVzOiBjUmFkaXVzLFxuICAgIHN0YXJ0WDogc3RhcnRYLFxuICAgIHN0YXJ0WTogc3RhcnRZLFxuICAgIHN0b3BYOiBzdG9wWCxcbiAgICBzdG9wWTogc3RvcFksXG4gICAgc3RhcnRBbmdsZTogdjEuYW5nICsgTWF0aC5QSSAvIDIgKiByYWREaXJlY3Rpb24sXG4gICAgZW5kQW5nbGU6IHYyLmFuZyAtIE1hdGguUEkgLyAyICogcmFkRGlyZWN0aW9uLFxuICAgIGNvdW50ZXJDbG9ja3dpc2U6IGRyYXdEaXJlY3Rpb25cbiAgfTtcbn1cblxudmFyIEJScCRjID0ge307XG5CUnAkYy5maW5kTWlkcHRQdHNFdGMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8pIHtcbiAgdmFyIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyxcbiAgICBpbnRlcnNlY3Rpb25QdHMgPSBwYWlySW5mby5pbnRlcnNlY3Rpb25QdHMsXG4gICAgdmVjdG9yTm9ybUludmVyc2UgPSBwYWlySW5mby52ZWN0b3JOb3JtSW52ZXJzZTtcbiAgdmFyIG1pZHB0UHRzO1xuXG4gIC8vIG4uYi4gYXNzdW1lcyBhbGwgZWRnZXMgaW4gYmV6aWVyIGJ1bmRsZSBoYXZlIHNhbWUgZW5kcG9pbnRzIHNwZWNpZmllZFxuICB2YXIgc3JjTWFuRW5kcHQgPSBlZGdlLnBzdHlsZSgnc291cmNlLWVuZHBvaW50Jyk7XG4gIHZhciB0Z3RNYW5FbmRwdCA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtZW5kcG9pbnQnKTtcbiAgdmFyIGhhdmVNYW51YWxFbmRQdHMgPSBzcmNNYW5FbmRwdC51bml0cyAhPSBudWxsICYmIHRndE1hbkVuZHB0LnVuaXRzICE9IG51bGw7XG4gIHZhciByZWNhbGNWZWN0b3JOb3JtSW52ZXJzZSA9IGZ1bmN0aW9uIHJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlKHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdmFyIGR5ID0geTIgLSB5MTtcbiAgICB2YXIgZHggPSB4MiAtIHgxO1xuICAgIHZhciBsID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLWR5IC8gbCxcbiAgICAgIHk6IGR4IC8gbFxuICAgIH07XG4gIH07XG4gIHZhciBlZGdlRGlzdGFuY2VzID0gZWRnZS5wc3R5bGUoJ2VkZ2UtZGlzdGFuY2VzJykudmFsdWU7XG4gIHN3aXRjaCAoZWRnZURpc3RhbmNlcykge1xuICAgIGNhc2UgJ25vZGUtcG9zaXRpb24nOlxuICAgICAgbWlkcHRQdHMgPSBwb3NQdHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbnRlcnNlY3Rpb24nOlxuICAgICAgbWlkcHRQdHMgPSBpbnRlcnNlY3Rpb25QdHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmRwb2ludHMnOlxuICAgICAge1xuICAgICAgICBpZiAoaGF2ZU1hbnVhbEVuZFB0cykge1xuICAgICAgICAgIHZhciBfdGhpcyRtYW51YWxFbmRwdFRvUHggPSB0aGlzLm1hbnVhbEVuZHB0VG9QeChlZGdlLnNvdXJjZSgpWzBdLCBzcmNNYW5FbmRwdCksXG4gICAgICAgICAgICBfdGhpcyRtYW51YWxFbmRwdFRvUHgyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkbWFudWFsRW5kcHRUb1B4LCAyKSxcbiAgICAgICAgICAgIHgxID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4MlswXSxcbiAgICAgICAgICAgIHkxID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4MlsxXTtcbiAgICAgICAgICB2YXIgX3RoaXMkbWFudWFsRW5kcHRUb1B4MyA9IHRoaXMubWFudWFsRW5kcHRUb1B4KGVkZ2UudGFyZ2V0KClbMF0sIHRndE1hbkVuZHB0KSxcbiAgICAgICAgICAgIF90aGlzJG1hbnVhbEVuZHB0VG9QeDQgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRtYW51YWxFbmRwdFRvUHgzLCAyKSxcbiAgICAgICAgICAgIHgyID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4NFswXSxcbiAgICAgICAgICAgIHkyID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4NFsxXTtcbiAgICAgICAgICB2YXIgZW5kUHRzID0ge1xuICAgICAgICAgICAgeDE6IHgxLFxuICAgICAgICAgICAgeTE6IHkxLFxuICAgICAgICAgICAgeDI6IHgyLFxuICAgICAgICAgICAgeTI6IHkyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2ZWN0b3JOb3JtSW52ZXJzZSA9IHJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlKHgxLCB5MSwgeDIsIHkyKTtcbiAgICAgICAgICBtaWRwdFB0cyA9IGVuZFB0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuKFwiRWRnZSBcIi5jb25jYXQoZWRnZS5pZCgpLCBcIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLlwiKSk7XG4gICAgICAgICAgbWlkcHRQdHMgPSBpbnRlcnNlY3Rpb25QdHM7IC8vIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtaWRwdFB0czogbWlkcHRQdHMsXG4gICAgdmVjdG9yTm9ybUludmVyc2U6IHZlY3Rvck5vcm1JbnZlcnNlXG4gIH07XG59O1xuQlJwJGMuZmluZEhheXN0YWNrUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2VzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgIHZhciBfcCA9IGVkZ2UuX3ByaXZhdGU7XG4gICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgaWYgKCFycy5oYXlzdGFjaykge1xuICAgICAgdmFyIGFuZ2xlID0gTWF0aC5yYW5kb20oKSAqIDIgKiBNYXRoLlBJO1xuICAgICAgcnMuc291cmNlID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgIHk6IE1hdGguc2luKGFuZ2xlKVxuICAgICAgfTtcbiAgICAgIGFuZ2xlID0gTWF0aC5yYW5kb20oKSAqIDIgKiBNYXRoLlBJO1xuICAgICAgcnMudGFyZ2V0ID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgIHk6IE1hdGguc2luKGFuZ2xlKVxuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICB2YXIgdGd0ID0gX3AudGFyZ2V0O1xuICAgIHZhciBzcmNQb3MgPSBzcmMucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0UG9zID0gdGd0LnBvc2l0aW9uKCk7XG4gICAgdmFyIHNyY1cgPSBzcmMud2lkdGgoKTtcbiAgICB2YXIgdGd0VyA9IHRndC53aWR0aCgpO1xuICAgIHZhciBzcmNIID0gc3JjLmhlaWdodCgpO1xuICAgIHZhciB0Z3RIID0gdGd0LmhlaWdodCgpO1xuICAgIHZhciByYWRpdXMgPSBlZGdlLnBzdHlsZSgnaGF5c3RhY2stcmFkaXVzJykudmFsdWU7XG4gICAgdmFyIGhhbGZSYWRpdXMgPSByYWRpdXMgLyAyOyAvLyBiL2MgaGF2ZSB0byBoYWxmIHdpZHRoL2hlaWdodFxuXG4gICAgcnMuaGF5c3RhY2tQdHMgPSBycy5hbGxwdHMgPSBbcnMuc291cmNlLnggKiBzcmNXICogaGFsZlJhZGl1cyArIHNyY1Bvcy54LCBycy5zb3VyY2UueSAqIHNyY0ggKiBoYWxmUmFkaXVzICsgc3JjUG9zLnksIHJzLnRhcmdldC54ICogdGd0VyAqIGhhbGZSYWRpdXMgKyB0Z3RQb3MueCwgcnMudGFyZ2V0LnkgKiB0Z3RIICogaGFsZlJhZGl1cyArIHRndFBvcy55XTtcbiAgICBycy5taWRYID0gKHJzLmFsbHB0c1swXSArIHJzLmFsbHB0c1syXSkgLyAyO1xuICAgIHJzLm1pZFkgPSAocnMuYWxscHRzWzFdICsgcnMuYWxscHRzWzNdKSAvIDI7XG5cbiAgICAvLyBhbHdheXMgb3ZlcnJpZGUgYXMgaGF5c3RhY2sgaW4gY2FzZSBzZXQgdG8gZGlmZmVyZW50IHR5cGUgcHJldmlvdXNseVxuICAgIHJzLmVkZ2VUeXBlID0gJ2hheXN0YWNrJztcbiAgICBycy5oYXlzdGFjayA9IHRydWU7XG4gICAgdGhpcy5zdG9yZUVkZ2VQcm9qZWN0aW9ucyhlZGdlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKGVkZ2UpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhlZGdlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKGVkZ2UpO1xuICB9XG59O1xuQlJwJGMuZmluZFNlZ21lbnRzUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvKSB7XG4gIC8vIFNlZ21lbnRzIChtdWx0aXBsZSBzdHJhaWdodCBsaW5lcylcblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgc2VnbWVudFdzID0gZWRnZS5wc3R5bGUoJ3NlZ21lbnQtd2VpZ2h0cycpO1xuICB2YXIgc2VnbWVudERzID0gZWRnZS5wc3R5bGUoJ3NlZ21lbnQtZGlzdGFuY2VzJyk7XG4gIHZhciBzZWdtZW50UnMgPSBlZGdlLnBzdHlsZSgnc2VnbWVudC1yYWRpaScpO1xuICB2YXIgc2VnbWVudFRzID0gZWRnZS5wc3R5bGUoJ3JhZGl1cy10eXBlJyk7XG4gIHZhciBzZWdtZW50c04gPSBNYXRoLm1pbihzZWdtZW50V3MucGZWYWx1ZS5sZW5ndGgsIHNlZ21lbnREcy5wZlZhbHVlLmxlbmd0aCk7XG4gIHZhciBsYXN0UmFkaXVzID0gc2VnbWVudFJzLnBmVmFsdWVbc2VnbWVudFJzLnBmVmFsdWUubGVuZ3RoIC0gMV07XG4gIHZhciBsYXN0UmFkaXVzVHlwZSA9IHNlZ21lbnRUcy5wZlZhbHVlW3NlZ21lbnRUcy5wZlZhbHVlLmxlbmd0aCAtIDFdO1xuICBycy5lZGdlVHlwZSA9ICdzZWdtZW50cyc7XG4gIHJzLnNlZ3B0cyA9IFtdO1xuICBycy5yYWRpaSA9IFtdO1xuICBycy5pc0FyY1JhZGl1cyA9IFtdO1xuICBmb3IgKHZhciBzID0gMDsgcyA8IHNlZ21lbnRzTjsgcysrKSB7XG4gICAgdmFyIHcgPSBzZWdtZW50V3MucGZWYWx1ZVtzXTtcbiAgICB2YXIgZCA9IHNlZ21lbnREcy5wZlZhbHVlW3NdO1xuICAgIHZhciB3MSA9IDEgLSB3O1xuICAgIHZhciB3MiA9IHc7XG4gICAgdmFyIF90aGlzJGZpbmRNaWRwdFB0c0V0YyA9IHRoaXMuZmluZE1pZHB0UHRzRXRjKGVkZ2UsIHBhaXJJbmZvKSxcbiAgICAgIG1pZHB0UHRzID0gX3RoaXMkZmluZE1pZHB0UHRzRXRjLm1pZHB0UHRzLFxuICAgICAgdmVjdG9yTm9ybUludmVyc2UgPSBfdGhpcyRmaW5kTWlkcHRQdHNFdGMudmVjdG9yTm9ybUludmVyc2U7XG4gICAgdmFyIGFkanVzdGVkTWlkcHQgPSB7XG4gICAgICB4OiBtaWRwdFB0cy54MSAqIHcxICsgbWlkcHRQdHMueDIgKiB3MixcbiAgICAgIHk6IG1pZHB0UHRzLnkxICogdzEgKyBtaWRwdFB0cy55MiAqIHcyXG4gICAgfTtcbiAgICBycy5zZWdwdHMucHVzaChhZGp1c3RlZE1pZHB0LnggKyB2ZWN0b3JOb3JtSW52ZXJzZS54ICogZCwgYWRqdXN0ZWRNaWRwdC55ICsgdmVjdG9yTm9ybUludmVyc2UueSAqIGQpO1xuICAgIHJzLnJhZGlpLnB1c2goc2VnbWVudFJzLnBmVmFsdWVbc10gIT09IHVuZGVmaW5lZCA/IHNlZ21lbnRScy5wZlZhbHVlW3NdIDogbGFzdFJhZGl1cyk7XG4gICAgcnMuaXNBcmNSYWRpdXMucHVzaCgoc2VnbWVudFRzLnBmVmFsdWVbc10gIT09IHVuZGVmaW5lZCA/IHNlZ21lbnRUcy5wZlZhbHVlW3NdIDogbGFzdFJhZGl1c1R5cGUpID09PSAnYXJjLXJhZGl1cycpO1xuICB9XG59O1xuQlJwJGMuZmluZExvb3BQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCkge1xuICAvLyBTZWxmLWVkZ2VcblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgZGlyQ291bnRzID0gcGFpckluZm8uZGlyQ291bnRzLFxuICAgIHNyY1BvcyA9IHBhaXJJbmZvLnNyY1BvcztcbiAgdmFyIGN0cmxwdERpc3RzID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2VzJyk7XG4gIHZhciBjdHJscHREaXN0ID0gY3RybHB0RGlzdHMgPyBjdHJscHREaXN0cy5wZlZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgbG9vcERpciA9IGVkZ2UucHN0eWxlKCdsb29wLWRpcmVjdGlvbicpLnBmVmFsdWU7XG4gIHZhciBsb29wU3dwID0gZWRnZS5wc3R5bGUoJ2xvb3Atc3dlZXAnKS5wZlZhbHVlO1xuICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICBycy5lZGdlVHlwZSA9ICdzZWxmJztcbiAgdmFyIGogPSBpO1xuICB2YXIgbG9vcERpc3QgPSBzdGVwU2l6ZTtcbiAgaWYgKGVkZ2VJc1VuYnVuZGxlZCkge1xuICAgIGogPSAwO1xuICAgIGxvb3BEaXN0ID0gY3RybHB0RGlzdDtcbiAgfVxuICB2YXIgbG9vcEFuZ2xlID0gbG9vcERpciAtIE1hdGguUEkgLyAyO1xuICB2YXIgb3V0QW5nbGUgPSBsb29wQW5nbGUgLSBsb29wU3dwIC8gMjtcbiAgdmFyIGluQW5nbGUgPSBsb29wQW5nbGUgKyBsb29wU3dwIC8gMjtcblxuICAvLyBpbmNyZWFzZSBieSBzdGVwIHNpemUgZm9yIG92ZXJsYXBwaW5nIGxvb3BzLCBrZXllZCBvbiBkaXJlY3Rpb24gYW5kIHN3ZWVwIHZhbHVlc1xuICB2YXIgZGMgPSBTdHJpbmcobG9vcERpciArICdfJyArIGxvb3BTd3ApO1xuICBqID0gZGlyQ291bnRzW2RjXSA9PT0gdW5kZWZpbmVkID8gZGlyQ291bnRzW2RjXSA9IDAgOiArK2RpckNvdW50c1tkY107XG4gIHJzLmN0cmxwdHMgPSBbc3JjUG9zLnggKyBNYXRoLmNvcyhvdXRBbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueSArIE1hdGguc2luKG91dEFuZ2xlKSAqIDEuNCAqIGxvb3BEaXN0ICogKGogLyAzICsgMSksIHNyY1Bvcy54ICsgTWF0aC5jb3MoaW5BbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueSArIE1hdGguc2luKGluQW5nbGUpICogMS40ICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKV07XG59O1xuQlJwJGMuZmluZENvbXBvdW5kTG9vcFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbywgaSwgZWRnZUlzVW5idW5kbGVkKSB7XG4gIC8vIENvbXBvdW5kIGVkZ2VcblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBycy5lZGdlVHlwZSA9ICdjb21wb3VuZCc7XG4gIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MsXG4gICAgdGd0UG9zID0gcGFpckluZm8udGd0UG9zLFxuICAgIHNyY1cgPSBwYWlySW5mby5zcmNXLFxuICAgIHNyY0ggPSBwYWlySW5mby5zcmNILFxuICAgIHRndFcgPSBwYWlySW5mby50Z3RXLFxuICAgIHRndEggPSBwYWlySW5mby50Z3RIO1xuICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICB2YXIgY3RybHB0RGlzdHMgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnKTtcbiAgdmFyIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciBqID0gaTtcbiAgdmFyIGxvb3BEaXN0ID0gc3RlcFNpemU7XG4gIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICBqID0gMDtcbiAgICBsb29wRGlzdCA9IGN0cmxwdERpc3Q7XG4gIH1cbiAgdmFyIGxvb3BXID0gNTA7XG4gIHZhciBsb29wYVBvcyA9IHtcbiAgICB4OiBzcmNQb3MueCAtIHNyY1cgLyAyLFxuICAgIHk6IHNyY1Bvcy55IC0gc3JjSCAvIDJcbiAgfTtcbiAgdmFyIGxvb3BiUG9zID0ge1xuICAgIHg6IHRndFBvcy54IC0gdGd0VyAvIDIsXG4gICAgeTogdGd0UG9zLnkgLSB0Z3RIIC8gMlxuICB9O1xuICB2YXIgbG9vcFBvcyA9IHtcbiAgICB4OiBNYXRoLm1pbihsb29wYVBvcy54LCBsb29wYlBvcy54KSxcbiAgICB5OiBNYXRoLm1pbihsb29wYVBvcy55LCBsb29wYlBvcy55KVxuICB9O1xuXG4gIC8vIGF2b2lkcyBjYXNlcyB3aXRoIGltcG9zc2libGUgYmV6aWVyc1xuICB2YXIgbWluQ29tcG91bmRTdHJldGNoID0gMC41O1xuICB2YXIgY29tcG91bmRTdHJldGNoQSA9IE1hdGgubWF4KG1pbkNvbXBvdW5kU3RyZXRjaCwgTWF0aC5sb2coc3JjVyAqIDAuMDEpKTtcbiAgdmFyIGNvbXBvdW5kU3RyZXRjaEIgPSBNYXRoLm1heChtaW5Db21wb3VuZFN0cmV0Y2gsIE1hdGgubG9nKHRndFcgKiAwLjAxKSk7XG4gIHJzLmN0cmxwdHMgPSBbbG9vcFBvcy54LCBsb29wUG9zLnkgLSAoMSArIE1hdGgucG93KGxvb3BXLCAxLjEyKSAvIDEwMCkgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpICogY29tcG91bmRTdHJldGNoQSwgbG9vcFBvcy54IC0gKDEgKyBNYXRoLnBvdyhsb29wVywgMS4xMikgLyAxMDApICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKSAqIGNvbXBvdW5kU3RyZXRjaEIsIGxvb3BQb3MueV07XG59O1xuQlJwJGMuZmluZFN0cmFpZ2h0RWRnZVBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIC8vIFN0cmFpZ2h0IGVkZ2Ugd2l0aGluIGJ1bmRsZVxuXG4gIGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGUgPSAnc3RyYWlnaHQnO1xufTtcbkJScCRjLmZpbmRCZXppZXJQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCwgZWRnZUlzU3dhcHBlZCkge1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICB2YXIgY3RybHB0RGlzdHMgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnKTtcbiAgdmFyIGN0cmxwdFdzID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtd2VpZ2h0cycpO1xuICB2YXIgYmV6aWVyTiA9IGN0cmxwdERpc3RzICYmIGN0cmxwdFdzID8gTWF0aC5taW4oY3RybHB0RGlzdHMudmFsdWUubGVuZ3RoLCBjdHJscHRXcy52YWx1ZS5sZW5ndGgpIDogMTtcbiAgdmFyIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciBjdHJscHRXZWlnaHQgPSBjdHJscHRXcy52YWx1ZVswXTtcblxuICAvLyAoTXVsdGkpYmV6aWVyXG5cbiAgdmFyIG11bHRpID0gZWRnZUlzVW5idW5kbGVkO1xuICBycy5lZGdlVHlwZSA9IG11bHRpID8gJ211bHRpYmV6aWVyJyA6ICdiZXppZXInO1xuICBycy5jdHJscHRzID0gW107XG4gIGZvciAodmFyIGIgPSAwOyBiIDwgYmV6aWVyTjsgYisrKSB7XG4gICAgdmFyIG5vcm1jdHJscHREaXN0ID0gKDAuNSAtIHBhaXJJbmZvLmVsZXMubGVuZ3RoIC8gMiArIGkpICogc3RlcFNpemUgKiAoZWRnZUlzU3dhcHBlZCA/IC0xIDogMSk7XG4gICAgdmFyIG1hbmN0cmxwdERpc3QgPSB2b2lkIDA7XG4gICAgdmFyIHNpZ24gPSBzaWdudW0obm9ybWN0cmxwdERpc3QpO1xuICAgIGlmIChtdWx0aSkge1xuICAgICAgY3RybHB0RGlzdCA9IGN0cmxwdERpc3RzID8gY3RybHB0RGlzdHMucGZWYWx1ZVtiXSA6IHN0ZXBTaXplOyAvLyBmYWxsIGJhY2sgb24gc3RlcCBzaXplXG4gICAgICBjdHJscHRXZWlnaHQgPSBjdHJscHRXcy52YWx1ZVtiXTtcbiAgICB9XG4gICAgaWYgKGVkZ2VJc1VuYnVuZGxlZCkge1xuICAgICAgLy8gbXVsdGkgb3Igc2luZ2xlIHVuYnVuZGxlZFxuICAgICAgbWFuY3RybHB0RGlzdCA9IGN0cmxwdERpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmN0cmxwdERpc3QgPSBjdHJscHREaXN0ICE9PSB1bmRlZmluZWQgPyBzaWduICogY3RybHB0RGlzdCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGRpc3RhbmNlRnJvbU1pZHBvaW50ID0gbWFuY3RybHB0RGlzdCAhPT0gdW5kZWZpbmVkID8gbWFuY3RybHB0RGlzdCA6IG5vcm1jdHJscHREaXN0O1xuICAgIHZhciB3MSA9IDEgLSBjdHJscHRXZWlnaHQ7XG4gICAgdmFyIHcyID0gY3RybHB0V2VpZ2h0O1xuICAgIHZhciBfdGhpcyRmaW5kTWlkcHRQdHNFdGMyID0gdGhpcy5maW5kTWlkcHRQdHNFdGMoZWRnZSwgcGFpckluZm8pLFxuICAgICAgbWlkcHRQdHMgPSBfdGhpcyRmaW5kTWlkcHRQdHNFdGMyLm1pZHB0UHRzLFxuICAgICAgdmVjdG9yTm9ybUludmVyc2UgPSBfdGhpcyRmaW5kTWlkcHRQdHNFdGMyLnZlY3Rvck5vcm1JbnZlcnNlO1xuICAgIHZhciBhZGp1c3RlZE1pZHB0ID0ge1xuICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXG4gICAgICB5OiBtaWRwdFB0cy55MSAqIHcxICsgbWlkcHRQdHMueTIgKiB3MlxuICAgIH07XG4gICAgcnMuY3RybHB0cy5wdXNoKGFkanVzdGVkTWlkcHQueCArIHZlY3Rvck5vcm1JbnZlcnNlLnggKiBkaXN0YW5jZUZyb21NaWRwb2ludCwgYWRqdXN0ZWRNaWRwdC55ICsgdmVjdG9yTm9ybUludmVyc2UueSAqIGRpc3RhbmNlRnJvbU1pZHBvaW50KTtcbiAgfVxufTtcbkJScCRjLmZpbmRUYXhpUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvKSB7XG4gIC8vIFRheGljYWIgZ2VvbWV0cnkgd2l0aCB0d28gdHVybnMgbWF4aW11bVxuXG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHJzLmVkZ2VUeXBlID0gJ3NlZ21lbnRzJztcbiAgdmFyIFZFUlRJQ0FMID0gJ3ZlcnRpY2FsJztcbiAgdmFyIEhPUklaT05UQUwgPSAnaG9yaXpvbnRhbCc7XG4gIHZhciBMRUZUV0FSRCA9ICdsZWZ0d2FyZCc7XG4gIHZhciBSSUdIVFdBUkQgPSAncmlnaHR3YXJkJztcbiAgdmFyIERPV05XQVJEID0gJ2Rvd253YXJkJztcbiAgdmFyIFVQV0FSRCA9ICd1cHdhcmQnO1xuICB2YXIgQVVUTyA9ICdhdXRvJztcbiAgdmFyIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyxcbiAgICBzcmNXID0gcGFpckluZm8uc3JjVyxcbiAgICBzcmNIID0gcGFpckluZm8uc3JjSCxcbiAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICB0Z3RIID0gcGFpckluZm8udGd0SDtcbiAgdmFyIGVkZ2VEaXN0YW5jZXMgPSBlZGdlLnBzdHlsZSgnZWRnZS1kaXN0YW5jZXMnKS52YWx1ZTtcbiAgdmFyIGRJbmNsdWRlc05vZGVCb2R5ID0gZWRnZURpc3RhbmNlcyAhPT0gJ25vZGUtcG9zaXRpb24nO1xuICB2YXIgdGF4aURpciA9IGVkZ2UucHN0eWxlKCd0YXhpLWRpcmVjdGlvbicpLnZhbHVlO1xuICB2YXIgcmF3VGF4aURpciA9IHRheGlEaXI7IC8vIHVucHJvY2Vzc2VkIHZhbHVlXG4gIHZhciB0YXhpVHVybiA9IGVkZ2UucHN0eWxlKCd0YXhpLXR1cm4nKTtcbiAgdmFyIHR1cm5Jc1BlcmNlbnQgPSB0YXhpVHVybi51bml0cyA9PT0gJyUnO1xuICB2YXIgdGF4aVR1cm5QZlZhbCA9IHRheGlUdXJuLnBmVmFsdWU7XG4gIHZhciB0dXJuSXNOZWdhdGl2ZSA9IHRheGlUdXJuUGZWYWwgPCAwOyAvLyBpLmUuIGZyb20gdGFyZ2V0IHNpZGVcbiAgdmFyIG1pbkQgPSBlZGdlLnBzdHlsZSgndGF4aS10dXJuLW1pbi1kaXN0YW5jZScpLnBmVmFsdWU7XG4gIHZhciBkdyA9IGRJbmNsdWRlc05vZGVCb2R5ID8gKHNyY1cgKyB0Z3RXKSAvIDIgOiAwO1xuICB2YXIgZGggPSBkSW5jbHVkZXNOb2RlQm9keSA/IChzcmNIICsgdGd0SCkgLyAyIDogMDtcbiAgdmFyIHBkeCA9IHBvc1B0cy54MiAtIHBvc1B0cy54MTtcbiAgdmFyIHBkeSA9IHBvc1B0cy55MiAtIHBvc1B0cy55MTtcblxuICAvLyB0YWtlIGF3YXkgdGhlIGVmZmVjdGl2ZSB3L2ggZnJvbSB0aGUgbWFnbml0dWRlIG9mIHRoZSBkZWx0YSB2YWx1ZVxuICB2YXIgc3ViRFdIID0gZnVuY3Rpb24gc3ViRFdIKGR4eSwgZHdoKSB7XG4gICAgaWYgKGR4eSA+IDApIHtcbiAgICAgIHJldHVybiBNYXRoLm1heChkeHkgLSBkd2gsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oZHh5ICsgZHdoLCAwKTtcbiAgICB9XG4gIH07XG4gIHZhciBkeCA9IHN1YkRXSChwZHgsIGR3KTtcbiAgdmFyIGR5ID0gc3ViRFdIKHBkeSwgZGgpO1xuICB2YXIgaXNFeHBsaWNpdERpciA9IGZhbHNlO1xuICBpZiAocmF3VGF4aURpciA9PT0gQVVUTykge1xuICAgIHRheGlEaXIgPSBNYXRoLmFicyhkeCkgPiBNYXRoLmFicyhkeSkgPyBIT1JJWk9OVEFMIDogVkVSVElDQUw7XG4gIH0gZWxzZSBpZiAocmF3VGF4aURpciA9PT0gVVBXQVJEIHx8IHJhd1RheGlEaXIgPT09IERPV05XQVJEKSB7XG4gICAgdGF4aURpciA9IFZFUlRJQ0FMO1xuICAgIGlzRXhwbGljaXREaXIgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHJhd1RheGlEaXIgPT09IExFRlRXQVJEIHx8IHJhd1RheGlEaXIgPT09IFJJR0hUV0FSRCkge1xuICAgIHRheGlEaXIgPSBIT1JJWk9OVEFMO1xuICAgIGlzRXhwbGljaXREaXIgPSB0cnVlO1xuICB9XG4gIHZhciBpc1ZlcnQgPSB0YXhpRGlyID09PSBWRVJUSUNBTDtcbiAgdmFyIGwgPSBpc1ZlcnQgPyBkeSA6IGR4O1xuICB2YXIgcGwgPSBpc1ZlcnQgPyBwZHkgOiBwZHg7XG4gIHZhciBzZ25MID0gc2lnbnVtKHBsKTtcbiAgdmFyIGZvcmNlZERpciA9IGZhbHNlO1xuICBpZiAoIShpc0V4cGxpY2l0RGlyICYmICh0dXJuSXNQZXJjZW50IHx8IHR1cm5Jc05lZ2F0aXZlKSkgLy8gZm9yY2luZyBpbiB0aGlzIGNhc2Ugd291bGQgY2F1c2Ugd2VpcmQgZ3Jvd2luZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uXG4gICYmIChyYXdUYXhpRGlyID09PSBET1dOV0FSRCAmJiBwbCA8IDAgfHwgcmF3VGF4aURpciA9PT0gVVBXQVJEICYmIHBsID4gMCB8fCByYXdUYXhpRGlyID09PSBMRUZUV0FSRCAmJiBwbCA+IDAgfHwgcmF3VGF4aURpciA9PT0gUklHSFRXQVJEICYmIHBsIDwgMCkpIHtcbiAgICBzZ25MICo9IC0xO1xuICAgIGwgPSBzZ25MICogTWF0aC5hYnMobCk7XG4gICAgZm9yY2VkRGlyID0gdHJ1ZTtcbiAgfVxuICB2YXIgZDtcbiAgaWYgKHR1cm5Jc1BlcmNlbnQpIHtcbiAgICB2YXIgcCA9IHRheGlUdXJuUGZWYWwgPCAwID8gMSArIHRheGlUdXJuUGZWYWwgOiB0YXhpVHVyblBmVmFsO1xuICAgIGQgPSBwICogbDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgayA9IHRheGlUdXJuUGZWYWwgPCAwID8gbCA6IDA7XG4gICAgZCA9IGsgKyB0YXhpVHVyblBmVmFsICogc2duTDtcbiAgfVxuICB2YXIgZ2V0SXNUb29DbG9zZSA9IGZ1bmN0aW9uIGdldElzVG9vQ2xvc2UoZCkge1xuICAgIHJldHVybiBNYXRoLmFicyhkKSA8IG1pbkQgfHwgTWF0aC5hYnMoZCkgPj0gTWF0aC5hYnMobCk7XG4gIH07XG4gIHZhciBpc1Rvb0Nsb3NlU3JjID0gZ2V0SXNUb29DbG9zZShkKTtcbiAgdmFyIGlzVG9vQ2xvc2VUZ3QgPSBnZXRJc1Rvb0Nsb3NlKE1hdGguYWJzKGwpIC0gTWF0aC5hYnMoZCkpO1xuICB2YXIgaXNUb29DbG9zZSA9IGlzVG9vQ2xvc2VTcmMgfHwgaXNUb29DbG9zZVRndDtcbiAgaWYgKGlzVG9vQ2xvc2UgJiYgIWZvcmNlZERpcikge1xuICAgIC8vIG5vbi1pZGVhbCByb3V0aW5nXG4gICAgaWYgKGlzVmVydCkge1xuICAgICAgLy8gdmVydGljYWwgZmFsbGJhY2tzXG4gICAgICB2YXIgbFNoYXBlSW5zaWRlU3JjID0gTWF0aC5hYnMocGwpIDw9IHNyY0ggLyAyO1xuICAgICAgdmFyIGxTaGFwZUluc2lkZVRndCA9IE1hdGguYWJzKHBkeCkgPD0gdGd0VyAvIDI7XG4gICAgICBpZiAobFNoYXBlSW5zaWRlU3JjKSB7XG4gICAgICAgIC8vIGhvcml6b250YWwgWi1zaGFwZSAoZGlyZWN0aW9uIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciB4ID0gKHBvc1B0cy54MSArIHBvc1B0cy54MikgLyAyO1xuICAgICAgICB2YXIgeTEgPSBwb3NQdHMueTEsXG4gICAgICAgICAgeTIgPSBwb3NQdHMueTI7XG4gICAgICAgIHJzLnNlZ3B0cyA9IFt4LCB5MSwgeCwgeTJdO1xuICAgICAgfSBlbHNlIGlmIChsU2hhcGVJbnNpZGVUZ3QpIHtcbiAgICAgICAgLy8gdmVydGljYWwgWi1zaGFwZSAoZGlzdGFuY2Ugbm90IHJlc3BlY3RlZClcbiAgICAgICAgdmFyIHkgPSAocG9zUHRzLnkxICsgcG9zUHRzLnkyKSAvIDI7XG4gICAgICAgIHZhciB4MSA9IHBvc1B0cy54MSxcbiAgICAgICAgICB4MiA9IHBvc1B0cy54MjtcbiAgICAgICAgcnMuc2VncHRzID0gW3gxLCB5LCB4MiwgeV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMLXNoYXBlIGZhbGxiYWNrICh0dXJuIGRpc3RhbmNlIG5vdCByZXNwZWN0ZWQsIGJ1dCB3b3JrcyB3ZWxsIHdpdGggdHJlZSBzaWJsaW5ncylcbiAgICAgICAgcnMuc2VncHRzID0gW3Bvc1B0cy54MSwgcG9zUHRzLnkyXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9yaXpvbnRhbCBmYWxsYmFja3NcbiAgICAgIHZhciBfbFNoYXBlSW5zaWRlU3JjID0gTWF0aC5hYnMocGwpIDw9IHNyY1cgLyAyO1xuICAgICAgdmFyIF9sU2hhcGVJbnNpZGVUZ3QgPSBNYXRoLmFicyhwZHkpIDw9IHRndEggLyAyO1xuICAgICAgaWYgKF9sU2hhcGVJbnNpZGVTcmMpIHtcbiAgICAgICAgLy8gdmVydGljYWwgWi1zaGFwZSAoZGlyZWN0aW9uIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciBfeSA9IChwb3NQdHMueTEgKyBwb3NQdHMueTIpIC8gMjtcbiAgICAgICAgdmFyIF94ID0gcG9zUHRzLngxLFxuICAgICAgICAgIF94MiA9IHBvc1B0cy54MjtcbiAgICAgICAgcnMuc2VncHRzID0gW194LCBfeSwgX3gyLCBfeV07XG4gICAgICB9IGVsc2UgaWYgKF9sU2hhcGVJbnNpZGVUZ3QpIHtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCBaLXNoYXBlICh0dXJuIGRpc3RhbmNlIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciBfeDMgPSAocG9zUHRzLngxICsgcG9zUHRzLngyKSAvIDI7XG4gICAgICAgIHZhciBfeTIgPSBwb3NQdHMueTEsXG4gICAgICAgICAgX3kzID0gcG9zUHRzLnkyO1xuICAgICAgICBycy5zZWdwdHMgPSBbX3gzLCBfeTIsIF94MywgX3kzXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEwtc2hhcGUgKHR1cm4gZGlzdGFuY2Ugbm90IHJlc3BlY3RlZCwgYnV0IHdvcmtzIHdlbGwgZm9yIHRyZWUgc2libGluZ3MpXG4gICAgICAgIHJzLnNlZ3B0cyA9IFtwb3NQdHMueDIsIHBvc1B0cy55MV07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlkZWFsIHJvdXRpbmdcbiAgICBpZiAoaXNWZXJ0KSB7XG4gICAgICB2YXIgX3k0ID0gcG9zUHRzLnkxICsgZCArIChkSW5jbHVkZXNOb2RlQm9keSA/IHNyY0ggLyAyICogc2duTCA6IDApO1xuICAgICAgdmFyIF94NCA9IHBvc1B0cy54MSxcbiAgICAgICAgX3g1ID0gcG9zUHRzLngyO1xuICAgICAgcnMuc2VncHRzID0gW194NCwgX3k0LCBfeDUsIF95NF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvcml6b250YWxcbiAgICAgIHZhciBfeDYgPSBwb3NQdHMueDEgKyBkICsgKGRJbmNsdWRlc05vZGVCb2R5ID8gc3JjVyAvIDIgKiBzZ25MIDogMCk7XG4gICAgICB2YXIgX3k1ID0gcG9zUHRzLnkxLFxuICAgICAgICBfeTYgPSBwb3NQdHMueTI7XG4gICAgICBycy5zZWdwdHMgPSBbX3g2LCBfeTUsIF94NiwgX3k2XTtcbiAgICB9XG4gIH1cbiAgaWYgKHJzLmlzUm91bmQpIHtcbiAgICB2YXIgcmFkaXVzID0gZWRnZS5wc3R5bGUoJ3RheGktcmFkaXVzJykudmFsdWU7XG4gICAgdmFyIGlzQXJjUmFkaXVzID0gZWRnZS5wc3R5bGUoJ3JhZGl1cy10eXBlJykudmFsdWVbMF0gPT09ICdhcmMtcmFkaXVzJztcbiAgICBycy5yYWRpaSA9IG5ldyBBcnJheShycy5zZWdwdHMubGVuZ3RoIC8gMikuZmlsbChyYWRpdXMpO1xuICAgIHJzLmlzQXJjUmFkaXVzID0gbmV3IEFycmF5KHJzLnNlZ3B0cy5sZW5ndGggLyAyKS5maWxsKGlzQXJjUmFkaXVzKTtcbiAgfVxufTtcbkJScCRjLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8pIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcblxuICAvLyBjYW4gb25seSBjb3JyZWN0IGJlemllcnMgZm9yIG5vdy4uLlxuICBpZiAocnMuZWRnZVR5cGUgPT09ICdiZXppZXInKSB7XG4gICAgdmFyIHNyY1BvcyA9IHBhaXJJbmZvLnNyY1BvcyxcbiAgICAgIHRndFBvcyA9IHBhaXJJbmZvLnRndFBvcyxcbiAgICAgIHNyY1cgPSBwYWlySW5mby5zcmNXLFxuICAgICAgc3JjSCA9IHBhaXJJbmZvLnNyY0gsXG4gICAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICAgIHRndEggPSBwYWlySW5mby50Z3RILFxuICAgICAgc3JjU2hhcGUgPSBwYWlySW5mby5zcmNTaGFwZSxcbiAgICAgIHRndFNoYXBlID0gcGFpckluZm8udGd0U2hhcGUsXG4gICAgICBzcmNDb3JuZXJSYWRpdXMgPSBwYWlySW5mby5zcmNDb3JuZXJSYWRpdXMsXG4gICAgICB0Z3RDb3JuZXJSYWRpdXMgPSBwYWlySW5mby50Z3RDb3JuZXJSYWRpdXMsXG4gICAgICBzcmNScyA9IHBhaXJJbmZvLnNyY1JzLFxuICAgICAgdGd0UnMgPSBwYWlySW5mby50Z3RScztcbiAgICB2YXIgYmFkU3RhcnQgPSAhbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKTtcbiAgICB2YXIgYmFkQVN0YXJ0ID0gIW51bWJlciQxKHJzLmFycm93U3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuYXJyb3dTdGFydFkpO1xuICAgIHZhciBiYWRFbmQgPSAhbnVtYmVyJDEocnMuZW5kWCkgfHwgIW51bWJlciQxKHJzLmVuZFkpO1xuICAgIHZhciBiYWRBRW5kID0gIW51bWJlciQxKHJzLmFycm93RW5kWCkgfHwgIW51bWJlciQxKHJzLmFycm93RW5kWSk7XG4gICAgdmFyIG1pbkNwQURpc3RGYWN0b3IgPSAzO1xuICAgIHZhciBhcnJvd1cgPSB0aGlzLmdldEFycm93V2lkdGgoZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSwgZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWUpICogdGhpcy5hcnJvd1NoYXBlV2lkdGg7XG4gICAgdmFyIG1pbkNwQURpc3QgPSBtaW5DcEFEaXN0RmFjdG9yICogYXJyb3dXO1xuICAgIHZhciBzdGFydEFDcERpc3QgPSBkaXN0KHtcbiAgICAgIHg6IHJzLmN0cmxwdHNbMF0sXG4gICAgICB5OiBycy5jdHJscHRzWzFdXG4gICAgfSwge1xuICAgICAgeDogcnMuc3RhcnRYLFxuICAgICAgeTogcnMuc3RhcnRZXG4gICAgfSk7XG4gICAgdmFyIGNsb3NlU3RhcnRBQ3AgPSBzdGFydEFDcERpc3QgPCBtaW5DcEFEaXN0O1xuICAgIHZhciBlbmRBQ3BEaXN0ID0gZGlzdCh7XG4gICAgICB4OiBycy5jdHJscHRzWzBdLFxuICAgICAgeTogcnMuY3RybHB0c1sxXVxuICAgIH0sIHtcbiAgICAgIHg6IHJzLmVuZFgsXG4gICAgICB5OiBycy5lbmRZXG4gICAgfSk7XG4gICAgdmFyIGNsb3NlRW5kQUNwID0gZW5kQUNwRGlzdCA8IG1pbkNwQURpc3Q7XG4gICAgdmFyIG92ZXJsYXBwaW5nID0gZmFsc2U7XG4gICAgaWYgKGJhZFN0YXJ0IHx8IGJhZEFTdGFydCB8fCBjbG9zZVN0YXJ0QUNwKSB7XG4gICAgICBvdmVybGFwcGluZyA9IHRydWU7XG5cbiAgICAgIC8vIHByb2plY3QgY29udHJvbCBwb2ludCBhbG9uZyBsaW5lIGZyb20gc3JjIGNlbnRyZSB0byBvdXRzaWRlIHRoZSBzcmMgc2hhcGVcbiAgICAgIC8vIChvdGhlcndpc2UgaW50ZXJzZWN0aW9uIHdpbGwgeWllbGQgbm90aGluZylcbiAgICAgIHZhciBjcEQgPSB7XG4gICAgICAgIC8vIGRlbHRhXG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gLSBzcmNQb3MueCxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSAtIHNyY1Bvcy55XG4gICAgICB9O1xuICAgICAgdmFyIGNwTCA9IE1hdGguc3FydChjcEQueCAqIGNwRC54ICsgY3BELnkgKiBjcEQueSk7IC8vIGxlbmd0aCBvZiBsaW5lXG4gICAgICB2YXIgY3BNID0ge1xuICAgICAgICAvLyBub3JtYWxpc2VkIGRlbHRhXG4gICAgICAgIHg6IGNwRC54IC8gY3BMLFxuICAgICAgICB5OiBjcEQueSAvIGNwTFxuICAgICAgfTtcbiAgICAgIHZhciByYWRpdXMgPSBNYXRoLm1heChzcmNXLCBzcmNIKTtcbiAgICAgIHZhciBjcFByb2ogPSB7XG4gICAgICAgIC8vICoyIHJhZGl1cyBndWFyYW50ZWVzIG91dHNpZGUgc2hhcGVcbiAgICAgICAgeDogcnMuY3RybHB0c1swXSArIGNwTS54ICogMiAqIHJhZGl1cyxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSArIGNwTS55ICogMiAqIHJhZGl1c1xuICAgICAgfTtcbiAgICAgIHZhciBzcmNDdHJsUHRJbnRuID0gc3JjU2hhcGUuaW50ZXJzZWN0TGluZShzcmNQb3MueCwgc3JjUG9zLnksIHNyY1csIHNyY0gsIGNwUHJvai54LCBjcFByb2oueSwgMCwgc3JjQ29ybmVyUmFkaXVzLCBzcmNScyk7XG4gICAgICBpZiAoY2xvc2VTdGFydEFDcCkge1xuICAgICAgICBycy5jdHJscHRzWzBdID0gcnMuY3RybHB0c1swXSArIGNwTS54ICogKG1pbkNwQURpc3QgLSBzdGFydEFDcERpc3QpO1xuICAgICAgICBycy5jdHJscHRzWzFdID0gcnMuY3RybHB0c1sxXSArIGNwTS55ICogKG1pbkNwQURpc3QgLSBzdGFydEFDcERpc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnMuY3RybHB0c1swXSA9IHNyY0N0cmxQdEludG5bMF0gKyBjcE0ueCAqIG1pbkNwQURpc3Q7XG4gICAgICAgIHJzLmN0cmxwdHNbMV0gPSBzcmNDdHJsUHRJbnRuWzFdICsgY3BNLnkgKiBtaW5DcEFEaXN0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYmFkRW5kIHx8IGJhZEFFbmQgfHwgY2xvc2VFbmRBQ3ApIHtcbiAgICAgIG92ZXJsYXBwaW5nID0gdHJ1ZTtcblxuICAgICAgLy8gcHJvamVjdCBjb250cm9sIHBvaW50IGFsb25nIGxpbmUgZnJvbSB0Z3QgY2VudHJlIHRvIG91dHNpZGUgdGhlIHRndCBzaGFwZVxuICAgICAgLy8gKG90aGVyd2lzZSBpbnRlcnNlY3Rpb24gd2lsbCB5aWVsZCBub3RoaW5nKVxuICAgICAgdmFyIF9jcEQgPSB7XG4gICAgICAgIC8vIGRlbHRhXG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gLSB0Z3RQb3MueCxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSAtIHRndFBvcy55XG4gICAgICB9O1xuICAgICAgdmFyIF9jcEwgPSBNYXRoLnNxcnQoX2NwRC54ICogX2NwRC54ICsgX2NwRC55ICogX2NwRC55KTsgLy8gbGVuZ3RoIG9mIGxpbmVcbiAgICAgIHZhciBfY3BNID0ge1xuICAgICAgICAvLyBub3JtYWxpc2VkIGRlbHRhXG4gICAgICAgIHg6IF9jcEQueCAvIF9jcEwsXG4gICAgICAgIHk6IF9jcEQueSAvIF9jcExcbiAgICAgIH07XG4gICAgICB2YXIgX3JhZGl1cyA9IE1hdGgubWF4KHNyY1csIHNyY0gpO1xuICAgICAgdmFyIF9jcFByb2ogPSB7XG4gICAgICAgIC8vICoyIHJhZGl1cyBndWFyYW50ZWVzIG91dHNpZGUgc2hhcGVcbiAgICAgICAgeDogcnMuY3RybHB0c1swXSArIF9jcE0ueCAqIDIgKiBfcmFkaXVzLFxuICAgICAgICB5OiBycy5jdHJscHRzWzFdICsgX2NwTS55ICogMiAqIF9yYWRpdXNcbiAgICAgIH07XG4gICAgICB2YXIgdGd0Q3RybFB0SW50biA9IHRndFNoYXBlLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0Z3RXLCB0Z3RILCBfY3BQcm9qLngsIF9jcFByb2oueSwgMCwgdGd0Q29ybmVyUmFkaXVzLCB0Z3RScyk7XG4gICAgICBpZiAoY2xvc2VFbmRBQ3ApIHtcbiAgICAgICAgcnMuY3RybHB0c1swXSA9IHJzLmN0cmxwdHNbMF0gKyBfY3BNLnggKiAobWluQ3BBRGlzdCAtIGVuZEFDcERpc3QpO1xuICAgICAgICBycy5jdHJscHRzWzFdID0gcnMuY3RybHB0c1sxXSArIF9jcE0ueSAqIChtaW5DcEFEaXN0IC0gZW5kQUNwRGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBycy5jdHJscHRzWzBdID0gdGd0Q3RybFB0SW50blswXSArIF9jcE0ueCAqIG1pbkNwQURpc3Q7XG4gICAgICAgIHJzLmN0cmxwdHNbMV0gPSB0Z3RDdHJsUHRJbnRuWzFdICsgX2NwTS55ICogbWluQ3BBRGlzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJsYXBwaW5nKSB7XG4gICAgICAvLyByZWNhbGMgZW5kcHRzXG4gICAgICB0aGlzLmZpbmRFbmRwb2ludHMoZWRnZSk7XG4gICAgfVxuICB9XG59O1xuQlJwJGMuc3RvcmVBbGxwdHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAocnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdiZXppZXInIHx8IHJzLmVkZ2VUeXBlID09PSAnc2VsZicgfHwgcnMuZWRnZVR5cGUgPT09ICdjb21wb3VuZCcpIHtcbiAgICBycy5hbGxwdHMgPSBbXTtcbiAgICBycy5hbGxwdHMucHVzaChycy5zdGFydFgsIHJzLnN0YXJ0WSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgKyAxIDwgcnMuY3RybHB0cy5sZW5ndGg7IGIgKz0gMikge1xuICAgICAgLy8gY3RybCBwdCBpdHNlbGZcbiAgICAgIHJzLmFsbHB0cy5wdXNoKHJzLmN0cmxwdHNbYl0sIHJzLmN0cmxwdHNbYiArIDFdKTtcblxuICAgICAgLy8gdGhlIG1pZHB0IGJldHdlZW4gY3RybHB0cyBhcyBpbnRlcm1lZGlhdGUgZGVzdGluYXRpb24gcHRzXG4gICAgICBpZiAoYiArIDMgPCBycy5jdHJscHRzLmxlbmd0aCkge1xuICAgICAgICBycy5hbGxwdHMucHVzaCgocnMuY3RybHB0c1tiXSArIHJzLmN0cmxwdHNbYiArIDJdKSAvIDIsIChycy5jdHJscHRzW2IgKyAxXSArIHJzLmN0cmxwdHNbYiArIDNdKSAvIDIpO1xuICAgICAgfVxuICAgIH1cbiAgICBycy5hbGxwdHMucHVzaChycy5lbmRYLCBycy5lbmRZKTtcbiAgICB2YXIgbSwgbXQ7XG4gICAgaWYgKHJzLmN0cmxwdHMubGVuZ3RoIC8gMiAlIDIgPT09IDApIHtcbiAgICAgIG0gPSBycy5hbGxwdHMubGVuZ3RoIC8gMiAtIDE7XG4gICAgICBycy5taWRYID0gcnMuYWxscHRzW21dO1xuICAgICAgcnMubWlkWSA9IHJzLmFsbHB0c1ttICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBycy5hbGxwdHMubGVuZ3RoIC8gMiAtIDM7XG4gICAgICBtdCA9IDAuNTtcbiAgICAgIHJzLm1pZFggPSBxYmV6aWVyQXQocnMuYWxscHRzW21dLCBycy5hbGxwdHNbbSArIDJdLCBycy5hbGxwdHNbbSArIDRdLCBtdCk7XG4gICAgICBycy5taWRZID0gcWJlemllckF0KHJzLmFsbHB0c1ttICsgMV0sIHJzLmFsbHB0c1ttICsgM10sIHJzLmFsbHB0c1ttICsgNV0sIG10KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcpIHtcbiAgICAvLyBuZWVkIHRvIGNhbGMgdGhlc2UgYWZ0ZXIgZW5kcHRzXG4gICAgcnMuYWxscHRzID0gW3JzLnN0YXJ0WCwgcnMuc3RhcnRZLCBycy5lbmRYLCBycy5lbmRZXTtcblxuICAgIC8vIGRlZmF1bHQgbWlkcHQgZm9yIGxhYmVscyBldGNcbiAgICBycy5taWRYID0gKHJzLnN0YXJ0WCArIHJzLmVuZFggKyBycy5hcnJvd1N0YXJ0WCArIHJzLmFycm93RW5kWCkgLyA0O1xuICAgIHJzLm1pZFkgPSAocnMuc3RhcnRZICsgcnMuZW5kWSArIHJzLmFycm93U3RhcnRZICsgcnMuYXJyb3dFbmRZKSAvIDQ7XG4gIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycpIHtcbiAgICBycy5hbGxwdHMgPSBbXTtcbiAgICBycy5hbGxwdHMucHVzaChycy5zdGFydFgsIHJzLnN0YXJ0WSk7XG4gICAgcnMuYWxscHRzLnB1c2guYXBwbHkocnMuYWxscHRzLCBycy5zZWdwdHMpO1xuICAgIHJzLmFsbHB0cy5wdXNoKHJzLmVuZFgsIHJzLmVuZFkpO1xuICAgIGlmIChycy5pc1JvdW5kKSB7XG4gICAgICBycy5yb3VuZENvcm5lcnMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAyOyBpICsgMyA8IHJzLmFsbHB0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgcmFkaXVzID0gcnMucmFkaWlbaSAvIDIgLSAxXTtcbiAgICAgICAgdmFyIGlzQXJjUmFkaXVzID0gcnMuaXNBcmNSYWRpdXNbaSAvIDIgLSAxXTtcbiAgICAgICAgcnMucm91bmRDb3JuZXJzLnB1c2goZ2V0Um91bmRDb3JuZXIoe1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpIC0gMl0sXG4gICAgICAgICAgeTogcnMuYWxscHRzW2kgLSAxXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcnMuYWxscHRzW2ldLFxuICAgICAgICAgIHk6IHJzLmFsbHB0c1tpICsgMV0sXG4gICAgICAgICAgcmFkaXVzOiByYWRpdXNcbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpICsgMl0sXG4gICAgICAgICAgeTogcnMuYWxscHRzW2kgKyAzXVxuICAgICAgICB9LCByYWRpdXMsIGlzQXJjUmFkaXVzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChycy5zZWdwdHMubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgICAgdmFyIGkyID0gcnMuc2VncHRzLmxlbmd0aCAvIDI7XG4gICAgICB2YXIgaTEgPSBpMiAtIDI7XG4gICAgICBycy5taWRYID0gKHJzLnNlZ3B0c1tpMV0gKyBycy5zZWdwdHNbaTJdKSAvIDI7XG4gICAgICBycy5taWRZID0gKHJzLnNlZ3B0c1tpMSArIDFdICsgcnMuc2VncHRzW2kyICsgMV0pIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9pID0gcnMuc2VncHRzLmxlbmd0aCAvIDIgLSAxO1xuICAgICAgaWYgKCFycy5pc1JvdW5kKSB7XG4gICAgICAgIHJzLm1pZFggPSBycy5zZWdwdHNbX2ldO1xuICAgICAgICBycy5taWRZID0gcnMuc2VncHRzW19pICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcG9pbnQgPSB7XG4gICAgICAgICAgeDogcnMuc2VncHRzW19pXSxcbiAgICAgICAgICB5OiBycy5zZWdwdHNbX2kgKyAxXVxuICAgICAgICB9O1xuICAgICAgICB2YXIgY29ybmVyID0gcnMucm91bmRDb3JuZXJzW19pIC8gMl07XG4gICAgICAgIHZhciB2ID0gW3BvaW50LnggLSBjb3JuZXIuY3gsIHBvaW50LnkgLSBjb3JuZXIuY3ldO1xuICAgICAgICB2YXIgZmFjdG9yID0gY29ybmVyLnJhZGl1cyAvIE1hdGguc3FydChNYXRoLnBvdyh2WzBdLCAyKSArIE1hdGgucG93KHZbMV0sIDIpKTtcbiAgICAgICAgdiA9IHYubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgcmV0dXJuIGMgKiBmYWN0b3I7XG4gICAgICAgIH0pO1xuICAgICAgICBycy5taWRYID0gY29ybmVyLmN4ICsgdlswXTtcbiAgICAgICAgcnMubWlkWSA9IGNvcm5lci5jeSArIHZbMV07XG4gICAgICAgIHJzLm1pZFZlY3RvciA9IHY7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuQlJwJGMuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcnMgPSBlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAocnMubm9kZXNPdmVybGFwIHx8IG51bWJlciQxKHJzLnN0YXJ0WCkgJiYgbnVtYmVyJDEocnMuc3RhcnRZKSAmJiBudW1iZXIkMShycy5lbmRYKSAmJiBudW1iZXIkMShycy5lbmRZKSkge1xuICAgIHJzLmxvZ2dlZEVyciA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGlmICghcnMubG9nZ2VkRXJyKSB7XG4gICAgICBycy5sb2dnZWRFcnIgPSB0cnVlO1xuICAgICAgd2FybignRWRnZSBgJyArIGVkZ2UuaWQoKSArICdgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4nKTtcbiAgICB9XG4gIH1cbn07XG5CUnAkYy5maW5kRWRnZUNvbnRyb2xQb2ludHMgPSBmdW5jdGlvbiAoZWRnZXMpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgaWYgKCFlZGdlcyB8fCBlZGdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY3kgPSByLmN5O1xuICB2YXIgaGFzQ29tcG91bmRzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICB2YXIgaGFzaFRhYmxlID0ge1xuICAgIG1hcDogbmV3IE1hcCQyKCksXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQocGFpcklkKSB7XG4gICAgICB2YXIgbWFwMiA9IHRoaXMubWFwLmdldChwYWlySWRbMF0pO1xuICAgICAgaWYgKG1hcDIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWFwMi5nZXQocGFpcklkWzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQocGFpcklkLCB2YWwpIHtcbiAgICAgIHZhciBtYXAyID0gdGhpcy5tYXAuZ2V0KHBhaXJJZFswXSk7XG4gICAgICBpZiAobWFwMiA9PSBudWxsKSB7XG4gICAgICAgIG1hcDIgPSBuZXcgTWFwJDIoKTtcbiAgICAgICAgdGhpcy5tYXAuc2V0KHBhaXJJZFswXSwgbWFwMik7XG4gICAgICB9XG4gICAgICBtYXAyLnNldChwYWlySWRbMV0sIHZhbCk7XG4gICAgfVxuICB9O1xuICB2YXIgcGFpcklkcyA9IFtdO1xuICB2YXIgaGF5c3RhY2tFZGdlcyA9IFtdO1xuXG4gIC8vIGNyZWF0ZSBhIHRhYmxlIG9mIGVkZ2UgKHNyYywgdGd0KSA9PiBsaXN0IG9mIGVkZ2VzIGJldHdlZW4gdGhlbVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgIHZhciBjdXJ2ZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWU7XG5cbiAgICAvLyBpZ25vcmUgZWRnZXMgd2hvIGFyZSBub3QgdG8gYmUgZGlzcGxheWVkXG4gICAgLy8gdGhleSBzaG91bGRuJ3QgdGFrZSB1cCBzcGFjZVxuICAgIGlmIChlZGdlLnJlbW92ZWQoKSB8fCAhZWRnZS50YWtlc1VwU3BhY2UoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnaGF5c3RhY2snKSB7XG4gICAgICBoYXlzdGFja0VkZ2VzLnB1c2goZWRnZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGVkZ2VJc1VuYnVuZGxlZCA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCdzZWdtZW50cycpIHx8IGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodCcgfHwgY3VydmVTdHlsZSA9PT0gJ3N0cmFpZ2h0LXRyaWFuZ2xlJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCd0YXhpJyk7XG4gICAgdmFyIGVkZ2VJc0JlemllciA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlID09PSAnYmV6aWVyJztcbiAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgdmFyIHNyY0luZGV4ID0gc3JjLnBvb2xJbmRleCgpO1xuICAgIHZhciB0Z3RJbmRleCA9IHRndC5wb29sSW5kZXgoKTtcbiAgICB2YXIgcGFpcklkID0gW3NyY0luZGV4LCB0Z3RJbmRleF0uc29ydCgpO1xuICAgIHZhciB0YWJsZUVudHJ5ID0gaGFzaFRhYmxlLmdldChwYWlySWQpO1xuICAgIGlmICh0YWJsZUVudHJ5ID09IG51bGwpIHtcbiAgICAgIHRhYmxlRW50cnkgPSB7XG4gICAgICAgIGVsZXM6IFtdXG4gICAgICB9O1xuICAgICAgaGFzaFRhYmxlLnNldChwYWlySWQsIHRhYmxlRW50cnkpO1xuICAgICAgcGFpcklkcy5wdXNoKHBhaXJJZCk7XG4gICAgfVxuICAgIHRhYmxlRW50cnkuZWxlcy5wdXNoKGVkZ2UpO1xuICAgIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICAgIHRhYmxlRW50cnkuaGFzVW5idW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVkZ2VJc0Jlemllcikge1xuICAgICAgdGFibGVFbnRyeS5oYXNCZXppZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBlYWNoIHBhaXIgKHNyYywgdGd0KSwgY3JlYXRlIHRoZSBjdHJsIHB0c1xuICAvLyBOZXN0ZWQgZm9yIGxvb3AgaXMgT0s7IHRvdGFsIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBib3RoIGxvb3BzID0gZWRnZUNvdW50XG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKHApIHtcbiAgICB2YXIgcGFpcklkID0gcGFpcklkc1twXTtcbiAgICB2YXIgcGFpckluZm8gPSBoYXNoVGFibGUuZ2V0KHBhaXJJZCk7XG4gICAgdmFyIHN3YXBwZWRwYWlySW5mbyA9IHZvaWQgMDtcbiAgICBpZiAoIXBhaXJJbmZvLmhhc1VuYnVuZGxlZCkge1xuICAgICAgdmFyIHBsbEVkZ2VzID0gcGFpckluZm8uZWxlc1swXS5wYXJhbGxlbEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLmlzQnVuZGxlZEJlemllcigpO1xuICAgICAgfSk7XG4gICAgICBjbGVhckFycmF5KHBhaXJJbmZvLmVsZXMpO1xuICAgICAgcGxsRWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICByZXR1cm4gcGFpckluZm8uZWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGZvciBlYWNoIHBhaXIgaWQsIHRoZSBlZGdlcyBzaG91bGQgYmUgc29ydGVkIGJ5IGluZGV4XG4gICAgICBwYWlySW5mby5lbGVzLnNvcnQoZnVuY3Rpb24gKGVkZ2UxLCBlZGdlMikge1xuICAgICAgICByZXR1cm4gZWRnZTEucG9vbEluZGV4KCkgLSBlZGdlMi5wb29sSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgZmlyc3RFZGdlID0gcGFpckluZm8uZWxlc1swXTtcbiAgICB2YXIgc3JjID0gZmlyc3RFZGdlLnNvdXJjZSgpO1xuICAgIHZhciB0Z3QgPSBmaXJzdEVkZ2UudGFyZ2V0KCk7XG5cbiAgICAvLyBtYWtlIHN1cmUgc3JjL3RndCBkaXN0aW5jdGlvbiBpcyBjb25zaXN0ZW50IHcuci50LiBwYWlySWRcbiAgICBpZiAoc3JjLnBvb2xJbmRleCgpID4gdGd0LnBvb2xJbmRleCgpKSB7XG4gICAgICB2YXIgdGVtcCA9IHNyYztcbiAgICAgIHNyYyA9IHRndDtcbiAgICAgIHRndCA9IHRlbXA7XG4gICAgfVxuICAgIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MgPSBzcmMucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0UG9zID0gcGFpckluZm8udGd0UG9zID0gdGd0LnBvc2l0aW9uKCk7XG4gICAgdmFyIHNyY1cgPSBwYWlySW5mby5zcmNXID0gc3JjLm91dGVyV2lkdGgoKTtcbiAgICB2YXIgc3JjSCA9IHBhaXJJbmZvLnNyY0ggPSBzcmMub3V0ZXJIZWlnaHQoKTtcbiAgICB2YXIgdGd0VyA9IHBhaXJJbmZvLnRndFcgPSB0Z3Qub3V0ZXJXaWR0aCgpO1xuICAgIHZhciB0Z3RIID0gcGFpckluZm8udGd0SCA9IHRndC5vdXRlckhlaWdodCgpO1xuICAgIHZhciBzcmNTaGFwZSA9IHBhaXJJbmZvLnNyY1NoYXBlID0gci5ub2RlU2hhcGVzW190aGlzLmdldE5vZGVTaGFwZShzcmMpXTtcbiAgICB2YXIgdGd0U2hhcGUgPSBwYWlySW5mby50Z3RTaGFwZSA9IHIubm9kZVNoYXBlc1tfdGhpcy5nZXROb2RlU2hhcGUodGd0KV07XG4gICAgdmFyIHNyY0Nvcm5lclJhZGl1cyA9IHBhaXJJbmZvLnNyY0Nvcm5lclJhZGl1cyA9IHNyYy5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogc3JjLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnBmVmFsdWU7XG4gICAgdmFyIHRndENvcm5lclJhZGl1cyA9IHBhaXJJbmZvLnRndENvcm5lclJhZGl1cyA9IHRndC5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogdGd0LnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnBmVmFsdWU7XG4gICAgdmFyIHRndFJzID0gcGFpckluZm8udGd0UnMgPSB0Z3QuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIHNyY1JzID0gcGFpckluZm8uc3JjUnMgPSBzcmMuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcGFpckluZm8uZGlyQ291bnRzID0ge1xuICAgICAgJ25vcnRoJzogMCxcbiAgICAgICd3ZXN0JzogMCxcbiAgICAgICdzb3V0aCc6IDAsXG4gICAgICAnZWFzdCc6IDAsXG4gICAgICAnbm9ydGh3ZXN0JzogMCxcbiAgICAgICdzb3V0aHdlc3QnOiAwLFxuICAgICAgJ25vcnRoZWFzdCc6IDAsXG4gICAgICAnc291dGhlYXN0JzogMFxuICAgIH07XG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcGFpckluZm8uZWxlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgX2VkZ2UgPSBwYWlySW5mby5lbGVzW19pMl07XG4gICAgICB2YXIgcnMgPSBfZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBfY3VydmVTdHlsZSA9IF9lZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgICAgIHZhciBfZWRnZUlzVW5idW5kbGVkID0gX2N1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBfY3VydmVTdHlsZS5lbmRzV2l0aCgnc2VnbWVudHMnKSB8fCBfY3VydmVTdHlsZS5lbmRzV2l0aCgndGF4aScpO1xuXG4gICAgICAvLyB3aGV0aGVyIHRoZSBub3JtYWxpc2VkIHBhaXIgb3JkZXIgaXMgdGhlIHJldmVyc2Ugb2YgdGhlIGVkZ2UncyBzcmMtdGd0IG9yZGVyXG4gICAgICB2YXIgZWRnZUlzU3dhcHBlZCA9ICFzcmMuc2FtZShfZWRnZS5zb3VyY2UoKSk7XG4gICAgICBpZiAoIXBhaXJJbmZvLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24gJiYgc3JjICE9PSB0Z3QgJiYgKHBhaXJJbmZvLmhhc0JlemllciB8fCBwYWlySW5mby5oYXNVbmJ1bmRsZWQpKSB7XG4gICAgICAgIHBhaXJJbmZvLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24gPSB0cnVlO1xuXG4gICAgICAgIC8vIHB0IG91dHNpZGUgc3JjIHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuICAgICAgICB2YXIgc3JjT3V0c2lkZSA9IHNyY1NoYXBlLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNXLCBzcmNILCB0Z3RQb3MueCwgdGd0UG9zLnksIDAsIHNyY0Nvcm5lclJhZGl1cywgc3JjUnMpO1xuICAgICAgICB2YXIgc3JjSW50biA9IHBhaXJJbmZvLnNyY0ludG4gPSBzcmNPdXRzaWRlO1xuXG4gICAgICAgIC8vIHB0IG91dHNpZGUgdGd0IHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuICAgICAgICB2YXIgdGd0T3V0c2lkZSA9IHRndFNoYXBlLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0Z3RXLCB0Z3RILCBzcmNQb3MueCwgc3JjUG9zLnksIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgICAgICB2YXIgdGd0SW50biA9IHBhaXJJbmZvLnRndEludG4gPSB0Z3RPdXRzaWRlO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uUHRzID0gcGFpckluZm8uaW50ZXJzZWN0aW9uUHRzID0ge1xuICAgICAgICAgIHgxOiBzcmNPdXRzaWRlWzBdLFxuICAgICAgICAgIHgyOiB0Z3RPdXRzaWRlWzBdLFxuICAgICAgICAgIHkxOiBzcmNPdXRzaWRlWzFdLFxuICAgICAgICAgIHkyOiB0Z3RPdXRzaWRlWzFdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBwb3NQdHMgPSBwYWlySW5mby5wb3NQdHMgPSB7XG4gICAgICAgICAgeDE6IHNyY1Bvcy54LFxuICAgICAgICAgIHgyOiB0Z3RQb3MueCxcbiAgICAgICAgICB5MTogc3JjUG9zLnksXG4gICAgICAgICAgeTI6IHRndFBvcy55XG4gICAgICAgIH07XG4gICAgICAgIHZhciBkeSA9IHRndE91dHNpZGVbMV0gLSBzcmNPdXRzaWRlWzFdO1xuICAgICAgICB2YXIgZHggPSB0Z3RPdXRzaWRlWzBdIC0gc3JjT3V0c2lkZVswXTtcbiAgICAgICAgdmFyIGwgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICB2YXIgdmVjdG9yID0gcGFpckluZm8udmVjdG9yID0ge1xuICAgICAgICAgIHg6IGR4LFxuICAgICAgICAgIHk6IGR5XG4gICAgICAgIH07XG4gICAgICAgIHZhciB2ZWN0b3JOb3JtID0gcGFpckluZm8udmVjdG9yTm9ybSA9IHtcbiAgICAgICAgICB4OiB2ZWN0b3IueCAvIGwsXG4gICAgICAgICAgeTogdmVjdG9yLnkgLyBsXG4gICAgICAgIH07XG4gICAgICAgIHZhciB2ZWN0b3JOb3JtSW52ZXJzZSA9IHtcbiAgICAgICAgICB4OiAtdmVjdG9yTm9ybS55LFxuICAgICAgICAgIHk6IHZlY3Rvck5vcm0ueFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIG5vZGUgc2hhcGVzIG92ZXJsYXAsIHRoZW4gbm8gY3RybCBwdHMgdG8gZHJhd1xuICAgICAgICBwYWlySW5mby5ub2Rlc092ZXJsYXAgPSAhbnVtYmVyJDEobCkgfHwgdGd0U2hhcGUuY2hlY2tQb2ludChzcmNPdXRzaWRlWzBdLCBzcmNPdXRzaWRlWzFdLCAwLCB0Z3RXLCB0Z3RILCB0Z3RQb3MueCwgdGd0UG9zLnksIHRndENvcm5lclJhZGl1cywgdGd0UnMpIHx8IHNyY1NoYXBlLmNoZWNrUG9pbnQodGd0T3V0c2lkZVswXSwgdGd0T3V0c2lkZVsxXSwgMCwgc3JjVywgc3JjSCwgc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNDb3JuZXJSYWRpdXMsIHNyY1JzKTtcbiAgICAgICAgcGFpckluZm8udmVjdG9yTm9ybUludmVyc2UgPSB2ZWN0b3JOb3JtSW52ZXJzZTtcbiAgICAgICAgc3dhcHBlZHBhaXJJbmZvID0ge1xuICAgICAgICAgIG5vZGVzT3ZlcmxhcDogcGFpckluZm8ubm9kZXNPdmVybGFwLFxuICAgICAgICAgIGRpckNvdW50czogcGFpckluZm8uZGlyQ291bnRzLFxuICAgICAgICAgIGNhbGN1bGF0ZWRJbnRlcnNlY3Rpb246IHRydWUsXG4gICAgICAgICAgaGFzQmV6aWVyOiBwYWlySW5mby5oYXNCZXppZXIsXG4gICAgICAgICAgaGFzVW5idW5kbGVkOiBwYWlySW5mby5oYXNVbmJ1bmRsZWQsXG4gICAgICAgICAgZWxlczogcGFpckluZm8uZWxlcyxcbiAgICAgICAgICBzcmNQb3M6IHRndFBvcyxcbiAgICAgICAgICB0Z3RQb3M6IHNyY1BvcyxcbiAgICAgICAgICBzcmNXOiB0Z3RXLFxuICAgICAgICAgIHNyY0g6IHRndEgsXG4gICAgICAgICAgdGd0Vzogc3JjVyxcbiAgICAgICAgICB0Z3RIOiBzcmNILFxuICAgICAgICAgIHNyY0ludG46IHRndEludG4sXG4gICAgICAgICAgdGd0SW50bjogc3JjSW50bixcbiAgICAgICAgICBzcmNTaGFwZTogdGd0U2hhcGUsXG4gICAgICAgICAgdGd0U2hhcGU6IHNyY1NoYXBlLFxuICAgICAgICAgIHBvc1B0czoge1xuICAgICAgICAgICAgeDE6IHBvc1B0cy54MixcbiAgICAgICAgICAgIHkxOiBwb3NQdHMueTIsXG4gICAgICAgICAgICB4MjogcG9zUHRzLngxLFxuICAgICAgICAgICAgeTI6IHBvc1B0cy55MVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJzZWN0aW9uUHRzOiB7XG4gICAgICAgICAgICB4MTogaW50ZXJzZWN0aW9uUHRzLngyLFxuICAgICAgICAgICAgeTE6IGludGVyc2VjdGlvblB0cy55MixcbiAgICAgICAgICAgIHgyOiBpbnRlcnNlY3Rpb25QdHMueDEsXG4gICAgICAgICAgICB5MjogaW50ZXJzZWN0aW9uUHRzLnkxXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZWN0b3I6IHtcbiAgICAgICAgICAgIHg6IC12ZWN0b3IueCxcbiAgICAgICAgICAgIHk6IC12ZWN0b3IueVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmVjdG9yTm9ybToge1xuICAgICAgICAgICAgeDogLXZlY3Rvck5vcm0ueCxcbiAgICAgICAgICAgIHk6IC12ZWN0b3JOb3JtLnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZlY3Rvck5vcm1JbnZlcnNlOiB7XG4gICAgICAgICAgICB4OiAtdmVjdG9yTm9ybUludmVyc2UueCxcbiAgICAgICAgICAgIHk6IC12ZWN0b3JOb3JtSW52ZXJzZS55XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHBhc3NlZFBhaXJJbmZvID0gZWRnZUlzU3dhcHBlZCA/IHN3YXBwZWRwYWlySW5mbyA6IHBhaXJJbmZvO1xuICAgICAgcnMubm9kZXNPdmVybGFwID0gcGFzc2VkUGFpckluZm8ubm9kZXNPdmVybGFwO1xuICAgICAgcnMuc3JjSW50biA9IHBhc3NlZFBhaXJJbmZvLnNyY0ludG47XG4gICAgICBycy50Z3RJbnRuID0gcGFzc2VkUGFpckluZm8udGd0SW50bjtcbiAgICAgIHJzLmlzUm91bmQgPSBfY3VydmVTdHlsZS5zdGFydHNXaXRoKCdyb3VuZCcpO1xuICAgICAgaWYgKGhhc0NvbXBvdW5kcyAmJiAoc3JjLmlzUGFyZW50KCkgfHwgc3JjLmlzQ2hpbGQoKSB8fCB0Z3QuaXNQYXJlbnQoKSB8fCB0Z3QuaXNDaGlsZCgpKSAmJiAoc3JjLnBhcmVudHMoKS5hbnlTYW1lKHRndCkgfHwgdGd0LnBhcmVudHMoKS5hbnlTYW1lKHNyYykgfHwgc3JjLnNhbWUodGd0KSAmJiBzcmMuaXNQYXJlbnQoKSkpIHtcbiAgICAgICAgX3RoaXMuZmluZENvbXBvdW5kTG9vcFBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8sIF9pMiwgX2VkZ2VJc1VuYnVuZGxlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNyYyA9PT0gdGd0KSB7XG4gICAgICAgIF90aGlzLmZpbmRMb29wUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbywgX2kyLCBfZWRnZUlzVW5idW5kbGVkKTtcbiAgICAgIH0gZWxzZSBpZiAoX2N1cnZlU3R5bGUuZW5kc1dpdGgoJ3NlZ21lbnRzJykpIHtcbiAgICAgICAgX3RoaXMuZmluZFNlZ21lbnRzUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbyk7XG4gICAgICB9IGVsc2UgaWYgKF9jdXJ2ZVN0eWxlLmVuZHNXaXRoKCd0YXhpJykpIHtcbiAgICAgICAgX3RoaXMuZmluZFRheGlQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoX2N1cnZlU3R5bGUgPT09ICdzdHJhaWdodCcgfHwgIV9lZGdlSXNVbmJ1bmRsZWQgJiYgcGFpckluZm8uZWxlcy5sZW5ndGggJSAyID09PSAxICYmIF9pMiA9PT0gTWF0aC5mbG9vcihwYWlySW5mby5lbGVzLmxlbmd0aCAvIDIpKSB7XG4gICAgICAgIF90aGlzLmZpbmRTdHJhaWdodEVkZ2VQb2ludHMoX2VkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuZmluZEJlemllclBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8sIF9pMiwgX2VkZ2VJc1VuYnVuZGxlZCwgZWRnZUlzU3dhcHBlZCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5maW5kRW5kcG9pbnRzKF9lZGdlKTtcbiAgICAgIF90aGlzLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvKTtcbiAgICAgIF90aGlzLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKF9lZGdlKTtcbiAgICAgIF90aGlzLnN0b3JlQWxscHRzKF9lZGdlKTtcbiAgICAgIF90aGlzLnN0b3JlRWRnZVByb2plY3Rpb25zKF9lZGdlKTtcbiAgICAgIF90aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKF9lZGdlKTtcbiAgICAgIF90aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoX2VkZ2UpO1xuICAgICAgX3RoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoX2VkZ2UpO1xuICAgIH0gLy8gZm9yIHBhaXIgZWRnZXNcbiAgfTtcbiAgZm9yICh2YXIgcCA9IDA7IHAgPCBwYWlySWRzLmxlbmd0aDsgcCsrKSB7XG4gICAgX2xvb3AocCk7XG4gIH0gLy8gZm9yIHBhaXIgaWRzXG5cbiAgLy8gaGF5c3RhY2tzIGF2b2lkIHRoZSBleHBlbnNlIG9mIHBhaXJJbmZvIHN0dWZmIChpbnRlcnNlY3Rpb25zIGV0Yy4pXG4gIHRoaXMuZmluZEhheXN0YWNrUG9pbnRzKGhheXN0YWNrRWRnZXMpO1xufTtcbmZ1bmN0aW9uIGdldFB0cyhwdHMpIHtcbiAgdmFyIHJldFB0cyA9IFtdO1xuICBpZiAocHRzID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgeCA9IHB0c1tpXTtcbiAgICB2YXIgeSA9IHB0c1tpICsgMV07XG4gICAgcmV0UHRzLnB1c2goe1xuICAgICAgeDogeCxcbiAgICAgIHk6IHlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmV0UHRzO1xufVxuQlJwJGMuZ2V0U2VnbWVudFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciB0eXBlID0gcnMuZWRnZVR5cGU7XG4gIGlmICh0eXBlID09PSAnc2VnbWVudHMnKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gICAgcmV0dXJuIGdldFB0cyhycy5zZWdwdHMpO1xuICB9XG59O1xuQlJwJGMuZ2V0Q29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciB0eXBlID0gcnMuZWRnZVR5cGU7XG4gIGlmICh0eXBlID09PSAnYmV6aWVyJyB8fCB0eXBlID09PSAnbXVsdGliZXppZXInIHx8IHR5cGUgPT09ICdzZWxmJyB8fCB0eXBlID09PSAnY29tcG91bmQnKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gICAgcmV0dXJuIGdldFB0cyhycy5jdHJscHRzKTtcbiAgfVxufTtcbkJScCRjLmdldEVkZ2VNaWRwb2ludCA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVkZ2UpO1xuICByZXR1cm4ge1xuICAgIHg6IHJzLm1pZFgsXG4gICAgeTogcnMubWlkWVxuICB9O1xufTtcblxudmFyIEJScCRiID0ge307XG5CUnAkYi5tYW51YWxFbmRwdFRvUHggPSBmdW5jdGlvbiAobm9kZSwgcHJvcCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBucG9zID0gbm9kZS5wb3NpdGlvbigpO1xuICB2YXIgdyA9IG5vZGUub3V0ZXJXaWR0aCgpO1xuICB2YXIgaCA9IG5vZGUub3V0ZXJIZWlnaHQoKTtcbiAgdmFyIHJzID0gbm9kZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgaWYgKHByb3AudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIHAgPSBbcHJvcC5wZlZhbHVlWzBdLCBwcm9wLnBmVmFsdWVbMV1dO1xuICAgIGlmIChwcm9wLnVuaXRzWzBdID09PSAnJScpIHtcbiAgICAgIHBbMF0gPSBwWzBdICogdztcbiAgICB9XG4gICAgaWYgKHByb3AudW5pdHNbMV0gPT09ICclJykge1xuICAgICAgcFsxXSA9IHBbMV0gKiBoO1xuICAgIH1cbiAgICBwWzBdICs9IG5wb3MueDtcbiAgICBwWzFdICs9IG5wb3MueTtcbiAgICByZXR1cm4gcDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYW5nbGUgPSBwcm9wLnBmVmFsdWVbMF07XG4gICAgYW5nbGUgPSAtTWF0aC5QSSAvIDIgKyBhbmdsZTsgLy8gc3RhcnQgYXQgMTIgbydjbG9ja1xuXG4gICAgdmFyIGwgPSAyICogTWF0aC5tYXgodywgaCk7XG4gICAgdmFyIF9wID0gW25wb3MueCArIE1hdGguY29zKGFuZ2xlKSAqIGwsIG5wb3MueSArIE1hdGguc2luKGFuZ2xlKSAqIGxdO1xuICAgIHJldHVybiByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUobm9kZSldLmludGVyc2VjdExpbmUobnBvcy54LCBucG9zLnksIHcsIGgsIF9wWzBdLCBfcFsxXSwgMCwgbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlLCBycyk7XG4gIH1cbn07XG5CUnAkYi5maW5kRW5kcG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaW50ZXJzZWN0O1xuICB2YXIgc291cmNlID0gZWRnZS5zb3VyY2UoKVswXTtcbiAgdmFyIHRhcmdldCA9IGVkZ2UudGFyZ2V0KClbMF07XG4gIHZhciBzcmNQb3MgPSBzb3VyY2UucG9zaXRpb24oKTtcbiAgdmFyIHRndFBvcyA9IHRhcmdldC5wb3NpdGlvbigpO1xuICB2YXIgdGd0QXJTaGFwZSA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgdmFyIHNyY0FyU2hhcGUgPSBlZGdlLnBzdHlsZSgnc291cmNlLWFycm93LXNoYXBlJykudmFsdWU7XG4gIHZhciB0Z3REaXN0ID0gZWRnZS5wc3R5bGUoJ3RhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUnKS5wZlZhbHVlO1xuICB2YXIgc3JjRGlzdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJykucGZWYWx1ZTtcbiAgdmFyIHNyY1JzID0gc291cmNlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgdGd0UnMgPSB0YXJnZXQuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBjdXJ2ZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWU7XG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBldCA9IHJzLmVkZ2VUeXBlO1xuICB2YXIgdGF4aSA9IGN1cnZlU3R5bGUgPT09ICd0YXhpJztcbiAgdmFyIHNlbGYgPSBldCA9PT0gJ3NlbGYnIHx8IGV0ID09PSAnY29tcG91bmQnO1xuICB2YXIgYmV6aWVyID0gZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnbXVsdGliZXppZXInIHx8IHNlbGY7XG4gIHZhciBtdWx0aSA9IGV0ICE9PSAnYmV6aWVyJztcbiAgdmFyIGxpbmVzID0gZXQgPT09ICdzdHJhaWdodCcgfHwgZXQgPT09ICdzZWdtZW50cyc7XG4gIHZhciBzZWdtZW50cyA9IGV0ID09PSAnc2VnbWVudHMnO1xuICB2YXIgaGFzRW5kcHRzID0gYmV6aWVyIHx8IG11bHRpIHx8IGxpbmVzO1xuICB2YXIgb3ZlcnJpZGVFbmRwdHMgPSBzZWxmIHx8IHRheGk7XG4gIHZhciBzcmNNYW5FbmRwdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZW5kcG9pbnQnKTtcbiAgdmFyIHNyY01hbkVuZHB0VmFsID0gb3ZlcnJpZGVFbmRwdHMgPyAnb3V0c2lkZS10by1ub2RlJyA6IHNyY01hbkVuZHB0LnZhbHVlO1xuICB2YXIgc3JjQ29ybmVyUmFkaXVzID0gc291cmNlLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnZhbHVlID09PSAnYXV0bycgPyAnYXV0bycgOiBzb3VyY2UucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgdmFyIHRndE1hbkVuZHB0ID0gZWRnZS5wc3R5bGUoJ3RhcmdldC1lbmRwb2ludCcpO1xuICB2YXIgdGd0TWFuRW5kcHRWYWwgPSBvdmVycmlkZUVuZHB0cyA/ICdvdXRzaWRlLXRvLW5vZGUnIDogdGd0TWFuRW5kcHQudmFsdWU7XG4gIHZhciB0Z3RDb3JuZXJSYWRpdXMgPSB0YXJnZXQucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWUgPT09ICdhdXRvJyA/ICdhdXRvJyA6IHRhcmdldC5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlO1xuICBycy5zcmNNYW5FbmRwdCA9IHNyY01hbkVuZHB0O1xuICBycy50Z3RNYW5FbmRwdCA9IHRndE1hbkVuZHB0O1xuICB2YXIgcDE7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiB0YXJnZXQgc2lkZVxuICB2YXIgcDI7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiBzb3VyY2Ugc2lkZVxuXG4gIHZhciBwMV9pOyAvLyBwb2ludCB0byBpbnRlcnNlY3Qgd2l0aCB0YXJnZXQgc2hhcGVcbiAgdmFyIHAyX2k7IC8vIHBvaW50IHRvIGludGVyc2VjdCB3aXRoIHNvdXJjZSBzaGFwZVxuXG4gIGlmIChiZXppZXIpIHtcbiAgICB2YXIgY3BTdGFydCA9IFtycy5jdHJscHRzWzBdLCBycy5jdHJscHRzWzFdXTtcbiAgICB2YXIgY3BFbmQgPSBtdWx0aSA/IFtycy5jdHJscHRzW3JzLmN0cmxwdHMubGVuZ3RoIC0gMl0sIHJzLmN0cmxwdHNbcnMuY3RybHB0cy5sZW5ndGggLSAxXV0gOiBjcFN0YXJ0O1xuICAgIHAxID0gY3BFbmQ7XG4gICAgcDIgPSBjcFN0YXJ0O1xuICB9IGVsc2UgaWYgKGxpbmVzKSB7XG4gICAgdmFyIHNyY0Fycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3RndFBvcy54LCB0Z3RQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UoMCwgMik7XG4gICAgdmFyIHRndEFycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3NyY1Bvcy54LCBzcmNQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UocnMuc2VncHRzLmxlbmd0aCAtIDIpO1xuICAgIHAxID0gdGd0QXJyb3dGcm9tUHQ7XG4gICAgcDIgPSBzcmNBcnJvd0Zyb21QdDtcbiAgfVxuICBpZiAodGd0TWFuRW5kcHRWYWwgPT09ICdpbnNpZGUtdG8tbm9kZScpIHtcbiAgICBpbnRlcnNlY3QgPSBbdGd0UG9zLngsIHRndFBvcy55XTtcbiAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdC51bml0cykge1xuICAgIGludGVyc2VjdCA9IHRoaXMubWFudWFsRW5kcHRUb1B4KHRhcmdldCwgdGd0TWFuRW5kcHQpO1xuICB9IGVsc2UgaWYgKHRndE1hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lJykge1xuICAgIGludGVyc2VjdCA9IHJzLnRndEludG47IC8vIHVzZSBjYWNoZWQgdmFsdWUgZnJvbSBjdHJscHQgY2FsY1xuICB9IGVsc2Uge1xuICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnKSB7XG4gICAgICBwMV9pID0gcDE7XG4gICAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICBwMV9pID0gW3NyY1Bvcy54LCBzcmNQb3MueV07XG4gICAgfVxuICAgIGludGVyc2VjdCA9IHIubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZSh0YXJnZXQpXS5pbnRlcnNlY3RMaW5lKHRndFBvcy54LCB0Z3RQb3MueSwgdGFyZ2V0Lm91dGVyV2lkdGgoKSwgdGFyZ2V0Lm91dGVySGVpZ2h0KCksIHAxX2lbMF0sIHAxX2lbMV0sIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICB2YXIgdHJzID0gdGFyZ2V0Ll9wcml2YXRlLnJzY3JhdGNoO1xuICAgICAgdmFyIGx3ID0gdHJzLmxhYmVsV2lkdGg7XG4gICAgICB2YXIgbGggPSB0cnMubGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgbHggPSB0cnMubGFiZWxYO1xuICAgICAgdmFyIGx5ID0gdHJzLmxhYmVsWTtcbiAgICAgIHZhciBsdzIgPSBsdyAvIDI7XG4gICAgICB2YXIgbGgyID0gbGggLyAyO1xuICAgICAgdmFyIHZhID0gdGFyZ2V0LnBzdHlsZSgndGV4dC12YWxpZ24nKS52YWx1ZTtcbiAgICAgIGlmICh2YSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgbHkgLT0gbGgyO1xuICAgICAgfSBlbHNlIGlmICh2YSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgbHkgKz0gbGgyO1xuICAgICAgfVxuICAgICAgdmFyIGhhID0gdGFyZ2V0LnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcbiAgICAgIGlmIChoYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGx4IC09IGx3MjtcbiAgICAgIH0gZWxzZSBpZiAoaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgbHggKz0gbHcyO1xuICAgICAgfVxuICAgICAgdmFyIGxhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDFfaVswXSwgcDFfaVsxXSwgW2x4IC0gbHcyLCBseSAtIGxoMiwgbHggKyBsdzIsIGx5IC0gbGgyLCBseCArIGx3MiwgbHkgKyBsaDIsIGx4IC0gbHcyLCBseSArIGxoMl0sIHRndFBvcy54LCB0Z3RQb3MueSk7XG4gICAgICBpZiAobGFiZWxJbnRlcnNlY3QubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgcmVmUHQgPSBzcmNQb3M7XG4gICAgICAgIHZhciBpbnRTcWRpc3QgPSBzcWRpc3QocmVmUHQsIGFycmF5MnBvaW50KGludGVyc2VjdCkpO1xuICAgICAgICB2YXIgbGFiSW50U3FkaXN0ID0gc3FkaXN0KHJlZlB0LCBhcnJheTJwb2ludChsYWJlbEludGVyc2VjdCkpO1xuICAgICAgICB2YXIgbWluU3FEaXN0ID0gaW50U3FkaXN0O1xuICAgICAgICBpZiAobGFiSW50U3FkaXN0IDwgaW50U3FkaXN0KSB7XG4gICAgICAgICAgaW50ZXJzZWN0ID0gbGFiZWxJbnRlcnNlY3Q7XG4gICAgICAgICAgbWluU3FEaXN0ID0gbGFiSW50U3FkaXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbEludGVyc2VjdC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgdmFyIGxhYkludDJTcURpc3QgPSBzcWRpc3QocmVmUHQsIHtcbiAgICAgICAgICAgIHg6IGxhYmVsSW50ZXJzZWN0WzJdLFxuICAgICAgICAgICAgeTogbGFiZWxJbnRlcnNlY3RbM11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobGFiSW50MlNxRGlzdCA8IG1pblNxRGlzdCkge1xuICAgICAgICAgICAgaW50ZXJzZWN0ID0gW2xhYmVsSW50ZXJzZWN0WzJdLCBsYWJlbEludGVyc2VjdFszXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBhcnJvd0VuZCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMSwgci5hcnJvd1NoYXBlc1t0Z3RBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgdGd0RGlzdCk7XG4gIHZhciBlZGdlRW5kID0gc2hvcnRlbkludGVyc2VjdGlvbihpbnRlcnNlY3QsIHAxLCByLmFycm93U2hhcGVzW3RndEFyU2hhcGVdLmdhcChlZGdlKSArIHRndERpc3QpO1xuICBycy5lbmRYID0gZWRnZUVuZFswXTtcbiAgcnMuZW5kWSA9IGVkZ2VFbmRbMV07XG4gIHJzLmFycm93RW5kWCA9IGFycm93RW5kWzBdO1xuICBycy5hcnJvd0VuZFkgPSBhcnJvd0VuZFsxXTtcbiAgaWYgKHNyY01hbkVuZHB0VmFsID09PSAnaW5zaWRlLXRvLW5vZGUnKSB7XG4gICAgaW50ZXJzZWN0ID0gW3NyY1Bvcy54LCBzcmNQb3MueV07XG4gIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHQudW5pdHMpIHtcbiAgICBpbnRlcnNlY3QgPSB0aGlzLm1hbnVhbEVuZHB0VG9QeChzb3VyY2UsIHNyY01hbkVuZHB0KTtcbiAgfSBlbHNlIGlmIChzcmNNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScpIHtcbiAgICBpbnRlcnNlY3QgPSBycy5zcmNJbnRuOyAvLyB1c2UgY2FjaGVkIHZhbHVlIGZyb20gY3RybHB0IGNhbGNcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1ub2RlLW9yLWxhYmVsJykge1xuICAgICAgcDJfaSA9IHAyO1xuICAgIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lLW9yLWxhYmVsJykge1xuICAgICAgcDJfaSA9IFt0Z3RQb3MueCwgdGd0UG9zLnldO1xuICAgIH1cbiAgICBpbnRlcnNlY3QgPSByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoc291cmNlKV0uaW50ZXJzZWN0TGluZShzcmNQb3MueCwgc3JjUG9zLnksIHNvdXJjZS5vdXRlcldpZHRoKCksIHNvdXJjZS5vdXRlckhlaWdodCgpLCBwMl9pWzBdLCBwMl9pWzFdLCAwLCBzcmNDb3JuZXJSYWRpdXMsIHNyY1JzKTtcbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lLW9yLWxhYmVsJykge1xuICAgICAgdmFyIHNycyA9IHNvdXJjZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBfbHcgPSBzcnMubGFiZWxXaWR0aDtcbiAgICAgIHZhciBfbGggPSBzcnMubGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgX2x4ID0gc3JzLmxhYmVsWDtcbiAgICAgIHZhciBfbHkgPSBzcnMubGFiZWxZO1xuICAgICAgdmFyIF9sdzIgPSBfbHcgLyAyO1xuICAgICAgdmFyIF9saDIgPSBfbGggLyAyO1xuICAgICAgdmFyIF92YSA9IHNvdXJjZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWU7XG4gICAgICBpZiAoX3ZhID09PSAndG9wJykge1xuICAgICAgICBfbHkgLT0gX2xoMjtcbiAgICAgIH0gZWxzZSBpZiAoX3ZhID09PSAnYm90dG9tJykge1xuICAgICAgICBfbHkgKz0gX2xoMjtcbiAgICAgIH1cbiAgICAgIHZhciBfaGEgPSBzb3VyY2UucHN0eWxlKCd0ZXh0LWhhbGlnbicpLnZhbHVlO1xuICAgICAgaWYgKF9oYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIF9seCAtPSBfbHcyO1xuICAgICAgfSBlbHNlIGlmIChfaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgX2x4ICs9IF9sdzI7XG4gICAgICB9XG4gICAgICB2YXIgX2xhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDJfaVswXSwgcDJfaVsxXSwgW19seCAtIF9sdzIsIF9seSAtIF9saDIsIF9seCArIF9sdzIsIF9seSAtIF9saDIsIF9seCArIF9sdzIsIF9seSArIF9saDIsIF9seCAtIF9sdzIsIF9seSArIF9saDJdLCBzcmNQb3MueCwgc3JjUG9zLnkpO1xuICAgICAgaWYgKF9sYWJlbEludGVyc2VjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBfcmVmUHQgPSB0Z3RQb3M7XG4gICAgICAgIHZhciBfaW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoaW50ZXJzZWN0KSk7XG4gICAgICAgIHZhciBfbGFiSW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoX2xhYmVsSW50ZXJzZWN0KSk7XG4gICAgICAgIHZhciBfbWluU3FEaXN0ID0gX2ludFNxZGlzdDtcbiAgICAgICAgaWYgKF9sYWJJbnRTcWRpc3QgPCBfaW50U3FkaXN0KSB7XG4gICAgICAgICAgaW50ZXJzZWN0ID0gW19sYWJlbEludGVyc2VjdFswXSwgX2xhYmVsSW50ZXJzZWN0WzFdXTtcbiAgICAgICAgICBfbWluU3FEaXN0ID0gX2xhYkludFNxZGlzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2xhYmVsSW50ZXJzZWN0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICB2YXIgX2xhYkludDJTcURpc3QgPSBzcWRpc3QoX3JlZlB0LCB7XG4gICAgICAgICAgICB4OiBfbGFiZWxJbnRlcnNlY3RbMl0sXG4gICAgICAgICAgICB5OiBfbGFiZWxJbnRlcnNlY3RbM11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoX2xhYkludDJTcURpc3QgPCBfbWluU3FEaXN0KSB7XG4gICAgICAgICAgICBpbnRlcnNlY3QgPSBbX2xhYmVsSW50ZXJzZWN0WzJdLCBfbGFiZWxJbnRlcnNlY3RbM11dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgYXJyb3dTdGFydCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMiwgci5hcnJvd1NoYXBlc1tzcmNBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgc3JjRGlzdCk7XG4gIHZhciBlZGdlU3RhcnQgPSBzaG9ydGVuSW50ZXJzZWN0aW9uKGludGVyc2VjdCwgcDIsIHIuYXJyb3dTaGFwZXNbc3JjQXJTaGFwZV0uZ2FwKGVkZ2UpICsgc3JjRGlzdCk7XG4gIHJzLnN0YXJ0WCA9IGVkZ2VTdGFydFswXTtcbiAgcnMuc3RhcnRZID0gZWRnZVN0YXJ0WzFdO1xuICBycy5hcnJvd1N0YXJ0WCA9IGFycm93U3RhcnRbMF07XG4gIHJzLmFycm93U3RhcnRZID0gYXJyb3dTdGFydFsxXTtcbiAgaWYgKGhhc0VuZHB0cykge1xuICAgIGlmICghbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKSB8fCAhbnVtYmVyJDEocnMuZW5kWCkgfHwgIW51bWJlciQxKHJzLmVuZFkpKSB7XG4gICAgICBycy5iYWRMaW5lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnMuYmFkTGluZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcbkJScCRiLmdldFNvdXJjZUVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBycy5oYXlzdGFja1B0c1swXSxcbiAgICAgICAgeTogcnMuaGF5c3RhY2tQdHNbMV1cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJzLmFycm93U3RhcnRYLFxuICAgICAgICB5OiBycy5hcnJvd1N0YXJ0WVxuICAgICAgfTtcbiAgfVxufTtcbkJScCRiLmdldFRhcmdldEVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBycy5oYXlzdGFja1B0c1syXSxcbiAgICAgICAgeTogcnMuaGF5c3RhY2tQdHNbM11cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJzLmFycm93RW5kWCxcbiAgICAgICAgeTogcnMuYXJyb3dFbmRZXG4gICAgICB9O1xuICB9XG59O1xuXG52YXIgQlJwJGEgPSB7fTtcbmZ1bmN0aW9uIHB1c2hCZXppZXJQdHMociwgZWRnZSwgcHRzKSB7XG4gIHZhciBxYmV6aWVyQXQkMSA9IGZ1bmN0aW9uIHFiZXppZXJBdCQxKHAxLCBwMiwgcDMsIHQpIHtcbiAgICByZXR1cm4gcWJlemllckF0KHAxLCBwMiwgcDMsIHQpO1xuICB9O1xuICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICB2YXIgYnB0cyA9IF9wLnJzdHlsZS5iZXppZXJQdHM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgci5iZXppZXJQcm9qUGN0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gci5iZXppZXJQcm9qUGN0c1tpXTtcbiAgICBicHRzLnB1c2goe1xuICAgICAgeDogcWJlemllckF0JDEocHRzWzBdLCBwdHNbMl0sIHB0c1s0XSwgcCksXG4gICAgICB5OiBxYmV6aWVyQXQkMShwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCBwKVxuICAgIH0pO1xuICB9XG59XG5CUnAkYS5zdG9yZUVkZ2VQcm9qZWN0aW9ucyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBfcCA9IGVkZ2UuX3ByaXZhdGU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICB2YXIgZXQgPSBycy5lZGdlVHlwZTtcblxuICAvLyBjbGVhciB0aGUgY2FjaGVkIHBvaW50cyBzdGF0ZVxuICBfcC5yc3R5bGUuYmV6aWVyUHRzID0gbnVsbDtcbiAgX3AucnN0eWxlLmxpbmVQdHMgPSBudWxsO1xuICBfcC5yc3R5bGUuaGF5c3RhY2tQdHMgPSBudWxsO1xuICBpZiAoZXQgPT09ICdtdWx0aWJlemllcicgfHwgZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnc2VsZicgfHwgZXQgPT09ICdjb21wb3VuZCcpIHtcbiAgICBfcC5yc3R5bGUuYmV6aWVyUHRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBwdXNoQmV6aWVyUHRzKHRoaXMsIGVkZ2UsIHJzLmFsbHB0cy5zbGljZShpLCBpICsgNikpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChldCA9PT0gJ3NlZ21lbnRzJykge1xuICAgIHZhciBscHRzID0gX3AucnN0eWxlLmxpbmVQdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSArIDEgPCBycy5hbGxwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGxwdHMucHVzaCh7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV0ID09PSAnaGF5c3RhY2snKSB7XG4gICAgdmFyIGhwdHMgPSBycy5oYXlzdGFja1B0cztcbiAgICBfcC5yc3R5bGUuaGF5c3RhY2tQdHMgPSBbe1xuICAgICAgeDogaHB0c1swXSxcbiAgICAgIHk6IGhwdHNbMV1cbiAgICB9LCB7XG4gICAgICB4OiBocHRzWzJdLFxuICAgICAgeTogaHB0c1szXVxuICAgIH1dO1xuICB9XG4gIF9wLnJzdHlsZS5hcnJvd1dpZHRoID0gdGhpcy5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMuYXJyb3dTaGFwZVdpZHRoO1xufTtcbkJScCRhLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zID0gZnVuY3Rpb24gKGVkZ2VzKSB7XG4gIHRoaXMuZmluZEVkZ2VDb250cm9sUG9pbnRzKGVkZ2VzKTtcbn07XG5cbnZhciBCUnAkOSA9IHt9O1xuQlJwJDkucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGNvbnRlbnQgPSBub2RlLnBzdHlsZSgnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgaWYgKGVtcHR5U3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB0ZXh0WCwgdGV4dFk7XG4gIHZhciBfcCA9IG5vZGUuX3ByaXZhdGU7XG4gIHZhciBub2RlV2lkdGggPSBub2RlLndpZHRoKCk7XG4gIHZhciBub2RlSGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgdmFyIG5vZGVQb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gIHZhciB0ZXh0SGFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtaGFsaWduJykuc3RyVmFsdWU7XG4gIHZhciB0ZXh0VmFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtdmFsaWduJykuc3RyVmFsdWU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICBzd2l0Y2ggKHRleHRIYWxpZ24pIHtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHRleHRYID0gbm9kZVBvcy54IC0gbm9kZVdpZHRoIC8gMiAtIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICB0ZXh0WCA9IG5vZGVQb3MueCArIG5vZGVXaWR0aCAvIDIgKyBwYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGUuZy4gY2VudGVyXG4gICAgICB0ZXh0WCA9IG5vZGVQb3MueDtcbiAgfVxuICBzd2l0Y2ggKHRleHRWYWxpZ24pIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgdGV4dFkgPSBub2RlUG9zLnkgLSBub2RlSGVpZ2h0IC8gMiAtIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgdGV4dFkgPSBub2RlUG9zLnkgKyBub2RlSGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZS5nLiBtaWRkbGVcbiAgICAgIHRleHRZID0gbm9kZVBvcy55O1xuICB9XG4gIHJzLmxhYmVsWCA9IHRleHRYO1xuICBycy5sYWJlbFkgPSB0ZXh0WTtcbiAgcnN0eWxlLmxhYmVsWCA9IHRleHRYO1xuICByc3R5bGUubGFiZWxZID0gdGV4dFk7XG4gIHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMobm9kZSk7XG4gIHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMobm9kZSk7XG59O1xudmFyIGxpbmVBbmdsZUZyb21EZWx0YSA9IGZ1bmN0aW9uIGxpbmVBbmdsZUZyb21EZWx0YShkeCwgZHkpIHtcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKGR5IC8gZHgpO1xuICBpZiAoZHggPT09IDAgJiYgYW5nbGUgPCAwKSB7XG4gICAgYW5nbGUgPSBhbmdsZSAqIC0xO1xuICB9XG4gIHJldHVybiBhbmdsZTtcbn07XG52YXIgbGluZUFuZ2xlID0gZnVuY3Rpb24gbGluZUFuZ2xlKHAwLCBwMSkge1xuICB2YXIgZHggPSBwMS54IC0gcDAueDtcbiAgdmFyIGR5ID0gcDEueSAtIHAwLnk7XG4gIHJldHVybiBsaW5lQW5nbGVGcm9tRGVsdGEoZHgsIGR5KTtcbn07XG52YXIgYmV6aWVyQW5nbGUgPSBmdW5jdGlvbiBiZXppZXJBbmdsZShwMCwgcDEsIHAyLCB0KSB7XG4gIHZhciB0MCA9IGJvdW5kKDAsIHQgLSAwLjAwMSwgMSk7XG4gIHZhciB0MSA9IGJvdW5kKDAsIHQgKyAwLjAwMSwgMSk7XG4gIHZhciBscDAgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MCk7XG4gIHZhciBscDEgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MSk7XG4gIHJldHVybiBsaW5lQW5nbGUobHAwLCBscDEpO1xufTtcbkJScCQ5LnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcDtcbiAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgbWlkOiBlZGdlLnBzdHlsZSgnbGFiZWwnKS5zdHJWYWx1ZSxcbiAgICBzb3VyY2U6IGVkZ2UucHN0eWxlKCdzb3VyY2UtbGFiZWwnKS5zdHJWYWx1ZSxcbiAgICB0YXJnZXQ6IGVkZ2UucHN0eWxlKCd0YXJnZXQtbGFiZWwnKS5zdHJWYWx1ZVxuICB9O1xuICBpZiAoY29udGVudC5taWQgfHwgY29udGVudC5zb3VyY2UgfHwgY29udGVudC50YXJnZXQpIDsgZWxzZSB7XG4gICAgcmV0dXJuOyAvLyBubyBsYWJlbHMgPT4gbm8gY2FsY3NcbiAgfVxuXG4gIC8vIGFkZCBjZW50ZXIgcG9pbnQgdG8gc3R5bGUgc28gYm91bmRpbmcgYm94IGNhbGN1bGF0aW9ucyBjYW4gdXNlIGl0XG4gIC8vXG4gIHAgPSB7XG4gICAgeDogcnMubWlkWCxcbiAgICB5OiBycy5taWRZXG4gIH07XG4gIHZhciBzZXRScyA9IGZ1bmN0aW9uIHNldFJzKHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKSB7XG4gICAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgcHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpO1xuICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCBwcm9wTmFtZSwgcHJlZml4LCB2YWx1ZSk7XG4gIH07XG4gIHNldFJzKCdsYWJlbFgnLCBudWxsLCBwLngpO1xuICBzZXRScygnbGFiZWxZJywgbnVsbCwgcC55KTtcbiAgdmFyIG1pZEFuZ2xlID0gbGluZUFuZ2xlRnJvbURlbHRhKHJzLm1pZERpc3BYLCBycy5taWREaXNwWSk7XG4gIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIG51bGwsIG1pZEFuZ2xlKTtcbiAgdmFyIGNyZWF0ZUNvbnRyb2xQb2ludEluZm8gPSBmdW5jdGlvbiBjcmVhdGVDb250cm9sUG9pbnRJbmZvKCkge1xuICAgIGlmIChjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29udHJvbFBvaW50SW5mby5jYWNoZTtcbiAgICB9IC8vIHVzZSBjYWNoZSBzbyBvbmx5IDF4IHBlciBlZGdlXG5cbiAgICB2YXIgY3RybHB0cyA9IFtdO1xuXG4gICAgLy8gc3RvcmUgZWFjaCBjdHJscHQgaW5mbyBpbml0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICB2YXIgcDAgPSB7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgfTtcbiAgICAgIHZhciBwMSA9IHtcbiAgICAgICAgeDogcnMuYWxscHRzW2kgKyAyXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAzXVxuICAgICAgfTsgLy8gY3RybHB0XG4gICAgICB2YXIgcDIgPSB7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpICsgNF0sXG4gICAgICAgIHk6IHJzLmFsbHB0c1tpICsgNV1cbiAgICAgIH07XG4gICAgICBjdHJscHRzLnB1c2goe1xuICAgICAgICBwMDogcDAsXG4gICAgICAgIHAxOiBwMSxcbiAgICAgICAgcDI6IHAyLFxuICAgICAgICBzdGFydERpc3Q6IDAsXG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgc2VnbWVudHM6IFtdXG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGJwdHMgPSBfcC5yc3R5bGUuYmV6aWVyUHRzO1xuICAgIHZhciBuUHJvanMgPSByLmJlemllclByb2pQY3RzLmxlbmd0aDtcbiAgICBmdW5jdGlvbiBhZGRTZWdtZW50KGNwLCBwMCwgcDEsIHQwLCB0MSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGRpc3QocDAsIHAxKTtcbiAgICAgIHZhciBwcmV2U2VnbWVudCA9IGNwLnNlZ21lbnRzW2NwLnNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHNlZ21lbnQgPSB7XG4gICAgICAgIHAwOiBwMCxcbiAgICAgICAgcDE6IHAxLFxuICAgICAgICB0MDogdDAsXG4gICAgICAgIHQxOiB0MSxcbiAgICAgICAgc3RhcnREaXN0OiBwcmV2U2VnbWVudCA/IHByZXZTZWdtZW50LnN0YXJ0RGlzdCArIHByZXZTZWdtZW50Lmxlbmd0aCA6IDAsXG4gICAgICAgIGxlbmd0aDogbGVuZ3RoXG4gICAgICB9O1xuICAgICAgY3Auc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgIGNwLmxlbmd0aCArPSBsZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGVhY2ggY3RybHB0IHdpdGggc2VnbWVudCBpbmZvXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGN0cmxwdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgY3AgPSBjdHJscHRzW19pXTtcbiAgICAgIHZhciBwcmV2Q3AgPSBjdHJscHRzW19pIC0gMV07XG4gICAgICBpZiAocHJldkNwKSB7XG4gICAgICAgIGNwLnN0YXJ0RGlzdCA9IHByZXZDcC5zdGFydERpc3QgKyBwcmV2Q3AubGVuZ3RoO1xuICAgICAgfVxuICAgICAgYWRkU2VnbWVudChjcCwgY3AucDAsIGJwdHNbX2kgKiBuUHJvanNdLCAwLCByLmJlemllclByb2pQY3RzWzBdKTsgLy8gZmlyc3RcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuUHJvanMgLSAxOyBqKyspIHtcbiAgICAgICAgYWRkU2VnbWVudChjcCwgYnB0c1tfaSAqIG5Qcm9qcyArIGpdLCBicHRzW19pICogblByb2pzICsgaiArIDFdLCByLmJlemllclByb2pQY3RzW2pdLCByLmJlemllclByb2pQY3RzW2ogKyAxXSk7XG4gICAgICB9XG4gICAgICBhZGRTZWdtZW50KGNwLCBicHRzW19pICogblByb2pzICsgblByb2pzIC0gMV0sIGNwLnAyLCByLmJlemllclByb2pQY3RzW25Qcm9qcyAtIDFdLCAxKTsgLy8gbGFzdFxuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlID0gY3RybHB0cztcbiAgfTtcbiAgdmFyIGNhbGN1bGF0ZUVuZFByb2plY3Rpb24gPSBmdW5jdGlvbiBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKHByZWZpeCkge1xuICAgIHZhciBhbmdsZTtcbiAgICB2YXIgaXNTcmMgPSBwcmVmaXggPT09ICdzb3VyY2UnO1xuICAgIGlmICghY29udGVudFtwcmVmaXhdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLXRleHQtb2Zmc2V0JykucGZWYWx1ZTtcbiAgICBzd2l0Y2ggKHJzLmVkZ2VUeXBlKSB7XG4gICAgICBjYXNlICdzZWxmJzpcbiAgICAgIGNhc2UgJ2NvbXBvdW5kJzpcbiAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICBjYXNlICdtdWx0aWJlemllcic6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgY3BzID0gY3JlYXRlQ29udHJvbFBvaW50SW5mbygpO1xuICAgICAgICAgIHZhciBzZWxlY3RlZDtcbiAgICAgICAgICB2YXIgc3RhcnREaXN0ID0gMDtcbiAgICAgICAgICB2YXIgdG90YWxEaXN0ID0gMDtcblxuICAgICAgICAgIC8vIGZpbmQgdGhlIHNlZ21lbnQgd2UncmUgb25cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9jcCA9IGNwc1tpc1NyYyA/IGkgOiBjcHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfY3Auc2VnbWVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIF9zZWcgPSBfY3Auc2VnbWVudHNbaXNTcmMgPyBqIDogX2NwLnNlZ21lbnRzLmxlbmd0aCAtIDEgLSBqXTtcbiAgICAgICAgICAgICAgdmFyIGxhc3RTZWcgPSBpID09PSBjcHMubGVuZ3RoIC0gMSAmJiBqID09PSBfY3Auc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgc3RhcnREaXN0ID0gdG90YWxEaXN0O1xuICAgICAgICAgICAgICB0b3RhbERpc3QgKz0gX3NlZy5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmICh0b3RhbERpc3QgPj0gb2Zmc2V0IHx8IGxhc3RTZWcpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHtcbiAgICAgICAgICAgICAgICAgIGNwOiBfY3AsXG4gICAgICAgICAgICAgICAgICBzZWdtZW50OiBfc2VnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY3AgPSBzZWxlY3RlZC5jcDtcbiAgICAgICAgICB2YXIgc2VnID0gc2VsZWN0ZWQuc2VnbWVudDtcbiAgICAgICAgICB2YXIgdFNlZ21lbnQgPSAob2Zmc2V0IC0gc3RhcnREaXN0KSAvIHNlZy5sZW5ndGg7XG4gICAgICAgICAgdmFyIHNlZ0R0ID0gc2VnLnQxIC0gc2VnLnQwO1xuICAgICAgICAgIHZhciB0ID0gaXNTcmMgPyBzZWcudDAgKyBzZWdEdCAqIHRTZWdtZW50IDogc2VnLnQxIC0gc2VnRHQgKiB0U2VnbWVudDtcbiAgICAgICAgICB0ID0gYm91bmQoMCwgdCwgMSk7XG4gICAgICAgICAgcCA9IHFiZXppZXJQdEF0KGNwLnAwLCBjcC5wMSwgY3AucDIsIHQpO1xuICAgICAgICAgIGFuZ2xlID0gYmV6aWVyQW5nbGUoY3AucDAsIGNwLnAxLCBjcC5wMiwgdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgIGNhc2UgJ3NlZ21lbnRzJzpcbiAgICAgIGNhc2UgJ2hheXN0YWNrJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBkID0gMCxcbiAgICAgICAgICAgIGRpLFxuICAgICAgICAgICAgZDA7XG4gICAgICAgICAgdmFyIHAwLCBwMTtcbiAgICAgICAgICB2YXIgbCA9IHJzLmFsbHB0cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyICsgMyA8IGw7IF9pMiArPSAyKSB7XG4gICAgICAgICAgICBpZiAoaXNTcmMpIHtcbiAgICAgICAgICAgICAgcDAgPSB7XG4gICAgICAgICAgICAgICAgeDogcnMuYWxscHRzW19pMl0sXG4gICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW19pMiArIDFdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHAxID0ge1xuICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tfaTIgKyAyXSxcbiAgICAgICAgICAgICAgICB5OiBycy5hbGxwdHNbX2kyICsgM11cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHAwID0ge1xuICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tsIC0gMiAtIF9pMl0sXG4gICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW2wgLSAxIC0gX2kyXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBwMSA9IHtcbiAgICAgICAgICAgICAgICB4OiBycy5hbGxwdHNbbCAtIDQgLSBfaTJdLFxuICAgICAgICAgICAgICAgIHk6IHJzLmFsbHB0c1tsIC0gMyAtIF9pMl1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpID0gZGlzdChwMCwgcDEpO1xuICAgICAgICAgICAgZDAgPSBkO1xuICAgICAgICAgICAgZCArPSBkaTtcbiAgICAgICAgICAgIGlmIChkID49IG9mZnNldCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHBEID0gb2Zmc2V0IC0gZDA7XG4gICAgICAgICAgdmFyIF90ID0gcEQgLyBkaTtcbiAgICAgICAgICBfdCA9IGJvdW5kKDAsIF90LCAxKTtcbiAgICAgICAgICBwID0gbGluZUF0KHAwLCBwMSwgX3QpO1xuICAgICAgICAgIGFuZ2xlID0gbGluZUFuZ2xlKHAwLCBwMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UnMoJ2xhYmVsWCcsIHByZWZpeCwgcC54KTtcbiAgICBzZXRScygnbGFiZWxZJywgcHJlZml4LCBwLnkpO1xuICAgIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIHByZWZpeCwgYW5nbGUpO1xuICB9O1xuICBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKCdzb3VyY2UnKTtcbiAgY2FsY3VsYXRlRW5kUHJvamVjdGlvbigndGFyZ2V0Jyk7XG4gIHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoZWRnZSk7XG59O1xuQlJwJDkuYXBwbHlMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUpO1xuICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgdGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKGVsZSwgJ3NvdXJjZScpO1xuICAgIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUsICd0YXJnZXQnKTtcbiAgfVxufTtcbkJScCQ5LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgdGV4dCA9IHRoaXMuZ2V0TGFiZWxUZXh0KGVsZSwgcHJlZml4KTtcbiAgdmFyIGxhYmVsRGltcyA9IHRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGVsZSwgdGV4dCk7XG4gIHZhciBsaW5lSGVpZ2h0ID0gZWxlLnBzdHlsZSgnbGluZS1oZWlnaHQnKS5wZlZhbHVlO1xuICB2YXIgdGV4dFdyYXAgPSBlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS5zdHJWYWx1ZTtcbiAgdmFyIGxpbmVzID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgcHJlZml4KSB8fCBbXTtcbiAgdmFyIG51bUxpbmVzID0gdGV4dFdyYXAgIT09ICd3cmFwJyA/IDEgOiBNYXRoLm1heChsaW5lcy5sZW5ndGgsIDEpO1xuICB2YXIgbm9ybVBlckxpbmVIZWlnaHQgPSBsYWJlbERpbXMuaGVpZ2h0IC8gbnVtTGluZXM7XG4gIHZhciBsYWJlbExpbmVIZWlnaHQgPSBub3JtUGVyTGluZUhlaWdodCAqIGxpbmVIZWlnaHQ7XG4gIHZhciB3aWR0aCA9IGxhYmVsRGltcy53aWR0aDtcbiAgdmFyIGhlaWdodCA9IGxhYmVsRGltcy5oZWlnaHQgKyAobnVtTGluZXMgLSAxKSAqIChsaW5lSGVpZ2h0IC0gMSkgKiBub3JtUGVyTGluZUhlaWdodDtcbiAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgsIGhlaWdodCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbEhlaWdodCcsIHByZWZpeCwgaGVpZ2h0KTtcbiAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCwgbGFiZWxMaW5lSGVpZ2h0KTtcbn07XG5CUnAkOS5nZXRMYWJlbFRleHQgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcGZkID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwZmQgKyAnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgdmFyIHRleHRUcmFuc2Zvcm0gPSBlbGUucHN0eWxlKCd0ZXh0LXRyYW5zZm9ybScpLnZhbHVlO1xuICB2YXIgcnNjcmF0Y2ggPSBmdW5jdGlvbiByc2NyYXRjaChwcm9wTmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBmb3IgZW1wdHkgdGV4dCwgc2tpcCBhbGwgcHJvY2Vzc2luZ1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ25vbmUnKSA7IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ3VwcGVyY2FzZScpIHtcbiAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ2xvd2VyY2FzZScpIHtcbiAgICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHZhciB3cmFwU3R5bGUgPSBlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS52YWx1ZTtcbiAgaWYgKHdyYXBTdHlsZSA9PT0gJ3dyYXAnKSB7XG4gICAgdmFyIGxhYmVsS2V5ID0gcnNjcmF0Y2goJ2xhYmVsS2V5Jyk7XG5cbiAgICAvLyBzYXZlIHJlY2FsYyBpZiB0aGUgbGFiZWwgaXMgdGhlIHNhbWUgYXMgYmVmb3JlXG4gICAgaWYgKGxhYmVsS2V5ICE9IG51bGwgJiYgcnNjcmF0Y2goJ2xhYmVsV3JhcEtleScpID09PSBsYWJlbEtleSkge1xuICAgICAgcmV0dXJuIHJzY3JhdGNoKCdsYWJlbFdyYXBDYWNoZWRUZXh0Jyk7XG4gICAgfVxuICAgIHZhciB6d3NwID0gXCJcXHUyMDBCXCI7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIG1heFcgPSBlbGUucHN0eWxlKCd0ZXh0LW1heC13aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIG92ZXJmbG93ID0gZWxlLnBzdHlsZSgndGV4dC1vdmVyZmxvdy13cmFwJykudmFsdWU7XG4gICAgdmFyIG92ZXJmbG93QW55ID0gb3ZlcmZsb3cgPT09ICdhbnl3aGVyZSc7XG4gICAgdmFyIHdyYXBwZWRMaW5lcyA9IFtdO1xuICAgIHZhciBzZXBhcmF0b3JSZWdleCA9IC9bXFxzXFx1MjAwYl0rfCQvZzsgLy8gSW5jbHVkZSBlbmQgb2Ygc3RyaW5nIHRvIGFkZCBsYXN0IHdvcmRcblxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIHZhciBsaW5lID0gbGluZXNbbF07XG4gICAgICB2YXIgbGluZURpbXMgPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGxpbmUpO1xuICAgICAgdmFyIGxpbmVXID0gbGluZURpbXMud2lkdGg7XG4gICAgICBpZiAob3ZlcmZsb3dBbnkpIHtcbiAgICAgICAgdmFyIHByb2Nlc3NlZExpbmUgPSBsaW5lLnNwbGl0KCcnKS5qb2luKHp3c3ApO1xuICAgICAgICBsaW5lID0gcHJvY2Vzc2VkTGluZTtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lVyA+IG1heFcpIHtcbiAgICAgICAgLy8gbGluZSBpcyB0b28gbG9uZ1xuICAgICAgICB2YXIgc2VwYXJhdG9yTWF0Y2hlcyA9IGxpbmUubWF0Y2hBbGwoc2VwYXJhdG9yUmVnZXgpO1xuICAgICAgICB2YXIgc3VibGluZSA9ICcnO1xuICAgICAgICB2YXIgcHJldmlvdXNJbmRleCA9IDA7XG4gICAgICAgIC8vIEFkZCBmYWtlIG1hdGNoXG4gICAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzZXBhcmF0b3JNYXRjaGVzKSxcbiAgICAgICAgICBfc3RlcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRvck1hdGNoID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICB2YXIgd29yZFNlcGFyYXRvciA9IHNlcGFyYXRvck1hdGNoWzBdO1xuICAgICAgICAgICAgdmFyIHdvcmQgPSBsaW5lLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBzZXBhcmF0b3JNYXRjaC5pbmRleCk7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gc2VwYXJhdG9yTWF0Y2guaW5kZXggKyB3b3JkU2VwYXJhdG9yLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB0ZXN0TGluZSA9IHN1YmxpbmUubGVuZ3RoID09PSAwID8gd29yZCA6IHN1YmxpbmUgKyB3b3JkICsgd29yZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIHZhciB0ZXN0RGltcyA9IHRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGVsZSwgdGVzdExpbmUpO1xuICAgICAgICAgICAgdmFyIHRlc3RXID0gdGVzdERpbXMud2lkdGg7XG4gICAgICAgICAgICBpZiAodGVzdFcgPD0gbWF4Vykge1xuICAgICAgICAgICAgICAvLyB3b3JkIGZpdHMgb24gY3VycmVudCBsaW5lXG4gICAgICAgICAgICAgIHN1YmxpbmUgKz0gd29yZCArIHdvcmRTZXBhcmF0b3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB3b3JkIHN0YXJ0cyBuZXcgbGluZVxuICAgICAgICAgICAgICBpZiAoc3VibGluZSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1YmxpbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN1YmxpbmUgPSB3b3JkICsgd29yZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiB0aGVyZSdzIHJlbWFpbmluZyB0ZXh0LCBwdXQgaXQgaW4gYSB3cmFwcGVkIGxpbmVcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VibGluZS5tYXRjaCgvXltcXHNcXHUyMDBiXSskLykpIHtcbiAgICAgICAgICB3cmFwcGVkTGluZXMucHVzaChzdWJsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGluZSBpcyBhbHJlYWR5IHNob3J0IGVub3VnaFxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICB9IC8vIGZvclxuXG4gICAgcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgd3JhcHBlZExpbmVzKTtcbiAgICB0ZXh0ID0gcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZFRleHQnLCB3cmFwcGVkTGluZXMuam9pbignXFxuJykpO1xuICAgIHJzY3JhdGNoKCdsYWJlbFdyYXBLZXknLCBsYWJlbEtleSk7XG4gIH0gZWxzZSBpZiAod3JhcFN0eWxlID09PSAnZWxsaXBzaXMnKSB7XG4gICAgdmFyIF9tYXhXID0gZWxlLnBzdHlsZSgndGV4dC1tYXgtd2lkdGgnKS5wZlZhbHVlO1xuICAgIHZhciBlbGxpcHNpemVkID0gJyc7XG4gICAgdmFyIGVsbGlwc2lzID0gXCJcXHUyMDI2XCI7XG4gICAgdmFyIGluY0xhc3RDaCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIHRleHQpLndpZHRoIDwgX21heFcpIHtcbiAgICAgIC8vIHRoZSBsYWJlbCBhbHJlYWR5IGZpdHNcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3aWR0aFdpdGhOZXh0Q2ggPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGVsbGlwc2l6ZWQgKyB0ZXh0W2ldICsgZWxsaXBzaXMpLndpZHRoO1xuICAgICAgaWYgKHdpZHRoV2l0aE5leHRDaCA+IF9tYXhXKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZWxsaXBzaXplZCArPSB0ZXh0W2ldO1xuICAgICAgaWYgKGkgPT09IHRleHQubGVuZ3RoIC0gMSkge1xuICAgICAgICBpbmNMYXN0Q2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWluY0xhc3RDaCkge1xuICAgICAgZWxsaXBzaXplZCArPSBlbGxpcHNpcztcbiAgICB9XG4gICAgcmV0dXJuIGVsbGlwc2l6ZWQ7XG4gIH0gLy8gaWYgZWxsaXBzaXplXG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuQlJwJDkuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIganVzdGlmaWNhdGlvbiA9IGVsZS5wc3R5bGUoJ3RleHQtanVzdGlmaWNhdGlvbicpLnN0clZhbHVlO1xuICB2YXIgdGV4dEhhbGlnbiA9IGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykuc3RyVmFsdWU7XG4gIGlmIChqdXN0aWZpY2F0aW9uID09PSAnYXV0bycpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBzd2l0Y2ggKHRleHRIYWxpZ24pIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ganVzdGlmaWNhdGlvbjtcbiAgfVxufTtcbkJScCQ5LmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyA9IGZ1bmN0aW9uIChlbGUsIHRleHQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcbiAgdmFyIGRvY3VtZW50ID0gY29udGFpbmVyV2luZG93LmRvY3VtZW50O1xuICB2YXIgY2FjaGVLZXkgPSBoYXNoU3RyaW5nKHRleHQsIGVsZS5fcHJpdmF0ZS5sYWJlbERpbXNLZXkpO1xuICB2YXIgY2FjaGUgPSByLmxhYmVsRGltQ2FjaGUgfHwgKHIubGFiZWxEaW1DYWNoZSA9IFtdKTtcbiAgdmFyIGV4aXN0aW5nVmFsID0gY2FjaGVbY2FjaGVLZXldO1xuICBpZiAoZXhpc3RpbmdWYWwgIT0gbnVsbCkge1xuICAgIHJldHVybiBleGlzdGluZ1ZhbDtcbiAgfVxuICB2YXIgcGFkZGluZyA9IDA7IC8vIGFkZCBwYWRkaW5nIGFyb3VuZCB0ZXh0IGRpbXMsIGFzIHRoZSBtZWFzdXJlbWVudCBpc24ndCB0aGF0IGFjY3VyYXRlXG4gIHZhciBmU3R5bGUgPSBlbGUucHN0eWxlKCdmb250LXN0eWxlJykuc3RyVmFsdWU7XG4gIHZhciBzaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZTtcbiAgdmFyIGZhbWlseSA9IGVsZS5wc3R5bGUoJ2ZvbnQtZmFtaWx5Jykuc3RyVmFsdWU7XG4gIHZhciB3ZWlnaHQgPSBlbGUucHN0eWxlKCdmb250LXdlaWdodCcpLnN0clZhbHVlO1xuICB2YXIgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXM7XG4gIHZhciBjMmQgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7XG4gIGlmICghY2FudmFzKSB7XG4gICAgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjMmQgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB2YXIgZHMgPSBjYW52YXMuc3R5bGU7XG4gICAgZHMucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRzLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgZHMudG9wID0gJy05OTk5cHgnO1xuICAgIGRzLnpJbmRleCA9ICctMSc7XG4gICAgZHMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIGRzLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gIH1cbiAgYzJkLmZvbnQgPSBcIlwiLmNvbmNhdChmU3R5bGUsIFwiIFwiKS5jb25jYXQod2VpZ2h0LCBcIiBcIikuY29uY2F0KHNpemUsIFwicHggXCIpLmNvbmNhdChmYW1pbHkpO1xuICB2YXIgd2lkdGggPSAwO1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGluZSA9IGxpbmVzW2ldO1xuICAgIHZhciBtZXRyaWNzID0gYzJkLm1lYXN1cmVUZXh0KGxpbmUpO1xuICAgIHZhciB3ID0gTWF0aC5jZWlsKG1ldHJpY3Mud2lkdGgpO1xuICAgIHZhciBoID0gc2l6ZTtcbiAgICB3aWR0aCA9IE1hdGgubWF4KHcsIHdpZHRoKTtcbiAgICBoZWlnaHQgKz0gaDtcbiAgfVxuICB3aWR0aCArPSBwYWRkaW5nO1xuICBoZWlnaHQgKz0gcGFkZGluZztcbiAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5CUnAkOS5jYWxjdWxhdGVMYWJlbEFuZ2xlID0gZnVuY3Rpb24gKGVsZSwgcHJlZml4KSB7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gIHZhciBwcmVmaXhEYXNoID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gIHZhciByb3QgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1yb3RhdGlvbicpO1xuICB2YXIgcm90U3RyID0gcm90LnN0clZhbHVlO1xuICBpZiAocm90U3RyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChpc0VkZ2UgJiYgcm90U3RyID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICByZXR1cm4gcnMubGFiZWxBdXRvQW5nbGU7XG4gIH0gZWxzZSBpZiAocm90U3RyID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcm90LnBmVmFsdWU7XG4gIH1cbn07XG5CUnAkOS5jYWxjdWxhdGVMYWJlbEFuZ2xlcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICBycy5sYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSk7XG4gIGlmIChpc0VkZ2UpIHtcbiAgICBycy5zb3VyY2VMYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSwgJ3NvdXJjZScpO1xuICAgIHJzLnRhcmdldExhYmVsQW5nbGUgPSByLmNhbGN1bGF0ZUxhYmVsQW5nbGUoZWxlLCAndGFyZ2V0Jyk7XG4gIH1cbn07XG5cbnZhciBCUnAkOCA9IHt9O1xudmFyIFRPT19TTUFMTF9DVVRfUkVDVCA9IDI4O1xudmFyIHdhcm5lZEN1dFJlY3QgPSBmYWxzZTtcbkJScCQ4LmdldE5vZGVTaGFwZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIHNoYXBlID0gbm9kZS5wc3R5bGUoJ3NoYXBlJykudmFsdWU7XG4gIGlmIChzaGFwZSA9PT0gJ2N1dHJlY3RhbmdsZScgJiYgKG5vZGUud2lkdGgoKSA8IFRPT19TTUFMTF9DVVRfUkVDVCB8fCBub2RlLmhlaWdodCgpIDwgVE9PX1NNQUxMX0NVVF9SRUNUKSkge1xuICAgIGlmICghd2FybmVkQ3V0UmVjdCkge1xuICAgICAgd2FybignVGhlIGBjdXRyZWN0YW5nbGVgIG5vZGUgc2hhcGUgY2FuIG5vdCBiZSB1c2VkIGF0IHNtYWxsIHNpemVzIHNvIGByZWN0YW5nbGVgIGlzIHVzZWQgaW5zdGVhZCcpO1xuICAgICAgd2FybmVkQ3V0UmVjdCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgfVxuICBpZiAobm9kZS5pc1BhcmVudCgpKSB7XG4gICAgaWYgKHNoYXBlID09PSAncmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ3JvdW5kcmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ3JvdW5kLXJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdjdXRyZWN0YW5nbGUnIHx8IHNoYXBlID09PSAnY3V0LXJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdiYXJyZWwnKSB7XG4gICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgICB9XG4gIH1cbiAgaWYgKHNoYXBlID09PSAncG9seWdvbicpIHtcbiAgICB2YXIgcG9pbnRzID0gbm9kZS5wc3R5bGUoJ3NoYXBlLXBvbHlnb24tcG9pbnRzJykudmFsdWU7XG4gICAgcmV0dXJuIHIubm9kZVNoYXBlcy5tYWtlUG9seWdvbihwb2ludHMpLm5hbWU7XG4gIH1cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxudmFyIEJScCQ3ID0ge307XG5CUnAkNy5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3kgPSB0aGlzLmN5O1xuICB2YXIgZWxlc1RvVXBkYXRlID0gY3kuY29sbGVjdGlvbigpO1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBlbnF1ZXVlID0gZnVuY3Rpb24gZW5xdWV1ZShlbGVzKSB7XG4gICAgdmFyIGRpcnR5U3R5bGVDYWNoZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgZWxlc1RvVXBkYXRlLm1lcmdlKGVsZXMpO1xuICAgIGlmIChkaXJ0eVN0eWxlQ2FjaGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgICAgICAgcnN0eWxlLmNsZWFuID0gZmFsc2U7XG4gICAgICAgIHJzdHlsZS5jbGVhbkNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgci5iaW5kZXIoY3kpLm9uKCdib3VuZHMuKiBkaXJ0eS4qJywgZnVuY3Rpb24gb25EaXJ0eUJvdW5kcyhlKSB7XG4gICAgdmFyIGVsZSA9IGUudGFyZ2V0O1xuICAgIGVucXVldWUoZWxlKTtcbiAgfSkub24oJ3N0eWxlLiogYmFja2dyb3VuZC4qJywgZnVuY3Rpb24gb25EaXJ0eVN0eWxlKGUpIHtcbiAgICB2YXIgZWxlID0gZS50YXJnZXQ7XG4gICAgZW5xdWV1ZShlbGUsIGZhbHNlKTtcbiAgfSk7XG4gIHZhciB1cGRhdGVFbGVDYWxjcyA9IGZ1bmN0aW9uIHVwZGF0ZUVsZUNhbGNzKHdpbGxEcmF3KSB7XG4gICAgaWYgKHdpbGxEcmF3KSB7XG4gICAgICB2YXIgZm5zID0gci5vblVwZGF0ZUVsZUNhbGNzRm5zO1xuXG4gICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gaGF2ZSB1cC10by1kYXRlIHN0eWxlIChlLmcuIHN0eWxlc2hlZXQgbWFwcGVycylcbiAgICAgIC8vIGJlZm9yZSBjYWxjdWxhdGluZyByZW5kZXJlZCBzdHlsZSAoYW5kIHBzdHlsZSBtaWdodCBub3QgYmUgY2FsbGVkIHlldClcbiAgICAgIGVsZXNUb1VwZGF0ZS5jbGVhblN0eWxlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXNUb1VwZGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1RvVXBkYXRlW2ldO1xuICAgICAgICB2YXIgcnN0eWxlID0gZWxlLl9wcml2YXRlLnJzdHlsZTtcbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSAmJiAhcnN0eWxlLmNsZWFuQ29ubmVjdGVkKSB7XG4gICAgICAgICAgZW5xdWV1ZShlbGUuY29ubmVjdGVkRWRnZXMoKSk7XG4gICAgICAgICAgcnN0eWxlLmNsZWFuQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZucykge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZm5zLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIHZhciBmbiA9IGZuc1tfaV07XG4gICAgICAgICAgZm4od2lsbERyYXcsIGVsZXNUb1VwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVsZXNUb1VwZGF0ZSk7XG4gICAgICBlbGVzVG9VcGRhdGUgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9O1xuICByLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgIHVwZGF0ZUVsZUNhbGNzKHRydWUpO1xuICB9O1xuICByLmJlZm9yZVJlbmRlcih1cGRhdGVFbGVDYWxjcywgci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKTtcbn07XG5CUnAkNy5vblVwZGF0ZUVsZUNhbGNzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBmbnMgPSB0aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnMgPSB0aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnMgfHwgW107XG4gIGZucy5wdXNoKGZuKTtcbn07XG5CUnAkNy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUgPSBmdW5jdGlvbiAoZWxlcywgdXNlQ2FjaGUpIHtcbiAgdmFyIGlzQ2xlYW5Db25uZWN0ZWQgPSBmdW5jdGlvbiBpc0NsZWFuQ29ubmVjdGVkKGVsZSkge1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkO1xuICB9O1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgdmFyIG5vZGVzID0gW107XG5cbiAgLy8gdGhlIHJlbmRlcmVyIGNhbid0IGJlIHVzZWQgZm9yIGNhbGNzIHdoZW4gZGVzdHJveWVkLCBlLmcuIGVsZS5ib3VuZGluZ0JveCgpXG4gIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVzZSBjYWNoZSBieSBkZWZhdWx0IGZvciBwZXJmXG4gIGlmICh1c2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdXNlQ2FjaGUgPSB0cnVlO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuXG4gICAgLy8gYW4gZWRnZSBtYXkgYmUgaW1wbGljaXRseSBkaXJ0eSBiL2Mgb2Ygb25lIG9mIGl0cyBjb25uZWN0ZWQgbm9kZXNcbiAgICAvLyAoYW5kIGEgcmVxdWVzdCBmb3IgcmVjYWxjIG1heSBjb21lIGluIGJldHdlZW4gZnJhbWVzKVxuICAgIGlmIChlbGUuaXNFZGdlKCkgJiYgKCFpc0NsZWFuQ29ubmVjdGVkKGVsZS5zb3VyY2UoKSkgfHwgIWlzQ2xlYW5Db25uZWN0ZWQoZWxlLnRhcmdldCgpKSkpIHtcbiAgICAgIHJzdHlsZS5jbGVhbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG9ubHkgdXBkYXRlIGlmIGRpcnR5IGFuZCBpbiBncmFwaFxuICAgIGlmICh1c2VDYWNoZSAmJiByc3R5bGUuY2xlYW4gfHwgZWxlLnJlbW92ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gb25seSB1cGRhdGUgaWYgbm90IGRpc3BsYXk6IG5vbmVcbiAgICBpZiAoZWxlLnBzdHlsZSgnZGlzcGxheScpLnZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoX3AuZ3JvdXAgPT09ICdub2RlcycpIHtcbiAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZWRnZXNcbiAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICB9XG4gICAgcnN0eWxlLmNsZWFuID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBub2RlIGRhdGEgZnJvbSBwcm9qZWN0aW9uc1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2Rlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9lbGUgPSBub2Rlc1tfaTJdO1xuICAgIHZhciBfcDIgPSBfZWxlLl9wcml2YXRlO1xuICAgIHZhciBfcnN0eWxlID0gX3AyLnJzdHlsZTtcbiAgICB2YXIgcG9zID0gX2VsZS5wb3NpdGlvbigpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uKF9lbGUpO1xuICAgIF9yc3R5bGUubm9kZVggPSBwb3MueDtcbiAgICBfcnN0eWxlLm5vZGVZID0gcG9zLnk7XG4gICAgX3JzdHlsZS5ub2RlVyA9IF9lbGUucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gICAgX3JzdHlsZS5ub2RlSCA9IF9lbGUucHN0eWxlKCdoZWlnaHQnKS5wZlZhbHVlO1xuICB9XG4gIHRoaXMucmVjYWxjdWxhdGVFZGdlUHJvamVjdGlvbnMoZWRnZXMpO1xuXG4gIC8vIHVwZGF0ZSBlZGdlIGRhdGEgZnJvbSBwcm9qZWN0aW9uc1xuICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBlZGdlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgdmFyIF9lbGUyID0gZWRnZXNbX2kzXTtcbiAgICB2YXIgX3AzID0gX2VsZTIuX3ByaXZhdGU7XG4gICAgdmFyIF9yc3R5bGUyID0gX3AzLnJzdHlsZTtcbiAgICB2YXIgcnMgPSBfcDMucnNjcmF0Y2g7XG5cbiAgICAvLyB1cGRhdGUgcnN0eWxlIHBvc2l0aW9uc1xuICAgIF9yc3R5bGUyLnNyY1ggPSBycy5hcnJvd1N0YXJ0WDtcbiAgICBfcnN0eWxlMi5zcmNZID0gcnMuYXJyb3dTdGFydFk7XG4gICAgX3JzdHlsZTIudGd0WCA9IHJzLmFycm93RW5kWDtcbiAgICBfcnN0eWxlMi50Z3RZID0gcnMuYXJyb3dFbmRZO1xuICAgIF9yc3R5bGUyLm1pZFggPSBycy5taWRYO1xuICAgIF9yc3R5bGUyLm1pZFkgPSBycy5taWRZO1xuICAgIF9yc3R5bGUyLmxhYmVsQW5nbGUgPSBycy5sYWJlbEFuZ2xlO1xuICAgIF9yc3R5bGUyLnNvdXJjZUxhYmVsQW5nbGUgPSBycy5zb3VyY2VMYWJlbEFuZ2xlO1xuICAgIF9yc3R5bGUyLnRhcmdldExhYmVsQW5nbGUgPSBycy50YXJnZXRMYWJlbEFuZ2xlO1xuICB9XG59O1xuXG52YXIgQlJwJDYgPSB7fTtcbkJScCQ2LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlcyA9IHRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7XG4gIGlmICghZWxlcykge1xuICAgIC8vIGp1c3QgbGV0IHRoaXMgYmUgcmVjYWxjdWxhdGVkIG9uIHRoZSBuZXh0IHogc29ydCB0aWNrXG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZXMuZHJhZyA9IFtdO1xuICBlbGVzLm5vbmRyYWcgPSBbXTtcbiAgdmFyIGdyYWJUYXJnZXRzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICBpZiAoZWxlLmdyYWJiZWQoKSAmJiAhZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgIGdyYWJUYXJnZXRzLnB1c2goZWxlKTtcbiAgICB9IGVsc2UgaWYgKHJzLmluRHJhZ0xheWVyKSB7XG4gICAgICBlbGVzLmRyYWcucHVzaChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVzLm5vbmRyYWcucHVzaChlbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHB1dCB0aGUgZ3JhYiB0YXJnZXQgbm9kZXMgbGFzdCBzbyBpdCdzIG9uIHRvcCBvZiBpdHMgbmVpZ2hib3VyaG9vZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYWJUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IGdyYWJUYXJnZXRzW2ldO1xuICAgIGVsZXMuZHJhZy5wdXNoKGVsZSk7XG4gIH1cbn07XG5CUnAkNi5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2FjaGVkWlNvcnRlZEVsZXMgPSBudWxsO1xufTtcbkJScCQ2LmdldENhY2hlZFpTb3J0ZWRFbGVzID0gZnVuY3Rpb24gKGZvcmNlUmVjYWxjKSB7XG4gIGlmIChmb3JjZVJlY2FsYyB8fCAhdGhpcy5jYWNoZWRaU29ydGVkRWxlcykge1xuICAgIHZhciBlbGVzID0gdGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7XG4gICAgZWxlcy5zb3J0KHpJbmRleFNvcnQpO1xuICAgIGVsZXMuaW50ZXJhY3RpdmUgPSBlbGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmludGVyYWN0aXZlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5jYWNoZWRaU29ydGVkRWxlcyA9IGVsZXM7XG4gICAgdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpO1xuICB9IGVsc2Uge1xuICAgIGVsZXMgPSB0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO1xuICB9XG4gIHJldHVybiBlbGVzO1xufTtcblxudmFyIEJScCQ1ID0ge307XG5bQlJwJGUsIEJScCRkLCBCUnAkYywgQlJwJGIsIEJScCRhLCBCUnAkOSwgQlJwJDgsIEJScCQ3LCBCUnAkNl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKEJScCQ1LCBwcm9wcyk7XG59KTtcblxudmFyIEJScCQ0ID0ge307XG5CUnAkNC5nZXRDYWNoZWRJbWFnZSA9IGZ1bmN0aW9uICh1cmwsIGNyb3NzT3JpZ2luLCBvbkxvYWQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaW1hZ2VDYWNoZSA9IHIuaW1hZ2VDYWNoZSA9IHIuaW1hZ2VDYWNoZSB8fCB7fTtcbiAgdmFyIGNhY2hlID0gaW1hZ2VDYWNoZVt1cmxdO1xuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoIWNhY2hlLmltYWdlLmNvbXBsZXRlKSB7XG4gICAgICBjYWNoZS5pbWFnZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlLmltYWdlO1xuICB9IGVsc2Uge1xuICAgIGNhY2hlID0gaW1hZ2VDYWNoZVt1cmxdID0gaW1hZ2VDYWNoZVt1cmxdIHx8IHt9O1xuICAgIHZhciBpbWFnZSA9IGNhY2hlLmltYWdlID0gbmV3IEltYWdlKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgaW1hZ2UuZXJyb3IgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgLy8gIzE1ODIgc2FmYXJpIGRvZXNuJ3QgbG9hZCBkYXRhIHVyaXMgd2l0aCBjcm9zc09yaWdpbiBwcm9wZXJseVxuICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM5NzhcbiAgICB2YXIgZGF0YVVyaVByZWZpeCA9ICdkYXRhOic7XG4gICAgdmFyIGlzRGF0YVVyaSA9IHVybC5zdWJzdHJpbmcoMCwgZGF0YVVyaVByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGRhdGFVcmlQcmVmaXg7XG4gICAgaWYgKCFpc0RhdGFVcmkpIHtcbiAgICAgIC8vIGlmIGNyb3Nzb3JpZ2luIGlzICdudWxsJyhzdHJpbmdpZmllZCksIHRoZW4gbWFudWFsbHkgc2V0IGl0IHRvIG51bGwgXG4gICAgICBjcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luID09PSAnbnVsbCcgPyBudWxsIDogY3Jvc3NPcmlnaW47XG4gICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luOyAvLyBwcmV2ZW50IHRhaW50ZWQgY2FudmFzXG4gICAgfVxuXG4gICAgaW1hZ2Uuc3JjID0gdXJsO1xuICAgIHJldHVybiBpbWFnZTtcbiAgfVxufTtcblxudmFyIEJScCQzID0ge307XG5cbi8qIGdsb2JhbCBkb2N1bWVudCwgUmVzaXplT2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXIgKi9cblxuQlJwJDMucmVnaXN0ZXJCaW5kaW5nID0gZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMsIFsxXSk7IC8vIGNvcHlcbiAgdmFyIGIgPSB0aGlzLmJpbmRlcih0YXJnZXQpO1xuICByZXR1cm4gYi5vbi5hcHBseShiLCBhcmdzKTtcbn07XG5CUnAkMy5iaW5kZXIgPSBmdW5jdGlvbiAodGd0KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRhaW5lcldpbmRvdyA9IHIuY3kud2luZG93KCk7XG4gIHZhciB0Z3RJc0RvbSA9IHRndCA9PT0gY29udGFpbmVyV2luZG93IHx8IHRndCA9PT0gY29udGFpbmVyV2luZG93LmRvY3VtZW50IHx8IHRndCA9PT0gY29udGFpbmVyV2luZG93LmRvY3VtZW50LmJvZHkgfHwgZG9tRWxlbWVudCh0Z3QpO1xuICBpZiAoci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMgPT0gbnVsbCkge1xuICAgIC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvRXZlbnRMaXN0ZW5lck9wdGlvbnMvYmxvYi9naC1wYWdlcy9leHBsYWluZXIubWQjZmVhdHVyZS1kZXRlY3Rpb25cbiAgICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG51bGwsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZFxuICAgIH1cbiAgICByLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cyA9IHN1cHBvcnRzUGFzc2l2ZTtcbiAgfVxuICB2YXIgb24gPSBmdW5jdGlvbiBvbihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBpZiAodGd0SXNEb20gJiYgci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMpIHtcbiAgICAgIC8vIHJlcGxhY2UgdXNlQ2FwdHVyZSB3LyBvcHRzIG9ialxuICAgICAgYXJnc1syXSA9IHtcbiAgICAgICAgY2FwdHVyZTogdXNlQ2FwdHVyZSAhPSBudWxsID8gdXNlQ2FwdHVyZSA6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgb25jZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIHIuYmluZGluZ3MucHVzaCh7XG4gICAgICB0YXJnZXQ6IHRndCxcbiAgICAgIGFyZ3M6IGFyZ3NcbiAgICB9KTtcbiAgICAodGd0LmFkZEV2ZW50TGlzdGVuZXIgfHwgdGd0Lm9uKS5hcHBseSh0Z3QsIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4ge1xuICAgIG9uOiBvbixcbiAgICBhZGRFdmVudExpc3RlbmVyOiBvbixcbiAgICBhZGRMaXN0ZW5lcjogb24sXG4gICAgYmluZDogb25cbiAgfTtcbn07XG5CUnAkMy5ub2RlSXNEcmFnZ2FibGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLmlzTm9kZSgpICYmICFub2RlLmxvY2tlZCgpICYmIG5vZGUuZ3JhYmJhYmxlKCk7XG59O1xuQlJwJDMubm9kZUlzR3JhYmJhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIHRoaXMubm9kZUlzRHJhZ2dhYmxlKG5vZGUpICYmIG5vZGUuaW50ZXJhY3RpdmUoKTtcbn07XG5CUnAkMy5sb2FkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSByLmN5LndpbmRvdygpO1xuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uIGlzU2VsZWN0ZWQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5zZWxlY3RlZCgpO1xuICB9O1xuICB2YXIgdHJpZ2dlckV2ZW50cyA9IGZ1bmN0aW9uIHRyaWdnZXJFdmVudHModGFyZ2V0LCBuYW1lcywgZSwgcG9zaXRpb24pIHtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgIHRhcmdldCA9IHIuY3k7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgICB0YXJnZXQuZW1pdCh7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6IG5hbWUsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgaXNNdWx0U2VsS2V5RG93biA9IGZ1bmN0aW9uIGlzTXVsdFNlbEtleURvd24oZSkge1xuICAgIHJldHVybiBlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSB8fCBlLmN0cmxLZXk7IC8vIG1heWJlIGUuYWx0S2V5XG4gIH07XG5cbiAgdmFyIGFsbG93UGFubmluZ1Bhc3N0aHJvdWdoID0gZnVuY3Rpb24gYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2goZG93biwgZG93bnMpIHtcbiAgICB2YXIgYWxsb3dQYXNzdGhyb3VnaCA9IHRydWU7XG4gICAgaWYgKHIuY3kuaGFzQ29tcG91bmROb2RlcygpICYmIGRvd24gJiYgZG93bi5wYW5uYWJsZSgpKSB7XG4gICAgICAvLyBhIGdyYWJiYWJsZSBjb21wb3VuZCBub2RlIGJlbG93IHRoZSBlbGUgPT4gbm8gcGFzc3Rocm91Z2ggcGFubmluZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGRvd25zICYmIGkgPCBkb3ducy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZG93biA9IGRvd25zW2ldO1xuXG4gICAgICAgIC8vaWYgYW55IHBhcmVudCBub2RlIGluIGV2ZW50IGhpZXJhcmNoeSBpc24ndCBwYW5uYWJsZSwgcmVqZWN0IHBhc3N0aHJvdWdoXG4gICAgICAgIGlmIChkb3duLmlzTm9kZSgpICYmIGRvd24uaXNQYXJlbnQoKSAmJiAhZG93bi5wYW5uYWJsZSgpKSB7XG4gICAgICAgICAgYWxsb3dQYXNzdGhyb3VnaCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbG93UGFzc3Rocm91Z2ggPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYWxsb3dQYXNzdGhyb3VnaDtcbiAgfTtcbiAgdmFyIHNldEdyYWJiZWQgPSBmdW5jdGlvbiBzZXRHcmFiYmVkKGVsZSkge1xuICAgIGVsZVswXS5fcHJpdmF0ZS5ncmFiYmVkID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIHNldEZyZWVkID0gZnVuY3Rpb24gc2V0RnJlZWQoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLmdyYWJiZWQgPSBmYWxzZTtcbiAgfTtcbiAgdmFyIHNldEluRHJhZ0xheWVyID0gZnVuY3Rpb24gc2V0SW5EcmFnTGF5ZXIoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIHNldE91dERyYWdMYXllciA9IGZ1bmN0aW9uIHNldE91dERyYWdMYXllcihlbGUpIHtcbiAgICBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXIgPSBmYWxzZTtcbiAgfTtcbiAgdmFyIHNldEdyYWJUYXJnZXQgPSBmdW5jdGlvbiBzZXRHcmFiVGFyZ2V0KGVsZSkge1xuICAgIGVsZVswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQgPSB0cnVlO1xuICB9O1xuICB2YXIgcmVtb3ZlR3JhYlRhcmdldCA9IGZ1bmN0aW9uIHJlbW92ZUdyYWJUYXJnZXQoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldCA9IGZhbHNlO1xuICB9O1xuICB2YXIgYWRkVG9EcmFnTGlzdCA9IGZ1bmN0aW9uIGFkZFRvRHJhZ0xpc3QoZWxlLCBvcHRzKSB7XG4gICAgdmFyIGxpc3QgPSBvcHRzLmFkZFRvTGlzdDtcbiAgICB2YXIgbGlzdEhhc0VsZSA9IGxpc3QuaGFzKGVsZSk7XG4gICAgaWYgKCFsaXN0SGFzRWxlICYmIGVsZS5ncmFiYmFibGUoKSAmJiAhZWxlLmxvY2tlZCgpKSB7XG4gICAgICBsaXN0Lm1lcmdlKGVsZSk7XG4gICAgICBzZXRHcmFiYmVkKGVsZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggY2hpbGQgbm9kZXMgYW5kIGlubmVyIGVkZ2VzXG4gIC8vIG9mIGEgY29tcG91bmQgbm9kZSB0byBiZSBkcmFnZ2VkIGFzIHdlbGwgYXMgdGhlIGdyYWJiZWQgYW5kIHNlbGVjdGVkIG5vZGVzXG4gIHZhciBhZGREZXNjZW5kYW50c1RvRHJhZyA9IGZ1bmN0aW9uIGFkZERlc2NlbmRhbnRzVG9EcmFnKG5vZGUsIG9wdHMpIHtcbiAgICBpZiAoIW5vZGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdHMuaW5EcmFnTGF5ZXIgPT0gbnVsbCAmJiBvcHRzLmFkZFRvTGlzdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBub3RoaW5nIHRvIGRvXG5cbiAgICB2YXIgaW5uZXJOb2RlcyA9IG5vZGUuZGVzY2VuZGFudHMoKTtcbiAgICBpZiAob3B0cy5pbkRyYWdMYXllcikge1xuICAgICAgaW5uZXJOb2Rlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIGlubmVyTm9kZXMuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICB9XG4gICAgaWYgKG9wdHMuYWRkVG9MaXN0KSB7XG4gICAgICBhZGRUb0RyYWdMaXN0KGlubmVyTm9kZXMsIG9wdHMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhZGRzIHRoZSBnaXZlbiBub2RlcyBhbmQgaXRzIG5laWdoYm91cmhvb2QgdG8gdGhlIGRyYWcgbGF5ZXJcbiAgdmFyIGFkZE5vZGVzVG9EcmFnID0gZnVuY3Rpb24gYWRkTm9kZXNUb0RyYWcobm9kZXMsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IG5vZGVzLmN5KCkuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICBub2Rlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIG5vZGVzLm5laWdoYm9yaG9vZCgpLnN0ZEZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiAhaGFzQ29tcG91bmROb2RlcyB8fCBlbGUuaXNFZGdlKCk7XG4gICAgICB9KS5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICB9XG4gICAgaWYgKG9wdHMuYWRkVG9MaXN0KSB7XG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgYWRkVG9EcmFnTGlzdChlbGUsIG9wdHMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGFkZERlc2NlbmRhbnRzVG9EcmFnKG5vZGVzLCBvcHRzKTsgLy8gYWx3YXlzIGFkZCB0byBkcmFnXG5cbiAgICAvLyBhbHNvIGFkZCBub2RlcyBhbmQgZWRnZXMgcmVsYXRlZCB0byB0aGUgdG9wbW9zdCBhbmNlc3RvclxuICAgIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyKG5vZGVzLCB7XG4gICAgICBpbkRyYWdMYXllcjogb3B0cy5pbkRyYWdMYXllclxuICAgIH0pO1xuICAgIHIudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKTtcbiAgfTtcbiAgdmFyIGFkZE5vZGVUb0RyYWcgPSBhZGROb2Rlc1RvRHJhZztcbiAgdmFyIGZyZWVEcmFnZ2VkRWxlbWVudHMgPSBmdW5jdGlvbiBmcmVlRHJhZ2dlZEVsZW1lbnRzKGdyYWJiZWRFbGVzKSB7XG4gICAgaWYgKCFncmFiYmVkRWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGp1c3QgZ28gb3ZlciBhbGwgZWxlbWVudHMgcmF0aGVyIHRoYW4gZG9pbmcgYSBidW5jaCBvZiAocG9zc2libHkgZXhwZW5zaXZlKSB0cmF2ZXJzYWxzXG4gICAgci5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgc2V0RnJlZWQoZWxlKTtcbiAgICAgIHNldE91dERyYWdMYXllcihlbGUpO1xuICAgICAgcmVtb3ZlR3JhYlRhcmdldChlbGUpO1xuICAgIH0pO1xuICAgIHIudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKTtcbiAgfTtcblxuICAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGFuY2VzdG9yIG5vZGVzIGFuZCBlZGdlcyBzaG91bGQgZ29cbiAgLy8gdG8gdGhlIGRyYWcgbGF5ZXIgKG9yIHNob3VsZCBiZSByZW1vdmVkIGZyb20gZHJhZyBsYXllcikuXG4gIHZhciB1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciA9IGZ1bmN0aW9uIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyKG5vZGUsIG9wdHMpIHtcbiAgICBpZiAob3B0cy5pbkRyYWdMYXllciA9PSBudWxsICYmIG9wdHMuYWRkVG9MaXN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIG5vdGhpbmcgdG8gZG9cblxuICAgIGlmICghbm9kZS5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpbmQgdG9wLWxldmVsIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSBub2RlLmFuY2VzdG9ycygpLm9ycGhhbnMoKTtcblxuICAgIC8vIG5vIHBhcmVudCBub2RlOiBubyBub2RlcyB0byBhZGQgdG8gdGhlIGRyYWcgbGF5ZXJcbiAgICBpZiAocGFyZW50LnNhbWUobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5vZGVzID0gcGFyZW50LmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UocGFyZW50KS51bm1lcmdlKG5vZGUpLnVubWVyZ2Uobm9kZS5kZXNjZW5kYW50cygpKTtcbiAgICB2YXIgZWRnZXMgPSBub2Rlcy5jb25uZWN0ZWRFZGdlcygpO1xuICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICBlZGdlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIG5vZGVzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5hZGRUb0xpc3QpIHtcbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICBhZGRUb0RyYWdMaXN0KGVsZSwgb3B0cyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBibHVyQWN0aXZlRG9tRWxlbWVudCA9IGZ1bmN0aW9uIGJsdXJBY3RpdmVEb21FbGVtZW50KCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IG51bGwgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyICE9IG51bGwpIHtcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGhhdmVNdXRhdGlvbnNBcGkgPSB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBoYXZlUmVzaXplT2JzZXJ2ZXJBcGkgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8vIHdhdGNoIGZvciB3aGVuIHRoZSBjeSBjb250YWluZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb21cbiAgaWYgKGhhdmVNdXRhdGlvbnNBcGkpIHtcbiAgICByLnJlbW92ZU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dG5zKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dG5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBtdXRuID0gbXV0bnNbaV07XG4gICAgICAgIHZhciByTm9kZXMgPSBtdXRuLnJlbW92ZWROb2RlcztcbiAgICAgICAgaWYgKHJOb2Rlcykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgck5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgck5vZGUgPSByTm9kZXNbal07XG4gICAgICAgICAgICBpZiAock5vZGUgPT09IHIuY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgIHIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoci5jb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgci5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHIuY29udGFpbmVyLnBhcmVudE5vZGUsIHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdET01Ob2RlUmVtb3ZlZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxuICB2YXIgb25SZXNpemUgPSBkZWJvdW5jZV8xKGZ1bmN0aW9uICgpIHtcbiAgICByLmN5LnJlc2l6ZSgpO1xuICB9LCAxMDApO1xuICBpZiAoaGF2ZU11dGF0aW9uc0FwaSkge1xuICAgIHIuc3R5bGVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgci5zdHlsZU9ic2VydmVyLm9ic2VydmUoci5jb250YWluZXIsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGF1dG8gcmVzaXplXG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Jlc2l6ZScsIG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIGlmIChoYXZlUmVzaXplT2JzZXJ2ZXJBcGkpIHtcbiAgICByLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgci5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHIuY29udGFpbmVyKTtcbiAgfVxuICB2YXIgZm9yRWFjaFVwID0gZnVuY3Rpb24gZm9yRWFjaFVwKGRvbUVsZSwgZm4pIHtcbiAgICB3aGlsZSAoZG9tRWxlICE9IG51bGwpIHtcbiAgICAgIGZuKGRvbUVsZSk7XG4gICAgICBkb21FbGUgPSBkb21FbGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH07XG4gIHZhciBpbnZhbGlkYXRlQ29vcmRzID0gZnVuY3Rpb24gaW52YWxpZGF0ZUNvb3JkcygpIHtcbiAgICByLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpO1xuICB9O1xuICBmb3JFYWNoVXAoci5jb250YWluZXIsIGZ1bmN0aW9uIChkb21FbGUpIHtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhkb21FbGUsICd0cmFuc2l0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoZG9tRWxlLCAnYW5pbWF0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoZG9tRWxlLCAnc2Nyb2xsJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gIH0pO1xuXG4gIC8vIHN0b3AgcmlnaHQgY2xpY2sgbWVudSBmcm9tIGFwcGVhcmluZyBvbiBjeVxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xuICB2YXIgaW5Cb3hTZWxlY3Rpb24gPSBmdW5jdGlvbiBpbkJveFNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gci5zZWxlY3Rpb25bNF0gIT09IDA7XG4gIH07XG4gIHZhciBldmVudEluQ29udGFpbmVyID0gZnVuY3Rpb24gZXZlbnRJbkNvbnRhaW5lcihlKSB7XG4gICAgLy8gc2F2ZSBjeWNsZXMgaWYgbW91c2UgZXZlbnRzIGFyZW4ndCB0byBiZSBjYXB0dXJlZFxuICAgIHZhciBjb250YWluZXJQYWdlQ29vcmRzID0gci5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gICAgdmFyIHggPSBjb250YWluZXJQYWdlQ29vcmRzWzBdO1xuICAgIHZhciB5ID0gY29udGFpbmVyUGFnZUNvb3Jkc1sxXTtcbiAgICB2YXIgd2lkdGggPSBjb250YWluZXJQYWdlQ29vcmRzWzJdO1xuICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJQYWdlQ29vcmRzWzNdO1xuICAgIHZhciBwb3NpdGlvbnMgPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXMgOiBbZV07XG4gICAgdmFyIGF0TGVhc3RPbmVQb3NJbnNpZGUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHAgPSBwb3NpdGlvbnNbaV07XG4gICAgICBpZiAoeCA8PSBwLmNsaWVudFggJiYgcC5jbGllbnRYIDw9IHggKyB3aWR0aCAmJiB5IDw9IHAuY2xpZW50WSAmJiBwLmNsaWVudFkgPD0geSArIGhlaWdodCkge1xuICAgICAgICBhdExlYXN0T25lUG9zSW5zaWRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghYXRMZWFzdE9uZVBvc0luc2lkZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29udGFpbmVyID0gci5jb250YWluZXI7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgIHZhciB0UGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgdmFyIGNvbnRhaW5lcklzVGFyZ2V0ID0gZmFsc2U7XG4gICAgd2hpbGUgKHRQYXJlbnQpIHtcbiAgICAgIGlmICh0UGFyZW50ID09PSBjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVySXNUYXJnZXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRQYXJlbnQgPSB0UGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIGlmICghY29udGFpbmVySXNUYXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGlmIHRhcmdldCBpcyBvdXRpc2RlIGN5IGNvbnRhaW5lciwgdGhlbiB0aGlzIGV2ZW50IGlzIG5vdCBmb3IgdXNcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFByaW1hcnkga2V5XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gbW91c2Vkb3duSGFuZGxlcihlKSB7XG4gICAgaWYgKCFldmVudEluQ29udGFpbmVyKGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZHVyaW5nIGxlZnQgbW91c2UgYnV0dG9uIGdlc3R1cmVzLCBpZ25vcmUgb3RoZXIgYnV0dG9uc1xuICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMSAmJiBlLndoaWNoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBibHVyQWN0aXZlRG9tRWxlbWVudCgpO1xuICAgIHIuaG92ZXJEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgIHIuaG92ZXJEYXRhLndoaWNoID0gZS53aGljaDtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBncG9zID0gW2UuY2xpZW50WCwgZS5jbGllbnRZXTtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGdwb3NbMF0sIGdwb3NbMV0pO1xuICAgIHZhciBzZWxlY3QgPSByLnNlbGVjdGlvbjtcbiAgICB2YXIgbmVhcnMgPSByLmZpbmROZWFyZXN0RWxlbWVudHMocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICB2YXIgbmVhciA9IG5lYXJzWzBdO1xuICAgIHZhciBkcmFnZ2VkRWxlbWVudHMgPSByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gcG9zO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duR1BvcyA9IGdwb3M7XG4gICAgdmFyIGNoZWNrRm9yVGFwaG9sZCA9IGZ1bmN0aW9uIGNoZWNrRm9yVGFwaG9sZCgpIHtcbiAgICAgIHIuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgIGNsZWFyVGltZW91dChyLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCk7XG4gICAgICByLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZWxlID0gci5ob3ZlckRhdGEuZG93bjtcbiAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICBlbGUuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICd0YXBob2xkJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcGhvbGQnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCByLnRhcGhvbGREdXJhdGlvbik7XG4gICAgfTtcblxuICAgIC8vIFJpZ2h0IGNsaWNrIGJ1dHRvblxuICAgIGlmIChlLndoaWNoID09IDMpIHtcbiAgICAgIHIuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAobmVhcikge1xuICAgICAgICBuZWFyLmFjdGl2YXRlKCk7XG4gICAgICAgIG5lYXIuZW1pdChjeHRFdnQpO1xuICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH1cbiAgICAgIHIuaG92ZXJEYXRhLmRvd25UaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICByLmhvdmVyRGF0YS5jeHREcmFnZ2VkID0gZmFsc2U7XG5cbiAgICAgIC8vIFByaW1hcnkgYnV0dG9uXG4gICAgfSBlbHNlIGlmIChlLndoaWNoID09IDEpIHtcbiAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgIG5lYXIuYWN0aXZhdGUoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRWxlbWVudCBkcmFnZ2luZ1xuICAgICAge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgaXMgdW5kZXIgdGhlIGN1cnNvciBhbmQgaXQgaXMgZHJhZ2dhYmxlLCBwcmVwYXJlIHRvIGdyYWIgaXRcbiAgICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyLm5vZGVJc0dyYWJiYWJsZShuZWFyKSkge1xuICAgICAgICAgICAgdmFyIG1ha2VFdmVudCA9IGZ1bmN0aW9uIG1ha2VFdmVudCh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRyaWdnZXJHcmFiID0gZnVuY3Rpb24gdHJpZ2dlckdyYWIoZWxlKSB7XG4gICAgICAgICAgICAgIGVsZS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRHcmFiVGFyZ2V0KG5lYXIpO1xuICAgICAgICAgICAgaWYgKCFuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgYWRkTm9kZVRvRHJhZyhuZWFyLCB7XG4gICAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlbWVudHNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5lYXIuZW1pdChtYWtlRXZlbnQoJ2dyYWJvbicpKS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cyA9IHIuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGVzID0gY3kuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuc2VsZWN0ZWQoKSAmJiByLm5vZGVJc0dyYWJiYWJsZShlbGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoc2VsZWN0ZWROb2Rlcywge1xuICAgICAgICAgICAgICAgIGFkZFRvTGlzdDogZHJhZ2dlZEVsZW1lbnRzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFib24nKSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMuZm9yRWFjaCh0cmlnZ2VyR3JhYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgICAgci5ob3ZlckRhdGEuZG93bnMgPSBuZWFycztcbiAgICAgICAgci5ob3ZlckRhdGEuZG93blRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZWRvd24nLCAndGFwc3RhcnQnLCAndm1vdXNlZG93biddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcbiAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgc2VsZWN0WzRdID0gMTtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0ge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH0gZWxzZSBpZiAobmVhci5wYW5uYWJsZSgpKSB7XG4gICAgICAgIHNlbGVjdFs0XSA9IDE7IC8vIGZvciBmdXR1cmUgcGFuXG4gICAgICB9XG5cbiAgICAgIGNoZWNrRm9yVGFwaG9sZCgpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uIGJveCBjb29yZGluYXRlc1xuICAgIHNlbGVjdFswXSA9IHNlbGVjdFsyXSA9IHBvc1swXTtcbiAgICBzZWxlY3RbMV0gPSBzZWxlY3RbM10gPSBwb3NbMV07XG4gIH0sIGZhbHNlKTtcbiAgci5yZWdpc3RlckJpbmRpbmcoY29udGFpbmVyV2luZG93LCAnbW91c2Vtb3ZlJywgZnVuY3Rpb24gbW91c2Vtb3ZlSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcbiAgICBpZiAoIWNhcHR1cmUgJiYgIWV2ZW50SW5Db250YWluZXIoZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICB2YXIgZ3BvcyA9IFtlLmNsaWVudFgsIGUuY2xpZW50WV07XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChncG9zWzBdLCBncG9zWzFdKTtcbiAgICB2YXIgbWRvd25Qb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICB2YXIgbWRvd25HUG9zID0gci5ob3ZlckRhdGEubWRvd25HUG9zO1xuICAgIHZhciBzZWxlY3QgPSByLnNlbGVjdGlvbjtcbiAgICB2YXIgbmVhciA9IG51bGw7XG4gICAgaWYgKCFyLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgJiYgIXIuaG92ZXJEYXRhLmRyYWdnaW5nICYmICFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChwb3NbMF0sIHBvc1sxXSwgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cbiAgICB2YXIgbGFzdCA9IHIuaG92ZXJEYXRhLmxhc3Q7XG4gICAgdmFyIGRvd24gPSByLmhvdmVyRGF0YS5kb3duO1xuICAgIHZhciBkaXNwID0gW3Bvc1swXSAtIHNlbGVjdFsyXSwgcG9zWzFdIC0gc2VsZWN0WzNdXTtcbiAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICB2YXIgaXNPdmVyVGhyZXNob2xkRHJhZztcbiAgICBpZiAobWRvd25HUG9zKSB7XG4gICAgICB2YXIgZHggPSBncG9zWzBdIC0gbWRvd25HUG9zWzBdO1xuICAgICAgdmFyIGR4MiA9IGR4ICogZHg7XG4gICAgICB2YXIgZHkgPSBncG9zWzFdIC0gbWRvd25HUG9zWzFdO1xuICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICByLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnID0gaXNPdmVyVGhyZXNob2xkRHJhZyA9IGRpc3QyID49IHIuZGVza3RvcFRhcFRocmVzaG9sZDI7XG4gICAgfVxuICAgIHZhciBtdWx0U2VsS2V5RG93biA9IGlzTXVsdFNlbEtleURvd24oZSk7XG4gICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgIHIuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgdXBkYXRlRHJhZ0RlbHRhID0gZnVuY3Rpb24gdXBkYXRlRHJhZ0RlbHRhKCkge1xuICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSB8fCBbXTtcbiAgICAgIGlmIChkcmFnRGVsdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICBkcmFnRGVsdGEucHVzaChkaXNwWzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICBkcmFnRGVsdGFbMV0gKz0gZGlzcFsxXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICB0cmlnZ2VyRXZlbnRzKG5lYXIsIFsnbW91c2Vtb3ZlJywgJ3Ztb3VzZW1vdmUnLCAndGFwZHJhZyddLCBlLCB7XG4gICAgICB4OiBwb3NbMF0sXG4gICAgICB5OiBwb3NbMV1cbiAgICB9KTtcbiAgICB2YXIgZ29JbnRvQm94TW9kZSA9IGZ1bmN0aW9uIGdvSW50b0JveE1vZGUoKSB7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdib3hzdGFydCcsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWxlY3RbNF0gPSAxO1xuICAgICAgci5ob3ZlckRhdGEuc2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuICAgIH07XG5cbiAgICAvLyB0cmlnZ2VyIGNvbnRleHQgZHJhZyBpZiBybW91c2UgZG93blxuICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMykge1xuICAgICAgLy8gYnV0IG9ubHkgaWYgb3ZlciB0aHJlc2hvbGRcbiAgICAgIGlmIChpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiAnY3h0ZHJhZycsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRvd24pIHtcbiAgICAgICAgICBkb3duLmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN4dEV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IHRydWU7XG4gICAgICAgIGlmICghci5ob3ZlckRhdGEuY3h0T3ZlciB8fCBuZWFyICE9PSByLmhvdmVyRGF0YS5jeHRPdmVyKSB7XG4gICAgICAgICAgaWYgKHIuaG92ZXJEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmN4dE92ZXIuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByLmhvdmVyRGF0YS5jeHRPdmVyID0gbmVhcjtcbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2N4dGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZHJhZyBwYW5uaW5nIHRoZSBlbnRpcmUgZ3JhcGhcbiAgICB9IGVsc2UgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoY3kucGFubmluZ0VuYWJsZWQoKSAmJiBjeS51c2VyUGFubmluZ0VuYWJsZWQoKSkge1xuICAgICAgICB2YXIgZGVsdGFQO1xuICAgICAgICBpZiAoci5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4pIHtcbiAgICAgICAgICB2YXIgbWRQb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICAgICAgICBkZWx0YVAgPSB7XG4gICAgICAgICAgICB4OiAocG9zWzBdIC0gbWRQb3NbMF0pICogem9vbSxcbiAgICAgICAgICAgIHk6IChwb3NbMV0gLSBtZFBvc1sxXSkgKiB6b29tXG4gICAgICAgICAgfTtcbiAgICAgICAgICByLmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhUCA9IHtcbiAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgeTogZGlzcFsxXSAqIHpvb21cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGN5LnBhbkJ5KGRlbHRhUCk7XG4gICAgICAgIGN5LmVtaXQoJ2RyYWdwYW4nKTtcbiAgICAgICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE5lZWRzIHJlcHJvamVjdCBkdWUgdG8gcGFuIGNoYW5naW5nIHZpZXdwb3J0XG4gICAgICBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuXG4gICAgICAvLyBDaGVja3MgcHJpbWFyeSBidXR0b24gZG93biAmIG91dCBvZiB0aW1lICYgbW91c2Ugbm90IG1vdmVkIG11Y2hcbiAgICB9IGVsc2UgaWYgKHNlbGVjdFs0XSA9PSAxICYmIChkb3duID09IG51bGwgfHwgZG93bi5wYW5uYWJsZSgpKSkge1xuICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgaWYgKCFyLmhvdmVyRGF0YS5kcmFnZ2luZyAmJiBjeS5ib3hTZWxlY3Rpb25FbmFibGVkKCkgJiYgKG11bHRTZWxLZXlEb3duIHx8ICFjeS5wYW5uaW5nRW5hYmxlZCgpIHx8ICFjeS51c2VyUGFubmluZ0VuYWJsZWQoKSkpIHtcbiAgICAgICAgICBnb0ludG9Cb3hNb2RlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgdmFyIGFsbG93UGFzc3Rocm91Z2ggPSBhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaChkb3duLCByLmhvdmVyRGF0YS5kb3ducyk7XG4gICAgICAgICAgaWYgKGFsbG93UGFzc3Rocm91Z2gpIHtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSBhcnJheTJwb2ludChtZG93blBvcyk7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvd24gJiYgZG93bi5wYW5uYWJsZSgpICYmIGRvd24uYWN0aXZlKCkpIHtcbiAgICAgICAgICBkb3duLnVuYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG93biAmJiBkb3duLnBhbm5hYmxlKCkgJiYgZG93bi5hY3RpdmUoKSkge1xuICAgICAgICBkb3duLnVuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgoIWRvd24gfHwgIWRvd24uZ3JhYmJlZCgpKSAmJiBuZWFyICE9IGxhc3QpIHtcbiAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKGxhc3QsIFsnbW91c2VvdXQnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZW92ZXInLCAndGFwZHJhZ292ZXInXSwgZSwge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgci5ob3ZlckRhdGEubGFzdCA9IG5lYXI7XG4gICAgICB9XG4gICAgICBpZiAoZG93bikge1xuICAgICAgICBpZiAoaXNPdmVyVGhyZXNob2xkRHJhZykge1xuICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHRha2UgYWN0aW9uXG5cbiAgICAgICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpICYmIG11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICAvLyB0aGVuIHNlbGVjdGlvbiBvdmVycmlkZXNcbiAgICAgICAgICAgIGlmIChkb3duICYmIGRvd24uZ3JhYmJlZCgpKSB7XG4gICAgICAgICAgICAgIGZyZWVEcmFnZ2VkRWxlbWVudHMoZHJhZ2dlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgZG93bi5lbWl0KCdmcmVlb24nKTtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLmVtaXQoJ2ZyZWUnKTtcbiAgICAgICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgICAgIGRvd24uZW1pdCgnZHJhZ2ZyZWVvbicpO1xuICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdkcmFnZnJlZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnb0ludG9Cb3hNb2RlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkb3duICYmIGRvd24uZ3JhYmJlZCgpICYmIHIubm9kZUlzRHJhZ2dhYmxlKGRvd24pKSB7XG4gICAgICAgICAgICAvLyBkcmFnIG5vZGVcbiAgICAgICAgICAgIHZhciBqdXN0U3RhcnRlZERyYWcgPSAhci5kcmFnRGF0YS5kaWREcmFnO1xuICAgICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIuZHJhZ0RhdGEuZGlkRHJhZyA9IHRydWU7IC8vIGluZGljYXRlIHRoYXQgd2UgYWN0dWFsbHkgZGlkIGRyYWcgdGhlIG5vZGVcblxuICAgICAgICAgICAgLy8gbm93LCBhZGQgdGhlIGVsZW1lbnRzIHRvIHRoZSBkcmFnIGxheWVyIGlmIG5vdCBkb25lIGFscmVhZHlcbiAgICAgICAgICAgIGlmICghci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzKSB7XG4gICAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKGRyYWdnZWRFbGVtZW50cywge1xuICAgICAgICAgICAgICAgIGluRHJhZ0xheWVyOiB0cnVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRvdGFsU2hpZnQgPSB7XG4gICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobnVtYmVyJDEoZGlzcFswXSkgJiYgbnVtYmVyJDEoZGlzcFsxXSkpIHtcbiAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkaXNwWzFdO1xuICAgICAgICAgICAgICBpZiAoanVzdFN0YXJ0ZWREcmFnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YTtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ0RlbHRhICYmIG51bWJlciQxKGRyYWdEZWx0YVswXSkgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzFdKSkge1xuICAgICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkcmFnRGVsdGFbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgPSB0cnVlO1xuICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLnNpbGVudFNoaWZ0KHRvdGFsU2hpZnQpLmVtaXQoJ3Bvc2l0aW9uIGRyYWcnKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNhdmUgZHJhZyBkZWx0YSBmb3Igd2hlbiB3ZSBhY3R1YWxseSBzdGFydCBkcmFnZ2luZyBzbyB0aGUgcmVsYXRpdmUgZ3JhYiBwb3MgaXMgY29uc3RhbnRcbiAgICAgICAgICB1cGRhdGVEcmFnRGVsdGEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IHRoZSBkcmFnZ2luZyBmcm9tIHRyaWdnZXJpbmcgdGV4dCBzZWxlY3Rpb24gb24gdGhlIHBhZ2VcbiAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICB9XG4gICAgc2VsZWN0WzJdID0gcG9zWzBdO1xuICAgIHNlbGVjdFszXSA9IHBvc1sxXTtcbiAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIHZhciBjbGlja1RpbWVvdXQsIGRpZERvdWJsZUNsaWNrLCBwcmV2Q2xpY2tUaW1lU3RhbXA7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ21vdXNldXAnLCBmdW5jdGlvbiBtb3VzZXVwSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIC8vIGR1cmluZyBsZWZ0IG1vdXNlIGJ1dHRvbiBnZXN0dXJlcywgaWdub3JlIG90aGVyIGJ1dHRvbnNcbiAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDEgJiYgZS53aGljaCAhPT0gMSAmJiByLmhvdmVyRGF0YS5jYXB0dXJlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcbiAgICBpZiAoIWNhcHR1cmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgci5ob3ZlckRhdGEuY2FwdHVyZSA9IGZhbHNlO1xuICAgIHZhciBjeSA9IHIuY3k7XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICB2YXIgZG93biA9IHIuaG92ZXJEYXRhLmRvd247XG4gICAgdmFyIG11bHRTZWxLZXlEb3duID0gaXNNdWx0U2VsS2V5RG93bihlKTtcbiAgICBpZiAoci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG4gICAgci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCA9IHRydWU7XG4gICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkOyAvLyBub3QgYWN0aXZlIGJnIG5vd1xuXG4gICAgaWYgKGRvd24pIHtcbiAgICAgIGRvd24udW5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDMpIHtcbiAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChkb3duKSB7XG4gICAgICAgIGRvd24uZW1pdChjeHRFdnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3kuZW1pdChjeHRFdnQpO1xuICAgICAgfVxuICAgICAgaWYgKCFyLmhvdmVyRGF0YS5jeHREcmFnZ2VkKSB7XG4gICAgICAgIHZhciBjeHRUYXAgPSB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiAnY3h0dGFwJyxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoZG93bikge1xuICAgICAgICAgIGRvd24uZW1pdChjeHRUYXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3h0VGFwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEud2hpY2ggPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDEpIHtcbiAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZXVwJywgJ3RhcGVuZCcsICd2bW91c2V1cCddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcbiAgICAgIGlmICghci5kcmFnRGF0YS5kaWREcmFnICYmXG4gICAgICAvLyBkaWRuJ3QgbW92ZSBhIG5vZGUgYXJvdW5kXG4gICAgICAhci5ob3ZlckRhdGEuZHJhZ2dlZCAmJlxuICAgICAgLy8gZGlkbid0IHBhblxuICAgICAgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJlxuICAgICAgLy8gbm90IGJveCBzZWxlY3Rpb25cbiAgICAgICFyLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnIC8vIGRpZG4ndCBtb3ZlIHRvbyBtdWNoXG4gICAgICApIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50cyhkb3duLCBbXCJjbGlja1wiLCBcInRhcFwiLCBcInZjbGlja1wiXSwgZSwge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpZERvdWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgIGlmIChlLnRpbWVTdGFtcCAtIHByZXZDbGlja1RpbWVTdGFtcCA8PSBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpIHtcbiAgICAgICAgICBjbGlja1RpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KGNsaWNrVGltZW91dCk7XG4gICAgICAgICAgZGlkRG91YmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgIHByZXZDbGlja1RpbWVTdGFtcCA9IG51bGw7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhkb3duLCBbXCJkYmxjbGlja1wiLCBcImRibHRhcFwiLCBcInZkYmxjbGlja1wiXSwgZSwge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpY2tUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZGlkRG91YmxlQ2xpY2spIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudHMoZG93biwgW1wib25lY2xpY2tcIiwgXCJvbmV0YXBcIiwgXCJ2b25lY2xpY2tcIl0sIGUsIHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIGN5Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSk7XG4gICAgICAgICAgcHJldkNsaWNrVGltZVN0YW1wID0gZS50aW1lU3RhbXA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGVzZWxlY3QgYWxsIGVsZW1lbnRzIGlmIG5vdGhpbmcgaXMgY3VycmVudGx5IHVuZGVyIHRoZSBtb3VzZSBjdXJzb3IgYW5kIHdlIGFyZW4ndCBkcmFnZ2luZyBzb21ldGhpbmdcbiAgICAgIGlmIChkb3duID09IG51bGwgLy8gbm90IG1vdXNlZG93biBvbiBub2RlXG4gICAgICAmJiAhci5kcmFnRGF0YS5kaWREcmFnIC8vIGRpZG4ndCBtb3ZlIHRoZSBub2RlIGFyb3VuZFxuICAgICAgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAvLyBub3QgYm94IHNlbGVjdGlvblxuICAgICAgJiYgIXIuaG92ZXJEYXRhLmRyYWdnZWQgLy8gZGlkbid0IHBhblxuICAgICAgJiYgIWlzTXVsdFNlbEtleURvd24oZSkpIHtcbiAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzID0gZHJhZ2dlZEVsZW1lbnRzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW5nbGUgc2VsZWN0aW9uXG4gICAgICBpZiAobmVhciA9PSBkb3duICYmICFyLmRyYWdEYXRhLmRpZERyYWcgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBpZiAobmVhciAhPSBudWxsICYmIG5lYXIuX3ByaXZhdGUuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykgOyBlbHNlIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdhZGRpdGl2ZScgfHwgbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgIGlmIChuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgbmVhci51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmVhci5zZWxlY3QoWyd0YXBzZWxlY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bm1lcmdlKG5lYXIpLnVuc2VsZWN0KFsndGFwdW5zZWxlY3QnXSk7XG4gICAgICAgICAgICAgIG5lYXIuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICB2YXIgYm94ID0gY3kuY29sbGVjdGlvbihyLmdldEFsbEluQm94KHNlbGVjdFswXSwgc2VsZWN0WzFdLCBzZWxlY3RbMl0sIHNlbGVjdFszXSkpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICBpZiAoYm94Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICB0eXBlOiAnYm94ZW5kJyxcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuc2VsZWN0YWJsZSgpICYmICFlbGUuc2VsZWN0ZWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN5LnNlbGVjdGlvblR5cGUoKSA9PT0gJ2FkZGl0aXZlJykge1xuICAgICAgICAgIGJveC5lbWl0KCdib3gnKS5zdGRGaWx0ZXIoZWxlV291bGRCZVNlbGVjdGVkKS5zZWxlY3QoKS5lbWl0KCdib3hzZWxlY3QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICBjeS4kKGlzU2VsZWN0ZWQpLnVubWVyZ2UoYm94KS51bnNlbGVjdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBib3guZW1pdCgnYm94Jykuc3RkRmlsdGVyKGVsZVdvdWxkQmVTZWxlY3RlZCkuc2VsZWN0KCkuZW1pdCgnYm94c2VsZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHdheXMgbmVlZCByZWRyYXcgaW4gY2FzZSBlbGVzIHVuc2VsZWN0YWJsZVxuICAgICAgICByLnJlZHJhdygpO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgZHJhZyBwYW5cbiAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykge1xuICAgICAgICByLmhvdmVyRGF0YS5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZWN0WzRdKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgdmFyIGRvd25XYXNHcmFiYmVkID0gZG93biAmJiBkb3duLmdyYWJiZWQoKTtcbiAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlbWVudHMpO1xuICAgICAgICBpZiAoZG93bldhc0dyYWJiZWQpIHtcbiAgICAgICAgICBkb3duLmVtaXQoJ2ZyZWVvbicpO1xuICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdmcmVlJyk7XG4gICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgZG93bi5lbWl0KCdkcmFnZnJlZW9uJyk7XG4gICAgICAgICAgICBkcmFnZ2VkRWxlbWVudHMuZW1pdCgnZHJhZ2ZyZWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGVsc2Ugbm90IHJpZ2h0IG1vdXNlXG5cbiAgICBzZWxlY3RbNF0gPSAwO1xuICAgIHIuaG92ZXJEYXRhLmRvd24gPSBudWxsO1xuICAgIHIuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnID0gZmFsc2U7XG4gICAgci5kcmFnRGF0YS5kaWREcmFnID0gZmFsc2U7XG4gICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IGZhbHNlO1xuICAgIHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IFtdO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gbnVsbDtcbiAgICByLmhvdmVyRGF0YS5tZG93bkdQb3MgPSBudWxsO1xuICAgIHIuaG92ZXJEYXRhLndoaWNoID0gbnVsbDtcbiAgfSwgZmFsc2UpO1xuICB2YXIgd2hlZWxIYW5kbGVyID0gZnVuY3Rpb24gd2hlZWxIYW5kbGVyKGUpIHtcbiAgICBpZiAoci5zY3JvbGxpbmdQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB3aGlsZSBzY3JvbGxpbmcsIGlnbm9yZSB3aGVlbC10by16b29tXG5cbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICB2YXIgcnBvcyA9IFtwb3NbMF0gKiB6b29tICsgcGFuLngsIHBvc1sxXSAqIHpvb20gKyBwYW4ueV07XG4gICAgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZyB8fCByLmhvdmVyRGF0YS5jeHRTdGFydGVkIHx8IGluQm94U2VsZWN0aW9uKCkpIHtcbiAgICAgIC8vIGlmIHBhbiBkcmFnZ2luZyBvciBjeHQgZHJhZ2dpbmcsIHdoZWVsIG1vdmVtZW50cyBtYWtlIG5vIHpvb21cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN5LnBhbm5pbmdFbmFibGVkKCkgJiYgY3kudXNlclBhbm5pbmdFbmFibGVkKCkgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS51c2VyWm9vbWluZ0VuYWJsZWQoKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgci5kYXRhLndoZWVsWm9vbWluZyA9IHRydWU7XG4gICAgICBjbGVhclRpbWVvdXQoci5kYXRhLndoZWVsVGltZW91dCk7XG4gICAgICByLmRhdGEud2hlZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHIuZGF0YS53aGVlbFpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9LCAxNTApO1xuICAgICAgdmFyIGRpZmY7XG4gICAgICBpZiAoZS5kZWx0YVkgIT0gbnVsbCkge1xuICAgICAgICBkaWZmID0gZS5kZWx0YVkgLyAtMjUwO1xuICAgICAgfSBlbHNlIGlmIChlLndoZWVsRGVsdGFZICE9IG51bGwpIHtcbiAgICAgICAgZGlmZiA9IGUud2hlZWxEZWx0YVkgLyAxMDAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlmZiA9IGUud2hlZWxEZWx0YSAvIDEwMDA7XG4gICAgICB9XG4gICAgICBkaWZmID0gZGlmZiAqIHIud2hlZWxTZW5zaXRpdml0eTtcbiAgICAgIHZhciBuZWVkc1doZWVsRml4ID0gZS5kZWx0YU1vZGUgPT09IDE7XG4gICAgICBpZiAobmVlZHNXaGVlbEZpeCkge1xuICAgICAgICAvLyBmaXhlcyBzbG93IHdoZWVsIGV2ZW50cyBvbiBmZi9saW51eCBhbmQgZmYvd2luZG93c1xuICAgICAgICBkaWZmICo9IDMzO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1pvb20gPSBjeS56b29tKCkgKiBNYXRoLnBvdygxMCwgZGlmZik7XG4gICAgICBpZiAoZS50eXBlID09PSAnZ2VzdHVyZWNoYW5nZScpIHtcbiAgICAgICAgbmV3Wm9vbSA9IHIuZ2VzdHVyZVN0YXJ0Wm9vbSAqIGUuc2NhbGU7XG4gICAgICB9XG4gICAgICBjeS56b29tKHtcbiAgICAgICAgbGV2ZWw6IG5ld1pvb20sXG4gICAgICAgIHJlbmRlcmVkUG9zaXRpb246IHtcbiAgICAgICAgICB4OiBycG9zWzBdLFxuICAgICAgICAgIHk6IHJwb3NbMV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjeS5lbWl0KGUudHlwZSA9PT0gJ2dlc3R1cmVjaGFuZ2UnID8gJ3BpbmNoem9vbScgOiAnc2Nyb2xsem9vbScpO1xuICAgIH1cbiAgfTtcblxuICAvLyBGdW5jdGlvbnMgdG8gaGVscCB3aXRoIHdoZXRoZXIgbW91c2Ugd2hlZWwgc2hvdWxkIHRyaWdnZXIgem9vbWluZ1xuICAvLyAtLVxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3doZWVsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTtcblxuICAvLyBkaXNhYmxlIG5vbnN0YW5kYXJkIHdoZWVsIGV2ZW50c1xuICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNld2hlZWwnLCB3aGVlbEhhbmRsZXIsIHRydWUpO1xuICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ0RPTU1vdXNlU2Nyb2xsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTtcbiAgLy8gci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdNb3pNb3VzZVBpeGVsU2Nyb2xsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTsgLy8gb2xkZXIgZmlyZWZveFxuXG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Njcm9sbCcsIGZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByLnNjcm9sbGluZ1BhZ2UgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dChyLnNjcm9sbGluZ1BhZ2VUaW1lb3V0KTtcbiAgICByLnNjcm9sbGluZ1BhZ2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByLnNjcm9sbGluZ1BhZ2UgPSBmYWxzZTtcbiAgICB9LCAyNTApO1xuICB9LCB0cnVlKTtcblxuICAvLyBkZXNrdG9wIHNhZmFyaSBwaW5jaCB0byB6b29tIHN0YXJ0XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnZ2VzdHVyZXN0YXJ0JywgZnVuY3Rpb24gZ2VzdHVyZVN0YXJ0SGFuZGxlcihlKSB7XG4gICAgci5nZXN0dXJlU3RhcnRab29tID0gci5jeS56b29tKCk7XG4gICAgaWYgKCFyLmhhc1RvdWNoU3RhcnRlZCkge1xuICAgICAgLy8gZG9uJ3QgYWZmZWN0IHRvdWNoIGRldmljZXMgbGlrZSBpcGhvbmVcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2dlc3R1cmVjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghci5oYXNUb3VjaFN0YXJ0ZWQpIHtcbiAgICAgIC8vIGRvbid0IGFmZmVjdCB0b3VjaCBkZXZpY2VzIGxpa2UgaXBob25lXG4gICAgICB3aGVlbEhhbmRsZXIoZSk7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICAvLyBGdW5jdGlvbnMgdG8gaGVscCB3aXRoIGhhbmRsaW5nIG1vdXNlb3V0L21vdXNlb3ZlciBvbiB0aGUgQ3l0b3NjYXBlIGNvbnRhaW5lclxuICAvLyBIYW5kbGUgbW91c2VvdXQgb24gQ3l0b3NjYXBlIGNvbnRhaW5lclxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNlb3V0JywgZnVuY3Rpb24gbW91c2VPdXRIYW5kbGVyKGUpIHtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICByLmN5LmVtaXQoe1xuICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgIHR5cGU6ICdtb3VzZW91dCcsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgIHk6IHBvc1sxXVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBmYWxzZSk7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnbW91c2VvdmVyJywgZnVuY3Rpb24gbW91c2VPdmVySGFuZGxlcihlKSB7XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgci5jeS5lbWl0KHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICB0eXBlOiAnbW91c2VvdmVyJyxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9XG4gICAgfSk7XG4gIH0sIGZhbHNlKTtcbiAgdmFyIGYxeDEsIGYxeTEsIGYyeDEsIGYyeTE7IC8vIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuICB2YXIgZGlzdGFuY2UxLCBkaXN0YW5jZTFTcTsgLy8gaW5pdGlhbCBkaXN0YW5jZSBiZXR3ZWVuIGZpbmdlciAxIGFuZCBmaW5nZXIgMiBmb3IgcGluY2gtdG8tem9vbVxuICB2YXIgY2VudGVyMSwgbW9kZWxDZW50ZXIxOyAvLyBjZW50ZXIgcG9pbnQgb24gc3RhcnQgcGluY2ggdG8gem9vbVxuICB2YXIgb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wO1xuICB2YXIgY29udGFpbmVyV2lkdGgsIGNvbnRhaW5lckhlaWdodDtcbiAgdmFyIHR3b0ZpbmdlcnNTdGFydEluc2lkZTtcbiAgdmFyIGRpc3RhbmNlID0gZnVuY3Rpb24gZGlzdGFuY2UoeDEsIHkxLCB4MiwgeTIpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KCh4MiAtIHgxKSAqICh4MiAtIHgxKSArICh5MiAtIHkxKSAqICh5MiAtIHkxKSk7XG4gIH07XG4gIHZhciBkaXN0YW5jZVNxID0gZnVuY3Rpb24gZGlzdGFuY2VTcSh4MSwgeTEsIHgyLCB5Mikge1xuICAgIHJldHVybiAoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSk7XG4gIH07XG4gIHZhciB0b3VjaHN0YXJ0SGFuZGxlcjtcbiAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdG91Y2hzdGFydEhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaHN0YXJ0SGFuZGxlcihlKSB7XG4gICAgci5oYXNUb3VjaFN0YXJ0ZWQgPSB0cnVlO1xuICAgIGlmICghZXZlbnRJbkNvbnRhaW5lcihlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibHVyQWN0aXZlRG9tRWxlbWVudCgpO1xuICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBub3cgPSByLnRvdWNoRGF0YS5ub3c7XG4gICAgdmFyIGVhcmxpZXIgPSByLnRvdWNoRGF0YS5lYXJsaWVyO1xuICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgIG5vd1swXSA9IHBvc1swXTtcbiAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1sxXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgbm93WzJdID0gcG9zWzBdO1xuICAgICAgbm93WzNdID0gcG9zWzFdO1xuICAgIH1cbiAgICBpZiAoZS50b3VjaGVzWzJdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1syXS5jbGllbnRYLCBlLnRvdWNoZXNbMl0uY2xpZW50WSk7XG4gICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICBub3dbNV0gPSBwb3NbMV07XG4gICAgfVxuXG4gICAgLy8gcmVjb3JkIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhyLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMpO1xuICAgICAgdmFyIG9mZnNldHMgPSByLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgICAgIG9mZnNldExlZnQgPSBvZmZzZXRzWzBdO1xuICAgICAgb2Zmc2V0VG9wID0gb2Zmc2V0c1sxXTtcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gb2Zmc2V0c1syXTtcbiAgICAgIGNvbnRhaW5lckhlaWdodCA9IG9mZnNldHNbM107XG4gICAgICBmMXgxID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBvZmZzZXRMZWZ0O1xuICAgICAgZjF5MSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgZjJ4MSA9IGUudG91Y2hlc1sxXS5jbGllbnRYIC0gb2Zmc2V0TGVmdDtcbiAgICAgIGYyeTEgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIHR3b0ZpbmdlcnNTdGFydEluc2lkZSA9IDAgPD0gZjF4MSAmJiBmMXgxIDw9IGNvbnRhaW5lcldpZHRoICYmIDAgPD0gZjJ4MSAmJiBmMngxIDw9IGNvbnRhaW5lcldpZHRoICYmIDAgPD0gZjF5MSAmJiBmMXkxIDw9IGNvbnRhaW5lckhlaWdodCAmJiAwIDw9IGYyeTEgJiYgZjJ5MSA8PSBjb250YWluZXJIZWlnaHQ7XG4gICAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICAgIGRpc3RhbmNlMSA9IGRpc3RhbmNlKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgZGlzdGFuY2UxU3EgPSBkaXN0YW5jZVNxKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgY2VudGVyMSA9IFsoZjF4MSArIGYyeDEpIC8gMiwgKGYxeTEgKyBmMnkxKSAvIDJdO1xuICAgICAgbW9kZWxDZW50ZXIxID0gWyhjZW50ZXIxWzBdIC0gcGFuLngpIC8gem9vbSwgKGNlbnRlcjFbMV0gLSBwYW4ueSkgLyB6b29tXTtcblxuICAgICAgLy8gY29uc2lkZXIgY29udGV4dCB0YXBcbiAgICAgIHZhciBjeHREaXN0VGhyZXNob2xkID0gMjAwO1xuICAgICAgdmFyIGN4dERpc3RUaHJlc2hvbGRTcSA9IGN4dERpc3RUaHJlc2hvbGQgKiBjeHREaXN0VGhyZXNob2xkO1xuICAgICAgaWYgKGRpc3RhbmNlMVNxIDwgY3h0RGlzdFRocmVzaG9sZFNxICYmICFlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgdmFyIG5lYXIxID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgICB2YXIgbmVhcjIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMl0sIG5vd1szXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChuZWFyMSAmJiBuZWFyMS5pc05vZGUoKSkge1xuICAgICAgICAgIG5lYXIxLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMTtcbiAgICAgICAgfSBlbHNlIGlmIChuZWFyMiAmJiBuZWFyMi5pc05vZGUoKSkge1xuICAgICAgICAgIG5lYXIyLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnY3h0dGFwc3RhcnQnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoci50b3VjaERhdGEuc3RhcnQpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgci50b3VjaERhdGEuY3h0ID0gdHJ1ZTtcbiAgICAgICAgci50b3VjaERhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgLy8gaWdub3JlXG5cbiAgICAgIC8vIHNhZmFyaSBvbiBpb3MgcGFucyB0aGUgcGFnZSBvdGhlcndpc2UgKG5vcm1hbGx5IHlvdSBzaG91bGQgYmUgYWJsZSB0byBwcmV2ZW50ZGVmYXVsdCBvbiB0b3VjaG1vdmUuLi4pXG4gICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1sxXSkgOyBlbHNlIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgIHZhciBuZWFycyA9IHIuZmluZE5lYXJlc3RFbGVtZW50cyhub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB2YXIgbmVhciA9IG5lYXJzWzBdO1xuICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICBuZWFyLmFjdGl2YXRlKCk7XG4gICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbmVhcjtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRzID0gbmVhcnM7XG4gICAgICAgIGlmIChyLm5vZGVJc0dyYWJiYWJsZShuZWFyKSkge1xuICAgICAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWROb2RlcyA9IG51bGw7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgICAgaWYgKG5lYXIuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgLy8gcmVzZXQgZHJhZyBlbGVtZW50cywgc2luY2UgbmVhciB3aWxsIGJlIGFkZGVkIGFnYWluXG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSBjeS4kKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsZS5zZWxlY3RlZCgpICYmIHIubm9kZUlzR3JhYmJhYmxlKGVsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKHNlbGVjdGVkTm9kZXMsIHtcbiAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZE5vZGVUb0RyYWcobmVhciwge1xuICAgICAgICAgICAgICBhZGRUb0xpc3Q6IGRyYWdnZWRFbGVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0R3JhYlRhcmdldChuZWFyKTtcbiAgICAgICAgICB2YXIgbWFrZUV2ZW50ID0gZnVuY3Rpb24gbWFrZUV2ZW50KHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgbmVhci5lbWl0KG1ha2VFdmVudCgnZ3JhYm9uJykpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgICAgbi5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFiJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJpZ2dlckV2ZW50cyhuZWFyLCBbJ3RvdWNoc3RhcnQnLCAndGFwc3RhcnQnLCAndm1vdXNlZG93biddLCBlLCB7XG4gICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgeTogbm93WzFdXG4gICAgICB9KTtcbiAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0ge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFwLCB0YXBob2xkXG4gICAgICAvLyAtLS0tLVxuXG4gICAgICByLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkID0gZmFsc2U7XG4gICAgICByLnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZSA9ICtuZXcgRGF0ZSgpO1xuICAgICAgY2xlYXJUaW1lb3V0KHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KTtcbiAgICAgIHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkID09PSBmYWxzZSAmJiAhci5waW5jaGluZyAvLyBpZiBwaW5jaGluZywgdGhlbiB0YXBob2xkIHVuc2VsZWN0IHNob3VsZG4ndCB0YWtlIGVmZmVjdFxuICAgICAgICAmJiAhci50b3VjaERhdGEuc2VsZWN0aW5nIC8vIGJveCBzZWxlY3Rpb24gc2hvdWxkbid0IGFsbG93IHRhcGhvbGQgdGhyb3VnaFxuICAgICAgICApIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHIudG91Y2hEYXRhLnN0YXJ0LCBbJ3RhcGhvbGQnXSwgZSwge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHIudGFwaG9sZER1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPj0gMSkge1xuICAgICAgdmFyIHNQb3MgPSByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uID0gW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc1Bvc1tpXSA9IGVhcmxpZXJbaV0gPSBub3dbaV07XG4gICAgICB9XG4gICAgICB2YXIgdG91Y2gwID0gZS50b3VjaGVzWzBdO1xuICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbdG91Y2gwLmNsaWVudFgsIHRvdWNoMC5jbGllbnRZXTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgdmFyIHRvdWNobW92ZUhhbmRsZXI7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3RvdWNobW92ZScsIHRvdWNobW92ZUhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaG1vdmVIYW5kbGVyKGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuICAgIGlmICghY2FwdHVyZSAmJiAhZXZlbnRJbkNvbnRhaW5lcihlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgfVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgIH1cbiAgICB2YXIgc3RhcnRHUG9zID0gci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb247XG4gICAgdmFyIGlzT3ZlclRocmVzaG9sZERyYWc7XG4gICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzWzBdICYmIHN0YXJ0R1Bvcykge1xuICAgICAgdmFyIGRpc3AgPSBbXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRpc3Bbal0gPSBub3dbal0gLSBlYXJsaWVyW2pdO1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBzdGFydEdQb3NbMF07XG4gICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgIHZhciBkeSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gc3RhcnRHUG9zWzFdO1xuICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICBpc092ZXJUaHJlc2hvbGREcmFnID0gZGlzdDIgPj0gci50b3VjaFRhcFRocmVzaG9sZDI7XG4gICAgfVxuXG4gICAgLy8gY29udGV4dCBzd2lwZSBjYW5jZWxsaW5nXG4gICAgaWYgKGNhcHR1cmUgJiYgci50b3VjaERhdGEuY3h0KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgZjF4MiA9IGUudG91Y2hlc1swXS5jbGllbnRYIC0gb2Zmc2V0TGVmdCxcbiAgICAgICAgZjF5MiA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgdmFyIGYyeDIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WCAtIG9mZnNldExlZnQsXG4gICAgICAgIGYyeTIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIC8vIHZhciBkaXN0YW5jZTIgPSBkaXN0YW5jZSggZjF4MiwgZjF5MiwgZjJ4MiwgZjJ5MiApO1xuICAgICAgdmFyIGRpc3RhbmNlMlNxID0gZGlzdGFuY2VTcShmMXgyLCBmMXkyLCBmMngyLCBmMnkyKTtcbiAgICAgIHZhciBmYWN0b3JTcSA9IGRpc3RhbmNlMlNxIC8gZGlzdGFuY2UxU3E7XG4gICAgICB2YXIgZGlzdFRocmVzaG9sZCA9IDE1MDtcbiAgICAgIHZhciBkaXN0VGhyZXNob2xkU3EgPSBkaXN0VGhyZXNob2xkICogZGlzdFRocmVzaG9sZDtcbiAgICAgIHZhciBmYWN0b3JUaHJlc2hvbGQgPSAxLjU7XG4gICAgICB2YXIgZmFjdG9yVGhyZXNob2xkU3EgPSBmYWN0b3JUaHJlc2hvbGQgKiBmYWN0b3JUaHJlc2hvbGQ7XG5cbiAgICAgIC8vIGNhbmNlbCBjdHggZ2VzdHVyZXMgaWYgdGhlIGRpc3RhbmNlIGIvdCB0aGUgZmluZ2VycyBpbmNyZWFzZXNcbiAgICAgIGlmIChmYWN0b3JTcSA+PSBmYWN0b3JUaHJlc2hvbGRTcSB8fCBkaXN0YW5jZTJTcSA+PSBkaXN0VGhyZXNob2xkU3EpIHtcbiAgICAgICAgci50b3VjaERhdGEuY3h0ID0gZmFsc2U7XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KGN4dEV2dCk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnRleHQgc3dpcGVcbiAgICBpZiAoY2FwdHVyZSAmJiByLnRvdWNoRGF0YS5jeHQpIHtcbiAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHRkcmFnJyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgeTogbm93WzFdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgaWYgKHIudG91Y2hEYXRhLnN0YXJ0KSB7XG4gICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByLnRvdWNoRGF0YS5jeHREcmFnZ2VkID0gdHJ1ZTtcbiAgICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgaWYgKCFyLnRvdWNoRGF0YS5jeHRPdmVyIHx8IG5lYXIgIT09IHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgaWYgKHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5jeHRPdmVyLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgci50b3VjaERhdGEuY3h0T3ZlciA9IG5lYXI7XG4gICAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnY3h0ZHJhZ292ZXInLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBib3ggc2VsZWN0aW9uXG4gICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1syXSAmJiBjeS5ib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubGFzdFRocmVlVG91Y2ggPSArbmV3IERhdGUoKTtcbiAgICAgIGlmICghci50b3VjaERhdGEuc2VsZWN0aW5nKSB7XG4gICAgICAgIGN5LmVtaXQoe1xuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgdHlwZTogJ2JveHN0YXJ0JyxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHIudG91Y2hEYXRhLnNlbGVjdGluZyA9IHRydWU7XG4gICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSB0cnVlO1xuICAgICAgc2VsZWN0WzRdID0gMTtcbiAgICAgIGlmICghc2VsZWN0IHx8IHNlbGVjdC5sZW5ndGggPT09IDAgfHwgc2VsZWN0WzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0WzBdID0gKG5vd1swXSArIG5vd1syXSArIG5vd1s0XSkgLyAzO1xuICAgICAgICBzZWxlY3RbMV0gPSAobm93WzFdICsgbm93WzNdICsgbm93WzVdKSAvIDM7XG4gICAgICAgIHNlbGVjdFsyXSA9IChub3dbMF0gKyBub3dbMl0gKyBub3dbNF0pIC8gMyArIDE7XG4gICAgICAgIHNlbGVjdFszXSA9IChub3dbMV0gKyBub3dbM10gKyBub3dbNV0pIC8gMyArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RbMl0gPSAobm93WzBdICsgbm93WzJdICsgbm93WzRdKSAvIDM7XG4gICAgICAgIHNlbGVjdFszXSA9IChub3dbMV0gKyBub3dbM10gKyBub3dbNV0pIC8gMztcbiAgICAgIH1cbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuXG4gICAgICAvLyBwaW5jaCB0byB6b29tXG4gICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1sxXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBwaW5jaC10by16b29tXG4gICAgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJab29taW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAvLyB0d28gZmluZ2VycyA9PiBwaW5jaCB0byB6b29tXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgdmFyIGRyYWdnZWRFbGVzID0gci5kcmFnRGF0YS50b3VjaERyYWdFbGVzO1xuICAgICAgaWYgKGRyYWdnZWRFbGVzKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYWdnZWRFbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGRlX3AgPSBkcmFnZ2VkRWxlc1tpXS5fcHJpdmF0ZTtcbiAgICAgICAgICBkZV9wLmdyYWJiZWQgPSBmYWxzZTtcbiAgICAgICAgICBkZV9wLnJzY3JhdGNoLmluRHJhZ0xheWVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfc3RhcnQgPSByLnRvdWNoRGF0YS5zdGFydDtcblxuICAgICAgLy8gKHgyLCB5MikgZm9yIGZpbmdlcnMgMSBhbmQgMlxuICAgICAgdmFyIGYxeDIgPSBlLnRvdWNoZXNbMF0uY2xpZW50WCAtIG9mZnNldExlZnQsXG4gICAgICAgIGYxeTIgPSBlLnRvdWNoZXNbMF0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIHZhciBmMngyID0gZS50b3VjaGVzWzFdLmNsaWVudFggLSBvZmZzZXRMZWZ0LFxuICAgICAgICBmMnkyID0gZS50b3VjaGVzWzFdLmNsaWVudFkgLSBvZmZzZXRUb3A7XG4gICAgICB2YXIgZGlzdGFuY2UyID0gZGlzdGFuY2UoZjF4MiwgZjF5MiwgZjJ4MiwgZjJ5Mik7XG4gICAgICAvLyB2YXIgZGlzdGFuY2UyU3EgPSBkaXN0YW5jZVNxKCBmMXgyLCBmMXkyLCBmMngyLCBmMnkyICk7XG4gICAgICAvLyB2YXIgZmFjdG9yID0gTWF0aC5zcXJ0KCBkaXN0YW5jZTJTcSApIC8gTWF0aC5zcXJ0KCBkaXN0YW5jZTFTcSApO1xuICAgICAgdmFyIGZhY3RvciA9IGRpc3RhbmNlMiAvIGRpc3RhbmNlMTtcbiAgICAgIGlmICh0d29GaW5nZXJzU3RhcnRJbnNpZGUpIHtcbiAgICAgICAgLy8gZGVsdGEgZmluZ2VyMVxuICAgICAgICB2YXIgZGYxeCA9IGYxeDIgLSBmMXgxO1xuICAgICAgICB2YXIgZGYxeSA9IGYxeTIgLSBmMXkxO1xuXG4gICAgICAgIC8vIGRlbHRhIGZpbmdlciAyXG4gICAgICAgIHZhciBkZjJ4ID0gZjJ4MiAtIGYyeDE7XG4gICAgICAgIHZhciBkZjJ5ID0gZjJ5MiAtIGYyeTE7XG5cbiAgICAgICAgLy8gdHJhbnNsYXRpb24gaXMgdGhlIG5vcm1hbGlzZWQgdmVjdG9yIG9mIHRoZSB0d28gZmluZ2VycyBtb3ZlbWVudFxuICAgICAgICAvLyBpLmUuIHNvIHBpbmNoaW5nIGNhbmNlbHMgb3V0IGFuZCBtb3ZpbmcgdG9nZXRoZXIgcGFuc1xuICAgICAgICB2YXIgdHggPSAoZGYxeCArIGRmMngpIC8gMjtcbiAgICAgICAgdmFyIHR5ID0gKGRmMXkgKyBkZjJ5KSAvIDI7XG5cbiAgICAgICAgLy8gbm93IGNhbGN1bGF0ZSB0aGUgem9vbVxuICAgICAgICB2YXIgem9vbTEgPSBjeS56b29tKCk7XG4gICAgICAgIHZhciB6b29tMiA9IHpvb20xICogZmFjdG9yO1xuICAgICAgICB2YXIgcGFuMSA9IGN5LnBhbigpO1xuXG4gICAgICAgIC8vIHRoZSBtb2RlbCBjZW50ZXIgcG9pbnQgY29udmVydGVkIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVkIHBvc1xuICAgICAgICB2YXIgY3RyeCA9IG1vZGVsQ2VudGVyMVswXSAqIHpvb20xICsgcGFuMS54O1xuICAgICAgICB2YXIgY3RyeSA9IG1vZGVsQ2VudGVyMVsxXSAqIHpvb20xICsgcGFuMS55O1xuICAgICAgICB2YXIgcGFuMiA9IHtcbiAgICAgICAgICB4OiAtem9vbTIgLyB6b29tMSAqIChjdHJ4IC0gcGFuMS54IC0gdHgpICsgY3RyeCxcbiAgICAgICAgICB5OiAtem9vbTIgLyB6b29tMSAqIChjdHJ5IC0gcGFuMS55IC0gdHkpICsgY3RyeVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJlbW92ZSBkcmFnZ2VkIGVsZXNcbiAgICAgICAgaWYgKF9zdGFydCAmJiBfc3RhcnQuYWN0aXZlKCkpIHtcbiAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlcyk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgX3N0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KCdmcmVlb24nKTtcbiAgICAgICAgICBkcmFnZ2VkRWxlcy5lbWl0KCdmcmVlJyk7XG4gICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgX3N0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN5LnZpZXdwb3J0KHtcbiAgICAgICAgICB6b29tOiB6b29tMixcbiAgICAgICAgICBwYW46IHBhbjIsXG4gICAgICAgICAgY2FuY2VsT25GYWlsZWRab29tOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjeS5lbWl0KCdwaW5jaHpvb20nKTtcbiAgICAgICAgZGlzdGFuY2UxID0gZGlzdGFuY2UyO1xuICAgICAgICBmMXgxID0gZjF4MjtcbiAgICAgICAgZjF5MSA9IGYxeTI7XG4gICAgICAgIGYyeDEgPSBmMngyO1xuICAgICAgICBmMnkxID0gZjJ5MjtcbiAgICAgICAgci5waW5jaGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlLXByb2plY3RcbiAgICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMF0uY2xpZW50WCwgZS50b3VjaGVzWzBdLmNsaWVudFkpO1xuICAgICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgICBub3dbMl0gPSBwb3NbMF07XG4gICAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1s1XSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1swXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBzaW5nbGUgZmluZ2VyIGV2ZW50cyBsaWtlIHBhbm5pbmdcbiAgICApIHtcbiAgICAgIHZhciBzdGFydCA9IHIudG91Y2hEYXRhLnN0YXJ0O1xuICAgICAgdmFyIGxhc3QgPSByLnRvdWNoRGF0YS5sYXN0O1xuICAgICAgdmFyIG5lYXI7XG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcpIHtcbiAgICAgICAgbmVhciA9IHIuZmluZE5lYXJlc3RFbGVtZW50KG5vd1swXSwgbm93WzFdLCB0cnVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlICYmIHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBkcmFnZ2luZyBub2Rlc1xuICAgICAgaWYgKGNhcHR1cmUgJiYgc3RhcnQgIT0gbnVsbCAmJiByLm5vZGVJc0RyYWdnYWJsZShzdGFydCkpIHtcbiAgICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAvLyB0aGVuIGRyYWdnaW5nIGNhbiBoYXBwZW5cbiAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgdmFyIGp1c3RTdGFydGVkRHJhZyA9ICFyLmRyYWdEYXRhLmRpZERyYWc7XG4gICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoZHJhZ2dlZEVsZXMsIHtcbiAgICAgICAgICAgICAgaW5EcmFnTGF5ZXI6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByLmRyYWdEYXRhLmRpZERyYWcgPSB0cnVlO1xuICAgICAgICAgIHZhciB0b3RhbFNoaWZ0ID0ge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChudW1iZXIkMShkaXNwWzBdKSAmJiBudW1iZXIkMShkaXNwWzFdKSkge1xuICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZGlzcFsxXTtcbiAgICAgICAgICAgIGlmIChqdXN0U3RhcnRlZERyYWcpIHtcbiAgICAgICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGE7XG4gICAgICAgICAgICAgIGlmIChkcmFnRGVsdGEgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzBdKSAmJiBudW1iZXIkMShkcmFnRGVsdGFbMV0pKSB7XG4gICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZHJhZ0RlbHRhWzFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyA9IHRydWU7XG4gICAgICAgICAgZHJhZ2dlZEVsZXMuc2lsZW50U2hpZnQodG90YWxTaGlmdCkuZW1pdCgncG9zaXRpb24gZHJhZycpO1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdID09IGVhcmxpZXJbMF0gJiYgci50b3VjaERhdGEuc3RhcnRQb3NpdGlvblsxXSA9PSBlYXJsaWVyWzFdKSB7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2Uga2VlcCB0cmFjayBvZiBkcmFnIGRlbHRhIGZvciBsYXRlclxuICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGEgfHwgW107XG4gICAgICAgICAgaWYgKGRyYWdEZWx0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICAgICAgZHJhZ0RlbHRhLnB1c2goZGlzcFsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICAgICAgZHJhZ0RlbHRhWzFdICs9IGRpc3BbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHRvdWNobW92ZVxuICAgICAge1xuICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0IHx8IG5lYXIsIFsndG91Y2htb3ZlJywgJ3RhcGRyYWcnLCAndm1vdXNlbW92ZSddLCBlLCB7XG4gICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCghc3RhcnQgfHwgIXN0YXJ0LmdyYWJiZWQoKSkgJiYgbmVhciAhPSBsYXN0KSB7XG4gICAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgIGxhc3QuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICd0YXBkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLnRvdWNoRGF0YS5sYXN0ID0gbmVhcjtcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgdG8gY2FuY2VsIHRhcGhvbGRcbiAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG5vd1tpXSAmJiByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW2ldICYmIGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYW5uaW5nXG4gICAgICBpZiAoY2FwdHVyZSAmJiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydC5wYW5uYWJsZSgpKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgIHZhciBhbGxvd1Bhc3N0aHJvdWdoID0gYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2goc3RhcnQsIHIudG91Y2hEYXRhLnN0YXJ0cyk7XG4gICAgICAgIGlmIChhbGxvd1Bhc3N0aHJvdWdoKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSBhcnJheTJwb2ludChyLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHIuc3dpcGVQYW5uaW5nKSB7XG4gICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgICB5OiBkaXNwWzFdICogem9vbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjeS5lbWl0KCdkcmFncGFuJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgICAgICByLnN3aXBlUGFubmluZyA9IHRydWU7XG4gICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgIHg6IGR4ICogem9vbSxcbiAgICAgICAgICAgICAgeTogZHkgKiB6b29tXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN5LmVtaXQoJ2RyYWdwYW4nKTtcbiAgICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICBzdGFydC51bmFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZS1wcm9qZWN0XG4gICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgICAgbm93WzBdID0gcG9zWzBdO1xuICAgICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICBlYXJsaWVyW2pdID0gbm93W2pdO1xuICAgIH1cblxuICAgIC8vIHRoZSBhY3RpdmUgYmcgaW5kaWNhdG9yIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gbWFraW5nIGEgc3dpcGUgdGhhdCBpcyBuZWl0aGVyIGZvciBkcmFnZ2luZyBub2RlcyBvciBwYW5uaW5nXG4gICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDAgJiYgIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcgJiYgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uICE9IG51bGwpIHtcbiAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICB2YXIgdG91Y2hjYW5jZWxIYW5kbGVyO1xuICByLnJlZ2lzdGVyQmluZGluZyhjb250YWluZXJXaW5kb3csICd0b3VjaGNhbmNlbCcsIHRvdWNoY2FuY2VsSGFuZGxlciA9IGZ1bmN0aW9uIHRvdWNoY2FuY2VsSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdGFydCA9IHIudG91Y2hEYXRhLnN0YXJ0O1xuICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSBmYWxzZTtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgdG91Y2hlbmRIYW5kbGVyLCBkaWREb3VibGVUb3VjaCwgdG91Y2hUaW1lb3V0LCBwcmV2VG91Y2hUaW1lU3RhbXA7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3RvdWNoZW5kJywgdG91Y2hlbmRIYW5kbGVyID0gZnVuY3Rpb24gdG91Y2hlbmRIYW5kbGVyKGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN0YXJ0ID0gci50b3VjaERhdGEuc3RhcnQ7XG4gICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByLnRvdWNoRGF0YS5jYXB0dXJlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgIHIuc3dpcGVQYW5uaW5nID0gZmFsc2U7XG4gICAgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzID0gZmFsc2U7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgfVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgIH1cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgdmFyIGN0eFRhcGVuZDtcbiAgICBpZiAoci50b3VjaERhdGEuY3h0KSB7XG4gICAgICBjdHhUYXBlbmQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChzdGFydCkge1xuICAgICAgICBzdGFydC5lbWl0KGN0eFRhcGVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjeS5lbWl0KGN0eFRhcGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoIXIudG91Y2hEYXRhLmN4dERyYWdnZWQpIHtcbiAgICAgICAgdmFyIGN0eFRhcCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXAnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgIHN0YXJ0LmVtaXQoY3R4VGFwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN0eFRhcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByLnRvdWNoRGF0YS5jeHQgPSBmYWxzZTtcbiAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgIHIucmVkcmF3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gbW9yZSBib3ggc2VsZWN0aW9uIGlmIHdlIGRvbid0IGhhdmUgdGhyZWUgZmluZ2Vyc1xuICAgIGlmICghZS50b3VjaGVzWzJdICYmIGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSAmJiByLnRvdWNoRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIHIudG91Y2hEYXRhLnNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgdmFyIGJveCA9IGN5LmNvbGxlY3Rpb24oci5nZXRBbGxJbkJveChzZWxlY3RbMF0sIHNlbGVjdFsxXSwgc2VsZWN0WzJdLCBzZWxlY3RbM10pKTtcbiAgICAgIHNlbGVjdFswXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFsxXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFsyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFszXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgY3kuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdib3hlbmQnLFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKSAmJiAhZWxlLnNlbGVjdGVkKCk7XG4gICAgICB9O1xuICAgICAgYm94LmVtaXQoJ2JveCcpLnN0ZEZpbHRlcihlbGVXb3VsZEJlU2VsZWN0ZWQpLnNlbGVjdCgpLmVtaXQoJ2JveHNlbGVjdCcpO1xuICAgICAgaWYgKGJveC5ub25lbXB0eSgpKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgfVxuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1sxXSkgOyBlbHNlIGlmIChlLnRvdWNoZXNbMF0pIDsgZWxzZSBpZiAoIWUudG91Y2hlc1swXSkge1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztcbiAgICAgIGlmIChzdGFydCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBzdGFydFdhc0dyYWJiZWQgPSBzdGFydC5fcHJpdmF0ZS5ncmFiYmVkO1xuICAgICAgICBmcmVlRHJhZ2dlZEVsZW1lbnRzKGRyYWdnZWRFbGVzKTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICBpZiAoc3RhcnRXYXNHcmFiYmVkKSB7XG4gICAgICAgICAgc3RhcnQuZW1pdCgnZnJlZW9uJyk7XG4gICAgICAgICAgZHJhZ2dlZEVsZXMuZW1pdCgnZnJlZScpO1xuICAgICAgICAgIGlmIChyLmRyYWdEYXRhLmRpZERyYWcpIHtcbiAgICAgICAgICAgIHN0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudHMoc3RhcnQsIFsndG91Y2hlbmQnLCAndGFwZW5kJywgJ3Ztb3VzZXVwJywgJ3RhcGRyYWdvdXQnXSwgZSwge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWyd0b3VjaGVuZCcsICd0YXBlbmQnLCAndm1vdXNldXAnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBkeCA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0gLSBub3dbMF07XG4gICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgIHZhciBkeSA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0gLSBub3dbMV07XG4gICAgICB2YXIgZHkyID0gZHkgKiBkeTtcbiAgICAgIHZhciBkaXN0MiA9IGR4MiArIGR5MjtcbiAgICAgIHZhciByZGlzdDIgPSBkaXN0MiAqIHpvb20gKiB6b29tO1xuXG4gICAgICAvLyBUYXAgZXZlbnQsIHJvdWdobHkgc2FtZSBhcyBtb3VzZSBjbGljayBldmVudCBmb3IgdG91Y2hcbiAgICAgIGlmICghci50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZCkge1xuICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgY3kuJCgnOnNlbGVjdGVkJykudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ3RhcCcsICd2Y2xpY2snXSwgZSwge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpZERvdWJsZVRvdWNoID0gZmFsc2U7XG4gICAgICAgIGlmIChlLnRpbWVTdGFtcCAtIHByZXZUb3VjaFRpbWVTdGFtcCA8PSBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpIHtcbiAgICAgICAgICB0b3VjaFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRvdWNoVGltZW91dCk7XG4gICAgICAgICAgZGlkRG91YmxlVG91Y2ggPSB0cnVlO1xuICAgICAgICAgIHByZXZUb3VjaFRpbWVTdGFtcCA9IG51bGw7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhzdGFydCwgWydkYmx0YXAnLCAndmRibGNsaWNrJ10sIGUsIHtcbiAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGRpZERvdWJsZVRvdWNoKSByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ29uZXRhcCcsICd2b25lY2xpY2snXSwgZSwge1xuICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgY3kubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKTtcbiAgICAgICAgICBwcmV2VG91Y2hUaW1lU3RhbXAgPSBlLnRpbWVTdGFtcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IHRvdWNoZWQgbm9kZSwgb25seSBpZiBpdCBoYXNuJ3QgYmVlbiBkcmFnZ2VkIHBhc3QgYSBjZXJ0YWluIGRpc3RhbmNlXG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCAmJiAhci5kcmFnRGF0YS5kaWREcmFnIC8vIGRpZG4ndCBkcmFnIG5vZGVzIGFyb3VuZFxuICAgICAgJiYgc3RhcnQuX3ByaXZhdGUuc2VsZWN0YWJsZSAmJiByZGlzdDIgPCByLnRvdWNoVGFwVGhyZXNob2xkMiAmJiAhci5waW5jaGluZyAvLyBwaW5jaCB0byB6b29tIHNob3VsZCBub3QgYWZmZWN0IHNlbGVjdGlvblxuICAgICAgKSB7XG4gICAgICAgIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bm1lcmdlKHN0YXJ0KS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgIHN0YXJ0LnNlbGVjdChbJ3RhcHNlbGVjdCddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RhcnQuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgc3RhcnQudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnQuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vdy5sZW5ndGg7IGorKykge1xuICAgICAgZWFybGllcltqXSA9IG5vd1tqXTtcbiAgICB9XG4gICAgci5kcmFnRGF0YS5kaWREcmFnID0gZmFsc2U7IC8vIHJlc2V0IGZvciBuZXh0IHRvdWNoc3RhcnRcblxuICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSBbXTtcbiAgICAgIHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24gPSBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICByLnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbiA9IG51bGw7XG4gICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyB0aGUgb2xkIHN0YXJ0IGdsb2JhbCBwb3MnbiBtYXkgbm90IGJlIHRoZSBzYW1lIGZpbmdlciB0aGF0IHJlbWFpbnNcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZXTtcbiAgICAgIH1cbiAgICAgIHIucGluY2hpbmcgPSBmYWxzZTtcbiAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG5cbiAgICAvL3IucmVkcmF3KCk7XG4gIH0sIGZhbHNlKTtcblxuICAvLyBmYWxsYmFjayBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBtcyBwb2ludGVyIGV2ZW50c1xuICBpZiAodHlwZW9mIFRvdWNoRXZlbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIHBvaW50ZXJzID0gW107XG4gICAgdmFyIG1ha2VUb3VjaCA9IGZ1bmN0aW9uIG1ha2VUb3VjaChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXG4gICAgICAgIGNsaWVudFk6IGUuY2xpZW50WSxcbiAgICAgICAgZm9yY2U6IDEsXG4gICAgICAgIGlkZW50aWZpZXI6IGUucG9pbnRlcklkLFxuICAgICAgICBwYWdlWDogZS5wYWdlWCxcbiAgICAgICAgcGFnZVk6IGUucGFnZVksXG4gICAgICAgIHJhZGl1c1g6IGUud2lkdGggLyAyLFxuICAgICAgICByYWRpdXNZOiBlLmhlaWdodCAvIDIsXG4gICAgICAgIHNjcmVlblg6IGUuc2NyZWVuWCxcbiAgICAgICAgc2NyZWVuWTogZS5zY3JlZW5ZLFxuICAgICAgICB0YXJnZXQ6IGUudGFyZ2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIG1ha2VQb2ludGVyID0gZnVuY3Rpb24gbWFrZVBvaW50ZXIoZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIHRvdWNoOiBtYWtlVG91Y2goZSlcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgYWRkUG9pbnRlciA9IGZ1bmN0aW9uIGFkZFBvaW50ZXIoZSkge1xuICAgICAgcG9pbnRlcnMucHVzaChtYWtlUG9pbnRlcihlKSk7XG4gICAgfTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZ1bmN0aW9uIHJlbW92ZVBvaW50ZXIoZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcCA9IHBvaW50ZXJzW2ldO1xuICAgICAgICBpZiAocC5ldmVudC5wb2ludGVySWQgPT09IGUucG9pbnRlcklkKSB7XG4gICAgICAgICAgcG9pbnRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHVwZGF0ZVBvaW50ZXIgPSBmdW5jdGlvbiB1cGRhdGVQb2ludGVyKGUpIHtcbiAgICAgIHZhciBwID0gcG9pbnRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBwLmV2ZW50LnBvaW50ZXJJZCA9PT0gZS5wb2ludGVySWQ7XG4gICAgICB9KVswXTtcbiAgICAgIHAuZXZlbnQgPSBlO1xuICAgICAgcC50b3VjaCA9IG1ha2VUb3VjaChlKTtcbiAgICB9O1xuICAgIHZhciBhZGRUb3VjaGVzVG9FdmVudCA9IGZ1bmN0aW9uIGFkZFRvdWNoZXNUb0V2ZW50KGUpIHtcbiAgICAgIGUudG91Y2hlcyA9IHBvaW50ZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gcC50b3VjaDtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIHBvaW50ZXJJc01vdXNlID0gZnVuY3Rpb24gcG9pbnRlcklzTW91c2UoZSkge1xuICAgICAgcmV0dXJuIGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScgfHwgZS5wb2ludGVyVHlwZSA9PT0gNDtcbiAgICB9O1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcmRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKHBvaW50ZXJJc01vdXNlKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gbW91c2UgYWxyZWFkeSBoYW5kbGVkXG5cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFkZFBvaW50ZXIoZSk7XG4gICAgICBhZGRUb3VjaGVzVG9FdmVudChlKTtcbiAgICAgIHRvdWNoc3RhcnRIYW5kbGVyKGUpO1xuICAgIH0pO1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcnVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChwb2ludGVySXNNb3VzZShlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG4gICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgYWRkVG91Y2hlc1RvRXZlbnQoZSk7XG4gICAgICB0b3VjaGVuZEhhbmRsZXIoZSk7XG4gICAgfSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVyY2FuY2VsJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChwb2ludGVySXNNb3VzZShlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG4gICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgYWRkVG91Y2hlc1RvRXZlbnQoZSk7XG4gICAgICB0b3VjaGNhbmNlbEhhbmRsZXIoZSk7XG4gICAgfSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVybW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAocG9pbnRlcklzTW91c2UoZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBtb3VzZSBhbHJlYWR5IGhhbmRsZWRcblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdXBkYXRlUG9pbnRlcihlKTtcbiAgICAgIGFkZFRvdWNoZXNUb0V2ZW50KGUpO1xuICAgICAgdG91Y2htb3ZlSGFuZGxlcihlKTtcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIEJScCQyID0ge307XG5CUnAkMi5nZW5lcmF0ZVBvbHlnb24gPSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzKSB7XG4gIHJldHVybiB0aGlzLm5vZGVTaGFwZXNbbmFtZV0gPSB7XG4gICAgcmVuZGVyZXI6IHRoaXMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwb2ludHM6IHBvaW50cyxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdwb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMpO1xuICAgIH0sXG4gICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcsIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHRoaXMucG9pbnRzLCBub2RlWCwgbm9kZVksIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgcGFkZGluZyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZyk7XG4gICAgfVxuICB9O1xufTtcbkJScCQyLmdlbmVyYXRlRWxsaXBzZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snZWxsaXBzZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdlbGxpcHNlJyxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICByZXR1cm4gaW50ZXJzZWN0TGluZUVsbGlwc2UoeCwgeSwgbm9kZVgsIG5vZGVZLCB3aWR0aCAvIDIgKyBwYWRkaW5nLCBoZWlnaHQgLyAyICsgcGFkZGluZyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIGNoZWNrSW5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHBhZGRpbmcpO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5nZW5lcmF0ZVJvdW5kUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBwb2ludHMpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1tuYW1lXSA9IHtcbiAgICByZW5kZXJlcjogdGhpcyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHBvaW50czogcG9pbnRzLFxuICAgIGdldE9yQ3JlYXRlQ29ybmVyczogZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsIGZpZWxkKSB7XG4gICAgICBpZiAocnNbZmllbGRdICE9PSB1bmRlZmluZWQgJiYgcnNbZmllbGQgKyAnLWN4J10gPT09IGNlbnRlclggJiYgcnNbZmllbGQgKyAnLWN5J10gPT09IGNlbnRlclkpIHtcbiAgICAgICAgcmV0dXJuIHJzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICAgIHJzW2ZpZWxkXSA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICByc1tmaWVsZCArICctY3gnXSA9IGNlbnRlclg7XG4gICAgICByc1tmaWVsZCArICctY3knXSA9IGNlbnRlclk7XG4gICAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgICB2YXIgaGFsZkggPSBoZWlnaHQgLyAyO1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFBvbHlnb25SYWRpdXMod2lkdGgsIGhlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgcCA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcG9pbnRzLmxlbmd0aCAvIDI7IF9pKyspIHtcbiAgICAgICAgcFtfaV0gPSB7XG4gICAgICAgICAgeDogY2VudGVyWCArIGhhbGZXICogcG9pbnRzW19pICogMl0sXG4gICAgICAgICAgeTogY2VudGVyWSArIGhhbGZIICogcG9pbnRzW19pICogMiArIDFdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaSxcbiAgICAgICAgcDEsXG4gICAgICAgIHAyLFxuICAgICAgICBwMyxcbiAgICAgICAgbGVuID0gcC5sZW5ndGg7XG4gICAgICBwMSA9IHBbbGVuIC0gMV07XG4gICAgICAvLyBmb3IgZWFjaCBwb2ludFxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHAyID0gcFtpICUgbGVuXTtcbiAgICAgICAgcDMgPSBwWyhpICsgMSkgJSBsZW5dO1xuICAgICAgICByc1tmaWVsZF1baV0gPSBnZXRSb3VuZENvcm5lcihwMSwgcDIsIHAzLCBjb3JuZXJSYWRpdXMpO1xuICAgICAgICBwMSA9IHAyO1xuICAgICAgICBwMiA9IHAzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJzW2ZpZWxkXTtcbiAgICB9LFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzLCBycykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdyb3VuZC1wb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdkcmF3Q29ybmVycycpKTtcbiAgICB9LFxuICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nLCBjb3JuZXJSYWRpdXMsIHJzKSB7XG4gICAgICByZXR1cm4gcm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCB0aGlzLnBvaW50cywgbm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCB0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdjb3JuZXJzJykpO1xuICAgIH0sXG4gICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMsIHJzKSB7XG4gICAgICByZXR1cm4gcG9pbnRJbnNpZGVSb3VuZFBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdjb3JuZXJzJykpO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydyb3VuZC1yZWN0YW5nbGUnXSA9IHRoaXMubm9kZVNoYXBlc1sncm91bmRyZWN0YW5nbGUnXSA9IHtcbiAgICByZW5kZXJlcjogdGhpcyxcbiAgICBuYW1lOiAncm91bmQtcmVjdGFuZ2xlJyxcbiAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICByZXR1cm4gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZywgY29ybmVyUmFkaXVzKTtcbiAgICB9LFxuICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKGhhbGZXaWR0aCwgaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgICAgIHZhciBkaWFtID0gY29ybmVyUmFkaXVzICogMjtcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIHRvcCBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cywgY2VudGVyWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0b3AgcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSByaWdodCBxdWFydGVyIGNpcmNsZVxuICAgICAgaWYgKGNoZWNrSW5FbGxpcHNlKHgsIHksIGRpYW0sIGRpYW0sIGNlbnRlclggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMsIGNlbnRlclkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzLCBwYWRkaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYm90dG9tIGxlZnQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufTtcbkJScCQyLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydjdXQtcmVjdGFuZ2xlJ10gPSB0aGlzLm5vZGVTaGFwZXNbJ2N1dHJlY3RhbmdsZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdjdXQtcmVjdGFuZ2xlJyxcbiAgICBjb3JuZXJMZW5ndGg6IGdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCgpLFxuICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBudWxsLCBjb3JuZXJSYWRpdXMpO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVDdXRUcmlhbmdsZVB0czogZnVuY3Rpb24gZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIHZhciBjbCA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gdGhpcy5jb3JuZXJMZW5ndGggOiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHhCZWdpbiA9IGNlbnRlclggLSBodztcbiAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgIHZhciB5RW5kID0gY2VudGVyWSArIGhoO1xuXG4gICAgICAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgdHJpYW5nbGUgcHQgb24gWzQsIDVdXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3BMZWZ0OiBbeEJlZ2luLCB5QmVnaW4gKyBjbCwgeEJlZ2luICsgY2wsIHlCZWdpbiwgeEJlZ2luICsgY2wsIHlCZWdpbiArIGNsXSxcbiAgICAgICAgdG9wUmlnaHQ6IFt4RW5kIC0gY2wsIHlCZWdpbiwgeEVuZCwgeUJlZ2luICsgY2wsIHhFbmQgLSBjbCwgeUJlZ2luICsgY2xdLFxuICAgICAgICBib3R0b21SaWdodDogW3hFbmQsIHlFbmQgLSBjbCwgeEVuZCAtIGNsLCB5RW5kLCB4RW5kIC0gY2wsIHlFbmQgLSBjbF0sXG4gICAgICAgIGJvdHRvbUxlZnQ6IFt4QmVnaW4gKyBjbCwgeUVuZCwgeEJlZ2luLCB5RW5kIC0gY2wsIHhCZWdpbiArIGNsLCB5RW5kIC0gY2xdXG4gICAgICB9O1xuICAgIH0sXG4gICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcsIGNvcm5lclJhZGl1cykge1xuICAgICAgdmFyIGNQdHMgPSB0aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMod2lkdGggKyAyICogcGFkZGluZywgaGVpZ2h0ICsgMiAqIHBhZGRpbmcsIG5vZGVYLCBub2RlWSwgY29ybmVyUmFkaXVzKTtcbiAgICAgIHZhciBwdHMgPSBbXS5jb25jYXQuYXBwbHkoW10sIFtjUHRzLnRvcExlZnQuc3BsaWNlKDAsIDQpLCBjUHRzLnRvcFJpZ2h0LnNwbGljZSgwLCA0KSwgY1B0cy5ib3R0b21SaWdodC5zcGxpY2UoMCwgNCksIGNQdHMuYm90dG9tTGVmdC5zcGxpY2UoMCwgNCldKTtcbiAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBwdHMsIG5vZGVYLCBub2RlWSk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgdmFyIGNsID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyB0aGlzLmNvcm5lckxlbmd0aCA6IGNvcm5lclJhZGl1cztcbiAgICAgIC8vIENoZWNrIGhCb3hcbiAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQgLSAyICogY2wsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIDIgKiBjbCwgaGVpZ2h0LCBbMCwgLTFdLCBwYWRkaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBjdXRUcmlhbmdsZVB0cyA9IHRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMudG9wTGVmdCkgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIGN1dFRyaWFuZ2xlUHRzLnRvcFJpZ2h0KSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMuYm90dG9tUmlnaHQpIHx8IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBjdXRUcmlhbmdsZVB0cy5ib3R0b21MZWZ0KTtcbiAgICB9XG4gIH07XG59O1xuQlJwJDIuZ2VuZXJhdGVCYXJyZWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVTaGFwZXNbJ2JhcnJlbCddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdiYXJyZWwnLFxuICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9LFxuICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIC8vIHVzZSB0d28gZml4ZWQgdCB2YWx1ZXMgZm9yIHRoZSBiZXppZXIgY3VydmUgYXBwcm94aW1hdGlvblxuXG4gICAgICB2YXIgdDAgPSAwLjE1O1xuICAgICAgdmFyIHQxID0gMC41O1xuICAgICAgdmFyIHQyID0gMC44NTtcbiAgICAgIHZhciBiUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCArIDIgKiBwYWRkaW5nLCBoZWlnaHQgKyAyICogcGFkZGluZywgbm9kZVgsIG5vZGVZKTtcbiAgICAgIHZhciBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzID0gZnVuY3Rpb24gYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhwdHMpIHtcbiAgICAgICAgLy8gYXBwcm94aW1hdGUgY3VydmUgcHRzIGJhc2VkIG9uIHRoZSB0d28gdCB2YWx1ZXNcbiAgICAgICAgdmFyIG0wID0gcWJlemllclB0QXQoe1xuICAgICAgICAgIHg6IHB0c1swXSxcbiAgICAgICAgICB5OiBwdHNbMV1cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHB0c1syXSxcbiAgICAgICAgICB5OiBwdHNbM11cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHB0c1s0XSxcbiAgICAgICAgICB5OiBwdHNbNV1cbiAgICAgICAgfSwgdDApO1xuICAgICAgICB2YXIgbTEgPSBxYmV6aWVyUHRBdCh7XG4gICAgICAgICAgeDogcHRzWzBdLFxuICAgICAgICAgIHk6IHB0c1sxXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcHRzWzJdLFxuICAgICAgICAgIHk6IHB0c1szXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcHRzWzRdLFxuICAgICAgICAgIHk6IHB0c1s1XVxuICAgICAgICB9LCB0MSk7XG4gICAgICAgIHZhciBtMiA9IHFiZXppZXJQdEF0KHtcbiAgICAgICAgICB4OiBwdHNbMF0sXG4gICAgICAgICAgeTogcHRzWzFdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBwdHNbMl0sXG4gICAgICAgICAgeTogcHRzWzNdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBwdHNbNF0sXG4gICAgICAgICAgeTogcHRzWzVdXG4gICAgICAgIH0sIHQyKTtcbiAgICAgICAgcmV0dXJuIFtwdHNbMF0sIHB0c1sxXSwgbTAueCwgbTAueSwgbTEueCwgbTEueSwgbTIueCwgbTIueSwgcHRzWzRdLCBwdHNbNV1dO1xuICAgICAgfTtcbiAgICAgIHZhciBwdHMgPSBbXS5jb25jYXQoYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhiUHRzLnRvcExlZnQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMudG9wUmlnaHQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMuYm90dG9tUmlnaHQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMuYm90dG9tTGVmdCkpO1xuICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHB0cywgbm9kZVgsIG5vZGVZKTtcbiAgICB9LFxuICAgIGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOiBmdW5jdGlvbiBnZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHhCZWdpbiA9IGNlbnRlclggLSBodztcbiAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgIHZhciB5RW5kID0gY2VudGVyWSArIGhoO1xuICAgICAgdmFyIGN1cnZlQ29uc3RhbnRzID0gZ2V0QmFycmVsQ3VydmVDb25zdGFudHMod2lkdGgsIGhlaWdodCk7XG4gICAgICB2YXIgaE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmhlaWdodE9mZnNldDtcbiAgICAgIHZhciB3T2Zmc2V0ID0gY3VydmVDb25zdGFudHMud2lkdGhPZmZzZXQ7XG4gICAgICB2YXIgY3RybFB0WE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmN0cmxQdE9mZnNldFBjdCAqIHdpZHRoO1xuXG4gICAgICAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgY29udHJvbCBwdCBvbiBbNCwgNV1cbiAgICAgIHZhciBwdHMgPSB7XG4gICAgICAgIHRvcExlZnQ6IFt4QmVnaW4sIHlCZWdpbiArIGhPZmZzZXQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEJlZ2luICsgd09mZnNldCwgeUJlZ2luXSxcbiAgICAgICAgdG9wUmlnaHQ6IFt4RW5kIC0gd09mZnNldCwgeUJlZ2luLCB4RW5kIC0gY3RybFB0WE9mZnNldCwgeUJlZ2luLCB4RW5kLCB5QmVnaW4gKyBoT2Zmc2V0XSxcbiAgICAgICAgYm90dG9tUmlnaHQ6IFt4RW5kLCB5RW5kIC0gaE9mZnNldCwgeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhFbmQgLSB3T2Zmc2V0LCB5RW5kXSxcbiAgICAgICAgYm90dG9tTGVmdDogW3hCZWdpbiArIHdPZmZzZXQsIHlFbmQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhCZWdpbiwgeUVuZCAtIGhPZmZzZXRdXG4gICAgICB9O1xuICAgICAgcHRzLnRvcExlZnQuaXNUb3AgPSB0cnVlO1xuICAgICAgcHRzLnRvcFJpZ2h0LmlzVG9wID0gdHJ1ZTtcbiAgICAgIHB0cy5ib3R0b21MZWZ0LmlzQm90dG9tID0gdHJ1ZTtcbiAgICAgIHB0cy5ib3R0b21SaWdodC5pc0JvdHRvbSA9IHRydWU7XG4gICAgICByZXR1cm4gcHRzO1xuICAgIH0sXG4gICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIHZhciBjdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgdmFyIGhPZmZzZXQgPSBjdXJ2ZUNvbnN0YW50cy5oZWlnaHRPZmZzZXQ7XG4gICAgICB2YXIgd09mZnNldCA9IGN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuXG4gICAgICAvLyBDaGVjayBoQm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0IC0gMiAqIGhPZmZzZXQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIDIgKiB3T2Zmc2V0LCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGJhcnJlbEN1cnZlUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIHZhciBnZXRDdXJ2ZVQgPSBmdW5jdGlvbiBnZXRDdXJ2ZVQoeCwgeSwgY3VydmVQdHMpIHtcbiAgICAgICAgdmFyIHgwID0gY3VydmVQdHNbNF07XG4gICAgICAgIHZhciB4MSA9IGN1cnZlUHRzWzJdO1xuICAgICAgICB2YXIgeDIgPSBjdXJ2ZVB0c1swXTtcbiAgICAgICAgdmFyIHkwID0gY3VydmVQdHNbNV07XG4gICAgICAgIC8vIHZhciB5MSA9IGN1cnZlUHRzWyAzIF07XG4gICAgICAgIHZhciB5MiA9IGN1cnZlUHRzWzFdO1xuICAgICAgICB2YXIgeE1pbiA9IE1hdGgubWluKHgwLCB4Mik7XG4gICAgICAgIHZhciB4TWF4ID0gTWF0aC5tYXgoeDAsIHgyKTtcbiAgICAgICAgdmFyIHlNaW4gPSBNYXRoLm1pbih5MCwgeTIpO1xuICAgICAgICB2YXIgeU1heCA9IE1hdGgubWF4KHkwLCB5Mik7XG4gICAgICAgIGlmICh4TWluIDw9IHggJiYgeCA8PSB4TWF4ICYmIHlNaW4gPD0geSAmJiB5IDw9IHlNYXgpIHtcbiAgICAgICAgICB2YXIgY29lZmYgPSBiZXppZXJQdHNUb1F1YWRDb2VmZih4MCwgeDEsIHgyKTtcbiAgICAgICAgICB2YXIgcm9vdHMgPSBzb2x2ZVF1YWRyYXRpYyhjb2VmZlswXSwgY29lZmZbMV0sIGNvZWZmWzJdLCB4KTtcbiAgICAgICAgICB2YXIgdmFsaWRSb290cyA9IHJvb3RzLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgcmV0dXJuIDAgPD0gciAmJiByIDw9IDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHZhbGlkUm9vdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkUm9vdHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIHZhciBjdXJ2ZVJlZ2lvbnMgPSBPYmplY3Qua2V5cyhiYXJyZWxDdXJ2ZVB0cyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnZlUmVnaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29ybmVyID0gY3VydmVSZWdpb25zW2ldO1xuICAgICAgICB2YXIgY29ybmVyUHRzID0gYmFycmVsQ3VydmVQdHNbY29ybmVyXTtcbiAgICAgICAgdmFyIHQgPSBnZXRDdXJ2ZVQoeCwgeSwgY29ybmVyUHRzKTtcbiAgICAgICAgaWYgKHQgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB5MCA9IGNvcm5lclB0c1s1XTtcbiAgICAgICAgdmFyIHkxID0gY29ybmVyUHRzWzNdO1xuICAgICAgICB2YXIgeTIgPSBjb3JuZXJQdHNbMV07XG4gICAgICAgIHZhciBiZXpZID0gcWJlemllckF0KHkwLCB5MSwgeTIsIHQpO1xuICAgICAgICBpZiAoY29ybmVyUHRzLmlzVG9wICYmIGJlelkgPD0geSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3JuZXJQdHMuaXNCb3R0b20gJiYgeSA8PSBiZXpZKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59O1xuQlJwJDIuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snYm90dG9tLXJvdW5kLXJlY3RhbmdsZSddID0gdGhpcy5ub2RlU2hhcGVzWydib3R0b21yb3VuZHJlY3RhbmdsZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdib3R0b20tcm91bmQtcmVjdGFuZ2xlJyxcbiAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSAod2lkdGggLyAyICsgcGFkZGluZyk7XG4gICAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSAoaGVpZ2h0IC8gMiArIHBhZGRpbmcpO1xuICAgICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG4gICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgKHdpZHRoIC8gMiArIHBhZGRpbmcpO1xuICAgICAgdmFyIHRvcEludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIHRvcFN0YXJ0WCwgdG9wU3RhcnRZLCB0b3BFbmRYLCB0b3BFbmRZLCBmYWxzZSk7XG4gICAgICBpZiAodG9wSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0b3BJbnRlcnNlY3Rpb25zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSh4LCB5LCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBkaWFtID0gMiAqIGNvcm5lclJhZGl1cztcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIG5vbi1yb3VuZGVkIHRvcCBzaWRlXG4gICAgICB2YXIgb3V0ZXJXaWR0aCA9IHdpZHRoIC8gMiArIDIgKiBwYWRkaW5nO1xuICAgICAgdmFyIG91dGVySGVpZ2h0ID0gaGVpZ2h0IC8gMiArIDIgKiBwYWRkaW5nO1xuICAgICAgdmFyIHBvaW50cyA9IFtjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSAtIG91dGVySGVpZ2h0LCBjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSwgY2VudGVyWCArIG91dGVyV2lkdGgsIGNlbnRlclksIGNlbnRlclggKyBvdXRlcldpZHRoLCBjZW50ZXJZIC0gb3V0ZXJIZWlnaHRdO1xuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBib3R0b20gcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cywgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5yZWdpc3Rlck5vZGVTaGFwZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlU2hhcGVzID0gdGhpcy5ub2RlU2hhcGVzID0ge307XG4gIHZhciByZW5kZXJlciA9IHRoaXM7XG4gIHRoaXMuZ2VuZXJhdGVFbGxpcHNlKCk7XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCd0cmlhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSgzLCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXRyaWFuZ2xlJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDMsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3JlY3RhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSk7XG4gIG5vZGVTaGFwZXNbJ3NxdWFyZSddID0gbm9kZVNoYXBlc1sncmVjdGFuZ2xlJ107XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpO1xuICB0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCk7XG4gIHRoaXMuZ2VuZXJhdGVCYXJyZWwoKTtcbiAgdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7XG4gIHtcbiAgICB2YXIgZGlhbW9uZFBvaW50cyA9IFswLCAxLCAxLCAwLCAwLCAtMSwgLTEsIDBdO1xuICAgIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdkaWFtb25kJywgZGlhbW9uZFBvaW50cyk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtZGlhbW9uZCcsIGRpYW1vbmRQb2ludHMpO1xuICB9XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdwZW50YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg1LCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXBlbnRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDUsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hleGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNiwgMCkpO1xuICB0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCdyb3VuZC1oZXhhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDYsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hlcHRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDcsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtaGVwdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNywgMCkpO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbignb2N0YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg4LCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLW9jdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoOCwgMCkpO1xuICB2YXIgc3RhcjVQb2ludHMgPSBuZXcgQXJyYXkoMjApO1xuICB7XG4gICAgdmFyIG91dGVyUG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyg1LCAwKTtcbiAgICB2YXIgaW5uZXJQb2ludHMgPSBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzKDUsIE1hdGguUEkgLyA1KTtcblxuICAgIC8vIE91dGVyIHJhZGl1cyBpcyAxOyBpbm5lciByYWRpdXMgb2Ygc3RhciBpcyBzbWFsbGVyXG4gICAgdmFyIGlubmVyUmFkaXVzID0gMC41ICogKDMgLSBNYXRoLnNxcnQoNSkpO1xuICAgIGlubmVyUmFkaXVzICo9IDEuNTc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lclBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgIGlubmVyUG9pbnRzW2kgKiAyXSAqPSBpbm5lclJhZGl1cztcbiAgICAgIGlubmVyUG9pbnRzW2kgKiAyICsgMV0gKj0gaW5uZXJSYWRpdXM7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAgLyA0OyBpKyspIHtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0XSA9IG91dGVyUG9pbnRzW2kgKiAyXTtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0ICsgMV0gPSBvdXRlclBvaW50c1tpICogMiArIDFdO1xuICAgICAgc3RhcjVQb2ludHNbaSAqIDQgKyAyXSA9IGlubmVyUG9pbnRzW2kgKiAyXTtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0ICsgM10gPSBpbm5lclBvaW50c1tpICogMiArIDFdO1xuICAgIH1cbiAgfVxuICBzdGFyNVBvaW50cyA9IGZpdFBvbHlnb25Ub1NxdWFyZShzdGFyNVBvaW50cyk7XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdzdGFyJywgc3RhcjVQb2ludHMpO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigndmVlJywgWy0xLCAtMSwgMCwgLTAuMzMzLCAxLCAtMSwgMCwgMV0pO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigncmhvbWJvaWQnLCBbLTEsIC0xLCAwLjMzMywgLTEsIDEsIDEsIC0wLjMzMywgMV0pO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigncmlnaHQtcmhvbWJvaWQnLCBbLTAuMzMzLCAtMSwgMSwgLTEsIDAuMzMzLCAxLCAtMSwgMV0pO1xuICB0aGlzLm5vZGVTaGFwZXNbJ2NvbmNhdmVoZXhhZ29uJ10gPSB0aGlzLmdlbmVyYXRlUG9seWdvbignY29uY2F2ZS1oZXhhZ29uJywgWy0xLCAtMC45NSwgLTAuNzUsIDAsIC0xLCAwLjk1LCAxLCAwLjk1LCAwLjc1LCAwLCAxLCAtMC45NV0pO1xuICB7XG4gICAgdmFyIHRhZ1BvaW50cyA9IFstMSwgLTEsIDAuMjUsIC0xLCAxLCAwLCAwLjI1LCAxLCAtMSwgMV07XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3RhZycsIHRhZ1BvaW50cyk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtdGFnJywgdGFnUG9pbnRzKTtcbiAgfVxuICBub2RlU2hhcGVzLm1ha2VQb2x5Z29uID0gZnVuY3Rpb24gKHBvaW50cykge1xuICAgIC8vIHVzZSBjYWNoaW5nIG9uIHVzZXItc3BlY2lmaWVkIHBvbHlnb25zIHNvIHRoZXkgYXJlIGFzIGZhc3QgYXMgbmF0aXZlIHNoYXBlc1xuXG4gICAgdmFyIGtleSA9IHBvaW50cy5qb2luKCckJyk7XG4gICAgdmFyIG5hbWUgPSAncG9seWdvbi0nICsga2V5O1xuICAgIHZhciBzaGFwZTtcbiAgICBpZiAoc2hhcGUgPSB0aGlzW25hbWVdKSB7XG4gICAgICAvLyBnb3QgY2FjaGVkIHNoYXBlXG4gICAgICByZXR1cm4gc2hhcGU7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGFuZCBjYWNoZSBuZXcgc2hhcGVcbiAgICByZXR1cm4gcmVuZGVyZXIuZ2VuZXJhdGVQb2x5Z29uKG5hbWUsIHBvaW50cyk7XG4gIH07XG59O1xuXG52YXIgQlJwJDEgPSB7fTtcbkJScCQxLnRpbWVUb1JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVkcmF3VG90YWxUaW1lIC8gdGhpcy5yZWRyYXdDb3VudDtcbn07XG5CUnAkMS5yZWRyYXcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCBzdGF0aWNFbXB0eU9iamVjdCgpO1xuICB2YXIgciA9IHRoaXM7XG4gIGlmIChyLmF2ZXJhZ2VSZWRyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByLmF2ZXJhZ2VSZWRyYXdUaW1lID0gMDtcbiAgfVxuICBpZiAoci5sYXN0UmVkcmF3VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgci5sYXN0UmVkcmF3VGltZSA9IDA7XG4gIH1cbiAgaWYgKHIubGFzdERyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByLmxhc3REcmF3VGltZSA9IDA7XG4gIH1cbiAgci5yZXF1ZXN0ZWRGcmFtZSA9IHRydWU7XG4gIHIucmVuZGVyT3B0aW9ucyA9IG9wdGlvbnM7XG59O1xuQlJwJDEuYmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZuLCBwcmlvcml0eSkge1xuICAvLyB0aGUgcmVuZGVyZXIgY2FuJ3QgYWRkIHRpY2sgY2FsbGJhY2tzIHdoZW4gZGVzdHJveWVkXG4gIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJpb3JpdHkgPT0gbnVsbCkge1xuICAgIGVycm9yKCdQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlcicpO1xuICB9XG4gIHZhciBjYnMgPSB0aGlzLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcbiAgY2JzLnB1c2goe1xuICAgIGZuOiBmbixcbiAgICBwcmlvcml0eTogcHJpb3JpdHlcbiAgfSk7XG5cbiAgLy8gaGlnaGVyIHByaW9yaXR5IGNhbGxiYWNrcyBleGVjdXRlZCBmaXJzdFxuICBjYnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eTtcbiAgfSk7XG59O1xudmFyIGJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IGZ1bmN0aW9uIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCB3aWxsRHJhdywgc3RhcnRUaW1lKSB7XG4gIHZhciBjYnMgPSByLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyBpKyspIHtcbiAgICBjYnNbaV0uZm4od2lsbERyYXcsIHN0YXJ0VGltZSk7XG4gIH1cbn07XG5CUnAkMS5zdGFydFJlbmRlckxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGN5ID0gci5jeTtcbiAgaWYgKHIucmVuZGVyTG9vcFN0YXJ0ZWQpIHtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgci5yZW5kZXJMb29wU3RhcnRlZCA9IHRydWU7XG4gIH1cbiAgdmFyIHJlbmRlckZuID0gZnVuY3Rpb24gcmVuZGVyRm4ocmVxdWVzdFRpbWUpIHtcbiAgICBpZiAoci5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN5LmJhdGNoaW5nKCkpIDsgZWxzZSBpZiAoci5yZXF1ZXN0ZWRGcmFtZSAmJiAhci5za2lwRnJhbWUpIHtcbiAgICAgIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCB0cnVlLCByZXF1ZXN0VGltZSk7XG4gICAgICB2YXIgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgIHIucmVuZGVyKHIucmVuZGVyT3B0aW9ucyk7XG4gICAgICB2YXIgZW5kVGltZSA9IHIubGFzdERyYXdUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgIGlmIChyLmF2ZXJhZ2VSZWRyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgci5hdmVyYWdlUmVkcmF3VGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICB9XG4gICAgICBpZiAoci5yZWRyYXdDb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHIucmVkcmF3Q291bnQgPSAwO1xuICAgICAgfVxuICAgICAgci5yZWRyYXdDb3VudCsrO1xuICAgICAgaWYgKHIucmVkcmF3VG90YWxUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgci5yZWRyYXdUb3RhbFRpbWUgPSAwO1xuICAgICAgfVxuICAgICAgdmFyIGR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICAgIHIucmVkcmF3VG90YWxUaW1lICs9IGR1cmF0aW9uO1xuICAgICAgci5sYXN0UmVkcmF3VGltZSA9IGR1cmF0aW9uO1xuXG4gICAgICAvLyB1c2UgYSB3ZWlnaHRlZCBhdmVyYWdlIHdpdGggYSBiaWFzIGZyb20gdGhlIHByZXZpb3VzIGF2ZXJhZ2Ugc28gd2UgZG9uJ3Qgc3Bpa2Ugc28gZWFzaWx5XG4gICAgICByLmF2ZXJhZ2VSZWRyYXdUaW1lID0gci5hdmVyYWdlUmVkcmF3VGltZSAvIDIgKyBkdXJhdGlvbiAvIDI7XG4gICAgICByLnJlcXVlc3RlZEZyYW1lID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCBmYWxzZSwgcmVxdWVzdFRpbWUpO1xuICAgIH1cbiAgICByLnNraXBGcmFtZSA9IGZhbHNlO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJGbik7XG4gIH07XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJGbik7XG59O1xuXG52YXIgQmFzZVJlbmRlcmVyID0gZnVuY3Rpb24gQmFzZVJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgdGhpcy5pbml0KG9wdGlvbnMpO1xufTtcbnZhciBCUiA9IEJhc2VSZW5kZXJlcjtcbnZhciBCUnAgPSBCUi5wcm90b3R5cGU7XG5CUnAuY2xpZW50RnVuY3Rpb25zID0gWydyZWRyYXdIaW50JywgJ3JlbmRlcicsICdyZW5kZXJUbycsICdtYXRjaENhbnZhc1NpemUnLCAnbm9kZVNoYXBlSW1wbCcsICdhcnJvd1NoYXBlSW1wbCddO1xuQlJwLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgciA9IHRoaXM7XG4gIHIub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHIuY3kgPSBvcHRpb25zLmN5O1xuICB2YXIgY3RyID0gci5jb250YWluZXIgPSBvcHRpb25zLmN5LmNvbnRhaW5lcigpO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcblxuICAvLyBwcmVwZW5kIGEgc3R5bGVzaGVldCBpbiB0aGUgaGVhZCBzdWNoIHRoYXRcbiAgaWYgKGNvbnRhaW5lcldpbmRvdykge1xuICAgIHZhciBkb2N1bWVudCA9IGNvbnRhaW5lcldpbmRvdy5kb2N1bWVudDtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQ7XG4gICAgdmFyIHN0eWxlc2hlZXRJZCA9ICdfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQnO1xuICAgIHZhciBjbGFzc05hbWUgPSAnX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXInO1xuICAgIHZhciBzdHlsZXNoZWV0QWxyZWFkeUV4aXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlc2hlZXRJZCkgIT0gbnVsbDtcbiAgICBpZiAoY3RyLmNsYXNzTmFtZS5pbmRleE9mKGNsYXNzTmFtZSkgPCAwKSB7XG4gICAgICBjdHIuY2xhc3NOYW1lID0gKGN0ci5jbGFzc05hbWUgfHwgJycpICsgJyAnICsgY2xhc3NOYW1lO1xuICAgIH1cbiAgICBpZiAoIXN0eWxlc2hlZXRBbHJlYWR5RXhpc3RzKSB7XG4gICAgICB2YXIgc3R5bGVzaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZXNoZWV0LmlkID0gc3R5bGVzaGVldElkO1xuICAgICAgc3R5bGVzaGVldC50ZXh0Q29udGVudCA9ICcuJyArIGNsYXNzTmFtZSArICcgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0nO1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVzaGVldCwgaGVhZC5jaGlsZHJlblswXSk7IC8vIGZpcnN0IHNvIGxvd2VzdCBwcmlvcml0eVxuICAgIH1cblxuICAgIHZhciBjb21wdXRlZFN0eWxlID0gY29udGFpbmVyV2luZG93LmdldENvbXB1dGVkU3R5bGUoY3RyKTtcbiAgICB2YXIgcG9zaXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJyk7XG4gICAgaWYgKHBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgd2FybignQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHknKTtcbiAgICB9XG4gIH1cbiAgci5zZWxlY3Rpb24gPSBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXTsgLy8gQ29vcmRpbmF0ZXMgZm9yIHNlbGVjdGlvbiBib3gsIHBsdXMgZW5hYmxlZCBmbGFnXG5cbiAgci5iZXppZXJQcm9qUGN0cyA9IFswLjA1LCAwLjIyNSwgMC40LCAwLjUsIDAuNiwgMC43NzUsIDAuOTVdO1xuXG4gIC8vLS1Qb2ludGVyLXJlbGF0ZWQgZGF0YVxuICByLmhvdmVyRGF0YSA9IHtcbiAgICBkb3duOiBudWxsLFxuICAgIGxhc3Q6IG51bGwsXG4gICAgZG93blRpbWU6IG51bGwsXG4gICAgdHJpZ2dlck1vZGU6IG51bGwsXG4gICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgIGluaXRpYWxQYW46IFtudWxsLCBudWxsXSxcbiAgICBjYXB0dXJlOiBmYWxzZVxuICB9O1xuICByLmRyYWdEYXRhID0ge1xuICAgIHBvc3NpYmxlRHJhZ0VsZW1lbnRzOiBbXVxuICB9O1xuICByLnRvdWNoRGF0YSA9IHtcbiAgICBzdGFydDogbnVsbCxcbiAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICAvLyBUaGVzZSAzIGZpZWxkcyByZWxhdGVkIHRvIHRhcCwgdGFwaG9sZCBldmVudHNcbiAgICBzdGFydFBvc2l0aW9uOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXG4gICAgc2luZ2xlVG91Y2hTdGFydFRpbWU6IG51bGwsXG4gICAgc2luZ2xlVG91Y2hNb3ZlZDogdHJ1ZSxcbiAgICBub3c6IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSxcbiAgICBlYXJsaWVyOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF1cbiAgfTtcbiAgci5yZWRyYXdzID0gMDtcbiAgci5zaG93RnBzID0gb3B0aW9ucy5zaG93RnBzO1xuICByLmRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcbiAgci5oaWRlRWRnZXNPblZpZXdwb3J0ID0gb3B0aW9ucy5oaWRlRWRnZXNPblZpZXdwb3J0O1xuICByLnRleHR1cmVPblZpZXdwb3J0ID0gb3B0aW9ucy50ZXh0dXJlT25WaWV3cG9ydDtcbiAgci53aGVlbFNlbnNpdGl2aXR5ID0gb3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5O1xuICByLm1vdGlvbkJsdXJFbmFibGVkID0gb3B0aW9ucy5tb3Rpb25CbHVyOyAvLyBvbiBieSBkZWZhdWx0XG4gIHIuZm9yY2VkUGl4ZWxSYXRpbyA9IG51bWJlciQxKG9wdGlvbnMucGl4ZWxSYXRpbykgPyBvcHRpb25zLnBpeGVsUmF0aW8gOiBudWxsO1xuICByLm1vdGlvbkJsdXIgPSBvcHRpb25zLm1vdGlvbkJsdXI7IC8vIGZvciBpbml0aWFsIGtpY2sgb2ZmXG4gIHIubW90aW9uQmx1ck9wYWNpdHkgPSBvcHRpb25zLm1vdGlvbkJsdXJPcGFjaXR5O1xuICByLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kgPSAxIC0gci5tb3Rpb25CbHVyT3BhY2l0eTtcbiAgci5tb3Rpb25CbHVyUHhSYXRpbyA9IDE7XG4gIHIubWJQeFJCbHVycnkgPSAxOyAvLzAuODtcbiAgci5taW5NYkxvd1F1YWxGcmFtZXMgPSA0O1xuICByLmZ1bGxRdWFsaXR5TWIgPSBmYWxzZTtcbiAgci5jbGVhcmVkRm9yTW90aW9uQmx1ciA9IFtdO1xuICByLmRlc2t0b3BUYXBUaHJlc2hvbGQgPSBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQ7XG4gIHIuZGVza3RvcFRhcFRocmVzaG9sZDIgPSBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQgKiBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQ7XG4gIHIudG91Y2hUYXBUaHJlc2hvbGQgPSBvcHRpb25zLnRvdWNoVGFwVGhyZXNob2xkO1xuICByLnRvdWNoVGFwVGhyZXNob2xkMiA9IG9wdGlvbnMudG91Y2hUYXBUaHJlc2hvbGQgKiBvcHRpb25zLnRvdWNoVGFwVGhyZXNob2xkO1xuICByLnRhcGhvbGREdXJhdGlvbiA9IDUwMDtcbiAgci5iaW5kaW5ncyA9IFtdO1xuICByLmJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IFtdO1xuICByLmJlZm9yZVJlbmRlclByaW9yaXRpZXMgPSB7XG4gICAgLy8gaGlnaGVyIHByaW9yaXR5IGV4ZWNzIGJlZm9yZSBsb3dlciBvbmVcbiAgICBhbmltYXRpb25zOiA0MDAsXG4gICAgZWxlQ2FsY3M6IDMwMCxcbiAgICBlbGVUeHJEZXE6IDIwMCxcbiAgICBseXJUeHJEZXE6IDE1MCxcbiAgICBseXJUeHJTa2lwOiAxMDBcbiAgfTtcbiAgci5yZWdpc3Rlck5vZGVTaGFwZXMoKTtcbiAgci5yZWdpc3RlckFycm93U2hhcGVzKCk7XG4gIHIucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpO1xufTtcbkJScC5ub3RpZnkgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBlbGVzKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGN5ID0gci5jeTtcblxuICAvLyB0aGUgcmVuZGVyZXIgY2FuJ3QgYmUgbm90aWZpZWQgYWZ0ZXIgaXQncyBkZXN0cm95ZWRcbiAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICdpbml0Jykge1xuICAgIHIubG9hZCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZXZlbnROYW1lID09PSAnZGVzdHJveScpIHtcbiAgICByLmRlc3Ryb3koKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJ2FkZCcgfHwgZXZlbnROYW1lID09PSAncmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdtb3ZlJyAmJiBjeS5oYXNDb21wb3VuZE5vZGVzKCkgfHwgZXZlbnROYW1lID09PSAnbG9hZCcgfHwgZXZlbnROYW1lID09PSAnem9yZGVyJyB8fCBldmVudE5hbWUgPT09ICdtb3VudCcpIHtcbiAgICByLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcygpO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICdsb2FkJyB8fCBldmVudE5hbWUgPT09ICdyZXNpemUnIHx8IGV2ZW50TmFtZSA9PT0gJ21vdW50Jykge1xuICAgIHIuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCk7XG4gICAgci5tYXRjaENhbnZhc1NpemUoci5jb250YWluZXIpO1xuICB9XG4gIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgdGhpcy5zdGFydFJlbmRlckxvb3AoKTtcbiAgdGhpcy5yZWRyYXcoKTtcbn07XG5CUnAuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICByLmRlc3Ryb3llZCA9IHRydWU7XG4gIHIuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByLmJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGJpbmRpbmcgPSByLmJpbmRpbmdzW2ldO1xuICAgIHZhciBiID0gYmluZGluZztcbiAgICB2YXIgdGd0ID0gYi50YXJnZXQ7XG4gICAgKHRndC5vZmYgfHwgdGd0LnJlbW92ZUV2ZW50TGlzdGVuZXIpLmFwcGx5KHRndCwgYi5hcmdzKTtcbiAgfVxuICByLmJpbmRpbmdzID0gW107XG4gIHIuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzID0gW107XG4gIHIub25VcGRhdGVFbGVDYWxjc0ZucyA9IFtdO1xuICBpZiAoci5yZW1vdmVPYnNlcnZlcikge1xuICAgIHIucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG4gIGlmIChyLnN0eWxlT2JzZXJ2ZXIpIHtcbiAgICByLnN0eWxlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG4gIGlmIChyLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgci5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cbiAgaWYgKHIubGFiZWxDYWxjRGl2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoci5sYWJlbENhbGNEaXYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWUxMCBpc3N1ZSAjMTAxNFxuICAgIH1cbiAgfVxufTtcbkJScC5pc0hlYWRsZXNzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuW0JScCRmLCBCUnAkNSwgQlJwJDQsIEJScCQzLCBCUnAkMiwgQlJwJDFdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gIGV4dGVuZChCUnAsIHByb3BzKTtcbn0pO1xuXG52YXIgZnVsbEZwc1RpbWUgPSAxMDAwIC8gNjA7IC8vIGFzc3VtZSA2MCBmcmFtZXMgcGVyIHNlY29uZFxuXG52YXIgZGVmcyA9IHtcbiAgc2V0dXBEZXF1ZXVlaW5nOiBmdW5jdGlvbiBzZXR1cERlcXVldWVpbmcob3B0cykge1xuICAgIHJldHVybiBmdW5jdGlvbiBzZXR1cERlcXVldWVpbmdJbXBsKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICAgICAgaWYgKHNlbGYuZGVxdWV1ZWluZ1NldHVwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuZGVxdWV1ZWluZ1NldHVwID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBxdWV1ZVJlZHJhdyA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9LCBvcHRzLmRlcVJlZHJhd1RocmVzaG9sZCk7XG4gICAgICB2YXIgZGVxdWV1ZSA9IGZ1bmN0aW9uIGRlcXVldWUod2lsbERyYXcsIGZyYW1lU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICB2YXIgYXZnUmVuZGVyVGltZSA9IHIuYXZlcmFnZVJlZHJhd1RpbWU7XG4gICAgICAgIHZhciByZW5kZXJUaW1lID0gci5sYXN0UmVkcmF3VGltZTtcbiAgICAgICAgdmFyIGRlcWQgPSBbXTtcbiAgICAgICAgdmFyIGV4dGVudCA9IHIuY3kuZXh0ZW50KCk7XG4gICAgICAgIHZhciBwaXhlbFJhdGlvID0gci5nZXRQaXhlbFJhdGlvKCk7XG5cbiAgICAgICAgLy8gaWYgd2UgYXJlbid0IGluIGEgdGljayB0aGF0IGNhdXNlcyBhIGRyYXcsIHRoZW4gdGhlIHJlbmRlcmVkIHN0eWxlXG4gICAgICAgIC8vIHF1ZXVlIHdvbid0IGF1dG9tYXRpY2FsbHkgYmUgZmx1c2hlZCBiZWZvcmUgZGVxdWV1ZWluZyBzdGFydHNcbiAgICAgICAgaWYgKCF3aWxsRHJhdykge1xuICAgICAgICAgIHIuZmx1c2hSZW5kZXJlZFN0eWxlUXVldWUoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgICAgdmFyIG5vdyA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgICAgdmFyIGR1cmF0aW9uID0gbm93IC0gc3RhcnRUaW1lO1xuICAgICAgICAgIHZhciBmcmFtZUR1cmF0aW9uID0gbm93IC0gZnJhbWVTdGFydFRpbWU7XG4gICAgICAgICAgaWYgKHJlbmRlclRpbWUgPCBmdWxsRnBzVGltZSkge1xuICAgICAgICAgICAgLy8gaWYgd2UncmUgcmVuZGVyaW5nIGZhc3RlciB0aGFuIHRoZSBpZGVhbCBmcHMsIHRoZW4gZG8gZGVxdWV1ZWluZ1xuICAgICAgICAgICAgLy8gZHVyaW5nIGFsbCBvZiB0aGUgcmVtYWluaW5nIGZyYW1lIHRpbWVcblxuICAgICAgICAgICAgdmFyIHRpbWVBdmFpbGFibGUgPSBmdWxsRnBzVGltZSAtICh3aWxsRHJhdyA/IGF2Z1JlbmRlclRpbWUgOiAwKTtcbiAgICAgICAgICAgIGlmIChmcmFtZUR1cmF0aW9uID49IG9wdHMuZGVxRmFzdENvc3QgKiB0aW1lQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAod2lsbERyYXcpIHtcbiAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uID49IG9wdHMuZGVxQ29zdCAqIHJlbmRlclRpbWUgfHwgZHVyYXRpb24gPj0gb3B0cy5kZXFBdmdDb3N0ICogYXZnUmVuZGVyVGltZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZyYW1lRHVyYXRpb24gPj0gb3B0cy5kZXFOb0RyYXdDb3N0ICogZnVsbEZwc1RpbWUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB0aGlzRGVxZCA9IG9wdHMuZGVxKHNlbGYsIHBpeGVsUmF0aW8sIGV4dGVudCk7XG4gICAgICAgICAgaWYgKHRoaXNEZXFkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpc0RlcWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZGVxZC5wdXNoKHRoaXNEZXFkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2FsbGJhY2tzIG9uIGRlcXVldWVcbiAgICAgICAgaWYgKGRlcWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG9wdHMub25EZXFkKHNlbGYsIGRlcWQpO1xuICAgICAgICAgIGlmICghd2lsbERyYXcgJiYgb3B0cy5zaG91bGRSZWRyYXcoc2VsZiwgZGVxZCwgcGl4ZWxSYXRpbywgZXh0ZW50KSkge1xuICAgICAgICAgICAgcXVldWVSZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgcHJpb3JpdHkgPSBvcHRzLnByaW9yaXR5IHx8IG5vb3AkMTtcbiAgICAgIHIuYmVmb3JlUmVuZGVyKGRlcXVldWUsIHByaW9yaXR5KHNlbGYpKTtcbiAgICB9O1xuICB9XG59O1xuXG4vLyBBbGxvd3MgbG9va3VwcyBmb3IgKGVsZSwgbHZsKSA9PiBjYWNoZS5cbi8vIFVzZXMga2V5cyBzbyBlbGVtZW50cyBtYXkgc2hhcmUgdGhlIHNhbWUgY2FjaGUuXG52YXIgRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAoZ2V0S2V5KSB7XG4gICAgdmFyIGRvZXNFbGVJbnZhbGlkYXRlS2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzaWZ5O1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwKTtcbiAgICB0aGlzLmlkc0J5S2V5ID0gbmV3IE1hcCQyKCk7XG4gICAgdGhpcy5rZXlGb3JJZCA9IG5ldyBNYXAkMigpO1xuICAgIHRoaXMuY2FjaGVzQnlMdmwgPSBuZXcgTWFwJDIoKTtcbiAgICB0aGlzLmx2bHMgPSBbXTtcbiAgICB0aGlzLmdldEtleSA9IGdldEtleTtcbiAgICB0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5ID0gZG9lc0VsZUludmFsaWRhdGVLZXk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAsIFt7XG4gICAga2V5OiBcImdldElkc0ZvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJZHNGb3Ioa2V5KSB7XG4gICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoXCJDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleVwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBpZHNCeUtleSA9IHRoaXMuaWRzQnlLZXk7XG4gICAgICB2YXIgaWRzID0gdGhpcy5pZHNCeUtleS5nZXQoa2V5KTtcbiAgICAgIGlmICghaWRzKSB7XG4gICAgICAgIGlkcyA9IG5ldyBTZXQkMSgpO1xuICAgICAgICBpZHNCeUtleS5zZXQoa2V5LCBpZHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkSWRGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSkuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlSWRGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVsZXRlSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSlbXCJkZWxldGVcIl0oaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPZklkc0ZvcktleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1iZXJPZklkc0ZvcktleShrZXkpIHtcbiAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkc0ZvcihrZXkpLnNpemU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZUtleU1hcHBpbmdGb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlS2V5TWFwcGluZ0ZvcihlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgdmFyIHByZXZLZXkgPSB0aGlzLmtleUZvcklkLmdldChpZCk7XG4gICAgICB2YXIgY3VycktleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gICAgICB0aGlzLmRlbGV0ZUlkRm9yS2V5KHByZXZLZXksIGlkKTtcbiAgICAgIHRoaXMuYWRkSWRGb3JLZXkoY3VycktleSwgaWQpO1xuICAgICAgdGhpcy5rZXlGb3JJZC5zZXQoaWQsIGN1cnJLZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZWxldGVLZXlNYXBwaW5nRm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKSB7XG4gICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICAgIHZhciBwcmV2S2V5ID0gdGhpcy5rZXlGb3JJZC5nZXQoaWQpO1xuICAgICAgdGhpcy5kZWxldGVJZEZvcktleShwcmV2S2V5LCBpZCk7XG4gICAgICB0aGlzLmtleUZvcklkW1wiZGVsZXRlXCJdKGlkKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwia2V5SGFzQ2hhbmdlZEZvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBrZXlIYXNDaGFuZ2VkRm9yKGVsZSkge1xuICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICB2YXIgcHJldktleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTtcbiAgICAgIHZhciBuZXdLZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgcmV0dXJuIHByZXZLZXkgIT09IG5ld0tleTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNJbnZhbGlkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzSW52YWxpZChlbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleUhhc0NoYW5nZWRGb3IoZWxlKSB8fCB0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGVsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENhY2hlc0F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlc0F0KGx2bCkge1xuICAgICAgdmFyIGNhY2hlc0J5THZsID0gdGhpcy5jYWNoZXNCeUx2bCxcbiAgICAgICAgbHZscyA9IHRoaXMubHZscztcbiAgICAgIHZhciBjYWNoZXMgPSBjYWNoZXNCeUx2bC5nZXQobHZsKTtcbiAgICAgIGlmICghY2FjaGVzKSB7XG4gICAgICAgIGNhY2hlcyA9IG5ldyBNYXAkMigpO1xuICAgICAgICBjYWNoZXNCeUx2bC5zZXQobHZsLCBjYWNoZXMpO1xuICAgICAgICBsdmxzLnB1c2gobHZsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlKGtleSwgbHZsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChsdmwpLmdldChrZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KGVsZSwgbHZsKSB7XG4gICAgICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuXG4gICAgICAvLyBnZXR0aW5nIGZvciBhbiBlbGVtZW50IG1heSBuZWVkIHRvIGFkZCB0byB0aGUgaWQgbGlzdCBiL2MgZWxlcyBjYW4gc2hhcmUga2V5c1xuICAgICAgaWYgKGNhY2hlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKGVsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZvckNhY2hlZEtleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGb3JDYWNoZWRLZXkoZWxlLCBsdmwpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmtleUZvcklkLmdldChlbGUuaWQoKSk7IC8vIG4uYi4gdXNlIGNhY2hlZCBrZXksIG5vdCBuZXdseSBjb21wdXRlZCBrZXlcbiAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNDYWNoZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNDYWNoZShrZXksIGx2bCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobHZsKS5oYXMoa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhlbGUsIGx2bCkge1xuICAgICAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gICAgICByZXR1cm4gdGhpcy5oYXNDYWNoZShrZXksIGx2bCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldENhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldENhY2hlKGtleSwgbHZsLCBjYWNoZSkge1xuICAgICAgY2FjaGUua2V5ID0ga2V5O1xuICAgICAgdGhpcy5nZXRDYWNoZXNBdChsdmwpLnNldChrZXksIGNhY2hlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChlbGUsIGx2bCwgY2FjaGUpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgdGhpcy5zZXRDYWNoZShrZXksIGx2bCwgY2FjaGUpO1xuICAgICAgdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKGVsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZUNhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUNhY2hlKGtleSwgbHZsKSB7XG4gICAgICB0aGlzLmdldENhY2hlc0F0KGx2bClbXCJkZWxldGVcIl0oa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoZWxlLCBsdmwpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZUtleShrZXkpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICB0aGlzLmx2bHMuZm9yRWFjaChmdW5jdGlvbiAobHZsKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRydWUgaWYgbm8gb3RoZXIgZWxlcyByZWZlcmVuY2UgdGhlIGludmFsaWRhdGVkIGNhY2hlIChuLmIuIG90aGVyIGVsZXMgbWF5IG5lZWQgdGhlIGNhY2hlIHdpdGggdGhlIHNhbWUga2V5KVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZShlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgdmFyIGtleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTsgLy8gbi5iLiB1c2Ugc3RvcmVkIGtleSByYXRoZXIgdGhhbiBjdXJyZW50IChwb3RlbnRpYWwga2V5KVxuXG4gICAgICB0aGlzLmRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKTtcbiAgICAgIHZhciBlbnRpcmVLZXlJbnZhbGlkYXRlZCA9IHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoZWxlKTtcbiAgICAgIGlmIChlbnRpcmVLZXlJbnZhbGlkYXRlZCkge1xuICAgICAgICAvLyBjbGVhciBtYXBwaW5nIGZvciBjdXJyZW50IGtleVxuICAgICAgICB0aGlzLmludmFsaWRhdGVLZXkoa2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRpcmVLZXlJbnZhbGlkYXRlZCB8fCB0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KGtleSkgPT09IDA7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwO1xufSgpO1xuXG52YXIgbWluVHhySCA9IDI1OyAvLyB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBjYWNoZSBmb3Igc21hbGwgaGVpZ2h0IGVsZXMgKHNwZWNpYWwgY2FzZSlcbnZhciB0eHJTdGVwSCA9IDUwOyAvLyB0aGUgbWluIHNpemUgb2YgdGhlIHJlZ3VsYXIgY2FjaGUsIGFuZCB0aGUgc2l6ZSBpdCBpbmNyZWFzZXMgd2l0aCBlYWNoIHN0ZXAgdXBcbnZhciBtaW5MdmwkMSA9IC00OyAvLyB3aGVuIHNjYWxpbmcgc21hbGxlciB0aGFuIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZS1yZW5kZXJcbnZhciBtYXhMdmwkMSA9IDM7IC8vIHdoZW4gbGFyZ2VyIHRoYW4gdGhpcyBzY2FsZSBqdXN0IHJlbmRlciBkaXJlY3RseSAoY2FjaGluZyBpcyBub3QgaGVscGZ1bClcbnZhciBtYXhab29tJDEgPSA3Ljk5OyAvLyBiZXlvbmQgdGhpcyB6b29tIGxldmVsLCBsYXllcmVkIHRleHR1cmVzIGFyZSBub3QgdXNlZFxudmFyIGVsZVR4clNwYWNpbmcgPSA4OyAvLyBzcGFjaW5nIGJldHdlZW4gZWxlbWVudHMgb24gdGV4dHVyZXMgdG8gYXZvaWQgYmxpdHRpbmcgb3ZlcmxhcHNcbnZhciBkZWZUeHJXaWR0aCA9IDEwMjQ7IC8vIGRlZmF1bHQvbWluaW11bSB0ZXh0dXJlIHdpZHRoXG52YXIgbWF4VHhyVyA9IDEwMjQ7IC8vIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGEgdGV4dHVyZVxudmFyIG1heFR4ckggPSAxMDI0OyAvLyB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYSB0ZXh0dXJlXG52YXIgbWluVXRpbGl0eSA9IDAuMjsgLy8gaWYgdXNhZ2Ugb2YgdGV4dHVyZSBpcyBsZXNzIHRoYW4gdGhpcywgaXQgaXMgcmV0aXJlZFxudmFyIG1heEZ1bGxuZXNzID0gMC44OyAvLyBmdWxsbmVzcyBvZiB0ZXh0dXJlIGFmdGVyIHdoaWNoIHF1ZXVlIHJlbW92YWwgaXMgY2hlY2tlZFxudmFyIG1heEZ1bGxuZXNzQ2hlY2tzID0gMTA7IC8vIGRlcXVldWVkIGFmdGVyIHRoaXMgbWFueSBjaGVja3NcbnZhciBkZXFDb3N0JDEgPSAwLjE1OyAvLyAlIG9mIGFkZCdsIHJlbmRlcmluZyBjb3N0IGFsbG93ZWQgZm9yIGRlcXVldWluZyBlbGUgY2FjaGVzIGVhY2ggZnJhbWVcbnZhciBkZXFBdmdDb3N0JDEgPSAwLjE7IC8vICUgb2YgYWRkJ2wgcmVuZGVyaW5nIGNvc3QgY29tcGFyZWQgdG8gYXZlcmFnZSBvdmVyYWxsIHJlZHJhdyB0aW1lXG52YXIgZGVxTm9EcmF3Q29zdCQxID0gMC45OyAvLyAlIG9mIGF2ZyBmcmFtZSB0aW1lIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlcXVldWVpbmcgd2hlbiBub3QgZHJhd2luZ1xudmFyIGRlcUZhc3RDb3N0JDEgPSAwLjk7IC8vICUgb2YgZnJhbWUgdGltZSB0byBiZSB1c2VkIHdoZW4gPjYwZnBzXG52YXIgZGVxUmVkcmF3VGhyZXNob2xkJDEgPSAxMDA7IC8vIHRpbWUgdG8gYmF0Y2ggcmVkcmF3cyB0b2dldGhlciBmcm9tIGRlcXVldWVpbmcgdG8gYWxsb3cgbW9yZSBkZXF1ZXVlaW5nIGNhbGNzIHRvIGhhcHBlbiBpbiB0aGUgbWVhbndoaWxlXG52YXIgbWF4RGVxU2l6ZSQxID0gMTsgLy8gbnVtYmVyIG9mIGVsZXMgdG8gZGVxdWV1ZSBhbmQgcmVuZGVyIGF0IGhpZ2hlciB0ZXh0dXJlIGluIGVhY2ggYmF0Y2hcblxudmFyIGdldFR4clJlYXNvbnMgPSB7XG4gIGRlcXVldWU6ICdkZXF1ZXVlJyxcbiAgZG93bnNjYWxlOiAnZG93bnNjYWxlJyxcbiAgaGlnaFF1YWxpdHk6ICdoaWdoUXVhbGl0eSdcbn07XG52YXIgaW5pdERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIGdldEtleTogbnVsbCxcbiAgZG9lc0VsZUludmFsaWRhdGVLZXk6IGZhbHNpZnksXG4gIGRyYXdFbGVtZW50OiBudWxsLFxuICBnZXRCb3VuZGluZ0JveDogbnVsbCxcbiAgZ2V0Um90YXRpb25Qb2ludDogbnVsbCxcbiAgZ2V0Um90YXRpb25PZmZzZXQ6IG51bGwsXG4gIGlzVmlzaWJsZTogdHJ1ZWlmeSxcbiAgYWxsb3dFZGdlVHhyQ2FjaGluZzogdHJ1ZSxcbiAgYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiB0cnVlXG59KTtcbnZhciBFbGVtZW50VGV4dHVyZUNhY2hlID0gZnVuY3Rpb24gRWxlbWVudFRleHR1cmVDYWNoZShyZW5kZXJlciwgaW5pdE9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gIHNlbGYub25EZXF1ZXVlcyA9IFtdO1xuICB2YXIgb3B0cyA9IGluaXREZWZhdWx0cyhpbml0T3B0aW9ucyk7XG4gIGV4dGVuZChzZWxmLCBvcHRzKTtcbiAgc2VsZi5sb29rdXAgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cChvcHRzLmdldEtleSwgb3B0cy5kb2VzRWxlSW52YWxpZGF0ZUtleSk7XG4gIHNlbGYuc2V0dXBEZXF1ZXVlaW5nKCk7XG59O1xudmFyIEVUQ3AgPSBFbGVtZW50VGV4dHVyZUNhY2hlLnByb3RvdHlwZTtcbkVUQ3AucmVhc29ucyA9IGdldFR4clJlYXNvbnM7XG5cbi8vIHRoZSBsaXN0IG9mIHRleHR1cmVzIGluIHdoaWNoIG5ldyBzdWJ0ZXh0dXJlcyBmb3IgZWxlbWVudHMgY2FuIGJlIHBsYWNlZFxuRVRDcC5nZXRUZXh0dXJlUXVldWUgPSBmdW5jdGlvbiAodHhySCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYuZWxlSW1nQ2FjaGVzID0gc2VsZi5lbGVJbWdDYWNoZXMgfHwge307XG4gIHJldHVybiBzZWxmLmVsZUltZ0NhY2hlc1t0eHJIXSA9IHNlbGYuZWxlSW1nQ2FjaGVzW3R4ckhdIHx8IFtdO1xufTtcblxuLy8gdGhlIGxpc3Qgb2YgdXN1c2VkIHRleHR1cmVzIHdoaWNoIGNhbiBiZSByZWN5Y2xlZCAoaW4gdXNlIGluIHRleHR1cmUgcXVldWUpXG5FVENwLmdldFJldGlyZWRUZXh0dXJlUXVldWUgPSBmdW5jdGlvbiAodHhySCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBydHh0clFzID0gc2VsZi5lbGVJbWdDYWNoZXMucmV0aXJlZCA9IHNlbGYuZWxlSW1nQ2FjaGVzLnJldGlyZWQgfHwge307XG4gIHZhciBydHh0clEgPSBydHh0clFzW3R4ckhdID0gcnR4dHJRc1t0eHJIXSB8fCBbXTtcbiAgcmV0dXJuIHJ0eHRyUTtcbn07XG5cbi8vIHF1ZXVlIG9mIGVsZW1lbnQgZHJhdyByZXF1ZXN0cyBhdCBkaWZmZXJlbnQgc2NhbGUgbGV2ZWxzXG5FVENwLmdldEVsZW1lbnRRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYuZWxlQ2FjaGVRdWV1ZSA9IHNlbGYuZWxlQ2FjaGVRdWV1ZSB8fCBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLnJlcXMgLSBhLnJlcXM7XG4gIH0pO1xuICByZXR1cm4gcTtcbn07XG5cbi8vIHF1ZXVlIG9mIGVsZW1lbnQgZHJhdyByZXF1ZXN0cyBhdCBkaWZmZXJlbnQgc2NhbGUgbGV2ZWxzIChlbGVtZW50IGlkIGxvb2t1cClcbkVUQ3AuZ2V0RWxlbWVudEtleVRvUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGsycSA9IHNlbGYuZWxlS2V5VG9DYWNoZVF1ZXVlID0gc2VsZi5lbGVLZXlUb0NhY2hlUXVldWUgfHwge307XG4gIHJldHVybiBrMnE7XG59O1xuRVRDcC5nZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZSwgYmIsIHB4UmF0aW8sIGx2bCwgcmVhc29uKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICB2YXIgem9vbSA9IHIuY3kuem9vbSgpO1xuICB2YXIgbG9va3VwID0gdGhpcy5sb29rdXA7XG4gIGlmICghYmIgfHwgYmIudyA9PT0gMCB8fCBiYi5oID09PSAwIHx8IGlzTmFOKGJiLncpIHx8IGlzTmFOKGJiLmgpIHx8ICFlbGUudmlzaWJsZSgpIHx8IGVsZS5yZW1vdmVkKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIXNlbGYuYWxsb3dFZGdlVHhyQ2FjaGluZyAmJiBlbGUuaXNFZGdlKCkgfHwgIXNlbGYuYWxsb3dQYXJlbnRUeHJDYWNoaW5nICYmIGVsZS5pc1BhcmVudCgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGx2bCA9PSBudWxsKSB7XG4gICAgbHZsID0gTWF0aC5jZWlsKGxvZzIoem9vbSAqIHB4UmF0aW8pKTtcbiAgfVxuICBpZiAobHZsIDwgbWluTHZsJDEpIHtcbiAgICBsdmwgPSBtaW5MdmwkMTtcbiAgfSBlbHNlIGlmICh6b29tID49IG1heFpvb20kMSB8fCBsdmwgPiBtYXhMdmwkMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBzY2FsZSA9IE1hdGgucG93KDIsIGx2bCk7XG4gIHZhciBlbGVTY2FsZWRIID0gYmIuaCAqIHNjYWxlO1xuICB2YXIgZWxlU2NhbGVkVyA9IGJiLncgKiBzY2FsZTtcbiAgdmFyIHNjYWxlZExhYmVsU2hvd24gPSByLmVsZVRleHRCaWdnZXJUaGFuTWluKGVsZSwgc2NhbGUpO1xuICBpZiAoIXRoaXMuaXNWaXNpYmxlKGVsZSwgc2NhbGVkTGFiZWxTaG93bikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgZWxlQ2FjaGUgPSBsb29rdXAuZ2V0KGVsZSwgbHZsKTtcblxuICAvLyBpZiB0aGlzIGdldCB3YXMgb24gYW4gdW51c2VkL2ludmFsaWRhdGVkIGNhY2hlLCB0aGVuIHJlc3RvcmUgdGhlIHRleHR1cmUgdXNhZ2UgbWV0cmljXG4gIGlmIChlbGVDYWNoZSAmJiBlbGVDYWNoZS5pbnZhbGlkYXRlZCkge1xuICAgIGVsZUNhY2hlLmludmFsaWRhdGVkID0gZmFsc2U7XG4gICAgZWxlQ2FjaGUudGV4dHVyZS5pbnZhbGlkYXRlZFdpZHRoIC09IGVsZUNhY2hlLndpZHRoO1xuICB9XG4gIGlmIChlbGVDYWNoZSkge1xuICAgIHJldHVybiBlbGVDYWNoZTtcbiAgfVxuICB2YXIgdHhySDsgLy8gd2hpY2ggdGV4dHVyZSBoZWlnaHQgdGhpcyBlbGUgYmVsb25ncyB0b1xuXG4gIGlmIChlbGVTY2FsZWRIIDw9IG1pblR4ckgpIHtcbiAgICB0eHJIID0gbWluVHhySDtcbiAgfSBlbHNlIGlmIChlbGVTY2FsZWRIIDw9IHR4clN0ZXBIKSB7XG4gICAgdHhySCA9IHR4clN0ZXBIO1xuICB9IGVsc2Uge1xuICAgIHR4ckggPSBNYXRoLmNlaWwoZWxlU2NhbGVkSCAvIHR4clN0ZXBIKSAqIHR4clN0ZXBIO1xuICB9XG4gIGlmIChlbGVTY2FsZWRIID4gbWF4VHhySCB8fCBlbGVTY2FsZWRXID4gbWF4VHhyVykge1xuICAgIHJldHVybiBudWxsOyAvLyBjYWNoaW5nIGxhcmdlIGVsZW1lbnRzIGlzIG5vdCBlZmZpY2llbnRcbiAgfVxuXG4gIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG5cbiAgLy8gZmlyc3QgdHJ5IHRoZSBzZWNvbmQgbGFzdCBvbmUgaW4gY2FzZSBpdCBoYXMgc3BhY2UgYXQgdGhlIGVuZFxuICB2YXIgdHhyID0gdHhyUVt0eHJRLmxlbmd0aCAtIDJdO1xuICB2YXIgYWRkTmV3VHhyID0gZnVuY3Rpb24gYWRkTmV3VHhyKCkge1xuICAgIHJldHVybiBzZWxmLnJlY3ljbGVUZXh0dXJlKHR4ckgsIGVsZVNjYWxlZFcpIHx8IHNlbGYuYWRkVGV4dHVyZSh0eHJILCBlbGVTY2FsZWRXKTtcbiAgfTtcblxuICAvLyB0cnkgdGhlIGxhc3Qgb25lIGlmIHRoZXJlIGlzIG5vIHNlY29uZCBsYXN0IG9uZVxuICBpZiAoIXR4cikge1xuICAgIHR4ciA9IHR4clFbdHhyUS5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8vIGlmIHRoZSBsYXN0IG9uZSBkb2Vzbid0IGV4aXN0LCB3ZSBuZWVkIGEgZmlyc3Qgb25lXG4gIGlmICghdHhyKSB7XG4gICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gIH1cblxuICAvLyBpZiB0aGVyZSdzIG5vIHJvb20gaW4gdGhlIGN1cnJlbnQgdGV4dHVyZSwgd2UgbmVlZCBhIG5ldyBvbmVcbiAgaWYgKHR4ci53aWR0aCAtIHR4ci51c2VkV2lkdGggPCBlbGVTY2FsZWRXKSB7XG4gICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gIH1cbiAgdmFyIHNjYWxhYmxlRnJvbSA9IGZ1bmN0aW9uIHNjYWxhYmxlRnJvbShvdGhlckNhY2hlKSB7XG4gICAgcmV0dXJuIG90aGVyQ2FjaGUgJiYgb3RoZXJDYWNoZS5zY2FsZWRMYWJlbFNob3duID09PSBzY2FsZWRMYWJlbFNob3duO1xuICB9O1xuICB2YXIgZGVxaW5nID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kZXF1ZXVlO1xuICB2YXIgaGlnaFF1YWxpdHlSZXEgPSByZWFzb24gJiYgcmVhc29uID09PSBnZXRUeHJSZWFzb25zLmhpZ2hRdWFsaXR5O1xuICB2YXIgZG93bnNjYWxlUmVxID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kb3duc2NhbGU7XG4gIHZhciBoaWdoZXJDYWNoZTsgLy8gdGhlIG5lYXJlc3QgY2FjaGUgd2l0aCBhIGhpZ2hlciBsZXZlbFxuICBmb3IgKHZhciBsID0gbHZsICsgMTsgbCA8PSBtYXhMdmwkMTsgbCsrKSB7XG4gICAgdmFyIGMgPSBsb29rdXAuZ2V0KGVsZSwgbCk7XG4gICAgaWYgKGMpIHtcbiAgICAgIGhpZ2hlckNhY2hlID0gYztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgb25lVXBDYWNoZSA9IGhpZ2hlckNhY2hlICYmIGhpZ2hlckNhY2hlLmxldmVsID09PSBsdmwgKyAxID8gaGlnaGVyQ2FjaGUgOiBudWxsO1xuICB2YXIgZG93bnNjYWxlID0gZnVuY3Rpb24gZG93bnNjYWxlKCkge1xuICAgIHR4ci5jb250ZXh0LmRyYXdJbWFnZShvbmVVcENhY2hlLnRleHR1cmUuY2FudmFzLCBvbmVVcENhY2hlLngsIDAsIG9uZVVwQ2FjaGUud2lkdGgsIG9uZVVwQ2FjaGUuaGVpZ2h0LCB0eHIudXNlZFdpZHRoLCAwLCBlbGVTY2FsZWRXLCBlbGVTY2FsZWRIKTtcbiAgfTtcblxuICAvLyByZXNldCBlbGUgYXJlYSBpbiB0ZXh0dXJlXG4gIHR4ci5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgdHhyLmNvbnRleHQuY2xlYXJSZWN0KHR4ci51c2VkV2lkdGgsIDAsIGVsZVNjYWxlZFcsIHR4ckgpO1xuICBpZiAoc2NhbGFibGVGcm9tKG9uZVVwQ2FjaGUpKSB7XG4gICAgLy8gdGhlbiB3ZSBjYW4gcmVsYXRpdmVseSBjaGVhcGx5IHJlc2NhbGUgdGhlIGV4aXN0aW5nIGltYWdlIHcvbyByZXJlbmRlcmluZ1xuICAgIGRvd25zY2FsZSgpO1xuICB9IGVsc2UgaWYgKHNjYWxhYmxlRnJvbShoaWdoZXJDYWNoZSkpIHtcbiAgICAvLyB0aGVuIHVzZSB0aGUgaGlnaGVyIGNhY2hlIGZvciBub3cgYW5kIHF1ZXVlIHRoZSBuZXh0IGxldmVsIGRvd25cbiAgICAvLyB0byBjaGVhcGx5IHNjYWxlIHRvd2FyZHMgdGhlIHNtYWxsZXIgbGV2ZWxcblxuICAgIGlmIChoaWdoUXVhbGl0eVJlcSkge1xuICAgICAgZm9yICh2YXIgX2wgPSBoaWdoZXJDYWNoZS5sZXZlbDsgX2wgPiBsdmw7IF9sLS0pIHtcbiAgICAgICAgb25lVXBDYWNoZSA9IHNlbGYuZ2V0RWxlbWVudChlbGUsIGJiLCBweFJhdGlvLCBfbCwgZ2V0VHhyUmVhc29ucy5kb3duc2NhbGUpO1xuICAgICAgfVxuICAgICAgZG93bnNjYWxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgaGlnaGVyQ2FjaGUubGV2ZWwgLSAxKTtcbiAgICAgIHJldHVybiBoaWdoZXJDYWNoZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxvd2VyQ2FjaGU7IC8vIHRoZSBuZWFyZXN0IGNhY2hlIHdpdGggYSBsb3dlciBsZXZlbFxuICAgIGlmICghZGVxaW5nICYmICFoaWdoUXVhbGl0eVJlcSAmJiAhZG93bnNjYWxlUmVxKSB7XG4gICAgICBmb3IgKHZhciBfbDIgPSBsdmwgLSAxOyBfbDIgPj0gbWluTHZsJDE7IF9sMi0tKSB7XG4gICAgICAgIHZhciBfYyA9IGxvb2t1cC5nZXQoZWxlLCBfbDIpO1xuICAgICAgICBpZiAoX2MpIHtcbiAgICAgICAgICBsb3dlckNhY2hlID0gX2M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjYWxhYmxlRnJvbShsb3dlckNhY2hlKSkge1xuICAgICAgLy8gdGhlbiB1c2UgdGhlIGxvd2VyIHF1YWxpdHkgY2FjaGUgZm9yIG5vdyBhbmQgcXVldWUgdGhlIGJldHRlciBvbmUgZm9yIGxhdGVyXG5cbiAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgbHZsKTtcbiAgICAgIHJldHVybiBsb3dlckNhY2hlO1xuICAgIH1cbiAgICB0eHIuY29udGV4dC50cmFuc2xhdGUodHhyLnVzZWRXaWR0aCwgMCk7XG4gICAgdHhyLmNvbnRleHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICB0aGlzLmRyYXdFbGVtZW50KHR4ci5jb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCBmYWxzZSk7XG4gICAgdHhyLmNvbnRleHQuc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpO1xuICAgIHR4ci5jb250ZXh0LnRyYW5zbGF0ZSgtdHhyLnVzZWRXaWR0aCwgMCk7XG4gIH1cbiAgZWxlQ2FjaGUgPSB7XG4gICAgeDogdHhyLnVzZWRXaWR0aCxcbiAgICB0ZXh0dXJlOiB0eHIsXG4gICAgbGV2ZWw6IGx2bCxcbiAgICBzY2FsZTogc2NhbGUsXG4gICAgd2lkdGg6IGVsZVNjYWxlZFcsXG4gICAgaGVpZ2h0OiBlbGVTY2FsZWRILFxuICAgIHNjYWxlZExhYmVsU2hvd246IHNjYWxlZExhYmVsU2hvd25cbiAgfTtcbiAgdHhyLnVzZWRXaWR0aCArPSBNYXRoLmNlaWwoZWxlU2NhbGVkVyArIGVsZVR4clNwYWNpbmcpO1xuICB0eHIuZWxlQ2FjaGVzLnB1c2goZWxlQ2FjaGUpO1xuICBsb29rdXAuc2V0KGVsZSwgbHZsLCBlbGVDYWNoZSk7XG4gIHNlbGYuY2hlY2tUZXh0dXJlRnVsbG5lc3ModHhyKTtcbiAgcmV0dXJuIGVsZUNhY2hlO1xufTtcbkVUQ3AuaW52YWxpZGF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5pbnZhbGlkYXRlRWxlbWVudChlbGVzW2ldKTtcbiAgfVxufTtcbkVUQ3AuaW52YWxpZGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxvb2t1cCA9IHNlbGYubG9va3VwO1xuICB2YXIgY2FjaGVzID0gW107XG4gIHZhciBpbnZhbGlkID0gbG9va3VwLmlzSW52YWxpZChlbGUpO1xuICBpZiAoIWludmFsaWQpIHtcbiAgICByZXR1cm47IC8vIG92ZXJyaWRlIHRoZSBpbnZhbGlkYXRpb24gcmVxdWVzdCBpZiB0aGUgZWxlbWVudCBrZXkgaGFzIG5vdCBjaGFuZ2VkXG4gIH1cblxuICBmb3IgKHZhciBsdmwgPSBtaW5MdmwkMTsgbHZsIDw9IG1heEx2bCQxOyBsdmwrKykge1xuICAgIHZhciBjYWNoZSA9IGxvb2t1cC5nZXRGb3JDYWNoZWRLZXkoZWxlLCBsdmwpO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgY2FjaGVzLnB1c2goY2FjaGUpO1xuICAgIH1cbiAgfVxuICB2YXIgbm9PdGhlckVsZXNVc2VDYWNoZSA9IGxvb2t1cC5pbnZhbGlkYXRlKGVsZSk7XG4gIGlmIChub090aGVyRWxlc1VzZUNhY2hlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBfY2FjaGUgPSBjYWNoZXNbaV07XG4gICAgICB2YXIgdHhyID0gX2NhY2hlLnRleHR1cmU7XG5cbiAgICAgIC8vIHJlbW92ZSBzcGFjZSBmcm9tIHRoZSB0ZXh0dXJlIGl0IGJlbG9uZ3MgdG9cbiAgICAgIHR4ci5pbnZhbGlkYXRlZFdpZHRoICs9IF9jYWNoZS53aWR0aDtcblxuICAgICAgLy8gbWFyayB0aGUgY2FjaGUgYXMgaW52YWxpZGF0ZWRcbiAgICAgIF9jYWNoZS5pbnZhbGlkYXRlZCA9IHRydWU7XG5cbiAgICAgIC8vIHJldGlyZSB0aGUgdGV4dHVyZSBpZiBpdHMgdXRpbGl0eSBpcyBsb3dcbiAgICAgIHNlbGYuY2hlY2tUZXh0dXJlVXRpbGl0eSh0eHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBmcm9tIHF1ZXVlIHNpbmNlIHRoZSBvbGQgcmVxIHdhcyBmb3IgdGhlIG9sZCBzdGF0ZVxuICBzZWxmLnJlbW92ZUZyb21RdWV1ZShlbGUpO1xufTtcbkVUQ3AuY2hlY2tUZXh0dXJlVXRpbGl0eSA9IGZ1bmN0aW9uICh0eHIpIHtcbiAgLy8gaW52YWxpZGF0ZSBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUgaWYgdGhlIGNhY2hlIHNpemUgaXMgc21hbGxcbiAgaWYgKHR4ci5pbnZhbGlkYXRlZFdpZHRoID49IG1pblV0aWxpdHkgKiB0eHIud2lkdGgpIHtcbiAgICB0aGlzLnJldGlyZVRleHR1cmUodHhyKTtcbiAgfVxufTtcbkVUQ3AuY2hlY2tUZXh0dXJlRnVsbG5lc3MgPSBmdW5jdGlvbiAodHhyKSB7XG4gIC8vIGlmIHRleHR1cmUgaGFzIGJlZW4gbW9zdGx5IGZpbGxlZCBhbmQgcGFzc2VkIG92ZXIgc2V2ZXJhbCB0aW1lcywgcmVtb3ZlXG4gIC8vIGl0IGZyb20gdGhlIHF1ZXVlIHNvIHdlIGRvbid0IG5lZWQgdG8gd2FzdGUgdGltZSBsb29raW5nIGF0IGl0IHRvIHB1dCBuZXcgdGhpbmdzXG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ci5oZWlnaHQpO1xuICBpZiAodHhyLnVzZWRXaWR0aCAvIHR4ci53aWR0aCA+IG1heEZ1bGxuZXNzICYmIHR4ci5mdWxsbmVzc0NoZWNrcyA+PSBtYXhGdWxsbmVzc0NoZWNrcykge1xuICAgIHJlbW92ZUZyb21BcnJheSh0eHJRLCB0eHIpO1xuICB9IGVsc2Uge1xuICAgIHR4ci5mdWxsbmVzc0NoZWNrcysrO1xuICB9XG59O1xuRVRDcC5yZXRpcmVUZXh0dXJlID0gZnVuY3Rpb24gKHR4cikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0eHJIID0gdHhyLmhlaWdodDtcbiAgdmFyIHR4clEgPSBzZWxmLmdldFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgdmFyIGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gIC8vIHJldGlyZSB0aGUgdGV4dHVyZSBmcm9tIHRoZSBhY3RpdmUgLyBzZWFyY2hhYmxlIHF1ZXVlOlxuXG4gIHJlbW92ZUZyb21BcnJheSh0eHJRLCB0eHIpO1xuICB0eHIucmV0aXJlZCA9IHRydWU7XG5cbiAgLy8gcmVtb3ZlIHRoZSByZWZzIGZyb20gdGhlIGVsZXMgdG8gdGhlIGNhY2hlczpcblxuICB2YXIgZWxlQ2FjaGVzID0gdHhyLmVsZUNhY2hlcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVDYWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlQ2FjaGUgPSBlbGVDYWNoZXNbaV07XG4gICAgbG9va3VwLmRlbGV0ZUNhY2hlKGVsZUNhY2hlLmtleSwgZWxlQ2FjaGUubGV2ZWwpO1xuICB9XG4gIGNsZWFyQXJyYXkoZWxlQ2FjaGVzKTtcblxuICAvLyBhZGQgdGhlIHRleHR1cmUgdG8gYSByZXRpcmVkIHF1ZXVlIHNvIGl0IGNhbiBiZSByZWN5Y2xlZCBpbiBmdXR1cmU6XG5cbiAgdmFyIHJ0eHRyUSA9IHNlbGYuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgcnR4dHJRLnB1c2godHhyKTtcbn07XG5FVENwLmFkZFRleHR1cmUgPSBmdW5jdGlvbiAodHhySCwgbWluVykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG4gIHZhciB0eHIgPSB7fTtcbiAgdHhyUS5wdXNoKHR4cik7XG4gIHR4ci5lbGVDYWNoZXMgPSBbXTtcbiAgdHhyLmhlaWdodCA9IHR4ckg7XG4gIHR4ci53aWR0aCA9IE1hdGgubWF4KGRlZlR4cldpZHRoLCBtaW5XKTtcbiAgdHhyLnVzZWRXaWR0aCA9IDA7XG4gIHR4ci5pbnZhbGlkYXRlZFdpZHRoID0gMDtcbiAgdHhyLmZ1bGxuZXNzQ2hlY2tzID0gMDtcbiAgdHhyLmNhbnZhcyA9IHNlbGYucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyh0eHIud2lkdGgsIHR4ci5oZWlnaHQpO1xuICB0eHIuY29udGV4dCA9IHR4ci5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgcmV0dXJuIHR4cjtcbn07XG5FVENwLnJlY3ljbGVUZXh0dXJlID0gZnVuY3Rpb24gKHR4ckgsIG1pblcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ckgpO1xuICB2YXIgcnR4dHJRID0gc2VsZi5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlKHR4ckgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ0eHRyUS5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0eHIgPSBydHh0clFbaV07XG4gICAgaWYgKHR4ci53aWR0aCA+PSBtaW5XKSB7XG4gICAgICB0eHIucmV0aXJlZCA9IGZhbHNlO1xuICAgICAgdHhyLnVzZWRXaWR0aCA9IDA7XG4gICAgICB0eHIuaW52YWxpZGF0ZWRXaWR0aCA9IDA7XG4gICAgICB0eHIuZnVsbG5lc3NDaGVja3MgPSAwO1xuICAgICAgY2xlYXJBcnJheSh0eHIuZWxlQ2FjaGVzKTtcbiAgICAgIHR4ci5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgIHR4ci5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0eHIud2lkdGgsIHR4ci5oZWlnaHQpO1xuICAgICAgcmVtb3ZlRnJvbUFycmF5KHJ0eHRyUSwgdHhyKTtcbiAgICAgIHR4clEucHVzaCh0eHIpO1xuICAgICAgcmV0dXJuIHR4cjtcbiAgICB9XG4gIH1cbn07XG5FVENwLnF1ZXVlRWxlbWVudCA9IGZ1bmN0aW9uIChlbGUsIGx2bCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBxID0gc2VsZi5nZXRFbGVtZW50UXVldWUoKTtcbiAgdmFyIGsycSA9IHNlbGYuZ2V0RWxlbWVudEtleVRvUXVldWUoKTtcbiAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gIHZhciBleGlzdGluZ1JlcSA9IGsycVtrZXldO1xuICBpZiAoZXhpc3RpbmdSZXEpIHtcbiAgICAvLyB1c2UgdGhlIG1heCBsdmwgYi9jIGluIGJldHdlZW4gbHZscyBhcmUgY2hlYXAgdG8gbWFrZVxuICAgIGV4aXN0aW5nUmVxLmxldmVsID0gTWF0aC5tYXgoZXhpc3RpbmdSZXEubGV2ZWwsIGx2bCk7XG4gICAgZXhpc3RpbmdSZXEuZWxlcy5tZXJnZShlbGUpO1xuICAgIGV4aXN0aW5nUmVxLnJlcXMrKztcbiAgICBxLnVwZGF0ZUl0ZW0oZXhpc3RpbmdSZXEpO1xuICB9IGVsc2Uge1xuICAgIHZhciByZXEgPSB7XG4gICAgICBlbGVzOiBlbGUuc3Bhd24oKS5tZXJnZShlbGUpLFxuICAgICAgbGV2ZWw6IGx2bCxcbiAgICAgIHJlcXM6IDEsXG4gICAgICBrZXk6IGtleVxuICAgIH07XG4gICAgcS5wdXNoKHJlcSk7XG4gICAgazJxW2tleV0gPSByZXE7XG4gIH1cbn07XG5FVENwLmRlcXVldWUgPSBmdW5jdGlvbiAocHhSYXRpbyAvKiwgZXh0ZW50Ki8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYuZ2V0RWxlbWVudFF1ZXVlKCk7XG4gIHZhciBrMnEgPSBzZWxmLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCk7XG4gIHZhciBkZXF1ZXVlZCA9IFtdO1xuICB2YXIgbG9va3VwID0gc2VsZi5sb29rdXA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4RGVxU2l6ZSQxOyBpKyspIHtcbiAgICBpZiAocS5zaXplKCkgPiAwKSB7XG4gICAgICB2YXIgcmVxID0gcS5wb3AoKTtcbiAgICAgIHZhciBrZXkgPSByZXEua2V5O1xuICAgICAgdmFyIGVsZSA9IHJlcS5lbGVzWzBdOyAvLyBhbGwgZWxlcyBoYXZlIHRoZSBzYW1lIGtleVxuICAgICAgdmFyIGNhY2hlRXhpc3RzID0gbG9va3VwLmhhc0NhY2hlKGVsZSwgcmVxLmxldmVsKTtcblxuICAgICAgLy8gY2xlYXIgb3V0IHRoZSBrZXkgdG8gcmVxIGxvb2t1cFxuICAgICAgazJxW2tleV0gPSBudWxsO1xuXG4gICAgICAvLyBkZXF1ZXVlaW5nIGlzbid0IG5lY2Vzc2FyeSB3aXRoIGFuIGV4aXN0aW5nIGNhY2hlXG4gICAgICBpZiAoY2FjaGVFeGlzdHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkZXF1ZXVlZC5wdXNoKHJlcSk7XG4gICAgICB2YXIgYmIgPSBzZWxmLmdldEJvdW5kaW5nQm94KGVsZSk7XG4gICAgICBzZWxmLmdldEVsZW1lbnQoZWxlLCBiYiwgcHhSYXRpbywgcmVxLmxldmVsLCBnZXRUeHJSZWFzb25zLmRlcXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlcXVldWVkO1xufTtcbkVUQ3AucmVtb3ZlRnJvbVF1ZXVlID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBxID0gc2VsZi5nZXRFbGVtZW50UXVldWUoKTtcbiAgdmFyIGsycSA9IHNlbGYuZ2V0RWxlbWVudEtleVRvUXVldWUoKTtcbiAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gIHZhciByZXEgPSBrMnFba2V5XTtcbiAgaWYgKHJlcSAhPSBudWxsKSB7XG4gICAgaWYgKHJlcS5lbGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gcmVtb3ZlIGlmIGxhc3QgZWxlIGluIHRoZSByZXFcbiAgICAgIC8vIGJyaW5nIHRvIGZyb250IG9mIHF1ZXVlXG4gICAgICByZXEucmVxcyA9IE1BWF9JTlQkMTtcbiAgICAgIHEudXBkYXRlSXRlbShyZXEpO1xuICAgICAgcS5wb3AoKTsgLy8gcmVtb3ZlIGZyb20gcXVldWVcblxuICAgICAgazJxW2tleV0gPSBudWxsOyAvLyByZW1vdmUgZnJvbSBsb29rdXAgbWFwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlbW92ZSBlbGUgZnJvbSByZXFcbiAgICAgIHJlcS5lbGVzLnVubWVyZ2UoZWxlKTtcbiAgICB9XG4gIH1cbn07XG5FVENwLm9uRGVxdWV1ZSA9IGZ1bmN0aW9uIChmbikge1xuICB0aGlzLm9uRGVxdWV1ZXMucHVzaChmbik7XG59O1xuRVRDcC5vZmZEZXF1ZXVlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlbW92ZUZyb21BcnJheSh0aGlzLm9uRGVxdWV1ZXMsIGZuKTtcbn07XG5FVENwLnNldHVwRGVxdWV1ZWluZyA9IGRlZnMuc2V0dXBEZXF1ZXVlaW5nKHtcbiAgZGVxUmVkcmF3VGhyZXNob2xkOiBkZXFSZWRyYXdUaHJlc2hvbGQkMSxcbiAgZGVxQ29zdDogZGVxQ29zdCQxLFxuICBkZXFBdmdDb3N0OiBkZXFBdmdDb3N0JDEsXG4gIGRlcU5vRHJhd0Nvc3Q6IGRlcU5vRHJhd0Nvc3QkMSxcbiAgZGVxRmFzdENvc3Q6IGRlcUZhc3RDb3N0JDEsXG4gIGRlcTogZnVuY3Rpb24gZGVxKHNlbGYsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgIHJldHVybiBzZWxmLmRlcXVldWUocHhSYXRpbywgZXh0ZW50KTtcbiAgfSxcbiAgb25EZXFkOiBmdW5jdGlvbiBvbkRlcWQoc2VsZiwgZGVxZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5vbkRlcXVldWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZm4gPSBzZWxmLm9uRGVxdWV1ZXNbaV07XG4gICAgICBmbihkZXFkKTtcbiAgICB9XG4gIH0sXG4gIHNob3VsZFJlZHJhdzogZnVuY3Rpb24gc2hvdWxkUmVkcmF3KHNlbGYsIGRlcWQsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVxZC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZXMgPSBkZXFkW2ldLmVsZXM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGJiID0gZWxlc1tqXS5ib3VuZGluZ0JveCgpO1xuICAgICAgICBpZiAoYm91bmRpbmdCb3hlc0ludGVyc2VjdChiYiwgZXh0ZW50KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgcHJpb3JpdHk6IGZ1bmN0aW9uIHByaW9yaXR5KHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi5yZW5kZXJlci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZVR4ckRlcTtcbiAgfVxufSk7XG5cbnZhciBkZWZOdW1MYXllcnMgPSAxOyAvLyBkZWZhdWx0IG51bWJlciBvZiBsYXllcnMgdG8gdXNlXG52YXIgbWluTHZsID0gLTQ7IC8vIHdoZW4gc2NhbGluZyBzbWFsbGVyIHRoYW4gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlLXJlbmRlclxudmFyIG1heEx2bCA9IDI7IC8vIHdoZW4gbGFyZ2VyIHRoYW4gdGhpcyBzY2FsZSBqdXN0IHJlbmRlciBkaXJlY3RseSAoY2FjaGluZyBpcyBub3QgaGVscGZ1bClcbnZhciBtYXhab29tID0gMy45OTsgLy8gYmV5b25kIHRoaXMgem9vbSBsZXZlbCwgbGF5ZXJlZCB0ZXh0dXJlcyBhcmUgbm90IHVzZWRcbnZhciBkZXFSZWRyYXdUaHJlc2hvbGQgPSA1MDsgLy8gdGltZSB0byBiYXRjaCByZWRyYXdzIHRvZ2V0aGVyIGZyb20gZGVxdWV1ZWluZyB0byBhbGxvdyBtb3JlIGRlcXVldWVpbmcgY2FsY3MgdG8gaGFwcGVuIGluIHRoZSBtZWFud2hpbGVcbnZhciByZWZpbmVFbGVEZWJvdW5jZVRpbWUgPSA1MDsgLy8gdGltZSB0byBkZWJvdW5jZSBzaGFycGVyIGVsZSB0ZXh0dXJlIHVwZGF0ZXNcbnZhciBkZXFDb3N0ID0gMC4xNTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBhbGxvd2VkIGZvciBkZXF1ZXVpbmcgZWxlIGNhY2hlcyBlYWNoIGZyYW1lXG52YXIgZGVxQXZnQ29zdCA9IDAuMTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBjb21wYXJlZCB0byBhdmVyYWdlIG92ZXJhbGwgcmVkcmF3IHRpbWVcbnZhciBkZXFOb0RyYXdDb3N0ID0gMC45OyAvLyAlIG9mIGF2ZyBmcmFtZSB0aW1lIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlcXVldWVpbmcgd2hlbiBub3QgZHJhd2luZ1xudmFyIGRlcUZhc3RDb3N0ID0gMC45OyAvLyAlIG9mIGZyYW1lIHRpbWUgdG8gYmUgdXNlZCB3aGVuID42MGZwc1xudmFyIG1heERlcVNpemUgPSAxOyAvLyBudW1iZXIgb2YgZWxlcyB0byBkZXF1ZXVlIGFuZCByZW5kZXIgYXQgaGlnaGVyIHRleHR1cmUgaW4gZWFjaCBiYXRjaFxudmFyIGludmFsaWRUaHJlc2hvbGQgPSAyNTA7IC8vIHRpbWUgdGhyZXNob2xkIGZvciBkaXNhYmxpbmcgYi9jIG9mIGludmFsaWRhdGlvbnNcbnZhciBtYXhMYXllckFyZWEgPSA0MDAwICogNDAwMDsgLy8gbGF5ZXJzIGNhbid0IGJlIGJpZ2dlciB0aGFuIHRoaXNcbnZhciB1c2VIaWdoUXVhbGl0eUVsZVR4clJlcXMgPSB0cnVlOyAvLyB3aGV0aGVyIHRvIHVzZSBoaWdoIHF1YWxpdHkgZWxlIHR4ciByZXF1ZXN0cyAoZ2VuZXJhbGx5IGZhc3RlciBhbmQgY2hlYXBlciBpbiB0aGUgbG9uZ3Rlcm0pXG5cbi8vIHZhciBsb2cgPSBmdW5jdGlvbigpeyBjb25zb2xlLmxvZy5hcHBseSggY29uc29sZSwgYXJndW1lbnRzICk7IH07XG5cbnZhciBMYXllcmVkVGV4dHVyZUNhY2hlID0gZnVuY3Rpb24gTGF5ZXJlZFRleHR1cmVDYWNoZShyZW5kZXJlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciByID0gc2VsZi5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICB2YXIgY3kgPSByLmN5O1xuICBzZWxmLmxheWVyc0J5TGV2ZWwgPSB7fTsgLy8gZS5nLiAyID0+IFsgbGF5ZXIxLCBsYXllcjIsIC4uLiwgbGF5ZXJOIF1cblxuICBzZWxmLmZpcnN0R2V0ID0gdHJ1ZTtcbiAgc2VsZi5sYXN0SW52YWxpZGF0aW9uVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSAyICogaW52YWxpZFRocmVzaG9sZDtcbiAgc2VsZi5za2lwcGluZyA9IGZhbHNlO1xuICBzZWxmLmVsZVR4ckRlcXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gIHNlbGYuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICAgIHNlbGYucmVmaW5lRWxlbWVudFRleHR1cmVzKHNlbGYuZWxlVHhyRGVxcyk7XG4gICAgc2VsZi5lbGVUeHJEZXFzLnVubWVyZ2Uoc2VsZi5lbGVUeHJEZXFzKTtcbiAgfSwgcmVmaW5lRWxlRGVib3VuY2VUaW1lKTtcbiAgci5iZWZvcmVSZW5kZXIoZnVuY3Rpb24gKHdpbGxEcmF3LCBub3cpIHtcbiAgICBpZiAobm93IC0gc2VsZi5sYXN0SW52YWxpZGF0aW9uVGltZSA8PSBpbnZhbGlkVGhyZXNob2xkKSB7XG4gICAgICBzZWxmLnNraXBwaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5za2lwcGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfSwgci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4clNraXApO1xuICB2YXIgcVNvcnQgPSBmdW5jdGlvbiBxU29ydChhLCBiKSB7XG4gICAgcmV0dXJuIGIucmVxcyAtIGEucmVxcztcbiAgfTtcbiAgc2VsZi5sYXllcnNRdWV1ZSA9IG5ldyBoZWFwKHFTb3J0KTtcbiAgc2VsZi5zZXR1cERlcXVldWVpbmcoKTtcbn07XG52YXIgTFRDcCA9IExheWVyZWRUZXh0dXJlQ2FjaGUucHJvdG90eXBlO1xudmFyIGxheWVySWRQb29sID0gMDtcbnZhciBNQVhfSU5UID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbkxUQ3AubWFrZUxheWVyID0gZnVuY3Rpb24gKGJiLCBsdmwpIHtcbiAgdmFyIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgdmFyIHcgPSBNYXRoLmNlaWwoYmIudyAqIHNjYWxlKTtcbiAgdmFyIGggPSBNYXRoLmNlaWwoYmIuaCAqIHNjYWxlKTtcbiAgdmFyIGNhbnZhcyA9IHRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyh3LCBoKTtcbiAgdmFyIGxheWVyID0ge1xuICAgIGlkOiBsYXllcklkUG9vbCA9ICsrbGF5ZXJJZFBvb2wgJSBNQVhfSU5ULFxuICAgIGJiOiBiYixcbiAgICBsZXZlbDogbHZsLFxuICAgIHdpZHRoOiB3LFxuICAgIGhlaWdodDogaCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICBjb250ZXh0OiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSxcbiAgICBlbGVzOiBbXSxcbiAgICBlbGVzUXVldWU6IFtdLFxuICAgIHJlcXM6IDBcbiAgfTtcblxuICAvLyBsb2coJ21ha2UgbGF5ZXIgJXMgd2l0aCB3ICVzIGFuZCBoICVzIGFuZCBsdmwgJXMnLCBsYXllci5pZCwgbGF5ZXIud2lkdGgsIGxheWVyLmhlaWdodCwgbGF5ZXIubGV2ZWwpO1xuXG4gIHZhciBjeHQgPSBsYXllci5jb250ZXh0O1xuICB2YXIgZHggPSAtbGF5ZXIuYmIueDE7XG4gIHZhciBkeSA9IC1sYXllci5iYi55MTtcblxuICAvLyBkbyB0aGUgdHJhbnNmb3JtIG9uIGNyZWF0aW9uIHRvIHNhdmUgY3ljbGVzIChpdCdzIHRoZSBzYW1lIGZvciBhbGwgZWxlcylcbiAgY3h0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gIGN4dC50cmFuc2xhdGUoZHgsIGR5KTtcbiAgcmV0dXJuIGxheWVyO1xufTtcbkxUQ3AuZ2V0TGF5ZXJzID0gZnVuY3Rpb24gKGVsZXMsIHB4UmF0aW8sIGx2bCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciByID0gc2VsZi5yZW5kZXJlcjtcbiAgdmFyIGN5ID0gci5jeTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciBmaXJzdEdldCA9IHNlbGYuZmlyc3RHZXQ7XG4gIHNlbGYuZmlyc3RHZXQgPSBmYWxzZTtcblxuICAvLyBsb2coJy0tXFxuZ2V0IGxheWVycyB3aXRoICVzIGVsZXMnLCBlbGVzLmxlbmd0aCk7XG4gIC8vbG9nIGVsZXMubWFwKGZ1bmN0aW9uKGVsZSl7IHJldHVybiBlbGUuaWQoKSB9KSApO1xuXG4gIGlmIChsdmwgPT0gbnVsbCkge1xuICAgIGx2bCA9IE1hdGguY2VpbChsb2cyKHpvb20gKiBweFJhdGlvKSk7XG4gICAgaWYgKGx2bCA8IG1pbkx2bCkge1xuICAgICAgbHZsID0gbWluTHZsO1xuICAgIH0gZWxzZSBpZiAoem9vbSA+PSBtYXhab29tIHx8IGx2bCA+IG1heEx2bCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHNlbGYudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcobHZsLCBlbGVzKTtcbiAgdmFyIGxheWVyc0J5THZsID0gc2VsZi5sYXllcnNCeUxldmVsO1xuICB2YXIgc2NhbGUgPSBNYXRoLnBvdygyLCBsdmwpO1xuICB2YXIgbGF5ZXJzID0gbGF5ZXJzQnlMdmxbbHZsXSA9IGxheWVyc0J5THZsW2x2bF0gfHwgW107XG4gIHZhciBiYjtcbiAgdmFyIGx2bENvbXBsZXRlID0gc2VsZi5sZXZlbElzQ29tcGxldGUobHZsLCBlbGVzKTtcbiAgdmFyIHRtcExheWVycztcbiAgdmFyIGNoZWNrVGVtcExldmVscyA9IGZ1bmN0aW9uIGNoZWNrVGVtcExldmVscygpIHtcbiAgICB2YXIgY2FuVXNlQXNUbXBMdmwgPSBmdW5jdGlvbiBjYW5Vc2VBc1RtcEx2bChsKSB7XG4gICAgICBzZWxmLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nKGwsIGVsZXMpO1xuICAgICAgaWYgKHNlbGYubGV2ZWxJc0NvbXBsZXRlKGwsIGVsZXMpKSB7XG4gICAgICAgIHRtcExheWVycyA9IGxheWVyc0J5THZsW2xdO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjaGVja0x2bHMgPSBmdW5jdGlvbiBjaGVja0x2bHMoZGlyKSB7XG4gICAgICBpZiAodG1wTGF5ZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGwgPSBsdmwgKyBkaXI7IG1pbkx2bCA8PSBsICYmIGwgPD0gbWF4THZsOyBsICs9IGRpcikge1xuICAgICAgICBpZiAoY2FuVXNlQXNUbXBMdmwobCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY2hlY2tMdmxzKCsxKTtcbiAgICBjaGVja0x2bHMoLTEpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSBpbnZhbGlkIGxheWVyczsgdGhleSB3aWxsIGJlIHJlcGxhY2VkIGFzIG5lZWRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgZm9yICh2YXIgaSA9IGxheWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGxheWVyID0gbGF5ZXJzW2ldO1xuICAgICAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICAgICAgcmVtb3ZlRnJvbUFycmF5KGxheWVycywgbGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgaWYgKCFsdmxDb21wbGV0ZSkge1xuICAgIC8vIGlmIHRoZSBjdXJyZW50IGxldmVsIGlzIGluY29tcGxldGUsIHRoZW4gdXNlIHRoZSBjbG9zZXN0LCBiZXN0IHF1YWxpdHkgbGF5ZXJzZXQgdGVtcG9yYXJpbHlcbiAgICAvLyBhbmQgbGF0ZXIgcXVldWUgdGhlIGN1cnJlbnQgbGF5ZXJzZXQgc28gd2UgY2FuIGdldCB0aGUgcHJvcGVyIHF1YWxpdHkgbGV2ZWwgc29vblxuXG4gICAgY2hlY2tUZW1wTGV2ZWxzKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nKCdsZXZlbCBjb21wbGV0ZSwgdXNpbmcgZXhpc3RpbmcgbGF5ZXJzXFxuLS0nKTtcbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG4gIHZhciBnZXRCYiA9IGZ1bmN0aW9uIGdldEJiKCkge1xuICAgIGlmICghYmIpIHtcbiAgICAgIGJiID0gbWFrZUJvdW5kaW5nQm94KCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXBkYXRlQm91bmRpbmdCb3goYmIsIGVsZXNbaV0uYm91bmRpbmdCb3goKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYjtcbiAgfTtcbiAgdmFyIG1ha2VMYXllciA9IGZ1bmN0aW9uIG1ha2VMYXllcihvcHRzKSB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIGFmdGVyID0gb3B0cy5hZnRlcjtcbiAgICBnZXRCYigpO1xuICAgIHZhciBhcmVhID0gYmIudyAqIHNjYWxlICogKGJiLmggKiBzY2FsZSk7XG4gICAgaWYgKGFyZWEgPiBtYXhMYXllckFyZWEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbGF5ZXIgPSBzZWxmLm1ha2VMYXllcihiYiwgbHZsKTtcbiAgICBpZiAoYWZ0ZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIGluZGV4ID0gbGF5ZXJzLmluZGV4T2YoYWZ0ZXIpICsgMTtcbiAgICAgIGxheWVycy5zcGxpY2UoaW5kZXgsIDAsIGxheWVyKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuaW5zZXJ0ID09PSB1bmRlZmluZWQgfHwgb3B0cy5pbnNlcnQpIHtcbiAgICAgIC8vIG5vIGFmdGVyIHNwZWNpZmllZCA9PiBmaXJzdCBsYXllciBtYWRlIHNvIHB1dCBhdCBzdGFydFxuICAgICAgbGF5ZXJzLnVuc2hpZnQobGF5ZXIpO1xuICAgIH1cblxuICAgIC8vIGlmKCB0bXBMYXllcnMgKXtcbiAgICAvL3NlbGYucXVldWVMYXllciggbGF5ZXIgKTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gbGF5ZXI7XG4gIH07XG4gIGlmIChzZWxmLnNraXBwaW5nICYmICFmaXJzdEdldCkge1xuICAgIC8vIGxvZygnc2tpcCBsYXllcnMnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGxvZygnZG8gbGF5ZXJzJyk7XG5cbiAgdmFyIGxheWVyID0gbnVsbDtcbiAgdmFyIG1heEVsZXNQZXJMYXllciA9IGVsZXMubGVuZ3RoIC8gZGVmTnVtTGF5ZXJzO1xuICB2YXIgYWxsb3dMYXp5UXVldWVpbmcgPSAhZmlyc3RHZXQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgY2FjaGVzID0gcnMuaW1nTGF5ZXJDYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyB8fCB7fTtcblxuICAgIC8vIGxvZygnbG9vayBhdCBlbGUnLCBlbGUuaWQoKSk7XG5cbiAgICB2YXIgZXhpc3RpbmdMYXllciA9IGNhY2hlc1tsdmxdO1xuICAgIGlmIChleGlzdGluZ0xheWVyKSB7XG4gICAgICAvLyByZXVzZSBsYXllciBmb3IgbGF0ZXIgZWxlc1xuICAgICAgLy8gbG9nKCdyZXVzZSBsYXllciBmb3InLCBlbGUuaWQoKSk7XG4gICAgICBsYXllciA9IGV4aXN0aW5nTGF5ZXI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFsYXllciB8fCBsYXllci5lbGVzLmxlbmd0aCA+PSBtYXhFbGVzUGVyTGF5ZXIgfHwgIWJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChsYXllci5iYiwgZWxlLmJvdW5kaW5nQm94KCkpKSB7XG4gICAgICAvLyBsb2coJ21ha2UgbmV3IGxheWVyIGZvciBlbGUgJXMnLCBlbGUuaWQoKSk7XG5cbiAgICAgIGxheWVyID0gbWFrZUxheWVyKHtcbiAgICAgICAgaW5zZXJ0OiB0cnVlLFxuICAgICAgICBhZnRlcjogbGF5ZXJcbiAgICAgIH0pO1xuXG4gICAgICAvLyBpZiBub3cgbGF5ZXIgY2FuIGJlIGJ1aWx0IHRoZW4gd2UgY2FuJ3QgdXNlIGxheWVycyBhdCB0aGlzIGxldmVsXG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2coJ25ldyBsYXllciB3aXRoIGlkICVzJywgbGF5ZXIuaWQpO1xuICAgIH1cblxuICAgIGlmICh0bXBMYXllcnMgfHwgYWxsb3dMYXp5UXVldWVpbmcpIHtcbiAgICAgIC8vIGxvZygncXVldWUgZWxlICVzIGluIGxheWVyICVzJywgZWxlLmlkKCksIGxheWVyLmlkKTtcbiAgICAgIHNlbGYucXVldWVMYXllcihsYXllciwgZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9nKCdkcmF3IGVsZSAlcyBpbiBsYXllciAlcycsIGVsZS5pZCgpLCBsYXllci5pZCk7XG4gICAgICBzZWxmLmRyYXdFbGVJbkxheWVyKGxheWVyLCBlbGUsIGx2bCwgcHhSYXRpbyk7XG4gICAgfVxuICAgIGxheWVyLmVsZXMucHVzaChlbGUpO1xuICAgIGNhY2hlc1tsdmxdID0gbGF5ZXI7XG4gIH1cblxuICAvLyBsb2coJy0tJyk7XG5cbiAgaWYgKHRtcExheWVycykge1xuICAgIC8vIHRoZW4gd2Ugb25seSBxdWV1ZWQgdGhlIGN1cnJlbnQgbGF5ZXJzZXQgYW5kIGNhbid0IGRyYXcgaXQgeWV0XG4gICAgcmV0dXJuIHRtcExheWVycztcbiAgfVxuICBpZiAoYWxsb3dMYXp5UXVldWVpbmcpIHtcbiAgICAvLyBsb2coJ2xhenkgcXVldWUgbGV2ZWwnLCBsdmwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBsYXllcnM7XG59O1xuXG4vLyBhIGxheWVyIG1heSB3YW50IHRvIHVzZSBhbiBlbGUgY2FjaGUgb2YgYSBoaWdoZXIgbGV2ZWwgdG8gYXZvaWQgYmx1cnJpbmVzc1xuLy8gc28gdGhlIGxheWVyIGxldmVsIG1pZ2h0IG5vdCBlcXVhbCB0aGUgZWxlIGxldmVsXG5MVENwLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCA9IGZ1bmN0aW9uIChsdmwsIHB4UmF0aW8pIHtcbiAgcmV0dXJuIGx2bDtcbn07XG5MVENwLmRyYXdFbGVJbkxheWVyID0gZnVuY3Rpb24gKGxheWVyLCBlbGUsIGx2bCwgcHhSYXRpbykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciByID0gdGhpcy5yZW5kZXJlcjtcbiAgdmFyIGNvbnRleHQgPSBsYXllci5jb250ZXh0O1xuICB2YXIgYmIgPSBlbGUuYm91bmRpbmdCb3goKTtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCB8fCAhZWxlLnZpc2libGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsdmwgPSBzZWxmLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChsdmwsIHB4UmF0aW8pO1xuICB7XG4gICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgZmFsc2UpO1xuICB9XG4gIHtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgbnVsbCwgbnVsbCwgbHZsLCB1c2VIaWdoUXVhbGl0eUVsZVR4clJlcXMpO1xuICB9XG4gIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgfVxufTtcbkxUQ3AubGV2ZWxJc0NvbXBsZXRlID0gZnVuY3Rpb24gKGx2bCwgZWxlcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBsYXllcnMgPSBzZWxmLmxheWVyc0J5TGV2ZWxbbHZsXTtcbiAgaWYgKCFsYXllcnMgfHwgbGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbnVtRWxlc0luTGF5ZXJzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgYW55IGVsZXMgbmVlZGVkIHRvIGJlIGRyYXduIHlldCwgdGhlIGxldmVsIGlzIG5vdCBjb21wbGV0ZVxuICAgIGlmIChsYXllci5yZXFzID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBsYXllciBpcyBpbnZhbGlkLCB0aGUgbGV2ZWwgaXMgbm90IGNvbXBsZXRlXG4gICAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbnVtRWxlc0luTGF5ZXJzICs9IGxheWVyLmVsZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gd2Ugc2hvdWxkIGhhdmUgZXhhY3RseSB0aGUgbnVtYmVyIG9mIGVsZXMgcGFzc2VkIGluIHRvIGJlIGNvbXBsZXRlXG4gIGlmIChudW1FbGVzSW5MYXllcnMgIT09IGVsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbkxUQ3AudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcgPSBmdW5jdGlvbiAobHZsLCBlbGVzKSB7XG4gIHZhciBsYXllcnMgPSB0aGlzLmxheWVyc0J5TGV2ZWxbbHZsXTtcbiAgaWYgKCFsYXllcnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBpZiBpbiBhIGxheWVyIHRoZSBlbGVzIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIsIHRoZW4gdGhlIGxheWVyIGlzIGludmFsaWRcbiAgLy8gKGkuZS4gdGhlcmUgaXMgYW4gZWxlIGluIGJldHdlZW4gdGhlIGVsZXMgaW4gdGhlIGxheWVyKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxheWVyID0gbGF5ZXJzW2ldO1xuICAgIHZhciBvZmZzZXQgPSAtMTtcblxuICAgIC8vIGZpbmQgdGhlIG9mZnNldFxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGxheWVyLmVsZXNbMF0gPT09IGVsZXNbal0pIHtcbiAgICAgICAgb2Zmc2V0ID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAvLyB0aGVuIHRoZSBsYXllciBoYXMgbm9uZXhpc3RlbnQgZWxlbWVudHMgYW5kIGlzIGludmFsaWRcbiAgICAgIHRoaXMuaW52YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHRoZSBlbGVzIGluIHRoZSBsYXllciBtdXN0IGJlIGluIHRoZSBzYW1lIGNvbnRpbnVvdXMgb3JkZXIsIGVsc2UgdGhlIGxheWVyIGlzIGludmFsaWRcblxuICAgIHZhciBvID0gb2Zmc2V0O1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGF5ZXIuZWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGxheWVyLmVsZXNbal0gIT09IGVsZXNbbyArIGpdKSB7XG4gICAgICAgIC8vIGxvZygnaW52YWxpZGF0ZSBiYXNlZCBvbiBvcmRlcmluZycsIGxheWVyLmlkKTtcblxuICAgICAgICB0aGlzLmludmFsaWRhdGVMYXllcihsYXllcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbkxUQ3AudXBkYXRlRWxlbWVudHNJbkxheWVycyA9IGZ1bmN0aW9uIChlbGVzLCB1cGRhdGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaXNFbGVzID0gZWxlbWVudChlbGVzWzBdKTtcblxuICAvLyBjb2xsZWN0IHVkcGF0ZWQgZWxlbWVudHMgKGNhc2NhZGVkIGZyb20gdGhlIGxheWVycykgYW5kIHVwZGF0ZSBlYWNoXG4gIC8vIGxheWVyIGl0c2VsZiBhbG9uZyB0aGUgd2F5XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByZXEgPSBpc0VsZXMgPyBudWxsIDogZWxlc1tpXTtcbiAgICB2YXIgZWxlID0gaXNFbGVzID8gZWxlc1tpXSA6IGVsZXNbaV0uZWxlO1xuICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgY2FjaGVzID0gcnMuaW1nTGF5ZXJDYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyB8fCB7fTtcbiAgICBmb3IgKHZhciBsID0gbWluTHZsOyBsIDw9IG1heEx2bDsgbCsrKSB7XG4gICAgICB2YXIgbGF5ZXIgPSBjYWNoZXNbbF07XG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB1cGRhdGUgaXMgYSByZXF1ZXN0IGZyb20gdGhlIGVsZSBjYWNoZSwgdGhlbiBpdCBhZmZlY3RzIG9ubHlcbiAgICAgIC8vIHRoZSBtYXRjaGluZyBsZXZlbFxuICAgICAgaWYgKHJlcSAmJiBzZWxmLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChsYXllci5sZXZlbCkgIT09IHJlcS5sZXZlbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZShsYXllciwgZWxlLCByZXEpO1xuICAgIH1cbiAgfVxufTtcbkxUQ3AuaGF2ZUxheWVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaGF2ZUxheWVycyA9IGZhbHNlO1xuICBmb3IgKHZhciBsID0gbWluTHZsOyBsIDw9IG1heEx2bDsgbCsrKSB7XG4gICAgdmFyIGxheWVycyA9IHNlbGYubGF5ZXJzQnlMZXZlbFtsXTtcbiAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgICBoYXZlTGF5ZXJzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGF2ZUxheWVycztcbn07XG5MVENwLmludmFsaWRhdGVFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKGVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNlbGYubGFzdEludmFsaWRhdGlvblRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuXG4gIC8vIGxvZygndXBkYXRlIGludmFsaWRhdGUgbGF5ZXIgdGltZSBmcm9tIGVsZXMnKTtcblxuICBpZiAoZWxlcy5sZW5ndGggPT09IDAgfHwgIXNlbGYuaGF2ZUxheWVycygpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNlbGYudXBkYXRlRWxlbWVudHNJbkxheWVycyhlbGVzLCBmdW5jdGlvbiBpbnZhbEFzc29jTGF5ZXJzKGxheWVyLCBlbGUsIHJlcSkge1xuICAgIHNlbGYuaW52YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgfSk7XG59O1xuTFRDcC5pbnZhbGlkYXRlTGF5ZXIgPSBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgLy8gbG9nKCd1cGRhdGUgaW52YWxpZGF0ZSBsYXllciB0aW1lJyk7XG5cbiAgdGhpcy5sYXN0SW52YWxpZGF0aW9uVGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG4gIGlmIChsYXllci5pbnZhbGlkKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIHNhdmUgY3ljbGVzXG5cbiAgdmFyIGx2bCA9IGxheWVyLmxldmVsO1xuICB2YXIgZWxlcyA9IGxheWVyLmVsZXM7XG4gIHZhciBsYXllcnMgPSB0aGlzLmxheWVyc0J5TGV2ZWxbbHZsXTtcblxuICAvLyBsb2coJ2ludmFsaWRhdGUgbGF5ZXInLCBsYXllci5pZCApO1xuXG4gIHJlbW92ZUZyb21BcnJheShsYXllcnMsIGxheWVyKTtcbiAgLy8gbGF5ZXIuZWxlcyA9IFtdO1xuXG4gIGxheWVyLmVsZXNRdWV1ZSA9IFtdO1xuICBsYXllci5pbnZhbGlkID0gdHJ1ZTtcbiAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgbGF5ZXIucmVwbGFjZW1lbnQuaW52YWxpZCA9IHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNhY2hlcyA9IGVsZXNbaV0uX3ByaXZhdGUucnNjcmF0Y2guaW1nTGF5ZXJDYWNoZXM7XG4gICAgaWYgKGNhY2hlcykge1xuICAgICAgY2FjaGVzW2x2bF0gPSBudWxsO1xuICAgIH1cbiAgfVxufTtcbkxUQ3AucmVmaW5lRWxlbWVudFRleHR1cmVzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGxvZygncmVmaW5lJywgZWxlcy5sZW5ndGgpO1xuXG4gIHNlbGYudXBkYXRlRWxlbWVudHNJbkxheWVycyhlbGVzLCBmdW5jdGlvbiByZWZpbmVFYWNoRWxlKGxheWVyLCBlbGUsIHJlcSkge1xuICAgIHZhciByTHlyID0gbGF5ZXIucmVwbGFjZW1lbnQ7XG4gICAgaWYgKCFyTHlyKSB7XG4gICAgICByTHlyID0gbGF5ZXIucmVwbGFjZW1lbnQgPSBzZWxmLm1ha2VMYXllcihsYXllci5iYiwgbGF5ZXIubGV2ZWwpO1xuICAgICAgckx5ci5yZXBsYWNlcyA9IGxheWVyO1xuICAgICAgckx5ci5lbGVzID0gbGF5ZXIuZWxlcztcblxuICAgICAgLy8gbG9nKCdtYWtlIHJlcGxhY2VtZW50IGxheWVyICVzIGZvciAlcyB3aXRoIGxldmVsICVzJywgckx5ci5pZCwgbGF5ZXIuaWQsIHJMeXIubGV2ZWwpO1xuICAgIH1cblxuICAgIGlmICghckx5ci5yZXFzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJMeXIuZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZWxmLnF1ZXVlTGF5ZXIockx5ciwgckx5ci5lbGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9nKCdxdWV1ZSByZXBsYWNlbWVudCBsYXllciByZWZpbmVtZW50Jywgckx5ci5pZCk7XG4gICAgfVxuICB9KTtcbn07XG5cbkxUQ3AuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50ID0gZnVuY3Rpb24gKGVsZSkge1xuICB0aGlzLmVsZVR4ckRlcXMubWVyZ2UoZWxlKTtcbiAgdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCk7XG59O1xuTFRDcC5xdWV1ZUxheWVyID0gZnVuY3Rpb24gKGxheWVyLCBlbGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYubGF5ZXJzUXVldWU7XG4gIHZhciBlbGVzUSA9IGxheWVyLmVsZXNRdWV1ZTtcbiAgdmFyIGhhc0lkID0gZWxlc1EuaGFzSWQgPSBlbGVzUS5oYXNJZCB8fCB7fTtcblxuICAvLyBpZiBhIGxheWVyIGlzIGdvaW5nIHRvIGJlIHJlcGxhY2VkLCBxdWV1aW5nIGlzIGEgd2FzdGUgb2YgdGltZVxuICBpZiAobGF5ZXIucmVwbGFjZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVsZSkge1xuICAgIGlmIChoYXNJZFtlbGUuaWQoKV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlc1EucHVzaChlbGUpO1xuICAgIGhhc0lkW2VsZS5pZCgpXSA9IHRydWU7XG4gIH1cbiAgaWYgKGxheWVyLnJlcXMpIHtcbiAgICBsYXllci5yZXFzKys7XG4gICAgcS51cGRhdGVJdGVtKGxheWVyKTtcbiAgfSBlbHNlIHtcbiAgICBsYXllci5yZXFzID0gMTtcbiAgICBxLnB1c2gobGF5ZXIpO1xuICB9XG59O1xuTFRDcC5kZXF1ZXVlID0gZnVuY3Rpb24gKHB4UmF0aW8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYubGF5ZXJzUXVldWU7XG4gIHZhciBkZXFkID0gW107XG4gIHZhciBlbGVEZXFzID0gMDtcbiAgd2hpbGUgKGVsZURlcXMgPCBtYXhEZXFTaXplKSB7XG4gICAgaWYgKHEuc2l6ZSgpID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGxheWVyID0gcS5wZWVrKCk7XG5cbiAgICAvLyBpZiBhIGxheWVyIGhhcyBiZWVuIG9yIHdpbGwgYmUgcmVwbGFjZWQsIHRoZW4gZG9uJ3Qgd2FzdGUgdGltZSB3aXRoIGl0XG4gICAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgICAvLyBsb2coJ2xheWVyICVzIGluIHF1ZXVlIHNraXBwZWQgYi9jIGl0IGFscmVhZHkgaGFzIGEgcmVwbGFjZW1lbnQnLCBsYXllci5pZCk7XG4gICAgICBxLnBvcCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhIHJlcGxhY2VtZW50IGxheWVyIHRoYXQgaGFzIGJlZW4gc3VwZXJjZWRlZCwgdGhlbiBmb3JnZXQgaXRcbiAgICBpZiAobGF5ZXIucmVwbGFjZXMgJiYgbGF5ZXIgIT09IGxheWVyLnJlcGxhY2VzLnJlcGxhY2VtZW50KSB7XG4gICAgICAvLyBsb2coJ2xheWVyIGlzIG5vIGxvbmdlciB0aGUgbW9zdCB1cHRvZGF0ZSByZXBsYWNlbWVudDsgZGVxdWV1ZWQnLCBsYXllci5pZClcbiAgICAgIHEucG9wKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICAgIC8vIGxvZygncmVwbGFjZW1lbnQgbGF5ZXIgJXMgaXMgaW52YWxpZDsgZGVxdWV1ZWQnLCBsYXllci5pZCk7XG4gICAgICBxLnBvcCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBlbGUgPSBsYXllci5lbGVzUXVldWUuc2hpZnQoKTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICAvLyBsb2coJ2RlcXVldWUgbGF5ZXIgJXMnLCBsYXllci5pZCk7XG5cbiAgICAgIHNlbGYuZHJhd0VsZUluTGF5ZXIobGF5ZXIsIGVsZSwgbGF5ZXIubGV2ZWwsIHB4UmF0aW8pO1xuICAgICAgZWxlRGVxcysrO1xuICAgIH1cbiAgICBpZiAoZGVxZC5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHdlIG5lZWQgb25seSBvbmUgZW50cnkgaW4gZGVxZCB0byBxdWV1ZSByZWRyYXdpbmcgZXRjXG4gICAgICBkZXFkLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGxheWVyIGhhcyBhbGwgaXRzIGVsZXMgZG9uZSwgdGhlbiByZW1vdmUgZnJvbSB0aGUgcXVldWVcbiAgICBpZiAobGF5ZXIuZWxlc1F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcS5wb3AoKTtcbiAgICAgIGxheWVyLnJlcXMgPSAwO1xuXG4gICAgICAvLyBsb2coJ2RlcXVldWUgb2YgbGF5ZXIgJXMgY29tcGxldGUnLCBsYXllci5pZCk7XG5cbiAgICAgIC8vIHdoZW4gYSByZXBsYWNlbWVudCBsYXllciBpcyBkZXF1ZXVlZCwgaXQgcmVwbGFjZXMgdGhlIG9sZCBsYXllciBpbiB0aGUgbGV2ZWxcbiAgICAgIGlmIChsYXllci5yZXBsYWNlcykge1xuICAgICAgICBzZWxmLmFwcGx5TGF5ZXJSZXBsYWNlbWVudChsYXllcik7XG4gICAgICB9XG4gICAgICBzZWxmLnJlcXVlc3RSZWRyYXcoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlcWQ7XG59O1xuTFRDcC5hcHBseUxheWVyUmVwbGFjZW1lbnQgPSBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgbGF5ZXJzSW5MZXZlbCA9IHNlbGYubGF5ZXJzQnlMZXZlbFtsYXllci5sZXZlbF07XG4gIHZhciByZXBsYWNlZCA9IGxheWVyLnJlcGxhY2VzO1xuICB2YXIgaW5kZXggPSBsYXllcnNJbkxldmVsLmluZGV4T2YocmVwbGFjZWQpO1xuXG4gIC8vIGlmIHRoZSByZXBsYWNlZCBsYXllciBpcyBub3QgaW4gdGhlIGFjdGl2ZSBsaXN0IGZvciB0aGUgbGV2ZWwsIHRoZW4gcmVwbGFjaW5nXG4gIC8vIHJlZnMgd291bGQgYmUgYSBtaXN0YWtlIChpLmUuIG92ZXJ3cml0aW5nIHRoZSB0cnVlIGFjdGl2ZSBsYXllcilcbiAgaWYgKGluZGV4IDwgMCB8fCByZXBsYWNlZC5pbnZhbGlkKSB7XG4gICAgLy8gbG9nKCdyZXBsYWNlbWVudCBsYXllciB3b3VsZCBoYXZlIG5vIGVmZmVjdCcsIGxheWVyLmlkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGF5ZXJzSW5MZXZlbFtpbmRleF0gPSBsYXllcjsgLy8gcmVwbGFjZSBsZXZlbCByZWZcblxuICAvLyByZXBsYWNlIHJlZnMgaW4gZWxlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVyLmVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3AgPSBsYXllci5lbGVzW2ldLl9wcml2YXRlO1xuICAgIHZhciBjYWNoZSA9IF9wLmltZ0xheWVyQ2FjaGVzID0gX3AuaW1nTGF5ZXJDYWNoZXMgfHwge307XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICBjYWNoZVtsYXllci5sZXZlbF0gPSBsYXllcjtcbiAgICB9XG4gIH1cblxuICAvLyBsb2coJ2FwcGx5IHJlcGxhY2VtZW50IGxheWVyICVzIG92ZXIgJXMnLCBsYXllci5pZCwgcmVwbGFjZWQuaWQpO1xuXG4gIHNlbGYucmVxdWVzdFJlZHJhdygpO1xufTtcbkxUQ3AucmVxdWVzdFJlZHJhdyA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IHRoaXMucmVuZGVyZXI7XG4gIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgci5yZWRyYXcoKTtcbn0sIDEwMCk7XG5MVENwLnNldHVwRGVxdWV1ZWluZyA9IGRlZnMuc2V0dXBEZXF1ZXVlaW5nKHtcbiAgZGVxUmVkcmF3VGhyZXNob2xkOiBkZXFSZWRyYXdUaHJlc2hvbGQsXG4gIGRlcUNvc3Q6IGRlcUNvc3QsXG4gIGRlcUF2Z0Nvc3Q6IGRlcUF2Z0Nvc3QsXG4gIGRlcU5vRHJhd0Nvc3Q6IGRlcU5vRHJhd0Nvc3QsXG4gIGRlcUZhc3RDb3N0OiBkZXFGYXN0Q29zdCxcbiAgZGVxOiBmdW5jdGlvbiBkZXEoc2VsZiwgcHhSYXRpbykge1xuICAgIHJldHVybiBzZWxmLmRlcXVldWUocHhSYXRpbyk7XG4gIH0sXG4gIG9uRGVxZDogbm9vcCQxLFxuICBzaG91bGRSZWRyYXc6IHRydWVpZnksXG4gIHByaW9yaXR5OiBmdW5jdGlvbiBwcmlvcml0eShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXE7XG4gIH1cbn0pO1xuXG52YXIgQ1JwJGEgPSB7fTtcbnZhciBpbXBsO1xuZnVuY3Rpb24gcG9seWdvbihjb250ZXh0LCBwb2ludHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHQgPSBwb2ludHNbaV07XG4gICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHRyaWFuZ2xlQmFja2N1cnZlKGNvbnRleHQsIHBvaW50cywgY29udHJvbFBvaW50KSB7XG4gIHZhciBmaXJzdFB0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHBvaW50c1tpXTtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgZmlyc3RQdCA9IHB0O1xuICAgIH1cbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBmaXJzdFB0LngsIGZpcnN0UHQueSk7XG59XG5mdW5jdGlvbiB0cmlhbmdsZVRlZShjb250ZXh0LCB0cmlhbmdsZVBvaW50cywgdGVlUG9pbnRzKSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgdmFyIHRyaVB0cyA9IHRyaWFuZ2xlUG9pbnRzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaVB0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHRyaVB0c1tpXTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxuICB2YXIgdGVlUHRzID0gdGVlUG9pbnRzO1xuICB2YXIgZmlyc3RUZWVQdCA9IHRlZVBvaW50c1swXTtcbiAgY29udGV4dC5tb3ZlVG8oZmlyc3RUZWVQdC54LCBmaXJzdFRlZVB0LnkpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHRlZVB0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHRlZVB0c1tpXTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxuICBpZiAoY29udGV4dC5jbG9zZVBhdGgpIHtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59XG5mdW5jdGlvbiBjaXJjbGVUcmlhbmdsZShjb250ZXh0LCB0cmlhbmdsZVBvaW50cywgcngsIHJ5LCByKSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgY29udGV4dC5hcmMocngsIHJ5LCByLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xuICB2YXIgdHJpUHRzID0gdHJpYW5nbGVQb2ludHM7XG4gIHZhciBmaXJzdFRyUHQgPSB0cmlQdHNbMF07XG4gIGNvbnRleHQubW92ZVRvKGZpcnN0VHJQdC54LCBmaXJzdFRyUHQueSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpUHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHB0ID0gdHJpUHRzW2ldO1xuICAgIGNvbnRleHQubGluZVRvKHB0LngsIHB0LnkpO1xuICB9XG4gIGlmIChjb250ZXh0LmNsb3NlUGF0aCkge1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNpcmNsZShjb250ZXh0LCByeCwgcnksIHIpIHtcbiAgY29udGV4dC5hcmMocngsIHJ5LCByLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xufVxuQ1JwJGEuYXJyb3dTaGFwZUltcGwgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gKGltcGwgfHwgKGltcGwgPSB7XG4gICAgJ3BvbHlnb24nOiBwb2x5Z29uLFxuICAgICd0cmlhbmdsZS1iYWNrY3VydmUnOiB0cmlhbmdsZUJhY2tjdXJ2ZSxcbiAgICAndHJpYW5nbGUtdGVlJzogdHJpYW5nbGVUZWUsXG4gICAgJ2NpcmNsZS10cmlhbmdsZSc6IGNpcmNsZVRyaWFuZ2xlLFxuICAgICd0cmlhbmdsZS1jcm9zcyc6IHRyaWFuZ2xlVGVlLFxuICAgICdjaXJjbGUnOiBjaXJjbGVcbiAgfSkpW25hbWVdO1xufTtcblxudmFyIENScCQ5ID0ge307XG5DUnAkOS5kcmF3RWxlbWVudCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIHNob3dMYWJlbCwgc2hvd092ZXJsYXksIHNob3dPcGFjaXR5KSB7XG4gIHZhciByID0gdGhpcztcbiAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgIHIuZHJhd05vZGUoY29udGV4dCwgZWxlLCBzaGlmdFRvT3JpZ2luV2l0aEJiLCBzaG93TGFiZWwsIHNob3dPdmVybGF5LCBzaG93T3BhY2l0eSk7XG4gIH0gZWxzZSB7XG4gICAgci5kcmF3RWRnZShjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIHNob3dMYWJlbCwgc2hvd092ZXJsYXksIHNob3dPcGFjaXR5KTtcbiAgfVxufTtcbkNScCQ5LmRyYXdFbGVtZW50T3ZlcmxheSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgci5kcmF3Tm9kZU92ZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgfSBlbHNlIHtcbiAgICByLmRyYXdFZGdlT3ZlcmxheShjb250ZXh0LCBlbGUpO1xuICB9XG59O1xuQ1JwJDkuZHJhd0VsZW1lbnRVbmRlcmxheSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgci5kcmF3Tm9kZVVuZGVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH0gZWxzZSB7XG4gICAgci5kcmF3RWRnZVVuZGVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH1cbn07XG5DUnAkOS5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24gPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBlbGVUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldFJvdGF0aW9uLCBnZXRPcGFjaXR5KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGJiID0gZWxlVHhyQ2FjaGUuZ2V0Qm91bmRpbmdCb3goZWxlKTtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZ25vcmUgemVybyBzaXplIGNhc2VcblxuICB2YXIgZWxlQ2FjaGUgPSBlbGVUeHJDYWNoZS5nZXRFbGVtZW50KGVsZSwgYmIsIHB4UmF0aW8sIGx2bCwgcmVhc29uKTtcbiAgaWYgKGVsZUNhY2hlICE9IG51bGwpIHtcbiAgICB2YXIgb3BhY2l0eSA9IGdldE9wYWNpdHkociwgZWxlKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGhldGEgPSBnZXRSb3RhdGlvbihyLCBlbGUpO1xuICAgIHZhciB4MSA9IGJiLngxLFxuICAgICAgeTEgPSBiYi55MSxcbiAgICAgIHcgPSBiYi53LFxuICAgICAgaCA9IGJiLmg7XG4gICAgdmFyIHgsIHksIHN4LCBzeSwgc21vb3RoO1xuICAgIGlmICh0aGV0YSAhPT0gMCkge1xuICAgICAgdmFyIHJvdFB0ID0gZWxlVHhyQ2FjaGUuZ2V0Um90YXRpb25Qb2ludChlbGUpO1xuICAgICAgc3ggPSByb3RQdC54O1xuICAgICAgc3kgPSByb3RQdC55O1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoc3gsIHN5KTtcbiAgICAgIGNvbnRleHQucm90YXRlKHRoZXRhKTtcbiAgICAgIHNtb290aCA9IHIuZ2V0SW1nU21vb3RoaW5nKGNvbnRleHQpO1xuICAgICAgaWYgKCFzbW9vdGgpIHtcbiAgICAgICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgb2ZmID0gZWxlVHhyQ2FjaGUuZ2V0Um90YXRpb25PZmZzZXQoZWxlKTtcbiAgICAgIHggPSBvZmYueDtcbiAgICAgIHkgPSBvZmYueTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHgxO1xuICAgICAgeSA9IHkxO1xuICAgIH1cbiAgICB2YXIgb2xkR2xvYmFsQWxwaGE7XG4gICAgaWYgKG9wYWNpdHkgIT09IDEpIHtcbiAgICAgIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvbGRHbG9iYWxBbHBoYSAqIG9wYWNpdHk7XG4gICAgfVxuICAgIGNvbnRleHQuZHJhd0ltYWdlKGVsZUNhY2hlLnRleHR1cmUuY2FudmFzLCBlbGVDYWNoZS54LCAwLCBlbGVDYWNoZS53aWR0aCwgZWxlQ2FjaGUuaGVpZ2h0LCB4LCB5LCB3LCBoKTtcbiAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhO1xuICAgIH1cbiAgICBpZiAodGhldGEgIT09IDApIHtcbiAgICAgIGNvbnRleHQucm90YXRlKC10aGV0YSk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc3gsIC1zeSk7XG4gICAgICBpZiAoIXNtb290aCkge1xuICAgICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZVR4ckNhY2hlLmRyYXdFbGVtZW50KGNvbnRleHQsIGVsZSk7IC8vIGRpcmVjdCBkcmF3IGZhbGxiYWNrXG4gIH1cbn07XG5cbnZhciBnZXRaZXJvUm90YXRpb24gPSBmdW5jdGlvbiBnZXRaZXJvUm90YXRpb24oKSB7XG4gIHJldHVybiAwO1xufTtcbnZhciBnZXRMYWJlbFJvdGF0aW9uID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvbihyLCBlbGUpIHtcbiAgcmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGVsZSwgbnVsbCk7XG59O1xudmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICByZXR1cm4gci5nZXRUZXh0QW5nbGUoZWxlLCAnc291cmNlJyk7XG59O1xudmFyIGdldFRhcmdldExhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICByZXR1cm4gci5nZXRUZXh0QW5nbGUoZWxlLCAndGFyZ2V0Jyk7XG59O1xudmFyIGdldE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRPcGFjaXR5KHIsIGVsZSkge1xuICByZXR1cm4gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKTtcbn07XG52YXIgZ2V0VGV4dE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRUZXh0T3BhY2l0eShlLCBlbGUpIHtcbiAgcmV0dXJuIGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnBmVmFsdWUgKiBlbGUuZWZmZWN0aXZlT3BhY2l0eSgpO1xufTtcbkNScCQ5LmRyYXdDYWNoZWRFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50LCBsdmwsIHJlcXVlc3RIaWdoUXVhbGl0eSkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBfciRkYXRhID0gci5kYXRhLFxuICAgIGVsZVR4ckNhY2hlID0gX3IkZGF0YS5lbGVUeHJDYWNoZSxcbiAgICBsYmxUeHJDYWNoZSA9IF9yJGRhdGEubGJsVHhyQ2FjaGUsXG4gICAgc2xiVHhyQ2FjaGUgPSBfciRkYXRhLnNsYlR4ckNhY2hlLFxuICAgIHRsYlR4ckNhY2hlID0gX3IkZGF0YS50bGJUeHJDYWNoZTtcbiAgdmFyIGJiID0gZWxlLmJvdW5kaW5nQm94KCk7XG4gIHZhciByZWFzb24gPSByZXF1ZXN0SGlnaFF1YWxpdHkgPT09IHRydWUgPyBlbGVUeHJDYWNoZS5yZWFzb25zLmhpZ2hRdWFsaXR5IDogbnVsbDtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCB8fCAhZWxlLnZpc2libGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWV4dGVudCB8fCBib3VuZGluZ0JveGVzSW50ZXJzZWN0KGJiLCBleHRlbnQpKSB7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgYmFkTGluZSA9IGVsZS5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZTtcbiAgICByLmRyYXdFbGVtZW50VW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbihjb250ZXh0LCBlbGUsIGVsZVR4ckNhY2hlLCBweFJhdGlvLCBsdmwsIHJlYXNvbiwgZ2V0WmVyb1JvdGF0aW9uLCBnZXRPcGFjaXR5KTtcbiAgICBpZiAoIWlzRWRnZSB8fCAhYmFkTGluZSkge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oY29udGV4dCwgZWxlLCBsYmxUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldExhYmVsUm90YXRpb24sIGdldFRleHRPcGFjaXR5KTtcbiAgICB9XG4gICAgaWYgKGlzRWRnZSAmJiAhYmFkTGluZSkge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oY29udGV4dCwgZWxlLCBzbGJUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldFNvdXJjZUxhYmVsUm90YXRpb24sIGdldFRleHRPcGFjaXR5KTtcbiAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGNvbnRleHQsIGVsZSwgdGxiVHhyQ2FjaGUsIHB4UmF0aW8sIGx2bCwgcmVhc29uLCBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uLCBnZXRUZXh0T3BhY2l0eSk7XG4gICAgfVxuICAgIHIuZHJhd0VsZW1lbnRPdmVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH1cbn07XG5DUnAkOS5kcmF3RWxlbWVudHMgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlcykge1xuICB2YXIgciA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlKTtcbiAgfVxufTtcbkNScCQ5LmRyYXdDYWNoZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50KTtcbiAgfVxufTtcbkNScCQ5LmRyYXdDYWNoZWROb2RlcyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICBpZiAoIWVsZS5pc05vZGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnQoY29udGV4dCwgZWxlLCBweFJhdGlvLCBleHRlbnQpO1xuICB9XG59O1xuQ1JwJDkuZHJhd0xheWVyZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgbGF5ZXJzID0gci5kYXRhLmx5clR4ckNhY2hlLmdldExheWVycyhlbGVzLCBweFJhdGlvKTtcbiAgaWYgKGxheWVycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgICB2YXIgYmIgPSBsYXllci5iYjtcbiAgICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmRyYXdJbWFnZShsYXllci5jYW52YXMsIGJiLngxLCBiYi55MSwgYmIudywgYmIuaCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGZhbGwgYmFjayBvbiBwbGFpbiBjYWNoaW5nIGlmIG5vIGxheWVyc1xuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRzKGNvbnRleHQsIGVsZXMsIHB4UmF0aW8sIGV4dGVudCk7XG4gIH1cbn07XG5cbnZhciBDUnAkOCA9IHt9O1xuQ1JwJDguZHJhd0VkZ2UgPSBmdW5jdGlvbiAoY29udGV4dCwgZWRnZSwgc2hpZnRUb09yaWdpbldpdGhCYikge1xuICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgc2hvdWxkRHJhd092ZXJsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBzaG91bGREcmF3T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaWYgYmV6aWVyIGN0cmwgcHRzIGNhbiBub3QgYmUgY2FsY3VsYXRlZCwgdGhlbiBkaWVcbiAgaWYgKHJzLmJhZExpbmUgfHwgcnMuYWxscHRzID09IG51bGwgfHwgaXNOYU4ocnMuYWxscHRzWzBdKSkge1xuICAgIC8vIGlzTmFOIGluIGNhc2UgZWRnZSBpcyBpbXBvc3NpYmxlIGFuZCBicm93c2VyIGJ1Z3MgKGUuZy4gc2FmYXJpKVxuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuICB2YXIgb3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gZWRnZS5wc3R5bGUoJ29wYWNpdHknKS52YWx1ZSA6IDE7XG4gIHZhciBsaW5lT3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gZWRnZS5wc3R5bGUoJ2xpbmUtb3BhY2l0eScpLnZhbHVlIDogMTtcbiAgdmFyIGN1cnZlU3R5bGUgPSBlZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgdmFyIGxpbmVTdHlsZSA9IGVkZ2UucHN0eWxlKCdsaW5lLXN0eWxlJykudmFsdWU7XG4gIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICB2YXIgbGluZUNhcCA9IGVkZ2UucHN0eWxlKCdsaW5lLWNhcCcpLnZhbHVlO1xuICB2YXIgbGluZU91dGxpbmVXaWR0aCA9IGVkZ2UucHN0eWxlKCdsaW5lLW91dGxpbmUtd2lkdGgnKS52YWx1ZTtcbiAgdmFyIGxpbmVPdXRsaW5lQ29sb3IgPSBlZGdlLnBzdHlsZSgnbGluZS1vdXRsaW5lLWNvbG9yJykudmFsdWU7XG4gIHZhciBlZmZlY3RpdmVMaW5lT3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgLy8gc2VwYXJhdGUgYXJyb3cgb3BhY2l0eSB3b3VsZCByZXF1aXJlIGFycm93LW9wYWNpdHkgcHJvcGVydHlcbiAgdmFyIGVmZmVjdGl2ZUFycm93T3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgdmFyIGRyYXdMaW5lID0gZnVuY3Rpb24gZHJhd0xpbmUoKSB7XG4gICAgdmFyIHN0cm9rZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVmZmVjdGl2ZUxpbmVPcGFjaXR5O1xuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnc3RyYWlnaHQtdHJpYW5nbGUnKSB7XG4gICAgICByLmVsZVN0cm9rZVN0eWxlKGNvbnRleHQsIGVkZ2UsIHN0cm9rZU9wYWNpdHkpO1xuICAgICAgci5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlZGdlLCBjb250ZXh0LCBycy5hbGxwdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGVkZ2VXaWR0aDtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IGxpbmVDYXA7XG4gICAgICByLmVsZVN0cm9rZVN0eWxlKGNvbnRleHQsIGVkZ2UsIHN0cm9rZU9wYWNpdHkpO1xuICAgICAgci5kcmF3RWRnZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzLCBsaW5lU3R5bGUpO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRyYXdMaW5lT3V0bGluZSA9IGZ1bmN0aW9uIGRyYXdMaW5lT3V0bGluZSgpIHtcbiAgICB2YXIgc3Ryb2tlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZWZmZWN0aXZlTGluZU9wYWNpdHk7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSBlZGdlV2lkdGggKyBsaW5lT3V0bGluZVdpZHRoO1xuICAgIGNvbnRleHQubGluZUNhcCA9IGxpbmVDYXA7XG4gICAgaWYgKGxpbmVPdXRsaW5lV2lkdGggPiAwKSB7XG4gICAgICByLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgbGluZU91dGxpbmVDb2xvclswXSwgbGluZU91dGxpbmVDb2xvclsxXSwgbGluZU91dGxpbmVDb2xvclsyXSwgc3Ryb2tlT3BhY2l0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIG5vdCBkcmF3IGFueSBsaW5lT3V0bGluZVxuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodC10cmlhbmdsZScpIHtcbiAgICAgIHIuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5kcmF3RWRnZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzLCBsaW5lU3R5bGUpO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRyYXdPdmVybGF5ID0gZnVuY3Rpb24gZHJhd092ZXJsYXkoKSB7XG4gICAgaWYgKCFzaG91bGREcmF3T3ZlcmxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByLmRyYXdFZGdlT3ZlcmxheShjb250ZXh0LCBlZGdlKTtcbiAgfTtcbiAgdmFyIGRyYXdVbmRlcmxheSA9IGZ1bmN0aW9uIGRyYXdVbmRlcmxheSgpIHtcbiAgICBpZiAoIXNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHIuZHJhd0VkZ2VVbmRlcmxheShjb250ZXh0LCBlZGdlKTtcbiAgfTtcbiAgdmFyIGRyYXdBcnJvd3MgPSBmdW5jdGlvbiBkcmF3QXJyb3dzKCkge1xuICAgIHZhciBhcnJvd09wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVmZmVjdGl2ZUFycm93T3BhY2l0eTtcbiAgICByLmRyYXdBcnJvd2hlYWRzKGNvbnRleHQsIGVkZ2UsIGFycm93T3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3VGV4dCA9IGZ1bmN0aW9uIGRyYXdUZXh0KCkge1xuICAgIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVkZ2UsIG51bGwsIGRyYXdMYWJlbCk7XG4gIH07XG4gIGNvbnRleHQubGluZUpvaW4gPSAncm91bmQnO1xuICB2YXIgZ2hvc3QgPSBlZGdlLnBzdHlsZSgnZ2hvc3QnKS52YWx1ZSA9PT0gJ3llcyc7XG4gIGlmIChnaG9zdCkge1xuICAgIHZhciBneCA9IGVkZ2UucHN0eWxlKCdnaG9zdC1vZmZzZXQteCcpLnBmVmFsdWU7XG4gICAgdmFyIGd5ID0gZWRnZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICB2YXIgZ2hvc3RPcGFjaXR5ID0gZWRnZS5wc3R5bGUoJ2dob3N0LW9wYWNpdHknKS52YWx1ZTtcbiAgICB2YXIgZWZmZWN0aXZlR2hvc3RPcGFjaXR5ID0gZWZmZWN0aXZlTGluZU9wYWNpdHkgKiBnaG9zdE9wYWNpdHk7XG4gICAgY29udGV4dC50cmFuc2xhdGUoZ3gsIGd5KTtcbiAgICBkcmF3TGluZShlZmZlY3RpdmVHaG9zdE9wYWNpdHkpO1xuICAgIGRyYXdBcnJvd3MoZWZmZWN0aXZlR2hvc3RPcGFjaXR5KTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtZ3gsIC1neSk7XG4gIH0gZWxzZSB7XG4gICAgZHJhd0xpbmVPdXRsaW5lKCk7XG4gIH1cbiAgZHJhd1VuZGVybGF5KCk7XG4gIGRyYXdMaW5lKCk7XG4gIGRyYXdBcnJvd3MoKTtcbiAgZHJhd092ZXJsYXkoKTtcbiAgZHJhd1RleHQoKTtcbiAgaWYgKHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShiYi54MSwgYmIueTEpO1xuICB9XG59O1xudmFyIGRyYXdFZGdlT3ZlcmxheVVuZGVybGF5ID0gZnVuY3Rpb24gZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkob3ZlcmxheU9yVW5kZXJsYXkpIHtcbiAgaWYgKCFbJ292ZXJsYXknLCAndW5kZXJsYXknXS5pbmNsdWRlcyhvdmVybGF5T3JVbmRlcmxheSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUnKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRleHQsIGVkZ2UpIHtcbiAgICBpZiAoIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvcGFjaXR5ID0gZWRnZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLW9wYWNpdHlcIikpLnZhbHVlO1xuICAgIGlmIChvcGFjaXR5ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgdXNlUGF0aHMgPSByLnVzZVBhdGhzKCk7XG4gICAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgcGFkZGluZyA9IGVkZ2UucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1wYWRkaW5nXCIpKS5wZlZhbHVlO1xuICAgIHZhciB3aWR0aCA9IDIgKiBwYWRkaW5nO1xuICAgIHZhciBjb2xvciA9IGVkZ2UucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1jb2xvclwiKSkudmFsdWU7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWxmJyAmJiAhdXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9ICdidXR0JztcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ3JvdW5kJztcbiAgICB9XG4gICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgIHIuZHJhd0VkZ2VQYXRoKGVkZ2UsIGNvbnRleHQsIHJzLmFsbHB0cywgJ3NvbGlkJyk7XG4gIH07XG59O1xuQ1JwJDguZHJhd0VkZ2VPdmVybGF5ID0gZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkoJ292ZXJsYXknKTtcbkNScCQ4LmRyYXdFZGdlVW5kZXJsYXkgPSBkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSgndW5kZXJsYXknKTtcbkNScCQ4LmRyYXdFZGdlUGF0aCA9IGZ1bmN0aW9uIChlZGdlLCBjb250ZXh0LCBwdHMsIHR5cGUpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGNhbnZhc0N4dCA9IGNvbnRleHQ7XG4gIHZhciBwYXRoO1xuICB2YXIgcGF0aENhY2hlSGl0ID0gZmFsc2U7XG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKTtcbiAgdmFyIGxpbmVEYXNoUGF0dGVybiA9IGVkZ2UucHN0eWxlKCdsaW5lLWRhc2gtcGF0dGVybicpLnBmVmFsdWU7XG4gIHZhciBsaW5lRGFzaE9mZnNldCA9IGVkZ2UucHN0eWxlKCdsaW5lLWRhc2gtb2Zmc2V0JykucGZWYWx1ZTtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgdmFyIHBhdGhDYWNoZUtleSA9IHB0cy5qb2luKCckJyk7XG4gICAgdmFyIGtleU1hdGNoZXMgPSBycy5wYXRoQ2FjaGVLZXkgJiYgcnMucGF0aENhY2hlS2V5ID09PSBwYXRoQ2FjaGVLZXk7XG4gICAgaWYgKGtleU1hdGNoZXMpIHtcbiAgICAgIHBhdGggPSBjb250ZXh0ID0gcnMucGF0aENhY2hlO1xuICAgICAgcGF0aENhY2hlSGl0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGNvbnRleHQgPSBuZXcgUGF0aDJEKCk7XG4gICAgICBycy5wYXRoQ2FjaGVLZXkgPSBwYXRoQ2FjaGVLZXk7XG4gICAgICBycy5wYXRoQ2FjaGUgPSBwYXRoO1xuICAgIH1cbiAgfVxuICBpZiAoY2FudmFzQ3h0LnNldExpbmVEYXNoKSB7XG4gICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICBjYW52YXNDeHQuc2V0TGluZURhc2goWzEsIDFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXNoZWQnOlxuICAgICAgICBjYW52YXNDeHQuc2V0TGluZURhc2gobGluZURhc2hQYXR0ZXJuKTtcbiAgICAgICAgY2FudmFzQ3h0LmxpbmVEYXNoT2Zmc2V0ID0gbGluZURhc2hPZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc29saWQnOlxuICAgICAgICBjYW52YXNDeHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFwYXRoQ2FjaGVIaXQgJiYgIXJzLmJhZExpbmUpIHtcbiAgICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgfVxuICAgIGNvbnRleHQubW92ZVRvKHB0c1swXSwgcHRzWzFdKTtcbiAgICBzd2l0Y2ggKHJzLmVkZ2VUeXBlKSB7XG4gICAgICBjYXNlICdiZXppZXInOlxuICAgICAgY2FzZSAnc2VsZic6XG4gICAgICBjYXNlICdjb21wb3VuZCc6XG4gICAgICBjYXNlICdtdWx0aWJlemllcic6XG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpICsgMyA8IHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RyYWlnaHQnOlxuICAgICAgY2FzZSAnaGF5c3RhY2snOlxuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pICsgMSA8IHB0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwdHNbX2ldLCBwdHNbX2kgKyAxXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWdtZW50cyc6XG4gICAgICAgIGlmIChycy5pc1JvdW5kKSB7XG4gICAgICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHJzLnJvdW5kQ29ybmVycyksXG4gICAgICAgICAgICBfc3RlcDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgdmFyIGNvcm5lciA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBkcmF3UHJlcGFyZWRSb3VuZENvcm5lcihjb250ZXh0LCBjb3JuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGV4dC5saW5lVG8ocHRzW3B0cy5sZW5ndGggLSAyXSwgcHRzW3B0cy5sZW5ndGggLSAxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMjsgX2kyICsgMSA8IHB0cy5sZW5ndGg7IF9pMiArPSAyKSB7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwdHNbX2kyXSwgcHRzW19pMiArIDFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGNvbnRleHQgPSBjYW52YXNDeHQ7XG4gIGlmICh1c2VQYXRocykge1xuICAgIGNvbnRleHQuc3Ryb2tlKHBhdGgpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gIH1cblxuICAvLyByZXNldCBhbnkgbGluZSBkYXNoZXNcbiAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgfVxufTtcbkNScCQ4LmRyYXdFZGdlVHJpYW5nbGVQYXRoID0gZnVuY3Rpb24gKGVkZ2UsIGNvbnRleHQsIHB0cykge1xuICAvLyB1c2UgbGluZSBzdHJva2Ugc3R5bGUgZm9yIHRyaWFuZ2xlIGZpbGwgc3R5bGVcbiAgY29udGV4dC5maWxsU3R5bGUgPSBjb250ZXh0LnN0cm9rZVN0eWxlO1xuICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgKyAxIDwgcHRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHZlY3RvciA9IFtwdHNbaSArIDJdIC0gcHRzW2ldLCBwdHNbaSArIDNdIC0gcHRzW2kgKyAxXV07XG4gICAgdmFyIGxlbmd0aCA9IE1hdGguc3FydCh2ZWN0b3JbMF0gKiB2ZWN0b3JbMF0gKyB2ZWN0b3JbMV0gKiB2ZWN0b3JbMV0pO1xuICAgIHZhciBub3JtYWwgPSBbdmVjdG9yWzFdIC8gbGVuZ3RoLCAtdmVjdG9yWzBdIC8gbGVuZ3RoXTtcbiAgICB2YXIgdHJpYW5nbGVIZWFkID0gW25vcm1hbFswXSAqIGVkZ2VXaWR0aCAvIDIsIG5vcm1hbFsxXSAqIGVkZ2VXaWR0aCAvIDJdO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5tb3ZlVG8ocHRzW2ldIC0gdHJpYW5nbGVIZWFkWzBdLCBwdHNbaSArIDFdIC0gdHJpYW5nbGVIZWFkWzFdKTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdHNbaV0gKyB0cmlhbmdsZUhlYWRbMF0sIHB0c1tpICsgMV0gKyB0cmlhbmdsZUhlYWRbMV0pO1xuICAgIGNvbnRleHQubGluZVRvKHB0c1tpICsgMl0sIHB0c1tpICsgM10pO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH1cbn07XG5DUnAkOC5kcmF3QXJyb3doZWFkcyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlZGdlLCBvcGFjaXR5KSB7XG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBpc0hheXN0YWNrID0gcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjayc7XG4gIGlmICghaXNIYXlzdGFjaykge1xuICAgIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAnc291cmNlJywgcnMuYXJyb3dTdGFydFgsIHJzLmFycm93U3RhcnRZLCBycy5zcmNBcnJvd0FuZ2xlLCBvcGFjaXR5KTtcbiAgfVxuICB0aGlzLmRyYXdBcnJvd2hlYWQoY29udGV4dCwgZWRnZSwgJ21pZC10YXJnZXQnLCBycy5taWRYLCBycy5taWRZLCBycy5taWR0Z3RBcnJvd0FuZ2xlLCBvcGFjaXR5KTtcbiAgdGhpcy5kcmF3QXJyb3doZWFkKGNvbnRleHQsIGVkZ2UsICdtaWQtc291cmNlJywgcnMubWlkWCwgcnMubWlkWSwgcnMubWlkc3JjQXJyb3dBbmdsZSwgb3BhY2l0eSk7XG4gIGlmICghaXNIYXlzdGFjaykge1xuICAgIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAndGFyZ2V0JywgcnMuYXJyb3dFbmRYLCBycy5hcnJvd0VuZFksIHJzLnRndEFycm93QW5nbGUsIG9wYWNpdHkpO1xuICB9XG59O1xuQ1JwJDguZHJhd0Fycm93aGVhZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlZGdlLCBwcmVmaXgsIHgsIHksIGFuZ2xlLCBvcGFjaXR5KSB7XG4gIGlmIChpc05hTih4KSB8fCB4ID09IG51bGwgfHwgaXNOYU4oeSkgfHwgeSA9PSBudWxsIHx8IGlzTmFOKGFuZ2xlKSB8fCBhbmdsZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGFycm93U2hhcGUgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LXNoYXBlJykudmFsdWU7XG4gIGlmIChhcnJvd1NoYXBlID09PSAnbm9uZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGFycm93Q2xlYXJGaWxsID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1maWxsJykudmFsdWUgPT09ICdob2xsb3cnID8gJ2JvdGgnIDogJ2ZpbGxlZCc7XG4gIHZhciBhcnJvd0ZpbGwgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LWZpbGwnKS52YWx1ZTtcbiAgdmFyIGVkZ2VXaWR0aCA9IGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gIHZhciBwQXJyb3dXaWR0aCA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctYXJyb3ctd2lkdGgnKTtcbiAgdmFyIGFycm93V2lkdGggPSBwQXJyb3dXaWR0aC52YWx1ZSA9PT0gJ21hdGNoLWxpbmUnID8gZWRnZVdpZHRoIDogcEFycm93V2lkdGgucGZWYWx1ZTtcbiAgaWYgKHBBcnJvd1dpZHRoLnVuaXRzID09PSAnJScpIGFycm93V2lkdGggKj0gZWRnZVdpZHRoO1xuICB2YXIgZWRnZU9wYWNpdHkgPSBlZGdlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICBpZiAob3BhY2l0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3BhY2l0eSA9IGVkZ2VPcGFjaXR5O1xuICB9XG4gIHZhciBnY28gPSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgaWYgKG9wYWNpdHkgIT09IDEgfHwgYXJyb3dGaWxsID09PSAnaG9sbG93Jykge1xuICAgIC8vIHRoZW4gZXh0cmEgY2xlYXIgaXMgbmVlZGVkXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcbiAgICBzZWxmLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIDEpO1xuICAgIHNlbGYuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCAyNTUsIDI1NSwgMjU1LCAxKTtcbiAgICBzZWxmLmRyYXdBcnJvd1NoYXBlKGVkZ2UsIGNvbnRleHQsIGFycm93Q2xlYXJGaWxsLCBlZGdlV2lkdGgsIGFycm93U2hhcGUsIGFycm93V2lkdGgsIHgsIHksIGFuZ2xlKTtcbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgfSAvLyBvdGhlcndpc2UsIHRoZSBvcGFxdWUgYXJyb3cgY2xlYXJzIGl0IGZvciBmcmVlIDopXG5cbiAgdmFyIGNvbG9yID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1jb2xvcicpLnZhbHVlO1xuICBzZWxmLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICBzZWxmLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgb3BhY2l0eSk7XG4gIHNlbGYuZHJhd0Fycm93U2hhcGUoZWRnZSwgY29udGV4dCwgYXJyb3dGaWxsLCBlZGdlV2lkdGgsIGFycm93U2hhcGUsIGFycm93V2lkdGgsIHgsIHksIGFuZ2xlKTtcbn07XG5DUnAkOC5kcmF3QXJyb3dTaGFwZSA9IGZ1bmN0aW9uIChlZGdlLCBjb250ZXh0LCBmaWxsLCBlZGdlV2lkdGgsIHNoYXBlLCBzaGFwZVdpZHRoLCB4LCB5LCBhbmdsZSkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKSAmJiBzaGFwZSAhPT0gJ3RyaWFuZ2xlLWNyb3NzJztcbiAgdmFyIHBhdGhDYWNoZUhpdCA9IGZhbHNlO1xuICB2YXIgcGF0aDtcbiAgdmFyIGNhbnZhc0NvbnRleHQgPSBjb250ZXh0O1xuICB2YXIgdHJhbnNsYXRpb24gPSB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG4gIHZhciBzY2FsZSA9IGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlO1xuICB2YXIgc2l6ZSA9IHRoaXMuZ2V0QXJyb3dXaWR0aChlZGdlV2lkdGgsIHNjYWxlKTtcbiAgdmFyIHNoYXBlSW1wbCA9IHIuYXJyb3dTaGFwZXNbc2hhcGVdO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICB2YXIgY2FjaGUgPSByLmFycm93UGF0aENhY2hlID0gci5hcnJvd1BhdGhDYWNoZSB8fCBbXTtcbiAgICB2YXIga2V5ID0gaGFzaFN0cmluZyhzaGFwZSk7XG4gICAgdmFyIGNhY2hlZFBhdGggPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWRQYXRoICE9IG51bGwpIHtcbiAgICAgIHBhdGggPSBjb250ZXh0ID0gY2FjaGVkUGF0aDtcbiAgICAgIHBhdGhDYWNoZUhpdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSBjb250ZXh0ID0gbmV3IFBhdGgyRCgpO1xuICAgICAgY2FjaGVba2V5XSA9IHBhdGg7XG4gICAgfVxuICB9XG4gIGlmICghcGF0aENhY2hlSGl0KSB7XG4gICAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIH1cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIC8vIHN0b3JlIGluIHRoZSBwYXRoIGNhY2hlIHdpdGggdmFsdWVzIGVhc2lseSBtYW5pcHVsYXRlZCBsYXRlclxuICAgICAgc2hhcGVJbXBsLmRyYXcoY29udGV4dCwgMSwgMCwge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hhcGVJbXBsLmRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5jbG9zZVBhdGgpIHtcbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgfVxuICB9XG4gIGNvbnRleHQgPSBjYW52YXNDb250ZXh0O1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICAvLyBzZXQgdHJhbnNmb3JtIHRvIGFycm93IHBvc2l0aW9uL29yaWVudGF0aW9uXG4gICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSk7XG4gICAgY29udGV4dC5yb3RhdGUoYW5nbGUpO1xuICAgIGNvbnRleHQuc2NhbGUoc2l6ZSwgc2l6ZSk7XG4gIH1cbiAgaWYgKGZpbGwgPT09ICdmaWxsZWQnIHx8IGZpbGwgPT09ICdib3RoJykge1xuICAgIGlmICh1c2VQYXRocykge1xuICAgICAgY29udGV4dC5maWxsKHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cbiAgaWYgKGZpbGwgPT09ICdob2xsb3cnIHx8IGZpbGwgPT09ICdib3RoJykge1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gc2hhcGVXaWR0aCAvICh1c2VQYXRocyA/IHNpemUgOiAxKTtcbiAgICBjb250ZXh0LmxpbmVKb2luID0gJ21pdGVyJztcbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIH1cbiAgfVxuICBpZiAodXNlUGF0aHMpIHtcbiAgICAvLyByZXNldCB0cmFuc2Zvcm0gYnkgYXBwbHlpbmcgaW52ZXJzZVxuICAgIGNvbnRleHQuc2NhbGUoMSAvIHNpemUsIDEgLyBzaXplKTtcbiAgICBjb250ZXh0LnJvdGF0ZSgtYW5nbGUpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC14LCAteSk7XG4gIH1cbn07XG5cbnZhciBDUnAkNyA9IHt9O1xuQ1JwJDcuc2FmZURyYXdJbWFnZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBpbWcsIGl4LCBpeSwgaXcsIGloLCB4LCB5LCB3LCBoKSB7XG4gIC8vIGRldGVjdCBwcm9ibGVtYXRpYyBjYXNlcyBmb3Igb2xkIGJyb3dzZXJzIHdpdGggYmFkIGltYWdlcyAoY2hlYXBlciB0aGFuIHRyeS1jYXRjaClcbiAgaWYgKGl3IDw9IDAgfHwgaWggPD0gMCB8fCB3IDw9IDAgfHwgaCA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCBpeCwgaXksIGl3LCBpaCwgeCwgeSwgdywgaCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3YXJuKGUpO1xuICB9XG59O1xuQ1JwJDcuZHJhd0luc2NyaWJlZEltYWdlID0gZnVuY3Rpb24gKGNvbnRleHQsIGltZywgbm9kZSwgaW5kZXgsIG5vZGVPcGFjaXR5KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIHBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgdmFyIG5vZGVYID0gcG9zLng7XG4gIHZhciBub2RlWSA9IHBvcy55O1xuICB2YXIgc3R5bGVPYmogPSBub2RlLmN5KCkuc3R5bGUoKTtcbiAgdmFyIGdldEluZGV4ZWRTdHlsZSA9IHN0eWxlT2JqLmdldEluZGV4ZWRTdHlsZS5iaW5kKHN0eWxlT2JqKTtcbiAgdmFyIGZpdCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1maXQnLCAndmFsdWUnLCBpbmRleCk7XG4gIHZhciByZXBlYXQgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcmVwZWF0JywgJ3ZhbHVlJywgaW5kZXgpO1xuICB2YXIgbm9kZVcgPSBub2RlLndpZHRoKCk7XG4gIHZhciBub2RlSCA9IG5vZGUuaGVpZ2h0KCk7XG4gIHZhciBwYWRkaW5nWDIgPSBub2RlLnBhZGRpbmcoKSAqIDI7XG4gIHZhciBub2RlVFcgPSBub2RlVyArIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLCAndmFsdWUnLCBpbmRleCkgPT09ICdpbm5lcicgPyAwIDogcGFkZGluZ1gyKTtcbiAgdmFyIG5vZGVUSCA9IG5vZGVIICsgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nLCAndmFsdWUnLCBpbmRleCkgPT09ICdpbm5lcicgPyAwIDogcGFkZGluZ1gyKTtcbiAgdmFyIHJzID0gbm9kZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGNsaXAgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtY2xpcCcsICd2YWx1ZScsIGluZGV4KTtcbiAgdmFyIHNob3VsZENsaXAgPSBjbGlwID09PSAnbm9kZSc7XG4gIHZhciBpbWdPcGFjaXR5ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLCAndmFsdWUnLCBpbmRleCkgKiBub2RlT3BhY2l0eTtcbiAgdmFyIHNtb290aCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmcnLCAndmFsdWUnLCBpbmRleCk7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSBub2RlLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnZhbHVlO1xuICBpZiAoY29ybmVyUmFkaXVzICE9PSAnYXV0bycpIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgdmFyIGltZ1cgPSBpbWcud2lkdGggfHwgaW1nLmNhY2hlZFc7XG4gIHZhciBpbWdIID0gaW1nLmhlaWdodCB8fCBpbWcuY2FjaGVkSDtcblxuICAvLyB3b3JrYXJvdW5kIGZvciBicm9rZW4gYnJvd3NlcnMgbGlrZSBpZVxuICBpZiAobnVsbCA9PSBpbWdXIHx8IG51bGwgPT0gaW1nSCkge1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgaW1nVyA9IGltZy5jYWNoZWRXID0gaW1nLndpZHRoIHx8IGltZy5vZmZzZXRXaWR0aDtcbiAgICBpbWdIID0gaW1nLmNhY2hlZEggPSBpbWcuaGVpZ2h0IHx8IGltZy5vZmZzZXRIZWlnaHQ7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIH1cblxuICB2YXIgdyA9IGltZ1c7XG4gIHZhciBoID0gaW1nSDtcbiAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd2YWx1ZScsIGluZGV4KSAhPT0gJ2F1dG8nKSB7XG4gICAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd1bml0cycsIGluZGV4KSA9PT0gJyUnKSB7XG4gICAgICB3ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXdpZHRoJywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVFc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHcgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgICB9XG4gIH1cbiAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1oZWlnaHQnLCAndmFsdWUnLCBpbmRleCkgIT09ICdhdXRvJykge1xuICAgIGlmIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3VuaXRzJywgaW5kZXgpID09PSAnJScpIHtcbiAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVEg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gICAgfVxuICB9XG4gIGlmICh3ID09PSAwIHx8IGggPT09IDApIHtcbiAgICByZXR1cm47IC8vIG5vIHBvaW50IGluIGRyYXdpbmcgZW1wdHkgaW1hZ2UgKGFuZCBjaHJvbWUgaXMgYnJva2VuIGluIHRoaXMgY2FzZSlcbiAgfVxuXG4gIGlmIChmaXQgPT09ICdjb250YWluJykge1xuICAgIHZhciBzY2FsZSA9IE1hdGgubWluKG5vZGVUVyAvIHcsIG5vZGVUSCAvIGgpO1xuICAgIHcgKj0gc2NhbGU7XG4gICAgaCAqPSBzY2FsZTtcbiAgfSBlbHNlIGlmIChmaXQgPT09ICdjb3ZlcicpIHtcbiAgICB2YXIgc2NhbGUgPSBNYXRoLm1heChub2RlVFcgLyB3LCBub2RlVEggLyBoKTtcbiAgICB3ICo9IHNjYWxlO1xuICAgIGggKj0gc2NhbGU7XG4gIH1cbiAgdmFyIHggPSBub2RlWCAtIG5vZGVUVyAvIDI7IC8vIGxlZnRcbiAgdmFyIHBvc1hVbml0cyA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgJ3VuaXRzJywgaW5kZXgpO1xuICB2YXIgcG9zWFBmVmFsID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgaWYgKHBvc1hVbml0cyA9PT0gJyUnKSB7XG4gICAgeCArPSAobm9kZVRXIC0gdykgKiBwb3NYUGZWYWw7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBwb3NYUGZWYWw7XG4gIH1cbiAgdmFyIG9mZlhVbml0cyA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1vZmZzZXQteCcsICd1bml0cycsIGluZGV4KTtcbiAgdmFyIG9mZlhQZlZhbCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1vZmZzZXQteCcsICdwZlZhbHVlJywgaW5kZXgpO1xuICBpZiAob2ZmWFVuaXRzID09PSAnJScpIHtcbiAgICB4ICs9IChub2RlVFcgLSB3KSAqIG9mZlhQZlZhbDtcbiAgfSBlbHNlIHtcbiAgICB4ICs9IG9mZlhQZlZhbDtcbiAgfVxuICB2YXIgeSA9IG5vZGVZIC0gbm9kZVRIIC8gMjsgLy8gdG9wXG4gIHZhciBwb3NZVW5pdHMgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcG9zaXRpb24teScsICd1bml0cycsIGluZGV4KTtcbiAgdmFyIHBvc1lQZlZhbCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gIGlmIChwb3NZVW5pdHMgPT09ICclJykge1xuICAgIHkgKz0gKG5vZGVUSCAtIGgpICogcG9zWVBmVmFsO1xuICB9IGVsc2Uge1xuICAgIHkgKz0gcG9zWVBmVmFsO1xuICB9XG4gIHZhciBvZmZZVW5pdHMgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXknLCAndW5pdHMnLCBpbmRleCk7XG4gIHZhciBvZmZZUGZWYWwgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXknLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgaWYgKG9mZllVbml0cyA9PT0gJyUnKSB7XG4gICAgeSArPSAobm9kZVRIIC0gaCkgKiBvZmZZUGZWYWw7XG4gIH0gZWxzZSB7XG4gICAgeSArPSBvZmZZUGZWYWw7XG4gIH1cbiAgaWYgKHJzLnBhdGhDYWNoZSkge1xuICAgIHggLT0gbm9kZVg7XG4gICAgeSAtPSBub2RlWTtcbiAgICBub2RlWCA9IDA7XG4gICAgbm9kZVkgPSAwO1xuICB9XG4gIHZhciBnQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICBjb250ZXh0Lmdsb2JhbEFscGhhID0gaW1nT3BhY2l0eTtcbiAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSByLmdldEltZ1Ntb290aGluZyhjb250ZXh0KTtcbiAgdmFyIGlzU21vb3RoaW5nU3dpdGNoZWQgPSBmYWxzZTtcbiAgaWYgKHNtb290aCA9PT0gJ25vJyAmJiBzbW9vdGhpbmdFbmFibGVkKSB7XG4gICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgZmFsc2UpO1xuICAgIGlzU21vb3RoaW5nU3dpdGNoZWQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHNtb290aCA9PT0gJ3llcycgJiYgIXNtb290aGluZ0VuYWJsZWQpIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgICBpc1Ntb290aGluZ1N3aXRjaGVkID0gdHJ1ZTtcbiAgfVxuICBpZiAocmVwZWF0ID09PSAnbm8tcmVwZWF0Jykge1xuICAgIGlmIChzaG91bGRDbGlwKSB7XG4gICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgIGlmIChycy5wYXRoQ2FjaGUpIHtcbiAgICAgICAgY29udGV4dC5jbGlwKHJzLnBhdGhDYWNoZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByLm5vZGVTaGFwZXNbci5nZXROb2RlU2hhcGUobm9kZSldLmRyYXcoY29udGV4dCwgbm9kZVgsIG5vZGVZLCBub2RlVFcsIG5vZGVUSCwgY29ybmVyUmFkaXVzLCBycyk7XG4gICAgICAgIGNvbnRleHQuY2xpcCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByLnNhZmVEcmF3SW1hZ2UoY29udGV4dCwgaW1nLCAwLCAwLCBpbWdXLCBpbWdILCB4LCB5LCB3LCBoKTtcbiAgICBpZiAoc2hvdWxkQ2xpcCkge1xuICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBwYXR0ZXJuID0gY29udGV4dC5jcmVhdGVQYXR0ZXJuKGltZywgcmVwZWF0KTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIG5vZGVYLCBub2RlWSwgbm9kZVRXLCBub2RlVEgsIGNvcm5lclJhZGl1cywgcnMpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC14LCAteSk7XG4gIH1cbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGdBbHBoYTtcbiAgaWYgKGlzU21vb3RoaW5nU3dpdGNoZWQpIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBzbW9vdGhpbmdFbmFibGVkKTtcbiAgfVxufTtcblxudmFyIENScCQ2ID0ge307XG5DUnAkNi5lbGVUZXh0QmlnZ2VyVGhhbk1pbiA9IGZ1bmN0aW9uIChlbGUsIHNjYWxlKSB7XG4gIGlmICghc2NhbGUpIHtcbiAgICB2YXIgem9vbSA9IGVsZS5jeSgpLnpvb20oKTtcbiAgICB2YXIgcHhSYXRpbyA9IHRoaXMuZ2V0UGl4ZWxSYXRpbygpO1xuICAgIHZhciBsdmwgPSBNYXRoLmNlaWwobG9nMih6b29tICogcHhSYXRpbykpOyAvLyB0aGUgZWZmZWN0aXZlIHRleHR1cmUgbGV2ZWxcblxuICAgIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgfVxuICB2YXIgY29tcHV0ZWRTaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZSAqIHNjYWxlO1xuICB2YXIgbWluU2l6ZSA9IGVsZS5wc3R5bGUoJ21pbi16b29tZWQtZm9udC1zaXplJykucGZWYWx1ZTtcbiAgaWYgKGNvbXB1dGVkU2l6ZSA8IG1pblNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuQ1JwJDYuZHJhd0VsZW1lbnRUZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgZm9yY2UsIHByZWZpeCkge1xuICB2YXIgdXNlRWxlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZm9yY2UgPT0gbnVsbCkge1xuICAgIGlmICh1c2VFbGVPcGFjaXR5ICYmICFyLmVsZVRleHRCaWdnZXJUaGFuTWluKGVsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZm9yY2UgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICB2YXIgbGFiZWwgPSBlbGUucHN0eWxlKCdsYWJlbCcpO1xuICAgIGlmICghbGFiZWwgfHwgIWxhYmVsLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBqdXN0aWZpY2F0aW9uID0gci5nZXRMYWJlbEp1c3RpZmljYXRpb24oZWxlKTtcbiAgICBjb250ZXh0LnRleHRBbGlnbiA9IGp1c3RpZmljYXRpb247XG4gICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmFkTGluZSA9IGVsZS5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZTtcbiAgICB2YXIgX2xhYmVsID0gZWxlLnBzdHlsZSgnbGFiZWwnKTtcbiAgICB2YXIgc3JjTGFiZWwgPSBlbGUucHN0eWxlKCdzb3VyY2UtbGFiZWwnKTtcbiAgICB2YXIgdGd0TGFiZWwgPSBlbGUucHN0eWxlKCd0YXJnZXQtbGFiZWwnKTtcbiAgICBpZiAoYmFkTGluZSB8fCAoIV9sYWJlbCB8fCAhX2xhYmVsLnZhbHVlKSAmJiAoIXNyY0xhYmVsIHx8ICFzcmNMYWJlbC52YWx1ZSkgJiYgKCF0Z3RMYWJlbCB8fCAhdGd0TGFiZWwudmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcbiAgfVxuICB2YXIgYXBwbHlSb3RhdGlvbiA9ICFzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuICBpZiAocHJlZml4ID09IG51bGwpIHtcbiAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgbnVsbCwgYXBwbHlSb3RhdGlvbiwgdXNlRWxlT3BhY2l0eSk7XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgci5kcmF3VGV4dChjb250ZXh0LCBlbGUsICdzb3VyY2UnLCBhcHBseVJvdGF0aW9uLCB1c2VFbGVPcGFjaXR5KTtcbiAgICAgIHIuZHJhd1RleHQoY29udGV4dCwgZWxlLCAndGFyZ2V0JywgYXBwbHlSb3RhdGlvbiwgdXNlRWxlT3BhY2l0eSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHIuZHJhd1RleHQoY29udGV4dCwgZWxlLCBwcmVmaXgsIGFwcGx5Um90YXRpb24sIHVzZUVsZU9wYWNpdHkpO1xuICB9XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgY29udGV4dC50cmFuc2xhdGUoYmIueDEsIGJiLnkxKTtcbiAgfVxufTtcbkNScCQ2LmdldEZvbnRDYWNoZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBjYWNoZTtcbiAgdGhpcy5mb250Q2FjaGVzID0gdGhpcy5mb250Q2FjaGVzIHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9udENhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGNhY2hlID0gdGhpcy5mb250Q2FjaGVzW2ldO1xuICAgIGlmIChjYWNoZS5jb250ZXh0ID09PSBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfVxuICB9XG4gIGNhY2hlID0ge1xuICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdGhpcy5mb250Q2FjaGVzLnB1c2goY2FjaGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG4vLyBzZXQgdXAgY2FudmFzIGNvbnRleHQgd2l0aCBmb250XG4vLyByZXR1cm5zIHRyYW5zZm9ybWVkIHRleHQgc3RyaW5nXG5DUnAkNi5zZXR1cFRleHRTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgdmFyIHVzZUVsZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gIC8vIEZvbnQgc3R5bGVcbiAgdmFyIGxhYmVsU3R5bGUgPSBlbGUucHN0eWxlKCdmb250LXN0eWxlJykuc3RyVmFsdWU7XG4gIHZhciBsYWJlbFNpemUgPSBlbGUucHN0eWxlKCdmb250LXNpemUnKS5wZlZhbHVlICsgJ3B4JztcbiAgdmFyIGxhYmVsRmFtaWx5ID0gZWxlLnBzdHlsZSgnZm9udC1mYW1pbHknKS5zdHJWYWx1ZTtcbiAgdmFyIGxhYmVsV2VpZ2h0ID0gZWxlLnBzdHlsZSgnZm9udC13ZWlnaHQnKS5zdHJWYWx1ZTtcbiAgdmFyIG9wYWNpdHkgPSB1c2VFbGVPcGFjaXR5ID8gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSAqIGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnZhbHVlIDogMTtcbiAgdmFyIG91dGxpbmVPcGFjaXR5ID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLW9wYWNpdHknKS52YWx1ZSAqIG9wYWNpdHk7XG4gIHZhciBjb2xvciA9IGVsZS5wc3R5bGUoJ2NvbG9yJykudmFsdWU7XG4gIHZhciBvdXRsaW5lQ29sb3IgPSBlbGUucHN0eWxlKCd0ZXh0LW91dGxpbmUtY29sb3InKS52YWx1ZTtcbiAgY29udGV4dC5mb250ID0gbGFiZWxTdHlsZSArICcgJyArIGxhYmVsV2VpZ2h0ICsgJyAnICsgbGFiZWxTaXplICsgJyAnICsgbGFiZWxGYW1pbHk7XG4gIGNvbnRleHQubGluZUpvaW4gPSAncm91bmQnOyAvLyBzbyB0ZXh0IG91dGxpbmVzIGFyZW4ndCBqYWdnZWRcblxuICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICB0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgb3V0bGluZUNvbG9yWzBdLCBvdXRsaW5lQ29sb3JbMV0sIG91dGxpbmVDb2xvclsyXSwgb3V0bGluZU9wYWNpdHkpO1xufTtcblxuLy8gVE9ETyBlbnN1cmUgcmUtdXNlZFxuZnVuY3Rpb24gcm91bmRSZWN0KGN0eCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICB2YXIgcmFkaXVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiA1O1xuICB2YXIgc3Ryb2tlID0gYXJndW1lbnRzLmxlbmd0aCA+IDYgPyBhcmd1bWVudHNbNl0gOiB1bmRlZmluZWQ7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4ICsgcmFkaXVzLCB5KTtcbiAgY3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMsIHkpO1xuICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHksIHggKyB3aWR0aCwgeSArIHJhZGl1cyk7XG4gIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQpO1xuICBjdHgubGluZVRvKHggKyByYWRpdXMsIHkgKyBoZWlnaHQpO1xuICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgY3R4LmxpbmVUbyh4LCB5ICsgcmFkaXVzKTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSwgeCArIHJhZGl1cywgeSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgaWYgKHN0cm9rZSkgY3R4LnN0cm9rZSgpO2Vsc2UgY3R4LmZpbGwoKTtcbn1cbkNScCQ2LmdldFRleHRBbmdsZSA9IGZ1bmN0aW9uIChlbGUsIHByZWZpeCkge1xuICB2YXIgdGhldGE7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHJzY3JhdGNoID0gX3AucnNjcmF0Y2g7XG4gIHZhciBwZGFzaCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICB2YXIgcm90YXRpb24gPSBlbGUucHN0eWxlKHBkYXNoICsgJ3RleHQtcm90YXRpb24nKTtcbiAgdmFyIHRleHRBbmdsZSA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbEFuZ2xlJywgcHJlZml4KTtcbiAgaWYgKHJvdGF0aW9uLnN0clZhbHVlID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICB0aGV0YSA9IGVsZS5pc0VkZ2UoKSA/IHRleHRBbmdsZSA6IDA7XG4gIH0gZWxzZSBpZiAocm90YXRpb24uc3RyVmFsdWUgPT09ICdub25lJykge1xuICAgIHRoZXRhID0gMDtcbiAgfSBlbHNlIHtcbiAgICB0aGV0YSA9IHJvdGF0aW9uLnBmVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoZXRhO1xufTtcbkNScCQ2LmRyYXdUZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgcHJlZml4KSB7XG4gIHZhciBhcHBseVJvdGF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgdXNlRWxlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcnNjcmF0Y2ggPSBfcC5yc2NyYXRjaDtcbiAgdmFyIHBhcmVudE9wYWNpdHkgPSB1c2VFbGVPcGFjaXR5ID8gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSA6IDE7XG4gIGlmICh1c2VFbGVPcGFjaXR5ICYmIChwYXJlbnRPcGFjaXR5ID09PSAwIHx8IGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnZhbHVlID09PSAwKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVzZSAnbWFpbicgYXMgYW4gYWxpYXMgZm9yIHRoZSBtYWluIGxhYmVsIChpLmUuIG51bGwgcHJlZml4KVxuICBpZiAocHJlZml4ID09PSAnbWFpbicpIHtcbiAgICBwcmVmaXggPSBudWxsO1xuICB9XG4gIHZhciB0ZXh0WCA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFgnLCBwcmVmaXgpO1xuICB2YXIgdGV4dFkgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxZJywgcHJlZml4KTtcbiAgdmFyIG9yZ1RleHRYLCBvcmdUZXh0WTsgLy8gdXNlZCBmb3Igcm90YXRpb25cbiAgdmFyIHRleHQgPSB0aGlzLmdldExhYmVsVGV4dChlbGUsIHByZWZpeCk7XG4gIGlmICh0ZXh0ICE9IG51bGwgJiYgdGV4dCAhPT0gJycgJiYgIWlzTmFOKHRleHRYKSAmJiAhaXNOYU4odGV4dFkpKSB7XG4gICAgdGhpcy5zZXR1cFRleHRTdHlsZShjb250ZXh0LCBlbGUsIHVzZUVsZU9wYWNpdHkpO1xuICAgIHZhciBwZGFzaCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICAgIHZhciB0ZXh0VyA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4KTtcbiAgICB2YXIgdGV4dEggPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgpO1xuICAgIHZhciBtYXJnaW5YID0gZWxlLnBzdHlsZShwZGFzaCArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZTtcbiAgICB2YXIgbWFyZ2luWSA9IGVsZS5wc3R5bGUocGRhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgaGFsaWduID0gZWxlLnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcbiAgICB2YXIgdmFsaWduID0gZWxlLnBzdHlsZSgndGV4dC12YWxpZ24nKS52YWx1ZTtcbiAgICBpZiAoaXNFZGdlKSB7XG4gICAgICBoYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIHZhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgICB0ZXh0WCArPSBtYXJnaW5YO1xuICAgIHRleHRZICs9IG1hcmdpblk7XG4gICAgdmFyIHRoZXRhO1xuICAgIGlmICghYXBwbHlSb3RhdGlvbikge1xuICAgICAgdGhldGEgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGV0YSA9IHRoaXMuZ2V0VGV4dEFuZ2xlKGVsZSwgcHJlZml4KTtcbiAgICB9XG4gICAgaWYgKHRoZXRhICE9PSAwKSB7XG4gICAgICBvcmdUZXh0WCA9IHRleHRYO1xuICAgICAgb3JnVGV4dFkgPSB0ZXh0WTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9yZ1RleHRYLCBvcmdUZXh0WSk7XG4gICAgICBjb250ZXh0LnJvdGF0ZSh0aGV0YSk7XG4gICAgICB0ZXh0WCA9IDA7XG4gICAgICB0ZXh0WSA9IDA7XG4gICAgfVxuICAgIHN3aXRjaCAodmFsaWduKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHRleHRZICs9IHRleHRIIC8gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0ZXh0WSArPSB0ZXh0SDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBiYWNrZ3JvdW5kT3BhY2l0eSA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWU7XG4gICAgdmFyIGJvcmRlck9wYWNpdHkgPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci1vcGFjaXR5JykudmFsdWU7XG4gICAgdmFyIHRleHRCb3JkZXJXaWR0aCA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgYmFja2dyb3VuZFBhZGRpbmcgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtcGFkZGluZycpLnBmVmFsdWU7XG4gICAgdmFyIHN0eWxlU2hhcGUgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtc2hhcGUnKS5zdHJWYWx1ZTtcbiAgICB2YXIgcm91bmRlZCA9IHN0eWxlU2hhcGUuaW5kZXhPZigncm91bmQnKSA9PT0gMDtcbiAgICB2YXIgcm91bmRSYWRpdXMgPSAyO1xuICAgIGlmIChiYWNrZ3JvdW5kT3BhY2l0eSA+IDAgfHwgdGV4dEJvcmRlcldpZHRoID4gMCAmJiBib3JkZXJPcGFjaXR5ID4gMCkge1xuICAgICAgdmFyIGJnWCA9IHRleHRYIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICBzd2l0Y2ggKGhhbGlnbikge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBiZ1ggLT0gdGV4dFc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgYmdYIC09IHRleHRXIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBiZ1kgPSB0ZXh0WSAtIHRleHRIIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICB2YXIgYmdXID0gdGV4dFcgKyAyICogYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICB2YXIgYmdIID0gdGV4dEggKyAyICogYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICBpZiAoYmFja2dyb3VuZE9wYWNpdHkgPiAwKSB7XG4gICAgICAgIHZhciB0ZXh0RmlsbCA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICB2YXIgdGV4dEJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1jb2xvcicpLnZhbHVlO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0ZXh0QmFja2dyb3VuZENvbG9yWzBdICsgJywnICsgdGV4dEJhY2tncm91bmRDb2xvclsxXSArICcsJyArIHRleHRCYWNrZ3JvdW5kQ29sb3JbMl0gKyAnLCcgKyBiYWNrZ3JvdW5kT3BhY2l0eSAqIHBhcmVudE9wYWNpdHkgKyAnKSc7XG4gICAgICAgIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgcm91bmRSZWN0KGNvbnRleHQsIGJnWCwgYmdZLCBiZ1csIGJnSCwgcm91bmRSYWRpdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYmdYLCBiZ1ksIGJnVywgYmdIKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRleHRGaWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRleHRCb3JkZXJXaWR0aCA+IDAgJiYgYm9yZGVyT3BhY2l0eSA+IDApIHtcbiAgICAgICAgdmFyIHRleHRTdHJva2UgPSBjb250ZXh0LnN0cm9rZVN0eWxlO1xuICAgICAgICB2YXIgdGV4dExpbmVXaWR0aCA9IGNvbnRleHQubGluZVdpZHRoO1xuICAgICAgICB2YXIgdGV4dEJvcmRlckNvbG9yID0gZWxlLnBzdHlsZSgndGV4dC1ib3JkZXItY29sb3InKS52YWx1ZTtcbiAgICAgICAgdmFyIHRleHRCb3JkZXJTdHlsZSA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXN0eWxlJykudmFsdWU7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAncmdiYSgnICsgdGV4dEJvcmRlckNvbG9yWzBdICsgJywnICsgdGV4dEJvcmRlckNvbG9yWzFdICsgJywnICsgdGV4dEJvcmRlckNvbG9yWzJdICsgJywnICsgYm9yZGVyT3BhY2l0eSAqIHBhcmVudE9wYWNpdHkgKyAnKSc7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoO1xuICAgICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgICAgICAgIHN3aXRjaCAodGV4dEJvcmRlclN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxLCAxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbNCwgMl0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoIC8gNDsgLy8gNTAlIHJlc2VydmVkIGZvciB3aGl0ZSBiZXR3ZWVuIHRoZSB0d28gYm9yZGVyc1xuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzb2xpZCc6XG4gICAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdW5kZWQpIHtcbiAgICAgICAgICByb3VuZFJlY3QoY29udGV4dCwgYmdYLCBiZ1ksIGJnVywgYmdILCByb3VuZFJhZGl1cywgJ3N0cm9rZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChiZ1gsIGJnWSwgYmdXLCBiZ0gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0Qm9yZGVyU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgICAgdmFyIHdoaXRlV2lkdGggPSB0ZXh0Qm9yZGVyV2lkdGggLyAyO1xuICAgICAgICAgIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgICByb3VuZFJlY3QoY29udGV4dCwgYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyLCByb3VuZFJhZGl1cywgJ3N0cm9rZScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVJlY3QoYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRleHRMaW5lV2lkdGg7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0ZXh0U3Ryb2tlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbGluZVdpZHRoID0gMiAqIGVsZS5wc3R5bGUoJ3RleHQtb3V0bGluZS13aWR0aCcpLnBmVmFsdWU7IC8vICoyIGIvYyB0aGUgc3Ryb2tlIGlzIGRyYXduIGNlbnRyZWQgb24gdGhlIG1pZGRsZVxuXG4gICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgIH1cbiAgICBpZiAoZWxlLnBzdHlsZSgndGV4dC13cmFwJykudmFsdWUgPT09ICd3cmFwJykge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgcHJlZml4KTtcbiAgICAgIHZhciBsaW5lSGVpZ2h0ID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCk7XG4gICAgICB2YXIgaGFsZlRleHRXID0gdGV4dFcgLyAyO1xuICAgICAgdmFyIGp1c3RpZmljYXRpb24gPSB0aGlzLmdldExhYmVsSnVzdGlmaWNhdGlvbihlbGUpO1xuICAgICAgaWYgKGp1c3RpZmljYXRpb24gPT09ICdhdXRvJykgOyBlbHNlIGlmIChoYWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBhdXRvIGp1c3RpZmljYXRpb24gOiByaWdodFxuICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgdGV4dFggKz0gLXRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgdGV4dFggKz0gLWhhbGZUZXh0VztcbiAgICAgICAgfSAvLyBlbHNlIHNhbWUgYXMgYXV0b1xuICAgICAgfSBlbHNlIGlmIChoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIC8vIGF1dG8ganVzdGZpY2F0aW9uIDogY2VudGVyXG4gICAgICAgIGlmIChqdXN0aWZpY2F0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSAtaGFsZlRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSBoYWxmVGV4dFc7XG4gICAgICAgIH0gLy8gZWxzZSBzYW1lIGFzIGF1dG9cbiAgICAgIH0gZWxzZSBpZiAoaGFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIGF1dG8ganVzdGlmaWNhdGlvbiA6IGxlZnRcbiAgICAgICAgaWYgKGp1c3RpZmljYXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgdGV4dFggKz0gaGFsZlRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSB0ZXh0VztcbiAgICAgICAgfSAvLyBlbHNlIHNhbWUgYXMgYXV0b1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHZhbGlnbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRleHRZIC09IChsaW5lcy5sZW5ndGggLSAxKSAqIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdGV4dFkgLT0gKGxpbmVzLmxlbmd0aCAtIDEpICogbGluZUhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVRleHQobGluZXNbbF0sIHRleHRYLCB0ZXh0WSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5maWxsVGV4dChsaW5lc1tsXSwgdGV4dFgsIHRleHRZKTtcbiAgICAgICAgdGV4dFkgKz0gbGluZUhlaWdodDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgY29udGV4dC5zdHJva2VUZXh0KHRleHQsIHRleHRYLCB0ZXh0WSk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmZpbGxUZXh0KHRleHQsIHRleHRYLCB0ZXh0WSk7XG4gICAgfVxuICAgIGlmICh0aGV0YSAhPT0gMCkge1xuICAgICAgY29udGV4dC5yb3RhdGUoLXRoZXRhKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1vcmdUZXh0WCwgLW9yZ1RleHRZKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qIGdsb2JhbCBQYXRoMkQgKi9cbnZhciBDUnAkNSA9IHt9O1xuQ1JwJDUuZHJhd05vZGUgPSBmdW5jdGlvbiAoY29udGV4dCwgbm9kZSwgc2hpZnRUb09yaWdpbldpdGhCYikge1xuICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgc2hvdWxkRHJhd092ZXJsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBzaG91bGREcmF3T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgbm9kZVdpZHRoLCBub2RlSGVpZ2h0O1xuICB2YXIgX3AgPSBub2RlLl9wcml2YXRlO1xuICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgdmFyIHBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgaWYgKCFudW1iZXIkMShwb3MueCkgfHwgIW51bWJlciQxKHBvcy55KSkge1xuICAgIHJldHVybjsgLy8gY2FuJ3QgZHJhdyBub2RlIHdpdGggdW5kZWZpbmVkIHBvc2l0aW9uXG4gIH1cblxuICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIW5vZGUudmlzaWJsZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBlbGVPcGFjaXR5ID0gc2hvdWxkRHJhd09wYWNpdHkgPyBub2RlLmVmZmVjdGl2ZU9wYWNpdHkoKSA6IDE7XG4gIHZhciB1c2VQYXRocyA9IHIudXNlUGF0aHMoKTtcbiAgdmFyIHBhdGg7XG4gIHZhciBwYXRoQ2FjaGVIaXQgPSBmYWxzZTtcbiAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgbm9kZVdpZHRoID0gbm9kZS53aWR0aCgpICsgMiAqIHBhZGRpbmc7XG4gIG5vZGVIZWlnaHQgPSBub2RlLmhlaWdodCgpICsgMiAqIHBhZGRpbmc7XG5cbiAgLy9cbiAgLy8gc2V0dXAgc2hpZnRcblxuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuXG4gIC8vXG4gIC8vIGxvYWQgYmcgaW1hZ2VcblxuICB2YXIgYmdJbWdQcm9wID0gbm9kZS5wc3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnKTtcbiAgdmFyIHVybHMgPSBiZ0ltZ1Byb3AudmFsdWU7XG4gIHZhciB1cmxEZWZpbmVkID0gbmV3IEFycmF5KHVybHMubGVuZ3RoKTtcbiAgdmFyIGltYWdlID0gbmV3IEFycmF5KHVybHMubGVuZ3RoKTtcbiAgdmFyIG51bUltYWdlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB1cmwgPSB1cmxzW2ldO1xuICAgIHZhciBkZWZkID0gdXJsRGVmaW5lZFtpXSA9IHVybCAhPSBudWxsICYmIHVybCAhPT0gJ25vbmUnO1xuICAgIGlmIChkZWZkKSB7XG4gICAgICB2YXIgYmdJbWdDcm9zc09yaWdpbiA9IG5vZGUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbicsICd2YWx1ZScsIGkpO1xuICAgICAgbnVtSW1hZ2VzKys7XG5cbiAgICAgIC8vIGdldCBpbWFnZSwgYW5kIGlmIG5vdCBsb2FkZWQgdGhlbiBhc2sgdG8gcmVkcmF3IHdoZW4gbGF0ZXIgbG9hZGVkXG4gICAgICBpbWFnZVtpXSA9IHIuZ2V0Q2FjaGVkSW1hZ2UodXJsLCBiZ0ltZ0Nyb3NzT3JpZ2luLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9wLmJhY2tncm91bmRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICBub2RlLmVtaXRBbmROb3RpZnkoJ2JhY2tncm91bmQnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vXG4gIC8vIHNldHVwIHN0eWxlc1xuXG4gIHZhciBkYXJrbmVzcyA9IG5vZGUucHN0eWxlKCdiYWNrZ3JvdW5kLWJsYWNrZW4nKS52YWx1ZTtcbiAgdmFyIGJvcmRlcldpZHRoID0gbm9kZS5wc3R5bGUoJ2JvcmRlci13aWR0aCcpLnBmVmFsdWU7XG4gIHZhciBiZ09wYWNpdHkgPSBub2RlLnBzdHlsZSgnYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWUgKiBlbGVPcGFjaXR5O1xuICB2YXIgYm9yZGVyQ29sb3IgPSBub2RlLnBzdHlsZSgnYm9yZGVyLWNvbG9yJykudmFsdWU7XG4gIHZhciBib3JkZXJTdHlsZSA9IG5vZGUucHN0eWxlKCdib3JkZXItc3R5bGUnKS52YWx1ZTtcbiAgdmFyIGJvcmRlckpvaW4gPSBub2RlLnBzdHlsZSgnYm9yZGVyLWpvaW4nKS52YWx1ZTtcbiAgdmFyIGJvcmRlckNhcCA9IG5vZGUucHN0eWxlKCdib3JkZXItY2FwJykudmFsdWU7XG4gIHZhciBib3JkZXJQb3NpdGlvbiA9IG5vZGUucHN0eWxlKCdib3JkZXItcG9zaXRpb24nKS52YWx1ZTtcbiAgdmFyIGJvcmRlclBhdHRlcm4gPSBub2RlLnBzdHlsZSgnYm9yZGVyLWRhc2gtcGF0dGVybicpLnBmVmFsdWU7XG4gIHZhciBib3JkZXJPZmZzZXQgPSBub2RlLnBzdHlsZSgnYm9yZGVyLWRhc2gtb2Zmc2V0JykucGZWYWx1ZTtcbiAgdmFyIGJvcmRlck9wYWNpdHkgPSBub2RlLnBzdHlsZSgnYm9yZGVyLW9wYWNpdHknKS52YWx1ZSAqIGVsZU9wYWNpdHk7XG4gIHZhciBvdXRsaW5lV2lkdGggPSBub2RlLnBzdHlsZSgnb3V0bGluZS13aWR0aCcpLnBmVmFsdWU7XG4gIHZhciBvdXRsaW5lQ29sb3IgPSBub2RlLnBzdHlsZSgnb3V0bGluZS1jb2xvcicpLnZhbHVlO1xuICB2YXIgb3V0bGluZVN0eWxlID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtc3R5bGUnKS52YWx1ZTtcbiAgdmFyIG91dGxpbmVPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtb3BhY2l0eScpLnZhbHVlICogZWxlT3BhY2l0eTtcbiAgdmFyIG91dGxpbmVPZmZzZXQgPSBub2RlLnBzdHlsZSgnb3V0bGluZS1vZmZzZXQnKS52YWx1ZTtcbiAgdmFyIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWU7XG4gIGlmIChjb3JuZXJSYWRpdXMgIT09ICdhdXRvJykgY29ybmVyUmFkaXVzID0gbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlO1xuICB2YXIgc2V0dXBTaGFwZUNvbG9yID0gZnVuY3Rpb24gc2V0dXBTaGFwZUNvbG9yKCkge1xuICAgIHZhciBiZ09weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogYmdPcGFjaXR5O1xuICAgIHIuZWxlRmlsbFN0eWxlKGNvbnRleHQsIG5vZGUsIGJnT3B5KTtcbiAgfTtcbiAgdmFyIHNldHVwQm9yZGVyQ29sb3IgPSBmdW5jdGlvbiBzZXR1cEJvcmRlckNvbG9yKCkge1xuICAgIHZhciBiZHJPcHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGJvcmRlck9wYWNpdHk7XG4gICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGJvcmRlckNvbG9yWzBdLCBib3JkZXJDb2xvclsxXSwgYm9yZGVyQ29sb3JbMl0sIGJkck9weSk7XG4gIH07XG4gIHZhciBzZXR1cE91dGxpbmVDb2xvciA9IGZ1bmN0aW9uIHNldHVwT3V0bGluZUNvbG9yKCkge1xuICAgIHZhciBvdGxuT3B5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBvdXRsaW5lT3BhY2l0eTtcbiAgICByLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgb3V0bGluZUNvbG9yWzBdLCBvdXRsaW5lQ29sb3JbMV0sIG91dGxpbmVDb2xvclsyXSwgb3Rsbk9weSk7XG4gIH07XG5cbiAgLy9cbiAgLy8gc2V0dXAgc2hhcGVcblxuICB2YXIgZ2V0UGF0aCA9IGZ1bmN0aW9uIGdldFBhdGgod2lkdGgsIGhlaWdodCwgc2hhcGUsIHBvaW50cykge1xuICAgIHZhciBwYXRoQ2FjaGUgPSByLm5vZGVQYXRoQ2FjaGUgPSByLm5vZGVQYXRoQ2FjaGUgfHwgW107XG4gICAgdmFyIGtleSA9IGhhc2hTdHJpbmdzKHNoYXBlID09PSAncG9seWdvbicgPyBzaGFwZSArICcsJyArIHBvaW50cy5qb2luKCcsJykgOiBzaGFwZSwgJycgKyBoZWlnaHQsICcnICsgd2lkdGgsICcnICsgY29ybmVyUmFkaXVzKTtcbiAgICB2YXIgY2FjaGVkUGF0aCA9IHBhdGhDYWNoZVtrZXldO1xuICAgIHZhciBwYXRoO1xuICAgIHZhciBjYWNoZUhpdCA9IGZhbHNlO1xuICAgIGlmIChjYWNoZWRQYXRoICE9IG51bGwpIHtcbiAgICAgIHBhdGggPSBjYWNoZWRQYXRoO1xuICAgICAgY2FjaGVIaXQgPSB0cnVlO1xuICAgICAgcnMucGF0aENhY2hlID0gcGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IG5ldyBQYXRoMkQoKTtcbiAgICAgIHBhdGhDYWNoZVtrZXldID0gcnMucGF0aENhY2hlID0gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IHBhdGgsXG4gICAgICBjYWNoZUhpdDogY2FjaGVIaXRcbiAgICB9O1xuICB9O1xuICB2YXIgc3R5bGVTaGFwZSA9IG5vZGUucHN0eWxlKCdzaGFwZScpLnN0clZhbHVlO1xuICB2YXIgc2hhcGVQdHMgPSBub2RlLnBzdHlsZSgnc2hhcGUtcG9seWdvbi1wb2ludHMnKS5wZlZhbHVlO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShwb3MueCwgcG9zLnkpO1xuICAgIHZhciBzaGFwZVBhdGggPSBnZXRQYXRoKG5vZGVXaWR0aCwgbm9kZUhlaWdodCwgc3R5bGVTaGFwZSwgc2hhcGVQdHMpO1xuICAgIHBhdGggPSBzaGFwZVBhdGgucGF0aDtcbiAgICBwYXRoQ2FjaGVIaXQgPSBzaGFwZVBhdGguY2FjaGVIaXQ7XG4gIH1cbiAgdmFyIGRyYXdTaGFwZSA9IGZ1bmN0aW9uIGRyYXdTaGFwZSgpIHtcbiAgICBpZiAoIXBhdGhDYWNoZUhpdCkge1xuICAgICAgdmFyIG5wb3MgPSBwb3M7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgbnBvcyA9IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHIubm9kZVNoYXBlc1tyLmdldE5vZGVTaGFwZShub2RlKV0uZHJhdyhwYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBub2RlV2lkdGgsIG5vZGVIZWlnaHQsIGNvcm5lclJhZGl1cywgcnMpO1xuICAgIH1cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQuZmlsbChwYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd0ltYWdlcyA9IGZ1bmN0aW9uIGRyYXdJbWFnZXMoKSB7XG4gICAgdmFyIG5vZGVPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbGVPcGFjaXR5O1xuICAgIHZhciBpbnNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgdmFyIHByZXZCZ2luZyA9IF9wLmJhY2tncm91bmRpbmc7XG4gICAgdmFyIHRvdGFsQ29tcGxldGVkID0gMDtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW1hZ2UubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgYmdDb250YWlubWVudCA9IG5vZGUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCcsICd2YWx1ZScsIF9pKTtcbiAgICAgIGlmIChpbnNpZGUgJiYgYmdDb250YWlubWVudCA9PT0gJ292ZXInIHx8ICFpbnNpZGUgJiYgYmdDb250YWlubWVudCA9PT0gJ2luc2lkZScpIHtcbiAgICAgICAgdG90YWxDb21wbGV0ZWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodXJsRGVmaW5lZFtfaV0gJiYgaW1hZ2VbX2ldLmNvbXBsZXRlICYmICFpbWFnZVtfaV0uZXJyb3IpIHtcbiAgICAgICAgdG90YWxDb21wbGV0ZWQrKztcbiAgICAgICAgci5kcmF3SW5zY3JpYmVkSW1hZ2UoY29udGV4dCwgaW1hZ2VbX2ldLCBub2RlLCBfaSwgbm9kZU9wYWNpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBfcC5iYWNrZ3JvdW5kaW5nID0gISh0b3RhbENvbXBsZXRlZCA9PT0gbnVtSW1hZ2VzKTtcbiAgICBpZiAocHJldkJnaW5nICE9PSBfcC5iYWNrZ3JvdW5kaW5nKSB7XG4gICAgICAvLyB1cGRhdGUgc3R5bGUgYi9jIDpiYWNrZ3JvdW5kaW5nIHN0YXRlIGNoYW5nZWRcbiAgICAgIG5vZGUudXBkYXRlU3R5bGUoZmFsc2UpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdQaWUgPSBmdW5jdGlvbiBkcmF3UGllKCkge1xuICAgIHZhciByZWRyYXdTaGFwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgdmFyIHBpZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGVsZU9wYWNpdHk7XG4gICAgaWYgKHIuaGFzUGllKG5vZGUpKSB7XG4gICAgICByLmRyYXdQaWUoY29udGV4dCwgbm9kZSwgcGllT3BhY2l0eSk7XG5cbiAgICAgIC8vIHJlZHJhdy9yZXN0b3JlIHBhdGggaWYgc3RlcHMgYWZ0ZXIgcGllIG5lZWQgaXRcbiAgICAgIGlmIChyZWRyYXdTaGFwZSkge1xuICAgICAgICBpZiAoIXVzZVBhdGhzKSB7XG4gICAgICAgICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIHBvcy54LCBwb3MueSwgbm9kZVdpZHRoLCBub2RlSGVpZ2h0LCBjb3JuZXJSYWRpdXMsIHJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGRhcmtlbiA9IGZ1bmN0aW9uIGRhcmtlbigpIHtcbiAgICB2YXIgZGFya2VuT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZWxlT3BhY2l0eTtcbiAgICB2YXIgb3BhY2l0eSA9IChkYXJrbmVzcyA+IDAgPyBkYXJrbmVzcyA6IC1kYXJrbmVzcykgKiBkYXJrZW5PcGFjaXR5O1xuICAgIHZhciBjID0gZGFya25lc3MgPiAwID8gMCA6IDI1NTtcbiAgICBpZiAoZGFya25lc3MgIT09IDApIHtcbiAgICAgIHIuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgYywgYywgYywgb3BhY2l0eSk7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgY29udGV4dC5maWxsKHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd0JvcmRlciA9IGZ1bmN0aW9uIGRyYXdCb3JkZXIoKSB7XG4gICAgaWYgKGJvcmRlcldpZHRoID4gMCkge1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IGJvcmRlckNhcDtcbiAgICAgIGNvbnRleHQubGluZUpvaW4gPSBib3JkZXJKb2luO1xuICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIHN3aXRjaCAoYm9yZGVyU3R5bGUpIHtcbiAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbMSwgMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goYm9yZGVyUGF0dGVybik7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnc29saWQnOlxuICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYm9yZGVyUG9zaXRpb24gIT09ICdjZW50ZXInKSB7XG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCAqPSAyO1xuICAgICAgICBpZiAoYm9yZGVyUG9zaXRpb24gPT09ICdpbnNpZGUnKSB7XG4gICAgICAgICAgdXNlUGF0aHMgPyBjb250ZXh0LmNsaXAocGF0aCkgOiBjb250ZXh0LmNsaXAoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcmVnaW9uID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICAgIHJlZ2lvbi5yZWN0KC1ub2RlV2lkdGggLyAyIC0gYm9yZGVyV2lkdGgsIC1ub2RlSGVpZ2h0IC8gMiAtIGJvcmRlcldpZHRoLCBub2RlV2lkdGggKyAyICogYm9yZGVyV2lkdGgsIG5vZGVIZWlnaHQgKyAyICogYm9yZGVyV2lkdGgpO1xuICAgICAgICAgIHJlZ2lvbi5hZGRQYXRoKHBhdGgpO1xuICAgICAgICAgIGNvbnRleHQuY2xpcChyZWdpb24sICdldmVub2RkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdXNlUGF0aHMgPyBjb250ZXh0LnN0cm9rZShwYXRoKSA6IGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXNlUGF0aHMgPyBjb250ZXh0LnN0cm9rZShwYXRoKSA6IGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB9XG4gICAgICBpZiAoYm9yZGVyU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGggLyAzO1xuICAgICAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7XG4gICAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKHBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBnY287XG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2V0IGluIGNhc2Ugd2UgY2hhbmdlZCB0aGUgYm9yZGVyIHN0eWxlXG4gICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd091dGxpbmUgPSBmdW5jdGlvbiBkcmF3T3V0bGluZSgpIHtcbiAgICBpZiAob3V0bGluZVdpZHRoID4gMCkge1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBvdXRsaW5lV2lkdGg7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSAnYnV0dCc7XG4gICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgc3dpdGNoIChvdXRsaW5lU3R5bGUpIHtcbiAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbMSwgMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goWzQsIDJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3NvbGlkJzpcbiAgICAgICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG5wb3MgPSBwb3M7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgbnBvcyA9IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBzaGFwZSA9IHIuZ2V0Tm9kZVNoYXBlKG5vZGUpO1xuICAgICAgdmFyIGJXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgaWYgKGJvcmRlclBvc2l0aW9uID09PSAnaW5zaWRlJykgYldpZHRoID0gMDtcbiAgICAgIGlmIChib3JkZXJQb3NpdGlvbiA9PT0gJ291dHNpZGUnKSBiV2lkdGggKj0gMjtcbiAgICAgIHZhciBzY2FsZVggPSAobm9kZVdpZHRoICsgYldpZHRoICsgKG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpKSAvIG5vZGVXaWR0aDtcbiAgICAgIHZhciBzY2FsZVkgPSAobm9kZUhlaWdodCArIGJXaWR0aCArIChvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSkgLyBub2RlSGVpZ2h0O1xuICAgICAgdmFyIHNXaWR0aCA9IG5vZGVXaWR0aCAqIHNjYWxlWDtcbiAgICAgIHZhciBzSGVpZ2h0ID0gbm9kZUhlaWdodCAqIHNjYWxlWTtcbiAgICAgIHZhciBwb2ludHMgPSByLm5vZGVTaGFwZXNbc2hhcGVdLnBvaW50cztcbiAgICAgIHZhciBfcGF0aDtcbiAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICB2YXIgb3V0bGluZVBhdGggPSBnZXRQYXRoKHNXaWR0aCwgc0hlaWdodCwgc2hhcGUsIHBvaW50cyk7XG4gICAgICAgIF9wYXRoID0gb3V0bGluZVBhdGgucGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gZHJhdyB0aGUgb3V0bGluZSBwYXRoLCBlaXRoZXIgYnkgdXNpbmcgZXhwYW5kZWQgcG9pbnRzIG9yIGJ5IHNjYWxpbmcgXG4gICAgICAvLyB0aGUgZGltZW5zaW9ucywgZGVwZW5kaW5nIG9uIHNoYXBlXG4gICAgICBpZiAoc2hhcGUgPT09IFwiZWxsaXBzZVwiKSB7XG4gICAgICAgIHIuZHJhd0VsbGlwc2VQYXRoKF9wYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBzV2lkdGgsIHNIZWlnaHQpO1xuICAgICAgfSBlbHNlIGlmIChbJ3JvdW5kLWRpYW1vbmQnLCAncm91bmQtaGVwdGFnb24nLCAncm91bmQtaGV4YWdvbicsICdyb3VuZC1vY3RhZ29uJywgJ3JvdW5kLXBlbnRhZ29uJywgJ3JvdW5kLXBvbHlnb24nLCAncm91bmQtdHJpYW5nbGUnLCAncm91bmQtdGFnJ10uaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIHZhciBzTXVsdCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXRYID0gMDtcbiAgICAgICAgdmFyIG9mZnNldFkgPSAwO1xuICAgICAgICBpZiAoc2hhcGUgPT09ICdyb3VuZC1kaWFtb25kJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS40O1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAncm91bmQtaGVwdGFnb24nKSB7XG4gICAgICAgICAgc011bHQgPSAoYldpZHRoICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgKiAxLjA3NTtcbiAgICAgICAgICBvZmZzZXRZID0gLShiV2lkdGggLyAyICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgLyAzNTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLWhleGFnb24nKSB7XG4gICAgICAgICAgc011bHQgPSAoYldpZHRoICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgKiAxLjEyO1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAncm91bmQtcGVudGFnb24nKSB7XG4gICAgICAgICAgc011bHQgPSAoYldpZHRoICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgKiAxLjEzO1xuICAgICAgICAgIG9mZnNldFkgPSAtKGJXaWR0aCAvIDIgKyBvdXRsaW5lT2Zmc2V0ICsgb3V0bGluZVdpZHRoKSAvIDE1O1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAncm91bmQtdGFnJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS4xMjtcbiAgICAgICAgICBvZmZzZXRYID0gKGJXaWR0aCAvIDIgKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAqIC4wNztcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLXRyaWFuZ2xlJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogKE1hdGguUEkgLyAyKTtcbiAgICAgICAgICBvZmZzZXRZID0gLShiV2lkdGggKyBvdXRsaW5lT2Zmc2V0IC8gMiArIG91dGxpbmVXaWR0aCkgLyBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzTXVsdCAhPT0gMCkge1xuICAgICAgICAgIHNjYWxlWCA9IChub2RlV2lkdGggKyBzTXVsdCkgLyBub2RlV2lkdGg7XG4gICAgICAgICAgc1dpZHRoID0gbm9kZVdpZHRoICogc2NhbGVYO1xuICAgICAgICAgIGlmICghWydyb3VuZC1oZXhhZ29uJywgJ3JvdW5kLXRhZyddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICAgICAgc2NhbGVZID0gKG5vZGVIZWlnaHQgKyBzTXVsdCkgLyBub2RlSGVpZ2h0O1xuICAgICAgICAgICAgc0hlaWdodCA9IG5vZGVIZWlnaHQgKiBzY2FsZVk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHNXaWR0aCwgc0hlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHZhciBoYWxmVyA9IHNXaWR0aCAvIDI7XG4gICAgICAgIHZhciBoYWxmSCA9IHNIZWlnaHQgLyAyO1xuICAgICAgICB2YXIgcmFkaXVzID0gY29ybmVyUmFkaXVzICsgKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gMjtcbiAgICAgICAgdmFyIHAgPSBuZXcgQXJyYXkocG9pbnRzLmxlbmd0aCAvIDIpO1xuICAgICAgICB2YXIgY29ybmVycyA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHBvaW50cy5sZW5ndGggLyAyOyBfaTMrKykge1xuICAgICAgICAgIHBbX2kzXSA9IHtcbiAgICAgICAgICAgIHg6IG5wb3MueCArIG9mZnNldFggKyBoYWxmVyAqIHBvaW50c1tfaTMgKiAyXSxcbiAgICAgICAgICAgIHk6IG5wb3MueSArIG9mZnNldFkgKyBoYWxmSCAqIHBvaW50c1tfaTMgKiAyICsgMV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBfaTIsXG4gICAgICAgICAgcDEsXG4gICAgICAgICAgcDIsXG4gICAgICAgICAgcDMsXG4gICAgICAgICAgbGVuID0gcC5sZW5ndGg7XG4gICAgICAgIHAxID0gcFtsZW4gLSAxXTtcbiAgICAgICAgLy8gZm9yIGVhY2ggcG9pbnRcbiAgICAgICAgZm9yIChfaTIgPSAwOyBfaTIgPCBsZW47IF9pMisrKSB7XG4gICAgICAgICAgcDIgPSBwW19pMiAlIGxlbl07XG4gICAgICAgICAgcDMgPSBwWyhfaTIgKyAxKSAlIGxlbl07XG4gICAgICAgICAgY29ybmVyc1tfaTJdID0gZ2V0Um91bmRDb3JuZXIocDEsIHAyLCBwMywgcmFkaXVzKTtcbiAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgIHAyID0gcDM7XG4gICAgICAgIH1cbiAgICAgICAgci5kcmF3Um91bmRQb2x5Z29uUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLnggKyBvZmZzZXRYLCBucG9zLnkgKyBvZmZzZXRZLCBub2RlV2lkdGggKiBzY2FsZVgsIG5vZGVIZWlnaHQgKiBzY2FsZVksIHBvaW50cywgY29ybmVycyk7XG4gICAgICB9IGVsc2UgaWYgKFsncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJ10uaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMoc1dpZHRoLCBzSGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgICAgci5kcmF3Um91bmRSZWN0YW5nbGVQYXRoKF9wYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBzV2lkdGgsIHNIZWlnaHQsIGNvcm5lclJhZGl1cyArIChiV2lkdGggKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAvIDIpO1xuICAgICAgfSBlbHNlIGlmIChbJ2N1dHJlY3RhbmdsZScsICdjdXQtcmVjdGFuZ2xlJ10uaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHIuZHJhd0N1dFJlY3RhbmdsZVBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIHNXaWR0aCwgc0hlaWdodCwgbnVsbCwgY29ybmVyUmFkaXVzICsgKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gNCk7XG4gICAgICB9IGVsc2UgaWYgKFsnYm90dG9tcm91bmRyZWN0YW5nbGUnLCAnYm90dG9tLXJvdW5kLXJlY3RhbmdsZSddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICBjb3JuZXJSYWRpdXMgPSBjb3JuZXJSYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHNXaWR0aCwgc0hlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHIuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgc1dpZHRoLCBzSGVpZ2h0LCBjb3JuZXJSYWRpdXMgKyAoYldpZHRoICsgb3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkgLyAyKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwiYmFycmVsXCIpIHtcbiAgICAgICAgci5kcmF3QmFycmVsUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgc1dpZHRoLCBzSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUuc3RhcnRzV2l0aChcInBvbHlnb25cIikgfHwgWydyaG9tYm9pZCcsICdyaWdodC1yaG9tYm9pZCcsICdyb3VuZC10YWcnLCAndGFnJywgJ3ZlZSddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICB2YXIgcGFkID0gKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gbm9kZVdpZHRoO1xuICAgICAgICBwb2ludHMgPSBqb2luTGluZXMoZXhwYW5kUG9seWdvbihwb2ludHMsIHBhZCkpO1xuICAgICAgICByLmRyYXdQb2x5Z29uUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgbm9kZVdpZHRoLCBub2RlSGVpZ2h0LCBwb2ludHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9wYWQgPSAoYldpZHRoICsgb3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkgLyBub2RlV2lkdGg7XG4gICAgICAgIHBvaW50cyA9IGpvaW5MaW5lcyhleHBhbmRQb2x5Z29uKHBvaW50cywgLV9wYWQpKTtcbiAgICAgICAgci5kcmF3UG9seWdvblBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIG5vZGVXaWR0aCwgbm9kZUhlaWdodCwgcG9pbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICBjb250ZXh0LnN0cm9rZShfcGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgaWYgKG91dGxpbmVTdHlsZSA9PT0gJ2RvdWJsZScpIHtcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBiV2lkdGggLyAzO1xuICAgICAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7XG4gICAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKF9wYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZ2NvO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBpbiBjYXNlIHdlIGNoYW5nZWQgdGhlIGJvcmRlciBzdHlsZVxuICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdPdmVybGF5ID0gZnVuY3Rpb24gZHJhd092ZXJsYXkoKSB7XG4gICAgaWYgKHNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICByLmRyYXdOb2RlT3ZlcmxheShjb250ZXh0LCBub2RlLCBwb3MsIG5vZGVXaWR0aCwgbm9kZUhlaWdodCk7XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd1VuZGVybGF5ID0gZnVuY3Rpb24gZHJhd1VuZGVybGF5KCkge1xuICAgIGlmIChzaG91bGREcmF3T3ZlcmxheSkge1xuICAgICAgci5kcmF3Tm9kZVVuZGVybGF5KGNvbnRleHQsIG5vZGUsIHBvcywgbm9kZVdpZHRoLCBub2RlSGVpZ2h0KTtcbiAgICB9XG4gIH07XG4gIHZhciBkcmF3VGV4dCA9IGZ1bmN0aW9uIGRyYXdUZXh0KCkge1xuICAgIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIG5vZGUsIG51bGwsIGRyYXdMYWJlbCk7XG4gIH07XG4gIHZhciBnaG9zdCA9IG5vZGUucHN0eWxlKCdnaG9zdCcpLnZhbHVlID09PSAneWVzJztcbiAgaWYgKGdob3N0KSB7XG4gICAgdmFyIGd4ID0gbm9kZS5wc3R5bGUoJ2dob3N0LW9mZnNldC14JykucGZWYWx1ZTtcbiAgICB2YXIgZ3kgPSBub2RlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXknKS5wZlZhbHVlO1xuICAgIHZhciBnaG9zdE9wYWNpdHkgPSBub2RlLnBzdHlsZSgnZ2hvc3Qtb3BhY2l0eScpLnZhbHVlO1xuICAgIHZhciBlZmZHaG9zdE9wYWNpdHkgPSBnaG9zdE9wYWNpdHkgKiBlbGVPcGFjaXR5O1xuICAgIGNvbnRleHQudHJhbnNsYXRlKGd4LCBneSk7XG4gICAgc2V0dXBPdXRsaW5lQ29sb3IoKTtcbiAgICBkcmF3T3V0bGluZSgpO1xuICAgIHNldHVwU2hhcGVDb2xvcihnaG9zdE9wYWNpdHkgKiBiZ09wYWNpdHkpO1xuICAgIGRyYXdTaGFwZSgpO1xuICAgIGRyYXdJbWFnZXMoZWZmR2hvc3RPcGFjaXR5LCB0cnVlKTtcbiAgICBzZXR1cEJvcmRlckNvbG9yKGdob3N0T3BhY2l0eSAqIGJvcmRlck9wYWNpdHkpO1xuICAgIGRyYXdCb3JkZXIoKTtcbiAgICBkcmF3UGllKGRhcmtuZXNzICE9PSAwIHx8IGJvcmRlcldpZHRoICE9PSAwKTtcbiAgICBkcmF3SW1hZ2VzKGVmZkdob3N0T3BhY2l0eSwgZmFsc2UpO1xuICAgIGRhcmtlbihlZmZHaG9zdE9wYWNpdHkpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1neCwgLWd5KTtcbiAgfVxuICBpZiAodXNlUGF0aHMpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtcG9zLngsIC1wb3MueSk7XG4gIH1cbiAgZHJhd1VuZGVybGF5KCk7XG4gIGlmICh1c2VQYXRocykge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKHBvcy54LCBwb3MueSk7XG4gIH1cbiAgc2V0dXBPdXRsaW5lQ29sb3IoKTtcbiAgZHJhd091dGxpbmUoKTtcbiAgc2V0dXBTaGFwZUNvbG9yKCk7XG4gIGRyYXdTaGFwZSgpO1xuICBkcmF3SW1hZ2VzKGVsZU9wYWNpdHksIHRydWUpO1xuICBzZXR1cEJvcmRlckNvbG9yKCk7XG4gIGRyYXdCb3JkZXIoKTtcbiAgZHJhd1BpZShkYXJrbmVzcyAhPT0gMCB8fCBib3JkZXJXaWR0aCAhPT0gMCk7XG4gIGRyYXdJbWFnZXMoZWxlT3BhY2l0eSwgZmFsc2UpO1xuICBkYXJrZW4oKTtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgY29udGV4dC50cmFuc2xhdGUoLXBvcy54LCAtcG9zLnkpO1xuICB9XG4gIGRyYXdUZXh0KCk7XG4gIGRyYXdPdmVybGF5KCk7XG5cbiAgLy9cbiAgLy8gY2xlYW4gdXAgc2hpZnRcblxuICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKGJiLngxLCBiYi55MSk7XG4gIH1cbn07XG52YXIgZHJhd05vZGVPdmVybGF5VW5kZXJsYXkgPSBmdW5jdGlvbiBkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheShvdmVybGF5T3JVbmRlcmxheSkge1xuICBpZiAoIVsnb3ZlcmxheScsICd1bmRlcmxheSddLmluY2x1ZGVzKG92ZXJsYXlPclVuZGVybGF5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZScpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoY29udGV4dCwgbm9kZSwgcG9zLCBub2RlV2lkdGgsIG5vZGVIZWlnaHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgaWYgKCFub2RlLnZpc2libGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcGFkZGluZyA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1wYWRkaW5nXCIpKS5wZlZhbHVlO1xuICAgIHZhciBvcGFjaXR5ID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLW9wYWNpdHlcIikpLnZhbHVlO1xuICAgIHZhciBjb2xvciA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1jb2xvclwiKSkudmFsdWU7XG4gICAgdmFyIHNoYXBlID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLXNoYXBlXCIpKS52YWx1ZTtcbiAgICB2YXIgcmFkaXVzID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLWNvcm5lci1yYWRpdXNcIikpLnZhbHVlO1xuICAgIGlmIChvcGFjaXR5ID4gMCkge1xuICAgICAgcG9zID0gcG9zIHx8IG5vZGUucG9zaXRpb24oKTtcbiAgICAgIGlmIChub2RlV2lkdGggPT0gbnVsbCB8fCBub2RlSGVpZ2h0ID09IG51bGwpIHtcbiAgICAgICAgdmFyIF9wYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gICAgICAgIG5vZGVXaWR0aCA9IG5vZGUud2lkdGgoKSArIDIgKiBfcGFkZGluZztcbiAgICAgICAgbm9kZUhlaWdodCA9IG5vZGUuaGVpZ2h0KCkgKyAyICogX3BhZGRpbmc7XG4gICAgICB9XG4gICAgICByLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgICAgci5ub2RlU2hhcGVzW3NoYXBlXS5kcmF3KGNvbnRleHQsIHBvcy54LCBwb3MueSwgbm9kZVdpZHRoICsgcGFkZGluZyAqIDIsIG5vZGVIZWlnaHQgKyBwYWRkaW5nICogMiwgcmFkaXVzKTtcbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIH1cbiAgfTtcbn07XG5DUnAkNS5kcmF3Tm9kZU92ZXJsYXkgPSBkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheSgnb3ZlcmxheScpO1xuQ1JwJDUuZHJhd05vZGVVbmRlcmxheSA9IGRyYXdOb2RlT3ZlcmxheVVuZGVybGF5KCd1bmRlcmxheScpO1xuXG4vLyBkb2VzIHRoZSBub2RlIGhhdmUgYXQgbGVhc3Qgb25lIHBpZSBwaWVjZT9cbkNScCQ1Lmhhc1BpZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIG5vZGUgPSBub2RlWzBdOyAvLyBlbnN1cmUgZWxlIHJlZlxuXG4gIHJldHVybiBub2RlLl9wcml2YXRlLmhhc1BpZTtcbn07XG5DUnAkNS5kcmF3UGllID0gZnVuY3Rpb24gKGNvbnRleHQsIG5vZGUsIG5vZGVPcGFjaXR5LCBwb3MpIHtcbiAgbm9kZSA9IG5vZGVbMF07IC8vIGVuc3VyZSBlbGUgcmVmXG4gIHBvcyA9IHBvcyB8fCBub2RlLnBvc2l0aW9uKCk7XG4gIHZhciBjeVN0eWxlID0gbm9kZS5jeSgpLnN0eWxlKCk7XG4gIHZhciBwaWVTaXplID0gbm9kZS5wc3R5bGUoJ3BpZS1zaXplJyk7XG4gIHZhciB4ID0gcG9zLng7XG4gIHZhciB5ID0gcG9zLnk7XG4gIHZhciBub2RlVyA9IG5vZGUud2lkdGgoKTtcbiAgdmFyIG5vZGVIID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHJhZGl1cyA9IE1hdGgubWluKG5vZGVXLCBub2RlSCkgLyAyOyAvLyBtdXN0IGZpdCBpbiBub2RlXG4gIHZhciBsYXN0UGVyY2VudCA9IDA7IC8vIHdoYXQgJSB0byBjb250aW51ZSBkcmF3aW5nIHBpZSBzbGljZXMgZnJvbSBvbiBbMCwgMV1cbiAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICB4ID0gMDtcbiAgICB5ID0gMDtcbiAgfVxuICBpZiAocGllU2l6ZS51bml0cyA9PT0gJyUnKSB7XG4gICAgcmFkaXVzID0gcmFkaXVzICogcGllU2l6ZS5wZlZhbHVlO1xuICB9IGVsc2UgaWYgKHBpZVNpemUucGZWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmFkaXVzID0gcGllU2l6ZS5wZlZhbHVlIC8gMjtcbiAgfVxuICBmb3IgKHZhciBpID0gMTsgaSA8PSBjeVN0eWxlLnBpZUJhY2tncm91bmROOyBpKyspIHtcbiAgICAvLyAxLi5OXG4gICAgdmFyIHNpemUgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLXNpemUnKS52YWx1ZTtcbiAgICB2YXIgY29sb3IgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLWNvbG9yJykudmFsdWU7XG4gICAgdmFyIG9wYWNpdHkgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLW9wYWNpdHknKS52YWx1ZSAqIG5vZGVPcGFjaXR5O1xuICAgIHZhciBwZXJjZW50ID0gc2l6ZSAvIDEwMDsgLy8gbWFwIGludGVnZXIgcmFuZ2UgWzAsIDEwMF0gdG8gWzAsIDFdXG5cbiAgICAvLyBwZXJjZW50IGNhbid0IHB1c2ggYmV5b25kIDFcbiAgICBpZiAocGVyY2VudCArIGxhc3RQZXJjZW50ID4gMSkge1xuICAgICAgcGVyY2VudCA9IDEgLSBsYXN0UGVyY2VudDtcbiAgICB9XG4gICAgdmFyIGFuZ2xlU3RhcnQgPSAxLjUgKiBNYXRoLlBJICsgMiAqIE1hdGguUEkgKiBsYXN0UGVyY2VudDsgLy8gc3RhcnQgYXQgMTIgbydjbG9jayBhbmQgZ28gY2xvY2t3aXNlXG4gICAgdmFyIGFuZ2xlRGVsdGEgPSAyICogTWF0aC5QSSAqIHBlcmNlbnQ7XG4gICAgdmFyIGFuZ2xlRW5kID0gYW5nbGVTdGFydCArIGFuZ2xlRGVsdGE7XG5cbiAgICAvLyBpZ25vcmUgaWZcbiAgICAvLyAtIHplcm8gc2l6ZVxuICAgIC8vIC0gd2UncmUgYWxyZWFkeSBiZXlvbmQgdGhlIGZ1bGwgY2lyY2xlXG4gICAgLy8gLSBhZGRpbmcgdGhlIGN1cnJlbnQgc2xpY2Ugd291bGQgZ28gYmV5b25kIHRoZSBmdWxsIGNpcmNsZVxuICAgIGlmIChzaXplID09PSAwIHx8IGxhc3RQZXJjZW50ID49IDEgfHwgbGFzdFBlcmNlbnQgKyBwZXJjZW50ID4gMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgY29udGV4dC5hcmMoeCwgeSwgcmFkaXVzLCBhbmdsZVN0YXJ0LCBhbmdsZUVuZCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGxhc3RQZXJjZW50ICs9IHBlcmNlbnQ7XG4gIH1cbn07XG5cbnZhciBDUnAkNCA9IHt9O1xudmFyIG1vdGlvbkJsdXJEZWxheSA9IDEwMDtcblxuLy8gdmFyIGlzRmlyZWZveCA9IHR5cGVvZiBJbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCc7XG5cbkNScCQ0LmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5kYXRhLmNvbnRleHRzWzBdO1xuICBpZiAodGhpcy5mb3JjZWRQaXhlbFJhdGlvICE9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO1xuICB9XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSB0aGlzLmN5LndpbmRvdygpO1xuICB2YXIgYmFja2luZ1N0b3JlID0gY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IGNvbnRleHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCBjb250ZXh0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCBjb250ZXh0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIChjb250YWluZXJXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvIGJhY2tpbmdTdG9yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxufTtcblxuQ1JwJDQucGFpbnRDYWNoZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBjYWNoZXMgPSB0aGlzLnBhaW50Q2FjaGVzID0gdGhpcy5wYWludENhY2hlcyB8fCBbXTtcbiAgdmFyIG5lZWRUb0NyZWF0ZUNhY2hlID0gdHJ1ZTtcbiAgdmFyIGNhY2hlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGNhY2hlID0gY2FjaGVzW2ldO1xuICAgIGlmIChjYWNoZS5jb250ZXh0ID09PSBjb250ZXh0KSB7XG4gICAgICBuZWVkVG9DcmVhdGVDYWNoZSA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChuZWVkVG9DcmVhdGVDYWNoZSkge1xuICAgIGNhY2hlID0ge1xuICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH07XG4gICAgY2FjaGVzLnB1c2goY2FjaGUpO1xuICB9XG4gIHJldHVybiBjYWNoZTtcbn07XG5DUnAkNC5jcmVhdGVHcmFkaWVudFN0eWxlRm9yID0gZnVuY3Rpb24gKGNvbnRleHQsIHNoYXBlU3R5bGVOYW1lLCBlbGUsIGZpbGwsIG9wYWNpdHkpIHtcbiAgdmFyIGdyYWRpZW50U3R5bGU7XG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKTtcbiAgdmFyIGNvbG9ycyA9IGVsZS5wc3R5bGUoc2hhcGVTdHlsZU5hbWUgKyAnLWdyYWRpZW50LXN0b3AtY29sb3JzJykudmFsdWUsXG4gICAgcG9zaXRpb25zID0gZWxlLnBzdHlsZShzaGFwZVN0eWxlTmFtZSArICctZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnKS5wZlZhbHVlO1xuICBpZiAoZmlsbCA9PT0gJ3JhZGlhbC1ncmFkaWVudCcpIHtcbiAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICB2YXIgc3RhcnQgPSBlbGUuc291cmNlRW5kcG9pbnQoKSxcbiAgICAgICAgZW5kID0gZWxlLnRhcmdldEVuZHBvaW50KCksXG4gICAgICAgIG1pZCA9IGVsZS5taWRwb2ludCgpO1xuICAgICAgdmFyIGQxID0gZGlzdChzdGFydCwgbWlkKTtcbiAgICAgIHZhciBkMiA9IGRpc3QoZW5kLCBtaWQpO1xuICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQobWlkLngsIG1pZC55LCAwLCBtaWQueCwgbWlkLnksIE1hdGgubWF4KGQxLCBkMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcG9zID0gdXNlUGF0aHMgPyB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH0gOiBlbGUucG9zaXRpb24oKSxcbiAgICAgICAgd2lkdGggPSBlbGUucGFkZGVkV2lkdGgoKSxcbiAgICAgICAgaGVpZ2h0ID0gZWxlLnBhZGRlZEhlaWdodCgpO1xuICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQocG9zLngsIHBvcy55LCAwLCBwb3MueCwgcG9zLnksIE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgdmFyIF9zdGFydCA9IGVsZS5zb3VyY2VFbmRwb2ludCgpLFxuICAgICAgICBfZW5kID0gZWxlLnRhcmdldEVuZHBvaW50KCk7XG4gICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfc3RhcnQueCwgX3N0YXJ0LnksIF9lbmQueCwgX2VuZC55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9wb3MgPSB1c2VQYXRocyA/IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfSA6IGVsZS5wb3NpdGlvbigpLFxuICAgICAgICBfd2lkdGggPSBlbGUucGFkZGVkV2lkdGgoKSxcbiAgICAgICAgX2hlaWdodCA9IGVsZS5wYWRkZWRIZWlnaHQoKSxcbiAgICAgICAgaGFsZldpZHRoID0gX3dpZHRoIC8gMixcbiAgICAgICAgaGFsZkhlaWdodCA9IF9oZWlnaHQgLyAyO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uJykudmFsdWU7XG4gICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICd0by1ib3R0b20nOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54LCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tdG9wJzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLngsIF9wb3MueSArIGhhbGZIZWlnaHQsIF9wb3MueCwgX3Bvcy55IC0gaGFsZkhlaWdodCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLWxlZnQnOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLXJpZ2h0JzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSwgX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0by1ib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICd0by1yaWdodC1ib3R0b20nOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tdG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAndG8tcmlnaHQtdG9wJzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSArIGhhbGZIZWlnaHQsIF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLWJvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAndG8tbGVmdC1ib3R0b20nOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54IC0gaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tdG9wLWxlZnQnOlxuICAgICAgICBjYXNlICd0by1sZWZ0LXRvcCc6XG4gICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSAtIGhhbGZIZWlnaHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBpbnZhbGlkIGdyYWRpZW50IHN0eWxlXG5cbiAgdmFyIGhhc1Bvc2l0aW9ucyA9IHBvc2l0aW9ucy5sZW5ndGggPT09IGNvbG9ycy5sZW5ndGg7XG4gIHZhciBsZW5ndGggPSBjb2xvcnMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgZ3JhZGllbnRTdHlsZS5hZGRDb2xvclN0b3AoaGFzUG9zaXRpb25zID8gcG9zaXRpb25zW2ldIDogaSAvIChsZW5ndGggLSAxKSwgJ3JnYmEoJyArIGNvbG9yc1tpXVswXSArICcsJyArIGNvbG9yc1tpXVsxXSArICcsJyArIGNvbG9yc1tpXVsyXSArICcsJyArIG9wYWNpdHkgKyAnKScpO1xuICB9XG4gIHJldHVybiBncmFkaWVudFN0eWxlO1xufTtcbkNScCQ0LmdyYWRpZW50RmlsbFN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgZmlsbCwgb3BhY2l0eSkge1xuICB2YXIgZ3JhZGllbnRTdHlsZSA9IHRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcihjb250ZXh0LCAnYmFja2dyb3VuZCcsIGVsZSwgZmlsbCwgb3BhY2l0eSk7XG4gIGlmICghZ3JhZGllbnRTdHlsZSkgcmV0dXJuIG51bGw7IC8vIGVycm9yXG4gIGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnRTdHlsZTtcbn07XG5DUnAkNC5jb2xvckZpbGxTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCByLCBnLCBiLCBhKSB7XG4gIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHIgKyAnLCcgKyBnICsgJywnICsgYiArICcsJyArIGEgKyAnKSc7XG4gIC8vIHR1cm4gb2ZmIGZvciBub3csIHNlZW1zIGNvbnRleHQgZG9lcyBpdHMgb3duIGNhY2hpbmdcblxuICAvLyB2YXIgY2FjaGUgPSB0aGlzLnBhaW50Q2FjaGUoY29udGV4dCk7XG5cbiAgLy8gdmFyIGZpbGxTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuXG4gIC8vIGlmKCBjYWNoZS5maWxsU3R5bGUgIT09IGZpbGxTdHlsZSApe1xuICAvLyAgIGNvbnRleHQuZmlsbFN0eWxlID0gY2FjaGUuZmlsbFN0eWxlID0gZmlsbFN0eWxlO1xuICAvLyB9XG59O1xuXG5DUnAkNC5lbGVGaWxsU3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBvcGFjaXR5KSB7XG4gIHZhciBiYWNrZ3JvdW5kRmlsbCA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZmlsbCcpLnZhbHVlO1xuICBpZiAoYmFja2dyb3VuZEZpbGwgPT09ICdsaW5lYXItZ3JhZGllbnQnIHx8IGJhY2tncm91bmRGaWxsID09PSAncmFkaWFsLWdyYWRpZW50Jykge1xuICAgIHRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoY29udGV4dCwgZWxlLCBiYWNrZ3JvdW5kRmlsbCwgb3BhY2l0eSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtY29sb3InKS52YWx1ZTtcbiAgICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGJhY2tncm91bmRDb2xvclswXSwgYmFja2dyb3VuZENvbG9yWzFdLCBiYWNrZ3JvdW5kQ29sb3JbMl0sIG9wYWNpdHkpO1xuICB9XG59O1xuQ1JwJDQuZ3JhZGllbnRTdHJva2VTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIGZpbGwsIG9wYWNpdHkpIHtcbiAgdmFyIGdyYWRpZW50U3R5bGUgPSB0aGlzLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3IoY29udGV4dCwgJ2xpbmUnLCBlbGUsIGZpbGwsIG9wYWNpdHkpO1xuICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBlcnJvclxuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZ3JhZGllbnRTdHlsZTtcbn07XG5DUnAkNC5jb2xvclN0cm9rZVN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIHIsIGcsIGIsIGEpIHtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuICAvLyB0dXJuIG9mZiBmb3Igbm93LCBzZWVtcyBjb250ZXh0IGRvZXMgaXRzIG93biBjYWNoaW5nXG5cbiAgLy8gdmFyIGNhY2hlID0gdGhpcy5wYWludENhY2hlKGNvbnRleHQpO1xuXG4gIC8vIHZhciBzdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuXG4gIC8vIGlmKCBjYWNoZS5zdHJva2VTdHlsZSAhPT0gc3Ryb2tlU3R5bGUgKXtcbiAgLy8gICBjb250ZXh0LnN0cm9rZVN0eWxlID0gY2FjaGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTtcbiAgLy8gfVxufTtcblxuQ1JwJDQuZWxlU3Ryb2tlU3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBvcGFjaXR5KSB7XG4gIHZhciBsaW5lRmlsbCA9IGVsZS5wc3R5bGUoJ2xpbmUtZmlsbCcpLnZhbHVlO1xuICBpZiAobGluZUZpbGwgPT09ICdsaW5lYXItZ3JhZGllbnQnIHx8IGxpbmVGaWxsID09PSAncmFkaWFsLWdyYWRpZW50Jykge1xuICAgIHRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZShjb250ZXh0LCBlbGUsIGxpbmVGaWxsLCBvcGFjaXR5KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGluZUNvbG9yID0gZWxlLnBzdHlsZSgnbGluZS1jb2xvcicpLnZhbHVlO1xuICAgIHRoaXMuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCBsaW5lQ29sb3JbMF0sIGxpbmVDb2xvclsxXSwgbGluZUNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgfVxufTtcblxuLy8gUmVzaXplIGNhbnZhc1xuQ1JwJDQubWF0Y2hDYW52YXNTaXplID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBkYXRhID0gci5kYXRhO1xuICB2YXIgYmIgPSByLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgdmFyIHdpZHRoID0gYmJbMl07XG4gIHZhciBoZWlnaHQgPSBiYlszXTtcbiAgdmFyIHBpeGVsUmF0aW8gPSByLmdldFBpeGVsUmF0aW8oKTtcbiAgdmFyIG1iUHhSYXRpbyA9IHIubW90aW9uQmx1clB4UmF0aW87XG4gIGlmIChjb250YWluZXIgPT09IHIuZGF0YS5idWZmZXJDYW52YXNlc1tyLk1PVElPTkJMVVJfQlVGRkVSX05PREVdIHx8IGNvbnRhaW5lciA9PT0gci5kYXRhLmJ1ZmZlckNhbnZhc2VzW3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pIHtcbiAgICBwaXhlbFJhdGlvID0gbWJQeFJhdGlvO1xuICB9XG4gIHZhciBjYW52YXNXaWR0aCA9IHdpZHRoICogcGl4ZWxSYXRpbztcbiAgdmFyIGNhbnZhc0hlaWdodCA9IGhlaWdodCAqIHBpeGVsUmF0aW87XG4gIHZhciBjYW52YXM7XG4gIGlmIChjYW52YXNXaWR0aCA9PT0gci5jYW52YXNXaWR0aCAmJiBjYW52YXNIZWlnaHQgPT09IHIuY2FudmFzSGVpZ2h0KSB7XG4gICAgcmV0dXJuOyAvLyBzYXZlIGN5Y2xlcyBpZiBzYW1lXG4gIH1cblxuICByLmZvbnRDYWNoZXMgPSBudWxsOyAvLyByZXNpemluZyByZXNldHMgdGhlIHN0eWxlXG5cbiAgdmFyIGNhbnZhc0NvbnRhaW5lciA9IGRhdGEuY2FudmFzQ29udGFpbmVyO1xuICBjYW52YXNDb250YWluZXIuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gIGNhbnZhc0NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHIuQ0FOVkFTX0xBWUVSUzsgaSsrKSB7XG4gICAgY2FudmFzID0gZGF0YS5jYW52YXNlc1tpXTtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHIuQlVGRkVSX0NPVU5UOyBpKyspIHtcbiAgICBjYW52YXMgPSBkYXRhLmJ1ZmZlckNhbnZhc2VzW2ldO1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICB9XG4gIHIudGV4dHVyZU11bHQgPSAxO1xuICBpZiAocGl4ZWxSYXRpbyA8PSAxKSB7XG4gICAgY2FudmFzID0gZGF0YS5idWZmZXJDYW52YXNlc1tyLlRFWFRVUkVfQlVGRkVSXTtcbiAgICByLnRleHR1cmVNdWx0ID0gMjtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aCAqIHIudGV4dHVyZU11bHQ7XG4gICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHIudGV4dHVyZU11bHQ7XG4gIH1cbiAgci5jYW52YXNXaWR0aCA9IGNhbnZhc1dpZHRoO1xuICByLmNhbnZhc0hlaWdodCA9IGNhbnZhc0hlaWdodDtcbn07XG5DUnAkNC5yZW5kZXJUbyA9IGZ1bmN0aW9uIChjeHQsIHpvb20sIHBhbiwgcHhSYXRpbykge1xuICB0aGlzLnJlbmRlcih7XG4gICAgZm9yY2VkQ29udGV4dDogY3h0LFxuICAgIGZvcmNlZFpvb206IHpvb20sXG4gICAgZm9yY2VkUGFuOiBwYW4sXG4gICAgZHJhd0FsbExheWVyczogdHJ1ZSxcbiAgICBmb3JjZWRQeFJhdGlvOiBweFJhdGlvXG4gIH0pO1xufTtcbkNScCQ0LnJlbmRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHN0YXRpY0VtcHR5T2JqZWN0KCk7XG4gIHZhciBmb3JjZWRDb250ZXh0ID0gb3B0aW9ucy5mb3JjZWRDb250ZXh0O1xuICB2YXIgZHJhd0FsbExheWVycyA9IG9wdGlvbnMuZHJhd0FsbExheWVycztcbiAgdmFyIGRyYXdPbmx5Tm9kZUxheWVyID0gb3B0aW9ucy5kcmF3T25seU5vZGVMYXllcjtcbiAgdmFyIGZvcmNlZFpvb20gPSBvcHRpb25zLmZvcmNlZFpvb207XG4gIHZhciBmb3JjZWRQYW4gPSBvcHRpb25zLmZvcmNlZFBhbjtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgcGl4ZWxSYXRpbyA9IG9wdGlvbnMuZm9yY2VkUHhSYXRpbyA9PT0gdW5kZWZpbmVkID8gdGhpcy5nZXRQaXhlbFJhdGlvKCkgOiBvcHRpb25zLmZvcmNlZFB4UmF0aW87XG4gIHZhciBjeSA9IHIuY3k7XG4gIHZhciBkYXRhID0gci5kYXRhO1xuICB2YXIgbmVlZERyYXcgPSBkYXRhLmNhbnZhc05lZWRzUmVkcmF3O1xuICB2YXIgdGV4dHVyZURyYXcgPSByLnRleHR1cmVPblZpZXdwb3J0ICYmICFmb3JjZWRDb250ZXh0ICYmIChyLnBpbmNoaW5nIHx8IHIuaG92ZXJEYXRhLmRyYWdnaW5nIHx8IHIuc3dpcGVQYW5uaW5nIHx8IHIuZGF0YS53aGVlbFpvb21pbmcpO1xuICB2YXIgbW90aW9uQmx1ciA9IG9wdGlvbnMubW90aW9uQmx1ciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tb3Rpb25CbHVyIDogci5tb3Rpb25CbHVyO1xuICB2YXIgbWJQeFJhdGlvID0gci5tb3Rpb25CbHVyUHhSYXRpbztcbiAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gIHZhciBpbk5vZGVEcmFnR2VzdHVyZSA9IHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcztcbiAgdmFyIGluQm94U2VsZWN0aW9uID0gci5ob3ZlckRhdGEuc2VsZWN0aW5nIHx8IHIudG91Y2hEYXRhLnNlbGVjdGluZyA/IHRydWUgOiBmYWxzZTtcbiAgbW90aW9uQmx1ciA9IG1vdGlvbkJsdXIgJiYgIWZvcmNlZENvbnRleHQgJiYgci5tb3Rpb25CbHVyRW5hYmxlZCAmJiAhaW5Cb3hTZWxlY3Rpb247XG4gIHZhciBtb3Rpb25CbHVyRmFkZUVmZmVjdCA9IG1vdGlvbkJsdXI7XG4gIGlmICghZm9yY2VkQ29udGV4dCkge1xuICAgIGlmIChyLnByZXZQeFJhdGlvICE9PSBwaXhlbFJhdGlvKSB7XG4gICAgICByLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpO1xuICAgICAgci5tYXRjaENhbnZhc1NpemUoci5jb250YWluZXIpO1xuICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICB9XG4gICAgci5wcmV2UHhSYXRpbyA9IHBpeGVsUmF0aW87XG4gIH1cbiAgaWYgKCFmb3JjZWRDb250ZXh0ICYmIHIubW90aW9uQmx1clRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQoci5tb3Rpb25CbHVyVGltZW91dCk7XG4gIH1cbiAgaWYgKG1vdGlvbkJsdXIpIHtcbiAgICBpZiAoci5tYkZyYW1lcyA9PSBudWxsKSB7XG4gICAgICByLm1iRnJhbWVzID0gMDtcbiAgICB9XG4gICAgci5tYkZyYW1lcysrO1xuICAgIGlmIChyLm1iRnJhbWVzIDwgMykge1xuICAgICAgLy8gbmVlZCBzZXZlcmFsIGZyYW1lcyBiZWZvcmUgZXZlbiBoaWdoIHF1YWxpdHkgbW90aW9uYmx1clxuICAgICAgbW90aW9uQmx1ckZhZGVFZmZlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBnbyB0byBsb3dlciBxdWFsaXR5IGJsdXJyeSBmcmFtZXMgd2hlbiBzZXZlcmFsIG0vYiBmcmFtZXMgaGF2ZSBiZWVuIHJlbmRlcmVkIChhdm9pZHMgZmxhc2hpbmcpXG4gICAgaWYgKHIubWJGcmFtZXMgPiByLm1pbk1iTG93UXVhbEZyYW1lcykge1xuICAgICAgLy9yLmZ1bGxRdWFsaXR5TWIgPSBmYWxzZTtcbiAgICAgIHIubW90aW9uQmx1clB4UmF0aW8gPSByLm1iUHhSQmx1cnJ5O1xuICAgIH1cbiAgfVxuICBpZiAoci5jbGVhcmluZ01vdGlvbkJsdXIpIHtcbiAgICByLm1vdGlvbkJsdXJQeFJhdGlvID0gMTtcbiAgfVxuXG4gIC8vIGIvYyBkcmF3VG9Db250ZXh0KCkgbWF5IGJlIGFzeW5jIHcuci50LiByZWRyYXcoKSwga2VlcCB0cmFjayBvZiBsYXN0IHRleHR1cmUgZnJhbWVcbiAgLy8gYmVjYXVzZSBhIHJvZ3VlIGFzeW5jIHRleHR1cmUgZnJhbWUgd291bGQgY2xlYXIgbmVlZERyYXdcbiAgaWYgKHIudGV4dHVyZURyYXdMYXN0RnJhbWUgJiYgIXRleHR1cmVEcmF3KSB7XG4gICAgbmVlZERyYXdbci5OT0RFXSA9IHRydWU7XG4gICAgbmVlZERyYXdbci5TRUxFQ1RfQk9YXSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciBlZmZlY3RpdmVab29tID0gZm9yY2VkWm9vbSAhPT0gdW5kZWZpbmVkID8gZm9yY2VkWm9vbSA6IHpvb207XG4gIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgdmFyIGVmZmVjdGl2ZVBhbiA9IHtcbiAgICB4OiBwYW4ueCxcbiAgICB5OiBwYW4ueVxuICB9O1xuICB2YXIgdnAgPSB7XG4gICAgem9vbTogem9vbSxcbiAgICBwYW46IHtcbiAgICAgIHg6IHBhbi54LFxuICAgICAgeTogcGFuLnlcbiAgICB9XG4gIH07XG4gIHZhciBwcmV2VnAgPSByLnByZXZWaWV3cG9ydDtcbiAgdmFyIHZpZXdwb3J0SXNEaWZmID0gcHJldlZwID09PSB1bmRlZmluZWQgfHwgdnAuem9vbSAhPT0gcHJldlZwLnpvb20gfHwgdnAucGFuLnggIT09IHByZXZWcC5wYW4ueCB8fCB2cC5wYW4ueSAhPT0gcHJldlZwLnBhbi55O1xuXG4gIC8vIHdlIHdhbnQgdGhlIGxvdyBxdWFsaXR5IG1vdGlvbmJsdXIgb25seSB3aGVuIHRoZSB2aWV3cG9ydCBpcyBiZWluZyBtYW5pcHVsYXRlZCBldGMgKHdoZXJlIGl0J3Mgbm90IG5vdGljZWQpXG4gIGlmICghdmlld3BvcnRJc0RpZmYgJiYgIShpbk5vZGVEcmFnR2VzdHVyZSAmJiAhaGFzQ29tcG91bmROb2RlcykpIHtcbiAgICByLm1vdGlvbkJsdXJQeFJhdGlvID0gMTtcbiAgfVxuICBpZiAoZm9yY2VkUGFuKSB7XG4gICAgZWZmZWN0aXZlUGFuID0gZm9yY2VkUGFuO1xuICB9XG5cbiAgLy8gYXBwbHkgcGl4ZWwgcmF0aW9cblxuICBlZmZlY3RpdmVab29tICo9IHBpeGVsUmF0aW87XG4gIGVmZmVjdGl2ZVBhbi54ICo9IHBpeGVsUmF0aW87XG4gIGVmZmVjdGl2ZVBhbi55ICo9IHBpeGVsUmF0aW87XG4gIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICBmdW5jdGlvbiBtYmNsZWFyKGNvbnRleHQsIHgsIHksIHcsIGgpIHtcbiAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcbiAgICByLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIHIubW90aW9uQmx1clRyYW5zcGFyZW5jeSk7XG4gICAgY29udGV4dC5maWxsUmVjdCh4LCB5LCB3LCBoKTtcbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgfVxuICBmdW5jdGlvbiBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIGNsZWFyKSB7XG4gICAgdmFyIGVQYW4sIGVab29tLCB3LCBoO1xuICAgIGlmICghci5jbGVhcmluZ01vdGlvbkJsdXIgJiYgKGNvbnRleHQgPT09IGRhdGEuYnVmZmVyQ29udGV4dHNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSB8fCBjb250ZXh0ID09PSBkYXRhLmJ1ZmZlckNvbnRleHRzW3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pKSB7XG4gICAgICBlUGFuID0ge1xuICAgICAgICB4OiBwYW4ueCAqIG1iUHhSYXRpbyxcbiAgICAgICAgeTogcGFuLnkgKiBtYlB4UmF0aW9cbiAgICAgIH07XG4gICAgICBlWm9vbSA9IHpvb20gKiBtYlB4UmF0aW87XG4gICAgICB3ID0gci5jYW52YXNXaWR0aCAqIG1iUHhSYXRpbztcbiAgICAgIGggPSByLmNhbnZhc0hlaWdodCAqIG1iUHhSYXRpbztcbiAgICB9IGVsc2Uge1xuICAgICAgZVBhbiA9IGVmZmVjdGl2ZVBhbjtcbiAgICAgIGVab29tID0gZWZmZWN0aXZlWm9vbTtcbiAgICAgIHcgPSByLmNhbnZhc1dpZHRoO1xuICAgICAgaCA9IHIuY2FudmFzSGVpZ2h0O1xuICAgIH1cbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICBpZiAoY2xlYXIgPT09ICdtb3Rpb25CbHVyJykge1xuICAgICAgbWJjbGVhcihjb250ZXh0LCAwLCAwLCB3LCBoKTtcbiAgICB9IGVsc2UgaWYgKCFmb3JjZWRDb250ZXh0ICYmIChjbGVhciA9PT0gdW5kZWZpbmVkIHx8IGNsZWFyKSkge1xuICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIGlmICghZHJhd0FsbExheWVycykge1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoZVBhbi54LCBlUGFuLnkpO1xuICAgICAgY29udGV4dC5zY2FsZShlWm9vbSwgZVpvb20pO1xuICAgIH1cbiAgICBpZiAoZm9yY2VkUGFuKSB7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShmb3JjZWRQYW4ueCwgZm9yY2VkUGFuLnkpO1xuICAgIH1cbiAgICBpZiAoZm9yY2VkWm9vbSkge1xuICAgICAgY29udGV4dC5zY2FsZShmb3JjZWRab29tLCBmb3JjZWRab29tKTtcbiAgICB9XG4gIH1cbiAgaWYgKCF0ZXh0dXJlRHJhdykge1xuICAgIHIudGV4dHVyZURyYXdMYXN0RnJhbWUgPSBmYWxzZTtcbiAgfVxuICBpZiAodGV4dHVyZURyYXcpIHtcbiAgICByLnRleHR1cmVEcmF3TGFzdEZyYW1lID0gdHJ1ZTtcbiAgICBpZiAoIXIudGV4dHVyZUNhY2hlKSB7XG4gICAgICByLnRleHR1cmVDYWNoZSA9IHt9O1xuICAgICAgci50ZXh0dXJlQ2FjaGUuYmIgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpO1xuICAgICAgci50ZXh0dXJlQ2FjaGUudGV4dHVyZSA9IHIuZGF0YS5idWZmZXJDYW52YXNlc1tyLlRFWFRVUkVfQlVGRkVSXTtcbiAgICAgIHZhciBjeHQgPSByLmRhdGEuYnVmZmVyQ29udGV4dHNbci5URVhUVVJFX0JVRkZFUl07XG4gICAgICBjeHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgY3h0LmNsZWFyUmVjdCgwLCAwLCByLmNhbnZhc1dpZHRoICogci50ZXh0dXJlTXVsdCwgci5jYW52YXNIZWlnaHQgKiByLnRleHR1cmVNdWx0KTtcbiAgICAgIHIucmVuZGVyKHtcbiAgICAgICAgZm9yY2VkQ29udGV4dDogY3h0LFxuICAgICAgICBkcmF3T25seU5vZGVMYXllcjogdHJ1ZSxcbiAgICAgICAgZm9yY2VkUHhSYXRpbzogcGl4ZWxSYXRpbyAqIHIudGV4dHVyZU11bHRcbiAgICAgIH0pO1xuICAgICAgdmFyIHZwID0gci50ZXh0dXJlQ2FjaGUudmlld3BvcnQgPSB7XG4gICAgICAgIHpvb206IGN5Lnpvb20oKSxcbiAgICAgICAgcGFuOiBjeS5wYW4oKSxcbiAgICAgICAgd2lkdGg6IHIuY2FudmFzV2lkdGgsXG4gICAgICAgIGhlaWdodDogci5jYW52YXNIZWlnaHRcbiAgICAgIH07XG4gICAgICB2cC5tcGFuID0ge1xuICAgICAgICB4OiAoMCAtIHZwLnBhbi54KSAvIHZwLnpvb20sXG4gICAgICAgIHk6ICgwIC0gdnAucGFuLnkpIC8gdnAuem9vbVxuICAgICAgfTtcbiAgICB9XG4gICAgbmVlZERyYXdbci5EUkFHXSA9IGZhbHNlO1xuICAgIG5lZWREcmF3W3IuTk9ERV0gPSBmYWxzZTtcbiAgICB2YXIgY29udGV4dCA9IGRhdGEuY29udGV4dHNbci5OT0RFXTtcbiAgICB2YXIgdGV4dHVyZSA9IHIudGV4dHVyZUNhY2hlLnRleHR1cmU7XG4gICAgdmFyIHZwID0gci50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgaWYgKG1vdGlvbkJsdXIpIHtcbiAgICAgIG1iY2xlYXIoY29udGV4dCwgMCwgMCwgdnAud2lkdGgsIHZwLmhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgIH1cbiAgICB2YXIgb3V0c2lkZUJnQ29sb3IgPSBzdHlsZS5jb3JlKCdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InKS52YWx1ZTtcbiAgICB2YXIgb3V0c2lkZUJnT3BhY2l0eSA9IHN0eWxlLmNvcmUoJ291dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5JykudmFsdWU7XG4gICAgci5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBvdXRzaWRlQmdDb2xvclswXSwgb3V0c2lkZUJnQ29sb3JbMV0sIG91dHNpZGVCZ0NvbG9yWzJdLCBvdXRzaWRlQmdPcGFjaXR5KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHNldENvbnRleHRUcmFuc2Zvcm0oY29udGV4dCwgZmFsc2UpO1xuICAgIGNvbnRleHQuY2xlYXJSZWN0KHZwLm1wYW4ueCwgdnAubXBhbi55LCB2cC53aWR0aCAvIHZwLnpvb20gLyBwaXhlbFJhdGlvLCB2cC5oZWlnaHQgLyB2cC56b29tIC8gcGl4ZWxSYXRpbyk7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZSwgdnAubXBhbi54LCB2cC5tcGFuLnksIHZwLndpZHRoIC8gdnAuem9vbSAvIHBpeGVsUmF0aW8sIHZwLmhlaWdodCAvIHZwLnpvb20gLyBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIGlmIChyLnRleHR1cmVPblZpZXdwb3J0ICYmICFmb3JjZWRDb250ZXh0KSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhY2hlIHNpbmNlIHdlIGRvbid0IG5lZWQgaXRcbiAgICByLnRleHR1cmVDYWNoZSA9IG51bGw7XG4gIH1cbiAgdmFyIGV4dGVudCA9IGN5LmV4dGVudCgpO1xuICB2YXIgdnBNYW5pcCA9IHIucGluY2hpbmcgfHwgci5ob3ZlckRhdGEuZHJhZ2dpbmcgfHwgci5zd2lwZVBhbm5pbmcgfHwgci5kYXRhLndoZWVsWm9vbWluZyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgfHwgci5jeS5hbmltYXRlZCgpO1xuICB2YXIgaGlkZUVkZ2VzID0gci5oaWRlRWRnZXNPblZpZXdwb3J0ICYmIHZwTWFuaXA7XG4gIHZhciBuZWVkTWJDbGVhciA9IFtdO1xuICBuZWVkTWJDbGVhcltyLk5PREVdID0gIW5lZWREcmF3W3IuTk9ERV0gJiYgbW90aW9uQmx1ciAmJiAhci5jbGVhcmVkRm9yTW90aW9uQmx1cltyLk5PREVdIHx8IHIuY2xlYXJpbmdNb3Rpb25CbHVyO1xuICBpZiAobmVlZE1iQ2xlYXJbci5OT0RFXSkge1xuICAgIHIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5OT0RFXSA9IHRydWU7XG4gIH1cbiAgbmVlZE1iQ2xlYXJbci5EUkFHXSA9ICFuZWVkRHJhd1tyLkRSQUddICYmIG1vdGlvbkJsdXIgJiYgIXIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5EUkFHXSB8fCByLmNsZWFyaW5nTW90aW9uQmx1cjtcbiAgaWYgKG5lZWRNYkNsZWFyW3IuRFJBR10pIHtcbiAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuRFJBR10gPSB0cnVlO1xuICB9XG4gIGlmIChuZWVkRHJhd1tyLk5PREVdIHx8IGRyYXdBbGxMYXllcnMgfHwgZHJhd09ubHlOb2RlTGF5ZXIgfHwgbmVlZE1iQ2xlYXJbci5OT0RFXSkge1xuICAgIHZhciB1c2VCdWZmZXIgPSBtb3Rpb25CbHVyICYmICFuZWVkTWJDbGVhcltyLk5PREVdICYmIG1iUHhSYXRpbyAhPT0gMTtcbiAgICB2YXIgY29udGV4dCA9IGZvcmNlZENvbnRleHQgfHwgKHVzZUJ1ZmZlciA/IHIuZGF0YS5idWZmZXJDb250ZXh0c1tyLk1PVElPTkJMVVJfQlVGRkVSX05PREVdIDogZGF0YS5jb250ZXh0c1tyLk5PREVdKTtcbiAgICB2YXIgY2xlYXIgPSBtb3Rpb25CbHVyICYmICF1c2VCdWZmZXIgPyAnbW90aW9uQmx1cicgOiB1bmRlZmluZWQ7XG4gICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0LCBjbGVhcik7XG4gICAgaWYgKGhpZGVFZGdlcykge1xuICAgICAgci5kcmF3Q2FjaGVkTm9kZXMoY29udGV4dCwgZWxlcy5ub25kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByLmRyYXdMYXllcmVkRWxlbWVudHMoY29udGV4dCwgZWxlcy5ub25kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH1cbiAgICBpZiAoci5kZWJ1Zykge1xuICAgICAgci5kcmF3RGVidWdQb2ludHMoY29udGV4dCwgZWxlcy5ub25kcmFnKTtcbiAgICB9XG4gICAgaWYgKCFkcmF3QWxsTGF5ZXJzICYmICFtb3Rpb25CbHVyKSB7XG4gICAgICBuZWVkRHJhd1tyLk5PREVdID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICghZHJhd09ubHlOb2RlTGF5ZXIgJiYgKG5lZWREcmF3W3IuRFJBR10gfHwgZHJhd0FsbExheWVycyB8fCBuZWVkTWJDbGVhcltyLkRSQUddKSkge1xuICAgIHZhciB1c2VCdWZmZXIgPSBtb3Rpb25CbHVyICYmICFuZWVkTWJDbGVhcltyLkRSQUddICYmIG1iUHhSYXRpbyAhPT0gMTtcbiAgICB2YXIgY29udGV4dCA9IGZvcmNlZENvbnRleHQgfHwgKHVzZUJ1ZmZlciA/IHIuZGF0YS5idWZmZXJDb250ZXh0c1tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddIDogZGF0YS5jb250ZXh0c1tyLkRSQUddKTtcbiAgICBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIG1vdGlvbkJsdXIgJiYgIXVzZUJ1ZmZlciA/ICdtb3Rpb25CbHVyJyA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKGhpZGVFZGdlcykge1xuICAgICAgci5kcmF3Q2FjaGVkTm9kZXMoY29udGV4dCwgZWxlcy5kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByLmRyYXdDYWNoZWRFbGVtZW50cyhjb250ZXh0LCBlbGVzLmRyYWcsIHBpeGVsUmF0aW8sIGV4dGVudCk7XG4gICAgfVxuICAgIGlmIChyLmRlYnVnKSB7XG4gICAgICByLmRyYXdEZWJ1Z1BvaW50cyhjb250ZXh0LCBlbGVzLmRyYWcpO1xuICAgIH1cbiAgICBpZiAoIWRyYXdBbGxMYXllcnMgJiYgIW1vdGlvbkJsdXIpIHtcbiAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKHIuc2hvd0ZwcyB8fCAhZHJhd09ubHlOb2RlTGF5ZXIgJiYgbmVlZERyYXdbci5TRUxFQ1RfQk9YXSAmJiAhZHJhd0FsbExheWVycykge1xuICAgIHZhciBjb250ZXh0ID0gZm9yY2VkQ29udGV4dCB8fCBkYXRhLmNvbnRleHRzW3IuU0VMRUNUX0JPWF07XG4gICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0KTtcbiAgICBpZiAoci5zZWxlY3Rpb25bNF0gPT0gMSAmJiAoci5ob3ZlckRhdGEuc2VsZWN0aW5nIHx8IHIudG91Y2hEYXRhLnNlbGVjdGluZykpIHtcbiAgICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgICB2YXIgYm9yZGVyV2lkdGggPSBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCcpLnZhbHVlIC8gem9vbTtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGg7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMF0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMV0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMl0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LW9wYWNpdHknKS52YWx1ZSArICcpJztcbiAgICAgIGNvbnRleHQuZmlsbFJlY3Qoci5zZWxlY3Rpb25bMF0sIHIuc2VsZWN0aW9uWzFdLCByLnNlbGVjdGlvblsyXSAtIHIuc2VsZWN0aW9uWzBdLCByLnNlbGVjdGlvblszXSAtIHIuc2VsZWN0aW9uWzFdKTtcbiAgICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHtcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcicpLnZhbHVlWzBdICsgJywnICsgc3R5bGUuY29yZSgnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InKS52YWx1ZVsxXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJykudmFsdWVbMl0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LW9wYWNpdHknKS52YWx1ZSArICcpJztcbiAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHIuc2VsZWN0aW9uWzBdLCByLnNlbGVjdGlvblsxXSwgci5zZWxlY3Rpb25bMl0gLSByLnNlbGVjdGlvblswXSwgci5zZWxlY3Rpb25bM10gLSByLnNlbGVjdGlvblsxXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmJnQWN0aXZlUG9zaXN0aW9uICYmICFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgICB2YXIgcG9zID0gZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbjtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1jb2xvcicpLnZhbHVlWzBdICsgJywnICsgc3R5bGUuY29yZSgnYWN0aXZlLWJnLWNvbG9yJykudmFsdWVbMV0gKyAnLCcgKyBzdHlsZS5jb3JlKCdhY3RpdmUtYmctY29sb3InKS52YWx1ZVsyXSArICcsJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1vcGFjaXR5JykudmFsdWUgKyAnKSc7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgY29udGV4dC5hcmMocG9zLngsIHBvcy55LCBzdHlsZS5jb3JlKCdhY3RpdmUtYmctc2l6ZScpLnBmVmFsdWUgLyB6b29tLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gICAgdmFyIHRpbWVUb1JlbmRlciA9IHIubGFzdFJlZHJhd1RpbWU7XG4gICAgaWYgKHIuc2hvd0ZwcyAmJiB0aW1lVG9SZW5kZXIpIHtcbiAgICAgIHRpbWVUb1JlbmRlciA9IE1hdGgucm91bmQodGltZVRvUmVuZGVyKTtcbiAgICAgIHZhciBmcHMgPSBNYXRoLnJvdW5kKDEwMDAgLyB0aW1lVG9SZW5kZXIpO1xuICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgICAgY29udGV4dC5maWxsVGV4dCgnMSBmcmFtZSA9ICcgKyB0aW1lVG9SZW5kZXIgKyAnIG1zID0gJyArIGZwcyArICcgZnBzJywgMCwgMjApO1xuICAgICAgdmFyIG1heEZwcyA9IDYwO1xuICAgICAgY29udGV4dC5zdHJva2VSZWN0KDAsIDMwLCAyNTAsIDIwKTtcbiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMzAsIDI1MCAqIE1hdGgubWluKGZwcyAvIG1heEZwcywgMSksIDIwKTtcbiAgICB9XG4gICAgaWYgKCFkcmF3QWxsTGF5ZXJzKSB7XG4gICAgICBuZWVkRHJhd1tyLlNFTEVDVF9CT1hdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gbW90aW9uYmx1cjogYmxpdCByZW5kZXJlZCBibHVycnkgZnJhbWVzXG4gIGlmIChtb3Rpb25CbHVyICYmIG1iUHhSYXRpbyAhPT0gMSkge1xuICAgIHZhciBjeHROb2RlID0gZGF0YS5jb250ZXh0c1tyLk5PREVdO1xuICAgIHZhciB0eHROb2RlID0gci5kYXRhLmJ1ZmZlckNhbnZhc2VzW3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV07XG4gICAgdmFyIGN4dERyYWcgPSBkYXRhLmNvbnRleHRzW3IuRFJBR107XG4gICAgdmFyIHR4dERyYWcgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTtcbiAgICB2YXIgZHJhd01vdGlvbkJsdXIgPSBmdW5jdGlvbiBkcmF3TW90aW9uQmx1cihjeHQsIHR4dCwgbmVlZENsZWFyKSB7XG4gICAgICBjeHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgaWYgKG5lZWRDbGVhciB8fCAhbW90aW9uQmx1ckZhZGVFZmZlY3QpIHtcbiAgICAgICAgY3h0LmNsZWFyUmVjdCgwLCAwLCByLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYmNsZWFyKGN4dCwgMCwgMCwgci5jYW52YXNXaWR0aCwgci5jYW52YXNIZWlnaHQpO1xuICAgICAgfVxuICAgICAgdmFyIHB4ciA9IG1iUHhSYXRpbztcbiAgICAgIGN4dC5kcmF3SW1hZ2UodHh0LFxuICAgICAgLy8gaW1nXG4gICAgICAwLCAwLFxuICAgICAgLy8gc3gsIHN5XG4gICAgICByLmNhbnZhc1dpZHRoICogcHhyLCByLmNhbnZhc0hlaWdodCAqIHB4cixcbiAgICAgIC8vIHN3LCBzaFxuICAgICAgMCwgMCxcbiAgICAgIC8vIHgsIHlcbiAgICAgIHIuY2FudmFzV2lkdGgsIHIuY2FudmFzSGVpZ2h0IC8vIHcsIGhcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlmIChuZWVkRHJhd1tyLk5PREVdIHx8IG5lZWRNYkNsZWFyW3IuTk9ERV0pIHtcbiAgICAgIGRyYXdNb3Rpb25CbHVyKGN4dE5vZGUsIHR4dE5vZGUsIG5lZWRNYkNsZWFyW3IuTk9ERV0pO1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmVlZERyYXdbci5EUkFHXSB8fCBuZWVkTWJDbGVhcltyLkRSQUddKSB7XG4gICAgICBkcmF3TW90aW9uQmx1cihjeHREcmFnLCB0eHREcmFnLCBuZWVkTWJDbGVhcltyLkRSQUddKTtcbiAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgci5wcmV2Vmlld3BvcnQgPSB2cDtcbiAgaWYgKHIuY2xlYXJpbmdNb3Rpb25CbHVyKSB7XG4gICAgci5jbGVhcmluZ01vdGlvbkJsdXIgPSBmYWxzZTtcbiAgICByLm1vdGlvbkJsdXJDbGVhcmVkID0gdHJ1ZTtcbiAgICByLm1vdGlvbkJsdXIgPSB0cnVlO1xuICB9XG4gIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgci5tb3Rpb25CbHVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgci5tb3Rpb25CbHVyVGltZW91dCA9IG51bGw7XG4gICAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuTk9ERV0gPSBmYWxzZTtcbiAgICAgIHIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5EUkFHXSA9IGZhbHNlO1xuICAgICAgci5tb3Rpb25CbHVyID0gZmFsc2U7XG4gICAgICByLmNsZWFyaW5nTW90aW9uQmx1ciA9ICF0ZXh0dXJlRHJhdztcbiAgICAgIHIubWJGcmFtZXMgPSAwO1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IHRydWU7XG4gICAgICBuZWVkRHJhd1tyLkRSQUddID0gdHJ1ZTtcbiAgICAgIHIucmVkcmF3KCk7XG4gICAgfSwgbW90aW9uQmx1ckRlbGF5KTtcbiAgfVxuICBpZiAoIWZvcmNlZENvbnRleHQpIHtcbiAgICBjeS5lbWl0KCdyZW5kZXInKTtcbiAgfVxufTtcblxudmFyIENScCQzID0ge307XG5cbi8vIEBPIFBvbHlnb24gZHJhd2luZ1xuQ1JwJDMuZHJhd1BvbHlnb25QYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cykge1xuICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gIHZhciBoYWxmSCA9IGhlaWdodCAvIDI7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgY29udGV4dC5tb3ZlVG8oeCArIGhhbGZXICogcG9pbnRzWzBdLCB5ICsgaGFsZkggKiBwb2ludHNbMV0pO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZlcgKiBwb2ludHNbaSAqIDJdLCB5ICsgaGFsZkggKiBwb2ludHNbaSAqIDIgKyAxXSk7XG4gIH1cbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Um91bmRQb2x5Z29uUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpIHtcbiAgY29ybmVycy5mb3JFYWNoKGZ1bmN0aW9uIChjb3JuZXIpIHtcbiAgICByZXR1cm4gZHJhd1ByZXBhcmVkUm91bmRDb3JuZXIoY29udGV4dCwgY29ybmVyKTtcbiAgfSk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vLyBSb3VuZCByZWN0YW5nbGUgZHJhd2luZ1xuQ1JwJDMuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgY29ybmVyUmFkaXVzID0gcmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IE1hdGgubWluKHJhZGl1cywgaGFsZkhlaWdodCwgaGFsZldpZHRoKTtcbiAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IGF0IHRvcCBtaWRkbGVcbiAgY29udGV4dC5tb3ZlVG8oeCwgeSAtIGhhbGZIZWlnaHQpO1xuICAvLyBBcmMgZnJvbSBtaWRkbGUgdG9wIHRvIHJpZ2h0IHNpZGVcbiAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCwgeCArIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgLy8gQXJjIGZyb20gcmlnaHQgc2lkZSB0byBib3R0b21cbiAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCwgeSArIGhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyk7XG4gIC8vIEFyYyBmcm9tIGJvdHRvbSB0byBsZWZ0IHNpZGVcbiAgY29udGV4dC5hcmNUbyh4IC0gaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCAtIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgLy8gQXJjIGZyb20gbGVmdCBzaWRlIHRvIHRvcEJvcmRlclxuICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0LCB4LCB5IC0gaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgLy8gSm9pbiBsaW5lXG4gIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSByYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIDogcmFkaXVzO1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG5cbiAgLy8gU3RhcnQgYXQgdG9wIG1pZGRsZVxuICBjb250ZXh0Lm1vdmVUbyh4LCB5IC0gaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCwgeSk7XG4gIGNvbnRleHQuYXJjVG8oeCArIGhhbGZXaWR0aCwgeSArIGhhbGZIZWlnaHQsIHgsIHkgKyBoYWxmSGVpZ2h0LCBjb3JuZXJSYWRpdXMpO1xuICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0LCB4IC0gaGFsZldpZHRoLCB5LCBjb3JuZXJSYWRpdXMpO1xuICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgY29ybmVyTGVuZ3RoID0gY29ybmVycyA9PT0gJ2F1dG8nID8gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkgOiBjb3JuZXJzO1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG4gIGNvbnRleHQubW92ZVRvKHggLSBoYWxmV2lkdGggKyBjb3JuZXJMZW5ndGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCAtIGNvcm5lckxlbmd0aCwgeSAtIGhhbGZIZWlnaHQpO1xuICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCArIGNvcm5lckxlbmd0aCk7XG4gIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCAtIGNvcm5lckxlbmd0aCwgeSArIGhhbGZIZWlnaHQpO1xuICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoICsgY29ybmVyTGVuZ3RoLCB5ICsgaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgY29udGV4dC5saW5lVG8oeCAtIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJMZW5ndGgpO1xuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcbkNScCQzLmRyYXdCYXJyZWxQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgeEJlZ2luID0geCAtIGhhbGZXaWR0aDtcbiAgdmFyIHhFbmQgPSB4ICsgaGFsZldpZHRoO1xuICB2YXIgeUJlZ2luID0geSAtIGhhbGZIZWlnaHQ7XG4gIHZhciB5RW5kID0geSArIGhhbGZIZWlnaHQ7XG4gIHZhciBiYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICB2YXIgd09mZnNldCA9IGJhcnJlbEN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuICB2YXIgaE9mZnNldCA9IGJhcnJlbEN1cnZlQ29uc3RhbnRzLmhlaWdodE9mZnNldDtcbiAgdmFyIGN0cmxQdFhPZmZzZXQgPSBiYXJyZWxDdXJ2ZUNvbnN0YW50cy5jdHJsUHRPZmZzZXRQY3QgKiB3T2Zmc2V0O1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG4gIGNvbnRleHQubW92ZVRvKHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gIGNvbnRleHQubGluZVRvKHhCZWdpbiwgeUVuZCAtIGhPZmZzZXQpO1xuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEJlZ2luICsgY3RybFB0WE9mZnNldCwgeUVuZCwgeEJlZ2luICsgd09mZnNldCwgeUVuZCk7XG4gIGNvbnRleHQubGluZVRvKHhFbmQgLSB3T2Zmc2V0LCB5RW5kKTtcbiAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHhFbmQgLSBjdHJsUHRYT2Zmc2V0LCB5RW5kLCB4RW5kLCB5RW5kIC0gaE9mZnNldCk7XG4gIGNvbnRleHQubGluZVRvKHhFbmQsIHlCZWdpbiArIGhPZmZzZXQpO1xuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEVuZCAtIHdPZmZzZXQsIHlCZWdpbik7XG4gIGNvbnRleHQubGluZVRvKHhCZWdpbiArIHdPZmZzZXQsIHlCZWdpbik7XG4gIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyh4QmVnaW4gKyBjdHJsUHRYT2Zmc2V0LCB5QmVnaW4sIHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xudmFyIHNpbjAgPSBNYXRoLnNpbigwKTtcbnZhciBjb3MwID0gTWF0aC5jb3MoMCk7XG52YXIgc2luID0ge307XG52YXIgY29zID0ge307XG52YXIgZWxsaXBzZVN0ZXBTaXplID0gTWF0aC5QSSAvIDQwO1xuZm9yICh2YXIgaSA9IDAgKiBNYXRoLlBJOyBpIDwgMiAqIE1hdGguUEk7IGkgKz0gZWxsaXBzZVN0ZXBTaXplKSB7XG4gIHNpbltpXSA9IE1hdGguc2luKGkpO1xuICBjb3NbaV0gPSBNYXRoLmNvcyhpKTtcbn1cbkNScCQzLmRyYXdFbGxpcHNlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgaWYgKGNvbnRleHQuZWxsaXBzZSkge1xuICAgIGNvbnRleHQuZWxsaXBzZShjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIsIDAsIDAsIDIgKiBNYXRoLlBJKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgeFBvcywgeVBvcztcbiAgICB2YXIgcncgPSB3aWR0aCAvIDI7XG4gICAgdmFyIHJoID0gaGVpZ2h0IC8gMjtcbiAgICBmb3IgKHZhciBpID0gMCAqIE1hdGguUEk7IGkgPCAyICogTWF0aC5QSTsgaSArPSBlbGxpcHNlU3RlcFNpemUpIHtcbiAgICAgIHhQb3MgPSBjZW50ZXJYIC0gcncgKiBzaW5baV0gKiBzaW4wICsgcncgKiBjb3NbaV0gKiBjb3MwO1xuICAgICAgeVBvcyA9IGNlbnRlclkgKyByaCAqIGNvc1tpXSAqIHNpbjAgKyByaCAqIHNpbltpXSAqIGNvczA7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4UG9zLCB5UG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyogZ2xvYmFsIGF0b2IsIEFycmF5QnVmZmVyLCBVaW50OEFycmF5LCBCbG9iICovXG52YXIgQ1JwJDIgPSB7fTtcbkNScCQyLmNyZWF0ZUJ1ZmZlciA9IGZ1bmN0aW9uICh3LCBoKSB7XG4gIHZhciBidWZmZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICBidWZmZXIud2lkdGggPSB3O1xuICBidWZmZXIuaGVpZ2h0ID0gaDtcbiAgcmV0dXJuIFtidWZmZXIsIGJ1ZmZlci5nZXRDb250ZXh0KCcyZCcpXTtcbn07XG5DUnAkMi5idWZmZXJDYW52YXNJbWFnZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3k7XG4gIHZhciBlbGVzID0gY3kubXV0YWJsZUVsZW1lbnRzKCk7XG4gIHZhciBiYiA9IGVsZXMuYm91bmRpbmdCb3goKTtcbiAgdmFyIGN0clJlY3QgPSB0aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgdmFyIHdpZHRoID0gb3B0aW9ucy5mdWxsID8gTWF0aC5jZWlsKGJiLncpIDogY3RyUmVjdFsyXTtcbiAgdmFyIGhlaWdodCA9IG9wdGlvbnMuZnVsbCA/IE1hdGguY2VpbChiYi5oKSA6IGN0clJlY3RbM107XG4gIHZhciBzcGVjZE1heERpbXMgPSBudW1iZXIkMShvcHRpb25zLm1heFdpZHRoKSB8fCBudW1iZXIkMShvcHRpb25zLm1heEhlaWdodCk7XG4gIHZhciBweFJhdGlvID0gdGhpcy5nZXRQaXhlbFJhdGlvKCk7XG4gIHZhciBzY2FsZSA9IDE7XG4gIGlmIChvcHRpb25zLnNjYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICB3aWR0aCAqPSBvcHRpb25zLnNjYWxlO1xuICAgIGhlaWdodCAqPSBvcHRpb25zLnNjYWxlO1xuICAgIHNjYWxlID0gb3B0aW9ucy5zY2FsZTtcbiAgfSBlbHNlIGlmIChzcGVjZE1heERpbXMpIHtcbiAgICB2YXIgbWF4U2NhbGVXID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFNjYWxlSCA9IEluZmluaXR5O1xuICAgIGlmIChudW1iZXIkMShvcHRpb25zLm1heFdpZHRoKSkge1xuICAgICAgbWF4U2NhbGVXID0gc2NhbGUgKiBvcHRpb25zLm1heFdpZHRoIC8gd2lkdGg7XG4gICAgfVxuICAgIGlmIChudW1iZXIkMShvcHRpb25zLm1heEhlaWdodCkpIHtcbiAgICAgIG1heFNjYWxlSCA9IHNjYWxlICogb3B0aW9ucy5tYXhIZWlnaHQgLyBoZWlnaHQ7XG4gICAgfVxuICAgIHNjYWxlID0gTWF0aC5taW4obWF4U2NhbGVXLCBtYXhTY2FsZUgpO1xuICAgIHdpZHRoICo9IHNjYWxlO1xuICAgIGhlaWdodCAqPSBzY2FsZTtcbiAgfVxuICBpZiAoIXNwZWNkTWF4RGltcykge1xuICAgIHdpZHRoICo9IHB4UmF0aW87XG4gICAgaGVpZ2h0ICo9IHB4UmF0aW87XG4gICAgc2NhbGUgKj0gcHhSYXRpbztcbiAgfVxuICB2YXIgYnVmZkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgYnVmZkNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICBidWZmQ2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgYnVmZkNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgYnVmZkNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICB2YXIgYnVmZkN4dCA9IGJ1ZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAvLyBSYXN0ZXJpemUgdGhlIGxheWVycywgYnV0IG9ubHkgaWYgY29udGFpbmVyIGhhcyBub256ZXJvIHNpemVcbiAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7XG4gICAgYnVmZkN4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgYnVmZkN4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuICAgIHZhciB6c29ydGVkRWxlcyA9IHRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtcbiAgICBpZiAob3B0aW9ucy5mdWxsKSB7XG4gICAgICAvLyBkcmF3IHRoZSBmdWxsIGJvdW5kcyBvZiB0aGUgZ3JhcGhcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKC1iYi54MSAqIHNjYWxlLCAtYmIueTEgKiBzY2FsZSk7XG4gICAgICBidWZmQ3h0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICB0aGlzLmRyYXdFbGVtZW50cyhidWZmQ3h0LCB6c29ydGVkRWxlcyk7XG4gICAgICBidWZmQ3h0LnNjYWxlKDEgLyBzY2FsZSwgMSAvIHNjYWxlKTtcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKGJiLngxICogc2NhbGUsIGJiLnkxICogc2NhbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkcmF3IHRoZSBjdXJyZW50IHZpZXdcbiAgICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICAgIHZhciB0cmFuc2xhdGlvbiA9IHtcbiAgICAgICAgeDogcGFuLnggKiBzY2FsZSxcbiAgICAgICAgeTogcGFuLnkgKiBzY2FsZVxuICAgICAgfTtcbiAgICAgIHNjYWxlICo9IGN5Lnpvb20oKTtcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnkpO1xuICAgICAgYnVmZkN4dC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuICAgICAgdGhpcy5kcmF3RWxlbWVudHMoYnVmZkN4dCwgenNvcnRlZEVsZXMpO1xuICAgICAgYnVmZkN4dC5zY2FsZSgxIC8gc2NhbGUsIDEgLyBzY2FsZSk7XG4gICAgICBidWZmQ3h0LnRyYW5zbGF0ZSgtdHJhbnNsYXRpb24ueCwgLXRyYW5zbGF0aW9uLnkpO1xuICAgIH1cblxuICAgIC8vIG5lZWQgdG8gZmlsbCBiZyBhdCBlbmQgbGlrZSB0aGlzIGluIG9yZGVyIHRvIGZpbGwgY2xlYXJlZCB0cmFuc3BhcmVudCBwaXhlbHMgaW4ganBnc1xuICAgIGlmIChvcHRpb25zLmJnKSB7XG4gICAgICBidWZmQ3h0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdmVyJztcbiAgICAgIGJ1ZmZDeHQuZmlsbFN0eWxlID0gb3B0aW9ucy5iZztcbiAgICAgIGJ1ZmZDeHQucmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGJ1ZmZDeHQuZmlsbCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnVmZkNhbnZhcztcbn07XG5mdW5jdGlvbiBiNjRUb0Jsb2IoYjY0LCBtaW1lVHlwZSkge1xuICB2YXIgYnl0ZXMgPSBhdG9iKGI2NCk7XG4gIHZhciBidWZmID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzLmxlbmd0aCk7XG4gIHZhciBidWZmVWludDggPSBuZXcgVWludDhBcnJheShidWZmKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgIGJ1ZmZVaW50OFtpXSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBCbG9iKFtidWZmXSwge1xuICAgIHR5cGU6IG1pbWVUeXBlXG4gIH0pO1xufVxuZnVuY3Rpb24gYjY0VXJpVG9CNjQoYjY0dXJpKSB7XG4gIHZhciBpID0gYjY0dXJpLmluZGV4T2YoJywnKTtcbiAgcmV0dXJuIGI2NHVyaS5zdWJzdHIoaSArIDEpO1xufVxuZnVuY3Rpb24gb3V0cHV0KG9wdGlvbnMsIGNhbnZhcywgbWltZVR5cGUpIHtcbiAgdmFyIGdldEI2NFVyaSA9IGZ1bmN0aW9uIGdldEI2NFVyaSgpIHtcbiAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTChtaW1lVHlwZSwgb3B0aW9ucy5xdWFsaXR5KTtcbiAgfTtcbiAgc3dpdGNoIChvcHRpb25zLm91dHB1dCkge1xuICAgIGNhc2UgJ2Jsb2ItcHJvbWlzZSc6XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FudmFzLnRvQmxvYihmdW5jdGlvbiAoYmxvYikge1xuICAgICAgICAgICAgaWYgKGJsb2IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXNvbHZlKGJsb2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIG1pbWVUeXBlLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgY2FzZSAnYmxvYic6XG4gICAgICByZXR1cm4gYjY0VG9CbG9iKGI2NFVyaVRvQjY0KGdldEI2NFVyaSgpKSwgbWltZVR5cGUpO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICByZXR1cm4gYjY0VXJpVG9CNjQoZ2V0QjY0VXJpKCkpO1xuICAgIGNhc2UgJ2Jhc2U2NHVyaSc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBnZXRCNjRVcmkoKTtcbiAgfVxufVxuQ1JwJDIucG5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG91dHB1dChvcHRpb25zLCB0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKG9wdGlvbnMpLCAnaW1hZ2UvcG5nJyk7XG59O1xuQ1JwJDIuanBnID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG91dHB1dChvcHRpb25zLCB0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKG9wdGlvbnMpLCAnaW1hZ2UvanBlZycpO1xufTtcblxudmFyIENScCQxID0ge307XG5DUnAkMS5ub2RlU2hhcGVJbXBsID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBvaW50cywgY29ybmVycykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdlbGxpcHNlJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdFbGxpcHNlUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMpO1xuICAgIGNhc2UgJ3JvdW5kLXBvbHlnb24nOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzLCBjb3JuZXJzKTtcbiAgICBjYXNlICdyb3VuZHJlY3RhbmdsZSc6XG4gICAgY2FzZSAncm91bmQtcmVjdGFuZ2xlJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVycyk7XG4gICAgY2FzZSAnY3V0cmVjdGFuZ2xlJzpcbiAgICBjYXNlICdjdXQtcmVjdGFuZ2xlJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBvaW50cywgY29ybmVycyk7XG4gICAgY2FzZSAnYm90dG9tcm91bmRyZWN0YW5nbGUnOlxuICAgIGNhc2UgJ2JvdHRvbS1yb3VuZC1yZWN0YW5nbGUnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBjb3JuZXJzKTtcbiAgICBjYXNlICdiYXJyZWwnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd0JhcnJlbFBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gIH1cbn07XG5cbnZhciBDUiA9IENhbnZhc1JlbmRlcmVyO1xudmFyIENScCA9IENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZTtcbkNScC5DQU5WQVNfTEFZRVJTID0gMztcbi8vXG5DUnAuU0VMRUNUX0JPWCA9IDA7XG5DUnAuRFJBRyA9IDE7XG5DUnAuTk9ERSA9IDI7XG5DUnAuQlVGRkVSX0NPVU5UID0gMztcbi8vXG5DUnAuVEVYVFVSRV9CVUZGRVIgPSAwO1xuQ1JwLk1PVElPTkJMVVJfQlVGRkVSX05PREUgPSAxO1xuQ1JwLk1PVElPTkJMVVJfQlVGRkVSX0RSQUcgPSAyO1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIob3B0aW9ucykge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSByLmN5LndpbmRvdygpO1xuICB2YXIgZG9jdW1lbnQgPSBjb250YWluZXJXaW5kb3cuZG9jdW1lbnQ7XG4gIHIuZGF0YSA9IHtcbiAgICBjYW52YXNlczogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICBjb250ZXh0czogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICBjYW52YXNOZWVkc1JlZHJhdzogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICBidWZmZXJDYW52YXNlczogbmV3IEFycmF5KENScC5CVUZGRVJfQ09VTlQpLFxuICAgIGJ1ZmZlckNvbnRleHRzOiBuZXcgQXJyYXkoQ1JwLkNBTlZBU19MQVlFUlMpXG4gIH07XG4gIHZhciB0YXBIbE9mZkF0dHIgPSAnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJztcbiAgdmFyIHRhcEhsT2ZmU3R5bGUgPSAncmdiYSgwLDAsMCwwKSc7XG4gIHIuZGF0YS5jYW52YXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICB2YXIgY29udGFpbmVyU3R5bGUgPSByLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlO1xuICByLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW3RhcEhsT2ZmQXR0cl0gPSB0YXBIbE9mZlN0eWxlO1xuICBjb250YWluZXJTdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gIGNvbnRhaW5lclN0eWxlLnpJbmRleCA9ICcwJztcbiAgY29udGFpbmVyU3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMuY3kuY29udGFpbmVyKCk7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChyLmRhdGEuY2FudmFzQ29udGFpbmVyKTtcbiAgY29udGFpbmVyLnN0eWxlW3RhcEhsT2ZmQXR0cl0gPSB0YXBIbE9mZlN0eWxlO1xuICB2YXIgc3R5bGVNYXAgPSB7XG4gICAgJy13ZWJraXQtdXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgJy1tb3otdXNlci1zZWxlY3QnOiAnLW1vei1ub25lJyxcbiAgICAndXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgJy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcic6ICdyZ2JhKDAsMCwwLDApJyxcbiAgICAnb3V0bGluZS1zdHlsZSc6ICdub25lJ1xuICB9O1xuICBpZiAobXMoKSkge1xuICAgIHN0eWxlTWFwWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgc3R5bGVNYXBbJ3RvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQ1JwLkNBTlZBU19MQVlFUlM7IGkrKykge1xuICAgIHZhciBjYW52YXMgPSByLmRhdGEuY2FudmFzZXNbaV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIHIuZGF0YS5jb250ZXh0c1tpXSA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIE9iamVjdC5rZXlzKHN0eWxlTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBjYW52YXMuc3R5bGVba10gPSBzdHlsZU1hcFtrXTtcbiAgICB9KTtcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnbGF5ZXInICsgaSk7XG4gICAgY2FudmFzLnN0eWxlLnpJbmRleCA9IFN0cmluZyhDUnAuQ0FOVkFTX0xBWUVSUyAtIGkpO1xuICAgIHIuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbaV0gPSBmYWxzZTtcbiAgfVxuICByLmRhdGEudG9wQ2FudmFzID0gci5kYXRhLmNhbnZhc2VzWzBdO1xuICByLmRhdGEuY2FudmFzZXNbQ1JwLk5PREVdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuTk9ERSArICctbm9kZScpO1xuICByLmRhdGEuY2FudmFzZXNbQ1JwLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuU0VMRUNUX0JPWCArICctc2VsZWN0Ym94Jyk7XG4gIHIuZGF0YS5jYW52YXNlc1tDUnAuRFJBR10uc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgJ2xheWVyJyArIENScC5EUkFHICsgJy1kcmFnJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQ1JwLkJVRkZFUl9DT1VOVDsgaSsrKSB7XG4gICAgci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICByLmRhdGEuYnVmZmVyQ29udGV4dHNbaV0gPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnYnVmZmVyJyArIGkpO1xuICAgIHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5zdHlsZS56SW5kZXggPSBTdHJpbmcoLWkgLSAxKTtcbiAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIC8vci5kYXRhLmNhbnZhc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0pO1xuICB9XG5cbiAgci5wYXRoc0VuYWJsZWQgPSB0cnVlO1xuICB2YXIgZW1wdHlCYiA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICB2YXIgZ2V0Qm94Q2VudGVyID0gZnVuY3Rpb24gZ2V0Qm94Q2VudGVyKGJiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IChiYi54MSArIGJiLngyKSAvIDIsXG4gICAgICB5OiAoYmIueTEgKyBiYi55MikgLyAyXG4gICAgfTtcbiAgfTtcbiAgdmFyIGdldENlbnRlck9mZnNldCA9IGZ1bmN0aW9uIGdldENlbnRlck9mZnNldChiYikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAtYmIudyAvIDIsXG4gICAgICB5OiAtYmIuaCAvIDJcbiAgICB9O1xuICB9O1xuICB2YXIgYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQgPSBmdW5jdGlvbiBiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZChlbGUpIHtcbiAgICB2YXIgX3AgPSBlbGVbMF0uX3ByaXZhdGU7XG4gICAgdmFyIHNhbWUgPSBfcC5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wID09PSBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wO1xuICAgIHJldHVybiAhc2FtZTtcbiAgfTtcbiAgdmFyIGdldFN0eWxlS2V5ID0gZnVuY3Rpb24gZ2V0U3R5bGVLZXkoZWxlKSB7XG4gICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS5ub2RlS2V5O1xuICB9O1xuICB2YXIgZ2V0TGFiZWxLZXkgPSBmdW5jdGlvbiBnZXRMYWJlbEtleShlbGUpIHtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXk7XG4gIH07XG4gIHZhciBnZXRTb3VyY2VMYWJlbEtleSA9IGZ1bmN0aW9uIGdldFNvdXJjZUxhYmVsS2V5KGVsZSkge1xuICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleTtcbiAgfTtcbiAgdmFyIGdldFRhcmdldExhYmVsS2V5ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxLZXkoZWxlKSB7XG4gICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5O1xuICB9O1xuICB2YXIgZHJhd0VsZW1lbnQgPSBmdW5jdGlvbiBkcmF3RWxlbWVudChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgcmV0dXJuIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlLCBiYiwgZmFsc2UsIGZhbHNlLCB1c2VFbGVPcGFjaXR5KTtcbiAgfTtcbiAgdmFyIGRyYXdMYWJlbCA9IGZ1bmN0aW9uIGRyYXdMYWJlbChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgcmV0dXJuIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVsZSwgYmIsIHNjYWxlZExhYmVsU2hvd24sICdtYWluJywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3U291cmNlTGFiZWwgPSBmdW5jdGlvbiBkcmF3U291cmNlTGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgIHJldHVybiByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCAnc291cmNlJywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3VGFyZ2V0TGFiZWwgPSBmdW5jdGlvbiBkcmF3VGFyZ2V0TGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgIHJldHVybiByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCAndGFyZ2V0JywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBnZXRFbGVtZW50Qm94ID0gZnVuY3Rpb24gZ2V0RWxlbWVudEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmJvZHlCb3VuZHM7XG4gIH07XG4gIHZhciBnZXRMYWJlbEJveCA9IGZ1bmN0aW9uIGdldExhYmVsQm94KGVsZSkge1xuICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMubWFpbiB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgZ2V0U291cmNlTGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZSB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgZ2V0VGFyZ2V0TGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnRhcmdldCB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgaXNMYWJlbFZpc2libGVBdFNjYWxlID0gZnVuY3Rpb24gaXNMYWJlbFZpc2libGVBdFNjYWxlKGVsZSwgc2NhbGVkTGFiZWxTaG93bikge1xuICAgIHJldHVybiBzY2FsZWRMYWJlbFNob3duO1xuICB9O1xuICB2YXIgZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRFbGVtZW50Um90YXRpb25Qb2ludChlbGUpIHtcbiAgICByZXR1cm4gZ2V0Qm94Q2VudGVyKGdldEVsZW1lbnRCb3goZWxlKSk7XG4gIH07XG4gIHZhciBhZGRUZXh0TWFyZ2luID0gZnVuY3Rpb24gYWRkVGV4dE1hcmdpbihwcmVmaXgsIHB0LCBlbGUpIHtcbiAgICB2YXIgcHJlID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHB0LnggKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZSxcbiAgICAgIHk6IHB0LnkgKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi15JykucGZWYWx1ZVxuICAgIH07XG4gIH07XG4gIHZhciBnZXRSc1B0ID0gZnVuY3Rpb24gZ2V0UnNQdChlbGUsIHgsIHkpIHtcbiAgICB2YXIgcnMgPSBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJzW3hdLFxuICAgICAgeTogcnNbeV1cbiAgICB9O1xuICB9O1xuICB2YXIgZ2V0TGFiZWxSb3RhdGlvblBvaW50ID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvblBvaW50KGVsZSkge1xuICAgIHJldHVybiBhZGRUZXh0TWFyZ2luKCcnLCBnZXRSc1B0KGVsZSwgJ2xhYmVsWCcsICdsYWJlbFknKSwgZWxlKTtcbiAgfTtcbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCA9IGZ1bmN0aW9uIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludChlbGUpIHtcbiAgICByZXR1cm4gYWRkVGV4dE1hcmdpbignc291cmNlJywgZ2V0UnNQdChlbGUsICdzb3VyY2VMYWJlbFgnLCAnc291cmNlTGFiZWxZJyksIGVsZSk7XG4gIH07XG4gIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgcmV0dXJuIGFkZFRleHRNYXJnaW4oJ3RhcmdldCcsIGdldFJzUHQoZWxlLCAndGFyZ2V0TGFiZWxYJywgJ3RhcmdldExhYmVsWScpLCBlbGUpO1xuICB9O1xuICB2YXIgZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0KGVsZSkge1xuICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0RWxlbWVudEJveChlbGUpKTtcbiAgfTtcbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQgPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0KGVsZSkge1xuICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0U291cmNlTGFiZWxCb3goZWxlKSk7XG4gIH07XG4gIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldChlbGUpIHtcbiAgICByZXR1cm4gZ2V0Q2VudGVyT2Zmc2V0KGdldFRhcmdldExhYmVsQm94KGVsZSkpO1xuICB9O1xuICB2YXIgZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCA9IGZ1bmN0aW9uIGdldExhYmVsUm90YXRpb25PZmZzZXQoZWxlKSB7XG4gICAgdmFyIGJiID0gZ2V0TGFiZWxCb3goZWxlKTtcbiAgICB2YXIgcCA9IGdldENlbnRlck9mZnNldChnZXRMYWJlbEJveChlbGUpKTtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBzd2l0Y2ggKGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykudmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgcC54ID0gLWJiLnc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBwLnggPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlbGUucHN0eWxlKCd0ZXh0LXZhbGlnbicpLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgcC55ID0gLWJiLmg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgcC55ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH07XG4gIHZhciBlbGVUeHJDYWNoZSA9IHIuZGF0YS5lbGVUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICBnZXRLZXk6IGdldFN0eWxlS2V5LFxuICAgIGRvZXNFbGVJbnZhbGlkYXRlS2V5OiBiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZCxcbiAgICBkcmF3RWxlbWVudDogZHJhd0VsZW1lbnQsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGdldEVsZW1lbnRCb3gsXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldEVsZW1lbnRSb3RhdGlvbk9mZnNldCxcbiAgICBhbGxvd0VkZ2VUeHJDYWNoaW5nOiBmYWxzZSxcbiAgICBhbGxvd1BhcmVudFR4ckNhY2hpbmc6IGZhbHNlXG4gIH0pO1xuICB2YXIgbGJsVHhyQ2FjaGUgPSByLmRhdGEubGJsVHhyQ2FjaGUgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZShyLCB7XG4gICAgZ2V0S2V5OiBnZXRMYWJlbEtleSxcbiAgICBkcmF3RWxlbWVudDogZHJhd0xhYmVsLFxuICAgIGdldEJvdW5kaW5nQm94OiBnZXRMYWJlbEJveCxcbiAgICBnZXRSb3RhdGlvblBvaW50OiBnZXRMYWJlbFJvdGF0aW9uUG9pbnQsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldExhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgaXNWaXNpYmxlOiBpc0xhYmVsVmlzaWJsZUF0U2NhbGVcbiAgfSk7XG4gIHZhciBzbGJUeHJDYWNoZSA9IHIuZGF0YS5zbGJUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICBnZXRLZXk6IGdldFNvdXJjZUxhYmVsS2V5LFxuICAgIGRyYXdFbGVtZW50OiBkcmF3U291cmNlTGFiZWwsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGdldFNvdXJjZUxhYmVsQm94LFxuICAgIGdldFJvdGF0aW9uUG9pbnQ6IGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCxcbiAgICBnZXRSb3RhdGlvbk9mZnNldDogZ2V0U291cmNlTGFiZWxSb3RhdGlvbk9mZnNldCxcbiAgICBpc1Zpc2libGU6IGlzTGFiZWxWaXNpYmxlQXRTY2FsZVxuICB9KTtcbiAgdmFyIHRsYlR4ckNhY2hlID0gci5kYXRhLnRsYlR4ckNhY2hlID0gbmV3IEVsZW1lbnRUZXh0dXJlQ2FjaGUociwge1xuICAgIGdldEtleTogZ2V0VGFyZ2V0TGFiZWxLZXksXG4gICAgZHJhd0VsZW1lbnQ6IGRyYXdUYXJnZXRMYWJlbCxcbiAgICBnZXRCb3VuZGluZ0JveDogZ2V0VGFyZ2V0TGFiZWxCb3gsXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvblBvaW50LFxuICAgIGdldFJvdGF0aW9uT2Zmc2V0OiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LFxuICAgIGlzVmlzaWJsZTogaXNMYWJlbFZpc2libGVBdFNjYWxlXG4gIH0pO1xuICB2YXIgbHlyVHhyQ2FjaGUgPSByLmRhdGEubHlyVHhyQ2FjaGUgPSBuZXcgTGF5ZXJlZFRleHR1cmVDYWNoZShyKTtcbiAgci5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uIGludmFsaWRhdGVUZXh0dXJlQ2FjaGVzKHdpbGxEcmF3LCBlbGVzKSB7XG4gICAgLy8gZWFjaCBjYWNoZSBzaG91bGQgY2hlY2sgZm9yIHN1Yi1rZXkgZGlmZiB0byBzZWUgdGhhdCB0aGUgdXBkYXRlIGFmZmVjdHMgdGhhdCBjYWNoZSBwYXJ0aWN1bGFybHlcbiAgICBlbGVUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG4gICAgbGJsVHhyQ2FjaGUuaW52YWxpZGF0ZUVsZW1lbnRzKGVsZXMpO1xuICAgIHNsYlR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTtcbiAgICB0bGJUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG5cbiAgICAvLyBhbnkgY2hhbmdlIGludmFsaWRhdGVzIHRoZSBsYXllcnNcbiAgICBseXJUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG5cbiAgICAvLyB1cGRhdGUgdGhlIG9sZCBiZyB0aW1lc3RhbXAgc28gZGlmZnMgY2FuIGJlIGRvbmUgaW4gdGhlIGVsZSB0eHIgY2FjaGVzXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX3AgPSBlbGVzW19pXS5fcHJpdmF0ZTtcbiAgICAgIF9wLm9sZEJhY2tncm91bmRUaW1lc3RhbXAgPSBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wO1xuICAgIH1cbiAgfSk7XG4gIHZhciByZWZpbmVJbkxheWVycyA9IGZ1bmN0aW9uIHJlZmluZUluTGF5ZXJzKHJlcXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGx5clR4ckNhY2hlLmVucXVldWVFbGVtZW50UmVmaW5lbWVudChyZXFzW2ldLmVsZSk7XG4gICAgfVxuICB9O1xuICBlbGVUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICBsYmxUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICBzbGJUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICB0bGJUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xufVxuQ1JwLnJlZHJhd0hpbnQgPSBmdW5jdGlvbiAoZ3JvdXAsIGJvb2wpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBzd2l0Y2ggKGdyb3VwKSB7XG4gICAgY2FzZSAnZWxlcyc6XG4gICAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbQ1JwLk5PREVdID0gYm9vbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RyYWcnOlxuICAgICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0NScC5EUkFHXSA9IGJvb2w7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0NScC5TRUxFQ1RfQk9YXSA9IGJvb2w7XG4gICAgICBicmVhaztcbiAgfVxufTtcblxuLy8gd2hldGhlciB0byB1c2UgUGF0aDJEIGNhY2hpbmcgZm9yIGRyYXdpbmdcbnZhciBwYXRoc0ltcGxkID0gdHlwZW9mIFBhdGgyRCAhPT0gJ3VuZGVmaW5lZCc7XG5DUnAucGF0aDJkRW5hYmxlZCA9IGZ1bmN0aW9uIChvbikge1xuICBpZiAob24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhzRW5hYmxlZDtcbiAgfVxuICB0aGlzLnBhdGhzRW5hYmxlZCA9IG9uID8gdHJ1ZSA6IGZhbHNlO1xufTtcbkNScC51c2VQYXRocyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBhdGhzSW1wbGQgJiYgdGhpcy5wYXRoc0VuYWJsZWQ7XG59O1xuQ1JwLnNldEltZ1Ntb290aGluZyA9IGZ1bmN0aW9uIChjb250ZXh0LCBib29sKSB7XG4gIGlmIChjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCAhPSBudWxsKSB7XG4gICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBib29sO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gYm9vbDtcbiAgICBjb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gICAgY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gIH1cbn07XG5DUnAuZ2V0SW1nU21vb3RoaW5nID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkICE9IG51bGwpIHtcbiAgICByZXR1cm4gY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIHx8IGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIHx8IGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ7XG4gIH1cbn07XG5DUnAubWFrZU9mZnNjcmVlbkNhbnZhcyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gIHZhciBjYW52YXM7XG4gIGlmICgodHlwZW9mIE9mZnNjcmVlbkNhbnZhcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKE9mZnNjcmVlbkNhbnZhcykpICE9PSAoXCJ1bmRlZmluZWRcIiApKSB7XG4gICAgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29udGFpbmVyV2luZG93ID0gdGhpcy5jeS53aW5kb3coKTtcbiAgICB2YXIgZG9jdW1lbnQgPSBjb250YWluZXJXaW5kb3cuZG9jdW1lbnQ7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG4gIHJldHVybiBjYW52YXM7XG59O1xuW0NScCRhLCBDUnAkOSwgQ1JwJDgsIENScCQ3LCBDUnAkNiwgQ1JwJDUsIENScCQ0LCBDUnAkMywgQ1JwJDIsIENScCQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoQ1JwLCBwcm9wcyk7XG59KTtcblxudmFyIHJlbmRlcmVyID0gW3tcbiAgbmFtZTogJ251bGwnLFxuICBpbXBsOiBOdWxsUmVuZGVyZXJcbn0sIHtcbiAgbmFtZTogJ2Jhc2UnLFxuICBpbXBsOiBCUlxufSwge1xuICBuYW1lOiAnY2FudmFzJyxcbiAgaW1wbDogQ1Jcbn1dO1xuXG52YXIgaW5jRXh0cyA9IFt7XG4gIHR5cGU6ICdsYXlvdXQnLFxuICBleHRlbnNpb25zOiBsYXlvdXRcbn0sIHtcbiAgdHlwZTogJ3JlbmRlcmVyJyxcbiAgZXh0ZW5zaW9uczogcmVuZGVyZXJcbn1dO1xuXG4vLyByZWdpc3RlcmVkIGV4dGVuc2lvbnMgdG8gY3l0b3NjYXBlLCBpbmRleGVkIGJ5IG5hbWVcbnZhciBleHRlbnNpb25zID0ge307XG5cbi8vIHJlZ2lzdGVyZWQgbW9kdWxlcyBmb3IgZXh0ZW5zaW9ucywgaW5kZXhlZCBieSBuYW1lXG52YXIgbW9kdWxlcyA9IHt9O1xuZnVuY3Rpb24gc2V0RXh0ZW5zaW9uKHR5cGUsIG5hbWUsIHJlZ2lzdHJhbnQpIHtcbiAgdmFyIGV4dCA9IHJlZ2lzdHJhbnQ7XG4gIHZhciBvdmVycmlkZUVyciA9IGZ1bmN0aW9uIG92ZXJyaWRlRXJyKGZpZWxkKSB7XG4gICAgd2FybignQ2FuIG5vdCByZWdpc3RlciBgJyArIG5hbWUgKyAnYCBmb3IgYCcgKyB0eXBlICsgJ2Agc2luY2UgYCcgKyBmaWVsZCArICdgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbicpO1xuICB9O1xuICBpZiAodHlwZSA9PT0gJ2NvcmUnKSB7XG4gICAgaWYgKENvcmUucHJvdG90eXBlW25hbWVdKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVFcnIobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvcmUucHJvdG90eXBlW25hbWVdID0gcmVnaXN0cmFudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbGxlY3Rpb24nKSB7XG4gICAgaWYgKENvbGxlY3Rpb24ucHJvdG90eXBlW25hbWVdKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVFcnIobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvbGxlY3Rpb24ucHJvdG90eXBlW25hbWVdID0gcmVnaXN0cmFudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xheW91dCcpIHtcbiAgICAvLyBmaWxsIGluIG1pc3NpbmcgbGF5b3V0IGZ1bmN0aW9ucyBpbiB0aGUgcHJvdG90eXBlXG5cbiAgICB2YXIgTGF5b3V0ID0gZnVuY3Rpb24gTGF5b3V0KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZWdpc3RyYW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBsYXlvdXQgaGFzIF9wcml2YXRlIGZvciB1c2Ugdy8gc3RkIGFwaXMgbGlrZSAub24oKVxuICAgICAgaWYgKCFwbGFpbk9iamVjdCh0aGlzLl9wcml2YXRlKSkge1xuICAgICAgICB0aGlzLl9wcml2YXRlID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLl9wcml2YXRlLmN5ID0gb3B0aW9ucy5jeTtcbiAgICAgIHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzID0gW107XG4gICAgICB0aGlzLmNyZWF0ZUVtaXR0ZXIoKTtcbiAgICB9O1xuICAgIHZhciBsYXlvdXRQcm90byA9IExheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHJlZ2lzdHJhbnQucHJvdG90eXBlKTtcbiAgICB2YXIgb3B0TGF5b3V0Rm5zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRMYXlvdXRGbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBmbk5hbWUgPSBvcHRMYXlvdXRGbnNbaV07XG4gICAgICBsYXlvdXRQcm90b1tmbk5hbWVdID0gbGF5b3V0UHJvdG9bZm5OYW1lXSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBlaXRoZXIgLnN0YXJ0KCkgb3IgLnJ1bigpIGlzIGRlZmluZWQsIHNvIGF1dG9nZW4gdGhlIG90aGVyXG4gICAgaWYgKGxheW91dFByb3RvLnN0YXJ0ICYmICFsYXlvdXRQcm90by5ydW4pIHtcbiAgICAgIGxheW91dFByb3RvLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICghbGF5b3V0UHJvdG8uc3RhcnQgJiYgbGF5b3V0UHJvdG8ucnVuKSB7XG4gICAgICBsYXlvdXRQcm90by5zdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgcmVnU3RvcCA9IHJlZ2lzdHJhbnQucHJvdG90eXBlLnN0b3A7XG4gICAgbGF5b3V0UHJvdG8uc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdHMgJiYgb3B0cy5hbmltYXRlKSB7XG4gICAgICAgIHZhciBhbmlzID0gdGhpcy5hbmltYXRpb25zO1xuICAgICAgICBpZiAoYW5pcykge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhbmlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYW5pc1tfaV0uc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlZ1N0b3ApIHtcbiAgICAgICAgcmVnU3RvcC5jYWxsKHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIGlmICghbGF5b3V0UHJvdG8uZGVzdHJveSkge1xuICAgICAgbGF5b3V0UHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH1cbiAgICBsYXlvdXRQcm90by5jeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmN5O1xuICAgIH07XG4gICAgdmFyIGdldEN5ID0gZnVuY3Rpb24gZ2V0Q3kobGF5b3V0KSB7XG4gICAgICByZXR1cm4gbGF5b3V0Ll9wcml2YXRlLmN5O1xuICAgIH07XG4gICAgdmFyIGVtaXR0ZXJPcHRzID0ge1xuICAgICAgYWRkRXZlbnRGaWVsZHM6IGZ1bmN0aW9uIGFkZEV2ZW50RmllbGRzKGxheW91dCwgZXZ0KSB7XG4gICAgICAgIGV2dC5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIGV2dC5jeSA9IGdldEN5KGxheW91dCk7XG4gICAgICAgIGV2dC50YXJnZXQgPSBsYXlvdXQ7XG4gICAgICB9LFxuICAgICAgYnViYmxlOiBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIHBhcmVudDogZnVuY3Rpb24gcGFyZW50KGxheW91dCkge1xuICAgICAgICByZXR1cm4gZ2V0Q3kobGF5b3V0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4dGVuZChsYXlvdXRQcm90bywge1xuICAgICAgY3JlYXRlRW1pdHRlcjogZnVuY3Rpb24gY3JlYXRlRW1pdHRlcigpIHtcbiAgICAgICAgdGhpcy5fcHJpdmF0ZS5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdHMsIHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBlbWl0dGVyOiBmdW5jdGlvbiBlbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyO1xuICAgICAgfSxcbiAgICAgIG9uOiBmdW5jdGlvbiBvbihldnQsIGNiKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLm9uKGV2dCwgY2IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBvbmU6IGZ1bmN0aW9uIG9uZShldnQsIGNiKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLm9uZShldnQsIGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgb25jZTogZnVuY3Rpb24gb25jZShldnQsIGNiKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLm9uZShldnQsIGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2dCwgY2IpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZ0LCBjYik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUFsbExpc3RlbmVyczogZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgZW1pdDogZnVuY3Rpb24gZW1pdChldnQsIHBhcmFtcykge1xuICAgICAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KGV2dCwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVmaW5lLmV2ZW50QWxpYXNlc09uKGxheW91dFByb3RvKTtcbiAgICBleHQgPSBMYXlvdXQ7IC8vIHJlcGxhY2Ugd2l0aCBvdXIgd3JhcHBlZCBsYXlvdXRcbiAgfSBlbHNlIGlmICh0eXBlID09PSAncmVuZGVyZXInICYmIG5hbWUgIT09ICdudWxsJyAmJiBuYW1lICE9PSAnYmFzZScpIHtcbiAgICAvLyB1c2VyIHJlZ2lzdGVyZWQgcmVuZGVyZXJzIGluaGVyaXQgZnJvbSBiYXNlXG5cbiAgICB2YXIgQmFzZVJlbmRlcmVyID0gZ2V0RXh0ZW5zaW9uKCdyZW5kZXJlcicsICdiYXNlJyk7XG4gICAgdmFyIGJQcm90byA9IEJhc2VSZW5kZXJlci5wcm90b3R5cGU7XG4gICAgdmFyIFJlZ2lzdHJhbnRSZW5kZXJlciA9IHJlZ2lzdHJhbnQ7XG4gICAgdmFyIHJQcm90byA9IHJlZ2lzdHJhbnQucHJvdG90eXBlO1xuICAgIHZhciBSZW5kZXJlciA9IGZ1bmN0aW9uIFJlbmRlcmVyKCkge1xuICAgICAgQmFzZVJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBSZWdpc3RyYW50UmVuZGVyZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIHZhciBwcm90byA9IFJlbmRlcmVyLnByb3RvdHlwZTtcbiAgICBmb3IgKHZhciBwTmFtZSBpbiBiUHJvdG8pIHtcbiAgICAgIHZhciBwVmFsID0gYlByb3RvW3BOYW1lXTtcbiAgICAgIHZhciBleGlzdHNJblIgPSByUHJvdG9bcE5hbWVdICE9IG51bGw7XG4gICAgICBpZiAoZXhpc3RzSW5SKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZUVycihwTmFtZSk7XG4gICAgICB9XG4gICAgICBwcm90b1twTmFtZV0gPSBwVmFsOyAvLyB0YWtlIGltcGwgZnJvbSBiYXNlXG4gICAgfVxuXG4gICAgZm9yICh2YXIgX3BOYW1lIGluIHJQcm90bykge1xuICAgICAgcHJvdG9bX3BOYW1lXSA9IHJQcm90b1tfcE5hbWVdOyAvLyB0YWtlIGltcGwgZnJvbSByZWdpc3RyYW50XG4gICAgfVxuXG4gICAgYlByb3RvLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBwcm90b1tuYW1lXSA9IHByb3RvW25hbWVdIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXJyb3IoJ1JlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuJyArIG5hbWUgKyAnKClgIG9uIGl0cyBwcm90b3R5cGUnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZXh0ID0gUmVuZGVyZXI7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ19fcHJvdG9fXycgfHwgdHlwZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0eXBlID09PSAncHJvdG90eXBlJykge1xuICAgIC8vIHRvIGF2b2lkIHBvdGVudGlhbCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgcmV0dXJuIGVycm9yKHR5cGUgKyAnIGlzIGFuIGlsbGVnYWwgdHlwZSB0byBiZSByZWdpc3RlcmVkLCBwb3NzaWJseSBsZWFkIHRvIHByb3RvdHlwZSBwb2xsdXRpb25zJyk7XG4gIH1cbiAgcmV0dXJuIHNldE1hcCh7XG4gICAgbWFwOiBleHRlbnNpb25zLFxuICAgIGtleXM6IFt0eXBlLCBuYW1lXSxcbiAgICB2YWx1ZTogZXh0XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHR5cGUsIG5hbWUpIHtcbiAgcmV0dXJuIGdldE1hcCh7XG4gICAgbWFwOiBleHRlbnNpb25zLFxuICAgIGtleXM6IFt0eXBlLCBuYW1lXVxuICB9KTtcbn1cbmZ1bmN0aW9uIHNldE1vZHVsZSh0eXBlLCBuYW1lLCBtb2R1bGVUeXBlLCBtb2R1bGVOYW1lLCByZWdpc3RyYW50KSB7XG4gIHJldHVybiBzZXRNYXAoe1xuICAgIG1hcDogbW9kdWxlcyxcbiAgICBrZXlzOiBbdHlwZSwgbmFtZSwgbW9kdWxlVHlwZSwgbW9kdWxlTmFtZV0sXG4gICAgdmFsdWU6IHJlZ2lzdHJhbnRcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRNb2R1bGUodHlwZSwgbmFtZSwgbW9kdWxlVHlwZSwgbW9kdWxlTmFtZSkge1xuICByZXR1cm4gZ2V0TWFwKHtcbiAgICBtYXA6IG1vZHVsZXMsXG4gICAga2V5czogW3R5cGUsIG5hbWUsIG1vZHVsZVR5cGUsIG1vZHVsZU5hbWVdXG4gIH0pO1xufVxudmFyIGV4dGVuc2lvbiA9IGZ1bmN0aW9uIGV4dGVuc2lvbigpIHtcbiAgLy8gZS5nLiBleHRlbnNpb24oJ3JlbmRlcmVyJywgJ3N2ZycpXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIGdldEV4dGVuc2lvbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLy8gZS5nLiBleHRlbnNpb24oJ3JlbmRlcmVyJywgJ3N2ZycsIHsgLi4uIH0pXG4gIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gc2V0RXh0ZW5zaW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cblxuICAvLyBlLmcuIGV4dGVuc2lvbigncmVuZGVyZXInLCAnc3ZnJywgJ25vZGVTaGFwZScsICdlbGxpcHNlJylcbiAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiBnZXRNb2R1bGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIC8vIGUuZy4gZXh0ZW5zaW9uKCdyZW5kZXJlcicsICdzdmcnLCAnbm9kZVNoYXBlJywgJ2VsbGlwc2UnLCB7IC4uLiB9KVxuICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1KSB7XG4gICAgcmV0dXJuIHNldE1vZHVsZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9IGVsc2Uge1xuICAgIGVycm9yKCdJbnZhbGlkIGV4dGVuc2lvbiBhY2Nlc3Mgc3ludGF4Jyk7XG4gIH1cbn07XG5cbi8vIGFsbG93cyBhIGNvcmUgaW5zdGFuY2UgdG8gYWNjZXNzIGV4dGVuc2lvbnMgaW50ZXJuYWxseVxuQ29yZS5wcm90b3R5cGUuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uO1xuXG4vLyBpbmNsdWRlZCBleHRlbnNpb25zXG5pbmNFeHRzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gIGdyb3VwLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoZXh0KSB7XG4gICAgc2V0RXh0ZW5zaW9uKGdyb3VwLnR5cGUsIGV4dC5uYW1lLCBleHQuaW1wbCk7XG4gIH0pO1xufSk7XG5cbi8vIGEgZHVtbXkgc3R5bGVzaGVldCBvYmplY3QgdGhhdCBkb2Vzbid0IG5lZWQgYSByZWZlcmVuY2UgdG8gdGhlIGNvcmVcbi8vICh1c2VmdWwgZm9yIGluaXQpXG52YXIgU3R5bGVzaGVldCA9IGZ1bmN0aW9uIFN0eWxlc2hlZXQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHlsZXNoZWV0KSkge1xuICAgIHJldHVybiBuZXcgU3R5bGVzaGVldCgpO1xuICB9XG4gIHRoaXMubGVuZ3RoID0gMDtcbn07XG52YXIgc2hlZXRmbiA9IFN0eWxlc2hlZXQucHJvdG90eXBlO1xuc2hlZXRmbi5pbnN0YW5jZVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdzdHlsZXNoZWV0Jztcbn07XG5cbi8vIGp1c3Qgc3RvcmUgdGhlIHNlbGVjdG9yIHRvIGJlIHBhcnNlZCBsYXRlclxuc2hlZXRmbi5zZWxlY3RvciA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICB2YXIgaSA9IHRoaXMubGVuZ3RoKys7XG4gIHRoaXNbaV0gPSB7XG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIHByb3BlcnRpZXM6IFtdXG4gIH07XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8ganVzdCBzdG9yZSB0aGUgcHJvcGVydHkgdG8gYmUgcGFyc2VkIGxhdGVyXG5zaGVldGZuLmNzcyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgIHRoaXNbaV0ucHJvcGVydGllcy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChuYW1lKSkge1xuICAgIHZhciBtYXAgPSBuYW1lO1xuICAgIHZhciBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcE5hbWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcE5hbWVzW2pdO1xuICAgICAgdmFyIG1hcFZhbCA9IG1hcFtrZXldO1xuICAgICAgaWYgKG1hcFZhbCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3AgPSBTdHlsZS5wcm9wZXJ0aWVzW2tleV0gfHwgU3R5bGUucHJvcGVydGllc1tkYXNoMmNhbWVsKGtleSldO1xuICAgICAgaWYgKHByb3AgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBfbmFtZSA9IHByb3AubmFtZTtcbiAgICAgIHZhciBfdmFsdWUgPSBtYXBWYWw7XG4gICAgICB0aGlzW2ldLnByb3BlcnRpZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IF9uYW1lLFxuICAgICAgICB2YWx1ZTogX3ZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG5zaGVldGZuLnN0eWxlID0gc2hlZXRmbi5jc3M7XG5cbi8vIGdlbmVyYXRlIGEgcmVhbCBzdHlsZSBvYmplY3QgZnJvbSB0aGUgZHVtbXkgc3R5bGVzaGVldFxuc2hlZXRmbi5nZW5lcmF0ZVN0eWxlID0gZnVuY3Rpb24gKGN5KSB7XG4gIHZhciBzdHlsZSA9IG5ldyBTdHlsZShjeSk7XG4gIHJldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUoc3R5bGUpO1xufTtcblxuLy8gYXBwZW5kIGEgZHVtbXkgc3R5bGVzaGVldCBvYmplY3Qgb24gYSByZWFsIHN0eWxlIG9iamVjdFxuc2hlZXRmbi5hcHBlbmRUb1N0eWxlID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb250ZXh0ID0gdGhpc1tpXTtcbiAgICB2YXIgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yO1xuICAgIHZhciBwcm9wcyA9IGNvbnRleHQucHJvcGVydGllcztcbiAgICBzdHlsZS5zZWxlY3RvcihzZWxlY3Rvcik7IC8vIGFwcGx5IHNlbGVjdG9yXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BzW2pdO1xuICAgICAgc3R5bGUuY3NzKHByb3AubmFtZSwgcHJvcC52YWx1ZSk7IC8vIGFwcGx5IHByb3BlcnR5XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufTtcblxudmFyIHZlcnNpb24gPSBcIjMuMzAuMlwiO1xuXG52YXIgY3l0b3NjYXBlID0gZnVuY3Rpb24gY3l0b3NjYXBlKG9wdGlvbnMpIHtcbiAgLy8gaWYgbm8gb3B0aW9ucyBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICAvLyBjcmVhdGUgaW5zdGFuY2VcbiAgaWYgKHBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb3JlKG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gYWxsb3cgZm9yIHJlZ2lzdHJhdGlvbiBvZiBleHRlbnNpb25zXG4gIGVsc2UgaWYgKHN0cmluZyhvcHRpb25zKSkge1xuICAgIHJldHVybiBleHRlbnNpb24uYXBwbHkoZXh0ZW5zaW9uLCBhcmd1bWVudHMpO1xuICB9XG59O1xuXG4vLyBlLmcuIGN5dG9zY2FwZS51c2UoIHJlcXVpcmUoJ2N5dG9zY2FwZS1mb28nKSwgYmFyIClcbmN5dG9zY2FwZS51c2UgPSBmdW5jdGlvbiAoZXh0KSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gYXJncyB0byBwYXNzIHRvIGV4dFxuXG4gIGFyZ3MudW5zaGlmdChjeXRvc2NhcGUpOyAvLyBjeXRvc2NhcGUgaXMgZmlyc3QgYXJnIHRvIGV4dFxuXG4gIGV4dC5hcHBseShudWxsLCBhcmdzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuY3l0b3NjYXBlLndhcm5pbmdzID0gZnVuY3Rpb24gKGJvb2wpIHtcbiAgcmV0dXJuIHdhcm5pbmdzKGJvb2wpO1xufTtcblxuLy8gcmVwbGFjZWQgYnkgYnVpbGQgc3lzdGVtXG5jeXRvc2NhcGUudmVyc2lvbiA9IHZlcnNpb247XG5cbi8vIGV4cG9zZSBwdWJsaWMgYXBpcyAobW9zdGx5IGZvciBleHRlbnNpb25zKVxuY3l0b3NjYXBlLnN0eWxlc2hlZXQgPSBjeXRvc2NhcGUuU3R5bGVzaGVldCA9IFN0eWxlc2hlZXQ7XG5cbmV4cG9ydCB7IGN5dG9zY2FwZSBhcyBkZWZhdWx0IH07XG4iLAogICAgIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImxheW91dEJhc2VcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibGF5b3V0QmFzZVwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI2KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gTGF5b3V0Q29uc3RhbnRzKCkge31cblxuLyoqXHJcbiAqIExheW91dCBRdWFsaXR5OiAwOmRyYWZ0LCAxOmRlZmF1bHQsIDI6cHJvb2ZcclxuICovXG5MYXlvdXRDb25zdGFudHMuUVVBTElUWSA9IDE7XG5cbi8qKlxyXG4gKiBEZWZhdWx0IHBhcmFtZXRlcnNcclxuICovXG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEID0gZmFsc2U7XG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCA9IHRydWU7XG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCA9IDUwO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMgPSBmYWxzZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IEdlbmVyYWwgb3RoZXIgY29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLypcclxuICogTWFyZ2lucyBvZiBhIGdyYXBoIHRvIGJlIGFwcGxpZWQgb24gYm91ZGluZyByZWN0YW5nbGUgb2YgaXRzIGNvbnRlbnRzLiBXZVxyXG4gKiBhc3N1bWUgbWFyZ2lucyBvbiBhbGwgZm91ciBzaWRlcyB0byBiZSB1bmlmb3JtLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVBIX01BUkdJTiA9IDE1O1xuXG4vKlxyXG4gKiBXaGV0aGVyIHRvIGNvbnNpZGVyIGxhYmVscyBpbiBub2RlIGRpbWVuc2lvbnMgb3Igbm90XHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IGZhbHNlO1xuXG4vKlxyXG4gKiBEZWZhdWx0IGRpbWVuc2lvbiBvZiBhIG5vbi1jb21wb3VuZCBub2RlLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9TSVpFID0gNDA7XG5cbi8qXHJcbiAqIERlZmF1bHQgZGltZW5zaW9uIG9mIGEgbm9uLWNvbXBvdW5kIG5vZGUuXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLlNJTVBMRV9OT0RFX0hBTEZfU0laRSA9IExheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9TSVpFIC8gMjtcblxuLypcclxuICogRW1wdHkgY29tcG91bmQgbm9kZSBzaXplLiBXaGVuIGEgY29tcG91bmQgbm9kZSBpcyBlbXB0eSwgaXRzIGJvdGhcclxuICogZGltZW5zaW9ucyBzaG91bGQgYmUgb2YgdGhpcyB2YWx1ZS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFID0gNDA7XG5cbi8qXHJcbiAqIE1pbmltdW0gbGVuZ3RoIHRoYXQgYW4gZWRnZSBzaG91bGQgdGFrZSBkdXJpbmcgbGF5b3V0XHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLk1JTl9FREdFX0xFTkdUSCA9IDE7XG5cbi8qXHJcbiAqIFdvcmxkIGJvdW5kYXJpZXMgdGhhdCBsYXlvdXQgb3BlcmF0ZXMgb25cclxuICovXG5MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkgPSAxMDAwMDAwO1xuXG4vKlxyXG4gKiBXb3JsZCBib3VuZGFyaWVzIHRoYXQgcmFuZG9tIHBvc2l0aW9uaW5nIGNhbiBiZSBwZXJmb3JtZWQgd2l0aFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZID0gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZIC8gMTAwMDtcblxuLypcclxuICogQ29vcmRpbmF0ZXMgb2YgdGhlIHdvcmxkIGNlbnRlclxyXG4gKi9cbkxheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWCA9IDEyMDA7XG5MYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1kgPSA5MDA7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF5b3V0Q29uc3RhbnRzO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBJTWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cbmZ1bmN0aW9uIExFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBMR3JhcGhPYmplY3QuY2FsbCh0aGlzLCB2RWRnZSk7XG5cbiAgdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBmYWxzZTtcbiAgdGhpcy52R3JhcGhPYmplY3QgPSB2RWRnZTtcbiAgdGhpcy5iZW5kcG9pbnRzID0gW107XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbn1cblxuTEVkZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhPYmplY3QucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMR3JhcGhPYmplY3QpIHtcbiAgTEVkZ2VbcHJvcF0gPSBMR3JhcGhPYmplY3RbcHJvcF07XG59XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRhcmdldDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5pc0ludGVyR3JhcGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmlzSW50ZXJHcmFwaDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5iZW5kcG9pbnRzO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldExjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGNhO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldFNvdXJjZUluTGNhID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2VJbkxjYTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudGFyZ2V0SW5MY2E7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0T3RoZXJFbmQgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAodGhpcy5zb3VyY2UgPT09IG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gIH0gZWxzZSBpZiAodGhpcy50YXJnZXQgPT09IG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2U7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgXCJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZVwiO1xuICB9XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoID0gZnVuY3Rpb24gKG5vZGUsIGdyYXBoKSB7XG4gIHZhciBvdGhlckVuZCA9IHRoaXMuZ2V0T3RoZXJFbmQobm9kZSk7XG4gIHZhciByb290ID0gZ3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG90aGVyRW5kLmdldE93bmVyKCkgPT0gZ3JhcGgpIHtcbiAgICAgIHJldHVybiBvdGhlckVuZDtcbiAgICB9XG5cbiAgICBpZiAob3RoZXJFbmQuZ2V0T3duZXIoKSA9PSByb290KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBvdGhlckVuZCA9IG90aGVyRW5kLmdldE93bmVyKCkuZ2V0UGFyZW50KCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS51cGRhdGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjbGlwUG9pbnRDb29yZGluYXRlcyA9IG5ldyBBcnJheSg0KTtcblxuICB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldCA9IElHZW9tZXRyeS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLCB0aGlzLnNvdXJjZS5nZXRSZWN0KCksIGNsaXBQb2ludENvb3JkaW5hdGVzKTtcblxuICBpZiAoIXRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KSB7XG4gICAgdGhpcy5sZW5ndGhYID0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMF0gLSBjbGlwUG9pbnRDb29yZGluYXRlc1syXTtcbiAgICB0aGlzLmxlbmd0aFkgPSBjbGlwUG9pbnRDb29yZGluYXRlc1sxXSAtIGNsaXBQb2ludENvb3JkaW5hdGVzWzNdO1xuXG4gICAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWCkgPCAxLjApIHtcbiAgICAgIHRoaXMubGVuZ3RoWCA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhYKTtcbiAgICB9XG5cbiAgICBpZiAoTWF0aC5hYnModGhpcy5sZW5ndGhZKSA8IDEuMCkge1xuICAgICAgdGhpcy5sZW5ndGhZID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFkpO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCAqIHRoaXMubGVuZ3RoWCArIHRoaXMubGVuZ3RoWSAqIHRoaXMubGVuZ3RoWSk7XG4gIH1cbn07XG5cbkxFZGdlLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubGVuZ3RoWCA9IHRoaXMudGFyZ2V0LmdldENlbnRlclgoKSAtIHRoaXMuc291cmNlLmdldENlbnRlclgoKTtcbiAgdGhpcy5sZW5ndGhZID0gdGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpIC0gdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFgpIDwgMS4wKSB7XG4gICAgdGhpcy5sZW5ndGhYID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFgpO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWSkgPCAxLjApIHtcbiAgICB0aGlzLmxlbmd0aFkgPSBJTWF0aC5zaWduKHRoaXMubGVuZ3RoWSk7XG4gIH1cblxuICB0aGlzLmxlbmd0aCA9IE1hdGguc3FydCh0aGlzLmxlbmd0aFggKiB0aGlzLmxlbmd0aFggKyB0aGlzLmxlbmd0aFkgKiB0aGlzLmxlbmd0aFkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMRWRnZTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIExHcmFwaE9iamVjdCh2R3JhcGhPYmplY3QpIHtcbiAgdGhpcy52R3JhcGhPYmplY3QgPSB2R3JhcGhPYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoT2JqZWN0O1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIFJlY3RhbmdsZUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIFJhbmRvbVNlZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG5mdW5jdGlvbiBMTm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICAvL0FsdGVybmF0aXZlIGNvbnN0cnVjdG9yIDEgOiBMTm9kZShMR3JhcGhNYW5hZ2VyIGdtLCBQb2ludCBsb2MsIERpbWVuc2lvbiBzaXplLCBPYmplY3Qgdk5vZGUpXG4gIGlmIChzaXplID09IG51bGwgJiYgdk5vZGUgPT0gbnVsbCkge1xuICAgIHZOb2RlID0gbG9jO1xuICB9XG5cbiAgTEdyYXBoT2JqZWN0LmNhbGwodGhpcywgdk5vZGUpO1xuXG4gIC8vQWx0ZXJuYXRpdmUgY29uc3RydWN0b3IgMiA6IExOb2RlKExheW91dCBsYXlvdXQsIE9iamVjdCB2Tm9kZSlcbiAgaWYgKGdtLmdyYXBoTWFuYWdlciAhPSBudWxsKSBnbSA9IGdtLmdyYXBoTWFuYWdlcjtcblxuICB0aGlzLmVzdGltYXRlZFNpemUgPSBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgdGhpcy5pbmNsdXNpb25UcmVlRGVwdGggPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdGhpcy52R3JhcGhPYmplY3QgPSB2Tm9kZTtcbiAgdGhpcy5lZGdlcyA9IFtdO1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IGdtO1xuXG4gIGlmIChzaXplICE9IG51bGwgJiYgbG9jICE9IG51bGwpIHRoaXMucmVjdCA9IG5ldyBSZWN0YW5nbGVEKGxvYy54LCBsb2MueSwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO2Vsc2UgdGhpcy5yZWN0ID0gbmV3IFJlY3RhbmdsZUQoKTtcbn1cblxuTE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhPYmplY3QucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gTEdyYXBoT2JqZWN0KSB7XG4gIExOb2RlW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MTm9kZS5wcm90b3R5cGUuZ2V0RWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmVkZ2VzO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldENoaWxkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jaGlsZDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRPd25lciA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gIGlmICh0aGlzLm93bmVyICE9IG51bGwpIHtcbiAgLy8gICAgaWYgKCEodGhpcy5vd25lciA9PSBudWxsIHx8IHRoaXMub3duZXIuZ2V0Tm9kZXMoKS5pbmRleE9mKHRoaXMpID4gLTEpKSB7XG4gIC8vICAgICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIC8vICAgIH1cbiAgLy8gIH1cblxuICByZXR1cm4gdGhpcy5vd25lcjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC53aWR0aDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRXaWR0aCA9IGZ1bmN0aW9uICh3aWR0aCkge1xuICB0aGlzLnJlY3Qud2lkdGggPSB3aWR0aDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3QuaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIChoZWlnaHQpIHtcbiAgdGhpcy5yZWN0LmhlaWdodCA9IGhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXJYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGggLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldENlbnRlclkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3QueSArIHRoaXMucmVjdC5oZWlnaHQgLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldENlbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludEQodGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGggLyAyLCB0aGlzLnJlY3QueSArIHRoaXMucmVjdC5oZWlnaHQgLyAyKTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludEQodGhpcy5yZWN0LngsIHRoaXMucmVjdC55KTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRSZWN0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldERpYWdvbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCAqIHRoaXMucmVjdC53aWR0aCArIHRoaXMucmVjdC5oZWlnaHQgKiB0aGlzLnJlY3QuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBoYWxmIHRoZSBkaWFnb25hbCBsZW5ndGggb2YgdGhpcyBub2RlLlxuICovXG5MTm9kZS5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQgKiB0aGlzLnJlY3QuaGVpZ2h0ICsgdGhpcy5yZWN0LndpZHRoICogdGhpcy5yZWN0LndpZHRoKSAvIDI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0UmVjdCA9IGZ1bmN0aW9uICh1cHBlckxlZnQsIGRpbWVuc2lvbikge1xuICB0aGlzLnJlY3QueCA9IHVwcGVyTGVmdC54O1xuICB0aGlzLnJlY3QueSA9IHVwcGVyTGVmdC55O1xuICB0aGlzLnJlY3Qud2lkdGggPSBkaW1lbnNpb24ud2lkdGg7XG4gIHRoaXMucmVjdC5oZWlnaHQgPSBkaW1lbnNpb24uaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldENlbnRlciA9IGZ1bmN0aW9uIChjeCwgY3kpIHtcbiAgdGhpcy5yZWN0LnggPSBjeCAtIHRoaXMucmVjdC53aWR0aCAvIDI7XG4gIHRoaXMucmVjdC55ID0gY3kgLSB0aGlzLnJlY3QuaGVpZ2h0IC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gIHRoaXMucmVjdC54ID0geDtcbiAgdGhpcy5yZWN0LnkgPSB5O1xufTtcblxuTE5vZGUucHJvdG90eXBlLm1vdmVCeSA9IGZ1bmN0aW9uIChkeCwgZHkpIHtcbiAgdGhpcy5yZWN0LnggKz0gZHg7XG4gIHRoaXMucmVjdC55ICs9IGR5O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlID0gZnVuY3Rpb24gKHRvKSB7XG4gIHZhciBlZGdlTGlzdCA9IFtdO1xuICB2YXIgZWRnZTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuXG4gICAgaWYgKGVkZ2UudGFyZ2V0ID09IHRvKSB7XG4gICAgICBpZiAoZWRnZS5zb3VyY2UgIT0gc2VsZikgdGhyb3cgXCJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhXCI7XG5cbiAgICAgIGVkZ2VMaXN0LnB1c2goZWRnZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWRnZUxpc3Q7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gIHZhciBlZGdlTGlzdCA9IFtdO1xuICB2YXIgZWRnZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuXG4gICAgaWYgKCEoZWRnZS5zb3VyY2UgPT0gc2VsZiB8fCBlZGdlLnRhcmdldCA9PSBzZWxmKSkgdGhyb3cgXCJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldFwiO1xuXG4gICAgaWYgKGVkZ2UudGFyZ2V0ID09IG90aGVyIHx8IGVkZ2Uuc291cmNlID09IG90aGVyKSB7XG4gICAgICBlZGdlTGlzdC5wdXNoKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBuZWlnaGJvcnMgPSBuZXcgU2V0KCk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmIChlZGdlLnNvdXJjZSA9PSBzZWxmKSB7XG4gICAgICBuZWlnaGJvcnMuYWRkKGVkZ2UudGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVkZ2UudGFyZ2V0ICE9IHNlbGYpIHtcbiAgICAgICAgdGhyb3cgXCJJbmNvcnJlY3QgaW5jaWRlbmN5IVwiO1xuICAgICAgfVxuXG4gICAgICBuZWlnaGJvcnMuYWRkKGVkZ2Uuc291cmNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZWlnaGJvcnM7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUud2l0aENoaWxkcmVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgd2l0aE5laWdoYm9yc0xpc3QgPSBuZXcgU2V0KCk7XG4gIHZhciBjaGlsZE5vZGU7XG4gIHZhciBjaGlsZHJlbjtcblxuICB3aXRoTmVpZ2hib3JzTGlzdC5hZGQodGhpcyk7XG5cbiAgaWYgKHRoaXMuY2hpbGQgIT0gbnVsbCkge1xuICAgIHZhciBub2RlcyA9IHRoaXMuY2hpbGQuZ2V0Tm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZE5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGROb2RlLndpdGhDaGlsZHJlbigpO1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB3aXRoTmVpZ2hib3JzTGlzdC5hZGQobm9kZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aE5laWdoYm9yc0xpc3Q7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbm9PZkNoaWxkcmVuID0gMDtcbiAgdmFyIGNoaWxkTm9kZTtcblxuICBpZiAodGhpcy5jaGlsZCA9PSBudWxsKSB7XG4gICAgbm9PZkNoaWxkcmVuID0gMTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmNoaWxkLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlID0gbm9kZXNbaV07XG5cbiAgICAgIG5vT2ZDaGlsZHJlbiArPSBjaGlsZE5vZGUuZ2V0Tm9PZkNoaWxkcmVuKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vT2ZDaGlsZHJlbiA9PSAwKSB7XG4gICAgbm9PZkNoaWxkcmVuID0gMTtcbiAgfVxuICByZXR1cm4gbm9PZkNoaWxkcmVuO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmVzdGltYXRlZFNpemUgPT0gSW50ZWdlci5NSU5fVkFMVUUpIHtcbiAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgfVxuICByZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jaGlsZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZSA9ICh0aGlzLnJlY3Qud2lkdGggKyB0aGlzLnJlY3QuaGVpZ2h0KSAvIDI7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lc3RpbWF0ZWRTaXplID0gdGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpO1xuICAgIHRoaXMucmVjdC53aWR0aCA9IHRoaXMuZXN0aW1hdGVkU2l6ZTtcbiAgICB0aGlzLnJlY3QuaGVpZ2h0ID0gdGhpcy5lc3RpbWF0ZWRTaXplO1xuXG4gICAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbiAgfVxufTtcblxuTE5vZGUucHJvdG90eXBlLnNjYXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByYW5kb21DZW50ZXJYO1xuICB2YXIgcmFuZG9tQ2VudGVyWTtcblxuICB2YXIgbWluWCA9IC1MYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtcbiAgdmFyIG1heFggPSBMYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtcbiAgcmFuZG9tQ2VudGVyWCA9IExheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWCArIFJhbmRvbVNlZWQubmV4dERvdWJsZSgpICogKG1heFggLSBtaW5YKSArIG1pblg7XG5cbiAgdmFyIG1pblkgPSAtTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHZhciBtYXhZID0gTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHJhbmRvbUNlbnRlclkgPSBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1kgKyBSYW5kb21TZWVkLm5leHREb3VibGUoKSAqIChtYXhZIC0gbWluWSkgKyBtaW5ZO1xuXG4gIHRoaXMucmVjdC54ID0gcmFuZG9tQ2VudGVyWDtcbiAgdGhpcy5yZWN0LnkgPSByYW5kb21DZW50ZXJZO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgaWYgKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCAhPSAwKSB7XG4gICAgLy8gd3JhcCB0aGUgY2hpbGRyZW4gbm9kZXMgYnkgcmUtYXJyYW5naW5nIHRoZSBib3VuZGFyaWVzXG4gICAgdmFyIGNoaWxkR3JhcGggPSB0aGlzLmdldENoaWxkKCk7XG4gICAgY2hpbGRHcmFwaC51cGRhdGVCb3VuZHModHJ1ZSk7XG5cbiAgICB0aGlzLnJlY3QueCA9IGNoaWxkR3JhcGguZ2V0TGVmdCgpO1xuICAgIHRoaXMucmVjdC55ID0gY2hpbGRHcmFwaC5nZXRUb3AoKTtcblxuICAgIHRoaXMuc2V0V2lkdGgoY2hpbGRHcmFwaC5nZXRSaWdodCgpIC0gY2hpbGRHcmFwaC5nZXRMZWZ0KCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0KGNoaWxkR3JhcGguZ2V0Qm90dG9tKCkgLSBjaGlsZEdyYXBoLmdldFRvcCgpKTtcblxuICAgIC8vIFVwZGF0ZSBjb21wb3VuZCBib3VuZHMgY29uc2lkZXJpbmcgaXRzIGxhYmVsIHByb3BlcnRpZXMgICAgXG4gICAgaWYgKExheW91dENvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpIHtcblxuICAgICAgdmFyIHdpZHRoID0gY2hpbGRHcmFwaC5nZXRSaWdodCgpIC0gY2hpbGRHcmFwaC5nZXRMZWZ0KCk7XG4gICAgICB2YXIgaGVpZ2h0ID0gY2hpbGRHcmFwaC5nZXRCb3R0b20oKSAtIGNoaWxkR3JhcGguZ2V0VG9wKCk7XG5cbiAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggPiB3aWR0aCkge1xuICAgICAgICB0aGlzLnJlY3QueCAtPSAodGhpcy5sYWJlbFdpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbFBvcyA9PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgdGhpcy5yZWN0LnkgLT0gKHRoaXMubGFiZWxIZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhYmVsUG9zID09IFwidG9wXCIpIHtcbiAgICAgICAgICB0aGlzLnJlY3QueSAtPSB0aGlzLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmFucykge1xuICB2YXIgbGVmdCA9IHRoaXMucmVjdC54O1xuXG4gIGlmIChsZWZ0ID4gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZKSB7XG4gICAgbGVmdCA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWTtcbiAgfSBlbHNlIGlmIChsZWZ0IDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIGxlZnQgPSAtTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZO1xuICB9XG5cbiAgdmFyIHRvcCA9IHRoaXMucmVjdC55O1xuXG4gIGlmICh0b3AgPiBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkpIHtcbiAgICB0b3AgPSBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH0gZWxzZSBpZiAodG9wIDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIHRvcCA9IC1MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH1cblxuICB2YXIgbGVmdFRvcCA9IG5ldyBQb2ludEQobGVmdCwgdG9wKTtcbiAgdmFyIHZMZWZ0VG9wID0gdHJhbnMuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGxlZnRUb3ApO1xuXG4gIHRoaXMuc2V0TG9jYXRpb24odkxlZnRUb3AueCwgdkxlZnRUb3AueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0Lnk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3duZXIgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXIuZ2V0UGFyZW50KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExOb2RlO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gUG9pbnREKHgsIHkpIHtcbiAgaWYgKHggPT0gbnVsbCAmJiB5ID09IG51bGwpIHtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG59XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueDtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueTtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuc2V0WCA9IGZ1bmN0aW9uICh4KSB7XG4gIHRoaXMueCA9IHg7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbiAoeSkge1xuICB0aGlzLnkgPSB5O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5nZXREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHB0KSB7XG4gIHJldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLnggLSBwdC54LCB0aGlzLnkgLSBwdC55KTtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0Q29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludEQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuUG9pbnRELnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoZGltKSB7XG4gIHRoaXMueCArPSBkaW0ud2lkdGg7XG4gIHRoaXMueSArPSBkaW0uaGVpZ2h0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9pbnREO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBSZWN0YW5nbGVEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgUG9pbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbmZ1bmN0aW9uIExHcmFwaChwYXJlbnQsIG9iajIsIHZHcmFwaCkge1xuICBMR3JhcGhPYmplY3QuY2FsbCh0aGlzLCB2R3JhcGgpO1xuICB0aGlzLmVzdGltYXRlZFNpemUgPSBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgdGhpcy5tYXJnaW4gPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFQSF9NQVJHSU47XG4gIHRoaXMuZWRnZXMgPSBbXTtcbiAgdGhpcy5ub2RlcyA9IFtdO1xuICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gIGlmIChvYmoyICE9IG51bGwgJiYgb2JqMiBpbnN0YW5jZW9mIExHcmFwaE1hbmFnZXIpIHtcbiAgICB0aGlzLmdyYXBoTWFuYWdlciA9IG9iajI7XG4gIH0gZWxzZSBpZiAob2JqMiAhPSBudWxsICYmIG9iajIgaW5zdGFuY2VvZiBMYXlvdXQpIHtcbiAgICB0aGlzLmdyYXBoTWFuYWdlciA9IG9iajIuZ3JhcGhNYW5hZ2VyO1xuICB9XG59XG5cbkxHcmFwaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExHcmFwaE9iamVjdC5wcm90b3R5cGUpO1xuZm9yICh2YXIgcHJvcCBpbiBMR3JhcGhPYmplY3QpIHtcbiAgTEdyYXBoW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MR3JhcGgucHJvdG90eXBlLmdldE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlcztcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0RWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmVkZ2VzO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlcjtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldExlZnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxlZnQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yaWdodDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy50b3A7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYm90dG9tO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5pc0Nvbm5lY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmoxLCBzb3VyY2VOb2RlLCB0YXJnZXROb2RlKSB7XG4gIGlmIChzb3VyY2VOb2RlID09IG51bGwgJiYgdGFyZ2V0Tm9kZSA9PSBudWxsKSB7XG4gICAgdmFyIG5ld05vZGUgPSBvYmoxO1xuICAgIGlmICh0aGlzLmdyYXBoTWFuYWdlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihuZXdOb2RlKSA+IC0xKSB7XG4gICAgICB0aHJvdyBcIk5vZGUgYWxyZWFkeSBpbiBncmFwaCFcIjtcbiAgICB9XG4gICAgbmV3Tm9kZS5vd25lciA9IHRoaXM7XG4gICAgdGhpcy5nZXROb2RlcygpLnB1c2gobmV3Tm9kZSk7XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV3RWRnZSA9IG9iajE7XG4gICAgaWYgKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2Yoc291cmNlTm9kZSkgPiAtMSAmJiB0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih0YXJnZXROb2RlKSA+IC0xKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCFcIjtcbiAgICB9XG5cbiAgICBpZiAoIShzb3VyY2VOb2RlLm93bmVyID09IHRhcmdldE5vZGUub3duZXIgJiYgc291cmNlTm9kZS5vd25lciA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghXCI7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZU5vZGUub3duZXIgIT0gdGFyZ2V0Tm9kZS5vd25lcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gc2V0IHNvdXJjZSBhbmQgdGFyZ2V0XG4gICAgbmV3RWRnZS5zb3VyY2UgPSBzb3VyY2VOb2RlO1xuICAgIG5ld0VkZ2UudGFyZ2V0ID0gdGFyZ2V0Tm9kZTtcblxuICAgIC8vIHNldCBhcyBpbnRyYS1ncmFwaCBlZGdlXG4gICAgbmV3RWRnZS5pc0ludGVyR3JhcGggPSBmYWxzZTtcblxuICAgIC8vIGFkZCB0byBncmFwaCBlZGdlIGxpc3RcbiAgICB0aGlzLmdldEVkZ2VzKCkucHVzaChuZXdFZGdlKTtcblxuICAgIC8vIGFkZCB0byBpbmNpZGVuY3kgbGlzdHNcbiAgICBzb3VyY2VOb2RlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG5cbiAgICBpZiAodGFyZ2V0Tm9kZSAhPSBzb3VyY2VOb2RlKSB7XG4gICAgICB0YXJnZXROb2RlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0VkZ2U7XG4gIH1cbn07XG5cbkxHcmFwaC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgbm9kZSA9IG9iajtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIExOb2RlKSB7XG4gICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJOb2RlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghKG5vZGUub3duZXIgIT0gbnVsbCAmJiBub2RlLm93bmVyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIk93bmVyIGdyYXBoIGlzIGludmFsaWQhXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyYXBoTWFuYWdlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIk93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCFcIjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIGluY2lkZW50IGVkZ2VzIGZpcnN0IChtYWtlIGEgY29weSB0byBkbyBpdCBzYWZlbHkpXG4gICAgdmFyIGVkZ2VzVG9CZVJlbW92ZWQgPSBub2RlLmVkZ2VzLnNsaWNlKCk7XG4gICAgdmFyIGVkZ2U7XG4gICAgdmFyIHMgPSBlZGdlc1RvQmVSZW1vdmVkLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzVG9CZVJlbW92ZWRbaV07XG5cbiAgICAgIGlmIChlZGdlLmlzSW50ZXJHcmFwaCkge1xuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoZWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlLnNvdXJjZS5vd25lci5yZW1vdmUoZWRnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm93IHRoZSBub2RlIGl0c2VsZlxuICAgIHZhciBpbmRleCA9IHRoaXMubm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgIHRocm93IFwiTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0IVwiO1xuICAgIH1cblxuICAgIHRoaXMubm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMRWRnZSkge1xuICAgIHZhciBlZGdlID0gb2JqO1xuICAgIGlmIChlZGdlID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiRWRnZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoIShlZGdlLnNvdXJjZSAhPSBudWxsICYmIGVkZ2UudGFyZ2V0ICE9IG51bGwpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghKGVkZ2Uuc291cmNlLm93bmVyICE9IG51bGwgJiYgZWRnZS50YXJnZXQub3duZXIgIT0gbnVsbCAmJiBlZGdlLnNvdXJjZS5vd25lciA9PSB0aGlzICYmIGVkZ2UudGFyZ2V0Lm93bmVyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhXCI7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZUluZGV4ID0gZWRnZS5zb3VyY2UuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICB2YXIgdGFyZ2V0SW5kZXggPSBlZGdlLnRhcmdldC5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGlmICghKHNvdXJjZUluZGV4ID4gLTEgJiYgdGFyZ2V0SW5kZXggPiAtMSkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSFcIjtcbiAgICB9XG5cbiAgICBlZGdlLnNvdXJjZS5lZGdlcy5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuXG4gICAgaWYgKGVkZ2UudGFyZ2V0ICE9IGVkZ2Uuc291cmNlKSB7XG4gICAgICBlZGdlLnRhcmdldC5lZGdlcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGVkZ2Uuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZihlZGdlKTtcbiAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgIHRocm93IFwiTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0IVwiO1xuICAgIH1cblxuICAgIGVkZ2Uuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuTEdyYXBoLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG9wID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBsZWZ0ID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBub2RlVG9wO1xuICB2YXIgbm9kZUxlZnQ7XG4gIHZhciBtYXJnaW47XG5cbiAgdmFyIG5vZGVzID0gdGhpcy5nZXROb2RlcygpO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuICAgIG5vZGVUb3AgPSBsTm9kZS5nZXRUb3AoKTtcbiAgICBub2RlTGVmdCA9IGxOb2RlLmdldExlZnQoKTtcblxuICAgIGlmICh0b3AgPiBub2RlVG9wKSB7XG4gICAgICB0b3AgPSBub2RlVG9wO1xuICAgIH1cblxuICAgIGlmIChsZWZ0ID4gbm9kZUxlZnQpIHtcbiAgICAgIGxlZnQgPSBub2RlTGVmdDtcbiAgICB9XG4gIH1cblxuICAvLyBEbyB3ZSBoYXZlIGFueSBub2RlcyBpbiB0aGlzIGdyYXBoP1xuICBpZiAodG9wID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAobm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgbWFyZ2luID0gbm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ7XG4gIH0gZWxzZSB7XG4gICAgbWFyZ2luID0gdGhpcy5tYXJnaW47XG4gIH1cblxuICB0aGlzLmxlZnQgPSBsZWZ0IC0gbWFyZ2luO1xuICB0aGlzLnRvcCA9IHRvcCAtIG1hcmdpbjtcblxuICAvLyBBcHBseSB0aGUgbWFyZ2lucyBhbmQgcmV0dXJuIHRoZSByZXN1bHRcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmxlZnQsIHRoaXMudG9wKTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuICAvLyBjYWxjdWxhdGUgYm91bmRzXG4gIHZhciBsZWZ0ID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciByaWdodCA9IC1JbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHRvcCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgYm90dG9tID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbm9kZUxlZnQ7XG4gIHZhciBub2RlUmlnaHQ7XG4gIHZhciBub2RlVG9wO1xuICB2YXIgbm9kZUJvdHRvbTtcbiAgdmFyIG1hcmdpbjtcblxuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbE5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChyZWN1cnNpdmUgJiYgbE5vZGUuY2hpbGQgIT0gbnVsbCkge1xuICAgICAgbE5vZGUudXBkYXRlQm91bmRzKCk7XG4gICAgfVxuICAgIG5vZGVMZWZ0ID0gbE5vZGUuZ2V0TGVmdCgpO1xuICAgIG5vZGVSaWdodCA9IGxOb2RlLmdldFJpZ2h0KCk7XG4gICAgbm9kZVRvcCA9IGxOb2RlLmdldFRvcCgpO1xuICAgIG5vZGVCb3R0b20gPSBsTm9kZS5nZXRCb3R0b20oKTtcblxuICAgIGlmIChsZWZ0ID4gbm9kZUxlZnQpIHtcbiAgICAgIGxlZnQgPSBub2RlTGVmdDtcbiAgICB9XG5cbiAgICBpZiAocmlnaHQgPCBub2RlUmlnaHQpIHtcbiAgICAgIHJpZ2h0ID0gbm9kZVJpZ2h0O1xuICAgIH1cblxuICAgIGlmICh0b3AgPiBub2RlVG9wKSB7XG4gICAgICB0b3AgPSBub2RlVG9wO1xuICAgIH1cblxuICAgIGlmIChib3R0b20gPCBub2RlQm90dG9tKSB7XG4gICAgICBib3R0b20gPSBub2RlQm90dG9tO1xuICAgIH1cbiAgfVxuXG4gIHZhciBib3VuZGluZ1JlY3QgPSBuZXcgUmVjdGFuZ2xlRChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTtcbiAgaWYgKGxlZnQgPT0gSW50ZWdlci5NQVhfVkFMVUUpIHtcbiAgICB0aGlzLmxlZnQgPSB0aGlzLnBhcmVudC5nZXRMZWZ0KCk7XG4gICAgdGhpcy5yaWdodCA9IHRoaXMucGFyZW50LmdldFJpZ2h0KCk7XG4gICAgdGhpcy50b3AgPSB0aGlzLnBhcmVudC5nZXRUb3AoKTtcbiAgICB0aGlzLmJvdHRvbSA9IHRoaXMucGFyZW50LmdldEJvdHRvbSgpO1xuICB9XG5cbiAgaWYgKG5vZGVzWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0ICE9IHVuZGVmaW5lZCkge1xuICAgIG1hcmdpbiA9IG5vZGVzWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0O1xuICB9IGVsc2Uge1xuICAgIG1hcmdpbiA9IHRoaXMubWFyZ2luO1xuICB9XG5cbiAgdGhpcy5sZWZ0ID0gYm91bmRpbmdSZWN0LnggLSBtYXJnaW47XG4gIHRoaXMucmlnaHQgPSBib3VuZGluZ1JlY3QueCArIGJvdW5kaW5nUmVjdC53aWR0aCArIG1hcmdpbjtcbiAgdGhpcy50b3AgPSBib3VuZGluZ1JlY3QueSAtIG1hcmdpbjtcbiAgdGhpcy5ib3R0b20gPSBib3VuZGluZ1JlY3QueSArIGJvdW5kaW5nUmVjdC5oZWlnaHQgKyBtYXJnaW47XG59O1xuXG5MR3JhcGguY2FsY3VsYXRlQm91bmRzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIHZhciBsZWZ0ID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciByaWdodCA9IC1JbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHRvcCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgYm90dG9tID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbm9kZUxlZnQ7XG4gIHZhciBub2RlUmlnaHQ7XG4gIHZhciBub2RlVG9wO1xuICB2YXIgbm9kZUJvdHRvbTtcblxuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuICAgIG5vZGVMZWZ0ID0gbE5vZGUuZ2V0TGVmdCgpO1xuICAgIG5vZGVSaWdodCA9IGxOb2RlLmdldFJpZ2h0KCk7XG4gICAgbm9kZVRvcCA9IGxOb2RlLmdldFRvcCgpO1xuICAgIG5vZGVCb3R0b20gPSBsTm9kZS5nZXRCb3R0b20oKTtcblxuICAgIGlmIChsZWZ0ID4gbm9kZUxlZnQpIHtcbiAgICAgIGxlZnQgPSBub2RlTGVmdDtcbiAgICB9XG5cbiAgICBpZiAocmlnaHQgPCBub2RlUmlnaHQpIHtcbiAgICAgIHJpZ2h0ID0gbm9kZVJpZ2h0O1xuICAgIH1cblxuICAgIGlmICh0b3AgPiBub2RlVG9wKSB7XG4gICAgICB0b3AgPSBub2RlVG9wO1xuICAgIH1cblxuICAgIGlmIChib3R0b20gPCBub2RlQm90dG9tKSB7XG4gICAgICBib3R0b20gPSBub2RlQm90dG9tO1xuICAgIH1cbiAgfVxuXG4gIHZhciBib3VuZGluZ1JlY3QgPSBuZXcgUmVjdGFuZ2xlRChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTtcblxuICByZXR1cm4gYm91bmRpbmdSZWN0O1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzID09IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKTtcbiAgfVxufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5lc3RpbWF0ZWRTaXplID09IEludGVnZXIuTUlOX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcztcbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbE5vZGUgPSBub2Rlc1tpXTtcbiAgICBzaXplICs9IGxOb2RlLmNhbGNFc3RpbWF0ZWRTaXplKCk7XG4gIH1cblxuICBpZiAoc2l6ZSA9PSAwKSB7XG4gICAgdGhpcy5lc3RpbWF0ZWRTaXplID0gTGF5b3V0Q29uc3RhbnRzLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVzdGltYXRlZFNpemUgPSBzaXplIC8gTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemU7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPT0gMCkge1xuICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0KCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgY3VycmVudE5vZGUgPSB0aGlzLm5vZGVzWzBdO1xuICB2YXIgbmVpZ2hib3JFZGdlcztcbiAgdmFyIGN1cnJlbnROZWlnaGJvcjtcbiAgdmFyIGNoaWxkcmVuT2ZOb2RlID0gY3VycmVudE5vZGUud2l0aENoaWxkcmVuKCk7XG4gIGNoaWxkcmVuT2ZOb2RlLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBxdWV1ZS5wdXNoKG5vZGUpO1xuICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICB9KTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoICE9PSAwKSB7XG4gICAgY3VycmVudE5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuXG4gICAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgICBuZWlnaGJvckVkZ2VzID0gY3VycmVudE5vZGUuZ2V0RWRnZXMoKTtcbiAgICB2YXIgc2l6ZSA9IG5laWdoYm9yRWRnZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgbmVpZ2hib3JFZGdlID0gbmVpZ2hib3JFZGdlc1tpXTtcbiAgICAgIGN1cnJlbnROZWlnaGJvciA9IG5laWdoYm9yRWRnZS5nZXRPdGhlckVuZEluR3JhcGgoY3VycmVudE5vZGUsIHRoaXMpO1xuXG4gICAgICAvLyBBZGQgdW52aXNpdGVkIG5laWdoYm9ycyB0byB0aGUgbGlzdCB0byB2aXNpdFxuICAgICAgaWYgKGN1cnJlbnROZWlnaGJvciAhPSBudWxsICYmICF2aXNpdGVkLmhhcyhjdXJyZW50TmVpZ2hib3IpKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbk9mTmVpZ2hib3IgPSBjdXJyZW50TmVpZ2hib3Iud2l0aENoaWxkcmVuKCk7XG5cbiAgICAgICAgY2hpbGRyZW5PZk5laWdoYm9yLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBxdWV1ZS5wdXNoKG5vZGUpO1xuICAgICAgICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7XG5cbiAgaWYgKHZpc2l0ZWQuc2l6ZSA+PSB0aGlzLm5vZGVzLmxlbmd0aCkge1xuICAgIHZhciBub09mVmlzaXRlZEluVGhpc0dyYXBoID0gMDtcblxuICAgIHZpc2l0ZWQuZm9yRWFjaChmdW5jdGlvbiAodmlzaXRlZE5vZGUpIHtcbiAgICAgIGlmICh2aXNpdGVkTm9kZS5vd25lciA9PSBzZWxmKSB7XG4gICAgICAgIG5vT2ZWaXNpdGVkSW5UaGlzR3JhcGgrKztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChub09mVmlzaXRlZEluVGhpc0dyYXBoID09IHRoaXMubm9kZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaDtcbnZhciBMRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbmZ1bmN0aW9uIExHcmFwaE1hbmFnZXIobGF5b3V0KSB7XG4gIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7IC8vIEl0IG1heSBiZSBiZXR0ZXIgdG8gaW5pdGlsaXplIHRoaXMgb3V0IG9mIHRoaXMgZnVuY3Rpb24gYnV0IGl0IGdpdmVzIGFuIGVycm9yIChSaWdodC1oYW5kIHNpZGUgb2YgJ2luc3RhbmNlb2YnIGlzIG5vdCBjYWxsYWJsZSkgbm93LlxuICB0aGlzLmxheW91dCA9IGxheW91dDtcblxuICB0aGlzLmdyYXBocyA9IFtdO1xuICB0aGlzLmVkZ2VzID0gW107XG59XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmFkZFJvb3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBuZ3JhcGggPSB0aGlzLmxheW91dC5uZXdHcmFwaCgpO1xuICB2YXIgbm5vZGUgPSB0aGlzLmxheW91dC5uZXdOb2RlKG51bGwpO1xuICB2YXIgcm9vdCA9IHRoaXMuYWRkKG5ncmFwaCwgbm5vZGUpO1xuICB0aGlzLnNldFJvb3RHcmFwaChyb290KTtcbiAgcmV0dXJuIHRoaXMucm9vdEdyYXBoO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5ld0dyYXBoLCBwYXJlbnROb2RlLCBuZXdFZGdlLCBzb3VyY2VOb2RlLCB0YXJnZXROb2RlKSB7XG4gIC8vdGhlcmUgYXJlIGp1c3QgMiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhlbiBpdCBhZGRzIGFuIExHcmFwaCBlbHNlIGl0IGFkZHMgYW4gTEVkZ2VcbiAgaWYgKG5ld0VkZ2UgPT0gbnVsbCAmJiBzb3VyY2VOb2RlID09IG51bGwgJiYgdGFyZ2V0Tm9kZSA9PSBudWxsKSB7XG4gICAgaWYgKG5ld0dyYXBoID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiR3JhcGggaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJQYXJlbnQgbm9kZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5ncmFwaHMuaW5kZXhPZihuZXdHcmFwaCkgPiAtMSkge1xuICAgICAgdGhyb3cgXCJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhzLnB1c2gobmV3R3JhcGgpO1xuXG4gICAgaWYgKG5ld0dyYXBoLnBhcmVudCAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkFscmVhZHkgaGFzIGEgcGFyZW50IVwiO1xuICAgIH1cbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZCAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkFscmVhZHkgaGFzIGEgY2hpbGQhXCI7XG4gICAgfVxuXG4gICAgbmV3R3JhcGgucGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmNoaWxkID0gbmV3R3JhcGg7XG5cbiAgICByZXR1cm4gbmV3R3JhcGg7XG4gIH0gZWxzZSB7XG4gICAgLy9jaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzXG4gICAgdGFyZ2V0Tm9kZSA9IG5ld0VkZ2U7XG4gICAgc291cmNlTm9kZSA9IHBhcmVudE5vZGU7XG4gICAgbmV3RWRnZSA9IG5ld0dyYXBoO1xuICAgIHZhciBzb3VyY2VHcmFwaCA9IHNvdXJjZU5vZGUuZ2V0T3duZXIoKTtcbiAgICB2YXIgdGFyZ2V0R3JhcGggPSB0YXJnZXROb2RlLmdldE93bmVyKCk7XG5cbiAgICBpZiAoIShzb3VyY2VHcmFwaCAhPSBudWxsICYmIHNvdXJjZUdyYXBoLmdldEdyYXBoTWFuYWdlcigpID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBub3QgaW4gdGhpcyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuICAgIGlmICghKHRhcmdldEdyYXBoICE9IG51bGwgJiYgdGFyZ2V0R3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlR3JhcGggPT0gdGFyZ2V0R3JhcGgpIHtcbiAgICAgIG5ld0VkZ2UuaXNJbnRlckdyYXBoID0gZmFsc2U7XG4gICAgICByZXR1cm4gc291cmNlR3JhcGguYWRkKG5ld0VkZ2UsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFZGdlLmlzSW50ZXJHcmFwaCA9IHRydWU7XG5cbiAgICAgIC8vIHNldCBzb3VyY2UgYW5kIHRhcmdldFxuICAgICAgbmV3RWRnZS5zb3VyY2UgPSBzb3VyY2VOb2RlO1xuICAgICAgbmV3RWRnZS50YXJnZXQgPSB0YXJnZXROb2RlO1xuXG4gICAgICAvLyBhZGQgZWRnZSB0byBpbnRlci1ncmFwaCBlZGdlIGxpc3RcbiAgICAgIGlmICh0aGlzLmVkZ2VzLmluZGV4T2YobmV3RWRnZSkgPiAtMSkge1xuICAgICAgICB0aHJvdyBcIkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhXCI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWRnZXMucHVzaChuZXdFZGdlKTtcblxuICAgICAgLy8gYWRkIGVkZ2UgdG8gc291cmNlIGFuZCB0YXJnZXQgaW5jaWRlbmN5IGxpc3RzXG4gICAgICBpZiAoIShuZXdFZGdlLnNvdXJjZSAhPSBudWxsICYmIG5ld0VkZ2UudGFyZ2V0ICE9IG51bGwpKSB7XG4gICAgICAgIHRocm93IFwiRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsIVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShuZXdFZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKG5ld0VkZ2UpID09IC0xICYmIG5ld0VkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YobmV3RWRnZSkgPT0gLTEpKSB7XG4gICAgICAgIHRocm93IFwiRWRnZSBhbHJlYWR5IGluIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGluY2lkZW5jeSBsaXN0IVwiO1xuICAgICAgfVxuXG4gICAgICBuZXdFZGdlLnNvdXJjZS5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuICAgICAgbmV3RWRnZS50YXJnZXQuZWRnZXMucHVzaChuZXdFZGdlKTtcblxuICAgICAgcmV0dXJuIG5ld0VkZ2U7XG4gICAgfVxuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobE9iaikge1xuICBpZiAobE9iaiBpbnN0YW5jZW9mIExHcmFwaCkge1xuICAgIHZhciBncmFwaCA9IGxPYmo7XG4gICAgaWYgKGdyYXBoLmdldEdyYXBoTWFuYWdlcigpICE9IHRoaXMpIHtcbiAgICAgIHRocm93IFwiR3JhcGggbm90IGluIHRoaXMgZ3JhcGggbWdyXCI7XG4gICAgfVxuICAgIGlmICghKGdyYXBoID09IHRoaXMucm9vdEdyYXBoIHx8IGdyYXBoLnBhcmVudCAhPSBudWxsICYmIGdyYXBoLnBhcmVudC5ncmFwaE1hbmFnZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiSW52YWxpZCBwYXJlbnQgbm9kZSFcIjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB0aGUgZWRnZXMgKG1ha2UgYSBjb3B5IHRvIGRvIGl0IHNhZmVseSlcbiAgICB2YXIgZWRnZXNUb0JlUmVtb3ZlZCA9IFtdO1xuXG4gICAgZWRnZXNUb0JlUmVtb3ZlZCA9IGVkZ2VzVG9CZVJlbW92ZWQuY29uY2F0KGdyYXBoLmdldEVkZ2VzKCkpO1xuXG4gICAgdmFyIGVkZ2U7XG4gICAgdmFyIHMgPSBlZGdlc1RvQmVSZW1vdmVkLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzVG9CZVJlbW92ZWRbaV07XG4gICAgICBncmFwaC5yZW1vdmUoZWRnZSk7XG4gICAgfVxuXG4gICAgLy8gdGhlbiB0aGUgbm9kZXMgKG1ha2UgYSBjb3B5IHRvIGRvIGl0IHNhZmVseSlcbiAgICB2YXIgbm9kZXNUb0JlUmVtb3ZlZCA9IFtdO1xuXG4gICAgbm9kZXNUb0JlUmVtb3ZlZCA9IG5vZGVzVG9CZVJlbW92ZWQuY29uY2F0KGdyYXBoLmdldE5vZGVzKCkpO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgcyA9IG5vZGVzVG9CZVJlbW92ZWQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNUb0JlUmVtb3ZlZFtpXTtcbiAgICAgIGdyYXBoLnJlbW92ZShub2RlKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBncmFwaCBpcyB0aGUgcm9vdFxuICAgIGlmIChncmFwaCA9PSB0aGlzLnJvb3RHcmFwaCkge1xuICAgICAgdGhpcy5zZXRSb290R3JhcGgobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gbm93IHJlbW92ZSB0aGUgZ3JhcGggaXRzZWxmXG4gICAgdmFyIGluZGV4ID0gdGhpcy5ncmFwaHMuaW5kZXhPZihncmFwaCk7XG4gICAgdGhpcy5ncmFwaHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIC8vIGFsc28gcmVzZXQgdGhlIHBhcmVudCBvZiB0aGUgZ3JhcGhcbiAgICBncmFwaC5wYXJlbnQgPSBudWxsO1xuICB9IGVsc2UgaWYgKGxPYmogaW5zdGFuY2VvZiBMRWRnZSkge1xuICAgIGVkZ2UgPSBsT2JqO1xuICAgIGlmIChlZGdlID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiRWRnZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoIWVkZ2UuaXNJbnRlckdyYXBoKSB7XG4gICAgICB0aHJvdyBcIk5vdCBhbiBpbnRlci1ncmFwaCBlZGdlIVwiO1xuICAgIH1cbiAgICBpZiAoIShlZGdlLnNvdXJjZSAhPSBudWxsICYmIGVkZ2UudGFyZ2V0ICE9IG51bGwpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhXCI7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGVkZ2UgZnJvbSBzb3VyY2UgYW5kIHRhcmdldCBub2RlcycgaW5jaWRlbmN5IGxpc3RzXG5cbiAgICBpZiAoIShlZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKGVkZ2UpICE9IC0xICYmIGVkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YoZWRnZSkgIT0gLTEpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhXCI7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gZWRnZS5zb3VyY2UuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBlZGdlLnNvdXJjZS5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0gZWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBlZGdlLnRhcmdldC5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gcmVtb3ZlIGVkZ2UgZnJvbSBvd25lciBncmFwaCBtYW5hZ2VyJ3MgaW50ZXItZ3JhcGggZWRnZSBsaXN0XG5cbiAgICBpZiAoIShlZGdlLnNvdXJjZS5vd25lciAhPSBudWxsICYmIGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpICE9IG51bGwpKSB7XG4gICAgICB0aHJvdyBcIkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihlZGdlKSA9PSAtMSkge1xuICAgICAgdGhyb3cgXCJOb3QgaW4gb3duZXIgZ3JhcGggbWFuYWdlcidzIGVkZ2UgbGlzdCFcIjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBlZGdlLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKHRydWUpO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0R3JhcGhzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaHM7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYWxsTm9kZXMgPT0gbnVsbCkge1xuICAgIHZhciBub2RlTGlzdCA9IFtdO1xuICAgIHZhciBncmFwaHMgPSB0aGlzLmdldEdyYXBocygpO1xuICAgIHZhciBzID0gZ3JhcGhzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgbm9kZUxpc3QgPSBub2RlTGlzdC5jb25jYXQoZ3JhcGhzW2ldLmdldE5vZGVzKCkpO1xuICAgIH1cbiAgICB0aGlzLmFsbE5vZGVzID0gbm9kZUxpc3Q7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYWxsTm9kZXM7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFsbE5vZGVzID0gbnVsbDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlc2V0QWxsRWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWxsRWRnZXMgPSBudWxsO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IG51bGw7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbGxFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYWxsRWRnZXMgPT0gbnVsbCkge1xuICAgIHZhciBlZGdlTGlzdCA9IFtdO1xuICAgIHZhciBncmFwaHMgPSB0aGlzLmdldEdyYXBocygpO1xuICAgIHZhciBzID0gZ3JhcGhzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQoZ3JhcGhzW2ldLmdldEVkZ2VzKCkpO1xuICAgIH1cblxuICAgIGVkZ2VMaXN0ID0gZWRnZUxpc3QuY29uY2F0KHRoaXMuZWRnZXMpO1xuXG4gICAgdGhpcy5hbGxFZGdlcyA9IGVkZ2VMaXN0O1xuICB9XG4gIHJldHVybiB0aGlzLmFsbEVkZ2VzO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBmdW5jdGlvbiAobm9kZUxpc3QpIHtcbiAgaWYgKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gIT0gbnVsbCkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IG5vZGVMaXN0O1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0Um9vdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucm9vdEdyYXBoO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuc2V0Um9vdEdyYXBoID0gZnVuY3Rpb24gKGdyYXBoKSB7XG4gIGlmIChncmFwaC5nZXRHcmFwaE1hbmFnZXIoKSAhPSB0aGlzKSB7XG4gICAgdGhyb3cgXCJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgfVxuXG4gIHRoaXMucm9vdEdyYXBoID0gZ3JhcGg7XG4gIC8vIHJvb3QgZ3JhcGggbXVzdCBoYXZlIGEgcm9vdCBub2RlIGFzc29jaWF0ZWQgd2l0aCBpdCBmb3IgY29udmVuaWVuY2VcbiAgaWYgKGdyYXBoLnBhcmVudCA9PSBudWxsKSB7XG4gICAgZ3JhcGgucGFyZW50ID0gdGhpcy5sYXlvdXQubmV3Tm9kZShcIlJvb3Qgbm9kZVwiKTtcbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sYXlvdXQ7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlciA9IGZ1bmN0aW9uIChmaXJzdE5vZGUsIHNlY29uZE5vZGUpIHtcbiAgaWYgKCEoZmlyc3ROb2RlICE9IG51bGwgJiYgc2Vjb25kTm9kZSAhPSBudWxsKSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgaWYgKGZpcnN0Tm9kZSA9PSBzZWNvbmROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gSXMgc2Vjb25kIG5vZGUgYW4gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IG9uZT9cbiAgdmFyIG93bmVyR3JhcGggPSBmaXJzdE5vZGUuZ2V0T3duZXIoKTtcbiAgdmFyIHBhcmVudE5vZGU7XG5cbiAgZG8ge1xuICAgIHBhcmVudE5vZGUgPSBvd25lckdyYXBoLmdldFBhcmVudCgpO1xuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gc2Vjb25kTm9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb3duZXJHcmFwaCA9IHBhcmVudE5vZGUuZ2V0T3duZXIoKTtcbiAgICBpZiAob3duZXJHcmFwaCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuICAvLyBJcyBmaXJzdCBub2RlIGFuIGFuY2VzdG9yIG9mIHRoZSBzZWNvbmQgb25lP1xuICBvd25lckdyYXBoID0gc2Vjb25kTm9kZS5nZXRPd25lcigpO1xuXG4gIGRvIHtcbiAgICBwYXJlbnROb2RlID0gb3duZXJHcmFwaC5nZXRQYXJlbnQoKTtcblxuICAgIGlmIChwYXJlbnROb2RlID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnROb2RlID09IGZpcnN0Tm9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb3duZXJHcmFwaCA9IHBhcmVudE5vZGUuZ2V0T3duZXIoKTtcbiAgICBpZiAob3duZXJHcmFwaCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlO1xuICB2YXIgc291cmNlTm9kZTtcbiAgdmFyIHRhcmdldE5vZGU7XG4gIHZhciBzb3VyY2VBbmNlc3RvckdyYXBoO1xuICB2YXIgdGFyZ2V0QW5jZXN0b3JHcmFwaDtcblxuICB2YXIgZWRnZXMgPSB0aGlzLmdldEFsbEVkZ2VzKCk7XG4gIHZhciBzID0gZWRnZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIGVkZ2UgPSBlZGdlc1tpXTtcblxuICAgIHNvdXJjZU5vZGUgPSBlZGdlLnNvdXJjZTtcbiAgICB0YXJnZXROb2RlID0gZWRnZS50YXJnZXQ7XG4gICAgZWRnZS5sY2EgPSBudWxsO1xuICAgIGVkZ2Uuc291cmNlSW5MY2EgPSBzb3VyY2VOb2RlO1xuICAgIGVkZ2UudGFyZ2V0SW5MY2EgPSB0YXJnZXROb2RlO1xuXG4gICAgaWYgKHNvdXJjZU5vZGUgPT0gdGFyZ2V0Tm9kZSkge1xuICAgICAgZWRnZS5sY2EgPSBzb3VyY2VOb2RlLmdldE93bmVyKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzb3VyY2VBbmNlc3RvckdyYXBoID0gc291cmNlTm9kZS5nZXRPd25lcigpO1xuXG4gICAgd2hpbGUgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgIGVkZ2UudGFyZ2V0SW5MY2EgPSB0YXJnZXROb2RlO1xuICAgICAgdGFyZ2V0QW5jZXN0b3JHcmFwaCA9IHRhcmdldE5vZGUuZ2V0T3duZXIoKTtcblxuICAgICAgd2hpbGUgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yR3JhcGggPT0gc291cmNlQW5jZXN0b3JHcmFwaCkge1xuICAgICAgICAgIGVkZ2UubGNhID0gdGFyZ2V0QW5jZXN0b3JHcmFwaDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRBbmNlc3RvckdyYXBoID09IHRoaXMucm9vdEdyYXBoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWRnZS5sY2EgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAgICAgICB9XG4gICAgICAgIGVkZ2UudGFyZ2V0SW5MY2EgPSB0YXJnZXRBbmNlc3RvckdyYXBoLmdldFBhcmVudCgpO1xuICAgICAgICB0YXJnZXRBbmNlc3RvckdyYXBoID0gZWRnZS50YXJnZXRJbkxjYS5nZXRPd25lcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc291cmNlQW5jZXN0b3JHcmFwaCA9PSB0aGlzLnJvb3RHcmFwaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgICAgZWRnZS5zb3VyY2VJbkxjYSA9IHNvdXJjZUFuY2VzdG9yR3JhcGguZ2V0UGFyZW50KCk7XG4gICAgICAgIHNvdXJjZUFuY2VzdG9yR3JhcGggPSBlZGdlLnNvdXJjZUluTGNhLmdldE93bmVyKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAgIH1cbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGZpcnN0Tm9kZSwgc2Vjb25kTm9kZSkge1xuICBpZiAoZmlyc3ROb2RlID09IHNlY29uZE5vZGUpIHtcbiAgICByZXR1cm4gZmlyc3ROb2RlLmdldE93bmVyKCk7XG4gIH1cbiAgdmFyIGZpcnN0T3duZXJHcmFwaCA9IGZpcnN0Tm9kZS5nZXRPd25lcigpO1xuXG4gIGRvIHtcbiAgICBpZiAoZmlyc3RPd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgc2Vjb25kT3duZXJHcmFwaCA9IHNlY29uZE5vZGUuZ2V0T3duZXIoKTtcblxuICAgIGRvIHtcbiAgICAgIGlmIChzZWNvbmRPd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRPd25lckdyYXBoID09IGZpcnN0T3duZXJHcmFwaCkge1xuICAgICAgICByZXR1cm4gc2Vjb25kT3duZXJHcmFwaDtcbiAgICAgIH1cbiAgICAgIHNlY29uZE93bmVyR3JhcGggPSBzZWNvbmRPd25lckdyYXBoLmdldFBhcmVudCgpLmdldE93bmVyKCk7XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBmaXJzdE93bmVyR3JhcGggPSBmaXJzdE93bmVyR3JhcGguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKTtcbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmV0dXJuIGZpcnN0T3duZXJHcmFwaDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzID0gZnVuY3Rpb24gKGdyYXBoLCBkZXB0aCkge1xuICBpZiAoZ3JhcGggPT0gbnVsbCAmJiBkZXB0aCA9PSBudWxsKSB7XG4gICAgZ3JhcGggPSB0aGlzLnJvb3RHcmFwaDtcbiAgICBkZXB0aCA9IDE7XG4gIH1cbiAgdmFyIG5vZGU7XG5cbiAgdmFyIG5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTtcbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgIG5vZGUuaW5jbHVzaW9uVHJlZURlcHRoID0gZGVwdGg7XG5cbiAgICBpZiAobm9kZS5jaGlsZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKG5vZGUuY2hpbGQsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5pbmNsdWRlc0ludmFsaWRFZGdlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZTtcblxuICB2YXIgcyA9IHRoaXMuZWRnZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIGVkZ2UgPSB0aGlzLmVkZ2VzW2ldO1xuXG4gICAgaWYgKHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIoZWRnZS5zb3VyY2UsIGVkZ2UudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5mdW5jdGlvbiBGRExheW91dENvbnN0YW50cygpIHt9XG5cbi8vRkRMYXlvdXRDb25zdGFudHMgaW5oZXJpdHMgc3RhdGljIHByb3BzIGluIExheW91dENvbnN0YW50c1xuZm9yICh2YXIgcHJvcCBpbiBMYXlvdXRDb25zdGFudHMpIHtcbiAgRkRMYXlvdXRDb25zdGFudHNbcHJvcF0gPSBMYXlvdXRDb25zdGFudHNbcHJvcF07XG59XG5cbkZETGF5b3V0Q29uc3RhbnRzLk1BWF9JVEVSQVRJT05TID0gMjUwMDtcblxuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IDUwO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEggPSAwLjQ1O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEggPSA0NTAwLjA7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEggPSAwLjQ7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEggPSAxLjA7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SID0gMy44O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IDEuNTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OID0gdHJ1ZTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTiA9IHRydWU7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gMC4zO1xuRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiA9IDAuMzM7XG5GRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQgPSAxMDAwO1xuRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUID0gNTAwMDtcbkZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCA9IDEwMC4wO1xuRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UID0gRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMICogMztcbkZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLyAxMC4wO1xuRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EID0gMTAwO1xuRkRMYXlvdXRDb25zdGFudHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiA9IDAuMTtcbkZETGF5b3V0Q29uc3RhbnRzLk1JTl9FREdFX0xFTkdUSCA9IDE7XG5GRExheW91dENvbnN0YW50cy5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRCA9IDEwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZETGF5b3V0Q29uc3RhbnRzO1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG1haW50YWlucyBhIGxpc3Qgb2Ygc3RhdGljIGdlb21ldHJ5IHJlbGF0ZWQgdXRpbGl0eSBtZXRob2RzLlxuICpcbiAqXG4gKiBDb3B5cmlnaHQ6IGktVmlzIFJlc2VhcmNoIEdyb3VwLCBCaWxrZW50IFVuaXZlcnNpdHksIDIwMDcgLSBwcmVzZW50XG4gKi9cblxudmFyIFBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbmZ1bmN0aW9uIElHZW9tZXRyeSgpIHt9XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FsY3VsYXRlcyAqaGFsZiogdGhlIGFtb3VudCBpbiB4IGFuZCB5IGRpcmVjdGlvbnMgb2YgdGhlIHR3b1xuICogaW5wdXQgcmVjdGFuZ2xlcyBuZWVkZWQgdG8gc2VwYXJhdGUgdGhlbSBrZWVwaW5nIHRoZWlyIHJlc3BlY3RpdmVcbiAqIHBvc2l0aW9uaW5nLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGluIHRoZSBpbnB1dCBhcnJheS4gQW4gaW5wdXRcbiAqIHNlcGFyYXRpb24gYnVmZmVyIGFkZGVkIHRvIHRoZSBhbW91bnQgaW4gYm90aCBkaXJlY3Rpb25zLiBXZSBhc3N1bWUgdGhhdFxuICogdGhlIHR3byByZWN0YW5nbGVzIGRvIGludGVyc2VjdC5cbiAqL1xuSUdlb21ldHJ5LmNhbGNTZXBhcmF0aW9uQW1vdW50ID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3ZlcmxhcEFtb3VudCwgc2VwYXJhdGlvbkJ1ZmZlcikge1xuICBpZiAoIXJlY3RBLmludGVyc2VjdHMocmVjdEIpKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cblxuICB2YXIgZGlyZWN0aW9ucyA9IG5ldyBBcnJheSgyKTtcblxuICB0aGlzLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzKHJlY3RBLCByZWN0QiwgZGlyZWN0aW9ucyk7XG5cbiAgb3ZlcmxhcEFtb3VudFswXSA9IE1hdGgubWluKHJlY3RBLmdldFJpZ2h0KCksIHJlY3RCLmdldFJpZ2h0KCkpIC0gTWF0aC5tYXgocmVjdEEueCwgcmVjdEIueCk7XG4gIG92ZXJsYXBBbW91bnRbMV0gPSBNYXRoLm1pbihyZWN0QS5nZXRCb3R0b20oKSwgcmVjdEIuZ2V0Qm90dG9tKCkpIC0gTWF0aC5tYXgocmVjdEEueSwgcmVjdEIueSk7XG5cbiAgLy8gdXBkYXRlIHRoZSBvdmVybGFwcGluZyBhbW91bnRzIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICBpZiAocmVjdEEuZ2V0WCgpIDw9IHJlY3RCLmdldFgoKSAmJiByZWN0QS5nZXRSaWdodCgpID49IHJlY3RCLmdldFJpZ2h0KCkpIHtcbiAgICAvKiBDYXNlIHguMTpcbiAgICAqXG4gICAgKiByZWN0QVxuICAgICogXHR8ICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgKiBcdHwgICAgICAgIF9fX19fX19fXyAgICAgIHxcbiAgICAqIFx0fCAgICAgICAgfCAgICAgICB8ICAgICAgfFxuICAgICogXHR8X19fX19fX198X19fX19fX3xfX19fX198XG4gICAgKiBcdFx0XHQgfCAgICAgICB8XG4gICAgKiAgICAgICAgICAgfCAgICAgICB8XG4gICAgKiAgICAgICAgcmVjdEJcbiAgICAqL1xuICAgIG92ZXJsYXBBbW91bnRbMF0gKz0gTWF0aC5taW4ocmVjdEIuZ2V0WCgpIC0gcmVjdEEuZ2V0WCgpLCByZWN0QS5nZXRSaWdodCgpIC0gcmVjdEIuZ2V0UmlnaHQoKSk7XG4gIH0gZWxzZSBpZiAocmVjdEIuZ2V0WCgpIDw9IHJlY3RBLmdldFgoKSAmJiByZWN0Qi5nZXRSaWdodCgpID49IHJlY3RBLmdldFJpZ2h0KCkpIHtcbiAgICAvKiBDYXNlIHguMjpcbiAgICAqXG4gICAgKiByZWN0QlxuICAgICogXHR8ICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgKiBcdHwgICAgICAgIF9fX19fX19fXyAgICAgIHxcbiAgICAqIFx0fCAgICAgICAgfCAgICAgICB8ICAgICAgfFxuICAgICogXHR8X19fX19fX198X19fX19fX3xfX19fX198XG4gICAgKiBcdFx0XHQgfCAgICAgICB8XG4gICAgKiAgICAgICAgICAgfCAgICAgICB8XG4gICAgKiAgICAgICAgcmVjdEFcbiAgICAqL1xuICAgIG92ZXJsYXBBbW91bnRbMF0gKz0gTWF0aC5taW4ocmVjdEEuZ2V0WCgpIC0gcmVjdEIuZ2V0WCgpLCByZWN0Qi5nZXRSaWdodCgpIC0gcmVjdEEuZ2V0UmlnaHQoKSk7XG4gIH1cbiAgaWYgKHJlY3RBLmdldFkoKSA8PSByZWN0Qi5nZXRZKCkgJiYgcmVjdEEuZ2V0Qm90dG9tKCkgPj0gcmVjdEIuZ2V0Qm90dG9tKCkpIHtcbiAgICAvKiBDYXNlIHkuMTpcbiAgICAgKiAgICAgICAgICBfX19fX19fXyByZWN0QVxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgX19fX19ffF9fX18gIHJlY3RCXG4gICAgICogICAgICAgICB8ICAgIHxcbiAgICAgKiAgICAgICAgIHwgICAgfFxuICAgICAqICAgX19fX19ffF9fX198XG4gICAgICogICAgICAgICB8XG4gICAgICogICAgICAgICB8XG4gICAgICogICAgICAgICB8X19fX19fX19cbiAgICAgKlxuICAgICAqL1xuICAgIG92ZXJsYXBBbW91bnRbMV0gKz0gTWF0aC5taW4ocmVjdEIuZ2V0WSgpIC0gcmVjdEEuZ2V0WSgpLCByZWN0QS5nZXRCb3R0b20oKSAtIHJlY3RCLmdldEJvdHRvbSgpKTtcbiAgfSBlbHNlIGlmIChyZWN0Qi5nZXRZKCkgPD0gcmVjdEEuZ2V0WSgpICYmIHJlY3RCLmdldEJvdHRvbSgpID49IHJlY3RBLmdldEJvdHRvbSgpKSB7XG4gICAgLyogQ2FzZSB5LjI6XG4gICAgKiAgICAgICAgICBfX19fX19fXyByZWN0QlxuICAgICogICAgICAgICB8XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgX19fX19ffF9fX18gIHJlY3RBXG4gICAgKiAgICAgICAgIHwgICAgfFxuICAgICogICAgICAgICB8ICAgIHxcbiAgICAqICAgX19fX19ffF9fX198XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgICAgICAgfFxuICAgICogICAgICAgICB8X19fX19fX19cbiAgICAqXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzFdICs9IE1hdGgubWluKHJlY3RBLmdldFkoKSAtIHJlY3RCLmdldFkoKSwgcmVjdEIuZ2V0Qm90dG9tKCkgLSByZWN0QS5nZXRCb3R0b20oKSk7XG4gIH1cblxuICAvLyBmaW5kIHNsb3BlIG9mIHRoZSBsaW5lIHBhc3NlcyB0d28gY2VudGVyc1xuICB2YXIgc2xvcGUgPSBNYXRoLmFicygocmVjdEIuZ2V0Q2VudGVyWSgpIC0gcmVjdEEuZ2V0Q2VudGVyWSgpKSAvIChyZWN0Qi5nZXRDZW50ZXJYKCkgLSByZWN0QS5nZXRDZW50ZXJYKCkpKTtcbiAgLy8gaWYgY2VudGVycyBhcmUgb3ZlcmxhcHBlZFxuICBpZiAocmVjdEIuZ2V0Q2VudGVyWSgpID09PSByZWN0QS5nZXRDZW50ZXJZKCkgJiYgcmVjdEIuZ2V0Q2VudGVyWCgpID09PSByZWN0QS5nZXRDZW50ZXJYKCkpIHtcbiAgICAvLyBhc3N1bWUgdGhlIHNsb3BlIGlzIDEgKDQ1IGRlZ3JlZSlcbiAgICBzbG9wZSA9IDEuMDtcbiAgfVxuXG4gIHZhciBtb3ZlQnlZID0gc2xvcGUgKiBvdmVybGFwQW1vdW50WzBdO1xuICB2YXIgbW92ZUJ5WCA9IG92ZXJsYXBBbW91bnRbMV0gLyBzbG9wZTtcbiAgaWYgKG92ZXJsYXBBbW91bnRbMF0gPCBtb3ZlQnlYKSB7XG4gICAgbW92ZUJ5WCA9IG92ZXJsYXBBbW91bnRbMF07XG4gIH0gZWxzZSB7XG4gICAgbW92ZUJ5WSA9IG92ZXJsYXBBbW91bnRbMV07XG4gIH1cbiAgLy8gcmV0dXJuIGhhbGYgdGhlIGFtb3VudCBzbyB0aGF0IGlmIGVhY2ggcmVjdGFuZ2xlIGlzIG1vdmVkIGJ5IHRoZXNlXG4gIC8vIGFtb3VudHMgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucywgb3ZlcmxhcCB3aWxsIGJlIHJlc29sdmVkXG4gIG92ZXJsYXBBbW91bnRbMF0gPSAtMSAqIGRpcmVjdGlvbnNbMF0gKiAobW92ZUJ5WCAvIDIgKyBzZXBhcmF0aW9uQnVmZmVyKTtcbiAgb3ZlcmxhcEFtb3VudFsxXSA9IC0xICogZGlyZWN0aW9uc1sxXSAqIChtb3ZlQnlZIC8gMiArIHNlcGFyYXRpb25CdWZmZXIpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBkZWNpZGVzIHRoZSBzZXBhcmF0aW9uIGRpcmVjdGlvbiBvZiBvdmVybGFwcGluZyBub2Rlc1xuICpcbiAqIGlmIGRpcmVjdGlvbnNbMF0gPSAtMSwgdGhlbiByZWN0QSBnb2VzIGxlZnRcbiAqIGlmIGRpcmVjdGlvbnNbMF0gPSAxLCAgdGhlbiByZWN0QSBnb2VzIHJpZ2h0XG4gKiBpZiBkaXJlY3Rpb25zWzFdID0gLTEsIHRoZW4gcmVjdEEgZ29lcyB1cFxuICogaWYgZGlyZWN0aW9uc1sxXSA9IDEsICB0aGVuIHJlY3RBIGdvZXMgZG93blxuICovXG5JR2VvbWV0cnkuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMgPSBmdW5jdGlvbiAocmVjdEEsIHJlY3RCLCBkaXJlY3Rpb25zKSB7XG4gIGlmIChyZWN0QS5nZXRDZW50ZXJYKCkgPCByZWN0Qi5nZXRDZW50ZXJYKCkpIHtcbiAgICBkaXJlY3Rpb25zWzBdID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgZGlyZWN0aW9uc1swXSA9IDE7XG4gIH1cblxuICBpZiAocmVjdEEuZ2V0Q2VudGVyWSgpIDwgcmVjdEIuZ2V0Q2VudGVyWSgpKSB7XG4gICAgZGlyZWN0aW9uc1sxXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIGRpcmVjdGlvbnNbMV0gPSAxO1xuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiAoY2xpcHBpbmcpIHBvaW50cyBvZiB0aGUgdHdvXG4gKiBpbnB1dCByZWN0YW5nbGVzIHdpdGggbGluZSBzZWdtZW50IGRlZmluZWQgYnkgdGhlIGNlbnRlcnMgb2YgdGhlc2UgdHdvXG4gKiByZWN0YW5nbGVzLiBUaGUgY2xpcHBpbmcgcG9pbnRzIGFyZSBzYXZlZCBpbiB0aGUgaW5wdXQgZG91YmxlIGFycmF5IGFuZFxuICogd2hldGhlciBvciBub3QgdGhlIHR3byByZWN0YW5nbGVzIG92ZXJsYXAgaXMgcmV0dXJuZWQuXG4gKi9cbklHZW9tZXRyeS5nZXRJbnRlcnNlY3Rpb24yID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0QiwgcmVzdWx0KSB7XG4gIC8vcmVzdWx0WzAtMV0gd2lsbCBjb250YWluIGNsaXBQb2ludCBvZiByZWN0QSwgcmVzdWx0WzItM10gd2lsbCBjb250YWluIGNsaXBQb2ludCBvZiByZWN0QlxuICB2YXIgcDF4ID0gcmVjdEEuZ2V0Q2VudGVyWCgpO1xuICB2YXIgcDF5ID0gcmVjdEEuZ2V0Q2VudGVyWSgpO1xuICB2YXIgcDJ4ID0gcmVjdEIuZ2V0Q2VudGVyWCgpO1xuICB2YXIgcDJ5ID0gcmVjdEIuZ2V0Q2VudGVyWSgpO1xuXG4gIC8vaWYgdHdvIHJlY3RhbmdsZXMgaW50ZXJzZWN0LCB0aGVuIGNsaXBwaW5nIHBvaW50cyBhcmUgY2VudGVyc1xuICBpZiAocmVjdEEuaW50ZXJzZWN0cyhyZWN0QikpIHtcbiAgICByZXN1bHRbMF0gPSBwMXg7XG4gICAgcmVzdWx0WzFdID0gcDF5O1xuICAgIHJlc3VsdFsyXSA9IHAyeDtcbiAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy92YXJpYWJsZXMgZm9yIHJlY3RBXG4gIHZhciB0b3BMZWZ0QXggPSByZWN0QS5nZXRYKCk7XG4gIHZhciB0b3BMZWZ0QXkgPSByZWN0QS5nZXRZKCk7XG4gIHZhciB0b3BSaWdodEF4ID0gcmVjdEEuZ2V0UmlnaHQoKTtcbiAgdmFyIGJvdHRvbUxlZnRBeCA9IHJlY3RBLmdldFgoKTtcbiAgdmFyIGJvdHRvbUxlZnRBeSA9IHJlY3RBLmdldEJvdHRvbSgpO1xuICB2YXIgYm90dG9tUmlnaHRBeCA9IHJlY3RBLmdldFJpZ2h0KCk7XG4gIHZhciBoYWxmV2lkdGhBID0gcmVjdEEuZ2V0V2lkdGhIYWxmKCk7XG4gIHZhciBoYWxmSGVpZ2h0QSA9IHJlY3RBLmdldEhlaWdodEhhbGYoKTtcbiAgLy92YXJpYWJsZXMgZm9yIHJlY3RCXG4gIHZhciB0b3BMZWZ0QnggPSByZWN0Qi5nZXRYKCk7XG4gIHZhciB0b3BMZWZ0QnkgPSByZWN0Qi5nZXRZKCk7XG4gIHZhciB0b3BSaWdodEJ4ID0gcmVjdEIuZ2V0UmlnaHQoKTtcbiAgdmFyIGJvdHRvbUxlZnRCeCA9IHJlY3RCLmdldFgoKTtcbiAgdmFyIGJvdHRvbUxlZnRCeSA9IHJlY3RCLmdldEJvdHRvbSgpO1xuICB2YXIgYm90dG9tUmlnaHRCeCA9IHJlY3RCLmdldFJpZ2h0KCk7XG4gIHZhciBoYWxmV2lkdGhCID0gcmVjdEIuZ2V0V2lkdGhIYWxmKCk7XG4gIHZhciBoYWxmSGVpZ2h0QiA9IHJlY3RCLmdldEhlaWdodEhhbGYoKTtcblxuICAvL2ZsYWcgd2hldGhlciBjbGlwcGluZyBwb2ludHMgYXJlIGZvdW5kXG4gIHZhciBjbGlwUG9pbnRBRm91bmQgPSBmYWxzZTtcbiAgdmFyIGNsaXBQb2ludEJGb3VuZCA9IGZhbHNlO1xuXG4gIC8vIGxpbmUgaXMgdmVydGljYWxcbiAgaWYgKHAxeCA9PT0gcDJ4KSB7XG4gICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgcmVzdWx0WzBdID0gcDF4O1xuICAgICAgcmVzdWx0WzFdID0gdG9wTGVmdEF5O1xuICAgICAgcmVzdWx0WzJdID0gcDJ4O1xuICAgICAgcmVzdWx0WzNdID0gYm90dG9tTGVmdEJ5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAocDF5IDwgcDJ5KSB7XG4gICAgICByZXN1bHRbMF0gPSBwMXg7XG4gICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICByZXN1bHRbMl0gPSBwMng7XG4gICAgICByZXN1bHRbM10gPSB0b3BMZWZ0Qnk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vbm90IGxpbmUsIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICAvLyBsaW5lIGlzIGhvcml6b250YWxcbiAgZWxzZSBpZiAocDF5ID09PSBwMnkpIHtcbiAgICAgIGlmIChwMXggPiBwMngpIHtcbiAgICAgICAgcmVzdWx0WzBdID0gdG9wTGVmdEF4O1xuICAgICAgICByZXN1bHRbMV0gPSBwMXk7XG4gICAgICAgIHJlc3VsdFsyXSA9IHRvcFJpZ2h0Qng7XG4gICAgICAgIHJlc3VsdFszXSA9IHAyeTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChwMXggPCBwMngpIHtcbiAgICAgICAgcmVzdWx0WzBdID0gdG9wUmlnaHRBeDtcbiAgICAgICAgcmVzdWx0WzFdID0gcDF5O1xuICAgICAgICByZXN1bHRbMl0gPSB0b3BMZWZ0Qng7XG4gICAgICAgIHJlc3VsdFszXSA9IHAyeTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9ub3QgdmFsaWQgbGluZSwgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vc2xvcGVzIG9mIHJlY3RBJ3MgYW5kIHJlY3RCJ3MgZGlhZ29uYWxzXG4gICAgICB2YXIgc2xvcGVBID0gcmVjdEEuaGVpZ2h0IC8gcmVjdEEud2lkdGg7XG4gICAgICB2YXIgc2xvcGVCID0gcmVjdEIuaGVpZ2h0IC8gcmVjdEIud2lkdGg7XG5cbiAgICAgIC8vc2xvcGUgb2YgbGluZSBiZXR3ZWVuIGNlbnRlciBvZiByZWN0QSBhbmQgY2VudGVyIG9mIHJlY3RCXG4gICAgICB2YXIgc2xvcGVQcmltZSA9IChwMnkgLSBwMXkpIC8gKHAyeCAtIHAxeCk7XG4gICAgICB2YXIgY2FyZGluYWxEaXJlY3Rpb25BID0gdm9pZCAwO1xuICAgICAgdmFyIGNhcmRpbmFsRGlyZWN0aW9uQiA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRBeCA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRBeSA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRCeCA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRCeSA9IHZvaWQgMDtcblxuICAgICAgLy9kZXRlcm1pbmUgd2hldGhlciBjbGlwcGluZyBwb2ludCBpcyB0aGUgY29ybmVyIG9mIG5vZGVBXG4gICAgICBpZiAoLXNsb3BlQSA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gYm90dG9tTGVmdEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IGJvdHRvbUxlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFswXSA9IHRvcFJpZ2h0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gdG9wTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2xvcGVBID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMXggPiBwMngpIHtcbiAgICAgICAgICByZXN1bHRbMF0gPSB0b3BMZWZ0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gdG9wTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gYm90dG9tUmlnaHRBeDtcbiAgICAgICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgY2xpcFBvaW50QUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2RldGVybWluZSB3aGV0aGVyIGNsaXBwaW5nIHBvaW50IGlzIHRoZSBjb3JuZXIgb2Ygbm9kZUJcbiAgICAgIGlmICgtc2xvcGVCID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMnggPiBwMXgpIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSBib3R0b21MZWZ0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gYm90dG9tTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gdG9wUmlnaHRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSB0b3BMZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzbG9wZUIgPT09IHNsb3BlUHJpbWUpIHtcbiAgICAgICAgaWYgKHAyeCA+IHAxeCkge1xuICAgICAgICAgIHJlc3VsdFsyXSA9IHRvcExlZnRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSB0b3BMZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSBib3R0b21SaWdodEJ4O1xuICAgICAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICBjbGlwUG9pbnRCRm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vaWYgYm90aCBjbGlwcGluZyBwb2ludHMgYXJlIGNvcm5lcnNcbiAgICAgIGlmIChjbGlwUG9pbnRBRm91bmQgJiYgY2xpcFBvaW50QkZvdW5kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy9kZXRlcm1pbmUgQ2FyZGluYWwgRGlyZWN0aW9uIG9mIHJlY3RhbmdsZXNcbiAgICAgIGlmIChwMXggPiBwMngpIHtcbiAgICAgICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oc2xvcGVBLCBzbG9wZVByaW1lLCA0KTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQiwgc2xvcGVQcmltZSwgMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25BID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVBLCBzbG9wZVByaW1lLCAzKTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1zbG9wZUIsIHNsb3BlUHJpbWUsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocDF5ID4gcDJ5KSB7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25BID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVBLCBzbG9wZVByaW1lLCAxKTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1zbG9wZUIsIHNsb3BlUHJpbWUsIDMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oc2xvcGVBLCBzbG9wZVByaW1lLCAyKTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQiwgc2xvcGVQcmltZSwgNCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vY2FsY3VsYXRlIGNsaXBwaW5nIFBvaW50IGlmIGl0IGlzIG5vdCBmb3VuZCBiZWZvcmVcbiAgICAgIGlmICghY2xpcFBvaW50QUZvdW5kKSB7XG4gICAgICAgIHN3aXRjaCAoY2FyZGluYWxEaXJlY3Rpb25BKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSB0b3BMZWZ0QXk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IHAxeCArIC1oYWxmSGVpZ2h0QSAvIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGVtcFBvaW50QXggPSBib3R0b21SaWdodEF4O1xuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBwMXkgKyBoYWxmV2lkdGhBICogc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFswXSA9IHRlbXBQb2ludEF4O1xuICAgICAgICAgICAgcmVzdWx0WzFdID0gdGVtcFBvaW50QXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeSA9IGJvdHRvbUxlZnRBeTtcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gcDF4ICsgaGFsZkhlaWdodEEgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gYm90dG9tTGVmdEF4O1xuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBwMXkgKyAtaGFsZldpZHRoQSAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2xpcFBvaW50QkZvdW5kKSB7XG4gICAgICAgIHN3aXRjaCAoY2FyZGluYWxEaXJlY3Rpb25CKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSB0b3BMZWZ0Qnk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IHAyeCArIC1oYWxmSGVpZ2h0QiAvIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGVtcFBvaW50QnggPSBib3R0b21SaWdodEJ4O1xuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBwMnkgKyBoYWxmV2lkdGhCICogc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFsyXSA9IHRlbXBQb2ludEJ4O1xuICAgICAgICAgICAgcmVzdWx0WzNdID0gdGVtcFBvaW50Qnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gcDJ4ICsgaGFsZkhlaWdodEIgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gYm90dG9tTGVmdEJ4O1xuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBwMnkgKyAtaGFsZldpZHRoQiAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBpbiB3aGljaCBjYXJkaW5hbCBkaXJlY3Rpb24gZG9lcyBpbnB1dCBwb2ludCBzdGF5c1xuICogMTogTm9ydGhcbiAqIDI6IEVhc3RcbiAqIDM6IFNvdXRoXG4gKiA0OiBXZXN0XG4gKi9cbklHZW9tZXRyeS5nZXRDYXJkaW5hbERpcmVjdGlvbiA9IGZ1bmN0aW9uIChzbG9wZSwgc2xvcGVQcmltZSwgbGluZSkge1xuICBpZiAoc2xvcGUgPiBzbG9wZVByaW1lKSB7XG4gICAgcmV0dXJuIGxpbmU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDEgKyBsaW5lICUgNDtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBsaW5lcyBkZWZpbmVkIGJ5XG4gKiBwb2ludCBwYWlycyAoczEsczIpIGFuZCAoZjEsZjIpLlxuICovXG5JR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHMxLCBzMiwgZjEsIGYyKSB7XG4gIGlmIChmMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihzMSwgczIsIGYxKTtcbiAgfVxuXG4gIHZhciB4MSA9IHMxLng7XG4gIHZhciB5MSA9IHMxLnk7XG4gIHZhciB4MiA9IHMyLng7XG4gIHZhciB5MiA9IHMyLnk7XG4gIHZhciB4MyA9IGYxLng7XG4gIHZhciB5MyA9IGYxLnk7XG4gIHZhciB4NCA9IGYyLng7XG4gIHZhciB5NCA9IGYyLnk7XG4gIHZhciB4ID0gdm9pZCAwLFxuICAgICAgeSA9IHZvaWQgMDsgLy8gaW50ZXJzZWN0aW9uIHBvaW50XG4gIHZhciBhMSA9IHZvaWQgMCxcbiAgICAgIGEyID0gdm9pZCAwLFxuICAgICAgYjEgPSB2b2lkIDAsXG4gICAgICBiMiA9IHZvaWQgMCxcbiAgICAgIGMxID0gdm9pZCAwLFxuICAgICAgYzIgPSB2b2lkIDA7IC8vIGNvZWZmaWNpZW50cyBvZiBsaW5lIGVxbnMuXG4gIHZhciBkZW5vbSA9IHZvaWQgMDtcblxuICBhMSA9IHkyIC0geTE7XG4gIGIxID0geDEgLSB4MjtcbiAgYzEgPSB4MiAqIHkxIC0geDEgKiB5MjsgLy8geyBhMSp4ICsgYjEqeSArIGMxID0gMCBpcyBsaW5lIDEgfVxuXG4gIGEyID0geTQgLSB5MztcbiAgYjIgPSB4MyAtIHg0O1xuICBjMiA9IHg0ICogeTMgLSB4MyAqIHk0OyAvLyB7IGEyKnggKyBiMip5ICsgYzIgPSAwIGlzIGxpbmUgMiB9XG5cbiAgZGVub20gPSBhMSAqIGIyIC0gYTIgKiBiMTtcblxuICBpZiAoZGVub20gPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHggPSAoYjEgKiBjMiAtIGIyICogYzEpIC8gZGVub207XG4gIHkgPSAoYTIgKiBjMSAtIGExICogYzIpIC8gZGVub207XG5cbiAgcmV0dXJuIG5ldyBQb2ludCh4LCB5KTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmluZHMgYW5kIHJldHVybnMgdGhlIGFuZ2xlIG9mIHRoZSB2ZWN0b3IgZnJvbSB0aGUgKyB4LWF4aXNcbiAqIGluIGNsb2Nrd2lzZSBkaXJlY3Rpb24gKGNvbXBhdGlibGUgdy8gSmF2YSBjb29yZGluYXRlIHN5c3RlbSEpLlxuICovXG5JR2VvbWV0cnkuYW5nbGVPZlZlY3RvciA9IGZ1bmN0aW9uIChDeCwgQ3ksIE54LCBOeSkge1xuICB2YXIgQ19hbmdsZSA9IHZvaWQgMDtcblxuICBpZiAoQ3ggIT09IE54KSB7XG4gICAgQ19hbmdsZSA9IE1hdGguYXRhbigoTnkgLSBDeSkgLyAoTnggLSBDeCkpO1xuXG4gICAgaWYgKE54IDwgQ3gpIHtcbiAgICAgIENfYW5nbGUgKz0gTWF0aC5QSTtcbiAgICB9IGVsc2UgaWYgKE55IDwgQ3kpIHtcbiAgICAgIENfYW5nbGUgKz0gdGhpcy5UV09fUEk7XG4gICAgfVxuICB9IGVsc2UgaWYgKE55IDwgQ3kpIHtcbiAgICBDX2FuZ2xlID0gdGhpcy5PTkVfQU5EX0hBTEZfUEk7IC8vIDI3MCBkZWdyZWVzXG4gIH0gZWxzZSB7XG4gICAgQ19hbmdsZSA9IHRoaXMuSEFMRl9QSTsgLy8gOTAgZGVncmVlc1xuICB9XG5cbiAgcmV0dXJuIENfYW5nbGU7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0d28gbGluZSBzZWdtZW50cyAob25lIHdpdGggcG9pbnRcbiAqIHAxIGFuZCBwMiwgdGhlIG90aGVyIHdpdGggcG9pbnQgcDMgYW5kIHA0KSBpbnRlcnNlY3QgYXQgYSBwb2ludCBvdGhlclxuICogdGhhbiB0aGVzZSBwb2ludHMuXG4gKi9cbklHZW9tZXRyeS5kb0ludGVyc2VjdCA9IGZ1bmN0aW9uIChwMSwgcDIsIHAzLCBwNCkge1xuICB2YXIgYSA9IHAxLng7XG4gIHZhciBiID0gcDEueTtcbiAgdmFyIGMgPSBwMi54O1xuICB2YXIgZCA9IHAyLnk7XG4gIHZhciBwID0gcDMueDtcbiAgdmFyIHEgPSBwMy55O1xuICB2YXIgciA9IHA0Lng7XG4gIHZhciBzID0gcDQueTtcbiAgdmFyIGRldCA9IChjIC0gYSkgKiAocyAtIHEpIC0gKHIgLSBwKSAqIChkIC0gYik7XG5cbiAgaWYgKGRldCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFtYmRhID0gKChzIC0gcSkgKiAociAtIGEpICsgKHAgLSByKSAqIChzIC0gYikpIC8gZGV0O1xuICAgIHZhciBnYW1tYSA9ICgoYiAtIGQpICogKHIgLSBhKSArIChjIC0gYSkgKiAocyAtIGIpKSAvIGRldDtcbiAgICByZXR1cm4gMCA8IGxhbWJkYSAmJiBsYW1iZGEgPCAxICYmIDAgPCBnYW1tYSAmJiBnYW1tYSA8IDE7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBDbGFzcyBDb25zdGFudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNvbWUgdXNlZnVsIHByZS1jYWxjdWxhdGVkIGNvbnN0YW50c1xuICovXG5JR2VvbWV0cnkuSEFMRl9QSSA9IDAuNSAqIE1hdGguUEk7XG5JR2VvbWV0cnkuT05FX0FORF9IQUxGX1BJID0gMS41ICogTWF0aC5QSTtcbklHZW9tZXRyeS5UV09fUEkgPSAyLjAgKiBNYXRoLlBJO1xuSUdlb21ldHJ5LlRIUkVFX1BJID0gMy4wICogTWF0aC5QSTtcblxubW9kdWxlLmV4cG9ydHMgPSBJR2VvbWV0cnk7XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBJTWF0aCgpIHt9XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgaW5wdXQgdmFsdWUuXG4gKi9cbklNYXRoLnNpZ24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlID4gMCkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuSU1hdGguZmxvb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGguY2VpbCh2YWx1ZSkgOiBNYXRoLmZsb29yKHZhbHVlKTtcbn07XG5cbklNYXRoLmNlaWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGguZmxvb3IodmFsdWUpIDogTWF0aC5jZWlsKHZhbHVlKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSU1hdGg7XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gSW50ZWdlcigpIHt9XG5cbkludGVnZXIuTUFYX1ZBTFVFID0gMjE0NzQ4MzY0NztcbkludGVnZXIuTUlOX1ZBTFVFID0gLTIxNDc0ODM2NDg7XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZWdlcjtcblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgbm9kZUZyb20gPSBmdW5jdGlvbiBub2RlRnJvbSh2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIG5leHQ6IG51bGwsIHByZXY6IG51bGwgfTtcbn07XG5cbnZhciBhZGQgPSBmdW5jdGlvbiBhZGQocHJldiwgbm9kZSwgbmV4dCwgbGlzdCkge1xuICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgIHByZXYubmV4dCA9IG5vZGU7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC5oZWFkID0gbm9kZTtcbiAgfVxuXG4gIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgbmV4dC5wcmV2ID0gbm9kZTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LnRhaWwgPSBub2RlO1xuICB9XG5cbiAgbm9kZS5wcmV2ID0gcHJldjtcbiAgbm9kZS5uZXh0ID0gbmV4dDtcblxuICBsaXN0Lmxlbmd0aCsrO1xuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIF9yZW1vdmUgPSBmdW5jdGlvbiBfcmVtb3ZlKG5vZGUsIGxpc3QpIHtcbiAgdmFyIHByZXYgPSBub2RlLnByZXYsXG4gICAgICBuZXh0ID0gbm9kZS5uZXh0O1xuXG5cbiAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICB9IGVsc2Uge1xuICAgIGxpc3QuaGVhZCA9IG5leHQ7XG4gIH1cblxuICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgIG5leHQucHJldiA9IHByZXY7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC50YWlsID0gcHJldjtcbiAgfVxuXG4gIG5vZGUucHJldiA9IG5vZGUubmV4dCA9IG51bGw7XG5cbiAgbGlzdC5sZW5ndGgtLTtcblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBMaW5rZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMaW5rZWRMaXN0KHZhbHMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmtlZExpc3QpO1xuXG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcblxuICAgIGlmICh2YWxzICE9IG51bGwpIHtcbiAgICAgIHZhbHMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gX3RoaXMucHVzaCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMaW5rZWRMaXN0LCBbe1xuICAgIGtleTogXCJzaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydEJlZm9yZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnRCZWZvcmUodmFsLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLnByZXYsIG5vZGVGcm9tKHZhbCksIG90aGVyTm9kZSwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydEFmdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydEFmdGVyKHZhbCwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZSwgbm9kZUZyb20odmFsKSwgb3RoZXJOb2RlLm5leHQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNlcnROb2RlQmVmb3JlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydE5vZGVCZWZvcmUobmV3Tm9kZSwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZS5wcmV2LCBuZXdOb2RlLCBvdGhlck5vZGUsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNlcnROb2RlQWZ0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0Tm9kZUFmdGVyKG5ld05vZGUsIG90aGVyTm9kZSkge1xuICAgICAgcmV0dXJuIGFkZChvdGhlck5vZGUsIG5ld05vZGUsIG90aGVyTm9kZS5uZXh0LCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHVzaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXNoKHZhbCkge1xuICAgICAgcmV0dXJuIGFkZCh0aGlzLnRhaWwsIG5vZGVGcm9tKHZhbCksIG51bGwsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVuc2hpZnQodmFsKSB7XG4gICAgICByZXR1cm4gYWRkKG51bGwsIG5vZGVGcm9tKHZhbCksIHRoaXMuaGVhZCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUobm9kZSkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUobm9kZSwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBvcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwb3AoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLnRhaWwsIHRoaXMpLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwb3BOb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBvcE5vZGUoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLnRhaWwsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMuaGVhZCwgdGhpcykudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0Tm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdE5vZGUoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLmhlYWQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRfb2JqZWN0X2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldF9vYmplY3RfYXQoaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA8PSB0aGlzLmxlbmd0aCgpKSB7XG4gICAgICAgIHZhciBpID0gMTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmhlYWQ7XG4gICAgICAgIHdoaWxlIChpIDwgaW5kZXgpIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0X29iamVjdF9hdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRfb2JqZWN0X2F0KGluZGV4LCB2YWx1ZSkge1xuICAgICAgaWYgKGluZGV4IDw9IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuaGVhZDtcbiAgICAgICAgd2hpbGUgKGkgPCBpbmRleCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGlua2VkTGlzdDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRMaXN0O1xuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qXHJcbiAqVGhpcyBjbGFzcyBpcyB0aGUgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9pbnQuamF2YSBjbGFzcyBpbiBqZGtcclxuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5LCBwKSB7XG4gIHRoaXMueCA9IG51bGw7XG4gIHRoaXMueSA9IG51bGw7XG4gIGlmICh4ID09IG51bGwgJiYgeSA9PSBudWxsICYmIHAgPT0gbnVsbCkge1xuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PSAnbnVtYmVyJyAmJiB0eXBlb2YgeSA9PSAnbnVtYmVyJyAmJiBwID09IG51bGwpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH0gZWxzZSBpZiAoeC5jb25zdHJ1Y3Rvci5uYW1lID09ICdQb2ludCcgJiYgeSA9PSBudWxsICYmIHAgPT0gbnVsbCkge1xuICAgIHAgPSB4O1xuICAgIHRoaXMueCA9IHAueDtcbiAgICB0aGlzLnkgPSBwLnk7XG4gIH1cbn1cblxuUG9pbnQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLng7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgcCkge1xuICBpZiAoeC5jb25zdHJ1Y3Rvci5uYW1lID09ICdQb2ludCcgJiYgeSA9PSBudWxsICYmIHAgPT0gbnVsbCkge1xuICAgIHAgPSB4O1xuICAgIHRoaXMuc2V0TG9jYXRpb24ocC54LCBwLnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09ICdudW1iZXInICYmIHR5cGVvZiB5ID09ICdudW1iZXInICYmIHAgPT0gbnVsbCkge1xuICAgIC8vaWYgYm90aCBwYXJhbWV0ZXJzIGFyZSBpbnRlZ2VyIGp1c3QgbW92ZSAoeCx5KSBsb2NhdGlvblxuICAgIGlmIChwYXJzZUludCh4KSA9PSB4ICYmIHBhcnNlSW50KHkpID09IHkpIHtcbiAgICAgIHRoaXMubW92ZSh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy54ID0gTWF0aC5mbG9vcih4ICsgMC41KTtcbiAgICAgIHRoaXMueSA9IE1hdGguZmxvb3IoeSArIDAuNSk7XG4gICAgfVxuICB9XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKGR4LCBkeSkge1xuICB0aGlzLnggKz0gZHg7XG4gIHRoaXMueSArPSBkeTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGlmIChvYmouY29uc3RydWN0b3IubmFtZSA9PSBcIlBvaW50XCIpIHtcbiAgICB2YXIgcHQgPSBvYmo7XG4gICAgcmV0dXJuIHRoaXMueCA9PSBwdC54ICYmIHRoaXMueSA9PSBwdC55O1xuICB9XG4gIHJldHVybiB0aGlzID09IG9iajtcbn07XG5cblBvaW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCgpLmNvbnN0cnVjdG9yLm5hbWUgKyBcIlt4PVwiICsgdGhpcy54ICsgXCIseT1cIiArIHRoaXMueSArIFwiXVwiO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBSZWN0YW5nbGVEKHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgdGhpcy54ID0gMDtcbiAgdGhpcy55ID0gMDtcbiAgdGhpcy53aWR0aCA9IDA7XG4gIHRoaXMuaGVpZ2h0ID0gMDtcblxuICBpZiAoeCAhPSBudWxsICYmIHkgIT0gbnVsbCAmJiB3aWR0aCAhPSBudWxsICYmIGhlaWdodCAhPSBudWxsKSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxufVxuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0WCA9IGZ1bmN0aW9uICh4KSB7XG4gIHRoaXMueCA9IHg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0WSA9IGZ1bmN0aW9uICh5KSB7XG4gIHRoaXMueSA9IHk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMud2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRXaWR0aCA9IGZ1bmN0aW9uICh3aWR0aCkge1xuICB0aGlzLndpZHRoID0gd2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIChoZWlnaHQpIHtcbiAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRSaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueCArIHRoaXMud2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRCb3R0b20gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnkgKyB0aGlzLmhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmludGVyc2VjdHMgPSBmdW5jdGlvbiAoYSkge1xuICBpZiAodGhpcy5nZXRSaWdodCgpIDwgYS54KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuZ2V0Qm90dG9tKCkgPCBhLnkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYS5nZXRSaWdodCgpIDwgdGhpcy54KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEuZ2V0Qm90dG9tKCkgPCB0aGlzLnkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldENlbnRlclggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnggKyB0aGlzLndpZHRoIC8gMjtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldE1pblggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldE1heFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKSArIHRoaXMud2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRDZW50ZXJZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55ICsgdGhpcy5oZWlnaHQgLyAyO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWluWSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WSgpO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWF4WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WSgpICsgdGhpcy5oZWlnaHQ7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRXaWR0aEhhbGYgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLndpZHRoIC8gMjtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldEhlaWdodEhhbGYgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhlaWdodCAvIDI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZUQ7XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBVbmlxdWVJREdlbmVyZXRvcigpIHt9XG5cblVuaXF1ZUlER2VuZXJldG9yLmxhc3RJRCA9IDA7XG5cblVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEID0gZnVuY3Rpb24gKG9iaikge1xuICBpZiAoVW5pcXVlSURHZW5lcmV0b3IuaXNQcmltaXRpdmUob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgaWYgKG9iai51bmlxdWVJRCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIG9iai51bmlxdWVJRDtcbiAgfVxuICBvYmoudW5pcXVlSUQgPSBVbmlxdWVJREdlbmVyZXRvci5nZXRTdHJpbmcoKTtcbiAgVW5pcXVlSURHZW5lcmV0b3IubGFzdElEKys7XG4gIHJldHVybiBvYmoudW5pcXVlSUQ7XG59O1xuXG5VbmlxdWVJREdlbmVyZXRvci5nZXRTdHJpbmcgPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGlkID09IG51bGwpIGlkID0gVW5pcXVlSURHZW5lcmV0b3IubGFzdElEO1xuICByZXR1cm4gXCJPYmplY3QjXCIgKyBpZCArIFwiXCI7XG59O1xuXG5VbmlxdWVJREdlbmVyZXRvci5pc1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgYXJnID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoYXJnKTtcbiAgcmV0dXJuIGFyZyA9PSBudWxsIHx8IHR5cGUgIT0gXCJvYmplY3RcIiAmJiB0eXBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVW5pcXVlSURHZW5lcmV0b3I7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIExHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIExOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBMRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIFRyYW5zZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIEVtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcblxuZnVuY3Rpb24gTGF5b3V0KGlzUmVtb3RlVXNlKSB7XG4gIEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAvL0xheW91dCBRdWFsaXR5OiAwOmRyYWZ0LCAxOmRlZmF1bHQsIDI6cHJvb2ZcbiAgdGhpcy5sYXlvdXRRdWFsaXR5ID0gTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFk7XG4gIC8vV2hldGhlciBsYXlvdXQgc2hvdWxkIGNyZWF0ZSBiZW5kcG9pbnRzIGFzIG5lZWRlZCBvciBub3RcbiAgdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtcbiAgLy9XaGV0aGVyIGxheW91dCBzaG91bGQgYmUgaW5jcmVtZW50YWwgb3Igbm90XG4gIHRoaXMuaW5jcmVtZW50YWwgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTDtcbiAgLy9XaGV0aGVyIHdlIGFuaW1hdGUgZnJvbSBiZWZvcmUgdG8gYWZ0ZXIgbGF5b3V0IG5vZGUgcG9zaXRpb25zXG4gIHRoaXMuYW5pbWF0aW9uT25MYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUO1xuICAvL1doZXRoZXIgd2UgYW5pbWF0ZSB0aGUgbGF5b3V0IHByb2Nlc3Mgb3Igbm90XG4gIHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ7XG4gIC8vTnVtYmVyIGl0ZXJhdGlvbnMgdGhhdCBzaG91bGQgYmUgZG9uZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGFuaW1hdGlvbnNcbiAgdGhpcy5hbmltYXRpb25QZXJpb2QgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fUEVSSU9EO1xuICAvKipcclxuICAgKiBXaGV0aGVyIG9yIG5vdCBsZWFmIG5vZGVzIChub24tY29tcG91bmQgbm9kZXMpIGFyZSBvZiB1bmlmb3JtIHNpemVzLiBXaGVuXHJcbiAgICogdGhleSBhcmUsIGJvdGggc3ByaW5nIGFuZCByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gdHdvIGxlYWYgbm9kZXMgY2FuIGJlXHJcbiAgICogY2FsY3VsYXRlZCB3aXRob3V0IHRoZSBleHBlbnNpdmUgY2xpcHBpbmcgcG9pbnQgY2FsY3VsYXRpb25zLCByZXN1bHRpbmdcclxuICAgKiBpbiBtYWpvciBzcGVlZC11cC5cclxuICAgKi9cbiAgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTO1xuICAvKipcclxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGNyZWF0aW9uIG9mIGJlbmRwb2ludHMgYnkgdXNpbmcgZHVtbXkgbm9kZXMgYW5kIGVkZ2VzLlxyXG4gICAqIE1hcHMgYW4gTEVkZ2UgdG8gaXRzIGR1bW15IGJlbmRwb2ludCBwYXRoLlxyXG4gICAqL1xuICB0aGlzLmVkZ2VUb0R1bW15Tm9kZXMgPSBuZXcgTWFwKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gbmV3IExHcmFwaE1hbmFnZXIodGhpcyk7XG4gIHRoaXMuaXNMYXlvdXRGaW5pc2hlZCA9IGZhbHNlO1xuICB0aGlzLmlzU3ViTGF5b3V0ID0gZmFsc2U7XG4gIHRoaXMuaXNSZW1vdGVVc2UgPSBmYWxzZTtcblxuICBpZiAoaXNSZW1vdGVVc2UgIT0gbnVsbCkge1xuICAgIHRoaXMuaXNSZW1vdGVVc2UgPSBpc1JlbW90ZVVzZTtcbiAgfVxufVxuXG5MYXlvdXQuUkFORE9NX1NFRUQgPSAxO1xuXG5MYXlvdXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFbWl0dGVyLnByb3RvdHlwZSk7XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLmdldEFsbE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0QWxsRWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGdtID0gbmV3IExHcmFwaE1hbmFnZXIodGhpcyk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gZ207XG4gIHJldHVybiBnbTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3R3JhcGggPSBmdW5jdGlvbiAodkdyYXBoKSB7XG4gIHJldHVybiBuZXcgTEdyYXBoKG51bGwsIHRoaXMuZ3JhcGhNYW5hZ2VyLCB2R3JhcGgpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdOb2RlID0gZnVuY3Rpb24gKHZOb2RlKSB7XG4gIHJldHVybiBuZXcgTE5vZGUodGhpcy5ncmFwaE1hbmFnZXIsIHZOb2RlKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3RWRnZSA9IGZ1bmN0aW9uICh2RWRnZSkge1xuICByZXR1cm4gbmV3IExFZGdlKG51bGwsIG51bGwsIHZFZGdlKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuY2hlY2tMYXlvdXRTdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpID09IG51bGwgfHwgdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkubGVuZ3RoID09IDAgfHwgdGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5ydW5MYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaXNMYXlvdXRGaW5pc2hlZCA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLnRpbGluZ1ByZUxheW91dCkge1xuICAgIHRoaXMudGlsaW5nUHJlTGF5b3V0KCk7XG4gIH1cblxuICB0aGlzLmluaXRQYXJhbWV0ZXJzKCk7XG4gIHZhciBpc0xheW91dFN1Y2Nlc3NmdWxsO1xuXG4gIGlmICh0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpKSB7XG4gICAgaXNMYXlvdXRTdWNjZXNzZnVsbCA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGlzTGF5b3V0U3VjY2Vzc2Z1bGwgPSB0aGlzLmxheW91dCgpO1xuICB9XG5cbiAgaWYgKExheW91dENvbnN0YW50cy5BTklNQVRFID09PSAnZHVyaW5nJykge1xuICAgIC8vIElmIHRoaXMgaXMgYSAnZHVyaW5nJyBsYXlvdXQgYW5pbWF0aW9uLiBMYXlvdXQgaXMgbm90IGZpbmlzaGVkIHlldC4gXG4gICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZXNlIGluIGluZGV4LmpzIHdoZW4gbGF5b3V0IGlzIHJlYWxseSBmaW5pc2hlZC5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNMYXlvdXRTdWNjZXNzZnVsbCkge1xuICAgIGlmICghdGhpcy5pc1N1YkxheW91dCkge1xuICAgICAgdGhpcy5kb1Bvc3RMYXlvdXQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy50aWxpbmdQb3N0TGF5b3V0KSB7XG4gICAgdGhpcy50aWxpbmdQb3N0TGF5b3V0KCk7XG4gIH1cblxuICB0aGlzLmlzTGF5b3V0RmluaXNoZWQgPSB0cnVlO1xuXG4gIHJldHVybiBpc0xheW91dFN1Y2Nlc3NmdWxsO1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBvcGVyYXRpb25zIHJlcXVpcmVkIGFmdGVyIGxheW91dC5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmRvUG9zdExheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgLy9hc3NlcnQgIWlzU3ViTGF5b3V0IDogXCJTaG91bGQgbm90IGJlIGNhbGxlZCBvbiBzdWItbGF5b3V0IVwiO1xuICAvLyBQcm9wYWdhdGUgZ2VvbWV0cmljIGNoYW5nZXMgdG8gdi1sZXZlbCBvYmplY3RzXG4gIGlmICghdGhpcy5pbmNyZW1lbnRhbCkge1xuICAgIHRoaXMudHJhbnNmb3JtKCk7XG4gIH1cbiAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBnZW9tZXRyeSBvZiB0aGUgdGFyZ2V0IGdyYXBoIGFjY29yZGluZyB0b1xyXG4gKiBjYWxjdWxhdGVkIGxheW91dC5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLnVwZGF0ZTIgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHVwZGF0ZSBiZW5kIHBvaW50c1xuICBpZiAodGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkKSB7XG4gICAgdGhpcy5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMoKTtcblxuICAgIC8vIHJlc2V0IGFsbCBlZGdlcywgc2luY2UgdGhlIHRvcG9sb2d5IGhhcyBjaGFuZ2VkXG4gICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpO1xuICB9XG5cbiAgLy8gcGVyZm9ybSBlZGdlLCBub2RlIGFuZCByb290IHVwZGF0ZXMgaWYgbGF5b3V0IGlzIG5vdCBjYWxsZWRcbiAgLy8gcmVtb3RlbHlcbiAgaWYgKCF0aGlzLmlzUmVtb3RlVXNlKSB7XG4gICAgLy8gdXBkYXRlIGFsbCBlZGdlc1xuICAgIHZhciBlZGdlO1xuICAgIHZhciBhbGxFZGdlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZSA9IGFsbEVkZ2VzW2ldO1xuICAgICAgLy8gICAgICB0aGlzLnVwZGF0ZShlZGdlKTtcbiAgICB9XG5cbiAgICAvLyByZWN1cnNpdmVseSB1cGRhdGUgbm9kZXNcbiAgICB2YXIgbm9kZTtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAvLyAgICAgIHRoaXMudXBkYXRlKG5vZGUpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSByb290IGdyYXBoXG4gICAgdGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKTtcbiAgfVxufTtcblxuTGF5b3V0LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHRoaXMudXBkYXRlMigpO1xuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExOb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBvYmo7XG4gICAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSAhPSBudWxsKSB7XG4gICAgICAvLyBzaW5jZSBub2RlIGlzIGNvbXBvdW5kLCByZWN1cnNpdmVseSB1cGRhdGUgY2hpbGQgbm9kZXNcbiAgICAgIHZhciBub2RlcyA9IG5vZGUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1cGRhdGUobm9kZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoZSBsLWxldmVsIG5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdi1sZXZlbCBncmFwaCBvYmplY3QsXG4gICAgLy8gdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHYtbGV2ZWwgbm9kZSBpbXBsZW1lbnRzIHRoZVxuICAgIC8vIGludGVyZmFjZSBVcGRhdGFibGUuXG4gICAgaWYgKG5vZGUudkdyYXBoT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIC8vIGNhc3QgdG8gVXBkYXRhYmxlIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tcbiAgICAgIHZhciB2Tm9kZSA9IG5vZGUudkdyYXBoT2JqZWN0O1xuXG4gICAgICAvLyBjYWxsIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBpbnRlcmZhY2VcbiAgICAgIHZOb2RlLnVwZGF0ZShub2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTEVkZ2UpIHtcbiAgICB2YXIgZWRnZSA9IG9iajtcbiAgICAvLyBpZiB0aGUgbC1sZXZlbCBlZGdlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHYtbGV2ZWwgZ3JhcGggb2JqZWN0LFxuICAgIC8vIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB2LWxldmVsIGVkZ2UgaW1wbGVtZW50cyB0aGVcbiAgICAvLyBpbnRlcmZhY2UgVXBkYXRhYmxlLlxuXG4gICAgaWYgKGVkZ2UudkdyYXBoT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIC8vIGNhc3QgdG8gVXBkYXRhYmxlIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tcbiAgICAgIHZhciB2RWRnZSA9IGVkZ2UudkdyYXBoT2JqZWN0O1xuXG4gICAgICAvLyBjYWxsIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBpbnRlcmZhY2VcbiAgICAgIHZFZGdlLnVwZGF0ZShlZGdlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTEdyYXBoKSB7XG4gICAgdmFyIGdyYXBoID0gb2JqO1xuICAgIC8vIGlmIHRoZSBsLWxldmVsIGdyYXBoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHYtbGV2ZWwgZ3JhcGggb2JqZWN0LFxuICAgIC8vIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB2LWxldmVsIG9iamVjdCBpbXBsZW1lbnRzIHRoZVxuICAgIC8vIGludGVyZmFjZSBVcGRhdGFibGUuXG5cbiAgICBpZiAoZ3JhcGgudkdyYXBoT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIC8vIGNhc3QgdG8gVXBkYXRhYmxlIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tcbiAgICAgIHZhciB2R3JhcGggPSBncmFwaC52R3JhcGhPYmplY3Q7XG5cbiAgICAgIC8vIGNhbGwgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIGludGVyZmFjZVxuICAgICAgdkdyYXBoLnVwZGF0ZShncmFwaCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgYWxsIGxheW91dCBwYXJhbWV0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzXHJcbiAqIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5pc1N1YkxheW91dCkge1xuICAgIHRoaXMubGF5b3V0UXVhbGl0eSA9IExheW91dENvbnN0YW50cy5RVUFMSVRZO1xuICAgIHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ7XG4gICAgdGhpcy5hbmltYXRpb25QZXJpb2QgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fUEVSSU9EO1xuICAgIHRoaXMuYW5pbWF0aW9uT25MYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUO1xuICAgIHRoaXMuaW5jcmVtZW50YWwgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTDtcbiAgICB0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO1xuICAgIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUztcbiAgfVxuXG4gIGlmICh0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCkge1xuICAgIHRoaXMuYW5pbWF0aW9uT25MYXlvdXQgPSBmYWxzZTtcbiAgfVxufTtcblxuTGF5b3V0LnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAobmV3TGVmdFRvcCkge1xuICBpZiAobmV3TGVmdFRvcCA9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRyYW5zZm9ybShuZXcgUG9pbnREKDAsIDApKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYSB0cmFuc2Zvcm1hdGlvbiBvYmplY3QgKGZyb20gRWNsaXBzZSB0byBsYXlvdXQpLiBXaGVuIGFuXG4gICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm0gaXMgYXBwbGllZCwgd2UgZ2V0IHVwcGVyLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGVcbiAgICAvLyBkcmF3aW5nIG9yIHRoZSByb290IGdyYXBoIGF0IGdpdmVuIGlucHV0IGNvb3JkaW5hdGUgKHNvbWUgbWFyZ2luc1xuICAgIC8vIGFscmVhZHkgaW5jbHVkZWQgaW4gY2FsY3VsYXRpb24gb2YgbGVmdC10b3ApLlxuXG4gICAgdmFyIHRyYW5zID0gbmV3IFRyYW5zZm9ybSgpO1xuICAgIHZhciBsZWZ0VG9wID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtcblxuICAgIGlmIChsZWZ0VG9wICE9IG51bGwpIHtcbiAgICAgIHRyYW5zLnNldFdvcmxkT3JnWChuZXdMZWZ0VG9wLngpO1xuICAgICAgdHJhbnMuc2V0V29ybGRPcmdZKG5ld0xlZnRUb3AueSk7XG5cbiAgICAgIHRyYW5zLnNldERldmljZU9yZ1gobGVmdFRvcC54KTtcbiAgICAgIHRyYW5zLnNldERldmljZU9yZ1kobGVmdFRvcC55KTtcblxuICAgICAgdmFyIG5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICAgICAgdmFyIG5vZGU7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBub2RlLnRyYW5zZm9ybSh0cmFucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seSA9IGZ1bmN0aW9uIChncmFwaCkge1xuXG4gIGlmIChncmFwaCA9PSB1bmRlZmluZWQpIHtcbiAgICAvL2Fzc2VydCAhdGhpcy5pbmNyZW1lbnRhbDtcbiAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSk7XG4gICAgdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsTm9kZTtcbiAgICB2YXIgY2hpbGRHcmFwaDtcblxuICAgIHZhciBub2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbE5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGNoaWxkR3JhcGggPSBsTm9kZS5nZXRDaGlsZCgpO1xuXG4gICAgICBpZiAoY2hpbGRHcmFwaCA9PSBudWxsKSB7XG4gICAgICAgIGxOb2RlLnNjYXR0ZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRHcmFwaC5nZXROb2RlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGxOb2RlLnNjYXR0ZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KGNoaWxkR3JhcGgpO1xuICAgICAgICBsTm9kZS51cGRhdGVCb3VuZHMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0cmVlcyB3aGVyZSBlYWNoIHRyZWUgaXMgcmVwcmVzZW50ZWQgYXMgYVxyXG4gKiBsaXN0IG9mIGwtbm9kZXMuIFRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2Ygc2l6ZSAwIHdoZW46XHJcbiAqIC0gVGhlIGdyYXBoIGlzIG5vdCBmbGF0IG9yXHJcbiAqIC0gT25lIG9mIHRoZSBjb21wb25lbnQocykgb2YgdGhlIGdyYXBoIGlzIG5vdCBhIHRyZWUuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5nZXRGbGF0Rm9yZXN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZmxhdEZvcmVzdCA9IFtdO1xuICB2YXIgaXNGb3Jlc3QgPSB0cnVlO1xuXG4gIC8vIFF1aWNrIHJlZmVyZW5jZSBmb3IgYWxsIG5vZGVzIGluIHRoZSBncmFwaCBtYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aFxuICAvLyB0aGlzIGxheW91dC4gVGhlIGxpc3Qgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICB2YXIgYWxsTm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKTtcblxuICAvLyBGaXJzdCBiZSBzdXJlIHRoYXQgdGhlIGdyYXBoIGlzIGZsYXRcbiAgdmFyIGlzRmxhdCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhbGxOb2Rlc1tpXS5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgIGlzRmxhdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBlbXB0eSBmb3Jlc3QgaWYgdGhlIGdyYXBoIGlzIG5vdCBmbGF0LlxuICBpZiAoIWlzRmxhdCkge1xuICAgIHJldHVybiBmbGF0Rm9yZXN0O1xuICB9XG5cbiAgLy8gUnVuIEJGUyBmb3IgZWFjaCBjb21wb25lbnQgb2YgdGhlIGdyYXBoLlxuXG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgdG9CZVZpc2l0ZWQgPSBbXTtcbiAgdmFyIHBhcmVudHMgPSBuZXcgTWFwKCk7XG4gIHZhciB1blByb2Nlc3NlZE5vZGVzID0gW107XG5cbiAgdW5Qcm9jZXNzZWROb2RlcyA9IHVuUHJvY2Vzc2VkTm9kZXMuY29uY2F0KGFsbE5vZGVzKTtcblxuICAvLyBFYWNoIGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3AgZmluZHMgYSBjb21wb25lbnQgb2YgdGhlIGdyYXBoIGFuZFxuICAvLyBkZWNpZGVzIHdoZXRoZXIgaXQgaXMgYSB0cmVlIG9yIG5vdC4gSWYgaXQgaXMgYSB0cmVlLCBhZGRzIGl0IHRvIHRoZVxuICAvLyBmb3Jlc3QgYW5kIGNvbnRpbnVlZCB3aXRoIHRoZSBuZXh0IGNvbXBvbmVudC5cblxuICB3aGlsZSAodW5Qcm9jZXNzZWROb2Rlcy5sZW5ndGggPiAwICYmIGlzRm9yZXN0KSB7XG4gICAgdG9CZVZpc2l0ZWQucHVzaCh1blByb2Nlc3NlZE5vZGVzWzBdKTtcblxuICAgIC8vIFN0YXJ0IHRoZSBCRlMuIEVhY2ggaXRlcmF0aW9uIG9mIHRoaXMgbG9vcCB2aXNpdHMgYSBub2RlIGluIGFcbiAgICAvLyBCRlMgbWFubmVyLlxuICAgIHdoaWxlICh0b0JlVmlzaXRlZC5sZW5ndGggPiAwICYmIGlzRm9yZXN0KSB7XG4gICAgICAvL3Bvb2wgb3BlcmF0aW9uXG4gICAgICB2YXIgY3VycmVudE5vZGUgPSB0b0JlVmlzaXRlZFswXTtcbiAgICAgIHRvQmVWaXNpdGVkLnNwbGljZSgwLCAxKTtcbiAgICAgIHZpc2l0ZWQuYWRkKGN1cnJlbnROb2RlKTtcblxuICAgICAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgICAgIHZhciBuZWlnaGJvckVkZ2VzID0gY3VycmVudE5vZGUuZ2V0RWRnZXMoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWlnaGJvckVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjdXJyZW50TmVpZ2hib3IgPSBuZWlnaGJvckVkZ2VzW2ldLmdldE90aGVyRW5kKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAvLyBJZiBCRlMgaXMgbm90IGdyb3dpbmcgZnJvbSB0aGlzIG5laWdoYm9yLlxuICAgICAgICBpZiAocGFyZW50cy5nZXQoY3VycmVudE5vZGUpICE9IGN1cnJlbnROZWlnaGJvcikge1xuICAgICAgICAgIC8vIFdlIGhhdmVuJ3QgcHJldmlvdXNseSB2aXNpdGVkIHRoaXMgbmVpZ2hib3IuXG4gICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhjdXJyZW50TmVpZ2hib3IpKSB7XG4gICAgICAgICAgICB0b0JlVmlzaXRlZC5wdXNoKGN1cnJlbnROZWlnaGJvcik7XG4gICAgICAgICAgICBwYXJlbnRzLnNldChjdXJyZW50TmVpZ2hib3IsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZSBwcmV2aW91c2x5IHZpc2l0ZWQgdGhpcyBuZWlnaGJvciBhbmRcbiAgICAgICAgICAvLyB0aGlzIG5laWdoYm9yIGlzIG5vdCBwYXJlbnQgb2YgY3VycmVudE5vZGUsIGdpdmVuXG4gICAgICAgICAgLy8gZ3JhcGggY29udGFpbnMgYSBjb21wb25lbnQgdGhhdCBpcyBub3QgdHJlZSwgaGVuY2VcbiAgICAgICAgICAvLyBpdCBpcyBub3QgYSBmb3Jlc3QuXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlzRm9yZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGdyYXBoIGNvbnRhaW5zIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IGEgdHJlZS4gRW1wdHlcbiAgICAvLyBwcmV2aW91c2x5IGZvdW5kIHRyZWVzLiBUaGUgbWV0aG9kIHdpbGwgZW5kLlxuICAgIGlmICghaXNGb3Jlc3QpIHtcbiAgICAgIGZsYXRGb3Jlc3QgPSBbXTtcbiAgICB9XG4gICAgLy8gU2F2ZSBjdXJyZW50bHkgdmlzaXRlZCBub2RlcyBhcyBhIHRyZWUgaW4gb3VyIGZvcmVzdC4gUmVzZXRcbiAgICAvLyB2aXNpdGVkIGFuZCBwYXJlbnRzIGxpc3RzLiBDb250aW51ZSB3aXRoIHRoZSBuZXh0IGNvbXBvbmVudCBvZlxuICAgIC8vIHRoZSBncmFwaCwgaWYgYW55LlxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdGVtcCA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodmlzaXRlZCkpO1xuICAgICAgICBmbGF0Rm9yZXN0LnB1c2godGVtcCk7XG4gICAgICAgIC8vZmxhdEZvcmVzdCA9IGZsYXRGb3Jlc3QuY29uY2F0KHRlbXApO1xuICAgICAgICAvL3VuUHJvY2Vzc2VkTm9kZXMucmVtb3ZlQWxsKHZpc2l0ZWQpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB0ZW1wW2ldO1xuICAgICAgICAgIHZhciBpbmRleCA9IHVuUHJvY2Vzc2VkTm9kZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHVuUHJvY2Vzc2VkTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmbGF0Rm9yZXN0O1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgZHVtbXkgbm9kZXMgKGFuIGwtbGV2ZWwgbm9kZSB3aXRoIG1pbmltYWwgZGltZW5zaW9ucylcclxuICogZm9yIHRoZSBnaXZlbiBlZGdlIChvbmUgcGVyIGJlbmRwb2ludCkuIFRoZSBleGlzdGluZyBsLWxldmVsIHN0cnVjdHVyZVxyXG4gKiBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgZHVtbXlOb2RlcyA9IFtdO1xuICB2YXIgcHJldiA9IGVkZ2Uuc291cmNlO1xuXG4gIHZhciBncmFwaCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcihlZGdlLnNvdXJjZSwgZWRnZS50YXJnZXQpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZS5iZW5kcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gY3JlYXRlIG5ldyBkdW1teSBub2RlXG4gICAgdmFyIGR1bW15Tm9kZSA9IHRoaXMubmV3Tm9kZShudWxsKTtcbiAgICBkdW1teU5vZGUuc2V0UmVjdChuZXcgUG9pbnQoMCwgMCksIG5ldyBEaW1lbnNpb24oMSwgMSkpO1xuXG4gICAgZ3JhcGguYWRkKGR1bW15Tm9kZSk7XG5cbiAgICAvLyBjcmVhdGUgbmV3IGR1bW15IGVkZ2UgYmV0d2VlbiBwcmV2IGFuZCBkdW1teSBub2RlXG4gICAgdmFyIGR1bW15RWRnZSA9IHRoaXMubmV3RWRnZShudWxsKTtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5hZGQoZHVtbXlFZGdlLCBwcmV2LCBkdW1teU5vZGUpO1xuXG4gICAgZHVtbXlOb2Rlcy5hZGQoZHVtbXlOb2RlKTtcbiAgICBwcmV2ID0gZHVtbXlOb2RlO1xuICB9XG5cbiAgdmFyIGR1bW15RWRnZSA9IHRoaXMubmV3RWRnZShudWxsKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuYWRkKGR1bW15RWRnZSwgcHJldiwgZWRnZS50YXJnZXQpO1xuXG4gIHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoZWRnZSwgZHVtbXlOb2Rlcyk7XG5cbiAgLy8gcmVtb3ZlIHJlYWwgZWRnZSBmcm9tIGdyYXBoIG1hbmFnZXIgaWYgaXQgaXMgaW50ZXItZ3JhcGhcbiAgaWYgKGVkZ2UuaXNJbnRlckdyYXBoKCkpIHtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoZWRnZSk7XG4gIH1cbiAgLy8gZWxzZSwgcmVtb3ZlIHRoZSBlZGdlIGZyb20gdGhlIGN1cnJlbnQgZ3JhcGhcbiAgZWxzZSB7XG4gICAgICBncmFwaC5yZW1vdmUoZWRnZSk7XG4gICAgfVxuXG4gIHJldHVybiBkdW1teU5vZGVzO1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYmVuZHBvaW50cyBmb3IgZWRnZXMgZnJvbSB0aGUgZHVtbXkgbm9kZXNcclxuICogYXQgbC1sZXZlbC5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2VzID0gW107XG4gIGVkZ2VzID0gZWRnZXMuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO1xuICBlZGdlcyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChlZGdlcyk7XG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBlZGdlcy5sZW5ndGg7IGsrKykge1xuICAgIHZhciBsRWRnZSA9IGVkZ2VzW2tdO1xuXG4gICAgaWYgKGxFZGdlLmJlbmRwb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHBhdGggPSB0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KGxFZGdlKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkdW1teU5vZGUgPSBwYXRoW2ldO1xuICAgICAgICB2YXIgcCA9IG5ldyBQb2ludEQoZHVtbXlOb2RlLmdldENlbnRlclgoKSwgZHVtbXlOb2RlLmdldENlbnRlclkoKSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIGJlbmRwb2ludCdzIGxvY2F0aW9uIGFjY29yZGluZyB0byBkdW1teSBub2RlXG4gICAgICAgIHZhciBlYnAgPSBsRWRnZS5iZW5kcG9pbnRzLmdldChpKTtcbiAgICAgICAgZWJwLnggPSBwLng7XG4gICAgICAgIGVicC55ID0gcC55O1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgZHVtbXkgbm9kZSwgZHVtbXkgZWRnZXMgaW5jaWRlbnQgd2l0aCB0aGlzXG4gICAgICAgIC8vIGR1bW15IG5vZGUgaXMgYWxzbyByZW1vdmVkICh3aXRoaW4gdGhlIHJlbW92ZSBtZXRob2QpXG4gICAgICAgIGR1bW15Tm9kZS5nZXRPd25lcigpLnJlbW92ZShkdW1teU5vZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdGhlIHJlYWwgZWRnZSB0byBncmFwaFxuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIuYWRkKGxFZGdlLCBsRWRnZS5zb3VyY2UsIGxFZGdlLnRhcmdldCk7XG4gICAgfVxuICB9XG59O1xuXG5MYXlvdXQudHJhbnNmb3JtID0gZnVuY3Rpb24gKHNsaWRlclZhbHVlLCBkZWZhdWx0VmFsdWUsIG1pbkRpdiwgbWF4TXVsKSB7XG4gIGlmIChtaW5EaXYgIT0gdW5kZWZpbmVkICYmIG1heE11bCAhPSB1bmRlZmluZWQpIHtcbiAgICB2YXIgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoc2xpZGVyVmFsdWUgPD0gNTApIHtcbiAgICAgIHZhciBtaW5WYWx1ZSA9IGRlZmF1bHRWYWx1ZSAvIG1pbkRpdjtcbiAgICAgIHZhbHVlIC09IChkZWZhdWx0VmFsdWUgLSBtaW5WYWx1ZSkgLyA1MCAqICg1MCAtIHNsaWRlclZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1heFZhbHVlID0gZGVmYXVsdFZhbHVlICogbWF4TXVsO1xuICAgICAgdmFsdWUgKz0gKG1heFZhbHVlIC0gZGVmYXVsdFZhbHVlKSAvIDUwICogKHNsaWRlclZhbHVlIC0gNTApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYSwgYjtcblxuICAgIGlmIChzbGlkZXJWYWx1ZSA8PSA1MCkge1xuICAgICAgYSA9IDkuMCAqIGRlZmF1bHRWYWx1ZSAvIDUwMC4wO1xuICAgICAgYiA9IGRlZmF1bHRWYWx1ZSAvIDEwLjA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSA5LjAgKiBkZWZhdWx0VmFsdWUgLyA1MC4wO1xuICAgICAgYiA9IC04ICogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhICogc2xpZGVyVmFsdWUgKyBiO1xuICB9XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgZmluZHMgYW5kIHJldHVybnMgdGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gbm9kZXMsIGFzc3VtaW5nXHJcbiAqIHRoYXQgdGhlIGdpdmVuIG5vZGVzIGZvcm0gYSB0cmVlIGluIHRoZW1zZWx2ZXMuXHJcbiAqL1xuTGF5b3V0LmZpbmRDZW50ZXJPZlRyZWUgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgdmFyIGxpc3QgPSBbXTtcbiAgbGlzdCA9IGxpc3QuY29uY2F0KG5vZGVzKTtcblxuICB2YXIgcmVtb3ZlZE5vZGVzID0gW107XG4gIHZhciByZW1haW5pbmdEZWdyZWVzID0gbmV3IE1hcCgpO1xuICB2YXIgZm91bmRDZW50ZXIgPSBmYWxzZTtcbiAgdmFyIGNlbnRlck5vZGUgPSBudWxsO1xuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PSAxIHx8IGxpc3QubGVuZ3RoID09IDIpIHtcbiAgICBmb3VuZENlbnRlciA9IHRydWU7XG4gICAgY2VudGVyTm9kZSA9IGxpc3RbMF07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGxpc3RbaV07XG4gICAgdmFyIGRlZ3JlZSA9IG5vZGUuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7XG4gICAgcmVtYWluaW5nRGVncmVlcy5zZXQobm9kZSwgbm9kZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSk7XG5cbiAgICBpZiAoZGVncmVlID09IDEpIHtcbiAgICAgIHJlbW92ZWROb2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0ZW1wTGlzdCA9IFtdO1xuICB0ZW1wTGlzdCA9IHRlbXBMaXN0LmNvbmNhdChyZW1vdmVkTm9kZXMpO1xuXG4gIHdoaWxlICghZm91bmRDZW50ZXIpIHtcbiAgICB2YXIgdGVtcExpc3QyID0gW107XG4gICAgdGVtcExpc3QyID0gdGVtcExpc3QyLmNvbmNhdCh0ZW1wTGlzdCk7XG4gICAgdGVtcExpc3QgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBsaXN0W2ldO1xuXG4gICAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2Yobm9kZSk7XG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZWlnaGJvdXJzID0gbm9kZS5nZXROZWlnaGJvcnNMaXN0KCk7XG5cbiAgICAgIG5laWdoYm91cnMuZm9yRWFjaChmdW5jdGlvbiAobmVpZ2hib3VyKSB7XG4gICAgICAgIGlmIChyZW1vdmVkTm9kZXMuaW5kZXhPZihuZWlnaGJvdXIpIDwgMCkge1xuICAgICAgICAgIHZhciBvdGhlckRlZ3JlZSA9IHJlbWFpbmluZ0RlZ3JlZXMuZ2V0KG5laWdoYm91cik7XG4gICAgICAgICAgdmFyIG5ld0RlZ3JlZSA9IG90aGVyRGVncmVlIC0gMTtcblxuICAgICAgICAgIGlmIChuZXdEZWdyZWUgPT0gMSkge1xuICAgICAgICAgICAgdGVtcExpc3QucHVzaChuZWlnaGJvdXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlbWFpbmluZ0RlZ3JlZXMuc2V0KG5laWdoYm91ciwgbmV3RGVncmVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlZE5vZGVzID0gcmVtb3ZlZE5vZGVzLmNvbmNhdCh0ZW1wTGlzdCk7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT0gMSB8fCBsaXN0Lmxlbmd0aCA9PSAyKSB7XG4gICAgICBmb3VuZENlbnRlciA9IHRydWU7XG4gICAgICBjZW50ZXJOb2RlID0gbGlzdFswXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2VudGVyTm9kZTtcbn07XG5cbi8qKlxyXG4gKiBEdXJpbmcgdGhlIGNvYXJzZW5pbmcgcHJvY2VzcywgdGhpcyBsYXlvdXQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgdHdvIGdyYXBoIG1hbmFnZXJzXHJcbiAqIHRoaXMgc2V0dGVyIGZ1bmN0aW9uIGdyYW50cyBhY2Nlc3MgdG8gY2hhbmdlIHRoZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBncmFwaCBtYW5hZ2VyXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5zZXRHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoZ20pIHtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGF5b3V0O1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIFJhbmRvbVNlZWQoKSB7fVxuLy8gYWRhcHRlZCBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTkzMDM3MjVcblJhbmRvbVNlZWQuc2VlZCA9IDE7XG5SYW5kb21TZWVkLnggPSAwO1xuXG5SYW5kb21TZWVkLm5leHREb3VibGUgPSBmdW5jdGlvbiAoKSB7XG4gIFJhbmRvbVNlZWQueCA9IE1hdGguc2luKFJhbmRvbVNlZWQuc2VlZCsrKSAqIDEwMDAwO1xuICByZXR1cm4gUmFuZG9tU2VlZC54IC0gTWF0aC5mbG9vcihSYW5kb21TZWVkLngpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21TZWVkO1xuXG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG5mdW5jdGlvbiBUcmFuc2Zvcm0oeCwgeSkge1xuICB0aGlzLmx3b3JsZE9yZ1ggPSAwLjA7XG4gIHRoaXMubHdvcmxkT3JnWSA9IDAuMDtcbiAgdGhpcy5sZGV2aWNlT3JnWCA9IDAuMDtcbiAgdGhpcy5sZGV2aWNlT3JnWSA9IDAuMDtcbiAgdGhpcy5sd29ybGRFeHRYID0gMS4wO1xuICB0aGlzLmx3b3JsZEV4dFkgPSAxLjA7XG4gIHRoaXMubGRldmljZUV4dFggPSAxLjA7XG4gIHRoaXMubGRldmljZUV4dFkgPSAxLjA7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRPcmdYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRPcmdYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1ggPSBmdW5jdGlvbiAod294KSB7XG4gIHRoaXMubHdvcmxkT3JnWCA9IHdveDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRPcmdZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1kgPSBmdW5jdGlvbiAod295KSB7XG4gIHRoaXMubHdvcmxkT3JnWSA9IHdveTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRFeHRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRFeHRYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZEV4dFggPSBmdW5jdGlvbiAod2V4KSB7XG4gIHRoaXMubHdvcmxkRXh0WCA9IHdleDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRFeHRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRFeHRZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZEV4dFkgPSBmdW5jdGlvbiAod2V5KSB7XG4gIHRoaXMubHdvcmxkRXh0WSA9IHdleTtcbn07XG5cbi8qIERldmljZSByZWxhdGVkICovXG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZU9yZ1g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZU9yZ1ggPSBmdW5jdGlvbiAoZG94KSB7XG4gIHRoaXMubGRldmljZU9yZ1ggPSBkb3g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldERldmljZU9yZ1kgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxkZXZpY2VPcmdZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZID0gZnVuY3Rpb24gKGRveSkge1xuICB0aGlzLmxkZXZpY2VPcmdZID0gZG95O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlRXh0WDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WCA9IGZ1bmN0aW9uIChkZXgpIHtcbiAgdGhpcy5sZGV2aWNlRXh0WCA9IGRleDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZUV4dFk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZUV4dFkgPSBmdW5jdGlvbiAoZGV5KSB7XG4gIHRoaXMubGRldmljZUV4dFkgPSBkZXk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnRyYW5zZm9ybVggPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgeERldmljZSA9IDAuMDtcbiAgdmFyIHdvcmxkRXh0WCA9IHRoaXMubHdvcmxkRXh0WDtcbiAgaWYgKHdvcmxkRXh0WCAhPSAwLjApIHtcbiAgICB4RGV2aWNlID0gdGhpcy5sZGV2aWNlT3JnWCArICh4IC0gdGhpcy5sd29ybGRPcmdYKSAqIHRoaXMubGRldmljZUV4dFggLyB3b3JsZEV4dFg7XG4gIH1cblxuICByZXR1cm4geERldmljZTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudHJhbnNmb3JtWSA9IGZ1bmN0aW9uICh5KSB7XG4gIHZhciB5RGV2aWNlID0gMC4wO1xuICB2YXIgd29ybGRFeHRZID0gdGhpcy5sd29ybGRFeHRZO1xuICBpZiAod29ybGRFeHRZICE9IDAuMCkge1xuICAgIHlEZXZpY2UgPSB0aGlzLmxkZXZpY2VPcmdZICsgKHkgLSB0aGlzLmx3b3JsZE9yZ1kpICogdGhpcy5sZGV2aWNlRXh0WSAvIHdvcmxkRXh0WTtcbiAgfVxuXG4gIHJldHVybiB5RGV2aWNlO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciB4V29ybGQgPSAwLjA7XG4gIHZhciBkZXZpY2VFeHRYID0gdGhpcy5sZGV2aWNlRXh0WDtcbiAgaWYgKGRldmljZUV4dFggIT0gMC4wKSB7XG4gICAgeFdvcmxkID0gdGhpcy5sd29ybGRPcmdYICsgKHggLSB0aGlzLmxkZXZpY2VPcmdYKSAqIHRoaXMubHdvcmxkRXh0WCAvIGRldmljZUV4dFg7XG4gIH1cblxuICByZXR1cm4geFdvcmxkO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWSA9IGZ1bmN0aW9uICh5KSB7XG4gIHZhciB5V29ybGQgPSAwLjA7XG4gIHZhciBkZXZpY2VFeHRZID0gdGhpcy5sZGV2aWNlRXh0WTtcbiAgaWYgKGRldmljZUV4dFkgIT0gMC4wKSB7XG4gICAgeVdvcmxkID0gdGhpcy5sd29ybGRPcmdZICsgKHkgLSB0aGlzLmxkZXZpY2VPcmdZKSAqIHRoaXMubHdvcmxkRXh0WSAvIGRldmljZUV4dFk7XG4gIH1cbiAgcmV0dXJuIHlXb3JsZDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50ID0gZnVuY3Rpb24gKGluUG9pbnQpIHtcbiAgdmFyIG91dFBvaW50ID0gbmV3IFBvaW50RCh0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGluUG9pbnQueCksIHRoaXMuaW52ZXJzZVRyYW5zZm9ybVkoaW5Qb2ludC55KSk7XG4gIHJldHVybiBvdXRQb2ludDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBJTWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0KCkge1xuICBMYXlvdXQuY2FsbCh0aGlzKTtcblxuICB0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24gPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTjtcbiAgdGhpcy5pZGVhbEVkZ2VMZW5ndGggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xuICB0aGlzLnNwcmluZ0NvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg7XG4gIHRoaXMucmVwdWxzaW9uQ29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSDtcbiAgdGhpcy5ncmF2aXR5Q29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg7XG4gIHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg7XG4gIHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I7XG4gIHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSA9IDMuMCAqIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLyAxMDA7XG4gIHRoaXMuY29vbGluZ0ZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw7XG4gIHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMO1xuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50ID0gMC4wO1xuICB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50ID0gMC4wO1xuICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBGRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUztcbn1cblxuRkRMYXlvdXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMYXlvdXQucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMYXlvdXQpIHtcbiAgRkRMYXlvdXRbcHJvcF0gPSBMYXlvdXRbcHJvcF07XG59XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgTGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgdGhpcy50b3RhbEl0ZXJhdGlvbnMgPSAwO1xuICB0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucyA9IDA7XG5cbiAgdGhpcy51c2VGUkdyaWRWYXJpYW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OO1xuXG4gIHRoaXMuZ3JpZCA9IFtdO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZTtcbiAgdmFyIGxjYURlcHRoO1xuICB2YXIgc291cmNlO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgc2l6ZU9mU291cmNlSW5MY2E7XG4gIHZhciBzaXplT2ZUYXJnZXRJbkxjYTtcblxuICB2YXIgYWxsRWRnZXMgPSB0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBlZGdlID0gYWxsRWRnZXNbaV07XG5cbiAgICBlZGdlLmlkZWFsTGVuZ3RoID0gdGhpcy5pZGVhbEVkZ2VMZW5ndGg7XG5cbiAgICBpZiAoZWRnZS5pc0ludGVyR3JhcGgpIHtcbiAgICAgIHNvdXJjZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gICAgICB0YXJnZXQgPSBlZGdlLmdldFRhcmdldCgpO1xuXG4gICAgICBzaXplT2ZTb3VyY2VJbkxjYSA9IGVkZ2UuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCk7XG4gICAgICBzaXplT2ZUYXJnZXRJbkxjYSA9IGVkZ2UuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCk7XG5cbiAgICAgIGlmICh0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgZWRnZS5pZGVhbExlbmd0aCArPSBzaXplT2ZTb3VyY2VJbkxjYSArIHNpemVPZlRhcmdldEluTGNhIC0gMiAqIExheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9TSVpFO1xuICAgICAgfVxuXG4gICAgICBsY2FEZXB0aCA9IGVkZ2UuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCk7XG5cbiAgICAgIGVkZ2UuaWRlYWxMZW5ndGggKz0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAqIEZETGF5b3V0Q29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgKiAoc291cmNlLmdldEluY2x1c2lvblRyZWVEZXB0aCgpICsgdGFyZ2V0LmdldEluY2x1c2lvblRyZWVEZXB0aCgpIC0gMiAqIGxjYURlcHRoKTtcbiAgICB9XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXIgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIHMgPSB0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoO1xuICBpZiAodGhpcy5pbmNyZW1lbnRhbCkge1xuICAgIGlmIChzID4gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSB7XG4gICAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBNYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IgKiBGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLCB0aGlzLmNvb2xpbmdGYWN0b3IgLSAocyAtIEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkgLyAoRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAqIHRoaXMuY29vbGluZ0ZhY3RvciAqICgxIC0gRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpO1xuICAgIH1cbiAgICB0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQgPSBGRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHMgPiBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIHtcbiAgICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IE1hdGgubWF4KEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsIDEuMCAtIChzIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAvIChGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpICogKDEgLSBGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IDEuMDtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciA9IHRoaXMuY29vbGluZ0ZhY3RvcjtcbiAgICB0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQgPSBGRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ7XG4gIH1cblxuICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBNYXRoLm1heCh0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoICogNSwgdGhpcy5tYXhJdGVyYXRpb25zKTtcblxuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkID0gdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlICogdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDtcblxuICB0aGlzLnJlcHVsc2lvblJhbmdlID0gdGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKTtcbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbEVkZ2VzID0gdGhpcy5nZXRBbGxFZGdlcygpO1xuICB2YXIgZWRnZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIGVkZ2UgPSBsRWRnZXNbaV07XG5cbiAgICB0aGlzLmNhbGNTcHJpbmdGb3JjZShlZGdlLCBlZGdlLmlkZWFsTGVuZ3RoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBncmlkVXBkYXRlQWxsb3dlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgdmFyIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBpLCBqO1xuICB2YXIgbm9kZUEsIG5vZGVCO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgcHJvY2Vzc2VkTm9kZVNldDtcblxuICBpZiAodGhpcy51c2VGUkdyaWRWYXJpYW50KSB7XG4gICAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCkge1xuICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc2VkTm9kZVNldCA9IG5ldyBTZXQoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gZWFjaCBub2RlcyBhbmQgaXRzIHN1cnJvdW5kaW5nXG4gICAgZm9yIChpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZUEgPSBsTm9kZXNbaV07XG4gICAgICB0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShub2RlQSwgcHJvY2Vzc2VkTm9kZVNldCwgZ3JpZFVwZGF0ZUFsbG93ZWQsIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUpO1xuICAgICAgcHJvY2Vzc2VkTm9kZVNldC5hZGQobm9kZUEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlQSA9IGxOb2Rlc1tpXTtcblxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZUIgPSBsTm9kZXNbal07XG5cbiAgICAgICAgLy8gSWYgYm90aCBub2RlcyBhcmUgbm90IG1lbWJlcnMgb2YgdGhlIHNhbWUgZ3JhcGgsIHNraXAuXG4gICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKG5vZGVBLCBub2RlQik7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2Uobm9kZSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5tb3ZlTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsTm9kZXMgPSB0aGlzLmdldEFsbE5vZGVzKCk7XG4gIHZhciBub2RlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLm1vdmUoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZSA9IGZ1bmN0aW9uIChlZGdlLCBpZGVhbExlbmd0aCkge1xuICB2YXIgc291cmNlTm9kZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gIHZhciB0YXJnZXROb2RlID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICB2YXIgbGVuZ3RoO1xuICB2YXIgc3ByaW5nRm9yY2U7XG4gIHZhciBzcHJpbmdGb3JjZVg7XG4gIHZhciBzcHJpbmdGb3JjZVk7XG5cbiAgLy8gVXBkYXRlIGVkZ2UgbGVuZ3RoXG4gIGlmICh0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzICYmIHNvdXJjZU5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsICYmIHRhcmdldE5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgZWRnZS51cGRhdGVMZW5ndGhTaW1wbGUoKTtcbiAgfSBlbHNlIHtcbiAgICBlZGdlLnVwZGF0ZUxlbmd0aCgpO1xuXG4gICAgaWYgKGVkZ2UuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbGVuZ3RoID0gZWRnZS5nZXRMZW5ndGgoKTtcblxuICBpZiAobGVuZ3RoID09IDApIHJldHVybjtcblxuICAvLyBDYWxjdWxhdGUgc3ByaW5nIGZvcmNlc1xuICBzcHJpbmdGb3JjZSA9IHRoaXMuc3ByaW5nQ29uc3RhbnQgKiAobGVuZ3RoIC0gaWRlYWxMZW5ndGgpO1xuXG4gIC8vIFByb2plY3QgZm9yY2Ugb250byB4IGFuZCB5IGF4ZXNcbiAgc3ByaW5nRm9yY2VYID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhYIC8gbGVuZ3RoKTtcbiAgc3ByaW5nRm9yY2VZID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhZIC8gbGVuZ3RoKTtcblxuICAvLyBBcHBseSBmb3JjZXMgb24gdGhlIGVuZCBub2Rlc1xuICBzb3VyY2VOb2RlLnNwcmluZ0ZvcmNlWCArPSBzcHJpbmdGb3JjZVg7XG4gIHNvdXJjZU5vZGUuc3ByaW5nRm9yY2VZICs9IHNwcmluZ0ZvcmNlWTtcbiAgdGFyZ2V0Tm9kZS5zcHJpbmdGb3JjZVggLT0gc3ByaW5nRm9yY2VYO1xuICB0YXJnZXROb2RlLnNwcmluZ0ZvcmNlWSAtPSBzcHJpbmdGb3JjZVk7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICB2YXIgcmVjdEEgPSBub2RlQS5nZXRSZWN0KCk7XG4gIHZhciByZWN0QiA9IG5vZGVCLmdldFJlY3QoKTtcbiAgdmFyIG92ZXJsYXBBbW91bnQgPSBuZXcgQXJyYXkoMik7XG4gIHZhciBjbGlwUG9pbnRzID0gbmV3IEFycmF5KDQpO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgZGlzdGFuY2VTcXVhcmVkO1xuICB2YXIgZGlzdGFuY2U7XG4gIHZhciByZXB1bHNpb25Gb3JjZTtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWDtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWTtcblxuICBpZiAocmVjdEEuaW50ZXJzZWN0cyhyZWN0QikpIC8vIHR3byBub2RlcyBvdmVybGFwXG4gICAge1xuICAgICAgLy8gY2FsY3VsYXRlIHNlcGFyYXRpb24gYW1vdW50IGluIHggYW5kIHkgZGlyZWN0aW9uc1xuICAgICAgSUdlb21ldHJ5LmNhbGNTZXBhcmF0aW9uQW1vdW50KHJlY3RBLCByZWN0Qiwgb3ZlcmxhcEFtb3VudCwgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDIuMCk7XG5cbiAgICAgIHJlcHVsc2lvbkZvcmNlWCA9IDIgKiBvdmVybGFwQW1vdW50WzBdO1xuICAgICAgcmVwdWxzaW9uRm9yY2VZID0gMiAqIG92ZXJsYXBBbW91bnRbMV07XG5cbiAgICAgIHZhciBjaGlsZHJlbkNvbnN0YW50ID0gbm9kZUEubm9PZkNoaWxkcmVuICogbm9kZUIubm9PZkNoaWxkcmVuIC8gKG5vZGVBLm5vT2ZDaGlsZHJlbiArIG5vZGVCLm5vT2ZDaGlsZHJlbik7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzXG4gICAgICBub2RlQS5yZXB1bHNpb25Gb3JjZVggLT0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSBjaGlsZHJlbkNvbnN0YW50ICogcmVwdWxzaW9uRm9yY2VZO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VYICs9IGNoaWxkcmVuQ29uc3RhbnQgKiByZXB1bHNpb25Gb3JjZVg7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVkgKz0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9IGVsc2UgLy8gbm8gb3ZlcmxhcFxuICAgIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBkaXN0YW5jZVxuXG4gICAgICBpZiAodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyAmJiBub2RlQS5nZXRDaGlsZCgpID09IG51bGwgJiYgbm9kZUIuZ2V0Q2hpbGQoKSA9PSBudWxsKSAvLyBzaW1wbHkgYmFzZSByZXB1bHNpb24gb24gZGlzdGFuY2Ugb2Ygbm9kZSBjZW50ZXJzXG4gICAgICAgIHtcbiAgICAgICAgICBkaXN0YW5jZVggPSByZWN0Qi5nZXRDZW50ZXJYKCkgLSByZWN0QS5nZXRDZW50ZXJYKCk7XG4gICAgICAgICAgZGlzdGFuY2VZID0gcmVjdEIuZ2V0Q2VudGVyWSgpIC0gcmVjdEEuZ2V0Q2VudGVyWSgpO1xuICAgICAgICB9IGVsc2UgLy8gdXNlIGNsaXBwaW5nIHBvaW50c1xuICAgICAgICB7XG4gICAgICAgICAgSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbihyZWN0QSwgcmVjdEIsIGNsaXBQb2ludHMpO1xuXG4gICAgICAgICAgZGlzdGFuY2VYID0gY2xpcFBvaW50c1syXSAtIGNsaXBQb2ludHNbMF07XG4gICAgICAgICAgZGlzdGFuY2VZID0gY2xpcFBvaW50c1szXSAtIGNsaXBQb2ludHNbMV07XG4gICAgICAgIH1cblxuICAgICAgLy8gTm8gcmVwdWxzaW9uIHJhbmdlLiBGUiBncmlkIHZhcmlhbnQgc2hvdWxkIHRha2UgY2FyZSBvZiB0aGlzLlxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWCkgPCBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QpIHtcbiAgICAgICAgZGlzdGFuY2VYID0gSU1hdGguc2lnbihkaXN0YW5jZVgpICogRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VZKSA8IEZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVCkge1xuICAgICAgICBkaXN0YW5jZVkgPSBJTWF0aC5zaWduKGRpc3RhbmNlWSkgKiBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1Q7XG4gICAgICB9XG5cbiAgICAgIGRpc3RhbmNlU3F1YXJlZCA9IGRpc3RhbmNlWCAqIGRpc3RhbmNlWCArIGRpc3RhbmNlWSAqIGRpc3RhbmNlWTtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpc3RhbmNlU3F1YXJlZCk7XG5cbiAgICAgIHJlcHVsc2lvbkZvcmNlID0gdGhpcy5yZXB1bHNpb25Db25zdGFudCAqIG5vZGVBLm5vT2ZDaGlsZHJlbiAqIG5vZGVCLm5vT2ZDaGlsZHJlbiAvIGRpc3RhbmNlU3F1YXJlZDtcblxuICAgICAgLy8gUHJvamVjdCBmb3JjZSBvbnRvIHggYW5kIHkgYXhlc1xuICAgICAgcmVwdWxzaW9uRm9yY2VYID0gcmVwdWxzaW9uRm9yY2UgKiBkaXN0YW5jZVggLyBkaXN0YW5jZTtcbiAgICAgIHJlcHVsc2lvbkZvcmNlWSA9IHJlcHVsc2lvbkZvcmNlICogZGlzdGFuY2VZIC8gZGlzdGFuY2U7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzICAgIFxuICAgICAgbm9kZUEucmVwdWxzaW9uRm9yY2VYIC09IHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSByZXB1bHNpb25Gb3JjZVk7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVggKz0gcmVwdWxzaW9uRm9yY2VYO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VZICs9IHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBvd25lckdyYXBoO1xuICB2YXIgb3duZXJDZW50ZXJYO1xuICB2YXIgb3duZXJDZW50ZXJZO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgYWJzRGlzdGFuY2VYO1xuICB2YXIgYWJzRGlzdGFuY2VZO1xuICB2YXIgZXN0aW1hdGVkU2l6ZTtcbiAgb3duZXJHcmFwaCA9IG5vZGUuZ2V0T3duZXIoKTtcblxuICBvd25lckNlbnRlclggPSAob3duZXJHcmFwaC5nZXRSaWdodCgpICsgb3duZXJHcmFwaC5nZXRMZWZ0KCkpIC8gMjtcbiAgb3duZXJDZW50ZXJZID0gKG93bmVyR3JhcGguZ2V0VG9wKCkgKyBvd25lckdyYXBoLmdldEJvdHRvbSgpKSAvIDI7XG4gIGRpc3RhbmNlWCA9IG5vZGUuZ2V0Q2VudGVyWCgpIC0gb3duZXJDZW50ZXJYO1xuICBkaXN0YW5jZVkgPSBub2RlLmdldENlbnRlclkoKSAtIG93bmVyQ2VudGVyWTtcbiAgYWJzRGlzdGFuY2VYID0gTWF0aC5hYnMoZGlzdGFuY2VYKSArIG5vZGUuZ2V0V2lkdGgoKSAvIDI7XG4gIGFic0Rpc3RhbmNlWSA9IE1hdGguYWJzKGRpc3RhbmNlWSkgKyBub2RlLmdldEhlaWdodCgpIC8gMjtcblxuICBpZiAobm9kZS5nZXRPd25lcigpID09IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSkgLy8gaW4gdGhlIHJvb3QgZ3JhcGhcbiAgICB7XG4gICAgICBlc3RpbWF0ZWRTaXplID0gb3duZXJHcmFwaC5nZXRFc3RpbWF0ZWRTaXplKCkgKiB0aGlzLmdyYXZpdHlSYW5nZUZhY3RvcjtcblxuICAgICAgaWYgKGFic0Rpc3RhbmNlWCA+IGVzdGltYXRlZFNpemUgfHwgYWJzRGlzdGFuY2VZID4gZXN0aW1hdGVkU2l6ZSkge1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VYID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VYO1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VZID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VZO1xuICAgICAgfVxuICAgIH0gZWxzZSAvLyBpbnNpZGUgYSBjb21wb3VuZFxuICAgIHtcbiAgICAgIGVzdGltYXRlZFNpemUgPSBvd25lckdyYXBoLmdldEVzdGltYXRlZFNpemUoKSAqIHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I7XG5cbiAgICAgIGlmIChhYnNEaXN0YW5jZVggPiBlc3RpbWF0ZWRTaXplIHx8IGFic0Rpc3RhbmNlWSA+IGVzdGltYXRlZFNpemUpIHtcbiAgICAgICAgbm9kZS5ncmF2aXRhdGlvbkZvcmNlWCA9IC10aGlzLmdyYXZpdHlDb25zdGFudCAqIGRpc3RhbmNlWCAqIHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ7XG4gICAgICAgIG5vZGUuZ3Jhdml0YXRpb25Gb3JjZVkgPSAtdGhpcy5ncmF2aXR5Q29uc3RhbnQgKiBkaXN0YW5jZVkgKiB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50O1xuICAgICAgfVxuICAgIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pc0NvbnZlcmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNvbnZlcmdlZDtcbiAgdmFyIG9zY2lsYXRpbmcgPSBmYWxzZTtcblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgPiB0aGlzLm1heEl0ZXJhdGlvbnMgLyAzKSB7XG4gICAgb3NjaWxhdGluZyA9IE1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQgLSB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KSA8IDI7XG4gIH1cblxuICBjb252ZXJnZWQgPSB0aGlzLnRvdGFsRGlzcGxhY2VtZW50IDwgdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZDtcblxuICB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50ID0gdGhpcy50b3RhbERpc3BsYWNlbWVudDtcblxuICByZXR1cm4gY29udmVyZ2VkIHx8IG9zY2lsYXRpbmc7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ICYmICF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgaWYgKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID09IHRoaXMuYW5pbWF0aW9uUGVyaW9kKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrO1xuICAgIH1cbiAgfVxufTtcblxuLy9UaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gKHdlaWdodCkgZm9yIGFsbCBub2Rlc1xuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICBub2RlLm5vT2ZDaGlsZHJlbiA9IG5vZGUuZ2V0Tm9PZkNoaWxkcmVuKCk7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBGUi1HcmlkIFZhcmlhbnQgUmVwdWxzaW9uIEZvcmNlIENhbGN1bGF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyaWQgPSBmdW5jdGlvbiAoZ3JhcGgpIHtcblxuICB2YXIgc2l6ZVggPSAwO1xuICB2YXIgc2l6ZVkgPSAwO1xuXG4gIHNpemVYID0gcGFyc2VJbnQoTWF0aC5jZWlsKChncmFwaC5nZXRSaWdodCgpIC0gZ3JhcGguZ2V0TGVmdCgpKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc2l6ZVkgPSBwYXJzZUludChNYXRoLmNlaWwoKGdyYXBoLmdldEJvdHRvbSgpIC0gZ3JhcGguZ2V0VG9wKCkpIC8gdGhpcy5yZXB1bHNpb25SYW5nZSkpO1xuXG4gIHZhciBncmlkID0gbmV3IEFycmF5KHNpemVYKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemVYOyBpKyspIHtcbiAgICBncmlkW2ldID0gbmV3IEFycmF5KHNpemVZKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZVg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZVk7IGorKykge1xuICAgICAgZ3JpZFtpXVtqXSA9IG5ldyBBcnJheSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncmlkO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQgPSBmdW5jdGlvbiAodiwgbGVmdCwgdG9wKSB7XG5cbiAgdmFyIHN0YXJ0WCA9IDA7XG4gIHZhciBmaW5pc2hYID0gMDtcbiAgdmFyIHN0YXJ0WSA9IDA7XG4gIHZhciBmaW5pc2hZID0gMDtcblxuICBzdGFydFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS54IC0gbGVmdCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS53aWR0aCArIHYuZ2V0UmVjdCgpLnggLSBsZWZ0KSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc3RhcnRZID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkueSAtIHRvcCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFkgPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS5oZWlnaHQgKyB2LmdldFJlY3QoKS55IC0gdG9wKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcblxuICBmb3IgKHZhciBpID0gc3RhcnRYOyBpIDw9IGZpbmlzaFg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSBzdGFydFk7IGogPD0gZmluaXNoWTsgaisrKSB7XG4gICAgICB0aGlzLmdyaWRbaV1bal0ucHVzaCh2KTtcbiAgICAgIHYuc2V0R3JpZENvb3JkaW5hdGVzKHN0YXJ0WCwgZmluaXNoWCwgc3RhcnRZLCBmaW5pc2hZKTtcbiAgICB9XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS51cGRhdGVHcmlkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaTtcbiAgdmFyIG5vZGVBO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuXG4gIHRoaXMuZ3JpZCA9IHRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKTtcblxuICAvLyBwdXQgYWxsIG5vZGVzIHRvIHByb3BlciBncmlkIGNlbGxzXG4gIGZvciAoaSA9IDA7IGkgPCBsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlQSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmFkZE5vZGVUb0dyaWQobm9kZUEsIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUgPSBmdW5jdGlvbiAobm9kZUEsIHByb2Nlc3NlZE5vZGVTZXQsIGdyaWRVcGRhdGVBbGxvd2VkLCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCB8fCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG4gICAgdmFyIHN1cnJvdW5kaW5nID0gbmV3IFNldCgpO1xuICAgIG5vZGVBLnN1cnJvdW5kaW5nID0gbmV3IEFycmF5KCk7XG4gICAgdmFyIG5vZGVCO1xuICAgIHZhciBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgZm9yICh2YXIgaSA9IG5vZGVBLnN0YXJ0WCAtIDE7IGkgPCBub2RlQS5maW5pc2hYICsgMjsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gbm9kZUEuc3RhcnRZIC0gMTsgaiA8IG5vZGVBLmZpbmlzaFkgKyAyOyBqKyspIHtcbiAgICAgICAgaWYgKCEoaSA8IDAgfHwgaiA8IDAgfHwgaSA+PSBncmlkLmxlbmd0aCB8fCBqID49IGdyaWRbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZ3JpZFtpXVtqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbm9kZUIgPSBncmlkW2ldW2pdW2tdO1xuXG4gICAgICAgICAgICAvLyBJZiBib3RoIG5vZGVzIGFyZSBub3QgbWVtYmVycyBvZiB0aGUgc2FtZSBncmFwaCwgXG4gICAgICAgICAgICAvLyBvciBib3RoIG5vZGVzIGFyZSB0aGUgc2FtZSwgc2tpcC5cbiAgICAgICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkgfHwgbm9kZUEgPT0gbm9kZUIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZXB1bHNpb24gZm9yY2UgYmV0d2VlblxuICAgICAgICAgICAgLy8gbm9kZUEgYW5kIG5vZGVCIGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZFxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWROb2RlU2V0Lmhhcyhub2RlQikgJiYgIXN1cnJvdW5kaW5nLmhhcyhub2RlQikpIHtcbiAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlWCA9IE1hdGguYWJzKG5vZGVBLmdldENlbnRlclgoKSAtIG5vZGVCLmdldENlbnRlclgoKSkgLSAobm9kZUEuZ2V0V2lkdGgoKSAvIDIgKyBub2RlQi5nZXRXaWR0aCgpIC8gMik7XG4gICAgICAgICAgICAgIHZhciBkaXN0YW5jZVkgPSBNYXRoLmFicyhub2RlQS5nZXRDZW50ZXJZKCkgLSBub2RlQi5nZXRDZW50ZXJZKCkpIC0gKG5vZGVBLmdldEhlaWdodCgpIC8gMiArIG5vZGVCLmdldEhlaWdodCgpIC8gMik7XG5cbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCIFxuICAgICAgICAgICAgICAvLyBpcyBsZXNzIHRoZW4gY2FsY3VsYXRpb24gcmFuZ2VcbiAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlWCA8PSB0aGlzLnJlcHVsc2lvblJhbmdlICYmIGRpc3RhbmNlWSA8PSB0aGlzLnJlcHVsc2lvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy90aGVuIGFkZCBub2RlQiB0byBzdXJyb3VuZGluZyBvZiBub2RlQVxuICAgICAgICAgICAgICAgIHN1cnJvdW5kaW5nLmFkZChub2RlQik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlQS5zdXJyb3VuZGluZyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3Vycm91bmRpbmcpKTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgbm9kZUEuc3Vycm91bmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShub2RlQSwgbm9kZUEuc3Vycm91bmRpbmdbaV0pO1xuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gMC4wO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dDtcblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblxuZnVuY3Rpb24gRkRMYXlvdXRFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBMRWRnZS5jYWxsKHRoaXMsIHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSk7XG4gIHRoaXMuaWRlYWxMZW5ndGggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xufVxuXG5GRExheW91dEVkZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMRWRnZS5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExFZGdlKSB7XG4gIEZETGF5b3V0RWRnZVtwcm9wXSA9IExFZGdlW3Byb3BdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZETGF5b3V0RWRnZTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5mdW5jdGlvbiBGRExheW91dE5vZGUoZ20sIGxvYywgc2l6ZSwgdk5vZGUpIHtcbiAgLy8gYWx0ZXJuYXRpdmUgY29uc3RydWN0b3IgaXMgaGFuZGxlZCBpbnNpZGUgTE5vZGVcbiAgTE5vZGUuY2FsbCh0aGlzLCBnbSwgbG9jLCBzaXplLCB2Tm9kZSk7XG4gIC8vU3ByaW5nLCByZXB1bHNpb24gYW5kIGdyYXZpdGF0aW9uYWwgZm9yY2VzIGFjdGluZyBvbiB0aGlzIG5vZGVcbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIC8vQW1vdW50IGJ5IHdoaWNoIHRoaXMgbm9kZSBpcyB0byBiZSBtb3ZlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICB0aGlzLmRpc3BsYWNlbWVudFggPSAwO1xuICB0aGlzLmRpc3BsYWNlbWVudFkgPSAwO1xuXG4gIC8vU3RhcnQgYW5kIGZpbmlzaCBncmlkIGNvb3JkaW5hdGVzIHRoYXQgdGhpcyBub2RlIGlzIGZhbGxlbiBpbnRvXG4gIHRoaXMuc3RhcnRYID0gMDtcbiAgdGhpcy5maW5pc2hYID0gMDtcbiAgdGhpcy5zdGFydFkgPSAwO1xuICB0aGlzLmZpbmlzaFkgPSAwO1xuXG4gIC8vR2VvbWV0cmljIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgdGhpcy5zdXJyb3VuZGluZyA9IFtdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMTm9kZS5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExOb2RlKSB7XG4gIEZETGF5b3V0Tm9kZVtwcm9wXSA9IExOb2RlW3Byb3BdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcyA9IGZ1bmN0aW9uIChfc3RhcnRYLCBfZmluaXNoWCwgX3N0YXJ0WSwgX2ZpbmlzaFkpIHtcbiAgdGhpcy5zdGFydFggPSBfc3RhcnRYO1xuICB0aGlzLmZpbmlzaFggPSBfZmluaXNoWDtcbiAgdGhpcy5zdGFydFkgPSBfc3RhcnRZO1xuICB0aGlzLmZpbmlzaFkgPSBfZmluaXNoWTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXROb2RlO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIERpbWVuc2lvbkQod2lkdGgsIGhlaWdodCkge1xuICB0aGlzLndpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuICBpZiAod2lkdGggIT09IG51bGwgJiYgaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB9XG59XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKHdpZHRoKSB7XG4gIHRoaXMud2lkdGggPSB3aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xufTtcblxuRGltZW5zaW9uRC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24gKGhlaWdodCkge1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGltZW5zaW9uRDtcblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaE1hcCgpIHtcbiAgdGhpcy5tYXAgPSB7fTtcbiAgdGhpcy5rZXlzID0gW107XG59XG5cbkhhc2hNYXAucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHZhciB0aGVJZCA9IFVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEKGtleSk7XG4gIGlmICghdGhpcy5jb250YWlucyh0aGVJZCkpIHtcbiAgICB0aGlzLm1hcFt0aGVJZF0gPSB2YWx1ZTtcbiAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuICB9XG59O1xuXG5IYXNoTWFwLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW2tleV0gIT0gbnVsbDtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW3RoZUlkXTtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmtleVNldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMua2V5cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaE1hcDtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaFNldCgpIHtcbiAgdGhpcy5zZXQgPSB7fTtcbn1cbjtcblxuSGFzaFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgdGhlSWQgPSBVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopO1xuICBpZiAoIXRoaXMuY29udGFpbnModGhlSWQpKSB0aGlzLnNldFt0aGVJZF0gPSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGRlbGV0ZSB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXTtcbn07XG5cbkhhc2hTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNldCA9IHt9O1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXSA9PSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aDtcbn07XG5cbi8vY29uY2F0cyB0aGlzLnNldCB0byB0aGUgZ2l2ZW4gbGlzdFxuSGFzaFNldC5wcm90b3R5cGUuYWRkQWxsVG8gPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2V0KTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdC5wdXNoKHRoaXMuc2V0W2tleXNbaV1dKTtcbiAgfVxufTtcblxuSGFzaFNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGg7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIgcyA9IGxpc3QubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciB2ID0gbGlzdFtpXTtcbiAgICB0aGlzLmFkZCh2KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoU2V0O1xuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogQSBjbGFzc2ljIFF1aWNrc29ydCBhbGdvcml0aG0gd2l0aCBIb2FyZSdzIHBhcnRpdGlvblxuICogLSBXb3JrcyBhbHNvIG9uIExpbmtlZExpc3Qgb2JqZWN0c1xuICpcbiAqIENvcHlyaWdodDogaS1WaXMgUmVzZWFyY2ggR3JvdXAsIEJpbGtlbnQgVW5pdmVyc2l0eSwgMjAwNyAtIHByZXNlbnRcbiAqL1xuXG52YXIgTGlua2VkTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG52YXIgUXVpY2tzb3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFF1aWNrc29ydChBLCBjb21wYXJlRnVuY3Rpb24pIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFF1aWNrc29ydCk7XG5cbiAgICAgICAgaWYgKGNvbXBhcmVGdW5jdGlvbiAhPT0gbnVsbCB8fCBjb21wYXJlRnVuY3Rpb24gIT09IHVuZGVmaW5lZCkgdGhpcy5jb21wYXJlRnVuY3Rpb24gPSB0aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSB2b2lkIDA7XG4gICAgICAgIGlmIChBIGluc3RhbmNlb2YgTGlua2VkTGlzdCkgbGVuZ3RoID0gQS5zaXplKCk7ZWxzZSBsZW5ndGggPSBBLmxlbmd0aDtcblxuICAgICAgICB0aGlzLl9xdWlja3NvcnQoQSwgMCwgbGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKFF1aWNrc29ydCwgW3tcbiAgICAgICAga2V5OiAnX3F1aWNrc29ydCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcXVpY2tzb3J0KEEsIHAsIHIpIHtcbiAgICAgICAgICAgIGlmIChwIDwgcikge1xuICAgICAgICAgICAgICAgIHZhciBxID0gdGhpcy5fcGFydGl0aW9uKEEsIHAsIHIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3F1aWNrc29ydChBLCBwLCBxKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWlja3NvcnQoQSwgcSArIDEsIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfcGFydGl0aW9uJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wYXJ0aXRpb24oQSwgcCwgcikge1xuICAgICAgICAgICAgdmFyIHggPSB0aGlzLl9nZXQoQSwgcCk7XG4gICAgICAgICAgICB2YXIgaSA9IHA7XG4gICAgICAgICAgICB2YXIgaiA9IHI7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmNvbXBhcmVGdW5jdGlvbih4LCB0aGlzLl9nZXQoQSwgaikpKSB7XG4gICAgICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgICAgICB9d2hpbGUgKHRoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChBLCBpKSwgeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1pZiAoaSA8IGopIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3dhcChBLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfZ2V0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXQob2JqZWN0LCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExpbmtlZExpc3QpIHJldHVybiBvYmplY3QuZ2V0X29iamVjdF9hdChpbmRleCk7ZWxzZSByZXR1cm4gb2JqZWN0W2luZGV4XTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX3NldCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTGlua2VkTGlzdCkgb2JqZWN0LnNldF9vYmplY3RfYXQoaW5kZXgsIHZhbHVlKTtlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX3N3YXAnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3N3YXAoQSwgaSwgaikge1xuICAgICAgICAgICAgdmFyIHRlbXAgPSB0aGlzLl9nZXQoQSwgaSk7XG4gICAgICAgICAgICB0aGlzLl9zZXQoQSwgaSwgdGhpcy5fZ2V0KEEsIGopKTtcbiAgICAgICAgICAgIHRoaXMuX3NldChBLCBqLCB0ZW1wKTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24nLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIgPiBhO1xuICAgICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFF1aWNrc29ydDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWlja3NvcnQ7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiAgIE5lZWRsZW1hbi1XdW5zY2ggYWxnb3JpdGhtIGlzIGFuIHByb2NlZHVyZSB0byBjb21wdXRlIHRoZSBvcHRpbWFsIGdsb2JhbCBhbGlnbm1lbnQgb2YgdHdvIHN0cmluZ1xuICogICBzZXF1ZW5jZXMgYnkgUy5CLk5lZWRsZW1hbiBhbmQgQy5ELld1bnNjaCAoMTk3MCkuXG4gKlxuICogICBBc2lkZSBmcm9tIHRoZSBpbnB1dHMsIHlvdSBjYW4gYXNzaWduIHRoZSBzY29yZXMgZm9yLFxuICogICAtIE1hdGNoOiBUaGUgdHdvIGNoYXJhY3RlcnMgYXQgdGhlIGN1cnJlbnQgaW5kZXggYXJlIHNhbWUuXG4gKiAgIC0gTWlzbWF0Y2g6IFRoZSB0d28gY2hhcmFjdGVycyBhdCB0aGUgY3VycmVudCBpbmRleCBhcmUgZGlmZmVyZW50LlxuICogICAtIEluc2VydGlvbi9EZWxldGlvbihnYXBzKTogVGhlIGJlc3QgYWxpZ25tZW50IGludm9sdmVzIG9uZSBsZXR0ZXIgYWxpZ25pbmcgdG8gYSBnYXAgaW4gdGhlIG90aGVyIHN0cmluZy5cbiAqL1xuXG52YXIgTmVlZGxlbWFuV3Vuc2NoID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5lZWRsZW1hbld1bnNjaChzZXF1ZW5jZTEsIHNlcXVlbmNlMikge1xuICAgICAgICB2YXIgbWF0Y2hfc2NvcmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gICAgICAgIHZhciBtaXNtYXRjaF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAtMTtcbiAgICAgICAgdmFyIGdhcF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAtMTtcblxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmVlZGxlbWFuV3Vuc2NoKTtcblxuICAgICAgICB0aGlzLnNlcXVlbmNlMSA9IHNlcXVlbmNlMTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZTIgPSBzZXF1ZW5jZTI7XG4gICAgICAgIHRoaXMubWF0Y2hfc2NvcmUgPSBtYXRjaF9zY29yZTtcbiAgICAgICAgdGhpcy5taXNtYXRjaF9wZW5hbHR5ID0gbWlzbWF0Y2hfcGVuYWx0eTtcbiAgICAgICAgdGhpcy5nYXBfcGVuYWx0eSA9IGdhcF9wZW5hbHR5O1xuXG4gICAgICAgIC8vIEp1c3QgdGhlIHJlbW92ZSByZWR1bmRhbmN5XG4gICAgICAgIHRoaXMuaU1heCA9IHNlcXVlbmNlMS5sZW5ndGggKyAxO1xuICAgICAgICB0aGlzLmpNYXggPSBzZXF1ZW5jZTIubGVuZ3RoICsgMTtcblxuICAgICAgICAvLyBHcmlkIG1hdHJpeCBvZiBzY29yZXNcbiAgICAgICAgdGhpcy5ncmlkID0gbmV3IEFycmF5KHRoaXMuaU1heCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pTWF4OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFtpXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkW2ldW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNlYmFjayBtYXRyaXggKDJEIGFycmF5LCBlYWNoIGNlbGwgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgZm9yIFtgRGlhZ2AsIGBVcGAsIGBMZWZ0YF0gcG9zaXRpb25zKVxuICAgICAgICB0aGlzLnRyYWNlYmFja0dyaWQgPSBuZXcgQXJyYXkodGhpcy5pTWF4KTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMuaU1heDsgX2krKykge1xuICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgdGhpcy5qTWF4OyBfaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXVtfal0gPSBbbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgYWxpZ25lZCBzZXF1ZW5jZXMgKHJldHVybiBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzKVxuICAgICAgICB0aGlzLmFsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAvLyBGaW5hbCBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgdGhpcy5zY29yZSA9IC0xO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzY29yZXMgYW5kIHRyYWNlYmFja3NcbiAgICAgICAgdGhpcy5jb21wdXRlR3JpZHMoKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoTmVlZGxlbWFuV3Vuc2NoLCBbe1xuICAgICAgICBrZXk6IFwiZ2V0U2NvcmVcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNjb3JlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NvcmU7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJnZXRBbGlnbm1lbnRzXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbm1lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpZ25tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gZHluYW1pYyBwcm9ncmFtbWluZyBwcm9jZWR1cmVcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImNvbXB1dGVHcmlkc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcHV0ZUdyaWRzKCkge1xuICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgZmlyc3Qgcm93XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkWzBdW2pdID0gdGhpcy5ncmlkWzBdW2ogLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkWzBdW2pdID0gW2ZhbHNlLCBmYWxzZSwgdHJ1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGZpcnN0IGNvbHVtblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLmlNYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtpXVswXSA9IHRoaXMuZ3JpZFtpIC0gMV1bMF0gKyB0aGlzLmdhcF9wZW5hbHR5O1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtpXVswXSA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGaWxsIHRoZSByZXN0IG9mIHRoZSBncmlkXG4gICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAxOyBfaTIgPCB0aGlzLmlNYXg7IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2oyID0gMTsgX2oyIDwgdGhpcy5qTWF4OyBfajIrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBtYXggc2NvcmUocykgYW1vbmcgW2BEaWFnYCwgYFVwYCwgYExlZnRgXVxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlhZyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVuY2UxW19pMiAtIDFdID09PSB0aGlzLnNlcXVlbmNlMltfajIgLSAxXSkgZGlhZyA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajIgLSAxXSArIHRoaXMubWF0Y2hfc2NvcmU7ZWxzZSBkaWFnID0gdGhpcy5ncmlkW19pMiAtIDFdW19qMiAtIDFdICsgdGhpcy5taXNtYXRjaF9wZW5hbHR5O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cCA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajJdICsgdGhpcy5nYXBfcGVuYWx0eTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlzLmdyaWRbX2kyXVtfajIgLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIG11bHRpcGxlIG1heCB2YWx1ZXMsIGNhcHR1cmUgdGhlbSBmb3IgbXVsdGlwbGUgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heE9mID0gW2RpYWcsIHVwLCBsZWZ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhtYXhPZik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIEdyaWRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtfaTJdW19qMl0gPSBtYXhPZltpbmRpY2VzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pMl1bX2oyXSA9IFtpbmRpY2VzLmluY2x1ZGVzKDApLCBpbmRpY2VzLmluY2x1ZGVzKDEpLCBpbmRpY2VzLmluY2x1ZGVzKDIpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgICAgIHRoaXMuc2NvcmUgPSB0aGlzLmdyaWRbdGhpcy5pTWF4IC0gMV1bdGhpcy5qTWF4IC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXRzIGFsbCBwb3NzaWJsZSB2YWxpZCBzZXF1ZW5jZSBjb21iaW5hdGlvbnNcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFsaWdubWVudFRyYWNlYmFja1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWxpZ25tZW50VHJhY2ViYWNrKCkge1xuICAgICAgICAgICAgdmFyIGluUHJvY2Vzc0FsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLCB0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLFxuICAgICAgICAgICAgICAgIHNlcTE6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2VxMjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChpblByb2Nlc3NBbGlnbm1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBpblByb2Nlc3NBbGlnbm1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25zID0gdGhpcy50cmFjZWJhY2tHcmlkW2N1cnJlbnQucG9zWzBdXVtjdXJyZW50LnBvc1sxXV07XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSAtIDEsIGN1cnJlbnQucG9zWzFdIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogdGhpcy5zZXF1ZW5jZTJbY3VycmVudC5wb3NbMV0gLSAxXSArIGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbY3VycmVudC5wb3NbMF0gLSAxLCBjdXJyZW50LnBvc1sxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogJy0nICsgY3VycmVudC5zZXEyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1syXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSwgY3VycmVudC5wb3NbMV0gLSAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTE6ICctJyArIGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTI6IHRoaXMuc2VxdWVuY2UyW2N1cnJlbnQucG9zWzFdIC0gMV0gKyBjdXJyZW50LnNlcTJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucG9zWzBdID09PSAwICYmIGN1cnJlbnQucG9zWzFdID09PSAwKSB0aGlzLmFsaWdubWVudHMucHVzaCh7IHNlcXVlbmNlMTogY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTI6IGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGlnbm1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGVscGVyIEZ1bmN0aW9uc1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiZ2V0QWxsSW5kZXhlc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxsSW5kZXhlcyhhcnIsIHZhbCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICAgICAgICBpID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKGkgPSBhcnIuaW5kZXhPZih2YWwsIGkgKyAxKSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJhcnJheUFsbE1heEluZGV4ZXNcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFycmF5QWxsTWF4SW5kZXhlcyhhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyhhcnJheSwgTWF0aC5tYXguYXBwbHkobnVsbCwgYXJyYXkpKTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBOZWVkbGVtYW5XdW5zY2g7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTmVlZGxlbWFuV3Vuc2NoO1xuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBsYXlvdXRCYXNlID0gZnVuY3Rpb24gbGF5b3V0QmFzZSgpIHtcbiAgcmV0dXJuO1xufTtcblxubGF5b3V0QmFzZS5GRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5sYXlvdXRCYXNlLkZETGF5b3V0RWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xubGF5b3V0QmFzZS5GRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbmxheW91dEJhc2UuRGltZW5zaW9uRCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xubGF5b3V0QmFzZS5IYXNoTWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5sYXlvdXRCYXNlLkhhc2hTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbmxheW91dEJhc2UuSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbmxheW91dEJhc2UuSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xubGF5b3V0QmFzZS5JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5sYXlvdXRCYXNlLlBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5sYXlvdXRCYXNlLlBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5sYXlvdXRCYXNlLlJhbmRvbVNlZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbmxheW91dEJhc2UuUmVjdGFuZ2xlRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xubGF5b3V0QmFzZS5UcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbmxheW91dEJhc2UuVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbmxheW91dEJhc2UuUXVpY2tzb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG5sYXlvdXRCYXNlLkxpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbmxheW91dEJhc2UuTEdyYXBoT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbmxheW91dEJhc2UuTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbmxheW91dEJhc2UuTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xubGF5b3V0QmFzZS5MR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmxheW91dEJhc2UuTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xubGF5b3V0QmFzZS5MYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbmxheW91dEJhc2UuTmVlZGxlbWFuV3Vuc2NoID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbGF5b3V0QmFzZTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBFbWl0dGVyKCkge1xuICB0aGlzLmxpc3RlbmVycyA9IFtdO1xufVxuXG52YXIgcCA9IEVtaXR0ZXIucHJvdG90eXBlO1xuXG5wLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICB0aGlzLmxpc3RlbmVycy5wdXNoKHtcbiAgICBldmVudDogZXZlbnQsXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gIH0pO1xufTtcblxucC5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IHRoaXMubGlzdGVuZXJzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbCA9IHRoaXMubGlzdGVuZXJzW2ldO1xuXG4gICAgaWYgKGwuZXZlbnQgPT09IGV2ZW50ICYmIGwuY2FsbGJhY2sgPT09IGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59O1xuXG5wLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsID0gdGhpcy5saXN0ZW5lcnNbaV07XG5cbiAgICBpZiAoZXZlbnQgPT09IGwuZXZlbnQpIHtcbiAgICAgIGwuY2FsbGJhY2soZGF0YSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pOyIsCiAgICAiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibGF5b3V0LWJhc2VcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibGF5b3V0LWJhc2VcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiY29zZUJhc2VcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJsYXlvdXQtYmFzZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiY29zZUJhc2VcIl0gPSBmYWN0b3J5KHJvb3RbXCJsYXlvdXRCYXNlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNyk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX187XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0Q29uc3RhbnRzO1xuXG5mdW5jdGlvbiBDb1NFQ29uc3RhbnRzKCkge31cblxuLy9Db1NFQ29uc3RhbnRzIGluaGVyaXRzIHN0YXRpYyBwcm9wcyBpbiBGRExheW91dENvbnN0YW50c1xuZm9yICh2YXIgcHJvcCBpbiBGRExheW91dENvbnN0YW50cykge1xuICBDb1NFQ29uc3RhbnRzW3Byb3BdID0gRkRMYXlvdXRDb25zdGFudHNbcHJvcF07XG59XG5cbkNvU0VDb25zdGFudHMuREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORyA9IGZhbHNlO1xuQ29TRUNvbnN0YW50cy5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSDtcbkNvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTiA9IDYwO1xuQ29TRUNvbnN0YW50cy5USUxFID0gdHJ1ZTtcbkNvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUwgPSAxMDtcbkNvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCA9IDEwO1xuQ29TRUNvbnN0YW50cy5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCA9IGZhbHNlOyAvLyBtYWtlIHRoaXMgdHJ1ZSB3aGVuIGNvc2UgaXMgdXNlZCBpbmNyZW1lbnRhbGx5IGFzIGEgcGFydCBvZiBvdGhlciBub24taW5jcmVtZW50YWwgbGF5b3V0XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUNvbnN0YW50cztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBGRExheW91dEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0RWRnZTtcblxuZnVuY3Rpb24gQ29TRUVkZ2Uoc291cmNlLCB0YXJnZXQsIHZFZGdlKSB7XG4gIEZETGF5b3V0RWRnZS5jYWxsKHRoaXMsIHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSk7XG59XG5cbkNvU0VFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXRFZGdlLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0RWRnZSkge1xuICBDb1NFRWRnZVtwcm9wXSA9IEZETGF5b3V0RWRnZVtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFRWRnZTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxHcmFwaDtcblxuZnVuY3Rpb24gQ29TRUdyYXBoKHBhcmVudCwgZ3JhcGhNZ3IsIHZHcmFwaCkge1xuICBMR3JhcGguY2FsbCh0aGlzLCBwYXJlbnQsIGdyYXBoTWdyLCB2R3JhcGgpO1xufVxuXG5Db1NFR3JhcGgucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGgucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gTEdyYXBoKSB7XG4gIENvU0VHcmFwaFtwcm9wXSA9IExHcmFwaFtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFR3JhcGg7XG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuTEdyYXBoTWFuYWdlcjtcblxuZnVuY3Rpb24gQ29TRUdyYXBoTWFuYWdlcihsYXlvdXQpIHtcbiAgTEdyYXBoTWFuYWdlci5jYWxsKHRoaXMsIGxheW91dCk7XG59XG5cbkNvU0VHcmFwaE1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhNYW5hZ2VyLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE1hbmFnZXIpIHtcbiAgQ29TRUdyYXBoTWFuYWdlcltwcm9wXSA9IExHcmFwaE1hbmFnZXJbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBGRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0Tm9kZTtcbnZhciBJTWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuSU1hdGg7XG5cbmZ1bmN0aW9uIENvU0VOb2RlKGdtLCBsb2MsIHNpemUsIHZOb2RlKSB7XG4gIEZETGF5b3V0Tm9kZS5jYWxsKHRoaXMsIGdtLCBsb2MsIHNpemUsIHZOb2RlKTtcbn1cblxuQ29TRU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShGRExheW91dE5vZGUucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gRkRMYXlvdXROb2RlKSB7XG4gIENvU0VOb2RlW3Byb3BdID0gRkRMYXlvdXROb2RlW3Byb3BdO1xufVxuXG5Db1NFTm9kZS5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxheW91dCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO1xuICB0aGlzLmRpc3BsYWNlbWVudFggPSBsYXlvdXQuY29vbGluZ0ZhY3RvciAqICh0aGlzLnNwcmluZ0ZvcmNlWCArIHRoaXMucmVwdWxzaW9uRm9yY2VYICsgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkgLyB0aGlzLm5vT2ZDaGlsZHJlbjtcbiAgdGhpcy5kaXNwbGFjZW1lbnRZID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiAodGhpcy5zcHJpbmdGb3JjZVkgKyB0aGlzLnJlcHVsc2lvbkZvcmNlWSArIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpIC8gdGhpcy5ub09mQ2hpbGRyZW47XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkgPiBsYXlvdXQuY29vbGluZ0ZhY3RvciAqIGxheW91dC5tYXhOb2RlRGlzcGxhY2VtZW50KSB7XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRYID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCAqIElNYXRoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpID4gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCkge1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WSA9IGxheW91dC5jb29saW5nRmFjdG9yICogbGF5b3V0Lm1heE5vZGVEaXNwbGFjZW1lbnQgKiBJTWF0aC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gIH1cblxuICAvLyBhIHNpbXBsZSBub2RlLCBqdXN0IG1vdmUgaXRcbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIHRoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCwgdGhpcy5kaXNwbGFjZW1lbnRZKTtcbiAgfVxuICAvLyBhbiBlbXB0eSBjb21wb3VuZCBub2RlLCBhZ2FpbiBqdXN0IG1vdmUgaXRcbiAgZWxzZSBpZiAodGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsIHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gICAgfVxuICAgIC8vIG5vbi1lbXB0eSBjb21wb3VuZCBub2RlLCBwcm9wb2dhdGUgbW92ZW1lbnQgdG8gY2hpbGRyZW4gYXMgd2VsbFxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuICAgICAgfVxuXG4gIGxheW91dC50b3RhbERpc3BsYWNlbWVudCArPSBNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpICsgTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKTtcblxuICB0aGlzLnNwcmluZ0ZvcmNlWCA9IDA7XG4gIHRoaXMuc3ByaW5nRm9yY2VZID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVggPSAwO1xuICB0aGlzLnJlcHVsc2lvbkZvcmNlWSA9IDA7XG4gIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVggPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VZID0gMDtcbiAgdGhpcy5kaXNwbGFjZW1lbnRYID0gMDtcbiAgdGhpcy5kaXNwbGFjZW1lbnRZID0gMDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuID0gZnVuY3Rpb24gKGRYLCBkWSkge1xuICB2YXIgbm9kZXMgPSB0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKTtcbiAgdmFyIG5vZGU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlID0gbm9kZXNbaV07XG4gICAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICBub2RlLm1vdmVCeShkWCwgZFkpO1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRYICs9IGRYO1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRZICs9IGRZO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4oZFgsIGRZKTtcbiAgICB9XG4gIH1cbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXRQcmVkMSA9IGZ1bmN0aW9uIChwcmVkMSkge1xuICB0aGlzLnByZWQxID0gcHJlZDE7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuZ2V0UHJlZDEgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcmVkMTtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5nZXRQcmVkMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHByZWQyO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLnNldE5leHQgPSBmdW5jdGlvbiAobmV4dCkge1xuICB0aGlzLm5leHQgPSBuZXh0O1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmdldE5leHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXh0O1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLnNldFByb2Nlc3NlZCA9IGZ1bmN0aW9uIChwcm9jZXNzZWQpIHtcbiAgdGhpcy5wcm9jZXNzZWQgPSBwcm9jZXNzZWQ7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuaXNQcm9jZXNzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcm9jZXNzZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VOb2RlO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEZETGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5GRExheW91dDtcbnZhciBDb1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBDb1NFR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIENvU0VOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBDb1NFRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgQ29TRUNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuTGF5b3V0Q29uc3RhbnRzO1xudmFyIFBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Qb2ludDtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLlBvaW50RDtcbnZhciBMYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxheW91dDtcbnZhciBJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5JbnRlZ2VyO1xudmFyIElHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuSUdlb21ldHJ5O1xudmFyIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuTEdyYXBoO1xudmFyIFRyYW5zZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBDb1NFTGF5b3V0KCkge1xuICBGRExheW91dC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudG9CZVRpbGVkID0ge307IC8vIE1lbW9yaXplIGlmIGEgbm9kZSBpcyB0byBiZSB0aWxlZCBvciBpcyB0aWxlZFxufVxuXG5Db1NFTGF5b3V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXQucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBGRExheW91dCkge1xuICBDb1NFTGF5b3V0W3Byb3BdID0gRkRMYXlvdXRbcHJvcF07XG59XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGdtID0gbmV3IENvU0VHcmFwaE1hbmFnZXIodGhpcyk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gZ207XG4gIHJldHVybiBnbTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoID0gZnVuY3Rpb24gKHZHcmFwaCkge1xuICByZXR1cm4gbmV3IENvU0VHcmFwaChudWxsLCB0aGlzLmdyYXBoTWFuYWdlciwgdkdyYXBoKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld05vZGUgPSBmdW5jdGlvbiAodk5vZGUpIHtcbiAgcmV0dXJuIG5ldyBDb1NFTm9kZSh0aGlzLmdyYXBoTWFuYWdlciwgdk5vZGUpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3RWRnZSA9IGZ1bmN0aW9uICh2RWRnZSkge1xuICByZXR1cm4gbmV3IENvU0VFZGdlKG51bGwsIG51bGwsIHZFZGdlKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICBGRExheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoIXRoaXMuaXNTdWJMYXlvdXQpIHtcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIDwgMTApIHtcbiAgICAgIHRoaXMuaWRlYWxFZGdlTGVuZ3RoID0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaWRlYWxFZGdlTGVuZ3RoID0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xuICAgIH1cblxuICAgIHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiA9IENvU0VDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT047XG4gICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIO1xuICAgIHRoaXMucmVwdWxzaW9uQ29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSDtcbiAgICB0aGlzLmdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSDtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIO1xuICAgIHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdHJlZSByZWR1Y3Rpb24gc3VwcG9ydFxuICAgIHRoaXMucHJ1bmVkTm9kZXNBbGwgPSBbXTtcbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgPSAwO1xuICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNHcm93dGhGaW5pc2hlZCA9IGZhbHNlO1xuXG4gICAgLy8gdmFyaWFibGVzIGZvciBjb29saW5nXG4gICAgdGhpcy5jb29saW5nQ3ljbGUgPSAwO1xuICAgIHRoaXMubWF4Q29vbGluZ0N5Y2xlID0gdGhpcy5tYXhJdGVyYXRpb25zIC8gRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EO1xuICAgIHRoaXMuZmluYWxUZW1wZXJhdHVyZSA9IEZETGF5b3V0Q29uc3RhbnRzLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCAvIHRoaXMubWF4SXRlcmF0aW9ucztcbiAgICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IDE7XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmxheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNyZWF0ZUJlbmRzQXNOZWVkZWQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO1xuICBpZiAoY3JlYXRlQmVuZHNBc05lZWRlZCkge1xuICAgIHRoaXMuY3JlYXRlQmVuZHBvaW50cygpO1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKTtcbiAgfVxuXG4gIHRoaXMubGV2ZWwgPSAwO1xuICByZXR1cm4gdGhpcy5jbGFzc2ljTGF5b3V0KCk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLm5vZGVzV2l0aEdyYXZpdHkgPSB0aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KTtcbiAgdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpO1xuXG4gIGlmICghdGhpcy5pbmNyZW1lbnRhbCkge1xuICAgIHZhciBmb3Jlc3QgPSB0aGlzLmdldEZsYXRGb3Jlc3QoKTtcblxuICAgIC8vIFRoZSBncmFwaCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXlvdXQgaXMgZmxhdCBhbmQgYSBmb3Jlc3RcbiAgICBpZiAoZm9yZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KGZvcmVzdCk7XG4gICAgfVxuICAgIC8vIFRoZSBncmFwaCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXlvdXQgaXMgbm90IGZsYXQgb3IgYSBmb3Jlc3RcbiAgICBlbHNlIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSB0cmVlcyB3aGVuIGluY3JlbWVudGFsIG1vZGUgaXMgbm90IGVuYWJsZWQgYW5kIGdyYXBoIGlzIG5vdCBhIGZvcmVzdCBcbiAgICAgICAgdGhpcy5yZWR1Y2VUcmVlcygpO1xuICAgICAgICAvLyBVcGRhdGUgbm9kZXMgdGhhdCBncmF2aXR5IHdpbGwgYmUgYXBwbGllZFxuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IHRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oaW50ZXJzZWN0aW9uKTtcblxuICAgICAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpO1xuICAgICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChDb1NFQ29uc3RhbnRzLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKSB7XG4gICAgICAvLyBSZWR1Y2UgdGhlIHRyZWVzIGluIGluY3JlbWVudGFsIG1vZGUgaWYgb25seSB0aGlzIGNvbnN0YW50IGlzIHNldCB0byB0cnVlIFxuICAgICAgdGhpcy5yZWR1Y2VUcmVlcygpO1xuICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTtcbiAgICAgIHZhciBhbGxOb2RlcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKTtcbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBhbGxOb2Rlcy5oYXMoeCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKTtcbiAgdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUudGljayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy50b3RhbEl0ZXJhdGlvbnMrKztcblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgPT09IHRoaXMubWF4SXRlcmF0aW9ucyAmJiAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzVHJlZUdyb3dpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgJSBGRExheW91dENvbnN0YW50cy5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QgPT0gMCAmJiAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5pc0NvbnZlcmdlZCgpKSB7XG4gICAgICBpZiAodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvb2xpbmdDeWNsZSsrO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0UXVhbGl0eSA9PSAwKSB7XG4gICAgICAvLyBxdWFsaXR5IC0gXCJkcmFmdFwiXG4gICAgICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IHRoaXMuY29vbGluZ0N5Y2xlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYXlvdXRRdWFsaXR5ID09IDEpIHtcbiAgICAgIC8vIHF1YWxpdHkgLSBcImRlZmF1bHRcIlxuICAgICAgdGhpcy5jb29saW5nQWRqdXN0ZXIgPSB0aGlzLmNvb2xpbmdDeWNsZSAvIDM7XG4gICAgfVxuXG4gICAgLy8gY29vbGluZyBzY2hlZHVsZSBpcyBiYXNlZCBvbiBodHRwOi8vd3d3LmJ0bHVrZS5jb20vc2ltYW5mMS5odG1sIC0+IGNvb2xpbmcgc2NoZWR1bGUgM1xuICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IE1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgLSBNYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSwgTWF0aC5sb2coMTAwICogKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgLSB0aGlzLmZpbmFsVGVtcGVyYXR1cmUpKSAvIE1hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkgLyAxMDAgKiB0aGlzLmNvb2xpbmdBZGp1c3RlciwgdGhpcy5maW5hbFRlbXBlcmF0dXJlKTtcbiAgICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IE1hdGguY2VpbCh0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2QgKiBNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSk7XG4gIH1cbiAgLy8gT3BlcmF0aW9ucyB3aGlsZSB0cmVlIGlzIGdyb3dpbmcgYWdhaW4gXG4gIGlmICh0aGlzLmlzVHJlZUdyb3dpbmcpIHtcbiAgICBpZiAodGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgJSAxMCA9PSAwKSB7XG4gICAgICBpZiAodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcbiAgICAgICAgdGhpcy5ncm93VHJlZSh0aGlzLnBydW5lZE5vZGVzQWxsKTtcbiAgICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmhhcyh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG5cbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgICAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc1RyZWVHcm93aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHcm93dGhGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zKys7XG4gIH1cbiAgLy8gT3BlcmF0aW9ucyBhZnRlciBncm93dGggaXMgZmluaXNoZWRcbiAgaWYgKHRoaXMuaXNHcm93dGhGaW5pc2hlZCkge1xuICAgIGlmICh0aGlzLmlzQ29udmVyZ2VkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgJSAxMCA9PSAwKSB7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgIH1cbiAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMICogKCgxMDAgLSB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykgLyAxMDApO1xuICAgIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKys7XG4gIH1cblxuICB2YXIgZ3JpZFVwZGF0ZUFsbG93ZWQgPSAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7XG4gIHZhciBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlID0gdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgJSAxMCA9PSAxICYmIHRoaXMuaXNUcmVlR3Jvd2luZyB8fCB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyAlIDEwID09IDEgJiYgdGhpcy5pc0dyb3d0aEZpbmlzaGVkO1xuXG4gIHRoaXMudG90YWxEaXNwbGFjZW1lbnQgPSAwO1xuICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCk7XG4gIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhncmlkVXBkYXRlQWxsb3dlZCwgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSk7XG4gIHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKTtcbiAgdGhpcy5tb3ZlTm9kZXMoKTtcbiAgdGhpcy5hbmltYXRlKCk7XG5cbiAgcmV0dXJuIGZhbHNlOyAvLyBMYXlvdXQgaXMgbm90IGVuZGVkIHlldCByZXR1cm4gZmFsc2Vcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gIHZhciBwRGF0YSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlY3QgPSBhbGxOb2Rlc1tpXS5yZWN0O1xuICAgIHZhciBpZCA9IGFsbE5vZGVzW2ldLmlkO1xuICAgIHBEYXRhW2lkXSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHg6IHJlY3QuZ2V0Q2VudGVyWCgpLFxuICAgICAgeTogcmVjdC5nZXRDZW50ZXJZKCksXG4gICAgICB3OiByZWN0LndpZHRoLFxuICAgICAgaDogcmVjdC5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHBEYXRhO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCA9IDI1O1xuICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDtcbiAgdmFyIGxheW91dEVuZGVkID0gZmFsc2U7XG5cbiAgLy8gSWYgYW1pbmF0ZSBvcHRpb24gaXMgJ2R1cmluZycgc2lnbmFsIHRoYXQgbGF5b3V0IGlzIHN1cHBvc2VkIHRvIHN0YXJ0IGl0ZXJhdGluZ1xuICBpZiAoRkRMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9PT0gJ2R1cmluZycpIHtcbiAgICB0aGlzLmVtaXQoJ2xheW91dHN0YXJ0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbWluYXRlIG9wdGlvbiBpcyAnZHVyaW5nJyB0aWNrKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24gaW5kZXguanNcbiAgICB3aGlsZSAoIWxheW91dEVuZGVkKSB7XG4gICAgICBsYXlvdXRFbmRlZCA9IHRoaXMudGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbm9kZUxpc3QgPSBbXTtcbiAgdmFyIGdyYXBoO1xuXG4gIHZhciBncmFwaHMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKTtcbiAgdmFyIHNpemUgPSBncmFwaHMubGVuZ3RoO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGdyYXBoID0gZ3JhcGhzW2ldO1xuXG4gICAgZ3JhcGgudXBkYXRlQ29ubmVjdGVkKCk7XG5cbiAgICBpZiAoIWdyYXBoLmlzQ29ubmVjdGVkKSB7XG4gICAgICBub2RlTGlzdCA9IG5vZGVMaXN0LmNvbmNhdChncmFwaC5nZXROb2RlcygpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZUxpc3Q7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgZWRnZXMgPSBlZGdlcy5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcblxuICAgIGlmICghdmlzaXRlZC5oYXMoZWRnZSkpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlZGdlLmdldFNvdXJjZSgpO1xuICAgICAgdmFyIHRhcmdldCA9IGVkZ2UuZ2V0VGFyZ2V0KCk7XG5cbiAgICAgIGlmIChzb3VyY2UgPT0gdGFyZ2V0KSB7XG4gICAgICAgIGVkZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFBvaW50RCgpKTtcbiAgICAgICAgZWRnZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgUG9pbnREKCkpO1xuICAgICAgICB0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKGVkZ2UpO1xuICAgICAgICB2aXNpdGVkLmFkZChlZGdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlZGdlTGlzdCA9IFtdO1xuXG4gICAgICAgIGVkZ2VMaXN0ID0gZWRnZUxpc3QuY29uY2F0KHNvdXJjZS5nZXRFZGdlTGlzdFRvTm9kZSh0YXJnZXQpKTtcbiAgICAgICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQodGFyZ2V0LmdldEVkZ2VMaXN0VG9Ob2RlKHNvdXJjZSkpO1xuXG4gICAgICAgIGlmICghdmlzaXRlZC5oYXMoZWRnZUxpc3RbMF0pKSB7XG4gICAgICAgICAgaWYgKGVkZ2VMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGVkZ2VMaXN0Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIHZhciBtdWx0aUVkZ2UgPSBlZGdlTGlzdFtrXTtcbiAgICAgICAgICAgICAgbXVsdGlFZGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBQb2ludEQoKSk7XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMobXVsdGlFZGdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWRnZUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQoZWRnZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmlzaXRlZC5zaXplID09IGVkZ2VzLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHkgPSBmdW5jdGlvbiAoZm9yZXN0KSB7XG4gIC8vIFdlIHRpbGUgdGhlIHRyZWVzIHRvIGEgZ3JpZCByb3cgYnkgcm93OyBmaXJzdCB0cmVlIHN0YXJ0cyBhdCAoMCwwKVxuICB2YXIgY3VycmVudFN0YXJ0aW5nUG9pbnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gIHZhciBudW1iZXJPZkNvbHVtbnMgPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KGZvcmVzdC5sZW5ndGgpKTtcbiAgdmFyIGhlaWdodCA9IDA7XG4gIHZhciBjdXJyZW50WSA9IDA7XG4gIHZhciBjdXJyZW50WCA9IDA7XG4gIHZhciBwb2ludCA9IG5ldyBQb2ludEQoMCwgMCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jlc3QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSAlIG51bWJlck9mQ29sdW1ucyA9PSAwKSB7XG4gICAgICAvLyBTdGFydCBvZiBhIG5ldyByb3csIG1ha2UgdGhlIHggY29vcmRpbmF0ZSAwLCBpbmNyZW1lbnQgdGhlXG4gICAgICAvLyB5IGNvb3JkaW5hdGUgd2l0aCB0aGUgbWF4IGhlaWdodCBvZiB0aGUgcHJldmlvdXMgcm93XG4gICAgICBjdXJyZW50WCA9IDA7XG4gICAgICBjdXJyZW50WSA9IGhlaWdodDtcblxuICAgICAgaWYgKGkgIT0gMCkge1xuICAgICAgICBjdXJyZW50WSArPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT047XG4gICAgICB9XG5cbiAgICAgIGhlaWdodCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHRyZWUgPSBmb3Jlc3RbaV07XG5cbiAgICAvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHRyZWVcbiAgICB2YXIgY2VudGVyTm9kZSA9IExheW91dC5maW5kQ2VudGVyT2ZUcmVlKHRyZWUpO1xuXG4gICAgLy8gU2V0IHRoZSBzdGFyaW5nIHBvaW50IG9mIHRoZSBuZXh0IHRyZWVcbiAgICBjdXJyZW50U3RhcnRpbmdQb2ludC54ID0gY3VycmVudFg7XG4gICAgY3VycmVudFN0YXJ0aW5nUG9pbnQueSA9IGN1cnJlbnRZO1xuXG4gICAgLy8gRG8gYSByYWRpYWwgbGF5b3V0IHN0YXJ0aW5nIHdpdGggdGhlIGNlbnRlclxuICAgIHBvaW50ID0gQ29TRUxheW91dC5yYWRpYWxMYXlvdXQodHJlZSwgY2VudGVyTm9kZSwgY3VycmVudFN0YXJ0aW5nUG9pbnQpO1xuXG4gICAgaWYgKHBvaW50LnkgPiBoZWlnaHQpIHtcbiAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IocG9pbnQueSk7XG4gICAgfVxuXG4gICAgY3VycmVudFggPSBNYXRoLmZsb29yKHBvaW50LnggKyBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pO1xuICB9XG5cbiAgdGhpcy50cmFuc2Zvcm0obmV3IFBvaW50RChMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggLSBwb2ludC54IC8gMiwgTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZIC0gcG9pbnQueSAvIDIpKTtcbn07XG5cbkNvU0VMYXlvdXQucmFkaWFsTGF5b3V0ID0gZnVuY3Rpb24gKHRyZWUsIGNlbnRlck5vZGUsIHN0YXJ0aW5nUG9pbnQpIHtcbiAgdmFyIHJhZGlhbFNlcCA9IE1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUodHJlZSksIENvU0VDb25zdGFudHMuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7XG4gIENvU0VMYXlvdXQuYnJhbmNoUmFkaWFsTGF5b3V0KGNlbnRlck5vZGUsIG51bGwsIDAsIDM1OSwgMCwgcmFkaWFsU2VwKTtcbiAgdmFyIGJvdW5kcyA9IExHcmFwaC5jYWxjdWxhdGVCb3VuZHModHJlZSk7XG5cbiAgdmFyIHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcbiAgdHJhbnNmb3JtLnNldERldmljZU9yZ1goYm91bmRzLmdldE1pblgoKSk7XG4gIHRyYW5zZm9ybS5zZXREZXZpY2VPcmdZKGJvdW5kcy5nZXRNaW5ZKCkpO1xuICB0cmFuc2Zvcm0uc2V0V29ybGRPcmdYKHN0YXJ0aW5nUG9pbnQueCk7XG4gIHRyYW5zZm9ybS5zZXRXb3JsZE9yZ1koc3RhcnRpbmdQb2ludC55KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IHRyZWVbaV07XG4gICAgbm9kZS50cmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgfVxuXG4gIHZhciBib3R0b21SaWdodCA9IG5ldyBQb2ludEQoYm91bmRzLmdldE1heFgoKSwgYm91bmRzLmdldE1heFkoKSk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoYm90dG9tUmlnaHQpO1xufTtcblxuQ29TRUxheW91dC5icmFuY2hSYWRpYWxMYXlvdXQgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50T2ZOb2RlLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgZGlzdGFuY2UsIHJhZGlhbFNlcGFyYXRpb24pIHtcbiAgLy8gRmlyc3QsIHBvc2l0aW9uIHRoaXMgbm9kZSBieSBmaW5kaW5nIGl0cyBhbmdsZS5cbiAgdmFyIGhhbGZJbnRlcnZhbCA9IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUgKyAxKSAvIDI7XG5cbiAgaWYgKGhhbGZJbnRlcnZhbCA8IDApIHtcbiAgICBoYWxmSW50ZXJ2YWwgKz0gMTgwO1xuICB9XG5cbiAgdmFyIG5vZGVBbmdsZSA9IChoYWxmSW50ZXJ2YWwgKyBzdGFydEFuZ2xlKSAlIDM2MDtcbiAgdmFyIHRldGEgPSBub2RlQW5nbGUgKiBJR2VvbWV0cnkuVFdPX1BJIC8gMzYwO1xuXG4gIC8vIE1ha2UgcG9sYXIgdG8gamF2YSBjb3JkaW5hdGUgY29udmVyc2lvbi5cbiAgdmFyIGNvc190ZXRhID0gTWF0aC5jb3ModGV0YSk7XG4gIHZhciB4XyA9IGRpc3RhbmNlICogTWF0aC5jb3ModGV0YSk7XG4gIHZhciB5XyA9IGRpc3RhbmNlICogTWF0aC5zaW4odGV0YSk7XG5cbiAgbm9kZS5zZXRDZW50ZXIoeF8sIHlfKTtcblxuICAvLyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoaXMgbm9kZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzXG4gIC8vIGZ1bmN0aW9uLlxuICB2YXIgbmVpZ2hib3JFZGdlcyA9IFtdO1xuICBuZWlnaGJvckVkZ2VzID0gbmVpZ2hib3JFZGdlcy5jb25jYXQobm9kZS5nZXRFZGdlcygpKTtcbiAgdmFyIGNoaWxkQ291bnQgPSBuZWlnaGJvckVkZ2VzLmxlbmd0aDtcblxuICBpZiAocGFyZW50T2ZOb2RlICE9IG51bGwpIHtcbiAgICBjaGlsZENvdW50LS07XG4gIH1cblxuICB2YXIgYnJhbmNoQ291bnQgPSAwO1xuXG4gIHZhciBpbmNFZGdlc0NvdW50ID0gbmVpZ2hib3JFZGdlcy5sZW5ndGg7XG4gIHZhciBzdGFydEluZGV4O1xuXG4gIHZhciBlZGdlcyA9IG5vZGUuZ2V0RWRnZXNCZXR3ZWVuKHBhcmVudE9mTm9kZSk7XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGVkZ2VzLCBwcnVuZSB0aGVtIHVudGlsIHRoZXJlIHJlbWFpbnMgb25seSBvbmVcbiAgLy8gZWRnZS5cbiAgd2hpbGUgKGVkZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAvL25laWdoYm9yRWRnZXMucmVtb3ZlKGVkZ2VzLnJlbW92ZSgwKSk7XG4gICAgdmFyIHRlbXAgPSBlZGdlc1swXTtcbiAgICBlZGdlcy5zcGxpY2UoMCwgMSk7XG4gICAgdmFyIGluZGV4ID0gbmVpZ2hib3JFZGdlcy5pbmRleE9mKHRlbXApO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBuZWlnaGJvckVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGluY0VkZ2VzQ291bnQtLTtcbiAgICBjaGlsZENvdW50LS07XG4gIH1cblxuICBpZiAocGFyZW50T2ZOb2RlICE9IG51bGwpIHtcbiAgICAvL2Fzc2VydCBlZGdlcy5sZW5ndGggPT0gMTtcbiAgICBzdGFydEluZGV4ID0gKG5laWdoYm9yRWRnZXMuaW5kZXhPZihlZGdlc1swXSkgKyAxKSAlIGluY0VkZ2VzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRJbmRleCA9IDA7XG4gIH1cblxuICB2YXIgc3RlcEFuZ2xlID0gTWF0aC5hYnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSAvIGNoaWxkQ291bnQ7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGJyYW5jaENvdW50ICE9IGNoaWxkQ291bnQ7IGkgPSArK2kgJSBpbmNFZGdlc0NvdW50KSB7XG4gICAgdmFyIGN1cnJlbnROZWlnaGJvciA9IG5laWdoYm9yRWRnZXNbaV0uZ2V0T3RoZXJFbmQobm9kZSk7XG5cbiAgICAvLyBEb24ndCBiYWNrIHRyYXZlcnNlIHRvIHJvb3Qgbm9kZSBpbiBjdXJyZW50IHRyZWUuXG4gICAgaWYgKGN1cnJlbnROZWlnaGJvciA9PSBwYXJlbnRPZk5vZGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjaGlsZFN0YXJ0QW5nbGUgPSAoc3RhcnRBbmdsZSArIGJyYW5jaENvdW50ICogc3RlcEFuZ2xlKSAlIDM2MDtcbiAgICB2YXIgY2hpbGRFbmRBbmdsZSA9IChjaGlsZFN0YXJ0QW5nbGUgKyBzdGVwQW5nbGUpICUgMzYwO1xuXG4gICAgQ29TRUxheW91dC5icmFuY2hSYWRpYWxMYXlvdXQoY3VycmVudE5laWdoYm9yLCBub2RlLCBjaGlsZFN0YXJ0QW5nbGUsIGNoaWxkRW5kQW5nbGUsIGRpc3RhbmNlICsgcmFkaWFsU2VwYXJhdGlvbiwgcmFkaWFsU2VwYXJhdGlvbik7XG5cbiAgICBicmFuY2hDb3VudCsrO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0Lm1heERpYWdvbmFsSW5UcmVlID0gZnVuY3Rpb24gKHRyZWUpIHtcbiAgdmFyIG1heERpYWdvbmFsID0gSW50ZWdlci5NSU5fVkFMVUU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSB0cmVlW2ldO1xuICAgIHZhciBkaWFnb25hbCA9IG5vZGUuZ2V0RGlhZ29uYWwoKTtcblxuICAgIGlmIChkaWFnb25hbCA+IG1heERpYWdvbmFsKSB7XG4gICAgICBtYXhEaWFnb25hbCA9IGRpYWdvbmFsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXhEaWFnb25hbDtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gZm9ybXVsYSBpcyAyIHggKGxldmVsICsgMSkgeCBpZGVhbEVkZ2VMZW5ndGhcbiAgcmV0dXJuIDIgKiAodGhpcy5sZXZlbCArIDEpICogdGhpcy5pZGVhbEVkZ2VMZW5ndGg7XG59O1xuXG4vLyBUaWxpbmcgbWV0aG9kc1xuXG4vLyBHcm91cCB6ZXJvIGRlZ3JlZSBtZW1iZXJzIHdob3NlIHBhcmVudHMgYXJlIG5vdCB0byBiZSB0aWxlZCwgY3JlYXRlIGR1bW15IHBhcmVudHMgd2hlcmUgbmVlZGVkIGFuZCBmaWxsIG1lbWJlckdyb3VwcyBieSB0aGVpciBkdW1tcCBwYXJlbnQgaWQnc1xuQ29TRUxheW91dC5wcm90b3R5cGUuZ3JvdXBaZXJvRGVncmVlTWVtYmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICAvLyBhcnJheSBvZiBbcGFyZW50X2lkIHggb25lRGVncmVlTm9kZV9pZF1cbiAgdmFyIHRlbXBNZW1iZXJHcm91cHMgPSB7fTsgLy8gQSB0ZW1wb3JhcnkgbWFwIG9mIHBhcmVudCBub2RlIGFuZCBpdHMgemVybyBkZWdyZWUgbWVtYmVyc1xuICB0aGlzLm1lbWJlckdyb3VwcyA9IHt9OyAvLyBBIG1hcCBvZiBkdW1teSBwYXJlbnQgbm9kZSBhbmQgaXRzIHplcm8gZGVncmVlIG1lbWJlcnMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHRvIGJlIHRpbGVkXG4gIHRoaXMuaWRUb0R1bW15Tm9kZSA9IHt9OyAvLyBBIG1hcCBvZiBpZCB0byBkdW1teSBub2RlIFxuXG4gIHZhciB6ZXJvRGVncmVlID0gW107IC8vIExpc3Qgb2YgemVybyBkZWdyZWUgbm9kZXMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHRvIGJlIHRpbGVkXG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG5cbiAgLy8gRmlsbCB6ZXJvIGRlZ3JlZSBsaXN0XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGFsbE5vZGVzW2ldO1xuICAgIHZhciBwYXJlbnQgPSBub2RlLmdldFBhcmVudCgpO1xuICAgIC8vIElmIGEgbm9kZSBoYXMgemVybyBkZWdyZWUgYW5kIGl0cyBwYXJlbnQgaXMgbm90IHRvIGJlIHRpbGVkIGlmIGV4aXN0cyBhZGQgdGhhdCBub2RlIHRvIHplcm9EZWdyZXMgbGlzdFxuICAgIGlmICh0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4obm9kZSkgPT09IDAgJiYgKHBhcmVudC5pZCA9PSB1bmRlZmluZWQgfHwgIXRoaXMuZ2V0VG9CZVRpbGVkKHBhcmVudCkpKSB7XG4gICAgICB6ZXJvRGVncmVlLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbWFwIG9mIHBhcmVudCBub2RlIGFuZCBpdHMgemVybyBkZWdyZWUgbWVtYmVyc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHplcm9EZWdyZWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IHplcm9EZWdyZWVbaV07IC8vIFplcm8gZGVncmVlIG5vZGUgaXRzZWxmXG4gICAgdmFyIHBfaWQgPSBub2RlLmdldFBhcmVudCgpLmlkOyAvLyBQYXJlbnQgaWRcblxuICAgIGlmICh0eXBlb2YgdGVtcE1lbWJlckdyb3Vwc1twX2lkXSA9PT0gXCJ1bmRlZmluZWRcIikgdGVtcE1lbWJlckdyb3Vwc1twX2lkXSA9IFtdO1xuXG4gICAgdGVtcE1lbWJlckdyb3Vwc1twX2lkXSA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF0uY29uY2F0KG5vZGUpOyAvLyBQdXNoIG5vZGUgdG8gdGhlIGxpc3QgYmVsb25ncyB0byBpdHMgcGFyZW50IGluIHRlbXBNZW1iZXJHcm91cHNcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gbm9kZXMgYXQgYSBsZXZlbCwgY3JlYXRlIGEgZHVtbXkgY29tcG91bmQgZm9yIHRoZW1cbiAgT2JqZWN0LmtleXModGVtcE1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbiAocF9pZCkge1xuICAgIGlmICh0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdLmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBkdW1teUNvbXBvdW5kSWQgPSBcIkR1bW15Q29tcG91bmRfXCIgKyBwX2lkOyAvLyBUaGUgaWQgb2YgZHVtbXkgY29tcG91bmQgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIHNvb25cbiAgICAgIHNlbGYubWVtYmVyR3JvdXBzW2R1bW15Q29tcG91bmRJZF0gPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdOyAvLyBBZGQgZHVtbXkgY29tcG91bmQgdG8gbWVtYmVyR3JvdXBzXG5cbiAgICAgIHZhciBwYXJlbnQgPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdWzBdLmdldFBhcmVudCgpOyAvLyBUaGUgcGFyZW50IG9mIHplcm8gZGVncmVlIG5vZGVzIHdpbGwgYmUgdGhlIHBhcmVudCBvZiBuZXcgZHVtbXkgY29tcG91bmRcblxuICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgY29tcG91bmQgd2l0aCBjYWxjdWxhdGVkIGlkXG4gICAgICB2YXIgZHVtbXlDb21wb3VuZCA9IG5ldyBDb1NFTm9kZShzZWxmLmdyYXBoTWFuYWdlcik7XG4gICAgICBkdW1teUNvbXBvdW5kLmlkID0gZHVtbXlDb21wb3VuZElkO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nTGVmdCA9IHBhcmVudC5wYWRkaW5nTGVmdCB8fCAwO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nUmlnaHQgPSBwYXJlbnQucGFkZGluZ1JpZ2h0IHx8IDA7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdCb3R0b20gPSBwYXJlbnQucGFkZGluZ0JvdHRvbSB8fCAwO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nVG9wID0gcGFyZW50LnBhZGRpbmdUb3AgfHwgMDtcblxuICAgICAgc2VsZi5pZFRvRHVtbXlOb2RlW2R1bW15Q29tcG91bmRJZF0gPSBkdW1teUNvbXBvdW5kO1xuXG4gICAgICB2YXIgZHVtbXlQYXJlbnRHcmFwaCA9IHNlbGYuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKHNlbGYubmV3R3JhcGgoKSwgZHVtbXlDb21wb3VuZCk7XG4gICAgICB2YXIgcGFyZW50R3JhcGggPSBwYXJlbnQuZ2V0Q2hpbGQoKTtcblxuICAgICAgLy8gQWRkIGR1bW15IGNvbXBvdW5kIHRvIHBhcmVudCB0aGUgZ3JhcGhcbiAgICAgIHBhcmVudEdyYXBoLmFkZChkdW1teUNvbXBvdW5kKTtcblxuICAgICAgLy8gRm9yIGVhY2ggemVybyBkZWdyZWUgbm9kZSBpbiB0aGlzIGxldmVsIHJlbW92ZSBpdCBmcm9tIGl0cyBwYXJlbnQgZ3JhcGggYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGggb2YgZHVtbXkgcGFyZW50XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXBNZW1iZXJHcm91cHNbcF9pZF0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdW2ldO1xuXG4gICAgICAgIHBhcmVudEdyYXBoLnJlbW92ZShub2RlKTtcbiAgICAgICAgZHVtbXlQYXJlbnRHcmFwaC5hZGQobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2hpbGRHcmFwaE1hcCA9IHt9O1xuICB2YXIgaWRUb05vZGUgPSB7fTtcblxuICAvLyBHZXQgY29tcG91bmQgb3JkZXJpbmcgYnkgZmluZGluZyB0aGUgaW5uZXIgb25lIGZpcnN0XG4gIHRoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoOyBpKyspIHtcblxuICAgIGlkVG9Ob2RlW3RoaXMuY29tcG91bmRPcmRlcltpXS5pZF0gPSB0aGlzLmNvbXBvdW5kT3JkZXJbaV07XG4gICAgY2hpbGRHcmFwaE1hcFt0aGlzLmNvbXBvdW5kT3JkZXJbaV0uaWRdID0gW10uY29uY2F0KHRoaXMuY29tcG91bmRPcmRlcltpXS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpO1xuXG4gICAgLy8gUmVtb3ZlIGNoaWxkcmVuIG9mIGNvbXBvdW5kc1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh0aGlzLmNvbXBvdW5kT3JkZXJbaV0uZ2V0Q2hpbGQoKSk7XG4gICAgdGhpcy5jb21wb3VuZE9yZGVyW2ldLmNoaWxkID0gbnVsbDtcbiAgfVxuXG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKTtcblxuICAvLyBUaWxlIHRoZSByZW1vdmVkIGNoaWxkcmVuXG4gIHRoaXMudGlsZUNvbXBvdW5kTWVtYmVycyhjaGlsZEdyYXBoTWFwLCBpZFRvTm9kZSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jbGVhclplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0aWxlZFplcm9EZWdyZWVQYWNrID0gdGhpcy50aWxlZFplcm9EZWdyZWVQYWNrID0gW107XG5cbiAgT2JqZWN0LmtleXModGhpcy5tZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGNvbXBvdW5kTm9kZSA9IHNlbGYuaWRUb0R1bW15Tm9kZVtpZF07IC8vIEdldCB0aGUgZHVtbXkgY29tcG91bmRcblxuICAgIHRpbGVkWmVyb0RlZ3JlZVBhY2tbaWRdID0gc2VsZi50aWxlTm9kZXMoc2VsZi5tZW1iZXJHcm91cHNbaWRdLCBjb21wb3VuZE5vZGUucGFkZGluZ0xlZnQgKyBjb21wb3VuZE5vZGUucGFkZGluZ1JpZ2h0KTtcblxuICAgIC8vIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZHVtbXkgY29tcG91bmQgYXMgY2FsY3VsYXRlZFxuICAgIGNvbXBvdW5kTm9kZS5yZWN0LndpZHRoID0gdGlsZWRaZXJvRGVncmVlUGFja1tpZF0ud2lkdGg7XG4gICAgY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0ID0gdGlsZWRaZXJvRGVncmVlUGFja1tpZF0uaGVpZ2h0O1xuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSB0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbENvbXBvdW5kTm9kZSA9IHRoaXMuY29tcG91bmRPcmRlcltpXTtcbiAgICB2YXIgaWQgPSBsQ29tcG91bmROb2RlLmlkO1xuICAgIHZhciBob3Jpem9udGFsTWFyZ2luID0gbENvbXBvdW5kTm9kZS5wYWRkaW5nTGVmdDtcbiAgICB2YXIgdmVydGljYWxNYXJnaW4gPSBsQ29tcG91bmROb2RlLnBhZGRpbmdUb3A7XG5cbiAgICB0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tpZF0sIGxDb21wb3VuZE5vZGUucmVjdC54LCBsQ29tcG91bmROb2RlLnJlY3QueSwgaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRpbGVkUGFjayA9IHRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztcblxuICBPYmplY3Qua2V5cyh0aWxlZFBhY2spLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGNvbXBvdW5kTm9kZSA9IHNlbGYuaWRUb0R1bW15Tm9kZVtpZF07IC8vIEdldCB0aGUgZHVtbXkgY29tcG91bmQgYnkgaXRzIGlkXG4gICAgdmFyIGhvcml6b250YWxNYXJnaW4gPSBjb21wb3VuZE5vZGUucGFkZGluZ0xlZnQ7XG4gICAgdmFyIHZlcnRpY2FsTWFyZ2luID0gY29tcG91bmROb2RlLnBhZGRpbmdUb3A7XG5cbiAgICAvLyBBZGp1c3QgdGhlIHBvc2l0aW9ucyBvZiBub2RlcyB3cnQgaXRzIGNvbXBvdW5kXG4gICAgc2VsZi5hZGp1c3RMb2NhdGlvbnModGlsZWRQYWNrW2lkXSwgY29tcG91bmROb2RlLnJlY3QueCwgY29tcG91bmROb2RlLnJlY3QueSwgaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pO1xuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFRvQmVUaWxlZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBpZCA9IG5vZGUuaWQ7XG4gIC8vZmlyc3RseSBjaGVjayB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICBpZiAodGhpcy50b0JlVGlsZWRbaWRdICE9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy50b0JlVGlsZWRbaWRdO1xuICB9XG5cbiAgLy9vbmx5IGNvbXBvdW5kIG5vZGVzIGFyZSB0byBiZSB0aWxlZFxuICB2YXIgY2hpbGRHcmFwaCA9IG5vZGUuZ2V0Q2hpbGQoKTtcbiAgaWYgKGNoaWxkR3JhcGggPT0gbnVsbCkge1xuICAgIHRoaXMudG9CZVRpbGVkW2lkXSA9IGZhbHNlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IGNoaWxkR3JhcGguZ2V0Tm9kZXMoKTsgLy8gR2V0IHRoZSBjaGlsZHJlbiBub2Rlc1xuXG4gIC8vYSBjb21wb3VuZCBub2RlIGlzIG5vdCB0byBiZSB0aWxlZCBpZiBhbGwgb2YgaXRzIGNvbXBvdW5kIGNoaWxkcmVuIGFyZSBub3QgdG8gYmUgdGlsZWRcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0aGVDaGlsZCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKHRoaXMuZ2V0Tm9kZURlZ3JlZSh0aGVDaGlsZCkgPiAwKSB7XG4gICAgICB0aGlzLnRvQmVUaWxlZFtpZF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL3Bhc3MgdGhlIGNoaWxkcmVuIG5vdCBoYXZpbmcgdGhlIGNvbXBvdW5kIHN0cnVjdHVyZVxuICAgIGlmICh0aGVDaGlsZC5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICAgIHRoaXMudG9CZVRpbGVkW3RoZUNoaWxkLmlkXSA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdldFRvQmVUaWxlZCh0aGVDaGlsZCkpIHtcbiAgICAgIHRoaXMudG9CZVRpbGVkW2lkXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB0aGlzLnRvQmVUaWxlZFtpZF0gPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIEdldCBkZWdyZWUgb2YgYSBub2RlIGRlcGVuZGluZyBvZiBpdHMgZWRnZXMgYW5kIGluZGVwZW5kZW50IG9mIGl0cyBjaGlsZHJlblxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBpZCA9IG5vZGUuaWQ7XG4gIHZhciBlZGdlcyA9IG5vZGUuZ2V0RWRnZXMoKTtcbiAgdmFyIGRlZ3JlZSA9IDA7XG5cbiAgLy8gRm9yIHRoZSBlZGdlcyBjb25uZWN0ZWRcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgaWYgKGVkZ2UuZ2V0U291cmNlKCkuaWQgIT09IGVkZ2UuZ2V0VGFyZ2V0KCkuaWQpIHtcbiAgICAgIGRlZ3JlZSA9IGRlZ3JlZSArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWdyZWU7XG59O1xuXG4vLyBHZXQgZGVncmVlIG9mIGEgbm9kZSB3aXRoIGl0cyBjaGlsZHJlblxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBkZWdyZWUgPSB0aGlzLmdldE5vZGVEZWdyZWUobm9kZSk7XG4gIGlmIChub2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgIHJldHVybiBkZWdyZWU7XG4gIH1cbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBkZWdyZWUgKz0gdGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKGNoaWxkKTtcbiAgfVxuICByZXR1cm4gZGVncmVlO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucGVyZm9ybURGU09uQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNvbXBvdW5kT3JkZXIgPSBbXTtcbiAgdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUyA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLmdldENoaWxkKCkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhjaGlsZC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRUb0JlVGlsZWQoY2hpbGQpKSB7XG4gICAgICB0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiogVGhpcyBtZXRob2QgcGxhY2VzIGVhY2ggemVybyBkZWdyZWUgbWVtYmVyIHdydCBnaXZlbiAoeCx5KSBjb29yZGluYXRlcyAodG9wIGxlZnQpLlxuKi9cbkNvU0VMYXlvdXQucHJvdG90eXBlLmFkanVzdExvY2F0aW9ucyA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24sIHgsIHksIGNvbXBvdW5kSG9yaXpvbnRhbE1hcmdpbiwgY29tcG91bmRWZXJ0aWNhbE1hcmdpbikge1xuICB4ICs9IGNvbXBvdW5kSG9yaXpvbnRhbE1hcmdpbjtcbiAgeSArPSBjb21wb3VuZFZlcnRpY2FsTWFyZ2luO1xuXG4gIHZhciBsZWZ0ID0geDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJvdyA9IG9yZ2FuaXphdGlvbi5yb3dzW2ldO1xuICAgIHggPSBsZWZ0O1xuICAgIHZhciBtYXhIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBsbm9kZSA9IHJvd1tqXTtcblxuICAgICAgbG5vZGUucmVjdC54ID0geDsgLy8gKyBsbm9kZS5yZWN0LndpZHRoIC8gMjtcbiAgICAgIGxub2RlLnJlY3QueSA9IHk7IC8vICsgbG5vZGUucmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgICB4ICs9IGxub2RlLnJlY3Qud2lkdGggKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmc7XG5cbiAgICAgIGlmIChsbm9kZS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gbG5vZGUucmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgeSArPSBtYXhIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzID0gZnVuY3Rpb24gKGNoaWxkR3JhcGhNYXAsIGlkVG9Ob2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy50aWxlZE1lbWJlclBhY2sgPSBbXTtcblxuICBPYmplY3Qua2V5cyhjaGlsZEdyYXBoTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIC8vIEdldCB0aGUgY29tcG91bmQgbm9kZVxuICAgIHZhciBjb21wb3VuZE5vZGUgPSBpZFRvTm9kZVtpZF07XG5cbiAgICBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0gPSBzZWxmLnRpbGVOb2RlcyhjaGlsZEdyYXBoTWFwW2lkXSwgY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0ICsgY29tcG91bmROb2RlLnBhZGRpbmdSaWdodCk7XG5cbiAgICBjb21wb3VuZE5vZGUucmVjdC53aWR0aCA9IHNlbGYudGlsZWRNZW1iZXJQYWNrW2lkXS53aWR0aDtcbiAgICBjb21wb3VuZE5vZGUucmVjdC5oZWlnaHQgPSBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0uaGVpZ2h0O1xuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnRpbGVOb2RlcyA9IGZ1bmN0aW9uIChub2RlcywgbWluV2lkdGgpIHtcbiAgdmFyIHZlcnRpY2FsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw7XG4gIHZhciBob3Jpem9udGFsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTDtcbiAgdmFyIG9yZ2FuaXphdGlvbiA9IHtcbiAgICByb3dzOiBbXSxcbiAgICByb3dXaWR0aDogW10sXG4gICAgcm93SGVpZ2h0OiBbXSxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IG1pbldpZHRoLCAvLyBhc3N1bWUgbWluSGVpZ2h0IGVxdWFscyB0byBtaW5XaWR0aFxuICAgIHZlcnRpY2FsUGFkZGluZzogdmVydGljYWxQYWRkaW5nLFxuICAgIGhvcml6b250YWxQYWRkaW5nOiBob3Jpem9udGFsUGFkZGluZ1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG5vZGVzIGluIGFzY2VuZGluZyBvcmRlciBvZiB0aGVpciBhcmVhc1xuICBub2Rlcy5zb3J0KGZ1bmN0aW9uIChuMSwgbjIpIHtcbiAgICBpZiAobjEucmVjdC53aWR0aCAqIG4xLnJlY3QuaGVpZ2h0ID4gbjIucmVjdC53aWR0aCAqIG4yLnJlY3QuaGVpZ2h0KSByZXR1cm4gLTE7XG4gICAgaWYgKG4xLnJlY3Qud2lkdGggKiBuMS5yZWN0LmhlaWdodCA8IG4yLnJlY3Qud2lkdGggKiBuMi5yZWN0LmhlaWdodCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIC8vIENyZWF0ZSB0aGUgb3JnYW5pemF0aW9uIC0+IHRpbGUgbWVtYmVyc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZVRvUm93KG9yZ2FuaXphdGlvbiwgbE5vZGUsIDAsIG1pbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FuQWRkSG9yaXpvbnRhbChvcmdhbml6YXRpb24sIGxOb2RlLnJlY3Qud2lkdGgsIGxOb2RlLnJlY3QuaGVpZ2h0KSkge1xuICAgICAgdGhpcy5pbnNlcnROb2RlVG9Sb3cob3JnYW5pemF0aW9uLCBsTm9kZSwgdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KG9yZ2FuaXphdGlvbiksIG1pbldpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnNlcnROb2RlVG9Sb3cob3JnYW5pemF0aW9uLCBsTm9kZSwgb3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoLCBtaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaGlmdFRvTGFzdFJvdyhvcmdhbml6YXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuaXphdGlvbjtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmluc2VydE5vZGVUb1JvdyA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24sIG5vZGUsIHJvd0luZGV4LCBtaW5XaWR0aCkge1xuICB2YXIgbWluQ29tcG91bmRTaXplID0gbWluV2lkdGg7XG5cbiAgLy8gQWRkIG5ldyByb3cgaWYgbmVlZGVkXG4gIGlmIChyb3dJbmRleCA9PSBvcmdhbml6YXRpb24ucm93cy5sZW5ndGgpIHtcbiAgICB2YXIgc2Vjb25kRGltZW5zaW9uID0gW107XG5cbiAgICBvcmdhbml6YXRpb24ucm93cy5wdXNoKHNlY29uZERpbWVuc2lvbik7XG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoLnB1c2gobWluQ29tcG91bmRTaXplKTtcbiAgICBvcmdhbml6YXRpb24ucm93SGVpZ2h0LnB1c2goMCk7XG4gIH1cblxuICAvLyBVcGRhdGUgcm93IHdpZHRoXG4gIHZhciB3ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW3Jvd0luZGV4XSArIG5vZGUucmVjdC53aWR0aDtcblxuICBpZiAob3JnYW5pemF0aW9uLnJvd3Nbcm93SW5kZXhdLmxlbmd0aCA+IDApIHtcbiAgICB3ICs9IG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZztcbiAgfVxuXG4gIG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtyb3dJbmRleF0gPSB3O1xuICAvLyBVcGRhdGUgY29tcG91bmQgd2lkdGhcbiAgaWYgKG9yZ2FuaXphdGlvbi53aWR0aCA8IHcpIHtcbiAgICBvcmdhbml6YXRpb24ud2lkdGggPSB3O1xuICB9XG5cbiAgLy8gVXBkYXRlIGhlaWdodFxuICB2YXIgaCA9IG5vZGUucmVjdC5oZWlnaHQ7XG4gIGlmIChyb3dJbmRleCA+IDApIGggKz0gb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICB2YXIgZXh0cmFIZWlnaHQgPSAwO1xuICBpZiAoaCA+IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdKSB7XG4gICAgZXh0cmFIZWlnaHQgPSBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XTtcbiAgICBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XSA9IGg7XG4gICAgZXh0cmFIZWlnaHQgPSBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XSAtIGV4dHJhSGVpZ2h0O1xuICB9XG5cbiAgb3JnYW5pemF0aW9uLmhlaWdodCArPSBleHRyYUhlaWdodDtcblxuICAvLyBJbnNlcnQgbm9kZVxuICBvcmdhbml6YXRpb24ucm93c1tyb3dJbmRleF0ucHVzaChub2RlKTtcbn07XG5cbi8vU2NhbnMgdGhlIHJvd3Mgb2YgYW4gb3JnYW5pemF0aW9uIGFuZCByZXR1cm5zIHRoZSBvbmUgd2l0aCB0aGUgbWluIHdpZHRoXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgciA9IC0xO1xuICB2YXIgbWluID0gTnVtYmVyLk1BWF9WQUxVRTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXSA8IG1pbikge1xuICAgICAgciA9IGk7XG4gICAgICBtaW4gPSBvcmdhbml6YXRpb24ucm93V2lkdGhbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufTtcblxuLy9TY2FucyB0aGUgcm93cyBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHJldHVybnMgdGhlIG9uZSB3aXRoIHRoZSBtYXggd2lkdGhcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleCA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24pIHtcbiAgdmFyIHIgPSAtMTtcbiAgdmFyIG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmdhbml6YXRpb24ucm93cy5sZW5ndGg7IGkrKykge1xuXG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXSA+IG1heCkge1xuICAgICAgciA9IGk7XG4gICAgICBtYXggPSBvcmdhbml6YXRpb24ucm93V2lkdGhbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHI7XG59O1xuXG4vKipcbiogVGhpcyBtZXRob2QgY2hlY2tzIHdoZXRoZXIgYWRkaW5nIGV4dHJhIHdpZHRoIHRvIHRoZSBvcmdhbml6YXRpb24gdmlvbGF0ZXNcbiogdGhlIGFzcGVjdCByYXRpbygxKSBvciBub3QuXG4qL1xuQ29TRUxheW91dC5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24sIGV4dHJhV2lkdGgsIGV4dHJhSGVpZ2h0KSB7XG5cbiAgdmFyIHNyaSA9IHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChvcmdhbml6YXRpb24pO1xuXG4gIGlmIChzcmkgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbWluID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW3NyaV07XG5cbiAgaWYgKG1pbiArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZyArIGV4dHJhV2lkdGggPD0gb3JnYW5pemF0aW9uLndpZHRoKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgaERpZmYgPSAwO1xuXG4gIC8vIEFkZGluZyB0byBhbiBleGlzdGluZyByb3dcbiAgaWYgKG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbc3JpXSA8IGV4dHJhSGVpZ2h0KSB7XG4gICAgaWYgKHNyaSA+IDApIGhEaWZmID0gZXh0cmFIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nIC0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtzcmldO1xuICB9XG5cbiAgdmFyIGFkZF90b19yb3dfcmF0aW87XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBtaW4gPj0gZXh0cmFXaWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZykge1xuICAgIGFkZF90b19yb3dfcmF0aW8gPSAob3JnYW5pemF0aW9uLmhlaWdodCArIGhEaWZmKSAvIChtaW4gKyBleHRyYVdpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRfdG9fcm93X3JhdGlvID0gKG9yZ2FuaXphdGlvbi5oZWlnaHQgKyBoRGlmZikgLyBvcmdhbml6YXRpb24ud2lkdGg7XG4gIH1cblxuICAvLyBBZGRpbmcgYSBuZXcgcm93IGZvciB0aGlzIG5vZGVcbiAgaERpZmYgPSBleHRyYUhlaWdodCArIG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmc7XG4gIHZhciBhZGRfbmV3X3Jvd19yYXRpbztcbiAgaWYgKG9yZ2FuaXphdGlvbi53aWR0aCA8IGV4dHJhV2lkdGgpIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gZXh0cmFXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gb3JnYW5pemF0aW9uLndpZHRoO1xuICB9XG5cbiAgaWYgKGFkZF9uZXdfcm93X3JhdGlvIDwgMSkgYWRkX25ld19yb3dfcmF0aW8gPSAxIC8gYWRkX25ld19yb3dfcmF0aW87XG5cbiAgaWYgKGFkZF90b19yb3dfcmF0aW8gPCAxKSBhZGRfdG9fcm93X3JhdGlvID0gMSAvIGFkZF90b19yb3dfcmF0aW87XG5cbiAgcmV0dXJuIGFkZF90b19yb3dfcmF0aW8gPCBhZGRfbmV3X3Jvd19yYXRpbztcbn07XG5cbi8vSWYgbW92aW5nIHRoZSBsYXN0IG5vZGUgZnJvbSB0aGUgbG9uZ2VzdCByb3cgYW5kIGFkZGluZyBpdCB0byB0aGUgbGFzdFxuLy9yb3cgbWFrZXMgdGhlIGJvdW5kaW5nIGJveCBzbWFsbGVyLCBkbyBpdC5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgbG9uZ2VzdCA9IHRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KG9yZ2FuaXphdGlvbik7XG4gIHZhciBsYXN0ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoLmxlbmd0aCAtIDE7XG4gIHZhciByb3cgPSBvcmdhbml6YXRpb24ucm93c1tsb25nZXN0XTtcbiAgdmFyIG5vZGUgPSByb3dbcm93Lmxlbmd0aCAtIDFdO1xuXG4gIHZhciBkaWZmID0gbm9kZS53aWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZztcblxuICAvLyBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2Ugb24gdGhlIGxhc3Qgcm93XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPiBkaWZmICYmIGxvbmdlc3QgIT0gbGFzdCkge1xuICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsb25nZXN0IHJvd1xuICAgIHJvdy5zcGxpY2UoLTEsIDEpO1xuXG4gICAgLy8gUHVzaCBpdCB0byB0aGUgbGFzdCByb3dcbiAgICBvcmdhbml6YXRpb24ucm93c1tsYXN0XS5wdXNoKG5vZGUpO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdIC0gZGlmZjtcbiAgICBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gKyBkaWZmO1xuICAgIG9yZ2FuaXphdGlvbi53aWR0aCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgob3JnYW5pemF0aW9uKV07XG5cbiAgICAvLyBVcGRhdGUgaGVpZ2h0cyBvZiB0aGUgb3JnYW5pemF0aW9uXG4gICAgdmFyIG1heEhlaWdodCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dbaV0uaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSByb3dbaV0uaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAobG9uZ2VzdCA+IDApIG1heEhlaWdodCArPSBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuXG4gICAgdmFyIHByZXZUb3RhbCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbG9uZ2VzdF0gKyBvcmdhbml6YXRpb24ucm93SGVpZ2h0W2xhc3RdO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSA9IG1heEhlaWdodDtcbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA8IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZykgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA9IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICAgIHZhciBmaW5hbFRvdGFsID0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSArIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbGFzdF07XG4gICAgb3JnYW5pemF0aW9uLmhlaWdodCArPSBmaW5hbFRvdGFsIC0gcHJldlRvdGFsO1xuXG4gICAgdGhpcy5zaGlmdFRvTGFzdFJvdyhvcmdhbml6YXRpb24pO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChDb1NFQ29uc3RhbnRzLlRJTEUpIHtcbiAgICAvLyBGaW5kIHplcm8gZGVncmVlIG5vZGVzIGFuZCBjcmVhdGUgYSBjb21wb3VuZCBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpO1xuICAgIC8vIFRpbGUgYW5kIGNsZWFyIGNoaWxkcmVuIG9mIGVhY2ggY29tcG91bmRcbiAgICB0aGlzLmNsZWFyQ29tcG91bmRzKCk7XG4gICAgLy8gU2VwYXJhdGVseSB0aWxlIGFuZCBjbGVhciB6ZXJvIGRlZ3JlZSBub2RlcyBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoQ29TRUNvbnN0YW50cy5USUxFKSB7XG4gICAgdGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKTtcbiAgICB0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IFRyZWUgUmVkdWN0aW9uIG1ldGhvZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWR1Y2UgdHJlZXMgXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZWR1Y2VUcmVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBydW5lZE5vZGVzQWxsID0gW107XG4gIHZhciBjb250YWluc0xlYWYgPSB0cnVlO1xuICB2YXIgbm9kZTtcblxuICB3aGlsZSAoY29udGFpbnNMZWFmKSB7XG4gICAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcbiAgICB2YXIgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wID0gW107XG4gICAgY29udGFpbnNMZWFmID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5nZXRFZGdlcygpLmxlbmd0aCA9PSAxICYmICFub2RlLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoICYmIG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcC5wdXNoKFtub2RlLCBub2RlLmdldEVkZ2VzKClbMF0sIG5vZGUuZ2V0T3duZXIoKV0pO1xuICAgICAgICBjb250YWluc0xlYWYgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGFpbnNMZWFmID09IHRydWUpIHtcbiAgICAgIHZhciBwcnVuZWROb2Rlc0luU3RlcCA9IFtdO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcnVuZWROb2Rlc0luU3RlcFRlbXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXVswXS5nZXRFZGdlcygpLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgcHJ1bmVkTm9kZXNJblN0ZXAucHVzaChwcnVuZWROb2Rlc0luU3RlcFRlbXBbal0pO1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXVswXS5nZXRPd25lcigpLnJlbW92ZShwcnVuZWROb2Rlc0luU3RlcFRlbXBbal1bMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcnVuZWROb2Rlc0FsbC5wdXNoKHBydW5lZE5vZGVzSW5TdGVwKTtcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKTtcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5wcnVuZWROb2Rlc0FsbCA9IHBydW5lZE5vZGVzQWxsO1xufTtcblxuLy8gR3JvdyB0cmVlIG9uZSBzdGVwIFxuQ29TRUxheW91dC5wcm90b3R5cGUuZ3Jvd1RyZWUgPSBmdW5jdGlvbiAocHJ1bmVkTm9kZXNBbGwpIHtcbiAgdmFyIGxlbmd0aE9mUHJ1bmVkTm9kZXNJblN0ZXAgPSBwcnVuZWROb2Rlc0FsbC5sZW5ndGg7XG4gIHZhciBwcnVuZWROb2Rlc0luU3RlcCA9IHBydW5lZE5vZGVzQWxsW2xlbmd0aE9mUHJ1bmVkTm9kZXNJblN0ZXAgLSAxXTtcblxuICB2YXIgbm9kZURhdGE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJ1bmVkTm9kZXNJblN0ZXAubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlRGF0YSA9IHBydW5lZE5vZGVzSW5TdGVwW2ldO1xuXG4gICAgdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKG5vZGVEYXRhKTtcblxuICAgIG5vZGVEYXRhWzJdLmFkZChub2RlRGF0YVswXSk7XG4gICAgbm9kZURhdGFbMl0uYWRkKG5vZGVEYXRhWzFdLCBub2RlRGF0YVsxXS5zb3VyY2UsIG5vZGVEYXRhWzFdLnRhcmdldCk7XG4gIH1cblxuICBwcnVuZWROb2Rlc0FsbC5zcGxpY2UocHJ1bmVkTm9kZXNBbGwubGVuZ3RoIC0gMSwgMSk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpO1xufTtcblxuLy8gRmluZCBhbiBhcHByb3ByaWF0ZSBwb3NpdGlvbiB0byByZXBsYWNlIHBydW5lZCBub2RlLCB0aGlzIG1ldGhvZCBjYW4gYmUgaW1wcm92ZWRcbkNvU0VMYXlvdXQucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGUgPSBmdW5jdGlvbiAobm9kZURhdGEpIHtcblxuICB2YXIgZ3JpZEZvclBydW5lZE5vZGU7XG4gIHZhciBub2RlVG9Db25uZWN0O1xuICB2YXIgcHJ1bmVkTm9kZSA9IG5vZGVEYXRhWzBdO1xuICBpZiAocHJ1bmVkTm9kZSA9PSBub2RlRGF0YVsxXS5zb3VyY2UpIHtcbiAgICBub2RlVG9Db25uZWN0ID0gbm9kZURhdGFbMV0udGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIG5vZGVUb0Nvbm5lY3QgPSBub2RlRGF0YVsxXS5zb3VyY2U7XG4gIH1cbiAgdmFyIHN0YXJ0R3JpZFggPSBub2RlVG9Db25uZWN0LnN0YXJ0WDtcbiAgdmFyIGZpbmlzaEdyaWRYID0gbm9kZVRvQ29ubmVjdC5maW5pc2hYO1xuICB2YXIgc3RhcnRHcmlkWSA9IG5vZGVUb0Nvbm5lY3Quc3RhcnRZO1xuICB2YXIgZmluaXNoR3JpZFkgPSBub2RlVG9Db25uZWN0LmZpbmlzaFk7XG5cbiAgdmFyIHVwTm9kZUNvdW50ID0gMDtcbiAgdmFyIGRvd25Ob2RlQ291bnQgPSAwO1xuICB2YXIgcmlnaHROb2RlQ291bnQgPSAwO1xuICB2YXIgbGVmdE5vZGVDb3VudCA9IDA7XG4gIHZhciBjb250cm9sUmVnaW9ucyA9IFt1cE5vZGVDb3VudCwgcmlnaHROb2RlQ291bnQsIGRvd25Ob2RlQ291bnQsIGxlZnROb2RlQ291bnRdO1xuXG4gIGlmIChzdGFydEdyaWRZID4gMCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRYOyBpIDw9IGZpbmlzaEdyaWRYOyBpKyspIHtcbiAgICAgIGNvbnRyb2xSZWdpb25zWzBdICs9IHRoaXMuZ3JpZFtpXVtzdGFydEdyaWRZIC0gMV0ubGVuZ3RoICsgdGhpcy5ncmlkW2ldW3N0YXJ0R3JpZFldLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG4gIGlmIChmaW5pc2hHcmlkWCA8IHRoaXMuZ3JpZC5sZW5ndGggLSAxKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFk7IGkgPD0gZmluaXNoR3JpZFk7IGkrKykge1xuICAgICAgY29udHJvbFJlZ2lvbnNbMV0gKz0gdGhpcy5ncmlkW2ZpbmlzaEdyaWRYICsgMV1baV0ubGVuZ3RoICsgdGhpcy5ncmlkW2ZpbmlzaEdyaWRYXVtpXS5sZW5ndGggLSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZmluaXNoR3JpZFkgPCB0aGlzLmdyaWRbMF0ubGVuZ3RoIC0gMSkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRYOyBpIDw9IGZpbmlzaEdyaWRYOyBpKyspIHtcbiAgICAgIGNvbnRyb2xSZWdpb25zWzJdICs9IHRoaXMuZ3JpZFtpXVtmaW5pc2hHcmlkWSArIDFdLmxlbmd0aCArIHRoaXMuZ3JpZFtpXVtmaW5pc2hHcmlkWV0ubGVuZ3RoIC0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXJ0R3JpZFggPiAwKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFk7IGkgPD0gZmluaXNoR3JpZFk7IGkrKykge1xuICAgICAgY29udHJvbFJlZ2lvbnNbM10gKz0gdGhpcy5ncmlkW3N0YXJ0R3JpZFggLSAxXVtpXS5sZW5ndGggKyB0aGlzLmdyaWRbc3RhcnRHcmlkWF1baV0ubGVuZ3RoIC0gMTtcbiAgICB9XG4gIH1cbiAgdmFyIG1pbiA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbWluQ291bnQ7XG4gIHZhciBtaW5JbmRleDtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBjb250cm9sUmVnaW9ucy5sZW5ndGg7IGorKykge1xuICAgIGlmIChjb250cm9sUmVnaW9uc1tqXSA8IG1pbikge1xuICAgICAgbWluID0gY29udHJvbFJlZ2lvbnNbal07XG4gICAgICBtaW5Db3VudCA9IDE7XG4gICAgICBtaW5JbmRleCA9IGo7XG4gICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1tqXSA9PSBtaW4pIHtcbiAgICAgIG1pbkNvdW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1pbkNvdW50ID09IDMgJiYgbWluID09IDApIHtcbiAgICBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1sxXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzJdID09IDApIHtcbiAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzJdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzNdID09IDApIHtcbiAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWluQ291bnQgPT0gMiAmJiBtaW4gPT0gMCkge1xuICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKTtcbiAgICBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1sxXSA9PSAwKSB7XG4gICAgICA7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChtaW5Db3VudCA9PSA0ICYmIG1pbiA9PSAwKSB7XG4gICAgdmFyIHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDQpO1xuICAgIGdyaWRGb3JQcnVuZWROb2RlID0gcmFuZG9tO1xuICB9IGVsc2Uge1xuICAgIGdyaWRGb3JQcnVuZWROb2RlID0gbWluSW5kZXg7XG4gIH1cblxuICBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMCkge1xuICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSAtIG5vZGVUb0Nvbm5lY3QuZ2V0SGVpZ2h0KCkgLyAyIC0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAtIHBydW5lZE5vZGUuZ2V0SGVpZ2h0KCkgLyAyKTtcbiAgfSBlbHNlIGlmIChncmlkRm9yUHJ1bmVkTm9kZSA9PSAxKSB7XG4gICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCkgKyBub2RlVG9Db25uZWN0LmdldFdpZHRoKCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0V2lkdGgoKSAvIDIsIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpKTtcbiAgfSBlbHNlIGlmIChncmlkRm9yUHJ1bmVkTm9kZSA9PSAyKSB7XG4gICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCksIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpICsgbm9kZVRvQ29ubmVjdC5nZXRIZWlnaHQoKSAvIDIgKyBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIICsgcHJ1bmVkTm9kZS5nZXRIZWlnaHQoKSAvIDIpO1xuICB9IGVsc2Uge1xuICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpIC0gbm9kZVRvQ29ubmVjdC5nZXRXaWR0aCgpIC8gMiAtIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLSBwcnVuZWROb2RlLmdldFdpZHRoKCkgLyAyLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUxheW91dDtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjb3NlQmFzZSA9IHt9O1xuXG5jb3NlQmFzZS5sYXlvdXRCYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbmNvc2VCYXNlLkNvU0VDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuY29zZUJhc2UuQ29TRUVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuY29zZUJhc2UuQ29TRUdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbmNvc2VCYXNlLkNvU0VHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuY29zZUJhc2UuQ29TRUxheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5jb3NlQmFzZS5Db1NFTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29zZUJhc2U7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pOyIsCiAgICAiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiY29zZS1iYXNlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImNvc2UtYmFzZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjeXRvc2NhcGVDb3NlQmlsa2VudFwiXSA9IGZhY3RvcnkocmVxdWlyZShcImNvc2UtYmFzZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiY3l0b3NjYXBlQ29zZUJpbGtlbnRcIl0gPSBmYWN0b3J5KHJvb3RbXCJjb3NlQmFzZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCkubGF5b3V0QmFzZS5MYXlvdXRDb25zdGFudHM7XG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuRkRMYXlvdXRDb25zdGFudHM7XG52YXIgQ29TRUNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuQ29TRUNvbnN0YW50cztcbnZhciBDb1NFTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Db1NFTGF5b3V0O1xudmFyIENvU0VOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Db1NFTm9kZTtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuUG9pbnREO1xudmFyIERpbWVuc2lvbkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuRGltZW5zaW9uRDtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvLyBDYWxsZWQgb24gYGxheW91dHJlYWR5YFxuICByZWFkeTogZnVuY3Rpb24gcmVhZHkoKSB7fSxcbiAgLy8gQ2FsbGVkIG9uIGBsYXlvdXRzdG9wYFxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30sXG4gIC8vICdkcmFmdCcsICdkZWZhdWx0JyBvciAncHJvb2ZcIiBcbiAgLy8gLSAnZHJhZnQnIGZhc3QgY29vbGluZyByYXRlIFxuICAvLyAtICdkZWZhdWx0JyBtb2RlcmF0ZSBjb29saW5nIHJhdGUgXG4gIC8vIC0gXCJwcm9vZlwiIHNsb3cgY29vbGluZyByYXRlXG4gIHF1YWxpdHk6ICdkZWZhdWx0JyxcbiAgLy8gaW5jbHVkZSBsYWJlbHMgaW4gbm9kZSBkaW1lbnNpb25zXG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gIC8vIG51bWJlciBvZiB0aWNrcyBwZXIgZnJhbWU7IGhpZ2hlciBpcyBmYXN0ZXIgYnV0IG1vcmUgamVya3lcbiAgcmVmcmVzaDogMzAsXG4gIC8vIFdoZXRoZXIgdG8gZml0IHRoZSBuZXR3b3JrIHZpZXcgYWZ0ZXIgd2hlbiBkb25lXG4gIGZpdDogdHJ1ZSxcbiAgLy8gUGFkZGluZyBvbiBmaXRcbiAgcGFkZGluZzogMTAsXG4gIC8vIFdoZXRoZXIgdG8gZW5hYmxlIGluY3JlbWVudGFsIG1vZGVcbiAgcmFuZG9taXplOiB0cnVlLFxuICAvLyBOb2RlIHJlcHVsc2lvbiAobm9uIG92ZXJsYXBwaW5nKSBtdWx0aXBsaWVyXG4gIG5vZGVSZXB1bHNpb246IDQ1MDAsXG4gIC8vIElkZWFsIGVkZ2UgKG5vbiBuZXN0ZWQpIGxlbmd0aFxuICBpZGVhbEVkZ2VMZW5ndGg6IDUwLFxuICAvLyBEaXZpc29yIHRvIGNvbXB1dGUgZWRnZSBmb3JjZXNcbiAgZWRnZUVsYXN0aWNpdHk6IDAuNDUsXG4gIC8vIE5lc3RpbmcgZmFjdG9yIChtdWx0aXBsaWVyKSB0byBjb21wdXRlIGlkZWFsIGVkZ2UgbGVuZ3RoIGZvciBuZXN0ZWQgZWRnZXNcbiAgbmVzdGluZ0ZhY3RvcjogMC4xLFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudClcbiAgZ3Jhdml0eTogMC4yNSxcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtXG4gIG51bUl0ZXI6IDI1MDAsXG4gIC8vIEZvciBlbmFibGluZyB0aWxpbmdcbiAgdGlsZTogdHJ1ZSxcbiAgLy8gVHlwZSBvZiBsYXlvdXQgYW5pbWF0aW9uLiBUaGUgb3B0aW9uIHNldCBpcyB7J2R1cmluZycsICdlbmQnLCBmYWxzZX1cbiAgYW5pbWF0ZTogJ2VuZCcsXG4gIC8vIER1cmF0aW9uIGZvciBhbmltYXRlOmVuZFxuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBSZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgdGhlIHZlcnRpY2FsIHNwYWNlIHRvIHB1dCBiZXR3ZWVuIHRoZSB6ZXJvIGRlZ3JlZSBtZW1iZXJzIGR1cmluZyB0aGUgdGlsaW5nIG9wZXJhdGlvbihjYW4gYWxzbyBiZSBhIGZ1bmN0aW9uKVxuICB0aWxpbmdQYWRkaW5nVmVydGljYWw6IDEwLFxuICAvLyBSZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgdGhlIGhvcml6b250YWwgc3BhY2UgdG8gcHV0IGJldHdlZW4gdGhlIHplcm8gZGVncmVlIG1lbWJlcnMgZHVyaW5nIHRoZSB0aWxpbmcgb3BlcmF0aW9uKGNhbiBhbHNvIGJlIGEgZnVuY3Rpb24pXG4gIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgLy8gR3Jhdml0eSByYW5nZSAoY29uc3RhbnQpIGZvciBjb21wb3VuZHNcbiAgZ3Jhdml0eVJhbmdlQ29tcG91bmQ6IDEuNSxcbiAgLy8gR3Jhdml0eSBmb3JjZSAoY29uc3RhbnQpIGZvciBjb21wb3VuZHNcbiAgZ3Jhdml0eUNvbXBvdW5kOiAxLjAsXG4gIC8vIEdyYXZpdHkgcmFuZ2UgKGNvbnN0YW50KVxuICBncmF2aXR5UmFuZ2U6IDMuOCxcbiAgLy8gSW5pdGlhbCBjb29saW5nIGZhY3RvciBmb3IgaW5jcmVtZW50YWwgbGF5b3V0XG4gIGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOiAwLjVcbn07XG5cbmZ1bmN0aW9uIGV4dGVuZChkZWZhdWx0cywgb3B0aW9ucykge1xuICB2YXIgb2JqID0ge307XG5cbiAgZm9yICh2YXIgaSBpbiBkZWZhdWx0cykge1xuICAgIG9ialtpXSA9IGRlZmF1bHRzW2ldO1xuICB9XG5cbiAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgb2JqW2ldID0gb3B0aW9uc1tpXTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5mdW5jdGlvbiBfQ29TRUxheW91dChfb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoZGVmYXVsdHMsIF9vcHRpb25zKTtcbiAgZ2V0VXNlck9wdGlvbnModGhpcy5vcHRpb25zKTtcbn1cblxudmFyIGdldFVzZXJPcHRpb25zID0gZnVuY3Rpb24gZ2V0VXNlck9wdGlvbnMob3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5ub2RlUmVwdWxzaW9uICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCA9IG9wdGlvbnMubm9kZVJlcHVsc2lvbjtcbiAgaWYgKG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aDtcbiAgaWYgKG9wdGlvbnMuZWRnZUVsYXN0aWNpdHkgIT0gbnVsbCkgQ29TRUNvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIID0gb3B0aW9ucy5lZGdlRWxhc3RpY2l0eTtcbiAgaWYgKG9wdGlvbnMubmVzdGluZ0ZhY3RvciAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgPSBGRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gb3B0aW9ucy5uZXN0aW5nRmFjdG9yO1xuICBpZiAob3B0aW9ucy5ncmF2aXR5ICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5O1xuICBpZiAob3B0aW9ucy5udW1JdGVyICE9IG51bGwpIENvU0VDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSBGRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUyA9IG9wdGlvbnMubnVtSXRlcjtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eVJhbmdlICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZTtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5Q29tcG91bmQ7XG4gIGlmIChvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kO1xuICBpZiAob3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gb3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDtcblxuICBpZiAob3B0aW9ucy5xdWFsaXR5ID09ICdkcmFmdCcpIExheW91dENvbnN0YW50cy5RVUFMSVRZID0gMDtlbHNlIGlmIChvcHRpb25zLnF1YWxpdHkgPT0gJ3Byb29mJykgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAyO2Vsc2UgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAxO1xuXG4gIENvU0VDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gRkRMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gTGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IG9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzO1xuICBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSAhb3B0aW9ucy5yYW5kb21pemU7XG4gIENvU0VDb25zdGFudHMuQU5JTUFURSA9IEZETGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPSBMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9IG9wdGlvbnMuYW5pbWF0ZTtcbiAgQ29TRUNvbnN0YW50cy5USUxFID0gb3B0aW9ucy50aWxlO1xuICBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMID0gdHlwZW9mIG9wdGlvbnMudGlsaW5nUGFkZGluZ1ZlcnRpY2FsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpIDogb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gIENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCA9IHR5cGVvZiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCkgOiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsO1xufTtcblxuX0NvU0VMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlYWR5O1xuICB2YXIgZnJhbWVJZDtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBpZFRvTE5vZGUgPSB0aGlzLmlkVG9MTm9kZSA9IHt9O1xuICB2YXIgbGF5b3V0ID0gdGhpcy5sYXlvdXQgPSBuZXcgQ29TRUxheW91dCgpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5zdG9wcGVkID0gZmFsc2U7XG5cbiAgdGhpcy5jeSA9IHRoaXMub3B0aW9ucy5jeTtcblxuICB0aGlzLmN5LnRyaWdnZXIoeyB0eXBlOiAnbGF5b3V0c3RhcnQnLCBsYXlvdXQ6IHRoaXMgfSk7XG5cbiAgdmFyIGdtID0gbGF5b3V0Lm5ld0dyYXBoTWFuYWdlcigpO1xuICB0aGlzLmdtID0gZ207XG5cbiAgdmFyIG5vZGVzID0gdGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKTtcbiAgdmFyIGVkZ2VzID0gdGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKTtcblxuICB0aGlzLnJvb3QgPSBnbS5hZGRSb290KCk7XG4gIHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsIHRoaXMuZ2V0VG9wTW9zdE5vZGVzKG5vZGVzKSwgbGF5b3V0KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICB2YXIgc291cmNlTm9kZSA9IHRoaXMuaWRUb0xOb2RlW2VkZ2UuZGF0YShcInNvdXJjZVwiKV07XG4gICAgdmFyIHRhcmdldE5vZGUgPSB0aGlzLmlkVG9MTm9kZVtlZGdlLmRhdGEoXCJ0YXJnZXRcIildO1xuICAgIGlmIChzb3VyY2VOb2RlICE9PSB0YXJnZXROb2RlICYmIHNvdXJjZU5vZGUuZ2V0RWRnZXNCZXR3ZWVuKHRhcmdldE5vZGUpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB2YXIgZTEgPSBnbS5hZGQobGF5b3V0Lm5ld0VkZ2UoKSwgc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICBlMS5pZCA9IGVkZ2UuaWQoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gZ2V0UG9zaXRpb25zKGVsZSwgaSkge1xuICAgIGlmICh0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBlbGUgPSBpO1xuICAgIH1cbiAgICB2YXIgdGhlSWQgPSBlbGUuZGF0YSgnaWQnKTtcbiAgICB2YXIgbE5vZGUgPSBzZWxmLmlkVG9MTm9kZVt0aGVJZF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogbE5vZGUuZ2V0UmVjdCgpLmdldENlbnRlclgoKSxcbiAgICAgIHk6IGxOb2RlLmdldFJlY3QoKS5nZXRDZW50ZXJZKClcbiAgICB9O1xuICB9O1xuXG4gIC8qXG4gICAqIFJlcG9zaXRpb24gbm9kZXMgaW4gaXRlcmF0aW9ucyBhbmltYXRlZGx5XG4gICAqL1xuICB2YXIgaXRlcmF0ZUFuaW1hdGVkID0gZnVuY3Rpb24gaXRlcmF0ZUFuaW1hdGVkKCkge1xuICAgIC8vIFRoaWdzIHRvIHBlcmZvcm0gYWZ0ZXIgbm9kZXMgYXJlIHJlcG9zaXRpb25lZCBvbiBzY3JlZW5cbiAgICB2YXIgYWZ0ZXJSZXBvc2l0aW9uID0gZnVuY3Rpb24gYWZ0ZXJSZXBvc2l0aW9uKCkge1xuICAgICAgaWYgKG9wdGlvbnMuZml0KSB7XG4gICAgICAgIG9wdGlvbnMuY3kuZml0KG9wdGlvbnMuZWxlcywgb3B0aW9ucy5wYWRkaW5nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZWFkeSkge1xuICAgICAgICByZWFkeSA9IHRydWU7XG4gICAgICAgIHNlbGYuY3kub25lKCdsYXlvdXRyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgICAgICBzZWxmLmN5LnRyaWdnZXIoeyB0eXBlOiAnbGF5b3V0cmVhZHknLCBsYXlvdXQ6IHNlbGYgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB0aWNrc1BlckZyYW1lID0gc2VsZi5vcHRpb25zLnJlZnJlc2g7XG4gICAgdmFyIGlzRG9uZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlja3NQZXJGcmFtZSAmJiAhaXNEb25lOyBpKyspIHtcbiAgICAgIGlzRG9uZSA9IHNlbGYuc3RvcHBlZCB8fCBzZWxmLmxheW91dC50aWNrKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbGF5b3V0IGlzIGRvbmVcbiAgICBpZiAoaXNEb25lKSB7XG4gICAgICAvLyBJZiB0aGUgbGF5b3V0IGlzIG5vdCBhIHN1YmxheW91dCBhbmQgaXQgaXMgc3VjY2Vzc2Z1bCBwZXJmb3JtIHBvc3QgbGF5b3V0LlxuICAgICAgaWYgKGxheW91dC5jaGVja0xheW91dFN1Y2Nlc3MoKSAmJiAhbGF5b3V0LmlzU3ViTGF5b3V0KSB7XG4gICAgICAgIGxheW91dC5kb1Bvc3RMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbGF5b3V0IGhhcyBhIHRpbGluZ1Bvc3RMYXlvdXQgZnVuY3Rpb24gcHJvcGVydHkgY2FsbCBpdC5cbiAgICAgIGlmIChsYXlvdXQudGlsaW5nUG9zdExheW91dCkge1xuICAgICAgICBsYXlvdXQudGlsaW5nUG9zdExheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBsYXlvdXQuaXNMYXlvdXRGaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgIHNlbGYub3B0aW9ucy5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGdldFBvc2l0aW9ucyk7XG5cbiAgICAgIGFmdGVyUmVwb3NpdGlvbigpO1xuXG4gICAgICAvLyB0cmlnZ2VyIGxheW91dHN0b3Agd2hlbiB0aGUgbGF5b3V0IHN0b3BzIChlLmcuIGZpbmlzaGVzKVxuICAgICAgc2VsZi5jeS5vbmUoJ2xheW91dHN0b3AnLCBzZWxmLm9wdGlvbnMuc3RvcCk7XG4gICAgICBzZWxmLmN5LnRyaWdnZXIoeyB0eXBlOiAnbGF5b3V0c3RvcCcsIGxheW91dDogc2VsZiB9KTtcblxuICAgICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgICB9XG5cbiAgICAgIHJlYWR5ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuaW1hdGlvbkRhdGEgPSBzZWxmLmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7IC8vIEdldCBwb3NpdGlvbnMgb2YgbGF5b3V0IG5vZGVzIG5vdGUgdGhhdCBhbGwgbm9kZXMgbWF5IG5vdCBiZSBsYXlvdXQgbm9kZXMgYmVjYXVzZSBvZiB0aWxpbmdcblxuICAgIC8vIFBvc2l0aW9uIG5vZGVzLCBmb3IgdGhlIG5vZGVzIHdob3NlIGlkIGRvZXMgbm90IGluY2x1ZGVkIGluIGRhdGEgKGJlY2F1c2UgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZWlyIHBhcmVudHMgYW5kIGluY2x1ZGVkIGluIGR1bW15IGNvbXBvdW5kcylcbiAgICAvLyB1c2UgcG9zaXRpb24gb2YgdGhlaXIgYW5jZXN0b3JzIG9yIGR1bW15IGFuY2VzdG9yc1xuICAgIG9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbGUgPSBpO1xuICAgICAgfVxuICAgICAgLy8gSWYgZWxlIGlzIGEgY29tcG91bmQgbm9kZSwgdGhlbiBpdHMgcG9zaXRpb24gd2lsbCBiZSBkZWZpbmVkIGJ5IGl0cyBjaGlsZHJlblxuICAgICAgaWYgKCFlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICB2YXIgdGhlSWQgPSBlbGUuaWQoKTtcbiAgICAgICAgdmFyIHBOb2RlID0gYW5pbWF0aW9uRGF0YVt0aGVJZF07XG4gICAgICAgIHZhciB0ZW1wID0gZWxlO1xuICAgICAgICAvLyBJZiBwTm9kZSBpcyB1bmRlZmluZWQgc2VhcmNoIHVudGlsIGZpbmRpbmcgcG9zaXRpb24gZGF0YSBvZiBpdHMgZmlyc3QgYW5jZXN0b3IgKEl0IG1heSBiZSBkdW1teSBhcyB3ZWxsKVxuICAgICAgICB3aGlsZSAocE5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgIHBOb2RlID0gYW5pbWF0aW9uRGF0YVt0ZW1wLmRhdGEoJ3BhcmVudCcpXSB8fCBhbmltYXRpb25EYXRhWydEdW1teUNvbXBvdW5kXycgKyB0ZW1wLmRhdGEoJ3BhcmVudCcpXTtcbiAgICAgICAgICBhbmltYXRpb25EYXRhW3RoZUlkXSA9IHBOb2RlO1xuICAgICAgICAgIHRlbXAgPSB0ZW1wLnBhcmVudCgpWzBdO1xuICAgICAgICAgIGlmICh0ZW1wID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHBOb2RlLngsXG4gICAgICAgICAgICB5OiBwTm9kZS55XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogZWxlLnBvc2l0aW9uKCd4JyksXG4gICAgICAgICAgICB5OiBlbGUucG9zaXRpb24oJ3knKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFmdGVyUmVwb3NpdGlvbigpO1xuXG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShpdGVyYXRlQW5pbWF0ZWQpO1xuICB9O1xuXG4gIC8qXG4gICogTGlzdGVuICdsYXlvdXRzdGFydGVkJyBldmVudCBhbmQgc3RhcnQgYW5pbWF0ZWQgaXRlcmF0aW9uIGlmIGFuaW1hdGUgb3B0aW9uIGlzICdkdXJpbmcnXG4gICovXG4gIGxheW91dC5hZGRMaXN0ZW5lcignbGF5b3V0c3RhcnRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VsZi5vcHRpb25zLmFuaW1hdGUgPT09ICdkdXJpbmcnKSB7XG4gICAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGl0ZXJhdGVBbmltYXRlZCk7XG4gICAgfVxuICB9KTtcblxuICBsYXlvdXQucnVuTGF5b3V0KCk7IC8vIFJ1biBjb3NlIGxheW91dFxuXG4gIC8qXG4gICAqIElmIGFuaW1hdGUgb3B0aW9uIGlzIG5vdCAnZHVyaW5nJyAoJ2VuZCcgb3IgZmFsc2UpIHBlcmZvcm0gdGhlc2UgaGVyZSAoSWYgaXQgaXMgJ2R1cmluZycgc2ltaWxhciB0aGluZ3MgYXJlIGFscmVhZHkgcGVyZm9ybWVkKVxuICAgKi9cbiAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRlICE9PSBcImR1cmluZ1wiKSB7XG4gICAgc2VsZi5vcHRpb25zLmVsZXMubm9kZXMoKS5ub3QoXCI6cGFyZW50XCIpLmxheW91dFBvc2l0aW9ucyhzZWxmLCBzZWxmLm9wdGlvbnMsIGdldFBvc2l0aW9ucyk7IC8vIFVzZSBsYXlvdXQgcG9zaXRpb25zIHRvIHJlcG9zaXRpb24gdGhlIG5vZGVzIGl0IGNvbnNpZGVycyB0aGUgb3B0aW9ucyBwYXJhbWV0ZXJcbiAgICByZWFkeSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vL0dldCB0aGUgdG9wIG1vc3Qgb25lcyBvZiBhIGxpc3Qgb2Ygbm9kZXNcbl9Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgdmFyIG5vZGVzTWFwID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2Rlc01hcFtub2Rlc1tpXS5pZCgpXSA9IHRydWU7XG4gIH1cbiAgdmFyIHJvb3RzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUsIGkpIHtcbiAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZWxlID0gaTtcbiAgICB9XG4gICAgdmFyIHBhcmVudCA9IGVsZS5wYXJlbnQoKVswXTtcbiAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChub2Rlc01hcFtwYXJlbnQuaWQoKV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudCgpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJvb3RzO1xufTtcblxuX0NvU0VMYXlvdXQucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3QgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZHJlbiwgbGF5b3V0KSB7XG4gIHZhciBzaXplID0gY2hpbGRyZW4ubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIHZhciB0aGVDaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBjaGlsZHJlbl9vZl9jaGlsZHJlbiA9IHRoZUNoaWxkLmNoaWxkcmVuKCk7XG4gICAgdmFyIHRoZU5vZGU7XG5cbiAgICB2YXIgZGltZW5zaW9ucyA9IHRoZUNoaWxkLmxheW91dERpbWVuc2lvbnMoe1xuICAgICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiB0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzXG4gICAgfSk7XG5cbiAgICBpZiAodGhlQ2hpbGQub3V0ZXJXaWR0aCgpICE9IG51bGwgJiYgdGhlQ2hpbGQub3V0ZXJIZWlnaHQoKSAhPSBudWxsKSB7XG4gICAgICB0aGVOb2RlID0gcGFyZW50LmFkZChuZXcgQ29TRU5vZGUobGF5b3V0LmdyYXBoTWFuYWdlciwgbmV3IFBvaW50RCh0aGVDaGlsZC5wb3NpdGlvbigneCcpIC0gZGltZW5zaW9ucy53IC8gMiwgdGhlQ2hpbGQucG9zaXRpb24oJ3knKSAtIGRpbWVuc2lvbnMuaCAvIDIpLCBuZXcgRGltZW5zaW9uRChwYXJzZUZsb2F0KGRpbWVuc2lvbnMudyksIHBhcnNlRmxvYXQoZGltZW5zaW9ucy5oKSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKHRoaXMuZ3JhcGhNYW5hZ2VyKSk7XG4gICAgfVxuICAgIC8vIEF0dGFjaCBpZCB0byB0aGUgbGF5b3V0IG5vZGVcbiAgICB0aGVOb2RlLmlkID0gdGhlQ2hpbGQuZGF0YShcImlkXCIpO1xuICAgIC8vIEF0dGFjaCB0aGUgcGFkZGluZ3Mgb2YgY3kgbm9kZSB0byBsYXlvdXQgbm9kZVxuICAgIHRoZU5vZGUucGFkZGluZ0xlZnQgPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG4gICAgdGhlTm9kZS5wYWRkaW5nVG9wID0gcGFyc2VJbnQodGhlQ2hpbGQuY3NzKCdwYWRkaW5nJykpO1xuICAgIHRoZU5vZGUucGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQodGhlQ2hpbGQuY3NzKCdwYWRkaW5nJykpO1xuICAgIHRoZU5vZGUucGFkZGluZ0JvdHRvbSA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcblxuICAgIC8vQXR0YWNoIHRoZSBsYWJlbCBwcm9wZXJ0aWVzIHRvIGNvbXBvdW5kIGlmIGxhYmVscyB3aWxsIGJlIGluY2x1ZGVkIGluIG5vZGUgZGltZW5zaW9ucyAgXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpIHtcbiAgICAgIGlmICh0aGVDaGlsZC5pc1BhcmVudCgpKSB7XG4gICAgICAgIHZhciBsYWJlbFdpZHRoID0gdGhlQ2hpbGQuYm91bmRpbmdCb3goeyBpbmNsdWRlTGFiZWxzOiB0cnVlLCBpbmNsdWRlTm9kZXM6IGZhbHNlIH0pLnc7XG4gICAgICAgIHZhciBsYWJlbEhlaWdodCA9IHRoZUNoaWxkLmJvdW5kaW5nQm94KHsgaW5jbHVkZUxhYmVsczogdHJ1ZSwgaW5jbHVkZU5vZGVzOiBmYWxzZSB9KS5oO1xuICAgICAgICB2YXIgbGFiZWxQb3MgPSB0aGVDaGlsZC5jc3MoXCJ0ZXh0LWhhbGlnblwiKTtcbiAgICAgICAgdGhlTm9kZS5sYWJlbFdpZHRoID0gbGFiZWxXaWR0aDtcbiAgICAgICAgdGhlTm9kZS5sYWJlbEhlaWdodCA9IGxhYmVsSGVpZ2h0O1xuICAgICAgICB0aGVOb2RlLmxhYmVsUG9zID0gbGFiZWxQb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFwIHRoZSBsYXlvdXQgbm9kZVxuICAgIHRoaXMuaWRUb0xOb2RlW3RoZUNoaWxkLmRhdGEoXCJpZFwiKV0gPSB0aGVOb2RlO1xuXG4gICAgaWYgKGlzTmFOKHRoZU5vZGUucmVjdC54KSkge1xuICAgICAgdGhlTm9kZS5yZWN0LnggPSAwO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGVOb2RlLnJlY3QueSkpIHtcbiAgICAgIHRoZU5vZGUucmVjdC55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW5fb2ZfY2hpbGRyZW4gIT0gbnVsbCAmJiBjaGlsZHJlbl9vZl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGhlTmV3R3JhcGg7XG4gICAgICB0aGVOZXdHcmFwaCA9IGxheW91dC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQobGF5b3V0Lm5ld0dyYXBoKCksIHRoZU5vZGUpO1xuICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KHRoZU5ld0dyYXBoLCBjaGlsZHJlbl9vZl9jaGlsZHJlbiwgbGF5b3V0KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmIDogY2FsbGVkIG9uIGNvbnRpbnVvdXMgbGF5b3V0cyB0byBzdG9wIHRoZW0gYmVmb3JlIHRoZXkgZmluaXNoXG4gKi9cbl9Db1NFTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIHJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIoY3l0b3NjYXBlKSB7XG4gIC8vICB2YXIgTGF5b3V0ID0gZ2V0TGF5b3V0KCBjeXRvc2NhcGUgKTtcblxuICBjeXRvc2NhcGUoJ2xheW91dCcsICdjb3NlLWJpbGtlbnQnLCBfQ29TRUxheW91dCk7XG59O1xuXG4vLyBhdXRvIHJlZyBmb3IgZ2xvYmFsc1xuaWYgKHR5cGVvZiBjeXRvc2NhcGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJlZ2lzdGVyKGN5dG9zY2FwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pOyIsCiAgICAiaW1wb3J0IHtcbiAgY3JlYXRlVGV4dFxufSBmcm9tIFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCB7XG4gIHBhcnNlRm9udFNpemVcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBzZWxlY3RTdmdFbGVtZW50XG59IGZyb20gXCIuL2NodW5rLUYyWEZOM0JZLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBkZWZhdWx0Q29uZmlnX2RlZmF1bHQsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2csXG4gIHNhbml0aXplVGV4dCxcbiAgc2V0dXBHcmFwaFZpZXdib3hcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9taW5kbWFwL3BhcnNlci9taW5kbWFwLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgNF0sICRWMSA9IFsxLCAxM10sICRWMiA9IFsxLCAxMl0sICRWMyA9IFsxLCAxNV0sICRWNCA9IFsxLCAxNl0sICRWNSA9IFsxLCAyMF0sICRWNiA9IFsxLCAxOV0sICRWNyA9IFs2LCA3LCA4XSwgJFY4ID0gWzEsIDI2XSwgJFY5ID0gWzEsIDI0XSwgJFZhID0gWzEsIDI1XSwgJFZiID0gWzYsIDcsIDExXSwgJFZjID0gWzEsIDYsIDEzLCAxNSwgMTYsIDE5LCAyMl0sICRWZCA9IFsxLCAzM10sICRWZSA9IFsxLCAzNF0sICRWZiA9IFsxLCA2LCA3LCAxMSwgMTMsIDE1LCAxNiwgMTksIDIyXTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwibWluZE1hcFwiOiA0LCBcInNwYWNlTGluZXNcIjogNSwgXCJTUEFDRUxJTkVcIjogNiwgXCJOTFwiOiA3LCBcIk1JTkRNQVBcIjogOCwgXCJkb2N1bWVudFwiOiA5LCBcInN0b3BcIjogMTAsIFwiRU9GXCI6IDExLCBcInN0YXRlbWVudFwiOiAxMiwgXCJTUEFDRUxJU1RcIjogMTMsIFwibm9kZVwiOiAxNCwgXCJJQ09OXCI6IDE1LCBcIkNMQVNTXCI6IDE2LCBcIm5vZGVXaXRoSWRcIjogMTcsIFwibm9kZVdpdGhvdXRJZFwiOiAxOCwgXCJOT0RFX0RTVEFSVFwiOiAxOSwgXCJOT0RFX0RFU0NSXCI6IDIwLCBcIk5PREVfREVORFwiOiAyMSwgXCJOT0RFX0lEXCI6IDIyLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNjogXCJTUEFDRUxJTkVcIiwgNzogXCJOTFwiLCA4OiBcIk1JTkRNQVBcIiwgMTE6IFwiRU9GXCIsIDEzOiBcIlNQQUNFTElTVFwiLCAxNTogXCJJQ09OXCIsIDE2OiBcIkNMQVNTXCIsIDE5OiBcIk5PREVfRFNUQVJUXCIsIDIwOiBcIk5PREVfREVTQ1JcIiwgMjE6IFwiTk9ERV9ERU5EXCIsIDIyOiBcIk5PREVfSURcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDJdLCBbNSwgMV0sIFs1LCAyXSwgWzUsIDJdLCBbNCwgMl0sIFs0LCAzXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzksIDNdLCBbOSwgMl0sIFsxMiwgMl0sIFsxMiwgMl0sIFsxMiwgMl0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxNCwgMV0sIFsxNCwgMV0sIFsxOCwgM10sIFsxNywgMV0sIFsxNywgNF1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4geXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIlN0b3AgTkwgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIEVPRiBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIE5MMiBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIEVPRjIgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmluZm8oXCJOb2RlOiBcIiwgJCRbJDBdLmlkKTtcbiAgICAgICAgICB5eS5hZGROb2RlKCQkWyQwIC0gMV0ubGVuZ3RoLCAkJFskMF0uaWQsICQkWyQwXS5kZXNjciwgJCRbJDBdLnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiSWNvbjogXCIsICQkWyQwXSk7XG4gICAgICAgICAgeXkuZGVjb3JhdGVOb2RlKHsgaWNvbjogJCRbJDBdIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHl5LmRlY29yYXRlTm9kZSh7IGNsYXNzOiAkJFskMF0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTUEFDRUxJU1RcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJOb2RlOiBcIiwgJCRbJDBdLmlkKTtcbiAgICAgICAgICB5eS5hZGROb2RlKDAsICQkWyQwXS5pZCwgJCRbJDBdLmRlc2NyLCAkJFskMF0udHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgeXkuZGVjb3JhdGVOb2RlKHsgaWNvbjogJCRbJDBdIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBmb3VuZCAuLlwiLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkOiAkJFskMCAtIDFdLCBkZXNjcjogJCRbJDAgLSAxXSwgdHlwZTogeXkuZ2V0VHlwZSgkJFskMCAtIDJdLCAkJFskMF0pIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDBdLCBkZXNjcjogJCRbJDBdLCB0eXBlOiB5eS5ub2RlVHlwZS5ERUZBVUxUIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJub2RlIGZvdW5kIC4uXCIsICQkWyQwIC0gM10pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgaWQ6ICQkWyQwIC0gM10sIGRlc2NyOiAkJFskMCAtIDFdLCB0eXBlOiB5eS5nZXRUeXBlKCQkWyQwIC0gMl0sICQkWyQwXSkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgNTogMywgNjogWzEsIDVdLCA4OiAkVjAgfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyA0OiA2LCA2OiBbMSwgN10sIDc6IFsxLCA4XSwgODogJFYwIH0sIHsgNjogJFYxLCA3OiBbMSwgMTBdLCA5OiA5LCAxMjogMTEsIDEzOiAkVjIsIDE0OiAxNCwgMTU6ICRWMywgMTY6ICRWNCwgMTc6IDE3LCAxODogMTgsIDE5OiAkVjUsIDIyOiAkVjYgfSwgbygkVjcsIFsyLCAzXSksIHsgMTogWzIsIDJdIH0sIG8oJFY3LCBbMiwgNF0pLCBvKCRWNywgWzIsIDVdKSwgeyAxOiBbMiwgNl0sIDY6ICRWMSwgMTI6IDIxLCAxMzogJFYyLCAxNDogMTQsIDE1OiAkVjMsIDE2OiAkVjQsIDE3OiAxNywgMTg6IDE4LCAxOTogJFY1LCAyMjogJFY2IH0sIHsgNjogJFYxLCA5OiAyMiwgMTI6IDExLCAxMzogJFYyLCAxNDogMTQsIDE1OiAkVjMsIDE2OiAkVjQsIDE3OiAxNywgMTg6IDE4LCAxOTogJFY1LCAyMjogJFY2IH0sIHsgNjogJFY4LCA3OiAkVjksIDEwOiAyMywgMTE6ICRWYSB9LCBvKCRWYiwgWzIsIDIyXSwgeyAxNzogMTcsIDE4OiAxOCwgMTQ6IDI3LCAxNTogWzEsIDI4XSwgMTY6IFsxLCAyOV0sIDE5OiAkVjUsIDIyOiAkVjYgfSksIG8oJFZiLCBbMiwgMThdKSwgbygkVmIsIFsyLCAxOV0pLCBvKCRWYiwgWzIsIDIwXSksIG8oJFZiLCBbMiwgMjFdKSwgbygkVmIsIFsyLCAyM10pLCBvKCRWYiwgWzIsIDI0XSksIG8oJFZiLCBbMiwgMjZdLCB7IDE5OiBbMSwgMzBdIH0pLCB7IDIwOiBbMSwgMzFdIH0sIHsgNjogJFY4LCA3OiAkVjksIDEwOiAzMiwgMTE6ICRWYSB9LCB7IDE6IFsyLCA3XSwgNjogJFYxLCAxMjogMjEsIDEzOiAkVjIsIDE0OiAxNCwgMTU6ICRWMywgMTY6ICRWNCwgMTc6IDE3LCAxODogMTgsIDE5OiAkVjUsIDIyOiAkVjYgfSwgbygkVmMsIFsyLCAxNF0sIHsgNzogJFZkLCAxMTogJFZlIH0pLCBvKCRWZiwgWzIsIDhdKSwgbygkVmYsIFsyLCA5XSksIG8oJFZmLCBbMiwgMTBdKSwgbygkVmIsIFsyLCAxNV0pLCBvKCRWYiwgWzIsIDE2XSksIG8oJFZiLCBbMiwgMTddKSwgeyAyMDogWzEsIDM1XSB9LCB7IDIxOiBbMSwgMzZdIH0sIG8oJFZjLCBbMiwgMTNdLCB7IDc6ICRWZCwgMTE6ICRWZSB9KSwgbygkVmYsIFsyLCAxMV0pLCBvKCRWZiwgWzIsIDEyXSksIHsgMjE6IFsxLCAzN10gfSwgbygkVmIsIFsyLCAyNV0pLCBvKCRWYiwgWzIsIDI3XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDI6IFsyLCAxXSwgNjogWzIsIDJdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiRm91bmQgY29tbWVudFwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiQ0xBU1NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkJlZ2luIGljb25cIik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiSUNPTlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU1BBQ0VMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiZW5kIGljb25cIik7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJFeHBsb2Rpbmcgbm9kZVwiKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiQ2xvdWRcIik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkV4cGxvc2lvbiBCYW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJDbG91ZCBCYW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5TVFIyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVTQ1JcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdGFydGluZyBOU1RSXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5TVFJcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJkZXNjcmlwdGlvbjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFU0NSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKSlcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kIClcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kIC4uLlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICgtXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJub2RlIGVuZCAoLVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJMb25nIGRlc2NyaXB0aW9uOlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkxvbmcgZGVzY3JpcHRpb246XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/OlxccyolJS4qKS9pLCAvXig/Om1pbmRtYXBcXGIpL2ksIC9eKD86Ojo6KS9pLCAvXig/Oi4rKS9pLCAvXig/OlxcbikvaSwgL14oPzo6Omljb25cXCgpL2ksIC9eKD86W1xcc10rW1xcbl0pL2ksIC9eKD86W1xcbl0rKS9pLCAvXig/OlteXFwpXSspL2ksIC9eKD86XFwpKS9pLCAvXig/Oi1cXCkpL2ksIC9eKD86XFwoLSkvaSwgL14oPzpcXClcXCkpL2ksIC9eKD86XFwpKS9pLCAvXig/OlxcKFxcKCkvaSwgL14oPzpcXHtcXHspL2ksIC9eKD86XFwoKS9pLCAvXig/OlxcWykvaSwgL14oPzpbXFxzXSspL2ksIC9eKD86W15cXChcXFtcXG5cXClcXHtcXH1dKykvaSwgL14oPzokKS9pLCAvXig/OltcIl1bYF0pL2ksIC9eKD86W15gXCJdKykvaSwgL14oPzpbYF1bXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0rKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1xcKV1cXCkpL2ksIC9eKD86W1xcKV0pL2ksIC9eKD86W1xcXV0pL2ksIC9eKD86XFx9XFx9KS9pLCAvXig/OlxcKC0pL2ksIC9eKD86LVxcKSkvaSwgL14oPzpcXChcXCgpL2ksIC9eKD86XFwoKS9pLCAvXig/OlteXFwpXFxdXFwoXFx9XSspL2ksIC9eKD86LisoPyFcXChcXCgpKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJDTEFTU1wiOiB7IFwicnVsZXNcIjogWzMsIDRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklDT05cIjogeyBcInJ1bGVzXCI6IFs4LCA5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOU1RSMlwiOiB7IFwicnVsZXNcIjogWzIyLCAyM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTlNUUlwiOiB7IFwicnVsZXNcIjogWzI1LCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTk9ERVwiOiB7IFwicnVsZXNcIjogWzIxLCAyNCwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCA1LCA2LCA3LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgbWluZG1hcF9kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvbWluZG1hcC9taW5kbWFwRGIudHNcbnZhciBub2RlcyA9IFtdO1xudmFyIGNudCA9IDA7XG52YXIgZWxlbWVudHMgPSB7fTtcbnZhciBjbGVhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBub2RlcyA9IFtdO1xuICBjbnQgPSAwO1xuICBlbGVtZW50cyA9IHt9O1xufSwgXCJjbGVhclwiKTtcbnZhciBnZXRQYXJlbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGxldmVsKSB7XG4gIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChub2Rlc1tpXS5sZXZlbCA8IGxldmVsKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufSwgXCJnZXRQYXJlbnRcIik7XG52YXIgZ2V0TWluZG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IG5vZGVzWzBdIDogbnVsbDtcbn0sIFwiZ2V0TWluZG1hcFwiKTtcbnZhciBhZGROb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobGV2ZWwsIGlkLCBkZXNjciwgdHlwZSkgPT4ge1xuICBsb2cuaW5mbyhcImFkZE5vZGVcIiwgbGV2ZWwsIGlkLCBkZXNjciwgdHlwZSk7XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgbGV0IHBhZGRpbmcgPSBjb25mLm1pbmRtYXA/LnBhZGRpbmcgPz8gZGVmYXVsdENvbmZpZ19kZWZhdWx0Lm1pbmRtYXAucGFkZGluZztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBub2RlVHlwZS5ST1VOREVEX1JFQ1Q6XG4gICAgY2FzZSBub2RlVHlwZS5SRUNUOlxuICAgIGNhc2Ugbm9kZVR5cGUuSEVYQUdPTjpcbiAgICAgIHBhZGRpbmcgKj0gMjtcbiAgfVxuICBjb25zdCBub2RlID0ge1xuICAgIGlkOiBjbnQrKyxcbiAgICBub2RlSWQ6IHNhbml0aXplVGV4dChpZCwgY29uZiksXG4gICAgbGV2ZWwsXG4gICAgZGVzY3I6IHNhbml0aXplVGV4dChkZXNjciwgY29uZiksXG4gICAgdHlwZSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgd2lkdGg6IGNvbmYubWluZG1hcD8ubWF4Tm9kZVdpZHRoID8/IGRlZmF1bHRDb25maWdfZGVmYXVsdC5taW5kbWFwLm1heE5vZGVXaWR0aCxcbiAgICBwYWRkaW5nXG4gIH07XG4gIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChsZXZlbCk7XG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yIChcIicgKyBub2RlLmRlc2NyICsgJ1wiKSdcbiAgICAgICk7XG4gICAgfVxuICB9XG59LCBcImFkZE5vZGVcIik7XG52YXIgbm9kZVR5cGUgPSB7XG4gIERFRkFVTFQ6IDAsXG4gIE5PX0JPUkRFUjogMCxcbiAgUk9VTkRFRF9SRUNUOiAxLFxuICBSRUNUOiAyLFxuICBDSVJDTEU6IDMsXG4gIENMT1VEOiA0LFxuICBCQU5HOiA1LFxuICBIRVhBR09OOiA2XG59O1xudmFyIGdldFR5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdGFydFN0ciwgZW5kU3RyKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcIkluIGdldCB0eXBlXCIsIHN0YXJ0U3RyLCBlbmRTdHIpO1xuICBzd2l0Y2ggKHN0YXJ0U3RyKSB7XG4gICAgY2FzZSBcIltcIjpcbiAgICAgIHJldHVybiBub2RlVHlwZS5SRUNUO1xuICAgIGNhc2UgXCIoXCI6XG4gICAgICByZXR1cm4gZW5kU3RyID09PSBcIilcIiA/IG5vZGVUeXBlLlJPVU5ERURfUkVDVCA6IG5vZGVUeXBlLkNMT1VEO1xuICAgIGNhc2UgXCIoKFwiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkNJUkNMRTtcbiAgICBjYXNlIFwiKVwiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkNMT1VEO1xuICAgIGNhc2UgXCIpKVwiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkJBTkc7XG4gICAgY2FzZSBcInt7XCI6XG4gICAgICByZXR1cm4gbm9kZVR5cGUuSEVYQUdPTjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkRFRkFVTFQ7XG4gIH1cbn0sIFwiZ2V0VHlwZVwiKTtcbnZhciBzZXRFbGVtZW50Rm9ySWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgZWxlbWVudCkgPT4ge1xuICBlbGVtZW50c1tpZF0gPSBlbGVtZW50O1xufSwgXCJzZXRFbGVtZW50Rm9ySWRcIik7XG52YXIgZGVjb3JhdGVOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGVjb3JhdGlvbikgPT4ge1xuICBpZiAoIWRlY29yYXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IG5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcbiAgaWYgKGRlY29yYXRpb24uaWNvbikge1xuICAgIG5vZGUuaWNvbiA9IHNhbml0aXplVGV4dChkZWNvcmF0aW9uLmljb24sIGNvbmZpZyk7XG4gIH1cbiAgaWYgKGRlY29yYXRpb24uY2xhc3MpIHtcbiAgICBub2RlLmNsYXNzID0gc2FuaXRpemVUZXh0KGRlY29yYXRpb24uY2xhc3MsIGNvbmZpZyk7XG4gIH1cbn0sIFwiZGVjb3JhdGVOb2RlXCIpO1xudmFyIHR5cGUyU3RyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHlwZSkgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIG5vZGVUeXBlLkRFRkFVTFQ6XG4gICAgICByZXR1cm4gXCJuby1ib3JkZXJcIjtcbiAgICBjYXNlIG5vZGVUeXBlLlJFQ1Q6XG4gICAgICByZXR1cm4gXCJyZWN0XCI7XG4gICAgY2FzZSBub2RlVHlwZS5ST1VOREVEX1JFQ1Q6XG4gICAgICByZXR1cm4gXCJyb3VuZGVkLXJlY3RcIjtcbiAgICBjYXNlIG5vZGVUeXBlLkNJUkNMRTpcbiAgICAgIHJldHVybiBcImNpcmNsZVwiO1xuICAgIGNhc2Ugbm9kZVR5cGUuQ0xPVUQ6XG4gICAgICByZXR1cm4gXCJjbG91ZFwiO1xuICAgIGNhc2Ugbm9kZVR5cGUuQkFORzpcbiAgICAgIHJldHVybiBcImJhbmdcIjtcbiAgICBjYXNlIG5vZGVUeXBlLkhFWEFHT046XG4gICAgICByZXR1cm4gXCJoZXhnb25cIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwibm8tYm9yZGVyXCI7XG4gIH1cbn0sIFwidHlwZTJTdHJcIik7XG52YXIgZ2V0TG9nZ2VyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBsb2csIFwiZ2V0TG9nZ2VyXCIpO1xudmFyIGdldEVsZW1lbnRCeUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQpID0+IGVsZW1lbnRzW2lkXSwgXCJnZXRFbGVtZW50QnlJZFwiKTtcbnZhciBkYiA9IHtcbiAgY2xlYXIsXG4gIGFkZE5vZGUsXG4gIGdldE1pbmRtYXAsXG4gIG5vZGVUeXBlLFxuICBnZXRUeXBlLFxuICBzZXRFbGVtZW50Rm9ySWQsXG4gIGRlY29yYXRlTm9kZSxcbiAgdHlwZTJTdHIsXG4gIGdldExvZ2dlcixcbiAgZ2V0RWxlbWVudEJ5SWRcbn07XG52YXIgbWluZG1hcERiX2RlZmF1bHQgPSBkYjtcblxuLy8gc3JjL2RpYWdyYW1zL21pbmRtYXAvbWluZG1hcFJlbmRlcmVyLnRzXG5pbXBvcnQgY3l0b3NjYXBlIGZyb20gXCJjeXRvc2NhcGVcIjtcbmltcG9ydCBjb3NlQmlsa2VudCBmcm9tIFwiY3l0b3NjYXBlLWNvc2UtYmlsa2VudFwiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9taW5kbWFwL3N2Z0RyYXcudHNcbnZhciBNQVhfU0VDVElPTlMgPSAxMjtcbnZhciBkZWZhdWx0QmtnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkYjIsIGVsZW0sIG5vZGUsIHNlY3Rpb24pIHtcbiAgY29uc3QgcmQgPSA1O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAgJHtub2RlLmhlaWdodCAtIHJkfSB2JHstbm9kZS5oZWlnaHQgKyAyICogcmR9IHEwLC01IDUsLTUgaCR7bm9kZS53aWR0aCAtIDIgKiByZH0gcTUsMCA1LDUgdiR7bm9kZS5oZWlnaHQgLSByZH0gSDAgWmBcbiAgKTtcbiAgZWxlbS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtbGluZS1cIiArIHNlY3Rpb24pLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgbm9kZS5oZWlnaHQpLmF0dHIoXCJ4MlwiLCBub2RlLndpZHRoKS5hdHRyKFwieTJcIiwgbm9kZS5oZWlnaHQpO1xufSwgXCJkZWZhdWx0QmtnXCIpO1xudmFyIHJlY3RCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwgbm9kZSkge1xuICBlbGVtLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCkuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGgpO1xufSwgXCJyZWN0QmtnXCIpO1xudmFyIGNsb3VkQmtnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkYjIsIGVsZW0sIG5vZGUpIHtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGg7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodDtcbiAgY29uc3QgcjEgPSAwLjE1ICogdztcbiAgY29uc3QgcjIgPSAwLjI1ICogdztcbiAgY29uc3QgcjMgPSAwLjM1ICogdztcbiAgY29uc3QgcjQgPSAwLjIgKiB3O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAgMCBhJHtyMX0sJHtyMX0gMCAwLDEgJHt3ICogMC4yNX0sJHstMSAqIHcgKiAwLjF9XG4gICAgICBhJHtyM30sJHtyM30gMSAwLDEgJHt3ICogMC40fSwkey0xICogdyAqIDAuMX1cbiAgICAgIGEke3IyfSwke3IyfSAxIDAsMSAke3cgKiAwLjM1fSwkezEgKiB3ICogMC4yfVxuXG4gICAgICBhJHtyMX0sJHtyMX0gMSAwLDEgJHt3ICogMC4xNX0sJHsxICogaCAqIDAuMzV9XG4gICAgICBhJHtyNH0sJHtyNH0gMSAwLDEgJHstMSAqIHcgKiAwLjE1fSwkezEgKiBoICogMC42NX1cblxuICAgICAgYSR7cjJ9LCR7cjF9IDEgMCwxICR7LTEgKiB3ICogMC4yNX0sJHt3ICogMC4xNX1cbiAgICAgIGEke3IzfSwke3IzfSAxIDAsMSAkey0xICogdyAqIDAuNX0sJHswfVxuICAgICAgYSR7cjF9LCR7cjF9IDEgMCwxICR7LTEgKiB3ICogMC4yNX0sJHstMSAqIHcgKiAwLjE1fVxuXG4gICAgICBhJHtyMX0sJHtyMX0gMSAwLDEgJHstMSAqIHcgKiAwLjF9LCR7LTEgKiBoICogMC4zNX1cbiAgICAgIGEke3I0fSwke3I0fSAxIDAsMSAke3cgKiAwLjF9LCR7LTEgKiBoICogMC42NX1cblxuICAgIEgwIFYwIFpgXG4gICk7XG59LCBcImNsb3VkQmtnXCIpO1xudmFyIGJhbmdCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwgbm9kZSkge1xuICBjb25zdCB3ID0gbm9kZS53aWR0aDtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0O1xuICBjb25zdCByID0gMC4xNSAqIHc7XG4gIGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiaWRcIiwgXCJub2RlLVwiICsgbm9kZS5pZCkuYXR0cihcImNsYXNzXCIsIFwibm9kZS1ia2cgbm9kZS1cIiArIGRiMi50eXBlMlN0cihub2RlLnR5cGUpKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIGBNMCAwIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4yNX0sJHstMSAqIGggKiAwLjF9XG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7dyAqIDAuMjV9LCR7MH1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4yNX0sJHswfVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAke3cgKiAwLjI1fSwkezEgKiBoICogMC4xfVxuXG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7dyAqIDAuMTV9LCR7MSAqIGggKiAwLjMzfVxuICAgICAgYSR7ciAqIDAuOH0sJHtyICogMC44fSAxIDAsMCAkezB9LCR7MSAqIGggKiAwLjM0fVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMTV9LCR7MSAqIGggKiAwLjMzfVxuXG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7LTEgKiB3ICogMC4yNX0sJHtoICogMC4xNX1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHstMSAqIHcgKiAwLjI1fSwkezB9XG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7LTEgKiB3ICogMC4yNX0sJHswfVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMjV9LCR7LTEgKiBoICogMC4xNX1cblxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMX0sJHstMSAqIGggKiAwLjMzfVxuICAgICAgYSR7ciAqIDAuOH0sJHtyICogMC44fSAxIDAsMCAkezB9LCR7LTEgKiBoICogMC4zNH1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4xfSwkey0xICogaCAqIDAuMzN9XG5cbiAgICBIMCBWMCBaYFxuICApO1xufSwgXCJiYW5nQmtnXCIpO1xudmFyIGNpcmNsZUJrZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGIyLCBlbGVtLCBub2RlKSB7XG4gIGVsZW0uYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJpZFwiLCBcIm5vZGUtXCIgKyBub2RlLmlkKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWJrZyBub2RlLVwiICsgZGIyLnR5cGUyU3RyKG5vZGUudHlwZSkpLmF0dHIoXCJyXCIsIG5vZGUud2lkdGggLyAyKTtcbn0sIFwiY2lyY2xlQmtnXCIpO1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzLCBub2RlKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKG5vZGUud2lkdGggLSB3KSAvIDIgKyBcIiwgXCIgKyBoICsgXCIpXCIpO1xufVxuX19uYW1lKGluc2VydFBvbHlnb25TaGFwZSwgXCJpbnNlcnRQb2x5Z29uU2hhcGVcIik7XG52YXIgaGV4YWdvbkJrZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX2RiLCBlbGVtLCBub2RlKSB7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodDtcbiAgY29uc3QgZiA9IDQ7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGggLSBub2RlLnBhZGRpbmcgKyAyICogbTtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogbSwgeTogMCB9LFxuICAgIHsgeDogdyAtIG0sIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyAtIG0sIHk6IC1oIH0sXG4gICAgeyB4OiBtLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgaW5zZXJ0UG9seWdvblNoYXBlKGVsZW0sIHcsIGgsIHBvaW50cywgbm9kZSk7XG59LCBcImhleGFnb25Ca2dcIik7XG52YXIgcm91bmRlZFJlY3RCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwgbm9kZSkge1xuICBlbGVtLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCkuYXR0cihcInJ4XCIsIG5vZGUucGFkZGluZykuYXR0cihcInJ5XCIsIG5vZGUucGFkZGluZykuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGgpO1xufSwgXCJyb3VuZGVkUmVjdEJrZ1wiKTtcbnZhciBkcmF3Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZGIyLCBlbGVtLCBub2RlLCBmdWxsU2VjdGlvbiwgY29uZikge1xuICBjb25zdCBodG1sTGFiZWxzID0gY29uZi5odG1sTGFiZWxzO1xuICBjb25zdCBzZWN0aW9uID0gZnVsbFNlY3Rpb24gJSAoTUFYX1NFQ1RJT05TIC0gMSk7XG4gIGNvbnN0IG5vZGVFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBub2RlLnNlY3Rpb24gPSBzZWN0aW9uO1xuICBsZXQgc2VjdGlvbkNsYXNzID0gXCJzZWN0aW9uLVwiICsgc2VjdGlvbjtcbiAgaWYgKHNlY3Rpb24gPCAwKSB7XG4gICAgc2VjdGlvbkNsYXNzICs9IFwiIHNlY3Rpb24tcm9vdFwiO1xuICB9XG4gIG5vZGVFbGVtLmF0dHIoXCJjbGFzc1wiLCAobm9kZS5jbGFzcyA/IG5vZGUuY2xhc3MgKyBcIiBcIiA6IFwiXCIpICsgXCJtaW5kbWFwLW5vZGUgXCIgKyBzZWN0aW9uQ2xhc3MpO1xuICBjb25zdCBia2dFbGVtID0gbm9kZUVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgdGV4dEVsZW0gPSBub2RlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IG5vZGUuZGVzY3IucmVwbGFjZSgvKDxiclxcLyo+KS9nLCBcIlxcblwiKTtcbiAgYXdhaXQgY3JlYXRlVGV4dChcbiAgICB0ZXh0RWxlbSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICB7XG4gICAgICB1c2VIdG1sTGFiZWxzOiBodG1sTGFiZWxzLFxuICAgICAgd2lkdGg6IG5vZGUud2lkdGgsXG4gICAgICBjbGFzc2VzOiBcIm1pbmRtYXAtbm9kZS1sYWJlbFwiXG4gICAgfSxcbiAgICBjb25mXG4gICk7XG4gIGlmICghaHRtbExhYmVscykge1xuICAgIHRleHRFbGVtLmF0dHIoXCJkeVwiLCBcIjFlbVwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIik7XG4gIH1cbiAgY29uc3QgYmJveCA9IHRleHRFbGVtLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IFtmb250U2l6ZV0gPSBwYXJzZUZvbnRTaXplKGNvbmYuZm9udFNpemUpO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0ICsgZm9udFNpemUgKiAxLjEgKiAwLjUgKyBub2RlLnBhZGRpbmc7XG4gIG5vZGUud2lkdGggPSBiYm94LndpZHRoICsgMiAqIG5vZGUucGFkZGluZztcbiAgaWYgKG5vZGUuaWNvbikge1xuICAgIGlmIChub2RlLnR5cGUgPT09IGRiMi5ub2RlVHlwZS5DSVJDTEUpIHtcbiAgICAgIG5vZGUuaGVpZ2h0ICs9IDUwO1xuICAgICAgbm9kZS53aWR0aCArPSA1MDtcbiAgICAgIGNvbnN0IGljb24gPSBub2RlRWxlbS5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJoZWlnaHRcIiwgXCI1MHB4XCIpLmF0dHIoXCJ3aWR0aFwiLCBub2RlLndpZHRoKS5hdHRyKFwic3R5bGVcIiwgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO1xuICAgICAgaWNvbi5hcHBlbmQoXCJkaXZcIikuYXR0cihcImNsYXNzXCIsIFwiaWNvbi1jb250YWluZXJcIikuYXBwZW5kKFwiaVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWljb24tXCIgKyBzZWN0aW9uICsgXCIgXCIgKyBub2RlLmljb24pO1xuICAgICAgdGV4dEVsZW0uYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLndpZHRoIC8gMiArIFwiLCBcIiArIChub2RlLmhlaWdodCAvIDIgLSAxLjUgKiBub2RlLnBhZGRpbmcpICsgXCIpXCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUud2lkdGggKz0gNTA7XG4gICAgICBjb25zdCBvcmdIZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICAgIG5vZGUuaGVpZ2h0ID0gTWF0aC5tYXgob3JnSGVpZ2h0LCA2MCk7XG4gICAgICBjb25zdCBoZWlnaHREaWZmID0gTWF0aC5hYnMobm9kZS5oZWlnaHQgLSBvcmdIZWlnaHQpO1xuICAgICAgY29uc3QgaWNvbiA9IG5vZGVFbGVtLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcIndpZHRoXCIsIFwiNjBweFwiKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwic3R5bGVcIiwgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDpcIiArIGhlaWdodERpZmYgLyAyICsgXCJweDtcIik7XG4gICAgICBpY29uLmFwcGVuZChcImRpdlwiKS5hdHRyKFwiY2xhc3NcIiwgXCJpY29uLWNvbnRhaW5lclwiKS5hcHBlbmQoXCJpXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtaWNvbi1cIiArIHNlY3Rpb24gKyBcIiBcIiArIG5vZGUuaWNvbik7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArICgyNSArIG5vZGUud2lkdGggLyAyKSArIFwiLCBcIiArIChoZWlnaHREaWZmIC8gMiArIG5vZGUucGFkZGluZyAvIDIpICsgXCIpXCJcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghaHRtbExhYmVscykge1xuICAgICAgY29uc3QgZHggPSBub2RlLndpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGR5ID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwiLCBcIiArIGR5ICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkeCA9IChub2RlLndpZHRoIC0gYmJveC53aWR0aCkgLyAyO1xuICAgICAgY29uc3QgZHkgPSAobm9kZS5oZWlnaHQgLSBiYm94LmhlaWdodCkgLyAyO1xuICAgICAgdGV4dEVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCIsIFwiICsgZHkgKyBcIilcIik7XG4gICAgfVxuICB9XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBkYjIubm9kZVR5cGUuREVGQVVMVDpcbiAgICAgIGRlZmF1bHRCa2coZGIyLCBia2dFbGVtLCBub2RlLCBzZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGIyLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpcbiAgICAgIHJvdW5kZWRSZWN0QmtnKGRiMiwgYmtnRWxlbSwgbm9kZSwgc2VjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRiMi5ub2RlVHlwZS5SRUNUOlxuICAgICAgcmVjdEJrZyhkYjIsIGJrZ0VsZW0sIG5vZGUsIHNlY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkYjIubm9kZVR5cGUuQ0lSQ0xFOlxuICAgICAgYmtnRWxlbS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbm9kZS53aWR0aCAvIDIgKyBcIiwgXCIgKyArbm9kZS5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgICAgY2lyY2xlQmtnKGRiMiwgYmtnRWxlbSwgbm9kZSwgc2VjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRiMi5ub2RlVHlwZS5DTE9VRDpcbiAgICAgIGNsb3VkQmtnKGRiMiwgYmtnRWxlbSwgbm9kZSwgc2VjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRiMi5ub2RlVHlwZS5CQU5HOlxuICAgICAgYmFuZ0JrZyhkYjIsIGJrZ0VsZW0sIG5vZGUsIHNlY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkYjIubm9kZVR5cGUuSEVYQUdPTjpcbiAgICAgIGhleGFnb25Ca2coZGIyLCBia2dFbGVtLCBub2RlLCBzZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGRiMi5zZXRFbGVtZW50Rm9ySWQobm9kZS5pZCwgbm9kZUVsZW0pO1xuICByZXR1cm4gbm9kZS5oZWlnaHQ7XG59LCBcImRyYXdOb2RlXCIpO1xudmFyIHBvc2l0aW9uTm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGIyLCBub2RlKSB7XG4gIGNvbnN0IG5vZGVFbGVtID0gZGIyLmdldEVsZW1lbnRCeUlkKG5vZGUuaWQpO1xuICBjb25zdCB4ID0gbm9kZS54IHx8IDA7XG4gIGNvbnN0IHkgPSBub2RlLnkgfHwgMDtcbiAgbm9kZUVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHggKyBcIixcIiArIHkgKyBcIilcIik7XG59LCBcInBvc2l0aW9uTm9kZVwiKTtcblxuLy8gc3JjL2RpYWdyYW1zL21pbmRtYXAvbWluZG1hcFJlbmRlcmVyLnRzXG5jeXRvc2NhcGUudXNlKGNvc2VCaWxrZW50KTtcbmFzeW5jIGZ1bmN0aW9uIGRyYXdOb2RlcyhkYjIsIHN2ZywgbWluZG1hcCwgc2VjdGlvbiwgY29uZikge1xuICBhd2FpdCBkcmF3Tm9kZShkYjIsIHN2ZywgbWluZG1hcCwgc2VjdGlvbiwgY29uZik7XG4gIGlmIChtaW5kbWFwLmNoaWxkcmVuKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtaW5kbWFwLmNoaWxkcmVuLm1hcChcbiAgICAgICAgKGNoaWxkLCBpbmRleCkgPT4gZHJhd05vZGVzKGRiMiwgc3ZnLCBjaGlsZCwgc2VjdGlvbiA8IDAgPyBpbmRleCA6IHNlY3Rpb24sIGNvbmYpXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGRyYXdOb2RlcywgXCJkcmF3Tm9kZXNcIik7XG5mdW5jdGlvbiBkcmF3RWRnZXMoZWRnZXNFbCwgY3kpIHtcbiAgY3kuZWRnZXMoKS5tYXAoKGVkZ2UsIGlkKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGVkZ2UuZGF0YSgpO1xuICAgIGlmIChlZGdlWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICBsb2cudHJhY2UoXCJFZGdlOiBcIiwgaWQsIGRhdGEpO1xuICAgICAgZWRnZXNFbC5pbnNlcnQoXCJwYXRoXCIpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBgTSAke2JvdW5kcy5zdGFydFh9LCR7Ym91bmRzLnN0YXJ0WX0gTCAke2JvdW5kcy5taWRYfSwke2JvdW5kcy5taWRZfSBMJHtib3VuZHMuZW5kWH0sJHtib3VuZHMuZW5kWX0gYFxuICAgICAgKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlIHNlY3Rpb24tZWRnZS1cIiArIGRhdGEuc2VjdGlvbiArIFwiIGVkZ2UtZGVwdGgtXCIgKyBkYXRhLmRlcHRoKTtcbiAgICB9XG4gIH0pO1xufVxuX19uYW1lKGRyYXdFZGdlcywgXCJkcmF3RWRnZXNcIik7XG5mdW5jdGlvbiBhZGROb2RlcyhtaW5kbWFwLCBjeSwgY29uZiwgbGV2ZWwpIHtcbiAgY3kuYWRkKHtcbiAgICBncm91cDogXCJub2Rlc1wiLFxuICAgIGRhdGE6IHtcbiAgICAgIGlkOiBtaW5kbWFwLmlkLnRvU3RyaW5nKCksXG4gICAgICBsYWJlbFRleHQ6IG1pbmRtYXAuZGVzY3IsXG4gICAgICBoZWlnaHQ6IG1pbmRtYXAuaGVpZ2h0LFxuICAgICAgd2lkdGg6IG1pbmRtYXAud2lkdGgsXG4gICAgICBsZXZlbCxcbiAgICAgIG5vZGVJZDogbWluZG1hcC5pZCxcbiAgICAgIHBhZGRpbmc6IG1pbmRtYXAucGFkZGluZyxcbiAgICAgIHR5cGU6IG1pbmRtYXAudHlwZVxuICAgIH0sXG4gICAgcG9zaXRpb246IHtcbiAgICAgIHg6IG1pbmRtYXAueCxcbiAgICAgIHk6IG1pbmRtYXAueVxuICAgIH1cbiAgfSk7XG4gIGlmIChtaW5kbWFwLmNoaWxkcmVuKSB7XG4gICAgbWluZG1hcC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgYWRkTm9kZXMoY2hpbGQsIGN5LCBjb25mLCBsZXZlbCArIDEpO1xuICAgICAgY3kuYWRkKHtcbiAgICAgICAgZ3JvdXA6IFwiZWRnZXNcIixcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGlkOiBgJHttaW5kbWFwLmlkfV8ke2NoaWxkLmlkfWAsXG4gICAgICAgICAgc291cmNlOiBtaW5kbWFwLmlkLFxuICAgICAgICAgIHRhcmdldDogY2hpbGQuaWQsXG4gICAgICAgICAgZGVwdGg6IGxldmVsLFxuICAgICAgICAgIHNlY3Rpb246IGNoaWxkLnNlY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbl9fbmFtZShhZGROb2RlcywgXCJhZGROb2Rlc1wiKTtcbmZ1bmN0aW9uIGxheW91dE1pbmRtYXAobm9kZSwgY29uZikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZW5kZXJFbCA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJpZFwiLCBcImN5XCIpLmF0dHIoXCJzdHlsZVwiLCBcImRpc3BsYXk6bm9uZVwiKTtcbiAgICBjb25zdCBjeSA9IGN5dG9zY2FwZSh7XG4gICAgICBjb250YWluZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3lcIiksXG4gICAgICAvLyBjb250YWluZXIgdG8gcmVuZGVyIGluXG4gICAgICBzdHlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwiZWRnZVwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBcImN1cnZlLXN0eWxlXCI6IFwiYmV6aWVyXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICByZW5kZXJFbC5yZW1vdmUoKTtcbiAgICBhZGROb2Rlcyhub2RlLCBjeSwgY29uZiwgMCk7XG4gICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgIG4ubGF5b3V0RGltZW5zaW9ucyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG4uZGF0YSgpO1xuICAgICAgICByZXR1cm4geyB3OiBkYXRhLndpZHRoLCBoOiBkYXRhLmhlaWdodCB9O1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBjeS5sYXlvdXQoe1xuICAgICAgbmFtZTogXCJjb3NlLWJpbGtlbnRcIixcbiAgICAgIC8vIEB0cy1pZ25vcmUgVHlwZXMgZm9yIGNvc2UtYmlsa2VudCBhcmUgbm90IGNvcnJlY3Q/XG4gICAgICBxdWFsaXR5OiBcInByb29mXCIsXG4gICAgICBzdHlsZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgYW5pbWF0ZTogZmFsc2VcbiAgICB9KS5ydW4oKTtcbiAgICBjeS5yZWFkeSgoZSkgPT4ge1xuICAgICAgbG9nLmluZm8oXCJSZWFkeVwiLCBlKTtcbiAgICAgIHJlc29sdmUoY3kpO1xuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShsYXlvdXRNaW5kbWFwLCBcImxheW91dE1pbmRtYXBcIik7XG5mdW5jdGlvbiBwb3NpdGlvbk5vZGVzKGRiMiwgY3kpIHtcbiAgY3kubm9kZXMoKS5tYXAoKG5vZGUsIGlkKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IG5vZGUuZGF0YSgpO1xuICAgIGRhdGEueCA9IG5vZGUucG9zaXRpb24oKS54O1xuICAgIGRhdGEueSA9IG5vZGUucG9zaXRpb24oKS55O1xuICAgIHBvc2l0aW9uTm9kZShkYjIsIGRhdGEpO1xuICAgIGNvbnN0IGVsID0gZGIyLmdldEVsZW1lbnRCeUlkKGRhdGEubm9kZUlkKTtcbiAgICBsb2cuaW5mbyhcIklkOlwiLCBpZCwgXCJQb3NpdGlvbjogKFwiLCBub2RlLnBvc2l0aW9uKCkueCwgXCIsIFwiLCBub2RlLnBvc2l0aW9uKCkueSwgXCIpXCIsIGRhdGEpO1xuICAgIGVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgYHRyYW5zbGF0ZSgke25vZGUucG9zaXRpb24oKS54IC0gZGF0YS53aWR0aCAvIDJ9LCAke25vZGUucG9zaXRpb24oKS55IC0gZGF0YS5oZWlnaHQgLyAyfSlgXG4gICAgKTtcbiAgICBlbC5hdHRyKFwiYXR0clwiLCBgYXBhLSR7aWR9KWApO1xuICB9KTtcbn1cbl9fbmFtZShwb3NpdGlvbk5vZGVzLCBcInBvc2l0aW9uTm9kZXNcIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikgPT4ge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtXFxuXCIgKyB0ZXh0KTtcbiAgY29uc3QgZGIyID0gZGlhZ09iai5kYjtcbiAgY29uc3QgbW0gPSBkYjIuZ2V0TWluZG1hcCgpO1xuICBpZiAoIW1tKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgY29uZi5odG1sTGFiZWxzID0gZmFsc2U7XG4gIGNvbnN0IHN2ZyA9IHNlbGVjdFN2Z0VsZW1lbnQoaWQpO1xuICBjb25zdCBlZGdlc0VsZW0gPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgZWRnZXNFbGVtLmF0dHIoXCJjbGFzc1wiLCBcIm1pbmRtYXAtZWRnZXNcIik7XG4gIGNvbnN0IG5vZGVzRWxlbSA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBub2Rlc0VsZW0uYXR0cihcImNsYXNzXCIsIFwibWluZG1hcC1ub2Rlc1wiKTtcbiAgYXdhaXQgZHJhd05vZGVzKGRiMiwgbm9kZXNFbGVtLCBtbSwgLTEsIGNvbmYpO1xuICBjb25zdCBjeSA9IGF3YWl0IGxheW91dE1pbmRtYXAobW0sIGNvbmYpO1xuICBkcmF3RWRnZXMoZWRnZXNFbGVtLCBjeSk7XG4gIHBvc2l0aW9uTm9kZXMoZGIyLCBjeSk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KFxuICAgIHZvaWQgMCxcbiAgICBzdmcsXG4gICAgY29uZi5taW5kbWFwPy5wYWRkaW5nID8/IGRlZmF1bHRDb25maWdfZGVmYXVsdC5taW5kbWFwLnBhZGRpbmcsXG4gICAgY29uZi5taW5kbWFwPy51c2VNYXhXaWR0aCA/PyBkZWZhdWx0Q29uZmlnX2RlZmF1bHQubWluZG1hcC51c2VNYXhXaWR0aFxuICApO1xufSwgXCJkcmF3XCIpO1xudmFyIG1pbmRtYXBSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvbWluZG1hcC9zdHlsZXMudHNcbmltcG9ydCB7IGRhcmtlbiwgbGlnaHRlbiwgaXNEYXJrIH0gZnJvbSBcImtocm9tYVwiO1xudmFyIGdlblNlY3Rpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4ge1xuICBsZXQgc2VjdGlvbnMgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gfHwgb3B0aW9uc1tcImNTY2FsZUludlwiICsgaV07XG4gICAgaWYgKGlzRGFyayhvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSkpIHtcbiAgICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gbGlnaHRlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSA9IGRhcmtlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIGNvbnN0IHN3ID0gXCJcIiArICgxNyAtIDMgKiBpKTtcbiAgICBzZWN0aW9ucyArPSBgXG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gcmVjdCwgLnNlY3Rpb24tJHtpIC0gMX0gcGF0aCwgLnNlY3Rpb24tJHtpIC0gMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2kgLSAxfSBwb2x5Z29uLCAuc2VjdGlvbi0ke2kgLSAxfSBwYXRoICB7XG4gICAgICBmaWxsOiAke29wdGlvbnNbXCJjU2NhbGVcIiArIGldfTtcbiAgICB9XG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gdGV4dCB7XG4gICAgIGZpbGw6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5ub2RlLWljb24tJHtpIC0gMX0ge1xuICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgY29sb3I6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5zZWN0aW9uLWVkZ2UtJHtpIC0gMX17XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZVwiICsgaV19O1xuICAgIH1cbiAgICAuZWRnZS1kZXB0aC0ke2kgLSAxfXtcbiAgICAgIHN0cm9rZS13aWR0aDogJHtzd307XG4gICAgfVxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IGxpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVJbnZcIiArIGldfSA7XG4gICAgICBzdHJva2Utd2lkdGg6IDM7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7XG4gICAgICBmaWxsOiBsaWdodGdyYXk7XG4gICAgfVxuICAgIC5kaXNhYmxlZCB0ZXh0IHtcbiAgICAgIGZpbGw6ICNlZmVmZWY7XG4gICAgfVxuICAgIGA7XG4gIH1cbiAgcmV0dXJuIHNlY3Rpb25zO1xufSwgXCJnZW5TZWN0aW9uc1wiKTtcbnZhciBnZXRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zKSA9PiBgXG4gIC5lZGdlIHtcbiAgICBzdHJva2Utd2lkdGg6IDM7XG4gIH1cbiAgJHtnZW5TZWN0aW9ucyhvcHRpb25zKX1cbiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0MH07XG4gIH1cbiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0QnJhbmNoTGFiZWwwfTtcbiAgfVxuICAuaWNvbi1jb250YWluZXIge1xuICAgIGhlaWdodDoxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuZWRnZSB7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuICAubWluZG1hcC1ub2RlLWxhYmVsIHtcbiAgICBkeTogMWVtO1xuICAgIGFsaWdubWVudC1iYXNlbGluZTogbWlkZGxlO1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvbWluZG1hcC9taW5kbWFwLWRlZmluaXRpb24udHNcbnZhciBkaWFncmFtID0ge1xuICBkYjogbWluZG1hcERiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBtaW5kbWFwUmVuZGVyZXJfZGVmYXVsdCxcbiAgcGFyc2VyOiBtaW5kbWFwX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3VtKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG4iLAogICAgImltcG9ydCB7bWlufSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuZnVuY3Rpb24gdGFyZ2V0RGVwdGgoZCkge1xuICByZXR1cm4gZC50YXJnZXQuZGVwdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZGVwdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodChub2RlLCBuKSB7XG4gIHJldHVybiBuIC0gMSAtIG5vZGUuaGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVzdGlmeShub2RlLCBuKSB7XG4gIHJldHVybiBub2RlLnNvdXJjZUxpbmtzLmxlbmd0aCA/IG5vZGUuZGVwdGggOiBuIC0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlcihub2RlKSB7XG4gIHJldHVybiBub2RlLnRhcmdldExpbmtzLmxlbmd0aCA/IG5vZGUuZGVwdGhcbiAgICAgIDogbm9kZS5zb3VyY2VMaW5rcy5sZW5ndGggPyBtaW4obm9kZS5zb3VyY2VMaW5rcywgdGFyZ2V0RGVwdGgpIC0gMVxuICAgICAgOiAwO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHttYXgsIG1pbiwgc3VtfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7anVzdGlmeX0gZnJvbSBcIi4vYWxpZ24uanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBhc2NlbmRpbmdTb3VyY2VCcmVhZHRoKGEsIGIpIHtcbiAgcmV0dXJuIGFzY2VuZGluZ0JyZWFkdGgoYS5zb3VyY2UsIGIuc291cmNlKSB8fCBhLmluZGV4IC0gYi5pbmRleDtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nVGFyZ2V0QnJlYWR0aChhLCBiKSB7XG4gIHJldHVybiBhc2NlbmRpbmdCcmVhZHRoKGEudGFyZ2V0LCBiLnRhcmdldCkgfHwgYS5pbmRleCAtIGIuaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0JyZWFkdGgoYSwgYikge1xuICByZXR1cm4gYS55MCAtIGIueTA7XG59XG5cbmZ1bmN0aW9uIHZhbHVlKGQpIHtcbiAgcmV0dXJuIGQudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRJZChkKSB7XG4gIHJldHVybiBkLmluZGV4O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Tm9kZXMoZ3JhcGgpIHtcbiAgcmV0dXJuIGdyYXBoLm5vZGVzO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0TGlua3MoZ3JhcGgpIHtcbiAgcmV0dXJuIGdyYXBoLmxpbmtzO1xufVxuXG5mdW5jdGlvbiBmaW5kKG5vZGVCeUlkLCBpZCkge1xuICBjb25zdCBub2RlID0gbm9kZUJ5SWQuZ2V0KGlkKTtcbiAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIiArIGlkKTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVMaW5rQnJlYWR0aHMoe25vZGVzfSkge1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBsZXQgeTAgPSBub2RlLnkwO1xuICAgIGxldCB5MSA9IHkwO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBub2RlLnNvdXJjZUxpbmtzKSB7XG4gICAgICBsaW5rLnkwID0geTAgKyBsaW5rLndpZHRoIC8gMjtcbiAgICAgIHkwICs9IGxpbmsud2lkdGg7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGluayBvZiBub2RlLnRhcmdldExpbmtzKSB7XG4gICAgICBsaW5rLnkxID0geTEgKyBsaW5rLndpZHRoIC8gMjtcbiAgICAgIHkxICs9IGxpbmsud2lkdGg7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNhbmtleSgpIHtcbiAgbGV0IHgwID0gMCwgeTAgPSAwLCB4MSA9IDEsIHkxID0gMTsgLy8gZXh0ZW50XG4gIGxldCBkeCA9IDI0OyAvLyBub2RlV2lkdGhcbiAgbGV0IGR5ID0gOCwgcHk7IC8vIG5vZGVQYWRkaW5nXG4gIGxldCBpZCA9IGRlZmF1bHRJZDtcbiAgbGV0IGFsaWduID0ganVzdGlmeTtcbiAgbGV0IHNvcnQ7XG4gIGxldCBsaW5rU29ydDtcbiAgbGV0IG5vZGVzID0gZGVmYXVsdE5vZGVzO1xuICBsZXQgbGlua3MgPSBkZWZhdWx0TGlua3M7XG4gIGxldCBpdGVyYXRpb25zID0gNjtcblxuICBmdW5jdGlvbiBzYW5rZXkoKSB7XG4gICAgY29uc3QgZ3JhcGggPSB7bm9kZXM6IG5vZGVzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyksIGxpbmtzOiBsaW5rcy5hcHBseShudWxsLCBhcmd1bWVudHMpfTtcbiAgICBjb21wdXRlTm9kZUxpbmtzKGdyYXBoKTtcbiAgICBjb21wdXRlTm9kZVZhbHVlcyhncmFwaCk7XG4gICAgY29tcHV0ZU5vZGVEZXB0aHMoZ3JhcGgpO1xuICAgIGNvbXB1dGVOb2RlSGVpZ2h0cyhncmFwaCk7XG4gICAgY29tcHV0ZU5vZGVCcmVhZHRocyhncmFwaCk7XG4gICAgY29tcHV0ZUxpbmtCcmVhZHRocyhncmFwaCk7XG4gICAgcmV0dXJuIGdyYXBoO1xuICB9XG5cbiAgc2Fua2V5LnVwZGF0ZSA9IGZ1bmN0aW9uKGdyYXBoKSB7XG4gICAgY29tcHV0ZUxpbmtCcmVhZHRocyhncmFwaCk7XG4gICAgcmV0dXJuIGdyYXBoO1xuICB9O1xuXG4gIHNhbmtleS5ub2RlSWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBzYW5rZXkpIDogaWQ7XG4gIH07XG5cbiAgc2Fua2V5Lm5vZGVBbGlnbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbGlnbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIHNhbmtleSkgOiBhbGlnbjtcbiAgfTtcblxuICBzYW5rZXkubm9kZVNvcnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydCA9IF8sIHNhbmtleSkgOiBzb3J0O1xuICB9O1xuXG4gIHNhbmtleS5ub2RlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHggPSArXywgc2Fua2V5KSA6IGR4O1xuICB9O1xuXG4gIHNhbmtleS5ub2RlUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkeSA9IHB5ID0gK18sIHNhbmtleSkgOiBkeTtcbiAgfTtcblxuICBzYW5rZXkubm9kZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBzYW5rZXkpIDogbm9kZXM7XG4gIH07XG5cbiAgc2Fua2V5LmxpbmtzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGxpbmtzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgc2Fua2V5KSA6IGxpbmtzO1xuICB9O1xuXG4gIHNhbmtleS5saW5rU29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChsaW5rU29ydCA9IF8sIHNhbmtleSkgOiBsaW5rU29ydDtcbiAgfTtcblxuICBzYW5rZXkuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9IHkwID0gMCwgeDEgPSArX1swXSwgeTEgPSArX1sxXSwgc2Fua2V5KSA6IFt4MSAtIHgwLCB5MSAtIHkwXTtcbiAgfTtcblxuICBzYW5rZXkuZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gK19bMF1bMF0sIHgxID0gK19bMV1bMF0sIHkwID0gK19bMF1bMV0sIHkxID0gK19bMV1bMV0sIHNhbmtleSkgOiBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgfTtcblxuICBzYW5rZXkuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIHNhbmtleSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNvbXB1dGVOb2RlTGlua3Moe25vZGVzLCBsaW5rc30pIHtcbiAgICBmb3IgKGNvbnN0IFtpLCBub2RlXSBvZiBub2Rlcy5lbnRyaWVzKCkpIHtcbiAgICAgIG5vZGUuaW5kZXggPSBpO1xuICAgICAgbm9kZS5zb3VyY2VMaW5rcyA9IFtdO1xuICAgICAgbm9kZS50YXJnZXRMaW5rcyA9IFtdO1xuICAgIH1cbiAgICBjb25zdCBub2RlQnlJZCA9IG5ldyBNYXAobm9kZXMubWFwKChkLCBpKSA9PiBbaWQoZCwgaSwgbm9kZXMpLCBkXSkpO1xuICAgIGZvciAoY29uc3QgW2ksIGxpbmtdIG9mIGxpbmtzLmVudHJpZXMoKSkge1xuICAgICAgbGluay5pbmRleCA9IGk7XG4gICAgICBsZXQge3NvdXJjZSwgdGFyZ2V0fSA9IGxpbms7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIikgc291cmNlID0gbGluay5zb3VyY2UgPSBmaW5kKG5vZGVCeUlkLCBzb3VyY2UpO1xuICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHRhcmdldCA9IGxpbmsudGFyZ2V0ID0gZmluZChub2RlQnlJZCwgdGFyZ2V0KTtcbiAgICAgIHNvdXJjZS5zb3VyY2VMaW5rcy5wdXNoKGxpbmspO1xuICAgICAgdGFyZ2V0LnRhcmdldExpbmtzLnB1c2gobGluayk7XG4gICAgfVxuICAgIGlmIChsaW5rU29ydCAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHtzb3VyY2VMaW5rcywgdGFyZ2V0TGlua3N9IG9mIG5vZGVzKSB7XG4gICAgICAgIHNvdXJjZUxpbmtzLnNvcnQobGlua1NvcnQpO1xuICAgICAgICB0YXJnZXRMaW5rcy5zb3J0KGxpbmtTb3J0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlTm9kZVZhbHVlcyh7bm9kZXN9KSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBub2RlLnZhbHVlID0gbm9kZS5maXhlZFZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IE1hdGgubWF4KHN1bShub2RlLnNvdXJjZUxpbmtzLCB2YWx1ZSksIHN1bShub2RlLnRhcmdldExpbmtzLCB2YWx1ZSkpXG4gICAgICAgICAgOiBub2RlLmZpeGVkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVEZXB0aHMoe25vZGVzfSkge1xuICAgIGNvbnN0IG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgbGV0IGN1cnJlbnQgPSBuZXcgU2V0KG5vZGVzKTtcbiAgICBsZXQgbmV4dCA9IG5ldyBTZXQ7XG4gICAgbGV0IHggPSAwO1xuICAgIHdoaWxlIChjdXJyZW50LnNpemUpIHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjdXJyZW50KSB7XG4gICAgICAgIG5vZGUuZGVwdGggPSB4O1xuICAgICAgICBmb3IgKGNvbnN0IHt0YXJnZXR9IG9mIG5vZGUuc291cmNlTGlua3MpIHtcbiAgICAgICAgICBuZXh0LmFkZCh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKyt4ID4gbikgdGhyb3cgbmV3IEVycm9yKFwiY2lyY3VsYXIgbGlua1wiKTtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgICAgbmV4dCA9IG5ldyBTZXQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVIZWlnaHRzKHtub2Rlc30pIHtcbiAgICBjb25zdCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIGxldCBjdXJyZW50ID0gbmV3IFNldChub2Rlcyk7XG4gICAgbGV0IG5leHQgPSBuZXcgU2V0O1xuICAgIGxldCB4ID0gMDtcbiAgICB3aGlsZSAoY3VycmVudC5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgY3VycmVudCkge1xuICAgICAgICBub2RlLmhlaWdodCA9IHg7XG4gICAgICAgIGZvciAoY29uc3Qge3NvdXJjZX0gb2Ygbm9kZS50YXJnZXRMaW5rcykge1xuICAgICAgICAgIG5leHQuYWRkKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgrK3ggPiBuKSB0aHJvdyBuZXcgRXJyb3IoXCJjaXJjdWxhciBsaW5rXCIpO1xuICAgICAgY3VycmVudCA9IG5leHQ7XG4gICAgICBuZXh0ID0gbmV3IFNldDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlTm9kZUxheWVycyh7bm9kZXN9KSB7XG4gICAgY29uc3QgeCA9IG1heChub2RlcywgZCA9PiBkLmRlcHRoKSArIDE7XG4gICAgY29uc3Qga3ggPSAoeDEgLSB4MCAtIGR4KSAvICh4IC0gMSk7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheSh4KTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGNvbnN0IGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih4IC0gMSwgTWF0aC5mbG9vcihhbGlnbi5jYWxsKG51bGwsIG5vZGUsIHgpKSkpO1xuICAgICAgbm9kZS5sYXllciA9IGk7XG4gICAgICBub2RlLngwID0geDAgKyBpICoga3g7XG4gICAgICBub2RlLngxID0gbm9kZS54MCArIGR4O1xuICAgICAgaWYgKGNvbHVtbnNbaV0pIGNvbHVtbnNbaV0ucHVzaChub2RlKTtcbiAgICAgIGVsc2UgY29sdW1uc1tpXSA9IFtub2RlXTtcbiAgICB9XG4gICAgaWYgKHNvcnQpIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbi5zb3J0KHNvcnQpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVOb2RlQnJlYWR0aHMoY29sdW1ucykge1xuICAgIGNvbnN0IGt5ID0gbWluKGNvbHVtbnMsIGMgPT4gKHkxIC0geTAgLSAoYy5sZW5ndGggLSAxKSAqIHB5KSAvIHN1bShjLCB2YWx1ZSkpO1xuICAgIGZvciAoY29uc3Qgbm9kZXMgb2YgY29sdW1ucykge1xuICAgICAgbGV0IHkgPSB5MDtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBub2RlLnkwID0geTtcbiAgICAgICAgbm9kZS55MSA9IHkgKyBub2RlLnZhbHVlICoga3k7XG4gICAgICAgIHkgPSBub2RlLnkxICsgcHk7XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBub2RlLnNvdXJjZUxpbmtzKSB7XG4gICAgICAgICAgbGluay53aWR0aCA9IGxpbmsudmFsdWUgKiBreTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgeSA9ICh5MSAtIHkgKyBweSkgLyAobm9kZXMubGVuZ3RoICsgMSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgbm9kZS55MCArPSB5ICogKGkgKyAxKTtcbiAgICAgICAgbm9kZS55MSArPSB5ICogKGkgKyAxKTtcbiAgICAgIH1cbiAgICAgIHJlb3JkZXJMaW5rcyhub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVCcmVhZHRocyhncmFwaCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb21wdXRlTm9kZUxheWVycyhncmFwaCk7XG4gICAgcHkgPSBNYXRoLm1pbihkeSwgKHkxIC0geTApIC8gKG1heChjb2x1bW5zLCBjID0+IGMubGVuZ3RoKSAtIDEpKTtcbiAgICBpbml0aWFsaXplTm9kZUJyZWFkdGhzKGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgKytpKSB7XG4gICAgICBjb25zdCBhbHBoYSA9IE1hdGgucG93KDAuOTksIGkpO1xuICAgICAgY29uc3QgYmV0YSA9IE1hdGgubWF4KDEgLSBhbHBoYSwgKGkgKyAxKSAvIGl0ZXJhdGlvbnMpO1xuICAgICAgcmVsYXhSaWdodFRvTGVmdChjb2x1bW5zLCBhbHBoYSwgYmV0YSk7XG4gICAgICByZWxheExlZnRUb1JpZ2h0KGNvbHVtbnMsIGFscGhhLCBiZXRhKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXBvc2l0aW9uIGVhY2ggbm9kZSBiYXNlZCBvbiBpdHMgaW5jb21pbmcgKHRhcmdldCkgbGlua3MuXG4gIGZ1bmN0aW9uIHJlbGF4TGVmdFRvUmlnaHQoY29sdW1ucywgYWxwaGEsIGJldGEpIHtcbiAgICBmb3IgKGxldCBpID0gMSwgbiA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2ldO1xuICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgY29sdW1uKSB7XG4gICAgICAgIGxldCB5ID0gMDtcbiAgICAgICAgbGV0IHcgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHtzb3VyY2UsIHZhbHVlfSBvZiB0YXJnZXQudGFyZ2V0TGlua3MpIHtcbiAgICAgICAgICBsZXQgdiA9IHZhbHVlICogKHRhcmdldC5sYXllciAtIHNvdXJjZS5sYXllcik7XG4gICAgICAgICAgeSArPSB0YXJnZXRUb3Aoc291cmNlLCB0YXJnZXQpICogdjtcbiAgICAgICAgICB3ICs9IHY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEodyA+IDApKSBjb250aW51ZTtcbiAgICAgICAgbGV0IGR5ID0gKHkgLyB3IC0gdGFyZ2V0LnkwKSAqIGFscGhhO1xuICAgICAgICB0YXJnZXQueTAgKz0gZHk7XG4gICAgICAgIHRhcmdldC55MSArPSBkeTtcbiAgICAgICAgcmVvcmRlck5vZGVMaW5rcyh0YXJnZXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnQgPT09IHVuZGVmaW5lZCkgY29sdW1uLnNvcnQoYXNjZW5kaW5nQnJlYWR0aCk7XG4gICAgICByZXNvbHZlQ29sbGlzaW9ucyhjb2x1bW4sIGJldGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlcG9zaXRpb24gZWFjaCBub2RlIGJhc2VkIG9uIGl0cyBvdXRnb2luZyAoc291cmNlKSBsaW5rcy5cbiAgZnVuY3Rpb24gcmVsYXhSaWdodFRvTGVmdChjb2x1bW5zLCBhbHBoYSwgYmV0YSkge1xuICAgIGZvciAobGV0IG4gPSBjb2x1bW5zLmxlbmd0aCwgaSA9IG4gLSAyOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpXTtcbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIGNvbHVtbikge1xuICAgICAgICBsZXQgeSA9IDA7XG4gICAgICAgIGxldCB3ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCB7dGFyZ2V0LCB2YWx1ZX0gb2Ygc291cmNlLnNvdXJjZUxpbmtzKSB7XG4gICAgICAgICAgbGV0IHYgPSB2YWx1ZSAqICh0YXJnZXQubGF5ZXIgLSBzb3VyY2UubGF5ZXIpO1xuICAgICAgICAgIHkgKz0gc291cmNlVG9wKHNvdXJjZSwgdGFyZ2V0KSAqIHY7XG4gICAgICAgICAgdyArPSB2O1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHcgPiAwKSkgY29udGludWU7XG4gICAgICAgIGxldCBkeSA9ICh5IC8gdyAtIHNvdXJjZS55MCkgKiBhbHBoYTtcbiAgICAgICAgc291cmNlLnkwICs9IGR5O1xuICAgICAgICBzb3VyY2UueTEgKz0gZHk7XG4gICAgICAgIHJlb3JkZXJOb2RlTGlua3Moc291cmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3J0ID09PSB1bmRlZmluZWQpIGNvbHVtbi5zb3J0KGFzY2VuZGluZ0JyZWFkdGgpO1xuICAgICAgcmVzb2x2ZUNvbGxpc2lvbnMoY29sdW1uLCBiZXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlQ29sbGlzaW9ucyhub2RlcywgYWxwaGEpIHtcbiAgICBjb25zdCBpID0gbm9kZXMubGVuZ3RoID4+IDE7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5vZGVzW2ldO1xuICAgIHJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3Aobm9kZXMsIHN1YmplY3QueTAgLSBweSwgaSAtIDEsIGFscGhhKTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tKG5vZGVzLCBzdWJqZWN0LnkxICsgcHksIGkgKyAxLCBhbHBoYSk7XG4gICAgcmVzb2x2ZUNvbGxpc2lvbnNCb3R0b21Ub1RvcChub2RlcywgeTEsIG5vZGVzLmxlbmd0aCAtIDEsIGFscGhhKTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tKG5vZGVzLCB5MCwgMCwgYWxwaGEpO1xuICB9XG5cbiAgLy8gUHVzaCBhbnkgb3ZlcmxhcHBpbmcgbm9kZXMgZG93bi5cbiAgZnVuY3Rpb24gcmVzb2x2ZUNvbGxpc2lvbnNUb3BUb0JvdHRvbShub2RlcywgeSwgaSwgYWxwaGEpIHtcbiAgICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICBjb25zdCBkeSA9ICh5IC0gbm9kZS55MCkgKiBhbHBoYTtcbiAgICAgIGlmIChkeSA+IDFlLTYpIG5vZGUueTAgKz0gZHksIG5vZGUueTEgKz0gZHk7XG4gICAgICB5ID0gbm9kZS55MSArIHB5O1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1c2ggYW55IG92ZXJsYXBwaW5nIG5vZGVzIHVwLlxuICBmdW5jdGlvbiByZXNvbHZlQ29sbGlzaW9uc0JvdHRvbVRvVG9wKG5vZGVzLCB5LCBpLCBhbHBoYSkge1xuICAgIGZvciAoOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgY29uc3QgZHkgPSAobm9kZS55MSAtIHkpICogYWxwaGE7XG4gICAgICBpZiAoZHkgPiAxZS02KSBub2RlLnkwIC09IGR5LCBub2RlLnkxIC09IGR5O1xuICAgICAgeSA9IG5vZGUueTAgLSBweTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW9yZGVyTm9kZUxpbmtzKHtzb3VyY2VMaW5rcywgdGFyZ2V0TGlua3N9KSB7XG4gICAgaWYgKGxpbmtTb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qge3NvdXJjZToge3NvdXJjZUxpbmtzfX0gb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgICAgc291cmNlTGlua3Muc29ydChhc2NlbmRpbmdUYXJnZXRCcmVhZHRoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qge3RhcmdldDoge3RhcmdldExpbmtzfX0gb2Ygc291cmNlTGlua3MpIHtcbiAgICAgICAgdGFyZ2V0TGlua3Muc29ydChhc2NlbmRpbmdTb3VyY2VCcmVhZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW9yZGVyTGlua3Mobm9kZXMpIHtcbiAgICBpZiAobGlua1NvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB7c291cmNlTGlua3MsIHRhcmdldExpbmtzfSBvZiBub2Rlcykge1xuICAgICAgICBzb3VyY2VMaW5rcy5zb3J0KGFzY2VuZGluZ1RhcmdldEJyZWFkdGgpO1xuICAgICAgICB0YXJnZXRMaW5rcy5zb3J0KGFzY2VuZGluZ1NvdXJjZUJyZWFkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHRhcmdldC55MCB0aGF0IHdvdWxkIHByb2R1Y2UgYW4gaWRlYWwgbGluayBmcm9tIHNvdXJjZSB0byB0YXJnZXQuXG4gIGZ1bmN0aW9uIHRhcmdldFRvcChzb3VyY2UsIHRhcmdldCkge1xuICAgIGxldCB5ID0gc291cmNlLnkwIC0gKHNvdXJjZS5zb3VyY2VMaW5rcy5sZW5ndGggLSAxKSAqIHB5IC8gMjtcbiAgICBmb3IgKGNvbnN0IHt0YXJnZXQ6IG5vZGUsIHdpZHRofSBvZiBzb3VyY2Uuc291cmNlTGlua3MpIHtcbiAgICAgIGlmIChub2RlID09PSB0YXJnZXQpIGJyZWFrO1xuICAgICAgeSArPSB3aWR0aCArIHB5O1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHtzb3VyY2U6IG5vZGUsIHdpZHRofSBvZiB0YXJnZXQudGFyZ2V0TGlua3MpIHtcbiAgICAgIGlmIChub2RlID09PSBzb3VyY2UpIGJyZWFrO1xuICAgICAgeSAtPSB3aWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBzb3VyY2UueTAgdGhhdCB3b3VsZCBwcm9kdWNlIGFuIGlkZWFsIGxpbmsgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0LlxuICBmdW5jdGlvbiBzb3VyY2VUb3Aoc291cmNlLCB0YXJnZXQpIHtcbiAgICBsZXQgeSA9IHRhcmdldC55MCAtICh0YXJnZXQudGFyZ2V0TGlua3MubGVuZ3RoIC0gMSkgKiBweSAvIDI7XG4gICAgZm9yIChjb25zdCB7c291cmNlOiBub2RlLCB3aWR0aH0gb2YgdGFyZ2V0LnRhcmdldExpbmtzKSB7XG4gICAgICBpZiAobm9kZSA9PT0gc291cmNlKSBicmVhaztcbiAgICAgIHkgKz0gd2lkdGggKyBweTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7dGFyZ2V0OiBub2RlLCB3aWR0aH0gb2Ygc291cmNlLnNvdXJjZUxpbmtzKSB7XG4gICAgICBpZiAobm9kZSA9PT0gdGFyZ2V0KSBicmVhaztcbiAgICAgIHkgLT0gd2lkdGg7XG4gICAgfVxuICAgIHJldHVybiB5O1xuICB9XG5cbiAgcmV0dXJuIHNhbmtleTtcbn1cbiIsCiAgICAidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcbiAgICB2YXIgZHggPSByICogTWF0aC5jb3MoYTApLFxuICAgICAgICBkeSA9IHIgKiBNYXRoLnNpbihhMCksXG4gICAgICAgIHgwID0geCArIGR4LFxuICAgICAgICB5MCA9IHkgKyBkeSxcbiAgICAgICAgY3cgPSAxIF4gY2N3LFxuICAgICAgICBkYSA9IGNjdyA/IGEwIC0gYTEgOiBhMSAtIGEwO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgwLHkwKSBub3QgY29pbmNpZGVudCB3aXRoIHRoZSBwcmV2aW91cyBwb2ludD8gTGluZSB0byAoeDAseTApLlxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuX3gxIC0geDApID4gZXBzaWxvbiB8fCBNYXRoLmFicyh0aGlzLl95MSAtIHkwKSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAoeCAtIGR4KSArIFwiLFwiICsgKHkgLSBkeSkgKyBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geDApICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MCk7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgbm9uLWVtcHR5PyBEcmF3IGFuIGFyYyFcbiAgICBlbHNlIGlmIChkYSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLFwiICsgKCsoZGEgPj0gcGkpKSArIFwiLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHggKyByICogTWF0aC5jb3MoYTEpKSArIFwiLFwiICsgKHRoaXMuX3kxID0geSArIHIgKiBNYXRoLnNpbihhMSkpO1xuICAgIH1cbiAgfSxcbiAgcmVjdDogZnVuY3Rpb24oeCwgeSwgdywgaCkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KSArIFwiaFwiICsgKCt3KSArIFwidlwiICsgKCtoKSArIFwiaFwiICsgKC13KSArIFwiWlwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcGF0aDtcbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLAogICAgImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLAogICAgImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuLi9wb2ludC5qc1wiO1xuaW1wb3J0IHBvaW50UmFkaWFsIGZyb20gXCIuLi9wb2ludFJhZGlhbC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5rU291cmNlKGQpIHtcbiAgcmV0dXJuIGQuc291cmNlO1xufVxuXG5mdW5jdGlvbiBsaW5rVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIGQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBsaW5rKGN1cnZlKSB7XG4gIHZhciBzb3VyY2UgPSBsaW5rU291cmNlLFxuICAgICAgdGFyZ2V0ID0gbGlua1RhcmdldCxcbiAgICAgIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICB2YXIgYnVmZmVyLCBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBzID0gc291cmNlLmFwcGx5KHRoaXMsIGFyZ3YpLCB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICBjdXJ2ZShjb250ZXh0LCAreC5hcHBseSh0aGlzLCAoYXJndlswXSA9IHMsIGFyZ3YpKSwgK3kuYXBwbHkodGhpcywgYXJndiksICt4LmFwcGx5KHRoaXMsIChhcmd2WzBdID0gdCwgYXJndikpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5rLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCBsaW5rKSA6IHNvdXJjZTtcbiAgfTtcblxuICBsaW5rLnRhcmdldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXJnZXQgPSBfLCBsaW5rKSA6IHRhcmdldDtcbiAgfTtcblxuICBsaW5rLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5rKSA6IHg7XG4gIH07XG5cbiAgbGluay55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB5O1xuICB9O1xuXG4gIGxpbmsuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgbGluaykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUhvcml6b250YWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwID0gKHgwICsgeDEpIC8gMiwgeTAsIHgwLCB5MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gY3VydmVWZXJ0aWNhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICBjb250ZXh0LmJlemllckN1cnZlVG8oeDAsIHkwID0gKHkwICsgeTEpIC8gMiwgeDEsIHkwLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZVJhZGlhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcDAgPSBwb2ludFJhZGlhbCh4MCwgeTApLFxuICAgICAgcDEgPSBwb2ludFJhZGlhbCh4MCwgeTAgPSAoeTAgKyB5MSkgLyAyKSxcbiAgICAgIHAyID0gcG9pbnRSYWRpYWwoeDEsIHkwKSxcbiAgICAgIHAzID0gcG9pbnRSYWRpYWwoeDEsIHkxKTtcbiAgY29udGV4dC5tb3ZlVG8ocDBbMF0sIHAwWzFdKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAxWzBdLCBwMVsxXSwgcDJbMF0sIHAyWzFdLCBwM1swXSwgcDNbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0hvcml6b250YWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlSG9yaXpvbnRhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVmVydGljYWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlVmVydGljYWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1JhZGlhbCgpIHtcbiAgdmFyIGwgPSBsaW5rKGN1cnZlUmFkaWFsKTtcbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG4gIHJldHVybiBsO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgYXJjfSBmcm9tIFwiLi9hcmMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhcmVhfSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGluZX0gZnJvbSBcIi4vbGluZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZX0gZnJvbSBcIi4vcGllLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxBcmVhfSBmcm9tIFwiLi9hcmVhUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbEFyZWEgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsaW5lUmFkaWFsLCBkZWZhdWx0IGFzIHJhZGlhbExpbmV9IGZyb20gXCIuL2xpbmVSYWRpYWwuanNcIjsgLy8gTm90ZTogcmFkaWFsTGluZSBpcyBkZXByZWNhdGVkIVxuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50UmFkaWFsfSBmcm9tIFwiLi9wb2ludFJhZGlhbC5qc1wiO1xuZXhwb3J0IHtsaW5rSG9yaXpvbnRhbCwgbGlua1ZlcnRpY2FsLCBsaW5rUmFkaWFsfSBmcm9tIFwiLi9saW5rL2luZGV4LmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2wsIHN5bWJvbHN9IGZyb20gXCIuL3N5bWJvbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFN0YXJ9IGZyb20gXCIuL3N5bWJvbC9zdGFyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGV9IGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFd5ZX0gZnJvbSBcIi4vc3ltYm9sL3d5ZS5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vY3VydmUvYmFzaXNDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzT3Blbn0gZnJvbSBcIi4vY3VydmUvYmFzaXNPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc30gZnJvbSBcIi4vY3VydmUvYmFzaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJ1bmRsZX0gZnJvbSBcIi4vY3VydmUvYnVuZGxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21DbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21PcGVufSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbX0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTGluZWFyQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9saW5lYXJDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhcn0gZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5leHBvcnQge21vbm90b25lWCBhcyBjdXJ2ZU1vbm90b25lWCwgbW9ub3RvbmVZIGFzIGN1cnZlTW9ub3RvbmVZfSBmcm9tIFwiLi9jdXJ2ZS9tb25vdG9uZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTmF0dXJhbH0gZnJvbSBcIi4vY3VydmUvbmF0dXJhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlU3RlcCwgc3RlcEFmdGVyIGFzIGN1cnZlU3RlcEFmdGVyLCBzdGVwQmVmb3JlIGFzIGN1cnZlU3RlcEJlZm9yZX0gZnJvbSBcIi4vY3VydmUvc3RlcC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2t9IGZyb20gXCIuL3N0YWNrLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRFeHBhbmR9IGZyb20gXCIuL29mZnNldC9leHBhbmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldERpdmVyZ2luZ30gZnJvbSBcIi4vb2Zmc2V0L2RpdmVyZ2luZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0Tm9uZX0gZnJvbSBcIi4vb2Zmc2V0L25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldFNpbGhvdWV0dGV9IGZyb20gXCIuL29mZnNldC9zaWxob3VldHRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRXaWdnbGV9IGZyb20gXCIuL29mZnNldC93aWdnbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXBwZWFyYW5jZX0gZnJvbSBcIi4vb3JkZXIvYXBwZWFyYW5jZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJBc2NlbmRpbmd9IGZyb20gXCIuL29yZGVyL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJEZXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckluc2lkZU91dH0gZnJvbSBcIi4vb3JkZXIvaW5zaWRlT3V0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlck5vbmV9IGZyb20gXCIuL29yZGVyL25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyUmV2ZXJzZX0gZnJvbSBcIi4vb3JkZXIvcmV2ZXJzZS5qc1wiO1xuIiwKICAgICJpbXBvcnQge2xpbmtIb3Jpem9udGFsfSBmcm9tIFwiZDMtc2hhcGVcIjtcblxuZnVuY3Rpb24gaG9yaXpvbnRhbFNvdXJjZShkKSB7XG4gIHJldHVybiBbZC5zb3VyY2UueDEsIGQueTBdO1xufVxuXG5mdW5jdGlvbiBob3Jpem9udGFsVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIFtkLnRhcmdldC54MCwgZC55MV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbGlua0hvcml6b250YWwoKVxuICAgICAgLnNvdXJjZShob3Jpem9udGFsU291cmNlKVxuICAgICAgLnRhcmdldChob3Jpem9udGFsVGFyZ2V0KTtcbn1cbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHNhbmtleX0gZnJvbSBcIi4vc2Fua2V5LmpzXCI7XG5leHBvcnQge2NlbnRlciBhcyBzYW5rZXlDZW50ZXIsIGxlZnQgYXMgc2Fua2V5TGVmdCwgcmlnaHQgYXMgc2Fua2V5UmlnaHQsIGp1c3RpZnkgYXMgc2Fua2V5SnVzdGlmeX0gZnJvbSBcIi4vYWxpZ24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzYW5rZXlMaW5rSG9yaXpvbnRhbH0gZnJvbSBcIi4vc2Fua2V5TGlua0hvcml6b250YWwuanNcIjtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGRlZmF1bHRDb25maWcyIGFzIGRlZmF1bHRDb25maWcsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIHNldHVwR3JhcGhWaWV3Ym94XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2Fua2V5L3BhcnNlci9zYW5rZXkuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCA5XSwgJFYxID0gWzEsIDEwXSwgJFYyID0gWzEsIDUsIDEwLCAxMl07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIlNBTktFWVwiOiA0LCBcIk5FV0xJTkVcIjogNSwgXCJjc3ZcIjogNiwgXCJvcHRfZW9mXCI6IDcsIFwicmVjb3JkXCI6IDgsIFwiY3N2X3RhaWxcIjogOSwgXCJFT0ZcIjogMTAsIFwiZmllbGRbc291cmNlXVwiOiAxMSwgXCJDT01NQVwiOiAxMiwgXCJmaWVsZFt0YXJnZXRdXCI6IDEzLCBcImZpZWxkW3ZhbHVlXVwiOiAxNCwgXCJmaWVsZFwiOiAxNSwgXCJlc2NhcGVkXCI6IDE2LCBcIm5vbl9lc2NhcGVkXCI6IDE3LCBcIkRRVU9URVwiOiAxOCwgXCJFU0NBUEVEX1RFWFRcIjogMTksIFwiTk9OX0VTQ0FQRURfVEVYVFwiOiAyMCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiU0FOS0VZXCIsIDU6IFwiTkVXTElORVwiLCAxMDogXCJFT0ZcIiwgMTE6IFwiZmllbGRbc291cmNlXVwiLCAxMjogXCJDT01NQVwiLCAxMzogXCJmaWVsZFt0YXJnZXRdXCIsIDE0OiBcImZpZWxkW3ZhbHVlXVwiLCAxODogXCJEUVVPVEVcIiwgMTk6IFwiRVNDQVBFRF9URVhUXCIsIDIwOiBcIk5PTl9FU0NBUEVEX1RFWFRcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCA0XSwgWzYsIDJdLCBbOSwgMl0sIFs5LCAwXSwgWzcsIDFdLCBbNywgMF0sIFs4LCA1XSwgWzE1LCAxXSwgWzE1LCAxXSwgWzE2LCAzXSwgWzE3LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSB5eS5maW5kT3JDcmVhdGVOb2RlKCQkWyQwIC0gNF0udHJpbSgpLnJlcGxhY2VBbGwoJ1wiXCInLCAnXCInKSk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0geXkuZmluZE9yQ3JlYXRlTm9kZSgkJFskMCAtIDJdLnRyaW0oKS5yZXBsYWNlQWxsKCdcIlwiJywgJ1wiJykpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdCgkJFskMF0udHJpbSgpKTtcbiAgICAgICAgICB5eS5hZGRMaW5rKHNvdXJjZSwgdGFyZ2V0LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiBbMSwgMl0gfSwgeyAxOiBbM10gfSwgeyA1OiBbMSwgM10gfSwgeyA2OiA0LCA4OiA1LCAxNTogNiwgMTY6IDcsIDE3OiA4LCAxODogJFYwLCAyMDogJFYxIH0sIHsgMTogWzIsIDZdLCA3OiAxMSwgMTA6IFsxLCAxMl0gfSwgbygkVjEsIFsyLCA0XSwgeyA5OiAxMywgNTogWzEsIDE0XSB9KSwgeyAxMjogWzEsIDE1XSB9LCBvKCRWMiwgWzIsIDhdKSwgbygkVjIsIFsyLCA5XSksIHsgMTk6IFsxLCAxNl0gfSwgbygkVjIsIFsyLCAxMV0pLCB7IDE6IFsyLCAxXSB9LCB7IDE6IFsyLCA1XSB9LCBvKCRWMSwgWzIsIDJdKSwgeyA2OiAxNywgODogNSwgMTU6IDYsIDE2OiA3LCAxNzogOCwgMTg6ICRWMCwgMjA6ICRWMSB9LCB7IDE1OiAxOCwgMTY6IDcsIDE3OiA4LCAxODogJFYwLCAyMDogJFYxIH0sIHsgMTg6IFsxLCAxOV0gfSwgbygkVjEsIFsyLCAzXSksIHsgMTI6IFsxLCAyMF0gfSwgbygkVjIsIFsyLCAxMF0pLCB7IDE1OiAyMSwgMTY6IDcsIDE3OiA4LCAxODogJFYwLCAyMDogJFYxIH0sIG8oWzEsIDUsIDEwXSwgWzIsIDddKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMTE6IFsyLCAxXSwgMTI6IFsyLCA1XSB9LFxuICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShwb3BTdGFjaywgXCJwb3BTdGFja1wiKTtcbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgX19uYW1lKGxleCwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwicGFyc2VcIilcbiAgfTtcbiAgdmFyIGxleGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwic2V0SW5wdXRcIiksXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LCBcImlucHV0XCIpLFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJ1bnB1dFwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcIm1vcmVcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJyZWplY3RcIiksXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LCBcImxlc3NcIiksXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwicGFzdElucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJ1cGNvbWluZ0lucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSwgXCJzaG93UG9zaXRpb25cIiksXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sIFwidGVzdF9tYXRjaFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibmV4dFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibGV4XCIpLFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sIFwiYmVnaW5cIiksXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwb3BTdGF0ZVwiKSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiX2N1cnJlbnRSdWxlc1wiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sIFwidG9wU3RhdGVcIiksXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSwgXCJwdXNoU3RhdGVcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sIFwic3RhdGVTdGFja1NpemVcIiksXG4gICAgICBvcHRpb25zOiB7IFwiY2FzZS1pbnNlbnNpdGl2ZVwiOiB0cnVlIH0sXG4gICAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICB2YXIgWVlTVEFURSA9IFlZX1NUQVJUO1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImNzdlwiKTtcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImVzY2FwZWRfdGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoXCJlc2NhcGVkX3RleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86c2Fua2V5LWJldGFcXGIpL2ksIC9eKD86JCkvaSwgL14oPzooKFxcdTAwMERcXHUwMDBBKXwoXFx1MDAwQSkpKS9pLCAvXig/OihcXHUwMDJDKSkvaSwgL14oPzooXFx1MDAyMikpL2ksIC9eKD86KFtcXHUwMDIwLVxcdTAwMjFcXHUwMDIzLVxcdTAwMkJcXHUwMDJELVxcdTAwN0VdKSopL2ksIC9eKD86KFxcdTAwMjIpKD8hKFxcdTAwMjIpKSkvaSwgL14oPzooKFtcXHUwMDIwLVxcdTAwMjFcXHUwMDIzLVxcdTAwMkJcXHUwMDJELVxcdTAwN0VdKXwoXFx1MDAyQyl8KFxcdTAwMEQpfChcXHUwMDBBKXwoXFx1MDAyMikoXFx1MDAyMikpKikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiY3N2XCI6IHsgXCJydWxlc1wiOiBbMSwgMiwgMywgNCwgNSwgNiwgN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiZXNjYXBlZF90ZXh0XCI6IHsgXCJydWxlc1wiOiBbNiwgN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDddLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2Fua2V5X2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9zYW5rZXkvc2Fua2V5REIudHNcbnZhciBsaW5rcyA9IFtdO1xudmFyIG5vZGVzID0gW107XG52YXIgbm9kZXNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBsaW5rcyA9IFtdO1xuICBub2RlcyA9IFtdO1xuICBub2Rlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIFNhbmtleUxpbmsgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSwgdGFyZ2V0LCB2YWx1ZSA9IDApIHtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJTYW5rZXlMaW5rXCIpO1xuICB9XG59O1xudmFyIGFkZExpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzb3VyY2UsIHRhcmdldCwgdmFsdWUpID0+IHtcbiAgbGlua3MucHVzaChuZXcgU2Fua2V5TGluayhzb3VyY2UsIHRhcmdldCwgdmFsdWUpKTtcbn0sIFwiYWRkTGlua1wiKTtcbnZhciBTYW5rZXlOb2RlID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihJRCkge1xuICAgIHRoaXMuSUQgPSBJRDtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlNhbmtleU5vZGVcIik7XG4gIH1cbn07XG52YXIgZmluZE9yQ3JlYXRlTm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKElEKSA9PiB7XG4gIElEID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KElELCBnZXRDb25maWcoKSk7XG4gIGxldCBub2RlID0gbm9kZXNNYXAuZ2V0KElEKTtcbiAgaWYgKG5vZGUgPT09IHZvaWQgMCkge1xuICAgIG5vZGUgPSBuZXcgU2Fua2V5Tm9kZShJRCk7XG4gICAgbm9kZXNNYXAuc2V0KElELCBub2RlKTtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2RlO1xufSwgXCJmaW5kT3JDcmVhdGVOb2RlXCIpO1xudmFyIGdldE5vZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBub2RlcywgXCJnZXROb2Rlc1wiKTtcbnZhciBnZXRMaW5rcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbGlua3MsIFwiZ2V0TGlua3NcIik7XG52YXIgZ2V0R3JhcGggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+ICh7XG4gIG5vZGVzOiBub2Rlcy5tYXAoKG5vZGUpID0+ICh7IGlkOiBub2RlLklEIH0pKSxcbiAgbGlua3M6IGxpbmtzLm1hcCgobGluaykgPT4gKHtcbiAgICBzb3VyY2U6IGxpbmsuc291cmNlLklELFxuICAgIHRhcmdldDogbGluay50YXJnZXQuSUQsXG4gICAgdmFsdWU6IGxpbmsudmFsdWVcbiAgfSkpXG59KSwgXCJnZXRHcmFwaFwiKTtcbnZhciBzYW5rZXlEQl9kZWZhdWx0ID0ge1xuICBub2Rlc01hcCxcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLnNhbmtleSwgXCJnZXRDb25maWdcIiksXG4gIGdldE5vZGVzLFxuICBnZXRMaW5rcyxcbiAgZ2V0R3JhcGgsXG4gIGFkZExpbmssXG4gIGZpbmRPckNyZWF0ZU5vZGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgY2xlYXI6IGNsZWFyMlxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NhbmtleS9zYW5rZXlSZW5kZXJlci50c1xuaW1wb3J0IHtcbiAgc2VsZWN0IGFzIGQzc2VsZWN0LFxuICBzY2FsZU9yZGluYWwgYXMgZDNzY2FsZU9yZGluYWwsXG4gIHNjaGVtZVRhYmxlYXUxMCBhcyBkM3NjaGVtZVRhYmxlYXUxMFxufSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7XG4gIHNhbmtleSBhcyBkM1NhbmtleSxcbiAgc2Fua2V5TGlua0hvcml6b250YWwgYXMgZDNTYW5rZXlMaW5rSG9yaXpvbnRhbCxcbiAgc2Fua2V5TGVmdCBhcyBkM1NhbmtleUxlZnQsXG4gIHNhbmtleVJpZ2h0IGFzIGQzU2Fua2V5UmlnaHQsXG4gIHNhbmtleUNlbnRlciBhcyBkM1NhbmtleUNlbnRlcixcbiAgc2Fua2V5SnVzdGlmeSBhcyBkM1NhbmtleUp1c3RpZnlcbn0gZnJvbSBcImQzLXNhbmtleVwiO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvdWlkLnRzXG52YXIgVWlkID0gY2xhc3MgX1VpZCB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiVWlkXCIpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gIH1cbiAgc3RhdGljIG5leHQobmFtZSkge1xuICAgIHJldHVybiBuZXcgX1VpZChuYW1lICsgKytfVWlkLmNvdW50KTtcbiAgfVxuICBjb25zdHJ1Y3RvcihpZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmhyZWYgPSBgIyR7aWR9YDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gXCJ1cmwoXCIgKyB0aGlzLmhyZWYgKyBcIilcIjtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NhbmtleS9zYW5rZXlSZW5kZXJlci50c1xudmFyIGFsaWdubWVudHNNYXAgPSB7XG4gIGxlZnQ6IGQzU2Fua2V5TGVmdCxcbiAgcmlnaHQ6IGQzU2Fua2V5UmlnaHQsXG4gIGNlbnRlcjogZDNTYW5rZXlDZW50ZXIsXG4gIGp1c3RpZnk6IGQzU2Fua2V5SnVzdGlmeVxufTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgeyBzZWN1cml0eUxldmVsLCBzYW5rZXk6IGNvbmYgfSA9IGdldENvbmZpZygpO1xuICBjb25zdCBkZWZhdWx0U2Fua2V5Q29uZmlnID0gZGVmYXVsdENvbmZpZy5zYW5rZXk7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBkM3NlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gZDNzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBkM3NlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IHN2ZyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCkgOiBkM3NlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgY29uc3Qgd2lkdGggPSBjb25mPy53aWR0aCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBjb25mPy5oZWlnaHQgPz8gZGVmYXVsdFNhbmtleUNvbmZpZy53aWR0aDtcbiAgY29uc3QgdXNlTWF4V2lkdGggPSBjb25mPy51c2VNYXhXaWR0aCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLnVzZU1heFdpZHRoO1xuICBjb25zdCBub2RlQWxpZ25tZW50ID0gY29uZj8ubm9kZUFsaWdubWVudCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLm5vZGVBbGlnbm1lbnQ7XG4gIGNvbnN0IHByZWZpeCA9IGNvbmY/LnByZWZpeCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLnByZWZpeDtcbiAgY29uc3Qgc3VmZml4ID0gY29uZj8uc3VmZml4ID8/IGRlZmF1bHRTYW5rZXlDb25maWcuc3VmZml4O1xuICBjb25zdCBzaG93VmFsdWVzID0gY29uZj8uc2hvd1ZhbHVlcyA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLnNob3dWYWx1ZXM7XG4gIGNvbnN0IGdyYXBoID0gZGlhZ09iai5kYi5nZXRHcmFwaCgpO1xuICBjb25zdCBub2RlQWxpZ24gPSBhbGlnbm1lbnRzTWFwW25vZGVBbGlnbm1lbnRdO1xuICBjb25zdCBub2RlV2lkdGggPSAxMDtcbiAgY29uc3Qgc2Fua2V5ID0gZDNTYW5rZXkoKS5ub2RlSWQoKGQpID0+IGQuaWQpLm5vZGVXaWR0aChub2RlV2lkdGgpLm5vZGVQYWRkaW5nKDEwICsgKHNob3dWYWx1ZXMgPyAxNSA6IDApKS5ub2RlQWxpZ24obm9kZUFsaWduKS5leHRlbnQoW1xuICAgIFswLCAwXSxcbiAgICBbd2lkdGgsIGhlaWdodF1cbiAgXSk7XG4gIHNhbmtleShncmFwaCk7XG4gIGNvbnN0IGNvbG9yU2NoZW1lID0gZDNzY2FsZU9yZGluYWwoZDNzY2hlbWVUYWJsZWF1MTApO1xuICBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2Rlc1wiKS5zZWxlY3RBbGwoXCIubm9kZVwiKS5kYXRhKGdyYXBoLm5vZGVzKS5qb2luKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlXCIpLmF0dHIoXCJpZFwiLCAoZCkgPT4gKGQudWlkID0gVWlkLm5leHQoXCJub2RlLVwiKSkuaWQpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIGQueDAgKyBcIixcIiArIGQueTAgKyBcIilcIjtcbiAgfSkuYXR0cihcInhcIiwgKGQpID0+IGQueDApLmF0dHIoXCJ5XCIsIChkKSA9PiBkLnkwKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJoZWlnaHRcIiwgKGQpID0+IHtcbiAgICByZXR1cm4gZC55MSAtIGQueTA7XG4gIH0pLmF0dHIoXCJ3aWR0aFwiLCAoZCkgPT4gZC54MSAtIGQueDApLmF0dHIoXCJmaWxsXCIsIChkKSA9PiBjb2xvclNjaGVtZShkLmlkKSk7XG4gIGNvbnN0IGdldFRleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IGlkOiBpZDIsIHZhbHVlIH0pID0+IHtcbiAgICBpZiAoIXNob3dWYWx1ZXMpIHtcbiAgICAgIHJldHVybiBpZDI7XG4gICAgfVxuICAgIHJldHVybiBgJHtpZDJ9XG4ke3ByZWZpeH0ke01hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwfSR7c3VmZml4fWA7XG4gIH0sIFwiZ2V0VGV4dFwiKTtcbiAgc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZS1sYWJlbHNcIikuYXR0cihcImZvbnQtZmFtaWx5XCIsIFwic2Fucy1zZXJpZlwiKS5hdHRyKFwiZm9udC1zaXplXCIsIDE0KS5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEoZ3JhcGgubm9kZXMpLmpvaW4oXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIChkKSA9PiBkLngwIDwgd2lkdGggLyAyID8gZC54MSArIDYgOiBkLngwIC0gNikuYXR0cihcInlcIiwgKGQpID0+IChkLnkxICsgZC55MCkgLyAyKS5hdHRyKFwiZHlcIiwgYCR7c2hvd1ZhbHVlcyA/IFwiMFwiIDogXCIwLjM1XCJ9ZW1gKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGQpID0+IGQueDAgPCB3aWR0aCAvIDIgPyBcInN0YXJ0XCIgOiBcImVuZFwiKS50ZXh0KGdldFRleHQpO1xuICBjb25zdCBsaW5rID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGlua3NcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLCAwLjUpLnNlbGVjdEFsbChcIi5saW5rXCIpLmRhdGEoZ3JhcGgubGlua3MpLmpvaW4oXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxpbmtcIikuc3R5bGUoXCJtaXgtYmxlbmQtbW9kZVwiLCBcIm11bHRpcGx5XCIpO1xuICBjb25zdCBsaW5rQ29sb3IgPSBjb25mPy5saW5rQ29sb3IgPz8gXCJncmFkaWVudFwiO1xuICBpZiAobGlua0NvbG9yID09PSBcImdyYWRpZW50XCIpIHtcbiAgICBjb25zdCBncmFkaWVudCA9IGxpbmsuYXBwZW5kKFwibGluZWFyR3JhZGllbnRcIikuYXR0cihcImlkXCIsIChkKSA9PiAoZC51aWQgPSBVaWQubmV4dChcImxpbmVhckdyYWRpZW50LVwiKSkuaWQpLmF0dHIoXCJncmFkaWVudFVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIngxXCIsIChkKSA9PiBkLnNvdXJjZS54MSkuYXR0cihcIngyXCIsIChkKSA9PiBkLnRhcmdldC54MCk7XG4gICAgZ3JhZGllbnQuYXBwZW5kKFwic3RvcFwiKS5hdHRyKFwib2Zmc2V0XCIsIFwiMCVcIikuYXR0cihcInN0b3AtY29sb3JcIiwgKGQpID0+IGNvbG9yU2NoZW1lKGQuc291cmNlLmlkKSk7XG4gICAgZ3JhZGllbnQuYXBwZW5kKFwic3RvcFwiKS5hdHRyKFwib2Zmc2V0XCIsIFwiMTAwJVwiKS5hdHRyKFwic3RvcC1jb2xvclwiLCAoZCkgPT4gY29sb3JTY2hlbWUoZC50YXJnZXQuaWQpKTtcbiAgfVxuICBsZXQgY29sb3Jpbmc7XG4gIHN3aXRjaCAobGlua0NvbG9yKSB7XG4gICAgY2FzZSBcImdyYWRpZW50XCI6XG4gICAgICBjb2xvcmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGQpID0+IGQudWlkLCBcImNvbG9yaW5nXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgY29sb3JpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkKSA9PiBjb2xvclNjaGVtZShkLnNvdXJjZS5pZCksIFwiY29sb3JpbmdcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGFyZ2V0XCI6XG4gICAgICBjb2xvcmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGQpID0+IGNvbG9yU2NoZW1lKGQudGFyZ2V0LmlkKSwgXCJjb2xvcmluZ1wiKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb2xvcmluZyA9IGxpbmtDb2xvcjtcbiAgfVxuICBsaW5rLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgZDNTYW5rZXlMaW5rSG9yaXpvbnRhbCgpKS5hdHRyKFwic3Ryb2tlXCIsIGNvbG9yaW5nKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIChkKSA9PiBNYXRoLm1heCgxLCBkLndpZHRoKSk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KHZvaWQgMCwgc3ZnLCAwLCB1c2VNYXhXaWR0aCk7XG59LCBcImRyYXdcIik7XG52YXIgc2Fua2V5UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NhbmtleS9zYW5rZXlVdGlscy50c1xudmFyIHByZXBhcmVUZXh0Rm9yUGFyc2luZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgY29uc3QgdGV4dFRvUGFyc2UgPSB0ZXh0LnJlcGxhY2VBbGwoL15bXlxcU1xcblxccl0rfFteXFxTXFxuXFxyXSskL2csIFwiXCIpLnJlcGxhY2VBbGwoLyhbXFxuXFxyXSkrL2csIFwiXFxuXCIpLnRyaW0oKTtcbiAgcmV0dXJuIHRleHRUb1BhcnNlO1xufSwgXCJwcmVwYXJlVGV4dEZvclBhcnNpbmdcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9zYW5rZXkvc2Fua2V5RGlhZ3JhbS50c1xudmFyIG9yaWdpbmFsUGFyc2UgPSBzYW5rZXlfZGVmYXVsdC5wYXJzZS5iaW5kKHNhbmtleV9kZWZhdWx0KTtcbnNhbmtleV9kZWZhdWx0LnBhcnNlID0gKHRleHQpID0+IG9yaWdpbmFsUGFyc2UocHJlcGFyZVRleHRGb3JQYXJzaW5nKHRleHQpKTtcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHNhbmtleV9kZWZhdWx0LFxuICBkYjogc2Fua2V5REJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IHNhbmtleVJlbmRlcmVyX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBwb3B1bGF0ZUNvbW1vbkRiXG59IGZyb20gXCIuL2NodW5rLU9RQ001TEhVLm1qc1wiO1xuaW1wb3J0IHtcbiAgY2xlYW5BbmRNZXJnZVxufSBmcm9tIFwiLi9jaHVuay0yRURUV0RZSS5tanNcIjtcbmltcG9ydCB7XG4gIHNlbGVjdFN2Z0VsZW1lbnRcbn0gZnJvbSBcIi4vY2h1bmstRjJYRk4zQlkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb25maWd1cmVTdmdTaXplLFxuICBkZWZhdWx0Q29uZmlnX2RlZmF1bHQsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGxvZyxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9wYWNrZXQvZGIudHNcbnZhciBkZWZhdWx0UGFja2V0RGF0YSA9IHtcbiAgcGFja2V0OiBbXVxufTtcbnZhciBkYXRhID0gc3RydWN0dXJlZENsb25lKGRlZmF1bHRQYWNrZXREYXRhKTtcbnZhciBERUZBVUxUX1BBQ0tFVF9DT05GSUcgPSBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucGFja2V0O1xudmFyIGdldENvbmZpZzIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgY29uZmlnID0gY2xlYW5BbmRNZXJnZSh7XG4gICAgLi4uREVGQVVMVF9QQUNLRVRfQ09ORklHLFxuICAgIC4uLmdldENvbmZpZygpLnBhY2tldFxuICB9KTtcbiAgaWYgKGNvbmZpZy5zaG93Qml0cykge1xuICAgIGNvbmZpZy5wYWRkaW5nWSArPSAxMDtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufSwgXCJnZXRDb25maWdcIik7XG52YXIgZ2V0UGFja2V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBkYXRhLnBhY2tldCwgXCJnZXRQYWNrZXRcIik7XG52YXIgcHVzaFdvcmQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh3b3JkKSA9PiB7XG4gIGlmICh3b3JkLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnBhY2tldC5wdXNoKHdvcmQpO1xuICB9XG59LCBcInB1c2hXb3JkXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjbGVhcigpO1xuICBkYXRhID0gc3RydWN0dXJlZENsb25lKGRlZmF1bHRQYWNrZXREYXRhKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZGIgPSB7XG4gIHB1c2hXb3JkLFxuICBnZXRQYWNrZXQsXG4gIGdldENvbmZpZzogZ2V0Q29uZmlnMixcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGFja2V0L3BhcnNlci50c1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQG1lcm1haWQtanMvcGFyc2VyXCI7XG52YXIgbWF4UGFja2V0U2l6ZSA9IDFlNDtcbnZhciBwb3B1bGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFzdCkgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIpO1xuICBsZXQgbGFzdEJ5dGUgPSAtMTtcbiAgbGV0IHdvcmQgPSBbXTtcbiAgbGV0IHJvdyA9IDE7XG4gIGNvbnN0IHsgYml0c1BlclJvdyB9ID0gZGIuZ2V0Q29uZmlnKCk7XG4gIGZvciAobGV0IHsgc3RhcnQsIGVuZCwgbGFiZWwgfSBvZiBhc3QuYmxvY2tzKSB7XG4gICAgaWYgKGVuZCAmJiBlbmQgPCBzdGFydCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYWNrZXQgYmxvY2sgJHtzdGFydH0gLSAke2VuZH0gaXMgaW52YWxpZC4gRW5kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHN0YXJ0LmApO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgIT09IGxhc3RCeXRlICsgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGFja2V0IGJsb2NrICR7c3RhcnR9IC0gJHtlbmQgPz8gc3RhcnR9IGlzIG5vdCBjb250aWd1b3VzLiBJdCBzaG91bGQgc3RhcnQgZnJvbSAke2xhc3RCeXRlICsgMX0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgbGFzdEJ5dGUgPSBlbmQgPz8gc3RhcnQ7XG4gICAgbG9nLmRlYnVnKGBQYWNrZXQgYmxvY2sgJHtzdGFydH0gLSAke2xhc3RCeXRlfSB3aXRoIGxhYmVsICR7bGFiZWx9YCk7XG4gICAgd2hpbGUgKHdvcmQubGVuZ3RoIDw9IGJpdHNQZXJSb3cgKyAxICYmIGRiLmdldFBhY2tldCgpLmxlbmd0aCA8IG1heFBhY2tldFNpemUpIHtcbiAgICAgIGNvbnN0IFtibG9jaywgbmV4dEJsb2NrXSA9IGdldE5leHRGaXR0aW5nQmxvY2soeyBzdGFydCwgZW5kLCBsYWJlbCB9LCByb3csIGJpdHNQZXJSb3cpO1xuICAgICAgd29yZC5wdXNoKGJsb2NrKTtcbiAgICAgIGlmIChibG9jay5lbmQgKyAxID09PSByb3cgKiBiaXRzUGVyUm93KSB7XG4gICAgICAgIGRiLnB1c2hXb3JkKHdvcmQpO1xuICAgICAgICB3b3JkID0gW107XG4gICAgICAgIHJvdysrO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0QmxvY2spIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAoeyBzdGFydCwgZW5kLCBsYWJlbCB9ID0gbmV4dEJsb2NrKTtcbiAgICB9XG4gIH1cbiAgZGIucHVzaFdvcmQod29yZCk7XG59LCBcInBvcHVsYXRlXCIpO1xudmFyIGdldE5leHRGaXR0aW5nQmxvY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChibG9jaywgcm93LCBiaXRzUGVyUm93KSA9PiB7XG4gIGlmIChibG9jay5lbmQgPT09IHZvaWQgMCkge1xuICAgIGJsb2NrLmVuZCA9IGJsb2NrLnN0YXJ0O1xuICB9XG4gIGlmIChibG9jay5zdGFydCA+IGJsb2NrLmVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHtibG9jay5zdGFydH0gaXMgZ3JlYXRlciB0aGFuIGJsb2NrIGVuZCAke2Jsb2NrLmVuZH0uYCk7XG4gIH1cbiAgaWYgKGJsb2NrLmVuZCArIDEgPD0gcm93ICogYml0c1BlclJvdykge1xuICAgIHJldHVybiBbYmxvY2ssIHZvaWQgMF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBzdGFydDogYmxvY2suc3RhcnQsXG4gICAgICBlbmQ6IHJvdyAqIGJpdHNQZXJSb3cgLSAxLFxuICAgICAgbGFiZWw6IGJsb2NrLmxhYmVsXG4gICAgfSxcbiAgICB7XG4gICAgICBzdGFydDogcm93ICogYml0c1BlclJvdyxcbiAgICAgIGVuZDogYmxvY2suZW5kLFxuICAgICAgbGFiZWw6IGJsb2NrLmxhYmVsXG4gICAgfVxuICBdO1xufSwgXCJnZXROZXh0Rml0dGluZ0Jsb2NrXCIpO1xudmFyIHBhcnNlciA9IHtcbiAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgY29uc3QgYXN0ID0gYXdhaXQgcGFyc2UoXCJwYWNrZXRcIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICAgIHBvcHVsYXRlKGFzdCk7XG4gIH0sIFwicGFyc2VcIilcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9wYWNrZXQvcmVuZGVyZXIudHNcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3RleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ3JhbTIpID0+IHtcbiAgY29uc3QgZGIyID0gZGlhZ3JhbTIuZGI7XG4gIGNvbnN0IGNvbmZpZyA9IGRiMi5nZXRDb25maWcoKTtcbiAgY29uc3QgeyByb3dIZWlnaHQsIHBhZGRpbmdZLCBiaXRXaWR0aCwgYml0c1BlclJvdyB9ID0gY29uZmlnO1xuICBjb25zdCB3b3JkcyA9IGRiMi5nZXRQYWNrZXQoKTtcbiAgY29uc3QgdGl0bGUgPSBkYjIuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGNvbnN0IHRvdGFsUm93SGVpZ2h0ID0gcm93SGVpZ2h0ICsgcGFkZGluZ1k7XG4gIGNvbnN0IHN2Z0hlaWdodCA9IHRvdGFsUm93SGVpZ2h0ICogKHdvcmRzLmxlbmd0aCArIDEpIC0gKHRpdGxlID8gMCA6IHJvd0hlaWdodCk7XG4gIGNvbnN0IHN2Z1dpZHRoID0gYml0V2lkdGggKiBiaXRzUGVyUm93ICsgMjtcbiAgY29uc3Qgc3ZnID0gc2VsZWN0U3ZnRWxlbWVudChpZCk7XG4gIHN2Zy5hdHRyKFwidmlld2JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApO1xuICBjb25maWd1cmVTdmdTaXplKHN2Zywgc3ZnSGVpZ2h0LCBzdmdXaWR0aCwgY29uZmlnLnVzZU1heFdpZHRoKTtcbiAgZm9yIChjb25zdCBbd29yZCwgcGFja2V0XSBvZiB3b3Jkcy5lbnRyaWVzKCkpIHtcbiAgICBkcmF3V29yZChzdmcsIHBhY2tldCwgd29yZCwgY29uZmlnKTtcbiAgfVxuICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCBzdmdXaWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHN2Z0hlaWdodCAtIHRvdGFsUm93SGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJwYWNrZXRUaXRsZVwiKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBkcmF3V29yZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Zywgd29yZCwgcm93TnVtYmVyLCB7IHJvd0hlaWdodCwgcGFkZGluZ1gsIHBhZGRpbmdZLCBiaXRXaWR0aCwgYml0c1BlclJvdywgc2hvd0JpdHMgfSkgPT4ge1xuICBjb25zdCBncm91cCA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB3b3JkWSA9IHJvd051bWJlciAqIChyb3dIZWlnaHQgKyBwYWRkaW5nWSkgKyBwYWRkaW5nWTtcbiAgZm9yIChjb25zdCBibG9jayBvZiB3b3JkKSB7XG4gICAgY29uc3QgYmxvY2tYID0gYmxvY2suc3RhcnQgJSBiaXRzUGVyUm93ICogYml0V2lkdGggKyAxO1xuICAgIGNvbnN0IHdpZHRoID0gKGJsb2NrLmVuZCAtIGJsb2NrLnN0YXJ0ICsgMSkgKiBiaXRXaWR0aCAtIHBhZGRpbmdYO1xuICAgIGdyb3VwLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgYmxvY2tYKS5hdHRyKFwieVwiLCB3b3JkWSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIHJvd0hlaWdodCkuYXR0cihcImNsYXNzXCIsIFwicGFja2V0QmxvY2tcIik7XG4gICAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBibG9ja1ggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHdvcmRZICsgcm93SGVpZ2h0IC8gMikuYXR0cihcImNsYXNzXCIsIFwicGFja2V0TGFiZWxcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGJsb2NrLmxhYmVsKTtcbiAgICBpZiAoIXNob3dCaXRzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTaW5nbGVCbG9jayA9IGJsb2NrLmVuZCA9PT0gYmxvY2suc3RhcnQ7XG4gICAgY29uc3QgYml0TnVtYmVyWSA9IHdvcmRZIC0gMjtcbiAgICBncm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIGJsb2NrWCArIChpc1NpbmdsZUJsb2NrID8gd2lkdGggLyAyIDogMCkpLmF0dHIoXCJ5XCIsIGJpdE51bWJlclkpLmF0dHIoXCJjbGFzc1wiLCBcInBhY2tldEJ5dGUgc3RhcnRcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiYXV0b1wiKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgaXNTaW5nbGVCbG9jayA/IFwibWlkZGxlXCIgOiBcInN0YXJ0XCIpLnRleHQoYmxvY2suc3RhcnQpO1xuICAgIGlmICghaXNTaW5nbGVCbG9jaykge1xuICAgICAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBibG9ja1ggKyB3aWR0aCkuYXR0cihcInlcIiwgYml0TnVtYmVyWSkuYXR0cihcImNsYXNzXCIsIFwicGFja2V0Qnl0ZSBlbmRcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiYXV0b1wiKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJlbmRcIikudGV4dChibG9jay5lbmQpO1xuICAgIH1cbiAgfVxufSwgXCJkcmF3V29yZFwiKTtcbnZhciByZW5kZXJlciA9IHsgZHJhdyB9O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGFja2V0L3N0eWxlcy50c1xudmFyIGRlZmF1bHRQYWNrZXRTdHlsZU9wdGlvbnMgPSB7XG4gIGJ5dGVGb250U2l6ZTogXCIxMHB4XCIsXG4gIHN0YXJ0Qnl0ZUNvbG9yOiBcImJsYWNrXCIsXG4gIGVuZEJ5dGVDb2xvcjogXCJibGFja1wiLFxuICBsYWJlbENvbG9yOiBcImJsYWNrXCIsXG4gIGxhYmVsRm9udFNpemU6IFwiMTJweFwiLFxuICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gIHRpdGxlRm9udFNpemU6IFwiMTRweFwiLFxuICBibG9ja1N0cm9rZUNvbG9yOiBcImJsYWNrXCIsXG4gIGJsb2NrU3Ryb2tlV2lkdGg6IFwiMVwiLFxuICBibG9ja0ZpbGxDb2xvcjogXCIjZWZlZmVmXCJcbn07XG52YXIgc3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeyBwYWNrZXQgfSA9IHt9KSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjbGVhbkFuZE1lcmdlKGRlZmF1bHRQYWNrZXRTdHlsZU9wdGlvbnMsIHBhY2tldCk7XG4gIHJldHVybiBgXG5cdC5wYWNrZXRCeXRlIHtcblx0XHRmb250LXNpemU6ICR7b3B0aW9ucy5ieXRlRm9udFNpemV9O1xuXHR9XG5cdC5wYWNrZXRCeXRlLnN0YXJ0IHtcblx0XHRmaWxsOiAke29wdGlvbnMuc3RhcnRCeXRlQ29sb3J9O1xuXHR9XG5cdC5wYWNrZXRCeXRlLmVuZCB7XG5cdFx0ZmlsbDogJHtvcHRpb25zLmVuZEJ5dGVDb2xvcn07XG5cdH1cblx0LnBhY2tldExhYmVsIHtcblx0XHRmaWxsOiAke29wdGlvbnMubGFiZWxDb2xvcn07XG5cdFx0Zm9udC1zaXplOiAke29wdGlvbnMubGFiZWxGb250U2l6ZX07XG5cdH1cblx0LnBhY2tldFRpdGxlIHtcblx0XHRmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG5cdFx0Zm9udC1zaXplOiAke29wdGlvbnMudGl0bGVGb250U2l6ZX07XG5cdH1cblx0LnBhY2tldEJsb2NrIHtcblx0XHRzdHJva2U6ICR7b3B0aW9ucy5ibG9ja1N0cm9rZUNvbG9yfTtcblx0XHRzdHJva2Utd2lkdGg6ICR7b3B0aW9ucy5ibG9ja1N0cm9rZVdpZHRofTtcblx0XHRmaWxsOiAke29wdGlvbnMuYmxvY2tGaWxsQ29sb3J9O1xuXHR9XG5cdGA7XG59LCBcInN0eWxlc1wiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3BhY2tldC9kaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlc1xufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIGluc2VydEVkZ2UsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgbWFya2Vyc19kZWZhdWx0LFxuICBwb3NpdGlvbkVkZ2VMYWJlbFxufSBmcm9tIFwiLi9jaHVuay1NS0FJRktXNS5tanNcIjtcbmltcG9ydCB7XG4gIGluc2VydE5vZGUsXG4gIHBvc2l0aW9uTm9kZVxufSBmcm9tIFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstMjNBVE1aWFYubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVpJNlYyVUUyLm1qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0U3R5bGVzRnJvbUFycmF5XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGdldENvbmZpZyxcbiAgZ2V0Q29uZmlnMixcbiAgbG9nXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svcGFyc2VyL2Jsb2NrLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgN10sICRWMSA9IFsxLCAxM10sICRWMiA9IFsxLCAxNF0sICRWMyA9IFsxLCAxNV0sICRWNCA9IFsxLCAxOV0sICRWNSA9IFsxLCAxNl0sICRWNiA9IFsxLCAxN10sICRWNyA9IFsxLCAxOF0sICRWOCA9IFs4LCAzMF0sICRWOSA9IFs4LCAyMSwgMjgsIDI5LCAzMCwgMzEsIDMyLCA0MCwgNDQsIDQ3XSwgJFZhID0gWzEsIDIzXSwgJFZiID0gWzEsIDI0XSwgJFZjID0gWzgsIDE1LCAxNiwgMjEsIDI4LCAyOSwgMzAsIDMxLCAzMiwgNDAsIDQ0LCA0N10sICRWZCA9IFs4LCAxNSwgMTYsIDIxLCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCA0MCwgNDQsIDQ3XSwgJFZlID0gWzEsIDQ5XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInNwYWNlTGluZXNcIjogMywgXCJTUEFDRUxJTkVcIjogNCwgXCJOTFwiOiA1LCBcInNlcGFyYXRvclwiOiA2LCBcIlNQQUNFXCI6IDcsIFwiRU9GXCI6IDgsIFwic3RhcnRcIjogOSwgXCJCTE9DS19ESUFHUkFNX0tFWVwiOiAxMCwgXCJkb2N1bWVudFwiOiAxMSwgXCJzdG9wXCI6IDEyLCBcInN0YXRlbWVudFwiOiAxMywgXCJsaW5rXCI6IDE0LCBcIkxJTktcIjogMTUsIFwiU1RBUlRfTElOS1wiOiAxNiwgXCJMSU5LX0xBQkVMXCI6IDE3LCBcIlNUUlwiOiAxOCwgXCJub2RlU3RhdGVtZW50XCI6IDE5LCBcImNvbHVtbnNTdGF0ZW1lbnRcIjogMjAsIFwiU1BBQ0VfQkxPQ0tcIjogMjEsIFwiYmxvY2tTdGF0ZW1lbnRcIjogMjIsIFwiY2xhc3NEZWZTdGF0ZW1lbnRcIjogMjMsIFwiY3NzQ2xhc3NTdGF0ZW1lbnRcIjogMjQsIFwic3R5bGVTdGF0ZW1lbnRcIjogMjUsIFwibm9kZVwiOiAyNiwgXCJTSVpFXCI6IDI3LCBcIkNPTFVNTlNcIjogMjgsIFwiaWQtYmxvY2tcIjogMjksIFwiZW5kXCI6IDMwLCBcImJsb2NrXCI6IDMxLCBcIk5PREVfSURcIjogMzIsIFwibm9kZVNoYXBlTkxhYmVsXCI6IDMzLCBcImRpckxpc3RcIjogMzQsIFwiRElSXCI6IDM1LCBcIk5PREVfRFNUQVJUXCI6IDM2LCBcIk5PREVfREVORFwiOiAzNywgXCJCTE9DS19BUlJPV19TVEFSVFwiOiAzOCwgXCJCTE9DS19BUlJPV19FTkRcIjogMzksIFwiY2xhc3NEZWZcIjogNDAsIFwiQ0xBU1NERUZfSURcIjogNDEsIFwiQ0xBU1NERUZfU1RZTEVPUFRTXCI6IDQyLCBcIkRFRkFVTFRcIjogNDMsIFwiY2xhc3NcIjogNDQsIFwiQ0xBU1NFTlRJVFlfSURTXCI6IDQ1LCBcIlNUWUxFQ0xBU1NcIjogNDYsIFwic3R5bGVcIjogNDcsIFwiU1RZTEVfRU5USVRZX0lEU1wiOiA0OCwgXCJTVFlMRV9ERUZJTklUSU9OX0RBVEFcIjogNDksIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA0OiBcIlNQQUNFTElORVwiLCA1OiBcIk5MXCIsIDc6IFwiU1BBQ0VcIiwgODogXCJFT0ZcIiwgMTA6IFwiQkxPQ0tfRElBR1JBTV9LRVlcIiwgMTU6IFwiTElOS1wiLCAxNjogXCJTVEFSVF9MSU5LXCIsIDE3OiBcIkxJTktfTEFCRUxcIiwgMTg6IFwiU1RSXCIsIDIxOiBcIlNQQUNFX0JMT0NLXCIsIDI3OiBcIlNJWkVcIiwgMjg6IFwiQ09MVU1OU1wiLCAyOTogXCJpZC1ibG9ja1wiLCAzMDogXCJlbmRcIiwgMzE6IFwiYmxvY2tcIiwgMzI6IFwiTk9ERV9JRFwiLCAzNTogXCJESVJcIiwgMzY6IFwiTk9ERV9EU1RBUlRcIiwgMzc6IFwiTk9ERV9ERU5EXCIsIDM4OiBcIkJMT0NLX0FSUk9XX1NUQVJUXCIsIDM5OiBcIkJMT0NLX0FSUk9XX0VORFwiLCA0MDogXCJjbGFzc0RlZlwiLCA0MTogXCJDTEFTU0RFRl9JRFwiLCA0MjogXCJDTEFTU0RFRl9TVFlMRU9QVFNcIiwgNDM6IFwiREVGQVVMVFwiLCA0NDogXCJjbGFzc1wiLCA0NTogXCJDTEFTU0VOVElUWV9JRFNcIiwgNDY6IFwiU1RZTEVDTEFTU1wiLCA0NzogXCJzdHlsZVwiLCA0ODogXCJTVFlMRV9FTlRJVFlfSURTXCIsIDQ5OiBcIlNUWUxFX0RFRklOSVRJT05fREFUQVwiIH0sXG4gICAgcHJvZHVjdGlvbnNfOiBbMCwgWzMsIDFdLCBbMywgMl0sIFszLCAyXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzksIDNdLCBbMTIsIDFdLCBbMTIsIDFdLCBbMTIsIDJdLCBbMTIsIDJdLCBbMTEsIDFdLCBbMTEsIDJdLCBbMTQsIDFdLCBbMTQsIDRdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTksIDNdLCBbMTksIDJdLCBbMTksIDFdLCBbMjAsIDFdLCBbMjIsIDRdLCBbMjIsIDNdLCBbMjYsIDFdLCBbMjYsIDJdLCBbMzQsIDFdLCBbMzQsIDJdLCBbMzMsIDNdLCBbMzMsIDRdLCBbMjMsIDNdLCBbMjMsIDNdLCBbMjQsIDNdLCBbMjUsIDNdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogc2VwYXJhdG9yIChOTCkgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBzZXBhcmF0b3IgKFNwYWNlKSBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IGhpZXJhcmNoeTogXCIsICQkWyQwIC0gMV0pO1xuICAgICAgICAgIHl5LnNldEhpZXJhcmNoeSgkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiU3RvcCBOTCBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlN0b3AgRU9GIFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlN0b3AgTkwyIFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlN0b3AgRU9GMiBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBzdGF0ZW1lbnQ6IFwiLCAkJFskMF0pO1xuICAgICAgICAgIHR5cGVvZiAkJFskMF0ubGVuZ3RoID09PSBcIm51bWJlclwiID8gdGhpcy4kID0gJCRbJDBdIDogdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBzdGF0ZW1lbnQgIzI6IFwiLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXV0uY29uY2F0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBsaW5rOiBcIiwgJCRbJDBdLCB5eXRleHQpO1xuICAgICAgICAgIHRoaXMuJCA9IHsgZWRnZVR5cGVTdHI6ICQkWyQwXSwgbGFiZWw6IFwiXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IExBQkVMIGxpbms6IFwiLCAkJFskMCAtIDNdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgZWRnZVR5cGVTdHI6ICQkWyQwXSwgbGFiZWw6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBjb25zdCBudW0gPSBwYXJzZUludCgkJFskMF0pO1xuICAgICAgICAgIGNvbnN0IHNwYWNlSWQgPSB5eS5nZW5lcmF0ZUlkKCk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogc3BhY2VJZCwgdHlwZTogXCJzcGFjZVwiLCBsYWJlbDogXCJcIiwgd2lkdGg6IG51bSwgY2hpbGRyZW46IFtdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiAobm9kZVN0YXRlbWVudCBsaW5rIG5vZGUpIFwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0sIFwiIHR5cGVzdHI6IFwiLCAkJFskMCAtIDFdLmVkZ2VUeXBlU3RyKTtcbiAgICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHl5LmVkZ2VTdHJUb0VkZ2VEYXRhKCQkWyQwIC0gMV0uZWRnZVR5cGVTdHIpO1xuICAgICAgICAgIHRoaXMuJCA9IFtcbiAgICAgICAgICAgIHsgaWQ6ICQkWyQwIC0gMl0uaWQsIGxhYmVsOiAkJFskMCAtIDJdLmxhYmVsLCB0eXBlOiAkJFskMCAtIDJdLnR5cGUsIGRpcmVjdGlvbnM6ICQkWyQwIC0gMl0uZGlyZWN0aW9ucyB9LFxuICAgICAgICAgICAgeyBpZDogJCRbJDAgLSAyXS5pZCArIFwiLVwiICsgJCRbJDBdLmlkLCBzdGFydDogJCRbJDAgLSAyXS5pZCwgZW5kOiAkJFskMF0uaWQsIGxhYmVsOiAkJFskMCAtIDFdLmxhYmVsLCB0eXBlOiBcImVkZ2VcIiwgZGlyZWN0aW9uczogJCRbJDBdLmRpcmVjdGlvbnMsIGFycm93VHlwZUVuZDogZWRnZURhdGEsIGFycm93VHlwZVN0YXJ0OiBcImFycm93X29wZW5cIiB9LFxuICAgICAgICAgICAgeyBpZDogJCRbJDBdLmlkLCBsYWJlbDogJCRbJDBdLmxhYmVsLCB0eXBlOiB5eS50eXBlU3RyMlR5cGUoJCRbJDBdLnR5cGVTdHIpLCBkaXJlY3Rpb25zOiAkJFskMF0uZGlyZWN0aW9ucyB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgXCIsICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDAgLSAxXS5pZCwgbGFiZWw6ICQkWyQwIC0gMV0ubGFiZWwsIHR5cGU6IHl5LnR5cGVTdHIyVHlwZSgkJFskMCAtIDFdLnR5cGVTdHIpLCBkaXJlY3Rpb25zOiAkJFskMCAtIDFdLmRpcmVjdGlvbnMsIHdpZHRoSW5Db2x1bW5zOiBwYXJzZUludCgkJFskMF0sIDEwKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogbm9kZVN0YXRlbWVudCAobm9kZSkgXCIsICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDBdLmlkLCBsYWJlbDogJCRbJDBdLmxhYmVsLCB0eXBlOiB5eS50eXBlU3RyMlR5cGUoJCRbJDBdLnR5cGVTdHIpLCBkaXJlY3Rpb25zOiAkJFskMF0uZGlyZWN0aW9ucywgd2lkdGhJbkNvbHVtbnM6IDEgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkFQQTEyM1wiLCB0aGlzID8gdGhpcyA6IFwibmFcIik7XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJDT0xVTU5TOiBcIiwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiY29sdW1uLXNldHRpbmdcIiwgY29sdW1uczogJCRbJDBdID09PSBcImF1dG9cIiA/IC0xIDogcGFyc2VJbnQoJCRbJDBdKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogaWQtYmxvY2sgc3RhdGVtZW50IDogXCIsICQkWyQwIC0gMl0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGNvbnN0IGlkMiA9IHl5LmdlbmVyYXRlSWQoKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IC4uLiQkWyQwIC0gMl0sIHR5cGU6IFwiY29tcG9zaXRlXCIsIGNoaWxkcmVuOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBibG9ja1N0YXRlbWVudCA6IFwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGNvbnN0IGlkID0geXkuZ2VuZXJhdGVJZCgpO1xuICAgICAgICAgIHRoaXMuJCA9IHsgaWQsIHR5cGU6IFwiY29tcG9zaXRlXCIsIGxhYmVsOiBcIlwiLCBjaGlsZHJlbjogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogbm9kZSAoTk9ERV9JRCBzZXBhcmF0b3IpOiBcIiwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6IFwiLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgaWQ6ICQkWyQwIC0gMV0sIGxhYmVsOiAkJFskMF0ubGFiZWwsIHR5cGVTdHI6ICQkWyQwXS50eXBlU3RyLCBkaXJlY3Rpb25zOiAkJFskMF0uZGlyZWN0aW9ucyB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogZGlyTGlzdDogXCIsICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBkaXJMaXN0OiBcIiwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXV0uY29uY2F0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBub2RlU2hhcGVOTGFiZWw6IFwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZVN0cjogJCRbJDAgLSAyXSArICQkWyQwXSwgbGFiZWw6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogXCIsICQkWyQwIC0gM10sICQkWyQwIC0gMl0sIFwiICMzOlwiLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZVN0cjogJCRbJDAgLSAzXSArICQkWyQwXSwgbGFiZWw6ICQkWyQwIC0gMl0sIGRpcmVjdGlvbnM6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiY2xhc3NEZWZcIiwgaWQ6ICQkWyQwIC0gMV0udHJpbSgpLCBjc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYXBwbHlDbGFzc1wiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYXBwbHlTdHlsZXNcIiwgaWQ6ICQkWyQwIC0gMV0udHJpbSgpLCBzdHlsZXNTdHI6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgOTogMSwgMTA6IFsxLCAyXSB9LCB7IDE6IFszXSB9LCB7IDExOiAzLCAxMzogNCwgMTk6IDUsIDIwOiA2LCAyMTogJFYwLCAyMjogOCwgMjM6IDksIDI0OiAxMCwgMjU6IDExLCAyNjogMTIsIDI4OiAkVjEsIDI5OiAkVjIsIDMxOiAkVjMsIDMyOiAkVjQsIDQwOiAkVjUsIDQ0OiAkVjYsIDQ3OiAkVjcgfSwgeyA4OiBbMSwgMjBdIH0sIG8oJFY4LCBbMiwgMTJdLCB7IDEzOiA0LCAxOTogNSwgMjA6IDYsIDIyOiA4LCAyMzogOSwgMjQ6IDEwLCAyNTogMTEsIDI2OiAxMiwgMTE6IDIxLCAyMTogJFYwLCAyODogJFYxLCAyOTogJFYyLCAzMTogJFYzLCAzMjogJFY0LCA0MDogJFY1LCA0NDogJFY2LCA0NzogJFY3IH0pLCBvKCRWOSwgWzIsIDE2XSwgeyAxNDogMjIsIDE1OiAkVmEsIDE2OiAkVmIgfSksIG8oJFY5LCBbMiwgMTddKSwgbygkVjksIFsyLCAxOF0pLCBvKCRWOSwgWzIsIDE5XSksIG8oJFY5LCBbMiwgMjBdKSwgbygkVjksIFsyLCAyMV0pLCBvKCRWOSwgWzIsIDIyXSksIG8oJFZjLCBbMiwgMjVdLCB7IDI3OiBbMSwgMjVdIH0pLCBvKCRWOSwgWzIsIDI2XSksIHsgMTk6IDI2LCAyNjogMTIsIDMyOiAkVjQgfSwgeyAxMTogMjcsIDEzOiA0LCAxOTogNSwgMjA6IDYsIDIxOiAkVjAsIDIyOiA4LCAyMzogOSwgMjQ6IDEwLCAyNTogMTEsIDI2OiAxMiwgMjg6ICRWMSwgMjk6ICRWMiwgMzE6ICRWMywgMzI6ICRWNCwgNDA6ICRWNSwgNDQ6ICRWNiwgNDc6ICRWNyB9LCB7IDQxOiBbMSwgMjhdLCA0MzogWzEsIDI5XSB9LCB7IDQ1OiBbMSwgMzBdIH0sIHsgNDg6IFsxLCAzMV0gfSwgbygkVmQsIFsyLCAyOV0sIHsgMzM6IDMyLCAzNjogWzEsIDMzXSwgMzg6IFsxLCAzNF0gfSksIHsgMTogWzIsIDddIH0sIG8oJFY4LCBbMiwgMTNdKSwgeyAyNjogMzUsIDMyOiAkVjQgfSwgeyAzMjogWzIsIDE0XSB9LCB7IDE3OiBbMSwgMzZdIH0sIG8oJFZjLCBbMiwgMjRdKSwgeyAxMTogMzcsIDEzOiA0LCAxNDogMjIsIDE1OiAkVmEsIDE2OiAkVmIsIDE5OiA1LCAyMDogNiwgMjE6ICRWMCwgMjI6IDgsIDIzOiA5LCAyNDogMTAsIDI1OiAxMSwgMjY6IDEyLCAyODogJFYxLCAyOTogJFYyLCAzMTogJFYzLCAzMjogJFY0LCA0MDogJFY1LCA0NDogJFY2LCA0NzogJFY3IH0sIHsgMzA6IFsxLCAzOF0gfSwgeyA0MjogWzEsIDM5XSB9LCB7IDQyOiBbMSwgNDBdIH0sIHsgNDY6IFsxLCA0MV0gfSwgeyA0OTogWzEsIDQyXSB9LCBvKCRWZCwgWzIsIDMwXSksIHsgMTg6IFsxLCA0M10gfSwgeyAxODogWzEsIDQ0XSB9LCBvKCRWYywgWzIsIDIzXSksIHsgMTg6IFsxLCA0NV0gfSwgeyAzMDogWzEsIDQ2XSB9LCBvKCRWOSwgWzIsIDI4XSksIG8oJFY5LCBbMiwgMzVdKSwgbygkVjksIFsyLCAzNl0pLCBvKCRWOSwgWzIsIDM3XSksIG8oJFY5LCBbMiwgMzhdKSwgeyAzNzogWzEsIDQ3XSB9LCB7IDM0OiA0OCwgMzU6ICRWZSB9LCB7IDE1OiBbMSwgNTBdIH0sIG8oJFY5LCBbMiwgMjddKSwgbygkVmQsIFsyLCAzM10pLCB7IDM5OiBbMSwgNTFdIH0sIHsgMzQ6IDUyLCAzNTogJFZlLCAzOTogWzIsIDMxXSB9LCB7IDMyOiBbMiwgMTVdIH0sIG8oJFZkLCBbMiwgMzRdKSwgeyAzOTogWzIsIDMyXSB9XSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyAyMDogWzIsIDddLCAyMzogWzIsIDE0XSwgNTA6IFsyLCAxNV0sIDUyOiBbMiwgMzJdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJGb3VuZCBzcGFjZS1ibG9ja1wiKTtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiRm91bmQgbmwtYmxvY2tcIik7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkZvdW5kIHNwYWNlLWJsb2NrXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCIuXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJfXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9jb2x1bW5zXFxzKy8sIFwiXCIpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJDT0xVTU5TIChMRVgpXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgcmV0dXJuIFwiTURfU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTEVYOiBQT1BQSU5HIFNUUjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMRVg6IFNUUiBlbmQ6XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvc3BhY2VcXDovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiU1BBQ0UgTlVNIChMRVgpXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSBcIjFcIjtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiQ09MVU1OUyAoTEVYKVwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIFwiTElOS1NUWUxFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIFwiSU5URVJQT0xBVEVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTREVGXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIkRFRkFVTFRfQ0xBU1NERUZfSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTREVGSURcIik7XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NcIik7XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJDTEFTU19TVFlMRVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTVFlMRV9TVE1OVFwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUWUxFX0RFRklOSVRJT05cIik7XG4gICAgICAgICAgICByZXR1cm4gNDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICByZXR1cm4gMzA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICkpXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgtXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IC0pXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IF1dXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogXSlcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogL11cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogL11cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogKV1cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogKVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBdPlwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBdXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiAtKVwiKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleGE6ICgtXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4YTogKSlcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiApXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiAoKChcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiApXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4YTogKVwiKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleGE6IClcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhjOiA+XCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4YTogKFtcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiApXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleGE6IFtcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJCTE9DS19BUlJPV1wiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTEVYIEFSUiBTVEFSVFwiKTtcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogTk9ERV9JRFwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogRU9GXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERVNDUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogU3RhcnRpbmcgc3RyaW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMRVggQVJSOiBTdGFydGluZyBzdHJpbmdcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxFWDogTk9ERV9ERVNDUjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFU0NSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMRVggUE9QUElOR1wiKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogPT5CQUVcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkFSUk9XX0RJUlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODY6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4IChyaWdodCk6IGRpcjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4IChsZWZ0KTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4ICh4KTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODk6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4ICh5KTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4ICh1cCk6XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiRElSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXixcXHMqLywgXCJcIik7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleCAoZG93bik6XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiRElSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IFwiXT5cIjtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4IChBUlJPV19ESVIgZW5kKTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJCTE9DS19BUlJPV19FTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogTElOS1wiLCBcIiNcIiArIHl5Xy55eXRleHQgKyBcIiNcIik7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk3OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IFNUQVJUX0xJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkxMQUJFTFwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTg6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogU1RBUlRfTElOS1wiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTExBQkVMXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBTVEFSVF9MSU5LXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJMTEFCRUxcIik7XG4gICAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwibWRfc3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogU3RhcnRpbmcgc3RyaW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJpbmdcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJMSU5LX0xBQkVMXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBMSU5LXCIsIFwiI1wiICsgeXlfLnl5dGV4dCArIFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBMSU5LXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogQ09MT05cIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgxKTtcbiAgICAgICAgICAgIHJldHVybiAyNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzpibG9jay1iZXRhXFxiKS8sIC9eKD86YmxvY2tcXHMrKS8sIC9eKD86YmxvY2tcXG4rKS8sIC9eKD86YmxvY2s6KS8sIC9eKD86W1xcc10rKS8sIC9eKD86W1xcbl0rKS8sIC9eKD86KChcXHUwMDBEXFx1MDAwQSl8KFxcdTAwMEEpKSkvLCAvXig/OmNvbHVtbnNcXHMrYXV0b1xcYikvLCAvXig/OmNvbHVtbnNcXHMrW1xcZF0rKS8sIC9eKD86W1wiXVtgXSkvLCAvXig/OlteYFwiXSspLywgL14oPzpbYF1bXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OltcIl0pLywgL14oPzpbXlwiXSopLywgL14oPzpzcGFjZVs6XVxcZCspLywgL14oPzpzcGFjZVxcYikvLCAvXig/OmRlZmF1bHRcXGIpLywgL14oPzpsaW5rU3R5bGVcXGIpLywgL14oPzppbnRlcnBvbGF0ZVxcYikvLCAvXig/OmNsYXNzRGVmXFxzKykvLCAvXig/OkRFRkFVTFRcXHMrKS8sIC9eKD86XFx3K1xccyspLywgL14oPzpbXlxcbl0qKS8sIC9eKD86Y2xhc3NcXHMrKS8sIC9eKD86KFxcdyspKygoLFxccypcXHcrKSopKS8sIC9eKD86W15cXG5dKikvLCAvXig/OnN0eWxlXFxzKykvLCAvXig/OihcXHcrKSsoKCxcXHMqXFx3KykqKSkvLCAvXig/OlteXFxuXSopLywgL14oPzphY2NUaXRsZVxccyo6XFxzKikvLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS8sIC9eKD86YWNjRGVzY3JcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopLywgL14oPzpbXFx9XSkvLCAvXig/OlteXFx9XSopLywgL14oPzplbmRcXGJcXHMqKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86XFwpXFwpXFwpKS8sIC9eKD86W1xcKV1cXCkpLywgL14oPzpcXH1cXH0pLywgL14oPzpcXH0pLywgL14oPzpcXCgtKS8sIC9eKD86LVxcKSkvLCAvXig/OlxcKFxcKCkvLCAvXig/OlxcXVxcXSkvLCAvXig/OlxcKCkvLCAvXig/OlxcXVxcKSkvLCAvXig/OlxcXFxcXF0pLywgL14oPzpcXC9cXF0pLywgL14oPzpcXClcXF0pLywgL14oPzpbXFwpXSkvLCAvXig/OlxcXT4pLywgL14oPzpbXFxdXSkvLCAvXig/Oi1cXCkpLywgL14oPzpcXCgtKS8sIC9eKD86XFwpXFwpKS8sIC9eKD86XFwpKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86XFwoXFwoKS8sIC9eKD86XFx7XFx7KS8sIC9eKD86XFx7KS8sIC9eKD86PikvLCAvXig/OlxcKFxcWykvLCAvXig/OlxcKCkvLCAvXig/OlxcW1xcWykvLCAvXig/OlxcW1xcfCkvLCAvXig/OlxcW1xcKCkvLCAvXig/OlxcKVxcKVxcKSkvLCAvXig/OlxcW1xcXFwpLywgL14oPzpcXFtcXC8pLywgL14oPzpcXFtcXFxcKS8sIC9eKD86XFxbKS8sIC9eKD86PFxcWykvLCAvXig/OlteXFwoXFxbXFxuXFwtXFwpXFx7XFx9XFxzXFw8XFw+Ol0rKS8sIC9eKD86JCkvLCAvXig/OltcIl1bYF0pLywgL14oPzpbXCJdW2BdKS8sIC9eKD86W15gXCJdKykvLCAvXig/OltgXVtcIl0pLywgL14oPzpbXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OlteXCJdKykvLCAvXig/OltcIl0pLywgL14oPzpcXF0+XFxzKlxcKCkvLCAvXig/Oiw/XFxzKnJpZ2h0XFxzKikvLCAvXig/Oiw/XFxzKmxlZnRcXHMqKS8sIC9eKD86LD9cXHMqeFxccyopLywgL14oPzosP1xccyp5XFxzKikvLCAvXig/Oiw/XFxzKnVwXFxzKikvLCAvXig/Oiw/XFxzKmRvd25cXHMqKS8sIC9eKD86XFwpXFxzKikvLCAvXig/OlxccypbeG88XT8tLStbLXhvPl1cXHMqKS8sIC9eKD86XFxzKlt4bzxdPz09K1s9eG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/LT9cXC4rLVt4bz5dP1xccyopLywgL14oPzpcXHMqfn5bXFx+XStcXHMqKS8sIC9eKD86XFxzKlt4bzxdPy0tXFxzKikvLCAvXig/OlxccypbeG88XT89PVxccyopLywgL14oPzpcXHMqW3hvPF0/LVxcLlxccyopLywgL14oPzpbXCJdW2BdKS8sIC9eKD86W1wiXSkvLCAvXig/OlxccypbeG88XT8tLStbLXhvPl1cXHMqKS8sIC9eKD86XFxzKlt4bzxdPz09K1s9eG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/LT9cXC4rLVt4bz5dP1xccyopLywgL14oPzo6XFxkKykvXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJTVFlMRV9ERUZJTklUSU9OXCI6IHsgXCJydWxlc1wiOiBbMjldLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUWUxFX1NUTU5UXCI6IHsgXCJydWxlc1wiOiBbMjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTREVGSURcIjogeyBcInJ1bGVzXCI6IFsyM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NERUZcIjogeyBcInJ1bGVzXCI6IFsyMSwgMjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTX1NUWUxFXCI6IHsgXCJydWxlc1wiOiBbMjZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTXCI6IHsgXCJydWxlc1wiOiBbMjVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkxMQUJFTFwiOiB7IFwicnVsZXNcIjogWzEwMCwgMTAxLCAxMDIsIDEwMywgMTA0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJBUlJPV19ESVJcIjogeyBcInJ1bGVzXCI6IFs4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5Ml0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQkxPQ0tfQVJST1dcIjogeyBcInJ1bGVzXCI6IFs3NywgODIsIDg1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOT0RFXCI6IHsgXCJydWxlc1wiOiBbMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA3OCwgODFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm1kX3N0cmluZ1wiOiB7IFwicnVsZXNcIjogWzEwLCAxMSwgNzksIDgwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzcGFjZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbMTMsIDE0LCA4MywgODRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFszNSwgMzZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzMzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFszMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEyLCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyNCwgMjcsIDMwLCAzMiwgMzQsIDM3LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwNV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBibG9ja19kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svYmxvY2tEQi50c1xuaW1wb3J0IGNsb25lIGZyb20gXCJsb2Rhc2gtZXMvY2xvbmUuanNcIjtcbnZhciBibG9ja0RhdGFiYXNlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBlZGdlTGlzdCA9IFtdO1xudmFyIGVkZ2VDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgQ09MT1JfS0VZV09SRCA9IFwiY29sb3JcIjtcbnZhciBGSUxMX0tFWVdPUkQgPSBcImZpbGxcIjtcbnZhciBCR19GSUxMID0gXCJiZ0ZpbGxcIjtcbnZhciBTVFlMRUNMQVNTX1NFUCA9IFwiLFwiO1xudmFyIGNvbmZpZyA9IGdldENvbmZpZzIoKTtcbnZhciBjbGFzc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBzYW5pdGl6ZVRleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dCh0eHQsIGNvbmZpZyksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIGFkZFN0eWxlQ2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBzdHlsZUF0dHJpYnV0ZXMgPSBcIlwiKSB7XG4gIGxldCBmb3VuZENsYXNzID0gY2xhc3Nlcy5nZXQoaWQpO1xuICBpZiAoIWZvdW5kQ2xhc3MpIHtcbiAgICBmb3VuZENsYXNzID0geyBpZCwgc3R5bGVzOiBbXSwgdGV4dFN0eWxlczogW10gfTtcbiAgICBjbGFzc2VzLnNldChpZCwgZm91bmRDbGFzcyk7XG4gIH1cbiAgaWYgKHN0eWxlQXR0cmlidXRlcyAhPT0gdm9pZCAwICYmIHN0eWxlQXR0cmlidXRlcyAhPT0gbnVsbCkge1xuICAgIHN0eWxlQXR0cmlidXRlcy5zcGxpdChTVFlMRUNMQVNTX1NFUCkuZm9yRWFjaCgoYXR0cmliKSA9PiB7XG4gICAgICBjb25zdCBmaXhlZEF0dHJpYiA9IGF0dHJpYi5yZXBsYWNlKC8oW147XSopOy8sIFwiJDFcIikudHJpbSgpO1xuICAgICAgaWYgKFJlZ0V4cChDT0xPUl9LRVlXT1JEKS5leGVjKGF0dHJpYikpIHtcbiAgICAgICAgY29uc3QgbmV3U3R5bGUxID0gZml4ZWRBdHRyaWIucmVwbGFjZShGSUxMX0tFWVdPUkQsIEJHX0ZJTEwpO1xuICAgICAgICBjb25zdCBuZXdTdHlsZTIgPSBuZXdTdHlsZTEucmVwbGFjZShDT0xPUl9LRVlXT1JELCBGSUxMX0tFWVdPUkQpO1xuICAgICAgICBmb3VuZENsYXNzLnRleHRTdHlsZXMucHVzaChuZXdTdHlsZTIpO1xuICAgICAgfVxuICAgICAgZm91bmRDbGFzcy5zdHlsZXMucHVzaChmaXhlZEF0dHJpYik7XG4gICAgfSk7XG4gIH1cbn0sIFwiYWRkU3R5bGVDbGFzc1wiKTtcbnZhciBhZGRTdHlsZTJOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCwgc3R5bGVzID0gXCJcIikge1xuICBjb25zdCBmb3VuZEJsb2NrID0gYmxvY2tEYXRhYmFzZS5nZXQoaWQpO1xuICBpZiAoc3R5bGVzICE9PSB2b2lkIDAgJiYgc3R5bGVzICE9PSBudWxsKSB7XG4gICAgZm91bmRCbG9jay5zdHlsZXMgPSBzdHlsZXMuc3BsaXQoU1RZTEVDTEFTU19TRVApO1xuICB9XG59LCBcImFkZFN0eWxlMk5vZGVcIik7XG52YXIgc2V0Q3NzQ2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW1JZHMsIGNzc0NsYXNzTmFtZSkge1xuICBpdGVtSWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgbGV0IGZvdW5kQmxvY2sgPSBibG9ja0RhdGFiYXNlLmdldChpZCk7XG4gICAgaWYgKGZvdW5kQmxvY2sgPT09IHZvaWQgMCkge1xuICAgICAgY29uc3QgdHJpbW1lZElkID0gaWQudHJpbSgpO1xuICAgICAgZm91bmRCbG9jayA9IHsgaWQ6IHRyaW1tZWRJZCwgdHlwZTogXCJuYVwiLCBjaGlsZHJlbjogW10gfTtcbiAgICAgIGJsb2NrRGF0YWJhc2Uuc2V0KHRyaW1tZWRJZCwgZm91bmRCbG9jayk7XG4gICAgfVxuICAgIGlmICghZm91bmRCbG9jay5jbGFzc2VzKSB7XG4gICAgICBmb3VuZEJsb2NrLmNsYXNzZXMgPSBbXTtcbiAgICB9XG4gICAgZm91bmRCbG9jay5jbGFzc2VzLnB1c2goY3NzQ2xhc3NOYW1lKTtcbiAgfSk7XG59LCBcInNldENzc0NsYXNzXCIpO1xudmFyIHBvcHVsYXRlQmxvY2tEYXRhYmFzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF9ibG9ja0xpc3QsIHBhcmVudCkgPT4ge1xuICBjb25zdCBibG9ja0xpc3QgPSBfYmxvY2tMaXN0LmZsYXQoKTtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja0xpc3QpIHtcbiAgICBpZiAoYmxvY2subGFiZWwpIHtcbiAgICAgIGJsb2NrLmxhYmVsID0gc2FuaXRpemVUZXh0KGJsb2NrLmxhYmVsKTtcbiAgICB9XG4gICAgaWYgKGJsb2NrLnR5cGUgPT09IFwiY2xhc3NEZWZcIikge1xuICAgICAgYWRkU3R5bGVDbGFzcyhibG9jay5pZCwgYmxvY2suY3NzKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJhcHBseUNsYXNzXCIpIHtcbiAgICAgIHNldENzc0NsYXNzKGJsb2NrLmlkLCBibG9jaz8uc3R5bGVDbGFzcyA/PyBcIlwiKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJhcHBseVN0eWxlc1wiKSB7XG4gICAgICBpZiAoYmxvY2s/LnN0eWxlc1N0cikge1xuICAgICAgICBhZGRTdHlsZTJOb2RlKGJsb2NrLmlkLCBibG9jaz8uc3R5bGVzU3RyKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJjb2x1bW4tc2V0dGluZ1wiKSB7XG4gICAgICBwYXJlbnQuY29sdW1ucyA9IGJsb2NrLmNvbHVtbnMgPz8gLTE7XG4gICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSBcImVkZ2VcIikge1xuICAgICAgY29uc3QgY291bnQgPSAoZWRnZUNvdW50LmdldChibG9jay5pZCkgPz8gMCkgKyAxO1xuICAgICAgZWRnZUNvdW50LnNldChibG9jay5pZCwgY291bnQpO1xuICAgICAgYmxvY2suaWQgPSBjb3VudCArIFwiLVwiICsgYmxvY2suaWQ7XG4gICAgICBlZGdlTGlzdC5wdXNoKGJsb2NrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFibG9jay5sYWJlbCkge1xuICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJjb21wb3NpdGVcIikge1xuICAgICAgICAgIGJsb2NrLmxhYmVsID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9jay5sYWJlbCA9IGJsb2NrLmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBleGlzdGluZ0Jsb2NrID0gYmxvY2tEYXRhYmFzZS5nZXQoYmxvY2suaWQpO1xuICAgICAgaWYgKGV4aXN0aW5nQmxvY2sgPT09IHZvaWQgMCkge1xuICAgICAgICBibG9ja0RhdGFiYXNlLnNldChibG9jay5pZCwgYmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJsb2NrLnR5cGUgIT09IFwibmFcIikge1xuICAgICAgICAgIGV4aXN0aW5nQmxvY2sudHlwZSA9IGJsb2NrLnR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrLmxhYmVsICE9PSBibG9jay5pZCkge1xuICAgICAgICAgIGV4aXN0aW5nQmxvY2subGFiZWwgPSBibG9jay5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgICAgIHBvcHVsYXRlQmxvY2tEYXRhYmFzZShibG9jay5jaGlsZHJlbiwgYmxvY2spO1xuICAgICAgfVxuICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IFwic3BhY2VcIikge1xuICAgICAgICBjb25zdCB3ID0gYmxvY2sud2lkdGggPz8gMTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgICAgICBjb25zdCBuZXdCbG9jayA9IGNsb25lKGJsb2NrKTtcbiAgICAgICAgICBuZXdCbG9jay5pZCA9IG5ld0Jsb2NrLmlkICsgXCItXCIgKyBqO1xuICAgICAgICAgIGJsb2NrRGF0YWJhc2Uuc2V0KG5ld0Jsb2NrLmlkLCBuZXdCbG9jayk7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChuZXdCbG9jayk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdCbG9jayA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYmxvY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwYXJlbnQuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbn0sIFwicG9wdWxhdGVCbG9ja0RhdGFiYXNlXCIpO1xudmFyIGJsb2NrcyA9IFtdO1xudmFyIHJvb3RCbG9jayA9IHsgaWQ6IFwicm9vdFwiLCB0eXBlOiBcImNvbXBvc2l0ZVwiLCBjaGlsZHJlbjogW10sIGNvbHVtbnM6IC0xIH07XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcIkNsZWFyIGNhbGxlZFwiKTtcbiAgY2xlYXIoKTtcbiAgcm9vdEJsb2NrID0geyBpZDogXCJyb290XCIsIHR5cGU6IFwiY29tcG9zaXRlXCIsIGNoaWxkcmVuOiBbXSwgY29sdW1uczogLTEgfTtcbiAgYmxvY2tEYXRhYmFzZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtbXCJyb290XCIsIHJvb3RCbG9ja11dKTtcbiAgYmxvY2tzID0gW107XG4gIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBlZGdlTGlzdCA9IFtdO1xuICBlZGdlQ291bnQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xufSwgXCJjbGVhclwiKTtcbmZ1bmN0aW9uIHR5cGVTdHIyVHlwZSh0eXBlU3RyKSB7XG4gIGxvZy5kZWJ1ZyhcInR5cGVTdHIyVHlwZVwiLCB0eXBlU3RyKTtcbiAgc3dpdGNoICh0eXBlU3RyKSB7XG4gICAgY2FzZSBcIltdXCI6XG4gICAgICByZXR1cm4gXCJzcXVhcmVcIjtcbiAgICBjYXNlIFwiKClcIjpcbiAgICAgIGxvZy5kZWJ1ZyhcIndlIGhhdmUgYSByb3VuZFwiKTtcbiAgICAgIHJldHVybiBcInJvdW5kXCI7XG4gICAgY2FzZSBcIigoKSlcIjpcbiAgICAgIHJldHVybiBcImNpcmNsZVwiO1xuICAgIGNhc2UgXCI+XVwiOlxuICAgICAgcmV0dXJuIFwicmVjdF9sZWZ0X2ludl9hcnJvd1wiO1xuICAgIGNhc2UgXCJ7fVwiOlxuICAgICAgcmV0dXJuIFwiZGlhbW9uZFwiO1xuICAgIGNhc2UgXCJ7e319XCI6XG4gICAgICByZXR1cm4gXCJoZXhhZ29uXCI7XG4gICAgY2FzZSBcIihbXSlcIjpcbiAgICAgIHJldHVybiBcInN0YWRpdW1cIjtcbiAgICBjYXNlIFwiW1tdXVwiOlxuICAgICAgcmV0dXJuIFwic3Vicm91dGluZVwiO1xuICAgIGNhc2UgXCJbKCldXCI6XG4gICAgICByZXR1cm4gXCJjeWxpbmRlclwiO1xuICAgIGNhc2UgXCIoKCgpKSlcIjpcbiAgICAgIHJldHVybiBcImRvdWJsZWNpcmNsZVwiO1xuICAgIGNhc2UgXCJbLy9dXCI6XG4gICAgICByZXR1cm4gXCJsZWFuX3JpZ2h0XCI7XG4gICAgY2FzZSBcIltcXFxcXFxcXF1cIjpcbiAgICAgIHJldHVybiBcImxlYW5fbGVmdFwiO1xuICAgIGNhc2UgXCJbL1xcXFxdXCI6XG4gICAgICByZXR1cm4gXCJ0cmFwZXpvaWRcIjtcbiAgICBjYXNlIFwiW1xcXFwvXVwiOlxuICAgICAgcmV0dXJuIFwiaW52X3RyYXBlem9pZFwiO1xuICAgIGNhc2UgXCI8W10+XCI6XG4gICAgICByZXR1cm4gXCJibG9ja19hcnJvd1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJuYVwiO1xuICB9XG59XG5fX25hbWUodHlwZVN0cjJUeXBlLCBcInR5cGVTdHIyVHlwZVwiKTtcbmZ1bmN0aW9uIGVkZ2VUeXBlU3RyMlR5cGUodHlwZVN0cikge1xuICBsb2cuZGVidWcoXCJ0eXBlU3RyMlR5cGVcIiwgdHlwZVN0cik7XG4gIHN3aXRjaCAodHlwZVN0cikge1xuICAgIGNhc2UgXCI9PVwiOlxuICAgICAgcmV0dXJuIFwidGhpY2tcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwibm9ybWFsXCI7XG4gIH1cbn1cbl9fbmFtZShlZGdlVHlwZVN0cjJUeXBlLCBcImVkZ2VUeXBlU3RyMlR5cGVcIik7XG5mdW5jdGlvbiBlZGdlU3RyVG9FZGdlRGF0YSh0eXBlU3RyKSB7XG4gIHN3aXRjaCAodHlwZVN0ci50cmltKCkpIHtcbiAgICBjYXNlIFwiLS14XCI6XG4gICAgICByZXR1cm4gXCJhcnJvd19jcm9zc1wiO1xuICAgIGNhc2UgXCItLW9cIjpcbiAgICAgIHJldHVybiBcImFycm93X2NpcmNsZVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJhcnJvd19wb2ludFwiO1xuICB9XG59XG5fX25hbWUoZWRnZVN0clRvRWRnZURhdGEsIFwiZWRnZVN0clRvRWRnZURhdGFcIik7XG52YXIgY250ID0gMDtcbnZhciBnZW5lcmF0ZUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGNudCsrO1xuICByZXR1cm4gXCJpZC1cIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxMikgKyBcIi1cIiArIGNudDtcbn0sIFwiZ2VuZXJhdGVJZFwiKTtcbnZhciBzZXRIaWVyYXJjaHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChibG9jaykgPT4ge1xuICByb290QmxvY2suY2hpbGRyZW4gPSBibG9jaztcbiAgcG9wdWxhdGVCbG9ja0RhdGFiYXNlKGJsb2NrLCByb290QmxvY2spO1xuICBibG9ja3MgPSByb290QmxvY2suY2hpbGRyZW47XG59LCBcInNldEhpZXJhcmNoeVwiKTtcbnZhciBnZXRDb2x1bW5zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYmxvY2tJZCkgPT4ge1xuICBjb25zdCBibG9jayA9IGJsb2NrRGF0YWJhc2UuZ2V0KGJsb2NrSWQpO1xuICBpZiAoIWJsb2NrKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChibG9jay5jb2x1bW5zKSB7XG4gICAgcmV0dXJuIGJsb2NrLmNvbHVtbnM7XG4gIH1cbiAgaWYgKCFibG9jay5jaGlsZHJlbikge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gYmxvY2suY2hpbGRyZW4ubGVuZ3RoO1xufSwgXCJnZXRDb2x1bW5zXCIpO1xudmFyIGdldEJsb2Nrc0ZsYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmV0dXJuIFsuLi5ibG9ja0RhdGFiYXNlLnZhbHVlcygpXTtcbn0sIFwiZ2V0QmxvY2tzRmxhdFwiKTtcbnZhciBnZXRCbG9ja3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmV0dXJuIGJsb2NrcyB8fCBbXTtcbn0sIFwiZ2V0QmxvY2tzXCIpO1xudmFyIGdldEVkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIHJldHVybiBlZGdlTGlzdDtcbn0sIFwiZ2V0RWRnZXNcIik7XG52YXIgZ2V0QmxvY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4ge1xuICByZXR1cm4gYmxvY2tEYXRhYmFzZS5nZXQoaWQpO1xufSwgXCJnZXRCbG9ja1wiKTtcbnZhciBzZXRCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGJsb2NrKSA9PiB7XG4gIGJsb2NrRGF0YWJhc2Uuc2V0KGJsb2NrLmlkLCBibG9jayk7XG59LCBcInNldEJsb2NrXCIpO1xudmFyIGdldExvZ2dlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gY29uc29sZSwgXCJnZXRMb2dnZXJcIik7XG52YXIgZ2V0Q2xhc3NlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjbGFzc2VzO1xufSwgXCJnZXRDbGFzc2VzXCIpO1xudmFyIGRiID0ge1xuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkuYmxvY2ssIFwiZ2V0Q29uZmlnXCIpLFxuICB0eXBlU3RyMlR5cGUsXG4gIGVkZ2VUeXBlU3RyMlR5cGUsXG4gIGVkZ2VTdHJUb0VkZ2VEYXRhLFxuICBnZXRMb2dnZXIsXG4gIGdldEJsb2Nrc0ZsYXQsXG4gIGdldEJsb2NrcyxcbiAgZ2V0RWRnZXMsXG4gIHNldEhpZXJhcmNoeSxcbiAgZ2V0QmxvY2ssXG4gIHNldEJsb2NrLFxuICBnZXRDb2x1bW5zLFxuICBnZXRDbGFzc2VzLFxuICBjbGVhcjogY2xlYXIyLFxuICBnZW5lcmF0ZUlkXG59O1xudmFyIGJsb2NrREJfZGVmYXVsdCA9IGRiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svc3R5bGVzLnRzXG5pbXBvcnQgKiBhcyBraHJvbWEgZnJvbSBcImtocm9tYVwiO1xudmFyIGZhZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb2xvciwgb3BhY2l0eSkgPT4ge1xuICBjb25zdCBjaGFubmVsMiA9IGtocm9tYS5jaGFubmVsO1xuICBjb25zdCByID0gY2hhbm5lbDIoY29sb3IsIFwiclwiKTtcbiAgY29uc3QgZyA9IGNoYW5uZWwyKGNvbG9yLCBcImdcIik7XG4gIGNvbnN0IGIgPSBjaGFubmVsMihjb2xvciwgXCJiXCIpO1xuICByZXR1cm4ga2hyb21hLnJnYmEociwgZywgYiwgb3BhY2l0eSk7XG59LCBcImZhZGVcIik7XG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYC5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBjb2xvcjogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICB9XG4gIC5jbHVzdGVyLWxhYmVsIHRleHQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCBzcGFuLHAge1xuICAgIGNvbG9yOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuXG5cbiAgLmxhYmVsIHRleHQsc3BhbixwIHtcbiAgICBmaWxsOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gICAgY29sb3I6ICR7b3B0aW9ucy5ub2RlVGV4dENvbG9yIHx8IG9wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG4gIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgfVxuICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LW91dGVyLXRzcGFuIHtcbiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAvLyB9XG4gIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtaW5uZXItdHNwYW4ge1xuICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDtcbiAgLy8gfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hcnJvd2hlYWRDb2xvcn07XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgICAgZmlsbDogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqL1xuICAubGFiZWxCa2cge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZmFkZShvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmQsIDAuNSl9O1xuICAgIC8vIGJhY2tncm91bmQtY29sb3I6XG4gIH1cblxuICAubm9kZSAuY2x1c3RlciB7XG4gICAgLy8gZmlsbDogJHtmYWRlKG9wdGlvbnMubWFpbkJrZywgMC41KX07XG4gICAgZmlsbDogJHtmYWRlKG9wdGlvbnMuY2x1c3RlckJrZywgMC41KX07XG4gICAgc3Ryb2tlOiAke2ZhZGUob3B0aW9ucy5jbHVzdGVyQm9yZGVyLCAwLjIpfTtcbiAgICBib3gtc2hhZG93OiByZ2JhKDUwLCA1MCwgOTMsIDAuMjUpIDBweCAxM3B4IDI3cHggLTVweCwgcmdiYSgwLCAwLCAwLCAwLjMpIDBweCA4cHggMTZweCAtOHB4O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLmNsdXN0ZXIgc3BhbixwIHtcbiAgICBjb2xvcjogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtvcHRpb25zLmJvcmRlcjJ9O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9ibG9jay9ibG9ja1JlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgYXMgZDNzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2Jsb2NrL2xheW91dC50c1xudmFyIHBhZGRpbmcgPSBnZXRDb25maWcyKCk/LmJsb2NrPy5wYWRkaW5nID8/IDg7XG5mdW5jdGlvbiBjYWxjdWxhdGVCbG9ja1Bvc2l0aW9uKGNvbHVtbnMsIHBvc2l0aW9uKSB7XG4gIGlmIChjb2x1bW5zID09PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1ucyBtdXN0IGJlIGFuIGludGVnZXIgIT09IDAuXCIpO1xuICB9XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIocG9zaXRpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zaXRpb24gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlwiICsgcG9zaXRpb24pO1xuICB9XG4gIGlmIChjb2x1bW5zIDwgMCkge1xuICAgIHJldHVybiB7IHB4OiBwb3NpdGlvbiwgcHk6IDAgfTtcbiAgfVxuICBpZiAoY29sdW1ucyA9PT0gMSkge1xuICAgIHJldHVybiB7IHB4OiAwLCBweTogcG9zaXRpb24gfTtcbiAgfVxuICBjb25zdCBweCA9IHBvc2l0aW9uICUgY29sdW1ucztcbiAgY29uc3QgcHkgPSBNYXRoLmZsb29yKHBvc2l0aW9uIC8gY29sdW1ucyk7XG4gIHJldHVybiB7IHB4LCBweSB9O1xufVxuX19uYW1lKGNhbGN1bGF0ZUJsb2NrUG9zaXRpb24sIFwiY2FsY3VsYXRlQmxvY2tQb3NpdGlvblwiKTtcbnZhciBnZXRNYXhDaGlsZFNpemUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChibG9jaykgPT4ge1xuICBsZXQgbWF4V2lkdGggPSAwO1xuICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9ID0gY2hpbGQuc2l6ZSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHg6IDAsIHk6IDAgfTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDpcIixcbiAgICAgIGNoaWxkLmlkLFxuICAgICAgXCJ3aWR0aDpcIixcbiAgICAgIHdpZHRoLFxuICAgICAgXCJoZWlnaHQ6XCIsXG4gICAgICBoZWlnaHQsXG4gICAgICBcIng6XCIsXG4gICAgICB4LFxuICAgICAgXCJ5OlwiLFxuICAgICAgeSxcbiAgICAgIGNoaWxkLnR5cGVcbiAgICApO1xuICAgIGlmIChjaGlsZC50eXBlID09PSBcInNwYWNlXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAod2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgbWF4V2lkdGggPSB3aWR0aCAvIChibG9jay53aWR0aEluQ29sdW1ucyA/PyAxKTtcbiAgICB9XG4gICAgaWYgKGhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgbWF4SGVpZ2h0ID0gaGVpZ2h0O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogbWF4V2lkdGgsIGhlaWdodDogbWF4SGVpZ2h0IH07XG59LCBcImdldE1heENoaWxkU2l6ZVwiKTtcbmZ1bmN0aW9uIHNldEJsb2NrU2l6ZXMoYmxvY2ssIGRiMiwgc2libGluZ1dpZHRoID0gMCwgc2libGluZ0hlaWdodCA9IDApIHtcbiAgbG9nLmRlYnVnKFxuICAgIFwic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpXCIsXG4gICAgYmxvY2suaWQsXG4gICAgYmxvY2s/LnNpemU/LngsXG4gICAgXCJibG9jayB3aWR0aCA9XCIsXG4gICAgYmxvY2s/LnNpemUsXG4gICAgXCJzaWVibGluZ1dpZHRoXCIsXG4gICAgc2libGluZ1dpZHRoXG4gICk7XG4gIGlmICghYmxvY2s/LnNpemU/LndpZHRoKSB7XG4gICAgYmxvY2suc2l6ZSA9IHtcbiAgICAgIHdpZHRoOiBzaWJsaW5nV2lkdGgsXG4gICAgICBoZWlnaHQ6IHNpYmxpbmdIZWlnaHQsXG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cbiAgbGV0IG1heFdpZHRoID0gMDtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIGlmIChibG9jay5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgYmxvY2suY2hpbGRyZW4pIHtcbiAgICAgIHNldEJsb2NrU2l6ZXMoY2hpbGQsIGRiMik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkU2l6ZSA9IGdldE1heENoaWxkU2l6ZShibG9jayk7XG4gICAgbWF4V2lkdGggPSBjaGlsZFNpemUud2lkdGg7XG4gICAgbWF4SGVpZ2h0ID0gY2hpbGRTaXplLmhlaWdodDtcbiAgICBsb2cuZGVidWcoXCJzZXRCbG9ja1NpemVzIGFiYzk1IG1heFdpZHRoIG9mXCIsIGJsb2NrLmlkLCBcIjpzIGNoaWxkcmVuIGlzIFwiLCBtYXhXaWR0aCwgbWF4SGVpZ2h0KTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY2hpbGQuc2l6ZSkge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke2Jsb2NrLmlkfSBpZD0ke2NoaWxkLmlkfSAke21heFdpZHRofSAke21heEhlaWdodH0gJHtKU09OLnN0cmluZ2lmeShjaGlsZC5zaXplKX1gXG4gICAgICAgICk7XG4gICAgICAgIGNoaWxkLnNpemUud2lkdGggPSBtYXhXaWR0aCAqIChjaGlsZC53aWR0aEluQ29sdW1ucyA/PyAxKSArIHBhZGRpbmcgKiAoKGNoaWxkLndpZHRoSW5Db2x1bW5zID8/IDEpIC0gMSk7XG4gICAgICAgIGNoaWxkLnNpemUuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICBjaGlsZC5zaXplLnggPSAwO1xuICAgICAgICBjaGlsZC5zaXplLnkgPSAwO1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYGFiYzk1IHVwZGF0aW5nIHNpemUgb2YgJHtibG9jay5pZH0gY2hpbGRyZW4gY2hpbGQ6JHtjaGlsZC5pZH0gbWF4V2lkdGg6JHttYXhXaWR0aH0gbWF4SGVpZ2h0OiR7bWF4SGVpZ2h0fWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgc2V0QmxvY2tTaXplcyhjaGlsZCwgZGIyLCBtYXhXaWR0aCwgbWF4SGVpZ2h0KTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1ucyA9IGJsb2NrLmNvbHVtbnMgPz8gLTE7XG4gICAgbGV0IG51bUl0ZW1zID0gMDtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgICBudW1JdGVtcyArPSBjaGlsZC53aWR0aEluQ29sdW1ucyA/PyAxO1xuICAgIH1cbiAgICBsZXQgeFNpemUgPSBibG9jay5jaGlsZHJlbi5sZW5ndGg7XG4gICAgaWYgKGNvbHVtbnMgPiAwICYmIGNvbHVtbnMgPCBudW1JdGVtcykge1xuICAgICAgeFNpemUgPSBjb2x1bW5zO1xuICAgIH1cbiAgICBjb25zdCB5U2l6ZSA9IE1hdGguY2VpbChudW1JdGVtcyAvIHhTaXplKTtcbiAgICBsZXQgd2lkdGggPSB4U2l6ZSAqIChtYXhXaWR0aCArIHBhZGRpbmcpICsgcGFkZGluZztcbiAgICBsZXQgaGVpZ2h0ID0geVNpemUgKiAobWF4SGVpZ2h0ICsgcGFkZGluZykgKyBwYWRkaW5nO1xuICAgIGlmICh3aWR0aCA8IHNpYmxpbmdXaWR0aCkge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgRGV0ZWN0ZWQgdG8gc21hbGwgc2llYmxpbmc6IGFiYzk1ICR7YmxvY2suaWR9IHNpZWJsaW5nV2lkdGggJHtzaWJsaW5nV2lkdGh9IHNpZWJsaW5nSGVpZ2h0ICR7c2libGluZ0hlaWdodH0gd2lkdGggJHt3aWR0aH1gXG4gICAgICApO1xuICAgICAgd2lkdGggPSBzaWJsaW5nV2lkdGg7XG4gICAgICBoZWlnaHQgPSBzaWJsaW5nSGVpZ2h0O1xuICAgICAgY29uc3QgY2hpbGRXaWR0aCA9IChzaWJsaW5nV2lkdGggLSB4U2l6ZSAqIHBhZGRpbmcgLSBwYWRkaW5nKSAvIHhTaXplO1xuICAgICAgY29uc3QgY2hpbGRIZWlnaHQgPSAoc2libGluZ0hlaWdodCAtIHlTaXplICogcGFkZGluZyAtIHBhZGRpbmcpIC8geVNpemU7XG4gICAgICBsb2cuZGVidWcoXCJTaXplIGluZGF0YSBhYmM4OFwiLCBibG9jay5pZCwgXCJjaGlsZFdpZHRoXCIsIGNoaWxkV2lkdGgsIFwibWF4V2lkdGhcIiwgbWF4V2lkdGgpO1xuICAgICAgbG9nLmRlYnVnKFwiU2l6ZSBpbmRhdGEgYWJjODhcIiwgYmxvY2suaWQsIFwiY2hpbGRIZWlnaHRcIiwgY2hpbGRIZWlnaHQsIFwibWF4SGVpZ2h0XCIsIG1heEhlaWdodCk7XG4gICAgICBsb2cuZGVidWcoXCJTaXplIGluZGF0YSBhYmM4OCB4U2l6ZVwiLCB4U2l6ZSwgXCJwYWRkaW5nXCIsIHBhZGRpbmcpO1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgICBpZiAoY2hpbGQuc2l6ZSkge1xuICAgICAgICAgIGNoaWxkLnNpemUud2lkdGggPSBjaGlsZFdpZHRoO1xuICAgICAgICAgIGNoaWxkLnNpemUuaGVpZ2h0ID0gY2hpbGRIZWlnaHQ7XG4gICAgICAgICAgY2hpbGQuc2l6ZS54ID0gMDtcbiAgICAgICAgICBjaGlsZC5zaXplLnkgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBhYmM5NSAoZmluYWxlIGNhbGMpICR7YmxvY2suaWR9IHhTaXplICR7eFNpemV9IHlTaXplICR7eVNpemV9IGNvbHVtbnMgJHtjb2x1bW5zfSR7YmxvY2suY2hpbGRyZW4ubGVuZ3RofSB3aWR0aD0ke01hdGgubWF4KHdpZHRoLCBibG9jay5zaXplPy53aWR0aCB8fCAwKX1gXG4gICAgKTtcbiAgICBpZiAod2lkdGggPCAoYmxvY2s/LnNpemU/LndpZHRoIHx8IDApKSB7XG4gICAgICB3aWR0aCA9IGJsb2NrPy5zaXplPy53aWR0aCB8fCAwO1xuICAgICAgY29uc3QgbnVtID0gY29sdW1ucyA+IDAgPyBNYXRoLm1pbihibG9jay5jaGlsZHJlbi5sZW5ndGgsIGNvbHVtbnMpIDogYmxvY2suY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgaWYgKG51bSA+IDApIHtcbiAgICAgICAgY29uc3QgY2hpbGRXaWR0aCA9ICh3aWR0aCAtIG51bSAqIHBhZGRpbmcgLSBwYWRkaW5nKSAvIG51bTtcbiAgICAgICAgbG9nLmRlYnVnKFwiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aFwiLCBibG9jay5pZCwgd2lkdGgsIGJsb2NrLnNpemU/LndpZHRoLCBjaGlsZFdpZHRoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChjaGlsZC5zaXplKSB7XG4gICAgICAgICAgICBjaGlsZC5zaXplLndpZHRoID0gY2hpbGRXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYmxvY2suc2l6ZSA9IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBcInNldEJsb2NrU2l6ZXMgYWJjOTQgKGRvbmUpXCIsXG4gICAgYmxvY2suaWQsXG4gICAgYmxvY2s/LnNpemU/LngsXG4gICAgYmxvY2s/LnNpemU/LndpZHRoLFxuICAgIGJsb2NrPy5zaXplPy55LFxuICAgIGJsb2NrPy5zaXplPy5oZWlnaHRcbiAgKTtcbn1cbl9fbmFtZShzZXRCbG9ja1NpemVzLCBcInNldEJsb2NrU2l6ZXNcIik7XG5mdW5jdGlvbiBsYXlvdXRCbG9ja3MoYmxvY2ssIGRiMikge1xuICBsb2cuZGVidWcoXG4gICAgYGFiYzg1IGxheW91dCBibG9ja3MgKD0+bGF5b3V0QmxvY2tzKSAke2Jsb2NrLmlkfSB4OiAke2Jsb2NrPy5zaXplPy54fSB5OiAke2Jsb2NrPy5zaXplPy55fSB3aWR0aDogJHtibG9jaz8uc2l6ZT8ud2lkdGh9YFxuICApO1xuICBjb25zdCBjb2x1bW5zID0gYmxvY2suY29sdW1ucyA/PyAtMTtcbiAgbG9nLmRlYnVnKFwibGF5b3V0QmxvY2tzIGNvbHVtbnMgYWJjOTVcIiwgYmxvY2suaWQsIFwiPT5cIiwgY29sdW1ucywgYmxvY2spO1xuICBpZiAoYmxvY2suY2hpbGRyZW4gJiYgLy8gZmluZCBtYXggd2lkdGggb2YgY2hpbGRyZW5cbiAgYmxvY2suY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHdpZHRoID0gYmxvY2s/LmNoaWxkcmVuWzBdPy5zaXplPy53aWR0aCA/PyAwO1xuICAgIGNvbnN0IHdpZHRoT2ZDaGlsZHJlbiA9IGJsb2NrLmNoaWxkcmVuLmxlbmd0aCAqIHdpZHRoICsgKGJsb2NrLmNoaWxkcmVuLmxlbmd0aCAtIDEpICogcGFkZGluZztcbiAgICBsb2cuZGVidWcoXCJ3aWR0aE9mQ2hpbGRyZW4gODhcIiwgd2lkdGhPZkNoaWxkcmVuLCBcInBvc1hcIik7XG4gICAgbGV0IGNvbHVtblBvcyA9IDA7XG4gICAgbG9nLmRlYnVnKFwiYWJjOTEgYmxvY2s/LnNpemU/LnhcIiwgYmxvY2suaWQsIGJsb2NrPy5zaXplPy54KTtcbiAgICBsZXQgc3RhcnRpbmdQb3NYID0gYmxvY2s/LnNpemU/LnggPyBibG9jaz8uc2l6ZT8ueCArICgtYmxvY2s/LnNpemU/LndpZHRoIC8gMiB8fCAwKSA6IC1wYWRkaW5nO1xuICAgIGxldCByb3dQb3MgPSAwO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgYmxvY2suY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGJsb2NrO1xuICAgICAgaWYgKCFjaGlsZC5zaXplKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB3aWR0aDogd2lkdGgyLCBoZWlnaHQgfSA9IGNoaWxkLnNpemU7XG4gICAgICBjb25zdCB7IHB4LCBweSB9ID0gY2FsY3VsYXRlQmxvY2tQb3NpdGlvbihjb2x1bW5zLCBjb2x1bW5Qb3MpO1xuICAgICAgaWYgKHB5ICE9IHJvd1Bvcykge1xuICAgICAgICByb3dQb3MgPSBweTtcbiAgICAgICAgc3RhcnRpbmdQb3NYID0gYmxvY2s/LnNpemU/LnggPyBibG9jaz8uc2l6ZT8ueCArICgtYmxvY2s/LnNpemU/LndpZHRoIC8gMiB8fCAwKSA6IC1wYWRkaW5nO1xuICAgICAgICBsb2cuZGVidWcoXCJOZXcgcm93IGluIGxheW91dCBmb3IgYmxvY2tcIiwgYmxvY2suaWQsIFwiIGFuZCBjaGlsZCBcIiwgY2hpbGQuaWQsIHJvd1Bvcyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7Y2hpbGQuaWR9IFBvczogJHtjb2x1bW5Qb3N9IChweCwgcHkpICR7cHh9LCR7cHl9ICgke3BhcmVudD8uc2l6ZT8ueH0sJHtwYXJlbnQ/LnNpemU/Lnl9KSBwYXJlbnQ6ICR7cGFyZW50LmlkfSB3aWR0aDogJHt3aWR0aDJ9JHtwYWRkaW5nfWBcbiAgICAgICk7XG4gICAgICBpZiAocGFyZW50LnNpemUpIHtcbiAgICAgICAgY29uc3QgaGFsZldpZHRoID0gd2lkdGgyIC8gMjtcbiAgICAgICAgY2hpbGQuc2l6ZS54ID0gc3RhcnRpbmdQb3NYICsgcGFkZGluZyArIGhhbGZXaWR0aDtcbiAgICAgICAgbG9nLmRlYnVnKFxuICAgICAgICAgIGBhYmM5MSBsYXlvdXQgYmxvY2tzIChjYWxjKSBweCwgcHlpZDoke2NoaWxkLmlkfSBzdGFydGluZ1Bvcz1YJHtzdGFydGluZ1Bvc1h9IG5ldyBzdGFydGluZ1Bvc1gke2NoaWxkLnNpemUueH0gJHtoYWxmV2lkdGh9IHBhZGRpbmc9JHtwYWRkaW5nfSB3aWR0aD0ke3dpZHRoMn0gaGFsZldpZHRoPSR7aGFsZldpZHRofSA9PiB4OiR7Y2hpbGQuc2l6ZS54fSB5OiR7Y2hpbGQuc2l6ZS55fSAke2NoaWxkLndpZHRoSW5Db2x1bW5zfSAod2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiAke3dpZHRoMiAqIChjaGlsZD8ud2lkdGhJbkNvbHVtbnMgPz8gMSkgLyAyfWBcbiAgICAgICAgKTtcbiAgICAgICAgc3RhcnRpbmdQb3NYID0gY2hpbGQuc2l6ZS54ICsgaGFsZldpZHRoO1xuICAgICAgICBjaGlsZC5zaXplLnkgPSBwYXJlbnQuc2l6ZS55IC0gcGFyZW50LnNpemUuaGVpZ2h0IC8gMiArIHB5ICogKGhlaWdodCArIHBhZGRpbmcpICsgaGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHtjaGlsZC5pZH1zdGFydGluZ1Bvc1gke3N0YXJ0aW5nUG9zWH0ke3BhZGRpbmd9JHtoYWxmV2lkdGh9PT54OiR7Y2hpbGQuc2l6ZS54fXk6JHtjaGlsZC5zaXplLnl9JHtjaGlsZC53aWR0aEluQ29sdW1uc30od2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiR7d2lkdGgyICogKGNoaWxkPy53aWR0aEluQ29sdW1ucyA/PyAxKSAvIDJ9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIGxheW91dEJsb2NrcyhjaGlsZCwgZGIyKTtcbiAgICAgIH1cbiAgICAgIGNvbHVtblBvcyArPSBjaGlsZD8ud2lkdGhJbkNvbHVtbnMgPz8gMTtcbiAgICAgIGxvZy5kZWJ1ZyhcImFiYzg4IGNvbHVtbnNQb3NcIiwgY2hpbGQsIGNvbHVtblBvcyk7XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBgbGF5b3V0IGJsb2NrcyAoPD09bGF5b3V0QmxvY2tzKSAke2Jsb2NrLmlkfSB4OiAke2Jsb2NrPy5zaXplPy54fSB5OiAke2Jsb2NrPy5zaXplPy55fSB3aWR0aDogJHtibG9jaz8uc2l6ZT8ud2lkdGh9YFxuICApO1xufVxuX19uYW1lKGxheW91dEJsb2NrcywgXCJsYXlvdXRCbG9ja3NcIik7XG5mdW5jdGlvbiBmaW5kQm91bmRzKGJsb2NrLCB7IG1pblgsIG1pblksIG1heFgsIG1heFkgfSA9IHsgbWluWDogMCwgbWluWTogMCwgbWF4WDogMCwgbWF4WTogMCB9KSB7XG4gIGlmIChibG9jay5zaXplICYmIGJsb2NrLmlkICE9PSBcInJvb3RcIikge1xuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gYmxvY2suc2l6ZTtcbiAgICBpZiAoeCAtIHdpZHRoIC8gMiA8IG1pblgpIHtcbiAgICAgIG1pblggPSB4IC0gd2lkdGggLyAyO1xuICAgIH1cbiAgICBpZiAoeSAtIGhlaWdodCAvIDIgPCBtaW5ZKSB7XG4gICAgICBtaW5ZID0geSAtIGhlaWdodCAvIDI7XG4gICAgfVxuICAgIGlmICh4ICsgd2lkdGggLyAyID4gbWF4WCkge1xuICAgICAgbWF4WCA9IHggKyB3aWR0aCAvIDI7XG4gICAgfVxuICAgIGlmICh5ICsgaGVpZ2h0IC8gMiA+IG1heFkpIHtcbiAgICAgIG1heFkgPSB5ICsgaGVpZ2h0IC8gMjtcbiAgICB9XG4gIH1cbiAgaWYgKGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgKHsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSB9ID0gZmluZEJvdW5kcyhjaGlsZCwgeyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZIH0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSB9O1xufVxuX19uYW1lKGZpbmRCb3VuZHMsIFwiZmluZEJvdW5kc1wiKTtcbmZ1bmN0aW9uIGxheW91dChkYjIpIHtcbiAgY29uc3Qgcm9vdCA9IGRiMi5nZXRCbG9jayhcInJvb3RcIik7XG4gIGlmICghcm9vdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzZXRCbG9ja1NpemVzKHJvb3QsIGRiMiwgMCwgMCk7XG4gIGxheW91dEJsb2Nrcyhyb290LCBkYjIpO1xuICBsb2cuZGVidWcoXCJnZXRCbG9ja3NcIiwgSlNPTi5zdHJpbmdpZnkocm9vdCwgbnVsbCwgMikpO1xuICBjb25zdCB7IG1pblgsIG1pblksIG1heFgsIG1heFkgfSA9IGZpbmRCb3VuZHMocm9vdCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heFkgLSBtaW5ZO1xuICBjb25zdCB3aWR0aCA9IG1heFggLSBtaW5YO1xuICByZXR1cm4geyB4OiBtaW5YLCB5OiBtaW5ZLCB3aWR0aCwgaGVpZ2h0IH07XG59XG5fX25hbWUobGF5b3V0LCBcImxheW91dFwiKTtcblxuLy8gc3JjL2RpYWdyYW1zL2Jsb2NrL3JlbmRlckhlbHBlcnMudHNcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcbmZ1bmN0aW9uIGdldE5vZGVGcm9tQmxvY2soYmxvY2ssIGRiMiwgcG9zaXRpb25lZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHZlcnRleCA9IGJsb2NrO1xuICBsZXQgY2xhc3NTdHIgPSBcImRlZmF1bHRcIjtcbiAgaWYgKCh2ZXJ0ZXg/LmNsYXNzZXM/Lmxlbmd0aCB8fCAwKSA+IDApIHtcbiAgICBjbGFzc1N0ciA9ICh2ZXJ0ZXg/LmNsYXNzZXMgPz8gW10pLmpvaW4oXCIgXCIpO1xuICB9XG4gIGNsYXNzU3RyID0gY2xhc3NTdHIgKyBcIiBmbG93Y2hhcnQtbGFiZWxcIjtcbiAgbGV0IHJhZGl1cyA9IDA7XG4gIGxldCBzaGFwZSA9IFwiXCI7XG4gIGxldCBwYWRkaW5nMjtcbiAgc3dpdGNoICh2ZXJ0ZXgudHlwZSkge1xuICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgcmFkaXVzID0gNTtcbiAgICAgIHNoYXBlID0gXCJyZWN0XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY29tcG9zaXRlXCI6XG4gICAgICByYWRpdXMgPSAwO1xuICAgICAgc2hhcGUgPSBcImNvbXBvc2l0ZVwiO1xuICAgICAgcGFkZGluZzIgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNxdWFyZVwiOlxuICAgICAgc2hhcGUgPSBcInJlY3RcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICBzaGFwZSA9IFwicXVlc3Rpb25cIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJoZXhhZ29uXCI6XG4gICAgICBzaGFwZSA9IFwiaGV4YWdvblwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJsb2NrX2Fycm93XCI6XG4gICAgICBzaGFwZSA9IFwiYmxvY2tfYXJyb3dcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvZGRcIjpcbiAgICAgIHNoYXBlID0gXCJyZWN0X2xlZnRfaW52X2Fycm93XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGVhbl9yaWdodFwiOlxuICAgICAgc2hhcGUgPSBcImxlYW5fcmlnaHRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsZWFuX2xlZnRcIjpcbiAgICAgIHNoYXBlID0gXCJsZWFuX2xlZnRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0cmFwZXpvaWRcIjpcbiAgICAgIHNoYXBlID0gXCJ0cmFwZXpvaWRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbnZfdHJhcGV6b2lkXCI6XG4gICAgICBzaGFwZSA9IFwiaW52X3RyYXBlem9pZFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIjpcbiAgICAgIHNoYXBlID0gXCJyZWN0X2xlZnRfaW52X2Fycm93XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICBzaGFwZSA9IFwiY2lyY2xlXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgc2hhcGUgPSBcImVsbGlwc2VcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzdGFkaXVtXCI6XG4gICAgICBzaGFwZSA9IFwic3RhZGl1bVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInN1YnJvdXRpbmVcIjpcbiAgICAgIHNoYXBlID0gXCJzdWJyb3V0aW5lXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3lsaW5kZXJcIjpcbiAgICAgIHNoYXBlID0gXCJjeWxpbmRlclwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImdyb3VwXCI6XG4gICAgICBzaGFwZSA9IFwicmVjdFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRvdWJsZWNpcmNsZVwiOlxuICAgICAgc2hhcGUgPSBcImRvdWJsZWNpcmNsZVwiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHNoYXBlID0gXCJyZWN0XCI7XG4gIH1cbiAgY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzRnJvbUFycmF5KHZlcnRleD8uc3R5bGVzID8/IFtdKTtcbiAgY29uc3QgdmVydGV4VGV4dCA9IHZlcnRleC5sYWJlbDtcbiAgY29uc3QgYm91bmRzID0gdmVydGV4LnNpemUgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB4OiAwLCB5OiAwIH07XG4gIGNvbnN0IG5vZGUgPSB7XG4gICAgbGFiZWxTdHlsZTogc3R5bGVzLmxhYmVsU3R5bGUsXG4gICAgc2hhcGUsXG4gICAgbGFiZWxUZXh0OiB2ZXJ0ZXhUZXh0LFxuICAgIHJ4OiByYWRpdXMsXG4gICAgcnk6IHJhZGl1cyxcbiAgICBjbGFzczogY2xhc3NTdHIsXG4gICAgc3R5bGU6IHN0eWxlcy5zdHlsZSxcbiAgICBpZDogdmVydGV4LmlkLFxuICAgIGRpcmVjdGlvbnM6IHZlcnRleC5kaXJlY3Rpb25zLFxuICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0LFxuICAgIHg6IGJvdW5kcy54LFxuICAgIHk6IGJvdW5kcy55LFxuICAgIHBvc2l0aW9uZWQsXG4gICAgaW50ZXJzZWN0OiB2b2lkIDAsXG4gICAgdHlwZTogdmVydGV4LnR5cGUsXG4gICAgcGFkZGluZzogcGFkZGluZzIgPz8gZ2V0Q29uZmlnKCk/LmJsb2NrPy5wYWRkaW5nID8/IDBcbiAgfTtcbiAgcmV0dXJuIG5vZGU7XG59XG5fX25hbWUoZ2V0Tm9kZUZyb21CbG9jaywgXCJnZXROb2RlRnJvbUJsb2NrXCIpO1xuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlQmxvY2tTaXplKGVsZW0sIGJsb2NrLCBkYjIpIHtcbiAgY29uc3Qgbm9kZSA9IGdldE5vZGVGcm9tQmxvY2soYmxvY2ssIGRiMiwgZmFsc2UpO1xuICBpZiAobm9kZS50eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgbm9kZUVsID0gYXdhaXQgaW5zZXJ0Tm9kZShlbGVtLCBub2RlKTtcbiAgY29uc3QgYm91bmRpbmdCb3ggPSBub2RlRWwubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgb2JqID0gZGIyLmdldEJsb2NrKG5vZGUuaWQpO1xuICBvYmouc2l6ZSA9IHsgd2lkdGg6IGJvdW5kaW5nQm94LndpZHRoLCBoZWlnaHQ6IGJvdW5kaW5nQm94LmhlaWdodCwgeDogMCwgeTogMCwgbm9kZTogbm9kZUVsIH07XG4gIGRiMi5zZXRCbG9jayhvYmopO1xuICBub2RlRWwucmVtb3ZlKCk7XG59XG5fX25hbWUoY2FsY3VsYXRlQmxvY2tTaXplLCBcImNhbGN1bGF0ZUJsb2NrU2l6ZVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGluc2VydEJsb2NrUG9zaXRpb25lZChlbGVtLCBibG9jaywgZGIyKSB7XG4gIGNvbnN0IG5vZGUgPSBnZXROb2RlRnJvbUJsb2NrKGJsb2NrLCBkYjIsIHRydWUpO1xuICBjb25zdCBvYmogPSBkYjIuZ2V0QmxvY2sobm9kZS5pZCk7XG4gIGlmIChvYmoudHlwZSAhPT0gXCJzcGFjZVwiKSB7XG4gICAgYXdhaXQgaW5zZXJ0Tm9kZShlbGVtLCBub2RlKTtcbiAgICBibG9jay5pbnRlcnNlY3QgPSBub2RlPy5pbnRlcnNlY3Q7XG4gICAgcG9zaXRpb25Ob2RlKG5vZGUpO1xuICB9XG59XG5fX25hbWUoaW5zZXJ0QmxvY2tQb3NpdGlvbmVkLCBcImluc2VydEJsb2NrUG9zaXRpb25lZFwiKTtcbmFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1PcGVyYXRpb25zKGVsZW0sIGJsb2NrczIsIGRiMiwgb3BlcmF0aW9uKSB7XG4gIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzMikge1xuICAgIGF3YWl0IG9wZXJhdGlvbihlbGVtLCBibG9jaywgZGIyKTtcbiAgICBpZiAoYmxvY2suY2hpbGRyZW4pIHtcbiAgICAgIGF3YWl0IHBlcmZvcm1PcGVyYXRpb25zKGVsZW0sIGJsb2NrLmNoaWxkcmVuLCBkYjIsIG9wZXJhdGlvbik7XG4gICAgfVxuICB9XG59XG5fX25hbWUocGVyZm9ybU9wZXJhdGlvbnMsIFwicGVyZm9ybU9wZXJhdGlvbnNcIik7XG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVCbG9ja1NpemVzKGVsZW0sIGJsb2NrczIsIGRiMikge1xuICBhd2FpdCBwZXJmb3JtT3BlcmF0aW9ucyhlbGVtLCBibG9ja3MyLCBkYjIsIGNhbGN1bGF0ZUJsb2NrU2l6ZSk7XG59XG5fX25hbWUoY2FsY3VsYXRlQmxvY2tTaXplcywgXCJjYWxjdWxhdGVCbG9ja1NpemVzXCIpO1xuYXN5bmMgZnVuY3Rpb24gaW5zZXJ0QmxvY2tzKGVsZW0sIGJsb2NrczIsIGRiMikge1xuICBhd2FpdCBwZXJmb3JtT3BlcmF0aW9ucyhlbGVtLCBibG9ja3MyLCBkYjIsIGluc2VydEJsb2NrUG9zaXRpb25lZCk7XG59XG5fX25hbWUoaW5zZXJ0QmxvY2tzLCBcImluc2VydEJsb2Nrc1wiKTtcbmFzeW5jIGZ1bmN0aW9uIGluc2VydEVkZ2VzKGVsZW0sIGVkZ2VzLCBibG9ja3MyLCBkYjIsIGlkKSB7XG4gIGNvbnN0IGcgPSBuZXcgZ3JhcGhsaWIuR3JhcGgoe1xuICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgY29tcG91bmQ6IHRydWVcbiAgfSk7XG4gIGcuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IFwiVEJcIixcbiAgICBub2Rlc2VwOiAxMCxcbiAgICByYW5rc2VwOiAxMCxcbiAgICBtYXJnaW54OiA4LFxuICAgIG1hcmdpbnk6IDhcbiAgfSk7XG4gIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzMikge1xuICAgIGlmIChibG9jay5zaXplKSB7XG4gICAgICBnLnNldE5vZGUoYmxvY2suaWQsIHtcbiAgICAgICAgd2lkdGg6IGJsb2NrLnNpemUud2lkdGgsXG4gICAgICAgIGhlaWdodDogYmxvY2suc2l6ZS5oZWlnaHQsXG4gICAgICAgIGludGVyc2VjdDogYmxvY2suaW50ZXJzZWN0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBlZGdlIG9mIGVkZ2VzKSB7XG4gICAgaWYgKGVkZ2Uuc3RhcnQgJiYgZWRnZS5lbmQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0QmxvY2sgPSBkYjIuZ2V0QmxvY2soZWRnZS5zdGFydCk7XG4gICAgICBjb25zdCBlbmRCbG9jayA9IGRiMi5nZXRCbG9jayhlZGdlLmVuZCk7XG4gICAgICBpZiAoc3RhcnRCbG9jaz8uc2l6ZSAmJiBlbmRCbG9jaz8uc2l6ZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0QmxvY2suc2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQmxvY2suc2l6ZTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgICAgIHsgeDogc3RhcnQueCwgeTogc3RhcnQueSB9LFxuICAgICAgICAgIHsgeDogc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpIC8gMiwgeTogc3RhcnQueSArIChlbmQueSAtIHN0YXJ0LnkpIC8gMiB9LFxuICAgICAgICAgIHsgeDogZW5kLngsIHk6IGVuZC55IH1cbiAgICAgICAgXTtcbiAgICAgICAgaW5zZXJ0RWRnZShcbiAgICAgICAgICBlbGVtLFxuICAgICAgICAgIHsgdjogZWRnZS5zdGFydCwgdzogZWRnZS5lbmQsIG5hbWU6IGVkZ2UuaWQgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5lZGdlLFxuICAgICAgICAgICAgYXJyb3dUeXBlRW5kOiBlZGdlLmFycm93VHlwZUVuZCxcbiAgICAgICAgICAgIGFycm93VHlwZVN0YXJ0OiBlZGdlLmFycm93VHlwZVN0YXJ0LFxuICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgY2xhc3NlczogXCJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBcImJsb2NrXCIsXG4gICAgICAgICAgZyxcbiAgICAgICAgICBpZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZWRnZS5sYWJlbCkge1xuICAgICAgICAgIGF3YWl0IGluc2VydEVkZ2VMYWJlbChlbGVtLCB7XG4gICAgICAgICAgICAuLi5lZGdlLFxuICAgICAgICAgICAgbGFiZWw6IGVkZ2UubGFiZWwsXG4gICAgICAgICAgICBsYWJlbFN0eWxlOiBcInN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7XCIsXG4gICAgICAgICAgICBhcnJvd1R5cGVFbmQ6IGVkZ2UuYXJyb3dUeXBlRW5kLFxuICAgICAgICAgICAgYXJyb3dUeXBlU3RhcnQ6IGVkZ2UuYXJyb3dUeXBlU3RhcnQsXG4gICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICBjbGFzc2VzOiBcImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjFcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBvc2l0aW9uRWRnZUxhYmVsKFxuICAgICAgICAgICAgeyAuLi5lZGdlLCB4OiBwb2ludHNbMV0ueCwgeTogcG9pbnRzWzFdLnkgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxQYXRoOiBwb2ludHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5fX25hbWUoaW5zZXJ0RWRnZXMsIFwiaW5zZXJ0RWRnZXNcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9ibG9jay9ibG9ja1JlbmRlcmVyLnRzXG52YXIgZ2V0Q2xhc3NlczIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGRpYWdPYmopIHtcbiAgcmV0dXJuIGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xufSwgXCJnZXRDbGFzc2VzXCIpO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIGJsb2NrOiBjb25mIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgZGIyID0gZGlhZ09iai5kYjtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IGQzc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBkM3NlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IGQzc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKSA6IGQzc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBjb25zdCBtYXJrZXJzID0gW1wicG9pbnRcIiwgXCJjaXJjbGVcIiwgXCJjcm9zc1wiXTtcbiAgbWFya2Vyc19kZWZhdWx0KHN2ZywgbWFya2VycywgZGlhZ09iai50eXBlLCBpZCk7XG4gIGNvbnN0IGJsID0gZGIyLmdldEJsb2NrcygpO1xuICBjb25zdCBibEFyciA9IGRiMi5nZXRCbG9ja3NGbGF0KCk7XG4gIGNvbnN0IGVkZ2VzID0gZGIyLmdldEVkZ2VzKCk7XG4gIGNvbnN0IG5vZGVzID0gc3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiYmxvY2tcIik7XG4gIGF3YWl0IGNhbGN1bGF0ZUJsb2NrU2l6ZXMobm9kZXMsIGJsLCBkYjIpO1xuICBjb25zdCBib3VuZHMgPSBsYXlvdXQoZGIyKTtcbiAgYXdhaXQgaW5zZXJ0QmxvY2tzKG5vZGVzLCBibCwgZGIyKTtcbiAgYXdhaXQgaW5zZXJ0RWRnZXMobm9kZXMsIGVkZ2VzLCBibEFyciwgZGIyLCBpZCk7XG4gIGlmIChib3VuZHMpIHtcbiAgICBjb25zdCBib3VuZHMyID0gYm91bmRzO1xuICAgIGNvbnN0IG1hZ2ljRmFjdG9yID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCgwLjEyNSAqIChib3VuZHMyLndpZHRoIC8gYm91bmRzMi5oZWlnaHQpKSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzMi5oZWlnaHQgKyBtYWdpY0ZhY3RvciArIDEwO1xuICAgIGNvbnN0IHdpZHRoID0gYm91bmRzMi53aWR0aCArIDEwO1xuICAgIGNvbnN0IHsgdXNlTWF4V2lkdGggfSA9IGNvbmY7XG4gICAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgd2lkdGgsICEhdXNlTWF4V2lkdGgpO1xuICAgIGxvZy5kZWJ1ZyhcIkhlcmUgQm91bmRzXCIsIGJvdW5kcywgYm91bmRzMik7XG4gICAgc3ZnLmF0dHIoXG4gICAgICBcInZpZXdCb3hcIixcbiAgICAgIGAke2JvdW5kczIueCAtIDV9ICR7Ym91bmRzMi55IC0gNX0gJHtib3VuZHMyLndpZHRoICsgMTB9ICR7Ym91bmRzMi5oZWlnaHQgKyAxMH1gXG4gICAgKTtcbiAgfVxufSwgXCJkcmF3XCIpO1xudmFyIGJsb2NrUmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhdyxcbiAgZ2V0Q2xhc3NlczogZ2V0Q2xhc3NlczJcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9ibG9jay9ibG9ja0RpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IGJsb2NrX2RlZmF1bHQsXG4gIGRiOiBibG9ja0RCX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBibG9ja1JlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJsYXlvdXRCYXNlXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImxheW91dEJhc2VcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyOCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIExheW91dENvbnN0YW50cygpIHt9XG5cbi8qKlxyXG4gKiBMYXlvdXQgUXVhbGl0eTogMDpkcmFmdCwgMTpkZWZhdWx0LCAyOnByb29mXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAxO1xuXG4vKipcclxuICogRGVmYXVsdCBwYXJhbWV0ZXJzXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBmYWxzZTtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQgPSB0cnVlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQgPSBmYWxzZTtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QgPSA1MDtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTID0gZmFsc2U7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBHZW5lcmFsIG90aGVyIGNvbnN0YW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qXHJcbiAqIE1hcmdpbnMgb2YgYSBncmFwaCB0byBiZSBhcHBsaWVkIG9uIGJvdWRpbmcgcmVjdGFuZ2xlIG9mIGl0cyBjb250ZW50cy4gV2VcclxuICogYXNzdW1lIG1hcmdpbnMgb24gYWxsIGZvdXIgc2lkZXMgdG8gYmUgdW5pZm9ybS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFQSF9NQVJHSU4gPSAxNTtcblxuLypcclxuICogV2hldGhlciB0byBjb25zaWRlciBsYWJlbHMgaW4gbm9kZSBkaW1lbnNpb25zIG9yIG5vdFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMgPSBmYWxzZTtcblxuLypcclxuICogRGVmYXVsdCBkaW1lbnNpb24gb2YgYSBub24tY29tcG91bmQgbm9kZS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRSA9IDQwO1xuXG4vKlxyXG4gKiBEZWZhdWx0IGRpbWVuc2lvbiBvZiBhIG5vbi1jb21wb3VuZCBub2RlLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9IQUxGX1NJWkUgPSBMYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRSAvIDI7XG5cbi8qXHJcbiAqIEVtcHR5IGNvbXBvdW5kIG5vZGUgc2l6ZS4gV2hlbiBhIGNvbXBvdW5kIG5vZGUgaXMgZW1wdHksIGl0cyBib3RoXHJcbiAqIGRpbWVuc2lvbnMgc2hvdWxkIGJlIG9mIHRoaXMgdmFsdWUuXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRSA9IDQwO1xuXG4vKlxyXG4gKiBNaW5pbXVtIGxlbmd0aCB0aGF0IGFuIGVkZ2Ugc2hvdWxkIHRha2UgZHVyaW5nIGxheW91dFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5NSU5fRURHRV9MRU5HVEggPSAxO1xuXG4vKlxyXG4gKiBXb3JsZCBib3VuZGFyaWVzIHRoYXQgbGF5b3V0IG9wZXJhdGVzIG9uXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZID0gMTAwMDAwMDtcblxuLypcclxuICogV29ybGQgYm91bmRhcmllcyB0aGF0IHJhbmRvbSBwb3NpdGlvbmluZyBjYW4gYmUgcGVyZm9ybWVkIHdpdGhcclxuICovXG5MYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSAvIDEwMDA7XG5cbi8qXHJcbiAqIENvb3JkaW5hdGVzIG9mIHRoZSB3b3JsZCBjZW50ZXJcclxuICovXG5MYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggPSAxMjAwO1xuTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZID0gOTAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExheW91dENvbnN0YW50cztcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIElHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG5mdW5jdGlvbiBMRWRnZShzb3VyY2UsIHRhcmdldCwgdkVkZ2UpIHtcbiAgTEdyYXBoT2JqZWN0LmNhbGwodGhpcywgdkVkZ2UpO1xuXG4gIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0ID0gZmFsc2U7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdkVkZ2U7XG4gIHRoaXMuYmVuZHBvaW50cyA9IFtdO1xuICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbkxFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5cbmZvciAodmFyIHByb3AgaW4gTEdyYXBoT2JqZWN0KSB7XG4gIExFZGdlW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MRWRnZS5wcm90b3R5cGUuZ2V0U291cmNlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2U7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy50YXJnZXQ7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuaXNJbnRlckdyYXBoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc0ludGVyR3JhcGg7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYmVuZHBvaW50cztcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRMY2EgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxjYTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc291cmNlSW5MY2E7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2EgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRhcmdldEluTGNhO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldE90aGVyRW5kID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKHRoaXMuc291cmNlID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0O1xuICB9IGVsc2UgaWYgKHRoaXMudGFyZ2V0ID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IFwiTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2VcIjtcbiAgfVxufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaCA9IGZ1bmN0aW9uIChub2RlLCBncmFwaCkge1xuICB2YXIgb3RoZXJFbmQgPSB0aGlzLmdldE90aGVyRW5kKG5vZGUpO1xuICB2YXIgcm9vdCA9IGdyYXBoLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChvdGhlckVuZC5nZXRPd25lcigpID09IGdyYXBoKSB7XG4gICAgICByZXR1cm4gb3RoZXJFbmQ7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyRW5kLmdldE93bmVyKCkgPT0gcm9vdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgb3RoZXJFbmQgPSBvdGhlckVuZC5nZXRPd25lcigpLmdldFBhcmVudCgpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUudXBkYXRlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2xpcFBvaW50Q29vcmRpbmF0ZXMgPSBuZXcgQXJyYXkoNCk7XG5cbiAgdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBJR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSwgdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLCBjbGlwUG9pbnRDb29yZGluYXRlcyk7XG5cbiAgaWYgKCF0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldCkge1xuICAgIHRoaXMubGVuZ3RoWCA9IGNsaXBQb2ludENvb3JkaW5hdGVzWzBdIC0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMl07XG4gICAgdGhpcy5sZW5ndGhZID0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMV0gLSBjbGlwUG9pbnRDb29yZGluYXRlc1szXTtcblxuICAgIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFgpIDwgMS4wKSB7XG4gICAgICB0aGlzLmxlbmd0aFggPSBJTWF0aC5zaWduKHRoaXMubGVuZ3RoWCk7XG4gICAgfVxuXG4gICAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWSkgPCAxLjApIHtcbiAgICAgIHRoaXMubGVuZ3RoWSA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhZKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguc3FydCh0aGlzLmxlbmd0aFggKiB0aGlzLmxlbmd0aFggKyB0aGlzLmxlbmd0aFkgKiB0aGlzLmxlbmd0aFkpO1xuICB9XG59O1xuXG5MRWRnZS5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxlbmd0aFggPSB0aGlzLnRhcmdldC5nZXRDZW50ZXJYKCkgLSB0aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCk7XG4gIHRoaXMubGVuZ3RoWSA9IHRoaXMudGFyZ2V0LmdldENlbnRlclkoKSAtIHRoaXMuc291cmNlLmdldENlbnRlclkoKTtcblxuICBpZiAoTWF0aC5hYnModGhpcy5sZW5ndGhYKSA8IDEuMCkge1xuICAgIHRoaXMubGVuZ3RoWCA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFkpIDwgMS4wKSB7XG4gICAgdGhpcy5sZW5ndGhZID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFkpO1xuICB9XG5cbiAgdGhpcy5sZW5ndGggPSBNYXRoLnNxcnQodGhpcy5sZW5ndGhYICogdGhpcy5sZW5ndGhYICsgdGhpcy5sZW5ndGhZICogdGhpcy5sZW5ndGhZKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBMR3JhcGhPYmplY3QodkdyYXBoT2JqZWN0KSB7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdkdyYXBoT2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExHcmFwaE9iamVjdDtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIEludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBSZWN0YW5nbGVEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBSYW5kb21TZWVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuZnVuY3Rpb24gTE5vZGUoZ20sIGxvYywgc2l6ZSwgdk5vZGUpIHtcbiAgLy9BbHRlcm5hdGl2ZSBjb25zdHJ1Y3RvciAxIDogTE5vZGUoTEdyYXBoTWFuYWdlciBnbSwgUG9pbnQgbG9jLCBEaW1lbnNpb24gc2l6ZSwgT2JqZWN0IHZOb2RlKVxuICBpZiAoc2l6ZSA9PSBudWxsICYmIHZOb2RlID09IG51bGwpIHtcbiAgICB2Tm9kZSA9IGxvYztcbiAgfVxuXG4gIExHcmFwaE9iamVjdC5jYWxsKHRoaXMsIHZOb2RlKTtcblxuICAvL0FsdGVybmF0aXZlIGNvbnN0cnVjdG9yIDIgOiBMTm9kZShMYXlvdXQgbGF5b3V0LCBPYmplY3Qgdk5vZGUpXG4gIGlmIChnbS5ncmFwaE1hbmFnZXIgIT0gbnVsbCkgZ20gPSBnbS5ncmFwaE1hbmFnZXI7XG5cbiAgdGhpcy5lc3RpbWF0ZWRTaXplID0gSW50ZWdlci5NSU5fVkFMVUU7XG4gIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdk5vZGU7XG4gIHRoaXMuZWRnZXMgPSBbXTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcblxuICBpZiAoc2l6ZSAhPSBudWxsICYmIGxvYyAhPSBudWxsKSB0aGlzLnJlY3QgPSBuZXcgUmVjdGFuZ2xlRChsb2MueCwgbG9jLnksIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtlbHNlIHRoaXMucmVjdCA9IG5ldyBSZWN0YW5nbGVEKCk7XG59XG5cbkxOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE9iamVjdCkge1xuICBMTm9kZVtwcm9wXSA9IExHcmFwaE9iamVjdFtwcm9wXTtcbn1cblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5lZGdlcztcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2hpbGQ7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0T3duZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8vICBpZiAodGhpcy5vd25lciAhPSBudWxsKSB7XG4gIC8vICAgIGlmICghKHRoaXMub3duZXIgPT0gbnVsbCB8fCB0aGlzLm93bmVyLmdldE5vZGVzKCkuaW5kZXhPZih0aGlzKSA+IC0xKSkge1xuICAvLyAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAvLyAgICB9XG4gIC8vICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbiAod2lkdGgpIHtcbiAgdGhpcy5yZWN0LndpZHRoID0gd2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbiAoaGVpZ2h0KSB7XG4gIHRoaXMucmVjdC5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Q2VudGVyWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXJZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMiwgdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMik7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMucmVjdC54LCB0aGlzLnJlY3QueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0UmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXREaWFnb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGggKiB0aGlzLnJlY3Qud2lkdGggKyB0aGlzLnJlY3QuaGVpZ2h0ICogdGhpcy5yZWN0LmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgaGFsZiB0aGUgZGlhZ29uYWwgbGVuZ3RoIG9mIHRoaXMgbm9kZS5cbiAqL1xuTE5vZGUucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0ICogdGhpcy5yZWN0LmhlaWdodCArIHRoaXMucmVjdC53aWR0aCAqIHRoaXMucmVjdC53aWR0aCkgLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldFJlY3QgPSBmdW5jdGlvbiAodXBwZXJMZWZ0LCBkaW1lbnNpb24pIHtcbiAgdGhpcy5yZWN0LnggPSB1cHBlckxlZnQueDtcbiAgdGhpcy5yZWN0LnkgPSB1cHBlckxlZnQueTtcbiAgdGhpcy5yZWN0LndpZHRoID0gZGltZW5zaW9uLndpZHRoO1xuICB0aGlzLnJlY3QuaGVpZ2h0ID0gZGltZW5zaW9uLmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRDZW50ZXIgPSBmdW5jdGlvbiAoY3gsIGN5KSB7XG4gIHRoaXMucmVjdC54ID0gY3ggLSB0aGlzLnJlY3Qud2lkdGggLyAyO1xuICB0aGlzLnJlY3QueSA9IGN5IC0gdGhpcy5yZWN0LmhlaWdodCAvIDI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoeCwgeSkge1xuICB0aGlzLnJlY3QueCA9IHg7XG4gIHRoaXMucmVjdC55ID0geTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5tb3ZlQnkgPSBmdW5jdGlvbiAoZHgsIGR5KSB7XG4gIHRoaXMucmVjdC54ICs9IGR4O1xuICB0aGlzLnJlY3QueSArPSBkeTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZSA9IGZ1bmN0aW9uICh0bykge1xuICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgdmFyIGVkZ2U7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmIChlZGdlLnRhcmdldCA9PSB0bykge1xuICAgICAgaWYgKGVkZ2Uuc291cmNlICE9IHNlbGYpIHRocm93IFwiSW5jb3JyZWN0IGVkZ2Ugc291cmNlIVwiO1xuXG4gICAgICBlZGdlTGlzdC5wdXNoKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VzQmV0d2VlbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgdmFyIGVkZ2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmICghKGVkZ2Uuc291cmNlID09IHNlbGYgfHwgZWRnZS50YXJnZXQgPT0gc2VsZikpIHRocm93IFwiSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXRcIjtcblxuICAgIGlmIChlZGdlLnRhcmdldCA9PSBvdGhlciB8fCBlZGdlLnNvdXJjZSA9PSBvdGhlcikge1xuICAgICAgZWRnZUxpc3QucHVzaChlZGdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlZGdlTGlzdDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbmVpZ2hib3JzID0gbmV3IFNldCgpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG5cbiAgICBpZiAoZWRnZS5zb3VyY2UgPT0gc2VsZikge1xuICAgICAgbmVpZ2hib3JzLmFkZChlZGdlLnRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlZGdlLnRhcmdldCAhPSBzZWxmKSB7XG4gICAgICAgIHRocm93IFwiSW5jb3JyZWN0IGluY2lkZW5jeSFcIjtcbiAgICAgIH1cblxuICAgICAgbmVpZ2hib3JzLmFkZChlZGdlLnNvdXJjZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbmVpZ2hib3JzO1xufTtcblxuTE5vZGUucHJvdG90eXBlLndpdGhDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHdpdGhOZWlnaGJvcnNMaXN0ID0gbmV3IFNldCgpO1xuICB2YXIgY2hpbGROb2RlO1xuICB2YXIgY2hpbGRyZW47XG5cbiAgd2l0aE5laWdoYm9yc0xpc3QuYWRkKHRoaXMpO1xuXG4gIGlmICh0aGlzLmNoaWxkICE9IG51bGwpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmNoaWxkLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlID0gbm9kZXNbaV07XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkTm9kZS53aXRoQ2hpbGRyZW4oKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgd2l0aE5laWdoYm9yc0xpc3QuYWRkKG5vZGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhOZWlnaGJvcnNMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vT2ZDaGlsZHJlbiA9IDA7XG4gIHZhciBjaGlsZE5vZGU7XG5cbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIG5vT2ZDaGlsZHJlbiA9IDE7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5jaGlsZC5nZXROb2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICBub09mQ2hpbGRyZW4gKz0gY2hpbGROb2RlLmdldE5vT2ZDaGlsZHJlbigpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub09mQ2hpbGRyZW4gPT0gMCkge1xuICAgIG5vT2ZDaGlsZHJlbiA9IDE7XG4gIH1cbiAgcmV0dXJuIG5vT2ZDaGlsZHJlbjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5lc3RpbWF0ZWRTaXplID09IEludGVnZXIuTUlOX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemUgPSAodGhpcy5yZWN0LndpZHRoICsgdGhpcy5yZWN0LmhlaWdodCkgLyAyO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IHRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgICB0aGlzLnJlY3Qud2lkdGggPSB0aGlzLmVzdGltYXRlZFNpemU7XG4gICAgdGhpcy5yZWN0LmhlaWdodCA9IHRoaXMuZXN0aW1hdGVkU2l6ZTtcblxuICAgIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemU7XG4gIH1cbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zY2F0dGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmFuZG9tQ2VudGVyWDtcbiAgdmFyIHJhbmRvbUNlbnRlclk7XG5cbiAgdmFyIG1pblggPSAtTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHZhciBtYXhYID0gTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHJhbmRvbUNlbnRlclggPSBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggKyBSYW5kb21TZWVkLm5leHREb3VibGUoKSAqIChtYXhYIC0gbWluWCkgKyBtaW5YO1xuXG4gIHZhciBtaW5ZID0gLUxheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1xuICB2YXIgbWF4WSA9IExheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1xuICByYW5kb21DZW50ZXJZID0gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZICsgUmFuZG9tU2VlZC5uZXh0RG91YmxlKCkgKiAobWF4WSAtIG1pblkpICsgbWluWTtcblxuICB0aGlzLnJlY3QueCA9IHJhbmRvbUNlbnRlclg7XG4gIHRoaXMucmVjdC55ID0gcmFuZG9tQ2VudGVyWTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS51cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG4gIGlmICh0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGggIT0gMCkge1xuICAgIC8vIHdyYXAgdGhlIGNoaWxkcmVuIG5vZGVzIGJ5IHJlLWFycmFuZ2luZyB0aGUgYm91bmRhcmllc1xuICAgIHZhciBjaGlsZEdyYXBoID0gdGhpcy5nZXRDaGlsZCgpO1xuICAgIGNoaWxkR3JhcGgudXBkYXRlQm91bmRzKHRydWUpO1xuXG4gICAgdGhpcy5yZWN0LnggPSBjaGlsZEdyYXBoLmdldExlZnQoKTtcbiAgICB0aGlzLnJlY3QueSA9IGNoaWxkR3JhcGguZ2V0VG9wKCk7XG5cbiAgICB0aGlzLnNldFdpZHRoKGNoaWxkR3JhcGguZ2V0UmlnaHQoKSAtIGNoaWxkR3JhcGguZ2V0TGVmdCgpKTtcbiAgICB0aGlzLnNldEhlaWdodChjaGlsZEdyYXBoLmdldEJvdHRvbSgpIC0gY2hpbGRHcmFwaC5nZXRUb3AoKSk7XG5cbiAgICAvLyBVcGRhdGUgY29tcG91bmQgYm91bmRzIGNvbnNpZGVyaW5nIGl0cyBsYWJlbCBwcm9wZXJ0aWVzICAgIFxuICAgIGlmIChMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKSB7XG5cbiAgICAgIHZhciB3aWR0aCA9IGNoaWxkR3JhcGguZ2V0UmlnaHQoKSAtIGNoaWxkR3JhcGguZ2V0TGVmdCgpO1xuICAgICAgdmFyIGhlaWdodCA9IGNoaWxkR3JhcGguZ2V0Qm90dG9tKCkgLSBjaGlsZEdyYXBoLmdldFRvcCgpO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbFdpZHRoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImxlZnRcIikge1xuICAgICAgICAgIHRoaXMucmVjdC54IC09IHRoaXMubGFiZWxXaWR0aDtcbiAgICAgICAgICB0aGlzLnNldFdpZHRoKHdpZHRoICsgdGhpcy5sYWJlbFdpZHRoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImNlbnRlclwiICYmIHRoaXMubGFiZWxXaWR0aCA+IHdpZHRoKSB7XG4gICAgICAgICAgdGhpcy5yZWN0LnggLT0gKHRoaXMubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgICAgdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgIHRoaXMuc2V0V2lkdGgod2lkdGggKyB0aGlzLmxhYmVsV2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsUG9zVmVydGljYWwgPT0gXCJ0b3BcIikge1xuICAgICAgICAgIHRoaXMucmVjdC55IC09IHRoaXMubGFiZWxIZWlnaHQ7XG4gICAgICAgICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0ICsgdGhpcy5sYWJlbEhlaWdodCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFBvc1ZlcnRpY2FsID09IFwiY2VudGVyXCIgJiYgdGhpcy5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgIHRoaXMucmVjdC55IC09ICh0aGlzLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgICAgdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFBvc1ZlcnRpY2FsID09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgICB0aGlzLnNldEhlaWdodChoZWlnaHQgKyB0aGlzLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmFucykge1xuICB2YXIgbGVmdCA9IHRoaXMucmVjdC54O1xuXG4gIGlmIChsZWZ0ID4gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZKSB7XG4gICAgbGVmdCA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWTtcbiAgfSBlbHNlIGlmIChsZWZ0IDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIGxlZnQgPSAtTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZO1xuICB9XG5cbiAgdmFyIHRvcCA9IHRoaXMucmVjdC55O1xuXG4gIGlmICh0b3AgPiBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkpIHtcbiAgICB0b3AgPSBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH0gZWxzZSBpZiAodG9wIDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIHRvcCA9IC1MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH1cblxuICB2YXIgbGVmdFRvcCA9IG5ldyBQb2ludEQobGVmdCwgdG9wKTtcbiAgdmFyIHZMZWZ0VG9wID0gdHJhbnMuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGxlZnRUb3ApO1xuXG4gIHRoaXMuc2V0TG9jYXRpb24odkxlZnRUb3AueCwgdkxlZnRUb3AueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0Lnk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3duZXIgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXIuZ2V0UGFyZW50KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExOb2RlO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0Q29uc3RhbnRzKCkge31cblxuLy9GRExheW91dENvbnN0YW50cyBpbmhlcml0cyBzdGF0aWMgcHJvcHMgaW4gTGF5b3V0Q29uc3RhbnRzXG5mb3IgKHZhciBwcm9wIGluIExheW91dENvbnN0YW50cykge1xuICBGRExheW91dENvbnN0YW50c1twcm9wXSA9IExheW91dENvbnN0YW50c1twcm9wXTtcbn1cblxuRkRMYXlvdXRDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSAyNTAwO1xuXG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIID0gNTA7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCA9IDAuNDU7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCA9IDQ1MDAuMDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCA9IDAuNDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCA9IDEuMDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSAzLjg7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SID0gMS41O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04gPSB0cnVlO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OID0gdHJ1ZTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgPSAwLjM7XG5GRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SID0gMC4zMztcbkZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCA9IDEwMDA7XG5GRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQgPSA1MDAwO1xuRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMID0gMTAwLjA7XG5GRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlQgPSBGRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwgKiAzO1xuRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDEwLjA7XG5GRExheW91dENvbnN0YW50cy5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QgPSAxMDA7XG5GRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gMC4xO1xuRkRMYXlvdXRDb25zdGFudHMuTUlOX0VER0VfTEVOR1RIID0gMTtcbkZETGF5b3V0Q29uc3RhbnRzLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EID0gMTA7XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXRDb25zdGFudHM7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBQb2ludEQoeCwgeSkge1xuICBpZiAoeCA9PSBudWxsICYmIHkgPT0gbnVsbCkge1xuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH1cbn1cblxuUG9pbnRELnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcbiAgdGhpcy54ID0geDtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuc2V0WSA9IGZ1bmN0aW9uICh5KSB7XG4gIHRoaXMueSA9IHk7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLmdldERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHQpIHtcbiAgcmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueCAtIHB0LngsIHRoaXMueSAtIHB0LnkpO1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5nZXRDb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFBvaW50RCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChkaW0pIHtcbiAgdGhpcy54ICs9IGRpbS53aWR0aDtcbiAgdGhpcy55ICs9IGRpbS5oZWlnaHQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb2ludEQ7XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBMR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBMTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIFJlY3RhbmdsZUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIExpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxuZnVuY3Rpb24gTEdyYXBoKHBhcmVudCwgb2JqMiwgdkdyYXBoKSB7XG4gIExHcmFwaE9iamVjdC5jYWxsKHRoaXMsIHZHcmFwaCk7XG4gIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IEludGVnZXIuTUlOX1ZBTFVFO1xuICB0aGlzLm1hcmdpbiA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVBIX01BUkdJTjtcbiAgdGhpcy5lZGdlcyA9IFtdO1xuICB0aGlzLm5vZGVzID0gW107XG4gIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgaWYgKG9iajIgIT0gbnVsbCAmJiBvYmoyIGluc3RhbmNlb2YgTEdyYXBoTWFuYWdlcikge1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gb2JqMjtcbiAgfSBlbHNlIGlmIChvYmoyICE9IG51bGwgJiYgb2JqMiBpbnN0YW5jZW9mIExheW91dCkge1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gb2JqMi5ncmFwaE1hbmFnZXI7XG4gIH1cbn1cblxuTEdyYXBoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE9iamVjdCkge1xuICBMR3JhcGhbcHJvcF0gPSBMR3JhcGhPYmplY3RbcHJvcF07XG59XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZWRnZXM7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGVmdDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0UmlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJpZ2h0O1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRUb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRvcDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ib3R0b207XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmlzQ29ubmVjdGVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9iajEsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpIHtcbiAgaWYgKHNvdXJjZU5vZGUgPT0gbnVsbCAmJiB0YXJnZXROb2RlID09IG51bGwpIHtcbiAgICB2YXIgbmV3Tm9kZSA9IG9iajE7XG4gICAgaWYgKHRoaXMuZ3JhcGhNYW5hZ2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiR3JhcGggaGFzIG5vIGdyYXBoIG1nciFcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKG5ld05vZGUpID4gLTEpIHtcbiAgICAgIHRocm93IFwiTm9kZSBhbHJlYWR5IGluIGdyYXBoIVwiO1xuICAgIH1cbiAgICBuZXdOb2RlLm93bmVyID0gdGhpcztcbiAgICB0aGlzLmdldE5vZGVzKCkucHVzaChuZXdOb2RlKTtcblxuICAgIHJldHVybiBuZXdOb2RlO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXdFZGdlID0gb2JqMTtcbiAgICBpZiAoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihzb3VyY2VOb2RlKSA+IC0xICYmIHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHRhcmdldE5vZGUpID4gLTEpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoIVwiO1xuICAgIH1cblxuICAgIGlmICghKHNvdXJjZU5vZGUub3duZXIgPT0gdGFyZ2V0Tm9kZS5vd25lciAmJiBzb3VyY2VOb2RlLm93bmVyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCFcIjtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlTm9kZS5vd25lciAhPSB0YXJnZXROb2RlLm93bmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBzZXQgc291cmNlIGFuZCB0YXJnZXRcbiAgICBuZXdFZGdlLnNvdXJjZSA9IHNvdXJjZU5vZGU7XG4gICAgbmV3RWRnZS50YXJnZXQgPSB0YXJnZXROb2RlO1xuXG4gICAgLy8gc2V0IGFzIGludHJhLWdyYXBoIGVkZ2VcbiAgICBuZXdFZGdlLmlzSW50ZXJHcmFwaCA9IGZhbHNlO1xuXG4gICAgLy8gYWRkIHRvIGdyYXBoIGVkZ2UgbGlzdFxuICAgIHRoaXMuZ2V0RWRnZXMoKS5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgLy8gYWRkIHRvIGluY2lkZW5jeSBsaXN0c1xuICAgIHNvdXJjZU5vZGUuZWRnZXMucHVzaChuZXdFZGdlKTtcblxuICAgIGlmICh0YXJnZXROb2RlICE9IHNvdXJjZU5vZGUpIHtcbiAgICAgIHRhcmdldE5vZGUuZWRnZXMucHVzaChuZXdFZGdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RWRnZTtcbiAgfVxufTtcblxuTEdyYXBoLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBub2RlID0gb2JqO1xuICBpZiAob2JqIGluc3RhbmNlb2YgTE5vZGUpIHtcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIk5vZGUgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKCEobm9kZS5vd25lciAhPSBudWxsICYmIG5vZGUub3duZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiT3duZXIgZ3JhcGggaXMgaW52YWxpZCFcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JhcGhNYW5hZ2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkIVwiO1xuICAgIH1cbiAgICAvLyByZW1vdmUgaW5jaWRlbnQgZWRnZXMgZmlyc3QgKG1ha2UgYSBjb3B5IHRvIGRvIGl0IHNhZmVseSlcbiAgICB2YXIgZWRnZXNUb0JlUmVtb3ZlZCA9IG5vZGUuZWRnZXMuc2xpY2UoKTtcbiAgICB2YXIgZWRnZTtcbiAgICB2YXIgcyA9IGVkZ2VzVG9CZVJlbW92ZWQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBlZGdlID0gZWRnZXNUb0JlUmVtb3ZlZFtpXTtcblxuICAgICAgaWYgKGVkZ2UuaXNJbnRlckdyYXBoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShlZGdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkZ2Uuc291cmNlLm93bmVyLnJlbW92ZShlZGdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBub3cgdGhlIG5vZGUgaXRzZWxmXG4gICAgdmFyIGluZGV4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgdGhyb3cgXCJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhXCI7XG4gICAgfVxuXG4gICAgdGhpcy5ub2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExFZGdlKSB7XG4gICAgdmFyIGVkZ2UgPSBvYmo7XG4gICAgaWYgKGVkZ2UgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJFZGdlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghKGVkZ2Uuc291cmNlICE9IG51bGwgJiYgZWRnZS50YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKCEoZWRnZS5zb3VyY2Uub3duZXIgIT0gbnVsbCAmJiBlZGdlLnRhcmdldC5vd25lciAhPSBudWxsICYmIGVkZ2Uuc291cmNlLm93bmVyID09IHRoaXMgJiYgZWRnZS50YXJnZXQub3duZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCFcIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5kZXggPSBlZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIHZhciB0YXJnZXRJbmRleCA9IGVkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKCEoc291cmNlSW5kZXggPiAtMSAmJiB0YXJnZXRJbmRleCA+IC0xKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlIVwiO1xuICAgIH1cblxuICAgIGVkZ2Uuc291cmNlLmVkZ2VzLnNwbGljZShzb3VyY2VJbmRleCwgMSk7XG5cbiAgICBpZiAoZWRnZS50YXJnZXQgIT0gZWRnZS5zb3VyY2UpIHtcbiAgICAgIGVkZ2UudGFyZ2V0LmVkZ2VzLnNwbGljZSh0YXJnZXRJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gZWRnZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKGVkZ2UpO1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgdGhyb3cgXCJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhXCI7XG4gICAgfVxuXG4gICAgZWRnZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0b3AgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIGxlZnQgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIG5vZGVUb3A7XG4gIHZhciBub2RlTGVmdDtcbiAgdmFyIG1hcmdpbjtcblxuICB2YXIgbm9kZXMgPSB0aGlzLmdldE5vZGVzKCk7XG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG4gICAgbm9kZVRvcCA9IGxOb2RlLmdldFRvcCgpO1xuICAgIG5vZGVMZWZ0ID0gbE5vZGUuZ2V0TGVmdCgpO1xuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC8vIERvIHdlIGhhdmUgYW55IG5vZGVzIGluIHRoaXMgZ3JhcGg/XG4gIGlmICh0b3AgPT0gSW50ZWdlci5NQVhfVkFMVUUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChub2Rlc1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCAhPSB1bmRlZmluZWQpIHtcbiAgICBtYXJnaW4gPSBub2Rlc1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDtcbiAgfSBlbHNlIHtcbiAgICBtYXJnaW4gPSB0aGlzLm1hcmdpbjtcbiAgfVxuXG4gIHRoaXMubGVmdCA9IGxlZnQgLSBtYXJnaW47XG4gIHRoaXMudG9wID0gdG9wIC0gbWFyZ2luO1xuXG4gIC8vIEFwcGx5IHRoZSBtYXJnaW5zIGFuZCByZXR1cm4gdGhlIHJlc3VsdFxuICByZXR1cm4gbmV3IFBvaW50KHRoaXMubGVmdCwgdGhpcy50b3ApO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS51cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XG4gIC8vIGNhbGN1bGF0ZSBib3VuZHNcbiAgdmFyIGxlZnQgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHJpZ2h0ID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgdG9wID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBib3R0b20gPSAtSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBub2RlTGVmdDtcbiAgdmFyIG5vZGVSaWdodDtcbiAgdmFyIG5vZGVUb3A7XG4gIHZhciBub2RlQm90dG9tO1xuICB2YXIgbWFyZ2luO1xuXG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXM7XG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKHJlY3Vyc2l2ZSAmJiBsTm9kZS5jaGlsZCAhPSBudWxsKSB7XG4gICAgICBsTm9kZS51cGRhdGVCb3VuZHMoKTtcbiAgICB9XG4gICAgbm9kZUxlZnQgPSBsTm9kZS5nZXRMZWZ0KCk7XG4gICAgbm9kZVJpZ2h0ID0gbE5vZGUuZ2V0UmlnaHQoKTtcbiAgICBub2RlVG9wID0gbE5vZGUuZ2V0VG9wKCk7XG4gICAgbm9kZUJvdHRvbSA9IGxOb2RlLmdldEJvdHRvbSgpO1xuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cblxuICAgIGlmIChyaWdodCA8IG5vZGVSaWdodCkge1xuICAgICAgcmlnaHQgPSBub2RlUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbSA8IG5vZGVCb3R0b20pIHtcbiAgICAgIGJvdHRvbSA9IG5vZGVCb3R0b207XG4gICAgfVxuICB9XG5cbiAgdmFyIGJvdW5kaW5nUmVjdCA9IG5ldyBSZWN0YW5nbGVEKGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApO1xuICBpZiAobGVmdCA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkge1xuICAgIHRoaXMubGVmdCA9IHRoaXMucGFyZW50LmdldExlZnQoKTtcbiAgICB0aGlzLnJpZ2h0ID0gdGhpcy5wYXJlbnQuZ2V0UmlnaHQoKTtcbiAgICB0aGlzLnRvcCA9IHRoaXMucGFyZW50LmdldFRvcCgpO1xuICAgIHRoaXMuYm90dG9tID0gdGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCk7XG4gIH1cblxuICBpZiAobm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgbWFyZ2luID0gbm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ7XG4gIH0gZWxzZSB7XG4gICAgbWFyZ2luID0gdGhpcy5tYXJnaW47XG4gIH1cblxuICB0aGlzLmxlZnQgPSBib3VuZGluZ1JlY3QueCAtIG1hcmdpbjtcbiAgdGhpcy5yaWdodCA9IGJvdW5kaW5nUmVjdC54ICsgYm91bmRpbmdSZWN0LndpZHRoICsgbWFyZ2luO1xuICB0aGlzLnRvcCA9IGJvdW5kaW5nUmVjdC55IC0gbWFyZ2luO1xuICB0aGlzLmJvdHRvbSA9IGJvdW5kaW5nUmVjdC55ICsgYm91bmRpbmdSZWN0LmhlaWdodCArIG1hcmdpbjtcbn07XG5cbkxHcmFwaC5jYWxjdWxhdGVCb3VuZHMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgdmFyIGxlZnQgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHJpZ2h0ID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgdG9wID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBib3R0b20gPSAtSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBub2RlTGVmdDtcbiAgdmFyIG5vZGVSaWdodDtcbiAgdmFyIG5vZGVUb3A7XG4gIHZhciBub2RlQm90dG9tO1xuXG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG4gICAgbm9kZUxlZnQgPSBsTm9kZS5nZXRMZWZ0KCk7XG4gICAgbm9kZVJpZ2h0ID0gbE5vZGUuZ2V0UmlnaHQoKTtcbiAgICBub2RlVG9wID0gbE5vZGUuZ2V0VG9wKCk7XG4gICAgbm9kZUJvdHRvbSA9IGxOb2RlLmdldEJvdHRvbSgpO1xuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cblxuICAgIGlmIChyaWdodCA8IG5vZGVSaWdodCkge1xuICAgICAgcmlnaHQgPSBub2RlUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbSA8IG5vZGVCb3R0b20pIHtcbiAgICAgIGJvdHRvbSA9IG5vZGVCb3R0b207XG4gICAgfVxuICB9XG5cbiAgdmFyIGJvdW5kaW5nUmVjdCA9IG5ldyBSZWN0YW5nbGVEKGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApO1xuXG4gIHJldHVybiBib3VuZGluZ1JlY3Q7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMgPT0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpO1xuICB9XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmVzdGltYXRlZFNpemUgPT0gSW50ZWdlci5NSU5fVkFMVUUpIHtcbiAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgfVxuICByZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuICAgIHNpemUgKz0gbE5vZGUuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgfVxuXG4gIGlmIChzaXplID09IDApIHtcbiAgICB0aGlzLmVzdGltYXRlZFNpemUgPSBMYXlvdXRDb25zdGFudHMuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IHNpemUgLyBNYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0aGlzLm5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHF1ZXVlID0gbmV3IExpbmtlZExpc3QoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciBjdXJyZW50Tm9kZSA9IHRoaXMubm9kZXNbMF07XG4gIHZhciBuZWlnaGJvckVkZ2VzO1xuICB2YXIgY3VycmVudE5laWdoYm9yO1xuICB2YXIgY2hpbGRyZW5PZk5vZGUgPSBjdXJyZW50Tm9kZS53aXRoQ2hpbGRyZW4oKTtcbiAgY2hpbGRyZW5PZk5vZGUuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgIHF1ZXVlLnB1c2gobm9kZSk7XG4gICAgdmlzaXRlZC5hZGQobm9kZSk7XG4gIH0pO1xuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgICBjdXJyZW50Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAvLyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoaXMgbm9kZVxuICAgIG5laWdoYm9yRWRnZXMgPSBjdXJyZW50Tm9kZS5nZXRFZGdlcygpO1xuICAgIHZhciBzaXplID0gbmVpZ2hib3JFZGdlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhciBuZWlnaGJvckVkZ2UgPSBuZWlnaGJvckVkZ2VzW2ldO1xuICAgICAgY3VycmVudE5laWdoYm9yID0gbmVpZ2hib3JFZGdlLmdldE90aGVyRW5kSW5HcmFwaChjdXJyZW50Tm9kZSwgdGhpcyk7XG5cbiAgICAgIC8vIEFkZCB1bnZpc2l0ZWQgbmVpZ2hib3JzIHRvIHRoZSBsaXN0IHRvIHZpc2l0XG4gICAgICBpZiAoY3VycmVudE5laWdoYm9yICE9IG51bGwgJiYgIXZpc2l0ZWQuaGFzKGN1cnJlbnROZWlnaGJvcikpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuT2ZOZWlnaGJvciA9IGN1cnJlbnROZWlnaGJvci53aXRoQ2hpbGRyZW4oKTtcblxuICAgICAgICBjaGlsZHJlbk9mTmVpZ2hib3IuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHF1ZXVlLnB1c2gobm9kZSk7XG4gICAgICAgICAgdmlzaXRlZC5hZGQobm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcblxuICBpZiAodmlzaXRlZC5zaXplID49IHRoaXMubm9kZXMubGVuZ3RoKSB7XG4gICAgdmFyIG5vT2ZWaXNpdGVkSW5UaGlzR3JhcGggPSAwO1xuXG4gICAgdmlzaXRlZC5mb3JFYWNoKGZ1bmN0aW9uICh2aXNpdGVkTm9kZSkge1xuICAgICAgaWYgKHZpc2l0ZWROb2RlLm93bmVyID09IHNlbGYpIHtcbiAgICAgICAgbm9PZlZpc2l0ZWRJblRoaXNHcmFwaCsrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG5vT2ZWaXNpdGVkSW5UaGlzR3JhcGggPT0gdGhpcy5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMR3JhcGg7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoO1xudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuZnVuY3Rpb24gTEdyYXBoTWFuYWdlcihsYXlvdXQpIHtcbiAgTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsgLy8gSXQgbWF5IGJlIGJldHRlciB0byBpbml0aWxpemUgdGhpcyBvdXQgb2YgdGhpcyBmdW5jdGlvbiBidXQgaXQgZ2l2ZXMgYW4gZXJyb3IgKFJpZ2h0LWhhbmQgc2lkZSBvZiAnaW5zdGFuY2VvZicgaXMgbm90IGNhbGxhYmxlKSBub3cuXG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuXG4gIHRoaXMuZ3JhcGhzID0gW107XG4gIHRoaXMuZWRnZXMgPSBbXTtcbn1cblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuYWRkUm9vdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5ncmFwaCA9IHRoaXMubGF5b3V0Lm5ld0dyYXBoKCk7XG4gIHZhciBubm9kZSA9IHRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCk7XG4gIHZhciByb290ID0gdGhpcy5hZGQobmdyYXBoLCBubm9kZSk7XG4gIHRoaXMuc2V0Um9vdEdyYXBoKHJvb3QpO1xuICByZXR1cm4gdGhpcy5yb290R3JhcGg7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmV3R3JhcGgsIHBhcmVudE5vZGUsIG5ld0VkZ2UsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpIHtcbiAgLy90aGVyZSBhcmUganVzdCAyIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGVuIGl0IGFkZHMgYW4gTEdyYXBoIGVsc2UgaXQgYWRkcyBhbiBMRWRnZVxuICBpZiAobmV3RWRnZSA9PSBudWxsICYmIHNvdXJjZU5vZGUgPT0gbnVsbCAmJiB0YXJnZXROb2RlID09IG51bGwpIHtcbiAgICBpZiAobmV3R3JhcGggPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJHcmFwaCBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIlBhcmVudCBub2RlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyYXBocy5pbmRleE9mKG5ld0dyYXBoKSA+IC0xKSB7XG4gICAgICB0aHJvdyBcIkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaHMucHVzaChuZXdHcmFwaCk7XG5cbiAgICBpZiAobmV3R3JhcGgucGFyZW50ICE9IG51bGwpIHtcbiAgICAgIHRocm93IFwiQWxyZWFkeSBoYXMgYSBwYXJlbnQhXCI7XG4gICAgfVxuICAgIGlmIChwYXJlbnROb2RlLmNoaWxkICE9IG51bGwpIHtcbiAgICAgIHRocm93IFwiQWxyZWFkeSBoYXMgYSBjaGlsZCFcIjtcbiAgICB9XG5cbiAgICBuZXdHcmFwaC5wYXJlbnQgPSBwYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuY2hpbGQgPSBuZXdHcmFwaDtcblxuICAgIHJldHVybiBuZXdHcmFwaDtcbiAgfSBlbHNlIHtcbiAgICAvL2NoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnNcbiAgICB0YXJnZXROb2RlID0gbmV3RWRnZTtcbiAgICBzb3VyY2VOb2RlID0gcGFyZW50Tm9kZTtcbiAgICBuZXdFZGdlID0gbmV3R3JhcGg7XG4gICAgdmFyIHNvdXJjZUdyYXBoID0gc291cmNlTm9kZS5nZXRPd25lcigpO1xuICAgIHZhciB0YXJnZXRHcmFwaCA9IHRhcmdldE5vZGUuZ2V0T3duZXIoKTtcblxuICAgIGlmICghKHNvdXJjZUdyYXBoICE9IG51bGwgJiYgc291cmNlR3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgICB9XG4gICAgaWYgKCEodGFyZ2V0R3JhcGggIT0gbnVsbCAmJiB0YXJnZXRHcmFwaC5nZXRHcmFwaE1hbmFnZXIoKSA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VHcmFwaCA9PSB0YXJnZXRHcmFwaCkge1xuICAgICAgbmV3RWRnZS5pc0ludGVyR3JhcGggPSBmYWxzZTtcbiAgICAgIHJldHVybiBzb3VyY2VHcmFwaC5hZGQobmV3RWRnZSwgc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0VkZ2UuaXNJbnRlckdyYXBoID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHNvdXJjZSBhbmQgdGFyZ2V0XG4gICAgICBuZXdFZGdlLnNvdXJjZSA9IHNvdXJjZU5vZGU7XG4gICAgICBuZXdFZGdlLnRhcmdldCA9IHRhcmdldE5vZGU7XG5cbiAgICAgIC8vIGFkZCBlZGdlIHRvIGludGVyLWdyYXBoIGVkZ2UgbGlzdFxuICAgICAgaWYgKHRoaXMuZWRnZXMuaW5kZXhPZihuZXdFZGdlKSA+IC0xKSB7XG4gICAgICAgIHRocm93IFwiRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCFcIjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgICAvLyBhZGQgZWRnZSB0byBzb3VyY2UgYW5kIHRhcmdldCBpbmNpZGVuY3kgbGlzdHNcbiAgICAgIGlmICghKG5ld0VkZ2Uuc291cmNlICE9IG51bGwgJiYgbmV3RWRnZS50YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgICAgdGhyb3cgXCJFZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghKG5ld0VkZ2Uuc291cmNlLmVkZ2VzLmluZGV4T2YobmV3RWRnZSkgPT0gLTEgJiYgbmV3RWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihuZXdFZGdlKSA9PSAtMSkpIHtcbiAgICAgICAgdGhyb3cgXCJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhXCI7XG4gICAgICB9XG5cbiAgICAgIG5ld0VkZ2Uuc291cmNlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgICBuZXdFZGdlLnRhcmdldC5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICB9XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChsT2JqKSB7XG4gIGlmIChsT2JqIGluc3RhbmNlb2YgTEdyYXBoKSB7XG4gICAgdmFyIGdyYXBoID0gbE9iajtcbiAgICBpZiAoZ3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgIT0gdGhpcykge1xuICAgICAgdGhyb3cgXCJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3JcIjtcbiAgICB9XG4gICAgaWYgKCEoZ3JhcGggPT0gdGhpcy5yb290R3JhcGggfHwgZ3JhcGgucGFyZW50ICE9IG51bGwgJiYgZ3JhcGgucGFyZW50LmdyYXBoTWFuYWdlciA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJJbnZhbGlkIHBhcmVudCBub2RlIVwiO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHRoZSBlZGdlcyAobWFrZSBhIGNvcHkgdG8gZG8gaXQgc2FmZWx5KVxuICAgIHZhciBlZGdlc1RvQmVSZW1vdmVkID0gW107XG5cbiAgICBlZGdlc1RvQmVSZW1vdmVkID0gZWRnZXNUb0JlUmVtb3ZlZC5jb25jYXQoZ3JhcGguZ2V0RWRnZXMoKSk7XG5cbiAgICB2YXIgZWRnZTtcbiAgICB2YXIgcyA9IGVkZ2VzVG9CZVJlbW92ZWQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBlZGdlID0gZWRnZXNUb0JlUmVtb3ZlZFtpXTtcbiAgICAgIGdyYXBoLnJlbW92ZShlZGdlKTtcbiAgICB9XG5cbiAgICAvLyB0aGVuIHRoZSBub2RlcyAobWFrZSBhIGNvcHkgdG8gZG8gaXQgc2FmZWx5KVxuICAgIHZhciBub2Rlc1RvQmVSZW1vdmVkID0gW107XG5cbiAgICBub2Rlc1RvQmVSZW1vdmVkID0gbm9kZXNUb0JlUmVtb3ZlZC5jb25jYXQoZ3JhcGguZ2V0Tm9kZXMoKSk7XG5cbiAgICB2YXIgbm9kZTtcbiAgICBzID0gbm9kZXNUb0JlUmVtb3ZlZC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1RvQmVSZW1vdmVkW2ldO1xuICAgICAgZ3JhcGgucmVtb3ZlKG5vZGUpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGdyYXBoIGlzIHRoZSByb290XG4gICAgaWYgKGdyYXBoID09IHRoaXMucm9vdEdyYXBoKSB7XG4gICAgICB0aGlzLnNldFJvb3RHcmFwaChudWxsKTtcbiAgICB9XG5cbiAgICAvLyBub3cgcmVtb3ZlIHRoZSBncmFwaCBpdHNlbGZcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdyYXBocy5pbmRleE9mKGdyYXBoKTtcbiAgICB0aGlzLmdyYXBocy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gYWxzbyByZXNldCB0aGUgcGFyZW50IG9mIHRoZSBncmFwaFxuICAgIGdyYXBoLnBhcmVudCA9IG51bGw7XG4gIH0gZWxzZSBpZiAobE9iaiBpbnN0YW5jZW9mIExFZGdlKSB7XG4gICAgZWRnZSA9IGxPYmo7XG4gICAgaWYgKGVkZ2UgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJFZGdlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghZWRnZS5pc0ludGVyR3JhcGgpIHtcbiAgICAgIHRocm93IFwiTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhXCI7XG4gICAgfVxuICAgIGlmICghKGVkZ2Uuc291cmNlICE9IG51bGwgJiYgZWRnZS50YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCFcIjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgZWRnZSBmcm9tIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzJyBpbmNpZGVuY3kgbGlzdHNcblxuICAgIGlmICghKGVkZ2Uuc291cmNlLmVkZ2VzLmluZGV4T2YoZWRnZSkgIT0gLTEgJiYgZWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihlZGdlKSAhPSAtMSkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSFcIjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBlZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGVkZ2Uuc291cmNlLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBlZGdlLnRhcmdldC5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGVkZ2UudGFyZ2V0LmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAvLyByZW1vdmUgZWRnZSBmcm9tIG93bmVyIGdyYXBoIG1hbmFnZXIncyBpbnRlci1ncmFwaCBlZGdlIGxpc3RcblxuICAgIGlmICghKGVkZ2Uuc291cmNlLm93bmVyICE9IG51bGwgJiYgZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkgIT0gbnVsbCkpIHtcbiAgICAgIHRocm93IFwiRWRnZSBvd25lciBncmFwaCBvciBvd25lciBncmFwaCBtYW5hZ2VyIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmIChlZGdlLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGVkZ2UpID09IC0xKSB7XG4gICAgICB0aHJvdyBcIk5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0IVwiO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHModHJ1ZSk7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRHcmFwaHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBocztcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldEFsbE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hbGxOb2RlcyA9PSBudWxsKSB7XG4gICAgdmFyIG5vZGVMaXN0ID0gW107XG4gICAgdmFyIGdyYXBocyA9IHRoaXMuZ2V0R3JhcGhzKCk7XG4gICAgdmFyIHMgPSBncmFwaHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBub2RlTGlzdCA9IG5vZGVMaXN0LmNvbmNhdChncmFwaHNbaV0uZ2V0Tm9kZXMoKSk7XG4gICAgfVxuICAgIHRoaXMuYWxsTm9kZXMgPSBub2RlTGlzdDtcbiAgfVxuICByZXR1cm4gdGhpcy5hbGxOb2Rlcztcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlc2V0QWxsTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWxsTm9kZXMgPSBudWxsO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUucmVzZXRBbGxFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hbGxFZGdlcyA9IG51bGw7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gbnVsbDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldEFsbEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hbGxFZGdlcyA9PSBudWxsKSB7XG4gICAgdmFyIGVkZ2VMaXN0ID0gW107XG4gICAgdmFyIGdyYXBocyA9IHRoaXMuZ2V0R3JhcGhzKCk7XG4gICAgdmFyIHMgPSBncmFwaHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlTGlzdCA9IGVkZ2VMaXN0LmNvbmNhdChncmFwaHNbaV0uZ2V0RWRnZXMoKSk7XG4gICAgfVxuXG4gICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQodGhpcy5lZGdlcyk7XG5cbiAgICB0aGlzLmFsbEVkZ2VzID0gZWRnZUxpc3Q7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYWxsRWRnZXM7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb247XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uIChub2RlTGlzdCkge1xuICBpZiAodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiAhPSBudWxsKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cblxuICB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gbm9kZUxpc3Q7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRSb290ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yb290R3JhcGg7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5zZXRSb290R3JhcGggPSBmdW5jdGlvbiAoZ3JhcGgpIHtcbiAgaWYgKGdyYXBoLmdldEdyYXBoTWFuYWdlcigpICE9IHRoaXMpIHtcbiAgICB0aHJvdyBcIlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICB9XG5cbiAgdGhpcy5yb290R3JhcGggPSBncmFwaDtcbiAgLy8gcm9vdCBncmFwaCBtdXN0IGhhdmUgYSByb290IG5vZGUgYXNzb2NpYXRlZCB3aXRoIGl0IGZvciBjb252ZW5pZW5jZVxuICBpZiAoZ3JhcGgucGFyZW50ID09IG51bGwpIHtcbiAgICBncmFwaC5wYXJlbnQgPSB0aGlzLmxheW91dC5uZXdOb2RlKFwiUm9vdCBub2RlXCIpO1xuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxheW91dDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmlzT25lQW5jZXN0b3JPZk90aGVyID0gZnVuY3Rpb24gKGZpcnN0Tm9kZSwgc2Vjb25kTm9kZSkge1xuICBpZiAoIShmaXJzdE5vZGUgIT0gbnVsbCAmJiBzZWNvbmROb2RlICE9IG51bGwpKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cblxuICBpZiAoZmlyc3ROb2RlID09IHNlY29uZE5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJcyBzZWNvbmQgbm9kZSBhbiBhbmNlc3RvciBvZiB0aGUgZmlyc3Qgb25lP1xuICB2YXIgb3duZXJHcmFwaCA9IGZpcnN0Tm9kZS5nZXRPd25lcigpO1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBkbyB7XG4gICAgcGFyZW50Tm9kZSA9IG93bmVyR3JhcGguZ2V0UGFyZW50KCk7XG5cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBzZWNvbmROb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvd25lckdyYXBoID0gcGFyZW50Tm9kZS5nZXRPd25lcigpO1xuICAgIGlmIChvd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG4gIC8vIElzIGZpcnN0IG5vZGUgYW4gYW5jZXN0b3Igb2YgdGhlIHNlY29uZCBvbmU/XG4gIG93bmVyR3JhcGggPSBzZWNvbmROb2RlLmdldE93bmVyKCk7XG5cbiAgZG8ge1xuICAgIHBhcmVudE5vZGUgPSBvd25lckdyYXBoLmdldFBhcmVudCgpO1xuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gZmlyc3ROb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvd25lckdyYXBoID0gcGFyZW50Tm9kZS5nZXRPd25lcigpO1xuICAgIGlmIChvd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2U7XG4gIHZhciBzb3VyY2VOb2RlO1xuICB2YXIgdGFyZ2V0Tm9kZTtcbiAgdmFyIHNvdXJjZUFuY2VzdG9yR3JhcGg7XG4gIHZhciB0YXJnZXRBbmNlc3RvckdyYXBoO1xuXG4gIHZhciBlZGdlcyA9IHRoaXMuZ2V0QWxsRWRnZXMoKTtcbiAgdmFyIHMgPSBlZGdlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgZWRnZSA9IGVkZ2VzW2ldO1xuXG4gICAgc291cmNlTm9kZSA9IGVkZ2Uuc291cmNlO1xuICAgIHRhcmdldE5vZGUgPSBlZGdlLnRhcmdldDtcbiAgICBlZGdlLmxjYSA9IG51bGw7XG4gICAgZWRnZS5zb3VyY2VJbkxjYSA9IHNvdXJjZU5vZGU7XG4gICAgZWRnZS50YXJnZXRJbkxjYSA9IHRhcmdldE5vZGU7XG5cbiAgICBpZiAoc291cmNlTm9kZSA9PSB0YXJnZXROb2RlKSB7XG4gICAgICBlZGdlLmxjYSA9IHNvdXJjZU5vZGUuZ2V0T3duZXIoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHNvdXJjZUFuY2VzdG9yR3JhcGggPSBzb3VyY2VOb2RlLmdldE93bmVyKCk7XG5cbiAgICB3aGlsZSAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgZWRnZS50YXJnZXRJbkxjYSA9IHRhcmdldE5vZGU7XG4gICAgICB0YXJnZXRBbmNlc3RvckdyYXBoID0gdGFyZ2V0Tm9kZS5nZXRPd25lcigpO1xuXG4gICAgICB3aGlsZSAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgICBpZiAodGFyZ2V0QW5jZXN0b3JHcmFwaCA9PSBzb3VyY2VBbmNlc3RvckdyYXBoKSB7XG4gICAgICAgICAgZWRnZS5sY2EgPSB0YXJnZXRBbmNlc3RvckdyYXBoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yR3JhcGggPT0gdGhpcy5yb290R3JhcGgpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlZGdlLmxjYSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWRnZS50YXJnZXRJbkxjYSA9IHRhcmdldEFuY2VzdG9yR3JhcGguZ2V0UGFyZW50KCk7XG4gICAgICAgIHRhcmdldEFuY2VzdG9yR3JhcGggPSBlZGdlLnRhcmdldEluTGNhLmdldE93bmVyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2VBbmNlc3RvckdyYXBoID09IHRoaXMucm9vdEdyYXBoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgICBlZGdlLnNvdXJjZUluTGNhID0gc291cmNlQW5jZXN0b3JHcmFwaC5nZXRQYXJlbnQoKTtcbiAgICAgICAgc291cmNlQW5jZXN0b3JHcmFwaCA9IGVkZ2Uuc291cmNlSW5MY2EuZ2V0T3duZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gICAgfVxuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmdW5jdGlvbiAoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGlmIChmaXJzdE5vZGUgPT0gc2Vjb25kTm9kZSkge1xuICAgIHJldHVybiBmaXJzdE5vZGUuZ2V0T3duZXIoKTtcbiAgfVxuICB2YXIgZmlyc3RPd25lckdyYXBoID0gZmlyc3ROb2RlLmdldE93bmVyKCk7XG5cbiAgZG8ge1xuICAgIGlmIChmaXJzdE93bmVyR3JhcGggPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBzZWNvbmRPd25lckdyYXBoID0gc2Vjb25kTm9kZS5nZXRPd25lcigpO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKHNlY29uZE93bmVyR3JhcGggPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlY29uZE93bmVyR3JhcGggPT0gZmlyc3RPd25lckdyYXBoKSB7XG4gICAgICAgIHJldHVybiBzZWNvbmRPd25lckdyYXBoO1xuICAgICAgfVxuICAgICAgc2Vjb25kT3duZXJHcmFwaCA9IHNlY29uZE93bmVyR3JhcGguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIGZpcnN0T3duZXJHcmFwaCA9IGZpcnN0T3duZXJHcmFwaC5nZXRQYXJlbnQoKS5nZXRPd25lcigpO1xuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXR1cm4gZmlyc3RPd25lckdyYXBoO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMgPSBmdW5jdGlvbiAoZ3JhcGgsIGRlcHRoKSB7XG4gIGlmIChncmFwaCA9PSBudWxsICYmIGRlcHRoID09IG51bGwpIHtcbiAgICBncmFwaCA9IHRoaXMucm9vdEdyYXBoO1xuICAgIGRlcHRoID0gMTtcbiAgfVxuICB2YXIgbm9kZTtcblxuICB2YXIgbm9kZXMgPSBncmFwaC5nZXROb2RlcygpO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICBub2RlID0gbm9kZXNbaV07XG4gICAgbm9kZS5pbmNsdXNpb25UcmVlRGVwdGggPSBkZXB0aDtcblxuICAgIGlmIChub2RlLmNoaWxkICE9IG51bGwpIHtcbiAgICAgIHRoaXMuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMobm9kZS5jaGlsZCwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlO1xuICB2YXIgZWRnZXNUb1JlbW92ZSA9IFtdO1xuXG4gIHZhciBzID0gdGhpcy5lZGdlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgZWRnZSA9IHRoaXMuZWRnZXNbaV07XG5cbiAgICBpZiAodGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihlZGdlLnNvdXJjZSwgZWRnZS50YXJnZXQpKSB7XG4gICAgICBlZGdlc1RvUmVtb3ZlLnB1c2goZWRnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGludmFsaWQgZWRnZXMgZnJvbSBncmFwaCBtYW5hZ2VyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXNUb1JlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMucmVtb3ZlKGVkZ2VzVG9SZW1vdmVbaV0pO1xuICB9XG5cbiAgLy8gSW52YWxpZCBlZGdlcyBhcmUgY2xlYXJlZCwgc28gcmV0dXJuIGZhbHNlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBsaXN0IG9mIHN0YXRpYyBnZW9tZXRyeSByZWxhdGVkIHV0aWxpdHkgbWV0aG9kcy5cbiAqXG4gKlxuICogQ29weXJpZ2h0OiBpLVZpcyBSZXNlYXJjaCBHcm91cCwgQmlsa2VudCBVbml2ZXJzaXR5LCAyMDA3IC0gcHJlc2VudFxuICovXG5cbnZhciBQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG5mdW5jdGlvbiBJR2VvbWV0cnkoKSB7fVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbGN1bGF0ZXMgKmhhbGYqIHRoZSBhbW91bnQgaW4geCBhbmQgeSBkaXJlY3Rpb25zIG9mIHRoZSB0d29cbiAqIGlucHV0IHJlY3RhbmdsZXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZW0ga2VlcGluZyB0aGVpciByZXNwZWN0aXZlXG4gKiBwb3NpdGlvbmluZywgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBpbiB0aGUgaW5wdXQgYXJyYXkuIEFuIGlucHV0XG4gKiBzZXBhcmF0aW9uIGJ1ZmZlciBhZGRlZCB0byB0aGUgYW1vdW50IGluIGJvdGggZGlyZWN0aW9ucy4gV2UgYXNzdW1lIHRoYXRcbiAqIHRoZSB0d28gcmVjdGFuZ2xlcyBkbyBpbnRlcnNlY3QuXG4gKi9cbklHZW9tZXRyeS5jYWxjU2VwYXJhdGlvbkFtb3VudCA9IGZ1bmN0aW9uIChyZWN0QSwgcmVjdEIsIG92ZXJsYXBBbW91bnQsIHNlcGFyYXRpb25CdWZmZXIpIHtcbiAgaWYgKCFyZWN0QS5pbnRlcnNlY3RzKHJlY3RCKSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgdmFyIGRpcmVjdGlvbnMgPSBuZXcgQXJyYXkoMik7XG5cbiAgdGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhyZWN0QSwgcmVjdEIsIGRpcmVjdGlvbnMpO1xuXG4gIG92ZXJsYXBBbW91bnRbMF0gPSBNYXRoLm1pbihyZWN0QS5nZXRSaWdodCgpLCByZWN0Qi5nZXRSaWdodCgpKSAtIE1hdGgubWF4KHJlY3RBLngsIHJlY3RCLngpO1xuICBvdmVybGFwQW1vdW50WzFdID0gTWF0aC5taW4ocmVjdEEuZ2V0Qm90dG9tKCksIHJlY3RCLmdldEJvdHRvbSgpKSAtIE1hdGgubWF4KHJlY3RBLnksIHJlY3RCLnkpO1xuXG4gIC8vIHVwZGF0ZSB0aGUgb3ZlcmxhcHBpbmcgYW1vdW50cyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgaWYgKHJlY3RBLmdldFgoKSA8PSByZWN0Qi5nZXRYKCkgJiYgcmVjdEEuZ2V0UmlnaHQoKSA+PSByZWN0Qi5nZXRSaWdodCgpKSB7XG4gICAgLyogQ2FzZSB4LjE6XG4gICAgKlxuICAgICogcmVjdEFcbiAgICAqIFx0fCAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICogXHR8ICAgICAgICBfX19fX19fX18gICAgICB8XG4gICAgKiBcdHwgICAgICAgIHwgICAgICAgfCAgICAgIHxcbiAgICAqIFx0fF9fX19fX19ffF9fX19fX198X19fX19ffFxuICAgICogXHRcdFx0IHwgICAgICAgfFxuICAgICogICAgICAgICAgIHwgICAgICAgfFxuICAgICogICAgICAgIHJlY3RCXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzBdICs9IE1hdGgubWluKHJlY3RCLmdldFgoKSAtIHJlY3RBLmdldFgoKSwgcmVjdEEuZ2V0UmlnaHQoKSAtIHJlY3RCLmdldFJpZ2h0KCkpO1xuICB9IGVsc2UgaWYgKHJlY3RCLmdldFgoKSA8PSByZWN0QS5nZXRYKCkgJiYgcmVjdEIuZ2V0UmlnaHQoKSA+PSByZWN0QS5nZXRSaWdodCgpKSB7XG4gICAgLyogQ2FzZSB4LjI6XG4gICAgKlxuICAgICogcmVjdEJcbiAgICAqIFx0fCAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICogXHR8ICAgICAgICBfX19fX19fX18gICAgICB8XG4gICAgKiBcdHwgICAgICAgIHwgICAgICAgfCAgICAgIHxcbiAgICAqIFx0fF9fX19fX19ffF9fX19fX198X19fX19ffFxuICAgICogXHRcdFx0IHwgICAgICAgfFxuICAgICogICAgICAgICAgIHwgICAgICAgfFxuICAgICogICAgICAgIHJlY3RBXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzBdICs9IE1hdGgubWluKHJlY3RBLmdldFgoKSAtIHJlY3RCLmdldFgoKSwgcmVjdEIuZ2V0UmlnaHQoKSAtIHJlY3RBLmdldFJpZ2h0KCkpO1xuICB9XG4gIGlmIChyZWN0QS5nZXRZKCkgPD0gcmVjdEIuZ2V0WSgpICYmIHJlY3RBLmdldEJvdHRvbSgpID49IHJlY3RCLmdldEJvdHRvbSgpKSB7XG4gICAgLyogQ2FzZSB5LjE6XG4gICAgICogICAgICAgICAgX19fX19fX18gcmVjdEFcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgIF9fX19fX3xfX19fICByZWN0QlxuICAgICAqICAgICAgICAgfCAgICB8XG4gICAgICogICAgICAgICB8ICAgIHxcbiAgICAgKiAgIF9fX19fX3xfX19ffFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfF9fX19fX19fXG4gICAgICpcbiAgICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzFdICs9IE1hdGgubWluKHJlY3RCLmdldFkoKSAtIHJlY3RBLmdldFkoKSwgcmVjdEEuZ2V0Qm90dG9tKCkgLSByZWN0Qi5nZXRCb3R0b20oKSk7XG4gIH0gZWxzZSBpZiAocmVjdEIuZ2V0WSgpIDw9IHJlY3RBLmdldFkoKSAmJiByZWN0Qi5nZXRCb3R0b20oKSA+PSByZWN0QS5nZXRCb3R0b20oKSkge1xuICAgIC8qIENhc2UgeS4yOlxuICAgICogICAgICAgICAgX19fX19fX18gcmVjdEJcbiAgICAqICAgICAgICAgfFxuICAgICogICAgICAgICB8XG4gICAgKiAgIF9fX19fX3xfX19fICByZWN0QVxuICAgICogICAgICAgICB8ICAgIHxcbiAgICAqICAgICAgICAgfCAgICB8XG4gICAgKiAgIF9fX19fX3xfX19ffFxuICAgICogICAgICAgICB8XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgICAgICAgfF9fX19fX19fXG4gICAgKlxuICAgICovXG4gICAgb3ZlcmxhcEFtb3VudFsxXSArPSBNYXRoLm1pbihyZWN0QS5nZXRZKCkgLSByZWN0Qi5nZXRZKCksIHJlY3RCLmdldEJvdHRvbSgpIC0gcmVjdEEuZ2V0Qm90dG9tKCkpO1xuICB9XG5cbiAgLy8gZmluZCBzbG9wZSBvZiB0aGUgbGluZSBwYXNzZXMgdHdvIGNlbnRlcnNcbiAgdmFyIHNsb3BlID0gTWF0aC5hYnMoKHJlY3RCLmdldENlbnRlclkoKSAtIHJlY3RBLmdldENlbnRlclkoKSkgLyAocmVjdEIuZ2V0Q2VudGVyWCgpIC0gcmVjdEEuZ2V0Q2VudGVyWCgpKSk7XG4gIC8vIGlmIGNlbnRlcnMgYXJlIG92ZXJsYXBwZWRcbiAgaWYgKHJlY3RCLmdldENlbnRlclkoKSA9PT0gcmVjdEEuZ2V0Q2VudGVyWSgpICYmIHJlY3RCLmdldENlbnRlclgoKSA9PT0gcmVjdEEuZ2V0Q2VudGVyWCgpKSB7XG4gICAgLy8gYXNzdW1lIHRoZSBzbG9wZSBpcyAxICg0NSBkZWdyZWUpXG4gICAgc2xvcGUgPSAxLjA7XG4gIH1cblxuICB2YXIgbW92ZUJ5WSA9IHNsb3BlICogb3ZlcmxhcEFtb3VudFswXTtcbiAgdmFyIG1vdmVCeVggPSBvdmVybGFwQW1vdW50WzFdIC8gc2xvcGU7XG4gIGlmIChvdmVybGFwQW1vdW50WzBdIDwgbW92ZUJ5WCkge1xuICAgIG1vdmVCeVggPSBvdmVybGFwQW1vdW50WzBdO1xuICB9IGVsc2Uge1xuICAgIG1vdmVCeVkgPSBvdmVybGFwQW1vdW50WzFdO1xuICB9XG4gIC8vIHJldHVybiBoYWxmIHRoZSBhbW91bnQgc28gdGhhdCBpZiBlYWNoIHJlY3RhbmdsZSBpcyBtb3ZlZCBieSB0aGVzZVxuICAvLyBhbW91bnRzIGluIG9wcG9zaXRlIGRpcmVjdGlvbnMsIG92ZXJsYXAgd2lsbCBiZSByZXNvbHZlZFxuICBvdmVybGFwQW1vdW50WzBdID0gLTEgKiBkaXJlY3Rpb25zWzBdICogKG1vdmVCeVggLyAyICsgc2VwYXJhdGlvbkJ1ZmZlcik7XG4gIG92ZXJsYXBBbW91bnRbMV0gPSAtMSAqIGRpcmVjdGlvbnNbMV0gKiAobW92ZUJ5WSAvIDIgKyBzZXBhcmF0aW9uQnVmZmVyKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZGVjaWRlcyB0aGUgc2VwYXJhdGlvbiBkaXJlY3Rpb24gb2Ygb3ZlcmxhcHBpbmcgbm9kZXNcbiAqXG4gKiBpZiBkaXJlY3Rpb25zWzBdID0gLTEsIHRoZW4gcmVjdEEgZ29lcyBsZWZ0XG4gKiBpZiBkaXJlY3Rpb25zWzBdID0gMSwgIHRoZW4gcmVjdEEgZ29lcyByaWdodFxuICogaWYgZGlyZWN0aW9uc1sxXSA9IC0xLCB0aGVuIHJlY3RBIGdvZXMgdXBcbiAqIGlmIGRpcmVjdGlvbnNbMV0gPSAxLCAgdGhlbiByZWN0QSBnb2VzIGRvd25cbiAqL1xuSUdlb21ldHJ5LmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0QiwgZGlyZWN0aW9ucykge1xuICBpZiAocmVjdEEuZ2V0Q2VudGVyWCgpIDwgcmVjdEIuZ2V0Q2VudGVyWCgpKSB7XG4gICAgZGlyZWN0aW9uc1swXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIGRpcmVjdGlvbnNbMF0gPSAxO1xuICB9XG5cbiAgaWYgKHJlY3RBLmdldENlbnRlclkoKSA8IHJlY3RCLmdldENlbnRlclkoKSkge1xuICAgIGRpcmVjdGlvbnNbMV0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICBkaXJlY3Rpb25zWzFdID0gMTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gKGNsaXBwaW5nKSBwb2ludHMgb2YgdGhlIHR3b1xuICogaW5wdXQgcmVjdGFuZ2xlcyB3aXRoIGxpbmUgc2VnbWVudCBkZWZpbmVkIGJ5IHRoZSBjZW50ZXJzIG9mIHRoZXNlIHR3b1xuICogcmVjdGFuZ2xlcy4gVGhlIGNsaXBwaW5nIHBvaW50cyBhcmUgc2F2ZWQgaW4gdGhlIGlucHV0IGRvdWJsZSBhcnJheSBhbmRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZSB0d28gcmVjdGFuZ2xlcyBvdmVybGFwIGlzIHJldHVybmVkLlxuICovXG5JR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uMiA9IGZ1bmN0aW9uIChyZWN0QSwgcmVjdEIsIHJlc3VsdCkge1xuICAvL3Jlc3VsdFswLTFdIHdpbGwgY29udGFpbiBjbGlwUG9pbnQgb2YgcmVjdEEsIHJlc3VsdFsyLTNdIHdpbGwgY29udGFpbiBjbGlwUG9pbnQgb2YgcmVjdEJcbiAgdmFyIHAxeCA9IHJlY3RBLmdldENlbnRlclgoKTtcbiAgdmFyIHAxeSA9IHJlY3RBLmdldENlbnRlclkoKTtcbiAgdmFyIHAyeCA9IHJlY3RCLmdldENlbnRlclgoKTtcbiAgdmFyIHAyeSA9IHJlY3RCLmdldENlbnRlclkoKTtcblxuICAvL2lmIHR3byByZWN0YW5nbGVzIGludGVyc2VjdCwgdGhlbiBjbGlwcGluZyBwb2ludHMgYXJlIGNlbnRlcnNcbiAgaWYgKHJlY3RBLmludGVyc2VjdHMocmVjdEIpKSB7XG4gICAgcmVzdWx0WzBdID0gcDF4O1xuICAgIHJlc3VsdFsxXSA9IHAxeTtcbiAgICByZXN1bHRbMl0gPSBwMng7XG4gICAgcmVzdWx0WzNdID0gcDJ5O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vdmFyaWFibGVzIGZvciByZWN0QVxuICB2YXIgdG9wTGVmdEF4ID0gcmVjdEEuZ2V0WCgpO1xuICB2YXIgdG9wTGVmdEF5ID0gcmVjdEEuZ2V0WSgpO1xuICB2YXIgdG9wUmlnaHRBeCA9IHJlY3RBLmdldFJpZ2h0KCk7XG4gIHZhciBib3R0b21MZWZ0QXggPSByZWN0QS5nZXRYKCk7XG4gIHZhciBib3R0b21MZWZ0QXkgPSByZWN0QS5nZXRCb3R0b20oKTtcbiAgdmFyIGJvdHRvbVJpZ2h0QXggPSByZWN0QS5nZXRSaWdodCgpO1xuICB2YXIgaGFsZldpZHRoQSA9IHJlY3RBLmdldFdpZHRoSGFsZigpO1xuICB2YXIgaGFsZkhlaWdodEEgPSByZWN0QS5nZXRIZWlnaHRIYWxmKCk7XG4gIC8vdmFyaWFibGVzIGZvciByZWN0QlxuICB2YXIgdG9wTGVmdEJ4ID0gcmVjdEIuZ2V0WCgpO1xuICB2YXIgdG9wTGVmdEJ5ID0gcmVjdEIuZ2V0WSgpO1xuICB2YXIgdG9wUmlnaHRCeCA9IHJlY3RCLmdldFJpZ2h0KCk7XG4gIHZhciBib3R0b21MZWZ0QnggPSByZWN0Qi5nZXRYKCk7XG4gIHZhciBib3R0b21MZWZ0QnkgPSByZWN0Qi5nZXRCb3R0b20oKTtcbiAgdmFyIGJvdHRvbVJpZ2h0QnggPSByZWN0Qi5nZXRSaWdodCgpO1xuICB2YXIgaGFsZldpZHRoQiA9IHJlY3RCLmdldFdpZHRoSGFsZigpO1xuICB2YXIgaGFsZkhlaWdodEIgPSByZWN0Qi5nZXRIZWlnaHRIYWxmKCk7XG5cbiAgLy9mbGFnIHdoZXRoZXIgY2xpcHBpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICB2YXIgY2xpcFBvaW50QUZvdW5kID0gZmFsc2U7XG4gIHZhciBjbGlwUG9pbnRCRm91bmQgPSBmYWxzZTtcblxuICAvLyBsaW5lIGlzIHZlcnRpY2FsXG4gIGlmIChwMXggPT09IHAyeCkge1xuICAgIGlmIChwMXkgPiBwMnkpIHtcbiAgICAgIHJlc3VsdFswXSA9IHAxeDtcbiAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgIHJlc3VsdFsyXSA9IHAyeDtcbiAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHAxeSA8IHAyeSkge1xuICAgICAgcmVzdWx0WzBdID0gcDF4O1xuICAgICAgcmVzdWx0WzFdID0gYm90dG9tTGVmdEF5O1xuICAgICAgcmVzdWx0WzJdID0gcDJ4O1xuICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25vdCBsaW5lLCByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gbGluZSBpcyBob3Jpem9udGFsXG4gIGVsc2UgaWYgKHAxeSA9PT0gcDJ5KSB7XG4gICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgIHJlc3VsdFswXSA9IHRvcExlZnRBeDtcbiAgICAgICAgcmVzdWx0WzFdID0gcDF5O1xuICAgICAgICByZXN1bHRbMl0gPSB0b3BSaWdodEJ4O1xuICAgICAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocDF4IDwgcDJ4KSB7XG4gICAgICAgIHJlc3VsdFswXSA9IHRvcFJpZ2h0QXg7XG4gICAgICAgIHJlc3VsdFsxXSA9IHAxeTtcbiAgICAgICAgcmVzdWx0WzJdID0gdG9wTGVmdEJ4O1xuICAgICAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vbm90IHZhbGlkIGxpbmUsIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL3Nsb3BlcyBvZiByZWN0QSdzIGFuZCByZWN0QidzIGRpYWdvbmFsc1xuICAgICAgdmFyIHNsb3BlQSA9IHJlY3RBLmhlaWdodCAvIHJlY3RBLndpZHRoO1xuICAgICAgdmFyIHNsb3BlQiA9IHJlY3RCLmhlaWdodCAvIHJlY3RCLndpZHRoO1xuXG4gICAgICAvL3Nsb3BlIG9mIGxpbmUgYmV0d2VlbiBjZW50ZXIgb2YgcmVjdEEgYW5kIGNlbnRlciBvZiByZWN0QlxuICAgICAgdmFyIHNsb3BlUHJpbWUgPSAocDJ5IC0gcDF5KSAvIChwMnggLSBwMXgpO1xuICAgICAgdmFyIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHZvaWQgMDtcbiAgICAgIHZhciBjYXJkaW5hbERpcmVjdGlvbkIgPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QXggPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QXkgPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QnggPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QnkgPSB2b2lkIDA7XG5cbiAgICAgIC8vZGV0ZXJtaW5lIHdoZXRoZXIgY2xpcHBpbmcgcG9pbnQgaXMgdGhlIGNvcm5lciBvZiBub2RlQVxuICAgICAgaWYgKC1zbG9wZUEgPT09IHNsb3BlUHJpbWUpIHtcbiAgICAgICAgaWYgKHAxeCA+IHAyeCkge1xuICAgICAgICAgIHJlc3VsdFswXSA9IGJvdHRvbUxlZnRBeDtcbiAgICAgICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgY2xpcFBvaW50QUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbMF0gPSB0b3BSaWdodEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsb3BlQSA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gdG9wTGVmdEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFswXSA9IGJvdHRvbVJpZ2h0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gYm90dG9tTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9kZXRlcm1pbmUgd2hldGhlciBjbGlwcGluZyBwb2ludCBpcyB0aGUgY29ybmVyIG9mIG5vZGVCXG4gICAgICBpZiAoLXNsb3BlQiA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDJ4ID4gcDF4KSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gYm90dG9tTGVmdEJ4O1xuICAgICAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICBjbGlwUG9pbnRCRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFsyXSA9IHRvcFJpZ2h0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2xvcGVCID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMnggPiBwMXgpIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSB0b3BMZWZ0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gYm90dG9tUmlnaHRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSBib3R0b21MZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2lmIGJvdGggY2xpcHBpbmcgcG9pbnRzIGFyZSBjb3JuZXJzXG4gICAgICBpZiAoY2xpcFBvaW50QUZvdW5kICYmIGNsaXBQb2ludEJGb3VuZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vZGV0ZXJtaW5lIENhcmRpbmFsIERpcmVjdGlvbiBvZiByZWN0YW5nbGVzXG4gICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgIGlmIChwMXkgPiBwMnkpIHtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkEgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQSwgc2xvcGVQcmltZSwgNCk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihzbG9wZUIsIHNsb3BlUHJpbWUsIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXNsb3BlQSwgc2xvcGVQcmltZSwgMyk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVCLCBzbG9wZVByaW1lLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXNsb3BlQSwgc2xvcGVQcmltZSwgMSk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVCLCBzbG9wZVByaW1lLCAzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkEgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQSwgc2xvcGVQcmltZSwgMik7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihzbG9wZUIsIHNsb3BlUHJpbWUsIDQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL2NhbGN1bGF0ZSBjbGlwcGluZyBQb2ludCBpZiBpdCBpcyBub3QgZm91bmQgYmVmb3JlXG4gICAgICBpZiAoIWNsaXBQb2ludEFGb3VuZCkge1xuICAgICAgICBzd2l0Y2ggKGNhcmRpbmFsRGlyZWN0aW9uQSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gdG9wTGVmdEF5O1xuICAgICAgICAgICAgdGVtcFBvaW50QXggPSBwMXggKyAtaGFsZkhlaWdodEEgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gYm90dG9tUmlnaHRBeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gcDF5ICsgaGFsZldpZHRoQSAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IHAxeCArIGhhbGZIZWlnaHRBIC8gc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFswXSA9IHRlbXBQb2ludEF4O1xuICAgICAgICAgICAgcmVzdWx0WzFdID0gdGVtcFBvaW50QXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IGJvdHRvbUxlZnRBeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gcDF5ICsgLWhhbGZXaWR0aEEgKiBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNsaXBQb2ludEJGb3VuZCkge1xuICAgICAgICBzd2l0Y2ggKGNhcmRpbmFsRGlyZWN0aW9uQikge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gdG9wTGVmdEJ5O1xuICAgICAgICAgICAgdGVtcFBvaW50QnggPSBwMnggKyAtaGFsZkhlaWdodEIgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gYm90dG9tUmlnaHRCeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gcDJ5ICsgaGFsZldpZHRoQiAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBib3R0b21MZWZ0Qnk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IHAyeCArIGhhbGZIZWlnaHRCIC8gc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFsyXSA9IHRlbXBQb2ludEJ4O1xuICAgICAgICAgICAgcmVzdWx0WzNdID0gdGVtcFBvaW50Qnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IGJvdHRvbUxlZnRCeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gcDJ5ICsgLWhhbGZXaWR0aEIgKiBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW4gd2hpY2ggY2FyZGluYWwgZGlyZWN0aW9uIGRvZXMgaW5wdXQgcG9pbnQgc3RheXNcbiAqIDE6IE5vcnRoXG4gKiAyOiBFYXN0XG4gKiAzOiBTb3V0aFxuICogNDogV2VzdFxuICovXG5JR2VvbWV0cnkuZ2V0Q2FyZGluYWxEaXJlY3Rpb24gPSBmdW5jdGlvbiAoc2xvcGUsIHNsb3BlUHJpbWUsIGxpbmUpIHtcbiAgaWYgKHNsb3BlID4gc2xvcGVQcmltZSkge1xuICAgIHJldHVybiBsaW5lO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxICsgbGluZSAlIDQ7XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gbGluZXMgZGVmaW5lZCBieVxuICogcG9pbnQgcGFpcnMgKHMxLHMyKSBhbmQgKGYxLGYyKS5cbiAqL1xuSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChzMSwgczIsIGYxLCBmMikge1xuICBpZiAoZjIgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoczEsIHMyLCBmMSk7XG4gIH1cblxuICB2YXIgeDEgPSBzMS54O1xuICB2YXIgeTEgPSBzMS55O1xuICB2YXIgeDIgPSBzMi54O1xuICB2YXIgeTIgPSBzMi55O1xuICB2YXIgeDMgPSBmMS54O1xuICB2YXIgeTMgPSBmMS55O1xuICB2YXIgeDQgPSBmMi54O1xuICB2YXIgeTQgPSBmMi55O1xuICB2YXIgeCA9IHZvaWQgMCxcbiAgICAgIHkgPSB2b2lkIDA7IC8vIGludGVyc2VjdGlvbiBwb2ludFxuICB2YXIgYTEgPSB2b2lkIDAsXG4gICAgICBhMiA9IHZvaWQgMCxcbiAgICAgIGIxID0gdm9pZCAwLFxuICAgICAgYjIgPSB2b2lkIDAsXG4gICAgICBjMSA9IHZvaWQgMCxcbiAgICAgIGMyID0gdm9pZCAwOyAvLyBjb2VmZmljaWVudHMgb2YgbGluZSBlcW5zLlxuICB2YXIgZGVub20gPSB2b2lkIDA7XG5cbiAgYTEgPSB5MiAtIHkxO1xuICBiMSA9IHgxIC0geDI7XG4gIGMxID0geDIgKiB5MSAtIHgxICogeTI7IC8vIHsgYTEqeCArIGIxKnkgKyBjMSA9IDAgaXMgbGluZSAxIH1cblxuICBhMiA9IHk0IC0geTM7XG4gIGIyID0geDMgLSB4NDtcbiAgYzIgPSB4NCAqIHkzIC0geDMgKiB5NDsgLy8geyBhMip4ICsgYjIqeSArIGMyID0gMCBpcyBsaW5lIDIgfVxuXG4gIGRlbm9tID0gYTEgKiBiMiAtIGEyICogYjE7XG5cbiAgaWYgKGRlbm9tID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB4ID0gKGIxICogYzIgLSBiMiAqIGMxKSAvIGRlbm9tO1xuICB5ID0gKGEyICogYzEgLSBhMSAqIGMyKSAvIGRlbm9tO1xuXG4gIHJldHVybiBuZXcgUG9pbnQoeCwgeSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBhbmdsZSBvZiB0aGUgdmVjdG9yIGZyb20gdGhlICsgeC1heGlzXG4gKiBpbiBjbG9ja3dpc2UgZGlyZWN0aW9uIChjb21wYXRpYmxlIHcvIEphdmEgY29vcmRpbmF0ZSBzeXN0ZW0hKS5cbiAqL1xuSUdlb21ldHJ5LmFuZ2xlT2ZWZWN0b3IgPSBmdW5jdGlvbiAoQ3gsIEN5LCBOeCwgTnkpIHtcbiAgdmFyIENfYW5nbGUgPSB2b2lkIDA7XG5cbiAgaWYgKEN4ICE9PSBOeCkge1xuICAgIENfYW5nbGUgPSBNYXRoLmF0YW4oKE55IC0gQ3kpIC8gKE54IC0gQ3gpKTtcblxuICAgIGlmIChOeCA8IEN4KSB7XG4gICAgICBDX2FuZ2xlICs9IE1hdGguUEk7XG4gICAgfSBlbHNlIGlmIChOeSA8IEN5KSB7XG4gICAgICBDX2FuZ2xlICs9IHRoaXMuVFdPX1BJO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOeSA8IEN5KSB7XG4gICAgQ19hbmdsZSA9IHRoaXMuT05FX0FORF9IQUxGX1BJOyAvLyAyNzAgZGVncmVlc1xuICB9IGVsc2Uge1xuICAgIENfYW5nbGUgPSB0aGlzLkhBTEZfUEk7IC8vIDkwIGRlZ3JlZXNcbiAgfVxuXG4gIHJldHVybiBDX2FuZ2xlO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gdHdvIGxpbmUgc2VnbWVudHMgKG9uZSB3aXRoIHBvaW50XG4gKiBwMSBhbmQgcDIsIHRoZSBvdGhlciB3aXRoIHBvaW50IHAzIGFuZCBwNCkgaW50ZXJzZWN0IGF0IGEgcG9pbnQgb3RoZXJcbiAqIHRoYW4gdGhlc2UgcG9pbnRzLlxuICovXG5JR2VvbWV0cnkuZG9JbnRlcnNlY3QgPSBmdW5jdGlvbiAocDEsIHAyLCBwMywgcDQpIHtcbiAgdmFyIGEgPSBwMS54O1xuICB2YXIgYiA9IHAxLnk7XG4gIHZhciBjID0gcDIueDtcbiAgdmFyIGQgPSBwMi55O1xuICB2YXIgcCA9IHAzLng7XG4gIHZhciBxID0gcDMueTtcbiAgdmFyIHIgPSBwNC54O1xuICB2YXIgcyA9IHA0Lnk7XG4gIHZhciBkZXQgPSAoYyAtIGEpICogKHMgLSBxKSAtIChyIC0gcCkgKiAoZCAtIGIpO1xuXG4gIGlmIChkZXQgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhbWJkYSA9ICgocyAtIHEpICogKHIgLSBhKSArIChwIC0gcikgKiAocyAtIGIpKSAvIGRldDtcbiAgICB2YXIgZ2FtbWEgPSAoKGIgLSBkKSAqIChyIC0gYSkgKyAoYyAtIGEpICogKHMgLSBiKSkgLyBkZXQ7XG4gICAgcmV0dXJuIDAgPCBsYW1iZGEgJiYgbGFtYmRhIDwgMSAmJiAwIDwgZ2FtbWEgJiYgZ2FtbWEgPCAxO1xuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBhbmQgY2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIFxuICogYSBsaW5lIHNlZ21lbnQgYW5kIGEgY2lyY2xlLlxuICovXG5JR2VvbWV0cnkuZmluZENpcmNsZUxpbmVJbnRlcnNlY3Rpb25zID0gZnVuY3Rpb24gKEV4LCBFeSwgTHgsIEx5LCBDeCwgQ3ksIHIpIHtcblxuICAvLyBFIGlzIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgcmF5LFxuICAvLyBMIGlzIHRoZSBlbmQgcG9pbnQgb2YgdGhlIHJheSxcbiAgLy8gQyBpcyB0aGUgY2VudGVyIG9mIHNwaGVyZSB5b3UncmUgdGVzdGluZyBhZ2FpbnN0XG4gIC8vIHIgaXMgdGhlIHJhZGl1cyBvZiB0aGF0IHNwaGVyZVxuXG4gIC8vIENvbXB1dGU6XG4gIC8vIGQgPSBMIC0gRSAoIERpcmVjdGlvbiB2ZWN0b3Igb2YgcmF5LCBmcm9tIHN0YXJ0IHRvIGVuZCApXG4gIC8vIGYgPSBFIC0gQyAoIFZlY3RvciBmcm9tIGNlbnRlciBzcGhlcmUgdG8gcmF5IHN0YXJ0IClcblxuICAvLyBUaGVuIHRoZSBpbnRlcnNlY3Rpb24gaXMgZm91bmQgYnkuLlxuICAvLyBQID0gRSArIHQgKiBkXG4gIC8vIFRoaXMgaXMgYSBwYXJhbWV0cmljIGVxdWF0aW9uOlxuICAvLyBQeCA9IEV4ICsgdGR4XG4gIC8vIFB5ID0gRXkgKyB0ZHlcblxuICAvLyBnZXQgYSwgYiwgYyB2YWx1ZXNcbiAgdmFyIGEgPSAoTHggLSBFeCkgKiAoTHggLSBFeCkgKyAoTHkgLSBFeSkgKiAoTHkgLSBFeSk7XG4gIHZhciBiID0gMiAqICgoRXggLSBDeCkgKiAoTHggLSBFeCkgKyAoRXkgLSBDeSkgKiAoTHkgLSBFeSkpO1xuICB2YXIgYyA9IChFeCAtIEN4KSAqIChFeCAtIEN4KSArIChFeSAtIEN5KSAqIChFeSAtIEN5KSAtIHIgKiByO1xuXG4gIC8vIGdldCBkaXNjcmltaW5hbnRcbiAgdmFyIGRpc2MgPSBiICogYiAtIDQgKiBhICogYztcbiAgaWYgKGRpc2MgPj0gMCkge1xuICAgIC8vIGluc2VydCBpbnRvIHF1YWRyYXRpYyBmb3JtdWxhXG4gICAgdmFyIHQxID0gKC1iICsgTWF0aC5zcXJ0KGIgKiBiIC0gNCAqIGEgKiBjKSkgLyAoMiAqIGEpO1xuICAgIHZhciB0MiA9ICgtYiAtIE1hdGguc3FydChiICogYiAtIDQgKiBhICogYykpIC8gKDIgKiBhKTtcbiAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IG51bGw7XG4gICAgaWYgKHQxID49IDAgJiYgdDEgPD0gMSkge1xuICAgICAgLy8gdDEgaXMgdGhlIGludGVyc2VjdGlvbiwgYW5kIGl0J3MgY2xvc2VyIHRoYW4gdDJcbiAgICAgIC8vIChzaW5jZSB0MSB1c2VzIC1iIC0gZGlzY3JpbWluYW50KVxuICAgICAgLy8gSW1wYWxlLCBQb2tlXG4gICAgICByZXR1cm4gW3QxXTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHQxIGRpZG4ndCBpbnRlcnNlY3Qgc28gd2UgYXJlIGVpdGhlciBzdGFydGVkXG4gICAgLy8gaW5zaWRlIHRoZSBzcGhlcmUgb3IgY29tcGxldGVseSBwYXN0IGl0XG4gICAgaWYgKHQyID49IDAgJiYgdDIgPD0gMSkge1xuICAgICAgLy8gRXhpdFdvdW5kXG4gICAgICByZXR1cm4gW3QyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbiAgfSBlbHNlIHJldHVybiBudWxsO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IENsYXNzIENvbnN0YW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU29tZSB1c2VmdWwgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzXG4gKi9cbklHZW9tZXRyeS5IQUxGX1BJID0gMC41ICogTWF0aC5QSTtcbklHZW9tZXRyeS5PTkVfQU5EX0hBTEZfUEkgPSAxLjUgKiBNYXRoLlBJO1xuSUdlb21ldHJ5LlRXT19QSSA9IDIuMCAqIE1hdGguUEk7XG5JR2VvbWV0cnkuVEhSRUVfUEkgPSAzLjAgKiBNYXRoLlBJO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElHZW9tZXRyeTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIElNYXRoKCkge31cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaWduIG9mIHRoZSBpbnB1dCB2YWx1ZS5cbiAqL1xuSU1hdGguc2lnbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5JTWF0aC5mbG9vciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5jZWlsKHZhbHVlKSA6IE1hdGguZmxvb3IodmFsdWUpO1xufTtcblxuSU1hdGguY2VpbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5mbG9vcih2YWx1ZSkgOiBNYXRoLmNlaWwodmFsdWUpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJTWF0aDtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBJbnRlZ2VyKCkge31cblxuSW50ZWdlci5NQVhfVkFMVUUgPSAyMTQ3NDgzNjQ3O1xuSW50ZWdlci5NSU5fVkFMVUUgPSAtMjE0NzQ4MzY0ODtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlZ2VyO1xuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBub2RlRnJvbSA9IGZ1bmN0aW9uIG5vZGVGcm9tKHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgbmV4dDogbnVsbCwgcHJldjogbnVsbCB9O1xufTtcblxudmFyIGFkZCA9IGZ1bmN0aW9uIGFkZChwcmV2LCBub2RlLCBuZXh0LCBsaXN0KSB7XG4gIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgcHJldi5uZXh0ID0gbm9kZTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LmhlYWQgPSBub2RlO1xuICB9XG5cbiAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICBuZXh0LnByZXYgPSBub2RlO1xuICB9IGVsc2Uge1xuICAgIGxpc3QudGFpbCA9IG5vZGU7XG4gIH1cblxuICBub2RlLnByZXYgPSBwcmV2O1xuICBub2RlLm5leHQgPSBuZXh0O1xuXG4gIGxpc3QubGVuZ3RoKys7XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG52YXIgX3JlbW92ZSA9IGZ1bmN0aW9uIF9yZW1vdmUobm9kZSwgbGlzdCkge1xuICB2YXIgcHJldiA9IG5vZGUucHJldixcbiAgICAgIG5leHQgPSBub2RlLm5leHQ7XG5cblxuICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgIHByZXYubmV4dCA9IG5leHQ7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC5oZWFkID0gbmV4dDtcbiAgfVxuXG4gIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgbmV4dC5wcmV2ID0gcHJldjtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LnRhaWwgPSBwcmV2O1xuICB9XG5cbiAgbm9kZS5wcmV2ID0gbm9kZS5uZXh0ID0gbnVsbDtcblxuICBsaXN0Lmxlbmd0aC0tO1xuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExpbmtlZExpc3QodmFscykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlua2VkTGlzdCk7XG5cbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuXG4gICAgaWYgKHZhbHMgIT0gbnVsbCkge1xuICAgICAgdmFscy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wdXNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExpbmtlZExpc3QsIFt7XG4gICAga2V5OiBcInNpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zZXJ0QmVmb3JlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydEJlZm9yZSh2YWwsIG90aGVyTm9kZSkge1xuICAgICAgcmV0dXJuIGFkZChvdGhlck5vZGUucHJldiwgbm9kZUZyb20odmFsKSwgb3RoZXJOb2RlLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zZXJ0QWZ0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIodmFsLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLCBub2RlRnJvbSh2YWwpLCBvdGhlck5vZGUubmV4dCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydE5vZGVCZWZvcmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0Tm9kZUJlZm9yZShuZXdOb2RlLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLnByZXYsIG5ld05vZGUsIG90aGVyTm9kZSwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydE5vZGVBZnRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnROb2RlQWZ0ZXIobmV3Tm9kZSwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZSwgbmV3Tm9kZSwgb3RoZXJOb2RlLm5leHQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2godmFsKSB7XG4gICAgICByZXR1cm4gYWRkKHRoaXMudGFpbCwgbm9kZUZyb20odmFsKSwgbnVsbCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5zaGlmdCh2YWwpIHtcbiAgICAgIHJldHVybiBhZGQobnVsbCwgbm9kZUZyb20odmFsKSwgdGhpcy5oZWFkLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZShub2RlLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicG9wXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBvcCgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMudGFpbCwgdGhpcykudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBvcE5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcG9wTm9kZSgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMudGFpbCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUodGhpcy5oZWFkLCB0aGlzKS52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hpZnROb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0Tm9kZSgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMuaGVhZCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldF9vYmplY3RfYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0X29iamVjdF9hdChpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDw9IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuaGVhZDtcbiAgICAgICAgd2hpbGUgKGkgPCBpbmRleCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRfb2JqZWN0X2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldF9vYmplY3RfYXQoaW5kZXgsIHZhbHVlKSB7XG4gICAgICBpZiAoaW5kZXggPD0gdGhpcy5sZW5ndGgoKSkge1xuICAgICAgICB2YXIgaSA9IDE7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5oZWFkO1xuICAgICAgICB3aGlsZSAoaSA8IGluZGV4KSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaW5rZWRMaXN0O1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpbmtlZExpc3Q7XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLypcclxuICpUaGlzIGNsYXNzIGlzIHRoZSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb2ludC5qYXZhIGNsYXNzIGluIGpka1xyXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHksIHApIHtcbiAgdGhpcy54ID0gbnVsbDtcbiAgdGhpcy55ID0gbnVsbDtcbiAgaWYgKHggPT0gbnVsbCAmJiB5ID09IG51bGwgJiYgcCA9PSBudWxsKSB7XG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09ICdudW1iZXInICYmIHR5cGVvZiB5ID09ICdudW1iZXInICYmIHAgPT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfSBlbHNlIGlmICh4LmNvbnN0cnVjdG9yLm5hbWUgPT0gJ1BvaW50JyAmJiB5ID09IG51bGwgJiYgcCA9PSBudWxsKSB7XG4gICAgcCA9IHg7XG4gICAgdGhpcy54ID0gcC54O1xuICAgIHRoaXMueSA9IHAueTtcbiAgfVxufVxuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55O1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCBwKSB7XG4gIGlmICh4LmNvbnN0cnVjdG9yLm5hbWUgPT0gJ1BvaW50JyAmJiB5ID09IG51bGwgJiYgcCA9PSBudWxsKSB7XG4gICAgcCA9IHg7XG4gICAgdGhpcy5zZXRMb2NhdGlvbihwLngsIHAueSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHggPT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT0gJ251bWJlcicgJiYgcCA9PSBudWxsKSB7XG4gICAgLy9pZiBib3RoIHBhcmFtZXRlcnMgYXJlIGludGVnZXIganVzdCBtb3ZlICh4LHkpIGxvY2F0aW9uXG4gICAgaWYgKHBhcnNlSW50KHgpID09IHggJiYgcGFyc2VJbnQoeSkgPT0geSkge1xuICAgICAgdGhpcy5tb3ZlKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnggPSBNYXRoLmZsb29yKHggKyAwLjUpO1xuICAgICAgdGhpcy55ID0gTWF0aC5mbG9vcih5ICsgMC41KTtcbiAgICB9XG4gIH1cbn07XG5cblBvaW50LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn07XG5cblBvaW50LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoZHgsIGR5KSB7XG4gIHRoaXMueCArPSBkeDtcbiAgdGhpcy55ICs9IGR5O1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgaWYgKG9iai5jb25zdHJ1Y3Rvci5uYW1lID09IFwiUG9pbnRcIikge1xuICAgIHZhciBwdCA9IG9iajtcbiAgICByZXR1cm4gdGhpcy54ID09IHB0LnggJiYgdGhpcy55ID09IHB0Lnk7XG4gIH1cbiAgcmV0dXJuIHRoaXMgPT0gb2JqO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFBvaW50KCkuY29uc3RydWN0b3IubmFtZSArIFwiW3g9XCIgKyB0aGlzLnggKyBcIix5PVwiICsgdGhpcy55ICsgXCJdXCI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIFJlY3RhbmdsZUQoeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICB0aGlzLnggPSAwO1xuICB0aGlzLnkgPSAwO1xuICB0aGlzLndpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gIGlmICh4ICE9IG51bGwgJiYgeSAhPSBudWxsICYmIHdpZHRoICE9IG51bGwgJiYgaGVpZ2h0ICE9IG51bGwpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG59XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLng7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcbiAgdGhpcy54ID0geDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRZID0gZnVuY3Rpb24gKHkpIHtcbiAgdGhpcy55ID0geTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKHdpZHRoKSB7XG4gIHRoaXMud2lkdGggPSB3aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24gKGhlaWdodCkge1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54ICsgdGhpcy53aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldEJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueSArIHRoaXMuaGVpZ2h0O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChhKSB7XG4gIGlmICh0aGlzLmdldFJpZ2h0KCkgPCBhLngpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5nZXRCb3R0b20oKSA8IGEueSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhLmdldFJpZ2h0KCkgPCB0aGlzLngpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYS5nZXRCb3R0b20oKSA8IHRoaXMueSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0Q2VudGVyWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueCArIHRoaXMud2lkdGggLyAyO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWluWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWF4WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpICsgdGhpcy53aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldENlbnRlclkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnkgKyB0aGlzLmhlaWdodCAvIDI7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRNaW5ZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5nZXRZKCk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRNYXhZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5nZXRZKCkgKyB0aGlzLmhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFdpZHRoSGFsZiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMud2lkdGggLyAyO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0IC8gMjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlRDtcblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIFVuaXF1ZUlER2VuZXJldG9yKCkge31cblxuVW5pcXVlSURHZW5lcmV0b3IubGFzdElEID0gMDtcblxuVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGlmIChVbmlxdWVJREdlbmVyZXRvci5pc1ByaW1pdGl2ZShvYmopKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICBpZiAob2JqLnVuaXF1ZUlEICE9IG51bGwpIHtcbiAgICByZXR1cm4gb2JqLnVuaXF1ZUlEO1xuICB9XG4gIG9iai51bmlxdWVJRCA9IFVuaXF1ZUlER2VuZXJldG9yLmdldFN0cmluZygpO1xuICBVbmlxdWVJREdlbmVyZXRvci5sYXN0SUQrKztcbiAgcmV0dXJuIG9iai51bmlxdWVJRDtcbn07XG5cblVuaXF1ZUlER2VuZXJldG9yLmdldFN0cmluZyA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaWQgPT0gbnVsbCkgaWQgPSBVbmlxdWVJREdlbmVyZXRvci5sYXN0SUQ7XG4gIHJldHVybiBcIk9iamVjdCNcIiArIGlkICsgXCJcIjtcbn07XG5cblVuaXF1ZUlER2VuZXJldG9yLmlzUHJpbWl0aXZlID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhcmcgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihhcmcpO1xuICByZXR1cm4gYXJnID09IG51bGwgfHwgdHlwZSAhPSBcIm9iamVjdFwiICYmIHR5cGUgIT0gXCJmdW5jdGlvblwiO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBVbmlxdWVJREdlbmVyZXRvcjtcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIFBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgVHJhbnNmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgRW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG5mdW5jdGlvbiBMYXlvdXQoaXNSZW1vdGVVc2UpIHtcbiAgRW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIC8vTGF5b3V0IFF1YWxpdHk6IDA6ZHJhZnQsIDE6ZGVmYXVsdCwgMjpwcm9vZlxuICB0aGlzLmxheW91dFF1YWxpdHkgPSBMYXlvdXRDb25zdGFudHMuUVVBTElUWTtcbiAgLy9XaGV0aGVyIGxheW91dCBzaG91bGQgY3JlYXRlIGJlbmRwb2ludHMgYXMgbmVlZGVkIG9yIG5vdFxuICB0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO1xuICAvL1doZXRoZXIgbGF5b3V0IHNob3VsZCBiZSBpbmNyZW1lbnRhbCBvciBub3RcbiAgdGhpcy5pbmNyZW1lbnRhbCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMO1xuICAvL1doZXRoZXIgd2UgYW5pbWF0ZSBmcm9tIGJlZm9yZSB0byBhZnRlciBsYXlvdXQgbm9kZSBwb3NpdGlvbnNcbiAgdGhpcy5hbmltYXRpb25PbkxheW91dCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ7XG4gIC8vV2hldGhlciB3ZSBhbmltYXRlIHRoZSBsYXlvdXQgcHJvY2VzcyBvciBub3RcbiAgdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVDtcbiAgLy9OdW1iZXIgaXRlcmF0aW9ucyB0aGF0IHNob3VsZCBiZSBkb25lIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgYW5pbWF0aW9uc1xuICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q7XG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgb3Igbm90IGxlYWYgbm9kZXMgKG5vbi1jb21wb3VuZCBub2RlcykgYXJlIG9mIHVuaWZvcm0gc2l6ZXMuIFdoZW5cclxuICAgKiB0aGV5IGFyZSwgYm90aCBzcHJpbmcgYW5kIHJlcHVsc2lvbiBmb3JjZXMgYmV0d2VlbiB0d28gbGVhZiBub2RlcyBjYW4gYmVcclxuICAgKiBjYWxjdWxhdGVkIHdpdGhvdXQgdGhlIGV4cGVuc2l2ZSBjbGlwcGluZyBwb2ludCBjYWxjdWxhdGlvbnMsIHJlc3VsdGluZ1xyXG4gICAqIGluIG1ham9yIHNwZWVkLXVwLlxyXG4gICAqL1xuICB0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM7XG4gIC8qKlxyXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgY3JlYXRpb24gb2YgYmVuZHBvaW50cyBieSB1c2luZyBkdW1teSBub2RlcyBhbmQgZWRnZXMuXHJcbiAgICogTWFwcyBhbiBMRWRnZSB0byBpdHMgZHVtbXkgYmVuZHBvaW50IHBhdGguXHJcbiAgICovXG4gIHRoaXMuZWRnZVRvRHVtbXlOb2RlcyA9IG5ldyBNYXAoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBuZXcgTEdyYXBoTWFuYWdlcih0aGlzKTtcbiAgdGhpcy5pc0xheW91dEZpbmlzaGVkID0gZmFsc2U7XG4gIHRoaXMuaXNTdWJMYXlvdXQgPSBmYWxzZTtcbiAgdGhpcy5pc1JlbW90ZVVzZSA9IGZhbHNlO1xuXG4gIGlmIChpc1JlbW90ZVVzZSAhPSBudWxsKSB7XG4gICAgdGhpcy5pc1JlbW90ZVVzZSA9IGlzUmVtb3RlVXNlO1xuICB9XG59XG5cbkxheW91dC5SQU5ET01fU0VFRCA9IDE7XG5cbkxheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVtaXR0ZXIucHJvdG90eXBlKTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlcjtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0QWxsTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRBbGxFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZ20gPSBuZXcgTEdyYXBoTWFuYWdlcih0aGlzKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcbiAgcmV0dXJuIGdtO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdHcmFwaCA9IGZ1bmN0aW9uICh2R3JhcGgpIHtcbiAgcmV0dXJuIG5ldyBMR3JhcGgobnVsbCwgdGhpcy5ncmFwaE1hbmFnZXIsIHZHcmFwaCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLm5ld05vZGUgPSBmdW5jdGlvbiAodk5vZGUpIHtcbiAgcmV0dXJuIG5ldyBMTm9kZSh0aGlzLmdyYXBoTWFuYWdlciwgdk5vZGUpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdFZGdlID0gZnVuY3Rpb24gKHZFZGdlKSB7XG4gIHJldHVybiBuZXcgTEVkZ2UobnVsbCwgbnVsbCwgdkVkZ2UpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkgPT0gbnVsbCB8fCB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGggPT0gMCB8fCB0aGlzLmdyYXBoTWFuYWdlci5pbmNsdWRlc0ludmFsaWRFZGdlKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnJ1bkxheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5pc0xheW91dEZpbmlzaGVkID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMudGlsaW5nUHJlTGF5b3V0KSB7XG4gICAgdGhpcy50aWxpbmdQcmVMYXlvdXQoKTtcbiAgfVxuXG4gIHRoaXMuaW5pdFBhcmFtZXRlcnMoKTtcbiAgdmFyIGlzTGF5b3V0U3VjY2Vzc2Z1bGw7XG5cbiAgaWYgKHRoaXMuY2hlY2tMYXlvdXRTdWNjZXNzKCkpIHtcbiAgICBpc0xheW91dFN1Y2Nlc3NmdWxsID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgaXNMYXlvdXRTdWNjZXNzZnVsbCA9IHRoaXMubGF5b3V0KCk7XG4gIH1cblxuICBpZiAoTGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPT09ICdkdXJpbmcnKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhICdkdXJpbmcnIGxheW91dCBhbmltYXRpb24uIExheW91dCBpcyBub3QgZmluaXNoZWQgeWV0LiBcbiAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlc2UgaW4gaW5kZXguanMgd2hlbiBsYXlvdXQgaXMgcmVhbGx5IGZpbmlzaGVkLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0xheW91dFN1Y2Nlc3NmdWxsKSB7XG4gICAgaWYgKCF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgICB0aGlzLmRvUG9zdExheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnRpbGluZ1Bvc3RMYXlvdXQpIHtcbiAgICB0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKTtcbiAgfVxuXG4gIHRoaXMuaXNMYXlvdXRGaW5pc2hlZCA9IHRydWU7XG5cbiAgcmV0dXJuIGlzTGF5b3V0U3VjY2Vzc2Z1bGw7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIG9wZXJhdGlvbnMgcmVxdWlyZWQgYWZ0ZXIgbGF5b3V0LlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuZG9Qb3N0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICAvL2Fzc2VydCAhaXNTdWJMYXlvdXQgOiBcIlNob3VsZCBub3QgYmUgY2FsbGVkIG9uIHN1Yi1sYXlvdXQhXCI7XG4gIC8vIFByb3BhZ2F0ZSBnZW9tZXRyaWMgY2hhbmdlcyB0byB2LWxldmVsIG9iamVjdHNcbiAgaWYgKCF0aGlzLmluY3JlbWVudGFsKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0oKTtcbiAgfVxuICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGdlb21ldHJ5IG9mIHRoZSB0YXJnZXQgZ3JhcGggYWNjb3JkaW5nIHRvXHJcbiAqIGNhbGN1bGF0ZWQgbGF5b3V0LlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUudXBkYXRlMiA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gdXBkYXRlIGJlbmQgcG9pbnRzXG4gIGlmICh0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQpIHtcbiAgICB0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpO1xuXG4gICAgLy8gcmVzZXQgYWxsIGVkZ2VzLCBzaW5jZSB0aGUgdG9wb2xvZ3kgaGFzIGNoYW5nZWRcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG4gIH1cblxuICAvLyBwZXJmb3JtIGVkZ2UsIG5vZGUgYW5kIHJvb3QgdXBkYXRlcyBpZiBsYXlvdXQgaXMgbm90IGNhbGxlZFxuICAvLyByZW1vdGVseVxuICBpZiAoIXRoaXMuaXNSZW1vdGVVc2UpIHtcbiAgICAvLyB1cGRhdGUgYWxsIGVkZ2VzXG4gICAgdmFyIGVkZ2U7XG4gICAgdmFyIGFsbEVkZ2VzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlID0gYWxsRWRnZXNbaV07XG4gICAgICAvLyAgICAgIHRoaXMudXBkYXRlKGVkZ2UpO1xuICAgIH1cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBub2Rlc1xuICAgIHZhciBub2RlO1xuICAgIHZhciBub2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIC8vICAgICAgdGhpcy51cGRhdGUobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHJvb3QgZ3JhcGhcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpO1xuICB9XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgdGhpcy51cGRhdGUyKCk7XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTE5vZGUpIHtcbiAgICB2YXIgbm9kZSA9IG9iajtcbiAgICBpZiAobm9kZS5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgIC8vIHNpbmNlIG5vZGUgaXMgY29tcG91bmQsIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBjaGlsZCBub2Rlc1xuICAgICAgdmFyIG5vZGVzID0gbm9kZS5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHVwZGF0ZShub2Rlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGwtbGV2ZWwgbm9kZSBpcyBhc3NvY2lhdGVkIHdpdGggYSB2LWxldmVsIGdyYXBoIG9iamVjdCxcbiAgICAvLyB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdi1sZXZlbCBub2RlIGltcGxlbWVudHMgdGhlXG4gICAgLy8gaW50ZXJmYWNlIFVwZGF0YWJsZS5cbiAgICBpZiAobm9kZS52R3JhcGhPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gY2FzdCB0byBVcGRhdGFibGUgd2l0aG91dCBhbnkgdHlwZSBjaGVja1xuICAgICAgdmFyIHZOb2RlID0gbm9kZS52R3JhcGhPYmplY3Q7XG5cbiAgICAgIC8vIGNhbGwgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIGludGVyZmFjZVxuICAgICAgdk5vZGUudXBkYXRlKG5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMRWRnZSkge1xuICAgIHZhciBlZGdlID0gb2JqO1xuICAgIC8vIGlmIHRoZSBsLWxldmVsIGVkZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdi1sZXZlbCBncmFwaCBvYmplY3QsXG4gICAgLy8gdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHYtbGV2ZWwgZWRnZSBpbXBsZW1lbnRzIHRoZVxuICAgIC8vIGludGVyZmFjZSBVcGRhdGFibGUuXG5cbiAgICBpZiAoZWRnZS52R3JhcGhPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gY2FzdCB0byBVcGRhdGFibGUgd2l0aG91dCBhbnkgdHlwZSBjaGVja1xuICAgICAgdmFyIHZFZGdlID0gZWRnZS52R3JhcGhPYmplY3Q7XG5cbiAgICAgIC8vIGNhbGwgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIGludGVyZmFjZVxuICAgICAgdkVkZ2UudXBkYXRlKGVkZ2UpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMR3JhcGgpIHtcbiAgICB2YXIgZ3JhcGggPSBvYmo7XG4gICAgLy8gaWYgdGhlIGwtbGV2ZWwgZ3JhcGggaXMgYXNzb2NpYXRlZCB3aXRoIGEgdi1sZXZlbCBncmFwaCBvYmplY3QsXG4gICAgLy8gdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHYtbGV2ZWwgb2JqZWN0IGltcGxlbWVudHMgdGhlXG4gICAgLy8gaW50ZXJmYWNlIFVwZGF0YWJsZS5cblxuICAgIGlmIChncmFwaC52R3JhcGhPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gY2FzdCB0byBVcGRhdGFibGUgd2l0aG91dCBhbnkgdHlwZSBjaGVja1xuICAgICAgdmFyIHZHcmFwaCA9IGdyYXBoLnZHcmFwaE9iamVjdDtcblxuICAgICAgLy8gY2FsbCB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgaW50ZXJmYWNlXG4gICAgICB2R3JhcGgudXBkYXRlKGdyYXBoKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBhbGwgbGF5b3V0IHBhcmFtZXRlcnMgdG8gZGVmYXVsdCB2YWx1ZXNcclxuICogZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgdGhpcy5sYXlvdXRRdWFsaXR5ID0gTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFk7XG4gICAgdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVDtcbiAgICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q7XG4gICAgdGhpcy5hbmltYXRpb25PbkxheW91dCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ7XG4gICAgdGhpcy5pbmNyZW1lbnRhbCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMO1xuICAgIHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7XG4gICAgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTO1xuICB9XG5cbiAgaWYgKHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0KSB7XG4gICAgdGhpcy5hbmltYXRpb25PbkxheW91dCA9IGZhbHNlO1xuICB9XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChuZXdMZWZ0VG9wKSB7XG4gIGlmIChuZXdMZWZ0VG9wID09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudHJhbnNmb3JtKG5ldyBQb2ludEQoMCwgMCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG9iamVjdCAoZnJvbSBFY2xpcHNlIHRvIGxheW91dCkuIFdoZW4gYW5cbiAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybSBpcyBhcHBsaWVkLCB3ZSBnZXQgdXBwZXItbGVmdCBjb29yZGluYXRlIG9mIHRoZVxuICAgIC8vIGRyYXdpbmcgb3IgdGhlIHJvb3QgZ3JhcGggYXQgZ2l2ZW4gaW5wdXQgY29vcmRpbmF0ZSAoc29tZSBtYXJnaW5zXG4gICAgLy8gYWxyZWFkeSBpbmNsdWRlZCBpbiBjYWxjdWxhdGlvbiBvZiBsZWZ0LXRvcCkuXG5cbiAgICB2YXIgdHJhbnMgPSBuZXcgVHJhbnNmb3JtKCk7XG4gICAgdmFyIGxlZnRUb3AgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO1xuXG4gICAgaWYgKGxlZnRUb3AgIT0gbnVsbCkge1xuICAgICAgdHJhbnMuc2V0V29ybGRPcmdYKG5ld0xlZnRUb3AueCk7XG4gICAgICB0cmFucy5zZXRXb3JsZE9yZ1kobmV3TGVmdFRvcC55KTtcblxuICAgICAgdHJhbnMuc2V0RGV2aWNlT3JnWChsZWZ0VG9wLngpO1xuICAgICAgdHJhbnMuc2V0RGV2aWNlT3JnWShsZWZ0VG9wLnkpO1xuXG4gICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldEFsbE5vZGVzKCk7XG4gICAgICB2YXIgbm9kZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIG5vZGUudHJhbnNmb3JtKHRyYW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkxheW91dC5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5ID0gZnVuY3Rpb24gKGdyYXBoKSB7XG5cbiAgaWYgKGdyYXBoID09IHVuZGVmaW5lZCkge1xuICAgIC8vYXNzZXJ0ICF0aGlzLmluY3JlbWVudGFsO1xuICAgIHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKTtcbiAgICB0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHModHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxOb2RlO1xuICAgIHZhciBjaGlsZEdyYXBoO1xuXG4gICAgdmFyIG5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsTm9kZSA9IG5vZGVzW2ldO1xuICAgICAgY2hpbGRHcmFwaCA9IGxOb2RlLmdldENoaWxkKCk7XG5cbiAgICAgIGlmIChjaGlsZEdyYXBoID09IG51bGwpIHtcbiAgICAgICAgbE5vZGUuc2NhdHRlcigpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZEdyYXBoLmdldE5vZGVzKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbE5vZGUuc2NhdHRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoY2hpbGRHcmFwaCk7XG4gICAgICAgIGxOb2RlLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHRyZWVzIHdoZXJlIGVhY2ggdHJlZSBpcyByZXByZXNlbnRlZCBhcyBhXHJcbiAqIGxpc3Qgb2YgbC1ub2Rlcy4gVGhlIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBzaXplIDAgd2hlbjpcclxuICogLSBUaGUgZ3JhcGggaXMgbm90IGZsYXQgb3JcclxuICogLSBPbmUgb2YgdGhlIGNvbXBvbmVudChzKSBvZiB0aGUgZ3JhcGggaXMgbm90IGEgdHJlZS5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmdldEZsYXRGb3Jlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBmbGF0Rm9yZXN0ID0gW107XG4gIHZhciBpc0ZvcmVzdCA9IHRydWU7XG5cbiAgLy8gUXVpY2sgcmVmZXJlbmNlIGZvciBhbGwgbm9kZXMgaW4gdGhlIGdyYXBoIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoXG4gIC8vIHRoaXMgbGF5b3V0LiBUaGUgbGlzdCBzaG91bGQgbm90IGJlIGNoYW5nZWQuXG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpO1xuXG4gIC8vIEZpcnN0IGJlIHN1cmUgdGhhdCB0aGUgZ3JhcGggaXMgZmxhdFxuICB2YXIgaXNGbGF0ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFsbE5vZGVzW2ldLmdldENoaWxkKCkgIT0gbnVsbCkge1xuICAgICAgaXNGbGF0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGVtcHR5IGZvcmVzdCBpZiB0aGUgZ3JhcGggaXMgbm90IGZsYXQuXG4gIGlmICghaXNGbGF0KSB7XG4gICAgcmV0dXJuIGZsYXRGb3Jlc3Q7XG4gIH1cblxuICAvLyBSdW4gQkZTIGZvciBlYWNoIGNvbXBvbmVudCBvZiB0aGUgZ3JhcGguXG5cbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciB0b0JlVmlzaXRlZCA9IFtdO1xuICB2YXIgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgdmFyIHVuUHJvY2Vzc2VkTm9kZXMgPSBbXTtcblxuICB1blByb2Nlc3NlZE5vZGVzID0gdW5Qcm9jZXNzZWROb2Rlcy5jb25jYXQoYWxsTm9kZXMpO1xuXG4gIC8vIEVhY2ggaXRlcmF0aW9uIG9mIHRoaXMgbG9vcCBmaW5kcyBhIGNvbXBvbmVudCBvZiB0aGUgZ3JhcGggYW5kXG4gIC8vIGRlY2lkZXMgd2hldGhlciBpdCBpcyBhIHRyZWUgb3Igbm90LiBJZiBpdCBpcyBhIHRyZWUsIGFkZHMgaXQgdG8gdGhlXG4gIC8vIGZvcmVzdCBhbmQgY29udGludWVkIHdpdGggdGhlIG5leHQgY29tcG9uZW50LlxuXG4gIHdoaWxlICh1blByb2Nlc3NlZE5vZGVzLmxlbmd0aCA+IDAgJiYgaXNGb3Jlc3QpIHtcbiAgICB0b0JlVmlzaXRlZC5wdXNoKHVuUHJvY2Vzc2VkTm9kZXNbMF0pO1xuXG4gICAgLy8gU3RhcnQgdGhlIEJGUy4gRWFjaCBpdGVyYXRpb24gb2YgdGhpcyBsb29wIHZpc2l0cyBhIG5vZGUgaW4gYVxuICAgIC8vIEJGUyBtYW5uZXIuXG4gICAgd2hpbGUgKHRvQmVWaXNpdGVkLmxlbmd0aCA+IDAgJiYgaXNGb3Jlc3QpIHtcbiAgICAgIC8vcG9vbCBvcGVyYXRpb25cbiAgICAgIHZhciBjdXJyZW50Tm9kZSA9IHRvQmVWaXNpdGVkWzBdO1xuICAgICAgdG9CZVZpc2l0ZWQuc3BsaWNlKDAsIDEpO1xuICAgICAgdmlzaXRlZC5hZGQoY3VycmVudE5vZGUpO1xuXG4gICAgICAvLyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoaXMgbm9kZVxuICAgICAgdmFyIG5laWdoYm9yRWRnZXMgPSBjdXJyZW50Tm9kZS5nZXRFZGdlcygpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5laWdoYm9yRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1cnJlbnROZWlnaGJvciA9IG5laWdoYm9yRWRnZXNbaV0uZ2V0T3RoZXJFbmQoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIC8vIElmIEJGUyBpcyBub3QgZ3Jvd2luZyBmcm9tIHRoaXMgbmVpZ2hib3IuXG4gICAgICAgIGlmIChwYXJlbnRzLmdldChjdXJyZW50Tm9kZSkgIT0gY3VycmVudE5laWdoYm9yKSB7XG4gICAgICAgICAgLy8gV2UgaGF2ZW4ndCBwcmV2aW91c2x5IHZpc2l0ZWQgdGhpcyBuZWlnaGJvci5cbiAgICAgICAgICBpZiAoIXZpc2l0ZWQuaGFzKGN1cnJlbnROZWlnaGJvcikpIHtcbiAgICAgICAgICAgIHRvQmVWaXNpdGVkLnB1c2goY3VycmVudE5laWdoYm9yKTtcbiAgICAgICAgICAgIHBhcmVudHMuc2V0KGN1cnJlbnROZWlnaGJvciwgY3VycmVudE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlIHByZXZpb3VzbHkgdmlzaXRlZCB0aGlzIG5laWdoYm9yIGFuZFxuICAgICAgICAgIC8vIHRoaXMgbmVpZ2hib3IgaXMgbm90IHBhcmVudCBvZiBjdXJyZW50Tm9kZSwgZ2l2ZW5cbiAgICAgICAgICAvLyBncmFwaCBjb250YWlucyBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB0cmVlLCBoZW5jZVxuICAgICAgICAgIC8vIGl0IGlzIG5vdCBhIGZvcmVzdC5cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaXNGb3Jlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgZ3JhcGggY29udGFpbnMgYSBjb21wb25lbnQgdGhhdCBpcyBub3QgYSB0cmVlLiBFbXB0eVxuICAgIC8vIHByZXZpb3VzbHkgZm91bmQgdHJlZXMuIFRoZSBtZXRob2Qgd2lsbCBlbmQuXG4gICAgaWYgKCFpc0ZvcmVzdCkge1xuICAgICAgZmxhdEZvcmVzdCA9IFtdO1xuICAgIH1cbiAgICAvLyBTYXZlIGN1cnJlbnRseSB2aXNpdGVkIG5vZGVzIGFzIGEgdHJlZSBpbiBvdXIgZm9yZXN0LiBSZXNldFxuICAgIC8vIHZpc2l0ZWQgYW5kIHBhcmVudHMgbGlzdHMuIENvbnRpbnVlIHdpdGggdGhlIG5leHQgY29tcG9uZW50IG9mXG4gICAgLy8gdGhlIGdyYXBoLCBpZiBhbnkuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB0ZW1wID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh2aXNpdGVkKSk7XG4gICAgICAgIGZsYXRGb3Jlc3QucHVzaCh0ZW1wKTtcbiAgICAgICAgLy9mbGF0Rm9yZXN0ID0gZmxhdEZvcmVzdC5jb25jYXQodGVtcCk7XG4gICAgICAgIC8vdW5Qcm9jZXNzZWROb2Rlcy5yZW1vdmVBbGwodmlzaXRlZCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVtcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRlbXBbaV07XG4gICAgICAgICAgdmFyIGluZGV4ID0gdW5Qcm9jZXNzZWROb2Rlcy5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdW5Qcm9jZXNzZWROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2aXNpdGVkID0gbmV3IFNldCgpO1xuICAgICAgICBwYXJlbnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZsYXRGb3Jlc3Q7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBkdW1teSBub2RlcyAoYW4gbC1sZXZlbCBub2RlIHdpdGggbWluaW1hbCBkaW1lbnNpb25zKVxyXG4gKiBmb3IgdGhlIGdpdmVuIGVkZ2UgKG9uZSBwZXIgYmVuZHBvaW50KS4gVGhlIGV4aXN0aW5nIGwtbGV2ZWwgc3RydWN0dXJlXHJcbiAqIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBkdW1teU5vZGVzID0gW107XG4gIHZhciBwcmV2ID0gZWRnZS5zb3VyY2U7XG5cbiAgdmFyIGdyYXBoID0gdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKGVkZ2Uuc291cmNlLCBlZGdlLnRhcmdldCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlLmJlbmRwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBjcmVhdGUgbmV3IGR1bW15IG5vZGVcbiAgICB2YXIgZHVtbXlOb2RlID0gdGhpcy5uZXdOb2RlKG51bGwpO1xuICAgIGR1bW15Tm9kZS5zZXRSZWN0KG5ldyBQb2ludCgwLCAwKSwgbmV3IERpbWVuc2lvbigxLCAxKSk7XG5cbiAgICBncmFwaC5hZGQoZHVtbXlOb2RlKTtcblxuICAgIC8vIGNyZWF0ZSBuZXcgZHVtbXkgZWRnZSBiZXR3ZWVuIHByZXYgYW5kIGR1bW15IG5vZGVcbiAgICB2YXIgZHVtbXlFZGdlID0gdGhpcy5uZXdFZGdlKG51bGwpO1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChkdW1teUVkZ2UsIHByZXYsIGR1bW15Tm9kZSk7XG5cbiAgICBkdW1teU5vZGVzLmFkZChkdW1teU5vZGUpO1xuICAgIHByZXYgPSBkdW1teU5vZGU7XG4gIH1cblxuICB2YXIgZHVtbXlFZGdlID0gdGhpcy5uZXdFZGdlKG51bGwpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5hZGQoZHVtbXlFZGdlLCBwcmV2LCBlZGdlLnRhcmdldCk7XG5cbiAgdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChlZGdlLCBkdW1teU5vZGVzKTtcblxuICAvLyByZW1vdmUgcmVhbCBlZGdlIGZyb20gZ3JhcGggbWFuYWdlciBpZiBpdCBpcyBpbnRlci1ncmFwaFxuICBpZiAoZWRnZS5pc0ludGVyR3JhcGgoKSkge1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShlZGdlKTtcbiAgfVxuICAvLyBlbHNlLCByZW1vdmUgdGhlIGVkZ2UgZnJvbSB0aGUgY3VycmVudCBncmFwaFxuICBlbHNlIHtcbiAgICAgIGdyYXBoLnJlbW92ZShlZGdlKTtcbiAgICB9XG5cbiAgcmV0dXJuIGR1bW15Tm9kZXM7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBiZW5kcG9pbnRzIGZvciBlZGdlcyBmcm9tIHRoZSBkdW1teSBub2Rlc1xyXG4gKiBhdCBsLWxldmVsLlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgZWRnZXMgPSBlZGdlcy5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7XG4gIGVkZ2VzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KGVkZ2VzKTtcblxuICBmb3IgKHZhciBrID0gMDsgayA8IGVkZ2VzLmxlbmd0aDsgaysrKSB7XG4gICAgdmFyIGxFZGdlID0gZWRnZXNba107XG5cbiAgICBpZiAobEVkZ2UuYmVuZHBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGF0aCA9IHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5nZXQobEVkZ2UpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGR1bW15Tm9kZSA9IHBhdGhbaV07XG4gICAgICAgIHZhciBwID0gbmV3IFBvaW50RChkdW1teU5vZGUuZ2V0Q2VudGVyWCgpLCBkdW1teU5vZGUuZ2V0Q2VudGVyWSgpKTtcblxuICAgICAgICAvLyB1cGRhdGUgYmVuZHBvaW50J3MgbG9jYXRpb24gYWNjb3JkaW5nIHRvIGR1bW15IG5vZGVcbiAgICAgICAgdmFyIGVicCA9IGxFZGdlLmJlbmRwb2ludHMuZ2V0KGkpO1xuICAgICAgICBlYnAueCA9IHAueDtcbiAgICAgICAgZWJwLnkgPSBwLnk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBkdW1teSBub2RlLCBkdW1teSBlZGdlcyBpbmNpZGVudCB3aXRoIHRoaXNcbiAgICAgICAgLy8gZHVtbXkgbm9kZSBpcyBhbHNvIHJlbW92ZWQgKHdpdGhpbiB0aGUgcmVtb3ZlIG1ldGhvZClcbiAgICAgICAgZHVtbXlOb2RlLmdldE93bmVyKCkucmVtb3ZlKGR1bW15Tm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0aGUgcmVhbCBlZGdlIHRvIGdyYXBoXG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5hZGQobEVkZ2UsIGxFZGdlLnNvdXJjZSwgbEVkZ2UudGFyZ2V0KTtcbiAgICB9XG4gIH1cbn07XG5cbkxheW91dC50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoc2xpZGVyVmFsdWUsIGRlZmF1bHRWYWx1ZSwgbWluRGl2LCBtYXhNdWwpIHtcbiAgaWYgKG1pbkRpdiAhPSB1bmRlZmluZWQgJiYgbWF4TXVsICE9IHVuZGVmaW5lZCkge1xuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChzbGlkZXJWYWx1ZSA8PSA1MCkge1xuICAgICAgdmFyIG1pblZhbHVlID0gZGVmYXVsdFZhbHVlIC8gbWluRGl2O1xuICAgICAgdmFsdWUgLT0gKGRlZmF1bHRWYWx1ZSAtIG1pblZhbHVlKSAvIDUwICogKDUwIC0gc2xpZGVyVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF4VmFsdWUgPSBkZWZhdWx0VmFsdWUgKiBtYXhNdWw7XG4gICAgICB2YWx1ZSArPSAobWF4VmFsdWUgLSBkZWZhdWx0VmFsdWUpIC8gNTAgKiAoc2xpZGVyVmFsdWUgLSA1MCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBhLCBiO1xuXG4gICAgaWYgKHNsaWRlclZhbHVlIDw9IDUwKSB7XG4gICAgICBhID0gOS4wICogZGVmYXVsdFZhbHVlIC8gNTAwLjA7XG4gICAgICBiID0gZGVmYXVsdFZhbHVlIC8gMTAuMDtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IDkuMCAqIGRlZmF1bHRWYWx1ZSAvIDUwLjA7XG4gICAgICBiID0gLTggKiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGEgKiBzbGlkZXJWYWx1ZSArIGI7XG4gIH1cbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBmaW5kcyBhbmQgcmV0dXJucyB0aGUgY2VudGVyIG9mIHRoZSBnaXZlbiBub2RlcywgYXNzdW1pbmdcclxuICogdGhhdCB0aGUgZ2l2ZW4gbm9kZXMgZm9ybSBhIHRyZWUgaW4gdGhlbXNlbHZlcy5cclxuICovXG5MYXlvdXQuZmluZENlbnRlck9mVHJlZSA9IGZ1bmN0aW9uIChub2Rlcykge1xuICB2YXIgbGlzdCA9IFtdO1xuICBsaXN0ID0gbGlzdC5jb25jYXQobm9kZXMpO1xuXG4gIHZhciByZW1vdmVkTm9kZXMgPSBbXTtcbiAgdmFyIHJlbWFpbmluZ0RlZ3JlZXMgPSBuZXcgTWFwKCk7XG4gIHZhciBmb3VuZENlbnRlciA9IGZhbHNlO1xuICB2YXIgY2VudGVyTm9kZSA9IG51bGw7XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09IDEgfHwgbGlzdC5sZW5ndGggPT0gMikge1xuICAgIGZvdW5kQ2VudGVyID0gdHJ1ZTtcbiAgICBjZW50ZXJOb2RlID0gbGlzdFswXTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbGlzdFtpXTtcbiAgICB2YXIgZGVncmVlID0gbm9kZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTtcbiAgICByZW1haW5pbmdEZWdyZWVzLnNldChub2RlLCBub2RlLmdldE5laWdoYm9yc0xpc3QoKS5zaXplKTtcblxuICAgIGlmIChkZWdyZWUgPT0gMSkge1xuICAgICAgcmVtb3ZlZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRlbXBMaXN0ID0gW107XG4gIHRlbXBMaXN0ID0gdGVtcExpc3QuY29uY2F0KHJlbW92ZWROb2Rlcyk7XG5cbiAgd2hpbGUgKCFmb3VuZENlbnRlcikge1xuICAgIHZhciB0ZW1wTGlzdDIgPSBbXTtcbiAgICB0ZW1wTGlzdDIgPSB0ZW1wTGlzdDIuY29uY2F0KHRlbXBMaXN0KTtcbiAgICB0ZW1wTGlzdCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGxpc3RbaV07XG5cbiAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihub2RlKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5laWdoYm91cnMgPSBub2RlLmdldE5laWdoYm9yc0xpc3QoKTtcblxuICAgICAgbmVpZ2hib3Vycy5mb3JFYWNoKGZ1bmN0aW9uIChuZWlnaGJvdXIpIHtcbiAgICAgICAgaWYgKHJlbW92ZWROb2Rlcy5pbmRleE9mKG5laWdoYm91cikgPCAwKSB7XG4gICAgICAgICAgdmFyIG90aGVyRGVncmVlID0gcmVtYWluaW5nRGVncmVlcy5nZXQobmVpZ2hib3VyKTtcbiAgICAgICAgICB2YXIgbmV3RGVncmVlID0gb3RoZXJEZWdyZWUgLSAxO1xuXG4gICAgICAgICAgaWYgKG5ld0RlZ3JlZSA9PSAxKSB7XG4gICAgICAgICAgICB0ZW1wTGlzdC5wdXNoKG5laWdoYm91cik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtYWluaW5nRGVncmVlcy5zZXQobmVpZ2hib3VyLCBuZXdEZWdyZWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVkTm9kZXMgPSByZW1vdmVkTm9kZXMuY29uY2F0KHRlbXBMaXN0KTtcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAxIHx8IGxpc3QubGVuZ3RoID09IDIpIHtcbiAgICAgIGZvdW5kQ2VudGVyID0gdHJ1ZTtcbiAgICAgIGNlbnRlck5vZGUgPSBsaXN0WzBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjZW50ZXJOb2RlO1xufTtcblxuLyoqXHJcbiAqIER1cmluZyB0aGUgY29hcnNlbmluZyBwcm9jZXNzLCB0aGlzIGxheW91dCBtYXkgYmUgcmVmZXJlbmNlZCBieSB0d28gZ3JhcGggbWFuYWdlcnNcclxuICogdGhpcyBzZXR0ZXIgZnVuY3Rpb24gZ3JhbnRzIGFjY2VzcyB0byBjaGFuZ2UgdGhlIGN1cnJlbnRseSBiZWluZyB1c2VkIGdyYXBoIG1hbmFnZXJcclxuICovXG5MYXlvdXQucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlciA9IGZ1bmN0aW9uIChnbSkge1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IGdtO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXlvdXQ7XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gUmFuZG9tU2VlZCgpIHt9XG4vLyBhZGFwdGVkIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xOTMwMzcyNVxuUmFuZG9tU2VlZC5zZWVkID0gMTtcblJhbmRvbVNlZWQueCA9IDA7XG5cblJhbmRvbVNlZWQubmV4dERvdWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgUmFuZG9tU2VlZC54ID0gTWF0aC5zaW4oUmFuZG9tU2VlZC5zZWVkKyspICogMTAwMDA7XG4gIHJldHVybiBSYW5kb21TZWVkLnggLSBNYXRoLmZsb29yKFJhbmRvbVNlZWQueCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVNlZWQ7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybSh4LCB5KSB7XG4gIHRoaXMubHdvcmxkT3JnWCA9IDAuMDtcbiAgdGhpcy5sd29ybGRPcmdZID0gMC4wO1xuICB0aGlzLmxkZXZpY2VPcmdYID0gMC4wO1xuICB0aGlzLmxkZXZpY2VPcmdZID0gMC4wO1xuICB0aGlzLmx3b3JsZEV4dFggPSAxLjA7XG4gIHRoaXMubHdvcmxkRXh0WSA9IDEuMDtcbiAgdGhpcy5sZGV2aWNlRXh0WCA9IDEuMDtcbiAgdGhpcy5sZGV2aWNlRXh0WSA9IDEuMDtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZE9yZ1g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkT3JnWCA9IGZ1bmN0aW9uICh3b3gpIHtcbiAgdGhpcy5sd29ybGRPcmdYID0gd294O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1kgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZE9yZ1k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkT3JnWSA9IGZ1bmN0aW9uICh3b3kpIHtcbiAgdGhpcy5sd29ybGRPcmdZID0gd295O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZEV4dFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZEV4dFg7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkRXh0WCA9IGZ1bmN0aW9uICh3ZXgpIHtcbiAgdGhpcy5sd29ybGRFeHRYID0gd2V4O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZEV4dFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZEV4dFk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkRXh0WSA9IGZ1bmN0aW9uICh3ZXkpIHtcbiAgdGhpcy5sd29ybGRFeHRZID0gd2V5O1xufTtcblxuLyogRGV2aWNlIHJlbGF0ZWQgKi9cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlT3JnWDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWCA9IGZ1bmN0aW9uIChkb3gpIHtcbiAgdGhpcy5sZGV2aWNlT3JnWCA9IGRveDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZU9yZ1k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZU9yZ1kgPSBmdW5jdGlvbiAoZG95KSB7XG4gIHRoaXMubGRldmljZU9yZ1kgPSBkb3k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldERldmljZUV4dFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxkZXZpY2VFeHRYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYID0gZnVuY3Rpb24gKGRleCkge1xuICB0aGlzLmxkZXZpY2VFeHRYID0gZGV4O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlRXh0WTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WSA9IGZ1bmN0aW9uIChkZXkpIHtcbiAgdGhpcy5sZGV2aWNlRXh0WSA9IGRleTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudHJhbnNmb3JtWCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciB4RGV2aWNlID0gMC4wO1xuICB2YXIgd29ybGRFeHRYID0gdGhpcy5sd29ybGRFeHRYO1xuICBpZiAod29ybGRFeHRYICE9IDAuMCkge1xuICAgIHhEZXZpY2UgPSB0aGlzLmxkZXZpY2VPcmdYICsgKHggLSB0aGlzLmx3b3JsZE9yZ1gpICogdGhpcy5sZGV2aWNlRXh0WCAvIHdvcmxkRXh0WDtcbiAgfVxuXG4gIHJldHVybiB4RGV2aWNlO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS50cmFuc2Zvcm1ZID0gZnVuY3Rpb24gKHkpIHtcbiAgdmFyIHlEZXZpY2UgPSAwLjA7XG4gIHZhciB3b3JsZEV4dFkgPSB0aGlzLmx3b3JsZEV4dFk7XG4gIGlmICh3b3JsZEV4dFkgIT0gMC4wKSB7XG4gICAgeURldmljZSA9IHRoaXMubGRldmljZU9yZ1kgKyAoeSAtIHRoaXMubHdvcmxkT3JnWSkgKiB0aGlzLmxkZXZpY2VFeHRZIC8gd29ybGRFeHRZO1xuICB9XG5cbiAgcmV0dXJuIHlEZXZpY2U7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIHhXb3JsZCA9IDAuMDtcbiAgdmFyIGRldmljZUV4dFggPSB0aGlzLmxkZXZpY2VFeHRYO1xuICBpZiAoZGV2aWNlRXh0WCAhPSAwLjApIHtcbiAgICB4V29ybGQgPSB0aGlzLmx3b3JsZE9yZ1ggKyAoeCAtIHRoaXMubGRldmljZU9yZ1gpICogdGhpcy5sd29ybGRFeHRYIC8gZGV2aWNlRXh0WDtcbiAgfVxuXG4gIHJldHVybiB4V29ybGQ7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZID0gZnVuY3Rpb24gKHkpIHtcbiAgdmFyIHlXb3JsZCA9IDAuMDtcbiAgdmFyIGRldmljZUV4dFkgPSB0aGlzLmxkZXZpY2VFeHRZO1xuICBpZiAoZGV2aWNlRXh0WSAhPSAwLjApIHtcbiAgICB5V29ybGQgPSB0aGlzLmx3b3JsZE9yZ1kgKyAoeSAtIHRoaXMubGRldmljZU9yZ1kpICogdGhpcy5sd29ybGRFeHRZIC8gZGV2aWNlRXh0WTtcbiAgfVxuICByZXR1cm4geVdvcmxkO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQgPSBmdW5jdGlvbiAoaW5Qb2ludCkge1xuICB2YXIgb3V0UG9pbnQgPSBuZXcgUG9pbnREKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoaW5Qb2ludC54KSwgdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShpblBvaW50LnkpKTtcbiAgcmV0dXJuIG91dFBvaW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbnZhciBMYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBJR2VvbWV0cnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIElNYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuZnVuY3Rpb24gRkRMYXlvdXQoKSB7XG4gIExheW91dC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OO1xuICB0aGlzLmdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSDtcbiAgdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSDtcbiAgdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SO1xuICB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlID0gMy4wICogRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDEwMDtcbiAgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTDtcbiAgdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw7XG4gIHRoaXMudG90YWxEaXNwbGFjZW1lbnQgPSAwLjA7XG4gIHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQgPSAwLjA7XG4gIHRoaXMubWF4SXRlcmF0aW9ucyA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9JVEVSQVRJT05TO1xufVxuXG5GRExheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExheW91dC5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExheW91dCkge1xuICBGRExheW91dFtwcm9wXSA9IExheW91dFtwcm9wXTtcbn1cblxuRkRMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICBMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcywgYXJndW1lbnRzKTtcblxuICB0aGlzLnRvdGFsSXRlcmF0aW9ucyA9IDA7XG4gIHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID0gMDtcblxuICB0aGlzLnVzZUZSR3JpZFZhcmlhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT047XG5cbiAgdGhpcy5ncmlkID0gW107XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlO1xuICB2YXIgb3JpZ2luYWxJZGVhbExlbmd0aDtcbiAgdmFyIGxjYURlcHRoO1xuICB2YXIgc291cmNlO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgc2l6ZU9mU291cmNlSW5MY2E7XG4gIHZhciBzaXplT2ZUYXJnZXRJbkxjYTtcblxuICB2YXIgYWxsRWRnZXMgPSB0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBlZGdlID0gYWxsRWRnZXNbaV07XG5cbiAgICBvcmlnaW5hbElkZWFsTGVuZ3RoID0gZWRnZS5pZGVhbExlbmd0aDtcblxuICAgIGlmIChlZGdlLmlzSW50ZXJHcmFwaCkge1xuICAgICAgc291cmNlID0gZWRnZS5nZXRTb3VyY2UoKTtcbiAgICAgIHRhcmdldCA9IGVkZ2UuZ2V0VGFyZ2V0KCk7XG5cbiAgICAgIHNpemVPZlNvdXJjZUluTGNhID0gZWRnZS5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKTtcbiAgICAgIHNpemVPZlRhcmdldEluTGNhID0gZWRnZS5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKTtcblxuICAgICAgaWYgKHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbikge1xuICAgICAgICBlZGdlLmlkZWFsTGVuZ3RoICs9IHNpemVPZlNvdXJjZUluTGNhICsgc2l6ZU9mVGFyZ2V0SW5MY2EgLSAyICogTGF5b3V0Q29uc3RhbnRzLlNJTVBMRV9OT0RFX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIGxjYURlcHRoID0gZWRnZS5nZXRMY2EoKS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKTtcblxuICAgICAgZWRnZS5pZGVhbExlbmd0aCArPSBvcmlnaW5hbElkZWFsTGVuZ3RoICogRkRMYXlvdXRDb25zdGFudHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiAqIChzb3VyY2UuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkgKyB0YXJnZXQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkgLSAyICogbGNhRGVwdGgpO1xuICAgIH1cbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlciA9IGZ1bmN0aW9uICgpIHtcblxuICB2YXIgcyA9IHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7XG4gIGlmICh0aGlzLmluY3JlbWVudGFsKSB7XG4gICAgaWYgKHMgPiBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIHtcbiAgICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IE1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciAqIEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsIHRoaXMuY29vbGluZ0ZhY3RvciAtIChzIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAvIChGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpICogdGhpcy5jb29saW5nRmFjdG9yICogKDEgLSBGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk7XG4gICAgfVxuICAgIHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudCA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocyA+IEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkge1xuICAgICAgdGhpcy5jb29saW5nRmFjdG9yID0gTWF0aC5tYXgoRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwgMS4wIC0gKHMgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIC8gKEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVCAtIEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkgKiAoMSAtIEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb29saW5nRmFjdG9yID0gMS4wO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yID0gdGhpcy5jb29saW5nRmFjdG9yO1xuICAgIHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudCA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVDtcbiAgfVxuXG4gIHRoaXMubWF4SXRlcmF0aW9ucyA9IE1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGggKiA1LCB0aGlzLm1heEl0ZXJhdGlvbnMpO1xuXG4gIC8vIFJlYXNzaWduIHRoaXMgYXR0cmlidXRlIGJ5IHVzaW5nIG5ldyBjb25zdGFudCB2YWx1ZVxuICB0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUgPSAzLjAgKiBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC8gMTAwO1xuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkID0gdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlICogdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDtcblxuICB0aGlzLnJlcHVsc2lvblJhbmdlID0gdGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKTtcbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbEVkZ2VzID0gdGhpcy5nZXRBbGxFZGdlcygpO1xuICB2YXIgZWRnZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIGVkZ2UgPSBsRWRnZXNbaV07XG5cbiAgICB0aGlzLmNhbGNTcHJpbmdGb3JjZShlZGdlLCBlZGdlLmlkZWFsTGVuZ3RoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBncmlkVXBkYXRlQWxsb3dlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgdmFyIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBpLCBqO1xuICB2YXIgbm9kZUEsIG5vZGVCO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgcHJvY2Vzc2VkTm9kZVNldDtcblxuICBpZiAodGhpcy51c2VGUkdyaWRWYXJpYW50KSB7XG4gICAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCkge1xuICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc2VkTm9kZVNldCA9IG5ldyBTZXQoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gZWFjaCBub2RlcyBhbmQgaXRzIHN1cnJvdW5kaW5nXG4gICAgZm9yIChpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZUEgPSBsTm9kZXNbaV07XG4gICAgICB0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShub2RlQSwgcHJvY2Vzc2VkTm9kZVNldCwgZ3JpZFVwZGF0ZUFsbG93ZWQsIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUpO1xuICAgICAgcHJvY2Vzc2VkTm9kZVNldC5hZGQobm9kZUEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlQSA9IGxOb2Rlc1tpXTtcblxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZUIgPSBsTm9kZXNbal07XG5cbiAgICAgICAgLy8gSWYgYm90aCBub2RlcyBhcmUgbm90IG1lbWJlcnMgb2YgdGhlIHNhbWUgZ3JhcGgsIHNraXAuXG4gICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKG5vZGVBLCBub2RlQik7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2Uobm9kZSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5tb3ZlTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsTm9kZXMgPSB0aGlzLmdldEFsbE5vZGVzKCk7XG4gIHZhciBub2RlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLm1vdmUoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZSA9IGZ1bmN0aW9uIChlZGdlLCBpZGVhbExlbmd0aCkge1xuICB2YXIgc291cmNlTm9kZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gIHZhciB0YXJnZXROb2RlID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICB2YXIgbGVuZ3RoO1xuICB2YXIgc3ByaW5nRm9yY2U7XG4gIHZhciBzcHJpbmdGb3JjZVg7XG4gIHZhciBzcHJpbmdGb3JjZVk7XG5cbiAgLy8gVXBkYXRlIGVkZ2UgbGVuZ3RoXG4gIGlmICh0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzICYmIHNvdXJjZU5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsICYmIHRhcmdldE5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgZWRnZS51cGRhdGVMZW5ndGhTaW1wbGUoKTtcbiAgfSBlbHNlIHtcbiAgICBlZGdlLnVwZGF0ZUxlbmd0aCgpO1xuXG4gICAgaWYgKGVkZ2UuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbGVuZ3RoID0gZWRnZS5nZXRMZW5ndGgoKTtcblxuICBpZiAobGVuZ3RoID09IDApIHJldHVybjtcblxuICAvLyBDYWxjdWxhdGUgc3ByaW5nIGZvcmNlc1xuICBzcHJpbmdGb3JjZSA9IGVkZ2UuZWRnZUVsYXN0aWNpdHkgKiAobGVuZ3RoIC0gaWRlYWxMZW5ndGgpO1xuXG4gIC8vIFByb2plY3QgZm9yY2Ugb250byB4IGFuZCB5IGF4ZXNcbiAgc3ByaW5nRm9yY2VYID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhYIC8gbGVuZ3RoKTtcbiAgc3ByaW5nRm9yY2VZID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhZIC8gbGVuZ3RoKTtcblxuICAvLyBBcHBseSBmb3JjZXMgb24gdGhlIGVuZCBub2Rlc1xuICBzb3VyY2VOb2RlLnNwcmluZ0ZvcmNlWCArPSBzcHJpbmdGb3JjZVg7XG4gIHNvdXJjZU5vZGUuc3ByaW5nRm9yY2VZICs9IHNwcmluZ0ZvcmNlWTtcbiAgdGFyZ2V0Tm9kZS5zcHJpbmdGb3JjZVggLT0gc3ByaW5nRm9yY2VYO1xuICB0YXJnZXROb2RlLnNwcmluZ0ZvcmNlWSAtPSBzcHJpbmdGb3JjZVk7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICB2YXIgcmVjdEEgPSBub2RlQS5nZXRSZWN0KCk7XG4gIHZhciByZWN0QiA9IG5vZGVCLmdldFJlY3QoKTtcbiAgdmFyIG92ZXJsYXBBbW91bnQgPSBuZXcgQXJyYXkoMik7XG4gIHZhciBjbGlwUG9pbnRzID0gbmV3IEFycmF5KDQpO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgZGlzdGFuY2VTcXVhcmVkO1xuICB2YXIgZGlzdGFuY2U7XG4gIHZhciByZXB1bHNpb25Gb3JjZTtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWDtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWTtcblxuICBpZiAocmVjdEEuaW50ZXJzZWN0cyhyZWN0QikpIC8vIHR3byBub2RlcyBvdmVybGFwXG4gICAge1xuICAgICAgLy8gY2FsY3VsYXRlIHNlcGFyYXRpb24gYW1vdW50IGluIHggYW5kIHkgZGlyZWN0aW9uc1xuICAgICAgSUdlb21ldHJ5LmNhbGNTZXBhcmF0aW9uQW1vdW50KHJlY3RBLCByZWN0Qiwgb3ZlcmxhcEFtb3VudCwgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDIuMCk7XG5cbiAgICAgIHJlcHVsc2lvbkZvcmNlWCA9IDIgKiBvdmVybGFwQW1vdW50WzBdO1xuICAgICAgcmVwdWxzaW9uRm9yY2VZID0gMiAqIG92ZXJsYXBBbW91bnRbMV07XG5cbiAgICAgIHZhciBjaGlsZHJlbkNvbnN0YW50ID0gbm9kZUEubm9PZkNoaWxkcmVuICogbm9kZUIubm9PZkNoaWxkcmVuIC8gKG5vZGVBLm5vT2ZDaGlsZHJlbiArIG5vZGVCLm5vT2ZDaGlsZHJlbik7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzXG4gICAgICBub2RlQS5yZXB1bHNpb25Gb3JjZVggLT0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSBjaGlsZHJlbkNvbnN0YW50ICogcmVwdWxzaW9uRm9yY2VZO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VYICs9IGNoaWxkcmVuQ29uc3RhbnQgKiByZXB1bHNpb25Gb3JjZVg7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVkgKz0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9IGVsc2UgLy8gbm8gb3ZlcmxhcFxuICAgIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBkaXN0YW5jZVxuXG4gICAgICBpZiAodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyAmJiBub2RlQS5nZXRDaGlsZCgpID09IG51bGwgJiYgbm9kZUIuZ2V0Q2hpbGQoKSA9PSBudWxsKSAvLyBzaW1wbHkgYmFzZSByZXB1bHNpb24gb24gZGlzdGFuY2Ugb2Ygbm9kZSBjZW50ZXJzXG4gICAgICAgIHtcbiAgICAgICAgICBkaXN0YW5jZVggPSByZWN0Qi5nZXRDZW50ZXJYKCkgLSByZWN0QS5nZXRDZW50ZXJYKCk7XG4gICAgICAgICAgZGlzdGFuY2VZID0gcmVjdEIuZ2V0Q2VudGVyWSgpIC0gcmVjdEEuZ2V0Q2VudGVyWSgpO1xuICAgICAgICB9IGVsc2UgLy8gdXNlIGNsaXBwaW5nIHBvaW50c1xuICAgICAgICB7XG4gICAgICAgICAgSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbihyZWN0QSwgcmVjdEIsIGNsaXBQb2ludHMpO1xuXG4gICAgICAgICAgZGlzdGFuY2VYID0gY2xpcFBvaW50c1syXSAtIGNsaXBQb2ludHNbMF07XG4gICAgICAgICAgZGlzdGFuY2VZID0gY2xpcFBvaW50c1szXSAtIGNsaXBQb2ludHNbMV07XG4gICAgICAgIH1cblxuICAgICAgLy8gTm8gcmVwdWxzaW9uIHJhbmdlLiBGUiBncmlkIHZhcmlhbnQgc2hvdWxkIHRha2UgY2FyZSBvZiB0aGlzLlxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWCkgPCBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QpIHtcbiAgICAgICAgZGlzdGFuY2VYID0gSU1hdGguc2lnbihkaXN0YW5jZVgpICogRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VZKSA8IEZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVCkge1xuICAgICAgICBkaXN0YW5jZVkgPSBJTWF0aC5zaWduKGRpc3RhbmNlWSkgKiBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1Q7XG4gICAgICB9XG5cbiAgICAgIGRpc3RhbmNlU3F1YXJlZCA9IGRpc3RhbmNlWCAqIGRpc3RhbmNlWCArIGRpc3RhbmNlWSAqIGRpc3RhbmNlWTtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpc3RhbmNlU3F1YXJlZCk7XG5cbiAgICAgIC8vIEhlcmUgd2UgdXNlIGhhbGYgb2YgdGhlIG5vZGVzJyByZXB1bHNpb24gdmFsdWVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICByZXB1bHNpb25Gb3JjZSA9IChub2RlQS5ub2RlUmVwdWxzaW9uIC8gMiArIG5vZGVCLm5vZGVSZXB1bHNpb24gLyAyKSAqIG5vZGVBLm5vT2ZDaGlsZHJlbiAqIG5vZGVCLm5vT2ZDaGlsZHJlbiAvIGRpc3RhbmNlU3F1YXJlZDtcblxuICAgICAgLy8gUHJvamVjdCBmb3JjZSBvbnRvIHggYW5kIHkgYXhlc1xuICAgICAgcmVwdWxzaW9uRm9yY2VYID0gcmVwdWxzaW9uRm9yY2UgKiBkaXN0YW5jZVggLyBkaXN0YW5jZTtcbiAgICAgIHJlcHVsc2lvbkZvcmNlWSA9IHJlcHVsc2lvbkZvcmNlICogZGlzdGFuY2VZIC8gZGlzdGFuY2U7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzICAgIFxuICAgICAgbm9kZUEucmVwdWxzaW9uRm9yY2VYIC09IHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSByZXB1bHNpb25Gb3JjZVk7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVggKz0gcmVwdWxzaW9uRm9yY2VYO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VZICs9IHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBvd25lckdyYXBoO1xuICB2YXIgb3duZXJDZW50ZXJYO1xuICB2YXIgb3duZXJDZW50ZXJZO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgYWJzRGlzdGFuY2VYO1xuICB2YXIgYWJzRGlzdGFuY2VZO1xuICB2YXIgZXN0aW1hdGVkU2l6ZTtcbiAgb3duZXJHcmFwaCA9IG5vZGUuZ2V0T3duZXIoKTtcblxuICBvd25lckNlbnRlclggPSAob3duZXJHcmFwaC5nZXRSaWdodCgpICsgb3duZXJHcmFwaC5nZXRMZWZ0KCkpIC8gMjtcbiAgb3duZXJDZW50ZXJZID0gKG93bmVyR3JhcGguZ2V0VG9wKCkgKyBvd25lckdyYXBoLmdldEJvdHRvbSgpKSAvIDI7XG4gIGRpc3RhbmNlWCA9IG5vZGUuZ2V0Q2VudGVyWCgpIC0gb3duZXJDZW50ZXJYO1xuICBkaXN0YW5jZVkgPSBub2RlLmdldENlbnRlclkoKSAtIG93bmVyQ2VudGVyWTtcbiAgYWJzRGlzdGFuY2VYID0gTWF0aC5hYnMoZGlzdGFuY2VYKSArIG5vZGUuZ2V0V2lkdGgoKSAvIDI7XG4gIGFic0Rpc3RhbmNlWSA9IE1hdGguYWJzKGRpc3RhbmNlWSkgKyBub2RlLmdldEhlaWdodCgpIC8gMjtcblxuICBpZiAobm9kZS5nZXRPd25lcigpID09IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSkgLy8gaW4gdGhlIHJvb3QgZ3JhcGhcbiAgICB7XG4gICAgICBlc3RpbWF0ZWRTaXplID0gb3duZXJHcmFwaC5nZXRFc3RpbWF0ZWRTaXplKCkgKiB0aGlzLmdyYXZpdHlSYW5nZUZhY3RvcjtcblxuICAgICAgaWYgKGFic0Rpc3RhbmNlWCA+IGVzdGltYXRlZFNpemUgfHwgYWJzRGlzdGFuY2VZID4gZXN0aW1hdGVkU2l6ZSkge1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VYID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VYO1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VZID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VZO1xuICAgICAgfVxuICAgIH0gZWxzZSAvLyBpbnNpZGUgYSBjb21wb3VuZFxuICAgIHtcbiAgICAgIGVzdGltYXRlZFNpemUgPSBvd25lckdyYXBoLmdldEVzdGltYXRlZFNpemUoKSAqIHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I7XG5cbiAgICAgIGlmIChhYnNEaXN0YW5jZVggPiBlc3RpbWF0ZWRTaXplIHx8IGFic0Rpc3RhbmNlWSA+IGVzdGltYXRlZFNpemUpIHtcbiAgICAgICAgbm9kZS5ncmF2aXRhdGlvbkZvcmNlWCA9IC10aGlzLmdyYXZpdHlDb25zdGFudCAqIGRpc3RhbmNlWCAqIHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ7XG4gICAgICAgIG5vZGUuZ3Jhdml0YXRpb25Gb3JjZVkgPSAtdGhpcy5ncmF2aXR5Q29uc3RhbnQgKiBkaXN0YW5jZVkgKiB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50O1xuICAgICAgfVxuICAgIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pc0NvbnZlcmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNvbnZlcmdlZDtcbiAgdmFyIG9zY2lsYXRpbmcgPSBmYWxzZTtcblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgPiB0aGlzLm1heEl0ZXJhdGlvbnMgLyAzKSB7XG4gICAgb3NjaWxhdGluZyA9IE1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQgLSB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KSA8IDI7XG4gIH1cblxuICBjb252ZXJnZWQgPSB0aGlzLnRvdGFsRGlzcGxhY2VtZW50IDwgdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZDtcblxuICB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50ID0gdGhpcy50b3RhbERpc3BsYWNlbWVudDtcblxuICByZXR1cm4gY29udmVyZ2VkIHx8IG9zY2lsYXRpbmc7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ICYmICF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgaWYgKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID09IHRoaXMuYW5pbWF0aW9uUGVyaW9kKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrO1xuICAgIH1cbiAgfVxufTtcblxuLy9UaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gKHdlaWdodCkgZm9yIGFsbCBub2Rlc1xuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICBub2RlLm5vT2ZDaGlsZHJlbiA9IG5vZGUuZ2V0Tm9PZkNoaWxkcmVuKCk7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBGUi1HcmlkIFZhcmlhbnQgUmVwdWxzaW9uIEZvcmNlIENhbGN1bGF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyaWQgPSBmdW5jdGlvbiAoZ3JhcGgpIHtcblxuICB2YXIgc2l6ZVggPSAwO1xuICB2YXIgc2l6ZVkgPSAwO1xuXG4gIHNpemVYID0gcGFyc2VJbnQoTWF0aC5jZWlsKChncmFwaC5nZXRSaWdodCgpIC0gZ3JhcGguZ2V0TGVmdCgpKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc2l6ZVkgPSBwYXJzZUludChNYXRoLmNlaWwoKGdyYXBoLmdldEJvdHRvbSgpIC0gZ3JhcGguZ2V0VG9wKCkpIC8gdGhpcy5yZXB1bHNpb25SYW5nZSkpO1xuXG4gIHZhciBncmlkID0gbmV3IEFycmF5KHNpemVYKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemVYOyBpKyspIHtcbiAgICBncmlkW2ldID0gbmV3IEFycmF5KHNpemVZKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZVg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZVk7IGorKykge1xuICAgICAgZ3JpZFtpXVtqXSA9IG5ldyBBcnJheSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncmlkO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQgPSBmdW5jdGlvbiAodiwgbGVmdCwgdG9wKSB7XG5cbiAgdmFyIHN0YXJ0WCA9IDA7XG4gIHZhciBmaW5pc2hYID0gMDtcbiAgdmFyIHN0YXJ0WSA9IDA7XG4gIHZhciBmaW5pc2hZID0gMDtcblxuICBzdGFydFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS54IC0gbGVmdCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS53aWR0aCArIHYuZ2V0UmVjdCgpLnggLSBsZWZ0KSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc3RhcnRZID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkueSAtIHRvcCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFkgPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS5oZWlnaHQgKyB2LmdldFJlY3QoKS55IC0gdG9wKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcblxuICBmb3IgKHZhciBpID0gc3RhcnRYOyBpIDw9IGZpbmlzaFg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSBzdGFydFk7IGogPD0gZmluaXNoWTsgaisrKSB7XG4gICAgICB0aGlzLmdyaWRbaV1bal0ucHVzaCh2KTtcbiAgICAgIHYuc2V0R3JpZENvb3JkaW5hdGVzKHN0YXJ0WCwgZmluaXNoWCwgc3RhcnRZLCBmaW5pc2hZKTtcbiAgICB9XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS51cGRhdGVHcmlkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaTtcbiAgdmFyIG5vZGVBO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuXG4gIHRoaXMuZ3JpZCA9IHRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKTtcblxuICAvLyBwdXQgYWxsIG5vZGVzIHRvIHByb3BlciBncmlkIGNlbGxzXG4gIGZvciAoaSA9IDA7IGkgPCBsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlQSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmFkZE5vZGVUb0dyaWQobm9kZUEsIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUgPSBmdW5jdGlvbiAobm9kZUEsIHByb2Nlc3NlZE5vZGVTZXQsIGdyaWRVcGRhdGVBbGxvd2VkLCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCB8fCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG4gICAgdmFyIHN1cnJvdW5kaW5nID0gbmV3IFNldCgpO1xuICAgIG5vZGVBLnN1cnJvdW5kaW5nID0gbmV3IEFycmF5KCk7XG4gICAgdmFyIG5vZGVCO1xuICAgIHZhciBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgZm9yICh2YXIgaSA9IG5vZGVBLnN0YXJ0WCAtIDE7IGkgPCBub2RlQS5maW5pc2hYICsgMjsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gbm9kZUEuc3RhcnRZIC0gMTsgaiA8IG5vZGVBLmZpbmlzaFkgKyAyOyBqKyspIHtcbiAgICAgICAgaWYgKCEoaSA8IDAgfHwgaiA8IDAgfHwgaSA+PSBncmlkLmxlbmd0aCB8fCBqID49IGdyaWRbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZ3JpZFtpXVtqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbm9kZUIgPSBncmlkW2ldW2pdW2tdO1xuXG4gICAgICAgICAgICAvLyBJZiBib3RoIG5vZGVzIGFyZSBub3QgbWVtYmVycyBvZiB0aGUgc2FtZSBncmFwaCwgXG4gICAgICAgICAgICAvLyBvciBib3RoIG5vZGVzIGFyZSB0aGUgc2FtZSwgc2tpcC5cbiAgICAgICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkgfHwgbm9kZUEgPT0gbm9kZUIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZXB1bHNpb24gZm9yY2UgYmV0d2VlblxuICAgICAgICAgICAgLy8gbm9kZUEgYW5kIG5vZGVCIGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZFxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWROb2RlU2V0Lmhhcyhub2RlQikgJiYgIXN1cnJvdW5kaW5nLmhhcyhub2RlQikpIHtcbiAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlWCA9IE1hdGguYWJzKG5vZGVBLmdldENlbnRlclgoKSAtIG5vZGVCLmdldENlbnRlclgoKSkgLSAobm9kZUEuZ2V0V2lkdGgoKSAvIDIgKyBub2RlQi5nZXRXaWR0aCgpIC8gMik7XG4gICAgICAgICAgICAgIHZhciBkaXN0YW5jZVkgPSBNYXRoLmFicyhub2RlQS5nZXRDZW50ZXJZKCkgLSBub2RlQi5nZXRDZW50ZXJZKCkpIC0gKG5vZGVBLmdldEhlaWdodCgpIC8gMiArIG5vZGVCLmdldEhlaWdodCgpIC8gMik7XG5cbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCIFxuICAgICAgICAgICAgICAvLyBpcyBsZXNzIHRoZW4gY2FsY3VsYXRpb24gcmFuZ2VcbiAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlWCA8PSB0aGlzLnJlcHVsc2lvblJhbmdlICYmIGRpc3RhbmNlWSA8PSB0aGlzLnJlcHVsc2lvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy90aGVuIGFkZCBub2RlQiB0byBzdXJyb3VuZGluZyBvZiBub2RlQVxuICAgICAgICAgICAgICAgIHN1cnJvdW5kaW5nLmFkZChub2RlQik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlQS5zdXJyb3VuZGluZyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3Vycm91bmRpbmcpKTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgbm9kZUEuc3Vycm91bmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShub2RlQSwgbm9kZUEuc3Vycm91bmRpbmdbaV0pO1xuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gMC4wO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dDtcblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuZnVuY3Rpb24gRkRMYXlvdXRFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBMRWRnZS5jYWxsKHRoaXMsIHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSk7XG5cbiAgLy8gSWRlYWwgbGVuZ3RoIGFuZCBlbGFzdGljaXR5IHZhbHVlIGZvciB0aGlzIGVkZ2VcbiAgdGhpcy5pZGVhbExlbmd0aCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG4gIHRoaXMuZWRnZUVsYXN0aWNpdHkgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSDtcbn1cblxuRkRMYXlvdXRFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEVkZ2UucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMRWRnZSkge1xuICBGRExheW91dEVkZ2VbcHJvcF0gPSBMRWRnZVtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dEVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0Tm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICAvLyBhbHRlcm5hdGl2ZSBjb25zdHJ1Y3RvciBpcyBoYW5kbGVkIGluc2lkZSBMTm9kZVxuICBMTm9kZS5jYWxsKHRoaXMsIGdtLCBsb2MsIHNpemUsIHZOb2RlKTtcblxuICAvLyBSZXB1bHNpb24gdmFsdWUgb2YgdGhpcyBub2RlXG4gIHRoaXMubm9kZVJlcHVsc2lvbiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIO1xuXG4gIC8vU3ByaW5nLCByZXB1bHNpb24gYW5kIGdyYXZpdGF0aW9uYWwgZm9yY2VzIGFjdGluZyBvbiB0aGlzIG5vZGVcbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIC8vQW1vdW50IGJ5IHdoaWNoIHRoaXMgbm9kZSBpcyB0byBiZSBtb3ZlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICB0aGlzLmRpc3BsYWNlbWVudFggPSAwO1xuICB0aGlzLmRpc3BsYWNlbWVudFkgPSAwO1xuXG4gIC8vU3RhcnQgYW5kIGZpbmlzaCBncmlkIGNvb3JkaW5hdGVzIHRoYXQgdGhpcyBub2RlIGlzIGZhbGxlbiBpbnRvXG4gIHRoaXMuc3RhcnRYID0gMDtcbiAgdGhpcy5maW5pc2hYID0gMDtcbiAgdGhpcy5zdGFydFkgPSAwO1xuICB0aGlzLmZpbmlzaFkgPSAwO1xuXG4gIC8vR2VvbWV0cmljIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgdGhpcy5zdXJyb3VuZGluZyA9IFtdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMTm9kZS5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExOb2RlKSB7XG4gIEZETGF5b3V0Tm9kZVtwcm9wXSA9IExOb2RlW3Byb3BdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcyA9IGZ1bmN0aW9uIChfc3RhcnRYLCBfZmluaXNoWCwgX3N0YXJ0WSwgX2ZpbmlzaFkpIHtcbiAgdGhpcy5zdGFydFggPSBfc3RhcnRYO1xuICB0aGlzLmZpbmlzaFggPSBfZmluaXNoWDtcbiAgdGhpcy5zdGFydFkgPSBfc3RhcnRZO1xuICB0aGlzLmZpbmlzaFkgPSBfZmluaXNoWTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXROb2RlO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIERpbWVuc2lvbkQod2lkdGgsIGhlaWdodCkge1xuICB0aGlzLndpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuICBpZiAod2lkdGggIT09IG51bGwgJiYgaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB9XG59XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKHdpZHRoKSB7XG4gIHRoaXMud2lkdGggPSB3aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xufTtcblxuRGltZW5zaW9uRC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24gKGhlaWdodCkge1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGltZW5zaW9uRDtcblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaE1hcCgpIHtcbiAgdGhpcy5tYXAgPSB7fTtcbiAgdGhpcy5rZXlzID0gW107XG59XG5cbkhhc2hNYXAucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHZhciB0aGVJZCA9IFVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEKGtleSk7XG4gIGlmICghdGhpcy5jb250YWlucyh0aGVJZCkpIHtcbiAgICB0aGlzLm1hcFt0aGVJZF0gPSB2YWx1ZTtcbiAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuICB9XG59O1xuXG5IYXNoTWFwLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW2tleV0gIT0gbnVsbDtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW3RoZUlkXTtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmtleVNldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMua2V5cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaE1hcDtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaFNldCgpIHtcbiAgdGhpcy5zZXQgPSB7fTtcbn1cbjtcblxuSGFzaFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgdGhlSWQgPSBVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopO1xuICBpZiAoIXRoaXMuY29udGFpbnModGhlSWQpKSB0aGlzLnNldFt0aGVJZF0gPSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGRlbGV0ZSB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXTtcbn07XG5cbkhhc2hTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNldCA9IHt9O1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXSA9PSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aDtcbn07XG5cbi8vY29uY2F0cyB0aGlzLnNldCB0byB0aGUgZ2l2ZW4gbGlzdFxuSGFzaFNldC5wcm90b3R5cGUuYWRkQWxsVG8gPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2V0KTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdC5wdXNoKHRoaXMuc2V0W2tleXNbaV1dKTtcbiAgfVxufTtcblxuSGFzaFNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGg7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIgcyA9IGxpc3QubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciB2ID0gbGlzdFtpXTtcbiAgICB0aGlzLmFkZCh2KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoU2V0O1xuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIFNvbWUgbWF0cml4ICgxZCBhbmQgMmQgYXJyYXkpIG9wZXJhdGlvbnNcbmZ1bmN0aW9uIE1hdHJpeCgpIHt9XG5cbi8qKlxuICogbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gKiBhcnJheTEsIGFycmF5MiBhbmQgcmVzdWx0IGFyZSAyZCBhcnJheXNcbiAqL1xuTWF0cml4Lm11bHRNYXQgPSBmdW5jdGlvbiAoYXJyYXkxLCBhcnJheTIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gW107XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheTJbMF0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJlc3VsdFtpXVtqXSA9IDA7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFycmF5MVswXS5sZW5ndGg7IGsrKykge1xuICAgICAgICByZXN1bHRbaV1bal0gKz0gYXJyYXkxW2ldW2tdICogYXJyYXkyW2tdW2pdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBtYXRyaXggdHJhbnNwb3NlXG4gKiBhcnJheSBhbmQgcmVzdWx0IGFyZSAyZCBhcnJheXNcbiAqL1xuTWF0cml4LnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheVswXS5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJlc3VsdFtpXVtqXSA9IGFycmF5W2pdW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIG11bHRpcGx5IGFycmF5IHdpdGggY29uc3RhbnRcbiAqIGFycmF5IGFuZCByZXN1bHQgYXJlIDFkIGFycmF5c1xuICovXG5NYXRyaXgubXVsdENvbnMgPSBmdW5jdGlvbiAoYXJyYXksIGNvbnN0YW50KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gYXJyYXlbaV0gKiBjb25zdGFudDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIHN1YnN0cmFjdCB0d28gYXJyYXlzXG4gKiBhcnJheTEsIGFycmF5MiBhbmQgcmVzdWx0IGFyZSAxZCBhcnJheXNcbiAqL1xuTWF0cml4Lm1pbnVzT3AgPSBmdW5jdGlvbiAoYXJyYXkxLCBhcnJheTIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gYXJyYXkxW2ldIC0gYXJyYXkyW2ldO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogZG90IHByb2R1Y3Qgb2YgdHdvIGFycmF5cyB3aXRoIHNhbWUgc2l6ZVxuICogYXJyYXkxIGFuZCBhcnJheTIgYXJlIDFkIGFycmF5c1xuICovXG5NYXRyaXguZG90UHJvZHVjdCA9IGZ1bmN0aW9uIChhcnJheTEsIGFycmF5Mikge1xuICB2YXIgcHJvZHVjdCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICBwcm9kdWN0ICs9IGFycmF5MVtpXSAqIGFycmF5MltpXTtcbiAgfVxuXG4gIHJldHVybiBwcm9kdWN0O1xufTtcblxuLyoqXG4gKiBtYWduaXR1ZGUgb2YgYW4gYXJyYXlcbiAqIGFycmF5IGlzIDFkIGFycmF5XG4gKi9cbk1hdHJpeC5tYWcgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRvdFByb2R1Y3QoYXJyYXksIGFycmF5KSk7XG59O1xuXG4vKipcbiAqIG5vcm1hbGl6YXRpb24gb2YgYW4gYXJyYXlcbiAqIGFycmF5IGFuZCByZXN1bHQgYXJlIDFkIGFycmF5XG4gKi9cbk1hdHJpeC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgbWFnbml0dWRlID0gdGhpcy5tYWcoYXJyYXkpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbaV0gPSBhcnJheVtpXSAvIG1hZ25pdHVkZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIG11bHRpcGx5IGFuIGFycmF5IHdpdGggY2VudGVyaW5nIG1hdHJpeFxuICogYXJyYXkgYW5kIHJlc3VsdCBhcmUgMWQgYXJyYXlcbiAqL1xuTWF0cml4Lm11bHRHYW1tYSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBzdW0gPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBzdW0gKz0gYXJyYXlbaV07XG4gIH1cblxuICBzdW0gKj0gLTEgLyBhcnJheS5sZW5ndGg7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFycmF5Lmxlbmd0aDsgX2krKykge1xuICAgIHJlc3VsdFtfaV0gPSBzdW0gKyBhcnJheVtfaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogYSBzcGVjaWFsIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuICogcmVzdWx0ID0gMC41ICogQyAqIElOViAqIENeVCAqIGFycmF5XG4gKiBhcnJheSBhbmQgcmVzdWx0IGFyZSAxZCwgQyBhbmQgSU5WIGFyZSAyZCBhcnJheXNcbiAqL1xuTWF0cml4Lm11bHRMID0gZnVuY3Rpb24gKGFycmF5LCBDLCBJTlYpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgdGVtcDEgPSBbXTtcbiAgdmFyIHRlbXAyID0gW107XG5cbiAgLy8gbXVsdGlwbHkgYnkgQ15UXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQ1swXS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgQy5sZW5ndGg7IGorKykge1xuICAgICAgc3VtICs9IC0wLjUgKiBDW2pdW2ldICogYXJyYXlbal07XG4gICAgfVxuICAgIHRlbXAxW2ldID0gc3VtO1xuICB9XG4gIC8vIG11bHRpcGx5IHRoZSByZXN1bHQgYnkgSU5WXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IElOVi5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9zdW0gPSAwO1xuICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBJTlYubGVuZ3RoOyBfaisrKSB7XG4gICAgICBfc3VtICs9IElOVltfaTJdW19qXSAqIHRlbXAxW19qXTtcbiAgICB9XG4gICAgdGVtcDJbX2kyXSA9IF9zdW07XG4gIH1cbiAgLy8gbXVsdGlwbHkgdGhlIHJlc3VsdCBieSBDXG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IEMubGVuZ3RoOyBfaTMrKykge1xuICAgIHZhciBfc3VtMiA9IDA7XG4gICAgZm9yICh2YXIgX2oyID0gMDsgX2oyIDwgQ1swXS5sZW5ndGg7IF9qMisrKSB7XG4gICAgICBfc3VtMiArPSBDW19pM11bX2oyXSAqIHRlbXAyW19qMl07XG4gICAgfVxuICAgIHJlc3VsdFtfaTNdID0gX3N1bTI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBBIGNsYXNzaWMgUXVpY2tzb3J0IGFsZ29yaXRobSB3aXRoIEhvYXJlJ3MgcGFydGl0aW9uXG4gKiAtIFdvcmtzIGFsc28gb24gTGlua2VkTGlzdCBvYmplY3RzXG4gKlxuICogQ29weXJpZ2h0OiBpLVZpcyBSZXNlYXJjaCBHcm91cCwgQmlsa2VudCBVbml2ZXJzaXR5LCAyMDA3IC0gcHJlc2VudFxuICovXG5cbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbnZhciBRdWlja3NvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUXVpY2tzb3J0KEEsIGNvbXBhcmVGdW5jdGlvbikge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUXVpY2tzb3J0KTtcblxuICAgICAgICBpZiAoY29tcGFyZUZ1bmN0aW9uICE9PSBudWxsIHx8IGNvbXBhcmVGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB0aGlzLmNvbXBhcmVGdW5jdGlvbiA9IHRoaXMuX2RlZmF1bHRDb21wYXJlRnVuY3Rpb247XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKEEgaW5zdGFuY2VvZiBMaW5rZWRMaXN0KSBsZW5ndGggPSBBLnNpemUoKTtlbHNlIGxlbmd0aCA9IEEubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuX3F1aWNrc29ydChBLCAwLCBsZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoUXVpY2tzb3J0LCBbe1xuICAgICAgICBrZXk6ICdfcXVpY2tzb3J0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9xdWlja3NvcnQoQSwgcCwgcikge1xuICAgICAgICAgICAgaWYgKHAgPCByKSB7XG4gICAgICAgICAgICAgICAgdmFyIHEgPSB0aGlzLl9wYXJ0aXRpb24oQSwgcCwgcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcXVpY2tzb3J0KEEsIHAsIHEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3F1aWNrc29ydChBLCBxICsgMSwgcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19wYXJ0aXRpb24nLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnRpdGlvbihBLCBwLCByKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHRoaXMuX2dldChBLCBwKTtcbiAgICAgICAgICAgIHZhciBpID0gcDtcbiAgICAgICAgICAgIHZhciBqID0gcjtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuY29tcGFyZUZ1bmN0aW9uKHgsIHRoaXMuX2dldChBLCBqKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgICAgIH13aGlsZSAodGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KEEsIGkpLCB4KSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfWlmIChpIDwgaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zd2FwKEEsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIGo7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19nZXQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldChvYmplY3QsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTGlua2VkTGlzdCkgcmV0dXJuIG9iamVjdC5nZXRfb2JqZWN0X2F0KGluZGV4KTtlbHNlIHJldHVybiBvYmplY3RbaW5kZXhdO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfc2V0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXQob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBMaW5rZWRMaXN0KSBvYmplY3Quc2V0X29iamVjdF9hdChpbmRleCwgdmFsdWUpO2Vsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfc3dhcCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc3dhcChBLCBpLCBqKSB7XG4gICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMuX2dldChBLCBpKTtcbiAgICAgICAgICAgIHRoaXMuX3NldChBLCBpLCB0aGlzLl9nZXQoQSwgaikpO1xuICAgICAgICAgICAgdGhpcy5fc2V0KEEsIGosIHRlbXApO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfZGVmYXVsdENvbXBhcmVGdW5jdGlvbicsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVmYXVsdENvbXBhcmVGdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYiA+IGE7XG4gICAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gUXVpY2tzb3J0O1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1aWNrc29ydDtcblxuLyoqKi8gfSksXG4vKiAyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBTaW5ndWxhciBWYWx1ZSBEZWNvbXBvc2l0aW9uIGltcGxlbWVudGF0aW9uXG5mdW5jdGlvbiBTVkQoKSB7fTtcblxuLyogQmVsb3cgc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbiAoc3ZkKSBjb2RlIGluY2x1ZGluZyBoeXBvdCBmdW5jdGlvbiBpcyBhZG9wdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2RyYWdvbmZseS1haS9KYW1hSlNcbiAgIFNvbWUgY2hhbmdlcyBhcmUgYXBwbGllZCB0byBtYWtlIHRoZSBjb2RlIGNvbXBhdGlibGUgd2l0aCB0aGUgZmNvc2UgY29kZSBhbmQgdG8gbWFrZSBpdCBpbmRlcGVuZGVudCBmcm9tIEphbWEuXG4gICBJbnB1dCBtYXRyaXggaXMgY2hhbmdlZCB0byBhIDJEIGFycmF5IGluc3RlYWQgb2YgSmFtYSBtYXRyaXguIE1hdHJpeCBkaW1lbnNpb25zIGFyZSB0YWtlbiBhY2NvcmRpbmcgdG8gMkQgYXJyYXkgaW5zdGVhZCBvZiB1c2luZyBKYW1hIGZ1bmN0aW9ucy5cbiAgIEFuIG9iamVjdCB0aGF0IGluY2x1ZGVzIHNpbmd1bGFyIHZhbHVlIGNvbXBvbmVudHMgaXMgY3JlYXRlZCBmb3IgcmV0dXJuLiBcbiAgIFRoZSB0eXBlcyBvZiBpbnB1dCBwYXJhbWV0ZXJzIG9mIHRoZSBoeXBvdCBmdW5jdGlvbiBhcmUgcmVtb3ZlZC4gXG4gICBsZXQgaXMgdXNlZCBpbnN0ZWFkIG9mIHZhciBmb3IgdGhlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLlxuKi9cbi8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDRcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9cblxuICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICBcIkxpY2Vuc2VcIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sXG4gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgICAgXCJMaWNlbnNvclwiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieVxuICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgICBcIkxlZ2FsIEVudGl0eVwiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGxcbiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb25cbiAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sXG4gICAgICBcImNvbnRyb2xcIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZVxuICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3JcbiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZVxuICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgICAgXCJZb3VcIiAob3IgXCJZb3VyXCIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHlcbiAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIFwiU291cmNlXCIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsXG4gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uXG4gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG4gICAgICBcIk9iamVjdFwiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0XG4gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sXG4gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuXG5cbiAgICAgIFwiV29ya1wiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3JcbiAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGFcbiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29ya1xuICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS5cblxuICAgICAgXCJEZXJpdmF0aXZlIFdvcmtzXCIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0XG4gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlXG4gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zXG4gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3Nlc1xuICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluXG4gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsXG4gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG4gICAgICBcIkNvbnRyaWJ1dGlvblwiIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nXG4gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zXG4gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHlcbiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXJcbiAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZlxuICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwic3VibWl0dGVkXCJcbiAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnRcbiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvXG4gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLFxuICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGVcbiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dFxuICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2VcbiAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzIFwiTm90IGEgQ29udHJpYnV0aW9uLlwiXG5cbiAgICAgIFwiQ29udHJpYnV0b3JcIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHlcbiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZFxuICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuXG5cbiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLFxuICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGVcbiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLFxuICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlXG4gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLlxuXG4gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcbiAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCxcbiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlXG4gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSxcbiAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLFxuICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGVcbiAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyXG4gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpXG4gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdVxuICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGFcbiAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmtcbiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0XG4gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzXG4gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGVcbiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC5cblxuICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGVcbiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dFxuICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3VcbiAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvclxuICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kXG5cbiAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXNcbiAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmRcblxuICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzXG4gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZFxuICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssXG4gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZlxuICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmRcblxuICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgXCJOT1RJQ0VcIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHNcbiAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0XG4gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkXG4gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90XG4gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lXG4gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWRcbiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yXG4gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsXG4gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZFxuICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50c1xuICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmRcbiAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvblxuICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlXG4gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkXG4gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkXG4gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmRcbiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnNcbiAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3JcbiAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLFxuICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoXG4gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsXG4gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmtcbiAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG4gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy5cbiAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnlcbiAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkXG4gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuXG5cbiAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGVcbiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvcixcbiAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZVxuICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuXG5cbiAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvclxuICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaFxuICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvclxuICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnNcbiAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEFcbiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZVxuICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55XG4gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LFxuICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsXG4gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseVxuICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmVcbiAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCxcbiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYVxuICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZVxuICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLFxuICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGxcbiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3JcbiAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZ1xuICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlcixcbiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksXG4gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpc1xuICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHlcbiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmXG4gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksXG4gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHlcbiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb25cbiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LlxuXG4gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLlxuXG4gICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZ1xuICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgXCJ7fVwiXG4gICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZVxuICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGVcbiAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYVxuICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZVxuICAgICAgc2FtZSBcInByaW50ZWQgcGFnZVwiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXJcbiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy5cblxuICAgQ29weXJpZ2h0IHt5eXl5fSB7bmFtZSBvZiBjb3B5cmlnaHQgb3duZXJ9XG5cbiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuU1ZELnN2ZCA9IGZ1bmN0aW9uIChBKSB7XG4gIHRoaXMuVSA9IG51bGw7XG4gIHRoaXMuViA9IG51bGw7XG4gIHRoaXMucyA9IG51bGw7XG4gIHRoaXMubSA9IDA7XG4gIHRoaXMubiA9IDA7XG4gIHRoaXMubSA9IEEubGVuZ3RoO1xuICB0aGlzLm4gPSBBWzBdLmxlbmd0aDtcbiAgdmFyIG51ID0gTWF0aC5taW4odGhpcy5tLCB0aGlzLm4pO1xuICB0aGlzLnMgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBhID0gW107XG4gICAgd2hpbGUgKHMtLSA+IDApIHtcbiAgICAgIGEucHVzaCgwKTtcbiAgICB9cmV0dXJuIGE7XG4gIH0oTWF0aC5taW4odGhpcy5tICsgMSwgdGhpcy5uKSk7XG4gIHRoaXMuVSA9IGZ1bmN0aW9uIChkaW1zKSB7XG4gICAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gYWxsb2NhdGUoZGltcykge1xuICAgICAgaWYgKGRpbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaW1zWzBdOyBpKyspIHtcbiAgICAgICAgICBhcnJheS5wdXNoKGFsbG9jYXRlKGRpbXMuc2xpY2UoMSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gYWxsb2NhdGUoZGltcyk7XG4gIH0oW3RoaXMubSwgbnVdKTtcbiAgdGhpcy5WID0gZnVuY3Rpb24gKGRpbXMpIHtcbiAgICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiBhbGxvY2F0ZShkaW1zKSB7XG4gICAgICBpZiAoZGltcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpbXNbMF07IGkrKykge1xuICAgICAgICAgIGFycmF5LnB1c2goYWxsb2NhdGUoZGltcy5zbGljZSgxKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBhbGxvY2F0ZShkaW1zKTtcbiAgfShbdGhpcy5uLCB0aGlzLm5dKTtcbiAgdmFyIGUgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBhID0gW107XG4gICAgd2hpbGUgKHMtLSA+IDApIHtcbiAgICAgIGEucHVzaCgwKTtcbiAgICB9cmV0dXJuIGE7XG4gIH0odGhpcy5uKTtcbiAgdmFyIHdvcmsgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBhID0gW107XG4gICAgd2hpbGUgKHMtLSA+IDApIHtcbiAgICAgIGEucHVzaCgwKTtcbiAgICB9cmV0dXJuIGE7XG4gIH0odGhpcy5tKTtcbiAgdmFyIHdhbnR1ID0gdHJ1ZTtcbiAgdmFyIHdhbnR2ID0gdHJ1ZTtcbiAgdmFyIG5jdCA9IE1hdGgubWluKHRoaXMubSAtIDEsIHRoaXMubik7XG4gIHZhciBucnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLm4gLSAyLCB0aGlzLm0pKTtcbiAgZm9yICh2YXIgayA9IDA7IGsgPCBNYXRoLm1heChuY3QsIG5ydCk7IGsrKykge1xuICAgIGlmIChrIDwgbmN0KSB7XG4gICAgICB0aGlzLnNba10gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCB0aGlzLm07IGkrKykge1xuICAgICAgICB0aGlzLnNba10gPSBTVkQuaHlwb3QodGhpcy5zW2tdLCBBW2ldW2tdKTtcbiAgICAgIH1cbiAgICAgIDtcbiAgICAgIGlmICh0aGlzLnNba10gIT09IDAuMCkge1xuICAgICAgICBpZiAoQVtrXVtrXSA8IDAuMCkge1xuICAgICAgICAgIHRoaXMuc1trXSA9IC10aGlzLnNba107XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgX2kgPSBrOyBfaSA8IHRoaXMubTsgX2krKykge1xuICAgICAgICAgIEFbX2ldW2tdIC89IHRoaXMuc1trXTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIEFba11ba10gKz0gMS4wO1xuICAgICAgfVxuICAgICAgdGhpcy5zW2tdID0gLXRoaXMuc1trXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IGsgKyAxOyBqIDwgdGhpcy5uOyBqKyspIHtcbiAgICAgIGlmIChmdW5jdGlvbiAobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIGxocyAmJiByaHM7XG4gICAgICB9KGsgPCBuY3QsIHRoaXMuc1trXSAhPT0gMC4wKSkge1xuICAgICAgICB2YXIgdCA9IDA7XG4gICAgICAgIGZvciAodmFyIF9pMiA9IGs7IF9pMiA8IHRoaXMubTsgX2kyKyspIHtcbiAgICAgICAgICB0ICs9IEFbX2kyXVtrXSAqIEFbX2kyXVtqXTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIHQgPSAtdCAvIEFba11ba107XG4gICAgICAgIGZvciAodmFyIF9pMyA9IGs7IF9pMyA8IHRoaXMubTsgX2kzKyspIHtcbiAgICAgICAgICBBW19pM11bal0gKz0gdCAqIEFbX2kzXVtrXTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICB9XG4gICAgICBlW2pdID0gQVtrXVtqXTtcbiAgICB9XG4gICAgO1xuICAgIGlmIChmdW5jdGlvbiAobGhzLCByaHMpIHtcbiAgICAgIHJldHVybiBsaHMgJiYgcmhzO1xuICAgIH0od2FudHUsIGsgPCBuY3QpKSB7XG4gICAgICBmb3IgKHZhciBfaTQgPSBrOyBfaTQgPCB0aGlzLm07IF9pNCsrKSB7XG4gICAgICAgIHRoaXMuVVtfaTRdW2tdID0gQVtfaTRdW2tdO1xuICAgICAgfVxuICAgICAgO1xuICAgIH1cbiAgICBpZiAoayA8IG5ydCkge1xuICAgICAgZVtrXSA9IDA7XG4gICAgICBmb3IgKHZhciBfaTUgPSBrICsgMTsgX2k1IDwgdGhpcy5uOyBfaTUrKykge1xuICAgICAgICBlW2tdID0gU1ZELmh5cG90KGVba10sIGVbX2k1XSk7XG4gICAgICB9XG4gICAgICA7XG4gICAgICBpZiAoZVtrXSAhPT0gMC4wKSB7XG4gICAgICAgIGlmIChlW2sgKyAxXSA8IDAuMCkge1xuICAgICAgICAgIGVba10gPSAtZVtrXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBfaTYgPSBrICsgMTsgX2k2IDwgdGhpcy5uOyBfaTYrKykge1xuICAgICAgICAgIGVbX2k2XSAvPSBlW2tdO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgZVtrICsgMV0gKz0gMS4wO1xuICAgICAgfVxuICAgICAgZVtrXSA9IC1lW2tdO1xuICAgICAgaWYgKGZ1bmN0aW9uIChsaHMsIHJocykge1xuICAgICAgICByZXR1cm4gbGhzICYmIHJocztcbiAgICAgIH0oayArIDEgPCB0aGlzLm0sIGVba10gIT09IDAuMCkpIHtcbiAgICAgICAgZm9yICh2YXIgX2k3ID0gayArIDE7IF9pNyA8IHRoaXMubTsgX2k3KyspIHtcbiAgICAgICAgICB3b3JrW19pN10gPSAwLjA7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICBmb3IgKHZhciBfaiA9IGsgKyAxOyBfaiA8IHRoaXMubjsgX2orKykge1xuICAgICAgICAgIGZvciAodmFyIF9pOCA9IGsgKyAxOyBfaTggPCB0aGlzLm07IF9pOCsrKSB7XG4gICAgICAgICAgICB3b3JrW19pOF0gKz0gZVtfal0gKiBBW19pOF1bX2pdO1xuICAgICAgICAgIH1cbiAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICBmb3IgKHZhciBfajIgPSBrICsgMTsgX2oyIDwgdGhpcy5uOyBfajIrKykge1xuICAgICAgICAgIHZhciBfdCA9IC1lW19qMl0gLyBlW2sgKyAxXTtcbiAgICAgICAgICBmb3IgKHZhciBfaTkgPSBrICsgMTsgX2k5IDwgdGhpcy5tOyBfaTkrKykge1xuICAgICAgICAgICAgQVtfaTldW19qMl0gKz0gX3QgKiB3b3JrW19pOV07XG4gICAgICAgICAgfVxuICAgICAgICAgIDtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICB9XG4gICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgZm9yICh2YXIgX2kxMCA9IGsgKyAxOyBfaTEwIDwgdGhpcy5uOyBfaTEwKyspIHtcbiAgICAgICAgICB0aGlzLlZbX2kxMF1ba10gPSBlW19pMTBdO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIHAgPSBNYXRoLm1pbih0aGlzLm4sIHRoaXMubSArIDEpO1xuICBpZiAobmN0IDwgdGhpcy5uKSB7XG4gICAgdGhpcy5zW25jdF0gPSBBW25jdF1bbmN0XTtcbiAgfVxuICBpZiAodGhpcy5tIDwgcCkge1xuICAgIHRoaXMuc1twIC0gMV0gPSAwLjA7XG4gIH1cbiAgaWYgKG5ydCArIDEgPCBwKSB7XG4gICAgZVtucnRdID0gQVtucnRdW3AgLSAxXTtcbiAgfVxuICBlW3AgLSAxXSA9IDAuMDtcbiAgaWYgKHdhbnR1KSB7XG4gICAgZm9yICh2YXIgX2ozID0gbmN0OyBfajMgPCBudTsgX2ozKyspIHtcbiAgICAgIGZvciAodmFyIF9pMTEgPSAwOyBfaTExIDwgdGhpcy5tOyBfaTExKyspIHtcbiAgICAgICAgdGhpcy5VW19pMTFdW19qM10gPSAwLjA7XG4gICAgICB9XG4gICAgICA7XG4gICAgICB0aGlzLlVbX2ozXVtfajNdID0gMS4wO1xuICAgIH07XG4gICAgZm9yICh2YXIgX2sgPSBuY3QgLSAxOyBfayA+PSAwOyBfay0tKSB7XG4gICAgICBpZiAodGhpcy5zW19rXSAhPT0gMC4wKSB7XG4gICAgICAgIGZvciAodmFyIF9qNCA9IF9rICsgMTsgX2o0IDwgbnU7IF9qNCsrKSB7XG4gICAgICAgICAgdmFyIF90MiA9IDA7XG4gICAgICAgICAgZm9yICh2YXIgX2kxMiA9IF9rOyBfaTEyIDwgdGhpcy5tOyBfaTEyKyspIHtcbiAgICAgICAgICAgIF90MiArPSB0aGlzLlVbX2kxMl1bX2tdICogdGhpcy5VW19pMTJdW19qNF07XG4gICAgICAgICAgfTtcbiAgICAgICAgICBfdDIgPSAtX3QyIC8gdGhpcy5VW19rXVtfa107XG4gICAgICAgICAgZm9yICh2YXIgX2kxMyA9IF9rOyBfaTEzIDwgdGhpcy5tOyBfaTEzKyspIHtcbiAgICAgICAgICAgIHRoaXMuVVtfaTEzXVtfajRdICs9IF90MiAqIHRoaXMuVVtfaTEzXVtfa107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgX2kxNCA9IF9rOyBfaTE0IDwgdGhpcy5tOyBfaTE0KyspIHtcbiAgICAgICAgICB0aGlzLlVbX2kxNF1bX2tdID0gLXRoaXMuVVtfaTE0XVtfa107XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuVVtfa11bX2tdID0gMS4wICsgdGhpcy5VW19rXVtfa107XG4gICAgICAgIGZvciAodmFyIF9pMTUgPSAwOyBfaTE1IDwgX2sgLSAxOyBfaTE1KyspIHtcbiAgICAgICAgICB0aGlzLlVbX2kxNV1bX2tdID0gMC4wO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgX2kxNiA9IDA7IF9pMTYgPCB0aGlzLm07IF9pMTYrKykge1xuICAgICAgICAgIHRoaXMuVVtfaTE2XVtfa10gPSAwLjA7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuVVtfa11bX2tdID0gMS4wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgaWYgKHdhbnR2KSB7XG4gICAgZm9yICh2YXIgX2syID0gdGhpcy5uIC0gMTsgX2syID49IDA7IF9rMi0tKSB7XG4gICAgICBpZiAoZnVuY3Rpb24gKGxocywgcmhzKSB7XG4gICAgICAgIHJldHVybiBsaHMgJiYgcmhzO1xuICAgICAgfShfazIgPCBucnQsIGVbX2syXSAhPT0gMC4wKSkge1xuICAgICAgICBmb3IgKHZhciBfajUgPSBfazIgKyAxOyBfajUgPCBudTsgX2o1KyspIHtcbiAgICAgICAgICB2YXIgX3QzID0gMDtcbiAgICAgICAgICBmb3IgKHZhciBfaTE3ID0gX2syICsgMTsgX2kxNyA8IHRoaXMubjsgX2kxNysrKSB7XG4gICAgICAgICAgICBfdDMgKz0gdGhpcy5WW19pMTddW19rMl0gKiB0aGlzLlZbX2kxN11bX2o1XTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIF90MyA9IC1fdDMgLyB0aGlzLlZbX2syICsgMV1bX2syXTtcbiAgICAgICAgICBmb3IgKHZhciBfaTE4ID0gX2syICsgMTsgX2kxOCA8IHRoaXMubjsgX2kxOCsrKSB7XG4gICAgICAgICAgICB0aGlzLlZbX2kxOF1bX2o1XSArPSBfdDMgKiB0aGlzLlZbX2kxOF1bX2syXTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgX2kxOSA9IDA7IF9pMTkgPCB0aGlzLm47IF9pMTkrKykge1xuICAgICAgICB0aGlzLlZbX2kxOV1bX2syXSA9IDAuMDtcbiAgICAgIH07XG4gICAgICB0aGlzLlZbX2syXVtfazJdID0gMS4wO1xuICAgIH07XG4gIH1cbiAgdmFyIHBwID0gcCAtIDE7XG4gIHZhciBpdGVyID0gMDtcbiAgdmFyIGVwcyA9IE1hdGgucG93KDIuMCwgLTUyLjApO1xuICB2YXIgdGlueSA9IE1hdGgucG93KDIuMCwgLTk2Ni4wKTtcbiAgd2hpbGUgKHAgPiAwKSB7XG4gICAgdmFyIF9rMyA9IHZvaWQgMDtcbiAgICB2YXIga2FzZSA9IHZvaWQgMDtcbiAgICBmb3IgKF9rMyA9IHAgLSAyOyBfazMgPj0gLTE7IF9rMy0tKSB7XG4gICAgICBpZiAoX2szID09PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChNYXRoLmFicyhlW19rM10pIDw9IHRpbnkgKyBlcHMgKiAoTWF0aC5hYnModGhpcy5zW19rM10pICsgTWF0aC5hYnModGhpcy5zW19rMyArIDFdKSkpIHtcbiAgICAgICAgZVtfazNdID0gMC4wO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChfazMgPT09IHAgLSAyKSB7XG4gICAgICBrYXNlID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtzID0gdm9pZCAwO1xuICAgICAgZm9yIChrcyA9IHAgLSAxOyBrcyA+PSBfazM7IGtzLS0pIHtcbiAgICAgICAgaWYgKGtzID09PSBfazMpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX3Q0ID0gKGtzICE9PSBwID8gTWF0aC5hYnMoZVtrc10pIDogMC4wKSArIChrcyAhPT0gX2szICsgMSA/IE1hdGguYWJzKGVba3MgLSAxXSkgOiAwLjApO1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2tzXSkgPD0gdGlueSArIGVwcyAqIF90NCkge1xuICAgICAgICAgIHRoaXMuc1trc10gPSAwLjA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoa3MgPT09IF9rMykge1xuICAgICAgICBrYXNlID0gMztcbiAgICAgIH0gZWxzZSBpZiAoa3MgPT09IHAgLSAxKSB7XG4gICAgICAgIGthc2UgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2FzZSA9IDI7XG4gICAgICAgIF9rMyA9IGtzO1xuICAgICAgfVxuICAgIH1cbiAgICBfazMrKztcbiAgICBzd2l0Y2ggKGthc2UpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBmID0gZVtwIC0gMl07XG4gICAgICAgICAgZVtwIC0gMl0gPSAwLjA7XG4gICAgICAgICAgZm9yICh2YXIgX2o2ID0gcCAtIDI7IF9qNiA+PSBfazM7IF9qNi0tKSB7XG4gICAgICAgICAgICB2YXIgX3Q1ID0gU1ZELmh5cG90KHRoaXMuc1tfajZdLCBmKTtcbiAgICAgICAgICAgIHZhciBjcyA9IHRoaXMuc1tfajZdIC8gX3Q1O1xuICAgICAgICAgICAgdmFyIHNuID0gZiAvIF90NTtcbiAgICAgICAgICAgIHRoaXMuc1tfajZdID0gX3Q1O1xuICAgICAgICAgICAgaWYgKF9qNiAhPT0gX2szKSB7XG4gICAgICAgICAgICAgIGYgPSAtc24gKiBlW19qNiAtIDFdO1xuICAgICAgICAgICAgICBlW19qNiAtIDFdID0gY3MgKiBlW19qNiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIF9pMjAgPSAwOyBfaTIwIDwgdGhpcy5uOyBfaTIwKyspIHtcbiAgICAgICAgICAgICAgICBfdDUgPSBjcyAqIHRoaXMuVltfaTIwXVtfajZdICsgc24gKiB0aGlzLlZbX2kyMF1bcCAtIDFdO1xuICAgICAgICAgICAgICAgIHRoaXMuVltfaTIwXVtwIC0gMV0gPSAtc24gKiB0aGlzLlZbX2kyMF1bX2o2XSArIGNzICogdGhpcy5WW19pMjBdW3AgLSAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlZbX2kyMF1bX2o2XSA9IF90NTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZiA9IGVbX2szIC0gMV07XG4gICAgICAgICAgZVtfazMgLSAxXSA9IDAuMDtcbiAgICAgICAgICBmb3IgKHZhciBfajcgPSBfazM7IF9qNyA8IHA7IF9qNysrKSB7XG4gICAgICAgICAgICB2YXIgX3Q2ID0gU1ZELmh5cG90KHRoaXMuc1tfajddLCBfZik7XG4gICAgICAgICAgICB2YXIgX2NzID0gdGhpcy5zW19qN10gLyBfdDY7XG4gICAgICAgICAgICB2YXIgX3NuID0gX2YgLyBfdDY7XG4gICAgICAgICAgICB0aGlzLnNbX2o3XSA9IF90NjtcbiAgICAgICAgICAgIF9mID0gLV9zbiAqIGVbX2o3XTtcbiAgICAgICAgICAgIGVbX2o3XSA9IF9jcyAqIGVbX2o3XTtcbiAgICAgICAgICAgIGlmICh3YW50dSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTIxID0gMDsgX2kyMSA8IHRoaXMubTsgX2kyMSsrKSB7XG4gICAgICAgICAgICAgICAgX3Q2ID0gX2NzICogdGhpcy5VW19pMjFdW19qN10gKyBfc24gKiB0aGlzLlVbX2kyMV1bX2szIC0gMV07XG4gICAgICAgICAgICAgICAgdGhpcy5VW19pMjFdW19rMyAtIDFdID0gLV9zbiAqIHRoaXMuVVtfaTIxXVtfajddICsgX2NzICogdGhpcy5VW19pMjFdW19rMyAtIDFdO1xuICAgICAgICAgICAgICAgIHRoaXMuVVtfaTIxXVtfajddID0gX3Q2O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHNjYWxlID0gTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5hYnModGhpcy5zW3AgLSAxXSksIE1hdGguYWJzKHRoaXMuc1twIC0gMl0pKSwgTWF0aC5hYnMoZVtwIC0gMl0pKSwgTWF0aC5hYnModGhpcy5zW19rM10pKSwgTWF0aC5hYnMoZVtfazNdKSk7XG4gICAgICAgICAgdmFyIHNwID0gdGhpcy5zW3AgLSAxXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBzcG0xID0gdGhpcy5zW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBlcG0xID0gZVtwIC0gMl0gLyBzY2FsZTtcbiAgICAgICAgICB2YXIgc2sgPSB0aGlzLnNbX2szXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBlayA9IGVbX2szXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBiID0gKChzcG0xICsgc3ApICogKHNwbTEgLSBzcCkgKyBlcG0xICogZXBtMSkgLyAyLjA7XG4gICAgICAgICAgdmFyIGMgPSBzcCAqIGVwbTEgKiAoc3AgKiBlcG0xKTtcbiAgICAgICAgICB2YXIgc2hpZnQgPSAwLjA7XG4gICAgICAgICAgaWYgKGZ1bmN0aW9uIChsaHMsIHJocykge1xuICAgICAgICAgICAgcmV0dXJuIGxocyB8fCByaHM7XG4gICAgICAgICAgfShiICE9PSAwLjAsIGMgIT09IDAuMCkpIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gTWF0aC5zcXJ0KGIgKiBiICsgYyk7XG4gICAgICAgICAgICBpZiAoYiA8IDAuMCkge1xuICAgICAgICAgICAgICBzaGlmdCA9IC1zaGlmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoaWZ0ID0gYyAvIChiICsgc2hpZnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX2YyID0gKHNrICsgc3ApICogKHNrIC0gc3ApICsgc2hpZnQ7XG4gICAgICAgICAgdmFyIGcgPSBzayAqIGVrO1xuICAgICAgICAgIGZvciAodmFyIF9qOCA9IF9rMzsgX2o4IDwgcCAtIDE7IF9qOCsrKSB7XG4gICAgICAgICAgICB2YXIgX3Q3ID0gU1ZELmh5cG90KF9mMiwgZyk7XG4gICAgICAgICAgICB2YXIgX2NzMiA9IF9mMiAvIF90NztcbiAgICAgICAgICAgIHZhciBfc24yID0gZyAvIF90NztcbiAgICAgICAgICAgIGlmIChfajggIT09IF9rMykge1xuICAgICAgICAgICAgICBlW19qOCAtIDFdID0gX3Q3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2YyID0gX2NzMiAqIHRoaXMuc1tfajhdICsgX3NuMiAqIGVbX2o4XTtcbiAgICAgICAgICAgIGVbX2o4XSA9IF9jczIgKiBlW19qOF0gLSBfc24yICogdGhpcy5zW19qOF07XG4gICAgICAgICAgICBnID0gX3NuMiAqIHRoaXMuc1tfajggKyAxXTtcbiAgICAgICAgICAgIHRoaXMuc1tfajggKyAxXSA9IF9jczIgKiB0aGlzLnNbX2o4ICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgX2kyMiA9IDA7IF9pMjIgPCB0aGlzLm47IF9pMjIrKykge1xuICAgICAgICAgICAgICAgIF90NyA9IF9jczIgKiB0aGlzLlZbX2kyMl1bX2o4XSArIF9zbjIgKiB0aGlzLlZbX2kyMl1bX2o4ICsgMV07XG4gICAgICAgICAgICAgICAgdGhpcy5WW19pMjJdW19qOCArIDFdID0gLV9zbjIgKiB0aGlzLlZbX2kyMl1bX2o4XSArIF9jczIgKiB0aGlzLlZbX2kyMl1bX2o4ICsgMV07XG4gICAgICAgICAgICAgICAgdGhpcy5WW19pMjJdW19qOF0gPSBfdDc7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdDcgPSBTVkQuaHlwb3QoX2YyLCBnKTtcbiAgICAgICAgICAgIF9jczIgPSBfZjIgLyBfdDc7XG4gICAgICAgICAgICBfc24yID0gZyAvIF90NztcbiAgICAgICAgICAgIHRoaXMuc1tfajhdID0gX3Q3O1xuICAgICAgICAgICAgX2YyID0gX2NzMiAqIGVbX2o4XSArIF9zbjIgKiB0aGlzLnNbX2o4ICsgMV07XG4gICAgICAgICAgICB0aGlzLnNbX2o4ICsgMV0gPSAtX3NuMiAqIGVbX2o4XSArIF9jczIgKiB0aGlzLnNbX2o4ICsgMV07XG4gICAgICAgICAgICBnID0gX3NuMiAqIGVbX2o4ICsgMV07XG4gICAgICAgICAgICBlW19qOCArIDFdID0gX2NzMiAqIGVbX2o4ICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgX2o4IDwgdGhpcy5tIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTIzID0gMDsgX2kyMyA8IHRoaXMubTsgX2kyMysrKSB7XG4gICAgICAgICAgICAgICAgX3Q3ID0gX2NzMiAqIHRoaXMuVVtfaTIzXVtfajhdICsgX3NuMiAqIHRoaXMuVVtfaTIzXVtfajggKyAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyM11bX2o4ICsgMV0gPSAtX3NuMiAqIHRoaXMuVVtfaTIzXVtfajhdICsgX2NzMiAqIHRoaXMuVVtfaTIzXVtfajggKyAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyM11bX2o4XSA9IF90NztcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVbcCAtIDJdID0gX2YyO1xuICAgICAgICAgIGl0ZXIgPSBpdGVyICsgMTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGhpcy5zW19rM10gPD0gMC4wKSB7XG4gICAgICAgICAgICB0aGlzLnNbX2szXSA9IHRoaXMuc1tfazNdIDwgMC4wID8gLXRoaXMuc1tfazNdIDogMC4wO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIF9pMjQgPSAwOyBfaTI0IDw9IHBwOyBfaTI0KyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLlZbX2kyNF1bX2szXSA9IC10aGlzLlZbX2kyNF1bX2szXTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKF9rMyA8IHBwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zW19rM10gPj0gdGhpcy5zW19rMyArIDFdKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF90OCA9IHRoaXMuc1tfazNdO1xuICAgICAgICAgICAgdGhpcy5zW19rM10gPSB0aGlzLnNbX2szICsgMV07XG4gICAgICAgICAgICB0aGlzLnNbX2szICsgMV0gPSBfdDg7XG4gICAgICAgICAgICBpZiAod2FudHYgJiYgX2szIDwgdGhpcy5uIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTI1ID0gMDsgX2kyNSA8IHRoaXMubjsgX2kyNSsrKSB7XG4gICAgICAgICAgICAgICAgX3Q4ID0gdGhpcy5WW19pMjVdW19rMyArIDFdO1xuICAgICAgICAgICAgICAgIHRoaXMuVltfaTI1XVtfazMgKyAxXSA9IHRoaXMuVltfaTI1XVtfazNdO1xuICAgICAgICAgICAgICAgIHRoaXMuVltfaTI1XVtfazNdID0gX3Q4O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIF9rMyA8IHRoaXMubSAtIDEpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgX2kyNiA9IDA7IF9pMjYgPCB0aGlzLm07IF9pMjYrKykge1xuICAgICAgICAgICAgICAgIF90OCA9IHRoaXMuVVtfaTI2XVtfazMgKyAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyNl1bX2szICsgMV0gPSB0aGlzLlVbX2kyNl1bX2szXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyNl1bX2szXSA9IF90ODtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9rMysrO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaXRlciA9IDA7XG4gICAgICAgICAgcC0tO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG4gIHZhciByZXN1bHQgPSB7IFU6IHRoaXMuVSwgVjogdGhpcy5WLCBTOiB0aGlzLnMgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIHNxcnQoYV4yICsgYl4yKSB3aXRob3V0IHVuZGVyL292ZXJmbG93LlxuU1ZELmh5cG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIHIgPSB2b2lkIDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHIgPSBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9IGVsc2UgaWYgKGIgIT0gMCkge1xuICAgIHIgPSBhIC8gYjtcbiAgICByID0gTWF0aC5hYnMoYikgKiBNYXRoLnNxcnQoMSArIHIgKiByKTtcbiAgfSBlbHNlIHtcbiAgICByID0gMC4wO1xuICB9XG4gIHJldHVybiByO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTVkQ7XG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiAgIE5lZWRsZW1hbi1XdW5zY2ggYWxnb3JpdGhtIGlzIGFuIHByb2NlZHVyZSB0byBjb21wdXRlIHRoZSBvcHRpbWFsIGdsb2JhbCBhbGlnbm1lbnQgb2YgdHdvIHN0cmluZ1xuICogICBzZXF1ZW5jZXMgYnkgUy5CLk5lZWRsZW1hbiBhbmQgQy5ELld1bnNjaCAoMTk3MCkuXG4gKlxuICogICBBc2lkZSBmcm9tIHRoZSBpbnB1dHMsIHlvdSBjYW4gYXNzaWduIHRoZSBzY29yZXMgZm9yLFxuICogICAtIE1hdGNoOiBUaGUgdHdvIGNoYXJhY3RlcnMgYXQgdGhlIGN1cnJlbnQgaW5kZXggYXJlIHNhbWUuXG4gKiAgIC0gTWlzbWF0Y2g6IFRoZSB0d28gY2hhcmFjdGVycyBhdCB0aGUgY3VycmVudCBpbmRleCBhcmUgZGlmZmVyZW50LlxuICogICAtIEluc2VydGlvbi9EZWxldGlvbihnYXBzKTogVGhlIGJlc3QgYWxpZ25tZW50IGludm9sdmVzIG9uZSBsZXR0ZXIgYWxpZ25pbmcgdG8gYSBnYXAgaW4gdGhlIG90aGVyIHN0cmluZy5cbiAqL1xuXG52YXIgTmVlZGxlbWFuV3Vuc2NoID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5lZWRsZW1hbld1bnNjaChzZXF1ZW5jZTEsIHNlcXVlbmNlMikge1xuICAgICAgICB2YXIgbWF0Y2hfc2NvcmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gICAgICAgIHZhciBtaXNtYXRjaF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAtMTtcbiAgICAgICAgdmFyIGdhcF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAtMTtcblxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmVlZGxlbWFuV3Vuc2NoKTtcblxuICAgICAgICB0aGlzLnNlcXVlbmNlMSA9IHNlcXVlbmNlMTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZTIgPSBzZXF1ZW5jZTI7XG4gICAgICAgIHRoaXMubWF0Y2hfc2NvcmUgPSBtYXRjaF9zY29yZTtcbiAgICAgICAgdGhpcy5taXNtYXRjaF9wZW5hbHR5ID0gbWlzbWF0Y2hfcGVuYWx0eTtcbiAgICAgICAgdGhpcy5nYXBfcGVuYWx0eSA9IGdhcF9wZW5hbHR5O1xuXG4gICAgICAgIC8vIEp1c3QgdGhlIHJlbW92ZSByZWR1bmRhbmN5XG4gICAgICAgIHRoaXMuaU1heCA9IHNlcXVlbmNlMS5sZW5ndGggKyAxO1xuICAgICAgICB0aGlzLmpNYXggPSBzZXF1ZW5jZTIubGVuZ3RoICsgMTtcblxuICAgICAgICAvLyBHcmlkIG1hdHJpeCBvZiBzY29yZXNcbiAgICAgICAgdGhpcy5ncmlkID0gbmV3IEFycmF5KHRoaXMuaU1heCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pTWF4OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFtpXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkW2ldW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNlYmFjayBtYXRyaXggKDJEIGFycmF5LCBlYWNoIGNlbGwgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgZm9yIFtgRGlhZ2AsIGBVcGAsIGBMZWZ0YF0gcG9zaXRpb25zKVxuICAgICAgICB0aGlzLnRyYWNlYmFja0dyaWQgPSBuZXcgQXJyYXkodGhpcy5pTWF4KTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMuaU1heDsgX2krKykge1xuICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgdGhpcy5qTWF4OyBfaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXVtfal0gPSBbbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgYWxpZ25lZCBzZXF1ZW5jZXMgKHJldHVybiBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzKVxuICAgICAgICB0aGlzLmFsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAvLyBGaW5hbCBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgdGhpcy5zY29yZSA9IC0xO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzY29yZXMgYW5kIHRyYWNlYmFja3NcbiAgICAgICAgdGhpcy5jb21wdXRlR3JpZHMoKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoTmVlZGxlbWFuV3Vuc2NoLCBbe1xuICAgICAgICBrZXk6IFwiZ2V0U2NvcmVcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNjb3JlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NvcmU7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJnZXRBbGlnbm1lbnRzXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbm1lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpZ25tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gZHluYW1pYyBwcm9ncmFtbWluZyBwcm9jZWR1cmVcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImNvbXB1dGVHcmlkc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcHV0ZUdyaWRzKCkge1xuICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgZmlyc3Qgcm93XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkWzBdW2pdID0gdGhpcy5ncmlkWzBdW2ogLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkWzBdW2pdID0gW2ZhbHNlLCBmYWxzZSwgdHJ1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGZpcnN0IGNvbHVtblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLmlNYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtpXVswXSA9IHRoaXMuZ3JpZFtpIC0gMV1bMF0gKyB0aGlzLmdhcF9wZW5hbHR5O1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtpXVswXSA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGaWxsIHRoZSByZXN0IG9mIHRoZSBncmlkXG4gICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAxOyBfaTIgPCB0aGlzLmlNYXg7IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2oyID0gMTsgX2oyIDwgdGhpcy5qTWF4OyBfajIrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBtYXggc2NvcmUocykgYW1vbmcgW2BEaWFnYCwgYFVwYCwgYExlZnRgXVxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlhZyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVuY2UxW19pMiAtIDFdID09PSB0aGlzLnNlcXVlbmNlMltfajIgLSAxXSkgZGlhZyA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajIgLSAxXSArIHRoaXMubWF0Y2hfc2NvcmU7ZWxzZSBkaWFnID0gdGhpcy5ncmlkW19pMiAtIDFdW19qMiAtIDFdICsgdGhpcy5taXNtYXRjaF9wZW5hbHR5O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cCA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajJdICsgdGhpcy5nYXBfcGVuYWx0eTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlzLmdyaWRbX2kyXVtfajIgLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIG11bHRpcGxlIG1heCB2YWx1ZXMsIGNhcHR1cmUgdGhlbSBmb3IgbXVsdGlwbGUgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heE9mID0gW2RpYWcsIHVwLCBsZWZ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhtYXhPZik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIEdyaWRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtfaTJdW19qMl0gPSBtYXhPZltpbmRpY2VzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pMl1bX2oyXSA9IFtpbmRpY2VzLmluY2x1ZGVzKDApLCBpbmRpY2VzLmluY2x1ZGVzKDEpLCBpbmRpY2VzLmluY2x1ZGVzKDIpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgICAgIHRoaXMuc2NvcmUgPSB0aGlzLmdyaWRbdGhpcy5pTWF4IC0gMV1bdGhpcy5qTWF4IC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXRzIGFsbCBwb3NzaWJsZSB2YWxpZCBzZXF1ZW5jZSBjb21iaW5hdGlvbnNcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFsaWdubWVudFRyYWNlYmFja1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWxpZ25tZW50VHJhY2ViYWNrKCkge1xuICAgICAgICAgICAgdmFyIGluUHJvY2Vzc0FsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLCB0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLFxuICAgICAgICAgICAgICAgIHNlcTE6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2VxMjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChpblByb2Nlc3NBbGlnbm1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBpblByb2Nlc3NBbGlnbm1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25zID0gdGhpcy50cmFjZWJhY2tHcmlkW2N1cnJlbnQucG9zWzBdXVtjdXJyZW50LnBvc1sxXV07XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSAtIDEsIGN1cnJlbnQucG9zWzFdIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogdGhpcy5zZXF1ZW5jZTJbY3VycmVudC5wb3NbMV0gLSAxXSArIGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbY3VycmVudC5wb3NbMF0gLSAxLCBjdXJyZW50LnBvc1sxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogJy0nICsgY3VycmVudC5zZXEyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1syXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSwgY3VycmVudC5wb3NbMV0gLSAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTE6ICctJyArIGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTI6IHRoaXMuc2VxdWVuY2UyW2N1cnJlbnQucG9zWzFdIC0gMV0gKyBjdXJyZW50LnNlcTJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucG9zWzBdID09PSAwICYmIGN1cnJlbnQucG9zWzFdID09PSAwKSB0aGlzLmFsaWdubWVudHMucHVzaCh7IHNlcXVlbmNlMTogY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTI6IGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGlnbm1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGVscGVyIEZ1bmN0aW9uc1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiZ2V0QWxsSW5kZXhlc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxsSW5kZXhlcyhhcnIsIHZhbCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICAgICAgICBpID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKGkgPSBhcnIuaW5kZXhPZih2YWwsIGkgKyAxKSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJhcnJheUFsbE1heEluZGV4ZXNcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFycmF5QWxsTWF4SW5kZXhlcyhhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyhhcnJheSwgTWF0aC5tYXguYXBwbHkobnVsbCwgYXJyYXkpKTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBOZWVkbGVtYW5XdW5zY2g7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTmVlZGxlbWFuV3Vuc2NoO1xuXG4vKioqLyB9KSxcbi8qIDI4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBsYXlvdXRCYXNlID0gZnVuY3Rpb24gbGF5b3V0QmFzZSgpIHtcbiAgcmV0dXJuO1xufTtcblxubGF5b3V0QmFzZS5GRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5sYXlvdXRCYXNlLkZETGF5b3V0RWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xubGF5b3V0QmFzZS5GRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbmxheW91dEJhc2UuRGltZW5zaW9uRCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xubGF5b3V0QmFzZS5IYXNoTWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5sYXlvdXRCYXNlLkhhc2hTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbmxheW91dEJhc2UuSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbmxheW91dEJhc2UuSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xubGF5b3V0QmFzZS5JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5sYXlvdXRCYXNlLlBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5sYXlvdXRCYXNlLlBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5sYXlvdXRCYXNlLlJhbmRvbVNlZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbmxheW91dEJhc2UuUmVjdGFuZ2xlRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xubGF5b3V0QmFzZS5UcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbmxheW91dEJhc2UuVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbmxheW91dEJhc2UuUXVpY2tzb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5sYXlvdXRCYXNlLkxpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbmxheW91dEJhc2UuTEdyYXBoT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbmxheW91dEJhc2UuTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmxheW91dEJhc2UuTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xubGF5b3V0QmFzZS5MR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbmxheW91dEJhc2UuTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xubGF5b3V0QmFzZS5MYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbmxheW91dEJhc2UuTmVlZGxlbWFuV3Vuc2NoID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG5sYXlvdXRCYXNlLk1hdHJpeCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xubGF5b3V0QmFzZS5TVkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcblxubW9kdWxlLmV4cG9ydHMgPSBsYXlvdXRCYXNlO1xuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIEVtaXR0ZXIoKSB7XG4gIHRoaXMubGlzdGVuZXJzID0gW107XG59XG5cbnZhciBwID0gRW1pdHRlci5wcm90b3R5cGU7XG5cbnAuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gIHRoaXMubGlzdGVuZXJzLnB1c2goe1xuICAgIGV2ZW50OiBldmVudCxcbiAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgfSk7XG59O1xuXG5wLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gdGhpcy5saXN0ZW5lcnMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsID0gdGhpcy5saXN0ZW5lcnNbaV07XG5cbiAgICBpZiAobC5ldmVudCA9PT0gZXZlbnQgJiYgbC5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cbn07XG5cbnAuZW1pdCA9IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGwgPSB0aGlzLmxpc3RlbmVyc1tpXTtcblxuICAgIGlmIChldmVudCA9PT0gbC5ldmVudCkge1xuICAgICAgbC5jYWxsYmFjayhkYXRhKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7IiwKICAgICIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJsYXlvdXQtYmFzZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJsYXlvdXQtYmFzZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjb3NlQmFzZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImxheW91dC1iYXNlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjb3NlQmFzZVwiXSA9IGZhY3Rvcnkocm9vdFtcImxheW91dEJhc2VcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNTUxX18pIHtcbnJldHVybiAvKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdFwidXNlIHN0cmljdFwiO1xuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XG5cbi8qKiovIDQ1OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIGNvc2VCYXNlID0ge307XG5cbmNvc2VCYXNlLmxheW91dEJhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSk7XG5jb3NlQmFzZS5Db1NFQ29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDYpO1xuY29zZUJhc2UuQ29TRUVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2Nyk7XG5jb3NlQmFzZS5Db1NFR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4MCk7XG5jb3NlQmFzZS5Db1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NzgpO1xuY29zZUJhc2UuQ29TRUxheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oNzY1KTtcbmNvc2VCYXNlLkNvU0VOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OTEpO1xuY29zZUJhc2UuQ29uc3RyYWludEhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwMik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29zZUJhc2U7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MDY6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuRkRMYXlvdXRDb25zdGFudHM7XG5cbmZ1bmN0aW9uIENvU0VDb25zdGFudHMoKSB7fVxuXG4vL0NvU0VDb25zdGFudHMgaW5oZXJpdHMgc3RhdGljIHByb3BzIGluIEZETGF5b3V0Q29uc3RhbnRzXG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0Q29uc3RhbnRzKSB7XG4gIENvU0VDb25zdGFudHNbcHJvcF0gPSBGRExheW91dENvbnN0YW50c1twcm9wXTtcbn1cblxuQ29TRUNvbnN0YW50cy5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HID0gZmFsc2U7XG5Db1NFQ29uc3RhbnRzLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04gPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xuQ29TRUNvbnN0YW50cy5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OID0gNjA7XG5Db1NFQ29uc3RhbnRzLlRJTEUgPSB0cnVlO1xuQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19WRVJUSUNBTCA9IDEwO1xuQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMID0gMTA7XG5Db1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gdHJ1ZTtcbkNvU0VDb25zdGFudHMuRU5GT1JDRV9DT05TVFJBSU5UUyA9IHRydWU7XG5Db1NFQ29uc3RhbnRzLkFQUExZX0xBWU9VVCA9IHRydWU7XG5Db1NFQ29uc3RhbnRzLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTID0gdHJ1ZTtcbkNvU0VDb25zdGFudHMuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwgPSB0cnVlOyAvLyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UgaWYgdGhlcmUgd2lsbCBiZSBhIGNvbnN0cmFpbnRcbi8vIFRoaXMgY29uc3RhbnQgaXMgZm9yIGRpZmZlcmVudGlhdGluZyB3aGV0aGVyIGFjdHVhbCBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgdXNlcyBjb3NlLWJhc2Ugd2FudHMgdG8gYXBwbHkgb25seSBpbmNyZW1lbnRhbCBsYXlvdXQgb3IgXG4vLyBhbiBpbmNyZW1lbnRhbCBsYXlvdXQgb24gdG9wIG9mIGEgcmFuZG9taXplZCBsYXlvdXQuIElmIGl0IGlzIG9ubHkgaW5jcmVtZW50YWwgbGF5b3V0LCB0aGVuIHRoaXMgY29uc3RhbnQgc2hvdWxkIGJlIHRydWUuXG5Db1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwgPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUw7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUNvbnN0YW50cztcblxuLyoqKi8gfSksXG5cbi8qKiovIDc2Nzpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBGRExheW91dEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuRkRMYXlvdXRFZGdlO1xuXG5mdW5jdGlvbiBDb1NFRWRnZShzb3VyY2UsIHRhcmdldCwgdkVkZ2UpIHtcbiAgRkRMYXlvdXRFZGdlLmNhbGwodGhpcywgc291cmNlLCB0YXJnZXQsIHZFZGdlKTtcbn1cblxuQ29TRUVkZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShGRExheW91dEVkZ2UucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gRkRMYXlvdXRFZGdlKSB7XG4gIENvU0VFZGdlW3Byb3BdID0gRkRMYXlvdXRFZGdlW3Byb3BdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VFZGdlO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODgwOlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5MR3JhcGg7XG5cbmZ1bmN0aW9uIENvU0VHcmFwaChwYXJlbnQsIGdyYXBoTWdyLCB2R3JhcGgpIHtcbiAgTEdyYXBoLmNhbGwodGhpcywgcGFyZW50LCBncmFwaE1nciwgdkdyYXBoKTtcbn1cblxuQ29TRUdyYXBoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaCkge1xuICBDb1NFR3JhcGhbcHJvcF0gPSBMR3JhcGhbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTc4OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIExHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuTEdyYXBoTWFuYWdlcjtcblxuZnVuY3Rpb24gQ29TRUdyYXBoTWFuYWdlcihsYXlvdXQpIHtcbiAgTEdyYXBoTWFuYWdlci5jYWxsKHRoaXMsIGxheW91dCk7XG59XG5cbkNvU0VHcmFwaE1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhNYW5hZ2VyLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE1hbmFnZXIpIHtcbiAgQ29TRUdyYXBoTWFuYWdlcltwcm9wXSA9IExHcmFwaE1hbmFnZXJbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc2NTpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBGRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5GRExheW91dDtcbnZhciBDb1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NzgpO1xudmFyIENvU0VHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oODgwKTtcbnZhciBDb1NFTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTkxKTtcbnZhciBDb1NFRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzY3KTtcbnZhciBDb1NFQ29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDYpO1xudmFyIENvbnN0cmFpbnRIYW5kbGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MDIpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5MYXlvdXRDb25zdGFudHM7XG52YXIgUG9pbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuUG9pbnQ7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLlBvaW50RDtcbnZhciBEaW1lbnNpb25EID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkRpbWVuc2lvbkQ7XG52YXIgTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkxheW91dDtcbnZhciBJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkludGVnZXI7XG52YXIgSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLklHZW9tZXRyeTtcbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuTEdyYXBoO1xudmFyIFRyYW5zZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5UcmFuc2Zvcm07XG52YXIgTGlua2VkTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5MaW5rZWRMaXN0O1xuXG5mdW5jdGlvbiBDb1NFTGF5b3V0KCkge1xuICBGRExheW91dC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudG9CZVRpbGVkID0ge307IC8vIE1lbW9yaXplIGlmIGEgbm9kZSBpcyB0byBiZSB0aWxlZCBvciBpcyB0aWxlZFxuICB0aGlzLmNvbnN0cmFpbnRzID0ge307IC8vIGtlZXAgbGF5b3V0IGNvbnN0cmFpbnRzXG59XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShGRExheW91dC5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0KSB7XG4gIENvU0VMYXlvdXRbcHJvcF0gPSBGRExheW91dFtwcm9wXTtcbn1cblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZ20gPSBuZXcgQ29TRUdyYXBoTWFuYWdlcih0aGlzKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcbiAgcmV0dXJuIGdtO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3R3JhcGggPSBmdW5jdGlvbiAodkdyYXBoKSB7XG4gIHJldHVybiBuZXcgQ29TRUdyYXBoKG51bGwsIHRoaXMuZ3JhcGhNYW5hZ2VyLCB2R3JhcGgpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3Tm9kZSA9IGZ1bmN0aW9uICh2Tm9kZSkge1xuICByZXR1cm4gbmV3IENvU0VOb2RlKHRoaXMuZ3JhcGhNYW5hZ2VyLCB2Tm9kZSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5uZXdFZGdlID0gZnVuY3Rpb24gKHZFZGdlKSB7XG4gIHJldHVybiBuZXcgQ29TRUVkZ2UobnVsbCwgbnVsbCwgdkVkZ2UpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIEZETGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmICghdGhpcy5pc1N1YkxheW91dCkge1xuICAgIGlmIChDb1NFQ29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPCAxMCkge1xuICAgICAgdGhpcy5pZGVhbEVkZ2VMZW5ndGggPSAxMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pZGVhbEVkZ2VMZW5ndGggPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG4gICAgfVxuXG4gICAgdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uID0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTjtcbiAgICB0aGlzLmdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSDtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIO1xuICAgIHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdHJlZSByZWR1Y3Rpb24gc3VwcG9ydFxuICAgIHRoaXMucHJ1bmVkTm9kZXNBbGwgPSBbXTtcbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgPSAwO1xuICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNHcm93dGhGaW5pc2hlZCA9IGZhbHNlO1xuICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBDb1NFIHJlbGF0ZWQgcGFyYW1ldGVycyB1c2VkIGJ5IHNwcmluZyBlbWJlZGRlci5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlciA9IGZ1bmN0aW9uICgpIHtcbiAgRkRMYXlvdXQucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlci5jYWxsKHRoaXMpO1xuXG4gIC8vIHZhcmlhYmxlcyBmb3IgY29vbGluZ1xuICB0aGlzLmNvb2xpbmdDeWNsZSA9IDA7XG4gIHRoaXMubWF4Q29vbGluZ0N5Y2xlID0gdGhpcy5tYXhJdGVyYXRpb25zIC8gRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EO1xuICB0aGlzLmZpbmFsVGVtcGVyYXR1cmUgPSAwLjA0O1xuICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IDE7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjcmVhdGVCZW5kc0FzTmVlZGVkID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtcbiAgaWYgKGNyZWF0ZUJlbmRzQXNOZWVkZWQpIHtcbiAgICB0aGlzLmNyZWF0ZUJlbmRwb2ludHMoKTtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG4gIH1cblxuICB0aGlzLmxldmVsID0gMDtcbiAgcmV0dXJuIHRoaXMuY2xhc3NpY0xheW91dCgpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2xhc3NpY0xheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5ub2Rlc1dpdGhHcmF2aXR5ID0gdGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSk7XG4gIHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCk7XG4gIHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKTtcblxuICBpZiAoIXRoaXMuaW5jcmVtZW50YWwpIHtcbiAgICB2YXIgZm9yZXN0ID0gdGhpcy5nZXRGbGF0Rm9yZXN0KCk7XG5cbiAgICAvLyBUaGUgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5b3V0IGlzIGZsYXQgYW5kIGEgZm9yZXN0XG4gICAgaWYgKGZvcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShmb3Jlc3QpO1xuICAgIH1cbiAgICAvLyBUaGUgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5b3V0IGlzIG5vdCBmbGF0IG9yIGEgZm9yZXN0XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFJlZHVjZSB0aGUgdHJlZXMgd2hlbiBpbmNyZW1lbnRhbCBtb2RlIGlzIG5vdCBlbmFibGVkIGFuZCBncmFwaCBpcyBub3QgYSBmb3Jlc3QgXG4gICAgICAgIHRoaXMucmVkdWNlVHJlZXMoKTtcbiAgICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmhhcyh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKTtcbiAgICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCkge1xuICAgICAgLy8gUmVkdWNlIHRoZSB0cmVlcyBpbiBpbmNyZW1lbnRhbCBtb2RlIGlmIG9ubHkgdGhpcyBjb25zdGFudCBpcyBzZXQgdG8gdHJ1ZSBcbiAgICAgIHRoaXMucmVkdWNlVHJlZXMoKTtcbiAgICAgIC8vIFVwZGF0ZSBub2RlcyB0aGF0IGdyYXZpdHkgd2lsbCBiZSBhcHBsaWVkXG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gdGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihpbnRlcnNlY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh0aGlzLmNvbnN0cmFpbnRzKS5sZW5ndGggPiAwKSB7XG4gICAgQ29uc3RyYWludEhhbmRsZXIuaGFuZGxlQ29uc3RyYWludHModGhpcyk7XG4gICAgdGhpcy5pbml0Q29uc3RyYWludFZhcmlhYmxlcygpO1xuICB9XG5cbiAgdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKTtcbiAgaWYgKENvU0VDb25zdGFudHMuQVBQTFlfTEFZT1VUKSB7XG4gICAgdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWNrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnRvdGFsSXRlcmF0aW9ucysrO1xuXG4gIGlmICh0aGlzLnRvdGFsSXRlcmF0aW9ucyA9PT0gdGhpcy5tYXhJdGVyYXRpb25zICYmICF0aGlzLmlzVHJlZUdyb3dpbmcgJiYgIXRoaXMuaXNHcm93dGhGaW5pc2hlZCkge1xuICAgIGlmICh0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnRvdGFsSXRlcmF0aW9ucyAlIEZETGF5b3V0Q29uc3RhbnRzLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCA9PSAwICYmICF0aGlzLmlzVHJlZUdyb3dpbmcgJiYgIXRoaXMuaXNHcm93dGhGaW5pc2hlZCkge1xuICAgIGlmICh0aGlzLmlzQ29udmVyZ2VkKCkpIHtcbiAgICAgIGlmICh0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5pc1RyZWVHcm93aW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29vbGluZ0N5Y2xlKys7XG5cbiAgICBpZiAodGhpcy5sYXlvdXRRdWFsaXR5ID09IDApIHtcbiAgICAgIC8vIHF1YWxpdHkgLSBcImRyYWZ0XCJcbiAgICAgIHRoaXMuY29vbGluZ0FkanVzdGVyID0gdGhpcy5jb29saW5nQ3ljbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxheW91dFF1YWxpdHkgPT0gMSkge1xuICAgICAgLy8gcXVhbGl0eSAtIFwiZGVmYXVsdFwiXG4gICAgICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IHRoaXMuY29vbGluZ0N5Y2xlIC8gMztcbiAgICB9XG5cbiAgICAvLyBjb29saW5nIHNjaGVkdWxlIGlzIGJhc2VkIG9uIGh0dHA6Ly93d3cuYnRsdWtlLmNvbS9zaW1hbmYxLmh0bWwgLT4gY29vbGluZyBzY2hlZHVsZSAzXG4gICAgdGhpcy5jb29saW5nRmFjdG9yID0gTWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciAtIE1hdGgucG93KHRoaXMuY29vbGluZ0N5Y2xlLCBNYXRoLmxvZygxMDAgKiAodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciAtIHRoaXMuZmluYWxUZW1wZXJhdHVyZSkpIC8gTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKSAvIDEwMCAqIHRoaXMuY29vbGluZ0FkanVzdGVyLCB0aGlzLmZpbmFsVGVtcGVyYXR1cmUpO1xuICAgIHRoaXMuYW5pbWF0aW9uUGVyaW9kID0gTWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCAqIE1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKTtcbiAgfVxuICAvLyBPcGVyYXRpb25zIHdoaWxlIHRyZWUgaXMgZ3Jvd2luZyBhZ2FpbiBcbiAgaWYgKHRoaXMuaXNUcmVlR3Jvd2luZykge1xuICAgIGlmICh0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyAlIDEwID09IDApIHtcbiAgICAgIGlmICh0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgICAgICB0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpO1xuICAgICAgICAvLyBVcGRhdGUgbm9kZXMgdGhhdCBncmF2aXR5IHdpbGwgYmUgYXBwbGllZFxuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IHRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oaW50ZXJzZWN0aW9uKTtcblxuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgICAgIGlmIChDb1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwpIHRoaXMuY29vbGluZ0ZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgLyAyO2Vsc2UgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR3Jvd3RoRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrO1xuICB9XG4gIC8vIE9wZXJhdGlvbnMgYWZ0ZXIgZ3Jvd3RoIGlzIGZpbmlzaGVkXG4gIGlmICh0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5pc0NvbnZlcmdlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zICUgMTAgPT0gMCkge1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcbiAgICB9XG4gICAgaWYgKENvU0VDb25zdGFudHMuUFVSRV9JTkNSRU1FTlRBTCkgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCAvIDIgKiAoKDEwMCAtIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKSAvIDEwMCk7ZWxzZSB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMICogKCgxMDAgLSB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykgLyAxMDApO1xuICAgIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKys7XG4gIH1cblxuICB2YXIgZ3JpZFVwZGF0ZUFsbG93ZWQgPSAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7XG4gIHZhciBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlID0gdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgJSAxMCA9PSAxICYmIHRoaXMuaXNUcmVlR3Jvd2luZyB8fCB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyAlIDEwID09IDEgJiYgdGhpcy5pc0dyb3d0aEZpbmlzaGVkO1xuXG4gIHRoaXMudG90YWxEaXNwbGFjZW1lbnQgPSAwO1xuICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCk7XG4gIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhncmlkVXBkYXRlQWxsb3dlZCwgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSk7XG4gIHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKTtcbiAgdGhpcy5tb3ZlTm9kZXMoKTtcbiAgdGhpcy5hbmltYXRlKCk7XG5cbiAgcmV0dXJuIGZhbHNlOyAvLyBMYXlvdXQgaXMgbm90IGVuZGVkIHlldCByZXR1cm4gZmFsc2Vcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gIHZhciBwRGF0YSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlY3QgPSBhbGxOb2Rlc1tpXS5yZWN0O1xuICAgIHZhciBpZCA9IGFsbE5vZGVzW2ldLmlkO1xuICAgIHBEYXRhW2lkXSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHg6IHJlY3QuZ2V0Q2VudGVyWCgpLFxuICAgICAgeTogcmVjdC5nZXRDZW50ZXJZKCksXG4gICAgICB3OiByZWN0LndpZHRoLFxuICAgICAgaDogcmVjdC5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHBEYXRhO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCA9IDI1O1xuICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDtcbiAgdmFyIGxheW91dEVuZGVkID0gZmFsc2U7XG5cbiAgLy8gSWYgYW1pbmF0ZSBvcHRpb24gaXMgJ2R1cmluZycgc2lnbmFsIHRoYXQgbGF5b3V0IGlzIHN1cHBvc2VkIHRvIHN0YXJ0IGl0ZXJhdGluZ1xuICBpZiAoRkRMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9PT0gJ2R1cmluZycpIHtcbiAgICB0aGlzLmVtaXQoJ2xheW91dHN0YXJ0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbWluYXRlIG9wdGlvbiBpcyAnZHVyaW5nJyB0aWNrKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24gaW5kZXguanNcbiAgICB3aGlsZSAoIWxheW91dEVuZGVkKSB7XG4gICAgICBsYXlvdXRFbmRlZCA9IHRoaXMudGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICB9XG59O1xuXG4vLyBvdmVycmlkZXMgbW92ZU5vZGVzIG1ldGhvZCBpbiBGRExheW91dFxuQ29TRUxheW91dC5wcm90b3R5cGUubW92ZU5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgbm9kZTtcblxuICAvLyBjYWxjdWxhdGUgZGlzcGxhY2VtZW50IGZvciBlYWNoIG5vZGUgXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLmNhbGN1bGF0ZURpc3BsYWNlbWVudCgpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYWNlbWVudHMoKTtcbiAgfVxuXG4gIC8vIG1vdmUgZWFjaCBub2RlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLm1vdmUoKTtcbiAgfVxufTtcblxuLy8gY29uc3RyYWludCByZWxhdGVkIG1ldGhvZHM6IGluaXRDb25zdHJhaW50VmFyaWFibGVzIGFuZCB1cGRhdGVEaXNwbGFjZW1lbnRzXG5cbi8vIGluaXRpYWxpemUgY29uc3RyYWludCByZWxhdGVkIHZhcmlhYmxlc1xuQ29TRUxheW91dC5wcm90b3R5cGUuaW5pdENvbnN0cmFpbnRWYXJpYWJsZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5pZFRvTm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgdGhpcy5maXhlZE5vZGVTZXQgPSBuZXcgU2V0KCk7XG5cbiAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcblxuICAvLyBmaWxsIGlkVG9Ob2RlTWFwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGFsbE5vZGVzW2ldO1xuICAgIHRoaXMuaWRUb05vZGVNYXAuc2V0KG5vZGUuaWQsIG5vZGUpO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIGZpeGVkIG5vZGUgd2VpZ2h0IGZvciBnaXZlbiBjb21wb3VuZCBub2RlXG4gIHZhciBjYWxjdWxhdGVDb21wb3VuZFdlaWdodCA9IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvdW5kV2VpZ2h0KGNvbXBvdW5kTm9kZSkge1xuICAgIHZhciBub2RlcyA9IGNvbXBvdW5kTm9kZS5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIGZpeGVkTm9kZVdlaWdodCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWxmLmZpeGVkTm9kZVNldC5oYXMobm9kZS5pZCkpIHtcbiAgICAgICAgICBmaXhlZE5vZGVXZWlnaHQgKz0gMTAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhlZE5vZGVXZWlnaHQgKz0gY2FsY3VsYXRlQ29tcG91bmRXZWlnaHQobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXhlZE5vZGVXZWlnaHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCkge1xuICAgIC8vIGZpbGwgZml4ZWROb2RlU2V0XG4gICAgdGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG4gICAgICBzZWxmLmZpeGVkTm9kZVNldC5hZGQobm9kZURhdGEubm9kZUlkKTtcbiAgICB9KTtcblxuICAgIC8vIGFzc2lnbiBmaXhlZCBub2RlIHdlaWdodHMgdG8gY29tcG91bmRzIGlmIHRoZXkgY29udGFpbiBmaXhlZCBub2Rlc1xuICAgIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gICAgdmFyIG5vZGU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGZpeGVkTm9kZVdlaWdodCA9IGNhbGN1bGF0ZUNvbXBvdW5kV2VpZ2h0KG5vZGUpO1xuICAgICAgICBpZiAoZml4ZWROb2RlV2VpZ2h0ID4gMCkge1xuICAgICAgICAgIG5vZGUuZml4ZWROb2RlV2VpZ2h0ID0gZml4ZWROb2RlV2VpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgdmFyIG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdmFyIG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5maXhlZE5vZGVzT25Ib3Jpem9udGFsID0gbmV3IFNldCgpO1xuICAgIHRoaXMuZml4ZWROb2Rlc09uVmVydGljYWwgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBmaWxsIG1hcHMgYW5kIHNldHNcbiAgICB0aGlzLmZpeGVkTm9kZVNldC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgIHNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQobm9kZUlkKTtcbiAgICAgIHNlbGYuZml4ZWROb2Rlc09uVmVydGljYWwuYWRkKG5vZGVJZCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKSB7XG4gICAgICAgIHZhciB2ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNhbEFsaWdubWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgaSwgW10pO1xuICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50W2ldLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQobm9kZUlkLCBcImR1bW15XCIgKyBpKTtcbiAgICAgICAgICAgIHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoXCJkdW1teVwiICsgaSkucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuZml4ZWROb2RlU2V0Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgIHNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoXCJkdW1teVwiICsgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCkge1xuICAgICAgICB2YXIgaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvcml6b250YWxBbGlnbm1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgaSwgW10pO1xuICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnRbaV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KG5vZGVJZCwgXCJkdW1teVwiICsgaSk7XG4gICAgICAgICAgICBzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoXCJkdW1teVwiICsgaSkucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuZml4ZWROb2RlU2V0Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgIHNlbGYuZml4ZWROb2Rlc09uVmVydGljYWwuYWRkKFwiZHVtbXlcIiArIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKENvU0VDb25zdGFudHMuUkVMQVhfTU9WRU1FTlRfT05fQ09OU1RSQUlOVFMpIHtcblxuICAgICAgdGhpcy5zaHVmZmxlID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICAgIHZhciBqLCB4LCBpO1xuICAgICAgICBmb3IgKGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDIgKiBhcnJheS5sZW5ndGggLyAzOyBpLS0pIHtcbiAgICAgICAgICBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XG4gICAgICAgICAgeCA9IGFycmF5W2ldO1xuICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07XG4gICAgICAgICAgYXJyYXlbal0gPSB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbCA9IFtdO1xuICAgICAgdGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbCA9IFtdO1xuICAgICAgdGhpcy5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbCA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwgPSBuZXcgTWFwKCk7XG5cbiAgICAgIC8vIGZpbGwgYXJyYXlzIGFuZCBtYXBzXG4gICAgICB0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LmxlZnQpIHtcbiAgICAgICAgICB2YXIgbm9kZUlkTGVmdCA9IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQubGVmdCkgPyBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChjb25zdHJhaW50LmxlZnQpIDogY29uc3RyYWludC5sZWZ0O1xuICAgICAgICAgIHZhciBub2RlSWRSaWdodCA9IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQucmlnaHQpID8gbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC5yaWdodCkgOiBjb25zdHJhaW50LnJpZ2h0O1xuXG4gICAgICAgICAgaWYgKCFzZWxmLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuaW5jbHVkZXMobm9kZUlkTGVmdCkpIHtcbiAgICAgICAgICAgIHNlbGYubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKG5vZGVJZExlZnQpO1xuICAgICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChub2RlSWRMZWZ0LCBbXSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhub2RlSWRMZWZ0KSkge1xuICAgICAgICAgICAgICBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KG5vZGVJZExlZnQsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkTGVmdClbMF0pLmdldENlbnRlclgoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KG5vZGVJZExlZnQsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZExlZnQpLmdldENlbnRlclgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKG5vZGVJZFJpZ2h0KSkge1xuICAgICAgICAgICAgc2VsZi5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLnB1c2gobm9kZUlkUmlnaHQpO1xuICAgICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChub2RlSWRSaWdodCwgW10pO1xuICAgICAgICAgICAgaWYgKHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMobm9kZUlkUmlnaHQpKSB7XG4gICAgICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQobm9kZUlkUmlnaHQsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkUmlnaHQpWzBdKS5nZXRDZW50ZXJYKCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChub2RlSWRSaWdodCwgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkUmlnaHQpLmdldENlbnRlclgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChub2RlSWRMZWZ0KS5wdXNoKHsgcmlnaHQ6IG5vZGVJZFJpZ2h0LCBnYXA6IGNvbnN0cmFpbnQuZ2FwIH0pO1xuICAgICAgICAgIHNlbGYubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5nZXQobm9kZUlkUmlnaHQpLnB1c2goeyBsZWZ0OiBub2RlSWRMZWZ0LCBnYXA6IGNvbnN0cmFpbnQuZ2FwIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBub2RlSWRUb3AgPSBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQudG9wKSA/IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC50b3ApIDogY29uc3RyYWludC50b3A7XG4gICAgICAgICAgdmFyIG5vZGVJZEJvdHRvbSA9IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoY29uc3RyYWludC5ib3R0b20pID8gbm9kZVRvRHVtbXlGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChjb25zdHJhaW50LmJvdHRvbSkgOiBjb25zdHJhaW50LmJvdHRvbTtcblxuICAgICAgICAgIGlmICghc2VsZi5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyhub2RlSWRUb3ApKSB7XG4gICAgICAgICAgICBzZWxmLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLnB1c2gobm9kZUlkVG9wKTtcbiAgICAgICAgICAgIHNlbGYubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuc2V0KG5vZGVJZFRvcCwgW10pO1xuICAgICAgICAgICAgaWYgKHNlbGYuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhub2RlSWRUb3ApKSB7XG4gICAgICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KG5vZGVJZFRvcCwgc2VsZi5pZFRvTm9kZU1hcC5nZXQoc2VsZi5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5vZGVJZFRvcClbMF0pLmdldENlbnRlclkoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChub2RlSWRUb3AsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZFRvcCkuZ2V0Q2VudGVyWSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZWxmLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKG5vZGVJZEJvdHRvbSkpIHtcbiAgICAgICAgICAgIHNlbGYubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChub2RlSWRCb3R0b20pO1xuICAgICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5zZXQobm9kZUlkQm90dG9tLCBbXSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKG5vZGVJZEJvdHRvbSkpIHtcbiAgICAgICAgICAgICAgc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQobm9kZUlkQm90dG9tLCBzZWxmLmlkVG9Ob2RlTWFwLmdldChzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkQm90dG9tKVswXSkuZ2V0Q2VudGVyWSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KG5vZGVJZEJvdHRvbSwgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkQm90dG9tKS5nZXRDZW50ZXJZKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLmdldChub2RlSWRUb3ApLnB1c2goeyBib3R0b206IG5vZGVJZEJvdHRvbSwgZ2FwOiBjb25zdHJhaW50LmdhcCB9KTtcbiAgICAgICAgICBzZWxmLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLmdldChub2RlSWRCb3R0b20pLnB1c2goeyB0b3A6IG5vZGVJZFRvcCwgZ2FwOiBjb25zdHJhaW50LmdhcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdWJHcmFwaE9uSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTsgLy8gc3ViZ3JhcGggZnJvbSB2ZXJ0aWNhbCBSUCBjb25zdHJhaW50c1xuICAgICAgdmFyIHN1YkdyYXBoT25WZXJ0aWNhbCA9IG5ldyBNYXAoKTsgLy8gc3ViZ3JhcGggZnJvbSB2ZXJ0aWNhbCBSUCBjb25zdHJhaW50c1xuXG4gICAgICAvLyBjb25zdHJ1Y3Qgc3ViZ3JhcGhzIGZyb20gcmVsYXRpdmUgcGxhY2VtZW50IGNvbnN0cmFpbnRzIFxuICAgICAgdGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAoY29uc3RyYWludCkge1xuICAgICAgICBpZiAoY29uc3RyYWludC5sZWZ0KSB7XG4gICAgICAgICAgdmFyIGxlZnQgPSBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb25zdHJhaW50LmxlZnQpID8gbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC5sZWZ0KSA6IGNvbnN0cmFpbnQubGVmdDtcbiAgICAgICAgICB2YXIgcmlnaHQgPSBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb25zdHJhaW50LnJpZ2h0KSA/IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGNvbnN0cmFpbnQucmlnaHQpIDogY29uc3RyYWludC5yaWdodDtcbiAgICAgICAgICBpZiAoc3ViR3JhcGhPbkhvcml6b250YWwuaGFzKGxlZnQpKSB7XG4gICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5nZXQobGVmdCkucHVzaChyaWdodCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YkdyYXBoT25Ib3Jpem9udGFsLnNldChsZWZ0LCBbcmlnaHRdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1YkdyYXBoT25Ib3Jpem9udGFsLmhhcyhyaWdodCkpIHtcbiAgICAgICAgICAgIHN1YkdyYXBoT25Ib3Jpem9udGFsLmdldChyaWdodCkucHVzaChsZWZ0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViR3JhcGhPbkhvcml6b250YWwuc2V0KHJpZ2h0LCBbbGVmdF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdG9wID0gbm9kZVRvRHVtbXlGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhjb25zdHJhaW50LnRvcCkgPyBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNvbnN0cmFpbnQudG9wKSA6IGNvbnN0cmFpbnQudG9wO1xuICAgICAgICAgIHZhciBib3R0b20gPSBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQuYm90dG9tKSA/IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC5ib3R0b20pIDogY29uc3RyYWludC5ib3R0b207XG4gICAgICAgICAgaWYgKHN1YkdyYXBoT25WZXJ0aWNhbC5oYXModG9wKSkge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLmdldCh0b3ApLnB1c2goYm90dG9tKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLnNldCh0b3AsIFtib3R0b21dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1YkdyYXBoT25WZXJ0aWNhbC5oYXMoYm90dG9tKSkge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLmdldChib3R0b20pLnB1c2godG9wKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLnNldChib3R0b20sIFt0b3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgY29tcG9uZW50cyBmcm9tIGEgZ2l2ZW4gZ3JhcGggXG4gICAgICAvLyBhbHNvIHJldHVybnMgYW4gYXJyYXkgdGhhdCBrZWVwcyB3aGV0aGVyIGVhY2ggY29tcG9uZW50IGNvbnRhaW5zIGZpeGVkIG5vZGVcbiAgICAgIHZhciBjb25zdHJ1Y3RDb21wb25lbnRzID0gZnVuY3Rpb24gY29uc3RydWN0Q29tcG9uZW50cyhncmFwaCwgZml4ZWROb2Rlcykge1xuICAgICAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICB2YXIgaXNGaXhlZCA9IFtdO1xuICAgICAgICB2YXIgcXVldWUgPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcblxuICAgICAgICBncmFwaC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzW2NvdW50XSA9IFtdO1xuICAgICAgICAgICAgaXNGaXhlZFtjb3VudF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Tm9kZSA9IGtleTtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29tcG9uZW50c1tjb3VudF0ucHVzaChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGlmIChmaXhlZE5vZGVzLmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBpc0ZpeGVkW2NvdW50XSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIG5laWdoYm9ycyA9IGdyYXBoLmdldChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgIG5laWdoYm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChuZWlnaGJvcikge1xuICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMobmVpZ2hib3IpKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKG5laWdoYm9yKTtcbiAgICAgICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbY291bnRdLnB1c2gobmVpZ2hib3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgY29tcG9uZW50czogY29tcG9uZW50cywgaXNGaXhlZDogaXNGaXhlZCB9O1xuICAgICAgfTtcblxuICAgICAgdmFyIHJlc3VsdE9uSG9yaXpvbnRhbCA9IGNvbnN0cnVjdENvbXBvbmVudHMoc3ViR3JhcGhPbkhvcml6b250YWwsIHNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbCk7XG4gICAgICB0aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWwgPSByZXN1bHRPbkhvcml6b250YWwuY29tcG9uZW50cztcbiAgICAgIHRoaXMuZml4ZWRDb21wb25lbnRzT25Ib3Jpem9udGFsID0gcmVzdWx0T25Ib3Jpem9udGFsLmlzRml4ZWQ7XG4gICAgICB2YXIgcmVzdWx0T25WZXJ0aWNhbCA9IGNvbnN0cnVjdENvbXBvbmVudHMoc3ViR3JhcGhPblZlcnRpY2FsLCBzZWxmLmZpeGVkTm9kZXNPblZlcnRpY2FsKTtcbiAgICAgIHRoaXMuY29tcG9uZW50c09uVmVydGljYWwgPSByZXN1bHRPblZlcnRpY2FsLmNvbXBvbmVudHM7XG4gICAgICB0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWwgPSByZXN1bHRPblZlcnRpY2FsLmlzRml4ZWQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyB1cGRhdGVzIG5vZGUgZGlzcGxhY2VtZW50cyBiYXNlZCBvbiBjb25zdHJhaW50c1xuQ29TRUxheW91dC5wcm90b3R5cGUudXBkYXRlRGlzcGxhY2VtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50KSB7XG4gICAgdGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG4gICAgICB2YXIgZml4ZWROb2RlID0gc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZURhdGEubm9kZUlkKTtcbiAgICAgIGZpeGVkTm9kZS5kaXNwbGFjZW1lbnRYID0gMDtcbiAgICAgIGZpeGVkTm9kZS5kaXNwbGFjZW1lbnRZID0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKSB7XG4gICAgICB2YXIgYWxsVmVydGljYWxBbGlnbm1lbnRzID0gdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxWZXJ0aWNhbEFsaWdubWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRvdGFsRGlzcGxhY2VtZW50WCA9IDA7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWxsVmVydGljYWxBbGlnbm1lbnRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZml4ZWROb2RlU2V0LmhhcyhhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV1bal0pKSB7XG4gICAgICAgICAgICB0b3RhbERpc3BsYWNlbWVudFggPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvdGFsRGlzcGxhY2VtZW50WCArPSB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV1bal0pLmRpc3BsYWNlbWVudFg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGF2ZXJhZ2VEaXNwbGFjZW1lbnRYID0gdG90YWxEaXNwbGFjZW1lbnRYIC8gYWxsVmVydGljYWxBbGlnbm1lbnRzW2ldLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV1bal0pLmRpc3BsYWNlbWVudFggPSBhdmVyYWdlRGlzcGxhY2VtZW50WDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpIHtcbiAgICAgIHZhciBhbGxIb3Jpem9udGFsQWxpZ25tZW50cyA9IHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxIb3Jpem9udGFsQWxpZ25tZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdG90YWxEaXNwbGFjZW1lbnRZID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmICh0aGlzLmZpeGVkTm9kZVNldC5oYXMoYWxsSG9yaXpvbnRhbEFsaWdubWVudHNbaV1bal0pKSB7XG4gICAgICAgICAgICB0b3RhbERpc3BsYWNlbWVudFkgPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvdGFsRGlzcGxhY2VtZW50WSArPSB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXVtqXSkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYXZlcmFnZURpc3BsYWNlbWVudFkgPSB0b3RhbERpc3BsYWNlbWVudFkgLyBhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXS5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWxsSG9yaXpvbnRhbEFsaWdubWVudHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXVtqXSkuZGlzcGxhY2VtZW50WSA9IGF2ZXJhZ2VEaXNwbGFjZW1lbnRZO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG5cbiAgICBpZiAoQ29TRUNvbnN0YW50cy5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUykge1xuICAgICAgLy8gc2h1ZmZsZSBhcnJheSB0byByYW5kb21pemUgbm9kZSBwcm9jZXNzaW5nIG9yZGVyXG4gICAgICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgJSAxMCA9PSAwKSB7XG4gICAgICAgIHRoaXMuc2h1ZmZsZSh0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwpO1xuICAgICAgICB0aGlzLnNodWZmbGUodGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgaWYgKCFzZWxmLmZpeGVkTm9kZXNPbkhvcml6b250YWwuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICB2YXIgZGlzcGxhY2VtZW50ID0gMDtcbiAgICAgICAgICBpZiAoc2VsZi5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSBzZWxmLmlkVG9Ob2RlTWFwLmdldChzZWxmLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KG5vZGVJZClbMF0pLmRpc3BsYWNlbWVudFg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9IHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChub2RlSWQpLmZvckVhY2goZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnJpZ2h0KSB7XG4gICAgICAgICAgICAgIHZhciBkaWZmID0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChjb25zdHJhaW50LnJpZ2h0KSAtIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQobm9kZUlkKSAtIGRpc3BsYWNlbWVudDtcbiAgICAgICAgICAgICAgaWYgKGRpZmYgPCBjb25zdHJhaW50LmdhcCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYWNlbWVudCAtPSBjb25zdHJhaW50LmdhcCAtIGRpZmY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBkaWZmID0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChub2RlSWQpIC0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChjb25zdHJhaW50LmxlZnQpICsgZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICBpZiAoZGlmZiA8IGNvbnN0cmFpbnQuZ2FwKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50ICs9IGNvbnN0cmFpbnQuZ2FwIC0gZGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQobm9kZUlkLCBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuZ2V0KG5vZGVJZCkgKyBkaXNwbGFjZW1lbnQpO1xuICAgICAgICAgIGlmIChzZWxmLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgIHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRYID0gZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WCA9IGRpc3BsYWNlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICBpZiAoIXNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMobm9kZUlkKSkge1xuICAgICAgICAgIHZhciBkaXNwbGFjZW1lbnQgPSAwO1xuICAgICAgICAgIGlmIChzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMobm9kZUlkKSkge1xuICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gc2VsZi5pZFRvTm9kZU1hcC5nZXQoc2VsZi5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5vZGVJZClbMF0pLmRpc3BsYWNlbWVudFk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9IHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgdmFyIGRpZmYgPSBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChjb25zdHJhaW50LmJvdHRvbSkgLSBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChub2RlSWQpIC0gZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICBpZiAoZGlmZiA8IGNvbnN0cmFpbnQuZ2FwKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50IC09IGNvbnN0cmFpbnQuZ2FwIC0gZGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGRpZmYgPSBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChub2RlSWQpIC0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoY29uc3RyYWludC50b3ApICsgZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICBpZiAoZGlmZiA8IGNvbnN0cmFpbnQuZ2FwKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50ICs9IGNvbnN0cmFpbnQuZ2FwIC0gZGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KG5vZGVJZCwgc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQobm9kZUlkKSArIGRpc3BsYWNlbWVudCk7XG4gICAgICAgICAgaWYgKHNlbGYuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICBzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRZID0gZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WSA9IGRpc3BsYWNlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsW2ldO1xuICAgICAgICBpZiAodGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWxbaV0pIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbXBvbmVudC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoY29tcG9uZW50W2pdKSkge1xuICAgICAgICAgICAgICB0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGNvbXBvbmVudFtqXSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRYID0gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChjb21wb25lbnRbal0pLmRpc3BsYWNlbWVudFggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb21wb25lbnRbal0pKSB7XG4gICAgICAgICAgICAgIHZhciBhY3R1YWxOb2RlcyA9IHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29tcG9uZW50W2pdKTtcbiAgICAgICAgICAgICAgc3VtICs9IGFjdHVhbE5vZGVzLmxlbmd0aCAqIHRoaXMuaWRUb05vZGVNYXAuZ2V0KGFjdHVhbE5vZGVzWzBdKS5kaXNwbGFjZW1lbnRYO1xuICAgICAgICAgICAgICBjb3VudCArPSBhY3R1YWxOb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdW0gKz0gdGhpcy5pZFRvTm9kZU1hcC5nZXQoY29tcG9uZW50W2pdKS5kaXNwbGFjZW1lbnRYO1xuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYXZlcmFnZURpc3BsYWNlbWVudCA9IHN1bSAvIGNvdW50O1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb21wb25lbnRbal0pKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29tcG9uZW50W2pdKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlkVG9Ob2RlTWFwLmdldChub2RlSWQpLmRpc3BsYWNlbWVudFggPSBhdmVyYWdlRGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaWRUb05vZGVNYXAuZ2V0KGNvbXBvbmVudFtqXSkuZGlzcGxhY2VtZW50WCA9IGF2ZXJhZ2VEaXNwbGFjZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbFtpXTtcbiAgICAgICAgaWYgKHRoaXMuZml4ZWRDb21wb25lbnRzT25WZXJ0aWNhbFtpXSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbXBvbmVudFtqXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNvbXBvbmVudFtqXSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRZID0gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChjb21wb25lbnRbal0pLmRpc3BsYWNlbWVudFkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbXBvbmVudFtqXSkpIHtcbiAgICAgICAgICAgICAgdmFyIGFjdHVhbE5vZGVzID0gdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNvbXBvbmVudFtqXSk7XG4gICAgICAgICAgICAgIHN1bSArPSBhY3R1YWxOb2Rlcy5sZW5ndGggKiB0aGlzLmlkVG9Ob2RlTWFwLmdldChhY3R1YWxOb2Rlc1swXSkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgICAgICAgY291bnQgKz0gYWN0dWFsTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3VtICs9IHRoaXMuaWRUb05vZGVNYXAuZ2V0KGNvbXBvbmVudFtqXSkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGF2ZXJhZ2VEaXNwbGFjZW1lbnQgPSBzdW0gLyBjb3VudDtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbXBvbmVudC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhjb21wb25lbnRbal0pKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChjb21wb25lbnRbal0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WSA9IGF2ZXJhZ2VEaXNwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pZFRvTm9kZU1hcC5nZXQoY29tcG9uZW50W2pdKS5kaXNwbGFjZW1lbnRZID0gYXZlcmFnZURpc3BsYWNlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlTGlzdCA9IFtdO1xuICB2YXIgZ3JhcGg7XG5cbiAgdmFyIGdyYXBocyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBocygpO1xuICB2YXIgc2l6ZSA9IGdyYXBocy5sZW5ndGg7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgZ3JhcGggPSBncmFwaHNbaV07XG5cbiAgICBncmFwaC51cGRhdGVDb25uZWN0ZWQoKTtcblxuICAgIGlmICghZ3JhcGguaXNDb25uZWN0ZWQpIHtcbiAgICAgIG5vZGVMaXN0ID0gbm9kZUxpc3QuY29uY2F0KGdyYXBoLmdldE5vZGVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlTGlzdDtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlcyA9IFtdO1xuICBlZGdlcyA9IGVkZ2VzLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuXG4gICAgaWYgKCF2aXNpdGVkLmhhcyhlZGdlKSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gICAgICB2YXIgdGFyZ2V0ID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpIHtcbiAgICAgICAgZWRnZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgUG9pbnREKCkpO1xuICAgICAgICBlZGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBQb2ludEQoKSk7XG4gICAgICAgIHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoZWRnZSk7XG4gICAgICAgIHZpc2l0ZWQuYWRkKGVkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVkZ2VMaXN0ID0gW107XG5cbiAgICAgICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQoc291cmNlLmdldEVkZ2VMaXN0VG9Ob2RlKHRhcmdldCkpO1xuICAgICAgICBlZGdlTGlzdCA9IGVkZ2VMaXN0LmNvbmNhdCh0YXJnZXQuZ2V0RWRnZUxpc3RUb05vZGUoc291cmNlKSk7XG5cbiAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhlZGdlTGlzdFswXSkpIHtcbiAgICAgICAgICBpZiAoZWRnZUxpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgZWRnZUxpc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgdmFyIG11bHRpRWRnZSA9IGVkZ2VMaXN0W2tdO1xuICAgICAgICAgICAgICBtdWx0aUVkZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFBvaW50RCgpKTtcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhtdWx0aUVkZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlZGdlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICB2aXNpdGVkLmFkZChlZGdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2aXNpdGVkLnNpemUgPT0gZWRnZXMubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseSA9IGZ1bmN0aW9uIChmb3Jlc3QpIHtcbiAgLy8gV2UgdGlsZSB0aGUgdHJlZXMgdG8gYSBncmlkIHJvdyBieSByb3c7IGZpcnN0IHRyZWUgc3RhcnRzIGF0ICgwLDApXG4gIHZhciBjdXJyZW50U3RhcnRpbmdQb2ludCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgdmFyIG51bWJlck9mQ29sdW1ucyA9IE1hdGguY2VpbChNYXRoLnNxcnQoZm9yZXN0Lmxlbmd0aCkpO1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGN1cnJlbnRZID0gMDtcbiAgdmFyIGN1cnJlbnRYID0gMDtcbiAgdmFyIHBvaW50ID0gbmV3IFBvaW50RCgwLCAwKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmVzdC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICUgbnVtYmVyT2ZDb2x1bW5zID09IDApIHtcbiAgICAgIC8vIFN0YXJ0IG9mIGEgbmV3IHJvdywgbWFrZSB0aGUgeCBjb29yZGluYXRlIDAsIGluY3JlbWVudCB0aGVcbiAgICAgIC8vIHkgY29vcmRpbmF0ZSB3aXRoIHRoZSBtYXggaGVpZ2h0IG9mIHRoZSBwcmV2aW91cyByb3dcbiAgICAgIGN1cnJlbnRYID0gMDtcbiAgICAgIGN1cnJlbnRZID0gaGVpZ2h0O1xuXG4gICAgICBpZiAoaSAhPSAwKSB7XG4gICAgICAgIGN1cnJlbnRZICs9IENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTjtcbiAgICAgIH1cblxuICAgICAgaGVpZ2h0ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgdHJlZSA9IGZvcmVzdFtpXTtcblxuICAgIC8vIEZpbmQgdGhlIGNlbnRlciBvZiB0aGUgdHJlZVxuICAgIHZhciBjZW50ZXJOb2RlID0gTGF5b3V0LmZpbmRDZW50ZXJPZlRyZWUodHJlZSk7XG5cbiAgICAvLyBTZXQgdGhlIHN0YXJpbmcgcG9pbnQgb2YgdGhlIG5leHQgdHJlZVxuICAgIGN1cnJlbnRTdGFydGluZ1BvaW50LnggPSBjdXJyZW50WDtcbiAgICBjdXJyZW50U3RhcnRpbmdQb2ludC55ID0gY3VycmVudFk7XG5cbiAgICAvLyBEbyBhIHJhZGlhbCBsYXlvdXQgc3RhcnRpbmcgd2l0aCB0aGUgY2VudGVyXG4gICAgcG9pbnQgPSBDb1NFTGF5b3V0LnJhZGlhbExheW91dCh0cmVlLCBjZW50ZXJOb2RlLCBjdXJyZW50U3RhcnRpbmdQb2ludCk7XG5cbiAgICBpZiAocG9pbnQueSA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihwb2ludC55KTtcbiAgICB9XG5cbiAgICBjdXJyZW50WCA9IE1hdGguZmxvb3IocG9pbnQueCArIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTik7XG4gIH1cblxuICB0aGlzLnRyYW5zZm9ybShuZXcgUG9pbnREKExheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWCAtIHBvaW50LnggLyAyLCBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1kgLSBwb2ludC55IC8gMikpO1xufTtcblxuQ29TRUxheW91dC5yYWRpYWxMYXlvdXQgPSBmdW5jdGlvbiAodHJlZSwgY2VudGVyTm9kZSwgc3RhcnRpbmdQb2ludCkge1xuICB2YXIgcmFkaWFsU2VwID0gTWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZSh0cmVlKSwgQ29TRUNvbnN0YW50cy5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTtcbiAgQ29TRUxheW91dC5icmFuY2hSYWRpYWxMYXlvdXQoY2VudGVyTm9kZSwgbnVsbCwgMCwgMzU5LCAwLCByYWRpYWxTZXApO1xuICB2YXIgYm91bmRzID0gTEdyYXBoLmNhbGN1bGF0ZUJvdW5kcyh0cmVlKTtcblxuICB2YXIgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSgpO1xuICB0cmFuc2Zvcm0uc2V0RGV2aWNlT3JnWChib3VuZHMuZ2V0TWluWCgpKTtcbiAgdHJhbnNmb3JtLnNldERldmljZU9yZ1koYm91bmRzLmdldE1pblkoKSk7XG4gIHRyYW5zZm9ybS5zZXRXb3JsZE9yZ1goc3RhcnRpbmdQb2ludC54KTtcbiAgdHJhbnNmb3JtLnNldFdvcmxkT3JnWShzdGFydGluZ1BvaW50LnkpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gdHJlZVtpXTtcbiAgICBub2RlLnRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICB9XG5cbiAgdmFyIGJvdHRvbVJpZ2h0ID0gbmV3IFBvaW50RChib3VuZHMuZ2V0TWF4WCgpLCBib3VuZHMuZ2V0TWF4WSgpKTtcblxuICByZXR1cm4gdHJhbnNmb3JtLmludmVyc2VUcmFuc2Zvcm1Qb2ludChib3R0b21SaWdodCk7XG59O1xuXG5Db1NFTGF5b3V0LmJyYW5jaFJhZGlhbExheW91dCA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRPZk5vZGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBkaXN0YW5jZSwgcmFkaWFsU2VwYXJhdGlvbikge1xuICAvLyBGaXJzdCwgcG9zaXRpb24gdGhpcyBub2RlIGJ5IGZpbmRpbmcgaXRzIGFuZ2xlLlxuICB2YXIgaGFsZkludGVydmFsID0gKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSArIDEpIC8gMjtcblxuICBpZiAoaGFsZkludGVydmFsIDwgMCkge1xuICAgIGhhbGZJbnRlcnZhbCArPSAxODA7XG4gIH1cblxuICB2YXIgbm9kZUFuZ2xlID0gKGhhbGZJbnRlcnZhbCArIHN0YXJ0QW5nbGUpICUgMzYwO1xuICB2YXIgdGV0YSA9IG5vZGVBbmdsZSAqIElHZW9tZXRyeS5UV09fUEkgLyAzNjA7XG5cbiAgLy8gTWFrZSBwb2xhciB0byBqYXZhIGNvcmRpbmF0ZSBjb252ZXJzaW9uLlxuICB2YXIgY29zX3RldGEgPSBNYXRoLmNvcyh0ZXRhKTtcbiAgdmFyIHhfID0gZGlzdGFuY2UgKiBNYXRoLmNvcyh0ZXRhKTtcbiAgdmFyIHlfID0gZGlzdGFuY2UgKiBNYXRoLnNpbih0ZXRhKTtcblxuICBub2RlLnNldENlbnRlcih4XywgeV8pO1xuXG4gIC8vIFRyYXZlcnNlIGFsbCBuZWlnaGJvcnMgb2YgdGhpcyBub2RlIGFuZCByZWN1cnNpdmVseSBjYWxsIHRoaXNcbiAgLy8gZnVuY3Rpb24uXG4gIHZhciBuZWlnaGJvckVkZ2VzID0gW107XG4gIG5laWdoYm9yRWRnZXMgPSBuZWlnaGJvckVkZ2VzLmNvbmNhdChub2RlLmdldEVkZ2VzKCkpO1xuICB2YXIgY2hpbGRDb3VudCA9IG5laWdoYm9yRWRnZXMubGVuZ3RoO1xuXG4gIGlmIChwYXJlbnRPZk5vZGUgIT0gbnVsbCkge1xuICAgIGNoaWxkQ291bnQtLTtcbiAgfVxuXG4gIHZhciBicmFuY2hDb3VudCA9IDA7XG5cbiAgdmFyIGluY0VkZ2VzQ291bnQgPSBuZWlnaGJvckVkZ2VzLmxlbmd0aDtcbiAgdmFyIHN0YXJ0SW5kZXg7XG5cbiAgdmFyIGVkZ2VzID0gbm9kZS5nZXRFZGdlc0JldHdlZW4ocGFyZW50T2ZOb2RlKTtcblxuICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWRnZXMsIHBydW5lIHRoZW0gdW50aWwgdGhlcmUgcmVtYWlucyBvbmx5IG9uZVxuICAvLyBlZGdlLlxuICB3aGlsZSAoZWRnZXMubGVuZ3RoID4gMSkge1xuICAgIC8vbmVpZ2hib3JFZGdlcy5yZW1vdmUoZWRnZXMucmVtb3ZlKDApKTtcbiAgICB2YXIgdGVtcCA9IGVkZ2VzWzBdO1xuICAgIGVkZ2VzLnNwbGljZSgwLCAxKTtcbiAgICB2YXIgaW5kZXggPSBuZWlnaGJvckVkZ2VzLmluZGV4T2YodGVtcCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIG5laWdoYm9yRWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaW5jRWRnZXNDb3VudC0tO1xuICAgIGNoaWxkQ291bnQtLTtcbiAgfVxuXG4gIGlmIChwYXJlbnRPZk5vZGUgIT0gbnVsbCkge1xuICAgIC8vYXNzZXJ0IGVkZ2VzLmxlbmd0aCA9PSAxO1xuICAgIHN0YXJ0SW5kZXggPSAobmVpZ2hib3JFZGdlcy5pbmRleE9mKGVkZ2VzWzBdKSArIDEpICUgaW5jRWRnZXNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBzdGFydEluZGV4ID0gMDtcbiAgfVxuXG4gIHZhciBzdGVwQW5nbGUgPSBNYXRoLmFicyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gY2hpbGRDb3VudDtcblxuICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgYnJhbmNoQ291bnQgIT0gY2hpbGRDb3VudDsgaSA9ICsraSAlIGluY0VkZ2VzQ291bnQpIHtcbiAgICB2YXIgY3VycmVudE5laWdoYm9yID0gbmVpZ2hib3JFZGdlc1tpXS5nZXRPdGhlckVuZChub2RlKTtcblxuICAgIC8vIERvbid0IGJhY2sgdHJhdmVyc2UgdG8gcm9vdCBub2RlIGluIGN1cnJlbnQgdHJlZS5cbiAgICBpZiAoY3VycmVudE5laWdoYm9yID09IHBhcmVudE9mTm9kZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkU3RhcnRBbmdsZSA9IChzdGFydEFuZ2xlICsgYnJhbmNoQ291bnQgKiBzdGVwQW5nbGUpICUgMzYwO1xuICAgIHZhciBjaGlsZEVuZEFuZ2xlID0gKGNoaWxkU3RhcnRBbmdsZSArIHN0ZXBBbmdsZSkgJSAzNjA7XG5cbiAgICBDb1NFTGF5b3V0LmJyYW5jaFJhZGlhbExheW91dChjdXJyZW50TmVpZ2hib3IsIG5vZGUsIGNoaWxkU3RhcnRBbmdsZSwgY2hpbGRFbmRBbmdsZSwgZGlzdGFuY2UgKyByYWRpYWxTZXBhcmF0aW9uLCByYWRpYWxTZXBhcmF0aW9uKTtcblxuICAgIGJyYW5jaENvdW50Kys7XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQubWF4RGlhZ29uYWxJblRyZWUgPSBmdW5jdGlvbiAodHJlZSkge1xuICB2YXIgbWF4RGlhZ29uYWwgPSBJbnRlZ2VyLk1JTl9WQUxVRTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IHRyZWVbaV07XG4gICAgdmFyIGRpYWdvbmFsID0gbm9kZS5nZXREaWFnb25hbCgpO1xuXG4gICAgaWYgKGRpYWdvbmFsID4gbWF4RGlhZ29uYWwpIHtcbiAgICAgIG1heERpYWdvbmFsID0gZGlhZ29uYWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heERpYWdvbmFsO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICAvLyBmb3JtdWxhIGlzIDIgeCAobGV2ZWwgKyAxKSB4IGlkZWFsRWRnZUxlbmd0aFxuICByZXR1cm4gMiAqICh0aGlzLmxldmVsICsgMSkgKiB0aGlzLmlkZWFsRWRnZUxlbmd0aDtcbn07XG5cbi8vIFRpbGluZyBtZXRob2RzXG5cbi8vIEdyb3VwIHplcm8gZGVncmVlIG1lbWJlcnMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHRvIGJlIHRpbGVkLCBjcmVhdGUgZHVtbXkgcGFyZW50cyB3aGVyZSBuZWVkZWQgYW5kIGZpbGwgbWVtYmVyR3JvdXBzIGJ5IHRoZWlyIGR1bW1wIHBhcmVudCBpZCdzXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIC8vIGFycmF5IG9mIFtwYXJlbnRfaWQgeCBvbmVEZWdyZWVOb2RlX2lkXVxuICB2YXIgdGVtcE1lbWJlckdyb3VwcyA9IHt9OyAvLyBBIHRlbXBvcmFyeSBtYXAgb2YgcGFyZW50IG5vZGUgYW5kIGl0cyB6ZXJvIGRlZ3JlZSBtZW1iZXJzXG4gIHRoaXMubWVtYmVyR3JvdXBzID0ge307IC8vIEEgbWFwIG9mIGR1bW15IHBhcmVudCBub2RlIGFuZCBpdHMgemVybyBkZWdyZWUgbWVtYmVycyB3aG9zZSBwYXJlbnRzIGFyZSBub3QgdG8gYmUgdGlsZWRcbiAgdGhpcy5pZFRvRHVtbXlOb2RlID0ge307IC8vIEEgbWFwIG9mIGlkIHRvIGR1bW15IG5vZGUgXG5cbiAgdmFyIHplcm9EZWdyZWUgPSBbXTsgLy8gTGlzdCBvZiB6ZXJvIGRlZ3JlZSBub2RlcyB3aG9zZSBwYXJlbnRzIGFyZSBub3QgdG8gYmUgdGlsZWRcbiAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcblxuICAvLyBGaWxsIHplcm8gZGVncmVlIGxpc3RcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgdmFyIHBhcmVudCA9IG5vZGUuZ2V0UGFyZW50KCk7XG4gICAgLy8gSWYgYSBub2RlIGhhcyB6ZXJvIGRlZ3JlZSBhbmQgaXRzIHBhcmVudCBpcyBub3QgdG8gYmUgdGlsZWQgaWYgZXhpc3RzIGFkZCB0aGF0IG5vZGUgdG8gemVyb0RlZ3JlcyBsaXN0XG4gICAgaWYgKHRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihub2RlKSA9PT0gMCAmJiAocGFyZW50LmlkID09IHVuZGVmaW5lZCB8fCAhdGhpcy5nZXRUb0JlVGlsZWQocGFyZW50KSkpIHtcbiAgICAgIHplcm9EZWdyZWUucHVzaChub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgYSBtYXAgb2YgcGFyZW50IG5vZGUgYW5kIGl0cyB6ZXJvIGRlZ3JlZSBtZW1iZXJzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgemVyb0RlZ3JlZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gemVyb0RlZ3JlZVtpXTsgLy8gWmVybyBkZWdyZWUgbm9kZSBpdHNlbGZcbiAgICB2YXIgcF9pZCA9IG5vZGUuZ2V0UGFyZW50KCkuaWQ7IC8vIFBhcmVudCBpZFxuXG4gICAgaWYgKHR5cGVvZiB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdID09PSBcInVuZGVmaW5lZFwiKSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdID0gW107XG5cbiAgICB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdID0gdGVtcE1lbWJlckdyb3Vwc1twX2lkXS5jb25jYXQobm9kZSk7IC8vIFB1c2ggbm9kZSB0byB0aGUgbGlzdCBiZWxvbmdzIHRvIGl0cyBwYXJlbnQgaW4gdGVtcE1lbWJlckdyb3Vwc1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBub2RlcyBhdCBhIGxldmVsLCBjcmVhdGUgYSBkdW1teSBjb21wb3VuZCBmb3IgdGhlbVxuICBPYmplY3Qua2V5cyh0ZW1wTWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uIChwX2lkKSB7XG4gICAgaWYgKHRlbXBNZW1iZXJHcm91cHNbcF9pZF0ubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGR1bW15Q29tcG91bmRJZCA9IFwiRHVtbXlDb21wb3VuZF9cIiArIHBfaWQ7IC8vIFRoZSBpZCBvZiBkdW1teSBjb21wb3VuZCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgc29vblxuICAgICAgc2VsZi5tZW1iZXJHcm91cHNbZHVtbXlDb21wb3VuZElkXSA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF07IC8vIEFkZCBkdW1teSBjb21wb3VuZCB0byBtZW1iZXJHcm91cHNcblxuICAgICAgdmFyIHBhcmVudCA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF1bMF0uZ2V0UGFyZW50KCk7IC8vIFRoZSBwYXJlbnQgb2YgemVybyBkZWdyZWUgbm9kZXMgd2lsbCBiZSB0aGUgcGFyZW50IG9mIG5ldyBkdW1teSBjb21wb3VuZFxuXG4gICAgICAvLyBDcmVhdGUgYSBkdW1teSBjb21wb3VuZCB3aXRoIGNhbGN1bGF0ZWQgaWRcbiAgICAgIHZhciBkdW1teUNvbXBvdW5kID0gbmV3IENvU0VOb2RlKHNlbGYuZ3JhcGhNYW5hZ2VyKTtcbiAgICAgIGR1bW15Q29tcG91bmQuaWQgPSBkdW1teUNvbXBvdW5kSWQ7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdMZWZ0ID0gcGFyZW50LnBhZGRpbmdMZWZ0IHx8IDA7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdSaWdodCA9IHBhcmVudC5wYWRkaW5nUmlnaHQgfHwgMDtcbiAgICAgIGR1bW15Q29tcG91bmQucGFkZGluZ0JvdHRvbSA9IHBhcmVudC5wYWRkaW5nQm90dG9tIHx8IDA7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdUb3AgPSBwYXJlbnQucGFkZGluZ1RvcCB8fCAwO1xuXG4gICAgICBzZWxmLmlkVG9EdW1teU5vZGVbZHVtbXlDb21wb3VuZElkXSA9IGR1bW15Q29tcG91bmQ7XG5cbiAgICAgIHZhciBkdW1teVBhcmVudEdyYXBoID0gc2VsZi5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoc2VsZi5uZXdHcmFwaCgpLCBkdW1teUNvbXBvdW5kKTtcbiAgICAgIHZhciBwYXJlbnRHcmFwaCA9IHBhcmVudC5nZXRDaGlsZCgpO1xuXG4gICAgICAvLyBBZGQgZHVtbXkgY29tcG91bmQgdG8gcGFyZW50IHRoZSBncmFwaFxuICAgICAgcGFyZW50R3JhcGguYWRkKGR1bW15Q29tcG91bmQpO1xuXG4gICAgICAvLyBGb3IgZWFjaCB6ZXJvIGRlZ3JlZSBub2RlIGluIHRoaXMgbGV2ZWwgcmVtb3ZlIGl0IGZyb20gaXRzIHBhcmVudCBncmFwaCBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaCBvZiBkdW1teSBwYXJlbnRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVtcE1lbWJlckdyb3Vwc1twX2lkXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF1baV07XG5cbiAgICAgICAgcGFyZW50R3JhcGgucmVtb3ZlKG5vZGUpO1xuICAgICAgICBkdW1teVBhcmVudEdyYXBoLmFkZChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaGlsZEdyYXBoTWFwID0ge307XG4gIHZhciBpZFRvTm9kZSA9IHt9O1xuXG4gIC8vIEdldCBjb21wb3VuZCBvcmRlcmluZyBieSBmaW5kaW5nIHRoZSBpbm5lciBvbmUgZmlyc3RcbiAgdGhpcy5wZXJmb3JtREZTT25Db21wb3VuZHMoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcG91bmRPcmRlci5sZW5ndGg7IGkrKykge1xuXG4gICAgaWRUb05vZGVbdGhpcy5jb21wb3VuZE9yZGVyW2ldLmlkXSA9IHRoaXMuY29tcG91bmRPcmRlcltpXTtcbiAgICBjaGlsZEdyYXBoTWFwW3RoaXMuY29tcG91bmRPcmRlcltpXS5pZF0gPSBbXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW2ldLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSk7XG5cbiAgICAvLyBSZW1vdmUgY2hpbGRyZW4gb2YgY29tcG91bmRzXG4gICAgdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltpXS5nZXRDaGlsZCgpKTtcbiAgICB0aGlzLmNvbXBvdW5kT3JkZXJbaV0uY2hpbGQgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpO1xuXG4gIC8vIFRpbGUgdGhlIHJlbW92ZWQgY2hpbGRyZW5cbiAgdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKGNoaWxkR3JhcGhNYXAsIGlkVG9Ob2RlKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRpbGVkWmVyb0RlZ3JlZVBhY2sgPSB0aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2sgPSBbXTtcblxuICBPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgY29tcG91bmROb2RlID0gc2VsZi5pZFRvRHVtbXlOb2RlW2lkXTsgLy8gR2V0IHRoZSBkdW1teSBjb21wb3VuZFxuXG4gICAgdGlsZWRaZXJvRGVncmVlUGFja1tpZF0gPSBzZWxmLnRpbGVOb2RlcyhzZWxmLm1lbWJlckdyb3Vwc1tpZF0sIGNvbXBvdW5kTm9kZS5wYWRkaW5nTGVmdCArIGNvbXBvdW5kTm9kZS5wYWRkaW5nUmlnaHQpO1xuXG4gICAgLy8gU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBkdW1teSBjb21wb3VuZCBhcyBjYWxjdWxhdGVkXG4gICAgY29tcG91bmROb2RlLnJlY3Qud2lkdGggPSB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS53aWR0aDtcbiAgICBjb21wb3VuZE5vZGUucmVjdC5oZWlnaHQgPSB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS5oZWlnaHQ7XG4gICAgY29tcG91bmROb2RlLnNldENlbnRlcih0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS5jZW50ZXJYLCB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS5jZW50ZXJZKTtcblxuICAgIC8vIGNvbXBvdW5kIGxlZnQgYW5kIHRvcCBtYXJnaW5ncyBmb3IgbGFiZWxzXG4gICAgLy8gd2hlbiBub2RlIGxhYmVscyBhcmUgaW5jbHVkZWQsIHRoZXNlIHZhbHVlcyBtYXkgYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYmVsb3cgYW5kIGFyZSB1c2VkIGluIHRpbGluZ1Bvc3RMYXlvdXQsXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgc3RheSBhcyB6ZXJvXG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luTGVmdCA9IDA7XG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luVG9wID0gMDtcblxuICAgIC8vIFVwZGF0ZSBjb21wb3VuZCBib3VuZHMgY29uc2lkZXJpbmcgaXRzIGxhYmVsIHByb3BlcnRpZXMgYW5kIHNldCBsYWJlbCBtYXJnaW5zIGZvciBsZWZ0IGFuZCB0b3BcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpIHtcblxuICAgICAgdmFyIHdpZHRoID0gY29tcG91bmROb2RlLnJlY3Qud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0O1xuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsV2lkdGgpIHtcbiAgICAgICAgaWYgKGNvbXBvdW5kTm9kZS5sYWJlbFBvc0hvcml6b250YWwgPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gY29tcG91bmROb2RlLmxhYmVsV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IChjb21wb3VuZE5vZGUubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldFdpZHRoKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcInRvcFwiKSB7XG4gICAgICAgICAgY29tcG91bmROb2RlLnJlY3QueSAtPSBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQ7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldEhlaWdodChoZWlnaHQgKyBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQpO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5sYWJlbE1hcmdpblRvcCA9IGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5yZWN0LnkgLT0gKGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5Ub3AgPSAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zVmVydGljYWwgPT0gXCJib3R0b21cIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoaGVpZ2h0ICsgY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gdGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxDb21wb3VuZE5vZGUgPSB0aGlzLmNvbXBvdW5kT3JkZXJbaV07XG4gICAgdmFyIGlkID0gbENvbXBvdW5kTm9kZS5pZDtcbiAgICB2YXIgaG9yaXpvbnRhbE1hcmdpbiA9IGxDb21wb3VuZE5vZGUucGFkZGluZ0xlZnQ7XG4gICAgdmFyIHZlcnRpY2FsTWFyZ2luID0gbENvbXBvdW5kTm9kZS5wYWRkaW5nVG9wO1xuICAgIHZhciBsYWJlbE1hcmdpbkxlZnQgPSBsQ29tcG91bmROb2RlLmxhYmVsTWFyZ2luTGVmdDtcbiAgICB2YXIgbGFiZWxNYXJnaW5Ub3AgPSBsQ29tcG91bmROb2RlLmxhYmVsTWFyZ2luVG9wO1xuXG4gICAgdGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbaWRdLCBsQ29tcG91bmROb2RlLnJlY3QueCwgbENvbXBvdW5kTm9kZS5yZWN0LnksIGhvcml6b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luLCBsYWJlbE1hcmdpbkxlZnQsIGxhYmVsTWFyZ2luVG9wKTtcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0aWxlZFBhY2sgPSB0aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s7XG5cbiAgT2JqZWN0LmtleXModGlsZWRQYWNrKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBjb21wb3VuZE5vZGUgPSBzZWxmLmlkVG9EdW1teU5vZGVbaWRdOyAvLyBHZXQgdGhlIGR1bW15IGNvbXBvdW5kIGJ5IGl0cyBpZFxuICAgIHZhciBob3Jpem9udGFsTWFyZ2luID0gY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0O1xuICAgIHZhciB2ZXJ0aWNhbE1hcmdpbiA9IGNvbXBvdW5kTm9kZS5wYWRkaW5nVG9wO1xuICAgIHZhciBsYWJlbE1hcmdpbkxlZnQgPSBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0O1xuICAgIHZhciBsYWJlbE1hcmdpblRvcCA9IGNvbXBvdW5kTm9kZS5sYWJlbE1hcmdpblRvcDtcblxuICAgIC8vIEFkanVzdCB0aGUgcG9zaXRpb25zIG9mIG5vZGVzIHdydCBpdHMgY29tcG91bmRcbiAgICBzZWxmLmFkanVzdExvY2F0aW9ucyh0aWxlZFBhY2tbaWRdLCBjb21wb3VuZE5vZGUucmVjdC54LCBjb21wb3VuZE5vZGUucmVjdC55LCBob3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbiwgbGFiZWxNYXJnaW5MZWZ0LCBsYWJlbE1hcmdpblRvcCk7XG4gIH0pO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0VG9CZVRpbGVkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGlkID0gbm9kZS5pZDtcbiAgLy9maXJzdGx5IGNoZWNrIHRoZSBwcmV2aW91cyByZXN1bHRzXG4gIGlmICh0aGlzLnRvQmVUaWxlZFtpZF0gIT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLnRvQmVUaWxlZFtpZF07XG4gIH1cblxuICAvL29ubHkgY29tcG91bmQgbm9kZXMgYXJlIHRvIGJlIHRpbGVkXG4gIHZhciBjaGlsZEdyYXBoID0gbm9kZS5nZXRDaGlsZCgpO1xuICBpZiAoY2hpbGRHcmFwaCA9PSBudWxsKSB7XG4gICAgdGhpcy50b0JlVGlsZWRbaWRdID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gY2hpbGRHcmFwaC5nZXROb2RlcygpOyAvLyBHZXQgdGhlIGNoaWxkcmVuIG5vZGVzXG5cbiAgLy9hIGNvbXBvdW5kIG5vZGUgaXMgbm90IHRvIGJlIHRpbGVkIGlmIGFsbCBvZiBpdHMgY29tcG91bmQgY2hpbGRyZW4gYXJlIG5vdCB0byBiZSB0aWxlZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRoZUNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAodGhpcy5nZXROb2RlRGVncmVlKHRoZUNoaWxkKSA+IDApIHtcbiAgICAgIHRoaXMudG9CZVRpbGVkW2lkXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vcGFzcyB0aGUgY2hpbGRyZW4gbm90IGhhdmluZyB0aGUgY29tcG91bmQgc3RydWN0dXJlXG4gICAgaWYgKHRoZUNoaWxkLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgICAgdGhpcy50b0JlVGlsZWRbdGhlQ2hpbGQuaWRdID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZ2V0VG9CZVRpbGVkKHRoZUNoaWxkKSkge1xuICAgICAgdGhpcy50b0JlVGlsZWRbaWRdID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHRoaXMudG9CZVRpbGVkW2lkXSA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gR2V0IGRlZ3JlZSBvZiBhIG5vZGUgZGVwZW5kaW5nIG9mIGl0cyBlZGdlcyBhbmQgaW5kZXBlbmRlbnQgb2YgaXRzIGNoaWxkcmVuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGlkID0gbm9kZS5pZDtcbiAgdmFyIGVkZ2VzID0gbm9kZS5nZXRFZGdlcygpO1xuICB2YXIgZGVncmVlID0gMDtcblxuICAvLyBGb3IgdGhlIGVkZ2VzIGNvbm5lY3RlZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICBpZiAoZWRnZS5nZXRTb3VyY2UoKS5pZCAhPT0gZWRnZS5nZXRUYXJnZXQoKS5pZCkge1xuICAgICAgZGVncmVlID0gZGVncmVlICsgMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZ3JlZTtcbn07XG5cbi8vIEdldCBkZWdyZWUgb2YgYSBub2RlIHdpdGggaXRzIGNoaWxkcmVuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGRlZ3JlZSA9IHRoaXMuZ2V0Tm9kZURlZ3JlZShub2RlKTtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZ3JlZTtcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkKCkuZ2V0Tm9kZXMoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGRlZ3JlZSArPSB0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oY2hpbGQpO1xuICB9XG4gIHJldHVybiBkZWdyZWU7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY29tcG91bmRPcmRlciA9IFtdO1xuICB0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoY2hpbGQuZ2V0Q2hpbGQoKSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKGNoaWxkLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFRvQmVUaWxlZChjaGlsZCkpIHtcbiAgICAgIHRoaXMuY29tcG91bmRPcmRlci5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuKiBUaGlzIG1ldGhvZCBwbGFjZXMgZWFjaCB6ZXJvIGRlZ3JlZSBtZW1iZXIgd3J0IGdpdmVuICh4LHkpIGNvb3JkaW5hdGVzICh0b3AgbGVmdCkuXG4qL1xuQ29TRUxheW91dC5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbiwgeCwgeSwgY29tcG91bmRIb3Jpem9udGFsTWFyZ2luLCBjb21wb3VuZFZlcnRpY2FsTWFyZ2luLCBjb21wb3VuZExhYmVsTWFyZ2luTGVmdCwgY29tcG91bmRMYWJlbE1hcmdpblRvcCkge1xuICB4ICs9IGNvbXBvdW5kSG9yaXpvbnRhbE1hcmdpbiArIGNvbXBvdW5kTGFiZWxNYXJnaW5MZWZ0O1xuICB5ICs9IGNvbXBvdW5kVmVydGljYWxNYXJnaW4gKyBjb21wb3VuZExhYmVsTWFyZ2luVG9wO1xuXG4gIHZhciBsZWZ0ID0geDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJvdyA9IG9yZ2FuaXphdGlvbi5yb3dzW2ldO1xuICAgIHggPSBsZWZ0O1xuICAgIHZhciBtYXhIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBsbm9kZSA9IHJvd1tqXTtcblxuICAgICAgbG5vZGUucmVjdC54ID0geDsgLy8gKyBsbm9kZS5yZWN0LndpZHRoIC8gMjtcbiAgICAgIGxub2RlLnJlY3QueSA9IHk7IC8vICsgbG5vZGUucmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgICB4ICs9IGxub2RlLnJlY3Qud2lkdGggKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmc7XG5cbiAgICAgIGlmIChsbm9kZS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gbG5vZGUucmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgeSArPSBtYXhIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzID0gZnVuY3Rpb24gKGNoaWxkR3JhcGhNYXAsIGlkVG9Ob2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy50aWxlZE1lbWJlclBhY2sgPSBbXTtcblxuICBPYmplY3Qua2V5cyhjaGlsZEdyYXBoTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIC8vIEdldCB0aGUgY29tcG91bmQgbm9kZVxuICAgIHZhciBjb21wb3VuZE5vZGUgPSBpZFRvTm9kZVtpZF07XG5cbiAgICBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0gPSBzZWxmLnRpbGVOb2RlcyhjaGlsZEdyYXBoTWFwW2lkXSwgY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0ICsgY29tcG91bmROb2RlLnBhZGRpbmdSaWdodCk7XG5cbiAgICBjb21wb3VuZE5vZGUucmVjdC53aWR0aCA9IHNlbGYudGlsZWRNZW1iZXJQYWNrW2lkXS53aWR0aDtcbiAgICBjb21wb3VuZE5vZGUucmVjdC5oZWlnaHQgPSBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0uaGVpZ2h0O1xuICAgIGNvbXBvdW5kTm9kZS5zZXRDZW50ZXIoc2VsZi50aWxlZE1lbWJlclBhY2tbaWRdLmNlbnRlclgsIHNlbGYudGlsZWRNZW1iZXJQYWNrW2lkXS5jZW50ZXJZKTtcblxuICAgIC8vIGNvbXBvdW5kIGxlZnQgYW5kIHRvcCBtYXJnaW5ncyBmb3IgbGFiZWxzXG4gICAgLy8gd2hlbiBub2RlIGxhYmVscyBhcmUgaW5jbHVkZWQsIHRoZXNlIHZhbHVlcyBtYXkgYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYmVsb3cgYW5kIGFyZSB1c2VkIGluIHRpbGluZ1Bvc3RMYXlvdXQsXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgc3RheSBhcyB6ZXJvXG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luTGVmdCA9IDA7XG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luVG9wID0gMDtcblxuICAgIC8vIFVwZGF0ZSBjb21wb3VuZCBib3VuZHMgY29uc2lkZXJpbmcgaXRzIGxhYmVsIHByb3BlcnRpZXMgYW5kIHNldCBsYWJlbCBtYXJnaW5zIGZvciBsZWZ0IGFuZCB0b3BcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpIHtcblxuICAgICAgdmFyIHdpZHRoID0gY29tcG91bmROb2RlLnJlY3Qud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0O1xuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsV2lkdGgpIHtcbiAgICAgICAgaWYgKGNvbXBvdW5kTm9kZS5sYWJlbFBvc0hvcml6b250YWwgPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gY29tcG91bmROb2RlLmxhYmVsV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IChjb21wb3VuZE5vZGUubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldFdpZHRoKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcInRvcFwiKSB7XG4gICAgICAgICAgY29tcG91bmROb2RlLnJlY3QueSAtPSBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQ7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldEhlaWdodChoZWlnaHQgKyBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQpO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5sYWJlbE1hcmdpblRvcCA9IGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5yZWN0LnkgLT0gKGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5Ub3AgPSAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zVmVydGljYWwgPT0gXCJib3R0b21cIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoaGVpZ2h0ICsgY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlTm9kZXMgPSBmdW5jdGlvbiAobm9kZXMsIG1pbldpZHRoKSB7XG4gIHZhciBob3Jpem9udGFsT3JnID0gdGhpcy50aWxlTm9kZXNCeUZhdm9yaW5nRGltKG5vZGVzLCBtaW5XaWR0aCwgdHJ1ZSk7XG4gIHZhciB2ZXJ0aWNhbE9yZyA9IHRoaXMudGlsZU5vZGVzQnlGYXZvcmluZ0RpbShub2RlcywgbWluV2lkdGgsIGZhbHNlKTtcblxuICB2YXIgaG9yaXpvbnRhbFJhdGlvID0gdGhpcy5nZXRPcmdSYXRpbyhob3Jpem9udGFsT3JnKTtcbiAgdmFyIHZlcnRpY2FsUmF0aW8gPSB0aGlzLmdldE9yZ1JhdGlvKHZlcnRpY2FsT3JnKTtcbiAgdmFyIGJlc3RPcmc7XG5cbiAgLy8gdGhlIGJlc3QgcmF0aW8gaXMgdGhlIG9uZSB0aGF0IGlzIGNsb3NlciB0byAxIHNpbmNlIHRoZSByYXRpb3MgYXJlIGFscmVhZHkgbm9ybWFsaXplZFxuICAvLyBhbmQgdGhlIGJlc3Qgb3JnYW5pemF0aW9uIGlzIHRoZSBvbmUgdGhhdCBoYXMgdGhlIGJlc3QgcmF0aW9cbiAgaWYgKHZlcnRpY2FsUmF0aW8gPCBob3Jpem9udGFsUmF0aW8pIHtcbiAgICBiZXN0T3JnID0gdmVydGljYWxPcmc7XG4gIH0gZWxzZSB7XG4gICAgYmVzdE9yZyA9IGhvcml6b250YWxPcmc7XG4gIH1cblxuICByZXR1cm4gYmVzdE9yZztcbn07XG5cbi8vIGdldCB0aGUgd2lkdGgvaGVpZ2h0IHJhdGlvIG9mIHRoZSBvcmdhbml6YXRpb24gdGhhdCBpcyBub3JtYWxpemVkIHNvIHRoYXQgaXQgd2lsbCBub3QgYmUgbGVzcyB0aGFuIDFcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldE9yZ1JhdGlvID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICAvLyBnZXQgZGltZW5zaW9ucyBhbmQgY2FsY3VsYXRlIHRoZSBpbml0aWFsIHJhdGlvXG4gIHZhciB3aWR0aCA9IG9yZ2FuaXphdGlvbi53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9yZ2FuaXphdGlvbi5oZWlnaHQ7XG4gIHZhciByYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuXG4gIC8vIGlmIHRoZSBpbml0aWFsIHJhdGlvIGlzIGxlc3MgdGhlbiAxIHRoZW4gaW52ZXJzZSBpdFxuICBpZiAocmF0aW8gPCAxKSB7XG4gICAgcmF0aW8gPSAxIC8gcmF0aW87XG4gIH1cblxuICAvLyByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcmF0aW9cbiAgcmV0dXJuIHJhdGlvO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIGlkZWFsIHdpZHRoIGZvciB0aGUgcm93cy4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0XG4gKiBlYWNoIG5vZGUgaGFzIHRoZSBzYW1lIHNpemVzIGFuZCBjYWxjdWxhdGVzIHRoZSBpZGVhbCByb3cgd2lkdGggdGhhdFxuICogYXBwcm94aW1hdGVzIGEgc3F1YXJlIHNoYXBlZCBjb21wbGV4IGFjY29yZGluZ2x5LiBIb3dldmVyLCBzaW5jZSBub2RlcyB3b3VsZFxuICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgc29tZSByb3dzIHdvdWxkIGhhdmUgZGlmZmVyZW50IHNpemVzIGFuZCB0aGUgcmVzdWx0aW5nXG4gKiBzaGFwZSB3b3VsZCBub3QgYmUgYW4gZXhhY3Qgc3F1YXJlLlxuICovXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYWxjSWRlYWxSb3dXaWR0aCA9IGZ1bmN0aW9uIChtZW1iZXJzLCBmYXZvckhvcml6b250YWxEaW0pIHtcbiAgLy8gVG8gYXBwcm94aW1hdGUgYSBzcXVhcmUgc2hhcGVkIGNvbXBsZXggd2UgbmVlZCB0byBtYWtlIGNvbXBsZXggd2lkdGggZXF1YWwgdG8gY29tcGxleCBoZWlnaHQuXG4gIC8vIFRvIGFjaGlldmUgdGhpcyB3ZSBuZWVkIHRvIHNvbHZlIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24gc3lzdGVtIGZvciBoYzpcbiAgLy8gKHggKyBieCkgKiBoYyAtIGJ4ID0gKHkgKyBieSkgKiB2YyAtIGJ5LCBoYyAqIHZjID0gblxuICAvLyB3aGVyZSB4IGlzIHRoZSBhdmFyYWdlIHdpZHRoIG9mIHRoZSBub2RlcywgeSBpcyB0aGUgYXZhcmFnZSBoZWlnaHQgb2Ygbm9kZXNcbiAgLy8gYnggYW5kIGJ5IGFyZSB0aGUgYnVmZmVyIHNpemVzIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpbWVuc2lvbnMgYWNjb3JkaW5nbHksXG4gIC8vIGhjIGFuZCB2YyBhcmUgdGhlIG51bWJlciBvZiByb3dzIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpbWVuc2lvbnNcbiAgLy8gbiBpcyBudW1iZXIgb2YgbWVtYmVycy5cblxuICB2YXIgdmVydGljYWxQYWRkaW5nID0gQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19WRVJUSUNBTDtcbiAgdmFyIGhvcml6b250YWxQYWRkaW5nID0gQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMO1xuXG4gIC8vIG51bWJlciBvZiBtZW1iZXJzXG4gIHZhciBtZW1iZXJzU2l6ZSA9IG1lbWJlcnMubGVuZ3RoO1xuXG4gIC8vIHN1bSBvZiB0aGUgd2lkdGggb2YgYWxsIG1lbWJlcnNcbiAgdmFyIHRvdGFsV2lkdGggPSAwO1xuXG4gIC8vIHN1bSBvZiB0aGUgaGVpZ2h0IG9mIGFsbCBtZW1iZXJzXG4gIHZhciB0b3RhbEhlaWdodCA9IDA7XG5cbiAgdmFyIG1heFdpZHRoID0gMDtcblxuICAvLyB0cmF2ZXJzZSBhbGwgbWVtYmVycyB0byBjYWxjdWxhdGUgdG90YWwgd2lkdGggYW5kIHRvdGFsIGhlaWdodCBhbmQgZ2V0IHRoZSBtYXhpbXVtIG1lbWJlcnMgd2lkdGhcbiAgbWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdG90YWxXaWR0aCArPSBub2RlLmdldFdpZHRoKCk7XG4gICAgdG90YWxIZWlnaHQgKz0gbm9kZS5nZXRIZWlnaHQoKTtcblxuICAgIGlmIChub2RlLmdldFdpZHRoKCkgPiBtYXhXaWR0aCkge1xuICAgICAgbWF4V2lkdGggPSBub2RlLmdldFdpZHRoKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdmVyYWdlIHdpZHRoIG9mIHRoZSBtZW1iZXJzXG4gIHZhciBhdmVyYWdlV2lkdGggPSB0b3RhbFdpZHRoIC8gbWVtYmVyc1NpemU7XG5cbiAgLy8gYXZlcmFnZSBoZWlnaHQgb2YgdGhlIG1lbWJlcnNcbiAgdmFyIGF2ZXJhZ2VIZWlnaHQgPSB0b3RhbEhlaWdodCAvIG1lbWJlcnNTaXplO1xuXG4gIC8vIHNvbHZpbmcgdGhlIGluaXRpYWwgZXF1YXRpb24gc3lzdGVtIGZvciB0aGUgaGMgeWllbGRzIHRoZSBmb2xsb3dpbmcgc2Vjb25kIGRlZ3JlZSBlcXVhdGlvbjpcbiAgLy8gaGNeMiAqICh4K2J4KSArIGhjICogKGJ5IC0gYngpIC0gbiAqICh5ICsgYnkpID0gMFxuXG4gIC8vIHRoZSBkZWx0YSB2YWx1ZSB0byBzb2x2ZSB0aGUgZXF1YXRpb24gYWJvdmUgZm9yIGhjXG4gIHZhciBkZWx0YSA9IE1hdGgucG93KHZlcnRpY2FsUGFkZGluZyAtIGhvcml6b250YWxQYWRkaW5nLCAyKSArIDQgKiAoYXZlcmFnZVdpZHRoICsgaG9yaXpvbnRhbFBhZGRpbmcpICogKGF2ZXJhZ2VIZWlnaHQgKyB2ZXJ0aWNhbFBhZGRpbmcpICogbWVtYmVyc1NpemU7XG5cbiAgLy8gc29sdmUgdGhlIGVxdWF0aW9uIHVzaW5nIGRlbHRhIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBjb3VudFxuICAvLyB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhbiBpZGVhbCByb3dcbiAgdmFyIGhvcml6b250YWxDb3VudERvdWJsZSA9IChob3Jpem9udGFsUGFkZGluZyAtIHZlcnRpY2FsUGFkZGluZyArIE1hdGguc3FydChkZWx0YSkpIC8gKDIgKiAoYXZlcmFnZVdpZHRoICsgaG9yaXpvbnRhbFBhZGRpbmcpKTtcbiAgLy8gcm91bmQgdGhlIGNhbGN1bGF0ZWQgaG9yaXpvbnRhbCBjb3VudCB1cCBvciBkb3duIGFjY29yZGluZyB0byB0aGUgZmF2b3JlZCBkaW1lbnNpb25cbiAgdmFyIGhvcml6b250YWxDb3VudDtcblxuICBpZiAoZmF2b3JIb3Jpem9udGFsRGltKSB7XG4gICAgaG9yaXpvbnRhbENvdW50ID0gTWF0aC5jZWlsKGhvcml6b250YWxDb3VudERvdWJsZSk7XG4gICAgLy8gaWYgaG9yaXpvbnRhbENvdW50IGNvdW50IGlzIG5vdCBhIGZsb2F0IHZhbHVlIHRoZW4gYm90aCBvZiByb3VuZGluZyB0byBmbG9vciBhbmQgY2VpbFxuICAgIC8vIHdpbGwgeWllbGQgdGhlIHNhbWUgdmFsdWVzLiBJbnN0ZWFkIG9mIHJlcGVhdGluZyB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0cnkgZ29pbmcgdXBcbiAgICAvLyB3aGlsZSBmYXZvcmluZyBob3Jpem9udGFsIGRpbWVuc2lvbiBpbiBzdWNoIGNhc2VzXG4gICAgaWYgKGhvcml6b250YWxDb3VudCA9PSBob3Jpem9udGFsQ291bnREb3VibGUpIHtcbiAgICAgIGhvcml6b250YWxDb3VudCsrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBob3Jpem9udGFsQ291bnQgPSBNYXRoLmZsb29yKGhvcml6b250YWxDb3VudERvdWJsZSk7XG4gIH1cblxuICAvLyBpZGVhbCB3aWR0aCB0byBiZSBjYWxjdWxhdGVkXG4gIHZhciBpZGVhbFdpZHRoID0gaG9yaXpvbnRhbENvdW50ICogKGF2ZXJhZ2VXaWR0aCArIGhvcml6b250YWxQYWRkaW5nKSAtIGhvcml6b250YWxQYWRkaW5nO1xuXG4gIC8vIGlmIG1heCB3aWR0aCBpcyBiaWdnZXIgdGhhbiBjYWxjdWxhdGVkIGlkZWFsIHdpZHRoIHJlc2V0IGlkZWFsIHdpZHRoIHRvIGl0XG4gIGlmIChtYXhXaWR0aCA+IGlkZWFsV2lkdGgpIHtcbiAgICBpZGVhbFdpZHRoID0gbWF4V2lkdGg7XG4gIH1cblxuICAvLyBhZGQgdGhlIGxlZnQtcmlnaHQgbWFyZ2lucyB0byB0aGUgaWRlYWwgcm93IHdpZHRoXG4gIGlkZWFsV2lkdGggKz0gaG9yaXpvbnRhbFBhZGRpbmcgKiAyO1xuXG4gIC8vIHJldHVybiB0aGUgaWRlYWwgcm93IHdpZHRoMVxuICByZXR1cm4gaWRlYWxXaWR0aDtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0gPSBmdW5jdGlvbiAobm9kZXMsIG1pbldpZHRoLCBmYXZvckhvcml6b250YWxEaW0pIHtcbiAgdmFyIHZlcnRpY2FsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw7XG4gIHZhciBob3Jpem9udGFsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTDtcbiAgdmFyIHRpbGluZ0NvbXBhcmVCeSA9IENvU0VDb25zdGFudHMuVElMSU5HX0NPTVBBUkVfQlk7XG4gIHZhciBvcmdhbml6YXRpb24gPSB7XG4gICAgcm93czogW10sXG4gICAgcm93V2lkdGg6IFtdLFxuICAgIHJvd0hlaWdodDogW10sXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiBtaW5XaWR0aCwgLy8gYXNzdW1lIG1pbkhlaWdodCBlcXVhbHMgdG8gbWluV2lkdGhcbiAgICB2ZXJ0aWNhbFBhZGRpbmc6IHZlcnRpY2FsUGFkZGluZyxcbiAgICBob3Jpem9udGFsUGFkZGluZzogaG9yaXpvbnRhbFBhZGRpbmcsXG4gICAgY2VudGVyWDogMCxcbiAgICBjZW50ZXJZOiAwXG4gIH07XG5cbiAgaWYgKHRpbGluZ0NvbXBhcmVCeSkge1xuICAgIG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoID0gdGhpcy5jYWxjSWRlYWxSb3dXaWR0aChub2RlcywgZmF2b3JIb3Jpem9udGFsRGltKTtcbiAgfVxuXG4gIHZhciBnZXROb2RlQXJlYSA9IGZ1bmN0aW9uIGdldE5vZGVBcmVhKG4pIHtcbiAgICByZXR1cm4gbi5yZWN0LndpZHRoICogbi5yZWN0LmhlaWdodDtcbiAgfTtcblxuICB2YXIgYXJlYUNvbXBhcmVGY24gPSBmdW5jdGlvbiBhcmVhQ29tcGFyZUZjbihuMSwgbjIpIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUFyZWEobjIpIC0gZ2V0Tm9kZUFyZWEobjEpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG5vZGVzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlaXIgYXJlYXNcbiAgbm9kZXMuc29ydChmdW5jdGlvbiAobjEsIG4yKSB7XG4gICAgdmFyIGNtcEJ5ID0gYXJlYUNvbXBhcmVGY247XG4gICAgaWYgKG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoKSB7XG4gICAgICBjbXBCeSA9IHRpbGluZ0NvbXBhcmVCeTtcbiAgICAgIHJldHVybiBjbXBCeShuMS5pZCwgbjIuaWQpO1xuICAgIH1cbiAgICByZXR1cm4gY21wQnkobjEsIG4yKTtcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBvcmdhbml6YXRpb24gLT4gY2FsY3VsYXRlIGNvbXBvdW5kIGNlbnRlclxuICB2YXIgc3VtQ2VudGVyWCA9IDA7XG4gIHZhciBzdW1DZW50ZXJZID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgc3VtQ2VudGVyWCArPSBsTm9kZS5nZXRDZW50ZXJYKCk7XG4gICAgc3VtQ2VudGVyWSArPSBsTm9kZS5nZXRDZW50ZXJZKCk7XG4gIH1cblxuICBvcmdhbml6YXRpb24uY2VudGVyWCA9IHN1bUNlbnRlclggLyBub2Rlcy5sZW5ndGg7XG4gIG9yZ2FuaXphdGlvbi5jZW50ZXJZID0gc3VtQ2VudGVyWSAvIG5vZGVzLmxlbmd0aDtcblxuICAvLyBDcmVhdGUgdGhlIG9yZ2FuaXphdGlvbiAtPiB0aWxlIG1lbWJlcnNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCAwLCBtaW5XaWR0aCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNhbkFkZEhvcml6b250YWwob3JnYW5pemF0aW9uLCBsTm9kZS5yZWN0LndpZHRoLCBsTm9kZS5yZWN0LmhlaWdodCkpIHtcbiAgICAgIHZhciByb3dJbmRleCA9IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoIW9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoKSB7XG4gICAgICAgIHJvd0luZGV4ID0gdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KG9yZ2FuaXphdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCByb3dJbmRleCwgbWluV2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCBvcmdhbml6YXRpb24ucm93cy5sZW5ndGgsIG1pbldpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNoaWZ0VG9MYXN0Um93KG9yZ2FuaXphdGlvbik7XG4gIH1cblxuICByZXR1cm4gb3JnYW5pemF0aW9uO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbiwgbm9kZSwgcm93SW5kZXgsIG1pbldpZHRoKSB7XG4gIHZhciBtaW5Db21wb3VuZFNpemUgPSBtaW5XaWR0aDtcblxuICAvLyBBZGQgbmV3IHJvdyBpZiBuZWVkZWRcbiAgaWYgKHJvd0luZGV4ID09IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCkge1xuICAgIHZhciBzZWNvbmREaW1lbnNpb24gPSBbXTtcblxuICAgIG9yZ2FuaXphdGlvbi5yb3dzLnB1c2goc2Vjb25kRGltZW5zaW9uKTtcbiAgICBvcmdhbml6YXRpb24ucm93V2lkdGgucHVzaChtaW5Db21wb3VuZFNpemUpO1xuICAgIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHQucHVzaCgwKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSByb3cgd2lkdGhcbiAgdmFyIHcgPSBvcmdhbml6YXRpb24ucm93V2lkdGhbcm93SW5kZXhdICsgbm9kZS5yZWN0LndpZHRoO1xuXG4gIGlmIChvcmdhbml6YXRpb24ucm93c1tyb3dJbmRleF0ubGVuZ3RoID4gMCkge1xuICAgIHcgKz0gb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nO1xuICB9XG5cbiAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW3Jvd0luZGV4XSA9IHc7XG4gIC8vIFVwZGF0ZSBjb21wb3VuZCB3aWR0aFxuICBpZiAob3JnYW5pemF0aW9uLndpZHRoIDwgdykge1xuICAgIG9yZ2FuaXphdGlvbi53aWR0aCA9IHc7XG4gIH1cblxuICAvLyBVcGRhdGUgaGVpZ2h0XG4gIHZhciBoID0gbm9kZS5yZWN0LmhlaWdodDtcbiAgaWYgKHJvd0luZGV4ID4gMCkgaCArPSBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuXG4gIHZhciBleHRyYUhlaWdodCA9IDA7XG4gIGlmIChoID4gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtyb3dJbmRleF0pIHtcbiAgICBleHRyYUhlaWdodCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdO1xuICAgIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdID0gaDtcbiAgICBleHRyYUhlaWdodCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdIC0gZXh0cmFIZWlnaHQ7XG4gIH1cblxuICBvcmdhbml6YXRpb24uaGVpZ2h0ICs9IGV4dHJhSGVpZ2h0O1xuXG4gIC8vIEluc2VydCBub2RlXG4gIG9yZ2FuaXphdGlvbi5yb3dzW3Jvd0luZGV4XS5wdXNoKG5vZGUpO1xufTtcblxuLy9TY2FucyB0aGUgcm93cyBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHJldHVybnMgdGhlIG9uZSB3aXRoIHRoZSBtaW4gd2lkdGhcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXggPSBmdW5jdGlvbiAob3JnYW5pemF0aW9uKSB7XG4gIHZhciByID0gLTE7XG4gIHZhciBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgb3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd1dpZHRoW2ldIDwgbWluKSB7XG4gICAgICByID0gaTtcbiAgICAgIG1pbiA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59O1xuXG4vL1NjYW5zIHRoZSByb3dzIG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgcmV0dXJucyB0aGUgb25lIHdpdGggdGhlIG1heCB3aWR0aFxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgciA9IC0xO1xuICB2YXIgbWF4ID0gTnVtYmVyLk1JTl9WQUxVRTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd1dpZHRoW2ldID4gbWF4KSB7XG4gICAgICByID0gaTtcbiAgICAgIG1heCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn07XG5cbi8qKlxuKiBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciBhZGRpbmcgZXh0cmEgd2lkdGggdG8gdGhlIG9yZ2FuaXphdGlvbiB2aW9sYXRlc1xuKiB0aGUgYXNwZWN0IHJhdGlvKDEpIG9yIG5vdC5cbiovXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbiwgZXh0cmFXaWR0aCwgZXh0cmFIZWlnaHQpIHtcblxuICAvLyBpZiB0aGVyZSBpcyBhbiBpZGVhbCByb3cgd2lkdGggc3BlY2lmaWVkIHVzZSBpdCBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBhc3BlY3QgcmF0aW9cbiAgaWYgKG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoKSB7XG4gICAgdmFyIGxhc3RSb3dJbmRleCA9IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCAtIDE7XG4gICAgdmFyIGxhc3RSb3dXaWR0aCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtsYXN0Um93SW5kZXhdO1xuXG4gICAgLy8gY2hlY2sgYW5kIHJldHVybiBpZiBpZGVhbCByb3cgd2lkdGggd2lsbCBiZSBleGNlZWQgaWYgdGhlIG5vZGUgaXMgYWRkZWQgdG8gdGhlIHJvd1xuICAgIHJldHVybiBsYXN0Um93V2lkdGggKyBleHRyYVdpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nIDw9IG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoO1xuICB9XG5cbiAgdmFyIHNyaSA9IHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChvcmdhbml6YXRpb24pO1xuXG4gIGlmIChzcmkgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbWluID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW3NyaV07XG5cbiAgaWYgKG1pbiArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZyArIGV4dHJhV2lkdGggPD0gb3JnYW5pemF0aW9uLndpZHRoKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgaERpZmYgPSAwO1xuXG4gIC8vIEFkZGluZyB0byBhbiBleGlzdGluZyByb3dcbiAgaWYgKG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbc3JpXSA8IGV4dHJhSGVpZ2h0KSB7XG4gICAgaWYgKHNyaSA+IDApIGhEaWZmID0gZXh0cmFIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nIC0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtzcmldO1xuICB9XG5cbiAgdmFyIGFkZF90b19yb3dfcmF0aW87XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBtaW4gPj0gZXh0cmFXaWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZykge1xuICAgIGFkZF90b19yb3dfcmF0aW8gPSAob3JnYW5pemF0aW9uLmhlaWdodCArIGhEaWZmKSAvIChtaW4gKyBleHRyYVdpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRfdG9fcm93X3JhdGlvID0gKG9yZ2FuaXphdGlvbi5oZWlnaHQgKyBoRGlmZikgLyBvcmdhbml6YXRpb24ud2lkdGg7XG4gIH1cblxuICAvLyBBZGRpbmcgYSBuZXcgcm93IGZvciB0aGlzIG5vZGVcbiAgaERpZmYgPSBleHRyYUhlaWdodCArIG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmc7XG4gIHZhciBhZGRfbmV3X3Jvd19yYXRpbztcbiAgaWYgKG9yZ2FuaXphdGlvbi53aWR0aCA8IGV4dHJhV2lkdGgpIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gZXh0cmFXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gb3JnYW5pemF0aW9uLndpZHRoO1xuICB9XG5cbiAgaWYgKGFkZF9uZXdfcm93X3JhdGlvIDwgMSkgYWRkX25ld19yb3dfcmF0aW8gPSAxIC8gYWRkX25ld19yb3dfcmF0aW87XG5cbiAgaWYgKGFkZF90b19yb3dfcmF0aW8gPCAxKSBhZGRfdG9fcm93X3JhdGlvID0gMSAvIGFkZF90b19yb3dfcmF0aW87XG5cbiAgcmV0dXJuIGFkZF90b19yb3dfcmF0aW8gPCBhZGRfbmV3X3Jvd19yYXRpbztcbn07XG5cbi8vSWYgbW92aW5nIHRoZSBsYXN0IG5vZGUgZnJvbSB0aGUgbG9uZ2VzdCByb3cgYW5kIGFkZGluZyBpdCB0byB0aGUgbGFzdFxuLy9yb3cgbWFrZXMgdGhlIGJvdW5kaW5nIGJveCBzbWFsbGVyLCBkbyBpdC5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgbG9uZ2VzdCA9IHRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KG9yZ2FuaXphdGlvbik7XG4gIHZhciBsYXN0ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoLmxlbmd0aCAtIDE7XG4gIHZhciByb3cgPSBvcmdhbml6YXRpb24ucm93c1tsb25nZXN0XTtcbiAgdmFyIG5vZGUgPSByb3dbcm93Lmxlbmd0aCAtIDFdO1xuXG4gIHZhciBkaWZmID0gbm9kZS53aWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZztcblxuICAvLyBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2Ugb24gdGhlIGxhc3Qgcm93XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPiBkaWZmICYmIGxvbmdlc3QgIT0gbGFzdCkge1xuICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsb25nZXN0IHJvd1xuICAgIHJvdy5zcGxpY2UoLTEsIDEpO1xuXG4gICAgLy8gUHVzaCBpdCB0byB0aGUgbGFzdCByb3dcbiAgICBvcmdhbml6YXRpb24ucm93c1tsYXN0XS5wdXNoKG5vZGUpO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdIC0gZGlmZjtcbiAgICBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gKyBkaWZmO1xuICAgIG9yZ2FuaXphdGlvbi53aWR0aCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgob3JnYW5pemF0aW9uKV07XG5cbiAgICAvLyBVcGRhdGUgaGVpZ2h0cyBvZiB0aGUgb3JnYW5pemF0aW9uXG4gICAgdmFyIG1heEhlaWdodCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dbaV0uaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSByb3dbaV0uaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAobG9uZ2VzdCA+IDApIG1heEhlaWdodCArPSBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuXG4gICAgdmFyIHByZXZUb3RhbCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbG9uZ2VzdF0gKyBvcmdhbml6YXRpb24ucm93SGVpZ2h0W2xhc3RdO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSA9IG1heEhlaWdodDtcbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA8IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZykgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA9IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICAgIHZhciBmaW5hbFRvdGFsID0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSArIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbGFzdF07XG4gICAgb3JnYW5pemF0aW9uLmhlaWdodCArPSBmaW5hbFRvdGFsIC0gcHJldlRvdGFsO1xuXG4gICAgdGhpcy5zaGlmdFRvTGFzdFJvdyhvcmdhbml6YXRpb24pO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChDb1NFQ29uc3RhbnRzLlRJTEUpIHtcbiAgICAvLyBGaW5kIHplcm8gZGVncmVlIG5vZGVzIGFuZCBjcmVhdGUgYSBjb21wb3VuZCBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpO1xuICAgIC8vIFRpbGUgYW5kIGNsZWFyIGNoaWxkcmVuIG9mIGVhY2ggY29tcG91bmRcbiAgICB0aGlzLmNsZWFyQ29tcG91bmRzKCk7XG4gICAgLy8gU2VwYXJhdGVseSB0aWxlIGFuZCBjbGVhciB6ZXJvIGRlZ3JlZSBub2RlcyBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoQ29TRUNvbnN0YW50cy5USUxFKSB7XG4gICAgdGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKTtcbiAgICB0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IFRyZWUgUmVkdWN0aW9uIG1ldGhvZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWR1Y2UgdHJlZXMgXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZWR1Y2VUcmVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBydW5lZE5vZGVzQWxsID0gW107XG4gIHZhciBjb250YWluc0xlYWYgPSB0cnVlO1xuICB2YXIgbm9kZTtcblxuICB3aGlsZSAoY29udGFpbnNMZWFmKSB7XG4gICAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcbiAgICB2YXIgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wID0gW107XG4gICAgY29udGFpbnNMZWFmID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5nZXRFZGdlcygpLmxlbmd0aCA9PSAxICYmICFub2RlLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoICYmIG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChDb1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwpIHtcbiAgICAgICAgICB2YXIgb3RoZXJFbmQgPSBub2RlLmdldEVkZ2VzKClbMF0uZ2V0T3RoZXJFbmQobm9kZSk7XG4gICAgICAgICAgdmFyIHJlbGF0aXZlUG9zaXRpb24gPSBuZXcgRGltZW5zaW9uRChub2RlLmdldENlbnRlclgoKSAtIG90aGVyRW5kLmdldENlbnRlclgoKSwgbm9kZS5nZXRDZW50ZXJZKCkgLSBvdGhlckVuZC5nZXRDZW50ZXJZKCkpO1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcC5wdXNoKFtub2RlLCBub2RlLmdldEVkZ2VzKClbMF0sIG5vZGUuZ2V0T3duZXIoKSwgcmVsYXRpdmVQb3NpdGlvbl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcC5wdXNoKFtub2RlLCBub2RlLmdldEVkZ2VzKClbMF0sIG5vZGUuZ2V0T3duZXIoKV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5zTGVhZiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb250YWluc0xlYWYgPT0gdHJ1ZSkge1xuICAgICAgdmFyIHBydW5lZE5vZGVzSW5TdGVwID0gW107XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBydW5lZE5vZGVzSW5TdGVwVGVtcC5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocHJ1bmVkTm9kZXNJblN0ZXBUZW1wW2pdWzBdLmdldEVkZ2VzKCkubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBwcnVuZWROb2Rlc0luU3RlcC5wdXNoKHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXSk7XG4gICAgICAgICAgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wW2pdWzBdLmdldE93bmVyKCkucmVtb3ZlKHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXVswXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBydW5lZE5vZGVzQWxsLnB1c2gocHJ1bmVkTm9kZXNJblN0ZXApO1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpO1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpO1xuICAgIH1cbiAgfVxuICB0aGlzLnBydW5lZE5vZGVzQWxsID0gcHJ1bmVkTm9kZXNBbGw7XG59O1xuXG4vLyBHcm93IHRyZWUgb25lIHN0ZXAgXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5ncm93VHJlZSA9IGZ1bmN0aW9uIChwcnVuZWROb2Rlc0FsbCkge1xuICB2YXIgbGVuZ3RoT2ZQcnVuZWROb2Rlc0luU3RlcCA9IHBydW5lZE5vZGVzQWxsLmxlbmd0aDtcbiAgdmFyIHBydW5lZE5vZGVzSW5TdGVwID0gcHJ1bmVkTm9kZXNBbGxbbGVuZ3RoT2ZQcnVuZWROb2Rlc0luU3RlcCAtIDFdO1xuXG4gIHZhciBub2RlRGF0YTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcnVuZWROb2Rlc0luU3RlcC5sZW5ndGg7IGkrKykge1xuICAgIG5vZGVEYXRhID0gcHJ1bmVkTm9kZXNJblN0ZXBbaV07XG5cbiAgICB0aGlzLmZpbmRQbGFjZWZvclBydW5lZE5vZGUobm9kZURhdGEpO1xuXG4gICAgbm9kZURhdGFbMl0uYWRkKG5vZGVEYXRhWzBdKTtcbiAgICBub2RlRGF0YVsyXS5hZGQobm9kZURhdGFbMV0sIG5vZGVEYXRhWzFdLnNvdXJjZSwgbm9kZURhdGFbMV0udGFyZ2V0KTtcbiAgfVxuXG4gIHBydW5lZE5vZGVzQWxsLnNwbGljZShwcnVuZWROb2Rlc0FsbC5sZW5ndGggLSAxLCAxKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG59O1xuXG4vLyBGaW5kIGFuIGFwcHJvcHJpYXRlIHBvc2l0aW9uIHRvIHJlcGxhY2UgcHJ1bmVkIG5vZGUsIHRoaXMgbWV0aG9kIGNhbiBiZSBpbXByb3ZlZFxuQ29TRUxheW91dC5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZSA9IGZ1bmN0aW9uIChub2RlRGF0YSkge1xuXG4gIHZhciBncmlkRm9yUHJ1bmVkTm9kZTtcbiAgdmFyIG5vZGVUb0Nvbm5lY3Q7XG4gIHZhciBwcnVuZWROb2RlID0gbm9kZURhdGFbMF07XG4gIGlmIChwcnVuZWROb2RlID09IG5vZGVEYXRhWzFdLnNvdXJjZSkge1xuICAgIG5vZGVUb0Nvbm5lY3QgPSBub2RlRGF0YVsxXS50YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgbm9kZVRvQ29ubmVjdCA9IG5vZGVEYXRhWzFdLnNvdXJjZTtcbiAgfVxuXG4gIGlmIChDb1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwpIHtcbiAgICBwcnVuZWROb2RlLnNldENlbnRlcihub2RlVG9Db25uZWN0LmdldENlbnRlclgoKSArIG5vZGVEYXRhWzNdLmdldFdpZHRoKCksIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpICsgbm9kZURhdGFbM10uZ2V0SGVpZ2h0KCkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzdGFydEdyaWRYID0gbm9kZVRvQ29ubmVjdC5zdGFydFg7XG4gICAgdmFyIGZpbmlzaEdyaWRYID0gbm9kZVRvQ29ubmVjdC5maW5pc2hYO1xuICAgIHZhciBzdGFydEdyaWRZID0gbm9kZVRvQ29ubmVjdC5zdGFydFk7XG4gICAgdmFyIGZpbmlzaEdyaWRZID0gbm9kZVRvQ29ubmVjdC5maW5pc2hZO1xuXG4gICAgdmFyIHVwTm9kZUNvdW50ID0gMDtcbiAgICB2YXIgZG93bk5vZGVDb3VudCA9IDA7XG4gICAgdmFyIHJpZ2h0Tm9kZUNvdW50ID0gMDtcbiAgICB2YXIgbGVmdE5vZGVDb3VudCA9IDA7XG4gICAgdmFyIGNvbnRyb2xSZWdpb25zID0gW3VwTm9kZUNvdW50LCByaWdodE5vZGVDb3VudCwgZG93bk5vZGVDb3VudCwgbGVmdE5vZGVDb3VudF07XG5cbiAgICBpZiAoc3RhcnRHcmlkWSA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRYOyBpIDw9IGZpbmlzaEdyaWRYOyBpKyspIHtcbiAgICAgICAgY29udHJvbFJlZ2lvbnNbMF0gKz0gdGhpcy5ncmlkW2ldW3N0YXJ0R3JpZFkgLSAxXS5sZW5ndGggKyB0aGlzLmdyaWRbaV1bc3RhcnRHcmlkWV0ubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbmlzaEdyaWRYIDwgdGhpcy5ncmlkLmxlbmd0aCAtIDEpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRZOyBpIDw9IGZpbmlzaEdyaWRZOyBpKyspIHtcbiAgICAgICAgY29udHJvbFJlZ2lvbnNbMV0gKz0gdGhpcy5ncmlkW2ZpbmlzaEdyaWRYICsgMV1baV0ubGVuZ3RoICsgdGhpcy5ncmlkW2ZpbmlzaEdyaWRYXVtpXS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmluaXNoR3JpZFkgPCB0aGlzLmdyaWRbMF0ubGVuZ3RoIC0gMSkge1xuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFg7IGkgPD0gZmluaXNoR3JpZFg7IGkrKykge1xuICAgICAgICBjb250cm9sUmVnaW9uc1syXSArPSB0aGlzLmdyaWRbaV1bZmluaXNoR3JpZFkgKyAxXS5sZW5ndGggKyB0aGlzLmdyaWRbaV1bZmluaXNoR3JpZFldLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFydEdyaWRYID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFk7IGkgPD0gZmluaXNoR3JpZFk7IGkrKykge1xuICAgICAgICBjb250cm9sUmVnaW9uc1szXSArPSB0aGlzLmdyaWRbc3RhcnRHcmlkWCAtIDFdW2ldLmxlbmd0aCArIHRoaXMuZ3JpZFtzdGFydEdyaWRYXVtpXS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbWluID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gICAgdmFyIG1pbkNvdW50O1xuICAgIHZhciBtaW5JbmRleDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRyb2xSZWdpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoY29udHJvbFJlZ2lvbnNbal0gPCBtaW4pIHtcbiAgICAgICAgbWluID0gY29udHJvbFJlZ2lvbnNbal07XG4gICAgICAgIG1pbkNvdW50ID0gMTtcbiAgICAgICAgbWluSW5kZXggPSBqO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1tqXSA9PSBtaW4pIHtcbiAgICAgICAgbWluQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWluQ291bnQgPT0gMyAmJiBtaW4gPT0gMCkge1xuICAgICAgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1sxXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzNdID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzJdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDM7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1pbkNvdW50ID09IDIgJiYgbWluID09IDApIHtcbiAgICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKTtcbiAgICAgIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzFdID09IDApIHtcbiAgICAgICAgO1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtaW5Db3VudCA9PSA0ICYmIG1pbiA9PSAwKSB7XG4gICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCk7XG4gICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IHJhbmRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSBtaW5JbmRleDtcbiAgICB9XG5cbiAgICBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMCkge1xuICAgICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCksIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpIC0gbm9kZVRvQ29ubmVjdC5nZXRIZWlnaHQoKSAvIDIgLSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC0gcHJ1bmVkTm9kZS5nZXRIZWlnaHQoKSAvIDIpO1xuICAgIH0gZWxzZSBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMSkge1xuICAgICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCkgKyBub2RlVG9Db25uZWN0LmdldFdpZHRoKCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0V2lkdGgoKSAvIDIsIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpKTtcbiAgICB9IGVsc2UgaWYgKGdyaWRGb3JQcnVuZWROb2RlID09IDIpIHtcbiAgICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSArIG5vZGVUb0Nvbm5lY3QuZ2V0SGVpZ2h0KCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0SGVpZ2h0KCkgLyAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCkgLSBub2RlVG9Db25uZWN0LmdldFdpZHRoKCkgLyAyIC0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAtIHBydW5lZE5vZGUuZ2V0V2lkdGgoKSAvIDIsIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUxheW91dDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk5MTpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBGRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuRkRMYXlvdXROb2RlO1xudmFyIElNYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLklNYXRoO1xuXG5mdW5jdGlvbiBDb1NFTm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICBGRExheW91dE5vZGUuY2FsbCh0aGlzLCBnbSwgbG9jLCBzaXplLCB2Tm9kZSk7XG59XG5cbkNvU0VOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXROb2RlLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0Tm9kZSkge1xuICBDb1NFTm9kZVtwcm9wXSA9IEZETGF5b3V0Tm9kZVtwcm9wXTtcbn1cblxuQ29TRU5vZGUucHJvdG90eXBlLmNhbGN1bGF0ZURpc3BsYWNlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxheW91dCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO1xuICAvLyB0aGlzIGNoZWNrIGlzIGZvciBjb21wb3VuZCBub2RlcyB0aGF0IGNvbnRhaW4gZml4ZWQgbm9kZXNcbiAgaWYgKHRoaXMuZ2V0Q2hpbGQoKSAhPSBudWxsICYmIHRoaXMuZml4ZWROb2RlV2VpZ2h0KSB7XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRYICs9IGxheW91dC5jb29saW5nRmFjdG9yICogKHRoaXMuc3ByaW5nRm9yY2VYICsgdGhpcy5yZXB1bHNpb25Gb3JjZVggKyB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKSAvIHRoaXMuZml4ZWROb2RlV2VpZ2h0O1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WSArPSBsYXlvdXQuY29vbGluZ0ZhY3RvciAqICh0aGlzLnNwcmluZ0ZvcmNlWSArIHRoaXMucmVwdWxzaW9uRm9yY2VZICsgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkgLyB0aGlzLmZpeGVkTm9kZVdlaWdodDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRpc3BsYWNlbWVudFggKz0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiAodGhpcy5zcHJpbmdGb3JjZVggKyB0aGlzLnJlcHVsc2lvbkZvcmNlWCArIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpIC8gdGhpcy5ub09mQ2hpbGRyZW47XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRZICs9IGxheW91dC5jb29saW5nRmFjdG9yICogKHRoaXMuc3ByaW5nRm9yY2VZICsgdGhpcy5yZXB1bHNpb25Gb3JjZVkgKyB0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKSAvIHRoaXMubm9PZkNoaWxkcmVuO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkgPiBsYXlvdXQuY29vbGluZ0ZhY3RvciAqIGxheW91dC5tYXhOb2RlRGlzcGxhY2VtZW50KSB7XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRYID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCAqIElNYXRoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpID4gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCkge1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WSA9IGxheW91dC5jb29saW5nRmFjdG9yICogbGF5b3V0Lm1heE5vZGVEaXNwbGFjZW1lbnQgKiBJTWF0aC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gIH1cblxuICAvLyBub24tZW1wdHkgY29tcG91bmQgbm9kZSwgcHJvcG9nYXRlIG1vdmVtZW50IHRvIGNoaWxkcmVuIGFzIHdlbGxcbiAgaWYgKHRoaXMuY2hpbGQgJiYgdGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuICB9XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbiA9IGZ1bmN0aW9uIChkWCwgZFkpIHtcbiAgdmFyIG5vZGVzID0gdGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gIHZhciBub2RlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgIGlmIChub2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRYICs9IGRYO1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRZICs9IGRZO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4oZFgsIGRZKTtcbiAgICB9XG4gIH1cbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbGF5b3V0ID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7XG5cbiAgLy8gYSBzaW1wbGUgbm9kZSBvciBhbiBlbXB0eSBjb21wb3VuZCBub2RlLCBtb3ZlIGl0XG4gIGlmICh0aGlzLmNoaWxkID09IG51bGwgfHwgdGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuXG4gICAgbGF5b3V0LnRvdGFsRGlzcGxhY2VtZW50ICs9IE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkgKyBNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpO1xuICB9XG5cbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIHRoaXMuZGlzcGxhY2VtZW50WCA9IDA7XG4gIHRoaXMuZGlzcGxhY2VtZW50WSA9IDA7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuc2V0UHJlZDEgPSBmdW5jdGlvbiAocHJlZDEpIHtcbiAgdGhpcy5wcmVkMSA9IHByZWQxO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmdldFByZWQxID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcHJlZDE7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuZ2V0UHJlZDIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcmVkMjtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXROZXh0ID0gZnVuY3Rpb24gKG5leHQpIHtcbiAgdGhpcy5uZXh0ID0gbmV4dDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5nZXROZXh0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV4dDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQgPSBmdW5jdGlvbiAocHJvY2Vzc2VkKSB7XG4gIHRoaXMucHJvY2Vzc2VkID0gcHJvY2Vzc2VkO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmlzUHJvY2Vzc2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcHJvY2Vzc2VkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFTm9kZTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDkwMjpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgQ29TRUNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oODA2KTtcbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkxpbmtlZExpc3Q7XG52YXIgTWF0cml4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLk1hdHJpeDtcbnZhciBTVkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuU1ZEO1xuXG5mdW5jdGlvbiBDb25zdHJhaW50SGFuZGxlcigpIHt9XG5cbkNvbnN0cmFpbnRIYW5kbGVyLmhhbmRsZUNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKGxheW91dCkge1xuICAvLyAgbGV0IGxheW91dCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO1xuXG4gIC8vIGdldCBjb25zdHJhaW50cyBmcm9tIGxheW91dFxuICB2YXIgY29uc3RyYWludHMgPSB7fTtcbiAgY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCA9IGxheW91dC5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50O1xuICBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50ID0gbGF5b3V0LmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQ7XG4gIGNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCA9IGxheW91dC5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7XG5cbiAgdmFyIGlkVG9Ob2RlTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbm9kZUluZGV4ZXMgPSBuZXcgTWFwKCk7XG4gIHZhciB4Q29vcmRzID0gW107XG4gIHZhciB5Q29vcmRzID0gW107XG5cbiAgdmFyIGFsbE5vZGVzID0gbGF5b3V0LmdldEFsbE5vZGVzKCk7XG4gIHZhciBpbmRleCA9IDA7XG4gIC8vIGZpbGwgaW5kZXggbWFwIGFuZCBjb29yZGluYXRlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAobm9kZS5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICAgIG5vZGVJbmRleGVzLnNldChub2RlLmlkLCBpbmRleCsrKTtcbiAgICAgIHhDb29yZHMucHVzaChub2RlLmdldENlbnRlclgoKSk7XG4gICAgICB5Q29vcmRzLnB1c2gobm9kZS5nZXRDZW50ZXJZKCkpO1xuICAgICAgaWRUb05vZGVNYXAuc2V0KG5vZGUuaWQsIG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZXJlIGV4aXN0cyByZWxhdGl2ZSBwbGFjZW1lbnQgY29uc3RyYWludCB3aXRob3V0IGdhcCB2YWx1ZSwgc2V0IGl0IHRvIGRlZmF1bHQgXG4gIGlmIChjb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpIHtcbiAgICBjb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAoY29uc3RyYWludCkge1xuICAgICAgaWYgKCFjb25zdHJhaW50LmdhcCAmJiBjb25zdHJhaW50LmdhcCAhPSAwKSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LmxlZnQpIHtcbiAgICAgICAgICBjb25zdHJhaW50LmdhcCA9IENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIGlkVG9Ob2RlTWFwLmdldChjb25zdHJhaW50LmxlZnQpLmdldFdpZHRoKCkgLyAyICsgaWRUb05vZGVNYXAuZ2V0KGNvbnN0cmFpbnQucmlnaHQpLmdldFdpZHRoKCkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0cmFpbnQuZ2FwID0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIICsgaWRUb05vZGVNYXAuZ2V0KGNvbnN0cmFpbnQudG9wKS5nZXRIZWlnaHQoKSAvIDIgKyBpZFRvTm9kZU1hcC5nZXQoY29uc3RyYWludC5ib3R0b20pLmdldEhlaWdodCgpIC8gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyogYXV4aWxpYXJ5IGZ1bmN0aW9ucyAqL1xuXG4gIC8vIGNhbGN1bGF0ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHBvc2l0aW9uIG9iamVjdHNcbiAgdmFyIGNhbGN1bGF0ZVBvc2l0aW9uRGlmZiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVBvc2l0aW9uRGlmZihwb3MxLCBwb3MyKSB7XG4gICAgcmV0dXJuIHsgeDogcG9zMS54IC0gcG9zMi54LCB5OiBwb3MxLnkgLSBwb3MyLnkgfTtcbiAgfTtcblxuICAvLyBjYWxjdWxhdGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgbm9kZXNcbiAgdmFyIGNhbGN1bGF0ZUF2Z1Bvc2l0aW9uID0gZnVuY3Rpb24gY2FsY3VsYXRlQXZnUG9zaXRpb24obm9kZUlkU2V0KSB7XG4gICAgdmFyIHhQb3NTdW0gPSAwO1xuICAgIHZhciB5UG9zU3VtID0gMDtcbiAgICBub2RlSWRTZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICB4UG9zU3VtICs9IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldO1xuICAgICAgeVBvc1N1bSArPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHg6IHhQb3NTdW0gLyBub2RlSWRTZXQuc2l6ZSwgeTogeVBvc1N1bSAvIG5vZGVJZFNldC5zaXplIH07XG4gIH07XG5cbiAgLy8gZmluZCBhbiBhcHByb3ByaWF0ZSBwb3NpdGlvbmluZyBmb3IgdGhlIG5vZGVzIGluIGEgZ2l2ZW4gZ3JhcGggYWNjb3JkaW5nIHRvIHJlbGF0aXZlIHBsYWNlbWVudCBjb25zdHJhaW50c1xuICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgdGhlIGZpeGVkIG5vZGVzIGFuZCBhbGlnbm1lbnQgY29uc3RyYWludHMgaW50byBhY2NvdW50XG4gIC8vIGdyYXBoOiBkYWcgdG8gYmUgZXZhbHVhdGVkLCBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIiwgXG4gIC8vIGZpeGVkTm9kZXM6IHNldCBvZiBmaXhlZCBub2RlcyB0byBjb25zaWRlciBkdXJpbmcgZXZhbHVhdGlvbiwgZHVtbXlQb3NpdGlvbnM6IGFwcHJvcHJpYXRlIGNvb3JkaW5hdGVzIG9mIHRoZSBkdW1teSBub2RlcyAgXG4gIHZhciBmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50ID0gZnVuY3Rpb24gZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChncmFwaCwgZGlyZWN0aW9uLCBmaXhlZE5vZGVzLCBkdW1teVBvc2l0aW9ucywgY29tcG9uZW50U291cmNlcykge1xuXG4gICAgLy8gZmluZCB1bmlvbiBvZiB0d28gc2V0c1xuICAgIGZ1bmN0aW9uIHNldFVuaW9uKHNldEEsIHNldEIpIHtcbiAgICAgIHZhciB1bmlvbiA9IG5ldyBTZXQoc2V0QSk7XG4gICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG4gICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gc2V0QltTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgICAgICB2YXIgZWxlbSA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgdW5pb24uYWRkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuaW9uO1xuICAgIH1cblxuICAgIC8vIGZpbmQgaW5kZWdyZWUgY291bnQgZm9yIGVhY2ggbm9kZVxuICAgIHZhciBpbkRlZ3JlZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBncmFwaC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpbkRlZ3JlZXMuc2V0KGtleSwgMCk7XG4gICAgfSk7XG4gICAgZ3JhcGguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoYWRqYWNlbnQpIHtcbiAgICAgICAgaW5EZWdyZWVzLnNldChhZGphY2VudC5pZCwgaW5EZWdyZWVzLmdldChhZGphY2VudC5pZCkgKyAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIHBvc2l0aW9uTWFwID0gbmV3IE1hcCgpOyAvLyBrZWVwcyB0aGUgcG9zaXRpb24gZm9yIGVhY2ggbm9kZVxuICAgIHZhciBwYXN0TWFwID0gbmV3IE1hcCgpOyAvLyBrZWVwcyB0aGUgcHJlZGVjZXNzb3JzKHBhc3QpIG9mIGEgbm9kZVxuICAgIHZhciBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0KCk7XG4gICAgaW5EZWdyZWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSAwKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goa2V5KTtcbiAgICAgICAgaWYgKCFmaXhlZE5vZGVzKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KGtleSwgbm9kZUluZGV4ZXMuaGFzKGtleSkgPyB4Q29vcmRzW25vZGVJbmRleGVzLmdldChrZXkpXSA6IGR1bW15UG9zaXRpb25zLmdldChrZXkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KGtleSwgbm9kZUluZGV4ZXMuaGFzKGtleSkgPyB5Q29vcmRzW25vZGVJbmRleGVzLmdldChrZXkpXSA6IGR1bW15UG9zaXRpb25zLmdldChrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc2l0aW9uTWFwLnNldChrZXksIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICB9XG4gICAgICBpZiAoZml4ZWROb2Rlcykge1xuICAgICAgICBwYXN0TWFwLnNldChrZXksIG5ldyBTZXQoW2tleV0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGFsaWduIHNvdXJjZXMgb2YgZWFjaCBjb21wb25lbnQgaW4gZW5mb3JjZW1lbnQgcGhhc2VcbiAgICBpZiAoZml4ZWROb2Rlcykge1xuICAgICAgY29tcG9uZW50U291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGZpeGVkSWRzID0gW107XG4gICAgICAgIGNvbXBvbmVudC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICBpZiAoZml4ZWROb2Rlcy5oYXMobm9kZUlkKSkge1xuICAgICAgICAgICAgZml4ZWRJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmaXhlZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICAgICAgICBmaXhlZElkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaXhlZElkKSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChmaXhlZElkLCBub2RlSW5kZXhlcy5oYXMoZml4ZWRJZCkgPyB4Q29vcmRzW25vZGVJbmRleGVzLmdldChmaXhlZElkKV0gOiBkdW1teVBvc2l0aW9ucy5nZXQoZml4ZWRJZCkpO1xuICAgICAgICAgICAgICBwb3NpdGlvbiArPSBwb3NpdGlvbk1hcC5nZXQoZml4ZWRJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwb3NpdGlvbk1hcC5zZXQoZml4ZWRJZCwgbm9kZUluZGV4ZXMuaGFzKGZpeGVkSWQpID8geUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQoZml4ZWRJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KGZpeGVkSWQpKTtcbiAgICAgICAgICAgICAgcG9zaXRpb24gKz0gcG9zaXRpb25NYXAuZ2V0KGZpeGVkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLyBmaXhlZElkcy5sZW5ndGg7XG4gICAgICAgICAgY29tcG9uZW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgaWYgKCFmaXhlZE5vZGVzLmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChub2RlSWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICBjb21wb25lbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIF9wb3NpdGlvbiArPSBub2RlSW5kZXhlcy5oYXMobm9kZUlkKSA/IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KG5vZGVJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfcG9zaXRpb24gKz0gbm9kZUluZGV4ZXMuaGFzKG5vZGVJZCkgPyB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXSA6IGR1bW15UG9zaXRpb25zLmdldChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9wb3NpdGlvbiA9IF9wb3NpdGlvbiAvIGNvbXBvbmVudC5sZW5ndGg7XG4gICAgICAgICAgY29tcG9uZW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KG5vZGVJZCwgX3Bvc2l0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXNcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgdmFyIGN1cnJlbnROb2RlID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIHZhciBuZWlnaGJvcnMgPSBncmFwaC5nZXQoY3VycmVudE5vZGUpO1xuICAgICAgbmVpZ2hib3JzLmZvckVhY2goZnVuY3Rpb24gKG5laWdoYm9yKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbk1hcC5nZXQobmVpZ2hib3IuaWQpIDwgcG9zaXRpb25NYXAuZ2V0KGN1cnJlbnROb2RlKSArIG5laWdoYm9yLmdhcCkge1xuICAgICAgICAgIGlmIChmaXhlZE5vZGVzICYmIGZpeGVkTm9kZXMuaGFzKG5laWdoYm9yLmlkKSkge1xuICAgICAgICAgICAgdmFyIGZpeGVkUG9zaXRpb24gPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIGZpeGVkUG9zaXRpb24gPSBub2RlSW5kZXhlcy5oYXMobmVpZ2hib3IuaWQpID8geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobmVpZ2hib3IuaWQpXSA6IGR1bW15UG9zaXRpb25zLmdldChuZWlnaGJvci5pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaXhlZFBvc2l0aW9uID0gbm9kZUluZGV4ZXMuaGFzKG5laWdoYm9yLmlkKSA/IHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5laWdoYm9yLmlkKV0gOiBkdW1teVBvc2l0aW9ucy5nZXQobmVpZ2hib3IuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KG5laWdoYm9yLmlkLCBmaXhlZFBvc2l0aW9uKTsgLy8gVE9ETzogbWF5IGRvIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgICAgIGlmIChmaXhlZFBvc2l0aW9uIDwgcG9zaXRpb25NYXAuZ2V0KGN1cnJlbnROb2RlKSArIG5laWdoYm9yLmdhcCkge1xuICAgICAgICAgICAgICB2YXIgZGlmZiA9IHBvc2l0aW9uTWFwLmdldChjdXJyZW50Tm9kZSkgKyBuZWlnaGJvci5nYXAgLSBmaXhlZFBvc2l0aW9uO1xuICAgICAgICAgICAgICBwYXN0TWFwLmdldChjdXJyZW50Tm9kZSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KG5vZGVJZCwgcG9zaXRpb25NYXAuZ2V0KG5vZGVJZCkgLSBkaWZmKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChuZWlnaGJvci5pZCwgcG9zaXRpb25NYXAuZ2V0KGN1cnJlbnROb2RlKSArIG5laWdoYm9yLmdhcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluRGVncmVlcy5zZXQobmVpZ2hib3IuaWQsIGluRGVncmVlcy5nZXQobmVpZ2hib3IuaWQpIC0gMSk7XG4gICAgICAgIGlmIChpbkRlZ3JlZXMuZ2V0KG5laWdoYm9yLmlkKSA9PSAwKSB7XG4gICAgICAgICAgcXVldWUucHVzaChuZWlnaGJvci5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpeGVkTm9kZXMpIHtcbiAgICAgICAgICBwYXN0TWFwLnNldChuZWlnaGJvci5pZCwgc2V0VW5pb24ocGFzdE1hcC5nZXQoY3VycmVudE5vZGUpLCBwYXN0TWFwLmdldChuZWlnaGJvci5pZCkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT0gMCkge1xuICAgICAgX2xvb3AoKTtcbiAgICB9XG5cbiAgICAvLyByZWFkanVzdCBwb3NpdGlvbiBvZiB0aGUgbm9kZXMgYWZ0ZXIgZW5mb3JjZW1lbnRcbiAgICBpZiAoZml4ZWROb2Rlcykge1xuICAgICAgLy8gZmluZCBpbmRlZ3JlZSBjb3VudCBmb3IgZWFjaCBub2RlXG4gICAgICB2YXIgc2lua05vZGVzID0gbmV3IFNldCgpO1xuXG4gICAgICBncmFwaC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHNpbmtOb2Rlcy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBfY29tcG9uZW50cyA9IFtdO1xuICAgICAgcGFzdE1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChzaW5rTm9kZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICB2YXIgaXNGaXhlZENvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG4gICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAyOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlKSB7XG4gICAgICAgICAgICAgIHZhciBub2RlSWQgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgICAgICAgICAgaWYgKGZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgICAgICBpc0ZpeGVkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcbiAgICAgICAgICAgIF9pdGVyYXRvckVycm9yMiA9IGVycjtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikge1xuICAgICAgICAgICAgICAgIF9pdGVyYXRvcjIucmV0dXJuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWlzRml4ZWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBpc0V4aXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgZXhpc3RBdCA9IHZvaWQgMDtcbiAgICAgICAgICAgIF9jb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5oYXMoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh2YWx1ZSkpWzBdKSkge1xuICAgICAgICAgICAgICAgIGlzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGV4aXN0QXQgPSBpbmRleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzRXhpc3QpIHtcbiAgICAgICAgICAgICAgX2NvbXBvbmVudHMucHVzaChuZXcgU2V0KHZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50c1tleGlzdEF0XS5hZGQoZWxlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgX2NvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50LCBpbmRleCkge1xuICAgICAgICB2YXIgbWluQmVmb3JlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB2YXIgbWluQWZ0ZXIgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHZhciBtYXhCZWZvcmUgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHZhciBtYXhBZnRlciA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IzID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gY29tcG9uZW50W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAzOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlKSB7XG4gICAgICAgICAgICB2YXIgbm9kZUlkID0gX3N0ZXAzLnZhbHVlO1xuXG4gICAgICAgICAgICB2YXIgcG9zQmVmb3JlID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICBwb3NCZWZvcmUgPSBub2RlSW5kZXhlcy5oYXMobm9kZUlkKSA/IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KG5vZGVJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwb3NCZWZvcmUgPSBub2RlSW5kZXhlcy5oYXMobm9kZUlkKSA/IHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KG5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcG9zQWZ0ZXIgPSBwb3NpdGlvbk1hcC5nZXQobm9kZUlkKTtcbiAgICAgICAgICAgIGlmIChwb3NCZWZvcmUgPCBtaW5CZWZvcmUpIHtcbiAgICAgICAgICAgICAgbWluQmVmb3JlID0gcG9zQmVmb3JlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvc0JlZm9yZSA+IG1heEJlZm9yZSkge1xuICAgICAgICAgICAgICBtYXhCZWZvcmUgPSBwb3NCZWZvcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zQWZ0ZXIgPCBtaW5BZnRlcikge1xuICAgICAgICAgICAgICBtaW5BZnRlciA9IHBvc0FmdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvc0FmdGVyID4gbWF4QWZ0ZXIpIHtcbiAgICAgICAgICAgICAgbWF4QWZ0ZXIgPSBwb3NBZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG4gICAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7XG4gICAgICAgICAgICAgIF9pdGVyYXRvcjMucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWZmID0gKG1pbkJlZm9yZSArIG1heEJlZm9yZSkgLyAyIC0gKG1pbkFmdGVyICsgbWF4QWZ0ZXIpIC8gMjtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gY29tcG9uZW50W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA0OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gKF9zdGVwNCA9IF9pdGVyYXRvcjQubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlKSB7XG4gICAgICAgICAgICB2YXIgX25vZGVJZCA9IF9zdGVwNC52YWx1ZTtcblxuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KF9ub2RlSWQsIHBvc2l0aW9uTWFwLmdldChfbm9kZUlkKSArIGRpZmYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gdHJ1ZTtcbiAgICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgJiYgX2l0ZXJhdG9yNC5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5yZXR1cm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yNCkge1xuICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb25NYXA7XG4gIH07XG5cbiAgLy8gZmluZCB0cmFuc2Zvcm1hdGlvbiBiYXNlZCBvbiByZWwuIHBsYWNlbWVudCBjb25zdHJhaW50cyBpZiB0aGVyZSBhcmUgYm90aCBhbGlnbm1lbnQgYW5kIHJlbC4gcGxhY2VtZW50IGNvbnN0cmFpbnRzXG4gIC8vIG9yIGlmIHRoZXJlIGFyZSBvbmx5IHJlbC4gcGxhY2VtZW50IGNvbnRyYWludHMgd2hlcmUgdGhlIGxhcmdlc3QgY29tcG9uZW50IGlzbid0IHN1ZmZpY2llbnRseSBsYXJnZVxuICB2YXIgYXBwbHlSZWZsZWN0aW9uRm9yUmVsYXRpdmVQbGFjZW1lbnQgPSBmdW5jdGlvbiBhcHBseVJlZmxlY3Rpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnRzKSB7XG4gICAgLy8gdmFyaWFibGVzIHRvIGNvdW50IHZvdGVzXG4gICAgdmFyIHJlZmxlY3RPblkgPSAwLFxuICAgICAgICBub3RSZWZsZWN0T25ZID0gMDtcbiAgICB2YXIgcmVmbGVjdE9uWCA9IDAsXG4gICAgICAgIG5vdFJlZmxlY3RPblggPSAwO1xuXG4gICAgcmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICBpZiAoY29uc3RyYWludC5sZWZ0KSB7XG4gICAgICAgIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGNvbnN0cmFpbnQubGVmdCldIC0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQoY29uc3RyYWludC5yaWdodCldID49IDAgPyByZWZsZWN0T25ZKysgOiBub3RSZWZsZWN0T25ZKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5Q29vcmRzW25vZGVJbmRleGVzLmdldChjb25zdHJhaW50LnRvcCldIC0geUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQoY29uc3RyYWludC5ib3R0b20pXSA+PSAwID8gcmVmbGVjdE9uWCsrIDogbm90UmVmbGVjdE9uWCsrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlZmxlY3RPblkgPiBub3RSZWZsZWN0T25ZICYmIHJlZmxlY3RPblggPiBub3RSZWZsZWN0T25YKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZUluZGV4ZXMuc2l6ZTsgX2krKykge1xuICAgICAgICB4Q29vcmRzW19pXSA9IC0xICogeENvb3Jkc1tfaV07XG4gICAgICAgIHlDb29yZHNbX2ldID0gLTEgKiB5Q29vcmRzW19pXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3RPblkgPiBub3RSZWZsZWN0T25ZKSB7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlSW5kZXhlcy5zaXplOyBfaTIrKykge1xuICAgICAgICB4Q29vcmRzW19pMl0gPSAtMSAqIHhDb29yZHNbX2kyXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3RPblggPiBub3RSZWZsZWN0T25YKSB7XG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBub2RlSW5kZXhlcy5zaXplOyBfaTMrKykge1xuICAgICAgICB5Q29vcmRzW19pM10gPSAtMSAqIHlDb29yZHNbX2kzXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gZmluZCB3ZWFrbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gdW5kaXJlY3RlZCBncmFwaFxuICB2YXIgZmluZENvbXBvbmVudHMgPSBmdW5jdGlvbiBmaW5kQ29tcG9uZW50cyhncmFwaCkge1xuICAgIC8vIGZpbmQgd2Vha2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGluIGRhZ1xuICAgIHZhciBjb21wb25lbnRzID0gW107XG4gICAgdmFyIHF1ZXVlID0gbmV3IExpbmtlZExpc3QoKTtcbiAgICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgZ3JhcGguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbXBvbmVudHNbY291bnRdID0gW107XG4gICAgICAgIHZhciBfY3VycmVudE5vZGUgPSBrZXk7XG4gICAgICAgIHF1ZXVlLnB1c2goX2N1cnJlbnROb2RlKTtcbiAgICAgICAgdmlzaXRlZC5hZGQoX2N1cnJlbnROb2RlKTtcbiAgICAgICAgY29tcG9uZW50c1tjb3VudF0ucHVzaChfY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgIF9jdXJyZW50Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgdmFyIG5laWdoYm9ycyA9IGdyYXBoLmdldChfY3VycmVudE5vZGUpO1xuICAgICAgICAgIG5laWdoYm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChuZWlnaGJvcikge1xuICAgICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhuZWlnaGJvci5pZCkpIHtcbiAgICAgICAgICAgICAgcXVldWUucHVzaChuZWlnaGJvci5pZCk7XG4gICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yLmlkKTtcbiAgICAgICAgICAgICAgY29tcG9uZW50c1tjb3VudF0ucHVzaChuZWlnaGJvci5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbiAgfTtcblxuICAvLyByZXR1cm4gdW5kaXJlY3RlZCB2ZXJzaW9uIG9mIGdpdmVuIGRhZ1xuICB2YXIgZGFnVG9VbmRpcmVjdGVkID0gZnVuY3Rpb24gZGFnVG9VbmRpcmVjdGVkKGRhZykge1xuICAgIHZhciB1bmRpcmVjdGVkID0gbmV3IE1hcCgpO1xuXG4gICAgZGFnLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHVuZGlyZWN0ZWQuc2V0KGtleSwgW10pO1xuICAgIH0pO1xuXG4gICAgZGFnLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGFkamFjZW50KSB7XG4gICAgICAgIHVuZGlyZWN0ZWQuZ2V0KGtleSkucHVzaChhZGphY2VudCk7XG4gICAgICAgIHVuZGlyZWN0ZWQuZ2V0KGFkamFjZW50LmlkKS5wdXNoKHsgaWQ6IGtleSwgZ2FwOiBhZGphY2VudC5nYXAsIGRpcmVjdGlvbjogYWRqYWNlbnQuZGlyZWN0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5kaXJlY3RlZDtcbiAgfTtcblxuICAvLyByZXR1cm4gcmV2ZXJzZWQgKGRpcmVjdGlvbnMgaW52ZXJ0ZWQpIHZlcnNpb24gb2YgZ2l2ZW4gZGFnXG4gIHZhciBkYWdUb1JldmVyc2VkID0gZnVuY3Rpb24gZGFnVG9SZXZlcnNlZChkYWcpIHtcbiAgICB2YXIgcmV2ZXJzZWQgPSBuZXcgTWFwKCk7XG5cbiAgICBkYWcuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgcmV2ZXJzZWQuc2V0KGtleSwgW10pO1xuICAgIH0pO1xuXG4gICAgZGFnLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGFkamFjZW50KSB7XG4gICAgICAgIHJldmVyc2VkLmdldChhZGphY2VudC5pZCkucHVzaCh7IGlkOiBrZXksIGdhcDogYWRqYWNlbnQuZ2FwLCBkaXJlY3Rpb246IGFkamFjZW50LmRpcmVjdGlvbiB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldmVyc2VkO1xuICB9O1xuXG4gIC8qKioqICBhcHBseSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgaW5pdGlhbCBkcmFmdCBsYXlvdXQgdG8gYmV0dGVyIGFsaWduIHdpdGggY29uc3RyYWluZWQgbm9kZXMgKioqKi9cbiAgLy8gc29sdmUgdGhlIE9ydGhvZ29uYWwgUHJvY3J1c3RlYW4gUHJvYmxlbSB0byByb3RhdGUgYW5kL29yIHJlZmxlY3QgaW5pdGlhbCBkcmFmdCBsYXlvdXRcbiAgLy8gaGVyZSB3ZSBmb2xsb3cgdGhlIHNvbHV0aW9uIGluIENoYXB0ZXIgMjAuMiBvZiBCb3JnLCBJLiAmIEdyb2VuZW4sIFAuICgyMDA1KSBNb2Rlcm4gTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nOiBUaGVvcnkgYW5kIEFwcGxpY2F0aW9ucyBcblxuICAvKiBjb25zdHJ1Y3Qgc291cmNlIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbnMgKi9cblxuICB2YXIgdGFyZ2V0TWF0cml4ID0gW107IC8vIEEgLSB0YXJnZXQgY29uZmlndXJhdGlvblxuICB2YXIgc291cmNlTWF0cml4ID0gW107IC8vIEIgLSBzb3VyY2UgY29uZmlndXJhdGlvbiBcbiAgdmFyIHN0YW5kYXJkVHJhbnNmb3JtYXRpb24gPSBmYWxzZTsgLy8gZmFsc2UgZm9yIG5vIHRyYW5zZm9ybWF0aW9uLCB0cnVlIGZvciBzdGFuZGFydCAoUHJvY3J1c3RlcykgdHJhbnNmb3JtYXRpb24gKHJvdGF0aW9uIGFuZC9vciByZWZsZWN0aW9uKVxuICB2YXIgcmVmbGVjdGlvblR5cGUgPSBmYWxzZTsgLy8gZmFsc2UvdHJ1ZSBmb3IgcmVmbGVjdGlvbiBjaGVjaywgJ3JlZmxlY3RPblgnLCAncmVmbGVjdE9uWScgb3IgJ3JlZmxlY3RPbkJvdGgnIGZvciByZWZsZWN0aW9uIHR5cGUgaWYgbmVjZXNzYXJ5XG4gIHZhciBmaXhlZE5vZGVzID0gbmV3IFNldCgpO1xuICB2YXIgZGFnID0gbmV3IE1hcCgpOyAvLyBhZGphY2VuY3kgbGlzdCB0byBrZWVwIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKGRhZykgdGhhdCBjb25zaXN0cyBvZiByZWxhdGl2ZSBwbGFjZW1lbnQgY29uc3RyYWludHNcbiAgdmFyIGRhZ1VuZGlyZWN0ZWQgPSBuZXcgTWFwKCk7IC8vIHVuZGlyZWN0ZWQgdmVyc2lvbiBvZiB0aGUgZGFnXG4gIHZhciBjb21wb25lbnRzID0gW107IC8vIHdlYWtseSBjb25uZWN0ZWQgY29tcG9uZW50c1xuXG4gIC8vIGZpbGwgZml4ZWROb2RlcyBjb2xsZWN0aW9uIHRvIHVzZSBsYXRlclxuICBpZiAoY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCkge1xuICAgIGNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZURhdGEpIHtcbiAgICAgIGZpeGVkTm9kZXMuYWRkKG5vZGVEYXRhLm5vZGVJZCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb25zdHJ1Y3QgZGFnIGZyb20gcmVsYXRpdmUgcGxhY2VtZW50IGNvbnN0cmFpbnRzIFxuICBpZiAoY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgLy8gY29uc3RydWN0IGJvdGggZGlyZWN0ZWQgYW5kIHVuZGlyZWN0ZWQgdmVyc2lvbiBvZiB0aGUgZGFnXG4gICAgY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgIGlmIChjb25zdHJhaW50LmxlZnQpIHtcbiAgICAgICAgaWYgKGRhZy5oYXMoY29uc3RyYWludC5sZWZ0KSkge1xuICAgICAgICAgIGRhZy5nZXQoY29uc3RyYWludC5sZWZ0KS5wdXNoKHsgaWQ6IGNvbnN0cmFpbnQucmlnaHQsIGdhcDogY29uc3RyYWludC5nYXAsIGRpcmVjdGlvbjogXCJob3Jpem9udGFsXCIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGFnLnNldChjb25zdHJhaW50LmxlZnQsIFt7IGlkOiBjb25zdHJhaW50LnJpZ2h0LCBnYXA6IGNvbnN0cmFpbnQuZ2FwLCBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhZy5oYXMoY29uc3RyYWludC5yaWdodCkpIHtcbiAgICAgICAgICBkYWcuc2V0KGNvbnN0cmFpbnQucmlnaHQsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRhZy5oYXMoY29uc3RyYWludC50b3ApKSB7XG4gICAgICAgICAgZGFnLmdldChjb25zdHJhaW50LnRvcCkucHVzaCh7IGlkOiBjb25zdHJhaW50LmJvdHRvbSwgZ2FwOiBjb25zdHJhaW50LmdhcCwgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGFnLnNldChjb25zdHJhaW50LnRvcCwgW3sgaWQ6IGNvbnN0cmFpbnQuYm90dG9tLCBnYXA6IGNvbnN0cmFpbnQuZ2FwLCBkaXJlY3Rpb246IFwidmVydGljYWxcIiB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYWcuaGFzKGNvbnN0cmFpbnQuYm90dG9tKSkge1xuICAgICAgICAgIGRhZy5zZXQoY29uc3RyYWludC5ib3R0b20sIFtdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGFnVW5kaXJlY3RlZCA9IGRhZ1RvVW5kaXJlY3RlZChkYWcpO1xuICAgIGNvbXBvbmVudHMgPSBmaW5kQ29tcG9uZW50cyhkYWdVbmRpcmVjdGVkKTtcbiAgfVxuXG4gIGlmIChDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HKSB7XG4gICAgLy8gZmlyc3QgY2hlY2sgZml4ZWQgbm9kZSBjb25zdHJhaW50XG4gICAgaWYgKGNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQgJiYgY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhLCBpKSB7XG4gICAgICAgIHRhcmdldE1hdHJpeFtpXSA9IFtub2RlRGF0YS5wb3NpdGlvbi54LCBub2RlRGF0YS5wb3NpdGlvbi55XTtcbiAgICAgICAgc291cmNlTWF0cml4W2ldID0gW3hDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVEYXRhLm5vZGVJZCldLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlRGF0YS5ub2RlSWQpXV07XG4gICAgICB9KTtcbiAgICAgIHN0YW5kYXJkVHJhbnNmb3JtYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gdGhlbiBjaGVjayBhbGlnbm1lbnQgY29uc3RyYWludFxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCkge1xuICAgICAgICAgIHZhciB2ZXJ0aWNhbEFsaWduID0gY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbDtcblxuICAgICAgICAgIHZhciBfbG9vcDIgPSBmdW5jdGlvbiBfbG9vcDIoX2k0KSB7XG4gICAgICAgICAgICB2YXIgYWxpZ25tZW50U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdmVydGljYWxBbGlnbltfaTRdLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgICBhbGlnbm1lbnRTZXQuYWRkKG5vZGVJZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0KFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYWxpZ25tZW50U2V0KSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaXhlZE5vZGVzLmhhcyh4KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHZhciB4UG9zID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5zaXplID4gMCkgeFBvcyA9IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGludGVyc2VjdGlvbi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTtlbHNlIHhQb3MgPSBjYWxjdWxhdGVBdmdQb3NpdGlvbihhbGlnbm1lbnRTZXQpLng7XG5cbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25bX2k0XS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0TWF0cml4W2NvdW50XSA9IFt4UG9zLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXV07XG4gICAgICAgICAgICAgIHNvdXJjZU1hdHJpeFtjb3VudF0gPSBbeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV0sIHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldXTtcbiAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCB2ZXJ0aWNhbEFsaWduLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgICAgICAgIF9sb29wMihfaTQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFuZGFyZFRyYW5zZm9ybWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgdmFyIGhvcml6b250YWxBbGlnbiA9IGNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbDtcblxuICAgICAgICAgIHZhciBfbG9vcDMgPSBmdW5jdGlvbiBfbG9vcDMoX2k1KSB7XG4gICAgICAgICAgICB2YXIgYWxpZ25tZW50U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduW19pNV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgIGFsaWdubWVudFNldC5hZGQobm9kZUlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGlnbm1lbnRTZXQpKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpeGVkTm9kZXMuaGFzKHgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdmFyIHlQb3MgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uLnNpemUgPiAwKSB5UG9zID0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQoaW50ZXJzZWN0aW9uLnZhbHVlcygpLm5leHQoKS52YWx1ZSldO2Vsc2UgeVBvcyA9IGNhbGN1bGF0ZUF2Z1Bvc2l0aW9uKGFsaWdubWVudFNldCkueTtcblxuICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduW19pNV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgIHRhcmdldE1hdHJpeFtjb3VudF0gPSBbeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV0sIHlQb3NdO1xuICAgICAgICAgICAgICBzb3VyY2VNYXRyaXhbY291bnRdID0gW3hDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXV07XG4gICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgaG9yaXpvbnRhbEFsaWduLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgICAgICAgIF9sb29wMyhfaTUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFuZGFyZFRyYW5zZm9ybWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgICAgICAgcmVmbGVjdGlvblR5cGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0gZWxzZSBpZiAoY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgICAvLyBmaW5hbGx5IGNoZWNrIHJlbGF0aXZlIHBsYWNlbWVudCBjb25zdHJhaW50XG4gICAgICAvLyBmaW5kIGxhcmdlc3QgY29tcG9uZW50IGluIGRhZ1xuICAgICAgdmFyIGxhcmdlc3RDb21wb25lbnRTaXplID0gMDtcbiAgICAgIHZhciBsYXJnZXN0Q29tcG9uZW50SW5kZXggPSAwO1xuICAgICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgY29tcG9uZW50cy5sZW5ndGg7IF9pNisrKSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzW19pNl0ubGVuZ3RoID4gbGFyZ2VzdENvbXBvbmVudFNpemUpIHtcbiAgICAgICAgICBsYXJnZXN0Q29tcG9uZW50U2l6ZSA9IGNvbXBvbmVudHNbX2k2XS5sZW5ndGg7XG4gICAgICAgICAgbGFyZ2VzdENvbXBvbmVudEluZGV4ID0gX2k2O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBsYXJnZXN0IGNvbXBvbmVudCBpc24ndCBkb21pbmFudCwgdGhlbiB0YWtlIHRoZSB2b3RlcyBmb3IgcmVmbGVjdGlvblxuICAgICAgaWYgKGxhcmdlc3RDb21wb25lbnRTaXplIDwgZGFnVW5kaXJlY3RlZC5zaXplIC8gMikge1xuICAgICAgICBhcHBseVJlZmxlY3Rpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChjb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpO1xuICAgICAgICBzdGFuZGFyZFRyYW5zZm9ybWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHJlZmxlY3Rpb25UeXBlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1c2UgbGFyZ2VzdCBjb21wb25lbnQgZm9yIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgIC8vIGNvbnN0cnVjdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzdWJncmFwaHMgaW4gdGhlIGxhcmdlc3QgY29tcG9uZW50XG4gICAgICAgIHZhciBzdWJHcmFwaE9uSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIHN1YkdyYXBoT25WZXJ0aWNhbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRzSW5sYXJnZXN0Q29tcG9uZW50ID0gW107XG5cbiAgICAgICAgY29tcG9uZW50c1tsYXJnZXN0Q29tcG9uZW50SW5kZXhdLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgIGRhZy5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChhZGphY2VudCkge1xuICAgICAgICAgICAgaWYgKGFkamFjZW50LmRpcmVjdGlvbiA9PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICBpZiAoc3ViR3JhcGhPbkhvcml6b250YWwuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5nZXQobm9kZUlkKS5wdXNoKGFkamFjZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5zZXQobm9kZUlkLCBbYWRqYWNlbnRdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIXN1YkdyYXBoT25Ib3Jpem9udGFsLmhhcyhhZGphY2VudC5pZCkpIHtcbiAgICAgICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5zZXQoYWRqYWNlbnQuaWQsIFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdHJhaW50c0lubGFyZ2VzdENvbXBvbmVudC5wdXNoKHsgbGVmdDogbm9kZUlkLCByaWdodDogYWRqYWNlbnQuaWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoc3ViR3JhcGhPblZlcnRpY2FsLmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLmdldChub2RlSWQpLnB1c2goYWRqYWNlbnQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YkdyYXBoT25WZXJ0aWNhbC5zZXQobm9kZUlkLCBbYWRqYWNlbnRdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIXN1YkdyYXBoT25WZXJ0aWNhbC5oYXMoYWRqYWNlbnQuaWQpKSB7XG4gICAgICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLnNldChhZGphY2VudC5pZCwgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzSW5sYXJnZXN0Q29tcG9uZW50LnB1c2goeyB0b3A6IG5vZGVJZCwgYm90dG9tOiBhZGphY2VudC5pZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXBwbHlSZWZsZWN0aW9uRm9yUmVsYXRpdmVQbGFjZW1lbnQoY29uc3RyYWludHNJbmxhcmdlc3RDb21wb25lbnQpO1xuICAgICAgICByZWZsZWN0aW9uVHlwZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBhcHByb3ByaWF0ZSBwb3NpdGlvbmluZyBmb3Igc3ViZ3JhcGhzXG4gICAgICAgIHZhciBwb3NpdGlvbk1hcEhvcml6b250YWwgPSBmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50KHN1YkdyYXBoT25Ib3Jpem9udGFsLCBcImhvcml6b250YWxcIik7XG4gICAgICAgIHZhciBwb3NpdGlvbk1hcFZlcnRpY2FsID0gZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChzdWJHcmFwaE9uVmVydGljYWwsIFwidmVydGljYWxcIik7XG5cbiAgICAgICAgLy8gY29uc3RydWN0IHNvdXJjZSBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29tcG9uZW50c1tsYXJnZXN0Q29tcG9uZW50SW5kZXhdLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCwgaSkge1xuICAgICAgICAgIHNvdXJjZU1hdHJpeFtpXSA9IFt4Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXSwgeUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV1dO1xuICAgICAgICAgIHRhcmdldE1hdHJpeFtpXSA9IFtdO1xuICAgICAgICAgIGlmIChwb3NpdGlvbk1hcEhvcml6b250YWwuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgIHRhcmdldE1hdHJpeFtpXVswXSA9IHBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQobm9kZUlkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0TWF0cml4W2ldWzBdID0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3NpdGlvbk1hcFZlcnRpY2FsLmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICB0YXJnZXRNYXRyaXhbaV1bMV0gPSBwb3NpdGlvbk1hcFZlcnRpY2FsLmdldChub2RlSWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRNYXRyaXhbaV1bMV0gPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YW5kYXJkVHJhbnNmb3JtYXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRyYW5zZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB0aGVuIGNhbGN1bGF0ZSBhbmQgYXBwbHkgdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gICAgaWYgKHN0YW5kYXJkVHJhbnNmb3JtYXRpb24pIHtcbiAgICAgIC8qIGNhbGN1bGF0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKi9cbiAgICAgIHZhciB0cmFuc2Zvcm1hdGlvbk1hdHJpeCA9IHZvaWQgMDtcbiAgICAgIHZhciB0YXJnZXRNYXRyaXhUcmFuc3Bvc2UgPSBNYXRyaXgudHJhbnNwb3NlKHRhcmdldE1hdHJpeCk7IC8vIEEnXG4gICAgICB2YXIgc291cmNlTWF0cml4VHJhbnNwb3NlID0gTWF0cml4LnRyYW5zcG9zZShzb3VyY2VNYXRyaXgpOyAvLyBCJ1xuXG4gICAgICAvLyBjZW50cmFsaXplIHRyYW5zcG9zZSBtYXRyaWNlc1xuICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgdGFyZ2V0TWF0cml4VHJhbnNwb3NlLmxlbmd0aDsgX2k3KyspIHtcbiAgICAgICAgdGFyZ2V0TWF0cml4VHJhbnNwb3NlW19pN10gPSBNYXRyaXgubXVsdEdhbW1hKHRhcmdldE1hdHJpeFRyYW5zcG9zZVtfaTddKTtcbiAgICAgICAgc291cmNlTWF0cml4VHJhbnNwb3NlW19pN10gPSBNYXRyaXgubXVsdEdhbW1hKHNvdXJjZU1hdHJpeFRyYW5zcG9zZVtfaTddKTtcbiAgICAgIH1cblxuICAgICAgLy8gZG8gYWN0dWFsIGNhbGN1bGF0aW9uIGZvciB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgIHZhciB0ZW1wTWF0cml4ID0gTWF0cml4Lm11bHRNYXQodGFyZ2V0TWF0cml4VHJhbnNwb3NlLCBNYXRyaXgudHJhbnNwb3NlKHNvdXJjZU1hdHJpeFRyYW5zcG9zZSkpOyAvLyB0ZW1wTWF0cml4ID0gQSdCXG4gICAgICB2YXIgU1ZEUmVzdWx0ID0gU1ZELnN2ZCh0ZW1wTWF0cml4KTsgLy8gU1ZEKEEnQikgPSBVU1YnLCBzdmQgZnVuY3Rpb24gcmV0dXJucyBVLCBTIGFuZCBWIFxuICAgICAgdHJhbnNmb3JtYXRpb25NYXRyaXggPSBNYXRyaXgubXVsdE1hdChTVkRSZXN1bHQuViwgTWF0cml4LnRyYW5zcG9zZShTVkRSZXN1bHQuVSkpOyAvLyB0cmFuc2Zvcm1hdGlvbk1hdHJpeCA9IFQgPSBWVSdcblxuICAgICAgLyogYXBwbHkgZm91bmQgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIG9idGFpbiBmaW5hbCBkcmFmdCBsYXlvdXQgKi9cbiAgICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IG5vZGVJbmRleGVzLnNpemU7IF9pOCsrKSB7XG4gICAgICAgIHZhciB0ZW1wMSA9IFt4Q29vcmRzW19pOF0sIHlDb29yZHNbX2k4XV07XG4gICAgICAgIHZhciB0ZW1wMiA9IFt0cmFuc2Zvcm1hdGlvbk1hdHJpeFswXVswXSwgdHJhbnNmb3JtYXRpb25NYXRyaXhbMV1bMF1dO1xuICAgICAgICB2YXIgdGVtcDMgPSBbdHJhbnNmb3JtYXRpb25NYXRyaXhbMF1bMV0sIHRyYW5zZm9ybWF0aW9uTWF0cml4WzFdWzFdXTtcbiAgICAgICAgeENvb3Jkc1tfaThdID0gTWF0cml4LmRvdFByb2R1Y3QodGVtcDEsIHRlbXAyKTtcbiAgICAgICAgeUNvb3Jkc1tfaThdID0gTWF0cml4LmRvdFByb2R1Y3QodGVtcDEsIHRlbXAzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbGllZCBvbmx5IGJvdGggYWxpZ25tZW50IGFuZCByZWwuIHBsYWNlbWVudCBjb25zdHJhaW50cyBleGlzdFxuICAgICAgaWYgKHJlZmxlY3Rpb25UeXBlKSB7XG4gICAgICAgIGFwcGx5UmVmbGVjdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50KGNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKENvU0VDb25zdGFudHMuRU5GT1JDRV9DT05TVFJBSU5UUykge1xuICAgIC8qKioqICBlbmZvcmNlIGNvbnN0cmFpbnRzIG9uIHRoZSB0cmFuc2Zvcm1lZCBkcmFmdCBsYXlvdXQgKioqKi9cblxuICAgIC8qIGZpcnN0IGVuZm9yY2UgZml4ZWQgbm9kZSBjb25zdHJhaW50ICovXG5cbiAgICBpZiAoY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCAmJiBjb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0cmFuc2xhdGlvbkFtb3VudCA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlRGF0YSwgaSkge1xuICAgICAgICB2YXIgcG9zSW5UaGVvcnkgPSB7IHg6IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVEYXRhLm5vZGVJZCldLCB5OiB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlRGF0YS5ub2RlSWQpXSB9O1xuICAgICAgICB2YXIgcG9zRGVzaXJlZCA9IG5vZGVEYXRhLnBvc2l0aW9uO1xuICAgICAgICB2YXIgcG9zRGlmZiA9IGNhbGN1bGF0ZVBvc2l0aW9uRGlmZihwb3NEZXNpcmVkLCBwb3NJblRoZW9yeSk7XG4gICAgICAgIHRyYW5zbGF0aW9uQW1vdW50LnggKz0gcG9zRGlmZi54O1xuICAgICAgICB0cmFuc2xhdGlvbkFtb3VudC55ICs9IHBvc0RpZmYueTtcbiAgICAgIH0pO1xuICAgICAgdHJhbnNsYXRpb25BbW91bnQueCAvPSBjb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aDtcbiAgICAgIHRyYW5zbGF0aW9uQW1vdW50LnkgLz0gY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg7XG5cbiAgICAgIHhDb29yZHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgeENvb3Jkc1tpXSArPSB0cmFuc2xhdGlvbkFtb3VudC54O1xuICAgICAgfSk7XG5cbiAgICAgIHlDb29yZHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgeUNvb3Jkc1tpXSArPSB0cmFuc2xhdGlvbkFtb3VudC55O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZURhdGEpIHtcbiAgICAgICAgeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZURhdGEubm9kZUlkKV0gPSBub2RlRGF0YS5wb3NpdGlvbi54O1xuICAgICAgICB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlRGF0YS5ub2RlSWQpXSA9IG5vZGVEYXRhLnBvc2l0aW9uLnk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiB0aGVuIGVuZm9yY2UgYWxpZ25tZW50IGNvbnN0cmFpbnQgKi9cblxuICAgIGlmIChjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KSB7XG4gICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCkge1xuICAgICAgICB2YXIgeEFsaWduID0gY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbDtcblxuICAgICAgICB2YXIgX2xvb3A0ID0gZnVuY3Rpb24gX2xvb3A0KF9pOSkge1xuICAgICAgICAgIHZhciBhbGlnbm1lbnRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgeEFsaWduW19pOV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBhbGlnbm1lbnRTZXQuYWRkKG5vZGVJZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGlnbm1lbnRTZXQpKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXhlZE5vZGVzLmhhcyh4KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdmFyIHhQb3MgPSB2b2lkIDA7XG4gICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5zaXplID4gMCkgeFBvcyA9IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGludGVyc2VjdGlvbi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTtlbHNlIHhQb3MgPSBjYWxjdWxhdGVBdmdQb3NpdGlvbihhbGlnbm1lbnRTZXQpLng7XG5cbiAgICAgICAgICBhbGlnbm1lbnRTZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAoIWZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldID0geFBvcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCB4QWxpZ24ubGVuZ3RoOyBfaTkrKykge1xuICAgICAgICAgIF9sb29wNChfaTkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKSB7XG4gICAgICAgIHZhciB5QWxpZ24gPSBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWw7XG5cbiAgICAgICAgdmFyIF9sb29wNSA9IGZ1bmN0aW9uIF9sb29wNShfaTEwKSB7XG4gICAgICAgICAgdmFyIGFsaWdubWVudFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB5QWxpZ25bX2kxMF0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBhbGlnbm1lbnRTZXQuYWRkKG5vZGVJZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGlnbm1lbnRTZXQpKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXhlZE5vZGVzLmhhcyh4KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdmFyIHlQb3MgPSB2b2lkIDA7XG4gICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5zaXplID4gMCkgeVBvcyA9IHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGludGVyc2VjdGlvbi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTtlbHNlIHlQb3MgPSBjYWxjdWxhdGVBdmdQb3NpdGlvbihhbGlnbm1lbnRTZXQpLnk7XG5cbiAgICAgICAgICBhbGlnbm1lbnRTZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAoIWZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldID0geVBvcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBfaTEwID0gMDsgX2kxMCA8IHlBbGlnbi5sZW5ndGg7IF9pMTArKykge1xuICAgICAgICAgIF9sb29wNShfaTEwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGZpbmFsbHkgZW5mb3JjZSByZWxhdGl2ZSBwbGFjZW1lbnQgY29uc3RyYWludCAqL1xuXG4gICAgaWYgKGNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBkdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50ID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50ID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgZHVtbXlQb3NpdGlvbnNGb3JWZXJ0aWNhbEFsaWdubWVudCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGR1bW15UG9zaXRpb25zRm9ySG9yaXpvbnRhbEFsaWdubWVudCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGZpeGVkTm9kZXNPbkhvcml6b250YWwgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBmaXhlZE5vZGVzT25WZXJ0aWNhbCA9IG5ldyBTZXQoKTtcblxuICAgICAgICAvLyBmaWxsIG1hcHMgYW5kIHNldHMgICAgICBcbiAgICAgICAgZml4ZWROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICBmaXhlZE5vZGVzT25Ib3Jpem9udGFsLmFkZChub2RlSWQpO1xuICAgICAgICAgIGZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZChub2RlSWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgICAgIGlmIChjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB2YXIgdmVydGljYWxBbGlnbm1lbnQgPSBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsO1xuXG4gICAgICAgICAgICB2YXIgX2xvb3A2ID0gZnVuY3Rpb24gX2xvb3A2KF9pMTEpIHtcbiAgICAgICAgICAgICAgZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgX2kxMSwgW10pO1xuICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudFtfaTExXS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgICBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50LnNldChub2RlSWQsIFwiZHVtbXlcIiArIF9pMTEpO1xuICAgICAgICAgICAgICAgIGR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KFwiZHVtbXlcIiArIF9pMTEpLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoZml4ZWROb2Rlcy5oYXMobm9kZUlkKSkge1xuICAgICAgICAgICAgICAgICAgZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoXCJkdW1teVwiICsgX2kxMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZHVtbXlQb3NpdGlvbnNGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgX2kxMSwgeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQodmVydGljYWxBbGlnbm1lbnRbX2kxMV1bMF0pXSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaTExID0gMDsgX2kxMSA8IHZlcnRpY2FsQWxpZ25tZW50Lmxlbmd0aDsgX2kxMSsrKSB7XG4gICAgICAgICAgICAgIF9sb29wNihfaTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdmFyIGhvcml6b250YWxBbGlnbm1lbnQgPSBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWw7XG5cbiAgICAgICAgICAgIHZhciBfbG9vcDcgPSBmdW5jdGlvbiBfbG9vcDcoX2kxMikge1xuICAgICAgICAgICAgICBkdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KFwiZHVtbXlcIiArIF9pMTIsIFtdKTtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudFtfaTEyXS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgICBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KG5vZGVJZCwgXCJkdW1teVwiICsgX2kxMik7XG4gICAgICAgICAgICAgICAgZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChcImR1bW15XCIgKyBfaTEyKS5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgICAgICAgIGZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZChcImR1bW15XCIgKyBfaTEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkdW1teVBvc2l0aW9uc0Zvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KFwiZHVtbXlcIiArIF9pMTIsIHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGhvcml6b250YWxBbGlnbm1lbnRbX2kxMl1bMF0pXSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaTEyID0gMDsgX2kxMiA8IGhvcml6b250YWxBbGlnbm1lbnQubGVuZ3RoOyBfaTEyKyspIHtcbiAgICAgICAgICAgICAgX2xvb3A3KF9pMTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnN0cnVjdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBkYWdzIChzdWJncmFwaHMpIGZyb20gb3ZlcmFsbCBkYWdcbiAgICAgICAgdmFyIGRhZ09uSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGRhZ09uVmVydGljYWwgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgdmFyIF9sb29wOCA9IGZ1bmN0aW9uIF9sb29wOChub2RlSWQpIHtcbiAgICAgICAgICBkYWcuZ2V0KG5vZGVJZCkuZm9yRWFjaChmdW5jdGlvbiAoYWRqYWNlbnQpIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2VJZCA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKGFkamFjZW50W1wiZGlyZWN0aW9uXCJdID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUlkID0gbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkKSA/IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KG5vZGVJZCkgOiBub2RlSWQ7XG4gICAgICAgICAgICAgIGlmIChub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChhZGphY2VudC5pZCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0geyBpZDogbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoYWRqYWNlbnQuaWQpLCBnYXA6IGFkamFjZW50LmdhcCwgZGlyZWN0aW9uOiBhZGphY2VudC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gYWRqYWNlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhZ09uSG9yaXpvbnRhbC5oYXMoc291cmNlSWQpKSB7XG4gICAgICAgICAgICAgICAgZGFnT25Ib3Jpem9udGFsLmdldChzb3VyY2VJZCkucHVzaCh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYWdPbkhvcml6b250YWwuc2V0KHNvdXJjZUlkLCBbdGFyZ2V0Tm9kZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghZGFnT25Ib3Jpem9udGFsLmhhcyh0YXJnZXROb2RlLmlkKSkge1xuICAgICAgICAgICAgICAgIGRhZ09uSG9yaXpvbnRhbC5zZXQodGFyZ2V0Tm9kZS5pZCwgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzb3VyY2VJZCA9IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkKSA/IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkKSA6IG5vZGVJZDtcbiAgICAgICAgICAgICAgaWYgKG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoYWRqYWNlbnQuaWQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IHsgaWQ6IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoYWRqYWNlbnQuaWQpLCBnYXA6IGFkamFjZW50LmdhcCwgZGlyZWN0aW9uOiBhZGphY2VudC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gYWRqYWNlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhZ09uVmVydGljYWwuaGFzKHNvdXJjZUlkKSkge1xuICAgICAgICAgICAgICAgIGRhZ09uVmVydGljYWwuZ2V0KHNvdXJjZUlkKS5wdXNoKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhZ09uVmVydGljYWwuc2V0KHNvdXJjZUlkLCBbdGFyZ2V0Tm9kZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghZGFnT25WZXJ0aWNhbC5oYXModGFyZ2V0Tm9kZS5pZCkpIHtcbiAgICAgICAgICAgICAgICBkYWdPblZlcnRpY2FsLnNldCh0YXJnZXROb2RlLmlkLCBbXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I1ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I1ID0gZGFnLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwNTsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IChfc3RlcDUgPSBfaXRlcmF0b3I1Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFyIG5vZGVJZCA9IF9zdGVwNS52YWx1ZTtcblxuICAgICAgICAgICAgX2xvb3A4KG5vZGVJZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluZCBzb3VyY2Ugbm9kZXMgb2YgZWFjaCBjb21wb25lbnQgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGFnc1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjUgPSB0cnVlO1xuICAgICAgICAgIF9pdGVyYXRvckVycm9yNSA9IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSAmJiBfaXRlcmF0b3I1LnJldHVybikge1xuICAgICAgICAgICAgICBfaXRlcmF0b3I1LnJldHVybigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3I1KSB7XG4gICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdW5kaXJlY3RlZE9uSG9yaXpvbnRhbCA9IGRhZ1RvVW5kaXJlY3RlZChkYWdPbkhvcml6b250YWwpO1xuICAgICAgICB2YXIgdW5kaXJlY3RlZE9uVmVydGljYWwgPSBkYWdUb1VuZGlyZWN0ZWQoZGFnT25WZXJ0aWNhbCk7XG4gICAgICAgIHZhciBjb21wb25lbnRzT25Ib3Jpem9udGFsID0gZmluZENvbXBvbmVudHModW5kaXJlY3RlZE9uSG9yaXpvbnRhbCk7XG4gICAgICAgIHZhciBjb21wb25lbnRzT25WZXJ0aWNhbCA9IGZpbmRDb21wb25lbnRzKHVuZGlyZWN0ZWRPblZlcnRpY2FsKTtcbiAgICAgICAgdmFyIHJldmVyc2VkRGFnT25Ib3Jpem9udGFsID0gZGFnVG9SZXZlcnNlZChkYWdPbkhvcml6b250YWwpO1xuICAgICAgICB2YXIgcmV2ZXJzZWREYWdPblZlcnRpY2FsID0gZGFnVG9SZXZlcnNlZChkYWdPblZlcnRpY2FsKTtcbiAgICAgICAgdmFyIGNvbXBvbmVudFNvdXJjZXNPbkhvcml6b250YWwgPSBbXTtcbiAgICAgICAgdmFyIGNvbXBvbmVudFNvdXJjZXNPblZlcnRpY2FsID0gW107XG5cbiAgICAgICAgY29tcG9uZW50c09uSG9yaXpvbnRhbC5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgY29tcG9uZW50U291cmNlc09uSG9yaXpvbnRhbFtpbmRleF0gPSBbXTtcbiAgICAgICAgICBjb21wb25lbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAocmV2ZXJzZWREYWdPbkhvcml6b250YWwuZ2V0KG5vZGVJZCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50U291cmNlc09uSG9yaXpvbnRhbFtpbmRleF0ucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21wb25lbnRzT25WZXJ0aWNhbC5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgY29tcG9uZW50U291cmNlc09uVmVydGljYWxbaW5kZXhdID0gW107XG4gICAgICAgICAgY29tcG9uZW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgaWYgKHJldmVyc2VkRGFnT25WZXJ0aWNhbC5nZXQobm9kZUlkKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICBjb21wb25lbnRTb3VyY2VzT25WZXJ0aWNhbFtpbmRleF0ucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgYXBwcm9wcmlhdGUgcG9zaXRpb25pbmcgZm9yIHN1YmdyYXBoc1xuICAgICAgICB2YXIgcG9zaXRpb25NYXBIb3Jpem9udGFsID0gZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChkYWdPbkhvcml6b250YWwsIFwiaG9yaXpvbnRhbFwiLCBmaXhlZE5vZGVzT25Ib3Jpem9udGFsLCBkdW1teVBvc2l0aW9uc0ZvclZlcnRpY2FsQWxpZ25tZW50LCBjb21wb25lbnRTb3VyY2VzT25Ib3Jpem9udGFsKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uTWFwVmVydGljYWwgPSBmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50KGRhZ09uVmVydGljYWwsIFwidmVydGljYWxcIiwgZml4ZWROb2Rlc09uVmVydGljYWwsIGR1bW15UG9zaXRpb25zRm9ySG9yaXpvbnRhbEFsaWdubWVudCwgY29tcG9uZW50U291cmNlc09uVmVydGljYWwpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnMgb2YgdGhlIG5vZGVzIGJhc2VkIG9uIHJlbGF0aXZlIHBsYWNlbWVudCBjb25zdHJhaW50c1xuXG4gICAgICAgIHZhciBfbG9vcDkgPSBmdW5jdGlvbiBfbG9vcDkoa2V5KSB7XG4gICAgICAgICAgaWYgKGR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIGR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldID0gcG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGtleSldID0gcG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I2ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjYgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I2ID0gcG9zaXRpb25NYXBIb3Jpem9udGFsLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwNjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiA9IChfc3RlcDYgPSBfaXRlcmF0b3I2Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IF9zdGVwNi52YWx1ZTtcblxuICAgICAgICAgICAgX2xvb3A5KGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjYgPSB0cnVlO1xuICAgICAgICAgIF9pdGVyYXRvckVycm9yNiA9IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiAmJiBfaXRlcmF0b3I2LnJldHVybikge1xuICAgICAgICAgICAgICBfaXRlcmF0b3I2LnJldHVybigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3I2KSB7XG4gICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2xvb3AxMCA9IGZ1bmN0aW9uIF9sb29wMTAoa2V5KSB7XG4gICAgICAgICAgaWYgKGR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoa2V5KSkge1xuICAgICAgICAgICAgZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChrZXkpLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgICB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXSA9IHBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQoa2V5KV0gPSBwb3NpdGlvbk1hcFZlcnRpY2FsLmdldChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I3ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjcgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I3ID0gcG9zaXRpb25NYXBWZXJ0aWNhbC5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDc7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSAoX3N0ZXA3ID0gX2l0ZXJhdG9yNy5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNyA9IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDcudmFsdWU7XG5cbiAgICAgICAgICAgIF9sb29wMTAoa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNyA9IHRydWU7XG4gICAgICAgICAgX2l0ZXJhdG9yRXJyb3I3ID0gZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ICYmIF9pdGVyYXRvcjcucmV0dXJuKSB7XG4gICAgICAgICAgICAgIF9pdGVyYXRvcjcucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjcpIHtcbiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9XG4gIH1cblxuICAvLyBhc3NpZ24gbmV3IGNvb3JkaW5hdGVzIHRvIG5vZGVzIGFmdGVyIGNvbnN0cmFpbnQgaGFuZGxpbmdcbiAgZm9yICh2YXIgX2kxMyA9IDA7IF9pMTMgPCBhbGxOb2Rlcy5sZW5ndGg7IF9pMTMrKykge1xuICAgIHZhciBfbm9kZSA9IGFsbE5vZGVzW19pMTNdO1xuICAgIGlmIChfbm9kZS5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICAgIF9ub2RlLnNldENlbnRlcih4Q29vcmRzW25vZGVJbmRleGVzLmdldChfbm9kZS5pZCldLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChfbm9kZS5pZCldKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uc3RyYWludEhhbmRsZXI7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NTE6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU1MV9fO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gc3RhcnR1cFxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xuLyoqKioqKi8gfSkoKVxuO1xufSk7IiwKICAgICIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJjb3NlLWJhc2VcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiY29zZS1iYXNlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImN5dG9zY2FwZUZjb3NlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwiY29zZS1iYXNlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjeXRvc2NhcGVGY29zZVwiXSA9IGZhY3Rvcnkocm9vdFtcImNvc2VCYXNlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzE0MF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKCgpID0+IHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHRcInVzZSBzdHJpY3RcIjtcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA2NTg6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5cblxuLy8gU2ltcGxlLCBpbnRlcm5hbCBPYmplY3QuYXNzaWduKCkgcG9seWZpbGwgZm9yIG9wdGlvbnMgb2JqZWN0cyBldGMuXG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiAhPSBudWxsID8gT2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCkgOiBmdW5jdGlvbiAodGd0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzcmNzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNyY3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgc3Jjcy5mb3JFYWNoKGZ1bmN0aW9uIChzcmMpIHtcbiAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiB0Z3Rba10gPSBzcmNba107XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0Z3Q7XG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTQ4OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIF9zbGljZWRUb0FycmF5ID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH0gfTsgfSgpO1xuXG4vKlxuICogQXV4aWxpYXJ5IGZ1bmN0aW9uc1xuICovXG5cbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLmxheW91dEJhc2UuTGlua2VkTGlzdDtcblxudmFyIGF1eGlsaWFyeSA9IHt9O1xuXG4vLyBnZXQgdGhlIHRvcCBtb3N0IG5vZGVzXG5hdXhpbGlhcnkuZ2V0VG9wTW9zdE5vZGVzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIHZhciBub2Rlc01hcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZXNNYXBbbm9kZXNbaV0uaWQoKV0gPSB0cnVlO1xuICB9XG4gIHZhciByb290cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgaWYgKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGVsZSA9IGk7XG4gICAgfVxuICAgIHZhciBwYXJlbnQgPSBlbGUucGFyZW50KClbMF07XG4gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICBpZiAobm9kZXNNYXBbcGFyZW50LmlkKCldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiByb290cztcbn07XG5cbi8vIGZpbmQgZGlzY29ubmVjdGVkIGNvbXBvbmVudHMgYW5kIGNyZWF0ZSBkdW1teSBub2RlcyB0aGF0IGNvbm5lY3QgdGhlbVxuYXV4aWxpYXJ5LmNvbm5lY3RDb21wb25lbnRzID0gZnVuY3Rpb24gKGN5LCBlbGVzLCB0b3BNb3N0Tm9kZXMsIGR1bW15Tm9kZXMpIHtcbiAgdmFyIHF1ZXVlID0gbmV3IExpbmtlZExpc3QoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciB2aXNpdGVkVG9wTW9zdE5vZGVzID0gW107XG4gIHZhciBjdXJyZW50TmVpZ2hib3IgPSB2b2lkIDA7XG4gIHZhciBtaW5EZWdyZWVOb2RlID0gdm9pZCAwO1xuICB2YXIgbWluRGVncmVlID0gdm9pZCAwO1xuXG4gIHZhciBpc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB2YXIgY291bnQgPSAxO1xuICB2YXIgbm9kZXNDb25uZWN0ZWRUb0R1bW15ID0gW107XG4gIHZhciBjb21wb25lbnRzID0gW107XG5cbiAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgdmFyIGNtcHQgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgY29tcG9uZW50cy5wdXNoKGNtcHQpO1xuXG4gICAgdmFyIGN1cnJlbnROb2RlID0gdG9wTW9zdE5vZGVzWzBdO1xuICAgIHZhciBjaGlsZHJlbk9mQ3VycmVudE5vZGUgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgY2hpbGRyZW5PZkN1cnJlbnROb2RlLm1lcmdlKGN1cnJlbnROb2RlKS5tZXJnZShjdXJyZW50Tm9kZS5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbihlbGVzKSk7XG4gICAgdmlzaXRlZFRvcE1vc3ROb2Rlcy5wdXNoKGN1cnJlbnROb2RlKTtcblxuICAgIGNoaWxkcmVuT2ZDdXJyZW50Tm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBxdWV1ZS5wdXNoKG5vZGUpO1xuICAgICAgdmlzaXRlZC5hZGQobm9kZSk7XG4gICAgICBjbXB0Lm1lcmdlKG5vZGUpO1xuICAgIH0pO1xuXG4gICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMigpIHtcbiAgICAgIGN1cnJlbnROb2RlID0gcXVldWUuc2hpZnQoKTtcblxuICAgICAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgICAgIHZhciBuZWlnaGJvck5vZGVzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgY3VycmVudE5vZGUubmVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChlbGVzLmludGVyc2VjdGlvbihjdXJyZW50Tm9kZS5lZGdlc1dpdGgobm9kZSkpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBuZWlnaGJvck5vZGVzLm1lcmdlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWlnaGJvck5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZWlnaGJvck5vZGUgPSBuZWlnaGJvck5vZGVzW2ldO1xuICAgICAgICBjdXJyZW50TmVpZ2hib3IgPSB0b3BNb3N0Tm9kZXMuaW50ZXJzZWN0aW9uKG5laWdoYm9yTm9kZS51bmlvbihuZWlnaGJvck5vZGUuYW5jZXN0b3JzKCkpKTtcbiAgICAgICAgaWYgKGN1cnJlbnROZWlnaGJvciAhPSBudWxsICYmICF2aXNpdGVkLmhhcyhjdXJyZW50TmVpZ2hib3JbMF0pKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuT2ZOZWlnaGJvciA9IGN1cnJlbnROZWlnaGJvci51bmlvbihjdXJyZW50TmVpZ2hib3IuZGVzY2VuZGFudHMoKSk7XG5cbiAgICAgICAgICBjaGlsZHJlbk9mTmVpZ2hib3IuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcXVldWUucHVzaChub2RlKTtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICAgICAgICAgICAgY21wdC5tZXJnZShub2RlKTtcbiAgICAgICAgICAgIGlmICh0b3BNb3N0Tm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgIHZpc2l0ZWRUb3BNb3N0Tm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoICE9IDApIHtcbiAgICAgIF9sb29wMigpO1xuICAgIH1cblxuICAgIGNtcHQuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgZWxlcy5pbnRlcnNlY3Rpb24obm9kZS5jb25uZWN0ZWRFZGdlcygpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vIGNvbm5lY3RlZEVkZ2VzKCkgdXN1YWxseSBjYWNoZWRcbiAgICAgICAgaWYgKGNtcHQuaGFzKGUuc291cmNlKCkpICYmIGNtcHQuaGFzKGUudGFyZ2V0KCkpKSB7XG4gICAgICAgICAgLy8gaGFzKCkgaXMgY2hlYXBcbiAgICAgICAgICBjbXB0Lm1lcmdlKGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh2aXNpdGVkVG9wTW9zdE5vZGVzLmxlbmd0aCA9PSB0b3BNb3N0Tm9kZXMubGVuZ3RoKSB7XG4gICAgICBpc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0Nvbm5lY3RlZCB8fCBpc0Nvbm5lY3RlZCAmJiBjb3VudCA+IDEpIHtcbiAgICAgIG1pbkRlZ3JlZU5vZGUgPSB2aXNpdGVkVG9wTW9zdE5vZGVzWzBdO1xuICAgICAgbWluRGVncmVlID0gbWluRGVncmVlTm9kZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtcbiAgICAgIHZpc2l0ZWRUb3BNb3N0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCA8IG1pbkRlZ3JlZSkge1xuICAgICAgICAgIG1pbkRlZ3JlZSA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg7XG4gICAgICAgICAgbWluRGVncmVlTm9kZSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbm9kZXNDb25uZWN0ZWRUb0R1bW15LnB1c2gobWluRGVncmVlTm9kZS5pZCgpKTtcbiAgICAgIC8vIFRPIERPOiBDaGVjayBlZmZpY2llbmN5IG9mIHRoaXMgcGFydFxuICAgICAgdmFyIHRlbXAgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICB0ZW1wLm1lcmdlKHZpc2l0ZWRUb3BNb3N0Tm9kZXNbMF0pO1xuICAgICAgdmlzaXRlZFRvcE1vc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHRlbXAubWVyZ2Uobm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHZpc2l0ZWRUb3BNb3N0Tm9kZXMgPSBbXTtcbiAgICAgIHRvcE1vc3ROb2RlcyA9IHRvcE1vc3ROb2Rlcy5kaWZmZXJlbmNlKHRlbXApO1xuICAgICAgY291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgZG8ge1xuICAgIF9sb29wKCk7XG4gIH0gd2hpbGUgKCFpc0Nvbm5lY3RlZCk7XG5cbiAgaWYgKGR1bW15Tm9kZXMpIHtcbiAgICBpZiAobm9kZXNDb25uZWN0ZWRUb0R1bW15Lmxlbmd0aCA+IDApIHtcbiAgICAgIGR1bW15Tm9kZXMuc2V0KCdkdW1teScgKyAoZHVtbXlOb2Rlcy5zaXplICsgMSksIG5vZGVzQ29ubmVjdGVkVG9EdW1teSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wb25lbnRzO1xufTtcblxuLy8gcmVsb2NhdGVzIGNvbXBvbmVudFJlc3VsdCB0byBvcmlnaW5hbENlbnRlciBpZiB0aGVyZSBpcyBubyBmaXhlZE5vZGVDb25zdHJhaW50XG5hdXhpbGlhcnkucmVsb2NhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxDZW50ZXIsIGNvbXBvbmVudFJlc3VsdCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMuZml4ZWROb2RlQ29uc3RyYWludCkge1xuICAgIHZhciBtaW5YQ29vcmQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgdmFyIG1heFhDb29yZCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgbWluWUNvb3JkID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIHZhciBtYXhZQ29vcmQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIpIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBjdXJyZW50IGJvdW5kaW5nIGJveFxuICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IGNvbXBvbmVudFJlc3VsdC5ub2RlSW5kZXhlc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgICAgICB2YXIgX3JlZiA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMik7XG5cbiAgICAgICAgICB2YXIga2V5ID0gX3JlZjJbMF07XG4gICAgICAgICAgdmFyIHZhbHVlID0gX3JlZjJbMV07XG5cbiAgICAgICAgICB2YXIgY3lOb2RlID0gb3B0aW9ucy5jeS5nZXRFbGVtZW50QnlJZChrZXkpO1xuICAgICAgICAgIGlmIChjeU5vZGUpIHtcbiAgICAgICAgICAgIHZhciBub2RlQkIgPSBjeU5vZGUuYm91bmRpbmdCb3goKTtcbiAgICAgICAgICAgIHZhciBsZWZ0WCA9IGNvbXBvbmVudFJlc3VsdC54Q29vcmRzW3ZhbHVlXSAtIG5vZGVCQi53IC8gMjtcbiAgICAgICAgICAgIHZhciByaWdodFggPSBjb21wb25lbnRSZXN1bHQueENvb3Jkc1t2YWx1ZV0gKyBub2RlQkIudyAvIDI7XG4gICAgICAgICAgICB2YXIgdG9wWSA9IGNvbXBvbmVudFJlc3VsdC55Q29vcmRzW3ZhbHVlXSAtIG5vZGVCQi5oIC8gMjtcbiAgICAgICAgICAgIHZhciBib3R0b21ZID0gY29tcG9uZW50UmVzdWx0LnlDb29yZHNbdmFsdWVdICsgbm9kZUJCLmggLyAyO1xuXG4gICAgICAgICAgICBpZiAobGVmdFggPCBtaW5YQ29vcmQpIG1pblhDb29yZCA9IGxlZnRYO1xuICAgICAgICAgICAgaWYgKHJpZ2h0WCA+IG1heFhDb29yZCkgbWF4WENvb3JkID0gcmlnaHRYO1xuICAgICAgICAgICAgaWYgKHRvcFkgPCBtaW5ZQ29vcmQpIG1pbllDb29yZCA9IHRvcFk7XG4gICAgICAgICAgICBpZiAoYm90dG9tWSA+IG1heFlDb29yZCkgbWF4WUNvb3JkID0gYm90dG9tWTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBhbmQgb3JpZ2luYWwgY2VudGVyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRpZmZPblggPSBvcmlnaW5hbENlbnRlci54IC0gKG1heFhDb29yZCArIG1pblhDb29yZCkgLyAyO1xuICAgICAgdmFyIGRpZmZPblkgPSBvcmlnaW5hbENlbnRlci55IC0gKG1heFlDb29yZCArIG1pbllDb29yZCkgLyAyO1xuICAgICAgLy8gbW92ZSBjb21wb25lbnQgdG8gb3JpZ2luYWwgY2VudGVyXG4gICAgICBjb21wb25lbnRSZXN1bHQueENvb3JkcyA9IGNvbXBvbmVudFJlc3VsdC54Q29vcmRzLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCArIGRpZmZPblg7XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudFJlc3VsdC55Q29vcmRzID0gY29tcG9uZW50UmVzdWx0LnlDb29yZHMubWFwKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgIHJldHVybiB5ICsgZGlmZk9uWTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjYWxjdWxhdGUgY3VycmVudCBib3VuZGluZyBib3hcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudFJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgbm9kZSA9IGNvbXBvbmVudFJlc3VsdFtpdGVtXTtcbiAgICAgICAgdmFyIGxlZnRYID0gbm9kZS5nZXRSZWN0KCkueDtcbiAgICAgICAgdmFyIHJpZ2h0WCA9IG5vZGUuZ2V0UmVjdCgpLnggKyBub2RlLmdldFJlY3QoKS53aWR0aDtcbiAgICAgICAgdmFyIHRvcFkgPSBub2RlLmdldFJlY3QoKS55O1xuICAgICAgICB2YXIgYm90dG9tWSA9IG5vZGUuZ2V0UmVjdCgpLnkgKyBub2RlLmdldFJlY3QoKS5oZWlnaHQ7XG5cbiAgICAgICAgaWYgKGxlZnRYIDwgbWluWENvb3JkKSBtaW5YQ29vcmQgPSBsZWZ0WDtcbiAgICAgICAgaWYgKHJpZ2h0WCA+IG1heFhDb29yZCkgbWF4WENvb3JkID0gcmlnaHRYO1xuICAgICAgICBpZiAodG9wWSA8IG1pbllDb29yZCkgbWluWUNvb3JkID0gdG9wWTtcbiAgICAgICAgaWYgKGJvdHRvbVkgPiBtYXhZQ29vcmQpIG1heFlDb29yZCA9IGJvdHRvbVk7XG4gICAgICB9KTtcbiAgICAgIC8vIGZpbmQgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgYW5kIG9yaWdpbmFsIGNlbnRlclxuICAgICAgdmFyIF9kaWZmT25YID0gb3JpZ2luYWxDZW50ZXIueCAtIChtYXhYQ29vcmQgKyBtaW5YQ29vcmQpIC8gMjtcbiAgICAgIHZhciBfZGlmZk9uWSA9IG9yaWdpbmFsQ2VudGVyLnkgLSAobWF4WUNvb3JkICsgbWluWUNvb3JkKSAvIDI7XG4gICAgICAvLyBtb3ZlIGNvbXBvbmVudCB0byBvcmlnaW5hbCBjZW50ZXJcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudFJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgbm9kZSA9IGNvbXBvbmVudFJlc3VsdFtpdGVtXTtcbiAgICAgICAgbm9kZS5zZXRDZW50ZXIobm9kZS5nZXRDZW50ZXJYKCkgKyBfZGlmZk9uWCwgbm9kZS5nZXRDZW50ZXJZKCkgKyBfZGlmZk9uWSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbmF1eGlsaWFyeS5jYWxjQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgeENvb3JkcywgeUNvb3Jkcywgbm9kZUluZGV4ZXMpIHtcbiAgLy8gY2FsY3VsYXRlIGJvdW5kc1xuICB2YXIgbGVmdCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICB2YXIgcmlnaHQgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcbiAgdmFyIHRvcCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICB2YXIgYm90dG9tID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gIHZhciBub2RlTGVmdCA9IHZvaWQgMDtcbiAgdmFyIG5vZGVSaWdodCA9IHZvaWQgMDtcbiAgdmFyIG5vZGVUb3AgPSB2b2lkIDA7XG4gIHZhciBub2RlQm90dG9tID0gdm9pZCAwO1xuXG4gIHZhciBub2RlcyA9IHBhcmVudE5vZGUuZGVzY2VuZGFudHMoKS5ub3QoXCI6cGFyZW50XCIpO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgbm9kZUxlZnQgPSB4Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlLmlkKCkpXSAtIG5vZGUud2lkdGgoKSAvIDI7XG4gICAgbm9kZVJpZ2h0ID0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZS5pZCgpKV0gKyBub2RlLndpZHRoKCkgLyAyO1xuICAgIG5vZGVUb3AgPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlLmlkKCkpXSAtIG5vZGUuaGVpZ2h0KCkgLyAyO1xuICAgIG5vZGVCb3R0b20gPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlLmlkKCkpXSArIG5vZGUuaGVpZ2h0KCkgLyAyO1xuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cblxuICAgIGlmIChyaWdodCA8IG5vZGVSaWdodCkge1xuICAgICAgcmlnaHQgPSBub2RlUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbSA8IG5vZGVCb3R0b20pIHtcbiAgICAgIGJvdHRvbSA9IG5vZGVCb3R0b207XG4gICAgfVxuICB9XG5cbiAgdmFyIGJvdW5kaW5nQm94ID0ge307XG4gIGJvdW5kaW5nQm94LnRvcExlZnRYID0gbGVmdDtcbiAgYm91bmRpbmdCb3gudG9wTGVmdFkgPSB0b3A7XG4gIGJvdW5kaW5nQm94LndpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICBib3VuZGluZ0JveC5oZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gIHJldHVybiBib3VuZGluZ0JveDtcbn07XG5cbi8vIFRoaXMgZnVuY3Rpb24gZmluZHMgYW5kIHJldHVybnMgcGFyZW50IG5vZGVzIHdob3NlIGFsbCBjaGlsZHJlbiBhcmUgaGlkZGVuXG5hdXhpbGlhcnkuY2FsY1BhcmVudHNXaXRob3V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoY3ksIGVsZXMpIHtcbiAgdmFyIHBhcmVudHNXaXRob3V0Q2hpbGRyZW4gPSBjeS5jb2xsZWN0aW9uKCk7XG4gIGVsZXMubm9kZXMoJzpwYXJlbnQnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICB2YXIgY2hlY2sgPSBmYWxzZTtcbiAgICBwYXJlbnQuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLmNzcygnZGlzcGxheScpICE9ICdub25lJykge1xuICAgICAgICBjaGVjayA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFjaGVjaykge1xuICAgICAgcGFyZW50c1dpdGhvdXRDaGlsZHJlbi5tZXJnZShwYXJlbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmVudHNXaXRob3V0Q2hpbGRyZW47XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF1eGlsaWFyeTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgxNjpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbi8qKlxuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvc3Rwcm9jZXNzaW5nIHBhcnQgdGhhdCBhcHBsaWVzIENvU0UgbGF5b3V0IG92ZXIgdGhlIHNwZWN0cmFsIGxheW91dFxuKi9cblxudmFyIGF1eCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ4KTtcbnZhciBDb1NFTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLkNvU0VMYXlvdXQ7XG52YXIgQ29TRU5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkuQ29TRU5vZGU7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLmxheW91dEJhc2UuUG9pbnREO1xudmFyIERpbWVuc2lvbkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkubGF5b3V0QmFzZS5EaW1lbnNpb25EO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cztcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIENvU0VDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkuQ29TRUNvbnN0YW50cztcblxuLy8gbWFpbiBmdW5jdGlvbiB0aGF0IGNvc2UgbGF5b3V0IGlzIHByb2Nlc3NlZFxudmFyIGNvc2VMYXlvdXQgPSBmdW5jdGlvbiBjb3NlTGF5b3V0KG9wdGlvbnMsIHNwZWN0cmFsUmVzdWx0KSB7XG5cbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKTtcbiAgdmFyIGVkZ2VzID0gZWxlcy5lZGdlcygpO1xuXG4gIHZhciBub2RlSW5kZXhlcyA9IHZvaWQgMDtcbiAgdmFyIHhDb29yZHMgPSB2b2lkIDA7XG4gIHZhciB5Q29vcmRzID0gdm9pZCAwO1xuICB2YXIgaWRUb0xOb2RlID0ge307XG5cbiAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgbm9kZUluZGV4ZXMgPSBzcGVjdHJhbFJlc3VsdFtcIm5vZGVJbmRleGVzXCJdO1xuICAgIHhDb29yZHMgPSBzcGVjdHJhbFJlc3VsdFtcInhDb29yZHNcIl07XG4gICAgeUNvb3JkcyA9IHNwZWN0cmFsUmVzdWx0W1wieUNvb3Jkc1wiXTtcbiAgfVxuXG4gIHZhciBpc0ZuID0gZnVuY3Rpb24gaXNGbihmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbic7XG4gIH07XG5cbiAgdmFyIG9wdEZuID0gZnVuY3Rpb24gb3B0Rm4ob3B0LCBlbGUpIHtcbiAgICBpZiAoaXNGbihvcHQpKSB7XG4gICAgICByZXR1cm4gb3B0KGVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHQ7XG4gICAgfVxuICB9O1xuXG4gIC8qKioqIFBvc3Rwcm9jZXNzaW5nIGZ1bmN0aW9ucyAqKioqL1xuXG4gIHZhciBwYXJlbnRzV2l0aG91dENoaWxkcmVuID0gYXV4LmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKGN5LCBlbGVzKTtcblxuICAvLyB0cmFuc2ZlciBjeXRvc2NhcGUgbm9kZXMgdG8gY29zZSBub2Rlc1xuICB2YXIgcHJvY2Vzc0NoaWxkcmVuTGlzdCA9IGZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbkxpc3QocGFyZW50LCBjaGlsZHJlbiwgbGF5b3V0LCBvcHRpb25zKSB7XG4gICAgdmFyIHNpemUgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhciB0aGVDaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGNoaWxkcmVuX29mX2NoaWxkcmVuID0gbnVsbDtcbiAgICAgIGlmICh0aGVDaGlsZC5pbnRlcnNlY3Rpb24ocGFyZW50c1dpdGhvdXRDaGlsZHJlbikubGVuZ3RoID09IDApIHtcbiAgICAgICAgY2hpbGRyZW5fb2ZfY2hpbGRyZW4gPSB0aGVDaGlsZC5jaGlsZHJlbigpO1xuICAgICAgfVxuICAgICAgdmFyIHRoZU5vZGUgPSB2b2lkIDA7XG5cbiAgICAgIHZhciBkaW1lbnNpb25zID0gdGhlQ2hpbGQubGF5b3V0RGltZW5zaW9ucyh7XG4gICAgICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogb3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHNcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhlQ2hpbGQub3V0ZXJXaWR0aCgpICE9IG51bGwgJiYgdGhlQ2hpbGQub3V0ZXJIZWlnaHQoKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnJhbmRvbWl6ZSkge1xuICAgICAgICAgIGlmICghdGhlQ2hpbGQuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQoeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQodGhlQ2hpbGQuaWQoKSldIC0gZGltZW5zaW9ucy53IC8gMiwgeUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQodGhlQ2hpbGQuaWQoKSldIC0gZGltZW5zaW9ucy5oIC8gMiksIG5ldyBEaW1lbnNpb25EKHBhcnNlRmxvYXQoZGltZW5zaW9ucy53KSwgcGFyc2VGbG9hdChkaW1lbnNpb25zLmgpKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50SW5mbyA9IGF1eC5jYWxjQm91bmRpbmdCb3godGhlQ2hpbGQsIHhDb29yZHMsIHlDb29yZHMsIG5vZGVJbmRleGVzKTtcbiAgICAgICAgICAgIGlmICh0aGVDaGlsZC5pbnRlcnNlY3Rpb24ocGFyZW50c1dpdGhvdXRDaGlsZHJlbikubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQocGFyZW50SW5mby50b3BMZWZ0WCwgcGFyZW50SW5mby50b3BMZWZ0WSksIG5ldyBEaW1lbnNpb25EKHBhcmVudEluZm8ud2lkdGgsIHBhcmVudEluZm8uaGVpZ2h0KSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gZm9yIHRoZSBwYXJlbnRzV2l0aG91dENoaWxkcmVuXG4gICAgICAgICAgICAgIHRoZU5vZGUgPSBwYXJlbnQuYWRkKG5ldyBDb1NFTm9kZShsYXlvdXQuZ3JhcGhNYW5hZ2VyLCBuZXcgUG9pbnREKHBhcmVudEluZm8udG9wTGVmdFgsIHBhcmVudEluZm8udG9wTGVmdFkpLCBuZXcgRGltZW5zaW9uRChwYXJzZUZsb2F0KGRpbWVuc2lvbnMudyksIHBhcnNlRmxvYXQoZGltZW5zaW9ucy5oKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQodGhlQ2hpbGQucG9zaXRpb24oJ3gnKSAtIGRpbWVuc2lvbnMudyAvIDIsIHRoZUNoaWxkLnBvc2l0aW9uKCd5JykgLSBkaW1lbnNpb25zLmggLyAyKSwgbmV3IERpbWVuc2lvbkQocGFyc2VGbG9hdChkaW1lbnNpb25zLncpLCBwYXJzZUZsb2F0KGRpbWVuc2lvbnMuaCkpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoZU5vZGUgPSBwYXJlbnQuYWRkKG5ldyBDb1NFTm9kZSh0aGlzLmdyYXBoTWFuYWdlcikpO1xuICAgICAgfVxuICAgICAgLy8gQXR0YWNoIGlkIHRvIHRoZSBsYXlvdXQgbm9kZSBhbmQgcmVwdWxzaW9uIHZhbHVlXG4gICAgICB0aGVOb2RlLmlkID0gdGhlQ2hpbGQuZGF0YShcImlkXCIpO1xuICAgICAgdGhlTm9kZS5ub2RlUmVwdWxzaW9uID0gb3B0Rm4ob3B0aW9ucy5ub2RlUmVwdWxzaW9uLCB0aGVDaGlsZCk7XG4gICAgICAvLyBBdHRhY2ggdGhlIHBhZGRpbmdzIG9mIGN5IG5vZGUgdG8gbGF5b3V0IG5vZGVcbiAgICAgIHRoZU5vZGUucGFkZGluZ0xlZnQgPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG4gICAgICB0aGVOb2RlLnBhZGRpbmdUb3AgPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG4gICAgICB0aGVOb2RlLnBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcbiAgICAgIHRoZU5vZGUucGFkZGluZ0JvdHRvbSA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcblxuICAgICAgLy9BdHRhY2ggdGhlIGxhYmVsIHByb3BlcnRpZXMgdG8gYm90aCBjb21wb3VuZCBhbmQgc2ltcGxlIG5vZGVzIGlmIGxhYmVscyB3aWxsIGJlIGluY2x1ZGVkIGluIG5vZGUgZGltZW5zaW9uc1xuICAgICAgLy9UaGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgdXNlZCB3aGlsZSB1cGRhdGluZyBib3VuZHMgb2YgY29tcG91bmRzIGR1cmluZyBpdGVyYXRpb25zIG9yIHRpbGluZ1xuICAgICAgLy9hbmQgd2lsbCBiZSB1c2VkIGZvciBzaW1wbGUgbm9kZXMgd2hpbGUgdHJhbnNmZXJyaW5nIGZpbmFsIHBvc2l0aW9ucyB0byBjeXRvc2NhcGVcbiAgICAgIGlmIChvcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscykge1xuICAgICAgICB0aGVOb2RlLmxhYmVsV2lkdGggPSB0aGVDaGlsZC5ib3VuZGluZ0JveCh7IGluY2x1ZGVMYWJlbHM6IHRydWUsIGluY2x1ZGVOb2RlczogZmFsc2UsIGluY2x1ZGVPdmVybGF5czogZmFsc2UgfSkudztcbiAgICAgICAgdGhlTm9kZS5sYWJlbEhlaWdodCA9IHRoZUNoaWxkLmJvdW5kaW5nQm94KHsgaW5jbHVkZUxhYmVsczogdHJ1ZSwgaW5jbHVkZU5vZGVzOiBmYWxzZSwgaW5jbHVkZU92ZXJsYXlzOiBmYWxzZSB9KS5oO1xuICAgICAgICB0aGVOb2RlLmxhYmVsUG9zVmVydGljYWwgPSB0aGVDaGlsZC5jc3MoXCJ0ZXh0LXZhbGlnblwiKTtcbiAgICAgICAgdGhlTm9kZS5sYWJlbFBvc0hvcml6b250YWwgPSB0aGVDaGlsZC5jc3MoXCJ0ZXh0LWhhbGlnblwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFwIHRoZSBsYXlvdXQgbm9kZVxuICAgICAgaWRUb0xOb2RlW3RoZUNoaWxkLmRhdGEoXCJpZFwiKV0gPSB0aGVOb2RlO1xuXG4gICAgICBpZiAoaXNOYU4odGhlTm9kZS5yZWN0LngpKSB7XG4gICAgICAgIHRoZU5vZGUucmVjdC54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFOKHRoZU5vZGUucmVjdC55KSkge1xuICAgICAgICB0aGVOb2RlLnJlY3QueSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZHJlbl9vZl9jaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuX29mX2NoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRoZU5ld0dyYXBoID0gdm9pZCAwO1xuICAgICAgICB0aGVOZXdHcmFwaCA9IGxheW91dC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQobGF5b3V0Lm5ld0dyYXBoKCksIHRoZU5vZGUpO1xuICAgICAgICBwcm9jZXNzQ2hpbGRyZW5MaXN0KHRoZU5ld0dyYXBoLCBjaGlsZHJlbl9vZl9jaGlsZHJlbiwgbGF5b3V0LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gdHJhbnNmZXIgY3l0b3NjYXBlIGVkZ2VzIHRvIGNvc2UgZWRnZXNcbiAgdmFyIHByb2Nlc3NFZGdlcyA9IGZ1bmN0aW9uIHByb2Nlc3NFZGdlcyhsYXlvdXQsIGdtLCBlZGdlcykge1xuICAgIHZhciBpZGVhbExlbmd0aFRvdGFsID0gMDtcbiAgICB2YXIgZWRnZUNvdW50ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgdmFyIHNvdXJjZU5vZGUgPSBpZFRvTE5vZGVbZWRnZS5kYXRhKFwic291cmNlXCIpXTtcbiAgICAgIHZhciB0YXJnZXROb2RlID0gaWRUb0xOb2RlW2VkZ2UuZGF0YShcInRhcmdldFwiKV07XG4gICAgICBpZiAoc291cmNlTm9kZSAmJiB0YXJnZXROb2RlICYmIHNvdXJjZU5vZGUgIT09IHRhcmdldE5vZGUgJiYgc291cmNlTm9kZS5nZXRFZGdlc0JldHdlZW4odGFyZ2V0Tm9kZSkubGVuZ3RoID09IDApIHtcbiAgICAgICAgdmFyIGUxID0gZ20uYWRkKGxheW91dC5uZXdFZGdlKCksIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgICAgICBlMS5pZCA9IGVkZ2UuaWQoKTtcbiAgICAgICAgZTEuaWRlYWxMZW5ndGggPSBvcHRGbihvcHRpb25zLmlkZWFsRWRnZUxlbmd0aCwgZWRnZSk7XG4gICAgICAgIGUxLmVkZ2VFbGFzdGljaXR5ID0gb3B0Rm4ob3B0aW9ucy5lZGdlRWxhc3RpY2l0eSwgZWRnZSk7XG4gICAgICAgIGlkZWFsTGVuZ3RoVG90YWwgKz0gZTEuaWRlYWxMZW5ndGg7XG4gICAgICAgIGVkZ2VDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaWRlYWwgZWRnZSBsZW5ndGggY29uc3RhbnQgd2l0aCB0aGUgYXZnLiBpZGVhbCBsZW5ndGggdmFsdWUgYWZ0ZXIgcHJvY2Vzc2luZyBlZGdlc1xuICAgIC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gZWRnZSwgdXNlIG90aGVyIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucy5pZGVhbEVkZ2VMZW5ndGggIT0gbnVsbCkge1xuICAgICAgaWYgKGVkZ2VDb3VudCA+IDApIENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBpZGVhbExlbmd0aFRvdGFsIC8gZWRnZUNvdW50O2Vsc2UgaWYgKCFpc0ZuKG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoKSkgLy8gaW4gY2FzZSB0aGVyZSBpcyBubyBlZGdlLCBidXQgb3B0aW9uIGdpdmVzIGEgdmFsdWUgdG8gdXNlXG4gICAgICAgIENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aDtlbHNlIC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gZWRnZSBhbmQgd2UgY2Fubm90IGdldCBhIHZhbHVlIGZyb20gb3B0aW9uIChiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbilcbiAgICAgICAgQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IDUwO1xuICAgICAgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlc2UgY29uc3RhbnQgdmFsdWVzIGJhc2VkIG9uIHRoZSBpZGVhbCBlZGdlIGxlbmd0aCBjb25zdGFudFxuICAgICAgQ29TRUNvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QgPSBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC8gMTAuMDtcbiAgICAgIENvU0VDb25zdGFudHMuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG4gICAgfVxuICB9O1xuXG4gIC8vIHRyYW5zZmVyIGN5dG9zY2FwZSBjb25zdHJhaW50cyB0byBjb3NlIGxheW91dFxuICB2YXIgcHJvY2Vzc0NvbnN0cmFpbnRzID0gZnVuY3Rpb24gcHJvY2Vzc0NvbnN0cmFpbnRzKGxheW91dCwgb3B0aW9ucykge1xuICAgIC8vIGdldCBub2RlcyB0byBiZSBmaXhlZFxuICAgIGlmIChvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQpIHtcbiAgICAgIGxheW91dC5jb25zdHJhaW50c1tcImZpeGVkTm9kZUNvbnN0cmFpbnRcIl0gPSBvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQ7XG4gICAgfVxuICAgIC8vIGdldCBub2RlcyB0byBiZSBhbGlnbmVkXG4gICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgbGF5b3V0LmNvbnN0cmFpbnRzW1wiYWxpZ25tZW50Q29uc3RyYWludFwiXSA9IG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludDtcbiAgICB9XG4gICAgLy8gZ2V0IG5vZGVzIHRvIGJlIHJlbGF0aXZlbHkgcGxhY2VkXG4gICAgaWYgKG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgICBsYXlvdXQuY29uc3RyYWludHNbXCJyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnRcIl0gPSBvcHRpb25zLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDtcbiAgICB9XG4gIH07XG5cbiAgLyoqKiogQXBwbHkgcG9zdHByb2Nlc3NpbmcgKioqKi9cbiAgaWYgKG9wdGlvbnMubmVzdGluZ0ZhY3RvciAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgPSBGRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gb3B0aW9ucy5uZXN0aW5nRmFjdG9yO1xuICBpZiAob3B0aW9ucy5ncmF2aXR5ICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5O1xuICBpZiAob3B0aW9ucy5udW1JdGVyICE9IG51bGwpIENvU0VDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSBGRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUyA9IG9wdGlvbnMubnVtSXRlcjtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eVJhbmdlICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZTtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5Q29tcG91bmQ7XG4gIGlmIChvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kO1xuICBpZiAob3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gb3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDtcblxuICBpZiAob3B0aW9ucy50aWxpbmdDb21wYXJlQnkgIT0gbnVsbCkgQ29TRUNvbnN0YW50cy5USUxJTkdfQ09NUEFSRV9CWSA9IG9wdGlvbnMudGlsaW5nQ29tcGFyZUJ5O1xuXG4gIGlmIChvcHRpb25zLnF1YWxpdHkgPT0gJ3Byb29mJykgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAyO2Vsc2UgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAwO1xuXG4gIENvU0VDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gRkRMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gTGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IG9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzO1xuICBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSAhb3B0aW9ucy5yYW5kb21pemU7XG4gIENvU0VDb25zdGFudHMuQU5JTUFURSA9IEZETGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPSBMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9IG9wdGlvbnMuYW5pbWF0ZTtcbiAgQ29TRUNvbnN0YW50cy5USUxFID0gb3B0aW9ucy50aWxlO1xuICBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMID0gdHlwZW9mIG9wdGlvbnMudGlsaW5nUGFkZGluZ1ZlcnRpY2FsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpIDogb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gIENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCA9IHR5cGVvZiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCkgOiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsO1xuXG4gIENvU0VDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IHRydWU7XG4gIENvU0VDb25zdGFudHMuUFVSRV9JTkNSRU1FTlRBTCA9ICFvcHRpb25zLnJhbmRvbWl6ZTtcbiAgTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMgPSBvcHRpb25zLnVuaWZvcm1Ob2RlRGltZW5zaW9ucztcblxuICAvLyBUaGlzIHBhcnQgaXMgZm9yIGRlYnVnL2RlbW8gcHVycG9zZVxuICBpZiAob3B0aW9ucy5zdGVwID09IFwidHJhbnNmb3JtZWRcIikge1xuICAgIENvU0VDb25zdGFudHMuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkcgPSB0cnVlO1xuICAgIENvU0VDb25zdGFudHMuRU5GT1JDRV9DT05TVFJBSU5UUyA9IGZhbHNlO1xuICAgIENvU0VDb25zdGFudHMuQVBQTFlfTEFZT1VUID0gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMuc3RlcCA9PSBcImVuZm9yY2VkXCIpIHtcbiAgICBDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5FTkZPUkNFX0NPTlNUUkFJTlRTID0gdHJ1ZTtcbiAgICBDb1NFQ29uc3RhbnRzLkFQUExZX0xBWU9VVCA9IGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zLnN0ZXAgPT0gXCJjb3NlXCIpIHtcbiAgICBDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5FTkZPUkNFX0NPTlNUUkFJTlRTID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5BUFBMWV9MQVlPVVQgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLnN0ZXAgPT0gXCJhbGxcIikge1xuICAgIGlmIChvcHRpb25zLnJhbmRvbWl6ZSkgQ29TRUNvbnN0YW50cy5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORyA9IHRydWU7ZWxzZSBDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5FTkZPUkNFX0NPTlNUUkFJTlRTID0gdHJ1ZTtcbiAgICBDb1NFQ29uc3RhbnRzLkFQUExZX0xBWU9VVCA9IHRydWU7XG4gIH1cblxuICBpZiAob3B0aW9ucy5maXhlZE5vZGVDb25zdHJhaW50IHx8IG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludCB8fCBvcHRpb25zLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCkge1xuICAgIENvU0VDb25zdGFudHMuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBDb1NFQ29uc3RhbnRzLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjb3NlTGF5b3V0ID0gbmV3IENvU0VMYXlvdXQoKTtcbiAgdmFyIGdtID0gY29zZUxheW91dC5uZXdHcmFwaE1hbmFnZXIoKTtcblxuICBwcm9jZXNzQ2hpbGRyZW5MaXN0KGdtLmFkZFJvb3QoKSwgYXV4LmdldFRvcE1vc3ROb2Rlcyhub2RlcyksIGNvc2VMYXlvdXQsIG9wdGlvbnMpO1xuICBwcm9jZXNzRWRnZXMoY29zZUxheW91dCwgZ20sIGVkZ2VzKTtcbiAgcHJvY2Vzc0NvbnN0cmFpbnRzKGNvc2VMYXlvdXQsIG9wdGlvbnMpO1xuXG4gIGNvc2VMYXlvdXQucnVuTGF5b3V0KCk7XG5cbiAgcmV0dXJuIGlkVG9MTm9kZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geyBjb3NlTGF5b3V0OiBjb3NlTGF5b3V0IH07XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTI6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4vKipcbiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmY29zZSBsYXlvdXQgYWxnb3JpdGhtXG4qL1xuXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NTgpO1xudmFyIGF1eCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ4KTtcblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NTcpLFxuICAgIHNwZWN0cmFsTGF5b3V0ID0gX3JlcXVpcmUuc3BlY3RyYWxMYXlvdXQ7XG5cbnZhciBfcmVxdWlyZTIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxNiksXG4gICAgY29zZUxheW91dCA9IF9yZXF1aXJlMi5jb3NlTGF5b3V0O1xuXG52YXIgZGVmYXVsdHMgPSBPYmplY3QuZnJlZXplKHtcblxuICAvLyAnZHJhZnQnLCAnZGVmYXVsdCcgb3IgJ3Byb29mJyBcbiAgLy8gLSAnZHJhZnQnIG9ubHkgYXBwbGllcyBzcGVjdHJhbCBsYXlvdXQgXG4gIC8vIC0gJ2RlZmF1bHQnIGltcHJvdmVzIHRoZSBxdWFsaXR5IHdpdGggc3Vic2VxdWVudCBDb1NFIGxheW91dCAoZmFzdCBjb29saW5nIHJhdGUpXG4gIC8vIC0gJ3Byb29mJyBpbXByb3ZlcyB0aGUgcXVhbGl0eSB3aXRoIHN1YnNlcXVlbnQgQ29TRSBsYXlvdXQgKHNsb3cgY29vbGluZyByYXRlKSBcbiAgcXVhbGl0eTogXCJkZWZhdWx0XCIsXG4gIC8vIFVzZSByYW5kb20gbm9kZSBwb3NpdGlvbnMgYXQgYmVnaW5uaW5nIG9mIGxheW91dFxuICAvLyBpZiB0aGlzIGlzIHNldCB0byBmYWxzZSwgdGhlbiBxdWFsaXR5IG9wdGlvbiBtdXN0IGJlIFwicHJvb2ZcIlxuICByYW5kb21pemU6IHRydWUsXG4gIC8vIFdoZXRoZXIgb3Igbm90IHRvIGFuaW1hdGUgdGhlIGxheW91dFxuICBhbmltYXRlOiB0cnVlLFxuICAvLyBEdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMsIGlmIGVuYWJsZWRcbiAgYW5pbWF0aW9uRHVyYXRpb246IDEwMDAsXG4gIC8vIEVhc2luZyBvZiBhbmltYXRpb24sIGlmIGVuYWJsZWRcbiAgYW5pbWF0aW9uRWFzaW5nOiB1bmRlZmluZWQsXG4gIC8vIEZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIHJlcG9zaXRpb25lZCBub2Rlc1xuICBmaXQ6IHRydWUsXG4gIC8vIFBhZGRpbmcgYXJvdW5kIGxheW91dFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gV2hldGhlciB0byBpbmNsdWRlIGxhYmVscyBpbiBub2RlIGRpbWVuc2lvbnMuIFZhbGlkIGluIFwicHJvb2ZcIiBxdWFsaXR5XG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gIC8vIFdoZXRoZXIgb3Igbm90IHNpbXBsZSBub2RlcyAobm9uLWNvbXBvdW5kIG5vZGVzKSBhcmUgb2YgdW5pZm9ybSBkaW1lbnNpb25zXG4gIHVuaWZvcm1Ob2RlRGltZW5zaW9uczogZmFsc2UsXG4gIC8vIFdoZXRoZXIgdG8gcGFjayBkaXNjb25uZWN0ZWQgY29tcG9uZW50cyAtIHZhbGlkIG9ubHkgaWYgcmFuZG9taXplOiB0cnVlXG4gIHBhY2tDb21wb25lbnRzOiB0cnVlLFxuICAvLyBMYXlvdXQgc3RlcCAtIGFsbCwgdHJhbnNmb3JtZWQsIGVuZm9yY2VkLCBjb3NlIC0gZm9yIGRlYnVnIHB1cnBvc2Ugb25seVxuICBzdGVwOiBcImFsbFwiLFxuXG4gIC8qIHNwZWN0cmFsIGxheW91dCBvcHRpb25zICovXG5cbiAgLy8gRmFsc2UgZm9yIHJhbmRvbSwgdHJ1ZSBmb3IgZ3JlZWR5XG4gIHNhbXBsaW5nVHlwZTogdHJ1ZSxcbiAgLy8gU2FtcGxlIHNpemUgdG8gY29uc3RydWN0IGRpc3RhbmNlIG1hdHJpeFxuICBzYW1wbGVTaXplOiAyNSxcbiAgLy8gU2VwYXJhdGlvbiBhbW91bnQgYmV0d2VlbiBub2Rlc1xuICBub2RlU2VwYXJhdGlvbjogNzUsXG4gIC8vIFBvd2VyIGl0ZXJhdGlvbiB0b2xlcmFuY2VcbiAgcGlUb2w6IDAuMDAwMDAwMSxcblxuICAvKiBDb1NFIGxheW91dCBvcHRpb25zICovXG5cbiAgLy8gTm9kZSByZXB1bHNpb24gKG5vbiBvdmVybGFwcGluZykgbXVsdGlwbGllclxuICBub2RlUmVwdWxzaW9uOiBmdW5jdGlvbiBub2RlUmVwdWxzaW9uKG5vZGUpIHtcbiAgICByZXR1cm4gNDUwMDtcbiAgfSxcbiAgLy8gSWRlYWwgZWRnZSAobm9uIG5lc3RlZCkgbGVuZ3RoXG4gIGlkZWFsRWRnZUxlbmd0aDogZnVuY3Rpb24gaWRlYWxFZGdlTGVuZ3RoKGVkZ2UpIHtcbiAgICByZXR1cm4gNTA7XG4gIH0sXG4gIC8vIERpdmlzb3IgdG8gY29tcHV0ZSBlZGdlIGZvcmNlc1xuICBlZGdlRWxhc3RpY2l0eTogZnVuY3Rpb24gZWRnZUVsYXN0aWNpdHkoZWRnZSkge1xuICAgIHJldHVybiAwLjQ1O1xuICB9LFxuICAvLyBOZXN0aW5nIGZhY3RvciAobXVsdGlwbGllcikgdG8gY29tcHV0ZSBpZGVhbCBlZGdlIGxlbmd0aCBmb3IgbmVzdGVkIGVkZ2VzXG4gIG5lc3RpbmdGYWN0b3I6IDAuMSxcbiAgLy8gR3Jhdml0eSBmb3JjZSAoY29uc3RhbnQpXG4gIGdyYXZpdHk6IDAuMjUsXG4gIC8vIE1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybVxuICBudW1JdGVyOiAyNTAwLFxuICAvLyBGb3IgZW5hYmxpbmcgdGlsaW5nXG4gIHRpbGU6IHRydWUsXG4gIC8vIFRoZSBmdW5jdGlvbiB0aGF0IHNwZWNpZmllcyB0aGUgY3JpdGVyaWEgZm9yIGNvbXBhcmluZyBub2RlcyB3aGlsZSBzb3J0aW5nIHRoZW0gZHVyaW5nIHRpbGluZyBvcGVyYXRpb24uXG4gIC8vIFRha2VzIHRoZSBub2RlIGlkIGFzIGEgcGFyYW1ldGVyIGFuZCB0aGUgZGVmYXVsdCB0aWxpbmcgb3BlcmF0aW9uIGlzIHBlcmZvbWVkIHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldC5cbiAgdGlsaW5nQ29tcGFyZUJ5OiB1bmRlZmluZWQsXG4gIC8vIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiB0aGUgdmVydGljYWwgc3BhY2UgdG8gcHV0IGJldHdlZW4gdGhlIHplcm8gZGVncmVlIG1lbWJlcnMgZHVyaW5nIHRoZSB0aWxpbmcgb3BlcmF0aW9uKGNhbiBhbHNvIGJlIGEgZnVuY3Rpb24pXG4gIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogMTAsXG4gIC8vIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiB0aGUgaG9yaXpvbnRhbCBzcGFjZSB0byBwdXQgYmV0d2VlbiB0aGUgemVybyBkZWdyZWUgbWVtYmVycyBkdXJpbmcgdGhlIHRpbGluZyBvcGVyYXRpb24oY2FuIGFsc28gYmUgYSBmdW5jdGlvbilcbiAgdGlsaW5nUGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAvLyBHcmF2aXR5IHJhbmdlIChjb25zdGFudCkgZm9yIGNvbXBvdW5kc1xuICBncmF2aXR5UmFuZ2VDb21wb3VuZDogMS41LFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudCkgZm9yIGNvbXBvdW5kc1xuICBncmF2aXR5Q29tcG91bmQ6IDEuMCxcbiAgLy8gR3Jhdml0eSByYW5nZSAoY29uc3RhbnQpXG4gIGdyYXZpdHlSYW5nZTogMy44LFxuICAvLyBJbml0aWFsIGNvb2xpbmcgZmFjdG9yIGZvciBpbmNyZW1lbnRhbCBsYXlvdXQgIFxuICBpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDogMC4zLFxuXG4gIC8qIGNvbnN0cmFpbnQgb3B0aW9ucyAqL1xuXG4gIC8vIEZpeCByZXF1aXJlZCBub2RlcyB0byBwcmVkZWZpbmVkIHBvc2l0aW9uc1xuICAvLyBbe25vZGVJZDogJ24xJywgcG9zaXRpb246IHt4OiAxMDAsIHk6IDIwMH0sIHsuLi59XVxuICBmaXhlZE5vZGVDb25zdHJhaW50OiB1bmRlZmluZWQsXG4gIC8vIEFsaWduIHJlcXVpcmVkIG5vZGVzIGluIHZlcnRpY2FsL2hvcml6b250YWwgZGlyZWN0aW9uXG4gIC8vIHt2ZXJ0aWNhbDogW1snbjEnLCAnbjInKV0sIFsnbjMnLCAnbjQnXV0sIGhvcml6b250YWw6IFsnbjInLCAnbjQnXX1cbiAgYWxpZ25tZW50Q29uc3RyYWludDogdW5kZWZpbmVkLFxuICAvLyBQbGFjZSB0d28gbm9kZXMgcmVsYXRpdmVseSBpbiB2ZXJ0aWNhbC9ob3Jpem9udGFsIGRpcmVjdGlvbiBcbiAgLy8gW3t0b3A6ICduMScsIGJvdHRvbTogJ24yJywgZ2FwOiAxMDB9LCB7bGVmdDogJ24zJywgcmlnaHQ6ICduNCcsIGdhcDogNzV9XVxuICByZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6IHVuZGVmaW5lZCxcblxuICAvKiBsYXlvdXQgZXZlbnQgY2FsbGJhY2tzICovXG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LCAvLyBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30gLy8gb24gbGF5b3V0c3RvcFxufSk7XG5cbnZhciBMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExheW91dChvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExheW91dCk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMYXlvdXQsIFt7XG4gICAga2V5OiAncnVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcnVuKCkge1xuICAgICAgdmFyIGxheW91dCA9IHRoaXM7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBjeSA9IG9wdGlvbnMuY3k7XG4gICAgICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcblxuICAgICAgdmFyIHNwZWN0cmFsUmVzdWx0ID0gW107XG4gICAgICB2YXIgeENvb3JkcyA9IHZvaWQgMDtcbiAgICAgIHZhciB5Q29vcmRzID0gdm9pZCAwO1xuICAgICAgdmFyIGNvc2VSZXN1bHQgPSBbXTtcbiAgICAgIHZhciBjb21wb25lbnRzID0gdm9pZCAwO1xuICAgICAgdmFyIGNvbXBvbmVudENlbnRlcnMgPSBbXTtcblxuICAgICAgLy8gYmFzaWMgdmFsaWRpdHkgY2hlY2sgZm9yIGNvbnN0cmFpbnQgaW5wdXRzIFxuICAgICAgaWYgKG9wdGlvbnMuZml4ZWROb2RlQ29uc3RyYWludCAmJiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5maXhlZE5vZGVDb25zdHJhaW50KSB8fCBvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoID09IDApKSB7XG4gICAgICAgIG9wdGlvbnMuZml4ZWROb2RlQ29uc3RyYWludCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsICYmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpIHx8IG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbC5sZW5ndGggPT0gMCkpIHtcbiAgICAgICAgICBvcHRpb25zLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsICYmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCkgfHwgb3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwubGVuZ3RoID09IDApKSB7XG4gICAgICAgICAgb3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50ICYmICghQXJyYXkuaXNBcnJheShvcHRpb25zLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCkgfHwgb3B0aW9ucy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQubGVuZ3RoID09IDApKSB7XG4gICAgICAgIG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBhbnkgY29uc3RyYWludCBleGlzdHMsIHNldCBzb21lIG9wdGlvbnNcbiAgICAgIHZhciBjb25zdHJhaW50RXhpc3QgPSBvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQgfHwgb3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50IHx8IG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50O1xuICAgICAgaWYgKGNvbnN0cmFpbnRFeGlzdCkge1xuICAgICAgICAvLyBjb25zdHJhaW50cyB3b3JrIHdpdGggdGhlc2Ugb3B0aW9uc1xuICAgICAgICBvcHRpb25zLnRpbGUgPSBmYWxzZTtcbiAgICAgICAgb3B0aW9ucy5wYWNrQ29tcG9uZW50cyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWNpZGUgY29tcG9uZW50IHBhY2tpbmcgaXMgZW5hYmxlZCBvciBub3RcbiAgICAgIHZhciBsYXlVdGlsID0gdm9pZCAwO1xuICAgICAgdmFyIHBhY2tpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBpZiAoY3kubGF5b3V0VXRpbGl0aWVzICYmIG9wdGlvbnMucGFja0NvbXBvbmVudHMpIHtcbiAgICAgICAgbGF5VXRpbCA9IGN5LmxheW91dFV0aWxpdGllcyhcImdldFwiKTtcbiAgICAgICAgaWYgKCFsYXlVdGlsKSBsYXlVdGlsID0gY3kubGF5b3V0VXRpbGl0aWVzKCk7XG4gICAgICAgIHBhY2tpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZXMubm9kZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGlmIHBhY2tpbmcgaXMgbm90IGVuYWJsZWQsIHBlcmZvcm0gbGF5b3V0IG9uIHRoZSB3aG9sZSBncmFwaFxuICAgICAgICBpZiAoIXBhY2tpbmdFbmFibGVkKSB7XG4gICAgICAgICAgLy8gc3RvcmUgY29tcG9uZW50IGNlbnRlclxuICAgICAgICAgIHZhciBib3VuZGluZ0JveCA9IG9wdGlvbnMuZWxlcy5ib3VuZGluZ0JveCgpO1xuICAgICAgICAgIGNvbXBvbmVudENlbnRlcnMucHVzaCh7IHg6IGJvdW5kaW5nQm94LngxICsgYm91bmRpbmdCb3gudyAvIDIsIHk6IGJvdW5kaW5nQm94LnkxICsgYm91bmRpbmdCb3guaCAvIDIgfSk7XG4gICAgICAgICAgLy8gYXBwbHkgc3BlY3RyYWwgbGF5b3V0XG4gICAgICAgICAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gc3BlY3RyYWxMYXlvdXQob3B0aW9ucyk7XG4gICAgICAgICAgICBzcGVjdHJhbFJlc3VsdC5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGx5IGNvc2UgbGF5b3V0IGFzIHBvc3Rwcm9jZXNzaW5nXG4gICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRlZmF1bHRcIiB8fCBvcHRpb25zLnF1YWxpdHkgPT0gXCJwcm9vZlwiKSB7XG4gICAgICAgICAgICBjb3NlUmVzdWx0LnB1c2goY29zZUxheW91dChvcHRpb25zLCBzcGVjdHJhbFJlc3VsdFswXSkpO1xuICAgICAgICAgICAgYXV4LnJlbG9jYXRlQ29tcG9uZW50KGNvbXBvbmVudENlbnRlcnNbMF0sIGNvc2VSZXN1bHRbMF0sIG9wdGlvbnMpOyAvLyByZWxvY2F0ZSBjZW50ZXIgdG8gb3JpZ2luYWwgcG9zaXRpb25cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXV4LnJlbG9jYXRlQ29tcG9uZW50KGNvbXBvbmVudENlbnRlcnNbMF0sIHNwZWN0cmFsUmVzdWx0WzBdLCBvcHRpb25zKTsgLy8gcmVsb2NhdGUgY2VudGVyIHRvIG9yaWdpbmFsIHBvc2l0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHBhY2tpbmcgaXMgZW5hYmxlZFxuICAgICAgICAgIHZhciB0b3BNb3N0Tm9kZXMgPSBhdXguZ2V0VG9wTW9zdE5vZGVzKG9wdGlvbnMuZWxlcy5ub2RlcygpKTtcbiAgICAgICAgICBjb21wb25lbnRzID0gYXV4LmNvbm5lY3RDb21wb25lbnRzKGN5LCBvcHRpb25zLmVsZXMsIHRvcE1vc3ROb2Rlcyk7XG4gICAgICAgICAgLy8gc3RvcmUgY29tcG9uZW50IGNlbnRlcnNcbiAgICAgICAgICBjb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gY29tcG9uZW50LmJvdW5kaW5nQm94KCk7XG4gICAgICAgICAgICBjb21wb25lbnRDZW50ZXJzLnB1c2goeyB4OiBib3VuZGluZ0JveC54MSArIGJvdW5kaW5nQm94LncgLyAyLCB5OiBib3VuZGluZ0JveC55MSArIGJvdW5kaW5nQm94LmggLyAyIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy9zZW5kIGVhY2ggY29tcG9uZW50IHRvIHNwZWN0cmFsIGxheW91dCBpZiByYW5kb21pemVkXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICBvcHRpb25zLmVsZXMgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICAgIHNwZWN0cmFsUmVzdWx0LnB1c2goc3BlY3RyYWxMYXlvdXQob3B0aW9ucykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRlZmF1bHRcIiB8fCBvcHRpb25zLnF1YWxpdHkgPT0gXCJwcm9vZlwiKSB7XG4gICAgICAgICAgICB2YXIgdG9CZVRpbGVkTm9kZXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aWxlKSB7XG4gICAgICAgICAgICAgIC8vIGJlaGF2ZSBub2RlcyB0byBiZSB0aWxlZCBhcyBvbmUgY29tcG9uZW50XG4gICAgICAgICAgICAgIHZhciBub2RlSW5kZXhlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgdmFyIF94Q29vcmRzID0gW107XG4gICAgICAgICAgICAgIHZhciBfeUNvb3JkcyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgICAgICB2YXIgdGVtcFNwZWN0cmFsUmVzdWx0ID0geyBub2RlSW5kZXhlczogbm9kZUluZGV4ZXMsIHhDb29yZHM6IF94Q29vcmRzLCB5Q29vcmRzOiBfeUNvb3JkcyB9O1xuICAgICAgICAgICAgICB2YXIgaW5kZXhlc1RvQmVEZWxldGVkID0gW107XG4gICAgICAgICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZWRnZXMoKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICB0b0JlVGlsZWROb2Rlcy5tZXJnZShjb21wb25lbnQubm9kZXMoKVtpXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5pc1BhcmVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNwZWN0cmFsUmVzdWx0Lm5vZGVJbmRleGVzLnNldChjb21wb25lbnQubm9kZXMoKVtpXS5pZCgpLCBjb3VudCsrKTtcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wU3BlY3RyYWxSZXN1bHQueENvb3Jkcy5wdXNoKGNvbXBvbmVudC5ub2RlcygpWzBdLnBvc2l0aW9uKCkueCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNwZWN0cmFsUmVzdWx0LnlDb29yZHMucHVzaChjb21wb25lbnQubm9kZXMoKVswXS5wb3NpdGlvbigpLnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGluZGV4ZXNUb0JlRGVsZXRlZC5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAodG9CZVRpbGVkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHZhciBfYm91bmRpbmdCb3ggPSB0b0JlVGlsZWROb2Rlcy5ib3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudENlbnRlcnMucHVzaCh7IHg6IF9ib3VuZGluZ0JveC54MSArIF9ib3VuZGluZ0JveC53IC8gMiwgeTogX2JvdW5kaW5nQm94LnkxICsgX2JvdW5kaW5nQm94LmggLyAyIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaCh0b0JlVGlsZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgc3BlY3RyYWxSZXN1bHQucHVzaCh0ZW1wU3BlY3RyYWxSZXN1bHQpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleGVzVG9CZURlbGV0ZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuc3BsaWNlKGluZGV4ZXNUb0JlRGVsZXRlZFtpXSwgMSk7XG4gICAgICAgICAgICAgICAgICBzcGVjdHJhbFJlc3VsdC5zcGxpY2UoaW5kZXhlc1RvQmVEZWxldGVkW2ldLCAxKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudENlbnRlcnMuc3BsaWNlKGluZGV4ZXNUb0JlRGVsZXRlZFtpXSwgMSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgIC8vIHNlbmQgZWFjaCBjb21wb25lbnQgdG8gY29zZSBsYXlvdXRcbiAgICAgICAgICAgICAgb3B0aW9ucy5lbGVzID0gY29tcG9uZW50O1xuICAgICAgICAgICAgICBjb3NlUmVzdWx0LnB1c2goY29zZUxheW91dChvcHRpb25zLCBzcGVjdHJhbFJlc3VsdFtpbmRleF0pKTtcbiAgICAgICAgICAgICAgYXV4LnJlbG9jYXRlQ29tcG9uZW50KGNvbXBvbmVudENlbnRlcnNbaW5kZXhdLCBjb3NlUmVzdWx0W2luZGV4XSwgb3B0aW9ucyk7IC8vIHJlbG9jYXRlIGNlbnRlciB0byBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICBhdXgucmVsb2NhdGVDb21wb25lbnQoY29tcG9uZW50Q2VudGVyc1tpbmRleF0sIHNwZWN0cmFsUmVzdWx0W2luZGV4XSwgb3B0aW9ucyk7IC8vIHJlbG9jYXRlIGNlbnRlciB0byBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcGFja2luZ1xuICAgICAgICAgIHZhciBjb21wb25lbnRzRXZhbHVhdGVkID0gbmV3IFNldCgpO1xuICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBzdWJncmFwaHMgPSBbXTtcbiAgICAgICAgICAgIHZhciBoaWRkZW5FbGVzID0gZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZWxlLmNzcygnZGlzcGxheScpID09ICdub25lJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgIHZhciBub2RlSW5kZXhlcyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIpIHtcbiAgICAgICAgICAgICAgICBub2RlSW5kZXhlcyA9IHNwZWN0cmFsUmVzdWx0W2luZGV4XS5ub2RlSW5kZXhlcztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb21wb25lbnQubm9kZXMoKS5ub3QoaGlkZGVuRWxlcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzdWJncmFwaCA9IHt9O1xuICAgICAgICAgICAgICAgIHN1YmdyYXBoLmVkZ2VzID0gW107XG4gICAgICAgICAgICAgICAgc3ViZ3JhcGgubm9kZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5ub2RlcygpLm5vdChoaWRkZW5FbGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5xdWFsaXR5ID09IFwiZHJhZnRcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IG5vZGVJbmRleGVzLmdldChub2RlLmlkKCkpO1xuICAgICAgICAgICAgICAgICAgICAgIHN1YmdyYXBoLm5vZGVzLnB1c2goeyB4OiBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueENvb3Jkc1tub2RlSW5kZXhdIC0gbm9kZS5ib3VuZGluZ2JveCgpLncgLyAyLCB5OiBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkc1tub2RlSW5kZXhdIC0gbm9kZS5ib3VuZGluZ2JveCgpLmggLyAyLCB3aWR0aDogbm9kZS5ib3VuZGluZ2JveCgpLncsIGhlaWdodDogbm9kZS5ib3VuZGluZ2JveCgpLmggfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudEluZm8gPSBhdXguY2FsY0JvdW5kaW5nQm94KG5vZGUsIHNwZWN0cmFsUmVzdWx0W2luZGV4XS54Q29vcmRzLCBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkcywgbm9kZUluZGV4ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgIHN1YmdyYXBoLm5vZGVzLnB1c2goeyB4OiBwYXJlbnRJbmZvLnRvcExlZnRYLCB5OiBwYXJlbnRJbmZvLnRvcExlZnRZLCB3aWR0aDogcGFyZW50SW5mby53aWR0aCwgaGVpZ2h0OiBwYXJlbnRJbmZvLmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvc2VSZXN1bHRbaW5kZXhdW25vZGUuaWQoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJncmFwaC5ub2Rlcy5wdXNoKHsgeDogY29zZVJlc3VsdFtpbmRleF1bbm9kZS5pZCgpXS5nZXRMZWZ0KCksIHk6IGNvc2VSZXN1bHRbaW5kZXhdW25vZGUuaWQoKV0uZ2V0VG9wKCksIHdpZHRoOiBjb3NlUmVzdWx0W2luZGV4XVtub2RlLmlkKCldLmdldFdpZHRoKCksIGhlaWdodDogY29zZVJlc3VsdFtpbmRleF1bbm9kZS5pZCgpXS5nZXRIZWlnaHQoKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGVkZ2UudGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNzcyhcImRpc3BsYXlcIikgIT0gXCJub25lXCIgJiYgdGFyZ2V0LmNzcyhcImRpc3BsYXlcIikgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTm9kZUluZGV4ID0gbm9kZUluZGV4ZXMuZ2V0KHNvdXJjZS5pZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZUluZGV4ID0gbm9kZUluZGV4ZXMuZ2V0KHRhcmdldC5pZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlQ2VudGVyID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldENlbnRlciA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudEluZm8gPSBhdXguY2FsY0JvdW5kaW5nQm94KHNvdXJjZSwgc3BlY3RyYWxSZXN1bHRbaW5kZXhdLnhDb29yZHMsIHNwZWN0cmFsUmVzdWx0W2luZGV4XS55Q29vcmRzLCBub2RlSW5kZXhlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VDZW50ZXIucHVzaChwYXJlbnRJbmZvLnRvcExlZnRYICsgcGFyZW50SW5mby53aWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2VudGVyLnB1c2gocGFyZW50SW5mby50b3BMZWZ0WSArIHBhcmVudEluZm8uaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNlbnRlci5wdXNoKHNwZWN0cmFsUmVzdWx0W2luZGV4XS54Q29vcmRzW3NvdXJjZU5vZGVJbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2VudGVyLnB1c2goc3BlY3RyYWxSZXN1bHRbaW5kZXhdLnlDb29yZHNbc291cmNlTm9kZUluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJlbnRJbmZvID0gYXV4LmNhbGNCb3VuZGluZ0JveCh0YXJnZXQsIHNwZWN0cmFsUmVzdWx0W2luZGV4XS54Q29vcmRzLCBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkcywgbm9kZUluZGV4ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2VudGVyLnB1c2goX3BhcmVudEluZm8udG9wTGVmdFggKyBfcGFyZW50SW5mby53aWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2VudGVyLnB1c2goX3BhcmVudEluZm8udG9wTGVmdFkgKyBfcGFyZW50SW5mby5oZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2VudGVyLnB1c2goc3BlY3RyYWxSZXN1bHRbaW5kZXhdLnhDb29yZHNbdGFyZ2V0Tm9kZUluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDZW50ZXIucHVzaChzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkc1t0YXJnZXROb2RlSW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgc3ViZ3JhcGguZWRnZXMucHVzaCh7IHN0YXJ0WDogc291cmNlQ2VudGVyWzBdLCBzdGFydFk6IHNvdXJjZUNlbnRlclsxXSwgZW5kWDogdGFyZ2V0Q2VudGVyWzBdLCBlbmRZOiB0YXJnZXRDZW50ZXJbMV0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvc2VSZXN1bHRbaW5kZXhdW3NvdXJjZS5pZCgpXSAmJiBjb3NlUmVzdWx0W2luZGV4XVt0YXJnZXQuaWQoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmdyYXBoLmVkZ2VzLnB1c2goeyBzdGFydFg6IGNvc2VSZXN1bHRbaW5kZXhdW3NvdXJjZS5pZCgpXS5nZXRDZW50ZXJYKCksIHN0YXJ0WTogY29zZVJlc3VsdFtpbmRleF1bc291cmNlLmlkKCldLmdldENlbnRlclkoKSwgZW5kWDogY29zZVJlc3VsdFtpbmRleF1bdGFyZ2V0LmlkKCldLmdldENlbnRlclgoKSwgZW5kWTogY29zZVJlc3VsdFtpbmRleF1bdGFyZ2V0LmlkKCldLmdldENlbnRlclkoKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViZ3JhcGgubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgc3ViZ3JhcGhzLnB1c2goc3ViZ3JhcGgpO1xuICAgICAgICAgICAgICAgICAgY29tcG9uZW50c0V2YWx1YXRlZC5hZGQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2hpZnRSZXN1bHQgPSBsYXlVdGlsLnBhY2tDb21wb25lbnRzKHN1YmdyYXBocywgb3B0aW9ucy5yYW5kb21pemUpLnNoaWZ0cztcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnF1YWxpdHkgPT0gXCJkcmFmdFwiKSB7XG4gICAgICAgICAgICAgIHNwZWN0cmFsUmVzdWx0LmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3WENvb3JkcyA9IHJlc3VsdC54Q29vcmRzLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyBzaGlmdFJlc3VsdFtpbmRleF0uZHg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1lDb29yZHMgPSByZXN1bHQueUNvb3Jkcy5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB5ICsgc2hpZnRSZXN1bHRbaW5kZXhdLmR5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC54Q29vcmRzID0gbmV3WENvb3JkcztcbiAgICAgICAgICAgICAgICByZXN1bHQueUNvb3JkcyA9IG5ld1lDb29yZHM7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF9jb3VudCA9IDA7XG4gICAgICAgICAgICAgIGNvbXBvbmVudHNFdmFsdWF0ZWQuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb3NlUmVzdWx0W2luZGV4XSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgdmFyIG5vZGVSZWN0YW5nbGUgPSBjb3NlUmVzdWx0W2luZGV4XVtpdGVtXTtcbiAgICAgICAgICAgICAgICAgIG5vZGVSZWN0YW5nbGUuc2V0Q2VudGVyKG5vZGVSZWN0YW5nbGUuZ2V0Q2VudGVyWCgpICsgc2hpZnRSZXN1bHRbX2NvdW50XS5keCwgbm9kZVJlY3RhbmdsZS5nZXRDZW50ZXJZKCkgKyBzaGlmdFJlc3VsdFtfY291bnRdLmR5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBfY291bnQrKztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBlYWNoIGVsZW1lbnQncyBjYWxjdWxhdGVkIHBvc2l0aW9uXG4gICAgICB2YXIgZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gZ2V0UG9zaXRpb25zKGVsZSwgaSkge1xuICAgICAgICBpZiAob3B0aW9ucy5xdWFsaXR5ID09IFwiZGVmYXVsdFwiIHx8IG9wdGlvbnMucXVhbGl0eSA9PSBcInByb29mXCIpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZWxlID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHBvcyA9IHZvaWQgMDtcbiAgICAgICAgICB2YXIgbm9kZSA9IHZvaWQgMDtcbiAgICAgICAgICB2YXIgdGhlSWQgPSBlbGUuZGF0YSgnaWQnKTtcbiAgICAgICAgICBjb3NlUmVzdWx0LmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHRoZUlkIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICBwb3MgPSB7IHg6IHJlc3VsdFt0aGVJZF0uZ2V0UmVjdCgpLmdldENlbnRlclgoKSwgeTogcmVzdWx0W3RoZUlkXS5nZXRSZWN0KCkuZ2V0Q2VudGVyWSgpIH07XG4gICAgICAgICAgICAgIG5vZGUgPSByZXN1bHRbdGhlSWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChvcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscykge1xuICAgICAgICAgICAgaWYgKG5vZGUubGFiZWxXaWR0aCkge1xuICAgICAgICAgICAgICBpZiAobm9kZS5sYWJlbFBvc0hvcml6b250YWwgPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgICAgICBwb3MueCArPSBub2RlLmxhYmVsV2lkdGggLyAyO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgICAgIHBvcy54IC09IG5vZGUubGFiZWxXaWR0aCAvIDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmxhYmVsUG9zVmVydGljYWwgPT0gXCJ0b3BcIikge1xuICAgICAgICAgICAgICAgIHBvcy55ICs9IG5vZGUubGFiZWxIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcImJvdHRvbVwiKSB7XG4gICAgICAgICAgICAgICAgcG9zLnkgLT0gbm9kZS5sYWJlbEhlaWdodCAvIDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBvcyA9PSB1bmRlZmluZWQpIHBvcyA9IHsgeDogZWxlLnBvc2l0aW9uKFwieFwiKSwgeTogZWxlLnBvc2l0aW9uKFwieVwiKSB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwb3MueCxcbiAgICAgICAgICAgIHk6IHBvcy55XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX3BvcyA9IHZvaWQgMDtcbiAgICAgICAgICBzcGVjdHJhbFJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHJlc3VsdC5ub2RlSW5kZXhlcy5nZXQoZWxlLmlkKCkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBfcG9zID0geyB4OiByZXN1bHQueENvb3Jkc1tpbmRleF0sIHk6IHJlc3VsdC55Q29vcmRzW2luZGV4XSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChfcG9zID09IHVuZGVmaW5lZCkgX3BvcyA9IHsgeDogZWxlLnBvc2l0aW9uKFwieFwiKSwgeTogZWxlLnBvc2l0aW9uKFwieVwiKSB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBfcG9zLngsXG4gICAgICAgICAgICB5OiBfcG9zLnlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBxdWFsaXR5ID0gXCJkcmFmdFwiIGFuZCByYW5kb21pemUgPSBmYWxzZSBhcmUgY29udHJhZGljdGl2ZSBzbyBpbiB0aGF0IGNhc2UgcG9zaXRpb25zIGRvbid0IGNoYW5nZVxuICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRlZmF1bHRcIiB8fCBvcHRpb25zLnF1YWxpdHkgPT0gXCJwcm9vZlwiIHx8IG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgICAgIC8vIHRyYW5zZmVyIGNhbGN1bGF0ZWQgcG9zaXRpb25zIHRvIG5vZGVzIChwb3NpdGlvbnMgb2Ygb25seSBzaW1wbGUgbm9kZXMgYXJlIGV2YWx1YXRlZCwgY29tcG91bmRzIGFyZSBwb3NpdGlvbmVkIGF1dG9tYXRpY2FsbHkpXG4gICAgICAgIHZhciBwYXJlbnRzV2l0aG91dENoaWxkcmVuID0gYXV4LmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKGN5LCBlbGVzKTtcbiAgICAgICAgdmFyIF9oaWRkZW5FbGVzID0gZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy5lbGVzID0gZWxlcy5ub3QoX2hpZGRlbkVsZXMpO1xuXG4gICAgICAgIGVsZXMubm9kZXMoKS5ub3QoXCI6cGFyZW50XCIpLm5vdChfaGlkZGVuRWxlcykubGF5b3V0UG9zaXRpb25zKGxheW91dCwgb3B0aW9ucywgZ2V0UG9zaXRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW50c1dpdGhvdXRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGFyZW50c1dpdGhvdXRDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgIGVsZS5wb3NpdGlvbihnZXRQb3NpdGlvbnMoZWxlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSWYgcmFuZG9taXplIG9wdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gcXVhbGl0eSBvcHRpb24gbXVzdCBiZSAnZGVmYXVsdCcgb3IgJ3Byb29mJy5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExheW91dDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXlvdXQ7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NTc6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG4vKipcbiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzcGVjdHJhbCBsYXlvdXQgdGhhdCBpcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZmNvc2UgbGF5b3V0IGFsZ29yaXRobVxuKi9cblxudmFyIGF1eCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ4KTtcbnZhciBNYXRyaXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkubGF5b3V0QmFzZS5NYXRyaXg7XG52YXIgU1ZEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLmxheW91dEJhc2UuU1ZEO1xuXG4vLyBtYWluIGZ1bmN0aW9uIHRoYXQgc3BlY3RyYWwgbGF5b3V0IGlzIHByb2Nlc3NlZFxudmFyIHNwZWN0cmFsTGF5b3V0ID0gZnVuY3Rpb24gc3BlY3RyYWxMYXlvdXQob3B0aW9ucykge1xuXG4gIHZhciBjeSA9IG9wdGlvbnMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCk7XG4gIHZhciBwYXJlbnROb2RlcyA9IGVsZXMubm9kZXMoXCI6cGFyZW50XCIpO1xuXG4gIHZhciBkdW1teU5vZGVzID0gbmV3IE1hcCgpOyAvLyBtYXAgdG8ga2VlcCBkdW1teSBub2RlcyBhbmQgdGhlaXIgbmVpZ2hib3JzXG4gIHZhciBub2RlSW5kZXhlcyA9IG5ldyBNYXAoKTsgLy8gbWFwIHRvIGtlZXAgaW5kZXhlcyB0byBub2Rlc1xuICB2YXIgcGFyZW50Q2hpbGRNYXAgPSBuZXcgTWFwKCk7IC8vIG1hcHBpbmcgYnR3LiBjb21wb3VuZCBhbmQgaXRzIHJlcHJlc2VudGF0aXZlIG5vZGUgXG4gIHZhciBhbGxOb2Rlc05laWdoYm9yaG9vZCA9IFtdOyAvLyBhcnJheSB0byBrZWVwIG5laWdoYm9yaG9vZCBvZiBhbGwgbm9kZXNcbiAgdmFyIHhDb29yZHMgPSBbXTtcbiAgdmFyIHlDb29yZHMgPSBbXTtcblxuICB2YXIgc2FtcGxlc0NvbHVtbiA9IFtdOyAvLyBzYW1wbGVkIHZlcnRpY2VzXG4gIHZhciBtaW5EaXN0YW5jZXNDb2x1bW4gPSBbXTtcbiAgdmFyIEMgPSBbXTsgLy8gY29sdW1uIHNhbXBsaW5nIG1hdHJpeFxuICB2YXIgUEhJID0gW107IC8vIGludGVyc2VjdGlvbiBvZiBjb2x1bW4gYW5kIHJvdyBzYW1wbGluZyBtYXRyaWNlcyBcbiAgdmFyIElOViA9IFtdOyAvLyBpbnZlcnNlIG9mIFBISSBcblxuICB2YXIgZmlyc3RTYW1wbGUgPSB2b2lkIDA7IC8vIHRoZSBmaXJzdCBzYW1wbGVkIG5vZGVcbiAgdmFyIG5vZGVTaXplID0gdm9pZCAwO1xuXG4gIHZhciBpbmZpbml0eSA9IDEwMDAwMDAwMDtcbiAgdmFyIHNtYWxsID0gMC4wMDAwMDAwMDE7XG5cbiAgdmFyIHBpVG9sID0gb3B0aW9ucy5waVRvbDtcbiAgdmFyIHNhbXBsaW5nVHlwZSA9IG9wdGlvbnMuc2FtcGxpbmdUeXBlOyAvLyBmYWxzZSBmb3IgcmFuZG9tLCB0cnVlIGZvciBncmVlZHlcbiAgdmFyIG5vZGVTZXBhcmF0aW9uID0gb3B0aW9ucy5ub2RlU2VwYXJhdGlvbjtcbiAgdmFyIHNhbXBsZVNpemUgPSB2b2lkIDA7XG5cbiAgLyoqKiogU3BlY3RyYWwtcHJlcHJvY2Vzc2luZyBmdW5jdGlvbnMgKioqKi9cblxuICAvKioqKiBTcGVjdHJhbCBsYXlvdXQgZnVuY3Rpb25zICoqKiovXG5cbiAgLy8gZGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgdG8gYmUgc2FtcGxlZFxuICB2YXIgcmFuZG9tU2FtcGxlQ1IgPSBmdW5jdGlvbiByYW5kb21TYW1wbGVDUigpIHtcbiAgICB2YXIgc2FtcGxlID0gMDtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBmbGFnID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoY291bnQgPCBzYW1wbGVTaXplKSB7XG4gICAgICBzYW1wbGUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub2RlU2l6ZSk7XG5cbiAgICAgIGZsYWcgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBpZiAoc2FtcGxlc0NvbHVtbltpXSA9PSBzYW1wbGUpIHtcbiAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZsYWcpIHtcbiAgICAgICAgc2FtcGxlc0NvbHVtbltjb3VudF0gPSBzYW1wbGU7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gdGFrZXMgdGhlIGluZGV4IG9mIHRoZSBub2RlKHBpdm90KSB0byBpbml0aWF0ZSBCRlMgYXMgYSBwYXJhbWV0ZXJcbiAgdmFyIEJGUyA9IGZ1bmN0aW9uIEJGUyhwaXZvdCwgaW5kZXgsIHNhbXBsaW5nTWV0aG9kKSB7XG4gICAgdmFyIHBhdGggPSBbXTsgLy8gdGhlIGZyb250IG9mIHRoZSBwYXRoXG4gICAgdmFyIGZyb250ID0gMDsgLy8gdGhlIGJhY2sgb2YgdGhlIHBhdGhcbiAgICB2YXIgYmFjayA9IDA7XG4gICAgdmFyIGN1cnJlbnQgPSAwO1xuICAgIHZhciB0ZW1wID0gdm9pZCAwO1xuICAgIHZhciBkaXN0YW5jZSA9IFtdO1xuXG4gICAgdmFyIG1heF9kaXN0ID0gMDsgLy8gdGhlIGZ1cnRoZXN0IG5vZGUgdG8gYmUgcmV0dXJuZWRcbiAgICB2YXIgbWF4X2luZCA9IDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVTaXplOyBpKyspIHtcbiAgICAgIGRpc3RhbmNlW2ldID0gaW5maW5pdHk7XG4gICAgfVxuXG4gICAgcGF0aFtiYWNrXSA9IHBpdm90O1xuICAgIGRpc3RhbmNlW3Bpdm90XSA9IDA7XG5cbiAgICB3aGlsZSAoYmFjayA+PSBmcm9udCkge1xuICAgICAgY3VycmVudCA9IHBhdGhbZnJvbnQrK107XG4gICAgICB2YXIgbmVpZ2hib3JzID0gYWxsTm9kZXNOZWlnaGJvcmhvb2RbY3VycmVudF07XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmVpZ2hib3JzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0ZW1wID0gbm9kZUluZGV4ZXMuZ2V0KG5laWdoYm9yc1tfaV0pO1xuICAgICAgICBpZiAoZGlzdGFuY2VbdGVtcF0gPT0gaW5maW5pdHkpIHtcbiAgICAgICAgICBkaXN0YW5jZVt0ZW1wXSA9IGRpc3RhbmNlW2N1cnJlbnRdICsgMTtcbiAgICAgICAgICBwYXRoWysrYmFja10gPSB0ZW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBDW2N1cnJlbnRdW2luZGV4XSA9IGRpc3RhbmNlW2N1cnJlbnRdICogbm9kZVNlcGFyYXRpb247XG4gICAgfVxuXG4gICAgaWYgKHNhbXBsaW5nTWV0aG9kKSB7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlU2l6ZTsgX2kyKyspIHtcbiAgICAgICAgaWYgKENbX2kyXVtpbmRleF0gPCBtaW5EaXN0YW5jZXNDb2x1bW5bX2kyXSkgbWluRGlzdGFuY2VzQ29sdW1uW19pMl0gPSBDW19pMl1baW5kZXhdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBub2RlU2l6ZTsgX2kzKyspIHtcbiAgICAgICAgaWYgKG1pbkRpc3RhbmNlc0NvbHVtbltfaTNdID4gbWF4X2Rpc3QpIHtcbiAgICAgICAgICBtYXhfZGlzdCA9IG1pbkRpc3RhbmNlc0NvbHVtbltfaTNdO1xuICAgICAgICAgIG1heF9pbmQgPSBfaTM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1heF9pbmQ7XG4gIH07XG5cbiAgLy8gYXBwbHkgQkZTIHRvIGFsbCBub2RlcyBvciBzZWxlY3RlZCBzYW1wbGVzXG4gIHZhciBhbGxCRlMgPSBmdW5jdGlvbiBhbGxCRlMoc2FtcGxpbmdNZXRob2QpIHtcblxuICAgIHZhciBzYW1wbGUgPSB2b2lkIDA7XG5cbiAgICBpZiAoIXNhbXBsaW5nTWV0aG9kKSB7XG4gICAgICByYW5kb21TYW1wbGVDUigpO1xuXG4gICAgICAvLyBjYWxsIEJGU1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcbiAgICAgICAgQkZTKHNhbXBsZXNDb2x1bW5baV0sIGksIHNhbXBsaW5nTWV0aG9kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbXBsZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVTaXplKTtcbiAgICAgIGZpcnN0U2FtcGxlID0gc2FtcGxlO1xuXG4gICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBub2RlU2l6ZTsgX2k0KyspIHtcbiAgICAgICAgbWluRGlzdGFuY2VzQ29sdW1uW19pNF0gPSBpbmZpbml0eTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgc2FtcGxlU2l6ZTsgX2k1KyspIHtcbiAgICAgICAgc2FtcGxlc0NvbHVtbltfaTVdID0gc2FtcGxlO1xuICAgICAgICBzYW1wbGUgPSBCRlMoc2FtcGxlLCBfaTUsIHNhbXBsaW5nTWV0aG9kKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtIHRoZSBzcXVhcmVkIGRpc3RhbmNlcyBmb3IgQ1xuICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IG5vZGVTaXplOyBfaTYrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzYW1wbGVTaXplOyBqKyspIHtcbiAgICAgICAgQ1tfaTZdW2pdICo9IENbX2k2XVtqXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtIFBISVxuICAgIGZvciAodmFyIF9pNyA9IDA7IF9pNyA8IHNhbXBsZVNpemU7IF9pNysrKSB7XG4gICAgICBQSElbX2k3XSA9IFtdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IHNhbXBsZVNpemU7IF9pOCsrKSB7XG4gICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgc2FtcGxlU2l6ZTsgX2orKykge1xuICAgICAgICBQSElbX2k4XVtfal0gPSBDW3NhbXBsZXNDb2x1bW5bX2pdXVtfaThdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBwZXJmb3JtIHRoZSBTVkQgYWxnb3JpdGhtIGFuZCBhcHBseSBhIHJlZ3VsYXJpemF0aW9uIHN0ZXBcbiAgdmFyIHNhbXBsZSA9IGZ1bmN0aW9uIHNhbXBsZSgpIHtcblxuICAgIHZhciBTVkRSZXN1bHQgPSBTVkQuc3ZkKFBISSk7XG5cbiAgICB2YXIgYV9xID0gU1ZEUmVzdWx0LlM7XG4gICAgdmFyIGFfdSA9IFNWRFJlc3VsdC5VO1xuICAgIHZhciBhX3YgPSBTVkRSZXN1bHQuVjtcblxuICAgIHZhciBtYXhfcyA9IGFfcVswXSAqIGFfcVswXSAqIGFfcVswXTtcblxuICAgIHZhciBhX1NpZyA9IFtdO1xuXG4gICAgLy8gIHJlZ3VsYXJpemF0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcbiAgICAgIGFfU2lnW2ldID0gW107XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNhbXBsZVNpemU7IGorKykge1xuICAgICAgICBhX1NpZ1tpXVtqXSA9IDA7XG4gICAgICAgIGlmIChpID09IGopIHtcbiAgICAgICAgICBhX1NpZ1tpXVtqXSA9IGFfcVtpXSAvIChhX3FbaV0gKiBhX3FbaV0gKyBtYXhfcyAvIChhX3FbaV0gKiBhX3FbaV0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIElOViA9IE1hdHJpeC5tdWx0TWF0KE1hdHJpeC5tdWx0TWF0KGFfdiwgYV9TaWcpLCBNYXRyaXgudHJhbnNwb3NlKGFfdSkpO1xuICB9O1xuXG4gIC8vIGNhbGN1bGF0ZSBmaW5hbCBjb29yZGluYXRlcyBcbiAgdmFyIHBvd2VySXRlcmF0aW9uID0gZnVuY3Rpb24gcG93ZXJJdGVyYXRpb24oKSB7XG4gICAgLy8gdHdvIGxhcmdlc3QgZWlnZW52YWx1ZXNcbiAgICB2YXIgdGhldGExID0gdm9pZCAwO1xuICAgIHZhciB0aGV0YTIgPSB2b2lkIDA7XG5cbiAgICAvLyBpbml0aWFsIGd1ZXNzZXMgZm9yIGVpZ2VudmVjdG9yc1xuICAgIHZhciBZMSA9IFtdO1xuICAgIHZhciBZMiA9IFtdO1xuXG4gICAgdmFyIFYxID0gW107XG4gICAgdmFyIFYyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVTaXplOyBpKyspIHtcbiAgICAgIFkxW2ldID0gTWF0aC5yYW5kb20oKTtcbiAgICAgIFkyW2ldID0gTWF0aC5yYW5kb20oKTtcbiAgICB9XG5cbiAgICBZMSA9IE1hdHJpeC5ub3JtYWxpemUoWTEpO1xuICAgIFkyID0gTWF0cml4Lm5vcm1hbGl6ZShZMik7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIC8vIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGltcHJvdmVtZW50IHJhdGlvIGluIHBvd2VyIGl0ZXJhdGlvblxuICAgIHZhciBjdXJyZW50ID0gc21hbGw7XG4gICAgdmFyIHByZXZpb3VzID0gc21hbGw7XG5cbiAgICB2YXIgdGVtcCA9IHZvaWQgMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb3VudCsrO1xuXG4gICAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCBub2RlU2l6ZTsgX2k5KyspIHtcbiAgICAgICAgVjFbX2k5XSA9IFkxW19pOV07XG4gICAgICB9XG5cbiAgICAgIFkxID0gTWF0cml4Lm11bHRHYW1tYShNYXRyaXgubXVsdEwoTWF0cml4Lm11bHRHYW1tYShWMSksIEMsIElOVikpO1xuICAgICAgdGhldGExID0gTWF0cml4LmRvdFByb2R1Y3QoVjEsIFkxKTtcbiAgICAgIFkxID0gTWF0cml4Lm5vcm1hbGl6ZShZMSk7XG5cbiAgICAgIGN1cnJlbnQgPSBNYXRyaXguZG90UHJvZHVjdChWMSwgWTEpO1xuXG4gICAgICB0ZW1wID0gTWF0aC5hYnMoY3VycmVudCAvIHByZXZpb3VzKTtcblxuICAgICAgaWYgKHRlbXAgPD0gMSArIHBpVG9sICYmIHRlbXAgPj0gMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pMTAgPSAwOyBfaTEwIDwgbm9kZVNpemU7IF9pMTArKykge1xuICAgICAgVjFbX2kxMF0gPSBZMVtfaTEwXTtcbiAgICB9XG5cbiAgICBjb3VudCA9IDA7XG4gICAgcHJldmlvdXMgPSBzbWFsbDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY291bnQrKztcblxuICAgICAgZm9yICh2YXIgX2kxMSA9IDA7IF9pMTEgPCBub2RlU2l6ZTsgX2kxMSsrKSB7XG4gICAgICAgIFYyW19pMTFdID0gWTJbX2kxMV07XG4gICAgICB9XG5cbiAgICAgIFYyID0gTWF0cml4Lm1pbnVzT3AoVjIsIE1hdHJpeC5tdWx0Q29ucyhWMSwgTWF0cml4LmRvdFByb2R1Y3QoVjEsIFYyKSkpO1xuICAgICAgWTIgPSBNYXRyaXgubXVsdEdhbW1hKE1hdHJpeC5tdWx0TChNYXRyaXgubXVsdEdhbW1hKFYyKSwgQywgSU5WKSk7XG4gICAgICB0aGV0YTIgPSBNYXRyaXguZG90UHJvZHVjdChWMiwgWTIpO1xuICAgICAgWTIgPSBNYXRyaXgubm9ybWFsaXplKFkyKTtcblxuICAgICAgY3VycmVudCA9IE1hdHJpeC5kb3RQcm9kdWN0KFYyLCBZMik7XG5cbiAgICAgIHRlbXAgPSBNYXRoLmFicyhjdXJyZW50IC8gcHJldmlvdXMpO1xuXG4gICAgICBpZiAodGVtcCA8PSAxICsgcGlUb2wgJiYgdGVtcCA+PSAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kxMiA9IDA7IF9pMTIgPCBub2RlU2l6ZTsgX2kxMisrKSB7XG4gICAgICBWMltfaTEyXSA9IFkyW19pMTJdO1xuICAgIH1cblxuICAgIC8vIHRoZXRhMSBub3cgY29udGFpbnMgZG9taW5hbnQgZWlnZW52YWx1ZVxuICAgIC8vIHRoZXRhMiBub3cgY29udGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IGVpZ2VudmFsdWVcbiAgICAvLyBWMSBub3cgY29udGFpbnMgdGhldGExJ3MgZWlnZW52ZWN0b3JcbiAgICAvLyBWMiBub3cgY29udGFpbnMgdGhldGEyJ3MgZWlnZW52ZWN0b3JcblxuICAgIC8vcG9wdWxhdGUgdGhlIHR3byB2ZWN0b3JzXG4gICAgeENvb3JkcyA9IE1hdHJpeC5tdWx0Q29ucyhWMSwgTWF0aC5zcXJ0KE1hdGguYWJzKHRoZXRhMSkpKTtcbiAgICB5Q29vcmRzID0gTWF0cml4Lm11bHRDb25zKFYyLCBNYXRoLnNxcnQoTWF0aC5hYnModGhldGEyKSkpO1xuICB9O1xuXG4gIC8qKioqIFByZXBhcmF0aW9uIGZvciBzcGVjdHJhbCBsYXlvdXQgKFByZXByb2Nlc3NpbmcpICoqKiovXG5cbiAgLy8gY29ubmVjdCBkaXNjb25uZWN0ZWQgY29tcG9uZW50cyAoZmlyc3QgdG9wIGxldmVsLCB0aGVuIGluc2lkZSBvZiBlYWNoIGNvbXBvdW5kIG5vZGUpXG4gIGF1eC5jb25uZWN0Q29tcG9uZW50cyhjeSwgZWxlcywgYXV4LmdldFRvcE1vc3ROb2Rlcyhub2RlcyksIGR1bW15Tm9kZXMpO1xuXG4gIHBhcmVudE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIGF1eC5jb25uZWN0Q29tcG9uZW50cyhjeSwgZWxlcywgYXV4LmdldFRvcE1vc3ROb2RlcyhlbGUuZGVzY2VuZGFudHMoKS5pbnRlcnNlY3Rpb24oZWxlcykpLCBkdW1teU5vZGVzKTtcbiAgfSk7XG5cbiAgLy8gYXNzaWduIGluZGV4ZXMgdG8gbm9kZXMgKGZpcnN0IHJlYWwsIHRoZW4gZHVtbXkgbm9kZXMpXG4gIHZhciBpbmRleCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIW5vZGVzW2ldLmlzUGFyZW50KCkpIHtcbiAgICAgIG5vZGVJbmRleGVzLnNldChub2Rlc1tpXS5pZCgpLCBpbmRleCsrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG4gIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBkdW1teU5vZGVzLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTtcblxuICAgICAgbm9kZUluZGV4ZXMuc2V0KGtleSwgaW5kZXgrKyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFudGlhdGUgdGhlIG5laWdoYm9yaG9vZCBtYXRyaXhcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgIF9pdGVyYXRvckVycm9yID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikge1xuICAgICAgICBfaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikge1xuICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfaTEzID0gMDsgX2kxMyA8IG5vZGVJbmRleGVzLnNpemU7IF9pMTMrKykge1xuICAgIGFsbE5vZGVzTmVpZ2hib3Job29kW19pMTNdID0gW107XG4gIH1cblxuICAvLyBmb3JtIGEgcGFyZW50LWNoaWxkIG1hcCB0byBrZWVwIHJlcHJlc2VudGF0aXZlIG5vZGUgb2YgZWFjaCBjb21wb3VuZCBub2RlICBcbiAgcGFyZW50Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZWxlLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKGVsZXMpO1xuXG4gICAgLy8gICAgICBsZXQgcmFuZG9tID0gMDtcbiAgICB3aGlsZSAoY2hpbGRyZW4ubm9kZXMoXCI6Y2hpbGRsZXNzXCIpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvLyAgICAgICAgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hpbGRyZW4ubm9kZXMoKS5sZW5ndGgpOyAvLyBpZiBhbGwgY2hpbGRyZW4gYXJlIGNvbXBvdW5kIHRoZW4gcHJvY2VlZCByYW5kb21seVxuICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5ub2RlcygpWzBdLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKGVsZXMpO1xuICAgIH1cbiAgICAvLyAgc2VsZWN0IHRoZSByZXByZXNlbnRhdGl2ZSBub2RlIC0gd2UgY2FuIGFwcGx5IGRpZmZlcmVudCBtZXRob2RzIGhlcmVcbiAgICAvLyAgICAgIHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoaWxkcmVuLm5vZGVzKFwiOmNoaWxkbGVzc1wiKS5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIG1pbiA9IGNoaWxkcmVuLm5vZGVzKFwiOmNoaWxkbGVzc1wiKVswXS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtcbiAgICBjaGlsZHJlbi5ub2RlcyhcIjpjaGlsZGxlc3NcIikuZm9yRWFjaChmdW5jdGlvbiAoZWxlMiwgaSkge1xuICAgICAgaWYgKGVsZTIuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPCBtaW4pIHtcbiAgICAgICAgbWluID0gZWxlMi5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBhcmVudENoaWxkTWFwLnNldChlbGUuaWQoKSwgY2hpbGRyZW4ubm9kZXMoXCI6Y2hpbGRsZXNzXCIpW2luZGV4XS5pZCgpKTtcbiAgfSk7XG5cbiAgLy8gYWRkIG5laWdoYm9yaG9vZCByZWxhdGlvbnMgKGZpcnN0IHJlYWwsIHRoZW4gZHVtbXkgbm9kZXMpXG4gIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBlbGVJbmRleCA9IHZvaWQgMDtcblxuICAgIGlmIChlbGUuaXNQYXJlbnQoKSkgZWxlSW5kZXggPSBub2RlSW5kZXhlcy5nZXQocGFyZW50Q2hpbGRNYXAuZ2V0KGVsZS5pZCgpKSk7ZWxzZSBlbGVJbmRleCA9IG5vZGVJbmRleGVzLmdldChlbGUuaWQoKSk7XG5cbiAgICBlbGUubmVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAoZWxlcy5pbnRlcnNlY3Rpb24oZWxlLmVkZ2VzV2l0aChub2RlKSkubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAobm9kZS5pc1BhcmVudCgpKSBhbGxOb2Rlc05laWdoYm9yaG9vZFtlbGVJbmRleF0ucHVzaChwYXJlbnRDaGlsZE1hcC5nZXQobm9kZS5pZCgpKSk7ZWxzZSBhbGxOb2Rlc05laWdoYm9yaG9vZFtlbGVJbmRleF0ucHVzaChub2RlLmlkKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfa2V5KSB7XG4gICAgdmFyIGVsZUluZGV4ID0gbm9kZUluZGV4ZXMuZ2V0KF9rZXkpO1xuICAgIHZhciBkaXNjb25uZWN0ZWRJZCA9IHZvaWQgMDtcbiAgICBkdW1teU5vZGVzLmdldChfa2V5KS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgaWYgKGN5LmdldEVsZW1lbnRCeUlkKGlkKS5pc1BhcmVudCgpKSBkaXNjb25uZWN0ZWRJZCA9IHBhcmVudENoaWxkTWFwLmdldChpZCk7ZWxzZSBkaXNjb25uZWN0ZWRJZCA9IGlkO1xuXG4gICAgICBhbGxOb2Rlc05laWdoYm9yaG9vZFtlbGVJbmRleF0ucHVzaChkaXNjb25uZWN0ZWRJZCk7XG4gICAgICBhbGxOb2Rlc05laWdoYm9yaG9vZFtub2RlSW5kZXhlcy5nZXQoZGlzY29ubmVjdGVkSWQpXS5wdXNoKF9rZXkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG4gIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcbiAgdmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pdGVyYXRvcjIgPSBkdW1teU5vZGVzLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZSkge1xuICAgICAgdmFyIF9rZXkgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgIF9sb29wKF9rZXkpO1xuICAgIH1cblxuICAgIC8vIG5vZGVTaXplIG5vdyBvbmx5IGNvbnNpZGVycyB0aGUgc2l6ZSBvZiB0cmFuc2Zvcm1lZCBncmFwaFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuICAgIF9pdGVyYXRvckVycm9yMiA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikge1xuICAgICAgICBfaXRlcmF0b3IyLnJldHVybigpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyKSB7XG4gICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBub2RlU2l6ZSA9IG5vZGVJbmRleGVzLnNpemU7XG5cbiAgdmFyIHNwZWN0cmFsUmVzdWx0ID0gdm9pZCAwO1xuXG4gIC8vIElmIG51bWJlciBvZiBub2RlcyBpbiB0cmFuc2Zvcm1lZCBncmFwaCBpcyAxIG9yIDIsIGVpdGhlciBTVkQgb3IgcG93ZXJJdGVyYXRpb24gY2F1c2VzIHByb2JsZW1cbiAgLy8gU28gc2tpcCBzcGVjdHJhbCBhbmQgbGF5b3V0IHRoZSBncmFwaCB3aXRoIGNvc2VcbiAgaWYgKG5vZGVTaXplID4gMikge1xuICAgIC8vIGlmICMgb2Ygbm9kZXMgaW4gdHJhbnNmb3JtZWQgZ3JhcGggaXMgc21hbGxlciB0aGFuIHNhbXBsZSBzaXplLFxuICAgIC8vIHRoZW4gdXNlICMgb2Ygbm9kZXMgYXMgc2FtcGxlIHNpemVcbiAgICBzYW1wbGVTaXplID0gbm9kZVNpemUgPCBvcHRpb25zLnNhbXBsZVNpemUgPyBub2RlU2l6ZSA6IG9wdGlvbnMuc2FtcGxlU2l6ZTtcblxuICAgIC8vIGluc3RhbnRpYXRlcyB0aGUgcGFydGlhbCBtYXRyaWNlcyB0aGF0IHdpbGwgYmUgdXNlZCBpbiBzcGVjdHJhbCBsYXlvdXRcbiAgICBmb3IgKHZhciBfaTE0ID0gMDsgX2kxNCA8IG5vZGVTaXplOyBfaTE0KyspIHtcbiAgICAgIENbX2kxNF0gPSBbXTtcbiAgICB9XG4gICAgZm9yICh2YXIgX2kxNSA9IDA7IF9pMTUgPCBzYW1wbGVTaXplOyBfaTE1KyspIHtcbiAgICAgIElOVltfaTE1XSA9IFtdO1xuICAgIH1cblxuICAgIC8qKioqIEFwcGx5IHNwZWN0cmFsIGxheW91dCAqKioqL1xuXG4gICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIgfHwgb3B0aW9ucy5zdGVwID09IFwiYWxsXCIpIHtcbiAgICAgIGFsbEJGUyhzYW1wbGluZ1R5cGUpO1xuICAgICAgc2FtcGxlKCk7XG4gICAgICBwb3dlckl0ZXJhdGlvbigpO1xuXG4gICAgICBzcGVjdHJhbFJlc3VsdCA9IHsgbm9kZUluZGV4ZXM6IG5vZGVJbmRleGVzLCB4Q29vcmRzOiB4Q29vcmRzLCB5Q29vcmRzOiB5Q29vcmRzIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVJbmRleGVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgeENvb3Jkcy5wdXNoKGN5LmdldEVsZW1lbnRCeUlkKGtleSkucG9zaXRpb24oXCJ4XCIpKTtcbiAgICAgICAgeUNvb3Jkcy5wdXNoKGN5LmdldEVsZW1lbnRCeUlkKGtleSkucG9zaXRpb24oXCJ5XCIpKTtcbiAgICAgIH0pO1xuICAgICAgc3BlY3RyYWxSZXN1bHQgPSB7IG5vZGVJbmRleGVzOiBub2RlSW5kZXhlcywgeENvb3JkczogeENvb3JkcywgeUNvb3JkczogeUNvb3JkcyB9O1xuICAgIH1cbiAgICByZXR1cm4gc3BlY3RyYWxSZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gbm9kZUluZGV4ZXMua2V5cygpO1xuICAgIHZhciBmaXJzdE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChpdGVyYXRvci5uZXh0KCkudmFsdWUpO1xuICAgIHZhciBmaXJzdE5vZGVQb3MgPSBmaXJzdE5vZGUucG9zaXRpb24oKTtcbiAgICB2YXIgZmlyc3ROb2RlV2lkdGggPSBmaXJzdE5vZGUub3V0ZXJXaWR0aCgpO1xuICAgIHhDb29yZHMucHVzaChmaXJzdE5vZGVQb3MueCk7XG4gICAgeUNvb3Jkcy5wdXNoKGZpcnN0Tm9kZVBvcy55KTtcbiAgICBpZiAobm9kZVNpemUgPT0gMikge1xuICAgICAgdmFyIHNlY29uZE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChpdGVyYXRvci5uZXh0KCkudmFsdWUpO1xuICAgICAgdmFyIHNlY29uZE5vZGVXaWR0aCA9IHNlY29uZE5vZGUub3V0ZXJXaWR0aCgpO1xuICAgICAgeENvb3Jkcy5wdXNoKGZpcnN0Tm9kZVBvcy54ICsgZmlyc3ROb2RlV2lkdGggLyAyICsgc2Vjb25kTm9kZVdpZHRoIC8gMiArIG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoKTtcbiAgICAgIHlDb29yZHMucHVzaChmaXJzdE5vZGVQb3MueSk7XG4gICAgfVxuXG4gICAgc3BlY3RyYWxSZXN1bHQgPSB7IG5vZGVJbmRleGVzOiBub2RlSW5kZXhlcywgeENvb3JkczogeENvb3JkcywgeUNvb3JkczogeUNvb3JkcyB9O1xuICAgIHJldHVybiBzcGVjdHJhbFJlc3VsdDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7IHNwZWN0cmFsTGF5b3V0OiBzcGVjdHJhbExheW91dCB9O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTc5OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIGltcGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XG5cbi8vIHJlZ2lzdGVycyB0aGUgZXh0ZW5zaW9uIG9uIGEgY3l0b3NjYXBlIGxpYiByZWZcbnZhciByZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKGN5dG9zY2FwZSkge1xuICBpZiAoIWN5dG9zY2FwZSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBjYW4ndCByZWdpc3RlciBpZiBjeXRvc2NhcGUgdW5zcGVjaWZpZWRcblxuICBjeXRvc2NhcGUoJ2xheW91dCcsICdmY29zZScsIGltcGwpOyAvLyByZWdpc3RlciB3aXRoIGN5dG9zY2FwZS5qc1xufTtcblxuaWYgKHR5cGVvZiBjeXRvc2NhcGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIGV4cG9zZSB0byBnbG9iYWwgY3l0b3NjYXBlIChpLmUuIHdpbmRvdy5jeXRvc2NhcGUpXG4gIHJlZ2lzdGVyKGN5dG9zY2FwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDA6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzE0MF9fO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gc3RhcnR1cFxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3OSk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbi8qKioqKiovIH0pKClcbjtcbn0pOyIsCiAgICAiaW1wb3J0IHtcbiAgZ2V0SWNvblNWRyxcbiAgcmVnaXN0ZXJJY29uUGFja3MsXG4gIHVua25vd25JY29uXG59IGZyb20gXCIuL2NodW5rLUwyQ0pPWVdFLm1qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVGV4dFxufSBmcm9tIFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCB7XG4gIHBvcHVsYXRlQ29tbW9uRGJcbn0gZnJvbSBcIi4vY2h1bmstT1FDTTVMSFUubWpzXCI7XG5pbXBvcnQge1xuICBJbXBlcmF0aXZlU3RhdGVcbn0gZnJvbSBcIi4vY2h1bmstMlJZUTNRVEIubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVuay1GMlhGTjNCWS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBsb2csXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBzZXR1cEdyYXBoVmlld2JveFxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2FyY2hpdGVjdHVyZS9hcmNoaXRlY3R1cmVQYXJzZXIudHNcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBtZXJtYWlkLWpzL3BhcnNlclwiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVR5cGVzLnRzXG52YXIgQXJjaGl0ZWN0dXJlRGlyZWN0aW9uTmFtZSA9IHtcbiAgTDogXCJsZWZ0XCIsXG4gIFI6IFwicmlnaHRcIixcbiAgVDogXCJ0b3BcIixcbiAgQjogXCJib3R0b21cIlxufTtcbnZhciBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvdyA9IHtcbiAgTDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2NhbGUpID0+IGAke3NjYWxlfSwke3NjYWxlIC8gMn0gMCwke3NjYWxlfSAwLDBgLCBcIkxcIiksXG4gIFI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHNjYWxlKSA9PiBgMCwke3NjYWxlIC8gMn0gJHtzY2FsZX0sMCAke3NjYWxlfSwke3NjYWxlfWAsIFwiUlwiKSxcbiAgVDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2NhbGUpID0+IGAwLDAgJHtzY2FsZX0sMCAke3NjYWxlIC8gMn0sJHtzY2FsZX1gLCBcIlRcIiksXG4gIEI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHNjYWxlKSA9PiBgJHtzY2FsZSAvIDJ9LDAgJHtzY2FsZX0sJHtzY2FsZX0gMCwke3NjYWxlfWAsIFwiQlwiKVxufTtcbnZhciBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1NoaWZ0ID0ge1xuICBMOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcmlnLCBhcnJvd1NpemUpID0+IG9yaWcgLSBhcnJvd1NpemUgKyAyLCBcIkxcIiksXG4gIFI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9yaWcsIF9hcnJvd1NpemUpID0+IG9yaWcgLSAyLCBcIlJcIiksXG4gIFQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9yaWcsIGFycm93U2l6ZSkgPT4gb3JpZyAtIGFycm93U2l6ZSArIDIsIFwiVFwiKSxcbiAgQjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3JpZywgX2Fycm93U2l6ZSkgPT4gb3JpZyAtIDIsIFwiQlwiKVxufTtcbnZhciBnZXRPcHBvc2l0ZUFyY2hpdGVjdHVyZURpcmVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICBpZiAoaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHgpKSB7XG4gICAgcmV0dXJuIHggPT09IFwiTFwiID8gXCJSXCIgOiBcIkxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geCA9PT0gXCJUXCIgPyBcIkJcIiA6IFwiVFwiO1xuICB9XG59LCBcImdldE9wcG9zaXRlQXJjaGl0ZWN0dXJlRGlyZWN0aW9uXCIpO1xudmFyIGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih4KSB7XG4gIGNvbnN0IHRlbXAgPSB4O1xuICByZXR1cm4gdGVtcCA9PT0gXCJMXCIgfHwgdGVtcCA9PT0gXCJSXCIgfHwgdGVtcCA9PT0gXCJUXCIgfHwgdGVtcCA9PT0gXCJCXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uXCIpO1xudmFyIGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICBjb25zdCB0ZW1wID0geDtcbiAgcmV0dXJuIHRlbXAgPT09IFwiTFwiIHx8IHRlbXAgPT09IFwiUlwiO1xufSwgXCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhcIik7XG52YXIgaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25ZID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih4KSB7XG4gIGNvbnN0IHRlbXAgPSB4O1xuICByZXR1cm4gdGVtcCA9PT0gXCJUXCIgfHwgdGVtcCA9PT0gXCJCXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWVwiKTtcbnZhciBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhZID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhLCBiKSB7XG4gIGNvbnN0IGFYX2JZID0gaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKGEpICYmIGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWShiKTtcbiAgY29uc3QgYVlfYlggPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkoYSkgJiYgaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKGIpO1xuICByZXR1cm4gYVhfYlkgfHwgYVlfYlg7XG59LCBcImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlcIik7XG52YXIgaXNBcmNoaXRlY3R1cmVQYWlyWFkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHBhaXIpIHtcbiAgY29uc3QgbGhzID0gcGFpclswXTtcbiAgY29uc3QgcmhzID0gcGFpclsxXTtcbiAgY29uc3QgYVhfYlkgPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgobGhzKSAmJiBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkocmhzKTtcbiAgY29uc3QgYVlfYlggPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkobGhzKSAmJiBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgocmhzKTtcbiAgcmV0dXJuIGFYX2JZIHx8IGFZX2JYO1xufSwgXCJpc0FyY2hpdGVjdHVyZVBhaXJYWVwiKTtcbnZhciBpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCAhPT0gXCJMTFwiICYmIHggIT09IFwiUlJcIiAmJiB4ICE9PSBcIlRUXCIgJiYgeCAhPT0gXCJCQlwiO1xufSwgXCJpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpclwiKTtcbnZhciBnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzb3VyY2VEaXIsIHRhcmdldERpcikge1xuICBjb25zdCBwYWlyID0gYCR7c291cmNlRGlyfSR7dGFyZ2V0RGlyfWA7XG4gIHJldHVybiBpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpcihwYWlyKSA/IHBhaXIgOiB2b2lkIDA7XG59LCBcImdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXJcIik7XG52YXIgc2hpZnRQb3NpdGlvbkJ5QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oW3gsIHldLCBwYWlyKSB7XG4gIGNvbnN0IGxocyA9IHBhaXJbMF07XG4gIGNvbnN0IHJocyA9IHBhaXJbMV07XG4gIGlmIChpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgobGhzKSkge1xuICAgIGlmIChpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkocmhzKSkge1xuICAgICAgcmV0dXJuIFt4ICsgKGxocyA9PT0gXCJMXCIgPyAtMSA6IDEpLCB5ICsgKHJocyA9PT0gXCJUXCIgPyAxIDogLTEpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFt4ICsgKGxocyA9PT0gXCJMXCIgPyAtMSA6IDEpLCB5XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWChyaHMpKSB7XG4gICAgICByZXR1cm4gW3ggKyAocmhzID09PSBcIkxcIiA/IDEgOiAtMSksIHkgKyAobGhzID09PSBcIlRcIiA/IDEgOiAtMSldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3gsIHkgKyAobGhzID09PSBcIlRcIiA/IDEgOiAtMSldO1xuICAgIH1cbiAgfVxufSwgXCJzaGlmdFBvc2l0aW9uQnlBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyXCIpO1xudmFyIGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblhZRmFjdG9ycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFpcikge1xuICBpZiAocGFpciA9PT0gXCJMVFwiIHx8IHBhaXIgPT09IFwiVExcIikge1xuICAgIHJldHVybiBbMSwgMV07XG4gIH0gZWxzZSBpZiAocGFpciA9PT0gXCJCTFwiIHx8IHBhaXIgPT09IFwiTEJcIikge1xuICAgIHJldHVybiBbMSwgLTFdO1xuICB9IGVsc2UgaWYgKHBhaXIgPT09IFwiQlJcIiB8fCBwYWlyID09PSBcIlJCXCIpIHtcbiAgICByZXR1cm4gWy0xLCAtMV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFstMSwgMV07XG4gIH1cbn0sIFwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlGYWN0b3JzXCIpO1xudmFyIGlzQXJjaGl0ZWN0dXJlU2VydmljZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICBjb25zdCB0ZW1wID0geDtcbiAgcmV0dXJuIHRlbXAudHlwZSA9PT0gXCJzZXJ2aWNlXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlU2VydmljZVwiKTtcbnZhciBpc0FyY2hpdGVjdHVyZUp1bmN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih4KSB7XG4gIGNvbnN0IHRlbXAgPSB4O1xuICByZXR1cm4gdGVtcC50eXBlID09PSBcImp1bmN0aW9uXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlSnVuY3Rpb25cIik7XG52YXIgZWRnZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlZGdlKSA9PiB7XG4gIHJldHVybiBlZGdlLmRhdGEoKTtcbn0sIFwiZWRnZURhdGFcIik7XG52YXIgbm9kZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlKSA9PiB7XG4gIHJldHVybiBub2RlLmRhdGEoKTtcbn0sIFwibm9kZURhdGFcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9hcmNoaXRlY3R1cmUvYXJjaGl0ZWN0dXJlRGIudHNcbnZhciBERUZBVUxUX0FSQ0hJVEVDVFVSRV9DT05GSUcgPSBkZWZhdWx0Q29uZmlnX2RlZmF1bHQuYXJjaGl0ZWN0dXJlO1xudmFyIHN0YXRlID0gbmV3IEltcGVyYXRpdmVTdGF0ZSgoKSA9PiAoe1xuICBub2Rlczoge30sXG4gIGdyb3Vwczoge30sXG4gIGVkZ2VzOiBbXSxcbiAgcmVnaXN0ZXJlZElkczoge30sXG4gIGNvbmZpZzogREVGQVVMVF9BUkNISVRFQ1RVUkVfQ09ORklHLFxuICBkYXRhU3RydWN0dXJlczogdm9pZCAwLFxuICBlbGVtZW50czoge31cbn0pKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgc3RhdGUucmVzZXQoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgYWRkU2VydmljZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oe1xuICBpZCxcbiAgaWNvbixcbiAgaW46IHBhcmVudCxcbiAgdGl0bGUsXG4gIGljb25UZXh0XG59KSB7XG4gIGlmIChzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHNlcnZpY2UgaWQgWyR7aWR9XSBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyICR7c3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW2lkXX1gXG4gICAgKTtcbiAgfVxuICBpZiAocGFyZW50ICE9PSB2b2lkIDApIHtcbiAgICBpZiAoaWQgPT09IHBhcmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHtpZH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3BhcmVudF0gPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIHNlcnZpY2UgWyR7aWR9XSdzIHBhcmVudCBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIGNyZWF0ZWQgYmVmb3JlIHRoaXMgc2VydmljZWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcGFyZW50XSA9PT0gXCJub2RlXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7aWR9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdID0gXCJub2RlXCI7XG4gIHN0YXRlLnJlY29yZHMubm9kZXNbaWRdID0ge1xuICAgIGlkLFxuICAgIHR5cGU6IFwic2VydmljZVwiLFxuICAgIGljb24sXG4gICAgaWNvblRleHQsXG4gICAgdGl0bGUsXG4gICAgZWRnZXM6IFtdLFxuICAgIGluOiBwYXJlbnRcbiAgfTtcbn0sIFwiYWRkU2VydmljZVwiKTtcbnZhciBnZXRTZXJ2aWNlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoaXNBcmNoaXRlY3R1cmVTZXJ2aWNlKSwgXCJnZXRTZXJ2aWNlc1wiKTtcbnZhciBhZGRKdW5jdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeyBpZCwgaW46IHBhcmVudCB9KSB7XG4gIHN0YXRlLnJlY29yZHMucmVnaXN0ZXJlZElkc1tpZF0gPSBcIm5vZGVcIjtcbiAgc3RhdGUucmVjb3Jkcy5ub2Rlc1tpZF0gPSB7XG4gICAgaWQsXG4gICAgdHlwZTogXCJqdW5jdGlvblwiLFxuICAgIGVkZ2VzOiBbXSxcbiAgICBpbjogcGFyZW50XG4gIH07XG59LCBcImFkZEp1bmN0aW9uXCIpO1xudmFyIGdldEp1bmN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoaXNBcmNoaXRlY3R1cmVKdW5jdGlvbiksIFwiZ2V0SnVuY3Rpb25zXCIpO1xudmFyIGdldE5vZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBPYmplY3QudmFsdWVzKHN0YXRlLnJlY29yZHMubm9kZXMpLCBcImdldE5vZGVzXCIpO1xudmFyIGdldE5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4gc3RhdGUucmVjb3Jkcy5ub2Rlc1tpZF0sIFwiZ2V0Tm9kZVwiKTtcbnZhciBhZGRHcm91cCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeyBpZCwgaWNvbiwgaW46IHBhcmVudCwgdGl0bGUgfSkge1xuICBpZiAoc3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW2lkXSAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBncm91cCBpZCBbJHtpZH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHtzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdfWBcbiAgICApO1xuICB9XG4gIGlmIChwYXJlbnQgIT09IHZvaWQgMCkge1xuICAgIGlmIChpZCA9PT0gcGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHtpZH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3BhcmVudF0gPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGdyb3VwIFske2lkfV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIGdyb3VwYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLnJlY29yZHMucmVnaXN0ZXJlZElkc1twYXJlbnRdID09PSBcIm5vZGVcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7aWR9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdID0gXCJncm91cFwiO1xuICBzdGF0ZS5yZWNvcmRzLmdyb3Vwc1tpZF0gPSB7XG4gICAgaWQsXG4gICAgaWNvbixcbiAgICB0aXRsZSxcbiAgICBpbjogcGFyZW50XG4gIH07XG59LCBcImFkZEdyb3VwXCIpO1xudmFyIGdldEdyb3VwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZWNvcmRzLmdyb3Vwcyk7XG59LCBcImdldEdyb3Vwc1wiKTtcbnZhciBhZGRFZGdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih7XG4gIGxoc0lkLFxuICByaHNJZCxcbiAgbGhzRGlyLFxuICByaHNEaXIsXG4gIGxoc0ludG8sXG4gIHJoc0ludG8sXG4gIGxoc0dyb3VwLFxuICByaHNHcm91cCxcbiAgdGl0bGVcbn0pIHtcbiAgaWYgKCFpc0FyY2hpdGVjdHVyZURpcmVjdGlvbihsaHNEaXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciBsZWZ0IGhhbmQgc2lkZSBvZiBlZGdlICR7bGhzSWR9LS0ke3Joc0lkfS4gRXhwZWN0ZWQgKEwsUixULEIpIGdvdCAke2xoc0Rpcn1gXG4gICAgKTtcbiAgfVxuICBpZiAoIWlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uKHJoc0RpcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkaXJlY3Rpb24gZ2l2ZW4gZm9yIHJpZ2h0IGhhbmQgc2lkZSBvZiBlZGdlICR7bGhzSWR9LS0ke3Joc0lkfS4gRXhwZWN0ZWQgKEwsUixULEIpIGdvdCAke3Joc0Rpcn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdGUucmVjb3Jkcy5ub2Rlc1tsaHNJZF0gPT09IHZvaWQgMCAmJiBzdGF0ZS5yZWNvcmRzLmdyb3Vwc1tsaHNJZF0gPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgbGVmdC1oYW5kIGlkIFske2xoc0lkfV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0gPT09IHZvaWQgMCAmJiBzdGF0ZS5yZWNvcmRzLmdyb3Vwc1tsaHNJZF0gPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtyaHNJZH1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYFxuICAgICk7XG4gIH1cbiAgY29uc3QgbGhzR3JvdXBJZCA9IHN0YXRlLnJlY29yZHMubm9kZXNbbGhzSWRdLmluO1xuICBjb25zdCByaHNHcm91cElkID0gc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0uaW47XG4gIGlmIChsaHNHcm91cCAmJiBsaHNHcm91cElkICYmIHJoc0dyb3VwSWQgJiYgbGhzR3JvdXBJZCA9PSByaHNHcm91cElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBsZWZ0LWhhbmQgaWQgWyR7bGhzSWR9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gXG4gICAgKTtcbiAgfVxuICBpZiAocmhzR3JvdXAgJiYgbGhzR3JvdXBJZCAmJiByaHNHcm91cElkICYmIGxoc0dyb3VwSWQgPT0gcmhzR3JvdXBJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtyaHNJZH1dIGlzIG1vZGlmaWVkIHRvIHRyYXZlcnNlIHRoZSBncm91cCBib3VuZGFyeSwgYnV0IHRoZSBlZGdlIGRvZXMgbm90IHBhc3MgdGhyb3VnaCB0d28gZ3JvdXBzLmBcbiAgICApO1xuICB9XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgbGhzSWQsXG4gICAgbGhzRGlyLFxuICAgIGxoc0ludG8sXG4gICAgbGhzR3JvdXAsXG4gICAgcmhzSWQsXG4gICAgcmhzRGlyLFxuICAgIHJoc0ludG8sXG4gICAgcmhzR3JvdXAsXG4gICAgdGl0bGVcbiAgfTtcbiAgc3RhdGUucmVjb3Jkcy5lZGdlcy5wdXNoKGVkZ2UpO1xuICBpZiAoc3RhdGUucmVjb3Jkcy5ub2Rlc1tsaHNJZF0gJiYgc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0pIHtcbiAgICBzdGF0ZS5yZWNvcmRzLm5vZGVzW2xoc0lkXS5lZGdlcy5wdXNoKHN0YXRlLnJlY29yZHMuZWRnZXNbc3RhdGUucmVjb3Jkcy5lZGdlcy5sZW5ndGggLSAxXSk7XG4gICAgc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0uZWRnZXMucHVzaChzdGF0ZS5yZWNvcmRzLmVkZ2VzW3N0YXRlLnJlY29yZHMuZWRnZXMubGVuZ3RoIC0gMV0pO1xuICB9XG59LCBcImFkZEVkZ2VcIik7XG52YXIgZ2V0RWRnZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHN0YXRlLnJlY29yZHMuZWRnZXMsIFwiZ2V0RWRnZXNcIik7XG52YXIgZ2V0RGF0YVN0cnVjdHVyZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgaWYgKHN0YXRlLnJlY29yZHMuZGF0YVN0cnVjdHVyZXMgPT09IHZvaWQgMCkge1xuICAgIGNvbnN0IGFkakxpc3QgPSBPYmplY3QuZW50cmllcyhzdGF0ZS5yZWNvcmRzLm5vZGVzKS5yZWR1Y2UoKHByZXZPdXRlciwgW2lkLCBzZXJ2aWNlXSkgPT4ge1xuICAgICAgcHJldk91dGVyW2lkXSA9IHNlcnZpY2UuZWRnZXMucmVkdWNlKChwcmV2SW5uZXIsIGVkZ2UpID0+IHtcbiAgICAgICAgaWYgKGVkZ2UubGhzSWQgPT09IGlkKSB7XG4gICAgICAgICAgY29uc3QgcGFpciA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIoZWRnZS5saHNEaXIsIGVkZ2UucmhzRGlyKTtcbiAgICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgcHJldklubmVyW3BhaXJdID0gZWRnZS5yaHNJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGFpciA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIoZWRnZS5yaHNEaXIsIGVkZ2UubGhzRGlyKTtcbiAgICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgcHJldklubmVyW3BhaXJdID0gZWRnZS5saHNJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZJbm5lcjtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBwcmV2T3V0ZXI7XG4gICAgfSwge30pO1xuICAgIGNvbnN0IGZpcnN0SWQgPSBPYmplY3Qua2V5cyhhZGpMaXN0KVswXTtcbiAgICBjb25zdCB2aXNpdGVkID0geyBbZmlyc3RJZF06IDEgfTtcbiAgICBjb25zdCBub3RWaXNpdGVkID0gT2JqZWN0LmtleXMoYWRqTGlzdCkucmVkdWNlKFxuICAgICAgKHByZXYsIGlkKSA9PiBpZCA9PT0gZmlyc3RJZCA/IHByZXYgOiB7IC4uLnByZXYsIFtpZF06IDEgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBCRlMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdGFydGluZ0lkKSA9PiB7XG4gICAgICBjb25zdCBzcGF0aWFsTWFwID0geyBbc3RhcnRpbmdJZF06IFswLCAwXSB9O1xuICAgICAgY29uc3QgcXVldWUgPSBbc3RhcnRpbmdJZF07XG4gICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBpZCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIHZpc2l0ZWRbaWRdID0gMTtcbiAgICAgICAgICBkZWxldGUgbm90VmlzaXRlZFtpZF07XG4gICAgICAgICAgY29uc3QgYWRqID0gYWRqTGlzdFtpZF07XG4gICAgICAgICAgY29uc3QgW3Bvc1gsIHBvc1ldID0gc3BhdGlhbE1hcFtpZF07XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoYWRqKS5mb3JFYWNoKChbZGlyLCByaHNJZF0pID0+IHtcbiAgICAgICAgICAgIGlmICghdmlzaXRlZFtyaHNJZF0pIHtcbiAgICAgICAgICAgICAgc3BhdGlhbE1hcFtyaHNJZF0gPSBzaGlmdFBvc2l0aW9uQnlBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyKFxuICAgICAgICAgICAgICAgIFtwb3NYLCBwb3NZXSxcbiAgICAgICAgICAgICAgICBkaXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcXVldWUucHVzaChyaHNJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzcGF0aWFsTWFwO1xuICAgIH0sIFwiQkZTXCIpO1xuICAgIGNvbnN0IHNwYXRpYWxNYXBzID0gW0JGUyhmaXJzdElkKV07XG4gICAgd2hpbGUgKE9iamVjdC5rZXlzKG5vdFZpc2l0ZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwYXRpYWxNYXBzLnB1c2goQkZTKE9iamVjdC5rZXlzKG5vdFZpc2l0ZWQpWzBdKSk7XG4gICAgfVxuICAgIHN0YXRlLnJlY29yZHMuZGF0YVN0cnVjdHVyZXMgPSB7XG4gICAgICBhZGpMaXN0LFxuICAgICAgc3BhdGlhbE1hcHNcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzO1xufSwgXCJnZXREYXRhU3RydWN0dXJlc1wiKTtcbnZhciBzZXRFbGVtZW50Rm9ySWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgZWxlbWVudCkgPT4ge1xuICBzdGF0ZS5yZWNvcmRzLmVsZW1lbnRzW2lkXSA9IGVsZW1lbnQ7XG59LCBcInNldEVsZW1lbnRGb3JJZFwiKTtcbnZhciBnZXRFbGVtZW50QnlJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkKSA9PiBzdGF0ZS5yZWNvcmRzLmVsZW1lbnRzW2lkXSwgXCJnZXRFbGVtZW50QnlJZFwiKTtcbnZhciBkYiA9IHtcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTZXJ2aWNlLFxuICBnZXRTZXJ2aWNlcyxcbiAgYWRkSnVuY3Rpb24sXG4gIGdldEp1bmN0aW9ucyxcbiAgZ2V0Tm9kZXMsXG4gIGdldE5vZGUsXG4gIGFkZEdyb3VwLFxuICBnZXRHcm91cHMsXG4gIGFkZEVkZ2UsXG4gIGdldEVkZ2VzLFxuICBzZXRFbGVtZW50Rm9ySWQsXG4gIGdldEVsZW1lbnRCeUlkLFxuICBnZXREYXRhU3RydWN0dXJlc1xufTtcbmZ1bmN0aW9uIGdldENvbmZpZ0ZpZWxkKGZpZWxkKSB7XG4gIGNvbnN0IGFyY2ggPSBnZXRDb25maWcoKS5hcmNoaXRlY3R1cmU7XG4gIGlmIChhcmNoPy5bZmllbGRdKSB7XG4gICAgcmV0dXJuIGFyY2hbZmllbGRdO1xuICB9XG4gIHJldHVybiBERUZBVUxUX0FSQ0hJVEVDVFVSRV9DT05GSUdbZmllbGRdO1xufVxuX19uYW1lKGdldENvbmZpZ0ZpZWxkLCBcImdldENvbmZpZ0ZpZWxkXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVBhcnNlci50c1xudmFyIHBvcHVsYXRlRGIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhc3QsIGRiMikgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIyKTtcbiAgYXN0Lmdyb3Vwcy5tYXAoZGIyLmFkZEdyb3VwKTtcbiAgYXN0LnNlcnZpY2VzLm1hcCgoc2VydmljZSkgPT4gZGIyLmFkZFNlcnZpY2UoeyAuLi5zZXJ2aWNlLCB0eXBlOiBcInNlcnZpY2VcIiB9KSk7XG4gIGFzdC5qdW5jdGlvbnMubWFwKChzZXJ2aWNlKSA9PiBkYjIuYWRkSnVuY3Rpb24oeyAuLi5zZXJ2aWNlLCB0eXBlOiBcImp1bmN0aW9uXCIgfSkpO1xuICBhc3QuZWRnZXMubWFwKGRiMi5hZGRFZGdlKTtcbn0sIFwicG9wdWxhdGVEYlwiKTtcbnZhciBwYXJzZXIgPSB7XG4gIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHBhcnNlKFwiYXJjaGl0ZWN0dXJlXCIsIGlucHV0KTtcbiAgICBsb2cuZGVidWcoYXN0KTtcbiAgICBwb3B1bGF0ZURiKGFzdCwgZGIpO1xuICB9LCBcInBhcnNlXCIpXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVN0eWxlcy50c1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGBcbiAgLmVkZ2Uge1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLmFyY2hFZGdlV2lkdGh9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFyY2hFZGdlQ29sb3J9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuYXJyb3cge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hcmNoRWRnZUFycm93Q29sb3J9O1xuICB9XG5cbiAgLm5vZGUtYmtnIHtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFyY2hHcm91cEJvcmRlckNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6ICR7b3B0aW9ucy5hcmNoR3JvdXBCb3JkZXJXaWR0aH07XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODtcbiAgfVxuICAubm9kZS1pY29uLXRleHQge1xuICAgIGRpc3BsYXk6IGZsZXg7IFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgXG4gIC5ub2RlLWljb24tdGV4dCA+IGRpdiB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgbWFyZ2luOiAxcHg7XG4gICAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB9XG5gLCBcImdldFN0eWxlc1wiKTtcbnZhciBhcmNoaXRlY3R1cmVTdHlsZXNfZGVmYXVsdCA9IGdldFN0eWxlcztcblxuLy8gc3JjL2RpYWdyYW1zL2FyY2hpdGVjdHVyZS9hcmNoaXRlY3R1cmVSZW5kZXJlci50c1xuaW1wb3J0IGN5dG9zY2FwZSBmcm9tIFwiY3l0b3NjYXBlXCI7XG5pbXBvcnQgZmNvc2UgZnJvbSBcImN5dG9zY2FwZS1mY29zZVwiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9hcmNoaXRlY3R1cmUvYXJjaGl0ZWN0dXJlSWNvbnMudHNcbnZhciB3cmFwSWNvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGljb24pID0+IHtcbiAgcmV0dXJuIGA8Zz48cmVjdCB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBzdHlsZT1cImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4O1wiLz4ke2ljb259PC9nPmA7XG59LCBcIndyYXBJY29uXCIpO1xudmFyIGFyY2hpdGVjdHVyZUljb25zID0ge1xuICBwcmVmaXg6IFwibWVybWFpZC1hcmNoaXRlY3R1cmVcIixcbiAgaGVpZ2h0OiA4MCxcbiAgd2lkdGg6IDgwLFxuICBpY29uczoge1xuICAgIGRhdGFiYXNlOiB7XG4gICAgICBib2R5OiB3cmFwSWNvbihcbiAgICAgICAgJzxwYXRoIGlkPVwiYlwiIGRhdGEtbmFtZT1cIjRcIiBkPVwibTIwLDU3Ljg2YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNFwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48cGF0aCBpZD1cImNcIiBkYXRhLW5hbWU9XCIzXCIgZD1cIm0yMCw0NS45NWMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTRcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PHBhdGggaWQ9XCJkXCIgZGF0YS1uYW1lPVwiMlwiIGQ9XCJtMjAsMzQuMDVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxlbGxpcHNlIGlkPVwiZVwiIGRhdGEtbmFtZT1cIjFcIiBjeD1cIjQwXCIgY3k9XCIyMi4xNFwiIHJ4PVwiMjBcIiByeT1cIjcuMTRcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGxpbmUgeDE9XCIyMFwiIHkxPVwiNTcuODZcIiB4Mj1cIjIwXCIgeTI9XCIyMi4xNFwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48bGluZSB4MT1cIjYwXCIgeTE9XCI1Ny44NlwiIHgyPVwiNjBcIiB5Mj1cIjIyLjE0XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPidcbiAgICAgIClcbiAgICB9LFxuICAgIHNlcnZlcjoge1xuICAgICAgYm9keTogd3JhcEljb24oXG4gICAgICAgICc8cmVjdCB4PVwiMTcuNVwiIHk9XCIxNy41XCIgd2lkdGg9XCI0NVwiIGhlaWdodD1cIjQ1XCIgcng9XCIyXCIgcnk9XCIyXCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxsaW5lIHgxPVwiMTcuNVwiIHkxPVwiMzIuNVwiIHgyPVwiNjIuNVwiIHkyPVwiMzIuNVwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48bGluZSB4MT1cIjE3LjVcIiB5MT1cIjQ3LjVcIiB4Mj1cIjYyLjVcIiB5Mj1cIjQ3LjVcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGc+PHBhdGggZD1cIm01Ni4yNSwyNWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVpcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4O1wiLz48cGF0aCBkPVwibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WlwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjwvZz48Zz48cGF0aCBkPVwibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WlwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7XCIvPjxwYXRoIGQ9XCJtNTYuMjUsNDBjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaXCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PC9nPjxnPjxwYXRoIGQ9XCJtNTYuMjUsNTVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaXCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2Utd2lkdGg6IDBweDtcIi8+PHBhdGggZD1cIm01Ni4yNSw1NWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVpcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48L2c+PGc+PGNpcmNsZSBjeD1cIjMyLjVcIiBjeT1cIjI1XCIgcj1cIi43NVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjxjaXJjbGUgY3g9XCIyNy41XCIgY3k9XCIyNVwiIHI9XCIuNzVcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48Y2lyY2xlIGN4PVwiMjIuNVwiIGN5PVwiMjVcIiByPVwiLjc1XCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PC9nPjxnPjxjaXJjbGUgY3g9XCIzMi41XCIgY3k9XCI0MFwiIHI9XCIuNzVcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48Y2lyY2xlIGN4PVwiMjcuNVwiIGN5PVwiNDBcIiByPVwiLjc1XCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PGNpcmNsZSBjeD1cIjIyLjVcIiBjeT1cIjQwXCIgcj1cIi43NVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjwvZz48Zz48Y2lyY2xlIGN4PVwiMzIuNVwiIGN5PVwiNTVcIiByPVwiLjc1XCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PGNpcmNsZSBjeD1cIjI3LjVcIiBjeT1cIjU1XCIgcj1cIi43NVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjxjaXJjbGUgY3g9XCIyMi41XCIgY3k9XCI1NVwiIHI9XCIuNzVcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48L2c+J1xuICAgICAgKVxuICAgIH0sXG4gICAgZGlzazoge1xuICAgICAgYm9keTogd3JhcEljb24oXG4gICAgICAgICc8cmVjdCB4PVwiMjBcIiB5PVwiMTVcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNTBcIiByeD1cIjFcIiByeT1cIjFcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCIyNFwiIGN5PVwiMTkuMTdcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCI1NlwiIGN5PVwiMTkuMTdcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCIyNFwiIGN5PVwiNjAuODNcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCI1NlwiIGN5PVwiNjAuODNcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCI0MFwiIGN5PVwiMzMuNzVcIiByeD1cIjE0XCIgcnk9XCIxNC41OFwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48ZWxsaXBzZSBjeD1cIjQwXCIgY3k9XCIzMy43NVwiIHJ4PVwiNFwiIHJ5PVwiNC4xN1wiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48cGF0aCBkPVwibTM3LjUxLDQyLjUybC00LjgzLDEzLjIyYy0uMjYuNzEtMS4xLDEuMDItMS43Ni42NGwtNC4xOC0yLjQyYy0uNjYtLjM4LS44MS0xLjI2LS4zMy0xLjg0bDkuMDEtMTAuOGMuODgtMS4wNSwyLjU2LS4wOCwyLjA5LDEuMlpcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4O1wiLz4nXG4gICAgICApXG4gICAgfSxcbiAgICBpbnRlcm5ldDoge1xuICAgICAgYm9keTogd3JhcEljb24oXG4gICAgICAgICc8Y2lyY2xlIGN4PVwiNDBcIiBjeT1cIjQwXCIgcj1cIjIyLjVcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGxpbmUgeDE9XCI0MFwiIHkxPVwiMTcuNVwiIHgyPVwiNDBcIiB5Mj1cIjYyLjVcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGxpbmUgeDE9XCIxNy41XCIgeTE9XCI0MFwiIHgyPVwiNjIuNVwiIHkyPVwiNDBcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PHBhdGggZD1cIm0zOS45OSwxNy41MWMtMTUuMjgsMTEuMS0xNS4yOCwzMy44OCwwLDQ0Ljk4XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxwYXRoIGQ9XCJtNDAuMDEsMTcuNTFjMTUuMjgsMTEuMSwxNS4yOCwzMy44OCwwLDQ0Ljk4XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxsaW5lIHgxPVwiMTkuNzVcIiB5MT1cIjMwLjFcIiB4Mj1cIjYwLjI1XCIgeTI9XCIzMC4xXCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxsaW5lIHgxPVwiMTkuNzVcIiB5MT1cIjQ5LjlcIiB4Mj1cIjYwLjI1XCIgeTI9XCI0OS45XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPidcbiAgICAgIClcbiAgICB9LFxuICAgIGNsb3VkOiB7XG4gICAgICBib2R5OiB3cmFwSWNvbihcbiAgICAgICAgJzxwYXRoIGQ9XCJtNjUsNDcuNWMwLDIuNzYtMi4yNCw1LTUsNUgyMGMtMi43NiwwLTUtMi4yNC01LTUsMC0xLjg3LDEuMDMtMy41MSwyLjU2LTQuMzYtLjA0LS4yMS0uMDYtLjQyLS4wNi0uNjQsMC0yLjYsMi40OC00Ljc0LDUuNjUtNC45NywxLjY1LTQuNTEsNi4zNC03Ljc2LDExLjg1LTcuNzYuODYsMCwxLjY5LjA4LDIuNS4yMywyLjA5LTEuNTcsNC42OS0yLjUsNy41LTIuNSw2LjEsMCwxMS4xOSw0LjM4LDEyLjI4LDEwLjE3LDIuMTQuNTYsMy43MiwyLjUxLDMuNzIsNC44MywwLC4wMywwLC4wNy0uMDEuMSwyLjI5LjQ2LDQuMDEsMi40OCw0LjAxLDQuOVpcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+J1xuICAgICAgKVxuICAgIH0sXG4gICAgdW5rbm93bjogdW5rbm93bkljb24sXG4gICAgYmxhbms6IHtcbiAgICAgIGJvZHk6IHdyYXBJY29uKFwiXCIpXG4gICAgfVxuICB9XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL3N2Z0RyYXcudHNcbnZhciBkcmF3RWRnZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGVkZ2VzRWwsIGN5KSB7XG4gIGNvbnN0IHBhZGRpbmcgPSBnZXRDb25maWdGaWVsZChcInBhZGRpbmdcIik7XG4gIGNvbnN0IGljb25TaXplID0gZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKTtcbiAgY29uc3QgaGFsZkljb25TaXplID0gaWNvblNpemUgLyAyO1xuICBjb25zdCBhcnJvd1NpemUgPSBpY29uU2l6ZSAvIDY7XG4gIGNvbnN0IGhhbGZBcnJvd1NpemUgPSBhcnJvd1NpemUgLyAyO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBjeS5lZGdlcygpLm1hcChhc3luYyAoZWRnZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHNvdXJjZURpcixcbiAgICAgICAgc291cmNlQXJyb3csXG4gICAgICAgIHNvdXJjZUdyb3VwLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRhcmdldERpcixcbiAgICAgICAgdGFyZ2V0QXJyb3csXG4gICAgICAgIHRhcmdldEdyb3VwLFxuICAgICAgICBsYWJlbFxuICAgICAgfSA9IGVkZ2VEYXRhKGVkZ2UpO1xuICAgICAgbGV0IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSA9IGVkZ2VbMF0uc291cmNlRW5kcG9pbnQoKTtcbiAgICAgIGNvbnN0IHsgeDogbWlkWCwgeTogbWlkWSB9ID0gZWRnZVswXS5taWRwb2ludCgpO1xuICAgICAgbGV0IHsgeDogZW5kWCwgeTogZW5kWSB9ID0gZWRnZVswXS50YXJnZXRFbmRwb2ludCgpO1xuICAgICAgY29uc3QgZ3JvdXBFZGdlU2hpZnQgPSBwYWRkaW5nICsgNDtcbiAgICAgIGlmIChzb3VyY2VHcm91cCkge1xuICAgICAgICBpZiAoaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHNvdXJjZURpcikpIHtcbiAgICAgICAgICBzdGFydFggKz0gc291cmNlRGlyID09PSBcIkxcIiA/IC1ncm91cEVkZ2VTaGlmdCA6IGdyb3VwRWRnZVNoaWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0WSArPSBzb3VyY2VEaXIgPT09IFwiVFwiID8gLWdyb3VwRWRnZVNoaWZ0IDogZ3JvdXBFZGdlU2hpZnQgKyAxODtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgodGFyZ2V0RGlyKSkge1xuICAgICAgICAgIGVuZFggKz0gdGFyZ2V0RGlyID09PSBcIkxcIiA/IC1ncm91cEVkZ2VTaGlmdCA6IGdyb3VwRWRnZVNoaWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZFkgKz0gdGFyZ2V0RGlyID09PSBcIlRcIiA/IC1ncm91cEVkZ2VTaGlmdCA6IGdyb3VwRWRnZVNoaWZ0ICsgMTg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlR3JvdXAgJiYgZGIuZ2V0Tm9kZShzb3VyY2UpPy50eXBlID09PSBcImp1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWChzb3VyY2VEaXIpKSB7XG4gICAgICAgICAgc3RhcnRYICs9IHNvdXJjZURpciA9PT0gXCJMXCIgPyBoYWxmSWNvblNpemUgOiAtaGFsZkljb25TaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0WSArPSBzb3VyY2VEaXIgPT09IFwiVFwiID8gaGFsZkljb25TaXplIDogLWhhbGZJY29uU2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0YXJnZXRHcm91cCAmJiBkYi5nZXROb2RlKHRhcmdldCk/LnR5cGUgPT09IFwianVuY3Rpb25cIikge1xuICAgICAgICBpZiAoaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHRhcmdldERpcikpIHtcbiAgICAgICAgICBlbmRYICs9IHRhcmdldERpciA9PT0gXCJMXCIgPyBoYWxmSWNvblNpemUgOiAtaGFsZkljb25TaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZFkgKz0gdGFyZ2V0RGlyID09PSBcIlRcIiA/IGhhbGZJY29uU2l6ZSA6IC1oYWxmSWNvblNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoKSB7XG4gICAgICAgIGNvbnN0IGcgPSBlZGdlc0VsLmluc2VydChcImdcIik7XG4gICAgICAgIGcuaW5zZXJ0KFwicGF0aFwiKS5hdHRyKFwiZFwiLCBgTSAke3N0YXJ0WH0sJHtzdGFydFl9IEwgJHttaWRYfSwke21pZFl9IEwke2VuZFh9LCR7ZW5kWX0gYCkuYXR0cihcImNsYXNzXCIsIFwiZWRnZVwiKTtcbiAgICAgICAgaWYgKHNvdXJjZUFycm93KSB7XG4gICAgICAgICAgY29uc3QgeFNoaWZ0ID0gaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHNvdXJjZURpcikgPyBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1NoaWZ0W3NvdXJjZURpcl0oc3RhcnRYLCBhcnJvd1NpemUpIDogc3RhcnRYIC0gaGFsZkFycm93U2l6ZTtcbiAgICAgICAgICBjb25zdCB5U2hpZnQgPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkoc291cmNlRGlyKSA/IEFyY2hpdGVjdHVyZURpcmVjdGlvbkFycm93U2hpZnRbc291cmNlRGlyXShzdGFydFksIGFycm93U2l6ZSkgOiBzdGFydFkgLSBoYWxmQXJyb3dTaXplO1xuICAgICAgICAgIGcuaW5zZXJ0KFwicG9seWdvblwiKS5hdHRyKFwicG9pbnRzXCIsIEFyY2hpdGVjdHVyZURpcmVjdGlvbkFycm93W3NvdXJjZURpcl0oYXJyb3dTaXplKSkuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7eFNoaWZ0fSwke3lTaGlmdH0pYCkuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldEFycm93KSB7XG4gICAgICAgICAgY29uc3QgeFNoaWZ0ID0gaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHRhcmdldERpcikgPyBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1NoaWZ0W3RhcmdldERpcl0oZW5kWCwgYXJyb3dTaXplKSA6IGVuZFggLSBoYWxmQXJyb3dTaXplO1xuICAgICAgICAgIGNvbnN0IHlTaGlmdCA9IGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWSh0YXJnZXREaXIpID8gQXJjaGl0ZWN0dXJlRGlyZWN0aW9uQXJyb3dTaGlmdFt0YXJnZXREaXJdKGVuZFksIGFycm93U2l6ZSkgOiBlbmRZIC0gaGFsZkFycm93U2l6ZTtcbiAgICAgICAgICBnLmluc2VydChcInBvbHlnb25cIikuYXR0cihcInBvaW50c1wiLCBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1t0YXJnZXREaXJdKGFycm93U2l6ZSkpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3hTaGlmdH0sJHt5U2hpZnR9KWApLmF0dHIoXCJjbGFzc1wiLCBcImFycm93XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPSAhaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YWShzb3VyY2VEaXIsIHRhcmdldERpcikgPyBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgoc291cmNlRGlyKSA/IFwiWFwiIDogXCJZXCIgOiBcIlhZXCI7XG4gICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICBpZiAoYXhpcyA9PT0gXCJYXCIpIHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5hYnMoc3RhcnRYIC0gZW5kWCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSBcIllcIikge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyhzdGFydFkgLSBlbmRZKSAvIDEuNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyhzdGFydFggLSBlbmRYKSAvIDI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZy5hcHBlbmQoXCJnXCIpO1xuICAgICAgICAgIGF3YWl0IGNyZWF0ZVRleHQoXG4gICAgICAgICAgICB0ZXh0RWxlbSxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1c2VIdG1sTGFiZWxzOiBmYWxzZSxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFwiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWxcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldENvbmZpZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0ZXh0RWxlbS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpO1xuICAgICAgICAgIGlmIChheGlzID09PSBcIlhcIikge1xuICAgICAgICAgICAgdGV4dEVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIG1pZFggKyBcIiwgXCIgKyBtaWRZICsgXCIpXCIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gXCJZXCIpIHtcbiAgICAgICAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBtaWRYICsgXCIsIFwiICsgbWlkWSArIFwiKSByb3RhdGUoLTkwKVwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGF4aXMgPT09IFwiWFlcIikge1xuICAgICAgICAgICAgY29uc3QgcGFpciA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIoc291cmNlRGlyLCB0YXJnZXREaXIpO1xuICAgICAgICAgICAgaWYgKHBhaXIgJiYgaXNBcmNoaXRlY3R1cmVQYWlyWFkocGFpcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmJveE9yaWcgPSB0ZXh0RWxlbS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblhZRmFjdG9ycyhwYWlyKTtcbiAgICAgICAgICAgICAgdGV4dEVsZW0uYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiYXV0b1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGByb3RhdGUoJHstMSAqIHggKiB5ICogNDV9KWApO1xuICAgICAgICAgICAgICBjb25zdCBiYm94TmV3ID0gdGV4dEVsZW0ubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICB0ZXh0RWxlbS5hdHRyKFxuICAgICAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke21pZFh9LCAke21pZFkgLSBiYm94T3JpZy5oZWlnaHQgLyAyfSkgXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlKCR7eCAqIGJib3hOZXcud2lkdGggLyAyfSwgJHt5ICogYmJveE5ldy5oZWlnaHQgLyAyfSkgXG4gICAgICAgICAgICAgICAgcm90YXRlKCR7LTEgKiB4ICogeSAqIDQ1fSwgMCwgJHtiYm94T3JpZy5oZWlnaHQgLyAyfSlcbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG59LCBcImRyYXdFZGdlc1wiKTtcbnZhciBkcmF3R3JvdXBzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihncm91cHNFbCwgY3kpIHtcbiAgY29uc3QgcGFkZGluZyA9IGdldENvbmZpZ0ZpZWxkKFwicGFkZGluZ1wiKTtcbiAgY29uc3QgZ3JvdXBJY29uU2l6ZSA9IHBhZGRpbmcgKiAwLjc1O1xuICBjb25zdCBmb250U2l6ZSA9IGdldENvbmZpZ0ZpZWxkKFwiZm9udFNpemVcIik7XG4gIGNvbnN0IGljb25TaXplID0gZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKTtcbiAgY29uc3QgaGFsZkljb25TaXplID0gaWNvblNpemUgLyAyO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBjeS5ub2RlcygpLm1hcChhc3luYyAobm9kZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IG5vZGVEYXRhKG5vZGUpO1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IHsgaCwgdywgeDEsIHkxIH0gPSBub2RlLmJvdW5kaW5nQm94KCk7XG4gICAgICAgIGdyb3Vwc0VsLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgeDEgKyBoYWxmSWNvblNpemUpLmF0dHIoXCJ5XCIsIHkxICsgaGFsZkljb25TaXplKS5hdHRyKFwid2lkdGhcIiwgdykuYXR0cihcImhlaWdodFwiLCBoKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWJrZ1wiKTtcbiAgICAgICAgY29uc3QgZ3JvdXBMYWJlbENvbnRhaW5lciA9IGdyb3Vwc0VsLmFwcGVuZChcImdcIik7XG4gICAgICAgIGxldCBzaGlmdGVkWDEgPSB4MTtcbiAgICAgICAgbGV0IHNoaWZ0ZWRZMSA9IHkxO1xuICAgICAgICBpZiAoZGF0YS5pY29uKSB7XG4gICAgICAgICAgY29uc3QgYmtnRWxlbSA9IGdyb3VwTGFiZWxDb250YWluZXIuYXBwZW5kKFwiZ1wiKTtcbiAgICAgICAgICBia2dFbGVtLmh0bWwoXG4gICAgICAgICAgICBgPGc+JHthd2FpdCBnZXRJY29uU1ZHKGRhdGEuaWNvbiwgeyBoZWlnaHQ6IGdyb3VwSWNvblNpemUsIHdpZHRoOiBncm91cEljb25TaXplLCBmYWxsYmFja1ByZWZpeDogYXJjaGl0ZWN0dXJlSWNvbnMucHJlZml4IH0pfTwvZz5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBia2dFbGVtLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoc2hpZnRlZFgxICsgaGFsZkljb25TaXplICsgMSkgKyBcIiwgXCIgKyAoc2hpZnRlZFkxICsgaGFsZkljb25TaXplICsgMSkgKyBcIilcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgc2hpZnRlZFgxICs9IGdyb3VwSWNvblNpemU7XG4gICAgICAgICAgc2hpZnRlZFkxICs9IGZvbnRTaXplIC8gMiAtIDEgLSAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmxhYmVsKSB7XG4gICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBncm91cExhYmVsQ29udGFpbmVyLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgYXdhaXQgY3JlYXRlVGV4dChcbiAgICAgICAgICAgIHRleHRFbGVtLFxuICAgICAgICAgICAgZGF0YS5sYWJlbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdXNlSHRtbExhYmVsczogZmFsc2UsXG4gICAgICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgICAgICBjbGFzc2VzOiBcImFyY2hpdGVjdHVyZS1zZXJ2aWNlLWxhYmVsXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRDb25maWcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGV4dEVsZW0uYXR0cihcImR5XCIsIFwiMWVtXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwic3RhcnRcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIik7XG4gICAgICAgICAgdGV4dEVsZW0uYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArIChzaGlmdGVkWDEgKyBoYWxmSWNvblNpemUgKyA0KSArIFwiLCBcIiArIChzaGlmdGVkWTEgKyBoYWxmSWNvblNpemUgKyAyKSArIFwiKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG59LCBcImRyYXdHcm91cHNcIik7XG52YXIgZHJhd1NlcnZpY2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihkYjIsIGVsZW0sIHNlcnZpY2VzKSB7XG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBzZXJ2aWNlcykge1xuICAgIGNvbnN0IHNlcnZpY2VFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgIGNvbnN0IGljb25TaXplID0gZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKTtcbiAgICBpZiAoc2VydmljZS50aXRsZSkge1xuICAgICAgY29uc3QgdGV4dEVsZW0gPSBzZXJ2aWNlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgICAgYXdhaXQgY3JlYXRlVGV4dChcbiAgICAgICAgdGV4dEVsZW0sXG4gICAgICAgIHNlcnZpY2UudGl0bGUsXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VIdG1sTGFiZWxzOiBmYWxzZSxcbiAgICAgICAgICB3aWR0aDogaWNvblNpemUgKiAxLjUsXG4gICAgICAgICAgY2xhc3NlczogXCJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbFwiXG4gICAgICAgIH0sXG4gICAgICAgIGdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdGV4dEVsZW0uYXR0cihcImR5XCIsIFwiMWVtXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKTtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBpY29uU2l6ZSAvIDIgKyBcIiwgXCIgKyBpY29uU2l6ZSArIFwiKVwiKTtcbiAgICB9XG4gICAgY29uc3QgYmtnRWxlbSA9IHNlcnZpY2VFbGVtLmFwcGVuZChcImdcIik7XG4gICAgaWYgKHNlcnZpY2UuaWNvbikge1xuICAgICAgYmtnRWxlbS5odG1sKFxuICAgICAgICBgPGc+JHthd2FpdCBnZXRJY29uU1ZHKHNlcnZpY2UuaWNvbiwgeyBoZWlnaHQ6IGljb25TaXplLCB3aWR0aDogaWNvblNpemUsIGZhbGxiYWNrUHJlZml4OiBhcmNoaXRlY3R1cmVJY29ucy5wcmVmaXggfSl9PC9nPmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzZXJ2aWNlLmljb25UZXh0KSB7XG4gICAgICBia2dFbGVtLmh0bWwoXG4gICAgICAgIGA8Zz4ke2F3YWl0IGdldEljb25TVkcoXCJibGFua1wiLCB7IGhlaWdodDogaWNvblNpemUsIHdpZHRoOiBpY29uU2l6ZSwgZmFsbGJhY2tQcmVmaXg6IGFyY2hpdGVjdHVyZUljb25zLnByZWZpeCB9KX08L2c+YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRleHRFbGVtQ29udGFpbmVyID0gYmtnRWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgICAgY29uc3QgZm8gPSB0ZXh0RWxlbUNvbnRhaW5lci5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJ3aWR0aFwiLCBpY29uU2l6ZSkuYXR0cihcImhlaWdodFwiLCBpY29uU2l6ZSk7XG4gICAgICBjb25zdCBkaXZFbGVtID0gZm8uYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtaWNvbi10ZXh0XCIpLmF0dHIoXCJzdHlsZVwiLCBgaGVpZ2h0OiAke2ljb25TaXplfXB4O2ApLmFwcGVuZChcImRpdlwiKS5odG1sKHNlcnZpY2UuaWNvblRleHQpO1xuICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUludChcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGl2RWxlbS5ub2RlKCksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJmb250LXNpemVcIikucmVwbGFjZSgvXFxEL2csIFwiXCIpXG4gICAgICApID8/IDE2O1xuICAgICAgZGl2RWxlbS5hdHRyKFwic3R5bGVcIiwgYC13ZWJraXQtbGluZS1jbGFtcDogJHtNYXRoLmZsb29yKChpY29uU2l6ZSAtIDIpIC8gZm9udFNpemUpfTtgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmtnRWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnXCIpLmF0dHIoXCJpZFwiLCBcIm5vZGUtXCIgKyBzZXJ2aWNlLmlkKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgYE0wICR7aWNvblNpemV9IHYkey1pY29uU2l6ZX0gcTAsLTUgNSwtNSBoJHtpY29uU2l6ZX0gcTUsMCA1LDUgdiR7aWNvblNpemV9IEgwIFpgXG4gICAgICApO1xuICAgIH1cbiAgICBzZXJ2aWNlRWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhcmNoaXRlY3R1cmUtc2VydmljZVwiKTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNlcnZpY2VFbGVtLl9ncm91cHNbMF1bMF0uZ2V0QkJveCgpO1xuICAgIHNlcnZpY2Uud2lkdGggPSB3aWR0aDtcbiAgICBzZXJ2aWNlLmhlaWdodCA9IGhlaWdodDtcbiAgICBkYjIuc2V0RWxlbWVudEZvcklkKHNlcnZpY2UuaWQsIHNlcnZpY2VFbGVtKTtcbiAgfVxuICByZXR1cm4gMDtcbn0sIFwiZHJhd1NlcnZpY2VzXCIpO1xudmFyIGRyYXdKdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwganVuY3Rpb25zKSB7XG4gIGp1bmN0aW9ucy5mb3JFYWNoKChqdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IGp1bmN0aW9uRWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgICBjb25zdCBpY29uU2l6ZSA9IGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIik7XG4gICAgY29uc3QgYmtnRWxlbSA9IGp1bmN0aW9uRWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgIGJrZ0VsZW0uYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiaWRcIiwgXCJub2RlLVwiICsganVuY3Rpb24uaWQpLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwgXCIwXCIpLmF0dHIoXCJ3aWR0aFwiLCBpY29uU2l6ZSkuYXR0cihcImhlaWdodFwiLCBpY29uU2l6ZSk7XG4gICAganVuY3Rpb25FbGVtLmF0dHIoXCJjbGFzc1wiLCBcImFyY2hpdGVjdHVyZS1qdW5jdGlvblwiKTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGp1bmN0aW9uRWxlbS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtcbiAgICBqdW5jdGlvbkVsZW0ud2lkdGggPSB3aWR0aDtcbiAgICBqdW5jdGlvbkVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGRiMi5zZXRFbGVtZW50Rm9ySWQoanVuY3Rpb24uaWQsIGp1bmN0aW9uRWxlbSk7XG4gIH0pO1xufSwgXCJkcmF3SnVuY3Rpb25zXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVJlbmRlcmVyLnRzXG5yZWdpc3Rlckljb25QYWNrcyhbXG4gIHtcbiAgICBuYW1lOiBhcmNoaXRlY3R1cmVJY29ucy5wcmVmaXgsXG4gICAgaWNvbnM6IGFyY2hpdGVjdHVyZUljb25zXG4gIH1cbl0pO1xuY3l0b3NjYXBlLnVzZShmY29zZSk7XG5mdW5jdGlvbiBhZGRTZXJ2aWNlcyhzZXJ2aWNlcywgY3kpIHtcbiAgc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgIGN5LmFkZCh7XG4gICAgICBncm91cDogXCJub2Rlc1wiLFxuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiBcInNlcnZpY2VcIixcbiAgICAgICAgaWQ6IHNlcnZpY2UuaWQsXG4gICAgICAgIGljb246IHNlcnZpY2UuaWNvbixcbiAgICAgICAgbGFiZWw6IHNlcnZpY2UudGl0bGUsXG4gICAgICAgIHBhcmVudDogc2VydmljZS5pbixcbiAgICAgICAgd2lkdGg6IGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIiksXG4gICAgICAgIGhlaWdodDogZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKVxuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IFwibm9kZS1zZXJ2aWNlXCJcbiAgICB9KTtcbiAgfSk7XG59XG5fX25hbWUoYWRkU2VydmljZXMsIFwiYWRkU2VydmljZXNcIik7XG5mdW5jdGlvbiBhZGRKdW5jdGlvbnMoanVuY3Rpb25zLCBjeSkge1xuICBqdW5jdGlvbnMuZm9yRWFjaCgoanVuY3Rpb24pID0+IHtcbiAgICBjeS5hZGQoe1xuICAgICAgZ3JvdXA6IFwibm9kZXNcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdHlwZTogXCJqdW5jdGlvblwiLFxuICAgICAgICBpZDoganVuY3Rpb24uaWQsXG4gICAgICAgIHBhcmVudDoganVuY3Rpb24uaW4sXG4gICAgICAgIHdpZHRoOiBnZXRDb25maWdGaWVsZChcImljb25TaXplXCIpLFxuICAgICAgICBoZWlnaHQ6IGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIilcbiAgICAgIH0sXG4gICAgICBjbGFzc2VzOiBcIm5vZGUtanVuY3Rpb25cIlxuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShhZGRKdW5jdGlvbnMsIFwiYWRkSnVuY3Rpb25zXCIpO1xuZnVuY3Rpb24gcG9zaXRpb25Ob2RlcyhkYjIsIGN5KSB7XG4gIGN5Lm5vZGVzKCkubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IG5vZGVEYXRhKG5vZGUpO1xuICAgIGlmIChkYXRhLnR5cGUgPT09IFwiZ3JvdXBcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhLnggPSBub2RlLnBvc2l0aW9uKCkueDtcbiAgICBkYXRhLnkgPSBub2RlLnBvc2l0aW9uKCkueTtcbiAgICBjb25zdCBub2RlRWxlbSA9IGRiMi5nZXRFbGVtZW50QnlJZChkYXRhLmlkKTtcbiAgICBub2RlRWxlbS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKGRhdGEueCB8fCAwKSArIFwiLFwiICsgKGRhdGEueSB8fCAwKSArIFwiKVwiKTtcbiAgfSk7XG59XG5fX25hbWUocG9zaXRpb25Ob2RlcywgXCJwb3NpdGlvbk5vZGVzXCIpO1xuZnVuY3Rpb24gYWRkR3JvdXBzKGdyb3VwcywgY3kpIHtcbiAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgY3kuYWRkKHtcbiAgICAgIGdyb3VwOiBcIm5vZGVzXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHR5cGU6IFwiZ3JvdXBcIixcbiAgICAgICAgaWQ6IGdyb3VwLmlkLFxuICAgICAgICBpY29uOiBncm91cC5pY29uLFxuICAgICAgICBsYWJlbDogZ3JvdXAudGl0bGUsXG4gICAgICAgIHBhcmVudDogZ3JvdXAuaW5cbiAgICAgIH0sXG4gICAgICBjbGFzc2VzOiBcIm5vZGUtZ3JvdXBcIlxuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShhZGRHcm91cHMsIFwiYWRkR3JvdXBzXCIpO1xuZnVuY3Rpb24gYWRkRWRnZXMoZWRnZXMsIGN5KSB7XG4gIGVkZ2VzLmZvckVhY2goKHBhcnNlZEVkZ2UpID0+IHtcbiAgICBjb25zdCB7IGxoc0lkLCByaHNJZCwgbGhzSW50bywgbGhzR3JvdXAsIHJoc0ludG8sIGxoc0RpciwgcmhzRGlyLCByaHNHcm91cCwgdGl0bGUgfSA9IHBhcnNlZEVkZ2U7XG4gICAgY29uc3QgZWRnZVR5cGUgPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhZKHBhcnNlZEVkZ2UubGhzRGlyLCBwYXJzZWRFZGdlLnJoc0RpcikgPyBcInNlZ21lbnRzXCIgOiBcInN0cmFpZ2h0XCI7XG4gICAgY29uc3QgZWRnZSA9IHtcbiAgICAgIGlkOiBgJHtsaHNJZH0tJHtyaHNJZH1gLFxuICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgc291cmNlOiBsaHNJZCxcbiAgICAgIHNvdXJjZURpcjogbGhzRGlyLFxuICAgICAgc291cmNlQXJyb3c6IGxoc0ludG8sXG4gICAgICBzb3VyY2VHcm91cDogbGhzR3JvdXAsXG4gICAgICBzb3VyY2VFbmRwb2ludDogbGhzRGlyID09PSBcIkxcIiA/IFwiMCA1MCVcIiA6IGxoc0RpciA9PT0gXCJSXCIgPyBcIjEwMCUgNTAlXCIgOiBsaHNEaXIgPT09IFwiVFwiID8gXCI1MCUgMFwiIDogXCI1MCUgMTAwJVwiLFxuICAgICAgdGFyZ2V0OiByaHNJZCxcbiAgICAgIHRhcmdldERpcjogcmhzRGlyLFxuICAgICAgdGFyZ2V0QXJyb3c6IHJoc0ludG8sXG4gICAgICB0YXJnZXRHcm91cDogcmhzR3JvdXAsXG4gICAgICB0YXJnZXRFbmRwb2ludDogcmhzRGlyID09PSBcIkxcIiA/IFwiMCA1MCVcIiA6IHJoc0RpciA9PT0gXCJSXCIgPyBcIjEwMCUgNTAlXCIgOiByaHNEaXIgPT09IFwiVFwiID8gXCI1MCUgMFwiIDogXCI1MCUgMTAwJVwiXG4gICAgfTtcbiAgICBjeS5hZGQoe1xuICAgICAgZ3JvdXA6IFwiZWRnZXNcIixcbiAgICAgIGRhdGE6IGVkZ2UsXG4gICAgICBjbGFzc2VzOiBlZGdlVHlwZVxuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShhZGRFZGdlcywgXCJhZGRFZGdlc1wiKTtcbmZ1bmN0aW9uIGdldEFsaWdubWVudHMoc3BhdGlhbE1hcHMpIHtcbiAgY29uc3QgYWxpZ25tZW50cyA9IHNwYXRpYWxNYXBzLm1hcCgoc3BhdGlhbE1hcCkgPT4ge1xuICAgIGNvbnN0IGhvcml6b250YWxBbGlnbm1lbnRzID0ge307XG4gICAgY29uc3QgdmVydGljYWxBbGlnbm1lbnRzID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMoc3BhdGlhbE1hcCkuZm9yRWFjaCgoW2lkLCBbeCwgeV1dKSA9PiB7XG4gICAgICBpZiAoIWhvcml6b250YWxBbGlnbm1lbnRzW3ldKSB7XG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnRzW3ldID0gW107XG4gICAgICB9XG4gICAgICBpZiAoIXZlcnRpY2FsQWxpZ25tZW50c1t4XSkge1xuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudHNbeF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGhvcml6b250YWxBbGlnbm1lbnRzW3ldLnB1c2goaWQpO1xuICAgICAgdmVydGljYWxBbGlnbm1lbnRzW3hdLnB1c2goaWQpO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBob3JpejogT2JqZWN0LnZhbHVlcyhob3Jpem9udGFsQWxpZ25tZW50cykuZmlsdGVyKChhcnIpID0+IGFyci5sZW5ndGggPiAxKSxcbiAgICAgIHZlcnQ6IE9iamVjdC52YWx1ZXModmVydGljYWxBbGlnbm1lbnRzKS5maWx0ZXIoKGFycikgPT4gYXJyLmxlbmd0aCA+IDEpXG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IFtob3Jpem9udGFsLCB2ZXJ0aWNhbF0gPSBhbGlnbm1lbnRzLnJlZHVjZShcbiAgICAoW3ByZXZIb3JpeiwgcHJldlZlcnRdLCB7IGhvcml6LCB2ZXJ0IH0pID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFsuLi5wcmV2SG9yaXosIC4uLmhvcml6XSxcbiAgICAgICAgWy4uLnByZXZWZXJ0LCAuLi52ZXJ0XVxuICAgICAgXTtcbiAgICB9LFxuICAgIFtbXSwgW11dXG4gICk7XG4gIHJldHVybiB7XG4gICAgaG9yaXpvbnRhbCxcbiAgICB2ZXJ0aWNhbFxuICB9O1xufVxuX19uYW1lKGdldEFsaWdubWVudHMsIFwiZ2V0QWxpZ25tZW50c1wiKTtcbmZ1bmN0aW9uIGdldFJlbGF0aXZlQ29uc3RyYWludHMoc3BhdGlhbE1hcHMpIHtcbiAgY29uc3QgcmVsYXRpdmVDb25zdHJhaW50cyA9IFtdO1xuICBjb25zdCBwb3NUb1N0ciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBvcykgPT4gYCR7cG9zWzBdfSwke3Bvc1sxXX1gLCBcInBvc1RvU3RyXCIpO1xuICBjb25zdCBzdHJUb1BvcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBvcykgPT4gcG9zLnNwbGl0KFwiLFwiKS5tYXAoKHApID0+IHBhcnNlSW50KHApKSwgXCJzdHJUb1Bvc1wiKTtcbiAgc3BhdGlhbE1hcHMuZm9yRWFjaCgoc3BhdGlhbE1hcCkgPT4ge1xuICAgIGNvbnN0IGludlNwYXRpYWxNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhzcGF0aWFsTWFwKS5tYXAoKFtpZCwgcG9zXSkgPT4gW3Bvc1RvU3RyKHBvcyksIGlkXSlcbiAgICApO1xuICAgIGNvbnN0IHF1ZXVlID0gW3Bvc1RvU3RyKFswLCAwXSldO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSB7fTtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0ge1xuICAgICAgTDogWy0xLCAwXSxcbiAgICAgIFI6IFsxLCAwXSxcbiAgICAgIFQ6IFswLCAxXSxcbiAgICAgIEI6IFswLCAtMV1cbiAgICB9O1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIGlmIChjdXJyKSB7XG4gICAgICAgIHZpc2l0ZWRbY3Vycl0gPSAxO1xuICAgICAgICBjb25zdCBjdXJySWQgPSBpbnZTcGF0aWFsTWFwW2N1cnJdO1xuICAgICAgICBpZiAoY3VycklkKSB7XG4gICAgICAgICAgY29uc3QgY3VyclBvcyA9IHN0clRvUG9zKGN1cnIpO1xuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRpcmVjdGlvbnMpLmZvckVhY2goKFtkaXIsIHNoaWZ0XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UG9zID0gcG9zVG9TdHIoW2N1cnJQb3NbMF0gKyBzaGlmdFswXSwgY3VyclBvc1sxXSArIHNoaWZ0WzFdXSk7XG4gICAgICAgICAgICBjb25zdCBuZXdJZCA9IGludlNwYXRpYWxNYXBbbmV3UG9zXTtcbiAgICAgICAgICAgIGlmIChuZXdJZCAmJiAhdmlzaXRlZFtuZXdQb3NdKSB7XG4gICAgICAgICAgICAgIHF1ZXVlLnB1c2gobmV3UG9zKTtcbiAgICAgICAgICAgICAgcmVsYXRpdmVDb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBbQXJjaGl0ZWN0dXJlRGlyZWN0aW9uTmFtZVtkaXJdXTogbmV3SWQsXG4gICAgICAgICAgICAgICAgW0FyY2hpdGVjdHVyZURpcmVjdGlvbk5hbWVbZ2V0T3Bwb3NpdGVBcmNoaXRlY3R1cmVEaXJlY3Rpb24oZGlyKV1dOiBjdXJySWQsXG4gICAgICAgICAgICAgICAgZ2FwOiAxLjUgKiBnZXRDb25maWdGaWVsZChcImljb25TaXplXCIpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlbGF0aXZlQ29uc3RyYWludHM7XG59XG5fX25hbWUoZ2V0UmVsYXRpdmVDb25zdHJhaW50cywgXCJnZXRSZWxhdGl2ZUNvbnN0cmFpbnRzXCIpO1xuZnVuY3Rpb24gbGF5b3V0QXJjaGl0ZWN0dXJlKHNlcnZpY2VzLCBqdW5jdGlvbnMsIGdyb3VwcywgZWRnZXMsIHsgc3BhdGlhbE1hcHMgfSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZW5kZXJFbCA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJpZFwiLCBcImN5XCIpLmF0dHIoXCJzdHlsZVwiLCBcImRpc3BsYXk6bm9uZVwiKTtcbiAgICBjb25zdCBjeSA9IGN5dG9zY2FwZSh7XG4gICAgICBjb250YWluZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3lcIiksXG4gICAgICBzdHlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwiZWRnZVwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBcImN1cnZlLXN0eWxlXCI6IFwic3RyYWlnaHRcIixcbiAgICAgICAgICAgIGxhYmVsOiBcImRhdGEobGFiZWwpXCIsXG4gICAgICAgICAgICBcInNvdXJjZS1lbmRwb2ludFwiOiBcImRhdGEoc291cmNlRW5kcG9pbnQpXCIsXG4gICAgICAgICAgICBcInRhcmdldC1lbmRwb2ludFwiOiBcImRhdGEodGFyZ2V0RW5kcG9pbnQpXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RvcjogXCJlZGdlLnNlZ21lbnRzXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwiY3VydmUtc3R5bGVcIjogXCJzZWdtZW50c1wiLFxuICAgICAgICAgICAgXCJzZWdtZW50LXdlaWdodHNcIjogXCIwXCIsXG4gICAgICAgICAgICBcInNlZ21lbnQtZGlzdGFuY2VzXCI6IFswLjVdLFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBJbmNvcnJlY3QgbGlicmFyeSB0eXBlc1xuICAgICAgICAgICAgXCJlZGdlLWRpc3RhbmNlc1wiOiBcImVuZHBvaW50c1wiLFxuICAgICAgICAgICAgXCJzb3VyY2UtZW5kcG9pbnRcIjogXCJkYXRhKHNvdXJjZUVuZHBvaW50KVwiLFxuICAgICAgICAgICAgXCJ0YXJnZXQtZW5kcG9pbnRcIjogXCJkYXRhKHRhcmdldEVuZHBvaW50KVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwibm9kZVwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIEluY29ycmVjdCBsaWJyYXJ5IHR5cGVzXG4gICAgICAgICAgICBcImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzXCI6IFwiaW5jbHVkZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwibm9kZVtsYWJlbF1cIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJ0ZXh0LXZhbGlnblwiOiBcImJvdHRvbVwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWhhbGlnblwiOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgXCJmb250LXNpemVcIjogYCR7Z2V0Q29uZmlnRmllbGQoXCJmb250U2l6ZVwiKX1weGBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RvcjogXCIubm9kZS1zZXJ2aWNlXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcImRhdGEobGFiZWwpXCIsXG4gICAgICAgICAgICB3aWR0aDogXCJkYXRhKHdpZHRoKVwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcImRhdGEoaGVpZ2h0KVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwiLm5vZGUtanVuY3Rpb25cIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgd2lkdGg6IFwiZGF0YSh3aWR0aClcIixcbiAgICAgICAgICAgIGhlaWdodDogXCJkYXRhKGhlaWdodClcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNlbGVjdG9yOiBcIi5ub2RlLWdyb3VwXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgSW5jb3JyZWN0IGxpYnJhcnkgdHlwZXNcbiAgICAgICAgICAgIHBhZGRpbmc6IGAke2dldENvbmZpZ0ZpZWxkKFwicGFkZGluZ1wiKX1weGBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICByZW5kZXJFbC5yZW1vdmUoKTtcbiAgICBhZGRHcm91cHMoZ3JvdXBzLCBjeSk7XG4gICAgYWRkU2VydmljZXMoc2VydmljZXMsIGN5KTtcbiAgICBhZGRKdW5jdGlvbnMoanVuY3Rpb25zLCBjeSk7XG4gICAgYWRkRWRnZXMoZWRnZXMsIGN5KTtcbiAgICBjb25zdCBhbGlnbm1lbnRDb25zdHJhaW50ID0gZ2V0QWxpZ25tZW50cyhzcGF0aWFsTWFwcyk7XG4gICAgY29uc3QgcmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50ID0gZ2V0UmVsYXRpdmVDb25zdHJhaW50cyhzcGF0aWFsTWFwcyk7XG4gICAgY29uc3QgbGF5b3V0ID0gY3kubGF5b3V0KHtcbiAgICAgIG5hbWU6IFwiZmNvc2VcIixcbiAgICAgIHF1YWxpdHk6IFwicHJvb2ZcIixcbiAgICAgIHN0eWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICBhbmltYXRlOiBmYWxzZSxcbiAgICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gICAgICAvLyBBZGp1c3QgdGhlIGVkZ2UgcGFyYW1ldGVycyBpZiBpdCBwYXNzZXMgdGhyb3VnaCB0aGUgYm9yZGVyIG9mIGEgZ3JvdXBcbiAgICAgIC8vIEhhY2t5IGZpeCBmb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9pVmlzLWF0LUJpbGtlbnQvY3l0b3NjYXBlLmpzLWZjb3NlL2lzc3Vlcy82N1xuICAgICAgaWRlYWxFZGdlTGVuZ3RoKGVkZ2UpIHtcbiAgICAgICAgY29uc3QgW25vZGVBLCBub2RlQl0gPSBlZGdlLmNvbm5lY3RlZE5vZGVzKCk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRBIH0gPSBub2RlRGF0YShub2RlQSk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRCIH0gPSBub2RlRGF0YShub2RlQik7XG4gICAgICAgIGNvbnN0IGVsYXN0aWNpdHkgPSBwYXJlbnRBID09PSBwYXJlbnRCID8gMS41ICogZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKSA6IDAuNSAqIGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIik7XG4gICAgICAgIHJldHVybiBlbGFzdGljaXR5O1xuICAgICAgfSxcbiAgICAgIGVkZ2VFbGFzdGljaXR5KGVkZ2UpIHtcbiAgICAgICAgY29uc3QgW25vZGVBLCBub2RlQl0gPSBlZGdlLmNvbm5lY3RlZE5vZGVzKCk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRBIH0gPSBub2RlRGF0YShub2RlQSk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRCIH0gPSBub2RlRGF0YShub2RlQik7XG4gICAgICAgIGNvbnN0IGVsYXN0aWNpdHkgPSBwYXJlbnRBID09PSBwYXJlbnRCID8gMC40NSA6IDFlLTM7XG4gICAgICAgIHJldHVybiBlbGFzdGljaXR5O1xuICAgICAgfSxcbiAgICAgIGFsaWdubWVudENvbnN0cmFpbnQsXG4gICAgICByZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnRcbiAgICB9KTtcbiAgICBsYXlvdXQub25lKFwibGF5b3V0c3RvcFwiLCAoKSA9PiB7XG4gICAgICBmdW5jdGlvbiBnZXRTZWdtZW50V2VpZ2h0cyhzb3VyY2UsIHRhcmdldCwgcG9pbnRYLCBwb2ludFkpIHtcbiAgICAgICAgbGV0IFcsIEQ7XG4gICAgICAgIGNvbnN0IHsgeDogc1gsIHk6IHNZIH0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHsgeDogdFgsIHk6IHRZIH0gPSB0YXJnZXQ7XG4gICAgICAgIEQgPSAocG9pbnRZIC0gc1kgKyAoc1ggLSBwb2ludFgpICogKHNZIC0gdFkpIC8gKHNYIC0gdFgpKSAvIE1hdGguc3FydCgxICsgTWF0aC5wb3coKHNZIC0gdFkpIC8gKHNYIC0gdFgpLCAyKSk7XG4gICAgICAgIFcgPSBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnRZIC0gc1ksIDIpICsgTWF0aC5wb3cocG9pbnRYIC0gc1gsIDIpIC0gTWF0aC5wb3coRCwgMikpO1xuICAgICAgICBjb25zdCBkaXN0QUIgPSBNYXRoLnNxcnQoTWF0aC5wb3codFggLSBzWCwgMikgKyBNYXRoLnBvdyh0WSAtIHNZLCAyKSk7XG4gICAgICAgIFcgPSBXIC8gZGlzdEFCO1xuICAgICAgICBsZXQgZGVsdGExID0gKHRYIC0gc1gpICogKHBvaW50WSAtIHNZKSAtICh0WSAtIHNZKSAqIChwb2ludFggLSBzWCk7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgIGNhc2UgZGVsdGExID49IDA6XG4gICAgICAgICAgICBkZWx0YTEgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBkZWx0YTEgPCAwOlxuICAgICAgICAgICAgZGVsdGExID0gLTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGVsdGEyID0gKHRYIC0gc1gpICogKHBvaW50WCAtIHNYKSArICh0WSAtIHNZKSAqIChwb2ludFkgLSBzWSk7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgIGNhc2UgZGVsdGEyID49IDA6XG4gICAgICAgICAgICBkZWx0YTIgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBkZWx0YTIgPCAwOlxuICAgICAgICAgICAgZGVsdGEyID0gLTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBEID0gTWF0aC5hYnMoRCkgKiBkZWx0YTE7XG4gICAgICAgIFcgPSBXICogZGVsdGEyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3RhbmNlczogRCxcbiAgICAgICAgICB3ZWlnaHRzOiBXXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBfX25hbWUoZ2V0U2VnbWVudFdlaWdodHMsIFwiZ2V0U2VnbWVudFdlaWdodHNcIik7XG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2YgT2JqZWN0LnZhbHVlcyhjeS5lZGdlcygpKSkge1xuICAgICAgICBpZiAoZWRnZS5kYXRhPy4oKSkge1xuICAgICAgICAgIGNvbnN0IHsgeDogc1gsIHk6IHNZIH0gPSBlZGdlLnNvdXJjZSgpLnBvc2l0aW9uKCk7XG4gICAgICAgICAgY29uc3QgeyB4OiB0WCwgeTogdFkgfSA9IGVkZ2UudGFyZ2V0KCkucG9zaXRpb24oKTtcbiAgICAgICAgICBpZiAoc1ggIT09IHRYICYmIHNZICE9PSB0WSkge1xuICAgICAgICAgICAgY29uc3Qgc0VQID0gZWRnZS5zb3VyY2VFbmRwb2ludCgpO1xuICAgICAgICAgICAgY29uc3QgdEVQID0gZWRnZS50YXJnZXRFbmRwb2ludCgpO1xuICAgICAgICAgICAgY29uc3QgeyBzb3VyY2VEaXIgfSA9IGVkZ2VEYXRhKGVkZ2UpO1xuICAgICAgICAgICAgY29uc3QgW3BvaW50WCwgcG9pbnRZXSA9IGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWShzb3VyY2VEaXIpID8gW3NFUC54LCB0RVAueV0gOiBbdEVQLngsIHNFUC55XTtcbiAgICAgICAgICAgIGNvbnN0IHsgd2VpZ2h0cywgZGlzdGFuY2VzIH0gPSBnZXRTZWdtZW50V2VpZ2h0cyhzRVAsIHRFUCwgcG9pbnRYLCBwb2ludFkpO1xuICAgICAgICAgICAgZWRnZS5zdHlsZShcInNlZ21lbnQtZGlzdGFuY2VzXCIsIGRpc3RhbmNlcyk7XG4gICAgICAgICAgICBlZGdlLnN0eWxlKFwic2VnbWVudC13ZWlnaHRzXCIsIHdlaWdodHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3kuZW5kQmF0Y2goKTtcbiAgICAgIGxheW91dC5ydW4oKTtcbiAgICB9KTtcbiAgICBsYXlvdXQucnVuKCk7XG4gICAgY3kucmVhZHkoKGUpID0+IHtcbiAgICAgIGxvZy5pbmZvKFwiUmVhZHlcIiwgZSk7XG4gICAgICByZXNvbHZlKGN5KTtcbiAgICB9KTtcbiAgfSk7XG59XG5fX25hbWUobGF5b3V0QXJjaGl0ZWN0dXJlLCBcImxheW91dEFyY2hpdGVjdHVyZVwiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAodGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIGNvbnN0IGRiMiA9IGRpYWdPYmouZGI7XG4gIGNvbnN0IHNlcnZpY2VzID0gZGIyLmdldFNlcnZpY2VzKCk7XG4gIGNvbnN0IGp1bmN0aW9ucyA9IGRiMi5nZXRKdW5jdGlvbnMoKTtcbiAgY29uc3QgZ3JvdXBzID0gZGIyLmdldEdyb3VwcygpO1xuICBjb25zdCBlZGdlcyA9IGRiMi5nZXRFZGdlcygpO1xuICBjb25zdCBkcyA9IGRiMi5nZXREYXRhU3RydWN0dXJlcygpO1xuICBjb25zdCBzdmcgPSBzZWxlY3RTdmdFbGVtZW50KGlkKTtcbiAgY29uc3QgZWRnZXNFbGVtID0gc3ZnLmFwcGVuZChcImdcIik7XG4gIGVkZ2VzRWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhcmNoaXRlY3R1cmUtZWRnZXNcIik7XG4gIGNvbnN0IHNlcnZpY2VzRWxlbSA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBzZXJ2aWNlc0VsZW0uYXR0cihcImNsYXNzXCIsIFwiYXJjaGl0ZWN0dXJlLXNlcnZpY2VzXCIpO1xuICBjb25zdCBncm91cEVsZW0gPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgZ3JvdXBFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImFyY2hpdGVjdHVyZS1ncm91cHNcIik7XG4gIGF3YWl0IGRyYXdTZXJ2aWNlcyhkYjIsIHNlcnZpY2VzRWxlbSwgc2VydmljZXMpO1xuICBkcmF3SnVuY3Rpb25zKGRiMiwgc2VydmljZXNFbGVtLCBqdW5jdGlvbnMpO1xuICBjb25zdCBjeSA9IGF3YWl0IGxheW91dEFyY2hpdGVjdHVyZShzZXJ2aWNlcywganVuY3Rpb25zLCBncm91cHMsIGVkZ2VzLCBkcyk7XG4gIGF3YWl0IGRyYXdFZGdlcyhlZGdlc0VsZW0sIGN5KTtcbiAgYXdhaXQgZHJhd0dyb3Vwcyhncm91cEVsZW0sIGN5KTtcbiAgcG9zaXRpb25Ob2RlcyhkYjIsIGN5KTtcbiAgc2V0dXBHcmFwaFZpZXdib3godm9pZCAwLCBzdmcsIGdldENvbmZpZ0ZpZWxkKFwicGFkZGluZ1wiKSwgZ2V0Q29uZmlnRmllbGQoXCJ1c2VNYXhXaWR0aFwiKSk7XG59LCBcImRyYXdcIik7XG52YXIgcmVuZGVyZXIgPSB7IGRyYXcgfTtcblxuLy8gc3JjL2RpYWdyYW1zL2FyY2hpdGVjdHVyZS9hcmNoaXRlY3R1cmVEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlczogYXJjaGl0ZWN0dXJlU3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICByZWdpc3Rlckljb25QYWNrc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUwyQ0pPWVdFLm1qc1wiO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXJMYXlvdXRMb2FkZXJzXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstUk9LWVVWQ1UubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstMjNBVE1aWFYubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhbkFuZE1lcmdlLFxuICBkZWNvZGVFbnRpdGllcyxcbiAgZW5jb2RlRW50aXRpZXMsXG4gIGlzRGV0YWlsZWRFcnJvcixcbiAgcmVtb3ZlRGlyZWN0aXZlcyxcbiAgdXRpbHNfZGVmYXVsdFxufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgdmVyc2lvblxufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUJGU0kyUTdSLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUYyWEZOM0JZLm1qc1wiO1xuaW1wb3J0IHtcbiAgVW5rbm93bkRpYWdyYW1FcnJvcixcbiAgX19uYW1lLFxuICBhZGREaXJlY3RpdmUsXG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0LFxuICBjb25maWd1cmVTdmdTaXplLFxuICBkZWZhdWx0Q29uZmlnLFxuICBkZXRlY3RUeXBlLFxuICBkZXRlY3RvcnMsXG4gIGV2YWx1YXRlLFxuICBmcm9udE1hdHRlclJlZ2V4LFxuICBnZXRDb25maWcsXG4gIGdldERpYWdyYW0sXG4gIGdldERpYWdyYW1Mb2FkZXIsXG4gIGdldFNpdGVDb25maWcsXG4gIGxvZyxcbiAgcmVnaXN0ZXJEaWFncmFtLFxuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyxcbiAgcmVzZXQsXG4gIHNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZSxcbiAgc2V0Q29uZmlnLFxuICBzZXRMb2dMZXZlbCxcbiAgc2V0U2l0ZUNvbmZpZyxcbiAgc3R5bGVzX2RlZmF1bHQsXG4gIHRoZW1lc19kZWZhdWx0LFxuICB1cGRhdGVTaXRlQ29uZmlnXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9tZXJtYWlkLnRzXG5pbXBvcnQgeyBkZWRlbnQgfSBmcm9tIFwidHMtZGVkZW50XCI7XG5cbi8vIHNyYy9kaWFncmFtcy9jNC9jNERldGVjdG9yLnRzXG52YXIgaWQgPSBcImM0XCI7XG52YXIgZGV0ZWN0b3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvYzREaWFncmFtLVRIQURHS0RQLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4gPSB7XG4gIGlkLFxuICBkZXRlY3RvcixcbiAgbG9hZGVyXG59O1xudmFyIGM0RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9mbG93RGV0ZWN0b3IudHNcbnZhciBpZDIgPSBcImZsb3djaGFydFwiO1xudmFyIGRldGVjdG9yMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCwgY29uZmlnKSA9PiB7XG4gIGlmIChjb25maWc/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyID09PSBcImRhZ3JlLXdyYXBwZXJcIiB8fCBjb25maWc/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyID09PSBcImVsa1wiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAvXlxccypncmFwaC8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9mbG93RGlhZ3JhbS00NE5PQU1LVS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDIsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4yID0ge1xuICBpZDogaWQyLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IyLFxuICBsb2FkZXI6IGxvYWRlcjJcbn07XG52YXIgZmxvd0RldGVjdG9yX2RlZmF1bHQgPSBwbHVnaW4yO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZmxvd2NoYXJ0L2Zsb3dEZXRlY3Rvci12Mi50c1xudmFyIGlkMyA9IFwiZmxvd2NoYXJ0LXYyXCI7XG52YXIgZGV0ZWN0b3IzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBjb25maWcpID0+IHtcbiAgaWYgKGNvbmZpZz8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtZDNcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoY29uZmlnPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlciA9PT0gXCJlbGtcIikge1xuICAgIGNvbmZpZy5sYXlvdXQgPSBcImVsa1wiO1xuICB9XG4gIGlmICgvXlxccypncmFwaC8udGVzdCh0eHQpICYmIGNvbmZpZz8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIC9eXFxzKmZsb3djaGFydC8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9mbG93RGlhZ3JhbS00NE5PQU1LVS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDMsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4zID0ge1xuICBpZDogaWQzLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IzLFxuICBsb2FkZXI6IGxvYWRlcjNcbn07XG52YXIgZmxvd0RldGVjdG9yX3YyX2RlZmF1bHQgPSBwbHVnaW4zO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvZXJEZXRlY3Rvci50c1xudmFyIGlkNCA9IFwiZXJcIjtcbnZhciBkZXRlY3RvcjQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKmVyRGlhZ3JhbS8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXI0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9lckRpYWdyYW0tNjJDQlFWNVkubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQ0LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luNCA9IHtcbiAgaWQ6IGlkNCxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yNCxcbiAgbG9hZGVyOiBsb2FkZXI0XG59O1xudmFyIGVyRGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjQ7XG5cbi8vIHNyYy9kaWFncmFtcy9naXQvZ2l0R3JhcGhEZXRlY3Rvci50c1xudmFyIGlkNSA9IFwiZ2l0R3JhcGhcIjtcbnZhciBkZXRlY3RvcjUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKmdpdEdyYXBoLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2dpdEdyYXBoRGlhZ3JhbS1VTDVVRktEUi5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDUsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW41ID0ge1xuICBpZDogaWQ1LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I1LFxuICBsb2FkZXI6IGxvYWRlcjVcbn07XG52YXIgZ2l0R3JhcGhEZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luNTtcblxuLy8gc3JjL2RpYWdyYW1zL2dhbnR0L2dhbnR0RGV0ZWN0b3IudHNcbnZhciBpZDYgPSBcImdhbnR0XCI7XG52YXIgZGV0ZWN0b3I2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypnYW50dC8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXI2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9nYW50dERpYWdyYW0tQVNFSVE0UDUubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQ2LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luNiA9IHtcbiAgaWQ6IGlkNixcbiAgZGV0ZWN0b3I6IGRldGVjdG9yNixcbiAgbG9hZGVyOiBsb2FkZXI2XG59O1xudmFyIGdhbnR0RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjY7XG5cbi8vIHNyYy9kaWFncmFtcy9pbmZvL2luZm9EZXRlY3Rvci50c1xudmFyIGlkNyA9IFwiaW5mb1wiO1xudmFyIGRldGVjdG9yNyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqaW5mby8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXI3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9pbmZvRGlhZ3JhbS1ZR0pUUDZBQS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDcsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBpbmZvID0ge1xuICBpZDogaWQ3LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I3LFxuICBsb2FkZXI6IGxvYWRlcjdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllRGV0ZWN0b3IudHNcbnZhciBpZDggPSBcInBpZVwiO1xudmFyIGRldGVjdG9yOCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqcGllLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3BpZURpYWdyYW0tT1pYNlhINU0ubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQ4LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGllID0ge1xuICBpZDogaWQ4LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I4LFxuICBsb2FkZXI6IGxvYWRlcjhcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9xdWFkcmFudC1jaGFydC9xdWFkcmFudERldGVjdG9yLnRzXG52YXIgaWQ5ID0gXCJxdWFkcmFudENoYXJ0XCI7XG52YXIgZGV0ZWN0b3I5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypxdWFkcmFudENoYXJ0Ly50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3F1YWRyYW50RGlhZ3JhbS1WRzM0REdLQy5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDksIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW43ID0ge1xuICBpZDogaWQ5LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I5LFxuICBsb2FkZXI6IGxvYWRlcjlcbn07XG52YXIgcXVhZHJhbnREZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luNztcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQveHljaGFydERldGVjdG9yLnRzXG52YXIgaWQxMCA9IFwieHljaGFydFwiO1xudmFyIGRldGVjdG9yMTAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKnh5Y2hhcnQtYmV0YS8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIxMCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUveHljaGFydERpYWdyYW0tVE1UN05MQk4ubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxMCwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjggPSB7XG4gIGlkOiBpZDEwLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IxMCxcbiAgbG9hZGVyOiBsb2FkZXIxMFxufTtcbnZhciB4eWNoYXJ0RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjg7XG5cbi8vIHNyYy9kaWFncmFtcy9yZXF1aXJlbWVudC9yZXF1aXJlbWVudERldGVjdG9yLnRzXG52YXIgaWQxMSA9IFwicmVxdWlyZW1lbnRcIjtcbnZhciBkZXRlY3RvcjExID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3JlcXVpcmVtZW50RGlhZ3JhbS1GUFpCNklKSS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDExLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luOSA9IHtcbiAgaWQ6IGlkMTEsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjExLFxuICBsb2FkZXI6IGxvYWRlcjExXG59O1xudmFyIHJlcXVpcmVtZW50RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjk7XG5cbi8vIHNyYy9kaWFncmFtcy9zZXF1ZW5jZS9zZXF1ZW5jZURldGVjdG9yLnRzXG52YXIgaWQxMiA9IFwic2VxdWVuY2VcIjtcbnZhciBkZXRlY3RvcjEyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3NlcXVlbmNlRGlhZ3JhbS1LN1U3VTJQVS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDEyLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luMTAgPSB7XG4gIGlkOiBpZDEyLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IxMixcbiAgbG9hZGVyOiBsb2FkZXIxMlxufTtcbnZhciBzZXF1ZW5jZURldGVjdG9yX2RlZmF1bHQgPSBwbHVnaW4xMDtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzRGV0ZWN0b3IudHNcbnZhciBpZDEzID0gXCJjbGFzc1wiO1xudmFyIGRldGVjdG9yMTMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQsIGNvbmZpZykgPT4ge1xuICBpZiAoY29uZmlnPy5jbGFzcz8uZGVmYXVsdFJlbmRlcmVyID09PSBcImRhZ3JlLXdyYXBwZXJcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gL15cXHMqY2xhc3NEaWFncmFtLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjEzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9jbGFzc0RpYWdyYW0tNEJIWUlLNEkubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxMywgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjExID0ge1xuICBpZDogaWQxMyxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMTMsXG4gIGxvYWRlcjogbG9hZGVyMTNcbn07XG52YXIgY2xhc3NEZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luMTE7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc0RldGVjdG9yLVYyLnRzXG52YXIgaWQxNCA9IFwiY2xhc3NEaWFncmFtXCI7XG52YXIgZGV0ZWN0b3IxNCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCwgY29uZmlnKSA9PiB7XG4gIGlmICgvXlxccypjbGFzc0RpYWdyYW0vLnRlc3QodHh0KSAmJiBjb25maWc/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIC9eXFxzKmNsYXNzRGlhZ3JhbS12Mi8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIxNCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2xhc3NEaWFncmFtLXYyLVNQWTZWMzJPLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMTQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4xMiA9IHtcbiAgaWQ6IGlkMTQsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjE0LFxuICBsb2FkZXI6IGxvYWRlcjE0XG59O1xudmFyIGNsYXNzRGV0ZWN0b3JfVjJfZGVmYXVsdCA9IHBsdWdpbjEyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEZXRlY3Rvci50c1xudmFyIGlkMTUgPSBcInN0YXRlXCI7XG52YXIgZGV0ZWN0b3IxNSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCwgY29uZmlnKSA9PiB7XG4gIGlmIChjb25maWc/LnN0YXRlPy5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAvXlxccypzdGF0ZURpYWdyYW0vLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3N0YXRlRGlhZ3JhbS1XRzc2RVdQSy5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDE1LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luMTMgPSB7XG4gIGlkOiBpZDE1LFxuICBkZXRlY3RvcjogZGV0ZWN0b3IxNSxcbiAgbG9hZGVyOiBsb2FkZXIxNVxufTtcbnZhciBzdGF0ZURldGVjdG9yX2RlZmF1bHQgPSBwbHVnaW4xMztcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3N0YXRlRGV0ZWN0b3ItVjIudHNcbnZhciBpZDE2ID0gXCJzdGF0ZURpYWdyYW1cIjtcbnZhciBkZXRlY3RvcjE2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBjb25maWcpID0+IHtcbiAgaWYgKC9eXFxzKnN0YXRlRGlhZ3JhbS12Mi8udGVzdCh0eHQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKC9eXFxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0eHQpICYmIGNvbmZpZz8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlciA9PT0gXCJkYWdyZS13cmFwcGVyXCIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjE2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9zdGF0ZURpYWdyYW0tdjItS1I0WFRRTFcubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxNiwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjE0ID0ge1xuICBpZDogaWQxNixcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMTYsXG4gIGxvYWRlcjogbG9hZGVyMTZcbn07XG52YXIgc3RhdGVEZXRlY3Rvcl9WMl9kZWZhdWx0ID0gcGx1Z2luMTQ7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvam91cm5leURldGVjdG9yLnRzXG52YXIgaWQxNyA9IFwiam91cm5leVwiO1xudmFyIGRldGVjdG9yMTcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKmpvdXJuZXkvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2pvdXJuZXlEaWFncmFtLUc1TEM3VzJLLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMTcsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4xNSA9IHtcbiAgaWQ6IGlkMTcsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjE3LFxuICBsb2FkZXI6IGxvYWRlcjE3XG59O1xudmFyIGpvdXJuZXlEZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luMTU7XG5cbi8vIHNyYy9kaWFncmFtcy9lcnJvci9lcnJvclJlbmRlcmVyLnRzXG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF90ZXh0LCBpZDI1LCB2ZXJzaW9uMikgPT4ge1xuICBsb2cuZGVidWcoXCJyZW5kZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3JcXG5cIik7XG4gIGNvbnN0IHN2ZyA9IHNlbGVjdFN2Z0VsZW1lbnQoaWQyNSk7XG4gIGNvbnN0IGcgPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDI0MTIgNTEyXCIpO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgMTAwLCA1MTIsIHRydWUpO1xuICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2elwiXG4gICk7XG4gIGcuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlcnJvci1pY29uXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJtNDU5LjAyLDE0OC45OGMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNiwxNmMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi4wMDEtMTZ6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIm00OTYsOTYuNTg2aC0zMmMtOC44NDQsMC0xNiw3LjE2NC0xNiwxNiAwLDguODM2IDcuMTU2LDE2IDE2LDE2aDMyYzguODQ0LDAgMTYtNy4xNjQgMTYtMTYgMC04LjgzNi03LjE1Ni0xNi0xNi0xNnpcIlxuICApO1xuICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLXRleHRcIikuYXR0cihcInhcIiwgMTQ0MCkuYXR0cihcInlcIiwgMjUwKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiMTUwcHhcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KFwiU3ludGF4IGVycm9yIGluIHRleHRcIik7XG4gIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlcnJvci10ZXh0XCIpLmF0dHIoXCJ4XCIsIDEyNTApLmF0dHIoXCJ5XCIsIDQwMCkuYXR0cihcImZvbnQtc2l6ZVwiLCBcIjEwMHB4XCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChgbWVybWFpZCB2ZXJzaW9uICR7dmVyc2lvbjJ9YCk7XG59LCBcImRyYXdcIik7XG52YXIgcmVuZGVyZXIgPSB7IGRyYXcgfTtcbnZhciBlcnJvclJlbmRlcmVyX2RlZmF1bHQgPSByZW5kZXJlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2Vycm9yL2Vycm9yRGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIGRiOiB7fSxcbiAgcmVuZGVyZXIsXG4gIHBhcnNlcjoge1xuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH1cbn07XG52YXIgZXJyb3JEaWFncmFtX2RlZmF1bHQgPSBkaWFncmFtO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZmxvd2NoYXJ0L2Vsay9kZXRlY3Rvci50c1xudmFyIGlkMTggPSBcImZsb3djaGFydC1lbGtcIjtcbnZhciBkZXRlY3RvcjE4ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBjb25maWcgPSB7fSkgPT4ge1xuICBpZiAoXG4gICAgLy8gSWYgZGlhZ3JhbSBleHBsaWNpdGx5IHN0YXRlcyBmbG93Y2hhcnQtZWxrXG4gICAgL15cXHMqZmxvd2NoYXJ0LWVsay8udGVzdCh0eHQpIHx8IC8vIElmIGEgZmxvd2NoYXJ0L2dyYXBoIGRpYWdyYW0gaGFzIHRoZWlyIGRlZmF1bHQgcmVuZGVyZXIgc2V0IHRvIGVsa1xuICAgIC9eXFxzKmZsb3djaGFydHxncmFwaC8udGVzdCh0eHQpICYmIGNvbmZpZz8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZWxrXCJcbiAgKSB7XG4gICAgY29uZmlnLmxheW91dCA9IFwiZWxrXCI7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIxOCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvZmxvd0RpYWdyYW0tNDROT0FNS1UubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxOCwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjE2ID0ge1xuICBpZDogaWQxOCxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMTgsXG4gIGxvYWRlcjogbG9hZGVyMThcbn07XG52YXIgZGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjE2O1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvZGV0ZWN0b3IudHNcbnZhciBpZDE5ID0gXCJ0aW1lbGluZVwiO1xudmFyIGRldGVjdG9yMTkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKnRpbWVsaW5lLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjE5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS90aW1lbGluZS1kZWZpbml0aW9uLUtZUUFJWlVYLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMTksIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4xNyA9IHtcbiAgaWQ6IGlkMTksXG4gIGRldGVjdG9yOiBkZXRlY3RvcjE5LFxuICBsb2FkZXI6IGxvYWRlcjE5XG59O1xudmFyIGRldGVjdG9yX2RlZmF1bHQyID0gcGx1Z2luMTc7XG5cbi8vIHNyYy9kaWFncmFtcy9taW5kbWFwL2RldGVjdG9yLnRzXG52YXIgaWQyMCA9IFwibWluZG1hcFwiO1xudmFyIGRldGVjdG9yMjAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKm1pbmRtYXAvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMjAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL21pbmRtYXAtZGVmaW5pdGlvbi0yNkZXRUU3SC5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDIwLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luMTggPSB7XG4gIGlkOiBpZDIwLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IyMCxcbiAgbG9hZGVyOiBsb2FkZXIyMFxufTtcbnZhciBkZXRlY3Rvcl9kZWZhdWx0MyA9IHBsdWdpbjE4O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2Fua2V5L3NhbmtleURldGVjdG9yLnRzXG52YXIgaWQyMSA9IFwic2Fua2V5XCI7XG52YXIgZGV0ZWN0b3IyMSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqc2Fua2V5LWJldGEvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMjEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3NhbmtleURpYWdyYW0tS01NUURMNUsubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQyMSwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjE5ID0ge1xuICBpZDogaWQyMSxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMjEsXG4gIGxvYWRlcjogbG9hZGVyMjFcbn07XG52YXIgc2Fua2V5RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjE5O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGFja2V0L2RldGVjdG9yLnRzXG52YXIgaWQyMiA9IFwicGFja2V0XCI7XG52YXIgZGV0ZWN0b3IyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqcGFja2V0LWJldGEvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2RpYWdyYW0tUVM1R1ZMVVgubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQyMiwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBhY2tldCA9IHtcbiAgaWQ6IGlkMjIsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjIyLFxuICBsb2FkZXI6IGxvYWRlcjIyXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svYmxvY2tEZXRlY3Rvci50c1xudmFyIGlkMjMgPSBcImJsb2NrXCI7XG52YXIgZGV0ZWN0b3IyMyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqYmxvY2stYmV0YS8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIyMyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvYmxvY2tEaWFncmFtLVNMRVlOVU5OLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMjMsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4yMCA9IHtcbiAgaWQ6IGlkMjMsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjIzLFxuICBsb2FkZXI6IGxvYWRlcjIzXG59O1xudmFyIGJsb2NrRGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjIwO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZURldGVjdG9yLnRzXG52YXIgaWQyNCA9IFwiYXJjaGl0ZWN0dXJlXCI7XG52YXIgZGV0ZWN0b3IyNCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqYXJjaGl0ZWN0dXJlLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjI0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9hcmNoaXRlY3R1cmVEaWFncmFtLVdRR0xLQ1NDLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMjQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBhcmNoaXRlY3R1cmUgPSB7XG4gIGlkOiBpZDI0LFxuICBkZXRlY3RvcjogZGV0ZWN0b3IyNCxcbiAgbG9hZGVyOiBsb2FkZXIyNFxufTtcbnZhciBhcmNoaXRlY3R1cmVEZXRlY3Rvcl9kZWZhdWx0ID0gYXJjaGl0ZWN0dXJlO1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZGlhZ3JhbS1vcmNoZXN0cmF0aW9uLnRzXG52YXIgaGFzTG9hZGVkRGlhZ3JhbXMgPSBmYWxzZTtcbnZhciBhZGREaWFncmFtcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBpZiAoaGFzTG9hZGVkRGlhZ3JhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFzTG9hZGVkRGlhZ3JhbXMgPSB0cnVlO1xuICByZWdpc3RlckRpYWdyYW0oXCJlcnJvclwiLCBlcnJvckRpYWdyYW1fZGVmYXVsdCwgKHRleHQpID0+IHtcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gXCJlcnJvclwiO1xuICB9KTtcbiAgcmVnaXN0ZXJEaWFncmFtKFxuICAgIFwiLS0tXCIsXG4gICAgLy8gLS0tIGRpYWdyYW0gdHlwZSBtYXkgYXBwZWFyIGlmIFlBTUwgZnJvbnQtbWF0dGVyIGlzIG5vdCBwYXJzZWQgY29ycmVjdGx5XG4gICAge1xuICAgICAgZGI6IHtcbiAgICAgICAgY2xlYXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICAgICAgICB9LCBcImNsZWFyXCIpXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7fSxcbiAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB1c2VkXG4gICAgICByZW5kZXJlcjoge1xuICAgICAgICBkcmF3OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgICAgfSwgXCJkcmF3XCIpXG4gICAgICB9LFxuICAgICAgcGFyc2VyOiB7XG4gICAgICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkRpYWdyYW1zIGJlZ2lubmluZyB3aXRoIC0tLSBhcmUgbm90IHZhbGlkLiBJZiB5b3Ugd2VyZSB0cnlpbmcgdG8gdXNlIGEgWUFNTCBmcm9udC1tYXR0ZXIsIHBsZWFzZSBlbnN1cmUgdGhhdCB5b3UndmUgY29ycmVjdGx5IG9wZW5lZCBhbmQgY2xvc2VkIHRoZSBZQU1MIGZyb250LW1hdHRlciB3aXRoIHVuLWluZGVudGVkIGAtLS1gIGJsb2Nrc1wiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgXCJwYXJzZVwiKVxuICAgICAgfSxcbiAgICAgIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbnVsbCwgXCJpbml0XCIpXG4gICAgICAvLyBubyBvcFxuICAgIH0sXG4gICAgKHRleHQpID0+IHtcbiAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aChcIi0tLVwiKTtcbiAgICB9XG4gICk7XG4gIHJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zKFxuICAgIGM0RGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBjbGFzc0RldGVjdG9yX1YyX2RlZmF1bHQsXG4gICAgY2xhc3NEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGVyRGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBnYW50dERldGVjdG9yX2RlZmF1bHQsXG4gICAgaW5mbyxcbiAgICBwaWUsXG4gICAgcmVxdWlyZW1lbnREZXRlY3Rvcl9kZWZhdWx0LFxuICAgIHNlcXVlbmNlRGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBkZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGZsb3dEZXRlY3Rvcl92Ml9kZWZhdWx0LFxuICAgIGZsb3dEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGRldGVjdG9yX2RlZmF1bHQzLFxuICAgIGRldGVjdG9yX2RlZmF1bHQyLFxuICAgIGdpdEdyYXBoRGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBzdGF0ZURldGVjdG9yX1YyX2RlZmF1bHQsXG4gICAgc3RhdGVEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGpvdXJuZXlEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIHF1YWRyYW50RGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBzYW5rZXlEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIHBhY2tldCxcbiAgICB4eWNoYXJ0RGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBibG9ja0RldGVjdG9yX2RlZmF1bHQsXG4gICAgYXJjaGl0ZWN0dXJlRGV0ZWN0b3JfZGVmYXVsdFxuICApO1xufSwgXCJhZGREaWFncmFtc1wiKTtcblxuLy8gc3JjL2RpYWdyYW0tYXBpL2xvYWREaWFncmFtLnRzXG52YXIgbG9hZFJlZ2lzdGVyZWREaWFncmFtcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBsb2cuZGVidWcoYExvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtc2ApO1xuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgIE9iamVjdC5lbnRyaWVzKGRldGVjdG9ycykubWFwKGFzeW5jIChba2V5LCB7IGRldGVjdG9yOiBkZXRlY3RvcjI1LCBsb2FkZXI6IGxvYWRlcjI2IH1dKSA9PiB7XG4gICAgICBpZiAobG9hZGVyMjYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBnZXREaWFncmFtKGtleSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yLCBpZDogaWQyNSB9ID0gYXdhaXQgbG9hZGVyMjYoKTtcbiAgICAgICAgICAgIHJlZ2lzdGVyRGlhZ3JhbShpZDI1LCBkaWFncmFtMiwgZGV0ZWN0b3IyNSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtrZXl9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKTtcbiAgICAgICAgICAgIGRlbGV0ZSBkZXRlY3RvcnNba2V5XTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICApO1xuICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpO1xuICBpZiAoZmFpbGVkLmxlbmd0aCA+IDApIHtcbiAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7ZmFpbGVkLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtcbiAgICBmb3IgKGNvbnN0IHJlcyBvZiBmYWlsZWQpIHtcbiAgICAgIGxvZy5lcnJvcihyZXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7ZmFpbGVkLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtcbiAgfVxufSwgXCJsb2FkUmVnaXN0ZXJlZERpYWdyYW1zXCIpO1xuXG4vLyBzcmMvbWVybWFpZEFQSS50c1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBjb21waWxlLCBzZXJpYWxpemUsIHN0cmluZ2lmeSB9IGZyb20gXCJzdHlsaXNcIjtcbmltcG9ydCBET01QdXJpZnkgZnJvbSBcImRvbXB1cmlmeVwiO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5cbi8vIHNyYy9hY2Nlc3NpYmlsaXR5LnRzXG52YXIgU1ZHX1JPTEUgPSBcImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50XCI7XG5mdW5jdGlvbiBzZXRBMTF5RGlhZ3JhbUluZm8oc3ZnLCBkaWFncmFtVHlwZSkge1xuICBzdmcuYXR0cihcInJvbGVcIiwgU1ZHX1JPTEUpO1xuICBpZiAoZGlhZ3JhbVR5cGUgIT09IFwiXCIpIHtcbiAgICBzdmcuYXR0cihcImFyaWEtcm9sZWRlc2NyaXB0aW9uXCIsIGRpYWdyYW1UeXBlKTtcbiAgfVxufVxuX19uYW1lKHNldEExMXlEaWFncmFtSW5mbywgXCJzZXRBMTF5RGlhZ3JhbUluZm9cIik7XG5mdW5jdGlvbiBhZGRTVkdhMTF5VGl0bGVEZXNjcmlwdGlvbihzdmcsIGExMXlUaXRsZSwgYTExeURlc2MsIGJhc2VJZCkge1xuICBpZiAoc3ZnLmluc2VydCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhMTF5RGVzYykge1xuICAgIGNvbnN0IGRlc2NJZCA9IGBjaGFydC1kZXNjLSR7YmFzZUlkfWA7XG4gICAgc3ZnLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NJZCk7XG4gICAgc3ZnLmluc2VydChcImRlc2NcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImlkXCIsIGRlc2NJZCkudGV4dChhMTF5RGVzYyk7XG4gIH1cbiAgaWYgKGExMXlUaXRsZSkge1xuICAgIGNvbnN0IHRpdGxlSWQgPSBgY2hhcnQtdGl0bGUtJHtiYXNlSWR9YDtcbiAgICBzdmcuYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLCB0aXRsZUlkKTtcbiAgICBzdmcuaW5zZXJ0KFwidGl0bGVcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImlkXCIsIHRpdGxlSWQpLnRleHQoYTExeVRpdGxlKTtcbiAgfVxufVxuX19uYW1lKGFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uLCBcImFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uXCIpO1xuXG4vLyBzcmMvRGlhZ3JhbS50c1xudmFyIERpYWdyYW0gPSBjbGFzcyBfRGlhZ3JhbSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUyLCB0ZXh0LCBkYiwgcGFyc2VyLCByZW5kZXJlcjIpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlMjtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuZGIgPSBkYjtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXIyO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiRGlhZ3JhbVwiKTtcbiAgfVxuICBzdGF0aWMgYXN5bmMgZnJvbVRleHQodGV4dCwgbWV0YWRhdGEgPSB7fSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHR5cGUyID0gZGV0ZWN0VHlwZSh0ZXh0LCBjb25maWcpO1xuICAgIHRleHQgPSBlbmNvZGVFbnRpdGllcyh0ZXh0KSArIFwiXFxuXCI7XG4gICAgdHJ5IHtcbiAgICAgIGdldERpYWdyYW0odHlwZTIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgbG9hZGVyMjYgPSBnZXREaWFncmFtTG9hZGVyKHR5cGUyKTtcbiAgICAgIGlmICghbG9hZGVyMjYpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVua25vd25EaWFncmFtRXJyb3IoYERpYWdyYW0gJHt0eXBlMn0gbm90IGZvdW5kLmApO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBpZDogaWQyNSwgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGxvYWRlcjI2KCk7XG4gICAgICByZWdpc3RlckRpYWdyYW0oaWQyNSwgZGlhZ3JhbTIpO1xuICAgIH1cbiAgICBjb25zdCB7IGRiLCBwYXJzZXIsIHJlbmRlcmVyOiByZW5kZXJlcjIsIGluaXQ6IGluaXQyIH0gPSBnZXREaWFncmFtKHR5cGUyKTtcbiAgICBpZiAocGFyc2VyLnBhcnNlcikge1xuICAgICAgcGFyc2VyLnBhcnNlci55eSA9IGRiO1xuICAgIH1cbiAgICBkYi5jbGVhcj8uKCk7XG4gICAgaW5pdDI/Lihjb25maWcpO1xuICAgIGlmIChtZXRhZGF0YS50aXRsZSkge1xuICAgICAgZGIuc2V0RGlhZ3JhbVRpdGxlPy4obWV0YWRhdGEudGl0bGUpO1xuICAgIH1cbiAgICBhd2FpdCBwYXJzZXIucGFyc2UodGV4dCk7XG4gICAgcmV0dXJuIG5ldyBfRGlhZ3JhbSh0eXBlMiwgdGV4dCwgZGIsIHBhcnNlciwgcmVuZGVyZXIyKTtcbiAgfVxuICBhc3luYyByZW5kZXIoaWQyNSwgdmVyc2lvbjIpIHtcbiAgICBhd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LCBpZDI1LCB2ZXJzaW9uMiwgdGhpcyk7XG4gIH1cbiAgZ2V0UGFyc2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlcjtcbiAgfVxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbn07XG5cbi8vIHNyYy9pbnRlcmFjdGlvbkRiLnRzXG52YXIgaW50ZXJhY3Rpb25GdW5jdGlvbnMgPSBbXTtcbnZhciBhdHRhY2hGdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgaW50ZXJhY3Rpb25GdW5jdGlvbnMuZm9yRWFjaCgoZikgPT4ge1xuICAgIGYoKTtcbiAgfSk7XG4gIGludGVyYWN0aW9uRnVuY3Rpb25zID0gW107XG59LCBcImF0dGFjaEZ1bmN0aW9uc1wiKTtcblxuLy8gc3JjL2RpYWdyYW0tYXBpL2NvbW1lbnRzLnRzXG52YXIgY2xlYW51cENvbW1lbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCkgPT4ge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9eXFxzKiUlKD8heylbXlxcbl0rXFxuPy9nbSwgXCJcIikudHJpbVN0YXJ0KCk7XG59LCBcImNsZWFudXBDb21tZW50c1wiKTtcblxuLy8gLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxANC4xLjAvbm9kZV9tb2R1bGVzL2pzLXlhbWwvZGlzdC9qcy15YW1sLm1qc1xuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8IHN1YmplY3QgPT09IG51bGw7XG59XG5fX25hbWUoaXNOb3RoaW5nLCBcImlzTm90aGluZ1wiKTtcbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSBcIm9iamVjdFwiICYmIHN1YmplY3QgIT09IG51bGw7XG59XG5fX25hbWUoaXNPYmplY3QsIFwiaXNPYmplY3RcIik7XG5mdW5jdGlvbiB0b0FycmF5KHNlcXVlbmNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlO1xuICBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSByZXR1cm4gW107XG4gIHJldHVybiBbc2VxdWVuY2VdO1xufVxuX19uYW1lKHRvQXJyYXksIFwidG9BcnJheVwiKTtcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIgaW5kZXgsIGxlbmd0aCwga2V5LCBzb3VyY2VLZXlzO1xuICBpZiAoc291cmNlKSB7XG4gICAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuX19uYW1lKGV4dGVuZCwgXCJleHRlbmRcIik7XG5mdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBjb3VudCkge1xuICB2YXIgcmVzdWx0ID0gXCJcIiwgY3ljbGU7XG4gIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSArPSAxKSB7XG4gICAgcmVzdWx0ICs9IHN0cmluZztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKHJlcGVhdCwgXCJyZXBlYXRcIik7XG5mdW5jdGlvbiBpc05lZ2F0aXZlWmVybyhudW1iZXIpIHtcbiAgcmV0dXJuIG51bWJlciA9PT0gMCAmJiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IDEgLyBudW1iZXI7XG59XG5fX25hbWUoaXNOZWdhdGl2ZVplcm8sIFwiaXNOZWdhdGl2ZVplcm9cIik7XG52YXIgaXNOb3RoaW5nXzEgPSBpc05vdGhpbmc7XG52YXIgaXNPYmplY3RfMSA9IGlzT2JqZWN0O1xudmFyIHRvQXJyYXlfMSA9IHRvQXJyYXk7XG52YXIgcmVwZWF0XzEgPSByZXBlYXQ7XG52YXIgaXNOZWdhdGl2ZVplcm9fMSA9IGlzTmVnYXRpdmVaZXJvO1xudmFyIGV4dGVuZF8xID0gZXh0ZW5kO1xudmFyIGNvbW1vbiA9IHtcbiAgaXNOb3RoaW5nOiBpc05vdGhpbmdfMSxcbiAgaXNPYmplY3Q6IGlzT2JqZWN0XzEsXG4gIHRvQXJyYXk6IHRvQXJyYXlfMSxcbiAgcmVwZWF0OiByZXBlYXRfMSxcbiAgaXNOZWdhdGl2ZVplcm86IGlzTmVnYXRpdmVaZXJvXzEsXG4gIGV4dGVuZDogZXh0ZW5kXzFcbn07XG5mdW5jdGlvbiBmb3JtYXRFcnJvcihleGNlcHRpb24yLCBjb21wYWN0KSB7XG4gIHZhciB3aGVyZSA9IFwiXCIsIG1lc3NhZ2UgPSBleGNlcHRpb24yLnJlYXNvbiB8fCBcIih1bmtub3duIHJlYXNvbilcIjtcbiAgaWYgKCFleGNlcHRpb24yLm1hcmspIHJldHVybiBtZXNzYWdlO1xuICBpZiAoZXhjZXB0aW9uMi5tYXJrLm5hbWUpIHtcbiAgICB3aGVyZSArPSAnaW4gXCInICsgZXhjZXB0aW9uMi5tYXJrLm5hbWUgKyAnXCIgJztcbiAgfVxuICB3aGVyZSArPSBcIihcIiArIChleGNlcHRpb24yLm1hcmsubGluZSArIDEpICsgXCI6XCIgKyAoZXhjZXB0aW9uMi5tYXJrLmNvbHVtbiArIDEpICsgXCIpXCI7XG4gIGlmICghY29tcGFjdCAmJiBleGNlcHRpb24yLm1hcmsuc25pcHBldCkge1xuICAgIHdoZXJlICs9IFwiXFxuXFxuXCIgKyBleGNlcHRpb24yLm1hcmsuc25pcHBldDtcbiAgfVxuICByZXR1cm4gbWVzc2FnZSArIFwiIFwiICsgd2hlcmU7XG59XG5fX25hbWUoZm9ybWF0RXJyb3IsIFwiZm9ybWF0RXJyb3JcIik7XG5mdW5jdGlvbiBZQU1MRXhjZXB0aW9uJDEocmVhc29uLCBtYXJrKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubmFtZSA9IFwiWUFNTEV4Y2VwdGlvblwiO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgfHwgXCJcIjtcbiAgfVxufVxuX19uYW1lKFlBTUxFeGNlcHRpb24kMSwgXCJZQU1MRXhjZXB0aW9uJDFcIik7XG5ZQU1MRXhjZXB0aW9uJDEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuWUFNTEV4Y2VwdGlvbiQxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFlBTUxFeGNlcHRpb24kMTtcbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUudG9TdHJpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRvU3RyaW5nKGNvbXBhY3QpIHtcbiAgcmV0dXJuIHRoaXMubmFtZSArIFwiOiBcIiArIGZvcm1hdEVycm9yKHRoaXMsIGNvbXBhY3QpO1xufSwgXCJ0b1N0cmluZ1wiKTtcbnZhciBleGNlcHRpb24gPSBZQU1MRXhjZXB0aW9uJDE7XG5mdW5jdGlvbiBnZXRMaW5lKGJ1ZmZlciwgbGluZVN0YXJ0LCBsaW5lRW5kLCBwb3NpdGlvbiwgbWF4TGluZUxlbmd0aCkge1xuICB2YXIgaGVhZCA9IFwiXCI7XG4gIHZhciB0YWlsID0gXCJcIjtcbiAgdmFyIG1heEhhbGZMZW5ndGggPSBNYXRoLmZsb29yKG1heExpbmVMZW5ndGggLyAyKSAtIDE7XG4gIGlmIChwb3NpdGlvbiAtIGxpbmVTdGFydCA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICBoZWFkID0gXCIgLi4uIFwiO1xuICAgIGxpbmVTdGFydCA9IHBvc2l0aW9uIC0gbWF4SGFsZkxlbmd0aCArIGhlYWQubGVuZ3RoO1xuICB9XG4gIGlmIChsaW5lRW5kIC0gcG9zaXRpb24gPiBtYXhIYWxmTGVuZ3RoKSB7XG4gICAgdGFpbCA9IFwiIC4uLlwiO1xuICAgIGxpbmVFbmQgPSBwb3NpdGlvbiArIG1heEhhbGZMZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0cjogaGVhZCArIGJ1ZmZlci5zbGljZShsaW5lU3RhcnQsIGxpbmVFbmQpLnJlcGxhY2UoL1xcdC9nLCBcIlxcdTIxOTJcIikgKyB0YWlsLFxuICAgIHBvczogcG9zaXRpb24gLSBsaW5lU3RhcnQgKyBoZWFkLmxlbmd0aFxuICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uXG4gIH07XG59XG5fX25hbWUoZ2V0TGluZSwgXCJnZXRMaW5lXCIpO1xuZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBtYXgpIHtcbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoXCIgXCIsIG1heCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufVxuX19uYW1lKHBhZFN0YXJ0LCBcInBhZFN0YXJ0XCIpO1xuZnVuY3Rpb24gbWFrZVNuaXBwZXQobWFyaywgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zIHx8IG51bGwpO1xuICBpZiAoIW1hcmsuYnVmZmVyKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFvcHRpb25zLm1heExlbmd0aCkgb3B0aW9ucy5tYXhMZW5ndGggPSA3OTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluZGVudCAhPT0gXCJudW1iZXJcIikgb3B0aW9ucy5pbmRlbnQgPSAxO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNCZWZvcmUgIT09IFwibnVtYmVyXCIpIG9wdGlvbnMubGluZXNCZWZvcmUgPSAzO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNBZnRlciAhPT0gXCJudW1iZXJcIikgb3B0aW9ucy5saW5lc0FmdGVyID0gMjtcbiAgdmFyIHJlID0gL1xccj9cXG58XFxyfFxcMC9nO1xuICB2YXIgbGluZVN0YXJ0cyA9IFswXTtcbiAgdmFyIGxpbmVFbmRzID0gW107XG4gIHZhciBtYXRjaDtcbiAgdmFyIGZvdW5kTGluZU5vID0gLTE7XG4gIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMobWFyay5idWZmZXIpKSB7XG4gICAgbGluZUVuZHMucHVzaChtYXRjaC5pbmRleCk7XG4gICAgbGluZVN0YXJ0cy5wdXNoKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICBpZiAobWFyay5wb3NpdGlvbiA8PSBtYXRjaC5pbmRleCAmJiBmb3VuZExpbmVObyA8IDApIHtcbiAgICAgIGZvdW5kTGluZU5vID0gbGluZVN0YXJ0cy5sZW5ndGggLSAyO1xuICAgIH1cbiAgfVxuICBpZiAoZm91bmRMaW5lTm8gPCAwKSBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTtcbiAgdmFyIHJlc3VsdCA9IFwiXCIsIGksIGxpbmU7XG4gIHZhciBsaW5lTm9MZW5ndGggPSBNYXRoLm1pbihtYXJrLmxpbmUgKyBvcHRpb25zLmxpbmVzQWZ0ZXIsIGxpbmVFbmRzLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBtYXhMaW5lTGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggLSAob3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzKTtcbiAgZm9yIChpID0gMTsgaSA8PSBvcHRpb25zLmxpbmVzQmVmb3JlOyBpKyspIHtcbiAgICBpZiAoZm91bmRMaW5lTm8gLSBpIDwgMCkgYnJlYWs7XG4gICAgbGluZSA9IGdldExpbmUoXG4gICAgICBtYXJrLmJ1ZmZlcixcbiAgICAgIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gLSBpXSxcbiAgICAgIGxpbmVFbmRzW2ZvdW5kTGluZU5vIC0gaV0sXG4gICAgICBtYXJrLnBvc2l0aW9uIC0gKGxpbmVTdGFydHNbZm91bmRMaW5lTm9dIC0gbGluZVN0YXJ0c1tmb3VuZExpbmVObyAtIGldKSxcbiAgICAgIG1heExpbmVMZW5ndGhcbiAgICApO1xuICAgIHJlc3VsdCA9IGNvbW1vbi5yZXBlYXQoXCIgXCIsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgLSBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArIFwiIHwgXCIgKyBsaW5lLnN0ciArIFwiXFxuXCIgKyByZXN1bHQ7XG4gIH1cbiAgbGluZSA9IGdldExpbmUobWFyay5idWZmZXIsIGxpbmVTdGFydHNbZm91bmRMaW5lTm9dLCBsaW5lRW5kc1tmb3VuZExpbmVOb10sIG1hcmsucG9zaXRpb24sIG1heExpbmVMZW5ndGgpO1xuICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIiBcIiwgb3B0aW9ucy5pbmRlbnQpICsgcGFkU3RhcnQoKG1hcmsubGluZSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgKyBcIiB8IFwiICsgbGluZS5zdHIgKyBcIlxcblwiO1xuICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIi1cIiwgb3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzICsgbGluZS5wb3MpICsgXCJeXFxuXCI7XG4gIGZvciAoaSA9IDE7IGkgPD0gb3B0aW9ucy5saW5lc0FmdGVyOyBpKyspIHtcbiAgICBpZiAoZm91bmRMaW5lTm8gKyBpID49IGxpbmVFbmRzLmxlbmd0aCkgYnJlYWs7XG4gICAgbGluZSA9IGdldExpbmUoXG4gICAgICBtYXJrLmJ1ZmZlcixcbiAgICAgIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gKyBpXSxcbiAgICAgIGxpbmVFbmRzW2ZvdW5kTGluZU5vICsgaV0sXG4gICAgICBtYXJrLnBvc2l0aW9uIC0gKGxpbmVTdGFydHNbZm91bmRMaW5lTm9dIC0gbGluZVN0YXJ0c1tmb3VuZExpbmVObyArIGldKSxcbiAgICAgIG1heExpbmVMZW5ndGhcbiAgICApO1xuICAgIHJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiIFwiLCBvcHRpb25zLmluZGVudCkgKyBwYWRTdGFydCgobWFyay5saW5lICsgaSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgKyBcIiB8IFwiICsgbGluZS5zdHIgKyBcIlxcblwiO1xuICB9XG4gIHJldHVybiByZXN1bHQucmVwbGFjZSgvXFxuJC8sIFwiXCIpO1xufVxuX19uYW1lKG1ha2VTbmlwcGV0LCBcIm1ha2VTbmlwcGV0XCIpO1xudmFyIHNuaXBwZXQgPSBtYWtlU25pcHBldDtcbnZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbXG4gIFwia2luZFwiLFxuICBcIm11bHRpXCIsXG4gIFwicmVzb2x2ZVwiLFxuICBcImNvbnN0cnVjdFwiLFxuICBcImluc3RhbmNlT2ZcIixcbiAgXCJwcmVkaWNhdGVcIixcbiAgXCJyZXByZXNlbnRcIixcbiAgXCJyZXByZXNlbnROYW1lXCIsXG4gIFwiZGVmYXVsdFN0eWxlXCIsXG4gIFwic3R5bGVBbGlhc2VzXCJcbl07XG52YXIgWUFNTF9OT0RFX0tJTkRTID0gW1xuICBcInNjYWxhclwiLFxuICBcInNlcXVlbmNlXCIsXG4gIFwibWFwcGluZ1wiXG5dO1xuZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXAyKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1hcDIgIT09IG51bGwpIHtcbiAgICBPYmplY3Qua2V5cyhtYXAyKS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICBtYXAyW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7XG4gICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShjb21waWxlU3R5bGVBbGlhc2VzLCBcImNvbXBpbGVTdHlsZUFsaWFzZXNcIik7XG5mdW5jdGlvbiBUeXBlJDEodGFnLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdVbmtub3duIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gICAgfVxuICB9KTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2luZCA9IG9wdGlvbnNbXCJraW5kXCJdIHx8IG51bGw7XG4gIHRoaXMucmVzb2x2ZSA9IG9wdGlvbnNbXCJyZXNvbHZlXCJdIHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnNbXCJjb25zdHJ1Y3RcIl0gfHwgZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuICB0aGlzLmluc3RhbmNlT2YgPSBvcHRpb25zW1wiaW5zdGFuY2VPZlwiXSB8fCBudWxsO1xuICB0aGlzLnByZWRpY2F0ZSA9IG9wdGlvbnNbXCJwcmVkaWNhdGVcIl0gfHwgbnVsbDtcbiAgdGhpcy5yZXByZXNlbnQgPSBvcHRpb25zW1wicmVwcmVzZW50XCJdIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50TmFtZSA9IG9wdGlvbnNbXCJyZXByZXNlbnROYW1lXCJdIHx8IG51bGw7XG4gIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9uc1tcImRlZmF1bHRTdHlsZVwiXSB8fCBudWxsO1xuICB0aGlzLm11bHRpID0gb3B0aW9uc1tcIm11bHRpXCJdIHx8IGZhbHNlO1xuICB0aGlzLnN0eWxlQWxpYXNlcyA9IGNvbXBpbGVTdHlsZUFsaWFzZXMob3B0aW9uc1tcInN0eWxlQWxpYXNlc1wiXSB8fCBudWxsKTtcbiAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVW5rbm93biBraW5kIFwiJyArIHRoaXMua2luZCArICdcIiBpcyBzcGVjaWZpZWQgZm9yIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gIH1cbn1cbl9fbmFtZShUeXBlJDEsIFwiVHlwZSQxXCIpO1xudmFyIHR5cGUgPSBUeXBlJDE7XG5mdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEyLCBuYW1lKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgc2NoZW1hMltuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRUeXBlKSB7XG4gICAgdmFyIG5ld0luZGV4ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbihwcmV2aW91c1R5cGUsIHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChwcmV2aW91c1R5cGUudGFnID09PSBjdXJyZW50VHlwZS50YWcgJiYgcHJldmlvdXNUeXBlLmtpbmQgPT09IGN1cnJlbnRUeXBlLmtpbmQgJiYgcHJldmlvdXNUeXBlLm11bHRpID09PSBjdXJyZW50VHlwZS5tdWx0aSkge1xuICAgICAgICBuZXdJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0W25ld0luZGV4XSA9IGN1cnJlbnRUeXBlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShjb21waWxlTGlzdCwgXCJjb21waWxlTGlzdFwiKTtcbmZ1bmN0aW9uIGNvbXBpbGVNYXAoKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgc2NhbGFyOiB7fSxcbiAgICBzZXF1ZW5jZToge30sXG4gICAgbWFwcGluZzoge30sXG4gICAgZmFsbGJhY2s6IHt9LFxuICAgIG11bHRpOiB7XG4gICAgICBzY2FsYXI6IFtdLFxuICAgICAgc2VxdWVuY2U6IFtdLFxuICAgICAgbWFwcGluZzogW10sXG4gICAgICBmYWxsYmFjazogW11cbiAgICB9XG4gIH0sIGluZGV4LCBsZW5ndGg7XG4gIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGUyKSB7XG4gICAgaWYgKHR5cGUyLm11bHRpKSB7XG4gICAgICByZXN1bHQubXVsdGlbdHlwZTIua2luZF0ucHVzaCh0eXBlMik7XG4gICAgICByZXN1bHQubXVsdGlbXCJmYWxsYmFja1wiXS5wdXNoKHR5cGUyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3R5cGUyLmtpbmRdW3R5cGUyLnRhZ10gPSByZXN1bHRbXCJmYWxsYmFja1wiXVt0eXBlMi50YWddID0gdHlwZTI7XG4gICAgfVxuICB9XG4gIF9fbmFtZShjb2xsZWN0VHlwZSwgXCJjb2xsZWN0VHlwZVwiKTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgYXJndW1lbnRzW2luZGV4XS5mb3JFYWNoKGNvbGxlY3RUeXBlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKGNvbXBpbGVNYXAsIFwiY29tcGlsZU1hcFwiKTtcbmZ1bmN0aW9uIFNjaGVtYSQxKGRlZmluaXRpb24pIHtcbiAgcmV0dXJuIHRoaXMuZXh0ZW5kKGRlZmluaXRpb24pO1xufVxuX19uYW1lKFNjaGVtYSQxLCBcIlNjaGVtYSQxXCIpO1xuU2NoZW1hJDEucHJvdG90eXBlLmV4dGVuZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZXh0ZW5kMihkZWZpbml0aW9uKSB7XG4gIHZhciBpbXBsaWNpdCA9IFtdO1xuICB2YXIgZXhwbGljaXQgPSBbXTtcbiAgaWYgKGRlZmluaXRpb24gaW5zdGFuY2VvZiB0eXBlKSB7XG4gICAgZXhwbGljaXQucHVzaChkZWZpbml0aW9uKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbik7XG4gIH0gZWxzZSBpZiAoZGVmaW5pdGlvbiAmJiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uLmltcGxpY2l0KSB8fCBBcnJheS5pc0FycmF5KGRlZmluaXRpb24uZXhwbGljaXQpKSkge1xuICAgIGlmIChkZWZpbml0aW9uLmltcGxpY2l0KSBpbXBsaWNpdCA9IGltcGxpY2l0LmNvbmNhdChkZWZpbml0aW9uLmltcGxpY2l0KTtcbiAgICBpZiAoZGVmaW5pdGlvbi5leHBsaWNpdCkgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5leHBsaWNpdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSlcIik7XG4gIH1cbiAgaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC5cIik7XG4gICAgfVxuICAgIGlmICh0eXBlJDEubG9hZEtpbmQgJiYgdHlwZSQxLmxvYWRLaW5kICE9PSBcInNjYWxhclwiKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZSQxLm11bHRpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC5cIik7XG4gICAgfVxuICB9KTtcbiAgZXhwbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC5cIik7XG4gICAgfVxuICB9KTtcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUoU2NoZW1hJDEucHJvdG90eXBlKTtcbiAgcmVzdWx0LmltcGxpY2l0ID0gKHRoaXMuaW1wbGljaXQgfHwgW10pLmNvbmNhdChpbXBsaWNpdCk7XG4gIHJlc3VsdC5leHBsaWNpdCA9ICh0aGlzLmV4cGxpY2l0IHx8IFtdKS5jb25jYXQoZXhwbGljaXQpO1xuICByZXN1bHQuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHJlc3VsdCwgXCJpbXBsaWNpdFwiKTtcbiAgcmVzdWx0LmNvbXBpbGVkRXhwbGljaXQgPSBjb21waWxlTGlzdChyZXN1bHQsIFwiZXhwbGljaXRcIik7XG4gIHJlc3VsdC5jb21waWxlZFR5cGVNYXAgPSBjb21waWxlTWFwKHJlc3VsdC5jb21waWxlZEltcGxpY2l0LCByZXN1bHQuY29tcGlsZWRFeHBsaWNpdCk7XG4gIHJldHVybiByZXN1bHQ7XG59LCBcImV4dGVuZFwiKTtcbnZhciBzY2hlbWEgPSBTY2hlbWEkMTtcbnZhciBzdHIgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOnN0clwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIGNvbnN0cnVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogXCJcIjtcbiAgfSwgXCJjb25zdHJ1Y3RcIilcbn0pO1xudmFyIHNlcSA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6c2VxXCIsIHtcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICBjb25zdHJ1Y3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdO1xuICB9LCBcImNvbnN0cnVjdFwiKVxufSk7XG52YXIgbWFwID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjptYXBcIiwge1xuICBraW5kOiBcIm1hcHBpbmdcIixcbiAgY29uc3RydWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTtcbiAgfSwgXCJjb25zdHJ1Y3RcIilcbn0pO1xudmFyIGZhaWxzYWZlID0gbmV3IHNjaGVtYSh7XG4gIGV4cGxpY2l0OiBbXG4gICAgc3RyLFxuICAgIHNlcSxcbiAgICBtYXBcbiAgXVxufSk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcbiAgcmV0dXJuIG1heCA9PT0gMSAmJiBkYXRhID09PSBcIn5cIiB8fCBtYXggPT09IDQgJiYgKGRhdGEgPT09IFwibnVsbFwiIHx8IGRhdGEgPT09IFwiTnVsbFwiIHx8IGRhdGEgPT09IFwiTlVMTFwiKTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbE51bGwsIFwicmVzb2x2ZVlhbWxOdWxsXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuX19uYW1lKGNvbnN0cnVjdFlhbWxOdWxsLCBcImNvbnN0cnVjdFlhbWxOdWxsXCIpO1xuZnVuY3Rpb24gaXNOdWxsKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09PSBudWxsO1xufVxuX19uYW1lKGlzTnVsbCwgXCJpc051bGxcIik7XG52YXIgX251bGwgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOm51bGxcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJ+XCI7XG4gICAgfSwgXCJjYW5vbmljYWxcIiksXG4gICAgbG93ZXJjYXNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIH0sIFwibG93ZXJjYXNlXCIpLFxuICAgIHVwcGVyY2FzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIk5VTExcIjtcbiAgICB9LCBcInVwcGVyY2FzZVwiKSxcbiAgICBjYW1lbGNhc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJOdWxsXCI7XG4gICAgfSwgXCJjYW1lbGNhc2VcIiksXG4gICAgZW1wdHk6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9LCBcImVtcHR5XCIpXG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIlxufSk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbEJvb2xlYW4oZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG4gIHJldHVybiBtYXggPT09IDQgJiYgKGRhdGEgPT09IFwidHJ1ZVwiIHx8IGRhdGEgPT09IFwiVHJ1ZVwiIHx8IGRhdGEgPT09IFwiVFJVRVwiKSB8fCBtYXggPT09IDUgJiYgKGRhdGEgPT09IFwiZmFsc2VcIiB8fCBkYXRhID09PSBcIkZhbHNlXCIgfHwgZGF0YSA9PT0gXCJGQUxTRVwiKTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbEJvb2xlYW4sIFwicmVzb2x2ZVlhbWxCb29sZWFuXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YSkge1xuICByZXR1cm4gZGF0YSA9PT0gXCJ0cnVlXCIgfHwgZGF0YSA9PT0gXCJUcnVlXCIgfHwgZGF0YSA9PT0gXCJUUlVFXCI7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbEJvb2xlYW4sIFwiY29uc3RydWN0WWFtbEJvb2xlYW5cIik7XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IEJvb2xlYW5dXCI7XG59XG5fX25hbWUoaXNCb29sZWFuLCBcImlzQm9vbGVhblwiKTtcbnZhciBib29sID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sXCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCb29sZWFuLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLFxuICBwcmVkaWNhdGU6IGlzQm9vbGVhbixcbiAgcmVwcmVzZW50OiB7XG4gICAgbG93ZXJjYXNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIH0sIFwibG93ZXJjYXNlXCIpLFxuICAgIHVwcGVyY2FzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPyBcIlRSVUVcIiA6IFwiRkFMU0VcIjtcbiAgICB9LCBcInVwcGVyY2FzZVwiKSxcbiAgICBjYW1lbGNhc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID8gXCJUcnVlXCIgOiBcIkZhbHNlXCI7XG4gICAgfSwgXCJjYW1lbGNhc2VcIilcbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiBcImxvd2VyY2FzZVwiXG59KTtcbmZ1bmN0aW9uIGlzSGV4Q29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTcgfHwgNjUgPD0gYyAmJiBjIDw9IDcwIHx8IDk3IDw9IGMgJiYgYyA8PSAxMDI7XG59XG5fX25hbWUoaXNIZXhDb2RlLCBcImlzSGV4Q29kZVwiKTtcbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTU7XG59XG5fX25hbWUoaXNPY3RDb2RlLCBcImlzT2N0Q29kZVwiKTtcbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTc7XG59XG5fX25hbWUoaXNEZWNDb2RlLCBcImlzRGVjQ29kZVwiKTtcbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aCwgaW5kZXggPSAwLCBoYXNEaWdpdHMgPSBmYWxzZSwgY2g7XG4gIGlmICghbWF4KSByZXR1cm4gZmFsc2U7XG4gIGNoID0gZGF0YVtpbmRleF07XG4gIGlmIChjaCA9PT0gXCItXCIgfHwgY2ggPT09IFwiK1wiKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG4gIGlmIChjaCA9PT0gXCIwXCIpIHtcbiAgICBpZiAoaW5kZXggKyAxID09PSBtYXgpIHJldHVybiB0cnVlO1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcbiAgICBpZiAoY2ggPT09IFwiYlwiKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY2ggIT09IFwiMFwiICYmIGNoICE9PSBcIjFcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gXCJfXCI7XG4gICAgfVxuICAgIGlmIChjaCA9PT0gXCJ4XCIpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSBcIl9cIikgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSBcIl9cIjtcbiAgICB9XG4gICAgaWYgKGNoID09PSBcIm9cIikge1xuICAgICAgaW5kZXgrKztcbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09IFwiX1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cbiAgfVxuICBpZiAoY2ggPT09IFwiX1wiKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgaWYgKGNoID09PSBcIl9cIikgY29udGludWU7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWhhc0RpZ2l0cyB8fCBjaCA9PT0gXCJfXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUocmVzb2x2ZVlhbWxJbnRlZ2VyLCBcInJlc29sdmVZYW1sSW50ZWdlclwiKTtcbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxJbnRlZ2VyKGRhdGEpIHtcbiAgdmFyIHZhbHVlID0gZGF0YSwgc2lnbiA9IDEsIGNoO1xuICBpZiAodmFsdWUuaW5kZXhPZihcIl9cIikgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9fL2csIFwiXCIpO1xuICB9XG4gIGNoID0gdmFsdWVbMF07XG4gIGlmIChjaCA9PT0gXCItXCIgfHwgY2ggPT09IFwiK1wiKSB7XG4gICAgaWYgKGNoID09PSBcIi1cIikgc2lnbiA9IC0xO1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuICBpZiAodmFsdWUgPT09IFwiMFwiKSByZXR1cm4gMDtcbiAgaWYgKGNoID09PSBcIjBcIikge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJiXCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDIpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJ4XCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDE2KTtcbiAgICBpZiAodmFsdWVbMV0gPT09IFwib1wiKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCA4KTtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbEludGVnZXIsIFwiY29uc3RydWN0WWFtbEludGVnZXJcIik7XG5mdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IE51bWJlcl1cIiAmJiAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuX19uYW1lKGlzSW50ZWdlciwgXCJpc0ludGVnZXJcIik7XG52YXIgaW50ID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEludGVnZXIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICBiaW5hcnk6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID49IDAgPyBcIjBiXCIgKyBvYmoudG9TdHJpbmcoMikgOiBcIi0wYlwiICsgb2JqLnRvU3RyaW5nKDIpLnNsaWNlKDEpO1xuICAgIH0sIFwiYmluYXJ5XCIpLFxuICAgIG9jdGFsOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA+PSAwID8gXCIwb1wiICsgb2JqLnRvU3RyaW5nKDgpIDogXCItMG9cIiArIG9iai50b1N0cmluZyg4KS5zbGljZSgxKTtcbiAgICB9LCBcIm9jdGFsXCIpLFxuICAgIGRlY2ltYWw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTtcbiAgICB9LCBcImRlY2ltYWxcIiksXG4gICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICAgIGhleGFkZWNpbWFsOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA+PSAwID8gXCIweFwiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogXCItMHhcIiArIG9iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKTtcbiAgICB9LCBcImhleGFkZWNpbWFsXCIpXG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogXCJkZWNpbWFsXCIsXG4gIHN0eWxlQWxpYXNlczoge1xuICAgIGJpbmFyeTogWzIsIFwiYmluXCJdLFxuICAgIG9jdGFsOiBbOCwgXCJvY3RcIl0sXG4gICAgZGVjaW1hbDogWzEwLCBcImRlY1wiXSxcbiAgICBoZXhhZGVjaW1hbDogWzE2LCBcImhleFwiXVxuICB9XG59KTtcbnZhciBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICAvLyAyLjVlNCwgMi41IGFuZCBpbnRlZ2Vyc1xuICBcIl4oPzpbLStdPyg/OlswLTldWzAtOV9dKikoPzpcXFxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcXFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFxcXC4oPzppbmZ8SW5mfElORil8XFxcXC4oPzpuYW58TmFOfE5BTikpJFwiXG4pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxGbG9hdChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHwgLy8gUXVpY2sgaGFjayB0byBub3QgYWxsb3cgaW50ZWdlcnMgZW5kIHdpdGggYF9gXG4gIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWRcbiAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSBcIl9cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbEZsb2F0LCBcInJlc29sdmVZYW1sRmxvYXRcIik7XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkge1xuICB2YXIgdmFsdWUsIHNpZ247XG4gIHZhbHVlID0gZGF0YS5yZXBsYWNlKC9fL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gPSB2YWx1ZVswXSA9PT0gXCItXCIgPyAtMSA6IDE7XG4gIGlmIChcIistXCIuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBcIi5pbmZcIikge1xuICAgIHJldHVybiBzaWduID09PSAxID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIi5uYW5cIikge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlLCAxMCk7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbEZsb2F0LCBcImNvbnN0cnVjdFlhbWxGbG9hdFwiKTtcbnZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvO1xuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcbiAgaWYgKGlzTmFOKG9iamVjdCkpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5uYW5cIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLk5BTlwiO1xuICAgICAgY2FzZSBcImNhbWVsY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuTmFOXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBcImxvd2VyY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuaW5mXCI7XG4gICAgICBjYXNlIFwidXBwZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5JTkZcIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLkluZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgXCJsb3dlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5pbmZcIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5JTkZcIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5JbmZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHtcbiAgICByZXR1cm4gXCItMC4wXCI7XG4gIH1cbiAgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTtcbiAgcmV0dXJuIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QudGVzdChyZXMpID8gcmVzLnJlcGxhY2UoXCJlXCIsIFwiLmVcIikgOiByZXM7XG59XG5fX25hbWUocmVwcmVzZW50WWFtbEZsb2F0LCBcInJlcHJlc2VudFlhbWxGbG9hdFwiKTtcbmZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IE51bWJlcl1cIiAmJiAob2JqZWN0ICUgMSAhPT0gMCB8fCBjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5fX25hbWUoaXNGbG9hdCwgXCJpc0Zsb2F0XCIpO1xudmFyIGZsb2F0ID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBwcmVkaWNhdGU6IGlzRmxvYXQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6IFwibG93ZXJjYXNlXCJcbn0pO1xudmFyIGpzb24gPSBmYWlsc2FmZS5leHRlbmQoe1xuICBpbXBsaWNpdDogW1xuICAgIF9udWxsLFxuICAgIGJvb2wsXG4gICAgaW50LFxuICAgIGZsb2F0XG4gIF1cbn0pO1xudmFyIGNvcmUgPSBqc29uO1xudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICBcIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkXCJcbik7XG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgXCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFxcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXFxcLihbMC05XSopKT8oPzpbIFxcXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JFwiXG4pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKHJlc29sdmVZYW1sVGltZXN0YW1wLCBcInJlc29sdmVZYW1sVGltZXN0YW1wXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7XG4gIHZhciBtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uID0gMCwgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG4gIG1hdGNoID0gWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpO1xuICBpZiAobWF0Y2ggPT09IG51bGwpIG1hdGNoID0gWUFNTF9USU1FU1RBTVBfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiRGF0ZSByZXNvbHZlIGVycm9yXCIpO1xuICB5ZWFyID0gK21hdGNoWzFdO1xuICBtb250aCA9ICttYXRjaFsyXSAtIDE7XG4gIGRheSA9ICttYXRjaFszXTtcbiAgaWYgKCFtYXRjaFs0XSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5KSk7XG4gIH1cbiAgaG91ciA9ICttYXRjaFs0XTtcbiAgbWludXRlID0gK21hdGNoWzVdO1xuICBzZWNvbmQgPSArbWF0Y2hbNl07XG4gIGlmIChtYXRjaFs3XSkge1xuICAgIGZyYWN0aW9uID0gbWF0Y2hbN10uc2xpY2UoMCwgMyk7XG4gICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHtcbiAgICAgIGZyYWN0aW9uICs9IFwiMFwiO1xuICAgIH1cbiAgICBmcmFjdGlvbiA9ICtmcmFjdGlvbjtcbiAgfVxuICBpZiAobWF0Y2hbOV0pIHtcbiAgICB0el9ob3VyID0gK21hdGNoWzEwXTtcbiAgICB0el9taW51dGUgPSArKG1hdGNoWzExXSB8fCAwKTtcbiAgICBkZWx0YSA9ICh0el9ob3VyICogNjAgKyB0el9taW51dGUpICogNmU0O1xuICAgIGlmIChtYXRjaFs5XSA9PT0gXCItXCIpIGRlbHRhID0gLWRlbHRhO1xuICB9XG4gIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTtcbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG4gIHJldHVybiBkYXRlO1xufVxuX19uYW1lKGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsIFwiY29uc3RydWN0WWFtbFRpbWVzdGFtcFwiKTtcbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cbl9fbmFtZShyZXByZXNlbnRZYW1sVGltZXN0YW1wLCBcInJlcHJlc2VudFlhbWxUaW1lc3RhbXBcIik7XG52YXIgdGltZXN0YW1wID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXBcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wLFxuICBpbnN0YW5jZU9mOiBEYXRlLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXBcbn0pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7XG4gIHJldHVybiBkYXRhID09PSBcIjw8XCIgfHwgZGF0YSA9PT0gbnVsbDtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbE1lcmdlLCBcInJlc29sdmVZYW1sTWVyZ2VcIik7XG52YXIgbWVyZ2UgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlXCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG52YXIgQkFTRTY0X01BUCA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHJcIjtcbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgdmFyIGNvZGUsIGlkeCwgYml0bGVuID0gMCwgbWF4ID0gZGF0YS5sZW5ndGgsIG1hcDIgPSBCQVNFNjRfTUFQO1xuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBjb2RlID0gbWFwMi5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpO1xuICAgIGlmIChjb2RlID4gNjQpIGNvbnRpbnVlO1xuICAgIGlmIChjb2RlIDwgMCkgcmV0dXJuIGZhbHNlO1xuICAgIGJpdGxlbiArPSA2O1xuICB9XG4gIHJldHVybiBiaXRsZW4gJSA4ID09PSAwO1xufVxuX19uYW1lKHJlc29sdmVZYW1sQmluYXJ5LCBcInJlc29sdmVZYW1sQmluYXJ5XCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJpbmFyeShkYXRhKSB7XG4gIHZhciBpZHgsIHRhaWxiaXRzLCBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csIFwiXCIpLCBtYXggPSBpbnB1dC5sZW5ndGgsIG1hcDIgPSBCQVNFNjRfTUFQLCBiaXRzID0gMCwgcmVzdWx0ID0gW107XG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkge1xuICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxNiAmIDI1NSk7XG4gICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpO1xuICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7XG4gICAgfVxuICAgIGJpdHMgPSBiaXRzIDw8IDYgfCBtYXAyLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG4gIHRhaWxiaXRzID0gbWF4ICUgNCAqIDY7XG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpO1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7XG4gICAgcmVzdWx0LnB1c2goYml0cyA+PiAxMCAmIDI1NSk7XG4gICAgcmVzdWx0LnB1c2goYml0cyA+PiAyICYgMjU1KTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHtcbiAgICByZXN1bHQucHVzaChiaXRzID4+IDQgJiAyNTUpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuX19uYW1lKGNvbnN0cnVjdFlhbWxCaW5hcnksIFwiY29uc3RydWN0WWFtbEJpbmFyeVwiKTtcbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxCaW5hcnkob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBcIlwiLCBiaXRzID0gMCwgaWR4LCB0YWlsLCBtYXggPSBvYmplY3QubGVuZ3RoLCBtYXAyID0gQkFTRTY0X01BUDtcbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKGlkeCAlIDMgPT09IDAgJiYgaWR4KSB7XG4gICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDE4ICYgNjNdO1xuICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMiAmIDYzXTtcbiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gNiAmIDYzXTtcbiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgJiA2M107XG4gICAgfVxuICAgIGJpdHMgPSAoYml0cyA8PCA4KSArIG9iamVjdFtpZHhdO1xuICB9XG4gIHRhaWwgPSBtYXggJSAzO1xuICBpZiAodGFpbCA9PT0gMCkge1xuICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gMTggJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMiAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDYgJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyAmIDYzXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMCAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDQgJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA8PCAyICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyWzY0XTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAyICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPDwgNCAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMls2NF07XG4gICAgcmVzdWx0ICs9IG1hcDJbNjRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUocmVwcmVzZW50WWFtbEJpbmFyeSwgXCJyZXByZXNlbnRZYW1sQmluYXJ5XCIpO1xuZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCI7XG59XG5fX25hbWUoaXNCaW5hcnksIFwiaXNCaW5hcnlcIik7XG52YXIgYmluYXJ5ID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnlcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LFxuICBwcmVkaWNhdGU6IGlzQmluYXJ5LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnlcbn0pO1xudmFyIF9oYXNPd25Qcm9wZXJ0eSQzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfdG9TdHJpbmckMiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5mdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksIG9iamVjdCA9IGRhdGE7XG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcbiAgICBpZiAoX3RvU3RyaW5nJDIuY2FsbChwYWlyKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAocGFpcktleSBpbiBwYWlyKSB7XG4gICAgICBpZiAoX2hhc093blByb3BlcnR5JDMuY2FsbChwYWlyLCBwYWlyS2V5KSkge1xuICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwYWlySGFzS2V5KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbE9tYXAsIFwicmVzb2x2ZVlhbWxPbWFwXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTtcbn1cbl9fbmFtZShjb25zdHJ1Y3RZYW1sT21hcCwgXCJjb25zdHJ1Y3RZYW1sT21hcFwiKTtcbnZhciBvbWFwID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXCIsIHtcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xudmFyIF90b1N0cmluZyQxID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsIG9iamVjdCA9IGRhdGE7XG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG4gICAgaWYgKF90b1N0cmluZyQxLmNhbGwocGFpcikgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHJldHVybiBmYWxzZTtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgcmVzdWx0W2luZGV4XSA9IFtrZXlzWzBdLCBwYWlyW2tleXNbMF1dXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbFBhaXJzLCBcInJlc29sdmVZYW1sUGFpcnNcIik7XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LCBvYmplY3QgPSBkYXRhO1xuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcbiAgICByZXN1bHRbaW5kZXhdID0gW2tleXNbMF0sIHBhaXJba2V5c1swXV1dO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbFBhaXJzLCBcImNvbnN0cnVjdFlhbWxQYWlyc1wiKTtcbnZhciBwYWlycyA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcIiwge1xuICBraW5kOiBcInNlcXVlbmNlXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcbnZhciBfaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbFNldChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIGtleSwgb2JqZWN0ID0gZGF0YTtcbiAgZm9yIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQyLmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICBpZiAob2JqZWN0W2tleV0gIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUocmVzb2x2ZVlhbWxTZXQsIFwicmVzb2x2ZVlhbWxTZXRcIik7XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5fX25hbWUoY29uc3RydWN0WWFtbFNldCwgXCJjb25zdHJ1Y3RZYW1sU2V0XCIpO1xudmFyIHNldCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6c2V0XCIsIHtcbiAga2luZDogXCJtYXBwaW5nXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xudmFyIF9kZWZhdWx0ID0gY29yZS5leHRlbmQoe1xuICBpbXBsaWNpdDogW1xuICAgIHRpbWVzdGFtcCxcbiAgICBtZXJnZVxuICBdLFxuICBleHBsaWNpdDogW1xuICAgIGJpbmFyeSxcbiAgICBvbWFwLFxuICAgIHBhaXJzLFxuICAgIHNldFxuICBdXG59KTtcbnZhciBfaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgQ09OVEVYVF9GTE9XX0lOID0gMTtcbnZhciBDT05URVhUX0ZMT1dfT1VUID0gMjtcbnZhciBDT05URVhUX0JMT0NLX0lOID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG52YXIgQ0hPTVBJTkdfQ0xJUCA9IDE7XG52YXIgQ0hPTVBJTkdfU1RSSVAgPSAyO1xudmFyIENIT01QSU5HX0tFRVAgPSAzO1xudmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFID0gL14oPzohfCEhfCFbYS16XFwtXSshKSQvaTtcbnZhciBQQVRURVJOX1RBR19VUkkgPSAvXig/OiF8W14sXFxbXFxdXFx7XFx9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelxcLSM7XFwvXFw/OkAmPVxcK1xcJCxfXFwuIX5cXConXFwoXFwpXFxbXFxdXSkqJC9pO1xuZnVuY3Rpb24gX2NsYXNzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5fX25hbWUoX2NsYXNzLCBcIl9jbGFzc1wiKTtcbmZ1bmN0aW9uIGlzX0VPTChjKSB7XG4gIHJldHVybiBjID09PSAxMCB8fCBjID09PSAxMztcbn1cbl9fbmFtZShpc19FT0wsIFwiaXNfRU9MXCIpO1xuZnVuY3Rpb24gaXNfV0hJVEVfU1BBQ0UoYykge1xuICByZXR1cm4gYyA9PT0gOSB8fCBjID09PSAzMjtcbn1cbl9fbmFtZShpc19XSElURV9TUEFDRSwgXCJpc19XSElURV9TUEFDRVwiKTtcbmZ1bmN0aW9uIGlzX1dTX09SX0VPTChjKSB7XG4gIHJldHVybiBjID09PSA5IHx8IGMgPT09IDMyIHx8IGMgPT09IDEwIHx8IGMgPT09IDEzO1xufVxuX19uYW1lKGlzX1dTX09SX0VPTCwgXCJpc19XU19PUl9FT0xcIik7XG5mdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjKSB7XG4gIHJldHVybiBjID09PSA0NCB8fCBjID09PSA5MSB8fCBjID09PSA5MyB8fCBjID09PSAxMjMgfHwgYyA9PT0gMTI1O1xufVxuX19uYW1lKGlzX0ZMT1dfSU5ESUNBVE9SLCBcImlzX0ZMT1dfSU5ESUNBVE9SXCIpO1xuZnVuY3Rpb24gZnJvbUhleENvZGUoYykge1xuICB2YXIgbGM7XG4gIGlmICg0OCA8PSBjICYmIGMgPD0gNTcpIHtcbiAgICByZXR1cm4gYyAtIDQ4O1xuICB9XG4gIGxjID0gYyB8IDMyO1xuICBpZiAoOTcgPD0gbGMgJiYgbGMgPD0gMTAyKSB7XG4gICAgcmV0dXJuIGxjIC0gOTcgKyAxMDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5fX25hbWUoZnJvbUhleENvZGUsIFwiZnJvbUhleENvZGVcIik7XG5mdW5jdGlvbiBlc2NhcGVkSGV4TGVuKGMpIHtcbiAgaWYgKGMgPT09IDEyMCkge1xuICAgIHJldHVybiAyO1xuICB9XG4gIGlmIChjID09PSAxMTcpIHtcbiAgICByZXR1cm4gNDtcbiAgfVxuICBpZiAoYyA9PT0gODUpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICByZXR1cm4gMDtcbn1cbl9fbmFtZShlc2NhcGVkSGV4TGVuLCBcImVzY2FwZWRIZXhMZW5cIik7XG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoNDggPD0gYyAmJiBjIDw9IDU3KSB7XG4gICAgcmV0dXJuIGMgLSA0ODtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5fX25hbWUoZnJvbURlY2ltYWxDb2RlLCBcImZyb21EZWNpbWFsQ29kZVwiKTtcbmZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGMpIHtcbiAgcmV0dXJuIGMgPT09IDQ4ID8gXCJcXDBcIiA6IGMgPT09IDk3ID8gXCJcXHgwN1wiIDogYyA9PT0gOTggPyBcIlxcYlwiIDogYyA9PT0gMTE2ID8gXCJcdFwiIDogYyA9PT0gOSA/IFwiXHRcIiA6IGMgPT09IDExMCA/IFwiXFxuXCIgOiBjID09PSAxMTggPyBcIlxcdlwiIDogYyA9PT0gMTAyID8gXCJcXGZcIiA6IGMgPT09IDExNCA/IFwiXFxyXCIgOiBjID09PSAxMDEgPyBcIlxceDFCXCIgOiBjID09PSAzMiA/IFwiIFwiIDogYyA9PT0gMzQgPyAnXCInIDogYyA9PT0gNDcgPyBcIi9cIiA6IGMgPT09IDkyID8gXCJcXFxcXCIgOiBjID09PSA3OCA/IFwiXFx4ODVcIiA6IGMgPT09IDk1ID8gXCJcXHhBMFwiIDogYyA9PT0gNzYgPyBcIlxcdTIwMjhcIiA6IGMgPT09IDgwID8gXCJcXHUyMDI5XCIgOiBcIlwiO1xufVxuX19uYW1lKHNpbXBsZUVzY2FwZVNlcXVlbmNlLCBcInNpbXBsZUVzY2FwZVNlcXVlbmNlXCIpO1xuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYykge1xuICBpZiAoYyA8PSA2NTUzNSkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgIChjIC0gNjU1MzYgPj4gMTApICsgNTUyOTYsXG4gICAgKGMgLSA2NTUzNiAmIDEwMjMpICsgNTYzMjBcbiAgKTtcbn1cbl9fbmFtZShjaGFyRnJvbUNvZGVwb2ludCwgXCJjaGFyRnJvbUNvZGVwb2ludFwiKTtcbnZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpO1xudmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpO1xuZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIHNpbXBsZUVzY2FwZUNoZWNrW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSkgPyAxIDogMDtcbiAgc2ltcGxlRXNjYXBlTWFwW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSk7XG59XG52YXIgaTtcbmZ1bmN0aW9uIFN0YXRlJDEoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICB0aGlzLmZpbGVuYW1lID0gb3B0aW9uc1tcImZpbGVuYW1lXCJdIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hID0gb3B0aW9uc1tcInNjaGVtYVwiXSB8fCBfZGVmYXVsdDtcbiAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zW1wib25XYXJuaW5nXCJdIHx8IG51bGw7XG4gIHRoaXMubGVnYWN5ID0gb3B0aW9uc1tcImxlZ2FjeVwiXSB8fCBmYWxzZTtcbiAgdGhpcy5qc29uID0gb3B0aW9uc1tcImpzb25cIl0gfHwgZmFsc2U7XG4gIHRoaXMubGlzdGVuZXIgPSBvcHRpb25zW1wibGlzdGVuZXJcIl0gfHwgbnVsbDtcbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gIHRoaXMubGluZSA9IDA7XG4gIHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcbiAgdGhpcy5maXJzdFRhYkluTGluZSA9IC0xO1xuICB0aGlzLmRvY3VtZW50cyA9IFtdO1xufVxuX19uYW1lKFN0YXRlJDEsIFwiU3RhdGUkMVwiKTtcbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdmFyIG1hcmsgPSB7XG4gICAgbmFtZTogc3RhdGUuZmlsZW5hbWUsXG4gICAgYnVmZmVyOiBzdGF0ZS5pbnB1dC5zbGljZSgwLCAtMSksXG4gICAgLy8gb21pdCB0cmFpbGluZyBcXDBcbiAgICBwb3NpdGlvbjogc3RhdGUucG9zaXRpb24sXG4gICAgbGluZTogc3RhdGUubGluZSxcbiAgICBjb2x1bW46IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0XG4gIH07XG4gIG1hcmsuc25pcHBldCA9IHNuaXBwZXQobWFyayk7XG4gIHJldHVybiBuZXcgZXhjZXB0aW9uKG1lc3NhZ2UsIG1hcmspO1xufVxuX19uYW1lKGdlbmVyYXRlRXJyb3IsIFwiZ2VuZXJhdGVFcnJvclwiKTtcbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSk7XG59XG5fX25hbWUodGhyb3dFcnJvciwgXCJ0aHJvd0Vycm9yXCIpO1xuZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlLCBtZXNzYWdlKSB7XG4gIGlmIChzdGF0ZS5vbldhcm5pbmcpIHtcbiAgICBzdGF0ZS5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSk7XG4gIH1cbn1cbl9fbmFtZSh0aHJvd1dhcm5pbmcsIFwidGhyb3dXYXJuaW5nXCIpO1xudmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0ge1xuICBZQU1MOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcbiAgICB2YXIgbWF0Y2gsIG1ham9yLCBtaW5vcjtcbiAgICBpZiAoc3RhdGUudmVyc2lvbiAhPT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50XCIpO1xuICAgIH1cbiAgICBtYXRjaCA9IC9eKFswLTldKylcXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSk7XG4gICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlXCIpO1xuICAgIH1cbiAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuICAgIGlmIChtYWpvciAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFwiKTtcbiAgICB9XG4gICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07XG4gICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gbWlub3IgPCAyO1xuICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCBcInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcIik7XG4gICAgfVxuICB9LCBcImhhbmRsZVlhbWxEaXJlY3RpdmVcIiksXG4gIFRBRzogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcbiAgICB2YXIgaGFuZGxlLCBwcmVmaXg7XG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHNcIik7XG4gICAgfVxuICAgIGhhbmRsZSA9IGFyZ3NbMF07XG4gICAgcHJlZml4ID0gYXJnc1sxXTtcbiAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKHN0YXRlLnRhZ01hcCwgaGFuZGxlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yIFwiJyArIGhhbmRsZSArICdcIiB0YWcgaGFuZGxlJyk7XG4gICAgfVxuICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBwcmVmaXggPSBkZWNvZGVVUklDb21wb25lbnQocHJlZml4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6IFwiICsgcHJlZml4KTtcbiAgICB9XG4gICAgc3RhdGUudGFnTWFwW2hhbmRsZV0gPSBwcmVmaXg7XG4gIH0sIFwiaGFuZGxlVGFnRGlyZWN0aXZlXCIpXG59O1xuZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUsIHN0YXJ0LCBlbmQsIGNoZWNrSnNvbikge1xuICB2YXIgX3Bvc2l0aW9uLCBfbGVuZ3RoLCBfY2hhcmFjdGVyLCBfcmVzdWx0O1xuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgaWYgKGNoZWNrSnNvbikge1xuICAgICAgZm9yIChfcG9zaXRpb24gPSAwLCBfbGVuZ3RoID0gX3Jlc3VsdC5sZW5ndGg7IF9wb3NpdGlvbiA8IF9sZW5ndGg7IF9wb3NpdGlvbiArPSAxKSB7XG4gICAgICAgIF9jaGFyYWN0ZXIgPSBfcmVzdWx0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcbiAgICAgICAgaWYgKCEoX2NoYXJhY3RlciA9PT0gOSB8fCAzMiA8PSBfY2hhcmFjdGVyICYmIF9jaGFyYWN0ZXIgPD0gMTExNDExMSkpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChfcmVzdWx0KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVyc1wiKTtcbiAgICB9XG4gICAgc3RhdGUucmVzdWx0ICs9IF9yZXN1bHQ7XG4gIH1cbn1cbl9fbmFtZShjYXB0dXJlU2VnbWVudCwgXCJjYXB0dXJlU2VnbWVudFwiKTtcbmZ1bmN0aW9uIG1lcmdlTWFwcGluZ3Moc3RhdGUsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykge1xuICB2YXIgc291cmNlS2V5cywga2V5LCBpbmRleCwgcXVhbnRpdHk7XG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlXCIpO1xuICB9XG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBzb3VyY2VLZXlzLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaW5kZXhdO1xuICAgIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChkZXN0aW5hdGlvbiwga2V5KSkge1xuICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgb3ZlcnJpZGFibGVLZXlzW2tleV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuX19uYW1lKG1lcmdlTWFwcGluZ3MsIFwibWVyZ2VNYXBwaW5nc1wiKTtcbmZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIHN0YXJ0TGluZSwgc3RhcnRMaW5lU3RhcnQsIHN0YXJ0UG9zKSB7XG4gIHZhciBpbmRleCwgcXVhbnRpdHk7XG4gIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGUpKSB7XG4gICAga2V5Tm9kZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGtleU5vZGUpO1xuICAgIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IGtleU5vZGUubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlW2luZGV4XSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBrZXlOb2RlID09PSBcIm9iamVjdFwiICYmIF9jbGFzcyhrZXlOb2RlW2luZGV4XSkgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgICAga2V5Tm9kZVtpbmRleF0gPSBcIltvYmplY3QgT2JqZWN0XVwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09IFwib2JqZWN0XCIgJiYgX2NsYXNzKGtleU5vZGUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG4gICAga2V5Tm9kZSA9IFwiW29iamVjdCBPYmplY3RdXCI7XG4gIH1cbiAga2V5Tm9kZSA9IFN0cmluZyhrZXlOb2RlKTtcbiAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cbiAgaWYgKGtleVRhZyA9PT0gXCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZVwiKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghc3RhdGUuanNvbiAmJiAhX2hhc093blByb3BlcnR5JDEuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmIF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTtcbiAgICAgIHN0YXRlLmxpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0IHx8IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIik7XG4gICAgfVxuICAgIGlmIChrZXlOb2RlID09PSBcIl9fcHJvdG9fX1wiKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdmFsdWVOb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdFtrZXlOb2RlXSA9IHZhbHVlTm9kZTtcbiAgICB9XG4gICAgZGVsZXRlIG92ZXJyaWRhYmxlS2V5c1trZXlOb2RlXTtcbiAgfVxuICByZXR1cm4gX3Jlc3VsdDtcbn1cbl9fbmFtZShzdG9yZU1hcHBpbmdQYWlyLCBcInN0b3JlTWFwcGluZ1BhaXJcIik7XG5mdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlKSB7XG4gIHZhciBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoID09PSAxMCkge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDEzKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDEwKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImEgbGluZSBicmVhayBpcyBleHBlY3RlZFwiKTtcbiAgfVxuICBzdGF0ZS5saW5lICs9IDE7XG4gIHN0YXRlLmxpbmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IC0xO1xufVxuX19uYW1lKHJlYWRMaW5lQnJlYWssIFwicmVhZExpbmVCcmVha1wiKTtcbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCwgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgaWYgKGNoID09PSA5ICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lID09PSAtMSkge1xuICAgICAgICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cbiAgICBpZiAoYWxsb3dDb21tZW50cyAmJiBjaCA9PT0gMzUpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfSB3aGlsZSAoY2ggIT09IDEwICYmIGNoICE9PSAxMyAmJiBjaCAhPT0gMCk7XG4gICAgfVxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBsaW5lQnJlYWtzKys7XG4gICAgICBzdGF0ZS5saW5lSW5kZW50ID0gMDtcbiAgICAgIHdoaWxlIChjaCA9PT0gMzIpIHtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2hlY2tJbmRlbnQgIT09IC0xICYmIGxpbmVCcmVha3MgIT09IDAgJiYgc3RhdGUubGluZUluZGVudCA8IGNoZWNrSW5kZW50KSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCBcImRlZmljaWVudCBpbmRlbnRhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cbl9fbmFtZShza2lwU2VwYXJhdGlvblNwYWNlLCBcInNraXBTZXBhcmF0aW9uU3BhY2VcIik7XG5mdW5jdGlvbiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG4gIGlmICgoY2ggPT09IDQ1IHx8IGNoID09PSA0NikgJiYgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiYgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMikpIHtcbiAgICBfcG9zaXRpb24gKz0gMztcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcbiAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZSh0ZXN0RG9jdW1lbnRTZXBhcmF0b3IsIFwidGVzdERvY3VtZW50U2VwYXJhdG9yXCIpO1xuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9IFwiIFwiO1xuICB9IGVsc2UgaWYgKGNvdW50ID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGNvdW50IC0gMSk7XG4gIH1cbn1cbl9fbmFtZSh3cml0ZUZvbGRlZExpbmVzLCBcIndyaXRlRm9sZGVkTGluZXNcIik7XG5mdW5jdGlvbiByZWFkUGxhaW5TY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQsIHdpdGhpbkZsb3dDb2xsZWN0aW9uKSB7XG4gIHZhciBwcmVjZWRpbmcsIGZvbGxvd2luZywgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoYXNQZW5kaW5nQ29udGVudCwgX2xpbmUsIF9saW5lU3RhcnQsIF9saW5lSW5kZW50LCBfa2luZCA9IHN0YXRlLmtpbmQsIF9yZXN1bHQgPSBzdGF0ZS5yZXN1bHQsIGNoO1xuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICBpZiAoaXNfV1NfT1JfRU9MKGNoKSB8fCBpc19GTE9XX0lORElDQVRPUihjaCkgfHwgY2ggPT09IDM1IHx8IGNoID09PSAzOCB8fCBjaCA9PT0gNDIgfHwgY2ggPT09IDMzIHx8IGNoID09PSAxMjQgfHwgY2ggPT09IDYyIHx8IGNoID09PSAzOSB8fCBjaCA9PT0gMzQgfHwgY2ggPT09IDM3IHx8IGNoID09PSA2NCB8fCBjaCA9PT0gOTYpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGNoID09PSA2MyB8fCBjaCA9PT0gNDUpIHtcbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSA1OCkge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMzUpIHtcbiAgICAgIHByZWNlZGluZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gLSAxKTtcbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCAtMSk7XG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBzdGF0ZS5saW5lIC0gX2xpbmUpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgfVxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gIGlmIChzdGF0ZS5yZXN1bHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShyZWFkUGxhaW5TY2FsYXIsIFwicmVhZFBsYWluU2NhbGFyXCIpO1xuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzOSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGF0ZS5raW5kID0gXCJzY2FsYXJcIjtcbiAgc3RhdGUucmVzdWx0ID0gXCJcIjtcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAzOSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgaWYgKGNoID09PSAzOSkge1xuICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuICB0aHJvd0Vycm9yKHN0YXRlLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXJcIik7XG59XG5fX25hbWUocmVhZFNpbmdsZVF1b3RlZFNjYWxhciwgXCJyZWFkU2luZ2xlUXVvdGVkU2NhbGFyXCIpO1xuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoZXhMZW5ndGgsIGhleFJlc3VsdCwgdG1wLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzNCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGF0ZS5raW5kID0gXCJzY2FsYXJcIjtcbiAgc3RhdGUucmVzdWx0ID0gXCJcIjtcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAzNCkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCk7XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGVzY2FwZWRIZXhMZW4oY2gpKSA+IDApIHtcbiAgICAgICAgaGV4TGVuZ3RoID0gdG1wO1xuICAgICAgICBoZXhSZXN1bHQgPSAwO1xuICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY2hhckZyb21Db2RlcG9pbnQoaGV4UmVzdWx0KTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5rbm93biBlc2NhcGUgc2VxdWVuY2VcIik7XG4gICAgICB9XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuICB0aHJvd0Vycm9yKHN0YXRlLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXJcIik7XG59XG5fX25hbWUocmVhZERvdWJsZVF1b3RlZFNjYWxhciwgXCJyZWFkRG91YmxlUXVvdGVkU2NhbGFyXCIpO1xuZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciByZWFkTmV4dCA9IHRydWUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zLCBfdGFnID0gc3RhdGUudGFnLCBfcmVzdWx0LCBfYW5jaG9yID0gc3RhdGUuYW5jaG9yLCBmb2xsb3dpbmcsIHRlcm1pbmF0b3IsIGlzUGFpciwgaXNFeHBsaWNpdFBhaXIsIGlzTWFwcGluZywgb3ZlcnJpZGFibGVLZXlzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIGtleU5vZGUsIGtleVRhZywgdmFsdWVOb2RlLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoID09PSA5MSkge1xuICAgIHRlcm1pbmF0b3IgPSA5MztcbiAgICBpc01hcHBpbmcgPSBmYWxzZTtcbiAgICBfcmVzdWx0ID0gW107XG4gIH0gZWxzZSBpZiAoY2ggPT09IDEyMykge1xuICAgIHRlcm1pbmF0b3IgPSAxMjU7XG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/IFwibWFwcGluZ1wiIDogXCJzZXF1ZW5jZVwiO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDQ0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAnLCdcIik7XG4gICAgfVxuICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gZmFsc2U7XG4gICAgaWYgKGNoID09PSA2Mykge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBfbGluZVN0YXJ0ID0gc3RhdGUubGluZVN0YXJ0O1xuICAgIF9wb3MgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoKGlzRXhwbGljaXRQYWlyIHx8IHN0YXRlLmxpbmUgPT09IF9saW5lKSAmJiBjaCA9PT0gNTgpIHtcbiAgICAgIGlzUGFpciA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGlzTWFwcGluZykge1xuICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgbnVsbCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdC5wdXNoKGtleU5vZGUpO1xuICAgIH1cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIGlmIChjaCA9PT0gNDQpIHtcbiAgICAgIHJlYWROZXh0ID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvblwiKTtcbn1cbl9fbmFtZShyZWFkRmxvd0NvbGxlY3Rpb24sIFwicmVhZEZsb3dDb2xsZWN0aW9uXCIpO1xuZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsIGZvbGRpbmcsIGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCwgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSwgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSwgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsIGVtcHR5TGluZXMgPSAwLCBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLCB0bXAsIGNoO1xuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICBpZiAoY2ggPT09IDEyNCkge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gNjIpIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoY2ggPT09IDQzIHx8IGNoID09PSA0NSkge1xuICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7XG4gICAgICAgIGNob21waW5nID0gY2ggPT09IDQzID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgaWYgKHRtcCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmVcIik7XG4gICAgICB9IGVsc2UgaWYgKCFkZXRlY3RlZEluZGVudCkge1xuICAgICAgICB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCArIHRtcCAtIDE7XG4gICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgZG8ge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG4gICAgaWYgKGNoID09PSAzNSkge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlICghaXNfRU9MKGNoKSAmJiBjaCAhPT0gMCk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgd2hpbGUgKCghZGV0ZWN0ZWRJbmRlbnQgfHwgc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmIGNoID09PSAzMikge1xuICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGVtcHR5TGluZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHtcbiAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkge1xuICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBcIlxcblwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGZvbGRpbmcpIHtcbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGVtcHR5TGluZXMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lcyA9PT0gMCkge1xuICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHtcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gXCIgXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGVtcHR5TGluZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgfVxuICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTtcbiAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgZW1wdHlMaW5lcyA9IDA7XG4gICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmIGNoICE9PSAwKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUocmVhZEJsb2NrU2NhbGFyLCBcInJlYWRCbG9ja1NjYWxhclwiKTtcbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSwgX3RhZyA9IHN0YXRlLnRhZywgX2FuY2hvciA9IHN0YXRlLmFuY2hvciwgX3Jlc3VsdCA9IFtdLCBmb2xsb3dpbmcsIGRldGVjdGVkID0gZmFsc2UsIGNoO1xuICBpZiAoc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSByZXR1cm4gZmFsc2U7XG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkge1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGF0ZS5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvblwiKTtcbiAgICB9XG4gICAgaWYgKGNoICE9PSA0NSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcbiAgICBpZiAoIWlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICBfcmVzdWx0LnB1c2goc3RhdGUucmVzdWx0KTtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiBjaCAhPT0gMCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeVwiKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUudGFnID0gX3RhZztcbiAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgIHN0YXRlLmtpbmQgPSBcInNlcXVlbmNlXCI7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUocmVhZEJsb2NrU2VxdWVuY2UsIFwicmVhZEJsb2NrU2VxdWVuY2VcIik7XG5mdW5jdGlvbiByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBub2RlSW5kZW50LCBmbG93SW5kZW50KSB7XG4gIHZhciBmb2xsb3dpbmcsIGFsbG93Q29tcGFjdCwgX2xpbmUsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zLCBfdGFnID0gc3RhdGUudGFnLCBfYW5jaG9yID0gc3RhdGUuYW5jaG9yLCBfcmVzdWx0ID0ge30sIG92ZXJyaWRhYmxlS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCBrZXlUYWcgPSBudWxsLCBrZXlOb2RlID0gbnVsbCwgdmFsdWVOb2RlID0gbnVsbCwgYXRFeHBsaWNpdEtleSA9IGZhbHNlLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDtcbiAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmICghYXRFeHBsaWNpdEtleSAmJiBzdGF0ZS5maXJzdFRhYkluTGluZSAhPT0gLTEpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhdGUuZmlyc3RUYWJJbkxpbmU7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb25cIik7XG4gICAgfVxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgaWYgKChjaCA9PT0gNjMgfHwgY2ggPT09IDU4KSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgaWYgKGNoID09PSA2Mykge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICAgICAgY2ggPSBmb2xsb3dpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9rZXlMaW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfa2V5UG9zID0gc3RhdGUucG9zaXRpb247XG4gICAgICBpZiAoIWNvbXBvc2VOb2RlKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09IDU4KSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmdcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgICAgICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgICAgX2tleVBvcyA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIGlmICgoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIGNoICE9PSAwKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnlcIik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9IFwibWFwcGluZ1wiO1xuICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuX19uYW1lKHJlYWRCbG9ja01hcHBpbmcsIFwicmVhZEJsb2NrTWFwcGluZ1wiKTtcbmZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLCBpc1ZlcmJhdGltID0gZmFsc2UsIGlzTmFtZWQgPSBmYWxzZSwgdGFnSGFuZGxlLCB0YWdOYW1lLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzMykgcmV0dXJuIGZhbHNlO1xuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eVwiKTtcbiAgfVxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIGlmIChjaCA9PT0gNjApIHtcbiAgICBpc1ZlcmJhdGltID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDMzKSB7XG4gICAgaXNOYW1lZCA9IHRydWU7XG4gICAgdGFnSGFuZGxlID0gXCIhIVwiO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICB0YWdIYW5kbGUgPSBcIiFcIjtcbiAgfVxuICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgY2ggIT09IDYyKTtcbiAgICBpZiAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGgpIHtcbiAgICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZ1wiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICBpZiAoY2ggPT09IDMzKSB7XG4gICAgICAgIGlmICghaXNOYW1lZCkge1xuICAgICAgICAgIHRhZ0hhbmRsZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoUEFUVEVSTl9GTE9XX0lORElDQVRPUlMudGVzdCh0YWdOYW1lKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICB9XG4gIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiBcIiArIHRhZ05hbWUpO1xuICB9XG4gIHRyeSB7XG4gICAgdGFnTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudCh0YWdOYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6IFwiICsgdGFnTmFtZSk7XG4gIH1cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBzdGF0ZS50YWcgPSB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gXCIhXCIpIHtcbiAgICBzdGF0ZS50YWcgPSBcIiFcIiArIHRhZ05hbWU7XG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSBcIiEhXCIpIHtcbiAgICBzdGF0ZS50YWcgPSBcInRhZzp5YW1sLm9yZywyMDAyOlwiICsgdGFnTmFtZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlIFwiJyArIHRhZ0hhbmRsZSArICdcIicpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKHJlYWRUYWdQcm9wZXJ0eSwgXCJyZWFkVGFnUHJvcGVydHlcIik7XG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgY2g7XG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gIGlmIChjaCAhPT0gMzgpIHJldHVybiBmYWxzZTtcbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5XCIpO1xuICB9XG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIpO1xuICB9XG4gIHN0YXRlLmFuY2hvciA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZWFkQW5jaG9yUHJvcGVydHksIFwicmVhZEFuY2hvclByb3BlcnR5XCIpO1xuZnVuY3Rpb24gcmVhZEFsaWFzKHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24sIGFsaWFzLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSA0MikgcmV0dXJuIGZhbHNlO1xuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkgJiYgIWlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsIFwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIpO1xuICB9XG4gIGFsaWFzID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChzdGF0ZS5hbmNob3JNYXAsIGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuICBzdGF0ZS5yZXN1bHQgPSBzdGF0ZS5hbmNob3JNYXBbYWxpYXNdO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKHJlYWRBbGlhcywgXCJyZWFkQWxpYXNcIik7XG5mdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZSwgcGFyZW50SW5kZW50LCBub2RlQ29udGV4dCwgYWxsb3dUb1NlZWssIGFsbG93Q29tcGFjdCkge1xuICB2YXIgYWxsb3dCbG9ja1N0eWxlcywgYWxsb3dCbG9ja1NjYWxhcnMsIGFsbG93QmxvY2tDb2xsZWN0aW9ucywgaW5kZW50U3RhdHVzID0gMSwgYXROZXdMaW5lID0gZmFsc2UsIGhhc0NvbnRlbnQgPSBmYWxzZSwgdHlwZUluZGV4LCB0eXBlUXVhbnRpdHksIHR5cGVMaXN0LCB0eXBlMiwgZmxvd0luZGVudCwgYmxvY2tJbmRlbnQ7XG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKFwib3BlblwiLCBzdGF0ZSk7XG4gIH1cbiAgc3RhdGUudGFnID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCA9IG51bGw7XG4gIHN0YXRlLnJlc3VsdCA9IG51bGw7XG4gIGFsbG93QmxvY2tTdHlsZXMgPSBhbGxvd0Jsb2NrU2NhbGFycyA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0JMT0NLX0lOID09PSBub2RlQ29udGV4dDtcbiAgaWYgKGFsbG93VG9TZWVrKSB7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7XG4gICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDtcbiAgfVxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG4gICAgYmxvY2tJbmRlbnQgPSBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydDtcbiAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8IHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHwgcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8IHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8IHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwgfHwgc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkUGxhaW5TY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gXCI/XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICBoYXNDb250ZW50ID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBibG9ja0luZGVudCk7XG4gICAgfVxuICB9XG4gIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RhdGUudGFnID09PSBcIj9cIikge1xuICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUua2luZCAhPT0gXCJzY2FsYXJcIikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgXCJzY2FsYXJcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICB9XG4gICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgdHlwZTIgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzW3R5cGVJbmRleF07XG4gICAgICBpZiAodHlwZTIucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUyLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICBzdGF0ZS50YWcgPSB0eXBlMi50YWc7XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RhdGUudGFnICE9PSBcIiFcIikge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKHN0YXRlLnR5cGVNYXBbc3RhdGUua2luZCB8fCBcImZhbGxiYWNrXCJdLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlMiA9IHN0YXRlLnR5cGVNYXBbc3RhdGUua2luZCB8fCBcImZhbGxiYWNrXCJdW3N0YXRlLnRhZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUyID0gbnVsbDtcbiAgICAgIHR5cGVMaXN0ID0gc3RhdGUudHlwZU1hcC5tdWx0aVtzdGF0ZS5raW5kIHx8IFwiZmFsbGJhY2tcIl07XG4gICAgICBmb3IgKHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHR5cGVMaXN0Lmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgICBpZiAoc3RhdGUudGFnLnNsaWNlKDAsIHR5cGVMaXN0W3R5cGVJbmRleF0udGFnLmxlbmd0aCkgPT09IHR5cGVMaXN0W3R5cGVJbmRleF0udGFnKSB7XG4gICAgICAgICAgdHlwZTIgPSB0eXBlTGlzdFt0eXBlSW5kZXhdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdHlwZTIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5rbm93biB0YWcgITxcIiArIHN0YXRlLnRhZyArIFwiPlwiKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlMi5raW5kICE9PSBzdGF0ZS5raW5kKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8XCIgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlMi5raW5kICsgJ1wiLCBub3QgXCInICsgc3RhdGUua2luZCArICdcIicpO1xuICAgIH1cbiAgICBpZiAoIXR5cGUyLnJlc29sdmUoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8XCIgKyBzdGF0ZS50YWcgKyBcIj4gZXhwbGljaXQgdGFnXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlMi5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpO1xuICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0YXRlLmxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgc3RhdGUubGlzdGVuZXIoXCJjbG9zZVwiLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cbl9fbmFtZShjb21wb3NlTm9kZSwgXCJjb21wb3NlTm9kZVwiKTtcbmZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZSkge1xuICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlLnBvc2l0aW9uLCBfcG9zaXRpb24sIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MsIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSwgY2g7XG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdGF0ZS5hbmNob3JNYXAgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gMCB8fCBjaCAhPT0gMzcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG4gICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGhcIik7XG4gICAgfVxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09IDM1KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIH0gd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNfRU9MKGNoKSkgYnJlYWs7XG4gICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgICBkaXJlY3RpdmVBcmdzLnB1c2goc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbikpO1xuICAgIH1cbiAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IDAgJiYgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDQ1ICYmIHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKSA9PT0gNDUgJiYgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDIpID09PSA0NSkge1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWRcIik7XG4gIH1cbiAgY29tcG9zZU5vZGUoc3RhdGUsIHN0YXRlLmxpbmVJbmRlbnQgLSAxLCBDT05URVhUX0JMT0NLX09VVCwgZmFsc2UsIHRydWUpO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiYgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdChzdGF0ZS5pbnB1dC5zbGljZShkb2N1bWVudFN0YXJ0LCBzdGF0ZS5wb3NpdGlvbikpKSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCBcIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudFwiKTtcbiAgfVxuICBzdGF0ZS5kb2N1bWVudHMucHVzaChzdGF0ZS5yZXN1bHQpO1xuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSA0Nikge1xuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCAtIDEpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybjtcbiAgfVxufVxuX19uYW1lKHJlYWREb2N1bWVudCwgXCJyZWFkRG9jdW1lbnRcIik7XG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmIChpbnB1dC5sZW5ndGggIT09IDApIHtcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMTAgJiYgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMTMpIHtcbiAgICAgIGlucHV0ICs9IFwiXFxuXCI7XG4gICAgfVxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KDApID09PSA2NTI3OSkge1xuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgICB9XG4gIH1cbiAgdmFyIHN0YXRlID0gbmV3IFN0YXRlJDEoaW5wdXQsIG9wdGlvbnMpO1xuICB2YXIgbnVsbHBvcyA9IGlucHV0LmluZGV4T2YoXCJcXDBcIik7XG4gIGlmIChudWxscG9zICE9PSAtMSkge1xuICAgIHN0YXRlLnBvc2l0aW9uID0gbnVsbHBvcztcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dFwiKTtcbiAgfVxuICBzdGF0ZS5pbnB1dCArPSBcIlxcMFwiO1xuICB3aGlsZSAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDMyKSB7XG4gICAgc3RhdGUubGluZUluZGVudCArPSAxO1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gIH1cbiAgd2hpbGUgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoIC0gMSkge1xuICAgIHJlYWREb2N1bWVudChzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmRvY3VtZW50cztcbn1cbl9fbmFtZShsb2FkRG9jdW1lbnRzLCBcImxvYWREb2N1bWVudHNcIik7XG5mdW5jdGlvbiBsb2FkQWxsJDEoaW5wdXQsIGl0ZXJhdG9yLCBvcHRpb25zKSB7XG4gIGlmIChpdGVyYXRvciAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlcmF0b3IgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBvcHRpb25zID0gaXRlcmF0b3I7XG4gICAgaXRlcmF0b3IgPSBudWxsO1xuICB9XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcbiAgaWYgKHR5cGVvZiBpdGVyYXRvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50cztcbiAgfVxuICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgaXRlcmF0b3IoZG9jdW1lbnRzW2luZGV4XSk7XG4gIH1cbn1cbl9fbmFtZShsb2FkQWxsJDEsIFwibG9hZEFsbCQxXCIpO1xuZnVuY3Rpb24gbG9hZCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcbiAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBleGNlcHRpb24oXCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZVwiKTtcbn1cbl9fbmFtZShsb2FkJDEsIFwibG9hZCQxXCIpO1xudmFyIGxvYWRBbGxfMSA9IGxvYWRBbGwkMTtcbnZhciBsb2FkXzEgPSBsb2FkJDE7XG52YXIgbG9hZGVyMjUgPSB7XG4gIGxvYWRBbGw6IGxvYWRBbGxfMSxcbiAgbG9hZDogbG9hZF8xXG59O1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBDSEFSX0JPTSA9IDY1Mjc5O1xudmFyIENIQVJfVEFCID0gOTtcbnZhciBDSEFSX0xJTkVfRkVFRCA9IDEwO1xudmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOID0gMTM7XG52YXIgQ0hBUl9TUEFDRSA9IDMyO1xudmFyIENIQVJfRVhDTEFNQVRJT04gPSAzMztcbnZhciBDSEFSX0RPVUJMRV9RVU9URSA9IDM0O1xudmFyIENIQVJfU0hBUlAgPSAzNTtcbnZhciBDSEFSX1BFUkNFTlQgPSAzNztcbnZhciBDSEFSX0FNUEVSU0FORCA9IDM4O1xudmFyIENIQVJfU0lOR0xFX1FVT1RFID0gMzk7XG52YXIgQ0hBUl9BU1RFUklTSyA9IDQyO1xudmFyIENIQVJfQ09NTUEgPSA0NDtcbnZhciBDSEFSX01JTlVTID0gNDU7XG52YXIgQ0hBUl9DT0xPTiA9IDU4O1xudmFyIENIQVJfRVFVQUxTID0gNjE7XG52YXIgQ0hBUl9HUkVBVEVSX1RIQU4gPSA2MjtcbnZhciBDSEFSX1FVRVNUSU9OID0gNjM7XG52YXIgQ0hBUl9DT01NRVJDSUFMX0FUID0gNjQ7XG52YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gOTE7XG52YXIgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDkzO1xudmFyIENIQVJfR1JBVkVfQUNDRU5UID0gOTY7XG52YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7XG52YXIgQ0hBUl9WRVJUSUNBTF9MSU5FID0gMTI0O1xudmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCA9IDEyNTtcbnZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307XG5FU0NBUEVfU0VRVUVOQ0VTWzBdID0gXCJcXFxcMFwiO1xuRVNDQVBFX1NFUVVFTkNFU1s3XSA9IFwiXFxcXGFcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbOF0gPSBcIlxcXFxiXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzldID0gXCJcXFxcdFwiO1xuRVNDQVBFX1NFUVVFTkNFU1sxMF0gPSBcIlxcXFxuXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzExXSA9IFwiXFxcXHZcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMTJdID0gXCJcXFxcZlwiO1xuRVNDQVBFX1NFUVVFTkNFU1sxM10gPSBcIlxcXFxyXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzI3XSA9IFwiXFxcXGVcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMzRdID0gJ1xcXFxcIic7XG5FU0NBUEVfU0VRVUVOQ0VTWzkyXSA9IFwiXFxcXFxcXFxcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMTMzXSA9IFwiXFxcXE5cIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMTYwXSA9IFwiXFxcXF9cIjtcbkVTQ0FQRV9TRVFVRU5DRVNbODIzMl0gPSBcIlxcXFxMXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzgyMzNdID0gXCJcXFxcUFwiO1xudmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gW1xuICBcInlcIixcbiAgXCJZXCIsXG4gIFwieWVzXCIsXG4gIFwiWWVzXCIsXG4gIFwiWUVTXCIsXG4gIFwib25cIixcbiAgXCJPblwiLFxuICBcIk9OXCIsXG4gIFwiblwiLFxuICBcIk5cIixcbiAgXCJub1wiLFxuICBcIk5vXCIsXG4gIFwiTk9cIixcbiAgXCJvZmZcIixcbiAgXCJPZmZcIixcbiAgXCJPRkZcIlxuXTtcbnZhciBERVBSRUNBVEVEX0JBU0U2MF9TWU5UQVggPSAvXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcXC5bMC05X10qKT8kLztcbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEyLCBtYXAyKSB7XG4gIHZhciByZXN1bHQsIGtleXMsIGluZGV4LCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGUyO1xuICBpZiAobWFwMiA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICByZXN1bHQgPSB7fTtcbiAga2V5cyA9IE9iamVjdC5rZXlzKG1hcDIpO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwMlt0YWddKTtcbiAgICBpZiAodGFnLnNsaWNlKDAsIDIpID09PSBcIiEhXCIpIHtcbiAgICAgIHRhZyA9IFwidGFnOnlhbWwub3JnLDIwMDI6XCIgKyB0YWcuc2xpY2UoMik7XG4gICAgfVxuICAgIHR5cGUyID0gc2NoZW1hMi5jb21waWxlZFR5cGVNYXBbXCJmYWxsYmFja1wiXVt0YWddO1xuICAgIGlmICh0eXBlMiAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlMi5zdHlsZUFsaWFzZXMsIHN0eWxlKSkge1xuICAgICAgc3R5bGUgPSB0eXBlMi5zdHlsZUFsaWFzZXNbc3R5bGVdO1xuICAgIH1cbiAgICByZXN1bHRbdGFnXSA9IHN0eWxlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoY29tcGlsZVN0eWxlTWFwLCBcImNvbXBpbGVTdHlsZU1hcFwiKTtcbmZ1bmN0aW9uIGVuY29kZUhleChjaGFyYWN0ZXIpIHtcbiAgdmFyIHN0cmluZywgaGFuZGxlLCBsZW5ndGg7XG4gIHN0cmluZyA9IGNoYXJhY3Rlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgaWYgKGNoYXJhY3RlciA8PSAyNTUpIHtcbiAgICBoYW5kbGUgPSBcInhcIjtcbiAgICBsZW5ndGggPSAyO1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSA2NTUzNSkge1xuICAgIGhhbmRsZSA9IFwidVwiO1xuICAgIGxlbmd0aCA9IDQ7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDQyOTQ5NjcyOTUpIHtcbiAgICBoYW5kbGUgPSBcIlVcIjtcbiAgICBsZW5ndGggPSA4O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBleGNlcHRpb24oXCJjb2RlIHBvaW50IHdpdGhpbiBhIHN0cmluZyBtYXkgbm90IGJlIGdyZWF0ZXIgdGhhbiAweEZGRkZGRkZGXCIpO1xuICB9XG4gIHJldHVybiBcIlxcXFxcIiArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoXCIwXCIsIGxlbmd0aCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufVxuX19uYW1lKGVuY29kZUhleCwgXCJlbmNvZGVIZXhcIik7XG52YXIgUVVPVElOR19UWVBFX1NJTkdMRSA9IDE7XG52YXIgUVVPVElOR19UWVBFX0RPVUJMRSA9IDI7XG5mdW5jdGlvbiBTdGF0ZShvcHRpb25zKSB7XG4gIHRoaXMuc2NoZW1hID0gb3B0aW9uc1tcInNjaGVtYVwiXSB8fCBfZGVmYXVsdDtcbiAgdGhpcy5pbmRlbnQgPSBNYXRoLm1heCgxLCBvcHRpb25zW1wiaW5kZW50XCJdIHx8IDIpO1xuICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBvcHRpb25zW1wibm9BcnJheUluZGVudFwiXSB8fCBmYWxzZTtcbiAgdGhpcy5za2lwSW52YWxpZCA9IG9wdGlvbnNbXCJza2lwSW52YWxpZFwiXSB8fCBmYWxzZTtcbiAgdGhpcy5mbG93TGV2ZWwgPSBjb21tb24uaXNOb3RoaW5nKG9wdGlvbnNbXCJmbG93TGV2ZWxcIl0pID8gLTEgOiBvcHRpb25zW1wiZmxvd0xldmVsXCJdO1xuICB0aGlzLnN0eWxlTWFwID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hLCBvcHRpb25zW1wic3R5bGVzXCJdIHx8IG51bGwpO1xuICB0aGlzLnNvcnRLZXlzID0gb3B0aW9uc1tcInNvcnRLZXlzXCJdIHx8IGZhbHNlO1xuICB0aGlzLmxpbmVXaWR0aCA9IG9wdGlvbnNbXCJsaW5lV2lkdGhcIl0gfHwgODA7XG4gIHRoaXMubm9SZWZzID0gb3B0aW9uc1tcIm5vUmVmc1wiXSB8fCBmYWxzZTtcbiAgdGhpcy5ub0NvbXBhdE1vZGUgPSBvcHRpb25zW1wibm9Db21wYXRNb2RlXCJdIHx8IGZhbHNlO1xuICB0aGlzLmNvbmRlbnNlRmxvdyA9IG9wdGlvbnNbXCJjb25kZW5zZUZsb3dcIl0gfHwgZmFsc2U7XG4gIHRoaXMucXVvdGluZ1R5cGUgPSBvcHRpb25zW1wicXVvdGluZ1R5cGVcIl0gPT09ICdcIicgPyBRVU9USU5HX1RZUEVfRE9VQkxFIDogUVVPVElOR19UWVBFX1NJTkdMRTtcbiAgdGhpcy5mb3JjZVF1b3RlcyA9IG9wdGlvbnNbXCJmb3JjZVF1b3Rlc1wiXSB8fCBmYWxzZTtcbiAgdGhpcy5yZXBsYWNlciA9IHR5cGVvZiBvcHRpb25zW1wicmVwbGFjZXJcIl0gPT09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnNbXCJyZXBsYWNlclwiXSA6IG51bGw7XG4gIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7XG4gIHRoaXMuZXhwbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQ7XG4gIHRoaXMudGFnID0gbnVsbDtcbiAgdGhpcy5yZXN1bHQgPSBcIlwiO1xuICB0aGlzLmR1cGxpY2F0ZXMgPSBbXTtcbiAgdGhpcy51c2VkRHVwbGljYXRlcyA9IG51bGw7XG59XG5fX25hbWUoU3RhdGUsIFwiU3RhdGVcIik7XG5mdW5jdGlvbiBpbmRlbnRTdHJpbmcoc3RyaW5nLCBzcGFjZXMpIHtcbiAgdmFyIGluZCA9IGNvbW1vbi5yZXBlYXQoXCIgXCIsIHNwYWNlcyksIHBvc2l0aW9uID0gMCwgbmV4dCA9IC0xLCByZXN1bHQgPSBcIlwiLCBsaW5lLCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICBuZXh0ID0gc3RyaW5nLmluZGV4T2YoXCJcXG5cIiwgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG4gICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09IFwiXFxuXCIpIHJlc3VsdCArPSBpbmQ7XG4gICAgcmVzdWx0ICs9IGxpbmU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShpbmRlbnRTdHJpbmcsIFwiaW5kZW50U3RyaW5nXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpIHtcbiAgcmV0dXJuIFwiXFxuXCIgKyBjb21tb24ucmVwZWF0KFwiIFwiLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCk7XG59XG5fX25hbWUoZ2VuZXJhdGVOZXh0TGluZSwgXCJnZW5lcmF0ZU5leHRMaW5lXCIpO1xuZnVuY3Rpb24gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHIyKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCB0eXBlMjtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUyID0gc3RhdGUuaW1wbGljaXRUeXBlc1tpbmRleF07XG4gICAgaWYgKHR5cGUyLnJlc29sdmUoc3RyMikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUodGVzdEltcGxpY2l0UmVzb2x2aW5nLCBcInRlc3RJbXBsaWNpdFJlc29sdmluZ1wiKTtcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBjID09PSBDSEFSX1NQQUNFIHx8IGMgPT09IENIQVJfVEFCO1xufVxuX19uYW1lKGlzV2hpdGVzcGFjZSwgXCJpc1doaXRlc3BhY2VcIik7XG5mdW5jdGlvbiBpc1ByaW50YWJsZShjKSB7XG4gIHJldHVybiAzMiA8PSBjICYmIGMgPD0gMTI2IHx8IDE2MSA8PSBjICYmIGMgPD0gNTUyOTUgJiYgYyAhPT0gODIzMiAmJiBjICE9PSA4MjMzIHx8IDU3MzQ0IDw9IGMgJiYgYyA8PSA2NTUzMyAmJiBjICE9PSBDSEFSX0JPTSB8fCA2NTUzNiA8PSBjICYmIGMgPD0gMTExNDExMTtcbn1cbl9fbmFtZShpc1ByaW50YWJsZSwgXCJpc1ByaW50YWJsZVwiKTtcbmZ1bmN0aW9uIGlzTnNDaGFyT3JXaGl0ZXNwYWNlKGMpIHtcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NICYmIGMgIT09IENIQVJfQ0FSUklBR0VfUkVUVVJOICYmIGMgIT09IENIQVJfTElORV9GRUVEO1xufVxuX19uYW1lKGlzTnNDaGFyT3JXaGl0ZXNwYWNlLCBcImlzTnNDaGFyT3JXaGl0ZXNwYWNlXCIpO1xuZnVuY3Rpb24gaXNQbGFpblNhZmUoYywgcHJldiwgaW5ibG9jaykge1xuICB2YXIgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlID0gaXNOc0NoYXJPcldoaXRlc3BhY2UoYyk7XG4gIHZhciBjSXNOc0NoYXIgPSBjSXNOc0NoYXJPcldoaXRlc3BhY2UgJiYgIWlzV2hpdGVzcGFjZShjKTtcbiAgcmV0dXJuIChcbiAgICAvLyBucy1wbGFpbi1zYWZlXG4gICAgKGluYmxvY2sgPyAoXG4gICAgICAvLyBjID0gZmxvdy1pblxuICAgICAgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlXG4gICAgKSA6IGNJc05zQ2hhck9yV2hpdGVzcGFjZSAmJiBjICE9PSBDSEFSX0NPTU1BICYmIGMgIT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMgIT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkgJiYgYyAhPT0gQ0hBUl9TSEFSUCAmJiAhKHByZXYgPT09IENIQVJfQ09MT04gJiYgIWNJc05zQ2hhcikgfHwgaXNOc0NoYXJPcldoaXRlc3BhY2UocHJldikgJiYgIWlzV2hpdGVzcGFjZShwcmV2KSAmJiBjID09PSBDSEFSX1NIQVJQIHx8IHByZXYgPT09IENIQVJfQ09MT04gJiYgY0lzTnNDaGFyXG4gICk7XG59XG5fX25hbWUoaXNQbGFpblNhZmUsIFwiaXNQbGFpblNhZmVcIik7XG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMpIHtcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NICYmICFpc1doaXRlc3BhY2UoYykgJiYgYyAhPT0gQ0hBUl9NSU5VUyAmJiBjICE9PSBDSEFSX1FVRVNUSU9OICYmIGMgIT09IENIQVJfQ09MT04gJiYgYyAhPT0gQ0hBUl9DT01NQSAmJiBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYyAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjICE9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAmJiBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYyAhPT0gQ0hBUl9TSEFSUCAmJiBjICE9PSBDSEFSX0FNUEVSU0FORCAmJiBjICE9PSBDSEFSX0FTVEVSSVNLICYmIGMgIT09IENIQVJfRVhDTEFNQVRJT04gJiYgYyAhPT0gQ0hBUl9WRVJUSUNBTF9MSU5FICYmIGMgIT09IENIQVJfRVFVQUxTICYmIGMgIT09IENIQVJfR1JFQVRFUl9USEFOICYmIGMgIT09IENIQVJfU0lOR0xFX1FVT1RFICYmIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmIGMgIT09IENIQVJfUEVSQ0VOVCAmJiBjICE9PSBDSEFSX0NPTU1FUkNJQUxfQVQgJiYgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7XG59XG5fX25hbWUoaXNQbGFpblNhZmVGaXJzdCwgXCJpc1BsYWluU2FmZUZpcnN0XCIpO1xuZnVuY3Rpb24gaXNQbGFpblNhZmVMYXN0KGMpIHtcbiAgcmV0dXJuICFpc1doaXRlc3BhY2UoYykgJiYgYyAhPT0gQ0hBUl9DT0xPTjtcbn1cbl9fbmFtZShpc1BsYWluU2FmZUxhc3QsIFwiaXNQbGFpblNhZmVMYXN0XCIpO1xuZnVuY3Rpb24gY29kZVBvaW50QXQoc3RyaW5nLCBwb3MpIHtcbiAgdmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQocG9zKSwgc2Vjb25kO1xuICBpZiAoZmlyc3QgPj0gNTUyOTYgJiYgZmlyc3QgPD0gNTYzMTkgJiYgcG9zICsgMSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBzZWNvbmQgPSBzdHJpbmcuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoc2Vjb25kID49IDU2MzIwICYmIHNlY29uZCA8PSA1NzM0Mykge1xuICAgICAgcmV0dXJuIChmaXJzdCAtIDU1Mjk2KSAqIDEwMjQgKyBzZWNvbmQgLSA1NjMyMCArIDY1NTM2O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5fX25hbWUoY29kZVBvaW50QXQsIFwiY29kZVBvaW50QXRcIik7XG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykge1xuICB2YXIgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cbl9fbmFtZShuZWVkSW5kZW50SW5kaWNhdG9yLCBcIm5lZWRJbmRlbnRJbmRpY2F0b3JcIik7XG52YXIgU1RZTEVfUExBSU4gPSAxO1xudmFyIFNUWUxFX1NJTkdMRSA9IDI7XG52YXIgU1RZTEVfTElURVJBTCA9IDM7XG52YXIgU1RZTEVfRk9MREVEID0gNDtcbnZhciBTVFlMRV9ET1VCTEUgPSA1O1xuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCwgdGVzdEFtYmlndW91c1R5cGUsIHF1b3RpbmdUeXBlLCBmb3JjZVF1b3RlcywgaW5ibG9jaykge1xuICB2YXIgaTtcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgcHJldkNoYXIgPSBudWxsO1xuICB2YXIgaGFzTGluZUJyZWFrID0gZmFsc2U7XG4gIHZhciBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZTtcbiAgdmFyIHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xO1xuICB2YXIgcHJldmlvdXNMaW5lQnJlYWsgPSAtMTtcbiAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChjb2RlUG9pbnRBdChzdHJpbmcsIDApKSAmJiBpc1BsYWluU2FmZUxhc3QoY29kZVBvaW50QXQoc3RyaW5nLCBzdHJpbmcubGVuZ3RoIC0gMSkpO1xuICBpZiAoc2luZ2xlTGluZU9ubHkgfHwgZm9yY2VRdW90ZXMpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSA2NTUzNiA/IGkgKz0gMiA6IGkrKykge1xuICAgICAgY2hhciA9IGNvZGVQb2ludEF0KHN0cmluZywgaSk7XG4gICAgICBpZiAoIWlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gICAgICB9XG4gICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZDaGFyLCBpbmJsb2NrKTtcbiAgICAgIHByZXZDaGFyID0gY2hhcjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGNoYXIgPj0gNjU1MzYgPyBpICs9IDIgOiBpKyspIHtcbiAgICAgIGNoYXIgPSBjb2RlUG9pbnRBdChzdHJpbmcsIGkpO1xuICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IC8vIEZvbGRhYmxlIGxpbmUgPSB0b28gbG9uZywgYW5kIG5vdCBtb3JlLWluZGVudGVkLlxuICAgICAgICAgIGkgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiYgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09IFwiIFwiO1xuICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhciwgcHJldkNoYXIsIGluYmxvY2spO1xuICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgc2hvdWxkVHJhY2tXaWR0aCAmJiAoaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJiBzdHJpbmdbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gXCIgXCIpO1xuICB9XG4gIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHtcbiAgICBpZiAocGxhaW4gJiYgIWZvcmNlUXVvdGVzICYmICF0ZXN0QW1iaWd1b3VzVHlwZShzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gU1RZTEVfUExBSU47XG4gICAgfVxuICAgIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbiAgfVxuICBpZiAoaW5kZW50UGVyTGV2ZWwgPiA5ICYmIG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSkge1xuICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gIH1cbiAgaWYgKCFmb3JjZVF1b3Rlcykge1xuICAgIHJldHVybiBoYXNGb2xkYWJsZUxpbmUgPyBTVFlMRV9GT0xERUQgOiBTVFlMRV9MSVRFUkFMO1xuICB9XG4gIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbn1cbl9fbmFtZShjaG9vc2VTY2FsYXJTdHlsZSwgXCJjaG9vc2VTY2FsYXJTdHlsZVwiKTtcbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmcsIGxldmVsLCBpc2tleSwgaW5ibG9jaykge1xuICBzdGF0ZS5kdW1wID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZS5xdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/ICdcIlwiJyA6IFwiJydcIjtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5ub0NvbXBhdE1vZGUpIHtcbiAgICAgIGlmIChERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZykgIT09IC0xIHx8IERFUFJFQ0FURURfQkFTRTYwX1NZTlRBWC50ZXN0KHN0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnF1b3RpbmdUeXBlID09PSBRVU9USU5HX1RZUEVfRE9VQkxFID8gJ1wiJyArIHN0cmluZyArICdcIicgOiBcIidcIiArIHN0cmluZyArIFwiJ1wiO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50ICogTWF0aC5tYXgoMSwgbGV2ZWwpO1xuICAgIHZhciBsaW5lV2lkdGggPSBzdGF0ZS5saW5lV2lkdGggPT09IC0xID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50KTtcbiAgICB2YXIgc2luZ2xlTGluZU9ubHkgPSBpc2tleSB8fCBzdGF0ZS5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZS5mbG93TGV2ZWw7XG4gICAgZnVuY3Rpb24gdGVzdEFtYmlndWl0eShzdHJpbmcyKSB7XG4gICAgICByZXR1cm4gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHJpbmcyKTtcbiAgICB9XG4gICAgX19uYW1lKHRlc3RBbWJpZ3VpdHksIFwidGVzdEFtYmlndWl0eVwiKTtcbiAgICBzd2l0Y2ggKGNob29zZVNjYWxhclN0eWxlKFxuICAgICAgc3RyaW5nLFxuICAgICAgc2luZ2xlTGluZU9ubHksXG4gICAgICBzdGF0ZS5pbmRlbnQsXG4gICAgICBsaW5lV2lkdGgsXG4gICAgICB0ZXN0QW1iaWd1aXR5LFxuICAgICAgc3RhdGUucXVvdGluZ1R5cGUsXG4gICAgICBzdGF0ZS5mb3JjZVF1b3RlcyAmJiAhaXNrZXksXG4gICAgICBpbmJsb2NrXG4gICAgKSkge1xuICAgICAgY2FzZSBTVFlMRV9QTEFJTjpcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOlxuICAgICAgICByZXR1cm4gXCInXCIgKyBzdHJpbmcucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6XG4gICAgICAgIHJldHVybiBcInxcIiArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KSArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCkpO1xuICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6XG4gICAgICAgIHJldHVybiBcIj5cIiArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KSArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhmb2xkU3RyaW5nKHN0cmluZywgbGluZVdpZHRoKSwgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nKSArICdcIic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGVcIik7XG4gICAgfVxuICB9KCk7XG59XG5fX25hbWUod3JpdGVTY2FsYXIsIFwid3JpdGVTY2FsYXJcIik7XG5mdW5jdGlvbiBibG9ja0hlYWRlcihzdHJpbmcsIGluZGVudFBlckxldmVsKSB7XG4gIHZhciBpbmRlbnRJbmRpY2F0b3IgPSBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykgPyBTdHJpbmcoaW5kZW50UGVyTGV2ZWwpIDogXCJcIjtcbiAgdmFyIGNsaXAgPSBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSBcIlxcblwiO1xuICB2YXIga2VlcCA9IGNsaXAgJiYgKHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMl0gPT09IFwiXFxuXCIgfHwgc3RyaW5nID09PSBcIlxcblwiKTtcbiAgdmFyIGNob21wID0ga2VlcCA/IFwiK1wiIDogY2xpcCA/IFwiXCIgOiBcIi1cIjtcbiAgcmV0dXJuIGluZGVudEluZGljYXRvciArIGNob21wICsgXCJcXG5cIjtcbn1cbl9fbmFtZShibG9ja0hlYWRlciwgXCJibG9ja0hlYWRlclwiKTtcbmZ1bmN0aW9uIGRyb3BFbmRpbmdOZXdsaW5lKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJcXG5cIiA/IHN0cmluZy5zbGljZSgwLCAtMSkgOiBzdHJpbmc7XG59XG5fX25hbWUoZHJvcEVuZGluZ05ld2xpbmUsIFwiZHJvcEVuZGluZ05ld2xpbmVcIik7XG5mdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZywgd2lkdGgpIHtcbiAgdmFyIGxpbmVSZSA9IC8oXFxuKykoW15cXG5dKikvZztcbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuZXh0TEYgPSBzdHJpbmcuaW5kZXhPZihcIlxcblwiKTtcbiAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nLmxlbmd0aDtcbiAgICBsaW5lUmUubGFzdEluZGV4ID0gbmV4dExGO1xuICAgIHJldHVybiBmb2xkTGluZShzdHJpbmcuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpO1xuICB9KCk7XG4gIHZhciBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nWzBdID09PSBcIlxcblwiIHx8IHN0cmluZ1swXSA9PT0gXCIgXCI7XG4gIHZhciBtb3JlSW5kZW50ZWQ7XG4gIHZhciBtYXRjaDtcbiAgd2hpbGUgKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkge1xuICAgIHZhciBwcmVmaXggPSBtYXRjaFsxXSwgbGluZSA9IG1hdGNoWzJdO1xuICAgIG1vcmVJbmRlbnRlZCA9IGxpbmVbMF0gPT09IFwiIFwiO1xuICAgIHJlc3VsdCArPSBwcmVmaXggKyAoIXByZXZNb3JlSW5kZW50ZWQgJiYgIW1vcmVJbmRlbnRlZCAmJiBsaW5lICE9PSBcIlwiID8gXCJcXG5cIiA6IFwiXCIpICsgZm9sZExpbmUobGluZSwgd2lkdGgpO1xuICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShmb2xkU3RyaW5nLCBcImZvbGRTdHJpbmdcIik7XG5mdW5jdGlvbiBmb2xkTGluZShsaW5lLCB3aWR0aCkge1xuICBpZiAobGluZSA9PT0gXCJcIiB8fCBsaW5lWzBdID09PSBcIiBcIikgcmV0dXJuIGxpbmU7XG4gIHZhciBicmVha1JlID0gLyBbXiBdL2c7XG4gIHZhciBtYXRjaDtcbiAgdmFyIHN0YXJ0ID0gMCwgZW5kLCBjdXJyID0gMCwgbmV4dCA9IDA7XG4gIHZhciByZXN1bHQgPSBcIlwiO1xuICB3aGlsZSAobWF0Y2ggPSBicmVha1JlLmV4ZWMobGluZSkpIHtcbiAgICBuZXh0ID0gbWF0Y2guaW5kZXg7XG4gICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7XG4gICAgICBlbmQgPSBjdXJyID4gc3RhcnQgPyBjdXJyIDogbmV4dDtcbiAgICAgIHJlc3VsdCArPSBcIlxcblwiICsgbGluZS5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIHN0YXJ0ID0gZW5kICsgMTtcbiAgICB9XG4gICAgY3VyciA9IG5leHQ7XG4gIH1cbiAgcmVzdWx0ICs9IFwiXFxuXCI7XG4gIGlmIChsaW5lLmxlbmd0aCAtIHN0YXJ0ID4gd2lkdGggJiYgY3VyciA+IHN0YXJ0KSB7XG4gICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQsIGN1cnIpICsgXCJcXG5cIiArIGxpbmUuc2xpY2UoY3VyciArIDEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LnNsaWNlKDEpO1xufVxuX19uYW1lKGZvbGRMaW5lLCBcImZvbGRMaW5lXCIpO1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gXCJcIjtcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgZXNjYXBlU2VxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGNoYXIgPj0gNjU1MzYgPyBpICs9IDIgOiBpKyspIHtcbiAgICBjaGFyID0gY29kZVBvaW50QXQoc3RyaW5nLCBpKTtcbiAgICBlc2NhcGVTZXEgPSBFU0NBUEVfU0VRVUVOQ0VTW2NoYXJdO1xuICAgIGlmICghZXNjYXBlU2VxICYmIGlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nW2ldO1xuICAgICAgaWYgKGNoYXIgPj0gNjU1MzYpIHJlc3VsdCArPSBzdHJpbmdbaSArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgKz0gZXNjYXBlU2VxIHx8IGVuY29kZUhleChjaGFyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShlc2NhcGVTdHJpbmcsIFwiZXNjYXBlU3RyaW5nXCIpO1xuZnVuY3Rpb24gd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSBcIlwiLCBfdGFnID0gc3RhdGUudGFnLCBpbmRleCwgbGVuZ3RoLCB2YWx1ZTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgdmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgU3RyaW5nKGluZGV4KSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgdmFsdWUsIGZhbHNlLCBmYWxzZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiICYmIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG51bGwsIGZhbHNlLCBmYWxzZSkpIHtcbiAgICAgIGlmIChfcmVzdWx0ICE9PSBcIlwiKSBfcmVzdWx0ICs9IFwiLFwiICsgKCFzdGF0ZS5jb25kZW5zZUZsb3cgPyBcIiBcIiA6IFwiXCIpO1xuICAgICAgX3Jlc3VsdCArPSBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gXCJbXCIgKyBfcmVzdWx0ICsgXCJdXCI7XG59XG5fX25hbWUod3JpdGVGbG93U2VxdWVuY2UsIFwid3JpdGVGbG93U2VxdWVuY2VcIik7XG5mdW5jdGlvbiB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSBcIlwiLCBfdGFnID0gc3RhdGUudGFnLCBpbmRleCwgbGVuZ3RoLCB2YWx1ZTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgdmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgU3RyaW5nKGluZGV4KSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIHZhbHVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiICYmIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBudWxsLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSBcIlwiKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBfcmVzdWx0ICs9IFwiLVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdCArPSBcIi0gXCI7XG4gICAgICB9XG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSBfcmVzdWx0IHx8IFwiW11cIjtcbn1cbl9fbmFtZSh3cml0ZUJsb2NrU2VxdWVuY2UsIFwid3JpdGVCbG9ja1NlcXVlbmNlXCIpO1xuZnVuY3Rpb24gd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCkge1xuICB2YXIgX3Jlc3VsdCA9IFwiXCIsIF90YWcgPSBzdGF0ZS50YWcsIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLCBpbmRleCwgbGVuZ3RoLCBvYmplY3RLZXksIG9iamVjdFZhbHVlLCBwYWlyQnVmZmVyO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpckJ1ZmZlciA9IFwiXCI7XG4gICAgaWYgKF9yZXN1bHQgIT09IFwiXCIpIHBhaXJCdWZmZXIgKz0gXCIsIFwiO1xuICAgIGlmIChzdGF0ZS5jb25kZW5zZUZsb3cpIHBhaXJCdWZmZXIgKz0gJ1wiJztcbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgb2JqZWN0VmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSk7XG4gICAgfVxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSBcIj8gXCI7XG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiBcIlwiKSArIFwiOlwiICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/IFwiXCIgOiBcIiBcIik7XG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcbiAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7XG4gIH1cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IFwie1wiICsgX3Jlc3VsdCArIFwifVwiO1xufVxuX19uYW1lKHdyaXRlRmxvd01hcHBpbmcsIFwid3JpdGVGbG93TWFwcGluZ1wiKTtcbmZ1bmN0aW9uIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gXCJcIiwgX3RhZyA9IHN0YXRlLnRhZywgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksIGluZGV4LCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIGV4cGxpY2l0UGFpciwgcGFpckJ1ZmZlcjtcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpO1xuICB9IGVsc2UgaWYgKHN0YXRlLnNvcnRLZXlzKSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcInNvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSBcIlwiO1xuICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSBcIlwiKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIG9iamVjdFZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RLZXksIHRydWUsIHRydWUsIHRydWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZXhwbGljaXRQYWlyID0gc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gXCI/XCIgfHwgc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQ7XG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9IFwiP1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFpckJ1ZmZlciArPSBcIj8gXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0VmFsdWUsIHRydWUsIGV4cGxpY2l0UGFpcikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IFwiOlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWlyQnVmZmVyICs9IFwiOiBcIjtcbiAgICB9XG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wO1xuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gX3Jlc3VsdCB8fCBcInt9XCI7XG59XG5fX25hbWUod3JpdGVCbG9ja01hcHBpbmcsIFwid3JpdGVCbG9ja01hcHBpbmdcIik7XG5mdW5jdGlvbiBkZXRlY3RUeXBlMihzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUyLCBzdHlsZTtcbiAgdHlwZUxpc3QgPSBleHBsaWNpdCA/IHN0YXRlLmV4cGxpY2l0VHlwZXMgOiBzdGF0ZS5pbXBsaWNpdFR5cGVzO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUyID0gdHlwZUxpc3RbaW5kZXhdO1xuICAgIGlmICgodHlwZTIuaW5zdGFuY2VPZiB8fCB0eXBlMi5wcmVkaWNhdGUpICYmICghdHlwZTIuaW5zdGFuY2VPZiB8fCB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmIG9iamVjdCBpbnN0YW5jZW9mIHR5cGUyLmluc3RhbmNlT2YpICYmICghdHlwZTIucHJlZGljYXRlIHx8IHR5cGUyLnByZWRpY2F0ZShvYmplY3QpKSkge1xuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGlmICh0eXBlMi5tdWx0aSAmJiB0eXBlMi5yZXByZXNlbnROYW1lKSB7XG4gICAgICAgICAgc3RhdGUudGFnID0gdHlwZTIucmVwcmVzZW50TmFtZShvYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUyLnRhZztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudGFnID0gXCI/XCI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZTIucmVwcmVzZW50KSB7XG4gICAgICAgIHN0eWxlID0gc3RhdGUuc3R5bGVNYXBbdHlwZTIudGFnXSB8fCB0eXBlMi5kZWZhdWx0U3R5bGU7XG4gICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbCh0eXBlMi5yZXByZXNlbnQpID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZTIucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUyLnJlcHJlc2VudCwgc3R5bGUpKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUyLnJlcHJlc2VudFtzdHlsZV0ob2JqZWN0LCBzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIiE8XCIgKyB0eXBlMi50YWcgKyAnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgXCInICsgc3R5bGUgKyAnXCIgc3R5bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoZGV0ZWN0VHlwZTIsIFwiZGV0ZWN0VHlwZVwiKTtcbmZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5LCBpc2Jsb2Nrc2VxKSB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG4gIGlmICghZGV0ZWN0VHlwZTIoc3RhdGUsIG9iamVjdCwgZmFsc2UpKSB7XG4gICAgZGV0ZWN0VHlwZTIoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cbiAgdmFyIHR5cGUyID0gX3RvU3RyaW5nLmNhbGwoc3RhdGUuZHVtcCk7XG4gIHZhciBpbmJsb2NrID0gYmxvY2s7XG4gIHZhciB0YWdTdHI7XG4gIGlmIChibG9jaykge1xuICAgIGJsb2NrID0gc3RhdGUuZmxvd0xldmVsIDwgMCB8fCBzdGF0ZS5mbG93TGV2ZWwgPiBsZXZlbDtcbiAgfVxuICB2YXIgb2JqZWN0T3JBcnJheSA9IHR5cGUyID09PSBcIltvYmplY3QgT2JqZWN0XVwiIHx8IHR5cGUyID09PSBcIltvYmplY3QgQXJyYXldXCIsIGR1cGxpY2F0ZUluZGV4LCBkdXBsaWNhdGU7XG4gIGlmIChvYmplY3RPckFycmF5KSB7XG4gICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7XG4gIH1cbiAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09IFwiP1wiIHx8IGR1cGxpY2F0ZSB8fCBzdGF0ZS5pbmRlbnQgIT09IDIgJiYgbGV2ZWwgPiAwKSB7XG4gICAgY29tcGFjdCA9IGZhbHNlO1xuICB9XG4gIGlmIChkdXBsaWNhdGUgJiYgc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgc3RhdGUuZHVtcCA9IFwiKnJlZl9cIiArIGR1cGxpY2F0ZUluZGV4O1xuICB9IGVsc2Uge1xuICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZTIgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgIGlmIChibG9jayAmJiBPYmplY3Qua2V5cyhzdGF0ZS5kdW1wKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSBcIiZyZWZfXCIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSBcIiZyZWZfXCIgKyBkdXBsaWNhdGVJbmRleCArIFwiIFwiICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZTIgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgaWYgKGJsb2NrICYmIHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGlmIChzdGF0ZS5ub0FycmF5SW5kZW50ICYmICFpc2Jsb2Nrc2VxICYmIGxldmVsID4gMCkge1xuICAgICAgICAgIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwgLSAxLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9IFwiJnJlZl9cIiArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSBcIiZyZWZfXCIgKyBkdXBsaWNhdGVJbmRleCArIFwiIFwiICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZTIgPT09IFwiW29iamVjdCBTdHJpbmddXCIpIHtcbiAgICAgIGlmIChzdGF0ZS50YWcgIT09IFwiP1wiKSB7XG4gICAgICAgIHdyaXRlU2NhbGFyKHN0YXRlLCBzdGF0ZS5kdW1wLCBsZXZlbCwgaXNrZXksIGluYmxvY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZTIgPT09IFwiW29iamVjdCBVbmRlZmluZWRdXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgXCIgKyB0eXBlMik7XG4gICAgfVxuICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSBcIj9cIikge1xuICAgICAgdGFnU3RyID0gZW5jb2RlVVJJKFxuICAgICAgICBzdGF0ZS50YWdbMF0gPT09IFwiIVwiID8gc3RhdGUudGFnLnNsaWNlKDEpIDogc3RhdGUudGFnXG4gICAgICApLnJlcGxhY2UoLyEvZywgXCIlMjFcIik7XG4gICAgICBpZiAoc3RhdGUudGFnWzBdID09PSBcIiFcIikge1xuICAgICAgICB0YWdTdHIgPSBcIiFcIiArIHRhZ1N0cjtcbiAgICAgIH0gZWxzZSBpZiAodGFnU3RyLnNsaWNlKDAsIDE4KSA9PT0gXCJ0YWc6eWFtbC5vcmcsMjAwMjpcIikge1xuICAgICAgICB0YWdTdHIgPSBcIiEhXCIgKyB0YWdTdHIuc2xpY2UoMTgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnU3RyID0gXCIhPFwiICsgdGFnU3RyICsgXCI+XCI7XG4gICAgICB9XG4gICAgICBzdGF0ZS5kdW1wID0gdGFnU3RyICsgXCIgXCIgKyBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZSh3cml0ZU5vZGUsIFwid3JpdGVOb2RlXCIpO1xuZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlKSB7XG4gIHZhciBvYmplY3RzID0gW10sIGR1cGxpY2F0ZXNJbmRleGVzID0gW10sIGluZGV4LCBsZW5ndGg7XG4gIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZHVwbGljYXRlc0luZGV4ZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHN0YXRlLmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4XV0pO1xuICB9XG4gIHN0YXRlLnVzZWREdXBsaWNhdGVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG59XG5fX25hbWUoZ2V0RHVwbGljYXRlUmVmZXJlbmNlcywgXCJnZXREdXBsaWNhdGVSZWZlcmVuY2VzXCIpO1xuZnVuY3Rpb24gaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcykge1xuICB2YXIgb2JqZWN0S2V5TGlzdCwgaW5kZXgsIGxlbmd0aDtcbiAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgaW5kZXggPSBvYmplY3RzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoZHVwbGljYXRlc0luZGV4ZXMuaW5kZXhPZihpbmRleCkgPT09IC0xKSB7XG4gICAgICAgIGR1cGxpY2F0ZXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4XSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtvYmplY3RLZXlMaXN0W2luZGV4XV0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuX19uYW1lKGluc3BlY3ROb2RlLCBcImluc3BlY3ROb2RlXCIpO1xuZnVuY3Rpb24gZHVtcCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG4gIGlmICghc3RhdGUubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7XG4gIHZhciB2YWx1ZSA9IGlucHV0O1xuICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwoeyBcIlwiOiB2YWx1ZSB9LCBcIlwiLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgMCwgdmFsdWUsIHRydWUsIHRydWUpKSByZXR1cm4gc3RhdGUuZHVtcCArIFwiXFxuXCI7XG4gIHJldHVybiBcIlwiO1xufVxuX19uYW1lKGR1bXAkMSwgXCJkdW1wJDFcIik7XG52YXIgZHVtcF8xID0gZHVtcCQxO1xudmFyIGR1bXBlciA9IHtcbiAgZHVtcDogZHVtcF8xXG59O1xuZnVuY3Rpb24gcmVuYW1lZChmcm9tLCB0bykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRnVuY3Rpb24geWFtbC5cIiArIGZyb20gKyBcIiBpcyByZW1vdmVkIGluIGpzLXlhbWwgNC4gVXNlIHlhbWwuXCIgKyB0byArIFwiIGluc3RlYWQsIHdoaWNoIGlzIG5vdyBzYWZlIGJ5IGRlZmF1bHQuXCIpO1xuICB9O1xufVxuX19uYW1lKHJlbmFtZWQsIFwicmVuYW1lZFwiKTtcbnZhciBKU09OX1NDSEVNQSA9IGpzb247XG52YXIgbG9hZCA9IGxvYWRlcjI1LmxvYWQ7XG52YXIgbG9hZEFsbCA9IGxvYWRlcjI1LmxvYWRBbGw7XG52YXIgZHVtcCA9IGR1bXBlci5kdW1wO1xudmFyIHNhZmVMb2FkID0gcmVuYW1lZChcInNhZmVMb2FkXCIsIFwibG9hZFwiKTtcbnZhciBzYWZlTG9hZEFsbCA9IHJlbmFtZWQoXCJzYWZlTG9hZEFsbFwiLCBcImxvYWRBbGxcIik7XG52YXIgc2FmZUR1bXAgPSByZW5hbWVkKFwic2FmZUR1bXBcIiwgXCJkdW1wXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZnJvbnRtYXR0ZXIudHNcbmZ1bmN0aW9uIGV4dHJhY3RGcm9udE1hdHRlcih0ZXh0KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKGZyb250TWF0dGVyUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dCxcbiAgICAgIG1ldGFkYXRhOiB7fVxuICAgIH07XG4gIH1cbiAgbGV0IHBhcnNlZCA9IGxvYWQobWF0Y2hlc1sxXSwge1xuICAgIC8vIFRvIHN1cHBvcnQgY29uZmlnLCB3ZSBuZWVkIEpTT04gc2NoZW1hLlxuICAgIC8vIGh0dHBzOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDMyMzFcbiAgICBzY2hlbWE6IEpTT05fU0NIRU1BXG4gIH0pID8/IHt9O1xuICBwYXJzZWQgPSB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWQgOiB7fTtcbiAgY29uc3QgbWV0YWRhdGEgPSB7fTtcbiAgaWYgKHBhcnNlZC5kaXNwbGF5TW9kZSkge1xuICAgIG1ldGFkYXRhLmRpc3BsYXlNb2RlID0gcGFyc2VkLmRpc3BsYXlNb2RlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHBhcnNlZC50aXRsZSkge1xuICAgIG1ldGFkYXRhLnRpdGxlID0gcGFyc2VkLnRpdGxlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHBhcnNlZC5jb25maWcpIHtcbiAgICBtZXRhZGF0YS5jb25maWcgPSBwYXJzZWQuY29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgdGV4dDogdGV4dC5zbGljZShtYXRjaGVzWzBdLmxlbmd0aCksXG4gICAgbWV0YWRhdGFcbiAgfTtcbn1cbl9fbmFtZShleHRyYWN0RnJvbnRNYXR0ZXIsIFwiZXh0cmFjdEZyb250TWF0dGVyXCIpO1xuXG4vLyBzcmMvcHJlcHJvY2Vzcy50c1xudmFyIGNsZWFudXBUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29kZSkgPT4ge1xuICByZXR1cm4gY29kZS5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLnJlcGxhY2UoXG4gICAgLzwoXFx3KykoW14+XSopPi9nLFxuICAgIChtYXRjaCwgdGFnLCBhdHRyaWJ1dGVzKSA9PiBcIjxcIiArIHRhZyArIGF0dHJpYnV0ZXMucmVwbGFjZSgvPVwiKFteXCJdKilcIi9nLCBcIj0nJDEnXCIpICsgXCI+XCJcbiAgKTtcbn0sIFwiY2xlYW51cFRleHRcIik7XG52YXIgcHJvY2Vzc0Zyb250bWF0dGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29kZSkgPT4ge1xuICBjb25zdCB7IHRleHQsIG1ldGFkYXRhIH0gPSBleHRyYWN0RnJvbnRNYXR0ZXIoY29kZSk7XG4gIGNvbnN0IHsgZGlzcGxheU1vZGUsIHRpdGxlLCBjb25maWcgPSB7fSB9ID0gbWV0YWRhdGE7XG4gIGlmIChkaXNwbGF5TW9kZSkge1xuICAgIGlmICghY29uZmlnLmdhbnR0KSB7XG4gICAgICBjb25maWcuZ2FudHQgPSB7fTtcbiAgICB9XG4gICAgY29uZmlnLmdhbnR0LmRpc3BsYXlNb2RlID0gZGlzcGxheU1vZGU7XG4gIH1cbiAgcmV0dXJuIHsgdGl0bGUsIGNvbmZpZywgdGV4dCB9O1xufSwgXCJwcm9jZXNzRnJvbnRtYXR0ZXJcIik7XG52YXIgcHJvY2Vzc0RpcmVjdGl2ZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb2RlKSA9PiB7XG4gIGNvbnN0IGluaXREaXJlY3RpdmUgPSB1dGlsc19kZWZhdWx0LmRldGVjdEluaXQoY29kZSkgPz8ge307XG4gIGNvbnN0IHdyYXBEaXJlY3RpdmVzID0gdXRpbHNfZGVmYXVsdC5kZXRlY3REaXJlY3RpdmUoY29kZSwgXCJ3cmFwXCIpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh3cmFwRGlyZWN0aXZlcykpIHtcbiAgICBpbml0RGlyZWN0aXZlLndyYXAgPSB3cmFwRGlyZWN0aXZlcy5zb21lKCh7IHR5cGU6IHR5cGUyIH0pID0+IHR5cGUyID09PSBcIndyYXBcIik7XG4gIH0gZWxzZSBpZiAod3JhcERpcmVjdGl2ZXM/LnR5cGUgPT09IFwid3JhcFwiKSB7XG4gICAgaW5pdERpcmVjdGl2ZS53cmFwID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRleHQ6IHJlbW92ZURpcmVjdGl2ZXMoY29kZSksXG4gICAgZGlyZWN0aXZlOiBpbml0RGlyZWN0aXZlXG4gIH07XG59LCBcInByb2Nlc3NEaXJlY3RpdmVzXCIpO1xuZnVuY3Rpb24gcHJlcHJvY2Vzc0RpYWdyYW0oY29kZSkge1xuICBjb25zdCBjbGVhbmVkQ29kZSA9IGNsZWFudXBUZXh0KGNvZGUpO1xuICBjb25zdCBmcm9udE1hdHRlclJlc3VsdCA9IHByb2Nlc3NGcm9udG1hdHRlcihjbGVhbmVkQ29kZSk7XG4gIGNvbnN0IGRpcmVjdGl2ZVJlc3VsdCA9IHByb2Nlc3NEaXJlY3RpdmVzKGZyb250TWF0dGVyUmVzdWx0LnRleHQpO1xuICBjb25zdCBjb25maWcgPSBjbGVhbkFuZE1lcmdlKGZyb250TWF0dGVyUmVzdWx0LmNvbmZpZywgZGlyZWN0aXZlUmVzdWx0LmRpcmVjdGl2ZSk7XG4gIGNvZGUgPSBjbGVhbnVwQ29tbWVudHMoZGlyZWN0aXZlUmVzdWx0LnRleHQpO1xuICByZXR1cm4ge1xuICAgIGNvZGUsXG4gICAgdGl0bGU6IGZyb250TWF0dGVyUmVzdWx0LnRpdGxlLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuX19uYW1lKHByZXByb2Nlc3NEaWFncmFtLCBcInByZXByb2Nlc3NEaWFncmFtXCIpO1xuXG4vLyBzcmMvdXRpbHMvYmFzZTY0LnRzXG5mdW5jdGlvbiB0b0Jhc2U2NChzdHIyKSB7XG4gIGNvbnN0IHV0ZjhCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIyKTtcbiAgY29uc3QgdXRmOFN0ciA9IEFycmF5LmZyb20odXRmOEJ5dGVzLCAoYnl0ZSkgPT4gU3RyaW5nLmZyb21Db2RlUG9pbnQoYnl0ZSkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBidG9hKHV0ZjhTdHIpO1xufVxuX19uYW1lKHRvQmFzZTY0LCBcInRvQmFzZTY0XCIpO1xuXG4vLyBzcmMvbWVybWFpZEFQSS50c1xudmFyIE1BWF9URVhUTEVOR1RIID0gNWU0O1xudmFyIE1BWF9URVhUTEVOR1RIX0VYQ0VFREVEX01TRyA9IFwiZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYVwiO1xudmFyIFNFQ1VSSVRZX0xWTF9TQU5EQk9YID0gXCJzYW5kYm94XCI7XG52YXIgU0VDVVJJVFlfTFZMX0xPT1NFID0gXCJsb29zZVwiO1xudmFyIFhNTE5TX1NWR19TVEQgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG52YXIgWE1MTlNfWExJTktfU1REID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG52YXIgWE1MTlNfWEhUTUxfU1REID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG52YXIgSUZSQU1FX1dJRFRIID0gXCIxMDAlXCI7XG52YXIgSUZSQU1FX0hFSUdIVCA9IFwiMTAwJVwiO1xudmFyIElGUkFNRV9TVFlMRVMgPSBcImJvcmRlcjowO21hcmdpbjowO1wiO1xudmFyIElGUkFNRV9CT0RZX1NUWUxFID0gXCJtYXJnaW46MFwiO1xudmFyIElGUkFNRV9TQU5EQk9YX09QVFMgPSBcImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHNcIjtcbnZhciBJRlJBTUVfTk9UX1NVUFBPUlRFRF9NU0cgPSAnVGhlIFwiaWZyYW1lXCIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLic7XG52YXIgRE9NUFVSSUZZX1RBR1MgPSBbXCJmb3JlaWdub2JqZWN0XCJdO1xudmFyIERPTVBVUklGWV9BVFRSID0gW1wiZG9taW5hbnQtYmFzZWxpbmVcIl07XG5mdW5jdGlvbiBwcm9jZXNzQW5kU2V0Q29uZmlncyh0ZXh0KSB7XG4gIGNvbnN0IHByb2Nlc3NlZCA9IHByZXByb2Nlc3NEaWFncmFtKHRleHQpO1xuICByZXNldCgpO1xuICBhZGREaXJlY3RpdmUocHJvY2Vzc2VkLmNvbmZpZyA/PyB7fSk7XG4gIHJldHVybiBwcm9jZXNzZWQ7XG59XG5fX25hbWUocHJvY2Vzc0FuZFNldENvbmZpZ3MsIFwicHJvY2Vzc0FuZFNldENvbmZpZ3NcIik7XG5hc3luYyBmdW5jdGlvbiBwYXJzZSh0ZXh0LCBwYXJzZU9wdGlvbnMpIHtcbiAgYWRkRGlhZ3JhbXMoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGNvZGUgfSA9IHByb2Nlc3NBbmRTZXRDb25maWdzKHRleHQpO1xuICAgIGNvbnN0IGRpYWdyYW0yID0gYXdhaXQgZ2V0RGlhZ3JhbUZyb21UZXh0KGNvZGUpO1xuICAgIHJldHVybiB7IGRpYWdyYW1UeXBlOiBkaWFncmFtMi50eXBlIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHBhcnNlT3B0aW9ucz8uc3VwcHJlc3NFcnJvcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbl9fbmFtZShwYXJzZSwgXCJwYXJzZVwiKTtcbnZhciBjc3NJbXBvcnRhbnRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjc3NDbGFzcywgZWxlbWVudCwgY3NzQ2xhc3NlcyA9IFtdKSA9PiB7XG4gIHJldHVybiBgXG4uJHtjc3NDbGFzc30gJHtlbGVtZW50fSB7ICR7Y3NzQ2xhc3Nlcy5qb2luKFwiICFpbXBvcnRhbnQ7IFwiKX0gIWltcG9ydGFudDsgfWA7XG59LCBcImNzc0ltcG9ydGFudFN0eWxlc1wiKTtcbnZhciBjcmVhdGVDc3NTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWcsIGNsYXNzRGVmcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpID0+IHtcbiAgbGV0IGNzc1N0eWxlcyA9IFwiXCI7XG4gIGlmIChjb25maWcudGhlbWVDU1MgIT09IHZvaWQgMCkge1xuICAgIGNzc1N0eWxlcyArPSBgXG4ke2NvbmZpZy50aGVtZUNTU31gO1xuICB9XG4gIGlmIChjb25maWcuZm9udEZhbWlseSAhPT0gdm9pZCAwKSB7XG4gICAgY3NzU3R5bGVzICs9IGBcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke2NvbmZpZy5mb250RmFtaWx5fX1gO1xuICB9XG4gIGlmIChjb25maWcuYWx0Rm9udEZhbWlseSAhPT0gdm9pZCAwKSB7XG4gICAgY3NzU3R5bGVzICs9IGBcbjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHtjb25maWcuYWx0Rm9udEZhbWlseX19YDtcbiAgfVxuICBpZiAoY2xhc3NEZWZzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgY29uc3QgaHRtbExhYmVscyA9IGNvbmZpZy5odG1sTGFiZWxzID8/IGNvbmZpZy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHM7XG4gICAgY29uc3QgY3NzSHRtbEVsZW1lbnRzID0gW1wiPiAqXCIsIFwic3BhblwiXTtcbiAgICBjb25zdCBjc3NTaGFwZUVsZW1lbnRzID0gW1wicmVjdFwiLCBcInBvbHlnb25cIiwgXCJlbGxpcHNlXCIsIFwiY2lyY2xlXCIsIFwicGF0aFwiXTtcbiAgICBjb25zdCBjc3NFbGVtZW50cyA9IGh0bWxMYWJlbHMgPyBjc3NIdG1sRWxlbWVudHMgOiBjc3NTaGFwZUVsZW1lbnRzO1xuICAgIGNsYXNzRGVmcy5mb3JFYWNoKChzdHlsZUNsYXNzRGVmKSA9PiB7XG4gICAgICBpZiAoIWlzRW1wdHkoc3R5bGVDbGFzc0RlZi5zdHlsZXMpKSB7XG4gICAgICAgIGNzc0VsZW1lbnRzLmZvckVhY2goKGNzc0VsZW1lbnQpID0+IHtcbiAgICAgICAgICBjc3NTdHlsZXMgKz0gY3NzSW1wb3J0YW50U3R5bGVzKHN0eWxlQ2xhc3NEZWYuaWQsIGNzc0VsZW1lbnQsIHN0eWxlQ2xhc3NEZWYuc3R5bGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzRW1wdHkoc3R5bGVDbGFzc0RlZi50ZXh0U3R5bGVzKSkge1xuICAgICAgICBjc3NTdHlsZXMgKz0gY3NzSW1wb3J0YW50U3R5bGVzKFxuICAgICAgICAgIHN0eWxlQ2xhc3NEZWYuaWQsXG4gICAgICAgICAgXCJ0c3BhblwiLFxuICAgICAgICAgIChzdHlsZUNsYXNzRGVmPy50ZXh0U3R5bGVzIHx8IFtdKS5tYXAoKHMpID0+IHMucmVwbGFjZShcImNvbG9yXCIsIFwiZmlsbFwiKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY3NzU3R5bGVzO1xufSwgXCJjcmVhdGVDc3NTdHlsZXNcIik7XG52YXIgY3JlYXRlVXNlclN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZywgZ3JhcGhUeXBlLCBjbGFzc0RlZnMsIHN2Z0lkKSA9PiB7XG4gIGNvbnN0IHVzZXJDU1NzdHlsZXMgPSBjcmVhdGVDc3NTdHlsZXMoY29uZmlnLCBjbGFzc0RlZnMpO1xuICBjb25zdCBhbGxTdHlsZXMgPSBzdHlsZXNfZGVmYXVsdChncmFwaFR5cGUsIHVzZXJDU1NzdHlsZXMsIGNvbmZpZy50aGVtZVZhcmlhYmxlcyk7XG4gIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShgJHtzdmdJZH17JHthbGxTdHlsZXN9fWApLCBzdHJpbmdpZnkpO1xufSwgXCJjcmVhdGVVc2VyU3R5bGVzXCIpO1xudmFyIGNsZWFuVXBTdmdDb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3ZnQ29kZSA9IFwiXCIsIGluU2FuZGJveE1vZGUsIHVzZUFycm93TWFya2VyVXJscykgPT4ge1xuICBsZXQgY2xlYW5lZFVwU3ZnID0gc3ZnQ29kZTtcbiAgaWYgKCF1c2VBcnJvd01hcmtlclVybHMgJiYgIWluU2FuZGJveE1vZGUpIHtcbiAgICBjbGVhbmVkVXBTdmcgPSBjbGVhbmVkVXBTdmcucmVwbGFjZShcbiAgICAgIC9tYXJrZXItZW5kPVwidXJsXFwoW1xcZCsuLzo9P0EtWmEtei1dKj8jL2csXG4gICAgICAnbWFya2VyLWVuZD1cInVybCgjJ1xuICAgICk7XG4gIH1cbiAgY2xlYW5lZFVwU3ZnID0gZGVjb2RlRW50aXRpZXMoY2xlYW5lZFVwU3ZnKTtcbiAgY2xlYW5lZFVwU3ZnID0gY2xlYW5lZFVwU3ZnLnJlcGxhY2UoLzxicj4vZywgXCI8YnIvPlwiKTtcbiAgcmV0dXJuIGNsZWFuZWRVcFN2Zztcbn0sIFwiY2xlYW5VcFN2Z0NvZGVcIik7XG52YXIgcHV0SW50b0lGcmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Z0NvZGUgPSBcIlwiLCBzdmdFbGVtZW50KSA9PiB7XG4gIGNvbnN0IGhlaWdodCA9IHN2Z0VsZW1lbnQ/LnZpZXdCb3g/LmJhc2VWYWw/LmhlaWdodCA/IHN2Z0VsZW1lbnQudmlld0JveC5iYXNlVmFsLmhlaWdodCArIFwicHhcIiA6IElGUkFNRV9IRUlHSFQ7XG4gIGNvbnN0IGJhc2U2NGVuY29kZWRTcmMgPSB0b0Jhc2U2NChgPGJvZHkgc3R5bGU9XCIke0lGUkFNRV9CT0RZX1NUWUxFfVwiPiR7c3ZnQ29kZX08L2JvZHk+YCk7XG4gIHJldHVybiBgPGlmcmFtZSBzdHlsZT1cIndpZHRoOiR7SUZSQU1FX1dJRFRIfTtoZWlnaHQ6JHtoZWlnaHR9OyR7SUZSQU1FX1NUWUxFU31cIiBzcmM9XCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PVVURi04O2Jhc2U2NCwke2Jhc2U2NGVuY29kZWRTcmN9XCIgc2FuZGJveD1cIiR7SUZSQU1FX1NBTkRCT1hfT1BUU31cIj5cbiAgJHtJRlJBTUVfTk9UX1NVUFBPUlRFRF9NU0d9XG48L2lmcmFtZT5gO1xufSwgXCJwdXRJbnRvSUZyYW1lXCIpO1xudmFyIGFwcGVuZERpdlN2Z0cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnRSb290LCBpZDI1LCBlbmNsb3NpbmdEaXZJZCwgZGl2U3R5bGUsIHN2Z1hsaW5rKSA9PiB7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdiA9IHBhcmVudFJvb3QuYXBwZW5kKFwiZGl2XCIpO1xuICBlbmNsb3NpbmdEaXYuYXR0cihcImlkXCIsIGVuY2xvc2luZ0RpdklkKTtcbiAgaWYgKGRpdlN0eWxlKSB7XG4gICAgZW5jbG9zaW5nRGl2LmF0dHIoXCJzdHlsZVwiLCBkaXZTdHlsZSk7XG4gIH1cbiAgY29uc3Qgc3ZnTm9kZSA9IGVuY2xvc2luZ0Rpdi5hcHBlbmQoXCJzdmdcIikuYXR0cihcImlkXCIsIGlkMjUpLmF0dHIoXCJ3aWR0aFwiLCBcIjEwMCVcIikuYXR0cihcInhtbG5zXCIsIFhNTE5TX1NWR19TVEQpO1xuICBpZiAoc3ZnWGxpbmspIHtcbiAgICBzdmdOb2RlLmF0dHIoXCJ4bWxuczp4bGlua1wiLCBzdmdYbGluayk7XG4gIH1cbiAgc3ZnTm9kZS5hcHBlbmQoXCJnXCIpO1xuICByZXR1cm4gcGFyZW50Um9vdDtcbn0sIFwiYXBwZW5kRGl2U3ZnR1wiKTtcbmZ1bmN0aW9uIHNhbmRib3hlZElmcmFtZShwYXJlbnROb2RlLCBpRnJhbWVJZCkge1xuICByZXR1cm4gcGFyZW50Tm9kZS5hcHBlbmQoXCJpZnJhbWVcIikuYXR0cihcImlkXCIsIGlGcmFtZUlkKS5hdHRyKFwic3R5bGVcIiwgXCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiKS5hdHRyKFwic2FuZGJveFwiLCBcIlwiKTtcbn1cbl9fbmFtZShzYW5kYm94ZWRJZnJhbWUsIFwic2FuZGJveGVkSWZyYW1lXCIpO1xudmFyIHJlbW92ZUV4aXN0aW5nRWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkb2MsIGlkMjUsIGRpdklkLCBpRnJhbWVJZCkgPT4ge1xuICBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQyNSk/LnJlbW92ZSgpO1xuICBkb2MuZ2V0RWxlbWVudEJ5SWQoZGl2SWQpPy5yZW1vdmUoKTtcbiAgZG9jLmdldEVsZW1lbnRCeUlkKGlGcmFtZUlkKT8ucmVtb3ZlKCk7XG59LCBcInJlbW92ZUV4aXN0aW5nRWxlbWVudHNcIik7XG52YXIgcmVuZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihpZDI1LCB0ZXh0LCBzdmdDb250YWluaW5nRWxlbWVudCkge1xuICBhZGREaWFncmFtcygpO1xuICBjb25zdCBwcm9jZXNzZWQgPSBwcm9jZXNzQW5kU2V0Q29uZmlncyh0ZXh0KTtcbiAgdGV4dCA9IHByb2Nlc3NlZC5jb2RlO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nLmRlYnVnKGNvbmZpZyk7XG4gIGlmICh0ZXh0Lmxlbmd0aCA+IChjb25maWc/Lm1heFRleHRTaXplID8/IE1BWF9URVhUTEVOR1RIKSkge1xuICAgIHRleHQgPSBNQVhfVEVYVExFTkdUSF9FWENFRURFRF9NU0c7XG4gIH1cbiAgY29uc3QgaWRTZWxlY3RvciA9IFwiI1wiICsgaWQyNTtcbiAgY29uc3QgaUZyYW1lSUQgPSBcImlcIiArIGlkMjU7XG4gIGNvbnN0IGlGcmFtZUlEX3NlbGVjdG9yID0gXCIjXCIgKyBpRnJhbWVJRDtcbiAgY29uc3QgZW5jbG9zaW5nRGl2SUQgPSBcImRcIiArIGlkMjU7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yID0gXCIjXCIgKyBlbmNsb3NpbmdEaXZJRDtcbiAgY29uc3QgcmVtb3ZlVGVtcEVsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gICAgY29uc3QgdG1wRWxlbWVudFNlbGVjdG9yID0gaXNTYW5kYm94ZWQgPyBpRnJhbWVJRF9zZWxlY3RvciA6IGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yO1xuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3QodG1wRWxlbWVudFNlbGVjdG9yKS5ub2RlKCk7XG4gICAgaWYgKG5vZGUgJiYgXCJyZW1vdmVcIiBpbiBub2RlKSB7XG4gICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbiAgfSwgXCJyZW1vdmVUZW1wRWxlbWVudHNcIik7XG4gIGxldCByb290ID0gc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgaXNTYW5kYm94ZWQgPSBjb25maWcuc2VjdXJpdHlMZXZlbCA9PT0gU0VDVVJJVFlfTFZMX1NBTkRCT1g7XG4gIGNvbnN0IGlzTG9vc2VTZWN1cml0eUxldmVsID0gY29uZmlnLnNlY3VyaXR5TGV2ZWwgPT09IFNFQ1VSSVRZX0xWTF9MT09TRTtcbiAgY29uc3QgZm9udEZhbWlseSA9IGNvbmZpZy5mb250RmFtaWx5O1xuICBpZiAoc3ZnQ29udGFpbmluZ0VsZW1lbnQgIT09IHZvaWQgMCkge1xuICAgIGlmIChzdmdDb250YWluaW5nRWxlbWVudCkge1xuICAgICAgc3ZnQ29udGFpbmluZ0VsZW1lbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9XG4gICAgaWYgKGlzU2FuZGJveGVkKSB7XG4gICAgICBjb25zdCBpZnJhbWUgPSBzYW5kYm94ZWRJZnJhbWUoc2VsZWN0KHN2Z0NvbnRhaW5pbmdFbGVtZW50KSwgaUZyYW1lSUQpO1xuICAgICAgcm9vdCA9IHNlbGVjdChpZnJhbWUubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk7XG4gICAgICByb290Lm5vZGUoKS5zdHlsZS5tYXJnaW4gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290ID0gc2VsZWN0KHN2Z0NvbnRhaW5pbmdFbGVtZW50KTtcbiAgICB9XG4gICAgYXBwZW5kRGl2U3ZnRyhyb290LCBpZDI1LCBlbmNsb3NpbmdEaXZJRCwgYGZvbnQtZmFtaWx5OiAke2ZvbnRGYW1pbHl9YCwgWE1MTlNfWExJTktfU1REKTtcbiAgfSBlbHNlIHtcbiAgICByZW1vdmVFeGlzdGluZ0VsZW1lbnRzKGRvY3VtZW50LCBpZDI1LCBlbmNsb3NpbmdEaXZJRCwgaUZyYW1lSUQpO1xuICAgIGlmIChpc1NhbmRib3hlZCkge1xuICAgICAgY29uc3QgaWZyYW1lID0gc2FuZGJveGVkSWZyYW1lKHNlbGVjdChcImJvZHlcIiksIGlGcmFtZUlEKTtcbiAgICAgIHJvb3QgPSBzZWxlY3QoaWZyYW1lLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpO1xuICAgICAgcm9vdC5ub2RlKCkuc3R5bGUubWFyZ2luID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdCA9IHNlbGVjdChcImJvZHlcIik7XG4gICAgfVxuICAgIGFwcGVuZERpdlN2Z0cocm9vdCwgaWQyNSwgZW5jbG9zaW5nRGl2SUQpO1xuICB9XG4gIGxldCBkaWFnO1xuICBsZXQgcGFyc2VFbmNvdW50ZXJlZEV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBkaWFnID0gYXdhaXQgRGlhZ3JhbS5mcm9tVGV4dCh0ZXh0LCB7IHRpdGxlOiBwcm9jZXNzZWQudGl0bGUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGNvbmZpZy5zdXBwcmVzc0Vycm9yUmVuZGVyaW5nKSB7XG4gICAgICByZW1vdmVUZW1wRWxlbWVudHMoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBkaWFnID0gYXdhaXQgRGlhZ3JhbS5mcm9tVGV4dChcImVycm9yXCIpO1xuICAgIHBhcnNlRW5jb3VudGVyZWRFeGNlcHRpb24gPSBlcnJvcjtcbiAgfVxuICBjb25zdCBlbGVtZW50ID0gcm9vdC5zZWxlY3QoZW5jbG9zaW5nRGl2SURfc2VsZWN0b3IpLm5vZGUoKTtcbiAgY29uc3QgZGlhZ3JhbVR5cGUgPSBkaWFnLnR5cGU7XG4gIGNvbnN0IHN2ZyA9IGVsZW1lbnQuZmlyc3RDaGlsZDtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHN2Zy5maXJzdENoaWxkO1xuICBjb25zdCBkaWFncmFtQ2xhc3NEZWZzID0gZGlhZy5yZW5kZXJlci5nZXRDbGFzc2VzPy4odGV4dCwgZGlhZyk7XG4gIGNvbnN0IHJ1bGVzID0gY3JlYXRlVXNlclN0eWxlcyhjb25maWcsIGRpYWdyYW1UeXBlLCBkaWFncmFtQ2xhc3NEZWZzLCBpZFNlbGVjdG9yKTtcbiAgY29uc3Qgc3R5bGUxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBzdHlsZTEuaW5uZXJIVE1MID0gcnVsZXM7XG4gIHN2Zy5pbnNlcnRCZWZvcmUoc3R5bGUxLCBmaXJzdENoaWxkKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBkaWFnLnJlbmRlcmVyLmRyYXcodGV4dCwgaWQyNSwgdmVyc2lvbiwgZGlhZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoY29uZmlnLnN1cHByZXNzRXJyb3JSZW5kZXJpbmcpIHtcbiAgICAgIHJlbW92ZVRlbXBFbGVtZW50cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvclJlbmRlcmVyX2RlZmF1bHQuZHJhdyh0ZXh0LCBpZDI1LCB2ZXJzaW9uKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuICBjb25zdCBzdmdOb2RlID0gcm9vdC5zZWxlY3QoYCR7ZW5jbG9zaW5nRGl2SURfc2VsZWN0b3J9IHN2Z2ApO1xuICBjb25zdCBhMTF5VGl0bGUgPSBkaWFnLmRiLmdldEFjY1RpdGxlPy4oKTtcbiAgY29uc3QgYTExeURlc2NyID0gZGlhZy5kYi5nZXRBY2NEZXNjcmlwdGlvbj8uKCk7XG4gIGFkZEExMXlJbmZvKGRpYWdyYW1UeXBlLCBzdmdOb2RlLCBhMTF5VGl0bGUsIGExMXlEZXNjcik7XG4gIHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkMjV9XCJdYCkuc2VsZWN0QWxsKFwiZm9yZWlnbm9iamVjdCA+ICpcIikuYXR0cihcInhtbG5zXCIsIFhNTE5TX1hIVE1MX1NURCk7XG4gIGxldCBzdmdDb2RlID0gcm9vdC5zZWxlY3QoZW5jbG9zaW5nRGl2SURfc2VsZWN0b3IpLm5vZGUoKS5pbm5lckhUTUw7XG4gIGxvZy5kZWJ1ZyhcImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlXCIsIGNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlKTtcbiAgc3ZnQ29kZSA9IGNsZWFuVXBTdmdDb2RlKHN2Z0NvZGUsIGlzU2FuZGJveGVkLCBldmFsdWF0ZShjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZSkpO1xuICBpZiAoaXNTYW5kYm94ZWQpIHtcbiAgICBjb25zdCBzdmdFbCA9IHJvb3Quc2VsZWN0KGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yICsgXCIgc3ZnXCIpLm5vZGUoKTtcbiAgICBzdmdDb2RlID0gcHV0SW50b0lGcmFtZShzdmdDb2RlLCBzdmdFbCk7XG4gIH0gZWxzZSBpZiAoIWlzTG9vc2VTZWN1cml0eUxldmVsKSB7XG4gICAgc3ZnQ29kZSA9IERPTVB1cmlmeS5zYW5pdGl6ZShzdmdDb2RlLCB7XG4gICAgICBBRERfVEFHUzogRE9NUFVSSUZZX1RBR1MsXG4gICAgICBBRERfQVRUUjogRE9NUFVSSUZZX0FUVFJcbiAgICB9KTtcbiAgfVxuICBhdHRhY2hGdW5jdGlvbnMoKTtcbiAgaWYgKHBhcnNlRW5jb3VudGVyZWRFeGNlcHRpb24pIHtcbiAgICB0aHJvdyBwYXJzZUVuY291bnRlcmVkRXhjZXB0aW9uO1xuICB9XG4gIHJlbW92ZVRlbXBFbGVtZW50cygpO1xuICByZXR1cm4ge1xuICAgIGRpYWdyYW1UeXBlLFxuICAgIHN2Zzogc3ZnQ29kZSxcbiAgICBiaW5kRnVuY3Rpb25zOiBkaWFnLmRiLmJpbmRGdW5jdGlvbnNcbiAgfTtcbn0sIFwicmVuZGVyXCIpO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZSh1c2VyT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdCh7fSwgdXNlck9wdGlvbnMpO1xuICBpZiAob3B0aW9ucz8uZm9udEZhbWlseSAmJiAhb3B0aW9ucy50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSkge1xuICAgIGlmICghb3B0aW9ucy50aGVtZVZhcmlhYmxlcykge1xuICAgICAgb3B0aW9ucy50aGVtZVZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkgPSBvcHRpb25zLmZvbnRGYW1pbHk7XG4gIH1cbiAgc2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplKG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucz8udGhlbWUgJiYgb3B0aW9ucy50aGVtZSBpbiB0aGVtZXNfZGVmYXVsdCkge1xuICAgIG9wdGlvbnMudGhlbWVWYXJpYWJsZXMgPSB0aGVtZXNfZGVmYXVsdFtvcHRpb25zLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhcbiAgICAgIG9wdGlvbnMudGhlbWVWYXJpYWJsZXNcbiAgICApO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzID0gdGhlbWVzX2RlZmF1bHQuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcyhvcHRpb25zLnRoZW1lVmFyaWFibGVzKTtcbiAgfVxuICBjb25zdCBjb25maWcgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIiA/IHNldFNpdGVDb25maWcob3B0aW9ucykgOiBnZXRTaXRlQ29uZmlnKCk7XG4gIHNldExvZ0xldmVsKGNvbmZpZy5sb2dMZXZlbCk7XG4gIGFkZERpYWdyYW1zKCk7XG59XG5fX25hbWUoaW5pdGlhbGl6ZSwgXCJpbml0aWFsaXplXCIpO1xudmFyIGdldERpYWdyYW1Gcm9tVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQsIG1ldGFkYXRhID0ge30pID0+IHtcbiAgY29uc3QgeyBjb2RlIH0gPSBwcmVwcm9jZXNzRGlhZ3JhbSh0ZXh0KTtcbiAgcmV0dXJuIERpYWdyYW0uZnJvbVRleHQoY29kZSwgbWV0YWRhdGEpO1xufSwgXCJnZXREaWFncmFtRnJvbVRleHRcIik7XG5mdW5jdGlvbiBhZGRBMTF5SW5mbyhkaWFncmFtVHlwZSwgc3ZnTm9kZSwgYTExeVRpdGxlLCBhMTF5RGVzY3IpIHtcbiAgc2V0QTExeURpYWdyYW1JbmZvKHN2Z05vZGUsIGRpYWdyYW1UeXBlKTtcbiAgYWRkU1ZHYTExeVRpdGxlRGVzY3JpcHRpb24oc3ZnTm9kZSwgYTExeVRpdGxlLCBhMTF5RGVzY3IsIHN2Z05vZGUuYXR0cihcImlkXCIpKTtcbn1cbl9fbmFtZShhZGRBMTF5SW5mbywgXCJhZGRBMTF5SW5mb1wiKTtcbnZhciBtZXJtYWlkQVBJID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlbmRlcixcbiAgcGFyc2UsXG4gIGdldERpYWdyYW1Gcm9tVGV4dCxcbiAgaW5pdGlhbGl6ZSxcbiAgZ2V0Q29uZmlnLFxuICBzZXRDb25maWcsXG4gIGdldFNpdGVDb25maWcsXG4gIHVwZGF0ZVNpdGVDb25maWcsXG4gIHJlc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICByZXNldCgpO1xuICB9LCBcInJlc2V0XCIpLFxuICBnbG9iYWxSZXNldDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gICAgcmVzZXQoZGVmYXVsdENvbmZpZyk7XG4gIH0sIFwiZ2xvYmFsUmVzZXRcIiksXG4gIGRlZmF1bHRDb25maWdcbn0pO1xuc2V0TG9nTGV2ZWwoZ2V0Q29uZmlnKCkubG9nTGV2ZWwpO1xucmVzZXQoZ2V0Q29uZmlnKCkpO1xuXG4vLyBzcmMvbWVybWFpZC50c1xudmFyIGhhbmRsZUVycm9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZXJyb3IsIGVycm9ycywgcGFyc2VFcnJvcikgPT4ge1xuICBsb2cud2FybihlcnJvcik7XG4gIGlmIChpc0RldGFpbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgIHBhcnNlRXJyb3IoZXJyb3Iuc3RyLCBlcnJvci5oYXNoKTtcbiAgICB9XG4gICAgZXJyb3JzLnB1c2goeyAuLi5lcnJvciwgbWVzc2FnZTogZXJyb3Iuc3RyLCBlcnJvciB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgcGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIHN0cjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgaGFzaDogZXJyb3IubmFtZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSwgXCJoYW5kbGVFcnJvclwiKTtcbnZhciBydW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKG9wdGlvbnMgPSB7XG4gIHF1ZXJ5U2VsZWN0b3I6IFwiLm1lcm1haWRcIlxufSkge1xuICB0cnkge1xuICAgIGF3YWl0IHJ1blRocm93c0Vycm9ycyhvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChpc0RldGFpbGVkRXJyb3IoZSkpIHtcbiAgICAgIGxvZy5lcnJvcihlLnN0cik7XG4gICAgfVxuICAgIGlmIChtZXJtYWlkLnBhcnNlRXJyb3IpIHtcbiAgICAgIG1lcm1haWQucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLnN1cHByZXNzRXJyb3JzKSB7XG4gICAgICBsb2cuZXJyb3IoXCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnNcIik7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufSwgXCJydW5cIik7XG52YXIgcnVuVGhyb3dzRXJyb3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbih7IHBvc3RSZW5kZXJDYWxsYmFjaywgcXVlcnlTZWxlY3Rvciwgbm9kZXMgfSA9IHtcbiAgcXVlcnlTZWxlY3RvcjogXCIubWVybWFpZFwiXG59KSB7XG4gIGNvbnN0IGNvbmYgPSBtZXJtYWlkQVBJLmdldENvbmZpZygpO1xuICBsb2cuZGVidWcoYCR7IXBvc3RSZW5kZXJDYWxsYmFjayA/IFwiTm8gXCIgOiBcIlwifUNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kYCk7XG4gIGxldCBub2Rlc1RvUHJvY2VzcztcbiAgaWYgKG5vZGVzKSB7XG4gICAgbm9kZXNUb1Byb2Nlc3MgPSBub2RlcztcbiAgfSBlbHNlIGlmIChxdWVyeVNlbGVjdG9yKSB7XG4gICAgbm9kZXNUb1Byb2Nlc3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5U2VsZWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZFwiKTtcbiAgfVxuICBsb2cuZGVidWcoYEZvdW5kICR7bm9kZXNUb1Byb2Nlc3MubGVuZ3RofSBkaWFncmFtc2ApO1xuICBpZiAoY29uZj8uc3RhcnRPbkxvYWQgIT09IHZvaWQgMCkge1xuICAgIGxvZy5kZWJ1ZyhcIlN0YXJ0IE9uIExvYWQ6IFwiICsgY29uZj8uc3RhcnRPbkxvYWQpO1xuICAgIG1lcm1haWRBUEkudXBkYXRlU2l0ZUNvbmZpZyh7IHN0YXJ0T25Mb2FkOiBjb25mPy5zdGFydE9uTG9hZCB9KTtcbiAgfVxuICBjb25zdCBpZEdlbmVyYXRvciA9IG5ldyB1dGlsc19kZWZhdWx0LkluaXRJREdlbmVyYXRvcihjb25mLmRldGVybWluaXN0aWNJZHMsIGNvbmYuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7XG4gIGxldCB0eHQ7XG4gIGNvbnN0IGVycm9ycyA9IFtdO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgQXJyYXkuZnJvbShub2Rlc1RvUHJvY2VzcykpIHtcbiAgICBsb2cuaW5mbyhcIlJlbmRlcmluZyBkaWFncmFtOiBcIiArIGVsZW1lbnQuaWQpO1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtcHJvY2Vzc2VkXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXByb2Nlc3NlZFwiLCBcInRydWVcIik7XG4gICAgY29uc3QgaWQyNSA9IGBtZXJtYWlkLSR7aWRHZW5lcmF0b3IubmV4dCgpfWA7XG4gICAgdHh0ID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgdHh0ID0gZGVkZW50KHV0aWxzX2RlZmF1bHQuZW50aXR5RGVjb2RlKHR4dCkpLnRyaW0oKS5yZXBsYWNlKC88YnJcXHMqXFwvPz4vZ2ksIFwiPGJyLz5cIik7XG4gICAgY29uc3QgaW5pdDIgPSB1dGlsc19kZWZhdWx0LmRldGVjdEluaXQodHh0KTtcbiAgICBpZiAoaW5pdDIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogXCIsIGluaXQyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc3ZnLCBiaW5kRnVuY3Rpb25zIH0gPSBhd2FpdCByZW5kZXIyKGlkMjUsIHR4dCwgZWxlbWVudCk7XG4gICAgICBlbGVtZW50LmlubmVySFRNTCA9IHN2ZztcbiAgICAgIGlmIChwb3N0UmVuZGVyQ2FsbGJhY2spIHtcbiAgICAgICAgYXdhaXQgcG9zdFJlbmRlckNhbGxiYWNrKGlkMjUpO1xuICAgICAgfVxuICAgICAgaWYgKGJpbmRGdW5jdGlvbnMpIHtcbiAgICAgICAgYmluZEZ1bmN0aW9ucyhlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIGVycm9ycywgbWVybWFpZC5wYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgZXJyb3JzWzBdO1xuICB9XG59LCBcInJ1blRocm93c0Vycm9yc1wiKTtcbnZhciBpbml0aWFsaXplMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY29uZmlnKSB7XG4gIG1lcm1haWRBUEkuaW5pdGlhbGl6ZShjb25maWcpO1xufSwgXCJpbml0aWFsaXplXCIpO1xudmFyIGluaXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGNvbmZpZywgbm9kZXMsIGNhbGxiYWNrKSB7XG4gIGxvZy53YXJuKFwibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuXCIpO1xuICBpZiAoY29uZmlnKSB7XG4gICAgaW5pdGlhbGl6ZTIoY29uZmlnKTtcbiAgfVxuICBjb25zdCBydW5PcHRpb25zID0geyBwb3N0UmVuZGVyQ2FsbGJhY2s6IGNhbGxiYWNrLCBxdWVyeVNlbGVjdG9yOiBcIi5tZXJtYWlkXCIgfTtcbiAgaWYgKHR5cGVvZiBub2RlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJ1bk9wdGlvbnMucXVlcnlTZWxlY3RvciA9IG5vZGVzO1xuICB9IGVsc2UgaWYgKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubm9kZXMgPSBbbm9kZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBydW5PcHRpb25zLm5vZGVzID0gbm9kZXM7XG4gICAgfVxuICB9XG4gIGF3YWl0IHJ1bihydW5PcHRpb25zKTtcbn0sIFwiaW5pdFwiKTtcbnZhciByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChkaWFncmFtcywge1xuICBsYXp5TG9hZCA9IHRydWVcbn0gPSB7fSkgPT4ge1xuICBhZGREaWFncmFtcygpO1xuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyguLi5kaWFncmFtcyk7XG4gIGlmIChsYXp5TG9hZCA9PT0gZmFsc2UpIHtcbiAgICBhd2FpdCBsb2FkUmVnaXN0ZXJlZERpYWdyYW1zKCk7XG4gIH1cbn0sIFwicmVnaXN0ZXJFeHRlcm5hbERpYWdyYW1zXCIpO1xudmFyIGNvbnRlbnRMb2FkZWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBpZiAobWVybWFpZC5zdGFydE9uTG9hZCkge1xuICAgIGNvbnN0IHsgc3RhcnRPbkxvYWQgfSA9IG1lcm1haWRBUEkuZ2V0Q29uZmlnKCk7XG4gICAgaWYgKHN0YXJ0T25Mb2FkKSB7XG4gICAgICBtZXJtYWlkLnJ1bigpLmNhdGNoKChlcnIpID0+IGxvZy5lcnJvcihcIk1lcm1haWQgZmFpbGVkIHRvIGluaXRpYWxpemVcIiwgZXJyKSk7XG4gICAgfVxuICB9XG59LCBcImNvbnRlbnRMb2FkZWRcIik7XG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBjb250ZW50TG9hZGVkLCBmYWxzZSk7XG59XG52YXIgc2V0UGFyc2VFcnJvckhhbmRsZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHBhcnNlRXJyb3JIYW5kbGVyKSB7XG4gIG1lcm1haWQucGFyc2VFcnJvciA9IHBhcnNlRXJyb3JIYW5kbGVyO1xufSwgXCJzZXRQYXJzZUVycm9ySGFuZGxlclwiKTtcbnZhciBleGVjdXRpb25RdWV1ZSA9IFtdO1xudmFyIGV4ZWN1dGlvblF1ZXVlUnVubmluZyA9IGZhbHNlO1xudmFyIGV4ZWN1dGVRdWV1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBpZiAoZXhlY3V0aW9uUXVldWVSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV4ZWN1dGlvblF1ZXVlUnVubmluZyA9IHRydWU7XG4gIHdoaWxlIChleGVjdXRpb25RdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZiA9IGV4ZWN1dGlvblF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKGYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGYoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKFwiRXJyb3IgZXhlY3V0aW5nIHF1ZXVlXCIsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBleGVjdXRpb25RdWV1ZVJ1bm5pbmcgPSBmYWxzZTtcbn0sIFwiZXhlY3V0ZVF1ZXVlXCIpO1xudmFyIHBhcnNlMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHRleHQsIHBhcnNlT3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBlcmZvcm1DYWxsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIG1lcm1haWRBUEkucGFyc2UodGV4dCwgcGFyc2VPcHRpb25zKS50aGVuKFxuICAgICAgICAocikgPT4ge1xuICAgICAgICAgIHJlcyhyKTtcbiAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICB9LFxuICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihcIkVycm9yIHBhcnNpbmdcIiwgZSk7XG4gICAgICAgICAgbWVybWFpZC5wYXJzZUVycm9yPy4oZSk7XG4gICAgICAgICAgcmVqKGUpO1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KSwgXCJwZXJmb3JtQ2FsbFwiKTtcbiAgICBleGVjdXRpb25RdWV1ZS5wdXNoKHBlcmZvcm1DYWxsKTtcbiAgICBleGVjdXRlUXVldWUoKS5jYXRjaChyZWplY3QpO1xuICB9KTtcbn0sIFwicGFyc2VcIik7XG52YXIgcmVuZGVyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkMjUsIHRleHQsIGNvbnRhaW5lcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBlcmZvcm1DYWxsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIG1lcm1haWRBUEkucmVuZGVyKGlkMjUsIHRleHQsIGNvbnRhaW5lcikudGhlbihcbiAgICAgICAgKHIpID0+IHtcbiAgICAgICAgICByZXMocik7XG4gICAgICAgICAgcmVzb2x2ZShyKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJFcnJvciBwYXJzaW5nXCIsIGUpO1xuICAgICAgICAgIG1lcm1haWQucGFyc2VFcnJvcj8uKGUpO1xuICAgICAgICAgIHJlaihlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSksIFwicGVyZm9ybUNhbGxcIik7XG4gICAgZXhlY3V0aW9uUXVldWUucHVzaChwZXJmb3JtQ2FsbCk7XG4gICAgZXhlY3V0ZVF1ZXVlKCkuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG59LCBcInJlbmRlclwiKTtcbnZhciBtZXJtYWlkID0ge1xuICBzdGFydE9uTG9hZDogdHJ1ZSxcbiAgbWVybWFpZEFQSSxcbiAgcGFyc2U6IHBhcnNlMixcbiAgcmVuZGVyOiByZW5kZXIyLFxuICBpbml0LFxuICBydW4sXG4gIHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyxcbiAgcmVnaXN0ZXJMYXlvdXRMb2FkZXJzLFxuICBpbml0aWFsaXplOiBpbml0aWFsaXplMixcbiAgcGFyc2VFcnJvcjogdm9pZCAwLFxuICBjb250ZW50TG9hZGVkLFxuICBzZXRQYXJzZUVycm9ySGFuZGxlcixcbiAgZGV0ZWN0VHlwZSxcbiAgcmVnaXN0ZXJJY29uUGFja3Ncbn07XG52YXIgbWVybWFpZF9kZWZhdWx0ID0gbWVybWFpZDtcbmV4cG9ydCB7XG4gIG1lcm1haWRfZGVmYXVsdCBhcyBkZWZhdWx0XG59O1xuLyohIENoZWNrIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovXG4vKiFcbiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvblxuICovXG4vKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOlxuXG5qcy15YW1sL2Rpc3QvanMteWFtbC5tanM6XG4gICgqISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKilcbiovXG4iLAogICAgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuZXhwb3J0IHZhciBTQ09QRSA9ICdAc2NvcGUnXG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoLCBwb3NpdGlvbikge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlciAoYXJyYXksIHBhdHRlcm4pIHtcblx0cmV0dXJuIGFycmF5LmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuICFtYXRjaCh2YWx1ZSwgcGF0dGVybikgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7b2JqZWN0W119IHNpYmxpbmdzXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCwgc2libGluZ3MpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnLCBzaWJsaW5nczogc2libGluZ3N9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCwgcm9vdC5zaWJsaW5ncyksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaWZ0IChyb290KSB7XG5cdHdoaWxlIChyb290LnJvb3QpXG5cdFx0cm9vdCA9IGNvcHkocm9vdC5yb290LCB7Y2hpbGRyZW46IFtyb290XX0pXG5cblx0YXBwZW5kKHJvb3QsIHJvb3Quc2libGluZ3MpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwKICAgICJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgdG9rZW4sIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicsIGFicyhpbmRleCA/IHBvaW50c1tpbmRleCAtIDFdIDogMCkpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50LCBkZWNsYXJhdGlvbnMpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRpZiAoKHRva2VuKHByZXZpb3VzIHx8IDEpID09IDUgfHwgdG9rZW4ocGVlaygpIHx8IDEpID09IDUpICYmIHN0cmxlbihjaGFyYWN0ZXJzKSAmJiBzdWJzdHIoY2hhcmFjdGVycywgLTEsIHZvaWQgMCkgIT09ICcgJykgY2hhcmFjdGVycyArPSAnICdcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGggfHwgKHZhcmlhYmxlID09PSAwICYmIHByZXZpb3VzID09PSA0NykpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSwgZGVjbGFyYXRpb25zKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiwgZGVjbGFyYXRpb25zKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoLCBydWxlc2V0cyksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCwgY2hpbGRyZW4pLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoLCBzaWJsaW5ncykge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCwgc2libGluZ3MpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHNpYmxpbmdzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBzaWJsaW5ncykge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwLCBzaWJsaW5ncylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgsIHNpYmxpbmdzKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgsIHNpYmxpbmdzKVxufVxuIiwKICAgICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBpZiAoIXN0cmxlbihlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJykpKSByZXR1cm4gJydcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsCiAgICAiaW1wb3J0IG1lcm1haWQgZnJvbSBcIm1lcm1haWRcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkai1vbmxvYWRcIiwgKCkgPT4ge1xuICBjb25zdCBJU19EQVJLX01PREUgPVxuICAgIHdpbmRvdy5tYXRjaE1lZGlhICYmXG4gICAgd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpLm1hdGNoZXM7XG5cbiAgLy8gUmVwbGFjZSBhbGwgPHByZT48Y29kZSBjbGFzcz1cImxhbmd1YWdlLW1lcm1haWRcIj4uLi48L2NvZGU+PC9wcmU+IHdpdGgganVzdCA8cHJlIGNsYXNzPVwibWVybWFpZFwiPjwvcHJlPlxuICBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZSBjb2RlLmxhbmd1YWdlLW1lcm1haWRcIildLm1hcCgoY29kZUVsKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gY29kZUVsLnBhcmVudEVsZW1lbnQhO1xuICAgIHBhcmVudC5pbm5lckhUTUwgPSBjb2RlRWwuaW5uZXJIVE1MO1xuICAgIHBhcmVudC5jbGFzc05hbWUgPSBcImxhbmd1YWdlLW1lcm1haWRcIjtcbiAgfSk7XG5cbiAgbWVybWFpZC5pbml0aWFsaXplKHtcbiAgICB0aGVtZTogSVNfREFSS19NT0RFID8gXCJkYXJrXCIgOiBcImRlZmF1bHRcIixcbiAgICBkYXJrTW9kZTogSVNfREFSS19NT0RFLFxuICB9KTtcblxuICBtZXJtYWlkLnJ1bih7IHF1ZXJ5U2VsZWN0b3I6IFwiLmxhbmd1YWdlLW1lcm1haWRcIiB9KTtcbn0pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIml2QkFBQSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBaUIsSUFBakIsaUJBQThDLElBQXBCLFlBQTJCLEdBQU8sUUFBUSxFQUFFLFNBQXFCLFFBQW5CLFlBQTJCLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxTQUFzQixZQUFwQixZQUErQixXQUFXLEdBQUcsTUFBTSxNQUFNLEVBQUUsSUFBRyxXQUFjLEVBQUUsQ0FBYyxJQUFJLEVBQUUsS0FBSSxFQUFFLE1BQUksRUFBRSxRQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSw2RkFBNkYsRUFBRSxzRkFBc0YsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLDJEQUEyRCxNQUFNLEdBQUcsRUFBRSxPQUFPLHdGQUF3RixNQUFNLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUcsR0FBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxRQUFRLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBZ0IsSUFBSixPQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxpQkFBaUIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLGFBQWEsTUFBTSxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQW9CLEdBQWpCLFNBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksU0FBbUIsR0FBakIsU0FBbUIsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsVUFBVSxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBUSxLQUFKLEVBQWEsSUFBSixHQUFFLEVBQU0sR0FBVSxJQUFQLEtBQVMsT0FBTyxJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksS0FBSyxHQUFHLGFBQWEsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsVUFBb0IsR0FBakIsV0FBcUIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLGdCQUFnQixFQUFFLENBQUMsT0FBUSxLQUFLLEdBQUcsU0FBUyxJQUFJLEdBQUksRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sS0FBSyxRQUFRLEVBQUUsSUFBRyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sS0FBSyxHQUFHLE1BQU0sSUFBSSxPQUFPLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFFLEtBQUssUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLGVBQWUsQ0FBQyxVQUFVLE9BQU8sS0FBSyxNQUFNLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGVBQWUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBUSxJQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLFFBQVEsRUFBRSxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxXQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxFQUFFLFFBQVEsVUFBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sT0FBTyxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxNQUFNLE9BQU8sR0FBRSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsTUFBTSxPQUFPLE9BQU8sR0FBRSxFQUFFLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxNQUFNLEtBQUssT0FBTyxHQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sTUFBTSxPQUFPLEdBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxPQUFPLE9BQU8sRUFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxNQUFNLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLE1BQU0sT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFHLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE1BQU8sS0FBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLFVBQVUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFPLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFNLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxZQUFZLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUMsT0FBTyxLQUFLLEdBQUcsWUFBWSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLEtBQUssR0FBRyxZQUFZLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQkFBaUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksRUFBRSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FB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RUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLE1BQU8sTUFBTyxFQUFHLElBQUksRUFDaEMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUMvQixNQUFPLENBQUMsRUFBRyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDL0IsTUFBTyxDQUFDLEVBQUcsSUFBSyxFQUFHLEVBQUcsT0FBTyxFQUM3QixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNoQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDOUIsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDOUIsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsQ0FBRyxFQUNqQyxPQUFRLENBQUMsT0FBUSxNQUFPLEVBQUcsRUFBRyxDQUFHLEVBQ2pDLE9BQVEsQ0FBQyxPQUFRLE1BQU8sRUFBRyxFQUFHLENBQUcsRUFDakMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsT0FBUSxNQUFPLEVBQUcsRUFBRyxDQUFHLEVBQ2pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDcEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxPQUFRLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxHQUFHLEVBQzVCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxPQUFRLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDaEMsT0FBUSxDQUFDLEVBQUcsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLE9BQU8sRUFDdEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDaEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbkMsUUFBUyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLENBQzNDLEVBQ0Esc0JBQXVCLENBQ3JCLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLFFBQVMsUUFBUyxPQUFRLFFBQVMsT0FBTyxFQUNqRCxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNsRCxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsTUFBTSxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE1BQU0sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLFFBQVMsT0FBTyxFQUMxQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE1BQU0sRUFDM0MsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNsRCxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksQ0FDMUIsRUFDQSxrQkFBbUIsQ0FDakIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsTUFBTSxFQUMvQixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDaEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxRQUFTLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDbEMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sQ0FDckMsRUFDQSxZQUFhLENBQ1gsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ2pDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQzNCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDL0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUN2QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQzNDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEtBQU0sUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNsQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3RDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3RDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN0QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDdEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ2hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ25DLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ2hDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN2QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3ZDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDdkMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzlDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN2QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDdkMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3ZDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN2QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUMvQixPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsUUFBUyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDL0IsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUMsQ0FDckMsRUFDQSxrQkFBbUIsQ0FDakIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxLQUFNLENBQUMsUUFBUyxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3pDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLFNBQVUsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLE9BQVEsRUFBRyxPQUFPLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUNyQyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDekMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLE1BQU8sRUFBRyxPQUFPLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDekMsTUFBTyxDQUFDLFFBQVMsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUM1QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLE1BQU8sRUFBRyxPQUFPLEVBQzNDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxLQUFNLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDMUMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLE1BQU8sRUFBRyxPQUFPLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsTUFBTyxFQUFHLE9BQU8sRUFDckMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxDQUMxQyxFQUNBLGNBQWUsQ0FDYixLQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3ZCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDekMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLFFBQVMsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUMzQyxLQUFNLENBQUMsU0FBVSxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxPQUFRLEVBQUcsT0FBTyxFQUNyQyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN6QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDbkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsSUFBSSxFQUNuQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDcEMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQzFDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDcEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDMUMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQ3BDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUMxQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLE9BQVEsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxDQUNwQyxFQUNBLGVBQWdCLENBQ2QsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxHQUFHLEVBQy9CLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxHQUFHLEVBQ3pCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLE9BQVEsT0FBUSxFQUFHLEVBQUcsT0FBTyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsSUFBSSxFQUNuQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLEVBQUcsSUFBSSxFQUNqQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEtBQU0sUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNoQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDOUIsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNoQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3BDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDOUMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDcEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDcEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDcEMsT0FBUSxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsQ0FBRyxFQUNoQyxPQUFRLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ2xDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxDQUFHLEVBQ2hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsTUFBTSxFQUM3QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDakMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLE9BQU8sRUFDdEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ3JDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsSUFBSyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDOUMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxDQUFHLEVBQ2xDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLENBQUcsRUFDbEMsT0FBUSxDQUFDLE9BQVEsT0FBUSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLE9BQU8sRUFDdEMsT0FBUSxDQUFDLE9BQVEsT0FBUSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxNQUFPLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDakMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsR0FBRyxFQUNoQyxPQUFRLENBQUMsS0FBTSxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ2pDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLEtBQU0sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNqQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ2xDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUMvQixPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsUUFBUyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsUUFBUyxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxRQUFTLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ25DLFFBQVMsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsUUFBUyxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxRQUFTLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ25DLFFBQVMsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsUUFBUyxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxRQUFTLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDaEMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUMsQ0FDckMsRUFDQSxrQkFBbUIsQ0FDakIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsTUFBTSxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsTUFBTSxFQUNoQyxNQUFPLENBQUMsUUFBUyxRQUFTLE9BQVEsRUFBRyxPQUFPLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsTUFBTSxFQUN0QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUN6QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUNyQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsUUFBUyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLENBQzNDLEVBQ0EsY0FBZSxDQUNiLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxJQUFJLEVBQ25DLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE1BQU0sRUFDM0MsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxNQUFNLEVBQzNDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDbkQsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNuRCxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQ25ELE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNuRCxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxLQUFNLFFBQVMsT0FBTyxFQUMxQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxNQUFNLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsT0FBUSxRQUFTLE1BQU0sRUFDM0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNuRCxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxNQUFNLEVBQ2xELE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDbkQsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsTUFBTSxFQUNsRCxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQ25ELE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLFFBQVMsT0FBTyxFQUM1QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQ25ELE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM5QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxNQUFNLEVBQ3ZDLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxDQUNqRCxFQUNBLGlCQUFrQixDQUNoQixLQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3ZCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLElBQUksRUFDaEMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLEtBQU0sRUFBRyxFQUFHLElBQUksRUFDMUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsS0FBTSxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDMUMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDekMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsS0FBTSxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDOUIsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDOUIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQ3JDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxDQUNwQyxFQUNBLG1CQUFvQixDQUNsQixLQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3ZCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sUUFBUyxFQUFHLEdBQUcsRUFDckMsS0FBTSxDQUFDLFFBQVMsS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN6QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLEtBQU0sUUFBUyxFQUFHLEdBQUcsRUFDL0IsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxLQUFNLENBQUMsTUFBTyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsTUFBTyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzFDLEtBQU0sQ0FBQyxNQUFPLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLE1BQU8sUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUMxQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsR0FBRyxFQUNqQyxLQUFNLENBQUMsS0FBTSxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDekMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxRQUFTLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDNUMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsS0FBTSxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNuQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLEVBQUcsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLEdBQUcsRUFDbEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNuQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDcEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLENBQ3RDLEVBQ0Esb0JBQXFCLENBQ25CLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUMvQixLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUN6QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxNQUFPLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxNQUFPLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDcEMsS0FBTSxDQUFDLE1BQU8sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNqQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsTUFBTyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDL0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxLQUFNLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUN6QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxLQUFNLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDaEMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsQ0FDaEMsRUFDQSxpQkFBa0IsQ0FDaEIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxPQUFRLEVBQUcsT0FBTyxFQUNqQyxLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsT0FBTyxFQUNsQyxLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsT0FBTyxFQUNsQyxLQUFNLENBQUMsUUFBUyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsT0FBTyxFQUNsQyxLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssT0FBUSxFQUFHLE1BQU0sRUFDaEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsT0FBTyxFQUNsQyxLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsSUFBSSxFQUMvQixLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsT0FBTyxFQUNsQyxLQUFNLENBQUMsRUFBRyxJQUFLLFFBQVMsRUFBRyxPQUFPLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE9BQU8sRUFDbEMsS0FBTSxDQUFDLEVBQUcsSUFBSyxRQUFTLEVBQUcsT0FBTyxFQUNsQyxLQUFNLENBQUMsRUFBRyxJQUFLLE9BQVEsRUFBRyxPQUFPLEVBQ2pDLEtBQU0sQ0FBQyxFQUFHLElBQUssUUFBUyxFQUFHLE1BQU0sRUFDakMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxDQUMxQixFQUNBLGdCQUFpQixDQUNmLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsTUFBTyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNwQyxNQUFPLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxPQUFRLENBQUMsU0FBVSxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQU8sSUFBSyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBTyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsQ0FBRyxFQUNqQyxPQUFRLENBQUMsU0FBVSxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsTUFBTyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxPQUFRLENBQUMsTUFBTyxNQUFPLFFBQVMsRUFBRyxPQUFPLEVBQzFDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sUUFBUyxFQUFHLE9BQU8sRUFDMUMsT0FBUSxDQUFDLFFBQVMsTUFBTyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFNBQVUsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFBUyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFBUyxDQUFDLFFBQVMsS0FB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T0FBUSxDQUFDLFFBQVMsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsUUFBUyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsUUFBTyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQzlCLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFBUyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDeEMsUUFBUyxDQUFDLFNBQVUsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxRQUFTLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxJQUFJLEVBQzdCLFFBQVMsQ0FBQyxFQUFHLEtBQU0sRUFBRyxFQUFHLElBQUksRUFDN0IsUUFBUyxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsSUFBSSxFQUM3QixRQUFTLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxJQUFJLENBQy9CLEVBQ0EscUJBQXNCLENBQ3BCLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEtBQUssRUFDeEIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLEtBQU0sQ0FBQyxRQUFTLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsS0FBTSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxLQUFNLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQzVCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxLQUFNLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxRQUFTLEVBQUcsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEtBQUssRUFDekIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxF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LFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLEdBQ04sRUFzREksR0FBeUIsQ0FBQyxFQXFDMUIsSUFBZSxDQUVuQixDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQ1IsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUNSLENBQUMsRUFBRyxFQUFHLENBQUMsRUFDUixDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQ1IsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUNSLENBQUMsRUFBRyxFQUFHLENBQUMsRUFDUixDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQ1IsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUNSLENBQUMsRUFBRyxFQUFHLENBQUMsRUFDUixDQUFDLEdBQUksRUFBRyxDQUFDLEVBQ1QsQ0FBQyxHQUFJLEdBQUksQ0FBQyxDQUNWLEVBQ0ksR0FBa0IsQ0FFdEIsSUFBSyxJQUFLLElB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RUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLGNBQWMsRUFDckQsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLGtCQUFrQixFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFNBQVMsRUFDckQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFlBQVksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFdBQVksRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsT0FBUSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxPQUFRLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsWUFBYSxFQUFJLEVBQzdELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxRQUFTLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsT0FBVSxRQUFTLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxPQUFVLFFBQVEsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQU8sRUFDbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQU8sRUFDbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFlBQVksRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLGNBQWMsRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsU0FBVSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsWUFBYSxFQUFJLEVBQzdELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxTQUFVLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxTQUFVLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsV0FBWSxFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxPQUFRLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQVEsRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsT0FBUSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxZQUFhLEVBQUksRUFDN0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQVEsRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsUUFBUyxFQUFJLEVBQ3pELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsWUFBYSxFQUFJLEVBQzdELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxRQUFTLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsUUFBUyxFQUFJLEVBQ3pELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLGVBQWdCLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLGFBQWMsRUFBSSxFQUM5RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxXQUFZLEVBQUksRUFDNUQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLGFBQWMsRUFB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eEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLFNBQVMsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLFNBQVMsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxPQUFVLFFBQVEsRUFDbkQsRUFBYSxFQUFNLEdBQU0sR0FBUSxJQUFVLFNBQVMsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLE9BQU8sRUFDbEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLFNBQVMsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLFNBQVMsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxJQUFVLE9BQU8sRUFDbEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLE9BQU8sRUFDbEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLE9BQU8sRUFDbEQsRUFBYSxFQUFNLEdBQU0sR0FBUSxTQUFVLFlBQVksRUFFdkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVUsRUFDdEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVUsRUFDdEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVEsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVEsRUFDcEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxTQUFVLE1BQU8sRUFBSSxFQUN2RCxFQUFhLEdBQU0sR0FBTSxHQUFTLFNBQVUsTUFBTyxFQUFJLEVBQ3ZELEVBQWEsR0FBTSxHQUFNLEdBQVMsT0FBVSxPQUFRLEVBQUksRUFDeEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxPQUFVLE9BQVEsRUFBSSxFQUN4RCxFQUFhLEdBQU0sR0FBTSxHQUFTLFNBQVUsT0FBUSxFQUFJLEVBQ3hELEVBQWEsR0FBTSxHQUFNLEdBQVMsT0FBVSxNQUFPLEVBQUksRUFDdkQsRUFBYSxHQUFNLEdBQU0sR0FBUyxPQUFVLE9BQVEsRUFBSSxFQUN4RCxFQUFhLEdBQU0sR0FBTSxHQUFTLFNBQVUsT0FBUSxFQUFJLEVBQ3hELEVBQWEsR0FBTSxHQUFNLEdBQVMsT0FBVSxNQUFP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QUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLFFBQVEsRUFFL0MsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLFFBQVEsRUFRL0MsSUFBUyxHQUFNLEVBQUcsR0FBTSxHQUFRLE9BQVEsS0EyQ3RDLEdBMUNJLEdBQU8sR0FBUSxPQUFPLEVBQUcsRUFLN0IsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFFNUMsR0FBTSxHQUdSLEdBQVcsT0FBTyxhQUFhLE1BQVEsTUFBUyxFQUFHLEVBRW5ELEVBQWEsRUFBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBQ2hELEVBQWEsR0FBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBQ2hELEdBQVcsT0FBTyxhQUFhLE1BQVEsTUFBUyxFQUFHLEVBRW5ELEVBQWEsRUFBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBQ2hELEVBQWEsR0FBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBTXBELEdBQVcsT0FBTyxhQUFhLE1BQVEsS0FBTSxFQUU3QyxFQUFhLEVBQU0sR0FBTSxHQUFTLElBQUssRUFBUSxFQUMvQyxFQUFhLEdBQU0sR0FBTSxHQUFTLElBQUssRUFBUSxFQUUvQyxJQUFTLEdBQU0sRUFBRyxHQUFNLEdBQUksS0FDdEIsR0FBTyxHQUFJLFNBQVMsRUFFeEIsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFTbEQsSUFBUyxHQUFNLEVBQUcsR0FBTSxHQUFXLE9BQVEsS0FDckMsR0FBTyxHQUFXLE9BQU8sRUFBRyxFQUVoQyxFQUFhLEVBQU0sR0FBTSxHQUFTLEdBQU0sRUFBSSxFQUM1QyxFQUFhLEdBQU0sR0FBTSxHQUFTLEdBQU0sRUFBSSxFQW9CMUMsR0FBc0IsQ0FBQyxDQUFDLFNBQVUsU0FBVSxXQUFXLEVBQzNELENBQUMsU0FBVSxTQUFVLFdBQVcsRUFDaEMsQ0FBQyxhQUFjLFNBQVUsYUFBYSxFQUN0QyxDQUFDLGFBQWMsU0FBVSxhQUFhLEVBQ3RDLENBQUMsYUFBYyxhQUFjLGlCQUFpQixFQUM5QyxDQUFDLGFBQWMsYUFBYyxpQkFBaUIsRUFHOUMsQ0FBQyxVQUFXLFVBQVcsZ0JBQWdCLEVBQ3ZDLENBQUMsR0FBSSxHQUFJLEVBQUUsRUFDWCxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQ1gsQ0FBQyxHQUFJLEdBQUksRUFBRSxFQUNYLENBQUMsV0FBWSxXQUFZLGlCQUFpQixFQUMxQyxDQUFDLFdBQVksV0FBWSxpQkFBaUIsRUFDMUMsQ0FBQyxTQUFVLFNBQVUsYUFBYSxFQUNsQyxDQUFDLFNBQVUsU0FBVSxhQUFhLEVBRWxDLENBQUMsZUFBZ0IsZUFBZ0IsaUJBQWlCLEVBQ2xELENBQUMsZUFBZ0IsZUFBZ0IsaUJBQWlCLEVBQ2xELENBQUMsU0FBVSxTQUFVLG1CQUFtQixFQUN4QyxDQUFDLFNBQVUsU0FBVSxtQkFBbUIsRUFDeEMsQ0FBQyxhQUFjLGFBQWMsZ0JBQWdCLEVBQzdDLENBQUMsYUFBYyxhQUFjLGdCQUFnQixFQUM3QyxDQUFDLFdBQVksV0FBWSxrQkFBa0IsRUFDM0MsQ0FBQyxXQUFZLFdBQVksa0JBQWtCLEVBQzNDLENBQUMsR0FBSSxHQUFJLEVBQUUsRUFDWCxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQ1gsQ0FBQyxTQUFVLFNBQVUsb0JBQW9CLEVBQ3pDLENBQUMsU0FBVSxTQUFVLG9CQUFvQixDQUN6QyxFQUNJLEdBQWtCLENBQUMsQ0FBQyxTQUFVLFNBQVUsV0FBVyxFQUN2RCxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQ1gsQ0FBQyxTQUFVLFNBQVUsbUJBQW1CLEVBQ3hDLENBQUMsYUFBYyxhQUFjLGdCQUFnQixFQUM3QyxDQUFDLFNBQVUsU0FBVSxvQkFBb0IsQ0FDekMsRUFpbUJJLEdBQVUsQ0FFWixPQUFVLENBQ1IsUUFBUyxPQUNULFNBQVUsV0FDWixFQUNBLE9BQVUsQ0FDUixRQUFTLFNBQ1QsU0FBVSxjQUNaLEVBQ0EsT0FBVSxDQUNSLFFBQVMsU0FDVCxTQUFVLGFBQ1osRUFDQSxPQUFVLENBQ1IsUUFBUyxTQUNULFNBQVUsYUFDWixFQUNBLFdBQWMsQ0FDWixRQUFTLFNBQ1QsU0FBVSxhQUNaLEVBS0EsT0FBVSxDQUNSLFFBQVMsZ0JBQ1QsU0FBVSxhQUNaLEVBQ0EsUUFBVyxDQUNULFFBQVMsU0FDVCxTQUFVLHFCQUNaLEVBQ0EsU0FBWSxDQUNWLFFBQVMsVUFDVCxTQUFVLGlCQUNaLEVBQ0EsUUFBVyxDQUNULFFBQVMsU0FDVCxTQUFVLGdCQUNaLEVBQ0EsT0FBVSxDQUNSLFFBQVMsYUFDVCxTQUFVLG1CQUNaLEVBQ0EsT0FBVSxDQUNSLFFBQVMsWUFDVCxTQUFVLG9CQUNaLENBQ0YsRUFDSSxHQUFVLENBRVosSUFBSyxDQUFDLE1BQU8sTUFBTyxLQUFLLEVBRXpCLFdBQVksQ0FBQyxhQUFjLE1BQU8sS0FBSyxFQUV2QyxXQUFZLENBQUMsYUFBYyxNQUFPLEtBQUssRUFDdkMsWUFBYSxDQUFDLGNBQWUsTUFBTyxLQUFLLEVBQ3pDLFlBQWEsQ0FBQyxjQUFlLEtBQU0sS0FBSyxDQUMxQyxFQXFCSSxHQUFjLENBQ2hCLFdBQ0EsY0FDQSxZQUNBLFNBQVUsR0FDVixlQUNBLGlCQUNBLGVBQ0EsZ0JBQ0EsaUJBQ0EsY0FDQSxZQUNBLGFBQ0EsY0FDQSxXQUNBLG1CQUNGLEVBS0ksR0FBWSxDQUNkLE9BQVEsRUFDUixLQUFNLElBQ1IsRUFDSSxHQUFjLENBQ2hCLE9BQVEsRUFDUixLQUFNLElBQ1IsRUFDSSxHQUFhLENBQ2YsT0FBUSxFQUNSLEtBQU0sSUFDUixFQU9JLElBQVcsQ0FDYixLQUFNLENBQ0osSUFBSyxHQUNMLEtBQU0sR0FDTixLQUFNLEdBQ04sT0FBUSxFQUNWLEVBQ0EsSUFBSyxDQUNILEtBQU0sR0FDTixJQUFLLEdBQ0wsS0FBTSxHQUNOLE9BQVEsRUFDVixFQUNBLEtBQU0sQ0FDSixLQUFNLEdBQ04sSUFBSyxHQUNMLE1BQU8sR0FDUCxPQUFRLEVBQ1YsRUFDQSxLQUFNLENBQ0osS0FBTSxHQUNOLElBQUssR0FDTCxNQUFPLEdBQ1AsT0FBUSxFQUNWLEVBQ0EsTUFBTyxDQUFDLEVBQ1IsT0FBUSxDQUNOLElBQUssR0FDTCxLQUFNLEdBQ04sS0FBTSxHQUNOLE9BQVEsRUFDVixFQUNBLE9BQVEsQ0FDTixLQUFNLEdBQ04sSUFBSyxHQUNMLEtBQU0sR0FDTixNQUFPLEdBQ1AsT0FBUSxHQUNSLE9BQVEsR0FDUixPQUFRLEVBQ1YsRUFDQSxPQUFRLENBQ04sS0FBTSxHQUNOLElBQUssR0FDTCxLQUFNLEdBQ04sS0FBTSxHQUNOLE1BQU8sR0FDUCxPQUFRLEdBQ1IsT0FBUSxFQUNWLENBQ0YsRUFFSSxJQUFnQixDQUNsQixLQUFNLENBQ0osSUFBSyxFQUNQLEVBQ0EsSUFBSyxDQUNILEtBQU0sR0FDTixJQUFLLEVBQ1AsRUFDQSxLQUFNLENBQUMsRUFDUCxLQUFNLENBQUMsRUFDUCxNQUFPLENBQUMsRUFDUixPQUFRLENBQ04sSUFBSyxFQUNQLEVBQ0EsT0FBUSxDQUFDLEVBQ1QsT0FBUSxDQUNOLElBQUssRUFDUCxDQUNGLEVBc0JJLEdBQWEsQ0FBQyxFQU1kLEdBQXFCLENBQUMsRUFNdEIsR0FBdUIsQ0FBQyxFQWdGeEIsR0FBYSxHQUFZLFNBSXpCLElBQW1CLENBQUMsV0FBWSxPQUFRLFFBQVMsT0FBUSxNQUFPLFFBQVEsRUFDeEUsSUFBb0IsQ0FBQyxZQUFhLE9BQVEsU0FBVSxRQUFRLEVBQzVELElBQWEsQ0FDZixRQUFXLEdBQVEsUUFDbkIsS0FBUSxHQUFRLEtBQ2hCLE9BQVUsR0FBUSxPQUNsQixhQUFnQixHQUFRLFlBQzFCLEVBQ0ksSUFBVSxDQUNaLEtBQU0sT0FDTixJQUFLLE1BQ0wsS0FBTSxPQUNOLEtBQU0sT0FDTixNQUFPLFFBQ1AsT0FBUSxTQUNSLE9BQVEsU0FDUixPQUFRLFFBQ1YsRUF5akJJLEdBQWEsQ0FDZixZQUNBLFlBQ0EsYUFDQSxzQkFDRixFQXdTSSxJQUFvQixDQUN0QixRQUFTLElBQ1QsVUFBVyxTQUNYLFVBQVcsSUFDWCxPQUFRLElBQ1IsY0FBZSxTQUNmLGVBQWdCLFNBQ2hCLFdBQVksU0FDWixlQUFnQixTQUNoQixnQkFBaUIsU0FDakIsWUFBYSxTQUNiLFdBQVksU0FDWixVQUFXLFNBQ1gsVUFBVyxTQUNYLFdBQVksU0FDWixtQkFBb0IsU0FDcEIsb0JBQXFCLFNBQ3JCLGdCQUFpQixTQUNqQixlQUFnQixTQUNoQixZQUFhLFNBQ2IsZ0JBQWlCLFNBQ2pCLGVBQWdCLFNBQ2hCLGlCQUFrQixTQUNsQixnQkFBaUIsU0FDakIsV0FBWSxTQUNaLGdCQUFpQixTQUNqQixlQUFnQixTQUNoQixnQkFBaUIsU0FDakIsUUFBUyxTQUNULGtCQUFtQixTQUNuQixpQkFBa0IsU0FDbEIsbUJBQW9CLFNBQ3BCLG1CQUFvQixTQUNwQixrQkFBbUIsU0FDbkIsbUJBQW9CLFNBQ3BCLFdBQVksSUFDWixRQUFTLFNBQ1QsaUJBQWtCLFNBQ2xCLGtCQUFtQixTQUVuQixpQkFBa0IsU0FFbEIsaUJBQWtCLFNBQ2xCLGdCQUFpQixTQUNqQixnQkFBaUIsR0FDbkIsRUE0Q0ksSUFBa0IsQ0FFcEIsZUFBZ0IsQ0FBQyxDQUFDLFlBQVksRUFBRyxNQUFPLElBQUssVUFBVSxFQUN2RCxjQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDckQsZ0JBQWlCLENBQUMsQ0FBQyxZQUFZLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDeEQsZUFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFBRyxNQUFPLElBQUssVUFBVSxFQUN0RCxZQUFhLENBQUMsQ0FBQyxZQUFZLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDcEQsaUJBQWtCLENBQUMsQ0FBQyxZQUFZLEVBQUcsRUFBSyxJQUFLLFVBQVUsRUFFdkQsV0FBWSxDQUFDLENBQUMsV0FBVyxFQUFHLE1BQU8sSUFBSyxVQUFVLEVBQ2xELGdCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFHLEVBQUssSUFBSyxVQUFVLEVBQ3JELGVBQWdCLENBQUMsQ0FBQyxrQkFBa0IsRUFBRyxNQUFPLElBQUssVUFBVSxFQUM3RCxZQUFhLENBQUMsQ0FBQyxrQkFBa0IsRUFBRyxNQUFPLElBQUssVUFBVSxFQUMxRCxXQUFZLENBQUMsQ0FBQyxpQkFBaUIsRUFBRyxNQUFPLElBQUssVUFBVSxFQUN4RCxnQkFBaUIsQ0FBQyxDQUFDLGFBQWEsRUFBRyxNQUFPLElBQUssVUFBVSxFQUN6RCxlQUFnQixDQUFDLENBQUMsYUFBYSxFQUFHLE1BQU8sSUFBSyxVQUFVLEVBQ3hELGlCQUFrQixDQUFDLENBQUMsaUJBQWlCLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDOUQsaUJBQWtCLENBQUMsQ0FBQyxjQUFjLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDM0QsZ0JBQWlCLENBQUMsQ0FBQyxjQUFjLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDMUQsa0JBQW1CLENBQUMsQ0FBQyxrQkFBa0IsRUFBRyxNQUFPLElBQUssVUFBVSxFQUNoRSxXQUFZLENBQUMsQ0FBQyxXQUFXLEVBQUcsTUFBTyxJQUFLLFVBQVUsRUFDbEQsZ0JBQWlCLENBQUMsQ0FBQyxXQUFXLEVBQUcsRUFBSyxJQUFLLFVBQVUsRUFDckQsa0JBQW1CLENBQUMsQ0FBQyxrQkFBa0IsRUFBRyxNQUFPLElBQUssVUFBVSxFQUNoRSxtQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixFQUFHLE1BQU8sSUFBSyxVQUFVLEVBQ2xFLG1CQUFvQixDQUFDLENBQUMsWUFBYSxZQUFZLEVBQUcsTUFBTyxHQUFHLEVBQzVELFVBQVcsQ0FBQyxDQUFDLFlBQWEsV0FBWSxZQUFZLEVBQUcsSUFBSyxHQUFHLEVBQzdELFdBQVksQ0FBQyxDQUFDLGlCQUFrQixnQkFBaUIsaUJBQWlCLEVBQUcsSUFBSyxHQUFHLEVBQzdFLG9CQUFxQixDQUFDLENBQUMsWUFBYSxZQUFZLEVBQUcsTUFBTyxHQUFHLEVBQzdELGdCQUFpQixDQUFDLENBQUMsWUFBYSxZQUFZLEVBQUcsS0FBTSxHQUFHLEVBQ3hELGdCQUFpQixDQUFDLENBQUMsa0JBQW1CLGtCQUFrQixFQUFHLEtBQU0sR0FBRyxFQUNwRSxtQkFBb0IsQ0FBQyxDQUFDLHNCQUF1QixrQkFBa0IsRUFBRyxLQUFNLEdBQUcsRUFDM0UsbUJBQW9CLENBQUMsQ0FBQyxrQkFBbUIsc0JBQXNCLEVBQUcsS0FBTSxHQUFHLEVBQzNFLGVBQWdCLENBQUMsQ0FBQyxZQUFhLFdBQVcsRUFBRyxLQUFNLEdBQUcsRUFDdEQsZ0JBQWlCLENBQUMsQ0FBQyxXQUFZLFlBQVksRUFBRyxLQUFNLEdBQUcsRUFDdkQsZ0JBQWlCLENBQUMsQ0FBQyxrQkFBbUIsa0JBQWtCLEVBQUcsTUFBTyxHQUFHLEVBQ3JFLGlCQUFrQixDQUFDLENBQUMsa0JBQW1CLGtCQUFrQixFQUFHLE1BQU8sR0FBRyxFQUN0RSxVQUFXLENBQUMsQ0FBQyxZQUFhLFlBQVksRUFBRyxNQUFPLEdBQUcsRUFDbkQsV0FBWSxDQUFDLENBQUMsaUJBQWtCLGlCQUFpQixFQUFHLE1BQU8sR0FBRyxFQUM5RCxRQUFTLENBQUMsQ0FBQyxhQUFjLFlBQVksRUFBRyxJQUFLLEdBQUcsRUFDaEQsUUFBUyxDQUFDLENBQUMsYUFBYyxhQUFhLEVBQUcsS0FBTSxHQUFHLEVBS2xELGlCQUFrQixDQUFDLENBQUMsb0JBQXFCLG9CQUFvQixFQUFHLEtBQU0sR0FBRyxFQUN6RSxrQkFBbUIsQ0FBQyxDQUFDLDJCQUE0QiwyQkFBMkIsRUFBRyxLQUFNLEdBQUcsRUFDeEYsaUJBQWtCLENBQUMsQ0FBQywyQkFBNEIsMkJBQTJCLEVBQUcsS0FBTSxHQUFHLENBQ3pGLEVBdU1JLEdBQVcsQ0FDYixnQkFDQSxlQUNBLFdBQ0YsRUF3TkksSUFBNEIsSUFBSSxPQUFPLENBQUMsVUFBVyxVQUFXLFNBQVUsVUFBVyxRQUFTLFVBQVcsVUFBVyxRQUFTLFFBQVMsUUFBUyxZQUFZLEVBQUUsSUFBSSxLQUFVLEtBQU8sQ0FBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBRXJNLEdBQWUsQ0FDYixLQUFNLFNBQ04sTUFBTyxDQUFDLFVBQVcsVUFBVyxTQUFVLFVBQVcsUUFBUyxVQUFXLFVBQVcsUUFBUyxRQUFTLFFBQVMsYUFBYyxjQUFlLFlBQWEsY0FBZSxtQkFBb0Isa0JBQW1CLG1CQUFvQix1QkFBd0IsY0FBZSxvQkFBcUIsb0JBQXFCLG9CQUFvQixFQUN0VSxNQUFPLENBQ0wsUUFBUyxDQUNYLEVBQ0EsUUFBUyxDQUFDLEVBQVMsSUFBUyxDQUMxQixJQUFJLEVBQU8sR0FBa0IsRUFBSyxFQUFFLEVBQ2hDLEdBQWMsSUFBMEIsS0FBSyxFQUFRLFFBQVEsRUFDN0QsR0FBWSxHQUFjLEVBQVEsV0FBYSxhQUFlLEVBQVEsV0FBYSxlQUFpQixFQUFRLFdBQWEsY0FDN0gsTUFBTyxDQUNMLEtBQU0sU0FDTixLQUFNLEVBQVEsT0FBTyxLQUNyQixNQUFPLEVBQVEsU0FDZixXQUFZLEVBQ1osU0FBVSxFQUNWLEtBQU0sQ0FDUixHQUVGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxTQUNOLE1BQU8sQ0FBQyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxlQUFlLEVBQzNHLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxHQUNmLGNBQWUsR0FFZixTQUFVLENBQUMsV0FBVyxDQUN4QixFQUNBLFFBQVMsQ0FBQyxFQUFTLElBQVMsQ0FDMUIsSUFBSSxFQUFPLEVBQUssR0FDWixFQUFPLEVBQVEsT0FBTyxLQUUxQixHQUFJLElBQVMsT0FDWCxFQUFRLE9BQU8sU0FBUyxnQkFBZ0Isb0JBQXFCLGtCQUFvQixFQUFRLFNBQVcsMEJBQTBCLEVBQzlILEVBQU8sT0FHVCxNQUFPLENBQ0wsS0FBTSxTQUNOLEtBQU0sRUFDTixNQUFPLEVBQVEsU0FDZixXQUFZLEdBQ1osU0FBVSxHQUNWLEtBQU0sQ0FDUixHQUVGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFHRCxHQUFlLENBQ2IsS0FBTSxjQUNOLE1BQU8sQ0FBQyxtQkFBb0Isb0JBQXFCLHdCQUF5QixlQUFnQixxQkFBc0IsVUFBVSxFQUMxSCxNQUFPLENBQ0wsUUFBUyxDQUNYLEVBQ0EsUUFBUyxDQUFDLEVBQU0sSUFBUyxDQUN2QixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxjQUNOLEtBQU0sRUFBTyxLQUNiLE1BQU8sRUFDUCxLQUFNLENBQ1IsR0FFRixZQUFhLENBQUMsRUFBTyxJQUFZLENBRS9CLElBQUksRUFBYSxHQUFhLEVBQU0sS0FBTSxDQUFPLEVBQzdDLEVBQWEsR0FBUyxRQUFRLEVBQU8sQ0FBTyxFQUM1QyxFQUFPLEVBQU0sUUFBVSxXQUFhLEtBQU8sRUFFM0MsRUFBUSxHQUFZLFVBQVUsQ0FDaEMsYUFBYyxNQUNkLGFBQWMsRUFBVyxPQUN6QixTQUFVLENBQUMsQ0FDVCxLQUFNLE9BQ04sS0FBTSxFQUNOLGVBQWdCLENBQUMsV0FBVyxDQUM5QixFQUFHLENBQ0QsS0FBTSxPQUNOLEtBQU0sQ0FDUixFQUFHLENBQ0QsS0FBTSxPQUNOLEtBQU0sQ0FDUixDQUFDLENBQ0gsRUFBRyxDQUFPLEVBQ1YsT0FBTyxHQUFZLFNBQVMsQ0FBQyxPQUFRLGFBQWEsRUFBRyxDQUFDLENBQUssRUFBRyxDQUFPLEdBRXZFLGNBQWUsQ0FBQyxFQUFPLElBQVksQ0FDakMsSUFBSSxFQUFhLEdBQVMsV0FBVyxFQUFNLEtBQUssRUFDNUMsRUFBTyxJQUFJLEdBQVcsU0FBUyxTQUFVLENBQUMsR0FBVyxFQUFNLEtBQU0sQ0FBTyxFQUFHLENBQVUsQ0FBQyxFQUUxRixPQURBLEVBQUssYUFBYSxjQUFlLE1BQU0sRUFDaEMsRUFFWCxDQUFDLEVBV0QsR0FBZSxDQUNiLEtBQU0sU0FDTixNQUFPLENBQUMsZUFBZ0IsZ0JBQWlCLGVBQWdCLGdCQUFpQixvQkFBcUIsb0JBQXFCLG1CQUFvQixvQkFBcUIsWUFBYSxzQkFBdUIsb0JBQXFCLHFCQUFzQixtQkFBb0IsdUJBQXdCLHVCQUF3QixlQUFnQix1QkFBd0Isc0JBQXVCLFlBRS9XLHFCQUFzQixzQkFBdUIscUJBQzdDLG1CQUFvQixrQkFBbUIsaUJBQWlCLEVBQ3hELE1BQU8sQ0FDTCxRQUFTLEVBQ1QsZ0JBQWlCLENBQ25CLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxFQUFTLENBQzNCLElBQ0UsU0FDQSxZQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sU0FDTixLQUFNLEVBQU8sS0FDYixNQUFPLEVBQ1AsS0FBTSxFQUFLLEdBQ1gsTUFBTyxFQUFRLEVBQ2pCLEdBS0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixJQUFJLEVBQVEsRUFBUSxNQUtoQixFQUFhLEVBQVEsWUFBWSxFQUFNLElBQUksQ0FBQyxFQUM1QyxFQUFhLEdBQVksYUFBYSxHQUFhLEVBQU0sS0FBTSxFQUFZLENBQU8sRUFBRyxDQUFPLEVBQzVGLEVBQWMsRUFBTSxNQUFNLE1BQU0sRUFBRyxDQUFDLElBQU0sTUFBUSxJQUFNLEtBQzVELEVBQVcsUUFBUSxLQUFLLEVBQWMsWUFBWSxFQUNsRCxJQUFJLEVBRUosR0FBSSxFQUFNLE1BRVIsRUFBYSxFQUFRLFlBQVksRUFBTSxJQUFJLENBQUMsRUFDNUMsRUFBYSxHQUFZLGFBQWEsR0FBYSxFQUFNLE1BQU8sRUFBWSxDQUFPLEVBQUcsQ0FBTyxFQUM3RixFQUFXLFFBQVEsS0FBSyxFQUFjLFlBQVksRUFHcEQsSUFBSSxFQUFZLEdBQVMsUUFBUSxFQUFPLENBQU8sRUFHM0MsR0FBYyxFQUFRLFlBQVksRUFBRSxXQUFhLElBQU0sRUFBVSxPQUVqRSxHQUFjLEVBQVEsWUFBWSxFQUFFLFdBQWEsSUFBTSxFQUFVLE9BQVMsTUFFOUUsR0FBSSxFQUFXLE1BQVEsTUFBUSxFQUFNLFFBQVUscUJBQzdDLEdBQWMsRUFBVyxNQUkzQixJQUFJLEVBRUosR0FBSSxFQUFZLENBQ2QsSUFBSSxHQUFjLEVBQVEsWUFBWSxFQUFFLFdBQWEsRUFBVyxPQUFTLElBQU0sRUFBVSxPQUFTLE1BQ2xHLEVBQVEsR0FBWSxVQUFVLENBQzVCLGFBQWMsa0JBQ2QsU0FBVSxDQUFDLENBQ1QsS0FBTSxPQUNOLEtBQU0sRUFDTixNQUFPLENBQ1QsRUFBRyxDQUNELEtBQU0sT0FDTixLQUFNLEVBQ04sTUFBTyxDQUNULEVBQUcsQ0FDRCxLQUFNLE9BQ04sS0FBTSxFQUNOLE1BQU8sQ0FDVCxDQUFDLENBQ0gsRUFBRyxDQUFPLE1BRVYsR0FBUSxHQUFZLFVBQVUsQ0FDNUIsYUFBYyxrQkFDZCxTQUFVLENBQUMsQ0FDVCxLQUFNLE9BQ04sS0FBTSxFQUNOLE1BQU8sQ0FDVCxFQUFHLENBQ0QsS0FBTSxPQUNOLEtBQU0sRUFDTixNQUFPLENBQ1QsQ0FBQyxDQUNILEVBQUcsQ0FBTyxFQUtaLE9BREEsRUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxRQUFRLEtBQUssV0FBVyxFQUMzRCxHQUFZLFNBQVMsQ0FBQyxPQUFRLFNBQVMsRUFBRyxDQUFDLENBQUssRUFBRyxDQUFPLEdBR25FLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFZLEdBQVMsV0FBVyxFQUFNLEtBQUssRUFDL0MsRUFBVSxhQUFhLFVBQVcsRUFBTSxNQUFNLE9BQU8sQ0FBQyxJQUFNLElBQU0sU0FBVyxPQUFPLEVBQ3BGLElBQUksRUFFSixHQUFJLEVBQU0sS0FBTSxDQUNkLElBQUksRUFBWSxHQUFXLEdBQVcsRUFBTSxLQUFNLENBQU8sQ0FBQyxFQUUxRCxHQUFJLEVBQU0sTUFBTyxDQUNmLElBQUksRUFBWSxHQUFXLEdBQVcsRUFBTSxNQUFPLENBQU8sQ0FBQyxFQUMzRCxFQUFPLElBQUksR0FBVyxTQUFTLGFBQWMsQ0FBQyxFQUFXLEVBQVcsQ0FBUyxDQUFDLE1BRTlFLEdBQU8sSUFBSSxHQUFXLFNBQVMsUUFBUyxDQUFDLEVBQVcsQ0FBUyxDQUFDLFVBRXZELEVBQU0sTUFBTyxDQUN0QixJQUFJLEVBQWEsR0FBVyxHQUFXLEVBQU0sTUFBTyxDQUFPLENBQUMsRUFFNUQsRUFBTyxJQUFJLEdBQVcsU0FBUyxTQUFVLENBQUMsRUFBVyxDQUFVLENBQUMsTUFJaEUsR0FBTyxHQUFXLEVBQ2xCLEVBQU8sSUFBSSxHQUFXLFNBQVMsUUFBUyxDQUFDLEVBQVcsQ0FBSSxDQUFDLEVBRzNELE9BQU8sRUFHWCxDQUFDLEVBRUcsSUFBVyxHQUFZLFNBcUQzQixHQUFlLENBQ2IsS0FBTSxTQUNOLE1BQU8sQ0FBQyxZQUFhLFlBQWEsWUFBYSxhQUFjLGNBQWUsY0FBZSxhQUFhLEVBQ3hHLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsVUFBVyxFQUNiLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxDQUNsQixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxTQUNOLEtBQU0sRUFBTyxLQUNiLE9BQVEsSUFBTSxFQUFTLE1BQU0sQ0FBQyxFQUU5QixLQUFNLEdBQVksQ0FBSSxFQUN0QixlQUFnQixHQUFNLGVBQWUsQ0FBSSxDQUMzQyxHQUdGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFnQkQsR0FBZSxDQUNiLEtBQU0sU0FDTixNQUFPLENBQUMsV0FBVyxFQUNuQixNQUFPLENBQ0wsUUFBUyxDQUNYLEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxDQUNuQixJQUNFLFVBQ0UsRUFDSixNQUFPLENBQ0wsS0FBTSxTQUNOLEtBQU0sRUFBTyxLQUNiLE9BQVEsR0FBWSxFQUFLLEVBQUUsRUFDM0IsS0FBTSxHQUFZLEVBQUssRUFBRSxFQUN6QixlQUFnQixHQUFNLGVBQWUsRUFBSyxFQUFFLENBQzlDLEVBR0osQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLFNBQ04sTUFBTyxDQUFDLGFBQWMsWUFBYSxZQUFZLEVBQy9DLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBTyxFQUFNLENBQ25CLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBVSxFQUFLLEdBQ2YsRUFBYSxFQUFLLEdBQ2xCLEVBRUosR0FBSSxJQUFhLGFBRWYsRUFBUyxHQUFZLENBQU8sTUFFNUIsR0FBUyxPQUdYLElBQUksRUFBUyxDQUNYLEtBQU0sS0FDTixLQUFNLEVBQVEsS0FDZCxPQUFRLEdBQ1IsbUJBQW9CLEdBQ3BCLGVBQWdCLEdBQ2hCLE9BQVEsR0FDUixrQkFBbUIsSUFBYSxhQUNoQyxLQUFNLEdBQVksQ0FBTyxDQUMzQixFQUNJLEVBQVMsQ0FDWCxLQUFNLFNBQ04sS0FBTSxFQUFXLEtBQ2pCLEtBQU0sRUFDTixJQUFLLElBQWEsYUFBZSxLQUFPLEVBQ3hDLElBQUssSUFBYSxhQUFlLEVBQWEsSUFDaEQsRUFDQSxNQUFPLENBQ0wsS0FBTSxTQUNOLEtBQU0sRUFBTyxLQUNiLFNBQ0EsS0FBTSxDQUFDLENBQU0sRUFDYixlQUFnQixHQUFNLGVBQWUsQ0FBTSxDQUM3QyxHQUdGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFNRCxHQUFlLENBQ2IsS0FBTSxNQUNOLE1BQU8sQ0FBQyxPQUFPLEVBQ2YsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxDQUNsQixJQUNFLFVBQ0UsRUFDSixNQUFPLENBQ0wsS0FBTSxNQUNOLEtBQU0sRUFBTyxLQUNiLE9BQVEsR0FBWSxFQUFLLEVBQUUsRUFDM0IsS0FBTSxHQUFZLEVBQUssRUFBRSxDQUMzQixHQUdGLFdBQVcsQ0FBQyxFQUFPLEVBQVMsQ0FDMUIsSUFBSSxFQUFXLEdBQWtCLEVBQU0sS0FBTSxFQUFTLEVBQUksRUFDdEQsRUFBTyxHQUFZLFNBQVMsQ0FBQyxFQUFNLE1BQU0sRUFBRyxFQUFVLENBQU8sRUFFakUsT0FEQSxFQUFLLE1BQU0sV0FBYSx1QkFDakIsR0FHVCxhQUFhLENBQUMsRUFBTyxFQUFPLENBQzFCLElBQUksRUFBUSxHQUFnQixFQUFNLEtBQU0sQ0FBSyxFQUV6QyxFQUFPLElBQUksR0FBVyxTQUFTLFNBQVUsQ0FBSyxFQUVsRCxPQURBLEVBQUssYUFBYSxRQUFTLG1DQUFtQyxFQUN2RCxFQUdYLENBQUMsRUFFRyxJQUFzQixDQUN4QixJQUFLLG1CQUNMLElBQUssa0JBQ0wsSUFBSyxrQkFDTCxFQUFLLFlBQ0wsRUFBSyxjQUNMLElBQUssU0FDTCxJQUFLLFVBQ1AsRUF3T0EsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsYUFBYyxhQUFhLEVBQ25DLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsU0FDQSxZQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FDYixLQUFNLEVBQVMsTUFBTSxDQUFDLEVBQ3RCLE1BQU8sRUFBSyxFQUNkLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixJQUFJLEVBQWEsRUFBUSxZQUFZLEVBQVEsTUFBTSxJQUFJLENBQUMsRUFDcEQsRUFBUSxHQUFZLGFBQWEsR0FBYSxFQUFNLE1BQU8sRUFBWSxDQUFPLEVBQUcsQ0FBTyxFQU81RixPQU5BLEVBQU0sUUFBUSxLQUFLLFlBQWMsRUFBTSxJQUFJLEVBQzNDLEVBQU0sTUFBTSxPQUFTLEdBQU8sSUFBTSxFQUFNLEtBQUssRUFHN0MsRUFBTSxPQUFTLEVBQ2YsRUFBTSxNQUFRLEVBQ1AsR0FHVCxhQUFhLENBQUMsRUFBTyxFQUFTLENBQzVCLElBQUksRUFBUSxJQUFJLEdBQVcsU0FBUyxPQUFRLENBQUMsR0FBVyxFQUFNLE1BQU8sQ0FBTyxDQUFDLENBQUMsRUFJOUUsR0FIQSxFQUFRLElBQUksR0FBVyxTQUFTLFVBQVcsQ0FBQyxDQUFLLENBQUMsRUFDbEQsRUFBTSxhQUFhLFFBQVMsR0FBRyxFQUUzQixFQUFNLE9BQVMsT0FDakIsRUFBTSxhQUFhLFNBQVUsU0FBUyxFQVN4QyxPQUpBLEVBQU0sYUFBYSxVQUFXLE9BQU8sRUFDckMsRUFBUSxJQUFJLEdBQVcsU0FBUyxTQUFVLENBQUMsQ0FBSyxDQUFDLEVBQ2pELEVBQU0sYUFBYSxlQUFnQixPQUFPLEVBQzFDLEVBQU0sYUFBYSxjQUFlLEdBQUcsRUFDOUIsRUFHWCxDQUFDLEVBQ0QsR0FBZSxDQUNiLEtBQU0sZ0JBQ04sTUFBTyxDQUFDLGNBQWMsRUFDdEIsTUFBTyxDQUNMLFFBQVMsQ0FDWCxFQUVBLE9BQU8sQ0FBQyxFQUFPLEVBQU0sQ0FDbkIsSUFDRSxVQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sZ0JBQ04sS0FBTSxFQUFPLEtBQ2IsU0FBVSxFQUFLLEVBQ2pCLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUkxQixJQUFJLEVBQVMsR0FBWSxhQUFhLEdBQWEsRUFBTSxTQUFVLENBQU8sRUFBRyxDQUFPLEVBRXBGLE9BREEsRUFBTyxRQUFRLEtBQUssZUFBZSxFQUM1QixHQUdULGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsT0FBTyxJQUFJLEdBQVcsU0FBUyxPQUFRLENBQUMsR0FBVyxFQUFNLFNBQVUsQ0FBTyxDQUFDLENBQUMsRUFHaEYsQ0FBQyxFQUtELEdBQWUsQ0FDYixLQUFNLFVBQ04sTUFBTyxDQUFDLFNBQVMsRUFDakIsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxDQUNsQixJQUNFLFVBQ0UsRUFDQSxFQUFNLEdBQWUsRUFBSyxHQUFJLFVBQVUsRUFDeEMsRUFBUSxFQUFJLEtBQ1osRUFBUyxHQUViLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FDckMsSUFBSSxFQUFPLEdBQWUsRUFBTSxHQUFJLFNBQVMsRUFDN0MsR0FBVSxFQUFLLEtBR2pCLElBQUksRUFBTyxTQUFTLENBQU0sRUFDdEIsRUFFSixHQUFJLE1BQU0sQ0FBSSxFQUNaLE1BQU0sSUFBSSxHQUFXLG9DQUFzQyxDQUFNLFVBRXhELEVBQU8sR0FBSyxHQUFRLFFBQzdCLE1BQU0sSUFBSSxHQUFXLG1DQUFxQyxDQUFNLFVBQ3ZELEdBQVEsTUFDakIsRUFBTyxPQUFPLGFBQWEsQ0FBSSxNQUcvQixJQUFRLE1BQ1IsRUFBTyxPQUFPLGNBQWMsR0FBUSxJQUFNLE9BQVMsRUFBTyxNQUFTLEtBQU0sRUFHM0UsTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FDYixLQUFNLENBQ1IsRUFHSixDQUFDLEVBa0JELEdBQWUsQ0FDYixLQUFNLFFBQ04sTUFBTyxDQUFDLGFBQWEsRUFDckIsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEdBQ2YsU0FBVSxDQUFDLFFBQVMsVUFBVSxDQUNoQyxFQUVBLE9BQU8sQ0FBQyxFQUFNLEVBQU0sQ0FDbEIsSUFDRSxVQUNFLEVBQ0EsRUFBUSxHQUFlLEVBQUssR0FBSSxhQUFhLEVBQUUsTUFDL0MsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLFFBQ04sS0FBTSxFQUFPLEtBQ2IsUUFDQSxLQUFNLEdBQVksQ0FBSSxDQUN4QixHQUdGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFDRCxHQUFlLENBQ2IsS0FBTSxRQUNOLE1BQU8sQ0FBQyxTQUFTLEVBQ2pCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxHQUNmLFNBQVUsQ0FBQyxPQUFPLENBQ3BCLEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxDQUNuQixJQUNFLFNBQ0Esb0JBQ0UsRUFDQSxFQUFRLEdBQWUsRUFBSyxHQUFJLGFBQWEsRUFBRSxNQUtuRCxFQUFPLE9BQU8sT0FBTyxJQUFJLGtCQUFtQixDQUFLLEVBRWpELElBQUksRUFBTyxFQUFPLGdCQUFnQixHQUFNLENBQWdCLEVBQ3hELE1BQU8sQ0FDTCxLQUFNLFFBQ04sS0FBTSxFQUFPLEtBQ2IsUUFDQSxNQUNGLEdBR0YsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUlELEdBQWUsQ0FDYixLQUFNLEtBQ04sTUFBTyxDQUFDLE1BQU0sRUFDZCxNQUFPLENBQ0wsUUFBUyxFQUNULGdCQUFpQixFQUNqQixjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxFQUFTLENBQzNCLElBQ0UsVUFDRSxFQUNBLEVBQU8sRUFBTyxPQUFPLE9BQU8sRUFBRSxPQUFTLElBQU0sRUFBTyxlQUFlLEVBQUksRUFBSSxLQUMzRSxHQUFXLEVBQU8sU0FBUyxjQUFnQixFQUFPLFNBQVMsa0JBQWtCLHVCQUF3QiwwREFBK0QsRUFDeEssTUFBTyxDQUNMLEtBQU0sS0FDTixLQUFNLEVBQU8sS0FDYixVQUNBLEtBQU0sR0FBUSxHQUFlLEVBQU0sTUFBTSxFQUFFLEtBQzdDLEdBS0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixJQUFJLEVBQU8sR0FBWSxTQUFTLENBQUMsUUFBUSxFQUFHLENBQUMsRUFBRyxDQUFPLEVBRXZELEdBQUksRUFBTSxTQUdSLEdBRkEsRUFBSyxRQUFRLEtBQUssU0FBUyxFQUV2QixFQUFNLEtBQ1IsRUFBSyxNQUFNLFVBQVksR0FBTyxHQUFjLEVBQU0sS0FBTSxDQUFPLENBQUMsRUFJcEUsT0FBTyxHQUdULGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFPLElBQUksR0FBVyxTQUFTLFFBQVEsRUFFM0MsR0FBSSxFQUFNLFNBR1IsR0FGQSxFQUFLLGFBQWEsWUFBYSxTQUFTLEVBRXBDLEVBQU0sS0FDUixFQUFLLGFBQWEsU0FBVSxHQUFPLEdBQWMsRUFBTSxLQUFNLENBQU8sQ0FBQyxDQUFDLEVBSTFFLE9BQU8sRUFHWCxDQUFDLEVBRUcsR0FBWSxDQUNkLFdBQVksV0FDWixTQUFVLGlCQUNWLGlCQUFrQixpQkFDbEIsUUFBUyxTQUNULFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFFBQVMsZ0JBQ1QsY0FBZSxrQkFDakIsRUFrREEsR0FBZSxDQUNiLEtBQU0sV0FDTixNQUFPLENBQUMsV0FBWSxTQUFVLGdCQUM5QixFQUNBLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxFQUNqQixFQUVBLE9BQU8sQ0FBQyxFQUFNLENBQ1osSUFDRSxTQUNBLFlBQ0UsRUFDSixFQUFPLGNBQWMsRUFDckIsSUFBSSxFQUFRLEVBQU8sTUFBTSxFQUV6QixHQUFJLEdBQVUsRUFBTSxNQUFPLENBRXpCLEdBQUksSUFBYSxZQUFjLElBQWEsaUJBQzFDLEVBQU0sS0FBTyxHQUFVLEVBQU0sTUFHL0IsT0FBTyxHQUFlLEVBQU8sY0FBYyxFQUFHLFVBQVUsRUFHMUQsTUFBTSxJQUFJLEdBQVcsbUNBQW9DLENBQUssRUFHbEUsQ0FBQyxFQUtELEdBQWUsQ0FDYixLQUFNLFdBQ04sTUFBTyxDQUFDLFFBQVMsU0FBVSxTQUFVLFFBQVEsRUFDN0MsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEdBQ2YsVUFBVyxFQUNiLEVBRUEsT0FBTyxDQUFDLEVBQU8sQ0FDYixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU0sRUFBTyxPQUFPLFNBQVMsRUFDN0IsRUFBTyxFQUFJLEtBRWYsR0FBSSx3QkFBd0IsS0FBSyxDQUFJLEVBQ25DLE1BQU0sSUFBSSxHQUFXLDhCQUErQixDQUFHLEVBR3pELElBQUksRUFBVSxFQUNWLEVBQ0EsRUFBYSxDQUFDLENBQUMsQ0FBQyxFQUVwQixNQUFPLEVBQU8sT0FBTyxPQUFPLEVBQUUsT0FBUyxJQUdyQyxHQUZBLEVBQU0sRUFBTyxPQUFPLFNBQVMsRUFFekIsRUFBSSxPQUFTLElBQUssQ0FLcEIsR0FBSSxFQUFPLE9BQU8sT0FBTyxFQUFFLE9BQVMsSUFBSyxDQUN2QyxFQUFTLEVBQU8sT0FBTyxPQUFPLEVBQzlCLEVBQVcsR0FBUyxLQUFLLEdBQUcsRUFDNUIsTUFPRixHQUZBLEVBQU0sRUFBTyxPQUFPLFNBQVMsR0FFeEIsVUFBVSxLQUFLLEVBQUksSUFBSSxFQUMxQixNQUFNLElBQUksR0FBVyw2QkFBK0IsRUFBSSxLQUFPLElBQUksRUFHckUsR0FBSSxTQUFTLEVBQUksSUFBSSxJQUFNLEVBQVUsRUFDbkMsTUFBTSxJQUFJLEdBQVcscUJBQXVCLEVBQUksS0FBTyxpQkFBaUIsRUFHMUUsSUFDQSxFQUFXLEtBQUssQ0FBQyxDQUFDLFVBQ1QsRUFBSSxPQUFTLE1BQ3RCLE1BQU0sSUFBSSxHQUFXLDZCQUE2QixNQUVsRCxHQUFXLEdBQVMsS0FBSyxFQUFJLElBQUksRUFLckMsSUFDRSxVQUNFLEVBQU8sT0FBTyxXQUFXLEVBRTdCLEdBQUksRUFDRixFQUFPLFFBQVEsQ0FBTSxFQUd2QixHQUFJLElBQWEsVUFBWSxJQUFhLFNBQ3hDLEVBQVMsRUFBTyxPQUFPLGFBQWEsQ0FBTSxFQUMxQyxFQUFPLFFBQVEsRUFTakIsT0FMQSxFQUFPLE9BQU8sT0FBTyxJQUFJLEVBQU0sQ0FDN0IsU0FDQSxVQUNBLFlBQ0YsRUFBRyxJQUFhLEdBQVUsRUFBUyxFQUM1QixDQUNMLEtBQU0sV0FDTixLQUFNLEVBQU8sSUFDZixFQUdKLENBQUMsRUFLRCxHQUFlLENBQ2IsS0FBTSxXQUNOLE1BQU8sQ0FBQyxRQUFTLGVBQ2pCLEVBQ0EsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEdBQ2YsVUFBVyxFQUNiLEVBRUEsT0FBTyxDQUFDLEVBQU8sQ0FDYixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sR0FBcUIsRUFBTyxPQUFPLFNBQVMsQ0FBQyxFQUN4RCxFQUFPLE9BQU8sY0FBYyxFQUM1QixJQUFJLEVBQU0sSUFBTyxDQUFNLEVBRXZCLE9BREEsR0FBVyxFQUFRLEVBQU0sRUFBSyxJQUFhLGVBQWUsRUFDbkQsQ0FDTCxLQUFNLFdBQ04sS0FBTSxFQUFPLElBQ2YsRUFHSixDQUFDLEVBRUQsR0FBZSxDQUNiLEtBQU0sV0FDTixNQUFPLENBQUMsY0FBZSxrQkFDdkIsRUFDQSxNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsR0FDZixVQUFXLEVBQ2IsRUFFQSxPQUFPLENBQUMsRUFBTyxDQUNiLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBTyxHQUFxQixFQUFPLE9BQU8sU0FBUyxDQUFDLEVBQ3BELEVBQVMsRUFBTyxPQUFPLFNBQVMsRUFDaEMsRUFBTSxFQUFPLE9BQU8sU0FBUyxFQUlqQyxPQUhBLEdBQVcsRUFBUSxFQUFNLEVBQUssSUFBYSxrQkFBa0IsRUFDN0QsRUFBTyxPQUFPLFVBQVUsQ0FBRyxFQUMzQixFQUFPLE9BQU8sVUFBVSxDQUFNLEVBQ3ZCLENBQ0wsS0FBTSxXQUNOLEtBQU0sRUFBTyxJQUNmLEVBR0osQ0FBQyxFQXlKRyxHQUFNLENBQ1IsS0FBTSxPQUNOLEtBQU0sR0FBSyxFQUNiLEVBQ0ksSUFBUSxDQUFDLElBQUssVUFBVyxVQUFXLFFBQVEsRUFDNUMsSUFBYyxDQUFDLE1BQU8sVUFBVyxVQUFXLFFBQVEsRUF1VXBELEdBQXVCLENBQUMsSUFBSyxXQUFZLElBQUssV0FBWSxJQUFLLFdBQVksSUFBSyxXQUFZLE1BQU8sV0FBWSxNQUFPLFdBQVksV0FBWSxXQUFZLFNBQVUsU0FBVSxVQUFXLFVBQVcsU0FBVSxTQUFVLFFBQVEsRUFFaE8sSUFBd0IsQ0FBQyxZQUFhLGNBQWUsZ0JBQWlCLFlBQWEsY0FBZSxnQkFBaUIsSUFBSyxNQUFPLFNBQVUsU0FBVSxVQUFXLFVBQVcsVUFBVyxVQUFXLFdBQVksV0FBWSxTQUFVLFNBQVUsZUFBZ0IsZUFBZ0IsU0FBVSxRQUFRLEVBRTdSLEdBQXVCLENBQUMsSUFBSyxJQUFLLFdBQVksV0FBWSxJQUFLLGNBQWUsT0FBUSxNQUFNLEVBSTVGLEdBQWtCLENBQUMsRUFBRyxJQUFLLElBQUssSUFBSyxDQUFHLEVBb0N4QyxJQUE4QixDQUFDLENBQ2pDLEtBQU0sUUFDTixNQUFPLEdBQVEsWUFDakIsRUFBRyxDQUNELEtBQU0sUUFDTixNQUFPLEdBQVEsTUFDakIsRUFBRyxDQUNELEtBQU0sUUFDTixNQUFPLEdBQVEsSUFDakIsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsQ0FBQyxFQUVHLElBQStCLENBQUMsQ0FDbEMsS0FBTSxRQUNOLE1BQU8sR0FBUSxZQUNqQixFQUFHLENBQ0QsS0FBTSxRQUNOLE1BQU8sR0FBUSxNQUNqQixFQUFHLENBQ0QsS0FBTSxRQUNOLE1BQU8sR0FBUSxJQUNqQixFQUFHLENBQ0QsS0FBTSxPQUNSLENBQUMsRUFHRyxHQUE4QixDQUFDLENBQ2pDLEtBQU0sUUFDTixNQUFPLEdBQVEsWUFDakIsRUFBRyxDQUNELEtBQU0sUUFDTixNQUFPLEdBQVEsTUFDakIsRUFBRyxDQUNELEtBQU0sUUFDTixNQUFPLEdBQVEsSUFDakIsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sUUFDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sT0FDUixDQUFDLEVBeUhHLEdBQVksQ0FDZCxVQUFXLElBQ1gsV0FBWSxJQUNaLGdCQUFpQixHQUNqQixpQkFBa0IsR0FDbEIsZUFBZ0IsR0FDbEIsRUFHSSxHQUFpQixDQUNuQixTQUFVLENBQ1IsT0FBUSxRQUNSLEtBQU0sQ0FDUixFQUNBLFNBQVUsQ0FDUixPQUFRLFFBQ1IsS0FBTSxDQUNSLEVBQ0EsVUFBVyxDQUNULE9BQVEsUUFDUixLQUFNLENBQ1IsRUFDQSxVQUFXLENBQ1QsT0FBUSxRQUNSLEtBQU0sQ0FDUixFQUNBLFNBQVUsQ0FDUixPQUFRLFNBQ1IsS0FBTSxDQUNSLEVBQ0EsU0FBVSxDQUNSLE9BQVEsU0FDUixLQUFNLENBQ1IsRUFDQSxVQUFXLENBQ1QsT0FBUSxTQUNSLEtBQU0sQ0FDUixFQUNBLFVBQVcsQ0FDVCxPQUFRLFNBQ1IsS0FBTSxDQUNSLEVBQ0EsU0FBVSxDQUNSLE9BQVEsT0FDUixLQUFNLENBQ1IsRUFDQSxTQUFVLENBQ1IsT0FBUSxPQUNSLEtBQU0sQ0FDUixFQUNBLFVBQVcsQ0FDVCxPQUFRLE9BQ1IsS0FBTSxDQUNSLEVBQ0EsVUFBVyxDQUNULE9BQVEsT0FDUixLQUFNLENBQ1IsRUFDQSxRQUFTLENBQ1AsT0FBUSxPQUNSLEtBQU0sQ0FDUixFQUNBLFFBQVMsQ0FDUCxPQUFRLE9BQ1IsS0FBTSxDQUNSLEVBQ0EsU0FBVSxDQUNSLE9BQVEsT0FDUixLQUFNLENBQ1IsRUFDQSxTQUFVLENBQ1IsT0FBUSxPQUNSLEtBQU0sQ0FDUixDQUNGLEVBQ0ksSUFBYSxDQUFDLElBQUssV0FBWSxJQUFLLFdBQVksSUFBSyxXQUFZLElBQUssV0FBWSxNQUFPLFdBQVksTUFBTyxXQUFZLFdBQVksV0FBWSxTQUFVLFNBQVUsVUFBVyxVQUFXLFNBQVUsU0FBVSxJQUFLLElBQUssV0FBWSxTQUFVLFdBQVksU0FBVSxPQUFRLE9BQVEsVUFBVyxVQUFXLFVBQVcsVUFBVyxXQUFZLFdBQVksU0FBVSxTQUFVLGVBQWdCLGVBQWdCLFNBQVUsU0FBVSxJQUFLLGNBQWUsSUFBSyxTQUFVLE1BQU8sU0FBVSxZQUFhLFlBQWEsY0FBZSxjQUFlLGdCQUFpQixnQkFBaUIsR0FBRyxFQWVyakIsR0FBZSxDQUNiLEtBQU0sY0FDTixNQUFPLENBQUMsU0FBVSxTQUFVLFVBQVcsVUFBVyxTQUFVLFNBQVUsVUFBVyxVQUFXLFNBQVUsU0FBVSxVQUFXLFVBQVcsUUFBUyxRQUFTLFNBQVUsUUFBUSxFQUMxSyxNQUFPLENBQ0wsUUFBUyxFQUNULFNBQVUsQ0FBQyxXQUFXLENBQ3hCLEVBQ0EsUUFBUyxDQUFDLEVBQVMsSUFBUyxDQUMxQixJQUFJLEVBQVEsR0FBZSxFQUFLLEdBQUksQ0FBTyxFQUMzQyxNQUFPLENBQ0wsS0FBTSxjQUNOLEtBQU0sRUFBUSxPQUFPLEtBQ3JCLEtBQU0sR0FBZSxFQUFRLFVBQVUsS0FDdkMsT0FBUSxHQUFlLEVBQVEsVUFBVSxPQUN6QyxNQUFPLEVBQU0sSUFDZixHQUVGLFlBQWEsQ0FBQyxFQUFPLElBQVksQ0FDL0IsR0FBSSxFQUFNLFFBQVUsSUFHbEIsT0FBTyxHQUFZLFNBQVMsQ0FBQyxFQUFNLE1BQU0sQ0FBQyxFQUk1QyxPQUFPLEdBQVUsV0FBVyxFQUFNLE1BQU8sRUFBTSxLQUFNLEVBQVMsRUFBTSxLQUFNLENBQUMsRUFBTSxNQUFNLENBQUMsR0FFMUYsY0FBZSxLQUFTLENBQ3RCLElBQUksRUFBVyxDQUFDLEVBRWhCLEdBQUksRUFBTSxRQUFVLElBQ2xCLEVBQVMsS0FBSyxHQUFTLEVBQU0sTUFBTyxFQUFNLElBQUksQ0FBQyxFQUdqRCxJQUFJLEVBQU8sSUFBSSxHQUFXLFNBQVMsS0FBTSxDQUFRLEVBRWpELEdBQUksRUFBTSxTQUFXLFNBQVcsRUFBTSxTQUFXLFNBRy9DLEVBQUssYUFBYSxRQUFTLE1BQU0sTUFJakMsR0FBSyxhQUFhLFFBQVMsT0FBTyxFQUdwQyxFQUFLLGFBQWEsV0FBWSxNQUFNLEVBQ3BDLElBQUksRUFBTyxHQUFPLEdBQVUsZ0JBQWdCLEVBQU0sS0FBSyxFQUd2RCxPQUZBLEVBQUssYUFBYSxVQUFXLENBQUksRUFDakMsRUFBSyxhQUFhLFVBQVcsQ0FBSSxFQUMxQixFQUVYLENBQUMsRUFRRCxHQUFlLENBQ2IsS0FBTSxrQkFDTixNQUFPLENBQUMsU0FBUyxFQUNqQixNQUFPLENBQ0wsUUFBUyxFQUNULFVBQVcsRUFDYixFQUNBLFFBQVMsQ0FBQyxFQUFTLElBQVMsQ0FJMUIsSUFBSSxFQUFRLEVBQVEsT0FBTyxPQUFPLE9BQU8sSUFBSSxpQkFBaUIsRUFFOUQsR0FBSSxVQUFnQixJQUFVLFNBQzVCLE1BQU0sSUFBSSxHQUFXLDhDQUE4QyxFQUdyRSxNQUFPLENBQ0wsS0FBTSxrQkFDTixLQUFNLEVBQVEsT0FBTyxLQUNyQixNQUFPLEdBQWUsRUFBSyxHQUFJLENBQU8sRUFBRSxLQUN4QyxPQUVGLEVBRUosQ0FBQyxFQUNELEdBQWUsQ0FDYixLQUFNLFlBQ04sTUFBTyxDQUFDLFFBQVEsRUFDaEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxVQUFXLEVBQ2IsRUFDQSxRQUFTLENBQUMsRUFBUyxJQUFTLENBQzFCLElBQUksRUFBUSxHQUFlLEVBQUssR0FBSSxDQUFPLEVBQ3ZDLEVBQVMsRUFBUSxPQUVyQixFQUFFLEVBQU8sZUFFVCxJQUFJLEVBQU8sRUFBTyxnQkFBZ0IsRUFBSyxFQUN2QyxFQUFFLEVBQU8sZUFFVCxFQUFPLE9BQU8sVUFBVyxFQUFLLEVBQzlCLElBQUksRUFBUSxHQUFlLEVBQU8sY0FBYyxFQUFHLGlCQUFpQixFQUNwRSxNQUFPLENBQ0wsS0FBTSxZQUNOLEtBQU0sRUFBTyxLQUNiLE9BQ0EsS0FBTSxFQUFNLEtBQ1osTUFBTyxFQUFNLE1BQ2IsV0FBWSxFQUFNLEtBQ3BCLEdBRUYsWUFBYSxDQUFDLEVBQU8sSUFBWSxDQUMvQixHQUFhLENBQUssRUFFbEIsSUFBSSxFQUFRLEdBQWtCLEVBQU0sS0FBTSxFQUFTLEdBQU0sQ0FBQyxRQUFTLFFBQVEsQ0FBQyxFQUN4RSxFQUFjLEVBQ2QsRUFBYSxFQUNiLEVBQVksR0FFaEIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFJaEMsR0FBSSxFQUFNLEdBQUcsU0FDWCxFQUFZLE9BRVosR0FBYyxLQUFLLElBQUksRUFBTSxHQUFHLE9BQVEsQ0FBVyxFQUNuRCxFQUFhLEtBQUssSUFBSSxFQUFNLEdBQUcsTUFBTyxDQUFVLEVBT3BELEdBQWUsRUFBUSxlQUN2QixHQUFjLEVBQVEsZUFDdEIsSUFBSSxFQUVKLEdBQUksRUFBTSxPQUFTLElBRWpCLEVBQVksR0FBa0IsRUFBUyxDQUFDLE9BQU8sQ0FBQyxNQUloRCxHQUFZLEdBQVUsZUFBZSxFQUFNLEtBQU0sRUFBYSxFQUFZLEVBQVMsRUFBTSxLQUFNLENBQUMsT0FBTyxDQUFDLEVBTTFHLEdBRkEsRUFBTSxRQUFRLENBQVMsRUFFbkIsRUFDRixRQUFTLEVBQUssRUFBRyxFQUFLLEVBQU0sT0FBUSxJQUFNLENBQ3hDLElBQUksRUFBYyxFQUFNLEdBSXBCLEVBQVcsRUFBWSxTQUUzQixHQUFJLEVBRUYsRUFBTSxHQUFNLEdBQVUsZUFBZSxFQUFTLE1BQU8sRUFBYSxFQUFZLEVBQVMsUUFBUyxFQUFNLEtBQU0sQ0FBQyxDQUFDLEVBS3BILElBQUksRUFFSixHQUFJLEVBQU0sUUFBVSxJQUNsQixFQUFhLEdBQWtCLEVBQVMsQ0FBQyxRQUFRLENBQUMsTUFDN0MsQ0FDTCxJQUFJLEVBQWUsRUFBTSxXQUFhLEVBQVEsVUFBVSxFQUFNLFVBQVUsRUFBSSxFQUM1RSxFQUFhLEdBQVUsZUFBZSxFQUFNLE1BQU8sRUFBYSxFQUFZLEVBQWMsRUFBTSxLQUFNLENBQUMsUUFBUSxDQUFDLEVBS2xILE9BREEsRUFBTSxLQUFLLENBQVUsRUFDZCxHQUFZLFNBQVMsQ0FBQyxRQUFRLEVBQUcsRUFBTyxDQUFPLEdBRXhELGNBQWUsQ0FBQyxFQUFPLElBQVksQ0FDakMsR0FBYSxDQUFLLEVBQ2xCLElBQUksRUFBUSxHQUFnQixFQUFNLEtBQU0sQ0FBTyxFQUUvQyxHQUFJLEVBQU0sT0FBUyxJQUFLLENBQ3RCLElBQUksRUFBVyxJQUFJLEdBQVcsU0FBUyxLQUFNLENBQUMsR0FBUyxFQUFNLEtBQU0sRUFBTSxJQUFJLENBQUMsQ0FBQyxFQUMvRSxFQUFTLGFBQWEsUUFBUyxNQUFNLEVBQ3JDLEVBQU0sUUFBUSxDQUFRLEVBR3hCLEdBQUksRUFBTSxRQUFVLElBQUssQ0FDdkIsSUFBSSxFQUFZLElBQUksR0FBVyxTQUFTLEtBQU0sQ0FBQyxHQUFTLEVBQU0sTUFBTyxFQUFNLElBQUksQ0FBQyxDQUFDLEVBR2pGLEdBRkEsRUFBVSxhQUFhLFFBQVMsTUFBTSxFQUVsQyxFQUFNLFdBQ1IsRUFBVSxhQUFhLFlBQWEsRUFBTSxVQUFVLEVBR3RELEVBQU0sS0FBSyxDQUFTLEVBR3RCLE9BQU8sR0FBUSxDQUFLLEVBRXhCLENBQUMsRUFDRCxHQUFlLENBQ2IsS0FBTSxTQUNOLE1BQU8sQ0FBQyxVQUFVLEVBQ2xCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsVUFBVyxFQUNiLEVBQ0EsUUFBUyxDQUFDLEVBQVMsSUFBUyxDQUMxQixJQUFJLEVBQVEsR0FBZSxFQUFLLEdBQUksQ0FBTyxFQUUzQyxJQUFLLEVBQVEsT0FBTyxlQUNsQixNQUFNLElBQUksR0FBVyxvQ0FBcUMsQ0FBSyxFQUdqRSxNQUFPLENBQ0wsS0FBTSxTQUNOLEtBQU0sRUFBUSxPQUFPLEtBQ3JCLE1BQU8sRUFBTSxJQUNmLEdBRUYsWUFBYSxDQUFDLEVBQU8sSUFBWSxDQUMvQixJQUFJLEVBRUosR0FBSSxFQUFNLFFBQVUsSUFDbEIsRUFBYyxHQUFrQixFQUFTLENBQUMsQ0FBQyxNQUN0QyxDQUNMLEVBQWMsR0FBVSxXQUFXLEVBQU0sTUFBTyxFQUFHLEVBQVMsRUFBTSxLQUFNLENBQUMsQ0FBQyxFQUMxRSxJQUFJLEVBQVcsQ0FDYixNQUFPLEVBQU0sTUFDYixTQUNGLEVBTUEsRUFBWSxTQUFXLEVBR3pCLE9BQU8sR0FFVCxjQUFlLENBQUMsRUFBTyxJQUFZLENBS2pDLElBQUksRUFBVyxFQUFNLFFBQVUsVUFBWSxFQUFNLFFBQVUsSUFBTSxHQUFTLElBQUssTUFBTSxFQUFJLEdBQVMsRUFBTSxNQUFPLEVBQU0sSUFBSSxFQUNySCxFQUFhLElBQUksR0FBVyxTQUFTLEtBQU0sQ0FBQyxDQUFRLENBQUMsRUFNekQsT0FMQSxFQUFXLGFBQWEsUUFBUyxNQUFNLEVBR3ZDLEVBQVcsYUFBYSxTQUFVLFFBQVEsRUFDMUMsRUFBVyxhQUFhLFNBQVUsUUFBUSxFQUNuQyxFQUVYLENBQUMsRUF1TkQsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsWUFBWSxFQUNwQixNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsR0FDZixTQUFVLENBQUMsUUFBUyxNQUFNLENBQzVCLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxFQUFTLENBQzNCLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBUSxHQUFlLEVBQUssR0FBSSxhQUFhLEVBQUUsTUFDL0MsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLFVBQ04sS0FBTSxFQUFPLEtBQ2IsTUFBTyxFQUNQLGdCQUFpQixFQUNqQixNQUNGLEdBR0YsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUNELEdBQWUsQ0FDYixLQUFNLFVBQ04sTUFBTyxDQUFDLGFBQWEsRUFDckIsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEdBQ2YsU0FBVSxDQUFDLFFBQVMsUUFBUyxNQUFNLENBQ3JDLEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxFQUFTLENBQzVCLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBYyxHQUFlLEVBQUssR0FBSSxhQUFhLEVBQUUsTUFDckQsRUFBa0IsR0FBZSxFQUFLLEdBQUksYUFBYSxFQUFFLE1BQ3pELEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxVQUNOLEtBQU0sRUFBTyxLQUNiLE1BQU8sRUFDUCxrQkFDQSxjQUNBLE1BQ0YsR0FHRixZQUFhLEdBQ2IsY0FBZSxFQUNqQixDQUFDLEVBQ0QsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsUUFBUSxFQUNoQixNQUFPLENBQ0wsUUFBUyxFQUNULFNBQVUsQ0FBQyxNQUFNLEVBQ2pCLGNBQWUsRUFDakIsRUFFQSxPQUFPLENBQUMsRUFBTyxFQUFNLENBQ25CLElBQ0UsVUFDRSxFQUNKLE1BQU8sQ0FDTCxLQUFNLFVBQ04sS0FBTSxFQUFPLEtBQ2IsTUFBTyxTQUNQLEtBQU0sRUFBSyxFQUNiLEVBR0osQ0FBQyxFQUNELEdBQWUsQ0FDYixLQUFNLFVBQ04sTUFBTyxDQUFDLFdBQVksWUFBYSxZQUFhLFNBQVUsU0FBUyxFQUNqRSxNQUFPLENBQ0wsUUFBUyxDQUNYLEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxDQUNuQixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxVQUNOLEtBQU0sRUFBTyxLQUNiLE1BQU8sRUFDUCxNQUNGLEdBR0YsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUNELEdBQWUsQ0FDYixLQUFNLFVBQ04sTUFBTyxDQUFDLFFBQVEsRUFDaEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxTQUFVLENBQUMsTUFBTSxFQUNqQixjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxDQUNuQixJQUNFLFVBQ0UsRUFDSixNQUFPLENBQ0wsS0FBTSxVQUNOLEtBQU0sRUFBTyxLQUNiLE1BQU8sU0FDUCxLQUFNLEVBQUssRUFDYixFQUdKLENBQUMsRUFPRyxHQUFnQixDQUFDLEVBd0NqQixHQUFVLENBQUMsRUFnaEJYLElBQVcsQ0FDYixFQUFHLFVBQ0gsRUFBRyxRQUNILEVBQUcsUUFDTCxFQWdQQSxHQUFrQixDQUNoQixLQUFNLFFBQ04sTUFBTyxDQUFDLFFBQVMsUUFBUSxFQUN6QixNQUFPLENBQ0wsUUFBUyxDQUNYLEVBRUEsT0FBTyxDQUFDLEVBQVMsRUFBTSxDQUtyQixJQUFJLEVBQVUsR0FBb0IsRUFBSyxFQUFFLEVBQ3JDLEVBQVcsRUFBVSxDQUFDLEVBQUssRUFBRSxFQUFJLEdBQWUsRUFBSyxHQUFJLFVBQVUsRUFBRSxLQUNyRSxFQUFPLEVBQVMsWUFBYSxDQUFDLEVBQUssQ0FDckMsSUFBSSxFQUFPLEdBQXFCLENBQUcsRUFDL0IsRUFBSyxFQUFLLEtBRWQsR0FBSSxNQUFNLFFBQVEsQ0FBRSxJQUFNLEdBQ3hCLE1BQU8sQ0FDTCxLQUFNLFFBQ04sTUFBTyxDQUNULFVBQ1MsSUFBTyxJQUNoQixNQUFPLENBQ0wsS0FBTSxZQUNOLFVBQVcsR0FDYixVQUNTLElBQU8sSUFDaEIsTUFBTyxDQUNMLEtBQU0sWUFDTixVQUFXLEdBQ2IsRUFHRixNQUFNLElBQUksR0FBVyw2QkFBK0IsRUFBSSxDQUFHLEVBQzVELEVBQ0csRUFBTSxDQUNSLE9BQ0Esb0JBQXFCLEdBRXJCLFdBQVksRUFBSyxNQUNuQixFQUNBLE9BQU8sR0FBVyxFQUFRLE9BQVEsRUFBSyxHQUFXLEVBQVEsT0FBTyxDQUFDLEdBR3BFLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFLRCxHQUFrQixDQUNoQixLQUFNLFFBQ04sTUFBTyxDQUFDLFNBQVUsVUFBVyxVQUFXLFVBQVcsVUFBVyxVQUFXLFVBQVcsV0FBWSxXQUFZLFdBQVksV0FBWSxVQUFVLEVBQzlJLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBUyxDQUNmLElBQUksRUFBYSxDQUNmLE9BQVUsS0FDVixRQUFXLENBQUMsSUFBSyxHQUFHLEVBQ3BCLFFBQVcsQ0FBQyxJQUFLLEdBQUcsRUFDcEIsUUFBVyxDQUFDLE1BQU8sS0FBSyxFQUN4QixRQUFXLENBQUMsSUFBSyxHQUFHLEVBQ3BCLFFBQVcsQ0FBQyxTQUFVLFFBQVEsQ0FDaEMsRUFBRSxFQUFRLFFBQVEsUUFBUSxJQUFLLEVBQUUsR0FFN0IsRUFBVyxJQUNYLEVBQVUsQ0FDWixvQkFBcUIsR0FDckIsS0FBTSxDQUFDLENBQ0wsS0FBTSxRQUNOLE1BQU8sQ0FDVCxDQUFDLENBQ0gsRUFFQSxHQUFJLEVBQVEsUUFBUSxPQUFPLEVBQVEsUUFBUSxPQUFTLENBQUMsSUFBTSxJQUFLLENBRzlELElBQUksRUFBUyxFQUFRLE9BR3JCLEdBRkEsRUFBTyxjQUFjLEVBRWpCLEVBQU8sTUFBTSxFQUFFLE9BQVMsSUFBSyxDQUsvQixHQUpBLEVBQU8sUUFBUSxFQUNmLEVBQU8sY0FBYyxFQUNyQixFQUFXLEVBQU8sTUFBTSxFQUFFLEtBRXRCLE1BQU0sUUFBUSxDQUFRLElBQU0sR0FDOUIsTUFBTSxJQUFJLEdBQVcsdUJBQXdCLEVBQU8sU0FBUyxFQUcvRCxFQUFPLFFBQVEsRUFDZixFQUFPLGNBQWMsRUFDckIsRUFBTyxPQUFPLEdBQUcsRUFDakIsRUFBTyxRQUFRLEVBQ2YsRUFBUSxLQUFPLENBQUMsQ0FDZCxLQUFNLFFBQ04sTUFBTyxDQUNULENBQUMsR0FJTCxJQUFJLEVBQU0sR0FBVyxFQUFRLE9BQVEsRUFBUyxHQUFXLEVBQVEsT0FBTyxDQUFDLEVBRXJFLEVBQVUsS0FBSyxJQUFJLEVBQUcsR0FBRyxFQUFJLEtBQUssSUFBSSxLQUFPLEVBQUksTUFBTSxDQUFDLEVBSzVELE9BSkEsRUFBSSxLQUFPLElBQUksTUFBTSxDQUFPLEVBQUUsS0FBSyxDQUNqQyxLQUFNLFFBQ04sTUFBTyxDQUNULENBQUMsRUFDTSxFQUFhLENBQ2xCLEtBQU0sWUFDTixLQUFNLEVBQVEsS0FDZCxLQUFNLENBQUMsQ0FBRyxFQUNWLEtBQU0sRUFBVyxHQUNqQixNQUFPLEVBQVcsR0FDbEIsV0FBWSxNQUVkLEVBQUksR0FHTixZQUFhLEdBQ2IsY0FBZSxFQUNqQixDQUFDLEVBQ0QsR0FBa0IsQ0FDaEIsS0FBTSxRQUNOLE1BQU8sQ0FBQyxhQUFhLEVBQ3JCLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBUyxDQUNmLElBQUksRUFBVSxDQUNaLGFBQWMsR0FDaEIsRUFDSSxFQUFNLEdBQVcsRUFBUSxPQUFRLEVBQVMsUUFBUSxFQUV0RCxPQURBLEVBQUksa0JBQW9CLFFBQ2pCLEdBR1QsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUNELEdBQWtCLENBQ2hCLEtBQU0sUUFDTixNQUFPLENBQUMsVUFBVSxFQUNsQixNQUFPLENBQ0wsUUFBUyxDQUNYLEVBRUEsT0FBTyxDQUFDLEVBQVMsRUFBTSxDQUVyQixJQUFJLEVBQVUsR0FBb0IsRUFBSyxFQUFFLEVBQ3JDLEVBQVcsRUFBVSxDQUFDLEVBQUssRUFBRSxFQUFJLEdBQWUsRUFBSyxHQUFJLFVBQVUsRUFBRSxLQUNyRSxFQUFPLEVBQVMsWUFBYSxDQUFDLEVBQUssQ0FDckMsSUFBSSxFQUFPLEdBQXFCLENBQUcsRUFDL0IsRUFBSyxFQUFLLEtBRWQsR0FBSSxLQUFLLFFBQVEsQ0FBRSxJQUFNLEdBQ3ZCLE1BQU8sQ0FDTCxLQUFNLFFBQ04sTUFBTyxDQUNULEVBR0YsTUFBTSxJQUFJLEdBQVcsNkJBQStCLEVBQUksQ0FBRyxFQUM1RCxFQUVELEdBQUksRUFBSyxPQUFTLEVBQ2hCLE1BQU0sSUFBSSxHQUFXLHdDQUF3QyxFQUcvRCxJQUFJLEVBQU0sQ0FDUixPQUNBLG9CQUFxQixHQUNyQixhQUFjLEdBQ2hCLEVBR0EsR0FGQSxFQUFNLEdBQVcsRUFBUSxPQUFRLEVBQUssUUFBUSxFQUUxQyxFQUFJLEtBQUssT0FBUyxHQUFLLEVBQUksS0FBSyxHQUFHLE9BQVMsRUFDOUMsTUFBTSxJQUFJLEdBQVcsd0NBQXdDLEVBRy9ELE9BQU8sR0FHVCxZQUFhLEdBQ2IsY0FBZSxFQUNqQixDQUFDLEVBT0QsR0FBa0IsQ0FDaEIsS0FBTSxRQUNOLE1BQU8sQ0FBQyxRQUFTLFNBQVUsU0FBVSxTQUFTLEVBQzlDLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBUyxDQUNmLElBQUksRUFBVSxDQUNaLGFBQWMsSUFDZCxLQUFNLENBQUMsQ0FDTCxLQUFNLFFBQ04sTUFBTyxJQUNQLE9BQVEsRUFLUixRQUFTLENBR1gsRUFBRyxDQUNELEtBQU0sUUFDTixNQUFPLElBQ1AsT0FBUSxFQUNSLFFBQVMsQ0FDWCxDQUFDLENBQ0gsRUFDSSxFQUFNLEdBQVcsRUFBUSxPQUFRLEVBQVMsR0FBVyxFQUFRLE9BQU8sQ0FBQyxFQUN6RSxNQUFPLENBQ0wsS0FBTSxZQUNOLEtBQU0sRUFBUSxLQUNkLEtBQU0sQ0FBQyxDQUFHLEVBQ1YsS0FBTSxFQUFRLFFBQVEsUUFBUSxHQUFHLEVBQUksR0FBSyxJQUFNLE1BQ2hELE1BQU8sRUFBUSxRQUFRLFFBQVEsR0FBRyxFQUFJLEdBQUssTUFBUSxJQUNuRCxXQUFZLE1BQ2QsR0FHRixZQUFhLEdBQ2IsY0FBZSxFQUNqQixDQUFDLEVBT0QsR0FBa0IsQ0FDaEIsS0FBTSxRQUNOLE1BQU8sQ0FBQyxRQUFTLFNBQVUsVUFBVyxPQUFPLEVBQzdDLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFDQSxRQUFTLEdBQ1QsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUlELEdBQWtCLENBQ2hCLEtBQU0sUUFDTixNQUFPLENBQUMsV0FBWSxTQUFVLFNBQVMsRUFDdkMsTUFBTyxDQUNMLFFBQVMsQ0FDWCxFQUVBLE9BQU8sQ0FBQyxFQUFTLENBQ2YsR0FBSSxHQUFNLFNBQVMsQ0FBQyxTQUFVLFNBQVMsRUFBRyxFQUFRLE9BQU8sRUFDdkQsR0FBOEIsQ0FBTyxFQUd2QyxJQUFJLEVBQU0sQ0FDUixLQUFNLENBQUMsQ0FDTCxLQUFNLFFBQ04sTUFBTyxHQUNULENBQUMsRUFDRCxPQUFRLEdBQ1Isa0JBQW1CLFNBQ25CLFFBQVMsR0FBVyxFQUFRLE9BQU8sRUFDbkMsZUFBZ0IsR0FDaEIsTUFBTyxFQUFRLE9BQU8sU0FBUyxLQUNqQyxFQUNBLE9BQU8sR0FBVyxFQUFRLE9BQVEsRUFBSyxTQUFTLEdBR2xELFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFJRCxHQUFrQixDQUNoQixLQUFNLFFBQ04sTUFBTyxDQUFDLFVBQVcsV0FBWSxXQUFXLEVBQzFDLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFDQSxRQUFTLEdBQ1QsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUNELEdBQWtCLENBQ2hCLEtBQU0sUUFDTixNQUFPLENBQUMsV0FBWSxXQUFXLEVBQy9CLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBUyxDQUNmLEdBQThCLENBQU8sRUFDckMsSUFBSSxFQUFNLENBQ1IsUUFBUyxHQUFXLEVBQVEsT0FBTyxFQUNuQyxlQUFnQixHQUNoQixVQUFXLEdBQ1gsV0FBWSxFQUNaLE1BQU8sRUFBUSxPQUFPLFNBQVMsS0FDakMsRUFDQSxPQUFPLEdBQVcsRUFBUSxPQUFRLEVBQUssU0FBUyxHQUdsRCxZQUFhLEdBQ2IsY0FBZSxFQUNqQixDQUFDLEVBQ0QsR0FBa0IsQ0FDaEIsS0FBTSxRQUNOLE1BQU8sQ0FBQyxJQUFJLEVBQ1osTUFBTyxDQUNMLFFBQVMsQ0FDWCxFQUVBLE9BQU8sQ0FBQyxFQUFTLENBRWYsT0FEQSxHQUE4QixDQUFPLEVBQzlCLElBQVEsRUFBUSxNQUFNLEdBRy9CLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFDRCxHQUFZLGFBQWMsbUJBQW1CLEVBQzdDLEdBQVksVUFBVyxZQUFZLEVBRW5DLEdBQWUsQ0FDYixLQUFNLE9BRU4sTUFBTyxDQUFDLFVBQVcsYUFBYSxFQUNoQyxNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsR0FDZixjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQVMsRUFBTSxDQUNyQixNQUFNLElBQUksR0FBVyxFQUFRLFNBQVcsc0NBQXNDLEVBR2xGLENBQUMsRUFFRyxHQUFlLEdBSW5CLEdBQWUsQ0FDYixLQUFNLGNBQ04sTUFBTyxDQUFDLFVBQVcsT0FBTyxFQUMxQixNQUFPLENBQ0wsUUFBUyxFQUNULFNBQVUsQ0FBQyxNQUFNLENBQ25CLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxDQUNsQixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQVksRUFBSyxHQUVyQixHQUFJLEVBQVUsT0FBUyxXQUNyQixNQUFNLElBQUksR0FBVywyQkFBNEIsQ0FBUyxFQUc1RCxJQUFJLEVBQVUsR0FFZCxRQUFTLEVBQUksRUFBRyxFQUFJLEVBQVUsS0FBSyxTQUFVLEVBQzNDLEdBQVcsR0FBZSxFQUFVLEtBQUssR0FBSSxTQUFTLEVBQUUsS0FHMUQsR0FBSSxJQUFhLFVBQVcsQ0FFMUIsSUFBSyxHQUFhLGVBQWUsQ0FBTyxFQUN0QyxNQUFNLElBQUksR0FBVyx3QkFBMEIsRUFBUyxDQUFTLEVBS25FLElBQUksRUFBTSxHQUFhLElBRXJCLEtBQU0sRUFDTixXQUNFLEVBQU8sZUFBZSxXQUFhLEVBQVUsSUFBSyxDQUFHLEVBQ3JELEVBQVUsQ0FDWixLQUFNLEVBQU8sS0FDYixVQUNBLFFBQ0YsRUFDSSxFQUFTLEVBQUksUUFBUSxFQUFTLEVBQU8sQ0FBTyxFQUNoRCxFQUFPLE9BQU8sUUFBUyxFQUFLLEVBQzVCLElBQUksRUFBZSxFQUFPLFVBQ3RCLEVBQU0sR0FBZSxFQUFPLGNBQWMsRUFBRyxhQUFhLEVBRTlELEdBQUksRUFBSSxPQUFTLEVBQ2YsTUFBTSxJQUFJLEdBQVcscUJBQXVCLEVBQVUsc0JBQXdCLEVBQUksS0FBTyxJQUFLLENBQVksRUFJNUcsT0FBTyxFQUdULE1BQU8sQ0FDTCxLQUFNLGNBQ04sS0FBTSxFQUFPLEtBQ2IsS0FBTSxFQUNOLFdBQ0YsRUFHSixDQUFDLEVBZ0JHLEdBQWMsQ0FDaEIsUUFBUyxXQUNULFNBQVUsV0FDVixTQUFVLGFBQ1YsT0FBUSxjQUNWLEVBQ0EsR0FBZSxDQUNiLEtBQU0sT0FDTixNQUFPLENBQ1AsV0FBWSxXQUFZLFdBQVksZUFDcEMsV0FBWSxZQUFhLGFBQWMsWUFBYSxXQUFZLFdBQ2hFLFFBQVMsU0FBVSxRQUFRLEVBQzNCLE1BQU8sQ0FDTCxRQUFTLEVBQ1Qsa0JBQW1CLEVBQ3JCLEVBQ0EsUUFBUyxDQUFDLEVBQU0sSUFBUyxDQUN2QixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sR0FBa0IsRUFBSyxFQUFFLEVBQ2hDLEVBQU8sRUFFWCxHQUFJLEtBQVEsR0FDVixFQUFPLEdBQVksR0FHckIsTUFBTyxDQUNMLEtBQU0sT0FDTixLQUFNLEVBQU8sS0FDYixLQUFNLEVBQUssTUFBTSxDQUFDLEVBQ2xCLE1BQ0YsR0FFRixZQUFhLEdBQ2IsY0FBZSxFQUNqQixDQUFDLEVBQ0QsR0FBZSxDQUNiLEtBQU0sU0FDTixNQUFPLENBQUMsZUFBZ0IsTUFBTSxFQUM5QixNQUFPLENBQ0wsUUFBUyxDQUNYLEVBQ0EsUUFBUyxDQUFDLEVBQU8sSUFBUyxDQUN4QixJQUNFLFVBQ0UsRUFDQSxFQUFPLEVBQUssR0FDWixFQUFpQixHQUFNLGVBQWUsQ0FBSSxFQUc5QyxNQUFPLENBQ0wsS0FBTSxTQUNOLEtBQU0sRUFBTyxLQUNiLE9BQVEsR0FBWSxDQUFJLEVBQ3hCLEtBQU0sQ0FBQyxDQUNMLEtBQU0sT0FDTixLQUFNLEVBQU8sS0FDYixLQUFNLGFBQ04sTUFDRixDQUFDLEVBQ0QsZUFBZ0IsQ0FDbEIsRUFFSixDQUFDLEVBRUQsR0FBZSxDQUNiLEtBQU0sT0FDTixNQUFPLENBQUMsT0FBUSxPQUFRLE9BQVEsT0FBUSxPQUFRLE9BQU8sRUFDdkQsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEVBQ2pCLEVBQ0EsUUFBUyxDQUFDLEVBQU8sSUFBUyxDQUN4QixJQUNFLFNBQ0EsV0FDQSxvQkFDRSxHQUVGLFFBQ0UsRUFDQSxFQUFPLEVBQU8sZ0JBQWdCLEdBQU0sQ0FBZ0IsRUFDcEQsRUFBUSxPQUFTLEVBQVMsTUFBTSxDQUFDLEVBQ3JDLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUNOLEtBQU0sRUFDTixLQUFNLENBQ0osS0FBTSxXQUNOLEtBQU0sRUFBTyxLQUNiLE1BQ0YsQ0FDRixHQUVGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUE4TkQsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsVUFBVyxTQUFVLFVBQVcsV0FBWSxVQUFXLFdBQVksZUFDM0UsZ0JBQWlCLGVBQ2pCLEVBQ0EsTUFBTyxDQUNMLFFBQVMsRUFDVCxrQkFBbUIsRUFDckIsRUFDQSxRQUFTLENBQUMsRUFBTSxJQUFTLENBQ3ZCLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBUSxFQUFLLEdBQ2IsRUFBUSxFQUFLLEdBQ2IsRUFDQSxFQUFZLEtBQ1osRUFBYSxLQUNiLEVBQU8sT0FFWCxPQUFRLE9BQ0QsY0FDQSxhQUNBLFVBQ0gsRUFBYSxHQUNiLFVBRUcsZUFDSCxFQUFhLEdBQ2IsVUFFRyxlQUNBLGNBQ0EsV0FDSCxFQUFhLEdBQ2IsRUFBWSxJQUNaLEVBQWEsSUFDYixVQUVHLGdCQUNILEVBQWEsR0FDYixFQUFZLE1BQ1osRUFBYSxNQUNiLFVBRUcsZ0JBQ0gsRUFBYSxHQUNiLEVBQVksSUFDWixFQUFhLElBQ2IsY0FHQSxNQUFNLElBQUksTUFBTSw4QkFBOEIsRUFHbEQsT0FBUSxPQUNELGNBQ0EsV0FDSCxFQUFPLFVBQ1AsVUFFRyxjQUNBLFdBQ0gsRUFBTyxPQUNQLE1BR0osTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FDYixVQUFXLEdBQ1gsUUFDQSxRQUNBLGFBQ0EsWUFDQSxhQUNBLE9BQ0EsUUFBUyxJQUNYLEdBRUYsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUNELEdBQWUsQ0FDYixLQUFNLFVBQ04sTUFBTyxDQUFDLFNBQVMsRUFDakIsTUFBTyxDQUNMLFFBQVMsQ0FDWCxFQUNBLFFBQVMsQ0FBQyxFQUFPLElBQVMsQ0FDeEIsSUFDRSxTQUNBLFlBQ0UsRUFDQSxFQUFRLEVBQUssR0FDYixFQUFRLEVBQUssR0FDakIsTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FDYixVQUFXLEdBQ1gsUUFDQSxRQUNBLFdBQVksR0FDWixVQUFXLEtBQ1gsV0FBWSxLQUNaLEtBQU0sVUFDTixRQUFTLElBQ1gsRUFFSixDQUFDLEVBR0QsR0FBZSxDQUNiLEtBQU0sUUFDTixNQUFPLENBQUMsU0FBVSxXQUFZLFNBQVUsVUFBVyxTQUFTLEVBQzVELE1BQU8sQ0FDTCxRQUFTLEVBQ1QsTUFBTyxFQUNULEVBRUEsT0FBTyxDQUFDLEVBQU8sQ0FDYixJQUNFLFNBQ0EsV0FDQSxTQUNFLEVBQ0EsRUFFSixPQUFRLE9BQ0QsU0FDSCxFQUFjLFNBQ2QsVUFFRyxXQUNILEVBQWMsVUFDZCxVQUVHLFNBQ0gsRUFBYyxlQUNkLFVBRUcsVUFDSCxFQUFjLGdCQUNkLFVBRUcsVUFDSCxFQUFjLGdCQUNkLGNBR0EsTUFBTSxJQUFJLE1BQU0sb0NBQW9DLEVBR3hELE1BQU8sQ0FDTCxLQUFNLFFBQ04sS0FBTSxFQUFPLEtBQ2IsY0FDQSxPQUNGLEVBR0osQ0FBQyxFQUNHLEdBQVksQ0FBQyxVQUFXLE9BQVEsU0FBVSxjQUFjLEVBYTVELEdBQWUsQ0FDYixLQUFNLFVBQ04sTUFBTyxDQUFDLFdBQVcsRUFDbkIsTUFBTyxDQUNMLFFBQVMsRUFDVCxrQkFBbUIsR0FDbkIsU0FBVSxDQUFDLE9BQVEsT0FBUSxPQUFRLE9BQVEsT0FBUSxNQUFNLENBQzNELEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxDQUNuQixJQUNFLFVBQ0UsRUFDQSxFQUFRLEVBQUssR0FDYixFQUFRLEVBQUssR0FFYixFQUFXLEdBQWtCLEVBQUssRUFBRSxFQUNwQyxFQUFZLEVBQVMsT0FBUyxRQUFVLEVBQVMsU0FBVyxPQUFTLEdBQWUsRUFBUyxJQUFJLEVBQUksS0FDckcsRUFBWSxHQUFrQixFQUFLLEVBQUUsRUFDckMsRUFBYSxFQUFVLE9BQVMsUUFBVSxFQUFVLFNBQVcsUUFBVSxHQUFlLEVBQVUsSUFBSSxFQUFJLEtBQzFHLEVBQVUsR0FBZSxFQUFLLEdBQUksTUFBTSxFQUN4QyxFQUNBLEVBQVUsS0FFZCxHQUFJLEVBQVEsUUFJVixFQUFhLE9BRWIsR0FBVSxFQUFRLE1BQ2xCLEVBQWEsRUFBUSxPQUFTLEVBSWhDLElBQUksRUFBTyxPQUNQLEVBQU8sRUFBSyxHQUVoQixHQUFJLEVBQUssT0FBUyxZQUNoQixHQUFJLEVBQUssS0FBSyxPQUFTLEVBQUcsQ0FDeEIsSUFBSSxFQUFVLEdBQWUsRUFBSyxLQUFLLEdBQUksU0FBUyxFQUNwRCxFQUFPLEdBQVUsT0FBTyxFQUFRLElBQUksUUFHdEMsR0FBTyxHQUFlLEVBQU0sU0FBUyxFQUNyQyxFQUFPLEdBQVUsT0FBTyxFQUFLLElBQUksR0FHbkMsTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FDYixRQUNBLFFBQ0EsVUFBVyxHQUNYLGFBQ0EsVUFDQSxZQUNBLGFBQ0EsTUFDRixHQUdGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxRQUNOLE1BQU8sQ0FBQyxTQUFTLEVBQ2pCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsU0FBVSxDQUFDLE1BQU0sRUFDakIsTUFBTyxFQUNULEVBRUEsT0FBTyxDQUFDLEVBQU8sRUFBTSxDQUNuQixJQUNFLFNBQ0EsV0FDQSxTQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sUUFDTixLQUFNLEVBQU8sS0FDYixZQUFhLGdCQUNiLEtBQU0sR0FBZSxFQUFLLEdBQUksTUFBTSxFQUFFLE1BQ3RDLE9BQ0YsRUFHSixDQUFDLEVBQ0QsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsZUFBZSxFQUN2QixNQUFPLENBQ0wsUUFBUyxFQUNULFNBQVUsQ0FBQyxPQUFRLE9BQVEsTUFBTSxDQUNuQyxFQUNBLFFBQVMsQ0FBQyxFQUFPLElBQVMsQ0FDeEIsSUFDRSxTQUNBLFlBQ0UsRUFDQSxFQUFRLEVBQUssR0FDYixFQUFVLElBQU8sR0FBZSxFQUFLLEdBQUksT0FBTyxFQUFFLElBQUksRUFDdEQsRUFBUSxFQUFLLEdBQ2IsRUFBYSxFQUFRLE9BQVMsRUFDbEMsTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FDYixRQUNBLFFBQ0EsVUFBVyxHQUNYLGFBQ0EsVUFDQSxVQUFXLEtBQ1gsV0FBWSxLQUNaLEtBQU0sTUFDUixHQUVGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFrSEQsR0FBZSxDQUNiLEtBQU0sYUFDTixNQUFPLENBQUMsY0FBZSxjQUFjLEVBQ3JDLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsU0FDQSxZQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sYUFDTixLQUFNLEVBQU8sS0FDYixNQUFPLEVBQ1AsT0FBUSxVQUFVLEtBQUssQ0FBUSxFQUMvQixLQUFNLEVBQUssRUFDYixHQUdGLFlBQWEsR0FDYixjQUFlLEdBQ2pCLENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxPQUNOLE1BQU8sQ0FBQyxRQUFRLEVBQ2hCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsU0FBVSxDQUFDLE1BQU8sVUFBVSxFQUM1QixjQUFlLEVBQ2pCLEVBQ0EsUUFBUyxDQUFDLEVBQU0sSUFBUyxDQUN2QixJQUNFLFVBQ0UsRUFDQSxFQUFPLEVBQUssR0FDWixFQUFPLEdBQWUsRUFBSyxHQUFJLEtBQUssRUFBRSxJQUUxQyxJQUFLLEVBQU8sU0FBUyxVQUFVLENBQzdCLFFBQVMsU0FDVCxJQUFLLENBQ1AsQ0FBQyxFQUNDLE9BQU8sRUFBTyxxQkFBcUIsUUFBUSxFQUc3QyxNQUFPLENBQ0wsS0FBTSxPQUNOLEtBQU0sRUFBTyxLQUNiLE9BQ0EsS0FBTSxHQUFZLENBQUksQ0FDeEIsR0FFRixZQUFhLENBQUMsRUFBTyxJQUFZLENBQy9CLElBQUksRUFBVyxHQUFrQixFQUFNLEtBQU0sRUFBUyxFQUFLLEVBQzNELE9BQU8sR0FBWSxXQUFXLEVBQU0sS0FBTSxDQUFDLEVBQUcsRUFBVSxDQUFPLEdBRWpFLGNBQWUsQ0FBQyxFQUFPLElBQVksQ0FDakMsSUFBSSxFQUFPLEdBQW1CLEVBQU0sS0FBTSxDQUFPLEVBRWpELEtBQU0sYUFBZ0IsSUFDcEIsRUFBTyxJQUFJLEdBQVMsT0FBUSxDQUFDLENBQUksQ0FBQyxFQUlwQyxPQURBLEVBQUssYUFBYSxPQUFRLEVBQU0sSUFBSSxFQUM3QixFQUVYLENBQUMsRUFDRCxHQUFlLENBQ2IsS0FBTSxPQUNOLE1BQU8sQ0FBQyxPQUFPLEVBQ2YsTUFBTyxDQUNMLFFBQVMsRUFDVCxTQUFVLENBQUMsS0FBSyxFQUNoQixjQUFlLEVBQ2pCLEVBQ0EsUUFBUyxDQUFDLEVBQU8sSUFBUyxDQUN4QixJQUNFLFVBQ0UsRUFDQSxFQUFPLEdBQWUsRUFBSyxHQUFJLEtBQUssRUFBRSxJQUUxQyxJQUFLLEVBQU8sU0FBUyxVQUFVLENBQzdCLFFBQVMsUUFDVCxJQUFLLENBQ1AsQ0FBQyxFQUNDLE9BQU8sRUFBTyxxQkFBcUIsT0FBTyxFQUc1QyxJQUFJLEVBQVEsQ0FBQyxFQUViLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBSyxPQUFRLElBQUssQ0FDcEMsSUFBSSxFQUFJLEVBQUssR0FFYixHQUFJLElBQU0sSUFDUixFQUFJLG1CQUdOLEVBQU0sS0FBSyxDQUNULEtBQU0sVUFDTixLQUFNLE9BQ04sS0FBTSxDQUNSLENBQUMsRUFHSCxJQUFJLEVBQU8sQ0FDVCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsS0FBTSxXQUNOLEtBQU0sQ0FDUixFQUNBLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsT0FDQSxLQUFNLEdBQVksQ0FBSSxDQUN4QixFQUVKLENBQUMsRUFNRCxHQUFlLENBQ2IsS0FBTSxPQUNOLE1BQU8sQ0FBQyxRQUFRLEVBQ2hCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsU0FBVSxDQUFDLE1BQU0sRUFDakIsY0FBZSxHQUNmLFVBQVcsRUFDYixFQUVBLE9BQU8sQ0FBQyxFQUFNLEVBQU0sQ0FDbEIsSUFDRSxVQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sT0FDTixLQUFNLEVBQU8sS0FDYixLQUFNLEdBQVksRUFBSyxFQUFFLENBQzNCLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixJQUFJLEVBQVcsR0FBa0IsRUFBTSxLQUFNLEVBQVMsRUFBSyxFQUMzRCxPQUFPLEdBQVksYUFBYSxDQUFRLEdBRzFDLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsT0FBTyxJQUFJLEdBQVcsU0FBUyxPQUFRLEdBQWdCLEVBQU0sS0FBTSxDQUFPLENBQUMsRUFHL0UsQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLE9BQ04sTUFBTyxDQUFDLGNBQWUsV0FBWSxjQUFlLFlBQVksRUFDOUQsTUFBTyxDQUNMLFFBQVMsRUFDVCxTQUFVLENBQUMsTUFBTyxVQUFVLEVBQzVCLGNBQWUsRUFDakIsRUFDQSxRQUFTLENBQUMsRUFBTSxJQUFTLENBQ3ZCLElBQ0UsU0FDQSxXQUNBLFNBQ0UsRUFDQSxFQUFRLEdBQWUsRUFBSyxHQUFJLEtBQUssRUFBRSxPQUN2QyxFQUFPLEVBQUssR0FFaEIsR0FBSSxFQUFPLFNBQVMsT0FDbEIsRUFBTyxTQUFTLGdCQUFnQixnQkFBaUIsMkNBQTJDLEVBRzlGLElBQUksRUFDQSxFQUFhLENBQUMsRUFFbEIsT0FBUSxPQUNELGNBQ0gsRUFBVyxNQUFRLEVBQ25CLEVBQWUsQ0FDYixRQUFTLGNBQ1QsTUFBTyxDQUNULEVBQ0EsVUFFRyxXQUNILEVBQVcsR0FBSyxFQUNoQixFQUFlLENBQ2IsUUFBUyxXQUNULEdBQUksQ0FDTixFQUNBLFVBRUcsY0FDSCxFQUFXLE1BQVEsRUFDbkIsRUFBZSxDQUNiLFFBQVMsY0FDVCxNQUFPLENBQ1QsRUFDQSxVQUVHLGFBQ0gsQ0FDRSxJQUFJLEVBQU8sRUFBTSxNQUFNLEdBQUcsRUFFMUIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFLLE9BQVEsSUFBSyxDQUNwQyxJQUFJLEVBQVMsRUFBSyxHQUFHLE1BQU0sR0FBRyxFQUU5QixHQUFJLEVBQU8sU0FBVyxFQUNwQixNQUFNLElBQUksR0FBVyx3Q0FBd0MsRUFHL0QsRUFBVyxRQUFVLEVBQU8sR0FBRyxLQUFLLEdBQUssRUFBTyxHQUFHLEtBQUssRUFHMUQsRUFBZSxDQUNiLFFBQVMsYUFDVCxZQUNGLEVBQ0EsS0FDRixTQUdBLE1BQU0sSUFBSSxNQUFNLDJCQUEyQixFQUcvQyxJQUFLLEVBQU8sU0FBUyxVQUFVLENBQVksRUFDekMsT0FBTyxFQUFPLHFCQUFxQixDQUFRLEVBRzdDLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsYUFDQSxLQUFNLEdBQVksQ0FBSSxDQUN4QixHQUVGLFlBQWEsQ0FBQyxFQUFPLElBQVksQ0FDL0IsSUFBSSxFQUFXLEdBQWtCLEVBQU0sS0FBTSxFQUFTLEVBQUssRUFDdkQsRUFBVSxDQUFDLFdBQVcsRUFFMUIsR0FBSSxFQUFNLFdBQVcsTUFDbkIsRUFBUSxLQUFLLEdBQUcsRUFBTSxXQUFXLE1BQU0sS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBRzVELElBQUksRUFBTyxHQUFZLFNBQVMsRUFBUyxFQUFVLENBQU8sRUFFMUQsUUFBUyxLQUFRLEVBQU0sV0FDckIsR0FBSSxJQUFTLFNBQVcsRUFBTSxXQUFXLGVBQWUsQ0FBSSxFQUMxRCxFQUFLLGFBQWEsRUFBTSxFQUFNLFdBQVcsRUFBSyxFQUlsRCxPQUFPLEdBRVQsY0FBZSxDQUFDLEVBQU8sSUFBWSxDQUNqQyxPQUFPLEdBQW1CLEVBQU0sS0FBTSxDQUFPLEVBRWpELENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxhQUNOLE1BQU8sQ0FBQyxlQUFlLEVBQ3ZCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxFQUNqQixFQUNBLFFBQVMsQ0FBQyxFQUFNLElBQVMsQ0FDdkIsSUFDRSxVQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sYUFDTixLQUFNLEVBQU8sS0FDYixLQUFNLEdBQVksRUFBSyxFQUFFLEVBQ3pCLE9BQVEsR0FBWSxFQUFLLEVBQUUsQ0FDN0IsR0FFRixZQUFhLENBQUMsRUFBTyxJQUFZLENBQy9CLElBQUksRUFBVyxHQUFrQixFQUFNLEtBQU0sRUFBUyxFQUFLLEVBQzNELE9BQU8sR0FBWSxhQUFhLENBQVEsR0FFMUMsY0FBZSxDQUFDLEVBQU8sSUFBWSxDQUNqQyxPQUFPLEdBQW1CLEVBQU0sT0FBUSxDQUFPLEVBRW5ELENBQUMsRUErQkQsR0FBZSxDQUNiLEtBQU0sa0JBQ04sTUFBTyxDQUFDLG1CQUFtQixFQUMzQixNQUFPLENBQ0wsUUFBUyxFQUNULGdCQUFpQixFQUNqQixTQUFVLENBQUMsTUFBTyxLQUFLLEVBQ3ZCLGNBQWUsRUFDakIsRUFDQSxRQUFTLENBQUMsRUFBTSxFQUFNLElBQVksQ0FDaEMsSUFDRSxVQUNFLEVBQ0EsRUFBUSxDQUNWLE9BQVEsRUFDUixLQUFNLElBQ1IsRUFDSSxFQUFTLENBQ1gsT0FBUSxJQUNSLEtBQU0sSUFDUixFQUVJLEVBQWMsQ0FDaEIsT0FBUSxFQUNSLEtBQU0sSUFDUixFQUNJLEVBQU0sR0FFVixHQUFJLEVBQVEsR0FBSSxDQUNkLElBQUksRUFBZSxHQUFlLEVBQVEsR0FBSSxLQUFLLEVBQUUsT0FFakQsRUFBYSxFQUFhLE1BQU0sR0FBRyxFQUV2QyxRQUFTLEVBQUksRUFBRyxFQUFJLEVBQVcsT0FBUSxJQUFLLENBQzFDLElBQUksRUFBUyxFQUFXLEdBQUcsTUFBTSxHQUFHLEVBRXBDLEdBQUksRUFBTyxTQUFXLEVBQUcsQ0FDdkIsSUFBSSxFQUFNLEVBQU8sR0FBRyxLQUFLLEVBRXpCLE9BQVEsRUFBTyxHQUFHLEtBQUssT0FDaEIsTUFDSCxFQUFNLEVBQ04sVUFFRyxRQUNILEVBQVEsR0FBUyxDQUFHLEVBQ3BCLFVBRUcsU0FDSCxFQUFTLEdBQVMsQ0FBRyxFQUNyQixVQUVHLGNBQ0gsRUFBYyxHQUFTLENBQUcsRUFDMUIsY0FHQSxNQUFNLElBQUksR0FBVyxpQkFBbUIsRUFBTyxHQUFLLHlCQUF5QixLQU12RixJQUFJLEVBQU0sR0FBZSxFQUFLLEdBQUksS0FBSyxFQUFFLElBRXpDLEdBQUksSUFBUSxHQUVWLEVBQU0sRUFDTixFQUFNLEVBQUksUUFBUSxXQUFZLEVBQUUsRUFDaEMsRUFBTSxFQUFJLFVBQVUsRUFBRyxFQUFJLFlBQVksR0FBRyxDQUFDLEVBRzdDLElBQUssRUFBTyxTQUFTLFVBQVUsQ0FDN0IsUUFBUyxvQkFDVCxJQUFLLENBQ1AsQ0FBQyxFQUNDLE9BQU8sRUFBTyxxQkFBcUIsbUJBQW1CLEVBR3hELE1BQU8sQ0FDTCxLQUFNLGtCQUNOLEtBQU0sRUFBTyxLQUNiLElBQUssRUFDTCxNQUFPLEVBQ1AsT0FBUSxFQUNSLFlBQWEsRUFDYixJQUFLLENBQ1AsR0FFRixZQUFhLENBQUMsRUFBTyxJQUFZLENBQy9CLElBQUksRUFBUyxHQUFjLEVBQU0sT0FBUSxDQUFPLEVBQzVDLEVBQVEsRUFFWixHQUFJLEVBQU0sWUFBWSxPQUFTLEVBQzdCLEVBQVEsR0FBYyxFQUFNLFlBQWEsQ0FBTyxFQUFJLEVBR3RELElBQUksRUFBUSxFQUVaLEdBQUksRUFBTSxNQUFNLE9BQVMsRUFDdkIsRUFBUSxHQUFjLEVBQU0sTUFBTyxDQUFPLEVBRzVDLElBQUksRUFBUSxDQUNWLE9BQVEsR0FBTyxFQUFTLENBQUssQ0FDL0IsRUFFQSxHQUFJLEVBQVEsRUFDVixFQUFNLE1BQVEsR0FBTyxDQUFLLEVBRzVCLEdBQUksRUFBUSxFQUNWLEVBQU0sY0FBZ0IsSUFBUSxDQUFLLEVBR3JDLElBQUksRUFBTyxJQUFJLEdBQUksRUFBTSxJQUFLLEVBQU0sSUFBSyxDQUFLLEVBRzlDLE9BRkEsRUFBSyxPQUFTLEVBQ2QsRUFBSyxNQUFRLEVBQ04sR0FFVCxjQUFlLENBQUMsRUFBTyxJQUFZLENBQ2pDLElBQUksRUFBTyxJQUFJLEdBQVcsU0FBUyxTQUFVLENBQUMsQ0FBQyxFQUMvQyxFQUFLLGFBQWEsTUFBTyxFQUFNLEdBQUcsRUFDbEMsSUFBSSxFQUFTLEdBQWMsRUFBTSxPQUFRLENBQU8sRUFDNUMsRUFBUSxFQUVaLEdBQUksRUFBTSxZQUFZLE9BQVMsRUFDN0IsRUFBUSxHQUFjLEVBQU0sWUFBYSxDQUFPLEVBQUksRUFDcEQsRUFBSyxhQUFhLFNBQVUsSUFBUSxDQUFLLENBQUMsRUFLNUMsR0FGQSxFQUFLLGFBQWEsU0FBVSxHQUFPLEVBQVMsQ0FBSyxDQUFDLEVBRTlDLEVBQU0sTUFBTSxPQUFTLEVBQUcsQ0FDMUIsSUFBSSxFQUFRLEdBQWMsRUFBTSxNQUFPLENBQU8sRUFDOUMsRUFBSyxhQUFhLFFBQVMsR0FBTyxDQUFLLENBQUMsRUFJMUMsT0FEQSxFQUFLLGFBQWEsTUFBTyxFQUFNLEdBQUcsRUFDM0IsRUFFWCxDQUFDLEVBSUQsR0FBZSxDQUNiLEtBQU0sT0FDTixNQUFPLENBQUMsU0FBVSxVQUFXLFVBQVcsU0FBUyxFQUNqRCxNQUFPLENBQ0wsUUFBUyxFQUNULFNBQVUsQ0FBQyxNQUFNLEVBQ2pCLFVBQVcsR0FDWCxjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxDQUNsQixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sR0FBZSxFQUFLLEdBQUksTUFBTSxFQUV6QyxHQUFJLEVBQU8sU0FBUyxPQUFRLENBQzFCLElBQUksRUFBZSxFQUFTLEtBQU8sSUFFL0IsRUFBUyxFQUFLLE1BQU0sT0FBUyxLQUVqQyxHQUFJLEVBQWMsQ0FDaEIsSUFBSyxFQUNILEVBQU8sU0FBUyxnQkFBZ0Isa0JBQW1CLFdBQWEsRUFBVyw2QkFBK0IsT0FBUyxFQUFLLE1BQU0sS0FBTyxTQUFTLEVBR2hKLEdBQUksRUFBTyxPQUFTLE9BQ2xCLEVBQU8sU0FBUyxnQkFBZ0Isa0JBQW1CLFdBQWEsRUFBVywwQkFBMEIsVUFJbkcsRUFDRixFQUFPLFNBQVMsZ0JBQWdCLGtCQUFtQixXQUFhLEVBQVcsMkJBQTJCLEVBSzVHLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsVUFBVyxFQUFLLEtBQ2xCLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixPQUFPLEdBQVksU0FBUyxFQUFNLFVBQVcsQ0FBTyxHQUd0RCxhQUFhLENBQUMsRUFBTyxFQUFTLENBQzVCLElBQUksRUFBWSxHQUFjLEVBQU0sVUFBVyxDQUFPLEVBQ3RELE9BQU8sSUFBSSxHQUFXLFVBQVUsQ0FBUyxFQUc3QyxDQUFDLEVBR0QsR0FBZSxDQUNiLEtBQU0sTUFDTixNQUFPLENBQUMsYUFBYyxhQUFjLFlBQVksRUFDaEQsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEVBQ2pCLEVBQ0EsUUFBUyxDQUFDLEVBQU0sSUFBUyxDQUN2QixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxNQUNOLEtBQU0sRUFBTyxLQUNiLFVBQVcsRUFBUyxNQUFNLENBQUMsRUFDM0IsTUFDRixHQUVGLFlBQWEsQ0FBQyxFQUFPLElBQVksQ0FFL0IsSUFBSSxFQUVKLEdBQUksRUFBTSxZQUFjLE9BRXRCLEVBQVEsR0FBWSxTQUFTLENBQUMsRUFBRyxDQUFDLEdBQWEsRUFBTSxLQUFNLENBQU8sQ0FBQyxDQUFDLEVBRXBFLEVBQVEsR0FBWSxTQUFTLENBQUMsT0FBTyxFQUFHLENBQUMsQ0FBSyxFQUFHLENBQU8sTUFFeEQsR0FBUSxHQUFZLFNBQVMsQ0FBQyxPQUFPLEVBQUcsQ0FBQyxHQUFhLEVBQU0sS0FBTSxDQUFPLENBQUMsQ0FBQyxFQUc3RSxJQUFJLEVBQU0sR0FBWSxTQUFTLENBQUMsS0FBSyxFQUFHLENBQUMsQ0FBQyxFQUN0QyxFQUFPLEdBQVksU0FBUyxDQUFDLEVBQU0sU0FBUyxFQUFHLENBQUMsRUFBTyxDQUFHLEVBQUcsQ0FBTyxFQU1wRSxFQUFRLEdBQVksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUcxQyxHQUZBLEVBQU0sTUFBTSxPQUFTLEdBQU8sRUFBSyxPQUFTLEVBQUssS0FBSyxFQUVoRCxFQUFLLE1BQ1AsRUFBTSxNQUFNLGNBQWdCLElBQVEsRUFBSyxLQUFLLEVBT2hELE9BSkEsRUFBSyxTQUFTLFFBQVEsQ0FBSyxFQUczQixFQUFPLEdBQVksU0FBUyxDQUFDLFNBQVMsRUFBRyxDQUFDLENBQUksRUFBRyxDQUFPLEVBQ2pELEdBQVksU0FBUyxDQUFDLE9BQVEsTUFBTSxFQUFHLENBQUMsQ0FBSSxFQUFHLENBQU8sR0FFL0QsY0FBZSxDQUFDLEVBQU8sSUFBWSxDQUVqQyxJQUFJLEVBQU8sSUFBSSxHQUFXLFNBQVMsVUFBVyxDQUFDLEdBQVcsRUFBTSxLQUFNLENBQU8sQ0FBQyxDQUFDLEVBRS9FLEdBQUksRUFBTSxZQUFjLE9BQVEsQ0FDOUIsSUFBSSxFQUFTLEVBQU0sWUFBYyxPQUFTLEtBQU8sT0FDakQsRUFBSyxhQUFhLFNBQVUsRUFBUyxPQUFPLEVBSTlDLE9BREEsRUFBSyxhQUFhLFFBQVMsS0FBSyxFQUN6QixFQUVYLENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxVQUNOLE1BQU8sQ0FBQyxNQUFPLEdBQUcsRUFDbEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEdBQ2YsY0FBZSxFQUNqQixFQUVBLE9BQU8sQ0FBQyxFQUFNLEVBQU0sQ0FDbEIsSUFDRSxXQUNBLFVBQ0UsRUFDQSxFQUFZLEVBQU8sS0FDdkIsRUFBTyxXQUFXLE1BQU0sRUFDeEIsSUFBSSxFQUFRLElBQWEsTUFBUSxNQUFRLElBQ3JDLEVBQU8sRUFBTyxnQkFBZ0IsR0FBTyxDQUFLLEVBRzlDLE9BRkEsRUFBTyxPQUFPLENBQUssRUFDbkIsRUFBTyxXQUFXLENBQVMsRUFDcEIsQ0FDTCxLQUFNLFVBQ04sS0FBTSxFQUFPLEtBQ2IsTUFBTyxPQUNQLE1BQ0YsRUFHSixDQUFDLEVBRUQsR0FBZSxDQUNiLEtBQU0sT0FFTixNQUFPLENBQUMsTUFBTyxLQUFLLEVBQ3BCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxHQUNmLGNBQWUsRUFDakIsRUFFQSxPQUFPLENBQUMsRUFBUyxFQUFNLENBQ3JCLE1BQU0sSUFBSSxHQUFXLGNBQWdCLEVBQVEsUUFBUSxFQUd6RCxDQUFDLEVBcUJELEdBQWUsQ0FDYixLQUFNLGFBQ04sTUFBTyxDQUFDLGNBQWMsRUFDdEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxVQUFXLEVBQ2IsRUFDQSxRQUFTLENBQUMsRUFBTSxJQUFTLENBQ3ZCLElBQ0UsVUFDRSxFQUNKLE1BQU8sQ0FDTCxLQUFNLGFBQ04sS0FBTSxFQUFPLEtBQ2IsUUFBUyxHQUFZLEVBQUssRUFBRSxFQUM1QixLQUFNLEdBQVksRUFBSyxFQUFFLEVBQ3pCLE9BQVEsR0FBWSxFQUFLLEVBQUUsRUFDM0IsYUFBYyxHQUFZLEVBQUssRUFBRSxDQUNuQyxHQUVGLFlBQWEsQ0FBQyxFQUFPLElBQVksQ0FDL0IsSUFBSSxFQUFPLEdBQWdCLEVBQU8sQ0FBTyxFQUNyQyxFQUFXLEdBQWtCLEVBQU0sRUFBUyxFQUFLLEVBQ3JELE9BQU8sR0FBWSxhQUFhLENBQVEsR0FFMUMsY0FBZSxDQUFDLEVBQU8sSUFBWSxDQUNqQyxJQUFJLEVBQU8sR0FBZ0IsRUFBTyxDQUFPLEVBQ3pDLE9BQU8sR0FBbUIsRUFBTSxDQUFPLEVBRTNDLENBQUMsRUErSEcsR0FBYyxDQUFDLFlBQVksRUFzSjNCLElBQW1CLENBQ3JCLFNBQVUsU0FDVixTQUFVLFdBQ1YsU0FBVSxRQUNWLFNBQVUsYUFDVixTQUFVLFdBQ1YsU0FBVSxXQUNWLFNBQVUsV0FDVixTQUFVLFlBQ1YsU0FBVSxhQUNWLFNBQVUsY0FDVixTQUFVLGFBQ1YsU0FBVSxZQUNaLEVBQ0EsR0FBZSxDQUNiLEtBQU0sS0FDTixNQUFPLENBQUMsV0FBWSxXQUFZLGFBQWMsYUFBYyxXQUFZLFdBQVksVUFBVyxTQUFVLFFBQVMsY0FBZSxhQUFjLFlBQWEsYUFBYyxhQUFjLFNBQVUsU0FBVSxTQUFVLFNBQVUsU0FBVSxTQUFVLFNBQVUsU0FBVSxTQUFVLFNBQVUsU0FBVSxRQUFRLEVBQzlTLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFDQSxRQUFTLENBQUMsRUFBTSxJQUFTLENBQ3ZCLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBUSxFQUVaLEdBQUksRUFBTSxTQUFXLEVBQ25CLEVBQVEsSUFBaUIsR0FHM0IsTUFBTyxDQUNMLEtBQU0sS0FDTixLQUFNLEVBQU8sS0FDYixPQUFRLEdBQ1IsZUFBZ0IsR0FDaEIsT0FBUSxHQUNSLEtBQU0sQ0FDUixHQUVGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFHRCxHQUFlLENBQ2IsS0FBTSxLQUNOLE1BQU8sQ0FBQyxVQUFVLEVBQ2xCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsVUFBVyxFQUNiLEVBQ0EsUUFBUyxDQUFDLEVBQU8sSUFBUyxDQUN4QixJQUNFLFVBQ0UsRUFDQSxFQUFPLEVBQUssR0FDaEIsTUFBTyxDQUNMLEtBQU0sS0FDTixLQUFNLEVBQU8sS0FDYixPQUFRLEdBQ1IsZUFBZ0IsR0FDaEIsT0FBUSxHQUNSLEtBQU0sR0FBWSxDQUFJLENBQ3hCLEdBRUYsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUlHLElBQXNCLENBQ3hCLFNBQVUsUUFDVixTQUFVLFNBQ1YsU0FBVSxVQUNWLFNBQVUsU0FDVixTQUFVLFVBQ1YsU0FBVSxVQUNaLEVBRUEsR0FBZSxDQUNiLEtBQU0sS0FDTixNQUFPLENBQUMsV0FBWSxXQUFZLFdBQVksVUFBVyxXQUFZLFFBQVMsT0FBUSxRQUFTLFVBQVcsU0FBVSxRQUFTLFNBQVUsU0FBVSxRQUFTLFFBQVMsUUFBUyxRQUFTLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBUSxPQUFRLFFBQVMsUUFBUyxRQUFTLFNBQVUsT0FBUSxRQUFTLFNBQVUsT0FBUSxNQUFNLEVBQ3JULE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBTyxDQUNiLElBQ0UsU0FDQSxZQUNFLEVBQ0osTUFBTyxDQUNMLEtBQU0sS0FDTixLQUFNLEVBQU8sS0FDYixPQUFRLEdBQ1IsZUFBZ0IsR0FDaEIsT0FBUSxHQUNSLEtBQU0sQ0FDUixHQUdGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxLQUNOLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFRLE9BQU8sRUFDN0UsTUFBTyxDQUNMLFFBQVMsQ0FDWCxFQUVBLE9BQU8sQ0FBQyxFQUFPLENBQ2IsSUFDRSxTQUNBLFlBQ0UsRUFDSixNQUFPLENBQ0wsS0FBTSxLQUNOLEtBQU0sRUFBTyxLQUNiLE9BQVEsR0FDUixlQUFnQixHQUNoQixPQUFRLEdBQ1IsS0FBTSxDQUNSLEdBR0YsWUFBYSxHQUNiLGNBQWUsRUFDakIsQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLEtBQ04sTUFBTyxDQUFDLFFBQVMsU0FBVSxVQUFXLFNBQVUsVUFBVyxXQUFZLFNBQVUsU0FBVSxTQUFVLFNBQVUsU0FBVSxRQUFRLEVBQ2pJLE1BQU8sQ0FDTCxRQUFTLENBQ1gsRUFFQSxPQUFPLENBQUMsRUFBTyxDQUNiLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBUSxFQUVaLEdBQUksRUFBTSxTQUFXLEVBQ25CLEVBQVEsSUFBb0IsR0FHOUIsTUFBTyxDQUNMLEtBQU0sS0FDTixLQUFNLEVBQU8sS0FDYixPQUFRLEdBQ1IsZUFBZ0IsR0FDaEIsT0FBUSxHQUNSLEtBQU0sQ0FDUixHQUdGLFlBQWEsR0FDYixjQUFlLEVBQ2pCLENBQUMsRUErSEQsR0FBZSxDQUNiLEtBQU0sZUFDTixNQUFPLENBQUMsa0JBQW1CLDBCQUEwQixFQUNyRCxNQUFPLENBQ0wsUUFBUyxDQUNYLEVBQ0EsUUFBUyxDQUFDLEVBQU0sSUFBUyxDQUN2QixJQUNFLFNBQ0EsWUFDRSxFQUNBLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxlQUNOLEtBQU0sRUFBTyxLQUNiLEtBQU0sR0FBWSxDQUFJLEVBQ3RCLG1CQUFvQixJQUFhLDJCQUNqQyxPQUFRLEdBQ1IsZUFBZ0IsRUFDbEIsR0FFRixZQUFhLEdBQ2IsaUJBQ0YsQ0FBQyxFQUNELEdBQVksaUJBQWtCLGtEQUFrRCxFQUVoRixHQUF1QixDQUNyQixLQUFNLFdBRU4sV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixHQUFJLEVBQU0sV0FDUixPQUFPLEdBQVksYUFBYSxHQUFrQixFQUFNLEtBQU0sRUFBUyxFQUFLLENBQUMsRUFHL0UsT0FBTyxHQUFZLFNBQVMsQ0FBQyxNQUFNLEVBQUcsR0FBa0IsRUFBTSxLQUFNLEVBQVMsRUFBSSxFQUFHLENBQU8sR0FHN0YsYUFBYSxDQUFDLEVBQU8sRUFBUyxDQUM1QixPQUFPLEdBQW1CLEVBQU0sS0FBTSxFQUFTLEVBQUksRUFHdkQsQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLFdBQ04sTUFBTyxDQUFDLFlBQVksRUFDcEIsTUFBTyxDQUNMLFFBQVMsQ0FDWCxFQUVBLE9BQU8sQ0FBQyxFQUFNLEVBQU0sQ0FDbEIsSUFDRSxVQUNFLEVBQ0EsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLFdBQ04sS0FBTSxFQUFPLEtBQ2IsTUFDRixHQUdGLFdBQVcsQ0FBQyxFQUFPLEVBQVMsQ0FHMUIsSUFBSSxFQUFhLEdBQWEsRUFBTSxLQUFNLEVBQVEsbUJBQW1CLENBQUMsRUFFbEUsRUFBTyxHQUFZLGFBQWEsZ0JBQWlCLENBQU8sRUFFeEQsRUFBdUIsRUFBUSxZQUFZLEVBQUUscUJBQzdDLEVBQVEsR0FBWSxVQUFVLENBQ2hDLGFBQWMsZ0JBQ2QsU0FBVSxDQUFDLENBQ1QsS0FBTSxPQUNOLEtBQU0sQ0FDUixFQUFHLENBQ0QsS0FBTSxPQUNOLEtBQU0sRUFBSSxDQUNaLEVBQUcsQ0FDRCxLQUFNLE9BQ04sS0FBTSxDQUNSLEVBQUcsQ0FDRCxLQUFNLE9BQ04sS0FBTSxDQUNSLENBQUMsQ0FDSCxFQUFHLENBQU8sRUFDVixPQUFPLEdBQVksU0FBUyxDQUFDLE9BQVEsVUFBVSxFQUFHLENBQUMsQ0FBSyxFQUFHLENBQU8sR0FHcEUsYUFBYSxDQUFDLEVBQU8sRUFBUyxDQUM1QixJQUFJLEVBQVcsSUFBSSxHQUFXLFNBQVMsS0FBTSxDQUFDLElBQUksR0FBVyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQ2hGLEVBQVMsYUFBYSxXQUFZLE1BQU0sRUFDeEMsSUFBSSxFQUFPLElBQUksR0FBVyxTQUFTLFFBQVMsQ0FBQyxHQUFXLEVBQU0sS0FBTSxDQUFPLEVBQUcsQ0FBUSxDQUFDLEVBRXZGLE9BREEsRUFBSyxhQUFhLFNBQVUsTUFBTSxFQUMzQixFQUdYLENBQUMsRUFFRCxHQUFlLENBQ2IsS0FBTSxVQUNOLE1BQU8sQ0FBQyxXQUFXLEVBQ25CLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxFQUNqQixFQUNBLFFBQVMsQ0FBQyxFQUFNLElBQVMsQ0FDdkIsSUFDRSxVQUNFLEVBQ0EsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLFVBQ04sS0FBTSxFQUFPLEtBQ2IsS0FBTSxHQUFZLENBQUksQ0FDeEIsR0FFRixZQUFhLENBQUMsRUFBTyxJQUFZLENBQy9CLElBQUksRUFBVyxHQUFrQixFQUFNLEtBQU0sRUFBUSxZQUFZLEVBQUcsRUFBSyxFQUd6RSxPQUFPLEdBQVksYUFBYSxDQUFRLEdBRTFDLGNBQWUsQ0FBQyxFQUFPLElBQVksQ0FDakMsSUFBSSxFQUFRLEdBQWdCLEVBQU0sS0FBTSxDQUFPLEVBQy9DLE9BQU8sSUFBSSxHQUFXLFNBQVMsV0FBWSxDQUFLLEVBRXBELENBQUMsRUFDRCxHQUFlLENBQ2IsS0FBTSxXQUNOLE1BQU8sQ0FBQyxZQUFZLEVBQ3BCLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsY0FBZSxFQUNqQixFQUNBLFFBQVMsQ0FBQyxFQUFPLElBQVMsQ0FDeEIsSUFDRSxVQUNFLEVBQ0EsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLFdBQ04sS0FBTSxFQUFPLEtBQ2IsTUFDRixHQUVGLFlBQWEsQ0FBQyxFQUFPLElBQVksQ0FDL0IsSUFBSSxFQUFPLEdBQVksU0FBUyxDQUFDLEVBQUcsQ0FBQyxHQUFhLEVBQU0sS0FBTSxFQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFJckYsR0FIQSxFQUFLLE9BQVMsRUFDZCxFQUFLLE1BQVEsRUFFVCxFQUFLLFNBQ1AsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFLLFNBQVMsT0FBUSxJQUN4QyxFQUFLLFNBQVMsR0FBRyxPQUFTLEVBQzFCLEVBQUssU0FBUyxHQUFHLE1BQVEsRUFhN0IsT0FSQSxFQUFPLEdBQVksVUFBVSxDQUMzQixhQUFjLGdCQUNkLFNBQVUsQ0FBQyxDQUNULEtBQU0sT0FDTixLQUFNLENBQ1IsQ0FBQyxDQUNILEVBQUcsQ0FBTyxFQUVILEdBQVksU0FBUyxDQUFDLE1BQU0sRUFBRyxDQUFDLENBQUksRUFBRyxDQUFPLEdBRXZELGNBQWUsQ0FBQyxFQUFPLElBQVksQ0FDakMsSUFBSSxFQUFRLEdBQWdCLEdBQVksRUFBTSxJQUFJLEVBQUcsQ0FBTyxFQUN4RCxFQUFVLElBQUksR0FBVyxTQUFTLFdBQVksQ0FBSyxFQUNuRCxFQUFPLElBQUksR0FBVyxTQUFTLFVBQVcsQ0FBQyxDQUFPLENBQUMsRUFHdkQsT0FGQSxFQUFLLGFBQWEsU0FBVSxLQUFLLEVBQ2pDLEVBQUssYUFBYSxRQUFTLEtBQUssRUFDekIsRUFFWCxDQUFDLEVBQ0QsR0FBZSxDQUNiLEtBQU0sV0FDTixNQUFPLENBQUMsWUFBWSxFQUNwQixNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsRUFDakIsRUFDQSxRQUFTLENBQUMsRUFBTyxJQUFTLENBQ3hCLElBQ0UsVUFDRSxFQUNBLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxXQUNOLEtBQU0sRUFBTyxLQUNiLE1BQ0YsR0FFRixZQUFhLENBQUMsRUFBTyxJQUFZLENBQy9CLElBQUksRUFBUSxHQUFZLFNBQVMsQ0FBQyxPQUFPLEVBQUcsQ0FBQyxHQUFhLEVBQU0sS0FBTSxFQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDekYsRUFBTSxHQUFZLFNBQVMsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFDLEVBQzFDLE9BQU8sR0FBWSxTQUFTLENBQUMsT0FBUSxNQUFNLEVBQUcsQ0FBQyxFQUFPLENBQUcsRUFBRyxDQUFPLEdBRXJFLGNBQWUsQ0FBQyxFQUFPLElBQVksQ0FDakMsSUFBSSxFQUFRLEdBQWdCLEdBQVksRUFBTSxJQUFJLEVBQUcsQ0FBTyxFQUN4RCxFQUFVLElBQUksR0FBVyxTQUFTLFdBQVksQ0FBSyxFQUNuRCxFQUFPLElBQUksR0FBVyxTQUFTLFVBQVcsQ0FBQyxDQUFPLENBQUMsRUFFdkQsT0FEQSxFQUFLLGFBQWEsUUFBUyxLQUFLLEVBQ3pCLEVBRVgsQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLFdBQ04sTUFBTyxDQUFDLFlBQVksRUFDcEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxTQUFVLENBQUMsT0FBUSxNQUFNLEVBQ3pCLGNBQWUsRUFDakIsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsVUFDRSxFQUNBLEVBQVMsR0FBZSxFQUFLLEdBQUksTUFBTSxFQUFFLE1BQ3pDLEVBQU8sRUFBSyxHQUNoQixNQUFPLENBQ0wsS0FBTSxXQUNOLEtBQU0sRUFBTyxLQUNiLEdBQUksRUFDSixNQUNGLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixJQUFJLEVBQU8sR0FBYSxFQUFNLEtBQU0sQ0FBTyxFQUN2QyxFQUFLLEdBQWMsRUFBTSxHQUFJLENBQU8sRUFDeEMsT0FBTyxHQUFZLFVBQVUsQ0FDM0IsYUFBYyxRQUNkLGNBQWUsRUFDZixTQUFVLENBQUMsQ0FDVCxLQUFNLE9BQ04sS0FBTSxDQUNSLENBQUMsQ0FDSCxFQUFHLENBQU8sR0FHWixhQUFhLENBQUMsRUFBTyxFQUFTLENBQzVCLElBQUksRUFBTyxJQUFJLEdBQVcsU0FBUyxVQUFXLENBQUMsR0FBVyxFQUFNLEtBQU0sQ0FBTyxDQUFDLENBQUMsRUFDM0UsRUFBSyxFQUFNLEdBQUcsT0FBUyxFQUFNLEdBQUcsS0FFcEMsT0FEQSxFQUFLLGFBQWEsVUFBVyxDQUFFLEVBQ3hCLEVBR1gsQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLFdBQ04sTUFBTyxDQUFDLFNBQVMsRUFDakIsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQU0sQ0FDWixJQUNFLFVBQ0UsRUFDSixNQUFPLENBQ0wsS0FBTSxXQUNOLEtBQU0sRUFBTyxJQUNmLEVBR0osQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLE9BQ04sTUFBTyxDQUFDLFFBQVEsRUFDaEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxnQkFBaUIsRUFDakIsU0FBVSxDQUFDLE9BQVEsT0FBUSxNQUFNLENBQ25DLEVBRUEsT0FBTyxDQUFDLEVBQU0sRUFBTSxFQUFTLENBQzNCLElBQ0UsVUFDRSxFQUNBLEVBQVEsRUFBUSxHQUNoQixFQUFRLEdBQWUsRUFBSyxHQUFJLE1BQU0sRUFDdEMsRUFBUyxHQUFlLEVBQUssR0FBSSxNQUFNLEVBQzNDLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsTUFBTyxHQUFTLEdBQWUsRUFBTyxNQUFNLEVBQUUsTUFDOUMsTUFBTyxFQUFNLE1BQ2IsT0FBUSxFQUFPLEtBQ2pCLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUUxQixJQUFJLEVBQU8sR0FBWSxTQUFTLENBQUMsT0FBUSxNQUFNLEVBQUcsQ0FBQyxFQUFHLENBQU8sRUFFekQsRUFBUSxHQUFjLEVBQU0sTUFBTyxDQUFPLEVBQzFDLEVBQVMsR0FBYyxFQUFNLE9BQVEsQ0FBTyxFQUM1QyxFQUFRLEVBQU0sTUFBUSxHQUFjLEVBQU0sTUFBTyxDQUFPLEVBQUksRUFhaEUsT0FYQSxFQUFLLE1BQU0saUJBQW1CLEdBQU8sQ0FBSyxFQUMxQyxFQUFLLE1BQU0sZUFBaUIsR0FBTyxDQUFNLEVBQ3pDLEVBQUssTUFBTSxPQUFTLEdBQU8sQ0FBSyxFQUVoQyxFQUFLLE1BQVEsRUFDYixFQUFLLE9BQVMsRUFBUyxFQUN2QixFQUFLLE9BQVMsRUFJZCxFQUFLLFlBQWMsRUFBUyxNQUFRLEVBQVEsZUFDckMsR0FHVCxhQUFhLENBQUMsRUFBTyxFQUFTLENBQzVCLElBQUksRUFBUSxHQUFjLEVBQU0sTUFBTyxDQUFPLEVBQzFDLEVBQVMsR0FBYyxFQUFNLE9BQVEsQ0FBTyxFQUM1QyxFQUFRLEVBQU0sTUFBUSxHQUFjLEVBQU0sTUFBTyxDQUFPLEVBQUksRUFDNUQsRUFBUSxFQUFRLE9BQVMsRUFBUSxTQUFTLEdBQUssUUFDL0MsRUFBTyxJQUFJLEdBQVcsU0FBUyxRQUFRLEVBQzNDLEVBQUssYUFBYSxpQkFBa0IsQ0FBSyxFQUN6QyxFQUFLLGFBQWEsUUFBUyxHQUFPLENBQUssQ0FBQyxFQUN4QyxFQUFLLGFBQWEsU0FBVSxHQUFPLENBQU0sQ0FBQyxFQUMxQyxJQUFJLEVBQVUsSUFBSSxHQUFXLFNBQVMsVUFBVyxDQUFDLENBQUksQ0FBQyxFQUV2RCxHQUFJLEdBQVMsRUFDWCxFQUFRLGFBQWEsU0FBVSxHQUFPLENBQUssQ0FBQyxNQUU1QyxHQUFRLGFBQWEsU0FBVSxHQUFPLENBQUssQ0FBQyxFQUM1QyxFQUFRLGFBQWEsUUFBUyxJQUFRLENBQUssQ0FBQyxFQUk5QyxPQURBLEVBQVEsYUFBYSxVQUFXLEdBQU8sQ0FBSyxDQUFDLEVBQ3RDLEVBR1gsQ0FBQyxFQXlCRyxHQUFZLENBQUMsU0FBVSxjQUFlLGVBQWdCLGlCQUFrQixVQUFXLGVBQWdCLFVBQVcsVUFBVyxVQUFXLFNBQVUsUUFBUSxFQVExSixHQUFlLENBQ2IsS0FBTSxTQUNOLE1BQU8sR0FDUCxNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsRUFDakIsRUFDQSxRQUFTLENBQUMsRUFBTSxJQUFTLENBQ3ZCLElBQ0UsbUJBQ0EsV0FDQSxVQUNFLEVBQ0EsRUFBTyxFQUFPLGdCQUFnQixHQUFPLENBQWdCLEVBQ3pELE1BQU8sQ0FDTCxLQUFNLFNBQ04sS0FBTSxFQUFPLEtBRWIsS0FBTSxHQUFVLFFBQVEsQ0FBUSxFQUFJLEVBQ3BDLE1BQ0YsR0FFRixnQkFDQSxjQUFlLENBQUMsRUFBTyxJQUFZLENBQ2pDLElBQUksRUFBYSxFQUFRLFdBQVcsRUFBTSxJQUFJLEVBQzFDLEVBQVEsR0FBZ0IsRUFBTSxLQUFNLENBQVUsRUFDOUMsRUFBTyxJQUFJLEdBQVcsU0FBUyxTQUFVLENBQUssRUFPbEQsT0FEQSxFQUFLLGFBQWEsV0FBWSxHQUFPLEVBQVcsY0FBYyxDQUFDLEVBQ3hELEVBRVgsQ0FBQyxFQUdELEdBQWUsQ0FDYixLQUFNLFFBQ04sTUFBTyxDQUFDLFNBQVMsRUFDakIsTUFBTyxDQUNMLFFBQVMsRUFDVCxnQkFBaUIsRUFDakIsY0FBZSxFQUNqQixFQUNBLFFBQVMsQ0FBQyxFQUFNLEVBQU0sSUFBWSxDQUNoQyxJQUNFLFVBQ0UsRUFDQSxFQUFjLEdBQ2QsRUFBYSxHQUNiLEVBQVEsRUFBUSxJQUFNLEdBQWUsRUFBUSxHQUFJLFVBQVUsRUFFL0QsR0FBSSxFQUFPLENBSVQsSUFBSSxFQUFTLEdBRWIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFNLEtBQUssU0FBVSxFQUFHLENBQzFDLElBQUksRUFBTyxFQUFNLEtBQUssR0FJdEIsR0FGQSxFQUFTLEVBQUssS0FFVixJQUFXLElBQ2IsRUFBYyxXQUNMLElBQVcsSUFDcEIsRUFBYSxPQUNSLENBQ0wsRUFBYyxHQUNkLEVBQWEsR0FDYixZQUlKLEdBQWMsR0FDZCxFQUFhLEdBR2YsSUFBSSxFQUFPLEVBQUssR0FDaEIsTUFBTyxDQUNMLEtBQU0sUUFDTixLQUFNLEVBQU8sS0FDYixPQUNBLGNBQ0EsWUFDRixHQUVGLFlBQWEsQ0FBQyxFQUFPLElBQVksQ0FDL0IsSUFBSSxFQUFPLEdBQVksU0FBUyxDQUFDLEVBQUcsQ0FBQyxHQUFhLEVBQU0sS0FBTSxDQUFPLENBQUMsQ0FBQyxFQUV2RSxJQUFLLEVBQU0sY0FBZ0IsRUFBTSxXQUMvQixPQUFPLEVBR1QsR0FBSSxFQUFNLGFBR1IsR0FGQSxFQUFLLE9BQVMsRUFFVixFQUFLLFNBQ1AsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFLLFNBQVMsT0FBUSxJQUN4QyxFQUFLLFNBQVMsR0FBRyxPQUFTLEVBS2hDLEdBQUksRUFBTSxZQUdSLEdBRkEsRUFBSyxNQUFRLEVBRVQsRUFBSyxTQUNQLFFBQVMsRUFBSyxFQUFHLEVBQUssRUFBSyxTQUFTLE9BQVEsSUFDMUMsRUFBSyxTQUFTLEdBQUksTUFBUSxFQVNoQyxJQUFJLEVBQWMsR0FBWSxVQUFVLENBQ3RDLGFBQWMsZ0JBQ2QsU0FBVSxDQUFDLENBQ1QsS0FBTSxPQUNOLEtBQU0sQ0FDUixDQUFDLENBQ0gsRUFBRyxDQUFPLEVBRVYsT0FBTyxHQUFZLFNBQVMsQ0FBQyxNQUFNLEVBQUcsQ0FBQyxDQUFXLEVBQUcsQ0FBTyxHQUU5RCxjQUFlLENBQUMsRUFBTyxJQUFZLENBQ2pDLElBQUksRUFBTyxJQUFJLEdBQVcsU0FBUyxVQUFXLENBQUMsR0FBVyxFQUFNLEtBQU0sQ0FBTyxDQUFDLENBQUMsRUFFL0UsR0FBSSxFQUFNLFlBQ1IsRUFBSyxhQUFhLFNBQVUsS0FBSyxFQUduQyxHQUFJLEVBQU0sV0FDUixFQUFLLGFBQWEsUUFBUyxLQUFLLEVBR2xDLE9BQU8sRUFFWCxDQUFDLEVBRUQsR0FBZSxDQUNiLEtBQU0sT0FDTixNQUFPLENBQUMsUUFBUSxFQUNoQixNQUFPLENBQ0wsUUFBUyxFQUNULGdCQUFpQixDQUNuQixFQUVBLE9BQU8sQ0FBQyxFQUFNLEVBQU0sRUFBUyxDQUMzQixJQUNFLFVBQ0UsRUFDQSxFQUFRLEVBQVEsR0FDaEIsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsT0FDQSxPQUNGLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUkxQixJQUFJLEVBQVEsR0FBYSxFQUFNLEtBQU0sRUFBUSxtQkFBbUIsQ0FBQyxFQUVqRSxHQUFJLEVBQU0sU0FBVyxFQUVuQixFQUFNLE9BQVMsRUFBUSxZQUFZLEVBQUUsUUFLdkMsRUFBUSxHQUFZLGFBQWEsRUFBTyxDQUFPLEVBRS9DLElBQUksRUFBVSxFQUFRLFlBQVksRUFDOUIsRUFBUSxFQUFRLHFCQUNoQixFQUFNLEVBRVYsR0FBSSxFQUFRLE1BQU0sR0FBSyxHQUFRLEtBQUssR0FDbEMsRUFBTSxFQUFRLFlBQVksRUFBRSxRQUk5QixJQUFJLEVBQWdCLEVBQVEsRUFBTSxFQUM5QixFQUFxQixFQUFNLE9BQVMsRUFBTSxNQUFRLEVBQWdCLEdBR3BFLEtBQU0sRUFDTixZQUNBLGdCQUNFLEdBQVUsVUFBVSxFQUFvQixDQUFPLEVBQy9DLEVBQWEsRUFBSSxPQUFTLEVBRTlCLEdBQUksRUFBYSxFQUFNLE9BQVMsRUFBTSxNQUFRLEVBQzVDLEdBQWlCLEVBQWdCLEVBQWEsRUFBTSxPQUFTLEVBQU0sT0FBUyxFQUk5RSxJQUFJLEVBQVcsRUFBSSxPQUFTLEVBQU0sT0FBUyxFQUFnQixFQUMzRCxFQUFNLE1BQU0sWUFBYyxHQUFPLENBQVksRUFFN0MsSUFBSSxFQUFPLEdBQVksVUFBVSxDQUMvQixhQUFjLGdCQUNkLFNBQVUsQ0FBQyxDQUNULEtBQU0sT0FDTixLQUFNLEVBQ04sZUFBZ0IsQ0FBQyxXQUFXLENBQzlCLEVBQUcsQ0FDRCxLQUFNLE9BQ04sT0FBUSxFQUFNLE9BQVMsRUFDekIsRUFBRyxDQUNELEtBQU0sT0FDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sT0FDTixLQUFNLENBQ1IsQ0FBQyxDQUNILEVBQUcsQ0FBTyxFQUVWLElBQUssRUFBTSxNQUNULE9BQU8sR0FBWSxTQUFTLENBQUMsT0FBUSxNQUFNLEVBQUcsQ0FBQyxDQUFJLEVBQUcsQ0FBTyxNQUN4RCxDQUdMLElBQUksRUFBYSxFQUFRLFlBQVksR0FBUSxZQUFZLEVBQ3JELEVBQVEsR0FBYSxFQUFNLE1BQU8sRUFBWSxDQUFPLEVBR3JELEVBQVUsS0FBTyxFQUFLLE9BQVMsRUFBSyxPQUVwQyxFQUFZLEdBQVksVUFBVSxDQUNwQyxhQUFjLFFBQ2QsY0FBZSxFQUNmLFNBQVUsQ0FBQyxDQUNULEtBQU0sT0FDTixLQUFNLENBQ1IsQ0FBQyxDQUNILEVBQUcsQ0FBTyxFQUdOLEVBQWdCLEdBQVksU0FBUyxDQUFDLE1BQU0sRUFBRyxDQUFDLENBQVMsQ0FBQyxFQUM5RCxPQUFPLEdBQVksU0FBUyxDQUFDLE9BQVEsTUFBTSxFQUFHLENBQUMsRUFBZSxDQUFJLEVBQUcsQ0FBTyxJQUloRixhQUFhLENBQUMsRUFBTyxFQUFTLENBQzVCLElBQ0UsT0FDQSxTQUNFLEVBQ0osT0FBTyxFQUFRLElBQUksR0FBVyxTQUFTLFFBQVMsQ0FBQyxHQUFXLEVBQU0sQ0FBTyxFQUFHLEdBQVcsRUFBTyxDQUFPLENBQUMsQ0FBQyxFQUFJLElBQUksR0FBVyxTQUFTLFFBQVMsQ0FBQyxHQUFXLEVBQU0sQ0FBTyxDQUFDLENBQUMsRUFHM0ssQ0FBQyxFQUVHLEdBQVcsQ0FDYixRQUFXLEdBQVEsUUFDbkIsS0FBUSxHQUFRLEtBQ2hCLE9BQVUsR0FBUSxPQUNsQixhQUFnQixHQUFRLFlBQzFCLEVBQ0EsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsaUJBQWtCLGNBQWUsZ0JBQWlCLHFCQUFxQixFQUMvRSxNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsR0FDZixVQUFXLEVBQ2IsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsbUJBQ0EsV0FDQSxVQUNFLEVBRUEsRUFBTyxFQUFPLGdCQUFnQixHQUFNLENBQWdCLEVBSXBELEVBQVEsRUFBUyxNQUFNLEVBQUcsRUFBUyxPQUFTLENBQUMsRUFDakQsTUFBTyxDQUNMLEtBQU0sVUFDTixLQUFNLEVBQU8sS0FHYixRQUNBLE1BQ0YsR0FHRixXQUFXLENBQUMsRUFBTyxFQUFTLENBRTFCLElBQUksRUFBVyxHQUFTLEVBQU0sT0FDMUIsRUFBYSxFQUFRLFlBQVksQ0FBUSxFQUFFLFNBQVMsRUFBRSxFQUMxRCxPQUFPLEdBQVksRUFBTSxLQUFNLEVBQVksQ0FBTyxHQUdwRCxhQUFhLENBQUMsRUFBTyxFQUFTLENBRTVCLElBQUksRUFBVyxHQUFTLEVBQU0sT0FDMUIsRUFBYSxFQUFRLFlBQVksQ0FBUSxFQUN6QyxFQUFRLEdBQWdCLEVBQU0sS0FBTSxDQUFVLEVBQzlDLEVBQU8sSUFBSSxHQUFXLFNBQVMsU0FBVSxDQUFLLEVBQzlDLEVBQWtCLENBQ3BCLFFBQVcsQ0FBQyxJQUFLLE1BQU0sRUFDdkIsS0FBUSxDQUFDLElBQUssT0FBTyxFQUNyQixPQUFVLENBQUMsSUFBSyxPQUFPLEVBQ3ZCLGFBQWdCLENBQUMsSUFBSyxPQUFPLENBQy9CLEVBQ0ksRUFBTyxFQUFnQixFQUFNLE9BR2pDLE9BRkEsRUFBSyxhQUFhLGNBQWUsRUFBSyxFQUFFLEVBQ3hDLEVBQUssYUFBYSxlQUFnQixFQUFLLEVBQUUsRUFDbEMsRUFHWCxDQUFDLEVBbUNELEdBQXVCLENBQ3JCLEtBQU0sU0FFTixXQUFXLENBQUMsRUFBTyxFQUFTLENBSzFCLElBQUksRUFBa0IsSUFBb0IsRUFBTyxDQUFPLEVBRXhELEdBQUksRUFDRixPQUFPLEVBQWdCLEVBQU8sQ0FBTyxFQUd2QyxJQUNFLEtBQU0sRUFDTixJQUFLLEVBQ0wsSUFBSyxHQUNILEVBQ0EsRUFBTyxHQUFhLEVBQVcsQ0FBTyxFQUN0QyxFQUNBLEVBQ0EsRUFBVSxFQUFRLFlBQVksRUFFOUIsRUFBVyxFQUNYLEVBQVcsRUFDWCxFQUFpQixHQUFhLEdBQU0sZUFBZSxDQUFTLEVBRWhFLEdBQUksRUFBVSxDQUNaLElBQUksRUFBYSxFQUFRLFlBQVksRUFBUSxNQUFNLElBQUksQ0FBQyxFQUd4RCxHQUZBLEVBQU8sR0FBYSxFQUFVLEVBQVksQ0FBTyxHQUU1QyxFQUNILEVBQVcsRUFBSyxPQUFTLEVBQVcsWUFBWSxFQUFFLFFBQVUsRUFBVyxlQUFpQixFQUFRLGVBSXBHLEdBQUksRUFBVSxDQUNaLElBQUksRUFBYyxFQUFRLFlBQVksRUFBUSxNQUFNLElBQUksQ0FBQyxFQUl6RCxHQUZBLEVBQU8sR0FBYSxFQUFVLEVBQWEsQ0FBTyxHQUU3QyxFQUNILEVBQVcsRUFBSyxNQUFRLEVBQVksWUFBWSxFQUFFLFFBQVUsRUFBWSxlQUFpQixFQUFRLGVBS3JHLElBQUksRUFFSixHQUFJLEVBQVEsUUFBVSxHQUFRLFFBQzVCLEVBQWMsRUFBUSxhQUNiLEVBQVEsTUFBTSxRQUN2QixFQUFjLEVBQVEsU0FFdEIsR0FBYyxFQUFRLEtBS3hCLElBQUksRUFBYSxFQUFRLGVBQ3JCLEVBQWMsR0FBTyxJQUFNLEVBQVEsUUFBVSxDQUFVLEVBQ3ZELEVBQWEsS0FFakIsR0FBSSxFQUFNLENBSVIsSUFBSSxFQUFVLEVBQU0sTUFBUSxFQUFNLEtBQUssT0FBUyxNQUFRLEVBQU0sS0FBSyxPQUFTLEVBQU0sS0FBSyxPQUFTLFdBQWEsRUFBTSxLQUFLLE9BQVMsWUFFakksR0FBSSxhQUFnQixJQUFjLEVBRWhDLEVBQWEsSUFBUSxFQUFLLE1BQU0sRUFJcEMsSUFBSSxFQUVKLEdBQUksR0FBUSxFQUFNLENBQ2hCLEVBQVcsS0FBSyxJQUFJLEVBQVUsRUFBYSxFQUFLLE1BQVEsS0FBTyxFQUFRLE9BQU8sRUFDOUUsRUFBVyxLQUFLLElBQUksRUFBVSxFQUFRLElBQUksRUFDMUMsSUFBSSxFQUFZLEVBQVEscUJBRXBCLEVBQVcsRUFBSSxFQUVuQixHQUFJLEVBQVcsRUFBSyxPQUFTLEVBQUssT0FBUyxHQUFZLEVBQVUsQ0FDL0QsRUFBVyxHQUFZLEVBQVcsRUFBSyxPQUFTLEVBQUssT0FDckQsSUFBSSxFQUFNLElBQU0sRUFBUSxTQUFXLEVBQVcsRUFBSyxPQUVuRCxHQUFJLEVBQU0sRUFDUixHQUFZLEVBQ1osR0FBWSxFQUloQixJQUFJLEVBQVksQ0FBQyxDQUNmLEtBQU0sT0FDTixLQUFNLEVBQ04sTUFBTyxFQUNQLGNBQ0EsWUFDRixFQUFHLENBQ0QsS0FBTSxPQUNOLEtBQU0sRUFDTixPQUFRLEVBQ1IsYUFDRixDQUFDLEVBQ0QsRUFBUyxHQUFZLFVBQVUsQ0FDN0IsYUFBYyxrQkFDZCxTQUFVLENBQ1osRUFBRyxDQUFPLFVBQ0QsRUFBTSxDQUVmLEVBQVcsS0FBSyxJQUFJLEVBQVUsRUFBUSxLQUFNLEVBQUssT0FBUyxJQUFNLEVBQVEsT0FBTyxFQUMvRSxJQUFJLEVBQWEsQ0FBQyxDQUNoQixLQUFNLE9BQ04sS0FBTSxFQUNOLGFBQ0EsYUFDRixDQUFDLEVBQ0QsRUFBUyxHQUFZLFVBQVUsQ0FDN0IsYUFBYyxRQUNkLGFBQWMsRUFDZCxTQUFVLENBQ1osRUFBRyxDQUFPLFVBQ0QsRUFFVCxFQUFXLEtBQUssSUFBSSxFQUFVLEVBQWEsRUFBSyxNQUFRLEtBQU8sRUFBUSxPQUFPLEVBQzlFLEVBQVMsR0FBWSxVQUFVLENBQzdCLGFBQWMsUUFDZCxjQUFlLEVBQ2YsU0FBVSxDQUFDLENBQ1QsS0FBTSxPQUNOLEtBQU0sRUFDTixhQUNGLENBQUMsQ0FDSCxFQUFHLENBQU8sTUFFVixPQUFNLElBQUksTUFBTSxxQ0FBcUMsRUFJdkQsSUFBSSxFQUFTLEdBQWlCLEVBQU0sT0FBTyxHQUFLLE9BQ2hELE9BQU8sR0FBWSxTQUFTLENBQUMsQ0FBTSxFQUFHLENBQUMsRUFBTSxHQUFZLFNBQVMsQ0FBQyxTQUFTLEVBQUcsQ0FBQyxDQUFNLENBQUMsQ0FBQyxFQUFHLENBQU8sR0FHcEcsYUFBYSxDQUFDLEVBQU8sRUFBUyxDQUU1QixJQUFJLEVBQVUsR0FDVixFQUNBLEVBRUosR0FBSSxFQUFNLE1BQVEsRUFBTSxLQUFLLE9BQVMsY0FHcEMsR0FGQSxJQUFVLEVBQU0sSUFFWixJQUFVLEVBQU0sS0FBSyxPQUN2QixFQUFVLEdBQ1YsRUFBUyxFQUFNLEtBQUssT0FJeEIsR0FBSSxFQUFNLE9BQVMsRUFBTSxLQUFLLE9BQVMsTUFBUSxFQUFNLEtBQUssT0FBUyxnQkFDakUsRUFBTSxLQUFLLGVBQWlCLEdBRzlCLElBQUksRUFBVyxDQUFDLEdBQVcsRUFBTSxLQUFNLENBQU8sQ0FBQyxFQUUvQyxHQUFJLEVBQU0sSUFDUixFQUFTLEtBQUssR0FBVyxFQUFNLElBQUssQ0FBTyxDQUFDLEVBRzlDLEdBQUksRUFBTSxJQUNSLEVBQVMsS0FBSyxHQUFXLEVBQU0sSUFBSyxDQUFPLENBQUMsRUFHOUMsSUFBSSxFQUVKLEdBQUksRUFDRixFQUFXLEVBQVMsUUFBVSxrQkFDcEIsRUFBTSxJQUFLLENBQ3JCLElBQUksRUFBTyxFQUFNLEtBRWpCLEdBQUksR0FBUSxFQUFLLE9BQVMsTUFBUSxFQUFLLFNBQVcsRUFBUSxRQUFVLEdBQVEsU0FBVyxFQUFLLG9CQUMxRixFQUFXLGdCQUNGLEdBQVEsRUFBSyxPQUFTLGdCQUFrQixFQUFLLHFCQUF1QixFQUFLLFFBQVUsRUFBUSxRQUFVLEdBQVEsU0FDdEgsRUFBVyxZQUVYLEdBQVcsZ0JBRUgsRUFBTSxJQUFLLENBQ3JCLElBQUksRUFBUSxFQUFNLEtBRWxCLEdBQUksR0FBUyxFQUFNLE9BQVMsTUFBUSxFQUFNLFNBQVcsRUFBUSxRQUFVLEdBQVEsU0FBVyxFQUFNLG9CQUM5RixFQUFXLGlCQUNGLEdBQVMsRUFBTSxPQUFTLGdCQUFrQixFQUFNLHFCQUF1QixFQUFNLFFBQVUsRUFBUSxRQUFVLEdBQVEsU0FDMUgsRUFBVyxhQUVYLEdBQVcsV0FFUixDQUNMLElBQUksRUFBUyxFQUFNLEtBRW5CLEdBQUksR0FBVSxFQUFPLE9BQVMsTUFBUSxFQUFPLFFBQVUsRUFBUSxRQUFVLEdBQVEsUUFDL0UsRUFBVyxxQkFDRixHQUFVLEVBQU8sT0FBUyxnQkFBa0IsRUFBTyxxQkFBdUIsRUFBUSxRQUFVLEdBQVEsU0FBVyxFQUFPLFFBQy9ILEVBQVcsaUJBRVgsR0FBVyxVQUlmLE9BQU8sSUFBSSxHQUFXLFNBQVMsRUFBVSxDQUFRLEVBR3JELENBQUMsRUFFRCxHQUF1QixDQUNyQixLQUFNLE9BRU4sV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixPQUFPLEdBQVksUUFBUSxFQUFNLEtBQU0sRUFBTSxLQUFNLEVBQVMsQ0FBQyxJQUFNLEVBQU0sTUFBTSxDQUFDLEdBR2xGLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFPLElBQUksR0FBVyxTQUFTLEtBQU0sQ0FBQyxHQUFTLEVBQU0sS0FBTSxFQUFNLElBQUksQ0FBQyxDQUFDLEVBRTNFLEdBQUksRUFBTSxTQUFXLE1BQU8sQ0FDMUIsSUFBSSxFQUFVLEdBQVcsRUFBTyxDQUFPLEVBRXZDLEdBQUksSUFBWSxjQUNkLEVBQUssYUFBYSxjQUFlLENBQU8sVUFFakMsRUFBTSxTQUFXLFFBQzFCLEVBQUssYUFBYSxZQUFhLE1BQU0sVUFDNUIsRUFBTSxTQUFXLFFBQVUsRUFBTSxTQUFXLFFBR3JELEVBQUssYUFBYSxXQUFZLE9BQU8sRUFHdkMsT0FBTyxFQUdYLENBQUMsRUFJRyxHQUFpQixDQUNuQixHQUFNLFNBQ04sR0FBTSxTQUNOLE1BQVMsUUFDWCxFQUNBLEdBQXVCLENBQ3JCLEtBQU0sVUFFTixXQUFXLENBQUMsRUFBTyxFQUFTLENBQzFCLE9BQU8sR0FBWSxRQUFRLEVBQU8sRUFBUyxTQUFTLEdBR3RELGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFPLElBQUksR0FBVyxTQUFTLEtBQU0sQ0FBQyxHQUFTLEVBQU0sS0FBTSxFQUFNLEtBQU0sQ0FBTyxDQUFDLENBQUMsRUFDaEYsRUFBVSxHQUFXLEVBQU8sQ0FBTyxHQUFLLFNBRTVDLEdBQUksSUFBWSxHQUFlLEVBQUssTUFDbEMsRUFBSyxhQUFhLGNBQWUsQ0FBTyxFQUcxQyxPQUFPLEVBR1gsQ0FBQyxFQUNELEdBQXVCLENBQ3JCLEtBQU0sVUFFTixXQUFXLENBQUMsRUFBTyxFQUFTLENBQzFCLE9BQU8sR0FBWSxRQUFRLEVBQU8sRUFBUyxTQUFTLEdBR3RELGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFPLEdBQVMsRUFBTSxLQUFNLEVBQU0sS0FBTSxDQUFPLEVBQy9DLEVBQVUsR0FBVyxFQUFPLENBQU8sR0FBSyxTQUN4QyxFQUVKLEdBQUksRUFBTSxPQUFTLE9BQ2pCLEVBQU8sSUFBSSxHQUFXLFNBQVMsUUFBUyxDQUFDLENBQUksQ0FBQyxVQUNyQyxRQUFRLEtBQUssRUFBTSxJQUFJLEVBQ2hDLEVBQU8sSUFBSSxHQUFXLFNBQVMsS0FBTSxDQUFDLENBQUksQ0FBQyxVQUNsQyxFQUFNLE9BQVMsVUFDeEIsRUFBTyxJQUFJLEdBQVcsU0FBUyxLQUFNLENBQUMsQ0FBSSxDQUFDLE1BRTNDLEdBQU8sSUFBSSxHQUFXLFNBQVMsS0FBTSxDQUFDLENBQUksQ0FBQyxFQUc3QyxHQUFJLElBQVksR0FBZSxFQUFLLE1BQ2xDLEVBQUssYUFBYSxjQUFlLENBQU8sRUFHMUMsT0FBTyxFQUdYLENBQUMsRUFFRyxHQUFXLENBQ2IsWUFBYSxVQUNiLGVBQWdCLFlBQ2xCLEVBTUksR0FBZSxDQUNqQixJQUFLLENBQUMsRUFDTixNQUFPLENBQUMsRUFDUixJQUFLLENBQ0gsVUFBVyxTQUNiLEVBQ0EsVUFBVyxDQUFDLEVBQ1osaUJBQWtCLENBQ2hCLFVBQVcsU0FDYixDQUNGLEVBR0EsR0FBdUIsQ0FDckIsS0FBTSxVQUVOLFdBQVcsQ0FBQyxFQUFPLEVBQVMsQ0FDMUIsR0FBSSxHQUFhLGVBQWUsRUFBTSxJQUFJLEVBQUcsQ0FDM0MsSUFBSSxFQUFZLEdBQWEsRUFBTSxNQUFNLFdBQWEsR0FJdEQsR0FBSSxFQUFNLE9BQVMsT0FBUSxDQUN6QixJQUFJLEVBQU0sR0FBWSxRQUFRLEVBQU8sRUFBUyxTQUFTLEVBRXZELE9BREEsRUFBSSxRQUFRLEtBQUssQ0FBUyxFQUNuQixNQUVQLFFBQU8sR0FBWSxTQUFTLENBQUMsU0FBVSxDQUFTLEVBQUcsQ0FBQyxHQUFZLFFBQVEsRUFBTSxLQUFNLEVBQU0sS0FBTSxDQUFPLENBQUMsRUFBRyxDQUFPLFVBRTNHLEdBQVMsZUFBZSxFQUFNLElBQUksRUFFM0MsT0FBTyxHQUFZLFNBQVMsQ0FBQyxTQUFVLEdBQVMsRUFBTSxLQUFLLEVBQUcsQ0FBQyxFQUFHLENBQU8sTUFFekUsT0FBTSxJQUFJLEdBQVcsMkJBQTZCLEVBQU0sS0FBTyxJQUFJLEdBSXZFLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUVKLEdBQUksR0FBYSxlQUFlLEVBQU0sSUFBSSxFQUN4QyxFQUFPLElBQUksR0FBVyxTQUFTLFFBQVMsQ0FBQyxJQUFJLEdBQVcsU0FBUyxNQUFRLENBQUMsQ0FBQyxVQUNsRSxHQUFTLGVBQWUsRUFBTSxJQUFJLEVBRTNDLE9BQU8sSUFBSSxHQUFXLFNBQVMsUUFBUSxNQUV2QyxPQUFNLElBQUksR0FBVywyQkFBNkIsRUFBTSxLQUFPLElBQUksRUFHckUsT0FBTyxFQUdYLENBQUMsRUFRRCxHQUF1QixDQUNyQixLQUFNLE1BRU4sYUFBYSxDQUFDLEVBQU8sRUFBUyxDQUM1QixJQUFJLEVBQVEsSUFBSSxHQUFXLFNBQVMsU0FBVSxDQUFDLElBQUksR0FBVyxTQUFTLE1BQU8sQ0FBQyxHQUFJLEVBQUcsSUFBSSxHQUFXLFNBQVMsTUFBTyxDQUFDLEdBQW1CLEVBQU0sS0FBTSxDQUFPLENBQUMsQ0FBQyxFQUFHLEdBQUksRUFBRyxJQUFJLEdBQVcsU0FBUyxNQUFPLENBQUMsR0FBbUIsRUFBTSxJQUFLLENBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFFblAsT0FEQSxFQUFNLGFBQWEsUUFBUyxNQUFNLEVBQzNCLEVBU1gsQ0FBQyxFQUVHLEdBQW1CLENBQ3JCLFNBQVUsT0FDVixXQUFZLFNBQ1osV0FBWSxTQUNaLFdBQVksU0FDWixlQUFnQixRQUNsQixFQUNJLEdBQWtCLENBQ3BCLFdBQVksU0FDWixXQUFZLFFBQ2QsRUFDSSxJQUFpQixDQUNuQixXQUFZLFNBQ1osV0FBWSxRQUNkLEVBa0JBLEdBQWUsQ0FDYixLQUFNLE9BQ04sTUFBTyxDQUNQLFNBQVUsV0FBWSxXQUFZLFdBQVksZUFDOUMsV0FBWSxXQUNaLFdBQVksV0FBWSxRQUFRLEVBQ2hDLE1BQU8sQ0FDTCxRQUFTLEVBQ1QsU0FBVSxDQUFDLE1BQU0sRUFDakIsa0JBQW1CLEdBQ25CLGNBQWUsRUFDakIsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsU0FDQSxZQUNFLEVBQ0EsRUFBTyxFQUFLLEdBQ2hCLE1BQU8sQ0FDTCxLQUFNLE9BQ04sS0FBTSxFQUFPLEtBQ2IsS0FBTSxHQUFZLENBQUksRUFDdEIsS0FBTSxDQUNSLEdBR0YsV0FBVyxDQUFDLEVBQU8sRUFBUyxDQUMxQixJQUFJLEVBQWEsR0FBZ0IsRUFBTyxDQUFPLEVBQzNDLEVBQVEsR0FBa0IsRUFBTSxLQUFNLEVBQVksRUFBSSxFQUMxRCxPQUFPLEdBQVksU0FBUyxDQUFDLE9BQVEsTUFBTSxFQUFHLEVBQU8sQ0FBVSxHQUdqRSxhQUFhLENBQUMsRUFBTyxFQUFTLENBQzVCLElBQUksRUFBYSxHQUFnQixFQUFPLENBQU8sRUFDL0MsT0FBTyxHQUFtQixFQUFNLEtBQU0sQ0FBVSxFQUdwRCxDQUFDLEVBRUQsR0FBZSxDQUNiLEtBQU0sWUFDTixNQUFPLENBQUMsYUFBYSxFQUNyQixNQUFPLENBQ0wsUUFBUyxFQUNULGNBQWUsRUFDakIsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsVUFDRSxFQUNKLE1BQU8sQ0FDTCxLQUFNLFlBQ04sS0FBTSxFQUFPLEtBQ2IsS0FBTSxFQUFLLEVBQ2IsR0FHRixXQUFXLENBQUMsRUFBTyxFQUFTLENBRzFCLElBQUksRUFBYSxHQUFhLEVBQU0sS0FBTSxDQUFPLEVBRTdDLEVBQU8sR0FBWSxhQUFhLGlCQUFrQixDQUFPLEVBRXpELEVBQXVCLEVBQVEsWUFBWSxFQUFFLHFCQUM3QyxFQUFRLEdBQVksVUFBVSxDQUNoQyxhQUFjLE1BQ2QsYUFBYyxFQUFXLE9BQ3pCLFNBQVUsQ0FBQyxDQUNULEtBQU0sT0FDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sT0FDTixLQUFNLENBQ1IsRUFBRyxDQUNELEtBQU0sT0FDTixLQUFNLEVBQUksQ0FDWixFQUFHLENBQ0QsS0FBTSxPQUNOLEtBQU0sQ0FDUixDQUFDLENBQ0gsRUFBRyxDQUFPLEVBQ1YsT0FBTyxHQUFZLFNBQVMsQ0FBQyxPQUFRLFdBQVcsRUFBRyxDQUFDLENBQUssRUFBRyxDQUFPLEdBR3JFLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFXLElBQUksR0FBVyxTQUFTLEtBQU0sQ0FBQyxJQUFJLEdBQVcsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUNoRixFQUFTLGFBQWEsV0FBWSxNQUFNLEVBQ3hDLElBQUksRUFBTyxJQUFJLEdBQVcsU0FBUyxTQUFVLENBQUMsR0FBVyxFQUFNLEtBQU0sQ0FBTyxFQUFHLENBQVEsQ0FBQyxFQUV4RixPQURBLEVBQUssYUFBYSxjQUFlLE1BQU0sRUFDaEMsRUFHWCxDQUFDLEVBRUQsR0FBZSxDQUNiLEtBQU0sVUFDTixNQUFPLENBQUMsV0FBVyxFQUNuQixNQUFPLENBQ0wsUUFBUyxFQUNULFNBQVUsQ0FBQyxVQUFVLEVBRXJCLGNBQWUsRUFDakIsRUFFQSxPQUFPLENBQUMsRUFBTSxFQUFNLENBQ2xCLElBQ0UsVUFDRSxFQUNKLE1BQU8sQ0FDTCxLQUFNLFVBQ04sS0FBTSxFQUFPLEtBQ2IsS0FBTSxFQUFLLEVBQ2IsR0FHRixXQUFXLENBQUMsRUFBTyxFQUFTLENBQzFCLElBQUksRUFBTyxHQUFhLEVBQU0sS0FBTSxDQUFPLEVBQ3ZDLEVBQWEsRUFBUSxZQUFZLEVBQUUsV0FDbkMsRUFBSyxLQUFPLEVBQUssT0FBUyxHQUFjLEVBQUssTUFBUSxJQUN6RCxPQUFPLEdBQVksVUFBVSxDQUMzQixhQUFjLFFBQ2QsYUFBYyxFQUNkLFNBQVUsQ0FBQyxDQUNULEtBQU0sT0FDTixLQUFNLENBQ1IsQ0FBQyxDQUNILEVBQUcsQ0FBTyxHQUdaLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FJNUIsT0FBTyxJQUFJLEdBQVcsU0FBUyxVQUFXLENBQUMsR0FBVyxFQUFNLEtBQU0sQ0FBTyxDQUFDLEVBQUcsQ0FBQyxTQUFTLENBQUMsRUFHNUYsQ0FBQyxFQUVELEdBQWUsQ0FDYixLQUFNLE9BQ04sTUFBTyxDQUFDLFFBQVEsRUFDaEIsTUFBTyxDQUNMLFFBQVMsRUFDVCxjQUFlLEVBQ2pCLEVBRUEsT0FBTyxDQUFDLEVBQVMsRUFBTSxFQUFTLENBSzlCLE1BQU0sSUFBSSxHQUFXLDJEQUEyRCxHQUdsRixXQUFXLENBQUMsRUFBTyxFQUFTLENBQzFCLElBQUksRUFBTyxHQUFTLENBQUssRUFDckIsRUFBTyxDQUFDLEVBRVIsRUFBYSxFQUFRLFlBQVksRUFBUSxNQUFNLEtBQUssQ0FBQyxFQUV6RCxRQUFTLEVBQUksRUFBRyxFQUFJLEVBQUssT0FBUSxJQUFLLENBQ3BDLElBQUksRUFBSSxFQUFLLEdBRWIsR0FBSSxJQUFNLElBQ1IsRUFBSSxtQkFHTixFQUFLLEtBQUssR0FBWSxXQUFXLEVBQUcscUJBQXNCLEVBQU0sS0FBTSxFQUFZLENBQUMsT0FBUSxRQUFRLENBQUMsQ0FBQyxFQUd2RyxPQUFPLEdBQVksU0FBUyxDQUFDLE9BQVEsTUFBTSxFQUFFLE9BQU8sRUFBVyxjQUFjLENBQU8sQ0FBQyxFQUFHLEdBQVksZ0JBQWdCLENBQUksRUFBRyxDQUFVLEdBR3ZJLGFBQWEsQ0FBQyxFQUFPLEVBQVMsQ0FDNUIsSUFBSSxFQUFPLElBQUksR0FBVyxTQUFTLEdBQVMsQ0FBSyxDQUFDLEVBQzlDLEVBQU8sSUFBSSxHQUFXLFNBQVMsUUFBUyxDQUFDLENBQUksQ0FBQyxFQUVsRCxPQURBLEVBQUssYUFBYSxjQUFlLFdBQVcsRUFDckMsRUFHWCxDQUFDLEVBV0csR0FBWSxHQXlDWixJQUFtQyxJQUFNLElBQXlCLElBQU0sR0FBbUIsSUFHM0YsSUFBb0MsSUFBSSxPQUFPLEdBQWlDLElBQUksRUFDcEYsSUFBbUIsSUFBTSxHQUFtQixPQUNoRCxJQUEwQixLQUMxQixnREFDQSxHQUFpQyxLQUNqQyxtQ0FDQSxHQUFpQyxLQUNqQyxzREFFQSxJQUFNLE1BQ04sSUFBTSxJQUEyQixLQXVON0IsSUFBUyxHQUdiLEdBQVkscUJBQXVCLENBQUMsRUFBUyxDQUkzQyxJQUFJLEVBQUksRUFBUSxTQUFTLEVBRXpCLEdBQUksRUFBUSxhQUFhLEVBQUUsSUFBSSxFQUM3QixFQUFFLFNBQVcsR0FDYixFQUFFLGFBQWUsR0FHbkIsTUFBTyxDQUNMLE9BQVEsQ0FBQyxDQUFDLEVBQ1YsUUFBUyxDQUNYLEVBQ0QsRUFDRCxHQUFZLHdCQUEwQixDQUFDLEVBQVMsQ0FNOUMsSUFBSSxFQUFJLEVBQVEsU0FBUyxFQUd6QixPQUZBLEVBQVEsV0FBVyxFQUFJLEVBRWhCLENBQ0wsT0FBUSxDQUFDLENBQUMsRUFDVixRQUFTLENBQ1gsRUFDRCxFQUdELEdBQVksd0JBQTBCLENBQUMsRUFBUyxDQUM5QyxJQUFJLEVBQU8sRUFBUSxZQUFZLENBQUMsRUFDaEMsTUFBTyxDQUNMLE9BQVEsRUFBSyxHQUNiLFFBQVMsQ0FDWCxFQUNELEVBR0QsR0FBWSx5QkFBMkIsQ0FBQyxFQUFTLENBQy9DLElBQUksRUFBTyxFQUFRLFlBQVksQ0FBQyxFQUNoQyxNQUFPLENBQ0wsT0FBUSxFQUFLLEdBQ2IsUUFBUyxDQUNYLEVBQ0QsRUFLRCxHQUFZLHdCQUEwQixDQUFDLEVBQVMsQ0FDOUMsSUFBSSxFQUFPLEVBQVEsWUFBWSxDQUFDLEVBRWhDLEVBQVEsY0FBYyxFQUN0QixJQUFJLEVBQVksRUFBUSxPQUFPLEVBRS9CLEdBQUksRUFBSyxHQUFHLFNBQVcsR0FBSyxFQUFLLEdBQUcsR0FBRyxPQUFTLEVBQVUsS0FDeEQsTUFBTyxDQUNMLE9BQVEsRUFBSyxHQUNiLFFBQVMsQ0FDWCxNQUVBLE9BQU8sQ0FDTCxPQUFRLEVBQUssR0FDYixRQUFTLENBQ1gsRUFFSCxFQUtELEdBQVksWUFBYSxvQ0FBb0MsRUFFN0QsR0FBWSx1QkFBeUIsQ0FBQyxFQUFTLENBQzdDLElBQUksRUFBTyxFQUFRLFlBQVksQ0FBQyxFQUVoQyxHQUFJLEVBQVEsT0FBUyxPQUNuQixNQUFPLENBQ0wsT0FBUSxFQUFLLEdBQ2IsUUFBUyxDQUNYLE1BRUEsT0FBTyxDQUNMLE9BQVEsRUFBSyxHQUNiLFFBQVMsQ0FDWCxFQUVILEVBRUcsR0FBZ0IsQ0FDbEIsSUFBSyxFQUNMLElBQUssRUFDTCxJQUFLLEVBQ0wsSUFBSyxFQUNMLElBQUssRUFDTCxJQUFLLEVBQ0wsSUFBSyxFQUNMLElBQUssRUFDTCxJQUFLLEVBQ0wsSUFBSyxFQUNMLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxHQUNMLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxHQUNMLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxHQUNMLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxFQUNQLEVBVUEsR0FBWSxpQkFBbUIsQ0FBQyxFQUFTLENBQ3ZDLElBQUksRUFBUSxFQUFRLFNBQVMsRUFDekIsRUFDQSxFQUFTLEdBRWIsR0FBSSxFQUFNLE9BQVMsSUFDakIsRUFBTyxFQUNQLEVBQVEsRUFBUSxTQUFTLFVBQ2hCLEVBQU0sT0FBUyxJQUN4QixFQUFPLEdBQ1AsRUFBUSxFQUFRLFNBQVMsVUFDaEIsRUFBTSxPQUFTLElBR3hCLEdBRkEsRUFBUSxFQUFRLFNBQVMsRUFFckIsRUFBTSxLQUFLLEtBQU8sS0FDcEIsRUFBUyxFQUFNLEtBQUssV0FBVyxDQUFDLFVBQ3ZCLEVBQU0sT0FBUyxNQUN4QixNQUFNLElBQUksR0FBVywwQkFBMEIsTUFFL0MsR0FBUyxFQUFNLEtBQUssV0FBVyxDQUFDLE1BR2xDLEdBQU8sR0FHVCxHQUFJLEVBQU0sQ0FJUixHQUZBLEVBQVMsR0FBYyxFQUFNLE1BRXpCLEdBQVUsTUFBUSxHQUFVLEVBQzlCLE1BQU0sSUFBSSxHQUFXLGdCQUFrQixFQUFPLFVBQVksRUFBTSxJQUFJLEVBR3RFLElBQUksRUFFSixPQUFRLEVBQVEsR0FBYyxFQUFRLE9BQU8sRUFBRSxRQUFVLE1BQVEsRUFBUSxFQUN2RSxHQUFVLEVBQ1YsR0FBVSxFQUNWLEVBQVEsU0FBUyxFQUlyQixNQUFPLFdBQWEsRUFBUyxJQUM5QixFQW1ERCxHQUFZLGVBQWdCLEtBQVcsR0FBVyxFQUFTLEdBQU8sRUFBSSxDQUFDLEVBQ3ZFLEdBQVksaUJBQWtCLEtBQVcsR0FBVyxFQUFTLEdBQU0sRUFBSyxDQUFDLEVBQ3pFLEdBQVksbUJBQW9CLEtBQVcsR0FBVyxFQUFTLEdBQU0sRUFBSSxDQUFDLEVBRTFFLEdBQVksWUFBYSxLQUFXLENBQ2xDLElBQUksRUFBTSxFQUFRLFlBQVksQ0FBQyxFQUFFLEdBR2pDLE9BREEsUUFBUSxJQUFJLEVBQUksUUFBUSxFQUFFLElBQUksS0FBUyxFQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNwRCxHQUNSLEVBQ0QsR0FBWSxlQUFnQixLQUFXLENBQ3JDLElBQUksRUFBTSxFQUFRLFlBQVksQ0FBQyxFQUFFLEdBR2pDLE9BREEsUUFBUSxNQUFNLEVBQUksUUFBUSxFQUFFLElBQUksS0FBUyxFQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUN0RCxHQUNSLEVBQ0QsR0FBWSxTQUFVLEtBQVcsQ0FDL0IsSUFBSSxFQUFNLEVBQVEsU0FBUyxFQUN2QixFQUFPLEVBQUksS0FHZixPQURBLFFBQVEsSUFBSSxFQUFLLEVBQVEsT0FBTyxJQUFJLENBQUksRUFBRyxHQUFVLEdBQU8sR0FBUSxLQUFLLEdBQU8sR0FBUSxLQUFLLEVBQUssRUFDM0YsR0FDUixFQUlELEdBQVksV0FBWSxHQUFHLEVBQzNCLEdBQVksV0FBWSxHQUFHLEVBTzNCLEdBQVksSUFBSyxnQkFBZ0IsRUFDakMsR0FBWSxPQUFRLEdBQUcsRUFDdkIsR0FBWSxPQUFRLEdBQUcsRUFDdkIsR0FBWSxPQUFRLE9BQU8sRUFDM0IsR0FBWSxPQUFRLE9BQU8sRUFPM0IsR0FBWSxrQkFBbUIsOENBQTBDLEVBQ3pFLEdBQVksY0FBZSx3REFBd0QsRUFDbkYsR0FBWSxtQkFBb0IsMkRBQXVELEVBRXZGLEdBQVksU0FBVSxjQUFjLEVBRXBDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxjQUFjLEVBQ3BDLEdBQVksU0FBVSxlQUFlLEVBRXJDLEdBQVksU0FBVSxlQUFlLEVBQ3JDLEdBQVksU0FBVSxlQUFlLEVBRXJDLEdBQVksU0FBVSxVQUFVLEVBSWhDLEdBQVksT0FBVSxTQUFTLEVBRS9CLEdBQVksU0FBVSwwQkFBMEIsRUFDaEQsR0FBWSxTQUFVLDBCQUEwQixFQUNoRCxHQUFZLFNBQVUsMEJBQTBCLEVBRWhELEdBQVksY0FBZSxlQUFlLEVBRTFDLEdBQVksYUFBYyx5QkFBeUIsRUFNbkQsR0FBWSxRQUFTLHdEQUF3RCxFQU03RSxHQUFZLFFBQVMsNERBQXNELEVBQzNFLEdBQVksT0FBUSxPQUFPLEVBQzNCLEdBQVksU0FBVSxPQUFPLEVBQzdCLEdBQVksVUFBVywwREFBNEQsNEJBQXNCLEVBQ3pHLEdBQVksU0FBVSxTQUFTLEVBRS9CLEdBQVksU0FBVSxpRkFBd0YsNkJBQTZCLEVBQzNJLEdBQVksU0FBVSx1RUFBdUUsRUFDN0YsR0FBWSxTQUFVLHFFQUFxRSxFQUMzRixHQUFZLFNBQVUsbURBQXFELDRCQUE0QixFQUN2RyxHQUFZLFNBQVUsb0RBQXNELDRCQUE0QixFQUN4RyxHQUFZLFNBQVUsa0RBQW9ELDRCQUE0QixFQUN0RyxHQUFZLFNBQVUsaUVBQWlFLEVBRXZGLEdBQVksU0FBVSxRQUFRLEVBQzlCLEdBQVksU0FBVSw4QkFBOEIsRUFDcEQsR0FBWSxTQUFVLFNBQVMsRUFDL0IsR0FBWSxTQUFVLFlBQVksRUFDbEMsR0FBWSxTQUFVLFlBQVksRUFDbEMsR0FBWSxTQUFVLFlBQVksRUFDbEMsR0FBWSxTQUFVLFlBQVksRUFDbEMsR0FBWSxPQUFVLGFBQWEsRUFDbkMsR0FBWSxPQUFVLGtCQUFrQixFQUN4QyxHQUFZLFNBQVUsa0JBQWtCLEVBR3hDLEdBQVksYUFBYyxvREFBb0QsRUFDOUUsR0FBWSxhQUFjLG9EQUFvRCxFQUM5RSxHQUFZLGFBQWMsb0RBQW9ELEVBQzlFLEdBQVksYUFBYyxvREFBb0QsRUFPOUUsR0FBWSxVQUFXLHdDQUF3QyxFQUMvRCxHQUFZLFNBQVUsU0FBUyxFQU0vQixHQUFZLGFBQWMsbUJBQW1CLEVBQzdDLEdBQVksYUFBYyxtQkFBbUIsRUFDN0MsR0FBWSxhQUFjLG1CQUFtQixFQUM3QyxHQUFZLGNBQWUsb0JBQW9CLEVBQy9DLEdBQVksVUFBVyxnQkFBZ0IsRUFDdkMsR0FBWSxVQUFXLGdCQUFnQixFQUN2QyxHQUFZLGFBQWMsbUJBQW1CLEVBQzdDLEdBQVksZUFBZ0IscUJBQXFCLEVBQ2pELEdBQVksV0FBWSxpQkFBaUIsRUFDekMsR0FBWSxXQUFZLGlCQUFpQixFQUN6QyxHQUFZLGFBQWMsbUJBQW1CLEVBRTdDLEdBQVksYUFBYyx1Q0FBdUMsRUFHakUsR0FBWSxVQUFXLGdHQUFxRyxFQUU1SCxHQUFZLFVBQVcsOEJBQThCLEVBSXJELEdBQVksUUFBUyxtQ0FBbUMsRUFDeEQsR0FBWSxZQUFhLCtCQUErQixFQUN4RCxHQUFZLGNBQWUsOEJBQThCLEVBRXJELEdBQWMsQ0FDaEIsSUFBSyxVQUNMLFFBQVMsVUFFVCxJQUFLLFVBQ0wsSUFBSyxVQUNMLElBQUssVUFDTCxJQUFLLFVBQ0wsSUFBSyxVQUNMLElBQUssVUFDTCxJQUFLLFVBRUwsVUFBVyxVQUNYLFdBQVksVUFDWixXQUFZLFVBQ1osYUFBYyxVQUNkLGFBQWMsVUFDZCxXQUFZLFVBQ1osV0FBWSxVQUNaLFNBQVUsVUFDVixRQUFTLFVBQ1QsY0FBZSxVQUNmLGFBQWMsVUFDZCxZQUFhLFVBQ2IsYUFBYyxVQUNkLFFBQVMsVUFDVCxtQkFBb0IsVUFDcEIsbUJBQW9CLFVBQ3BCLGtCQUFtQixVQUNuQixrQkFBbUIsVUFDbkIsdUJBQXdCLFVBQ3hCLHVCQUF3QixVQUN4QixXQUFZLFVBQ1osZUFBZ0IsVUFDaEIsbUJBQW9CLFVBQ3BCLFVBQVcsVUFFWCxZQUFhLFVBRWIsWUFBYSxVQUNiLFdBQVksVUFDWixXQUFZLFVBQ1osZ0JBQWlCLFVBQ2pCLGVBQWdCLFVBRWhCLFVBQVcsVUFDWCxRQUFTLFVBQ1QsU0FBVSxVQUNWLFNBQVUsVUFDVixVQUFXLFVBQ1gsV0FBWSxVQUNaLGFBQWMsVUFFZCxVQUFXLFNBQ2IsRUFDQSxHQUFZLGlCQUFtQixDQUFDLEVBQVMsQ0FNdkMsSUFBSSxFQUFVLFVBQ1YsRUFBTyxFQUFRLGtCQUFrQixFQUFFLEtBRXZDLEdBQUksS0FBUSxHQUNWLEVBQVUsR0FBWSxXQUNiLEVBQUssTUFBTSxFQUFHLENBQUMsSUFBTSxRQUM5QixFQUFVLGtCQUNELEtBQVEsR0FBUSxNQUN6QixHQUFJLEdBQU0sU0FBUyxDQUFDLE1BQU8sS0FBSyxFQUFHLEdBQVEsS0FBSyxHQUFNLEtBQUssRUFDekQsRUFBVSxVQUlkLE9BQU8sRUFDUixFQUNHLEdBQWlCLENBRW5CLElBQUssR0FDTCxJQUFLLEdBQ0wsV0FBWSxHQUNaLE1BQU8sR0FDUCxXQUFZLEdBQ1osV0FBWSxHQUNaLFVBQVcsR0FDWCxXQUFZLEdBQ1osV0FBWSxHQUNaLGVBQWdCLEdBQ2hCLFVBQVcsR0FDWCxTQUFVLEdBQ1YsVUFBVyxHQUNYLFNBQVUsR0FDVixVQUFXLEdBRVgsRUFBSyxHQUVMLElBQUssR0FDTCxJQUFLLEdBQ0wsSUFBSyxFQUNQLEVBQ0EsR0FBWSxrQkFBb0IsQ0FBQyxFQUFTLENBQ3hDLElBQUksRUFBTyxFQUFRLE9BQU8sRUFBRSxLQUU1QixHQUFJLEtBQVEsR0FDVixNQUFPLGlCQUVQLE9BQU8sVUFFVixFQUNELEdBQVksa0JBQW9CLENBQUMsRUFBUyxDQUN4QyxJQUFJLEVBQU8sRUFBUSxPQUFPLEVBQUUsS0FHNUIsR0FBSSxLQUFRLElBQWtCLElBQVMsSUFDckMsTUFBTyxpQkFFUCxPQUFPLFVBRVYsRUFDRCxHQUFZLGtCQUFvQixDQUFDLEVBQVMsQ0FDeEMsSUFBSSxFQUFPLEVBQVEsT0FBTyxFQUFFLEtBRTVCLEdBQUksS0FBUSxHQUNWLE1BQU8sa0JBRVAsT0FBTyxXQUVWLEVBQ0QsR0FBWSxVQUFXLFNBQVMsRUFDaEMsR0FBWSxVQUFXLFNBQVMsRUFDaEMsR0FBWSxVQUFXLFlBQVksRUFJbkMsR0FBWSxVQUFXLFlBQVksRUFJbkMsR0FBWSxVQUFXLFNBQVMsRUFDaEMsR0FBWSxVQUFXLFNBQVMsRUFDaEMsR0FBWSxVQUFXLFNBQVMsRUFJaEMsR0FBWSxZQUFhLDhDQUE4QyxFQUd2RSxHQUFZLE1BQU8sMEJBQTBCLEVBRTdDLEdBQVksY0FBZSxLQUFLLEVBSWhDLEdBQVksTUFBTyxjQUFjLEVBQ2pDLEdBQVksTUFBTywwQkFBMEIsRUFFN0MsR0FBWSxhQUFjLEtBQUssRUFHL0IsR0FBWSxNQUFPLDBCQUEwQixFQUU3QyxHQUFZLGVBQWdCLEtBQUssRUFHakMsR0FBWSxNQUFPLDBCQUEwQixFQUU3QyxHQUFZLGlCQUFrQixLQUFLLEVBR25DLEdBQVksZ0JBQWlCLDBCQUEwQixFQUd2RCxHQUFZLGtCQUFtQix5QkFBeUIsRUFFeEQsR0FBWSxZQUFhLGFBQWEsRUFFdEMsR0FBWSxXQUFZLG9CQUFvQixFQUU1QyxHQUFZLFNBQVUsbUJBQW1CLEVBRXpDLEdBQVksVUFBVyxtQkFBbUIsRUFFMUMsR0FBWSxRQUFTLG1DQUFtQyxFQUN4RCxHQUFZLGNBQWUsdUJBQXVCLEVBQ2xELEdBQVksZ0JBQWlCLEtBQVcsQ0FDdEMsR0FBSSxFQUFRLE9BQU8sSUFBSSxVQUFVLEVBQy9CLE1BQU0sSUFBSSxHQUFXLGdCQUFnQixFQUd2QyxNQUFPLDZCQUNSLEVBVUQsR0FBWSxTQUFVLDZJQUF1SixFQUM3SyxHQUFZLFFBQVMsK0VBQW9GLEVBQ3pHLEdBQVksU0FBVSwrQkFBK0IsRUFDckQsR0FBWSxRQUFTLGdHQUEwRyxFQU0vSCxHQUFZLFlBQWEsYUFBYSxFQUt0QyxHQUFZLFFBQVMsaUZBQTJGLEVBZTVHLEdBQWMsR0FBTyxHQUFnQixnQkFBZ0IsSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFLLElBQU0sR0FBZ0IsZ0JBQWdCLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUM1SSxHQUFZLFVBQVcsMkJBQTZCLDJCQUE2QixHQUFjLHNCQUF3Qiw0QkFBNEIsRUFFbkosR0FBWSxVQUFXLDJCQUE2QiwyQkFBNkIsR0FBYyxzQkFBd0IsNEJBQTRCLEVBS25KLEdBQVksV0FBWSw4QkFBOEIsRUFDdEQsR0FBWSxZQUFhLG1CQUFtQixFQUM1QyxHQUFZLGFBQWMsbUNBQW1DLEVBSTdELEdBQVksa0JBQW1CLEdBQUcsRUFHbEMsR0FBWSxlQUFnQixvQ0FBb0MsRUFFaEUsR0FBWSxhQUFjLG1HQUE2RyxFQUV2SSxHQUFZLGFBQWMseUZBQW1HLEVBRzdILEdBQVksYUFBYyxpR0FBMkcsRUFFckksR0FBWSxZQUFhLDhHQUF3SCxFQUVqSixHQUFZLFlBQWEsOEdBQXdILEVBRWpKLEdBQVksYUFBYyx5RkFBbUcsRUFHN0gsR0FBWSxhQUFjLGlHQUEyRyxFQUVySSxHQUFZLFlBQWEsb0dBQThHLEVBRXZJLEdBQVksWUFBYSw4R0FBd0gsRUFFakosR0FBWSxnQkFBaUIsMEdBQW9ILEVBRWpKLEdBQVksZ0JBQWlCLDBHQUFvSCxFQUVqSixHQUFZLGFBQWMsdUdBQWlILEVBRTNJLEdBQVksYUFBYyx1R0FBaUgsRUFFM0ksR0FBWSxTQUFVLFlBQVksRUFFbEMsR0FBWSxTQUFVLFdBQVcsRUFFakMsR0FBWSxTQUFVLFlBQVksRUFFbEMsR0FBWSxTQUFVLFlBQVksRUFFbEMsR0FBWSxTQUFVLFlBQVksRUFLbEMsR0FBWSxVQUFXLGNBQWMsRUFDckMsR0FBWSxlQUFnQixZQUFZLEVBQ3hDLEdBQVksZ0JBQWlCLFlBQVksRUFDekMsR0FBWSxxQkFBc0IsWUFBWSxFQUM5QyxHQUFZLGdCQUFpQixZQUFZLEVBQ3pDLEdBQVkscUJBQXNCLFlBQVksRUFDOUMsR0FBWSxlQUFnQixXQUFXLEVBQ3ZDLEdBQVksb0JBQXFCLFdBQVcsRUFDNUMsR0FBWSxlQUFnQixXQUFXLEVBQ3ZDLEdBQVksb0JBQXFCLFdBQVcsRUFFNUMsR0FBWSxxQkFBc0IsZUFBZSxFQUVqRCxHQUFZLGtCQUFtQixZQUFZLEVBRTNDLEdBQVksYUFBYyxzREFBc0QsRUFDaEYsR0FBWSxrQkFBbUIsb0RBQW9ELEVBQ25GLEdBQVksZ0JBQWlCLHlEQUF5RCxFQUN0RixHQUFZLHFCQUFzQix1REFBdUQsRUFFekYsR0FBWSxVQUFXLG9EQUFvRCxFQUMzRSxHQUFZLFdBQVksbUNBQW1DLEVBQzNELEdBQVksV0FBWSxtQ0FBbUMsRUFHM0QsR0FBWSxXQUFZLG1DQUFtQyxFQUMzRCxHQUFZLFlBQWEsb0NBQW9DLEVBQzdELEdBQVksY0FBZSx5Q0FBeUMsRUFDcEUsR0FBWSxjQUFlLDBDQUEwQyxFQUNyRSxHQUFZLGNBQWUsZ0RBQWdELEVBQzNFLEdBQVksZUFBZ0IsK0NBQStDLEVBRzNFLEdBQVksY0FBZSxxQ0FBcUMsRUFDaEUsR0FBWSxjQUFlLHFDQUFxQyxFQUNoRSxHQUFZLFVBQVcsaUNBQWlDLEVBQ3hELEdBQVksY0FBZSxxQ0FBcUMsRUFDaEUsR0FBWSxVQUFXLGlDQUFpQyxFQUN4RCxHQUFZLGNBQWUscUNBQXFDLEVBQ2hFLEdBQVksY0FBZSxxQ0FBK0IsRUFDMUQsR0FBWSxtQkFBb0IsMENBQW9DLEVBQ3BFLEdBQVksZUFBZ0Isc0NBQXNDLEVBQ2xFLEdBQVksZUFBZ0Isc0NBQXNDLEVBQ2xFLEdBQVksaUJBQWtCLHdDQUFrQyxFQUNoRSxHQUFZLGtCQUFtQix5Q0FBbUMsRUFDbEUsR0FBWSxpQkFBa0Isd0NBQWtDLEVBQ2hFLEdBQVksa0JBQW1CLHlDQUFtQyxFQUNsRSxHQUFZLFVBQVcsaUNBQWlDLEVBQ3hELEdBQVksVUFBVyxpQ0FBaUMsRUFLeEQsR0FBWSxjQUFlLDZDQUFvRCw2QkFBNkIsRUFDNUcsR0FBWSxjQUFlLDhDQUFxRCw4QkFBOEIsRUFDOUcsR0FBWSxTQUFVLGFBQWEsRUFFbkMsR0FBWSxTQUFVLGFBQWEsRUFFbkMsR0FBWSxXQUFZLCtDQUFzRCw2QkFBNkIsRUFDM0csR0FBWSxXQUFZLGdEQUF1RCw4QkFBOEIsRUFDN0csR0FBWSxTQUFVLFVBQVUsRUFFaEMsR0FBWSxTQUFVLFVBQVUsRUFNaEMsR0FBWSxXQUFZLHFJQUFpSixrQkFBWSxFQUNyTCxHQUFZLFNBQUksVUFBVSxFQU8xQixHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsVUFBVSxFQUNoQyxHQUFZLFNBQVUsVUFBVSxFQUNoQyxHQUFZLFNBQVUsV0FBVyxFQUNqQyxHQUFZLFNBQVUsV0FBVyxFQUNqQyxHQUFZLFNBQVUsV0FBVyxFQUNqQyxHQUFZLE1BQU8sYUFBYSxFQUNoQyxHQUFZLE1BQU8sYUFBYSxFQUNoQyxHQUFZLE1BQU8sYUFBYSxFQUNoQyxHQUFZLFNBQVUsU0FBUyxFQUMvQixHQUFZLFlBQWEsU0FBUyxFQUNsQyxHQUFZLFVBQVcsYUFBYSxFQUNwQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsVUFBVSxFQUNoQyxHQUFZLFFBQVMsYUFBYSxFQUNsQyxHQUFZLFVBQVcsWUFBWSxFQUNuQyxHQUFZLFVBQVcsYUFBYSxFQUNwQyxHQUFZLFlBQWEsYUFBYSxFQUN0QyxHQUFZLFdBQVksV0FBVyxFQUNuQyxHQUFZLGFBQWMsZUFBZSxFQUN6QyxHQUFZLFVBQVcsWUFBWSxFQUNuQyxHQUFZLFlBQWEsYUFBYSxFQUN0QyxHQUFZLFFBQVMsYUFBYSxFQUNsQyxHQUFZLFVBQVcsVUFBVSxFQUNqQyxHQUFZLFNBQVUsa0JBQWtCLEVBQ3hDLEdBQVksU0FBVSxrQkFBa0IsRUFDeEMsR0FBWSxTQUFVLGtCQUFrQixFQUN4QyxHQUFZLFdBQVksYUFBYSxFQUNyQyxHQUFZLFVBQVcsTUFBTSxFQUM3QixHQUFZLFVBQVcsU0FBUyxFQUNoQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsTUFBTSxFQUM1QixHQUFZLFVBQVcsYUFBYSxFQUNwQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFNBQVUsYUFBYSxFQUNuQyxHQUFZLFVBQVcsa0JBQWtCLEVBQ3pDLEdBQVksVUFBVyxrQkFBa0IsRUFDekMsR0FBWSxVQUFXLGtCQUFrQixFQUN6QyxHQUFZLE9BQVEsYUFBYSxFQUNqQyxHQUFZLFlBQWEsYUFBYSxFQUN0QyxHQUFZLE9BQVEsYUFBYSxFQUNqQyxHQUFZLFlBQWEsYUFBYSxFQUN0QyxHQUFZLFdBQVksTUFBTSxFQUM5QixHQUFZLFNBQVUsY0FBYyxFQUNwQyxHQUFZLFNBQVUsY0FBYyxFQUNwQyxHQUFZLFNBQVUsY0FBYyxFQUNwQyxHQUFZLFNBQVUsTUFBTSxFQUM1QixHQUFZLFVBQVcsYUFBYSxFQUNwQyxHQUFZLFVBQVcsYUFBYSxFQUNwQyxHQUFZLFFBQVMsYUFBYSxFQUNsQyxHQUFZLFNBQVUsUUFBUSxFQUM5QixHQUFZLFNBQVUsS0FBSyxFQUMzQixHQUFZLFdBQVksYUFBYSxFQUNyQyxHQUFZLFFBQVMsVUFBVSxFQUMvQixHQUFZLFNBQVUsWUFBWSxFQUNsQyxHQUFZLFNBQVUsWUFBWSxFQUNsQyxHQUFZLFFBQVMsYUFBYSxFQUNsQyxHQUFZLGFBQWMsWUFBWSxFQUV0QyxHQUFZLFdBQVksTUFBTSxFQUM5QixHQUFZLFNBQVUsYUFBYSxFQUluQyxHQUFZLFdBQVksbUNBQW1DLEVBQzNELEdBQVksV0FBWSxtQ0FBbUMsRUFDM0QsR0FBWSxTQUFVLCtDQUErQyxFQUlyRSxHQUFZLFFBQVMsNEJBQTRCLEVBQ2pELEdBQVksUUFBUyw0QkFBNEIsRUFDakQsR0FBWSxXQUFZLG1DQUFtQyxFQUMzRCxHQUFZLFFBQVMsMEJBQTBCLEVBQy9DLEdBQVksUUFBUywwQkFBMEIsRUF1RC9DLEdBQVksWUFBYSxHQUFhLEVBQUssQ0FBQyxFQUM1QyxHQUFZLFlBQWEsR0FBYSxFQUFJLENBQUMsRUFDM0MsR0FBWSxXQUFZLHdGQUE2RixFQUNySCxHQUFZLFFBQVMsb0ZBQXlGLEVBQzlHLEdBQVksUUFBUyxvQ0FBb0MsRUFJekQsR0FBWSxVQUFXLFlBQVksRUFFbkMsR0FBWSxTQUFVLDJCQUEyQixFQUNqRCxHQUFZLFdBQVksMkJBQTJCLEVBQ25ELEdBQVksU0FBVSwyQkFBMkIsRUFDakQsR0FBWSxRQUFTLDJCQUEyQixFQUNoRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksU0FBVSx1QkFBdUIsRUFDN0MsR0FBWSxXQUFZLDJCQUEyQixFQUNuRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksV0FBWSwyQkFBMkIsRUFDbkQsR0FBWSxXQUFZLDJCQUEyQixFQUNuRCxHQUFZLFdBQVksMkJBQTJCLEVBQ25ELEdBQVksV0FBWSwyQkFBMkIsRUFDbkQsR0FBWSxXQUFZLDJCQUEyQixFQUNuRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxTQUFVLDJCQUEyQixFQUNqRCxHQUFZLFNBQVUsMkJBQTJCLEVBQ2pELEdBQVksU0FBVSwyQkFBMkIsRUFDakQsR0FBWSxTQUFVLDJCQUEyQixFQUNqRCxHQUFZLFNBQVUsMkJBQTJCLEVBQ2pELEdBQVksWUFBYSwyQkFBMkIsRUFDcEQsR0FBWSxZQUFhLDJCQUEyQixFQUNwRCxHQUFZLFlBQWEsMkJBQTJCLEVBQ3BELEdBQVksWUFBYSwyQkFBMkIsRUFDcEQsR0FBWSxZQUFhLDJCQUEyQixFQUNwRCxHQUFZLFlBQWEsMkJBQTJCLEVBQ3BELEdBQVksWUFBYSwyQkFBMkIsRUFDcEQsR0FBWSxZQUFhLDJCQUEyQixFQUNwRCxHQUFZLFlBQWEsMkJBQTJCLEVBQ3BELEdBQVksWUFBYSwyQkFBMkIsRUFDcEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxVQUFXLDJCQUEyQixFQUNsRCxHQUFZLFVBQVcsMkJBQTJCLEVBQ2xELEdBQVksVUFBVywyQkFBMkIsRUFDbEQsR0FBWSxXQUFZLDJCQUEyQixFQUNuRCxHQUFZLFlBQWEsMkJBQTJCLEVBUWhELEdBQW1CLENBQ3JCLElBQUssR0FFTCxFQUFLLEdBRUwsV0FBWSxHQUVaLGFBQWMsRUFFaEIsRUFtZ0JJLEdBQWtCLDJDQUNsQixHQUFlLE9BQU8sT0FBTyxDQUMvQixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osT0FBSSxJQUNKLE9BQUksSUFDSixPQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFNBQVUsUUFDWixDQUFDLEVBSUcsR0FBaUIsQ0FDbkIsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFNBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxNQUNSLEtBQVEsU0FDVixFQUNBLFNBQUksQ0FDRixLQUFRLE9BQ1IsS0FBUSxRQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFNBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxNQUNSLEtBQVEsT0FDVixFQUNBLFNBQUksQ0FDRixLQUFRLE1BQ1IsS0FBUSxTQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFNBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxNQUNSLEtBQVEsT0FDVixFQUNBLFNBQUksQ0FDRixLQUFRLE1BQ1IsS0FBUSxPQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFlBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxLQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsS0FDVixDQUNGLEVBQ0ksR0FBaUIsQ0FDbkIsT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLHFCQUNKLFNBQUkscUJBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUkscUJBQ0osU0FBSSxxQkFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxjQUNOLEVBZ2xDQSxHQUFPLGdCQUFrQixDQUFDLElBQUssYUFBYyxRQUFTLFVBQVcsR0FBRyxFQXNEcEUsVUFBVyxXQUFhLGFBQ3RCLEdBQUksU0FBUyxhQUFlLGFBQzFCLE9BQU8sVUFBWSxhQUFlLFFBQVEsS0FBSyw0RkFBaUcsRUFFaEosWUFBa0IsQ0FBTSxFQUFHLENBQ3pCLE1BQU0sSUFBSSxHQUFXLG9DQUFvQyxHQXdFM0QsSUFBUSxDQUlWLFFBQVMsVUFNVCxVQU1BLG1CQUtBLGNBS0EsbUJBVUEsUUFBUyxJQVVULGtCQUFtQixHQVVuQixtQkFBb0IsSUFNcEIsaUJBQWtCLElBS2xCLGVBQWdCLEVBT2hCLGlCQUFrQixHQUtsQixjQUFlLEdBU2YsVUFBVyxDQUNULFFBQ0EsVUFDQSxjQUNBLFdBQ0EsWUFDQSxXQUNGLENBQ0YsSUN6aWZBLFNBQVMsRUFBbUIsRUFBRyxDQUU3QixXQUFVLFFBQVEsMkJBQTRCLENBQUMsSUFBUyxDQUN0RCxHQUFJLEVBQUssVUFBWSxLQUFPLEVBQUssYUFBYSxRQUFRLEVBQ3BELEVBQUssYUFIbUIsd0JBR2UsRUFBSyxhQUFhLFFBQVEsR0FBSyxFQUFFLEVBRTNFLEVBQ0QsV0FBVSxRQUFRLDBCQUEyQixDQUFDLElBQVMsQ0FDckQsR0FBSSxFQUFLLFVBQVksS0FBTyxFQUFLLGFBUFAsdUJBT3VDLEdBRy9ELEdBRkEsRUFBSyxhQUFhLFNBQVUsRUFBSyxhQVJULHVCQVF5QyxHQUFLLEVBQUUsRUFDeEUsRUFBSyxnQkFUbUIsdUJBU2dCLEVBQ3BDLEVBQUssYUFBYSxRQUFRLElBQU0sU0FDbEMsRUFBSyxhQUFhLE1BQU8sVUFBVSxHQUd4QyxNQXIvRUgsR0FvOUVBLEdBNTlFSSxHQUNBLEVBQVMsQ0FBQyxFQUFRLElBQVUsR0FBVSxFQUFRLE9BQVEsQ0FBRSxRQUFPLGFBQWMsRUFBSyxDQUFDLEVBQ25GLEdBQVcsQ0FBQyxFQUFRLElBQVEsQ0FDOUIsUUFBUyxLQUFRLEVBQ2YsR0FBVSxFQUFRLEVBQU0sQ0FBRSxJQUFLLEVBQUksR0FBTyxXQUFZLEVBQUssQ0FBQyxHQUs1RCxHQVFBLEVBY0EsR0F3Q0EsR0FNQSxHQUNBLEdBQ0EsSUFHQSxHQVdBLEdBQ0EsR0FZQSxHQUtBLEdBT0EsR0FLQSxHQWtDQSxHQU1BLEdBQWlDLFVBQ2pDLEdBQWtDLFVBSWxDLEdBR0EsSUE2UUEsSUFRQSxJQTZSQSxJQVFBLElBbVRBLEdBUUEsSUErUkEsSUFRQSxJQXFSQSxJQU9BLEdBbUJBLEdBb2RBLEdBd05BLEdBUUEsSUFDQSxHQUdBLEdBdUNBLElBb0JBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQXNCQSxHQVNBLEdBR0EsR0FLQSxHQUdBLEdBS0EsR0FHQSxHQXdCQSxHQVdBLEdBSUEsSUFHQSxHQUNBLElBT0EsR0FXQSxHQUNBLElBT0EsSUEyQkEsR0FLQSxHQWNBLEdBYUEsSUFNQSxJQUdBLElBR0EsSUFHQSxHQUdBLElBU0EsR0FDQSxJQU1BLElBTUEsR0FrQkEsR0FHQSxJQUtBLElBd0JBLEdBQ0EsR0FDQSxHQUNBLEdBY0EsR0FvQkEsR0FlQSxJQUtBLElBV0EsR0FJQSxHQWlCQSxHQUNBLElBZ0VBLElBS0EsR0FHQSxHQVVBLEdBQVcsR0FDWCxHQUFlLEdBQ2YsR0FBaUIsR0FDakIsR0FDQSxHQUtBLEdBR0EsR0FDQSxHQUdBLEdBQ0EsR0FHQSxHQUdBLEdBQ0EsSUFDQSxHQUNBLEdBQ0EsR0FDQSxJQUNBLEdBQ0EsSUFHQSxHQUNBLEdBb0JBLEdBTUEsa0JBMTFGSixjQXdKQSxLQU9BLEtBd1JBLEtBcVNBLEtBMlRBLEtBdVNBLEtBc3BDQSxjQTU5RUksR0FBWSxPQUFPLGVBU25CLEdBQVMsQ0FDWCxNQUFPLEVBQ1AsTUFBTyxFQUNQLEtBQU0sRUFDTixLQUFNLEVBQ04sTUFBTyxFQUNQLE1BQU8sQ0FDVCxFQUNJLEVBQU0sQ0FDUixNQUF1QixFQUFPLElBQUksSUFBVSxHQUN6QyxPQUFPLEVBQ1YsTUFBdUIsRUFBTyxJQUFJLElBQVUsR0FDekMsT0FBTyxFQUNWLEtBQXNCLEVBQU8sSUFBSSxJQUFVLEdBQ3hDLE1BQU0sRUFDVCxLQUFzQixFQUFPLElBQUksSUFBVSxHQUN4QyxNQUFNLEVBQ1QsTUFBdUIsRUFBTyxJQUFJLElBQVUsR0FDekMsT0FBTyxFQUNWLE1BQXVCLEVBQU8sSUFBSSxJQUFVLEdBQ3pDLE9BQU8sQ0FDWixFQUNJLEdBQThCLFVBQWUsQ0FBQyxFQUFRLFFBQVMsQ0FDakUsSUFBSSxFQUFlLEdBQU8sTUFDMUIsVUFBVyxJQUFVLFVBQ25CLEdBQUksRUFBTSxZQUFZLElBQUssR0FDekIsRUFBZSxHQUFPLGtCQUVSLElBQVUsU0FDMUIsRUFBZSxFQWNqQixHQVpBLEVBQUksTUFBUSxJQUFNLEdBRWxCLEVBQUksTUFBUSxJQUFNLEdBRWxCLEVBQUksS0FBTyxJQUFNLEdBRWpCLEVBQUksS0FBTyxJQUFNLEdBRWpCLEVBQUksTUFBUSxJQUFNLEdBRWxCLEVBQUksTUFBUSxJQUFNLEdBRWQsR0FBZ0IsR0FBTyxNQUN6QixFQUFJLE1BQVEsUUFBUSxNQUFRLFFBQVEsTUFBTSxLQUFLLFFBQVMsR0FBTyxPQUFPLEVBQUcsZUFBZSxFQUFJLFFBQVEsSUFBSSxLQUFLLFFBQVMsV0FBWSxHQUFPLE9BQU8sQ0FBQyxFQUVuSixHQUFJLEdBQWdCLEdBQU8sTUFDekIsRUFBSSxNQUFRLFFBQVEsTUFBUSxRQUFRLE1BQU0sS0FBSyxRQUFTLEdBQU8sT0FBTyxFQUFHLGVBQWUsRUFBSSxRQUFRLElBQUksS0FBSyxRQUFTLFdBQVksR0FBTyxPQUFPLENBQUMsRUFFbkosR0FBSSxHQUFnQixHQUFPLEtBQ3pCLEVBQUksS0FBTyxRQUFRLEtBQU8sUUFBUSxLQUFLLEtBQUssUUFBUyxHQUFPLE1BQU0sRUFBRyxlQUFlLEVBQUksUUFBUSxJQUFJLEtBQUssUUFBUyxXQUFZLEdBQU8sTUFBTSxDQUFDLEVBRTlJLEdBQUksR0FBZ0IsR0FBTyxLQUN6QixFQUFJLEtBQU8sUUFBUSxLQUFPLFFBQVEsS0FBSyxLQUFLLFFBQVMsR0FBTyxNQUFNLEVBQUcsa0JBQWtCLEVBQUksUUFBUSxJQUFJLEtBQUssUUFBUyxXQUFZLEdBQU8sTUFBTSxDQUFDLEVBRWpKLEdBQUksR0FBZ0IsR0FBTyxNQUN6QixFQUFJLE1BQVEsUUFBUSxNQUFRLFFBQVEsTUFBTSxLQUFLLFFBQVMsR0FBTyxPQUFPLEVBQUcsbUJBQW1CLEVBQUksUUFBUSxJQUFJLEtBQUssUUFBUyxXQUFZLEdBQU8sT0FBTyxDQUFDLEVBRXZKLEdBQUksR0FBZ0IsR0FBTyxNQUN6QixFQUFJLE1BQVEsUUFBUSxNQUFRLFFBQVEsTUFBTSxLQUFLLFFBQVMsR0FBTyxPQUFPLEVBQUcsbUJBQW1CLEVBQUksUUFBUSxJQUFJLEtBQUssUUFBUyxXQUFZLEdBQU8sT0FBTyxDQUFDLEdBRXRKLGFBQWEsRUFDWixHQUF5QixFQUFPLENBQUMsSUFBVSxDQUU3QyxNQUFPLEtBRE0sV0FBTSxFQUFFLE9BQU8sUUFBUSxPQUNkLFFBQ3JCLFFBQVEsRUFHUCxHQUFtQiwyQ0FDbkIsR0FBaUIsa0ZBQ2pCLElBQWtCLGNBR2xCLEdBQXNCLGNBQWMsS0FBTSxPQUNyQyxDQUNMLEVBQU8sS0FBTSxxQkFBcUIsRUFFcEMsV0FBVyxDQUFDLEVBQVMsQ0FDbkIsTUFBTSxDQUFPLEVBQ2IsS0FBSyxLQUFPLHNCQUVoQixFQUdJLEdBQVksQ0FBQyxFQUNiLEdBQTZCLFVBQWUsQ0FBQyxFQUFNLEVBQVMsQ0FDOUQsRUFBTyxFQUFLLFFBQVEsR0FBa0IsRUFBRSxFQUFFLFFBQVEsR0FBZ0IsRUFBRSxFQUFFLFFBQVEsSUFBaUIsSUFBSSxFQUNuRyxRQUFZLEdBQU8sZUFBZSxPQUFPLFFBQVEsRUFBUyxFQUV4RCxHQURnQixFQUFTLEVBQU0sQ0FBTyxFQUVwQyxPQUFPLEVBR1gsTUFBTSxJQUFJLEdBQ1IsbUVBQW1FLEdBQ3JFLEdBQ0MsWUFBWSxFQUNYLEdBQTZDLEVBQU8sSUFBSSxJQUFjLENBQ3hFLFFBQWEsS0FBSSxXQUFVLFlBQVksRUFDckMsR0FBWSxFQUFJLEVBQVUsQ0FBTSxHQUVqQyw0QkFBNEIsRUFDM0IsR0FBOEIsRUFBTyxDQUFDLEVBQUssRUFBVSxJQUFXLENBQ2xFLEdBQUksR0FBVSxHQUNaLEVBQUksS0FBSyxxQkFBcUIsZ0NBQWtDLEVBRWxFLEdBQVUsR0FBTyxDQUFFLFdBQVUsUUFBTyxFQUNwQyxFQUFJLE1BQU0scUJBQXFCLFVBQVksRUFBUyxlQUFpQixJQUFJLEdBQ3hFLGFBQWEsRUFDWixHQUFtQyxFQUFPLENBQUMsSUFBUSxDQUNyRCxPQUFPLEdBQVUsR0FBSyxRQUNyQixrQkFBa0IsRUFHakIsR0FBa0MsRUFBTyxDQUFDLEVBQUssR0FBTyxRQUFRLEVBQUcsVUFBVSxJQUFVLENBQUMsSUFBTSxDQUM5RixNQUFNLEVBQVUsQ0FBRSxRQUFPLFNBQVEsRUFDakMsR0FBSSxNQUFNLFFBQVEsQ0FBRyxJQUFNLE1BQU0sUUFBUSxDQUFHLEVBRTFDLE9BREEsRUFBSSxRQUFRLENBQUMsSUFBTSxHQUFnQixFQUFLLEVBQUcsQ0FBTyxDQUFDLEVBQzVDLFVBQ0UsTUFBTSxRQUFRLENBQUcsR0FBSyxNQUFNLFFBQVEsQ0FBRyxFQU1oRCxPQUxBLEVBQUksUUFBUSxDQUFDLElBQU0sQ0FDakIsSUFBSyxFQUFJLFNBQVMsQ0FBQyxFQUNqQixFQUFJLEtBQUssQ0FBQyxFQUViLEVBQ00sRUFFVCxHQUFJLElBQWEsUUFBSyxHQUFTLEVBQzdCLEdBQUksSUFBYSxRQUFLLElBQVEsYUFBZSxJQUFRLGlCQUFtQixJQUFRLFNBQzlFLE9BQU8sT0FBTyxPQUFPLEVBQUssQ0FBRyxNQUU3QixRQUFPLEVBR1gsR0FBSSxJQUFhLGVBQVksSUFBUSxpQkFBbUIsSUFBUSxTQUM5RCxPQUFPLEtBQUssQ0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFRLENBQ2hDLFVBQVcsRUFBSSxLQUFTLFdBQWEsRUFBSSxLQUFjLGVBQVksRUFBSSxLQUFTLFVBQVcsQ0FDekYsR0FBSSxFQUFJLEtBQWMsT0FDcEIsRUFBSSxHQUFPLE1BQU0sUUFBUSxFQUFJLEVBQUksRUFBSSxDQUFDLEVBQUksQ0FBQyxFQUU3QyxFQUFJLEdBQU8sR0FBZ0IsRUFBSSxHQUFNLEVBQUksR0FBTSxDQUFFLE1BQU8sRUFBUSxFQUFHLFNBQVEsQ0FBQyxVQUNuRSxVQUFrQixFQUFJLEtBQVMsaUJBQW1CLEVBQUksS0FBUyxTQUN4RSxFQUFJLEdBQU8sRUFBSSxHQUVsQixFQUVILE9BQU8sR0FDTixpQkFBaUIsRUFDaEIsR0FBMEIsR0FXMUIsR0FBMkIsRUFBTyxDQUFDLEVBQUssSUFBYSxFQUFXLEdBQU8sRUFBSyxDQUFFLEVBQUcsSUFBSyxFQUFHLEVBQUcsQ0FBQyxFQUFJLEdBQU8sRUFBSyxDQUFFLEVBQUcsSUFBSyxFQUFHLEdBQUksQ0FBQyxFQUFHLFVBQVUsRUFHNUksSUFBUSxLQUFNLE9BQ1QsQ0FDTCxFQUFPLEtBQU0sT0FBTyxFQUV0QixXQUFXLEVBQUcsQ0FDWixLQUFLLFdBQWEsVUFDbEIsS0FBSyxhQUFlLFVBQ3BCLEtBQUssYUFBZSxVQUNwQixLQUFLLGNBQWdCLE9BQ3JCLEtBQUssa0JBQW9CLEdBQ3pCLEtBQUssV0FBYSw2Q0FDbEIsS0FBSyxTQUFXLE9BRWxCLFlBQVksRUFBRyxDQXVGYixHQXRGQSxLQUFLLGlCQUFtQixLQUFLLG1CQUFxQixLQUFLLFNBQVcsT0FBUyxRQUMzRSxLQUFLLGVBQWlCLEtBQUssZ0JBQWtCLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxJQUFLLENBQUMsRUFDbkYsS0FBSyxjQUFnQixLQUFLLGVBQWlCLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxJQUFLLEVBQUcsQ0FBRSxDQUFDLEVBQ3RGLEtBQUssbUJBQXFCLEtBQUssb0JBQXNCLEdBQVMsS0FBSyxhQUFjLEtBQUssUUFBUSxFQUM5RixLQUFLLHFCQUF1QixLQUFLLHNCQUF3QixHQUFTLEtBQUssZUFBZ0IsS0FBSyxRQUFRLEVBQ3BHLEtBQUssb0JBQXNCLEtBQUsscUJBQXVCLEdBQVMsS0FBSyxjQUFlLEtBQUssUUFBUSxFQUNqRyxLQUFLLGdCQUFrQixLQUFLLGlCQUFtQixHQUFTLEtBQUssYUFBYyxLQUFLLFFBQVEsRUFDeEYsS0FBSyxhQUFlLEtBQUssY0FBZ0IsVUFDekMsS0FBSyxjQUFnQixLQUFLLGVBQWlCLE9BQzNDLEtBQUssbUJBQXFCLEtBQUssb0JBQXNCLEdBQU8sS0FBSyxjQUFjLEVBQy9FLEtBQUssa0JBQW9CLEtBQUssbUJBQXFCLEdBQU8sS0FBSyxhQUFhLEVBQzVFLEtBQUssVUFBWSxLQUFLLFdBQWEsR0FBTyxLQUFLLFVBQVUsRUFDekQsS0FBSyxlQUFpQixLQUFLLGdCQUFrQixHQUFPLEtBQUssVUFBVSxFQUNuRSxLQUFLLFVBQVksS0FBSyxXQUFhLEtBQUssaUJBQ3hDLEtBQUssUUFBVSxLQUFLLFNBQVcsS0FBSyxvQkFDcEMsS0FBSyxRQUFVLEtBQUssU0FBVyxLQUFLLGFBQ3BDLEtBQUssUUFBVSxLQUFLLFNBQVcsS0FBSyxhQUNwQyxLQUFLLFdBQWEsS0FBSyxZQUFjLEtBQUssbUJBQzFDLEtBQUssV0FBYSxLQUFLLFlBQWMsS0FBSyxjQUMxQyxLQUFLLGNBQWdCLEtBQUssZUFBaUIsS0FBSyxvQkFDaEQsS0FBSyxpQkFBbUIsS0FBSyxrQkFBb0IsS0FBSyxVQUN0RCxLQUFLLFdBQWEsS0FBSyxZQUFjLEtBQUssa0JBQzFDLEtBQUssb0JBQXNCLEtBQUssc0JBQXdCLEtBQUssU0FBVyxHQUFPLEtBQUssZUFBZ0IsRUFBRSxFQUFJLEtBQUssZ0JBQy9HLEtBQUssY0FBZ0IsS0FBSyxlQUFpQixLQUFLLGlCQUNoRCxLQUFLLFlBQWMsS0FBSyxhQUFlLEtBQUssbUJBQzVDLEtBQUssU0FBVyxLQUFLLFVBQVksS0FBSyxRQUN0QyxLQUFLLGVBQWlCLEtBQUssZ0JBQWtCLEtBQUssaUJBQ2xELEtBQUssZUFBaUIsS0FBSyxnQkFBa0IsS0FBSyxZQUNsRCxLQUFLLGlCQUFtQixLQUFLLGtCQUFvQixLQUFLLFNBQ3RELEtBQUssWUFBYyxLQUFLLGFBQWUsS0FBSyxVQUM1QyxLQUFLLGdCQUFrQixLQUFLLGlCQUFtQixLQUFLLFVBQ3BELEtBQUssb0JBQXNCLEtBQUsscUJBQXVCLEtBQUssWUFDNUQsS0FBSyxlQUFpQixLQUFLLGdCQUFrQixLQUFLLGVBQ2xELEtBQUssY0FBZ0IsS0FBSyxlQUFpQixLQUFLLGVBQ2hELEtBQUssc0JBQXdCLEtBQUssdUJBQXlCLEdBQU8sS0FBSyxlQUFnQixFQUFFLEVBQ3pGLEtBQUssbUJBQXFCLEtBQUssb0JBQXNCLEtBQUssZUFDMUQsS0FBSyxvQkFBc0IsS0FBSyxxQkFBdUIsR0FBTyxLQUFLLFNBQVMsRUFDNUUsS0FBSyxnQkFBa0IsS0FBSyxpQkFBbUIsS0FBSyxjQUNwRCxLQUFLLG1CQUFxQixLQUFLLG9CQUFzQixRQUNyRCxLQUFLLGdCQUFrQixLQUFLLGlCQUFtQixLQUFLLGVBQ3BELEtBQUssaUJBQW1CLEtBQUssa0JBQW9CLEtBQUssYUFDdEQsS0FBSyxnQkFBa0IsS0FBSyxpQkFBbUIsVUFDL0MsS0FBSyxnQkFBa0IsS0FBSyxpQkFBbUIsS0FBSyxtQkFDcEQsS0FBSyxhQUFlLEtBQUssY0FBZ0IsS0FBSyxhQUM5QyxLQUFLLHNCQUF3QixLQUFLLHVCQUF5QixLQUFLLGFBQ2hFLEtBQUssbUJBQXFCLEtBQUssb0JBQXNCLEdBQVEsS0FBSyxhQUFjLEVBQUUsRUFDbEYsS0FBSyxVQUFZLEtBQUssV0FBYSxZQUNuQyxLQUFLLGlCQUFtQixLQUFLLGtCQUFvQixZQUNqRCxLQUFLLG9CQUFzQixLQUFLLHFCQUF1QixPQUN2RCxLQUFLLGdCQUFrQixLQUFLLGlCQUFtQixVQUMvQyxLQUFLLGFBQWUsS0FBSyxjQUFnQixNQUN6QyxLQUFLLGVBQWlCLEtBQUssZ0JBQWtCLE1BQzdDLEtBQUssY0FBZ0IsS0FBSyxlQUFpQixLQUFLLFVBQ2hELEtBQUsscUJBQXVCLEtBQUssc0JBQXdCLEtBQUssVUFDOUQsS0FBSyxtQkFBcUIsS0FBSyxvQkFBc0IsS0FBSyxVQUMxRCxLQUFLLGNBQWdCLEtBQUssZUFBaUIsS0FBSyxpQkFDaEQsS0FBSyxrQkFBb0IsS0FBSyxtQkFBcUIsS0FBSyxVQUN4RCxLQUFLLHVCQUF5QixLQUFLLHdCQUEwQixVQUM3RCxLQUFLLGFBQWUsS0FBSyxjQUFnQixLQUFLLG1CQUM5QyxLQUFLLFVBQVksS0FBSyxXQUFhLEtBQUssUUFDeEMsS0FBSyxnQkFBa0IsS0FBSyxpQkFBbUIsS0FBSyxVQUNwRCxLQUFLLHFCQUF1QixLQUFLLHNCQUF3QixLQUFLLFVBQzlELEtBQUssZ0JBQWtCLEtBQUssaUJBQW1CLEtBQUssVUFBWSxLQUFLLGlCQUNyRSxLQUFLLFNBQVcsS0FBSyxVQUFZLEtBQUssUUFDdEMsS0FBSyxxQkFBdUIsS0FBSyxzQkFBd0IsS0FBSyxTQUM5RCxLQUFLLG9CQUFzQixLQUFLLHFCQUF1QixLQUFLLFlBQWMsS0FBSyxjQUMvRSxLQUFLLGNBQWdCLEtBQUssZUFBaUIsS0FBSyxjQUNoRCxLQUFLLHlCQUEyQixLQUFLLDBCQUE0QixLQUFLLFFBQ3RFLEtBQUssZ0JBQWtCLEtBQUssaUJBQW1CLEtBQUssV0FDcEQsS0FBSyxtQkFBcUIsS0FBSyxXQUMvQixLQUFLLGNBQWdCLEtBQUssZUFBaUIsS0FBSyxjQUNoRCxLQUFLLGVBQWlCLEtBQUssZ0JBQWtCLEtBQUssa0JBQ2xELEtBQUssZ0JBQWtCLEtBQUssaUJBQW1CLEtBQUssVUFDcEQsS0FBSyxrQkFBb0IsS0FBSyxVQUM5QixLQUFLLFFBQVUsS0FBSyxTQUFXLEtBQUssYUFDcEMsS0FBSyxRQUFVLEtBQUssU0FBVyxLQUFLLGVBQ3BDLEtBQUssUUFBVSxLQUFLLFNBQVcsS0FBSyxjQUNwQyxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxFQUFHLENBQUMsRUFDbkUsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsRUFBRyxDQUFDLEVBQ25FLEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEVBQUcsQ0FBQyxFQUNuRSxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxHQUFJLENBQUMsRUFDcEUsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQ3BFLEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLElBQUssRUFBRyxHQUFJLENBQUMsRUFDNUUsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQ3BFLEtBQUssU0FBVyxLQUFLLFVBQVksR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUN0RSxLQUFLLFNBQVcsS0FBSyxVQUFZLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxHQUFJLENBQUMsRUFDbEUsS0FBSyxTQUNQLFFBQVMsRUFBSSxFQUFHLEVBQUksS0FBSyxrQkFBbUIsSUFDMUMsS0FBSyxTQUFXLEdBQUssR0FBTyxLQUFLLFNBQVcsR0FBSSxFQUFFLE1BR3BELFNBQVMsRUFBSSxFQUFHLEVBQUksS0FBSyxrQkFBbUIsSUFDMUMsS0FBSyxTQUFXLEdBQUssR0FBTyxLQUFLLFNBQVcsR0FBSSxFQUFFLEVBR3RELFFBQVMsRUFBSSxFQUFHLEVBQUksS0FBSyxrQkFBbUIsSUFDMUMsS0FBSyxZQUFjLEdBQUssS0FBSyxZQUFjLElBQU0sR0FBTyxLQUFLLFNBQVcsRUFBRSxFQUU1RSxRQUFTLEVBQUksRUFBRyxFQUFJLEtBQUssa0JBQW1CLElBQzFDLEdBQUksS0FBSyxTQUNQLEtBQUssYUFBZSxHQUFLLEtBQUssYUFBZSxJQUFNLEdBQVEsS0FBSyxTQUFXLEdBQUksRUFBRSxNQUVqRixNQUFLLGFBQWUsR0FBSyxLQUFLLGFBQWUsSUFBTSxHQUFPLEtBQUssU0FBVyxHQUFJLEVBQUUsRUFHcEYsS0FBSyxnQkFBa0IsS0FBSyxpQkFBbUIsS0FBSyxlQUNwRCxRQUFTLEVBQUksRUFBRyxFQUFJLEtBQUssa0JBQW1CLElBQzFDLEtBQUssY0FBZ0IsR0FBSyxLQUFLLGNBQWdCLElBQU0sS0FBSyxnQkFFNUQsTUFBTSxFQUFhLEtBQUssU0FBVyxHQUFLLEdBQ3hDLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBRyxJQUNyQixLQUFLLFVBQVksR0FBSyxLQUFLLFVBQVksSUFBTSxHQUFRLEtBQUssUUFBUyxDQUFFLEVBQUcsSUFBSyxFQUFHLElBQUssRUFBRyxHQUFjLEVBQUksRUFBSSxFQUFHLENBQUMsRUFDbEgsS0FBSyxjQUFnQixHQUFLLEtBQUssY0FBZ0IsSUFBTSxHQUFRLEtBQUssUUFBUyxDQUFFLEVBQUcsSUFBSyxFQUFHLElBQUssRUFBRyxHQUFjLEVBQUksRUFBSSxFQUFHLENBQUMsRUFrRjVILEdBaEZBLEtBQUssVUFBWSxLQUFLLFdBQWEsS0FBSyxVQUN4QyxLQUFLLFVBQVksS0FBSyxXQUFhLEtBQUssYUFDeEMsS0FBSyxVQUFZLEtBQUssV0FBYSxLQUFLLGVBQ3hDLEtBQUssVUFBWSxLQUFLLFdBQWEsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEVBQUcsQ0FBQyxFQUN2RSxLQUFLLFVBQVksS0FBSyxXQUFhLEdBQVEsS0FBSyxlQUFnQixDQUFFLEVBQUcsRUFBRyxDQUFDLEVBQ3pFLEtBQUssVUFBWSxLQUFLLFdBQWEsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUN4RSxLQUFLLFVBQVksS0FBSyxXQUFhLEdBQVEsS0FBSyxlQUFnQixDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQzFFLEtBQUssVUFBWSxLQUFLLFdBQWEsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUN4RSxLQUFLLFVBQVksS0FBSyxXQUFhLEdBQVEsS0FBSyxlQUFnQixDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQzFFLEtBQUssS0FBTyxLQUFLLE1BQVEsS0FBSyxhQUM5QixLQUFLLEtBQU8sS0FBSyxNQUFRLEtBQUssZUFDOUIsS0FBSyxLQUFPLEtBQUssTUFBUSxLQUFLLGNBQzlCLEtBQUssS0FBTyxLQUFLLE1BQVEsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUM5RCxLQUFLLEtBQU8sS0FBSyxNQUFRLEdBQVEsS0FBSyxlQUFnQixDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQ2hFLEtBQUssS0FBTyxLQUFLLE1BQVEsR0FBUSxLQUFLLGNBQWUsQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUMvRCxLQUFLLEtBQU8sS0FBSyxNQUFRLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxDQUFDLEVBQ3JFLEtBQUssS0FBTyxLQUFLLE1BQVEsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLElBQUssRUFBRyxHQUFJLENBQUMsRUFDdEUsS0FBSyxLQUFPLEtBQUssTUFBUSxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsSUFBSyxFQUFHLENBQUUsQ0FBQyxFQUNwRSxLQUFLLE1BQVEsS0FBSyxPQUFTLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxDQUFDLEVBQ3ZFLEtBQUssTUFBUSxLQUFLLE9BQVMsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLElBQUssRUFBRyxHQUFJLENBQUMsRUFDeEUsS0FBSyxNQUFRLEtBQUssT0FBUyxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsSUFBSyxFQUFHLEdBQUksQ0FBQyxFQUN4RSxLQUFLLGlCQUFtQixLQUFLLGtCQUFvQixPQUNqRCxLQUFLLGtCQUFvQixLQUFLLG1CQUFxQixLQUFLLGtCQUN4RCxLQUFLLG1CQUFxQixLQUFLLG9CQUFzQixPQUNyRCxLQUFLLG9CQUFzQixLQUFLLHFCQUF1QixLQUFLLFVBQzVELEtBQUssa0JBQW9CLEtBQUssbUJBQXFCLE9BQ25ELEtBQUssbUJBQXFCLEtBQUssb0JBQXNCLEtBQUssa0JBQzFELEtBQUssZUFBaUIsS0FBSyxnQkFBa0IsUUFDN0MsS0FBSyxlQUFpQixLQUFLLGdCQUFrQixNQUM3QyxLQUFLLG9CQUFzQixLQUFLLHFCQUF1QixNQUN2RCxLQUFLLG9CQUFzQixLQUFLLHFCQUF1QixRQUN2RCxLQUFLLFdBQWEsS0FBSyxZQUFjLE1BQ3JDLEtBQUssY0FBZ0IsS0FBSyxlQUFpQixPQUMzQyxLQUFLLG1CQUFxQixLQUFLLG9CQUFzQixPQUNyRCxLQUFLLGNBQWdCLEtBQUssZUFBaUIsSUFDM0MsS0FBSyxxQkFBdUIsS0FBSyxzQkFBd0IsT0FDekQsS0FBSyxxQkFBdUIsS0FBSyxzQkFBd0IsTUFDekQsS0FBSyxjQUFnQixLQUFLLGVBQWlCLEtBQUssYUFDaEQsS0FBSyxjQUFnQixLQUFLLGVBQWlCLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLENBQUUsQ0FBQyxFQUMxRixLQUFLLGNBQWdCLEtBQUssZUFBaUIsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxDQUFDLEVBQzdGLEtBQUssY0FBZ0IsS0FBSyxlQUFpQixHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLENBQUMsRUFDN0YsS0FBSyxrQkFBb0IsS0FBSyxtQkFBcUIsS0FBSyxpQkFDeEQsS0FBSyxrQkFBb0IsS0FBSyxtQkFBcUIsR0FBUSxLQUFLLGlCQUFrQixDQUFFLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLENBQUMsRUFDekcsS0FBSyxrQkFBb0IsS0FBSyxtQkFBcUIsR0FBUSxLQUFLLGlCQUFrQixDQUFFLEVBQUcsSUFBSyxFQUFHLElBQUssRUFBRyxHQUFJLENBQUMsRUFDNUcsS0FBSyxrQkFBb0IsS0FBSyxtQkFBcUIsR0FBUSxLQUFLLGlCQUFrQixDQUFFLEVBQUcsSUFBSyxFQUFHLElBQUssRUFBRyxHQUFJLENBQUMsRUFDNUcsS0FBSyxrQkFBb0IsS0FBSyxtQkFBcUIsR0FBTyxLQUFLLGFBQWEsRUFBSSxHQUFRLEtBQUssYUFBYSxFQUFJLEdBQU8sS0FBSyxhQUFhLEVBQ3ZJLEtBQUssc0JBQXdCLEtBQUssdUJBQXlCLEtBQUssaUJBQ2hFLEtBQUssc0JBQXdCLEtBQUssdUJBQXlCLEtBQUssaUJBQ2hFLEtBQUssc0JBQXdCLEtBQUssdUJBQXlCLEtBQUssaUJBQ2hFLEtBQUssaUNBQW1DLEtBQUssa0NBQW9DLEtBQUssbUJBQ3RGLEtBQUssaUNBQW1DLEtBQUssa0NBQW9DLEtBQUssbUJBQ3RGLEtBQUssa0JBQW9CLEtBQUssbUJBQXFCLEtBQUssaUJBQ3hELEtBQUssUUFBVSxDQUNiLGdCQUFpQixLQUFLLFNBQVMsaUJBQW1CLEtBQUssV0FDdkQsV0FBWSxLQUFLLFNBQVMsWUFBYyxLQUFLLGlCQUM3QyxnQkFBaUIsS0FBSyxTQUFTLGlCQUFtQixLQUFLLGlCQUN2RCxnQkFBaUIsS0FBSyxTQUFTLGlCQUFtQixLQUFLLGlCQUN2RCxlQUFnQixLQUFLLFNBQVMsZ0JBQWtCLEtBQUssaUJBQ3JELGVBQWdCLEtBQUssU0FBUyxnQkFBa0IsS0FBSyxpQkFDckQsZ0JBQWlCLEtBQUssU0FBUyxpQkFBbUIsS0FBSyxpQkFDdkQsZ0JBQWlCLEtBQUssU0FBUyxpQkFBbUIsS0FBSyxpQkFDdkQsZUFBZ0IsS0FBSyxTQUFTLGdCQUFrQixLQUFLLGlCQUNyRCxlQUFnQixLQUFLLFNBQVMsZ0JBQWtCLEtBQUssaUJBQ3JELGlCQUFrQixLQUFLLFNBQVMsa0JBQW9CLGlGQUN0RCxFQUNBLEtBQUssc0JBQXdCLEtBQUssdUJBQXlCLEtBQUssYUFDaEUsS0FBSyx1QkFBeUIsS0FBSyx3QkFBMEIsS0FBSyxtQkFDbEUsS0FBSyxzQkFBd0IsS0FBSyx1QkFBeUIsSUFDM0QsS0FBSyxxQkFBdUIsS0FBSyxzQkFBd0IsS0FBSyxpQkFDOUQsS0FBSyxjQUFnQixLQUFLLGVBQWlCLEtBQUssVUFDaEQsS0FBSyx3QkFBMEIsS0FBSywwQkFBNEIsS0FBSyxTQUFXLEdBQU8sS0FBSyxlQUFnQixFQUFFLEVBQUksS0FBSyxnQkFDdkgsS0FBSyxtQkFBcUIsS0FBSyxvQkFBc0IsS0FBSyxlQUMxRCxLQUFLLEtBQU8sS0FBSyxNQUFRLEtBQUssYUFDOUIsS0FBSyxLQUFPLEtBQUssTUFBUSxLQUFLLGVBQzlCLEtBQUssS0FBTyxLQUFLLE1BQVEsS0FBSyxjQUM5QixLQUFLLEtBQU8sS0FBSyxNQUFRLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxHQUFJLENBQUMsRUFDOUQsS0FBSyxLQUFPLEtBQUssTUFBUSxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQzlELEtBQUssS0FBTyxLQUFLLE1BQVEsR0FBUSxLQUFLLGFBQWMsQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUM5RCxLQUFLLEtBQU8sS0FBSyxNQUFRLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxFQUFHLENBQUMsRUFDN0QsS0FBSyxLQUFPLEtBQUssTUFBUSxHQUFRLEtBQUssYUFBYyxDQUFFLEVBQUcsR0FBSSxDQUFDLEVBQzFELEtBQUssU0FDUCxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxNQUVqQyxNQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUNoQyxLQUFLLEtBQU8sR0FBTyxLQUFLLEtBQU0sRUFBRSxFQUVsQyxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQU8sS0FBSyxJQUFJLEVBQy9DLEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBTyxLQUFLLElBQUksRUFDL0MsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFPLEtBQUssSUFBSSxFQUMvQyxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQU8sS0FBSyxJQUFJLEVBQy9DLEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBTyxLQUFLLElBQUksRUFDL0MsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFPLEtBQUssSUFBSSxFQUMvQyxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQU8s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QUUsRUFFbkQsRUFBUSxPQUFPLEVBQUcsR0FBSyxFQUFHLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBRyxFQUd6QyxFQUFNLEVBQUksRUFBUSxJQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsRUFBRyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsR0FBSSxDQUFFLE1BSTVGLEdBQVEsSUFBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBTSxFQUFHLElBQUssRUFBRyxHQUFHLEVBQUcsR0FBTSxFQUFHLElBQUssRUFBRyxHQUFHLEdBQUksQ0FBRSxFQUNoRixFQUFRLElBQUksRUFBRyxFQUFHLEVBQUksR0FBTSxFQUFHLEdBQUssRUFBRyxJQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUcsRUFBRyxHQUFNLEVBQUcsR0FBSyxFQUFHLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBRyxHQUFJLENBQUUsRUFDdkcsRUFBUSxJQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsRUFBRyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsR0FBSSxDQUFFLE1BSy9FLEdBQVEsT0FBTyxFQUFLLENBQUcsRUFBRyxFQUFRLElBQUksRUFBRyxFQUFHLEVBQUksRUFBSyxHQUFNLENBQUUsRUFJbEUsS0FBTSxFQUFLLE9BQWMsRUFBTSxJQUFVLEVBQVEsT0FBTyxFQUFLLENBQUcsVUFHdkQsRUFBTSxHQU9iLEdBTkEsRUFBSyxHQUFlLEVBQUssRUFBSyxFQUFLLEVBQUssR0FBSyxFQUFLLENBQUUsRUFDcEQsRUFBSyxHQUFlLEVBQUssRUFBSyxFQUFLLEVBQUssR0FBSyxFQUFLLENBQUUsRUFFcEQsRUFBUSxPQUFPLEVBQUcsR0FBSyxFQUFHLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBRyxFQUd6QyxFQUFNLEVBQUksRUFBUSxJQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsRUFBRyxH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LEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLFdBQXFCLEVBQUUsR0FBRyxJQUF0QixTQUF5QixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBVSxLQUFLLEVBQUUsR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxHQUFHLEVBQUUsT0FBTyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUyxLQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFRLE9BQUssRUFBRSxLQUFLLE1BQU0sRUFBRyxFQUFFLEVBQUUsS0FBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFFLEdBQU8sSUFBSixHQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVMsS0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQVEsRUFBRSxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVUsS0FBSyxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUyxLQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsSUFBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxHQUFHLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsTUFBYSxFQUFFLEVBQUUsY0FBWixNQUFrQyxJQUFKLE9BQVcsT0FBRSxFQUFFLEtBQUssSUFBSSxLQUFLLE9BQU8sR0FBRyxNQUFLLEVBQUUsR0FBRyxJQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUE2UyxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQUssS0FBSyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQTh2RixTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksTUFBTSxLQUFVLElBQUwsSUFBUSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSw2REFBNkQsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRSxLQUFLLEdBQUcsV0FBVyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFFLEVBQUUsRUFBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFXLElBQVIsTUFBVSxDQUFDLEdBQVMsRUFBRSxPQUFSLEtBQW9CLEVBQUUsT0FBUixJQUFhLE9BQU8sR0FBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVUsSUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFFLEdBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLE1BQU0sSUFBSSxNQUFNLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRSxFQUFFLEVBQUMsRUFBRSxNQUFNLElBQUksTUFBTSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxVQUFvQixHQUFFLElBQW5CLFNBQXNCLE1BQU0sSUFBSSxNQUFNLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQVMsSUFBTixNQUFVLEVBQUUsS0FBVyxJQUFOLE1BQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLE9BQU8sT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsVUFBVSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxVQUFVLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLE9BQU8sT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQUFBTSxJQUFOLEtBQWUsSUFBTixLQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEFBQU0sSUFBTixLQUFlLElBQU4sS0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQU8sSUFBSixHQUFXLElBQUosRUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsSUFBSSxHQUFHLElBQUksRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZ0JBQWlCLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEtBQUssYUFBYSxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssYUFBYSxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsbUJBQUksRUFBRSxFQUFFLEVBQUUsbUJBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBeU8sU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsRUFBRSxPQUFXLElBQUosRUFBTSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sU0FBbUIsRUFBRSxHQUFHLElBQXRCLFNBQXlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFJLEVBQUUsV0FBVyxHQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxHQUFHLEVBQUUsSUFBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSSxFQUFFLFdBQVcsR0FBRSxDQUFDLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxBQUFTLEVBQUUsS0FBWCxRQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsQUFBUyxFQUFFLEtBQVgsUUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLE9BQU8sSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssS0FBSyxJQUFJLEVBQUUsZUFBZSxFQUFFLGVBQWUsS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLGFBQWEsT0FBTyxHQUFHLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEdBQUUsSUFBRyxHQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBd0IsRUFBRSxZQUFOLEVBQWdCLENBQUMsTUFBTSxHQUFHLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxlQUFlLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxPQUFPLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsVUFBVSxJQUFJLEdBQUUsR0FBRyxPQUFPLE9BQU8sU0FBUyxHQUFFLEtBQUssR0FBRSxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUcsVUFBVSxjQUFjLEdBQUUsS0FBSyxHQUFFLEdBQUcsSUFBSSxHQUFFLENBQUMsR0FBRyxVQUFVLE9BQU8sR0FBRSxLQUFLLEdBQUUsR0FBRyxJQUFJLEdBQUUsQ0FBQyxHQUFHLFVBQVUsU0FBUyxHQUFFLEtBQUssR0FBRSxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUcsVUFBVSxjQUFjLEdBQUUsS0FBSyxHQUFFLEdBQUcsSUFBSSxHQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsVUFBVSxHQUFFLEtBQUssR0FBRSxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUcsT0FBTyxHQUFFLElBQUksRUFBRSxHQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFnQixPQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLElBQUksR0FBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxLQUFLLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxHQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBRyxXQUFVLEVBQUUsU0FBUyxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFHLElBQUcsR0FBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFdBQVcsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQU8sRUFBRSxTQUFOLEVBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBUSxDQUFJLElBQUosR0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsV0FBVyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQU8sSUFBSixHQUFPLEVBQUUsS0FBSyxHQUFHLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQU8sRUFBRSxZQUFOLEVBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRSxJQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUcsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFHLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFFLElBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEdBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixHQUFHLEVBQUUscUJBQXFCLEdBQUcsR0FBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxBQUFJLElBQUosRUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLElBQUksTUFBTSwwQ0FBMEMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQU8sSUFBSixFQUFNLEVBQUUsS0FBSyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsR0FBTyxJQUFKLEVBQU0sT0FBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE9BQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEtBQUssS0FBSyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFPLEdBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFXLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBN0MsR0FBZ0QsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUF4RCxHQUEyRCxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQW5FLEdBQXNFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBOUUsR0FBaUYsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUF6RixHQUE0RixFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQXBHLEdBQXVHLEVBQUUsR0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxLQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUE1eWdCLE1BQU0sRUFBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxjQUFjLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxhQUFhLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxPQUFPLGNBQWMsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQStuQixNQUFNLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxZQUFZLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLFlBQVksR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssT0FBTyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLGFBQWEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxhQUFhLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUyxLQUFHLENBQUMsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLE9BQU8sY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssYUFBYSxJQUFJLEtBQUssWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUyxLQUFHLENBQUMsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxPQUFPLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBSSxFQUFFLEVBQUUsQ0FBWSxNQUFNLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLFlBQVMsS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLFdBQU0sS0FBSyxPQUFPLEVBQUUsQ0FBOHhhLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLE9BQU8sWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEtBQUksZUFBZSxFQUFFLFVBQVUsVUFBVSxXQUFXLEdBQUcsYUFBYSxJQUFJLFdBQVcsR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxLQUFLLEVBQUUsbUJBQW1CLEdBQUcsdUJBQXVCLEdBQUcsaUJBQWlCLEdBQUcsdUJBQXVCLEdBQUUsRUFBRSxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxPQUFPLFVBQVUsS0FBSyxlQUFlLEtBQUssR0FBRyxLQUFLLE9BQU8sT0FBTyxTQUFVLFFBQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxFQUFFLFVBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssZUFBZSxDQUFDLEVBQUUsS0FBSyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxBQUFVLEVBQUUsWUFBWixRQUFzQixFQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBYSxFQUFFLFlBQVosUUFBc0IsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFPLEdBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQWEsRUFBRSxZQUFaLFFBQXNCLENBQUMsTUFBTSxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsTUFBTSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFPLEdBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLEdBQWEsRUFBRSxZQUFaLFFBQXNCLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxLQUFLLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLFNBQW1CLEVBQUUsR0FBRyxJQUF0QixTQUF5QixDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBTSxFQUFFLFNBQU4sRUFBYSxFQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFpQixFQUFFLFlBQVosUUFBc0IsRUFBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksUUFBUSxNQUFNLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxFQUFFLFFBQVEsVUFBVSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBc0IsRUFBRSxPQUFsQixlQUF3QixFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLE9BQU8sT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBYSxFQUFFLFlBQVosUUFBc0IsR0FBTyxFQUFFLFNBQU4sRUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFFLEVBQUUsT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxXQUFXLElBQUksS0FBSyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTyxHQUFFLEtBQUssR0FBRSxFQUFFLENBQUMsQ0FBQyxNQUFPLEdBQUUsS0FBSyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxRQUFTLEtBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxTQUFtQixHQUFqQixVQUFvQixHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUssTUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxRQUFRLE9BQU8sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxXQUFXLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLFNBQVMsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEtBQUssZUFBZSxFQUFFLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLE9BQU8sRUFBRSxVQUFVLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxZQUFZLEVBQUUsWUFBWSxLQUFLLEVBQUUsRUFBRSxVQUFVLFdBQVcsRUFBRSxDQUFDLEVBQUUs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QUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUF1QyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxLQUFLLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxJQUFJLGVBQWUsT0FBTyxTQUFTLEVBQUUsRUFBRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsd0JBQXdCLFFBQVUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssT0FBTyxFQUFFLFVBQVUsT0FBTyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxlQUFlLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxhQUFhLE9BQU8sTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxtQkFBbUIsRUFBRSxlQUFlLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxvQkFBb0IsR0FBRyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsV0FBVyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLE1BQU0sRUFBRSxFQUFFLGFBQWEsZUFBZSxHQUFHLEVBQUUsRUFBRSxhQUFhLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBWSxFQUFFLFFBQVosU0FBK0IsRUFBRSxRQUFkLFdBQXFCLEVBQUUsYUFBYSxZQUFZLFNBQVMsRUFBRSxVQUFVLGFBQWEsRUFBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLEdBQUcsTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLElBQUksS0FBSyxVQUFVLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxhQUFhLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLE9BQU8sTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsbUJBQW1CLEVBQUUsYUFBYSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsb0JBQW9CLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFNLFVBQVMsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLGlCQUFpQixFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksZUFBZSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsS0FBeDB4QixHQUFxVyxHQUFxcUUsR0FBNEksSUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsR0FBc3JKLElBQTJrUixHQUFHLE9BQTh2TixHQUFHLDZCQUFzcUUsaUJBQTcweEIsR0FBTixNQUFNLFdBQVUsRUFBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxHQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxRQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssYUFBYSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQU8sR0FBTixNQUFNLFdBQVUsRUFBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLGNBQWMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFtL0QsR0FBRSxDQUFDLEVBQXFKLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVB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LEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxHQUFNLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsR0FBTSxDQUFDLEdBQUksRUFBRSxFQUFHLEdBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFDM3lDLEdBQVUsQ0FDWixNQUF1QixXQUFnQixFQUFLLEVBQUcsR0FDNUMsT0FBTyxFQUNWLEdBQUksQ0FBQyxFQUNMLFNBQVUsQ0FBRSxNQUFTLEVBQUcsTUFBUyxFQUFHLFdBQWMsRUFBRyxVQUFhLEVBQUcsYUFBZ0IsRUFBRyxhQUFnQixFQUFHLGFBQWdCLEVBQUcsYUFBZ0IsRUFBRyxZQUFlLEdBQUksV0FBYyxHQUFJLFFBQVcsR0FBSSxXQUFjLEdBQUksSUFBTyxHQUFJLGFBQWdCLEdBQUksYUFBZ0IsR0FBSSxXQUFjLEdBQUksY0FBaUIsR0FBSSxnQkFBbUIsR0FBSSxrQkFBcUIsR0FBSSxlQUFrQixHQUFJLE1BQVMsR0FBSSxlQUFrQixHQUFJLFVBQWEsR0FBSSxnQkFBbUIsR0FBSSxVQUFhLEdBQUksZ0JBQW1CLEdBQUksMEJBQTZCLEdBQUksa0JBQXFCLEdBQUksdUJBQTBCLEdBQUksc0JBQXlCLEdBQUksY0FBaUIsR0FBSSxPQUFVLEdBQUksb0JBQXVCLEdBQUksV0FBYyxHQUFJLGdCQUFtQixHQUFJLFNBQVksR0FBSSxtQkFBc0IsR0FBSSxLQUFRLEdBQUksT0FBVSxHQUFJLE9BQVUsR0FBSSxPQUFVLEdBQUksaUJBQW9CLEdBQUksT0FBVSxHQUFJLFdBQWMsR0FBSSxPQUFVLEdBQUksVUFBYSxHQUFJLGFBQWdCLEdBQUksV0FBYyxHQUFJLGNBQWlCLEdBQUksaUJBQW9CLEdBQUksVUFBYSxHQUFJLGFBQWdCLEdBQUksZ0JBQW1CLEdBQUksY0FBaUIsR0FBSSxpQkFBb0IsR0FBSSxvQkFBdUIsR0FBSSxVQUFhLEdBQUksYUFBZ0IsR0FBSSxnQkFBbUIsR0FBSSxjQUFpQixHQUFJLGlCQUFvQixHQUFJLG9CQUF1QixHQUFJLElBQU8sR0FBSSxNQUFTLEdBQUksTUFBUyxHQUFJLE1BQVMsR0FBSSxNQUFTLEdBQUksTUFBUyxHQUFJLE1BQVMsR0FBSSxVQUFhLEdBQUksZ0JBQW1CLEdBQUksaUJBQW9CLEdBQUkscUJBQXdCLEdBQUksVUFBYSxHQUFJLElBQU8sR0FBSSxRQUFXLEdBQUksVUFBYSxHQUFJLFVBQWEsR0FBSSxnQkFBbUIsR0FBSSxRQUFXLEVBQUcsS0FBUSxDQUFFLEVBQ3pnRCxXQUFZLENBQUUsRUFBRyxRQUFTLEVBQUcsZUFBZ0IsRUFBRyxlQUFnQixFQUFHLGVBQWdCLEVBQUcsZUFBZ0IsR0FBSSxhQUFjLEdBQUksVUFBVyxHQUFJLE1BQU8sR0FBSSxlQUFnQixHQUFJLGVBQWdCLEdBQUksYUFBYyxHQUFJLGdCQUFpQixHQUFJLFFBQVMsR0FBSSxpQkFBa0IsR0FBSSxZQUFhLEdBQUksa0JBQW1CLEdBQUksWUFBYSxHQUFJLGtCQUFtQixHQUFJLDRCQUE2QixHQUFJLFNBQVUsR0FBSSxzQkFBdUIsR0FBSSxrQkFBbUIsR0FBSSxXQUFZLEdBQUkscUJBQXNCLEdBQUksT0FBUSxHQUFJLFNBQVUsR0FBSSxTQUFVLEdBQUksU0FBVSxHQUFJLFNBQVUsR0FBSSxhQUFjLEdBQUksU0FBVSxHQUFJLFlBQWEsR0FBSSxlQUFnQixHQUFJLGFBQWMsR0FBSSxnQkFBaUIsR0FBSSxtQkFBb0IsR0FBSSxZQUFhLEdBQUksZUFBZ0IsR0FBSSxrQkFBbUIsR0FBSSxnQkFBaUIsR0FBSSxtQkFBb0IsR0FBSSxzQkFBdUIsR0FBSSxZQUFhLEdBQUksZUFBZ0IsR0FBSSxrQkFBbUIsR0FBSSxnQkFBaUIsR0FBSSxtQkFBb0IsR0FBSSxzQkFBdUIsR0FBSSxNQUFPLEdBQUksUUFBUyxHQUFJLFFBQVMsR0FBSSxRQUFTLEdBQUksUUFBUyxHQUFJLFFBQVMsR0FBSSxRQUFTLEdBQUksWUFBYSxHQUFJLGtCQUFtQixHQUFJLG1CQUFvQixHQUFJLHVCQUF3QixHQUFJLE1BQU8sR0FBSSxVQUFXLEdBQUksWUFBYSxHQUFJLFlBQWEsR0FBSSxpQkFBa0IsRUFDdHJDLGFBQWMsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMs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RyxFQUMvQyxLQUFLLEVBQUksR0FBRyxJQUNaLFVBQ0csSUFDSCxHQUFHLG1CQUFtQix1QkFBd0IsR0FBRyxHQUFHLEdBQUcsRUFDdkQsS0FBSyxFQUFJLEdBQUcsSUFDWixVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUMsR0FBRyxHQUFHLEVBQ2hCLFVBQ0csSUFDSCxHQUFHLElBQUksUUFBUSxHQUFHLEdBQUssRUFBRSxFQUN6QixLQUFLLEVBQUksR0FBRyxJQUNaLFVBQ0csUUFDQSxJQUNILEtBQUssRUFBSSxHQUFHLElBQUksS0FBSyxFQUNyQixVQUNHLElBQ0gsSUFBSSxHQUFLLENBQUMsRUFDVixHQUFHLEdBQUcsR0FBSyxHQUFHLEtBQUssR0FBSyxHQUFHLElBQUksS0FBSyxFQUNwQyxLQUFLLEVBQUksR0FDVCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQ1QsUUFFSCxXQUFXLEVBQ2QsTUFBTyxDQUFDLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksRUFBRyxHQUFJLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFB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QUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxpQkFBb0IsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGNBQWlCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxnQkFBbUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGFBQWdCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxnQkFBbUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsU0FBWSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsaUJBQW9CLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxjQUFpQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsV0FBYyxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsYUFBZ0IsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE9BQVUsQ0FBRSxNQUFTLENB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USxFQUNwQyxDQUFFLEVBQUcsRUFBVSxHQUFJLEVBQVMsQ0FBUSxDQUN0QyxFQUVGLEdBQUksRUFBVyxJQUFJLE1BQU0sRUFDdkIsTUFBTyxDQUNMLENBQUUsRUFBRyxFQUFVLEVBQUcsQ0FBRSxFQUNwQixDQUFFLEVBQUcsRUFBVSxHQUFJLENBQVEsRUFFM0IsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLENBQVEsRUFDbkMsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUM1QyxDQUFFLEVBQUcsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUNwQyxDQUFFLEVBQUcsRUFBVSxHQUFJLENBQU8sRUFDMUIsQ0FBRSxFQUFHLEVBQUcsR0FBSSxFQUFTLENBQUUsQ0FDekIsRUFFRixHQUFJLEVBQVcsSUFBSSxJQUFJLEVBQ3JCLE1BQU8sQ0FFTCxDQUFFLEVBQUcsRUFBVSxHQUFJLENBQVEsRUFFM0IsQ0FBRSxFQUFHLEVBQVUsR0FBSSxFQUFTLENBQVEsRUFDcEMsQ0FBRSxFQUFHLEVBQUcsR0FBSSxFQUFTLENBQVEsRUFFN0IsQ0FBRSxFQUFHLEVBQVEsRUFBRyxHQUFJLENBQU8sRUFDM0IsQ0FBRSxFQUFHLEVBQU8sR0FBSSxFQUFTLENBQVEsRUFFakMsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUM1QyxDQUFFLEVBQUcsRUFBUSxFQUFVLEdBQUksQ0FBUSxDQUNyQyxFQUVGLEdBQUksRUFBVyxJQUFJLE1BQU0sRUFDdkIsTUFBTyxDQUVMLENBQUUsRUFBRyxFQUFRLEVBQUcsRUFBRyxDQUFFLEVBRXJCLENBQUUsRUFBRyxFQUFHLEdBQUksQ0FBUSxFQUNwQixDQUFFLEVBQUcsRUFBVSxHQUFJLENBQVEsRUFFM0IsQ0FBRSxFQUFHLEVBQVUsR0FBSSxFQUFTLENBQVEsRUFDcEMsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUM1QyxDQUFFLEVBQUcsRUFBUSxFQUFVLEdBQUksQ0FBUSxFQUNuQyxDQUFFLEVBQUcsRUFBTyxHQUFJLENBQVEsQ0FD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LEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEVBQUUsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsR0FBSSxJQUFLLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJ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QUFLLFdBQVksSUFBSyxZQUFhLElBQUssZUFBZ0IsSUFBSyxlQUFnQixJQUFLLGVBQWdCLElBQUssY0FBZSxFQUN4MUMsYUFBYyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxF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LEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxVQUFVLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLFFBQVEsRUFDN0MsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxVQUFVLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLFNBQVMsRUFDOUMsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxVQUFVLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLFNBQVMsRUFDOUMsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxVQUFVLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLFlBQVksRUFDakQsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxVQUFVLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLE9BQWEsT0FBUSxPQUFRLE9BQUcsT0FBTyxZQUFZLENBQUMsQ0FBQyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNuSCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksVUFBVSxFQUMvQyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksT0FBTyxFQUM1QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksU0FBUyxFQUM5QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksU0FBUyxFQUM5QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksS0FBSyxFQUMxQyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksV0FBVyxFQUNoRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksZUFBZSxFQUNwRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksWUFBWSxFQUNqRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksV0FBVyxFQUNoRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsSUFDWixHQUFHLFVBQVUsR0FBRyxHQUFHLEVBQ25CLFVBQ0csSUFDSCxHQUFHLEdBQUssR0FBRyxLQUFPLEdBQUcsSUFDckIsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixVQUNHLFFBQ0EsSUFDSCxHQUFHLEdBQUssR0FBRyxLQUFPLEdBQUcsR0FBSyxHQUMxQixLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxJQUNaLFVBQ0csSUFDSCxJQUFJLEdBQU0sR0FBRyxhQUFhLEdBQUcsSUFBSyxHQUFHLEdBQUssRUFBRSxFQUM1QyxLQUFLLEVBQUksQ0FBRSxLQUFRLEdBQUksS0FBTSxPQUFVLEdBQUksT0FBUSxPQUFVLEdBQUksT0FBUSxLQUFRLEdBQUcsR0FBSyxFQUFHLEVBQzVGLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLEdBQUcsSUFBSyxLQUFNLE1BQU8sRUFDdEMsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sR0FBRyxHQUFLLEdBQUcsS0FBTyxHQUFLLEdBQUcsSUFBSyxLQUFNLEdBQUcsR0FBSyxHQUFHLElBQUssRUFDdEUsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sR0FBRyxJQUFLLEtBQU0sUUFBUyxFQUN4QyxVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxHQUFHLElBQUssS0FBTSxVQUFXLEVBQzFDLFVBQ0csSUFDSCxJQUFJLEdBQU0sR0FBRyxhQUFhLEdBQUcsR0FBRyxFQUNoQyxLQUFLLEVBQUksQ0FBRSxLQUFRLEdBQUksS0FBTSxPQUFVLEdBQUksT0FBUSxPQUFVLEdBQUksTUFBTyxFQUN4RSxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxHQUFHLElBQUssS0FBTSxNQUFPLEVBQ3RDLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLEdBQUcsR0FBSyxHQUFHLEtBQU8sR0FBSyxHQUFHLElBQUssS0FBTSxHQUFHLEdBQUssR0FBRyxJQUFLLEVBQ3RFLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLEdBQUcsSUFBSyxLQUFNLFFBQVMsRUFDeEMsVUFDRyxRQUNBLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxHQUFHLElBQUssS0FBTSxVQUFXLEVBQzFDLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLEdBQUcsSUFBSyxLQUFNLE1BQU8sRUFDdEMsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sR0FBRyxHQUFLLEdBQUcsS0FBTyxHQUFLLEdBQUcsSUFBSyxLQUFNLEdBQUcsR0FBSyxHQUFHLElBQUssRUFDdEUsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sR0FBRyxJQUFLLEtBQU0sTUFBTyxFQUN0QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFNBQVMsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQzlCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsU0FBUyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDOUIsVUFDRyxTQUNBLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLGNBQWMsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQ25DLFVBQ0csU0FDQSxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxjQUFjLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxFQUFFLEVBQ3ZDLEdBQUcsV0FBVyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDaEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxjQUFjLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUMvQyxVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLGNBQWMsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEVBQUUsRUFDbkQsR0FBRyxXQUFXLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUNoQyxVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFFBQVEsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQzdCLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsUUFBUSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssRUFBRSxFQUNqQyxHQUFHLFdBQVcsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQ2hDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsUUFBUSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDekMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxRQUFRLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUN6QyxHQUFHLFdBQVcsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEVBQUUsRUFDcEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxRQUFRLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUM3QixVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFFBQVEsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEVBQUUsRUFDakMsR0FBRyxXQUFXLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUNoQyxVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFFBQVEsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQ3pDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsUUFBUSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDekMsR0FBRyxXQUFXLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxFQUFFLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsVUFBVSxHQUFHLEdBQUssR0FBUyxPQUFRLE9BQUcsR0FBRyxHQUFHLEVBQy9DLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBSyxFQUFFLEVBQUcsR0FBRyxHQUFHLEVBQ2xDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsV0FBVyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDaEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLEdBQUssRUFBRSxFQUFHLEdBQUcsR0FBSyxFQUFFLEVBQ2pELEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBSyxFQUFFLEVBQUcsR0FBRyxHQUFHLEVBQ2xDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsc0JBQXNCLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxFQUFFLEVBQy9DLEdBQUcsV0FBVyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDaEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLEdBQUssRUFBRSxFQUFHLEdBQUcsR0FBRyxFQUM3QyxVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLHNCQUFzQixHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDM0MsVUFDRyxTQUNBLEtBQ0gsS0FBSyxFQUFJLENBQUMsR0FBRyxHQUFHLEVBQ2hCLFVBQ0csU0FDQSxLQUNILEdBQUcsR0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQ3RCLEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FBSyxHQUFHLElBQ3pCLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxJQUNaLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQUssR0FBSyxHQUFHLElBQzlCLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQUssR0FBSyxHQUFHLElBQzlCLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFFBRUgsV0FBVyxFQUNkLE1BQU8sQ0FBQyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUcsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBRyxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFHLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUcsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBRyxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBRyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFLLElBQUssR0FBSyxJQUFLLEdBQUssSUFBSyxFQUFHLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLElBQUssSUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLElBQUssR0FBSyxJQUFLLEVBQUksRUFBRyxFQUFFLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBTSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksSUFBSyxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsRUFBRSxHQUFNLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSyxDQUFDLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxJQUFLLElBQUssSUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksRUFBSyxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLElBQUssSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFJLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsSUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxJQUFLLElBQUssR0FBSyxJQUFLLEVBQUksRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQU0sR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLElBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLElBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLElBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssSUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxJQUFLLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxHQUFNLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLEdBQU0sR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsRUFBRSxHQUFNLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFJLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxDQUFDLEVBQUcsR0FBRyxFQUFHLElBQUssR0FBTSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssQ0FBQyxFQUFHLEdBQUcsRUFBRyxJQUFLLEdBQU0sSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLElBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFJLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxJQUFLLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLElBQUssRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLEVBQUssQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLEVBQUssQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLElBQUssRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxJQUFLLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLElBQUssR0FBTSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxJQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssR0FBSyxJQUFLLEVBQUcsRUFBRyxDQUFFLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLElBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssRUFBRyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsSUFBSyxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsSUFBSyxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSyxJQUFLLEdBQUssSUFBSyxFQUFJLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLElBQUssSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdB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RyxlQUFrQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsY0FBaUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLFNBQVksQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLFNBQVksQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsWUFBZSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsS0FBUSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLElBQU8sQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJ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LEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsR0FBSSxFQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDL25ELGVBQWdCLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUMzQyxXQUE0QixXQUFnQixDQUFVLENBQUMsRUFBSyxFQUFNLENBQ2hFLEdBQUksRUFBSyxZQUNQLEtBQUssTUFBTSxDQUFHLE1B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MUIsT0FBTyxLQUFLLGdCQUFnQixFQUFZLEVBQUcsQ0FBTyxFQUV0RCxRQUFRLENBQUMsRUFBWSxFQUFTLENBQzFCLE9BQU8sS0FBSyxnQkFBZ0IsRUFBWSxFQUFHLENBQU8sRUFFdEQsUUFBUSxDQUFDLEVBQVksRUFBUyxDQUMxQixPQUFPLEtBQUssZ0JBQWdCLEVBQVksRUFBRyxDQUFPLEVBRXRELFFBQVEsQ0FBQyxFQUFZLEVBQVMsQ0FDMUIsT0FBTyxLQUFLLGdCQUFnQixFQUFZLEVBQUcsQ0FBTyxFQUV0RCxRQUFRLENBQUMsRUFBWSxFQUFTLENBQzFCLE9BQU8sS0FBSyxnQkFBZ0IsRUFBWSxFQUFHLENBQU8sRUFFdEQsUUFBUSxDQUFDLEVBQVksRUFBUyxDQUMxQixPQUFPLEtBQUssZ0JBQWdCLEVBQVksRUFBRyxDQUFPLEVBRXRELFFBQVEsQ0FBQyxFQUFZLEVBQVMsQ0FDMUIsT0FBTyxLQUFLLGdCQUFnQixFQUFZLEVBQUcsQ0FBTyxFQUV0RCxRQUFRLENBQUMsRUFBWSxFQUFTLENBQzFCLE9BQU8sS0FBSyxnQkFBZ0IsRUFBWSxFQUFHLENBQU8sRUFFdEQsUUFBUSxDQUFDLEVBQVksRUFBUyxDQUMxQixPQUFPLEtBQUssZ0JBQWdCLEVBQVksRUFBRyxDQUFPLEVBRXRELE1BQU0sQ0FBQyxFQUFtQixDQUN0QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixP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QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGFBQWEsQ0FBQyxFQUFtQixDQUM3QixLQUFLLG1CQUFtQixFQUFHLENBQWlCLEVBRWhELGdCQUFnQixDQUFDLEVBQVMsQ0FDdEIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLGlCQUFpQixDQUFDLEVBQVMsQ0FDdkIsS0FBSywyQkFBMkIsRUFBRyxDQUFPLEVBRTlDLElB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RUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBTyxFQUFFLFNBQU4sRUFBYSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFPLElBQUwsR0FBTyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBUyxFQUFFLEVBQUUsV0FBVyxDQUFDLEtBQXRCLEdBQXlCLEFBQUssSUFBTCxLQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBUSxJQUFMLEdBQVksSUFBTCxHQUFPLEVBQUUsRUFBTSxJQUFKLElBQVEsRUFBRSxHQUFRLElBQUwsS0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBVyxJQUFMLElBQWEsSUFBTCxJQUFZLElBQUosR0FBVyxJQUFKLEdBQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQU8sSUFBTCxLQUFTLEVBQUUsS0FBSyxFQUFFLEtBQVMsSUFBSixHQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBUSxJQUFKLEdBQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFZLElBQUosT0FBTSxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxlQUFlLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUcsQ0FBQyxPQUFvQixRQUFwQixhQUE0QixPQUFPLGFBQWEsT0FBTyxlQUFlLEVBQUUsT0FBTyxZQUFZLENBQUMsTUFBTSxRQUFRLENBQUMsRUFBRSxPQUFPLGVBQWUsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQW1CLFNBQWpCLFNBQXlCLEVBQVksUUFBUSxXQUFsQix1QkFBb0QsV0FBakIsU0FBc0QsRUFBcEIsVUFBVSxVQUFjLFFBQVEsU0FBUyxHQUFHLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxRQUFRLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLE1BQU0sMkRBQTJELEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxpREFBaUQsRUFBRSxHQUFHLEVBQUUsTUFBSyxHQUFHLEVBQUUsV0FBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksTUFBTSwwSUFBMEksVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLE1BQU0sMkhBQTJILEdBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsK0RBQStELE1BQU0sQ0FBQyxPQUFRLE1BQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxhQUFhLEtBQUssVUFBb0IsRUFBRSxXQUFuQixpQkFBK0MsRUFBRSxVQUFuQixpQkFBOEMsRUFBRSxNQUFuQixpQkFBMEMsRUFBRSxPQUFuQixpQkFBMkMsRUFBRSxRQUFuQixpQkFBNEMsRUFBRSxRQUFuQixpQkFBOEMsRUFBRSxNQUFyQixtQkFBOEMsRUFBRSxVQUFyQixXQUE4QixPQUFPLFVBQVUsS0FBSyxNQUFNLFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxPQUFpQixHQUFqQixVQUFvQixLQUFLLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUUsVUFBVSxJQUFJLEtBQUssZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLFVBQVUsR0FBRyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sT0FBTyxZQUFZLFdBQVcsT0FBTyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFPLE9BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUUsT0FBZ0IsSUFBSixPQUFNLEVBQUUsS0FBSyxPQUFjLElBQVAsT0FBVyxFQUFFLEdBQVksSUFBSixPQUFNLEVBQUUsS0FBSyxVQUFpQixJQUFQLE9BQVcsRUFBRSxHQUFZLElBQUosT0FBTSxFQUFFLEtBQUssS0FBWSxJQUFQLE9BQVcsRUFBRSxHQUFZLElBQUosT0FBTSxFQUFFLEtBQUssTUFBYSxJQUFQLE9BQVcsRUFBRSxHQUFZLElBQUosT0FBTSxFQUFFLEtBQUssU0FBZ0IsSUFBUCxPQUFXLEVBQUUsR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssU0FBUyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUyxNQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFTLEtBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxBQUFLLElBQUwsSUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLE9BQU8sSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFTLEtBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLFdBQVksT0FBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFPLE9BQUUsTUFBTSxVQUFVLENBQUMsQ0FBQyxXQUFXLEtBQUssUUFBUSxRQUFTLE9BQU0sRUFBRSxDQUFDLE9BQU8sS0FBSyxVQUFVLEtBQUssUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssUUFBUSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEtBQUssVUFBVSxFQUFFLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxHQUFHLEtBQUssYUFBYSxFQUFFLFNBQVMsS0FBSyxZQUFZLEtBQUssT0FBTyxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssU0FBUyxFQUFFLE9BQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxFQUFFLFVBQVUsS0FBSyxXQUFXLEtBQUssUUFBUSxFQUFFLE1BQU0sS0FBSyxPQUFPLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQVMsSUFBTCxJQUFhLElBQUwsSUFBYSxJQUFMLElBQWMsSUFBTixLQUFTLEdBQVEsSUFBTCxJQUFRLEdBQVEsSUFBTCxJQUFRLEdBQVEsSUFBTCxJQUFRLEdBQVEsSUFBTCxHQUFPLEFBQUssSUFBTCxLQUFTLEdBQUcsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBYSxJQUFKLFNBQVEsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQUFBUyxJQUFKLFNBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxBQUFTLElBQUosUUFBWSxJQUFMLEtBQVMsR0FBRyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBUSxJQUFMLEtBQVMsRUFBRSxJQUFJLE9BQVcsSUFBTCxLQUFTLEdBQUcsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBWSxJQUFKLE9BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEFBQUssSUFBTCxJQUFhLElBQUwsSUFBaUIsSUFBSixTQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFhLElBQUosU0FBUSxHQUFHLEVBQUUsSUFBSSxPQUFnQixJQUFKLE9BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxPQUFPLEdBQVksRUFBRSxTQUFYLE9BQWtCLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBWSxFQUFFLEtBQUssV0FBVyxDQUFDLElBQXhCLEtBQTRCLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxNQUFXLEVBQUUsS0FBSyxXQUFXLENBQUMsSUFBeEIsR0FBMEIsRUFBRSxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBWSxJQUFULFVBQWMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsR0FBUSxJQUFMLEdBQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBTyxJQUFMLEdBQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsWUFBWSxHQUFHLEVBQU8sSUFBTCxHQUFPLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEdBQVEsRUFBRSxXQUFXLENBQUMsSUFBbkIsSUFBMkIsRUFB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RyxFQUFHLEVBQUcsQ0FBQyxFQUFJLEdBQVMsRUFBRyxFQUFHLEVBQUcsQ0FBQyxFQUNoRSxFQUFRLEVBQUcsRUFBSSxFQUFHLEVBQUksR0FBUyxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUksR0FBUyxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQ3RFLEdBQUksS0FBUSxLQUNWLEdBQUksRUFBRyxFQUFJLEVBQUcsRUFDWixFQUFVLEtBQUssRUFBRyxLQUFLLEVBQUcsT0FBTyxFQUFRLEtBQVUsRUFBRyxLQUFLLEtBQVEsS0FBUyxFQUFHLEVBQUksT0FBWSxLQUFTLEVBQUcsRUFBSSxLQUFVLEtBQU8sRUFBUSxLQUFVLEVBQUcsT0FBTyxFQUFHLEtBQUssRUFBRyxRQUV2SyxHQUFnQixHQUFVLElBQUksRUFBUSxNQUFNLEdBQUcsTUFDL0MsRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBUSxLQUFVLEVBQUcsS0FBSyxLQUFPLEtBQVMsRUFBRyxFQUFJLE9BQVksS0FBUyxFQUFHLEVBQUksS0FBVSxLQUFRLEVBQVEsS0FBVSxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsWUFFaEssS0FBUSxLQUNqQixHQUFJLEVBQUcsRUFBSSxFQUFHLEVBQ1osRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBUSxLQUFVLEVBQUcsS0FBSyxLQUFPLEtBQVMsRUFBRyxFQUFJLE9BQVksS0FBUyxFQUFHLEVBQUksS0FBVSxLQUFRLEVBQVEsS0FBVSxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsUUFFdkssR0FBZ0IsR0FBVSxJQUFJLEVBQVEsTUFBTSxHQUFHLE1BQy9DLEVBQVUsS0FBSyxFQUFHLEtBQUssRUFBRyxPQUFPLEVBQVEsS0FBVSxFQUFHLEtBQUssS0FBUSxLQUFTLEVBQUcsRUFBSSxPQUFZLEtBQVMsRUFBRyxFQUFJLEtBQVUsS0FBTyxFQUFRLEtBQVUsRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLFlBR3JLLEVBQUcsRUFBSSxFQUFHLEVBQ1osRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9B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QyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsUUFBUSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBWSxHQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLGFBQWEsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxhQUFhLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxTQUFTLEVBQUUsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGFBQWEsR0FBRyxFQUFFLFlBQWEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLFFBQVEsR0FBRyxFQUFFLEVBQUUsUUFBUSw0Q0FBNkMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLHlDQUEwQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLFdBQVcsRUFBRSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFVBQW9CLEdBQWpCLFNBQW1CLEdBQUcsRUFBRSxXQUFXLENBQUMsSUFBUSxNQUFKLEVBQWMsT0FBSixHQUFFLEVBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsR0FBWSxJQUFKLE9BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFTLElBQUwsS0FBUyxFQUFFLE1BQU0sVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLG1CQUFtQixJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFRLEtBQUosRUFBYSxJQUFKLEVBQVksS0FBSixHQUFOLEVBQWUsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxVQUFvQixHQUFqQixTQUFtQixDQUFDLElBQUksRUFBTyxFQUFFLEtBQVAsR0FBVSxFQUFPLEVBQUUsS0FBUCxHQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLFFBQVEsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxNQUFZLElBQU4sSUFBUSxLQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxHQUFFLEVBQUUsSUFBSSxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUUsR0FBRSxHQUFHLEVBQUUsR0FBRSxHQUFHLEVBQUUsR0FBRSxJQUFHLEVBQUUsR0FBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFHLEVBQUUsT0FBTyxJQUFHLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBQyxDQUFDLEdBQUcsR0FBRSxJQUFJLEtBQUssRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBQyxFQUFFLElBQUksR0FBRSxFQUFFLEVBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsVUFBUyxHQUFOLENBQVMsT0FBTyxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFRLElBQUwsS0FBUyxLQUFLLEdBQUcsS0FBSyxPQUFPLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLGFBQWEsTUFBTSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsT0FBUSxHQUFFLEtBQUssS0FBSyxDQUFDLElBQUsseUJDQXJ5SCxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBaUIsSUFBakIsaUJBQThDLElBQXBCLFlB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QSxnQkF3bEJBLGNBQ0EsS0F0MkNJLFdBQWlCLEVBQUcsQ0FDdEIsSUFBSSxFQUFvQixVQUFlLENBQUMsRUFBRyxFQUFHLEVBQUksRUFBRyxDQUNuRCxJQUFLLEVBQUssR0FBTSxDQUFDLEVBQUcsRUFBSSxFQUFFLE9BQVEsSUFBSyxFQUFHLEVBQUUsSUFBTSxHQUNsRCxPQUFPLEdBQ04sR0FBRyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUMzZCxFQUFVLENBQ1osTUFBdUIsV0FBZ0IsQ0FBSyxFQUFHLEdBQzVDLE9BQU8sRUFDVixHQUFJLENBQUMsRUFDTCxTQUFVLENBQUUsTUFBUyxFQUFHLE1BQVMsRUFBRyxNQUFTLEVBQUcsU0FBWSxFQUFHLElBQU8sRUFBRyxLQUFRLEVBQUcsTUFBUyxFQUFHLFVBQWEsRUFBRyxHQUFNLEdBQUksUUFBVyxHQUFJLGVBQWtCLEdBQUksZ0JBQW1CLEdBQUksa0JBQXFCLEdBQUksaUJBQW9CLEdBQUksZUFBa0IsR0FBSSxpQkFBb0IsR0FBSSxlQUFrQixHQUFJLFFBQVcsR0FBSSxlQUFrQixHQUFJLGlCQUFvQixHQUFJLFdBQWMsR0FBSSxrQkFBcUIsR0FBSSxRQUFXLEdBQUksV0FBYyxHQUFJLGFBQWdCLEdBQUksU0FBWSxHQUFJLFNBQVksR0FBSSxZQUFlLEdBQUksTUFBUyxHQUFJLFVBQWEsR0FBSSxnQkFBbUIsR0FBSSxVQUFhLEdBQUksZ0JBQW1CLEdBQUksMEJBQTZCLEdBQUksUUFBVyxHQUFJLGVBQWtCLEdBQUksUUFBVyxHQUFJLFNBQVksR0FBSSxNQUFTLEdBQUksYUFBZ0IsR0FBSSxhQUFnQixHQUFJLEtBQVEsR0FBSSxvQkFBdUIsR0FBSSxRQUFXLEVBQUcsS0FBUSxDQUFFLEVBQ2p6QixXQUFZLENBQUUsRUFBRyxRQUFTLEVBQUcsUUFBUyxFQUFHLE1BQU8sRUFBRyxRQUFTLEdBQUksS0FBTSxHQUFJLGlCQUFrQixHQUFJLGtCQUFtQixHQUFJLG9CQUFxQixHQUFJLG1CQUFvQixHQUFJLGlCQUFrQixHQUFJLG1CQUFvQixHQUFJLGlCQUFrQixHQUFJLGlCQUFrQixHQUFJLG1CQUFvQixHQUFJLGFBQWMsR0FBSSxvQkFBcUIsR0FBSSxVQUFXLEdBQUksYUFBYyxHQUFJLGVBQWdCLEdBQUksV0FBWSxHQUFJLFdBQVksR0FBSSxjQUFlLEdBQUksUUFBUyxHQUFJLFlBQWEsR0FBSSxrQkFBbUIsR0FBSSxZQUFhLEdBQUksa0JBQW1CLEdBQUksNEJBQTZCLEdBQUksVUFBVyxHQUFJLFVBQVcsR0FBSSxXQUFZLEdBQUksUUFBUyxHQUFJLGVBQWdCLEdBQUksZUFBZ0IsR0FBSSxNQUFPLEVBQ3JwQixhQUFjLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FB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LEVBQUcsR0FBSyxJQUFJLEVBQ3pDLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQ2pCLEVBQUcsY0FBYyxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDL0MsVUFDRyxJQUNILEtBQUssRUFBSSxFQUFHLEVBQUssR0FDakIsRUFBRyxjQUFjLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBSyxHQUFJLElBQUksRUFDN0MsRUFBRyxRQUFRLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBRyxFQUM3QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsRUFBSyxHQUNqQixFQUFHLGNBQWMsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEVBQUUsRUFDbkQsRUFBRyxRQUFRLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBRyxFQUM3QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsRUFBSyxHQUNqQixFQUFHLGNBQWMsRUFBRyxFQUFLLEdBQUksRUFBRyxHQUFLLElBQUksRUFDekMsRUFBRyxRQUFRLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBSyxFQUFFLEVBQ2pDLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQ2pCLEVBQUcsY0FBYyxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDL0MsRUFBRyxRQUFRLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBSyxFQUFFLEVBQ2pDLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQ2pCLEVBQUcsUUFBUSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDN0IsVUFDRyxRQUNBLElBQ0gsS0FBSyxFQUFJLEVBQUcsRUFBSyxHQUFLLElBQU0sRUFBRyxHQUMvQixVQUNHLFFBQ0EsUUFDQSxJQUNILEtBQUssRUFBSSxFQUFHLEVBQUssR0FBSyxJQUFNLEVBQUcsRUFBSyxHQUFLLElBQU0sRUFBRyxHQUNsRCxVQUNHLFFBQ0EsSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQUssSUFBTSxFQUFHLEVBQUssR0FBSyxJQUFNLEVBQUcsRUFBSyxHQUFLLElBQU0sRUFBRyxHQUNyRSxRQUVILFdBQVcsRUFDZCxNQUFPLENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDOTRDLGVBQWdCLENBQUMsRUFDakIsV0FBNEIsV0FBZ0IsQ0FBVSxDQUFDLEVBQUssRUFBTSxDQUNoRSxHQUFJLEVBQUssWUFDUCxLQUFLLE1BQU0sQ0FBRyxNQUNULENBQ0wsSUFBSSxFQUFRLElBQUksTUFBTSxDQUFHLEVBRXpCLE1BREEsRUFBTSxLQUFPLEVBQ1AsSUFFUCxZQUFZLEVBQ2YsTUFBdUIsV0FBZ0IsQ0FBSyxDQUFDLEVBQU8sQ0FDbEQsSUFBSSxFQUFPLEtBQU0sRUFBUSxDQUFDLENBQUMsRUFBRyxFQUFTLENBQUMsRUFBRyxFQUFTLENBQUMsSUFBSSxFQUFHLEVBQVMsQ0FBQyxFQUFHLEVBQVEsS0FBSyxNQUFPLEVBQVMsR0FBSSxFQUFXLEVBQUcsRUFBUyxFQUFHLEVBQWEsRUFBRyxHQUFTLEVBQUcsRUFBTSxFQUNsSyxFQUFPLEVBQU8sTUFBTSxLQUFLLFVBQVcsQ0FBQyxFQUNyQyxFQUFTLE9BQU8sT0FBTyxLQUFLLEtBQUssRUFDakMsRUFBYyxDQUFFLEdBQUksQ0FBQyxDQUFFLEVBQzNCLFFBQVMsS0FBSyxLQUFLLEdBQ2pCLEdBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxLQUFLLEdBQUksQ0FBQyxFQUNqRCxFQUFZLEdBQUcsR0FBSyxLQUFLLEdBQUcsR0FNaEMsR0FIQSxFQUFPLFNBQVMsRUFBTyxFQUFZLEVBQUUsRUFDckMsRUFBWSxHQUFHLE1BQVEsRUFDdkIsRUFBWSxHQUFHLE9BQVMsWUFDYixFQUFPLFFBQVUsWUFDMUIsRUFBTyxPQUFTLENBQUMsRUFFbkIsSUFBSSxFQUFRLEVBQU8sT0FDbkIsRUFBTyxLQUFLLENBQUssRUFDakIsSUFBSSxHQUFTLEVBQU8sU0FBVyxFQUFPLFFBQVEsT0FDOUMsVUFBVyxFQUFZLEdBQUcsYUFBZSxXQUN2QyxLQUFLLFdBQWEsRUFBWSxHQUFHLGVBRWpDLE1BQUssV0FBYSxPQUFPLGVBQWUsSUFBSSxFQUFFLFdBRWhELFNBQVMsRUFBUSxDQUFDLEdBQUcsQ0FDbkIsRUFBTSxPQUFTLEVBQU0sT0FBUyxFQUFJLEdBQ2xDLEVBQU8sT0FBUyxFQUFPLE9BQVMsR0FDaEMsRUFBTyxPQUFTLEVBQU8sT0FBUyxHQUVsQyxFQUFPLEdBQVUsVUFBVSxFQUMzQixTQUFTLEVBQUcsRUFBRyxDQUNiLElBQUksR0FDSSxFQUFPLElBQUksR0FBSyxFQUFPLElBQUksR0FBSyxFQUN4QyxVQUFXLEtBQVUsU0FBVSxDQUM3QixHQUFJLGNBQWlCLE1BQ25CLEVBQVMsR0FDVCxHQUFRLEVBQU8sSUFBSSxFQUVyQixHQUFRLEVBQUssU0FBUyxLQUFVLEdBRWxDLE9BQU8sR0FFVCxFQUFPLEdBQUssS0FBSyxFQUNqQixJQUFJLEdBQVEsR0FBZ0IsR0FBTyxHQUFRLEdBQUcsR0FBRyxHQUFRLENBQUMsRUFBRyxHQUFHLEdBQUssR0FBVSxFQUMvRSxNQUFPLEdBQU0sQ0FFWCxHQURBLEdBQVEsRUFBTSxFQUFNLE9BQVMsR0FDekIsS0FBSyxlQUFlLElBQ3RCLEdBQVMsS0FBSyxlQUFlLFFBQ3hCLENBQ0wsR0FBSSxLQUFXLGFBQWUsSUFBVSxZQUN0QyxHQUFTLEdBQUksRUFFZixHQUFTLEVBQU0sS0FBVSxFQUFNLElBQU8sSUFFeEMsVUFBVyxLQUFXLGNBQWdCLEdBQU8sU0FBVyxHQUFPLEdBQUksQ0FDakUsSUFBSSxHQUFTLEdBQ2IsRUFBVyxDQUFDLEVBQ1osSUFBSyxNQUFLLEVBQU0sSUFDZCxHQUFJLEtBQUssV0FBVyxLQUFNLEdBQUksR0FDNUIsRUFBUyxLQUFLLElBQU0sS0FBSyxXQUFXLElBQUssR0FBRyxFQUdoRCxHQUFJLEVBQU8sYUFDVCxHQUFTLHdCQUEwQixFQUFXLEdBQUssTUFBUSxFQUFPLGFBQWEsRUFBSSxlQUFpQixFQUFTLEtBQUssSUFBSSxFQUFJLFdBQWEsS0FBSyxXQUFXLEtBQVcsSUFBVSxRQUU1SyxJQUFTLHdCQUEwQixFQUFXLEdBQUssaUJBQW1CLElBQVUsRUFBTSxlQUFpQixLQUFPLEtBQUssV0FBVyxLQUFXLElBQVUsS0FFckosS0FBSyxXQUFXLEdBQVEsQ0FDdEIsS0FBTSxFQUFPLE1BQ2IsTUFBTyxLQUFLLFdBQVcsS0FBVyxHQUNsQyxLQUFNLEVBQU8sU0FDYixJQUFLLEVBQ0wsVUFDRixDQUFDLEVBRUgsR0FBSSxHQUFPLGFBQWMsT0FBUyxHQUFPLE9BQVMsRUFDaEQsTUFBTSxJQUFJLE1BQU0sb0RBQXNELEdBQVEsWUFBYyxFQUFNLEVBRXBHLE9BQVEsR0FBTyxRQUNSLEdBTUgsR0FMQSxFQUFNLEtBQUssRUFBTSxFQUNqQixFQUFPLEtBQUssRUFBTyxNQUFNLEVBQ3pCLEVBQU8sS0FBSyxFQUFPLE1BQU0sRUFDekIsRUFBTSxLQUFLLEdBQU8sRUFBRSxFQUNwQixHQUFTLE1BQ0osSUFLSCxHQUpBLEVBQVMsRUFBTyxPQUNoQixFQUFTLEVBQU8sT0FDaEIsRUFBVyxFQUFPLFNBQ2xCLEVBQVEsRUFBTyxPQUNYLEVBQWEsRUFDZixRQUdGLElBQVMsR0FDVCxHQUFpQixLQUVuQixVQUNHLEdBU0gsR0FSQSxHQUFNLEtBQUssYUFBYSxHQUFPLElBQUksR0FDbkMsR0FBTSxFQUFJLEVBQU8sRUFBTyxPQUFTLElBQ2pDLEdBQU0sR0FBSyxDQUNULFdBQVksRUFBTyxFQUFPLFFBQVUsSUFBTyxJQUFJLFdBQy9DLFVBQVcsRUFBTyxFQUFPLE9BQVMsR0FBRyxVQUNyQyxhQUFjLEVBQU8sRUFBTyxRQUFVLElBQU8sSUFBSSxhQUNqRCxZQUFhLEVBQU8sRUFBTyxPQUFTLEdBQUcsV0FDekMsRUFDSSxHQUNGLEdBQU0sR0FBRyxNQUFRLENBQ2YsRUFBTyxFQUFPLFFBQVUsSUFBTyxJQUFJLE1BQU0sR0FDekMsRUFBTyxFQUFPLE9BQVMsR0FBRyxNQUFNLEVBQ2xDLEVBV0YsR0FUQSxHQUFJLEtBQUssY0FBYyxNQUFNLEdBQU8sQ0FDbEMsRUFDQSxFQUNBLEVBQ0EsRUFBWSxHQUNaLEdBQU8sR0FDUCxFQUNBLENBQ0YsRUFBRSxPQUFPLENBQUksQ0FBQyxTQUNILEtBQU0sWUFDZixPQUFPLEdBRVQsR0FBSSxHQUNGLEVBQVEsRUFBTSxNQUFNLEVBQUcsR0FBSyxHQUFNLENBQUMsRUFDbkMsRUFBUyxFQUFPLE1BQU0sRUFBRyxHQUFLLEVBQUcsRUFDakMsRUFBUyxFQUFPLE1BQU0sRUFBRyxHQUFLLEVBQUcsRUFFbkMsRUFBTSxLQUFLLEtBQUssYUFBYSxHQUFPLElBQUksRUFBRSxFQUMxQyxFQUFPLEtBQUssR0FBTSxDQUFDLEVBQ25CLEVBQU8sS0FBSyxHQUFNLEVBQUUsRUFDcEIsR0FBVyxFQUFNLEVBQU0sRUFBTSxPQUFTLElBQUksRUFBTSxFQUFNLE9BQVMsSUFDL0QsRUFBTSxLQUFLLEVBQVEsRUFDbkIsVUFDRyxHQUNILE1BQU8sSUFHYixNQUFPLElBQ04sT0FBTyxDQUNaLEVBQ0ksVUFBZ0MsRUFBRyxDQUNyQyxJQUFJLEVBQVMsQ0FDWCxJQUFLLEVBQ0wsV0FBNEIsV0FBZ0IsQ0FBVSxDQUFDLEVBQUssRUFBTSxDQUNoRSxHQUFJLEtBQUssR0FBRyxPQUNWLEtBQUssR0FBRyxPQUFPLFdBQVcsRUFBSyxDQUFJLE1BRW5DLE9BQU0sSUFBSSxNQUFNLENBQUcsR0FFcEIsWUFBWSxFQUVmLFNBQTBCLFVBQWUsQ0FBQyxFQUFPLEVBQUksQ0FhbkQsR0FaQSxLQUFLLEdBQUssR0FBTSxLQUFLLElBQU0sQ0FBQyxFQUM1QixLQUFLLE9BQVMsRUFDZCxLQUFLLE1BQVEsS0FBSyxXQUFhLEtBQUssS0FBTyxHQUMzQyxLQUFLLFNBQVcsS0FBSyxPQUFTLEVBQzlCLEtBQUssT0FBUyxLQUFLLFFBQVUsS0FBSyxNQUFRLEdBQzFDLEtBQUssZUFBaUIsQ0FBQyxTQUFTLEVBQ2hDLEtBQUssT0FBUyxDQUNaLFdBQVksRUFDWixhQUFjLEVBQ2QsVUFBVyxFQUNYLFlBQWEsQ0FDZixFQUNJLEtBQUssUUFBUSxPQUNmLEtBQUssT0FBTyxNQUFRLENBQUMsRUFBRyxDQUFDLEVBRzNCLE9BREEsS0FBSyxPQUFTLEVBQ1AsTUFDTixVQUFVLEVBRWIsTUFBdUIsVUFBZSxFQUFHLENBQ3ZDLElBQUksRUFBSyxLQUFLLE9BQU8sR0FDckIsS0FBSyxRQUFVLEVBQ2YsS0FBSyxTQUNMLEtBQUssU0FDTCxLQUFLLE9BQVMsRUFDZCxLQUFLLFNBQVcsRUFDaEIsSUFBSSxFQUFRLEVBQUcsTUFBTSxpQkFBaUIsRUFDdEMsR0FBSSxFQUNGLEtBQUssV0FDTCxLQUFLLE9BQU8sZ0JBRVosTUFBSyxPQUFPLGNBRWQsR0FBSSxLQUFLLFFBQVEsT0FDZixLQUFLLE9BQU8sTUFBTSxLQUdwQixPQURBLEtBQUssT0FBUyxLQUFLLE9BQU8sTUFBTSxDQUFDLEVBQzFCLEdBQ04sT0FBTyxFQUVWLE1BQXVCLFVBQWUsQ0FBQyxFQUFJLENBQ3pDLElBQUksRUFBTSxFQUFHLE9BQ1QsRUFBUSxFQUFHLE1BQU0sZUFBZSxFQUNwQyxLQUFLLE9BQVMsRUFBSyxLQUFLLE9BQ3hCLEtBQUssT0FBUyxLQUFLLE9BQU8sT0FBTyxFQUFHLEtBQUssT0FBTyxPQUFTLENBQUcsRUFDNUQsS0FBSyxRQUFVLEVBQ2YsSUFBSSxFQUFXLEtBQUssTUFBTSxNQUFNLGVBQWUsRUFHL0MsR0FGQSxLQUFLLE1BQVEsS0FBSyxNQUFNLE9BQU8sRUFBRyxLQUFLLE1BQU0sT0FBUyxDQUFDLEVBQ3ZELEtBQUssUUFBVSxLQUFLLFFBQVEsT0FBTyxFQUFHLEtBQUssUUFBUSxPQUFTLENBQUMsRUFDekQsRUFBTSxPQUFTLEVBQ2pCLEtBQUssVUFBWSxFQUFNLE9BQVMsRUFFbEMsSUFBSSxFQUFJLEtBQUssT0FBTyxNQU9wQixHQU5BLEtBQUssT0FBUyxDQUNaLFdBQVksS0FBSyxPQUFPLFdBQ3hCLFVBQVcsS0FBSyxTQUFXLEVBQzNCLGFBQWMsS0FBSyxPQUFPLGFBQzFCLFlBQWEsR0FBUyxFQUFNLFNBQVcsRUFBUyxPQUFTLEtBQUssT0FBTyxhQUFlLEdBQUssRUFBUyxFQUFTLE9BQVMsRUFBTSxRQUFRLE9BQVMsRUFBTSxHQUFHLE9BQVMsS0FBSyxPQUFPLGFBQWUsQ0FDMUwsRUFDSSxLQUFLLFFBQVEsT0FDZixLQUFLLE9BQU8sTUFBUSxDQUFDLEVBQUUsR0FBSSxFQUFFLEdBQUssS0FBSyxPQUFTLENBQUcsRUFHckQsT0FEQSxLQUFLLE9BQVMsS0FBSyxPQUFPLE9BQ25CLE1BQ04sT0FBTyxFQUVWLEtBQXNCLFVBQWUsRUFBRyxDQUV0QyxPQURBLEtBQUssTUFBUSxHQUNOLE1BQ04sTUFBTSxFQUVULE9BQXdCLFVBQWUsRUFBRyxDQUN4QyxHQUFJLEtBQUssUUFBUSxnQkFDZixLQUFLLFdBQWEsT0FFbEIsUUFBTyxLQUFLLFdBQVcsMEJBQTRCLEtBQUssU0FBVyxHQUFLLG1JQUFxSSxLQUFLLGFBQWEsRUFBRyxDQUNoTyxLQUFNLEdBQ04sTUFBTyxLQUNQLEtBQU0sS0FBSyxRQUNiLENBQUMsRUFFSCxPQUFPLE1BQ04sUUFBUSxFQUVYLEtBQXNCLFVBQWUsQ0FBQyxFQUFHLENBQ3ZDLEtBQUssTUFBTSxLQUFLLE1BQU0sTUFBTSxDQUFDLENBQUMsR0FDN0IsTUFBTSxFQUVULFVBQTJCLFVBQWUsRUFBRyxDQUMzQyxJQUFJLEVBQU8sS0FBSyxRQUFRLE9BQU8sRUFBRyxLQUFLLFFBQVEsT0FBUyxLQUFLLE1BQU0sTUFBTSxFQUN6RSxPQUFRLEVBQUssT0FBUyxHQUFLLE1BQVEsSUFBTSxFQUFLLE9BQU8sR0FBRyxFQUFFLFFBQVEsTUFBTyxFQUFFLEdBQzFFLFdBQVcsRUFFZCxjQUErQixVQUFlLEVBQUcsQ0FDL0MsSUFBSSxFQUFPLEtBQUssTUFDaEIsR0FBSSxFQUFLLE9BQVMsR0FDaEIsR0FBUSxLQUFLLE9BQU8sT0FBTyxFQUFHLEdBQUssRUFBSyxNQUFNLEVBRWhELE9BQVEsRUFBSyxPQUFPLEVBQUcsRUFBRSxHQUFLLEVBQUssT0FBUyxHQUFLLE1BQVEsS0FBSyxRQUFRLE1BQU8sRUFBRSxHQUM5RSxlQUFlLEVBRWxCLGFBQThCLFVBQWUsRUFBRyxDQUM5QyxJQUFJLEVBQU0sS0FBSyxVQUFVLEVBQ3JCLEVBQUksSUFBSSxNQUFNLEVBQUksT0FBUyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQzFDLE9BQU8sRUFBTSxLQUFLLGNBQWMsRUFBSSxLQUFPLEVBQUksS0FDOUMsY0FBYyxFQUVqQixXQUE0QixVQUFlLENBQUMsRUFBTyxFQUFjLENBQy9ELElBQUksRUFBTyxFQUFPLEVBQ2xCLEdBQUksS0FBSyxRQUFRLGlCQXFCZixHQXBCQSxFQUFTLENBQ1AsU0FBVSxLQUFLLFNBQ2YsT0FBUSxDQUNOLFdBQVksS0FBSyxPQUFPLFdBQ3hCLFVBQVcsS0FBSyxVQUNoQixhQUFjLEtBQUssT0FBTyxhQUMxQixZQUFhLEtBQUssT0FBTyxXQUMzQixFQUNBLE9BQVEsS0FBSyxPQUNiLE1BQU8sS0FBSyxNQUNaLFFBQVMsS0FBSyxRQUNkLFFBQVMsS0FBSyxRQUNkLE9BQVEsS0FBSyxPQUNiLE9BQVEsS0FBSyxPQUNiLE1BQU8sS0FBSyxNQUNaLE9BQVEsS0FBSyxPQUNiLEdBQUksS0FBSyxHQUNULGVBQWdCLEtBQUssZUFBZSxNQUFNLENBQUMsRUFDM0MsS0FBTSxLQUFLLElBQ2IsRUFDSSxLQUFLLFFBQVEsT0FDZixFQUFPLE9BQU8sTUFBUSxLQUFLLE9BQU8sTUFBTSxNQUFNLENBQUMsRUFJbkQsR0FEQSxFQUFRLEVBQU0sR0FBRyxNQUFNLGlCQUFpQixFQUNwQyxFQUNGLEtBQUssVUFBWSxFQUFNLE9BWXpCLEdBVkEsS0FBSyxPQUFTLENBQ1osV0FBWSxLQUFLLE9BQU8sVUFDeEIsVUFBVyxLQUFLLFNBQVcsRUFDM0IsYUFBYyxLQUFLLE9BQU8sWUFDMUIsWUFBYSxFQUFRLEVBQU0sRUFBTSxPQUFTLEdBQUcsT0FBUyxFQUFNLEVBQU0sT0FBUyxHQUFHLE1BQU0sUUFBUSxFQUFFLEdBQUcsT0FBUyxLQUFLLE9BQU8sWUFBYyxFQUFNLEdBQUcsTUFDL0ksRUFDQSxLQUFLLFFBQVUsRUFBTSxHQUNyQixLQUFLLE9BQVMsRUFBTSxHQUNwQixLQUFLLFFBQVUsRUFDZixLQUFLLE9BQVMsS0FBSyxPQUFPLE9BQ3RCLEtBQUssUUFBUSxPQUNmLEtBQUssT0FBTyxNQUFRLENBQUMsS0FBSyxPQUFRLEtBQUssUUFBVSxLQUFLLE1BQU0sRUFPOUQsR0FMQSxLQUFLLE1BQVEsR0FDYixLQUFLLFdBQWEsR0FDbEIsS0FBSyxPQUFTLEtBQUssT0FBTyxNQUFNLEVBQU0sR0FBRyxNQUFNLEVBQy9DLEtBQUssU0FBVyxFQUFNLEdBQ3RCLEVBQVEsS0FBSyxjQUFjLEtBQUssS0FBTSxLQUFLLEdBQUksS0FBTSxFQUFjLEtBQUssZUFBZSxLQUFLLGVBQWUsT0FBUyxFQUFFLEVBQ2xILEtBQUssTUFBUSxLQUFLLE9BQ3BCLEtBQUssS0FBTyxHQUVkLEdBQUksRUFDRixPQUFPLFVBQ0UsS0FBSyxXQUFZLENBQzFCLFFBQVMsS0FBSyxFQUNaLEtBQUssR0FBSyxFQUFPLEdBRW5CLE1BQU8sR0FFVCxNQUFPLElBQ04sWUFBWSxFQUVmLEtBQXNCLFVBQWUsRUFBRyxDQUN0QyxHQUFJLEtBQUssS0FDUCxPQUFPLEtBQUssSUFFZCxJQUFLLEtBQUssT0FDUixLQUFLLEtBQU8sR0FFZCxJQUFJLEVBQU8sRUFBTyxFQUFXLEVBQzdCLElBQUssS0FBSyxNQUNSLEtBQUssT0FBUyxHQUNkLEtBQUssTUFBUSxHQUVmLElBQUksRUFBUSxLQUFLLGNBQWMsRUFDL0IsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFFaEMsR0FEQSxFQUFZLEtBQUssT0FBTyxNQUFNLEtBQUssTUFBTSxFQUFNLEdBQUcsRUFDOUMsS0FBZSxHQUFTLEVBQVUsR0FBRyxPQUFTLEVBQU0sR0FBRyxTQUd6RCxHQUZBLEVBQVEsRUFDUixFQUFRLEVBQ0osS0FBSyxRQUFRLGdCQUVmLEdBREEsRUFBUSxLQUFLLFdBQVcsRUFBVyxFQUFNLEVBQUUsRUFDdkMsSUFBVSxHQUNaLE9BQU8sVUFDRSxLQUFLLFdBQVksQ0FDMUIsRUFBUSxHQUNSLGFBRUEsT0FBTyxZQUVDLEtBQUssUUFBUSxLQUN2QixNQUlOLEdBQUksRUFBTyxDQUVULEdBREEsRUFBUSxLQUFLLFdBQVcsRUFBTyxFQUFNLEVBQU0sRUFDdkMsSUFBVSxHQUNaLE9BQU8sRUFFVCxNQUFPLEdBRVQsR0FBSSxLQUFLLFNBQVcsR0FDbEIsT0FBTyxLQUFLLFFBRVosUUFBTyxLQUFLLFdBQVcsMEJBQTRCLEtBQUssU0FBVyxHQUFLLHlCQUEyQixLQUFLLGFBQWEsRUFBRyxDQUN0SCxLQUFNLEdBQ04sTUFBTyxLQUNQLEtBQU0sS0FBSyxRQUNiLENBQUMsR0FFRixNQUFNLEVBRVQsSUFBcUIsV0FBZ0IsQ0FBRyxFQUFHLENBQ3pDLElBQUksRUFBSSxLQUFLLEtBQUssRUFDbEIsR0FBSSxFQUNGLE9BQU8sTUFFUCxRQUFPLEtBQUssSUFBSSxHQUVqQixLQUFLLEVBRVIsTUFBdUIsV0FBZ0IsQ0FBSyxDQUFDLEVBQVcsQ0FDdEQsS0FBSyxlQUFlLEtBQUssQ0FBUyxHQUNqQyxPQUFPLEVBRVYsU0FBMEIsV0FBZ0IsQ0FBUSxFQUFHLENBQ25ELElBQUksRUFBSSxLQUFLLGVBQWUsT0FBUyxFQUNyQyxHQUFJLEVBQUksRUFDTixPQUFPLEtBQUssZUFBZSxJQUFJLE1BRS9CLFFBQU8sS0FBSyxlQUFlLElBRTVCLFVBQVUsRUFFYixjQUErQixXQUFnQixDQUFhLEVBQUcsQ0FDN0QsR0FBSSxLQUFLLGVBQWUsUUFBVSxLQUFLLGVBQWUsS0FBSyxlQUFlLE9BQVMsR0FDakYsT0FBTyxLQUFLLFdBQVcsS0FBSyxlQUFlLEtBQUssZUFBZSxPQUFTLElBQUksVUFFNUUsUUFBTyxLQUFLLFdBQVcsUUFBVyxPQUVuQyxlQUFlLEVBRWxCLFNBQTBCLFdBQWdCLENBQVEsQ0FBQyxFQUFHLENBRXBELEdBREEsRUFBSSxLQUFLLGVBQWUsT0FBUyxFQUFJLEtBQUssSUFBSSxHQUFLLENBQUMsRUFDaEQsR0FBSyxFQUNQLE9BQU8sS0FBSyxlQUFlLE9BRTNCLE9BQU8sV0FFUixVQUFVLEVBRWIsVUFBMkIsV0FBZ0IsQ0FBUyxDQUFDLEVBQVcsQ0FDOUQsS0FBSyxNQUFNLENBQVMsR0FDbkIsV0FBVyxFQUVkLGVBQWdDLFdBQWdCLENBQWMsRUFBRyxDQUMvRCxPQUFPLEtBQUssZUFBZSxRQUMxQixnQkFBZ0IsRUFDbkIsUUFBUyxDQUFFLG1CQUFvQixFQUFLLEVBQ3BDLGNBQStCLFdBQWdCLENBQVMsQ0FBQyxFQUFJLEVBQUssRUFBMkIsRUFBVSxDQUNyRyxJQUFJLEVBQVUsRUFDZCxPQUFRLE9BQ0QsR0FFSCxPQURBLEtBQUssTUFBTSxnQkFBZ0IsRUFDcEIsaUJBQ1AsVUFDRyxHQUVILE9BREEsS0FBSyxNQUFNLFdBQVcsRUFDZixHQUNQLFVBQ0csR0FFSCxPQURBLEtBQUssU0FBUyxFQUNQLGtCQUNQLFVBQ0csR0FFSCxPQURBLEtBQUssTUFBTSxXQUFXLEVBQ2YsR0FDUCxVQUNHLEdBRUgsT0FEQSxLQUFLLFNBQVMsRUFDUCxrQkFDUCxVQUNHLEdBQ0gsS0FBSyxNQUFNLHFCQUFxQixFQUNoQyxVQUNHLEdBQ0gsS0FBSyxTQUFTLEVBQ2QsVUFDRyxHQUNILE1BQU8sZ0NBRUosR0FDSCxVQUNHLEdBQ0gsVUFDRyxJQUNILFVBQ0csSUFDSCxNQUFPLFFBRUosSUFDSCxVQUNHLElBQ0gsVUFDRyxJQUNILEtBQUssTUFBTSxNQUFNLEVBQ2pCLFVBQ0csSUFDSCxLQUFLLFNBQVMsRUFDZCxVQUNHLElBQ0gsTUFBTyxRQUVKLElBQ0gsS0FBSyxNQUFNLGNBQWMsRUFDekIsVUFDRyxJQUNILEtBQUssU0FBUyxFQUNkLFVBQ0csSUFDSCxLQUFLLFNBQVMsRUFDZCxLQUFLLE1BQU0sY0FBYyxFQUN6QixVQUNHLElBQ0gsTUFBTyxRQUVKLElBQ0gsS0FBSyxTQUFTLEVBQ2QsVUFDRyxJQUNILE1BQU8sUUFFSixJQUNILEtBQUssTUFBTSxPQUFPLEVBQ2xCLFVBQ0csSUFDSCxLQUFLLFNBQVMsRUFDZCxVQUNHLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxPQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxXQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxxQkFFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sT0FFSixJQUNILE1BQU8sWUFHVixXQUFXLEVBQ2QsTUFBTyxDQUFDLGFBQWMsd0JBQXlCLHdCQUF5Qix3QkFBeUIsd0JBQXlCLHlCQUEwQixhQUFjLGVBQWdCLHdCQUF5Qix1QkFBd0IsdUJBQXdCLGNBQWUsWUFBYSxnQkFBaUIscUJBQXNCLFlBQWEsY0FBZSxrQkFBbUIsa0JBQW1CLFdBQVksY0FBZSxXQUFZLGNBQWUsbUJBQW9CLGVBQWdCLGlCQUFrQixnQkFBaUIsNkJBQThCLDRCQUE2QixrQkFBbUIsNkJBQThCLCtCQUFnQywyQkFBNEIsMkJBQTRCLDZCQUE4QiwyQkFBNEIsNEJBQTZCLDhCQUErQiw2QkFBOEIsMkJBQTRCLDZCQUE4QiwyQkFBNEIsMkJBQTRCLDZCQUE4Qiw2QkFBOEIsc0JBQXVCLGlDQUFrQyx3QkFBeUIsZ0JBQWlCLGtCQUFtQixVQUFXLFVBQVcsU0FBUyxFQUN4cEMsV0FBWSxDQUFFLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxFQUFHLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxhQUFnQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxhQUFnQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLEtBQVEsQ0FBRSxNQUFTLENBQUMsR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxDQUFFLE1BQVMsQ0FBQyxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssQ0FBRSxDQUM3bEIsRUFDQSxPQUFPLEdBQ1AsRUFDRixFQUFRLE1BQVEsRUFDaEIsU0FBUyxDQUFNLEVBQUcsQ0FDaEIsS0FBSyxHQUFLLENBQUMsRUFLYixPQUhBLEVBQU8sRUFBUSxRQUFRLEVBQ3ZCLEVBQU8sVUFBWSxFQUNuQixFQUFRLE9BQVMsRUFDVixJQUFJLEdBQ1gsRUFDRixHQUFPLE9BQVMsR0FDWixJQUFnQixHQVFwQixXQUFNLE9BQU8sV0FBWSxFQUN6QixXQUFNLE9BQU8sV0FBc0IsRUFDbkMsV0FBTSxPQUFPLFdBQW1CLEVBQzVCLElBQW9CLENBQUUsT0FBUSxFQUFHLFNBQVUsQ0FBRSxFQUs3QyxHQUFXLENBQUMsRUFDWixHQUFXLENBQUMsRUFDWixHQUF3QixJQUFJLElBQzVCLEdBQVcsQ0FBQyxFQUNaLEdBQVEsQ0FBQyxFQUdULElBQU8sQ0FBQyxTQUFVLE9BQVEsT0FBUSxXQUFXLEVBQzdDLEdBQU8sQ0FBQyxFQU1SLElBQXlCLFVBQWUsRUFBRyxDQUM3QyxHQUFXLENBQUMsRUFDWixHQUFRLENBQUMsRUFDVCxHQUFpQixHQUNqQixHQUFPLENBQUMsRUFDUixHQUFVLEVBQ1YsR0FBZ0IsT0FDaEIsR0FBa0IsT0FDbEIsR0FBVyxDQUFDLEVBQ1osR0FBYSxHQUNiLEdBQWEsR0FDYixHQUFjLEdBQ2QsR0FBb0IsT0FDcEIsR0FBYyxHQUNkLEdBQVcsQ0FBQyxFQUNaLEdBQVcsQ0FBQyxFQUNaLEdBQW9CLEdBQ3BCLEdBQVUsR0FDVixHQUFZLEVBQ1osR0FBd0IsSUFBSSxJQUM1QixHQUFNLEVBQ04sR0FBVSxTQUNWLEdBQVUsWUFDVCxPQUFPLEVBQ04sSUFBZ0MsVUFBZSxDQUFDLEVBQUssQ0FDdkQsR0FBYSxHQUNaLGVBQWUsRUFDZCxJQUFnQyxVQUFlLEVBQUcsQ0FDcEQsT0FBTyxJQUNOLGVBQWUsRUFDZCxJQUFrQyxVQUFlLENBQUMsRUFBSyxDQUN6RCxHQUFlLEdBQ2QsaUJBQWlCLEVBQ2hCLElBQWtDLFVBQWUsRUFBRyxDQUN0RCxPQUFPLElBQ04saUJBQWlCLEVBQ2hCLElBQWlDLFVBQWUsQ0FBQyxFQUFLLENBQ3hELEdBQWMsR0FDYixnQkFBZ0IsRUFDZixJQUFpQyxVQUFlLEVBQUcsQ0FDckQsT0FBTyxJQUNOLGdCQUFnQixFQUNmLElBQWdDLFVBQWUsQ0FBQyxFQUFLLENBQ3ZELEdBQWEsR0FDWixlQUFlLEVBQ2QsSUFBMEMsVUFBZSxFQUFHLENBQzlELEdBQW9CLElBQ25CLHlCQUF5QixFQUN4QixJQUF1QyxVQUFlLEVBQUcsQ0FDM0QsT0FBTyxJQUNOLHNCQUFzQixFQUNyQixJQUFnQyxVQUFlLEVBQUcsQ0FDcEQsR0FBVSxJQUNULGVBQWUsRUFDZCxJQUFpQyxVQUFlLEVBQUcsQ0FDckQsT0FBTyxJQUNOLGdCQUFnQixFQUNmLElBQWlDLFVBQWUsQ0FBQyxFQUFLLENBQ3hELEdBQWMsR0FDYixnQkFBZ0IsRUFDZixJQUFpQyxVQUFlLEVBQUcsQ0FDckQsT0FBTyxJQUNOLGdCQUFnQixFQUNmLElBQWdDLFVBQWUsRUFBRyxDQUNwRCxPQUFPLElBQ04sZUFBZSxFQUNkLElBQThCLFVBQWUsQ0FBQyxFQUFLLENBQ3JELEdBQVcsRUFBSSxZQUFZLEVBQUUsTUFBTSxRQUFRLEdBQzFDLGFBQWEsRUFDWixJQUE4QixVQUFlLEVBQUcsQ0FDbEQsT0FBTyxJQUNOLGFBQWEsRUFDWixJQUE4QixVQUFlLENBQUMsRUFBSyxDQUNyRCxHQUFXLEVBQUksWUFBWSxFQUFFLE1BQU0sUUFBUSxHQUMxQyxhQUFhLEVBQ1osSUFBOEIsVUFBZSxFQUFHLENBQ2xELE9BQU8sSUFDTixhQUFhLEVBQ1osSUFBMkIsVUFBZSxFQUFHLENBQy9DLE9BQU8sSUFDTixVQUFVLEVBQ1QsSUFBNkIsVUFBZSxDQUFDLEVBQUssQ0FDcEQsR0FBaUIsRUFDakIsR0FBUyxLQUFLLENBQUcsR0FDaEIsWUFBWSxFQUNYLElBQThCLFVBQWUsRUFBRyxDQUNsRCxPQUFPLElBQ04sYUFBYSxFQUNaLElBQTJCLFVBQWUsRUFBRyxDQUMvQyxJQUFJLEVBQW9CLElBQWEsRUFDckMsTUFBTSxFQUFXLEdBQ2pCLElBQUksRUFBaUIsRUFDckIsT0FBUSxHQUFxQixFQUFpQixFQUM1QyxFQUFvQixJQUFhLEVBQ2pDLElBR0YsT0FEQSxHQUFRLEdBQ0QsSUFDTixVQUFVLEVBQ1QsSUFBZ0MsVUFBZSxDQUFDLEVBQU0sRUFBYSxFQUFXLEVBQVcsQ0FDM0YsR0FBSSxFQUFVLFNBQVMsRUFBSyxPQUFPLEVBQVksS0FBSyxDQUFDLENBQUMsRUFDcEQsTUFBTyxHQUVULEdBQUksRUFBVSxTQUFTLFVBQVUsSUFBTSxFQUFLLFdBQVcsSUFBTSxJQUFrQixLQUFZLEVBQUssV0FBVyxJQUFNLElBQWtCLElBQVcsR0FDNUksTUFBTyxHQUVULEdBQUksRUFBVSxTQUFTLEVBQUssT0FBTyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQ3RELE1BQU8sR0FFVCxPQUFPLEVBQVUsU0FBUyxFQUFLLE9BQU8sRUFBWSxLQUFLLENBQUMsQ0FBQyxHQUN4RCxlQUFlLEVBQ2QsSUFBNkIsVUFBZSxDQUFDLEVBQUssQ0FDcEQsR0FBVSxHQUNULFlBQVksRUFDWCxJQUE2QixVQUFlLEVBQUcsQ0FDakQsT0FBTyxJQUNOLFlBQVksRUFDWCxJQUE2QixVQUFlLENBQUMsRUFBVSxDQUN6RCxHQUFVLEdBQ1QsWUFBWSxFQUNYLElBQWlDLFVBQWUsQ0FBQyxFQUFNLEVBQWEsRUFBVyxFQUFXLENBQzVGLElBQUssRUFBVSxRQUFVLEVBQUssY0FDNUIsT0FFRixJQUFJLEVBQ0osR0FBSSxFQUFLLHFCQUFxQixLQUM1QixFQUFZLFdBQU0sRUFBSyxTQUFTLE1BRWhDLEdBQVksV0FBTSxFQUFLLFVBQVcsRUFBYSxFQUFJLEVBRXJELEVBQVksRUFBVSxJQUFJLEVBQUcsR0FBRyxFQUNoQyxJQUFJLEVBQ0osR0FBSSxFQUFLLG1CQUFtQixLQUMxQixFQUFrQixXQUFNLEVBQUssT0FBTyxNQUVwQyxHQUFrQixXQUFNLEVBQUssUUFBUyxFQUFhLEVBQUksRUFFekQsTUFBTyxFQUFjLEdBQWlCLElBQ3BDLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDRixFQUNBLEVBQUssUUFBVSxFQUFhLE9BQU8sRUFDbkMsRUFBSyxjQUFnQixHQUNwQixnQkFBZ0IsRUFDZixJQUErQixVQUFlLENBQUMsRUFBVyxFQUFTLEVBQWEsRUFBVyxFQUFXLENBQ3hHLElBQUksRUFBVSxHQUNWLEVBQWdCLEtBQ3BCLE1BQU8sR0FBYSxFQUFTLENBQzNCLElBQUssRUFDSCxFQUFnQixFQUFRLE9BQU8sRUFHakMsR0FEQSxFQUFVLElBQWMsRUFBVyxFQUFhLEVBQVcsQ0FBUyxFQUNoRSxFQUNGLEVBQVUsRUFBUSxJQUFJLEVBQUcsR0FBRyxFQUU5QixFQUFZLEVBQVUsSUFBSSxFQUFHLEdBQUcsRUFFbEMsTUFBTyxDQUFDLEVBQVMsQ0FBYSxHQUM3QixjQUFjLEVBQ2IsR0FBK0IsVUFBZSxDQUFDLEVBQVUsRUFBYSxFQUFLLENBQzdFLEVBQU0sRUFBSSxLQUFLLEVBRWYsTUFBTSxFQURpQiw2QkFDZSxLQUFLLENBQUcsRUFDOUMsR0FBSSxJQUFtQixLQUFNLENBQzNCLElBQUksRUFBYSxLQUNqQixRQUFXLEtBQU0sRUFBZSxPQUFPLElBQUksTUFBTSxHQUFHLEVBQUcsQ0FDckQsSUFBSSxFQUFPLEdBQWEsQ0FBRSxFQUMxQixHQUFJLElBQWMsVUFBTyxHQUFjLEVBQUssUUFBVSxFQUFXLFNBQy9ELEVBQWEsRUFHakIsR0FBSSxFQUNGLE9BQU8sRUFBVyxRQUVwQixNQUFNLEVBQXdCLElBQUksS0FFbEMsT0FEQSxFQUFNLFNBQVMsRUFBRyxFQUFHLEVBQUcsQ0FBQyxFQUNsQixFQUVULElBQUksRUFBUSxXQUFNLEVBQUssRUFBWSxLQUFLLEVBQUcsRUFBSSxFQUMvQyxHQUFJLEVBQU0sUUFBUSxFQUNoQixPQUFPLEVBQU0sT0FBTyxNQUNmLENBQ0wsRUFBSSxNQUFNLGdCQUFrQixDQUFHLEVBQy9CLEVBQUksTUFBTSxvQkFBc0IsRUFBWSxLQUFLLENBQUMsRUFDbEQsTUFBTSxFQUFJLElBQUksS0FBSyxDQUFHLEVBQ3RCLEdBQUksSUFBVyxRQUFLLE1BQU0sRUFBRSxRQUFRLENBQUMsR0FLckMsRUFBRSxZQUFZLEVBQUksTUFBUSxFQUFFLFlBQVksRUFBSSxJQUMxQyxNQUFNLElBQUksTUFBTSxnQkFBa0IsQ0FBRyxFQUV2QyxPQUFPLElBRVIsY0FBYyxFQUNiLElBQWdDLFVBQWUsQ0FBQyxFQUFLLENBQ3ZELE1BQU0sRUFBWSxrQ0FBa0MsS0FBSyxFQUFJLEtBQUssQ0FBQyxFQUNuRSxHQUFJLElBQWMsS0FDaEIsTUFBTyxDQUFDLE9BQU8sV0FBVyxFQUFVLEVBQUUsRUFBRyxFQUFVLEVBQUUsRUFFdkQsTUFBTyxDQUFDLElBQUssSUFBSSxHQUNoQixlQUFlLEVBQ2QsSUFBNkIsVUFBZSxDQUFDLEVBQVUsRUFBYSxFQUFLLEVBQVksR0FBTyxDQUM5RixFQUFNLEVBQUksS0FBSyxFQUVmLE1BQU0sRUFEaUIsNkJBQ2UsS0FBSyxDQUFHLEVBQzlDLEdBQUksSUFBbUIsS0FBTSxDQUMzQixJQUFJLEVBQWUsS0FDbkIsUUFBVyxLQUFNLEVBQWUsT0FBTyxJQUFJLE1BQU0sR0FBRyxFQUFHLENBQ3JELElBQUksRUFBTyxHQUFhLENBQUUsRUFDMUIsR0FBSSxJQUFjLFVBQU8sR0FBZ0IsRUFBSyxVQUFZLEVBQWEsV0FDckUsRUFBZSxFQUduQixHQUFJLEVBQ0YsT0FBTyxFQUFhLFVBRXRCLE1BQU0sRUFBd0IsSUFBSSxLQUVsQyxPQURBLEVBQU0sU0FBUyxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQ2xCLEVBRVQsSUFBSSxFQUFhLFdBQU0sRUFBSyxFQUFZLEtBQUssRUFBRyxFQUFJLEVBQ3BELEdBQUksRUFBVyxRQUFRLEVBQUcsQ0FDeEIsR0FBSSxFQUNGLEVBQWEsRUFBVyxJQUFJLEVBQUcsR0FBRyxFQUVwQyxPQUFPLEVBQVcsT0FBTyxFQUUzQixJQUFJLEVBQVUsV0FBTSxDQUFRLEVBQzVCLE1BQU8sRUFBZSxHQUFnQixJQUFjLENBQUcsRUFDdkQsSUFBSyxPQUFPLE1BQU0sQ0FBYSxFQUFHLENBQ2hDLE1BQU0sRUFBYSxFQUFRLElBQUksRUFBZSxDQUFZLEVBQzFELEdBQUksRUFBVyxRQUFRLEVBQ3JCLEVBQVUsRUFHZCxPQUFPLEVBQVEsT0FBTyxHQUNyQixZQUFZLEVBRVgsR0FBMEIsVUFBZSxDQUFDLEVBQU8sQ0FDbkQsR0FBSSxJQUFlLE9BRWpCLE9BREEsR0FBVSxHQUFVLEVBQ2IsT0FBUyxHQUVsQixPQUFPLEdBQ04sU0FBUyxFQUNSLElBQThCLFVBQWUsQ0FBQyxFQUFVLEVBQVMsQ0FDbkUsSUFBSSxFQUNKLEdBQUksRUFBUSxPQUFPLEVBQUcsQ0FBQyxJQUFNLElBQzNCLEVBQUssRUFBUSxPQUFPLEVBQUcsRUFBUSxNQUFNLE1BRXJDLEdBQUssRUFFUCxNQUFNLEVBQU8sRUFBRyxNQUFNLEdBQUcsRUFDbkIsRUFBTyxDQUFDLEVBQ2QsR0FBWSxFQUFNLEVBQU0sR0FBSSxFQUM1QixRQUFTLEVBQUksRUFBRyxFQUFJLEVBQUssT0FBUSxJQUMvQixFQUFLLEdBQUssRUFBSyxHQUFHLEtBQUssRUFFekIsSUFBSSxFQUFjLEdBQ2xCLE9BQVEsRUFBSyxZQUNOLEdBQ0gsRUFBSyxHQUFLLEdBQVEsRUFDbEIsRUFBSyxVQUFZLEVBQVMsUUFDMUIsRUFBYyxFQUFLLEdBQ25CLFVBQ0csR0FDSCxFQUFLLEdBQUssR0FBUSxFQUNsQixFQUFLLFVBQVksR0FBa0IsT0FBRyxHQUFZLEVBQUssRUFBRSxFQUN6RCxFQUFjLEVBQUssR0FDbkIsVUFDRyxHQUNILEVBQUssR0FBSyxHQUFRLEVBQUssRUFBRSxFQUN6QixFQUFLLFVBQVksR0FBa0IsT0FBRyxHQUFZLEVBQUssRUFBRSxFQUN6RCxFQUFjLEVBQUssR0FDbkIsZUFHSixHQUFJLEVBQ0YsRUFBSyxRQUFVLElBQVcsRUFBSyxVQUFXLEdBQVksRUFBYSxFQUFpQixFQUNwRixFQUFLLGNBQWdCLFdBQU0sRUFBYSxhQUFjLEVBQUksRUFBRSxRQUFRLEVBQ3BFLElBQWUsRUFBTSxHQUFZLEdBQVUsRUFBUSxFQUVyRCxPQUFPLEdBQ04sYUFBYSxFQUNaLElBQTRCLFVBQWUsQ0FBQyxFQUFZLEVBQVMsQ0FDbkUsSUFBSSxFQUNKLEdBQUksRUFBUSxPQUFPLEVBQUcsQ0FBQyxJQUFNLElBQzNCLEVBQUssRUFBUSxPQUFPLEVBQUcsRUFBUSxNQUFNLE1BRXJDLEdBQUssRUFFUCxNQUFNLEVBQU8sRUFBRyxNQUFNLEdBQUcsRUFDbkIsRUFBTyxDQUFDLEVBQ2QsR0FBWSxFQUFNLEVBQU0sR0FBSSxFQUM1QixRQUFTLEVBQUksRUFBRyxFQUFJLEVBQUssT0FBUSxJQUMvQixFQUFLLEdBQUssRUFBSyxHQUFHLEtBQUssRUFFekIsT0FBUSxFQUFLLFlBQ04sR0FDSCxFQUFLLEdBQUssR0FBUSxFQUNsQixFQUFLLFVBQVksQ0FDZixLQUFNLGNBQ04sR0FBSSxDQUNOLEVBQ0EsRUFBSyxRQUFVLENBQ2IsS0FBTSxFQUFLLEVBQ2IsRUFDQSxVQUNHLEdBQ0gsRUFBSyxHQUFLLEdBQVEsRUFDbEIsRUFBSyxVQUFZLENBQ2YsS0FBTSxlQUNOLFVBQVcsRUFBSyxFQUNsQixFQUNBLEVBQUssUUFBVSxDQUNiLEtBQU0sRUFBSyxFQUNiLEVBQ0EsVUFDRyxHQUNILEVBQUssR0FBSyxHQUFRLEVBQUssRUFBRSxFQUN6QixFQUFLLFVBQVksQ0FDZixLQUFNLGVBQ04sVUFBVyxFQUFLLEVBQ2xCLEVBQ0EsRUFBSyxRQUFVLENBQ2IsS0FBTSxFQUFLLEVBQ2IsRUFDQSxlQUdKLE9BQU8sR0FDTixXQUFXLEVBR1YsR0FBVyxDQUFDLEVBQ1osSUFBUyxDQUFDLEVBQ1YsSUFBMEIsVUFBZSxDQUFDLEVBQU8sRUFBTSxDQUN6RCxNQUFNLEVBQVUsQ0FDZCxRQUFTLEdBQ1QsS0FBTSxHQUNOLFVBQVcsR0FDWCxjQUFlLEdBQ2YsY0FBZSxLQUNmLElBQUssQ0FBRSxNQUFLLEVBQ1osS0FBTSxFQUNOLFFBQVMsQ0FBQyxDQUNaLEVBQ00sRUFBVyxJQUFVLEdBQVksQ0FBSSxFQUMzQyxFQUFRLElBQUksVUFBWSxFQUFTLFVBQ2pDLEVBQVEsSUFBSSxRQUFVLEVBQVMsUUFDL0IsRUFBUSxHQUFLLEVBQVMsR0FDdEIsRUFBUSxXQUFhLEdBQ3JCLEVBQVEsT0FBUyxFQUFTLE9BQzFCLEVBQVEsS0FBTyxFQUFTLEtBQ3hCLEVBQVEsS0FBTyxFQUFTLEtBQ3hCLEVBQVEsVUFBWSxFQUFTLFVBQzdCLEVBQVEsTUFBUSxHQUNoQixLQUNBLE1BQU0sRUFBTSxHQUFTLEtBQUssQ0FBTyxFQUNqQyxHQUFhLEVBQVEsR0FDckIsSUFBTyxFQUFRLElBQU0sRUFBTSxHQUMxQixTQUFTLEVBQ1IsR0FBK0IsVUFBZSxDQUFDLEVBQUksQ0FDckQsTUFBTSxFQUFNLElBQU8sR0FDbkIsT0FBTyxHQUFTLElBQ2YsY0FBYyxFQUNiLElBQTZCLFVBQWUsQ0FBQyxFQUFPLEVBQU0sQ0FDNUQsTUFBTSxFQUFVLENBQ2QsUUFBUyxHQUNULEtBQU0sR0FDTixZQUFhLEVBQ2IsS0FBTSxFQUNOLFFBQVMsQ0FBQyxDQUNaLEVBQ00sRUFBVyxJQUFZLEdBQVUsQ0FBSSxFQUMzQyxFQUFRLFVBQVksRUFBUyxVQUM3QixFQUFRLFFBQVUsRUFBUyxRQUMzQixFQUFRLEdBQUssRUFBUyxHQUN0QixFQUFRLE9BQVMsRUFBUyxPQUMxQixFQUFRLEtBQU8sRUFBUyxLQUN4QixFQUFRLEtBQU8sRUFBUyxLQUN4QixFQUFRLFVBQVksRUFBUyxVQUM3QixHQUFXLEVBQ1gsR0FBTSxLQUFLLENBQU8sR0FDakIsWUFBWSxFQUNYLElBQStCLFVBQWUsRUFBRyxDQUNuRCxNQUFNLEVBQThCLFVBQWUsQ0FBQyxFQUFLLENBQ3ZELE1BQU0sRUFBTyxHQUFTLEdBQ3RCLElBQUksRUFBWSxHQUNoQixPQUFRLEdBQVMsR0FBSyxJQUFJLFVBQVUsVUFDN0IsY0FBZSxDQUNsQixNQUFNLEVBQVcsR0FBYSxFQUFLLFVBQVUsRUFDN0MsRUFBSyxVQUFZLEVBQVMsUUFDMUIsS0FDRixLQUNLLGVBRUgsR0FEQSxFQUFZLEdBQWtCLE9BQUcsR0FBWSxHQUFTLEdBQUssSUFBSSxVQUFVLFNBQVMsRUFDOUUsRUFDRixHQUFTLEdBQUssVUFBWSxFQUU1QixNQUVKLEdBQUksR0FBUyxHQUFLLFdBT2hCLEdBTkEsR0FBUyxHQUFLLFFBQVUsSUFDdEIsR0FBUyxHQUFLLFVBQ2QsR0FDQSxHQUFTLEdBQUssSUFBSSxRQUFRLEtBQzFCLEVBQ0YsRUFDSSxHQUFTLEdBQUssUUFDaEIsR0FBUyxHQUFLLFVBQVksR0FDMUIsR0FBUyxHQUFLLGNBQWdCLFdBQzVCLEdBQVMsR0FBSyxJQUFJLFFBQVEsS0FDMUIsYUFDQSxFQUNGLEVBQUUsUUFBUSxFQUNWLElBQWUsR0FBUyxHQUFNLEdBQVksR0FBVSxFQUFRLEVBR2hFLE9BQU8sR0FBUyxHQUFLLFdBQ3BCLGFBQWEsRUFDaEIsSUFBSSxFQUFlLEdBQ25CLFFBQVksRUFBRyxLQUFZLEdBQVMsUUFBUSxFQUMxQyxFQUFZLENBQUMsRUFDYixFQUFlLEdBQWdCLEVBQVEsVUFFekMsT0FBTyxHQUNOLGNBQWMsRUFDYixJQUEwQixVQUFlLENBQUMsRUFBSyxFQUFVLENBQzNELElBQUksRUFBVSxFQUNkLEdBQUksR0FBVSxFQUFFLGdCQUFrQixRQUNoQyxFQUFVLGdCQUFZLENBQVEsRUFFaEMsRUFBSSxNQUFNLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFJLENBRWxDLEdBRGMsR0FBYSxDQUFFLElBQ1IsT0FDbkIsSUFBUSxFQUFJLElBQU0sQ0FDaEIsT0FBTyxLQUFLLEVBQVMsT0FBTyxFQUM3QixFQUNELEdBQU0sSUFBSSxFQUFJLENBQU8sRUFFeEIsRUFDRCxJQUFTLEVBQUssV0FBVyxHQUN4QixTQUFTLEVBQ1IsSUFBMkIsVUFBZSxDQUFDLEVBQUssRUFBVyxDQUM3RCxFQUFJLE1BQU0sR0FBRyxFQUFFLGdCQUFnQixDQUFDLEVBQUksQ0FDbEMsSUFBSSxFQUFVLEdBQWEsQ0FBRSxFQUM3QixHQUFJLElBQWlCLE9BQ25CLEVBQVEsUUFBUSxLQUFLLENBQVMsRUFFakMsR0FDQSxVQUFVLEVBQ1QsSUFBOEIsVUFBZSxDQUFDLEVBQUksRUFBYyxFQUFjLENBQ2hGLEdBQUksR0FBVSxFQUFFLGdCQUFrQixRQUNoQyxPQUVGLEdBQUksSUFBc0IsT0FDeEIsT0FFRixJQUFJLEVBQVUsQ0FBQyxFQUNmLFVBQVcsSUFBaUIsU0FBVSxDQUNwQyxFQUFVLEVBQWEsTUFBTSwrQkFBK0IsRUFDNUQsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFRLE9BQVEsSUFBSyxDQUN2QyxJQUFJLEVBQU8sRUFBUSxHQUFHLEtBQUssRUFDM0IsR0FBSSxFQUFLLFdBQVcsR0FBRyxHQUFLLEVBQUssU0FBUyxHQUFHLEVBQzNDLEVBQU8sRUFBSyxPQUFPLEVBQUcsRUFBSyxPQUFTLENBQUMsRUFFdkMsRUFBUSxHQUFLLEdBR2pCLEdBQUksRUFBUSxTQUFXLEVBQ3JCLEVBQVEsS0FBSyxDQUFFLEVBR2pCLEdBRGMsR0FBYSxDQUFFLElBQ1IsT0FDbkIsSUFBUSxFQUFJLElBQU0sQ0FDaEIsR0FBYyxRQUFRLEVBQWMsR0FBRyxDQUFPLEVBQy9DLEdBRUYsYUFBYSxFQUNaLElBQTBCLFVBQWUsQ0FBQyxFQUFJLEVBQWtCLENBQ2xFLEdBQUssYUFDSyxFQUFHLENBQ1QsTUFBTSxFQUFPLFNBQVMsY0FBYyxRQUFRLEtBQU0sRUFDbEQsR0FBSSxJQUFTLEtBQ1gsRUFBSyxpQkFBaUIsZ0JBQWlCLEVBQUcsQ0FDeEMsRUFBaUIsRUFDbEIsV0FHRyxFQUFHLENBQ1QsTUFBTSxFQUFPLFNBQVMsY0FBYyxRQUFRLFVBQVcsRUFDdkQsR0FBSSxJQUFTLEtBQ1gsRUFBSyxpQkFBaUIsZ0JBQWlCLEVBQUcsQ0FDeEMsRUFBaUIsRUFDbEIsRUFHUCxHQUNDLFNBQVMsRUFDUixJQUFnQyxVQUFlLENBQUMsRUFBSyxFQUFjLEVBQWMsQ0FDbkYsRUFBSSxNQUFNLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFJLENBQ2xDLElBQVksRUFBSSxFQUFjLENBQVksRUFDM0MsRUFDRCxJQUFTLEVBQUssV0FBVyxHQUN4QixlQUFlLEVBQ2QsSUFBZ0MsVUFBZSxDQUFDLEVBQVMsQ0FDM0QsR0FBSyxnQkFBZ0IsQ0FBQyxFQUFLLENBQ3pCLEVBQUksQ0FBTyxFQUNaLEdBQ0EsZUFBZSxFQUNkLElBQWtCLENBQ3BCLFVBQTJCLEVBQU8sSUFBTSxHQUFVLEVBQUUsTUFBTyxXQUFXLEVBQ3RFLE1BQU8sSUFDUCxrQkFDQSxrQkFDQSw0QkFDQSx5QkFDQSxrQkFDQSxtQkFDQSxrQkFDQSxrQkFDQSxvQkFDQSxvQkFDQSxtQkFDQSxtQkFDQSxlQUNBLGVBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EscUJBQ0EscUJBQ0EsZUFDQSxnQkFDQSxhQUNBLFlBQ0EsZ0JBQ0EsZUFDQSxnQkFDQSxnQkFDQSxnQkFDQSxnQkFDQSxrQkFDQSxZQUNBLGFBQ0Esa0JBQ0Esa0JBQ0Esa0JBQ0EsZUFDQSxlQUNBLGNBQ0YsRUFnQkEsRUFBTyxHQUFhLGFBQWEsRUE0QjdCLElBQTBCLFVBQWUsRUFBRyxDQUM5QyxFQUFJLE1BQU0sZ0RBQWdELEdBQ3pELFNBQVMsRUFDUixJQUEyQixDQUM3QixPQUFRLEdBQ1IsUUFBUyxHQUNULFVBQVcsR0FDWCxTQUFVLEdBQ1YsT0FBUSxHQUNSLFNBQVUsR0FDVixPQUFRLEVBQ1YsRUFDSSxJQUFzQyxFQUFPLENBQUMsRUFBUSxJQUFnQixDQUN4RSxJQUFJLEVBQVcsQ0FBQyxHQUFHLENBQU0sRUFBRSxJQUFJLElBQU0sSUFBUyxFQUMxQyxFQUFTLENBQUMsR0FBRyxDQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUcsSUFBTSxFQUFFLFVBQVksRUFBRSxXQUFhLEVBQUUsTUFBUSxFQUFFLEtBQUssRUFDbEYsRUFBbUIsRUFDdkIsUUFBVyxLQUFXLEVBQ3BCLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBUyxPQUFRLElBQ25DLEdBQUksRUFBUSxXQUFhLEVBQVMsR0FBSSxDQUdwQyxHQUZBLEVBQVMsR0FBSyxFQUFRLFFBQ3RCLEVBQVEsTUFBUSxFQUFJLEVBQ2hCLEVBQUksRUFDTixFQUFtQixFQUVyQixNQUlOLE9BQU8sR0FDTixxQkFBcUIsRUFFcEIsSUFBdUIsVUFBZSxDQUFDLEVBQU0sRUFBSSxFQUFTLEVBQVMsQ0FDckUsTUFBTSxFQUFPLEdBQVUsRUFBRSxNQUNuQixFQUFnQixHQUFVLEVBQUUsY0FDbEMsSUFBSSxFQUNKLEdBQUksSUFBa0IsVUFDcEIsRUFBaUIsR0FBTyxLQUFPLENBQUUsRUFFbkMsTUFBTSxFQUFPLElBQWtCLFVBQVksR0FBTyxFQUFlLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixJQUFJLEVBQUksR0FBTyxNQUFNLEVBQzNHLEVBQU0sSUFBa0IsVUFBWSxFQUFlLE1BQU0sRUFBRSxHQUFHLGdCQUFrQixTQUNoRixFQUFPLEVBQUksZUFBZSxDQUFFLEVBRWxDLEdBREEsR0FBSSxFQUFLLGNBQWMsWUFDbkIsS0FBVyxPQUNiLEdBQUksS0FFTixHQUFJLEVBQUssV0FBa0IsT0FDekIsR0FBSSxFQUFLLFNBRVgsTUFBTSxFQUFZLEVBQVEsR0FBRyxTQUFTLEVBQ3RDLElBQUksRUFBYSxDQUFDLEVBQ2xCLFFBQVcsS0FBVyxFQUNwQixFQUFXLEtBQUssRUFBUSxJQUFJLEVBRTlCLEVBQWEsRUFBWSxDQUFVLEVBQ25DLE1BQU0sRUFBa0IsQ0FBQyxFQUN6QixJQUFJLEVBQUksRUFBSSxFQUFLLFdBQ2pCLEdBQUksRUFBUSxHQUFHLGVBQWUsSUFBTSxXQUFhLEVBQUssY0FBZ0IsVUFBVyxDQUMvRSxNQUFNLEVBQW1CLENBQUMsRUFDMUIsUUFBVyxLQUFXLEVBQ3BCLEdBQUksRUFBaUIsRUFBUSxXQUFrQixPQUM3QyxFQUFpQixFQUFRLFNBQVcsQ0FBQyxDQUFPLE1BRTVDLEdBQWlCLEVBQVEsU0FBUyxLQUFLLENBQU8sRUFHbEQsSUFBSSxFQUFnQixFQUNwQixRQUFXLEtBQVksT0FBTyxLQUFLLENBQWdCLEVBQUcsQ0FDcEQsTUFBTSxFQUFpQixJQUFvQixFQUFpQixHQUFXLENBQWEsRUFBSSxFQUN4RixHQUFpQixFQUNqQixHQUFLLEdBQWtCLEVBQUssVUFBWSxFQUFLLFFBQzdDLEVBQWdCLEdBQVksT0FFekIsQ0FDTCxHQUFLLEVBQVUsUUFBVSxFQUFLLFVBQVksRUFBSyxRQUMvQyxRQUFXLEtBQVksRUFDckIsRUFBZ0IsR0FBWSxFQUFVLE9BQU8sQ0FBQyxJQUFTLEVBQUssT0FBUyxDQUFRLEVBQUUsT0FHbkYsRUFBSyxhQUFhLFVBQVcsT0FBUyxHQUFJLElBQU0sQ0FBQyxFQUNqRCxNQUFNLEVBQU0sRUFBSyxPQUFPLFFBQVEsS0FBTSxFQUNoQyxFQUFZLEdBQVUsRUFBRSxPQUFPLENBQ25DLEdBQUksVUFBbUIsQ0FBQyxFQUFHLENBQ3pCLE9BQU8sRUFBRSxVQUNWLEVBQ0QsR0FBSSxVQUFtQixDQUFDLEVBQUcsQ0FDekIsT0FBTyxFQUFFLFFBQ1YsQ0FDSCxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUcsR0FBSSxFQUFLLFlBQWMsRUFBSyxZQUFZLENBQUMsRUFDM0QsU0FBUyxDQUFXLENBQUMsRUFBRyxFQUFHLENBQ3pCLE1BQU0sRUFBUSxFQUFFLFVBQ1YsRUFBUSxFQUFFLFVBQ2hCLElBQUksRUFBUyxFQUNiLEdBQUksRUFBUSxFQUNWLEVBQVMsVUFDQSxFQUFRLEVBQ2pCLEVBQVMsR0FFWCxPQUFPLEVBRVQsRUFBTyxFQUFhLGFBQWEsRUFDakMsRUFBVSxLQUFLLENBQVcsRUFDMUIsRUFBVSxFQUFXLEdBQUcsQ0FBQyxFQUN6QixHQUFpQixFQUFLLEVBQUcsR0FBRyxFQUFLLFdBQVcsRUFDNUMsRUFBSSxPQUFPLE1BQU0sRUFBRSxLQUFLLEVBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssSUFBSyxHQUFJLENBQUMsRUFBRSxLQUFLLElBQUssRUFBSyxjQUFjLEVBQUUsS0FBSyxRQUFTLFdBQVcsRUFDL0gsU0FBUyxDQUFTLENBQUMsRUFBUSxFQUFXLEVBQVksQ0FDaEQsTUFBTSxFQUFZLEVBQUssVUFDakIsRUFBTSxFQUFZLEVBQUssT0FDdkIsRUFBYSxFQUFLLFdBQ2xCLEVBQWMsRUFBSyxZQUNuQixFQUFhLEdBQVksRUFBRSxPQUFPLENBQUMsRUFBRyxFQUFXLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFXLFNBQVMsQ0FBQyxFQUFFLFlBQVksRUFBYyxFQUN4SCxFQUNFLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQVEsR0FBRyxZQUFZLEVBQ3ZCLEVBQVEsR0FBRyxZQUFZLENBQ3pCLEVBQ0EsRUFBUyxFQUFhLEVBQVksRUFBVyxDQUFVLEVBQ3ZELEVBQVUsRUFBUSxFQUFLLEVBQVksRUFBYSxFQUFXLEVBQVksRUFBVyxDQUFVLEVBQzVGLEVBQVcsRUFBSyxFQUFZLEVBQWEsRUFBVyxDQUFVLEVBQzlELEVBQVUsRUFBYSxFQUFZLEVBQVcsQ0FBVSxFQUUxRCxFQUFPLEVBQVcsV0FBVyxFQUM3QixTQUFTLENBQVMsQ0FBQyxFQUFVLEVBQVEsRUFBVyxFQUFZLEVBQWMsRUFBZSxFQUFJLENBRTNGLE1BQU0sRUFEcUIsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFTLElBQUksQ0FBQyxJQUFTLEVBQUssS0FBSyxDQUFDLENBQUMsRUFDbkMsSUFBSSxDQUFDLElBQVEsRUFBUyxLQUFLLENBQUMsSUFBUyxFQUFLLFFBQVUsQ0FBRyxDQUFDLEVBQy9GLEVBQUksT0FBTyxHQUFHLEVBQUUsVUFBVSxNQUFNLEVBQUUsS0FBSyxDQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSyxDQUFDLEVBQUUsS0FBSyxZQUFhLENBQUMsRUFBRyxFQUFHLENBRS9HLE9BREEsRUFBSSxFQUFFLE1BQ0MsRUFBSSxFQUFTLEVBQVksRUFDakMsRUFBRSxLQUFLLGdCQUFpQixFQUFHLENBQzFCLE9BQU8sRUFBSyxFQUFLLGFBQWUsRUFDakMsRUFBRSxLQUFLLFNBQVUsQ0FBTSxFQUFFLEtBQUssZ0JBQWlCLENBQUMsRUFBRyxDQUNsRCxRQUFZLEVBQUcsS0FBYSxFQUFXLFFBQVEsRUFDN0MsR0FBSSxFQUFFLE9BQVMsRUFDYixNQUFPLGtCQUFvQixFQUFJLEVBQUssb0JBR3hDLE1BQU8sbUJBQ1IsRUFDRCxNQUFNLEVBQWEsRUFBSSxPQUFPLEdBQUcsRUFBRSxVQUFVLE1BQU0sRUFBRSxLQUFLLENBQVEsRUFBRSxNQUFNLEVBQ3BFLEVBQVMsRUFBUSxHQUFHLFNBQVMsRUF1SW5DLEdBdElBLEVBQVcsT0FBTyxNQUFNLEVBQUUsS0FBSyxhQUFjLENBQUMsRUFBRyxDQUMvQyxPQUFPLEVBQUUsR0FDVixFQUFFLEtBQUssS0FBTSxDQUFDLEVBQUUsS0FBSyxLQUFNLENBQUMsRUFBRSxLQUFLLFlBQWEsQ0FBQyxFQUFHLENBQ25ELEdBQUksRUFBRSxVQUNKLE9BQU8sRUFBVSxFQUFFLFNBQVMsRUFBSSxFQUFhLEtBQU8sRUFBVSxFQUFFLE9BQU8sRUFBSSxFQUFVLEVBQUUsU0FBUyxHQUFLLElBQU0sRUFFN0csT0FBTyxFQUFVLEVBQUUsU0FBUyxFQUFJLEVBQ2pDLEVBQUUsS0FBSyxZQUFhLENBQUMsRUFBRyxFQUFHLENBRTFCLE9BREEsRUFBSSxFQUFFLE1BQ0MsRUFBSSxFQUFTLEVBQ3JCLEVBQUUsS0FBSyxnQkFBaUIsQ0FBQyxFQUFHLENBQzNCLEdBQUksRUFBRSxVQUNKLE9BQU8sRUFFVCxPQUFPLEVBQVUsRUFBRSxlQUFpQixFQUFFLE9BQU8sRUFBSSxFQUFVLEVBQUUsU0FBUyxFQUN2RSxFQUFFLEtBQUssU0FBVSxDQUFZLEVBQUUsS0FBSywyQkFBNEIsQ0FBQyxFQUFHLEVBQUcsQ0FFdEUsT0FEQSxFQUFJLEVBQUUsT0FDRSxFQUFVLEVBQUUsU0FBUyxFQUFJLEVBQWEsS0FBTyxFQUFVLEVBQUUsT0FBTyxFQUFJLEVBQVUsRUFBRSxTQUFTLElBQUksU0FBUyxFQUFJLE9BQVMsRUFBSSxFQUFTLEVBQVksSUFBTSxHQUFjLFNBQVMsRUFBSSxLQUN0TCxFQUFFLEtBQUssZ0JBQWlCLENBQUMsRUFBRyxDQUUzQixJQUFJLEVBQVcsR0FDZixHQUFJLEVBQUUsUUFBUSxPQUFTLEVBQ3JCLEVBQVcsRUFBRSxRQUFRLEtBQUssR0FBRyxFQUUvQixJQUFJLEVBQVMsRUFDYixRQUFZLEdBQUcsS0FBYSxFQUFXLFFBQVEsRUFDN0MsR0FBSSxFQUFFLE9BQVMsRUFDYixFQUFTLEdBQUksRUFBSyxvQkFHdEIsSUFBSSxFQUFZLEdBQ2hCLEdBQUksRUFBRSxPQUNKLEdBQUksRUFBRSxLQUNKLEdBQWEsa0JBRWIsR0FBWSxrQkFFTCxFQUFFLEtBQ1gsR0FBSSxFQUFFLEtBQ0osRUFBWSxnQkFFWixHQUFZLGdCQUdWLEVBQUUsS0FDSixHQUFhLFFBR2pCLEdBQUksRUFBVSxTQUFXLEVBQ3ZCLEVBQVksUUFFZCxHQUFJLEVBQUUsVUFDSixFQUFZLGNBQWdCLEVBSTlCLE9BRkEsR0FBYSxFQUNiLEdBQWEsSUFBTSxFQXBDUCxPQXFDQyxFQUNkLEVBQ0QsRUFBVyxPQUFPLE1BQU0sRUFBRSxLQUFLLGFBQWMsQ0FBQyxFQUFHLENBQy9DLE9BQU8sRUFBRSxHQUFLLFFBQ2YsRUFBRSxhQUFhLENBQUMsRUFBRyxDQUNsQixPQUFPLEVBQUUsS0FDVixFQUFFLEtBQUssWUFBYSxFQUFLLFFBQVEsRUFBRSxLQUFLLFlBQWEsQ0FBQyxFQUFHLENBQ3hELElBQUksRUFBUyxFQUFVLEVBQUUsU0FBUyxFQUM5QixFQUFPLEVBQVUsRUFBRSxlQUFpQixFQUFFLE9BQU8sRUFDakQsR0FBSSxFQUFFLFVBQ0osR0FBVSxLQUFPLEVBQVUsRUFBRSxPQUFPLEVBQUksRUFBVSxFQUFFLFNBQVMsR0FBSyxJQUFNLEVBRTFFLEdBQUksRUFBRSxVQUNKLEVBQU8sRUFBUyxFQUVsQixNQUFNLEVBQVksS0FBSyxRQUFRLEVBQUUsTUFDakMsR0FBSSxFQUFZLEVBQU8sRUFDckIsR0FBSSxFQUFPLEVBQVksSUFBTSxFQUFLLFlBQWMsRUFDOUMsT0FBTyxFQUFTLEVBQWEsTUFFN0IsUUFBTyxFQUFPLEVBQWEsTUFHN0IsUUFBUSxFQUFPLEdBQVUsRUFBSSxFQUFTLEVBRXpDLEVBQUUsS0FBSyxZQUFhLENBQUMsRUFBRyxFQUFHLENBRTFCLE9BREEsRUFBSSxFQUFFLE1BQ0MsRUFBSSxFQUFTLEVBQUssVUFBWSxHQUFLLEVBQUssU0FBVyxFQUFJLEdBQUssRUFDcEUsRUFBRSxLQUFLLGNBQWUsQ0FBWSxFQUFFLEtBQUssZ0JBQWlCLENBQUMsRUFBRyxDQUM3RCxNQUFNLEVBQVMsRUFBVSxFQUFFLFNBQVMsRUFDcEMsSUFBSSxFQUFPLEVBQVUsRUFBRSxPQUFPLEVBQzlCLEdBQUksRUFBRSxVQUNKLEVBQU8sRUFBUyxFQUVsQixNQUFNLEVBQVksS0FBSyxRQUFRLEVBQUUsTUFDakMsSUFBSSxFQUFXLEdBQ2YsR0FBSSxFQUFFLFFBQVEsT0FBUyxFQUNyQixFQUFXLEVBQUUsUUFBUSxLQUFLLEdBQUcsRUFFL0IsSUFBSSxHQUFTLEVBQ2IsUUFBWSxFQUFHLEtBQWEsRUFBVyxRQUFRLEVBQzdDLEdBQUksRUFBRSxPQUFTLEVBQ2IsR0FBUyxFQUFJLEVBQUssb0JBR3RCLElBQUksRUFBVyxHQUNmLEdBQUksRUFBRSxPQUNKLEdBQUksRUFBRSxLQUNKLEVBQVcsaUJBQW1CLE9BRTlCLEdBQVcsYUFBZSxHQUc5QixHQUFJLEVBQUUsS0FDSixHQUFJLEVBQUUsS0FDSixFQUFXLEVBQVcsZ0JBQWtCLE9BRXhDLEdBQVcsRUFBVyxZQUFjLFdBR2xDLEVBQUUsS0FDSixFQUFXLEVBQVcsWUFBYyxHQUd4QyxHQUFJLEVBQUUsVUFDSixHQUFZLGlCQUVkLEdBQUksRUFBWSxFQUFPLEVBQ3JCLEdBQUksRUFBTyxFQUFZLElBQU0sRUFBSyxZQUFjLEVBQzlDLE9BQU8sRUFBVyx1Q0FBeUMsR0FBUyxJQUFNLE1BRTFFLFFBQU8sRUFBVyx3Q0FBMEMsR0FBUyxJQUFNLEVBQVcsVUFBWSxNQUdwRyxRQUFPLEVBQVcscUJBQXVCLEdBQVMsSUFBTSxFQUFXLFVBQVksRUFFbEYsRUFDc0IsR0FBVSxFQUFFLGdCQUNaLFVBQVcsQ0FDaEMsSUFBSSxFQUNKLEVBQWtCLEdBQU8sS0FBTyxDQUFFLEVBQ2xDLE1BQU0sRUFBTyxFQUFnQixNQUFNLEVBQUUsR0FBRyxnQkFDeEMsRUFBVyxlQUFlLENBQUMsRUFBRyxDQUM1QixPQUFPLEVBQU8sSUFBSSxFQUFFLEVBQUUsRUFDdkIsRUFBRSxhQUFhLENBQUMsRUFBRyxDQUNsQixJQUFJLEVBQVcsRUFBSyxjQUFjLElBQU0sRUFBRSxFQUFFLEVBQ3hDLEVBQVcsRUFBSyxjQUFjLElBQU0sRUFBRSxHQUFLLE9BQU8sRUFDdEQsTUFBTSxHQUFZLEVBQVMsV0FDM0IsSUFBSSxFQUFPLEVBQUssY0FBYyxHQUFHLEVBQ2pDLEVBQUssYUFBYSxhQUFjLEVBQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUNoRCxFQUFLLGFBQWEsU0FBVSxNQUFNLEVBQ2xDLEdBQVUsWUFBWSxDQUFJLEVBQzFCLEVBQUssWUFBWSxDQUFRLEVBQ3pCLEVBQUssWUFBWSxDQUFRLEVBQzFCLEdBR0wsRUFBTyxFQUFXLFdBQVcsRUFDN0IsU0FBUyxDQUFlLENBQUMsRUFBUSxFQUFXLEVBQVksRUFBSSxFQUFJLEVBQVEsRUFBVyxFQUFXLENBQzVGLEdBQUksRUFBVSxTQUFXLEdBQUssRUFBVSxTQUFXLEVBQ2pELE9BRUYsSUFBSSxFQUNBLEVBQ0osUUFBYSxZQUFXLGFBQWEsRUFBUSxDQUMzQyxHQUFJLElBQWlCLFFBQUssRUFBWSxFQUNwQyxFQUFVLEVBRVosR0FBSSxJQUFpQixRQUFLLEVBQVUsRUFDbEMsRUFBVSxFQUdkLElBQUssSUFBWSxFQUNmLE9BRUYsR0FBSSxXQUFPLENBQU8sRUFBRSxLQUFLLFdBQU8sQ0FBTyxFQUFHLE1BQU0sRUFBSSxFQUFHLENBQ3JELEVBQUksS0FDRixzSUFDRixFQUNBLE9BRUYsTUFBTSxFQUFjLEVBQVEsR0FBRyxjQUFjLEVBQ3ZDLEVBQWdCLENBQUMsRUFDdkIsSUFBSSxFQUFRLEtBQ1IsRUFBSSxXQUFPLENBQU8sRUFDdEIsTUFBTyxFQUFFLFFBQVEsR0FBSyxFQUFTLENBQzdCLEdBQUksRUFBUSxHQUFHLGNBQWMsRUFBRyxFQUFhLEVBQVcsQ0FBUyxFQUMvRCxJQUFLLEVBQ0gsRUFBUSxDQUNOLE1BQU8sRUFDUCxJQUFLLENBQ1AsTUFFQSxHQUFNLElBQU0sVUFHVixFQUNGLEVBQWMsS0FBSyxDQUFLLEVBQ3hCLEVBQVEsS0FHWixFQUFJLEVBQUUsSUFBSSxFQUFHLEdBQUcsRUFHbEIsQUFEbUIsRUFBSSxPQUFPLEdBQUcsRUFBRSxVQUFVLE1BQU0sRUFBRSxLQUFLLENBQWEsRUFBRSxNQUFNLEVBQ3BFLE9BQU8sTUFBTSxFQUFFLEtBQUssYUFBYyxDQUFDLEVBQUksQ0FDaEQsTUFBTyxXQUFhLEVBQUcsTUFBTSxPQUFPLFlBQVksRUFDakQsRUFBRSxLQUFLLFlBQWEsQ0FBQyxFQUFJLENBQ3hCLE9BQU8sRUFBVSxFQUFHLEtBQUssRUFBSSxFQUM5QixFQUFFLEtBQUssSUFBSyxFQUFLLG9CQUFvQixFQUFFLEtBQUssZ0JBQWlCLENBQUMsRUFBSSxDQUNqRSxNQUFNLEVBQVksRUFBRyxJQUFJLElBQUksRUFBRyxLQUFLLEVBQ3JDLE9BQU8sRUFBVSxDQUFTLEVBQUksRUFBVSxFQUFHLEtBQUssRUFDakQsRUFBRSxLQUFLLFNBQVUsRUFBSyxFQUFZLEVBQUssb0JBQW9CLEVBQUUsS0FBSywyQkFBNEIsQ0FBQyxFQUFJLEVBQUcsQ0FDckcsT0FBUSxFQUFVLEVBQUcsS0FBSyxFQUFJLEVBQWEsS0FBTyxFQUFVLEVBQUcsR0FBRyxFQUFJLEVBQVUsRUFBRyxLQUFLLElBQUksU0FBUyxFQUFJLE9BQVMsRUFBSSxFQUFTLElBQU0sR0FBSSxTQUFTLEVBQUksS0FDdkosRUFBRSxLQUFLLFFBQVMsZUFBZSxFQUVsQyxFQUFPLEVBQWlCLGlCQUFpQixFQUN6QyxTQUFTLENBQVEsQ0FBQyxFQUFZLEVBQVcsRUFBSSxFQUFJLENBQy9DLElBQUksRUFBYyxHQUFXLENBQVMsRUFBRSxVQUFVLEVBQUssRUFBWSxFQUFLLG9CQUFvQixFQUFFLFdBQVcsR0FBVyxFQUFRLEdBQUcsY0FBYyxHQUFLLEVBQUssWUFBYyxVQUFVLENBQUMsRUFFaEwsTUFBTSxFQURpQiw4REFDbUIsS0FDeEMsRUFBUSxHQUFHLGdCQUFnQixHQUFLLEVBQUssWUFDdkMsRUFDQSxHQUFJLElBQXVCLEtBQU0sQ0FDL0IsTUFBTSxFQUFRLEVBQW1CLEdBQzNCLEVBQVcsRUFBbUIsR0FDOUIsRUFBVyxFQUFRLEdBQUcsV0FBVyxHQUFLLEVBQUssUUFDakQsT0FBUSxPQUNELGNBQ0gsRUFBWSxNQUFNLEdBQWdCLE1BQU0sQ0FBSyxDQUFDLEVBQzlDLFVBQ0csU0FDSCxFQUFZLE1BQU0sR0FBVyxNQUFNLENBQUssQ0FBQyxFQUN6QyxVQUNHLFNBQ0gsRUFBWSxNQUFNLEdBQVcsTUFBTSxDQUFLLENBQUMsRUFDekMsVUFDRyxPQUNILEVBQVksTUFBTSxHQUFTLE1BQU0sQ0FBSyxDQUFDLEVBQ3ZDLFVBQ0csTUFDSCxFQUFZLE1BQU0sR0FBUSxNQUFNLENBQUssQ0FBQyxFQUN0QyxVQUNHLE9BQ0gsRUFBWSxNQUFNLElBQXlCLEdBQVUsTUFBTSxDQUFLLENBQUMsRUFDakUsVUFDRyxRQUNILEVBQVksTUFBTSxHQUFVLE1BQU0sQ0FBSyxDQUFDLEVBQ3hDLE9BSU4sR0FEQSxFQUFJLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxNQUFNLEVBQUUsS0FBSyxZQUFhLGFBQWUsRUFBYSxNQUFRLEVBQUssSUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFXLEVBQUUsVUFBVSxNQUFNLEVBQUUsTUFBTSxjQUFlLFFBQVEsRUFBRSxLQUFLLE9BQVEsTUFBTSxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsS0FBSyxZQUFhLEVBQUUsRUFBRSxLQUFLLEtBQU0sS0FBSyxFQUM3UCxFQUFRLEdBQUcsZUFBZSxHQUFLLEVBQUssUUFBUyxDQUMvQyxJQUFJLEVBQVcsR0FBUSxDQUFTLEVBQUUsVUFBVSxFQUFLLEVBQVksRUFBSyxvQkFBb0IsRUFBRSxXQUFXLEdBQVcsRUFBUSxHQUFHLGNBQWMsR0FBSyxFQUFLLFlBQWMsVUFBVSxDQUFDLEVBQzFLLEdBQUksSUFBdUIsS0FBTSxDQUMvQixNQUFNLEVBQVEsRUFBbUIsR0FDM0IsRUFBVyxFQUFtQixHQUM5QixFQUFXLEVBQVEsR0FBRyxXQUFXLEdBQUssRUFBSyxRQUNqRCxPQUFRLE9BQ0QsY0FDSCxFQUFTLE1BQU0sR0FBZ0IsTUFBTSxDQUFLLENBQUMsRUFDM0MsVUFDRyxTQUNILEVBQVMsTUFBTSxHQUFXLE1BQU0sQ0FBSyxDQUFDLEVBQ3RDLFVBQ0csU0FDSCxFQUFTLE1BQU0sR0FBVyxNQUFNLENBQUssQ0FBQyxFQUN0QyxVQUNHLE9BQ0gsRUFBUyxNQUFNLEdBQVMsTUFBTSxDQUFLLENBQUMsRUFDcEMsVUFDRyxNQUNILEVBQVMsTUFBTSxHQUFRLE1BQU0sQ0FBSyxDQUFDLEVBQ25DLFVBQ0csT0FDSCxFQUFTLE1BQU0sSUFBeUIsR0FBVSxNQUFNLENBQUssQ0FBQyxFQUM5RCxVQUNHLFFBQ0gsRUFBUyxNQUFNLEdBQVUsTUFBTSxDQUFLLENBQUMsRUFDckMsT0FHTixFQUFJLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxNQUFNLEVBQUUsS0FBSyxZQUFhLGFBQWUsRUFBYSxLQUFPLEVBQVksR0FBRyxFQUFFLEtBQUssQ0FBUSxFQUFFLFVBQVUsTUFBTSxFQUFFLE1BQU0sY0FBZSxRQUFRLEVBQUUsS0FBSyxPQUFRLE1BQU0sRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLEtBQUssWUFBYSxFQUFFLEdBR2hQLEVBQU8sRUFBVSxVQUFVLEVBQzNCLFNBQVMsQ0FBVSxDQUFDLEVBQVEsRUFBVyxDQUNyQyxJQUFJLEVBQVUsRUFDZCxNQUFNLEVBQWlCLE9BQU8sS0FBSyxDQUFlLEVBQUUsSUFBSSxDQUFDLElBQU0sQ0FBQyxFQUFHLEVBQWdCLEVBQUUsQ0FBQyxFQUN0RixFQUFJLE9BQU8sR0FBRyxFQUFFLFVBQVUsTUFBTSxFQUFFLEtBQUssQ0FBYyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsRUFBRyxDQUNoRixNQUFNLEVBQU8sRUFBRSxHQUFHLE1BQU0sR0FBZSxjQUFjLEVBQy9DLElBQU8sRUFBSyxPQUFTLEdBQUssRUFDMUIsRUFBVyxFQUFJLGdCQUFnQiw2QkFBOEIsTUFBTSxFQUN6RSxFQUFTLGFBQWEsS0FBTSxFQUFLLElBQUksRUFDckMsUUFBWSxFQUFHLEtBQVEsRUFBSyxRQUFRLEVBQUcsQ0FDckMsTUFBTSxFQUFRLEVBQUksZ0JBQWdCLDZCQUE4QixPQUFPLEVBR3ZFLEdBRkEsRUFBTSxhQUFhLHFCQUFzQixTQUFTLEVBQ2xELEVBQU0sYUFBYSxJQUFLLElBQUksRUFDeEIsRUFBSSxFQUNOLEVBQU0sYUFBYSxLQUFNLEtBQUssRUFFaEMsRUFBTSxZQUFjLEVBQ3BCLEVBQVMsWUFBWSxDQUFLLEVBRTVCLE9BQU8sRUFDUixFQUFFLEtBQUssSUFBSyxFQUFFLEVBQUUsS0FBSyxZQUFhLENBQUMsRUFBRyxFQUFHLENBQ3hDLEdBQUksRUFBSSxFQUNOLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBRyxJQUVyQixPQURBLEdBQVcsRUFBZSxFQUFJLEdBQUcsR0FDMUIsRUFBRSxHQUFLLEVBQVMsRUFBSSxFQUFVLEVBQVMsTUFHaEQsUUFBTyxFQUFFLEdBQUssRUFBUyxFQUFJLEVBRTlCLEVBQUUsS0FBSyxZQUFhLEVBQUssZUFBZSxFQUFFLEtBQUssZ0JBQWlCLENBQUMsRUFBRyxDQUNuRSxRQUFZLEVBQUcsS0FBYSxFQUFXLFFBQVEsRUFDN0MsR0FBSSxFQUFFLEtBQU8sRUFDWCxNQUFPLDRCQUE4QixFQUFJLEVBQUssb0JBR2xELE1BQU8sZUFDUixFQUVILEVBQU8sRUFBWSxZQUFZLEVBQy9CLFNBQVMsQ0FBUyxDQUFDLEVBQVksRUFBVyxFQUFJLEVBQUksQ0FDaEQsTUFBTSxFQUFlLEVBQVEsR0FBRyxlQUFlLEVBQy9DLEdBQUksSUFBaUIsTUFDbkIsT0FFRixNQUFNLEVBQVMsRUFBSSxPQUFPLEdBQUcsRUFBRSxLQUFLLFFBQVMsT0FBTyxFQUM5QyxFQUF3QixJQUFJLEtBQzVCLEVBQVksRUFBTyxPQUFPLE1BQU0sRUFFdEMsR0FEQSxFQUFVLEtBQUssS0FBTSxFQUFVLENBQUssRUFBSSxDQUFVLEVBQUUsS0FBSyxLQUFNLEVBQVUsQ0FBSyxFQUFJLENBQVUsRUFBRSxLQUFLLEtBQU0sRUFBSyxjQUFjLEVBQUUsS0FBSyxLQUFNLEVBQUssRUFBSyxjQUFjLEVBQUUsS0FBSyxRQUFTLE9BQU8sRUFDcEwsSUFBaUIsR0FDbkIsRUFBVSxLQUFLLFFBQVMsRUFBYSxRQUFRLEtBQU0sR0FBRyxDQUFDLEVBRzNELEVBQU8sRUFBVyxXQUFXLEVBQzdCLFNBQVMsQ0FBVyxDQUFDLEVBQUssQ0FDeEIsTUFBTSxFQUFPLENBQUMsRUFDUixFQUFTLENBQUMsRUFDaEIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFJLE9BQVEsRUFBSSxJQUFLLEVBQ3ZDLElBQUssT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFNLEVBQUksRUFBRSxFQUNwRCxFQUFLLEVBQUksSUFBTSxHQUNmLEVBQU8sS0FBSyxFQUFJLEVBQUUsRUFHdEIsT0FBTyxFQUVULEVBQU8sRUFBYSxhQUFhLEdBQ2hDLE1BQU0sRUFDTCxJQUF3QixDQUMxQixZQUNBLFFBQ0YsRUFHSSxJQUE0QixFQUFPLENBQUMsSUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU14QyxFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBU1IsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBSVIsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FZTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQU1ILEVBQVE7QUFBQSxZQUNmLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FZTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFtQlYsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU1SLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWFSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVIsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFXUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFPUixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVYsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFVUixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFPVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FVTixFQUFRO0FBQUEsWUFDVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQVFSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQVVOLEVBQVE7QUFBQSxZQUNWLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBUU4sRUFBUTtBQUFBLFlBQ1YsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FRTixFQUFRO0FBQUEsWUFDVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWlCUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFPUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQ2wwQyxHQUFVLENBQ1osTUFBdUIsV0FBZ0IsRUFBSyxFQUFHLEdBQzVDLE9BQU8sRUFDVixHQUFJLENBQUMsRUFDTCxTQUFVLENBQUUsTUFBUyxFQUFHLGNBQWlCLEVBQUcsTUFBUyxFQUFHLElBQU8sRUFBRyxZQUFlLEVBQUcsS0FBUSxFQUFHLE1BQVMsRUFBRyxRQUFXLEVBQUcsTUFBUyxHQUFJLE1BQVMsR0FBSSxJQUFPLEdBQUksS0FBUSxHQUFJLEtBQVEsR0FBSSxhQUFnQixHQUFJLGVBQWtCLEdBQUksS0FBUSxHQUFJLE1BQVMsR0FBSSxNQUFTLEdBQUksSUFBTyxHQUFJLFNBQVksR0FBSSxNQUFTLEdBQUksVUFBYSxHQUFJLGtCQUFxQixHQUFJLFNBQVksR0FBSSxNQUFTLEdBQUksSUFBTyxHQUFJLFNBQVksR0FBSSxTQUFZLEdBQUksS0FBUSxHQUFJLFVBQWEsR0FBSSxZQUFlLEdBQUksZ0JBQW1CLEdBQUksT0FBVSxHQUFJLE1BQVMsR0FBSSxZQUFlLEdBQUksVUFBYSxHQUFJLGdCQUFtQixHQUFJLFVBQWEsR0FBSSxnQkFBbUIsR0FBSSwwQkFBNkIsR0FBSSxRQUFXLEdBQUksS0FBUSxHQUFJLFlBQWUsR0FBSSxRQUFXLEdBQUksUUFBVyxHQUFJLFdBQWMsR0FBSSxTQUFVLEdBQUksc0JBQXVCLEdBQUksU0FBVSxHQUFJLFdBQWMsR0FBSSxXQUFjLEdBQUksV0FBYyxHQUFJLFdBQWMsR0FBSSxRQUFXLEdBQUksS0FBUSxHQUFJLElBQU8sR0FBSSxjQUFpQixHQUFJLGdCQUFtQixHQUFJLElBQU8sR0FBSSxPQUFVLEdBQUksU0FBWSxHQUFJLFlBQWUsR0FBSSxLQUFRLEdBQUksT0FBVSxHQUFJLElBQU8sR0FBSSxXQUFjLEdBQUksUUFBVyxFQUFHLEtBQVEsQ0FBRSxFQUNoa0MsV0FBWSxDQUFFLEVBQUcsUUFBUyxFQUFHLFFBQVMsRUFBRyxNQUFPLEVBQUcsY0FBZSxFQUFHLE9BQVEsRUFBRyxRQUFTLEVBQUcsVUFBVyxHQUFJLFFBQVMsR0FBSSxRQUFTLEdBQUksTUFBTyxHQUFJLE9BQVEsR0FBSSxPQUFRLEdBQUksZUFBZ0IsR0FBSSxPQUFRLEdBQUksUUFBUyxHQUFJLFFBQVMsR0FBSSxNQUFPLEdBQUksV0FBWSxHQUFJLFdBQVksR0FBSSxRQUFTLEdBQUksY0FBZSxHQUFJLFlBQWEsR0FBSSxrQkFBbUIsR0FBSSxZQUFhLEdBQUksa0JBQW1CLEdBQUksNEJBQTZCLEdBQUksVUFBVyxHQUFJLGNBQWUsR0FBSSxVQUFXLEdBQUksVUFBVyxHQUFJLGFBQWMsR0FBSSxTQUFVLEdBQUksc0JBQXVCLEdBQUksU0FBVSxHQUFJLGFBQWMsR0FBSSxhQUFjLEdBQUksYUFBYyxHQUFJLGFBQWMsR0FBSSxVQUFXLEdBQUksT0FBUSxHQUFJLE1BQU8sR0FBSSxNQUFPLEdBQUksU0FBVSxHQUFJLGNBQWUsR0FBSSxPQUFRLEdBQUksU0FBVSxHQUFJLE1BQU8sR0FBSSxZQUFhLEVBQ252QixhQUFjLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMs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LEVBQUUsRUFDaEMsVUFDRyxJQUNILEdBQUcsbUJBQW1CLEdBQUcsR0FBRyxFQUM1QixVQUNHLElBQ0gsR0FBRyxpQkFBaUIsR0FBRyxHQUFHLEVBQzFCLFVBQ0csSUFDSCxHQUFHLGlCQUFpQixHQUFHLEdBQUcsRUFDMUIsVUFDRyxJQUNILEdBQUcsaUJBQWlCLEdBQUcsR0FBRyxFQUMxQixVQUNHLElBQ0gsR0FBRyxpQkFBaUIsR0FBRyxHQUFHLEVBQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLEdBQUcsSUFBSyxLQUFNLE1BQU8sRUFDdEMsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sR0FBRyxHQUFLLEdBQUcsS0FBTyxHQUFLLEdBQUcsSUFBSyxLQUFNLEdBQUcsR0FBSyxHQUFHLElBQUssRUFDdEUsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sR0FBRyxJQUFLLEtBQU0sTUFBTyxFQUN0QyxVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxHQUFHLElBQUssS0FBTSxVQUFXLEVBQzFDLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxJQUNaLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQUssR0FBSyxHQUFHLElBQzlCLFFBRUgsV0FBVyxFQUNkLE1BQU8sQ0FBQyxDQUFFLEdBQUksRUFBSyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBRSxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsR0FBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUcsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxHQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxHQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFJLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEVBQUcsR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FB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QUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQ3pwQixFQUFVLENBQ1osTUFBdUIsV0FBZ0IsQ0FBSyxFQUFHLEdBQzVDLE9BQU8sRUFDVixHQUFJLENBQUMsRUFDTCxTQUFVLENBQUUsTUFBUyxFQUFHLE1BQVMsRUFBRyxJQUFPLEVBQUcsUUFBVyxFQUFHLFlBQWUsRUFBRyxTQUFZLEVBQUcsa0JBQXFCLEVBQUcsVUFBYSxFQUFHLE1BQVMsR0FBSSxLQUFRLEdBQUksT0FBVSxHQUFJLFdBQWMsR0FBSSxPQUFVLEdBQUksV0FBYyxHQUFJLEtBQVEsR0FBSSxTQUFZLEdBQUksSUFBTyxHQUFJLFVBQWEsR0FBSSxnQkFBbUIsR0FBSSxVQUFhLEdBQUksZ0JBQW1CLEdBQUksMEJBQTZCLEdBQUksb0JBQXVCLEdBQUksc0JBQXlCLEdBQUksa0JBQXFCLEdBQUksb0JBQXVCLEdBQUksTUFBUyxHQUFJLFVBQWEsR0FBSSxTQUFZLEdBQUksZ0JBQW1CLEdBQUksb0JBQXVCLEdBQUksVUFBYSxHQUFJLFFBQVcsR0FBSSxLQUFRLEdBQUksSUFBTyxHQUFJLFNBQVksR0FBSSxJQUFPLEdBQUksT0FBVSxHQUFJLGNBQWlCLEdBQUksSUFBTyxHQUFJLElBQU8sR0FBSSxNQUFTLEdBQUksS0FBUSxHQUFJLE9BQVUsR0FBSSxLQUFRLEdBQUksSUFBTyxHQUFJLEtBQVEsR0FBSSxNQUFTLEdBQUksV0FBYyxHQUFJLFFBQVcsRUFBRyxLQUFRLENBQUUsRUFDOTBCLFdBQVksQ0FBRSxFQUFHLFFBQVMsRUFBRyxVQUFXLEVBQUcsb0JBQXFCLEdBQUksUUFBUyxHQUFJLFNBQVUsR0FBSSxTQUFVLEdBQUksT0FBUSxHQUFJLE1BQU8sR0FBSSxZQUFhLEdBQUksa0JBQW1CLEdBQUksWUFBYSxHQUFJLGtCQUFtQixHQUFJLDRCQUE2QixHQUFJLHNCQUF1QixHQUFJLG9CQUFxQixHQUFJLHNCQUF1QixHQUFJLFFBQVMsR0FBSSxrQkFBbUIsR0FBSSxVQUFXLEdBQUksT0FBUSxHQUFJLE1BQU8sR0FBSSxNQUFPLEdBQUksU0FBVSxHQUFJLE1BQU8sR0FBSSxNQUFPLEdBQUksUUFBUyxHQUFJLE9BQVEsR0FBSSxTQUFVLEdBQUksT0FBUSxHQUFJLE1BQU8sR0FBSSxPQUFRLEdBQUksUUFBUyxHQUFJLFlBQWEsRUFDamlCLGFBQWMsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUks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RSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQzd0RixlQUFnQixDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFDOUUsV0FBNEIsV0FBZ0IsQ0FBVSxDQUFDLEVBQUssRUFBTSxDQUNoRSxHQUFJLEVBQUssWUFDUCxLQUFLLE1BQU0sQ0FBRyxNQUNULENBQ0wsSUFBSSxFQUFRLElBQUksTUFBTSxDQUFHLEVBRXpCLE1BREEs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QUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssRUFBRyxvQkFBdUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxDQUFDLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFFBQVcsQ0FBRSxNQUFTLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssQ0FBRSxDQUMxc0MsRUFDQSxPQUFPLEdBQ1AsRUFDRixFQUFRLE1BQVEsRUFDaEIsU0FBUyxDQUFNLEVBQUcsQ0FDaEIsS0FBSyxHQUFLLENBQUMsRUFLYixPQUhBLEVBQU8sRUFBUSxRQUFRLEVBQ3ZCLEVBQU8sVUFBWSxFQUNuQixFQUFRLE9BQVMsRUFDVixJQUFJLEdBQ1gsRUFDRixHQUFP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QyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQy9yQixF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QyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxDQUFDLEVBQzlnQixjQUErQixXQUFnQixFQUFTLENBQUMsRUFBUSxFQUFRLEVBQVUsRUFBSSxFQUFTLEVBQUksR0FBSSxDQUN0RyxJQUFJLEdBQUssRUFBRyxPQUFTLEVBQ3JCLE9BQVEsT0FDRCxHQUNILEtBQUssRUFBSSxFQUFHLElBQUksS0FBSyxFQUNyQixFQUFHLFlBQVksS0FBSyxDQUFDLEVBQ3JCLFVBQ0csT0FDQSxHQUNILEtBQUssRUFBSSxFQUFHLElBQUksS0FBSyxFQUNyQixFQUFHLGtCQUFrQixLQUFLLENBQUMsRUFDM0IsVUFDRyxHQUNILEtBQUssRUFBSSxDQUFDLEVBQ1YsVUFDRyxJQUNILEVBQUcsZUFBZSxFQUFHLEdBQUssR0FBSSxFQUFHLEdBQUssRUFBRSxFQUN4QyxVQUNHLElBQ0gsRUFBRyxZQUFZLEVBQUcsR0FBSyxFQUFFLEVBQ3pCLFVBQ0csSUFDSCxFQUFHLGNBQWMsRUFBRyxHQUFLLEVBQUUsRUFDM0IsVUFDRyxJQUNILEVBQUcsY0FBYyxFQUFHLEdBQUssRUFBRSxFQUMzQixVQUNHLElBQ0gsRUFBRyxzQkFBc0IsRUFBRyxHQUFLLEVBQUUsRUFDbkMsVUFDRyxJQUNILEtBQUssRUFBSSxFQUFHLGdCQUFnQixZQUM1QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsZ0JBQWdCLHVCQUM1QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsZ0JBQWdCLHNCQUM1QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsZ0JBQWdCLHdCQUM1QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsZ0JBQWdCLHFCQUM1QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsZ0JBQWdCLGtCQUM1QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsVUFBVSxTQUN0QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsVUFBVSxTQUN0QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsVUFBVSxVQUN0QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsV0FBVyxnQkFDdkIsVUFDRyxJQUNILEtBQUssRUFBSSxFQUFHLFdBQVcscUJBQ3ZCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxXQUFXLGtCQUN2QixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsV0FBVyxZQUN2QixVQUNHLElBQ0gsRUFBRyxXQUFXLEVBQUcsR0FBSyxFQUFFLEVBQ3hCLFVBQ0csSUFDSCxFQUFHLGtCQUFrQixFQUFHLEdBQUssRUFBRSxFQUMvQixVQUNHLElBQ0gsRUFBRyxvQkFBb0IsRUFBRyxHQUFLLEVBQUUsRUFDakMsVUFDRyxJQUNILEVBQUcsZ0JBQWdCLEVBQUcsR0FBSyxHQUFJLEVBQUcsSUFBSyxFQUFHLEdBQUssRUFBRSxFQUNqRCxVQUNHLElBQ0gsRUFBRyxnQkFBZ0IsRUFBRyxHQUFLLEdBQUksRUFBRyxHQUFLLEdBQUksRUFBRyxHQUFHLEVBQ2pELFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLFNBQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLE9BQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLFFBQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLFVBQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLFNBQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLFFBQzFCLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxjQUFjLE9BQzFCLFFBRUgsV0FBVyxFQUNkLE1BQU8sQ0FBQyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxJQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBSyxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDdHBILGVBQWdCLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQ2hWLFdBQTRCLFdBQWdCLEVBQVUsQ0FBQyxFQUFLLEVBQU0sQ0FDaEUsR0FBSSxFQUFLLFlBQ1AsS0FBSyxNQUFNLENBQUcsTUFDVCxDQUNMLElBQUksRUFBUSxJQUFJLE1BQU0sQ0FBRyxFQUV6QixNQURBLEVBQU0sS0FBTyxFQUNQLElBRVAsWUFBWSxFQUNmLE1BQXVCLFdBQWdCLEVBQUssQ0FBQyxFQUFPLENBQ2xELElBQUksRUFBTyxLQUFNLEVBQVEsQ0FBQyxDQUFDLEVBQUcsRUFBUyxDQUFDLEVBQUcs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LENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUMvckMsRUFBVSxDQUNaLE1BQXVCLFdBQWdCLENBQUssRUFBRyxHQUM1QyxPQUFPLEVBQ1YsR0FBSSxDQUFDLEVBQ0wsU0FBVSxDQUFFLE1BQVMsRUFBRyxNQUFTLEVBQUcsTUFBUyxFQUFHLFFBQVcsRUFBRyxHQUFNLEVBQUcsU0FBWSxFQUFHLEtBQVEsRUFBRyxVQUFhLEVBQUcsWUFBZSxHQUFJLFNBQVksR0FBSSxzQkFBeUIsR0FBSSxPQUFVLEdB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QUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxH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QUNILEtBQUssRUFBSSxHQUFHLFNBQVMsT0FDckIsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLFNBQVMscUJBQ3JCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxTQUFTLFlBQ3JCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxTQUFTLGFBQ3JCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxTQUFTLFlBQ3JCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxTQUFTLGFBQ3JCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFDbkQsUUFFSCxXQUFXLEVBQ2QsTUFBTyxDQUFDLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsQ0FBSSxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQUssQ0FBRSxFQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLEVBQUUsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsR0FBSSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEdBQUksSUFBSyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsR0FBSSxJQUFLLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLElBQUssR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEdBQUksSUFBSyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLElBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxFQUFHLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLElBQUssR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLElBQUssR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsSUFBSyxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxJQUFLLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQ2xoTixlQUFnQixDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxJQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsSUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxJQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsSUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxJQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsSUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUss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QUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBS04sRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQU1SLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FNUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJVixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJUixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUtOLEVBQVE7QUFBQSxZQUNWLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBS1IsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBT04sRUFBUTtBQUFBLFlBQ1YsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FLTixFQUFRO0FBQUEsWUFDVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUtSLEVBQVE7QUFBQSxjQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlWLEVBQVE7QUFBQSxjQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlWLEVBQVE7QUFBQSxjQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFTVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUtOLEVBQVE7QUFBQSxZQUNWLEVBQVE7QUFBQTtBQUFBO0FBQUEsY0FHTixFQUFRO0FBQUEsWUFDVixFQUFRO0FBQUE7QUFBQTtBQUFBLEVBR2pCLFdBQVcsRUFDVixJQUFpQixJQVlqQixHQUE0QixVQUFlLENB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V0FBaUIsRUFBRyxDQUN0QixJQUFJLEVBQW9CLFVBQWUsQ0FBQyxHQUFHLEdBQUcsR0FBSSxFQUFHLENBQ25ELElBQUssR0FBSyxJQUFNLENBQUMsRUFBRyxFQUFJLEdBQUUsT0FBUSxJQUFLLEdBQUcsR0FBRSxJQUFNLElBQ2xELE9BQU8sSUFDTixHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcs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QUksV0FBWSxHQUFJLFNBQVUsR0FBSSxLQUFNLEdBQUksS0FBTSxHQUFJLFVBQVcsR0FBSSxRQUFTLEdBQUksV0FBWSxHQUFJLGVBQWdCLEdBQUksWUFBYSxFQUNoaEMsYUFBYyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsRUFDdGlDLGNBQStCLFdBQWdCLEVBQVMsQ0FBQyxHQUFRLEdBQVEsRUFBVSxHQUFJLEdBQVMsR0FBSSxHQUFJLENBQ3RHLElBQUksR0FBSyxHQUFHLE9BQVMsRUFDckIsT0FBUSxRQUNELEdBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixVQUNHLE9BQ0EsUUFDQSxJQUNILEtBQUssRUFBSSxHQUFHLElBQ1osVUFDRyxRQUNBLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUFLLEdBQUcsSUFDekIsVUFDRyxRQUNBLElBQ0gsS0FBSyxF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R0FBSyxFQUFFLEVBQ2pDLEdBQUcsV0FBVyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDaEMsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxRQUFRLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUN6QyxHQUFHLFdBQVcsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEVBQUUsRUFDcEMsVUFDRyxJQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxZQUFZLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUNqQyxVQUNHLElBQ0gsR0FBRyxZQUFZLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUNqQyxVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUMsR0FBRyxHQUFHLEVBQ2hCLFVBQ0csSUFDSCxHQUFHLEdBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUN0QixLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLFVBQ0csSUFDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQUssR0FBRyxJQUN6QixRQUVILFdBQVcsRUFDZCxNQUFPLENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksRUFBSyxHQUFJLEVBQUcsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLElBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxFQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDNy9LLGVBQWdCLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxJQUFLLENBQUMsRUFBRyxDQUFDLEVBQUcsSUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUN0SCxXQUE0QixXQUFnQixFQUFVLENBQUMsR0FBSyxHQUFNLENBQ2hFLEdBQUksR0FBSyxZQUNQLEtBQUssTUFBTSxFQUFHLE1BQ1QsQ0FDTCxJQUFJLEVBQVEsSUFBSSxNQUFNLEVBQUcsRUFFekIsTUFEQSxFQUFNLEtBQU8sR0FDUCxJQUVQLFlBQVksRUFDZixNQUF1QixXQUFnQixFQUFLLENBQUMsR0FBTyxDQUNsRCxJQUFJLEdBQU8sS0FBTSxFQUFRLENBQUMsQ0FBQyxFQUFHLEdBQVMsQ0FBQyxFQUFHLEdB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QUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxhQUFjLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxvQkFBdUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsY0FBaUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGNBQWlCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLEtBQVEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsT0FBVSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxTQUFZLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssQ0FBRSxDQUM1MUcsRUFDQSxPQUFPLElBQ1AsRUFDRixHQUFRLE1BQVEsR0FDaEIsU0FBUyxFQUFNLEVBQUcsQ0FDaEIsS0FBSyxHQUFLLENBQUMsRUFLYixPQUhBLEVBQU8sR0FBUSxRQUFRLEVBQ3ZCLEdB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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVNWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU9WLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBS1IsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWNWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBS1YsRUFBUTtBQUFBLFlBQ04sRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFLVixFQUFRO0FBQUEsWUFDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUtWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVIsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU1SLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUtWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBS1YsRUFBUTtBQUFBLFlBQ04sRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVlWLEVBQVE7QUFBQTtBQUFBLEVBRWYsV0FBVyxFQUNWLEdBQWlCLCtDQzVpRGpCLElBQVksRUFDWixJQTBGQSxJQTJFQSxJQU9BLElBNkJBLElBVUEsR0FRQSxHQUNBLEdBQVUsR0FDVixHQU1BLElBVUEsSUE4RkEsSUFLQSxtQkF4V0osS0FLQSxLQUdBLEtBU0EsS0FDQSxLQUNBLEtBR0EsS0FFSSxJQUEyQixVQUFlLENBQUMsRUFBTSxFQUFNLEVBQVUsRUFBTSxFQUFTLENBQ2xGLE1BQU0sRUFBa0MsVUFBZSxDQUFDLEVBQU0sQ0FDNUQsT0FBUSxRQUNELEVBQVEsR0FBRyxhQUFhLFlBQzNCLE1BQU8sbUJBQ0osRUFBUSxHQUFHLGFBQWEsVUFDM0IsTUFBTyxpQkFDSixFQUFRLEdBQUcsYUFBYSxZQUMzQixNQUFPLG1CQUNKLEVBQVEsR0FBRyxhQUFhLFdBQzNCLE1BQU8sa0JBQ0osRUFBUSxHQUFHLGFBQWEsU0FDM0IsTUFBTyxhQUVWLGlCQUFpQixFQUNwQixFQUFLLE9BQVMsRUFBSyxPQUFPLE9BQU8sQ0FBQyxLQUFPLE9BQU8sTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUMxRCxNQUFNLEVBQVcsRUFBSyxPQUNoQixFQUFlLEdBQUssRUFBRSxVQUFVLENBQUMsRUFBRyxDQUN4QyxPQUFPLEVBQUUsRUFDVixFQUFFLFVBQVUsQ0FBQyxFQUFHLENBQ2YsT0FBTyxFQUFFLEVBQ1YsRUFBRSxNQUFNLEVBQVUsRUFDYixFQUFVLEVBQUssT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLEVBQWEsQ0FBUSxDQUFDLEVBQUUsS0FBSyxLQUFNLE9BQVMsR0FBUyxFQUFFLEtBQUssUUFBUyxVQUFVLEVBQzdILElBQUksRUFBTSxHQUNWLEdBQUksRUFBSyxvQkFDUCxFQUFNLE9BQU8sU0FBUyxTQUFXLEtBQU8sT0FBTyxTQUFTLEtBQU8sT0FBTyxTQUFTLFNBQVcsT0FBTyxTQUFTLE9BQzFHLEVBQU0sRUFBSSxRQUFRLE1BQU8sS0FBSyxFQUM5QixFQUFNLEVBQUksUUFBUSxNQUFPLEtBQUssRUFFaEMsR0FBSSxFQUFTLFNBQVMsVUFBWSxFQUNoQyxFQUFRLEtBQUssUUFBUyxzQkFBc0IsRUFFOUMsR0FBSSxFQUFTLFNBQVMsVUFBWSxHQUNoQyxFQUFRLEtBQUssUUFBUyxzQkFBc0IsRUFFOUMsR0FBSSxFQUFTLFNBQVMsUUFBVSxPQUM5QixFQUFRLEtBQ04sZUFDQSxPQUFTLEVBQU0sSUFBTSxFQUFnQixFQUFTLFNBQVMsS0FBSyxFQUFJLFFBQ2xFLEVBRUYsR0FBSSxFQUFTLFNBQVMsUUFBVSxPQUM5QixFQUFRLEtBQ04sYUFDQSxPQUFTLEVBQU0sSUFBTSxFQUFnQixFQUFTLFNBQVMsS0FBSyxFQUFJLE1BQ2xFLEVBRUYsSUFBSSxFQUFHLEVBQ1AsTUFBTSxFQUFJLEVBQUssT0FBTyxPQUN0QixJQUFJLEVBQWdCLEdBQWMsa0JBQWtCLEVBQUssTUFBTSxFQUMvRCxFQUFJLEVBQWMsRUFDbEIsRUFBSSxFQUFjLEVBQ2xCLElBQUksRUFBVyxFQUNYLEVBQVcsRUFDZixHQUFJLEVBQUksSUFBTSxHQUFLLEVBQUksRUFBRyxDQUN4QixJQUFJLEVBQXNCLEdBQWMsd0JBQ3RDLEVBQVMsU0FBUyxRQUFVLE9BQzVCLEVBQUssT0FDTCxFQUFLLE9BQU8sRUFDZCxFQUNJLEVBQXNCLEdBQWMsd0JBQ3RDLEVBQVMsU0FBUyxRQUFVLE9BQzVCLEVBQUssT0FDTCxFQUFLLE9BQU8sRUFBSSxFQUNsQixFQUNBLEVBQUksTUFBTSx1QkFBeUIsS0FBSyxVQUFVLENBQW1CLENBQUMsRUFDdEUsRUFBSSxNQUFNLHVCQUF5QixLQUFLLFVBQVUsQ0FBbUIsQ0FBQyxFQUN0RSxFQUFZLEVBQW9CLEVBQ2hDLEVBQVksRUFBb0IsRUFDaEMsRUFBWSxFQUFvQixFQUNoQyxFQUFZLEVBQW9CLEVBRWxDLEdBQUksRUFBUyxRQUFlLE9BQUcsQ0FDN0IsTUFBTSxFQUFJLEVBQUssT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLFlBQVksRUFDL0MsRUFBUSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssUUFBUyxPQUFPLEVBQUUsS0FBSyxJQUFLLENBQUMsRUFBRSxLQUFLLElBQUssQ0FBQyxFQUFFLEtBQUssT0FBUSxLQUFLLEVBQUUsS0FBSyxjQUFlLFFBQVEsRUFBRSxLQUFLLEVBQVMsS0FBSyxFQUNySixPQUFPLE1BQVEsRUFDZixNQUFNLEVBQVMsRUFBTSxLQUFLLEVBQUUsUUFBUSxFQUNwQyxFQUFFLE9BQU8sT0FBUSxjQUFjLEVBQUUsS0FBSyxRQUFTLEtBQUssRUFBRSxLQUFLLElBQUssRUFBTyxFQUFJLEVBQUssUUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFLLEVBQU8sRUFBSSxFQUFLLFFBQVUsQ0FBQyxFQUFFLEtBQUssUUFBUyxFQUFPLE1BQVEsRUFBSyxPQUFPLEVBQUUsS0FBSyxTQUFVLEVBQU8sT0FBUyxFQUFLLE9BQU8sRUFHNU4sR0FEQSxFQUFJLEtBQUssc0JBQXdCLEtBQUssVUFBVSxDQUFRLENBQUMsRUFDckQsRUFBUyxpQkFBd0IsUUFBSyxFQUFTLGlCQUFtQixPQUVwRSxBQURVLEVBQUssT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLGFBQWEsRUFDcEQsT0FBTyxNQUFNLEVBQUUsS0FBSyxRQUFTLE9BQU8sRUFBRSxLQUFLLElBQUssQ0FBUyxFQUFFLEtBQUssSUFBSyxDQUFTLEVBQUUsS0FBSyxPQUFRLE9BQU8sRUFBRSxLQUFLLFlBQWEsR0FBRyxFQUFFLEtBQUssRUFBUyxjQUFjLEVBRTdKLEdBQUksRUFBUyxpQkFBd0IsUUFBSyxFQUFTLGlCQUFtQixPQUVwRSxBQURVLEVBQUssT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLGFBQWEsRUFDcEQsT0FBTyxNQUFNLEVBQUUsS0FBSyxRQUFTLE9BQU8sRUFBRSxLQUFLLElBQUssQ0FBUyxFQUFFLEtBQUssSUFBSyxDQUFTLEVBQUUsS0FBSyxPQUFRLE9BQU8sRUFBRSxLQUFLLFlBQWEsR0FBRyxFQUFFLEtBQUssRUFBUyxjQUFjLEVBRTdKLE9BQ0MsVUFBVSxFQUNULElBQTRCLFVBQWUsQ0FBQyxFQUFNLEVBQVUsRUFBTSxFQUFTLENBQzdFLEVBQUksTUFBTSxtQkFBb0IsRUFBVSxDQUFJLEVBQzVDLE1BQU0sRUFBSyxFQUFTLEdBQ2QsRUFBWSxDQUNoQixLQUNBLE1BQU8sRUFBUyxHQUNoQixNQUFPLEVBQ1AsT0FBUSxDQUNWLEVBQ00sRUFBSSxFQUFLLE9BQU8sR0FBRyxFQUFFLEtBQUssS0FBTSxFQUFRLEdBQUcsWUFBWSxDQUFFLENBQUMsRUFBRSxLQUFLLFFBQVMsWUFBWSxFQUM1RixJQUFJLEVBQ0osR0FBSSxFQUFTLEtBQ1gsRUFBUSxFQUFFLE9BQU8sT0FBTyxFQUFFLEtBQUssYUFBYyxFQUFTLElBQUksRUFBRSxLQUFLLFNBQVUsRUFBUyxVQUFVLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLEVBQUssV0FBYSxFQUFLLE9BQU8sRUFBRSxLQUFLLElBQUssQ0FBQyxNQUVwSyxHQUFRLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLEVBQUssV0FBYSxFQUFLLE9BQU8sRUFBRSxLQUFLLElBQUssQ0FBQyxFQUVoRixJQUFJLEVBQVUsR0FDZCxFQUFTLFlBQVksZ0JBQWdCLENBQUMsRUFBUSxDQUM1QyxNQUFNLEVBQWEsRUFBTSxPQUFPLE9BQU8sRUFBRSxLQUFLLE9BQVMsRUFBUyxNQUFNLEVBQ3RFLElBQUssRUFDSCxFQUFXLEtBQUssS0FBTSxFQUFLLFVBQVUsRUFFdkMsRUFBVSxHQUNYLEVBQ0QsSUFBSSxFQUFtQixJQUFvQixDQUFRLEVBQ25ELE1BQU0sRUFBYSxFQUFNLE9BQU8sT0FBTyxFQUFFLEtBQUssQ0FBZ0IsRUFBRSxLQUFLLFFBQVMsT0FBTyxFQUNyRixJQUFLLEVBQ0gsRUFBVyxLQUFLLEtBQU0sRUFBSyxVQUFVLEVBRXZDLE1BQU0sRUFBYyxFQUFNLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FDM0MsSUFBSSxFQUNBLEVBQ0EsRUFDSixHQUFJLEVBQVMsUUFBUSxPQUFTLEVBQUcsQ0FDL0IsRUFBYyxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssS0FBTSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQUssUUFBVSxFQUFjLEVBQUssY0FBZ0IsQ0FBQyxFQUFFLEtBQUssS0FBTSxFQUFLLFFBQVUsRUFBYyxFQUFLLGNBQWdCLENBQUMsRUFDM0ssTUFBTSxFQUFVLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLEVBQUssT0FBTyxFQUFFLEtBQUssSUFBSyxFQUFjLEVBQUssY0FBZ0IsRUFBSyxVQUFVLEVBQUUsS0FBSyxPQUFRLE9BQU8sRUFBRSxLQUFLLFFBQVMsV0FBVyxFQUN0SyxFQUFVLEdBQ1YsRUFBUyxRQUFRLGdCQUFnQixDQUFDLEVBQVEsQ0FDeEMsSUFBUyxFQUFTLEVBQVEsRUFBUyxDQUFJLEVBQ3ZDLEVBQVUsR0FDWCxFQUNELEVBQWEsRUFBUSxLQUFLLEVBQUUsUUFBUSxFQUV0QyxHQUFJLEVBQVMsUUFBUSxPQUFTLEVBQUcsQ0FDL0IsRUFBYyxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssS0FBTSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQUssUUFBVSxFQUFjLEVBQUssY0FBZ0IsRUFBVyxNQUFNLEVBQUUsS0FBSyxLQUFNLEVBQUssUUFBVSxFQUFjLEVBQUssY0FBZ0IsRUFBVyxNQUFNLEVBQzNNLE1BQU0sRUFBVSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSyxFQUFLLE9BQU8sRUFBRSxLQUFLLElBQUssRUFBYyxFQUFJLEVBQUssY0FBZ0IsRUFBVyxPQUFTLEVBQUssVUFBVSxFQUFFLEtBQUssT0FBUSxPQUFPLEVBQUUsS0FBSyxRQUFTLFdBQVcsRUFDOUwsRUFBVSxHQUNWLEVBQVMsUUFBUSxnQkFBZ0IsQ0FBQyxFQUFRLENBQ3hDLElBQVMsRUFBUyxFQUFRLEVBQVMsQ0FBSSxFQUN2QyxFQUFVLEdBQ1gsRUFFSCxNQUFNLEVBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUNsQyxJQUFJLEVBQWMsSUFDbEIsR0FBSSxFQUFTLFdBQVcsT0FBUyxFQUMvQixFQUFjLEVBQWMsRUFBUyxXQUFXLEtBQUssR0FBRyxFQUcxRCxNQUFNLEVBRE8sRUFBRSxPQUFPLE9BQVEsY0FBYyxFQUFFLEtBQUssSUFBSyxDQUFDLEVBQUUsS0FBSyxJQUFLLENBQUMsRUFBRSxLQUFLLFFBQVMsRUFBUyxNQUFRLEVBQUksRUFBSyxPQUFPLEVBQUUsS0FBSyxTQUFVLEVBQVMsT0FBUyxFQUFLLFFBQVUsSUFBTSxFQUFLLGFBQWEsRUFBRSxLQUFLLFFBQVMsQ0FBVyxFQUNyTSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BSXhDLEdBSEEsRUFBTSxLQUFLLEVBQUUsV0FBVyxnQkFBZ0IsQ0FBQyxFQUFHLENBQzFDLEVBQUUsYUFBYSxLQUFNLEVBQVksRUFBRSxRQUFRLEVBQUUsT0FBUyxDQUFDLEVBQ3hELEVBQ0csRUFBUyxRQUNYLEVBQU0sT0FBTyxPQUFPLEVBQUUsS0FBSyxFQUFTLE9BQU8sRUFFN0MsR0FBSSxFQUNGLEVBQVksS0FBSyxLQUFNLENBQVMsRUFFbEMsR0FBSSxFQUNGLEVBQVksS0FBSyxLQUFNLENBQVMsRUFJbEMsT0FGQSxFQUFVLE1BQVEsRUFDbEIsRUFBVSxPQUFTLEVBQVMsT0FBUyxFQUFLLFFBQVUsSUFBTSxFQUFLLGNBQ3hELEdBQ04sV0FBVyxFQUNWLElBQXNDLFVBQWUsQ0FBQyxFQUFVLENBQ2xFLElBQUksRUFBbUIsRUFBUyxHQUNoQyxHQUFJLEVBQVMsS0FDWCxHQUFvQixJQUFNLEdBQWtCLEVBQVMsSUFBSSxFQUFJLElBRS9ELE9BQU8sR0FDTixxQkFBcUIsRUFDcEIsSUFBMkIsVUFBZSxDQUFDLEVBQU0sRUFBTSxFQUFNLEVBQVUsQ0FDekUsRUFBSSxNQUFNLGtCQUFtQixFQUFNLENBQUksRUFDdkMsTUFBTSxFQUFLLEVBQUssR0FDVixFQUFXLENBQ2YsS0FDQSxLQUFNLEVBQUssS0FDWCxNQUFPLEVBQ1AsT0FBUSxDQUNWLEVBQ00sRUFBSSxFQUFLLE9BQU8sR0FBRyxFQUFFLEtBQUssS0FBTSxDQUFFLEVBQUUsS0FBSyxRQUFTLFlBQVksRUFDcEUsSUFBSSxFQUFPLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLEVBQUssV0FBYSxFQUFLLE9BQU8sRUFBRSxLQUFLLElBQUssQ0FBQyxFQUNqRixNQUFNLEVBQVEsS0FBSyxNQUFNLElBQUksRUFBSyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQ3JELEVBQU0sZ0JBQWdCLENBQUMsRUFBTyxDQUM1QixFQUFJLE1BQU0sZ0JBQWdCLEdBQU8sRUFDakMsRUFBSyxPQUFPLE9BQU8sRUFBRSxLQUFLLENBQUssRUFBRSxLQUFLLFFBQVMsT0FBTyxFQUFFLEtBQUssS0FBTSxFQUFLLFVBQVUsRUFDbkYsRUFDRCxNQUFNLEVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUszQixFQUpPLEVBQUUsT0FBTyxPQUFRLGNBQWMsRUFBRSxLQUFLLElBQUssQ0FBQyxFQUFFLEtBQUssSUFBSyxDQUFDLEVBQUUsS0FBSyxRQUFTLEVBQVEsTUFBUSxFQUFJLEVBQUssT0FBTyxFQUFFLEtBQ3RILFNBQ0EsRUFBUSxPQUFTLEVBQU0sT0FBUyxFQUFLLFdBQWEsRUFBSyxRQUFVLElBQU0sRUFBSyxhQUM5RSxFQUN1QixLQUFLLEVBQUUsUUFBUSxFQUFFLE1BTXhDLE9BTEEsRUFBSyxLQUFLLEVBQUUsV0FBVyxnQkFBZ0IsQ0FBQyxFQUFHLENBQ3pDLEVBQUUsYUFBYSxLQUFNLEVBQVksRUFBRSxRQUFRLEVBQUUsT0FBUyxDQUFDLEVBQ3hELEVBQ0QsRUFBUyxNQUFRLEVBQ2pCLEVBQVMsT0FBUyxFQUFRLE9BQVMsRUFBTSxPQUFTLEVBQUssV0FBYSxFQUFLLFFBQVUsSUFBTSxFQUFLLGNBQ3ZGLEdBQ04sVUFBVSxFQUNULElBQTJCLFVBQWUsQ0FBQyxFQUFRLEVBQVEsRUFBUyxFQUFNLENBQzVFLE1BQVEsY0FBYSxZQUFhLEVBQU8sa0JBQWtCLEVBQ3JELEVBQVEsRUFBTyxPQUFPLE9BQU8sRUFBRSxLQUFLLElBQUssRUFBSyxPQUFPLEVBQUUsS0FBSyxDQUFXLEVBQzdFLEdBQUksSUFBYSxHQUNmLEVBQU0sS0FBSyxRQUFTLEVBQU8sUUFBUSxFQUVyQyxJQUFLLEVBQ0gsRUFBTSxLQUFLLEtBQU0sRUFBSyxVQUFVLEdBRWpDLFVBQVUsRUFDVCxHQUFrQixDQUNwQix3QkFDQSxjQUNBLGFBQ0EsWUFDRixFQUdJLEdBQVUsQ0FBQyxFQUVYLEdBQTZCLFVBQWUsQ0FBQyxFQUFPLENBQ3RELE1BQU0sRUFBYSxPQUFPLFFBQVEsRUFBTyxFQUFFLEtBQUssQ0FBQyxJQUFVLEVBQU0sR0FBRyxRQUFVLENBQUssRUFDbkYsR0FBSSxFQUNGLE9BQU8sRUFBVyxJQUVuQixZQUFZLEVBQ1gsSUFBZ0MsVUFBZSxDQUFDLEVBQU0sQ0FDeEQsRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sZ0JBQWdCLEVBQUUsS0FBSyxRQUFTLFdBQVcsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEdBQUcsRUFBRSxLQUFLLGVBQWdCLEdBQUcsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSyxvQkFBb0IsRUFDcFAsRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sY0FBYyxFQUFFLEtBQUssT0FBUSxFQUFFLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsRUFBRSxFQUFFLEtBQUssZUFBZ0IsRUFBRSxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLG9CQUFvQixFQUN0TixFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxrQkFBa0IsRUFBRSxLQUFLLFFBQVMsV0FBVyxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsR0FBRyxFQUFFLEtBQUssZUFBZ0IsR0FBRyxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLDBCQUEwQixFQUM1UCxFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxnQkFBZ0IsRUFBRSxLQUFLLE9BQVEsRUFBRSxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEVBQUUsRUFBRSxLQUFLLGVBQWdCLEVBQUUsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywwQkFBMEIsRUFDOU4sRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sa0JBQWtCLEVBQUUsS0FBSyxRQUFTLFdBQVcsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEdBQUcsRUFBRSxLQUFLLGVBQWdCLEdBQUcsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywwQkFBMEIsRUFDNVAsRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sZ0JBQWdCLEVBQUUsS0FBSyxPQUFRLEVBQUUsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxFQUFFLEVBQUUsS0FBSyxlQUFnQixFQUFFLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUssMEJBQTBCLEVBQzlOLEVBQUssT0FBTyxNQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLGlCQUFpQixFQUFFLEtBQUssUUFBUyxXQUFXLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxHQUFHLEVBQUUsS0FBSyxlQUFnQixHQUFHLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUsseUJBQXlCLEVBQzFQLEVBQUssT0FBTyxNQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLGVBQWUsRUFBRSxLQUFLLE9BQVEsRUFBRSxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEVBQUUsRUFBRSxLQUFLLGVBQWdCLEVBQUUsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywyQkFBMkIsR0FDN04sZUFBZSxFQUNkLElBQXVCLFVBQWUsQ0FBQyxFQUFNLEVBQUksRUFBVSxFQUFTLENBQ3RFLE1BQU0sRUFBTyxHQUFVLEVBQUUsTUFDekIsR0FBVSxDQUFDLEVBQ1gsRUFBSSxLQUFLLHFCQUF1QixDQUFJLEVBQ3BDLE1BQU0sRUFBZ0IsR0FBVSxFQUFFLGNBQ2xDLElBQUksRUFDSixHQUFJLElBQWtCLFVBQ3BCLEVBQWlCLEdBQU8sS0FBTyxDQUFFLEVBRW5DLE1BQU0sRUFBTyxJQUFrQixVQUFZLEdBQU8sRUFBZSxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsSUFBSSxFQUFJLEdBQU8sTUFBTSxFQUMzRyxFQUFXLEVBQUssT0FBTyxRQUFRLEtBQU0sRUFDM0MsSUFBYyxDQUFRLEVBQ3RCLE1BQU0sRUFBSSxJQUFhLEdBQU0sQ0FDM0IsV0FBWSxFQUNkLENBQUMsRUFDRCxFQUFFLFNBQVMsQ0FDVCxhQUFjLEVBQ2hCLENBQUMsRUFDRCxFQUFFLDRCQUE0QixFQUFHLENBQy9CLE1BQU8sQ0FBQyxFQUNULEVBQ0QsTUFBTSxFQUFVLEVBQVEsR0FBRyxXQUFXLEVBQ2hDLEVBQU8sQ0FBQyxHQUFHLEVBQVEsS0FBSyxDQUFDLEVBQy9CLFFBQVcsS0FBTyxFQUFNLENBQ3RCLE1BQU0sRUFBVyxFQUFRLElBQUksQ0FBRyxFQUMxQixFQUFPLEdBQWdCLFVBQVUsRUFBVSxFQUFVLEVBQU0sQ0FBTyxFQUN4RSxHQUFRLEVBQUssSUFBTSxFQUNuQixFQUFFLFFBQVEsRUFBSyxHQUFJLENBQUksRUFDdkIsRUFBSSxLQUFLLGVBQWlCLEVBQUssTUFBTSxFQUd2QyxBQURrQixFQUFRLEdBQUcsYUFBYSxFQUNoQyxnQkFBZ0IsQ0FBQyxFQUFVLENBQ25DLEVBQUksS0FFRixRQUFVLEdBQVcsRUFBUyxHQUFHLEVBQUksR0FBVyxFQUFTLEdBQUcsRUFBSSxLQUFLLFVBQVUsQ0FBUSxDQUN6RixFQUNBLEVBQUUsUUFDQSxHQUFXLEVBQVMsR0FBRyxFQUN2QixHQUFXLEVBQVMsR0FBRyxFQUN2QixDQUNFLFVBQ0YsRUFDQSxFQUFTLE9BQVMsU0FDcEIsRUFDRCxFQUNhLEVBQVEsR0FBRyxTQUFTLEVBQzVCLGdCQUFnQixDQUFDLEVBQU0sQ0FDM0IsRUFBSSxNQUFNLGdCQUFnQixLQUFLLFVBQVUsQ0FBSSxHQUFHLEVBQ2hELE1BQU0sRUFBTyxHQUFnQixTQUFTLEVBQVUsRUFBTSxFQUFNLENBQU8sRUFHbkUsR0FGQSxHQUFRLEVBQUssSUFBTSxFQUNuQixFQUFFLFFBQVEsRUFBSyxHQUFJLENBQUksRUFDbkIsRUFBSyxPQUFTLEVBQVEsSUFBSSxFQUFLLEtBQUssRUFDdEMsRUFBRSxRQUNBLEVBQUssR0FDTCxHQUFXLEVBQUssS0FBSyxFQUNyQixDQUNFLFNBQVUsQ0FDUixJQUFLLEVBQUssR0FDVixJQUFLLEVBQUssTUFDVixTQUFVLENBQ1IsTUFBTyxPQUNQLE1BQU8sT0FDUCxTQUFVLEVBQ1osQ0FDRixDQUNGLEVBQ0EsU0FDRixFQUVILEVBQ0QsR0FBWSxDQUFDLEVBQ2IsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRyxDQUM1QixHQUFJLElBQVcsUUFBSyxFQUFFLEtBQUssQ0FBQyxJQUFXLE9BQ3JDLEVBQUksTUFBTSxRQUFVLEVBQUksS0FBTyxLQUFLLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3hELEVBQUssT0FBTyxLQUFPLEVBQVEsR0FBRyxZQUFZLENBQUMsR0FBSyxFQUFFLEVBQUUsS0FDbEQsWUFDQSxjQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFRLEdBQUssS0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFTLEdBQUssSUFDcEcsRUFFSCxFQUNELEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUcsQ0FDNUIsR0FBSSxJQUFXLFFBQUssRUFBRSxLQUFLLENBQUMsSUFBVyxPQUNyQyxFQUFJLE1BQU0sUUFBVSxFQUFFLEVBQUksT0FBUyxFQUFFLEVBQUksS0FBTyxLQUFLLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3pFLEdBQWdCLFNBQVMsRUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBVSxFQUFNLENBQU8sRUFFbEYsRUFDRCxNQUFNLEVBQVksRUFBUyxLQUFLLEVBQUUsUUFBUSxFQUNwQyxFQUFRLEVBQVUsTUFBUSxHQUFVLEVBQ3BDLEVBQVMsRUFBVSxPQUFTLEdBQVUsRUFDNUMsR0FBaUIsRUFBVSxFQUFRLEVBQU8sRUFBSyxXQUFXLEVBQzFELE1BQU0sRUFBTyxHQUFHLEVBQVUsRUFBSSxNQUFXLEVBQVUsRUFBSSxNQUFXLEtBQVMsSUFDM0UsRUFBSSxNQUFNLFdBQVcsR0FBTSxFQUMzQixFQUFTLEtBQUssVUFBVyxDQUFJLEdBQzVCLE1BQU0sRUFDTCxJQUF3QixDQUMxQixRQUNGLEVBR0ksSUFBVSxDQUNaLE9BQVEsR0FDUixHQUFJLEdBQ0osU0FBVSxJQUNWLE9BQVEsR0FDUixLQUFzQixFQUFPLENBQUMsSUFBUSxDQUNwQyxJQUFLLEVBQUksTUFDUCxFQUFJLE1BQVEsQ0FBQyxFQUVmLEVBQUksTUFBTSxvQkFBc0IsRUFBSSxvQkFDcEMsR0FBZ0IsTUFBTSxHQUNyQixNQUFNLENBQ1gsSUMzS0EsU0FBUyxFQUFnQixDQUFDLEVBQUksRUFBTyxDQUNuQyxHQUFJLEdBQVUsRUFBRSxVQUFVLFlBQWMsRUFDdEMsRUFBRyxNQUFNLE1BQVEsRUFBTSxPQUFTLEVBQUksS0FDcEMsRUFBRyxNQUFNLE9BQVMsV0F2TGxCLElBS0EsSUFLQSxJQUlBLElBSUEsSUFJQSxJQUlBLElBSUEsSUFJQSxJQUlBLElBR0EsSUFXQSxHQU1BLElBUUEsSUFXQSxJQVdBLEdBQ0EsR0FDQSxJQUlBLEdBNkZBLEdBOEVBLElBWUEsSUF1REEsSUF5QkEsaUJBMVhKLEtBR0EsS0FJQSxLQUdBLEtBR0EsS0ErREEsS0F2REksSUFBZ0MsRUFBTyxDQUFDLEVBQU0sRUFBYSxFQUFNLElBQU8sQ0FDMUUsRUFBWSxRQUFRLENBQUMsSUFBZSxDQUNsQyxJQUFRLEdBQVksRUFBTSxFQUFNLENBQUUsRUFDbkMsR0FDQSxlQUFlLEVBQ2QsSUFBNEIsRUFBTyxDQUFDLEVBQU0sRUFBTSxJQUFPLENBQ3pELEVBQUksTUFBTSxzQkFBdUIsQ0FBRSxFQUNuQyxFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxpQkFBaUIsRUFBRSxLQUFLLFFBQVMsb0JBQXNCLENBQUksRUFBRSxLQUFLLE9BQVEsRUFBRSxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEdBQUcsRUFBRSxLQUFLLGVBQWdCLEdBQUcsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSyxvQkFBb0IsRUFDdlIsRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sRUFBSyxJQUFNLEVBQU8sZUFBZSxFQUFFLEtBQUssUUFBUyxvQkFBc0IsQ0FBSSxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsRUFBRSxFQUFFLEtBQUssZUFBZ0IsRUFBRSxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLG9CQUFvQixHQUNqUixXQUFXLEVBQ1YsSUFBOEIsRUFBTyxDQUFDLEVBQU0sRUFBTSxJQUFPLENBQzNELEVBQUssT0FBTyxNQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQUssSUFBTSxFQUFPLG1CQUFtQixFQUFFLEtBQUssUUFBUyxzQkFBd0IsQ0FBSSxFQUFFLEtBQUssT0FBUSxFQUFFLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsR0FBRyxFQUFFLEtBQUssZUFBZ0IsR0FBRyxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLDBCQUEwQixFQUNqUyxFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxpQkFBaUIsRUFBRSxLQUFLLFFBQVMsc0JBQXdCLENBQUksRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEVBQUUsRUFBRSxLQUFLLGVBQWdCLEVBQUUsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywwQkFBMEIsR0FDM1IsYUFBYSxFQUNaLElBQThCLEVBQU8sQ0FBQyxFQUFNLEVBQU0sSUFBTyxDQUMzRCxFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxtQkFBbUIsRUFBRSxLQUFLLFFBQVMsc0JBQXdCLENBQUksRUFBRSxLQUFLLE9BQVEsRUFBRSxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLEdBQUcsRUFBRSxLQUFLLGVBQWdCLEdBQUcsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywwQkFBMEIsRUFDalMsRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sRUFBSyxJQUFNLEVBQU8saUJBQWlCLEVBQUUsS0FBSyxRQUFTLHNCQUF3QixDQUFJLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxFQUFFLEVBQUUsS0FBSyxlQUFnQixFQUFFLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUssMEJBQTBCLEdBQzNSLGFBQWEsRUFDWixJQUE2QixFQUFPLENBQUMsRUFBTSxFQUFNLElBQU8sQ0FDMUQsRUFBSyxPQUFPLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sRUFBSyxJQUFNLEVBQU8sa0JBQWtCLEVBQUUsS0FBSyxRQUFTLHFCQUF1QixDQUFJLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxHQUFHLEVBQUUsS0FBSyxlQUFnQixHQUFHLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUsseUJBQXlCLEVBQzdSLEVBQUssT0FBTyxNQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQUssSUFBTSxFQUFPLGdCQUFnQixFQUFFLEtBQUssUUFBUyxxQkFBdUIsQ0FBSSxFQUFFLEtBQUssT0FBUSxFQUFFLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsRUFBRSxFQUFFLEtBQUssZUFBZ0IsRUFBRSxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLDJCQUEyQixHQUMzUixZQUFZLEVBQ1gsSUFBMkIsRUFBTyxDQUFDLEVBQU0sRUFBTSxJQUFPLENBQ3hELEVBQUssT0FBTyxNQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQUssSUFBTSxFQUFPLGdCQUFnQixFQUFFLEtBQUssUUFBUyxtQkFBcUIsQ0FBSSxFQUFFLEtBQUssT0FBUSxFQUFFLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsR0FBRyxFQUFFLEtBQUssZUFBZ0IsR0FBRyxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUUsS0FBSyxTQUFVLE9BQU8sRUFBRSxLQUFLLE9BQVEsYUFBYSxFQUFFLEtBQUssS0FBTSxDQUFDLEVBQUUsS0FBSyxLQUFNLENBQUMsRUFBRSxLQUFLLElBQUssQ0FBQyxFQUNwVixFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxjQUFjLEVBQUUsS0FBSyxRQUFTLG1CQUFxQixDQUFJLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxHQUFHLEVBQUUsS0FBSyxlQUFnQixHQUFHLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLFNBQVUsT0FBTyxFQUFFLEtBQUssT0FBUSxhQUFhLEVBQUUsS0FBSyxLQUFNLENBQUMsRUFBRSxLQUFLLEtBQU0sQ0FBQyxFQUFFLEtBQUssSUFBSyxDQUFDLEdBQ2hWLFVBQVUsRUFDVCxJQUF3QixFQUFPLENBQUMsRUFBTSxFQUFNLElBQU8sQ0FDckQsRUFBSyxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sRUFBSyxJQUFNLEVBQU8sV0FBVyxFQUFFLEtBQUssUUFBUyxVQUFZLENBQUksRUFBRSxLQUFLLFVBQVcsV0FBVyxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsZ0JBQWdCLEVBQUUsS0FBSyxjQUFlLEVBQUUsRUFBRSxLQUFLLGVBQWdCLEVBQUUsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSyx1QkFBdUIsRUFBRSxLQUFLLFFBQVMsaUJBQWlCLEVBQUUsTUFBTSxlQUFnQixDQUFDLEVBQUUsTUFBTSxtQkFBb0IsS0FBSyxFQUN0WixFQUFLLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxhQUFhLEVBQUUsS0FBSyxRQUFTLFVBQVksQ0FBSSxFQUFFLEtBQUssVUFBVyxXQUFXLEVBQUUsS0FBSyxPQUFRLEdBQUcsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxnQkFBZ0IsRUFBRSxLQUFLLGNBQWUsRUFBRSxFQUFFLEtBQUssZUFBZ0IsRUFBRSxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFLLHdCQUF3QixFQUFFLEtBQUssUUFBUyxpQkFBaUIsRUFBRSxNQUFNLGVBQWdCLENBQUMsRUFBRSxNQUFNLG1CQUFvQixLQUFLLEdBQzFaLE9BQU8sRUFDTixJQUF5QixFQUFPLENBQUMsRUFBTSxFQUFNLElBQU8sQ0FDdEQsRUFBSyxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sRUFBSyxJQUFNLEVBQU8sWUFBWSxFQUFFLEtBQUssUUFBUyxVQUFZLENBQUksRUFBRSxLQUFLLFVBQVcsV0FBVyxFQUFFLEtBQUssT0FBUSxFQUFFLEVBQUUsS0FBSyxPQUFRLENBQUMsRUFBRSxLQUFLLGNBQWUsZ0JBQWdCLEVBQUUsS0FBSyxjQUFlLEVBQUUsRUFBRSxLQUFLLGVBQWdCLEVBQUUsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxHQUFHLEVBQUUsS0FBSyxLQUFNLEdBQUcsRUFBRSxLQUFLLElBQUssR0FBRyxFQUFFLEtBQUssUUFBUyxpQkFBaUIsRUFBRSxNQUFNLGVBQWdCLENBQUMsRUFBRSxNQUFNLG1CQUFvQixLQUFLLEVBQ3RhLEVBQUssT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQUssSUFBTSxFQUFPLGNBQWMsRUFBRSxLQUFLLFFBQVMsVUFBWSxDQUFJLEVBQUUsS0FBSyxVQUFXLFdBQVcsRUFBRSxLQUFLLE9BQVEsRUFBRSxFQUFFLEtBQUssT0FBUSxDQUFDLEVBQUUsS0FBSyxjQUFlLGdCQUFnQixFQUFFLEtBQUssY0FBZSxFQUFFLEVBQUUsS0FBSyxlQUFnQixFQUFFLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLFFBQVEsRUFBRSxLQUFLLEtBQU0sR0FBRyxFQUFFLEtBQUssS0FBTSxHQUFHLEVBQUUsS0FBSyxJQUFLLEdBQUcsRUFBRSxLQUFLLFFBQVMsaUJBQWlCLEVBQUUsTUFBTSxlQUFnQixDQUFDLEVBQUUsTUFBTSxtQkFBb0IsS0FBSyxHQUN2YSxRQUFRLEVBQ1AsSUFBd0IsRUFBTyxDQUFDLEVBQU0sRUFBTSxJQUFPLENBQ3JELEVBQUssT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQUssSUFBTSxFQUFPLFdBQVcsRUFBRSxLQUFLLFFBQVMsZ0JBQWtCLENBQUksRUFBRSxLQUFLLFVBQVcsV0FBVyxFQUFFLEtBQUssT0FBUSxFQUFFLEVBQUUsS0FBSyxPQUFRLEdBQUcsRUFBRSxLQUFLLGNBQWUsZ0JBQWdCLEVBQUUsS0FBSyxjQUFlLEVBQUUsRUFBRSxLQUFLLGVBQWdCLEVBQUUsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywyQkFBMkIsRUFBRSxLQUFLLFFBQVMsaUJBQWlCLEVBQUUsTUFBTSxlQUFnQixDQUFDLEVBQUUsTUFBTSxtQkFBb0IsS0FBSyxFQUNuYSxFQUFLLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxhQUFhLEVBQUUsS0FBSyxRQUFTLGdCQUFrQixDQUFJLEVBQUUsS0FBSyxVQUFXLFdBQVcsRUFBRSxLQUFLLE9BQVEsRUFBRSxFQUFFLEtBQUssT0FBUSxHQUFHLEVBQUUsS0FBSyxjQUFlLGdCQUFnQixFQUFFLEtBQUssY0FBZSxFQUFFLEVBQUUsS0FBSyxlQUFnQixFQUFFLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUssMkJBQTJCLEVBQUUsS0FBSyxRQUFTLGlCQUFpQixFQUFFLE1BQU0sZUFBZ0IsQ0FBQyxFQUFFLE1BQU0sbUJBQW9CLEtBQUssR0FDcGEsT0FBTyxFQUNOLElBQXVCLEVBQU8sQ0FBQyxFQUFNLEVBQU0sSUFBTyxDQUNwRCxFQUFLLE9BQU8sTUFBTSxFQUFFLE9BQU8sUUFBUSxFQUFFLEtBQUssS0FBTSxFQUFLLElBQU0sRUFBTyxVQUFVLEVBQUUsS0FBSyxPQUFRLEVBQUUsRUFBRSxLQUFLLE9BQVEsQ0FBQyxFQUFFLEtBQUssY0FBZSxFQUFFLEVBQUUsS0FBSyxlQUFnQixFQUFFLEVBQUUsS0FBSyxjQUFlLGFBQWEsRUFBRSxLQUFLLFNBQVUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssSUFBSywyQkFBMkIsR0FDN1EsTUFBTSxFQUNMLElBQVUsQ0FDWixjQUNBLGdCQUNBLGdCQUNBLGVBQ0EsYUFDQSxVQUNBLFdBQ0EsVUFDQSxRQUNGLEVBQ0ksR0FBa0IsSUFNbEIsSUFBaUMsRUFBTyxDQUFDLEVBQVMsRUFBTSxFQUFLLEVBQUksSUFBZ0IsQ0FDbkYsR0FBSSxFQUFLLGVBQ1AsSUFBYyxFQUFTLFFBQVMsRUFBSyxlQUFnQixFQUFLLEVBQUksQ0FBVyxFQUUzRSxHQUFJLEVBQUssYUFDUCxJQUFjLEVBQVMsTUFBTyxFQUFLLGFBQWMsRUFBSyxFQUFJLENBQVcsR0FFdEUsZ0JBQWdCLEVBQ2YsSUFBZ0IsQ0FDbEIsWUFBYSxRQUNiLFlBQWEsUUFDYixXQUFZLE9BQ1osYUFBYyxTQUNkLFlBQWEsY0FDYixVQUFXLFlBQ1gsWUFBYSxjQUNiLFdBQVksYUFDWixTQUFVLFVBQ1osRUFDSSxJQUFnQyxFQUFPLENBQUMsRUFBUyxFQUFVLEVBQVcsRUFBSyxFQUFJLElBQWdCLENBQ2pHLE1BQU0sRUFBZ0IsSUFBYyxHQUNwQyxJQUFLLEVBQWUsQ0FDbEIsRUFBSSxLQUFLLHVCQUF1QixHQUFXLEVBQzNDLE9BRUYsTUFBTSxFQUFTLElBQWEsUUFBVSxRQUFVLE1BQ2hELEVBQVEsS0FBSyxVQUFVLElBQVksT0FBTyxLQUFPLEtBQU0sS0FBZSxJQUFnQixJQUFTLEdBQzlGLGVBQWUsRUFHZCxHQUFhLENBQUMsRUFDZCxHQUFpQixDQUFDLEVBQ2xCLElBQXdCLEVBQU8sSUFBTSxDQUN2QyxHQUFhLENBQUMsRUFDZCxHQUFpQixDQUFDLEdBQ2pCLE9BQU8sRUFDTixHQUFrQyxFQUFPLENBQUMsRUFBTSxJQUFTLENBQzNELE1BQU0sRUFBUyxHQUFVLEVBQ25CLEVBQWdCLEdBQVMsRUFBTyxVQUFVLFVBQVUsRUFDcEQsRUFBZSxFQUFLLFlBQWMsV0FBYSxHQUNuRCxFQUNBLEVBQUssTUFDTCxDQUNFLE1BQU8sRUFBSyxXQUNaLGdCQUNBLGlCQUFrQixFQUNwQixFQUNBLENBQ0YsRUFBSSxHQUFvQixFQUFLLE1BQU8sRUFBSyxVQUFVLEVBQzdDLEVBQVksRUFBSyxPQUFPLEdBQUcsRUFBRSxLQUFLLFFBQVMsV0FBVyxFQUN0RCxFQUFRLEVBQVUsT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLE9BQU8sRUFDekQsRUFBTSxLQUFLLEVBQUUsWUFBWSxDQUFZLEVBQ3JDLElBQUksRUFBTyxFQUFhLFFBQVEsRUFDaEMsR0FBSSxFQUFlLENBQ2pCLE1BQU0sRUFBTSxFQUFhLFNBQVMsR0FDNUIsRUFBSyxHQUFPLENBQVksRUFDOUIsRUFBTyxFQUFJLHNCQUFzQixFQUNqQyxFQUFHLEtBQUssUUFBUyxFQUFLLEtBQUssRUFDM0IsRUFBRyxLQUFLLFNBQVUsRUFBSyxNQUFNLEVBRS9CLEVBQU0sS0FBSyxZQUFhLGNBQWdCLEVBQUssTUFBUSxFQUFJLE1BQVEsRUFBSyxPQUFTLEVBQUksR0FBRyxFQUN0RixHQUFXLEVBQUssSUFBTSxFQUN0QixFQUFLLE1BQVEsRUFBSyxNQUNsQixFQUFLLE9BQVMsRUFBSyxPQUNuQixJQUFJLEVBQ0osR0FBSSxFQUFLLGVBQWdCLENBQ3ZCLE1BQU0sRUFBb0IsR0FBb0IsRUFBSyxlQUFnQixFQUFLLFVBQVUsRUFDNUUsRUFBcUIsRUFBSyxPQUFPLEdBQUcsRUFBRSxLQUFLLFFBQVMsZUFBZSxFQUNuRSxFQUFRLEVBQW1CLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxPQUFPLEVBQ2xFLEVBQUssRUFBTSxLQUFLLEVBQUUsWUFBWSxDQUFpQixFQUMvQyxNQUFNLEVBQVEsRUFBa0IsUUFBUSxFQUV4QyxHQURBLEVBQU0sS0FBSyxZQUFhLGNBQWdCLEVBQU0sTUFBUSxFQUFJLE1BQVEsRUFBTSxPQUFTLEVBQUksR0FBRyxHQUNuRixHQUFlLEVBQUssSUFDdkIsR0FBZSxFQUFLLElBQU0sQ0FBQyxFQUU3QixHQUFlLEVBQUssSUFBSSxVQUFZLEVBQ3BDLEdBQWlCLEVBQUksRUFBSyxjQUFjLEVBRTFDLEdBQUksRUFBSyxnQkFBaUIsQ0FDeEIsTUFBTSxFQUFvQixHQUFvQixFQUFLLGdCQUFpQixFQUFLLFVBQVUsRUFDN0UsRUFBc0IsRUFBSyxPQUFPLEdBQUcsRUFBRSxLQUFLLFFBQVMsZUFBZSxFQUNwRSxFQUFRLEVBQW9CLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxPQUFPLEVBQ25FLEVBQUssRUFBb0IsS0FBSyxFQUFFLFlBQVksQ0FBaUIsRUFDN0QsRUFBTSxLQUFLLEVBQUUsWUFBWSxDQUFpQixFQUMxQyxNQUFNLEVBQVEsRUFBa0IsUUFBUSxFQUV4QyxHQURBLEVBQU0sS0FBSyxZQUFhLGNBQWdCLEVBQU0sTUFBUSxFQUFJLE1BQVEsRUFBTSxPQUFTLEVBQUksR0FBRyxHQUNuRixHQUFlLEVBQUssSUFDdkIsR0FBZSxFQUFLLElBQU0sQ0FBQyxFQUU3QixHQUFlLEVBQUssSUFBSSxXQUFhLEVBQ3JDLEdBQWlCLEVBQUksRUFBSyxlQUFlLEVBRTNDLEdBQUksRUFBSyxhQUFjLENBQ3JCLE1BQU0sRUFBa0IsR0FBb0IsRUFBSyxhQUFjLEVBQUssVUFBVSxFQUN4RSxFQUFtQixFQUFLLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxlQUFlLEVBQ2pFLEVBQVEsRUFBaUIsT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLE9BQU8sRUFDaEUsRUFBSyxFQUFNLEtBQUssRUFBRSxZQUFZLENBQWUsRUFDN0MsTUFBTSxFQUFRLEVBQWdCLFFBQVEsRUFHdEMsR0FGQSxFQUFNLEtBQUssWUFBYSxjQUFnQixFQUFNLE1BQVEsRUFBSSxNQUFRLEVBQU0sT0FBUyxFQUFJLEdBQUcsRUFDeEYsRUFBaUIsS0FBSyxFQUFFLFlBQVksQ0FBZSxHQUM5QyxHQUFlLEVBQUssSUFDdkIsR0FBZSxFQUFLLElBQU0sQ0FBQyxFQUU3QixHQUFlLEVBQUssSUFBSSxRQUFVLEVBQ2xDLEdBQWlCLEVBQUksRUFBSyxZQUFZLEVBRXhDLEdBQUksRUFBSyxjQUFlLENBQ3RCLE1BQU0sRUFBa0IsR0FBb0IsRUFBSyxjQUFlLEVBQUssVUFBVSxFQUN6RSxFQUFvQixFQUFLLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxlQUFlLEVBQ2xFLEVBQVEsRUFBa0IsT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLE9BQU8sRUFDakUsRUFBSyxFQUFNLEtBQUssRUFBRSxZQUFZLENBQWUsRUFDN0MsTUFBTSxFQUFRLEVBQWdCLFFBQVEsRUFHdEMsR0FGQSxFQUFNLEtBQUssWUFBYSxjQUFnQixFQUFNLE1BQVEsRUFBSSxNQUFRLEVBQU0sT0FBUyxFQUFJLEdBQUcsRUFDeEYsRUFBa0IsS0FBSyxFQUFFLFlBQVksQ0FBZSxHQUMvQyxHQUFlLEVBQUssSUFDdkIsR0FBZSxFQUFLLElBQU0sQ0FBQyxFQUU3QixHQUFlLEVBQUssSUFBSSxTQUFXLEVBQ25DLEdBQWlCLEVBQUksRUFBSyxhQUFhLEVBRXpDLE9BQU8sR0FDTixpQkFBaUIsRUFPcEIsRUFBTyxHQUFrQixrQkFBa0IsRUFDdkMsR0FBb0MsRUFBTyxDQUFDLEVBQU0sSUFBVSxDQUM5RCxFQUFJLE1BQU0sc0JBQXVCLEVBQUssR0FBSSxFQUFLLE1BQU8sR0FBVyxFQUFLLElBQUssQ0FBSyxFQUNoRixJQUFJLEVBQU8sRUFBTSxZQUFjLEVBQU0sWUFBYyxFQUFNLGFBQ3pELE1BQU0sRUFBYSxHQUFVLEdBQ3JCLDRCQUE2QixHQUF3QixDQUFVLEVBQ3ZFLEdBQUksRUFBSyxNQUFPLENBQ2QsTUFBTSxFQUFLLEdBQVcsRUFBSyxJQUMzQixJQUFhLEVBQVQsRUFDUyxFQUFULEdBQUksRUFDUixHQUFJLEVBQU0sQ0FDUixNQUFNLEVBQU0sR0FBYyxrQkFBa0IsQ0FBSSxFQVloRCxHQVhBLEVBQUksTUFDRixnQkFBa0IsRUFBSyxNQUFRLFVBQy9CLEVBQ0EsSUFDQSxFQUNBLFNBQ0EsRUFBSSxFQUNKLElBQ0EsRUFBSSxFQUNKLFNBQ0YsRUFDSSxFQUFNLFlBQ1IsRUFBSSxFQUFJLEVBQ1IsRUFBSSxFQUFJLEVBR1osRUFBRyxLQUFLLFlBQWEsYUFBYSxNQUFNLEVBQUksRUFBMkIsSUFBSSxFQUU3RSxHQUFJLEVBQUssZUFBZ0IsQ0FDdkIsTUFBTSxFQUFLLEdBQWUsRUFBSyxJQUFJLFVBQ25DLElBQWEsRUFBVCxFQUNTLEVBQVQsR0FBSSxFQUNSLEdBQUksRUFBTSxDQUNSLE1BQU0sRUFBTSxHQUFjLDBCQUEwQixFQUFLLGVBQWlCLEdBQUssRUFBRyxhQUFjLENBQUksRUFDcEcsRUFBSSxFQUFJLEVBQ1IsRUFBSSxFQUFJLEVBRVYsRUFBRyxLQUFLLFlBQWEsYUFBYSxNQUFNLElBQUksRUFFOUMsR0FBSSxFQUFLLGdCQUFpQixDQUN4QixNQUFNLEVBQUssR0FBZSxFQUFLLElBQUksV0FDbkMsSUFBYSxFQUFULEVBQ1MsRUFBVCxHQUFJLEVBQ1IsR0FBSSxFQUFNLENBQ1IsTUFBTSxFQUFNLEdBQWMsMEJBQ3hCLEVBQUssZUFBaUIsR0FBSyxFQUMzQixjQUNBLENBQ0YsRUFDQSxFQUFJLEVBQUksRUFDUixFQUFJLEVBQUksRUFFVixFQUFHLEtBQUssWUFBYSxhQUFhLE1BQU0sSUFBSSxFQUU5QyxHQUFJLEVBQUssYUFBYyxDQUNyQixNQUFNLEVBQUssR0FBZSxFQUFLLElBQUksUUFDbkMsSUFBYSxFQUFULEVBQ1MsRUFBVCxHQUFJLEVBQ1IsR0FBSSxFQUFNLENBQ1IsTUFBTSxFQUFNLEdBQWMsMEJBQTBCLEVBQUssYUFBZSxHQUFLLEVBQUcsV0FBWSxDQUFJLEVBQ2hHLEVBQUksRUFBSSxFQUNSLEVBQUksRUFBSSxFQUVWLEVBQUcsS0FBSyxZQUFhLGFBQWEsTUFBTSxJQUFJLEVBRTlDLEdBQUksRUFBSyxjQUFlLENBQ3RCLE1BQU0sRUFBSyxHQUFlLEVBQUssSUFBSSxTQUNuQyxJQUFhLEVBQVQsRUFDUyxFQUFULEdBQUksRUFDUixHQUFJLEVBQU0sQ0FDUixNQUFNLEVBQU0sR0FBYywwQkFBMEIsRUFBSyxhQUFlLEdBQUssRUFBRyxZQUFhLENBQUksRUFDakcsRUFBSSxFQUFJLEVBQ1IsRUFBSSxFQUFJLEVBRVYsRUFBRyxLQUFLLFlBQWEsYUFBYSxNQUFNLElBQUksSUFFN0MsbUJBQW1CLEVBQ2xCLElBQThCLEVBQU8sQ0FBQyxFQUFNLElBQVcsQ0FDekQsTUFBZSxFQUFULEVBQ1MsRUFBVCxHQUFJLEVBQ0osRUFBSyxLQUFLLElBQUksRUFBTyxFQUFJLENBQUMsRUFDMUIsRUFBSyxLQUFLLElBQUksRUFBTyxFQUFJLENBQUMsRUFDMUIsRUFBSSxFQUFLLE1BQVEsRUFDakIsRUFBSSxFQUFLLE9BQVMsRUFDeEIsR0FBSSxHQUFNLEdBQUssR0FBTSxFQUNuQixNQUFPLEdBRVQsTUFBTyxJQUNOLGFBQWEsRUFDWixJQUErQixFQUFPLENBQUMsRUFBTSxFQUFjLElBQWdCLENBQzdFLEVBQUksTUFBTTtBQUFBLGtCQUNNLEtBQUssVUFBVSxDQUFZO0FBQUEsa0JBQzNCLEtBQUssVUFBVSxDQUFXO0FBQUEsb0JBQ3hCLEVBQUssT0FBTyxFQUFLLE9BQU8sRUFBSyxXQUFXLEVBQUssUUFBUSxFQUN2RSxNQUFlLEVBQVQsRUFDUyxFQUFULEdBQUksRUFDSixFQUFLLEtBQUssSUFBSSxFQUFJLEVBQVksQ0FBQyxFQUMvQixFQUFJLEVBQUssTUFBUSxFQUN2QixJQUFJLEVBQUksRUFBWSxFQUFJLEVBQWEsRUFBSSxFQUFJLEVBQUssRUFBSSxFQUN0RCxNQUFNLEVBQUksRUFBSyxPQUFTLEVBQ2xCLEVBQUksS0FBSyxJQUFJLEVBQWEsRUFBSSxFQUFZLENBQUMsRUFDM0MsRUFBSSxLQUFLLElBQUksRUFBYSxFQUFJLEVBQVksQ0FBQyxFQUNqRCxHQUFJLEtBQUssSUFBSSxFQUFJLEVBQWEsQ0FBQyxFQUFJLEVBQUksS0FBSyxJQUFJLEVBQUksRUFBYSxDQUFDLEVBQUksRUFBRyxDQUN2RSxJQUFJLEVBQUksRUFBWSxFQUFJLEVBQWEsRUFBSSxFQUFhLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFhLEVBQ3ZGLEVBQUksRUFBSSxFQUFJLEVBQ1osTUFBTSxFQUFNLENBQ1YsRUFBRyxFQUFZLEVBQUksRUFBYSxFQUFJLEVBQVksRUFBSSxFQUFJLEVBQVksRUFBSSxFQUFJLEVBQzVFLEVBQUcsRUFBWSxFQUFJLEVBQWEsRUFBSSxFQUFZLEVBQUksRUFBSSxFQUFJLEVBQVksRUFBSSxFQUFJLENBQ2xGLEVBQ0EsR0FBSSxJQUFNLEVBQ1IsRUFBSSxFQUFJLEVBQWEsRUFDckIsRUFBSSxFQUFJLEVBQWEsRUFFdkIsR0FBSSxJQUFNLEVBQ1IsRUFBSSxFQUFJLEVBQWEsRUFFdkIsR0FBSSxJQUFNLEVBQ1IsRUFBSSxFQUFJLEVBQWEsRUFHdkIsT0FEQSxFQUFJLE1BQU0sMkJBQTJCLFFBQVEsUUFBUSxRQUFRLElBQUssQ0FBRyxFQUM5RCxNQUNGLENBQ0wsR0FBSSxFQUFZLEVBQUksRUFBYSxFQUMvQixFQUFJLEVBQWEsRUFBSSxFQUFJLE1BRXpCLEdBQUksRUFBSSxFQUFJLEVBQWEsRUFFM0IsSUFBSSxFQUFJLEVBQUksRUFBSSxFQUNaLEVBQUssRUFBWSxFQUFJLEVBQWEsRUFBSSxFQUFZLEVBQUksRUFBSSxFQUFJLEVBQVksRUFBSSxFQUFJLEVBQ2xGLEVBQUssRUFBWSxFQUFJLEVBQWEsRUFBSSxFQUFZLEVBQUksRUFBSSxFQUFZLEVBQUksRUFFOUUsR0FEQSxFQUFJLE1BQU0sdUJBQXVCLFFBQVEsUUFBUSxRQUFRLElBQUssQ0FBRSxLQUFJLElBQUcsQ0FBQyxFQUNwRSxJQUFNLEVBQ1IsRUFBSyxFQUFhLEVBQ2xCLEVBQUssRUFBYSxFQUVwQixHQUFJLElBQU0sRUFDUixFQUFLLEVBQWEsRUFFcEIsR0FBSSxJQUFNLEVBQ1IsRUFBSyxFQUFhLEVBRXBCLE1BQU8sQ0FBRSxFQUFHLEVBQUksRUFBRyxDQUFHLElBRXZCLGNBQWMsRUFDYixJQUFxQyxFQUFPLENBQUMsRUFBUyxJQUFpQixDQUN6RSxFQUFJLE1BQU0sMkJBQTRCLEVBQVMsQ0FBWSxFQUMzRCxJQUFJLEVBQVMsQ0FBQyxFQUNWLEVBQW1CLEVBQVEsR0FDM0IsRUFBVyxHQW1CZixPQWxCQSxFQUFRLFFBQVEsQ0FBQyxJQUFXLENBQzFCLElBQUssSUFBWSxFQUFjLENBQU0sSUFBTSxFQUFVLENBQ25ELE1BQU0sRUFBUSxJQUFhLEVBQWMsRUFBa0IsQ0FBTSxFQUNqRSxJQUFJLEVBQWUsR0FJbkIsR0FIQSxFQUFPLFFBQVEsQ0FBQyxJQUFNLENBQ3BCLEVBQWUsR0FBZ0IsRUFBRSxJQUFNLEVBQU0sR0FBSyxFQUFFLElBQU0sRUFBTSxFQUNqRSxHQUNJLEVBQU8sS0FBSyxDQUFDLElBQU0sRUFBRSxJQUFNLEVBQU0sR0FBSyxFQUFFLElBQU0sRUFBTSxDQUFDLEVBQ3hELEVBQU8sS0FBSyxDQUFLLEVBRW5CLEVBQVcsV0FFWCxFQUFtQixHQUNkLEVBQ0gsRUFBTyxLQUFLLENBQU0sRUFHdkIsRUFDTSxHQUNOLG9CQUFvQixFQUNuQixHQUE2QixVQUFlLENBQUMsRUFBTSxFQUFHLEVBQU0sRUFBVyxFQUFhLEVBQU8sRUFBSSxDQUNqRyxJQUFJLEVBQVMsRUFBSyxPQUNsQixFQUFJLE1BQU0sMEJBQTJCLEVBQU0sS0FBTSxDQUFDLEVBQ2xELElBQUksRUFBbUIsR0FDdkIsTUFBTSxFQUFPLEVBQU0sS0FBSyxFQUFFLENBQUMsRUFDM0IsSUFBSSxFQUFPLEVBQU0sS0FBSyxFQUFFLENBQUMsRUFDekIsR0FBSSxHQUFNLFdBQWEsR0FBTSxVQUMzQixFQUFTLEVBQU8sTUFBTSxFQUFHLEVBQUssT0FBTyxPQUFTLENBQUMsRUFDL0MsRUFBTyxRQUFRLEVBQUssVUFBVSxFQUFPLEVBQUUsQ0FBQyxFQUN4QyxFQUFPLEtBQUssRUFBSyxVQUFVLEVBQU8sRUFBTyxPQUFTLEVBQUUsQ0FBQyxFQUV2RCxHQUFJLEVBQUssVUFDUCxFQUFJLE1BQU0sbUJBQW9CLEVBQVUsRUFBSyxVQUFVLEVBQ3ZELEVBQVMsSUFBbUIsRUFBSyxPQUFRLEVBQVUsRUFBSyxXQUFXLElBQUksRUFDdkUsRUFBbUIsR0FFckIsR0FBSSxFQUFLLFlBQ1AsRUFBSSxNQUFNLHFCQUFzQixFQUFVLEVBQUssWUFBWSxFQUMzRCxFQUFTLElBQW1CLEVBQU8sUUFBUSxFQUFHLEVBQVUsRUFBSyxhQUFhLElBQUksRUFBRSxRQUFRLEVBQ3hGLEVBQW1CLEdBRXJCLE1BQU0sRUFBVyxFQUFPLE9BQU8sQ0FBQyxLQUFPLE9BQU8sTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUN4RCxJQUFJLEVBQVEsR0FDWixHQUFJLEVBQUssUUFBVSxJQUFnQixTQUFXLElBQWdCLGFBQzVELEVBQVEsRUFBSyxNQUVmLE1BQVEsSUFBRyxLQUFNLEdBQTJCLENBQUksRUFDMUMsRUFBZSxHQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFLLEVBQ2pELElBQUksRUFDSixPQUFRLEVBQUssZUFDTixTQUNILEVBQWdCLHdCQUNoQixVQUNHLFFBQ0gsRUFBZ0IsdUJBQ2hCLFVBQ0csWUFDSCxFQUFnQix1QkFDaEIsY0FFQSxFQUFnQixHQUVwQixPQUFRLEVBQUssYUFDTixRQUNILEdBQWlCLHNCQUNqQixVQUNHLFNBQ0gsR0FBaUIsdUJBQ2pCLFVBQ0csU0FDSCxHQUFpQix1QkFDakIsTUFFSixNQUFNLEVBQVUsRUFBSyxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUssRUFBYSxDQUFRLENBQUMsRUFBRSxLQUFLLEtBQU0sRUFBSyxFQUFFLEVBQUUsS0FBSyxRQUFTLElBQU0sR0FBaUIsRUFBSyxRQUFVLElBQU0sRUFBSyxRQUFVLEdBQUcsRUFBRSxLQUFLLFFBQVMsRUFBSyxLQUFLLEVBQ2hNLElBQUksRUFBTSxHQUNWLEdBQUksR0FBVSxFQUFFLFVBQVUscUJBQXVCLEdBQVUsRUFBRSxNQUFNLG9CQUNqRSxFQUFNLE9BQU8sU0FBUyxTQUFXLEtBQU8sT0FBTyxTQUFTLEtBQU8sT0FBTyxTQUFTLFNBQVcsT0FBTyxTQUFTLE9BQzFHLEVBQU0sRUFBSSxRQUFRLE1BQU8sS0FBSyxFQUM5QixFQUFNLEVBQUksUUFBUSxNQUFPLEtBQUssRUFFaEMsSUFBZSxFQUFTLEVBQU0sRUFBSyxFQUFJLENBQVcsRUFDbEQsSUFBSSxFQUFRLENBQUMsRUFDYixHQUFJLEVBQ0YsRUFBTSxZQUFjLEVBR3RCLE9BREEsRUFBTSxhQUFlLEVBQUssT0FDbkIsR0FDTixZQUFZLHlDQ2lkZixTQUFTLEVBQWMsQ0FBQyxFQUFNLENBQzVCLElBQUksRUFDSixPQUFRLE9BQ0QsR0FDSCxFQUFTLGNBQ1QsVUFDRyxHQUNILEVBQVMsWUFDVCxVQUNHLEdBQ0gsRUFBUyxjQUNULFVBQ0csR0FDSCxFQUFTLGFBQ1QsVUFDRyxHQUNILEVBQVMsV0FDVCxjQUVBLEVBQVMsT0FFYixPQUFPLE1BOTJCTCxHQUNBLEdBQ0EsSUFDQSxJQUtBLEdBT0EsSUFlQSxJQXdFQSxJQVNBLEdBZ0JBLEdBWUEsSUFnSEEsSUE4RkEsSUFZQSxJQUlBLElBZ0RBLElBY0EsSUFzQ0EsSUFlQSxJQUNBLElBQ0EsSUFLQSxJQUtBLElBNEhBLElBY0EsR0FDQSxHQU1BLElBb0JBLElBbUNBLElBbURBLElBc0RBLElBTUEsSUFrRkEsSUFNQSxtQkE1NkJKLEtBT0EsS0FLQSxLQVNBLEtBR0EsS0FHQSxLQU1BLEtBVUEsS0FDQSxLQUdBLEtBQ0EsS0FHQSxLQUNBLEtBeVdBLEtBeFdJLEdBQVksQ0FBQyxFQUNiLEdBQWMsQ0FBQyxFQUNmLElBQVUsQ0FBQyxFQUNYLElBQXlCLEVBQU8sSUFBTSxDQUN4QyxHQUFjLENBQUMsRUFDZixJQUFVLENBQUMsRUFDWCxHQUFZLENBQUMsR0FDWixPQUFPLEVBQ04sR0FBK0IsRUFBTyxDQUFDLEVBQUksSUFBZSxDQUU1RCxHQURBLEVBQUksTUFBTSxrQkFBbUIsRUFBWSxJQUFLLEVBQUksTUFBTyxHQUFZLEdBQVksU0FBUyxDQUFFLENBQUMsRUFDekYsR0FBWSxHQUFZLFNBQVMsQ0FBRSxFQUNyQyxNQUFPLEdBRVQsTUFBTyxJQUNOLGNBQWMsRUFDYixJQUFnQyxFQUFPLENBQUMsRUFBTSxJQUFjLENBRzlELEdBRkEsRUFBSSxLQUFLLGtCQUFtQixFQUFXLE9BQVEsR0FBWSxFQUFVLEVBQ3JFLEVBQUksS0FBSyxXQUFZLENBQUksRUFDckIsRUFBSyxJQUFNLEVBQ2IsTUFBTyxHQUVULEdBQUksRUFBSyxJQUFNLEVBQ2IsTUFBTyxHQUVULElBQUssR0FBWSxHQUVmLE9BREEsRUFBSSxNQUFNLFNBQVUsRUFBVyxxQkFBcUIsRUFDN0MsR0FFVCxPQUFPLEdBQVksR0FBVyxTQUFTLEVBQUssQ0FBQyxHQUFLLEdBQWEsRUFBSyxFQUFHLENBQVMsR0FBSyxHQUFhLEVBQUssRUFBRyxDQUFTLEdBQUssR0FBWSxHQUFXLFNBQVMsRUFBSyxDQUFDLEdBQzdKLGVBQWUsRUFDZCxJQUF1QixFQUFPLENBQUMsRUFBVyxFQUFPLEVBQVUsSUFBVyxDQUN4RSxFQUFJLEtBQ0YsdUJBQ0EsRUFDQSxPQUNBLEVBQ0EsT0FDQSxFQUFNLEtBQUssQ0FBUyxFQUNwQixDQUNGLEVBQ0EsTUFBTSxFQUFRLEVBQU0sU0FBUyxDQUFTLEdBQUssQ0FBQyxFQUM1QyxHQUFJLElBQWMsRUFDaEIsRUFBTSxLQUFLLENBQVMsRUFFdEIsRUFBSSxLQUFLLDRCQUE2QixFQUFXLFFBQVMsQ0FBSyxFQUMvRCxFQUFNLFFBQVEsQ0FBQyxJQUFTLENBQ3RCLEdBQUksRUFBTSxTQUFTLENBQUksRUFBRSxPQUFTLEVBQ2hDLElBQUssRUFBTSxFQUFPLEVBQVUsQ0FBTSxNQUM3QixDQUNMLE1BQU0sRUFBTyxFQUFNLEtBQUssQ0FBSSxFQUc1QixHQUZBLEVBQUksS0FBSyxNQUFPLEVBQU0sT0FBUSxFQUFRLGdCQUFpQixDQUFTLEVBQ2hFLEVBQVMsUUFBUSxFQUFNLENBQUksRUFDdkIsSUFBVyxFQUFNLE9BQU8sQ0FBSSxFQUM5QixFQUFJLEtBQUssaUJBQWtCLEVBQU0sRUFBTSxPQUFPLENBQUksQ0FBQyxFQUNuRCxFQUFTLFVBQVUsRUFBTSxFQUFNLE9BQU8sQ0FBSSxDQUFDLEVBRTdDLEdBQUksSUFBYyxHQUFVLElBQVMsRUFDbkMsRUFBSSxNQUFNLGlCQUFrQixFQUFNLENBQVMsRUFDM0MsRUFBUyxVQUFVLEVBQU0sQ0FBUyxNQUVsQyxHQUFJLEtBQUssV0FBWSxFQUFXLE9BQVEsRUFBUSxPQUFRLEVBQU0sS0FBSyxDQUFTLEVBQUcsQ0FBTSxFQUNyRixFQUFJLE1BQ0YsK0JBQ0EsRUFDQSxtQkFDQSxJQUFjLEVBQ2QsbUJBQ0EsSUFBUyxDQUNYLEVBRUYsTUFBTSxFQUFRLEVBQU0sTUFBTSxDQUFJLEVBQzlCLEVBQUksTUFBTSxnQkFBaUIsQ0FBSyxFQUNoQyxFQUFNLFFBQVEsQ0FBQyxJQUFTLENBQ3RCLEVBQUksS0FBSyxPQUFRLENBQUksRUFDckIsTUFBTSxFQUFRLEVBQU0sS0FBSyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssSUFBSSxFQUNsRCxFQUFJLEtBQUssWUFBYSxFQUFPLENBQU0sRUFDbkMsR0FBSSxDQUNGLEdBQUksSUFBYyxFQUFNLENBQU0sRUFDNUIsRUFBSSxLQUFLLGNBQWUsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFPLEVBQUssSUFBSSxFQUN4RCxFQUFTLFFBQVEsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFPLEVBQUssSUFBSSxFQUNqRCxFQUFJLEtBQUssa0JBQW1CLEVBQVMsTUFBTSxFQUFHLEVBQVMsS0FBSyxFQUFTLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFFaEYsR0FBSSxLQUNGLHlCQUNBLEVBQUssRUFDTCxNQUNBLEVBQUssRUFDTCxZQUNBLEVBQ0EsY0FDQSxDQUNGLFFBRUssRUFBUCxDQUNBLEVBQUksTUFBTSxDQUFDLEdBRWQsRUFFSCxFQUFJLE1BQU0sZ0JBQWlCLENBQUksRUFDL0IsRUFBTSxXQUFXLENBQUksRUFDdEIsR0FDQSxNQUFNLEVBQ0wsSUFBcUMsRUFBTyxDQUFDLEVBQUksSUFBVSxDQUM3RCxNQUFNLEVBQVcsRUFBTSxTQUFTLENBQUUsRUFDbEMsSUFBSSxFQUFNLENBQUMsR0FBRyxDQUFRLEVBQ3RCLFFBQVcsS0FBUyxFQUNsQixJQUFRLEdBQVMsRUFDakIsRUFBTSxDQUFDLEdBQUcsRUFBSyxHQUFHLElBQW1CLEVBQU8sQ0FBSyxDQUFDLEVBRXBELE9BQU8sR0FDTixvQkFBb0IsRUFDbkIsR0FBc0MsRUFBTyxDQUFDLEVBQUksSUFBVSxDQUM5RCxFQUFJLE1BQU0sWUFBYSxDQUFFLEVBQ3pCLE1BQU0sRUFBVyxFQUFNLFNBQVMsQ0FBRSxFQUVsQyxHQURBLEVBQUksTUFBTSw0QkFBNkIsRUFBSSxDQUFRLEVBQy9DLEVBQVMsT0FBUyxFQUVwQixPQURBLEVBQUksTUFBTSx1QkFBd0IsQ0FBRSxFQUM3QixFQUVULFFBQVcsS0FBUyxFQUFVLENBQzVCLE1BQU0sRUFBTSxHQUFvQixFQUFPLENBQUssRUFDNUMsR0FBSSxFQUVGLE9BREEsRUFBSSxNQUFNLHdCQUF5QixFQUFJLE9BQVEsQ0FBRyxFQUMzQyxJQUdWLHFCQUFxQixFQUNwQixHQUE4QixFQUFPLENBQUMsSUFBTyxDQUMvQyxJQUFLLEdBQVUsR0FDYixPQUFPLEVBRVQsSUFBSyxHQUFVLEdBQUksb0JBQ2pCLE9BQU8sRUFFVCxHQUFJLEdBQVUsR0FDWixPQUFPLEdBQVUsR0FBSSxHQUV2QixPQUFPLEdBQ04sYUFBYSxFQUNaLElBQXlDLEVBQU8sQ0FBQyxFQUFPLElBQVUsQ0FDcEUsSUFBSyxHQUFTLEVBQVEsR0FBSSxDQUN4QixFQUFJLE1BQU0sdUJBQXVCLEVBQ2pDLFdBRUEsR0FBSSxNQUFNLG1CQUFtQixFQUUvQixFQUFNLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFJLENBRWpDLEdBRGlCLEVBQU0sU0FBUyxDQUFFLEVBQ3JCLE9BQVMsRUFDcEIsRUFBSSxLQUNGLHFCQUNBLEVBQ0EsNkJBQ0EsR0FBb0IsRUFBSSxDQUFLLENBQy9CLEVBQ0EsR0FBWSxHQUFNLElBQW1CLEVBQUksQ0FBSyxFQUM5QyxHQUFVLEdBQU0sQ0FBRSxHQUFJLEdBQW9CLEVBQUksQ0FBSyxFQUFHLFlBQWEsRUFBTSxLQUFLLENBQUUsQ0FBRSxFQUVyRixFQUNELEVBQU0sTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUksQ0FDakMsTUFBTSxFQUFXLEVBQU0sU0FBUyxDQUFFLEVBQzVCLEVBQVEsRUFBTSxNQUFNLEVBQzFCLEdBQUksRUFBUyxPQUFTLEVBQ3BCLEVBQUksTUFBTSxxQkFBc0IsRUFBSSxFQUFXLEVBQy9DLEVBQU0sUUFBUSxDQUFDLElBQVMsQ0FDdEIsR0FBSSxFQUFLLElBQU0sR0FBTSxFQUFLLElBQU0sRUFBSSxDQUNsQyxNQUFNLEVBQUssR0FBYSxFQUFLLEVBQUcsQ0FBRSxFQUM1QixFQUFLLEdBQWEsRUFBSyxFQUFHLENBQUUsRUFDbEMsR0FBSSxFQUFLLEVBQ1AsRUFBSSxLQUFLLFNBQVUsRUFBTSxtQkFBb0IsQ0FBRSxFQUMvQyxFQUFJLEtBQUssc0JBQXVCLEVBQUksS0FBTSxHQUFZLEVBQUcsRUFDekQsR0FBVSxHQUFJLG9CQUFzQixJQUd6QyxNQUVELEdBQUksTUFBTSxpQkFBa0IsRUFBSSxFQUFXLEVBRTlDLEVBQ0QsUUFBUyxLQUFNLE9BQU8sS0FBSyxFQUFTLEVBQUcsQ0FDckMsTUFBTSxFQUFrQixHQUFVLEdBQUksR0FDaEMsRUFBUyxFQUFNLE9BQU8sQ0FBZSxFQUMzQyxHQUFJLElBQVcsR0FBTSxHQUFVLEtBQVksR0FBVSxHQUFRLG9CQUMzRCxHQUFVLEdBQUksR0FBSyxFQUd2QixFQUFNLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFHLENBQ2hDLE1BQU0sRUFBTyxFQUFNLEtBQUssQ0FBQyxFQUN6QixFQUFJLEtBQUssUUFBVSxFQUFFLEVBQUksT0FBUyxFQUFFLEVBQUksS0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQ2hFLEVBQUksS0FBSyxRQUFVLEVBQUUsRUFBSSxPQUFTLEVBQUUsRUFBSSxLQUFPLEtBQUssVUFBVSxFQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDNUUsSUFBVSxFQUFOLEVBQ00sRUFBTixHQUFJLEVBWVIsR0FYQSxFQUFJLEtBQ0YsVUFDQSxHQUNBLE9BQ0EsRUFBRSxFQUNGLEVBQUUsRUFDRixnQkFDQSxHQUFVLEVBQUUsR0FDWixRQUNBLEdBQVUsRUFBRSxFQUNkLEVBQ0ksR0FBVSxFQUFFLElBQU0sR0FBVSxFQUFFLElBQU0sR0FBVSxFQUFFLEtBQU8sR0FBVSxFQUFFLEdBQUksQ0FDekUsRUFBSSxLQUFLLGlEQUFrRCxFQUFFLEVBQUcsRUFBRSxFQUFHLEVBQUUsSUFBSSxFQUMzRSxFQUFJLEtBQUssb0NBQXFDLEVBQUUsRUFBRyxFQUFFLEVBQUcsRUFBRSxJQUFJLEVBQzlELEVBQUksR0FBWSxFQUFFLENBQUMsRUFDbkIsRUFBSSxHQUFZLEVBQUUsQ0FBQyxFQUNuQixFQUFNLFdBQVcsRUFBRSxFQUFHLEVBQUUsRUFBRyxFQUFFLElBQUksRUFDakMsTUFBTSxFQUFZLEVBQUUsRUFBSSxNQUFRLEVBQUUsRUFDbEMsRUFBTSxRQUFRLEVBQVcsQ0FDdkIsTUFBTyxFQUNQLEdBQUksRUFDSixXQUFZLEdBQ1osVUFBVyxFQUFLLE1BQ2hCLFFBQVMsRUFDVCxNQUFPLFlBQ1AsTUFBTyxFQUNULENBQUMsRUFDRCxNQUFNLEVBQVEsZ0JBQWdCLENBQUksRUFDNUIsRUFBUSxnQkFBZ0IsQ0FBSSxFQUNsQyxFQUFNLE1BQVEsR0FDZCxFQUFNLGFBQWUsT0FDckIsRUFBTSxNQUFRLEdBQ2QsRUFBTSxZQUFjLEVBQUUsRUFDdEIsRUFBTSxVQUFZLEVBQUUsRUFDcEIsRUFBTSxRQUFRLEVBQUcsRUFBVyxFQUFPLEVBQUUsS0FBTyxpQkFBaUIsRUFDN0QsRUFBTSxRQUFRLEVBQVcsRUFBRyxFQUFPLEVBQUUsS0FBTyxpQkFBaUIsVUFDcEQsR0FBVSxFQUFFLElBQU0sR0FBVSxFQUFFLEdBQUksQ0FLM0MsR0FKQSxFQUFJLEtBQUssb0NBQXFDLEVBQUUsRUFBRyxFQUFFLEVBQUcsRUFBRSxJQUFJLEVBQzlELEVBQUksR0FBWSxFQUFFLENBQUMsRUFDbkIsRUFBSSxHQUFZLEVBQUUsQ0FBQyxFQUNuQixFQUFNLFdBQVcsRUFBRSxFQUFHLEVBQUUsRUFBRyxFQUFFLElBQUksRUFDN0IsSUFBTSxFQUFFLEVBQUcsQ0FDYixNQUFNLEVBQVMsRUFBTSxPQUFPLENBQUMsRUFDN0IsR0FBVSxHQUFRLG9CQUFzQixHQUN4QyxFQUFLLFlBQWMsRUFBRSxFQUV2QixHQUFJLElBQU0sRUFBRSxFQUFHLENBQ2IsTUFBTSxFQUFTLEVBQU0sT0FBTyxDQUFDLEVBQzdCLEdBQVUsR0FBUSxvQkFBc0IsR0FDeEMsRUFBSyxVQUFZLEVBQUUsRUFFckIsRUFBSSxLQUFLLHlCQUEwQixFQUFHLEVBQUcsRUFBRSxJQUFJLEVBQy9DLEVBQU0sUUFBUSxFQUFHLEVBQUcsRUFBTSxFQUFFLElBQUksR0FFbkMsRUFDRCxFQUFJLEtBQUssaUJBQStCLEdBQU0sQ0FBSyxDQUFDLEVBQ3BELElBQVUsRUFBTyxDQUFDLEVBQ2xCLEVBQUksTUFBTSxFQUFTLEdBQ2xCLHdCQUF3QixFQUN2QixJQUE0QixFQUFPLENBQUMsRUFBTyxJQUFVLENBRXZELEdBREEsRUFBSSxLQUFLLGVBQWdCLEVBQW9CLEdBQU0sQ0FBSyxFQUFHLEVBQU0sU0FBUyxHQUFHLENBQUMsRUFDMUUsRUFBUSxHQUFJLENBQ2QsRUFBSSxNQUFNLGFBQWEsRUFDdkIsT0FFRixJQUFJLEVBQVEsRUFBTSxNQUFNLEVBQ3BCLEVBQWMsR0FDbEIsUUFBVyxLQUFRLEVBQU8sQ0FDeEIsTUFBTSxFQUFXLEVBQU0sU0FBUyxDQUFJLEVBQ3BDLEVBQWMsR0FBZSxFQUFTLE9BQVMsRUFFakQsSUFBSyxFQUFhLENBQ2hCLEVBQUksTUFBTSw2QkFBOEIsRUFBTSxNQUFNLENBQUMsRUFDckQsT0FFRixFQUFJLE1BQU0sV0FBWSxFQUFPLENBQUssRUFDbEMsUUFBVyxLQUFRLEVBWWpCLEdBWEEsRUFBSSxNQUNGLGtCQUNBLEVBQ0EsR0FDQSxHQUFVLEtBQVUsR0FBVSxHQUFNLHFCQUNuQyxFQUFNLE9BQU8sQ0FBSSxFQUNsQixFQUFNLEtBQUssQ0FBSSxFQUNmLEVBQU0sU0FBUyxHQUFHLEVBQ2xCLFVBQ0EsQ0FDRixHQUNLLEdBQVUsR0FDYixFQUFJLE1BQU0sZ0JBQWlCLEVBQU0sQ0FBSyxXQUM1QixHQUFVLEdBQU0scUJBQzVCLEVBQU0sU0FBUyxDQUFJLEdBQUssRUFBTSxTQUFTLENBQUksRUFBRSxPQUFTLEVBQUcsQ0FDdkQsRUFBSSxLQUNGLDJFQUNBLEVBQ0EsQ0FDRixFQUVBLElBQUksRUFEa0IsRUFBTSxNQUFNLEVBQ1YsVUFBWSxLQUFPLEtBQU8sS0FDbEQsR0FBSSxHQUFVLElBQU8sYUFBYSxJQUNoQyxFQUFNLEdBQVUsR0FBTSxZQUFZLElBQ2xDLEVBQUksS0FBSyxhQUFjLEdBQVUsR0FBTSxZQUFZLElBQUssQ0FBRyxFQUU3RCxNQUFNLEVBQWUsSUFBYSxHQUFNLENBQ3RDLFdBQVksR0FDWixTQUFVLEVBQ1osQ0FBQyxFQUFFLFNBQVMsQ0FDVixRQUFTLEVBRVQsUUFBUyxHQUNULFFBQVMsR0FDVCxRQUFTLEVBQ1QsUUFBUyxDQUNYLENBQUMsRUFBRSw0QkFBNEIsRUFBRyxDQUNoQyxNQUFPLENBQUMsRUFDVCxFQUNELEVBQUksS0FBSyx3QkFBc0MsR0FBTSxDQUFLLENBQUMsRUFDM0QsSUFBSyxFQUFNLEVBQU8sRUFBYyxDQUFJLEVBQ3BDLEVBQU0sUUFBUSxFQUFNLENBQ2xCLFlBQWEsR0FDYixHQUFJLEVBQ0osWUFBYSxHQUFVLEdBQU0sWUFDN0IsVUFBVyxHQUFVLEdBQU0sVUFDM0IsTUFBTyxDQUNULENBQUMsRUFDRCxFQUFJLEtBQUssK0JBQWdDLEVBQU0sSUFBa0IsR0FBTSxDQUFZLENBQUMsRUFDcEYsRUFBSSxNQUFNLHVCQUFxQyxHQUFNLENBQUssQ0FBQyxNQUUzRCxHQUFJLEtBQ0YsY0FDQSxFQUNBLHFEQUNDLEdBQVUsR0FBTSxvQkFDakIsZ0JBQ0MsRUFBTSxPQUFPLENBQUksRUFDbEIsYUFDQSxFQUFNLFNBQVMsQ0FBSSxHQUFLLEVBQU0sU0FBUyxDQUFJLEVBQUUsT0FBUyxFQUN0RCxFQUFNLFNBQVMsR0FBRyxFQUNsQixDQUNGLEVBQ0EsRUFBSSxNQUFNLEVBQVMsRUFHdkIsRUFBUSxFQUFNLE1BQU0sRUFDcEIsRUFBSSxLQUFLLG9CQUFxQixDQUFLLEVBQ25DLFFBQVcsS0FBUSxFQUFPLENBQ3hCLE1BQU0sRUFBTyxFQUFNLEtBQUssQ0FBSSxFQUU1QixHQURBLEVBQUksS0FBSyxrQkFBbUIsRUFBTSxDQUFJLEVBQ2xDLEVBQUssWUFDUCxJQUFVLEVBQUssTUFBTyxFQUFRLENBQUMsSUFHbEMsV0FBVyxFQUNWLElBQXlCLEVBQU8sQ0FBQyxFQUFPLElBQVUsQ0FDcEQsR0FBSSxFQUFNLFNBQVcsRUFDbkIsTUFBTyxDQUFDLEVBRVYsSUFBSSxFQUFTLE9BQU8sT0FBTyxDQUFLLEVBTWhDLE9BTEEsRUFBTSxRQUFRLENBQUMsSUFBUyxDQUN0QixNQUFNLEVBQVcsRUFBTSxTQUFTLENBQUksRUFDOUIsRUFBUyxJQUFPLEVBQU8sQ0FBUSxFQUNyQyxFQUFTLENBQUMsR0FBRyxFQUFRLEdBQUcsQ0FBTSxFQUMvQixFQUNNLEdBQ04sUUFBUSxFQUNQLElBQXVDLEVBQU8sQ0FBQyxJQUFVLElBQU8sRUFBTyxFQUFNLFNBQVMsQ0FBQyxFQUFHLHNCQUFzQixFQUloSCxJQUF1QixFQUFPLENBQUMsRUFBUSxJQUFTLENBQ2xELEVBQUksS0FBSyw4QkFBK0IsRUFBSyxHQUFJLENBQUksRUFDckQsTUFBTSxFQUFhLEdBQVUsRUFDdkIsRUFBVyxFQUFPLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxXQUFhLEVBQUssTUFBUSxJQUFNLEVBQUssTUFBUSxHQUFHLEVBQUUsS0FBSyxLQUFNLEVBQUssRUFBRSxFQUNoSCxFQUFRLEVBQVMsT0FBTyxPQUFRLGNBQWMsRUFDOUMsRUFBZ0IsR0FBUyxFQUFXLFVBQVUsVUFBVSxFQUN4RCxFQUFRLEVBQVMsT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLGVBQWUsRUFDMUQsRUFBTyxFQUFLLFlBQWMsV0FBYSxHQUFXLEVBQU8sRUFBSyxVQUFXLENBQUUsTUFBTyxFQUFLLFdBQVksZUFBYyxFQUFHLENBQVUsRUFBSSxFQUFNLEtBQUssRUFBRSxZQUFZLEdBQW9CLEVBQUssVUFBVyxFQUFLLFdBQWlCLE9BQUcsRUFBSSxDQUFDLEVBQ25PLElBQUksRUFBTyxFQUFLLFFBQVEsRUFDeEIsR0FBSSxHQUFTLEVBQVcsVUFBVSxVQUFVLEVBQUcsQ0FDN0MsTUFBTSxFQUFNLEVBQUssU0FBUyxHQUNwQixFQUFLLEdBQU8sQ0FBSSxFQUN0QixFQUFPLEVBQUksc0JBQXNCLEVBQ2pDLEVBQUcsS0FBSyxRQUFTLEVBQUssS0FBSyxFQUMzQixFQUFHLEtBQUssU0FBVSxFQUFLLE1BQU0sRUFFL0IsTUFBTSxFQUFVLEVBQUksRUFBSyxRQUNuQixFQUFjLEVBQVUsRUFDeEIsRUFBUSxFQUFLLE9BQVMsRUFBSyxNQUFRLEVBQVUsRUFBSyxNQUFRLEVBQVUsRUFBSyxNQUMvRSxHQUFJLEVBQUssT0FBUyxFQUFLLE1BQVEsRUFDN0IsRUFBSyxNQUFRLEVBQUssTUFBUSxFQUFLLE9BQVMsRUFBSSxFQUFLLFFBQVUsTUFFM0QsR0FBSyxNQUFRLEVBQUssUUFBVSxFQUU5QixFQUFJLE1BQU0sUUFBUyxFQUFNLEtBQUssVUFBVSxDQUFJLENBQUMsRUFDN0MsRUFBTSxLQUFLLFFBQVMsRUFBSyxLQUFLLEVBQUUsS0FBSyxLQUFNLEVBQUssRUFBRSxFQUFFLEtBQUssS0FBTSxFQUFLLEVBQUUsRUFBRSxLQUFLLElBQUssRUFBSyxFQUFJLEVBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSyxFQUFLLEVBQUksRUFBSyxPQUFTLEVBQUksQ0FBVyxFQUFFLEtBQUssUUFBUyxDQUFLLEVBQUUsS0FBSyxTQUFVLEVBQUssT0FBUyxDQUFPLEVBQ2pOLE1BQVEsMEJBQTJCLEdBQXdCLENBQVUsRUFDckUsR0FBSSxFQUNGLEVBQU0sS0FDSixZQUVBLGFBQWEsRUFBSyxFQUFJLEVBQUssTUFBUSxNQUFNLEVBQUssRUFBSSxFQUFLLE9BQVMsRUFBSSxJQUN0RSxNQUVBLEdBQU0sS0FDSixZQUVBLGFBQWEsRUFBSyxNQUFNLEVBQUssRUFBSSxFQUFLLE9BQVMsRUFBSSxJQUNyRCxFQUVGLE1BQU0sRUFBVSxFQUFNLEtBQUssRUFBRSxRQUFRLEVBTXJDLE9BTEEsRUFBSyxNQUFRLEVBQVEsTUFDckIsRUFBSyxPQUFTLEVBQVEsT0FDdEIsRUFBSyxrQkFBb0IsQ0FBQyxFQUFPLENBQy9CLE9BQU8sR0FBdUIsRUFBTSxDQUFLLEdBRXBDLEdBQ04sTUFBTSxFQUNMLElBQTRCLEVBQU8sQ0FBQyxFQUFRLElBQVMsQ0FDdkQsTUFBTSxFQUFXLEVBQU8sT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLGNBQWMsRUFBRSxLQUFLLEtBQU0sRUFBSyxFQUFFLEVBQzlFLEVBQVEsRUFBUyxPQUFPLE9BQVEsY0FBYyxFQUM5QyxFQUFVLEVBQUksRUFBSyxRQUNuQixFQUFjLEVBQVUsRUFDOUIsRUFBTSxLQUFLLEtBQU0sRUFBSyxFQUFFLEVBQUUsS0FBSyxLQUFNLEVBQUssRUFBRSxFQUFFLEtBQUssSUFBSyxFQUFLLEVBQUksRUFBSyxNQUFRLEVBQUksQ0FBVyxFQUFFLEtBQUssSUFBSyxFQUFLLEVBQUksRUFBSyxPQUFTLEVBQUksQ0FBVyxFQUFFLEtBQUssUUFBUyxFQUFLLE1BQVEsQ0FBTyxFQUFFLEtBQUssU0FBVSxFQUFLLE9BQVMsQ0FBTyxFQUFFLEtBQUssT0FBUSxNQUFNLEVBQzlPLE1BQU0sRUFBVSxFQUFNLEtBQUssRUFBRSxRQUFRLEVBTXJDLE9BTEEsRUFBSyxNQUFRLEVBQVEsTUFDckIsRUFBSyxPQUFTLEVBQVEsT0FDdEIsRUFBSyxrQkFBb0IsQ0FBQyxFQUFPLENBQy9CLE9BQU8sR0FBdUIsRUFBTSxDQUFLLEdBRXBDLEdBQ04sV0FBVyxFQUNWLElBQW1DLEVBQU8sQ0FBQyxFQUFRLElBQVMsQ0FDOUQsTUFBTSxFQUFhLEdBQVUsRUFDdkIsRUFBVyxFQUFPLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxFQUFLLE9BQU8sRUFBRSxLQUFLLEtBQU0sRUFBSyxFQUFFLEVBQzVFLEVBQVEsRUFBUyxPQUFPLE9BQVEsY0FBYyxFQUM5QyxFQUFRLEVBQVMsT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLGVBQWUsRUFDMUQsRUFBWSxFQUFTLE9BQU8sTUFBTSxFQUNsQyxFQUFPLEVBQU0sS0FBSyxFQUFFLFlBQVksR0FBb0IsRUFBSyxVQUFXLEVBQUssV0FBaUIsT0FBRyxFQUFJLENBQUMsRUFDeEcsSUFBSSxFQUFPLEVBQUssUUFBUSxFQUN4QixHQUFJLEdBQVMsRUFBVyxVQUFVLFVBQVUsRUFBRyxDQUM3QyxNQUFNLEVBQU0sRUFBSyxTQUFTLEdBQ3BCLEVBQUssR0FBTyxDQUFJLEVBQ3RCLEVBQU8sRUFBSSxzQkFBc0IsRUFDakMsRUFBRyxLQUFLLFFBQVMsRUFBSyxLQUFLLEVBQzNCLEVBQUcsS0FBSyxTQUFVLEVBQUssTUFBTSxFQUUvQixFQUFPLEVBQUssUUFBUSxFQUNwQixNQUFNLEVBQVUsRUFBSSxFQUFLLFFBQ25CLEVBQWMsRUFBVSxFQUN4QixFQUFRLEVBQUssT0FBUyxFQUFLLE1BQVEsRUFBSyxRQUFVLEVBQUssTUFBUSxFQUFLLFFBQVUsRUFBSyxNQUN6RixHQUFJLEVBQUssT0FBUyxFQUFLLE1BQVEsRUFBSyxRQUNsQyxFQUFLLE1BQVEsRUFBSyxNQUFRLEVBQUssUUFBVSxFQUFJLEVBQUssT0FBUyxNQUUzRCxHQUFLLE1BQVEsRUFBSyxRQUFVLEVBRTlCLEVBQU0sS0FBSyxRQUFTLE9BQU8sRUFBRSxLQUFLLElBQUssRUFBSyxFQUFJLEVBQVEsRUFBSSxDQUFXLEVBQUUsS0FBSyxJQUFLLEVBQUssRUFBSSxFQUFLLE9BQVMsRUFBSSxDQUFXLEVBQUUsS0FBSyxRQUFTLEVBQVEsQ0FBTyxFQUFFLEtBQUssU0FBVSxFQUFLLE9BQVMsQ0FBTyxFQUM5TCxFQUFVLEtBQUssUUFBUyxPQUFPLEVBQUUsS0FBSyxJQUFLLEVBQUssRUFBSSxFQUFRLEVBQUksQ0FBVyxFQUFFLEtBQUssSUFBSyxFQUFLLEVBQUksRUFBSyxPQUFTLEVBQUksRUFBYyxFQUFLLE9BQVMsQ0FBQyxFQUFFLEtBQUssUUFBUyxFQUFRLENBQU8sRUFBRSxLQUFLLFNBQVUsRUFBSyxPQUFTLEVBQVUsRUFBSyxPQUFTLENBQUMsRUFDdE8sTUFBUSwwQkFBMkIsR0FBd0IsQ0FBVSxFQUNyRSxFQUFNLEtBQ0osWUFDQSxhQUFhLEVBQUssRUFBSSxFQUFLLE1BQVEsTUFBTSxFQUFLLEVBQUksRUFBSyxPQUFTLEVBQUksRUFBSyxRQUFVLEdBQUssR0FBUyxFQUFXLFVBQVUsVUFBVSxFQUFJLEVBQUksR0FBSyxJQUMvSSxFQUNBLE1BQU0sRUFBVSxFQUFNLEtBQUssRUFBRSxRQUFRLEVBS3JDLE9BSkEsRUFBSyxPQUFTLEVBQVEsT0FDdEIsRUFBSyxrQkFBb0IsQ0FBQyxFQUFPLENBQy9CLE9BQU8sR0FBdUIsRUFBTSxDQUFLLEdBRXBDLEdBQ04sa0JBQWtCLEVBQ2pCLElBQTBCLEVBQU8sQ0FBQyxFQUFRLElBQVMsQ0FDckQsTUFBTSxFQUFXLEVBQU8sT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLEVBQUssT0FBTyxFQUFFLEtBQUssS0FBTSxFQUFLLEVBQUUsRUFDNUUsRUFBUSxFQUFTLE9BQU8sT0FBUSxjQUFjLEVBQzlDLEVBQVUsRUFBSSxFQUFLLFFBQ25CLEVBQWMsRUFBVSxFQUM5QixFQUFNLEtBQUssUUFBUyxTQUFTLEVBQUUsS0FBSyxJQUFLLEVBQUssRUFBSSxFQUFLLE1BQVEsRUFBSSxDQUFXLEVBQUUsS0FBSyxJQUFLLEVBQUssRUFBSSxFQUFLLE9BQVMsQ0FBQyxFQUFFLEtBQUssUUFBUyxFQUFLLE1BQVEsQ0FBTyxFQUFFLEtBQUssU0FBVSxFQUFLLE9BQVMsQ0FBTyxFQUM1TCxNQUFNLEVBQVUsRUFBTSxLQUFLLEVBQUUsUUFBUSxFQU9yQyxPQU5BLEVBQUssTUFBUSxFQUFRLE1BQ3JCLEVBQUssT0FBUyxFQUFRLE9BQ3RCLEVBQUssTUFBUSxFQUFLLFFBQVUsRUFDNUIsRUFBSyxrQkFBb0IsQ0FBQyxFQUFPLENBQy9CLE9BQU8sR0FBdUIsRUFBTSxDQUFLLEdBRXBDLEdBQ04sU0FBUyxFQUNSLElBQVMsQ0FBRSxTQUFNLHFCQUFrQixjQUFXLFdBQVEsRUFDdEQsSUFBZSxDQUFDLEVBQ2hCLElBQWdDLEVBQU8sQ0FBQyxFQUFNLElBQVMsQ0FDekQsRUFBSSxNQUFNLG1CQUFtQixFQUM3QixNQUFNLEVBQVEsRUFBSyxPQUFTLE9BQzVCLElBQWEsRUFBSyxJQUFNLElBQU8sR0FBTyxFQUFNLENBQUksR0FDL0MsZUFBZSxFQUNkLElBQXlCLEVBQU8sSUFBTSxDQUN4QyxJQUFlLENBQUMsR0FDZixPQUFPLEVBR04sSUFBa0MsRUFBTyxNQUFPLEVBQU8sRUFBTyxFQUFhLEVBQUksRUFBZSxJQUFlLENBQy9HLEVBQUksS0FBSyxpQ0FBZ0QsR0FBTSxDQUFLLEVBQUcsQ0FBYSxFQUNwRixNQUFNLEVBQU0sRUFBTSxNQUFNLEVBQUUsUUFDMUIsRUFBSSxNQUFNLGlDQUFrQyxDQUFHLEVBQy9DLE1BQU0sRUFBTyxFQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxNQUFNLEVBQ25ELElBQUssRUFBTSxNQUFNLEVBQ2YsRUFBSSxLQUFLLHFCQUFzQixDQUFLLE1BRXBDLEdBQUksS0FBSyx1QkFBd0IsRUFBTSxNQUFNLENBQUMsRUFFaEQsR0FBSSxFQUFNLE1BQU0sRUFBRSxPQUFTLEVBQ3pCLEVBQUksTUFBTSxrQkFBbUIsRUFBTSxLQUFLLEVBQU0sTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUUzRCxNQUFNLEVBQVcsRUFBSyxPQUFPLEdBQUcsRUFBRSxLQUFLLFFBQVMsVUFBVSxFQUNwRCxFQUFZLEVBQUssT0FBTyxHQUFHLEVBQUUsS0FBSyxRQUFTLFdBQVcsRUFDdEQsRUFBYSxFQUFLLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUyxZQUFZLEVBQ3hELEVBQVEsRUFBSyxPQUFPLEdBQUcsRUFBRSxLQUFLLFFBQVMsT0FBTyxFQUNwRCxNQUFNLFFBQVEsSUFDWixFQUFNLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQyxFQUFHLENBQ2xDLE1BQU0sRUFBTyxFQUFNLEtBQUssQ0FBQyxFQUN6QixHQUFJLElBQXVCLE9BQUcsQ0FDNUIsTUFBTSxFQUFPLEtBQUssTUFBTSxLQUFLLFVBQVUsRUFBYyxXQUFXLENBQUMsRUFHakUsR0FGQSxFQUFJLEtBQUssaUNBQWtDLEVBQUcsS0FBTSxFQUFNLENBQWEsRUFDdkUsRUFBTSxRQUFRLEVBQWMsR0FBSSxDQUFJLEdBQy9CLEVBQU0sT0FBTyxDQUFDLEVBQ2pCLEVBQUksTUFBTSxpQkFBa0IsRUFBRyxFQUFjLEVBQUUsRUFDL0MsRUFBTSxVQUFVLEVBQUcsRUFBYyxHQUFJLENBQUksRUFJN0MsR0FEQSxFQUFJLEtBQUssb0JBQXNCLEVBQUksS0FBTyxLQUFLLFVBQVUsRUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ25FLEdBQU0sWUFBYSxDQUNyQixFQUFJLEtBQUsscUJBQXNCLEVBQUcsRUFBSyxNQUFPLEVBQU0sS0FBSyxDQUFDLENBQUMsRUFDM0QsTUFBUSxVQUFTLFdBQVksRUFBTSxNQUFNLEVBQ3pDLEVBQUssTUFBTSxTQUFTLElBQ2YsRUFBSyxNQUFNLE1BQU0sRUFDcEIsVUFDQSxTQUNGLENBQUMsRUFDRCxNQUFNLEVBQUksTUFBTSxJQUNkLEVBQ0EsRUFBSyxNQUNMLEVBQ0EsRUFDQSxFQUFNLEtBQUssQ0FBQyxFQUNaLENBQ0YsRUFDTSxFQUFRLEVBQUUsS0FDaEIsR0FBaUIsRUFBTSxDQUFLLEVBQzVCLEVBQUssS0FBTyxFQUFFLE1BQVEsRUFDdEIsRUFBSSxLQUFLLHVCQUF3QixFQUFHLEVBQU0sRUFBSyxNQUFPLEVBQUssRUFBRyxFQUFLLENBQUMsRUFDcEUsR0FBWSxFQUFPLENBQUksRUFDdkIsRUFBSSxLQUFLLDZCQUE4QixFQUFPLENBQUksVUFFOUMsRUFBTSxTQUFTLENBQUMsRUFBRSxPQUFTLEVBQzdCLEVBQUksS0FBSyx1Q0FBd0MsRUFBRyxFQUFLLEdBQUksRUFBTSxDQUFLLEVBQ3hFLEVBQUksS0FBSyxHQUFvQixFQUFLLEdBQUksQ0FBSyxDQUFDLEVBQzVDLEdBQVUsRUFBSyxJQUFNLENBQUUsR0FBSSxHQUFvQixFQUFLLEdBQUksQ0FBSyxFQUFHLE1BQUssTUFFckUsR0FBSSxLQUFLLGdDQUFpQyxFQUFHLEVBQUssR0FBSSxDQUFJLEVBQzFELE1BQU0sR0FBVyxFQUFPLEVBQU0sS0FBSyxDQUFDLEVBQUcsQ0FBRyxFQUcvQyxDQUNILEVBQ0EsRUFBTSxNQUFNLEVBQUUsUUFBUSxjQUFjLENBQUMsRUFBRyxDQUN0QyxNQUFNLEVBQU8sRUFBTSxLQUFLLEVBQUUsRUFBRyxFQUFFLEVBQUcsRUFBRSxJQUFJLEVBQ3hDLEVBQUksS0FBSyxRQUFVLEVBQUUsRUFBSSxPQUFTLEVBQUUsRUFBSSxLQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFDaEUsRUFBSSxLQUFLLFFBQVUsRUFBRSxFQUFJLE9BQVMsRUFBRSxFQUFJLEtBQU0sRUFBRyxJQUFLLEtBQUssVUFBVSxFQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDbkYsRUFBSSxLQUFLLE1BQU8sR0FBVyxPQUFRLEVBQUUsRUFBRyxFQUFFLEVBQUcsZ0JBQWlCLEdBQVUsRUFBRSxHQUFJLEdBQVUsRUFBRSxFQUFFLEVBQzVGLE1BQU0sR0FBZ0IsRUFBWSxDQUFJLEVBQ3ZDLEVBQ0QsRUFBTSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRyxDQUNoQyxFQUFJLEtBQUssUUFBVSxFQUFFLEVBQUksT0FBUyxFQUFFLEVBQUksS0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQ2pFLEVBQ0QsRUFBSSxLQUFLLHVCQUF3QixLQUFLLFVBQXdCLEdBQU0sQ0FBSyxDQUFDLENBQUMsRUFDM0UsRUFBSSxLQUFLLCtDQUErQyxFQUN4RCxFQUFJLEtBQUssK0NBQStDLEVBQ3hELEVBQUksS0FBSywrQ0FBK0MsRUFDeEQsRUFBSSxLQUFLLENBQUssRUFDZCxHQUFZLENBQUssRUFDakIsRUFBSSxLQUFLLHNCQUF1QixLQUFLLFVBQXdCLEdBQU0sQ0FBSyxDQUFDLENBQUMsRUFDMUUsSUFBSSxFQUFPLEVBQ1gsTUFBUSw0QkFBNkIsR0FBd0IsQ0FBVSxFQXdDdkUsT0F2Q0EsSUFBcUIsQ0FBSyxFQUFFLGdCQUFnQixDQUFDLEVBQUcsQ0FDOUMsTUFBTSxFQUFPLEVBQU0sS0FBSyxDQUFDLEVBVXpCLEdBVEEsRUFBSSxLQUFLLFlBQWMsRUFBSSxLQUFPLEtBQUssVUFBVSxFQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDL0QsRUFBSSxLQUNGLFlBQWMsRUFBSSxNQUFRLEVBQUssRUFDL0IsSUFBTSxFQUFLLEVBQ1gsWUFDQSxFQUFLLE1BQ0wsWUFDQSxFQUFLLE1BQ1AsRUFDSSxHQUFNLFlBQ1IsRUFBSyxHQUFLLEVBQ1YsR0FBYSxDQUFJLFVBRWIsRUFBTSxTQUFTLENBQUMsRUFBRSxPQUFTLEVBQzdCLEVBQUssUUFBVSxFQUNmLElBQWMsRUFBVSxDQUFJLEVBQzVCLEdBQVUsRUFBSyxJQUFJLEtBQU8sTUFFMUIsR0FBSyxHQUFLLEVBQTJCLEVBQ3JDLEdBQWEsQ0FBSSxFQUd0QixFQUNELEVBQU0sTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUcsQ0FDaEMsTUFBTSxFQUFPLEVBQU0sS0FBSyxDQUFDLEVBQ3pCLEVBQUksS0FBSyxRQUFVLEVBQUUsRUFBSSxPQUFTLEVBQUUsRUFBSSxLQUFPLEtBQUssVUFBVSxDQUFJLEVBQUcsQ0FBSSxFQUN6RSxFQUFLLE9BQU8sUUFBUSxDQUFDLElBQVUsRUFBTSxHQUFLLEVBQTJCLENBQUMsRUFDdEUsTUFBTSxFQUFRLEdBQVcsRUFBVyxFQUFHLEVBQU0sR0FBVyxFQUFhLEVBQU8sQ0FBRSxFQUM5RSxHQUFrQixFQUFNLENBQUssRUFDOUIsRUFDRCxFQUFNLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFHLENBQ2hDLE1BQU0sRUFBSSxFQUFNLEtBQUssQ0FBQyxFQUV0QixHQURBLEVBQUksS0FBSyxFQUFHLEVBQUUsS0FBTSxFQUFFLElBQUksRUFDdEIsRUFBRSxPQUFTLFFBQ2IsRUFBTyxFQUFFLEtBRVosRUFDTSxDQUFFLE9BQU0sTUFBSyxHQUNuQixpQkFBaUIsRUFDaEIsSUFBeUIsRUFBTyxNQUFPLEVBQU0sRUFBTyxFQUFTLEVBQWEsSUFBTyxDQUNuRixHQUFnQixFQUFNLEVBQVMsRUFBYSxDQUFFLEVBQzlDLEdBQU0sRUFDTixJQUFPLEVBQ1AsSUFBTyxFQUNQLElBQU8sRUFDUCxFQUFJLEtBQUssa0JBQW1CLEtBQUssVUFBd0IsR0FBTSxDQUFLLENBQUMsQ0FBQyxFQUN0RSxJQUF1QixDQUFLLEVBQzVCLEVBQUksS0FBSyxlQUFnQixLQUFLLFVBQXdCLEdBQU0sQ0FBSyxDQUFDLENBQUMsRUFDbkUsTUFBTSxFQUFhLEdBQVUsRUFDN0IsTUFBTSxJQUFnQixFQUFNLEVBQU8sRUFBYSxFQUFTLE9BQUcsQ0FBVSxHQUNyRSxRQUFRLEVBR1AsR0FBK0IsRUFBTyxDQUFDLElBQVEsR0FBZSxhQUFhLEVBQUssR0FBVSxDQUFDLEVBQUcsY0FBYyxFQUM1RyxHQUFPLENBQ1QsY0FBZSxHQUNmLFFBQVMsRUFDVCxXQUFZLEdBQ1osTUFBWSxNQUNkLEVBQ0ksSUFBZ0MsVUFBZSxDQUFDLEVBQVksRUFBRyxFQUFLLEVBQVMsQ0FDL0UsRUFBSSxLQUFLLFFBQVMsQ0FBQyxHQUFHLEVBQVcsS0FBSyxDQUFDLENBQUMsRUFDeEMsRUFBSSxLQUFLLENBQVUsRUFDbkIsRUFBVyxnQkFBZ0IsQ0FBQyxFQUFRLENBRWxDLE1BQU0sRUFBTyxDQUNYLE1BRlksT0FHWixHQUFJLEVBQU8sR0FDWCxNQUFPLEVBQU8sTUFDZCxVQUFXLEdBQWEsRUFBTyxFQUFFLEVBQ2pDLFdBQVksR0FDWixNQUFPLDRCQUVQLFFBQVMsR0FBVSxFQUFFLFdBQVcsU0FBVyxHQUFVLEVBQUUsT0FBTyxPQUNoRSxFQUNBLEVBQUUsUUFBUSxFQUFPLEdBQUksQ0FBSSxFQUN6QixJQUFXLEVBQU8sUUFBUyxFQUFHLEVBQUssRUFBUyxFQUFPLEVBQUUsRUFDckQsRUFBSSxLQUFLLFVBQVcsQ0FBSSxFQUN6QixHQUNBLGVBQWUsRUFDZCxJQUE2QixVQUFlLENBQUMsRUFBUyxFQUFHLEVBQUssRUFBUyxFQUFRLENBQ2pGLEVBQUksS0FBSyxRQUFTLENBQUMsR0FBRyxFQUFRLEtBQUssQ0FBQyxDQUFDLEVBQ3JDLEVBQUksS0FBSyxDQUFPLEVBQ2hCLENBQUMsR0FBRyxFQUFRLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFXLEVBQU8sU0FBVyxDQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBUSxDQUMxRixNQUFNLEVBQWMsRUFBTyxXQUFXLEtBQUssR0FBRyxFQUN4QyxFQUFTLEdBQW1CLEVBQU8sTUFBTSxFQUN6QyxFQUFhLEVBQU8sT0FBUyxFQUFPLEdBR3BDLEVBQU8sQ0FDWCxXQUFZLEVBQU8sV0FDbkIsTUFIWSxZQUlaLFVBQVcsR0FBYSxDQUFVLEVBQ2xDLFVBQVcsRUFDWCxHQVBhLEVBUWIsR0FSYSxFQVNiLE1BQU8sRUFDUCxNQUFPLEVBQU8sTUFDZCxHQUFJLEVBQU8sR0FDWCxNQUFPLEVBQU8sTUFDZCxRQUFTLEVBQVEsR0FBRyxXQUFXLEVBQU8sR0FBSSxDQUFNLEdBQUssR0FDckQsYUFBYyxFQUFPLGFBQ3JCLEtBQU0sRUFBTyxLQUNiLE1BQU8sRUFBTyxPQUFTLFFBQVUsSUFBVyxPQUM1QyxLQUFNLEVBQU8sS0FFYixRQUFTLEdBQVUsRUFBRSxXQUFXLFNBQVcsR0FBVSxFQUFFLE9BQU8sT0FDaEUsRUFFQSxHQURBLEVBQUUsUUFBUSxFQUFPLEdBQUksQ0FBSSxFQUNyQixFQUNGLEVBQUUsVUFBVSxFQUFPLEdBQUksQ0FBTSxFQUUvQixFQUFJLEtBQUssVUFBVyxDQUFJLEVBQ3pCLEdBQ0EsWUFBWSxFQUNYLElBQTJCLFVBQWUsQ0FBQyxFQUFPLEVBQUcsRUFBYSxFQUFTLENBQzdFLEVBQUksS0FBSyxDQUFLLEVBQ2QsRUFBTSxnQkFBZ0IsQ0FBQyxFQUFNLEVBQUcsQ0FDOUIsTUFBTSxFQUFTLEVBRVQsRUFBUyxDQUFFLFdBQVksR0FBSSxNQUFPLEVBQUcsRUFDckMsRUFBYSxFQUFPLEtBR3BCLEVBQU8sQ0FDWCxXQUFZLEVBQU8sV0FDbkIsTUFIWSxPQUlaLFVBQVcsR0FBYSxDQUFVLEVBQ2xDLFNBQVUsRUFDVixHQVBhLEVBUWIsR0FSYSxFQVNiLE1BWmlCLEdBYWpCLE1BQU8sRUFBTyxNQUNkLEdBQUksRUFBTyxHQUNYLE1BQU8sRUFBTyxHQUNkLFFBQVMsR0FDVCxLQUFNLE9BRU4sUUFBUyxHQUFVLEVBQUUsV0FBVyxTQUFXLEdBQVUsRUFBRSxPQUFPLE9BQ2hFLEVBR0EsR0FGQSxFQUFFLFFBQVEsRUFBTyxHQUFJLENBQUksRUFDekIsRUFBSSxLQUFLLFVBQVcsQ0FBSSxHQUNuQixFQUFPLFFBQVUsRUFBUSxJQUFJLEVBQU8sS0FBSyxFQUM1QyxPQUVGLE1BQU0sRUFBUyxFQUFjLEVBQ3ZCLEVBQVcsQ0FDZixHQUFJLFdBQVcsSUFFZixRQUFTLFdBQ1QsUUFBUyxTQUVULFVBQVcsT0FFWCxnQkFBaUIsR0FDakIsYUFBYyxHQUVkLGVBQWdCLE9BQ2hCLGFBQWMsT0FDZCxNQUFPLFlBQ1AsV0FBWSxHQUNaLE1BQU8sR0FBbUIsR0FBSyxNQUFPLEVBQVcsQ0FDbkQsRUFDQSxFQUFFLFFBQVEsRUFBTyxHQUFJLEVBQU8sTUFBTyxFQUFVLENBQU0sRUFDcEQsR0FDQSxVQUFVLEVBQ1QsSUFBK0IsVUFBZSxDQUFDLEVBQVcsRUFBRyxDQUMvRCxNQUFNLEVBQVEsR0FBVSxFQUFFLFVBQzFCLElBQUksRUFBTSxFQUNWLEVBQVUsZ0JBQWdCLENBQUMsRUFBTSxDQUMvQixJQUNBLE1BQU0sRUFBVyxDQUVmLFFBQVMsV0FDVCxRQUFTLEVBQUssU0FBUyxVQUFZLEVBQUksU0FBVyxRQUNsRCxHQUFJLEdBQVUsRUFBSyxJQUFLLEVBQUssSUFBSyxDQUNoQyxPQUFRLEtBQ1IsUUFBUyxDQUNYLENBQUMsRUFFRCxVQUFXLEVBQUssT0FBUyxhQUFlLE9BQVMsU0FFakQsZ0JBQWlCLEVBQUssaUJBQW1CLE9BQVMsR0FBSyxFQUFLLGVBQzVELGFBQWMsRUFBSyxpQkFBbUIsT0FBUyxHQUFLLEVBQUssZUFFekQsZUFBZ0IsR0FBZSxFQUFLLFNBQVMsS0FBSyxFQUNsRCxhQUFjLEdBQWUsRUFBSyxTQUFTLEtBQUssRUFDaEQsTUFBTyxZQUNQLFdBQVksR0FDWixNQUFPLEdBQW1CLEdBQU8sTUFBTyxFQUFXLENBQ3JELEVBRUEsR0FEQSxFQUFJLEtBQUssRUFBVSxDQUFJLEVBQ25CLEVBQUssUUFBZSxPQUFHLENBQ3pCLE1BQU0sRUFBUyxHQUFtQixFQUFLLEtBQUssRUFDNUMsRUFBUyxNQUFRLEVBQU8sTUFDeEIsRUFBUyxXQUFhLEVBQU8sV0FHL0IsR0FEQSxFQUFLLEtBQU8sRUFBSyxNQUNiLEVBQUssT0FBYyxRQUNyQixHQUFJLEVBQUssUUFBZSxPQUN0QixFQUFTLGVBQWlCLHFCQUc1QixFQUFTLGVBQWlCLGFBQzFCLEVBQVMsU0FBVyxJQUNoQixHQUFVLEVBQUUsV0FBVyxZQUFjLEdBQVUsRUFBRSxXQUNuRCxFQUFTLFVBQVksT0FDckIsRUFBUyxNQUFRLDJCQUE2QixFQUFLLEtBQU8sY0FDckQsQ0FHTCxHQUZBLEVBQVMsVUFBWSxPQUNyQixFQUFTLE1BQVEsRUFBSyxLQUFLLFFBQVEsR0FBZSxlQUFnQixJQUFJLEVBQ2xFLEVBQUssUUFBZSxPQUN0QixFQUFTLE1BQVEsRUFBUyxPQUFTLDhDQUVyQyxFQUFTLFdBQWEsRUFBUyxXQUFXLFFBQVEsU0FBVSxPQUFPLEVBR3ZFLEVBQUUsUUFBUSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQVUsQ0FBRyxFQUM1QyxHQUNBLGNBQWMsRUFDYixJQUEwQixVQUFlLENBQUMsRUFBSyxDQUNqRCxHQUFPLElBQ0YsTUFDQSxDQUNMLEdBQ0MsU0FBUyxFQUNSLElBQXVCLEVBQU8sY0FBYyxDQUFDLEVBQU0sRUFBSSxFQUFVLEVBQVMsQ0FDNUUsRUFBSSxLQUFLLG1CQUFvQixDQUFFLEVBQy9CLE1BQU0sRUFBUSxHQUFVLEVBQUUsV0FBYSxHQUFVLEVBQUUsTUFDN0MsRUFBZ0IsR0FBVSxFQUFFLGNBQ2xDLEVBQUksS0FBSyxVQUFXLENBQUssRUFDekIsTUFBTSxFQUFjLEdBQU8sYUFBZSxHQUNwQyxFQUFjLEdBQU8sYUFBZSxHQUNwQyxFQUFJLElBQWMsR0FBTSxDQUM1QixXQUFZLEdBQ1osU0FBVSxFQUNaLENBQUMsRUFBRSxTQUFTLENBQ1YsUUFBUyxFQUFRLEdBQUcsYUFBYSxFQUNqQyxRQUFTLEVBQ1QsUUFBUyxFQUNULFFBQVMsRUFDVCxRQUFTLENBQ1gsQ0FBQyxFQUFFLDRCQUE0QixFQUFHLENBQ2hDLE1BQU8sQ0FBQyxFQUNULEVBQ0ssRUFBYSxFQUFRLEdBQUcsY0FBYyxFQUN0QyxFQUFVLEVBQVEsR0FBRyxXQUFXLEVBQ2hDLEVBQVksRUFBUSxHQUFHLGFBQWEsRUFDcEMsRUFBUSxFQUFRLEdBQUcsU0FBUyxFQUNsQyxFQUFJLEtBQUssQ0FBUyxFQUNsQixJQUFjLEVBQVksRUFBRyxFQUFJLENBQU8sRUFDeEMsSUFBVyxFQUFTLEVBQUcsRUFBSSxDQUFPLEVBQ2xDLElBQWEsRUFBVyxDQUFDLEVBQ3pCLElBQVMsRUFBTyxFQUFHLEVBQVUsT0FBUyxFQUFHLENBQU8sRUFDaEQsSUFBSSxFQUNKLEdBQUksSUFBa0IsVUFDcEIsRUFBaUIsR0FBUSxLQUFPLENBQUUsRUFFcEMsTUFBTSxFQUFPLElBQWtCLFVBQVksR0FBUSxFQUFlLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixJQUFJLEVBQUksR0FBUSxNQUFNLEVBQzdHLEVBQU0sRUFBSyxPQUFPLFFBQVEsS0FBTSxFQUNoQyxFQUFVLEVBQUssT0FBTyxJQUFNLEVBQUssSUFBSSxFQVUzQyxHQVRBLE1BQU0sSUFDSixFQUNBLEVBQ0EsQ0FBQyxjQUFlLFlBQWEsY0FBZSxhQUFjLFVBQVUsRUFDcEUsZUFDQSxDQUNGLEVBQ0EsR0FBYyxZQUFZLEVBQUssaUJBQWtCLEdBQU8sZ0JBQWtCLEVBQUcsRUFBUSxHQUFHLGdCQUFnQixDQUFDLEVBQ3pHLEdBQWtCLEVBQUcsRUFBSyxHQUFPLGVBQWdCLEdBQU8sV0FBVyxHQUM5RCxHQUFPLFdBQVksQ0FDdEIsTUFBTSxFQUFNLElBQWtCLFVBQVksRUFBZSxNQUFNLEVBQUUsR0FBRyxnQkFBa0IsU0FDaEYsRUFBUyxFQUFJLGlCQUFpQixRQUFVLEVBQUssc0JBQXNCLEVBQ3pFLFFBQVcsS0FBUyxFQUFRLENBQzFCLE1BQU0sRUFBTSxFQUFNLFFBQVEsRUFDcEIsRUFBUSxFQUFJLGdCQUFnQiw2QkFBOEIsTUFBTSxFQUN0RSxFQUFNLGFBQWEsS0FBTSxDQUFDLEVBQzFCLEVBQU0sYUFBYSxLQUFNLENBQUMsRUFDMUIsRUFBTSxhQUFhLFFBQVMsRUFBSSxLQUFLLEVBQ3JDLEVBQU0sYUFBYSxTQUFVLEVBQUksTUFBTSxFQUN2QyxFQUFNLGFBQWEsRUFBTyxFQUFNLFVBQVUsS0FHN0MsTUFBTSxFQXdCVCxFQUFPLEdBQWdCLGdCQUFnQixFQUNuQyxJQUEyQixDQUM3QixZQUNBLFFBQ0YsRUFHSSxJQUFVLENBQ1osT0FBUSxHQUNSLEdBQUksR0FDSixTQUFVLElBQ1YsT0FBUSxHQUNSLEtBQXNCLEVBQU8sQ0FBQyxJQUFRLENBQ3BDLElBQUssRUFBSSxNQUNQLEVBQUksTUFBUSxDQUFDLEVBRWYsRUFBSSxNQUFNLG9CQUFzQixFQUFJLG9CQUNwQyxHQUFnQixNQUFNLEdBQ3JCLE1BQU0sQ0FDWCxJQ2dDQSxTQUFTLEVBQVUsQ0FBQyxFQUFTLEdBQUksRUFBVSxFQUFHLEVBQU8sR0FBSSxFQUFhLEdBQW1CLENBQ3ZGLE1BQU0sRUFBVSxJQUFTLE1BQVEsRUFBSyxPQUFTLEVBQUksR0FBRyxJQUFhLElBQVMsR0FDNUUsTUFBTyxHQUFHLE9BQWUsSUFBUyxLQUFXLElBcUUvQyxTQUFTLEVBQWtCLENBQUMsRUFBUSxFQUFVLEVBQVUsQ0FDdEQsSUFBSyxFQUFTLElBQU0sRUFBUyxLQUFPLGtCQUFvQixFQUFTLEtBQU8sWUFDdEUsT0FFRixHQUFJLEVBQVMsV0FBWSxDQUN2QixJQUFLLE1BQU0sUUFBUSxFQUFTLGlCQUFpQixFQUMzQyxFQUFTLGtCQUFvQixDQUFDLEVBRWhDLEVBQVMsV0FBVyxNQUFNLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBYSxDQUNuRCxHQUFJLEVBQVMsSUFBSSxDQUFRLEVBQUcsQ0FDMUIsTUFBTSxFQUFXLEVBQVMsSUFBSSxDQUFRLEVBQ3RDLEVBQVMsa0JBQW9CLENBQUMsR0FBRyxFQUFTLGtCQUFtQixHQUFHLEVBQVMsTUFBTSxHQUVsRixFQUVILE1BQU0sRUFBbUIsRUFBTyxLQUFLLENBQUMsSUFBUyxFQUFLLEtBQU8sRUFBUyxFQUFFLEVBQ3RFLEdBQUksRUFDRixPQUFPLE9BQU8sRUFBa0IsQ0FBUSxNQUV4QyxHQUFPLEtBQUssQ0FBUSxFQUl4QixTQUFTLEdBQW9CLENBQUMsRUFBWSxDQUN4QyxPQUFPLEdBQVksU0FBUyxLQUFLLEdBQUcsR0FBSyxHQUczQyxTQUFTLEdBQW1CLENBQUMsRUFBWSxDQUN2QyxPQUFPLEdBQVksUUFBVSxDQUFDLEVBMktoQyxTQUFTLEVBQWMsRUFBRyxDQUN4QixPQUF1QixJQUFJLElBb083QixTQUFTLEVBQWUsQ0FBQyxFQUFLLEdBQUksQ0FDaEMsSUFBSSxFQUFVLEVBQ2QsR0FBSSxJQUFPLEdBQ1QsS0FDQSxFQUFVLEdBQUcsTUFBYSxLQUU1QixPQUFPLEVBR1QsU0FBUyxFQUFpQixDQUFDLEVBQUssR0FBSSxFQUFPLEdBQW9CLENBQzdELE9BQU8sSUFBTyxHQUFhLElBQWEsRUFHMUMsU0FBUyxHQUFhLENBQUMsRUFBSyxHQUFJLENBQzlCLElBQUksRUFBVSxFQUNkLEdBQUksSUFBTyxJQUNULEtBQ0EsRUFBVSxHQUFHLE1BQVcsS0FFMUIsT0FBTyxFQUdULFNBQVMsR0FBZSxDQUFDLEVBQUssR0FBSSxFQUFPLEdBQW9CLENBQzNELE9BQU8sSUFBTyxJQUFXLElBQVcsRUFHdEMsU0FBUyxHQUFlLENBQUMsRUFBTyxFQUFPLEVBQWUsQ0FDcEQsSUFBSSxFQUFNLEdBQWdCLEVBQU0sR0FBRyxLQUFLLENBQUMsRUFDckMsRUFBUSxHQUFrQixFQUFNLEdBQUcsS0FBSyxFQUFHLEVBQU0sSUFBSSxFQUNyRCxFQUFNLEdBQWdCLEVBQU0sR0FBRyxLQUFLLENBQUMsRUFDckMsRUFBUSxHQUFrQixFQUFNLEdBQUcsS0FBSyxFQUFHLEVBQU0sSUFBSSxFQUN6RCxHQUNFLEVBQ0EsRUFDQSxFQUFNLElBQ04sRUFBTSxZQUNOLEVBQU0sS0FDTixFQUFNLFFBQ04sRUFBTSxPQUNOLEVBQU0sVUFDUixFQUNBLEdBQ0UsRUFDQSxFQUNBLEVBQU0sSUFDTixFQUFNLFlBQ04sRUFBTSxLQUNOLEVBQU0sUUFDTixFQUFNLE9BQ04sRUFBTSxVQUNSLEVBQ0EsR0FBZ0IsVUFBVSxLQUFLLENBQzdCLE1BQ0EsTUFDQSxjQUFlLEdBQWUsYUFBYSxFQUFlLEdBQVUsQ0FBQyxDQUN2RSxDQUFDLE1BeCtDQyxHQWkyQkEsR0FHQSxJQUE0QixLQUM1QixJQUF5QixLQUN6QixHQUFhLFFBQ2IsR0FBZ0IsV0FDaEIsSUFBZ0IsV0FDaEIsSUFBZ0IsUUFDaEIsSUFBa0IsYUFDbEIsR0FBcUIsVUFDckIsSUFBZSxVQUNmLElBQWUsWUFDZixJQUF3QixhQUN4QixJQUFrQixJQUNsQixJQUFtQixPQUNuQixJQUFtQixTQUNuQixHQUFjLE9BQ2QsR0FBd0IsZ0JBQ3hCLElBQWMsYUFDZCxJQUFZLFdBQ1osSUFBZ0IsVUFDaEIsSUFBYyxtQkFDZCxJQUFhLE9BQ2IsSUFBa0IsWUFDbEIsR0FBYyxlQUNkLElBQVksUUFDWixJQUNBLElBQVcsYUFDWCxJQUFXLE9BQ1gsSUFBZ0IsWUFDaEIsSUFDQSxJQUNBLElBQWMsVUFDZCxJQUNBLElBQWtCLGNBQ2xCLElBQ0EsSUFBUyxTQUNULElBQU8sT0FDUCxJQUFjLFFBQ2QsR0FBb0IsT0FDcEIsSUFDQSxJQUdBLElBWUEsSUFJQSxJQXVCQSxJQU9BLEdBQ0EsR0FBaUIsRUFNakIsSUF1REEsSUEwQ0EsR0EwSkEsSUFNQSxHQUFhLE1BQ2IsSUFBYSxRQUNiLElBQ0EsSUFBVyxNQUNYLElBQWdCLFFBQ2hCLElBQWUsT0FDZixJQUFVLFNBQ1YsSUFBaUIsSUFLakIsR0FDQSxHQUNBLElBQ0EsR0FDQSxHQUNBLElBUUEsR0FHQSxHQUNBLEdBQWdCLEVBQ2hCLElBQWEsRUFDYixJQUlBLElBTUEsR0FDQSxJQUlBLElBQ0EsR0F5Q0EsR0FJQSxJQW9FQSxHQW9EQSxJQWFBLEdBR0EsSUFHQSxJQUdBLElBNkRBLElBaUJBLEdBS0EsSUFPQSxJQUlBLElBaUJBLElBR0EsR0FXQSxJQU1BLElBTUEsSUFDQSxJQUdBLElBQ0EsSUFJQSxHQWtDQSxJQXVOQSxpQkFuMURKLEtBSUEsS0FHQSxLQUlBLEtBZUksV0FBaUIsRUFBRyxDQUN0QixJQUFJLEVBQW9CLFVBQWUsQ0FBQyxFQUFHLEVBQUcsRUFBSSxFQUFHLENBQ25ELElBQUssRUFBSyxHQUFNLENBQUMsRUFBRyxFQUFJLEVBQUUsT0FBUSxJQUFLLEVBQUcsRUFBRSxJQUFNLEdBQ2xELE9BQU8sR0FDTixHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFDbHRCLEVBQVUsQ0FDWixNQUF1QixXQUFnQixDQUFLLEVBQUcsR0FDNUMsT0FBTyxFQUNWLEdBQUksQ0FBQyxFQUNMLFNBQVUsQ0FBRSxNQUFTLEVBQUcsTUFBUyxFQUFHLE1BQVMsRUFBRyxHQUFNLEVBQUcsR0FBTSxFQUFHLFNBQVksRUFBRyxLQUFRLEVBQUcsVUFBYSxFQUFHLGtCQUFxQixHQUFJLGVBQWtCLEdBQUksa0JBQXFCLEdBQUksWUFBZSxHQUFJLE1BQVMsR0FBSSxNQUFPLEdBQUksV0FBYyxHQUFJLE1BQVMsR0FBSSxNQUFTLEdBQUksZUFBa0IsR0FBSSxhQUFnQixHQUFJLFlBQWUsR0FBSSxZQUFlLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxLQUFRLEdBQUksS0FBUSxHQUFJLE9BQVUsR0FBSSxXQUFjLEdBQUksS0FBUSxHQUFJLGFBQWdCLEdBQUksVUFBYSxHQUFJLFVBQWEsR0FBSSxVQUFhLEdBQUksZ0JBQW1CLEdBQUksVUFBYSxHQUFJLGdCQUFtQixHQUFJLDBCQUE2QixHQUFJLFNBQVksR0FBSSxZQUFlLEdBQUksbUJBQXNCLEdBQUksUUFBVyxHQUFJLE1BQVMsR0FBSSxVQUFhLEdBQUksbUJBQXNCLEdBQUksTUFBUyxHQUFJLGdCQUFtQixHQUFJLFdBQWMsR0FBSSxhQUFnQixHQUFJLGFBQWdCLEdBQUksYUFBZ0IsR0FBSSxhQUFnQixHQUFJLElBQU8sR0FBSSxJQUFLLEdBQUksV0FBYyxHQUFJLGdCQUFtQixHQUFJLFFBQVcsR0FBSSxTQUFZLEdBQUksUUFBVyxFQUFHLEtBQVEsQ0FBRSxFQUN4OUIsV0FBWSxDQUFFLEVBQUcsUUFBUyxFQUFHLFFBQVMsRUFBRyxLQUFNLEVBQUcsS0FBTSxHQUFJLFFBQVMsR0FBSSxNQUFPLEdBQUksYUFBYyxHQUFJLFFBQVMsR0FBSSxRQUFTLEdBQUksaUJBQWtCLEdBQUksZUFBZ0IsR0FBSSxjQUFlLEdBQUksY0FBZSxHQUFJLEtBQU0sR0FBSSxLQUFNLEdBQUksT0FBUSxHQUFJLE9BQVEsR0FBSSxTQUFVLEdBQUksYUFBYyxHQUFJLE9BQVEsR0FBSSxZQUFhLEdBQUksWUFBYSxHQUFJLGtCQUFtQixHQUFJLFlBQWEsR0FBSSxrQkFBbUIsR0FBSSw0QkFBNkIsR0FBSSxXQUFZLEdBQUksY0FBZSxHQUFJLHFCQUFzQixHQUFJLFVBQVcsR0FBSSxRQUFTLEdBQUksWUFBYSxHQUFJLHFCQUFzQixHQUFJLFFBQVMsR0FBSSxrQkFBbUIsR0FBSSxhQUFjLEdBQUksZUFBZ0IsR0FBSSxlQUFnQixHQUFJLGVBQWdCLEdBQUksZUFBZ0IsR0FBSSxJQUFLLEdBQUksYUFBYyxHQUFJLGtCQUFtQixHQUFJLFVBQVcsR0FBSSxVQUFXLEVBQ2h3QixhQUFjLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcs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RUFBRyxDQUFFLEVBQUcsQ0FBQyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxDQUFJLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBSyxDQUFFLEVBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQ3JoRixlQUFnQixDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUNqRSxXQUE0QixXQUFnQixDQUFVLENBQUMsRUFBSyxFQUFNLENBQ2hFLEdBQUksRUFBSyxZQUNQLEtBQUssTUFBTSxDQUFHLE1BQ1QsQ0FDTCxJQUFJLEVBQVEsSUFBSSxNQUFNLENBQUcsRUFFekIsTUFEQSxFQUFNLEtBQU8sRUFDUCxJQUVQLFlBQVksRUFDZixNQUF1QixXQUFnQixDQUFLLENBQUMsRUFBTyxDQUNsRCxJQUFJ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QWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFdBQWMsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFNBQVksQ0FBRSxNQUFTLENBQUMsR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsb0JBQXVCLENBQUUsTUFBUyxDQUFDLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxTQUFZLENBQUUsTUFBUyxDQUFDLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxhQUFnQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxXQUFjLENBQUUsTUFBUyxDQUFDLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxDQUFFLE1BQVMsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsR0FBTSxDQUFFLE1BQVMsQ0FBQyxFQUFHLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBSyxDQUFFLENBQ3RtRCxFQUNBLE9B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QUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDaGUsZUFBZ0IsQ0FBQyxFQUNqQixXQUE0QixXQUFnQixDQUFVLENBQUMsRUFBSyxFQUFNLENBQ2hFLEdBQUksRUFBSyxZQUNQLEtBQUssTUFBTSxDQUFHLE1BQ1QsQ0FDTCxJQUFJLEVBQVEsSUFBSSxNQUFNLENBQUcsRUFFekIsTUFEQSxFQUFNLEtBQU8sRUFDUCxJQUVQLFlBQVksRUFDZixNQUF1QixXQUFnQixDQUFLLENBQUMsRUFBTyxDQUNsRCxJQUFJLEVBQU8sS0FBTSxFQUFRLENBQUMsQ0FBQyxFQUFHLEVBQVMsQ0FBQyxFQUFHLEVBQVMsQ0FBQyxJQUFJLEVBQUcsRUFBUyxDQUFDLEVBQUcsRUFBUSxLQUFLLE1BQU8sRUFBUyxHQUFJLEVBQVcsRUFBRyxFQUFTLEVBQUcsRUFBYSxFQUFHLEVBQVMsRUFBRyxFQUFNLEVB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TyxDQUFDLEVBQUssQ0FDN0IsT0FBUSxFQUFJLFVBQVUsRUFFMUIsRUFBRyxDQUNELFNBQVUsWUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFNBQVMsRUFFeEIsRUFBRyxDQUNELFNBQVUsY0FDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBUSxFQUFJLFNBQVMsRUFFekIsRUFBRyxDQUNELFNBQVUsVUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFNBQVMsRUFFeEIsRUFBRyxDQUNELFNBQVUsYUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFlBQVksRUFFM0IsRUFBRyxDQUNELFNBQVUsU0FDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsRUFFdkIsRUFBRyxDQUNELFNBQVUsVUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFNBQVMsRUFFeEIsRUFBRyxDQUNELFNBQVUsYUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsRUFFdkIsRUFBRyxDQUNELFNBQVUsWUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsR0FBSSxFQUFJLE9BQU8sRUFDYixPQUFPLEVBQUksU0FBUyxNQUVwQixRQUFPLEVBQUksT0FBTyxFQUFFLFNBQVMsR0FBSyxFQUFJLE9BQU8sRUFBRSxTQUFTLEVBRzlELEVBQUcsQ0FDRCxTQUFVLFFBQ1YsaUJBQWtCLENBQU8sQ0FBQyxFQUFLLENBQzdCLE9BQU8sRUFBSSxPQUFPLEVBRXRCLEVBQUcsQ0FDRCxTQUFVLFVBQ1YsaUJBQWtCLENBQU8sQ0FBQyxFQUFLLENBQzdCLE9BQU8sRUFBSSxTQUFTLEVBRXhCLEVBQUcsQ0FDRCxTQUFVLFVBQ1YsaUJBQWtCLENBQU8sQ0FBQyxFQUFLLENBQzdCLE9BQU8sRUFBSSxPQUFPLEVBRXRCLEVBQUcsQ0FDRCxTQUFVLFlBQ1YsaUJBQWtC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QUksS0FBUSxHQUFJLEtBQVEsR0FBSSxNQUFTLEdBQUksV0FBYyxHQUFJLGNBQWlCLEdBQUksWUFBZSxHQUFJLFdBQWMsR0FBSSxVQUFhLEdBQUksUUFBVyxHQUFJLFFBQVcsRUFBRyxLQUFRLENBQUUsRUFDM1YsV0FBWSxDQUFFLEVBQUcsUUFBUyxFQUFHLFlBQWEsRUFBRyxLQUFNLEVBQUcsVUFBVyxHQUFJLE1BQU8sR0FBSSxZQUFhLEdBQUksT0FBUSxHQUFJLFFBQVMsR0FBSSxjQUFlLEdBQUksYUFBYyxHQUFJLFlBQWEsR0FBSSxTQUFVLEVBQzFMLGFBQWMsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxDQUFDLEVBQzFQLGNBQStCLFdBQWdCLENBQVMsQ0FBQyxFQUFRLEVBQVEsRUFBVSxFQUFJLEVBQVMsRUFBSSxFQUFJLENBQ3RHLElBQUksRUFBSyxFQUFHLE9BQVMsRUFDckIsT0FBUSxPQUNELE9BQ0EsR0FDSCxPQUFPLE1BRUosR0FDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLFVBQVUsRUFDL0IsVUFDRyxHQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sV0FBVyxFQUNoQyxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxXQUFXLEVBQ2hDLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLFlBQVksRUFDakMsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLEtBQUssU0FBVSxFQUFHLEdBQUksRUFBRSxFQUN2QyxFQUFHLFFBQVEsRUFBRyxFQUFLLEdBQUcsT0FBUSxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksTUFBTyxFQUFHLEdBQUksSUFBSSxFQUNsRSxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFVLEVBQUcsRUFBRyxFQUNyQyxFQUFHLGFBQWEsQ0FBRSxLQUFNLEVBQUcsRUFBSSxDQUFDLEVBQ2hDLFVBQ0csUUFDQSxJQUNILEVBQUcsYUFBYSxDQUFFLE1BQU8sRUFBRyxFQUFJLENBQUMsRUFDakMsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sV0FBVyxFQUNoQyxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFVLEVBQUcsR0FBSSxFQUFFLEVBQ3hDLEVBQUcsUUFBUSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsR0FBSSxNQUFPLEVBQUcsR0FBSSxJQUFJLEVBQ2xELFVBQ0csSUFDSCxFQUFHLGFBQWEsQ0FBRSxLQUFNLEVBQUcsRUFBSSxDQUFDLEVBQ2hDLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLGdCQUFpQixFQUFHLEVBQUssRUFBRSxFQUNoRCxLQUFLLEVBQUksQ0FBRSxHQUFJLEVBQUcsRUFBSyxHQUFJLE1BQU8sRUFBRyxFQUFLLEdBQUksS0FBTSxFQUFHLFFBQVEsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFHLENBQUUsRUFDbkYsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEdBQUksRUFBRyxHQUFLLE1BQU8sRUFBRyxHQUFLLEtBQU0sRUFBRyxTQUFTLE9BQVEsRUFDaEUsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sZ0JBQWlCLEVBQUcsRUFBSyxFQUFFLEVBQ2hELEtBQUssRUFBSSxDQUFFLEdBQUksRUFBRyxFQUFLLEdBQUksTUFBTyxFQUFHLEVBQUssR0FBSSxLQUFNLEVBQUcsUUFBUSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsQ0FBRSxFQUNuRixRQUVILFdBQVcsRUFDZCxNQUFPLENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDdnFDLGVBQWdCLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUN2QyxXQUE0QixXQUFnQixDQUFVLENBQUMsRUFBSyxFQUFNLENBQ2hFLEdBQUksRUFBSyxZQUNQLEtBQUssTUFBTSxDQUFHLE1BQ1QsQ0FDTCxJQUFJLEVBQVEsSUFBSSxNQUFNLENBQUcsRUFFekIsTUFEQSxFQUFNLEtBQU8sRUFDUCxJQUVQLFlBQVksRUFDZixNQUF1QixXQUFnQixDQUFLLENBQUMsRUFBTyxDQUNsRCxJQUFJLEVBQU8sS0FBTSxFQUFRLENBQUMsQ0FBQyxFQUFHLEVBQVMsQ0FBQyxFQUFHLEVBQVMsQ0FBQyxJQUFJLEVBQUcsRUFBUyxDQUFDLEVBQUcsRUFBUSxLQUFLLE1BQU8sRUFBUyxHQUFJLEVBQVcsRUFBRyxFQUFTLEVBQUcsRUFBYSxFQUFHLEVBQVMsRUFBRyxFQUFNLEVBQ2xLLEVBQU8sRUFBTyxNQUFNLEtBQUss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SSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRyxFQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2xpQixlQUFnQixDQUFFLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLENBQUMs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Q0FBdUMsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEdBQUksT0FBUSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDOUcsS0FBSyxFQUFJLENBQUUsUUFBUyxFQUFHLEVBQUssR0FBSyxFQUFHLEdBQUssTUFBTyxFQUFHLEVBQUssR0FBSSxXQUFZLEVBQUcsRUFBSyxFQUFHLEVBQ25GLFVBQ0csUUFDQSxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sV0FBWSxHQUFJLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxJQUFLLEVBQUcsR0FBSSxLQUFLLENBQUUsRUFDdkUsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sYUFBYyxHQUFJLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxXQUFZLEVBQUcsR0FBSSxLQUFLLENBQUUsRUFDaEYsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sY0FBZSxHQUFJLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxVQUFXLEVBQUcsR0FBSSxLQUFLLENBQUUsRUFDaEYsUUFFSCxXQUFXLEVBQ2QsTUFBTyxDQUFDLENBQUUsRUFBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBRSxFQUFHLENBQUUsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFDampELGVBQWdCLENBQUUsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQ3BFLFdBQTRCLFdBQWdCLENBQVUsQ0FBQyxFQUFLLEVBQU0sQ0FDaEUsR0FBSSxFQUFLLFlBQ1AsS0FBSyxNQUFNLENBQUcsTUFDVCxDQUNMLElBQUksRUFBUSxJQUFJLE1BQU0sQ0FBRyxFQUV6QixNQURBLEVBQU0sS0FBTyxFQUNQLElBRVAsWUFBWSxFQUNmLE1BQXVCLFdBQWdCLENBQUssQ0FBQyxFQUFPLENBQ2xELElBQUksRUFBTyxLQUFNLEVBQVEsQ0FBQyxDQUFDLEVBQUcsRUFBUyxDQUFDLEVBQUcsRUFBUyxDQUFDLElBQUksRUFBRyxFQUFTLENBQUMsRUFBRyxFQUFRLEtBQUssTUFBTyxFQUFTLEdBQUksRUFBVyxFQUFHLEVBQVMsRUFB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TSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQ3RCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQ3RCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQ3RCLFlBQ1AsVUFDRyxJQUdILE9BRkEsRUFBRyxVQUFVLEVBQUUsTUFBTSxVQUFVLEVBQy9CLEtBQUssVUFBVSxNQUFNLEVBQ2QsR0FDUCxVQUNHLElBR0gsT0FGQSxFQUFHLFVBQVUsRUFBRSxNQUFNLFVBQVUsRUFDL0IsS0FBSyxVQUFVLE1BQU0sRUFDZCxHQUNQLFVBQ0csSUFHSCxPQUZBLEVBQUcsVUFBVSxFQUFFLE1BQU0sVUFBVSxFQUMvQixLQUFLLFVBQVUsTUFBTSxFQUNkLEdBQ1AsVUFDRyxJQUdILE9BRkEsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQzlCLEtBQUssVUFBVSxNQUFNLEVBQ2QsR0FDUCxVQUNHLElBR0gsT0FGQSxFQUFHLFVBQVUsRUFBRSxNQUFNLFVBQVUsRUFDL0IsS0FBSyxVQUFVLE1BQU0sRUFDZCxHQUNQ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TyxNQUFNLEVBQ1gsR0FBRSxLQUFLLENBQUMsRUFDVCxPQUFPLElBQ1IsS0FBSyxDQUFDLEVBQ0osRUFBUSxHQUNSLEVBQVEsR0FDUixFQUFNLEtBQUssSUFBSSxLQUFLLEVBQUksRUFBRyxLQUFLLENBQUMsRUFDakMsRUFBTSxLQUFLLElBQUksRUFBRyxLQUFLLElBQUksS0FBSyxFQUFJLEVBQUcsS0FBSyxDQUFDLENBQUMsRUFDbEQsUUFBUyxFQUFJLEVBQUcsRUFBSSxLQUFLLElBQUksRUFBSyxDQUFHLEVBQUcsSUFBSyxDQUMzQyxHQUFJLEVBQUksRUFBSyxDQUNYLEtBQUssRUFBRSxHQUFLLEVBQ1osUUFBUyxFQUFJLEVBQUcsRUFBSSxLQUFLLEVBQUcsSUFDMUIsS0FBSyxFQUFFLEdBQUssRUFBSSxNQUFNLEtBQUssRUFBRSxHQUFJLEVBQUUsR0FBRyxFQUFFLEVBRzFDLEdBQUksS0FBSyxFQUFFLEtBQU8sRUFBSyxDQUNyQixHQUFJLEVBQUUsR0FBRyxHQUFLLEVBQ1osS0FBSyxFQUFFLElBQU0sS0FBSyxFQUFFLEdBRXRCLFFBQVMsRUFBSyxFQUFHLEVBQUssS0FBSyxFQUFHLElBQzVCLEVBQUUsR0FBSSxJQUFNLEtBQUssRUFBRSxHQUdyQixFQUFFLEdBQUcsSUFBTSxFQUViLEtBQUssRUFBRSxJQUFNLEtBQUssRUFBRSxHQUV0QixRQUFTLEVBQUksRUFBSSxFQUFHLEVBQUksS0FBSyxFQUFHLElBQUssQ0FDbkMsV0FBYSxDQUFDLEdBQUssR0FBSyxDQUN0QixPQUFPLElBQU8sSUFDZCxFQUFJLEVBQUssS0FBSyxFQUFFLEtBQU8sQ0FBRyxFQUFHLENBQzdCLElBQUksRUFBSSxFQUNSLFFBQVMsRUFBTSxFQUFHLEVBQU0sS0FBSyxFQUFHLElBQzlCLEdBQUssRUFBRSxHQUFLLEdBQUssRUFBRSxHQUFLLEdBRzFCLEdBQUssRUFBSSxFQUFFLEdBQUcsR0FDZCxRQUFTLEVBQU0sRUFBRyxFQUFNLEtBQUssRUFBRyxJQUM5QixFQUFFLEdBQUssSUFBTSxFQUFJLEVBQUUsR0FBSyxHQUk1QixF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 +//# debugId=50367D37FB6AF77864756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvY2hhbm5lbC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvbGFuZy5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvdW5pdC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvdXRpbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY2hhbm5lbHMvdHlwZS5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY2hhbm5lbHMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NoYW5uZWxzL3JldXNhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb2xvci9oZXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L2NvbG9yL2hzbC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY29sb3Iva2V5d29yZC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvY29sb3IvcmdiLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9jb2xvci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9jaGFuZ2UuanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvcmdiYS5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9jaGFubmVsLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2x1bWluYW5jZS5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9pc19saWdodC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9pc19kYXJrLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2FkanVzdF9jaGFubmVsLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2xpZ2h0ZW4uanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvZGFya2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2FkanVzdC5qcyIsICJub2RlX21vZHVsZXMva2hyb21hL2Rpc3QvbWV0aG9kcy9taXguanMiLCAibm9kZV9tb2R1bGVzL2tocm9tYS9kaXN0L21ldGhvZHMvaW52ZXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9tZXRob2RzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9raHJvbWEvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZG9tcHVyaWZ5L2Rpc3QvcHVyaWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy9rYXRleC9kaXN0L2thdGV4Lm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstSUlLTVFMSUMubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvaWNvbi9kZWZhdWx0cy5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9jdXN0b21pc2F0aW9ucy9kZWZhdWx0cy5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9pY29uL25hbWUubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvaWNvbi90cmFuc2Zvcm1hdGlvbnMubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvaWNvbi9tZXJnZS5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9pY29uLXNldC90cmVlLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL2ljb24tc2V0L2dldC1pY29uLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL3N2Zy9zaXplLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL3N2Zy9kZWZzLm1qcyIsICJub2RlX21vZHVsZXMvQGljb25pZnkvdXRpbHMvbGliL3N2Zy9idWlsZC5tanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9zdmcvaWQubWpzIiwgIm5vZGVfbW9kdWxlcy9AaWNvbmlmeS91dGlscy9saWIvc3ZnL2h0bWwubWpzIiwgIm5vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICJub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL0BpY29uaWZ5L3V0aWxzL2xpYi9pbmRleC5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUwyQ0pPWVdFLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstMjNBVE1aWFYubWpzIiwgIm5vZGVfbW9kdWxlcy9AYnJhaW50cmVlL3Nhbml0aXplLXVybC9kaXN0L2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvQGJyYWludHJlZS9zYW5pdGl6ZS11cmwvZGlzdC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL251bWJlci5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcyIsICJub2RlX21vZHVsZXMvaW50ZXJubWFwL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWF4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2F4aXMuanMiLCAibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCAibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcyIsICJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hjbC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2VWYXJ5aW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCAibm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9leHBvbmVudC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFJvdW5kZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvbG9jYWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblJvdW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5pdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9iYW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL25pY2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taWxsaXNlY29uZC5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3dlZWsuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy90aWNrcy5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1RhYmxlYXUxMC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2Rlc2NlbmRpbmcuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bXAuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9ub29wLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc0Nsb3NlZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzT3Blbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWxDbG9zZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbUNsb3NlZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21PcGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyQ2xvc2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvc3RlcC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3pvb20uanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNGdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzTWFza2VkLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvU291cmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hDbGVhci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2hhc2hHZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzaEhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNoU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0hhc2guanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlQ2xlYXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hc3NvY0luZGV4T2YuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlRGVsZXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2xpc3RDYWNoZUdldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19saXN0Q2FjaGVIYXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbGlzdENhY2hlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0xpc3RDYWNoZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwQ2FjaGVDbGVhci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0tleWFibGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZURlbGV0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUdldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZUhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19tYXBDYWNoZVNldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19NYXBDYWNoZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL21lbW9pemUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc3RhY2tDbGVhci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0RlbGV0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0dldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja0hhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdGFja1NldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TdGFjay5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduTWVyZ2VWYWx1ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGb3IuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2xvbmVCdWZmZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fVWludDhBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lVHlwZWRBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5QXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUNyZWF0ZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyQXJnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pbml0Q2xvbmVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NhZmVHZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9QbGFpbk9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTWVyZ2VEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNZXJnZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLTJFRFRXRFlJLm1qcyIsICJub2RlX21vZHVsZXMvbWFya2VkL2xpYi9tYXJrZWQuZXNtLmpzIiwgIm5vZGVfbW9kdWxlcy90cy1kZWRlbnQvZXNtL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1aSTZWMlVFMi5tanMiLCAibm9kZV9tb2R1bGVzL3JvdWdoanMvYnVuZGxlZC9yb3VnaC5lc20uanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLVJPS1lVVkNVLm1qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL190cmltbWVkRW5kSW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRyaW0uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b051bWJlci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvRmluaXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1dlYWtNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ub29wLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5RWFjaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRmluZEluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hTi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpY3RJbmRleE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJbmRleE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5SW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5cy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hc3NpZ24uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNLZXkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWVtb2l6ZUNhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zdHJpbmdUb1BhdGguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b1N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jYXN0UGF0aC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b0tleS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZ2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5UHVzaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VGbGF0dGVuLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZmxhdHRlbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19mbGF0UmVzdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2xpY2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faGFzVW5pY29kZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVJlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25Jbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFN5bWJvbHNJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5U3ltYm9sc0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldEFsbEtleXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0QWxsS2V5c0luLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX0RhdGFWaWV3LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1Byb21pc2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFRhZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pbml0Q2xvbmVBcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jbG9uZURhdGFWaWV3LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lUmVnRXhwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Nsb25lU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc01hcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1NldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VDbG9uZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Nsb25lLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY2xvbmVEZWVwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29tcGFjdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRDYWNoZUFkZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRDYWNoZUhhcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TZXRDYWNoZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheVNvbWUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FjaGVIYXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxBcnJheXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbWFwVG9BcnJheS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb0FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VxdWFsQnlUYWcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXF1YWxPYmplY3RzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNFcXVhbC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNNYXRjaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1N0cmljdENvbXBhcmFibGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXRjaGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VIYXNJbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19oYXNQYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaGFzSW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5RGVlcC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3Byb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJdGVyYXRlZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUFnZ3JlZ2F0b3IuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUZvck93bi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVCYXNlRWFjaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRWFjaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQWdncmVnYXRvci5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBZ2dyZWdhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbm93LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZGVmYXVsdHMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZURpZmZlcmVuY2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9kaWZmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbGFzdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9kcm9wUmlnaHQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY2FzdEZ1bmN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZm9yRWFjaC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VhY2guanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlFdmVyeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRXZlcnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ldmVyeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlRmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NyZWF0ZUZpbmQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9maW5kSW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaGVhZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2ZpcnN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VNYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mbGF0TWFwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZm9ySW4uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9mb3JPd24uanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9ncm91cEJ5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VHdC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaGFzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3ZhbHVlcy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2luY2x1ZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaW5kZXhPZi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRW1wdHkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzUmVnRXhwLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNSZWdFeHAuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1VuZGVmaW5lZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlTHQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9tYXBWYWx1ZXMuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUV4dHJlbXVtLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWF4LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWluLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbWluQnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9uZWdhdGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUGlja0J5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvcGlja0J5LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTb3J0QnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29tcGFyZUFzY2VuZGluZy5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb21wYXJlTXVsdGlwbGUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZU9yZGVyQnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNjaWlTaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3VuaWNvZGVTaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3N0cmluZ1NpemUuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVBpY2suanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9waWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSYW5nZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVSYW5nZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3JhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZWR1Y2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9yZWR1Y2UuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9yZWplY3QuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zaXplLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTb21lLmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc29tZS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3NvcnRCeS5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuaXEuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy91bmlvbi5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL3VuaXEuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy91bmlxQnkuanMiLCAibm9kZV9tb2R1bGVzL2xvZGFzaC1lcy91bmlxdWVJZC5qcyIsICJub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlWmlwT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvemlwT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvbG9kYXNoLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvZ3JhcGguanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2RhdGEvbGlzdC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2dyZWVkeS1mYXMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9hY3ljbGljLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2FkZC1ib3JkZXItc2VnbWVudHMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9jb29yZGluYXRlLXN5c3RlbS5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL25vcm1hbGl6ZS5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL3JhbmsvdXRpbC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL3JhbmsvZmVhc2libGUtdHJlZS5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9kaWprc3RyYS5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9kaWprc3RyYS1hbGwuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZmluZC1jeWNsZXMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvZmxveWQtd2Fyc2hhbGwuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvdG9wc29ydC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9pcy1hY3ljbGljLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvYWxnL2Rmcy5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9wb3N0b3JkZXIuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvcHJlb3JkZXIuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9hbGcvcHJpbS5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2FsZy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL3JhbmsvbmV0d29yay1zaW1wbGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvcmFuay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL25lc3RpbmctZ3JhcGguanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9hZGQtc3ViZ3JhcGgtY29uc3RyYWludHMuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9idWlsZC1sYXllci1ncmFwaC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2Nyb3NzLWNvdW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvaW5pdC1vcmRlci5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL2JhcnljZW50ZXIuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9yZXNvbHZlLWNvbmZsaWN0cy5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL29yZGVyL3NvcnQuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9vcmRlci9zb3J0LXN1YmdyYXBoLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvb3JkZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wYXJlbnQtZHVtbXktY2hhaW5zLmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZGFncmUvcG9zaXRpb24vYmsuanMiLCAibm9kZV9tb2R1bGVzL2RhZ3JlLWQzLWVzL3NyYy9kYWdyZS9wb3NpdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2xheW91dC5qcyIsICJub2RlX21vZHVsZXMvZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvanNvbi5qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvZGFncmUtQzRZQTQzRjMubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1aQU5RV05FSC5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUJGU0kyUTdSLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstRjJYRk4zQlkubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1YVk9ZT00yQy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2M0RGlhZ3JhbS1USEFER0tEUC5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLVdaQklBVFNLLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstR1dITURESEIubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9mbG93RGlhZ3JhbS00NE5PQU1LVS5tanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICJub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3ZhbGlkYXRlLmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcGFyc2UuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92MzUuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zaGExLmpzIiwgIm5vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjUuanMiLCAibm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvZXJEaWFncmFtLTYyQ0JRVjVZLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstT1FDTTVMSFUubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay0yUllRM1FUQi5tanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3N5bnRheC10cmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9zdHJlYW0uanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2NzdC11dGlscy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvZXJyb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvYXN0LXV0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9yZWdleHAtdG8tYXN0L2xpYi9zcmMvdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL3JlZ2V4cC10by1hc3QvbGliL3NyYy9jaGFyYWN0ZXItY2xhc3Nlcy5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdC9saWIvc3JjL3JlZ2V4cC1wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL3JlZ2V4cC10by1hc3QvbGliL3NyYy9iYXNlLXJlZ2V4cC12aXNpdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9yZWdleHAtdG8tYXN0L2xpYi9zcmMvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9yZWdleHAtdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2dyYW1tYXItdXRpbHMuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2xhbmd1YWdlcy9ncmFtbWFyLWNvbmZpZy5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vdXRpbHMvbGliL3NyYy9wcmludC5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vdXRpbHMvbGliL3NyYy90aW1lci5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vdXRpbHMvbGliL3NyYy90by1mYXN0LXByb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL2dhc3QvbGliL3NyYy9tb2RlbC5qcyIsICJub2RlX21vZHVsZXMvQGNoZXZyb3RhaW4vZ2FzdC9saWIvc3JjL3Zpc2l0b3IuanMiLCAibm9kZV9tb2R1bGVzL0BjaGV2cm90YWluL2dhc3QvbGliL3NyYy9oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9nYXN0L2xpYi9zcmMvYXBpLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9yZXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9maXJzdC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIvZm9sbG93LmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvc2Nhbi9yZWdfZXhwX3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3NjYW4vcmVnX2V4cC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3NjYW4vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9zY2FuL3Rva2Vucy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3NjYW4vbGV4ZXJfZXJyb3JzX3B1YmxpYy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3NjYW4vbGV4ZXJfcHVibGljLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvc2Nhbi90b2tlbnNfcHVibGljLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZXJyb3JzX3B1YmxpYy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIvcmVzb2x2ZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9ncmFtbWFyL2ludGVycHJldGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvZ3JhbW1hci9sb29rYWhlYWQuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9ncmFtbWFyL2NoZWNrcy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIvZ2FzdC9nYXN0X3Jlc29sdmVyX3B1YmxpYy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2V4Y2VwdGlvbnNfcHVibGljLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9yZWNvdmVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIva2V5cy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2dyYW1tYXIvbGxrX2xvb2thaGVhZC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci90cmFpdHMvbG9va3NhaGVhZC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2NzdC9jc3QuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9sYW5nL2xhbmdfZXh0ZW5zaW9ucy5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL2NzdC9jc3RfdmlzaXRvci5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci90cmFpdHMvdHJlZV9idWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9sZXhlcl9hZGFwdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9yZWNvZ25pemVyX2FwaS5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci90cmFpdHMvcmVjb2duaXplcl9lbmdpbmUuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL2Vycm9yX2hhbmRsZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvdHJhaXRzL2NvbnRleHRfYXNzaXN0LmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9nYXN0X3JlY29yZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluL2xpYi9zcmMvcGFyc2UvcGFyc2VyL3RyYWl0cy9wZXJmX3RyYWNlci5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL3BhcnNlL3BhcnNlci91dGlscy9hcHBseV9taXhpbnMuanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4vbGliL3NyYy9wYXJzZS9wYXJzZXIvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9jc3QtZHRzLWdlbi9saWIvc3JjL21vZGVsLmpzIiwgIm5vZGVfbW9kdWxlcy9AY2hldnJvdGFpbi9jc3QtZHRzLWdlbi9saWIvc3JjL2FwaS5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi9saWIvc3JjL2FwaS5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi1hbGxzdGFyL2xpYi9hdG4uanMiLCAibm9kZV9tb2R1bGVzL2NoZXZyb3RhaW4tYWxsc3Rhci9saWIvZGZhLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGV2cm90YWluLWFsbHN0YXIvbGliL2FsbC1zdGFyLWxvb2thaGVhZC5qcyIsICJub2RlX21vZHVsZXMvY2hldnJvdGFpbi1hbGxzdGFyL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzL2xpYi9lc20vbWFpbi5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL2NzdC1ub2RlLWJ1aWxkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3BhcnNlci9sYW5naXVtLXBhcnNlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL3BhcnNlci1idWlsZGVyLWJhc2UuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3BhcnNlci9jb21wbGV0aW9uLXBhcnNlci1idWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvbGFuZ2l1bS1wYXJzZXItYnVpbGRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL3Rva2VuLWJ1aWxkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3BhcnNlci92YWx1ZS1jb252ZXJ0ZXIuanMiLCAibm9kZV9tb2R1bGVzL3ZzY29kZS1qc29ucnBjL2xpYi9jb21tb24vcmFsLmpzIiwgIm5vZGVfbW9kdWxlcy92c2NvZGUtanNvbnJwYy9saWIvY29tbW9uL2lzLmpzIiwgIm5vZGVfbW9kdWxlcy92c2NvZGUtanNvbnJwYy9saWIvY29tbW9uL2V2ZW50cy5qcyIsICJub2RlX21vZHVsZXMvdnNjb2RlLWpzb25ycGMvbGliL2NvbW1vbi9jYW5jZWxsYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2NhbmNlbGxhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvcHJvbWlzZS11dGlscy5qcyIsICJub2RlX21vZHVsZXMvdnNjb2RlLWxhbmd1YWdlc2VydmVyLXRleHRkb2N1bWVudC9saWIvZXNtL21haW4uanMiLCAibm9kZV9tb2R1bGVzL3ZzY29kZS11cmkvbGliL2VzbS9pbmRleC5tanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL3VyaS11dGlscy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL2RvY3VtZW50cy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcmVmZXJlbmNlcy9saW5rZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3JlZmVyZW5jZXMvbmFtZS1wcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9jb2xsZWN0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcmVmZXJlbmNlcy9zY29wZS1jb21wdXRhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcmVmZXJlbmNlcy9zY29wZS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdXRpbHMvY2FjaGluZy5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcmVmZXJlbmNlcy9zY29wZS1wcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvc2VyaWFsaXplci9qc29uLXNlcmlhbGl6ZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3NlcnZpY2UtcmVnaXN0cnkuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1yZWdpc3RyeS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdmFsaWRhdGlvbi9kb2N1bWVudC12YWxpZGF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3dvcmtzcGFjZS9hc3QtZGVzY3JpcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2UvYXN0LW5vZGUtbG9jYXRvci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL2NvbmZpZ3VyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2Rpc3Bvc2FibGUuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3dvcmtzcGFjZS9kb2N1bWVudC1idWlsZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2UvaW5kZXgtbWFuYWdlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL3dvcmtzcGFjZS1tYW5hZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9wYXJzZXIvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2RvY3VtZW50YXRpb24vanNkb2MuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2RvY3VtZW50YXRpb24vZG9jdW1lbnRhdGlvbi1wcm92aWRlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvZG9jdW1lbnRhdGlvbi9jb21tZW50LXByb3ZpZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9ldmVudC5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL2FzeW5jLXBhcnNlci5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL3dvcmtzcGFjZS1sb2NrLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9zZXJpYWxpemVyL2h5ZHJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9kZWZhdWx0LW1vZHVsZS5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvZGVwZW5kZW5jeS1pbmplY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2RvY3VtZW50YXRpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL2xhbmd1YWdlcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvcGFyc2VyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9yZWZlcmVuY2VzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9zZXJpYWxpemVyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi93b3Jrc3BhY2UvZmlsZS1zeXN0ZW0tcHJvdmlkZXIuanMiLCAibm9kZV9tb2R1bGVzL2xhbmdpdW0vbGliL3V0aWxzL2dyYW1tYXItbG9hZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi91dGlscy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvdmFsaWRhdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbGFuZ2l1bS9saWIvd29ya3NwYWNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9sYW5naXVtL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvY2h1bmstWTI3TVFaM1UubWpzIiwgIm5vZGVfbW9kdWxlcy9AbWVybWFpZC1qcy9wYXJzZXIvZGlzdC9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1OQ01GVFRVVy5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLTRZRkI1VlVDLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvY2h1bmstRVFGTEZNTkUubWpzIiwgIm5vZGVfbW9kdWxlcy9AbWVybWFpZC1qcy9wYXJzZXIvZGlzdC9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1CSTZFUUtPUS5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLUZGN0JRWE9ILm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvaW5mby00NkRXNlZKNy5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL3BhY2tldC1XMkdIVkNZSi5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL3BpZS1CRVdUNFJIRS5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2FyY2hpdGVjdHVyZS1JM1FGWU1MMi5tanMiLCAibm9kZV9tb2R1bGVzL0BtZXJtYWlkLWpzL3BhcnNlci9kaXN0L2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2dpdEdyYXBoLVlDWVBMNTdCLm1qcyIsICJub2RlX21vZHVsZXMvQG1lcm1haWQtanMvcGFyc2VyL2Rpc3QvbWVybWFpZC1wYXJzZXIuY29yZS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2dpdEdyYXBoRGlhZ3JhbS1VTDVVRktEUi5tanMiLCAibm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9pc29XZWVrLmpzIiwgIm5vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQuanMiLCAibm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9hZHZhbmNlZEZvcm1hdC5qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvZ2FudHREaWFncmFtLUFTRUlRNFA1Lm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvaW5mb0RpYWdyYW0tWUdKVFA2QUEubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9waWVEaWFncmFtLU9aWDZYSDVNLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvcXVhZHJhbnREaWFncmFtLVZHMzRER0tDLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUveHljaGFydERpYWdyYW0tVE1UN05MQk4ubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9yZXF1aXJlbWVudERpYWdyYW0tRlBaQjZJSkkubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9zZXF1ZW5jZURpYWdyYW0tSzdVN1UyUFUubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9jaHVuay1CQVZPR0tGVy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NsYXNzRGlhZ3JhbS00QkhZSUs0SS5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLU1LQUlGS1c1Lm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2xhc3NEaWFncmFtLXYyLVNQWTZWMzJPLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstTlFGN01KQU8ubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9zdGF0ZURpYWdyYW0tV0c3NkVXUEsubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9zdGF0ZURpYWdyYW0tdjItS1I0WFRRTFcubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9qb3VybmV5RGlhZ3JhbS1HNUxDN1cySy5tanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3RpbWVsaW5lLWRlZmluaXRpb24tS1lRQUlaVVgubWpzIiwgIm5vZGVfbW9kdWxlcy9jeXRvc2NhcGUvZGlzdC9jeXRvc2NhcGUuZXNtLm1qcyIsICJub2RlX21vZHVsZXMvbGF5b3V0LWJhc2UvbGF5b3V0LWJhc2UuanMiLCAibm9kZV9tb2R1bGVzL2Nvc2UtYmFzZS9jb3NlLWJhc2UuanMiLCAibm9kZV9tb2R1bGVzL2N5dG9zY2FwZS1jb3NlLWJpbGtlbnQvY3l0b3NjYXBlLWNvc2UtYmlsa2VudC5qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvbWluZG1hcC1kZWZpbml0aW9uLTI2RldFRTdILm1qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWF4LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L3NyYy9hbGlnbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L3NyYy9zYW5rZXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1wYXRoL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zYW5rZXkvbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluay9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2Fua2V5L25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9zcmMvc2Fua2V5TGlua0hvcml6b250YWwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNhbmtleS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21lcm1haWQvZGlzdC9jaHVua3MvbWVybWFpZC5jb3JlL3NhbmtleURpYWdyYW0tS01NUURMNUsubWpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9kaWFncmFtLVFTNUdWTFVYLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L2NodW5rcy9tZXJtYWlkLmNvcmUvYmxvY2tEaWFncmFtLVNMRVlOVU5OLm1qcyIsICJub2RlX21vZHVsZXMvY3l0b3NjYXBlLWZjb3NlL25vZGVfbW9kdWxlcy9sYXlvdXQtYmFzZS9sYXlvdXQtYmFzZS5qcyIsICJub2RlX21vZHVsZXMvY3l0b3NjYXBlLWZjb3NlL25vZGVfbW9kdWxlcy9jb3NlLWJhc2UvY29zZS1iYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jeXRvc2NhcGUtZmNvc2UvY3l0b3NjYXBlLWZjb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy9tZXJtYWlkL2Rpc3QvY2h1bmtzL21lcm1haWQuY29yZS9hcmNoaXRlY3R1cmVEaWFncmFtLVdRR0xLQ1NDLm1qcyIsICJub2RlX21vZHVsZXMvbWVybWFpZC9kaXN0L21lcm1haWQuY29yZS5tanMiLCAibm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIm5vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICJub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICJzcmMvY2xpZW50anMvbWVybWFpZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsCiAgICAiLyogSU1QT1JUICovXG4vKiBNQUlOICovXG5jb25zdCBDaGFubmVsID0ge1xuICAgIC8qIENMQU1QICovXG4gICAgbWluOiB7XG4gICAgICAgIHI6IDAsXG4gICAgICAgIGc6IDAsXG4gICAgICAgIGI6IDAsXG4gICAgICAgIHM6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGE6IDBcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgICByOiAyNTUsXG4gICAgICAgIGc6IDI1NSxcbiAgICAgICAgYjogMjU1LFxuICAgICAgICBoOiAzNjAsXG4gICAgICAgIHM6IDEwMCxcbiAgICAgICAgbDogMTAwLFxuICAgICAgICBhOiAxXG4gICAgfSxcbiAgICBjbGFtcDoge1xuICAgICAgICByOiAocikgPT4gciA+PSAyNTUgPyAyNTUgOiAociA8IDAgPyAwIDogciksXG4gICAgICAgIGc6IChnKSA9PiBnID49IDI1NSA/IDI1NSA6IChnIDwgMCA/IDAgOiBnKSxcbiAgICAgICAgYjogKGIpID0+IGIgPj0gMjU1ID8gMjU1IDogKGIgPCAwID8gMCA6IGIpLFxuICAgICAgICBoOiAoaCkgPT4gaCAlIDM2MCxcbiAgICAgICAgczogKHMpID0+IHMgPj0gMTAwID8gMTAwIDogKHMgPCAwID8gMCA6IHMpLFxuICAgICAgICBsOiAobCkgPT4gbCA+PSAxMDAgPyAxMDAgOiAobCA8IDAgPyAwIDogbCksXG4gICAgICAgIGE6IChhKSA9PiBhID49IDEgPyAxIDogKGEgPCAwID8gMCA6IGEpXG4gICAgfSxcbiAgICAvKiBDT05WRVJTSU9OICovXG4gICAgLy9TT1VSQ0U6IGh0dHBzOi8vcGxhbmV0Y2FsYy5jb20vNzc3OVxuICAgIHRvTGluZWFyOiAoYykgPT4ge1xuICAgICAgICBjb25zdCBuID0gYyAvIDI1NTtcbiAgICAgICAgcmV0dXJuIGMgPiAuMDM5MjggPyBNYXRoLnBvdygoKG4gKyAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IG4gLyAxMi45MjtcbiAgICB9LFxuICAgIC8vU09VUkNFOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamFja3Nvbi81MzExMjU2XG4gICAgaHVlMnJnYjogKHAsIHEsIHQpID0+IHtcbiAgICAgICAgaWYgKHQgPCAwKVxuICAgICAgICAgICAgdCArPSAxO1xuICAgICAgICBpZiAodCA+IDEpXG4gICAgICAgICAgICB0IC09IDE7XG4gICAgICAgIGlmICh0IDwgMSAvIDYpXG4gICAgICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICAgICAgaWYgKHQgPCAxIC8gMilcbiAgICAgICAgICAgIHJldHVybiBxO1xuICAgICAgICBpZiAodCA8IDIgLyAzKVxuICAgICAgICAgICAgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIGhzbDJyZ2I6ICh7IGgsIHMsIGwgfSwgY2hhbm5lbCkgPT4ge1xuICAgICAgICBpZiAoIXMpXG4gICAgICAgICAgICByZXR1cm4gbCAqIDIuNTU7IC8vIEFjaHJvbWF0aWNcbiAgICAgICAgaCAvPSAzNjA7XG4gICAgICAgIHMgLz0gMTAwO1xuICAgICAgICBsIC89IDEwMDtcbiAgICAgICAgY29uc3QgcSA9IChsIDwgLjUpID8gbCAqICgxICsgcykgOiAobCArIHMpIC0gKGwgKiBzKTtcbiAgICAgICAgY29uc3QgcCA9IDIgKiBsIC0gcTtcbiAgICAgICAgc3dpdGNoIChjaGFubmVsKSB7XG4gICAgICAgICAgICBjYXNlICdyJzogcmV0dXJuIENoYW5uZWwuaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpICogMjU1O1xuICAgICAgICAgICAgY2FzZSAnZyc6IHJldHVybiBDaGFubmVsLmh1ZTJyZ2IocCwgcSwgaCkgKiAyNTU7XG4gICAgICAgICAgICBjYXNlICdiJzogcmV0dXJuIENoYW5uZWwuaHVlMnJnYihwLCBxLCBoIC0gMSAvIDMpICogMjU1O1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZ2IyaHNsOiAoeyByLCBnLCBiIH0sIGNoYW5uZWwpID0+IHtcbiAgICAgICAgciAvPSAyNTU7XG4gICAgICAgIGcgLz0gMjU1O1xuICAgICAgICBiIC89IDI1NTtcbiAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICBjb25zdCBsID0gKG1heCArIG1pbikgLyAyO1xuICAgICAgICBpZiAoY2hhbm5lbCA9PT0gJ2wnKVxuICAgICAgICAgICAgcmV0dXJuIGwgKiAxMDA7XG4gICAgICAgIGlmIChtYXggPT09IG1pbilcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBBY2hyb21hdGljXG4gICAgICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgICAgIGNvbnN0IHMgPSAobCA+IC41KSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgICAgIGlmIChjaGFubmVsID09PSAncycpXG4gICAgICAgICAgICByZXR1cm4gcyAqIDEwMDtcbiAgICAgICAgc3dpdGNoIChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjogcmV0dXJuICgoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKSkgKiA2MDtcbiAgICAgICAgICAgIGNhc2UgZzogcmV0dXJuICgoYiAtIHIpIC8gZCArIDIpICogNjA7XG4gICAgICAgICAgICBjYXNlIGI6IHJldHVybiAoKHIgLSBnKSAvIGQgKyA0KSAqIDYwO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIC0xOyAvL1RTQzogVHlwZVNjcmlwdCBpcyBzdHVwaWQgYW5kIGNvbXBsYWlucyBpZiB0aGVyZSBpc24ndCB0aGlzIHVzZWxlc3MgZGVmYXVsdCBzdGF0ZW1lbnRcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWw7XG4iLAogICAgIi8qIE1BSU4gKi9cbmNvbnN0IExhbmcgPSB7XG4gICAgLyogQVBJICovXG4gICAgY2xhbXA6IChudW1iZXIsIGxvd2VyLCB1cHBlcikgPT4ge1xuICAgICAgICBpZiAobG93ZXIgPiB1cHBlcilcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihsb3dlciwgTWF0aC5tYXgodXBwZXIsIG51bWJlcikpO1xuICAgICAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCBudW1iZXIpKTtcbiAgICB9LFxuICAgIHJvdW5kOiAobnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlciAqIDEwMDAwMDAwMDAwKSAvIDEwMDAwMDAwMDAwO1xuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IExhbmc7XG4iLAogICAgIi8qIE1BSU4gKi9cbmNvbnN0IFVuaXQgPSB7XG4gICAgLyogQVBJICovXG4gICAgZGVjMmhleDogKGRlYykgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBNYXRoLnJvdW5kKGRlYykudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA+IDEgPyBoZXggOiBgMCR7aGV4fWA7XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVW5pdDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgY2hhbm5lbCBmcm9tICcuL2NoYW5uZWwuanMnO1xuaW1wb3J0IGxhbmcgZnJvbSAnLi9sYW5nLmpzJztcbmltcG9ydCB1bml0IGZyb20gJy4vdW5pdC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBVdGlscyA9IHtcbiAgICBjaGFubmVsLFxuICAgIGxhbmcsXG4gICAgdW5pdFxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVXRpbHM7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBERUMySEVYID0ge307XG5mb3IgKGxldCBpID0gMDsgaSA8PSAyNTU7IGkrKylcbiAgICBERUMySEVYW2ldID0gXy51bml0LmRlYzJoZXgoaSk7IC8vIFBvcHVsYXRpbmcgZHluYW1pY2FsbHksIHN0cmlraW5nIGEgYmFsYW5jZSBiZXR3ZWVuIGNvZGUgc2l6ZSBhbmQgcGVyZm9ybWFuY2VcbmNvbnN0IFRZUEUgPSB7XG4gICAgQUxMOiAwLFxuICAgIFJHQjogMSxcbiAgICBIU0w6IDJcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IERFQzJIRVgsIFRZUEUgfTtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgeyBUWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcbi8qIE1BSU4gKi9cbmNsYXNzIFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICAgICAgdGhpcy50eXBlID0gVFlQRS5BTEw7XG4gICAgfVxuICAgIC8qIEFQSSAqL1xuICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG4gICAgc2V0KHR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAmJiB0aGlzLnR5cGUgIT09IHR5cGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lJyk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnR5cGUgPSBUWVBFLkFMTDtcbiAgICB9XG4gICAgaXModHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSB0eXBlO1xuICAgIH1cbn1cbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgVHlwZTtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgVHlwZSBmcm9tICcuL3R5cGUuanMnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG5jbGFzcyBDaGFubmVscyB7XG4gICAgLyogQ09OU1RSVUNUT1IgKi9cbiAgICBjb25zdHJ1Y3RvcihkYXRhLCBjb2xvcikge1xuICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOyAvL1RTQ1xuICAgICAgICB0aGlzLnR5cGUgPSBuZXcgVHlwZSgpO1xuICAgIH1cbiAgICAvKiBBUEkgKi9cbiAgICBzZXQoZGF0YSwgY29sb3IpIHtcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsgLy9UU0NcbiAgICAgICAgdGhpcy50eXBlLnR5cGUgPSBUWVBFLkFMTDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qIEhFTFBFUlMgKi9cbiAgICBfZW5zdXJlSFNMKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwgfSA9IGRhdGE7XG4gICAgICAgIGlmIChoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkYXRhLmggPSBfLmNoYW5uZWwucmdiMmhzbChkYXRhLCAnaCcpO1xuICAgICAgICBpZiAocyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZGF0YS5zID0gXy5jaGFubmVsLnJnYjJoc2woZGF0YSwgJ3MnKTtcbiAgICAgICAgaWYgKGwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGRhdGEubCA9IF8uY2hhbm5lbC5yZ2IyaHNsKGRhdGEsICdsJyk7XG4gICAgfVxuICAgIF9lbnN1cmVSR0IoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IHsgciwgZywgYiB9ID0gZGF0YTtcbiAgICAgICAgaWYgKHIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGRhdGEuciA9IF8uY2hhbm5lbC5oc2wycmdiKGRhdGEsICdyJyk7XG4gICAgICAgIGlmIChnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBkYXRhLmcgPSBfLmNoYW5uZWwuaHNsMnJnYihkYXRhLCAnZycpO1xuICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZGF0YS5iID0gXy5jaGFubmVsLmhzbDJyZ2IoZGF0YSwgJ2InKTtcbiAgICB9XG4gICAgLyogR0VUVEVSUyAqL1xuICAgIGdldCByKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCByID0gZGF0YS5yO1xuICAgICAgICBpZiAoIXRoaXMudHlwZS5pcyhUWVBFLkhTTCkgJiYgciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUhTTCgpO1xuICAgICAgICByZXR1cm4gXy5jaGFubmVsLmhzbDJyZ2IoZGF0YSwgJ3InKTtcbiAgICB9XG4gICAgZ2V0IGcoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IGcgPSBkYXRhLmc7XG4gICAgICAgIGlmICghdGhpcy50eXBlLmlzKFRZUEUuSFNMKSAmJiBnICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gZztcbiAgICAgICAgdGhpcy5fZW5zdXJlSFNMKCk7XG4gICAgICAgIHJldHVybiBfLmNoYW5uZWwuaHNsMnJnYihkYXRhLCAnZycpO1xuICAgIH1cbiAgICBnZXQgYigpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgYiA9IGRhdGEuYjtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUuaXMoVFlQRS5IU0wpICYmIGIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB0aGlzLl9lbnN1cmVIU0woKTtcbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5oc2wycmdiKGRhdGEsICdiJyk7XG4gICAgfVxuICAgIGdldCBoKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCBoID0gZGF0YS5oO1xuICAgICAgICBpZiAoIXRoaXMudHlwZS5pcyhUWVBFLlJHQikgJiYgaCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIGg7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVJHQigpO1xuICAgICAgICByZXR1cm4gXy5jaGFubmVsLnJnYjJoc2woZGF0YSwgJ2gnKTtcbiAgICB9XG4gICAgZ2V0IHMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IHMgPSBkYXRhLnM7XG4gICAgICAgIGlmICghdGhpcy50eXBlLmlzKFRZUEUuUkdCKSAmJiBzICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgdGhpcy5fZW5zdXJlUkdCKCk7XG4gICAgICAgIHJldHVybiBfLmNoYW5uZWwucmdiMmhzbChkYXRhLCAncycpO1xuICAgIH1cbiAgICBnZXQgbCgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgbCA9IGRhdGEubDtcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUuaXMoVFlQRS5SR0IpICYmIGwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICB0aGlzLl9lbnN1cmVSR0IoKTtcbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5yZ2IyaHNsKGRhdGEsICdsJyk7XG4gICAgfVxuICAgIGdldCBhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmE7XG4gICAgfVxuICAgIC8qIFNFVFRFUlMgKi9cbiAgICBzZXQgcihyKSB7XG4gICAgICAgIHRoaXMudHlwZS5zZXQoVFlQRS5SR0IpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEuciA9IHI7XG4gICAgfVxuICAgIHNldCBnKGcpIHtcbiAgICAgICAgdGhpcy50eXBlLnNldChUWVBFLlJHQik7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5nID0gZztcbiAgICB9XG4gICAgc2V0IGIoYikge1xuICAgICAgICB0aGlzLnR5cGUuc2V0KFRZUEUuUkdCKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhLmIgPSBiO1xuICAgIH1cbiAgICBzZXQgaChoKSB7XG4gICAgICAgIHRoaXMudHlwZS5zZXQoVFlQRS5IU0wpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGEuaCA9IGg7XG4gICAgfVxuICAgIHNldCBzKHMpIHtcbiAgICAgICAgdGhpcy50eXBlLnNldChUWVBFLkhTTCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5zID0gcztcbiAgICB9XG4gICAgc2V0IGwobCkge1xuICAgICAgICB0aGlzLnR5cGUuc2V0KFRZUEUuSFNMKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhLmwgPSBsO1xuICAgIH1cbiAgICBzZXQgYShhKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0YS5hID0gYTtcbiAgICB9XG59XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxzO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBDaGFubmVscyBmcm9tICcuLy9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBjaGFubmVscyA9IG5ldyBDaGFubmVscyh7IHI6IDAsIGc6IDAsIGI6IDAsIGE6IDAgfSwgJ3RyYW5zcGFyZW50Jyk7XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGNoYW5uZWxzO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDaGFubmVsc1JldXNhYmxlIGZyb20gJy4uL2NoYW5uZWxzL3JldXNhYmxlLmpzJztcbmltcG9ydCB7IERFQzJIRVggfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgSGV4ID0ge1xuICAgIC8qIFZBUklBQkxFUyAqL1xuICAgIHJlOiAvXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgaWYgKGNvbG9yLmNoYXJDb2RlQXQoMCkgIT09IDM1KVxuICAgICAgICAgICAgcmV0dXJuOyAvLyAnIydcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb2xvci5tYXRjaChIZXgucmUpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBoZXggPSBtYXRjaFsxXTtcbiAgICAgICAgY29uc3QgZGVjID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGhleC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGhhc0FscGhhID0gbGVuZ3RoICUgNCA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNGdWxsTGVuZ3RoID0gbGVuZ3RoID4gNDtcbiAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IGlzRnVsbExlbmd0aCA/IDEgOiAxNztcbiAgICAgICAgY29uc3QgYml0cyA9IGlzRnVsbExlbmd0aCA/IDggOiA0O1xuICAgICAgICBjb25zdCBiaXRzT2Zmc2V0ID0gaGFzQWxwaGEgPyAwIDogLTE7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBpc0Z1bGxMZW5ndGggPyAyNTUgOiAxNTtcbiAgICAgICAgcmV0dXJuIENoYW5uZWxzUmV1c2FibGUuc2V0KHtcbiAgICAgICAgICAgIHI6ICgoZGVjID4+IChiaXRzICogKGJpdHNPZmZzZXQgKyAzKSkpICYgbWFzaykgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgZzogKChkZWMgPj4gKGJpdHMgKiAoYml0c09mZnNldCArIDIpKSkgJiBtYXNrKSAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICBiOiAoKGRlYyA+PiAoYml0cyAqIChiaXRzT2Zmc2V0ICsgMSkpKSAmIG1hc2spICogbXVsdGlwbGllcixcbiAgICAgICAgICAgIGE6IGhhc0FscGhhID8gKGRlYyAmIG1hc2spICogbXVsdGlwbGllciAvIDI1NSA6IDFcbiAgICAgICAgfSwgY29sb3IpO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5OiAoY2hhbm5lbHMpID0+IHtcbiAgICAgICAgY29uc3QgeyByLCBnLCBiLCBhIH0gPSBjaGFubmVscztcbiAgICAgICAgaWYgKGEgPCAxKSB7IC8vICNSUkdHQkJBQVxuICAgICAgICAgICAgcmV0dXJuIGAjJHtERUMySEVYW01hdGgucm91bmQocildfSR7REVDMkhFWFtNYXRoLnJvdW5kKGcpXX0ke0RFQzJIRVhbTWF0aC5yb3VuZChiKV19JHtERUMySEVYW01hdGgucm91bmQoYSAqIDI1NSldfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vICNSUkdHQkJcbiAgICAgICAgICAgIHJldHVybiBgIyR7REVDMkhFWFtNYXRoLnJvdW5kKHIpXX0ke0RFQzJIRVhbTWF0aC5yb3VuZChnKV19JHtERUMySEVYW01hdGgucm91bmQoYildfWA7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBIZXg7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgSFNMID0ge1xuICAgIC8qIFZBUklBQkxFUyAqL1xuICAgIHJlOiAvXmhzbGE/XFwoXFxzKj8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmUtP1xcZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZS0/XFxkKyk/JSlcXHMqPyg/Oix8XFxzKVxccyo/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplLT9cXGQrKT8lKSg/Olxccyo/KD86LHxcXC8pXFxzKj9cXCs/KC0/KD86XFxkKyg/OlxcLlxcZCspP3woPzpcXC5cXGQrKSkoPzplLT9cXGQrKT8oJSk/KSk/XFxzKj9cXCkkL2ksXG4gICAgaHVlUmU6IC9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLFxuICAgIC8qIEhFTFBFUlMgKi9cbiAgICBfaHVlMmRlZzogKGh1ZSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGh1ZS5tYXRjaChIU0wuaHVlUmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIG51bWJlciwgdW5pdF0gPSBtYXRjaDtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2dyYWQnOiByZXR1cm4gXy5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChudW1iZXIpICogLjkpO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhZCc6IHJldHVybiBfLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KG51bWJlcikgKiAxODAgLyBNYXRoLlBJKTtcbiAgICAgICAgICAgICAgICBjYXNlICd0dXJuJzogcmV0dXJuIF8uY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQobnVtYmVyKSAqIDM2MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF8uY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQoaHVlKSk7XG4gICAgfSxcbiAgICAvKiBBUEkgKi9cbiAgICBwYXJzZTogKGNvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gY29sb3IuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYgKGNoYXJDb2RlICE9PSAxMDQgJiYgY2hhckNvZGUgIT09IDcyKVxuICAgICAgICAgICAgcmV0dXJuOyAvLyAnaCcvJ0gnXG4gICAgICAgIGNvbnN0IG1hdGNoID0gY29sb3IubWF0Y2goSFNMLnJlKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgWywgaCwgcywgbCwgYSwgaXNBbHBoYVBlcmNlbnRhZ2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBDaGFubmVsc1JldXNhYmxlLnNldCh7XG4gICAgICAgICAgICBoOiBIU0wuX2h1ZTJkZWcoaCksXG4gICAgICAgICAgICBzOiBfLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxcbiAgICAgICAgICAgIGw6IF8uY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQobCkpLFxuICAgICAgICAgICAgYTogYSA/IF8uY2hhbm5lbC5jbGFtcC5hKGlzQWxwaGFQZXJjZW50YWdlID8gcGFyc2VGbG9hdChhKSAvIDEwMCA6IHBhcnNlRmxvYXQoYSkpIDogMVxuICAgICAgICB9LCBjb2xvcik7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwsIGEgfSA9IGNoYW5uZWxzO1xuICAgICAgICBpZiAoYSA8IDEpIHsgLy8gSFNMQVxuICAgICAgICAgICAgcmV0dXJuIGBoc2xhKCR7Xy5sYW5nLnJvdW5kKGgpfSwgJHtfLmxhbmcucm91bmQocyl9JSwgJHtfLmxhbmcucm91bmQobCl9JSwgJHthfSlgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBIU0xcbiAgICAgICAgICAgIHJldHVybiBgaHNsKCR7Xy5sYW5nLnJvdW5kKGgpfSwgJHtfLmxhbmcucm91bmQocyl9JSwgJHtfLmxhbmcucm91bmQobCl9JSlgO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgSFNMO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBIZXggZnJvbSAnLi9oZXguanMnO1xuLyogTUFJTiAqL1xuY29uc3QgS2V5d29yZCA9IHtcbiAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICBjb2xvcnM6IHtcbiAgICAgICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgICAgIGFudGlxdWV3aGl0ZTogJyNmYWViZDcnLFxuICAgICAgICBhcXVhOiAnIzAwZmZmZicsXG4gICAgICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICAgICAgYXp1cmU6ICcjZjBmZmZmJyxcbiAgICAgICAgYmVpZ2U6ICcjZjVmNWRjJyxcbiAgICAgICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgICAgIGJsYWNrOiAnIzAwMDAwMCcsXG4gICAgICAgIGJsYW5jaGVkYWxtb25kOiAnI2ZmZWJjZCcsXG4gICAgICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICAgICAgYmx1ZXZpb2xldDogJyM4YTJiZTInLFxuICAgICAgICBicm93bjogJyNhNTJhMmEnLFxuICAgICAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICAgICAgY2FkZXRibHVlOiAnIzVmOWVhMCcsXG4gICAgICAgIGNoYXJ0cmV1c2U6ICcjN2ZmZjAwJyxcbiAgICAgICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgICAgIGNvcmFsOiAnI2ZmN2Y1MCcsXG4gICAgICAgIGNvcm5mbG93ZXJibHVlOiAnIzY0OTVlZCcsXG4gICAgICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICAgICAgY3lhbmFxdWE6ICcjMDBmZmZmJyxcbiAgICAgICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICAgICAgZGFya2N5YW46ICcjMDA4YjhiJyxcbiAgICAgICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgICAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgICAgICBkYXJrZ3JlZW46ICcjMDA2NDAwJyxcbiAgICAgICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgICAgIGRhcmttYWdlbnRhOiAnIzhiMDA4YicsXG4gICAgICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICAgICAgZGFya29yY2hpZDogJyM5OTMyY2MnLFxuICAgICAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICAgICAgZGFya3NlYWdyZWVuOiAnIzhmYmM4ZicsXG4gICAgICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICAgICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrc2xhdGVncmV5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICAgICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgICAgICBkZWVwcGluazogJyNmZjE0OTMnLFxuICAgICAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgICAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgICAgIGRpbWdyZXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgICAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICAgICAgZmxvcmFsd2hpdGU6ICcjZmZmYWYwJyxcbiAgICAgICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICAgICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgICAgICBnYWluc2Jvcm86ICcjZGNkY2RjJyxcbiAgICAgICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgICAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgICAgIGdvbGRlbnJvZDogJyNkYWE1MjAnLFxuICAgICAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgICAgIGdyZWVueWVsbG93OiAnI2FkZmYyZicsXG4gICAgICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICAgICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICAgICAgaG90cGluazogJyNmZjY5YjQnLFxuICAgICAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICAgICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgICAgIGl2b3J5OiAnI2ZmZmZmMCcsXG4gICAgICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICAgICAgbGF3bmdyZWVuOiAnIzdjZmMwMCcsXG4gICAgICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgICAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICAgICAgbGlnaHRjb3JhbDogJyNmMDgwODAnLFxuICAgICAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICAgICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ICcjZmFmYWQyJyxcbiAgICAgICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICAgICAgbGlnaHRncmV5OiAnI2QzZDNkMycsXG4gICAgICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgICAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgICAgICBsaWdodHNlYWdyZWVuOiAnIzIwYjJhYScsXG4gICAgICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgICAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgICAgICBsaWdodHNsYXRlZ3JleTogJyM3Nzg4OTknLFxuICAgICAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgICAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgICAgICBsaW1lOiAnIzAwZmYwMCcsXG4gICAgICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgICAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgICAgICBtYWdlbnRhOiAnI2ZmMDBmZicsXG4gICAgICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgICAgICBtZWRpdW1hcXVhbWFyaW5lOiAnIzY2Y2RhYScsXG4gICAgICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICAgICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgICAgIG1lZGl1bXB1cnBsZTogJyM5MzcwZGInLFxuICAgICAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgICAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICcjMDBmYTlhJyxcbiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgICAgICBtaWRuaWdodGJsdWU6ICcjMTkxOTcwJyxcbiAgICAgICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgICAgICBtb2NjYXNpbjogJyNmZmU0YjUnLFxuICAgICAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgICAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgICAgIG9sZGxhY2U6ICcjZmRmNWU2JyxcbiAgICAgICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICAgICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgICAgIG9yYW5nZTogJyNmZmE1MDAnLFxuICAgICAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICAgICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgICAgIHBhbGVnb2xkZW5yb2Q6ICcjZWVlOGFhJyxcbiAgICAgICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICAgICAgcGFsZXZpb2xldHJlZDogJyNkYjcwOTMnLFxuICAgICAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgICAgICBwZXJ1OiAnI2NkODUzZicsXG4gICAgICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICAgICAgcGx1bTogJyNkZGEwZGQnLFxuICAgICAgICBwb3dkZXJibHVlOiAnI2IwZTBlNicsXG4gICAgICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgICAgICByZWJlY2NhcHVycGxlOiAnIzY2MzM5OScsXG4gICAgICAgIHJlZDogJyNmZjAwMDAnLFxuICAgICAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICAgICAgcm95YWxibHVlOiAnIzQxNjllMScsXG4gICAgICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgICAgICBzYW5keWJyb3duOiAnI2Y0YTQ2MCcsXG4gICAgICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgICAgIHNpZW5uYTogJyNhMDUyMmQnLFxuICAgICAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICAgICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgICAgICBzbGF0ZWJsdWU6ICcjNmE1YWNkJyxcbiAgICAgICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgICAgICBzbm93OiAnI2ZmZmFmYScsXG4gICAgICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgICAgIHRhbjogJyNkMmI0OGMnLFxuICAgICAgICB0ZWFsOiAnIzAwODA4MCcsXG4gICAgICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICAgICAgdHJhbnNwYXJlbnQ6ICcjMDAwMDAwMDAnLFxuICAgICAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICAgICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgICAgIHdoZWF0OiAnI2Y1ZGViMycsXG4gICAgICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICAgICAgeWVsbG93OiAnI2ZmZmYwMCcsXG4gICAgICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbiAgICB9LFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgY29sb3IgPSBjb2xvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBoZXggPSBLZXl3b3JkLmNvbG9yc1tjb2xvcl07XG4gICAgICAgIGlmICghaGV4KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gSGV4LnBhcnNlKGhleCk7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCBoZXggPSBIZXguc3RyaW5naWZ5KGNoYW5uZWxzKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIEtleXdvcmQuY29sb3JzKSB7XG4gICAgICAgICAgICBpZiAoS2V5d29yZC5jb2xvcnNbbmFtZV0gPT09IGhleClcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgS2V5d29yZDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgQ2hhbm5lbHNSZXVzYWJsZSBmcm9tICcuLi9jaGFubmVscy9yZXVzYWJsZS5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBSR0IgPSB7XG4gICAgLyogVkFSSUFCTEVTICovXG4gICAgcmU6IC9ecmdiYT9cXChcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZVxcZCspPyglPykpXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZVxcZCspPyglPykpXFxzKj8oPzosfFxccylcXHMqPygtPyg/OlxcZCsoPzpcXC5cXGQrKT98KD86XFwuXFxkKykpKD86ZVxcZCspPyglPykpKD86XFxzKj8oPzosfFxcLylcXHMqP1xcKz8oLT8oPzpcXGQrKD86XFwuXFxkKyk/fCg/OlxcLlxcZCspKSg/OmVcXGQrKT8oJT8pKSk/XFxzKj9cXCkkL2ksXG4gICAgLyogQVBJICovXG4gICAgcGFyc2U6IChjb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBjaGFyQ29kZSA9IGNvbG9yLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmIChjaGFyQ29kZSAhPT0gMTE0ICYmIGNoYXJDb2RlICE9PSA4MilcbiAgICAgICAgICAgIHJldHVybjsgLy8gJ3InLydSJ1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbG9yLm1hdGNoKFJHQi5yZSk7XG4gICAgICAgIGlmICghbWF0Y2gpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IFssIHIsIGlzUmVkUGVyY2VudGFnZSwgZywgaXNHcmVlblBlcmNlbnRhZ2UsIGIsIGlzQmx1ZVBlcmNlbnRhZ2UsIGEsIGlzQWxwaGFQZXJjZW50YWdlXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gQ2hhbm5lbHNSZXVzYWJsZS5zZXQoe1xuICAgICAgICAgICAgcjogXy5jaGFubmVsLmNsYW1wLnIoaXNSZWRQZXJjZW50YWdlID8gcGFyc2VGbG9hdChyKSAqIDIuNTUgOiBwYXJzZUZsb2F0KHIpKSxcbiAgICAgICAgICAgIGc6IF8uY2hhbm5lbC5jbGFtcC5nKGlzR3JlZW5QZXJjZW50YWdlID8gcGFyc2VGbG9hdChnKSAqIDIuNTUgOiBwYXJzZUZsb2F0KGcpKSxcbiAgICAgICAgICAgIGI6IF8uY2hhbm5lbC5jbGFtcC5iKGlzQmx1ZVBlcmNlbnRhZ2UgPyBwYXJzZUZsb2F0KGIpICogMi41NSA6IHBhcnNlRmxvYXQoYikpLFxuICAgICAgICAgICAgYTogYSA/IF8uY2hhbm5lbC5jbGFtcC5hKGlzQWxwaGFQZXJjZW50YWdlID8gcGFyc2VGbG9hdChhKSAvIDEwMCA6IHBhcnNlRmxvYXQoYSkpIDogMVxuICAgICAgICB9LCBjb2xvcik7XG4gICAgfSxcbiAgICBzdHJpbmdpZnk6IChjaGFubmVscykgPT4ge1xuICAgICAgICBjb25zdCB7IHIsIGcsIGIsIGEgfSA9IGNoYW5uZWxzO1xuICAgICAgICBpZiAoYSA8IDEpIHsgLy8gUkdCQVxuICAgICAgICAgICAgcmV0dXJuIGByZ2JhKCR7Xy5sYW5nLnJvdW5kKHIpfSwgJHtfLmxhbmcucm91bmQoZyl9LCAke18ubGFuZy5yb3VuZChiKX0sICR7Xy5sYW5nLnJvdW5kKGEpfSlgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBSR0JcbiAgICAgICAgICAgIHJldHVybiBgcmdiKCR7Xy5sYW5nLnJvdW5kKHIpfSwgJHtfLmxhbmcucm91bmQoZyl9LCAke18ubGFuZy5yb3VuZChiKX0pYDtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IFJHQjtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgXyBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgSGV4IGZyb20gJy4vaGV4LmpzJztcbmltcG9ydCBIU0wgZnJvbSAnLi9oc2wuanMnO1xuaW1wb3J0IEtleXdvcmQgZnJvbSAnLi9rZXl3b3JkLmpzJztcbmltcG9ydCBSR0IgZnJvbSAnLi9yZ2IuanMnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBDb2xvciA9IHtcbiAgICAvKiBWQVJJQUJMRVMgKi9cbiAgICBmb3JtYXQ6IHtcbiAgICAgICAga2V5d29yZDogS2V5d29yZCxcbiAgICAgICAgaGV4OiBIZXgsXG4gICAgICAgIHJnYjogUkdCLFxuICAgICAgICByZ2JhOiBSR0IsXG4gICAgICAgIGhzbDogSFNMLFxuICAgICAgICBoc2xhOiBIU0xcbiAgICB9LFxuICAgIC8qIEFQSSAqL1xuICAgIHBhcnNlOiAoY29sb3IpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0gSGV4LnBhcnNlKGNvbG9yKSB8fCBSR0IucGFyc2UoY29sb3IpIHx8IEhTTC5wYXJzZShjb2xvcikgfHwgS2V5d29yZC5wYXJzZShjb2xvcik7IC8vIENvbG9yIHByb3ZpZGVycyBvcmRlcmVkIHdpdGggcGVyZm9ybWFuY2UgaW4gbWluZFxuICAgICAgICBpZiAoY2hhbm5lbHMpXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiBcIiR7Y29sb3J9XCJgKTtcbiAgICB9LFxuICAgIHN0cmluZ2lmeTogKGNoYW5uZWxzKSA9PiB7XG4gICAgICAgIC8vIFNBU1MgcmV0dXJucyBhIGtleXdvcmQgaWYgcG9zc2libGUsIGJ1dCB3ZSBhdm9pZCBkb2luZyB0aGF0IGFzIGl0J3Mgc2xvd2VyIGFuZCBkb2Vzbid0IHJlYWxseSBhZGQgYW55IHZhbHVlXG4gICAgICAgIGlmICghY2hhbm5lbHMuY2hhbmdlZCAmJiBjaGFubmVscy5jb2xvcilcbiAgICAgICAgICAgIHJldHVybiBjaGFubmVscy5jb2xvcjtcbiAgICAgICAgaWYgKGNoYW5uZWxzLnR5cGUuaXMoVFlQRS5IU0wpIHx8IGNoYW5uZWxzLmRhdGEuciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gSFNMLnN0cmluZ2lmeShjaGFubmVscyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhbm5lbHMuYSA8IDEgfHwgIU51bWJlci5pc0ludGVnZXIoY2hhbm5lbHMucikgfHwgIU51bWJlci5pc0ludGVnZXIoY2hhbm5lbHMuZykgfHwgIU51bWJlci5pc0ludGVnZXIoY2hhbm5lbHMuYikpIHtcbiAgICAgICAgICAgIHJldHVybiBSR0Iuc3RyaW5naWZ5KGNoYW5uZWxzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBIZXguc3RyaW5naWZ5KGNoYW5uZWxzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBjaGFuZ2UgPSAoY29sb3IsIGNoYW5uZWxzKSA9PiB7XG4gICAgY29uc3QgY2ggPSBDb2xvci5wYXJzZShjb2xvcik7XG4gICAgZm9yIChjb25zdCBjIGluIGNoYW5uZWxzKSB7XG4gICAgICAgIGNoW2NdID0gXy5jaGFubmVsLmNsYW1wW2NdKGNoYW5uZWxzW2NdKTtcbiAgICB9XG4gICAgcmV0dXJuIENvbG9yLnN0cmluZ2lmeShjaCk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2U7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENoYW5uZWxzUmV1c2FibGUgZnJvbSAnLi4vY2hhbm5lbHMvcmV1c2FibGUuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbmltcG9ydCBjaGFuZ2UgZnJvbSAnLi9jaGFuZ2UuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgcmdiYSA9IChyLCBnLCBiID0gMCwgYSA9IDEpID0+IHtcbiAgICBpZiAodHlwZW9mIHIgIT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gY2hhbmdlKHIsIHsgYTogZyB9KTtcbiAgICBjb25zdCBjaGFubmVscyA9IENoYW5uZWxzUmV1c2FibGUuc2V0KHtcbiAgICAgICAgcjogXy5jaGFubmVsLmNsYW1wLnIociksXG4gICAgICAgIGc6IF8uY2hhbm5lbC5jbGFtcC5nKGcpLFxuICAgICAgICBiOiBfLmNoYW5uZWwuY2xhbXAuYihiKSxcbiAgICAgICAgYTogXy5jaGFubmVsLmNsYW1wLmEoYSlcbiAgICB9KTtcbiAgICByZXR1cm4gQ29sb3Iuc3RyaW5naWZ5KGNoYW5uZWxzKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IHJnYmE7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGNoYW5uZWwgPSAoY29sb3IsIGNoYW5uZWwpID0+IHtcbiAgICByZXR1cm4gXy5sYW5nLnJvdW5kKENvbG9yLnBhcnNlKGNvbG9yKVtjaGFubmVsXSk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBjaGFubmVsO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBfIGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG4vKiBNQUlOICovXG4vL1NPVVJDRTogaHR0cHM6Ly9wbGFuZXRjYWxjLmNvbS83Nzc5XG5jb25zdCBsdW1pbmFuY2UgPSAoY29sb3IpID0+IHtcbiAgICBjb25zdCB7IHIsIGcsIGIgfSA9IENvbG9yLnBhcnNlKGNvbG9yKTtcbiAgICBjb25zdCBsdW1pbmFuY2UgPSAuMjEyNiAqIF8uY2hhbm5lbC50b0xpbmVhcihyKSArIC43MTUyICogXy5jaGFubmVsLnRvTGluZWFyKGcpICsgLjA3MjIgKiBfLmNoYW5uZWwudG9MaW5lYXIoYik7XG4gICAgcmV0dXJuIF8ubGFuZy5yb3VuZChsdW1pbmFuY2UpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgbHVtaW5hbmNlO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBsdW1pbmFuY2UgZnJvbSAnLi9sdW1pbmFuY2UuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgaXNMaWdodCA9IChjb2xvcikgPT4ge1xuICAgIHJldHVybiBsdW1pbmFuY2UoY29sb3IpID49IC41O1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgaXNMaWdodDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgaXNMaWdodCBmcm9tICcuL2lzX2xpZ2h0LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGlzRGFyayA9IChjb2xvcikgPT4ge1xuICAgIHJldHVybiAhaXNMaWdodChjb2xvcik7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBpc0Rhcms7XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IF8gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL2NvbG9yL2luZGV4LmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGFkanVzdENoYW5uZWwgPSAoY29sb3IsIGNoYW5uZWwsIGFtb3VudCkgPT4ge1xuICAgIGNvbnN0IGNoYW5uZWxzID0gQ29sb3IucGFyc2UoY29sb3IpO1xuICAgIGNvbnN0IGFtb3VudEN1cnJlbnQgPSBjaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCBhbW91bnROZXh0ID0gXy5jaGFubmVsLmNsYW1wW2NoYW5uZWxdKGFtb3VudEN1cnJlbnQgKyBhbW91bnQpO1xuICAgIGlmIChhbW91bnRDdXJyZW50ICE9PSBhbW91bnROZXh0KVxuICAgICAgICBjaGFubmVsc1tjaGFubmVsXSA9IGFtb3VudE5leHQ7XG4gICAgcmV0dXJuIENvbG9yLnN0cmluZ2lmeShjaGFubmVscyk7XG59O1xuLyogRVhQT1JUICovXG5leHBvcnQgZGVmYXVsdCBhZGp1c3RDaGFubmVsO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBhZGp1c3RDaGFubmVsIGZyb20gJy4vYWRqdXN0X2NoYW5uZWwuanMnO1xuLyogTUFJTiAqL1xuY29uc3QgbGlnaHRlbiA9IChjb2xvciwgYW1vdW50KSA9PiB7XG4gICAgcmV0dXJuIGFkanVzdENoYW5uZWwoY29sb3IsICdsJywgYW1vdW50KTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGxpZ2h0ZW47XG4iLAogICAgIi8qIElNUE9SVCAqL1xuaW1wb3J0IGFkanVzdENoYW5uZWwgZnJvbSAnLi9hZGp1c3RfY2hhbm5lbC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBkYXJrZW4gPSAoY29sb3IsIGFtb3VudCkgPT4ge1xuICAgIHJldHVybiBhZGp1c3RDaGFubmVsKGNvbG9yLCAnbCcsIC1hbW91bnQpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgZGFya2VuO1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG5pbXBvcnQgY2hhbmdlIGZyb20gJy4vY2hhbmdlLmpzJztcbi8qIE1BSU4gKi9cbmNvbnN0IGFkanVzdCA9IChjb2xvciwgY2hhbm5lbHMpID0+IHtcbiAgICBjb25zdCBjaCA9IENvbG9yLnBhcnNlKGNvbG9yKTtcbiAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgZm9yIChjb25zdCBjIGluIGNoYW5uZWxzKSB7XG4gICAgICAgIGlmICghY2hhbm5lbHNbY10pXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2hhbmdlc1tjXSA9IGNoW2NdICsgY2hhbm5lbHNbY107XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2UoY29sb3IsIGNoYW5nZXMpO1xufTtcbi8qIEVYUE9SVCAqL1xuZXhwb3J0IGRlZmF1bHQgYWRqdXN0O1xuIiwKICAgICIvKiBJTVBPUlQgKi9cbmltcG9ydCBDb2xvciBmcm9tICcuLi9jb2xvci9pbmRleC5qcyc7XG5pbXBvcnQgcmdiYSBmcm9tICcuL3JnYmEuanMnO1xuLyogTUFJTiAqL1xuLy9TT1VSQ0U6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNzL2RhcnQtc2Fzcy9ibG9iLzc0NTdkMmU5ZTdlNjIzZDk4NDRmZmQwMzdhMDcwY2YzMmQzOWMzNDgvbGliL3NyYy9mdW5jdGlvbnMvY29sb3IuZGFydCNMNzE4LUw3NTZcbmNvbnN0IG1peCA9IChjb2xvcjEsIGNvbG9yMiwgd2VpZ2h0ID0gNTApID0+IHtcbiAgICBjb25zdCB7IHI6IHIxLCBnOiBnMSwgYjogYjEsIGE6IGExIH0gPSBDb2xvci5wYXJzZShjb2xvcjEpO1xuICAgIGNvbnN0IHsgcjogcjIsIGc6IGcyLCBiOiBiMiwgYTogYTIgfSA9IENvbG9yLnBhcnNlKGNvbG9yMik7XG4gICAgY29uc3Qgd2VpZ2h0U2NhbGUgPSB3ZWlnaHQgLyAxMDA7XG4gICAgY29uc3Qgd2VpZ2h0Tm9ybWFsaXplZCA9ICh3ZWlnaHRTY2FsZSAqIDIpIC0gMTtcbiAgICBjb25zdCBhbHBoYURlbHRhID0gYTEgLSBhMjtcbiAgICBjb25zdCB3ZWlnaHQxY29tYmluZWQgPSAoKHdlaWdodE5vcm1hbGl6ZWQgKiBhbHBoYURlbHRhKSA9PT0gLTEpID8gd2VpZ2h0Tm9ybWFsaXplZCA6ICh3ZWlnaHROb3JtYWxpemVkICsgYWxwaGFEZWx0YSkgLyAoMSArIHdlaWdodE5vcm1hbGl6ZWQgKiBhbHBoYURlbHRhKTtcbiAgICBjb25zdCB3ZWlnaHQxID0gKHdlaWdodDFjb21iaW5lZCArIDEpIC8gMjtcbiAgICBjb25zdCB3ZWlnaHQyID0gMSAtIHdlaWdodDE7XG4gICAgY29uc3QgciA9IChyMSAqIHdlaWdodDEpICsgKHIyICogd2VpZ2h0Mik7XG4gICAgY29uc3QgZyA9IChnMSAqIHdlaWdodDEpICsgKGcyICogd2VpZ2h0Mik7XG4gICAgY29uc3QgYiA9IChiMSAqIHdlaWdodDEpICsgKGIyICogd2VpZ2h0Mik7XG4gICAgY29uc3QgYSA9IChhMSAqIHdlaWdodFNjYWxlKSArIChhMiAqICgxIC0gd2VpZ2h0U2NhbGUpKTtcbiAgICByZXR1cm4gcmdiYShyLCBnLCBiLCBhKTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IG1peDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vY29sb3IvaW5kZXguanMnO1xuaW1wb3J0IG1peCBmcm9tICcuL21peC5qcyc7XG4vKiBNQUlOICovXG5jb25zdCBpbnZlcnQgPSAoY29sb3IsIHdlaWdodCA9IDEwMCkgPT4ge1xuICAgIGNvbnN0IGludmVyc2UgPSBDb2xvci5wYXJzZShjb2xvcik7XG4gICAgaW52ZXJzZS5yID0gMjU1IC0gaW52ZXJzZS5yO1xuICAgIGludmVyc2UuZyA9IDI1NSAtIGludmVyc2UuZztcbiAgICBpbnZlcnNlLmIgPSAyNTUgLSBpbnZlcnNlLmI7XG4gICAgcmV0dXJuIG1peChpbnZlcnNlLCBjb2xvciwgd2VpZ2h0KTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGludmVydDtcbiIsCiAgICAiLyogSU1QT1JUICovXG5pbXBvcnQgaGV4IGZyb20gJy4vcmdiYS5qcyc7IC8vIEFsaWFzXG5pbXBvcnQgcmdiIGZyb20gJy4vcmdiYS5qcyc7IC8vIEFsaWFzXG5pbXBvcnQgcmdiYSBmcm9tICcuL3JnYmEuanMnO1xuaW1wb3J0IGhzbCBmcm9tICcuL2hzbGEuanMnOyAvLyBBbGlhc1xuaW1wb3J0IGhzbGEgZnJvbSAnLi9oc2xhLmpzJztcbmltcG9ydCB0b0tleXdvcmQgZnJvbSAnLi90b19rZXl3b3JkLmpzJztcbmltcG9ydCB0b0hleCBmcm9tICcuL3RvX2hleC5qcyc7XG5pbXBvcnQgdG9SZ2JhIGZyb20gJy4vdG9fcmdiYS5qcyc7XG5pbXBvcnQgdG9Ic2xhIGZyb20gJy4vdG9faHNsYS5qcyc7XG5pbXBvcnQgY2hhbm5lbCBmcm9tICcuL2NoYW5uZWwuanMnO1xuaW1wb3J0IHJlZCBmcm9tICcuL3JlZC5qcyc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi9ncmVlbi5qcyc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuL2JsdWUuanMnO1xuaW1wb3J0IGh1ZSBmcm9tICcuL2h1ZS5qcyc7XG5pbXBvcnQgc2F0dXJhdGlvbiBmcm9tICcuL3NhdHVyYXRpb24uanMnO1xuaW1wb3J0IGxpZ2h0bmVzcyBmcm9tICcuL2xpZ2h0bmVzcy5qcyc7XG5pbXBvcnQgYWxwaGEgZnJvbSAnLi9hbHBoYS5qcyc7XG5pbXBvcnQgb3BhY2l0eSBmcm9tICcuL2FscGhhLmpzJzsgLy8gQWxpYXNcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL2NvbnRyYXN0LmpzJztcbmltcG9ydCBsdW1pbmFuY2UgZnJvbSAnLi9sdW1pbmFuY2UuanMnO1xuaW1wb3J0IGlzRGFyayBmcm9tICcuL2lzX2RhcmsuanMnO1xuaW1wb3J0IGlzTGlnaHQgZnJvbSAnLi9pc19saWdodC5qcyc7XG5pbXBvcnQgaXNUcmFuc3BhcmVudCBmcm9tICcuL2lzX3RyYW5zcGFyZW50LmpzJztcbmltcG9ydCBpc1ZhbGlkIGZyb20gJy4vaXNfdmFsaWQuanMnO1xuaW1wb3J0IHNhdHVyYXRlIGZyb20gJy4vc2F0dXJhdGUuanMnO1xuaW1wb3J0IGRlc2F0dXJhdGUgZnJvbSAnLi9kZXNhdHVyYXRlLmpzJztcbmltcG9ydCBsaWdodGVuIGZyb20gJy4vbGlnaHRlbi5qcyc7XG5pbXBvcnQgZGFya2VuIGZyb20gJy4vZGFya2VuLmpzJztcbmltcG9ydCBvcGFjaWZ5IGZyb20gJy4vb3BhY2lmeS5qcyc7XG5pbXBvcnQgZmFkZUluIGZyb20gJy4vb3BhY2lmeS5qcyc7IC8vIEFsaWFzXG5pbXBvcnQgdHJhbnNwYXJlbnRpemUgZnJvbSAnLi90cmFuc3BhcmVudGl6ZS5qcyc7XG5pbXBvcnQgZmFkZU91dCBmcm9tICcuL3RyYW5zcGFyZW50aXplLmpzJzsgLy8gQWxpYXNcbmltcG9ydCBjb21wbGVtZW50IGZyb20gJy4vY29tcGxlbWVudC5qcyc7XG5pbXBvcnQgZ3JheXNjYWxlIGZyb20gJy4vZ3JheXNjYWxlLmpzJztcbmltcG9ydCBhZGp1c3QgZnJvbSAnLi9hZGp1c3QuanMnO1xuaW1wb3J0IGNoYW5nZSBmcm9tICcuL2NoYW5nZS5qcyc7XG5pbXBvcnQgaW52ZXJ0IGZyb20gJy4vaW52ZXJ0LmpzJztcbmltcG9ydCBtaXggZnJvbSAnLi9taXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4vc2NhbGUuanMnO1xuLyogRVhQT1JUICovXG5leHBvcnQgeyBcbi8qIENSRUFURSAqL1xuaGV4LCByZ2IsIHJnYmEsIGhzbCwgaHNsYSwgXG4vKiBDT05WRVJUICovXG50b0tleXdvcmQsIHRvSGV4LCB0b1JnYmEsIHRvSHNsYSwgXG4vKiBHRVQgLSBDSEFOTkVMICovXG5jaGFubmVsLCByZWQsIGdyZWVuLCBibHVlLCBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEsIG9wYWNpdHksIFxuLyogR0VUIC0gTU9SRSAqL1xuY29udHJhc3QsIGx1bWluYW5jZSwgaXNEYXJrLCBpc0xpZ2h0LCBpc1RyYW5zcGFyZW50LCBpc1ZhbGlkLCBcbi8qIEVESVQgLSBDSEFOTkVMICovXG5zYXR1cmF0ZSwgZGVzYXR1cmF0ZSwgbGlnaHRlbiwgZGFya2VuLCBvcGFjaWZ5LCBmYWRlSW4sIHRyYW5zcGFyZW50aXplLCBmYWRlT3V0LCBjb21wbGVtZW50LCBncmF5c2NhbGUsIFxuLyogRURJVCAtIE1PUkUgKi9cbmFkanVzdCwgY2hhbmdlLCBpbnZlcnQsIG1peCwgc2NhbGUgfTtcbiIsCiAgICAiLyogRVhQT1JUICovXG5leHBvcnQgKiBmcm9tICcuL21ldGhvZHMvaW5kZXguanMnO1xuIiwKICAgICIvKiEgQGxpY2Vuc2UgRE9NUHVyaWZ5IDMuMS42IHwgKGMpIEN1cmU1MyBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgUmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlIDIuMCBhbmQgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgfCBnaXRodWIuY29tL2N1cmU1My9ET01QdXJpZnkvYmxvYi8zLjEuNi9MSUNFTlNFICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkRPTVB1cmlmeSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgY29uc3Qge1xuICAgIGVudHJpZXMsXG4gICAgc2V0UHJvdG90eXBlT2YsXG4gICAgaXNGcm96ZW4sXG4gICAgZ2V0UHJvdG90eXBlT2YsXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG4gIH0gPSBPYmplY3Q7XG4gIGxldCB7XG4gICAgZnJlZXplLFxuICAgIHNlYWwsXG4gICAgY3JlYXRlXG4gIH0gPSBPYmplY3Q7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xuICBsZXQge1xuICAgIGFwcGx5LFxuICAgIGNvbnN0cnVjdFxuICB9ID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3Q7XG4gIGlmICghZnJlZXplKSB7XG4gICAgZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgaWYgKCFzZWFsKSB7XG4gICAgc2VhbCA9IGZ1bmN0aW9uIHNlYWwoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBpZiAoIWFwcGx5KSB7XG4gICAgYXBwbHkgPSBmdW5jdGlvbiBhcHBseShmdW4sIHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bi5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgIH07XG4gIH1cbiAgaWYgKCFjb25zdHJ1Y3QpIHtcbiAgICBjb25zdHJ1Y3QgPSBmdW5jdGlvbiBjb25zdHJ1Y3QoRnVuYywgYXJncykge1xuICAgICAgcmV0dXJuIG5ldyBGdW5jKC4uLmFyZ3MpO1xuICAgIH07XG4gIH1cbiAgY29uc3QgYXJyYXlGb3JFYWNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCk7XG4gIGNvbnN0IGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbiAgY29uc3QgYXJyYXlQdXNoID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gIGNvbnN0IHN0cmluZ1RvTG93ZXJDYXNlID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKTtcbiAgY29uc3Qgc3RyaW5nVG9TdHJpbmcgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpO1xuICBjb25zdCBzdHJpbmdNYXRjaCA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCk7XG4gIGNvbnN0IHN0cmluZ1JlcGxhY2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG4gIGNvbnN0IHN0cmluZ0luZGV4T2YgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZik7XG4gIGNvbnN0IHN0cmluZ1RyaW0gPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG4gIGNvbnN0IG9iamVjdEhhc093blByb3BlcnR5ID0gdW5hcHBseShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiAgY29uc3QgcmVnRXhwVGVzdCA9IHVuYXBwbHkoUmVnRXhwLnByb3RvdHlwZS50ZXN0KTtcbiAgY29uc3QgdHlwZUVycm9yQ3JlYXRlID0gdW5jb25zdHJ1Y3QoVHlwZUVycm9yKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWVkIHRoaXNBcmcgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBmdW5jdGlvbiB0byBiZSB3cmFwcGVkIGFuZCBjYWxsZWQuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmllZCB0aGlzQXJnIGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiB1bmFwcGx5KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXNBcmcpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGZ1bmN0aW9uIHRoYXQgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gY29uc3RydWN0b3IgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGJlIHdyYXBwZWQgYW5kIGNhbGxlZC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIHVuY29uc3RydWN0KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoZnVuYywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJvcGVydGllcyB0byBhIGxvb2t1cCB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IC0gVGhlIHNldCB0byB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGFkZGVkLlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSAtIFRoZSBhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIHRvIGJlIGFkZGVkIHRvIHRoZSBzZXQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybUNhc2VGdW5jIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBjYXNlIG9mIGVhY2ggZWxlbWVudCBiZWZvcmUgYWRkaW5nIHRvIHRoZSBzZXQuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtb2RpZmllZCBzZXQgd2l0aCBhZGRlZCBlbGVtZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZFRvU2V0KHNldCwgYXJyYXkpIHtcbiAgICBsZXQgdHJhbnNmb3JtQ2FzZUZ1bmMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgLy8gTWFrZSAnaW4nIGFuZCB0cnV0aHkgY2hlY2tzIGxpa2UgQm9vbGVhbihzZXQuY29uc3RydWN0b3IpXG4gICAgICAvLyBpbmRlcGVuZGVudCBvZiBhbnkgcHJvcGVydGllcyBkZWZpbmVkIG9uIE9iamVjdC5wcm90b3R5cGUuXG4gICAgICAvLyBQcmV2ZW50IHByb3RvdHlwZSBzZXR0ZXJzIGZyb20gaW50ZXJjZXB0aW5nIHNldCBhcyBhIHRoaXMgdmFsdWUuXG4gICAgICBzZXRQcm90b3R5cGVPZihzZXQsIG51bGwpO1xuICAgIH1cbiAgICBsZXQgbCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICBsZXQgZWxlbWVudCA9IGFycmF5W2xdO1xuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsY0VsZW1lbnQgPSB0cmFuc2Zvcm1DYXNlRnVuYyhlbGVtZW50KTtcbiAgICAgICAgaWYgKGxjRWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgICAgICAgIC8vIENvbmZpZyBwcmVzZXRzIChlLmcuIHRhZ3MuanMsIGF0dHJzLmpzKSBhcmUgaW1tdXRhYmxlLlxuICAgICAgICAgIGlmICghaXNGcm96ZW4oYXJyYXkpKSB7XG4gICAgICAgICAgICBhcnJheVtsXSA9IGxjRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudCA9IGxjRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBhbiBhcnJheSB0byBoYXJkZW4gYWdhaW5zdCBDU1BQXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gVGhlIGFycmF5IHRvIGJlIGNsZWFuZWQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gVGhlIGNsZWFuZWQgdmVyc2lvbiBvZiB0aGUgYXJyYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFuQXJyYXkoYXJyYXkpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBpc1Byb3BlcnR5RXhpc3QgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShhcnJheSwgaW5kZXgpO1xuICAgICAgaWYgKCFpc1Byb3BlcnR5RXhpc3QpIHtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYWxsb3cgY2xvbmUgYW4gb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGJlIGNsb25lZC5cbiAgICogQHJldHVybnMge09iamVjdH0gQSBuZXcgb2JqZWN0IHRoYXQgY29waWVzIHRoZSBvcmlnaW5hbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsb25lKG9iamVjdCkge1xuICAgIGNvbnN0IG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVdIG9mIGVudHJpZXMob2JqZWN0KSkge1xuICAgICAgY29uc3QgaXNQcm9wZXJ0eUV4aXN0ID0gb2JqZWN0SGFzT3duUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoaXNQcm9wZXJ0eUV4aXN0KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBjbGVhbkFycmF5KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gY2xvbmUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3T2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGlmIHRoZSBwcm9wIGlzIGZ1bmN0aW9uIG9yIGdldHRlciBhbmQgYmVoYXZlcyBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgdG8gbG9vayB1cCB0aGUgZ2V0dGVyIGZ1bmN0aW9uIGluIGl0cyBwcm90b3R5cGUgY2hhaW4uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGdldHRlciBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgZ2V0dGVyIGZ1bmN0aW9uIGZvdW5kIGluIHRoZSBwcm90b3R5cGUgY2hhaW4gb3IgYSBmYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGxvb2t1cEdldHRlcihvYmplY3QsIHByb3ApIHtcbiAgICB3aGlsZSAob2JqZWN0ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBkZXNjID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgICBpZiAoZGVzYykge1xuICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVuYXBwbHkoZGVzYy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZhbGxiYWNrVmFsdWUoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gIH1cblxuICBjb25zdCBodG1sJDEgPSBmcmVlemUoWydhJywgJ2FiYnInLCAnYWNyb255bScsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2JkaScsICdiZG8nLCAnYmlnJywgJ2JsaW5rJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnY29udGVudCcsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RkJywgJ2RlY29yYXRvcicsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZWxlbWVudCcsICdlbScsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb250JywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2knLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGVyJywgJ25hdicsICdub2JyJywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NoYWRvdycsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhY2VyJywgJ3NwYW4nLCAnc3RyaWtlJywgJ3N0cm9uZycsICdzdHlsZScsICdzdWInLCAnc3VtbWFyeScsICdzdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGltZScsICd0cicsICd0cmFjaycsICd0dCcsICd1JywgJ3VsJywgJ3ZhcicsICd2aWRlbycsICd3YnInXSk7XG5cbiAgLy8gU1ZHXG4gIGNvbnN0IHN2ZyQxID0gZnJlZXplKFsnc3ZnJywgJ2EnLCAnYWx0Z2x5cGgnLCAnYWx0Z2x5cGhkZWYnLCAnYWx0Z2x5cGhpdGVtJywgJ2FuaW1hdGVjb2xvcicsICdhbmltYXRlbW90aW9uJywgJ2FuaW1hdGV0cmFuc2Zvcm0nLCAnY2lyY2xlJywgJ2NsaXBwYXRoJywgJ2RlZnMnLCAnZGVzYycsICdlbGxpcHNlJywgJ2ZpbHRlcicsICdmb250JywgJ2cnLCAnZ2x5cGgnLCAnZ2x5cGhyZWYnLCAnaGtlcm4nLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJncmFkaWVudCcsICdtYXJrZXInLCAnbWFzaycsICdtZXRhZGF0YScsICdtcGF0aCcsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxncmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAnc3R5bGUnLCAnc3dpdGNoJywgJ3N5bWJvbCcsICd0ZXh0JywgJ3RleHRwYXRoJywgJ3RpdGxlJywgJ3RyZWYnLCAndHNwYW4nLCAndmlldycsICd2a2VybiddKTtcbiAgY29uc3Qgc3ZnRmlsdGVycyA9IGZyZWV6ZShbJ2ZlQmxlbmQnLCAnZmVDb2xvck1hdHJpeCcsICdmZUNvbXBvbmVudFRyYW5zZmVyJywgJ2ZlQ29tcG9zaXRlJywgJ2ZlQ29udm9sdmVNYXRyaXgnLCAnZmVEaWZmdXNlTGlnaHRpbmcnLCAnZmVEaXNwbGFjZW1lbnRNYXAnLCAnZmVEaXN0YW50TGlnaHQnLCAnZmVEcm9wU2hhZG93JywgJ2ZlRmxvb2QnLCAnZmVGdW5jQScsICdmZUZ1bmNCJywgJ2ZlRnVuY0cnLCAnZmVGdW5jUicsICdmZUdhdXNzaWFuQmx1cicsICdmZUltYWdlJywgJ2ZlTWVyZ2UnLCAnZmVNZXJnZU5vZGUnLCAnZmVNb3JwaG9sb2d5JywgJ2ZlT2Zmc2V0JywgJ2ZlUG9pbnRMaWdodCcsICdmZVNwZWN1bGFyTGlnaHRpbmcnLCAnZmVTcG90TGlnaHQnLCAnZmVUaWxlJywgJ2ZlVHVyYnVsZW5jZSddKTtcblxuICAvLyBMaXN0IG9mIFNWRyBlbGVtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuXG4gIC8vIFdlIHN0aWxsIG5lZWQgdG8ga25vdyB0aGVtIHNvIHRoYXQgd2UgY2FuIGRvIG5hbWVzcGFjZVxuICAvLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbiAgLy8gYWxsb3ctbGlzdC5cbiAgY29uc3Qgc3ZnRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ2FuaW1hdGUnLCAnY29sb3ItcHJvZmlsZScsICdjdXJzb3InLCAnZGlzY2FyZCcsICdmb250LWZhY2UnLCAnZm9udC1mYWNlLWZvcm1hdCcsICdmb250LWZhY2UtbmFtZScsICdmb250LWZhY2Utc3JjJywgJ2ZvbnQtZmFjZS11cmknLCAnZm9yZWlnbm9iamVjdCcsICdoYXRjaCcsICdoYXRjaHBhdGgnLCAnbWVzaCcsICdtZXNoZ3JhZGllbnQnLCAnbWVzaHBhdGNoJywgJ21lc2hyb3cnLCAnbWlzc2luZy1nbHlwaCcsICdzY3JpcHQnLCAnc2V0JywgJ3NvbGlkY29sb3InLCAndW5rbm93bicsICd1c2UnXSk7XG4gIGNvbnN0IG1hdGhNbCQxID0gZnJlZXplKFsnbWF0aCcsICdtZW5jbG9zZScsICdtZXJyb3InLCAnbWZlbmNlZCcsICdtZnJhYycsICdtZ2x5cGgnLCAnbWknLCAnbWxhYmVsZWR0cicsICdtbXVsdGlzY3JpcHRzJywgJ21uJywgJ21vJywgJ21vdmVyJywgJ21wYWRkZWQnLCAnbXBoYW50b20nLCAnbXJvb3QnLCAnbXJvdycsICdtcycsICdtc3BhY2UnLCAnbXNxcnQnLCAnbXN0eWxlJywgJ21zdWInLCAnbXN1cCcsICdtc3Vic3VwJywgJ210YWJsZScsICdtdGQnLCAnbXRleHQnLCAnbXRyJywgJ211bmRlcicsICdtdW5kZXJvdmVyJywgJ21wcmVzY3JpcHRzJ10pO1xuXG4gIC8vIFNpbWlsYXJseSB0byBTVkcsIHdlIHdhbnQgdG8ga25vdyBhbGwgTWF0aE1MIGVsZW1lbnRzLFxuICAvLyBldmVuIHRob3NlIHRoYXQgd2UgZGlzYWxsb3cgYnkgZGVmYXVsdC5cbiAgY29uc3QgbWF0aE1sRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ21hY3Rpb24nLCAnbWFsaWduZ3JvdXAnLCAnbWFsaWdubWFyaycsICdtbG9uZ2RpdicsICdtc2NhcnJpZXMnLCAnbXNjYXJyeScsICdtc2dyb3VwJywgJ21zdGFjaycsICdtc2xpbmUnLCAnbXNyb3cnLCAnc2VtYW50aWNzJywgJ2Fubm90YXRpb24nLCAnYW5ub3RhdGlvbi14bWwnLCAnbXByZXNjcmlwdHMnLCAnbm9uZSddKTtcbiAgY29uc3QgdGV4dCA9IGZyZWV6ZShbJyN0ZXh0J10pO1xuXG4gIGNvbnN0IGh0bWwgPSBmcmVlemUoWydhY2NlcHQnLCAnYWN0aW9uJywgJ2FsaWduJywgJ2FsdCcsICdhdXRvY2FwaXRhbGl6ZScsICdhdXRvY29tcGxldGUnLCAnYXV0b3BpY3R1cmVpbnBpY3R1cmUnLCAnYXV0b3BsYXknLCAnYmFja2dyb3VuZCcsICdiZ2NvbG9yJywgJ2JvcmRlcicsICdjYXB0dXJlJywgJ2NlbGxwYWRkaW5nJywgJ2NlbGxzcGFjaW5nJywgJ2NoZWNrZWQnLCAnY2l0ZScsICdjbGFzcycsICdjbGVhcicsICdjb2xvcicsICdjb2xzJywgJ2NvbHNwYW4nLCAnY29udHJvbHMnLCAnY29udHJvbHNsaXN0JywgJ2Nvb3JkcycsICdjcm9zc29yaWdpbicsICdkYXRldGltZScsICdkZWNvZGluZycsICdkZWZhdWx0JywgJ2RpcicsICdkaXNhYmxlZCcsICdkaXNhYmxlcGljdHVyZWlucGljdHVyZScsICdkaXNhYmxlcmVtb3RlcGxheWJhY2snLCAnZG93bmxvYWQnLCAnZHJhZ2dhYmxlJywgJ2VuY3R5cGUnLCAnZW50ZXJrZXloaW50JywgJ2ZhY2UnLCAnZm9yJywgJ2hlYWRlcnMnLCAnaGVpZ2h0JywgJ2hpZGRlbicsICdoaWdoJywgJ2hyZWYnLCAnaHJlZmxhbmcnLCAnaWQnLCAnaW5wdXRtb2RlJywgJ2ludGVncml0eScsICdpc21hcCcsICdraW5kJywgJ2xhYmVsJywgJ2xhbmcnLCAnbGlzdCcsICdsb2FkaW5nJywgJ2xvb3AnLCAnbG93JywgJ21heCcsICdtYXhsZW5ndGgnLCAnbWVkaWEnLCAnbWV0aG9kJywgJ21pbicsICdtaW5sZW5ndGgnLCAnbXVsdGlwbGUnLCAnbXV0ZWQnLCAnbmFtZScsICdub25jZScsICdub3NoYWRlJywgJ25vdmFsaWRhdGUnLCAnbm93cmFwJywgJ29wZW4nLCAnb3B0aW11bScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3BsYXlzaW5saW5lJywgJ3BvcG92ZXInLCAncG9wb3ZlcnRhcmdldCcsICdwb3BvdmVydGFyZ2V0YWN0aW9uJywgJ3Bvc3RlcicsICdwcmVsb2FkJywgJ3B1YmRhdGUnLCAncmFkaW9ncm91cCcsICdyZWFkb25seScsICdyZWwnLCAncmVxdWlyZWQnLCAncmV2JywgJ3JldmVyc2VkJywgJ3JvbGUnLCAncm93cycsICdyb3dzcGFuJywgJ3NwZWxsY2hlY2snLCAnc2NvcGUnLCAnc2VsZWN0ZWQnLCAnc2hhcGUnLCAnc2l6ZScsICdzaXplcycsICdzcGFuJywgJ3NyY2xhbmcnLCAnc3RhcnQnLCAnc3JjJywgJ3NyY3NldCcsICdzdGVwJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFiaW5kZXgnLCAndGl0bGUnLCAndHJhbnNsYXRlJywgJ3R5cGUnLCAndXNlbWFwJywgJ3ZhbGlnbicsICd2YWx1ZScsICd3aWR0aCcsICd3cmFwJywgJ3htbG5zJywgJ3Nsb3QnXSk7XG4gIGNvbnN0IHN2ZyA9IGZyZWV6ZShbJ2FjY2VudC1oZWlnaHQnLCAnYWNjdW11bGF0ZScsICdhZGRpdGl2ZScsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXNjZW50JywgJ2F0dHJpYnV0ZW5hbWUnLCAnYXR0cmlidXRldHlwZScsICdhemltdXRoJywgJ2Jhc2VmcmVxdWVuY3knLCAnYmFzZWxpbmUtc2hpZnQnLCAnYmVnaW4nLCAnYmlhcycsICdieScsICdjbGFzcycsICdjbGlwJywgJ2NsaXBwYXRodW5pdHMnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvcicsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdjeCcsICdjeScsICdkJywgJ2R4JywgJ2R5JywgJ2RpZmZ1c2Vjb25zdGFudCcsICdkaXJlY3Rpb24nLCAnZGlzcGxheScsICdkaXZpc29yJywgJ2R1cicsICdlZGdlbW9kZScsICdlbGV2YXRpb24nLCAnZW5kJywgJ2ZpbGwnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmaWx0ZXInLCAnZmlsdGVydW5pdHMnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZngnLCAnZnknLCAnZzEnLCAnZzInLCAnZ2x5cGgtbmFtZScsICdnbHlwaHJlZicsICdncmFkaWVudHVuaXRzJywgJ2dyYWRpZW50dHJhbnNmb3JtJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2ltYWdlLXJlbmRlcmluZycsICdpbicsICdpbjInLCAnaycsICdrMScsICdrMicsICdrMycsICdrNCcsICdrZXJuaW5nJywgJ2tleXBvaW50cycsICdrZXlzcGxpbmVzJywgJ2tleXRpbWVzJywgJ2xhbmcnLCAnbGVuZ3RoYWRqdXN0JywgJ2xldHRlci1zcGFjaW5nJywgJ2tlcm5lbG1hdHJpeCcsICdrZXJuZWx1bml0bGVuZ3RoJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ2xvY2FsJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnbWFya2VyaGVpZ2h0JywgJ21hcmtlcnVuaXRzJywgJ21hcmtlcndpZHRoJywgJ21hc2tjb250ZW50dW5pdHMnLCAnbWFza3VuaXRzJywgJ21heCcsICdtYXNrJywgJ21lZGlhJywgJ21ldGhvZCcsICdtb2RlJywgJ21pbicsICduYW1lJywgJ251bW9jdGF2ZXMnLCAnb2Zmc2V0JywgJ29wZXJhdG9yJywgJ29wYWNpdHknLCAnb3JkZXInLCAnb3JpZW50JywgJ29yaWVudGF0aW9uJywgJ29yaWdpbicsICdvdmVyZmxvdycsICdwYWludC1vcmRlcicsICdwYXRoJywgJ3BhdGhsZW5ndGgnLCAncGF0dGVybmNvbnRlbnR1bml0cycsICdwYXR0ZXJudHJhbnNmb3JtJywgJ3BhdHRlcm51bml0cycsICdwb2ludHMnLCAncHJlc2VydmVhbHBoYScsICdwcmVzZXJ2ZWFzcGVjdHJhdGlvJywgJ3ByaW1pdGl2ZXVuaXRzJywgJ3InLCAncngnLCAncnknLCAncmFkaXVzJywgJ3JlZngnLCAncmVmeScsICdyZXBlYXRjb3VudCcsICdyZXBlYXRkdXInLCAncmVzdGFydCcsICdyZXN1bHQnLCAncm90YXRlJywgJ3NjYWxlJywgJ3NlZWQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3NwZWN1bGFyY29uc3RhbnQnLCAnc3BlY3VsYXJleHBvbmVudCcsICdzcHJlYWRtZXRob2QnLCAnc3RhcnRvZmZzZXQnLCAnc3RkZGV2aWF0aW9uJywgJ3N0aXRjaHRpbGVzJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZScsICdzdHJva2Utd2lkdGgnLCAnc3R5bGUnLCAnc3VyZmFjZXNjYWxlJywgJ3N5c3RlbWxhbmd1YWdlJywgJ3RhYmluZGV4JywgJ3RhcmdldHgnLCAndGFyZ2V0eScsICd0cmFuc2Zvcm0nLCAndHJhbnNmb3JtLW9yaWdpbicsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndGV4dGxlbmd0aCcsICd0eXBlJywgJ3UxJywgJ3UyJywgJ3VuaWNvZGUnLCAndmFsdWVzJywgJ3ZpZXdib3gnLCAndmlzaWJpbGl0eScsICd2ZXJzaW9uJywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dpZHRoJywgJ3dvcmQtc3BhY2luZycsICd3cmFwJywgJ3dyaXRpbmctbW9kZScsICd4Y2hhbm5lbHNlbGVjdG9yJywgJ3ljaGFubmVsc2VsZWN0b3InLCAneCcsICd4MScsICd4MicsICd4bWxucycsICd5JywgJ3kxJywgJ3kyJywgJ3onLCAnem9vbWFuZHBhbiddKTtcbiAgY29uc3QgbWF0aE1sID0gZnJlZXplKFsnYWNjZW50JywgJ2FjY2VudHVuZGVyJywgJ2FsaWduJywgJ2JldmVsbGVkJywgJ2Nsb3NlJywgJ2NvbHVtbnNhbGlnbicsICdjb2x1bW5saW5lcycsICdjb2x1bW5zcGFuJywgJ2Rlbm9tYWxpZ24nLCAnZGVwdGgnLCAnZGlyJywgJ2Rpc3BsYXknLCAnZGlzcGxheXN0eWxlJywgJ2VuY29kaW5nJywgJ2ZlbmNlJywgJ2ZyYW1lJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2xhcmdlb3AnLCAnbGVuZ3RoJywgJ2xpbmV0aGlja25lc3MnLCAnbHNwYWNlJywgJ2xxdW90ZScsICdtYXRoYmFja2dyb3VuZCcsICdtYXRoY29sb3InLCAnbWF0aHNpemUnLCAnbWF0aHZhcmlhbnQnLCAnbWF4c2l6ZScsICdtaW5zaXplJywgJ21vdmFibGVsaW1pdHMnLCAnbm90YXRpb24nLCAnbnVtYWxpZ24nLCAnb3BlbicsICdyb3dhbGlnbicsICdyb3dsaW5lcycsICdyb3dzcGFjaW5nJywgJ3Jvd3NwYW4nLCAncnNwYWNlJywgJ3JxdW90ZScsICdzY3JpcHRsZXZlbCcsICdzY3JpcHRtaW5zaXplJywgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJywgJ3NlbGVjdGlvbicsICdzZXBhcmF0b3InLCAnc2VwYXJhdG9ycycsICdzdHJldGNoeScsICdzdWJzY3JpcHRzaGlmdCcsICdzdXBzY3JpcHRzaGlmdCcsICdzeW1tZXRyaWMnLCAndm9mZnNldCcsICd3aWR0aCcsICd4bWxucyddKTtcbiAgY29uc3QgeG1sID0gZnJlZXplKFsneGxpbms6aHJlZicsICd4bWw6aWQnLCAneGxpbms6dGl0bGUnLCAneG1sOnNwYWNlJywgJ3htbG5zOnhsaW5rJ10pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuICBjb25zdCBNVVNUQUNIRV9FWFBSID0gc2VhbCgvXFx7XFx7W1xcd1xcV10qfFtcXHdcXFddKlxcfVxcfS9nbSk7IC8vIFNwZWNpZnkgdGVtcGxhdGUgZGV0ZWN0aW9uIHJlZ2V4IGZvciBTQUZFX0ZPUl9URU1QTEFURVMgbW9kZVxuICBjb25zdCBFUkJfRVhQUiA9IHNlYWwoLzwlW1xcd1xcV10qfFtcXHdcXFddKiU+L2dtKTtcbiAgY29uc3QgVE1QTElUX0VYUFIgPSBzZWFsKC9cXCR7W1xcd1xcV10qfS9nbSk7XG4gIGNvbnN0IERBVEFfQVRUUiA9IHNlYWwoL15kYXRhLVtcXC1cXHcuXFx1MDBCNy1cXHVGRkZGXS8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIGNvbnN0IEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICBjb25zdCBJU19BTExPV0VEX1VSSSA9IHNlYWwoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlxcLV0rKD86W15hLXorLlxcLTpdfCQpKS9pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgKTtcbiAgY29uc3QgSVNfU0NSSVBUX09SX0RBVEEgPSBzZWFsKC9eKD86XFx3K3NjcmlwdHxkYXRhKTovaSk7XG4gIGNvbnN0IEFUVFJfV0hJVEVTUEFDRSA9IHNlYWwoL1tcXHUwMDAwLVxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwLVxcdTIwMjlcXHUyMDVGXFx1MzAwMF0vZyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgKTtcbiAgY29uc3QgRE9DVFlQRV9OQU1FID0gc2VhbCgvXmh0bWwkL2kpO1xuICBjb25zdCBDVVNUT01fRUxFTUVOVCA9IHNlYWwoL15bYS16XVsuXFx3XSooLVsuXFx3XSspKyQvaSk7XG5cbiAgdmFyIEVYUFJFU1NJT05TID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBNVVNUQUNIRV9FWFBSOiBNVVNUQUNIRV9FWFBSLFxuICAgIEVSQl9FWFBSOiBFUkJfRVhQUixcbiAgICBUTVBMSVRfRVhQUjogVE1QTElUX0VYUFIsXG4gICAgREFUQV9BVFRSOiBEQVRBX0FUVFIsXG4gICAgQVJJQV9BVFRSOiBBUklBX0FUVFIsXG4gICAgSVNfQUxMT1dFRF9VUkk6IElTX0FMTE9XRURfVVJJLFxuICAgIElTX1NDUklQVF9PUl9EQVRBOiBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICBBVFRSX1dISVRFU1BBQ0U6IEFUVFJfV0hJVEVTUEFDRSxcbiAgICBET0NUWVBFX05BTUU6IERPQ1RZUEVfTkFNRSxcbiAgICBDVVNUT01fRUxFTUVOVDogQ1VTVE9NX0VMRU1FTlRcbiAgfSk7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9kZVR5cGVcbiAgY29uc3QgTk9ERV9UWVBFID0ge1xuICAgIGVsZW1lbnQ6IDEsXG4gICAgYXR0cmlidXRlOiAyLFxuICAgIHRleHQ6IDMsXG4gICAgY2RhdGFTZWN0aW9uOiA0LFxuICAgIGVudGl0eVJlZmVyZW5jZTogNSxcbiAgICAvLyBEZXByZWNhdGVkXG4gICAgZW50aXR5Tm9kZTogNixcbiAgICAvLyBEZXByZWNhdGVkXG4gICAgcHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjogNyxcbiAgICBjb21tZW50OiA4LFxuICAgIGRvY3VtZW50OiA5LFxuICAgIGRvY3VtZW50VHlwZTogMTAsXG4gICAgZG9jdW1lbnRGcmFnbWVudDogMTEsXG4gICAgbm90YXRpb246IDEyIC8vIERlcHJlY2F0ZWRcbiAgfTtcbiAgY29uc3QgZ2V0R2xvYmFsID0gZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuby1vcCBwb2xpY3kgZm9yIGludGVybmFsIHVzZSBvbmx5LlxuICAgKiBEb24ndCBleHBvcnQgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIHRoaXMgbW9kdWxlIVxuICAgKiBAcGFyYW0ge1RydXN0ZWRUeXBlUG9saWN5RmFjdG9yeX0gdHJ1c3RlZFR5cGVzIFRoZSBwb2xpY3kgZmFjdG9yeS5cbiAgICogQHBhcmFtIHtIVE1MU2NyaXB0RWxlbWVudH0gcHVyaWZ5SG9zdEVsZW1lbnQgVGhlIFNjcmlwdCBlbGVtZW50IHVzZWQgdG8gbG9hZCBET01QdXJpZnkgKHRvIGRldGVybWluZSBwb2xpY3kgbmFtZSBzdWZmaXgpLlxuICAgKiBAcmV0dXJuIHtUcnVzdGVkVHlwZVBvbGljeX0gVGhlIHBvbGljeSBjcmVhdGVkIChvciBudWxsLCBpZiBUcnVzdGVkIFR5cGVzXG4gICAqIGFyZSBub3Qgc3VwcG9ydGVkIG9yIGNyZWF0aW5nIHRoZSBwb2xpY3kgZmFpbGVkKS5cbiAgICovXG4gIGNvbnN0IF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kgPSBmdW5jdGlvbiBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgcHVyaWZ5SG9zdEVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIHRydXN0ZWRUeXBlcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFsbG93IHRoZSBjYWxsZXJzIHRvIGNvbnRyb2wgdGhlIHVuaXF1ZSBwb2xpY3kgbmFtZVxuICAgIC8vIGJ5IGFkZGluZyBhIGRhdGEtdHQtcG9saWN5LXN1ZmZpeCB0byB0aGUgc2NyaXB0IGVsZW1lbnQgd2l0aCB0aGUgRE9NUHVyaWZ5LlxuICAgIC8vIFBvbGljeSBjcmVhdGlvbiB3aXRoIGR1cGxpY2F0ZSBuYW1lcyB0aHJvd3MgaW4gVHJ1c3RlZCBUeXBlcy5cbiAgICBsZXQgc3VmZml4ID0gbnVsbDtcbiAgICBjb25zdCBBVFRSX05BTUUgPSAnZGF0YS10dC1wb2xpY3ktc3VmZml4JztcbiAgICBpZiAocHVyaWZ5SG9zdEVsZW1lbnQgJiYgcHVyaWZ5SG9zdEVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJfTkFNRSkpIHtcbiAgICAgIHN1ZmZpeCA9IHB1cmlmeUhvc3RFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgIH1cbiAgICBjb25zdCBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShwb2xpY3lOYW1lLCB7XG4gICAgICAgIGNyZWF0ZUhUTUwoaHRtbCkge1xuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVTY3JpcHRVUkwoc2NyaXB0VXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHNjcmlwdFVybDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy8gUG9saWN5IGNyZWF0aW9uIGZhaWxlZCAobW9zdCBsaWtlbHkgYW5vdGhlciBET01QdXJpZnkgc2NyaXB0IGhhc1xuICAgICAgLy8gYWxyZWFkeSBydW4pLiBTa2lwIGNyZWF0aW5nIHRoZSBwb2xpY3ksIGFzIHRoaXMgd2lsbCBvbmx5IGNhdXNlIGVycm9yc1xuICAgICAgLy8gaWYgVFQgYXJlIGVuZm9yY2VkLlxuICAgICAgY29uc29sZS53YXJuKCdUcnVzdGVkVHlwZXMgcG9saWN5ICcgKyBwb2xpY3lOYW1lICsgJyBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gY3JlYXRlRE9NUHVyaWZ5KCkge1xuICAgIGxldCB3aW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGdldEdsb2JhbCgpO1xuICAgIGNvbnN0IERPTVB1cmlmeSA9IHJvb3QgPT4gY3JlYXRlRE9NUHVyaWZ5KHJvb3QpO1xuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBsYWJlbCwgZXhwb3NlZCBmb3IgZWFzaWVyIGNoZWNrc1xuICAgICAqIGlmIERPTVB1cmlmeSBpcyB1cCB0byBkYXRlIG9yIG5vdFxuICAgICAqL1xuICAgIERPTVB1cmlmeS52ZXJzaW9uID0gJzMuMS42JztcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgRE9NUHVyaWZ5IHJlbW92ZWQgZHVyaW5nIHNhbml0YXRpb24uXG4gICAgICogRW1wdHkgaWYgbm90aGluZyB3YXMgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuZG9jdW1lbnQpIHtcbiAgICAgIC8vIE5vdCBydW5uaW5nIGluIGEgYnJvd3NlciwgcHJvdmlkZSBhIGZhY3RvcnkgZnVuY3Rpb25cbiAgICAgIC8vIHNvIHRoYXQgeW91IGNhbiBwYXNzIHlvdXIgb3duIFdpbmRvd1xuICAgICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICAgIH1cbiAgICBsZXQge1xuICAgICAgZG9jdW1lbnRcbiAgICB9ID0gd2luZG93O1xuICAgIGNvbnN0IG9yaWdpbmFsRG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gb3JpZ2luYWxEb2N1bWVudC5jdXJyZW50U2NyaXB0O1xuICAgIGNvbnN0IHtcbiAgICAgIERvY3VtZW50RnJhZ21lbnQsXG4gICAgICBIVE1MVGVtcGxhdGVFbGVtZW50LFxuICAgICAgTm9kZSxcbiAgICAgIEVsZW1lbnQsXG4gICAgICBOb2RlRmlsdGVyLFxuICAgICAgTmFtZWROb2RlTWFwID0gd2luZG93Lk5hbWVkTm9kZU1hcCB8fCB3aW5kb3cuTW96TmFtZWRBdHRyTWFwLFxuICAgICAgSFRNTEZvcm1FbGVtZW50LFxuICAgICAgRE9NUGFyc2VyLFxuICAgICAgdHJ1c3RlZFR5cGVzXG4gICAgfSA9IHdpbmRvdztcbiAgICBjb25zdCBFbGVtZW50UHJvdG90eXBlID0gRWxlbWVudC5wcm90b3R5cGU7XG4gICAgY29uc3QgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgICBjb25zdCByZW1vdmUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ3JlbW92ZScpO1xuICAgIGNvbnN0IGdldE5leHRTaWJsaW5nID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICduZXh0U2libGluZycpO1xuICAgIGNvbnN0IGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgICBjb25zdCBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7XG5cbiAgICAvLyBBcyBwZXIgaXNzdWUgIzQ3LCB0aGUgd2ViLWNvbXBvbmVudHMgcmVnaXN0cnkgaXMgaW5oZXJpdGVkIGJ5IGFcbiAgICAvLyBuZXcgZG9jdW1lbnQgY3JlYXRlZCB2aWEgY3JlYXRlSFRNTERvY3VtZW50LiBBcyBwZXIgdGhlIHNwZWNcbiAgICAvLyAoaHR0cDovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3JlYXRpbmctYW5kLXBhc3NpbmctcmVnaXN0cmllcylcbiAgICAvLyBhIG5ldyBlbXB0eSByZWdpc3RyeSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0ZW1wbGF0ZSBjb250ZW50cyBvd25lclxuICAgIC8vIGRvY3VtZW50LCBzbyB3ZSB1c2UgdGhhdCBhcyBvdXIgcGFyZW50IGRvY3VtZW50IHRvIGVuc3VyZSBub3RoaW5nXG4gICAgLy8gaXMgaW5oZXJpdGVkLlxuICAgIGlmICh0eXBlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQgJiYgdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgIGRvY3VtZW50ID0gdGVtcGxhdGUuY29udGVudC5vd25lckRvY3VtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdHJ1c3RlZFR5cGVzUG9saWN5O1xuICAgIGxldCBlbXB0eUhUTUwgPSAnJztcbiAgICBjb25zdCB7XG4gICAgICBpbXBsZW1lbnRhdGlvbixcbiAgICAgIGNyZWF0ZU5vZGVJdGVyYXRvcixcbiAgICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQsXG4gICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZVxuICAgIH0gPSBkb2N1bWVudDtcbiAgICBjb25zdCB7XG4gICAgICBpbXBvcnROb2RlXG4gICAgfSA9IG9yaWdpbmFsRG9jdW1lbnQ7XG4gICAgbGV0IGhvb2tzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2Ugd2hldGhlciB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgcnVubmluZyB0aGUgZnVsbCBET01QdXJpZnkuXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gdHlwZW9mIGVudHJpZXMgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGdldFBhcmVudE5vZGUgPT09ICdmdW5jdGlvbicgJiYgaW1wbGVtZW50YXRpb24gJiYgaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qge1xuICAgICAgTVVTVEFDSEVfRVhQUixcbiAgICAgIEVSQl9FWFBSLFxuICAgICAgVE1QTElUX0VYUFIsXG4gICAgICBEQVRBX0FUVFIsXG4gICAgICBBUklBX0FUVFIsXG4gICAgICBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICAgIEFUVFJfV0hJVEVTUEFDRSxcbiAgICAgIENVU1RPTV9FTEVNRU5UXG4gICAgfSA9IEVYUFJFU1NJT05TO1xuICAgIGxldCB7XG4gICAgICBJU19BTExPV0VEX1VSSTogSVNfQUxMT1dFRF9VUkkkMVxuICAgIH0gPSBFWFBSRVNTSU9OUztcblxuICAgIC8qKlxuICAgICAqIFdlIGNvbnNpZGVyIHRoZSBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBiZWxvdyB0byBiZSBzYWZlLiBJZGVhbGx5XG4gICAgICogZG9uJ3QgYWRkIGFueSBuZXcgb25lcyBidXQgZmVlbCBmcmVlIHRvIHJlbW92ZSB1bndhbnRlZCBvbmVzLlxuICAgICAqL1xuXG4gICAgLyogYWxsb3dlZCBlbGVtZW50IG5hbWVzICovXG4gICAgbGV0IEFMTE9XRURfVEFHUyA9IG51bGw7XG4gICAgY29uc3QgREVGQVVMVF9BTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLmh0bWwkMSwgLi4uc3ZnJDEsIC4uLnN2Z0ZpbHRlcnMsIC4uLm1hdGhNbCQxLCAuLi50ZXh0XSk7XG5cbiAgICAvKiBBbGxvd2VkIGF0dHJpYnV0ZSBuYW1lcyAqL1xuICAgIGxldCBBTExPV0VEX0FUVFIgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfQUxMT1dFRF9BVFRSID0gYWRkVG9TZXQoe30sIFsuLi5odG1sLCAuLi5zdmcsIC4uLm1hdGhNbCwgLi4ueG1sXSk7XG5cbiAgICAvKlxuICAgICAqIENvbmZpZ3VyZSBob3cgRE9NUFVyaWZ5IHNob3VsZCBoYW5kbGUgY3VzdG9tIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgY3VzdG9taXplZCBidWlsdC1pbiBlbGVtZW50cy5cbiAgICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSB0YWdOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGN1c3RvbSBlbGVtZW50cylcbiAgICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSBhdHRyaWJ1dGVOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGF0dHJpYnV0ZXMgbm90IG9uIHRoZSBhbGxvdyBsaXN0KVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIGFsbG93IGN1c3RvbSBlbGVtZW50cyBkZXJpdmVkIGZyb20gYnVpbHQtaW5zIGlmIHRoZXkgcGFzcyBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2suIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAgICovXG4gICAgbGV0IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoY3JlYXRlKG51bGwsIHtcbiAgICAgIHRhZ05hbWVDaGVjazoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVOYW1lQ2hlY2s6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LFxuICAgICAgYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiB0YWdzIChvdmVycmlkZXMgQUxMT1dFRF9UQUdTL0FERF9UQUdTKSAqL1xuICAgIGxldCBGT1JCSURfVEFHUyA9IG51bGw7XG5cbiAgICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiBhdHRyaWJ1dGVzIChvdmVycmlkZXMgQUxMT1dFRF9BVFRSL0FERF9BVFRSKSAqL1xuICAgIGxldCBGT1JCSURfQVRUUiA9IG51bGw7XG5cbiAgICAvKiBEZWNpZGUgaWYgQVJJQSBhdHRyaWJ1dGVzIGFyZSBva2F5ICovXG4gICAgbGV0IEFMTE9XX0FSSUFfQVRUUiA9IHRydWU7XG5cbiAgICAvKiBEZWNpZGUgaWYgY3VzdG9tIGRhdGEgYXR0cmlidXRlcyBhcmUgb2theSAqL1xuICAgIGxldCBBTExPV19EQVRBX0FUVFIgPSB0cnVlO1xuXG4gICAgLyogRGVjaWRlIGlmIHVua25vd24gcHJvdG9jb2xzIGFyZSBva2F5ICovXG4gICAgbGV0IEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gZmFsc2U7XG5cbiAgICAvKiBEZWNpZGUgaWYgc2VsZi1jbG9zaW5nIHRhZ3MgaW4gYXR0cmlidXRlcyBhcmUgYWxsb3dlZC5cbiAgICAgKiBVc3VhbGx5IHJlbW92ZWQgZHVlIHRvIGEgbVhTUyBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG4gICAgbGV0IEFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiA9IHRydWU7XG5cbiAgICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZm9yIGNvbW1vbiB0ZW1wbGF0ZSBlbmdpbmVzLlxuICAgICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGRhdGEgYXR0cmlidXRlcywgbXVzdGFjaGVzIGFuZCBFUkJcbiAgICAgKi9cbiAgICBsZXQgU0FGRV9GT1JfVEVNUExBVEVTID0gZmFsc2U7XG5cbiAgICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZXZlbiBmb3IgWE1MIHVzZWQgd2l0aGluIEhUTUwgYW5kIGFsaWtlLlxuICAgICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGNvbW1lbnRzIHdoZW4gY29udGFpbmluZyByaXNreSBjb250ZW50LlxuICAgICAqL1xuICAgIGxldCBTQUZFX0ZPUl9YTUwgPSB0cnVlO1xuXG4gICAgLyogRGVjaWRlIGlmIGRvY3VtZW50IHdpdGggPGh0bWw+Li4uIHNob3VsZCBiZSByZXR1cm5lZCAqL1xuICAgIGxldCBXSE9MRV9ET0NVTUVOVCA9IGZhbHNlO1xuXG4gICAgLyogVHJhY2sgd2hldGhlciBjb25maWcgaXMgYWxyZWFkeSBzZXQgb24gdGhpcyBpbnN0YW5jZSBvZiBET01QdXJpZnkuICovXG4gICAgbGV0IFNFVF9DT05GSUcgPSBmYWxzZTtcblxuICAgIC8qIERlY2lkZSBpZiBhbGwgZWxlbWVudHMgKGUuZy4gc3R5bGUsIHNjcmlwdCkgbXVzdCBiZSBjaGlsZHJlbiBvZlxuICAgICAqIGRvY3VtZW50LmJvZHkuIEJ5IGRlZmF1bHQsIGJyb3dzZXJzIG1pZ2h0IG1vdmUgdGhlbSB0byBkb2N1bWVudC5oZWFkICovXG4gICAgbGV0IEZPUkNFX0JPRFkgPSBmYWxzZTtcblxuICAgIC8qIERlY2lkZSBpZiBhIERPTSBgSFRNTEJvZHlFbGVtZW50YCBzaG91bGQgYmUgcmV0dXJuZWQsIGluc3RlYWQgb2YgYSBodG1sXG4gICAgICogc3RyaW5nIChvciBhIFRydXN0ZWRIVE1MIG9iamVjdCBpZiBUcnVzdGVkIFR5cGVzIGFyZSBzdXBwb3J0ZWQpLlxuICAgICAqIElmIGBXSE9MRV9ET0NVTUVOVGAgaXMgZW5hYmxlZCBhIGBIVE1MSHRtbEVsZW1lbnRgIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZFxuICAgICAqL1xuICAgIGxldCBSRVRVUk5fRE9NID0gZmFsc2U7XG5cbiAgICAvKiBEZWNpZGUgaWYgYSBET00gYERvY3VtZW50RnJhZ21lbnRgIHNob3VsZCBiZSByZXR1cm5lZCwgaW5zdGVhZCBvZiBhIGh0bWxcbiAgICAgKiBzdHJpbmcgIChvciBhIFRydXN0ZWRIVE1MIG9iamVjdCBpZiBUcnVzdGVkIFR5cGVzIGFyZSBzdXBwb3J0ZWQpICovXG4gICAgbGV0IFJFVFVSTl9ET01fRlJBR01FTlQgPSBmYWxzZTtcblxuICAgIC8qIFRyeSB0byByZXR1cm4gYSBUcnVzdGVkIFR5cGUgb2JqZWN0IGluc3RlYWQgb2YgYSBzdHJpbmcsIHJldHVybiBhIHN0cmluZyBpblxuICAgICAqIGNhc2UgVHJ1c3RlZCBUeXBlcyBhcmUgbm90IHN1cHBvcnRlZCAgKi9cbiAgICBsZXQgUkVUVVJOX1RSVVNURURfVFlQRSA9IGZhbHNlO1xuXG4gICAgLyogT3V0cHV0IHNob3VsZCBiZSBmcmVlIGZyb20gRE9NIGNsb2JiZXJpbmcgYXR0YWNrcz9cbiAgICAgKiBUaGlzIHNhbml0aXplcyBtYXJrdXBzIG5hbWVkIHdpdGggY29sbGlkaW5nLCBjbG9iYmVyYWJsZSBidWlsdC1pbiBET00gQVBJcy5cbiAgICAgKi9cbiAgICBsZXQgU0FOSVRJWkVfRE9NID0gdHJ1ZTtcblxuICAgIC8qIEFjaGlldmUgZnVsbCBET00gQ2xvYmJlcmluZyBwcm90ZWN0aW9uIGJ5IGlzb2xhdGluZyB0aGUgbmFtZXNwYWNlIG9mIG5hbWVkXG4gICAgICogcHJvcGVydGllcyBhbmQgSlMgdmFyaWFibGVzLCBtaXRpZ2F0aW5nIGF0dGFja3MgdGhhdCBhYnVzZSB0aGUgSFRNTC9ET00gc3BlYyBydWxlcy5cbiAgICAgKlxuICAgICAqIEhUTUwvRE9NIHNwZWMgcnVsZXMgdGhhdCBlbmFibGUgRE9NIENsb2JiZXJpbmc6XG4gICAgICogICAtIE5hbWVkIEFjY2VzcyBvbiBXaW5kb3cgKMKnNy4zLjMpXG4gICAgICogICAtIERPTSBUcmVlIEFjY2Vzc29ycyAowqczLjEuNSlcbiAgICAgKiAgIC0gRm9ybSBFbGVtZW50IFBhcmVudC1DaGlsZCBSZWxhdGlvbnMgKMKnNC4xMC4zKVxuICAgICAqICAgLSBJZnJhbWUgc3JjZG9jIC8gTmVzdGVkIFdpbmRvd1Byb3hpZXMgKMKnNC44LjUpXG4gICAgICogICAtIEhUTUxDb2xsZWN0aW9uICjCpzQuMi4xMC4yKVxuICAgICAqXG4gICAgICogTmFtZXNwYWNlIGlzb2xhdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBwcmVmaXhpbmcgYGlkYCBhbmQgYG5hbWVgIGF0dHJpYnV0ZXNcbiAgICAgKiB3aXRoIGEgY29uc3RhbnQgc3RyaW5nLCBpLmUuLCBgdXNlci1jb250ZW50LWBcbiAgICAgKi9cbiAgICBsZXQgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBmYWxzZTtcbiAgICBjb25zdCBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggPSAndXNlci1jb250ZW50LSc7XG5cbiAgICAvKiBLZWVwIGVsZW1lbnQgY29udGVudCB3aGVuIHJlbW92aW5nIGVsZW1lbnQ/ICovXG4gICAgbGV0IEtFRVBfQ09OVEVOVCA9IHRydWU7XG5cbiAgICAvKiBJZiBhIGBOb2RlYCBpcyBwYXNzZWQgdG8gc2FuaXRpemUoKSwgdGhlbiBwZXJmb3JtcyBzYW5pdGl6YXRpb24gaW4tcGxhY2UgaW5zdGVhZFxuICAgICAqIG9mIGltcG9ydGluZyBpdCBpbnRvIGEgbmV3IERvY3VtZW50IGFuZCByZXR1cm5pbmcgYSBzYW5pdGl6ZWQgY29weSAqL1xuICAgIGxldCBJTl9QTEFDRSA9IGZhbHNlO1xuXG4gICAgLyogQWxsb3cgdXNhZ2Ugb2YgcHJvZmlsZXMgbGlrZSBodG1sLCBzdmcgYW5kIG1hdGhNbCAqL1xuICAgIGxldCBVU0VfUFJPRklMRVMgPSB7fTtcblxuICAgIC8qIFRhZ3MgdG8gaWdub3JlIGNvbnRlbnQgb2Ygd2hlbiBLRUVQX0NPTlRFTlQgaXMgdHJ1ZSAqL1xuICAgIGxldCBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFsnYW5ub3RhdGlvbi14bWwnLCAnYXVkaW8nLCAnY29sZ3JvdXAnLCAnZGVzYycsICdmb3JlaWdub2JqZWN0JywgJ2hlYWQnLCAnaWZyYW1lJywgJ21hdGgnLCAnbWknLCAnbW4nLCAnbW8nLCAnbXMnLCAnbXRleHQnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdwbGFpbnRleHQnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3N2ZycsICd0ZW1wbGF0ZScsICd0aGVhZCcsICd0aXRsZScsICd2aWRlbycsICd4bXAnXSk7XG5cbiAgICAvKiBUYWdzIHRoYXQgYXJlIHNhZmUgZm9yIGRhdGE6IFVSSXMgKi9cbiAgICBsZXQgREFUQV9VUklfVEFHUyA9IG51bGw7XG4gICAgY29uc3QgREVGQVVMVF9EQVRBX1VSSV9UQUdTID0gYWRkVG9TZXQoe30sIFsnYXVkaW8nLCAndmlkZW8nLCAnaW1nJywgJ3NvdXJjZScsICdpbWFnZScsICd0cmFjayddKTtcblxuICAgIC8qIEF0dHJpYnV0ZXMgc2FmZSBmb3IgdmFsdWVzIGxpa2UgXCJqYXZhc2NyaXB0OlwiICovXG4gICAgbGV0IFVSSV9TQUZFX0FUVFJJQlVURVMgPSBudWxsO1xuICAgIGNvbnN0IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyA9IGFkZFRvU2V0KHt9LCBbJ2FsdCcsICdjbGFzcycsICdmb3InLCAnaWQnLCAnbGFiZWwnLCAnbmFtZScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3JvbGUnLCAnc3VtbWFyeScsICd0aXRsZScsICd2YWx1ZScsICdzdHlsZScsICd4bWxucyddKTtcbiAgICBjb25zdCBNQVRITUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuICAgIGNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGNvbnN0IEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xuICAgIC8qIERvY3VtZW50IG5hbWVzcGFjZSAqL1xuICAgIGxldCBOQU1FU1BBQ0UgPSBIVE1MX05BTUVTUEFDRTtcbiAgICBsZXQgSVNfRU1QVFlfSU5QVVQgPSBmYWxzZTtcblxuICAgIC8qIEFsbG93ZWQgWEhUTUwrWE1MIG5hbWVzcGFjZXMgKi9cbiAgICBsZXQgQUxMT1dFRF9OQU1FU1BBQ0VTID0gbnVsbDtcbiAgICBjb25zdCBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUyA9IGFkZFRvU2V0KHt9LCBbTUFUSE1MX05BTUVTUEFDRSwgU1ZHX05BTUVTUEFDRSwgSFRNTF9OQU1FU1BBQ0VdLCBzdHJpbmdUb1N0cmluZyk7XG5cbiAgICAvKiBQYXJzaW5nIG9mIHN0cmljdCBYSFRNTCBkb2N1bWVudHMgKi9cbiAgICBsZXQgUEFSU0VSX01FRElBX1RZUEUgPSBudWxsO1xuICAgIGNvbnN0IFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMgPSBbJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsICd0ZXh0L2h0bWwnXTtcbiAgICBjb25zdCBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFID0gJ3RleHQvaHRtbCc7XG4gICAgbGV0IHRyYW5zZm9ybUNhc2VGdW5jID0gbnVsbDtcblxuICAgIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gY29uZmlnIHRvIHBhc3MgdG8gaG9va3MgKi9cbiAgICBsZXQgQ09ORklHID0gbnVsbDtcblxuICAgIC8qIElkZWFsbHksIGRvIG5vdCB0b3VjaCBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgKi9cbiAgICAvKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICovXG5cbiAgICBjb25zdCBmb3JtRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICBjb25zdCBpc1JlZ2V4T3JGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzUmVnZXhPckZ1bmN0aW9uKHRlc3RWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRlc3RWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB0ZXN0VmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3BhcnNlQ29uZmlnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGNmZyBvcHRpb25hbCBjb25maWcgbGl0ZXJhbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgY29uc3QgX3BhcnNlQ29uZmlnID0gZnVuY3Rpb24gX3BhcnNlQ29uZmlnKCkge1xuICAgICAgbGV0IGNmZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICBpZiAoQ09ORklHICYmIENPTkZJRyA9PT0gY2ZnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gdGFtcGVyaW5nICovXG4gICAgICBpZiAoIWNmZyB8fCB0eXBlb2YgY2ZnICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjZmcgPSB7fTtcbiAgICAgIH1cblxuICAgICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gcHJvdG90eXBlIHBvbGx1dGlvbiAqL1xuICAgICAgY2ZnID0gY2xvbmUoY2ZnKTtcbiAgICAgIFBBUlNFUl9NRURJQV9UWVBFID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xID8gREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA6IGNmZy5QQVJTRVJfTUVESUFfVFlQRTtcblxuICAgICAgLy8gSFRNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzIGFyZSBub3QgY2FzZS1zZW5zaXRpdmUsIGNvbnZlcnRpbmcgdG8gbG93ZXJjYXNlLiBLZWVwaW5nIFhIVE1MIGFzIGlzLlxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgPSBQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgPyBzdHJpbmdUb1N0cmluZyA6IHN0cmluZ1RvTG93ZXJDYXNlO1xuXG4gICAgICAvKiBTZXQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG4gICAgICBBTExPV0VEX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBTExPV0VEX1RBR1MnKSA/IGFkZFRvU2V0KHt9LCBjZmcuQUxMT1dFRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiBERUZBVUxUX0FMTE9XRURfVEFHUztcbiAgICAgIEFMTE9XRURfQVRUUiA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0FMTE9XRURfQVRUUicpID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IERFRkFVTFRfQUxMT1dFRF9BVFRSO1xuICAgICAgQUxMT1dFRF9OQU1FU1BBQ0VTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUxMT1dFRF9OQU1FU1BBQ0VTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfTkFNRVNQQUNFUywgc3RyaW5nVG9TdHJpbmcpIDogREVGQVVMVF9BTExPV0VEX05BTUVTUEFDRVM7XG4gICAgICBVUklfU0FGRV9BVFRSSUJVVEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnQUREX1VSSV9TQUZFX0FUVFInKSA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgY2ZnLkFERF9VUklfU0FGRV9BVFRSLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIHRyYW5zZm9ybUNhc2VGdW5jIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICApIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICA6IERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUztcbiAgICAgIERBVEFfVVJJX1RBR1MgPSBvYmplY3RIYXNPd25Qcm9wZXJ0eShjZmcsICdBRERfREFUQV9VUklfVEFHUycpID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9EQVRBX1VSSV9UQUdTKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICBjZmcuQUREX0RBVEFfVVJJX1RBR1MsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIDogREVGQVVMVF9EQVRBX1VSSV9UQUdTO1xuICAgICAgRk9SQklEX0NPTlRFTlRTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnRk9SQklEX0NPTlRFTlRTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9DT05URU5UUywgdHJhbnNmb3JtQ2FzZUZ1bmMpIDogREVGQVVMVF9GT1JCSURfQ09OVEVOVFM7XG4gICAgICBGT1JCSURfVEFHUyA9IG9iamVjdEhhc093blByb3BlcnR5KGNmZywgJ0ZPUkJJRF9UQUdTJykgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYykgOiB7fTtcbiAgICAgIEZPUkJJRF9BVFRSID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnRk9SQklEX0FUVFInKSA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IHt9O1xuICAgICAgVVNFX1BST0ZJTEVTID0gb2JqZWN0SGFzT3duUHJvcGVydHkoY2ZnLCAnVVNFX1BST0ZJTEVTJykgPyBjZmcuVVNFX1BST0ZJTEVTIDogZmFsc2U7XG4gICAgICBBTExPV19BUklBX0FUVFIgPSBjZmcuQUxMT1dfQVJJQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgICBBTExPV19EQVRBX0FUVFIgPSBjZmcuQUxMT1dfREFUQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgICBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGNmZy5BTExPV19VTktOT1dOX1BST1RPQ09MUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSID0gY2ZnLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgU0FGRV9GT1JfVEVNUExBVEVTID0gY2ZnLlNBRkVfRk9SX1RFTVBMQVRFUyB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgU0FGRV9GT1JfWE1MID0gY2ZnLlNBRkVfRk9SX1hNTCAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIFJFVFVSTl9ET00gPSBjZmcuUkVUVVJOX0RPTSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgUkVUVVJOX0RPTV9GUkFHTUVOVCA9IGNmZy5SRVRVUk5fRE9NX0ZSQUdNRU5UIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIEZPUkNFX0JPRFkgPSBjZmcuRk9SQ0VfQk9EWSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgU0FOSVRJWkVfRE9NID0gY2ZnLlNBTklUSVpFX0RPTSAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgU0FOSVRJWkVfTkFNRURfUFJPUFMgPSBjZmcuU0FOSVRJWkVfTkFNRURfUFJPUFMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIEtFRVBfQ09OVEVOVCA9IGNmZy5LRUVQX0NPTlRFTlQgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICAgIElOX1BMQUNFID0gY2ZnLklOX1BMQUNFIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBJU19BTExPV0VEX1VSSSQxID0gY2ZnLkFMTE9XRURfVVJJX1JFR0VYUCB8fCBJU19BTExPV0VEX1VSSTtcbiAgICAgIE5BTUVTUEFDRSA9IGNmZy5OQU1FU1BBQ0UgfHwgSFRNTF9OQU1FU1BBQ0U7XG4gICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORyA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyB8fCB7fTtcbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaztcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgdHlwZW9mIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPT09ICdib29sZWFuJykge1xuICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzO1xuICAgICAgfVxuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICBBTExPV19EQVRBX0FUVFIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIFJFVFVSTl9ET00gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBQYXJzZSBwcm9maWxlIGluZm8gKi9cbiAgICAgIGlmIChVU0VfUFJPRklMRVMpIHtcbiAgICAgICAgQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIHRleHQpO1xuICAgICAgICBBTExPV0VEX0FUVFIgPSBbXTtcbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5odG1sID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBodG1sJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgaHRtbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5zdmcgPT09IHRydWUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIHN2ZyQxKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLm1hdGhNbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgbWF0aE1sJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgbWF0aE1sKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogTWVyZ2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG4gICAgICBpZiAoY2ZnLkFERF9UQUdTKSB7XG4gICAgICAgIGlmIChBTExPV0VEX1RBR1MgPT09IERFRkFVTFRfQUxMT1dFRF9UQUdTKSB7XG4gICAgICAgICAgQUxMT1dFRF9UQUdTID0gY2xvbmUoQUxMT1dFRF9UQUdTKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGNmZy5BRERfVEFHUywgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuICAgICAgaWYgKGNmZy5BRERfQVRUUikge1xuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSID09PSBERUZBVUxUX0FMTE9XRURfQVRUUikge1xuICAgICAgICAgIEFMTE9XRURfQVRUUiA9IGNsb25lKEFMTE9XRURfQVRUUik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBjZmcuQUREX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQUREX1VSSV9TQUZFX0FUVFIpIHtcbiAgICAgICAgYWRkVG9TZXQoVVJJX1NBRkVfQVRUUklCVVRFUywgY2ZnLkFERF9VUklfU0FGRV9BVFRSLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG4gICAgICBpZiAoY2ZnLkZPUkJJRF9DT05URU5UUykge1xuICAgICAgICBpZiAoRk9SQklEX0NPTlRFTlRTID09PSBERUZBVUxUX0ZPUkJJRF9DT05URU5UUykge1xuICAgICAgICAgIEZPUkJJRF9DT05URU5UUyA9IGNsb25lKEZPUkJJRF9DT05URU5UUyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVG9TZXQoRk9SQklEX0NPTlRFTlRTLCBjZmcuRk9SQklEX0NPTlRFTlRTLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFkZCAjdGV4dCBpbiBjYXNlIEtFRVBfQ09OVEVOVCBpcyBzZXQgdG8gdHJ1ZSAqL1xuICAgICAgaWYgKEtFRVBfQ09OVEVOVCkge1xuICAgICAgICBBTExPV0VEX1RBR1NbJyN0ZXh0J10gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBBZGQgaHRtbCwgaGVhZCBhbmQgYm9keSB0byBBTExPV0VEX1RBR1MgaW4gY2FzZSBXSE9MRV9ET0NVTUVOVCBpcyB0cnVlICovXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ2h0bWwnLCAnaGVhZCcsICdib2R5J10pO1xuICAgICAgfVxuXG4gICAgICAvKiBBZGQgdGJvZHkgdG8gQUxMT1dFRF9UQUdTIGluIGNhc2UgdGFibGVzIGFyZSBwZXJtaXR0ZWQsIHNlZSAjMjg2LCAjMzY1ICovXG4gICAgICBpZiAoQUxMT1dFRF9UQUdTLnRhYmxlKSB7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWyd0Ym9keSddKTtcbiAgICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgICAgfVxuICAgICAgaWYgKGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWSkge1xuICAgICAgICBpZiAodHlwZW9mIGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSBcImNyZWF0ZUhUTUxcIiBob29rLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2ZnLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgXCJjcmVhdGVTY3JpcHRVUkxcIiBob29rLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3ZlcndyaXRlIGV4aXN0aW5nIFRydXN0ZWRUeXBlcyBwb2xpY3kuXG4gICAgICAgIHRydXN0ZWRUeXBlc1BvbGljeSA9IGNmZy5UUlVTVEVEX1RZUEVTX1BPTElDWTtcblxuICAgICAgICAvLyBTaWduIGxvY2FsIHZhcmlhYmxlcyByZXF1aXJlZCBieSBgc2FuaXRpemVgLlxuICAgICAgICBlbXB0eUhUTUwgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTCgnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVbmluaXRpYWxpemVkIHBvbGljeSwgYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkb21wdXJpZnkgcG9saWN5LlxuICAgICAgICBpZiAodHJ1c3RlZFR5cGVzUG9saWN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cnVzdGVkVHlwZXNQb2xpY3kgPSBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgY3VycmVudFNjcmlwdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgcG9saWN5IHN1Y2NlZWRlZCBzaWduIGludGVybmFsIHZhcmlhYmxlcy5cbiAgICAgICAgaWYgKHRydXN0ZWRUeXBlc1BvbGljeSAhPT0gbnVsbCAmJiB0eXBlb2YgZW1wdHlIVE1MID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IGZ1cnRoZXIgbWFuaXB1bGF0aW9uIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgICAvLyBOb3QgYXZhaWxhYmxlIGluIElFOCwgU2FmYXJpIDUsIGV0Yy5cbiAgICAgIGlmIChmcmVlemUpIHtcbiAgICAgICAgZnJlZXplKGNmZyk7XG4gICAgICB9XG4gICAgICBDT05GSUcgPSBjZmc7XG4gICAgfTtcbiAgICBjb25zdCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydtaScsICdtbycsICdtbicsICdtcycsICdtdGV4dCddKTtcbiAgICBjb25zdCBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyA9IGFkZFRvU2V0KHt9LCBbJ2ZvcmVpZ25vYmplY3QnLCAnYW5ub3RhdGlvbi14bWwnXSk7XG5cbiAgICAvLyBDZXJ0YWluIGVsZW1lbnRzIGFyZSBhbGxvd2VkIGluIGJvdGggU1ZHIGFuZCBIVE1MXG4gICAgLy8gbmFtZXNwYWNlLiBXZSBuZWVkIHRvIHNwZWNpZnkgdGhlbSBleHBsaWNpdGx5XG4gICAgLy8gc28gdGhhdCB0aGV5IGRvbid0IGdldCBlcnJvbmVvdXNseSBkZWxldGVkIGZyb21cbiAgICAvLyBIVE1MIG5hbWVzcGFjZS5cbiAgICBjb25zdCBDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTID0gYWRkVG9TZXQoe30sIFsndGl0bGUnLCAnc3R5bGUnLCAnZm9udCcsICdhJywgJ3NjcmlwdCddKTtcblxuICAgIC8qIEtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIFNWRyBhbmQgTWF0aE1MIHRhZ3NcbiAgICAgKiBzbyB0aGF0IHdlIGNhbiBwZXJmb3JtIHRoZSBuYW1lc3BhY2UgY2hlY2tzXG4gICAgICogY29ycmVjdGx5LiAqL1xuICAgIGNvbnN0IEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBbLi4uc3ZnJDEsIC4uLnN2Z0ZpbHRlcnMsIC4uLnN2Z0Rpc2FsbG93ZWRdKTtcbiAgICBjb25zdCBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgWy4uLm1hdGhNbCQxLCAuLi5tYXRoTWxEaXNhbGxvd2VkXSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtFbGVtZW50fSBlbGVtZW50IGEgRE9NIGVsZW1lbnQgd2hvc2UgbmFtZXNwYWNlIGlzIGJlaW5nIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIGZhbHNlIGlmIHRoZSBlbGVtZW50IGhhcyBhXG4gICAgICogIG5hbWVzcGFjZSB0aGF0IGEgc3BlYy1jb21wbGlhbnQgcGFyc2VyIHdvdWxkIG5ldmVyXG4gICAgICogIHJldHVybi4gUmV0dXJuIHRydWUgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbnN0IF9jaGVja1ZhbGlkTmFtZXNwYWNlID0gZnVuY3Rpb24gX2NoZWNrVmFsaWROYW1lc3BhY2UoZWxlbWVudCkge1xuICAgICAgbGV0IHBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgICAgIC8vIEluIEpTRE9NLCBpZiB3ZSdyZSBpbnNpZGUgc2hhZG93IERPTSwgdGhlbiBwYXJlbnROb2RlXG4gICAgICAvLyBjYW4gYmUgbnVsbC4gV2UganVzdCBzaW11bGF0ZSBwYXJlbnQgaW4gdGhpcyBjYXNlLlxuICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC50YWdOYW1lKSB7XG4gICAgICAgIHBhcmVudCA9IHtcbiAgICAgICAgICBuYW1lc3BhY2VVUkk6IE5BTUVTUEFDRSxcbiAgICAgICAgICB0YWdOYW1lOiAndGVtcGxhdGUnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICAgIGNvbnN0IHBhcmVudFRhZ05hbWUgPSBzdHJpbmdUb0xvd2VyQ2FzZShwYXJlbnQudGFnTmFtZSk7XG4gICAgICBpZiAoIUFMTE9XRURfTkFNRVNQQUNFU1tlbGVtZW50Lm5hbWVzcGFjZVVSSV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBIVE1MIG5hbWVzcGFjZSB0byBTVkdcbiAgICAgICAgLy8gaXMgdmlhIDxzdmc+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBNYXRoTUwgdG8gU1ZHIGlzIHZpYWBcbiAgICAgICAgLy8gc3ZnIGlmIHBhcmVudCBpcyBlaXRoZXIgPGFubm90YXRpb24teG1sPiBvciBNYXRoTUxcbiAgICAgICAgLy8gdGV4dCBpbnRlZ3JhdGlvbiBwb2ludHMuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnICYmIChwYXJlbnRUYWdOYW1lID09PSAnYW5ub3RhdGlvbi14bWwnIHx8IE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgaW4gU1ZHXG4gICAgICAgIC8vIHNwZWMuIEFsbCBvdGhlcnMgYXJlIGRpc2FsbG93ZWQgaW4gU1ZHIG5hbWVzcGFjZS5cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gTWF0aE1MXG4gICAgICAgIC8vIGlzIHZpYSA8bWF0aD4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGtpbGxlZC5cbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBTVkcgdG8gTWF0aE1MIGlzIHZpYVxuICAgICAgICAvLyA8bWF0aD4gYW5kIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZWxlbWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBNYXRoTUxcbiAgICAgICAgLy8gc3BlYy4gQWxsIG90aGVycyBhcmUgZGlzYWxsb3dlZCBpbiBNYXRoTUwgbmFtZXNwYWNlLlxuICAgICAgICByZXR1cm4gQm9vbGVhbihBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gU1ZHIHRvIEhUTUwgaXMgdmlhXG4gICAgICAgIC8vIEhUTUwgaW50ZWdyYXRpb24gcG9pbnRzLCBhbmQgZnJvbSBNYXRoTUwgdG8gSFRNTFxuICAgICAgICAvLyBpcyB2aWEgTWF0aE1MIHRleHQgaW50ZWdyYXRpb24gcG9pbnRzXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFICYmICFIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSAmJiAhTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgZGlzYWxsb3cgdGFncyB0aGF0IGFyZSBzcGVjaWZpYyBmb3IgTWF0aE1MXG4gICAgICAgIC8vIG9yIFNWRyBhbmQgc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBIVE1MIG5hbWVzcGFjZVxuICAgICAgICByZXR1cm4gIUFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSAmJiAoQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UU1t0YWdOYW1lXSB8fCAhQUxMX1NWR19UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIFhIVE1MIGFuZCBYTUwgZG9jdW1lbnRzIHRoYXQgc3VwcG9ydCBjdXN0b20gbmFtZXNwYWNlc1xuICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJiBBTExPV0VEX05BTUVTUEFDRVNbZWxlbWVudC5uYW1lc3BhY2VVUkldKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29kZSBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwbGFjZSAodGhpcyBtZWFuc1xuICAgICAgLy8gdGhhdCB0aGUgZWxlbWVudCBzb21laG93IGdvdCBuYW1lc3BhY2UgdGhhdCBpcyBub3RcbiAgICAgIC8vIEhUTUwsIFNWRywgTWF0aE1MIG9yIGFsbG93ZWQgdmlhIEFMTE9XRURfTkFNRVNQQUNFUykuXG4gICAgICAvLyBSZXR1cm4gZmFsc2UganVzdCBpbiBjYXNlLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfZm9yY2VSZW1vdmVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgYSBET00gbm9kZVxuICAgICAqL1xuICAgIGNvbnN0IF9mb3JjZVJlbW92ZSA9IGZ1bmN0aW9uIF9mb3JjZVJlbW92ZShub2RlKSB7XG4gICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgZWxlbWVudDogbm9kZVxuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlXG4gICAgICAgIGdldFBhcmVudE5vZGUobm9kZSkucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3JlbW92ZUF0dHJpYnV0ZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lIGFuIEF0dHJpYnV0ZSBuYW1lXG4gICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSBhIERPTSBub2RlXG4gICAgICovXG4gICAgY29uc3QgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbm9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksXG4gICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBudWxsLFxuICAgICAgICAgIGZyb206IG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblxuICAgICAgLy8gV2Ugdm9pZCBhdHRyaWJ1dGUgdmFsdWVzIGZvciB1bnJlbW92YWJsZSBcImlzXCJcIiBhdHRyaWJ1dGVzXG4gICAgICBpZiAobmFtZSA9PT0gJ2lzJyAmJiAhQUxMT1dFRF9BVFRSW25hbWVdKSB7XG4gICAgICAgIGlmIChSRVRVUk5fRE9NIHx8IFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2ZvcmNlUmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9pbml0RG9jdW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZGlydHkgYSBzdHJpbmcgb2YgZGlydHkgbWFya3VwXG4gICAgICogQHJldHVybiB7RG9jdW1lbnR9IGEgRE9NLCBmaWxsZWQgd2l0aCB0aGUgZGlydHkgbWFya3VwXG4gICAgICovXG4gICAgY29uc3QgX2luaXREb2N1bWVudCA9IGZ1bmN0aW9uIF9pbml0RG9jdW1lbnQoZGlydHkpIHtcbiAgICAgIC8qIENyZWF0ZSBhIEhUTUwgZG9jdW1lbnQgKi9cbiAgICAgIGxldCBkb2MgPSBudWxsO1xuICAgICAgbGV0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbnVsbDtcbiAgICAgIGlmIChGT1JDRV9CT0RZKSB7XG4gICAgICAgIGRpcnR5ID0gJzxyZW1vdmU+PC9yZW1vdmU+JyArIGRpcnR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogSWYgRk9SQ0VfQk9EWSBpc24ndCB1c2VkLCBsZWFkaW5nIHdoaXRlc3BhY2UgbmVlZHMgdG8gYmUgcHJlc2VydmVkIG1hbnVhbGx5ICovXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBzdHJpbmdNYXRjaChkaXJ0eSwgL15bXFxyXFxuXFx0IF0rLyk7XG4gICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgICAgfVxuICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJiBOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFJvb3Qgb2YgWEhUTUwgZG9jIG11c3QgY29udGFpbiB4bWxucyBkZWNsYXJhdGlvbiAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvbm9ybWF0aXZlLmh0bWwjc3RyaWN0KVxuICAgICAgICBkaXJ0eSA9ICc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48aGVhZD48L2hlYWQ+PGJvZHk+JyArIGRpcnR5ICsgJzwvYm9keT48L2h0bWw+JztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcnR5UGF5bG9hZCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgLypcbiAgICAgICAqIFVzZSB0aGUgRE9NUGFyc2VyIEFQSSBieSBkZWZhdWx0LCBmYWxsYmFjayBsYXRlciBpZiBuZWVkcyBiZVxuICAgICAgICogRE9NUGFyc2VyIG5vdCB3b3JrIGZvciBzdmcgd2hlbiBoYXMgbXVsdGlwbGUgcm9vdCBlbGVtZW50LlxuICAgICAgICovXG4gICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZGlydHlQYXlsb2FkLCBQQVJTRVJfTUVESUFfVFlQRSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG5cbiAgICAgIC8qIFVzZSBjcmVhdGVIVE1MRG9jdW1lbnQgaW4gY2FzZSBET01QYXJzZXIgaXMgbm90IGF2YWlsYWJsZSAqL1xuICAgICAgaWYgKCFkb2MgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9IElTX0VNUFRZX0lOUFVUID8gZW1wdHlIVE1MIDogZGlydHlQYXlsb2FkO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgLy8gU3ludGF4IGVycm9yIGlmIGRpcnR5UGF5bG9hZCBpcyBpbnZhbGlkIHhtbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBib2R5ID0gZG9jLmJvZHkgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGlmIChkaXJ0eSAmJiBsZWFkaW5nV2hpdGVzcGFjZSkge1xuICAgICAgICBib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgLyogV29yayBvbiB3aG9sZSBkb2N1bWVudCBvciBqdXN0IGl0cyBib2R5ICovXG4gICAgICBpZiAoTkFNRVNQQUNFID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIFdIT0xFX0RPQ1VNRU5UID8gJ2h0bWwnIDogJ2JvZHknKVswXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBXSE9MRV9ET0NVTUVOVCA/IGRvYy5kb2N1bWVudEVsZW1lbnQgOiBib2R5O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgTm9kZUl0ZXJhdG9yIG9iamVjdCB0aGF0IHlvdSBjYW4gdXNlIHRvIHRyYXZlcnNlIGZpbHRlcmVkIGxpc3RzIG9mIG5vZGVzIG9yIGVsZW1lbnRzIGluIGEgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSByb290IFRoZSByb290IGVsZW1lbnQgb3Igbm9kZSB0byBzdGFydCB0cmF2ZXJzaW5nIG9uLlxuICAgICAqIEByZXR1cm4ge05vZGVJdGVyYXRvcn0gVGhlIGNyZWF0ZWQgTm9kZUl0ZXJhdG9yXG4gICAgICovXG4gICAgY29uc3QgX2NyZWF0ZU5vZGVJdGVyYXRvciA9IGZ1bmN0aW9uIF9jcmVhdGVOb2RlSXRlcmF0b3Iocm9vdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LCByb290LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCB8IE5vZGVGaWx0ZXIuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIHwgTm9kZUZpbHRlci5TSE9XX0NEQVRBX1NFQ1RJT04sIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfaXNDbG9iYmVyZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IGVsbSBlbGVtZW50IHRvIGNoZWNrIGZvciBjbG9iYmVyaW5nIGF0dGFja3NcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGNsb2JiZXJlZCwgZmFsc2UgaWYgc2FmZVxuICAgICAqL1xuICAgIGNvbnN0IF9pc0Nsb2JiZXJlZCA9IGZ1bmN0aW9uIF9pc0Nsb2JiZXJlZChlbG0pIHtcbiAgICAgIHJldHVybiBlbG0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQgJiYgKHR5cGVvZiBlbG0ubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0udGV4dENvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHwgIShlbG0uYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHwgdHlwZW9mIGVsbS5yZW1vdmVBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0uaW5zZXJ0QmVmb3JlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0uaGFzQ2hpbGROb2RlcyAhPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBET00gbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG9iamVjdCBvYmplY3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIGEgRE9NIG5vZGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlzIG9iamVjdCBpcyBhIERPTSBub2RlXG4gICAgICovXG4gICAgY29uc3QgX2lzTm9kZSA9IGZ1bmN0aW9uIF9pc05vZGUob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIE5vZGUgPT09ICdmdW5jdGlvbicgJiYgb2JqZWN0IGluc3RhbmNlb2YgTm9kZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2V4ZWN1dGVIb29rXG4gICAgICogRXhlY3V0ZSB1c2VyIGNvbmZpZ3VyYWJsZSBob29rc1xuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSBlbnRyeVBvaW50ICBOYW1lIG9mIHRoZSBob29rJ3MgZW50cnkgcG9pbnRcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBjdXJyZW50Tm9kZSBub2RlIHRvIHdvcmsgb24gd2l0aCB0aGUgaG9va1xuICAgICAqIEBwYXJhbSAge09iamVjdH0gZGF0YSBhZGRpdGlvbmFsIGhvb2sgcGFyYW1ldGVyc1xuICAgICAqL1xuICAgIGNvbnN0IF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgaWYgKCFob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcnJheUZvckVhY2goaG9va3NbZW50cnlQb2ludF0sIGhvb2sgPT4ge1xuICAgICAgICBob29rLmNhbGwoRE9NUHVyaWZ5LCBjdXJyZW50Tm9kZSwgZGF0YSwgQ09ORklHKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfc2FuaXRpemVFbGVtZW50c1xuICAgICAqXG4gICAgICogQHByb3RlY3Qgbm9kZU5hbWVcbiAgICAgKiBAcHJvdGVjdCB0ZXh0Q29udGVudFxuICAgICAqIEBwcm90ZWN0IHJlbW92ZUNoaWxkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gICB7Tm9kZX0gY3VycmVudE5vZGUgdG8gY2hlY2sgZm9yIHBlcm1pc3Npb24gdG8gZXhpc3RcbiAgICAgKiBAcmV0dXJuICB7Qm9vbGVhbn0gdHJ1ZSBpZiBub2RlIHdhcyBraWxsZWQsIGZhbHNlIGlmIGxlZnQgYWxpdmVcbiAgICAgKi9cbiAgICBjb25zdCBfc2FuaXRpemVFbGVtZW50cyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUVsZW1lbnRzKGN1cnJlbnROb2RlKSB7XG4gICAgICBsZXQgY29udGVudCA9IG51bGw7XG5cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcblxuICAgICAgLyogQ2hlY2sgaWYgZWxlbWVudCBpcyBjbG9iYmVyZWQgb3IgY2FuIGNsb2JiZXIgKi9cbiAgICAgIGlmIChfaXNDbG9iYmVyZWQoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBOb3cgbGV0J3MgY2hlY2sgdGhlIGVsZW1lbnQncyB0eXBlIGFuZCBuYW1lICovXG4gICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuXG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLCBjdXJyZW50Tm9kZSwge1xuICAgICAgICB0YWdOYW1lLFxuICAgICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTXG4gICAgICB9KTtcblxuICAgICAgLyogRGV0ZWN0IG1YU1MgYXR0ZW1wdHMgYWJ1c2luZyBuYW1lc3BhY2UgY29uZnVzaW9uICovXG4gICAgICBpZiAoY3VycmVudE5vZGUuaGFzQ2hpbGROb2RlcygpICYmICFfaXNOb2RlKGN1cnJlbnROb2RlLmZpcnN0RWxlbWVudENoaWxkKSAmJiByZWdFeHBUZXN0KC88Wy9cXHddL2csIGN1cnJlbnROb2RlLmlubmVySFRNTCkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBhbnkgb2NjdXJyZW5jZSBvZiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAqL1xuICAgICAgaWYgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbikge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogUmVtb3ZlIGFueSBraW5kIG9mIHBvc3NpYmx5IGhhcm1mdWwgY29tbWVudHMgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9YTUwgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5jb21tZW50ICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuZGF0YSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBlbGVtZW50IGlmIGFueXRoaW5nIGZvcmJpZHMgaXRzIHByZXNlbmNlICovXG4gICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY3VzdG9tIGVsZW1lbnQgdG8gaGFuZGxlICovXG4gICAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2lzQmFzaWNDdXN0b21FbGVtZW50KHRhZ05hbWUpKSB7XG4gICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdGFnTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayh0YWdOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEtlZXAgY29udGVudCBleGNlcHQgZm9yIGJhZC1saXN0ZWQgZWxlbWVudHMgKi9cbiAgICAgICAgaWYgKEtFRVBfQ09OVEVOVCAmJiAhRk9SQklEX0NPTlRFTlRTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGdldENoaWxkTm9kZXMoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRDb3VudCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNoaWxkQ291bnQgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZENsb25lID0gY2xvbmVOb2RlKGNoaWxkTm9kZXNbaV0sIHRydWUpO1xuICAgICAgICAgICAgICBjaGlsZENsb25lLl9fcmVtb3ZhbENvdW50ID0gKGN1cnJlbnROb2RlLl9fcmVtb3ZhbENvdW50IHx8IDApICsgMTtcbiAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGRDbG9uZSwgZ2V0TmV4dFNpYmxpbmcoY3VycmVudE5vZGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIENoZWNrIHdoZXRoZXIgZWxlbWVudCBoYXMgYSB2YWxpZCBuYW1lc3BhY2UgKi9cbiAgICAgIGlmIChjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIV9jaGVja1ZhbGlkTmFtZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogTWFrZSBzdXJlIHRoYXQgb2xkZXIgYnJvd3NlcnMgZG9uJ3QgZ2V0IGZhbGxiYWNrLXRhZyBtWFNTICovXG4gICAgICBpZiAoKHRhZ05hbWUgPT09ICdub3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ25vZW1iZWQnIHx8IHRhZ05hbWUgPT09ICdub2ZyYW1lcycpICYmIHJlZ0V4cFRlc3QoLzxcXC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBTYW5pdGl6ZSBlbGVtZW50IGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUyAmJiBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLnRleHQpIHtcbiAgICAgICAgLyogR2V0IHRoZSBlbGVtZW50J3MgdGV4dCBjb250ZW50ICovXG4gICAgICAgIGNvbnRlbnQgPSBjdXJyZW50Tm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICBjb250ZW50ID0gc3RyaW5nUmVwbGFjZShjb250ZW50LCBleHByLCAnICcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlLnRleHRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgICBlbGVtZW50OiBjdXJyZW50Tm9kZS5jbG9uZU5vZGUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN1cnJlbnROb2RlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2lzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbGNUYWcgTG93ZXJjYXNlIHRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGxjTmFtZSBMb3dlcmNhc2UgYXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIGNvbnN0IF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpIHtcbiAgICAgIC8qIE1ha2Ugc3VyZSBhdHRyaWJ1dGUgY2Fubm90IGNsb2JiZXIgKi9cbiAgICAgIGlmIChTQU5JVElaRV9ET00gJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEFsbG93IHZhbGlkIGRhdGEtKiBhdHRyaWJ1dGVzOiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGFmdGVyIFwiLVwiXG4gICAgICAgICAgKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2VtYmVkZGluZy1jdXN0b20tbm9uLXZpc2libGUtZGF0YS13aXRoLXRoZS1kYXRhLSotYXR0cmlidXRlcylcbiAgICAgICAgICBYTUwtY29tcGF0aWJsZSAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCN4bWwtY29tcGF0aWJsZSBhbmQgaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNkMGU4MDQpXG4gICAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdmFsdWU7IGl0J3MgYWx3YXlzIFVSSSBzYWZlLiAqL1xuICAgICAgaWYgKEFMTE9XX0RBVEFfQVRUUiAmJiAhRk9SQklEX0FUVFJbbGNOYW1lXSAmJiByZWdFeHBUZXN0KERBVEFfQVRUUiwgbGNOYW1lKSkgOyBlbHNlIGlmIChBTExPV19BUklBX0FUVFIgJiYgcmVnRXhwVGVzdChBUklBX0FUVFIsIGxjTmFtZSkpIDsgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAvLyBGaXJzdCBjb25kaXRpb24gZG9lcyBhIHZlcnkgYmFzaWMgY2hlY2sgaWYgYSkgaXQncyBiYXNpY2FsbHkgYSB2YWxpZCBjdXN0b20gZWxlbWVudCB0YWduYW1lIEFORFxuICAgICAgICAvLyBiKSBpZiB0aGUgdGFnTmFtZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICAgIF9pc0Jhc2ljQ3VzdG9tRWxlbWVudChsY1RhZykgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgbGNUYWcpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayhsY1RhZykpICYmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAgJiYgcmVnRXhwVGVzdChDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2ssIGxjTmFtZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKGxjTmFtZSkpIHx8XG4gICAgICAgIC8vIEFsdGVybmF0aXZlLCBzZWNvbmQgY29uZGl0aW9uIGNoZWNrcyBpZiBpdCdzIGFuIGBpc2AtYXR0cmlidXRlLCBBTkRcbiAgICAgICAgLy8gdGhlIHZhbHVlIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrXG4gICAgICAgIGxjTmFtZSA9PT0gJ2lzJyAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaywgdmFsdWUpIHx8IENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayh2YWx1ZSkpKSA7IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBDaGVjayB2YWx1ZSBpcyBzYWZlLiBGaXJzdCwgaXMgYXR0ciBpbmVydD8gSWYgc28sIGlzIHNhZmUgKi9cbiAgICAgIH0gZWxzZSBpZiAoVVJJX1NBRkVfQVRUUklCVVRFU1tsY05hbWVdKSA7IGVsc2UgaWYgKHJlZ0V4cFRlc3QoSVNfQUxMT1dFRF9VUkkkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFLCAnJykpKSA7IGVsc2UgaWYgKChsY05hbWUgPT09ICdzcmMnIHx8IGxjTmFtZSA9PT0gJ3hsaW5rOmhyZWYnIHx8IGxjTmFtZSA9PT0gJ2hyZWYnKSAmJiBsY1RhZyAhPT0gJ3NjcmlwdCcgJiYgc3RyaW5nSW5kZXhPZih2YWx1ZSwgJ2RhdGE6JykgPT09IDAgJiYgREFUQV9VUklfVEFHU1tsY1RhZ10pIDsgZWxzZSBpZiAoQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgJiYgIXJlZ0V4cFRlc3QoSVNfU0NSSVBUX09SX0RBVEEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSwgJycpKSkgOyBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9pc0Jhc2ljQ3VzdG9tRWxlbWVudFxuICAgICAqIGNoZWNrcyBpZiBhdCBsZWFzdCBvbmUgZGFzaCBpcyBpbmNsdWRlZCBpbiB0YWdOYW1lLCBhbmQgaXQncyBub3QgdGhlIGZpcnN0IGNoYXJcbiAgICAgKiBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGNoZWNraW5nIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3ZhbGlkYXRlLWVsZW1lbnQtbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbmFtZSBvZiB0aGUgdGFnIG9mIHRoZSBub2RlIHRvIHNhbml0aXplXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIG5hbWUgbWVldHMgdGhlIGJhc2ljIGNyaXRlcmlhIGZvciBhIGN1c3RvbSBlbGVtZW50LCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICovXG4gICAgY29uc3QgX2lzQmFzaWNDdXN0b21FbGVtZW50ID0gZnVuY3Rpb24gX2lzQmFzaWNDdXN0b21FbGVtZW50KHRhZ05hbWUpIHtcbiAgICAgIHJldHVybiB0YWdOYW1lICE9PSAnYW5ub3RhdGlvbi14bWwnICYmIHN0cmluZ01hdGNoKHRhZ05hbWUsIENVU1RPTV9FTEVNRU5UKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3Nhbml0aXplQXR0cmlidXRlc1xuICAgICAqXG4gICAgICogQHByb3RlY3QgYXR0cmlidXRlc1xuICAgICAqIEBwcm90ZWN0IG5vZGVOYW1lXG4gICAgICogQHByb3RlY3QgcmVtb3ZlQXR0cmlidXRlXG4gICAgICogQHByb3RlY3Qgc2V0QXR0cmlidXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBjdXJyZW50Tm9kZSB0byBzYW5pdGl6ZVxuICAgICAqL1xuICAgIGNvbnN0IF9zYW5pdGl6ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiBfc2FuaXRpemVBdHRyaWJ1dGVzKGN1cnJlbnROb2RlKSB7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ2JlZm9yZVNhbml0aXplQXR0cmlidXRlcycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYXR0cmlidXRlc1xuICAgICAgfSA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGF0dHJpYnV0ZXM7IGlmIG5vdCB3ZSBtaWdodCBoYXZlIGEgdGV4dCBub2RlICovXG4gICAgICBpZiAoIWF0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaG9va0V2ZW50ID0ge1xuICAgICAgICBhdHRyTmFtZTogJycsXG4gICAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogQUxMT1dFRF9BVFRSXG4gICAgICB9O1xuICAgICAgbGV0IGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDtcblxuICAgICAgLyogR28gYmFja3dhcmRzIG92ZXIgYWxsIGF0dHJpYnV0ZXM7IHNhZmVseSByZW1vdmUgYmFkIG9uZXMgKi9cbiAgICAgIHdoaWxlIChsLS0pIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZXNbbF07XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG5hbWVzcGFjZVVSSSxcbiAgICAgICAgICB2YWx1ZTogYXR0clZhbHVlXG4gICAgICAgIH0gPSBhdHRyO1xuICAgICAgICBjb25zdCBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcbiAgICAgICAgbGV0IHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHJWYWx1ZSA6IHN0cmluZ1RyaW0oYXR0clZhbHVlKTtcblxuICAgICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICAgIGhvb2tFdmVudC5hdHRyTmFtZSA9IGxjTmFtZTtcbiAgICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBob29rRXZlbnQua2VlcEF0dHIgPSB0cnVlO1xuICAgICAgICBob29rRXZlbnQuZm9yY2VLZWVwQXR0ciA9IHVuZGVmaW5lZDsgLy8gQWxsb3dzIGRldmVsb3BlcnMgdG8gc2VlIHRoaXMgaXMgYSBwcm9wZXJ0eSB0aGV5IGNhbiBzZXRcbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgICAgdmFsdWUgPSBob29rRXZlbnQuYXR0clZhbHVlO1xuXG4gICAgICAgIC8qIFdvcmsgYXJvdW5kIGEgc2VjdXJpdHkgaXNzdWUgd2l0aCBjb21tZW50cyBpbnNpZGUgYXR0cmlidXRlcyAqL1xuICAgICAgICBpZiAoU0FGRV9GT1JfWE1MICYmIHJlZ0V4cFRlc3QoLygoLS0hP3xdKT4pfDxcXC8oc3R5bGV8dGl0bGUpL2ksIHZhbHVlKSkge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogRGlkIHRoZSBob29rcyBhcHByb3ZlIG9mIHRoZSBhdHRyaWJ1dGU/ICovXG4gICAgICAgIGlmIChob29rRXZlbnQuZm9yY2VLZWVwQXR0cikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogUmVtb3ZlIGF0dHJpYnV0ZSAqL1xuICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcblxuICAgICAgICAvKiBEaWQgdGhlIGhvb2tzIGFwcHJvdmUgb2YgdGhlIGF0dHJpYnV0ZT8gKi9cbiAgICAgICAgaWYgKCFob29rRXZlbnQua2VlcEF0dHIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFdvcmsgYXJvdW5kIGEgc2VjdXJpdHkgaXNzdWUgaW4galF1ZXJ5IDMuMCAqL1xuICAgICAgICBpZiAoIUFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiAmJiByZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogU2FuaXRpemUgYXR0cmlidXRlIGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuICAgICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgZXhwciwgJyAnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIElzIGB2YWx1ZWAgdmFsaWQgZm9yIHRoaXMgYXR0cmlidXRlPyAqL1xuICAgICAgICBjb25zdCBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcbiAgICAgICAgaWYgKCFfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiB2aWEgbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAgICAgICAgICogUHJlZml4IGlkIGFuZCBuYW1lIGF0dHJpYnV0ZXMgd2l0aCBgdXNlci1jb250ZW50LWBcbiAgICAgICAgICovXG4gICAgICAgIGlmIChTQU5JVElaRV9OQU1FRF9QUk9QUyAmJiAobGNOYW1lID09PSAnaWQnIHx8IGxjTmFtZSA9PT0gJ25hbWUnKSkge1xuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYXR0cmlidXRlIHdpdGggdGhpcyB2YWx1ZVxuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgLy8gUHJlZml4IHRoZSB2YWx1ZSBhbmQgbGF0ZXIgcmUtY3JlYXRlIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FuaXRpemVkIHZhbHVlXG4gICAgICAgICAgdmFsdWUgPSBTQU5JVElaRV9OQU1FRF9QUk9QU19QUkVGSVggKyB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEhhbmRsZSBhdHRyaWJ1dGVzIHRoYXQgcmVxdWlyZSBUcnVzdGVkIFR5cGVzICovXG4gICAgICAgIGlmICh0cnVzdGVkVHlwZXNQb2xpY3kgJiYgdHlwZW9mIHRydXN0ZWRUeXBlcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRydXN0ZWRUeXBlcy5nZXRBdHRyaWJ1dGVUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZVVSSSkgOyBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1c3RlZFR5cGVzLmdldEF0dHJpYnV0ZVR5cGUobGNUYWcsIGxjTmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnVHJ1c3RlZEhUTUwnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICdUcnVzdGVkU2NyaXB0VVJMJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVTY3JpcHRVUkwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEhhbmRsZSBpbnZhbGlkIGRhdGEtKiBhdHRyaWJ1dGUgc2V0IGJ5IHRyeS1jYXRjaGluZyBpdCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBGYWxsYmFjayB0byBzZXRBdHRyaWJ1dGUoKSBmb3IgYnJvd3Nlci11bnJlY29nbml6ZWQgbmFtZXNwYWNlcyBlLmcuIFwieC1zY2hlbWFcIi4gKi9cbiAgICAgICAgICAgIGN1cnJlbnROb2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfaXNDbG9iYmVyZWQoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVBvcChET01QdXJpZnkucmVtb3ZlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuXG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfc2FuaXRpemVTaGFkb3dET01cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0RvY3VtZW50RnJhZ21lbnR9IGZyYWdtZW50IHRvIGl0ZXJhdGUgb3ZlciByZWN1cnNpdmVseVxuICAgICAqL1xuICAgIGNvbnN0IF9zYW5pdGl6ZVNoYWRvd0RPTSA9IGZ1bmN0aW9uIF9zYW5pdGl6ZVNoYWRvd0RPTShmcmFnbWVudCkge1xuICAgICAgbGV0IHNoYWRvd05vZGUgPSBudWxsO1xuICAgICAgY29uc3Qgc2hhZG93SXRlcmF0b3IgPSBfY3JlYXRlTm9kZUl0ZXJhdG9yKGZyYWdtZW50KTtcblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTScsIGZyYWdtZW50LCBudWxsKTtcbiAgICAgIHdoaWxlIChzaGFkb3dOb2RlID0gc2hhZG93SXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICAgIF9leGVjdXRlSG9vaygndXBvblNhbml0aXplU2hhZG93Tm9kZScsIHNoYWRvd05vZGUsIG51bGwpO1xuXG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhzaGFkb3dOb2RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogRGVlcCBzaGFkb3cgRE9NIGRldGVjdGVkICovXG4gICAgICAgIGlmIChzaGFkb3dOb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBDaGVjayBhdHRyaWJ1dGVzLCBzYW5pdGl6ZSBpZiBuZWNlc3NhcnkgKi9cbiAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICAgIH1cblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTYW5pdGl6ZVxuICAgICAqIFB1YmxpYyBtZXRob2QgcHJvdmlkaW5nIGNvcmUgc2FuaXRhdGlvbiBmdW5jdGlvbmFsaXR5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIG9iamVjdFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgRE9NUHVyaWZ5LnNhbml0aXplID0gZnVuY3Rpb24gKGRpcnR5KSB7XG4gICAgICBsZXQgY2ZnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIGxldCBib2R5ID0gbnVsbDtcbiAgICAgIGxldCBpbXBvcnRlZE5vZGUgPSBudWxsO1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIGxldCByZXR1cm5Ob2RlID0gbnVsbDtcbiAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgc3RyaW5nIHRvIHNhbml0aXplLlxuICAgICAgICBETyBOT1QgcmV0dXJuIGVhcmx5LCBhcyB0aGlzIHdpbGwgcmV0dXJuIHRoZSB3cm9uZyB0eXBlIGlmXG4gICAgICAgIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBET00gb2JqZWN0IHJhdGhlciB0aGFuIGEgc3RyaW5nICovXG4gICAgICBJU19FTVBUWV9JTlBVVCA9ICFkaXJ0eTtcbiAgICAgIGlmIChJU19FTVBUWV9JTlBVVCkge1xuICAgICAgICBkaXJ0eSA9ICc8IS0tPic7XG4gICAgICB9XG5cbiAgICAgIC8qIFN0cmluZ2lmeSwgaW4gY2FzZSBkaXJ0eSBpcyBhbiBvYmplY3QgKi9cbiAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnICYmICFfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgICBpZiAodHlwZW9mIGRpcnR5LnRvU3RyaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGlydHkgPSBkaXJ0eS50b1N0cmluZygpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ2RpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCd0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIFJldHVybiBkaXJ0eSBIVE1MIGlmIERPTVB1cmlmeSBjYW5ub3QgcnVuICovXG4gICAgICBpZiAoIURPTVB1cmlmeS5pc1N1cHBvcnRlZCkge1xuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFzc2lnbiBjb25maWcgdmFycyAqL1xuICAgICAgaWYgKCFTRVRfQ09ORklHKSB7XG4gICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgfVxuXG4gICAgICAvKiBDbGVhbiB1cCByZW1vdmVkIGVsZW1lbnRzICovXG4gICAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuXG4gICAgICAvKiBDaGVjayBpZiBkaXJ0eSBpcyBjb3JyZWN0bHkgdHlwZWQgZm9yIElOX1BMQUNFICovXG4gICAgICBpZiAodHlwZW9mIGRpcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBJTl9QTEFDRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgIC8qIERvIHNvbWUgZWFybHkgcHJlLXNhbml0aXphdGlvbiB0byBhdm9pZCB1bnNhZmUgcm9vdCBub2RlcyAqL1xuICAgICAgICBpZiAoZGlydHkubm9kZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoZGlydHkubm9kZU5hbWUpO1xuICAgICAgICAgIGlmICghQUxMT1dFRF9UQUdTW3RhZ05hbWVdIHx8IEZPUkJJRF9UQUdTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ3Jvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGlydHkgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIC8qIElmIGRpcnR5IGlzIGEgRE9NIGVsZW1lbnQsIGFwcGVuZCB0byBhbiBlbXB0eSBkb2N1bWVudCB0byBhdm9pZFxuICAgICAgICAgICBlbGVtZW50cyBiZWluZyBzdHJpcHBlZCBieSB0aGUgcGFyc2VyICovXG4gICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KCc8IS0tLS0+Jyk7XG4gICAgICAgIGltcG9ydGVkTm9kZSA9IGJvZHkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKGRpcnR5LCB0cnVlKTtcbiAgICAgICAgaWYgKGltcG9ydGVkTm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLmVsZW1lbnQgJiYgaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgICAvKiBOb2RlIGlzIGFscmVhZHkgYSBib2R5LCB1c2UgYXMgaXMgKi9cbiAgICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGltcG9ydGVkTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtYXBwZW5kXG4gICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChpbXBvcnRlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBFeGl0IGRpcmVjdGx5IGlmIHdlIGhhdmUgbm90aGluZyB0byBkbyAqL1xuICAgICAgICBpZiAoIVJFVFVSTl9ET00gJiYgIVNBRkVfRk9SX1RFTVBMQVRFUyAmJiAhV0hPTEVfRE9DVU1FTlQgJiZcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWluY2x1ZGVzXG4gICAgICAgIGRpcnR5LmluZGV4T2YoJzwnKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1c3RlZFR5cGVzUG9saWN5ICYmIFJFVFVSTl9UUlVTVEVEX1RZUEUgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSkgOiBkaXJ0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGRvY3VtZW50IHRvIHdvcmsgb24gKi9cbiAgICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoZGlydHkpO1xuXG4gICAgICAgIC8qIENoZWNrIHdlIGhhdmUgYSBET00gbm9kZSBmcm9tIHRoZSBkYXRhICovXG4gICAgICAgIGlmICghYm9keSkge1xuICAgICAgICAgIHJldHVybiBSRVRVUk5fRE9NID8gbnVsbCA6IFJFVFVSTl9UUlVTVEVEX1RZUEUgPyBlbXB0eUhUTUwgOiAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBSZW1vdmUgZmlyc3QgZWxlbWVudCBub2RlIChvdXJzKSBpZiBGT1JDRV9CT0RZIGlzIHNldCAqL1xuICAgICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoYm9keS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgLyogR2V0IG5vZGUgaXRlcmF0b3IgKi9cbiAgICAgIGNvbnN0IG5vZGVJdGVyYXRvciA9IF9jcmVhdGVOb2RlSXRlcmF0b3IoSU5fUExBQ0UgPyBkaXJ0eSA6IGJvZHkpO1xuXG4gICAgICAvKiBOb3cgc3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgKi9cbiAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSA9IG5vZGVJdGVyYXRvci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFNoYWRvdyBET00gZGV0ZWN0ZWQsIHNhbml0aXplIGl0ICovXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5jb250ZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShjdXJyZW50Tm9kZS5jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMsIHNhbml0aXplIGlmIG5lY2Vzc2FyeSAqL1xuICAgICAgICBfc2FuaXRpemVBdHRyaWJ1dGVzKGN1cnJlbnROb2RlKTtcbiAgICAgIH1cblxuICAgICAgLyogSWYgd2Ugc2FuaXRpemVkIGBkaXJ0eWAgaW4tcGxhY2UsIHJldHVybiBpdC4gKi9cbiAgICAgIGlmIChJTl9QTEFDRSkge1xuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgICB9XG5cbiAgICAgIC8qIFJldHVybiBzYW5pdGl6ZWQgc3RyaW5nIG9yIERPTSAqL1xuICAgICAgaWYgKFJFVFVSTl9ET00pIHtcbiAgICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICByZXR1cm5Ob2RlID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudC5jYWxsKGJvZHkub3duZXJEb2N1bWVudCk7XG4gICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICAgICAgcmV0dXJuTm9kZS5hcHBlbmRDaGlsZChib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Ob2RlID0gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3QgfHwgQUxMT1dFRF9BVFRSLnNoYWRvd3Jvb3Rtb2RlKSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIEFkb3B0Tm9kZSgpIGlzIG5vdCB1c2VkIGJlY2F1c2UgaW50ZXJuYWwgc3RhdGUgaXMgbm90IHJlc2V0XG4gICAgICAgICAgICAoZS5nLiB0aGUgcGFzdCBuYW1lcyBtYXAgb2YgYSBIVE1MRm9ybUVsZW1lbnQpLCB0aGlzIGlzIHNhZmVcbiAgICAgICAgICAgIGluIHRoZW9yeSBidXQgd2Ugd291bGQgcmF0aGVyIG5vdCByaXNrIGFub3RoZXIgYXR0YWNrIHZlY3Rvci5cbiAgICAgICAgICAgIFRoZSBzdGF0ZSB0aGF0IGlzIGNsb25lZCBieSBpbXBvcnROb2RlKCkgaXMgZXhwbGljaXRseSBkZWZpbmVkXG4gICAgICAgICAgICBieSB0aGUgc3BlY3MuXG4gICAgICAgICAgKi9cbiAgICAgICAgICByZXR1cm5Ob2RlID0gaW1wb3J0Tm9kZS5jYWxsKG9yaWdpbmFsRG9jdW1lbnQsIHJldHVybk5vZGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgICAgfVxuICAgICAgbGV0IHNlcmlhbGl6ZWRIVE1MID0gV0hPTEVfRE9DVU1FTlQgPyBib2R5Lm91dGVySFRNTCA6IGJvZHkuaW5uZXJIVE1MO1xuXG4gICAgICAvKiBTZXJpYWxpemUgZG9jdHlwZSBpZiBhbGxvd2VkICovXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQgJiYgQUxMT1dFRF9UQUdTWychZG9jdHlwZSddICYmIGJvZHkub3duZXJEb2N1bWVudCAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICYmIHJlZ0V4cFRlc3QoRE9DVFlQRV9OQU1FLCBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSkge1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9ICc8IURPQ1RZUEUgJyArIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgKyAnPlxcbicgKyBzZXJpYWxpemVkSFRNTDtcbiAgICAgIH1cblxuICAgICAgLyogU2FuaXRpemUgZmluYWwgc3RyaW5nIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgYXJyYXlGb3JFYWNoKFtNVVNUQUNIRV9FWFBSLCBFUkJfRVhQUiwgVE1QTElUX0VYUFJdLCBleHByID0+IHtcbiAgICAgICAgICBzZXJpYWxpemVkSFRNTCA9IHN0cmluZ1JlcGxhY2Uoc2VyaWFsaXplZEhUTUwsIGV4cHIsICcgJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoc2VyaWFsaXplZEhUTUwpIDogc2VyaWFsaXplZEhUTUw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIG9uY2VcbiAgICAgKiBzZXRDb25maWdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGNmZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgIFNFVF9DT05GSUcgPSB0cnVlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSB0aGUgY29uZmlndXJhdGlvblxuICAgICAqIGNsZWFyQ29uZmlnXG4gICAgICpcbiAgICAgKi9cbiAgICBET01QdXJpZnkuY2xlYXJDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBDT05GSUcgPSBudWxsO1xuICAgICAgU0VUX0NPTkZJRyA9IGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIGNoZWNrIGlmIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgKiBVc2VzIGxhc3Qgc2V0IGNvbmZpZywgaWYgYW55LiBPdGhlcndpc2UsIHVzZXMgY29uZmlnIGRlZmF1bHRzLlxuICAgICAqIGlzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gdGFnIFRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IGF0dHIgQXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cbiAgICBET01QdXJpZnkuaXNWYWxpZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICh0YWcsIGF0dHIsIHZhbHVlKSB7XG4gICAgICAvKiBJbml0aWFsaXplIHNoYXJlZCBjb25maWcgdmFycyBpZiBuZWNlc3NhcnkuICovXG4gICAgICBpZiAoIUNPTkZJRykge1xuICAgICAgICBfcGFyc2VDb25maWcoe30pO1xuICAgICAgfVxuICAgICAgY29uc3QgbGNUYWcgPSB0cmFuc2Zvcm1DYXNlRnVuYyh0YWcpO1xuICAgICAgY29uc3QgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoYXR0cik7XG4gICAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBZGRIb29rXG4gICAgICogUHVibGljIG1ldGhvZCB0byBhZGQgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICAgKi9cbiAgICBET01QdXJpZnkuYWRkSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50LCBob29rRnVuY3Rpb24pIHtcbiAgICAgIGlmICh0eXBlb2YgaG9va0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gaG9va3NbZW50cnlQb2ludF0gfHwgW107XG4gICAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIG1vcmUgYXJlIHByZXNlbnQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259IHJlbW92ZWQocG9wcGVkKSBob29rXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tzXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgYWxsIERPTVB1cmlmeSBob29rcyBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2tzIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIERPTVB1cmlmeS5yZW1vdmVIb29rcyA9IGZ1bmN0aW9uIChlbnRyeVBvaW50KSB7XG4gICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgaG9va3NbZW50cnlQb2ludF0gPSBbXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlQWxsSG9va3NcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhbGwgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUFsbEhvb2tzID0gZnVuY3Rpb24gKCkge1xuICAgICAgaG9va3MgPSB7fTtcbiAgICB9O1xuICAgIHJldHVybiBET01QdXJpZnk7XG4gIH1cbiAgdmFyIHB1cmlmeSA9IGNyZWF0ZURPTVB1cmlmeSgpO1xuXG4gIHJldHVybiBwdXJpZnk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1cmlmeS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBMZXhpbmcgb3IgcGFyc2luZyBwb3NpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBlcnJvciByZXBvcnRpbmcuXG4gKiBUaGlzIG9iamVjdCBpcyBpbW11dGFibGUuXG4gKi9cbmNsYXNzIFNvdXJjZUxvY2F0aW9uIHtcbiAgLy8gVGhlICsgcHJlZml4IGluZGljYXRlcyB0aGF0IHRoZXNlIGZpZWxkcyBhcmVuJ3Qgd3JpdGVhYmxlXG4gIC8vIExleGVyIGhvbGRpbmcgdGhlIGlucHV0IHN0cmluZy5cbiAgLy8gU3RhcnQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGluY2x1c2l2ZS5cbiAgLy8gRW5kIG9mZnNldCwgemVyby1iYXNlZCBleGNsdXNpdmUuXG4gIGNvbnN0cnVjdG9yKGxleGVyLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YXJ0ID0gdm9pZCAwO1xuICAgIHRoaXMuZW5kID0gdm9pZCAwO1xuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cbiAgLyoqXG4gICAqIE1lcmdlcyB0d28gYFNvdXJjZUxvY2F0aW9uYHMgZnJvbSBsb2NhdGlvbiBwcm92aWRlcnMsIGdpdmVuIHRoZXkgYXJlXG4gICAqIHByb3ZpZGVkIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UuXG4gICAqIC0gUmV0dXJucyB0aGUgZmlyc3Qgb25lJ3MgbG9jYXRpb24gaWYgb25seSB0aGUgZmlyc3QgaXMgcHJvdmlkZWQuXG4gICAqIC0gUmV0dXJucyBhIG1lcmdlZCByYW5nZSBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGlmIGJvdGggYXJlIHByb3ZpZGVkXG4gICAqICAgYW5kIHRoZWlyIGxleGVycyBtYXRjaC5cbiAgICogLSBPdGhlcndpc2UsIHJldHVybnMgbnVsbC5cbiAgICovXG5cblxuICBzdGF0aWMgcmFuZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmICghc2Vjb25kKSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QubG9jO1xuICAgIH0gZWxzZSBpZiAoIWZpcnN0IHx8ICFmaXJzdC5sb2MgfHwgIXNlY29uZC5sb2MgfHwgZmlyc3QubG9jLmxleGVyICE9PSBzZWNvbmQubG9jLmxleGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbihmaXJzdC5sb2MubGV4ZXIsIGZpcnN0LmxvYy5zdGFydCwgc2Vjb25kLmxvYy5lbmQpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcXVpcmVkIHRvIGJyZWFrIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBUb2tlbiwgTGV4ZXIsIGFuZFxuICogUGFyc2VFcnJvci5cbiAqL1xuXG4vKipcbiAqIFRoZSByZXN1bHRpbmcgdG9rZW4gcmV0dXJuZWQgZnJvbSBgbGV4YC5cbiAqXG4gKiBJdCBjb25zaXN0cyBvZiB0aGUgdG9rZW4gdGV4dCBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gKiBUaGUgcG9zaXRpb24gaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsbHkgYSByYW5nZSBpbiBhbiBpbnB1dCBzdHJpbmcsXG4gKiBidXQgaW5zdGVhZCBvZiByZWZlcmVuY2luZyB0aGUgYmFyZSBpbnB1dCBzdHJpbmcsIHdlIHJlZmVyIHRvIHRoZSBsZXhlci5cbiAqIFRoYXQgd2F5IGl0IGlzIHBvc3NpYmxlIHRvIGF0dGFjaCBleHRyYSBtZXRhZGF0YSB0byB0aGUgaW5wdXQgc3RyaW5nLFxuICogbGlrZSBmb3IgZXhhbXBsZSBhIGZpbGUgbmFtZSBvciBzaW1pbGFyLlxuICpcbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBvcHRpb25hbCwgc28gaXQgaXMgT0sgdG8gY29uc3RydWN0IHN5bnRoZXRpY1xuICogdG9rZW5zIGlmIGFwcHJvcHJpYXRlLiBOb3QgcHJvdmlkaW5nIGF2YWlsYWJsZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBtYXlcbiAqIGxlYWQgdG8gZGVncmFkZWQgZXJyb3IgcmVwb3J0aW5nLCB0aG91Z2guXG4gKi9cbmNsYXNzIFRva2VuIHtcbiAgLy8gZG9uJ3QgZXhwYW5kIHRoZSB0b2tlblxuICAvLyB1c2VkIGluIFxcbm9leHBhbmRcbiAgY29uc3RydWN0b3IodGV4dCwgLy8gdGhlIHRleHQgb2YgdGhpcyB0b2tlblxuICBsb2MpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5sb2MgPSB2b2lkIDA7XG4gICAgdGhpcy5ub2V4cGFuZCA9IHZvaWQgMDtcbiAgICB0aGlzLnRyZWF0QXNSZWxheCA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMubG9jID0gbG9jO1xuICB9XG4gIC8qKlxuICAgKiBHaXZlbiBhIHBhaXIgb2YgdG9rZW5zICh0aGlzIGFuZCBlbmRUb2tlbiksIGNvbXB1dGUgYSBgVG9rZW5gIGVuY29tcGFzc2luZ1xuICAgKiB0aGUgd2hvbGUgaW5wdXQgcmFuZ2UgZW5jbG9zZWQgYnkgdGhlc2UgdHdvLlxuICAgKi9cblxuXG4gIHJhbmdlKGVuZFRva2VuLCAvLyBsYXN0IHRva2VuIG9mIHRoZSByYW5nZSwgaW5jbHVzaXZlXG4gIHRleHQgLy8gdGhlIHRleHQgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHRva2VuXG4gICkge1xuICAgIHJldHVybiBuZXcgVG9rZW4odGV4dCwgU291cmNlTG9jYXRpb24ucmFuZ2UodGhpcywgZW5kVG9rZW4pKTtcbiAgfVxuXG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgUGFyc2VFcnJvciBjbGFzcywgd2hpY2ggaXMgdGhlIG1haW4gZXJyb3IgdGhyb3duIGJ5IEthVGVYXG4gKiBmdW5jdGlvbnMgd2hlbiBzb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcuIFRoaXMgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBpbnRlcm5hbFxuICogZXJyb3JzIGZyb20gZXJyb3JzIGluIHRoZSBleHByZXNzaW9uIHRoYXQgdGhlIHVzZXIgcHJvdmlkZWQuXG4gKlxuICogSWYgcG9zc2libGUsIGEgY2FsbGVyIHNob3VsZCBwcm92aWRlIGEgVG9rZW4gb3IgUGFyc2VOb2RlIHdpdGggaW5mb3JtYXRpb25cbiAqIGFib3V0IHdoZXJlIGluIHRoZSBzb3VyY2Ugc3RyaW5nIHRoZSBwcm9ibGVtIG9jY3VycmVkLlxuICovXG5jbGFzcyBQYXJzZUVycm9yIHtcbiAgLy8gRXJyb3Igc3RhcnQgcG9zaXRpb24gYmFzZWQgb24gcGFzc2VkLWluIFRva2VuIG9yIFBhcnNlTm9kZS5cbiAgLy8gTGVuZ3RoIG9mIGFmZmVjdGVkIHRleHQgYmFzZWQgb24gcGFzc2VkLWluIFRva2VuIG9yIFBhcnNlTm9kZS5cbiAgLy8gVGhlIHVuZGVybHlpbmcgZXJyb3IgbWVzc2FnZSB3aXRob3V0IGFueSBjb250ZXh0IGFkZGVkLlxuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCAvLyBUaGUgZXJyb3IgbWVzc2FnZVxuICB0b2tlbiAvLyBBbiBvYmplY3QgcHJvdmlkaW5nIHBvc2l0aW9uIGluZm9ybWF0aW9uXG4gICkge1xuICAgIHRoaXMubmFtZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBvc2l0aW9uID0gdm9pZCAwO1xuICAgIHRoaXMubGVuZ3RoID0gdm9pZCAwO1xuICAgIHRoaXMucmF3TWVzc2FnZSA9IHZvaWQgMDtcbiAgICB2YXIgZXJyb3IgPSBcIkthVGVYIHBhcnNlIGVycm9yOiBcIiArIG1lc3NhZ2U7XG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBlbmQ7XG4gICAgdmFyIGxvYyA9IHRva2VuICYmIHRva2VuLmxvYztcblxuICAgIGlmIChsb2MgJiYgbG9jLnN0YXJ0IDw9IGxvYy5lbmQpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uLCBtYWtlIHRoZSBlcnJvciBhIGJpdCBmYW5jaWVyXG4gICAgICAvLyBHZXQgdGhlIGlucHV0XG4gICAgICB2YXIgaW5wdXQgPSBsb2MubGV4ZXIuaW5wdXQ7IC8vIFByZXBlbmQgc29tZSBpbmZvcm1hdGlvblxuXG4gICAgICBzdGFydCA9IGxvYy5zdGFydDtcbiAgICAgIGVuZCA9IGxvYy5lbmQ7XG5cbiAgICAgIGlmIChzdGFydCA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIGVycm9yICs9IFwiIGF0IGVuZCBvZiBpbnB1dDogXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciArPSBcIiBhdCBwb3NpdGlvbiBcIiArIChzdGFydCArIDEpICsgXCI6IFwiO1xuICAgICAgfSAvLyBVbmRlcmxpbmUgdG9rZW4gaW4gcXVlc3Rpb24gdXNpbmcgY29tYmluaW5nIHVuZGVyc2NvcmVzXG5cblxuICAgICAgdmFyIHVuZGVybGluZWQgPSBpbnB1dC5zbGljZShzdGFydCwgZW5kKS5yZXBsYWNlKC9bXl0vZywgXCIkJlxcdTAzMzJcIik7IC8vIEV4dHJhY3Qgc29tZSBjb250ZXh0IGZyb20gdGhlIGlucHV0IGFuZCBhZGQgaXQgdG8gdGhlIGVycm9yXG5cbiAgICAgIHZhciBsZWZ0O1xuXG4gICAgICBpZiAoc3RhcnQgPiAxNSkge1xuICAgICAgICBsZWZ0ID0gXCLigKZcIiArIGlucHV0LnNsaWNlKHN0YXJ0IC0gMTUsIHN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBpbnB1dC5zbGljZSgwLCBzdGFydCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodDtcblxuICAgICAgaWYgKGVuZCArIDE1IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHJpZ2h0ID0gaW5wdXQuc2xpY2UoZW5kLCBlbmQgKyAxNSkgKyBcIuKAplwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQpO1xuICAgICAgfVxuXG4gICAgICBlcnJvciArPSBsZWZ0ICsgdW5kZXJsaW5lZCArIHJpZ2h0O1xuICAgIH0gLy8gU29tZSBoYWNrZXJ5IHRvIG1ha2UgUGFyc2VFcnJvciBhIHByb3RvdHlwZSBvZiBFcnJvclxuICAgIC8vIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84NDYwNzUzXG4gICAgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICB2YXIgc2VsZiA9IG5ldyBFcnJvcihlcnJvcik7XG4gICAgc2VsZi5uYW1lID0gXCJQYXJzZUVycm9yXCI7IC8vICRGbG93Rml4TWVcblxuICAgIHNlbGYuX19wcm90b19fID0gUGFyc2VFcnJvci5wcm90b3R5cGU7XG4gICAgc2VsZi5wb3NpdGlvbiA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0YXJ0ICE9IG51bGwgJiYgZW5kICE9IG51bGwpIHtcbiAgICAgIHNlbGYubGVuZ3RoID0gZW5kIC0gc3RhcnQ7XG4gICAgfVxuXG4gICAgc2VsZi5yYXdNZXNzYWdlID0gbWVzc2FnZTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG59IC8vICRGbG93Rml4TWUgTW9yZSBoYWNrZXJ5XG5cblxuUGFyc2VFcnJvci5wcm90b3R5cGUuX19wcm90b19fID0gRXJyb3IucHJvdG90eXBlO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHVzZWZ1bCBpbiBvdGhlclxuICogZmlsZXMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBhIGxpc3RcbiAqL1xudmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnMobGlzdCwgZWxlbSkge1xuICByZXR1cm4gbGlzdC5pbmRleE9mKGVsZW0pICE9PSAtMTtcbn07XG4vKipcbiAqIFByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlIGlmIGEgc2V0dGluZyBpcyB1bmRlZmluZWRcbiAqIE5PVEU6IENvdWxkbid0IHVzZSBgVGAgYXMgdGhlIG91dHB1dCB0eXBlIGR1ZSB0byBmYWNlYm9vay9mbG93IzUwMjIuXG4gKi9cblxuXG52YXIgZGVmbHQgPSBmdW5jdGlvbiBkZWZsdChzZXR0aW5nLCBkZWZhdWx0SWZVbmRlZmluZWQpIHtcbiAgcmV0dXJuIHNldHRpbmcgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRJZlVuZGVmaW5lZCA6IHNldHRpbmc7XG59OyAvLyBoeXBoZW5hdGUgYW5kIGVzY2FwZSBhZGFwdGVkIGZyb20gRmFjZWJvb2sncyBSZWFjdCB1bmRlciBBcGFjaGUgMiBsaWNlbnNlXG5cblxudmFyIHVwcGVyY2FzZSA9IC8oW0EtWl0pL2c7XG5cbnZhciBoeXBoZW5hdGUgPSBmdW5jdGlvbiBoeXBoZW5hdGUoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSh1cHBlcmNhc2UsIFwiLSQxXCIpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgRVNDQVBFX0xPT0tVUCA9IHtcbiAgXCImXCI6IFwiJmFtcDtcIixcbiAgXCI+XCI6IFwiJmd0O1wiLFxuICBcIjxcIjogXCImbHQ7XCIsXG4gIFwiXFxcIlwiOiBcIiZxdW90O1wiLFxuICBcIidcIjogXCImI3gyNztcIlxufTtcbnZhciBFU0NBUEVfUkVHRVggPSAvWyY+PFwiJ10vZztcbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKHRleHQpIHtcbiAgcmV0dXJuIFN0cmluZyh0ZXh0KS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgbWF0Y2ggPT4gRVNDQVBFX0xPT0tVUFttYXRjaF0pO1xufVxuLyoqXG4gKiBTb21ldGltZXMgd2Ugd2FudCB0byBwdWxsIG91dCB0aGUgaW5uZXJtb3N0IGVsZW1lbnQgb2YgYSBncm91cC4gSW4gbW9zdFxuICogY2FzZXMsIHRoaXMgd2lsbCBqdXN0IGJlIHRoZSBncm91cCBpdHNlbGYsIGJ1dCB3aGVuIG9yZGdyb3VwcyBhbmQgY29sb3JzIGhhdmVcbiAqIGEgc2luZ2xlIGVsZW1lbnQsIHdlIHdhbnQgdG8gcHVsbCB0aGF0IG91dC5cbiAqL1xuXG5cbnZhciBnZXRCYXNlRWxlbSA9IGZ1bmN0aW9uIGdldEJhc2VFbGVtKGdyb3VwKSB7XG4gIGlmIChncm91cC50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICBpZiAoZ3JvdXAuYm9keS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBnZXRCYXNlRWxlbShncm91cC5ib2R5WzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcImNvbG9yXCIpIHtcbiAgICBpZiAoZ3JvdXAuYm9keS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBnZXRCYXNlRWxlbShncm91cC5ib2R5WzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcImZvbnRcIikge1xuICAgIHJldHVybiBnZXRCYXNlRWxlbShncm91cC5ib2R5KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH1cbn07XG4vKipcbiAqIFRlWGJvb2sgYWxnb3JpdGhtcyBvZnRlbiByZWZlcmVuY2UgXCJjaGFyYWN0ZXIgYm94ZXNcIiwgd2hpY2ggYXJlIHNpbXBseSBncm91cHNcbiAqIHdpdGggYSBzaW5nbGUgY2hhcmFjdGVyIGluIHRoZW0uIFRvIGRlY2lkZSBpZiBzb21ldGhpbmcgaXMgYSBjaGFyYWN0ZXIgYm94LFxuICogd2UgZmluZCBpdHMgaW5uZXJtb3N0IGdyb3VwLCBhbmQgc2VlIGlmIGl0IGlzIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqL1xuXG5cbnZhciBpc0NoYXJhY3RlckJveCA9IGZ1bmN0aW9uIGlzQ2hhcmFjdGVyQm94KGdyb3VwKSB7XG4gIHZhciBiYXNlRWxlbSA9IGdldEJhc2VFbGVtKGdyb3VwKTsgLy8gVGhlc2UgYXJlIGFsbCB0aGV5IHR5cGVzIG9mIGdyb3VwcyB3aGljaCBob2xkIHNpbmdsZSBjaGFyYWN0ZXJzXG5cbiAgcmV0dXJuIGJhc2VFbGVtLnR5cGUgPT09IFwibWF0aG9yZFwiIHx8IGJhc2VFbGVtLnR5cGUgPT09IFwidGV4dG9yZFwiIHx8IGJhc2VFbGVtLnR5cGUgPT09IFwiYXRvbVwiO1xufTtcblxudmFyIGFzc2VydCA9IGZ1bmN0aW9uIGFzc2VydCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBub24tbnVsbCwgYnV0IGdvdCAnICsgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuLyoqXG4gKiBSZXR1cm4gdGhlIHByb3RvY29sIG9mIGEgVVJMLCBvciBcIl9yZWxhdGl2ZVwiIGlmIHRoZSBVUkwgZG9lcyBub3Qgc3BlY2lmeSBhXG4gKiBwcm90b2NvbCAoYW5kIHRodXMgaXMgcmVsYXRpdmUpLCBvciBgbnVsbGAgaWYgVVJMIGhhcyBpbnZhbGlkIHByb3RvY29sXG4gKiAoc28gc2hvdWxkIGJlIG91dHJpZ2h0IHJlamVjdGVkKS5cbiAqL1xuXG52YXIgcHJvdG9jb2xGcm9tVXJsID0gZnVuY3Rpb24gcHJvdG9jb2xGcm9tVXJsKHVybCkge1xuICAvLyBDaGVjayBmb3IgcG9zc2libGUgbGVhZGluZyBwcm90b2NvbC5cbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZyBzdHJpcHMgbGVhZGluZyB3aGl0ZXNwYWNlXG4gIC8vIChVKzIwKSBvciBDMCBjb250cm9sIChVKzAwLVUrMUYpIGNoYXJhY3RlcnMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gIHZhciBwcm90b2NvbCA9IC9eW1xceDAwLVxceDIwXSooW15cXFxcLyM/XSo/KSg6fCYjMCo1OHwmI3gwKjNhfCZjb2xvbikvaS5leGVjKHVybCk7XG5cbiAgaWYgKCFwcm90b2NvbCkge1xuICAgIHJldHVybiBcIl9yZWxhdGl2ZVwiO1xuICB9IC8vIFJlamVjdCB3ZWlyZCBjb2xvbnNcblxuXG4gIGlmIChwcm90b2NvbFsyXSAhPT0gXCI6XCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBSZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzIGluIHNjaGVtZSBhY2NvcmRpbmcgdG9cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG5cblxuICBpZiAoIS9eW2EtekEtWl1bYS16QS1aMC05K1xcLS5dKiQvLnRlc3QocHJvdG9jb2xbMV0pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTG93ZXJjYXNlIHRoZSBwcm90b2NvbFxuXG5cbiAgcmV0dXJuIHByb3RvY29sWzFdLnRvTG93ZXJDYXNlKCk7XG59O1xudmFyIHV0aWxzID0ge1xuICBjb250YWlucyxcbiAgZGVmbHQsXG4gIGVzY2FwZSxcbiAgaHlwaGVuYXRlLFxuICBnZXRCYXNlRWxlbSxcbiAgaXNDaGFyYWN0ZXJCb3gsXG4gIHByb3RvY29sRnJvbVVybFxufTtcblxuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuLy8gVE9ETzogYXV0b21hdGljYWxseSBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uXG4vLyBUT0RPOiBjaGVjayBhbGwgcHJvcGVydGllcyBvbiBTZXR0aW5ncyBleGlzdFxuLy8gVE9ETzogY2hlY2sgdGhlIHR5cGUgb2YgYSBwcm9wZXJ0eSBvbiBTZXR0aW5ncyBtYXRjaGVzXG52YXIgU0VUVElOR1NfU0NIRU1BID0ge1xuICBkaXNwbGF5TW9kZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBtYXRoIGluIGRpc3BsYXkgbW9kZSwgd2hpY2ggcHV0cyB0aGUgbWF0aCBpbiBcIiArIFwiZGlzcGxheSBzdHlsZSAoc28gXFxcXGludCBhbmQgXFxcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIFwiICsgXCJjZW50ZXJzIHRoZSBtYXRoIG9uIHRoZSBwYWdlIG9uIGl0cyBvd24gbGluZS5cIixcbiAgICBjbGk6IFwiLWQsIC0tZGlzcGxheS1tb2RlXCJcbiAgfSxcbiAgb3V0cHV0OiB7XG4gICAgdHlwZToge1xuICAgICAgZW51bTogW1wiaHRtbEFuZE1hdGhtbFwiLCBcImh0bWxcIiwgXCJtYXRobWxcIl1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiBcIkRldGVybWluZXMgdGhlIG1hcmt1cCBsYW5ndWFnZSBvZiB0aGUgb3V0cHV0LlwiLFxuICAgIGNsaTogXCItRiwgLS1mb3JtYXQgPHR5cGU+XCJcbiAgfSxcbiAgbGVxbm86IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJSZW5kZXIgZGlzcGxheSBtYXRoIGluIGxlcW5vIHN0eWxlIChsZWZ0LWp1c3RpZmllZCB0YWdzKS5cIlxuICB9LFxuICBmbGVxbjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBkaXNwbGF5IG1hdGggZmx1c2ggbGVmdC5cIlxuICB9LFxuICB0aHJvd09uRXJyb3I6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICAgIGNsaTogXCItdCwgLS1uby10aHJvdy1vbi1lcnJvclwiLFxuICAgIGNsaURlc2NyaXB0aW9uOiBcIlJlbmRlciBlcnJvcnMgKGluIHRoZSBjb2xvciBnaXZlbiBieSAtLWVycm9yLWNvbG9yKSBpbnNcIiArIFwidGVhZCBvZiB0aHJvd2luZyBhIFBhcnNlRXJyb3IgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yLlwiXG4gIH0sXG4gIGVycm9yQ29sb3I6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiI2NjMDAwMFwiLFxuICAgIGNsaTogXCItYywgLS1lcnJvci1jb2xvciA8Y29sb3I+XCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiQSBjb2xvciBzdHJpbmcgZ2l2ZW4gaW4gdGhlIGZvcm1hdCAncmdiJyBvciAncnJnZ2JiJyBcIiArIFwiKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIFwiICsgXCItdCBvcHRpb24uXCIsXG4gICAgY2xpUHJvY2Vzc29yOiBjb2xvciA9PiBcIiNcIiArIGNvbG9yXG4gIH0sXG4gIG1hY3Jvczoge1xuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgY2xpOiBcIi1tLCAtLW1hY3JvIDxkZWY+XCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiRGVmaW5lIGN1c3RvbSBtYWNybyBvZiB0aGUgZm9ybSAnXFxcXGZvbzpleHBhbnNpb24nICh1c2UgXCIgKyBcIm11bHRpcGxlIC1tIGFyZ3VtZW50cyBmb3IgbXVsdGlwbGUgbWFjcm9zKS5cIixcbiAgICBjbGlEZWZhdWx0OiBbXSxcbiAgICBjbGlQcm9jZXNzb3I6IChkZWYsIGRlZnMpID0+IHtcbiAgICAgIGRlZnMucHVzaChkZWYpO1xuICAgICAgcmV0dXJuIGRlZnM7XG4gICAgfVxuICB9LFxuICBtaW5SdWxlVGhpY2tuZXNzOiB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTcGVjaWZpZXMgYSBtaW5pbXVtIHRoaWNrbmVzcywgaW4gZW1zLCBmb3IgZnJhY3Rpb24gbGluZXMsXCIgKyBcIiBgXFxcXHNxcnRgIHRvcCBsaW5lcywgYHthcnJheX1gIHZlcnRpY2FsIGxpbmVzLCBgXFxcXGhsaW5lYCwgXCIgKyBcImBcXFxcaGRhc2hsaW5lYCwgYFxcXFx1bmRlcmxpbmVgLCBgXFxcXG92ZXJsaW5lYCwgYW5kIHRoZSBib3JkZXJzIG9mIFwiICsgXCJgXFxcXGZib3hgLCBgXFxcXGJveGVkYCwgYW5kIGBcXFxcZmNvbG9yYm94YC5cIixcbiAgICBwcm9jZXNzb3I6IHQgPT4gTWF0aC5tYXgoMCwgdCksXG4gICAgY2xpOiBcIi0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPlwiLFxuICAgIGNsaVByb2Nlc3NvcjogcGFyc2VGbG9hdFxuICB9LFxuICBjb2xvcklzVGV4dENvbG9yOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiTWFrZXMgXFxcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXFxcdGV4dGNvbG9yLCBcIiArIFwiaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXFxcY29sb3IgbW9kZSBjaGFuZ2UuXCIsXG4gICAgY2xpOiBcIi1iLCAtLWNvbG9yLWlzLXRleHQtY29sb3JcIlxuICB9LFxuICBzdHJpY3Q6IHtcbiAgICB0eXBlOiBbe1xuICAgICAgZW51bTogW1wid2FyblwiLCBcImlnbm9yZVwiLCBcImVycm9yXCJdXG4gICAgfSwgXCJib29sZWFuXCIsIFwiZnVuY3Rpb25cIl0sXG4gICAgZGVzY3JpcHRpb246IFwiVHVybiBvbiBzdHJpY3QgLyBMYVRlWCBmYWl0aGZ1bG5lc3MgbW9kZSwgd2hpY2ggdGhyb3dzIGFuIFwiICsgXCJlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLlwiLFxuICAgIGNsaTogXCItUywgLS1zdHJpY3RcIixcbiAgICBjbGlEZWZhdWx0OiBmYWxzZVxuICB9LFxuICB0cnVzdDoge1xuICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJmdW5jdGlvblwiXSxcbiAgICBkZXNjcmlwdGlvbjogXCJUcnVzdCB0aGUgaW5wdXQsIGVuYWJsaW5nIGFsbCBIVE1MIGZlYXR1cmVzIHN1Y2ggYXMgXFxcXHVybC5cIixcbiAgICBjbGk6IFwiLVQsIC0tdHJ1c3RcIlxuICB9LFxuICBtYXhTaXplOiB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBkZWZhdWx0OiBJbmZpbml0eSxcbiAgICBkZXNjcmlwdGlvbjogXCJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFwiICsgXCJcXFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBcIiArIFwiZWxlbWVudHMgYW5kIHNwYWNlcyBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2VcIixcbiAgICBwcm9jZXNzb3I6IHMgPT4gTWF0aC5tYXgoMCwgcyksXG4gICAgY2xpOiBcIi1zLCAtLW1heC1zaXplIDxuPlwiLFxuICAgIGNsaVByb2Nlc3NvcjogcGFyc2VJbnRcbiAgfSxcbiAgbWF4RXhwYW5kOiB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBkZWZhdWx0OiAxMDAwLFxuICAgIGRlc2NyaXB0aW9uOiBcIkxpbWl0IHRoZSBudW1iZXIgb2YgbWFjcm8gZXhwYW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIFwiICsgXCJudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCBcIiArIFwidGhlIG1hY3JvIGV4cGFuZGVyIHdpbGwgdHJ5IHRvIGZ1bGx5IGV4cGFuZCBhcyBpbiBMYVRlWC5cIixcbiAgICBwcm9jZXNzb3I6IG4gPT4gTWF0aC5tYXgoMCwgbiksXG4gICAgY2xpOiBcIi1lLCAtLW1heC1leHBhbmQgPG4+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBuID0+IG4gPT09IFwiSW5maW5pdHlcIiA/IEluZmluaXR5IDogcGFyc2VJbnQobilcbiAgfSxcbiAgZ2xvYmFsR3JvdXA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBjbGk6IGZhbHNlXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5kZWZhdWx0KSB7XG4gICAgcmV0dXJuIHNjaGVtYS5kZWZhdWx0O1xuICB9XG5cbiAgdmFyIHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgdmFyIGRlZmF1bHRUeXBlID0gQXJyYXkuaXNBcnJheSh0eXBlKSA/IHR5cGVbMF0gOiB0eXBlO1xuXG4gIGlmICh0eXBlb2YgZGVmYXVsdFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRUeXBlLmVudW1bMF07XG4gIH1cblxuICBzd2l0Y2ggKGRlZmF1bHRUeXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuICcnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiAwO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuLyoqXG4gKiBUaGUgbWFpbiBTZXR0aW5ncyBvYmplY3RcbiAqXG4gKiBUaGUgY3VycmVudCBvcHRpb25zIHN0b3JlZCBhcmU6XG4gKiAgLSBkaXNwbGF5TW9kZTogV2hldGhlciB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHlwZXNldCBhcyBpbmxpbmUgbWF0aFxuICogICAgICAgICAgICAgICAgIChmYWxzZSwgdGhlIGRlZmF1bHQpLCBtZWFuaW5nIHRoYXQgdGhlIG1hdGggc3RhcnRzIGluXG4gKiAgICAgICAgICAgICAgICAgXFx0ZXh0c3R5bGUgYW5kIGlzIHBsYWNlZCBpbiBhbiBpbmxpbmUtYmxvY2spOyBvciBhcyBkaXNwbGF5XG4gKiAgICAgICAgICAgICAgICAgbWF0aCAodHJ1ZSksIG1lYW5pbmcgdGhhdCB0aGUgbWF0aCBzdGFydHMgaW4gXFxkaXNwbGF5c3R5bGVcbiAqICAgICAgICAgICAgICAgICBhbmQgaXMgcGxhY2VkIGluIGEgYmxvY2sgd2l0aCB2ZXJ0aWNhbCBtYXJnaW4uXG4gKi9cblxuXG5jbGFzcyBTZXR0aW5ncyB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlNb2RlID0gdm9pZCAwO1xuICAgIHRoaXMub3V0cHV0ID0gdm9pZCAwO1xuICAgIHRoaXMubGVxbm8gPSB2b2lkIDA7XG4gICAgdGhpcy5mbGVxbiA9IHZvaWQgMDtcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHZvaWQgMDtcbiAgICB0aGlzLmVycm9yQ29sb3IgPSB2b2lkIDA7XG4gICAgdGhpcy5tYWNyb3MgPSB2b2lkIDA7XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gdm9pZCAwO1xuICAgIHRoaXMuY29sb3JJc1RleHRDb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLnN0cmljdCA9IHZvaWQgMDtcbiAgICB0aGlzLnRydXN0ID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEV4cGFuZCA9IHZvaWQgMDtcbiAgICB0aGlzLmdsb2JhbEdyb3VwID0gdm9pZCAwO1xuICAgIC8vIGFsbG93IG51bGwgb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgZm9yICh2YXIgcHJvcCBpbiBTRVRUSU5HU19TQ0hFTUEpIHtcbiAgICAgIGlmIChTRVRUSU5HU19TQ0hFTUEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICB2YXIgc2NoZW1hID0gU0VUVElOR1NfU0NIRU1BW3Byb3BdOyAvLyBUT0RPOiB2YWxpZGF0ZSBvcHRpb25zXG4gICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICB0aGlzW3Byb3BdID0gb3B0aW9uc1twcm9wXSAhPT0gdW5kZWZpbmVkID8gc2NoZW1hLnByb2Nlc3NvciA/IHNjaGVtYS5wcm9jZXNzb3Iob3B0aW9uc1twcm9wXSkgOiBvcHRpb25zW3Byb3BdIDogZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXBvcnQgbm9uc3RyaWN0IChub24tTGFUZVgtY29tcGF0aWJsZSkgaW5wdXQuXG4gICAqIENhbiBzYWZlbHkgbm90IGJlIGNhbGxlZCBpZiBgdGhpcy5zdHJpY3RgIGlzIGZhbHNlIGluIEphdmFTY3JpcHQuXG4gICAqL1xuXG5cbiAgcmVwb3J0Tm9uc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKSB7XG4gICAgdmFyIHN0cmljdCA9IHRoaXMuc3RyaWN0O1xuXG4gICAgaWYgKHR5cGVvZiBzdHJpY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gQWxsb3cgcmV0dXJuIHZhbHVlIG9mIHN0cmljdCBmdW5jdGlvbiB0byBiZSBib29sZWFuIG9yIHN0cmluZ1xuICAgICAgLy8gKG9yIG51bGwvdW5kZWZpbmVkLCBtZWFuaW5nIG5vIGZ1cnRoZXIgcHJvY2Vzc2luZykuXG4gICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6IFwiICsgKGVycm9yTXNnICsgXCIgW1wiICsgZXJyb3JDb2RlICsgXCJdXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmIChzdHJpY3QgPT09IFwid2FyblwiKSB7XG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6IFwiICsgKGVycm9yTXNnICsgXCIgW1wiICsgZXJyb3JDb2RlICsgXCJdXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd29uJ3QgaGFwcGVuIGluIHR5cGUtc2FmZSBjb2RlXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byBcIiArIChcInVucmVjb2duaXplZCAnXCIgKyBzdHJpY3QgKyBcIic6IFwiICsgZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0byBhcHBseSBzdHJpY3QgKExhVGVYLWFkaGVyaW5nKSBiZWhhdmlvciBmb3IgdW51c3VhbFxuICAgKiBpbnB1dCAobGlrZSBgXFxcXGApLiAgVW5saWtlIGBub25zdHJpY3RgLCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvcjtcbiAgICogaW5zdGVhZCwgXCJlcnJvclwiIHRyYW5zbGF0ZXMgdG8gYSByZXR1cm4gdmFsdWUgb2YgYHRydWVgLCB3aGlsZSBcImlnbm9yZVwiXG4gICAqIHRyYW5zbGF0ZXMgdG8gYSByZXR1cm4gdmFsdWUgb2YgYGZhbHNlYC4gIE1heSBzdGlsbCBwcmludCBhIHdhcm5pbmc6XG4gICAqIFwid2FyblwiIHByaW50cyBhIHdhcm5pbmcgYW5kIHJldHVybnMgYGZhbHNlYC5cbiAgICogVGhpcyBpcyBmb3IgdGhlIHNlY29uZCBjYXRlZ29yeSBvZiBgZXJyb3JDb2RlYHMgbGlzdGVkIGluIHRoZSBSRUFETUUuXG4gICAqL1xuXG5cbiAgdXNlU3RyaWN0QmVoYXZpb3IoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pIHtcbiAgICB2YXIgc3RyaWN0ID0gdGhpcy5zdHJpY3Q7XG5cbiAgICBpZiAodHlwZW9mIHN0cmljdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBBbGxvdyByZXR1cm4gdmFsdWUgb2Ygc3RyaWN0IGZ1bmN0aW9uIHRvIGJlIGJvb2xlYW4gb3Igc3RyaW5nXG4gICAgICAvLyAob3IgbnVsbC91bmRlZmluZWQsIG1lYW5pbmcgbm8gZnVydGhlciBwcm9jZXNzaW5nKS5cbiAgICAgIC8vIEJ1dCBjYXRjaCBhbnkgZXhjZXB0aW9ucyB0aHJvd24gYnkgZnVuY3Rpb24sIHRyZWF0aW5nIHRoZW1cbiAgICAgIC8vIGxpa2UgXCJlcnJvclwiLlxuICAgICAgdHJ5IHtcbiAgICAgICAgc3RyaWN0ID0gc3RyaWN0KGVycm9yQ29kZSwgZXJyb3JNc2csIHRva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmljdCA9IFwiZXJyb3JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXN0cmljdCB8fCBzdHJpY3QgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gdHJ1ZSB8fCBzdHJpY3QgPT09IFwiZXJyb3JcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChzdHJpY3QgPT09IFwid2FyblwiKSB7XG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6IFwiICsgKGVycm9yTXNnICsgXCIgW1wiICsgZXJyb3JDb2RlICsgXCJdXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd29uJ3QgaGFwcGVuIGluIHR5cGUtc2FmZSBjb2RlXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byBcIiArIChcInVucmVjb2duaXplZCAnXCIgKyBzdHJpY3QgKyBcIic6IFwiICsgZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0byB0ZXN0IHBvdGVudGlhbGx5IGRhbmdlcm91cyBpbnB1dCwgYW5kIHJldHVyblxuICAgKiBgdHJ1ZWAgKHRydXN0ZWQpIG9yIGBmYWxzZWAgKHVudHJ1c3RlZCkuICBUaGUgc29sZSBhcmd1bWVudCBgY29udGV4dGBcbiAgICogc2hvdWxkIGJlIGFuIG9iamVjdCB3aXRoIGBjb21tYW5kYCBmaWVsZCBzcGVjaWZ5aW5nIHRoZSByZWxldmFudCBMYVRlWFxuICAgKiBjb21tYW5kIChhcyBhIHN0cmluZyBzdGFydGluZyB3aXRoIGBcXGApLCBhbmQgYW55IG90aGVyIGFyZ3VtZW50cywgZXRjLlxuICAgKiBJZiBgY29udGV4dGAgaGFzIGEgYHVybGAgZmllbGQsIGEgYHByb3RvY29sYCBmaWVsZCB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICogZ2V0IGFkZGVkIGJ5IHRoaXMgZnVuY3Rpb24gKGNoYW5naW5nIHRoZSBzcGVjaWZpZWQgb2JqZWN0KS5cbiAgICovXG5cblxuICBpc1RydXN0ZWQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0LnVybCAmJiAhY29udGV4dC5wcm90b2NvbCkge1xuICAgICAgdmFyIHByb3RvY29sID0gdXRpbHMucHJvdG9jb2xGcm9tVXJsKGNvbnRleHQudXJsKTtcblxuICAgICAgaWYgKHByb3RvY29sID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnByb3RvY29sID0gcHJvdG9jb2w7XG4gICAgfVxuXG4gICAgdmFyIHRydXN0ID0gdHlwZW9mIHRoaXMudHJ1c3QgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXMudHJ1c3QoY29udGV4dCkgOiB0aGlzLnRydXN0O1xuICAgIHJldHVybiBCb29sZWFuKHRydXN0KTtcbiAgfVxuXG59XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFuZCBjbGFzc2VzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZiBzdHlsZXNcbiAqIHVzZWQgaW4gVGVYLiBJdCBwcm92aWRlcyBhIGdlbmVyaWMgYFN0eWxlYCBjbGFzcywgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGEgc3BlY2lmaWMgc3R5bGUuIEl0IHRoZW4gcHJvdmlkZXMgaW5zdGFuY2VzIG9mIGFsbCB0aGUgZGlmZmVyZW50IGtpbmRzXG4gKiBvZiBzdHlsZXMgcG9zc2libGUsIGFuZCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbW92ZSBiZXR3ZWVuIHRoZW0gYW5kIGdldFxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAqL1xuXG4vKipcbiAqIFRoZSBtYWluIHN0eWxlIGNsYXNzLiBDb250YWlucyBhIHVuaXF1ZSBpZCBmb3IgdGhlIHN0eWxlLCBhIHNpemUgKHdoaWNoIGlzXG4gKiB0aGUgc2FtZSBmb3IgY3JhbXBlZCBhbmQgdW5jcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSksIGFuZCBhIGNyYW1wZWQgZmxhZy5cbiAqL1xuY2xhc3MgU3R5bGUge1xuICBjb25zdHJ1Y3RvcihpZCwgc2l6ZSwgY3JhbXBlZCkge1xuICAgIHRoaXMuaWQgPSB2b2lkIDA7XG4gICAgdGhpcy5zaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY3JhbXBlZCA9IHZvaWQgMDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICB0aGlzLmNyYW1wZWQgPSBjcmFtcGVkO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgc3VwZXJzY3JpcHQgZ2l2ZW4gYSBiYXNlIGluIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgKi9cblxuXG4gIHN1cCgpIHtcbiAgICByZXR1cm4gc3R5bGVzW3N1cFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBzdWJzY3JpcHQgZ2l2ZW4gYSBiYXNlIGluIHRoZSBjdXJyZW50IHN0eWxlLlxuICAgKi9cblxuXG4gIHN1YigpIHtcbiAgICByZXR1cm4gc3R5bGVzW3N1Ylt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBmcmFjdGlvbiBudW1lcmF0b3IgZ2l2ZW4gdGhlIGZyYWN0aW9uIGluIHRoZSBjdXJyZW50XG4gICAqIHN0eWxlLlxuICAgKi9cblxuXG4gIGZyYWNOdW0oKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tmcmFjTnVtW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIGZyYWN0aW9uIGRlbm9taW5hdG9yIGdpdmVuIHRoZSBmcmFjdGlvbiBpbiB0aGUgY3VycmVudFxuICAgKiBzdHlsZS5cbiAgICovXG5cblxuICBmcmFjRGVuKCkge1xuICAgIHJldHVybiBzdHlsZXNbZnJhY0Rlblt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3JhbXBlZCB2ZXJzaW9uIG9mIGEgc3R5bGUgKGluIHBhcnRpY3VsYXIsIGNyYW1waW5nIGEgY3JhbXBlZCBzdHlsZVxuICAgKiBkb2Vzbid0IGNoYW5nZSB0aGUgc3R5bGUpLlxuICAgKi9cblxuXG4gIGNyYW1wKCkge1xuICAgIHJldHVybiBzdHlsZXNbY3JhbXBbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IG9yIGRpc3BsYXkgdmVyc2lvbiBvZiB0aGlzIHN0eWxlLlxuICAgKi9cblxuXG4gIHRleHQoKSB7XG4gICAgcmV0dXJuIHN0eWxlc1t0ZXh0JDFbdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN0eWxlIGlzIHRpZ2h0bHkgc3BhY2VkIChzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZSlcbiAgICovXG5cblxuICBpc1RpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnNpemUgPj0gMjtcbiAgfVxuXG59IC8vIEV4cG9ydCBhbiBpbnRlcmZhY2UgZm9yIHR5cGUgY2hlY2tpbmcsIGJ1dCBkb24ndCBleHBvc2UgdGhlIGltcGxlbWVudGF0aW9uLlxuLy8gVGhpcyB3YXksIG5vIG1vcmUgc3R5bGVzIGNhbiBiZSBnZW5lcmF0ZWQuXG5cblxuLy8gSURzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG52YXIgRCA9IDA7XG52YXIgRGMgPSAxO1xudmFyIFQgPSAyO1xudmFyIFRjID0gMztcbnZhciBTID0gNDtcbnZhciBTYyA9IDU7XG52YXIgU1MgPSA2O1xudmFyIFNTYyA9IDc7IC8vIEluc3RhbmNlcyBvZiB0aGUgZGlmZmVyZW50IHN0eWxlc1xuXG52YXIgc3R5bGVzID0gW25ldyBTdHlsZShELCAwLCBmYWxzZSksIG5ldyBTdHlsZShEYywgMCwgdHJ1ZSksIG5ldyBTdHlsZShULCAxLCBmYWxzZSksIG5ldyBTdHlsZShUYywgMSwgdHJ1ZSksIG5ldyBTdHlsZShTLCAyLCBmYWxzZSksIG5ldyBTdHlsZShTYywgMiwgdHJ1ZSksIG5ldyBTdHlsZShTUywgMywgZmFsc2UpLCBuZXcgU3R5bGUoU1NjLCAzLCB0cnVlKV07IC8vIExvb2t1cCB0YWJsZXMgZm9yIHN3aXRjaGluZyBmcm9tIG9uZSBzdHlsZSB0byBhbm90aGVyXG5cbnZhciBzdXAgPSBbUywgU2MsIFMsIFNjLCBTUywgU1NjLCBTUywgU1NjXTtcbnZhciBzdWIgPSBbU2MsIFNjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgZnJhY051bSA9IFtULCBUYywgUywgU2MsIFNTLCBTU2MsIFNTLCBTU2NdO1xudmFyIGZyYWNEZW4gPSBbVGMsIFRjLCBTYywgU2MsIFNTYywgU1NjLCBTU2MsIFNTY107XG52YXIgY3JhbXAgPSBbRGMsIERjLCBUYywgVGMsIFNjLCBTYywgU1NjLCBTU2NdO1xudmFyIHRleHQkMSA9IFtELCBEYywgVCwgVGMsIFQsIFRjLCBULCBUY107IC8vIFdlIG9ubHkgZXhwb3J0IHNvbWUgb2YgdGhlIHN0eWxlcy5cblxudmFyIFN0eWxlJDEgPSB7XG4gIERJU1BMQVk6IHN0eWxlc1tEXSxcbiAgVEVYVDogc3R5bGVzW1RdLFxuICBTQ1JJUFQ6IHN0eWxlc1tTXSxcbiAgU0NSSVBUU0NSSVBUOiBzdHlsZXNbU1NdXG59O1xuXG4vKlxuICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIFVuaWNvZGUgc2NyaXB0cyBhbmQgc2NyaXB0IGZhbWlsaWVzIHRoYXQgd2VcbiAqIHN1cHBvcnQuIFRvIGFkZCBuZXcgc2NyaXB0cyBvciBmYW1pbGllcywganVzdCBhZGQgYSBuZXcgZW50cnkgdG8gdGhlXG4gKiBzY3JpcHREYXRhIGFycmF5IGJlbG93LiBBZGRpbmcgc2NyaXB0cyB0byB0aGUgc2NyaXB0RGF0YSBhcnJheSBhbGxvd3NcbiAqIGNoYXJhY3RlcnMgZnJvbSB0aGF0IHNjcmlwdCB0byBhcHBlYXIgaW4gXFx0ZXh0e30gZW52aXJvbm1lbnRzLlxuICovXG5cbi8qKlxuICogRWFjaCBzY3JpcHQgb3Igc2NyaXB0IGZhbWlseSBoYXMgYSBuYW1lIGFuZCBhbiBhcnJheSBvZiBibG9ja3MuXG4gKiBFYWNoIGJsb2NrIGlzIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIHdoaWNoIHNwZWNpZnkgdGhlIHN0YXJ0IGFuZFxuICogZW5kIHBvaW50cyAoaW5jbHVzaXZlKSBvZiBhIGJsb2NrIG9mIFVuaWNvZGUgY29kZXBvaW50cy5cbiAqL1xuXG4vKipcbiAqIFVuaWNvZGUgYmxvY2sgZGF0YSBmb3IgdGhlIGZhbWlsaWVzIG9mIHNjcmlwdHMgd2Ugc3VwcG9ydCBpbiBcXHRleHR7fS5cbiAqIFNjcmlwdHMgb25seSBuZWVkIHRvIGFwcGVhciBoZXJlIGlmIHRoZXkgZG8gbm90IGhhdmUgZm9udCBtZXRyaWNzLlxuICovXG52YXIgc2NyaXB0RGF0YSA9IFt7XG4gIC8vIExhdGluIGNoYXJhY3RlcnMgYmV5b25kIHRoZSBMYXRpbi0xIGNoYXJhY3RlcnMgd2UgaGF2ZSBtZXRyaWNzIGZvci5cbiAgLy8gTmVlZGVkIGZvciBDemVjaCwgSHVuZ2FyaWFuIGFuZCBUdXJraXNoIHRleHQsIGZvciBleGFtcGxlLlxuICBuYW1lOiAnbGF0aW4nLFxuICBibG9ja3M6IFtbMHgwMTAwLCAweDAyNGZdLCAvLyBMYXRpbiBFeHRlbmRlZC1BIGFuZCBMYXRpbiBFeHRlbmRlZC1CXG4gIFsweDAzMDAsIDB4MDM2Zl0gLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIG1hcmtzXG4gIF1cbn0sIHtcbiAgLy8gVGhlIEN5cmlsbGljIHNjcmlwdCB1c2VkIGJ5IFJ1c3NpYW4gYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzLlxuICAvLyBBIEN5cmlsbGljIHN1YnNldCB1c2VkIHRvIGJlIHN1cHBvcnRlZCBhcyBleHBsaWNpdGx5IGRlZmluZWRcbiAgLy8gc3ltYm9scyBpbiBzeW1ib2xzLmpzXG4gIG5hbWU6ICdjeXJpbGxpYycsXG4gIGJsb2NrczogW1sweDA0MDAsIDB4MDRmZl1dXG59LCB7XG4gIC8vIEFybWVuaWFuXG4gIG5hbWU6ICdhcm1lbmlhbicsXG4gIGJsb2NrczogW1sweDA1MzAsIDB4MDU4Rl1dXG59LCB7XG4gIC8vIFRoZSBCcmFobWljIHNjcmlwdHMgb2YgU291dGggYW5kIFNvdXRoZWFzdCBBc2lhXG4gIC8vIERldmFuYWdhcmkgKDA5MDDigJMwOTdGKVxuICAvLyBCZW5nYWxpICgwOTgw4oCTMDlGRilcbiAgLy8gR3VybXVraGkgKDBBMDDigJMwQTdGKVxuICAvLyBHdWphcmF0aSAoMEE4MOKAkzBBRkYpXG4gIC8vIE9yaXlhICgwQjAw4oCTMEI3RilcbiAgLy8gVGFtaWwgKDBCODDigJMwQkZGKVxuICAvLyBUZWx1Z3UgKDBDMDDigJMwQzdGKVxuICAvLyBLYW5uYWRhICgwQzgw4oCTMENGRilcbiAgLy8gTWFsYXlhbGFtICgwRDAw4oCTMEQ3RilcbiAgLy8gU2luaGFsYSAoMEQ4MOKAkzBERkYpXG4gIC8vIFRoYWkgKDBFMDDigJMwRTdGKVxuICAvLyBMYW8gKDBFODDigJMwRUZGKVxuICAvLyBUaWJldGFuICgwRjAw4oCTMEZGRilcbiAgLy8gTXlhbm1hciAoMTAwMOKAkzEwOUYpXG4gIG5hbWU6ICdicmFobWljJyxcbiAgYmxvY2tzOiBbWzB4MDkwMCwgMHgxMDlGXV1cbn0sIHtcbiAgbmFtZTogJ2dlb3JnaWFuJyxcbiAgYmxvY2tzOiBbWzB4MTBBMCwgMHgxMGZmXV1cbn0sIHtcbiAgLy8gQ2hpbmVzZSBhbmQgSmFwYW5lc2UuXG4gIC8vIFRoZSBcImtcIiBpbiBjamsgaXMgZm9yIEtvcmVhbiwgYnV0IHdlJ3ZlIHNlcGFyYXRlZCBLb3JlYW4gb3V0XG4gIG5hbWU6IFwiY2prXCIsXG4gIGJsb2NrczogW1sweDMwMDAsIDB4MzBGRl0sIC8vIENKSyBzeW1ib2xzIGFuZCBwdW5jdHVhdGlvbiwgSGlyYWdhbmEsIEthdGFrYW5hXG4gIFsweDRFMDAsIDB4OUZBRl0sIC8vIENKSyBpZGVvZ3JhbXNcbiAgWzB4RkYwMCwgMHhGRjYwXSAvLyBGdWxsd2lkdGggcHVuY3R1YXRpb25cbiAgLy8gVE9ETzogYWRkIGhhbGZ3aWR0aCBLYXRha2FuYSBhbmQgUm9tYW5qaSBnbHlwaHNcbiAgXVxufSwge1xuICAvLyBLb3JlYW5cbiAgbmFtZTogJ2hhbmd1bCcsXG4gIGJsb2NrczogW1sweEFDMDAsIDB4RDdBRl1dXG59XTtcbi8qKlxuICogR2l2ZW4gYSBjb2RlcG9pbnQsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IG9yIHNjcmlwdCBmYW1pbHlcbiAqIGl0IGlzIGZyb20sIG9yIG51bGwgaWYgaXQgaXMgbm90IHBhcnQgb2YgYSBrbm93biBibG9ja1xuICovXG5cbmZ1bmN0aW9uIHNjcmlwdEZyb21Db2RlcG9pbnQoY29kZXBvaW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0RGF0YS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzY3JpcHQgPSBzY3JpcHREYXRhW2ldO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNjcmlwdC5ibG9ja3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgYmxvY2sgPSBzY3JpcHQuYmxvY2tzW19pXTtcblxuICAgICAgaWYgKGNvZGVwb2ludCA+PSBibG9ja1swXSAmJiBjb2RlcG9pbnQgPD0gYmxvY2tbMV0pIHtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5uYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBBIGZsYXR0ZW5lZCB2ZXJzaW9uIG9mIGFsbCB0aGUgc3VwcG9ydGVkIGJsb2NrcyBpbiBhIHNpbmdsZSBhcnJheS5cbiAqIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1ha2Ugc3VwcG9ydGVkQ29kZXBvaW50KCkgZmFzdC5cbiAqL1xuXG52YXIgYWxsQmxvY2tzID0gW107XG5zY3JpcHREYXRhLmZvckVhY2gocyA9PiBzLmJsb2Nrcy5mb3JFYWNoKGIgPT4gYWxsQmxvY2tzLnB1c2goLi4uYikpKTtcbi8qKlxuICogR2l2ZW4gYSBjb2RlcG9pbnQsIHJldHVybiB0cnVlIGlmIGl0IGZhbGxzIHdpdGhpbiBvbmUgb2YgdGhlXG4gKiBzY3JpcHRzIG9yIHNjcmlwdCBmYW1pbGllcyBkZWZpbmVkIGFib3ZlIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogTWljcm8gYmVuY2htYXJrcyBzaG93cyB0aGF0IHRoaXMgaXMgZmFzdGVyIHRoYW5cbiAqIC9bXFx1MzAwMC1cXHUzMEZGXFx1NEUwMC1cXHU5RkFGXFx1RkYwMC1cXHVGRjYwXFx1QUMwMC1cXHVEN0FGXFx1MDkwMC1cXHUxMDlGXS8udGVzdCgpXG4gKiBpbiBGaXJlZm94LCBDaHJvbWUgYW5kIE5vZGUuXG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydGVkQ29kZXBvaW50KGNvZGVwb2ludCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEJsb2Nrcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChjb2RlcG9pbnQgPj0gYWxsQmxvY2tzW2ldICYmIGNvZGVwb2ludCA8PSBhbGxCbG9ja3NbaSArIDFdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gZG9tVHJlZS5qcyBhbmQgZGVsaW1pdGVyLmpzLlxuICogSXQncyBhIHN0b3JlaG91c2Ugb2YgcGF0aCBnZW9tZXRyeSBmb3IgU1ZHIGltYWdlcy5cbiAqL1xuLy8gSW4gYWxsIHBhdGhzIGJlbG93LCB0aGUgdmlld0JveC10by1lbSBzY2FsZSBpcyAxMDAwOjEuXG52YXIgaExpbmVQYWQgPSA4MDsgLy8gcGFkZGluZyBhYm92ZSBhIHNxcnQgdmluY3VsdW0uIFByZXZlbnRzIGltYWdlIGNyb3BwaW5nLlxuLy8gVGhlIHZpbmN1bHVtIG9mIGEgXFxzcXJ0IGNhbiBiZSBtYWRlIHRoaWNrZXIgYnkgYSBLYVRlWCByZW5kZXJpbmcgb3B0aW9uLlxuLy8gVGhpbmsgb2YgdmFyaWFibGUgZXh0cmFWaW5jdWx1bSBhcyB0d28gZGV0b3VycyBpbiB0aGUgU1ZHIHBhdGguXG4vLyBUaGUgZGV0b3VyIGJlZ2lucyBhdCB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgYXJlYSBsYWJlbGVkIGV4dHJhVmluY3VsdW0gYmVsb3cuXG4vLyBUaGUgZGV0b3VyIHByb2NlZWRzIG9uZSBleHRyYVZpbmN1bHVtIGRpc3RhbmNlIHVwIGFuZCBzbGlnaHRseSB0byB0aGUgcmlnaHQsXG4vLyBkaXNwbGFjaW5nIHRoZSByYWRpdXNlZCBjb3JuZXIgYmV0d2VlbiBzdXJkIGFuZCB2aW5jdWx1bS4gVGhlIHJhZGl1cyBpc1xuLy8gdHJhdmVyc2VkIGFzIHVzdWFsLCB0aGVuIHRoZSBkZXRvdXIgcmVzdW1lcy4gSXQgZ29lcyByaWdodCwgdG8gdGhlIGVuZCBvZlxuLy8gdGhlIHZlcnkgbG9uZyB2aW5jdWx1bSwgdGhlbiBkb3duIG9uZSBleHRyYVZpbmN1bHVtIGRpc3RhbmNlLFxuLy8gYWZ0ZXIgd2hpY2ggaXQgcmVzdW1lcyByZWd1bGFyIHBhdGggZ2VvbWV0cnkgZm9yIHRoZSByYWRpY2FsLlxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmluY3VsdW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9cbiAgICAgICAgIC/ilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLilpLihpBleHRyYVZpbmN1bHVtXG4gICAgICAgIC8g4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4oaQMC4wNGVtICg0MCB1bml0KSBzdGQgdmluY3VsdW0gdGhpY2tuZXNzXG4gICAgICAgLyAvXG4gICAgICAvIC9cbiAgICAgLyAvXFxcbiAgICAvIC8gc3VyZFxuKi9cblxudmFyIHNxcnRNYWluID0gZnVuY3Rpb24gc3FydE1haW4oZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc3FydE1haW4gcGF0aCBnZW9tZXRyeSBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgcmV0dXJuIFwiTTk1LFwiICsgKDYyMiArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmMtMi43LDAsLTcuMTcsLTIuNywtMTMuNSwtOGMtNS44LC01LjMsLTkuNSwtMTAsLTkuNSwtMTRcXG5jMCwtMiwwLjMsLTMuMywxLC00YzEuMywtMi43LDIzLjgzLC0yMC43LDY3LjUsLTU0XFxuYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMFxcbnMxNzMsMzc4LDE3MywzNzhjMC43LDAsMzUuMywtNzEsMTA0LC0yMTNjNjguNywtMTQyLDEzNy41LC0yODUsMjA2LjUsLTQyOVxcbmM2OSwtMTQ0LDEwNC41LC0yMTcuNywxMDYuNSwtMjIxXFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDIuMDc1ICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzUuMywtOS4zLDEyLC0xNCwyMCwtMTRcXG5INDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkg4NDUuMjcyNFxcbnMtMjI1LjI3Miw0NjcsLTIyNS4yNzIsNDY3cy0yMzUsNDg2LC0yMzUsNDg2Yy0yLjcsNC43LC05LDcsLTE5LDdcXG5jLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3pcXG5NXCIgKyAoODM0ICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMSA9IGZ1bmN0aW9uIHNxcnRTaXplMShleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMSBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUxLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTI2MyxcIiArICg2MDEgKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJjMC43LDAsMTgsMzkuNyw1MiwxMTlcXG5jMzQsNzkuMyw2OC4xNjcsMTU4LjcsMTAyLjUsMjM4YzM0LjMsNzkuMyw1MS44LDExOS4zLDUyLjUsMTIwXFxuYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjdcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gMi4wODQgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNC43LC03LjMsMTEsLTExLDE5LC0xMVxcbkg0MDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxMi4zXFxucy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzJcXG5jLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMVxcbnMtMTA5LC0yNTMsLTEwOSwtMjUzYy03Mi43LC0xNjgsLTEwOS4zLC0yNTIsLTExMCwtMjUyYy0xMC43LDgsLTIyLDE2LjcsLTM0LDI2XFxuYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwelxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMiA9IGZ1bmN0aW9uIHNxcnRTaXplMihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMiBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUyLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTk4MyBcIiArICgxMCArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmxcIiArIGV4dHJhVmluY3VsdW0gLyAzLjEzICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiXFxuSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsN1xcbnMtMTIsMCwtMTIsMGMtMS4zLC0zLjMsLTMuNywtMTEuNywtNywtMjVjLTM1LjMsLTEyNS4zLC0xMDYuNywtMzczLjMsLTIxNCwtNzQ0XFxuYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMFxcbmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjJcXG5jNTYsLTE3NS4zLDEyNi4zLC0zOTcuMywyMTEsLTY2NmM4NC43LC0yNjguNywxNTMuOCwtNDg4LjIsMjA3LjUsLTY1OC41XFxuYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41elxcbk1cIiArICgxMDAxICsgZXh0cmFWaW5jdWx1bSkgKyBcIiBcIiArIGhMaW5lUGFkICsgXCJoNDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcImgtNDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRTaXplMyA9IGZ1bmN0aW9uIHNxcnRTaXplMyhleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzaXplMyBpcyBmcm9tIGdseXBoIFUyMjFBIGluIHRoZSBmb250IEthVGVYX1NpemUzLVJlZ3VsYXJcbiAgcmV0dXJuIFwiTTQyNCxcIiArICgyMzk4ICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTRcXG5jMCwtMiwtMTAuNywxNC4zLC0zMiw0OWMtNC43LDcuMywtOS44LDE1LjcsLTE1LjUsMjVjLTUuNyw5LjMsLTkuOCwxNiwtMTIuNSwyMFxcbnMtNSw3LC01LDdjLTQsLTMuMywtOC4zLC03LjcsLTEzLC0xM3MtMTMsLTEzLC0xMywtMTNzNzYsLTEyMiw3NiwtMTIyczc3LC0xMjEsNzcsLTEyMVxcbnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxXFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDQuMjIzICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiYzQsLTYuNywxMCwtMTAsMTgsLTEwIEg0MDAwMDBcXG52XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTQuNlxcbnMtODcuMywzNzguNywtMjcyLjYsMTE2NmMtMTg1LjMsNzg3LjMsLTI3OS4zLDExODIuMywtMjgyLDExODVcXG5jLTIsNiwtMTAsOSwtMjQsOVxcbmMtOCwwLC0xMiwtMC43LC0xMiwtMnogTVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcIlxcbmg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemU0ID0gZnVuY3Rpb24gc3FydFNpemU0KGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemU0IGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICByZXR1cm4gXCJNNDczLFwiICsgKDI3MTMgKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbFwiICsgZXh0cmFWaW5jdWx1bSAvIDUuMjk4ICsgXCIgLVwiICsgZXh0cmFWaW5jdWx1bSArIFwiXFxuYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTcuN1xcbnMtOTAuNSw0NzgsLTI3Ni4yLDE0NjZjLTE4NS43LDk4OCwtMjc5LjUsMTQ4MywtMjgxLjUsMTQ4NWMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDBcXG5jMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2XFxuczc2LC0xNTMsNzYsLTE1M3M3NywtMTUxLDc3LC0xNTFjMC43LDAuNywzNS43LDIwMiwxMDUsNjA0YzY3LjMsNDAwLjcsMTAyLDYwMi43LDEwNCxcXG42MDZ6TVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDEwMTcuN3pcIjtcbn07XG5cbnZhciBwaGFzZVBhdGggPSBmdW5jdGlvbiBwaGFzZVBhdGgoeSkge1xuICB2YXIgeCA9IHkgLyAyOyAvLyB4IGNvb3JkaW5hdGUgYXQgdG9wIG9mIGFuZ2xlXG5cbiAgcmV0dXJuIFwiTTQwMDAwMCBcIiArIHkgKyBcIiBIMCBMXCIgKyB4ICsgXCIgMCBsNjUgNDUgTDE0NSBcIiArICh5IC0gODApICsgXCIgSDQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0VGFsbCA9IGZ1bmN0aW9uIHNxcnRUYWxsKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIC8vIHNxcnRUYWxsIGlzIGZyb20gZ2x5cGggVTIzQjcgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICAvLyBPbmUgcGF0aCBlZGdlIGhhcyBhIHZhcmlhYmxlIGxlbmd0aC4gSXQgcnVucyB2ZXJ0aWNhbGx5IGZyb20gdGhlIHZpbmN1bHVtXG4gIC8vIHRvIGEgcG9pbnQgbmVhciAoMTQgdW5pdHMpIHRoZSBib3R0b20gb2YgdGhlIHN1cmQuIFRoZSB2aW5jdWx1bVxuICAvLyBpcyBub3JtYWxseSA0MCB1bml0cyB0aGljay4gU28gdGhlIGxlbmd0aCBvZiB0aGUgbGluZSBpbiBxdWVzdGlvbiBpczpcbiAgdmFyIHZlcnRTZWdtZW50ID0gdmlld0JveEhlaWdodCAtIDU0IC0gaExpbmVQYWQgLSBleHRyYVZpbmN1bHVtO1xuICByZXR1cm4gXCJNNzAyIFwiICsgKGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIkg0MDAwMDBcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJcXG5INzQydlwiICsgdmVydFNlZ21lbnQgKyBcImwtNCA0LTQgNGMtLjY2Ny43IC0yIDEuNS00IDIuNXMtNC4xNjcgMS44MzMtNi41IDIuNS01LjUgMS05LjUgMVxcbmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzBcXG5jLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjdcXG4yMTkgNjYxIGwyMTggNjYxek03MDIgXCIgKyBoTGluZVBhZCArIFwiSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJINzQyelwiO1xufTtcblxudmFyIHNxcnRQYXRoID0gZnVuY3Rpb24gc3FydFBhdGgoc2l6ZSwgZXh0cmFWaW5jdWx1bSwgdmlld0JveEhlaWdodCkge1xuICBleHRyYVZpbmN1bHVtID0gMTAwMCAqIGV4dHJhVmluY3VsdW07IC8vIENvbnZlcnQgZnJvbSBkb2N1bWVudCBlbXMgdG8gdmlld0JveC5cblxuICB2YXIgcGF0aCA9IFwiXCI7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSBcInNxcnRNYWluXCI6XG4gICAgICBwYXRoID0gc3FydE1haW4oZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUxXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUxKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplMlwiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTNcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTMoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemU0XCI6XG4gICAgICBwYXRoID0gc3FydFNpemU0KGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRUYWxsXCI6XG4gICAgICBwYXRoID0gc3FydFRhbGwoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQsIHZpZXdCb3hIZWlnaHQpO1xuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59O1xudmFyIGlubmVyUGF0aCA9IGZ1bmN0aW9uIGlubmVyUGF0aChuYW1lLCBoZWlnaHQpIHtcbiAgLy8gVGhlIGlubmVyIHBhcnQgb2Ygc3RyZXRjaHkgdGFsbCBkZWxpbWl0ZXJzXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgXCJcXHUyMzljXCI6XG4gICAgICByZXR1cm4gXCJNMjkxIDAgSDQxNyBWXCIgKyBoZWlnaHQgKyBcIiBIMjkxeiBNMjkxIDAgSDQxNyBWXCIgKyBoZWlnaHQgKyBcIiBIMjkxelwiO1xuXG4gICAgY2FzZSBcIlxcdTIyMjNcIjpcbiAgICAgIHJldHVybiBcIk0xNDUgMCBIMTg4IFZcIiArIGhlaWdodCArIFwiIEgxNDV6IE0xNDUgMCBIMTg4IFZcIiArIGhlaWdodCArIFwiIEgxNDV6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjIyNVwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXogTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXpcIiArIChcIk0zNjcgMCBINDEwIFZcIiArIGhlaWdodCArIFwiIEgzNjd6IE0zNjcgMCBINDEwIFZcIiArIGhlaWdodCArIFwiIEgzNjd6XCIpO1xuXG4gICAgY2FzZSBcIlxcdTIzOWZcIjpcbiAgICAgIHJldHVybiBcIk00NTcgMCBINTgzIFZcIiArIGhlaWdodCArIFwiIEg0NTd6IE00NTcgMCBINTgzIFZcIiArIGhlaWdodCArIFwiIEg0NTd6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNhMlwiOlxuICAgICAgcmV0dXJuIFwiTTMxOSAwIEg0MDMgVlwiICsgaGVpZ2h0ICsgXCIgSDMxOXogTTMxOSAwIEg0MDMgVlwiICsgaGVpZ2h0ICsgXCIgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJcXHUyM2E1XCI6XG4gICAgICByZXR1cm4gXCJNMjYzIDAgSDM0NyBWXCIgKyBoZWlnaHQgKyBcIiBIMjYzeiBNMjYzIDAgSDM0NyBWXCIgKyBoZWlnaHQgKyBcIiBIMjYzelwiO1xuXG4gICAgY2FzZSBcIlxcdTIzYWFcIjpcbiAgICAgIHJldHVybiBcIk0zODQgMCBINTA0IFZcIiArIGhlaWdodCArIFwiIEgzODR6IE0zODQgMCBINTA0IFZcIiArIGhlaWdodCArIFwiIEgzODR6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNkMFwiOlxuICAgICAgcmV0dXJuIFwiTTMxMiAwIEgzNTUgVlwiICsgaGVpZ2h0ICsgXCIgSDMxMnogTTMxMiAwIEgzNTUgVlwiICsgaGVpZ2h0ICsgXCIgSDMxMnpcIjtcblxuICAgIGNhc2UgXCJcXHUyMDE2XCI6XG4gICAgICByZXR1cm4gXCJNMjU3IDAgSDMwMCBWXCIgKyBoZWlnaHQgKyBcIiBIMjU3eiBNMjU3IDAgSDMwMCBWXCIgKyBoZWlnaHQgKyBcIiBIMjU3elwiICsgKFwiTTQ3OCAwIEg1MjEgVlwiICsgaGVpZ2h0ICsgXCIgSDQ3OHogTTQ3OCAwIEg1MjEgVlwiICsgaGVpZ2h0ICsgXCIgSDQ3OHpcIik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG52YXIgcGF0aCA9IHtcbiAgLy8gVGhlIGRvdWJsZWxlZnRhcnJvdyBnZW9tZXRyeSBpcyBmcm9tIGdseXBoIFUrMjFEMCBpbiB0aGUgZm9udCBLYVRlWCBNYWluXG4gIGRvdWJsZWxlZnRhcnJvdzogXCJNMjYyIDE1N1xcbmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuM1xcbiAwLTEyLjIuNS0xNC41IDEuNS0yLjMgMS00LjggNC41LTcuNSAxMC41LTQ5LjMgOTcuMy0xMjEuNyAxNjkuMy0yMTcgMjE2LTI4XFxuIDE0LTU3LjMgMjUtODggMzMtNi43IDItMTEgMy44LTEzIDUuNS0yIDEuNy0zIDQuMi0zIDcuNXMxIDUuOCAzIDcuNVxcbmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41XFxuIDE1Ny41IDkuMyA4IDE1LjMgMTIuMyAxOCAxM2g2YzEyLS43IDE4LTQgMTgtMTAgMC0yLTEuNy03LTUtMTUtMjMuMy00Ni01Mi04N1xcbi04Ni0xMjNsLTEwLTEwaDM5OTczOHYtNDBIMjE4YzMyOCAwIDAgMCAwIDBsLTEwLThjLTI2LjctMjAtNjUuNy00My0xMTctNjkgMi43XFxuLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwelxcbm04IDB2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpcIixcbiAgLy8gZG91YmxlcmlnaHRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjFEMiBpbiBmb250IEthVGVYIE1haW5cbiAgZG91YmxlcmlnaHRhcnJvdzogXCJNMzk5NzM4IDM5MmxcXG4tMTAgMTBjLTM0IDM2LTYyLjcgNzctODYgMTIzLTMuMyA4LTUgMTMuMy01IDE2IDAgNS4zIDYuNyA4IDIwIDggNy4zIDAgMTIuMi0uNVxcbiAxNC41LTEuNSAyLjMtMSA0LjgtNC41IDcuNS0xMC41IDQ5LjMtOTcuMyAxMjEuNy0xNjkuMyAyMTctMjE2IDI4LTE0IDU3LjMtMjUgODhcXG4tMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4XFxuLTE3LjMtMTI4LjItNDcuOC0xODAuNS05MS41LTUyLjMtNDMuNy05My44LTk2LjItMTI0LjUtMTU3LjUtOS4zLTgtMTUuMy0xMi4zLTE4XFxuLTEzaC02Yy0xMiAuNy0xOCA0LTE4IDEwIDAgMiAxLjcgNyA1IDE1IDIzLjMgNDYgNTIgODcgODYgMTIzbDEwIDEwSDB2NDBoMzk5NzgyXFxuYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zXFxuLTEwNyA2NGwtMTAgOEgwdjQwek0wIDE1N3Y0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOTAgaW4gZm9udCBLYVRlWCBNYWluXG4gIGxlZnRhcnJvdzogXCJNNDAwMDAwIDI0MUgxMTBsMy0zYzY4LjctNTIuNyAxMTMuNy0xMjBcXG4gMTM1LTIwMiA0LTE0LjcgNi0yMyA2LTI1IDAtNy4zLTctMTEtMjEtMTEtOCAwLTEzLjIuOC0xNS41IDIuNS0yLjMgMS43LTQuMiA1LjhcXG4tNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0N1xcbmMtMTAgNC0xNiA3LjctMTggMTEgMCA4LjcgNiAxNC4zIDE4IDE3IDQ3LjMgMTguNyA4Ny44IDQ3IDEyMS41IDg1UzE5NiA0NDEuMyAyMDhcXG4gNDkwYy43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjLjMgMS4zIDEgMy4zIDIgNnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zXFxuIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyXFxuIGwtMy0zaDM5OTg5MHpNMTAwIDI0MXY0MGgzOTk5MDB2LTQwelwiLFxuICAvLyBvdmVyYnJhY2UgaXMgZnJvbSBnbHlwaHMgVSsyM0E5LzIzQTgvMjNBNyBpbiBmb250IEthVGVYX1NpemU0LVJlZ3VsYXJcbiAgbGVmdGJyYWNlOiBcIk02IDU0OGwtNi02di0zNWw2LTExYzU2LTEwNCAxMzUuMy0xODEuMyAyMzgtMjMyIDU3LjMtMjguNyAxMTdcXG4tNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43XFxuIDUtNiA5LTEwIDEzLS43IDEtNy4zIDEtMjAgMUg2elwiLFxuICBsZWZ0YnJhY2V1bmRlcjogXCJNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTNcXG4gMzUuMzEzIDUxLjMgODAuODEzIDkzLjggMTM2LjUgMTI3LjUgNTUuNjg4IDMzLjcgMTE3LjE4OCA1NS44IDE4NC41IDY2LjUuNjg4XFxuIDAgMiAuMyA0IDEgMTguNjg4IDIuNyA3NiA0LjMgMTcyIDVoMzk5NDUwdjEyMEg0MjlsLTYtMWMtMTI0LjY4OC04LTIzNS02MS43XFxuLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2elwiLFxuICAvLyBvdmVyZ3JvdXAgaXMgZnJvbSB0aGUgTW5TeW1ib2wgcGFja2FnZSAocHVibGljIGRvbWFpbilcbiAgbGVmdGdyb3VwOiBcIk00MDAwMDAgODBcXG5INDM1QzY0IDgwIDE2OC4zIDIyOS40IDIxIDI2MGMtNS45IDEuMi0xOCAwLTE4IDAtMiAwLTMtMS0zLTN2LTM4Qzc2IDYxIDI1NyAwXFxuIDQzNSAwaDM5OTU2NXpcIixcbiAgbGVmdGdyb3VwdW5kZXI6IFwiTTQwMDAwMCAyNjJcXG5INDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTlcXG4gNDM1IDIxOWgzOTk1NjV6XCIsXG4gIC8vIEhhcnBvb25zIGFyZSBmcm9tIGdseXBoIFUrMjFCRCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhhcnBvb246IFwiTTAgMjY3Yy43IDUuMyAzIDEwIDcgMTRoMzk5OTkzdi00MEg5M2MzLjNcXG4tMy4zIDEwLjItOS41IDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNVxcbi0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43XFxuLTE5NiAyMjgtNi43IDQuNy0xMC43IDgtMTIgMTAtMS4zIDItMiA1LjctMiAxMXptMTAwLTI2djQwaDM5OTkwMHYtNDB6XCIsXG4gIGxlZnRoYXJwb29ucGx1czogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjVcXG4gMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1LTE4LjMgMy0yMS0xLjNcXG4tNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjctMTk2IDIyOC02LjcgNC43XFxuLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHpcXG5tMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIGxlZnRoYXJwb29uZG93bjogXCJNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzM1xcbiA1LjMzMyAxMiAxMGM5MC42NjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMzMzIDEwLjY2NyA2LjMzMyAxNi4zMzMgOSAxNyAyIC42NjcgNVxcbiAxIDkgMWg1YzEwLjY2NyAwIDE2LjY2Ny0yIDE4LTYgMi0yLjY2NyAxLTkuNjY3LTMtMjEtMzItODcuMzMzLTgyLjY2Ny0xNTcuNjY3XFxuLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxelwiLFxuICBsZWZ0aGFycG9vbmRvd25wbHVzOiBcIk03IDQzNWMtNCA0LTYuMyA4LjctNyAxNCAwIDUuMy43IDkgMiAxMXM1LjMgNS4zIDEyXFxuIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjdcXG4tMiAxOC02IDItMi43IDEtOS43LTMtMjEtMzItODcuMy04Mi43LTE1Ny43LTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwSDd6bTkzIDBcXG52NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIGhvb2sgaXMgZnJvbSBnbHlwaCBVKzIxQTkgaW4gZm9udCBLYVRlWCBNYWluXG4gIGxlZnRob29rOiBcIk00MDAwMDAgMjgxIEgxMDNzLTMzLTExLjItNjEtMzMuNVMwIDE5Ny4zIDAgMTY0czE0LjItNjEuMiA0Mi41XFxuLTgzLjVDNzAuOCA1OC4yIDEwNCA0NyAxNDIgNDcgYzE2LjcgMCAyNSA2LjcgMjUgMjAgMCAxMi04LjcgMTguNy0yNiAyMC00MCAzLjNcXG4tNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjFcXG4gNzEuNSAyM2gzOTk4NTl6TTEwMyAyODF2LTQwaDM5OTg5N3Y0MHpcIixcbiAgbGVmdGxpbmVzZWdtZW50OiBcIk00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6XFxuTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcIixcbiAgbGVmdG1hcHN0bzogXCJNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwelxcbk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XCIsXG4gIC8vIHRvZnJvbSBpcyBmcm9tIGdseXBoIFUrMjFDNCBpbiBmb250IEthVGVYIEFNUyBSZWd1bGFyXG4gIGxlZnRUb0Zyb206IFwiTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzXFxuLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5LTcwLTEwMWwtNy04aDM5OTkwNXYtNDBIOTVsNy04XFxuYzI4LjctMzIgNTItNjUuNyA3MC0xMDEgMTAuNy0yMy4zIDE2LTM1LjcgMTYtMzcgMC0uNy03LjctMS0yMy0xaC0yMkMxMTUuNyAyNjUuM1xcbiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpcIixcbiAgbG9uZ2VxdWFsOiBcIk0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwelxcbk0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwelwiLFxuICBtaWRicmFjZTogXCJNMjAwNDI4IDMzNFxcbmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTRcXG4tNTMuMyA4Ni43LTEyMy43IDE1My0yMTEgMTk5LTY2LjcgMzYtMTM3LjMgNTYuMy0yMTIgNjJIMFYyMTRoMTk5NTY4YzE3OC4zLTExLjdcXG4gMzExLjctNzguMyA0MDMtMjAxIDYtOCA5LjctMTIgMTEtMTIgLjctLjcgNi43LTEgMTgtMXMxNy4zLjMgMTggMWMxLjMgMCA1IDQgMTFcXG4gMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpcIixcbiAgbWlkYnJhY2V1bmRlcjogXCJNMTk5NTcyIDIxNFxcbmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTRcXG4gNTMuMy04Ni43IDEyMy43LTE1MyAyMTEtMTk5IDY2LjctMzYgMTM3LjMtNTYuMyAyMTItNjJoMTk5NTY4djEyMEgyMDA0MzJjLTE3OC4zXFxuIDExLjctMzExLjcgNzguMy00MDMgMjAxLTYgOC05LjcgMTItMTEgMTItLjcuNy02LjcgMS0xOCAxcy0xNy4zLS4zLTE4LTFjLTEuMyAwXFxuLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6XCIsXG4gIG9paW50U2l6ZTE6IFwiTTUxMi42IDcxLjZjMjcyLjYgMCAzMjAuMyAxMDYuOCAzMjAuMyAxNzguMiAwIDcwLjgtNDcuNyAxNzcuNlxcbi0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnpcXG5tMzY4LjEgMTc4LjJjMC04Ni40LTYwLjktMjE1LjQtMzY4LjEtMjE1LjQtMzA2LjQgMC0zNjcuMyAxMjktMzY3LjMgMjE1LjQgMCA4NS44XFxuNjAuOSAyMTQuOCAzNjcuMyAyMTQuOCAzMDcuMiAwIDM2OC4xLTEyOSAzNjguMS0yMTQuOHpcIixcbiAgb2lpbnRTaXplMjogXCJNNzU3LjggMTAwLjFjMzg0LjcgMCA0NTEuMSAxMzcuNiA0NTEuMSAyMzAgMCA5MS4zLTY2LjQgMjI4LjhcXG4tNDUxLjEgMjI4LjgtMzg2LjMgMC00NTIuNy0xMzcuNS00NTIuNy0yMjguOCAwLTkyLjQgNjYuNC0yMzAgNDUyLjctMjMwelxcbm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMlxcbmMwIDExMCA4NCAyNzYgNTA0IDI3NnM1MDIuNC0xNjYgNTAyLjQtMjc2elwiLFxuICBvaWlpbnRTaXplMTogXCJNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42XFxuLTQ4MC41IDE3Ny42UzIwMi4xIDMyMC42IDIwMi4xIDI0OS44YzAtNzEuNCA3MC41LTE3OC4yIDQ3OS4zLTE3OC4yelxcbm01MjUuOCAxNzguMmMwLTg2LjQtODYuOC0yMTUuNC01MjUuNy0yMTUuNC00MzcuOSAwLTUyNC43IDEyOS01MjQuNyAyMTUuNCAwXFxuODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44elwiLFxuICBvaWlpbnRTaXplMjogXCJNMTAyMS4yIDUzYzYwMy42IDAgNzA3LjggMTY1LjggNzA3LjggMjc3LjIgMCAxMTAtMTA0LjIgMjc1LjhcXG4tNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3pcXG5tNzcwLjQgMjc3LjFjMC0xMzEuMi0xMjYuNC0zMjcuNi03NzAuNS0zMjcuNlMyNDguNCAxOTguOSAyNDguNCAzMzAuMVxcbmMwIDEzMCAxMjguOCAzMjYuNCA3NzIuNyAzMjYuNHM3NzAuNS0xOTYuNCA3NzAuNS0zMjYuNHpcIixcbiAgcmlnaHRhcnJvdzogXCJNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOFxcbi0xNi43IDMyLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwXFxuIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuN1xcbiAzOS04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NVxcbi00MC41LTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNVxcbi0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3XFxuIDE1MS43IDEzOSAyMDV6bTAgMHY0MGgzOTk5MDB2LTQwelwiLFxuICByaWdodGJyYWNlOiBcIk00MDAwMDAgNTQybFxcbi02IDZoLTE3Yy0xMi43IDAtMTkuMy0uMy0yMC0xLTQtNC03LjMtOC4zLTEwLTEzLTM1LjMtNTEuMy04MC44LTkzLjgtMTM2LjUtMTI3LjVcXG5zLTExNy4yLTU1LjgtMTg0LjUtNjYuNWMtLjcgMC0yLS4zLTQtMS0xOC43LTIuNy03Ni00LjMtMTcyLTVIMFYyMTRoMzk5NTcxbDYgMVxcbmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpcIixcbiAgcmlnaHRicmFjZXVuZGVyOiBcIk0zOTk5OTQgMGw2IDZ2MzVsLTYgMTFjLTU2IDEwNC0xMzUuMyAxODEuMy0yMzggMjMyLTU3LjNcXG4gMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzN1xcbi0xNzQgMi43LTUgNi05IDEwLTEzIC43LTEgNy4zLTEgMjAtMWgxN3pcIixcbiAgcmlnaHRncm91cDogXCJNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDBcXG4gMy0xIDMtM3YtMzhjLTc2LTE1OC0yNTctMjE5LTQzNS0yMTlIMHpcIixcbiAgcmlnaHRncm91cHVuZGVyOiBcIk0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMThcXG4gMCAyIDAgMyAxIDMgM3YzOGMtNzYgMTU4LTI1NyAyMTktNDM1IDIxOUgwelwiLFxuICByaWdodGhhcnBvb246IFwiTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjNcXG4tMy43LTE1LjMtMTEtMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTJcXG4tMTAuNyAwLTE2LjcgMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4XFxuIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbnBsdXM6IFwiTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMtMy43LTE1LjMtMTFcXG4tMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjdcXG4gMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4IDY5LjIgOTIgOTQuNXpcXG5tMCAwdjQwaDM5OTkwMHYtNDB6IG0xMDAgMTk0djQwaDM5OTkwMHYtNDB6bTAgMHY0MGgzOTk5MDB2LTQwelwiLFxuICByaWdodGhhcnBvb25kb3duOiBcIk0zOTk3NDcgNTExYzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjggMTUtMi41czQuNy02LjhcXG4gOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjMgOC41LTUuOCA5LjVcXG4tNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NVxcbi0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd25wbHVzOiBcIk0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjhcXG4gMTUtMi41czQuNy02LjggOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjNcXG4gOC41LTUuOCA5LjUtNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjNcXG4tNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6XFxubTAtMTk0djQwaDQwMDAwMHYtNDB6bTAgMHY0MGg0MDAwMDB2LTQwelwiLFxuICByaWdodGhvb2s6IFwiTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zXFxuIDE1LTQwIDAtMjIuNy05LjgtNDAuNy0yOS41LTU0LTE5LjctMTMuMy00My41LTIxLTcxLjUtMjMtMTcuMy0xLjMtMjYtOC0yNi0yMCAwXFxuLTEzLjMgOC43LTIwIDI2LTIwIDM4IDAgNzEgMTEuMiA5OSAzMy41IDAgMCA3IDUuNiAyMSAxNi43IDE0IDExLjIgMjEgMzMuNSAyMVxcbiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpcIixcbiAgcmlnaHRsaW5lc2VnbWVudDogXCJNMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XFxuTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwelwiLFxuICByaWdodFRvRnJvbTogXCJNNDAwMDAwIDE2N2MtNzAuNy00Mi0xMTgtOTcuNy0xNDItMTY3aC0yM2MtMTUuMyAwLTIzIC4zLTIzXFxuIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMlxcbi01MiA2NS43LTcwIDEwMS0xMC43IDIzLjMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjNjMjQtNjkuMyA3MS4zLTEyNSAxNDJcXG4tMTY3eiBNMTAwIDE0N3Y0MGgzOTk5MDB2LTQwek0wIDM0MXY0MGgzOTk5MDB2LTQwelwiLFxuICAvLyB0d29oZWFkbGVmdGFycm93IGlzIGZyb20gZ2x5cGggVSsyMTlFIGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgdHdvaGVhZGxlZnRhcnJvdzogXCJNMCAxNjdjNjggNDBcXG4gMTE1LjcgOTUuNyAxNDMgMTY3aDIyYzE1LjMgMCAyMy0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OVxcbi03MC0xMDFsLTctOGgxMjVsOSA3YzUwLjcgMzkuMyA4NSA4NiAxMDMgMTQwaDQ2YzAtNC43LTYuMy0xOC43LTE5LTQyLTE4LTM1LjNcXG4tNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTlcXG4tMzcuMzMzIDE5LTQyaC00NmMtMTggNTQtNTIuMyAxMDAuNy0xMDMgMTQwbC05IDdIOTVsNy04YzI4LjctMzIgNTItNjUuNyA3MC0xMDFcXG4gMTAuNy0yMy4zMzMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDcxLjMgNjggMTI3IDAgMTY3elwiLFxuICB0d29oZWFkcmlnaHRhcnJvdzogXCJNNDAwMDAwIDE2N1xcbmMtNjgtNDAtMTE1LjctOTUuNy0xNDMtMTY3aC0yMmMtMTUuMyAwLTIzIC4zLTIzIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuM1xcbiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDJcXG4gMTggMzUuMyA0MCA2Ny4zIDY2IDk2bDkgOUgwdjQwaDM5OTcxNmwtOSA5Yy0yNiAyOC43LTQ4IDYwLjctNjYgOTYtMTIuNyAyMy4zMzNcXG4tMTkgMzcuMzMzLTE5IDQyaDQ2YzE4LTU0IDUyLjMtMTAwLjcgMTAzLTE0MGw5LTdoMTI1bC03IDhjLTI4LjcgMzItNTIgNjUuNy03MFxcbiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3elwiLFxuICAvLyB0aWxkZTEgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGEgZ2x5cGggZnJvbSB0aGUgTW5TeW1ib2wgcGFja2FnZVxuICB0aWxkZTE6IFwiTTIwMCA1NS41MzhjLTc3IDAtMTY4IDczLjk1My0xNzcgNzMuOTUzLTMgMC03XFxuLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDBcXG4gMTE0IDY4IDE5MSA2OCA3OCAwIDE2OC02OCAxNzctNjggNCAwIDcgMiA5IDVsMTIgMTljMSAyLjE3NSAyIDQuMzUgMiA2LjUyNSAwXFxuIDQuMzUtMiA3LjYxMy01IDkuNzg4bC0xOSAxMy4wNWMtOTIgNjMuMDc3LTExNi45MzcgNzUuMzA4LTE4MyA3Ni4xMjhcXG4tNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6XCIsXG4gIC8vIGRpdHRvIHRpbGRlMiwgdGlsZGUzLCAmIHRpbGRlNFxuICB0aWxkZTI6IFwiTTM0NCA1NS4yNjZjLTE0MiAwLTMwMC42MzggODEuMzE2LTMxMS41IDg2LjQxOFxcbi04LjAxIDMuNzYyLTIyLjUgMTAuOTEtMjMuNSA1LjU2MkwxIDEyMGMtMS0yLTEtMy0xLTQgMC01IDMtOSA4LTEwbDE4LjQtOUMxNjAuOVxcbiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNFxcbmMxIDIuMTQgMSAzLjIxIDEgNC4yOCAwIDUuMzQ3LTMgOS42MjYtNyAxMC42OTZsLTIyLjMgMTIuNjIyQzg1Mi42IDE1OC4zNzIgNzUxXFxuIDE4MS40NzYgNjc2IDE4MS40NzZjLTE0OSAwLTE4OS0xMjYuMjEtMzMyLTEyNi4yMXpcIixcbiAgdGlsZGUzOiBcIk03ODYgNTlDNDU3IDU5IDMyIDE3NS4yNDIgMTMgMTc1LjI0MmMtNiAwLTEwLTMuNDU3XFxuLTExLTEwLjM3TC4xNSAxMzhjLTEtNyAzLTEyIDEwLTEzbDE5LjItNi40QzM3OC40IDQwLjcgNjM0LjMgMCA4MDQuMyAwYzMzNyAwXFxuIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3XFxuIDE2LjU5NS02LjY5NyAxNy40OTJsLTIxLjA1MiA3LjMxYy0zNjcuOSA5OC4xNDYtNjA5LjE1IDEyMi42OTYtNzc4LjE1IDEyMi42OTZcXG4gLTMzOCAwLTQwOS0xNTYuNTczLTc0NC0xNTYuNTczelwiLFxuICB0aWxkZTQ6IFwiTTc4NiA1OEM0NTcgNTggMzIgMTc3LjQ4NyAxMyAxNzcuNDg3Yy02IDAtMTAtMy4zNDVcXG4tMTEtMTAuMDM1TC4xNSAxNDNjLTEtNyAzLTEyIDEwLTEzbDIyLTYuN0MzODEuMiAzNSA2MzcuMTUgMCA4MDcuMTUgMGMzMzcgMCA0MDlcXG4gMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTlcXG4gMTQuNDk1bC0yMC43IDUuNTc0Yy0zNjYuODUgOTkuNzktNjA3LjMgMTM5LjM3Mi03NzYuMyAxMzkuMzcyLTMzOCAwLTQwOVxcbiAtMTc1LjIzNi03NDQtMTc1LjIzNnpcIixcbiAgLy8gdmVjIGlzIGZyb20gZ2x5cGggVSsyMEQ3IGluIGZvbnQgS2FUZVggTWFpblxuICB2ZWM6IFwiTTM3NyAyMGMwLTUuMzMzIDEuODMzLTEwIDUuNS0xNFMzOTEgMCAzOTcgMGM0LjY2NyAwIDguNjY3IDEuNjY3IDEyIDVcXG4zLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExXFxuMTAuNjY3IDExIDE4IDAgNi0xIDEwLTMgMTJzLTYuNjY3IDUtMTQgOWMtMjguNjY3IDE0LjY2Ny01My42NjcgMzUuNjY3LTc1IDYzXFxuLTEuMzMzIDEuMzMzLTMuMTY3IDMuNS01LjUgNi41cy00IDQuODMzLTUgNS41Yy0xIC42NjctMi41IDEuMzMzLTQuNSAycy00LjMzMyAxXFxuLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OVxcbkgyMTNsLTE3MS0xYy04LjY2Ny02LTEzLTEyLjMzMy0xMy0xOSAwLTQuNjY3IDQuMzMzLTExLjMzMyAxMy0yMGgzNTlcXG5jLTE2LTI1LjMzMy0yNC00NS0yNC01OXpcIixcbiAgLy8gd2lkZWhhdDEgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGEgZ2x5cGggZnJvbSB0aGUgTW5TeW1ib2wgcGFja2FnZVxuICB3aWRlaGF0MTogXCJNNTI5IDBoNWw1MTkgMTE1YzUgMSA5IDUgOSAxMCAwIDEtMSAyLTEgM2wtNCAyMlxcbmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pcIixcbiAgLy8gZGl0dG8gd2lkZWhhdDIsIHdpZGVoYXQzLCAmIHdpZGVoYXQ0XG4gIHdpZGVoYXQyOiBcIk0xMTgxIDBoMmwxMTcxIDE3NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAyMjBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgd2lkZWhhdDM6IFwiTTExODEgMGgybDExNzEgMjM2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDI4MGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0NDogXCJNMTE4MSAwaDJsMTE3MSAyOTZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMzQwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIC8vIHdpZGVjaGVjayBwYXRocyBhcmUgYWxsIGludmVydGVkIHZlcnNpb25zIG9mIHdpZGVoYXRcbiAgd2lkZWNoZWNrMTogXCJNNTI5LDE1OWg1bDUxOSwtMTE1YzUsLTEsOSwtNSw5LC0xMGMwLC0xLC0xLC0yLC0xLC0zbC00LC0yMmMtMSxcXG4tNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6XCIsXG4gIHdpZGVjaGVjazI6IFwiTTExODEsMjIwaDJsMTE3MSwtMTc2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgd2lkZWNoZWNrMzogXCJNMTE4MSwyODBoMmwxMTcxLC0yMzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2s0OiBcIk0xMTgxLDM0MGgybDExNzEsLTI5NmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIC8vIFRoZSBuZXh0IHRlbiBwYXRocyBzdXBwb3J0IHJlYWN0aW9uIGFycm93cyBmcm9tIHRoZSBtaGNoZW0gcGFja2FnZS5cbiAgLy8gQXJyb3dzIGZvciBcXGNlezwtLT59IGFyZSBvZmZzZXQgZnJvbSB4QXhpcyBieSAwLjIyZXgsIHBlciBtaGNoZW0gaW4gTGFUZVhcbiAgLy8gYmFyYWJvdmVsZWZ0YXJyb3cgaXMgbW9zdGx5IGZyb20gZ2x5cGggVSsyMTkwIGluIGZvbnQgS2FUZVggTWFpblxuICBiYXJhYm92ZWxlZnRhcnJvdzogXCJNNDAwMDAwIDYyMGgtMzk5ODkwbDMgLTNjNjguNyAtNTIuNyAxMTMuNyAtMTIwIDEzNSAtMjAyXFxuYzQgLTE0LjcgNiAtMjMgNiAtMjVjMCAtNy4zIC03IC0xMSAtMjEgLTExYy04IDAgLTEzLjIgMC44IC0xNS41IDIuNVxcbmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMFxcbnMtNzQuMiA2Ni4zIC0xMjEuNSA4NWMtMTAgNCAtMTYgNy43IC0xOCAxMWMwIDguNyA2IDE0LjMgMTggMTdjNDcuMyAxOC43IDg3LjggNDdcXG4xMjEuNSA4NXM1Ni41IDgxLjMgNjguNSAxMzBjMC43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjMC4zIDEuMyAxIDMuMyAyIDZcXG5zMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMVxcbmMwIC0yIC0yIC0xMC4zIC02IC0yNWMtMjAgLTc5LjMgLTY1IC0xNDYuNyAtMTM1IC0yMDJsLTMgLTNoMzk5ODkwelxcbk0xMDAgNjIwdjQwaDM5OTkwMHYtNDB6IE0wIDI0MXY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwelwiLFxuICAvLyByaWdodGFycm93YWJvdmViYXIgaXMgbW9zdGx5IGZyb20gZ2x5cGggVSsyMTkyLCBLYVRlWCBNYWluXG4gIHJpZ2h0YXJyb3dhYm92ZWJhcjogXCJNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOC0xNi43IDMyXFxuLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMFxcbjEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43IDM5XFxuLTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1LTQwLjVcXG4tMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4xNTEuNyAxMzkgMjA1em05NiAzNzloMzk5ODk0djQwSDB6bTAgMGgzOTk5MDR2NDBIMHpcIixcbiAgLy8gVGhlIHNob3J0IGxlZnQgaGFycG9vbiBoYXMgMC41ZW0gKGkuZS4gNTAwIHVuaXRzKSBrZXJuIG9uIHRoZSBsZWZ0IGVuZC5cbiAgLy8gUmVmIGZyb20gbWhjaGVtLnN0eTogXFxybGFwe1xccmFpc2Vib3h7LS4yMmV4fXskXFxrZXJuMC41ZW1cbiAgYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOiBcIk01MDcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMVxcbmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTdcXG5jMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMVxcbmMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LC0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5MzUxLDBsMCwtNDBcXG5jLTM5ODU3MCwwLC0zOTk0MzcsMCwtMzk5NDM3LDB6IE01OTMgNDM1IHY0MCBIMzk5NTAwIHYtNDB6XFxuTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwelwiLFxuICByaWdodGhhcnBvb25hYm92ZXNob3J0YmFyOiBcIk0wLDI0MSBsMCw0MGMzOTkxMjYsMCwzOTk5OTMsMCwzOTk5OTMsMFxcbmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LFxcbi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDZcXG5jLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6XFxuTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpcIixcbiAgc2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uOiBcIk03LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTFcXG5jMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LFxcbjFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFjLTMyLC04Ny4zLC04Mi43LC0xNTcuNyxcXG4tMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTkwNywwbDAsLTQwYy0zOTkxMjYsMCwtMzk5OTkzLDAsLTM5OTk5Mywwelxcbk05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpcIixcbiAgc2hvcnRyaWdodGhhcnBvb25hYm92ZWJhcjogXCJNNTMsMjQxbDAsNDBjMzk4NTcwLDAsMzk5NDM3LDAsMzk5NDM3LDBcXG5jNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSxcXG4tMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2XFxuYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41elxcbk01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6XCJcbn07XG52YXIgdGFsbERlbGltID0gZnVuY3Rpb24gdGFsbERlbGltKGxhYmVsLCBtaWRIZWlnaHQpIHtcbiAgc3dpdGNoIChsYWJlbCkge1xuICAgIGNhc2UgXCJsYnJhY2tcIjpcbiAgICAgIHJldHVybiBcIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IGgzNDcgdi04NFxcbkg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IGg4NHpcIjtcblxuICAgIGNhc2UgXCJyYnJhY2tcIjpcbiAgICAgIHJldHVybiBcIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc1OSBIMCB2ODQgSDM0N3pcXG5NMzQ3IDE3NTkgVjAgSDI2MyBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc1OSBoODR6XCI7XG5cbiAgICBjYXNlIFwidmVydFwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAxNSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1XFxuYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2XCIgKyAtbWlkSGVpZ2h0ICsgXCIgdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1XFxuYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgaDQzelwiO1xuXG4gICAgY2FzZSBcImRvdWJsZXZlcnRcIjpcbiAgICAgIHJldHVybiBcIk0xNDUgMTUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNVxcbmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdlwiICsgLW1pZEhlaWdodCArIFwiIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNVxcbmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGg0M3pcXG5NMzY3IDE1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTVcXG5jMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZcIiArIC1taWRIZWlnaHQgKyBcIiB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTVcXG5jLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTQxMCAxNSBIMzY3IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBoNDN6XCI7XG5cbiAgICBjYXNlIFwibGZsb29yXCI6XG4gICAgICByZXR1cm4gXCJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3MTUgaDI2MyB2ODQgSDMxOXpcXG5NTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzE1IEgzMTl6XCI7XG5cbiAgICBjYXNlIFwicmZsb29yXCI6XG4gICAgICByZXR1cm4gXCJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3OTkgSDAgdi04NCBIMzE5elxcbk1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3MTUgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJsY2VpbFwiOlxuICAgICAgcmV0dXJuIFwiTTQwMyAxNzU5IFY4NCBINjY2IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjYwMiBoODR6XFxuTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjYwMiBoODR6XCI7XG5cbiAgICBjYXNlIFwicmNlaWxcIjpcbiAgICAgIHJldHVybiBcIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcXG5NMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcIjtcblxuICAgIGNhc2UgXCJscGFyZW5cIjpcbiAgICAgIHJldHVybiBcIk04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMVxcbmMtNS4zLDUuMywtMTAuMywxMSwtMTUsMTdjLTI0Mi43LDI5NC43LC0zOTUuMyw2ODIsLTQ1OCwxMTYyYy0yMS4zLDE2My4zLC0zMy4zLDM0OSxcXG4tMzYsNTU3IGwwLFwiICsgKG1pZEhlaWdodCArIDg0KSArIFwiYzAuMiw2LDAsMjYsMCw2MGMyLDE1OS4zLDEwLDMxMC43LDI0LDQ1NGM1My4zLDUyOCwyMTAsXFxuOTQ5LjcsNDcwLDEyNjVjNC43LDYsOS43LDExLjcsMTUsMTdjMC43LDAuNyw3LDEsMTksMWMwLDAsMTgsMCwxOCwwYzQsLTQsNiwtNyw2LC05XFxuYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsXFxuLTU0NC43LC0xMTIuNSwtODgyYy0yLC0xMDQsLTMsLTE2NywtMywtMTg5XFxubDAsLVwiICsgKG1pZEhlaWdodCArIDkyKSArIFwiYzAsLTE2Mi43LDUuNywtMzE0LDE3LC00NTRjMjAuNywtMjcyLDYzLjcsLTUxMywxMjksLTcyM2M2NS4zLFxcbi0yMTAsMTU1LjMsLTM5Ni4zLDI3MCwtNTU5YzYuNywtOS4zLDEwLC0xNS4zLDEwLC0xOHpcIjtcblxuICAgIGNhc2UgXCJycGFyZW5cIjpcbiAgICAgIHJldHVybiBcIk03NiwwYy0xNi43LDAsLTI1LDMsLTI1LDljMCwyLDIsNi4zLDYsMTNjMjEuMywyOC43LDQyLjMsNjAuMyxcXG42Myw5NWM5Ni43LDE1Ni43LDE3Mi44LDMzMi41LDIyOC41LDUyNy41YzU1LjcsMTk1LDkyLjgsNDE2LjUsMTExLjUsNjY0LjVcXG5jMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsXCIgKyAobWlkSGVpZ2h0ICsgOSkgKyBcIlxcbmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NFxcbmMtNTUuNywxOTQuNywtMTMxLjgsMzcwLjMsLTIyOC41LDUyN2MtMjAuNywzNC43LC00MS43LDY2LjMsLTYzLDk1Yy0yLDMuMywtNCw3LC02LDExXFxuYzAsNy4zLDUuNywxMSwxNywxMWMwLDAsMTEsMCwxMSwwYzkuMywwLDE0LjMsLTAuMywxNSwtMWM1LjMsLTUuMywxMC4zLC0xMSwxNSwtMTdcXG5jMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OFxcbmwwLC1cIiArIChtaWRIZWlnaHQgKyAxNDQpICsgXCJjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNyxcXG4tNDcwLC0xMjY1Yy00LjcsLTYsLTkuNywtMTEuNywtMTUsLTE3Yy0wLjcsLTAuNywtNi43LC0xLC0xOCwtMXpcIjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBXZSBzaG91bGQgbm90IGV2ZXIgZ2V0IGhlcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHN0cmV0Y2h5IGRlbGltaXRlci5cIik7XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBkb2N1bWVudCBmcmFnbWVudCwgd2hpY2ggY29udGFpbnMgZWxlbWVudHMsIGJ1dCB3aGVuXG4gKiBwbGFjZWQgaW50byB0aGUgRE9NIGRvZXNuJ3QgaGF2ZSBhbnkgcmVwcmVzZW50YXRpb24gaXRzZWxmLiBJdCBvbmx5IGNvbnRhaW5zXG4gKiBjaGlsZHJlbiBhbmQgZG9lc24ndCBoYXZlIGFueSBET00gbm9kZSBwcm9wZXJ0aWVzLlxuICovXG5jbGFzcyBEb2N1bWVudEZyYWdtZW50IHtcbiAgLy8gSHRtbERvbU5vZGVcbiAgLy8gTmV2ZXIgdXNlZDsgbmVlZGVkIGZvciBzYXRpc2Z5aW5nIGludGVyZmFjZS5cbiAgY29uc3RydWN0b3IoY2hpbGRyZW4pIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5jbGFzc2VzID0gW107XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuICAgIHRoaXMuZGVwdGggPSAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSAwO1xuICAgIHRoaXMuc3R5bGUgPSB7fTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gYSBub2RlLiAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmcmFnLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFnO1xuICB9XG4gIC8qKiBDb252ZXJ0IHRoZSBmcmFnbWVudCBpbnRvIEhUTUwgbWFya3VwLiAqL1xuXG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiXCI7IC8vIFNpbXBseSBjb25jYXRlbmF0ZSB0aGUgbWFya3VwIGZvciB0aGUgY2hpbGRyZW4gdG9nZXRoZXIuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgc3RyaW5nLCBzaW1pbGFyIHRvIGlubmVyVGV4dC4gQXBwbGllcyB0b1xuICAgKiBNYXRoRG9tTm9kZSdzIG9ubHkuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIC8vIFRvIGF2b2lkIHRoaXMsIHdlIHdvdWxkIHN1YmNsYXNzIGRvY3VtZW50RnJhZ21lbnQgc2VwYXJhdGVseSBmb3JcbiAgICAvLyBNYXRoTUwsIGJ1dCBwb2x5ZmlsbHMgZm9yIHN1YmNsYXNzaW5nIGlzIGV4cGVuc2l2ZSBwZXIgUFIgMTQ2OS5cbiAgICAvLyAkRmxvd0ZpeE1lOiBPbmx5IHdvcmtzIGZvciBDaGlsZFR5cGUgPSBNYXRoRG9tTm9kZS5cbiAgICB2YXIgdG9UZXh0ID0gY2hpbGQgPT4gY2hpbGQudG9UZXh0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAodG9UZXh0KS5qb2luKFwiXCIpO1xuICB9XG5cbn1cblxuLy8gVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBieSBidWlsZE1ldHJpY3Muc2guIERPIE5PVCBNT0RJRlkuXG52YXIgZm9udE1ldHJpY3NEYXRhID0ge1xuICBcIkFNUy1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjY5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjczXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjc0XCI6IFswLjE2NjY3LCAwLjY4ODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNzlcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODFcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDEuMF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2NVwiOiBbMCwgMC42NzUsIDAuMDI1LCAwLCAwLjc1XSxcbiAgICBcIjE3NFwiOiBbMC4xNTU1OSwgMC42OTIyNCwgMCwgMCwgMC45NDY2Nl0sXG4gICAgXCIyNDBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMjk1XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjcxMFwiOiBbMCwgMC44MjUsIDAsIDAsIDIuMzMzMzRdLFxuICAgIFwiNzMyXCI6IFswLCAwLjksIDAsIDAsIDIuMzMzMzRdLFxuICAgIFwiNzcwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzFcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI5ODlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMTAwOFwiOiBbMCwgMC40MzA1NiwgMC4wNDAyOCwgMCwgMC42NjY2N10sXG4gICAgXCI4MjQ1XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjI3NV0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjg0ODdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODQ5OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NTAyXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MDNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODUwNFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NTEzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg1OTJcIjogWy0wLjAzNTk4LCAwLjQ2NDAyLCAwLCAwLCAwLjVdLFxuICAgIFwiODU5NFwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjAyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDNcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwNlwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDhcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjEwXCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg2MTFcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxOVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjIxXCI6IFstMC4xMzMxMywgMC4zNzc4OCwgMCwgMCwgMS4zODg4OV0sXG4gICAgXCI4NjIyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjI1XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiODYzMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjM0XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2MzVcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzOFwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjM5XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0M1wiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQ0XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0NlwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDdcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg2NDlcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUwXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg2NTFcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUyXCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1M1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTVcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2NlwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjdcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY5XCI6IFstMC4xMzMxMywgMC4zNzc4OCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NzJcIjogWy0wLjA2NCwgMC40MzcsIDAsIDAsIDEuMzM0XSxcbiAgICBcIjg2NzRcIjogWy0wLjA2NCwgMC40MzcsIDAsIDAsIDEuMzM0XSxcbiAgICBcIjg3MDVcIjogWzAsIDAuODI1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcwOFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA5XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiODcyMlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI0XCI6IFswLjA4MTk4LCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjZcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODczM1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzM2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOFwiOiBbMC4wMzUxNywgMC41MjIzOSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjg3NDBcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc0MVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI4NzQyXCI6IFswLjI1MTQyLCAwLjc0MTExLCAwLCAwLCAwLjVdLFxuICAgIFwiODc1NlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzU3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NjRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjVcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjlcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzBcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzRcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3OFwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzgyXCI6IFswLjA2MDYyLCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODNcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg2XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODdcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5MFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkxXCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTZcIjogWzAuMDgxOTgsIDAuOTE2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNlwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA3XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDhcIjogWzAuMjUxNDIsIDAuNzU3MjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOVwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODEyXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjVdLFxuICAgIFwiODgxNFwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE1XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTZcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxN1wiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE4XCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTlcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyMlwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIzXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjhcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMwXCI6IFswLjIyOTU4LCAwLjcyOTU4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMlwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMzXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDBcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQyXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDNcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0N1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ4XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NThcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODYxXCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjJcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjNcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjRcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjVcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NzJcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg3M1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODc0XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjg4NzZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg3N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzlcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg4MlwiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODgzXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODRcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg4XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTBcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODg5MVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODkyXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg5MDFcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODkwM1wiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA1XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDZcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDlcIjogWy0wLjAzNTk4LCAwLjQ2NDAyLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MTBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzYwNDJdLFxuICAgIFwiODkxMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTEyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MTNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxNFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE1XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxOFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxOVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyMFwiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMS4zMzMzNF0sXG4gICAgXCI4OTIxXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjJcIjogWzAuMzg1NjksIDAuODg1NjksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyM1wiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjdcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyOFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzRcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNVwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM2XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzdcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzOFwiOiBbMC4yMDU3NiwgMC43MDU3NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM5XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5NDBcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTk0XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTVcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTQxNlwiOiBbMC4xNTU1OSwgMC42OTIyNCwgMCwgMCwgMC45MDIyMl0sXG4gICAgXCI5NDg0XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ4OFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTJcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDk2XCI6IFswLCAwLjM3Nzg4LCAwLCAwLCAwLjVdLFxuICAgIFwiOTU4NVwiOiBbMC4xOTQ0NCwgMC42ODg4OSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NTg2XCI6IFswLjE5NDQ0LCAwLjc0MTExLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk2MzJcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2MzNcIjogWzAsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NTBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTY1MVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjU0XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NjBcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTY2MVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjY0XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk2NzRcIjogWzAuMTExMTEsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTczM1wiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCIxMDAwM1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDAxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDczMVwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDg0NlwiOiBbMC4xOTQ0NCwgMC43NTU4MywgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxMDg3N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg3OFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4NVwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4NlwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4N1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4OFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg4OVwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MFwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MVwiOiBbMC40ODI1NiwgMC45ODI1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDg5MlwiOiBbMC40ODI1NiwgMC45ODI1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkwMVwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkwMlwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzM1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNVwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzNlwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzN1wiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkzOFwiOiBbMC4yNjE2NywgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk0OVwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1MFwiOiBbMC4yNTU4MywgMC43NTU4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1NVwiOiBbMC4yODQ4MSwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDk1NlwiOiBbMC4yODQ4MSwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1MFwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4yMjIyMl0sXG4gICAgXCI1NzM1MVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI1NzM1MlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1M1wiOiBbMCwgMC40MzA1NiwgMC4wNDAyOCwgMCwgMC42NjY2N10sXG4gICAgXCI1NzM1NlwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1N1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1OFwiOiBbMC40MTk1MSwgMC45MTk1MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM1OVwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2MVwiOiBbMC40MTk1MSwgMC45MTk1MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2NlwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2N1wiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2OFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM2OVwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3MFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3MVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF1cbiAgfSxcbiAgXCJDYWxpZ3JhcGhpYy1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4MzMzLCAwLCAwLjE5NDQ1LCAwLjc5ODQ3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4MzMzLCAwLjAzMDQxLCAwLjEzODg5LCAwLjY1NjgxXSxcbiAgICBcIjY3XCI6IFswLCAwLjY4MzMzLCAwLjA1ODM0LCAwLjEzODg5LCAwLjUyNjUzXSxcbiAgICBcIjY4XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc3MTM5XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4MzMzLCAwLjA4OTQ0LCAwLjExMTExLCAwLjUyNzc4XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjA5OTMxLCAwLjExMTExLCAwLjcxODc1XSxcbiAgICBcIjcxXCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjA1OTMsIDAuMTExMTEsIDAuNTk0ODddLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAuMDA5NjUsIDAuMTExMTEsIDAuODQ0NTJdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAuMDczODIsIDAsIDAuNTQ0NTJdLFxuICAgIFwiNzRcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMTg0NzIsIDAuMTY2NjcsIDAuNjc3NzhdLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAuMDE0NDUsIDAuMDU1NTYsIDAuNzYxOTVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDAuNjg5NzJdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDEuMjAwOV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xNDczNiwgMC4wODMzNCwgMC44MjA0OV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4xMTExMSwgMC43OTYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC42OTU1Nl0sXG4gICAgXCI4MVwiOiBbMC4wOTcyMiwgMC42ODMzMywgMCwgMC4xMTExMSwgMC44MTY2N10sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC44NDc1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA3NSwgMC4xMzg4OSwgMC42MDU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODMzMywgMC4yNTQxNywgMCwgMC41NDQ2NF0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODMzMywgMC4wOTkzMSwgMC4wODMzNCwgMC42MjU4M10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMCwgMC42MTI3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODMzMywgMC4wODIyMiwgMC4wODMzNCwgMC45ODc3OF0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODMzMywgMC4xNDY0MywgMC4xMzg4OSwgMC43MTMzXSxcbiAgICBcIjg5XCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjY2ODM0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjA3OTQ0LCAwLjEzODg5LCAwLjcyNDczXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV1cbiAgfSxcbiAgXCJGcmFrdHVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjk1NzRdLFxuICAgIFwiMzRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiMzhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzM3ODZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjEyMDFdLFxuICAgIFwiNDBcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDFcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuMzg4NjVdLFxuICAgIFwiNDJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDNcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDRcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDVcIjogWzAuMDgzMTksIDAuNTgyODMsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA4MDMsIDAsIDAsIDAuMjc3NjRdLFxuICAgIFwiNDdcIjogWzAuMjQ5ODIsIDAuNzQ5NDcsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDhcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNDlcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTVcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNTdcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAxODFdLFxuICAgIFwiNThcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNTlcIjogWzAuMTI2MDQsIDAuNDc1MzQsIDAsIDAsIDAuMjE2MDZdLFxuICAgIFwiNjFcIjogWy0wLjEzMDk5LCAwLjM2ODY2LCAwLCAwLCAwLjc1NjIzXSxcbiAgICBcIjYzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjM2MjQ1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxNzZdLFxuICAgIFwiNjZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODgzOTddLFxuICAgIFwiNjdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjEyNTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuODMxNThdLFxuICAgIFwiNjlcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNjYyNzhdLFxuICAgIFwiNzBcIjogWzAuMTI2MDQsIDAuNjkxNDEsIDAsIDAsIDAuNjExMTldLFxuICAgIFwiNzFcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzg1MzldLFxuICAgIFwiNzJcIjogWzAuMDYzMDIsIDAuNjkxNDEsIDAsIDAsIDAuNzIwM10sXG4gICAgXCI3M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41NTQ0OF0sXG4gICAgXCI3NFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC41NTIzMV0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjYwMl0sXG4gICAgXCI3N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDk1M10sXG4gICAgXCI3OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzIxMl0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44Mjc1M10sXG4gICAgXCI4MVwiOiBbMC4wMzc4MSwgMC42OTE0MSwgMCwgMCwgMC44MjY5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MjgwN10sXG4gICAgXCI4M1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44Mjg2MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42Njg5OV0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NDU3Nl0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzEzMV0sXG4gICAgXCI4N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMS4wNDYwMl0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43MTkyMl0sXG4gICAgXCI4OVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC44MzI5M10sXG4gICAgXCI5MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MDIwMV0sXG4gICAgXCI5MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5M1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC40OTk2NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MTMxNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4NTddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQwMDUzXSxcbiAgICBcIjEwMlwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjYyNl0sXG4gICAgXCIxMDNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNTAzN10sXG4gICAgXCIxMDRcIjogWzAuMTg5MDYsIDAuNjkxNDEsIDAsIDAsIDAuNTIxMjZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3ODk5XSxcbiAgICBcIjEwNlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yODA4OF0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzg5NDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI3OTUzXSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC43NjY3Nl0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTI2NjZdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ4ODg1XSxcbiAgICBcIjExMlwiOiBbMC4xODkwNiwgMC41MjM5NiwgMCwgMCwgMC41MDA0Nl0sXG4gICAgXCIxMTNcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDg5MTJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTE5XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC40NDI2Nl0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuMzMzMDFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUxNzJdLFxuICAgIFwiMTE4XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjUxMThdLFxuICAgIFwiMTE5XCI6IFswLCAwLjUyMzk2LCAwLCAwLCAwLjc3MzUxXSxcbiAgICBcIjEyMFwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC4zODg2NV0sXG4gICAgXCIxMjFcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuNDk4ODRdLFxuICAgIFwiMTIyXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM5MDU0XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjIxNDcxXSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiNTgxMTJcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk3NDldLFxuICAgIFwiNTgxMTNcIjogWzAsIDAuNjIxMTksIDAsIDAsIDAuNDk4M10sXG4gICAgXCI1ODExNFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMzMyOF0sXG4gICAgXCI1ODExNVwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC4zMjkyM10sXG4gICAgXCI1ODExNlwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDM0M10sXG4gICAgXCI1ODExN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4zMzMwMV0sXG4gICAgXCI1ODExOFwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4zMzQwOV0sXG4gICAgXCI1ODExOVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDA3M11cbiAgfSxcbiAgXCJNYWluLUJvbGRcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjAyNzhdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0M1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xNTU1NiwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zODMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xNTU1NiwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUyXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU1XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjYwXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2MlwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDMwNV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44Njk0NF0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MTgwNV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODE5NF0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43MjM2MV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45MDQxNl0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjczXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjQzNjExXSxcbiAgICBcIjc0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjU5NDQ0XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwMTM4XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjY5MTY2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAxLjA5MTY2XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODYzODhdLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzg2MTFdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAsIDAsIDAuODYzODhdLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODYyNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4NDcyXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4NjExLCAwLjAxNTk3LCAwLCAwLjg2OTQ0XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4NjExLCAwLjAxNTk3LCAwLCAxLjE4ODg4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4NjExLCAwLjAyODc1LCAwLCAwLjg2OTQ0XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjkyXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTM0NDQsIDAuMDMxOTQsIDAsIDAuNTc1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1OTAyXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTI3MDhdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjEwOTAzLCAwLCAwLjM1MTM5XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTU5NywgMCwgMC41NzVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzUxMzldLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDczNjFdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ1MzYxXSxcbiAgICBcIjExNlwiOiBbMCwgMC42MzQ5MiwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjYwNjk0XSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTU5NywgMCwgMC44MzA1NV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjYwNjk0XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxMjNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zNDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44Njg1M10sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiMTc3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDQxNjZdLFxuICAgIFwiMjE1XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzQ3MiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyMjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjI0N1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMTY5NDRdLFxuICAgIFwiMzM5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU5NjExLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjM0NDQ0XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzI0NDQsIDAuMTU0ODYsIDAsIDAuNTc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MzYxXSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQwMjddLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg1OTJcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTRcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OTZcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjAwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzNlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYzN1wiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY0MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY1N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NjU4XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NjBcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA2Mzg5LCAwLCAwLjYyODQ3XSxcbiAgICBcIjg3MDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODcwOVwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzEyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3MTVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcyMlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzIzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjdcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI4XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MzBcIjogWzAuMTgsIDAuODIsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiODczM1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzM0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzQzXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDRcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTI3NzgsIDAsIDAuNTY4NzVdLFxuICAgIFwiODc2NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4NzcxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3NzNcIjogWzAuMDI3LCAwLjYzOCwgMCwgMCwgMC44OTRdLFxuICAgIFwiODc3NlwiOiBbMC4wMjQ0NCwgMC41MjQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzgxXCI6IFswLjAwMjIyLCAwLjUwMjIyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwNFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODA1XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MTBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODgxMVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4ODI2XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MjdcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzNFwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM1XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzhcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzOVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODQ2XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NDlcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1MFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODUxXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg4NTJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg1M1wiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU0XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTVcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NlwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODg2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4ODY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODkwMFwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg5MDFcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg5MDJcIjogWy0wLjAyNzc4LCAwLjQ3MjIyLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5OTRcIjogWy0wLjEzODg5LCAwLjM2MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg5OTVcIjogWy0wLjEzODg5LCAwLjM2MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjk2NTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMDIyMjJdLFxuICAgIFwiOTY1N1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMDIyMjJdLFxuICAgIFwiOTY2N1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjk3MTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45XSxcbiAgICBcIjEwOTI3XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjEwOTI4XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjU3Mzc2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwXVxuICB9LFxuICBcIk1haW4tQm9sZEl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQxNywgMCwgMC4zODYxMV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNzkzOSwgMCwgMC42MjA1NV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjgzMywgMCwgMC45NDQ0NF0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4xMjg2MSwgMCwgMC45NDQ0NF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wODUyOCwgMCwgMC44ODU1NV0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xNTgwNiwgMCwgMC40NzMzM10sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMzMwNiwgMCwgMC40NzMzM10sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xNDMzMywgMCwgMC41OTExMV0sXG4gICAgXCI0M1wiOiBbMC4xMDMzMywgMC42MDMzMywgMC4wMzMwNiwgMCwgMC44ODU1NV0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xNDcyMiwgMCwgMCwgMC4zNTU1NV0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMC4wMjYxMSwgMCwgMC40MTQ0NF0sXG4gICAgXCI0NlwiOiBbMCwgMC4xNDcyMiwgMCwgMCwgMC4zNTU1NV0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xNTgwNiwgMCwgMC41OTExMV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMC4xMzE2NywgMCwgMC41OTExMV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMC4wNjY5NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNjY5NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI2MVwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAuMDY4MzMsIDAsIDAuODg1NTVdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDgsIDAsIDAuODg1NTVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY1NTVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC44MTY2Nl0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC44MjY2Nl0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NzU1NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMC43NTY2Nl0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC43MjcyMl0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMC4wNzM0NywgMCwgMC44OTUyN10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjczXCI6IFswLCAwLjY4NjExLCAwLjE1NjgxLCAwLCAwLjQ3MTY2XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4NjExLCAwLjE0NSwgMCwgMC42MTA1NV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC44OTQ5OV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42OTc3N10sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMS4wNzI3N10sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44OTYxXSxcbiAgICBcIjc5XCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg1NDk5XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuNzg3MjFdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODU0OTldLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAuMDI1NTksIDAsIDAuODU5NDRdLFxuICAgIFwiODNcIjogWzAsIDAuNjg2MTEsIDAuMTEyNjQsIDAsIDAuNjQ5OTldLFxuICAgIFwiODRcIjogWzAsIDAuNjg2MTEsIDAuMTI5MDMsIDAsIDAuNzk2MV0sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xNzIwOCwgMCwgMC44ODA4M10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4xODYyNSwgMCwgMC44NjU1NV0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xODYyNSwgMCwgMS4xNTk5OV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4xNTY4MSwgMCwgMC44NjU1NV0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4xOTgwMywgMCwgMC44NjU1NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4xNDIwOCwgMCwgMC43MDg4OF0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xODc1LCAwLCAwLjM1NjExXSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjA5OTcyLCAwLCAwLjM1NjExXSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA2NzA5LCAwLCAwLjU5MTExXSxcbiAgICBcIjk1XCI6IFswLjMxLCAwLjEzNDQ0LCAwLjA5ODExLCAwLCAwLjU5MTExXSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjU5MTExXSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODYxLCAwLCAwLjUzMjIyXSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLjA1MjIyLCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4xMDg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4yMTc3OCwgMCwgMC40XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDI2LCAwLCAwLjU5MTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTMyNiwgMC4xMTM4NywgMCwgMC4zNTU1NV0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjkzMjYsIDAuMTY3MiwgMCwgMC4zNTU1NV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMTExMTEsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODYxLCAwLCAwLjI5NjY2XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC45NDQ0NF0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNjQ5OTldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA3ODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNzg2MSwgMCwgMC41OTExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjUzMjIyXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC41MDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDgxNjcsIDAsIDAuNDg2OTRdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLjA5NjM5LCAwLCAwLjM4NV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNjIwNTVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjUzMjIyXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4xMTExMSwgMCwgMC43Njc3N10sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAuMTI1ODMsIDAsIDAuNTYwNTVdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41NjE2Nl0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMTM4ODksIDAsIDAuNDkwNTVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk0ODg4XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC41MzIyMl0sXG4gICAgXCIxOThcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDEuMDIyNzddLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczNDcyLCAwLjA5MDYyLCAwLCAwLjg4NTU1XSxcbiAgICBcIjIyM1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wOTczNiwgMCwgMC42NjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NSwgMCwgMC44MjY2Nl0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTQxNjcsIDAuMDk0NTgsIDAsIDAuNTkxMTFdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjM1NTU1XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMS4xNDA1NF0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjgyNjY2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNDYxMSwgMCwgMC4zODVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLjA2NzA5LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMC4wODI3MSwgMCwgMC41OTExMV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTk0NDQsIDAuMTA0NDQsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA4NTI4LCAwLCAwLjU5MTExXSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTExMV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45NDg4OF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDcyLCAwLCAwLjU5MTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC42OTc3N10sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTQ0NDRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg4NTU1XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDY2Nl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAuMTUwOTIsIDAsIDAuNzY3NzddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAwLjgyNjY2XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMC4xMDc3OCwgMCwgMC44ODU1NV0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAuMDU2MzIsIDAsIDAuODI2NjZdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLjEwNzc4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjgyNjY2XSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDk4MTEsIDAsIDAuNTkxMTFdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wOTgxMSwgMCwgMS4xODIyMV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMC4xNjc3MiwgMCwgMC42MjA1NV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjA3OTM5LCAwLCAwLjYyMDU1XVxuICB9LFxuICBcIk1haW4tSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjA2OTYxLCAwLCAwLjUxNDQ0XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2NjE2LCAwLCAwLjgxNzc3XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLjEzNjM5LCAwLCAwLjgxNzc3XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLjA5Njk0LCAwLCAwLjc2NjY2XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLjE2MTk0LCAwLCAwLjQwODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLjAzNjk0LCAwLCAwLjQwODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLjE0OTE3LCAwLCAwLjUxMTExXSxcbiAgICBcIjQzXCI6IFswLjA1NjY3LCAwLjU2MTY3LCAwLjAzNjk0LCAwLCAwLjc2NjY2XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjEwNTU2LCAwLCAwLCAwLjMwNjY3XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQzMDU2LCAwLjAyODI2LCAwLCAwLjM1Nzc4XSxcbiAgICBcIjQ2XCI6IFswLCAwLjEwNTU2LCAwLCAwLCAwLjMwNjY3XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLjE2MTk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLjEzNTU2LCAwLCAwLjUxMTExXSxcbiAgICBcIjU4XCI6IFswLCAwLjQzMDU2LCAwLjA1ODIsIDAsIDAuMzA2NjddLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDU4MiwgMCwgMC4zMDY2N10sXG4gICAgXCI2MVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAuMDY2MTYsIDAsIDAuNzY2NjZdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTIyNSwgMCwgMC41MTExMV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wOTU5NywgMCwgMC43NjY2Nl0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NDMzM10sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC43MDM4OV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4xNDUyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wOTQwMywgMCwgMC43NTVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuNjc4MzNdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAuMTMzMDUsIDAsIDAuNjUyNzddLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAuMDg3MjIsIDAsIDAuNzczNjFdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAuMTU4MDYsIDAsIDAuMzg1NTVdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAuMTQwMjgsIDAsIDAuNTI1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjc2ODg4XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYyNzIyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjg5NjY2XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEwMjU3LCAwLCAwLjY3ODMzXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAzODY4LCAwLCAwLjcyOTQ0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjExOTcyLCAwLCAwLjU2MjIyXSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjcxNTU1XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjE4MzYxLCAwLCAwLjc0MzMzXSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjE4MzYxLCAwLCAwLjk5ODg4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjE1ODA2LCAwLCAwLjc0MzMzXSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjE5MzgzLCAwLCAwLjc0MzMzXSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjYxMzMzXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE4NzUsIDAsIDAuMzA2NjddLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAuMTA1MjgsIDAsIDAuMzA2NjddLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAuMDY2NDYsIDAsIDAuNTExMTFdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDkyMDgsIDAsIDAuNTExMTFdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTExMTFdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAuMDYzMTIsIDAsIDAuNDZdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAuMDU2NTMsIDAsIDAuNDZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMC4wNzUxNCwgMCwgMC40Nl0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMjExOTQsIDAsIDAuMzA2NjddLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ2XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wNzY3MSwgMCwgMC41MTExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU1MzYsIDAuMTAxOSwgMCwgMC4zMDY2N10sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjU1MzYsIDAuMTQ0NjcsIDAsIDAuMzA2NjddLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjEwNzY0LCAwLCAwLjQ2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC4yNTU1NV0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuODE3NzddLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjU2MjIyXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMC4wNjMxMiwgMCwgMC41MTExMV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDYzMTIsIDAsIDAuNTExMTFdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA4ODQ3LCAwLCAwLjQ2XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC40MjE2Nl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAuMDgyMDgsIDAsIDAuNDA4ODldLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLjA5NDg2LCAwLCAwLjMzMjIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41MzY2Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNDZdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjY2NDQ0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMC4xMjA0MiwgMCwgMC40NjM4OV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDg1NTVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjEyMjkyLCAwLCAwLjQwODg5XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMTc4NiwgMC4xMTU4NSwgMCwgMC41MTExMV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY2Nzg2LCAwLjEwNDc0LCAwLCAwLjUxMTExXSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzEyOV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDZdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjg4Mjc3XSxcbiAgICBcIjIxNlwiOiBbMC4wNDg2MSwgMC43MzE5NCwgMC4wOTQwMywgMCwgMC43NjY2Nl0sXG4gICAgXCIyMjNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA1MTQsIDAsIDAuNTM2NjZdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjcxNTU1XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41Mjc3OCwgMC4wOTE5NCwgMCwgMC41MTExMV0sXG4gICAgXCIzMzhcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuOTg0OTldLFxuICAgIFwiMzM5XCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjcxNTU1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjI4NDcsIDAuMDgyOTUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2MTY3LCAwLjEwMzMzLCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTY5NCwgMCwgMC41MTExMV0sXG4gICAgXCI3MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjEwODA2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMC4xMTc1MiwgMCwgMC4zMDY2N10sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMxMjldLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjczM1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42MjcyMl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODE3NzddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTIyMl0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAuMTUyOTQsIDAsIDAuNjY0NDRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLjE2Mzg5LCAwLCAwLjc0MzMzXSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC43MTU1NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAuMTExMTEsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLjA1OTg2LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNzE1NTVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAxLjAyMjIyXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2ODUsIDAsIDAuNTE0NDRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wNjk2MSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XVxuICB9LFxuICBcIk1haW4tUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xOTQ0NCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDU1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2MlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjUyNzhdLFxuICAgIFwiNzFcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzg0NzJdLFxuICAgIFwiNzJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuMzYxMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTEzODldLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkxNjY3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAwLjc1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjAxMzg5LCAwLCAxLjAyNzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjAyNSwgMCwgMC43NV0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI5MlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTIwNTYsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3Nzc4LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY2Nzg2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMzk0NDVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjcyMjIyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMjVcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzE3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2OTA5XSxcbiAgICBcIjE2N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCIxNzJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1XSxcbiAgICBcIjE3N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxODJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC45MDI3OF0sXG4gICAgXCIyMTVcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczMTk0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjIyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjIzMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCIyNDdcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjUyNzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMS4wMTM4OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42Mjg0NywgMCwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC41Njc3OCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42OTQ0NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAsIDEuMF0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4MjI0XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjgyMjVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIzMFwiOiBbMCwgMC4xMjMsIDAsIDAsIDEuMTcyXSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0MDdcIjogWzAsIDAuNzE0NDQsIDAuMTUzODIsIDAsIDAuNV0sXG4gICAgXCI4NDYzXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU0MDI4XSxcbiAgICBcIjg0NjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODQ2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMC4xMTExMSwgMC40MTY2N10sXG4gICAgXCI4NDcyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjExMTExLCAwLjYzNjQ2XSxcbiAgICBcIjg0NzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODUwMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NTkyXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTNcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg1OTdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjAxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYxNFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjBdLFxuICAgIFwiODYxN1wiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjEyNl0sXG4gICAgXCI4NjE4XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMTI2XSxcbiAgICBcIjg2MzZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzN1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQwXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1MlwiOiBbMC4wMTEsIDAuNjcxLCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg2NThcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1OVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NjYwXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODcwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA2XCI6IFswLCAwLjY5NDQ0LCAwLjA1NTU2LCAwLjA4MzM0LCAwLjUzMDldLFxuICAgIFwiODcwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NzA5XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcxMVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4NzEyXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzE1XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzIyXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MjNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjZcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjhcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyOVwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzMwXCI6IFswLjIsIDAuOCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzM2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3NDNcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NFwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ1XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTExMSwgMCwgMC40MTY2N10sXG4gICAgXCI4NzY0XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg3NzFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NzNcIjogWy0wLjAyMiwgMC41ODksIDAsIDAsIDAuNzc4XSxcbiAgICBcIjg3NzZcIjogWy0wLjAxNjg4LCAwLjQ4MzEyLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODRcIjogWy0wLjEzMywgMC42NzMsIDAsIDAsIDAuNzc4XSxcbiAgICBcIjg4MDFcIjogWy0wLjAzNjI1LCAwLjQ2Mzc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDRcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODEwXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4MTFcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAxLjBdLFxuICAgIFwiODgyNlwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyN1wiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzNFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzNVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM5XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg0OVwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODUwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTFcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODg1MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODUzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTRcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU2XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTdcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODcyXCI6IFswLjI0OSwgMC43NSwgMCwgMCwgMC44NjddLFxuICAgIFwiODkwMFwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4OTAxXCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAyXCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjg5MDRcIjogWzAuMDA1LCAwLjUwNSwgMCwgMCwgMC45XSxcbiAgICBcIjg5NDJcIjogWzAuMDMsIDAuOTAzLCAwLCAwLCAwLjI3OF0sXG4gICAgXCI4OTQzXCI6IFstMC4xOSwgMC4zMTMsIDAsIDAsIDEuMTcyXSxcbiAgICBcIjg5NDVcIjogWy0wLjEsIDAuODIzLCAwLCAwLCAxLjI4Ml0sXG4gICAgXCI4OTY4XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NjlcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk3MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5OTRcIjogWy0wLjE0MjM2LCAwLjM1NzY0LCAwLCAwLCAxLjBdLFxuICAgIFwiODk5NVwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI5MTM2XCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjkxMzdcIjogWzAuMjQ0LCAwLjc0NSwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjU3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk2NjFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTY2N1wiOiBbLTAuMDM0NzIsIDAuNDY1MjgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NzExXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiOTgyNFwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI1XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjZcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyN1wiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODM3XCI6IFswLCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjk4MzhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIxN1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCIxMDIyMlwiOiBbMC4yNDQsIDAuNzQ0LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyM1wiOiBbMC4yNDQsIDAuNzQ1LCAwLCAwLCAwLjQxMl0sXG4gICAgXCIxMDIyOVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzMFwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzMVwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjg1OV0sXG4gICAgXCIxMDIzMlwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYwOV0sXG4gICAgXCIxMDIzM1wiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDIzNFwiOiBbMC4wMjQsIDAuNTI1LCAwLCAwLCAxLjg1OF0sXG4gICAgXCIxMDIzNlwiOiBbMC4wMTEsIDAuNTExLCAwLCAwLCAxLjYzOF0sXG4gICAgXCIxMDgxNVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCIxMDkyN1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDkyOFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NzM3NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMF1cbiAgfSxcbiAgXCJNYXRoLUJvbGRJdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1M1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLjA0ODM1LCAwLCAwLjg2NjRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuODE2OTRdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuOTM4MTJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg2MTEsIDAuMDU0NTEsIDAsIDAuODEwMDddLFxuICAgIFwiNzBcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjg4ODldLFxuICAgIFwiNzFcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg2NzNdLFxuICAgIFwiNzJcIjogWzAsIDAuNjg2MTEsIDAuMDgyMjksIDAsIDAuOTgyMjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAuMDc3NzgsIDAsIDAuNTExMTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAuMTAwNjksIDAsIDAuNjMxMjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuOTcxMThdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzU1NTVdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDEuMTQyMDFdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDAuOTUwMzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAuMDMxOTQsIDAsIDAuODM2NjZdLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNzIzMDldLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjg2MTEsIDAsIDAsIDAuODY4NjFdLFxuICAgIFwiODJcIjogWzAsIDAuNjg2MTEsIDAuMDA0MjEsIDAsIDAuODcyMzVdLFxuICAgIFwiODNcIjogWzAsIDAuNjg2MTEsIDAuMDUzODIsIDAsIDAuNjkyNzFdLFxuICAgIFwiODRcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjM2NjNdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAuMTE0MjQsIDAsIDAuODAwMjddLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMjU1NTUsIDAsIDAuNjc3NzhdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDEuMDkzMDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAuMDc3NzgsIDAsIDAuOTQ3MjJdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMjU1NTUsIDAsIDAuNjc0NThdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAuMDY5NzksIDAsIDAuNzcyNTddLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjMyODddLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTIwODNdLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTEzNDJdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwOTcyXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NTM2MV0sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTEwNDIsIDAsIDAuNTY4MDZdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0NDldLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NzU5XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42OTMyNiwgMCwgMCwgMC40MDQ4XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTMyNiwgMC4wNjIyLCAwLCAwLjQ3MDgzXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMTg1MiwgMCwgMC42MDM3XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMDg4LCAwLCAwLjM0ODE1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMS4wMzI0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43MTI5Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTg0NzJdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwMDkyXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NDIxM10sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMDMxOTQsIDAsIDAuNTI4N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTMxMjVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQxNTI4XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42ODEwMl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTY2NjZdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAwLjgzMTQ4XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42NTkwM10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLjA0MjEzLCAwLCAwLjU1NTA5XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjU2OTRdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44NjcyMl0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODA1NTVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4NjExLCAwLjA3NDU4LCAwLCAwLjg0MTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjg2MTEsIDAuMDU0NTEsIDAsIDAuODg1MDddLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4NjExLCAwLjE1OTcyLCAwLCAwLjY3MDgzXSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjg2MTEsIDAuMTE2NTMsIDAsIDAuNzE0MDJdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4NjExLCAwLjA0ODM1LCAwLCAwLjg3ODldLFxuICAgIFwiOTQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc2MDY0XSxcbiAgICBcIjk0NlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzQwMywgMCwgMC42NTk3Ml0sXG4gICAgXCI5NDdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDYzODksIDAsIDAuNTkwMDNdLFxuICAgIFwiOTQ4XCI6IFswLCAwLjY5NDQ0LCAwLjAzODE5LCAwLCAwLjUyMjIyXSxcbiAgICBcIjk0OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41Mjg4Ml0sXG4gICAgXCI5NTBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDYyMTUsIDAsIDAuNTA4MzNdLFxuICAgIFwiOTUxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjZdLFxuICAgIFwiOTUyXCI6IFswLCAwLjY5NDQ0LCAwLjAzMTk0LCAwLCAwLjU2MThdLFxuICAgIFwiOTUzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQxMjA0XSxcbiAgICBcIjk1NFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Njc1OV0sXG4gICAgXCI5NTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjcwODNdLFxuICAgIFwiOTU2XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjcwNzg3XSxcbiAgICBcIjk1N1wiOiBbMCwgMC40NDQ0NCwgMC4wNjg5OCwgMCwgMC41NzY4NV0sXG4gICAgXCI5NThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDMwMjEsIDAsIDAuNTA4MzNdLFxuICAgIFwiOTU5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU4NDcyXSxcbiAgICBcIjk2MFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42ODI0MV0sXG4gICAgXCI5NjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjExOF0sXG4gICAgXCI5NjJcIjogWzAuMDk3MjIsIDAuNDQ0NDQsIDAuMDc5MTcsIDAsIDAuNDIzNjFdLFxuICAgIFwiOTYzXCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjY4NTg4XSxcbiAgICBcIjk2NFwiOiBbMCwgMC40NDQ0NCwgMC4xMzQ3MiwgMCwgMC41MjA4M10sXG4gICAgXCI5NjVcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjMwNTVdLFxuICAgIFwiOTY2XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjc0NzIyXSxcbiAgICBcIjk2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43MTgwNV0sXG4gICAgXCI5NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDM3MDQsIDAsIDAuNzU4MzNdLFxuICAgIFwiOTY5XCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjcxNzgyXSxcbiAgICBcIjk3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42OTE1NV0sXG4gICAgXCI5ODFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNzEyNV0sXG4gICAgXCI5ODJcIjogWzAsIDAuNDQ0NDQsIDAuMDMxOTQsIDAsIDAuOTc1XSxcbiAgICBcIjEwMDlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjExOF0sXG4gICAgXCIxMDEzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MzMzXSxcbiAgICBcIjU3NjQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM5MzUyXSxcbiAgICBcIjU3OTExXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjQzODg5XVxuICB9LFxuICBcIk1hdGgtSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjQ4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTM4ODksIDAuNzVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMDUwMTcsIDAuMDgzMzQsIDAuNzU4NTFdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNzE0NzJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDU1NTYsIDAuODI3OTJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMDU3NjQsIDAuMDgzMzQsIDAuNzM4Ml0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42NDMwNl0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC43ODYyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4wODEyNSwgMC4wNTU1NiwgMC44MzEyNV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4wNzg0NywgMC4xMTExMSwgMC40Mzk1OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMC4wOTYxOCwgMC4xNjY2NywgMC41NTQ1MV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wNTU1NiwgMC44NDkzMV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMC4wMjc3OCwgMC42ODA1Nl0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMC4xMDkwMywgMC4wODMzNCwgMC45NzAxNF0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODMzMywgMC4xMDkwMywgMC4wODMzNCwgMC44MDM0N10sXG4gICAgXCI3OVwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NjI3OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wODMzNCwgMC42NDIwMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC43OTA1Nl0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODMzMywgMC4wMDc3MywgMC4wODMzNCwgMC43NTkyOV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC42MTMyXSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjU4NDM4XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjAyNzc4LCAwLjY4Mjc4XSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjIyMjIyLCAwLCAwLjU4MzMzXSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjA4MzM0LCAwLjgyODQ3XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4MzMzLCAwLjIyMjIyLCAwLCAwLjU4MDU2XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA4MzM0LCAwLjY4MjY0XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyODU5XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQyOTE3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQzMjc2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMC4xNjY2NywgMC41MjA0OV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY1NjNdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjEwNzY0LCAwLjE2NjY3LCAwLjQ4OTU5XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wMjc3OCwgMC40NzY5N10sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc2MTZdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY1OTUyLCAwLCAwLCAwLjM0NDUxXSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NTk1MiwgMC4wNTcyNCwgMCwgMC40MTE4MV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDMxNDgsIDAsIDAuNTIwNl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMDE5NjgsIDAuMDgzMzQsIDAuMjk4MzhdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjg3ODAxXSxcbiAgICBcIjExMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42MDAyM10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDg0NzJdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUwMzEzXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wODMzNCwgMC40NDY0MV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAuMDU1NTYsIDAuNDUxMTZdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQ2ODc1XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MTUwOCwgMCwgMC4wODMzNCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNTcyNDZdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ4NDcyXSxcbiAgICBcIjExOVwiOiBbMCwgMC40MzA1NiwgMC4wMjY5MSwgMC4wODMzNCwgMC43MTU5Ml0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNTcxNTNdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA1NTU2LCAwLjQ5MDI4XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40MzA1NiwgMC4wNDM5OCwgMC4wNTU1NiwgMC40NjUwNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjYxNTI4XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMC4xNjY2NywgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNzYyNzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLjE2NjY3LCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMC4wNzU2OSwgMC4wODMzNCwgMC43NDIzNl0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAuMDgxMjUsIDAuMDU1NTYsIDAuODMxMjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjc3OTg2XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMC4xMzg4OSwgMC4wNTU1NiwgMC41ODMzM10sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAuMDgzMzQsIDAuNjY2NjddLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLjExLCAwLjA1NTU2LCAwLjYxMjIyXSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NzI0XSxcbiAgICBcIjk0NVwiOiBbMCwgMC40MzA1NiwgMC4wMDM3LCAwLjAyNzc4LCAwLjYzOTddLFxuICAgIFwiOTQ2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1Mjc4LCAwLjA4MzM0LCAwLjU2NTYzXSxcbiAgICBcIjk0N1wiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNTU1NiwgMCwgMC41MTc3M10sXG4gICAgXCI5NDhcIjogWzAsIDAuNjk0NDQsIDAuMDM3ODUsIDAuMDU1NTYsIDAuNDQ0NDRdLFxuICAgIFwiOTQ5XCI6IFswLCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjQ2NjMyXSxcbiAgICBcIjk1MFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNzM3OCwgMC4wODMzNCwgMC40Mzc1XSxcbiAgICBcIjk1MVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wNTU1NiwgMC40OTY1M10sXG4gICAgXCI5NTJcIjogWzAsIDAuNjk0NDQsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNDY5NDRdLFxuICAgIFwiOTUzXCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjM1Mzk0XSxcbiAgICBcIjk1NFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCI5NTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTU2XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjAyNzc4LCAwLjYwMjU1XSxcbiAgICBcIjk1N1wiOiBbMCwgMC40MzA1NiwgMC4wNjM2NiwgMC4wMjc3OCwgMC40OTM5OF0sXG4gICAgXCI5NThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDQ2MDEsIDAuMTExMTEsIDAuNDM3NV0sXG4gICAgXCI5NTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDg0NzJdLFxuICAgIFwiOTYwXCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjU3MDAzXSxcbiAgICBcIjk2MVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC41MTcwMl0sXG4gICAgXCI5NjJcIjogWzAuMDk3MjIsIDAuNDMwNTYsIDAuMDc5ODYsIDAuMDgzMzQsIDAuMzYyODVdLFxuICAgIFwiOTYzXCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLCAwLjU3MTQxXSxcbiAgICBcIjk2NFwiOiBbMCwgMC40MzA1NiwgMC4xMTMyLCAwLjAyNzc4LCAwLjQzNzE1XSxcbiAgICBcIjk2NVwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMC4wMjc3OCwgMC41NDAyOF0sXG4gICAgXCI5NjZcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNjU0MTddLFxuICAgIFwiOTY3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjYyNTY5XSxcbiAgICBcIjk2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzU4OCwgMC4xMTExMSwgMC42NTEzOV0sXG4gICAgXCI5NjlcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNjIyNDVdLFxuICAgIFwiOTc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLjA4MzM0LCAwLjU5MTQ0XSxcbiAgICBcIjk4MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMC4wODMzNCwgMC41OTU4M10sXG4gICAgXCI5ODJcIjogWzAsIDAuNDMwNTYsIDAuMDI3NzgsIDAsIDAuODI4MTNdLFxuICAgIFwiMTAwOVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC41MTcwMl0sXG4gICAgXCIxMDEzXCI6IFswLCAwLjQzMDU2LCAwLCAwLjA1NTU2LCAwLjQwNTldLFxuICAgIFwiNTc2NDlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuMzIyNDZdLFxuICAgIFwiNTc5MTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuMzg0MDNdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUJvbGRcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzY2NjddLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDEuMDI5MTJdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODMwNTZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDI3NzhdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDI3NzhdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDNcIjogWzAuMTE2NjcsIDAuNjE2NjcsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiNDRcIjogWzAuMTA1NTYsIDAuMTMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMzY2NjddLFxuICAgIFwiNDZcIjogWzAsIDAuMTMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNThcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNTlcIjogWzAuMTA1NTYsIDAuNDU4MzMsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNjFcIjogWy0wLjA5Mzc1LCAwLjQwNjI1LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxOTQ1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY0MTY3XSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMzMDU2XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxOTQ1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2Mzg5XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk3Nzc4XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjgxXCI6IFswLjEwNTU2LCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc4XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc2Mzg5XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjAxNTI4LCAwLCAwLjczMzM0XSxcbiAgICBcIjg3XCI6IFswLCAwLjY5NDQ0LCAwLjAxNTI4LCAwLCAxLjAzODg5XSxcbiAgICBcIjg4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjg5XCI6IFswLCAwLjY5NDQ0LCAwLjAyNzUsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjcyMjNdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzQzMDZdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzQzMDZdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMTA4MzMsIDAuMDMwNTYsIDAsIDAuNTVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjk5XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQ4ODg5XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA3NjM5LCAwLCAwLjMzNjExXSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4yODYxMV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTMwNTZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC44NjY2N10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTExXCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU1XSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjM3MjIyXSxcbiAgICBcIjExNVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40MjE2N10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTg5MjksIDAsIDAsIDAuNDA0MTddLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41XSxcbiAgICBcIjExOVwiOiBbMCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC43NDQ0NV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDc2MzldLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjE4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjI1NTU2XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC4yODYxMV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzNTQyLCAwLCAwLCAwLjU1XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42Mzc3OCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODA1Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiOTIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NTgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAxLjEwMDAxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1ODM0XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLUl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMC4wNTczMywgMCwgMC4zMTk0NV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA1MDg3LCAwLCAwLjgzMzM0XSxcbiAgICBcIjM2XCI6IFswLjA1NTU2LCAwLjc1LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMDMxMjYsIDAsIDAuODMzMzRdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDMwNTgsIDAsIDAuNzU4MzRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuMzg4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDI1MzYsIDAsIDAuMzg4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTE3NzUsIDAsIDAuNV0sXG4gICAgXCI0M1wiOiBbMC4wODMzMywgMC41ODMzMywgMC4wMjUzNiwgMCwgMC43Nzc3OF0sXG4gICAgXCI0NFwiOiBbMC4xMjUsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDVcIjogWzAsIDAuNDQ0NDQsIDAuMDE5NDYsIDAsIDAuMzMzMzNdLFxuICAgIFwiNDZcIjogWzAsIDAuMDgzMzMsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTMxNjQsIDAsIDAuNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjQ5XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTBcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUyXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTNcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU1XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTZcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjU5XCI6IFswLjEyNSwgMC40NDQ0NCwgMC4wMjUwMiwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MVwiOiBbLTAuMTMsIDAuMzcsIDAuMDUwODcsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAuMTE4MDksIDAsIDAuNDcyMjJdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNjY2NjddLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjM4ODldLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzIyMjNdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNTk3MjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTY5NDVdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjY2NjddLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNDcyMjJdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNjk0NDVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuODc1XSxcbiAgICBcIjc4XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjcwODM0XSxcbiAgICBcIjc5XCI6IFswLCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjYzODg5XSxcbiAgICBcIjgxXCI6IFswLjEyNSwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MzYxMV0sXG4gICAgXCI4MlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NDU4NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42ODA1Nl0sXG4gICAgXCI4NVwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC42ODc1XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5NDQ0LCAwLjE2MTUsIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4xNzI2MSwgMCwgMC42NjY2N10sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42MTExMV0sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMC4xNTk0MiwgMCwgMC4yODg4OV0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4wODcxOSwgMCwgMC4yODg4OV0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMC4wMDk4MSwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1NywgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMC4wODMzNiwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLjA2Nzc4LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4yMTcwNSwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLjA5NzE4LCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMC4wOTE2MiwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMDgzMzYsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAuMDE3NzgsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLjA2NjEzLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzODksIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAuMDc3OCwgMCwgMC4zODMzM10sXG4gICAgXCIxMTZcIjogWzAsIDAuNTcxNDMsIDAuMDcyMjUsIDAsIDAuMzYxMTFdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjUxNjY3XSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMTA4MzYsIDAsIDAuNjgzMzRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLjA5MTY5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC40NjExMV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDg3NTIsIDAsIDAuNDM0NzJdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMyNjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42NzkzNywgMC4wNjM4NSwgMCwgMC41XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjIzODg5XSxcbiAgICBcIjU2N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNDE2OSwgMCwgMC4yNjY2N10sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAuMDc5OSwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMC4wODQzMiwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42MDg4OSwgMC4wODc3NiwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMC4wOTIwNSwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQ4MywgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42NzkzNywgMC4wNzc3NCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzM3NTJdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY3NjU5LCAwLjA4ODI2LCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjU0MTY3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjgxNiwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLjExOTgzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMC4wOTAzMSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAuMDQ2MDMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wODYxNiwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMDc4MTYsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE0MjA1LCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMC4wMDMxNiwgMCwgMC41XVxuICB9LFxuICBcIlNhbnNTZXJpZi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ1XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NTgzNF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjEyNSwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTI1LCAwLjQ0NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMywgMC4zNywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyM10sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTcyMl0sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41Njk0NV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42OTQ0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NzVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODFcIjogWzAuMTI1LCAwLjY5NDQ0LCAwLCAwLCAwLjczNjExXSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY0NTg0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY4MDU2XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY4NzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMDEzODksIDAsIDAuNjY2NjddLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMDEzODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODlcIjogWzAsIDAuNjk0NDQsIDAuMDI1LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI4ODg5XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI4ODg5XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTVcIjogWzAuMzUsIDAuMDk0NDQsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40ODA1Nl0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42OTQ0NCwgMC4wNjk0NCwgMCwgMC4zMDU1Nl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTA1XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NzkzNywgMCwgMCwgMC4yNjY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjIzODg5XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTRcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuMzQxNjddLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjExNlwiOiBbMCwgMC41NzE0MywgMCwgMCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC42ODMzNF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40MzQ3Ml0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzI2NTksIDAsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxMVwiOiBbMCwgMC42MzE5NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxM1wiOiBbMCwgMC42MDg4OSwgMCwgMCwgMC41XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42NzkzNywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzMyXCI6IFswLCAwLjY3NjU5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzA4MzRdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40NDQ0NCwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XVxuICB9LFxuICBcIlNjcmlwdC1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjcsIDAuMjI5MjUsIDAsIDAuODAyNTNdLFxuICAgIFwiNjZcIjogWzAsIDAuNywgMC4wNDA4NywgMCwgMC45MDc1N10sXG4gICAgXCI2N1wiOiBbMCwgMC43LCAwLjE2ODksIDAsIDAuNjY2MTldLFxuICAgIFwiNjhcIjogWzAsIDAuNywgMC4wOTM3MSwgMCwgMC43NzQ0M10sXG4gICAgXCI2OVwiOiBbMCwgMC43LCAwLjE4NTgzLCAwLCAwLjU2MTYyXSxcbiAgICBcIjcwXCI6IFswLCAwLjcsIDAuMTM2MzQsIDAsIDAuODk1NDRdLFxuICAgIFwiNzFcIjogWzAsIDAuNywgMC4xNzMyMiwgMCwgMC42MDk2MV0sXG4gICAgXCI3MlwiOiBbMCwgMC43LCAwLjI5Njk0LCAwLCAwLjk2OTE5XSxcbiAgICBcIjczXCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODA5MDddLFxuICAgIFwiNzRcIjogWzAuMjc3NzgsIDAuNywgMC4xOTE4OSwgMCwgMS4wNTE1OV0sXG4gICAgXCI3NVwiOiBbMCwgMC43LCAwLjMxMjU5LCAwLCAwLjkxMzY0XSxcbiAgICBcIjc2XCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODczNzNdLFxuICAgIFwiNzdcIjogWzAsIDAuNywgMC4xNTk4MSwgMCwgMS4wODAzMV0sXG4gICAgXCI3OFwiOiBbMCwgMC43LCAwLjM1MjUsIDAsIDAuOTAxNV0sXG4gICAgXCI3OVwiOiBbMCwgMC43LCAwLjA4MDc4LCAwLCAwLjczNzg3XSxcbiAgICBcIjgwXCI6IFswLCAwLjcsIDAuMDgwNzgsIDAsIDEuMDEyNjJdLFxuICAgIFwiODFcIjogWzAsIDAuNywgMC4wMzMwNSwgMCwgMC44ODI4Ml0sXG4gICAgXCI4MlwiOiBbMCwgMC43LCAwLjA2MjU5LCAwLCAwLjg1XSxcbiAgICBcIjgzXCI6IFswLCAwLjcsIDAuMTkxODksIDAsIDAuODY3NjddLFxuICAgIFwiODRcIjogWzAsIDAuNywgMC4yOTA4NywgMCwgMC43NDY5N10sXG4gICAgXCI4NVwiOiBbMCwgMC43LCAwLjI1ODE1LCAwLCAwLjc5OTk2XSxcbiAgICBcIjg2XCI6IFswLCAwLjcsIDAuMjc1MjMsIDAsIDAuNjIyMDRdLFxuICAgIFwiODdcIjogWzAsIDAuNywgMC4yNzUyMywgMCwgMC44MDUzMl0sXG4gICAgXCI4OFwiOiBbMCwgMC43LCAwLjI2MDA2LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg5XCI6IFswLCAwLjcsIDAuMjkzOSwgMCwgMC43MDk2MV0sXG4gICAgXCI5MFwiOiBbMCwgMC43LCAwLjI0MDM3LCAwLCAwLjgyMTJdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XVxuICB9LFxuICBcIlNpemUxLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDU4MzRdLFxuICAgIFwiNDdcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiOTJcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTc3NzhdLFxuICAgIFwiOTNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiMTIzXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEyNVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjczMlwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzcxXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjgyMTRcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NTkzXCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1OTVcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODY1N1wiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjU5XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MTlcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuOTQ0NDVdLFxuICAgIFwiODcyMFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIxXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjg3MzBcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzM5XCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuMzMzMzNdLFxuICAgIFwiODc0MVwiOiBbLTAuMDA1OTksIDAuNjA2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDdcIjogWzAuMzA2MTIsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDhcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzQ5XCI6IFswLjMwNiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc1MFwiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODg5NlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk3XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OThcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4OTY4XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NjlcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk3MFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcxXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjkxNjhcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMDIxNlwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCIxMDIxN1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCIxMDc1MlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1M1wiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1NFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCIxMDc1NlwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIxMDc1OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF1cbiAgfSxcbiAgXCJTaXplMi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjQwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjQxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjQ3XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjgxMTExXSxcbiAgICBcIjkxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjkyXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjgxMTExXSxcbiAgICBcIjkzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEyM1wiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxMjVcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjcxMFwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjc3MFwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjc3MVwiOiBbMCwgMC43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MTlcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiODcyMFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI4NzIxXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NzQ3XCI6IFswLjg2MjI1LCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDhcIjogWzAuODYyLCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NDlcIjogWzAuODYyLCAxLjM2LCAwLjQ0NDQ1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3NTBcIjogWzAuODYyMjUsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODg5NlwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk3XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OThcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5OVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4OTY4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NjlcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk3MFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTcxXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEwMjE2XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwMjE3XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwNzUyXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzUzXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzU0XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjUxMTEyXSxcbiAgICBcIjEwNzU2XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU4XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXVxuICB9LFxuICBcIlNpemUzLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiNDFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiNDdcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMDQ0NDVdLFxuICAgIFwiOTFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiOTJcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMDQ0NDVdLFxuICAgIFwiOTNcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTIzXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEyNVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43NV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjczMlwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjg3MzBcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NjlcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk3MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcxXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjEwMjE2XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwMjE3XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XVxuICB9LFxuICBcIlNpemU0LVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNzkxNjddLFxuICAgIFwiNDdcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiOTJcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMjc3NzhdLFxuICAgIFwiOTNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTIzXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEyNVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjczMlwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzcxXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjg3MzBcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTY4XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NjlcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk3MFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcxXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjkxMTVcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE2XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE3XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjBcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTIxXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIyXCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyM1wiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNVwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjZcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjdcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEyOFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI5XCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzBcIjogWzAsIDAuMywgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMxXCI6IFsxZS0wNSwgMC45LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzM1wiOiBbMC45MDAwMSwgMCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTQzXCI6IFswLjg4NTAyLCAwLjkxNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCIxMDIxNlwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCIxMDIxN1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC44MDU1Nl0sXG4gICAgXCI1NzM0NFwiOiBbLTAuMDA0OTksIDAuNjA1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjU3MzQ1XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTc2ODBcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODFcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODJcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdLFxuICAgIFwiNTc2ODNcIjogWzAsIDAuMTIsIDAsIDAsIDAuNDVdXG4gIH0sXG4gIFwiVHlwZXdyaXRlci1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNlwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzdcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzOVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDBcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQxXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MlwiOiBbMCwgMC41MjA4MywgMCwgMCwgMC41MjVdLFxuICAgIFwiNDNcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NFwiOiBbMC4xMzg4OSwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ1XCI6IFstMC4wODA1NiwgMC41MzA1NSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDZcIjogWzAsIDAuMTI1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0N1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1OVwiOiBbMC4xMzg4OSwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjBcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MVwiOiBbLTAuMTk1NDksIDAuNDE1NjIsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYyXCI6IFstMC4wNTU1NiwgMC41NTU1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODFcIjogWzAuMTM4ODksIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkxXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MlwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTNcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NVwiOiBbMC4wOTUxNCwgMCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwM1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNlwiOiBbMC4yMjIyMiwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMlwiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU1MzU4LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMVwiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjNcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI1XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyN1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE4NFwiOiBbMC4xOTQ0NSwgMCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NjdcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxMVwiOiBbMCwgMC41NjU5NywgMCwgMCwgMC41MjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2NTU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjE2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MjQyXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjUxXCI6IFswLjExMTExLCAwLjIxOTQ0LCAwLCAwLCAwLjUyNV1cbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljcyByZWdhcmRpbmcgZm9udHMgYW5kIGluZGl2aWR1YWwgc3ltYm9scy4gVGhlIHNpZ21hXG4gKiBhbmQgeGkgdmFyaWFibGVzLCBhcyB3ZWxsIGFzIHRoZSBtZXRyaWNNYXAgbWFwIGNvbnRhaW4gZGF0YSBleHRyYWN0ZWQgZnJvbVxuICogVGVYLCBUZVggZm9udCBtZXRyaWNzLCBhbmQgdGhlIFRURiBmaWxlcy4gVGhlc2UgZGF0YSBhcmUgdGhlbiBleHBvc2VkIHZpYSB0aGVcbiAqIGBtZXRyaWNzYCB2YXJpYWJsZSBhbmQgdGhlIGdldENoYXJhY3Rlck1ldHJpY3MgZnVuY3Rpb24uXG4gKi9cbi8vIEluIFRlWCwgdGhlcmUgYXJlIGFjdHVhbGx5IHRocmVlIHNldHMgb2YgZGltZW5zaW9ucywgb25lIGZvciBlYWNoIG9mXG4vLyB0ZXh0c3R5bGUgKHNpemUgaW5kZXggNSBhbmQgaGlnaGVyOiA+PTlwdCksIHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDMgYW5kIDQ6XG4vLyA3LThwdCksIGFuZCBzY3JpcHRzY3JpcHRzdHlsZSAoc2l6ZSBpbmRleCAxIGFuZCAyOiA1LTZwdCkuICBUaGVzZSBhcmVcbi8vIHByb3ZpZGVkIGluIHRoZSBhcnJheXMgYmVsb3csIGluIHRoYXQgb3JkZXIuXG4vL1xuLy8gVGhlIGZvbnQgbWV0cmljcyBhcmUgc3RvcmVkIGluIGZvbnRzIGNtc3kxMCwgY21zeTcsIGFuZCBjbXN5NSByZXNwZWN0aXZlbHkuXG4vLyBUaGlzIHdhcyBkZXRlcm1pbmVkIGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBzY3JpcHQ6XG4vL1xuLy8gICAgIGxhdGV4IC1pbnRlcmFjdGlvbj1ub25zdG9wbW9kZSBcXFxuLy8gICAgICdcXGRvY3VtZW50Y2xhc3N7YXJ0aWNsZX1cXHVzZXBhY2thZ2V7YW1zbWF0aH1cXGJlZ2lue2RvY3VtZW50fScgXFxcbi8vICAgICAnJGEkIFxcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcdGV4dGZvbnQyJyBcXFxuLy8gICAgICdcXGV4cGFuZGFmdGVyXFxzaG93XFx0aGVcXHNjcmlwdGZvbnQyJyBcXFxuLy8gICAgICdcXGV4cGFuZGFmdGVyXFxzaG93XFx0aGVcXHNjcmlwdHNjcmlwdGZvbnQyJyBcXFxuLy8gICAgICdcXHN0b3AnXG4vL1xuLy8gVGhlIG1ldHJpY3MgdGhlbXNlbHZlcyB3ZXJlIHJldHJpZXZlZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOlxuLy9cbi8vICAgICB0ZnRvcGwgY21zeTEwXG4vLyAgICAgdGZ0b3BsIGNtc3k3XG4vLyAgICAgdGZ0b3BsIGNtc3k1XG4vL1xuLy8gVGhlIG91dHB1dCBvZiBlYWNoIG9mIHRoZXNlIGNvbW1hbmRzIGlzIHF1aXRlIGxlbmd0aHkuICBUaGUgb25seSBwYXJ0IHdlXG4vLyBjYXJlIGFib3V0IGlzIHRoZSBGT05URElNRU4gc2VjdGlvbi4gRWFjaCB2YWx1ZSBpcyBtZWFzdXJlZCBpbiBFTXMuXG52YXIgc2lnbWFzQW5kWGlzID0ge1xuICBzbGFudDogWzAuMjUwLCAwLjI1MCwgMC4yNTBdLFxuICAvLyBzaWdtYTFcbiAgc3BhY2U6IFswLjAwMCwgMC4wMDAsIDAuMDAwXSxcbiAgLy8gc2lnbWEyXG4gIHN0cmV0Y2g6IFswLjAwMCwgMC4wMDAsIDAuMDAwXSxcbiAgLy8gc2lnbWEzXG4gIHNocmluazogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTRcbiAgeEhlaWdodDogWzAuNDMxLCAwLjQzMSwgMC40MzFdLFxuICAvLyBzaWdtYTVcbiAgcXVhZDogWzEuMDAwLCAxLjE3MSwgMS40NzJdLFxuICAvLyBzaWdtYTZcbiAgZXh0cmFTcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTdcbiAgbnVtMTogWzAuNjc3LCAwLjczMiwgMC45MjVdLFxuICAvLyBzaWdtYThcbiAgbnVtMjogWzAuMzk0LCAwLjM4NCwgMC4zODddLFxuICAvLyBzaWdtYTlcbiAgbnVtMzogWzAuNDQ0LCAwLjQ3MSwgMC41MDRdLFxuICAvLyBzaWdtYTEwXG4gIGRlbm9tMTogWzAuNjg2LCAwLjc1MiwgMS4wMjVdLFxuICAvLyBzaWdtYTExXG4gIGRlbm9tMjogWzAuMzQ1LCAwLjM0NCwgMC41MzJdLFxuICAvLyBzaWdtYTEyXG4gIHN1cDE6IFswLjQxMywgMC41MDMsIDAuNTA0XSxcbiAgLy8gc2lnbWExM1xuICBzdXAyOiBbMC4zNjMsIDAuNDMxLCAwLjQwNF0sXG4gIC8vIHNpZ21hMTRcbiAgc3VwMzogWzAuMjg5LCAwLjI4NiwgMC4yOTRdLFxuICAvLyBzaWdtYTE1XG4gIHN1YjE6IFswLjE1MCwgMC4xNDMsIDAuMjAwXSxcbiAgLy8gc2lnbWExNlxuICBzdWIyOiBbMC4yNDcsIDAuMjg2LCAwLjQwMF0sXG4gIC8vIHNpZ21hMTdcbiAgc3VwRHJvcDogWzAuMzg2LCAwLjM1MywgMC40OTRdLFxuICAvLyBzaWdtYTE4XG4gIHN1YkRyb3A6IFswLjA1MCwgMC4wNzEsIDAuMTAwXSxcbiAgLy8gc2lnbWExOVxuICBkZWxpbTE6IFsyLjM5MCwgMS43MDAsIDEuOTgwXSxcbiAgLy8gc2lnbWEyMFxuICBkZWxpbTI6IFsxLjAxMCwgMS4xNTcsIDEuNDIwXSxcbiAgLy8gc2lnbWEyMVxuICBheGlzSGVpZ2h0OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMjJcbiAgLy8gVGhlc2UgZm9udCBtZXRyaWNzIGFyZSBleHRyYWN0ZWQgZnJvbSBUZVggYnkgdXNpbmcgdGZ0b3BsIG9uIGNtZXgxMC50Zm07XG4gIC8vIHRoZXkgY29ycmVzcG9uZCB0byB0aGUgZm9udCBwYXJhbWV0ZXJzIG9mIHRoZSBleHRlbnNpb24gZm9udHMgKGZhbWlseSAzKS5cbiAgLy8gU2VlIHRoZSBUZVhib29rLCBwYWdlIDQ0MS4gSW4gQU1TVGVYLCB0aGUgZXh0ZW5zaW9uIGZvbnRzIHNjYWxlOyB0b1xuICAvLyBtYXRjaCBjbWV4Nywgd2UnZCB1c2UgY21leDcudGZtIHZhbHVlcyBmb3Igc2NyaXB0IGFuZCBzY3JpcHRzY3JpcHRcbiAgLy8gdmFsdWVzLlxuICBkZWZhdWx0UnVsZVRoaWNrbmVzczogWzAuMDQsIDAuMDQ5LCAwLjA0OV0sXG4gIC8vIHhpODsgY21leDc6IDAuMDQ5XG4gIGJpZ09wU3BhY2luZzE6IFswLjExMSwgMC4xMTEsIDAuMTExXSxcbiAgLy8geGk5XG4gIGJpZ09wU3BhY2luZzI6IFswLjE2NiwgMC4xNjYsIDAuMTY2XSxcbiAgLy8geGkxMFxuICBiaWdPcFNwYWNpbmczOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIHhpMTFcbiAgYmlnT3BTcGFjaW5nNDogWzAuNiwgMC42MTEsIDAuNjExXSxcbiAgLy8geGkxMjsgY21leDc6IDAuNjExXG4gIGJpZ09wU3BhY2luZzU6IFswLjEsIDAuMTQzLCAwLjE0M10sXG4gIC8vIHhpMTM7IGNtZXg3OiAwLjE0M1xuICAvLyBUaGUgXFxzcXJ0IHJ1bGUgd2lkdGggaXMgdGFrZW4gZnJvbSB0aGUgaGVpZ2h0IG9mIHRoZSBzdXJkIGNoYXJhY3Rlci5cbiAgLy8gU2luY2Ugd2UgdXNlIHRoZSBzYW1lIGZvbnQgYXQgYWxsIHNpemVzLCB0aGlzIHRoaWNrbmVzcyBkb2Vzbid0IHNjYWxlLlxuICBzcXJ0UnVsZVRoaWNrbmVzczogWzAuMDQsIDAuMDQsIDAuMDRdLFxuICAvLyBUaGlzIHZhbHVlIGRldGVybWluZXMgaG93IGxhcmdlIGEgcHQgaXMsIGZvciBtZXRyaWNzIHdoaWNoIGFyZSBkZWZpbmVkXG4gIC8vIGluIHRlcm1zIG9mIHB0cy5cbiAgLy8gVGhpcyB2YWx1ZSBpcyBhbHNvIHVzZWQgaW4ga2F0ZXguc2NzczsgaWYgeW91IGNoYW5nZSBpdCBtYWtlIHN1cmUgdGhlXG4gIC8vIHZhbHVlcyBtYXRjaC5cbiAgcHRQZXJFbTogWzEwLjAsIDEwLjAsIDEwLjBdLFxuICAvLyBUaGUgc3BhY2UgYmV0d2VlbiBhZGphY2VudCBgfGAgY29sdW1ucyBpbiBhbiBhcnJheSBkZWZpbml0aW9uLiBGcm9tXG4gIC8vIGBcXHNob3d0aGVcXGRvdWJsZXJ1bGVzZXBgIGluIExhVGVYLiBFcXVhbHMgMi4wIC8gcHRQZXJFbS5cbiAgZG91YmxlUnVsZVNlcDogWzAuMiwgMC4yLCAwLjJdLFxuICAvLyBUaGUgd2lkdGggb2Ygc2VwYXJhdG9yIGxpbmVzIGluIHthcnJheX0gZW52aXJvbm1lbnRzLiBGcm9tXG4gIC8vIGBcXHNob3d0aGVcXGFycmF5cnVsZXdpZHRoYCBpbiBMYVRlWC4gRXF1YWxzIDAuNCAvIHB0UGVyRW0uXG4gIGFycmF5UnVsZVdpZHRoOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFR3byB2YWx1ZXMgZnJvbSBMYVRlWCBzb3VyY2UyZTpcbiAgZmJveHNlcDogWzAuMywgMC4zLCAwLjNdLFxuICAvLyAgICAgICAgMyBwdCAvIHB0UGVyRW1cbiAgZmJveHJ1bGU6IFswLjA0LCAwLjA0LCAwLjA0XSAvLyAwLjQgcHQgLyBwdFBlckVtXG5cbn07IC8vIFRoaXMgbWFwIGNvbnRhaW5zIGEgbWFwcGluZyBmcm9tIGZvbnQgbmFtZSBhbmQgY2hhcmFjdGVyIGNvZGUgdG8gY2hhcmFjdGVyXG4vLyBzaG91bGQgaGF2ZSBMYXRpbi0xIGFuZCBDeXJpbGxpYyBjaGFyYWN0ZXJzLCBidXQgbWF5IG5vdCBkZXBlbmRpbmcgb24gdGhlXG4vLyBvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIG1ldHJpY3MgZG8gbm90IGFjY291bnQgZm9yIGV4dHJhIGhlaWdodCBmcm9tIHRoZVxuLy8gYWNjZW50cy4gIEluIHRoZSBjYXNlIG9mIEN5cmlsbGljIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSBib3RoIGFzY2VuZGVycyBhbmRcbi8vIGRlc2NlbmRlcnMgd2UgcHJlZmVyIGFwcHJveGltYXRpb25zIHdpdGggYXNjZW5kZXJzLCBwcmltYXJpbHkgdG8gcHJldmVudFxuLy8gdGhlIGZyYWN0aW9uIGJhciBvciByb290IGxpbmUgZnJvbSBpbnRlcnNlY3RpbmcgdGhlIGdseXBoLlxuLy8gVE9ETyhrZXZpbmIpIGFsbG93IHVuaW9uIG9mIG11bHRpcGxlIGdseXBoIG1ldHJpY3MgZm9yIGJldHRlciBhY2N1cmFjeS5cblxudmFyIGV4dHJhQ2hhcmFjdGVyTWFwID0ge1xuICAvLyBMYXRpbi0xXG4gICfDhSc6ICdBJyxcbiAgJ8OQJzogJ0QnLFxuICAnw54nOiAnbycsXG4gICfDpSc6ICdhJyxcbiAgJ8OwJzogJ2QnLFxuICAnw74nOiAnbycsXG4gIC8vIEN5cmlsbGljXG4gICfQkCc6ICdBJyxcbiAgJ9CRJzogJ0InLFxuICAn0JInOiAnQicsXG4gICfQkyc6ICdGJyxcbiAgJ9CUJzogJ0EnLFxuICAn0JUnOiAnRScsXG4gICfQlic6ICdLJyxcbiAgJ9CXJzogJzMnLFxuICAn0JgnOiAnTicsXG4gICfQmSc6ICdOJyxcbiAgJ9CaJzogJ0snLFxuICAn0JsnOiAnTicsXG4gICfQnCc6ICdNJyxcbiAgJ9CdJzogJ0gnLFxuICAn0J4nOiAnTycsXG4gICfQnyc6ICdOJyxcbiAgJ9CgJzogJ1AnLFxuICAn0KEnOiAnQycsXG4gICfQoic6ICdUJyxcbiAgJ9CjJzogJ3knLFxuICAn0KQnOiAnTycsXG4gICfQpSc6ICdYJyxcbiAgJ9CmJzogJ1UnLFxuICAn0KcnOiAnaCcsXG4gICfQqCc6ICdXJyxcbiAgJ9CpJzogJ1cnLFxuICAn0KonOiAnQicsXG4gICfQqyc6ICdYJyxcbiAgJ9CsJzogJ0InLFxuICAn0K0nOiAnMycsXG4gICfQric6ICdYJyxcbiAgJ9CvJzogJ1InLFxuICAn0LAnOiAnYScsXG4gICfQsSc6ICdiJyxcbiAgJ9CyJzogJ2EnLFxuICAn0LMnOiAncicsXG4gICfQtCc6ICd5JyxcbiAgJ9C1JzogJ2UnLFxuICAn0LYnOiAnbScsXG4gICfQtyc6ICdlJyxcbiAgJ9C4JzogJ24nLFxuICAn0LknOiAnbicsXG4gICfQuic6ICduJyxcbiAgJ9C7JzogJ24nLFxuICAn0LwnOiAnbScsXG4gICfQvSc6ICduJyxcbiAgJ9C+JzogJ28nLFxuICAn0L8nOiAnbicsXG4gICfRgCc6ICdwJyxcbiAgJ9GBJzogJ2MnLFxuICAn0YInOiAnbycsXG4gICfRgyc6ICd5JyxcbiAgJ9GEJzogJ2InLFxuICAn0YUnOiAneCcsXG4gICfRhic6ICduJyxcbiAgJ9GHJzogJ24nLFxuICAn0YgnOiAndycsXG4gICfRiSc6ICd3JyxcbiAgJ9GKJzogJ2EnLFxuICAn0YsnOiAnbScsXG4gICfRjCc6ICdhJyxcbiAgJ9GNJzogJ2UnLFxuICAn0Y4nOiAnbScsXG4gICfRjyc6ICdyJ1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFkZHMgbmV3IGZvbnQgbWV0cmljcyB0byBkZWZhdWx0IG1ldHJpY01hcFxuICogSXQgY2FuIGFsc28gb3ZlcnJpZGUgZXhpc3RpbmcgbWV0cmljc1xuICovXG5mdW5jdGlvbiBzZXRGb250TWV0cmljcyhmb250TmFtZSwgbWV0cmljcykge1xuICBmb250TWV0cmljc0RhdGFbZm9udE5hbWVdID0gbWV0cmljcztcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBsb29raW5nIHVwIGluZm9ybWF0aW9uIGluIHRoZVxuICogbWV0cmljTWFwIHRhYmxlLiBJdCB0YWtlcyBhIGNoYXJhY3RlciBhcyBhIHN0cmluZywgYW5kIGEgZm9udC5cbiAqXG4gKiBOb3RlOiB0aGUgYHdpZHRoYCBwcm9wZXJ0eSBtYXkgYmUgdW5kZWZpbmVkIGlmIGZvbnRNZXRyaWNzRGF0YS5qcyB3YXNuJ3RcbiAqIGJ1aWx0IHVzaW5nIGBNYWtlIGV4dGVuZGVkX21ldHJpY3NgLlxuICovXG5cbmZ1bmN0aW9uIGdldENoYXJhY3Rlck1ldHJpY3MoY2hhcmFjdGVyLCBmb250LCBtb2RlKSB7XG4gIGlmICghZm9udE1ldHJpY3NEYXRhW2ZvbnRdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRm9udCBtZXRyaWNzIG5vdCBmb3VuZCBmb3IgZm9udDogXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgdmFyIGNoID0gY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCk7XG4gIHZhciBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcblxuICBpZiAoIW1ldHJpY3MgJiYgY2hhcmFjdGVyWzBdIGluIGV4dHJhQ2hhcmFjdGVyTWFwKSB7XG4gICAgY2ggPSBleHRyYUNoYXJhY3Rlck1hcFtjaGFyYWN0ZXJbMF1dLmNoYXJDb2RlQXQoMCk7XG4gICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVtjaF07XG4gIH1cblxuICBpZiAoIW1ldHJpY3MgJiYgbW9kZSA9PT0gJ3RleHQnKSB7XG4gICAgLy8gV2UgZG9uJ3QgdHlwaWNhbGx5IGhhdmUgZm9udCBtZXRyaWNzIGZvciBBc2lhbiBzY3JpcHRzLlxuICAgIC8vIEJ1dCBzaW5jZSB3ZSBzdXBwb3J0IHRoZW0gaW4gdGV4dCBtb2RlLCB3ZSBuZWVkIHRvIHJldHVyblxuICAgIC8vIHNvbWUgc29ydCBvZiBtZXRyaWNzLlxuICAgIC8vIFNvIGlmIHRoZSBjaGFyYWN0ZXIgaXMgaW4gYSBzY3JpcHQgd2Ugc3VwcG9ydCBidXQgd2VcbiAgICAvLyBkb24ndCBoYXZlIG1ldHJpY3MgZm9yIGl0LCBqdXN0IHVzZSB0aGUgbWV0cmljcyBmb3JcbiAgICAvLyB0aGUgTGF0aW4gY2FwaXRhbCBsZXR0ZXIgTS4gVGhpcyBpcyBjbG9zZSBlbm91Z2ggYmVjYXVzZVxuICAgIC8vIHdlIChjdXJyZW50bHkpIG9ubHkgY2FyZSBhYm91dCB0aGUgaGVpZ2h0IG9mIHRoZSBnbHlwaFxuICAgIC8vIG5vdCBpdHMgd2lkdGguXG4gICAgaWYgKHN1cHBvcnRlZENvZGVwb2ludChjaCkpIHtcbiAgICAgIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bNzddOyAvLyA3NyBpcyB0aGUgY2hhcmNvZGUgZm9yICdNJ1xuICAgIH1cbiAgfVxuXG4gIGlmIChtZXRyaWNzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcHRoOiBtZXRyaWNzWzBdLFxuICAgICAgaGVpZ2h0OiBtZXRyaWNzWzFdLFxuICAgICAgaXRhbGljOiBtZXRyaWNzWzJdLFxuICAgICAgc2tldzogbWV0cmljc1szXSxcbiAgICAgIHdpZHRoOiBtZXRyaWNzWzRdXG4gICAgfTtcbiAgfVxufVxudmFyIGZvbnRNZXRyaWNzQnlTaXplSW5kZXggPSB7fTtcbi8qKlxuICogR2V0IHRoZSBmb250IG1ldHJpY3MgZm9yIGEgZ2l2ZW4gc2l6ZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRHbG9iYWxNZXRyaWNzKHNpemUpIHtcbiAgdmFyIHNpemVJbmRleDtcblxuICBpZiAoc2l6ZSA+PSA1KSB7XG4gICAgc2l6ZUluZGV4ID0gMDtcbiAgfSBlbHNlIGlmIChzaXplID49IDMpIHtcbiAgICBzaXplSW5kZXggPSAxO1xuICB9IGVsc2Uge1xuICAgIHNpemVJbmRleCA9IDI7XG4gIH1cblxuICBpZiAoIWZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XSkge1xuICAgIHZhciBtZXRyaWNzID0gZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdID0ge1xuICAgICAgY3NzRW1QZXJNdTogc2lnbWFzQW5kWGlzLnF1YWRbc2l6ZUluZGV4XSAvIDE4XG4gICAgfTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzaWdtYXNBbmRYaXMpIHtcbiAgICAgIGlmIChzaWdtYXNBbmRYaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBtZXRyaWNzW2tleV0gPSBzaWdtYXNBbmRYaXNba2V5XVtzaXplSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF07XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcHRpb25zIHRoYXQgdGhlIFBhcnNlciBjYXJyaWVzXG4gKiBhcm91bmQgd2l0aCBpdCB3aGlsZSBwYXJzaW5nLiBEYXRhIGlzIGhlbGQgaW4gYW4gYE9wdGlvbnNgIG9iamVjdCwgYW5kIHdoZW5cbiAqIHJlY3Vyc2luZywgYSBuZXcgYE9wdGlvbnNgIG9iamVjdCBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgLndpdGgqYCBhbmRcbiAqIGAucmVzZXRgIGZ1bmN0aW9ucy5cbiAqL1xudmFyIHNpemVTdHlsZU1hcCA9IFsvLyBFYWNoIGVsZW1lbnQgY29udGFpbnMgW3RleHRzaXplLCBzY3JpcHRzaXplLCBzY3JpcHRzY3JpcHRzaXplXS5cbi8vIFRoZSBzaXplIG1hcHBpbmdzIGFyZSB0YWtlbiBmcm9tIFRlWCB3aXRoIFxcbm9ybWFsc2l6ZT0xMHB0LlxuWzEsIDEsIDFdLCAvLyBzaXplMTogWzUsIDUsIDVdICAgICAgICAgICAgICBcXHRpbnlcblsyLCAxLCAxXSwgLy8gc2l6ZTI6IFs2LCA1LCA1XVxuWzMsIDEsIDFdLCAvLyBzaXplMzogWzcsIDUsIDVdICAgICAgICAgICAgICBcXHNjcmlwdHNpemVcbls0LCAyLCAxXSwgLy8gc2l6ZTQ6IFs4LCA2LCA1XSAgICAgICAgICAgICAgXFxmb290bm90ZXNpemVcbls1LCAyLCAxXSwgLy8gc2l6ZTU6IFs5LCA2LCA1XSAgICAgICAgICAgICAgXFxzbWFsbFxuWzYsIDMsIDFdLCAvLyBzaXplNjogWzEwLCA3LCA1XSAgICAgICAgICAgICBcXG5vcm1hbHNpemVcbls3LCA0LCAyXSwgLy8gc2l6ZTc6IFsxMiwgOCwgNl0gICAgICAgICAgICAgXFxsYXJnZVxuWzgsIDYsIDNdLCAvLyBzaXplODogWzE0LjQsIDEwLCA3XSAgICAgICAgICBcXExhcmdlXG5bOSwgNywgNl0sIC8vIHNpemU5OiBbMTcuMjgsIDEyLCAxMF0gICAgICAgIFxcTEFSR0VcblsxMCwgOCwgN10sIC8vIHNpemUxMDogWzIwLjc0LCAxNC40LCAxMl0gICAgIFxcaHVnZVxuWzExLCAxMCwgOV0gLy8gc2l6ZTExOiBbMjQuODgsIDIwLjc0LCAxNy4yOF0gXFxIVUdFXG5dO1xudmFyIHNpemVNdWx0aXBsaWVycyA9IFsvLyBmb250TWV0cmljcy5qczpnZXRHbG9iYWxNZXRyaWNzIGFsc28gdXNlcyBzaXplIGluZGV4ZXMsIHNvIGlmXG4vLyB5b3UgY2hhbmdlIHNpemUgaW5kZXhlcywgY2hhbmdlIHRoYXQgZnVuY3Rpb24uXG4wLjUsIDAuNiwgMC43LCAwLjgsIDAuOSwgMS4wLCAxLjIsIDEuNDQsIDEuNzI4LCAyLjA3NCwgMi40ODhdO1xuXG52YXIgc2l6ZUF0U3R5bGUgPSBmdW5jdGlvbiBzaXplQXRTdHlsZShzaXplLCBzdHlsZSkge1xuICByZXR1cm4gc3R5bGUuc2l6ZSA8IDIgPyBzaXplIDogc2l6ZVN0eWxlTWFwW3NpemUgLSAxXVtzdHlsZS5zaXplIC0gMV07XG59OyAvLyBJbiB0aGVzZSB0eXBlcywgXCJcIiAoZW1wdHkgc3RyaW5nKSBtZWFucyBcIm5vIGNoYW5nZVwiLlxuXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbWFpbiBvcHRpb25zIGNsYXNzLiBJdCBjb250YWlucyB0aGUgY3VycmVudCBzdHlsZSwgc2l6ZSwgY29sb3IsXG4gKiBhbmQgZm9udC5cbiAqXG4gKiBPcHRpb25zIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gVG8gY3JlYXRlIGEgbmV3IE9wdGlvbnMgd2l0aFxuICogZGlmZmVyZW50IHByb3BlcnRpZXMsIGNhbGwgYSBgLmhhdmluZypgIG1ldGhvZC5cbiAqL1xuY2xhc3MgT3B0aW9ucyB7XG4gIC8vIEEgZm9udCBmYW1pbHkgYXBwbGllcyB0byBhIGdyb3VwIG9mIGZvbnRzIChpLmUuIFNhbnNTZXJpZiksIHdoaWxlIGEgZm9udFxuICAvLyByZXByZXNlbnRzIGEgc3BlY2lmaWMgZm9udCAoaS5lLiBTYW5zU2VyaWYgQm9sZCkuXG4gIC8vIFNlZTogaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMzUwL2RpZmZlcmVuY2UtYmV0d2Vlbi10ZXh0cm0tYW5kLW1hdGhybVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBzaXplIGluZGV4LlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5jb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBoYW50b20gPSB2b2lkIDA7XG4gICAgdGhpcy5mb250ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRXZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250U2hhcGUgPSB2b2lkIDA7XG4gICAgdGhpcy5zaXplTXVsdGlwbGllciA9IHZvaWQgMDtcbiAgICB0aGlzLm1heFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5taW5SdWxlVGhpY2tuZXNzID0gdm9pZCAwO1xuICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSBkYXRhLnN0eWxlO1xuICAgIHRoaXMuY29sb3IgPSBkYXRhLmNvbG9yO1xuICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZSB8fCBPcHRpb25zLkJBU0VTSVpFO1xuICAgIHRoaXMudGV4dFNpemUgPSBkYXRhLnRleHRTaXplIHx8IHRoaXMuc2l6ZTtcbiAgICB0aGlzLnBoYW50b20gPSAhIWRhdGEucGhhbnRvbTtcbiAgICB0aGlzLmZvbnQgPSBkYXRhLmZvbnQgfHwgXCJcIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBkYXRhLmZvbnRGYW1pbHkgfHwgXCJcIjtcbiAgICB0aGlzLmZvbnRXZWlnaHQgPSBkYXRhLmZvbnRXZWlnaHQgfHwgJyc7XG4gICAgdGhpcy5mb250U2hhcGUgPSBkYXRhLmZvbnRTaGFwZSB8fCAnJztcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gc2l6ZU11bHRpcGxpZXJzW3RoaXMuc2l6ZSAtIDFdO1xuICAgIHRoaXMubWF4U2l6ZSA9IGRhdGEubWF4U2l6ZTtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSBkYXRhLm1pblJ1bGVUaGlja25lc3M7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIFwidGhpc1wiLiAgUHJvcGVydGllc1xuICAgKiBmcm9tIFwiZXh0ZW5zaW9uXCIgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG5ldyBvcHRpb25zIG9iamVjdC5cbiAgICovXG5cblxuICBleHRlbmQoZXh0ZW5zaW9uKSB7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBzdHlsZTogdGhpcy5zdHlsZSxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHRleHRTaXplOiB0aGlzLnRleHRTaXplLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBwaGFudG9tOiB0aGlzLnBoYW50b20sXG4gICAgICBmb250OiB0aGlzLmZvbnQsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiB0aGlzLmZvbnRXZWlnaHQsXG4gICAgICBmb250U2hhcGU6IHRoaXMuZm9udFNoYXBlLFxuICAgICAgbWF4U2l6ZTogdGhpcy5tYXhTaXplLFxuICAgICAgbWluUnVsZVRoaWNrbmVzczogdGhpcy5taW5SdWxlVGhpY2tuZXNzXG4gICAgfTtcblxuICAgIGZvciAodmFyIGtleSBpbiBleHRlbnNpb24pIHtcbiAgICAgIGlmIChleHRlbnNpb24uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBkYXRhW2tleV0gPSBleHRlbnNpb25ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wdGlvbnMoZGF0YSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzdHlsZS4gSWYgYHRoaXMuc3R5bGUgPT09IHN0eWxlYCxcbiAgICogcmV0dXJucyBgdGhpc2AuXG4gICAqL1xuXG5cbiAgaGF2aW5nU3R5bGUoc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZSA9PT0gc3R5bGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHNpemU6IHNpemVBdFN0eWxlKHRoaXMudGV4dFNpemUsIHN0eWxlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9ucyBvYmplY3Qgd2l0aCBhIGNyYW1wZWQgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBzdHlsZS4gSWZcbiAgICogdGhlIGN1cnJlbnQgc3R5bGUgaXMgY3JhbXBlZCwgcmV0dXJucyBgdGhpc2AuXG4gICAqL1xuXG5cbiAgaGF2aW5nQ3JhbXBlZFN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLmhhdmluZ1N0eWxlKHRoaXMuc3R5bGUuY3JhbXAoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBzaXplIGFuZCBpbiBhdCBsZWFzdCBgXFx0ZXh0c3R5bGVgLlxuICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBhcHByb3ByaWF0ZS5cbiAgICovXG5cblxuICBoYXZpbmdTaXplKHNpemUpIHtcbiAgICBpZiAodGhpcy5zaXplID09PSBzaXplICYmIHRoaXMudGV4dFNpemUgPT09IHNpemUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgICBzdHlsZTogdGhpcy5zdHlsZS50ZXh0KCksXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgIHRleHRTaXplOiBzaXplLFxuICAgICAgICBzaXplTXVsdGlwbGllcjogc2l6ZU11bHRpcGxpZXJzW3NpemUgLSAxXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBMaWtlIGB0aGlzLmhhdmluZ1NpemUoQkFTRVNJWkUpLmhhdmluZ1N0eWxlKHN0eWxlKWAuIElmIGBzdHlsZWAgaXMgb21pdHRlZCxcbiAgICogY2hhbmdlcyB0byBhdCBsZWFzdCBgXFx0ZXh0c3R5bGVgLlxuICAgKi9cblxuXG4gIGhhdmluZ0Jhc2VTdHlsZShzdHlsZSkge1xuICAgIHN0eWxlID0gc3R5bGUgfHwgdGhpcy5zdHlsZS50ZXh0KCk7XG4gICAgdmFyIHdhbnRTaXplID0gc2l6ZUF0U3R5bGUoT3B0aW9ucy5CQVNFU0laRSwgc3R5bGUpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gd2FudFNpemUgJiYgdGhpcy50ZXh0U2l6ZSA9PT0gT3B0aW9ucy5CQVNFU0laRSAmJiB0aGlzLnN0eWxlID09PSBzdHlsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2l6ZTogd2FudFNpemVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBlZmZlY3Qgb2Ygc2l6aW5nIGNoYW5nZXMgc3VjaCBhcyBcXEh1Z2UuXG4gICAqIEtlZXAgdGhlIGVmZmVjdCBvZiB0aGUgY3VycmVudCBzdHlsZSwgc3VjaCBhcyBcXHNjcmlwdHN0eWxlLlxuICAgKi9cblxuXG4gIGhhdmluZ0Jhc2VTaXppbmcoKSB7XG4gICAgdmFyIHNpemU7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3R5bGUuaWQpIHtcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgc2l6ZSA9IDM7IC8vIG5vcm1hbHNpemUgaW4gc2NyaXB0c3R5bGVcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA2OlxuICAgICAgY2FzZSA3OlxuICAgICAgICBzaXplID0gMTsgLy8gbm9ybWFsc2l6ZSBpbiBzY3JpcHRzY3JpcHRzdHlsZVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzaXplID0gNjtcbiAgICAgIC8vIG5vcm1hbHNpemUgaW4gdGV4dHN0eWxlIG9yIGRpc3BsYXlzdHlsZVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBzdHlsZTogdGhpcy5zdHlsZS50ZXh0KCksXG4gICAgICBzaXplOiBzaXplXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb2xvci5cbiAgICovXG5cblxuICB3aXRoQ29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgY29sb3I6IGNvbG9yXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIFwicGhhbnRvbVwiIHNldCB0byB0cnVlLlxuICAgKi9cblxuXG4gIHdpdGhQaGFudG9tKCkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBwaGFudG9tOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbWF0aCBmb250IG9yIG9sZCB0ZXh0IGZvbnQuXG4gICAqIEB0eXBlIHtbdHlwZV19XG4gICAqL1xuXG5cbiAgd2l0aEZvbnQoZm9udCkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvcHRpb25zIG9iamVjdHMgd2l0aCB0aGUgZ2l2ZW4gZm9udEZhbWlseS5cbiAgICovXG5cblxuICB3aXRoVGV4dEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250RmFtaWx5LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuXG5cbiAgd2l0aFRleHRGb250V2VpZ2h0KGZvbnRXZWlnaHQpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmQoe1xuICAgICAgZm9udFdlaWdodCxcbiAgICAgIGZvbnQ6IFwiXCJcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBmb250IHdlaWdodFxuICAgKi9cblxuXG4gIHdpdGhUZXh0Rm9udFNoYXBlKGZvbnRTaGFwZSkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250U2hhcGUsXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgQ1NTIHNpemluZyBjbGFzc2VzIHJlcXVpcmVkIHRvIHN3aXRjaCBmcm9tIGVuY2xvc2luZyBvcHRpb25zXG4gICAqIGBvbGRPcHRpb25zYCB0byBgdGhpc2AuIFJldHVybnMgYW4gYXJyYXkgb2YgY2xhc3Nlcy5cbiAgICovXG5cblxuICBzaXppbmdDbGFzc2VzKG9sZE9wdGlvbnMpIHtcbiAgICBpZiAob2xkT3B0aW9ucy5zaXplICE9PSB0aGlzLnNpemUpIHtcbiAgICAgIHJldHVybiBbXCJzaXppbmdcIiwgXCJyZXNldC1zaXplXCIgKyBvbGRPcHRpb25zLnNpemUsIFwic2l6ZVwiICsgdGhpcy5zaXplXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBDU1Mgc2l6aW5nIGNsYXNzZXMgcmVxdWlyZWQgdG8gc3dpdGNoIHRvIHRoZSBiYXNlIHNpemUuIExpa2VcbiAgICogYHRoaXMuaGF2aW5nU2l6ZShCQVNFU0laRSkuc2l6aW5nQ2xhc3Nlcyh0aGlzKWAuXG4gICAqL1xuXG5cbiAgYmFzZVNpemluZ0NsYXNzZXMoKSB7XG4gICAgaWYgKHRoaXMuc2l6ZSAhPT0gT3B0aW9ucy5CQVNFU0laRSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIHRoaXMuc2l6ZSwgXCJzaXplXCIgKyBPcHRpb25zLkJBU0VTSVpFXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBmb250IG1ldHJpY3MgZm9yIHRoaXMgc2l6ZS5cbiAgICovXG5cblxuICBmb250TWV0cmljcygpIHtcbiAgICBpZiAoIXRoaXMuX2ZvbnRNZXRyaWNzKSB7XG4gICAgICB0aGlzLl9mb250TWV0cmljcyA9IGdldEdsb2JhbE1ldHJpY3ModGhpcy5zaXplKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZm9udE1ldHJpY3M7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIENTUyBjb2xvciBvZiB0aGUgY3VycmVudCBvcHRpb25zIG9iamVjdFxuICAgKi9cblxuXG4gIGdldENvbG9yKCkge1xuICAgIGlmICh0aGlzLnBoYW50b20pIHtcbiAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICAgIH1cbiAgfVxuXG59XG5cbk9wdGlvbnMuQkFTRVNJWkUgPSA2O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBkb2VzIGNvbnZlcnNpb24gYmV0d2VlbiB1bml0cy4gIEluIHBhcnRpY3VsYXIsIGl0IHByb3ZpZGVzXG4gKiBjYWxjdWxhdGVTaXplIHRvIGNvbnZlcnQgb3RoZXIgdW5pdHMgaW50byBlbXMuXG4gKi9cbi8vIFRodXMsIG11bHRpcGx5aW5nIGEgbGVuZ3RoIGJ5IHRoaXMgbnVtYmVyIGNvbnZlcnRzIHRoZSBsZW5ndGggZnJvbSB1bml0c1xuLy8gaW50byBwdHMuICBEaXZpZGluZyB0aGUgcmVzdWx0IGJ5IHB0UGVyRW0gZ2l2ZXMgdGhlIG51bWJlciBvZiBlbXNcbi8vICphc3N1bWluZyogYSBmb250IHNpemUgb2YgcHRQZXJFbSAobm9ybWFsIHNpemUsIG5vcm1hbCBzdHlsZSkuXG5cbnZhciBwdFBlclVuaXQgPSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0xhVGVYL0xlbmd0aHMgYW5kXG4gIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL2EvODI2M1xuICBcInB0XCI6IDEsXG4gIC8vIFRlWCBwb2ludFxuICBcIm1tXCI6IDcyMjcgLyAyNTQwLFxuICAvLyBtaWxsaW1ldGVyXG4gIFwiY21cIjogNzIyNyAvIDI1NCxcbiAgLy8gY2VudGltZXRlclxuICBcImluXCI6IDcyLjI3LFxuICAvLyBpbmNoXG4gIFwiYnBcIjogODAzIC8gODAwLFxuICAvLyBiaWcgKFBvc3RTY3JpcHQpIHBvaW50c1xuICBcInBjXCI6IDEyLFxuICAvLyBwaWNhXG4gIFwiZGRcIjogMTIzOCAvIDExNTcsXG4gIC8vIGRpZG90XG4gIFwiY2NcIjogMTQ4NTYgLyAxMTU3LFxuICAvLyBjaWNlcm8gKDEyIGRpZG90KVxuICBcIm5kXCI6IDY4NSAvIDY0MixcbiAgLy8gbmV3IGRpZG90XG4gIFwibmNcIjogMTM3MCAvIDEwNyxcbiAgLy8gbmV3IGNpY2VybyAoMTIgbmV3IGRpZG90KVxuICBcInNwXCI6IDEgLyA2NTUzNixcbiAgLy8gc2NhbGVkIHBvaW50IChUZVgncyBpbnRlcm5hbCBzbWFsbGVzdCB1bml0KVxuICAvLyBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzQxMzcxXG4gIFwicHhcIjogODAzIC8gODAwIC8vIFxccGRmcHhkaW1lbiBkZWZhdWx0cyB0byAxIGJwIGluIHBkZlRlWCBhbmQgTHVhVGVYXG5cbn07IC8vIERpY3Rpb25hcnkgb2YgcmVsYXRpdmUgdW5pdHMsIGZvciBmYXN0IHZhbGlkaXR5IHRlc3RpbmcuXG5cbnZhciByZWxhdGl2ZVVuaXQgPSB7XG4gIFwiZXhcIjogdHJ1ZSxcbiAgXCJlbVwiOiB0cnVlLFxuICBcIm11XCI6IHRydWVcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB1bml0IChlaXRoZXIgYSBzdHJpbmcgZGVmaW5pbmcgdGhlIHVuaXRcbiAqIG9yIGEgXCJzaXplXCIgcGFyc2Ugbm9kZSBjb250YWluaW5nIGEgdW5pdCBmaWVsZCkgaXMgdmFsaWQuXG4gKi9cbnZhciB2YWxpZFVuaXQgPSBmdW5jdGlvbiB2YWxpZFVuaXQodW5pdCkge1xuICBpZiAodHlwZW9mIHVuaXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICB1bml0ID0gdW5pdC51bml0O1xuICB9XG5cbiAgcmV0dXJuIHVuaXQgaW4gcHRQZXJVbml0IHx8IHVuaXQgaW4gcmVsYXRpdmVVbml0IHx8IHVuaXQgPT09IFwiZXhcIjtcbn07XG4vKlxuICogQ29udmVydCBhIFwic2l6ZVwiIHBhcnNlIG5vZGUgKHdpdGggbnVtZXJpYyBcIm51bWJlclwiIGFuZCBzdHJpbmcgXCJ1bml0XCIgZmllbGRzLFxuICogYXMgcGFyc2VkIGJ5IGZ1bmN0aW9ucy5qcyBhcmdUeXBlIFwic2l6ZVwiKSBpbnRvIGEgQ1NTIGVtIHZhbHVlIGZvciB0aGVcbiAqIGN1cnJlbnQgc3R5bGUvc2NhbGUuICBgb3B0aW9uc2AgZ2l2ZXMgdGhlIGN1cnJlbnQgb3B0aW9ucy5cbiAqL1xuXG52YXIgY2FsY3VsYXRlU2l6ZSA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNpemUoc2l6ZVZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciBzY2FsZTtcblxuICBpZiAoc2l6ZVZhbHVlLnVuaXQgaW4gcHRQZXJVbml0KSB7XG4gICAgLy8gQWJzb2x1dGUgdW5pdHNcbiAgICBzY2FsZSA9IHB0UGVyVW5pdFtzaXplVmFsdWUudW5pdF0gLy8gQ29udmVydCB1bml0IHRvIHB0XG4gICAgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbSAvLyBDb252ZXJ0IHB0IHRvIENTUyBlbVxuICAgIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gVW5zY2FsZSB0byBtYWtlIGFic29sdXRlIHVuaXRzXG4gIH0gZWxzZSBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwibXVcIikge1xuICAgIC8vIGBtdWAgdW5pdHMgc2NhbGUgd2l0aCBzY3JpcHRzdHlsZS9zY3JpcHRzY3JpcHRzdHlsZS5cbiAgICBzY2FsZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5jc3NFbVBlck11O1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyIHJlbGF0aXZlIHVuaXRzIGFsd2F5cyByZWZlciB0byB0aGUgKnRleHRzdHlsZSogZm9udFxuICAgIC8vIGluIHRoZSBjdXJyZW50IHNpemUuXG4gICAgdmFyIHVuaXRPcHRpb25zO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICAvLyBpc1RpZ2h0KCkgbWVhbnMgY3VycmVudCBzdHlsZSBpcyBzY3JpcHQvc2NyaXB0c2NyaXB0LlxuICAgICAgdW5pdE9wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG9wdGlvbnMuc3R5bGUudGV4dCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5pdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gLy8gVE9ETzogSW4gVGVYIHRoZXNlIHVuaXRzIGFyZSByZWxhdGl2ZSB0byB0aGUgcXVhZCBvZiB0aGUgY3VycmVudFxuICAgIC8vICp0ZXh0KiBmb250LCBlLmcuIGNtcjEwLiBLYVRlWCBpbnN0ZWFkIHVzZXMgdmFsdWVzIGZyb20gdGhlXG4gICAgLy8gY29tcGFyYWJseS1zaXplZCAqQ29tcHV0ZXIgTW9kZXJuIHN5bWJvbCogZm9udC4gQXQgMTBwdCwgdGhlc2VcbiAgICAvLyBtYXRjaC4gQXQgN3B0IGFuZCA1cHQsIHRoZXkgZGlmZmVyOiBjbXI3PTEuMTM4ODk0LCBjbXN5Nz0xLjE3MDY0MTtcbiAgICAvLyBjbXI1PTEuMzYxMTMzLCBjbXN5NT0xLjQ3MjI0MS4gQ29uc2lkZXIgJFxcc2NyaXB0c2l6ZSBhXFxrZXJuMWVtYiQuXG4gICAgLy8gVGVYIFxcc2hvd2xpc3RzIHNob3dzIGEga2VybiBvZiAxLjEzODg5ICogZm9udHNpemU7XG4gICAgLy8gS2FUZVggc2hvd3MgYSBrZXJuIG9mIDEuMTcxICogZm9udHNpemUuXG5cblxuICAgIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJleFwiKSB7XG4gICAgICBzY2FsZSA9IHVuaXRPcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgICB9IGVsc2UgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcImVtXCIpIHtcbiAgICAgIHNjYWxlID0gdW5pdE9wdGlvbnMuZm9udE1ldHJpY3MoKS5xdWFkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgc2l6ZVZhbHVlLnVuaXQgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKHVuaXRPcHRpb25zICE9PSBvcHRpb25zKSB7XG4gICAgICBzY2FsZSAqPSB1bml0T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE1hdGgubWluKHNpemVWYWx1ZS5udW1iZXIgKiBzY2FsZSwgb3B0aW9ucy5tYXhTaXplKTtcbn07XG4vKipcbiAqIFJvdW5kIGBuYCB0byA0IGRlY2ltYWwgcGxhY2VzLCBvciB0byB0aGUgbmVhcmVzdCAxLzEwLDAwMHRoIGVtLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LYVRlWC9LYVRlWC9wdWxsLzI0NjAuXG4gKi9cblxudmFyIG1ha2VFbSA9IGZ1bmN0aW9uIG1ha2VFbShuKSB7XG4gIHJldHVybiArbi50b0ZpeGVkKDQpICsgXCJlbVwiO1xufTtcblxuLyoqXG4gKiBUaGVzZSBvYmplY3RzIHN0b3JlIHRoZSBkYXRhIGFib3V0IHRoZSBET00gbm9kZXMgd2UgY3JlYXRlLCBhcyB3ZWxsIGFzIHNvbWVcbiAqIGV4dHJhIGRhdGEuIFRoZXkgY2FuIHRoZW4gYmUgdHJhbnNmb3JtZWQgaW50byByZWFsIERPTSBub2RlcyB3aXRoIHRoZVxuICogYHRvTm9kZWAgZnVuY3Rpb24gb3IgSFRNTCBtYXJrdXAgdXNpbmcgYHRvTWFya3VwYC4gVGhleSBhcmUgdXNlZnVsIGZvciBib3RoXG4gKiBzdG9yaW5nIGV4dHJhIHByb3BlcnRpZXMgb24gdGhlIG5vZGVzLCBhcyB3ZWxsIGFzIHByb3ZpZGluZyBhIHdheSB0byBlYXNpbHlcbiAqIHdvcmsgd2l0aCB0aGUgRE9NLlxuICpcbiAqIFNpbWlsYXIgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggTWF0aE1MIG5vZGVzIGV4aXN0IGluIG1hdGhNTFRyZWUuanMuXG4gKlxuICogVE9ETzogcmVmYWN0b3IgYHNwYW5gIGFuZCBgYW5jaG9yYCBpbnRvIGNvbW1vbiBzdXBlcmNsYXNzIHdoZW5cbiAqIHRhcmdldCBlbnZpcm9ubWVudHMgc3VwcG9ydCBjbGFzcyBpbmhlcml0YW5jZVxuICovXG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUTUwgY2xhc3NOYW1lIGJhc2VkIG9uIGEgbGlzdCBvZiBjbGFzc2VzLiBJbiBhZGRpdGlvbiB0byBqb2luaW5nXG4gKiB3aXRoIHNwYWNlcywgd2UgYWxzbyByZW1vdmUgZW1wdHkgY2xhc3Nlcy5cbiAqL1xudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gY3JlYXRlQ2xhc3MoY2xhc3Nlcykge1xuICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoY2xzID0+IGNscykuam9pbihcIiBcIik7XG59O1xuXG52YXIgaW5pdE5vZGUgPSBmdW5jdGlvbiBpbml0Tm9kZShjbGFzc2VzLCBvcHRpb25zLCBzdHlsZSkge1xuICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuICB0aGlzLmRlcHRoID0gMDtcbiAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gIHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgdGhpcy5jbGFzc2VzLnB1c2goXCJtdGlnaHRcIik7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICB0aGlzLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBub2RlXG4gKi9cblxuXG52YXIgdG9Ob2RlID0gZnVuY3Rpb24gdG9Ob2RlKHRhZ05hbWUpIHtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOyAvLyBBcHBseSB0aGUgY2xhc3NcblxuICBub2RlLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7IC8vIEFwcGx5IGlubGluZSBzdHlsZXNcblxuICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG4gICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgIH1cbiAgfSAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cblxuICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgY2hpbGRyZW4sIGFsc28gYXMgSFRNTCBub2Rlc1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcbi8qKlxuICogQ29udmVydCBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZ1xuICovXG5cblxudmFyIHRvTWFya3VwID0gZnVuY3Rpb24gdG9NYXJrdXAodGFnTmFtZSkge1xuICB2YXIgbWFya3VwID0gXCI8XCIgKyB0YWdOYW1lOyAvLyBBZGQgdGhlIGNsYXNzXG5cbiAgaWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGgpIHtcbiAgICBtYXJrdXAgKz0gXCIgY2xhc3M9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gXCJcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgc3R5bGVzICs9IHV0aWxzLmh5cGhlbmF0ZShzdHlsZSkgKyBcIjpcIiArIHRoaXMuc3R5bGVbc3R5bGVdICsgXCI7XCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlcykge1xuICAgIG1hcmt1cCArPSBcIiBzdHlsZT1cXFwiXCIgKyB1dGlscy5lc2NhcGUoc3R5bGVzKSArIFwiXFxcIlwiO1xuICB9IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG5cbiAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICB9XG4gIH1cblxuICBtYXJrdXAgKz0gXCI+XCI7IC8vIEFkZCB0aGUgbWFya3VwIG9mIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBtYXJrdXBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICB9XG5cbiAgbWFya3VwICs9IFwiPC9cIiArIHRhZ05hbWUgKyBcIj5cIjtcbiAgcmV0dXJuIG1hcmt1cDtcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuLy8gVGhpcyB0eXBlIGRvZXMgbm90IGluY2x1ZGUgYWxsIENTUyBwcm9wZXJ0aWVzLiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgc2hvdWxkXG4vLyBiZSBhZGRlZCBhcyBuZWVkZWQuXG5cblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYW4gbm9kZSwgd2l0aCBhIGNsYXNzTmFtZSwgYSBsaXN0IG9mIGNoaWxkcmVuLCBhbmRcbiAqIGFuIGlubGluZSBzdHlsZS4gSXQgYWxzbyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgaGVpZ2h0LCBkZXB0aCwgYW5kXG4gKiBtYXhGb250U2l6ZS5cbiAqXG4gKiBSZXByZXNlbnRzIHR3byB0eXBlcyB3aXRoIGRpZmZlcmVudCB1c2VzOiBTdmdTcGFuIHRvIHdyYXAgYW4gU1ZHIGFuZCBEb21TcGFuXG4gKiBvdGhlcndpc2UuIFRoaXMgdHlwZXNhZmV0eSBpcyBpbXBvcnRhbnQgd2hlbiBIVE1MIGJ1aWxkZXJzIGFjY2VzcyBhIHNwYW4nc1xuICogY2hpbGRyZW4uXG4gKi9cbmNsYXNzIFNwYW4ge1xuICBjb25zdHJ1Y3RvcihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICBpbml0Tm9kZS5jYWxsKHRoaXMsIGNsYXNzZXMsIG9wdGlvbnMsIHN0eWxlKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYW4gYXJiaXRyYXJ5IGF0dHJpYnV0ZSBvbiB0aGUgc3Bhbi4gV2FybmluZzogdXNlIHRoaXMgd2lzZWx5LiBOb3RcbiAgICogYWxsIGJyb3dzZXJzIHN1cHBvcnQgYXR0cmlidXRlcyB0aGUgc2FtZSwgYW5kIGhhdmluZyB0b28gbWFueSBjdXN0b21cbiAgICogYXR0cmlidXRlcyBpcyBwcm9iYWJseSBiYWQuXG4gICAqL1xuXG5cbiAgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gdG9Ob2RlLmNhbGwodGhpcywgXCJzcGFuXCIpO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHRvTWFya3VwLmNhbGwodGhpcywgXCJzcGFuXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gYW5jaG9yICg8YT4pIGVsZW1lbnQgd2l0aCBhIGh5cGVybGluay4gIFNlZSBgc3BhbmBcbiAqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gKi9cblxuY2xhc3MgQW5jaG9yIHtcbiAgY29uc3RydWN0b3IoaHJlZiwgY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgaW5pdE5vZGUuY2FsbCh0aGlzLCBjbGFzc2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgcmV0dXJuIHRvTm9kZS5jYWxsKHRoaXMsIFwiYVwiKTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB0b01hcmt1cC5jYWxsKHRoaXMsIFwiYVwiKTtcbiAgfVxuXG59XG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGFuIGltYWdlIGVtYmVkICg8aW1nPikgZWxlbWVudC5cbiAqL1xuXG5jbGFzcyBJbWcge1xuICBjb25zdHJ1Y3RvcihzcmMsIGFsdCwgc3R5bGUpIHtcbiAgICB0aGlzLnNyYyA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IHZvaWQgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuc3R5bGUgPSB2b2lkIDA7XG4gICAgdGhpcy5hbHQgPSBhbHQ7XG4gICAgdGhpcy5zcmMgPSBzcmM7XG4gICAgdGhpcy5jbGFzc2VzID0gW1wibW9yZFwiXTtcbiAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBub2RlLnNyYyA9IHRoaXMuc3JjO1xuICAgIG5vZGUuYWx0ID0gdGhpcy5hbHQ7XG4gICAgbm9kZS5jbGFzc05hbWUgPSBcIm1vcmRcIjsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgbm9kZS5zdHlsZVtzdHlsZV0gPSB0aGlzLnN0eWxlW3N0eWxlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIHZhciBtYXJrdXAgPSBcIjxpbWcgc3JjPVxcXCJcIiArIHV0aWxzLmVzY2FwZSh0aGlzLnNyYykgKyBcIlxcXCJcIiArIChcIiBhbHQ9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYWx0KSArIFwiXFxcIlwiKTsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgICB2YXIgc3R5bGVzID0gXCJcIjtcblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCInLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiAnXFx1MDEzMVxcdTAzMDInLFxuICAnw68nOiAnXFx1MDEzMVxcdTAzMDgnLFxuICAnw60nOiAnXFx1MDEzMVxcdTAzMDEnLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogJ1xcdTAxMzFcXHUwMzAwJ1xufTtcbi8qKlxuICogQSBzeW1ib2wgbm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBzeW1ib2wuIEl0IGVpdGhlciByZW5kZXJzXG4gKiB0byBhIHNpbmdsZSB0ZXh0IG5vZGUsIG9yIGEgc3BhbiB3aXRoIGEgc2luZ2xlIHRleHQgbm9kZSBpbiBpdCwgZGVwZW5kaW5nIG9uXG4gKiB3aGV0aGVyIGl0IGhhcyBDU1MgY2xhc3Nlcywgc3R5bGVzLCBvciBuZWVkcyBpdGFsaWMgY29ycmVjdGlvbi5cbiAqL1xuXG5jbGFzcyBTeW1ib2xOb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCwgaGVpZ2h0LCBkZXB0aCwgaXRhbGljLCBza2V3LCB3aWR0aCwgY2xhc3Nlcywgc3R5bGUpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLml0YWxpYyA9IHZvaWQgMDtcbiAgICB0aGlzLnNrZXcgPSB2b2lkIDA7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcbiAgICB0aGlzLmRlcHRoID0gZGVwdGggfHwgMDtcbiAgICB0aGlzLml0YWxpYyA9IGl0YWxpYyB8fCAwO1xuICAgIHRoaXMuc2tldyA9IHNrZXcgfHwgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gMDsgLy8gTWFyayB0ZXh0IGZyb20gbm9uLUxhdGluIHNjcmlwdHMgd2l0aCBzcGVjaWZpYyBjbGFzc2VzIHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gc3BlY2lmeSB3aGljaCBmb250cyB0byB1c2UuICBUaGlzIGFsbG93cyB1cyB0byByZW5kZXIgdGhlc2VcbiAgICAvLyBjaGFyYWN0ZXJzIHdpdGggYSBzZXJpZiBmb250IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGJyb3dzZXIgd291bGRcbiAgICAvLyBlaXRoZXIgZGVmYXVsdCB0byBhIHNhbnMgc2VyaWYgb3IgcmVuZGVyIGEgcGxhY2Vob2xkZXIgY2hhcmFjdGVyLlxuICAgIC8vIFdlIHVzZSBDU1MgY2xhc3MgbmFtZXMgbGlrZSBjamtfZmFsbGJhY2ssIGhhbmd1bF9mYWxsYmFjayBhbmRcbiAgICAvLyBicmFobWljX2ZhbGxiYWNrLiBTZWUgLi91bmljb2RlU2NyaXB0cy5qcyBmb3IgdGhlIHNldCBvZiBwb3NzaWJsZVxuICAgIC8vIHNjcmlwdCBuYW1lc1xuXG4gICAgdmFyIHNjcmlwdCA9IHNjcmlwdEZyb21Db2RlcG9pbnQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgaWYgKHNjcmlwdCkge1xuICAgICAgdGhpcy5jbGFzc2VzLnB1c2goc2NyaXB0ICsgXCJfZmFsbGJhY2tcIik7XG4gICAgfVxuXG4gICAgaWYgKC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkpIHtcbiAgICAgIC8vIGFkZCDEqyB3aGVuIHdlIGFkZCBFeHRlbmRlZCBMYXRpblxuICAgICAgdGhpcy50ZXh0ID0gaUNvbWJpbmF0aW9uc1t0aGlzLnRleHRdO1xuICAgIH1cbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IG5vZGUgb3Igc3BhbiBmcm9tIGEgc3ltYm9sIG5vZGUuIE5vdGUgdGhhdCBhIHNwYW4gaXMgb25seVxuICAgKiBjcmVhdGVkIGlmIGl0IGlzIG5lZWRlZC5cbiAgICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSBtYWtlRW0odGhpcy5pdGFsaWMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3BhbiA9IHNwYW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBzcGFuLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG5cbiAgICAgICAgc3Bhbi5zdHlsZVtzdHlsZV0gPSB0aGlzLnN0eWxlW3N0eWxlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIHJldHVybiBzcGFuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHN5bWJvbCBub2RlLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIC8vIFRPRE8oYWxwZXJ0KTogTW9yZSBkdXBsaWNhdGlvbiB0aGFuIEknZCBsaWtlIGZyb21cbiAgICAvLyBzcGFuLnByb3RvdHlwZS50b01hcmt1cCBhbmQgc3ltYm9sTm9kZS5wcm90b3R5cGUudG9Ob2RlLi4uXG4gICAgdmFyIG5lZWRzU3BhbiA9IGZhbHNlO1xuICAgIHZhciBtYXJrdXAgPSBcIjxzcGFuXCI7XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuICAgICAgbmVlZHNTcGFuID0gdHJ1ZTtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcz1cXFwiXCI7XG4gICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpO1xuICAgICAgbWFya3VwICs9IFwiXFxcIlwiO1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgaWYgKHRoaXMuaXRhbGljID4gMCkge1xuICAgICAgc3R5bGVzICs9IFwibWFyZ2luLXJpZ2h0OlwiICsgdGhpcy5pdGFsaWMgKyBcImVtO1wiO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIHN0eWxlPVxcXCJcIiArIHV0aWxzLmVzY2FwZShzdHlsZXMpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIGVzY2FwZWQgPSB1dGlscy5lc2NhcGUodGhpcy50ZXh0KTtcblxuICAgIGlmIChuZWVkc1NwYW4pIHtcbiAgICAgIG1hcmt1cCArPSBcIj5cIjtcbiAgICAgIG1hcmt1cCArPSBlc2NhcGVkO1xuICAgICAgbWFya3VwICs9IFwiPC9zcGFuPlwiO1xuICAgICAgcmV0dXJuIG1hcmt1cDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVzY2FwZWQ7XG4gICAgfVxuICB9XG5cbn1cbi8qKlxuICogU1ZHIG5vZGVzIGFyZSB1c2VkIHRvIHJlbmRlciBzdHJldGNoeSB3aWRlIGVsZW1lbnRzLlxuICovXG5cbmNsYXNzIFN2Z05vZGUge1xuICBjb25zdHJ1Y3RvcihjaGlsZHJlbiwgYXR0cmlidXRlcykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJzdmdcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCJcIjsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCI+XCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPC9zdmc+XCI7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfVxuXG59XG5jbGFzcyBQYXRoTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHBhdGhOYW1lLCBhbHRlcm5hdGUpIHtcbiAgICB0aGlzLnBhdGhOYW1lID0gdm9pZCAwO1xuICAgIHRoaXMuYWx0ZXJuYXRlID0gdm9pZCAwO1xuICAgIHRoaXMucGF0aE5hbWUgPSBwYXRoTmFtZTtcbiAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTsgLy8gVXNlZCBvbmx5IGZvciBcXHNxcnQsIFxccGhhc2UsICYgdGFsbCBkZWxpbXNcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICB2YXIgc3ZnTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwicGF0aFwiKTtcblxuICAgIGlmICh0aGlzLmFsdGVybmF0ZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIHRoaXMuYWx0ZXJuYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkXCIsIHBhdGhbdGhpcy5wYXRoTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgaWYgKHRoaXMuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPVxcXCJcIiArIHV0aWxzLmVzY2FwZSh0aGlzLmFsdGVybmF0ZSkgKyBcIlxcXCIvPlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCI8cGF0aCBkPVxcXCJcIiArIHV0aWxzLmVzY2FwZShwYXRoW3RoaXMucGF0aE5hbWVdKSArIFwiXFxcIi8+XCI7XG4gICAgfVxuICB9XG5cbn1cbmNsYXNzIExpbmVOb2RlIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJsaW5lXCIpOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8bGluZVwiO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSkgKyBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCIvPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cblxufVxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sRG9tTm9kZShncm91cCkge1xuICBpZiAoZ3JvdXAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgcmV0dXJuIGdyb3VwO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHN5bWJvbE5vZGUgYnV0IGdvdCBcIiArIFN0cmluZyhncm91cCkgKyBcIi5cIik7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFNwYW4oZ3JvdXApIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgU3Bhbikge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290IFwiICsgU3RyaW5nKGdyb3VwKSArIFwiLlwiKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZmlsZSBob2xkcyBhIGxpc3Qgb2YgYWxsIG5vLWFyZ3VtZW50IGZ1bmN0aW9ucyBhbmQgc2luZ2xlLWNoYXJhY3RlclxuICogc3ltYm9scyAobGlrZSAnYScgb3IgJzsnKS5cbiAqXG4gKiBGb3IgZWFjaCBvZiB0aGUgc3ltYm9scywgdGhlcmUgYXJlIHRocmVlIHByb3BlcnRpZXMgdGhleSBjYW4gaGF2ZTpcbiAqIC0gZm9udCAocmVxdWlyZWQpOiB0aGUgZm9udCB0byBiZSB1c2VkIGZvciB0aGlzIHN5bWJvbC4gRWl0aGVyIFwibWFpblwiICh0aGVcbiAgICAgbm9ybWFsIGZvbnQpLCBvciBcImFtc1wiICh0aGUgYW1zIGZvbnRzKS5cbiAqIC0gZ3JvdXAgKHJlcXVpcmVkKTogdGhlIFBhcnNlTm9kZSBncm91cCB0eXBlIHRoZSBzeW1ib2wgc2hvdWxkIGhhdmUgKGkuZS5cbiAgICAgXCJ0ZXh0b3JkXCIsIFwibWF0aG9yZFwiLCBldGMpLlxuICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0thVGVYL0thVGVYL3dpa2kvRXhhbWluaW5nLVRlWCNncm91cC10eXBlc1xuICogLSByZXBsYWNlOiB0aGUgY2hhcmFjdGVyIHRoYXQgdGhpcyBzeW1ib2wgb3IgZnVuY3Rpb24gc2hvdWxkIGJlXG4gKiAgIHJlcGxhY2VkIHdpdGggKGkuZS4gXCJcXHBoaVwiIGhhcyBhIHJlcGxhY2UgdmFsdWUgb2YgXCJcXHUwM2Q1XCIsIHRoZSBwaGlcbiAqICAgY2hhcmFjdGVyIGluIHRoZSBtYWluIGZvbnQpLlxuICpcbiAqIFRoZSBvdXRlcm1vc3QgbWFwIGluIHRoZSB0YWJsZSBpbmRpY2F0ZXMgd2hhdCBtb2RlIHRoZSBzeW1ib2xzIHNob3VsZCBiZVxuICogYWNjZXB0ZWQgaW4gKGUuZy4gXCJtYXRoXCIgb3IgXCJ0ZXh0XCIpLlxuICovXG4vLyBTb21lIG9mIHRoZXNlIGhhdmUgYSBcIi10b2tlblwiIHN1ZmZpeCBzaW5jZSB0aGVzZSBhcmUgYWxzbyB1c2VkIGFzIGBQYXJzZU5vZGVgXG4vLyB0eXBlcyBmb3IgcmF3IHRleHQgdG9rZW5zLCBhbmQgd2Ugd2FudCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBoaWdoZXItbGV2ZWxcbi8vIGBQYXJzZU5vZGVgIHR5cGVzLiBUaGVzZSBgUGFyc2VOb2RlYHMgYXJlIGNvbnN0cnVjdGVkIHdpdGhpbiBgUGFyc2VyYCBieVxuLy8gbG9va2luZyB1cCB0aGUgYHN5bWJvbHNgIG1hcC5cbnZhciBBVE9NUyA9IHtcbiAgXCJiaW5cIjogMSxcbiAgXCJjbG9zZVwiOiAxLFxuICBcImlubmVyXCI6IDEsXG4gIFwib3BlblwiOiAxLFxuICBcInB1bmN0XCI6IDEsXG4gIFwicmVsXCI6IDFcbn07XG52YXIgTk9OX0FUT01TID0ge1xuICBcImFjY2VudC10b2tlblwiOiAxLFxuICBcIm1hdGhvcmRcIjogMSxcbiAgXCJvcC10b2tlblwiOiAxLFxuICBcInNwYWNpbmdcIjogMSxcbiAgXCJ0ZXh0b3JkXCI6IDFcbn07XG52YXIgc3ltYm9scyA9IHtcbiAgXCJtYXRoXCI6IHt9LFxuICBcInRleHRcIjoge31cbn07XG4vKiogYGFjY2VwdFVuaWNvZGVDaGFyID0gdHJ1ZWAgaXMgb25seSBhcHBsaWNhYmxlIGlmIGByZXBsYWNlYCBpcyBzZXQuICovXG5cbmZ1bmN0aW9uIGRlZmluZVN5bWJvbChtb2RlLCBmb250LCBncm91cCwgcmVwbGFjZSwgbmFtZSwgYWNjZXB0VW5pY29kZUNoYXIpIHtcbiAgc3ltYm9sc1ttb2RlXVtuYW1lXSA9IHtcbiAgICBmb250LFxuICAgIGdyb3VwLFxuICAgIHJlcGxhY2VcbiAgfTtcblxuICBpZiAoYWNjZXB0VW5pY29kZUNoYXIgJiYgcmVwbGFjZSkge1xuICAgIHN5bWJvbHNbbW9kZV1bcmVwbGFjZV0gPSBzeW1ib2xzW21vZGVdW25hbWVdO1xuICB9XG59IC8vIFNvbWUgYWJicmV2aWF0aW9ucyBmb3IgY29tbW9ubHkgdXNlZCBzdHJpbmdzLlxuLy8gVGhpcyBoZWxwcyBtaW5pZnkgdGhlIGNvZGUsIGFuZCBhbHNvIHNwb3R0aW5nIHR5cG9zIHVzaW5nIGpzaGludC5cbi8vIG1vZGVzOlxuXG52YXIgbWF0aCA9IFwibWF0aFwiO1xudmFyIHRleHQgPSBcInRleHRcIjsgLy8gZm9udHM6XG5cbnZhciBtYWluID0gXCJtYWluXCI7XG52YXIgYW1zID0gXCJhbXNcIjsgLy8gZ3JvdXBzOlxuXG52YXIgYWNjZW50ID0gXCJhY2NlbnQtdG9rZW5cIjtcbnZhciBiaW4gPSBcImJpblwiO1xudmFyIGNsb3NlID0gXCJjbG9zZVwiO1xudmFyIGlubmVyID0gXCJpbm5lclwiO1xudmFyIG1hdGhvcmQgPSBcIm1hdGhvcmRcIjtcbnZhciBvcCA9IFwib3AtdG9rZW5cIjtcbnZhciBvcGVuID0gXCJvcGVuXCI7XG52YXIgcHVuY3QgPSBcInB1bmN0XCI7XG52YXIgcmVsID0gXCJyZWxcIjtcbnZhciBzcGFjaW5nID0gXCJzcGFjaW5nXCI7XG52YXIgdGV4dG9yZCA9IFwidGV4dG9yZFwiOyAvLyBOb3cgY29tZXMgdGhlIHN5bWJvbCB0YWJsZVxuLy8gUmVsYXRpb24gU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjFcIiwgXCJcXFxcZXF1aXZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyN2FcIiwgXCJcXFxccHJlY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI3YlwiLCBcIlxcXFxzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjNjXCIsIFwiXFxcXHNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhNVwiLCBcIlxcXFxwZXJwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyYWFmXCIsIFwiXFxcXHByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MmFiMFwiLCBcIlxcXFxzdWNjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNDNcIiwgXCJcXFxcc2ltZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMjNcIiwgXCJcXFxcbWlkXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjZhXCIsIFwiXFxcXGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjZiXCIsIFwiXFxcXGdnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjRkXCIsIFwiXFxcXGFzeW1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjI1XCIsIFwiXFxcXHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmM4XCIsIFwiXFxcXGJvd3RpZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWlsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MVwiLCBcIlxcXFxzcXN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjkyXCIsIFwiXFxcXHNxc3Vwc2V0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNTBcIiwgXCJcXFxcZG90ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIzMjJcIiwgXCJcXFxcZnJvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMGJcIiwgXCJcXFxcbmlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMWRcIiwgXCJcXFxccHJvcHRvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmEyXCIsIFwiXFxcXHZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmEzXCIsIFwiXFxcXGRhc2h2XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBiXCIsIFwiXFxcXG93bnNcIik7IC8vIFB1bmN0dWF0aW9uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUwMDJlXCIsIFwiXFxcXGxkb3RwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIlxcdTIyYzVcIiwgXCJcXFxcY2RvdHBcIik7IC8vIE1pc2MgU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDIzXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDIzXCIsIFwiXFxcXCNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDI2XCIsIFwiXFxcXCZcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMDI2XCIsIFwiXFxcXCZcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTM1XCIsIFwiXFxcXGFsZXBoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwMFwiLCBcIlxcXFxmb3JhbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTBmXCIsIFwiXFxcXGhiYXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjAzXCIsIFwiXFxcXGV4aXN0c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDdcIiwgXCJcXFxcbmFibGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjZkXCIsIFwiXFxcXGZsYXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTEzXCIsIFwiXFxcXGVsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NmVcIiwgXCJcXFxcbmF0dXJhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjNcIiwgXCJcXFxcY2x1YnN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTE4XCIsIFwiXFxcXHdwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2ZlwiLCBcIlxcXFxzaGFycFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjJcIiwgXCJcXFxcZGlhbW9uZHN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTFjXCIsIFwiXFxcXFJlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2MVwiLCBcIlxcXFxoZWFydHN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMTExXCIsIFwiXFxcXEltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2MFwiLCBcIlxcXFxzcGFkZXN1aXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGE3XCIsIFwiXFxcXFNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGE3XCIsIFwiXFxcXFNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGI2XCIsIFwiXFxcXFBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGI2XCIsIFwiXFxcXFBcIik7IC8vIE1hdGggYW5kIFRleHRcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjBcIiwgXCJcXFxcdGV4dGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjFcIiwgXCJcXFxcdGV4dGRhZ2dlcmRibFwiKTsgLy8gTGFyZ2UgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjNiMVwiLCBcIlxcXFxybW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjNiMFwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTI3ZWZcIiwgXCJcXFxccmdyb3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjdlZVwiLCBcIlxcXFxsZ3JvdXBcIiwgdHJ1ZSk7IC8vIEJpbmFyeSBPcGVyYXRvcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjEzXCIsIFwiXFxcXG1wXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk2XCIsIFwiXFxcXG9taW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI4ZVwiLCBcIlxcXFx1cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5M1wiLCBcIlxcXFxzcWNhcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxN1wiLCBcIlxcXFxhc3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTRcIiwgXCJcXFxcc3FjdXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1ZWZcIiwgXCJcXFxcYmlnY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOVwiLCBcIlxcXFxidWxsZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIwMjFcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI0MFwiLCBcIlxcXFx3clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MmEzZlwiLCBcIlxcXFxhbWFsZ1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDAyNlwiLCBcIlxcXFxBbmRcIik7IC8vIGZyb20gYW1zbWF0aFxuLy8gQXJyb3cgU3ltYm9sc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjVcIiwgXCJcXFxcbG9uZ2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMFwiLCBcIlxcXFxMZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjhcIiwgXCJcXFxcTG9uZ2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmNlwiLCBcIlxcXFxsb25ncmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkMlwiLCBcIlxcXFxSaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y5XCIsIFwiXFxcXExvbmdyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk0XCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y3XCIsIFwiXFxcXGxvbmdsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkNFwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmYVwiLCBcIlxcXFxMb25nbGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYTZcIiwgXCJcXFxcbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2ZjXCIsIFwiXFxcXGxvbmdtYXBzdG9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTdcIiwgXCJcXFxcbmVhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFhOVwiLCBcIlxcXFxob29rbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWFhXCIsIFwiXFxcXGhvb2tyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk4XCIsIFwiXFxcXHNlYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYmNcIiwgXCJcXFxcbGVmdGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFjMFwiLCBcIlxcXFxyaWdodGhhcnBvb251cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OVwiLCBcIlxcXFxzd2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWJkXCIsIFwiXFxcXGxlZnRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFjMVwiLCBcIlxcXFxyaWdodGhhcnBvb25kb3duXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk2XCIsIFwiXFxcXG53YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxY2NcIiwgXCJcXFxccmlnaHRsZWZ0aGFycG9vbnNcIiwgdHJ1ZSk7IC8vIEFNUyBOZWdhdGVkIEJpbmFyeSBSZWxhdGlvbnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNmVcIiwgXCJcXFxcbmxlc3NcIiwgdHJ1ZSk7IC8vIFN5bWJvbCBuYW1lcyBwcmVjZWRlZCBieSBcIkBcIiBlYWNoIGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY3JvLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxMFwiLCBcIlxcXFxAbmxlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMTFcIiwgXCJcXFxcQG5sZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODdcIiwgXCJcXFxcbG5lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY4XCIsIFwiXFxcXGxuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGNcIiwgXCJcXFxcQGx2ZXJ0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU2XCIsIFwiXFxcXGxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODlcIiwgXCJcXFxcbG5hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4MFwiLCBcIlxcXFxucHJlY1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjJlMCB0byBcXG5wcmVjY3VybHllcS4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTBcIiwgXCJcXFxcbnByZWNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU4XCIsIFwiXFxcXHByZWNuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjlcIiwgXCJcXFxccHJlY25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MVwiLCBcIlxcXFxuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMDZcIiwgXCJcXFxcQG5zaG9ydG1pZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI0XCIsIFwiXFxcXG5taWRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhY1wiLCBcIlxcXFxudmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhZFwiLCBcIlxcXFxudkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlYVwiLCBcIlxcXFxudHJpYW5nbGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWNcIiwgXCJcXFxcbnRyaWFuZ2xlbGVmdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGFcIiwgXCJcXFxcc3Vic2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMWFcIiwgXCJcXFxcQHZhcnN1YnNldG5lcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWNiXCIsIFwiXFxcXHN1YnNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxN1wiLCBcIlxcXFxAdmFyc3Vic2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZmXCIsIFwiXFxcXG5ndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZlwiLCBcIlxcXFxAbmdlcXNsYW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGVcIiwgXCJcXFxcQG5nZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODhcIiwgXCJcXFxcZ25lcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY5XCIsIFwiXFxcXGduZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMGRcIiwgXCJcXFxcQGd2ZXJ0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU3XCIsIFwiXFxcXGduc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGFcIiwgXCJcXFxcZ25hcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4MVwiLCBcIlxcXFxuc3VjY1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjJlMSB0byBcXG5zdWNjY3VybHllcS4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTFcIiwgXCJcXFxcbnN1Y2NlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmU5XCIsIFwiXFxcXHN1Y2Nuc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYmFcIiwgXCJcXFxcc3VjY25hcHByb3hcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIyNDYgdG8gXFxzaW1uZXFxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0NlwiLCBcIlxcXFxuY29uZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDA3XCIsIFwiXFxcXEBuc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI2XCIsIFwiXFxcXG5wYXJhbGxlbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFmXCIsIFwiXFxcXG5WRGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmViXCIsIFwiXFxcXG50cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWRcIiwgXCJcXFxcbnRyaWFuZ2xlcmlnaHRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE4XCIsIFwiXFxcXEBuc3Vwc2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGJcIiwgXCJcXFxcc3Vwc2V0bmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMWJcIiwgXCJcXFxcQHZhcnN1cHNldG5lcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWNjXCIsIFwiXFxcXHN1cHNldG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxOVwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFlXCIsIFwiXFxcXG5WZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI1XCIsIFwiXFxcXHByZWNuZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjZcIiwgXCJcXFxcc3VjY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxNlwiLCBcIlxcXFxAbnN1YnNldGVxcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmI0XCIsIFwiXFxcXHVubGhkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjVcIiwgXCJcXFxcdW5yaGRcIik7IC8vIEFNUyBOZWdhdGVkIEFycm93c1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5YVwiLCBcIlxcXFxubGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxOWJcIiwgXCJcXFxcbnJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZFwiLCBcIlxcXFxuTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxY2ZcIiwgXCJcXFxcblJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhZVwiLCBcIlxcXFxubGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZVwiLCBcIlxcXFxuTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7IC8vIEFNUyBNaXNjXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyNWIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTBmXCIsIFwiXFxcXGhzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViZFwiLCBcIlxcXFx0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1Y2FcIiwgXCJcXFxcbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjRjOFwiLCBcIlxcXFxjaXJjbGVkU1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhZVwiLCBcIlxcXFxjaXJjbGVkUlwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhZVwiLCBcIlxcXFxjaXJjbGVkUlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIyMVwiLCBcIlxcXFxtZWFzdXJlZGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjA0XCIsIFwiXFxcXG5leGlzdHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMjdcIiwgXCJcXFxcbWhvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTMyXCIsIFwiXFxcXEZpbnZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxNDFcIiwgXCJcXFxcR2FtZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjAzNVwiLCBcIlxcXFxiYWNrcHJpbWVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1YjJcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViY1wiLCBcIlxcXFxibGFja3RyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVhMFwiLCBcIlxcXFxibGFja3NxdWFyZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjllYlwiLCBcIlxcXFxibGFja2xvemVuZ2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI2MDVcIiwgXCJcXFxcYmlnc3RhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIyMlwiLCBcIlxcXFxzcGhlcmljYWxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIwMVwiLCBcIlxcXFxjb21wbGVtZW50XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBVK0YwIHRvIFxcbWF0aGV0aC4gV2UgbWFwIHRvIEFNUyBmdW5jdGlvbiBcXGV0aFxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTAwZjBcIiwgXCJcXFxcZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBmMFwiLCBcIlxcdTAwZjBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1NzFcIiwgXCJcXFxcZGlhZ3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNTcyXCIsIFwiXFxcXGRpYWdkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWExXCIsIFwiXFxcXHNxdWFyZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVhMVwiLCBcIlxcXFxCb3hcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1Y2FcIiwgXCJcXFxcRGlhbW9uZFwiKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgVStBNSB0byBcXG1hdGh5ZW4uIFdlIG1hcCB0byBBTVMgZnVuY3Rpb24gXFx5ZW5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGE1XCIsIFwiXFxcXHllblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MDBhNVwiLCBcIlxcXFx5ZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MTNcIiwgXCJcXFxcY2hlY2ttYXJrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUyNzEzXCIsIFwiXFxcXGNoZWNrbWFya1wiKTsgLy8gQU1TIEhlYnJld1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzZcIiwgXCJcXFxcYmV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzOFwiLCBcIlxcXFxkYWxldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzdcIiwgXCJcXFxcZ2ltZWxcIiwgdHJ1ZSk7IC8vIEFNUyBHcmVla1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTAzZGRcIiwgXCJcXFxcZGlnYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDNmMFwiLCBcIlxcXFx2YXJrYXBwYVwiKTsgLy8gQU1TIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgb3BlbiwgXCJcXHUyNTBjXCIsIFwiXFxcXEB1bGNvcm5lclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGNsb3NlLCBcIlxcdTI1MTBcIiwgXCJcXFxcQHVyY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgb3BlbiwgXCJcXHUyNTE0XCIsIFwiXFxcXEBsbGNvcm5lclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGNsb3NlLCBcIlxcdTI1MThcIiwgXCJcXFxcQGxyY29ybmVyXCIsIHRydWUpOyAvLyBBTVMgQmluYXJ5IFJlbGF0aW9uc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2NlwiLCBcIlxcXFxsZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhN2RcIiwgXCJcXFxcbGVxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE5NVwiLCBcIlxcXFxlcXNsYW50bGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjcyXCIsIFwiXFxcXGxlc3NzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4NVwiLCBcIlxcXFxsZXNzYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNGFcIiwgXCJcXFxcYXBwcm94ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkNlwiLCBcIlxcXFxsZXNzZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDhcIiwgXCJcXFxcbGxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzZcIiwgXCJcXFxcbGVzc2d0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRhXCIsIFwiXFxcXGxlc3NlcWd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYThiXCIsIFwiXFxcXGxlc3NlcXFndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1MVwiLCBcIlxcXFxkb3RlcWRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUzXCIsIFwiXFxcXHJpc2luZ2RvdHNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUyXCIsIFwiXFxcXGZhbGxpbmdkb3RzZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzZFwiLCBcIlxcXFxiYWNrc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyY2RcIiwgXCJcXFxcYmFja3NpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYzVcIiwgXCJcXFxcc3Vic2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDBcIiwgXCJcXFxcU3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOGZcIiwgXCJcXFxcc3FzdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3Y1wiLCBcIlxcXFxwcmVjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRlXCIsIFwiXFxcXGN1cmx5ZXFwcmVjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyN2VcIiwgXCJcXFxccHJlY3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI3XCIsIFwiXFxcXHByZWNhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiMlwiLCBcIlxcXFx2YXJ0cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiNFwiLCBcIlxcXFx0cmlhbmdsZWxlZnRlcVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmE4XCIsIFwiXFxcXHZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYWFcIiwgXCJcXFxcVnZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIzMjNcIiwgXCJcXFxcc21hbGxzbWlsZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXHNtYWxsZnJvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0ZlwiLCBcIlxcXFxidW1wZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0ZVwiLCBcIlxcXFxCdW1wZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2N1wiLCBcIlxcXFxnZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhN2VcIiwgXCJcXFxcZ2Vxc2xhbnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE5NlwiLCBcIlxcXFxlcXNsYW50Z3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzNcIiwgXCJcXFxcZ3Ryc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhODZcIiwgXCJcXFxcZ3RyYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDdcIiwgXCJcXFxcZ3RyZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDlcIiwgXCJcXFxcZ2dnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzdcIiwgXCJcXFxcZ3RybGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRiXCIsIFwiXFxcXGd0cmVxbGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYThjXCIsIFwiXFxcXGd0cmVxcWxlc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1NlwiLCBcIlxcXFxlcWNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1N1wiLCBcIlxcXFxjaXJjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1Y1wiLCBcIlxcXFx0cmlhbmdsZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzY1wiLCBcIlxcXFx0aGlja3NpbVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXHRoaWNrYXBwcm94XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYzZcIiwgXCJcXFxcc3Vwc2V0ZXFxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDFcIiwgXCJcXFxcU3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyOTBcIiwgXCJcXFxcc3FzdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3ZFwiLCBcIlxcXFxzdWNjY3VybHllcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmRmXCIsIFwiXFxcXGN1cmx5ZXFzdWNjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyN2ZcIiwgXCJcXFxcc3VjY3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYWI4XCIsIFwiXFxcXHN1Y2NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiM1wiLCBcIlxcXFx2YXJ0cmlhbmdsZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYjVcIiwgXCJcXFxcdHJpYW5nbGVyaWdodGVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYTlcIiwgXCJcXFxcVmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIyM1wiLCBcIlxcXFxzaG9ydG1pZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjI1XCIsIFwiXFxcXHNob3J0cGFyYWxsZWxcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI2Y1wiLCBcIlxcXFxiZXR3ZWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDRcIiwgXCJcXFxccGl0Y2hmb3JrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMWRcIiwgXCJcXFxcdmFycHJvcHRvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTI1YzBcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZWxlZnRcIik7IC8vIHVuaWNvZGUtbWF0aCBzYXlzIHRoYXQgXFx0aGVyZWZvcmUgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzNFwiLCBcIlxcXFx0aGVyZWZvcmVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIwZFwiLCBcIlxcXFxiYWNrZXBzaWxvblwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyNWI2XCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVyaWdodFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXGJlY2F1c2UgaXMgYSBtYXRob3JkIGF0b20uXG4vLyBXZSBrZXB0IHRoZSBhbXNzeW1iIGF0b20gdHlwZSwgd2hpY2ggaXMgcmVsLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIzNVwiLCBcIlxcXFxiZWNhdXNlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDhcIiwgXCJcXFxcbGxsZXNzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZDlcIiwgXCJcXFxcZ2dndHJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiMlwiLCBcIlxcXFxsaGRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiM1wiLCBcIlxcXFxyaGRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0MlwiLCBcIlxcXFxlcXNpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJjOFwiLCBcIlxcXFxKb2luXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTFcIiwgXCJcXFxcRG90ZXFcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgT3BlcmF0b3JzXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE0XCIsIFwiXFxcXGRvdHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjIxNlwiLCBcIlxcXFxzbWFsbHNldG1pbnVzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDJcIiwgXCJcXFxcQ2FwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDNcIiwgXCJcXFxcQ3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTJhNWVcIiwgXCJcXFxcZG91YmxlYmFyd2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjI5ZlwiLCBcIlxcXFxib3htaW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjllXCIsIFwiXFxcXGJveHBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjN1wiLCBcIlxcXFxkaXZpZGVvbnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYzlcIiwgXCJcXFxcbHRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2FcIiwgXCJcXFxccnRpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2JcIiwgXCJcXFxcbGVmdHRocmVldGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjY1wiLCBcIlxcXFxyaWdodHRocmVldGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjZlwiLCBcIlxcXFxjdXJseXdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyY2VcIiwgXCJcXFxcY3VybHl2ZWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjI5ZFwiLCBcIlxcXFxjaXJjbGVkZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjliXCIsIFwiXFxcXGNpcmNsZWRhc3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjNVwiLCBcIlxcXFxjZW50ZXJkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiYVwiLCBcIlxcXFxpbnRlcmNhbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQyXCIsIFwiXFxcXGRvdWJsZWNhcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQzXCIsIFwiXFxcXGRvdWJsZWN1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmEwXCIsIFwiXFxcXGJveHRpbWVzXCIsIHRydWUpOyAvLyBBTVMgQXJyb3dzXG4vLyBOb3RlOiB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWUyIHRvIHRoZWlyIG93biBmdW5jdGlvbiBcXHJpZ2h0ZGFzaGFycm93LlxuLy8gV2UnbGwgbWFwIGl0IHRvIEFNUyBmdW5jdGlvbiBcXGRhc2hyaWdodGFycm93LiBJdCBwcm9kdWNlcyB0aGUgc2FtZSBhdG9tLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFlMlwiLCBcIlxcXFxkYXNocmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjFlMCB0byBcXGxlZnRkYXNoYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWUwXCIsIFwiXFxcXGRhc2hsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjN1wiLCBcIlxcXFxsZWZ0bGVmdGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM2XCIsIFwiXFxcXGxlZnRyaWdodGFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRhXCIsIFwiXFxcXExsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5ZVwiLCBcIlxcXFx0d29oZWFkbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYTJcIiwgXCJcXFxcbGVmdGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFiXCIsIFwiXFxcXGxvb3BhcnJvd2xlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjYlwiLCBcIlxcXFxsZWZ0cmlnaHRoYXJwb29uc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWI2XCIsIFwiXFxcXGN1cnZlYXJyb3dsZWZ0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJhIHRvIFxcYWN3b3BlbmNpcmNsZWFycm93LiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiYVwiLCBcIlxcXFxjaXJjbGVhcnJvd2xlZnRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiMFwiLCBcIlxcXFxMc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjOFwiLCBcIlxcXFx1cHVwYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmZcIiwgXCJcXFxcdXBoYXJwb29ubGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWMzXCIsIFwiXFxcXGRvd25oYXJwb29ubGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJiNlwiLCBcIlxcXFxvcmlnb2ZcIiwgdHJ1ZSk7IC8vIG5vdCBpbiBmb250XG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJiN1wiLCBcIlxcXFxpbWFnZW9mXCIsIHRydWUpOyAvLyBub3QgaW4gZm9udFxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiOFwiLCBcIlxcXFxtdWx0aW1hcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFkXCIsIFwiXFxcXGxlZnRyaWdodHNxdWlnYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjOVwiLCBcIlxcXFxyaWdodHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzRcIiwgXCJcXFxccmlnaHRsZWZ0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYTBcIiwgXCJcXFxcdHdvaGVhZHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhM1wiLCBcIlxcXFxyaWdodGFycm93dGFpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFjXCIsIFwiXFxcXGxvb3BhcnJvd3JpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYjdcIiwgXCJcXFxcY3VydmVhcnJvd3JpZ2h0XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWJiIHRvIFxcY3dvcGVuY2lyY2xlYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJiXCIsIFwiXFxcXGNpcmNsZWFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiMVwiLCBcIlxcXFxSc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjYVwiLCBcIlxcXFxkb3duZG93bmFycm93c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJlXCIsIFwiXFxcXHVwaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzJcIiwgXCJcXFxcZG93bmhhcnBvb25yaWdodFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRkXCIsIFwiXFxcXHJpZ2h0c3F1aWdhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRkXCIsIFwiXFxcXGxlYWRzdG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFkYlwiLCBcIlxcXFxScmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJlXCIsIFwiXFxcXHJlc3RyaWN0aW9uXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOFwiLCBcImBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXCRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIkXCIsIFwiXFxcXHRleHRkb2xsYXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCIlXCIsIFwiXFxcXCVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXF9cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJfXCIsIFwiXFxcXHRleHR1bmRlcnNjb3JlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyMFwiLCBcIlxcXFxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMWVcIiwgXCJcXFxcaW5mdHlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDMyXCIsIFwiXFxcXHByaW1lXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjViM1wiLCBcIlxcXFx0cmlhbmdsZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOTNcIiwgXCJcXFxcR2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzk0XCIsIFwiXFxcXERlbHRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5OFwiLCBcIlxcXFxUaGV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOWJcIiwgXCJcXFxcTGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5ZVwiLCBcIlxcXFxYaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTBcIiwgXCJcXFxcUGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2EzXCIsIFwiXFxcXFNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhNVwiLCBcIlxcXFxVcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhNlwiLCBcIlxcXFxQaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E4XCIsIFwiXFxcXFBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTlcIiwgXCJcXFxcT21lZ2FcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJBXCIsIFwiXFx1MDM5MVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkJcIiwgXCJcXHUwMzkyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiRVwiLCBcIlxcdTAzOTVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJaXCIsIFwiXFx1MDM5NlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUwMzk3XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiSVwiLCBcIlxcdTAzOTlcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJLXCIsIFwiXFx1MDM5QVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIk1cIiwgXCJcXHUwMzlDXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiTlwiLCBcIlxcdTAzOURcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJPXCIsIFwiXFx1MDM5RlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlBcIiwgXCJcXHUwM0ExXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiVFwiLCBcIlxcdTAzQTRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJYXCIsIFwiXFx1MDNBN1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYWNcIiwgXCJcXFxcbmVnXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhY1wiLCBcIlxcXFxsbm90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjJhNFwiLCBcIlxcXFx0b3BcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmE1XCIsIFwiXFxcXGJvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIyMDVcIiwgXCJcXFxcdmFybm90aGluZ1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjFcIiwgXCJcXFxcYWxwaGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2IyXCIsIFwiXFxcXGJldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2IzXCIsIFwiXFxcXGdhbW1hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiNFwiLCBcIlxcXFxkZWx0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZjVcIiwgXCJcXFxcZXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjZcIiwgXCJcXFxcemV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjdcIiwgXCJcXFxcZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiOFwiLCBcIlxcXFx0aGV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjlcIiwgXCJcXFxcaW90YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmFcIiwgXCJcXFxca2FwcGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JiXCIsIFwiXFxcXGxhbWJkYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmNcIiwgXCJcXFxcbXVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JkXCIsIFwiXFxcXG51XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiZVwiLCBcIlxcXFx4aVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmZcIiwgXCJcXFxcb21pY3JvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzBcIiwgXCJcXFxccGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2MxXCIsIFwiXFxcXHJob1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzNcIiwgXCJcXFxcc2lnbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M0XCIsIFwiXFxcXHRhdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzVcIiwgXCJcXFxcdXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZDVcIiwgXCJcXFxccGhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjN1wiLCBcIlxcXFxjaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M4XCIsIFwiXFxcXHBzaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzlcIiwgXCJcXFxcb21lZ2FcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I1XCIsIFwiXFxcXHZhcmVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2QxXCIsIFwiXFxcXHZhcnRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNkNlwiLCBcIlxcXFx2YXJwaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZjFcIiwgXCJcXFxcdmFycmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjMlwiLCBcIlxcXFx2YXJzaWdtYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzZcIiwgXCJcXFxcdmFycGhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE3XCIsIFwiKlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiK1wiLCBcIitcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTJcIiwgXCItXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM1XCIsIFwiXFxcXGNkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMThcIiwgXCJcXFxcY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBmN1wiLCBcIlxcXFxkaXZcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTAwYjFcIiwgXCJcXFxccG1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTAwZDdcIiwgXCJcXFxcdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjlcIiwgXCJcXFxcY2FwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjJhXCIsIFwiXFxcXGN1cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxNlwiLCBcIlxcXFxzZXRtaW51c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyN1wiLCBcIlxcXFxsYW5kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXGxvclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyN1wiLCBcIlxcXFx3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyOFwiLCBcIlxcXFx2ZWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjFhXCIsIFwiXFxcXHN1cmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyN2U4XCIsIFwiXFxcXGxhbmdsZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIyMjNcIiwgXCJcXFxcbHZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyMjI1XCIsIFwiXFxcXGxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIj9cIiwgXCI/XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIiFcIiwgXCIhXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTI3ZTlcIiwgXCJcXFxccmFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTIyMjNcIiwgXCJcXFxccnZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjIyNVwiLCBcIlxcXFxyVmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiPVwiLCBcIj1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIjpcIiwgXCI6XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ4XCIsIFwiXFxcXGFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI0NVwiLCBcIlxcXFxjb25nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY1XCIsIFwiXFxcXGdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MFwiLCBcIlxcXFxnZXRzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI+XCIsIFwiXFxcXGd0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjA4XCIsIFwiXFxcXGluXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHVlMDIwXCIsIFwiXFxcXEBub3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODJcIiwgXCJcXFxcc3Vic2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjgzXCIsIFwiXFxcXHN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4NlwiLCBcIlxcXFxzdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4N1wiLCBcIlxcXFxzdXBzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg4XCIsIFwiXFxcXG5zdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjg5XCIsIFwiXFxcXG5zdXBzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhOFwiLCBcIlxcXFxtb2RlbHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTBcIiwgXCJcXFxcbGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY0XCIsIFwiXFxcXGxlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjY0XCIsIFwiXFxcXGxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiPFwiLCBcIlxcXFxsdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MlwiLCBcIlxcXFxyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHRvXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzFcIiwgXCJcXFxcbmdlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjcwXCIsIFwiXFxcXG5sZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXCBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXHNwYWNlXCIpOyAvLyBSZWY6IExhVGVYIFNvdXJjZSAyZTogXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXG5vYnJlYWtzcGFjZX17JVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXG5vYnJlYWtzcGFjZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcIFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCIgXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFxzcGFjZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcbm9icmVha3NwYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHNwYWNpbmcsIG51bGwsIFwiXFxcXG5vYnJlYWtcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgbnVsbCwgXCJcXFxcYWxsb3dicmVha1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCIsXCIsIFwiLFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCI7XCIsIFwiO1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmJjXCIsIFwiXFxcXGJhcndlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYmJcIiwgXCJcXFxcdmVlYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk5XCIsIFwiXFxcXG9kb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTVcIiwgXCJcXFxcb3BsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTdcIiwgXCJcXFxcb3RpbWVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwMlwiLCBcIlxcXFxwYXJ0aWFsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk4XCIsIFwiXFxcXG9zbGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlhXCIsIFwiXFxcXGNpcmNsZWRjaXJjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYTFcIiwgXCJcXFxcYm94ZG90XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyNWIzXCIsIFwiXFxcXGJpZ3RyaWFuZ2xldXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YmRcIiwgXCJcXFxcYmlndHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMDIwXCIsIFwiXFxcXGRhZ2dlclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjJjNFwiLCBcIlxcXFxkaWFtb25kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM2XCIsIFwiXFxcXHN0YXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YzNcIiwgXCJcXFxcdHJpYW5nbGVsZWZ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyNWI5XCIsIFwiXFxcXHRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJ7XCIsIFwiXFxcXHtcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHtcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ7XCIsIFwiXFxcXHRleHRicmFjZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwifVwiLCBcIlxcXFx9XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwifVwiLCBcIlxcXFx9XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwifVwiLCBcIlxcXFx0ZXh0YnJhY2VyaWdodFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIntcIiwgXCJcXFxcbGJyYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIn1cIiwgXCJcXFxccmJyYWNlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiW1wiLCBcIlxcXFxsYnJhY2tcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJdXCIsIFwiXFxcXHJicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiKFwiLCBcIlxcXFxscGFyZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCI8XCIsIFwiXFxcXHRleHRsZXNzXCIsIHRydWUpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIj5cIiwgXCJcXFxcdGV4dGdyZWF0ZXJcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjMwYVwiLCBcIlxcXFxsZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjMwYlwiLCBcIlxcXFxyZmxvb3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyMzA4XCIsIFwiXFxcXGxjZWlsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTIzMDlcIiwgXCJcXFxccmNlaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjNcIiwgXCJ8XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyM1wiLCBcIlxcXFx2ZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwifFwiLCBcIlxcXFx0ZXh0YmFyXCIsIHRydWUpOyAvLyBpbiBUMSBmb250ZW5jXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcfFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcVmVydFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMjVcIiwgXCJcXFxcdGV4dGJhcmRibFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIn5cIiwgXCJcXFxcdGV4dGFzY2lpdGlsZGVcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXFxcXCIsIFwiXFxcXHRleHRiYWNrc2xhc2hcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJeXCIsIFwiXFxcXHRleHRhc2NpaWNpcmN1bVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MVwiLCBcIlxcXFx1cGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWQxXCIsIFwiXFxcXFVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTNcIiwgXCJcXFxcZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWQzXCIsIFwiXFxcXERvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NVwiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFkNVwiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjEwXCIsIFwiXFxcXGNvcHJvZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMxXCIsIFwiXFxcXGJpZ3ZlZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMwXCIsIFwiXFxcXGJpZ3dlZGdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDRcIiwgXCJcXFxcYmlndXBsdXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJjMlwiLCBcIlxcXFxiaWdjYXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjJjM1wiLCBcIlxcXFxiaWdjdXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyYlwiLCBcIlxcXFxpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyYlwiLCBcIlxcXFxpbnRvcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJjXCIsIFwiXFxcXGlpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyZFwiLCBcIlxcXFxpaWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjBmXCIsIFwiXFxcXHByb2RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIxMVwiLCBcIlxcXFxzdW1cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwMlwiLCBcIlxcXFxiaWdvdGltZXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwMVwiLCBcIlxcXFxiaWdvcGx1c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTAwXCIsIFwiXFxcXGJpZ29kb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyZVwiLCBcIlxcXFxvaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmZcIiwgXCJcXFxcb2lpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIzMFwiLCBcIlxcXFxvaWlpbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwNlwiLCBcIlxcXFxiaWdzcWN1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJiXCIsIFwiXFxcXHNtYWxsaW50XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcdGV4dGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbWF0aGVsbGlwc2lzXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGlubmVyLCBcIlxcdTIwMjZcIiwgXCJcXFxcbGRvdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxsZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMmVmXCIsIFwiXFxcXEBjZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMmYxXCIsIFwiXFxcXGRkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjJlZVwiLCBcIlxcXFx2YXJ2ZG90c1wiKTsgLy8gXFx2ZG90cyBpcyBhIG1hY3JvXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYVwiLCBcIlxcXFxhY3V0ZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYlwiLCBcIlxcXFxncmF2ZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDBhOFwiLCBcIlxcXFxkZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMDdlXCIsIFwiXFxcXHRpbGRlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM5XCIsIFwiXFxcXGJhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkOFwiLCBcIlxcXFxicmV2ZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjN1wiLCBcIlxcXFxjaGVja1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDA1ZVwiLCBcIlxcXFxoYXRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTIwZDdcIiwgXCJcXFxcdmVjXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ5XCIsIFwiXFxcXGRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkYVwiLCBcIlxcXFxtYXRocmluZ1wiKTsgLy8gXFxpbWF0aCBhbmQgXFxqbWF0aCBzaG91bGQgYmUgaW52YXJpYW50IHRvIFxcbWF0aHJtLCBcXG1hdGhiZiwgZXRjLiwgc28gdXNlIFBVQVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHVlMTMxXCIsIFwiXFxcXEBpbWF0aFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdWUyMzdcIiwgXCJcXFxcQGptYXRoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDEzMVwiLCBcIlxcdTAxMzFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMjM3XCIsIFwiXFx1MDIzN1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAxMzFcIiwgXCJcXFxcaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAyMzdcIiwgXCJcXFxcalwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZGZcIiwgXCJcXFxcc3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGU2XCIsIFwiXFxcXGFlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDE1M1wiLCBcIlxcXFxvZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZjhcIiwgXCJcXFxcb1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYzZcIiwgXCJcXFxcQUVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTUyXCIsIFwiXFxcXE9FXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBkOFwiLCBcIlxcXFxPXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNhXCIsIFwiXFxcXCdcIik7IC8vIGFjdXRlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjYlwiLCBcIlxcXFxgXCIpOyAvLyBncmF2ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzZcIiwgXCJcXFxcXlwiKTsgLy8gY2lyY3VtZmxleFxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZGNcIiwgXCJcXFxcflwiKTsgLy8gdGlsZGVcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM5XCIsIFwiXFxcXD1cIik7IC8vIG1hY3JvblxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDhcIiwgXCJcXFxcdVwiKTsgLy8gYnJldmVcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ5XCIsIFwiXFxcXC5cIik7IC8vIGRvdCBhYm92ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwYjhcIiwgXCJcXFxcY1wiKTsgLy8gY2VkaWxsYVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZGFcIiwgXCJcXFxcclwiKTsgLy8gcmluZyBhYm92ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzdcIiwgXCJcXFxcdlwiKTsgLy8gY2Fyb25cblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMGE4XCIsICdcXFxcXCInKTsgLy8gZGlhcmVzaXNcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRkXCIsIFwiXFxcXEhcIik7IC8vIGRvdWJsZSBhY3V0ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTI1ZWZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIik7IC8vIFxcYmlnY2lyYyBnbHlwaFxuLy8gVGhlc2UgbGlnYXR1cmVzIGFyZSBkZXRlY3RlZCBhbmQgY3JlYXRlZCBpbiBQYXJzZXIuanMncyBgZm9ybUxpZ2F0dXJlc2AuXG5cbnZhciBsaWdhdHVyZXMgPSB7XG4gIFwiLS1cIjogdHJ1ZSxcbiAgXCItLS1cIjogdHJ1ZSxcbiAgXCJgYFwiOiB0cnVlLFxuICBcIicnXCI6IHRydWVcbn07XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiLS1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDEzXCIsIFwiXFxcXHRleHRlbmRhc2hcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE0XCIsIFwiLS0tXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxNFwiLCBcIlxcXFx0ZXh0ZW1kYXNoXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOFwiLCBcImBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiXFxcXHRleHRxdW90ZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE5XCIsIFwiJ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTlcIiwgXCJcXFxcdGV4dHF1b3RlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFjXCIsIFwiYGBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFjXCIsIFwiXFxcXHRleHRxdW90ZWRibGxlZnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFkXCIsIFwiJydcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDFkXCIsIFwiXFxcXHRleHRxdW90ZWRibHJpZ2h0XCIpOyAvLyAgXFxkZWdyZWUgZnJvbSBnZW5zeW1iIHBhY2thZ2VcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBiMFwiLCBcIlxcXFxkZWdyZWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXGRlZ3JlZVwiKTsgLy8gXFx0ZXh0ZGVncmVlIGZyb20gaW5wdXRlbmMgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXHRleHRkZWdyZWVcIiwgdHJ1ZSk7IC8vIFRPRE86IEluIExhVGVYLCBcXHBvdW5kcyBjYW4gZ2VuZXJhdGUgYSBkaWZmZXJlbnQgY2hhcmFjdGVyIGluIHRleHQgYW5kIG1hdGhcbi8vIG1vZGUsIGJ1dCBhbW9uZyBvdXIgZm9udHMsIG9ubHkgTWFpbi1SZWd1bGFyIGRlZmluZXMgdGhpcyBjaGFyYWN0ZXIgXCIxNjNcIi5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFxwb3VuZHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXG1hdGhzdGVybGluZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYTNcIiwgXCJcXFxccG91bmRzXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFx0ZXh0c3RlcmxpbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MjBcIiwgXCJcXFxcbWFsdGVzZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpOyAvLyBUaGVyZSBhcmUgbG90cyBvZiBzeW1ib2xzIHdoaWNoIGFyZSB0aGUgc2FtZSwgc28gd2UgYWRkIHRoZW0gaW4gYWZ0ZXJ3YXJkcy5cbi8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gbWF0aCBtb2RlXG5cbnZhciBtYXRoVGV4dFN5bWJvbHMgPSBcIjAxMjM0NTY3ODkvQC5cXFwiXCI7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgbWF0aFRleHRTeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBjaCA9IG1hdGhUZXh0U3ltYm9scy5jaGFyQXQoaSk7XG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBjaCwgY2gpO1xufSAvLyBBbGwgb2YgdGhlc2UgYXJlIHRleHRvcmRzIGluIHRleHQgbW9kZVxuXG5cbnZhciB0ZXh0U3ltYm9scyA9IFwiMDEyMzQ1Njc4OSFAKigpLT0rXFxcIjs6Py8uLFwiO1xuXG5mb3IgKHZhciBfaSA9IDA7IF9pIDwgdGV4dFN5bWJvbHMubGVuZ3RoOyBfaSsrKSB7XG4gIHZhciBfY2ggPSB0ZXh0U3ltYm9scy5jaGFyQXQoX2kpO1xuXG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gsIF9jaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlLCBhbmQgbWF0aG9yZHMgaW4gbWF0aCBtb2RlXG5cblxudmFyIGxldHRlcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbGV0dGVycy5sZW5ndGg7IF9pMisrKSB7XG4gIHZhciBfY2gyID0gbGV0dGVycy5jaGFyQXQoX2kyKTtcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMiwgX2NoMik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gyLCBfY2gyKTtcbn0gLy8gQmxhY2tib2FyZCBib2xkIGFuZCBzY3JpcHQgbGV0dGVycyBpbiBVbmljb2RlIHJhbmdlXG5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJDXCIsIFwiXFx1MjEwMlwiKTsgLy8gYmxhY2tib2FyZCBib2xkXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiQ1wiLCBcIlxcdTIxMDJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJIXCIsIFwiXFx1MjEwRFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIk5cIiwgXCJcXHUyMTE1XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJQXCIsIFwiXFx1MjExOVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiUFwiLCBcIlxcdTIxMTlcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJRXCIsIFwiXFx1MjExQVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlJcIiwgXCJcXHUyMTFEXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJaXCIsIFwiXFx1MjEyNFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiWlwiLCBcIlxcdTIxMjRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJoXCIsIFwiXFx1MjEwRVwiKTsgLy8gaXRhbGljIGgsIFBsYW5jayBjb25zdGFudFxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgbWF0aG9yZCwgXCJoXCIsIFwiXFx1MjEwRVwiKTsgLy8gVGhlIG5leHQgbG9vcCBsb2FkcyB3aWRlIChzdXJyb2dhdGUgcGFpcikgY2hhcmFjdGVycy5cbi8vIFdlIHN1cHBvcnQgc29tZSBsZXR0ZXJzIGluIHRoZSBVbmljb2RlIHJhbmdlIFUrMUQ0MDAgdG8gVSsxRDdGRixcbi8vIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scy5cbi8vIFNvbWUgZWRpdG9ycyBkbyBub3QgZGVhbCB3ZWxsIHdpdGggd2lkZSBjaGFyYWN0ZXJzLiBTbyBkb24ndCB3cml0ZSB0aGVcbi8vIHN0cmluZyBpbnRvIHRoaXMgZmlsZS4gSW5zdGVhZCwgY3JlYXRlIHRoZSBzdHJpbmcgZnJvbSB0aGUgc3Vycm9nYXRlIHBhaXIuXG5cbnZhciB3aWRlQ2hhciA9IFwiXCI7XG5cbmZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGxldHRlcnMubGVuZ3RoOyBfaTMrKykge1xuICB2YXIgX2NoMyA9IGxldHRlcnMuY2hhckF0KF9pMyk7IC8vIFRoZSBoZXggbnVtYmVycyBpbiB0aGUgbmV4dCBsaW5lIGFyZSBhIHN1cnJvZ2F0ZSBwYWlyLlxuICAvLyAweEQ4MzUgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIGZvciBhbGwgbGV0dGVycyBpbiB0aGUgcmFuZ2Ugd2Ugc3VwcG9ydC5cbiAgLy8gMHhEQzAwIGlzIHRoZSBsb3cgc3Vycm9nYXRlIGZvciBib2xkIEEuXG5cblxuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMDAgKyBfaTMpOyAvLyBBLVogYS16IGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERDMzQgKyBfaTMpOyAvLyBBLVogYS16IGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REM2OCArIF9pMyk7IC8vIEEtWiBhLXogYm9sZCBpdGFsaWNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweEREMDQgKyBfaTMpOyAvLyBBLVogYS16IEZyYWt0dXJcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERENkMgKyBfaTMpOyAvLyBBLVogYS16IGJvbGQgRnJha3R1clxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERBMCArIF9pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIF9pMyk7IC8vIEEtWiBhLXogc2FucyBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTA4ICsgX2kzKTsgLy8gQS1aIGEteiBzYW5zIGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REU3MCArIF9pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcblxuICBpZiAoX2kzIDwgMjYpIHtcbiAgICAvLyBLYVRlWCBmb250cyBoYXZlIG9ubHkgY2FwaXRhbCBsZXR0ZXJzIGZvciBibGFja2JvYXJkIGJvbGQgYW5kIHNjcmlwdC5cbiAgICAvLyBTZWUgZXhjZXB0aW9uIGZvciBrIGJlbG93LlxuICAgIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REQzOCArIF9pMyk7IC8vIEEtWiBkb3VibGUgc3RydWNrXG5cbiAgICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gICAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzlDICsgX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB9IC8vIFRPRE86IEFkZCBib2xkIHNjcmlwdCB3aGVuIGl0IGlzIHN1cHBvcnRlZCBieSBhIEthVGVYIGZvbnQuXG5cbn0gLy8gXCJrXCIgaXMgdGhlIG9ubHkgZG91YmxlIHN0cnVjayBsb3dlciBjYXNlIGxldHRlciBpbiB0aGUgS2FUZVggZm9udHMuXG5cblxud2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImtcIiwgd2lkZUNoYXIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwia1wiLCB3aWRlQ2hhcik7IC8vIE5leHQsIHNvbWUgd2lkZSBjaGFyYWN0ZXIgbnVtZXJhbHNcblxuZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgMTA7IF9pNCsrKSB7XG4gIHZhciBfY2g0ID0gX2k0LnRvU3RyaW5nKCk7XG5cbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkNFICsgX2k0KTsgLy8gMC05IGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRTIgKyBfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIF9pNCk7IC8vIDAtOSBib2xkIHNhbnNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRjYgKyBfaTQpOyAvLyAwLTkgbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiXFx1MDBkMFxcdTAwZGVcXHUwMGZlXCI7XG5cbmZvciAodmFyIF9pNSA9IDA7IF9pNSA8IGV4dHJhTGF0aW4ubGVuZ3RoOyBfaTUrKykge1xuICB2YXIgX2NoNSA9IGV4dHJhTGF0aW4uY2hhckF0KF9pNSk7XG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNSwgX2NoNSk7XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuICogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuICpcbiAqIEZ1bmN0aW9uIHdpZGVDaGFyYWN0ZXJGb250IHRha2VzIGEgd2lkZSBjaGFyYWN0ZXIgYXMgaW5wdXQgYW5kIHJldHVybnNcbiAqIHRoZSBmb250IGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byByZW5kZXIgaXQgcHJvcGVybHkuXG4gKi9cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRobm9ybWFsXCIsIFwidGV4dGl0XCIsIFwiTWF0aC1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWNcbltcIm1hdGhub3JtYWxcIiwgXCJ0ZXh0aXRcIiwgXCJNYXRoLUl0YWxpY1wiXSwgLy8gYS16IGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIEEtWiBib2xkIGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIGEteiBib2xkIGl0YWxpY1xuLy8gTWFwIGZhbmN5IEEtWiBsZXR0ZXJzIHRvIHNjcmlwdCwgbm90IGNhbGxpZ3JhcGhpYy5cbi8vIFRoaXMgYWxpZ25zIHdpdGggdW5pY29kZS1tYXRoIGFuZCBtYXRoIGZvbnRzIChleGNlcHQgQ2FtYnJpYSBNYXRoKS5cbltcIm1hdGhzY3JcIiwgXCJ0ZXh0c2NyXCIsIFwiU2NyaXB0LVJlZ3VsYXJcIl0sIC8vIEEtWiBzY3JpcHRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IHNjcmlwdC4gIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIGEteiBib2xkIHNjcmlwdC4gTm8gZm9udFxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gQS1aIEZyYWt0dXJcbltcIm1hdGhmcmFrXCIsIFwidGV4dGZyYWtcIiwgXCJGcmFrdHVyLVJlZ3VsYXJcIl0sIC8vIGEteiBGcmFrdHVyXG5bXCJtYXRoYmJcIiwgXCJ0ZXh0YmJcIiwgXCJBTVMtUmVndWxhclwiXSwgLy8gQS1aIGRvdWJsZS1zdHJ1Y2tcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBrIGRvdWJsZS1zdHJ1Y2tcbi8vIE5vdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSBib2xkIGZvbnQsIGJ1dCBmb250IG1ldHJpY3MgZm9yIHJlZ3VsYXIgRnJha3R1ci5cbltcIm1hdGhib2xkZnJha1wiLCBcInRleHRib2xkZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gQS1aIGJvbGQgRnJha3R1clxuW1wibWF0aGJvbGRmcmFrXCIsIFwidGV4dGJvbGRmcmFrXCIsIFwiRnJha3R1ci1SZWd1bGFyXCJdLCAvLyBhLXogYm9sZCBGcmFrdHVyXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gQS1aIHNhbnMtc2VyaWZcbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyBhLXogc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gQS1aIGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gYS16IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wibWF0aGl0c2ZcIiwgXCJ0ZXh0aXRzZlwiLCBcIlNhbnNTZXJpZi1JdGFsaWNcIl0sIC8vIGEteiBpdGFsaWMgc2Fucy1zZXJpZlxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBBLVogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyBhLXogYm9sZCBpdGFsaWMgc2Fucy4gTm8gZm9udFxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdLCAvLyBBLVogbW9ub3NwYWNlXG5bXCJtYXRodHRcIiwgXCJ0ZXh0dHRcIiwgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIl0gLy8gYS16IG1vbm9zcGFjZVxuXTtcbnZhciB3aWRlTnVtZXJhbERhdGEgPSBbW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyAwLTkgYm9sZFxuW1wiXCIsIFwiXCIsIFwiXCJdLCAvLyAwLTkgZG91YmxlLXN0cnVjay4gTm8gS2FUZVggZm9udC5cbltcIm1hdGhzZlwiLCBcInRleHRzZlwiLCBcIlNhbnNTZXJpZi1SZWd1bGFyXCJdLCAvLyAwLTkgc2Fucy1zZXJpZlxuW1wibWF0aGJvbGRzZlwiLCBcInRleHRib2xkc2ZcIiwgXCJTYW5zU2VyaWYtQm9sZFwiXSwgLy8gMC05IGJvbGQgc2Fucy1zZXJpZlxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdIC8vIDAtOSBtb25vc3BhY2Vcbl07XG52YXIgd2lkZUNoYXJhY3RlckZvbnQgPSBmdW5jdGlvbiB3aWRlQ2hhcmFjdGVyRm9udCh3aWRlQ2hhciwgbW9kZSkge1xuICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgY29kZVBvaW50QXQoKS4gU28gd29yayB3aXRoIHRoZSBzdXJyb2dhdGUgcGFpci5cbiAgdmFyIEggPSB3aWRlQ2hhci5jaGFyQ29kZUF0KDApOyAvLyBoaWdoIHN1cnJvZ2F0ZVxuXG4gIHZhciBMID0gd2lkZUNoYXIuY2hhckNvZGVBdCgxKTsgLy8gbG93IHN1cnJvZ2F0ZVxuXG4gIHZhciBjb2RlUG9pbnQgPSAoSCAtIDB4RDgwMCkgKiAweDQwMCArIChMIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIHZhciBqID0gbW9kZSA9PT0gXCJtYXRoXCIgPyAwIDogMTsgLy8gY29sdW1uIGluZGV4IGZvciBDU1MgY2xhc3MuXG5cbiAgaWYgKDB4MUQ0MDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ2QTQpIHtcbiAgICAvLyB3aWRlTGF0aW5MZXR0ZXJEYXRhIGNvbnRhaW5zIGV4YWN0bHkgMjYgY2hhcnMgb24gZWFjaCByb3cuXG4gICAgLy8gU28gd2UgY2FuIGNhbGN1bGF0ZSB0aGUgcmVsZXZhbnQgcm93LiBObyB0cmF2ZXJzZSBuZWNlc3NhcnkuXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFENDAwKSAvIDI2KTtcbiAgICByZXR1cm4gW3dpZGVMYXRpbkxldHRlckRhdGFbaV1bMl0sIHdpZGVMYXRpbkxldHRlckRhdGFbaV1bal1dO1xuICB9IGVsc2UgaWYgKDB4MUQ3Q0UgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFEN0ZGKSB7XG4gICAgLy8gTnVtZXJhbHMsIHRlbiBwZXIgcm93LlxuICAgIHZhciBfaSA9IE1hdGguZmxvb3IoKGNvZGVQb2ludCAtIDB4MUQ3Q0UpIC8gMTApO1xuXG4gICAgcmV0dXJuIFt3aWRlTnVtZXJhbERhdGFbX2ldWzJdLCB3aWRlTnVtZXJhbERhdGFbX2ldW2pdXTtcbiAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPT09IDB4MUQ2QTUgfHwgY29kZVBvaW50ID09PSAweDFENkE2KSB7XG4gICAgLy8gZG90bGVzcyBpIG9yIGpcbiAgICByZXR1cm4gW3dpZGVMYXRpbkxldHRlckRhdGFbMF1bMl0sIHdpZGVMYXRpbkxldHRlckRhdGFbMF1bal1dO1xuICB9IGVsc2UgaWYgKDB4MUQ2QTYgPCBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDwgMHgxRDdDRSkge1xuICAgIC8vIEdyZWVrIGxldHRlcnMuIE5vdCBzdXBwb3J0ZWQsIHlldC5cbiAgICByZXR1cm4gW1wiXCIsIFwiXCJdO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW55IHdpZGUgY2hhcmFjdGVycyBvdXRzaWRlIDFENDAw4oCTMUQ3RkYuXG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6IFwiICsgd2lkZUNoYXIpO1xuICB9XG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogTG9va3MgdXAgdGhlIGdpdmVuIHN5bWJvbCBpbiBmb250TWV0cmljcywgYWZ0ZXIgYXBwbHlpbmcgYW55IHN5bWJvbFxuICogcmVwbGFjZW1lbnRzIGRlZmluZWQgaW4gc3ltYm9sLmpzXG4gKi9cbnZhciBsb29rdXBTeW1ib2wgPSBmdW5jdGlvbiBsb29rdXBTeW1ib2wodmFsdWUsIC8vIFRPRE8oIzk2Myk6IFVzZSBhIHVuaW9uIHR5cGUgZm9yIHRoaXMuXG5mb250TmFtZSwgbW9kZSkge1xuICAvLyBSZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGl0cyByZXBsYWNlZCB2YWx1ZSBmcm9tIHN5bWJvbC5qc1xuICBpZiAoc3ltYm9sc1ttb2RlXVt2YWx1ZV0gJiYgc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZSkge1xuICAgIHZhbHVlID0gc3ltYm9sc1ttb2RlXVt2YWx1ZV0ucmVwbGFjZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG1ldHJpY3M6IGdldENoYXJhY3Rlck1ldHJpY3ModmFsdWUsIGZvbnROYW1lLCBtb2RlKVxuICB9O1xufTtcbi8qKlxuICogTWFrZXMgYSBzeW1ib2xOb2RlIGFmdGVyIHRyYW5zbGF0aW9uIHZpYSB0aGUgbGlzdCBvZiBzeW1ib2xzIGluIHN5bWJvbHMuanMuXG4gKiBDb3JyZWN0bHkgcHVsbHMgb3V0IG1ldHJpY3MgZm9yIHRoZSBjaGFyYWN0ZXIsIGFuZCBvcHRpb25hbGx5IHRha2VzIGEgbGlzdCBvZlxuICogY2xhc3NlcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgbm9kZS5cbiAqXG4gKiBUT0RPOiBtYWtlIGFyZ3VtZW50IG9yZGVyIGNsb3NlciB0byBtYWtlU3BhblxuICogVE9ETzogYWRkIGEgc2VwYXJhdGUgYXJndW1lbnQgZm9yIG1hdGggY2xhc3MgKGUuZy4gYG1vcGAsIGBtYmluYCksIHdoaWNoXG4gKiBzaG91bGQgaWYgcHJlc2VudCBjb21lIGZpcnN0IGluIGBjbGFzc2VzYC5cbiAqIFRPRE8oIzk1Myk6IE1ha2UgYG9wdGlvbnNgIG1hbmRhdG9yeSBhbmQgYWx3YXlzIHBhc3MgaXQgaW4uXG4gKi9cblxuXG52YXIgbWFrZVN5bWJvbCA9IGZ1bmN0aW9uIG1ha2VTeW1ib2wodmFsdWUsIGZvbnROYW1lLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBsb29rdXAgPSBsb29rdXBTeW1ib2wodmFsdWUsIGZvbnROYW1lLCBtb2RlKTtcbiAgdmFyIG1ldHJpY3MgPSBsb29rdXAubWV0cmljcztcbiAgdmFsdWUgPSBsb29rdXAudmFsdWU7XG4gIHZhciBzeW1ib2xOb2RlO1xuXG4gIGlmIChtZXRyaWNzKSB7XG4gICAgdmFyIGl0YWxpYyA9IG1ldHJpY3MuaXRhbGljO1xuXG4gICAgaWYgKG1vZGUgPT09IFwidGV4dFwiIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5mb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgICBpdGFsaWMgPSAwO1xuICAgIH1cblxuICAgIHN5bWJvbE5vZGUgPSBuZXcgU3ltYm9sTm9kZSh2YWx1ZSwgbWV0cmljcy5oZWlnaHQsIG1ldHJpY3MuZGVwdGgsIGl0YWxpYywgbWV0cmljcy5za2V3LCBtZXRyaWNzLndpZHRoLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPKGVtaWx5KTogRmlndXJlIG91dCBhIGdvb2Qgd2F5IHRvIG9ubHkgcHJpbnQgdGhpcyBpbiBkZXZlbG9wbWVudFxuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIk5vIGNoYXJhY3RlciBtZXRyaWNzIFwiICsgKFwiZm9yICdcIiArIHZhbHVlICsgXCInIGluIHN0eWxlICdcIiArIGZvbnROYW1lICsgXCInIGFuZCBtb2RlICdcIiArIG1vZGUgKyBcIidcIikpO1xuICAgIHN5bWJvbE5vZGUgPSBuZXcgU3ltYm9sTm9kZSh2YWx1ZSwgMCwgMCwgMCwgMCwgMCwgY2xhc3Nlcyk7XG4gIH1cblxuICBpZiAob3B0aW9ucykge1xuICAgIHN5bWJvbE5vZGUubWF4Rm9udFNpemUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICBzeW1ib2xOb2RlLmNsYXNzZXMucHVzaChcIm10aWdodFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3IgPSBvcHRpb25zLmdldENvbG9yKCk7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIHN5bWJvbE5vZGUuc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ltYm9sTm9kZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sIGluIE1haW4tUmVndWxhciBvciBBTVMtUmVndWxhci5cbiAqIFVzZWQgZm9yIHJlbCwgYmluLCBvcGVuLCBjbG9zZSwgaW5uZXIsIGFuZCBwdW5jdC5cbiAqL1xuXG5cbnZhciBtYXRoc3ltID0gZnVuY3Rpb24gbWF0aHN5bSh2YWx1ZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICBpZiAoY2xhc3NlcyA9PT0gdm9pZCAwKSB7XG4gICAgY2xhc3NlcyA9IFtdO1xuICB9XG5cbiAgLy8gRGVjaWRlIHdoYXQgZm9udCB0byByZW5kZXIgdGhlIHN5bWJvbCBpbiBieSBpdHMgZW50cnkgaW4gdGhlIHN5bWJvbHNcbiAgLy8gdGFibGUuXG4gIC8vIEhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIHZhbHVlID0gXFwgYmVjYXVzZSB0aGUgXFwgaXMgdXNlZCBhcyBhXG4gIC8vIHRleHRvcmQgaW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBlcnJvcnMgYnV0IGNhbm5vdCBiZSBwYXJzZWQgYXMgYSByZWd1bGFyXG4gIC8vIHRleHQgb3JkaW5hbCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBwcmVzZW50IGFzIGEgc3ltYm9sIGluIHRoZSBzeW1ib2xzXG4gIC8vIHRhYmxlIGZvciB0ZXh0LCBhcyB3ZWxsIGFzIGEgc3BlY2lhbCBjYXNlIGZvciBib2xkc3ltYm9sIGJlY2F1c2UgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGJvbGQgKyBhbmQgLVxuICBpZiAob3B0aW9ucy5mb250ID09PSBcImJvbGRzeW1ib2xcIiAmJiBsb29rdXBTeW1ib2wodmFsdWUsIFwiTWFpbi1Cb2xkXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh2YWx1ZSwgXCJNYWluLUJvbGRcIiwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQoW1wibWF0aGJmXCJdKSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXFxcXFwiIHx8IHN5bWJvbHNbbW9kZV1bdmFsdWVdLmZvbnQgPT09IFwibWFpblwiKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHZhbHVlLCBcIkFNUy1SZWd1bGFyXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcImFtc3JtXCJdKSk7XG4gIH1cbn07XG4vKipcbiAqIERldGVybWluZXMgd2hpY2ggb2YgdGhlIHR3byBmb250IG5hbWVzIChNYWluLUJvbGQgYW5kIE1hdGgtQm9sZEl0YWxpYykgYW5kXG4gKiBjb3JyZXNwb25kaW5nIHN0eWxlIHRhZ3MgKG1hdGhiZiBvciBib2xkc3ltYm9sKSB0byB1c2UgZm9yIGZvbnQgXCJib2xkc3ltYm9sXCIsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHN5bWJvbC4gIFVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YgZm9udE1hcCBmb3IgZm9udFxuICogXCJib2xkc3ltYm9sXCIuXG4gKi9cblxuXG52YXIgYm9sZHN5bWJvbCA9IGZ1bmN0aW9uIGJvbGRzeW1ib2wodmFsdWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMsIHR5cGUpIHtcbiAgaWYgKHR5cGUgIT09IFwidGV4dG9yZFwiICYmIGxvb2t1cFN5bWJvbCh2YWx1ZSwgXCJNYXRoLUJvbGRJdGFsaWNcIiwgbW9kZSkubWV0cmljcykge1xuICAgIHJldHVybiB7XG4gICAgICBmb250TmFtZTogXCJNYXRoLUJvbGRJdGFsaWNcIixcbiAgICAgIGZvbnRDbGFzczogXCJib2xkc3ltYm9sXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIFNvbWUgZ2x5cGhzIGRvIG5vdCBleGlzdCBpbiBNYXRoLUJvbGRJdGFsaWMgc28gd2UgbmVlZCB0byB1c2VcbiAgICAvLyBNYWluLUJvbGQgaW5zdGVhZC5cbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCIsXG4gICAgICBmb250Q2xhc3M6IFwibWF0aGJmXCJcbiAgICB9O1xuICB9XG59O1xuLyoqXG4gKiBNYWtlcyBlaXRoZXIgYSBtYXRob3JkIG9yIHRleHRvcmQgaW4gdGhlIGNvcnJlY3QgZm9udCBhbmQgY29sb3IuXG4gKi9cblxuXG52YXIgbWFrZU9yZCA9IGZ1bmN0aW9uIG1ha2VPcmQoZ3JvdXAsIG9wdGlvbnMsIHR5cGUpIHtcbiAgdmFyIG1vZGUgPSBncm91cC5tb2RlO1xuICB2YXIgdGV4dCA9IGdyb3VwLnRleHQ7XG4gIHZhciBjbGFzc2VzID0gW1wibW9yZFwiXTsgLy8gTWF0aCBtb2RlIG9yIE9sZCBmb250IChpLmUuIFxccm0pXG5cbiAgdmFyIGlzRm9udCA9IG1vZGUgPT09IFwibWF0aFwiIHx8IG1vZGUgPT09IFwidGV4dFwiICYmIG9wdGlvbnMuZm9udDtcbiAgdmFyIGZvbnRPckZhbWlseSA9IGlzRm9udCA/IG9wdGlvbnMuZm9udCA6IG9wdGlvbnMuZm9udEZhbWlseTtcbiAgdmFyIHdpZGVGb250TmFtZSA9IFwiXCI7XG4gIHZhciB3aWRlRm9udENsYXNzID0gXCJcIjtcblxuICBpZiAodGV4dC5jaGFyQ29kZUF0KDApID09PSAweEQ4MzUpIHtcbiAgICBbd2lkZUZvbnROYW1lLCB3aWRlRm9udENsYXNzXSA9IHdpZGVDaGFyYWN0ZXJGb250KHRleHQsIG1vZGUpO1xuICB9XG5cbiAgaWYgKHdpZGVGb250TmFtZS5sZW5ndGggPiAwKSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIHdpZGVGb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQod2lkZUZvbnRDbGFzcykpO1xuICB9IGVsc2UgaWYgKGZvbnRPckZhbWlseSkge1xuICAgIHZhciBmb250TmFtZTtcbiAgICB2YXIgZm9udENsYXNzZXM7XG5cbiAgICBpZiAoZm9udE9yRmFtaWx5ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgICAgdmFyIGZvbnREYXRhID0gYm9sZHN5bWJvbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAoaXNGb250KSB7XG4gICAgICBmb250TmFtZSA9IGZvbnRNYXBbZm9udE9yRmFtaWx5XS5mb250TmFtZTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvbnROYW1lID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseSwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZV07XG4gICAgfVxuXG4gICAgaWYgKGxvb2t1cFN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSkubWV0cmljcykge1xuICAgICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSk7XG4gICAgfSBlbHNlIGlmIChsaWdhdHVyZXMuaGFzT3duUHJvcGVydHkodGV4dCkgJiYgZm9udE5hbWUuc2xpY2UoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKG1ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgXCJNYXRoLUl0YWxpY1wiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRobm9ybWFsXCJdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5mb250O1xuXG4gICAgaWYgKGZvbnQgPT09IFwiYW1zXCIpIHtcbiAgICAgIHZhciBfZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShcImFtc3JtXCIsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuXG4gICAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCBfZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYWluXCIgfHwgIWZvbnQpIHtcbiAgICAgIHZhciBfZm9udE5hbWUyID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoXCJ0ZXh0cm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9udHMgYWRkZWQgYnkgcGx1Z2luc1xuICAgICAgdmFyIF9mb250TmFtZTMgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTsgLy8gV2UgYWRkIGZvbnQgbmFtZSBhcyBhIGNzcyBjbGFzc1xuXG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTMsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KF9mb250TmFtZTMsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCB0eXBlOiBcIiArIHR5cGUgKyBcIiBpbiBtYWtlT3JkXCIpO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc3Vic2VxdWVudCBzeW1ib2xOb2RlcyBoYXZlIHRoZSBzYW1lIGNsYXNzZXMsIHNrZXcsIG1heEZvbnQsXG4gKiBhbmQgc3R5bGVzLlxuICovXG5cblxudmFyIGNhbkNvbWJpbmUgPSAocHJldiwgbmV4dCkgPT4ge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHByZXYgYW5kIG5leHQgYm90aCBhcmUganVzdCBcIm1iaW5cInMgb3IgXCJtb3JkXCJzIHdlIGRvbid0IGNvbWJpbmUgdGhlbVxuICAvLyBzbyB0aGF0IHRoZSBwcm9wZXIgc3BhY2luZyBjYW4gYmUgcHJlc2VydmVkLlxuXG5cbiAgaWYgKHByZXYuY2xhc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgY2xzID0gcHJldi5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKGNscyA9PT0gXCJtYmluXCIgfHwgY2xzID09PSBcIm1vcmRcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIHN0eWxlIGluIHByZXYuc3R5bGUpIHtcbiAgICBpZiAocHJldi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkgJiYgcHJldi5zdHlsZVtzdHlsZV0gIT09IG5leHQuc3R5bGVbc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX3N0eWxlIGluIG5leHQuc3R5bGUpIHtcbiAgICBpZiAobmV4dC5zdHlsZS5oYXNPd25Qcm9wZXJ0eShfc3R5bGUpICYmIHByZXYuc3R5bGVbX3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtfc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG4gKiBDb21iaW5lIGNvbnNlY3V0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciB0cnlDb21iaW5lQ2hhcnMgPSBjaGFycyA9PiB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgdmFyIHByZXYgPSBjaGFyc1tpXTtcbiAgICB2YXIgbmV4dCA9IGNoYXJzW2kgKyAxXTtcblxuICAgIGlmIChwcmV2IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBuZXh0IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBjYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgbWFrZVNwYW4kMiA9IGZ1bmN0aW9uIG1ha2VTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICB2YXIgc3BhbiA9IG5ldyBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgbWFrZVN2Z1NwYW4gPSAoY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKSA9PiBuZXcgU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpO1xuXG52YXIgbWFrZUxpbmVTcGFuID0gZnVuY3Rpb24gbWFrZUxpbmVTcGFuKGNsYXNzTmFtZSwgb3B0aW9ucywgdGhpY2tuZXNzKSB7XG4gIHZhciBsaW5lID0gbWFrZVNwYW4kMihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBtYWtlRW0obGluZS5oZWlnaHQpO1xuICBsaW5lLm1heEZvbnRTaXplID0gMS4wO1xuICByZXR1cm4gbGluZTtcbn07XG4vKipcbiAqIE1ha2VzIGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBocmVmLCBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sXG4gKiBhbmQgb3B0aW9ucy5cbiAqL1xuXG5cbnZhciBtYWtlQW5jaG9yID0gZnVuY3Rpb24gbWFrZUFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICB2YXIgYW5jaG9yID0gbmV3IEFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbiAgc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59O1xuLyoqXG4gKiBXcmFwcyBncm91cCBpbiBhIHNwYW4gaWYgaXQncyBhIGRvY3VtZW50IGZyYWdtZW50LCBhbGxvd2luZyB0byBhcHBseSBjbGFzc2VzXG4gKiBhbmQgc3R5bGVzXG4gKi9cblxuXG52YXIgd3JhcEZyYWdtZW50ID0gZnVuY3Rpb24gd3JhcEZyYWdtZW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMihbXSwgW2dyb3VwXSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59OyAvLyBUaGVzZSBhcmUgZXhhY3Qgb2JqZWN0IHR5cGVzIHRvIGNhdGNoIHR5cG9zIGluIHRoZSBuYW1lcyBvZiB0aGUgb3B0aW9uYWwgZmllbGRzLlxuXG5cbi8vIENvbXB1dGVzIHRoZSB1cGRhdGVkIGBjaGlsZHJlbmAgbGlzdCBhbmQgdGhlIG92ZXJhbGwgZGVwdGguXG4vL1xuLy8gVGhpcyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1ha2VWTGlzdCBtYWtlcyBpdCBlYXNpZXIgdG8gZW5mb3JjZSB0eXBlIHNhZmV0eSBieVxuLy8gYWxsb3dpbmcgZWFybHkgZXhpdHMgKHJldHVybnMpIGluIHRoZSBsb2dpYy5cbnZhciBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGggPSBmdW5jdGlvbiBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMucG9zaXRpb25UeXBlID09PSBcImluZGl2aWR1YWxTaGlmdFwiKSB7XG4gICAgdmFyIG9sZENoaWxkcmVuID0gcGFyYW1zLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZHJlbiA9IFtvbGRDaGlsZHJlblswXV07IC8vIEFkZCBpbiBrZXJucyB0byB0aGUgbGlzdCBvZiBwYXJhbXMuY2hpbGRyZW4gdG8gZ2V0IGVhY2ggZWxlbWVudCB0byBiZVxuICAgIC8vIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3Qgc3BlY2lmaWVkIHNoaWZ0XG5cbiAgICB2YXIgX2RlcHRoID0gLW9sZENoaWxkcmVuWzBdLnNoaWZ0IC0gb2xkQ2hpbGRyZW5bMF0uZWxlbS5kZXB0aDtcblxuICAgIHZhciBjdXJyUG9zID0gX2RlcHRoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRpZmYgPSAtb2xkQ2hpbGRyZW5baV0uc2hpZnQgLSBjdXJyUG9zIC0gb2xkQ2hpbGRyZW5baV0uZWxlbS5kZXB0aDtcbiAgICAgIHZhciBzaXplID0gZGlmZiAtIChvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5oZWlnaHQgKyBvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5kZXB0aCk7XG4gICAgICBjdXJyUG9zID0gY3VyclBvcyArIGRpZmY7XG4gICAgICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemVcbiAgICAgIH0pO1xuICAgICAgY2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGhcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgdmVydGljYWwgbGlzdCBieSBzdGFja2luZyBlbGVtZW50cyBhbmQga2VybnMgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gKiBBbGxvd3MgZm9yIG1hbnkgZGlmZmVyZW50IHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgcG9zaXRpb25pbmcgbWV0aG9kLlxuICpcbiAqIFNlZSBWTGlzdFBhcmFtIGRvY3VtZW50YXRpb24gYWJvdmUuXG4gKi9cblxuXG52YXIgbWFrZVZMaXN0ID0gZnVuY3Rpb24gbWFrZVZMaXN0KHBhcmFtcywgb3B0aW9ucykge1xuICB2YXIge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlcHRoXG4gIH0gPSBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKTsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG4gIHZhciBwc3RydXRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJlbGVtXCIpIHtcbiAgICAgIHZhciBlbGVtID0gY2hpbGQuZWxlbTtcbiAgICAgIHBzdHJ1dFNpemUgPSBNYXRoLm1heChwc3RydXRTaXplLCBlbGVtLm1heEZvbnRTaXplLCBlbGVtLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHN0cnV0U2l6ZSArPSAyO1xuICB2YXIgcHN0cnV0ID0gbWFrZVNwYW4kMihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbShwc3RydXRTaXplKTsgLy8gQ3JlYXRlIGEgbmV3IGxpc3Qgb2YgYWN0dWFsIGNoaWxkcmVuIGF0IHRoZSBjb3JyZWN0IG9mZnNldHNcblxuICB2YXIgcmVhbENoaWxkcmVuID0gW107XG4gIHZhciBtaW5Qb3MgPSBkZXB0aDtcbiAgdmFyIG1heFBvcyA9IGRlcHRoO1xuICB2YXIgY3VyclBvcyA9IGRlcHRoO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGNoaWxkcmVuLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW5bX2kyXTtcblxuICAgIGlmIChfY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIpIHtcbiAgICAgIGN1cnJQb3MgKz0gX2NoaWxkLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZWxlbSA9IF9jaGlsZC5lbGVtO1xuICAgICAgdmFyIGNsYXNzZXMgPSBfY2hpbGQud3JhcHBlckNsYXNzZXMgfHwgW107XG4gICAgICB2YXIgc3R5bGUgPSBfY2hpbGQud3JhcHBlclN0eWxlIHx8IHt9O1xuICAgICAgdmFyIGNoaWxkV3JhcCA9IG1ha2VTcGFuJDIoY2xhc3NlcywgW3BzdHJ1dCwgX2VsZW1dLCB1bmRlZmluZWQsIHN0eWxlKTtcbiAgICAgIGNoaWxkV3JhcC5zdHlsZS50b3AgPSBtYWtlRW0oLXBzdHJ1dFNpemUgLSBjdXJyUG9zIC0gX2VsZW0uZGVwdGgpO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdFwiXSwgcmVhbENoaWxkcmVuKTtcbiAgdmxpc3Quc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKG1heFBvcyk7IC8vIEEgc2Vjb25kIHJvdyBpcyB1c2VkIGlmIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIHZsaXN0J3MgZGVwdGguXG5cbiAgdmFyIHJvd3M7XG5cbiAgaWYgKG1pblBvcyA8IDApIHtcbiAgICAvLyBXZSB3aWxsIGRlZmluZSBkZXB0aCBpbiBhbiBlbXB0eSBzcGFuIHdpdGggZGlzcGxheTogdGFibGUtY2VsbC5cbiAgICAvLyBJdCBzaG91bGQgcmVuZGVyIHdpdGggdGhlIGhlaWdodCB0aGF0IHdlIGRlZmluZS4gQnV0IENocm9tZSwgaW5cbiAgICAvLyBjb250ZW50ZWRpdGFibGUgbW9kZSBvbmx5LCB0cmVhdHMgdGhhdCBzcGFuIGFzIGlmIGl0IGNvbnRhaW5zIHNvbWVcbiAgICAvLyB0ZXh0IGNvbnRlbnQuIEFuZCB0aGF0IG1pbi1oZWlnaHQgb3Zlci1yaWRlcyBvdXIgZGVzaXJlZCBoZWlnaHQuXG4gICAgLy8gU28gd2UgcHV0IGFub3RoZXIgZW1wdHkgc3BhbiBpbnNpZGUgdGhlIGRlcHRoIHN0cnV0IHNwYW4uXG4gICAgdmFyIGVtcHR5U3BhbiA9IG1ha2VTcGFuJDIoW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IG1ha2VTcGFuJDIoW1widmxpc3RcIl0sIFtlbXB0eVNwYW5dKTtcbiAgICBkZXB0aFN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbSgtbWluUG9zKTsgLy8gU2FmYXJpIHdhbnRzIHRoZSBmaXJzdCByb3cgdG8gaGF2ZSBpbmxpbmUgY29udGVudDsgb3RoZXJ3aXNlIGl0XG4gICAgLy8gcHV0cyB0aGUgYm90dG9tIG9mIHRoZSAqc2Vjb25kKiByb3cgb24gdGhlIGJhc2VsaW5lLlxuXG4gICAgdmFyIHRvcFN0cnV0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdC1zXCJdLCBbbmV3IFN5bWJvbE5vZGUoXCJcXHUyMDBiXCIpXSk7XG4gICAgcm93cyA9IFttYWtlU3BhbiQyKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgbWFrZVNwYW4kMihbXCJ2bGlzdC1yXCJdLCBbZGVwdGhTdHJ1dF0pXTtcbiAgfSBlbHNlIHtcbiAgICByb3dzID0gW21ha2VTcGFuJDIoW1widmxpc3QtclwiXSwgW3ZsaXN0XSldO1xuICB9XG5cbiAgdmFyIHZ0YWJsZSA9IG1ha2VTcGFuJDIoW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgbWFrZUdsdWUgPSAobWVhc3VyZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgLy8gTWFrZSBhbiBlbXB0eSBzcGFuIGZvciB0aGUgc3BhY2VcbiAgdmFyIHJ1bGUgPSBtYWtlU3BhbiQyKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IGNhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNpemUpO1xuICByZXR1cm4gcnVsZTtcbn07IC8vIFRha2VzIGZvbnQgb3B0aW9ucywgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZvbnRMb29rdXAgbmFtZVxuXG5cbnZhciByZXRyaWV2ZVRleHRGb250TmFtZSA9IGZ1bmN0aW9uIHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnRGYW1pbHksIGZvbnRXZWlnaHQsIGZvbnRTaGFwZSkge1xuICB2YXIgYmFzZUZvbnROYW1lID0gXCJcIjtcblxuICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHtcbiAgICBjYXNlIFwiYW1zcm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiQU1TXCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ0ZXh0cm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiTWFpblwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHNmXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlNhbnNTZXJpZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHR0XCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlR5cGV3cml0ZXJcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJhc2VGb250TmFtZSA9IGZvbnRGYW1pbHk7XG4gICAgLy8gdXNlIGZvbnRzIGFkZGVkIGJ5IGEgcGx1Z2luXG4gIH1cblxuICB2YXIgZm9udFN0eWxlc05hbWU7XG5cbiAgaWYgKGZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIgJiYgZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRJdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkl0YWxpY1wiO1xuICB9IGVsc2Uge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJSZWd1bGFyXCI7XG4gIH1cblxuICByZXR1cm4gYmFzZUZvbnROYW1lICsgXCItXCIgKyBmb250U3R5bGVzTmFtZTtcbn07XG4vKipcbiAqIE1hcHMgVGVYIGZvbnQgY29tbWFuZHMgdG8gb2JqZWN0cyBjb250YWluaW5nOlxuICogLSB2YXJpYW50OiBzdHJpbmcgdXNlZCBmb3IgXCJtYXRodmFyaWFudFwiIGF0dHJpYnV0ZSBpbiBidWlsZE1hdGhNTC5qc1xuICogLSBmb250TmFtZTogdGhlIFwic3R5bGVcIiBwYXJhbWV0ZXIgdG8gZm9udE1ldHJpY3MuZ2V0Q2hhcmFjdGVyTWV0cmljc1xuICovXG4vLyBBIG1hcCBiZXR3ZWVuIHRleCBmb250IGNvbW1hbmRzIGFuIE1hdGhNTCBtYXRodmFyaWFudCBhdHRyaWJ1dGUgdmFsdWVzXG5cblxudmFyIGZvbnRNYXAgPSB7XG4gIC8vIHN0eWxlc1xuICBcIm1hdGhiZlwiOiB7XG4gICAgdmFyaWFudDogXCJib2xkXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCJcbiAgfSxcbiAgXCJtYXRocm1cIjoge1xuICAgIHZhcmlhbnQ6IFwibm9ybWFsXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1SZWd1bGFyXCJcbiAgfSxcbiAgXCJ0ZXh0aXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICBcIm1hdGhpdFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYWluLUl0YWxpY1wiXG4gIH0sXG4gIFwibWF0aG5vcm1hbFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiXG4gIH0sXG4gIC8vIFwiYm9sZHN5bWJvbFwiIGlzIG1pc3NpbmcgYmVjYXVzZSB0aGV5IHJlcXVpcmUgdGhlIHVzZSBvZiBtdWx0aXBsZSBmb250czpcbiAgLy8gTWF0aC1Cb2xkSXRhbGljIGFuZCBNYWluLUJvbGQuICBUaGlzIGlzIGhhbmRsZWQgYnkgYSBzcGVjaWFsIGNhc2UgaW5cbiAgLy8gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYm9sZHN5bWJvbC5cbiAgLy8gZmFtaWxpZXNcbiAgXCJtYXRoYmJcIjoge1xuICAgIHZhcmlhbnQ6IFwiZG91YmxlLXN0cnVja1wiLFxuICAgIGZvbnROYW1lOiBcIkFNUy1SZWd1bGFyXCJcbiAgfSxcbiAgXCJtYXRoY2FsXCI6IHtcbiAgICB2YXJpYW50OiBcInNjcmlwdFwiLFxuICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhmcmFrXCI6IHtcbiAgICB2YXJpYW50OiBcImZyYWt0dXJcIixcbiAgICBmb250TmFtZTogXCJGcmFrdHVyLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzY3JcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiU2NyaXB0LVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzZlwiOiB7XG4gICAgdmFyaWFudDogXCJzYW5zLXNlcmlmXCIsXG4gICAgZm9udE5hbWU6IFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGh0dFwiOiB7XG4gICAgdmFyaWFudDogXCJtb25vc3BhY2VcIixcbiAgICBmb250TmFtZTogXCJUeXBld3JpdGVyLVJlZ3VsYXJcIlxuICB9XG59O1xudmFyIHN2Z0RhdGEgPSB7XG4gIC8vICAgcGF0aCwgd2lkdGgsIGhlaWdodFxuICB2ZWM6IFtcInZlY1wiLCAwLjQ3MSwgMC43MTRdLFxuICAvLyB2YWx1ZXMgZnJvbSB0aGUgZm9udCBnbHlwaFxuICBvaWludFNpemUxOiBbXCJvaWludFNpemUxXCIsIDAuOTU3LCAwLjQ5OV0sXG4gIC8vIG92YWwgdG8gb3ZlcmxheSB0aGUgaW50ZWdyYW5kXG4gIG9paW50U2l6ZTI6IFtcIm9paW50U2l6ZTJcIiwgMS40NzIsIDAuNjU5XSxcbiAgb2lpaW50U2l6ZTE6IFtcIm9paWludFNpemUxXCIsIDEuMzA0LCAwLjQ5OV0sXG4gIG9paWludFNpemUyOiBbXCJvaWlpbnRTaXplMlwiLCAxLjk4LCAwLjY1OV1cbn07XG5cbnZhciBzdGF0aWNTdmcgPSBmdW5jdGlvbiBzdGF0aWNTdmcodmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICB2YXIgW3BhdGhOYW1lLCB3aWR0aCwgaGVpZ2h0XSA9IHN2Z0RhdGFbdmFsdWVdO1xuICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiBtYWtlRW0od2lkdGgpLFxuICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgIC8vIE92ZXJyaWRlIENTUyBydWxlIGAua2F0ZXggc3ZnIHsgd2lkdGg6IDEwMCUgfWBcbiAgICBcInN0eWxlXCI6IFwid2lkdGg6XCIgKyBtYWtlRW0od2lkdGgpLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IG1ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgYnVpbGRDb21tb24gPSB7XG4gIGZvbnRNYXAsXG4gIG1ha2VTeW1ib2wsXG4gIG1hdGhzeW0sXG4gIG1ha2VTcGFuOiBtYWtlU3BhbiQyLFxuICBtYWtlU3ZnU3BhbixcbiAgbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQsXG4gIHdyYXBGcmFnbWVudCxcbiAgbWFrZVZMaXN0LFxuICBtYWtlT3JkLFxuICBtYWtlR2x1ZSxcbiAgc3RhdGljU3ZnLFxuICBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnNcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHNwYWNlcyBiZXR3ZWVuIGRpZmZlcmVudCBjbGFzc2VzIG9mIGF0b21zLlxuICovXG52YXIgdGhpbnNwYWNlID0ge1xuICBudW1iZXI6IDMsXG4gIHVuaXQ6IFwibXVcIlxufTtcbnZhciBtZWRpdW1zcGFjZSA9IHtcbiAgbnVtYmVyOiA0LFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgdGhpY2tzcGFjZSA9IHtcbiAgbnVtYmVyOiA1LFxuICB1bml0OiBcIm11XCJcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuXG4vLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIGRpc3BsYXkgYW5kIHRleHQgc3R5bGVzXG52YXIgc3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1iaW46IHtcbiAgICBtb3JkOiBtZWRpdW1zcGFjZSxcbiAgICBtb3A6IG1lZGl1bXNwYWNlLFxuICAgIG1vcGVuOiBtZWRpdW1zcGFjZSxcbiAgICBtaW5uZXI6IG1lZGl1bXNwYWNlXG4gIH0sXG4gIG1yZWw6IHtcbiAgICBtb3JkOiB0aGlja3NwYWNlLFxuICAgIG1vcDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaWNrc3BhY2VcbiAgfSxcbiAgbW9wZW46IHt9LFxuICBtY2xvc2U6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbWNsb3NlOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbWlubmVyOiB7XG4gICAgbW9yZDogdGhpbnNwYWNlLFxuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1iaW46IG1lZGl1bXNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaW5zcGFjZSxcbiAgICBtcHVuY3Q6IHRoaW5zcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9XG59OyAvLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIHNjcmlwdCBhbmQgc2NyaXB0c2NyaXB0IHN0eWxlc1xuXG52YXIgdGlnaHRTcGFjaW5ncyA9IHtcbiAgbW9yZDoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7fSxcbiAgbXJlbDoge30sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbXB1bmN0OiB7fSxcbiAgbWlubmVyOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfVxufTtcblxuLyoqIENvbnRleHQgcHJvdmlkZWQgdG8gZnVuY3Rpb24gaGFuZGxlcnMgZm9yIGVycm9yIG1lc3NhZ2VzLiAqL1xuLy8gTm90ZTogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHJldHVybiB0eXBlIHVuaW9uIHdpbGwgY2F1c2UgYSBmbG93IGVycm9yLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zNjYzLlxuLy8gTW9yZSBnZW5lcmFsIHZlcnNpb24gb2YgYEh0bWxCdWlsZGVyYCBmb3Igbm9kZXMgKGUuZy4gXFxzdW0sIGFjY2VudCB0eXBlcylcbi8vIHdob3NlIHByZXNlbmNlIGltcGFjdHMgc3VwZXIvc3Vic2NyaXB0aW5nLiBJbiB0aGlzIGNhc2UsIFBhcnNlTm9kZTxcInN1cHN1YlwiPlxuLy8gZGVsZWdhdGVzIGl0cyBIVE1MIGJ1aWxkaW5nIHRvIHRoZSBIdG1sQnVpbGRlciBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIG5vZGVzLlxuXG4vKipcbiAqIEZpbmFsIGZ1bmN0aW9uIHNwZWMgZm9yIHVzZSBhdCBwYXJzZSB0aW1lLlxuICogVGhpcyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIGBGdW5jdGlvblByb3BTcGVjYCwgZXhjZXB0IGl0XG4gKiAxLiBpbmNsdWRlcyB0aGUgZnVuY3Rpb24gaGFuZGxlciwgYW5kXG4gKiAyLiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGV4Y2VwdCBhcmdUeXBlcy5cbiAqIEl0IGlzIGdlbmVyYXRlZCBieSBgZGVmaW5lRnVuY3Rpb24oKWAgYmVsb3cuXG4gKi9cblxuLyoqXG4gKiBBbGwgcmVnaXN0ZXJlZCBmdW5jdGlvbnMuXG4gKiBgZnVuY3Rpb25zLmpzYCBqdXN0IGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeS5cbiAqL1xudmFyIF9mdW5jdGlvbnMgPSB7fTtcbi8qKlxuICogQWxsIEhUTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX2h0bWxHcm91cEJ1aWxkZXJzID0ge307XG4vKipcbiAqIEFsbCBNYXRoTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX21hdGhtbEdyb3VwQnVpbGRlcnMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHtcbiAgICB0eXBlLFxuICAgIG5hbWVzLFxuICAgIHByb3BzLFxuICAgIGhhbmRsZXIsXG4gICAgaHRtbEJ1aWxkZXIsXG4gICAgbWF0aG1sQnVpbGRlclxuICB9ID0gX3JlZjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGZ1bmN0aW9uc1xuICB2YXIgZGF0YSA9IHtcbiAgICB0eXBlLFxuICAgIG51bUFyZ3M6IHByb3BzLm51bUFyZ3MsXG4gICAgYXJnVHlwZXM6IHByb3BzLmFyZ1R5cGVzLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiAhIXByb3BzLmFsbG93ZWRJbkFyZ3VtZW50LFxuICAgIGFsbG93ZWRJblRleHQ6ICEhcHJvcHMuYWxsb3dlZEluVGV4dCxcbiAgICBhbGxvd2VkSW5NYXRoOiBwcm9wcy5hbGxvd2VkSW5NYXRoID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMuYWxsb3dlZEluTWF0aCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IHByb3BzLm51bU9wdGlvbmFsQXJncyB8fCAwLFxuICAgIGluZml4OiAhIXByb3BzLmluZml4LFxuICAgIHByaW1pdGl2ZTogISFwcm9wcy5wcmltaXRpdmUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBodG1sQnVpbGRlcixcbiAgICBtYXRobWxCdWlsZGVyXG4gIH0gPSBfcmVmMjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcblxuICAgIGhhbmRsZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBuZXZlciBiZSBjYWxsZWQuJyk7XG4gICAgfSxcblxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59XG52YXIgbm9ybWFsaXplQXJndW1lbnQgPSBmdW5jdGlvbiBub3JtYWxpemVBcmd1bWVudChhcmcpIHtcbiAgcmV0dXJuIGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIgJiYgYXJnLmJvZHkubGVuZ3RoID09PSAxID8gYXJnLmJvZHlbMF0gOiBhcmc7XG59OyAvLyBTaW5jZSB0aGUgY29ycmVzcG9uZGluZyBidWlsZEhUTUwvYnVpbGRNYXRoTUwgZnVuY3Rpb24gZXhwZWN0cyBhXG4vLyBsaXN0IG9mIGVsZW1lbnRzLCB3ZSBub3JtYWxpemUgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBhcmd1bWVudHNcblxudmFyIG9yZGFyZ3VtZW50ID0gZnVuY3Rpb24gb3JkYXJndW1lbnQoYXJnKSB7XG4gIHJldHVybiBhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiID8gYXJnLmJvZHkgOiBbYXJnXTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cbnZhciBtYWtlU3BhbiQxID0gYnVpbGRDb21tb24ubWFrZVNwYW47IC8vIEJpbmFyeSBhdG9tcyAoZmlyc3QgY2xhc3MgYG1iaW5gKSBjaGFuZ2UgaW50byBvcmRpbmFyeSBhdG9tcyAoYG1vcmRgKVxuLy8gZGVwZW5kaW5nIG9uIHRoZWlyIHN1cnJvdW5kaW5ncy4gU2VlIFRlWGJvb2sgcGcuIDQ0Mi00NDYsIFJ1bGVzIDUgYW5kIDYsXG4vLyBhbmQgdGhlIHRleHQgYmVmb3JlIFJ1bGUgMTkuXG5cbnZhciBiaW5MZWZ0Q2FuY2VsbGVyID0gW1wibGVmdG1vc3RcIiwgXCJtYmluXCIsIFwibW9wZW5cIiwgXCJtcmVsXCIsIFwibW9wXCIsIFwibXB1bmN0XCJdO1xudmFyIGJpblJpZ2h0Q2FuY2VsbGVyID0gW1wicmlnaHRtb3N0XCIsIFwibXJlbFwiLCBcIm1jbG9zZVwiLCBcIm1wdW5jdFwiXTtcbnZhciBzdHlsZU1hcCQxID0ge1xuICBcImRpc3BsYXlcIjogU3R5bGUkMS5ESVNQTEFZLFxuICBcInRleHRcIjogU3R5bGUkMS5URVhULFxuICBcInNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn07XG52YXIgRG9tRW51bSA9IHtcbiAgbW9yZDogXCJtb3JkXCIsXG4gIG1vcDogXCJtb3BcIixcbiAgbWJpbjogXCJtYmluXCIsXG4gIG1yZWw6IFwibXJlbFwiLFxuICBtb3BlbjogXCJtb3BlblwiLFxuICBtY2xvc2U6IFwibWNsb3NlXCIsXG4gIG1wdW5jdDogXCJtcHVuY3RcIixcbiAgbWlubmVyOiBcIm1pbm5lclwiXG59O1xuXG4vKipcbiAqIFRha2UgYSBsaXN0IG9mIG5vZGVzLCBidWlsZCB0aGVtIGluIG9yZGVyLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUgYnVpbHRcbiAqIG5vZGVzLiBkb2N1bWVudEZyYWdtZW50cyBhcmUgZmxhdHRlbmVkIGludG8gdGhlaXIgY29udGVudHMsIHNvIHRoZVxuICogcmV0dXJuZWQgbGlzdCBjb250YWlucyBubyBmcmFnbWVudHMuIGBpc1JlYWxHcm91cGAgaXMgdHJ1ZSBpZiBgZXhwcmVzc2lvbmBcbiAqIGlzIGEgcmVhbCBncm91cCAobm8gYXRvbXMgd2lsbCBiZSBhZGRlZCBvbiBlaXRoZXIgc2lkZSksIGFzIG9wcG9zZWQgdG9cbiAqIGEgcGFydGlhbCBncm91cCAoZS5nLiBvbmUgY3JlYXRlZCBieSBcXGNvbG9yKS4gYHN1cnJvdW5kaW5nYCBpcyBhbiBhcnJheVxuICogY29uc2lzdGluZyB0eXBlIG9mIG5vZGVzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGVmdCBhbmQgcmlnaHQuXG4gKi9cbnZhciBidWlsZEV4cHJlc3Npb24kMSA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc1JlYWxHcm91cCwgc3Vycm91bmRpbmcpIHtcbiAgaWYgKHN1cnJvdW5kaW5nID09PSB2b2lkIDApIHtcbiAgICBzdXJyb3VuZGluZyA9IFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIC8vIFBhcnNlIGV4cHJlc3Npb25zIGludG8gYGdyb3Vwc2AuXG4gIHZhciBncm91cHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb3V0cHV0ID0gYnVpbGRHcm91cCQxKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IG91dHB1dC5jaGlsZHJlbjtcbiAgICAgIGdyb3Vwcy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzLnB1c2gob3V0cHV0KTtcbiAgICB9XG4gIH0gLy8gQ29tYmluZSBjb25zZWN1dGl2ZSBkb21UcmVlLnN5bWJvbE5vZGVzIGludG8gYSBzaW5nbGUgc3ltYm9sTm9kZS5cblxuXG4gIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhncm91cHMpOyAvLyBJZiBgZXhwcmVzc2lvbmAgaXMgYSBwYXJ0aWFsIGdyb3VwLCBsZXQgdGhlIHBhcmVudCBoYW5kbGUgc3BhY2luZ3NcbiAgLy8gdG8gYXZvaWQgcHJvY2Vzc2luZyBncm91cHMgbXVsdGlwbGUgdGltZXMuXG5cbiAgaWYgKCFpc1JlYWxHcm91cCkge1xuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICB2YXIgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBub2RlID0gZXhwcmVzc2lvblswXTtcblxuICAgIGlmIChub2RlLnR5cGUgPT09IFwic2l6aW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKG5vZGUuc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3R5bGluZ1wiKSB7XG4gICAgICBnbHVlT3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGVNYXAkMVtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzBdIHx8IFwibGVmdG1vc3RcIl0sIFtdLCBvcHRpb25zKTtcbiAgdmFyIGR1bW15TmV4dCA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzFdIHx8IFwicmlnaHRtb3N0XCJdLCBbXSwgb3B0aW9ucyk7IC8vIFRPRE86IFRoZXNlIGNvZGUgYXNzdW1lcyB0aGF0IGEgbm9kZSdzIG1hdGggY2xhc3MgaXMgdGhlIGZpcnN0IGVsZW1lbnRcbiAgLy8gb2YgaXRzIGBjbGFzc2VzYCBhcnJheS4gQSBsYXRlciBjbGVhbnVwIHNob3VsZCBlbnN1cmUgdGhpcywgZm9yXG4gIC8vIGluc3RhbmNlIGJ5IGNoYW5naW5nIHRoZSBzaWduYXR1cmUgb2YgYG1ha2VTcGFuYC5cbiAgLy8gQmVmb3JlIGRldGVybWluaW5nIHdoYXQgc3BhY2VzIHRvIGluc2VydCwgcGVyZm9ybSBiaW4gY2FuY2VsbGF0aW9uLlxuICAvLyBCaW5hcnkgb3BlcmF0b3JzIGNoYW5nZSB0byBvcmRpbmFyeSBzeW1ib2xzIGluIHNvbWUgY29udGV4dHMuXG5cbiAgdmFyIGlzUm9vdCA9IGlzUmVhbEdyb3VwID09PSBcInJvb3RcIjtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgKG5vZGUsIHByZXYpID0+IHtcbiAgICB2YXIgcHJldlR5cGUgPSBwcmV2LmNsYXNzZXNbMF07XG4gICAgdmFyIHR5cGUgPSBub2RlLmNsYXNzZXNbMF07XG5cbiAgICBpZiAocHJldlR5cGUgPT09IFwibWJpblwiICYmIHV0aWxzLmNvbnRhaW5zKGJpblJpZ2h0Q2FuY2VsbGVyLCB0eXBlKSkge1xuICAgICAgcHJldi5jbGFzc2VzWzBdID0gXCJtb3JkXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5MZWZ0Q2FuY2VsbGVyLCBwcmV2VHlwZSkpIHtcbiAgICAgIG5vZGUuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQsIGlzUm9vdCk7XG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIChub2RlLCBwcmV2KSA9PiB7XG4gICAgdmFyIHByZXZUeXBlID0gZ2V0VHlwZU9mRG9tVHJlZShwcmV2KTtcbiAgICB2YXIgdHlwZSA9IGdldFR5cGVPZkRvbVRyZWUobm9kZSk7IC8vICdtdGlnaHQnIGluZGljYXRlcyB0aGF0IHRoZSBub2RlIGlzIHNjcmlwdCBvciBzY3JpcHRzY3JpcHQgc3R5bGUuXG5cbiAgICB2YXIgc3BhY2UgPSBwcmV2VHlwZSAmJiB0eXBlID8gbm9kZS5oYXNDbGFzcyhcIm10aWdodFwiKSA/IHRpZ2h0U3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogc3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogbnVsbDtcblxuICAgIGlmIChzcGFjZSkge1xuICAgICAgLy8gSW5zZXJ0IGdsdWUgKHNwYWNpbmcpIGFmdGVyIHRoZSBgcHJldmAuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUdsdWUoc3BhY2UsIGdsdWVPcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0LCBpc1Jvb3QpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCwgaXNSb290KSB7XG4gIGlmIChuZXh0KSB7XG4gICAgLy8gdGVtcG9yYXJpbHkgYXBwZW5kIHRoZSByaWdodCBub2RlLCBpZiBleGlzdHNcbiAgICBub2Rlcy5wdXNoKG5leHQpO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgIHZhciBwYXJ0aWFsR3JvdXAgPSBjaGVja1BhcnRpYWxHcm91cChub2RlKTtcblxuICAgIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICAgIC8vIFJlY3Vyc2l2ZSBERlNcbiAgICAgIC8vICRGbG93Rml4TWU6IG1ha2Ugbm9kZXMgYSAkUmVhZE9ubHlBcnJheSBieSByZXR1cm5pbmcgYSBuZXcgYXJyYXlcbiAgICAgIHRyYXZlcnNlTm9uU3BhY2VOb2RlcyhwYXJ0aWFsR3JvdXAuY2hpbGRyZW4sIGNhbGxiYWNrLCBwcmV2LCBudWxsLCBpc1Jvb3QpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICB2YXIgbm9uc3BhY2UgPSAhbm9kZS5oYXNDbGFzcyhcIm1zcGFjZVwiKTtcblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKG5vZGUsIHByZXYubm9kZSk7XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKHByZXYuaW5zZXJ0QWZ0ZXIpIHtcbiAgICAgICAgICBwcmV2Lmluc2VydEFmdGVyKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGF0IGZyb250XG4gICAgICAgICAgbm9kZXMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgcHJldi5ub2RlID0gbm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzUm9vdCAmJiBub2RlLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgcHJldi5ub2RlID0gbWFrZVNwYW4kMShbXCJsZWZ0bW9zdFwiXSk7IC8vIHRyZWF0IGxpa2UgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICB9XG5cbiAgICBwcmV2Lmluc2VydEFmdGVyID0gKGluZGV4ID0+IG4gPT4ge1xuICAgICAgbm9kZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgbik7XG4gICAgICBpKys7XG4gICAgfSkoaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBjaGVja1BhcnRpYWxHcm91cCA9IGZ1bmN0aW9uIGNoZWNrUGFydGlhbEdyb3VwKG5vZGUpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBBbmNob3IgfHwgbm9kZSBpbnN0YW5jZW9mIFNwYW4gJiYgbm9kZS5oYXNDbGFzcyhcImVuY2xvc2luZ1wiKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gY2hlY2tQYXJ0aWFsR3JvdXAobm9kZSk7XG5cbiAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcnRpYWxHcm91cC5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGlmIChzaWRlID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgcmV0dXJuIGdldE91dGVybW9zdE5vZGUoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIFwicmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuWzBdLCBcImxlZnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59OyAvLyBSZXR1cm4gbWF0aCBhdG9tIGNsYXNzIChtY2xhc3MpIG9mIGEgZG9tVHJlZS5cbi8vIElmIGBzaWRlYCBpcyBnaXZlbiwgaXQgd2lsbCBnZXQgdGhlIHR5cGUgb2YgdGhlIG91dGVybW9zdCBub2RlIGF0IGdpdmVuIHNpZGUuXG5cblxudmFyIGdldFR5cGVPZkRvbVRyZWUgPSBmdW5jdGlvbiBnZXRUeXBlT2ZEb21UcmVlKG5vZGUsIHNpZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc2lkZSkge1xuICAgIG5vZGUgPSBnZXRPdXRlcm1vc3ROb2RlKG5vZGUsIHNpZGUpO1xuICB9IC8vIFRoaXMgbWFrZXMgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgYXMgdG8gd2hlcmUgdGhlIHR5cGUgb2YgYXRvbVxuICAvLyBhcHBlYXJzLiAgV2Ugc2hvdWxkIGRvIGEgYmV0dGVyIGpvYiBvZiBlbmZvcmNpbmcgdGhpcy5cblxuXG4gIHJldHVybiBEb21FbnVtW25vZGUuY2xhc3Nlc1swXV0gfHwgbnVsbDtcbn07XG52YXIgbWFrZU51bGxEZWxpbWl0ZXIgPSBmdW5jdGlvbiBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBtb3JlQ2xhc3NlcyA9IFtcIm51bGxkZWxpbWl0ZXJcIl0uY29uY2F0KG9wdGlvbnMuYmFzZVNpemluZ0NsYXNzZXMoKSk7XG4gIHJldHVybiBtYWtlU3BhbiQxKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkR3JvdXAkMSA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIGlmICghZ3JvdXApIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMSgpO1xuICB9XG5cbiAgaWYgKF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IG1ha2VTcGFuJDEob3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSwgW2dyb3VwTm9kZV0sIG9wdGlvbnMpO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBOb2RlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBtYWtlU3BhbiQxKFtcImJhc2VcIl0sIGNoaWxkcmVuLCBvcHRpb25zKTsgLy8gQWRkIHN0cnV0LCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHRvcCBvZiB0aGUgSFRNTCBlbGVtZW50IGZhbGxzIGF0XG4gIC8vIHRoZSBoZWlnaHQgb2YgdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgYm90dG9tIG9mIHRoZSBIVE1MIGVsZW1lbnRcbiAgLy8gZmFsbHMgYXQgdGhlIGRlcHRoIG9mIHRoZSBleHByZXNzaW9uLlxuXG4gIHZhciBzdHJ1dCA9IG1ha2VTcGFuJDEoW1wic3RydXRcIl0pO1xuICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoKTtcblxuICBpZiAoYm9keS5kZXB0aCkge1xuICAgIHN0cnV0LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSBtYWtlRW0oLWJvZHkuZGVwdGgpO1xuICB9XG5cbiAgYm9keS5jaGlsZHJlbi51bnNoaWZ0KHN0cnV0KTtcbiAgcmV0dXJuIGJvZHk7XG59XG4vKipcbiAqIFRha2UgYW4gZW50aXJlIHBhcnNlIHRyZWUsIGFuZCBidWlsZCBpdCBpbnRvIGFuIGFwcHJvcHJpYXRlIHNldCBvZiBIVE1MXG4gKiBub2Rlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKSB7XG4gIC8vIFN0cmlwIG9mZiBvdXRlciB0YWcgd3JhcHBlciBmb3IgcHJvY2Vzc2luZyBiZWxvdy5cbiAgdmFyIHRhZyA9IG51bGw7XG5cbiAgaWYgKHRyZWUubGVuZ3RoID09PSAxICYmIHRyZWVbMF0udHlwZSA9PT0gXCJ0YWdcIikge1xuICAgIHRhZyA9IHRyZWVbMF0udGFnO1xuICAgIHRyZWUgPSB0cmVlWzBdLmJvZHk7XG4gIH0gLy8gQnVpbGQgdGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGluIHRoZSB0cmVlXG5cblxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbiQxKHRyZWUsIG9wdGlvbnMsIFwicm9vdFwiKTtcbiAgdmFyIGVxbk51bTtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDIgJiYgZXhwcmVzc2lvblsxXS5oYXNDbGFzcyhcInRhZ1wiKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggYXV0b21hdGljIGVxdWF0aW9uIG51bWJlcnMsIGUuZy4ge2dhdGhlcn0uXG4gICAgZXFuTnVtID0gZXhwcmVzc2lvbi5wb3AoKTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IFtdOyAvLyBDcmVhdGUgb25lIGJhc2Ugbm9kZSBmb3IgZWFjaCBjaHVuayBiZXR3ZWVuIHBvdGVudGlhbCBsaW5lIGJyZWFrcy5cbiAgLy8gVGhlIFRlWEJvb2sgW3AuMTczXSBzYXlzIFwiQSBmb3JtdWxhIHdpbGwgYmUgYnJva2VuIG9ubHkgYWZ0ZXIgYVxuICAvLyByZWxhdGlvbiBzeW1ib2wgbGlrZSAkPSQgb3IgJDwkIG9yICRcXHJpZ2h0YXJyb3ckLCBvciBhZnRlciBhIGJpbmFyeVxuICAvLyBvcGVyYXRpb24gc3ltYm9sIGxpa2UgJCskIG9yICQtJCBvciAkXFx0aW1lcyQsIHdoZXJlIHRoZSByZWxhdGlvbiBvclxuICAvLyBiaW5hcnkgb3BlcmF0aW9uIGlzIG9uIHRoZSBgYG91dGVyIGxldmVsJycgb2YgdGhlIGZvcm11bGEgKGkuZS4sIG5vdFxuICAvLyBlbmNsb3NlZCBpbiB7Li4ufSBhbmQgbm90IHBhcnQgb2YgYW4gXFxvdmVyIGNvbnN0cnVjdGlvbikuXCJcblxuICB2YXIgcGFydHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgaWYgKGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtYmluXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtcmVsXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJhbGxvd2JyZWFrXCIpKSB7XG4gICAgICAvLyBQdXQgYW55IHBvc3Qtb3BlcmF0b3IgZ2x1ZSBvbiBzYW1lIGxpbmUgYXMgb3BlcmF0b3IuXG4gICAgICAvLyBXYXRjaCBmb3IgXFxub2JyZWFrIGFsb25nIHRoZSB3YXksIGFuZCBzdG9wIGF0IFxcbmV3bGluZS5cbiAgICAgIHZhciBub2JyZWFrID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGggLSAxICYmIGV4cHJlc3Npb25baSArIDFdLmhhc0NsYXNzKFwibXNwYWNlXCIpICYmICFleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibm9icmVha1wiKSkge1xuICAgICAgICAgIG5vYnJlYWsgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIERvbid0IGFsbG93IGJyZWFrIGlmIFxcbm9icmVhayBhbW9uZyB0aGUgcG9zdC1vcGVyYXRvciBnbHVlLlxuXG5cbiAgICAgIGlmICghbm9icmVhaykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gICAgICAgIHBhcnRzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgLy8gV3JpdGUgdGhlIGxpbmUgZXhjZXB0IHRoZSBuZXdsaW5lXG4gICAgICBwYXJ0cy5wb3AoKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfSAvLyBQdXQgdGhlIG5ld2xpbmUgYXQgdGhlIHRvcCBsZXZlbFxuXG5cbiAgICAgIGNoaWxkcmVuLnB1c2goZXhwcmVzc2lvbltpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gIH0gLy8gTm93LCBpZiB0aGVyZSB3YXMgYSB0YWcsIGJ1aWxkIGl0IHRvbyBhbmQgYXBwZW5kIGl0IGFzIGEgZmluYWwgY2hpbGQuXG5cblxuICB2YXIgdGFnQ2hpbGQ7XG5cbiAgaWYgKHRhZykge1xuICAgIHRhZ0NoaWxkID0gYnVpbGRIVE1MVW5icmVha2FibGUoYnVpbGRFeHByZXNzaW9uJDEodGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfSBlbHNlIGlmIChlcW5OdW0pIHtcbiAgICBjaGlsZHJlbi5wdXNoKGVxbk51bSk7XG4gIH1cblxuICB2YXIgaHRtbE5vZGUgPSBtYWtlU3BhbiQxKFtcImthdGV4LWh0bWxcIl0sIGNoaWxkcmVuKTtcbiAgaHRtbE5vZGUuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpOyAvLyBBZGp1c3QgdGhlIHN0cnV0IG9mIHRoZSB0YWcgdG8gYmUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFsbCBjaGlsZHJlblxuICAvLyAodGhlIGhlaWdodCBvZiB0aGUgZW5jbG9zaW5nIGh0bWxOb2RlKSBmb3IgcHJvcGVyIHZlcnRpY2FsIGFsaWdubWVudC5cblxuICBpZiAodGFnQ2hpbGQpIHtcbiAgICB2YXIgc3RydXQgPSB0YWdDaGlsZC5jaGlsZHJlblswXTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGgpO1xuXG4gICAgaWYgKGh0bWxOb2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1odG1sTm9kZS5kZXB0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWxOb2RlO1xufVxuXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgZGF0YSBhYm91dCBNYXRoTUwgbm9kZXMuIFRoaXMgaXMgdGhlIE1hdGhNTCBlcXVpdmFsZW50XG4gKiBvZiB0aGUgdHlwZXMgaW4gZG9tVHJlZS5qcy4gU2luY2UgTWF0aE1MIGhhbmRsZXMgaXRzIG93biByZW5kZXJpbmcsIGFuZFxuICogc2luY2Ugd2UncmUgbWFpbmx5IHVzaW5nIE1hdGhNTCB0byBpbXByb3ZlIGFjY2Vzc2liaWxpdHksIHdlIGRvbid0IG1hbmFnZVxuICogYW55IG9mIHRoZSBzdHlsaW5nIHN0YXRlIHRoYXQgdGhlIHBsYWluIERPTSBub2RlcyBkby5cbiAqXG4gKiBUaGUgYHRvTm9kZWAgYW5kIGB0b01hcmt1cGAgZnVuY3Rpb25zIHdvcmsgc2ltaWxhcmx5IHRvIGhvdyB0aGV5IGRvIGluXG4gKiBkb21UcmVlLmpzLCBjcmVhdGluZyBuYW1lc3BhY2VkIERPTSBub2RlcyBhbmQgSFRNTCB0ZXh0IG1hcmt1cCByZXNwZWN0aXZlbHkuXG4gKi9cbmZ1bmN0aW9uIG5ld0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBnZW5lcmFsIHB1cnBvc2UgTWF0aE1MIG5vZGUgb2YgYW55IHR5cGUuIFRoZVxuICogY29uc3RydWN0b3IgcmVxdWlyZXMgdGhlIHR5cGUgb2Ygbm9kZSB0byBjcmVhdGUgKGZvciBleGFtcGxlLCBgXCJtb1wiYCBvclxuICogYFwibXNwYWNlXCJgLCBjb3JyZXNwb25kaW5nIHRvIGA8bW8+YCBhbmQgYDxtc3BhY2U+YCB0YWdzKS5cbiAqL1xuXG5jbGFzcyBNYXRoTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNoaWxkcmVuLCBjbGFzc2VzKSB7XG4gICAgdGhpcy50eXBlID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLiBNYXRoTUwgZGVwZW5kcyBvbiBhdHRyaWJ1dGVzIHRvIGNvbnZleSBhXG4gICAqIHNlbWFudGljIGNvbnRlbnQsIHNvIHRoaXMgaXMgdXNlZCBoZWF2aWx5LlxuICAgKi9cblxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLlxuICAgKi9cblxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgbm9kZS5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcyA9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIjwvXCIgKyB0aGlzLnR5cGUgKyBcIj5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBzdHJpbmcsIHNpbWlsYXIgdG8gaW5uZXJUZXh0LCBidXQgZXNjYXBlZC5cbiAgICovXG5cblxuICB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnRvVGV4dCgpKS5qb2luKFwiXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBwaWVjZSBvZiB0ZXh0LlxuICovXG5cbmNsYXNzIFRleHROb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dCBub2RlIGludG8gYSBET00gdGV4dCBub2RlLlxuICAgKi9cblxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGVzY2FwZWQgSFRNTCBtYXJrdXBcbiAgICogKHJlcHJlc2VudGluZyB0aGUgdGV4dCBpdHNlbGYpLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB1dGlscy5lc2NhcGUodGhpcy50b1RleHQoKSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIHN0cmluZ1xuICAgKiAocmVwcmVzZW50aW5nIHRoZSB0ZXh0IGl0c2VsZikuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnRleHQ7XG4gIH1cblxufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYWNlLCBidXQgbWF5IHJlbmRlciBhcyA8bXNwYWNlLi4uLz4gb3IgYXMgdGV4dCxcbiAqIGRlcGVuZGluZyBvbiB0aGUgd2lkdGguXG4gKi9cblxuY2xhc3MgU3BhY2VOb2RlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3Iod2lkdGgpIHtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMuY2hhcmFjdGVyID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDsgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELU1hdGhNTDItMjAwMDAzMjgvY2hhcHRlcjYuaHRtbFxuICAgIC8vIGZvciBhIHRhYmxlIG9mIHNwYWNlLWxpa2UgY2hhcmFjdGVycy4gIFdlIHVzZSBVbmljb2RlXG4gICAgLy8gcmVwcmVzZW50YXRpb25zIGluc3RlYWQgb2YgJkxvbmdOYW1lczsgYXMgaXQncyBub3QgY2xlYXIgaG93IHRvXG4gICAgLy8gbWFrZSB0aGUgbGF0dGVyIHZpYSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZS5cblxuICAgIGlmICh3aWR0aCA+PSAwLjA1NTU1ICYmIHdpZHRoIDw9IDAuMDU1NTYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDBhXCI7IC8vICZWZXJ5VGhpblNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gMC4xNjY2ICYmIHdpZHRoIDw9IDAuMTY2Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcIjsgLy8gJlRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjIyMiAmJiB3aWR0aCA8PSAwLjIyMjMpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XCI7IC8vICZNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjc3NyAmJiB3aWR0aCA8PSAwLjI3NzgpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XFx1MjAwYVwiOyAvLyAmVGhpY2tTcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjA1NTU2ICYmIHdpZHRoIDw9IC0wLjA1NTU1KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwYVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjE2NjcgJiYgd2lkdGggPD0gLTAuMTY2Nikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjIyMjMgJiYgd2lkdGggPD0gLTAuMjIyMikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwNWZcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZU1lZGl1bVNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gLTAuMjc3OCAmJiB3aWR0aCA8PSAtMC4yNzc3KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVGhpY2tTcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY2hhcmFjdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsIFwibXNwYWNlXCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0odGhpcy53aWR0aCkpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgbWFrZUVtKHRoaXMud2lkdGgpICsgXCJcXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIgXCI7XG4gICAgfVxuICB9XG5cbn1cblxudmFyIG1hdGhNTFRyZWUgPSB7XG4gIE1hdGhOb2RlLFxuICBUZXh0Tm9kZSxcbiAgU3BhY2VOb2RlLFxuICBuZXdEb2N1bWVudEZyYWdtZW50XG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb252ZXJ0cyBhIHBhcnNlIHRyZWUgaW50byBhIGNvcnJlc3BvbmRpbmcgTWF0aE1MIHRyZWUuIFRoZSBtYWluXG4gKiBlbnRyeSBwb2ludCBpcyB0aGUgYGJ1aWxkTWF0aE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlIGZyb20gdGhlXG4gKiBwYXJzZXIuXG4gKi9cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzeW1ib2xzW21vZGVdW3RleHRdICYmIHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZSAmJiB0ZXh0LmNoYXJDb2RlQXQoMCkgIT09IDB4RDgzNSAmJiAhKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBvcHRpb25zICYmIChvcHRpb25zLmZvbnRGYW1pbHkgJiYgb3B0aW9ucy5mb250RmFtaWx5LnNsaWNlKDQsIDYpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zbGljZSg0LCA2KSA9PT0gXCJ0dFwiKSkpIHtcbiAgICB0ZXh0ID0gc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleHQpO1xufTtcbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4gYXJyYXkgb2Ygbm9kZXMgaW4gYW4gPG1yb3c+IG5vZGUgaWYgbmVlZGVkLCBpLmUuLFxuICogdW5sZXNzIHRoZSBhcnJheSBoYXMgbGVuZ3RoIDEuICBBbHdheXMgcmV0dXJucyBhIHNpbmdsZSBub2RlLlxuICovXG5cbnZhciBtYWtlUm93ID0gZnVuY3Rpb24gbWFrZVJvdyhib2R5KSB7XG4gIGlmIChib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBib2R5WzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgYm9keSk7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIG1hdGggdmFyaWFudCBhcyBhIHN0cmluZyBvciBudWxsIGlmIG5vbmUgaXMgcmVxdWlyZWQuXG4gKi9cblxudmFyIGdldFZhcmlhbnQgPSBmdW5jdGlvbiBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIEhhbmRsZSBcXHRleHQuLi4gZm9udCBzcGVjaWZpZXJzIGFzIGJlc3Qgd2UgY2FuLlxuICAvLyBNYXRoTUwgaGFzIGEgbGltaXRlZCBsaXN0IG9mIGFsbG93YWJsZSBtYXRodmFyaWFudCBzcGVjaWZpZXJzOyBzZWVcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL01hdGhNTDMvY2hhcHRlcjMuaHRtbCNwcmVzbS5jb21tYXR0XG4gIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHNmXCIpIHtcbiAgICBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWJvbGQtaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZi1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgICAgcmV0dXJuIFwiYm9sZC1zYW5zLXNlcmlmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIHJldHVybiBcIml0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfVxuXG4gIHZhciBmb250ID0gb3B0aW9ucy5mb250O1xuXG4gIGlmICghZm9udCB8fCBmb250ID09PSBcIm1hdGhub3JtYWxcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBncm91cC5tb2RlO1xuXG4gIGlmIChmb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJib2xkc3ltYm9sXCIpIHtcbiAgICByZXR1cm4gZ3JvdXAudHlwZSA9PT0gXCJ0ZXh0b3JkXCIgPyBcImJvbGRcIiA6IFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGJiXCIpIHtcbiAgICByZXR1cm4gXCJkb3VibGUtc3RydWNrXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoZnJha1wiKSB7XG4gICAgcmV0dXJuIFwiZnJha3R1clwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHNjclwiIHx8IGZvbnQgPT09IFwibWF0aGNhbFwiKSB7XG4gICAgLy8gTWF0aE1MIG1ha2VzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gc2NyaXB0IGFuZCBjYWxsaWdyYXBoaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlKSB7XG4gICAgdGV4dCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIGdyb3VwLnR5cGUgPT09IFwibW9cIikge1xuICAgICAgLy8gV2hlbiBUZVggd3JpdGVycyB3YW50IHRvIHN1cHByZXNzIHNwYWNpbmcgb24gYW4gb3BlcmF0b3IsXG4gICAgICAvLyB0aGV5IG9mdGVuIHB1dCB0aGUgb3BlcmF0b3IgYnkgaXRzZWxmIGluc2lkZSBicmFjZXMuXG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtncm91cF07XG4gIH1cblxuICB2YXIgZ3JvdXBzID0gW107XG4gIHZhciBsYXN0R3JvdXA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9ncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvbltpXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoX2dyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUgJiYgbGFzdEdyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICBsYXN0R3JvdXAuY2hpbGRyZW4ucHVzaCguLi5fZ3JvdXAuY2hpbGRyZW4pO1xuICAgICAgICBjb250aW51ZTsgLy8gQ29uY2F0ZW5hdGUgYWRqYWNlbnQgPG1uPnNcbiAgICAgIH0gZWxzZSBpZiAoX2dyb3VwLnR5cGUgPT09ICdtbicgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgbGFzdEdyb3VwLmNoaWxkcmVuLnB1c2goLi4uX2dyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgY29udGludWU7IC8vIENvbmNhdGVuYXRlIDxtbj4uLi48L21uPiBmb2xsb3dlZCBieSA8bWk+LjwvbWk+XG4gICAgICB9IGVsc2UgaWYgKF9ncm91cC50eXBlID09PSAnbWknICYmIF9ncm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIGxhc3RHcm91cC5jaGlsZHJlbi5wdXNoKC4uLl9ncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobGFzdEdyb3VwLnR5cGUgPT09ICdtaScgJiYgbGFzdEdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgbGFzdENoaWxkID0gbGFzdEdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQgaW5zdGFuY2VvZiBUZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gJ1xcdTAzMzgnICYmIChfZ3JvdXAudHlwZSA9PT0gJ21vJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21pJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21uJykpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgaWYgKF9jaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIF9jaGlsZC50ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIE92ZXJsYXkgd2l0aCBjb21iaW5pbmcgY2hhcmFjdGVyIGxvbmcgc29saWR1c1xuICAgICAgICAgICAgX2NoaWxkLnRleHQgPSBfY2hpbGQudGV4dC5zbGljZSgwLCAxKSArIFwiXFx1MDMzOFwiICsgX2NoaWxkLnRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICBncm91cHMucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ3JvdXBzLnB1c2goX2dyb3VwKTtcbiAgICBsYXN0R3JvdXAgPSBfZ3JvdXA7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufTtcbi8qKlxuICogRXF1aXZhbGVudCB0byBidWlsZEV4cHJlc3Npb24sIGJ1dCB3cmFwcyB0aGUgZWxlbWVudHMgaW4gYW4gPG1yb3c+XG4gKiBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUuICBSZXR1cm5zIGEgc2luZ2xlIG5vZGUgaW5zdGVhZCBvZiBhbiBhcnJheS5cbiAqL1xuXG52YXIgYnVpbGRFeHByZXNzaW9uUm93ID0gZnVuY3Rpb24gYnVpbGRFeHByZXNzaW9uUm93KGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApIHtcbiAgcmV0dXJuIG1ha2VSb3coYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApKTtcbn07XG4vKipcbiAqIFRha2VzIGEgZ3JvdXAgZnJvbSB0aGUgcGFyc2VyIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZ3JvdXBCdWlsZGVycyBmdW5jdGlvblxuICogb24gaXQgdG8gcHJvZHVjZSBhIE1hdGhNTCBub2RlLlxuICovXG5cbnZhciBidWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucykge1xuICBpZiAoIWdyb3VwKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiKTtcbiAgfVxuXG4gIGlmIChfbWF0aG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBpc0Rpc3BsYXlNb2RlLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBUT0RPOiBNYWtlIGEgcGFzcyB0aHJ1IHRoZSBNYXRoTUwgc2ltaWxhciB0byBidWlsZEhUTUwudHJhdmVyc2VOb25TcGFjZU5vZGVzXG4gIC8vIGFuZCBhZGQgc3BhY2luZyBub2Rlcy4gVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBhZGphY2VudCB0byBtYXRoIG9wZXJhdG9yc1xuICAvLyBsaWtlIFxcc2luIG9yIFxcbGltIG9yIHRvIHN1YnN1cCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbWF0aCBvcGVyYXRvcnMuXG4gIC8vIE1hdGhNTCB0YWtlcyBjYXJlIG9mIHRoZSBvdGhlciBzcGFjaW5nIGlzc3Vlcy5cbiAgLy8gV3JhcCB1cCB0aGUgZXhwcmVzc2lvbiBpbiBhbiBtcm93IHNvIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgc2VtYW50aWNzXG4gIC8vIHRhZyBjb3JyZWN0bHksIHVubGVzcyBpdCdzIGEgc2luZ2xlIDxtcm93PiBvciA8bXRhYmxlPi5cblxuICB2YXIgd3JhcHBlcjtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEgJiYgZXhwcmVzc2lvblswXSBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIHV0aWxzLmNvbnRhaW5zKFtcIm1yb3dcIiwgXCJtdGFibGVcIl0sIGV4cHJlc3Npb25bMF0udHlwZSkpIHtcbiAgICB3cmFwcGVyID0gZXhwcmVzc2lvblswXTtcbiAgfSBlbHNlIHtcbiAgICB3cmFwcGVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIsIGV4cHJlc3Npb24pO1xuICB9IC8vIEJ1aWxkIGEgVGVYIGFubm90YXRpb24gb2YgdGhlIHNvdXJjZVxuXG5cbiAgdmFyIGFubm90YXRpb24gPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcImFubm90YXRpb25cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleEV4cHJlc3Npb24pXSk7XG4gIGFubm90YXRpb24uc2V0QXR0cmlidXRlKFwiZW5jb2RpbmdcIiwgXCJhcHBsaWNhdGlvbi94LXRleFwiKTtcbiAgdmFyIHNlbWFudGljcyA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwic2VtYW50aWNzXCIsIFt3cmFwcGVyLCBhbm5vdGF0aW9uXSk7XG4gIHZhciBtYXRoID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtYXRoXCIsIFtzZW1hbnRpY3NdKTtcbiAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIik7XG5cbiAgaWYgKGlzRGlzcGxheU1vZGUpIHtcbiAgICBtYXRoLnNldEF0dHJpYnV0ZShcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcbiAgfSAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuXG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBmb3JNYXRobWxPbmx5ID8gXCJrYXRleFwiIDogXCJrYXRleC1tYXRobWxcIjsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3Bhbihbd3JhcHBlckNsYXNzXSwgW21hdGhdKTtcbn1cblxudmFyIG9wdGlvbnNGcm9tU2V0dGluZ3MgPSBmdW5jdGlvbiBvcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKSB7XG4gIHJldHVybiBuZXcgT3B0aW9ucyh7XG4gICAgc3R5bGU6IHNldHRpbmdzLmRpc3BsYXlNb2RlID8gU3R5bGUkMS5ESVNQTEFZIDogU3R5bGUkMS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBkaXNwbGF5V3JhcCA9IGZ1bmN0aW9uIGRpc3BsYXlXcmFwKG5vZGUsIHNldHRpbmdzKSB7XG4gIGlmIChzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgIHZhciBjbGFzc2VzID0gW1wia2F0ZXgtZGlzcGxheVwiXTtcblxuICAgIGlmIChzZXR0aW5ncy5sZXFubykge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwibGVxbm9cIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmZsZXFuKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJmbGVxblwiKTtcbiAgICB9XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgW25vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIGJ1aWxkVHJlZSA9IGZ1bmN0aW9uIGJ1aWxkVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIHRydWUpO1xuICB9IGVsc2UgaWYgKHNldHRpbmdzLm91dHB1dCA9PT0gXCJodG1sXCIpIHtcbiAgICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRoTUxOb2RlID0gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIGZhbHNlKTtcblxuICAgIHZhciBfaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG5cbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW21hdGhNTE5vZGUsIF9odG1sTm9kZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbnZhciBidWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gIHZhciBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIHJldHVybiBkaXNwbGF5V3JhcChrYXRleE5vZGUsIHNldHRpbmdzKTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gYnVpbGRNYXRoTUwuanMgYW5kIGJ1aWxkSFRNTC5qc1xuICogZm9yIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgcmVuZGVyZWQgZnJvbSBTVkcgZmlsZXNcbiAqIGFuZCBvdGhlciBDU1MgdHJpY2tlcnkuXG4gKi9cbnZhciBzdHJldGNoeUNvZGVQb2ludCA9IHtcbiAgd2lkZWhhdDogXCJeXCIsXG4gIHdpZGVjaGVjazogXCLLh1wiLFxuICB3aWRldGlsZGU6IFwiflwiLFxuICB1dGlsZGU6IFwiflwiLFxuICBvdmVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgdW5kZXJsZWZ0YXJyb3c6IFwiXFx1MjE5MFwiLFxuICB4bGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgb3ZlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB4cmlnaHRhcnJvdzogXCJcXHUyMTkyXCIsXG4gIHVuZGVyYnJhY2U6IFwiXFx1MjNkZlwiLFxuICBvdmVyYnJhY2U6IFwiXFx1MjNkZVwiLFxuICBvdmVyZ3JvdXA6IFwiXFx1MjNlMFwiLFxuICB1bmRlcmdyb3VwOiBcIlxcdTIzZTFcIixcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBcIlxcdTIxOTRcIixcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHhsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIE92ZXJyaWdodGFycm93OiBcIlxcdTIxZDJcIixcbiAgeFJpZ2h0YXJyb3c6IFwiXFx1MjFkMlwiLFxuICBvdmVybGVmdGhhcnBvb246IFwiXFx1MjFiY1wiLFxuICB4bGVmdGhhcnBvb251cDogXCJcXHUyMWJjXCIsXG4gIG92ZXJyaWdodGhhcnBvb246IFwiXFx1MjFjMFwiLFxuICB4cmlnaHRoYXJwb29udXA6IFwiXFx1MjFjMFwiLFxuICB4TGVmdGFycm93OiBcIlxcdTIxZDBcIixcbiAgeExlZnRyaWdodGFycm93OiBcIlxcdTIxZDRcIixcbiAgeGhvb2tsZWZ0YXJyb3c6IFwiXFx1MjFhOVwiLFxuICB4aG9va3JpZ2h0YXJyb3c6IFwiXFx1MjFhYVwiLFxuICB4bWFwc3RvOiBcIlxcdTIxYTZcIixcbiAgeHJpZ2h0aGFycG9vbmRvd246IFwiXFx1MjFjMVwiLFxuICB4bGVmdGhhcnBvb25kb3duOiBcIlxcdTIxYmRcIixcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBcIlxcdTIxY2NcIixcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBcIlxcdTIxY2JcIixcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFwiXFx1MjE5ZVwiLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFwiXFx1MjFhMFwiLFxuICB4bG9uZ2VxdWFsOiBcIj1cIixcbiAgeHRvZnJvbTogXCJcXHUyMWM0XCIsXG4gIHhyaWdodGxlZnRhcnJvd3M6IFwiXFx1MjFjNFwiLFxuICB4cmlnaHRlcXVpbGlicml1bTogXCJcXHUyMWNjXCIsXG4gIC8vIE5vdCBhIHBlcmZlY3QgbWF0Y2guXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFwiXFx1MjFjYlwiLFxuICAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG4gIFwiXFxcXGNkcmlnaHRhcnJvd1wiOiBcIlxcdTIxOTJcIixcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogXCJcXHUyMTkwXCIsXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFwiPVwiXG59O1xuXG52YXIgbWF0aE1Mbm9kZSA9IGZ1bmN0aW9uIG1hdGhNTG5vZGUobGFiZWwpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShzdHJldGNoeUNvZGVQb2ludFtsYWJlbC5yZXBsYWNlKC9eXFxcXC8sICcnKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgXCJcXFxcY2RyaWdodGFycm93XCI6IFtbXCJyaWdodGFycm93XCJdLCAzLjAsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgLy8gQ0QgbWlud3dpZHRoMi41cGNcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogW1tcImxlZnRhcnJvd1wiXSwgMy4wLCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIE92ZXJyaWdodGFycm93OiBbW1wiZG91YmxlcmlnaHRhcnJvd1wiXSwgMC44ODgsIDU2MCwgXCJ4TWF4WU1pblwiXSxcbiAgeFJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4TGVmdGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNaW5ZTWluXCJdLFxuICBvdmVybGVmdGhhcnBvb246IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29udXA6IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29uZG93bjogW1tcImxlZnRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgb3ZlcnJpZ2h0aGFycG9vbjogW1tcInJpZ2h0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeHJpZ2h0aGFycG9vbnVwOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29uZG93bjogW1tcInJpZ2h0aGFycG9vbmRvd25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhsb25nZXF1YWw6IFtbXCJsb25nZXF1YWxcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFtbXCJsb25nZXF1YWxcIl0sIDMuMCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZGxlZnRhcnJvdzogW1tcInR3b2hlYWRsZWZ0YXJyb3dcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIHh0d29oZWFkcmlnaHRhcnJvdzogW1tcInR3b2hlYWRyaWdodGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNYXhZTWluXCJdLFxuICBvdmVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgb3ZlcmJyYWNlOiBbW1wibGVmdGJyYWNlXCIsIFwibWlkYnJhY2VcIiwgXCJyaWdodGJyYWNlXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVyYnJhY2U6IFtbXCJsZWZ0YnJhY2V1bmRlclwiLCBcIm1pZGJyYWNldW5kZXJcIiwgXCJyaWdodGJyYWNldW5kZXJcIl0sIDEuNiwgNTQ4XSxcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dcIl0sIDAuODg4LCA1MjJdLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAxLjc1LCA1MjJdLFxuICB4TGVmdHJpZ2h0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIiwgXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjc1LCA1NjBdLFxuICB4cmlnaHRsZWZ0aGFycG9vbnM6IFtbXCJsZWZ0aGFycG9vbmRvd25wbHVzXCIsIFwicmlnaHRoYXJwb29ucGx1c1wiXSwgMS43NSwgNzE2XSxcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25wbHVzXCIsIFwicmlnaHRoYXJwb29uZG93bnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhob29rbGVmdGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRob29rXCJdLCAxLjA4LCA1MjJdLFxuICB4aG9va3JpZ2h0YXJyb3c6IFtbXCJsZWZ0aG9va1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuMDgsIDUyMl0sXG4gIG92ZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICB1bmRlcmxpbmVzZWdtZW50OiBbW1wibGVmdGxpbmVzZWdtZW50XCIsIFwicmlnaHRsaW5lc2VnbWVudFwiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJncm91cDogW1tcImxlZnRncm91cFwiLCBcInJpZ2h0Z3JvdXBcIl0sIDAuODg4LCAzNDJdLFxuICB1bmRlcmdyb3VwOiBbW1wibGVmdGdyb3VwdW5kZXJcIiwgXCJyaWdodGdyb3VwdW5kZXJcIl0sIDAuODg4LCAzNDJdLFxuICB4bWFwc3RvOiBbW1wibGVmdG1hcHN0b1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuNSwgNTIyXSxcbiAgeHRvZnJvbTogW1tcImxlZnRUb0Zyb21cIiwgXCJyaWdodFRvRnJvbVwiXSwgMS43NSwgNTI4XSxcbiAgLy8gVGhlIG5leHQgdGhyZWUgYXJyb3dzIGFyZSBmcm9tIHRoZSBtaGNoZW0gcGFja2FnZS5cbiAgLy8gSW4gbWhjaGVtLnN0eSwgbWluLWxlbmd0aCBpcyAyLjBlbS4gQnV0IHRoZXNlIGFycm93cyBtaWdodCBhcHBlYXIgaW4gdGhlXG4gIC8vIGRvY3VtZW50IGFzIFxceHJpZ2h0YXJyb3cgb3IgXFx4cmlnaHRsZWZ0aGFycG9vbnMuIFRob3NlIGhhdmVcbiAgLy8gbWluLWxlbmd0aCA9IDEuNzVlbSwgc28gd2Ugc2V0IG1pbi1sZW5ndGggb24gdGhlc2UgbmV4dCB0aHJlZSB0byBtYXRjaC5cbiAgeHJpZ2h0bGVmdGFycm93czogW1tcImJhcmFib3ZlbGVmdGFycm93XCIsIFwicmlnaHRhcnJvd2Fib3ZlYmFyXCJdLCAxLjc1LCA5MDFdLFxuICB4cmlnaHRlcXVpbGlicml1bTogW1tcImJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vblwiLCBcInJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXJcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFtbXCJzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb25cIiwgXCJzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyXCJdLCAxLjc1LCA3MTZdXG59O1xuXG52YXIgZ3JvdXBMZW5ndGggPSBmdW5jdGlvbiBncm91cExlbmd0aChhcmcpIHtcbiAgaWYgKGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICByZXR1cm4gYXJnLmJvZHkubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG52YXIgc3ZnU3BhbiA9IGZ1bmN0aW9uIHN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICBmdW5jdGlvbiBidWlsZFN2Z1NwYW5fKCkge1xuICAgIHZhciB2aWV3Qm94V2lkdGggPSA0MDAwMDA7IC8vIGRlZmF1bHRcblxuICAgIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIndpZGVoYXRcIiwgXCJ3aWRlY2hlY2tcIiwgXCJ3aWRldGlsZGVcIiwgXCJ1dGlsZGVcIl0sIGxhYmVsKSkge1xuICAgICAgLy8gRWFjaCB0eXBlIGluIHRoZSBgaWZgIHN0YXRlbWVudCBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlIFBhcnNlTm9kZVxuICAgICAgLy8gdHlwZXMgYmVsb3cuIFRoaXMgbmFycm93aW5nIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyBgZ3JwLmJhc2VgLlxuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgdmFyIGdycCA9IGdyb3VwOyAvLyBUaGVyZSBhcmUgZm91ciBTVkcgaW1hZ2VzIGF2YWlsYWJsZSBmb3IgZWFjaCBmdW5jdGlvbi5cbiAgICAgIC8vIENob29zZSBhIHRhbGxlciBpbWFnZSB3aGVuIHRoZXJlIGFyZSBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICAgIHZhciBudW1DaGFycyA9IGdyb3VwTGVuZ3RoKGdycC5iYXNlKTtcbiAgICAgIHZhciB2aWV3Qm94SGVpZ2h0O1xuICAgICAgdmFyIHBhdGhOYW1lO1xuXG4gICAgICB2YXIgX2hlaWdodDtcblxuICAgICAgaWYgKG51bUNoYXJzID4gNSkge1xuICAgICAgICBpZiAobGFiZWwgPT09IFwid2lkZWhhdFwiIHx8IGxhYmVsID09PSBcIndpZGVjaGVja1wiKSB7XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IDQyMDtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSAyMzY0O1xuICAgICAgICAgIF9oZWlnaHQgPSAwLjQyO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBcIjRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gMzEyO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNDA7XG4gICAgICAgICAgX2hlaWdodCA9IDAuMzQ7XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlNFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW1nSW5kZXggPSBbMSwgMSwgMiwgMiwgMywgM11bbnVtQ2hhcnNdO1xuXG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgMTA2MiwgMjM2NCwgMjM2NCwgMjM2NF1baW1nSW5kZXhdO1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSBbMCwgMjM5LCAzMDAsIDM2MCwgNDIwXVtpbWdJbmRleF07XG4gICAgICAgICAgX2hlaWdodCA9IFswLCAwLjI0LCAwLjMsIDAuMywgMC4zNiwgMC40Ml1baW1nSW5kZXhdO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBpbWdJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgNjAwLCAxMDMzLCAyMzM5LCAyMzQwXVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyNjAsIDI4NiwgMzA2LCAzMTJdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjYsIDAuMjg2LCAwLjMsIDAuMzA2LCAwLjM0XVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlXCIgKyBpbWdJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gICAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodCksXG4gICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodCxcbiAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwibm9uZVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhbnMgPSBbXTtcbiAgICAgIHZhciBkYXRhID0ga2F0ZXhJbWFnZXNEYXRhW2xhYmVsXTtcbiAgICAgIHZhciBbcGF0aHMsIF9taW5XaWR0aCwgX3ZpZXdCb3hIZWlnaHRdID0gZGF0YTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgUGF0aE5vZGUocGF0aHNbaV0pO1xuXG4gICAgICAgIHZhciBfc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtfcGF0aF0sIHtcbiAgICAgICAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodDIpLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oX2hlaWdodDIpO1xuICAgICAgICAgIHNwYW5zLnB1c2goX3NwYW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCJdLCBzcGFucywgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgIGhlaWdodDogX2hlaWdodDJcbiAgICAgIH07XG4gICAgfVxuICB9IC8vIGJ1aWxkU3ZnU3Bhbl8oKVxuXG5cbiAgdmFyIHtcbiAgICBzcGFuLFxuICAgIG1pbldpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gYnVpbGRTdmdTcGFuXygpOyAvLyBOb3RlIHRoYXQgd2UgYXJlIHJldHVybmluZyBzcGFuLmRlcHRoID0gMC5cbiAgLy8gQW55IGFkanVzdG1lbnRzIHJlbGF0aXZlIHRvIHRoZSBiYXNlbGluZSBtdXN0IGJlIGRvbmUgaW4gYnVpbGRIVE1MLlxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuXG4gIGlmIChtaW5XaWR0aCA+IDApIHtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gbWFrZUVtKG1pbldpZHRoKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGVuY2xvc2VTcGFuID0gZnVuY3Rpb24gZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB0b3BQYWQsIGJvdHRvbVBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBcXGZib3gsIG9yIFxcYW5nbFxuICB2YXIgaW1nO1xuICB2YXIgdG90YWxIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIHRvcFBhZCArIGJvdHRvbVBhZDtcblxuICBpZiAoL2Zib3h8Y29sb3J8YW5nbC8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHRvdGFsSGVpZ2h0KVxuICAgIH0pO1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaW1nLmhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICBpbWcuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgcmV0dXJuIGltZztcbn07XG5cbnZhciBzdHJldGNoeSA9IHtcbiAgZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGUsXG4gIHN2Z1NwYW5cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBub2RlIGlzIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGl0IHdpdGggc3RyaWN0ZXJcbiAqIHR5cGluZy4gVGhyb3dzIGlmIHRoZSBub2RlJ3MgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZVR5cGUobm9kZSwgdHlwZSkge1xuICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSB0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFwiICsgdHlwZSArIFwiLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9IC8vICRGbG93Rml4TWUsID49MC4xMjVcblxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICB2YXIgdHlwZWROb2RlID0gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKTtcblxuICBpZiAoIXR5cGVkTm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKSB7XG4gIGlmIChub2RlICYmIChub2RlLnR5cGUgPT09IFwiYXRvbVwiIHx8IE5PTl9BVE9NUy5oYXNPd25Qcm9wZXJ0eShub2RlLnR5cGUpKSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seSBcImFjY2VudFwiLCBidXRcbi8vIGFsc28gXCJzdXBzdWJcIiBzaW5jZSBhbiBhY2NlbnQgY2FuIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG52YXIgaHRtbEJ1aWxkZXIkYSA9IChncnAsIG9wdGlvbnMpID0+IHtcbiAgLy8gQWNjZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBydWxlIDEyLlxuICB2YXIgYmFzZTtcbiAgdmFyIGdyb3VwO1xuICB2YXIgc3VwU3ViR3JvdXA7XG5cbiAgaWYgKGdycCAmJiBncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIG91ciBiYXNlIGlzIGEgY2hhcmFjdGVyIGJveCwgYW5kIHdlIGhhdmUgc3VwZXJzY3JpcHRzIGFuZFxuICAgIC8vIHN1YnNjcmlwdHMsIHRoZSBzdXBzdWIgd2lsbCBkZWZlciB0byB1cy4gSW4gcGFydGljdWxhciwgd2Ugd2FudFxuICAgIC8vIHRvIGF0dGFjaCB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHRvIHRoZSBpbm5lciBib2R5IChzb1xuICAgIC8vIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgd29uJ3QgYmVcbiAgICAvLyBhZmZlY3RlZCBieSB0aGUgaGVpZ2h0IG9mIHRoZSBhY2NlbnQpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnlcbiAgICAvLyBzdGlja2luZyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiwgYW5kXG4gICAgLy8gcmVuZGVyaW5nIHRoYXQsIHdoaWxlIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgdGhlIGFjY2VudCBpcy5cbiAgICAvLyBUaGUgcmVhbCBhY2NlbnQgZ3JvdXAgaXMgdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiYWNjZW50XCIpOyAvLyBUaGUgY2hhcmFjdGVyIGJveCBpcyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGdyb3VwXG5cbiAgICBiYXNlID0gZ3JvdXAuYmFzZTsgLy8gU3RpY2sgdGhlIGNoYXJhY3RlciBib3ggaW50byB0aGUgYmFzZSBvZiB0aGUgc3Vwc3ViIGdyb3VwXG5cbiAgICBncnAuYmFzZSA9IGJhc2U7IC8vIFJlcmVuZGVyIHRoZSBzdXBzdWIgZ3JvdXAgd2l0aCBpdHMgbmV3IGJhc2UsIGFuZCBzdG9yZSB0aGF0XG4gICAgLy8gcmVzdWx0LlxuXG4gICAgc3VwU3ViR3JvdXAgPSBhc3NlcnRTcGFuKGJ1aWxkR3JvdXAkMShncnAsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgZ3JwLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRHcm91cCQxKGJhc2UsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBEb2VzIHRoZSBhY2NlbnQgbmVlZCB0byBzaGlmdCBmb3IgdGhlIHNrZXcgb2YgYSBjaGFyYWN0ZXI/XG5cbiAgdmFyIG11c3RTaGlmdCA9IGdyb3VwLmlzU2hpZnR5ICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJhc2UpOyAvLyBDYWxjdWxhdGUgdGhlIHNrZXcgb2YgdGhlIGFjY2VudC4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgbGluZSBcIklmIHRoZVxuICAvLyBudWNsZXVzIGlzIG5vdCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGxldCBzID0gMDsgb3RoZXJ3aXNlIHNldCBzIHRvIHRoZVxuICAvLyBrZXJuIGFtb3VudCBmb3IgdGhlIG51Y2xldXMgZm9sbG93ZWQgYnkgdGhlIFxcc2tld2NoYXIgb2YgaXRzIGZvbnQuXCJcbiAgLy8gTm90ZSB0aGF0IG91ciBza2V3IG1ldHJpY3MgYXJlIGp1c3QgdGhlIGtlcm4gYmV0d2VlbiBlYWNoIGNoYXJhY3RlclxuICAvLyBhbmQgdGhlIHNrZXdjaGFyLlxuXG4gIHZhciBza2V3ID0gMDtcblxuICBpZiAobXVzdFNoaWZ0KSB7XG4gICAgLy8gSWYgdGhlIGJhc2UgaXMgYSBjaGFyYWN0ZXIgYm94LCB0aGVuIHdlIHdhbnQgdGhlIHNrZXcgb2YgdGhlXG4gICAgLy8gaW5uZXJtb3N0IGNoYXJhY3Rlci4gVG8gZG8gdGhhdCwgd2UgZmluZCB0aGUgaW5uZXJtb3N0IGNoYXJhY3RlcjpcbiAgICB2YXIgYmFzZUNoYXIgPSB1dGlscy5nZXRCYXNlRWxlbShiYXNlKTsgLy8gVGhlbiwgd2UgcmVuZGVyIGl0cyBncm91cCB0byBnZXQgdGhlIHN5bWJvbCBpbnNpZGUgaXRcblxuICAgIHZhciBiYXNlR3JvdXAgPSBidWlsZEdyb3VwJDEoYmFzZUNoYXIsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBGaW5hbGx5LCB3ZSBwdWxsIHRoZSBza2V3IG9mZiBvZiB0aGUgc3ltYm9sLlxuXG4gICAgc2tldyA9IGFzc2VydFN5bWJvbERvbU5vZGUoYmFzZUdyb3VwKS5za2V3OyAvLyBOb3RlIHRoYXQgd2Ugbm93IHRocm93IGF3YXkgYmFzZUdyb3VwLCBiZWNhdXNlIHRoZSBsYXllcnMgd2VcbiAgICAvLyByZW1vdmVkIHdpdGggZ2V0QmFzZUVsZW0gbWlnaHQgY29udGFpbiB0aGluZ3MgbGlrZSBcXGNvbG9yIHdoaWNoXG4gICAgLy8gd2UgY2FuJ3QgZ2V0IHJpZCBvZi5cbiAgICAvLyBUT0RPKGVtaWx5KTogRmluZCBhIGJldHRlciB3YXkgdG8gZ2V0IHRoZSBza2V3XG4gIH1cblxuICB2YXIgYWNjZW50QmVsb3cgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcY1wiOyAvLyBjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCB0aGUgYWNjZW50XG5cbiAgdmFyIGNsZWFyYW5jZSA9IGFjY2VudEJlbG93ID8gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoIDogTWF0aC5taW4oYm9keS5oZWlnaHQsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTsgLy8gQnVpbGQgdGhlIGFjY2VudFxuXG4gIHZhciBhY2NlbnRCb2R5O1xuXG4gIGlmICghZ3JvdXAuaXNTdHJldGNoeSkge1xuICAgIHZhciBhY2NlbnQ7XG4gICAgdmFyIHdpZHRoO1xuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx2ZWNcIikge1xuICAgICAgLy8gQmVmb3JlIHZlcnNpb24gMC45LCBcXHZlYyB1c2VkIHRoZSBjb21iaW5pbmcgZm9udCBnbHlwaCBVKzIwRDcuXG4gICAgICAvLyBCdXQgYnJvd3NlcnMsIGVzcGVjaWFsbHkgU2FmYXJpLCBhcmUgbm90IGNvbnNpc3RlbnQgaW4gaG93IHRoZXlcbiAgICAgIC8vIHJlbmRlciBjb21iaW5pbmcgY2hhcmFjdGVycyB3aGVuIG5vdCBwcmVjZWRlZCBieSBhIGNoYXJhY3Rlci5cbiAgICAgIC8vIFNvIG5vdyB3ZSB1c2UgYW4gU1ZHLlxuICAgICAgLy8gSWYgU2FmYXJpIHJlZm9ybXMsIHdlIHNob3VsZCBjb25zaWRlciByZXZlcnRpbmcgdG8gdGhlIGdseXBoLlxuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKFwidmVjXCIsIG9wdGlvbnMpO1xuICAgICAgd2lkdGggPSBidWlsZENvbW1vbi5zdmdEYXRhLnZlY1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24ubWFrZU9yZCh7XG4gICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgIHRleHQ6IGdyb3VwLmxhYmVsXG4gICAgICB9LCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICBhY2NlbnQgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGFjY2VudCk7IC8vIFJlbW92ZSB0aGUgaXRhbGljIGNvcnJlY3Rpb24gb2YgdGhlIGFjY2VudCwgYmVjYXVzZSBpdCBvbmx5IHNlcnZlcyB0b1xuICAgICAgLy8gc2hpZnQgdGhlIGFjY2VudCBvdmVyIHRvIGEgcGxhY2Ugd2UgZG9uJ3Qgd2FudC5cblxuICAgICAgYWNjZW50Lml0YWxpYyA9IDA7XG4gICAgICB3aWR0aCA9IGFjY2VudC53aWR0aDtcblxuICAgICAgaWYgKGFjY2VudEJlbG93KSB7XG4gICAgICAgIGNsZWFyYW5jZSArPSBhY2NlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFjY2VudC1ib2R5XCJdLCBbYWNjZW50XSk7IC8vIFwiRnVsbFwiIGFjY2VudHMgZXhwYW5kIHRoZSB3aWR0aCBvZiB0aGUgcmVzdWx0aW5nIHN5bWJvbCB0byBiZVxuICAgIC8vIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgYWNjZW50LCBhbmQgb3ZlcmxhcCBkaXJlY3RseSBvbnRvIHRoZVxuICAgIC8vIGNoYXJhY3RlciB3aXRob3V0IGFueSB2ZXJ0aWNhbCBvZmZzZXQuXG5cbiAgICB2YXIgYWNjZW50RnVsbCA9IGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiO1xuXG4gICAgaWYgKGFjY2VudEZ1bGwpIHtcbiAgICAgIGFjY2VudEJvZHkuY2xhc3Nlcy5wdXNoKCdhY2NlbnQtZnVsbCcpO1xuICAgICAgY2xlYXJhbmNlID0gYm9keS5oZWlnaHQ7XG4gICAgfSAvLyBTaGlmdCB0aGUgYWNjZW50IG92ZXIgYnkgdGhlIHNrZXcuXG5cblxuICAgIHZhciBsZWZ0ID0gc2tldzsgLy8gQ1NTIGRlZmluZXMgYC5rYXRleCAuYWNjZW50IC5hY2NlbnQtYm9keTpub3QoLmFjY2VudC1mdWxsKSB7IHdpZHRoOiAwIH1gXG4gICAgLy8gc28gdGhhdCB0aGUgYWNjZW50IGRvZXNuJ3QgY29udHJpYnV0ZSB0byB0aGUgYm91bmRpbmcgYm94LlxuICAgIC8vIFdlIG5lZWQgdG8gc2hpZnQgdGhlIGNoYXJhY3RlciBieSBpdHMgd2lkdGggKGVmZmVjdGl2ZWx5IGhhbGZcbiAgICAvLyBpdHMgd2lkdGgpIHRvIGNvbXBlbnNhdGUuXG5cbiAgICBpZiAoIWFjY2VudEZ1bGwpIHtcbiAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkuc3R5bGUubGVmdCA9IG1ha2VFbShsZWZ0KTsgLy8gXFx0ZXh0Y2lyY2xlZCB1c2VzIHRoZSBcXGJpZ2NpcmMgZ2x5cGgsIHNvIGl0IG5lZWRzIHNvbWVcbiAgICAvLyB2ZXJ0aWNhbCBhZGp1c3RtZW50IHRvIG1hdGNoIExhVGVYLlxuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiKSB7XG4gICAgICBhY2NlbnRCb2R5LnN0eWxlLnRvcCA9IFwiLjJlbVwiO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLWNsZWFyYW5jZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdLFxuICAgICAgICB3cmFwcGVyU3R5bGU6IHNrZXcgPiAwID8ge1xuICAgICAgICAgIHdpZHRoOiBcImNhbGMoMTAwJSAtIFwiICsgbWFrZUVtKDIgKiBza2V3KSArIFwiKVwiLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbSgyICogc2tldylcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkOSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGFjY2VudCA9PiBcIlxcXFxcIiArIGFjY2VudCkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGJhc2UgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkYSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ5XG59KTsgLy8gVGV4dC1tb2RlIGFjY2VudHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFwiLFxuICBuYW1lczogW1wiXFxcXCdcIiwgXCJcXFxcYFwiLCBcIlxcXFxeXCIsIFwiXFxcXH5cIiwgXCJcXFxcPVwiLCBcIlxcXFx1XCIsIFwiXFxcXC5cIiwgJ1xcXFxcIicsIFwiXFxcXGNcIiwgXCJcXFxcclwiLCBcIlxcXFxIXCIsIFwiXFxcXHZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWUsXG4gICAgLy8gdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgYXJnVHlwZXM6IFtcInByaW1pdGl2ZVwiXVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgbW9kZSA9IGNvbnRleHQucGFyc2VyLm1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgIGNvbnRleHQucGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRBY2NlbnRzXCIsIFwiTGFUZVgncyBhY2NlbnQgXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiB0ZXh0IG1vZGVcIik7XG4gICAgICBtb2RlID0gXCJ0ZXh0XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgbGFiZWw6IGNvbnRleHQuZnVuY05hbWUsXG4gICAgICBpc1N0cmV0Y2h5OiBmYWxzZSxcbiAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciRhLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDlcbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxlZnRhcnJvd1wiLCBcIlxcXFx1bmRlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcdW5kZXJsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmdyb3VwXCIsIFwiXFxcXHVuZGVybGluZXNlZ21lbnRcIiwgXCJcXFxcdXRpbGRlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBUcmVhdCB1bmRlciBhY2NlbnRzIG11Y2ggbGlrZSB1bmRlcmxpbmVzLlxuICAgIHZhciBpbm5lckdyb3VwID0gYnVpbGRHcm91cCQxKGdyb3VwLmJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGtlcm4gPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdXRpbGRlXCIgPyAwLjEyIDogMDsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl1cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJhY2NlbnR1bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uXG52YXIgcGFkZGVkTm9kZSA9IGdyb3VwID0+IHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgZ3JvdXAgPyBbZ3JvdXBdIDogW10pO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiKzAuNmVtXCIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjAuM2VtXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIFN0cmV0Y2h5IGFycm93cyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50XG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInhBcnJvd1wiLFxuICBuYW1lczogW1wiXFxcXHhsZWZ0YXJyb3dcIiwgXCJcXFxceHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRhcnJvd1wiLCBcIlxcXFx4UmlnaHRhcnJvd1wiLCBcIlxcXFx4bGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRyaWdodGFycm93XCIsIFwiXFxcXHhob29rbGVmdGFycm93XCIsIFwiXFxcXHhob29rcmlnaHRhcnJvd1wiLCBcIlxcXFx4bWFwc3RvXCIsIFwiXFxcXHhyaWdodGhhcnBvb25kb3duXCIsIFwiXFxcXHhyaWdodGhhcnBvb251cFwiLCBcIlxcXFx4bGVmdGhhcnBvb25kb3duXCIsIFwiXFxcXHhsZWZ0aGFycG9vbnVwXCIsIFwiXFxcXHhyaWdodGxlZnRoYXJwb29uc1wiLCBcIlxcXFx4bGVmdHJpZ2h0aGFycG9vbnNcIiwgXCJcXFxceGxvbmdlcXVhbFwiLCBcIlxcXFx4dHdvaGVhZHJpZ2h0YXJyb3dcIiwgXCJcXFxceHR3b2hlYWRsZWZ0YXJyb3dcIiwgXCJcXFxceHRvZnJvbVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSB0byBzdXBwb3J0IHRoZSBtaGNoZW0gZXh0ZW5zaW9uLlxuICAvLyBEaXJlY3QgdXNlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXNjb3VyYWdlZCBhbmQgbWF5IGJyZWFrIHNvbWVkYXkuXG4gIFwiXFxcXHhyaWdodGxlZnRhcnJvd3NcIiwgXCJcXFxceHJpZ2h0ZXF1aWxpYnJpdW1cIiwgXCJcXFxceGxlZnRlcXVpbGlicml1bVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSBvbmx5IHRvIHN1cHBvcnQgdGhlIHtDRH0gZW52aXJvbm1lbnQuXG4gIFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIiwgXCJcXFxcXFxcXGNkbGVmdGFycm93XCIsIFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIC8vIEZsb3cgaXMgdW5hYmxlIHRvIGNvcnJlY3RseSBpbmZlciB0aGUgdHlwZSBvZiBgZ3JvdXBgLCBldmVuIHRob3VnaCBpdCdzXG4gIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwYXNzZWQtaW4gYHR5cGVgIGFib3ZlLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIHZhciBhcnJvd1ByZWZpeCA9IGdyb3VwLmxhYmVsLnNsaWNlKDAsIDIpID09PSBcIlxcXFx4XCIgPyBcInhcIiA6IFwiY2RcIjtcbiAgICB1cHBlckdyb3VwLmNsYXNzZXMucHVzaChhcnJvd1ByZWZpeCArIFwiLWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5iZWxvdywgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgbG93ZXJHcm91cC5jbGFzc2VzLnB1c2goYXJyb3dQcmVmaXggKyBcIi1hcnJvdy1wYWRcIik7XG4gICAgfVxuXG4gICAgdmFyIGFycm93Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBSZSBzaGlmdDogTm90ZSB0aGF0IHN0cmV0Y2h5LnN2Z1NwYW4gcmV0dXJuZWQgYXJyb3dCb2R5LmRlcHRoID0gMC5cbiAgICAvLyBUaGUgcG9pbnQgd2Ugd2FudCBvbiB0aGUgbWF0aCBheGlzIGlzIGF0IDAuNSAqIGFycm93Qm9keS5oZWlnaHQuXG5cbiAgICB2YXIgYXJyb3dTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIDAuNSAqIGFycm93Qm9keS5oZWlnaHQ7IC8vIDIgbXUga2Vybi4gUmVmOiBhbXNtYXRoLmR0eDogIzdcXGlmMCMyXFxlbHNlXFxta2VybiMybXVcXGZpXG5cbiAgICB2YXIgdXBwZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAtIDAuNSAqIGFycm93Qm9keS5oZWlnaHQgLSAwLjExMTsgLy8gMC4xMTEgZW0gPSAyIG11XG5cbiAgICBpZiAodXBwZXJHcm91cC5kZXB0aCA+IDAuMjUgfHwgZ3JvdXAubGFiZWwgPT09IFwiXFxcXHhsZWZ0ZXF1aWxpYnJpdW1cIikge1xuICAgICAgdXBwZXJTaGlmdCAtPSB1cHBlckdyb3VwLmRlcHRoOyAvLyBzaGlmdCB1cCBpZiBkZXB0aCBlbmNyb2FjaGVzXG4gICAgfSAvLyBHZW5lcmF0ZSB0aGUgdmxpc3RcblxuXG4gICAgdmFyIHZsaXN0O1xuXG4gICAgaWYgKGxvd2VyR3JvdXApIHtcbiAgICAgIHZhciBsb3dlclNoaWZ0ID0gLW9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICsgbG93ZXJHcm91cC5oZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0ICsgMC4xMTE7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdXBwZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogdXBwZXJTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYXJyb3dCb2R5LFxuICAgICAgICAgIHNoaWZ0OiBhcnJvd1NoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsb3dlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiBsb3dlclNoaWZ0XG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXJlbFwiLCBcIngtYXJyb3dcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYXJyb3dOb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgYXJyb3dOb2RlLnNldEF0dHJpYnV0ZShcIm1pbnNpemVcIiwgZ3JvdXAubGFiZWwuY2hhckF0KDApID09PSBcInhcIiA/IFwiMS43NWVtXCIgOiBcIjMuMGVtXCIpO1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAgIHZhciB1cHBlck5vZGUgPSBwYWRkZWROb2RlKGJ1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuXG4gICAgICBpZiAoZ3JvdXAuYmVsb3cpIHtcbiAgICAgICAgdmFyIGxvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJvdmVyXCIsIFthcnJvd05vZGUsIGxvd2VyTm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCB1cHBlck5vZGVdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICB2YXIgX2xvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuXG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2Fycm93Tm9kZSwgX2xvd2VyTm9kZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAvLyBQYXJzZXIuanMgdGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50LlxuICAgICAgbm9kZSA9IHBhZGRlZE5vZGUoKTtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vdmVyXCIsIFthcnJvd05vZGUsIG5vZGVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxudmFyIG1ha2VTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW47XG5cbmZ1bmN0aW9uIGh0bWxCdWlsZGVyJDkoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtYWtlU3BhbihbZ3JvdXAubWNsYXNzXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBtYXRobWxCdWlsZGVyJDgoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwLjA1NTZlbVwiOyAvLyAxIG11IGlzIHRoZSBtb3N0IGxpa2VseSBvcHRpb25cblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLndpZHRoID0gXCIrMC4xMTExZW1cIjtcbiAgICB9IC8vIE1hdGhNTCA8bW8+IGRlZmF1bHQgc3BhY2UgaXMgNS8xOCBlbSwgc28gPG1yZWw+IG5lZWRzIG5vIGFjdGlvbi5cbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL01hdGhNTC9FbGVtZW50L21vXG5cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSAvLyBNYXRoIGNsYXNzIGNvbW1hbmRzIGV4Y2VwdCBcXG1hdGhvcFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRob3JkXCIsIFwiXFxcXG1hdGhiaW5cIiwgXCJcXFxcbWF0aHJlbFwiLCBcIlxcXFxtYXRob3BlblwiLCBcIlxcXFxtYXRoY2xvc2VcIiwgXCJcXFxcbWF0aHB1bmN0XCIsIFwiXFxcXG1hdGhpbm5lclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBcIm1cIiArIGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcbnZhciBiaW5yZWxDbGFzcyA9IGFyZyA9PiB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhhcmdzWzBdKSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGFyZ3NbMV0pXG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYmFzZUFyZyA9IGFyZ3NbMV07XG4gICAgdmFyIHNoaWZ0ZWRBcmcgPSBhcmdzWzBdO1xuICAgIHZhciBtY2xhc3M7XG5cbiAgICBpZiAoZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIpIHtcbiAgICAgIC8vIExhVGVYIGFwcGxpZXMgXFxiaW5yZWwgc3BhY2luZyB0byBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuXG4gICAgICBtY2xhc3MgPSBiaW5yZWxDbGFzcyhiYXNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWNsYXNzID0gXCJtcmVsXCI7IC8vIGZvciBcXHN0YWNrcmVsXG4gICAgfVxuXG4gICAgdmFyIGJhc2VPcCA9IHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IGJhc2VBcmcubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIGFsd2F5c0hhbmRsZVN1cFN1YjogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0Jhc2VTaGlmdDogZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChiYXNlQXJnKVxuICAgIH07XG4gICAgdmFyIHN1cHN1YiA9IHtcbiAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICBtb2RlOiBzaGlmdGVkQXJnLm1vZGUsXG4gICAgICBiYXNlOiBiYXNlT3AsXG4gICAgICBzdXA6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gbnVsbCA6IHNoaWZ0ZWRBcmcsXG4gICAgICBzdWI6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gc2hpZnRlZEFyZyA6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3MsXG4gICAgICBib2R5OiBbc3Vwc3ViXSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiB1dGlscy5pc0NoYXJhY3RlckJveChzdXBzdWIpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcblxuLy8gXFxwbWIgaXMgYSBzaW11bGF0aW9uIG9mIGJvbGQgZm9udC5cbi8vIFRoZSB2ZXJzaW9uIG9mIFxccG1iIGluIGFtYnN5LnN0eSB3b3JrcyBieSB0eXBlc2V0dGluZyB0aHJlZSBjb3BpZXNcbi8vIHdpdGggc21hbGwgb2Zmc2V0cy4gV2UgdXNlIENTUyB0ZXh0LXNoYWRvdy5cbi8vIEl0J3MgYSBoYWNrLiBOb3QgYXMgZ29vZCBhcyBhIHJlYWwgYm9sZCBmb250LiBCZXR0ZXIgdGhhbiBub3RoaW5nLlxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInBtYlwiLFxuICBuYW1lczogW1wiXFxcXHBtYlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicG1iXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChhcmdzWzBdKVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKTtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gICAgbm9kZS5zdHlsZS50ZXh0U2hhZG93ID0gXCIwLjAyZW0gMC4wMWVtIDAuMDRweFwiO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIHN0eWxlKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIHN0eWxlKTsgLy8gV3JhcCB3aXRoIGFuIDxtc3R5bGU+IGVsZW1lbnQuXG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwidGV4dC1zaGFkb3c6IDAuMDJlbSAwLjAxZW0gMC4wNHB4XCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY2RBcnJvd0Z1bmN0aW9uTmFtZSA9IHtcbiAgXCI+XCI6IFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIixcbiAgXCI8XCI6IFwiXFxcXFxcXFxjZGxlZnRhcnJvd1wiLFxuICBcIj1cIjogXCJcXFxcXFxcXGNkbG9uZ2VxdWFsXCIsXG4gIFwiQVwiOiBcIlxcXFx1cGFycm93XCIsXG4gIFwiVlwiOiBcIlxcXFxkb3duYXJyb3dcIixcbiAgXCJ8XCI6IFwiXFxcXFZlcnRcIixcbiAgXCIuXCI6IFwibm8gYXJyb3dcIlxufTtcblxudmFyIG5ld0NlbGwgPSAoKSA9PiB7XG4gIC8vIENyZWF0ZSBhbiBlbXB0eSBjZWxsLCB0byBiZSBmaWxsZWQgYmVsb3cgd2l0aCBwYXJzZSBub2Rlcy5cbiAgLy8gVGhlIHBhcnNlVHJlZSBmcm9tIHRoaXMgbW9kdWxlIG11c3QgYmUgY29uc3RydWN0ZWQgbGlrZSB0aGVcbiAgLy8gb25lIGNyZWF0ZWQgYnkgcGFyc2VBcnJheSgpLCBzbyBhbiBlbXB0eSBDRCBjZWxsIG11c3RcbiAgLy8gYmUgYSBQYXJzZU5vZGU8XCJzdHlsaW5nXCI+LiBBbmQgQ0QgaXMgYWx3YXlzIGRpc3BsYXlzdHlsZS5cbiAgLy8gU28gdGhlc2UgdmFsdWVzIGFyZSBmaXhlZCBhbmQgZmxvdyBjYW4gZG8gaW1wbGljaXQgdHlwaW5nLlxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgIGJvZHk6IFtdLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIHN0eWxlOiBcImRpc3BsYXlcIlxuICB9O1xufTtcblxudmFyIGlzU3RhcnRPZkFycm93ID0gbm9kZSA9PiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09IFwidGV4dG9yZFwiICYmIG5vZGUudGV4dCA9PT0gXCJAXCI7XG59O1xuXG52YXIgaXNMYWJlbEVuZCA9IChub2RlLCBlbmRDaGFyKSA9PiB7XG4gIHJldHVybiAobm9kZS50eXBlID09PSBcIm1hdGhvcmRcIiB8fCBub2RlLnR5cGUgPT09IFwiYXRvbVwiKSAmJiBub2RlLnRleHQgPT09IGVuZENoYXI7XG59O1xuXG5mdW5jdGlvbiBjZEFycm93KGFycm93Q2hhciwgbGFiZWxzLCBwYXJzZXIpIHtcbiAgLy8gUmV0dXJuIGEgcGFyc2UgdHJlZSBvZiBhbiBhcnJvdyBhbmQgaXRzIGxhYmVscy5cbiAgLy8gVGhpcyBhY3RzIGluIGEgd2F5IHNpbWlsYXIgdG8gYSBtYWNybyBleHBhbnNpb24uXG4gIHZhciBmdW5jTmFtZSA9IGNkQXJyb3dGdW5jdGlvbk5hbWVbYXJyb3dDaGFyXTtcblxuICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RyaWdodGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RsZWZ0YXJyb3dcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbGFiZWxzWzBdXSwgW2xhYmVsc1sxXV0pO1xuXG4gICAgY2FzZSBcIlxcXFx1cGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxkb3duYXJyb3dcIjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGxlZnRMYWJlbCA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkbGVmdFwiLCBbbGFiZWxzWzBdXSwgW10pO1xuICAgICAgICB2YXIgYmFyZUFycm93ID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIHRleHQ6IGZ1bmNOYW1lLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGZhbWlseTogXCJyZWxcIlxuICAgICAgICB9O1xuICAgICAgICB2YXIgc2l6ZWRBcnJvdyA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFtiYXJlQXJyb3ddLCBbXSk7XG4gICAgICAgIHZhciByaWdodExhYmVsID0gcGFyc2VyLmNhbGxGdW5jdGlvbihcIlxcXFxcXFxcY2RyaWdodFwiLCBbbGFiZWxzWzFdXSwgW10pO1xuICAgICAgICB2YXIgYXJyb3dHcm91cCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW2xlZnRMYWJlbCwgc2l6ZWRBcnJvdywgcmlnaHRMYWJlbF1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkcGFyZW50XCIsIFthcnJvd0dyb3VwXSwgW10pO1xuICAgICAgfVxuXG4gICAgY2FzZSBcIlxcXFxcXFxcY2Rsb25nZXF1YWxcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiLCBbXSwgW10pO1xuXG4gICAgY2FzZSBcIlxcXFxWZXJ0XCI6XG4gICAgICB7XG4gICAgICAgIHZhciBhcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxWZXJ0XCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFthcnJvd10sIFtdKTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgdGV4dDogXCIgXCIsXG4gICAgICAgIG1vZGU6IFwibWF0aFwiXG4gICAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ0QocGFyc2VyKSB7XG4gIC8vIEdldCB0aGUgYXJyYXkncyBwYXJzZSBub2RlcyB3aXRoIFxcXFwgdGVtcG9yYXJpbHkgbWFwcGVkIHRvIFxcY3IuXG4gIHZhciBwYXJzZWRSb3dzID0gW107XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3JcIiwgXCJcXFxcXFxcXFxcXFxyZWxheFwiKTtcbiAgcGFyc2VyLmd1bGxldC5iZWdpbkdyb3VwKCk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIC8vIEdldCB0aGUgcGFyc2Ugbm9kZXMgZm9yIHRoZSBuZXh0IHJvdy5cbiAgICBwYXJzZWRSb3dzLnB1c2gocGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcXFxcXFwiKSk7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIiB8fCBuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgaWYgKHBhcnNlZFJvd3NbcGFyc2VkUm93cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFyc2VkUm93cy5wb3AoKTsgLy8gZmluYWwgcm93IGVuZGVkIGluIFxcXFxcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXhwZWN0ZWQgXFxcXFxcXFwgb3IgXFxcXGNyIG9yIFxcXFxlbmRcIiwgcGFyc2VyLm5leHRUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddOyAvLyBMb29wIHRocnUgdGhlIHBhcnNlIG5vZGVzLiBDb2xsZWN0IHRoZW0gaW50byBjZWxscyBhbmQgYXJyb3dzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyc2VkUm93cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIFN0YXJ0IGEgbmV3IHJvdy5cbiAgICB2YXIgcm93Tm9kZXMgPSBwYXJzZWRSb3dzW2ldOyAvLyBDcmVhdGUgdGhlIGZpcnN0IGNlbGwuXG5cbiAgICB2YXIgY2VsbCA9IG5ld0NlbGwoKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93Tm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghaXNTdGFydE9mQXJyb3cocm93Tm9kZXNbal0pKSB7XG4gICAgICAgIC8vIElmIGEgcGFyc2VOb2RlIGlzIG5vdCBhbiBhcnJvdywgaXQgZ29lcyBpbnRvIGEgY2VsbC5cbiAgICAgICAgY2VsbC5ib2R5LnB1c2gocm93Tm9kZXNbal0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUGFyc2Ugbm9kZSBqIGlzIGFuIFwiQFwiLCB0aGUgc3RhcnQgb2YgYW4gYXJyb3cuXG4gICAgICAgIC8vIEJlZm9yZSBzdGFydGluZyBvbiB0aGUgYXJyb3csIHB1c2ggdGhlIGNlbGwgaW50byBgcm93YC5cbiAgICAgICAgcm93LnB1c2goY2VsbCk7IC8vIE5vdyBjb2xsZWN0IHBhcnNlTm9kZXMgaW50byBhbiBhcnJvdy5cbiAgICAgICAgLy8gVGhlIGNoYXJhY3RlciBhZnRlciBcIkBcIiBkZWZpbmVzIHRoZSBhcnJvdyB0eXBlLlxuXG4gICAgICAgIGogKz0gMTtcbiAgICAgICAgdmFyIGFycm93Q2hhciA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKHJvd05vZGVzW2pdKS50ZXh0OyAvLyBDcmVhdGUgdHdvIGVtcHR5IGxhYmVsIG5vZGVzLiBXZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlbS5cblxuICAgICAgICB2YXIgbGFiZWxzID0gbmV3IEFycmF5KDIpO1xuICAgICAgICBsYWJlbHNbMF0gPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGxhYmVsc1sxXSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW11cbiAgICAgICAgfTsgLy8gUHJvY2VzcyB0aGUgYXJyb3cuXG5cbiAgICAgICAgaWYgKFwiPXwuXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIDsgZWxzZSBpZiAoXCI8PkFWXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIHtcbiAgICAgICAgICAvLyBGb3VyIGFycm93cywgYEA+Pj5gLCBgQDw8PGAsIGBAQUFBYCwgYW5kIGBAVlZWYCwgZWFjaCB0YWtlXG4gICAgICAgICAgLy8gdHdvIG9wdGlvbmFsIGxhYmVscy4gRS5nLiB0aGUgcmlnaHQtcG9pbnQgYXJyb3cgc3ludGF4IGlzXG4gICAgICAgICAgLy8gcmVhbGx5OiAgQD57b3B0aW9uYWwgbGFiZWx9PntvcHRpb25hbCBsYWJlbH0+XG4gICAgICAgICAgLy8gQ29sbGVjdCBwYXJzZU5vZGVzIGludG8gbGFiZWxzLlxuICAgICAgICAgIGZvciAodmFyIGxhYmVsTnVtID0gMDsgbGFiZWxOdW0gPCAyOyBsYWJlbE51bSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5MYWJlbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IHJvd05vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIGlmIChpc0xhYmVsRW5kKHJvd05vZGVzW2tdLCBhcnJvd0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgaW5MYWJlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGogPSBrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkFycm93KHJvd05vZGVzW2tdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxhYmVsc1tsYWJlbE51bV0uYm9keS5wdXNoKHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluTGFiZWwpIHtcbiAgICAgICAgICAgICAgLy8gaXNMYWJlbEVuZCBuZXZlciByZXR1cm5lZCBhIHRydWUuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBvbmUgb2YgXFxcIjw+QVY9fC5cXFwiIGFmdGVyIEBcIiwgcm93Tm9kZXNbal0pO1xuICAgICAgICB9IC8vIE5vdyBqb2luIHRoZSBhcnJvdyB0byBpdHMgbGFiZWxzLlxuXG5cbiAgICAgICAgdmFyIGFycm93ID0gY2RBcnJvdyhhcnJvd0NoYXIsIGxhYmVscywgcGFyc2VyKTsgLy8gV3JhcCB0aGUgYXJyb3cgaW4gIFBhcnNlTm9kZTxcInN0eWxpbmdcIj4uXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBtYXRjaCBwYXJzZUFycmF5KCkgYmVoYXZpb3IuXG5cbiAgICAgICAgdmFyIHdyYXBwZWRBcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICBib2R5OiBbYXJyb3ddLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIHN0eWxlOiBcImRpc3BsYXlcIiAvLyBDRCBpcyBhbHdheXMgZGlzcGxheXN0eWxlLlxuXG4gICAgICAgIH07XG4gICAgICAgIHJvdy5wdXNoKHdyYXBwZWRBcnJvdyk7IC8vIEluIENEJ3Mgc3ludGF4LCBjZWxscyBhcmUgaW1wbGljaXQuIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgdGhhdFxuICAgICAgICAvLyBpcyBub3QgYW4gYXJyb3cgZ2V0cyBjb2xsZWN0ZWQgaW50byBhIGNlbGwuIFNvIGNyZWF0ZSBhbiBlbXB0eVxuICAgICAgICAvLyBjZWxsIG5vdy4gSXQgd2lsbCBjb2xsZWN0IHVwY29taW5nIHBhcnNlTm9kZXMuXG5cbiAgICAgICAgY2VsbCA9IG5ld0NlbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgIC8vIEV2ZW4tbnVtYmVyZWQgcm93cyBjb25zaXN0IG9mOiBjZWxsLCBhcnJvdywgY2VsbCwgYXJyb3csIC4uLiBjZWxsXG4gICAgICAvLyBUaGUgbGFzdCBjZWxsIGlzIG5vdCB5ZXQgcHVzaGVkIGludG8gYHJvd2AsIHNvOlxuICAgICAgcm93LnB1c2goY2VsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9kZC1udW1iZXJlZCByb3dzIGNvbnNpc3Qgb2Y6IHZlcnQgYXJyb3csIGVtcHR5IGNlbGwsIC4uLiB2ZXJ0IGFycm93XG4gICAgICAvLyBSZW1vdmUgdGhlIGVtcHR5IGNlbGwgdGhhdCB3YXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHJvd2AuXG4gICAgICByb3cuc2hpZnQoKTtcbiAgICB9XG5cbiAgICByb3cgPSBbXTtcbiAgICBib2R5LnB1c2gocm93KTtcbiAgfSAvLyBFbmQgcm93IGdyb3VwXG5cblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7IC8vIEVuZCBhcnJheSBncm91cCBkZWZpbmluZyBcXFxcXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBkZWZpbmUgY29sdW1uIHNlcGFyYXRpb24uXG5cbiAgdmFyIGNvbHMgPSBuZXcgQXJyYXkoYm9keVswXS5sZW5ndGgpLmZpbGwoe1xuICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICBhbGlnbjogXCJjXCIsXG4gICAgcHJlZ2FwOiAwLjI1LFxuICAgIC8vIENEIHBhY2thZ2Ugc2V0cyBcXGVuc2tpcCBiZXR3ZWVuIGNvbHVtbnMuXG4gICAgcG9zdGdhcDogMC4yNSAvLyBTbyBwcmUgYW5kIHBvc3QgZWFjaCBnZXQgaGFsZiBhbiBcXGVuc2tpcCwgaS5lLiAwLjI1ZW0uXG5cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIGJvZHksXG4gICAgYXJyYXlzdHJldGNoOiAxLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICByb3dHYXBzOiBbbnVsbF0sXG4gICAgY29scyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZTogXCJDRFwiLFxuICAgIGhMaW5lc0JlZm9yZVJvdzogbmV3IEFycmF5KGJvZHkubGVuZ3RoICsgMSkuZmlsbChbXSlcbiAgfTtcbn0gLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXG4vLyBUaGV5IGFyZSBoZXJlIG9ubHkgZm9yIGludGVybmFsIHVzZSBieSB0aGUge0NEfSBlbnZpcm9ubWVudCBpbiBwbGFjaW5nIGxhYmVsc1xuLy8gbmV4dCB0byB2ZXJ0aWNhbCBhcnJvd3MuXG4vLyBXZSBkb24ndCBuZWVkIGFueSBzdWNoIGZ1bmN0aW9ucyBmb3IgaG9yaXpvbnRhbCBhcnJvd3MgYmVjYXVzZSB3ZSBjYW4gcmV1c2Vcbi8vIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGV4dGVuc2libGUgYXJyb3dzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY2RsYWJlbFwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxjZGxlZnRcIiwgXCJcXFxcXFxcXGNkcmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNkbGFiZWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2lkZTogZnVuY05hbWUuc2xpY2UoNCksXG4gICAgICBsYWJlbDogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgdmFyIGxhYmVsID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5sYWJlbCwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGxhYmVsLmNsYXNzZXMucHVzaChcImNkLWxhYmVsLVwiICsgZ3JvdXAuc2lkZSk7XG4gICAgbGFiZWwuc3R5bGUuYm90dG9tID0gbWFrZUVtKDAuOCAtIGxhYmVsLmRlcHRoKTsgLy8gWmVybyBvdXQgbGFiZWwgaGVpZ2h0ICYgZGVwdGgsIHNvIHZlcnRpY2FsIGFsaWduIG9mIGFycm93IGlzIHNldFxuICAgIC8vIGJ5IHRoZSBhcnJvdyBoZWlnaHQsIG5vdCBieSB0aGUgbGFiZWwuXG5cbiAgICBsYWJlbC5oZWlnaHQgPSAwO1xuICAgIGxhYmVsLmRlcHRoID0gMDtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5sYWJlbCwgb3B0aW9ucyldKTtcbiAgICBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbbGFiZWxdKTtcbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBcIik7XG5cbiAgICBpZiAoZ3JvdXAuc2lkZSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIi0xd2lkdGhcIik7XG4gICAgfSAvLyBXZSBoYXZlIHRvIGd1ZXNzIGF0IHZlcnRpY2FsIGFsaWdubWVudC4gV2Uga25vdyB0aGUgYXJyb3cgaXMgMS44ZW0gdGFsbCxcbiAgICAvLyBCdXQgd2UgZG9uJ3Qga25vdyB0aGUgaGVpZ2h0IG9yIGRlcHRoIG9mIHRoZSBsYWJlbC5cblxuXG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwidm9mZnNldFwiLCBcIjAuN2VtXCIpO1xuICAgIGxhYmVsID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgW2xhYmVsXSk7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIFwiZmFsc2VcIik7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIxXCIpO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGNkcGFyZW50XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZyYWdtZW50OiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFdyYXAgdGhlIHZlcnRpY2FsIGFycm93IGFuZCBpdHMgbGFiZWxzLlxuICAgIC8vIFRoZSBwYXJlbnQgZ2V0cyBwb3NpdGlvbjogcmVsYXRpdmUuIFRoZSBjaGlsZCBnZXRzIHBvc2l0aW9uOiBhYnNvbHV0ZS5cbiAgICAvLyBTbyBDU1MgY2FuIGxvY2F0ZSB0aGUgbGFiZWwgY29ycmVjdGx5LlxuICAgIHZhciBwYXJlbnQgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRHcm91cCQxKGdyb3VwLmZyYWdtZW50LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgcGFyZW50LmNsYXNzZXMucHVzaChcImNkLXZlcnQtYXJyb3dcIik7XG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5mcmFnbWVudCwgb3B0aW9ucyldKTtcbiAgfVxuXG59KTtcblxuLy8gezEyM30gYW5kIGNvbnZlcnRzIGludG8gc3ltYm9sIHdpdGggY29kZSAxMjMuICBJdCBpcyB1c2VkIGJ5IHRoZSAqbWFjcm8qXG4vLyBcXGNoYXIgZGVmaW5lZCBpbiBtYWNyb3MuanMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gIG5hbWVzOiBbXCJcXFxcQGNoYXJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBhcmcgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpO1xuICAgIHZhciBncm91cCA9IGFyZy5ib2R5O1xuICAgIHZhciBudW1iZXIgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnROb2RlVHlwZShncm91cFtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgbnVtYmVyICs9IG5vZGUudGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IHBhcnNlSW50KG51bWJlcik7XG4gICAgdmFyIHRleHQ7XG5cbiAgICBpZiAoaXNOYU4oY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7IC8vIElmIHdlIGRyb3AgSUUgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBjb2RlIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAgIC8vIHRleHQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKVxuICAgIH0gZWxzZSBpZiAoY29kZSA8IDAgfHwgY29kZSA+PSAweDEwZmZmZikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcQGNoYXIgd2l0aCBpbnZhbGlkIGNvZGUgcG9pbnQgXCIgKyBudW1iZXIpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA8PSAweGZmZmYpIHtcbiAgICAgIHRleHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW50byBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICBjb2RlIC09IDB4MTAwMDA7XG4gICAgICB0ZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweGQ4MDAsIChjb2RlICYgMHgzZmYpICsgMHhkYzAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHRleHQ6IHRleHRcbiAgICB9O1xuICB9XG5cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkOCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ3ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvcikpO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAuY29sb3IpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjb2xvclwiLFxuICBuYW1lczogW1wiXFxcXHRleHRjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwib3JpZ2luYWxcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgY29sb3IsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBicmVha09uVG9rZW5UZXh0XG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5cbi8vIFJvdyBicmVha3Mgd2l0aGluIHRhYnVsYXIgZW52aXJvbm1lbnRzLCBhbmQgbGluZSBicmVha3MgYXQgdG9wIGxldmVsXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjclwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc2l6ZSA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCkudGV4dCA9PT0gXCJbXCIgPyBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSkgOiBudWxsO1xuICAgIHZhciBuZXdMaW5lID0gIXBhcnNlci5zZXR0aW5ncy5kaXNwbGF5TW9kZSB8fCAhcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZSxcbiAgICAgIHNpemU6IHNpemUgJiYgYXNzZXJ0Tm9kZVR5cGUoc2l6ZSwgXCJzaXplXCIpLnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zcGFjZVwiKTtcblxuICAgIGlmIChncm91cC5uZXdMaW5lKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmVicmVha1wiLCBcIm5ld2xpbmVcIik7XG5cbiAgICAgIGlmIChncm91cC5zaXplKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBnbG9iYWxNYXAgPSB7XG4gIFwiXFxcXGdsb2JhbFwiOiBcIlxcXFxnbG9iYWxcIixcbiAgXCJcXFxcbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxkZWZcIjogXCJcXFxcZ2RlZlwiLFxuICBcIlxcXFxnZGVmXCI6IFwiXFxcXGdkZWZcIixcbiAgXCJcXFxcZWRlZlwiOiBcIlxcXFx4ZGVmXCIsXG4gIFwiXFxcXHhkZWZcIjogXCJcXFxceGRlZlwiLFxuICBcIlxcXFxsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGxldFwiLFxuICBcIlxcXFxmdXR1cmVsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGZ1dHVyZVwiXG59O1xuXG52YXIgY2hlY2tDb250cm9sU2VxdWVuY2UgPSB0b2sgPT4ge1xuICB2YXIgbmFtZSA9IHRvay50ZXh0O1xuXG4gIGlmICgvXig/OltcXFxce30kJiNeX118RU9GKSQvLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59O1xuXG52YXIgZ2V0UkhTID0gcGFyc2VyID0+IHtcbiAgdmFyIHRvayA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcblxuICBpZiAodG9rLnRleHQgPT09IFwiPVwiKSB7XG4gICAgLy8gY29uc3VtZSBvcHRpb25hbCBlcXVhbHNcbiAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAvLyBjb25zdW1lIG9uZSBvcHRpb25hbCBzcGFjZVxuICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2s7XG59O1xuXG52YXIgbGV0Q29tbWFuZCA9IChwYXJzZXIsIG5hbWUsIHRvaywgZ2xvYmFsKSA9PiB7XG4gIHZhciBtYWNybyA9IHBhcnNlci5ndWxsZXQubWFjcm9zLmdldCh0b2sudGV4dCk7XG5cbiAgaWYgKG1hY3JvID09IG51bGwpIHtcbiAgICAvLyBkb24ndCBleHBhbmQgaXQgbGF0ZXIgZXZlbiBpZiBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBkZWZpbmVkXG4gICAgLy8gZS5nLiwgXFxsZXRcXGZvbz1cXGZyYWMgXFxkZWZcXGZyYWN7XFxyZWxheH0gXFxmcmFjMTJcbiAgICB0b2subm9leHBhbmQgPSB0cnVlO1xuICAgIG1hY3JvID0ge1xuICAgICAgdG9rZW5zOiBbdG9rXSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAvLyByZXByb2R1Y2UgdGhlIHNhbWUgYmVoYXZpb3IgaW4gZXhwYW5zaW9uXG4gICAgICB1bmV4cGFuZGFibGU6ICFwYXJzZXIuZ3VsbGV0LmlzRXhwYW5kYWJsZSh0b2sudGV4dClcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KG5hbWUsIG1hY3JvLCBnbG9iYWwpO1xufTsgLy8gPGFzc2lnbm1lbnQ+IC0+IDxub24tbWFjcm8gYXNzaWdubWVudD58PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+IC0+IDxzaW1wbGUgYXNzaWdubWVudD58XFxnbG9iYWw8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bWFjcm8gYXNzaWdubWVudD4gLT4gPGRlZmluaXRpb24+fDxwcmVmaXg+PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8cHJlZml4PiAtPiBcXGdsb2JhbHxcXGxvbmd8XFxvdXRlclxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGdsb2JhbFwiLCBcIlxcXFxsb25nXCIsIFwiXFxcXFxcXFxnbG9iYWxsb25nXCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICB2YXIgdG9rZW4gPSBwYXJzZXIuZmV0Y2goKTtcblxuICAgIGlmIChnbG9iYWxNYXBbdG9rZW4udGV4dF0pIHtcbiAgICAgIC8vIEthVGVYIGRvZXNuJ3QgaGF2ZSBcXHBhciwgc28gaWdub3JlIFxcbG9uZ1xuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxnbG9iYWxcIiB8fCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxvbmdcIikge1xuICAgICAgICB0b2tlbi50ZXh0ID0gZ2xvYmFsTWFwW3Rva2VuLnRleHRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJpbnRlcm5hbFwiKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdG9rZW4gYWZ0ZXIgbWFjcm8gcHJlZml4XCIsIHRva2VuKTtcbiAgfVxuXG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6IFxcZGVmLCBcXGdkZWYsIFxcZWRlZiwgXFx4ZGVmXG4vLyA8ZGVmaW5pdGlvbj4gLT4gPGRlZj48Y29udHJvbCBzZXF1ZW5jZT48ZGVmaW5pdGlvbiB0ZXh0PlxuLy8gPGRlZj4gLT4gXFxkZWZ8XFxnZGVmfFxcZWRlZnxcXHhkZWZcbi8vIDxkZWZpbml0aW9uIHRleHQ+IC0+IDxwYXJhbWV0ZXIgdGV4dD48bGVmdCBicmFjZT48YmFsYW5jZWQgdGV4dD48cmlnaHQgYnJhY2U+XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGRlZlwiLCBcIlxcXFxnZGVmXCIsIFwiXFxcXGVkZWZcIiwgXCJcXFxceGRlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMikge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIHZhciBuYW1lID0gdG9rLnRleHQ7XG5cbiAgICBpZiAoL14oPzpbXFxcXHt9JCYjXl9dfEVPRikkLy50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICAgIH1cblxuICAgIHZhciBudW1BcmdzID0gMDtcbiAgICB2YXIgaW5zZXJ0O1xuICAgIHZhciBkZWxpbWl0ZXJzID0gW1tdXTsgLy8gPHBhcmFtZXRlciB0ZXh0PiBjb250YWlucyBubyBicmFjZXNcblxuICAgIHdoaWxlIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgLy8gSWYgdGhlIHZlcnkgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIDxwYXJhbWV0ZXIgdGV4dD4gaXMgIywgc28gdGhhdFxuICAgICAgICAvLyB0aGlzICMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgeywgVGVYIHdpbGwgYmVoYXZlIGFzIGlmIHRoZSB7XG4gICAgICAgIC8vIGhhZCBiZWVuIGluc2VydGVkIGF0IHRoZSByaWdodCBlbmQgb2YgYm90aCB0aGUgcGFyYW1ldGVyIHRleHRcbiAgICAgICAgLy8gYW5kIHRoZSByZXBsYWNlbWVudCB0ZXh0LlxuICAgICAgICBpZiAocGFyc2VyLmd1bGxldC5mdXR1cmUoKS50ZXh0ID09PSBcIntcIikge1xuICAgICAgICAgIGluc2VydCA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCk7XG4gICAgICAgICAgZGVsaW1pdGVyc1tudW1BcmdzXS5wdXNoKFwie1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBBIHBhcmFtZXRlciwgdGhlIGZpcnN0IGFwcGVhcmFuY2Ugb2YgIyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDEsXG4gICAgICAgIC8vIHRoZSBuZXh0IGJ5IDIsIGFuZCBzbyBvbjsgdXAgdG8gbmluZSAj4oCZcyBhcmUgYWxsb3dlZFxuXG5cbiAgICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmICghL15bMS05XSQvLnRlc3QodG9rLnRleHQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBcXFwiXCIgKyB0b2sudGV4dCArIFwiXFxcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZUludCh0b2sudGV4dCkgIT09IG51bUFyZ3MgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBcmd1bWVudCBudW1iZXIgXFxcIlwiICsgdG9rLnRleHQgKyBcIlxcXCIgb3V0IG9mIG9yZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtQXJncysrO1xuICAgICAgICBkZWxpbWl0ZXJzLnB1c2goW10pO1xuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvblwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGltaXRlcnNbbnVtQXJnc10ucHVzaCh0b2sudGV4dCk7XG4gICAgICB9XG4gICAgfSAvLyByZXBsYWNlbWVudCB0ZXh0LCBlbmNsb3NlZCBpbiAneycgYW5kICd9JyBhbmQgcHJvcGVybHkgbmVzdGVkXG5cblxuICAgIHZhciB7XG4gICAgICB0b2tlbnNcbiAgICB9ID0gcGFyc2VyLmd1bGxldC5jb25zdW1lQXJnKCk7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICB0b2tlbnMudW5zaGlmdChpbnNlcnQpO1xuICAgIH1cblxuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcZWRlZlwiIHx8IGZ1bmNOYW1lID09PSBcIlxcXFx4ZGVmXCIpIHtcbiAgICAgIHRva2VucyA9IHBhcnNlci5ndWxsZXQuZXhwYW5kVG9rZW5zKHRva2Vucyk7XG4gICAgICB0b2tlbnMucmV2ZXJzZSgpOyAvLyB0byBmaXQgaW4gd2l0aCBzdGFjayBvcmRlclxuICAgIH0gLy8gRmluYWwgYXJnIGlzIHRoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvXG5cblxuICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgICB0b2tlbnMsXG4gICAgICBudW1BcmdzLFxuICAgICAgZGVsaW1pdGVyc1xuICAgIH0sIGZ1bmNOYW1lID09PSBnbG9iYWxNYXBbZnVuY05hbWVdKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyA8c2ltcGxlIGFzc2lnbm1lbnQ+IC0+IDxsZXQgYXNzaWdubWVudD5cbi8vIDxsZXQgYXNzaWdubWVudD4gLT4gXFxmdXR1cmVsZXQ8Y29udHJvbCBzZXF1ZW5jZT48dG9rZW4+PHRva2VuPlxuLy8gICAgIHwgXFxsZXQ8Y29udHJvbCBzZXF1ZW5jZT48ZXF1YWxzPjxvbmUgb3B0aW9uYWwgc3BhY2U+PHRva2VuPlxuLy8gPGVxdWFscz4gLT4gPG9wdGlvbmFsIHNwYWNlcz58PG9wdGlvbmFsIHNwYWNlcz49XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGxldFwiLCBcIlxcXFxcXFxcZ2xvYmFsbGV0XCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIG5hbWUgPSBjaGVja0NvbnRyb2xTZXF1ZW5jZShwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCkpO1xuICAgIHBhcnNlci5ndWxsZXQuY29uc3VtZVNwYWNlcygpO1xuICAgIHZhciB0b2sgPSBnZXRSSFMocGFyc2VyKTtcbiAgICBsZXRDb21tYW5kKHBhcnNlciwgbmFtZSwgdG9rLCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxldFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyByZWY6IGh0dHBzOi8vd3d3LnR1Zy5vcmcvVFVHYm9hdC90YjA5LTMvdGIyMmJlY2h0b2xzaGVpbS5wZGZcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxcZnV0dXJlbGV0XCIsIFwiXFxcXFxcXFxnbG9iYWxmdXR1cmVcIiAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbmFtZSA9IGNoZWNrQ29udHJvbFNlcXVlbmNlKHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKSk7XG4gICAgdmFyIG1pZGRsZSA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIGxldENvbW1hbmQocGFyc2VyLCBuYW1lLCB0b2ssIGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcZ2xvYmFsZnV0dXJlXCIpO1xuICAgIHBhcnNlci5ndWxsZXQucHVzaFRva2VuKHRvayk7XG4gICAgcGFyc2VyLmd1bGxldC5wdXNoVG9rZW4obWlkZGxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBtZXRyaWNzIGZvciBhIGdpdmVuIHN5bWJvbCBhbmQgZm9udCwgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gKGkuZS5cbiAqIGFmdGVyIGZvbGxvd2luZyByZXBsYWNlbWVudCBmcm9tIHN5bWJvbHMuanMpXG4gKi9cbnZhciBnZXRNZXRyaWNzID0gZnVuY3Rpb24gZ2V0TWV0cmljcyhzeW1ib2wsIGZvbnQsIG1vZGUpIHtcbiAgdmFyIHJlcGxhY2UgPSBzeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzeW1ib2xzLm1hdGhbc3ltYm9sXS5yZXBsYWNlO1xuICB2YXIgbWV0cmljcyA9IGdldENoYXJhY3Rlck1ldHJpY3MocmVwbGFjZSB8fCBzeW1ib2wsIGZvbnQsIG1vZGUpO1xuXG4gIGlmICghbWV0cmljcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN5bWJvbCBcIiArIHN5bWJvbCArIFwiIGFuZCBmb250IHNpemUgXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgcmV0dXJuIG1ldHJpY3M7XG59O1xuLyoqXG4gKiBQdXRzIGEgZGVsaW1pdGVyIHNwYW4gaW4gYSBnaXZlbiBzdHlsZSwgYW5kIGFkZHMgYXBwcm9wcmlhdGUgaGVpZ2h0LCBkZXB0aCxcbiAqIGFuZCBtYXhGb250U2l6ZXMuXG4gKi9cblxuXG52YXIgc3R5bGVXcmFwID0gZnVuY3Rpb24gc3R5bGVXcmFwKGRlbGltLCB0b1N0eWxlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUodG9TdHlsZSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3Nlcy5jb25jYXQobmV3T3B0aW9ucy5zaXppbmdDbGFzc2VzKG9wdGlvbnMpKSwgW2RlbGltXSwgb3B0aW9ucyk7XG4gIHZhciBkZWxpbVNpemVNdWx0aXBsaWVyID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uaGVpZ2h0ICo9IGRlbGltU2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uZGVwdGggKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5tYXhGb250U2l6ZSA9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGNlbnRlclNwYW4gPSBmdW5jdGlvbiBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoc3R5bGUpO1xuICB2YXIgc2hpZnQgPSAoMSAtIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyKSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICBzcGFuLmNsYXNzZXMucHVzaChcImRlbGltY2VudGVyXCIpO1xuICBzcGFuLnN0eWxlLnRvcCA9IG1ha2VFbShzaGlmdCk7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlU21hbGxEZWxpbSA9IGZ1bmN0aW9uIG1ha2VTbWFsbERlbGltKGRlbGltLCBzdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciB0ZXh0ID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChkZWxpbSwgXCJNYWluLVJlZ3VsYXJcIiwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKHRleHQsIHN0eWxlLCBvcHRpb25zLCBjbGFzc2VzKTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyU3BhbihzcGFuLCBvcHRpb25zLCBzdHlsZSk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIHN5bWJvbCBpbiB0aGUgZ2l2ZW4gZm9udCBzaXplIChub3RlIHNpemUgaXMgYW4gaW50ZWdlcilcbiAqL1xuXG5cbnZhciBtYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlTGFyZ2VEZWxpbSA9IGZ1bmN0aW9uIG1ha2VMYXJnZURlbGltKGRlbGltLCBzaXplLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgdmFyIGlubmVyID0gbWF0aHJtU2l6ZShkZWxpbSwgc2l6ZSwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBTdHlsZSQxLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIFN0eWxlJDEuVEVYVCk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIE1ha2UgYSBzcGFuIGZyb20gYSBmb250IGdseXBoIHdpdGggdGhlIGdpdmVuIG9mZnNldCBhbmQgaW4gdGhlIGdpdmVuIGZvbnQuXG4gKiBUaGlzIGlzIHVzZWQgaW4gbWFrZVN0YWNrZWREZWxpbSB0byBtYWtlIHRoZSBzdGFja2luZyBwaWVjZXMgZm9yIHRoZSBkZWxpbWl0ZXIuXG4gKi9cblxuXG52YXIgbWFrZUdseXBoU3BhbiA9IGZ1bmN0aW9uIG1ha2VHbHlwaFNwYW4oc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgY29ybmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdpbm5lclwiLCBzaXplQ2xhc3NdLCBbYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZENvbW1vbi5tYWtlU3ltYm9sKHN5bWJvbCwgZm9udCwgbW9kZSldKV0pOyAvLyBTaW5jZSB0aGlzIHdpbGwgYmUgcGFzc2VkIGludG8gYG1ha2VWTGlzdGAgaW4gdGhlIGVuZCwgd3JhcCB0aGUgZWxlbWVudFxuICAvLyBpbiB0aGUgYXBwcm9wcmlhdGUgdGFnIHRoYXQgVkxpc3QgdXNlcy5cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgIGVsZW06IGNvcm5lclxuICB9O1xufTtcblxudmFyIG1ha2VJbm5lciA9IGZ1bmN0aW9uIG1ha2VJbm5lcihjaCwgaGVpZ2h0LCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgaW5uZXIgcGFydCBvZiBhIHRhbGwgc3RhY2tlZCBkZWxpbWl0ZXIuXG4gIHZhciB3aWR0aCA9IGZvbnRNZXRyaWNzRGF0YVsnU2l6ZTQtUmVndWxhciddW2NoLmNoYXJDb2RlQXQoMCldID8gZm9udE1ldHJpY3NEYXRhWydTaXplNC1SZWd1bGFyJ11bY2guY2hhckNvZGVBdCgwKV1bNF0gOiBmb250TWV0cmljc0RhdGFbJ1NpemUxLVJlZ3VsYXInXVtjaC5jaGFyQ29kZUF0KDApXVs0XTtcbiAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoXCJpbm5lclwiLCBpbm5lclBhdGgoY2gsIE1hdGgucm91bmQoMTAwMCAqIGhlaWdodCkpKTtcbiAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICBcIndpZHRoXCI6IG1ha2VFbSh3aWR0aCksXG4gICAgXCJoZWlnaHRcIjogbWFrZUVtKGhlaWdodCksXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIG1ha2VFbSh3aWR0aCksXG4gICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgMTAwMCAqIHdpZHRoICsgXCIgXCIgKyBNYXRoLnJvdW5kKDEwMDAgKiBoZWlnaHQpLFxuICAgIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiOiBcInhNaW5ZTWluXCJcbiAgfSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImVsZW1cIixcbiAgICBlbGVtOiBzcGFuXG4gIH07XG59OyAvLyBIZWxwZXJzIGZvciBtYWtlU3RhY2tlZERlbGltXG5cblxudmFyIGxhcEluRW1zID0gMC4wMDg7XG52YXIgbGFwID0ge1xuICB0eXBlOiBcImtlcm5cIixcbiAgc2l6ZTogLTEgKiBsYXBJbkVtc1xufTtcbnZhciB2ZXJ0cyA9IFtcInxcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcdmVydFwiXTtcbnZhciBkb3VibGVWZXJ0cyA9IFtcIlxcXFx8XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXFZlcnRcIl07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgbWFrZVN0YWNrZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodFRvdGFsLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gVGhlcmUgYXJlIGZvdXIgcGFydHMsIHRoZSB0b3AsIGFuIG9wdGlvbmFsIG1pZGRsZSwgYSByZXBlYXRlZCBwYXJ0LCBhbmQgYVxuICAvLyBib3R0b20uXG4gIHZhciB0b3A7XG4gIHZhciBtaWRkbGU7XG4gIHZhciByZXBlYXQ7XG4gIHZhciBib3R0b207XG4gIHZhciBzdmdMYWJlbCA9IFwiXCI7XG4gIHZhciB2aWV3Qm94V2lkdGggPSAwO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzZDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnModmVydHMsIGRlbGltKSkge1xuICAgIHJlcGVhdCA9IFwiXFx1MjIyM1wiO1xuICAgIHN2Z0xhYmVsID0gXCJ2ZXJ0XCI7XG4gICAgdmlld0JveFdpZHRoID0gMzMzO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKGRvdWJsZVZlcnRzLCBkZWxpbSkpIHtcbiAgICByZXBlYXQgPSBcIlxcdTIyMjVcIjtcbiAgICBzdmdMYWJlbCA9IFwiZG91YmxldmVydFwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDU1NjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJbXCIgfHwgZGVsaW0gPT09IFwiXFxcXGxicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM2ExXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2EyXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EzXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJsYnJhY2tcIjtcbiAgICB2aWV3Qm94V2lkdGggPSA2Njc7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhNFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhNVwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhNlwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgICBzdmdMYWJlbCA9IFwicmJyYWNrXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBhXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA4XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTFcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTJcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBiXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA5XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTRcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTVcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOWJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOWRcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxwYXJlblwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDg3NTtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCIpXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJwYXJlblwiKSB7XG4gICAgdG9wID0gXCJcXHUyMzllXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMzlmXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EwXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJycGFyZW5cIjtcbiAgICB2aWV3Qm94V2lkdGggPSA4NzU7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHtcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbGJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTdcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYThcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXH1cIiB8fCBkZWxpbSA9PT0gXCJcXFxccmJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYWJcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYWRcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxncm91cFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZWVcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhN1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhYVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlZlwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsbW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxybW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IC8vIEdldCB0aGUgbWV0cmljcyBvZiB0aGUgZm91ciBzZWN0aW9uc1xuXG5cbiAgdmFyIHRvcE1ldHJpY3MgPSBnZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBnZXRNZXRyaWNzKHJlcGVhdCwgZm9udCwgbW9kZSk7XG4gIHZhciByZXBlYXRIZWlnaHRUb3RhbCA9IHJlcGVhdE1ldHJpY3MuaGVpZ2h0ICsgcmVwZWF0TWV0cmljcy5kZXB0aDtcbiAgdmFyIGJvdHRvbU1ldHJpY3MgPSBnZXRNZXRyaWNzKGJvdHRvbSwgZm9udCwgbW9kZSk7XG4gIHZhciBib3R0b21IZWlnaHRUb3RhbCA9IGJvdHRvbU1ldHJpY3MuaGVpZ2h0ICsgYm90dG9tTWV0cmljcy5kZXB0aDtcbiAgdmFyIG1pZGRsZUhlaWdodFRvdGFsID0gMDtcbiAgdmFyIG1pZGRsZUZhY3RvciA9IDE7XG5cbiAgaWYgKG1pZGRsZSAhPT0gbnVsbCkge1xuICAgIHZhciBtaWRkbGVNZXRyaWNzID0gZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWxhdGUgdGhlIG1pbmltYWwgaGVpZ2h0IHRoYXQgdGhlIGRlbGltaXRlciBjYW4gaGF2ZS5cbiAgLy8gSXQgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIHRvcCwgYm90dG9tLCBhbmQgb3B0aW9uYWwgbWlkZGxlIGNvbWJpbmVkLlxuXG5cbiAgdmFyIG1pbkhlaWdodCA9IHRvcEhlaWdodFRvdGFsICsgYm90dG9tSGVpZ2h0VG90YWwgKyBtaWRkbGVIZWlnaHRUb3RhbDsgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgcmVwZWF0IHN5bWJvbCB3ZSB3aWxsIG5lZWRcblxuICB2YXIgcmVwZWF0Q291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGhlaWdodFRvdGFsIC0gbWluSGVpZ2h0KSAvIChtaWRkbGVGYWN0b3IgKiByZXBlYXRIZWlnaHRUb3RhbCkpKTsgLy8gQ29tcHV0ZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkZWxpbWl0ZXIgaW5jbHVkaW5nIGFsbCB0aGUgc3ltYm9sc1xuXG4gIHZhciByZWFsSGVpZ2h0VG90YWwgPSBtaW5IZWlnaHQgKyByZXBlYXRDb3VudCAqIG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBUaGUgY2VudGVyIG9mIHRoZSBkZWxpbWl0ZXIgaXMgcGxhY2VkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGF4aXMuIE5vdGVcbiAgLy8gdGhhdCBpbiB0aGlzIGNvbnRleHQsIFwiY2VudGVyXCIgbWVhbnMgdGhhdCB0aGUgZGVsaW1pdGVyIHNob3VsZCBiZVxuICAvLyBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMgaW4gdGhlIGN1cnJlbnQgc3R5bGUsIHdoaWxlIG5vcm1hbGx5IGl0IGlzXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0ZXh0c3R5bGUuXG5cbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgYXhpc0hlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB9IC8vIENhbGN1bGF0ZSB0aGUgZGVwdGhcblxuXG4gIHZhciBkZXB0aCA9IHJlYWxIZWlnaHRUb3RhbCAvIDIgLSBheGlzSGVpZ2h0OyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBwaWVjZXMgb2YgdGhlIHN0YWNrZWQgZGVsaW1pdGVyXG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgaWYgKHN2Z0xhYmVsLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJbnN0ZWFkIG9mIHN0YWNraW5nIGdseXBocywgY3JlYXRlIGEgc2luZ2xlIFNWRy5cbiAgICAvLyBUaGlzIGV2YWRlcyBicm93c2VyIHByb2JsZW1zIHdpdGggaW1wcmVjaXNlIHBvc2l0aW9uaW5nIG9mIHNwYW5zLlxuICAgIHZhciBtaWRIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsO1xuICAgIHZhciB2aWV3Qm94SGVpZ2h0ID0gTWF0aC5yb3VuZChyZWFsSGVpZ2h0VG90YWwgKiAxMDAwKTtcbiAgICB2YXIgcGF0aFN0ciA9IHRhbGxEZWxpbShzdmdMYWJlbCwgTWF0aC5yb3VuZChtaWRIZWlnaHQgKiAxMDAwKSk7XG4gICAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoc3ZnTGFiZWwsIHBhdGhTdHIpO1xuICAgIHZhciB3aWR0aCA9ICh2aWV3Qm94V2lkdGggLyAxMDAwKS50b0ZpeGVkKDMpICsgXCJlbVwiO1xuICAgIHZhciBoZWlnaHQgPSAodmlld0JveEhlaWdodCAvIDEwMDApLnRvRml4ZWQoMykgKyBcImVtXCI7XG4gICAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgXCJ3aWR0aFwiOiB3aWR0aCxcbiAgICAgIFwiaGVpZ2h0XCI6IGhlaWdodCxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodFxuICAgIH0pO1xuICAgIHZhciB3cmFwcGVyID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmddLCBvcHRpb25zKTtcbiAgICB3cmFwcGVyLmhlaWdodCA9IHZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuICAgIHdyYXBwZXIuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICB3cmFwcGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICBzdGFjay5wdXNoKHtcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogd3JhcHBlclxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0YWNrIGdseXBoc1xuICAgIC8vIFN0YXJ0IGJ5IGFkZGluZyB0aGUgYm90dG9tIHN5bWJvbFxuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbihib3R0b20sIGZvbnQsIG1vZGUpKTtcbiAgICBzdGFjay5wdXNoKGxhcCk7IC8vIG92ZXJsYXBcblxuICAgIGlmIChtaWRkbGUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBtaWRkbGUgc2VjdGlvbiB3aWxsIGJlIGFuIFNWRy4gTWFrZSBpdCBhbiBleHRyYSAwLjAxNmVtIHRhbGwuXG4gICAgICAvLyBXZSdsbCBvdmVybGFwIGJ5IDAuMDA4ZW0gYXQgdG9wIGFuZCBib3R0b20uXG4gICAgICB2YXIgaW5uZXJIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsICsgMiAqIGxhcEluRW1zO1xuICAgICAgc3RhY2sucHVzaChtYWtlSW5uZXIocmVwZWF0LCBpbm5lckhlaWdodCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgICAgLy8gc2VjdGlvbnNcbiAgICAgIHZhciBfaW5uZXJIZWlnaHQgPSAocmVhbEhlaWdodFRvdGFsIC0gdG9wSGVpZ2h0VG90YWwgLSBib3R0b21IZWlnaHRUb3RhbCAtIG1pZGRsZUhlaWdodFRvdGFsKSAvIDIgKyAyICogbGFwSW5FbXM7XG5cbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7IC8vIE5vdyBpbnNlcnQgdGhlIG1pZGRsZSBvZiB0aGUgYnJhY2UuXG5cbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3BhbihtaWRkbGUsIGZvbnQsIG1vZGUpKTtcbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7XG4gICAgfSAvLyBBZGQgdGhlIHRvcCBzeW1ib2xcblxuXG4gICAgc3RhY2sucHVzaChsYXApO1xuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbih0b3AsIGZvbnQsIG1vZGUpKTtcbiAgfSAvLyBGaW5hbGx5LCBidWlsZCB0aGUgdmxpc3RcblxuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoU3R5bGUkMS5URVhUKTtcbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgcG9zaXRpb25EYXRhOiBkZXB0aCxcbiAgICBjaGlsZHJlbjogc3RhY2tcbiAgfSwgbmV3T3B0aW9ucyk7XG4gIHJldHVybiBzdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgU3R5bGUkMS5URVhULCBvcHRpb25zLCBjbGFzc2VzKTtcbn07IC8vIEFsbCBzdXJkcyBoYXZlIDAuMDhlbSBwYWRkaW5nIGFib3ZlIHRoZSB2aW5jdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgc3FydFN2ZyA9IGZ1bmN0aW9uIHNxcnRTdmcoc3FydE5hbWUsIGhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucykge1xuICB2YXIgcGF0aCA9IHNxcnRQYXRoKHNxcnROYW1lLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IFBhdGhOb2RlKHNxcnROYW1lLCBwYXRoKTtcbiAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoTm9kZV0sIHtcbiAgICAvLyBOb3RlOiAxMDAwOjEgcmF0aW8gb2Ygdmlld0JveCB0byBkb2N1bWVudCBlbSB3aWR0aC5cbiAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICBcImhlaWdodFwiOiBtYWtlRW0oaGVpZ2h0KSxcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmN1bHVtLlxuICAvLyBJZiBTZXR0aW5ncy5taW5SdWxlVGhpY2tuZXNzIGlzIGxhcmdlciB0aGFuIHRoYXQsIHdlIGFkZCBleHRyYVZpbmN1bHVtLlxuXG4gIHZhciBleHRyYVZpbmN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmN1bHVtLiBCdXQgdGhhdCBwYWRkaW5nIGlzIG5vdFxuICAvLyBpbmNsdWRlZCBpbiB0aGUgVGVYLWxpa2UgYGhlaWdodGAgdXNlZCBmb3IgY2FsY3VsYXRpb24gb2ZcbiAgLy8gdmVydGljYWwgYWxpZ25tZW50LiBTbyB0ZXhIZWlnaHQgPSBzcGFuLmhlaWdodCA8IHNwYW4uc3R5bGUuaGVpZ2h0LlxuXG4gIGlmIChkZWxpbS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICAvLyBHZXQgYW4gU1ZHIHRoYXQgaXMgZGVyaXZlZCBmcm9tIGdseXBoIFUrMjIxQSBpbiBmb250IEthVGVYLU1haW4uXG4gICAgLy8gMTAwMCB1bml0IG5vcm1hbCBnbHlwaCBoZWlnaHQuXG4gICAgdmlld0JveEhlaWdodCA9IDEwMDAgKyAxMDAwICogZXh0cmFWaW5jdWx1bSArIHZiUGFkO1xuXG4gICAgaWYgKGhlaWdodCA8IDEuMCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAxLjA7IC8vIG1pbWljIGEgXFx0ZXh0Zm9udCByYWRpY2FsXG4gICAgfSBlbHNlIGlmIChoZWlnaHQgPCAxLjQpIHtcbiAgICAgIHNpemVNdWx0aXBsaWVyID0gMC43OyAvLyBtaW1pYyBhIFxcc2NyaXB0Zm9udCByYWRpY2FsXG4gICAgfVxuXG4gICAgc3BhbkhlaWdodCA9ICgxLjAgKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW4gPSBzcXJ0U3ZnKFwic3FydE1haW5cIiwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluY3VsdW0pIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbkhlaWdodCA9IChzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV0gKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMS4wMmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wIC8gc2l6ZU11bHRpcGxpZXI7IC8vIDEuMCBmcm9tIHRoZSBmb250LlxuICB9IGVsc2Uge1xuICAgIC8vIFRhbGwgc3FydC4gSW4gVGVYLCB0aGlzIHdvdWxkIGJlIHN0YWNrZWQgdXNpbmcgbXVsdGlwbGUgZ2x5cGhzLlxuICAgIC8vIFdlJ2xsIHVzZSBhIHNpbmdsZSBTVkcgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZy5cbiAgICBzcGFuSGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5jdWx1bSArIGVtUGFkO1xuICAgIHRleEhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluY3VsdW0pICsgdmJQYWQ7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0VGFsbFwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oc3BhbkhlaWdodCk7XG4gIHJldHVybiB7XG4gICAgc3BhbixcbiAgICBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmN1bHVtKSAqIHNpemVNdWx0aXBsaWVyXG4gIH07XG59OyAvLyBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgZGVsaW1pdGVycywgZGVsaW1pdGVycyB0aGF0IHN0YWNrIHdoZW4gdGhleSBiZWNvbWVcbi8vIHRvbyBsYXJnZVxuXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiXFxcXHN1cmRcIl07IC8vIGRlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2tcblxudmFyIHN0YWNrQWx3YXlzRGVsaW1pdGVycyA9IFtcIlxcXFx1cGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcInxcIiwgXCJcXFxcfFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcbFZlcnRcIiwgXCJcXFxcclZlcnRcIiwgXCJcXFxcbGdyb3VwXCIsIFwiXFxcXHJncm91cFwiLCBcIlxcdTI3ZWVcIiwgXCJcXHUyN2VmXCIsIFwiXFxcXGxtb3VzdGFjaGVcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCBcIlxcdTIzYjBcIiwgXCJcXHUyM2IxXCJdOyAvLyBhbmQgZGVsaW1pdGVycyB0aGF0IG5ldmVyIHN0YWNrXG5cbnZhciBzdGFja05ldmVyRGVsaW1pdGVycyA9IFtcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcXFxyYW5nbGVcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiXTsgLy8gTWV0cmljcyBvZiB0aGUgZGlmZmVyZW50IHNpemVzLiBGb3VuZCBieSBsb29raW5nIGF0IFRlWCdzIG91dHB1dCBvZlxuLy8gJFxcYmlnbHwgLy8gXFxCaWdsfCBcXGJpZ2dsfCBcXEJpZ2dsfCBcXHNob3dsaXN0cyRcbi8vIFVzZWQgdG8gY3JlYXRlIHN0YWNrZWQgZGVsaW1pdGVycyBvZiBhcHByb3ByaWF0ZSBzaXplcyBpbiBtYWtlU2l6ZWREZWxpbS5cblxudmFyIHNpemVUb01heEhlaWdodCA9IFswLCAxLjIsIDEuOCwgMi40LCAzLjBdO1xuLyoqXG4gKiBVc2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiBhIHNwZWNpZmljIHNpemUsIHdoZXJlIGBzaXplYCBpcyAxLCAyLCAzLCBvciA0LlxuICovXG5cbnZhciBtYWtlU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTaXplZERlbGltKGRlbGltLCBzaXplLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIDwgYW5kID4gdHVybiBpbnRvIFxcbGFuZ2xlIGFuZCBcXHJhbmdsZSBpbiBkZWxpbWl0ZXJzXG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBTaXplZCBkZWxpbWl0ZXJzIGFyZSBuZXZlciBjZW50ZXJlZC5cblxuXG4gIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pIHx8IHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICByZXR1cm4gbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBzaXplVG9NYXhIZWlnaHRbc2l6ZV0sIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIklsbGVnYWwgZGVsaW1pdGVyOiAnXCIgKyBkZWxpbSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBzZXF1ZW5jZXMgb2YgZGVsaW1pdGVyIHNpemVzIHRoYXQgdGhlIGRlbGltaXRlcnNcbiAqIGZvbGxvdyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgZGVsaW1pdGVyLiBUaGlzIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBjdXN0b21cbiAqIHNpemVkIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY3JlYXRlIGEgc21hbGwsIGxhcmdlLCBvciBzdGFja2VkXG4gKiBkZWxpbWl0ZXIuXG4gKlxuICogSW4gcmVhbCBUZVgsIHRoZXNlIHNlcXVlbmNlcyBhcmVuJ3QgZXhwbGljaXRseSBkZWZpbmVkLCBidXQgYXJlIGluc3RlYWRcbiAqIGRlZmluZWQgaW5zaWRlIHRoZSBmb250IG1ldHJpY3MuIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHRocmVlIHNlcXVlbmNlcyB0aGF0XG4gKiBhcmUgcG9zc2libGUgZm9yIHRoZSBkZWxpbWl0ZXJzIHRoYXQgVGVYIGRlZmluZXMsIGl0IGlzIGVhc2llciB0byBqdXN0IGVuY29kZVxuICogdGhlbSBleHBsaWNpdGx5IGhlcmUuXG4gKi9cblxuXG4vLyBEZWxpbWl0ZXJzIHRoYXQgbmV2ZXIgc3RhY2sgdHJ5IHNtYWxsIGRlbGltaXRlcnMgYW5kIGxhcmdlIGRlbGltaXRlcnMgb25seVxudmFyIHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDFcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAyXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogM1xufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDRcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrIHRyeSB0aGUgc21hbGwgZGVsaW1pdGVycyBmaXJzdCwgdGhlbiBzdGFja1xuXG52YXIgc3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgc3RhY2sgd2hlbiBsYXJnZSB0cnkgdGhlIHNtYWxsIGFuZCB0aGVuIGxhcmdlIGRlbGltaXRlcnMsIGFuZFxuLy8gc3RhY2sgYWZ0ZXJ3YXJkc1xuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dO1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgdXNlZCBpbiBhIGRlbGltaXRlciBiYXNlZCBvbiB3aGF0IGtpbmQgb2YgZGVsaW1pdGVyIGl0IGlzLlxuICogVE9ETygjOTYzKSBVc2UgbW9yZSBzcGVjaWZpYyBmb250IGZhbWlseSByZXR1cm4gdHlwZSBvbmNlIHRoYXQgaXMgaW50cm9kdWNlZC5cbiAqL1xuXG52YXIgZGVsaW1UeXBlVG9Gb250ID0gZnVuY3Rpb24gZGVsaW1UeXBlVG9Gb250KHR5cGUpIHtcbiAgaWYgKHR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIFwiTWFpbi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gXCJTaXplXCIgKyB0eXBlLnNpemUgKyBcIi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcInN0YWNrXCIpIHtcbiAgICByZXR1cm4gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIHN1cHBvcnQgZm9yIGRlbGltIHR5cGUgJ1wiICsgdHlwZS50eXBlICsgXCInIGhlcmUuXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUcmF2ZXJzZSBhIHNlcXVlbmNlIG9mIHR5cGVzIG9mIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoYXQga2luZCBvZiBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiB0aGUgZ2l2ZW4gaGVpZ2h0K2RlcHRoLlxuICovXG5cblxudmFyIHRyYXZlcnNlU2VxdWVuY2UgPSBmdW5jdGlvbiB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKSB7XG4gIC8vIEhlcmUsIHdlIGNob29zZSB0aGUgaW5kZXggd2Ugc2hvdWxkIHN0YXJ0IGF0IGluIHRoZSBzZXF1ZW5jZXMuIEluIHNtYWxsZXJcbiAgLy8gc2l6ZXMgKHdoaWNoIGNvcnJlc3BvbmQgdG8gbGFyZ2VyIG51bWJlcnMgaW4gc3R5bGUuc2l6ZSkgd2Ugc3RhcnQgZWFybGllclxuICAvLyBpbiB0aGUgc2VxdWVuY2UuIFRodXMsIHNjcmlwdHNjcmlwdCBzdGFydHMgYXQgaW5kZXggMy0zPTAsIHNjcmlwdCBzdGFydHNcbiAgLy8gYXQgaW5kZXggMy0yPTEsIHRleHQgc3RhcnRzIGF0IDMtMT0yLCBhbmQgZGlzcGxheSBzdGFydHMgYXQgbWluKDIsMy0wKT0yXG4gIHZhciBzdGFydCA9IE1hdGgubWluKDIsIDMgLSBvcHRpb25zLnN0eWxlLnNpemUpO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNlcXVlbmNlW2ldLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgdGhlIGxhc3QgZGVsaW1pdGVyLCBzbyB3ZSBqdXN0IGJyZWFrIHRoZSBsb29wIG5vdy5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBtZXRyaWNzID0gZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIG1ha2VDdXN0b21TaXplZERlbGltID0gZnVuY3Rpb24gbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBEZWNpZGUgd2hhdCBzZXF1ZW5jZSB0byB1c2VcblxuXG4gIHZhciBzZXF1ZW5jZTtcblxuICBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHNlcXVlbmNlID0gc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTGFyZ2VEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrQWx3YXlzRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gLy8gTG9vayB0aHJvdWdoIHRoZSBzZXF1ZW5jZVxuXG5cbiAgdmFyIGRlbGltVHlwZSA9IHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpOyAvLyBHZXQgdGhlIGRlbGltaXRlciBmcm9tIGZvbnQgZ2x5cGhzLlxuICAvLyBEZXBlbmRpbmcgb24gdGhlIHNlcXVlbmNlIGVsZW1lbnQgd2UgZGVjaWRlZCBvbiwgY2FsbCB0aGVcbiAgLy8gYXBwcm9wcmlhdGUgZnVuY3Rpb24uXG5cbiAgaWYgKGRlbGltVHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gbWFrZVNtYWxsRGVsaW0oZGVsaW0sIGRlbGltVHlwZS5zdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgcmV0dXJuIG1ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgICB9XG59O1xuLyoqXG4gKiBNYWtlIGEgZGVsaW1pdGVyIGZvciB1c2Ugd2l0aCBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLCBnaXZlbiBhIGhlaWdodCBhbmQgZGVwdGhcbiAqIG9mIGFuIGV4cHJlc3Npb24gdGhhdCB0aGUgZGVsaW1pdGVycyBzdXJyb3VuZC5cbiAqL1xuXG5cbnZhciBtYWtlTGVmdFJpZ2h0RGVsaW0gPSBmdW5jdGlvbiBtYWtlTGVmdFJpZ2h0RGVsaW0oZGVsaW0sIGhlaWdodCwgZGVwdGgsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gV2UgYWx3YXlzIGNlbnRlciBcXGxlZnQvXFxyaWdodCBkZWxpbWl0ZXJzLCBzbyB0aGUgYXhpcyBpcyBhbHdheXMgc2hpZnRlZFxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICogb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gVGFrZW4gZnJvbSBUZVggc291cmNlLCB0ZXgud2ViLCBmdW5jdGlvbiBtYWtlX2xlZnRfcmlnaHRcblxuICB2YXIgZGVsaW1pdGVyRmFjdG9yID0gOTAxO1xuICB2YXIgZGVsaW1pdGVyRXh0ZW5kID0gNS4wIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gIHZhciBtYXhEaXN0RnJvbUF4aXMgPSBNYXRoLm1heChoZWlnaHQgLSBheGlzSGVpZ2h0LCBkZXB0aCArIGF4aXNIZWlnaHQpO1xuICB2YXIgdG90YWxIZWlnaHQgPSBNYXRoLm1heCggLy8gSW4gcmVhbCBUZVgsIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSB1c2luZyBpbnRlZ3JhbCB2YWx1ZXMgd2hpY2ggYXJlXG4gIC8vIDY1NTM2IHBlciBwdCwgb3IgNjU1MzYwIHBlciBlbS4gU28sIHRoZSBkaXZpc2lvbiBoZXJlIHRydW5jYXRlcyBpblxuICAvLyBUZVggYnV0IGRvZXNuJ3QgaGVyZSwgcHJvZHVjaW5nIGRpZmZlcmVudCByZXN1bHRzLiBJZiB3ZSB3YW50ZWQgdG9cbiAgLy8gZXhhY3RseSBtYXRjaCBUZVgncyBjYWxjdWxhdGlvbiwgd2UgY291bGQgZG9cbiAgLy8gICBNYXRoLmZsb29yKDY1NTM2MCAqIG1heERpc3RGcm9tQXhpcyAvIDUwMCkgKlxuICAvLyAgICBkZWxpbWl0ZXJGYWN0b3IgLyA2NTUzNjBcbiAgLy8gKFRvIHNlZSB0aGUgZGlmZmVyZW5jZSwgY29tcGFyZVxuICAvLyAgICB4Xnt4XntcXGxlZnQoXFxydWxlezAuMWVtfXswLjY4ZW19XFxyaWdodCl9fVxuICAvLyBpbiBUZVggYW5kIEthVGVYKVxuICBtYXhEaXN0RnJvbUF4aXMgLyA1MDAgKiBkZWxpbWl0ZXJGYWN0b3IsIDIgKiBtYXhEaXN0RnJvbUF4aXMgLSBkZWxpbWl0ZXJFeHRlbmQpOyAvLyBGaW5hbGx5LCB3ZSBkZWZlciB0byBgbWFrZUN1c3RvbVNpemVkRGVsaW1gIHdpdGggb3VyIGNhbGN1bGF0ZWQgdG90YWxcbiAgLy8gaGVpZ2h0XG5cbiAgcmV0dXJuIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCB0b3RhbEhlaWdodCwgdHJ1ZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG59O1xuXG52YXIgZGVsaW1pdGVyID0ge1xuICBzcXJ0SW1hZ2U6IG1ha2VTcXJ0SW1hZ2UsXG4gIHNpemVkRGVsaW06IG1ha2VTaXplZERlbGltLFxuICBzaXplVG9NYXhIZWlnaHQ6IHNpemVUb01heEhlaWdodCxcbiAgY3VzdG9tU2l6ZWREZWxpbTogbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn07XG5cbi8vIEV4dHJhIGRhdGEgbmVlZGVkIGZvciB0aGUgZGVsaW1pdGVyIGhhbmRsZXIgZG93biBiZWxvd1xudmFyIGRlbGltaXRlclNpemVzID0ge1xuICBcIlxcXFxiaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiA0XG4gIH1cbn07XG52YXIgZGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiPFwiLCBcIj5cIiwgXCJcXFxcbGFuZ2xlXCIsIFwiXFx1MjdlOFwiLCBcIlxcXFxyYW5nbGVcIiwgXCJcXHUyN2U5XCIsIFwiXFxcXGx0XCIsIFwiXFxcXGd0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN2VlXCIsIFwiXFx1MjdlZlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM2IwXCIsIFwiXFx1MjNiMVwiLCBcIi9cIiwgXCJcXFxcYmFja3NsYXNoXCIsIFwifFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXHxcIiwgXCJcXFxcVmVydFwiLCBcIlxcXFx1cGFycm93XCIsIFwiXFxcXFVwYXJyb3dcIiwgXCJcXFxcZG93bmFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcIi5cIl07XG5cbi8vIERlbGltaXRlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNoZWNrRGVsaW1pdGVyKGRlbGltLCBjb250ZXh0KSB7XG4gIHZhciBzeW1EZWxpbSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoZGVsaW0pO1xuXG4gIGlmIChzeW1EZWxpbSAmJiB1dGlscy5jb250YWlucyhkZWxpbWl0ZXJzLCBzeW1EZWxpbS50ZXh0KSkge1xuICAgIHJldHVybiBzeW1EZWxpbTtcbiAgfSBlbHNlIGlmIChzeW1EZWxpbSkge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXIgJ1wiICsgc3ltRGVsaW0udGV4dCArIFwiJyBhZnRlciAnXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCInXCIsIGRlbGltKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJ1wiICsgZGVsaW0udHlwZSArIFwiJ1wiLCBkZWxpbSk7XG4gIH1cbn1cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImRlbGltc2l6aW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcYmlnbFwiLCBcIlxcXFxCaWdsXCIsIFwiXFxcXGJpZ2dsXCIsIFwiXFxcXEJpZ2dsXCIsIFwiXFxcXGJpZ3JcIiwgXCJcXFxcQmlnclwiLCBcIlxcXFxiaWdnclwiLCBcIlxcXFxCaWdnclwiLCBcIlxcXFxiaWdtXCIsIFwiXFxcXEJpZ21cIiwgXCJcXFxcYmlnZ21cIiwgXCJcXFxcQmlnZ21cIiwgXCJcXFxcYmlnXCIsIFwiXFxcXEJpZ1wiLCBcIlxcXFxiaWdnXCIsIFwiXFxcXEJpZ2dcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wicHJpbWl0aXZlXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIHN0aWxsIGNvdW50IGFzIGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGRvbid0XG4gICAgICAvLyBzaG93IGFueXRoaW5nLlxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdKTtcbiAgICB9IC8vIFVzZSBkZWxpbWl0ZXIuc2l6ZWREZWxpbSB0byBnZW5lcmF0ZSB0aGUgZGVsaW1pdGVyLlxuXG5cbiAgICByZXR1cm4gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIGdyb3VwLnNpemUsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtncm91cC5tY2xhc3NdKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZ3JvdXAgPT4ge1xuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltICE9PSBcIi5cIikge1xuICAgICAgY2hpbGRyZW4ucHVzaChtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSkpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBjaGlsZHJlbik7XG5cbiAgICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICAvLyBPbmx5IHNvbWUgb2YgdGhlIGRlbGltc2l6aW5nIGZ1bmN0aW9ucyBhY3QgYXMgZmVuY2VzLCBhbmQgdGhleVxuICAgICAgLy8gcmV0dXJuIFwibW9wZW5cIiBvciBcIm1jbG9zZVwiIG1jbGFzcy5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFeHBsaWNpdGx5IGRpc2FibGUgZmVuY2luZyBpZiBpdCdzIG5vdCBhIGZlbmNlLCB0byBvdmVycmlkZSB0aGVcbiAgICAgIC8vIGRlZmF1bHRzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcImZhbHNlXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBzaXplID0gbWFrZUVtKGRlbGltaXRlci5zaXplVG9NYXhIZWlnaHRbZ3JvdXAuc2l6ZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWluc2l6ZVwiLCBzaXplKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1heHNpemVcIiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxcXHJpZ2h0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodC1yaWdodFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KS50ZXh0LFxuICAgICAgY29sb3IgLy8gdW5kZWZpbmVkIGlmIG5vdCBzZXQgdmlhIFxcY29sb3JcblxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICBuYW1lczogW1wiXFxcXGxlZnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcbiAgICB2YXIgcGFyc2VyID0gY29udGV4dC5wYXJzZXI7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuXG4gICAgKytwYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIHBhcnNlRXhwcmVzc2lvbiBzdG9wcyBiZWZvcmUgJ1xcXFxyaWdodCdcblxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgLS1wYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIENoZWNrIHRoZSBuZXh0IHRva2VuXG5cbiAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXHJpZ2h0XCIsIGZhbHNlKTtcbiAgICB2YXIgcmlnaHQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImxlZnRyaWdodC1yaWdodFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keSxcbiAgICAgIGxlZnQ6IGRlbGltLnRleHQsXG4gICAgICByaWdodDogcmlnaHQuZGVsaW0sXG4gICAgICByaWdodENvbG9yOiByaWdodC5jb2xvclxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApOyAvLyBCdWlsZCB0aGUgaW5uZXIgZXhwcmVzc2lvblxuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5sZWZ0ICE9PSBcIi5cIikge1xuICAgICAgdmFyIGxlZnROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoZ3JvdXAubGVmdCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIGxlZnROb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGlubmVyLnVuc2hpZnQobGVmdE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5yaWdodCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciByaWdodE5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5yaWdodCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG5cbiAgICAgIGlmIChncm91cC5yaWdodENvbG9yKSB7XG4gICAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAucmlnaHRDb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGlubmVyLnB1c2gocmlnaHROb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyhpbm5lcik7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1pZGRsZVwiLFxuICBuYW1lczogW1wiXFxcXG1pZGRsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuXG4gICAgaWYgKCFjb250ZXh0LnBhcnNlci5sZWZ0cmlnaHREZXB0aCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbWlkZGxlIHdpdGhvdXQgcHJlY2VkaW5nIFxcXFxsZWZ0XCIsIGRlbGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtaWRkbGVcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWlkZGxlRGVsaW07XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICBtaWRkbGVEZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkZGxlRGVsaW0gPSBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgMSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW10pO1xuICAgICAgdmFyIGlzTWlkZGxlID0ge1xuICAgICAgICBkZWxpbTogZ3JvdXAuZGVsaW0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH07IC8vIFByb3BlcnR5IGBpc01pZGRsZWAgbm90IGRlZmluZWQgb24gYHNwYW5gLiBJdCBpcyBvbmx5IHVzZWQgaW5cbiAgICAgIC8vIHRoaXMgZmlsZSBhYm92ZS5cbiAgICAgIC8vIFRPRE86IEZpeCB0aGlzIHZpb2xhdGlvbiBvZiB0aGUgYHNwYW5gIHR5cGUgYW5kIHBvc3NpYmx5IHJlbmFtZVxuICAgICAgLy8gdGhpbmdzIHNpbmNlIGBpc01pZGRsZWAgc291bmRzIGxpa2UgYSBib29sZWFuLCBidXQgaXMgYSBzdHJ1Y3QuXG4gICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIG1pZGRsZURlbGltLmlzTWlkZGxlID0gaXNNaWRkbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pZGRsZURlbGltO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBBIEZpcmVmb3ggXFxtaWRkbGUgd2lsbCBzdHJldGNoIGEgY2hhcmFjdGVyIHZlcnRpY2FsbHkgb25seSBpZiBpdFxuICAgIC8vIGlzIGluIHRoZSBmZW5jZSBwYXJ0IG9mIHRoZSBvcGVyYXRvciBkaWN0aW9uYXJ5IGF0OlxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwzL2FwcGVuZGl4Yy5odG1sLlxuICAgIC8vIFNvIHdlIG5lZWQgdG8gYXZvaWQgVSsyMjIzIGFuZCB1c2UgcGxhaW4gXCJ8XCIgaW5zdGVhZC5cbiAgICB2YXIgdGV4dE5vZGUgPSBncm91cC5kZWxpbSA9PT0gXCJcXFxcdmVydFwiIHx8IGdyb3VwLmRlbGltID09PSBcInxcIiA/IG1ha2VUZXh0KFwifFwiLCBcInRleHRcIikgOiBtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSk7XG4gICAgdmFyIG1pZGRsZU5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0Tm9kZV0pO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpOyAvLyBNYXRoTUwgZ2l2ZXMgNS8xOGVtIHNwYWNpbmcgdG8gZWFjaCA8bW8+IGVsZW1lbnQuXG4gICAgLy8gXFxtaWRkbGUgc2hvdWxkIGdldCBkZWxpbWl0ZXIgc3BhY2luZyBpbnN0ZWFkLlxuXG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgcmV0dXJuIG1pZGRsZU5vZGU7XG4gIH1cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkNyA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBcXGNhbmNlbCwgXFxiY2FuY2VsLCBcXHhjYW5jZWwsIFxcc291dCwgXFxmYm94LCBcXGNvbG9yYm94LCBcXGZjb2xvcmJveCwgXFxwaGFzZVxuICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAvLyB0aGVtIGluIGEgc3Bhbi5cbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuICB2YXIgc2NhbGUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB2YXIgaW1nO1xuICB2YXIgaW1nU2hpZnQgPSAwOyAvLyBJbiB0aGUgTGFUZVggY2FuY2VsIHBhY2thZ2UsIGxpbmUgZ2VvbWV0cnkgaXMgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzdWJqZWN0IGlzIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCwgb3IgdmljZSB2ZXJzYS5cbiAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgd2lkdGggb2YgYSBncm91cCwgc28gYXMgYSBwcm94eSwgd2UgdGVzdCBpZlxuICAvLyB0aGUgc3ViamVjdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuIFRoaXMgY2FwdHVyZXMgbW9zdCBvZiB0aGVcbiAgLy8gc3ViamVjdHMgdGhhdCBzaG91bGQgZ2V0IHRoZSBcInRhbGxcIiB0cmVhdG1lbnQuXG5cbiAgdmFyIGlzU2luZ2xlQ2hhciA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGdyb3VwLmJvZHkpO1xuXG4gIGlmIChsYWJlbCA9PT0gXCJzb3V0XCIpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBcInNvdXRcIl0pO1xuICAgIGltZy5oZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MgLyBzY2FsZTtcbiAgICBpbWdTaGlmdCA9IC0wLjUgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgfSBlbHNlIGlmIChsYWJlbCA9PT0gXCJwaGFzZVwiKSB7XG4gICAgLy8gU2V0IGEgY291cGxlIG9mIGRpbWVuc2lvbnMgZnJvbSB0aGUgc3RlaW5tZXR6IHBhY2thZ2UuXG4gICAgdmFyIGxpbmVXZWlnaHQgPSBjYWxjdWxhdGVTaXplKHtcbiAgICAgIG51bWJlcjogMC42LFxuICAgICAgdW5pdDogXCJwdFwiXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdmFyIGNsZWFyYW5jZSA9IGNhbGN1bGF0ZVNpemUoe1xuICAgICAgbnVtYmVyOiAwLjM1LFxuICAgICAgdW5pdDogXCJleFwiXG4gICAgfSwgb3B0aW9ucyk7IC8vIFByZXZlbnQgc2l6ZSBjaGFuZ2VzIGxpa2UgXFxIdWdlIGZyb20gYWZmZWN0aW5nIGxpbmUgdGhpY2tuZXNzXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpO1xuICAgIHNjYWxlID0gc2NhbGUgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIHZhciBhbmdsZUhlaWdodCA9IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZVdlaWdodCArIGNsZWFyYW5jZTsgLy8gUmVzZXJ2ZSBhIGxlZnQgcGFkIGZvciB0aGUgYW5nbGUuXG5cbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IG1ha2VFbShhbmdsZUhlaWdodCAvIDIgKyBsaW5lV2VpZ2h0KTsgLy8gQ3JlYXRlIGFuIFNWR1xuXG4gICAgdmFyIHZpZXdCb3hIZWlnaHQgPSBNYXRoLmZsb29yKDEwMDAgKiBhbmdsZUhlaWdodCAqIHNjYWxlKTtcbiAgICB2YXIgcGF0aCA9IHBoYXNlUGF0aCh2aWV3Qm94SGVpZ2h0KTtcbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtuZXcgUGF0aE5vZGUoXCJwaGFzZVwiLCBwYXRoKV0sIHtcbiAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHZpZXdCb3hIZWlnaHQgLyAxMDAwKSxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCA0MDAwMDAgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwieE1pbllNaW4gc2xpY2VcIlxuICAgIH0pOyAvLyBXcmFwIGl0IGluIGEgc3BhbiB3aXRoIG92ZXJmbG93OiBoaWRkZW4uXG5cbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXCJoaWRlLXRhaWxcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gICAgaW1nLnN0eWxlLmhlaWdodCA9IG1ha2VFbShhbmdsZUhlaWdodCk7XG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGxpbmVXZWlnaHQgKyBjbGVhcmFuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gQWRkIGhvcml6b250YWwgcGFkZGluZ1xuICAgIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgICAgaWYgKCFpc1NpbmdsZUNoYXIpIHtcbiAgICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiY2FuY2VsLXBhZFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYW5nbHBhZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYm94cGFkXCIpO1xuICAgIH0gLy8gQWRkIHZlcnRpY2FsIHBhZGRpbmdcblxuXG4gICAgdmFyIHRvcFBhZCA9IDA7XG4gICAgdmFyIGJvdHRvbVBhZCA9IDA7XG4gICAgdmFyIHJ1bGVUaGlja25lc3MgPSAwOyAvLyByZWY6IGNhbmNlbCBwYWNrYWdlOiBcXGFkdmFuY2VcXHRvdGFsaGVpZ2h0MlxccEAgJSBcIisyXCJcblxuICAgIGlmICgvYm94Ly50ZXN0KGxhYmVsKSkge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICAgICApO1xuICAgICAgdG9wUGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICAgIGJvdHRvbVBhZCA9IHRvcFBhZDtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcywgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzKTtcbiAgICAgIHRvcFBhZCA9IDQgKiBydWxlVGhpY2tuZXNzOyAvLyBnYXAgPSAzIMOXIGxpbmUsIHBsdXMgdGhlIGxpbmUgaXRzZWxmLlxuXG4gICAgICBib3R0b21QYWQgPSBNYXRoLm1heCgwLCAwLjI1IC0gaW5uZXIuZGVwdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3BQYWQgPSBpc1NpbmdsZUNoYXIgPyAwLjIgOiAwO1xuICAgICAgYm90dG9tUGFkID0gdG9wUGFkO1xuICAgIH1cblxuICAgIGltZyA9IHN0cmV0Y2h5LmVuY2xvc2VTcGFuKGlubmVyLCBsYWJlbCwgdG9wUGFkLCBib3R0b21QYWQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJXaWR0aCA9IG1ha2VFbShydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIiAmJiBydWxlVGhpY2tuZXNzICE9PSAwLjA0OSkge1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gbWFrZUVtKHJ1bGVUaGlja25lc3MpO1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgfVxuXG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGJvdHRvbVBhZDtcblxuICAgIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBncm91cC5iYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICAgIGlmIChncm91cC5ib3JkZXJDb2xvcikge1xuICAgICAgICBpbWcuc3R5bGUuYm9yZGVyQ29sb3IgPSBncm91cC5ib3JkZXJDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdmxpc3Q7XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gUHV0IHRoZSBjb2xvciBiYWNrZ3JvdW5kIGJlaGluZCBpbm5lcjtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNsYXNzZXMgPSAvY2FuY2VsfHBoYXNlLy50ZXN0KGxhYmVsKSA/IFtcInN2Zy1hbGlnblwiXSA6IFtdO1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gV3JpdGUgdGhlIFxcY2FuY2VsIHN0cm9rZSBvbiB0b3Agb2YgaW5uZXIuXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogY2xhc3Nlc1xuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgIC8vIFRoZSBjYW5jZWwgcGFja2FnZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBjYW5jZWwgbGluZXMgYWRkIHRoZWlyIGhlaWdodFxuICAgIC8vIHRvIHRoZSBleHByZXNzaW9uLCBidXQgdGVzdHMgc2hvdyB0aGF0IGlzbid0IGhvdyBpdCBhY3R1YWxseSB3b3Jrcy5cbiAgICB2bGlzdC5oZWlnaHQgPSBpbm5lci5oZWlnaHQ7XG4gICAgdmxpc3QuZGVwdGggPSBpbm5lci5kZXB0aDtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSAmJiAhaXNTaW5nbGVDaGFyKSB7XG4gICAgLy8gY2FuY2VsIGRvZXMgbm90IGNyZWF0ZSBob3JpeiBzcGFjZSBmb3IgaXRzIGxpbmUgZXh0ZW5zaW9uLlxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwiY2FuY2VsLWxhcFwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ2ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBmYm94c2VwID0gMDtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5sYWJlbC5pbmRleE9mKFwiY29sb3Jib3hcIikgPiAtMSA/IFwibXBhZGRlZFwiIDogXCJtZW5jbG9zZVwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gIHN3aXRjaCAoZ3JvdXAubGFiZWwpIHtcbiAgICBjYXNlIFwiXFxcXGNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInVwZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYmNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxwaGFzZVwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInBoYXNvcmFuZ2xlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYW5nbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImFjdHVhcmlhbFwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxmY29sb3Jib3hcIjpcbiAgICBjYXNlIFwiXFxcXGNvbG9yYm94XCI6XG4gICAgICAvLyA8bWVuY2xvc2U+IGRvZXNuJ3QgaGF2ZSBhIGdvb2Qgbm90YXRpb24gb3B0aW9uLiBTbyB1c2UgPG1wYWRkZWQ+XG4gICAgICAvLyBpbnN0ZWFkLiBTZXQgc29tZSBhdHRyaWJ1dGVzIHRoYXQgY29tZSBpbmNsdWRlZCB3aXRoIDxtZW5jbG9zZT4uXG4gICAgICBmYm94c2VwID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIDIgKiBmYm94c2VwICsgXCJwdFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIGZib3hzZXAgKyBcInB0XCIpOyAvL1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgZmJveHNlcCArIFwicHRcIik7XG5cbiAgICAgIGlmIChncm91cC5sYWJlbCA9PT0gXCJcXFxcZmNvbG9yYm94XCIpIHtcbiAgICAgICAgdmFyIHRoayA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gdXNlciBvdmVycmlkZVxuICAgICAgICApO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiBcIiArIHRoayArIFwiZW0gc29saWQgXCIgKyBTdHJpbmcoZ3JvdXAuYm9yZGVyQ29sb3IpKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHhjYW5jZWxcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJ1cGRpYWdvbmFsc3RyaWtlIGRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgZ3JvdXAuYmFja2dyb3VuZENvbG9yKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjIsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3JkZXJDb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcImhib3hcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGZib3hcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIiwgXCJcXFxccGhhc2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjQ7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDcsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNlxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGFuZ2xcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wiaGJveFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGFuZ2xcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGVudmlyb25tZW50cy5cbiAqIGBlbnZpcm9ubWVudHMuanNgIGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeSB2aWEgYGVudmlyb25tZW50cy5qc2AuXG4gKi9cbnZhciBfZW52aXJvbm1lbnRzID0ge307XG5mdW5jdGlvbiBkZWZpbmVFbnZpcm9ubWVudChfcmVmKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBuYW1lcyxcbiAgICBwcm9wcyxcbiAgICBoYW5kbGVyLFxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBlbnZpcm9ubWVudHMuXG4gIHZhciBkYXRhID0ge1xuICAgIHR5cGUsXG4gICAgbnVtQXJnczogcHJvcHMubnVtQXJncyB8fCAwLFxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlLFxuICAgIG51bU9wdGlvbmFsQXJnczogMCxcbiAgICBoYW5kbGVyXG4gIH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgIC8vIFRPRE86IFRoZSB2YWx1ZSB0eXBlIG9mIF9lbnZpcm9ubWVudHMgc2hvdWxkIGJlIGEgdHlwZSB1bmlvbiBvZiBhbGxcbiAgICAvLyBwb3NzaWJsZSBgRW52U3BlYzw+YCBwb3NzaWJpbGl0aWVzIGluc3RlYWQgb2YgYEVudlNwZWM8Kj5gLCB3aGljaCBpc1xuICAgIC8vIGFuIGV4aXN0ZW50aWFsIHR5cGUuXG4gICAgX2Vudmlyb25tZW50c1tuYW1lc1tpXV0gPSBkYXRhO1xuICB9XG5cbiAgaWYgKGh0bWxCdWlsZGVyKSB7XG4gICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gIH1cblxuICBpZiAobWF0aG1sQnVpbGRlcikge1xuICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgfVxufVxuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGdsb2JhbC9idWlsdC1pbiBtYWNyb3MuXG4gKiBgbWFjcm9zLmpzYCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkgdmlhIGBtYWNyb3MuanNgLlxuICovXG52YXIgX21hY3JvcyA9IHt9OyAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG9uZSBkYXkgYWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgYW5kIGRvIG1vcmUgdGhpbmdzLlxuXG5mdW5jdGlvbiBkZWZpbmVNYWNybyhuYW1lLCBib2R5KSB7XG4gIF9tYWNyb3NbbmFtZV0gPSBib2R5O1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRITGluZXMocGFyc2VyKSB7XG4gIC8vIFJldHVybiBhbiBhcnJheS4gVGhlIGFycmF5IGxlbmd0aCA9IG51bWJlciBvZiBobGluZXMuXG4gIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdGVsbHMgaWYgdGhlIGxpbmUgaXMgZGFzaGVkLlxuICB2YXIgaGxpbmVJbmZvID0gW107XG4gIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gIHZhciBueHQgPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuXG4gIGlmIChueHQgPT09IFwiXFxcXHJlbGF4XCIpIHtcbiAgICAvLyBcXHJlbGF4IGlzIGFuIGFydGlmYWN0IG9mIHRoZSBcXGNyIG1hY3JvIGJlbG93XG4gICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICAgIG54dCA9IHBhcnNlci5mZXRjaCgpLnRleHQ7XG4gIH1cblxuICB3aGlsZSAobnh0ID09PSBcIlxcXFxobGluZVwiIHx8IG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpIHtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIGhsaW5lSW5mby5wdXNoKG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpO1xuICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgbnh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcbiAgfVxuXG4gIHJldHVybiBobGluZUluZm87XG59XG5cbnZhciB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCA9IGNvbnRleHQgPT4ge1xuICB2YXIgc2V0dGluZ3MgPSBjb250ZXh0LnBhcnNlci5zZXR0aW5ncztcblxuICBpZiAoIXNldHRpbmdzLmRpc3BsYXlNb2RlKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7XCIgKyBjb250ZXh0LmVudk5hbWUgKyBcIn0gY2FuIGJlIHVzZWQgb25seSBpblwiICsgXCIgZGlzcGxheSBtb2RlLlwiKTtcbiAgfVxufTsgLy8gYXV0b1RhZyAoYW4gYXJndW1lbnQgdG8gcGFyc2VBcnJheSkgY2FuIGJlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6XG4vLyAqIHVuZGVmaW5lZDogUmVndWxhciAobm90LXRvcC1sZXZlbCkgYXJyYXk7IG5vIHRhZ3Mgb24gZWFjaCByb3dcbi8vICogdHJ1ZTogQXV0b21hdGljIGVxdWF0aW9uIG51bWJlcmluZywgb3ZlcnJpZGFibGUgYnkgXFx0YWdcbi8vICogZmFsc2U6IFRhZ3MgYWxsb3dlZCBvbiBlYWNoIHJvdywgYnV0IG5vIGF1dG9tYXRpYyBudW1iZXJpbmdcbi8vIFRoaXMgZnVuY3Rpb24gKmRvZXNuJ3QqIHdvcmsgd2l0aCB0aGUgXCJzcGxpdFwiIGVudmlyb25tZW50IG5hbWUuXG5cblxuZnVuY3Rpb24gZ2V0QXV0b1RhZyhuYW1lKSB7XG4gIGlmIChuYW1lLmluZGV4T2YoXCJlZFwiKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbmFtZS5pbmRleE9mKFwiKlwiKSA9PT0gLTE7XG4gIH0gLy8gcmV0dXJuIHVuZGVmaW5lZDtcblxufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIge1xuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgYWRkSm90LFxuICAgIGNvbHMsXG4gICAgYXJyYXlzdHJldGNoLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlLFxuICAgIGF1dG9UYWcsXG4gICAgc2luZ2xlUm93LFxuICAgIGVtcHR5U2luZ2xlUm93LFxuICAgIG1heE51bUNvbHMsXG4gICAgbGVxbm9cbiAgfSA9IF9yZWY7XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuXG4gIGlmICghc2luZ2xlUm93KSB7XG4gICAgLy8gXFxjciBpcyBlcXVpdmFsZW50IHRvIFxcXFwgd2l0aG91dCB0aGUgb3B0aW9uYWwgc2l6ZSBhcmd1bWVudCAoc2VlIGJlbG93KVxuICAgIC8vIFRPRE86IHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aGVuIFxcY3IgaXMgdXNlZCBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG4gICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNyXCIsIFwiXFxcXFxcXFxcXFxccmVsYXhcIik7XG4gIH0gLy8gR2V0IGN1cnJlbnQgYXJyYXlzdHJldGNoIGlmIGl0J3Mgbm90IHNldCBieSB0aGUgZW52aXJvbm1lbnRcblxuXG4gIGlmICghYXJyYXlzdHJldGNoKSB7XG4gICAgdmFyIHN0cmV0Y2ggPSBwYXJzZXIuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KFwiXFxcXGFycmF5c3RyZXRjaFwiKTtcblxuICAgIGlmIChzdHJldGNoID09IG51bGwpIHtcbiAgICAgIC8vIERlZmF1bHQgXFxhcnJheXN0cmV0Y2ggZnJvbSBsdHRhYi5kdHhcbiAgICAgIGFycmF5c3RyZXRjaCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5c3RyZXRjaCA9IHBhcnNlRmxvYXQoc3RyZXRjaCk7XG5cbiAgICAgIGlmICghYXJyYXlzdHJldGNoIHx8IGFycmF5c3RyZXRjaCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107XG4gIHZhciB0YWdzID0gYXV0b1RhZyAhPSBudWxsID8gW10gOiB1bmRlZmluZWQ7IC8vIGFtc21hdGggdXNlcyBcXGdsb2JhbFxcQGVxbnN3dHJ1ZSBhbmQgXFxnbG9iYWxcXEBlcW5zd2ZhbHNlIHRvIHJlcHJlc2VudFxuICAvLyB3aGV0aGVyIHRoaXMgcm93IHNob3VsZCBoYXZlIGFuIGVxdWF0aW9uIG51bWJlci4gIFNpbXVsYXRlIHRoaXMgd2l0aFxuICAvLyBhIFxcQGVxbnN3IG1hY3JvIHNldCB0byAxIG9yIDAuXG5cbiAgZnVuY3Rpb24gYmVnaW5Sb3coKSB7XG4gICAgaWYgKGF1dG9UYWcpIHtcbiAgICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxAZXFuc3dcIiwgXCIxXCIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZFJvdygpIHtcbiAgICBpZiAodGFncykge1xuICAgICAgaWYgKHBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICAgICAgdGFncy5wdXNoKHBhcnNlci5zdWJwYXJzZShbbmV3IFRva2VuKFwiXFxcXGRmQHRhZ1wiKV0pKTtcbiAgICAgICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGRmQHRhZ1wiLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFncy5wdXNoKEJvb2xlYW4oYXV0b1RhZykgJiYgcGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXEBlcW5zd1wiKSA9PT0gXCIxXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJlZ2luUm93KCk7IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgc2luZ2xlUm93ID8gXCJcXFxcZW5kXCIgOiBcIlxcXFxcXFxcXCIpO1xuICAgIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjZWxsID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBjZWxsXG4gICAgfTtcblxuICAgIGlmIChzdHlsZSkge1xuICAgICAgY2VsbCA9IHtcbiAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIikge1xuICAgICAgaWYgKG1heE51bUNvbHMgJiYgcm93Lmxlbmd0aCA9PT0gbWF4TnVtQ29scykge1xuICAgICAgICBpZiAoc2luZ2xlUm93IHx8IGNvbFNlcGFyYXRpb25UeXBlKSB7XG4gICAgICAgICAgLy8ge2VxdWF0aW9ufSBvciB7c3BsaXR9XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJlwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB7YXJyYXl9IGVudmlyb25tZW50XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInRleHRFbnZcIiwgXCJUb28gZmV3IGNvbHVtbnMgXCIgKyBcInNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgZW5kUm93KCk7IC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS4gIEhvd2V2ZXIsIEFNUyBlbnZpcm9ubWVudHMga2VlcCB0aGVcbiAgICAgIC8vIGVtcHR5IHJvdyBpZiBpdCdzIHRoZSBvbmx5IG9uZS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cblxuICAgICAgaWYgKHJvdy5sZW5ndGggPT09IDEgJiYgY2VsbC50eXBlID09PSBcInN0eWxpbmdcIiAmJiBjZWxsLmJvZHlbMF0uYm9keS5sZW5ndGggPT09IDAgJiYgKGJvZHkubGVuZ3RoID4gMSB8fCAhZW1wdHlTaW5nbGVSb3cpKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICB2YXIgc2l6ZSA9IHZvaWQgMDsgLy8gXFxkZWZcXExldEB7XFxsZXRcXFxcXFxtYXRoQGNyfVxuICAgICAgLy8gXFxkZWZcXG1hdGhAY3J7Li4uXFxtYXRoQGNyQH1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQHtcXG5ld0BpZm5leHRjaGFyW1xcbWF0aEBjckBAe1xcbWF0aEBjckBAW1xcekBdfX1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBbIzFdey4uLlxcbWF0aEBjckBAQC4uLn1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBAe1xcY3J9XG5cbiAgICAgIGlmIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwiIFwiKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJvd0dhcHMucHVzaChzaXplID8gc2l6ZS52YWx1ZSA6IG51bGwpO1xuICAgICAgZW5kUm93KCk7IC8vIGNoZWNrIGZvciBcXGhsaW5lKHMpIGZvbGxvd2luZyB0aGUgcm93IHNlcGFyYXRvclxuXG4gICAgICBoTGluZXNCZWZvcmVSb3cucHVzaChnZXRITGluZXMocGFyc2VyKSk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIGJvZHkucHVzaChyb3cpO1xuICAgICAgYmVnaW5Sb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCAmIG9yIFxcXFxcXFxcIG9yIFxcXFxjciBvciBcXFxcZW5kXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgIH1cbiAgfSAvLyBFbmQgY2VsbCBncm91cFxuXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBFbmQgYXJyYXkgZ3JvdXAgZGVmaW5pbmcgXFxjclxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaCxcbiAgICBib2R5LFxuICAgIGNvbHMsXG4gICAgcm93R2FwcyxcbiAgICBoc2tpcEJlZm9yZUFuZEFmdGVyLFxuICAgIGhMaW5lc0JlZm9yZVJvdyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZSxcbiAgICB0YWdzLFxuICAgIGxlcW5vXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zbGljZSgwLCAxKSA9PT0gXCJkXCIpIHtcbiAgICByZXR1cm4gXCJkaXNwbGF5XCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG59XG5cbnZhciBodG1sQnVpbGRlciQ2ID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHI7XG4gIHZhciBjO1xuICB2YXIgbnIgPSBncm91cC5ib2R5Lmxlbmd0aDtcbiAgdmFyIGhMaW5lc0JlZm9yZVJvdyA9IGdyb3VwLmhMaW5lc0JlZm9yZVJvdztcbiAgdmFyIG5jID0gMDtcbiAgdmFyIGJvZHkgPSBuZXcgQXJyYXkobnIpO1xuICB2YXIgaGxpbmVzID0gW107XG4gIHZhciBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoIC8vIEZyb20gTGFUZVggXFxzaG93dGhlXFxhcnJheXJ1bGV3aWR0aC4gRXF1YWxzIDAuMDQgZW0uXG4gIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5hcnJheVJ1bGVXaWR0aCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICk7IC8vIEhvcml6b250YWwgc3BhY2luZ1xuXG4gIHZhciBwdCA9IDEgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgdmFyIGFycmF5Y29sc2VwID0gNSAqIHB0OyAvLyBkZWZhdWx0IHZhbHVlLCBpLmUuIFxcYXJyYXljb2xzZXAgaW4gYXJ0aWNsZS5jbHNcblxuICBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgJiYgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwic21hbGxcIikge1xuICAgIC8vIFdlJ3JlIGluIGEge3NtYWxsbWF0cml4fS4gRGVmYXVsdCBjb2x1bW4gc3BhY2UgaXMgXFx0aGlja3NwYWNlLFxuICAgIC8vIGkuZS4gNS8xOGVtID0gMC4yNzc4ZW0sIHBlciBhbXNtYXRoLmR0eCBmb3Ige3NtYWxsbWF0cml4fS5cbiAgICAvLyBCdXQgdGhhdCBuZWVkcyBhZGp1c3RtZW50IGJlY2F1c2UgTGFUZVggYXBwbGllcyBcXHNjcmlwdHN0eWxlIHRvIHRoZVxuICAgIC8vIGVudGlyZSBhcnJheSwgaW5jbHVkaW5nIHRoZSBjb2xzcGFjZSwgYnV0IHRoaXMgZnVuY3Rpb24gYXBwbGllc1xuICAgIC8vIFxcc2NyaXB0c3R5bGUgb25seSBpbnNpZGUgZWFjaCBlbGVtZW50LlxuICAgIHZhciBsb2NhbE11bHRpcGxpZXIgPSBvcHRpb25zLmhhdmluZ1N0eWxlKFN0eWxlJDEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtcbiAgICBhcnJheWNvbHNlcCA9IDAuMjc3OCAqIChsb2NhbE11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyKTtcbiAgfSAvLyBWZXJ0aWNhbCBzcGFjaW5nXG5cblxuICB2YXIgYmFzZWxpbmVza2lwID0gZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIiA/IGNhbGN1bGF0ZVNpemUoe1xuICAgIG51bWJlcjogMyxcbiAgICB1bml0OiBcImV4XCJcbiAgfSwgb3B0aW9ucykgOiAxMiAqIHB0OyAvLyBzZWUgc2l6ZTEwLmNsb1xuICAvLyBEZWZhdWx0IFxcam90IGZyb20gbHRtYXRoLmR0eFxuICAvLyBUT0RPKGVkZW1haW5lKTogYWxsb3cgb3ZlcnJpZGluZyBcXGpvdCB2aWEgXFxzZXRsZW5ndGggKCM2ODcpXG5cbiAgdmFyIGpvdCA9IDMgKiBwdDtcbiAgdmFyIGFycmF5c2tpcCA9IGdyb3VwLmFycmF5c3RyZXRjaCAqIGJhc2VsaW5lc2tpcDtcbiAgdmFyIGFyc3RydXRIZWlnaHQgPSAwLjcgKiBhcnJheXNraXA7IC8vIFxcc3RydXRib3ggaW4gbHRmc3N0cmMuZHR4IGFuZFxuXG4gIHZhciBhcnN0cnV0RGVwdGggPSAwLjMgKiBhcnJheXNraXA7IC8vIFxcQGFyc3RydXRib3ggaW4gbHR0YWIuZHR4XG5cbiAgdmFyIHRvdGFsSGVpZ2h0ID0gMDsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocykgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXksIGlmIGFueS5cblxuICBmdW5jdGlvbiBzZXRITGluZVBvcyhobGluZXNJbkdhcCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGxpbmVzSW5HYXAubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB0b3RhbEhlaWdodCArPSAwLjI1O1xuICAgICAgfVxuXG4gICAgICBobGluZXMucHVzaCh7XG4gICAgICAgIHBvczogdG90YWxIZWlnaHQsXG4gICAgICAgIGlzRGFzaGVkOiBobGluZXNJbkdhcFtpXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93WzBdKTtcblxuICBmb3IgKHIgPSAwOyByIDwgZ3JvdXAuYm9keS5sZW5ndGg7ICsrcikge1xuICAgIHZhciBpbnJvdyA9IGdyb3VwLmJvZHlbcl07XG4gICAgdmFyIGhlaWdodCA9IGFyc3RydXRIZWlnaHQ7IC8vIFxcQGFycmF5IGFkZHMgYW4gXFxAYXJzdHJ1dFxuXG4gICAgdmFyIGRlcHRoID0gYXJzdHJ1dERlcHRoOyAvLyB0byBlYWNoIHRvdyAodmlhIHRoZSB0ZW1wbGF0ZSlcblxuICAgIGlmIChuYyA8IGlucm93Lmxlbmd0aCkge1xuICAgICAgbmMgPSBpbnJvdy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG91dHJvdyA9IG5ldyBBcnJheShpbnJvdy5sZW5ndGgpO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGlucm93Lmxlbmd0aDsgKytjKSB7XG4gICAgICB2YXIgZWx0ID0gYnVpbGRHcm91cCQxKGlucm93W2NdLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGRlcHRoIDwgZWx0LmRlcHRoKSB7XG4gICAgICAgIGRlcHRoID0gZWx0LmRlcHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGVpZ2h0IDwgZWx0LmhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSBlbHQuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBvdXRyb3dbY10gPSBlbHQ7XG4gICAgfVxuXG4gICAgdmFyIHJvd0dhcCA9IGdyb3VwLnJvd0dhcHNbcl07XG4gICAgdmFyIGdhcCA9IDA7XG5cbiAgICBpZiAocm93R2FwKSB7XG4gICAgICBnYXAgPSBjYWxjdWxhdGVTaXplKHJvd0dhcCwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChnYXAgPiAwKSB7XG4gICAgICAgIC8vIFxcQGFyZ2FycmF5Y3JcbiAgICAgICAgZ2FwICs9IGFyc3RydXREZXB0aDtcblxuICAgICAgICBpZiAoZGVwdGggPCBnYXApIHtcbiAgICAgICAgICBkZXB0aCA9IGdhcDsgLy8gXFxAeGFyZ2FycmF5Y3JcbiAgICAgICAgfVxuXG4gICAgICAgIGdhcCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBJbiBBTVMgbXVsdGlsaW5lIGVudmlyb25tZW50cyBzdWNoIGFzIGFsaWduZWQgYW5kIGdhdGhlcmVkLCByb3dzXG4gICAgLy8gY29ycmVzcG9uZCB0byBsaW5lcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBcXGpvdCBhZGRlZCB0byB0aGVcbiAgICAvLyBcXGJhc2VsaW5lc2tpcCB2aWEgXFxvcGVudXAuXG5cblxuICAgIGlmIChncm91cC5hZGRKb3QpIHtcbiAgICAgIGRlcHRoICs9IGpvdDtcbiAgICB9XG5cbiAgICBvdXRyb3cuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG91dHJvdy5kZXB0aCA9IGRlcHRoO1xuICAgIHRvdGFsSGVpZ2h0ICs9IGhlaWdodDtcbiAgICBvdXRyb3cucG9zID0gdG90YWxIZWlnaHQ7XG4gICAgdG90YWxIZWlnaHQgKz0gZGVwdGggKyBnYXA7IC8vIFxcQHlhcmdhcnJheWNyXG5cbiAgICBib2R5W3JdID0gb3V0cm93OyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSwgaWYgYW55LlxuXG4gICAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93W3IgKyAxXSk7XG4gIH1cblxuICB2YXIgb2Zmc2V0ID0gdG90YWxIZWlnaHQgLyAyICsgb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHZhciBjb2xEZXNjcmlwdGlvbnMgPSBncm91cC5jb2xzIHx8IFtdO1xuICB2YXIgY29scyA9IFtdO1xuICB2YXIgY29sU2VwO1xuICB2YXIgY29sRGVzY3JOdW07XG4gIHZhciB0YWdTcGFucyA9IFtdO1xuXG4gIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3Muc29tZSh0YWcgPT4gdGFnKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggbWFudWFsIHRhZ3MgYW5kL29yIGF1dG9tYXRpYyBlcXVhdGlvbiBudW1iZXJzLlxuICAgIC8vIENyZWF0ZSBub2RlKHMpLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHRyaWdnZXIgQ1NTIGNvdW50ZXIgaW5jcmVtZW50LlxuICAgIGZvciAociA9IDA7IHIgPCBucjsgKytyKSB7XG4gICAgICB2YXIgcncgPSBib2R5W3JdO1xuICAgICAgdmFyIHNoaWZ0ID0gcncucG9zIC0gb2Zmc2V0O1xuICAgICAgdmFyIHRhZyA9IGdyb3VwLnRhZ3Nbcl07XG4gICAgICB2YXIgdGFnU3BhbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKHRhZyA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBhdXRvbWF0aWMgbnVtYmVyaW5nXG4gICAgICAgIHRhZ1NwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJlcW4tbnVtXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gXFxub251bWJlci9cXG5vdGFnIG9yIHN0YXJyZWQgZW52aXJvbm1lbnRcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYW51YWwgXFx0YWdcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBidWlsZEV4cHJlc3Npb24kMSh0YWcsIG9wdGlvbnMsIHRydWUpLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdGFnU3Bhbi5kZXB0aCA9IHJ3LmRlcHRoO1xuICAgICAgdGFnU3Bhbi5oZWlnaHQgPSBydy5oZWlnaHQ7XG4gICAgICB0YWdTcGFucy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHRhZ1NwYW4sXG4gICAgICAgIHNoaWZ0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGMgPSAwLCBjb2xEZXNjck51bSA9IDA7IC8vIENvbnRpbnVlIHdoaWxlIGVpdGhlciB0aGVyZSBhcmUgbW9yZSBjb2x1bW5zIG9yIG1vcmUgY29sdW1uXG4gIC8vIGRlc2NyaXB0aW9ucywgc28gdHJhaWxpbmcgc2VwYXJhdG9ycyBkb24ndCBnZXQgbG9zdC5cbiAgYyA8IG5jIHx8IGNvbERlc2NyTnVtIDwgY29sRGVzY3JpcHRpb25zLmxlbmd0aDsgKytjLCArK2NvbERlc2NyTnVtKSB7XG4gICAgdmFyIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICB2YXIgZmlyc3RTZXBhcmF0b3IgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGNvbERlc2NyLnR5cGUgPT09IFwic2VwYXJhdG9yXCIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc2VwYXJhdG9yIGluIGEgcm93LCBhZGQgYSBzcGFjZVxuICAgICAgLy8gYmV0d2VlbiB0aGVtLlxuICAgICAgaWYgKCFmaXJzdFNlcGFyYXRvcikge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBtYWtlRW0ob3B0aW9ucy5mb250TWV0cmljcygpLmRvdWJsZVJ1bGVTZXApO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFN0eWxlID0gbGluZVR5cGU7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5tYXJnaW4gPSBcIjAgXCIgKyBtYWtlRW0oLXJ1bGVUaGlja25lc3MgLyAyKTtcblxuICAgICAgICB2YXIgX3NoaWZ0ID0gdG90YWxIZWlnaHQgLSBvZmZzZXQ7XG5cbiAgICAgICAgaWYgKF9zaGlmdCkge1xuICAgICAgICAgIHNlcGFyYXRvci5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1fc2hpZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgc2VwYXJhdG9yIHR5cGU6IFwiICsgY29sRGVzY3Iuc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgY29sRGVzY3JOdW0rKztcbiAgICAgIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICAgIGZpcnN0U2VwYXJhdG9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGMgPj0gbmMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBzZXB3aWR0aCA9IHZvaWQgMDtcblxuICAgIGlmIChjID4gMCB8fCBncm91cC5oc2tpcEJlZm9yZUFuZEFmdGVyKSB7XG4gICAgICBzZXB3aWR0aCA9IHV0aWxzLmRlZmx0KGNvbERlc2NyLnByZWdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbCA9IFtdO1xuXG4gICAgZm9yIChyID0gMDsgciA8IG5yOyArK3IpIHtcbiAgICAgIHZhciByb3cgPSBib2R5W3JdO1xuICAgICAgdmFyIGVsZW0gPSByb3dbY107XG5cbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9zaGlmdDIgPSByb3cucG9zIC0gb2Zmc2V0O1xuXG4gICAgICBlbGVtLmRlcHRoID0gcm93LmRlcHRoO1xuICAgICAgZWxlbS5oZWlnaHQgPSByb3cuaGVpZ2h0O1xuICAgICAgY29sLnB1c2goe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogZWxlbSxcbiAgICAgICAgc2hpZnQ6IF9zaGlmdDJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogY29sXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiY29sLWFsaWduLVwiICsgKGNvbERlc2NyLmFsaWduIHx8IFwiY1wiKV0sIFtjb2xdKTtcbiAgICBjb2xzLnB1c2goY29sKTtcblxuICAgIGlmIChjIDwgbmMgLSAxIHx8IGdyb3VwLmhza2lwQmVmb3JlQW5kQWZ0ZXIpIHtcbiAgICAgIHNlcHdpZHRoID0gdXRpbHMuZGVmbHQoY29sRGVzY3IucG9zdGdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHRhZ1NwYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcW5OdW1Db2wgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IHRhZ1NwYW5zXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgZXFuTnVtQ29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGFnXCJdLCBbZXFuTnVtQ29sXSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChbYm9keSwgZXFuTnVtQ29sXSk7XG4gIH1cbn07XG5cbnZhciBhbGlnbk1hcCA9IHtcbiAgYzogXCJjZW50ZXIgXCIsXG4gIGw6IFwibGVmdCBcIixcbiAgcjogXCJyaWdodCBcIlxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkNSA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHRibCA9IFtdO1xuICB2YXIgZ2x1ZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtdLCBbXCJtdHItZ2x1ZVwiXSk7XG4gIHZhciB0YWcgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSwgW1wibW1sLWVxbi1udW1cIl0pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAuYm9keS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBydyA9IGdyb3VwLmJvZHlbaV07XG4gICAgdmFyIHJvdyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBydy5sZW5ndGg7IGorKykge1xuICAgICAgcm93LnB1c2gobmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW2J1aWxkR3JvdXAocndbal0sIG9wdGlvbnMpXSkpO1xuICAgIH1cblxuICAgIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3NbaV0pIHtcbiAgICAgIHJvdy51bnNoaWZ0KGdsdWUpO1xuICAgICAgcm93LnB1c2goZ2x1ZSk7XG5cbiAgICAgIGlmIChncm91cC5sZXFubykge1xuICAgICAgICByb3cudW5zaGlmdCh0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93LnB1c2godGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YmwucHVzaChuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10clwiLCByb3cpKTtcbiAgfVxuXG4gIHZhciB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRhYmxlXCIsIHRibCk7IC8vIFNldCBjb2x1bW4gYWxpZ25tZW50LCByb3cgc3BhY2luZywgY29sdW1uIHNwYWNpbmcsIGFuZFxuICAvLyBhcnJheSBsaW5lcyBieSBzZXR0aW5nIGF0dHJpYnV0ZXMgb24gdGhlIHRhYmxlIGVsZW1lbnQuXG4gIC8vIFNldCB0aGUgcm93IHNwYWNpbmcuIEluIE1hdGhNTCwgd2Ugc3BlY2lmeSBhIGdhcCBkaXN0YW5jZS5cbiAgLy8gV2UgZG8gbm90IHVzZSByb3dHYXBbXSBiZWNhdXNlIE1hdGhNTCBhdXRvbWF0aWNhbGx5IGluY3JlYXNlc1xuICAvLyBjZWxsIGhlaWdodCB3aXRoIHRoZSBoZWlnaHQvZGVwdGggb2YgdGhlIGVsZW1lbnQgY29udGVudC5cbiAgLy8gTGFUZVggXFxhcnJheXN0cmV0Y2ggbXVsdGlwbGllcyB0aGUgcm93IGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlLlxuICAvLyBXZSBzaW11bGF0ZSB0aGlzIGJ5IGFkZGluZyAoYXJyYXlzdHJldGNoIC0gMSllbSB0byB0aGUgZ2FwLiBUaGlzXG4gIC8vIGRvZXMgYSByZWFzb25hYmxlIGpvYiBvZiBhZGp1c3RpbmcgYXJyYXlzIGNvbnRhaW5pbmcgMSBlbSB0YWxsIGNvbnRlbnQuXG4gIC8vIFRoZSAwLjE2IGFuZCAwLjA5IHZhbHVlcyBhcmUgZm91bmQgZW1waXJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGxpbmVzLlxuXG4gIHZhciBnYXAgPSBncm91cC5hcnJheXN0cmV0Y2ggPT09IDAuNSA/IDAuMSAvLyB7c21hbGxtYXRyaXh9LCB7c3ViYXJyYXl9XG4gIDogMC4xNiArIGdyb3VwLmFycmF5c3RyZXRjaCAtIDEgKyAoZ3JvdXAuYWRkSm90ID8gMC4wOSA6IDApO1xuICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFjaW5nXCIsIG1ha2VFbShnYXApKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzICYmIGdyb3VwLmNvbHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZpbmQgY29sdW1uIGFsaWdubWVudCwgY29sdW1uIHNwYWNpbmcsIGFuZCAgdmVydGljYWwgbGluZXMuXG4gICAgdmFyIGNvbHMgPSBncm91cC5jb2xzO1xuICAgIHZhciBjb2x1bW5MaW5lcyA9IFwiXCI7XG4gICAgdmFyIHByZXZUeXBlV2FzQWxpZ24gPSBmYWxzZTtcbiAgICB2YXIgaVN0YXJ0ID0gMDtcbiAgICB2YXIgaUVuZCA9IGNvbHMubGVuZ3RoO1xuXG4gICAgaWYgKGNvbHNbMF0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJ0b3AgXCI7XG4gICAgICBpU3RhcnQgPSAxO1xuICAgIH1cblxuICAgIGlmIChjb2xzW2NvbHMubGVuZ3RoIC0gMV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJib3R0b20gXCI7XG4gICAgICBpRW5kIC09IDE7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSBpU3RhcnQ7IF9pIDwgaUVuZDsgX2krKykge1xuICAgICAgaWYgKGNvbHNbX2ldLnR5cGUgPT09IFwiYWxpZ25cIikge1xuICAgICAgICBhbGlnbiArPSBhbGlnbk1hcFtjb2xzW19pXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tfaV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgICAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IHNpbmdsZSBsaW5lcyBiZXR3ZWVuIGNlbGxzLlxuICAgICAgICAvLyBTbyB3ZSByZWFkIG9ubHkgdGhlIGZpcnN0IG9mIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMuXG4gICAgICAgIGlmIChwcmV2VHlwZVdhc0FsaWduKSB7XG4gICAgICAgICAgY29sdW1uTGluZXMgKz0gY29sc1tfaV0uc2VwYXJhdG9yID09PSBcInxcIiA/IFwic29saWQgXCIgOiBcImRhc2hlZCBcIjtcbiAgICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5hbGlnblwiLCBhbGlnbi50cmltKCkpO1xuXG4gICAgaWYgKC9bc2RdLy50ZXN0KGNvbHVtbkxpbmVzKSkge1xuICAgICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1ubGluZXNcIiwgY29sdW1uTGluZXMudHJpbSgpKTtcbiAgICB9XG4gIH0gLy8gU2V0IGNvbHVtbiBzcGFjaW5nLlxuXG5cbiAgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcImFsaWduXCIpIHtcbiAgICB2YXIgX2NvbHMgPSBncm91cC5jb2xzIHx8IFtdO1xuXG4gICAgdmFyIHNwYWNpbmcgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMTsgX2kyIDwgX2NvbHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgc3BhY2luZyArPSBfaTIgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIgfHwgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiZ2F0aGVyXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIikge1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbnNwYWNpbmdcIiwgXCIwLjVlbVwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMWVtXCIpO1xuICB9IC8vIEFkZHJlc3MgXFxobGluZSBhbmQgXFxoZGFzaGxpbmVcblxuXG4gIHZhciByb3dMaW5lcyA9IFwiXCI7XG4gIHZhciBobGluZXMgPSBncm91cC5oTGluZXNCZWZvcmVSb3c7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1swXS5sZW5ndGggPiAwID8gXCJsZWZ0IFwiIDogXCJcIjtcbiAgbWVuY2xvc2UgKz0gaGxpbmVzW2hsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggPiAwID8gXCJyaWdodCBcIiA6IFwiXCI7XG5cbiAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgaGxpbmVzLmxlbmd0aCAtIDE7IF9pMysrKSB7XG4gICAgcm93TGluZXMgKz0gaGxpbmVzW19pM10ubGVuZ3RoID09PSAwID8gXCJub25lIFwiIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgbGluZSBiZXR3ZWVuIHJvd3MuIFJlYWQgb25lIGVsZW1lbnQuXG4gICAgOiBobGluZXNbX2kzXVswXSA/IFwiZGFzaGVkIFwiIDogXCJzb2xpZCBcIjtcbiAgfVxuXG4gIGlmICgvW3NkXS8udGVzdChyb3dMaW5lcykpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dsaW5lc1wiLCByb3dMaW5lcy50cmltKCkpO1xuICB9XG5cbiAgaWYgKG1lbmNsb3NlICE9PSBcIlwiKSB7XG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1lbmNsb3NlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIG1lbmNsb3NlLnRyaW0oKSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuYXJyYXlzdHJldGNoICYmIGdyb3VwLmFycmF5c3RyZXRjaCA8IDEpIHtcbiAgICAvLyBBIHNtYWxsIGFycmF5LiBXcmFwIGluIHNjcmlwdHN0eWxlIHNvIHJvdyBnYXAgaXMgbm90IHRvbyBsYXJnZS5cbiAgICB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcInNjcmlwdGxldmVsXCIsIFwiMVwiKTtcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn07IC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBhbGlnbiwgYWxpZ24qLCBhbGlnbmVkLCBhbGlnbmF0LCBhbGlnbmF0KiwgYWxpZ25lZGF0LlxuXG5cbnZhciBhbGlnbmVkSGFuZGxlciA9IGZ1bmN0aW9uIGFsaWduZWRIYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgaWYgKGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiZWRcIikgPT09IC0xKSB7XG4gICAgdmFsaWRhdGVBbXNFbnZpcm9ubWVudENvbnRleHQoY29udGV4dCk7XG4gIH1cblxuICB2YXIgY29scyA9IFtdO1xuICB2YXIgc2VwYXJhdGlvblR5cGUgPSBjb250ZXh0LmVudk5hbWUuaW5kZXhPZihcImF0XCIpID4gLTEgPyBcImFsaWduYXRcIiA6IFwiYWxpZ25cIjtcbiAgdmFyIGlzU3BsaXQgPSBjb250ZXh0LmVudk5hbWUgPT09IFwic3BsaXRcIjtcbiAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHtcbiAgICBjb2xzLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICBhdXRvVGFnOiBpc1NwbGl0ID8gdW5kZWZpbmVkIDogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgIGVtcHR5U2luZ2xlUm93OiB0cnVlLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlOiBzZXBhcmF0aW9uVHlwZSxcbiAgICBtYXhOdW1Db2xzOiBpc1NwbGl0ID8gMiA6IHVuZGVmaW5lZCxcbiAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG5cbiAgaWYgKGFyZ3NbMF0gJiYgYXJnc1swXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NbMF0uYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRleHRvcmQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLmJvZHlbaV0sIFwidGV4dG9yZFwiKTtcbiAgICAgIGFyZzAgKz0gdGV4dG9yZC50ZXh0O1xuICAgIH1cblxuICAgIG51bU1hdGhzID0gTnVtYmVyKGFyZzApO1xuICAgIG51bUNvbHMgPSBudW1NYXRocyAqIDI7XG4gIH1cblxuICB2YXIgaXNBbGlnbmVkID0gIW51bUNvbHM7XG4gIHJlcy5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgIGZvciAodmFyIF9pNCA9IDE7IF9pNCA8IHJvdy5sZW5ndGg7IF9pNCArPSAyKSB7XG4gICAgICAvLyBNb2RpZnkgb3JkZ3JvdXAgbm9kZSB3aXRoaW4gc3R5bGluZyBub2RlXG4gICAgICB2YXIgc3R5bGluZyA9IGFzc2VydE5vZGVUeXBlKHJvd1tfaTRdLCBcInN0eWxpbmdcIik7XG4gICAgICB2YXIgb3JkZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShzdHlsaW5nLmJvZHlbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgICBvcmRncm91cC5ib2R5LnVuc2hpZnQoZW1wdHlHcm91cCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FsaWduZWQpIHtcbiAgICAgIC8vIENhc2UgMVxuICAgICAgdmFyIGN1ck1hdGhzID0gcm93Lmxlbmd0aCAvIDI7XG5cbiAgICAgIGlmIChudW1NYXRocyA8IGN1ck1hdGhzKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBudW1Db2xzOyArK19pNSkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNSAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTUgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTVdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgLy8gU2luY2Ugbm8gdHlwZXMgYXJlIHNwZWNpZmllZCBhYm92ZSwgdGhlIHR3byBwb3NzaWJpbGl0aWVzIGFyZVxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIHdyYXBwZWQgaW4ge30gb3IgW10sIGluIHdoaWNoIGNhc2UgUGFyc2VyJ3NcbiAgICAvLyAgIHBhcnNlR3JvdXAoKSByZXR1cm5zIGFuIFwib3JkZ3JvdXBcIiB3cmFwcGluZyBzb21lIHN5bWJvbCBub2RlLlxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIGEgYmFyZSBzeW1ib2wgbm9kZS5cbiAgICB2YXIgc3ltTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoYXJnc1swXSk7XG4gICAgdmFyIGNvbGFsaWduID0gc3ltTm9kZSA/IFthcmdzWzBdXSA6IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIikuYm9keTtcbiAgICB2YXIgY29scyA9IGNvbGFsaWduLm1hcChmdW5jdGlvbiAobmRlKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKG5kZSk7XG4gICAgICB2YXIgY2EgPSBub2RlLnRleHQ7XG5cbiAgICAgIGlmIChcImxjclwiLmluZGV4T2YoY2EpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgICBhbGlnbjogY2FcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY2EgPT09IFwifFwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhcmF0b3JcIixcbiAgICAgICAgICBzZXBhcmF0b3I6IFwifFwiXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcIjpcIlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IHRydWUsXG4gICAgICAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcbiAgICAgIG1heE51bUNvbHM6IGNvbHMubGVuZ3RoXG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcmVzLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBUaGUgbWF0cml4IGVudmlyb25tZW50cyBvZiBhbXNtYXRoIGJ1aWxkcyBvbiB0aGUgYXJyYXkgZW52aXJvbm1lbnRcbi8vIG9mIExhVGVYLCB3aGljaCBpcyBkaXNjdXNzZWQgYWJvdmUuXG4vLyBUaGUgbWF0aHRvb2xzIHBhY2thZ2UgYWRkcyBzdGFycmVkIHZlcnNpb25zIG9mIHRoZSBzYW1lIGVudmlyb25tZW50cy5cbi8vIFRoZXNlIGhhdmUgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gY2hvb3NlIGxlZnR8Y2VudGVyfHJpZ2h0IGp1c3RpZmljYXRpb24uXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wibWF0cml4XCIsIFwicG1hdHJpeFwiLCBcImJtYXRyaXhcIiwgXCJCbWF0cml4XCIsIFwidm1hdHJpeFwiLCBcIlZtYXRyaXhcIiwgXCJtYXRyaXgqXCIsIFwicG1hdHJpeCpcIiwgXCJibWF0cml4KlwiLCBcIkJtYXRyaXgqXCIsIFwidm1hdHJpeCpcIiwgXCJWbWF0cml4KlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lLnJlcGxhY2UoXCIqXCIsIFwiXCIpXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgY29sQWxpZ24gPSBcImNcIjtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogY29sQWxpZ25cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIGlmIChjb250ZXh0LmVudk5hbWUuY2hhckF0KGNvbnRleHQuZW52TmFtZS5sZW5ndGggLSAxKSA9PT0gXCIqXCIpIHtcbiAgICAgIC8vIEl0J3Mgb25lIG9mIHRoZSBtYXRodG9vbHMgc3RhcnJlZCBmdW5jdGlvbnMuXG4gICAgICAvLyBQYXJzZSB0aGUgb3B0aW9uYWwgYWxpZ25tZW50IGFyZ3VtZW50LlxuICAgICAgdmFyIHBhcnNlciA9IGNvbnRleHQucGFyc2VyO1xuICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcblxuICAgICAgaWYgKHBhcnNlci5mZXRjaCgpLnRleHQgPT09IFwiW1wiKSB7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgICAgIGNvbEFsaWduID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNvbEFsaWduKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGwgb3IgYyBvciByXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgICAgcGFyc2VyLmV4cGVjdChcIl1cIik7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBheWxvYWQuY29scyA9IFt7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTsgLy8gUG9wdWxhdGUgY29scyB3aXRoIHRoZSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW4gYWxpZ25tZW50IHNwZWNzLlxuXG4gICAgdmFyIG51bUNvbHMgPSBNYXRoLm1heCgwLCAuLi5yZXMuYm9keS5tYXAocm93ID0+IHJvdy5sZW5ndGgpKTtcbiAgICByZXMuY29scyA9IG5ldyBBcnJheShudW1Db2xzKS5maWxsKHtcbiAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgIH0pO1xuICAgIHJldHVybiBkZWxpbWl0ZXJzID8ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogZGVsaW1pdGVyc1swXSxcbiAgICAgIHJpZ2h0OiBkZWxpbWl0ZXJzWzFdLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkIC8vIFxccmlnaHQgdW5pbmZsdWVuY2VkIGJ5IFxcY29sb3IgaW4gYXJyYXlcblxuICAgIH0gOiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInNtYWxsbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgXCJzY3JpcHRcIik7XG4gICAgcmVzLmNvbFNlcGFyYXRpb25UeXBlID0gXCJzbWFsbFwiO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInN1YmFycmF5XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcblxuICAgIGlmIChjb2xzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHMsXG4gICAgICBoc2tpcEJlZm9yZUFuZEFmdGVyOiBmYWxzZSxcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwic2NyaXB0XCIpO1xuXG4gICAgaWYgKHJlcy5ib2R5Lmxlbmd0aCA+IDAgJiYgcmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBBIGNhc2VzIGVudmlyb25tZW50IChpbiBhbXNtYXRoLnN0eSkgaXMgYWxtb3N0IGVxdWl2YWxlbnQgdG9cbi8vIFxcZGVmXFxhcnJheXN0cmV0Y2h7MS4yfSVcbi8vIFxcbGVmdFxce1xcYmVnaW57YXJyYXl9e0B7fWxAe1xccXVhZH1sQHt9fSDigKYgXFxlbmR7YXJyYXl9XFxyaWdodC5cbi8vIHtkY2FzZXN9IGlzIGEge2Nhc2VzfSBlbnZpcm9ubWVudCB3aGVyZSBjZWxscyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLFxuLy8gYXMgZGVmaW5lZCBpbiBtYXRodG9vbHMuc3R5LlxuLy8ge3JjYXNlc30gaXMgYW5vdGhlciBtYXRodG9vbHMgZW52aXJvbm1lbnQuIEl0J3MgYnJhY2UgaXMgb24gdGhlIHJpZ2h0IHNpZGUuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiY2FzZXNcIiwgXCJkY2FzZXNcIiwgXCJyY2FzZXNcIiwgXCJkcmNhc2VzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMS4yLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJsXCIsXG4gICAgICAgIHByZWdhcDogMCxcbiAgICAgICAgLy8gVE9ETyhrZXZpbmIpIGdldCB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIG1ldHJpY3MgZm9yIFRFWFQgc3R5bGUgd2hpY2ggaXMgd2hhdCB3ZSB3ZXJlXG4gICAgICAgIC8vIGRvaW5nIGJlZm9yZS4gIEJlZm9yZSBhdHRlbXB0aW5nIHRvIGdldCB0aGUgY3VycmVudCBzdHlsZSB3ZVxuICAgICAgICAvLyBzaG91bGQgbG9vayBhdCBUZVgncyBiZWhhdmlvciBlc3BlY2lhbGx5IGZvciBcXG92ZXIgYW5kIG1hdHJpY2VzLlxuICAgICAgICBwb3N0Z2FwOiAxLjBcbiAgICAgICAgLyogMWVtIHF1YWQgKi9cblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICBwb3N0Z2FwOiAwXG4gICAgICB9XVxuICAgIH07XG4gICAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHBheWxvYWQsIGRDZWxsU3R5bGUoY29udGV4dC5lbnZOYW1lKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiclwiKSA+IC0xID8gXCIuXCIgOiBcIlxcXFx7XCIsXG4gICAgICByaWdodDogY29udGV4dC5lbnZOYW1lLmluZGV4T2YoXCJyXCIpID4gLTEgPyBcIlxcXFx9XCIgOiBcIi5cIixcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEluIHRoZSBhbGlnbiBlbnZpcm9ubWVudCwgb25lIHVzZXMgYW1wZXJzYW5kcywgJiwgdG8gc3BlY2lmeSBudW1iZXIgb2Zcbi8vIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCB0byBsb2NhdGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggY29sdW1uLlxuLy8gYWxpZ24gZ2V0cyBhdXRvbWF0aWMgbnVtYmVyaW5nLiBhbGlnbiogYW5kIGFsaWduZWQgZG8gbm90LlxuLy8gVGhlIGFsaWduZWRhdCBlbnZpcm9ubWVudCBjYW4gYmUgdXNlZCBpbiBtYXRoIG1vZGUuXG4vLyBOb3RlIHRoYXQgd2UgYXNzdW1lIFxcbm9tYWxsaW5lc2tpcGxpbWl0IHRvIGJlIHplcm8sXG4vLyBzbyB0aGF0IFxcc3RydXRAIGlzIHRoZSBzYW1lIGFzIFxcc3RydXQuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiYWxpZ25cIiwgXCJhbGlnbipcIiwgXCJhbGlnbmVkXCIsIFwic3BsaXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEEgZ2F0aGVyZWQgZW52aXJvbm1lbnQgaXMgbGlrZSBhbiBhcnJheSBlbnZpcm9ubWVudCB3aXRoIG9uZSBjZW50ZXJlZFxuLy8gY29sdW1uLCBidXQgd2hlcmUgcm93cyBhcmUgY29uc2lkZXJlZCBsaW5lcyBzbyBnZXQgXFxqb3QgbGluZSBzcGFjaW5nXG4vLyBhbmQgY29udGVudHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJnYXRoZXJlZFwiLCBcImdhdGhlclwiLCBcImdhdGhlcipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbXCJnYXRoZXJcIiwgXCJnYXRoZXIqXCJdLCBjb250ZXh0LmVudk5hbWUpKSB7XG4gICAgICB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dChjb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJjXCJcbiAgICAgIH1dLFxuICAgICAgYWRkSm90OiB0cnVlLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGU6IFwiZ2F0aGVyXCIsXG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIGxlcW5vOiBjb250ZXh0LnBhcnNlci5zZXR0aW5ncy5sZXFub1xuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduYXRcIiwgXCJhbGlnbmF0KlwiLCBcImFsaWduZWRhdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGFsaWduZWRIYW5kbGVyLFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiZXF1YXRpb25cIiwgXCJlcXVhdGlvbipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIHNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIG1heE51bUNvbHM6IDEsXG4gICAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgICB9O1xuICAgIHJldHVybiBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwiZGlzcGxheVwiKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiQ0RcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiBwYXJzZUNEKGNvbnRleHQucGFyc2VyKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXG5vbnVtYmVyXCIsIFwiXFxcXGdkZWZcXFxcQGVxbnN3ezB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm90YWdcIiwgXCJcXFxcbm9udW1iZXJcIik7IC8vIENhdGNoIFxcaGxpbmUgb3V0c2lkZSBhcnJheSBlbnZpcm9ubWVudFxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoaXMgaXMuXG4gIG5hbWVzOiBbXCJcXFxcaGxpbmVcIiwgXCJcXFxcaGRhc2hsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoY29udGV4dC5mdW5jTmFtZSArIFwiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50XCIpO1xuICB9XG5cbn0pO1xuXG52YXIgZW52aXJvbm1lbnRzID0gX2Vudmlyb25tZW50cztcblxuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICBuYW1lczogW1wiXFxcXGJlZ2luXCIsIFwiXFxcXGVuZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ0ZXh0XCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIG5hbWVHcm91cCA9IGFyZ3NbMF07XG5cbiAgICBpZiAobmFtZUdyb3VwLnR5cGUgIT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIWVudmlyb25tZW50cy5oYXNPd25Qcm9wZXJ0eShlbnZOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIk5vIHN1Y2ggZW52aXJvbm1lbnQ6IFwiICsgZW52TmFtZSwgbmFtZUdyb3VwKTtcbiAgICAgIH0gLy8gQnVpbGQgdGhlIGVudmlyb25tZW50IG9iamVjdC4gQXJndW1lbnRzIGFuZCBvdGhlciBpbmZvcm1hdGlvbiB3aWxsXG4gICAgICAvLyBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYmVnaW4gYW5kIGVuZCBtZXRob2RzIHVzaW5nIHByb3BlcnRpZXMuXG5cblxuICAgICAgdmFyIGVudiA9IGVudmlyb25tZW50c1tlbnZOYW1lXTtcbiAgICAgIHZhciB7XG4gICAgICAgIGFyZ3M6IF9hcmdzLFxuICAgICAgICBvcHRBcmdzXG4gICAgICB9ID0gcGFyc2VyLnBhcnNlQXJndW1lbnRzKFwiXFxcXGJlZ2lue1wiICsgZW52TmFtZSArIFwifVwiLCBlbnYpO1xuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lLFxuICAgICAgICBwYXJzZXJcbiAgICAgIH07XG4gICAgICB2YXIgcmVzdWx0ID0gZW52LmhhbmRsZXIoY29udGV4dCwgX2FyZ3MsIG9wdEFyZ3MpO1xuICAgICAgcGFyc2VyLmV4cGVjdChcIlxcXFxlbmRcIiwgZmFsc2UpO1xuICAgICAgdmFyIGVuZE5hbWVUb2tlbiA9IHBhcnNlci5uZXh0VG9rZW47XG4gICAgICB2YXIgZW5kID0gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgaWYgKGVuZC5uYW1lICE9PSBlbnZOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZSwgXCJlbnZpcm9ubWVudFwiIGhhbmRsZXIgcmV0dXJucyBhbiBlbnZpcm9ubWVudCBQYXJzZU5vZGVcblxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVudmlyb25tZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG5hbWU6IGVudk5hbWUsXG4gICAgICBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG52YXIgaHRtbEJ1aWxkZXIkNSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1swXSk7XG4gICAgdmFyIGZ1bmMgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmdW5jIGluIGZvbnRBbGlhc2VzKSB7XG4gICAgICBmdW5jID0gZm9udEFsaWFzZXNbZnVuY107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBmdW5jLnNsaWNlKDEpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXGJvbGRzeW1ib2xcIiwgXCJcXFxcYm1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJCb3ggPSB1dGlscy5pc0NoYXJhY3RlckJveChib2R5KTsgLy8gYW1zYnN5LnN0eSdzIFxcYm9sZHN5bWJvbCB1c2VzIFxcYmlucmVsIHNwYWNpbmcgdG8gaW5oZXJpdCB0aGVcbiAgICAvLyBhcmd1bWVudCdzIGJpbnxyZWx8b3JkIHN0YXR1c1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYm9keSksXG4gICAgICBib2R5OiBbe1xuICAgICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGZvbnQ6IFwiYm9sZHN5bWJvbFwiLFxuICAgICAgICBib2R5XG4gICAgICB9XSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiBpc0NoYXJhY3RlckJveFxuICAgIH07XG4gIH1cbn0pOyAvLyBPbGQgZm9udCBjaGFuZ2luZyBmdW5jdGlvbnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxybVwiLCBcIlxcXFxzZlwiLCBcIlxcXFx0dFwiLCBcIlxcXFxiZlwiLCBcIlxcXFxpdFwiLCBcIlxcXFxjYWxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMywgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIGJyZWFrT25Ub2tlblRleHRcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIHtcbiAgICAgIG1vZGVcbiAgICB9ID0gcGFyc2VyO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTtcbiAgICB2YXIgc3R5bGUgPSBcIm1hdGhcIiArIGZ1bmNOYW1lLnNsaWNlKDEpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBmb250OiBzdHlsZSxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgYm9keVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuXG52YXIgYWRqdXN0U3R5bGUgPSAoc2l6ZSwgb3JpZ2luYWxTdHlsZSkgPT4ge1xuICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgdGhpcyBmcmFjdGlvbiBzaG91bGQgYmUgaW4gYmFzZWQgb24gdGhlXG4gIC8vIGZ1bmN0aW9uIHVzZWRcbiAgdmFyIHN0eWxlID0gb3JpZ2luYWxTdHlsZTtcblxuICBpZiAoc2l6ZSA9PT0gXCJkaXNwbGF5XCIpIHtcbiAgICAvLyBHZXQgZGlzcGxheSBzdHlsZSBhcyBhIGRlZmF1bHQuXG4gICAgLy8gSWYgaW5jb21pbmcgc3R5bGUgaXMgc3ViL3N1cCwgdXNlIHN0eWxlLnRleHQoKSB0byBnZXQgY29ycmVjdCBzaXplLlxuICAgIHN0eWxlID0gc3R5bGUuaWQgPj0gU3R5bGUkMS5TQ1JJUFQuaWQgPyBzdHlsZS50ZXh0KCkgOiBTdHlsZSQxLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUpIHtcbiAgICAvLyBXZSdyZSBpbiBhIFxcdGZyYWMgYnV0IGluY29taW5nIHN0eWxlIGlzIGRpc3BsYXlzdHlsZSwgc286XG4gICAgc3R5bGUgPSBTdHlsZSQxLlRFWFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQ7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIgaHRtbEJ1aWxkZXIkNCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBGcmFjdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZXMgNDQ0LTQ0NSwgcnVsZXMgMTUoYS1lKS5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRHcm91cCQxKGdyb3VwLm51bWVyLCBuZXdPcHRpb25zLCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgLy8gXFxjZnJhYyBpbnNlcnRzIGEgXFxzdHJ1dCBpbnRvIHRoZSBudW1lcmF0b3IuXG4gICAgLy8gR2V0IFxcc3RydXQgZGltZW5zaW9ucyBmcm9tIFRlWGJvb2sgcGFnZSAzNTMuXG4gICAgdmFyIGhTdHJ1dCA9IDguNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIHZhciBkU3RydXQgPSAzLjUgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICBudW1lcm0uaGVpZ2h0ID0gbnVtZXJtLmhlaWdodCA8IGhTdHJ1dCA/IGhTdHJ1dCA6IG51bWVybS5oZWlnaHQ7XG4gICAgbnVtZXJtLmRlcHRoID0gbnVtZXJtLmRlcHRoIDwgZFN0cnV0ID8gZFN0cnV0IDogbnVtZXJtLmRlcHRoO1xuICB9XG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoZHN0eWxlKTtcbiAgdmFyIGRlbm9tbSA9IGJ1aWxkR3JvdXAkMShncm91cC5kZW5vbSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG4gIHZhciBydWxlO1xuICB2YXIgcnVsZVdpZHRoO1xuICB2YXIgcnVsZVNwYWNpbmc7XG5cbiAgaWYgKGdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgICAgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucywgcnVsZVdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcImZyYWMtbGluZVwiLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBydWxlV2lkdGggPSBydWxlLmhlaWdodDtcbiAgICBydWxlU3BhY2luZyA9IHJ1bGUuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHJ1bGUgPSBudWxsO1xuICAgIHJ1bGVXaWR0aCA9IDA7XG4gICAgcnVsZVNwYWNpbmcgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gIH0gLy8gUnVsZSAxNWJcblxuXG4gIHZhciBudW1TaGlmdDtcbiAgdmFyIGNsZWFyYW5jZTtcbiAgdmFyIGRlbm9tU2hpZnQ7XG5cbiAgaWYgKHN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTE7XG4gIH0gZWxzZSBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFQpLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9IGVsc2Uge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTI7XG4gIH1cblxuICB2YXIgbGVmdERlbGltO1xuICB2YXIgcmlnaHREZWxpbTtcblxuICBpZiAoZ3JvdXAubGVmdERlbGltID09IG51bGwpIHtcbiAgICBsZWZ0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtb3BlblwiXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAubGVmdERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtb3BlblwiXSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgcmlnaHREZWxpbSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdKTsgLy8gemVybyB3aWR0aCBmb3IgXFxjZnJhY1xuICB9IGVsc2UgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gPT0gbnVsbCkge1xuICAgIHJpZ2h0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtY2xvc2VcIl0pO1xuICB9IGVsc2Uge1xuICAgIHJpZ2h0RGVsaW0gPSBkZWxpbWl0ZXIuY3VzdG9tU2l6ZWREZWxpbShncm91cC5yaWdodERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0uY29uY2F0KG5ld09wdGlvbnMuc2l6aW5nQ2xhc3NlcyhvcHRpb25zKSksIFtsZWZ0RGVsaW0sIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1mcmFjXCJdLCBbZnJhY10pLCByaWdodERlbGltXSwgb3B0aW9ucyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQzID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZnJhY1wiLCBbYnVpbGRHcm91cChncm91cC5udW1lciwgb3B0aW9ucyksIGJ1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG9wdGlvbnMpXSk7XG5cbiAgaWYgKCFncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsaW5ldGhpY2tuZXNzXCIsIFwiMHB4XCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICB2YXIgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgbWFrZUVtKHJ1bGVXaWR0aCkpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG5cbiAgaWYgKHN0eWxlLnNpemUgIT09IG9wdGlvbnMuc3R5bGUuc2l6ZSkge1xuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbbm9kZV0pO1xuICAgIHZhciBpc0Rpc3BsYXkgPSBzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIGlzRGlzcGxheSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjBcIik7XG4gIH1cblxuICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwgfHwgZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgdmFyIHdpdGhEZWxpbXMgPSBbXTtcblxuICAgIGlmIChncm91cC5sZWZ0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIGxlZnRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLmxlZnREZWxpbS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKSldKTtcbiAgICAgIGxlZnRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gobGVmdE9wKTtcbiAgICB9XG5cbiAgICB3aXRoRGVsaW1zLnB1c2gobm9kZSk7XG5cbiAgICBpZiAoZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmlnaHRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLnJpZ2h0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICByaWdodE9wLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHdpdGhEZWxpbXMucHVzaChyaWdodE9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyh3aXRoRGVsaW1zKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxkZnJhY1wiLCBcIlxcXFxmcmFjXCIsIFwiXFxcXHRmcmFjXCIsIFwiXFxcXGRiaW5vbVwiLCBcIlxcXFxiaW5vbVwiLCBcIlxcXFx0Ymlub21cIiwgXCJcXFxcXFxcXGF0b3BmcmFjXCIsIC8vIGNhbuKAmXQgYmUgZW50ZXJlZCBkaXJlY3RseVxuICBcIlxcXFxcXFxcYnJhY2VmcmFjXCIsIFwiXFxcXFxcXFxicmFja2ZyYWNcIiAvLyBkaXR0b1xuICBdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluQXJndW1lbnQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplLFxuICAgICAgYmFyU2l6ZTogbnVsbFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ0LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDNcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxjZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb250aW51ZWQ6IHRydWUsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZTogdHJ1ZSxcbiAgICAgIGxlZnREZWxpbTogbnVsbCxcbiAgICAgIHJpZ2h0RGVsaW06IG51bGwsXG4gICAgICBzaXplOiBcImRpc3BsYXlcIixcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9XG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWYzO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoLFxuICAgICAgdG9rZW5cbiAgICB9O1xuICB9XG5cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwibWF0aFwiLCBcInNpemVcIiwgXCJ0ZXh0XCIsIFwibWF0aFwiLCBcIm1hdGhcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0LCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgbGVmdE5vZGUuZmFtaWx5ID09PSBcIm9wZW5cIiA/IGRlbGltRnJvbVZhbHVlKGxlZnROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgcmlnaHROb2RlID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1sxXSk7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSByaWdodE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgcmlnaHROb2RlLmZhbWlseSA9PT0gXCJjbG9zZVwiID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGFyZ3NbM107XG5cbiAgICBpZiAoc3R5bC50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgIGlmIChzdHlsLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdGV4dE9yZCA9IGFzc2VydE5vZGVUeXBlKHN0eWwuYm9keVswXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcih0ZXh0T3JkLnRleHQpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bCA9IGFzc2VydE5vZGVUeXBlKHN0eWwsIFwidGV4dG9yZFwiKTtcbiAgICAgIHNpemUgPSBzdHlsQXJyYXlbTnVtYmVyKHN0eWwudGV4dCldO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImdlbmZyYWNcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbnVtZXIsXG4gICAgICBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlblxuICAgIH07XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICBuYW1lczogW1wiXFxcXFxcXFxhYm92ZWZyYWNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhcmdUeXBlczogW1wibWF0aFwiLCBcInNpemVcIiwgXCJtYXRoXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmNiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBiYXJTaXplID0gYXNzZXJ0KGFzc2VydE5vZGVUeXBlKGFyZ3NbMV0sIFwiaW5maXhcIikuc2l6ZSk7XG4gICAgdmFyIGRlbm9tID0gYXJnc1syXTtcbiAgICB2YXIgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyLFxuICAgICAgZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTtcblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxuLy8gYWxzbyBcInN1cHN1YlwiIHNpbmNlIGFuIG92ZXIvdW5kZXJicmFjZSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cbnZhciBodG1sQnVpbGRlciQzID0gKGdycCwgb3B0aW9ucykgPT4ge1xuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlOyAvLyBQdWxsIG91dCB0aGUgYFBhcnNlTm9kZTxcImhvcml6QnJhY2VcIj5gIGlmIGBncnBgIGlzIGEgXCJzdXBzdWJcIiBub2RlLlxuXG4gIHZhciBzdXBTdWJHcm91cDtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIFJlZjogTGFUZVggc291cmNlMmU6IH19fX1cXGxpbWl0c31cbiAgICAvLyBpLmUuIExhVGVYIHRyZWF0cyB0aGUgYnJhY2Ugc2ltaWxhciB0byBhbiBvcCBhbmQgcGFzc2VzIGl0XG4gICAgLy8gd2l0aCBcXGxpbWl0cywgc28gd2UgbmVlZCB0byBhc3NpZ24gc3Vwc3ViIHN0eWxlLlxuICAgIHN1cFN1Ykdyb3VwID0gZ3JwLnN1cCA/IGJ1aWxkR3JvdXAkMShncnAuc3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucykgOiBidWlsZEdyb3VwJDEoZ3JwLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkR3JvdXAkMShncm91cC5iYXNlLCBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShTdHlsZSQxLkRJU1BMQVkpKTsgLy8gQ3JlYXRlIHRoZSBzdHJldGNoeSBlbGVtZW50XG5cbiAgdmFyIGJyYWNlQm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zICAgICAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgLy8gVGhpcyBmaXJzdCB2bGlzdCBjb250YWlucyB0aGUgY29udGVudCBhbmQgdGhlIGJyYWNlOiAgIGVxdWF0aW9uXG5cbiAgdmFyIHZsaXN0O1xuXG4gIGlmIChncm91cC5pc092ZXIpIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAwLjFcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9IGVsc2Uge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgIHBvc2l0aW9uRGF0YTogYm9keS5kZXB0aCArIDAuMSArIGJyYWNlQm9keS5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gIH1cblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBUbyB3cml0ZSB0aGUgc3Vwc3ViLCB3cmFwIHRoZSBmaXJzdCB2bGlzdCBpbiBhbm90aGVyIHZsaXN0OlxuICAgIC8vIFRoZXkgY2FuJ3QgYWxsIGdvIGluIHRoZSBzYW1lIHZsaXN0LCBiZWNhdXNlIHRoZSBub3RlIG1pZ2h0IGJlXG4gICAgLy8gd2lkZXIgdGhhbiB0aGUgZXF1YXRpb24uIFdlIHdhbnQgdGhlIGVxdWF0aW9uIHRvIGNvbnRyb2wgdGhlXG4gICAgLy8gYnJhY2Ugd2lkdGguXG4gICAgLy8gICAgICBub3RlICAgICAgICAgIGxvbmcgbm90ZSAgICAgICAgICAgbG9uZyBub3RlXG4gICAgLy8gICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJMgICBvciAgICDilI/ilIHilIHilIHilJMgICAgIG5vdCAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgICAvLyAgICBlcXVhdGlvbiAgICAgICAgICAgZXFuICAgICAgICAgICAgICAgICBlcW5cbiAgICB2YXIgdlNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5pc092ZXIpIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiB2U3Bhbi5kZXB0aCArIDAuMiArIHN1cFN1Ykdyb3VwLmhlaWdodCArIHN1cFN1Ykdyb3VwLmRlcHRoLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBzdXBTdWJHcm91cFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgICAgc2l6ZTogMC4yXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB2U3BhblxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkMiA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IHN0cmV0Y2h5Lm1hdGhNTG5vZGUoZ3JvdXAubGFiZWwpO1xuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbn07IC8vIEhvcml6b250YWwgc3RyZXRjaHkgYnJhY2VzXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImhvcml6QnJhY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVyYnJhY2VcIiwgXCJcXFxcdW5kZXJicmFjZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDMsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMlxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxocmVmXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxocmVmXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZixcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUFuY2hvcihncm91cC5ocmVmLCBbXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBNYXRoTm9kZSkpIHtcbiAgICAgIG1hdGggPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFttYXRoXSk7XG4gICAgfVxuXG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGdyb3VwLmhyZWYpO1xuICAgIHJldHVybiBtYXRoO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcdXJsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInVybFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcdXJsXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFx1cmxcIik7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhyZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gaHJlZltpXTtcblxuICAgICAgaWYgKGMgPT09IFwiflwiKSB7XG4gICAgICAgIGMgPSBcIlxcXFx0ZXh0YXNjaWl0aWxkZVwiO1xuICAgICAgfVxuXG4gICAgICBjaGFycy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBjXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYm9keSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBcIlxcXFx0ZXh0dHRcIixcbiAgICAgIGJvZHk6IGNoYXJzXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWYsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveCwgYXMgaW5cbi8vIFxcdmNlbnRlcntcXGhib3h7JFxcZnJhY3thK2J9e1xcZGZyYWN7Y317ZH19JH19XG4vLyBUaGlzIGZ1bmN0aW9uIGJ5IGl0c2VsZiBkb2Vzbid0IGRvIGFueXRoaW5nIGJ1dCBwcmV2ZW50IGEgc29mdCBsaW5lIGJyZWFrLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaGJveFwiLFxuICBuYW1lczogW1wiXFxcXGhib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJoYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxDbGFzc1wiLCBcIlxcXFxodG1sSWRcIiwgXCJcXFxcaHRtbFN0eWxlXCIsIFwiXFxcXGh0bWxEYXRhXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInJhd1wiLCBcIm9yaWdpbmFsXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmO1xuICAgIHZhciB2YWx1ZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwicmF3XCIpLnN0cmluZztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImh0bWxFeHRlbnNpb25cIiwgXCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZVwiKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ1c3RDb250ZXh0O1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGh0bWxDbGFzc1wiOlxuICAgICAgICBhdHRyaWJ1dGVzLmNsYXNzID0gdmFsdWU7XG4gICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICBjb21tYW5kOiBcIlxcXFxodG1sQ2xhc3NcIixcbiAgICAgICAgICBjbGFzczogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcaHRtbElkXCI6XG4gICAgICAgIGF0dHJpYnV0ZXMuaWQgPSB2YWx1ZTtcbiAgICAgICAgdHJ1c3RDb250ZXh0ID0ge1xuICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxJZFwiLFxuICAgICAgICAgIGlkOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxodG1sU3R5bGVcIjpcbiAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IHZhbHVlO1xuICAgICAgICB0cnVzdENvbnRleHQgPSB7XG4gICAgICAgICAgY29tbWFuZDogXCJcXFxcaHRtbFN0eWxlXCIsXG4gICAgICAgICAgc3R5bGU6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGh0bWxEYXRhXCI6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleVZhbCA9IGRhdGFbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXFxcaHRtbERhdGFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJkYXRhLVwiICsga2V5VmFsWzBdLnRyaW0oKV0gPSBrZXlWYWxbMV0udHJpbSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxEYXRhXCIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh0cnVzdENvbnRleHQpKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGZ1bmNOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgdmFyIGNsYXNzZXMgPSBbXCJlbmNsb3NpbmdcIl07XG5cbiAgICBpZiAoZ3JvdXAuYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgY2xhc3Nlcy5wdXNoKC4uLmdyb3VwLmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9cXHMrLykpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgZWxlbWVudHMsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiBncm91cC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0ciAhPT0gXCJjbGFzc1wiICYmIGdyb3VwLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYXR0ciwgZ3JvdXAuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sbWF0aG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGh0bWw6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pLFxuICAgICAgbWF0aG1sOiBvcmRhcmd1bWVudChhcmdzWzFdKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5odG1sLCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG5cbnZhciBzaXplRGF0YSA9IGZ1bmN0aW9uIHNpemVEYXRhKHN0cikge1xuICBpZiAoL15bLStdPyAqKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspJC8udGVzdChzdHIpKSB7XG4gICAgLy8gc3RyIGlzIGEgbnVtYmVyIHdpdGggbm8gdW5pdCBzcGVjaWZpZWQuXG4gICAgLy8gZGVmYXVsdCB1bml0IGlzIGJwLCBwZXIgZ3JhcGhpeCBwYWNrYWdlLlxuICAgIHJldHVybiB7XG4gICAgICBudW1iZXI6ICtzdHIsXG4gICAgICB1bml0OiBcImJwXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC8oWy0rXT8pICooXFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhzdHIpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIHNpemU6ICdcIiArIHN0ciArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIHdpZHRoID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLjksXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9OyAvLyBzb3J0YSBjaGFyYWN0ZXIgc2l6ZWQuXG5cbiAgICB2YXIgdG90YWxoZWlnaHQgPSB7XG4gICAgICBudW1iZXI6IDAsXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9O1xuICAgIHZhciBhbHQgPSBcIlwiO1xuXG4gICAgaWYgKG9wdEFyZ3NbMF0pIHtcbiAgICAgIHZhciBhdHRyaWJ1dGVTdHIgPSBhc3NlcnROb2RlVHlwZShvcHRBcmdzWzBdLCBcInJhd1wiKS5zdHJpbmc7IC8vIFBhcnNlci5qcyBkb2VzIG5vdCBwYXJzZSBrZXkvdmFsdWUgcGFpcnMuIFdlIGdldCBhIHN0cmluZy5cblxuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTdHIuc3BsaXQoXCIsXCIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleVZhbCA9IGF0dHJpYnV0ZXNbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgIGlmIChrZXlWYWwubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGtleVZhbFsxXS50cmltKCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleVZhbFswXS50cmltKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhbHRcIjpcbiAgICAgICAgICAgICAgYWx0ID0gc3RyO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgICAgICAgIHdpZHRoID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IHNpemVEYXRhKHN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQga2V5OiAnXCIgKyBrZXlWYWxbMF0gKyBcIicgaW4gXFxcXGluY2x1ZGVncmFwaGljcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNyYyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmIChhbHQgPT09IFwiXCIpIHtcbiAgICAgIC8vIE5vIGFsdCBnaXZlbi4gVXNlIHRoZSBmaWxlIG5hbWUuIFN0cmlwIGF3YXkgdGhlIHBhdGguXG4gICAgICBhbHQgPSBzcmM7XG4gICAgICBhbHQgPSBhbHQucmVwbGFjZSgvXi4qW1xcXFwvXS8sICcnKTtcbiAgICAgIGFsdCA9IGFsdC5zdWJzdHJpbmcoMCwgYWx0Lmxhc3RJbmRleE9mKCcuJykpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIixcbiAgICAgIHVybDogc3JjXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbHQ6IGFsdCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgdG90YWxoZWlnaHQ6IHRvdGFsaGVpZ2h0LFxuICAgICAgc3JjOiBzcmNcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGhlaWdodCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgaWYgKGdyb3VwLnRvdGFsaGVpZ2h0Lm51bWJlciA+IDApIHtcbiAgICAgIGRlcHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC50b3RhbGhlaWdodCwgb3B0aW9ucykgLSBoZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogbWFrZUVtKGhlaWdodCArIGRlcHRoKVxuICAgIH07XG5cbiAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IG1ha2VFbSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHRoID4gMCkge1xuICAgICAgc3R5bGUudmVydGljYWxBbGlnbiA9IG1ha2VFbSgtZGVwdGgpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IEltZyhncm91cC5zcmMsIGdyb3VwLmFsdCwgc3R5bGUpO1xuICAgIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG5vZGUuZGVwdGggPSBkZXB0aDtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIG1ha2VFbSgtZGVwdGgpKTtcbiAgICB9XG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0ICsgZGVwdGgpKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgbWFrZUVtKHdpZHRoKSk7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgZ3JvdXAuc3JjKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwia2VyblwiLFxuICBuYW1lczogW1wiXFxcXGtlcm5cIiwgXCJcXFxcbWtlcm5cIiwgXCJcXFxcaHNraXBcIiwgXCJcXFxcbXNraXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiXSxcbiAgICBwcmltaXRpdmU6IHRydWUsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaXplID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuXG4gICAgaWYgKHBhcnNlci5zZXR0aW5ncy5zdHJpY3QpIHtcbiAgICAgIHZhciBtYXRoRnVuY3Rpb24gPSBmdW5jTmFtZVsxXSA9PT0gJ20nOyAvLyBcXG1rZXJuLCBcXG1za2lwXG5cbiAgICAgIHZhciBtdVVuaXQgPSBzaXplLnZhbHVlLnVuaXQgPT09ICdtdSc7XG5cbiAgICAgIGlmIChtYXRoRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKCFtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgXCIgKyAoXCJub3QgXCIgKyBzaXplLnZhbHVlLnVuaXQgKyBcIiB1bml0c1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyLm1vZGUgIT09IFwibWF0aFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRVbml0c1wiLCBcIkxhVGVYJ3MgXCIgKyBmdW5jTmFtZSArIFwiIHdvcmtzIG9ubHkgaW4gbWF0aCBtb2RlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAhbWF0aEZ1bmN0aW9uXG4gICAgICAgIGlmIChtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaW1lbnNpb246IHNpemUudmFsdWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VHbHVlKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBkaW1lbnNpb24gPSBjYWxjdWxhdGVTaXplKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlNwYWNlTm9kZShkaW1lbnNpb24pO1xuICB9XG5cbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGFwXCIsXG4gIG5hbWVzOiBbXCJcXFxcbWF0aGxsYXBcIiwgXCJcXFxcbWF0aHJsYXBcIiwgXCJcXFxcbWF0aGNsYXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBtYXRobGxhcCwgbWF0aHJsYXAsIG1hdGhjbGFwXG4gICAgdmFyIGlubmVyO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCA9PT0gXCJjbGFwXCIpIHtcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly93d3cubWF0aC5sc3UuZWR1L35hcGVybGlzL3B1YmxpY2F0aW9ucy9tYXRoY2xhcC9cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTsgLy8gd3JhcCwgc2luY2UgQ1NTIHdpbGwgY2VudGVyIGEgLmNsYXAgPiAuaW5uZXIgPiBzcGFuXG5cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiaW5uZXJcIl0sIFtpbm5lcl0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cbiAgICAvLyBUaGlzIGNvZGUgcmVzb2x2ZWQgaXNzdWUgIzExNTNcblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0obm9kZS5oZWlnaHQgKyBub2RlLmRlcHRoKTtcblxuICAgIGlmIChub2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1ub2RlLmRlcHRoKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuLnVuc2hpZnQoc3RydXQpOyAvLyBOZXh0LCBwcmV2ZW50IHZlcnRpY2FsIG1pc3BsYWNlbWVudCB3aGVuIG5leHQgdG8gc29tZXRoaW5nIHRhbGwuXG4gICAgLy8gVGhpcyBjb2RlIHJlc29sdmVzIGlzc3VlICMxMjM0XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGhpbmJveFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInZib3hcIl0sIFtub2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCAhPT0gXCJybGFwXCIpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBncm91cC5hbGlnbm1lbnQgPT09IFwibGxhcFwiID8gXCItMVwiIDogXCItMC41XCI7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBvZmZzZXQgKyBcIndpZHRoXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIwcHhcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3R5bGluZ1wiLFxuICBuYW1lczogW1wiXFxcXChcIiwgXCIkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBvdXRlck1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICBwYXJzZXIuc3dpdGNoTW9kZShcIm1hdGhcIik7XG4gICAgdmFyIGNsb3NlID0gZnVuY05hbWUgPT09IFwiXFxcXChcIiA/IFwiXFxcXClcIiA6IFwiJFwiO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgY2xvc2UpO1xuICAgIHBhcnNlci5leHBlY3QoY2xvc2UpO1xuICAgIHBhcnNlci5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzdHlsZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQ2hlY2sgZm9yIGV4dHJhIGNsb3NpbmcgbWF0aCBkZWxpbWl0ZXJzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFwpXCIsIFwiXFxcXF1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJNaXNtYXRjaGVkIFwiICsgY29udGV4dC5mdW5jTmFtZSk7XG4gIH1cblxufSk7XG5cbnZhciBjaG9vc2VNYXRoU3R5bGUgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIFN0eWxlJDEuRElTUExBWS5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLmRpc3BsYXk7XG5cbiAgICBjYXNlIFN0eWxlJDEuVEVYVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnRleHQ7XG5cbiAgICBjYXNlIFN0eWxlJDEuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBTdHlsZSQxLlNDUklQVFNDUklQVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnNjcmlwdHNjcmlwdDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZ3JvdXAudGV4dDtcbiAgfVxufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRoY2hvaWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDQsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZGlzcGxheTogb3JkYXJndW1lbnQoYXJnc1swXSksXG4gICAgICB0ZXh0OiBvcmRhcmd1bWVudChhcmdzWzFdKSxcbiAgICAgIHNjcmlwdDogb3JkYXJndW1lbnQoYXJnc1syXSksXG4gICAgICBzY3JpcHRzY3JpcHQ6IG9yZGFyZ3VtZW50KGFyZ3NbM10pXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGJvZHksIG9wdGlvbnMpO1xuICB9XG59KTtcblxudmFyIGFzc2VtYmxlU3VwU3ViID0gKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgc3R5bGUsIHNsYW50LCBiYXNlU2hpZnQpID0+IHtcbiAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYmFzZV0pO1xuICB2YXIgc3ViSXNTaW5nbGVDaGFyYWN0ZXIgPSBzdWJHcm91cCAmJiB1dGlscy5pc0NoYXJhY3RlckJveChzdWJHcm91cCk7XG4gIHZhciBzdWI7XG4gIHZhciBzdXA7IC8vIFdlIG1hbnVhbGx5IGhhdmUgdG8gaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIFRoaXMsXG4gIC8vIGFzaWRlIGZyb20gdGhlIGtlcm4gY2FsY3VsYXRpb25zLCBpcyBjb3BpZWQgZnJvbSBzdXBzdWIuXG5cbiAgaWYgKHN1cEdyb3VwKSB7XG4gICAgdmFyIGVsZW0gPSBidWlsZEdyb3VwJDEoc3VwR3JvdXAsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUuc3VwKCkpLCBvcHRpb25zKTtcbiAgICBzdXAgPSB7XG4gICAgICBlbGVtLFxuICAgICAga2VybjogTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczIC0gZWxlbS5kZXB0aClcbiAgICB9O1xuICB9XG5cbiAgaWYgKHN1Ykdyb3VwKSB7XG4gICAgdmFyIF9lbGVtID0gYnVpbGRHcm91cCQxKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3ViKSB7XG4gICAgdmFyIHRvcCA9IGJhc2UuaGVpZ2h0IC0gYmFzZVNoaWZ0OyAvLyBTaGlmdCB0aGUgbGltaXRzIGJ5IHRoZSBzbGFudCBvZiB0aGUgc3ltYm9sLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBhcmUgc3VwcG9zZWQgdG8gc2hpZnQgdGhlIGxpbWl0cyBieSAxLzIgb2YgdGhlIHNsYW50LFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSBhcmUgY2VudGVyaW5nIHRoZSBsaW1pdHMgYWRkaW5nIGEgZnVsbCBzbGFudCBvZlxuICAgIC8vIG1hcmdpbiB3aWxsIHNoaWZ0IGJ5IDEvMiB0aGF0LlxuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IHRvcCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBjYXNlIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciAodGhpcyB3b3VsZCBtZWFuIHRoZVxuICAgIC8vIHN1cHN1YiB3YXMgc2VuZGluZyB1cyBhIGdyb3VwIHdpdGggbm8gc3VwZXJzY3JpcHQgb3JcbiAgICAvLyBzdWJzY3JpcHQpIGJ1dCBiZSBzYWZlLlxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gW2ZpbmFsR3JvdXBdO1xuXG4gIGlmIChzdWIgJiYgc2xhbnQgIT09IDAgJiYgIXN1YklzU2luZ2xlQ2hhcmFjdGVyKSB7XG4gICAgLy8gQSBuZWdhdGl2ZSBtYXJnaW4tbGVmdCB3YXMgYXBwbGllZCB0byB0aGUgbG93ZXIgbGltaXQuXG4gICAgLy8gQXZvaWQgYW4gb3ZlcmxhcCBieSBwbGFjaW5nIGEgc3BhY2VyIG9uIHRoZSBsZWZ0IG9uIHRoZSBncm91cC5cbiAgICB2YXIgc3BhY2VyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgc3BhY2VyLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNsYW50KTtcbiAgICBwYXJ0cy51bnNoaWZ0KHNwYWNlcik7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCIsIFwib3AtbGltaXRzXCJdLCBwYXJ0cywgb3B0aW9ucyk7XG59O1xuXG4vLyBMaW1pdHMsIHN5bWJvbHNcbi8vIE1vc3Qgb3BlcmF0b3JzIGhhdmUgYSBsYXJnZSBzdWNjZXNzb3Igc3ltYm9sLCBidXQgdGhlc2UgZG9uJ3QuXG52YXIgbm9TdWNjZXNzb3IgPSBbXCJcXFxcc21hbGxpbnRcIl07IC8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5IFwib3BcIiwgYnV0IGFsc29cbi8vIFwic3Vwc3ViXCIgc2luY2Ugc29tZSBvZiB0aGVtIChsaWtlIFxcaW50KSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cblxudmFyIGh0bWxCdWlsZGVyJDIgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUgJiYgZ3JvdXAuc3ltYm9sICYmICF1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAvLyBNb3N0IHN5bWJvbCBvcGVyYXRvcnMgZ2V0IGxhcmdlciBpbiBkaXNwbGF5c3R5bGUgKHJ1bGUgMTMpXG4gICAgbGFyZ2UgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBzeW1ib2wsIGNyZWF0ZSB0aGUgc3ltYm9sLlxuICAgIHZhciBmb250TmFtZSA9IGxhcmdlID8gXCJTaXplMi1SZWd1bGFyXCIgOiBcIlNpemUxLVJlZ3VsYXJcIjtcbiAgICB2YXIgc3Rhc2ggPSBcIlwiO1xuXG4gICAgaWYgKGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpIHtcbiAgICAgIC8vIE5vIGZvbnQgZ2x5cGhzIHlldCwgc28gdXNlIGEgZ2x5cGggdy9vIHRoZSBvdmFsLlxuICAgICAgLy8gVE9ETzogV2hlbiBmb250IGdseXBocyBhcmUgYXZhaWxhYmxlLCBkZWxldGUgdGhpcyBjb2RlLlxuICAgICAgc3Rhc2ggPSBncm91cC5uYW1lLnNsaWNlKDEpO1xuICAgICAgZ3JvdXAubmFtZSA9IHN0YXNoID09PSBcIm9paW50XCIgPyBcIlxcXFxpaW50XCIgOiBcIlxcXFxpaWludFwiO1xuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLm5hbWUsIGZvbnROYW1lLCBcIm1hdGhcIiwgb3B0aW9ucywgW1wibW9wXCIsIFwib3Atc3ltYm9sXCIsIGxhcmdlID8gXCJsYXJnZS1vcFwiIDogXCJzbWFsbC1vcFwiXSk7XG5cbiAgICBpZiAoc3Rhc2gubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2UncmUgaW4gXFxvaWludCBvciBcXG9paWludC4gT3ZlcmxheSB0aGUgb3ZhbC5cbiAgICAgIC8vIFRPRE86IFdoZW4gZm9udCBnbHlwaHMgYXJlIGF2YWlsYWJsZSwgZGVsZXRlIHRoaXMgY29kZS5cbiAgICAgIHZhciBpdGFsaWMgPSBiYXNlLml0YWxpYztcbiAgICAgIHZhciBvdmFsID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKHN0YXNoICsgXCJTaXplXCIgKyAobGFyZ2UgPyBcIjJcIiA6IFwiMVwiKSwgb3B0aW9ucyk7XG4gICAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBiYXNlLFxuICAgICAgICAgIHNoaWZ0OiAwXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBvdmFsLFxuICAgICAgICAgIHNoaWZ0OiBsYXJnZSA/IDAuMDggOiAwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIGdyb3VwLm5hbWUgPSBcIlxcXFxcIiArIHN0YXNoO1xuICAgICAgYmFzZS5jbGFzc2VzLnVuc2hpZnQoXCJtb3BcIik7IC8vICRGbG93Rml4TWVcblxuICAgICAgYmFzZS5pdGFsaWMgPSBpdGFsaWM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgbGlzdCwgY29tcG9zZSB0aGF0IGxpc3QuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG5cbiAgICBpZiAoaW5uZXIubGVuZ3RoID09PSAxICYmIGlubmVyWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGlubmVyLCBvcHRpb25zKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgdGV4dCBvcGVyYXRvci4gQnVpbGQgdGhlIHRleHQgZnJvbSB0aGVcbiAgICAvLyBvcGVyYXRvcidzIG5hbWUuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paWludFwiKSAmJiAhZ3JvdXAuc3VwcHJlc3NCYXNlU2hpZnQpIHtcbiAgICAvLyBXZSBzdXBwcmVzcyB0aGUgc2hpZnQgb2YgdGhlIGJhc2Ugb2YgXFxvdmVyc2V0IGFuZCBcXHVuZGVyc2V0LiBPdGhlcndpc2UsXG4gICAgLy8gc2hpZnQgdGhlIHN5bWJvbCBzbyBpdHMgY2VudGVyIGxpZXMgb24gdGhlIGF4aXMgKHJ1bGUgMTMpLiBJdFxuICAgIC8vIGFwcGVhcnMgdGhhdCBvdXIgZm9udHMgaGF2ZSB0aGUgY2VudGVycyBvZiB0aGUgc3ltYm9scyBhbHJlYWR5XG4gICAgLy8gYWxtb3N0IG9uIHRoZSBheGlzLCBzbyB0aGVzZSBudW1iZXJzIGFyZSB2ZXJ5IHNtYWxsLiBOb3RlIHdlXG4gICAgLy8gZG9uJ3QgYWN0dWFsbHkgYXBwbHkgdGhpcyBoZXJlLCBidXQgaW5zdGVhZCBpdCBpcyB1c2VkIGVpdGhlciBpblxuICAgIC8vIHRoZSB2bGlzdCBjcmVhdGlvbiBvciBzZXBhcmF0ZWx5IHdoZW4gdGhlcmUgYXJlIG5vIGxpbWl0cy5cbiAgICBiYXNlU2hpZnQgPSAoYmFzZS5oZWlnaHQgLSBiYXNlLmRlcHRoKSAvIDIgLSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDsgLy8gVGhlIHNsYW50IG9mIHRoZSBzeW1ib2wgaXMganVzdCBpdHMgaXRhbGljIGNvcnJlY3Rpb24uXG4gICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2xhbnQgPSBiYXNlLml0YWxpYztcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2VTaGlmdCkge1xuICAgICAgYmFzZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgIGJhc2Uuc3R5bGUudG9wID0gbWFrZUVtKGJhc2VTaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDEgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIG5vZGU7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW1ib2wuIEp1c3QgYWRkIHRoZSBzeW1ib2wuXG4gICAgbm9kZSA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5uYW1lLCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXJnZW9wXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZXJhdG9yIHdpdGggY2hpbGRyZW4uIEFkZCB0aGVtLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtb1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtaVwiLCBbbmV3IFRleHROb2RlKGdyb3VwLm5hbWUuc2xpY2UoMSkpXSk7IC8vIEFwcGVuZCBhbiA8bW8+JkFwcGx5RnVuY3Rpb247PC9tbz4uXG4gICAgLy8gcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvUkVDLU1hdGhNTC9jaGFwM18yLmh0bWwjc2VjMy4yLjRcblxuICAgIHZhciBvcGVyYXRvciA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMmMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJjMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMmMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyYzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MmEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MmEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJhMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MmEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJhMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyYzBcIiwgXCJcXHUyMmMxXCIsIFwiXFx1MjJjMlwiLCBcIlxcdTIyYzNcIiwgXCJcXHUyYTAwXCIsIFwiXFx1MmEwMVwiLCBcIlxcdTJhMDJcIiwgXCJcXHUyYTA0XCIsIFwiXFx1MmEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJCaWdPcHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIFRoZXJlIGFyZSAyIGZsYWdzIGZvciBvcGVyYXRvcnM7IHdoZXRoZXIgdGhleSBwcm9kdWNlIGxpbWl0cyBpblxuLy8gZGlzcGxheXN0eWxlLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzeW1ib2xzIGFuZCBzaG91bGQgZ3JvdyBpblxuLy8gZGlzcGxheXN0eWxlLiBUaGVzZSBmb3VyIGdyb3VwcyBjb3ZlciB0aGUgZm91ciBwb3NzaWJsZSBjaG9pY2VzLlxuXG52YXIgc2luZ2xlQ2hhckludGVncmFscyA9IHtcbiAgXCJcXHUyMjJiXCI6IFwiXFxcXGludFwiLFxuICBcIlxcdTIyMmNcIjogXCJcXFxcaWludFwiLFxuICBcIlxcdTIyMmRcIjogXCJcXFxcaWlpbnRcIixcbiAgXCJcXHUyMjJlXCI6IFwiXFxcXG9pbnRcIixcbiAgXCJcXHUyMjJmXCI6IFwiXFxcXG9paW50XCIsXG4gIFwiXFx1MjIzMFwiOiBcIlxcXFxvaWlpbnRcIlxufTsgLy8gTm8gbGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxhcmNzaW5cIiwgXCJcXFxcYXJjY29zXCIsIFwiXFxcXGFyY3RhblwiLCBcIlxcXFxhcmN0Z1wiLCBcIlxcXFxhcmNjdGdcIiwgXCJcXFxcYXJnXCIsIFwiXFxcXGNoXCIsIFwiXFxcXGNvc1wiLCBcIlxcXFxjb3NlY1wiLCBcIlxcXFxjb3NoXCIsIFwiXFxcXGNvdFwiLCBcIlxcXFxjb3RnXCIsIFwiXFxcXGNvdGhcIiwgXCJcXFxcY3NjXCIsIFwiXFxcXGN0Z1wiLCBcIlxcXFxjdGhcIiwgXCJcXFxcZGVnXCIsIFwiXFxcXGRpbVwiLCBcIlxcXFxleHBcIiwgXCJcXFxcaG9tXCIsIFwiXFxcXGtlclwiLCBcIlxcXFxsZ1wiLCBcIlxcXFxsblwiLCBcIlxcXFxsb2dcIiwgXCJcXFxcc2VjXCIsIFwiXFxcXHNpblwiLCBcIlxcXFxzaW5oXCIsIFwiXFxcXHNoXCIsIFwiXFxcXHRhblwiLCBcIlxcXFx0YW5oXCIsIFwiXFxcXHRnXCIsIFwiXFxcXHRoXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBMaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGRldFwiLCBcIlxcXFxnY2RcIiwgXCJcXFxcaW5mXCIsIFwiXFxcXGxpbVwiLCBcIlxcXFxtYXhcIiwgXCJcXFxcbWluXCIsIFwiXFxcXFByXCIsIFwiXFxcXHN1cFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJiXCIsIFwiXFx1MjIyY1wiLCBcIlxcdTIyMmRcIiwgXCJcXHUyMjJlXCIsIFwiXFx1MjIyZlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjU7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJJbnRlZ3JhbHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7XG5cbi8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5XG4vLyBcIm9wZXJhdG9ybmFtZVwiLCBidXQgYWxzbyAgXCJzdXBzdWJcIiBzaW5jZSBcXG9wZXJhdG9ybmFtZSogY2FuXG4vLyBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxudmFyIGh0bWxCdWlsZGVyJDEgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgICBoYXNMaW1pdHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgfVxuXG4gIHZhciBiYXNlO1xuXG4gIGlmIChncm91cC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICB2YXIgYm9keSA9IGdyb3VwLmJvZHkubWFwKGNoaWxkID0+IHtcbiAgICAgIC8vICRGbG93Rml4TWU6IENoZWNrIGlmIHRoZSBub2RlIGhhcyBhIHN0cmluZyBgdGV4dGAgcHJvcGVydHkuXG4gICAgICB2YXIgY2hpbGRUZXh0ID0gY2hpbGQudGV4dDtcblxuICAgICAgaWYgKHR5cGVvZiBjaGlsZFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiBjaGlsZC5tb2RlLFxuICAgICAgICAgIHRleHQ6IGNoaWxkVGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDb25zb2xpZGF0ZSBmdW5jdGlvbiBuYW1lcyBpbnRvIHN5bWJvbCBjaGFyYWN0ZXJzLlxuXG4gICAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgICAvLyBQZXIgYW1zb3BuIHBhY2thZ2UsXG4gICAgICAgIC8vIGNoYW5nZSBtaW51cyB0byBoeXBoZW4gYW5kIFxcYXN0IHRvIGFzdGVyaXNrXG4gICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBleHByZXNzaW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBbXSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaGFzTGltaXRzKSB7XG4gICAgcmV0dXJuIGFzc2VtYmxlU3VwU3ViKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgb3B0aW9ucy5zdHlsZSwgMCwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoZSBzdGVwcyB0YWtlbiBoZXJlIGFyZSBzaW1pbGFyIHRvIHRoZSBodG1sIHZlcnNpb24uXG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aEZvbnQoXCJtYXRocm1cIikpOyAvLyBJcyBleHByZXNzaW9uIGEgc3RyaW5nIG9yIGhhcyBpdCBzb21ldGhpbmcgbGlrZSBhIGZyYWN0aW9uP1xuXG4gIHZhciBpc0FsbFN0cmluZyA9IHRydWU7IC8vIGRlZmF1bHRcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGV4cHJlc3Npb25baV07XG5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIG1hdGhNTFRyZWUuU3BhY2VOb2RlKSA7IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKG5vZGUgPT4gbm9kZS50b1RleHQoKSkuam9pbihcIlwiKTtcbiAgICBleHByZXNzaW9uID0gW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHdvcmQpXTtcbiAgfVxuXG4gIHZhciBpZGVudGlmaWVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBleHByZXNzaW9uKTtcbiAgaWRlbnRpZmllci5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCBcIm5vcm1hbFwiKTsgLy8gXFx1MjA2MSBpcyB0aGUgc2FtZSBhcyAmQXBwbHlGdW5jdGlvbjtcbiAgLy8gcmVmOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2NoYXJzZXRzL3JlZl9odG1sX2VudGl0aWVzX2EuYXNwXG5cbiAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoXCJcXHUyMDYxXCIsIFwidGV4dFwiKV0pO1xuXG4gIGlmIChncm91cC5wYXJlbnRJc1N1cFN1Yikge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVAXCIsIFwiXFxcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDEsXG4gIG1hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3BlcmF0b3JuYW1lXCIsIFwiXFxcXEBpZnN0YXJcXFxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcXFxvcGVyYXRvcm5hbWVAXCIpO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJvcmRncm91cFwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKGdyb3VwLnNlbWlzaW1wbGUpIHtcbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSksIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3ZlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVybGluZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE92ZXJsaW5lcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZyA0NDMsIFJ1bGUgOS5cbiAgICAvLyBCdWlsZCB0aGUgaW5uZXIgZ3JvdXAgaW4gdGhlIGNyYW1wZWQgc3R5bGUuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIENyZWF0ZSB0aGUgbGluZSBhYm92ZSB0aGUgYm9keVxuXG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJvdmVybGluZS1saW5lXCIsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zXG5cbiAgICB2YXIgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbGluZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJvdmVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBvcGVyYXRvciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx1MjAzZVwiKV0pO1xuICAgIG9wZXJhdG9yLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwidHJ1ZVwiKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSwgZmFsc2UpOyAvLyBcXHBoYW50b20gaXNuJ3Qgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBlbGVtZW50cyBpdCBjb250YWlucy5cbiAgICAvLyBTZWUgXCJjb2xvclwiIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYyLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICBub2RlLmhlaWdodCA9IDA7XG4gICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5baV0uaGVpZ2h0ID0gMDtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5kZXB0aCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBTZWUgc21hc2ggZm9yIGNvbW1lbnQgcmU6IHVzZSBvZiBtYWtlVkxpc3RcblxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXHNtYXNoIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYzLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidnBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhQaGFudG9tKCkpXSk7XG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwicmxhcFwiXSwgW2lubmVyLCBmaXhdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGFtb3VudCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKS52YWx1ZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicmFpc2Vib3hcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZHk6IGFtb3VudCxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgdmFyIGR5ID0gY2FsY3VsYXRlU2l6ZShncm91cC5keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogLWR5LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxccmVsYXhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImludGVybmFsXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZVxuICAgIH07XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaGlmdCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIHdpZHRoID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuICAgIHZhciBoZWlnaHQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcInNpemVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicnVsZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzaGlmdDogc2hpZnQgJiYgYXNzZXJ0Tm9kZVR5cGUoc2hpZnQsIFwic2l6ZVwiKS52YWx1ZSxcbiAgICAgIHdpZHRoOiB3aWR0aC52YWx1ZSxcbiAgICAgIGhlaWdodDogaGVpZ2h0LnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0od2lkdGgpO1xuICAgIHJ1bGUuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSBtYWtlRW0oaGVpZ2h0KTtcbiAgICBydWxlLnN0eWxlLmJvdHRvbSA9IG1ha2VFbShzaGlmdCk7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7XG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5jb2xvciAmJiBvcHRpb25zLmdldENvbG9yKCkgfHwgXCJibGFja1wiO1xuICAgIHZhciBydWxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJtYXRoYmFja2dyb3VuZFwiLCBjb2xvcik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0od2lkdGgpKTtcbiAgICBydWxlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0KSk7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oc2hpZnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImRlcHRoXCIsIG1ha2VFbSgtc2hpZnQpKTtcbiAgICB9XG5cbiAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxufSk7XG5cbmZ1bmN0aW9uIHNpemluZ0dyb3VwKHZhbHVlLCBvcHRpb25zLCBiYXNlT3B0aW9ucykge1xuICB2YXIgaW5uZXIgPSBidWlsZEV4cHJlc3Npb24kMSh2YWx1ZSwgb3B0aW9ucywgZmFsc2UpO1xuICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gQWRkIHNpemUtcmVzZXR0aW5nIGNsYXNzZXMgdG8gdGhlIGlubmVyIGxpc3QgYW5kIHNldCBtYXhGb250U2l6ZVxuICAvLyBtYW51YWxseS4gSGFuZGxlIG5lc3RlZCBzaXplIGNoYW5nZXMuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSBpbm5lcltpXS5jbGFzc2VzLmluZGV4T2YoXCJzaXppbmdcIik7XG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5uZXJbaV0uY2xhc3Nlcywgb3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID09PSBcInJlc2V0LXNpemVcIiArIG9wdGlvbnMuc2l6ZSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBzaXplIGNoYW5nZTogZS5nLiwgaW5uZXJbaV0gaXMgdGhlIFwiYlwiIGluXG4gICAgICAvLyBgXFxIdWdlIGEgXFxzbWFsbCBiYC4gT3ZlcnJpZGUgdGhlIG9sZCBzaXplICh0aGUgYHJlc2V0LWAgY2xhc3MpXG4gICAgICAvLyBidXQgbm90IHRoZSBuZXcgc2l6ZS5cbiAgICAgIGlubmVyW2ldLmNsYXNzZXNbcG9zICsgMV0gPSBcInJlc2V0LXNpemVcIiArIGJhc2VPcHRpb25zLnNpemU7XG4gICAgfVxuXG4gICAgaW5uZXJbaV0uaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgaW5uZXJbaV0uZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoaW5uZXIpO1xufVxudmFyIHNpemVGdW5jcyA9IFtcIlxcXFx0aW55XCIsIFwiXFxcXHNpeHB0c2l6ZVwiLCBcIlxcXFxzY3JpcHRzaXplXCIsIFwiXFxcXGZvb3Rub3Rlc2l6ZVwiLCBcIlxcXFxzbWFsbFwiLCBcIlxcXFxub3JtYWxzaXplXCIsIFwiXFxcXGxhcmdlXCIsIFwiXFxcXExhcmdlXCIsIFwiXFxcXExBUkdFXCIsIFwiXFxcXGh1Z2VcIiwgXCJcXFxcSHVnZVwiXTtcbnZhciBodG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBIYW5kbGUgc2l6aW5nIG9wZXJhdG9ycyBsaWtlIFxcSHVnZS4gUmVhbCBUZVggZG9lc24ndCBhY3R1YWxseSBhbGxvd1xuICAvLyB0aGVzZSBmdW5jdGlvbnMgaW5zaWRlIG9mIG1hdGggZXhwcmVzc2lvbnMsIHNvIHdlIGRvIHNvbWUgc3BlY2lhbFxuICAvLyBoYW5kbGluZy5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUoZ3JvdXAuc2l6ZSk7XG4gIHJldHVybiBzaXppbmdHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKTtcbn07XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic2l6aW5nXCIsXG4gIG5hbWVzOiBzaXplRnVuY3MsXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6aW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzaXplIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYWJvdmVcbiAgICAgIHNpemU6IHNpemVGdW5jcy5pbmRleE9mKGZ1bmNOYW1lKSArIDEsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTsgLy8gVE9ETyhlbWlseSk6IFRoaXMgZG9lc24ndCBwcm9kdWNlIHRoZSBjb3JyZWN0IHNpemUgZm9yIG5lc3RlZCBzaXplXG4gICAgLy8gY2hhbmdlcywgYmVjYXVzZSB3ZSBkb24ndCBrZWVwIHN0YXRlIG9mIHdoYXQgc3R5bGUgd2UncmUgY3VycmVudGx5XG4gICAgLy8gaW4sIHNvIHdlIGNhbid0IHJlc2V0IHRoZSBzaXplIHRvIG5vcm1hbCBiZWZvcmUgY2hhbmdpbmcgaXQuICBOb3dcbiAgICAvLyB0aGF0IHdlJ3JlIHBhc3NpbmcgYW4gb3B0aW9ucyBwYXJhbWV0ZXIgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZml4XG4gICAgLy8gdGhpcy5cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHNpemVcIiwgbWFrZUVtKG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIHNtYXNoLCB3aXRoIG9wdGlvbmFsIFt0Yl0sIGFzIGluIEFNU1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNtYXNoXCIsXG4gIG5hbWVzOiBbXCJcXFxcc21hc2hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncywgb3B0QXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5LFxuICAgICAgc21hc2hIZWlnaHQsXG4gICAgICBzbWFzaERlcHRoXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTtcblxuICAgIGlmICghZ3JvdXAuc21hc2hIZWlnaHQgJiYgIWdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zbWFzaEhlaWdodCkge1xuICAgICAgbm9kZS5oZWlnaHQgPSAwOyAvLyBJbiBvcmRlciB0byBpbmZsdWVuY2UgbWFrZVZMaXN0LCB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjaGlsZHJlbi5cblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIG5vZGUuZGVwdGggPSAwO1xuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW19pXS5kZXB0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3ZlIHJlc2V0IHRoZSBUZVgtbGlrZSBoZWlnaHQgYW5kIGRlcHRoIHZhbHVlcy5cbiAgICAvLyBCdXQgdGhlIHNwYW4gc3RpbGwgaGFzIGFuIEhUTUwgbGluZSBoZWlnaHQuXG4gICAgLy8gbWFrZVZMaXN0IGFwcGxpZXMgXCJkaXNwbGF5OiB0YWJsZS1jZWxsXCIsIHdoaWNoIHByZXZlbnRzIHRoZSBicm93c2VyXG4gICAgLy8gZnJvbSBhY3Rpbmcgb24gdGhhdCBsaW5lIGhlaWdodC4gU28gd2UnbGwgY2FsbCBtYWtlVkxpc3Qgbm93LlxuXG5cbiAgICB2YXIgc21hc2hlZE5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gRm9yIHNwYWNpbmcsIFRlWCB0cmVhdHMgXFxocGhhbnRvbSBhcyBhIG1hdGggZ3JvdXAgKHNhbWUgc3BhY2luZyBhcyBvcmQpLlxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtzbWFzaGVkTm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzcXJ0XCIsXG4gIG5hbWVzOiBbXCJcXFxcc3FydFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgaW5kZXggPSBvcHRBcmdzWzBdO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzcXJ0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTcXVhcmUgcm9vdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgUnVsZSAxMS5cbiAgICAvLyBGaXJzdCwgd2UgZG8gdGhlIHNhbWUgc3RlcHMgYXMgaW4gb3ZlcmxpbmUgdG8gYnVpbGQgdGhlIGlubmVyIGdyb3VwXG4gICAgLy8gYW5kIGxpbmVcbiAgICB2YXIgaW5uZXIgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7XG5cbiAgICBpZiAoaW5uZXIuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAvLyBSZW5kZXIgYSBzbWFsbCBzdXJkLlxuICAgICAgaW5uZXIuaGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG5cbiAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChpbm5lciwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSBzaXplIGZvciB0aGUgXFxzdXJkIGRlbGltaXRlclxuXG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7XG4gICAgdmFyIHRoZXRhID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgcGhpID0gdGhldGE7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pZCA8IFN0eWxlJDEuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIHtcbiAgICAgIHNwYW46IGltZyxcbiAgICAgIHJ1bGVXaWR0aCxcbiAgICAgIGFkdmFuY2VXaWR0aFxuICAgIH0gPSBkZWxpbWl0ZXIuc3FydEltYWdlKG1pbkRlbGltaXRlckhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlbGltRGVwdGggPSBpbWcuaGVpZ2h0IC0gcnVsZVdpZHRoOyAvLyBBZGp1c3QgdGhlIGNsZWFyYW5jZSBiYXNlZCBvbiB0aGUgZGVsaW1pdGVyIHNpemVcblxuICAgIGlmIChkZWxpbURlcHRoID4gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyBsaW5lQ2xlYXJhbmNlKSB7XG4gICAgICBsaW5lQ2xlYXJhbmNlID0gKGxpbmVDbGVhcmFuY2UgKyBkZWxpbURlcHRoIC0gaW5uZXIuaGVpZ2h0IC0gaW5uZXIuZGVwdGgpIC8gMjtcbiAgICB9IC8vIFNoaWZ0IHRoZSBzcXJ0IGltYWdlXG5cblxuICAgIHZhciBpbWdTaGlmdCA9IGltZy5oZWlnaHQgLSBpbm5lci5oZWlnaHQgLSBsaW5lQ2xlYXJhbmNlIC0gcnVsZVdpZHRoO1xuICAgIGlubmVyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gbWFrZUVtKGFkdmFuY2VXaWR0aCk7IC8vIE92ZXJsYXkgdGhlIGltYWdlIGFuZCB0aGUgYXJndW1lbnQuXG5cbiAgICB2YXIgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLShpbm5lci5oZWlnaHQgKyBpbWdTaGlmdClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZ1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogcnVsZVdpZHRoXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFncm91cC5pbmRleCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIG9wdGlvbmFsIHJvb3QgaW5kZXhcbiAgICAgIC8vIFRoZSBpbmRleCBpcyBhbHdheXMgaW4gc2NyaXB0c2NyaXB0IHN0eWxlXG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFRTQ1JJUFQpO1xuICAgICAgdmFyIHJvb3RtID0gYnVpbGRHcm91cCQxKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHtcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH0gPSBncm91cDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG5cbn0pO1xuXG52YXIgc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBTdHlsZSQxLkRJU1BMQVksXG4gIFwidGV4dFwiOiBTdHlsZSQxLlRFWFQsXG4gIFwic2NyaXB0XCI6IFN0eWxlJDEuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVFNDUklQVFxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcZGlzcGxheXN0eWxlXCIsIFwiXFxcXHRleHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzY3JpcHRzdHlsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIC8vIHBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTsgLy8gVE9ETzogUmVmYWN0b3IgdG8gYXZvaWQgZHVwbGljYXRpbmcgc3R5bGVNYXAgaW4gbXVsdGlwbGUgcGxhY2VzIChlLmcuXG4gICAgLy8gaGVyZSBhbmQgaW4gYnVpbGRIVE1MIGFuZCBkZS1kdXBlIHRoZSBlbnVtZXJhdGlvbiBvZiBhbGwgdGhlIHN0eWxlcykuXG4gICAgLy8gJEZsb3dGaXhNZTogVGhlIG5hbWVzIGFib3ZlIGV4YWN0bHkgbWF0Y2ggdGhlIHN0eWxlcy5cblxuICAgIHZhciBzdHlsZSA9IGZ1bmNOYW1lLnNsaWNlKDEsIGZ1bmNOYW1lLmxlbmd0aCAtIDUpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHRvIHVzZSBieSBwdWxsaW5nIG91dCB0aGUgc3R5bGUgZnJvbVxuICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgIHN0eWxlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHlsZSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBnLiA0NDIsIFJ1bGUgMy5cbiAgICB2YXIgbmV3U3R5bGUgPSBzdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgd2UncmUgY2hhbmdpbmcgdG8uXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBodG1sQnVpbGRlckRlbGVnYXRlID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucykge1xuICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgaWYgKCFiYXNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wXCIpIHtcbiAgICAvLyBPcGVyYXRvcnMgaGFuZGxlIHN1cHN1YnMgZGlmZmVyZW50bHkgd2hlbiB0aGV5IGhhdmUgbGltaXRzXG4gICAgLy8gKGUuZy4gYFxcZGlzcGxheXN0eWxlXFxzdW1fMl4zYClcbiAgICB2YXIgZGVsZWdhdGUgPSBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gaHRtbEJ1aWxkZXIkMiA6IG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSB7XG4gICAgdmFyIF9kZWxlZ2F0ZSA9IGJhc2UuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBodG1sQnVpbGRlciQxIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiYWNjZW50XCIpIHtcbiAgICByZXR1cm4gdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZS5iYXNlKSA/IGh0bWxCdWlsZGVyJGEgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICB2YXIgaXNTdXAgPSAhZ3JvdXAuc3ViO1xuICAgIHJldHVybiBpc1N1cCA9PT0gYmFzZS5pc092ZXIgPyBodG1sQnVpbGRlciQzIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsgLy8gU3VwZXIgc2NyaXB0cyBhbmQgc3Vic2NyaXB0cywgd2hvc2UgcHJlY2lzZSBwbGFjZW1lbnQgY2FuIGRlcGVuZCBvbiBvdGhlclxuLy8gZnVuY3Rpb25zIHRoYXQgcHJlY2VkZSB0aGVtLlxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInN1cHN1YlwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGJ1aWxkZXJEZWxlZ2F0ZSkge1xuICAgICAgcmV0dXJuIGJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGJhc2U6IHZhbHVlQmFzZSxcbiAgICAgIHN1cDogdmFsdWVTdXAsXG4gICAgICBzdWI6IHZhbHVlU3ViXG4gICAgfSA9IGdyb3VwO1xuICAgIHZhciBiYXNlID0gYnVpbGRHcm91cCQxKHZhbHVlQmFzZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN1cG07XG4gICAgdmFyIHN1Ym07XG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7IC8vIFJ1bGUgMThhXG5cbiAgICB2YXIgc3VwU2hpZnQgPSAwO1xuICAgIHZhciBzdWJTaGlmdCA9IDA7XG4gICAgdmFyIGlzQ2hhcmFjdGVyQm94ID0gdmFsdWVCYXNlICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KHZhbHVlQmFzZSk7XG5cbiAgICBpZiAodmFsdWVTdXApIHtcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1cCgpKTtcbiAgICAgIHN1cG0gPSBidWlsZEdyb3VwJDEodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkR3JvdXAkMSh2YWx1ZVN1YiwgX25ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gYmFzZS5kZXB0aCArIF9uZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3ViRHJvcCAqIF9uZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIH1cbiAgICB9IC8vIFJ1bGUgMThjXG5cblxuICAgIHZhciBtaW5TdXBTaGlmdDtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkpIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAxO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zdHlsZS5jcmFtcGVkKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDI7XG4gICAgfSAvLyBzY3JpcHRzcGFjZSBpcyBhIGZvbnQtc2l6ZS1pbmRlcGVuZGVudCBzaXplLCBzbyBzY2FsZSBpdFxuICAgIC8vIGFwcHJvcHJpYXRlbHkgZm9yIHVzZSBhcyB0aGUgbWFyZ2luUmlnaHQuXG5cblxuICAgIHZhciBtdWx0aXBsaWVyID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbWFyZ2luUmlnaHQgPSBtYWtlRW0oMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllcik7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBudWxsO1xuXG4gICAgaWYgKHN1Ym0pIHtcbiAgICAgIC8vIFN1YnNjcmlwdHMgc2hvdWxkbid0IGJlIHNoaWZ0ZWQgYnkgdGhlIGJhc2UncyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAgIC8vIEFjY291bnQgZm9yIHRoYXQgYnkgc2hpZnRpbmcgdGhlIHN1YnNjcmlwdCBiYWNrIHRoZSBhcHByb3ByaWF0ZVxuICAgICAgLy8gYW1vdW50LiBOb3RlIHdlIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSBiYXNlIGlzIGEgc2luZ2xlIHN5bWJvbC5cbiAgICAgIHZhciBpc09paW50ID0gZ3JvdXAuYmFzZSAmJiBncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiAmJiBncm91cC5iYXNlLm5hbWUgJiYgKGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5iYXNlLm5hbWUgPT09IFwiXFxcXG9paWludFwiKTtcblxuICAgICAgaWYgKGJhc2UgaW5zdGFuY2VvZiBTeW1ib2xOb2RlIHx8IGlzT2lpbnQpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBtYXJnaW5MZWZ0ID0gbWFrZUVtKC1iYXNlLml0YWxpYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN1cHN1YjtcblxuICAgIGlmIChzdXBtICYmIHN1Ym0pIHtcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdWJTaGlmdCA9IE1hdGgubWF4KHN1YlNoaWZ0LCBtZXRyaWNzLnN1YjIpO1xuICAgICAgdmFyIHJ1bGVXaWR0aCA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7IC8vIFJ1bGUgMThlXG5cbiAgICAgIHZhciBtYXhXaWR0aCA9IDQgKiBydWxlV2lkdGg7XG5cbiAgICAgIGlmIChzdXBTaGlmdCAtIHN1cG0uZGVwdGggLSAoc3VibS5oZWlnaHQgLSBzdWJTaGlmdCkgPCBtYXhXaWR0aCkge1xuICAgICAgICBzdWJTaGlmdCA9IG1heFdpZHRoIC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCkgKyBzdWJtLmhlaWdodDtcbiAgICAgICAgdmFyIHBzaSA9IDAuOCAqIG1ldHJpY3MueEhlaWdodCAtIChzdXBTaGlmdCAtIHN1cG0uZGVwdGgpO1xuXG4gICAgICAgIGlmIChwc2kgPiAwKSB7XG4gICAgICAgICAgc3VwU2hpZnQgKz0gcHNpO1xuICAgICAgICAgIHN1YlNoaWZ0IC09IHBzaTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmxpc3RFbGVtID0gW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Ym0sXG4gICAgICAgIHNoaWZ0OiBzdWJTaGlmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IHZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdWJtKSB7XG4gICAgICAvLyBSdWxlIDE4YlxuICAgICAgc3ViU2hpZnQgPSBNYXRoLm1heChzdWJTaGlmdCwgbWV0cmljcy5zdWIxLCBzdWJtLmhlaWdodCAtIDAuOCAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICB2YXIgX3ZsaXN0RWxlbSA9IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdWJtLFxuICAgICAgICBtYXJnaW5MZWZ0LFxuICAgICAgICBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiBzdWJTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IF92bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VwbSkge1xuICAgICAgLy8gUnVsZSAxOGMsIGRcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiAtc3VwU2hpZnQsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgICAgbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBJcyB0aGUgaW5uZXIgZ3JvdXAgYSByZWxldmFudCBob3Jpem9uYWwgYnJhY2U/XG4gICAgdmFyIGlzQnJhY2UgPSBmYWxzZTtcbiAgICB2YXIgaXNPdmVyO1xuICAgIHZhciBpc1N1cDtcblxuICAgIGlmIChncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICAgIGlzU3VwID0gISFncm91cC5zdXA7XG5cbiAgICAgIGlmIChpc1N1cCA9PT0gZ3JvdXAuYmFzZS5pc092ZXIpIHtcbiAgICAgICAgaXNCcmFjZSA9IHRydWU7XG4gICAgICAgIGlzT3ZlciA9IGdyb3VwLmJhc2UuaXNPdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncm91cC5iYXNlICYmIChncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiB8fCBncm91cC5iYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpKSB7XG4gICAgICBncm91cC5iYXNlLnBhcmVudElzU3VwU3ViID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKV07XG5cbiAgICBpZiAoZ3JvdXAuc3ViKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkR3JvdXAoZ3JvdXAuc3ViLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnN1cCkge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEdyb3VwKGdyb3VwLnN1cCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhciBub2RlVHlwZTtcblxuICAgIGlmIChpc0JyYWNlKSB7XG4gICAgICBub2RlVHlwZSA9IGlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCI7XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3ViKSB7XG4gICAgICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGJhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibW92ZXJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtc3VwXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3VwKSB7XG4gICAgICB2YXIgX2Jhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcFwiICYmIF9iYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YikpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiICYmIF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoX2Jhc2UubGltaXRzIHx8IG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIgJiYgX2Jhc2UyLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlMi5saW1pdHMpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlVHlwZSA9IFwibXN1YnN1cFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShub2RlVHlwZSwgY2hpbGRyZW4pO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWF0aHN5bShncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zLCBbXCJtXCIgKyBncm91cC5mYW1pbHldKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbi8vIFwibWF0aG9yZFwiIGFuZCBcInRleHRvcmRcIiBQYXJzZU5vZGVzIGNyZWF0ZWQgaW4gUGFyc2VyLmpzIGZyb20gc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJtYXRob3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG1ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpO1xuICAgIHZhciB2YXJpYW50ID0gZ2V0VmFyaWFudChncm91cCwgb3B0aW9ucykgfHwgXCJub3JtYWxcIjtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5tb2RlID09PSAndGV4dCcpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmICgvWzAtOV0vLnRlc3QoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1uXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmIChncm91cC50ZXh0ID09PSBcIlxcXFxwcmltZVwiKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBbdGV4dF0pO1xuICAgIH1cblxuICAgIGlmICh2YXJpYW50ICE9PSBkZWZhdWx0VmFyaWFudFtub2RlLnR5cGVdKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY3NzU3BhY2UgPSB7XG4gIFwiXFxcXG5vYnJlYWtcIjogXCJub2JyZWFrXCIsXG4gIFwiXFxcXGFsbG93YnJlYWtcIjogXCJhbGxvd2JyZWFrXCJcbn07IC8vIEEgbG9va3VwIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3BhY2luZyBmdW5jdGlvbi9zeW1ib2wgc2hvdWxkIGJlXG4vLyB0cmVhdGVkIGxpa2UgYSByZWd1bGFyIHNwYWNlIGNoYXJhY3Rlci4gIElmIGEgc3ltYm9sIG9yIGNvbW1hbmQgaXMgYSBrZXlcbi8vIGluIHRoaXMgdGFibGUsIHRoZW4gaXQgc2hvdWxkIGJlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBGdXJ0aGVybW9yZSxcbi8vIHRoZSBhc3NvY2lhdGVkIHZhbHVlIG1heSBoYXZlIGEgYGNsYXNzTmFtZWAgc3BlY2lmeWluZyBhbiBleHRyYSBDU1MgY2xhc3Ncbi8vIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBgc3BhbmAuXG5cbnZhciByZWd1bGFyU3BhY2UgPSB7XG4gIFwiIFwiOiB7fSxcbiAgXCJcXFxcIFwiOiB7fSxcbiAgXCJ+XCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH0sXG4gIFwiXFxcXHNwYWNlXCI6IHt9LFxuICBcIlxcXFxub2JyZWFrc3BhY2VcIjoge1xuICAgIGNsYXNzTmFtZTogXCJub2JyZWFrXCJcbiAgfVxufTsgLy8gUGFyc2VOb2RlPFwic3BhY2luZ1wiPiBjcmVhdGVkIGluIFBhcnNlci5qcyBmcm9tIHRoZSBcInNwYWNpbmdcIiBzeW1ib2wgR3JvdXBzIGluXG4vLyBzcmMvc3ltYm9scy5qcy5cblxuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwic3BhY2luZ1wiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChyZWd1bGFyU3BhY2UuaGFzT3duUHJvcGVydHkoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTAwYTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBwYWQgPSAoKSA9PiB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBbbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdHJcIiwgW3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMpXSksIHBhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cblxufSk7XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJcXFxcZW1waFwiKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZm9udFNoYXBlID09PSBcInRleHRpdFwiID8gb3B0aW9ucy53aXRoVGV4dEZvbnRTaGFwZShcInRleHR1cFwiKSA6IG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUoXCJ0ZXh0aXRcIik7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRTaGFwZSh0ZXh0Rm9udFNoYXBlc1tmb250XSk7XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIiwgXCJcXFxcZW1waFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ0ZXh0XCJdLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KSxcbiAgICAgIGZvbnQ6IGZ1bmNOYW1lXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9uc1dpdGhGb250KGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgaW5uZXIgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBuZXdPcHRpb25zLCB0cnVlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0sIGlubmVyLCBuZXdPcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zV2l0aEZvbnQoZ3JvdXAsIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgbmV3T3B0aW9ucyk7XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxpbmVcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInVuZGVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFVuZGVybGluZXMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcgNDQzLCBSdWxlIDEwLlxuICAgIC8vIEJ1aWxkIHRoZSBpbm5lciBncm91cC5cbiAgICB2YXIgaW5uZXJHcm91cCA9IGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKTsgLy8gQ3JlYXRlIHRoZSBsaW5lIHRvIGdvIGJlbG93IHRoZSBib2R5XG5cbiAgICB2YXIgbGluZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcInVuZGVybGluZS1saW5lXCIsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zXG5cbiAgICB2YXIgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBsaW5lXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAzICogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ1bmRlcmxpbmVcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3BlcmF0b3IgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTIwM2VcIildKTtcbiAgICBvcGVyYXRvci5zZXRBdHRyaWJ1dGUoXCJzdHJldGNoeVwiLCBcInRydWVcIik7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKSwgb3BlcmF0b3JdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImFjY2VudHVuZGVyXCIsIFwidHJ1ZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInZjZW50ZXJcIixcbiAgbmFtZXM6IFtcIlxcXFx2Y2VudGVyXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcIm9yaWdpbmFsXCJdLFxuICAgIC8vIEluIExhVGVYLCBcXHZjZW50ZXIgY2FuIGFjdCBvbmx5IG9uIGEgYm94LlxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInZjZW50ZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYm9keSA9IGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKTtcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICAgIHZhciBkeSA9IDAuNSAqIChib2R5LmhlaWdodCAtIGF4aXNIZWlnaHQgLSAoYm9keS5kZXB0aCArIGF4aXNIZWlnaHQpKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgcG9zaXRpb25EYXRhOiBkeSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gd2F5IHRvIGRvIHRoaXMgaW4gTWF0aE1MLlxuICAgIC8vIFdyaXRlIGEgY2xhc3MgYXMgYSBicmVhZGNydW1iIGluIGNhc2Ugc29tZSBwb3N0LXByb2Nlc3NvciB3YW50c1xuICAgIC8vIHRvIHBlcmZvcm0gYSB2Y2VudGVyIGFkanVzdG1lbnQuXG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0sIFtcInZjZW50ZXJcIl0pO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidmVyYlwiLFxuICBuYW1lczogW1wiXFxcXHZlcmJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgLy8gXFx2ZXJiIGFuZCBcXHZlcmIqIGFyZSBkZWFsdCB3aXRoIGRpcmVjdGx5IGluIFBhcnNlci5qcy5cbiAgICAvLyBJZiB3ZSBlbmQgdXAgaGVyZSwgaXQncyBiZWNhdXNlIG9mIGEgZmFpbHVyZSB0byBtYXRjaCB0aGUgdHdvIGRlbGltaXRlcnNcbiAgICAvLyBpbiB0aGUgcmVnZXggaW4gTGV4ZXIuanMuICBMYVRlWCByYWlzZXMgdGhlIGZvbGxvd2luZyBlcnJvciB3aGVuIFxcdmVyYiBpc1xuICAgIC8vIHRlcm1pbmF0ZWQgYnkgZW5kIG9mIGxpbmUgKG9yIGZpbGUpLlxuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHZlcmIgZW5kZWQgYnkgZW5kIG9mIGxpbmUgaW5zdGVhZCBvZiBtYXRjaGluZyBkZWxpbWl0ZXJcIik7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG1ha2VWZXJiKGdyb3VwKTtcbiAgICB2YXIgYm9keSA9IFtdOyAvLyBcXHZlcmIgZW50ZXJzIHRleHQgbW9kZSBhbmQgdGhlcmVmb3JlIGlzIHNpemVkIGxpa2UgXFx0ZXh0c3R5bGVcblxuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnRleHQoKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gdGV4dFtpXTtcblxuICAgICAgaWYgKGMgPT09ICd+Jykge1xuICAgICAgICBjID0gJ1xcXFx0ZXh0YXNjaWl0aWxkZSc7XG4gICAgICB9XG5cbiAgICAgIGJvZHkucHVzaChidWlsZENvbW1vbi5tYWtlU3ltYm9sKGMsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCIsIGdyb3VwLm1vZGUsIG5ld09wdGlvbnMsIFtcIm1vcmRcIiwgXCJ0ZXh0dHRcIl0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInRleHRcIl0uY29uY2F0KG5ld09wdGlvbnMuc2l6aW5nQ2xhc3NlcyhvcHRpb25zKSksIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhib2R5KSwgbmV3T3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciB0ZXh0ID0gbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUobWFrZVZlcmIoZ3JvdXApKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRleHRcIiwgW3RleHRdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIFwibW9ub3NwYWNlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuLyoqXG4gKiBDb252ZXJ0cyB2ZXJiIGdyb3VwIGludG8gYm9keSBzdHJpbmcuXG4gKlxuICogXFx2ZXJiKiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYW4gb3BlbiBib3ggXFx1MjQyM1xuICogXFx2ZXJiIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCBhIG5vLWJyZWFrIHNwYWNlIFxceEEwXG4gKi9cblxudmFyIG1ha2VWZXJiID0gZ3JvdXAgPT4gZ3JvdXAuYm9keS5yZXBsYWNlKC8gL2csIGdyb3VwLnN0YXIgPyAnXFx1MjQyMycgOiAnXFx4QTAnKTtcblxuLyoqIEluY2x1ZGUgdGhpcyB0byBlbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiAqL1xudmFyIGZ1bmN0aW9ucyA9IF9mdW5jdGlvbnM7XG5cbi8qKlxuICogVGhlIExleGVyIGNsYXNzIGhhbmRsZXMgdG9rZW5pemluZyB0aGUgaW5wdXQgaW4gdmFyaW91cyB3YXlzLiBTaW5jZSBvdXJcbiAqIHBhcnNlciBleHBlY3RzIHVzIHRvIGJlIGFibGUgdG8gYmFja3RyYWNrLCB0aGUgbGV4ZXIgYWxsb3dzIGxleGluZyBmcm9tIGFueVxuICogZ2l2ZW4gc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogSXRzIG1haW4gZXhwb3NlZCBmdW5jdGlvbiBpcyB0aGUgYGxleGAgZnVuY3Rpb24sIHdoaWNoIHRha2VzIGEgcG9zaXRpb24gdG9cbiAqIGxleCBmcm9tIGFuZCBhIHR5cGUgb2YgdG9rZW4gdG8gbGV4LiBJdCBkZWZlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGBfaW5uZXJMZXhgXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBUaGUgdmFyaW91cyBgX2lubmVyTGV4YCBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgYWN0dWFsIGxleGluZyBvZiBkaWZmZXJlbnRcbiAqIGtpbmRzLlxuICovXG5cbi8qIFRoZSBmb2xsb3dpbmcgdG9rZW5SZWdleFxuICogLSBtYXRjaGVzIHR5cGljYWwgd2hpdGVzcGFjZSAoYnV0IG5vdCBOQlNQIGV0Yy4pIHVzaW5nIGl0cyBmaXJzdCBncm91cFxuICogLSBkb2VzIG5vdCBtYXRjaCBhbnkgY29udHJvbCBjaGFyYWN0ZXIgXFx4MDAtXFx4MWYgZXhjZXB0IHdoaXRlc3BhY2VcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYSBiYXJlIGJhY2tzbGFzaFxuICogLSBtYXRjaGVzIGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGp1c3QgbWVudGlvbmVkXG4gKiAtIGRvZXMgbm90IG1hdGNoIHRoZSBCTVAgcHJpdmF0ZSB1c2UgYXJlYSBcXHVFMDAwLVxcdUY4RkZcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYmFyZSBzdXJyb2dhdGUgY29kZSB1bml0c1xuICogLSBtYXRjaGVzIGFueSBCTVAgY2hhcmFjdGVyIGV4Y2VwdCBmb3IgdGhvc2UganVzdCBkZXNjcmliZWRcbiAqIC0gbWF0Y2hlcyBhbnkgdmFsaWQgVW5pY29kZSBzdXJyb2dhdGUgcGFpclxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGxldHRlcnMgdGhlbiB3aGl0ZXNwYWNlXG4gKiAtIG1hdGNoZXMgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYW55IEJNUCBjaGFyYWN0ZXJcbiAqIENhcHR1cmluZyBncm91cHM6XG4gKiAgIFsxXSByZWd1bGFyIHdoaXRlc3BhY2VcbiAqICAgWzJdIGJhY2tzbGFzaCBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlXG4gKiAgIFszXSBhbnl0aGluZyBlbHNlLCB3aGljaCBtYXkgaW5jbHVkZTpcbiAqICAgICBbNF0gbGVmdCBjaGFyYWN0ZXIgb2YgXFx2ZXJiKlxuICogICAgIFs1XSBsZWZ0IGNoYXJhY3RlciBvZiBcXHZlcmJcbiAqICAgICBbNl0gYmFja3NsYXNoIGZvbGxvd2VkIGJ5IHdvcmQsIGV4Y2x1ZGluZyBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZVxuICogSnVzdCBiZWNhdXNlIHRoZSBMZXhlciBtYXRjaGVzIHNvbWV0aGluZyBkb2Vzbid0IG1lYW4gaXQncyB2YWxpZCBpbnB1dDpcbiAqIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGZ1bmN0aW9uIG9yIHN5bWJvbCBkZWZpbml0aW9uLCB0aGUgUGFyc2VyIHdpbGxcbiAqIHN0aWxsIHJlamVjdCB0aGUgaW5wdXQuXG4gKi9cbnZhciBzcGFjZVJlZ2V4U3RyaW5nID0gXCJbIFxcclxcblxcdF1cIjtcbnZhciBjb250cm9sV29yZFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFthLXpBLVpAXStcIjtcbnZhciBjb250cm9sU3ltYm9sUmVnZXhTdHJpbmcgPSBcIlxcXFxcXFxcW15cXHVEODAwLVxcdURGRkZdXCI7XG52YXIgY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXhTdHJpbmcgPSBcIihcIiArIGNvbnRyb2xXb3JkUmVnZXhTdHJpbmcgKyBcIilcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIipcIjtcbnZhciBjb250cm9sU3BhY2VSZWdleFN0cmluZyA9IFwiXFxcXFxcXFwoXFxufFsgXFxyXFx0XStcXG4/KVsgXFxyXFx0XSpcIjtcbnZhciBjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgPSBcIltcXHUwMzAwLVxcdTAzNmZdXCI7XG52YXIgY29tYmluaW5nRGlhY3JpdGljYWxNYXJrc0VuZFJlZ2V4ID0gbmV3IFJlZ0V4cChjb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIiskXCIpO1xudmFyIHRva2VuUmVnZXhTdHJpbmcgPSBcIihcIiArIHNwYWNlUmVnZXhTdHJpbmcgKyBcIispfFwiICsgKCAvLyB3aGl0ZXNwYWNlXG5jb250cm9sU3BhY2VSZWdleFN0cmluZyArIFwifFwiKSArIC8vIFxcd2hpdGVzcGFjZVxuXCIoWyEtXFxcXFtcXFxcXS1cXHUyMDI3XFx1MjAyQS1cXHVEN0ZGXFx1RjkwMC1cXHVGRkZGXVwiICsgKCAvLyBzaW5nbGUgY29kZXBvaW50XG5jb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIipcIikgKyAvLyAuLi5wbHVzIGFjY2VudHNcblwifFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl1cIiArICggLy8gc3Vycm9nYXRlIHBhaXJcbmNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyArIFwiKlwiKSArIC8vIC4uLnBsdXMgYWNjZW50c1xuXCJ8XFxcXFxcXFx2ZXJiXFxcXCooW15dKS4qP1xcXFw0XCIgKyAvLyBcXHZlcmIqXG5cInxcXFxcXFxcXHZlcmIoW14qYS16QS1aXSkuKj9cXFxcNVwiICsgKCAvLyBcXHZlcmIgdW5zdGFycmVkXG5cInxcIiArIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nKSArICggLy8gXFxtYWNyb05hbWUgKyBzcGFjZXNcblwifFwiICsgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nICsgXCIpXCIpOyAvLyBcXFxcLCBcXCcsIGV0Yy5cblxuLyoqIE1haW4gTGV4ZXIgY2xhc3MgKi9cblxuY2xhc3MgTGV4ZXIge1xuICAvLyBDYXRlZ29yeSBjb2Rlcy4gVGhlIGxleGVyIG9ubHkgc3VwcG9ydHMgY29tbWVudCBjaGFyYWN0ZXJzICgxNCkgZm9yIG5vdy5cbiAgLy8gTWFjcm9FeHBhbmRlciBhZGRpdGlvbmFsbHkgZGlzdGluZ3Vpc2hlcyBhY3RpdmUgKDEzKS5cbiAgY29uc3RydWN0b3IoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5pbnB1dCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMudG9rZW5SZWdleCA9IHZvaWQgMDtcbiAgICB0aGlzLmNhdGNvZGVzID0gdm9pZCAwO1xuICAgIC8vIFNlcGFyYXRlIGFjY2VudHMgZnJvbSBjaGFyYWN0ZXJzXG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRva2VuUmVnZXggPSBuZXcgUmVnRXhwKHRva2VuUmVnZXhTdHJpbmcsICdnJyk7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHtcbiAgICAgIFwiJVwiOiAxNCxcbiAgICAgIC8vIGNvbW1lbnQgY2hhcmFjdGVyXG4gICAgICBcIn5cIjogMTMgLy8gYWN0aXZlIGNoYXJhY3RlclxuXG4gICAgfTtcbiAgfVxuXG4gIHNldENhdGNvZGUoY2hhciwgY29kZSkge1xuICAgIHRoaXMuY2F0Y29kZXNbY2hhcl0gPSBjb2RlO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGxleGVzIGEgc2luZ2xlIHRva2VuLlxuICAgKi9cblxuXG4gIGxleCgpIHtcbiAgICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuICAgIHZhciBwb3MgPSB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4O1xuXG4gICAgaWYgKHBvcyA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFRva2VuKFwiRU9GXCIsIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBwb3MsIHBvcykpO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IHRoaXMudG9rZW5SZWdleC5leGVjKGlucHV0KTtcblxuICAgIGlmIChtYXRjaCA9PT0gbnVsbCB8fCBtYXRjaC5pbmRleCAhPT0gcG9zKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnXCIgKyBpbnB1dFtwb3NdICsgXCInXCIsIG5ldyBUb2tlbihpbnB1dFtwb3NdLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MgKyAxKSkpO1xuICAgIH1cblxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbNl0gfHwgbWF0Y2hbM10gfHwgKG1hdGNoWzJdID8gXCJcXFxcIFwiIDogXCIgXCIpO1xuXG4gICAgaWYgKHRoaXMuY2F0Y29kZXNbdGV4dF0gPT09IDE0KSB7XG4gICAgICAvLyBjb21tZW50IGNoYXJhY3RlclxuICAgICAgdmFyIG5sSW5kZXggPSBpbnB1dC5pbmRleE9mKCdcXG4nLCB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KTtcblxuICAgICAgaWYgKG5sSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXggPSBpbnB1dC5sZW5ndGg7IC8vIEVPRlxuXG4gICAgICAgIHRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwiY29tbWVudEF0RW5kXCIsIFwiJSBjb21tZW50IGhhcyBubyB0ZXJtaW5hdGluZyBuZXdsaW5lOyBMYVRlWCB3b3VsZCBcIiArIFwiZmFpbCBiZWNhdXNlIG9mIGNvbW1lbnRpbmcgdGhlIGVuZCBvZiBtYXRoIG1vZGUgKGUuZy4gJClcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4ID0gbmxJbmRleCArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVG9rZW4odGV4dCwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCkpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBBIGBOYW1lc3BhY2VgIHJlZmVycyB0byBhIHNwYWNlIG9mIG5hbWVhYmxlIHRoaW5ncyBsaWtlIG1hY3JvcyBvciBsZW5ndGhzLFxuICogd2hpY2ggY2FuIGJlIGBzZXRgIGVpdGhlciBnbG9iYWxseSBvciBsb2NhbCB0byBhIG5lc3RlZCBncm91cCwgdXNpbmcgYW5cbiAqIHVuZG8gc3RhY2sgc2ltaWxhciB0byBob3cgVGVYIGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbmFsaXR5LlxuICogUGVyZm9ybWFuY2Utd2lzZSwgYGdldGAgYW5kIGxvY2FsIGBzZXRgIHRha2UgY29uc3RhbnQgdGltZSwgd2hpbGUgZ2xvYmFsXG4gKiBgc2V0YCB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGVwdGggb2YgZ3JvdXAgbmVzdGluZy5cbiAqL1xuY2xhc3MgTmFtZXNwYWNlIHtcbiAgLyoqXG4gICAqIEJvdGggYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3Qgb2ZcbiAgICogYnVpbHQtaW4gbWFwcGluZ3Mgd2hpY2ggbmV2ZXIgY2hhbmdlLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogb2YgaW5pdGlhbCAoZ2xvYmFsLWxldmVsKSBtYXBwaW5ncywgd2hpY2ggd2lsbCBjb25zdGFudGx5IGNoYW5nZVxuICAgKiBhY2NvcmRpbmcgdG8gYW55IGdsb2JhbC90b3AtbGV2ZWwgYHNldGBzIGRvbmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihidWlsdGlucywgZ2xvYmFsTWFjcm9zKSB7XG4gICAgaWYgKGJ1aWx0aW5zID09PSB2b2lkIDApIHtcbiAgICAgIGJ1aWx0aW5zID0ge307XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbE1hY3JvcyA9PT0gdm9pZCAwKSB7XG4gICAgICBnbG9iYWxNYWNyb3MgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5idWlsdGlucyA9IHZvaWQgMDtcbiAgICB0aGlzLnVuZGVmU3RhY2sgPSB2b2lkIDA7XG4gICAgdGhpcy5jdXJyZW50ID0gZ2xvYmFsTWFjcm9zO1xuICAgIHRoaXMuYnVpbHRpbnMgPSBidWlsdGlucztcbiAgICB0aGlzLnVuZGVmU3RhY2sgPSBbXTtcbiAgfVxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgbmVzdGVkIGdyb3VwLCBhZmZlY3RpbmcgZnV0dXJlIGxvY2FsIGBzZXRgcy5cbiAgICovXG5cblxuICBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMudW5kZWZTdGFjay5wdXNoKHt9KTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgbmVzdGVkIGdyb3VwLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGUgZ3JvdXAgYmVnYW4uXG4gICAqL1xuXG5cbiAgZW5kR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5iYWxhbmNlZCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb246IGF0dGVtcHQgXCIgKyBcInRvIHBvcCBnbG9iYWwgbmFtZXNwYWNlOyBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWdcIik7XG4gICAgfVxuXG4gICAgdmFyIHVuZGVmcyA9IHRoaXMudW5kZWZTdGFjay5wb3AoKTtcblxuICAgIGZvciAodmFyIHVuZGVmIGluIHVuZGVmcykge1xuICAgICAgaWYgKHVuZGVmcy5oYXNPd25Qcm9wZXJ0eSh1bmRlZikpIHtcbiAgICAgICAgaWYgKHVuZGVmc1t1bmRlZl0gPT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRbdW5kZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFt1bmRlZl0gPSB1bmRlZnNbdW5kZWZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFbmRzIGFsbCBjdXJyZW50bHkgbmVzdGVkIGdyb3VwcyAoaWYgYW55KSwgcmVzdG9yaW5nIHZhbHVlcyBiZWZvcmUgdGhlXG4gICAqIGdyb3VwcyBiZWdhbi4gIFVzZWZ1bCBpbiBjYXNlIG9mIGFuIGVycm9yIGluIHRoZSBtaWRkbGUgb2YgcGFyc2luZy5cbiAgICovXG5cblxuICBlbmRHcm91cHMoKSB7XG4gICAgd2hpbGUgKHRoaXMudW5kZWZTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmVuZEdyb3VwKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEZXRlY3Qgd2hldGhlciBgbmFtZWAgaGFzIGEgZGVmaW5pdGlvbi4gIEVxdWl2YWxlbnQgdG9cbiAgICogYGdldChuYW1lKSAhPSBudWxsYC5cbiAgICovXG5cblxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgdGhpcy5idWlsdGlucy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlcmUgaXMgbm8gdmFsdWUuXG4gICAqXG4gICAqIE5vdGU6IERvIG5vdCB1c2UgYGlmIChuYW1lc3BhY2UuZ2V0KC4uLikpYCB0byBkZXRlY3Qgd2hldGhlciBhIG1hY3JvXG4gICAqIGlzIGRlZmluZWQsIGFzIHRoZSBkZWZpbml0aW9uIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nIHdoaWNoIGV2YWx1YXRlc1xuICAgKiB0byBgZmFsc2VgIGluIEphdmFTY3JpcHQuICBVc2UgYGlmIChuYW1lc3BhY2UuZ2V0KC4uLikgIT0gbnVsbClgIG9yXG4gICAqIGBpZiAobmFtZXNwYWNlLmhhcyguLi4pKWAuXG4gICAqL1xuXG5cbiAgZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsdGluc1tuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIGFuZCBvcHRpb25hbGx5IHNldCBpdCBnbG9iYWxseSB0b28uXG4gICAqIExvY2FsIHNldCgpIHNldHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kICh3aGVuIGFwcHJvcHJpYXRlKSBhZGRzIGFuIHVuZG9cbiAgICogb3BlcmF0aW9uIHRvIHRoZSB1bmRvIHN0YWNrLiAgR2xvYmFsIHNldCgpIG1heSBjaGFuZ2UgdGhlIHVuZG9cbiAgICogb3BlcmF0aW9uIGF0IGV2ZXJ5IGxldmVsLCBzbyB0YWtlcyB0aW1lIGxpbmVhciBpbiB0aGVpciBudW1iZXIuXG4gICAqIEEgdmFsdWUgb2YgdW5kZWZpbmVkIG1lYW5zIHRvIGRlbGV0ZSBleGlzdGluZyBkZWZpbml0aW9ucy5cbiAgICovXG5cblxuICBzZXQobmFtZSwgdmFsdWUsIGdsb2JhbCkge1xuICAgIGlmIChnbG9iYWwgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbCkge1xuICAgICAgLy8gR2xvYmFsIHNldCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaW4gYWxsIGdyb3Vwcy4gIFNpbXVsYXRlIHRoaXNcbiAgICAgIC8vIGJ5IGRlc3Ryb3lpbmcgYW55IHVuZG9zIGN1cnJlbnRseSBzY2hlZHVsZWQgZm9yIHRoaXMgbmFtZSxcbiAgICAgIC8vIGFuZCBhZGRpbmcgYW4gdW5kbyB3aXRoIHRoZSAqbmV3KiB2YWx1ZSAoaW4gY2FzZSBpdCBsYXRlciBnZXRzXG4gICAgICAvLyBsb2NhbGx5IHJlc2V0IHdpdGhpbiB0aGlzIGVudmlyb25tZW50KS5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bmRlZlN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnVuZGVmU3RhY2tbaV1bbmFtZV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aCAtIDFdW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVuZG8gdGhpcyBzZXQgYXQgZW5kIG9mIHRoaXMgZ3JvdXAgKHBvc3NpYmx5IHRvIGB1bmRlZmluZWRgKSxcbiAgICAgIC8vIHVubGVzcyBhbiB1bmRvIGlzIGFscmVhZHkgaW4gcGxhY2UsIGluIHdoaWNoIGNhc2UgdGhhdCBvbGRlclxuICAgICAgLy8gdmFsdWUgaXMgdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgdmFyIHRvcCA9IHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0b3AgJiYgIXRvcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB0b3BbbmFtZV0gPSB0aGlzLmN1cnJlbnRbbmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKlxuICogUHJlZGVmaW5lZCBtYWNyb3MgZm9yIEthVGVYLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgc29tZSBjb21tYW5kcyBpbiB0ZXJtcyBvZiBvdGhlcnMuXG4gKi9cbnZhciBtYWNyb3MgPSBfbWFjcm9zO1xuLy8gbWFjcm8gdG9vbHNcblxuZGVmaW5lTWFjcm8oXCJcXFxcbm9leHBhbmRcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVGhlIGV4cGFuc2lvbiBpcyB0aGUgdG9rZW4gaXRzZWxmOyBidXQgdGhhdCB0b2tlbiBpcyBpbnRlcnByZXRlZFxuICAvLyBhcyBpZiBpdHMgbWVhbmluZyB3ZXJlIOKAmFxccmVsYXjigJkgaWYgaXQgaXMgYSBjb250cm9sIHNlcXVlbmNlIHRoYXRcbiAgLy8gd291bGQgb3JkaW5hcmlseSBiZSBleHBhbmRlZCBieSBUZVjigJlzIGV4cGFuc2lvbiBydWxlcy5cbiAgdmFyIHQgPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgaWYgKGNvbnRleHQuaXNFeHBhbmRhYmxlKHQudGV4dCkpIHtcbiAgICB0Lm5vZXhwYW5kID0gdHJ1ZTtcbiAgICB0LnRyZWF0QXNSZWxheCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRva2VuczogW3RdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXhwYW5kYWZ0ZXJcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgLy8gVGVYIGZpcnN0IHJlYWRzIHRoZSB0b2tlbiB0aGF0IGNvbWVzIGltbWVkaWF0ZWx5IGFmdGVyIFxcZXhwYW5kYWZ0ZXIsXG4gIC8vIHdpdGhvdXQgZXhwYW5kaW5nIGl0OyBsZXTigJlzIGNhbGwgdGhpcyB0b2tlbiB0LiBUaGVuIFRlWCByZWFkcyB0aGVcbiAgLy8gdG9rZW4gdGhhdCBjb21lcyBhZnRlciB0IChhbmQgcG9zc2libHkgbW9yZSB0b2tlbnMsIGlmIHRoYXQgdG9rZW5cbiAgLy8gaGFzIGFuIGFyZ3VtZW50KSwgcmVwbGFjaW5nIGl0IGJ5IGl0cyBleHBhbnNpb24uIEZpbmFsbHkgVGVYIHB1dHNcbiAgLy8gdCBiYWNrIGluIGZyb250IG9mIHRoYXQgZXhwYW5zaW9uLlxuICB2YXIgdCA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgY29udGV4dC5leHBhbmRPbmNlKHRydWUpOyAvLyBleHBhbmQgb25seSBhbiBleHBhbmRhYmxlIHRva2VuXG5cbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IFt0XSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBmaXJzdG9mdHdveyMxfXsjMn0gZXhwYW5kcyB0byAjMSwgc2tpcHBpbmcgIzJcbi8vIFRlWCBzb3VyY2U6IFxcbG9uZ1xcZGVmXFxAZmlyc3RvZnR3byMxIzJ7IzF9XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBmaXJzdG9mdHdvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAc2Vjb25kb2Z0d297IzF9eyMyfSBleHBhbmRzIHRvICMyLCBza2lwcGluZyAjMVxuLy8gVGVYIHNvdXJjZTogXFxsb25nXFxkZWZcXEBzZWNvbmRvZnR3byMxIzJ7IzJ9XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBzZWNvbmRvZnR3b1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMik7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQGlmbmV4dGNoYXJ7IzF9eyMyfXsjM30gbG9va3MgYWhlYWQgdG8gdGhlIG5leHQgKHVuZXhwYW5kZWQpXG4vLyBzeW1ib2wgdGhhdCBpc24ndCBhIHNwYWNlLCBjb25zdW1pbmcgYW55IHNwYWNlcyBidXQgbm90IGNvbnN1bWluZyB0aGVcbi8vIGZpcnN0IG5vbnNwYWNlIGNoYXJhY3Rlci4gIElmIHRoYXQgbm9uc3BhY2UgY2hhcmFjdGVyIG1hdGNoZXMgIzEsIHRoZW5cbi8vIHRoZSBtYWNybyBleHBhbmRzIHRvICMyOyBvdGhlcndpc2UsIGl0IGV4cGFuZHMgdG8gIzMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZm5leHRjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygzKTsgLy8gc3ltYm9sLCBpZiwgZWxzZVxuXG4gIGNvbnRleHQuY29uc3VtZVNwYWNlcygpO1xuICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICBpZiAoYXJnc1swXS5sZW5ndGggPT09IDEgJiYgYXJnc1swXVswXS50ZXh0ID09PSBuZXh0VG9rZW4udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMV0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzJdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMYVRlWCdzIFxcQGlmc3RhcnsjMX17IzJ9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKSBzeW1ib2wuXG4vLyBJZiBpdCBpcyBgKmAsIHRoZW4gaXQgY29uc3VtZXMgdGhlIHN5bWJvbCwgYW5kIHRoZSBtYWNybyBleHBhbmRzIHRvICMxO1xuLy8gb3RoZXJ3aXNlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMiAod2l0aG91dCBjb25zdW1pbmcgdGhlIHN5bWJvbCkuXG4vLyBUZVggc291cmNlOiBcXGRlZlxcQGlmc3RhciMxe1xcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX19XG5cbmRlZmluZU1hY3JvKFwiXFxcXEBpZnN0YXJcIiwgXCJcXFxcQGlmbmV4dGNoYXIgKntcXFxcQGZpcnN0b2Z0d297IzF9fVwiKTsgLy8gTGFUZVgncyBcXFRleHRPck1hdGh7IzF9eyMyfSBleHBhbmRzIHRvICMxIGluIHRleHQgbW9kZSwgIzIgaW4gbWF0aCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXFRleHRPck1hdGhcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuXG4gIGlmIChjb250ZXh0Lm1vZGUgPT09ICd0ZXh0Jykge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGFyZ3NbMF0sXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH1cbn0pOyAvLyBMb29rdXAgdGFibGUgZm9yIHBhcnNpbmcgbnVtYmVycyBpbiBiYXNlIDggdGhyb3VnaCAxNlxuXG52YXIgZGlnaXRUb051bWJlciA9IHtcbiAgXCIwXCI6IDAsXG4gIFwiMVwiOiAxLFxuICBcIjJcIjogMixcbiAgXCIzXCI6IDMsXG4gIFwiNFwiOiA0LFxuICBcIjVcIjogNSxcbiAgXCI2XCI6IDYsXG4gIFwiN1wiOiA3LFxuICBcIjhcIjogOCxcbiAgXCI5XCI6IDksXG4gIFwiYVwiOiAxMCxcbiAgXCJBXCI6IDEwLFxuICBcImJcIjogMTEsXG4gIFwiQlwiOiAxMSxcbiAgXCJjXCI6IDEyLFxuICBcIkNcIjogMTIsXG4gIFwiZFwiOiAxMyxcbiAgXCJEXCI6IDEzLFxuICBcImVcIjogMTQsXG4gIFwiRVwiOiAxNCxcbiAgXCJmXCI6IDE1LFxuICBcIkZcIjogMTVcbn07IC8vIFRlWCBcXGNoYXIgbWFrZXMgYSBsaXRlcmFsIGNoYXJhY3RlciAoY2F0Y29kZSAxMikgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3Jtczpcbi8vIChzZWUgVGhlIFRlWEJvb2ssIHAuIDQzKVxuLy8gICBcXGNoYXIxMjMgIC0tIGRlY2ltYWxcbi8vICAgXFxjaGFyJzEyMyAtLSBvY3RhbFxuLy8gICBcXGNoYXJcIjEyMyAtLSBoZXhcbi8vICAgXFxjaGFyYHggICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgd3JpdHRlbiAoaS5lLiBpc24ndCBhY3RpdmUpXG4vLyAgIFxcY2hhcmBcXHggIC0tIGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIChlLmcuICUpXG4vLyBUaGVzZSBhbGwgcmVmZXIgdG8gY2hhcmFjdGVycyBmcm9tIHRoZSBmb250LCBzbyB3ZSB0dXJuIHRoZW0gaW50byBzcGVjaWFsXG4vLyBjYWxscyB0byBhIGZ1bmN0aW9uIFxcQGNoYXIgZGVhbHQgd2l0aCBpbiB0aGUgUGFyc2VyLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxjaGFyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIGJhc2U7XG4gIHZhciBudW1iZXIgPSAnJztcblxuICBpZiAodG9rZW4udGV4dCA9PT0gXCInXCIpIHtcbiAgICBiYXNlID0gODtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSAnXCInKSB7XG4gICAgYmFzZSA9IDE2O1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiYFwiKSB7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rZW4udGV4dFswXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgxKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLnRleHQgPT09IFwiRU9GXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciA9IHRva2VuLnRleHQuY2hhckNvZGVBdCgwKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZSA9IDEwO1xuICB9XG5cbiAgaWYgKGJhc2UpIHtcbiAgICAvLyBQYXJzZSBhIG51bWJlciBpbiB0aGUgZ2l2ZW4gYmFzZSwgc3RhcnRpbmcgd2l0aCBmaXJzdCBgdG9rZW5gLlxuICAgIG51bWJlciA9IGRpZ2l0VG9OdW1iZXJbdG9rZW4udGV4dF07XG5cbiAgICBpZiAobnVtYmVyID09IG51bGwgfHwgbnVtYmVyID49IGJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBiYXNlLVwiICsgYmFzZSArIFwiIGRpZ2l0IFwiICsgdG9rZW4udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIGRpZ2l0O1xuXG4gICAgd2hpbGUgKChkaWdpdCA9IGRpZ2l0VG9OdW1iZXJbY29udGV4dC5mdXR1cmUoKS50ZXh0XSkgIT0gbnVsbCAmJiBkaWdpdCA8IGJhc2UpIHtcbiAgICAgIG51bWJlciAqPSBiYXNlO1xuICAgICAgbnVtYmVyICs9IGRpZ2l0O1xuICAgICAgY29udGV4dC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBcIlxcXFxAY2hhcntcIiArIG51bWJlciArIFwifVwiO1xufSk7IC8vIFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXXtkZWZpbml0aW9ufVxuLy8gXFxyZW5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFRPRE86IE9wdGlvbmFsIGFyZ3VtZW50czogXFxuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3NdW2RlZmF1bHRde2RlZmluaXRpb259XG5cbnZhciBuZXdjb21tYW5kID0gKGNvbnRleHQsIGV4aXN0c09LLCBub25leGlzdHNPSykgPT4ge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuXG4gIGlmIChhcmcubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZCdzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBtYWNybyBuYW1lXCIpO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBhcmdbMF0udGV4dDtcbiAgdmFyIGV4aXN0cyA9IGNvbnRleHQuaXNEZWZpbmVkKG5hbWUpO1xuXG4gIGlmIChleGlzdHMgJiYgIWV4aXN0c09LKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSBcIiArIChuYW1lICsgXCI7IHVzZSBcXFxccmVuZXdjb21tYW5kXCIpKTtcbiAgfVxuXG4gIGlmICghZXhpc3RzICYmICFub25leGlzdHNPSykge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHJlbmV3Y29tbWFuZHtcIiArIG5hbWUgKyBcIn0gd2hlbiBjb21tYW5kIFwiICsgbmFtZSArIFwiIFwiICsgXCJkb2VzIG5vdCB5ZXQgZXhpc3Q7IHVzZSBcXFxcbmV3Y29tbWFuZFwiKTtcbiAgfVxuXG4gIHZhciBudW1BcmdzID0gMDtcbiAgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuXG4gIGlmIChhcmcubGVuZ3RoID09PSAxICYmIGFyZ1swXS50ZXh0ID09PSBcIltcIikge1xuICAgIHZhciBhcmdUZXh0ID0gJyc7XG4gICAgdmFyIHRva2VuID0gY29udGV4dC5leHBhbmROZXh0VG9rZW4oKTtcblxuICAgIHdoaWxlICh0b2tlbi50ZXh0ICE9PSBcIl1cIiAmJiB0b2tlbi50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgcHJvcGVybHkgZXhwYW5kIGFyZywgZS5nLiwgaWdub3JlIHt9c1xuICAgICAgYXJnVGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgdG9rZW4gPSBjb250ZXh0LmV4cGFuZE5leHRUb2tlbigpO1xuICAgIH1cblxuICAgIGlmICghYXJnVGV4dC5tYXRjaCgvXlxccypbMC05XStcXHMqJC8pKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogXCIgKyBhcmdUZXh0KTtcbiAgICB9XG5cbiAgICBudW1BcmdzID0gcGFyc2VJbnQoYXJnVGV4dCk7XG4gICAgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB9IC8vIEZpbmFsIGFyZyBpcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBtYWNyb1xuXG5cbiAgY29udGV4dC5tYWNyb3Muc2V0KG5hbWUsIHtcbiAgICB0b2tlbnM6IGFyZyxcbiAgICBudW1BcmdzXG4gIH0pO1xuICByZXR1cm4gJyc7XG59O1xuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXdjb21tYW5kXCIsIGNvbnRleHQgPT4gbmV3Y29tbWFuZChjb250ZXh0LCBmYWxzZSwgdHJ1ZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVuZXdjb21tYW5kXCIsIGNvbnRleHQgPT4gbmV3Y29tbWFuZChjb250ZXh0LCB0cnVlLCBmYWxzZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHJvdmlkZWNvbW1hbmRcIiwgY29udGV4dCA9PiBuZXdjb21tYW5kKGNvbnRleHQsIHRydWUsIHRydWUpKTsgLy8gdGVybWluYWwgKGNvbnNvbGUpIHRvb2xzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG1lc3NhZ2VcIiwgY29udGV4dCA9PiB7XG4gIHZhciBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gIGNvbnNvbGUubG9nKGFyZy5yZXZlcnNlKCkubWFwKHRva2VuID0+IHRva2VuLnRleHQpLmpvaW4oXCJcIikpO1xuICByZXR1cm4gJyc7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGVycm1lc3NhZ2VcIiwgY29udGV4dCA9PiB7XG4gIHZhciBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDEpWzBdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gIGNvbnNvbGUuZXJyb3IoYXJnLnJldmVyc2UoKS5tYXAodG9rZW4gPT4gdG9rZW4udGV4dCkuam9pbihcIlwiKSk7XG4gIHJldHVybiAnJztcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2hvd1wiLCBjb250ZXh0ID0+IHtcbiAgdmFyIHRvayA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgdmFyIG5hbWUgPSB0b2sudGV4dDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmxvZyh0b2ssIGNvbnRleHQubWFjcm9zLmdldChuYW1lKSwgZnVuY3Rpb25zW25hbWVdLCBzeW1ib2xzLm1hdGhbbmFtZV0sIHN5bWJvbHMudGV4dFtuYW1lXSk7XG4gIHJldHVybiAnJztcbn0pOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBHcm91cGluZ1xuLy8gXFxsZXRcXGJncm91cD17IFxcbGV0XFxlZ3JvdXA9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxiZ3JvdXBcIiwgXCJ7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZWdyb3VwXCIsIFwifVwiKTsgLy8gU3ltYm9scyBmcm9tIGxhdGV4Lmx0eDpcbi8vIFxcZGVmfntcXG5vYnJlYWtzcGFjZXt9fVxuLy8gXFxkZWZcXGxxe2B9XG4vLyBcXGRlZlxccnF7J31cbi8vIFxcZGVmIFxcYWEge1xcciBhfVxuLy8gXFxkZWYgXFxBQSB7XFxyIEF9XG5cbmRlZmluZU1hY3JvKFwiflwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxscVwiLCBcImBcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxycVwiLCBcIidcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhYVwiLCBcIlxcXFxyIGFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBQVwiLCBcIlxcXFxyIEFcIik7IC8vIENvcHlyaWdodCAoQykgYW5kIHJlZ2lzdGVyZWQgKFIpIHN5bWJvbHMuIFVzZSByYXcgc3ltYm9sIGluIE1hdGhNTC5cbi8vIFxcRGVjbGFyZVRleHRDb21tYW5kRGVmYXVsdHtcXHRleHRjb3B5cmlnaHR9e1xcdGV4dGNpcmNsZWR7Y319XG4vLyBcXERlY2xhcmVUZXh0Q29tbWFuZERlZmF1bHR7XFx0ZXh0cmVnaXN0ZXJlZH17XFx0ZXh0Y2lyY2xlZHslXG4vLyAgICAgIFxcY2hlY2tAbWF0aGZvbnRzXFxmb250c2l6ZVxcc2ZAc2l6ZVxcekBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udCBSfX1cbi8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFxjb3B5cmlnaHR9eyVcbi8vICAgIFxcaWZtbW9kZXtcXG5mc3NAdGV4dHtcXHRleHRjb3B5cmlnaHR9fVxcZWxzZVxcdGV4dGNvcHlyaWdodFxcZml9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHRleHRjb3B5cmlnaHRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHRleHRjaXJjbGVke2N9fXtcXFxcY2hhcmDCqX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb3B5cmlnaHRcIiwgXCJcXFxcVGV4dE9yTWF0aHtcXFxcdGV4dGNvcHlyaWdodH17XFxcXHRleHR7XFxcXHRleHRjb3B5cmlnaHR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRleHRyZWdpc3RlcmVkXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFx0ZXh0Y2lyY2xlZHtcXFxcc2NyaXB0c2l6ZSBSfX17XFxcXGNoYXJgwq59XCIpOyAvLyBDaGFyYWN0ZXJzIG9taXR0ZWQgZnJvbSBVbmljb2RlIHJhbmdlIDFENDAw4oCTMUQ3RkZcblxuZGVmaW5lTWFjcm8oXCJcXHUyMTJDXCIsIFwiXFxcXG1hdGhzY3J7Qn1cIik7IC8vIHNjcmlwdFxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMzBcIiwgXCJcXFxcbWF0aHNjcntFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEzMVwiLCBcIlxcXFxtYXRoc2Nye0Z9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTBCXCIsIFwiXFxcXG1hdGhzY3J7SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMTBcIiwgXCJcXFxcbWF0aHNjcntJfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjExMlwiLCBcIlxcXFxtYXRoc2Nye0x9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTMzXCIsIFwiXFxcXG1hdGhzY3J7TX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMUJcIiwgXCJcXFxcbWF0aHNjcntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEyRFwiLCBcIlxcXFxtYXRoZnJha3tDfVwiKTsgLy8gRnJha3R1clxuXG5kZWZpbmVNYWNybyhcIlxcdTIxMENcIiwgXCJcXFxcbWF0aGZyYWt7SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMjhcIiwgXCJcXFxcbWF0aGZyYWt7Wn1cIik7IC8vIERlZmluZSBcXEJiYmsgd2l0aCBhIG1hY3JvIHRoYXQgd29ya3MgaW4gYm90aCBIVE1MIGFuZCBNYXRoTUwuXG5cbmRlZmluZU1hY3JvKFwiXFxcXEJiYmtcIiwgXCJcXFxcQmJie2t9XCIpOyAvLyBVbmljb2RlIG1pZGRsZSBkb3Rcbi8vIFRoZSBLYVRlWCBmb250cyBkbyBub3QgY29udGFpbiBVKzAwQjcuIEluc3RlYWQsIFxcY2RvdHAgZGlzcGxheXNcbi8vIHRoZSBkb3QgYXQgVSsyMkM1IGFuZCBnaXZlcyBpdCBwdW5jdCBzcGFjaW5nLlxuXG5kZWZpbmVNYWNybyhcIlxcdTAwYjdcIiwgXCJcXFxcY2RvdHBcIik7IC8vIFxcbGxhcCBhbmQgXFxybGFwIHJlbmRlciB0aGVpciBjb250ZW50cyBpbiB0ZXh0IG1vZGVcblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxhcFwiLCBcIlxcXFxtYXRobGxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxybGFwXCIsIFwiXFxcXG1hdGhybGFwe1xcXFx0ZXh0cm17IzF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsYXBcIiwgXCJcXFxcbWF0aGNsYXB7XFxcXHRleHRybXsjMX19XCIpOyAvLyBcXG1hdGhzdHJ1dCBmcm9tIHRoZSBUZVhib29rLCBwIDM2MFxuXG5kZWZpbmVNYWNybyhcIlxcXFxtYXRoc3RydXRcIiwgXCJcXFxcdnBoYW50b217KH1cIik7IC8vIFxcdW5kZXJiYXIgZnJvbSBUZVhib29rIHAgMzUzXG5cbmRlZmluZU1hY3JvKFwiXFxcXHVuZGVyYmFyXCIsIFwiXFxcXHVuZGVybGluZXtcXFxcdGV4dHsjMX19XCIpOyAvLyBcXG5vdCBpcyBkZWZpbmVkIGJ5IGJhc2UvZm9udG1hdGgubHR4IHZpYVxuLy8gXFxEZWNsYXJlTWF0aFN5bWJvbHtcXG5vdH17XFxtYXRocmVsfXtzeW1ib2xzfXtcIjM2fVxuLy8gSXQncyB0aHVzIHRyZWF0ZWQgbGlrZSBhIFxcbWF0aHJlbCwgYnV0IGRlZmluZWQgYnkgYSBzeW1ib2wgdGhhdCBoYXMgemVyb1xuLy8gd2lkdGggYnV0IGV4dGVuZHMgdG8gdGhlIHJpZ2h0LiAgV2UgdXNlIFxccmxhcCB0byBnZXQgdGhhdCBzcGFjaW5nLlxuLy8gRm9yIE1hdGhNTCB3ZSB3cml0ZSBVKzAzMzggaGVyZS4gYnVpbGRNYXRoTUwuanMgd2lsbCB0aGVuIGRvIHRoZSBvdmVybGF5LlxuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RcIiwgJ1xcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHtcXFxcbWF0aHJsYXBcXFxcQG5vdH19e1xcXFxjaGFyXCIzMzh9Jyk7IC8vIE5lZ2F0ZWQgc3ltYm9scyBmcm9tIGJhc2UvZm9udG1hdGgubHR4OlxuLy8gXFxkZWZcXG5lcXtcXG5vdD19IFxcbGV0XFxuZT1cXG5lcVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxuLy8gICBcXG5vdGlue1xcbWF0aHJlbHtcXG1AdGhcXG1hdGhwYWxldHRlXFxjQG5jZWxcXGlufX1cbi8vIFxcZGVmXFxjQG5jZWwjMSMye1xcbUB0aFxcb29hbGlnbnskXFxoZmlsIzFcXG1rZXJuMW11L1xcaGZpbCRcXGNyY3IkIzEjMiR9fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG5vdD19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiaB9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5lXCIsIFwiXFxcXG5lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI2MFwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxub3RpblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbWF0aHJlbHt7XFxcXGlufVxcXFxtYXRobGxhcHsvXFxcXG1za2lwMW11fX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmDiiIl9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwOVwiLCBcIlxcXFxub3RpblwiKTsgLy8gVW5pY29kZSBzdGFja2VkIHJlbGF0aW9uc1xuXG5kZWZpbmVNYWNybyhcIlxcdTIyNThcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxca2VybnstMWVtfVxcXFxyYWlzZWJveHswLjRlbX17JFxcXFxzY3JpcHRzaXplXFxcXGZyb3duJH19XCIgKyBcIn17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1OH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjU5XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFx3ZWRnZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcdmVlfXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1QX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVCXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcc2NyaXB0c2l6ZVxcXFxzdGFyfXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUJ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte2RlZn19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVFXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueVxcXFxtYXRocm17bX19ez19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1RX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjVGXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxzdGFja3JlbHtcXFxcdGlueT99ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVGfX1cIik7IC8vIE1pc2MgVW5pY29kZVxuXG5kZWZpbmVNYWNybyhcIlxcdTI3QzJcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjAzQ1wiLCBcIlxcXFxtYXRoY2xvc2V7IVxcXFxta2Vybi0wLjhtdSF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMjBDXCIsIFwiXFxcXG5vdG5pXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFDXCIsIFwiXFxcXHVsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFEXCIsIFwiXFxcXHVyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFFXCIsIFwiXFxcXGxsY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMzFGXCIsIFwiXFxcXGxyY29ybmVyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUwMEE5XCIsIFwiXFxcXGNvcHlyaWdodFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MDBBRVwiLCBcIlxcXFx0ZXh0cmVnaXN0ZXJlZFwiKTtcbmRlZmluZU1hY3JvKFwiXFx1RkUwRlwiLCBcIlxcXFx0ZXh0cmVnaXN0ZXJlZFwiKTsgLy8gVGhlIEthVGVYIGZvbnRzIGhhdmUgY29ybmVycyBhdCBjb2RlcG9pbnRzIHRoYXQgZG9uJ3QgbWF0Y2ggVW5pY29kZS5cbi8vIEZvciBNYXRoTUwgcHVycG9zZXMsIHVzZSB0aGUgVW5pY29kZSBjb2RlIHBvaW50LlxuXG5kZWZpbmVNYWNybyhcIlxcXFx1bGNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHVsY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWN9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHVyY29ybmVyXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdXJjb3JuZXJ9e1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjMxZH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGxjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBsbGNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFlfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxscmNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGxyY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWZ9fVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTGFUZVhfMs61XG4vLyBcXHZkb3Rze1xcdmJveHtcXGJhc2VsaW5lc2tpcDRcXHBAICBcXGxpbmVza2lwbGltaXRcXHpAXG4vLyBcXGtlcm42XFxwQFxcaGJveHsufVxcaGJveHsufVxcaGJveHsufX19XG4vLyBXZSdsbCBjYWxsIFxcdmFydmRvdHMsIHdoaWNoIGdldHMgYSBnbHlwaCBmcm9tIHN5bWJvbHMuanMuXG4vLyBUaGUgemVyby13aWR0aCBydWxlIGdldHMgdXMgYW4gZXF1aXZhbGVudCB0byB0aGUgdmVydGljYWwgNnB0IGtlcm4uXG5cbmRlZmluZU1hY3JvKFwiXFxcXHZkb3RzXCIsIFwiXFxcXG1hdGhvcmR7XFxcXHZhcnZkb3RzXFxcXHJ1bGV7MHB0fXsxNXB0fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyZWVcIiwgXCJcXFxcdmRvdHNcIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGFtc21hdGguc3R5XG4vLyBodHRwOi8vbWlycm9ycy5jb25jZXJ0cGFzcy5jb20vdGV4LWFyY2hpdmUvbWFjcm9zL2xhdGV4L3JlcXVpcmVkL2Ftc21hdGgvYW1zbWF0aC5wZGZcbi8vIEl0YWxpYyBHcmVlayBjYXBpdGFsIGxldHRlcnMuICBBTVMgZGVmaW5lcyB0aGVzZSB3aXRoIFxcRGVjbGFyZU1hdGhTeW1ib2wsXG4vLyBidXQgdGhleSBhcmUgZXF1aXZhbGVudCB0byBcXG1hdGhpdHtcXExldHRlcn0uXG5cbmRlZmluZU1hY3JvKFwiXFxcXHZhckdhbW1hXCIsIFwiXFxcXG1hdGhpdHtcXFxcR2FtbWF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyRGVsdGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxEZWx0YX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJUaGV0YVwiLCBcIlxcXFxtYXRoaXR7XFxcXFRoZXRhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhckxhbWJkYVwiLCBcIlxcXFxtYXRoaXR7XFxcXExhbWJkYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJYaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFhpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyU2lnbWFcIiwgXCJcXFxcbWF0aGl0e1xcXFxTaWdtYX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJVcHNpbG9uXCIsIFwiXFxcXG1hdGhpdHtcXFxcVXBzaWxvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQaGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxQaGl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUHNpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUHNpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhck9tZWdhXCIsIFwiXFxcXG1hdGhpdHtcXFxcT21lZ2F9XCIpOyAvL1xcbmV3Y29tbWFuZHtcXHN1YnN0YWNrfVsxXXtcXHN1YmFycmF5e2N9IzFcXGVuZHN1YmFycmF5fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxzdWJzdGFja1wiLCBcIlxcXFxiZWdpbntzdWJhcnJheX17Y30jMVxcXFxlbmR7c3ViYXJyYXl9XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXGNvbG9ufXtcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbm9uc2NyaXB0XG4vLyBcXG1rZXJuLVxcdGhpbm11c2tpcHs6fVxcbXNraXA2bXVwbHVzMW11XFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25cIiwgXCJcXFxcbm9icmVha1xcXFxtc2tpcDJtdVxcXFxtYXRocHVuY3R7fVwiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbWtlcm4tM211fXtcXFxcbWtlcm4tM211fXt9e317On1cXFxcbXNraXA2bXVcXFxccmVsYXhcIik7IC8vIFxcbmV3Y29tbWFuZHtcXGJveGVkfVsxXXtcXGZib3h7XFxtQHRoJFxcZGlzcGxheXN0eWxlIzEkfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcYm94ZWRcIiwgXCJcXFxcZmJveHskXFxcXGRpc3BsYXlzdHlsZXsjMX0kfVwiKTsgLy8gXFxkZWZcXGlmZntcXERPVFNCXFw7XFxMb25nbGVmdHJpZ2h0YXJyb3dcXDt9XG4vLyBcXGRlZlxcaW1wbGllc3tcXERPVFNCXFw7XFxMb25ncmlnaHRhcnJvd1xcO31cbi8vIFxcZGVmXFxpbXBsaWVkYnl7XFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcO31cblxuZGVmaW5lTWFjcm8oXCJcXFxcaWZmXCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ2xlZnRyaWdodGFycm93XFxcXDtcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbXBsaWVzXCIsIFwiXFxcXERPVFNCXFxcXDtcXFxcTG9uZ3JpZ2h0YXJyb3dcXFxcO1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltcGxpZWRieVwiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdsZWZ0YXJyb3dcXFxcO1wiKTsgLy8gQU1TTWF0aCdzIGF1dG9tYXRpYyBcXGRvdHMsIGJhc2VkIG9uIFxcbWRvdHNAQCBtYWNyby5cblxudmFyIGRvdHNCeVRva2VuID0ge1xuICAnLCc6ICdcXFxcZG90c2MnLFxuICAnXFxcXG5vdCc6ICdcXFxcZG90c2InLFxuICAvLyBcXGtleWJpbkAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnKyc6ICdcXFxcZG90c2InLFxuICAnPSc6ICdcXFxcZG90c2InLFxuICAnPCc6ICdcXFxcZG90c2InLFxuICAnPic6ICdcXFxcZG90c2InLFxuICAnLSc6ICdcXFxcZG90c2InLFxuICAnKic6ICdcXFxcZG90c2InLFxuICAnOic6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxET1RTQjpcbiAgJ1xcXFxET1RTQic6ICdcXFxcZG90c2InLFxuICAnXFxcXGNvcHJvZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3ZlZSc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3dlZGdlJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlndXBsdXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdjYXAnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdjdXAnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxwcm9kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcc3VtJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnb3RpbWVzJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnb3BsdXMnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWdvZG90JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnc3FjdXAnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxBbmQnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25ncmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ2xlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXExvbmdsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbGVmdHJpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxMb25nbGVmdHJpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxtYXBzdG8nOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxsb25nbWFwc3RvJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcaG9va3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxkb3RlcSc6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxtYXRoYmluOlxuICAnXFxcXG1hdGhiaW4nOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcbWF0aHJlbDpcbiAgJ1xcXFxtYXRocmVsJzogJ1xcXFxkb3RzYicsXG4gICdcXFxccmVsYmFyJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcUmVsYmFyJzogJ1xcXFxkb3RzYicsXG4gICdcXFxceHJpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFx4bGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNJOlxuICAnXFxcXERPVFNJJzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcb2ludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlpaWludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXGlkb3RzaW50JzogJ1xcXFxkb3RzaScsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXERPVFNYOlxuICAnXFxcXERPVFNYJzogJ1xcXFxkb3RzeCdcbn07XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRPRE86IElmIHVzZWQgaW4gdGV4dCBtb2RlLCBzaG91bGQgZXhwYW5kIHRvIFxcdGV4dGVsbGlwc2lzLlxuICAvLyBIb3dldmVyLCBpbiBLYVRlWCwgXFx0ZXh0ZWxsaXBzaXMgYW5kIFxcbGRvdHMgYmVoYXZlIHRoZSBzYW1lXG4gIC8vIChpbiB0ZXh0IG1vZGUpLCBhbmQgaXQncyB1bmxpa2VseSB3ZSdkIHNlZSBhbnkgb2YgdGhlIG1hdGggY29tbWFuZHNcbiAgLy8gdGhhdCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIFxcZG90cyB3aGVuIGluIHRleHQgbW9kZS4gIFNvIGZpbmUgZm9yIG5vd1xuICAvLyAodW50aWwgd2Ugc3VwcG9ydCBcXGlmbW1vZGUgLi4uIFxcZWxzZSAuLi4gXFxmaSkuXG4gIHZhciB0aGVkb3RzID0gJ1xcXFxkb3Rzbyc7XG4gIHZhciBuZXh0ID0gY29udGV4dC5leHBhbmRBZnRlckZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gZG90c0J5VG9rZW4pIHtcbiAgICB0aGVkb3RzID0gZG90c0J5VG9rZW5bbmV4dF07XG4gIH0gZWxzZSBpZiAobmV4dC5zbGljZSgwLCA0KSA9PT0gJ1xcXFxub3QnKSB7XG4gICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICB9IGVsc2UgaWYgKG5leHQgaW4gc3ltYm9scy5tYXRoKSB7XG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFsnYmluJywgJ3JlbCddLCBzeW1ib2xzLm1hdGhbbmV4dF0uZ3JvdXApKSB7XG4gICAgICB0aGVkb3RzID0gJ1xcXFxkb3RzYic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoZWRvdHM7XG59KTtcbnZhciBzcGFjZUFmdGVyRG90cyA9IHtcbiAgLy8gXFxyaWdodGRlbGltQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICcpJzogdHJ1ZSxcbiAgJ10nOiB0cnVlLFxuICAnXFxcXHJicmFjayc6IHRydWUsXG4gICdcXFxcfSc6IHRydWUsXG4gICdcXFxccmJyYWNlJzogdHJ1ZSxcbiAgJ1xcXFxyYW5nbGUnOiB0cnVlLFxuICAnXFxcXHJjZWlsJzogdHJ1ZSxcbiAgJ1xcXFxyZmxvb3InOiB0cnVlLFxuICAnXFxcXHJncm91cCc6IHRydWUsXG4gICdcXFxccm1vdXN0YWNoZSc6IHRydWUsXG4gICdcXFxccmlnaHQnOiB0cnVlLFxuICAnXFxcXGJpZ3InOiB0cnVlLFxuICAnXFxcXGJpZ2dyJzogdHJ1ZSxcbiAgJ1xcXFxCaWdyJzogdHJ1ZSxcbiAgJ1xcXFxCaWdncic6IHRydWUsXG4gIC8vIFxcZXh0cmFAIGFsc28gdGVzdHMgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICckJzogdHJ1ZSxcbiAgLy8gXFxleHRyYXBAIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJzsnOiB0cnVlLFxuICAnLic6IHRydWUsXG4gICcsJzogdHJ1ZVxufTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNvXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBuZXh0ID0gY29udGV4dC5mdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzKSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzY1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDsgLy8gXFxkb3RzYyB1c2VzIFxcZXh0cmFAIGJ1dCBub3QgXFxleHRyYXBALCBpbnN0ZWFkIHNwZWNpYWxseSBjaGVja2luZyBmb3JcbiAgLy8gJzsnIGFuZCAnLicsIGJ1dCBkb2Vzbid0IGNoZWNrIGZvciAnLCcuXG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMgJiYgbmV4dCAhPT0gJywnKSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcbGRvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxjZG90c1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cykge1xuICAgIHJldHVybiBcIlxcXFxAY2RvdHNcXFxcLFwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlxcXFxAY2RvdHNcIjtcbiAgfVxufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzYlwiLCBcIlxcXFxjZG90c1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNtXCIsIFwiXFxcXGNkb3RzXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2lcIiwgXCJcXFxcIVxcXFxjZG90c1wiKTsgLy8gYW1zbWF0aCBkb2Vzbid0IGFjdHVhbGx5IGRlZmluZSBcXGRvdHN4LCBidXQgXFxkb3RzIGZvbGxvd2VkIGJ5IGEgbWFjcm9cbi8vIHN0YXJ0aW5nIHdpdGggXFxET1RTWCBpbXBsaWVzIFxcZG90c28sIGFuZCB0aGVuIFxcZXh0cmFAIGRldGVjdHMgdGhpcyBjYXNlXG4vLyBhbmQgZm9yY2VzIHRoZSBhZGRlZCBgXFwsYC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcZG90c3hcIiwgXCJcXFxcbGRvdHNcXFxcLFwiKTsgLy8gXFxsZXRcXERPVFNJXFxyZWxheFxuLy8gXFxsZXRcXERPVFNCXFxyZWxheFxuLy8gXFxsZXRcXERPVFNYXFxyZWxheFxuXG5kZWZpbmVNYWNybyhcIlxcXFxET1RTSVwiLCBcIlxcXFxyZWxheFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERPVFNCXCIsIFwiXFxcXHJlbGF4XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU1hcIiwgXCJcXFxccmVsYXhcIik7IC8vIFNwYWNpbmcsIGJhc2VkIG9uIGFtc21hdGguc3R5J3Mgb3ZlcnJpZGUgb2YgTGFUZVggZGVmYXVsdHNcbi8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmR7XFx0bXNwYWNlfVszXXslXG4vLyAgIFxcaWZtbW9kZVxcbXNraXAjMSMyXFxlbHNlXFxrZXJuIzEjM1xcZmlcXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFx0bXNwYWNlXCIsIFwiXFxcXFRleHRPck1hdGh7XFxcXGtlcm4jMSMzfXtcXFxcbXNraXAjMSMyfVxcXFxyZWxheFwiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFwsfXtcXHRtc3BhY2UrXFx0aGlubXVza2lwey4xNjY3ZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFx0aGlubXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXCxcIiwgXCJcXFxcdG1zcGFjZSt7M211fXsuMTY2N2VtfVwiKTsgLy8gXFxsZXRcXHRoaW5zcGFjZVxcLFxuXG5kZWZpbmVNYWNybyhcIlxcXFx0aGluc3BhY2VcIiwgXCJcXFxcLFwiKTsgLy8gXFxkZWZcXD57XFxtc2tpcFxcbWVkbXVza2lwfVxuLy8gXFxyZW5ld2NvbW1hbmR7XFw6fXtcXHRtc3BhY2UrXFxtZWRtdXNraXB7LjIyMjJlbX19XG4vLyBUT0RPOiBcXD4gYW5kIG1hdGggbW9kZSBvZiBcXDogc2hvdWxkIHVzZSBcXG1lZG11c2tpcCA9IDRtdSBwbHVzIDJtdSBtaW51cyA0bXVcblxuZGVmaW5lTWFjcm8oXCJcXFxcPlwiLCBcIlxcXFxtc2tpcHs0bXV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcOlwiLCBcIlxcXFx0bXNwYWNlK3s0bXV9ey4yMjIyZW19XCIpOyAvLyBcXGxldFxcbWVkc3BhY2VcXDpcblxuZGVmaW5lTWFjcm8oXCJcXFxcbWVkc3BhY2VcIiwgXCJcXFxcOlwiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFw7fXtcXHRtc3BhY2UrXFx0aGlja211c2tpcHsuMjc3N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpY2ttdXNraXAgPSA1bXUgcGx1cyA1bXVcblxuZGVmaW5lTWFjcm8oXCJcXFxcO1wiLCBcIlxcXFx0bXNwYWNlK3s1bXV9ey4yNzc3ZW19XCIpOyAvLyBcXGxldFxcdGhpY2tzcGFjZVxcO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx0aGlja3NwYWNlXCIsIFwiXFxcXDtcIik7IC8vIFxccmVuZXdjb21tYW5ke1xcIX17XFx0bXNwYWNlLVxcdGhpbm11c2tpcHsuMTY2N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpbm11c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFwhXCIsIFwiXFxcXHRtc3BhY2UtezNtdX17LjE2NjdlbX1cIik7IC8vIFxcbGV0XFxuZWd0aGluc3BhY2VcXCFcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVndGhpbnNwYWNlXCIsIFwiXFxcXCFcIik7IC8vIFxcbmV3Y29tbWFuZHtcXG5lZ21lZHNwYWNlfXtcXHRtc3BhY2UtXFxtZWRtdXNraXB7LjIyMjJlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXG1lZG11c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFxuZWdtZWRzcGFjZVwiLCBcIlxcXFx0bXNwYWNlLXs0bXV9ey4yMjIyZW19XCIpOyAvLyBcXG5ld2NvbW1hbmR7XFxuZWd0aGlja3NwYWNlfXtcXHRtc3BhY2UtXFx0aGlja211c2tpcHsuMjc3N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpY2ttdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVndGhpY2tzcGFjZVwiLCBcIlxcXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX1cIik7IC8vIFxcZGVmXFxlbnNwYWNle1xca2Vybi41ZW0gfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlbnNwYWNlXCIsIFwiXFxcXGtlcm4uNWVtIFwiKTsgLy8gXFxkZWZcXGVuc2tpcHtcXGhza2lwLjVlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVuc2tpcFwiLCBcIlxcXFxoc2tpcC41ZW1cXFxccmVsYXhcIik7IC8vIFxcZGVmXFxxdWFke1xcaHNraXAxZW1cXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxxdWFkXCIsIFwiXFxcXGhza2lwMWVtXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxccXF1YWR7XFxoc2tpcDJlbVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXHFxdWFkXCIsIFwiXFxcXGhza2lwMmVtXFxcXHJlbGF4XCIpOyAvLyBcXHRhZ0BpbkBkaXNwbGF5IGZvcm0gb2YgXFx0YWdcblxuZGVmaW5lTWFjcm8oXCJcXFxcdGFnXCIsIFwiXFxcXEBpZnN0YXJcXFxcdGFnQGxpdGVyYWxcXFxcdGFnQHBhcmVuXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGFnQHBhcmVuXCIsIFwiXFxcXHRhZ0BsaXRlcmFseyh7IzF9KX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0YWdAbGl0ZXJhbFwiLCBjb250ZXh0ID0+IHtcbiAgaWYgKGNvbnRleHQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIk11bHRpcGxlIFxcXFx0YWdcIik7XG4gIH1cblxuICByZXR1cm4gXCJcXFxcZ2RlZlxcXFxkZkB0YWd7XFxcXHRleHR7IzF9fVwiO1xufSk7IC8vIFxccmVuZXdjb21tYW5ke1xcYm1vZH17XFxub25zY3JpcHRcXG1za2lwLVxcbWVkbXVza2lwXFxta2VybjVtdVxcbWF0aGJpblxuLy8gICB7XFxvcGVyYXRvckBmb250IG1vZH1cXHBlbmFsdHk5MDBcbi8vICAgXFxta2VybjVtdVxcbm9uc2NyaXB0XFxtc2tpcC1cXG1lZG11c2tpcH1cbi8vIFxcbmV3Y29tbWFuZHtcXHBvZH1bMV17XFxhbGxvd2JyZWFrXG4vLyAgIFxcaWZAZGlzcGxheVxcbWtlcm4xOG11XFxlbHNlXFxta2VybjhtdVxcZmkoIzEpfVxuLy8gXFxyZW5ld2NvbW1hbmR7XFxwbW9kfVsxXXtcXHBvZHt7XFxvcGVyYXRvckBmb250IG1vZH1cXG1rZXJuNm11IzF9fVxuLy8gXFxuZXdjb21tYW5ke1xcbW9kfVsxXXtcXGFsbG93YnJlYWtcXGlmQGRpc3BsYXlcXG1rZXJuMThtdVxuLy8gICBcXGVsc2VcXG1rZXJuMTJtdVxcZml7XFxvcGVyYXRvckBmb250IG1vZH1cXCxcXCwjMX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcbWVkbXVza2lwID0gNG11IHBsdXMgMm11IG1pbnVzIDRtdVxuXG5kZWZpbmVNYWNybyhcIlxcXFxibW9kXCIsIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1za2lwMW11fXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDVtdX17XFxcXG1za2lwNW11fVwiICsgXCJcXFxcbWF0aGJpbntcXFxccm0gbW9kfVwiICsgXCJcXFxcbWF0aGNob2ljZXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDFtdX17XFxcXG1za2lwNW11fXtcXFxcbXNraXA1bXV9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccG9kXCIsIFwiXFxcXGFsbG93YnJlYWtcIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuMThtdX17XFxcXG1rZXJuOG11fXtcXFxcbWtlcm44bXV9e1xcXFxta2VybjhtdX0oIzEpXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccG1vZFwiLCBcIlxcXFxwb2R7e1xcXFxybSBtb2R9XFxcXG1rZXJuNm11IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbW9kXCIsIFwiXFxcXGFsbG93YnJlYWtcIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuMThtdX17XFxcXG1rZXJuMTJtdX17XFxcXG1rZXJuMTJtdX17XFxcXG1rZXJuMTJtdX1cIiArIFwie1xcXFxybSBtb2R9XFxcXCxcXFxcLCMxXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMYVRlWCBzb3VyY2UyZVxuLy8gXFxleHBhbmRhZnRlclxcbGV0XFxleHBhbmRhZnRlclxcQG5vcm1hbGNyXG4vLyAgICAgXFxjc25hbWVcXGV4cGFuZGFmdGVyXFxAZ29iYmxlXFxzdHJpbmdcXFxcIFxcZW5kY3NuYW1lXG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxuZXdsaW5le1xcQG5vcm1hbGNyXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3bGluZVwiLCBcIlxcXFxcXFxcXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxcVGVYe1RcXGtlcm4tLjE2NjdlbVxcbG93ZXIuNWV4XFxoYm94e0V9XFxrZXJuLS4xMjVlbVhcXEB9XG4vLyBUT0RPOiBEb2Vzbid0IG5vcm1hbGx5IHdvcmsgaW4gbWF0aCBtb2RlIGJlY2F1c2UgXFxAIGZhaWxzLiAgS2FUZVggZG9lc24ndFxuLy8gc3VwcG9ydCBcXEAgeWV0LCBzbyB0aGF0J3Mgb21pdHRlZCwgYW5kIHdlIGFkZCBcXHRleHQgc28gdGhhdCB0aGUgcmVzdWx0XG4vLyBkb2Vzbid0IGxvb2sgZnVubnkgaW4gbWF0aCBtb2RlLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIFwiVFxcXFxrZXJuLS4xNjY3ZW1cXFxccmFpc2Vib3h7LS41ZXh9e0V9XFxcXGtlcm4tLjEyNWVtWFwiICsgXCJ9e1RlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcTGFUZVh9e0xcXGtlcm4tLjM2ZW0lXG4vLyAgICAgICAgIHtcXHNib3hcXHpAIFQlXG4vLyAgICAgICAgICBcXHZib3ggdG9cXGh0XFx6QHtcXGhib3h7XFxjaGVja0BtYXRoZm9udHNcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcZm9udHNpemVcXHNmQHNpemVcXHpAXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG1hdGhAZm9udHNmYWxzZVxcc2VsZWN0Zm9udFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQX0lXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBcXHZzc30lXG4vLyAgICAgICAgIH0lXG4vLyAgICAgICAgIFxca2Vybi0uMTVlbSVcbi8vICAgICAgICAgXFxUZVh9XG4vLyBUaGlzIGNvZGUgYWxpZ25zIHRoZSB0b3Agb2YgdGhlIEEgd2l0aCB0aGUgVCAoZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgVGVYJ3Ncbi8vIGJveGVzLCB0aG91Z2ggdmlzdWFsbHkgdGhlIEEgYXBwZWFycyB0byBleHRlbmQgYWJvdmUgc2xpZ2h0bHkpLlxuLy8gV2UgY29tcHV0ZSB0aGUgY29ycmVzcG9uZGluZyBcXHJhaXNlYm94IHdoZW4gQSBpcyByZW5kZXJlZCBpbiBcXG5vcm1hbHNpemVcbi8vIFxcc2NyaXB0c3R5bGUsIHdoaWNoIGhhcyBhIHNjYWxlIGZhY3RvciBvZiAwLjcgKHNlZSBPcHRpb25zLmpzKS5cblxudmFyIGxhdGV4UmFpc2VBID0gbWFrZUVtKGZvbnRNZXRyaWNzRGF0YVsnTWFpbi1SZWd1bGFyJ11bXCJUXCIuY2hhckNvZGVBdCgwKV1bMV0gLSAwLjcgKiBmb250TWV0cmljc0RhdGFbJ01haW4tUmVndWxhciddW1wiQVwiLmNoYXJDb2RlQXQoMCldWzFdKTtcbmRlZmluZU1hY3JvKFwiXFxcXExhVGVYXCIsIFwiXFxcXHRleHRybXtcXFxcaHRtbEBtYXRobWx7XCIgKyAoXCJMXFxcXGtlcm4tLjM2ZW1cXFxccmFpc2Vib3h7XCIgKyBsYXRleFJhaXNlQSArIFwifXtcXFxcc2NyaXB0c3R5bGUgQX1cIikgKyBcIlxcXFxrZXJuLS4xNWVtXFxcXFRlWH17TGFUZVh9fVwiKTsgLy8gTmV3IEthVGVYIGxvZ28gYmFzZWQgb24gdHdlYWtpbmcgTGFUZVggbG9nb1xuXG5kZWZpbmVNYWNybyhcIlxcXFxLYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiS1xcXFxrZXJuLS4xN2VtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0thVGVYfX1cIik7IC8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmRcXGhzcGFjZXtcXEBpZnN0YXJcXEBoc3BhY2VyXFxAaHNwYWNlfVxuLy8gXFxkZWZcXEBoc3BhY2UjMXtcXGhza2lwICAjMVxccmVsYXh9XG4vLyBcXGRlZlxcQGhzcGFjZXIjMXtcXHZydWxlIFxcQHdpZHRoXFx6QFxcbm9icmVha1xuLy8gICAgICAgICAgICAgICAgIFxcaHNraXAgIzFcXGhza2lwIFxcekBza2lwfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxoc3BhY2VcIiwgXCJcXFxcQGlmc3RhclxcXFxAaHNwYWNlclxcXFxAaHNwYWNlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQGhzcGFjZVwiLCBcIlxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VyXCIsIFwiXFxcXHJ1bGV7MHB0fXswcHR9XFxcXGhza2lwICMxXFxcXHJlbGF4XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtYXRodG9vbHMuc3R5XG4vL1xccHJvdmlkZWNvbW1hbmRcXG9yZGluYXJ5Y29sb257On1cblxuZGVmaW5lTWFjcm8oXCJcXFxcb3JkaW5hcnljb2xvblwiLCBcIjpcIik7IC8vXFxkZWZcXHZjZW50Y29sb257XFxtYXRocmVse1xcbWF0aG9wXFxvcmRpbmFyeWNvbG9ufX1cbi8vVE9ETyhlZGVtYWluZSk6IE5vdCB5ZXQgY2VudGVyZWQuIEZpeCB2aWEgXFxyYWlzZWJveCBvciAjNzI2XG5cbmRlZmluZU1hY3JvKFwiXFxcXHZjZW50Y29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcbWF0aG9wXFxcXG9yZGluYXJ5Y29sb259XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcZGJsY29sb257XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tLjltdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGRibGNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0uOW11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcY29sb25lcXF7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fT19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjU0fX1cIik7IC8vIOKJlFxuLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXFxe1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fT19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiM2R9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXF7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcbWF0aHJlbHstfX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIxMn19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25lcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcZGJsY29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIxMn19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcZXFxY29sb257PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjU1fX1cIik7IC8vIOKJlVxuLy8gXFxwcm92aWRlY29tbWFuZCpcXEVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxFcXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7PVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzZFxcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxY29sb257XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcbWF0aHJlbHstfVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzl9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXEVxY29sb257XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIxMlxcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uYXBwcm94e1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmFwcHJveFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGFwcHJveH19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjI0OH19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25hcHByb3h7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbmFwcHJveFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjI0OH19XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcY29sb25zaW17XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uc2ltXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcc2ltfX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2FcXFxcY2hhclxcXCIyMjNjfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbnNpbXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19XG5cbmRlZmluZU1hY3JvKFwiXFxcXENvbG9uc2ltXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcZGJsY29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzdcXFxcY2hhclxcXCIyMjNjfX1cIik7IC8vIFNvbWUgVW5pY29kZSBjaGFyYWN0ZXJzIGFyZSBpbXBsZW1lbnRlZCB3aXRoIG1hY3JvcyB0byBtYXRodG9vbHMgZnVuY3Rpb25zLlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzdcIiwgXCJcXFxcZGJsY29sb25cIik7IC8vIDo6XG5cbmRlZmluZU1hY3JvKFwiXFx1MjIzOVwiLCBcIlxcXFxlcWNvbG9uXCIpOyAvLyAtOlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTRcIiwgXCJcXFxcY29sb25lcXFcIik7IC8vIDo9XG5cbmRlZmluZU1hY3JvKFwiXFx1MjI1NVwiLCBcIlxcXFxlcXFjb2xvblwiKTsgLy8gPTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyQTc0XCIsIFwiXFxcXENvbG9uZXFxXCIpOyAvLyA6Oj1cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGNvbG9uZXF1YWxzLnN0eVxuLy8gQWx0ZXJuYXRlIG5hbWVzIGZvciBtYXRodG9vbHMncyBtYWNyb3M6XG5cbmRlZmluZU1hY3JvKFwiXFxcXHJhdGlvXCIsIFwiXFxcXHZjZW50Y29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9uXCIsIFwiXFxcXGRibGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcXVhbHNcIiwgXCJcXFxcY29sb25lcXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbmNvbG9uZXF1YWxzXCIsIFwiXFxcXENvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25cIiwgXCJcXFxcZXFxY29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlcXVhbHNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25taW51c1wiLCBcIlxcXFxjb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbm1pbnVzXCIsIFwiXFxcXENvbG9uZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW51c2NvbG9uXCIsIFwiXFxcXGVxY29sb25cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW51c2NvbG9uY29sb25cIiwgXCJcXFxcRXFjb2xvblwiKTsgLy8gXFxjb2xvbmFwcHJveCBuYW1lIGlzIHNhbWUgaW4gbWF0aHRvb2xzIGFuZCBjb2xvbmVxdWFscy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmFwcHJveFwiLCBcIlxcXFxDb2xvbmFwcHJveFwiKTsgLy8gXFxjb2xvbnNpbSBuYW1lIGlzIHNhbWUgaW4gbWF0aHRvb2xzIGFuZCBjb2xvbmVxdWFscy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbnNpbVwiLCBcIlxcXFxDb2xvbnNpbVwiKTsgLy8gQWRkaXRpb25hbCBtYWNyb3MsIGltcGxlbWVudGVkIGJ5IGFuYWxvZ3kgd2l0aCBtYXRodG9vbHMgZGVmaW5pdGlvbnM6XG5cbmRlZmluZU1hY3JvKFwiXFxcXHNpbWNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXHNpbVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXHNpbVxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYXBwcm94Y29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcYXBwcm94XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uY29sb25cIiwgXCJcXFxcbWF0aHJlbHtcXFxcYXBwcm94XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn1cIik7IC8vIFByZXNlbnQgaW4gbmV3dHhtYXRoLCBweGZvbnRzIGFuZCB0eGZvbnRzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5vdG5pXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxub3RcXFxcbml9e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyMEN9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxpbXN1cFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2xpbVxcXFwsc3VwfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxpbWluZlwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2xpbVxcXFwsaW5mfVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRnJvbSBhbXNvcG4uc3R5XG5cbmRlZmluZU1hY3JvKFwiXFxcXGluamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2lualxcXFwsbGltfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHByb2psaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntwcm9qXFxcXCxsaW19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFybGltc3VwXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXG92ZXJsaW5le2xpbX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFybGltaW5mXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXHVuZGVybGluZXtsaW19fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcmluamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFx1bmRlcnJpZ2h0YXJyb3d7bGltfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJwcm9qbGltXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7XFxcXHVuZGVybGVmdGFycm93e2xpbX19XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBNYXRoTUwgYWx0ZXJuYXRlcyBmb3IgS2FUZVggZ2x5cGhzIGluIHRoZSBVbmljb2RlIHByaXZhdGUgYXJlYVxuXG5kZWZpbmVNYWNybyhcIlxcXFxndmVydG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBndmVydG5lcXF9e1xcdTIyNjl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHZlcnRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbHZlcnRuZXFxfXtcXHUyMjY4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5nZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmdlcXF9e1xcdTIyNzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmdlcXNsYW50XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmdlcXNsYW50fXtcXHUyMjcxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5sZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmxlcXF9e1xcdTIyNzB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmxlcXNsYW50XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbmxlcXNsYW50fXtcXHUyMjcwfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zaG9ydG1pZFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zaG9ydG1pZH174oikfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5zaG9ydHBhcmFsbGVsXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnNob3J0cGFyYWxsZWx9e+KIpn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc3Vic2V0ZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnN1YnNldGVxcX17XFx1MjI4OH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc3Vwc2V0ZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbnN1cHNldGVxcX17XFx1MjI4OX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdWJzZXRuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdWJzZXRuZXF9e+KKin1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdWJzZXRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vic2V0bmVxcX174quLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1cHNldG5lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1cHNldG5lcX174oqLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcnN1cHNldG5lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdXBzZXRuZXFxfXviq4x9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hdGhcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBpbWF0aH17XFx1MDEzMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxqbWF0aFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGptYXRofXtcXHUwMjM3fVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RtYXJ5cmQgYW5kIHNlbWFudGljXG4vLyBUaGUgc3RtYXJ5cmQgYW5kIHNlbWFudGljIHBhY2thZ2VzIHJlbmRlciB0aGUgbmV4dCBmb3VyIGl0ZW1zIGJ5IGNhbGxpbmcgYVxuLy8gZ2x5cGguIFRob3NlIGdseXBocyBkbyBub3QgZXhpc3QgaW4gdGhlIEthVGVYIGZvbnRzLiBIZW5jZSB0aGUgbWFjcm9zLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxsbGJyYWNrZXRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRob3BlbntbXFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1MjdlNn19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccnJicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVdfX1cIiArIFwie1xcXFxtYXRoY2xvc2V7XFxcXGNoYXJgXFx1MjdlN319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyN2U2XCIsIFwiXFxcXGxsYnJhY2tldFwiKTsgLy8gYmxhY2tib2FyZCBib2xkIFtcblxuZGVmaW5lTWFjcm8oXCJcXHUyN2U3XCIsIFwiXFxcXHJyYnJhY2tldFwiKTsgLy8gYmxhY2tib2FyZCBib2xkIF1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbEJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57XFxcXHtcXFxcbWtlcm4tMy4ybXVbfX1cIiArIFwie1xcXFxtYXRob3BlbntcXFxcY2hhcmBcXHUyOTgzfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQnJhY2VcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRoY2xvc2V7XVxcXFxta2Vybi0zLjJtdVxcXFx9fX1cIiArIFwie1xcXFxtYXRoY2xvc2V7XFxcXGNoYXJgXFx1Mjk4NH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyOTgzXCIsIFwiXFxcXGxCcmFjZVwiKTsgLy8gYmxhY2tib2FyZCBib2xkIHtcblxuZGVmaW5lTWFjcm8oXCJcXHUyOTg0XCIsIFwiXFxcXHJCcmFjZVwiKTsgLy8gYmxhY2tib2FyZCBib2xkIH1cbi8vIFRPRE86IENyZWF0ZSB2YXJpYWJsZSBzaXplZCB2ZXJzaW9ucyBvZiB0aGUgbGFzdCB0d28gaXRlbXMuIEkgYmVsaWV2ZSB0aGF0XG4vLyB3aWxsIHJlcXVpcmUgbmV3IGZvbnQgZ2x5cGhzLlxuLy8gVGhlIHN0bWFyeXJkIGZ1bmN0aW9uIGBcXG1pbnVzb2AgcHJvdmlkZXMgYSBcIlBsaW1zb2xsXCIgc3ltYm9sIHRoYXRcbi8vIHN1cGVyaW1wb3NlcyB0aGUgY2hhcmFjdGVycyBcXGNpcmMgYW5kIFxcbWF0aG1pbnVzLiBVc2VkIGluIGNoZW1pc3RyeS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNvXCIsIFwiXFxcXG1hdGhiaW57XFxcXGh0bWxAbWF0aG1se1wiICsgXCJ7XFxcXG1hdGhybGFwe1xcXFxtYXRoY2hvaWNle1xcXFxrZXJuezAuMTQ1ZW19fXtcXFxca2VybnswLjE0NWVtfX1cIiArIFwie1xcXFxrZXJuezAuMTAxNWVtfX17XFxcXGtlcm57MC4wNzI1ZW19fVxcXFxjaXJjfXstfX19XCIgKyBcIntcXFxcY2hhcmDiprV9fVwiKTtcbmRlZmluZU1hY3JvKFwi4qa1XCIsIFwiXFxcXG1pbnVzb1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gdGV4dmMuc3R5XG4vLyBUaGUgdGV4dmMgcGFja2FnZSBjb250YWlucyBtYWNyb3MgYXZhaWxhYmxlIGluIG1lZGlhd2lraSBwYWdlcy5cbi8vIFdlIG9taXQgdGhlIGZ1bmN0aW9ucyBkZXByZWNhdGVkIGF0XG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWxwOkRpc3BsYXlpbmdfYV9mb3JtdWxhI0RlcHJlY2F0ZWRfc3ludGF4XG4vLyBXZSBhbHNvIG9taXQgdGV4dmMncyBcXE8sIHdoaWNoIGNvbmZsaWN0cyB3aXRoIFxcdGV4dHtcXE99XG5cbmRlZmluZU1hY3JvKFwiXFxcXGRhcnJcIiwgXCJcXFxcZG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZEFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYXJyXCIsIFwiXFxcXERvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhbmdcIiwgXCJcXFxcbGFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmFuZ1wiLCBcIlxcXFxyYW5nbGVcIik7XG5kZWZpbmVNYWNybyhcIlxcXFx1YXJyXCIsIFwiXFxcXHVwYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFx1QXJyXCIsIFwiXFxcXFVwYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxVYXJyXCIsIFwiXFxcXFVwYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxOXCIsIFwiXFxcXG1hdGhiYntOfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFJcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcWlwiLCBcIlxcXFxtYXRoYmJ7Wn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhbGVmXCIsIFwiXFxcXGFsZXBoXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZnN5bVwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEFscGhhXCIsIFwiXFxcXG1hdGhybXtBfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEJldGFcIiwgXCJcXFxcbWF0aHJte0J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYnVsbFwiLCBcIlxcXFxidWxsZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxDaGlcIiwgXCJcXFxcbWF0aHJte1h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY2x1YnNcIiwgXCJcXFxcY2x1YnN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjbnVtc1wiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxDb21wbGV4XCIsIFwiXFxcXG1hdGhiYntDfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERhZ2dlclwiLCBcIlxcXFxkZGFnZ2VyXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZGlhbW9uZHNcIiwgXCJcXFxcZGlhbW9uZHN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxlbXB0eVwiLCBcIlxcXFxlbXB0eXNldFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEVwc2lsb25cIiwgXCJcXFxcbWF0aHJte0V9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRXRhXCIsIFwiXFxcXG1hdGhybXtIfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGV4aXN0XCIsIFwiXFxcXGV4aXN0c1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGhhcnJcIiwgXCJcXFxcbGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoQXJyXCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcSGFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGhlYXJ0c1wiLCBcIlxcXFxoZWFydHN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbWFnZVwiLCBcIlxcXFxJbVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGluZmluXCIsIFwiXFxcXGluZnR5XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcSW90YVwiLCBcIlxcXFxtYXRocm17SX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpc2luXCIsIFwiXFxcXGluXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcS2FwcGFcIiwgXCJcXFxcbWF0aHJte0t9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbGFyclwiLCBcIlxcXFxsZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsQXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXExhcnJcIiwgXCJcXFxcTGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJhcnJcIiwgXCJcXFxcbGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsckFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXExyYXJyXCIsIFwiXFxcXExlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTXVcIiwgXCJcXFxcbWF0aHJte019XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbmF0bnVtc1wiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxOdVwiLCBcIlxcXFxtYXRocm17Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxPbWljcm9uXCIsIFwiXFxcXG1hdGhybXtPfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsdXNtblwiLCBcIlxcXFxwbVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhcnJcIiwgXCJcXFxccmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJBcnJcIiwgXCJcXFxcUmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFJhcnJcIiwgXCJcXFxcUmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlYWxcIiwgXCJcXFxcUmVcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsc1wiLCBcIlxcXFxtYXRoYmJ7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSZWFsc1wiLCBcIlxcXFxtYXRoYmJ7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSaG9cIiwgXCJcXFxcbWF0aHJte1B9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2RvdFwiLCBcIlxcXFxjZG90XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2VjdFwiLCBcIlxcXFxTXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3BhZGVzXCIsIFwiXFxcXHNwYWRlc3VpdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1YlwiLCBcIlxcXFxzdWJzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJlXCIsIFwiXFxcXHN1YnNldGVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3VwZVwiLCBcIlxcXFxzdXBzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFRhdVwiLCBcIlxcXFxtYXRocm17VH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0aGV0YXN5bVwiLCBcIlxcXFx2YXJ0aGV0YVwiKTsgLy8gVE9ETzogZGVmaW5lTWFjcm8oXCJcXFxcdmFyY29wcGFcIiwgXCJcXFxcXFxtYm94e1xcXFxjb3BwYX1cIik7XG5cbmRlZmluZU1hY3JvKFwiXFxcXHdlaWVycFwiLCBcIlxcXFx3cFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpldGFcIiwgXCJcXFxcbWF0aHJte1p9XCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBzdGF0bWF0aC5zdHlcbi8vIGh0dHBzOi8vY3Rhbi5tYXRoLmlsbGlub2lzLmVkdS9tYWNyb3MvbGF0ZXgvY29udHJpYi9zdGF0bWF0aC9zdGF0bWF0aC5wZGZcblxuZGVmaW5lTWFjcm8oXCJcXFxcYXJnbWluXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7YXJnXFxcXCxtaW59XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYXJnbWF4XCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7YXJnXFxcXCxtYXh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccGxpbVwiLCBcIlxcXFxET1RTQlxcXFxtYXRob3B7XFxcXG9wZXJhdG9ybmFtZXtwbGltfX1cXFxcbGltaXRzXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBicmFrZXQuc3R5XG4vLyBodHRwOi8vY3Rhbi5tYXRoLndhc2hpbmd0b24uZWR1L3RleC1hcmNoaXZlL21hY3Jvcy9sYXRleC9jb250cmliL2JyYWtldC9icmFrZXQucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGJyYVwiLCBcIlxcXFxtYXRoaW5uZXJ7XFxcXGxhbmdsZXsjMX18fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGtldFwiLCBcIlxcXFxtYXRoaW5uZXJ7fHsjMX1cXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJyYWtldFwiLCBcIlxcXFxtYXRoaW5uZXJ7XFxcXGxhbmdsZXsjMX1cXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEJyYVwiLCBcIlxcXFxsZWZ0XFxcXGxhbmdsZSMxXFxcXHJpZ2h0fFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEtldFwiLCBcIlxcXFxsZWZ0fCMxXFxcXHJpZ2h0XFxcXHJhbmdsZVwiKTtcblxudmFyIGJyYWtldEhlbHBlciA9IG9uZSA9PiBjb250ZXh0ID0+IHtcbiAgdmFyIGxlZnQgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBtaWRkbGUgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBtaWRkbGVEb3VibGUgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciByaWdodCA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgdmFyIG9sZE1pZGRsZSA9IGNvbnRleHQubWFjcm9zLmdldChcInxcIik7XG4gIHZhciBvbGRNaWRkbGVEb3VibGUgPSBjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcfFwiKTtcbiAgY29udGV4dC5tYWNyb3MuYmVnaW5Hcm91cCgpO1xuXG4gIHZhciBtaWRNYWNybyA9IGRvdWJsZSA9PiBjb250ZXh0ID0+IHtcbiAgICBpZiAob25lKSB7XG4gICAgICAvLyBPbmx5IG1vZGlmeSB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgfCBvciBcXHxcbiAgICAgIGNvbnRleHQubWFjcm9zLnNldChcInxcIiwgb2xkTWlkZGxlKTtcblxuICAgICAgaWYgKG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICAgICAgY29udGV4dC5tYWNyb3Muc2V0KFwiXFxcXHxcIiwgb2xkTWlkZGxlRG91YmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZG91YmxlZCA9IGRvdWJsZTtcblxuICAgIGlmICghZG91YmxlICYmIG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICAgIC8vIE1pbWljIFxcQGlmbmV4dGNoYXJcbiAgICAgIHZhciBuZXh0VG9rZW4gPSBjb250ZXh0LmZ1dHVyZSgpO1xuXG4gICAgICBpZiAobmV4dFRva2VuLnRleHQgPT09IFwifFwiKSB7XG4gICAgICAgIGNvbnRleHQucG9wVG9rZW4oKTtcbiAgICAgICAgZG91YmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogZG91YmxlZCA/IG1pZGRsZURvdWJsZSA6IG1pZGRsZSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9O1xuXG4gIGNvbnRleHQubWFjcm9zLnNldChcInxcIiwgbWlkTWFjcm8oZmFsc2UpKTtcblxuICBpZiAobWlkZGxlRG91YmxlLmxlbmd0aCkge1xuICAgIGNvbnRleHQubWFjcm9zLnNldChcIlxcXFx8XCIsIG1pZE1hY3JvKHRydWUpKTtcbiAgfVxuXG4gIHZhciBhcmcgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBleHBhbmRlZCA9IGNvbnRleHQuZXhwYW5kVG9rZW5zKFsuLi5yaWdodCwgLi4uYXJnLCAuLi5sZWZ0IC8vIHJldmVyc2VkXG4gIF0pO1xuICBjb250ZXh0Lm1hY3Jvcy5lbmRHcm91cCgpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogZXhwYW5kZWQucmV2ZXJzZSgpLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn07XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJyYUBrZXRcIiwgYnJha2V0SGVscGVyKGZhbHNlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxicmFAc2V0XCIsIGJyYWtldEhlbHBlcih0cnVlKSk7XG5kZWZpbmVNYWNybyhcIlxcXFxCcmFrZXRcIiwgXCJcXFxcYnJhQGtldHtcXFxcbGVmdFxcXFxsYW5nbGV9XCIgKyBcIntcXFxcLFxcXFxtaWRkbGVcXFxcdmVydFxcXFwsfXtcXFxcLFxcXFxtaWRkbGVcXFxcdmVydFxcXFwsfXtcXFxccmlnaHRcXFxccmFuZ2xlfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFNldFwiLCBcIlxcXFxicmFAc2V0e1xcXFxsZWZ0XFxcXHtcXFxcOn1cIiArIFwie1xcXFw7XFxcXG1pZGRsZVxcXFx2ZXJ0XFxcXDt9e1xcXFw7XFxcXG1pZGRsZVxcXFxWZXJ0XFxcXDt9e1xcXFw6XFxcXHJpZ2h0XFxcXH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2V0XCIsIFwiXFxcXGJyYUBzZXR7XFxcXHtcXFxcLH17XFxcXG1pZH17fXtcXFxcLFxcXFx9fVwiKTsgLy8gaGFzIG5vIHN1cHBvcnQgZm9yIHNwZWNpYWwgfHwgb3IgXFx8XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBhY3R1YXJpYWxhbmdsZS5kdHhcblxuZGVmaW5lTWFjcm8oXCJcXFxcYW5nbG5cIiwgXCJ7XFxcXGFuZ2wgbn1cIik7IC8vIEN1c3RvbSBLaGFuIEFjYWRlbXkgY29sb3JzLCBzaG91bGQgYmUgbW92ZWQgdG8gYW4gb3B0aW9uYWwgcGFja2FnZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxibHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzY0OTVlZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3JhbmdlXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYTUwMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccGlua1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNkZjAwMzB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyZWVuXCIsIFwiXFxcXHRleHRjb2xvcnsjIzI4YWU3Yn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheVwiLCBcIlxcXFx0ZXh0Y29sb3J7Z3JheX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVDXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxBXCIsIFwiXFxcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25EXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5QlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheURcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlGXCIsIFwiXFxcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUdcIiwgXCJcXFxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlJXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FCbHVlXCIsIFwiXFxcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxca2FHcmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfVwiKTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIOKAnGd1bGxldOKAnSB3aGVyZSBtYWNyb3MgYXJlIGV4cGFuZGVkXG4gKiB1bnRpbCBvbmx5IG5vbi1tYWNybyB0b2tlbnMgcmVtYWluLlxuICovXG4vLyBMaXN0IG9mIGNvbW1hbmRzIHRoYXQgYWN0IGxpa2UgbWFjcm9zIGJ1dCBhcmVuJ3QgZGVmaW5lZCBhcyBhIG1hY3JvLFxuLy8gZnVuY3Rpb24sIG9yIHN5bWJvbC4gIFVzZWQgaW4gYGlzRGVmaW5lZGAuXG52YXIgaW1wbGljaXRDb21tYW5kcyA9IHtcbiAgXCJeXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIl9cIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiXFxcXGxpbWl0c1wiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJcXFxcbm9saW1pdHNcIjogdHJ1ZSAvLyBQYXJzZXIuanNcblxufTtcbmNsYXNzIE1hY3JvRXhwYW5kZXIge1xuICBjb25zdHJ1Y3RvcihpbnB1dCwgc2V0dGluZ3MsIG1vZGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5leHBhbnNpb25Db3VudCA9IDA7XG4gICAgdGhpcy5mZWVkKGlucHV0KTsgLy8gTWFrZSBuZXcgZ2xvYmFsIG5hbWVzcGFjZVxuXG4gICAgdGhpcy5tYWNyb3MgPSBuZXcgTmFtZXNwYWNlKG1hY3Jvcywgc2V0dGluZ3MubWFjcm9zKTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuc3RhY2sgPSBbXTsgLy8gY29udGFpbnMgdG9rZW5zIGluIFJFVkVSU0Ugb3JkZXJcbiAgfVxuICAvKipcbiAgICogRmVlZCBhIG5ldyBpbnB1dCBzdHJpbmcgdG8gdGhlIHNhbWUgTWFjcm9FeHBhbmRlclxuICAgKiAod2l0aCBleGlzdGluZyBtYWNyb3MgZXRjLikuXG4gICAqL1xuXG5cbiAgZmVlZChpbnB1dCkge1xuICAgIHRoaXMubGV4ZXIgPSBuZXcgTGV4ZXIoaW5wdXQsIHRoaXMuc2V0dGluZ3MpO1xuICB9XG4gIC8qKlxuICAgKiBTd2l0Y2hlcyBiZXR3ZWVuIFwidGV4dFwiIGFuZCBcIm1hdGhcIiBtb2Rlcy5cbiAgICovXG5cblxuICBzd2l0Y2hNb2RlKG5ld01vZGUpIHtcbiAgICB0aGlzLm1vZGUgPSBuZXdNb2RlO1xuICB9XG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBncm91cCBuZXN0aW5nIHdpdGhpbiBhbGwgbmFtZXNwYWNlcy5cbiAgICovXG5cblxuICBiZWdpbkdyb3VwKCkge1xuICAgIHRoaXMubWFjcm9zLmJlZ2luR3JvdXAoKTtcbiAgfVxuICAvKipcbiAgICogRW5kIGN1cnJlbnQgZ3JvdXAgbmVzdGluZyB3aXRoaW4gYWxsIG5hbWVzcGFjZXMuXG4gICAqL1xuXG5cbiAgZW5kR3JvdXAoKSB7XG4gICAgdGhpcy5tYWNyb3MuZW5kR3JvdXAoKTtcbiAgfVxuICAvKipcbiAgICogRW5kcyBhbGwgY3VycmVudGx5IG5lc3RlZCBncm91cHMgKGlmIGFueSksIHJlc3RvcmluZyB2YWx1ZXMgYmVmb3JlIHRoZVxuICAgKiBncm91cHMgYmVnYW4uICBVc2VmdWwgaW4gY2FzZSBvZiBhbiBlcnJvciBpbiB0aGUgbWlkZGxlIG9mIHBhcnNpbmcuXG4gICAqL1xuXG5cbiAgZW5kR3JvdXBzKCkge1xuICAgIHRoaXMubWFjcm9zLmVuZEdyb3VwcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aG91dCBleHBhbmRpbmcgaXQuXG4gICAqIFNpbWlsYXIgaW4gYmVoYXZpb3IgdG8gVGVYJ3MgYFxcZnV0dXJlbGV0YC5cbiAgICovXG5cblxuICBmdXR1cmUoKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgbmV4dCB1bmV4cGFuZGVkIHRva2VuLlxuICAgKi9cblxuXG4gIHBvcFRva2VuKCkge1xuICAgIHRoaXMuZnV0dXJlKCk7IC8vIGVuc3VyZSBub24tZW1wdHkgc3RhY2tcblxuICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBnaXZlbiB0b2tlbiB0byB0aGUgdG9rZW4gc3RhY2suICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGdldCBiZSB1c2VkXG4gICAqIHRvIHB1dCBiYWNrIGEgdG9rZW4gcmV0dXJuZWQgZnJvbSBvbmUgb2YgdGhlIG90aGVyIG1ldGhvZHMuXG4gICAqL1xuXG5cbiAgcHVzaFRva2VuKHRva2VuKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKHRva2VuKTtcbiAgfVxuICAvKipcbiAgICogQXBwZW5kIGFuIGFycmF5IG9mIHRva2VucyB0byB0aGUgdG9rZW4gc3RhY2suXG4gICAqL1xuXG5cbiAgcHVzaFRva2Vucyh0b2tlbnMpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2goLi4udG9rZW5zKTtcbiAgfVxuICAvKipcbiAgICogRmluZCBhbiBtYWNybyBhcmd1bWVudCB3aXRob3V0IGV4cGFuZGluZyB0b2tlbnMgYW5kIGFwcGVuZCB0aGUgYXJyYXkgb2ZcbiAgICogdG9rZW5zIHRvIHRoZSB0b2tlbiBzdGFjay4gVXNlcyBUb2tlbiBhcyBhIGNvbnRhaW5lciBmb3IgdGhlIHJlc3VsdC5cbiAgICovXG5cblxuICBzY2FuQXJndW1lbnQoaXNPcHRpb25hbCkge1xuICAgIHZhciBzdGFydDtcbiAgICB2YXIgZW5kO1xuICAgIHZhciB0b2tlbnM7XG5cbiAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7IC8vIFxcQGlmbmV4dGNoYXIgZ29iYmxlcyBhbnkgc3BhY2UgZm9sbG93aW5nIGl0XG5cbiAgICAgIGlmICh0aGlzLmZ1dHVyZSgpLnRleHQgIT09IFwiW1wiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzdGFydCA9IHRoaXMucG9wVG9rZW4oKTsgLy8gZG9uJ3QgaW5jbHVkZSBbIGluIHRva2Vuc1xuXG4gICAgICAoe1xuICAgICAgICB0b2tlbnMsXG4gICAgICAgIGVuZFxuICAgICAgfSA9IHRoaXMuY29uc3VtZUFyZyhbXCJdXCJdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7XG4gICAgICAgIHRva2VucyxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZFxuICAgICAgfSA9IHRoaXMuY29uc3VtZUFyZygpKTtcbiAgICB9IC8vIGluZGljYXRlIHRoZSBlbmQgb2YgYW4gYXJndW1lbnRcblxuXG4gICAgdGhpcy5wdXNoVG9rZW4obmV3IFRva2VuKFwiRU9GXCIsIGVuZC5sb2MpKTtcbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICByZXR1cm4gc3RhcnQucmFuZ2UoZW5kLCBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbGwgZm9sbG93aW5nIHNwYWNlIHRva2Vucywgd2l0aG91dCBleHBhbnNpb24uXG4gICAqL1xuXG5cbiAgY29uc3VtZVNwYWNlcygpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgdG9rZW4gPSB0aGlzLmZ1dHVyZSgpO1xuXG4gICAgICBpZiAodG9rZW4udGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSBhbiBhcmd1bWVudCBmcm9tIHRoZSB0b2tlbiBzdHJlYW0sIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheVxuICAgKiBvZiB0b2tlbnMgYW5kIHN0YXJ0L2VuZCB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lQXJnKGRlbGltcykge1xuICAgIC8vIFRoZSBhcmd1bWVudCBmb3IgYSBkZWxpbWl0ZWQgcGFyYW1ldGVyIGlzIHRoZSBzaG9ydGVzdCAocG9zc2libHlcbiAgICAvLyBlbXB0eSkgc2VxdWVuY2Ugb2YgdG9rZW5zIHdpdGggcHJvcGVybHkgbmVzdGVkIHsuLi59IGdyb3VwcyB0aGF0IGlzXG4gICAgLy8gZm9sbG93ZWQgLi4uIGJ5IHRoaXMgcGFydGljdWxhciBsaXN0IG9mIG5vbi1wYXJhbWV0ZXIgdG9rZW5zLlxuICAgIC8vIFRoZSBhcmd1bWVudCBmb3IgYW4gdW5kZWxpbWl0ZWQgcGFyYW1ldGVyIGlzIHRoZSBuZXh0IG5vbmJsYW5rXG4gICAgLy8gdG9rZW4sIHVubGVzcyB0aGF0IHRva2VuIGlzIOKAmHvigJksIHdoZW4gdGhlIGFyZ3VtZW50IHdpbGwgYmUgdGhlXG4gICAgLy8gZW50aXJlIHsuLi59IGdyb3VwIHRoYXQgZm9sbG93cy5cbiAgICB2YXIgdG9rZW5zID0gW107XG4gICAgdmFyIGlzRGVsaW1pdGVkID0gZGVsaW1zICYmIGRlbGltcy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFpc0RlbGltaXRlZCkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBiZXR3ZWVuIGFyZ3VtZW50cy4gIEFzIHRoZSBUZVhib29rIHNheXM6XG4gICAgICAvLyBcIkFmdGVyIHlvdSBoYXZlIHNhaWQg4oCYXFxkZWZcXHJvdyMxIzJ7Li4ufeKAmSwgeW91IGFyZSBhbGxvd2VkIHRvXG4gICAgICAvLyAgcHV0IHNwYWNlcyBiZXR3ZWVuIHRoZSBhcmd1bWVudHMgKGUuZy4sIOKAmFxccm93IHggbuKAmSksIGJlY2F1c2VcbiAgICAgIC8vICBUZVggZG9lc27igJl0IHVzZSBzaW5nbGUgc3BhY2VzIGFzIHVuZGVsaW1pdGVkIGFyZ3VtZW50cy5cIlxuICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5mdXR1cmUoKTtcbiAgICB2YXIgdG9rO1xuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIG1hdGNoID0gMDtcblxuICAgIGRvIHtcbiAgICAgIHRvayA9IHRoaXMucG9wVG9rZW4oKTtcbiAgICAgIHRva2Vucy5wdXNoKHRvayk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCJ7XCIpIHtcbiAgICAgICAgKytkZXB0aDtcbiAgICAgIH0gZWxzZSBpZiAodG9rLnRleHQgPT09IFwifVwiKSB7XG4gICAgICAgIC0tZGVwdGg7XG5cbiAgICAgICAgaWYgKGRlcHRoID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXh0cmEgfVwiLCB0b2spO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRvay50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudFwiICsgXCIsIGV4cGVjdGVkICdcIiArIChkZWxpbXMgJiYgaXNEZWxpbWl0ZWQgPyBkZWxpbXNbbWF0Y2hdIDogXCJ9XCIpICsgXCInXCIsIHRvayk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWxpbXMgJiYgaXNEZWxpbWl0ZWQpIHtcbiAgICAgICAgaWYgKChkZXB0aCA9PT0gMCB8fCBkZXB0aCA9PT0gMSAmJiBkZWxpbXNbbWF0Y2hdID09PSBcIntcIikgJiYgdG9rLnRleHQgPT09IGRlbGltc1ttYXRjaF0pIHtcbiAgICAgICAgICArK21hdGNoO1xuXG4gICAgICAgICAgaWYgKG1hdGNoID09PSBkZWxpbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBpbmNsdWRlIGRlbGltcyBpbiB0b2tlbnNcbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoLW1hdGNoLCBtYXRjaCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0Y2ggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZGVwdGggIT09IDAgfHwgaXNEZWxpbWl0ZWQpOyAvLyBJZiB0aGUgYXJndW1lbnQgZm91bmQgLi4uIGhhcyB0aGUgZm9ybSDigJh7PG5lc3RlZCB0b2tlbnM+feKAmSxcbiAgICAvLyAuLi4gdGhlIG91dGVybW9zdCBicmFjZXMgZW5jbG9zaW5nIHRoZSBhcmd1bWVudCBhcmUgcmVtb3ZlZFxuXG5cbiAgICBpZiAoc3RhcnQudGV4dCA9PT0gXCJ7XCIgJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50ZXh0ID09PSBcIn1cIikge1xuICAgICAgdG9rZW5zLnBvcCgpO1xuICAgICAgdG9rZW5zLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgb3JkZXJcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnMsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZDogdG9rXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ29uc3VtZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiAoZGVsaW1pdGVkKSBhcmd1bWVudHMgZnJvbSB0aGUgdG9rZW5cbiAgICogc3RyZWFtIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAqL1xuXG5cbiAgY29uc3VtZUFyZ3MobnVtQXJncywgZGVsaW1pdGVycykge1xuICAgIGlmIChkZWxpbWl0ZXJzKSB7XG4gICAgICBpZiAoZGVsaW1pdGVycy5sZW5ndGggIT09IG51bUFyZ3MgKyAxKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVGhlIGxlbmd0aCBvZiBkZWxpbWl0ZXJzIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmdzIVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbGltcyA9IGRlbGltaXRlcnNbMF07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG5cbiAgICAgICAgaWYgKGRlbGltc1tpXSAhPT0gdG9rLnRleHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVzZSBvZiB0aGUgbWFjcm8gZG9lc24ndCBtYXRjaCBpdHMgZGVmaW5pdGlvblwiLCB0b2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBudW1BcmdzOyBfaSsrKSB7XG4gICAgICBhcmdzLnB1c2godGhpcy5jb25zdW1lQXJnKGRlbGltaXRlcnMgJiYgZGVsaW1pdGVyc1tfaSArIDFdKS50b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzO1xuICB9XG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgYGV4cGFuc2lvbkNvdW50YCBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC5cbiAgICogVGhyb3cgYW4gZXJyb3IgaWYgaXQgZXhjZWVkcyBgbWF4RXhwYW5kYC5cbiAgICovXG5cblxuICBjb3VudEV4cGFuc2lvbihhbW91bnQpIHtcbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50ICs9IGFtb3VudDtcblxuICAgIGlmICh0aGlzLmV4cGFuc2lvbkNvdW50ID4gdGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgZXhwYW5zaW9uczogaW5maW5pdGUgbG9vcCBvciBcIiArIFwibmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZ1wiKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgbmV4dCB0b2tlbiBvbmx5IG9uY2UgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIElmIHRoZSB0b2tlbiBpcyBleHBhbmRlZCwgdGhlIHJlc3VsdGluZyB0b2tlbnMgd2lsbCBiZSBwdXNoZWQgb250b1xuICAgKiB0aGUgc3RhY2sgaW4gcmV2ZXJzZSBvcmRlciwgYW5kIHRoZSBudW1iZXIgb2Ygc3VjaCB0b2tlbnMgd2lsbCBiZVxuICAgKiByZXR1cm5lZC4gIFRoaXMgbnVtYmVyIG1pZ2h0IGJlIHplcm8gb3IgcG9zaXRpdmUuXG4gICAqXG4gICAqIElmIG5vdCwgdGhlIHJldHVybiB2YWx1ZSBpcyBgZmFsc2VgLCBhbmQgdGhlIG5leHQgdG9rZW4gcmVtYWlucyBhdCB0aGVcbiAgICogdG9wIG9mIHRoZSBzdGFjay5cbiAgICpcbiAgICogSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXh0IHRva2VuIHdpbGwgYmUgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssXG4gICAqIG9yIHRoZSBzdGFjayB3aWxsIGJlIGVtcHR5IChpbiBjYXNlIG9mIGVtcHR5IGV4cGFuc2lvblxuICAgKiBhbmQgbm8gb3RoZXIgdG9rZW5zKS5cbiAgICpcbiAgICogVXNlZCB0byBpbXBsZW1lbnQgYGV4cGFuZEFmdGVyRnV0dXJlYCBhbmQgYGV4cGFuZE5leHRUb2tlbmAuXG4gICAqXG4gICAqIElmIGV4cGFuZGFibGVPbmx5LCBvbmx5IGV4cGFuZGFibGUgdG9rZW5zIGFyZSBleHBhbmRlZCBhbmRcbiAgICogYW4gdW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2UgcmVzdWx0cyBpbiBhbiBlcnJvci5cbiAgICovXG5cblxuICBleHBhbmRPbmNlKGV4cGFuZGFibGVPbmx5KSB7XG4gICAgdmFyIHRvcFRva2VuID0gdGhpcy5wb3BUb2tlbigpO1xuICAgIHZhciBuYW1lID0gdG9wVG9rZW4udGV4dDtcbiAgICB2YXIgZXhwYW5zaW9uID0gIXRvcFRva2VuLm5vZXhwYW5kID8gdGhpcy5fZ2V0RXhwYW5zaW9uKG5hbWUpIDogbnVsbDtcblxuICAgIGlmIChleHBhbnNpb24gPT0gbnVsbCB8fCBleHBhbmRhYmxlT25seSAmJiBleHBhbnNpb24udW5leHBhbmRhYmxlKSB7XG4gICAgICBpZiAoZXhwYW5kYWJsZU9ubHkgJiYgZXhwYW5zaW9uID09IG51bGwgJiYgbmFtZVswXSA9PT0gXCJcXFxcXCIgJiYgIXRoaXMuaXNEZWZpbmVkKG5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2U6IFwiICsgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHVzaFRva2VuKHRvcFRva2VuKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvdW50RXhwYW5zaW9uKDEpO1xuICAgIHZhciB0b2tlbnMgPSBleHBhbnNpb24udG9rZW5zO1xuICAgIHZhciBhcmdzID0gdGhpcy5jb25zdW1lQXJncyhleHBhbnNpb24ubnVtQXJncywgZXhwYW5zaW9uLmRlbGltaXRlcnMpO1xuXG4gICAgaWYgKGV4cGFuc2lvbi5udW1BcmdzKSB7XG4gICAgICAvLyBwYXN0ZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgdGhlIHBsYWNlaG9sZGVyc1xuICAgICAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKCk7IC8vIG1ha2UgYSBzaGFsbG93IGNvcHlcblxuICAgICAgZm9yICh2YXIgaSA9IHRva2Vucy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgdG9rID0gdG9rZW5zW2ldO1xuXG4gICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5XCIsIHRvayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rID0gdG9rZW5zWy0taV07IC8vIG5leHQgdG9rZW4gb24gc3RhY2tcblxuICAgICAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIC8vICMjIOKGkiAjXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTsgLy8gZHJvcCBmaXJzdCAjXG4gICAgICAgICAgfSBlbHNlIGlmICgvXlsxLTldJC8udGVzdCh0b2sudGV4dCkpIHtcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyIHdpdGggdGhlIGluZGljYXRlZCBhcmd1bWVudFxuICAgICAgICAgICAgdG9rZW5zLnNwbGljZShpLCAyLCAuLi5hcmdzWyt0b2sudGV4dCAtIDFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJOb3QgYSB2YWxpZCBhcmd1bWVudCBudW1iZXJcIiwgdG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIENvbmNhdGVuYXRlIGV4cGFuc2lvbiBvbnRvIHRvcCBvZiBzdGFjay5cblxuXG4gICAgdGhpcy5wdXNoVG9rZW5zKHRva2Vucyk7XG4gICAgcmV0dXJuIHRva2Vucy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgbmV4dCB0b2tlbiBvbmx5IG9uY2UgKGlmIHBvc3NpYmxlKSwgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nXG4gICAqIHRvcCB0b2tlbiBvbiB0aGUgc3RhY2sgKHdpdGhvdXQgcmVtb3ZpbmcgYW55dGhpbmcgZnJvbSB0aGUgc3RhY2spLlxuICAgKiBTaW1pbGFyIGluIGJlaGF2aW9yIHRvIFRlWCdzIGBcXGV4cGFuZGFmdGVyXFxmdXR1cmVsZXRgLlxuICAgKiBFcXVpdmFsZW50IHRvIGV4cGFuZE9uY2UoKSBmb2xsb3dlZCBieSBmdXR1cmUoKS5cbiAgICovXG5cblxuICBleHBhbmRBZnRlckZ1dHVyZSgpIHtcbiAgICB0aGlzLmV4cGFuZE9uY2UoKTtcbiAgICByZXR1cm4gdGhpcy5mdXR1cmUoKTtcbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZXhwYW5kIGZpcnN0IHRva2VuLCB0aGVuIHJldHVybiBmaXJzdCBub24tZXhwYW5kYWJsZSB0b2tlbi5cbiAgICovXG5cblxuICBleHBhbmROZXh0VG9rZW4oKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMuZXhwYW5kT25jZSgpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBmdWxseSBleHBhbmRlZFxuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnN0YWNrLnBvcCgpOyAvLyB0aGUgdG9rZW4gYWZ0ZXIgXFxub2V4cGFuZCBpcyBpbnRlcnByZXRlZCBhcyBpZiBpdHMgbWVhbmluZ1xuICAgICAgICAvLyB3ZXJlIOKAmFxccmVsYXjigJlcblxuICAgICAgICBpZiAodG9rZW4udHJlYXRBc1JlbGF4KSB7XG4gICAgICAgICAgdG9rZW4udGV4dCA9IFwiXFxcXHJlbGF4XCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgfSAvLyBGbG93IHVuYWJsZSB0byBmaWd1cmUgb3V0IHRoYXQgdGhpcyBwYXRod2F5IGlzIGltcG9zc2libGUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4MDhcblxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5yZWFjaGFibGVcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucywgb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG5cblxuICBleHBhbmRNYWNybyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFjcm9zLmhhcyhuYW1lKSA/IHRoaXMuZXhwYW5kVG9rZW5zKFtuZXcgVG9rZW4obmFtZSldKSA6IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiB0b2tlbiBzdHJlYW0gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2ZcbiAgICogdG9rZW5zLiAgTm90ZSB0aGF0IHRoZSBpbnB1dCB0b2tlbnMgYXJlIGluIHJldmVyc2Ugb3JkZXIsIGJ1dCB0aGVcbiAgICogb3V0cHV0IHRva2VucyBhcmUgaW4gZm9yd2FyZCBvcmRlci5cbiAgICovXG5cblxuICBleHBhbmRUb2tlbnModG9rZW5zKSB7XG4gICAgdmFyIG91dHB1dCA9IFtdO1xuICAgIHZhciBvbGRTdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgIHRoaXMucHVzaFRva2Vucyh0b2tlbnMpO1xuXG4gICAgd2hpbGUgKHRoaXMuc3RhY2subGVuZ3RoID4gb2xkU3RhY2tMZW5ndGgpIHtcbiAgICAgIC8vIEV4cGFuZCBvbmx5IGV4cGFuZGFibGUgdG9rZW5zXG4gICAgICBpZiAodGhpcy5leHBhbmRPbmNlKHRydWUpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBmdWxseSBleHBhbmRlZFxuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmICh0b2tlbi50cmVhdEFzUmVsYXgpIHtcbiAgICAgICAgICAvLyB0aGUgZXhwYW5zaW9uIG9mIFxcbm9leHBhbmQgaXMgdGhlIHRva2VuIGl0c2VsZlxuICAgICAgICAgIHRva2VuLm5vZXhwYW5kID0gZmFsc2U7XG4gICAgICAgICAgdG9rZW4udHJlYXRBc1JlbGF4ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXQucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfSAvLyBDb3VudCBhbGwgb2YgdGhlc2UgdG9rZW5zIGFzIGFkZGl0aW9uYWwgZXhwYW5zaW9ucywgdG8gcHJldmVudFxuICAgIC8vIGV4cG9uZW50aWFsIGJsb3d1cCBmcm9tIGxpbmVhcmx5IG1hbnkgXFxlZGVmJ3MuXG5cblxuICAgIHRoaXMuY291bnRFeHBhbnNpb24ob3V0cHV0Lmxlbmd0aCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuICAvKipcbiAgICogRnVsbHkgZXhwYW5kIHRoZSBnaXZlbiBtYWNybyBuYW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHN0cmluZyxcbiAgICogb3IgcmV0dXJuIGB1bmRlZmluZWRgIGlmIG5vIHN1Y2ggbWFjcm8gaXMgZGVmaW5lZC5cbiAgICovXG5cblxuICBleHBhbmRNYWNyb0FzVGV4dChuYW1lKSB7XG4gICAgdmFyIHRva2VucyA9IHRoaXMuZXhwYW5kTWFjcm8obmFtZSk7XG5cbiAgICBpZiAodG9rZW5zKSB7XG4gICAgICByZXR1cm4gdG9rZW5zLm1hcCh0b2tlbiA9PiB0b2tlbi50ZXh0KS5qb2luKFwiXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhwYW5kZWQgbWFjcm8gYXMgYSByZXZlcnNlZCBhcnJheSBvZiB0b2tlbnMgYW5kIGEgbWFjcm9cbiAgICogYXJndW1lbnQgY291bnQuICBPciByZXR1cm5zIGBudWxsYCBpZiBubyBzdWNoIG1hY3JvLlxuICAgKi9cblxuXG4gIF9nZXRFeHBhbnNpb24obmFtZSkge1xuICAgIHZhciBkZWZpbml0aW9uID0gdGhpcy5tYWNyb3MuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT0gbnVsbCkge1xuICAgICAgLy8gbWFpbmx5IGNoZWNraW5nIGZvciB1bmRlZmluZWQgaGVyZVxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSAvLyBJZiBhIHNpbmdsZSBjaGFyYWN0ZXIgaGFzIGFuIGFzc29jaWF0ZWQgY2F0Y29kZSBvdGhlciB0aGFuIDEzXG4gICAgLy8gKGFjdGl2ZSBjaGFyYWN0ZXIpLCB0aGVuIGRvbid0IGV4cGFuZCBpdC5cblxuXG4gICAgaWYgKG5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY2F0Y29kZSA9IHRoaXMubGV4ZXIuY2F0Y29kZXNbbmFtZV07XG5cbiAgICAgIGlmIChjYXRjb2RlICE9IG51bGwgJiYgY2F0Y29kZSAhPT0gMTMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBleHBhbnNpb24gPSB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gZGVmaW5pdGlvbih0aGlzKSA6IGRlZmluaXRpb247XG5cbiAgICBpZiAodHlwZW9mIGV4cGFuc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIG51bUFyZ3MgPSAwO1xuXG4gICAgICBpZiAoZXhwYW5zaW9uLmluZGV4T2YoXCIjXCIpICE9PSAtMSkge1xuICAgICAgICB2YXIgc3RyaXBwZWQgPSBleHBhbnNpb24ucmVwbGFjZSgvIyMvZywgXCJcIik7XG5cbiAgICAgICAgd2hpbGUgKHN0cmlwcGVkLmluZGV4T2YoXCIjXCIgKyAobnVtQXJncyArIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgICArK251bUFyZ3M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGJvZHlMZXhlciA9IG5ldyBMZXhlcihleHBhbnNpb24sIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcblxuICAgICAgd2hpbGUgKHRvay50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHRvayk7XG4gICAgICAgIHRvayA9IGJvZHlMZXhlci5sZXgoKTtcbiAgICAgIH1cblxuICAgICAgdG9rZW5zLnJldmVyc2UoKTsgLy8gdG8gZml0IGluIHdpdGggc3RhY2sgdXNpbmcgcHVzaCBhbmQgcG9wXG5cbiAgICAgIHZhciBleHBhbmRlZCA9IHtcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICBudW1BcmdzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV4cGFuZGVkO1xuICAgIH1cblxuICAgIHJldHVybiBleHBhbnNpb247XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBjdXJyZW50bHkgXCJkZWZpbmVkXCIgKGhhcyBzb21lXG4gICAqIGZ1bmN0aW9uYWxpdHkpLCBtZWFuaW5nIHRoYXQgaXQncyBhIG1hY3JvIChpbiB0aGUgY3VycmVudCBncm91cCksXG4gICAqIGEgZnVuY3Rpb24sIGEgc3ltYm9sLCBvciBvbmUgb2YgdGhlIHNwZWNpYWwgY29tbWFuZHMgbGlzdGVkIGluXG4gICAqIGBpbXBsaWNpdENvbW1hbmRzYC5cbiAgICovXG5cblxuICBpc0RlZmluZWQobmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgfHwgZnVuY3Rpb25zLmhhc093blByb3BlcnR5KG5hbWUpIHx8IHN5bWJvbHMubWF0aC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzeW1ib2xzLnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgfHwgaW1wbGljaXRDb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGV4cGFuZGFibGUuXG4gICAqL1xuXG5cbiAgaXNFeHBhbmRhYmxlKG5hbWUpIHtcbiAgICB2YXIgbWFjcm8gPSB0aGlzLm1hY3Jvcy5nZXQobmFtZSk7XG4gICAgcmV0dXJuIG1hY3JvICE9IG51bGwgPyB0eXBlb2YgbWFjcm8gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1hY3JvID09PSBcImZ1bmN0aW9uXCIgfHwgIW1hY3JvLnVuZXhwYW5kYWJsZSA6IGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhZnVuY3Rpb25zW25hbWVdLnByaW1pdGl2ZTtcbiAgfVxuXG59XG5cbi8vIEhlbHBlcnMgZm9yIFBhcnNlci5qcyBoYW5kbGluZyBvZiBVbmljb2RlIChzdWJ8c3VwZXIpc2NyaXB0IGNoYXJhY3RlcnMuXG52YXIgdW5pY29kZVN1YlJlZ0V4ID0gL15b4oKK4oKL4oKM4oKN4oKO4oKA4oKB4oKC4oKD4oKE4oKF4oKG4oKH4oKI4oKJ4oKQ4oKR4oKV4bWi4rG84oKW4oKX4oKY4oKZ4oKS4oKa4bWj4oKb4oKc4bWk4bWl4oKT4bWm4bWn4bWo4bWp4bWqXS87XG52YXIgdVN1YnNBbmRTdXBzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICfigoonOiAnKycsXG4gICfigosnOiAnLScsXG4gICfigownOiAnPScsXG4gICfigo0nOiAnKCcsXG4gICfigo4nOiAnKScsXG4gICfigoAnOiAnMCcsXG4gICfigoEnOiAnMScsXG4gICfigoInOiAnMicsXG4gICfigoMnOiAnMycsXG4gICfigoQnOiAnNCcsXG4gICfigoUnOiAnNScsXG4gICfigoYnOiAnNicsXG4gICfigocnOiAnNycsXG4gICfigognOiAnOCcsXG4gICfigoknOiAnOScsXG4gICdcXHUyMDkwJzogJ2EnLFxuICAnXFx1MjA5MSc6ICdlJyxcbiAgJ1xcdTIwOTUnOiAnaCcsXG4gICdcXHUxRDYyJzogJ2knLFxuICAnXFx1MkM3Qyc6ICdqJyxcbiAgJ1xcdTIwOTYnOiAnaycsXG4gICdcXHUyMDk3JzogJ2wnLFxuICAnXFx1MjA5OCc6ICdtJyxcbiAgJ1xcdTIwOTknOiAnbicsXG4gICdcXHUyMDkyJzogJ28nLFxuICAnXFx1MjA5QSc6ICdwJyxcbiAgJ1xcdTFENjMnOiAncicsXG4gICdcXHUyMDlCJzogJ3MnLFxuICAnXFx1MjA5Qyc6ICd0JyxcbiAgJ1xcdTFENjQnOiAndScsXG4gICdcXHUxRDY1JzogJ3YnLFxuICAnXFx1MjA5Myc6ICd4JyxcbiAgJ1xcdTFENjYnOiAnzrInLFxuICAnXFx1MUQ2Nyc6ICfOsycsXG4gICdcXHUxRDY4JzogJ8+BJyxcbiAgJ1xcdTFENjknOiAnXFx1MDNkNScsXG4gICdcXHUxRDZBJzogJ8+HJyxcbiAgJ+KBuic6ICcrJyxcbiAgJ+KBuyc6ICctJyxcbiAgJ+KBvCc6ICc9JyxcbiAgJ+KBvSc6ICcoJyxcbiAgJ+KBvic6ICcpJyxcbiAgJ+KBsCc6ICcwJyxcbiAgJ8K5JzogJzEnLFxuICAnwrInOiAnMicsXG4gICfCsyc6ICczJyxcbiAgJ+KBtCc6ICc0JyxcbiAgJ+KBtSc6ICc1JyxcbiAgJ+KBtic6ICc2JyxcbiAgJ+KBtyc6ICc3JyxcbiAgJ+KBuCc6ICc4JyxcbiAgJ+KBuSc6ICc5JyxcbiAgJ1xcdTFEMkMnOiAnQScsXG4gICdcXHUxRDJFJzogJ0InLFxuICAnXFx1MUQzMCc6ICdEJyxcbiAgJ1xcdTFEMzEnOiAnRScsXG4gICdcXHUxRDMzJzogJ0cnLFxuICAnXFx1MUQzNCc6ICdIJyxcbiAgJ1xcdTFEMzUnOiAnSScsXG4gICdcXHUxRDM2JzogJ0onLFxuICAnXFx1MUQzNyc6ICdLJyxcbiAgJ1xcdTFEMzgnOiAnTCcsXG4gICdcXHUxRDM5JzogJ00nLFxuICAnXFx1MUQzQSc6ICdOJyxcbiAgJ1xcdTFEM0MnOiAnTycsXG4gICdcXHUxRDNFJzogJ1AnLFxuICAnXFx1MUQzRic6ICdSJyxcbiAgJ1xcdTFENDAnOiAnVCcsXG4gICdcXHUxRDQxJzogJ1UnLFxuICAnXFx1MkM3RCc6ICdWJyxcbiAgJ1xcdTFENDInOiAnVycsXG4gICdcXHUxRDQzJzogJ2EnLFxuICAnXFx1MUQ0Nyc6ICdiJyxcbiAgJ1xcdTFEOUMnOiAnYycsXG4gICdcXHUxRDQ4JzogJ2QnLFxuICAnXFx1MUQ0OSc6ICdlJyxcbiAgJ1xcdTFEQTAnOiAnZicsXG4gICdcXHUxRDREJzogJ2cnLFxuICAnXFx1MDJCMCc6ICdoJyxcbiAgJ1xcdTIwNzEnOiAnaScsXG4gICdcXHUwMkIyJzogJ2onLFxuICAnXFx1MUQ0Ric6ICdrJyxcbiAgJ1xcdTAyRTEnOiAnbCcsXG4gICdcXHUxRDUwJzogJ20nLFxuICAnXFx1MjA3Ric6ICduJyxcbiAgJ1xcdTFENTInOiAnbycsXG4gICdcXHUxRDU2JzogJ3AnLFxuICAnXFx1MDJCMyc6ICdyJyxcbiAgJ1xcdTAyRTInOiAncycsXG4gICdcXHUxRDU3JzogJ3QnLFxuICAnXFx1MUQ1OCc6ICd1JyxcbiAgJ1xcdTFENUInOiAndicsXG4gICdcXHUwMkI3JzogJ3cnLFxuICAnXFx1MDJFMyc6ICd4JyxcbiAgJ1xcdTAyQjgnOiAneScsXG4gICdcXHUxREJCJzogJ3onLFxuICAnXFx1MUQ1RCc6ICfOsicsXG4gICdcXHUxRDVFJzogJ86zJyxcbiAgJ1xcdTFENUYnOiAnzrQnLFxuICAnXFx1MUQ2MCc6ICdcXHUwM2Q1JyxcbiAgJ1xcdTFENjEnOiAnz4cnLFxuICAnXFx1MURCRic6ICfOuCdcbn0pO1xuXG4vKiBlc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOjAgKi9cblxudmFyIHVuaWNvZGVBY2NlbnRzID0ge1xuICBcIsyBXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcJ1wiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxhY3V0ZVwiXG4gIH0sXG4gIFwizIBcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxgXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGdyYXZlXCJcbiAgfSxcbiAgXCLMiFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXFxcXCJcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcZGRvdFwiXG4gIH0sXG4gIFwizINcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFx+XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXHRpbGRlXCJcbiAgfSxcbiAgXCLMhFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXD1cIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYmFyXCJcbiAgfSxcbiAgXCLMhlwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXHVcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYnJldmVcIlxuICB9LFxuICBcIsyMXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcdlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxjaGVja1wiXG4gIH0sXG4gIFwizIJcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxeXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGhhdFwiXG4gIH0sXG4gIFwizIdcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFwuXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGRvdFwiXG4gIH0sXG4gIFwizIpcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxyXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXG1hdGhyaW5nXCJcbiAgfSxcbiAgXCLMi1wiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXEhcIlxuICB9LFxuICBcIsynXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcY1wiXG4gIH1cbn07XG52YXIgdW5pY29kZVN5bWJvbHMgPSB7XG4gIFwiw6FcIjogXCJhzIFcIixcbiAgXCLDoFwiOiBcImHMgFwiLFxuICBcIsOkXCI6IFwiYcyIXCIsXG4gIFwix59cIjogXCJhzIjMhFwiLFxuICBcIsOjXCI6IFwiYcyDXCIsXG4gIFwixIFcIjogXCJhzIRcIixcbiAgXCLEg1wiOiBcImHMhlwiLFxuICBcIuG6r1wiOiBcImHMhsyBXCIsXG4gIFwi4bqxXCI6IFwiYcyGzIBcIixcbiAgXCLhurVcIjogXCJhzIbMg1wiLFxuICBcIseOXCI6IFwiYcyMXCIsXG4gIFwiw6JcIjogXCJhzIJcIixcbiAgXCLhuqVcIjogXCJhzILMgVwiLFxuICBcIuG6p1wiOiBcImHMgsyAXCIsXG4gIFwi4bqrXCI6IFwiYcyCzINcIixcbiAgXCLIp1wiOiBcImHMh1wiLFxuICBcIsehXCI6IFwiYcyHzIRcIixcbiAgXCLDpVwiOiBcImHMilwiLFxuICBcIse7XCI6IFwiYcyKzIFcIixcbiAgXCLhuINcIjogXCJizIdcIixcbiAgXCLEh1wiOiBcImPMgVwiLFxuICBcIuG4iVwiOiBcImPMp8yBXCIsXG4gIFwixI1cIjogXCJjzIxcIixcbiAgXCLEiVwiOiBcImPMglwiLFxuICBcIsSLXCI6IFwiY8yHXCIsXG4gIFwiw6dcIjogXCJjzKdcIixcbiAgXCLEj1wiOiBcImTMjFwiLFxuICBcIuG4i1wiOiBcImTMh1wiLFxuICBcIuG4kVwiOiBcImTMp1wiLFxuICBcIsOpXCI6IFwiZcyBXCIsXG4gIFwiw6hcIjogXCJlzIBcIixcbiAgXCLDq1wiOiBcImXMiFwiLFxuICBcIuG6vVwiOiBcImXMg1wiLFxuICBcIsSTXCI6IFwiZcyEXCIsXG4gIFwi4biXXCI6IFwiZcyEzIFcIixcbiAgXCLhuJVcIjogXCJlzITMgFwiLFxuICBcIsSVXCI6IFwiZcyGXCIsXG4gIFwi4bidXCI6IFwiZcynzIZcIixcbiAgXCLEm1wiOiBcImXMjFwiLFxuICBcIsOqXCI6IFwiZcyCXCIsXG4gIFwi4bq/XCI6IFwiZcyCzIFcIixcbiAgXCLhu4FcIjogXCJlzILMgFwiLFxuICBcIuG7hVwiOiBcImXMgsyDXCIsXG4gIFwixJdcIjogXCJlzIdcIixcbiAgXCLIqVwiOiBcImXMp1wiLFxuICBcIuG4n1wiOiBcImbMh1wiLFxuICBcIse1XCI6IFwiZ8yBXCIsXG4gIFwi4bihXCI6IFwiZ8yEXCIsXG4gIFwixJ9cIjogXCJnzIZcIixcbiAgXCLHp1wiOiBcImfMjFwiLFxuICBcIsSdXCI6IFwiZ8yCXCIsXG4gIFwixKFcIjogXCJnzIdcIixcbiAgXCLEo1wiOiBcImfMp1wiLFxuICBcIuG4p1wiOiBcImjMiFwiLFxuICBcIsifXCI6IFwiaMyMXCIsXG4gIFwixKVcIjogXCJozIJcIixcbiAgXCLhuKNcIjogXCJozIdcIixcbiAgXCLhuKlcIjogXCJozKdcIixcbiAgXCLDrVwiOiBcImnMgVwiLFxuICBcIsOsXCI6IFwiacyAXCIsXG4gIFwiw69cIjogXCJpzIhcIixcbiAgXCLhuK9cIjogXCJpzIjMgVwiLFxuICBcIsSpXCI6IFwiacyDXCIsXG4gIFwixKtcIjogXCJpzIRcIixcbiAgXCLErVwiOiBcImnMhlwiLFxuICBcIseQXCI6IFwiacyMXCIsXG4gIFwiw65cIjogXCJpzIJcIixcbiAgXCLHsFwiOiBcImrMjFwiLFxuICBcIsS1XCI6IFwiasyCXCIsXG4gIFwi4bixXCI6IFwia8yBXCIsXG4gIFwix6lcIjogXCJrzIxcIixcbiAgXCLEt1wiOiBcImvMp1wiLFxuICBcIsS6XCI6IFwibMyBXCIsXG4gIFwixL5cIjogXCJszIxcIixcbiAgXCLEvFwiOiBcImzMp1wiLFxuICBcIuG4v1wiOiBcIm3MgVwiLFxuICBcIuG5gVwiOiBcIm3Mh1wiLFxuICBcIsWEXCI6IFwibsyBXCIsXG4gIFwix7lcIjogXCJuzIBcIixcbiAgXCLDsVwiOiBcIm7Mg1wiLFxuICBcIsWIXCI6IFwibsyMXCIsXG4gIFwi4bmFXCI6IFwibsyHXCIsXG4gIFwixYZcIjogXCJuzKdcIixcbiAgXCLDs1wiOiBcIm/MgVwiLFxuICBcIsOyXCI6IFwib8yAXCIsXG4gIFwiw7ZcIjogXCJvzIhcIixcbiAgXCLIq1wiOiBcIm/MiMyEXCIsXG4gIFwiw7VcIjogXCJvzINcIixcbiAgXCLhuY1cIjogXCJvzIPMgVwiLFxuICBcIuG5j1wiOiBcIm/Mg8yIXCIsXG4gIFwiyK1cIjogXCJvzIPMhFwiLFxuICBcIsWNXCI6IFwib8yEXCIsXG4gIFwi4bmTXCI6IFwib8yEzIFcIixcbiAgXCLhuZFcIjogXCJvzITMgFwiLFxuICBcIsWPXCI6IFwib8yGXCIsXG4gIFwix5JcIjogXCJvzIxcIixcbiAgXCLDtFwiOiBcIm/MglwiLFxuICBcIuG7kVwiOiBcIm/MgsyBXCIsXG4gIFwi4buTXCI6IFwib8yCzIBcIixcbiAgXCLhu5dcIjogXCJvzILMg1wiLFxuICBcIsivXCI6IFwib8yHXCIsXG4gIFwiyLFcIjogXCJvzIfMhFwiLFxuICBcIsWRXCI6IFwib8yLXCIsXG4gIFwi4bmVXCI6IFwicMyBXCIsXG4gIFwi4bmXXCI6IFwicMyHXCIsXG4gIFwixZVcIjogXCJyzIFcIixcbiAgXCLFmVwiOiBcInLMjFwiLFxuICBcIuG5mVwiOiBcInLMh1wiLFxuICBcIsWXXCI6IFwicsynXCIsXG4gIFwixZtcIjogXCJzzIFcIixcbiAgXCLhuaVcIjogXCJzzIHMh1wiLFxuICBcIsWhXCI6IFwic8yMXCIsXG4gIFwi4bmnXCI6IFwic8yMzIdcIixcbiAgXCLFnVwiOiBcInPMglwiLFxuICBcIuG5oVwiOiBcInPMh1wiLFxuICBcIsWfXCI6IFwic8ynXCIsXG4gIFwi4bqXXCI6IFwidMyIXCIsXG4gIFwixaVcIjogXCJ0zIxcIixcbiAgXCLhuatcIjogXCJ0zIdcIixcbiAgXCLFo1wiOiBcInTMp1wiLFxuICBcIsO6XCI6IFwidcyBXCIsXG4gIFwiw7lcIjogXCJ1zIBcIixcbiAgXCLDvFwiOiBcInXMiFwiLFxuICBcIseYXCI6IFwidcyIzIFcIixcbiAgXCLHnFwiOiBcInXMiMyAXCIsXG4gIFwix5ZcIjogXCJ1zIjMhFwiLFxuICBcIseaXCI6IFwidcyIzIxcIixcbiAgXCLFqVwiOiBcInXMg1wiLFxuICBcIuG5uVwiOiBcInXMg8yBXCIsXG4gIFwixatcIjogXCJ1zIRcIixcbiAgXCLhubtcIjogXCJ1zITMiFwiLFxuICBcIsWtXCI6IFwidcyGXCIsXG4gIFwix5RcIjogXCJ1zIxcIixcbiAgXCLDu1wiOiBcInXMglwiLFxuICBcIsWvXCI6IFwidcyKXCIsXG4gIFwixbFcIjogXCJ1zItcIixcbiAgXCLhub1cIjogXCJ2zINcIixcbiAgXCLhuoNcIjogXCJ3zIFcIixcbiAgXCLhuoFcIjogXCJ3zIBcIixcbiAgXCLhuoVcIjogXCJ3zIhcIixcbiAgXCLFtVwiOiBcInfMglwiLFxuICBcIuG6h1wiOiBcInfMh1wiLFxuICBcIuG6mFwiOiBcInfMilwiLFxuICBcIuG6jVwiOiBcInjMiFwiLFxuICBcIuG6i1wiOiBcInjMh1wiLFxuICBcIsO9XCI6IFwiecyBXCIsXG4gIFwi4buzXCI6IFwiecyAXCIsXG4gIFwiw79cIjogXCJ5zIhcIixcbiAgXCLhu7lcIjogXCJ5zINcIixcbiAgXCLIs1wiOiBcInnMhFwiLFxuICBcIsW3XCI6IFwiecyCXCIsXG4gIFwi4bqPXCI6IFwiecyHXCIsXG4gIFwi4bqZXCI6IFwiecyKXCIsXG4gIFwixbpcIjogXCJ6zIFcIixcbiAgXCLFvlwiOiBcInrMjFwiLFxuICBcIuG6kVwiOiBcInrMglwiLFxuICBcIsW8XCI6IFwiesyHXCIsXG4gIFwiw4FcIjogXCJBzIFcIixcbiAgXCLDgFwiOiBcIkHMgFwiLFxuICBcIsOEXCI6IFwiQcyIXCIsXG4gIFwix55cIjogXCJBzIjMhFwiLFxuICBcIsODXCI6IFwiQcyDXCIsXG4gIFwixIBcIjogXCJBzIRcIixcbiAgXCLEglwiOiBcIkHMhlwiLFxuICBcIuG6rlwiOiBcIkHMhsyBXCIsXG4gIFwi4bqwXCI6IFwiQcyGzIBcIixcbiAgXCLhurRcIjogXCJBzIbMg1wiLFxuICBcIseNXCI6IFwiQcyMXCIsXG4gIFwiw4JcIjogXCJBzIJcIixcbiAgXCLhuqRcIjogXCJBzILMgVwiLFxuICBcIuG6plwiOiBcIkHMgsyAXCIsXG4gIFwi4bqqXCI6IFwiQcyCzINcIixcbiAgXCLIplwiOiBcIkHMh1wiLFxuICBcIsegXCI6IFwiQcyHzIRcIixcbiAgXCLDhVwiOiBcIkHMilwiLFxuICBcIse6XCI6IFwiQcyKzIFcIixcbiAgXCLhuIJcIjogXCJCzIdcIixcbiAgXCLEhlwiOiBcIkPMgVwiLFxuICBcIuG4iFwiOiBcIkPMp8yBXCIsXG4gIFwixIxcIjogXCJDzIxcIixcbiAgXCLEiFwiOiBcIkPMglwiLFxuICBcIsSKXCI6IFwiQ8yHXCIsXG4gIFwiw4dcIjogXCJDzKdcIixcbiAgXCLEjlwiOiBcIkTMjFwiLFxuICBcIuG4ilwiOiBcIkTMh1wiLFxuICBcIuG4kFwiOiBcIkTMp1wiLFxuICBcIsOJXCI6IFwiRcyBXCIsXG4gIFwiw4hcIjogXCJFzIBcIixcbiAgXCLDi1wiOiBcIkXMiFwiLFxuICBcIuG6vFwiOiBcIkXMg1wiLFxuICBcIsSSXCI6IFwiRcyEXCIsXG4gIFwi4biWXCI6IFwiRcyEzIFcIixcbiAgXCLhuJRcIjogXCJFzITMgFwiLFxuICBcIsSUXCI6IFwiRcyGXCIsXG4gIFwi4bicXCI6IFwiRcynzIZcIixcbiAgXCLEmlwiOiBcIkXMjFwiLFxuICBcIsOKXCI6IFwiRcyCXCIsXG4gIFwi4bq+XCI6IFwiRcyCzIFcIixcbiAgXCLhu4BcIjogXCJFzILMgFwiLFxuICBcIuG7hFwiOiBcIkXMgsyDXCIsXG4gIFwixJZcIjogXCJFzIdcIixcbiAgXCLIqFwiOiBcIkXMp1wiLFxuICBcIuG4nlwiOiBcIkbMh1wiLFxuICBcIse0XCI6IFwiR8yBXCIsXG4gIFwi4bigXCI6IFwiR8yEXCIsXG4gIFwixJ5cIjogXCJHzIZcIixcbiAgXCLHplwiOiBcIkfMjFwiLFxuICBcIsScXCI6IFwiR8yCXCIsXG4gIFwixKBcIjogXCJHzIdcIixcbiAgXCLEolwiOiBcIkfMp1wiLFxuICBcIuG4plwiOiBcIkjMiFwiLFxuICBcIsieXCI6IFwiSMyMXCIsXG4gIFwixKRcIjogXCJIzIJcIixcbiAgXCLhuKJcIjogXCJIzIdcIixcbiAgXCLhuKhcIjogXCJIzKdcIixcbiAgXCLDjVwiOiBcIknMgVwiLFxuICBcIsOMXCI6IFwiScyAXCIsXG4gIFwiw49cIjogXCJJzIhcIixcbiAgXCLhuK5cIjogXCJJzIjMgVwiLFxuICBcIsSoXCI6IFwiScyDXCIsXG4gIFwixKpcIjogXCJJzIRcIixcbiAgXCLErFwiOiBcIknMhlwiLFxuICBcIsePXCI6IFwiScyMXCIsXG4gIFwiw45cIjogXCJJzIJcIixcbiAgXCLEsFwiOiBcIknMh1wiLFxuICBcIsS0XCI6IFwiSsyCXCIsXG4gIFwi4biwXCI6IFwiS8yBXCIsXG4gIFwix6hcIjogXCJLzIxcIixcbiAgXCLEtlwiOiBcIkvMp1wiLFxuICBcIsS5XCI6IFwiTMyBXCIsXG4gIFwixL1cIjogXCJMzIxcIixcbiAgXCLEu1wiOiBcIkzMp1wiLFxuICBcIuG4vlwiOiBcIk3MgVwiLFxuICBcIuG5gFwiOiBcIk3Mh1wiLFxuICBcIsWDXCI6IFwiTsyBXCIsXG4gIFwix7hcIjogXCJOzIBcIixcbiAgXCLDkVwiOiBcIk7Mg1wiLFxuICBcIsWHXCI6IFwiTsyMXCIsXG4gIFwi4bmEXCI6IFwiTsyHXCIsXG4gIFwixYVcIjogXCJOzKdcIixcbiAgXCLDk1wiOiBcIk/MgVwiLFxuICBcIsOSXCI6IFwiT8yAXCIsXG4gIFwiw5ZcIjogXCJPzIhcIixcbiAgXCLIqlwiOiBcIk/MiMyEXCIsXG4gIFwiw5VcIjogXCJPzINcIixcbiAgXCLhuYxcIjogXCJPzIPMgVwiLFxuICBcIuG5jlwiOiBcIk/Mg8yIXCIsXG4gIFwiyKxcIjogXCJPzIPMhFwiLFxuICBcIsWMXCI6IFwiT8yEXCIsXG4gIFwi4bmSXCI6IFwiT8yEzIFcIixcbiAgXCLhuZBcIjogXCJPzITMgFwiLFxuICBcIsWOXCI6IFwiT8yGXCIsXG4gIFwix5FcIjogXCJPzIxcIixcbiAgXCLDlFwiOiBcIk/MglwiLFxuICBcIuG7kFwiOiBcIk/MgsyBXCIsXG4gIFwi4buSXCI6IFwiT8yCzIBcIixcbiAgXCLhu5ZcIjogXCJPzILMg1wiLFxuICBcIsiuXCI6IFwiT8yHXCIsXG4gIFwiyLBcIjogXCJPzIfMhFwiLFxuICBcIsWQXCI6IFwiT8yLXCIsXG4gIFwi4bmUXCI6IFwiUMyBXCIsXG4gIFwi4bmWXCI6IFwiUMyHXCIsXG4gIFwixZRcIjogXCJSzIFcIixcbiAgXCLFmFwiOiBcIlLMjFwiLFxuICBcIuG5mFwiOiBcIlLMh1wiLFxuICBcIsWWXCI6IFwiUsynXCIsXG4gIFwixZpcIjogXCJTzIFcIixcbiAgXCLhuaRcIjogXCJTzIHMh1wiLFxuICBcIsWgXCI6IFwiU8yMXCIsXG4gIFwi4bmmXCI6IFwiU8yMzIdcIixcbiAgXCLFnFwiOiBcIlPMglwiLFxuICBcIuG5oFwiOiBcIlPMh1wiLFxuICBcIsWeXCI6IFwiU8ynXCIsXG4gIFwixaRcIjogXCJUzIxcIixcbiAgXCLhuapcIjogXCJUzIdcIixcbiAgXCLFolwiOiBcIlTMp1wiLFxuICBcIsOaXCI6IFwiVcyBXCIsXG4gIFwiw5lcIjogXCJVzIBcIixcbiAgXCLDnFwiOiBcIlXMiFwiLFxuICBcIseXXCI6IFwiVcyIzIFcIixcbiAgXCLHm1wiOiBcIlXMiMyAXCIsXG4gIFwix5VcIjogXCJVzIjMhFwiLFxuICBcIseZXCI6IFwiVcyIzIxcIixcbiAgXCLFqFwiOiBcIlXMg1wiLFxuICBcIuG5uFwiOiBcIlXMg8yBXCIsXG4gIFwixapcIjogXCJVzIRcIixcbiAgXCLhubpcIjogXCJVzITMiFwiLFxuICBcIsWsXCI6IFwiVcyGXCIsXG4gIFwix5NcIjogXCJVzIxcIixcbiAgXCLDm1wiOiBcIlXMglwiLFxuICBcIsWuXCI6IFwiVcyKXCIsXG4gIFwixbBcIjogXCJVzItcIixcbiAgXCLhubxcIjogXCJWzINcIixcbiAgXCLhuoJcIjogXCJXzIFcIixcbiAgXCLhuoBcIjogXCJXzIBcIixcbiAgXCLhuoRcIjogXCJXzIhcIixcbiAgXCLFtFwiOiBcIlfMglwiLFxuICBcIuG6hlwiOiBcIlfMh1wiLFxuICBcIuG6jFwiOiBcIljMiFwiLFxuICBcIuG6ilwiOiBcIljMh1wiLFxuICBcIsOdXCI6IFwiWcyBXCIsXG4gIFwi4buyXCI6IFwiWcyAXCIsXG4gIFwixbhcIjogXCJZzIhcIixcbiAgXCLhu7hcIjogXCJZzINcIixcbiAgXCLIslwiOiBcIlnMhFwiLFxuICBcIsW2XCI6IFwiWcyCXCIsXG4gIFwi4bqOXCI6IFwiWcyHXCIsXG4gIFwixblcIjogXCJazIFcIixcbiAgXCLFvVwiOiBcIlrMjFwiLFxuICBcIuG6kFwiOiBcIlrMglwiLFxuICBcIsW7XCI6IFwiWsyHXCIsXG4gIFwizqxcIjogXCLOscyBXCIsXG4gIFwi4b2wXCI6IFwizrHMgFwiLFxuICBcIuG+sVwiOiBcIs6xzIRcIixcbiAgXCLhvrBcIjogXCLOscyGXCIsXG4gIFwizq1cIjogXCLOtcyBXCIsXG4gIFwi4b2yXCI6IFwizrXMgFwiLFxuICBcIs6uXCI6IFwizrfMgVwiLFxuICBcIuG9tFwiOiBcIs63zIBcIixcbiAgXCLOr1wiOiBcIs65zIFcIixcbiAgXCLhvbZcIjogXCLOucyAXCIsXG4gIFwiz4pcIjogXCLOucyIXCIsXG4gIFwizpBcIjogXCLOucyIzIFcIixcbiAgXCLhv5JcIjogXCLOucyIzIBcIixcbiAgXCLhv5FcIjogXCLOucyEXCIsXG4gIFwi4b+QXCI6IFwizrnMhlwiLFxuICBcIs+MXCI6IFwizr/MgVwiLFxuICBcIuG9uFwiOiBcIs6/zIBcIixcbiAgXCLPjVwiOiBcIs+FzIFcIixcbiAgXCLhvbpcIjogXCLPhcyAXCIsXG4gIFwiz4tcIjogXCLPhcyIXCIsXG4gIFwizrBcIjogXCLPhcyIzIFcIixcbiAgXCLhv6JcIjogXCLPhcyIzIBcIixcbiAgXCLhv6FcIjogXCLPhcyEXCIsXG4gIFwi4b+gXCI6IFwiz4XMhlwiLFxuICBcIs+OXCI6IFwiz4nMgVwiLFxuICBcIuG9vFwiOiBcIs+JzIBcIixcbiAgXCLOjlwiOiBcIs6lzIFcIixcbiAgXCLhv6pcIjogXCLOpcyAXCIsXG4gIFwizqtcIjogXCLOpcyIXCIsXG4gIFwi4b+pXCI6IFwizqXMhFwiLFxuICBcIuG/qFwiOiBcIs6lzIZcIixcbiAgXCLOj1wiOiBcIs6pzIFcIixcbiAgXCLhv7pcIjogXCLOqcyAXCJcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJzZXIgdXNlZCB0byBwYXJzZSBvdXQgYSBUZVggZXhwcmVzc2lvbiBmcm9tIHRoZVxuICogaW5wdXQuIFNpbmNlIFRlWCBpc24ndCBjb250ZXh0LWZyZWUsIHN0YW5kYXJkIHBhcnNlcnMgZG9uJ3Qgd29yayBwYXJ0aWN1bGFybHlcbiAqIHdlbGwuXG4gKlxuICogVGhlIHN0cmF0ZWd5IG9mIHRoaXMgcGFyc2VyIGlzIGFzIHN1Y2g6XG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zICh0aGUgYC5wYXJzZS4uLmAgb25lcykgdGFrZSBhIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50XG4gKiBwYXJzZSBzdHJpbmcgdG8gcGFyc2UgdG9rZW5zIGZyb20uIFRoZSBsZXhlciAoZm91bmQgaW4gTGV4ZXIuanMsIHN0b3JlZCBhdFxuICogdGhpcy5ndWxsZXQubGV4ZXIpIGFsc28gc3VwcG9ydHMgcHVsbGluZyBvdXQgdG9rZW5zIGF0IGFyYml0cmFyeSBwbGFjZXMuIFdoZW5cbiAqIGluZGl2aWR1YWwgdG9rZW5zIGFyZSBuZWVkZWQgYXQgYSBwb3NpdGlvbiwgdGhlIGxleGVyIGlzIGNhbGxlZCB0byBwdWxsIG91dCBhXG4gKiB0b2tlbiwgd2hpY2ggaXMgdGhlbiB1c2VkLlxuICpcbiAqIFRoZSBwYXJzZXIgaGFzIGEgcHJvcGVydHkgY2FsbGVkIFwibW9kZVwiIGluZGljYXRpbmcgdGhlIG1vZGUgdGhhdFxuICogdGhlIHBhcnNlciBpcyBjdXJyZW50bHkgaW4uIEN1cnJlbnRseSBpdCBoYXMgdG8gYmUgb25lIG9mIFwibWF0aFwiIG9yXG4gKiBcInRleHRcIiwgd2hpY2ggZGVub3RlcyB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGEgbWF0aC15XG4gKiBvbmUgb3IgYSB0ZXh0LXkgb25lIChlLmcuIGluc2lkZSBcXHRleHQpLiBDdXJyZW50bHksIHRoaXMgc2VydmVzIHRvXG4gKiBsaW1pdCB0aGUgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSB1c2VkIGluIHRleHQgbW9kZS5cbiAqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbnMgdGhlbiByZXR1cm4gYW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VmdWwgZGF0YSB0aGF0XG4gKiB3YXMgcGFyc2VkIGF0IGl0cyBnaXZlbiBwb2ludCwgYW5kIGEgbmV3IHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHBhcnNlZFxuICogZGF0YS4gVGhlIG1haW4gZnVuY3Rpb25zIGNhbiBjYWxsIGVhY2ggb3RoZXIgYW5kIGNvbnRpbnVlIHRoZSBwYXJzaW5nIGJ5XG4gKiB1c2luZyB0aGUgcmV0dXJuZWQgcG9zaXRpb24gYXMgYSBuZXcgc3RhcnRpbmcgcG9pbnQuXG4gKlxuICogVGhlcmUgYXJlIGFsc28gZXh0cmEgYC5oYW5kbGUuLi5gIGZ1bmN0aW9ucywgd2hpY2ggcHVsbCBvdXQgc29tZSByZXVzZWRcbiAqIGZ1bmN0aW9uYWxpdHkgaW50byBzZWxmLWNvbnRhaW5lZCBmdW5jdGlvbnMuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyByZXR1cm4gUGFyc2VOb2Rlcy5cbiAqL1xuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IoaW5wdXQsIHNldHRpbmdzKSB7XG4gICAgdGhpcy5tb2RlID0gdm9pZCAwO1xuICAgIHRoaXMuZ3VsbGV0ID0gdm9pZCAwO1xuICAgIHRoaXMuc2V0dGluZ3MgPSB2b2lkIDA7XG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHRUb2tlbiA9IHZvaWQgMDtcbiAgICAvLyBTdGFydCBpbiBtYXRoIG1vZGVcbiAgICB0aGlzLm1vZGUgPSBcIm1hdGhcIjsgLy8gQ3JlYXRlIGEgbmV3IG1hY3JvIGV4cGFuZGVyIChndWxsZXQpIGFuZCAoaW5kaXJlY3RseSB2aWEgdGhhdCkgYWxzbyBhXG4gICAgLy8gbmV3IGxleGVyIChtb3V0aCkgZm9yIHRoaXMgcGFyc2VyIChzdG9tYWNoLCBpbiB0aGUgbGFuZ3VhZ2Ugb2YgVGVYKVxuXG4gICAgdGhpcy5ndWxsZXQgPSBuZXcgTWFjcm9FeHBhbmRlcihpbnB1dCwgc2V0dGluZ3MsIHRoaXMubW9kZSk7IC8vIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgdXNlIGluIHBhcnNpbmdcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgLy8gQ291bnQgbGVmdHJpZ2h0IGRlcHRoIChmb3IgXFxtaWRkbGUgZXJyb3JzKVxuXG4gICAgdGhpcy5sZWZ0cmlnaHREZXB0aCA9IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBhIHJlc3VsdCB0byBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCB0eXBlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS5cbiAgICovXG5cblxuICBleHBlY3QodGV4dCwgY29uc3VtZSkge1xuICAgIGlmIChjb25zdW1lID09PSB2b2lkIDApIHtcbiAgICAgIGNvbnN1bWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZldGNoKCkudGV4dCAhPT0gdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCAnXCIgKyB0ZXh0ICsgXCInLCBnb3QgJ1wiICsgdGhpcy5mZXRjaCgpLnRleHQgKyBcIidcIiwgdGhpcy5mZXRjaCgpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uc3VtZSkge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkcyB0aGUgY3VycmVudCBsb29rYWhlYWQgdG9rZW4sIGNvbnNpZGVyaW5nIGl0IGNvbnN1bWVkLlxuICAgKi9cblxuXG4gIGNvbnN1bWUoKSB7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLCBvciBpZiB0aGVyZSBpc24ndCBvbmUgKGF0IHRoZVxuICAgKiBiZWdpbm5pbmcsIG9yIGlmIHRoZSBwcmV2aW91cyBsb29rYWhlYWQgdG9rZW4gd2FzIGNvbnN1bWUoKWQpLFxuICAgKiBmZXRjaCB0aGUgbmV4dCB0b2tlbiBhcyB0aGUgbmV3IGxvb2thaGVhZCB0b2tlbiBhbmQgcmV0dXJuIGl0LlxuICAgKi9cblxuXG4gIGZldGNoKCkge1xuICAgIGlmICh0aGlzLm5leHRUb2tlbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRUb2tlbiA9IHRoaXMuZ3VsbGV0LmV4cGFuZE5leHRUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5leHRUb2tlbjtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuXG5cbiAgc3dpdGNoTW9kZShuZXdNb2RlKSB7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcbiAgICB0aGlzLmd1bGxldC5zd2l0Y2hNb2RlKG5ld01vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBNYWluIHBhcnNpbmcgZnVuY3Rpb24sIHdoaWNoIHBhcnNlcyBhbiBlbnRpcmUgaW5wdXQuXG4gICAqL1xuXG5cbiAgcGFyc2UoKSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwKSB7XG4gICAgICAvLyBDcmVhdGUgYSBncm91cCBuYW1lc3BhY2UgZm9yIHRoZSBtYXRoIGV4cHJlc3Npb24uXG4gICAgICAvLyAoTGFUZVggY3JlYXRlcyBhIG5ldyBncm91cCBmb3IgZXZlcnkgJC4uLiQsICQkLi4uJCQsIFxcWy4uLlxcXS4pXG4gICAgICB0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7XG4gICAgfSAvLyBVc2Ugb2xkIFxcY29sb3IgYmVoYXZpb3IgKHNhbWUgYXMgTGFUZVgncyBcXHRleHRjb2xvcikgaWYgcmVxdWVzdGVkLlxuICAgIC8vIFdlIGRvIHRoaXMgd2l0aGluIHRoZSBncm91cCBmb3IgdGhlIG1hdGggZXhwcmVzc2lvbiwgc28gaXQgZG9lc24ndFxuICAgIC8vIHBvbGx1dGUgc2V0dGluZ3MubWFjcm9zLlxuXG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5jb2xvcklzVGV4dENvbG9yKSB7XG4gICAgICB0aGlzLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNvbG9yXCIsIFwiXFxcXHRleHRjb2xvclwiKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBpbnB1dFxuICAgICAgdmFyIHBhcnNlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UpOyAvLyBJZiB3ZSBzdWNjZWVkZWQsIG1ha2Ugc3VyZSB0aGVyZSdzIGFuIEVPRiBhdCB0aGUgZW5kXG5cbiAgICAgIHRoaXMuZXhwZWN0KFwiRU9GXCIpOyAvLyBFbmQgdGhlIGdyb3VwIG5hbWVzcGFjZSBmb3IgdGhlIGV4cHJlc3Npb25cblxuICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwKSB7XG4gICAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZTsgLy8gQ2xvc2UgYW55IGxlZnRvdmVyIGdyb3VwcyBpbiBjYXNlIG9mIGEgcGFyc2UgZXJyb3IuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwcygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRnVsbHkgcGFyc2UgYSBzZXBhcmF0ZSBzZXF1ZW5jZSBvZiB0b2tlbnMgYXMgYSBzZXBhcmF0ZSBqb2IuXG4gICAqIFRva2VucyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHJldmVyc2Ugb3JkZXIsIGFzIGluIGEgTWFjcm9EZWZpbml0aW9uLlxuICAgKi9cblxuXG4gIHN1YnBhcnNlKHRva2Vucykge1xuICAgIC8vIFNhdmUgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBqb2IuXG4gICAgdmFyIG9sZFRva2VuID0gdGhpcy5uZXh0VG9rZW47XG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFJ1biB0aGUgbmV3IGpvYiwgdGVybWluYXRpbmcgaXQgd2l0aCBhbiBleGNlc3MgJ30nXG5cbiAgICB0aGlzLmd1bGxldC5wdXNoVG9rZW4obmV3IFRva2VuKFwifVwiKSk7XG4gICAgdGhpcy5ndWxsZXQucHVzaFRva2Vucyh0b2tlbnMpO1xuICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTtcbiAgICB0aGlzLmV4cGVjdChcIn1cIik7IC8vIFJlc3RvcmUgdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBqb2IuXG5cbiAgICB0aGlzLm5leHRUb2tlbiA9IG9sZFRva2VuO1xuICAgIHJldHVybiBwYXJzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gXCJleHByZXNzaW9uXCIsIHdoaWNoIGlzIGEgbGlzdCBvZiBhdG9tcy5cbiAgICpcbiAgICogYGJyZWFrT25JbmZpeGA6IFNob3VsZCB0aGUgcGFyc2luZyBzdG9wIHdoZW4gd2UgaGl0IGluZml4IG5vZGVzPyBUaGlzXG4gICAqICAgICAgICAgICAgICAgICBoYXBwZW5zIHdoZW4gZnVuY3Rpb25zIGhhdmUgaGlnaGVyIHByZWNlZGVuY2UgaGFuIGluZml4XG4gICAqICAgICAgICAgICAgICAgICBub2RlcyBpbiBpbXBsaWNpdCBwYXJzZXMuXG4gICAqXG4gICAqIGBicmVha09uVG9rZW5UZXh0YDogVGhlIHRleHQgb2YgdGhlIHRva2VuIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGVuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHdpdGgsIG9yIGBudWxsYCBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgZW5kIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uXG4gICAqL1xuICBwYXJzZUV4cHJlc3Npb24oYnJlYWtPbkluZml4LCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gS2VlcCBhZGRpbmcgYXRvbXMgdG8gdGhlIGJvZHkgdW50aWwgd2UgY2FuJ3QgcGFyc2UgYW55IG1vcmUgYXRvbXMgKGVpdGhlclxuICAgIC8vIHdlIHJlYWNoZWQgdGhlIGVuZCwgYSB9LCBvciBhIFxccmlnaHQpXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gSWdub3JlIHNwYWNlcyBpbiBtYXRoIG1vZGVcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5mZXRjaCgpO1xuXG4gICAgICBpZiAoUGFyc2VyLmVuZE9mRXhwcmVzc2lvbi5pbmRleE9mKGxleC50ZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmVha09uVG9rZW5UZXh0ICYmIGxleC50ZXh0ID09PSBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJlYWtPbkluZml4ICYmIGZ1bmN0aW9uc1tsZXgudGV4dF0gJiYgZnVuY3Rpb25zW2xleC50ZXh0XS5pbmZpeCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGF0b20gPSB0aGlzLnBhcnNlQXRvbShicmVha09uVG9rZW5UZXh0KTtcblxuICAgICAgaWYgKCFhdG9tKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChhdG9tLnR5cGUgPT09IFwiaW50ZXJuYWxcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYm9keS5wdXNoKGF0b20pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLmZvcm1MaWdhdHVyZXMoYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlSW5maXhOb2Rlcyhib2R5KTtcbiAgfVxuICAvKipcbiAgICogUmV3cml0ZXMgaW5maXggb3BlcmF0b3JzIHN1Y2ggYXMgXFxvdmVyIHdpdGggY29ycmVzcG9uZGluZyBjb21tYW5kcyBzdWNoXG4gICAqIGFzIFxcZnJhYy5cbiAgICpcbiAgICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cC4gIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZVxuICAgKiB0aGVuIHRoZSBleHByZXNzaW9uIGlzIGFtYmlndW91cy4gIFRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGFkZGluZyB7fS5cbiAgICovXG5cblxuICBoYW5kbGVJbmZpeE5vZGVzKGJvZHkpIHtcbiAgICB2YXIgb3ZlckluZGV4ID0gLTE7XG4gICAgdmFyIGZ1bmNOYW1lO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYm9keVtpXS50eXBlID09PSBcImluZml4XCIpIHtcbiAgICAgICAgaWYgKG92ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cFwiLCBib2R5W2ldLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG92ZXJJbmRleCA9IGk7XG4gICAgICAgIGZ1bmNOYW1lID0gYm9keVtpXS5yZXBsYWNlV2l0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlckluZGV4ICE9PSAtMSAmJiBmdW5jTmFtZSkge1xuICAgICAgdmFyIG51bWVyTm9kZTtcbiAgICAgIHZhciBkZW5vbU5vZGU7XG4gICAgICB2YXIgbnVtZXJCb2R5ID0gYm9keS5zbGljZSgwLCBvdmVySW5kZXgpO1xuICAgICAgdmFyIGRlbm9tQm9keSA9IGJvZHkuc2xpY2Uob3ZlckluZGV4ICsgMSk7XG5cbiAgICAgIGlmIChudW1lckJvZHkubGVuZ3RoID09PSAxICYmIG51bWVyQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgbnVtZXJOb2RlID0gbnVtZXJCb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtZXJOb2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogbnVtZXJCb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkZW5vbUJvZHkubGVuZ3RoID09PSAxICYmIGRlbm9tQm9keVswXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgICAgZGVub21Ob2RlID0gZGVub21Cb2R5WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVub21Ob2RlID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogZGVub21Cb2R5XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlO1xuXG4gICAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXFxcXFxhYm92ZWZyYWNcIikge1xuICAgICAgICBub2RlID0gdGhpcy5jYWxsRnVuY3Rpb24oZnVuY05hbWUsIFtudW1lck5vZGUsIGJvZHlbb3ZlckluZGV4XSwgZGVub21Ob2RlXSwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBkZW5vbU5vZGVdLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbm9kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBib2R5O1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSGFuZGxlIGEgc3Vic2NyaXB0IG9yIHN1cGVyc2NyaXB0IHdpdGggbmljZSBlcnJvcnMuXG4gICAqL1xuXG5cbiAgaGFuZGxlU3VwU3Vic2NyaXB0KG5hbWUgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgKSB7XG4gICAgdmFyIHN5bWJvbFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciBzeW1ib2wgPSBzeW1ib2xUb2tlbi50ZXh0O1xuICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBpZ25vcmUgc3BhY2VzIGJlZm9yZSBzdXAvc3Vic2NyaXB0IGFyZ3VtZW50XG5cbiAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlR3JvdXAobmFtZSk7XG5cbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGdyb3VwIGFmdGVyICdcIiArIHN5bWJvbCArIFwiJ1wiLCBzeW1ib2xUb2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dHVhbCBpbnB1dCBvZiBhbiB1bnN1cHBvcnRlZCBjb21tYW5kIGludG8gYSB0ZXh0IG5vZGVcbiAgICogY29udGFpbmVkIHdpdGhpbiBhIGNvbG9yIG5vZGUgd2hvc2UgY29sb3IgaXMgZGV0ZXJtaW5lZCBieSBlcnJvckNvbG9yXG4gICAqL1xuXG5cbiAgZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCkge1xuICAgIHZhciB0ZXh0b3JkQXJyYXkgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgdGV4dG9yZEFycmF5LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IHRleHRbaV1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciB0ZXh0Tm9kZSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgYm9keTogdGV4dG9yZEFycmF5XG4gICAgfTtcbiAgICB2YXIgY29sb3JOb2RlID0ge1xuICAgICAgdHlwZTogXCJjb2xvclwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgY29sb3I6IHRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixcbiAgICAgIGJvZHk6IFt0ZXh0Tm9kZV1cbiAgICB9O1xuICAgIHJldHVybiBjb2xvck5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGdyb3VwIHdpdGggb3B0aW9uYWwgc3VwZXIvc3Vic2NyaXB0cy5cbiAgICovXG5cblxuICBwYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCkge1xuICAgIC8vIFRoZSBib2R5IG9mIGFuIGF0b20gaXMgYW4gaW1wbGljaXQgZ3JvdXAsIHNvIHRoYXQgdGhpbmdzIGxpa2VcbiAgICAvLyBcXGxlZnQoeFxccmlnaHQpXjIgd29yayBjb3JyZWN0bHkuXG4gICAgdmFyIGJhc2UgPSB0aGlzLnBhcnNlR3JvdXAoXCJhdG9tXCIsIGJyZWFrT25Ub2tlblRleHQpOyAvLyBJbiB0ZXh0IG1vZGUsIHdlIGRvbid0IGhhdmUgc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHNcblxuICAgIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IC8vIE5vdGUgdGhhdCBiYXNlIG1heSBiZSBlbXB0eSAoaS5lLiBudWxsKSBhdCB0aGlzIHBvaW50LlxuXG5cbiAgICB2YXIgc3VwZXJzY3JpcHQ7XG4gICAgdmFyIHN1YnNjcmlwdDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBHdWFyYW50ZWVkIGluIG1hdGggbW9kZSwgc28gZWF0IGFueSBzcGFjZXMgZmlyc3QuXG4gICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gTGV4IHRoZSBmaXJzdCB0b2tlblxuXG4gICAgICB2YXIgbGV4ID0gdGhpcy5mZXRjaCgpO1xuXG4gICAgICBpZiAobGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiIHx8IGxleC50ZXh0ID09PSBcIlxcXFxub2xpbWl0c1wiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIGxpbWl0IGNvbnRyb2xcbiAgICAgICAgaWYgKGJhc2UgJiYgYmFzZS50eXBlID09PSBcIm9wXCIpIHtcbiAgICAgICAgICB2YXIgbGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIGJhc2UubGltaXRzID0gbGltaXRzO1xuICAgICAgICAgIGJhc2UuYWx3YXlzSGFuZGxlU3VwU3ViID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIikge1xuICAgICAgICAgIGlmIChiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yikge1xuICAgICAgICAgICAgYmFzZS5saW1pdHMgPSBsZXgudGV4dCA9PT0gXCJcXFxcbGltaXRzXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yXCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAobGV4LnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIHN1cGVyc2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdXBlcnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRG91YmxlIHN1cGVyc2NyaXB0XCIsIGxleCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIik7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIl9cIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBzdWJzY3JpcHQgc3RhcnRcbiAgICAgICAgaWYgKHN1YnNjcmlwdCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRG91YmxlIHN1YnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Vic2NyaXB0ID0gdGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoXCJzdWJzY3JpcHRcIik7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIidcIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBwcmltZVxuICAgICAgICBpZiAoc3VwZXJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1lID0ge1xuICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxwcmltZVwiXG4gICAgICAgIH07IC8vIE1hbnkgcHJpbWVzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyLCBzbyB3ZSBoYW5kbGUgdGhpcyBoZXJlXG5cbiAgICAgICAgdmFyIHByaW1lcyA9IFtwcmltZV07XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBLZWVwIGxleGluZyB0b2tlbnMgdW50aWwgd2UgZ2V0IHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgcHJpbWVcblxuICAgICAgICB3aGlsZSAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiJ1wiKSB7XG4gICAgICAgICAgLy8gRm9yIGVhY2ggb25lLCBhZGQgYW5vdGhlciBwcmltZSB0byB0aGUgbGlzdFxuICAgICAgICAgIHByaW1lcy5wdXNoKHByaW1lKTtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfSAvLyBJZiB0aGVyZSdzIGEgc3VwZXJzY3JpcHQgZm9sbG93aW5nIHRoZSBwcmltZXMsIGNvbWJpbmUgdGhhdFxuICAgICAgICAvLyBzdXBlcnNjcmlwdCBpbiB3aXRoIHRoZSBwcmltZXMuXG5cblxuICAgICAgICBpZiAodGhpcy5mZXRjaCgpLnRleHQgPT09IFwiXlwiKSB7XG4gICAgICAgICAgcHJpbWVzLnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoXCJzdXBlcnNjcmlwdFwiKSk7XG4gICAgICAgIH0gLy8gUHV0IGV2ZXJ5dGhpbmcgaW50byBhbiBvcmRncm91cCBhcyB0aGUgc3VwZXJzY3JpcHRcblxuXG4gICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgYm9keTogcHJpbWVzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHVTdWJzQW5kU3Vwc1tsZXgudGV4dF0pIHtcbiAgICAgICAgLy8gQSBVbmljb2RlIHN1YnNjcmlwdCBvciBzdXBlcnNjcmlwdCBjaGFyYWN0ZXIuXG4gICAgICAgIC8vIFdlIHRyZWF0IHRoZXNlIHNpbWlsYXJseSB0byB0aGUgdW5pY29kZS1tYXRoIHBhY2thZ2UuXG4gICAgICAgIC8vIFNvIHdlIHJlbmRlciBhIHN0cmluZyBvZiBVbmljb2RlIChzdWJ8c3VwZXIpc2NyaXB0cyB0aGVcbiAgICAgICAgLy8gc2FtZSBhcyBhIChzdWJ8c3VwZXIpc2NyaXB0IG9mIHJlZ3VsYXIgY2hhcmFjdGVycy5cbiAgICAgICAgdmFyIGlzU3ViID0gdW5pY29kZVN1YlJlZ0V4LnRlc3QobGV4LnRleHQpO1xuICAgICAgICB2YXIgc3Vic3VwVG9rZW5zID0gW107XG4gICAgICAgIHN1YnN1cFRva2Vucy5wdXNoKG5ldyBUb2tlbih1U3Vic0FuZFN1cHNbbGV4LnRleHRdKSk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBDb250aW51ZSBmZXRjaGluZyB0b2tlbnMgdG8gZmlsbCBvdXQgdGhlIHN0cmluZy5cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKS50ZXh0O1xuXG4gICAgICAgICAgaWYgKCF1U3Vic0FuZFN1cHNbdG9rZW5dKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pY29kZVN1YlJlZ0V4LnRlc3QodG9rZW4pICE9PSBpc1N1Yikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Vic3VwVG9rZW5zLnVuc2hpZnQobmV3IFRva2VuKHVTdWJzQW5kU3Vwc1t0b2tlbl0pKTtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfSAvLyBOb3cgY3JlYXRlIGEgKHN1YnxzdXBlcilzY3JpcHQuXG5cblxuICAgICAgICB2YXIgYm9keSA9IHRoaXMuc3VicGFyc2Uoc3Vic3VwVG9rZW5zKTtcblxuICAgICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgICBzdWJzY3JpcHQgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgICBtb2RlOiBcIm1hdGhcIixcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG5cblxuICBwYXJzZUZ1bmN0aW9uKGJyZWFrT25Ub2tlblRleHQsIG5hbWUgLy8gRm9yIGRldGVybWluaW5nIGl0cyBjb250ZXh0XG4gICkge1xuICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgZnVuYyA9IHRva2VuLnRleHQ7XG4gICAgdmFyIGZ1bmNEYXRhID0gZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIGNvbnN1bWUgY29tbWFuZCB0b2tlblxuXG4gICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJhdG9tXCIgJiYgIWZ1bmNEYXRhLmFsbG93ZWRJbkFyZ3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIHRleHQgbW9kZVwiLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiICYmIGZ1bmNEYXRhLmFsbG93ZWRJbk1hdGggPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIG1hdGggbW9kZVwiLCB0b2tlbik7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfSA9IHRoaXMucGFyc2VBcmd1bWVudHMoZnVuYywgZnVuY0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuXG5cbiAgY2FsbEZ1bmN0aW9uKG5hbWUsIGFyZ3MsIG9wdEFyZ3MsIHRva2VuLCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmdW5jTmFtZTogbmFtZSxcbiAgICAgIHBhcnNlcjogdGhpcyxcbiAgICAgIHRva2VuLFxuICAgICAgYnJlYWtPblRva2VuVGV4dFxuICAgIH07XG4gICAgdmFyIGZ1bmMgPSBmdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgXCIgKyBuYW1lKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgYXJndW1lbnRzIG9mIGEgZnVuY3Rpb24gb3IgZW52aXJvbm1lbnRcbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50cyhmdW5jLCAvLyBTaG91bGQgbG9vayBsaWtlIFwiXFxuYW1lXCIgb3IgXCJcXGJlZ2lue25hbWV9XCIuXG4gIGZ1bmNEYXRhKSB7XG4gICAgdmFyIHRvdGFsQXJncyA9IGZ1bmNEYXRhLm51bUFyZ3MgKyBmdW5jRGF0YS5udW1PcHRpb25hbEFyZ3M7XG5cbiAgICBpZiAodG90YWxBcmdzID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiBbXSxcbiAgICAgICAgb3B0QXJnczogW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJncztcblxuICAgICAgaWYgKGZ1bmNEYXRhLnByaW1pdGl2ZSAmJiBhcmdUeXBlID09IG51bGwgfHwgLy8gXFxzcXJ0IGV4cGFuZHMgaW50byBwcmltaXRpdmUgaWYgb3B0aW9uYWwgYXJndW1lbnQgZG9lc24ndCBleGlzdFxuICAgICAgZnVuY0RhdGEudHlwZSA9PT0gXCJzcXJ0XCIgJiYgaSA9PT0gMSAmJiBvcHRBcmdzWzBdID09IG51bGwpIHtcbiAgICAgICAgYXJnVHlwZSA9IFwicHJpbWl0aXZlXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICBvcHRBcmdzLnB1c2goYXJnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICE9IG51bGwpIHtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGVcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWdcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAgd2hlbiB0aGUgbW9kZSBpcyBjaGFuZ2luZy5cbiAgICovXG5cblxuICBwYXJzZUdyb3VwT2ZUeXBlKG5hbWUsIHR5cGUsIG9wdGlvbmFsKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG9wdGlvbmFsLCB0eXBlKTtcblxuICAgICAgY2FzZSBcImhib3hcIjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIGhib3ggYXJndW1lbnQgdHlwZSB3cmFwcyB0aGUgYXJndW1lbnQgaW4gdGhlIGVxdWl2YWxlbnQgb2ZcbiAgICAgICAgICAvLyBcXGhib3gsIHdoaWNoIGlzIGxpa2UgXFx0ZXh0IGJ1dCBzd2l0Y2hpbmcgdG8gXFx0ZXh0c3R5bGUgc2l6ZS5cbiAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChvcHRpb25hbCwgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHJldHVybiBncm91cCAhPSBudWxsID8ge1xuICAgICAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgICAgICBtb2RlOiBncm91cC5tb2RlLFxuICAgICAgICAgICAgYm9keTogW2dyb3VwXSxcbiAgICAgICAgICAgIHN0eWxlOiBcInRleHRcIiAvLyBzaW11bGF0ZSBcXHRleHRzdHlsZVxuXG4gICAgICAgICAgfSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5wYXJzZVN0cmluZ0dyb3VwKFwicmF3XCIsIG9wdGlvbmFsKTtcbiAgICAgICAgICByZXR1cm4gdG9rZW4gIT0gbnVsbCA/IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIHN0cmluZzogdG9rZW4udGV4dFxuICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJwcmltaXRpdmVcIjpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWxcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9ncm91cCA9IHRoaXMucGFyc2VHcm91cChuYW1lKTtcblxuICAgICAgICAgIGlmIChfZ3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9ncm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib3JpZ2luYWxcIjpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gZ3JvdXAgdHlwZSBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkIGFueSBzcGFjZSB0b2tlbnMsIGZldGNoaW5nIHRoZSBuZXh0IG5vbi1zcGFjZSB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lU3BhY2VzKCkge1xuICAgIHdoaWxlICh0aGlzLmZldGNoKCkudGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG5cblxuICBwYXJzZVN0cmluZ0dyb3VwKG1vZGVOYW1lLCAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICBvcHRpb25hbCkge1xuICAgIHZhciBhcmdUb2tlbiA9IHRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChvcHRpb25hbCk7XG5cbiAgICBpZiAoYXJnVG9rZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgdmFyIG5leHRUb2tlbjtcblxuICAgIHdoaWxlICgobmV4dFRva2VuID0gdGhpcy5mZXRjaCgpKS50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICBzdHIgKz0gbmV4dFRva2VuLnRleHQ7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnN1bWUoKTsgLy8gY29uc3VtZSB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgYXJnVG9rZW4udGV4dCA9IHN0cjtcbiAgICByZXR1cm4gYXJnVG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuXG5cbiAgcGFyc2VSZWdleEdyb3VwKHJlZ2V4LCBtb2RlTmFtZSAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICApIHtcbiAgICB2YXIgZmlyc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgbGFzdFRva2VuID0gZmlyc3RUb2tlbjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB2YXIgbmV4dFRva2VuO1xuXG4gICAgd2hpbGUgKChuZXh0VG9rZW4gPSB0aGlzLmZldGNoKCkpLnRleHQgIT09IFwiRU9GXCIgJiYgcmVnZXgudGVzdChzdHIgKyBuZXh0VG9rZW4udGV4dCkpIHtcbiAgICAgIGxhc3RUb2tlbiA9IG5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBcIiArIG1vZGVOYW1lICsgXCI6ICdcIiArIGZpcnN0VG9rZW4udGV4dCArIFwiJ1wiLCBmaXJzdFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGNvbG9yIGRlc2NyaXB0aW9uLlxuICAgKi9cblxuXG4gIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IC9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyZXMudGV4dCk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgc2l6ZSBzcGVjaWZpY2F0aW9uLCBjb25zaXN0aW5nIG9mIG1hZ25pdHVkZSBhbmQgdW5pdC5cbiAgICovXG5cblxuICBwYXJzZVNpemVHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGlzQmxhbmsgPSBmYWxzZTsgLy8gZG9uJ3QgZXhwYW5kIGJlZm9yZSBwYXJzZVN0cmluZ0dyb3VwXG5cbiAgICB0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBzaXplOiAnXCIgKyByZXMudGV4dCArIFwiJ1wiLCByZXMpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6ZVwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICBpc0JsYW5rXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIFVSTCwgY2hlY2tpbmcgZXNjYXBlZCBsZXR0ZXJzIGFuZCBhbGxvd2VkIHByb3RvY29scyxcbiAgICogYW5kIHNldHRpbmcgdGhlIGNhdGNvZGUgb2YgJSBhcyBhbiBhY3RpdmUgY2hhcmFjdGVyIChhcyBpbiBcXGh5cGVycmVmKS5cbiAgICovXG5cblxuICBwYXJzZVVybEdyb3VwKG9wdGlvbmFsKSB7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiflwiLCAxMik7IC8vIG90aGVyIGNoYXJhY3RlclxuXG4gICAgdmFyIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInVybFwiLCBvcHRpb25hbCk7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTQpOyAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIn5cIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBhcmd1bWVudCB3aXRoIHRoZSBtb2RlIHNwZWNpZmllZC5cbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwsIG1vZGUpIHtcbiAgICB2YXIgYXJnVG9rZW4gPSB0aGlzLmd1bGxldC5zY2FuQXJndW1lbnQob3B0aW9uYWwpO1xuXG4gICAgaWYgKGFyZ1Rva2VuID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG4gICAgICB0aGlzLnN3aXRjaE1vZGUobW9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIFwiRU9GXCIpOyAvLyBUT0RPOiBmaW5kIGFuIGFsdGVybmF0aXZlIHdheSB0byBkZW5vdGUgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIik7IC8vIGV4cGVjdCB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgbG9jOiBhcmdUb2tlbi5sb2MsXG4gICAgICBib2R5OiBleHByZXNzaW9uXG4gICAgfTtcblxuICAgIGlmIChtb2RlKSB7XG4gICAgICAvLyBTd2l0Y2ggbW9kZSBiYWNrXG4gICAgICB0aGlzLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gb3JkaW5hcnkgZ3JvdXAsIHdoaWNoIGlzIGVpdGhlciBhIHNpbmdsZSBudWNsZXVzIChsaWtlIFwieFwiKVxuICAgKiBvciBhbiBleHByZXNzaW9uIGluIGJyYWNlcyAobGlrZSBcInt4K3l9XCIpIG9yIGFuIGltcGxpY2l0IGdyb3VwLCBhIGdyb3VwXG4gICAqIHRoYXQgc3RhcnRzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBhbmQgZW5kcyByaWdodCBiZWZvcmUgYSBoaWdoZXIgZXhwbGljaXRcbiAgICogZ3JvdXAgZW5kcywgb3IgYXQgRU9GLlxuICAgKi9cblxuXG4gIHBhcnNlR3JvdXAobmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gZmlyc3RUb2tlbi50ZXh0O1xuICAgIHZhciByZXN1bHQ7IC8vIFRyeSB0byBwYXJzZSBhbiBvcGVuIGJyYWNlIG9yIFxcYmVnaW5ncm91cFxuXG4gICAgaWYgKHRleHQgPT09IFwie1wiIHx8IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIikge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB2YXIgZ3JvdXBFbmQgPSB0ZXh0ID09PSBcIntcIiA/IFwifVwiIDogXCJcXFxcZW5kZ3JvdXBcIjtcbiAgICAgIHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKTsgLy8gSWYgd2UgZ2V0IGEgYnJhY2UsIHBhcnNlIGFuIGV4cHJlc3Npb25cblxuICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgZ3JvdXBFbmQpO1xuICAgICAgdmFyIGxhc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTsgLy8gQ2hlY2sgdGhhdCB3ZSBnb3QgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNlXG5cbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGZpcnN0VG9rZW4sIGxhc3RUb2tlbiksXG4gICAgICAgIGJvZHk6IGV4cHJlc3Npb24sXG4gICAgICAgIC8vIEEgZ3JvdXAgZm9ybWVkIGJ5IFxcYmVnaW5ncm91cC4uLlxcZW5kZ3JvdXAgaXMgYSBzZW1pLXNpbXBsZSBncm91cFxuICAgICAgICAvLyB3aGljaCBkb2Vzbid0IGFmZmVjdCBzcGFjaW5nIGluIG1hdGggbW9kZSwgaS5lLiwgaXMgdHJhbnNwYXJlbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xOTMwL3doZW4tc2hvdWxkLW9uZS1cbiAgICAgICAgLy8gdXNlLWJlZ2luZ3JvdXAtaW5zdGVhZC1vZi1iZ3JvdXBcbiAgICAgICAgc2VtaXNpbXBsZTogdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiIHx8IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG5hbWUsIHBhcnNlIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIE90aGVyd2lzZSwganVzdCByZXR1cm4gYSBudWNsZXVzXG4gICAgICByZXN1bHQgPSB0aGlzLnBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSkgfHwgdGhpcy5wYXJzZVN5bWJvbCgpO1xuXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgdGV4dFswXSA9PT0gXCJcXFxcXCIgJiYgIWltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkodGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEZvcm0gbGlnYXR1cmUtbGlrZSBjb21iaW5hdGlvbnMgb2YgY2hhcmFjdGVycyBmb3IgdGV4dCBtb2RlLlxuICAgKiBUaGlzIGluY2x1ZGVzIGlucHV0cyBsaWtlIFwiLS1cIiwgXCItLS1cIiwgXCJgYFwiIGFuZCBcIicnXCIuXG4gICAqIFRoZSByZXN1bHQgd2lsbCBzaW1wbHkgcmVwbGFjZSBtdWx0aXBsZSB0ZXh0b3JkIG5vZGVzIHdpdGggYSBzaW5nbGVcbiAgICogY2hhcmFjdGVyIGluIGVhY2ggdmFsdWUgYnkgYSBzaW5nbGUgdGV4dG9yZCBub2RlIGhhdmluZyBtdWx0aXBsZVxuICAgKiBjaGFyYWN0ZXJzIGluIGl0cyB2YWx1ZS4gIFRoZSByZXByZXNlbnRhdGlvbiBpcyBzdGlsbCBBU0NJSSBzb3VyY2UuXG4gICAqIFRoZSBncm91cCB3aWxsIGJlIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgKi9cblxuXG4gIGZvcm1MaWdhdHVyZXMoZ3JvdXApIHtcbiAgICB2YXIgbiA9IGdyb3VwLmxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIGEgPSBncm91cFtpXTsgLy8gJEZsb3dGaXhNZTogTm90IGV2ZXJ5IG5vZGUgdHlwZSBoYXMgYSBgdGV4dGAgcHJvcGVydHkuXG5cbiAgICAgIHZhciB2ID0gYS50ZXh0O1xuXG4gICAgICBpZiAodiA9PT0gXCItXCIgJiYgZ3JvdXBbaSArIDFdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgIGlmIChpICsgMSA8IG4gJiYgZ3JvdXBbaSArIDJdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgICAgZ3JvdXAuc3BsaWNlKGksIDMsIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGEsIGdyb3VwW2kgKyAyXSksXG4gICAgICAgICAgICB0ZXh0OiBcIi0tLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgICAgdGV4dDogXCItLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgodiA9PT0gXCInXCIgfHwgdiA9PT0gXCJgXCIpICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSB2KSB7XG4gICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgIHRleHQ6IHYgKyB2XG4gICAgICAgIH0pO1xuICAgICAgICBuIC09IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBzeW1ib2wgb3V0IG9mIHRoZSBzdHJpbmcuIEhlcmUsIHdlIGhhbmRsZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAqIHN5bWJvbHMgYW5kIHNwZWNpYWwgZnVuY3Rpb25zIGxpa2UgXFx2ZXJiLlxuICAgKi9cblxuXG4gIHBhcnNlU3ltYm9sKCkge1xuICAgIHZhciBudWNsZXVzID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gbnVjbGV1cy50ZXh0O1xuXG4gICAgaWYgKC9eXFxcXHZlcmJbXmEtekEtWl0vLnRlc3QodGV4dCkpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgdmFyIGFyZyA9IHRleHQuc2xpY2UoNSk7XG4gICAgICB2YXIgc3RhciA9IGFyZy5jaGFyQXQoMCkgPT09IFwiKlwiO1xuXG4gICAgICBpZiAoc3Rhcikge1xuICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMSk7XG4gICAgICB9IC8vIExleGVyJ3MgdG9rZW5SZWdleCBpcyBjb25zdHJ1Y3RlZCB0byBhbHdheXMgaGF2ZSBtYXRjaGluZ1xuICAgICAgLy8gZmlyc3QvbGFzdCBjaGFyYWN0ZXJzLlxuXG5cbiAgICAgIGlmIChhcmcubGVuZ3RoIDwgMiB8fCBhcmcuY2hhckF0KDApICE9PSBhcmcuc2xpY2UoLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHZlcmIgYXNzZXJ0aW9uIGZhaWxlZCAtLVxcbiAgICAgICAgICAgICAgICAgICAgcGxlYXNlIHJlcG9ydCB3aGF0IGlucHV0IGNhdXNlZCB0aGlzIGJ1Z1wiKTtcbiAgICAgIH1cblxuICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTsgLy8gcmVtb3ZlIGZpcnN0IGFuZCBsYXN0IGNoYXJcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ2ZXJiXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBib2R5OiBhcmcsXG4gICAgICAgIHN0YXJcbiAgICAgIH07XG4gICAgfSAvLyBBdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSBhIHN5bWJvbCwgcG9zc2libHkgd2l0aCBhY2NlbnRzLlxuICAgIC8vIEZpcnN0IGV4cGFuZCBhbnkgYWNjZW50ZWQgYmFzZSBzeW1ib2wgYWNjb3JkaW5nIHRvIHVuaWNvZGVTeW1ib2xzLlxuXG5cbiAgICBpZiAodW5pY29kZVN5bWJvbHMuaGFzT3duUHJvcGVydHkodGV4dFswXSkgJiYgIXN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc2xpY2UoMSk7XG4gICAgfSAvLyBTdHJpcCBvZmYgYW55IGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cblxuICAgIHZhciBtYXRjaCA9IGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleC5leGVjKHRleHQpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuXG4gICAgICBpZiAodGV4dCA9PT0gJ2knKSB7XG4gICAgICAgIHRleHQgPSAnXFx1MDEzMSc7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gJ1xcdTAyMzcnOyAvLyBkb3RsZXNzIGosIGluIG1hdGggYW5kIHRleHQgbW9kZVxuICAgICAgfVxuICAgIH0gLy8gUmVjb2duaXplIGJhc2Ugc3ltYm9sXG5cblxuICAgIHZhciBzeW1ib2w7XG5cbiAgICBpZiAoc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0XS5ncm91cDtcbiAgICAgIHZhciBsb2MgPSBTb3VyY2VMb2NhdGlvbi5yYW5nZShudWNsZXVzKTtcbiAgICAgIHZhciBzO1xuXG4gICAgICBpZiAoQVRPTVMuaGFzT3duUHJvcGVydHkoZ3JvdXApKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgdmFyIGZhbWlseSA9IGdyb3VwO1xuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBmYW1pbHksXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBncm91cCxcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmtub3duIGFjY2VudCAnIFwiICsgYWNjZW50ICsgXCInXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbW1hbmQgPSB1bmljb2RlQWNjZW50c1thY2NlbnRdW3RoaXMubW9kZV0gfHwgdW5pY29kZUFjY2VudHNbYWNjZW50XS50ZXh0O1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiQWNjZW50IFwiICsgYWNjZW50ICsgXCIgdW5zdXBwb3J0ZWQgaW4gXCIgKyB0aGlzLm1vZGUgKyBcIiBtb2RlXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ltYm9sID0ge1xuICAgICAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyksXG4gICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICAgICAgaXNTaGlmdHk6IHRydWUsXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbn1cblBhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBzaW5nbGUgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlclxuICogVE9ETyhlbWlseSk6IFJlbW92ZSB0aGlzXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlID0gZnVuY3Rpb24gcGFyc2VUcmVlKHRvUGFyc2UsIHNldHRpbmdzKSB7XG4gIGlmICghKHR5cGVvZiB0b1BhcnNlID09PSAnc3RyaW5nJyB8fCB0b1BhcnNlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0thVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uJyk7XG4gIH1cblxuICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0b1BhcnNlLCBzZXR0aW5ncyk7IC8vIEJsYW5rIG91dCBhbnkgXFxkZkB0YWcgdG8gYXZvaWQgc3B1cmlvdXMgXCJEdXBsaWNhdGUgXFx0YWdcIiBlcnJvcnNcblxuICBkZWxldGUgcGFyc2VyLmd1bGxldC5tYWNyb3MuY3VycmVudFtcIlxcXFxkZkB0YWdcIl07XG4gIHZhciB0cmVlID0gcGFyc2VyLnBhcnNlKCk7IC8vIFByZXZlbnQgYSBjb2xvciBkZWZpbml0aW9uIGZyb20gcGVyc2lzdGluZyBiZXR3ZWVuIGNhbGxzIHRvIGthdGV4LnJlbmRlcigpLlxuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGN1cnJlbnRAY29sb3JcIl07XG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGNvbG9yXCJdOyAvLyBJZiB0aGUgaW5wdXQgdXNlZCBcXHRhZywgaXQgd2lsbCBzZXQgdGhlIFxcZGZAdGFnIG1hY3JvIHRvIHRoZSB0YWcuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2VwYXJhdGVseSBwYXJzZSB0aGUgdGFnIGFuZCB3cmFwIHRoZSB0cmVlLlxuXG4gIGlmIChwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnNcIik7XG4gICAgfVxuXG4gICAgdHJlZSA9IFt7XG4gICAgICB0eXBlOiBcInRhZ1wiLFxuICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5OiB0cmVlLFxuICAgICAgdGFnOiBwYXJzZXIuc3VicGFyc2UoW25ldyBUb2tlbihcIlxcXFxkZkB0YWdcIildKVxuICAgIH1dO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogUGFyc2UgYW5kIGJ1aWxkIGFuIGV4cHJlc3Npb24sIGFuZCBwbGFjZSB0aGF0IGV4cHJlc3Npb24gaW4gdGhlIERPTSBub2RlXG4gKiBnaXZlbi5cbiAqL1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihleHByZXNzaW9uLCBiYXNlTm9kZSwgb3B0aW9ucykge1xuICBiYXNlTm9kZS50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHZhciBub2RlID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTm9kZSgpO1xuICBiYXNlTm9kZS5hcHBlbmRDaGlsZChub2RlKTtcbn07IC8vIEthVGVYJ3Mgc3R5bGVzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gcXVpcmtzIG1vZGUuIFByaW50IG91dCBhbiBlcnJvciwgYW5kXG4vLyBkaXNhYmxlIHJlbmRlcmluZy5cblxuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGlmIChkb2N1bWVudC5jb21wYXRNb2RlICE9PSBcIkNTUzFDb21wYXRcIikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgXCIgKyBcIndlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS5cIik7XG5cbiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIgZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHBhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG59O1xuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgYSBLYVRlWCBQYXJzZUVycm9yIGFuZCBvcHRpb25zLnRocm93T25FcnJvciBpcyBmYWxzZSxcbiAqIHJlbmRlcnMgdGhlIGludmFsaWQgTGFUZVggYXMgYSBzcGFuIHdpdGggaG92ZXIgdGl0bGUgZ2l2aW5nIHRoZSBLYVRlWFxuICogZXJyb3IgbWVzc2FnZS4gIE90aGVyd2lzZSwgc2ltcGx5IHRocm93cyB0aGUgZXJyb3IuXG4gKi9cblxuXG52YXIgcmVuZGVyRXJyb3IgPSBmdW5jdGlvbiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IgfHwgIShlcnJvciBpbnN0YW5jZW9mIFBhcnNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImthdGV4LWVycm9yXCJdLCBbbmV3IFN5bWJvbE5vZGUoZXhwcmVzc2lvbildKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCBlcnJvci50b1N0cmluZygpKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImNvbG9yOlwiICsgb3B0aW9ucy5lcnJvckNvbG9yKTtcbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUuIFRoaXMgaXMgdXNlZCBmb3IgYWR2YW5jZWRcbiAqIHVzZSBjYXNlcyAobGlrZSByZW5kZXJpbmcgdG8gY3VzdG9tIG91dHB1dCkuXG4gKi9cblxuXG52YXIgcmVuZGVyVG9Eb21UcmVlID0gZnVuY3Rpb24gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIHJlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZEhUTUxUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfVxufTtcblxudmFyIGthdGV4ID0ge1xuICAvKipcbiAgICogQ3VycmVudCBLYVRlWCB2ZXJzaW9uXG4gICAqL1xuICB2ZXJzaW9uOiBcIjAuMTYuMTFcIixcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBjb21iaW5hdGlvbiwgYW5kIGFkZHNcbiAgICogaXQgYXMgYSBjaGlsZCB0byB0aGUgc3BlY2lmaWVkIERPTSBub2RlLlxuICAgKi9cbiAgcmVuZGVyLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwrTWF0aE1MIGNvbWJpbmF0aW9uIHN0cmluZyxcbiAgICogZm9yIHNlbmRpbmcgdG8gdGhlIGNsaWVudC5cbiAgICovXG4gIHJlbmRlclRvU3RyaW5nLFxuXG4gIC8qKlxuICAgKiBLYVRlWCBlcnJvciwgdXN1YWxseSBkdXJpbmcgcGFyc2luZy5cbiAgICovXG4gIFBhcnNlRXJyb3IsXG5cbiAgLyoqXG4gICAqIFRoZSBzaGVtYSBvZiBTZXR0aW5nc1xuICAgKi9cbiAgU0VUVElOR1NfU0NIRU1BLFxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGdpdmVuIExhVGVYIGludG8gS2FUZVgncyBpbnRlcm5hbCBwYXJzZSB0cmVlIHN0cnVjdHVyZSxcbiAgICogd2l0aG91dCByZW5kZXJpbmcgdG8gSFRNTCBvciBNYXRoTUwuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19wYXJzZTogZ2VuZXJhdGVQYXJzZVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgaW50ZXJuYWwgRE9NIHRyZWVcbiAgICogcmVwcmVzZW50YXRpb24sIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9Eb21UcmVlOiByZW5kZXJUb0RvbVRyZWUsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCBpbnRlcm5hbCBET00gdHJlZSByZXByZXNlbnRhdGlvbixcbiAgICogd2l0aG91dCBNYXRoTUwgYW5kIHdpdGhvdXQgZmxhdHRlbmluZyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fcmVuZGVyVG9IVE1MVHJlZTogcmVuZGVyVG9IVE1MVHJlZSxcblxuICAvKipcbiAgICogZXh0ZW5kcyBpbnRlcm5hbCBmb250IG1ldHJpY3Mgb2JqZWN0IHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIGVhY2gga2V5IGluIHRoZSBuZXcgb2JqZWN0IHJlcHJlc2VudHMgYSBmb250IG5hbWVcbiAgKi9cbiAgX19zZXRGb250TWV0cmljczogc2V0Rm9udE1ldHJpY3MsXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgc3ltYm9sIHRvIGJ1aWx0aW4gc3ltYm9scyB0YWJsZVxuICAgKi9cbiAgX19kZWZpbmVTeW1ib2w6IGRlZmluZVN5bWJvbCxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBmdW5jdGlvbiB0byBidWlsdGluIGZ1bmN0aW9uIGxpc3QsXG4gICAqIHdoaWNoIGRpcmVjdGx5IHByb2R1Y2UgcGFyc2UgdHJlZSBlbGVtZW50c1xuICAgKiBhbmQgaGF2ZSB0aGVpciBvd24gaHRtbC9tYXRobWwgYnVpbGRlcnNcbiAgICovXG4gIF9fZGVmaW5lRnVuY3Rpb246IGRlZmluZUZ1bmN0aW9uLFxuXG4gIC8qKlxuICAgKiBhZGRzIGEgbmV3IG1hY3JvIHRvIGJ1aWx0aW4gbWFjcm8gbGlzdFxuICAgKi9cbiAgX19kZWZpbmVNYWNybzogZGVmaW5lTWFjcm8sXG5cbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgZG9tIHRyZWUgbm9kZSB0eXBlcywgd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgdHlwZSBjaGVja2luZyBub2Rlcy5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgbm90IGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgcHVibGljIHVzZS5cbiAgICogVGhlIGludGVybmFsIHRyZWUgcmVwcmVzZW50YXRpb24gaXMgdW5zdGFibGUgYW5kIGlzIHZlcnkgbGlrZWx5XG4gICAqIHRvIGNoYW5nZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAqL1xuICBfX2RvbVRyZWU6IHtcbiAgICBTcGFuLFxuICAgIEFuY2hvcixcbiAgICBTeW1ib2xOb2RlLFxuICAgIFN2Z05vZGUsXG4gICAgUGF0aE5vZGUsXG4gICAgTGluZU5vZGVcbiAgfVxufTtcblxuZXhwb3J0IHsga2F0ZXggYXMgZGVmYXVsdCB9O1xuIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xuXG4vLyBzcmMvbG9nZ2VyLnRzXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG52YXIgTEVWRUxTID0ge1xuICB0cmFjZTogMCxcbiAgZGVidWc6IDEsXG4gIGluZm86IDIsXG4gIHdhcm46IDMsXG4gIGVycm9yOiA0LFxuICBmYXRhbDogNVxufTtcbnZhciBsb2cgPSB7XG4gIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5fYXJncykgPT4ge1xuICB9LCBcInRyYWNlXCIpLFxuICBkZWJ1ZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoLi4uX2FyZ3MpID0+IHtcbiAgfSwgXCJkZWJ1Z1wiKSxcbiAgaW5mbzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoLi4uX2FyZ3MpID0+IHtcbiAgfSwgXCJpbmZvXCIpLFxuICB3YXJuOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5fYXJncykgPT4ge1xuICB9LCBcIndhcm5cIiksXG4gIGVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5fYXJncykgPT4ge1xuICB9LCBcImVycm9yXCIpLFxuICBmYXRhbDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoLi4uX2FyZ3MpID0+IHtcbiAgfSwgXCJmYXRhbFwiKVxufTtcbnZhciBzZXRMb2dMZXZlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obGV2ZWwgPSBcImZhdGFsXCIpIHtcbiAgbGV0IG51bWVyaWNMZXZlbCA9IExFVkVMUy5mYXRhbDtcbiAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChsZXZlbC50b0xvd2VyQ2FzZSgpIGluIExFVkVMUykge1xuICAgICAgbnVtZXJpY0xldmVsID0gTEVWRUxTW2xldmVsXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiKSB7XG4gICAgbnVtZXJpY0xldmVsID0gbGV2ZWw7XG4gIH1cbiAgbG9nLnRyYWNlID0gKCkgPT4ge1xuICB9O1xuICBsb2cuZGVidWcgPSAoKSA9PiB7XG4gIH07XG4gIGxvZy5pbmZvID0gKCkgPT4ge1xuICB9O1xuICBsb2cud2FybiA9ICgpID0+IHtcbiAgfTtcbiAgbG9nLmVycm9yID0gKCkgPT4ge1xuICB9O1xuICBsb2cuZmF0YWwgPSAoKSA9PiB7XG4gIH07XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLmZhdGFsKSB7XG4gICAgbG9nLmZhdGFsID0gY29uc29sZS5lcnJvciA/IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLCBmb3JtYXQoXCJGQVRBTFwiKSwgXCJjb2xvcjogb3JhbmdlXCIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlLCBcIlxceDFCWzM1bVwiLCBmb3JtYXQoXCJGQVRBTFwiKSk7XG4gIH1cbiAgaWYgKG51bWVyaWNMZXZlbCA8PSBMRVZFTFMuZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IgPSBjb25zb2xlLmVycm9yID8gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsIGZvcm1hdChcIkVSUk9SXCIpLCBcImNvbG9yOiBvcmFuZ2VcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiXFx4MUJbMzFtXCIsIGZvcm1hdChcIkVSUk9SXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy53YXJuKSB7XG4gICAgbG9nLndhcm4gPSBjb25zb2xlLndhcm4gPyBjb25zb2xlLndhcm4uYmluZChjb25zb2xlLCBmb3JtYXQoXCJXQVJOXCIpLCBcImNvbG9yOiBvcmFuZ2VcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIGBcXHgxQlszM21gLCBmb3JtYXQoXCJXQVJOXCIpKTtcbiAgfVxuICBpZiAobnVtZXJpY0xldmVsIDw9IExFVkVMUy5pbmZvKSB7XG4gICAgbG9nLmluZm8gPSBjb25zb2xlLmluZm8gPyBjb25zb2xlLmluZm8uYmluZChjb25zb2xlLCBmb3JtYXQoXCJJTkZPXCIpLCBcImNvbG9yOiBsaWdodGJsdWVcIikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIFwiXFx4MUJbMzRtXCIsIGZvcm1hdChcIklORk9cIikpO1xuICB9XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLmRlYnVnKSB7XG4gICAgbG9nLmRlYnVnID0gY29uc29sZS5kZWJ1ZyA/IGNvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLCBmb3JtYXQoXCJERUJVR1wiKSwgXCJjb2xvcjogbGlnaHRncmVlblwiKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwgXCJcXHgxQlszMm1cIiwgZm9ybWF0KFwiREVCVUdcIikpO1xuICB9XG4gIGlmIChudW1lcmljTGV2ZWwgPD0gTEVWRUxTLnRyYWNlKSB7XG4gICAgbG9nLnRyYWNlID0gY29uc29sZS5kZWJ1ZyA/IGNvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLCBmb3JtYXQoXCJUUkFDRVwiKSwgXCJjb2xvcjogbGlnaHRncmVlblwiKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwgXCJcXHgxQlszMm1cIiwgZm9ybWF0KFwiVFJBQ0VcIikpO1xuICB9XG59LCBcInNldExvZ0xldmVsXCIpO1xudmFyIGZvcm1hdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGxldmVsKSA9PiB7XG4gIGNvbnN0IHRpbWUgPSBkYXlqcygpLmZvcm1hdChcInNzLlNTU1wiKTtcbiAgcmV0dXJuIGAlYyR7dGltZX0gOiAke2xldmVsfSA6IGA7XG59LCBcImZvcm1hdFwiKTtcblxuLy8gc3JjL2RpYWdyYW0tYXBpL3JlZ2V4ZXMudHNcbnZhciBmcm9udE1hdHRlclJlZ2V4ID0gL14tezN9XFxzKltcXG5cXHJdKC4qPylbXFxuXFxyXS17M31cXHMqW1xcblxccl0rL3M7XG52YXIgZGlyZWN0aXZlUmVnZXggPSAvJXsyfXtcXHMqKD86KFxcdyspXFxzKjp8KFxcdyspKVxccyooPzooXFx3Kyl8KCg/Oig/IX0lezJ9KS58XFxyP1xcbikqKSk/XFxzKig/On0lezJ9KT8vZ2k7XG52YXIgYW55Q29tbWVudFJlZ2V4ID0gL1xccyolJS4qXFxuL2dtO1xuXG4vLyBzcmMvZXJyb3JzLnRzXG52YXIgVW5rbm93bkRpYWdyYW1FcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlVua25vd25EaWFncmFtRXJyb3JcIik7XG4gIH1cbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiVW5rbm93bkRpYWdyYW1FcnJvclwiO1xuICB9XG59O1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZGV0ZWN0VHlwZS50c1xudmFyIGRldGVjdG9ycyA9IHt9O1xudmFyIGRldGVjdFR5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGNvbmZpZzIpIHtcbiAgdGV4dCA9IHRleHQucmVwbGFjZShmcm9udE1hdHRlclJlZ2V4LCBcIlwiKS5yZXBsYWNlKGRpcmVjdGl2ZVJlZ2V4LCBcIlwiKS5yZXBsYWNlKGFueUNvbW1lbnRSZWdleCwgXCJcXG5cIik7XG4gIGZvciAoY29uc3QgW2tleSwgeyBkZXRlY3RvciB9XSBvZiBPYmplY3QuZW50cmllcyhkZXRlY3RvcnMpKSB7XG4gICAgY29uc3QgZGlhZ3JhbSA9IGRldGVjdG9yKHRleHQsIGNvbmZpZzIpO1xuICAgIGlmIChkaWFncmFtKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgVW5rbm93bkRpYWdyYW1FcnJvcihcbiAgICBgTm8gZGlhZ3JhbSB0eXBlIGRldGVjdGVkIG1hdGNoaW5nIGdpdmVuIGNvbmZpZ3VyYXRpb24gZm9yIHRleHQ6ICR7dGV4dH1gXG4gICk7XG59LCBcImRldGVjdFR5cGVcIik7XG52YXIgcmVnaXN0ZXJMYXp5TG9hZGVkRGlhZ3JhbXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCguLi5kaWFncmFtczIpID0+IHtcbiAgZm9yIChjb25zdCB7IGlkLCBkZXRlY3RvciwgbG9hZGVyIH0gb2YgZGlhZ3JhbXMyKSB7XG4gICAgYWRkRGV0ZWN0b3IoaWQsIGRldGVjdG9yLCBsb2FkZXIpO1xuICB9XG59LCBcInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zXCIpO1xudmFyIGFkZERldGVjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoa2V5LCBkZXRlY3RvciwgbG9hZGVyKSA9PiB7XG4gIGlmIChkZXRlY3RvcnNba2V5XSkge1xuICAgIGxvZy53YXJuKGBEZXRlY3RvciB3aXRoIGtleSAke2tleX0gYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0aW5nLmApO1xuICB9XG4gIGRldGVjdG9yc1trZXldID0geyBkZXRlY3RvciwgbG9hZGVyIH07XG4gIGxvZy5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtrZXl9IGFkZGVkJHtsb2FkZXIgPyBcIiB3aXRoIGxvYWRlclwiIDogXCJcIn1gKTtcbn0sIFwiYWRkRGV0ZWN0b3JcIik7XG52YXIgZ2V0RGlhZ3JhbUxvYWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGtleSkgPT4ge1xuICByZXR1cm4gZGV0ZWN0b3JzW2tleV0ubG9hZGVyO1xufSwgXCJnZXREaWFncmFtTG9hZGVyXCIpO1xuXG4vLyBzcmMvYXNzaWduV2l0aERlcHRoLnRzXG52YXIgYXNzaWduV2l0aERlcHRoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZHN0LCBzcmMsIHsgZGVwdGggPSAyLCBjbG9iYmVyID0gZmFsc2UgfSA9IHt9KSA9PiB7XG4gIGNvbnN0IGNvbmZpZzIgPSB7IGRlcHRoLCBjbG9iYmVyIH07XG4gIGlmIChBcnJheS5pc0FycmF5KHNyYykgJiYgIUFycmF5LmlzQXJyYXkoZHN0KSkge1xuICAgIHNyYy5mb3JFYWNoKChzKSA9PiBhc3NpZ25XaXRoRGVwdGgoZHN0LCBzLCBjb25maWcyKSk7XG4gICAgcmV0dXJuIGRzdDtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNyYykgJiYgQXJyYXkuaXNBcnJheShkc3QpKSB7XG4gICAgc3JjLmZvckVhY2goKHMpID0+IHtcbiAgICAgIGlmICghZHN0LmluY2x1ZGVzKHMpKSB7XG4gICAgICAgIGRzdC5wdXNoKHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkc3Q7XG4gIH1cbiAgaWYgKGRzdCA9PT0gdm9pZCAwIHx8IGRlcHRoIDw9IDApIHtcbiAgICBpZiAoZHN0ICE9PSB2b2lkIDAgJiYgZHN0ICE9PSBudWxsICYmIHR5cGVvZiBkc3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHNyYyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZHN0LCBzcmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3JjO1xuICAgIH1cbiAgfVxuICBpZiAoc3JjICE9PSB2b2lkIDAgJiYgdHlwZW9mIGRzdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygc3JjID09PSBcIm9iamVjdFwiKSB7XG4gICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygc3JjW2tleV0gPT09IFwib2JqZWN0XCIgJiYgKGRzdFtrZXldID09PSB2b2lkIDAgfHwgdHlwZW9mIGRzdFtrZXldID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICBpZiAoZHN0W2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgICAgIGRzdFtrZXldID0gQXJyYXkuaXNBcnJheShzcmNba2V5XSkgPyBbXSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGRzdFtrZXldID0gYXNzaWduV2l0aERlcHRoKGRzdFtrZXldLCBzcmNba2V5XSwgeyBkZXB0aDogZGVwdGggLSAxLCBjbG9iYmVyIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbG9iYmVyIHx8IHR5cGVvZiBkc3Rba2V5XSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygc3JjW2tleV0gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZHN0O1xufSwgXCJhc3NpZ25XaXRoRGVwdGhcIik7XG52YXIgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQgPSBhc3NpZ25XaXRoRGVwdGg7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtYmFzZS5qc1xuaW1wb3J0IHsgYWRqdXN0IGFzIGFkanVzdDIsIGRhcmtlbiwgaW52ZXJ0LCBpc0RhcmssIGxpZ2h0ZW4gfSBmcm9tIFwia2hyb21hXCI7XG5cbi8vIHNyYy90aGVtZXMvZXJEaWFncmFtLW9sZEhhcmRjb2RlZFZhbHVlcy50c1xudmFyIG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IFwiI2ZmZmZmZlwiO1xudmFyIG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSBcIiNmMmYyZjJcIjtcblxuLy8gc3JjL3RoZW1lcy90aGVtZS1oZWxwZXJzLmpzXG5pbXBvcnQgeyBhZGp1c3QgfSBmcm9tIFwia2hyb21hXCI7XG52YXIgbWtCb3JkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb2wsIGRhcmtNb2RlKSA9PiBkYXJrTW9kZSA/IGFkanVzdChjb2wsIHsgczogLTQwLCBsOiAxMCB9KSA6IGFkanVzdChjb2wsIHsgczogLTQwLCBsOiAtMTAgfSksIFwibWtCb3JkZXJcIik7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtYmFzZS5qc1xudmFyIFRoZW1lID0gY2xhc3Mge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlRoZW1lXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYmFja2dyb3VuZCA9IFwiI2Y0ZjRmNFwiO1xuICAgIHRoaXMucHJpbWFyeUNvbG9yID0gXCIjZmZmNGRkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcIiMzMzNcIjtcbiAgICB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUID0gMTI7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gJ1widHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJztcbiAgICB0aGlzLmZvbnRTaXplID0gXCIxNnB4XCI7XG4gIH1cbiAgdXBkYXRlQ29sb3JzKCkge1xuICAgIHRoaXMucHJpbWFyeVRleHRDb2xvciA9IHRoaXMucHJpbWFyeVRleHRDb2xvciB8fCAodGhpcy5kYXJrTW9kZSA/IFwiI2VlZVwiIDogXCIjMzMzXCIpO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSB0aGlzLnNlY29uZGFyeUNvbG9yIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTEyMCB9KTtcbiAgICB0aGlzLnRlcnRpYXJ5Q29sb3IgPSB0aGlzLnRlcnRpYXJ5Q29sb3IgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxODAsIGw6IDUgfSk7XG4gICAgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciB8fCBta0JvcmRlcih0aGlzLnByaW1hcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvciA9IHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgfHwgbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yIHx8IG1rQm9yZGVyKHRoaXMudGVydGlhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSB0aGlzLm5vdGVCb3JkZXJDb2xvciB8fCBta0JvcmRlcih0aGlzLm5vdGVCa2dDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSB0aGlzLm5vdGVCa2dDb2xvciB8fCBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLm5vdGVUZXh0Q29sb3IgfHwgXCIjMzMzXCI7XG4gICAgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IgPSB0aGlzLnNlY29uZGFyeVRleHRDb2xvciB8fCBpbnZlcnQodGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IHRoaXMudGVydGlhcnlUZXh0Q29sb3IgfHwgaW52ZXJ0KHRoaXMudGVydGlhcnlDb2xvcik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSB0aGlzLmxpbmVDb2xvciB8fCBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLmFycm93aGVhZENvbG9yID0gdGhpcy5hcnJvd2hlYWRDb2xvciB8fCBpbnZlcnQodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IHRoaXMudGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmJvcmRlcjIgPSB0aGlzLmJvcmRlcjIgfHwgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMubm9kZUJrZyA9IHRoaXMubm9kZUJrZyB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLm1haW5Ca2cgPSB0aGlzLm1haW5Ca2cgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ub2RlQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuY2x1c3RlckJrZyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gdGhpcy5jbHVzdGVyQm9yZGVyIHx8IHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50aXRsZUNvbG9yID0gdGhpcy50aXRsZUNvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kIHx8ICh0aGlzLmRhcmtNb2RlID8gZGFya2VuKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDMwKSA6IHRoaXMuc2Vjb25kYXJ5Q29sb3IpO1xuICAgIHRoaXMubm9kZVRleHRDb2xvciA9IHRoaXMubm9kZVRleHRDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IHRoaXMuYWN0b3JCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMuYWN0b3JCa2cgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5hY3RvckxpbmVDb2xvciB8fCB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMubGFiZWxCb3hCa2dDb2xvciA9IHRoaXMubGFiZWxCb3hCa2dDb2xvciB8fCB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLnNpZ25hbENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gdGhpcy5zaWduYWxUZXh0Q29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yIHx8IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMubGFiZWxUZXh0Q29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmxvb3BUZXh0Q29sb3IgPSB0aGlzLmxvb3BUZXh0Q29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yIHx8IGRhcmtlbih0aGlzLnNlY29uZGFyeUNvbG9yLCAxMCk7XG4gICAgdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgPSB0aGlzLmFjdGl2YXRpb25Ca2dDb2xvciB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvciA9IHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvciB8fCBpbnZlcnQodGhpcy5saW5lQ29sb3IpO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5zZWN0aW9uQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgfHwgXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5zZWN0aW9uQmtnQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSB0aGlzLmV4Y2x1ZGVCa2dDb2xvciB8fCBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHRoaXMudGFza0JvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gdGhpcy50YXNrQmtnQ29sb3IgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yIHx8IGxpZ2h0ZW4odGhpcy5wcmltYXJ5Q29sb3IsIDIzKTtcbiAgICB0aGlzLmdyaWRDb2xvciA9IHRoaXMuZ3JpZENvbG9yIHx8IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gdGhpcy5kb25lVGFza0JrZ0NvbG9yIHx8IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gdGhpcy5kb25lVGFza0JvcmRlckNvbG9yIHx8IFwiZ3JleVwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gdGhpcy5jcml0Qm9yZGVyQ29sb3IgfHwgXCIjZmY4ODg4XCI7XG4gICAgdGhpcy5jcml0QmtnQ29sb3IgPSB0aGlzLmNyaXRCa2dDb2xvciB8fCBcInJlZFwiO1xuICAgIHRoaXMudG9kYXlMaW5lQ29sb3IgPSB0aGlzLnRvZGF5TGluZUNvbG9yIHx8IFwicmVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy50YXNrVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy50YXNrVGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0RGFya0NvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgfHwgXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5wZXJzb25Cb3JkZXIgPSB0aGlzLnBlcnNvbkJvcmRlciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnBlcnNvbkJrZyA9IHRoaXMucGVyc29uQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLnRyYW5zaXRpb25Db2xvciA9IHRoaXMudHJhbnNpdGlvbkNvbG9yIHx8IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVMYWJlbENvbG9yID0gdGhpcy5zdGF0ZUxhYmVsQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUJrZyA9IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5tYWluQmtnO1xuICAgIHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yIHx8IHRoaXMuc3RhdGVCa2c7XG4gICAgdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kID0gdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kIHx8IHRoaXMuYmFja2dyb3VuZCB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5hbHRCYWNrZ3JvdW5kID0gdGhpcy5hbHRCYWNrZ3JvdW5kIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSB0aGlzLmVycm9yQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSB0aGlzLmVycm9yVGV4dENvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAgfSk7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAgfSk7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIHRoaXMuY1NjYWxlNyA9IHRoaXMuY1NjYWxlNyB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDE1MCB9KTtcbiAgICB0aGlzLmNTY2FsZTggPSB0aGlzLmNTY2FsZTggfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAsIGw6IDE1MCB9KTtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMDAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMzAgfSk7XG4gICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVcIiArIGldID0gZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCA3NSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVcIiArIGldID0gZGFya2VuKHRoaXNbXCJjU2NhbGVcIiArIGldLCAyNSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGludmVydCh0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tcImNTY2FsZVBlZXJcIiArIGldID0gdGhpc1tcImNTY2FsZVBlZXJcIiArIGldIHx8IGRhcmtlbih0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMTApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNjYWxlTGFiZWxDb2xvciA9IHRoaXMuc2NhbGVMYWJlbENvbG9yIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gPSB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldIHx8IHRoaXMuc2NhbGVMYWJlbENvbG9yO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aXBsaWVyID0gdGhpcy5kYXJrTW9kZSA/IC00IDogLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3QyKHRoaXMubWFpbkJrZywgeyBoOiAxODAsIHM6IC0xNSwgbDogbXVsdGlwbGllciAqICg1ICsgaSAqIDMpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0Mih0aGlzLm1haW5Ca2csIHsgaDogMTgwLCBzOiAtMTUsIGw6IG11bHRpcGxpZXIgKiAoOCArIGkgKiAzKSB9KTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLmNsYXNzVGV4dCB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMCA9IHRoaXMuZmlsbFR5cGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUxID0gdGhpcy5maWxsVHlwZTEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMiA9IHRoaXMuZmlsbFR5cGUyIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTMgPSB0aGlzLmZpbGxUeXBlMyB8fCBhZGp1c3QyKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTQgPSB0aGlzLmZpbGxUeXBlNCB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNSA9IHRoaXMuZmlsbFR5cGU1IHx8IGFkanVzdDIodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTYgPSB0aGlzLmZpbGxUeXBlNiB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNyA9IHRoaXMuZmlsbFR5cGU3IHx8IGFkanVzdDIodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5waWUxID0gdGhpcy5waWUxIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucGllMiA9IHRoaXMucGllMiB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMucGllMyA9IHRoaXMucGllMyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5waWU0ID0gdGhpcy5waWU0IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgbDogLTEwIH0pO1xuICAgIHRoaXMucGllNSA9IHRoaXMucGllNSB8fCBhZGp1c3QyKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgbDogLTEwIH0pO1xuICAgIHRoaXMucGllNiA9IHRoaXMucGllNiB8fCBhZGp1c3QyKHRoaXMudGVydGlhcnlDb2xvciwgeyBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU3ID0gdGhpcy5waWU3IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTggPSB0aGlzLnBpZTggfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTkgPSB0aGlzLnBpZTkgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IDAgfSk7XG4gICAgdGhpcy5waWUxMCA9IHRoaXMucGllMTAgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCwgbDogLTIwIH0pO1xuICAgIHRoaXMucGllMTEgPSB0aGlzLnBpZTExIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtMjAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLmFyY2hFZGdlQ29sb3IgPSB0aGlzLmFyY2hFZGdlQ29sb3IgfHwgXCIjNzc3XCI7XG4gICAgdGhpcy5hcmNoRWRnZUFycm93Q29sb3IgPSB0aGlzLmFyY2hFZGdlQXJyb3dDb2xvciB8fCBcIiM3NzdcIjtcbiAgICB0aGlzLmFyY2hFZGdlV2lkdGggPSB0aGlzLmFyY2hFZGdlV2lkdGggfHwgXCIzXCI7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvciA9IHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3IgfHwgXCIjMDAwXCI7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aCA9IHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogNSwgZzogNSwgYjogNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M0ZpbGwgPSB0aGlzLnF1YWRyYW50M0ZpbGwgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdDIodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC01LCBnOiAtNSwgYjogLTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyayh0aGlzLnF1YWRyYW50MUZpbGwpID8gbGlnaHRlbih0aGlzLnF1YWRyYW50MUZpbGwpIDogZGFya2VuKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMFwiXG4gICAgfTtcbiAgICB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCA9IHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplIHx8IFwiMVwiO1xuICAgIHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgPSB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uQ29sb3IgPSB0aGlzLnJlbGF0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCA9IHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgfHwgKHRoaXMuZGFya01vZGUgPyBkYXJrZW4odGhpcy5zZWNvbmRhcnlDb2xvciwgMzApIDogdGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IHRoaXMuZ2l0MCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmdpdDEgPSB0aGlzLmdpdDEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDIgPSB0aGlzLmdpdDIgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MyA9IHRoaXMuZ2l0MyB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0zMCB9KTtcbiAgICB0aGlzLmdpdDQgPSB0aGlzLmdpdDQgfHwgYWRqdXN0Mih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSk7XG4gICAgdGhpcy5naXQ1ID0gdGhpcy5naXQ1IHx8IGFkanVzdDIodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwIH0pO1xuICAgIHRoaXMuZ2l0NiA9IHRoaXMuZ2l0NiB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuZ2l0NyA9IHRoaXMuZ2l0NyB8fCBhZGp1c3QyKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KTtcbiAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgdGhpcy5naXQwID0gbGlnaHRlbih0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGxpZ2h0ZW4odGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBsaWdodGVuKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gbGlnaHRlbih0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGxpZ2h0ZW4odGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBsaWdodGVuKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gbGlnaHRlbih0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGxpZ2h0ZW4odGhpcy5naXQ3LCAyNSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGRhcmtlbih0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGRhcmtlbih0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGRhcmtlbih0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGRhcmtlbih0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGRhcmtlbih0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGRhcmtlbih0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGRhcmtlbih0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGRhcmtlbih0aGlzLmdpdDcsIDI1KTtcbiAgICB9XG4gICAgdGhpcy5naXRJbnYwID0gdGhpcy5naXRJbnYwIHx8IGludmVydCh0aGlzLmdpdDApO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQodGhpcy5naXQxKTtcbiAgICB0aGlzLmdpdEludjIgPSB0aGlzLmdpdEludjIgfHwgaW52ZXJ0KHRoaXMuZ2l0Mik7XG4gICAgdGhpcy5naXRJbnYzID0gdGhpcy5naXRJbnYzIHx8IGludmVydCh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQodGhpcy5naXQ0KTtcbiAgICB0aGlzLmdpdEludjUgPSB0aGlzLmdpdEludjUgfHwgaW52ZXJ0KHRoaXMuZ2l0NSk7XG4gICAgdGhpcy5naXRJbnY2ID0gdGhpcy5naXRJbnY2IHx8IGludmVydCh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQodGhpcy5naXQ3KTtcbiAgICB0aGlzLmJyYW5jaExhYmVsQ29sb3IgPSB0aGlzLmJyYW5jaExhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwwIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwxIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMyA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwzIHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw0IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw2IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNyA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw3IHx8IHRoaXMuYnJhbmNoTGFiZWxDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBnZXRUaGVtZVZhcmlhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVzZXJPdmVycmlkZXMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSBuZXcgVGhlbWUoKTtcbiAgdGhlbWUuY2FsY3VsYXRlKHVzZXJPdmVycmlkZXMpO1xuICByZXR1cm4gdGhlbWU7XG59LCBcImdldFRoZW1lVmFyaWFibGVzXCIpO1xuXG4vLyBzcmMvdGhlbWVzL3RoZW1lLWRhcmsuanNcbmltcG9ydCB7IGFkanVzdCBhcyBhZGp1c3QzLCBkYXJrZW4gYXMgZGFya2VuMiwgaW52ZXJ0IGFzIGludmVydDIsIGlzRGFyayBhcyBpc0RhcmsyLCBsaWdodGVuIGFzIGxpZ2h0ZW4yLCByZ2JhIH0gZnJvbSBcImtocm9tYVwiO1xudmFyIFRoZW1lMiA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJUaGVtZVwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIiMzMzNcIjtcbiAgICB0aGlzLnByaW1hcnlDb2xvciA9IFwiIzFmMjAyMFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBsaWdodGVuMih0aGlzLnByaW1hcnlDb2xvciwgMTYpO1xuICAgIHRoaXMudGVydGlhcnlDb2xvciA9IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTE2MCB9KTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IGludmVydDIodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQyKHRoaXMucHJpbWFyeUNvbG9yKTtcbiAgICB0aGlzLnNlY29uZGFyeVRleHRDb2xvciA9IGludmVydDIodGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IGludmVydDIodGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydDIodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IGludmVydDIodGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLm1haW5Ca2cgPSBcIiMxZjIwMjBcIjtcbiAgICB0aGlzLnNlY29uZEJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubWFpbkNvbnRyYXN0Q29sb3IgPSBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZGFya1RleHRDb2xvciA9IGxpZ2h0ZW4yKGludmVydDIoXCIjMzIzRDQ3XCIpLCAxMCk7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmJvcmRlcjEgPSBcIiNjY2NcIjtcbiAgICB0aGlzLmJvcmRlcjIgPSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xuICAgIHRoaXMuYXJyb3doZWFkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZCA9IFwiIzE4MTgxOFwiO1xuICAgIHRoaXMudGV4dENvbG9yID0gXCIjY2NjXCI7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiI0Y5RkZGRVwiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNpZ25hbENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmxhYmVsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVCa2dDb2xvciA9IFwiI2ZmZjVhZFwiO1xuICAgIHRoaXMubm90ZVRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IgPSBkYXJrZW4yKFwiI0VBRThEOVwiLCAzMCk7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSBcIiNFQUU4RDlcIjtcbiAgICB0aGlzLmV4Y2x1ZGVCa2dDb2xvciA9IGRhcmtlbjIodGhpcy5zZWN0aW9uQmtnQ29sb3IsIDEwKTtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHJnYmEoMjU1LCAyNTUsIDI1NSwgNzApO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSByZ2JhKDI1NSwgMjU1LCAyNTUsIDUwKTtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IFwiIzgxQjFEQlwiO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5kb25lVGFza0JvcmRlckNvbG9yID0gXCJncmV5XCI7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBcIiNFODM3MzdcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiI0U4MzczN1wiO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gXCIjREI1NzU3XCI7XG4gICAgdGhpcy5wZXJzb25Cb3JkZXIgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnBlcnNvbkJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmFyY2hFZGdlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFyY2hFZGdlQXJyb3dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYXJjaEVkZ2VXaWR0aCA9IFwiM1wiO1xuICAgIHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3IgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoID0gXCIycHhcIjtcbiAgICB0aGlzLmxhYmVsQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSBcIiNhNDQxNDFcIjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gXCIjZGRkXCI7XG4gIH1cbiAgdXBkYXRlQ29sb3JzKCkge1xuICAgIHRoaXMuc2Vjb25kQmtnID0gbGlnaHRlbjIodGhpcy5tYWluQmtnLCAxNik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuYXJyb3doZWFkQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMubm9kZUJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLm5vZGVCb3JkZXIgPSB0aGlzLmJvcmRlcjE7XG4gICAgdGhpcy5jbHVzdGVyQmtnID0gdGhpcy5zZWNvbmRCa2c7XG4gICAgdGhpcy5jbHVzdGVyQm9yZGVyID0gdGhpcy5ib3JkZXIyO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IGxpZ2h0ZW4yKHRoaXMubGFiZWxCYWNrZ3JvdW5kLCAyNSk7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLmFjdG9yQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYWN0b3JUZXh0Q29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLm5vdGVCb3JkZXJDb2xvciA9IHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSB0aGlzLnNlY29uZEJrZztcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLmFjdGl2YXRpb25Ca2dDb2xvciA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yID0gdGhpcy5iYWNrZ3JvdW5kO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gbGlnaHRlbjIodGhpcy5tYWluQmtnLCAyMyk7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gdGhpcy5kYXJrVGV4dENvbG9yO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gdGhpcy5tYWluQ29udHJhc3RDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSB0aGlzLm1haW5Db250cmFzdENvbG9yO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IHRoaXMubWFpbkNvbnRyYXN0Q29sb3I7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IHRoaXMuZGFya1RleHRDb2xvcjtcbiAgICB0aGlzLmFyY2hFZGdlQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmFyY2hFZGdlQXJyb3dDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciA9IHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5zdGF0ZUxhYmVsQ29sb3IgPSB0aGlzLnN0YXRlTGFiZWxDb2xvciB8fCB0aGlzLnN0YXRlQmtnIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlQmtnID0gdGhpcy5zdGF0ZUJrZyB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciA9IHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5zdGF0ZUJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQgfHwgdGhpcy5iYWNrZ3JvdW5kIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmFsdEJhY2tncm91bmQgPSB0aGlzLmFsdEJhY2tncm91bmQgfHwgXCIjNTU1XCI7XG4gICAgdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQgPSB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCB8fCB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5jb21wb3NpdGVCb3JkZXIgPSB0aGlzLmNvbXBvc2l0ZUJvcmRlciB8fCB0aGlzLm5vZGVCb3JkZXI7XG4gICAgdGhpcy5pbm5lckVuZEJhY2tncm91bmQgPSB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUwID0gdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTEgPSB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUyID0gYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlMyA9IGFkanVzdDModGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiA2NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNCA9IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU1ID0gYWRqdXN0Myh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNiA9IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU3ID0gYWRqdXN0Myh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmNTY2FsZTEgPSB0aGlzLmNTY2FsZTEgfHwgXCIjMGIwMDAwXCI7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IFwiIzRkMTAzN1wiO1xuICAgIHRoaXMuY1NjYWxlMyA9IHRoaXMuY1NjYWxlMyB8fCBcIiMzZjUyNThcIjtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgXCIjNGYyZjFiXCI7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IFwiIzZlMGEwYVwiO1xuICAgIHRoaXMuY1NjYWxlNiA9IHRoaXMuY1NjYWxlNiB8fCBcIiMzYjAwNDhcIjtcbiAgICB0aGlzLmNTY2FsZTcgPSB0aGlzLmNTY2FsZTcgfHwgXCIjOTk1YTAxXCI7XG4gICAgdGhpcy5jU2NhbGU4ID0gdGhpcy5jU2NhbGU4IHx8IFwiIzE1NDcwNlwiO1xuICAgIHRoaXMuY1NjYWxlOSA9IHRoaXMuY1NjYWxlOSB8fCBcIiMxNjE3MjJcIjtcbiAgICB0aGlzLmNTY2FsZTEwID0gdGhpcy5jU2NhbGUxMCB8fCBcIiMwMDI5NmZcIjtcbiAgICB0aGlzLmNTY2FsZTExID0gdGhpcy5jU2NhbGUxMSB8fCBcIiMwMTYyOWNcIjtcbiAgICB0aGlzLmNTY2FsZTEyID0gdGhpcy5jU2NhbGUxMiB8fCBcIiMwMTAwMjlcIjtcbiAgICB0aGlzLmNTY2FsZTAgPSB0aGlzLmNTY2FsZTAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmNTY2FsZTUgPSB0aGlzLmNTY2FsZTUgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA5MCB9KTtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTUwIH0pO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDIxMCB9KTtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMDAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMzAgfSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVJbnZcIiArIGldID0gdGhpc1tcImNTY2FsZUludlwiICsgaV0gfHwgaW52ZXJ0Mih0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbjIodGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3QzKHRoaXMubWFpbkJrZywgeyBoOiAzMCwgczogLTMwLCBsOiAtKC0xMCArIGkgKiA0KSB9KTtcbiAgICAgIHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVBlZXJcIiArIGldIHx8IGFkanVzdDModGhpcy5tYWluQmtnLCB7IGg6IDMwLCBzOiAtMzAsIGw6IC0oLTcgKyBpICogNCkgfSk7XG4gICAgfVxuICAgIHRoaXMuc2NhbGVMYWJlbENvbG9yID0gdGhpcy5zY2FsZUxhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wicGllXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVcIiArIGldO1xuICAgIH1cbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdDModGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogNSwgZzogNSwgYjogNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M0ZpbGwgPSB0aGlzLnF1YWRyYW50M0ZpbGwgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdDModGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC01LCBnOiAtNSwgYjogLTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyazIodGhpcy5xdWFkcmFudDFGaWxsKSA/IGxpZ2h0ZW4yKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4yKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiIzM0OThkYiwjMmVjYzcxLCNlNzRjM2MsI2YxYzQwZiwjYmRjM2M3LCNmZmZmZmYsIzM0NDk1ZSwjOWI1OWI2LCMxYWJjOWMsI2U2N2UyMlwiXG4gICAgfTtcbiAgICB0aGlzLnBhY2tldCA9IHtcbiAgICAgIHN0YXJ0Qnl0ZUNvbG9yOiB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICBlbmRCeXRlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGxhYmVsQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrU3Ryb2tlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrRmlsbENvbG9yOiB0aGlzLmJhY2tncm91bmRcbiAgICB9O1xuICAgIHRoaXMuY2xhc3NUZXh0ID0gdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kID0gdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgfHwgXCIxXCI7XG4gICAgdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVsYXRpb25Db2xvciA9IHRoaXMucmVsYXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCB8fCAodGhpcy5kYXJrTW9kZSA/IGRhcmtlbjIodGhpcy5zZWNvbmRhcnlDb2xvciwgMzApIDogdGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IGxpZ2h0ZW4yKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDIwKTtcbiAgICB0aGlzLmdpdDEgPSBsaWdodGVuMih0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvciwgMjApO1xuICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4yKHRoaXMucGllMyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3IsIDIwKTtcbiAgICB0aGlzLmdpdDMgPSBsaWdodGVuMih0aGlzLnBpZTQgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSksIDIwKTtcbiAgICB0aGlzLmdpdDQgPSBsaWdodGVuMih0aGlzLnBpZTUgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSksIDIwKTtcbiAgICB0aGlzLmdpdDUgPSBsaWdodGVuMih0aGlzLnBpZTYgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtOTAgfSksIDEwKTtcbiAgICB0aGlzLmdpdDYgPSBsaWdodGVuMih0aGlzLnBpZTcgfHwgYWRqdXN0Myh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KSwgMTApO1xuICAgIHRoaXMuZ2l0NyA9IGxpZ2h0ZW4yKHRoaXMucGllOCB8fCBhZGp1c3QzKHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KSwgMjApO1xuICAgIHRoaXMuZ2l0SW52MCA9IHRoaXMuZ2l0SW52MCB8fCBpbnZlcnQyKHRoaXMuZ2l0MCk7XG4gICAgdGhpcy5naXRJbnYxID0gdGhpcy5naXRJbnYxIHx8IGludmVydDIodGhpcy5naXQxKTtcbiAgICB0aGlzLmdpdEludjIgPSB0aGlzLmdpdEludjIgfHwgaW52ZXJ0Mih0aGlzLmdpdDIpO1xuICAgIHRoaXMuZ2l0SW52MyA9IHRoaXMuZ2l0SW52MyB8fCBpbnZlcnQyKHRoaXMuZ2l0Myk7XG4gICAgdGhpcy5naXRJbnY0ID0gdGhpcy5naXRJbnY0IHx8IGludmVydDIodGhpcy5naXQ0KTtcbiAgICB0aGlzLmdpdEludjUgPSB0aGlzLmdpdEludjUgfHwgaW52ZXJ0Mih0aGlzLmdpdDUpO1xuICAgIHRoaXMuZ2l0SW52NiA9IHRoaXMuZ2l0SW52NiB8fCBpbnZlcnQyKHRoaXMuZ2l0Nik7XG4gICAgdGhpcy5naXRJbnY3ID0gdGhpcy5naXRJbnY3IHx8IGludmVydDIodGhpcy5naXQ3KTtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMCA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwwIHx8IGludmVydDIodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDEgPSB0aGlzLmdpdEJyYW5jaExhYmVsMSB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwyID0gdGhpcy5naXRCcmFuY2hMYWJlbDIgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMyA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwzIHx8IGludmVydDIodGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDQgPSB0aGlzLmdpdEJyYW5jaExhYmVsNCB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5naXRCcmFuY2hMYWJlbDUgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw2IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDcgPSB0aGlzLmdpdEJyYW5jaExhYmVsNyB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgbGlnaHRlbjIodGhpcy5iYWNrZ3JvdW5kLCAxMik7XG4gICAgdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuIHx8IGxpZ2h0ZW4yKHRoaXMuYmFja2dyb3VuZCwgMik7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ub2RlQm9yZGVyIHx8IFwiIzk5OVwiO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xudmFyIGdldFRoZW1lVmFyaWFibGVzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVzZXJPdmVycmlkZXMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSBuZXcgVGhlbWUyKCk7XG4gIHRoZW1lLmNhbGN1bGF0ZSh1c2VyT3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHRoZW1lO1xufSwgXCJnZXRUaGVtZVZhcmlhYmxlc1wiKTtcblxuLy8gc3JjL3RoZW1lcy90aGVtZS1kZWZhdWx0LmpzXG5pbXBvcnQgeyBpbnZlcnQgYXMgaW52ZXJ0MywgbGlnaHRlbiBhcyBsaWdodGVuMywgcmdiYSBhcyByZ2JhMiwgYWRqdXN0IGFzIGFkanVzdDQsIGRhcmtlbiBhcyBkYXJrZW4zLCBpc0RhcmsgYXMgaXNEYXJrMyB9IGZyb20gXCJraHJvbWFcIjtcbnZhciBUaGVtZTMgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiVGhlbWVcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5wcmltYXJ5Q29sb3IgPSBcIiNFQ0VDRkZcIjtcbiAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IFwiI2ZmZmZkZVwiO1xuICAgIHRoaXMudGVydGlhcnlDb2xvciA9IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTE2MCB9KTtcbiAgICB0aGlzLnByaW1hcnlCb3JkZXJDb2xvciA9IG1rQm9yZGVyKHRoaXMucHJpbWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5zZWNvbmRhcnlDb2xvciwgdGhpcy5kYXJrTW9kZSk7XG4gICAgdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy50ZXJ0aWFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnByaW1hcnlUZXh0Q29sb3IgPSBpbnZlcnQzKHRoaXMucHJpbWFyeUNvbG9yKTtcbiAgICB0aGlzLnNlY29uZGFyeVRleHRDb2xvciA9IGludmVydDModGhpcy5zZWNvbmRhcnlDb2xvcik7XG4gICAgdGhpcy50ZXJ0aWFyeVRleHRDb2xvciA9IGludmVydDModGhpcy50ZXJ0aWFyeUNvbG9yKTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGludmVydDModGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLnRleHRDb2xvciA9IGludmVydDModGhpcy5iYWNrZ3JvdW5kKTtcbiAgICB0aGlzLmJhY2tncm91bmQgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5tYWluQmtnID0gXCIjRUNFQ0ZGXCI7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBcIiNmZmZmZGVcIjtcbiAgICB0aGlzLmxpbmVDb2xvciA9IFwiIzMzMzMzM1wiO1xuICAgIHRoaXMuYm9yZGVyMSA9IFwiIzkzNzBEQlwiO1xuICAgIHRoaXMuYm9yZGVyMiA9IFwiI2FhYWEzM1wiO1xuICAgIHRoaXMuYXJyb3doZWFkQ29sb3IgPSBcIiMzMzMzMzNcIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZCA9IFwicmdiYSgyMzIsMjMyLDIzMiwgMC44KVwiO1xuICAgIHRoaXMudGV4dENvbG9yID0gXCIjMzMzXCI7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnNlY3Rpb25Ca2dDb2xvcjIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmV4Y2x1ZGVCa2dDb2xvciA9IFwiI2VlZWVlZVwiO1xuICAgIHRoaXMudGFza0JvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNyaXRCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY3JpdEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gcmdiYTIoMTAyLCAxMDIsIDI1NSwgMC40OSk7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCIjZmZmNDAwXCI7XG4gICAgdGhpcy50YXNrQm9yZGVyQ29sb3IgPSBcIiM1MzRmYmNcIjtcbiAgICB0aGlzLnRhc2tCa2dDb2xvciA9IFwiIzhhOTBkZFwiO1xuICAgIHRoaXMudGFza1RleHRMaWdodENvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSBcImJsYWNrXCI7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvciA9IFwiIzAwMzE2M1wiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yID0gXCIjNTM0ZmJjXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3IgPSBcIiNiZmM3ZmZcIjtcbiAgICB0aGlzLmdyaWRDb2xvciA9IFwibGlnaHRncmV5XCI7XG4gICAgdGhpcy5kb25lVGFza0JrZ0NvbG9yID0gXCJsaWdodGdyZXlcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImdyZXlcIjtcbiAgICB0aGlzLmNyaXRCb3JkZXJDb2xvciA9IFwiI2ZmODg4OFwiO1xuICAgIHRoaXMuY3JpdEJrZ0NvbG9yID0gXCJyZWRcIjtcbiAgICB0aGlzLnRvZGF5TGluZUNvbG9yID0gXCJyZWRcIjtcbiAgICB0aGlzLnBlcnNvbkJvcmRlciA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucGVyc29uQmtnID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hcmNoRWRnZVdpZHRoID0gXCIzXCI7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvciA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGggPSBcIjJweFwiO1xuICAgIHRoaXMubGFiZWxDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gXCIjNTUyMjIyXCI7XG4gICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5jU2NhbGUwID0gdGhpcy5jU2NhbGUwIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMSA9IHRoaXMuY1NjYWxlMSB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUzID0gdGhpcy5jU2NhbGUzIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAgfSk7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAgfSk7XG4gICAgdGhpcy5jU2NhbGU1ID0gdGhpcy5jU2NhbGU1IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogOTAgfSk7XG4gICAgdGhpcy5jU2NhbGU2ID0gdGhpcy5jU2NhbGU2IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwIH0pO1xuICAgIHRoaXMuY1NjYWxlNyA9IHRoaXMuY1NjYWxlNyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDE1MCB9KTtcbiAgICB0aGlzLmNTY2FsZTggPSB0aGlzLmNTY2FsZTggfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyMTAgfSk7XG4gICAgdGhpcy5jU2NhbGU5ID0gdGhpcy5jU2NhbGU5IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMjcwIH0pO1xuICAgIHRoaXMuY1NjYWxlMTAgPSB0aGlzLmNTY2FsZTEwIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzAwIH0pO1xuICAgIHRoaXMuY1NjYWxlMTEgPSB0aGlzLmNTY2FsZTExIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMzMwIH0pO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMVwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMVwiXSB8fCBkYXJrZW4zKHRoaXMuc2Vjb25kYXJ5Q29sb3IsIDQ1KTtcbiAgICB0aGlzW1wiY1NjYWxlUGVlcjJcIl0gPSB0aGlzW1wiY1NjYWxlUGVlcjJcIl0gfHwgZGFya2VuMyh0aGlzLnRlcnRpYXJ5Q29sb3IsIDQwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZVwiICsgaV0gPSBkYXJrZW4zKHRoaXNbXCJjU2NhbGVcIiArIGldLCAxMCk7XG4gICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgZGFya2VuMyh0aGlzW1wiY1NjYWxlXCIgKyBpXSwgMjUpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUludlwiICsgaV0gPSB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSB8fCBhZGp1c3Q0KHRoaXNbXCJjU2NhbGVcIiArIGldLCB7IGg6IDE4MCB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIHRoaXNbXCJzdXJmYWNlXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlXCIgKyBpXSB8fCBhZGp1c3Q0KHRoaXMubWFpbkJrZywgeyBoOiAzMCwgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0NCh0aGlzLm1haW5Ca2csIHsgaDogMzAsIGw6IC0oNyArIGkgKiA1KSB9KTtcbiAgICB9XG4gICAgdGhpcy5zY2FsZUxhYmVsQ29sb3IgPSB0aGlzLnNjYWxlTGFiZWxDb2xvciAhPT0gXCJjYWxjdWxhdGVkXCIgJiYgdGhpcy5zY2FsZUxhYmVsQ29sb3IgPyB0aGlzLnNjYWxlTGFiZWxDb2xvciA6IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgaWYgKHRoaXMubGFiZWxUZXh0Q29sb3IgIT09IFwiY2FsY3VsYXRlZFwiKSB7XG4gICAgICB0aGlzLmNTY2FsZUxhYmVsMCA9IHRoaXMuY1NjYWxlTGFiZWwwIHx8IGludmVydDModGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgICB0aGlzLmNTY2FsZUxhYmVsMyA9IHRoaXMuY1NjYWxlTGFiZWwzIHx8IGludmVydDModGhpcy5sYWJlbFRleHRDb2xvcik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgICB0aGlzW1wiY1NjYWxlTGFiZWxcIiArIGldID0gdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQgPSB0aGlzLmxhYmVsQmFja2dyb3VuZDtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gbGlnaHRlbjModGhpcy5ib3JkZXIxLCAyMyk7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnNpZ25hbFRleHRDb2xvciA9IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLm5vdGVCb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmMGYwZjBcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5lcnJvckJrZ0NvbG9yID0gdGhpcy5lcnJvckJrZ0NvbG9yIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmVycm9yVGV4dENvbG9yID0gdGhpcy5lcnJvclRleHRDb2xvciB8fCB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudHJhbnNpdGlvbkNvbG9yID0gdGhpcy50cmFuc2l0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTAgPSB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMSA9IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTIgPSBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGUzID0gYWRqdXN0NCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU0ID0gYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTUgPSBhZGp1c3Q0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU2ID0gYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5maWxsVHlwZTcgPSBhZGp1c3Q0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIHRoaXMucGllMSA9IHRoaXMucGllMSB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnBpZTIgPSB0aGlzLnBpZTIgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLnBpZTMgPSB0aGlzLnBpZTMgfHwgYWRqdXN0NCh0aGlzLnRlcnRpYXJ5Q29sb3IsIHsgbDogLTQwIH0pO1xuICAgIHRoaXMucGllNCA9IHRoaXMucGllNCB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGw6IC0xMCB9KTtcbiAgICB0aGlzLnBpZTUgPSB0aGlzLnBpZTUgfHwgYWRqdXN0NCh0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGw6IC0zMCB9KTtcbiAgICB0aGlzLnBpZTYgPSB0aGlzLnBpZTYgfHwgYWRqdXN0NCh0aGlzLnRlcnRpYXJ5Q29sb3IsIHsgbDogLTIwIH0pO1xuICAgIHRoaXMucGllNyA9IHRoaXMucGllNyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwLCBsOiAtMjAgfSk7XG4gICAgdGhpcy5waWU4ID0gdGhpcy5waWU4IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWU5ID0gdGhpcy5waWU5IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWUxMCA9IHRoaXMucGllMTAgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCwgbDogLTQwIH0pO1xuICAgIHRoaXMucGllMTEgPSB0aGlzLnBpZTExIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwLCBsOiAtNDAgfSk7XG4gICAgdGhpcy5waWUxMiA9IHRoaXMucGllMTIgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAsIGw6IC0zMCB9KTtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dFNpemUgPSB0aGlzLnBpZVRpdGxlVGV4dFNpemUgfHwgXCIyNXB4XCI7XG4gICAgdGhpcy5waWVUaXRsZVRleHRDb2xvciA9IHRoaXMucGllVGl0bGVUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSA9IHRoaXMucGllU2VjdGlvblRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRDb2xvciA9IHRoaXMucGllU2VjdGlvblRleHRDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRTaXplID0gdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciA9IHRoaXMucGllTGVnZW5kVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTdHJva2VDb2xvciA9IHRoaXMucGllU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllU3Ryb2tlV2lkdGggPSB0aGlzLnBpZVN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoID0gdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoIHx8IFwiMnB4XCI7XG4gICAgdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yID0gdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZU9wYWNpdHkgPSB0aGlzLnBpZU9wYWNpdHkgfHwgXCIwLjdcIjtcbiAgICB0aGlzLnF1YWRyYW50MUZpbGwgPSB0aGlzLnF1YWRyYW50MUZpbGwgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJGaWxsID0gdGhpcy5xdWFkcmFudDJGaWxsIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogNSwgZzogNSwgYjogNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M0ZpbGwgPSB0aGlzLnF1YWRyYW50M0ZpbGwgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxMCwgZzogMTAsIGI6IDEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0RmlsbCA9IHRoaXMucXVhZHJhbnQ0RmlsbCB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDE1LCBnOiAxNSwgYjogMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDFUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MlRleHRGaWxsIHx8IGFkanVzdDQodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC01LCBnOiAtNSwgYjogLTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTEwLCBnOiAtMTAsIGI6IC0xMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NFRleHRGaWxsID0gdGhpcy5xdWFkcmFudDRUZXh0RmlsbCB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTUsIGc6IC0xNSwgYjogLTE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRGaWxsIHx8IGlzRGFyazModGhpcy5xdWFkcmFudDFGaWxsKSA/IGxpZ2h0ZW4zKHRoaXMucXVhZHJhbnQxRmlsbCkgOiBkYXJrZW4zKHRoaXMucXVhZHJhbnQxRmlsbCk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCA9IHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5xdWFkcmFudFRpdGxlRmlsbCA9IHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiI0VDRUNGRiwjODQ5M0E2LCNGRkMzQTAsI0RDRERFMSwjQjhFOTk0LCNEMUEzNkYsI0MzQ0RFNiwjRkZCNkMxLCM0OTYwNzgsI0Y4RjNFM1wiXG4gICAgfTtcbiAgICB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCA9IHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplIHx8IFwiMVwiO1xuICAgIHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgPSB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uQ29sb3IgPSB0aGlzLnJlbGF0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCA9IHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgfHwgdGhpcy5sYWJlbEJhY2tncm91bmQ7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IHRoaXMuZ2l0MCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmdpdDEgPSB0aGlzLmdpdDEgfHwgdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDIgPSB0aGlzLmdpdDIgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZ2l0MyA9IHRoaXMuZ2l0MyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC0zMCB9KTtcbiAgICB0aGlzLmdpdDQgPSB0aGlzLmdpdDQgfHwgYWRqdXN0NCh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjAgfSk7XG4gICAgdGhpcy5naXQ1ID0gdGhpcy5naXQ1IHx8IGFkanVzdDQodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTkwIH0pO1xuICAgIHRoaXMuZ2l0NiA9IHRoaXMuZ2l0NiB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwIH0pO1xuICAgIHRoaXMuZ2l0NyA9IHRoaXMuZ2l0NyB8fCBhZGp1c3Q0KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyMCB9KTtcbiAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgdGhpcy5naXQwID0gbGlnaHRlbjModGhpcy5naXQwLCAyNSk7XG4gICAgICB0aGlzLmdpdDEgPSBsaWdodGVuMyh0aGlzLmdpdDEsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MiA9IGxpZ2h0ZW4zKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gbGlnaHRlbjModGhpcy5naXQzLCAyNSk7XG4gICAgICB0aGlzLmdpdDQgPSBsaWdodGVuMyh0aGlzLmdpdDQsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NSA9IGxpZ2h0ZW4zKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gbGlnaHRlbjModGhpcy5naXQ2LCAyNSk7XG4gICAgICB0aGlzLmdpdDcgPSBsaWdodGVuMyh0aGlzLmdpdDcsIDI1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5naXQwID0gZGFya2VuMyh0aGlzLmdpdDAsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MSA9IGRhcmtlbjModGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBkYXJrZW4zKHRoaXMuZ2l0MiwgMjUpO1xuICAgICAgdGhpcy5naXQzID0gZGFya2VuMyh0aGlzLmdpdDMsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NCA9IGRhcmtlbjModGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBkYXJrZW4zKHRoaXMuZ2l0NSwgMjUpO1xuICAgICAgdGhpcy5naXQ2ID0gZGFya2VuMyh0aGlzLmdpdDYsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NyA9IGRhcmtlbjModGhpcy5naXQ3LCAyNSk7XG4gICAgfVxuICAgIHRoaXMuZ2l0SW52MCA9IHRoaXMuZ2l0SW52MCB8fCBkYXJrZW4zKGludmVydDModGhpcy5naXQwKSwgMjUpO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQzKHRoaXMuZ2l0MSk7XG4gICAgdGhpcy5naXRJbnYyID0gdGhpcy5naXRJbnYyIHx8IGludmVydDModGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0Myh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQzKHRoaXMuZ2l0NCk7XG4gICAgdGhpcy5naXRJbnY1ID0gdGhpcy5naXRJbnY1IHx8IGludmVydDModGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0Myh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQzKHRoaXMuZ2l0Nyk7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDAgPSB0aGlzLmdpdEJyYW5jaExhYmVsMCB8fCBpbnZlcnQzKHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDMgPSB0aGlzLmdpdEJyYW5jaExhYmVsMyB8fCBpbnZlcnQzKHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5naXRCcmFuY2hMYWJlbDQgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDYgPSB0aGlzLmdpdEJyYW5jaExhYmVsNiB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5naXRCcmFuY2hMYWJlbDcgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBnZXRUaGVtZVZhcmlhYmxlczMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lID0gbmV3IFRoZW1lMygpO1xuICB0aGVtZS5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTtcbn0sIFwiZ2V0VGhlbWVWYXJpYWJsZXNcIik7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtZm9yZXN0LmpzXG5pbXBvcnQgeyBhZGp1c3QgYXMgYWRqdXN0NSwgZGFya2VuIGFzIGRhcmtlbjQsIGludmVydCBhcyBpbnZlcnQ0LCBpc0RhcmsgYXMgaXNEYXJrNCwgbGlnaHRlbiBhcyBsaWdodGVuNCB9IGZyb20gXCJraHJvbWFcIjtcbnZhciBUaGVtZTQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiVGhlbWVcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5wcmltYXJ5Q29sb3IgPSBcIiNjZGU0OThcIjtcbiAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gXCIjY2RmZmIyXCI7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMubWFpbkJrZyA9IFwiI2NkZTQ5OFwiO1xuICAgIHRoaXMuc2Vjb25kQmtnID0gXCIjY2RmZmIyXCI7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcImdyZWVuXCI7XG4gICAgdGhpcy5ib3JkZXIxID0gXCIjMTM1NDBjXCI7XG4gICAgdGhpcy5ib3JkZXIyID0gXCIjNmVhYTQ5XCI7XG4gICAgdGhpcy5hcnJvd2hlYWRDb2xvciA9IFwiZ3JlZW5cIjtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnO1xuICAgIHRoaXMuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICB0aGlzLnRlcnRpYXJ5Q29sb3IgPSBsaWdodGVuNChcIiNjZGU0OThcIiwgMTApO1xuICAgIHRoaXMucHJpbWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5wcmltYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnNlY29uZGFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnRlcnRpYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMucHJpbWFyeVRleHRDb2xvciA9IGludmVydDQodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0NCh0aGlzLnNlY29uZGFyeUNvbG9yKTtcbiAgICB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yID0gaW52ZXJ0NCh0aGlzLnByaW1hcnlDb2xvcik7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBpbnZlcnQ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy50ZXh0Q29sb3IgPSBpbnZlcnQ0KHRoaXMuYmFja2dyb3VuZCk7XG4gICAgdGhpcy5USEVNRV9DT0xPUl9MSU1JVCA9IDEyO1xuICAgIHRoaXMubm9kZUJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm9kZUJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZGVmYXVsdExpbmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGl0bGVDb2xvciA9IFwiIzMzM1wiO1xuICAgIHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCA9IFwiI2U4ZThlOFwiO1xuICAgIHRoaXMuYWN0b3JCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvclRleHRDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiIzMzM1wiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCIjMzMzXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCIjMzI2OTMyXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiNmZmY1YWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCIjNmVhYTQ5XCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCIjNmVhYTQ5XCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCIjNDg3ZTNhXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IFwiYmxhY2tcIjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yID0gXCIjMDAzMTYzXCI7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuZ3JpZENvbG9yID0gXCJsaWdodGdyZXlcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImxpZ2h0Z3JleVwiO1xuICAgIHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvciA9IFwiZ3JleVwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gXCIjZmY4ODg4XCI7XG4gICAgdGhpcy5jcml0QmtnQ29sb3IgPSBcInJlZFwiO1xuICAgIHRoaXMudG9kYXlMaW5lQ29sb3IgPSBcInJlZFwiO1xuICAgIHRoaXMucGVyc29uQm9yZGVyID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5wZXJzb25Ca2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5hcmNoRWRnZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hcmNoRWRnZUFycm93Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFyY2hFZGdlV2lkdGggPSBcIjNcIjtcbiAgICB0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aCA9IFwiMnB4XCI7XG4gICAgdGhpcy5sYWJlbENvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMuZXJyb3JCa2dDb2xvciA9IFwiIzU1MjIyMlwiO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IGRhcmtlbjQodGhpcy5tYWluQmtnLCAyMCk7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQm94QmtnQ29sb3IgPSB0aGlzLmFjdG9yQmtnO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IHRoaXMuYWN0b3JUZXh0Q29sb3I7XG4gICAgdGhpcy5ub3RlQm9yZGVyQ29sb3IgPSB0aGlzLmJvcmRlcjI7XG4gICAgdGhpcy5ub3RlVGV4dENvbG9yID0gdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmFjdG9yTGluZUNvbG9yID0gdGhpcy5hY3RvckJvcmRlcjtcbiAgICB0aGlzLmNTY2FsZTAgPSB0aGlzLmNTY2FsZTAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jU2NhbGUyID0gdGhpcy5jU2NhbGUyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMCB9KTtcbiAgICB0aGlzLmNTY2FsZTQgPSB0aGlzLmNTY2FsZTQgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmNTY2FsZTUgPSB0aGlzLmNTY2FsZTUgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA5MCB9KTtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTUwIH0pO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDIxMCB9KTtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAyNzAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMDAgfSk7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAzMzAgfSk7XG4gICAgdGhpc1tcImNTY2FsZVBlZXIxXCJdID0gdGhpc1tcImNTY2FsZVBlZXIxXCJdIHx8IGRhcmtlbjQodGhpcy5zZWNvbmRhcnlDb2xvciwgNDUpO1xuICAgIHRoaXNbXCJjU2NhbGVQZWVyMlwiXSA9IHRoaXNbXCJjU2NhbGVQZWVyMlwiXSB8fCBkYXJrZW40KHRoaXMudGVydGlhcnlDb2xvciwgNDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlXCIgKyBpXSA9IGRhcmtlbjQodGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSB8fCBkYXJrZW40KHRoaXNbXCJjU2NhbGVcIiArIGldLCAyNSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wiY1NjYWxlSW52XCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVJbnZcIiArIGldIHx8IGFkanVzdDUodGhpc1tcImNTY2FsZVwiICsgaV0sIHsgaDogMTgwIH0pO1xuICAgIH1cbiAgICB0aGlzLnNjYWxlTGFiZWxDb2xvciA9IHRoaXMuc2NhbGVMYWJlbENvbG9yICE9PSBcImNhbGN1bGF0ZWRcIiAmJiB0aGlzLnNjYWxlTGFiZWxDb2xvciA/IHRoaXMuc2NhbGVMYWJlbENvbG9yIDogdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB0aGlzW1wic3VyZmFjZVwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVwiICsgaV0gfHwgYWRqdXN0NSh0aGlzLm1haW5Ca2csIHsgaDogMzAsIHM6IC0zMCwgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0NSh0aGlzLm1haW5Ca2csIHsgaDogMzAsIHM6IC0zMCwgbDogLSg4ICsgaSAqIDUpIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IHRoaXMuYm9yZGVyMTtcbiAgICB0aGlzLnRhc2tUZXh0Q29sb3IgPSB0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcjtcbiAgICB0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yID0gdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IHRoaXMudGFza0JvcmRlckNvbG9yO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gdGhpcy5tYWluQmtnO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmMGYwZjBcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmNvbXBvc2l0ZUJvcmRlciA9IHRoaXMuY29tcG9zaXRlQm9yZGVyIHx8IHRoaXMubm9kZUJvcmRlcjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuc3BlY2lhbFN0YXRlQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSB0aGlzLmVycm9yQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSB0aGlzLmVycm9yVGV4dENvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmNsYXNzVGV4dCA9IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMCA9IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMuZmlsbFR5cGUxID0gdGhpcy5zZWNvbmRhcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMiA9IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTMgPSBhZGp1c3Q1KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTQgPSBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02NCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNSA9IGFkanVzdDUodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTYgPSBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDEyOCB9KTtcbiAgICB0aGlzLmZpbGxUeXBlNyA9IGFkanVzdDUodGhpcy5zZWNvbmRhcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5waWUxID0gdGhpcy5waWUxIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucGllMiA9IHRoaXMucGllMiB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMucGllMyA9IHRoaXMucGllMyB8fCB0aGlzLnRlcnRpYXJ5Q29sb3I7XG4gICAgdGhpcy5waWU0ID0gdGhpcy5waWU0IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgbDogLTMwIH0pO1xuICAgIHRoaXMucGllNSA9IHRoaXMucGllNSB8fCBhZGp1c3Q1KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgbDogLTMwIH0pO1xuICAgIHRoaXMucGllNiA9IHRoaXMucGllNiB8fCBhZGp1c3Q1KHRoaXMudGVydGlhcnlDb2xvciwgeyBoOiA0MCwgbDogLTQwIH0pO1xuICAgIHRoaXMucGllNyA9IHRoaXMucGllNyB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDYwLCBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU4ID0gdGhpcy5waWU4IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwLCBsOiAtMTAgfSk7XG4gICAgdGhpcy5waWU5ID0gdGhpcy5waWU5IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwLCBsOiAwIH0pO1xuICAgIHRoaXMucGllMTAgPSB0aGlzLnBpZTEwIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogNjAsIGw6IC01MCB9KTtcbiAgICB0aGlzLnBpZTExID0gdGhpcy5waWUxMSB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC02MCwgbDogLTUwIH0pO1xuICAgIHRoaXMucGllMTIgPSB0aGlzLnBpZTEyIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogMTIwLCBsOiAtNTAgfSk7XG4gICAgdGhpcy5waWVUaXRsZVRleHRTaXplID0gdGhpcy5waWVUaXRsZVRleHRTaXplIHx8IFwiMjVweFwiO1xuICAgIHRoaXMucGllVGl0bGVUZXh0Q29sb3IgPSB0aGlzLnBpZVRpdGxlVGV4dENvbG9yIHx8IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgPSB0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZSB8fCBcIjE3cHhcIjtcbiAgICB0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3IgPSB0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3IgfHwgdGhpcy50ZXh0Q29sb3I7XG4gICAgdGhpcy5waWVMZWdlbmRUZXh0U2l6ZSA9IHRoaXMucGllTGVnZW5kVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgPSB0aGlzLnBpZUxlZ2VuZFRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZVN0cm9rZUNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICB0aGlzLnBpZVN0cm9rZVdpZHRoID0gdGhpcy5waWVTdHJva2VXaWR0aCB8fCBcIjJweFwiO1xuICAgIHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aCA9IHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aCB8fCBcIjJweFwiO1xuICAgIHRoaXMucGllT3V0ZXJTdHJva2VDb2xvciA9IHRoaXMucGllT3V0ZXJTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVPcGFjaXR5ID0gdGhpcy5waWVPcGFjaXR5IHx8IFwiMC43XCI7XG4gICAgdGhpcy5xdWFkcmFudDFGaWxsID0gdGhpcy5xdWFkcmFudDFGaWxsIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucXVhZHJhbnQyRmlsbCA9IHRoaXMucXVhZHJhbnQyRmlsbCB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDUsIGc6IDUsIGI6IDUgfSk7XG4gICAgdGhpcy5xdWFkcmFudDNGaWxsID0gdGhpcy5xdWFkcmFudDNGaWxsIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTAsIGc6IDEwLCBiOiAxMCB9KTtcbiAgICB0aGlzLnF1YWRyYW50NEZpbGwgPSB0aGlzLnF1YWRyYW50NEZpbGwgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyByOiAxNSwgZzogMTUsIGI6IDE1IH0pO1xuICAgIHRoaXMucXVhZHJhbnQxVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50MVRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MlRleHRGaWxsID0gdGhpcy5xdWFkcmFudDJUZXh0RmlsbCB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtNSwgZzogLTUsIGI6IC01IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzVGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50M1RleHRGaWxsIHx8IGFkanVzdDUodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xMCwgZzogLTEwLCBiOiAtMTAgfSk7XG4gICAgdGhpcy5xdWFkcmFudDRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQ0VGV4dEZpbGwgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTE1LCBnOiAtMTUsIGI6IC0xNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRGaWxsID0gdGhpcy5xdWFkcmFudFBvaW50RmlsbCB8fCBpc0Rhcms0KHRoaXMucXVhZHJhbnQxRmlsbCkgPyBsaWdodGVuNCh0aGlzLnF1YWRyYW50MUZpbGwpIDogZGFya2VuNCh0aGlzLnF1YWRyYW50MUZpbGwpO1xuICAgIHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsID0gdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsID0gdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsID0gdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwgPSB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwgPSB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucXVhZHJhbnRUaXRsZUZpbGwgPSB0aGlzLnF1YWRyYW50VGl0bGVGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnBhY2tldCA9IHtcbiAgICAgIHN0YXJ0Qnl0ZUNvbG9yOiB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICBlbmRCeXRlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGxhYmVsQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrU3Ryb2tlQ29sb3I6IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIGJsb2NrRmlsbENvbG9yOiB0aGlzLm1haW5Ca2dcbiAgICB9O1xuICAgIHRoaXMueHlDaGFydCA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3IgfHwgdGhpcy5iYWNrZ3JvdW5kLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpdGxlQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzTGFiZWxDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNUaWNrQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMaW5lQ29sb3I6IHRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgcGxvdENvbG9yUGFsZXR0ZTogdGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlIHx8IFwiI0NERTQ5OCwjRkY2QjZCLCNBMEQyREIsI0Q3QkRFMiwjRjBGMEYwLCNGRkMzQTAsIzdGRDhCRSwjRkY5QThCLCNGQUYzRTAsI0ZGRjE3NlwiXG4gICAgfTtcbiAgICB0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZCA9IHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kIHx8IHRoaXMucHJpbWFyeUNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvciB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSA9IHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplIHx8IFwiMVwiO1xuICAgIHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgPSB0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uQ29sb3IgPSB0aGlzLnJlbGF0aW9uQ29sb3IgfHwgdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCA9IHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQgfHwgdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kO1xuICAgIHRoaXMucmVsYXRpb25MYWJlbENvbG9yID0gdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgfHwgdGhpcy5hY3RvclRleHRDb2xvcjtcbiAgICB0aGlzLmdpdDAgPSB0aGlzLmdpdDAgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQxID0gdGhpcy5naXQxIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQyID0gdGhpcy5naXQyIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDMgPSB0aGlzLmdpdDMgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSk7XG4gICAgdGhpcy5naXQ0ID0gdGhpcy5naXQ0IHx8IGFkanVzdDUodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwIH0pO1xuICAgIHRoaXMuZ2l0NSA9IHRoaXMuZ2l0NSB8fCBhZGp1c3Q1KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KTtcbiAgICB0aGlzLmdpdDYgPSB0aGlzLmdpdDYgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmdpdDcgPSB0aGlzLmdpdDcgfHwgYWRqdXN0NSh0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGxpZ2h0ZW40KHRoaXMuZ2l0MCwgMjUpO1xuICAgICAgdGhpcy5naXQxID0gbGlnaHRlbjQodGhpcy5naXQxLCAyNSk7XG4gICAgICB0aGlzLmdpdDIgPSBsaWdodGVuNCh0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGxpZ2h0ZW40KHRoaXMuZ2l0MywgMjUpO1xuICAgICAgdGhpcy5naXQ0ID0gbGlnaHRlbjQodGhpcy5naXQ0LCAyNSk7XG4gICAgICB0aGlzLmdpdDUgPSBsaWdodGVuNCh0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGxpZ2h0ZW40KHRoaXMuZ2l0NiwgMjUpO1xuICAgICAgdGhpcy5naXQ3ID0gbGlnaHRlbjQodGhpcy5naXQ3LCAyNSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2l0MCA9IGRhcmtlbjQodGhpcy5naXQwLCAyNSk7XG4gICAgICB0aGlzLmdpdDEgPSBkYXJrZW40KHRoaXMuZ2l0MSwgMjUpO1xuICAgICAgdGhpcy5naXQyID0gZGFya2VuNCh0aGlzLmdpdDIsIDI1KTtcbiAgICAgIHRoaXMuZ2l0MyA9IGRhcmtlbjQodGhpcy5naXQzLCAyNSk7XG4gICAgICB0aGlzLmdpdDQgPSBkYXJrZW40KHRoaXMuZ2l0NCwgMjUpO1xuICAgICAgdGhpcy5naXQ1ID0gZGFya2VuNCh0aGlzLmdpdDUsIDI1KTtcbiAgICAgIHRoaXMuZ2l0NiA9IGRhcmtlbjQodGhpcy5naXQ2LCAyNSk7XG4gICAgICB0aGlzLmdpdDcgPSBkYXJrZW40KHRoaXMuZ2l0NywgMjUpO1xuICAgIH1cbiAgICB0aGlzLmdpdEludjAgPSB0aGlzLmdpdEludjAgfHwgaW52ZXJ0NCh0aGlzLmdpdDApO1xuICAgIHRoaXMuZ2l0SW52MSA9IHRoaXMuZ2l0SW52MSB8fCBpbnZlcnQ0KHRoaXMuZ2l0MSk7XG4gICAgdGhpcy5naXRJbnYyID0gdGhpcy5naXRJbnYyIHx8IGludmVydDQodGhpcy5naXQyKTtcbiAgICB0aGlzLmdpdEludjMgPSB0aGlzLmdpdEludjMgfHwgaW52ZXJ0NCh0aGlzLmdpdDMpO1xuICAgIHRoaXMuZ2l0SW52NCA9IHRoaXMuZ2l0SW52NCB8fCBpbnZlcnQ0KHRoaXMuZ2l0NCk7XG4gICAgdGhpcy5naXRJbnY1ID0gdGhpcy5naXRJbnY1IHx8IGludmVydDQodGhpcy5naXQ1KTtcbiAgICB0aGlzLmdpdEludjYgPSB0aGlzLmdpdEludjYgfHwgaW52ZXJ0NCh0aGlzLmdpdDYpO1xuICAgIHRoaXMuZ2l0SW52NyA9IHRoaXMuZ2l0SW52NyB8fCBpbnZlcnQ0KHRoaXMuZ2l0Nyk7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDAgPSB0aGlzLmdpdEJyYW5jaExhYmVsMCB8fCBpbnZlcnQ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gdGhpcy5naXRCcmFuY2hMYWJlbDEgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsMiA9IHRoaXMuZ2l0QnJhbmNoTGFiZWwyIHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDMgPSB0aGlzLmdpdEJyYW5jaExhYmVsMyB8fCBpbnZlcnQ0KHRoaXMubGFiZWxUZXh0Q29sb3IpO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5naXRCcmFuY2hMYWJlbDQgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLmdpdEJyYW5jaExhYmVsNSA9IHRoaXMuZ2l0QnJhbmNoTGFiZWw1IHx8IHRoaXMubGFiZWxUZXh0Q29sb3I7XG4gICAgdGhpcy5naXRCcmFuY2hMYWJlbDYgPSB0aGlzLmdpdEJyYW5jaExhYmVsNiB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5naXRCcmFuY2hMYWJlbDcgfHwgdGhpcy5sYWJlbFRleHRDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQ29sb3IgPSB0aGlzLnRhZ0xhYmVsQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy50YWdMYWJlbEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJvcmRlciA9IHRoaXMudGFnQm9yZGVyIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxGb250U2l6ZSA9IHRoaXMudGFnTGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQ29sb3IgPSB0aGlzLmNvbW1pdExhYmVsQ29sb3IgfHwgdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQgPSB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnNlY29uZGFyeUNvbG9yO1xuICAgIHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSA9IHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZSB8fCBcIjEwcHhcIjtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZCA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkIHx8IG9sZEF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZDtcbiAgICB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gPSB0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW4gfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbjtcbiAgfVxuICBjYWxjdWxhdGUob3ZlcnJpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbG9ycygpO1xuICAgIGtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgdGhpc1trXSA9IG92ZXJyaWRlc1trXTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBnZXRUaGVtZVZhcmlhYmxlczQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh1c2VyT3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHRoZW1lID0gbmV3IFRoZW1lNCgpO1xuICB0aGVtZS5jYWxjdWxhdGUodXNlck92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGVtZTtcbn0sIFwiZ2V0VGhlbWVWYXJpYWJsZXNcIik7XG5cbi8vIHNyYy90aGVtZXMvdGhlbWUtbmV1dHJhbC5qc1xuaW1wb3J0IHsgaW52ZXJ0IGFzIGludmVydDUsIGRhcmtlbiBhcyBkYXJrZW41LCBsaWdodGVuIGFzIGxpZ2h0ZW41LCBhZGp1c3QgYXMgYWRqdXN0NiwgaXNEYXJrIGFzIGlzRGFyazUgfSBmcm9tIFwia2hyb21hXCI7XG52YXIgVGhlbWU1ID0gY2xhc3Mge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlRoZW1lXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucHJpbWFyeUNvbG9yID0gXCIjZWVlXCI7XG4gICAgdGhpcy5jb250cmFzdCA9IFwiIzcwNzA3MFwiO1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29sb3IgPSBsaWdodGVuNSh0aGlzLmNvbnRyYXN0LCA1NSk7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gXCIjZmZmZmZmXCI7XG4gICAgdGhpcy50ZXJ0aWFyeUNvbG9yID0gYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMTYwIH0pO1xuICAgIHRoaXMucHJpbWFyeUJvcmRlckNvbG9yID0gbWtCb3JkZXIodGhpcy5wcmltYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnNlY29uZGFyeUNvbG9yLCB0aGlzLmRhcmtNb2RlKTtcbiAgICB0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IgPSBta0JvcmRlcih0aGlzLnRlcnRpYXJ5Q29sb3IsIHRoaXMuZGFya01vZGUpO1xuICAgIHRoaXMucHJpbWFyeVRleHRDb2xvciA9IGludmVydDUodGhpcy5wcmltYXJ5Q29sb3IpO1xuICAgIHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yID0gaW52ZXJ0NSh0aGlzLnNlY29uZGFyeUNvbG9yKTtcbiAgICB0aGlzLnRlcnRpYXJ5VGV4dENvbG9yID0gaW52ZXJ0NSh0aGlzLnRlcnRpYXJ5Q29sb3IpO1xuICAgIHRoaXMubGluZUNvbG9yID0gaW52ZXJ0NSh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMudGV4dENvbG9yID0gaW52ZXJ0NSh0aGlzLmJhY2tncm91bmQpO1xuICAgIHRoaXMubWFpbkJrZyA9IFwiI2VlZVwiO1xuICAgIHRoaXMuc2Vjb25kQmtnID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5saW5lQ29sb3IgPSBcIiM2NjZcIjtcbiAgICB0aGlzLmJvcmRlcjEgPSBcIiM5OTlcIjtcbiAgICB0aGlzLmJvcmRlcjIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGUgPSBcIiNmZmFcIjtcbiAgICB0aGlzLnRleHQgPSBcIiMzMzNcIjtcbiAgICB0aGlzLmNyaXRpY2FsID0gXCIjZDQyXCI7XG4gICAgdGhpcy5kb25lID0gXCIjYmJiXCI7XG4gICAgdGhpcy5hcnJvd2hlYWRDb2xvciA9IFwiIzMzMzMzM1wiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9ICdcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZic7XG4gICAgdGhpcy5mb250U2l6ZSA9IFwiMTZweFwiO1xuICAgIHRoaXMuVEhFTUVfQ09MT1JfTElNSVQgPSAxMjtcbiAgICB0aGlzLm5vZGVCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vZGVCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNsdXN0ZXJCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNsdXN0ZXJCb3JkZXIgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5hY3RvckJvcmRlciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0b3JCa2cgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hY3RvckxpbmVDb2xvciA9IHRoaXMuYWN0b3JCb3JkZXI7XG4gICAgdGhpcy5zaWduYWxDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuc2lnbmFsVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5sYWJlbFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubG9vcFRleHRDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvciA9IFwiIzY2NlwiO1xuICAgIHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yID0gXCIjZjRmNGY0XCI7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuc2VjdGlvbkJrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5leGNsdWRlQmtnQ29sb3IgPSBcIiNlZWVlZWVcIjtcbiAgICB0aGlzLnRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dExpZ2h0Q29sb3IgPSBcIndoaXRlXCI7XG4gICAgdGhpcy50YXNrVGV4dENvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50YXNrVGV4dERhcmtDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IgPSBcIiMwMDMxNjNcIjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5ncmlkQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQmtnQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMuY3JpdEJvcmRlckNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IFwiY2FsY3VsYXRlZFwiO1xuICAgIHRoaXMucGVyc29uQm9yZGVyID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5wZXJzb25Ca2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5hcmNoRWRnZUNvbG9yID0gXCJjYWxjdWxhdGVkXCI7XG4gICAgdGhpcy5hcmNoRWRnZUFycm93Q29sb3IgPSBcImNhbGN1bGF0ZWRcIjtcbiAgICB0aGlzLmFyY2hFZGdlV2lkdGggPSBcIjNcIjtcbiAgICB0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yID0gdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aCA9IFwiMnB4XCI7XG4gICAgdGhpcy5sYWJlbENvbG9yID0gXCJibGFja1wiO1xuICAgIHRoaXMuZXJyb3JCa2dDb2xvciA9IFwiIzU1MjIyMlwiO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSBcIiM1NTIyMjJcIjtcbiAgfVxuICB1cGRhdGVDb2xvcnMoKSB7XG4gICAgdGhpcy5zZWNvbmRCa2cgPSBsaWdodGVuNSh0aGlzLmNvbnRyYXN0LCA1NSk7XG4gICAgdGhpcy5ib3JkZXIyID0gdGhpcy5jb250cmFzdDtcbiAgICB0aGlzLmFjdG9yQm9yZGVyID0gbGlnaHRlbjUodGhpcy5ib3JkZXIxLCAyMyk7XG4gICAgdGhpcy5hY3RvckJrZyA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmFjdG9yVGV4dENvbG9yID0gdGhpcy50ZXh0O1xuICAgIHRoaXMuYWN0b3JMaW5lQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMuc2lnbmFsQ29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5zaWduYWxUZXh0Q29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5sYWJlbEJveEJrZ0NvbG9yID0gdGhpcy5hY3RvckJrZztcbiAgICB0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3IgPSB0aGlzLmFjdG9yQm9yZGVyO1xuICAgIHRoaXMubGFiZWxUZXh0Q29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5sb29wVGV4dENvbG9yID0gdGhpcy50ZXh0O1xuICAgIHRoaXMubm90ZUJvcmRlckNvbG9yID0gXCIjOTk5XCI7XG4gICAgdGhpcy5ub3RlQmtnQ29sb3IgPSBcIiM2NjZcIjtcbiAgICB0aGlzLm5vdGVUZXh0Q29sb3IgPSBcIiNmZmZcIjtcbiAgICB0aGlzLmNTY2FsZTAgPSB0aGlzLmNTY2FsZTAgfHwgXCIjNTU1XCI7XG4gICAgdGhpcy5jU2NhbGUxID0gdGhpcy5jU2NhbGUxIHx8IFwiI0Y0RjRGNFwiO1xuICAgIHRoaXMuY1NjYWxlMiA9IHRoaXMuY1NjYWxlMiB8fCBcIiM1NTVcIjtcbiAgICB0aGlzLmNTY2FsZTMgPSB0aGlzLmNTY2FsZTMgfHwgXCIjQkJCXCI7XG4gICAgdGhpcy5jU2NhbGU0ID0gdGhpcy5jU2NhbGU0IHx8IFwiIzc3N1wiO1xuICAgIHRoaXMuY1NjYWxlNSA9IHRoaXMuY1NjYWxlNSB8fCBcIiM5OTlcIjtcbiAgICB0aGlzLmNTY2FsZTYgPSB0aGlzLmNTY2FsZTYgfHwgXCIjREREXCI7XG4gICAgdGhpcy5jU2NhbGU3ID0gdGhpcy5jU2NhbGU3IHx8IFwiI0ZGRlwiO1xuICAgIHRoaXMuY1NjYWxlOCA9IHRoaXMuY1NjYWxlOCB8fCBcIiNERERcIjtcbiAgICB0aGlzLmNTY2FsZTkgPSB0aGlzLmNTY2FsZTkgfHwgXCIjQkJCXCI7XG4gICAgdGhpcy5jU2NhbGUxMCA9IHRoaXMuY1NjYWxlMTAgfHwgXCIjOTk5XCI7XG4gICAgdGhpcy5jU2NhbGUxMSA9IHRoaXMuY1NjYWxlMTEgfHwgXCIjNzc3XCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRIRU1FX0NPTE9SX0xJTUlUOyBpKyspIHtcbiAgICAgIHRoaXNbXCJjU2NhbGVJbnZcIiArIGldID0gdGhpc1tcImNTY2FsZUludlwiICsgaV0gfHwgaW52ZXJ0NSh0aGlzW1wiY1NjYWxlXCIgKyBpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXJrTW9kZSkge1xuICAgICAgICB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gPSB0aGlzW1wiY1NjYWxlUGVlclwiICsgaV0gfHwgbGlnaHRlbjUodGhpc1tcImNTY2FsZVwiICsgaV0sIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVQZWVyXCIgKyBpXSB8fCBkYXJrZW41KHRoaXNbXCJjU2NhbGVcIiArIGldLCAxMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2NhbGVMYWJlbENvbG9yID0gdGhpcy5zY2FsZUxhYmVsQ29sb3IgfHwgKHRoaXMuZGFya01vZGUgPyBcImJsYWNrXCIgOiB0aGlzLmxhYmVsVGV4dENvbG9yKTtcbiAgICB0aGlzLmNTY2FsZUxhYmVsMCA9IHRoaXMuY1NjYWxlTGFiZWwwIHx8IHRoaXMuY1NjYWxlMTtcbiAgICB0aGlzLmNTY2FsZUxhYmVsMiA9IHRoaXMuY1NjYWxlTGFiZWwyIHx8IHRoaXMuY1NjYWxlMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgICAgdGhpc1tcImNTY2FsZUxhYmVsXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVMYWJlbFwiICsgaV0gfHwgdGhpcy5zY2FsZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB0aGlzW1wic3VyZmFjZVwiICsgaV0gPSB0aGlzW1wic3VyZmFjZVwiICsgaV0gfHwgYWRqdXN0Nih0aGlzLm1haW5Ca2csIHsgbDogLSg1ICsgaSAqIDUpIH0pO1xuICAgICAgdGhpc1tcInN1cmZhY2VQZWVyXCIgKyBpXSA9IHRoaXNbXCJzdXJmYWNlUGVlclwiICsgaV0gfHwgYWRqdXN0Nih0aGlzLm1haW5Ca2csIHsgbDogLSg4ICsgaSAqIDUpIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGVCa2cgPSB0aGlzLm1haW5Ca2c7XG4gICAgdGhpcy5ub2RlQm9yZGVyID0gdGhpcy5ib3JkZXIxO1xuICAgIHRoaXMuY2x1c3RlckJrZyA9IHRoaXMuc2Vjb25kQmtnO1xuICAgIHRoaXMuY2x1c3RlckJvcmRlciA9IHRoaXMuYm9yZGVyMjtcbiAgICB0aGlzLmRlZmF1bHRMaW5rQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnRpdGxlQ29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IgPSBsaWdodGVuNSh0aGlzLmNvbnRyYXN0LCAzMCk7XG4gICAgdGhpcy5zZWN0aW9uQmtnQ29sb3IyID0gbGlnaHRlbjUodGhpcy5jb250cmFzdCwgMzApO1xuICAgIHRoaXMudGFza0JvcmRlckNvbG9yID0gZGFya2VuNSh0aGlzLmNvbnRyYXN0LCAxMCk7XG4gICAgdGhpcy50YXNrQmtnQ29sb3IgPSB0aGlzLmNvbnRyYXN0O1xuICAgIHRoaXMudGFza1RleHRDb2xvciA9IHRoaXMudGFza1RleHRMaWdodENvbG9yO1xuICAgIHRoaXMudGFza1RleHREYXJrQ29sb3IgPSB0aGlzLnRleHQ7XG4gICAgdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvciA9IHRoaXMudGFza1RleHREYXJrQ29sb3I7XG4gICAgdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3IgPSB0aGlzLnRhc2tCb3JkZXJDb2xvcjtcbiAgICB0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvciA9IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmdyaWRDb2xvciA9IGxpZ2h0ZW41KHRoaXMuYm9yZGVyMSwgMzApO1xuICAgIHRoaXMuZG9uZVRhc2tCa2dDb2xvciA9IHRoaXMuZG9uZTtcbiAgICB0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3IgPSB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLmNyaXRCa2dDb2xvciA9IHRoaXMuY3JpdGljYWw7XG4gICAgdGhpcy5jcml0Qm9yZGVyQ29sb3IgPSBkYXJrZW41KHRoaXMuY3JpdEJrZ0NvbG9yLCAxMCk7XG4gICAgdGhpcy50b2RheUxpbmVDb2xvciA9IHRoaXMuY3JpdEJrZ0NvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VDb2xvciA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yID0gdGhpcy5saW5lQ29sb3I7XG4gICAgdGhpcy50cmFuc2l0aW9uQ29sb3IgPSB0aGlzLnRyYW5zaXRpb25Db2xvciB8fCBcIiMwMDBcIjtcbiAgICB0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yID0gdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCB0aGlzLnRleHRDb2xvcjtcbiAgICB0aGlzLnN0YXRlTGFiZWxDb2xvciA9IHRoaXMuc3RhdGVMYWJlbENvbG9yIHx8IHRoaXMuc3RhdGVCa2cgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMuc3RhdGVCa2cgPSB0aGlzLnN0YXRlQmtnIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yID0gdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvciB8fCB0aGlzLnN0YXRlQmtnO1xuICAgIHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCB0aGlzLmJhY2tncm91bmQgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuYWx0QmFja2dyb3VuZCA9IHRoaXMuYWx0QmFja2dyb3VuZCB8fCBcIiNmNGY0ZjRcIjtcbiAgICB0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCA9IHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kIHx8IHRoaXMubWFpbkJrZztcbiAgICB0aGlzLnN0YXRlQm9yZGVyID0gdGhpcy5zdGF0ZUJvcmRlciB8fCBcIiMwMDBcIjtcbiAgICB0aGlzLmlubmVyRW5kQmFja2dyb3VuZCA9IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMuc3BlY2lhbFN0YXRlQ29sb3IgPSBcIiMyMjJcIjtcbiAgICB0aGlzLmVycm9yQmtnQ29sb3IgPSB0aGlzLmVycm9yQmtnQ29sb3IgfHwgdGhpcy50ZXJ0aWFyeUNvbG9yO1xuICAgIHRoaXMuZXJyb3JUZXh0Q29sb3IgPSB0aGlzLmVycm9yVGV4dENvbG9yIHx8IHRoaXMudGVydGlhcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5jbGFzc1RleHQgPSB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTAgPSB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLmZpbGxUeXBlMSA9IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5maWxsVHlwZTIgPSBhZGp1c3Q2KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGUzID0gYWRqdXN0Nih0aGlzLnNlY29uZGFyeUNvbG9yLCB7IGg6IDY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU0ID0gYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtNjQgfSk7XG4gICAgdGhpcy5maWxsVHlwZTUgPSBhZGp1c3Q2KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogLTY0IH0pO1xuICAgIHRoaXMuZmlsbFR5cGU2ID0gYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjggfSk7XG4gICAgdGhpcy5maWxsVHlwZTcgPSBhZGp1c3Q2KHRoaXMuc2Vjb25kYXJ5Q29sb3IsIHsgaDogMTI4IH0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgICB0aGlzW1wicGllXCIgKyBpXSA9IHRoaXNbXCJjU2NhbGVcIiArIGldO1xuICAgIH1cbiAgICB0aGlzLnBpZTEyID0gdGhpcy5waWUwO1xuICAgIHRoaXMucGllVGl0bGVUZXh0U2l6ZSA9IHRoaXMucGllVGl0bGVUZXh0U2l6ZSB8fCBcIjI1cHhcIjtcbiAgICB0aGlzLnBpZVRpdGxlVGV4dENvbG9yID0gdGhpcy5waWVUaXRsZVRleHRDb2xvciB8fCB0aGlzLnRhc2tUZXh0RGFya0NvbG9yO1xuICAgIHRoaXMucGllU2VjdGlvblRleHRTaXplID0gdGhpcy5waWVTZWN0aW9uVGV4dFNpemUgfHwgXCIxN3B4XCI7XG4gICAgdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yID0gdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yIHx8IHRoaXMudGV4dENvbG9yO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dFNpemUgPSB0aGlzLnBpZUxlZ2VuZFRleHRTaXplIHx8IFwiMTdweFwiO1xuICAgIHRoaXMucGllTGVnZW5kVGV4dENvbG9yID0gdGhpcy5waWVMZWdlbmRUZXh0Q29sb3IgfHwgdGhpcy50YXNrVGV4dERhcmtDb2xvcjtcbiAgICB0aGlzLnBpZVN0cm9rZUNvbG9yID0gdGhpcy5waWVTdHJva2VDb2xvciB8fCBcImJsYWNrXCI7XG4gICAgdGhpcy5waWVTdHJva2VXaWR0aCA9IHRoaXMucGllU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggPSB0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGggfHwgXCIycHhcIjtcbiAgICB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgPSB0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3IgfHwgXCJibGFja1wiO1xuICAgIHRoaXMucGllT3BhY2l0eSA9IHRoaXMucGllT3BhY2l0eSB8fCBcIjAuN1wiO1xuICAgIHRoaXMucXVhZHJhbnQxRmlsbCA9IHRoaXMucXVhZHJhbnQxRmlsbCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50MkZpbGwgPSB0aGlzLnF1YWRyYW50MkZpbGwgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyByOiA1LCBnOiA1LCBiOiA1IH0pO1xuICAgIHRoaXMucXVhZHJhbnQzRmlsbCA9IHRoaXMucXVhZHJhbnQzRmlsbCB8fCBhZGp1c3Q2KHRoaXMucHJpbWFyeUNvbG9yLCB7IHI6IDEwLCBnOiAxMCwgYjogMTAgfSk7XG4gICAgdGhpcy5xdWFkcmFudDRGaWxsID0gdGhpcy5xdWFkcmFudDRGaWxsIHx8IGFkanVzdDYodGhpcy5wcmltYXJ5Q29sb3IsIHsgcjogMTUsIGc6IDE1LCBiOiAxNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50MVRleHRGaWxsID0gdGhpcy5xdWFkcmFudDFUZXh0RmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy5xdWFkcmFudDJUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnQyVGV4dEZpbGwgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlUZXh0Q29sb3IsIHsgcjogLTUsIGc6IC01LCBiOiAtNSB9KTtcbiAgICB0aGlzLnF1YWRyYW50M1RleHRGaWxsID0gdGhpcy5xdWFkcmFudDNUZXh0RmlsbCB8fCBhZGp1c3Q2KHRoaXMucHJpbWFyeVRleHRDb2xvciwgeyByOiAtMTAsIGc6IC0xMCwgYjogLTEwIH0pO1xuICAgIHRoaXMucXVhZHJhbnQ0VGV4dEZpbGwgPSB0aGlzLnF1YWRyYW50NFRleHRGaWxsIHx8IGFkanVzdDYodGhpcy5wcmltYXJ5VGV4dENvbG9yLCB7IHI6IC0xNSwgZzogLTE1LCBiOiAtMTUgfSk7XG4gICAgdGhpcy5xdWFkcmFudFBvaW50RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludEZpbGwgfHwgaXNEYXJrNSh0aGlzLnF1YWRyYW50MUZpbGwpID8gbGlnaHRlbjUodGhpcy5xdWFkcmFudDFGaWxsKSA6IGRhcmtlbjUodGhpcy5xdWFkcmFudDFGaWxsKTtcbiAgICB0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCA9IHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsID0gdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCB8fCB0aGlzLnByaW1hcnlCb3JkZXJDb2xvcjtcbiAgICB0aGlzLnF1YWRyYW50VGl0bGVGaWxsID0gdGhpcy5xdWFkcmFudFRpdGxlRmlsbCB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy54eUNoYXJ0ID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvciB8fCB0aGlzLmJhY2tncm91bmQsXG4gICAgICB0aXRsZUNvbG9yOiB0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeEF4aXNUaXRsZUNvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB4QXhpc0xhYmVsQ29sb3I6IHRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzVGlja0NvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHhBeGlzTGluZUNvbG9yOiB0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yIHx8IHRoaXMucHJpbWFyeVRleHRDb2xvcixcbiAgICAgIHlBeGlzVGl0bGVDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yLFxuICAgICAgeUF4aXNMYWJlbENvbG9yOiB0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc1RpY2tDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICB5QXhpc0xpbmVDb2xvcjogdGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3IsXG4gICAgICBwbG90Q29sb3JQYWxldHRlOiB0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGUgfHwgXCIjRUVFLCM2QkI4RTQsIzhBQ0I4OCwjQzdBQ0Q2LCNFOERDQzIsI0ZGQjJBOCwjRkZGMzgwLCM3RThEOTEsI0ZGRDhCMSwjRkFGM0UwXCJcbiAgICB9O1xuICAgIHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kID0gdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yIHx8IHRoaXMucHJpbWFyeUJvcmRlckNvbG9yO1xuICAgIHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplID0gdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemUgfHwgXCIxXCI7XG4gICAgdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvciA9IHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3IgfHwgdGhpcy5wcmltYXJ5VGV4dENvbG9yO1xuICAgIHRoaXMucmVsYXRpb25Db2xvciA9IHRoaXMucmVsYXRpb25Db2xvciB8fCB0aGlzLmxpbmVDb2xvcjtcbiAgICB0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kID0gdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZCB8fCB0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ7XG4gICAgdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3IgPSB0aGlzLnJlbGF0aW9uTGFiZWxDb2xvciB8fCB0aGlzLmFjdG9yVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0MCA9IGRhcmtlbjUodGhpcy5waWUxLCAyNSkgfHwgdGhpcy5wcmltYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQxID0gdGhpcy5waWUyIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5naXQyID0gdGhpcy5waWUzIHx8IHRoaXMudGVydGlhcnlDb2xvcjtcbiAgICB0aGlzLmdpdDMgPSB0aGlzLnBpZTQgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAtMzAgfSk7XG4gICAgdGhpcy5naXQ0ID0gdGhpcy5waWU1IHx8IGFkanVzdDYodGhpcy5wcmltYXJ5Q29sb3IsIHsgaDogLTYwIH0pO1xuICAgIHRoaXMuZ2l0NSA9IHRoaXMucGllNiB8fCBhZGp1c3Q2KHRoaXMucHJpbWFyeUNvbG9yLCB7IGg6IC05MCB9KTtcbiAgICB0aGlzLmdpdDYgPSB0aGlzLnBpZTcgfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiA2MCB9KTtcbiAgICB0aGlzLmdpdDcgPSB0aGlzLnBpZTggfHwgYWRqdXN0Nih0aGlzLnByaW1hcnlDb2xvciwgeyBoOiAxMjAgfSk7XG4gICAgdGhpcy5naXRJbnYwID0gdGhpcy5naXRJbnYwIHx8IGludmVydDUodGhpcy5naXQwKTtcbiAgICB0aGlzLmdpdEludjEgPSB0aGlzLmdpdEludjEgfHwgaW52ZXJ0NSh0aGlzLmdpdDEpO1xuICAgIHRoaXMuZ2l0SW52MiA9IHRoaXMuZ2l0SW52MiB8fCBpbnZlcnQ1KHRoaXMuZ2l0Mik7XG4gICAgdGhpcy5naXRJbnYzID0gdGhpcy5naXRJbnYzIHx8IGludmVydDUodGhpcy5naXQzKTtcbiAgICB0aGlzLmdpdEludjQgPSB0aGlzLmdpdEludjQgfHwgaW52ZXJ0NSh0aGlzLmdpdDQpO1xuICAgIHRoaXMuZ2l0SW52NSA9IHRoaXMuZ2l0SW52NSB8fCBpbnZlcnQ1KHRoaXMuZ2l0NSk7XG4gICAgdGhpcy5naXRJbnY2ID0gdGhpcy5naXRJbnY2IHx8IGludmVydDUodGhpcy5naXQ2KTtcbiAgICB0aGlzLmdpdEludjcgPSB0aGlzLmdpdEludjcgfHwgaW52ZXJ0NSh0aGlzLmdpdDcpO1xuICAgIHRoaXMuYnJhbmNoTGFiZWxDb2xvciA9IHRoaXMuYnJhbmNoTGFiZWxDb2xvciB8fCB0aGlzLmxhYmVsVGV4dENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwwID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwxID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwyID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWwzID0gXCJ3aGl0ZVwiO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw0ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw1ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw2ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMuZ2l0QnJhbmNoTGFiZWw3ID0gdGhpcy5icmFuY2hMYWJlbENvbG9yO1xuICAgIHRoaXMudGFnTGFiZWxDb2xvciA9IHRoaXMudGFnTGFiZWxDb2xvciB8fCB0aGlzLnByaW1hcnlUZXh0Q29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEJhY2tncm91bmQgPSB0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZCB8fCB0aGlzLnByaW1hcnlDb2xvcjtcbiAgICB0aGlzLnRhZ0xhYmVsQm9yZGVyID0gdGhpcy50YWdCb3JkZXIgfHwgdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I7XG4gICAgdGhpcy50YWdMYWJlbEZvbnRTaXplID0gdGhpcy50YWdMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuY29tbWl0TGFiZWxDb2xvciA9IHRoaXMuY29tbWl0TGFiZWxDb2xvciB8fCB0aGlzLnNlY29uZGFyeVRleHRDb2xvcjtcbiAgICB0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZCA9IHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kIHx8IHRoaXMuc2Vjb25kYXJ5Q29sb3I7XG4gICAgdGhpcy5jb21taXRMYWJlbEZvbnRTaXplID0gdGhpcy5jb21taXRMYWJlbEZvbnRTaXplIHx8IFwiMTBweFwiO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkID0gdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQgfHwgb2xkQXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkO1xuICAgIHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiA9IHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbiB8fCBvbGRBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuO1xuICB9XG4gIGNhbGN1bGF0ZShvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy51cGRhdGVDb2xvcnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ29sb3JzKCk7XG4gICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICB0aGlzW2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgIH0pO1xuICB9XG59O1xudmFyIGdldFRoZW1lVmFyaWFibGVzNSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHVzZXJPdmVycmlkZXMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSBuZXcgVGhlbWU1KCk7XG4gIHRoZW1lLmNhbGN1bGF0ZSh1c2VyT3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHRoZW1lO1xufSwgXCJnZXRUaGVtZVZhcmlhYmxlc1wiKTtcblxuLy8gc3JjL3RoZW1lcy9pbmRleC5qc1xudmFyIHRoZW1lc19kZWZhdWx0ID0ge1xuICBiYXNlOiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXNcbiAgfSxcbiAgZGFyazoge1xuICAgIGdldFRoZW1lVmFyaWFibGVzOiBnZXRUaGVtZVZhcmlhYmxlczJcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGdldFRoZW1lVmFyaWFibGVzOiBnZXRUaGVtZVZhcmlhYmxlczNcbiAgfSxcbiAgZm9yZXN0OiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXM6IGdldFRoZW1lVmFyaWFibGVzNFxuICB9LFxuICBuZXV0cmFsOiB7XG4gICAgZ2V0VGhlbWVWYXJpYWJsZXM6IGdldFRoZW1lVmFyaWFibGVzNVxuICB9XG59O1xuXG4vLyBzcmMvc2NoZW1hcy9jb25maWcuc2NoZW1hLnlhbWw/b25seS1kZWZhdWx0cz10cnVlXG52YXIgY29uZmlnX3NjaGVtYV9kZWZhdWx0ID0ge1xuICBcImZsb3djaGFydFwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwidGl0bGVUb3BNYXJnaW5cIjogMjUsXG4gICAgXCJzdWJHcmFwaFRpdGxlTWFyZ2luXCI6IHtcbiAgICAgIFwidG9wXCI6IDAsXG4gICAgICBcImJvdHRvbVwiOiAwXG4gICAgfSxcbiAgICBcImRpYWdyYW1QYWRkaW5nXCI6IDgsXG4gICAgXCJodG1sTGFiZWxzXCI6IHRydWUsXG4gICAgXCJub2RlU3BhY2luZ1wiOiA1MCxcbiAgICBcInJhbmtTcGFjaW5nXCI6IDUwLFxuICAgIFwiY3VydmVcIjogXCJiYXNpc1wiLFxuICAgIFwicGFkZGluZ1wiOiAxNSxcbiAgICBcImRlZmF1bHRSZW5kZXJlclwiOiBcImRhZ3JlLXdyYXBwZXJcIixcbiAgICBcIndyYXBwaW5nV2lkdGhcIjogMjAwXG4gIH0sXG4gIFwic2VxdWVuY2VcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcImhpZGVVbnVzZWRQYXJ0aWNpcGFudHNcIjogZmFsc2UsXG4gICAgXCJhY3RpdmF0aW9uV2lkdGhcIjogMTAsXG4gICAgXCJkaWFncmFtTWFyZ2luWFwiOiA1MCxcbiAgICBcImRpYWdyYW1NYXJnaW5ZXCI6IDEwLFxuICAgIFwiYWN0b3JNYXJnaW5cIjogNTAsXG4gICAgXCJ3aWR0aFwiOiAxNTAsXG4gICAgXCJoZWlnaHRcIjogNjUsXG4gICAgXCJib3hNYXJnaW5cIjogMTAsXG4gICAgXCJib3hUZXh0TWFyZ2luXCI6IDUsXG4gICAgXCJub3RlTWFyZ2luXCI6IDEwLFxuICAgIFwibWVzc2FnZU1hcmdpblwiOiAzNSxcbiAgICBcIm1lc3NhZ2VBbGlnblwiOiBcImNlbnRlclwiLFxuICAgIFwibWlycm9yQWN0b3JzXCI6IHRydWUsXG4gICAgXCJmb3JjZU1lbnVzXCI6IGZhbHNlLFxuICAgIFwiYm90dG9tTWFyZ2luQWRqXCI6IDEsXG4gICAgXCJyaWdodEFuZ2xlc1wiOiBmYWxzZSxcbiAgICBcInNob3dTZXF1ZW5jZU51bWJlcnNcIjogZmFsc2UsXG4gICAgXCJhY3RvckZvbnRTaXplXCI6IDE0LFxuICAgIFwiYWN0b3JGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImFjdG9yRm9udFdlaWdodFwiOiA0MDAsXG4gICAgXCJub3RlRm9udFNpemVcIjogMTQsXG4gICAgXCJub3RlRm9udEZhbWlseVwiOiAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIFwibm90ZUZvbnRXZWlnaHRcIjogNDAwLFxuICAgIFwibm90ZUFsaWduXCI6IFwiY2VudGVyXCIsXG4gICAgXCJtZXNzYWdlRm9udFNpemVcIjogMTYsXG4gICAgXCJtZXNzYWdlRm9udEZhbWlseVwiOiAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgIFwibWVzc2FnZUZvbnRXZWlnaHRcIjogNDAwLFxuICAgIFwid3JhcFwiOiBmYWxzZSxcbiAgICBcIndyYXBQYWRkaW5nXCI6IDEwLFxuICAgIFwibGFiZWxCb3hXaWR0aFwiOiA1MCxcbiAgICBcImxhYmVsQm94SGVpZ2h0XCI6IDIwXG4gIH0sXG4gIFwiZ2FudHRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInRpdGxlVG9wTWFyZ2luXCI6IDI1LFxuICAgIFwiYmFySGVpZ2h0XCI6IDIwLFxuICAgIFwiYmFyR2FwXCI6IDQsXG4gICAgXCJ0b3BQYWRkaW5nXCI6IDUwLFxuICAgIFwicmlnaHRQYWRkaW5nXCI6IDc1LFxuICAgIFwibGVmdFBhZGRpbmdcIjogNzUsXG4gICAgXCJncmlkTGluZVN0YXJ0UGFkZGluZ1wiOiAzNSxcbiAgICBcImZvbnRTaXplXCI6IDExLFxuICAgIFwic2VjdGlvbkZvbnRTaXplXCI6IDExLFxuICAgIFwibnVtYmVyU2VjdGlvblN0eWxlc1wiOiA0LFxuICAgIFwiYXhpc0Zvcm1hdFwiOiBcIiVZLSVtLSVkXCIsXG4gICAgXCJ0b3BBeGlzXCI6IGZhbHNlLFxuICAgIFwiZGlzcGxheU1vZGVcIjogXCJcIixcbiAgICBcIndlZWtkYXlcIjogXCJzdW5kYXlcIlxuICB9LFxuICBcImpvdXJuZXlcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcImRpYWdyYW1NYXJnaW5YXCI6IDUwLFxuICAgIFwiZGlhZ3JhbU1hcmdpbllcIjogMTAsXG4gICAgXCJsZWZ0TWFyZ2luXCI6IDE1MCxcbiAgICBcIndpZHRoXCI6IDE1MCxcbiAgICBcImhlaWdodFwiOiA1MCxcbiAgICBcImJveE1hcmdpblwiOiAxMCxcbiAgICBcImJveFRleHRNYXJnaW5cIjogNSxcbiAgICBcIm5vdGVNYXJnaW5cIjogMTAsXG4gICAgXCJtZXNzYWdlTWFyZ2luXCI6IDM1LFxuICAgIFwibWVzc2FnZUFsaWduXCI6IFwiY2VudGVyXCIsXG4gICAgXCJib3R0b21NYXJnaW5BZGpcIjogMSxcbiAgICBcInJpZ2h0QW5nbGVzXCI6IGZhbHNlLFxuICAgIFwidGFza0ZvbnRTaXplXCI6IDE0LFxuICAgIFwidGFza0ZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwidGFza01hcmdpblwiOiA1MCxcbiAgICBcImFjdGl2YXRpb25XaWR0aFwiOiAxMCxcbiAgICBcInRleHRQbGFjZW1lbnRcIjogXCJmb1wiLFxuICAgIFwiYWN0b3JDb2xvdXJzXCI6IFtcbiAgICAgIFwiIzhGQkM4RlwiLFxuICAgICAgXCIjN0NGQzAwXCIsXG4gICAgICBcIiMwMEZGRkZcIixcbiAgICAgIFwiIzIwQjJBQVwiLFxuICAgICAgXCIjQjBFMEU2XCIsXG4gICAgICBcIiNGRkZGRTBcIlxuICAgIF0sXG4gICAgXCJzZWN0aW9uRmlsbHNcIjogW1xuICAgICAgXCIjMTkxOTcwXCIsXG4gICAgICBcIiM4QjAwOEJcIixcbiAgICAgIFwiIzRCMDA4MlwiLFxuICAgICAgXCIjMkY0RjRGXCIsXG4gICAgICBcIiM4MDAwMDBcIixcbiAgICAgIFwiIzhCNDUxM1wiLFxuICAgICAgXCIjMDAwMDhCXCJcbiAgICBdLFxuICAgIFwic2VjdGlvbkNvbG91cnNcIjogW1xuICAgICAgXCIjZmZmXCJcbiAgICBdXG4gIH0sXG4gIFwiY2xhc3NcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInRpdGxlVG9wTWFyZ2luXCI6IDI1LFxuICAgIFwiYXJyb3dNYXJrZXJBYnNvbHV0ZVwiOiBmYWxzZSxcbiAgICBcImRpdmlkZXJNYXJnaW5cIjogMTAsXG4gICAgXCJwYWRkaW5nXCI6IDUsXG4gICAgXCJ0ZXh0SGVpZ2h0XCI6IDEwLFxuICAgIFwiZGVmYXVsdFJlbmRlcmVyXCI6IFwiZGFncmUtd3JhcHBlclwiLFxuICAgIFwiaHRtbExhYmVsc1wiOiBmYWxzZVxuICB9LFxuICBcInN0YXRlXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ0aXRsZVRvcE1hcmdpblwiOiAyNSxcbiAgICBcImRpdmlkZXJNYXJnaW5cIjogMTAsXG4gICAgXCJzaXplVW5pdFwiOiA1LFxuICAgIFwicGFkZGluZ1wiOiA4LFxuICAgIFwidGV4dEhlaWdodFwiOiAxMCxcbiAgICBcInRpdGxlU2hpZnRcIjogLTE1LFxuICAgIFwibm90ZU1hcmdpblwiOiAxMCxcbiAgICBcImZvcmtXaWR0aFwiOiA3MCxcbiAgICBcImZvcmtIZWlnaHRcIjogNyxcbiAgICBcIm1pbmlQYWRkaW5nXCI6IDIsXG4gICAgXCJmb250U2l6ZUZhY3RvclwiOiA1LjAyLFxuICAgIFwiZm9udFNpemVcIjogMjQsXG4gICAgXCJsYWJlbEhlaWdodFwiOiAxNixcbiAgICBcImVkZ2VMZW5ndGhGYWN0b3JcIjogXCIyMFwiLFxuICAgIFwiY29tcG9zaXRUaXRsZVNpemVcIjogMzUsXG4gICAgXCJyYWRpdXNcIjogNSxcbiAgICBcImRlZmF1bHRSZW5kZXJlclwiOiBcImRhZ3JlLXdyYXBwZXJcIlxuICB9LFxuICBcImVyXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ0aXRsZVRvcE1hcmdpblwiOiAyNSxcbiAgICBcImRpYWdyYW1QYWRkaW5nXCI6IDIwLFxuICAgIFwibGF5b3V0RGlyZWN0aW9uXCI6IFwiVEJcIixcbiAgICBcIm1pbkVudGl0eVdpZHRoXCI6IDEwMCxcbiAgICBcIm1pbkVudGl0eUhlaWdodFwiOiA3NSxcbiAgICBcImVudGl0eVBhZGRpbmdcIjogMTUsXG4gICAgXCJzdHJva2VcIjogXCJncmF5XCIsXG4gICAgXCJmaWxsXCI6IFwiaG9uZXlkZXdcIixcbiAgICBcImZvbnRTaXplXCI6IDEyXG4gIH0sXG4gIFwicGllXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ0ZXh0UG9zaXRpb25cIjogMC43NVxuICB9LFxuICBcInF1YWRyYW50Q2hhcnRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcImNoYXJ0V2lkdGhcIjogNTAwLFxuICAgIFwiY2hhcnRIZWlnaHRcIjogNTAwLFxuICAgIFwidGl0bGVGb250U2l6ZVwiOiAyMCxcbiAgICBcInRpdGxlUGFkZGluZ1wiOiAxMCxcbiAgICBcInF1YWRyYW50UGFkZGluZ1wiOiA1LFxuICAgIFwieEF4aXNMYWJlbFBhZGRpbmdcIjogNSxcbiAgICBcInlBeGlzTGFiZWxQYWRkaW5nXCI6IDUsXG4gICAgXCJ4QXhpc0xhYmVsRm9udFNpemVcIjogMTYsXG4gICAgXCJ5QXhpc0xhYmVsRm9udFNpemVcIjogMTYsXG4gICAgXCJxdWFkcmFudExhYmVsRm9udFNpemVcIjogMTYsXG4gICAgXCJxdWFkcmFudFRleHRUb3BQYWRkaW5nXCI6IDUsXG4gICAgXCJwb2ludFRleHRQYWRkaW5nXCI6IDUsXG4gICAgXCJwb2ludExhYmVsRm9udFNpemVcIjogMTIsXG4gICAgXCJwb2ludFJhZGl1c1wiOiA1LFxuICAgIFwieEF4aXNQb3NpdGlvblwiOiBcInRvcFwiLFxuICAgIFwieUF4aXNQb3NpdGlvblwiOiBcImxlZnRcIixcbiAgICBcInF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aFwiOiAxLFxuICAgIFwicXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoXCI6IDJcbiAgfSxcbiAgXCJ4eUNoYXJ0XCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJ3aWR0aFwiOiA3MDAsXG4gICAgXCJoZWlnaHRcIjogNTAwLFxuICAgIFwidGl0bGVGb250U2l6ZVwiOiAyMCxcbiAgICBcInRpdGxlUGFkZGluZ1wiOiAxMCxcbiAgICBcInNob3dUaXRsZVwiOiB0cnVlLFxuICAgIFwieEF4aXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9YWUNoYXJ0QXhpc0NvbmZpZ1wiLFxuICAgICAgXCJzaG93TGFiZWxcIjogdHJ1ZSxcbiAgICAgIFwibGFiZWxGb250U2l6ZVwiOiAxNCxcbiAgICAgIFwibGFiZWxQYWRkaW5nXCI6IDUsXG4gICAgICBcInNob3dUaXRsZVwiOiB0cnVlLFxuICAgICAgXCJ0aXRsZUZvbnRTaXplXCI6IDE2LFxuICAgICAgXCJ0aXRsZVBhZGRpbmdcIjogNSxcbiAgICAgIFwic2hvd1RpY2tcIjogdHJ1ZSxcbiAgICAgIFwidGlja0xlbmd0aFwiOiA1LFxuICAgICAgXCJ0aWNrV2lkdGhcIjogMixcbiAgICAgIFwic2hvd0F4aXNMaW5lXCI6IHRydWUsXG4gICAgICBcImF4aXNMaW5lV2lkdGhcIjogMlxuICAgIH0sXG4gICAgXCJ5QXhpc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnXCIsXG4gICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgXCJsYWJlbEZvbnRTaXplXCI6IDE0LFxuICAgICAgXCJsYWJlbFBhZGRpbmdcIjogNSxcbiAgICAgIFwic2hvd1RpdGxlXCI6IHRydWUsXG4gICAgICBcInRpdGxlRm9udFNpemVcIjogMTYsXG4gICAgICBcInRpdGxlUGFkZGluZ1wiOiA1LFxuICAgICAgXCJzaG93VGlja1wiOiB0cnVlLFxuICAgICAgXCJ0aWNrTGVuZ3RoXCI6IDUsXG4gICAgICBcInRpY2tXaWR0aFwiOiAyLFxuICAgICAgXCJzaG93QXhpc0xpbmVcIjogdHJ1ZSxcbiAgICAgIFwiYXhpc0xpbmVXaWR0aFwiOiAyXG4gICAgfSxcbiAgICBcImNoYXJ0T3JpZW50YXRpb25cIjogXCJ2ZXJ0aWNhbFwiLFxuICAgIFwicGxvdFJlc2VydmVkU3BhY2VQZXJjZW50XCI6IDUwXG4gIH0sXG4gIFwicmVxdWlyZW1lbnRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInJlY3RfZmlsbFwiOiBcIiNmOWY5ZjlcIixcbiAgICBcInRleHRfY29sb3JcIjogXCIjMzMzXCIsXG4gICAgXCJyZWN0X2JvcmRlcl9zaXplXCI6IFwiMC41cHhcIixcbiAgICBcInJlY3RfYm9yZGVyX2NvbG9yXCI6IFwiI2JiYlwiLFxuICAgIFwicmVjdF9taW5fd2lkdGhcIjogMjAwLFxuICAgIFwicmVjdF9taW5faGVpZ2h0XCI6IDIwMCxcbiAgICBcImZvbnRTaXplXCI6IDE0LFxuICAgIFwicmVjdF9wYWRkaW5nXCI6IDEwLFxuICAgIFwibGluZV9oZWlnaHRcIjogMjBcbiAgfSxcbiAgXCJtaW5kbWFwXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJwYWRkaW5nXCI6IDEwLFxuICAgIFwibWF4Tm9kZVdpZHRoXCI6IDIwMFxuICB9LFxuICBcInRpbWVsaW5lXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJkaWFncmFtTWFyZ2luWFwiOiA1MCxcbiAgICBcImRpYWdyYW1NYXJnaW5ZXCI6IDEwLFxuICAgIFwibGVmdE1hcmdpblwiOiAxNTAsXG4gICAgXCJ3aWR0aFwiOiAxNTAsXG4gICAgXCJoZWlnaHRcIjogNTAsXG4gICAgXCJib3hNYXJnaW5cIjogMTAsXG4gICAgXCJib3hUZXh0TWFyZ2luXCI6IDUsXG4gICAgXCJub3RlTWFyZ2luXCI6IDEwLFxuICAgIFwibWVzc2FnZU1hcmdpblwiOiAzNSxcbiAgICBcIm1lc3NhZ2VBbGlnblwiOiBcImNlbnRlclwiLFxuICAgIFwiYm90dG9tTWFyZ2luQWRqXCI6IDEsXG4gICAgXCJyaWdodEFuZ2xlc1wiOiBmYWxzZSxcbiAgICBcInRhc2tGb250U2l6ZVwiOiAxNCxcbiAgICBcInRhc2tGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcInRhc2tNYXJnaW5cIjogNTAsXG4gICAgXCJhY3RpdmF0aW9uV2lkdGhcIjogMTAsXG4gICAgXCJ0ZXh0UGxhY2VtZW50XCI6IFwiZm9cIixcbiAgICBcImFjdG9yQ29sb3Vyc1wiOiBbXG4gICAgICBcIiM4RkJDOEZcIixcbiAgICAgIFwiIzdDRkMwMFwiLFxuICAgICAgXCIjMDBGRkZGXCIsXG4gICAgICBcIiMyMEIyQUFcIixcbiAgICAgIFwiI0IwRTBFNlwiLFxuICAgICAgXCIjRkZGRkUwXCJcbiAgICBdLFxuICAgIFwic2VjdGlvbkZpbGxzXCI6IFtcbiAgICAgIFwiIzE5MTk3MFwiLFxuICAgICAgXCIjOEIwMDhCXCIsXG4gICAgICBcIiM0QjAwODJcIixcbiAgICAgIFwiIzJGNEY0RlwiLFxuICAgICAgXCIjODAwMDAwXCIsXG4gICAgICBcIiM4QjQ1MTNcIixcbiAgICAgIFwiIzAwMDA4QlwiXG4gICAgXSxcbiAgICBcInNlY3Rpb25Db2xvdXJzXCI6IFtcbiAgICAgIFwiI2ZmZlwiXG4gICAgXSxcbiAgICBcImRpc2FibGVNdWx0aWNvbG9yXCI6IGZhbHNlXG4gIH0sXG4gIFwiZ2l0R3JhcGhcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInRpdGxlVG9wTWFyZ2luXCI6IDI1LFxuICAgIFwiZGlhZ3JhbVBhZGRpbmdcIjogOCxcbiAgICBcIm5vZGVMYWJlbFwiOiB7XG4gICAgICBcIndpZHRoXCI6IDc1LFxuICAgICAgXCJoZWlnaHRcIjogMTAwLFxuICAgICAgXCJ4XCI6IC0yNSxcbiAgICAgIFwieVwiOiAwXG4gICAgfSxcbiAgICBcIm1haW5CcmFuY2hOYW1lXCI6IFwibWFpblwiLFxuICAgIFwibWFpbkJyYW5jaE9yZGVyXCI6IDAsXG4gICAgXCJzaG93Q29tbWl0TGFiZWxcIjogdHJ1ZSxcbiAgICBcInNob3dCcmFuY2hlc1wiOiB0cnVlLFxuICAgIFwicm90YXRlQ29tbWl0TGFiZWxcIjogdHJ1ZSxcbiAgICBcInBhcmFsbGVsQ29tbWl0c1wiOiBmYWxzZSxcbiAgICBcImFycm93TWFya2VyQWJzb2x1dGVcIjogZmFsc2VcbiAgfSxcbiAgXCJjNFwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwiZGlhZ3JhbU1hcmdpblhcIjogNTAsXG4gICAgXCJkaWFncmFtTWFyZ2luWVwiOiAxMCxcbiAgICBcImM0U2hhcGVNYXJnaW5cIjogNTAsXG4gICAgXCJjNFNoYXBlUGFkZGluZ1wiOiAyMCxcbiAgICBcIndpZHRoXCI6IDIxNixcbiAgICBcImhlaWdodFwiOiA2MCxcbiAgICBcImJveE1hcmdpblwiOiAxMCxcbiAgICBcImM0U2hhcGVJblJvd1wiOiA0LFxuICAgIFwibmV4dExpbmVQYWRkaW5nWFwiOiAwLFxuICAgIFwiYzRCb3VuZGFyeUluUm93XCI6IDIsXG4gICAgXCJwZXJzb25Gb250U2l6ZVwiOiAxNCxcbiAgICBcInBlcnNvbkZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwicGVyc29uRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfcGVyc29uRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcInN5c3RlbUZvbnRTaXplXCI6IDE0LFxuICAgIFwic3lzdGVtRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJzeXN0ZW1Gb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZVwiOiAxNCxcbiAgICBcImV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwic3lzdGVtX2RiRm9udFNpemVcIjogMTQsXG4gICAgXCJzeXN0ZW1fZGJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcInN5c3RlbV9kYkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplXCI6IDE0LFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJzeXN0ZW1fcXVldWVGb250U2l6ZVwiOiAxNCxcbiAgICBcInN5c3RlbV9xdWV1ZUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwic3lzdGVtX3F1ZXVlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImJvdW5kYXJ5Rm9udFNpemVcIjogMTQsXG4gICAgXCJib3VuZGFyeUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiYm91bmRhcnlGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJtZXNzYWdlRm9udFNpemVcIjogMTIsXG4gICAgXCJtZXNzYWdlRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJtZXNzYWdlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiY29udGFpbmVyRm9udFNpemVcIjogMTQsXG4gICAgXCJjb250YWluZXJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImNvbnRhaW5lckZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplXCI6IDE0LFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJjb250YWluZXJfZGJGb250U2l6ZVwiOiAxNCxcbiAgICBcImNvbnRhaW5lcl9kYkZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiY29udGFpbmVyX2RiRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplXCI6IDE0LFxuICAgIFwiY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJjb250YWluZXJfcXVldWVGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZVwiOiAxNCxcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiY29tcG9uZW50Rm9udFNpemVcIjogMTQsXG4gICAgXCJjb21wb25lbnRGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImNvbXBvbmVudEZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplXCI6IDE0LFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJjb21wb25lbnRfZGJGb250U2l6ZVwiOiAxNCxcbiAgICBcImNvbXBvbmVudF9kYkZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiY29tcG9uZW50X2RiRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemVcIjogMTQsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5XCI6ICdcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmJyxcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHRcIjogXCJub3JtYWxcIixcbiAgICBcImNvbXBvbmVudF9xdWV1ZUZvbnRTaXplXCI6IDE0LFxuICAgIFwiY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseVwiOiAnXCJPcGVuIFNhbnNcIiwgc2Fucy1zZXJpZicsXG4gICAgXCJjb21wb25lbnRfcXVldWVGb250V2VpZ2h0XCI6IFwibm9ybWFsXCIsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZVwiOiAxNCxcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHlcIjogJ1wiT3BlbiBTYW5zXCIsIHNhbnMtc2VyaWYnLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodFwiOiBcIm5vcm1hbFwiLFxuICAgIFwid3JhcFwiOiB0cnVlLFxuICAgIFwid3JhcFBhZGRpbmdcIjogMTAsXG4gICAgXCJwZXJzb25fYmdfY29sb3JcIjogXCIjMDg0MjdCXCIsXG4gICAgXCJwZXJzb25fYm9yZGVyX2NvbG9yXCI6IFwiIzA3M0I2RlwiLFxuICAgIFwiZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yXCI6IFwiIzY4Njg2OFwiLFxuICAgIFwiZXh0ZXJuYWxfcGVyc29uX2JvcmRlcl9jb2xvclwiOiBcIiM4QThBOEFcIixcbiAgICBcInN5c3RlbV9iZ19jb2xvclwiOiBcIiMxMTY4QkRcIixcbiAgICBcInN5c3RlbV9ib3JkZXJfY29sb3JcIjogXCIjM0M3RkMwXCIsXG4gICAgXCJzeXN0ZW1fZGJfYmdfY29sb3JcIjogXCIjMTE2OEJEXCIsXG4gICAgXCJzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzNDN0ZDMFwiLFxuICAgIFwic3lzdGVtX3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzExNjhCRFwiLFxuICAgIFwic3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiMzQzdGQzBcIixcbiAgICBcImV4dGVybmFsX3N5c3RlbV9iZ19jb2xvclwiOiBcIiM5OTk5OTlcIixcbiAgICBcImV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3JcIjogXCIjOEE4QThBXCIsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fZGJfYmdfY29sb3JcIjogXCIjOTk5OTk5XCIsXG4gICAgXCJleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzhBOEE4QVwiLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzk5OTk5OVwiLFxuICAgIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiM4QThBOEFcIixcbiAgICBcImNvbnRhaW5lcl9iZ19jb2xvclwiOiBcIiM0MzhERDVcIixcbiAgICBcImNvbnRhaW5lcl9ib3JkZXJfY29sb3JcIjogXCIjM0M3RkMwXCIsXG4gICAgXCJjb250YWluZXJfZGJfYmdfY29sb3JcIjogXCIjNDM4REQ1XCIsXG4gICAgXCJjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzNDN0ZDMFwiLFxuICAgIFwiY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzQzOERENVwiLFxuICAgIFwiY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiMzQzdGQzBcIixcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvclwiOiBcIiNCM0IzQjNcIixcbiAgICBcImV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3JcIjogXCIjQTZBNkE2XCIsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfZGJfYmdfY29sb3JcIjogXCIjQjNCM0IzXCIsXG4gICAgXCJleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yXCI6IFwiI0E2QTZBNlwiLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yXCI6IFwiI0IzQjNCM1wiLFxuICAgIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiNBNkE2QTZcIixcbiAgICBcImNvbXBvbmVudF9iZ19jb2xvclwiOiBcIiM4NUJCRjBcIixcbiAgICBcImNvbXBvbmVudF9ib3JkZXJfY29sb3JcIjogXCIjNzhBOEQ4XCIsXG4gICAgXCJjb21wb25lbnRfZGJfYmdfY29sb3JcIjogXCIjODVCQkYwXCIsXG4gICAgXCJjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yXCI6IFwiIzc4QThEOFwiLFxuICAgIFwiY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yXCI6IFwiIzg1QkJGMFwiLFxuICAgIFwiY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiM3OEE4RDhcIixcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvclwiOiBcIiNDQ0NDQ0NcIixcbiAgICBcImV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3JcIjogXCIjQkZCRkJGXCIsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfZGJfYmdfY29sb3JcIjogXCIjQ0NDQ0NDXCIsXG4gICAgXCJleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yXCI6IFwiI0JGQkZCRlwiLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yXCI6IFwiI0NDQ0NDQ1wiLFxuICAgIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvclwiOiBcIiNCRkJGQkZcIlxuICB9LFxuICBcInNhbmtleVwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwid2lkdGhcIjogNjAwLFxuICAgIFwiaGVpZ2h0XCI6IDQwMCxcbiAgICBcImxpbmtDb2xvclwiOiBcImdyYWRpZW50XCIsXG4gICAgXCJub2RlQWxpZ25tZW50XCI6IFwianVzdGlmeVwiLFxuICAgIFwic2hvd1ZhbHVlc1wiOiB0cnVlLFxuICAgIFwicHJlZml4XCI6IFwiXCIsXG4gICAgXCJzdWZmaXhcIjogXCJcIlxuICB9LFxuICBcImJsb2NrXCI6IHtcbiAgICBcInVzZU1heFdpZHRoXCI6IHRydWUsXG4gICAgXCJwYWRkaW5nXCI6IDhcbiAgfSxcbiAgXCJwYWNrZXRcIjoge1xuICAgIFwidXNlTWF4V2lkdGhcIjogdHJ1ZSxcbiAgICBcInJvd0hlaWdodFwiOiAzMixcbiAgICBcImJpdFdpZHRoXCI6IDMyLFxuICAgIFwiYml0c1BlclJvd1wiOiAzMixcbiAgICBcInNob3dCaXRzXCI6IHRydWUsXG4gICAgXCJwYWRkaW5nWFwiOiA1LFxuICAgIFwicGFkZGluZ1lcIjogNVxuICB9LFxuICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgXCJ1c2VNYXhXaWR0aFwiOiB0cnVlLFxuICAgIFwicGFkZGluZ1wiOiA0MCxcbiAgICBcImljb25TaXplXCI6IDgwLFxuICAgIFwiZm9udFNpemVcIjogMTZcbiAgfSxcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIixcbiAgXCJsb29rXCI6IFwiY2xhc3NpY1wiLFxuICBcImhhbmREcmF3blNlZWRcIjogMCxcbiAgXCJsYXlvdXRcIjogXCJkYWdyZVwiLFxuICBcIm1heFRleHRTaXplXCI6IDVlNCxcbiAgXCJtYXhFZGdlc1wiOiA1MDAsXG4gIFwiZGFya01vZGVcIjogZmFsc2UsXG4gIFwiZm9udEZhbWlseVwiOiAnXCJ0cmVidWNoZXQgbXNcIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7JyxcbiAgXCJsb2dMZXZlbFwiOiA1LFxuICBcInNlY3VyaXR5TGV2ZWxcIjogXCJzdHJpY3RcIixcbiAgXCJzdGFydE9uTG9hZFwiOiB0cnVlLFxuICBcImFycm93TWFya2VyQWJzb2x1dGVcIjogZmFsc2UsXG4gIFwic2VjdXJlXCI6IFtcbiAgICBcInNlY3VyZVwiLFxuICAgIFwic2VjdXJpdHlMZXZlbFwiLFxuICAgIFwic3RhcnRPbkxvYWRcIixcbiAgICBcIm1heFRleHRTaXplXCIsXG4gICAgXCJzdXBwcmVzc0Vycm9yUmVuZGVyaW5nXCIsXG4gICAgXCJtYXhFZGdlc1wiXG4gIF0sXG4gIFwibGVnYWN5TWF0aE1MXCI6IGZhbHNlLFxuICBcImZvcmNlTGVnYWN5TWF0aE1MXCI6IGZhbHNlLFxuICBcImRldGVybWluaXN0aWNJZHNcIjogZmFsc2UsXG4gIFwiZm9udFNpemVcIjogMTYsXG4gIFwibWFya2Rvd25BdXRvV3JhcFwiOiB0cnVlLFxuICBcInN1cHByZXNzRXJyb3JSZW5kZXJpbmdcIjogZmFsc2Vcbn07XG5cbi8vIHNyYy9kZWZhdWx0Q29uZmlnLnRzXG52YXIgY29uZmlnID0ge1xuICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQsXG4gIC8vIFNldCwgZXZlbiB0aG91Z2ggdGhleSdyZSBgdW5kZWZpbmVkYCBzbyB0aGF0IGBjb25maWdLZXlzYCBmaW5kcyB0aGVzZSBrZXlzXG4gIC8vIFRPRE86IFNob3VsZCB3ZSByZXBsYWNlIHRoZXNlIHdpdGggYG51bGxgIHNvIHRoYXQgdGhleSBjYW4gZ28gaW4gdGhlIEpTT04gU2NoZW1hP1xuICBkZXRlcm1pbmlzdGljSURTZWVkOiB2b2lkIDAsXG4gIGVsazoge1xuICAgIG1lcmdlRWRnZXM6IGZhbHNlLFxuICAgIG5vZGVQbGFjZW1lbnRTdHJhdGVneTogXCJTSU1QTEVcIlxuICB9LFxuICB0aGVtZUNTUzogdm9pZCAwLFxuICAvLyBhZGQgbm9uLUpTT04gZGVmYXVsdCBjb25maWcgdmFsdWVzXG4gIHRoZW1lVmFyaWFibGVzOiB0aGVtZXNfZGVmYXVsdC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksXG4gIHNlcXVlbmNlOiB7XG4gICAgLi4uY29uZmlnX3NjaGVtYV9kZWZhdWx0LnNlcXVlbmNlLFxuICAgIG1lc3NhZ2VGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5tZXNzYWdlRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMubWVzc2FnZUZvbnRTaXplLFxuICAgICAgICBmb250V2VpZ2h0OiB0aGlzLm1lc3NhZ2VGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwibWVzc2FnZUZvbnRcIiksXG4gICAgbm90ZUZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLm5vdGVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5ub3RlRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMubm90ZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJub3RlRm9udFwiKSxcbiAgICBhY3RvckZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmFjdG9yRm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuYWN0b3JGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5hY3RvckZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJhY3RvckZvbnRcIilcbiAgfSxcbiAgZ2FudHQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQuZ2FudHQsXG4gICAgdGlja0ludGVydmFsOiB2b2lkIDAsXG4gICAgdXNlV2lkdGg6IHZvaWQgMFxuICAgIC8vIGNhbiBwcm9iYWJseSBiZSByZW1vdmVkIHNpbmNlIGBjb25maWdLZXlzYCBhbHJlYWR5IGluY2x1ZGVzIHRoaXNcbiAgfSxcbiAgYzQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQuYzQsXG4gICAgdXNlV2lkdGg6IHZvaWQgMCxcbiAgICBwZXJzb25Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5wZXJzb25Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5wZXJzb25Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5wZXJzb25Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwicGVyc29uRm9udFwiKSxcbiAgICBleHRlcm5hbF9wZXJzb25Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9wZXJzb25Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9wZXJzb25Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfcGVyc29uRm9udFwiKSxcbiAgICBzeXN0ZW1Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwic3lzdGVtRm9udFwiKSxcbiAgICBleHRlcm5hbF9zeXN0ZW1Gb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfc3lzdGVtRm9udFwiKSxcbiAgICBzeXN0ZW1fZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1fZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1fZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwic3lzdGVtX2RiRm9udFwiKSxcbiAgICBleHRlcm5hbF9zeXN0ZW1fZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFwiKSxcbiAgICBzeXN0ZW1fcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5zeXN0ZW1fcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwic3lzdGVtX3F1ZXVlRm9udFwiKSxcbiAgICBleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFwiKSxcbiAgICBjb250YWluZXJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29udGFpbmVyRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb250YWluZXJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29udGFpbmVyRm9udFwiKSxcbiAgICBjb250YWluZXJfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29udGFpbmVyX2RiRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb250YWluZXJfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFwiKSxcbiAgICBjb250YWluZXJfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb250YWluZXJfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29udGFpbmVyX3F1ZXVlRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFwiKSxcbiAgICBjb21wb25lbnRGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29tcG9uZW50Rm9udFwiKSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udFwiKSxcbiAgICBjb21wb25lbnRfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29tcG9uZW50X2RiRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRfZGJGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFwiKSxcbiAgICBjb21wb25lbnRfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb21wb25lbnRfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiY29tcG9uZW50X3F1ZXVlRm9udFwiKSxcbiAgICBleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9udEZhbWlseTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0XG4gICAgICB9O1xuICAgIH0sIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFwiKSxcbiAgICBib3VuZGFyeUZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuYm91bmRhcnlGb250U2l6ZSxcbiAgICAgICAgZm9udFdlaWdodDogdGhpcy5ib3VuZGFyeUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJib3VuZGFyeUZvbnRcIiksXG4gICAgbWVzc2FnZUZvbnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250RmFtaWx5OiB0aGlzLm1lc3NhZ2VGb250RmFtaWx5LFxuICAgICAgICBmb250U2l6ZTogdGhpcy5tZXNzYWdlRm9udFNpemUsXG4gICAgICAgIGZvbnRXZWlnaHQ6IHRoaXMubWVzc2FnZUZvbnRXZWlnaHRcbiAgICAgIH07XG4gICAgfSwgXCJtZXNzYWdlRm9udFwiKVxuICB9LFxuICBwaWU6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQucGllLFxuICAgIHVzZVdpZHRoOiA5ODRcbiAgfSxcbiAgeHlDaGFydDoge1xuICAgIC4uLmNvbmZpZ19zY2hlbWFfZGVmYXVsdC54eUNoYXJ0LFxuICAgIHVzZVdpZHRoOiB2b2lkIDBcbiAgfSxcbiAgcmVxdWlyZW1lbnQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQucmVxdWlyZW1lbnQsXG4gICAgdXNlV2lkdGg6IHZvaWQgMFxuICB9LFxuICBwYWNrZXQ6IHtcbiAgICAuLi5jb25maWdfc2NoZW1hX2RlZmF1bHQucGFja2V0XG4gIH1cbn07XG52YXIga2V5aWZ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob2JqLCBwcmVmaXggPSBcIlwiKSA9PiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgocmVzLCBlbCkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmpbZWxdKSkge1xuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9ialtlbF0gPT09IFwib2JqZWN0XCIgJiYgb2JqW2VsXSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBbLi4ucmVzLCBwcmVmaXggKyBlbCwgLi4ua2V5aWZ5KG9ialtlbF0sIFwiXCIpXTtcbiAgfVxuICByZXR1cm4gWy4uLnJlcywgcHJlZml4ICsgZWxdO1xufSwgW10pLCBcImtleWlmeVwiKTtcbnZhciBjb25maWdLZXlzID0gbmV3IFNldChrZXlpZnkoY29uZmlnLCBcIlwiKSk7XG52YXIgZGVmYXVsdENvbmZpZ19kZWZhdWx0ID0gY29uZmlnO1xuXG4vLyBzcmMvdXRpbHMvc2FuaXRpemVEaXJlY3RpdmUudHNcbnZhciBzYW5pdGl6ZURpcmVjdGl2ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFyZ3MpID0+IHtcbiAgbG9nLmRlYnVnKFwic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGhcIiwgYXJncyk7XG4gIGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICBhcmdzLmZvckVhY2goKGFyZykgPT4gc2FuaXRpemVEaXJlY3RpdmUoYXJnKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFyZ3MpKSB7XG4gICAgbG9nLmRlYnVnKFwiQ2hlY2tpbmcga2V5XCIsIGtleSk7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiX19cIikgfHwga2V5LmluY2x1ZGVzKFwicHJvdG9cIikgfHwga2V5LmluY2x1ZGVzKFwiY29uc3RyXCIpIHx8ICFjb25maWdLZXlzLmhhcyhrZXkpIHx8IGFyZ3Nba2V5XSA9PSBudWxsKSB7XG4gICAgICBsb2cuZGVidWcoXCJzYW5pdGl6ZSBkZWxldGluZyBrZXk6IFwiLCBrZXkpO1xuICAgICAgZGVsZXRlIGFyZ3Nba2V5XTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZ3Nba2V5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbG9nLmRlYnVnKFwic2FuaXRpemluZyBvYmplY3RcIiwga2V5KTtcbiAgICAgIHNhbml0aXplRGlyZWN0aXZlKGFyZ3Nba2V5XSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgY3NzTWF0Y2hlcnMgPSBbXCJ0aGVtZUNTU1wiLCBcImZvbnRGYW1pbHlcIiwgXCJhbHRGb250RmFtaWx5XCJdO1xuICAgIGZvciAoY29uc3QgY3NzS2V5IG9mIGNzc01hdGNoZXJzKSB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKGNzc0tleSkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwic2FuaXRpemluZyBjc3Mgb3B0aW9uXCIsIGtleSk7XG4gICAgICAgIGFyZ3Nba2V5XSA9IHNhbml0aXplQ3NzKGFyZ3Nba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhcmdzLnRoZW1lVmFyaWFibGVzKSB7XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGFyZ3MudGhlbWVWYXJpYWJsZXMpKSB7XG4gICAgICBjb25zdCB2YWwgPSBhcmdzLnRoZW1lVmFyaWFibGVzW2tdO1xuICAgICAgaWYgKHZhbD8ubWF0Y2ggJiYgIXZhbC5tYXRjaCgvXltcXGQgXCIjJSgpLC47QS1aYS16XSskLykpIHtcbiAgICAgICAgYXJncy50aGVtZVZhcmlhYmxlc1trXSA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhcIkFmdGVyIHNhbml0aXphdGlvblwiLCBhcmdzKTtcbn0sIFwic2FuaXRpemVEaXJlY3RpdmVcIik7XG52YXIgc2FuaXRpemVDc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdHIpID0+IHtcbiAgbGV0IHN0YXJ0Q250ID0gMDtcbiAgbGV0IGVuZENudCA9IDA7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzdHIpIHtcbiAgICBpZiAoc3RhcnRDbnQgPCBlbmRDbnQpIHtcbiAgICAgIHJldHVybiBcInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH1cIjtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgPT09IFwie1wiKSB7XG4gICAgICBzdGFydENudCsrO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gXCJ9XCIpIHtcbiAgICAgIGVuZENudCsrO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhcnRDbnQgIT09IGVuZENudCkge1xuICAgIHJldHVybiBcInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH1cIjtcbiAgfVxuICByZXR1cm4gc3RyO1xufSwgXCJzYW5pdGl6ZUNzc1wiKTtcblxuLy8gc3JjL2NvbmZpZy50c1xudmFyIGRlZmF1bHRDb25maWcgPSBPYmplY3QuZnJlZXplKGRlZmF1bHRDb25maWdfZGVmYXVsdCk7XG52YXIgc2l0ZUNvbmZpZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBkZWZhdWx0Q29uZmlnKTtcbnZhciBjb25maWdGcm9tSW5pdGlhbGl6ZTtcbnZhciBkaXJlY3RpdmVzID0gW107XG52YXIgY3VycmVudENvbmZpZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBkZWZhdWx0Q29uZmlnKTtcbnZhciB1cGRhdGVDdXJyZW50Q29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2l0ZUNmZywgX2RpcmVjdGl2ZXMpID0+IHtcbiAgbGV0IGNmZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBzaXRlQ2ZnKTtcbiAgbGV0IHN1bU9mRGlyZWN0aXZlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGQgb2YgX2RpcmVjdGl2ZXMpIHtcbiAgICBzYW5pdGl6ZShkKTtcbiAgICBzdW1PZkRpcmVjdGl2ZXMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChzdW1PZkRpcmVjdGl2ZXMsIGQpO1xuICB9XG4gIGNmZyA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KGNmZywgc3VtT2ZEaXJlY3RpdmVzKTtcbiAgaWYgKHN1bU9mRGlyZWN0aXZlcy50aGVtZSAmJiBzdW1PZkRpcmVjdGl2ZXMudGhlbWUgaW4gdGhlbWVzX2RlZmF1bHQpIHtcbiAgICBjb25zdCB0bXBDb25maWdGcm9tSW5pdGlhbGl6ZSA9IGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBjb25maWdGcm9tSW5pdGlhbGl6ZSk7XG4gICAgY29uc3QgdGhlbWVWYXJpYWJsZXMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChcbiAgICAgIHRtcENvbmZpZ0Zyb21Jbml0aWFsaXplLnRoZW1lVmFyaWFibGVzIHx8IHt9LFxuICAgICAgc3VtT2ZEaXJlY3RpdmVzLnRoZW1lVmFyaWFibGVzXG4gICAgKTtcbiAgICBpZiAoY2ZnLnRoZW1lICYmIGNmZy50aGVtZSBpbiB0aGVtZXNfZGVmYXVsdCkge1xuICAgICAgY2ZnLnRoZW1lVmFyaWFibGVzID0gdGhlbWVzX2RlZmF1bHRbY2ZnLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0aGVtZVZhcmlhYmxlcyk7XG4gICAgfVxuICB9XG4gIGN1cnJlbnRDb25maWcgPSBjZmc7XG4gIGNoZWNrQ29uZmlnKGN1cnJlbnRDb25maWcpO1xuICByZXR1cm4gY3VycmVudENvbmZpZztcbn0sIFwidXBkYXRlQ3VycmVudENvbmZpZ1wiKTtcbnZhciBzZXRTaXRlQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29uZikgPT4ge1xuICBzaXRlQ29uZmlnID0gYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoe30sIGRlZmF1bHRDb25maWcpO1xuICBzaXRlQ29uZmlnID0gYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoc2l0ZUNvbmZpZywgY29uZik7XG4gIGlmIChjb25mLnRoZW1lICYmIHRoZW1lc19kZWZhdWx0W2NvbmYudGhlbWVdKSB7XG4gICAgc2l0ZUNvbmZpZy50aGVtZVZhcmlhYmxlcyA9IHRoZW1lc19kZWZhdWx0W2NvbmYudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGNvbmYudGhlbWVWYXJpYWJsZXMpO1xuICB9XG4gIHVwZGF0ZUN1cnJlbnRDb25maWcoc2l0ZUNvbmZpZywgZGlyZWN0aXZlcyk7XG4gIHJldHVybiBzaXRlQ29uZmlnO1xufSwgXCJzZXRTaXRlQ29uZmlnXCIpO1xudmFyIHNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmYpID0+IHtcbiAgY29uZmlnRnJvbUluaXRpYWxpemUgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdCh7fSwgY29uZik7XG59LCBcInNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZVwiKTtcbnZhciB1cGRhdGVTaXRlQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29uZikgPT4ge1xuICBzaXRlQ29uZmlnID0gYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoc2l0ZUNvbmZpZywgY29uZik7XG4gIHVwZGF0ZUN1cnJlbnRDb25maWcoc2l0ZUNvbmZpZywgZGlyZWN0aXZlcyk7XG4gIHJldHVybiBzaXRlQ29uZmlnO1xufSwgXCJ1cGRhdGVTaXRlQ29uZmlnXCIpO1xudmFyIGdldFNpdGVDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmV0dXJuIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KHt9LCBzaXRlQ29uZmlnKTtcbn0sIFwiZ2V0U2l0ZUNvbmZpZ1wiKTtcbnZhciBzZXRDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25mKSA9PiB7XG4gIGNoZWNrQ29uZmlnKGNvbmYpO1xuICBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChjdXJyZW50Q29uZmlnLCBjb25mKTtcbiAgcmV0dXJuIGdldENvbmZpZygpO1xufSwgXCJzZXRDb25maWdcIik7XG52YXIgZ2V0Q29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIHJldHVybiBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdCh7fSwgY3VycmVudENvbmZpZyk7XG59LCBcImdldENvbmZpZ1wiKTtcbnZhciBzYW5pdGl6ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFtcInNlY3VyZVwiLCAuLi5zaXRlQ29uZmlnLnNlY3VyZSA/PyBbXV0uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKE9iamVjdC5oYXNPd24ob3B0aW9ucywga2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICR7a2V5fWAsIG9wdGlvbnNba2V5XSk7XG4gICAgICBkZWxldGUgb3B0aW9uc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIl9fXCIpKSB7XG4gICAgICBkZWxldGUgb3B0aW9uc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc1trZXldID09PSBcInN0cmluZ1wiICYmIChvcHRpb25zW2tleV0uaW5jbHVkZXMoXCI8XCIpIHx8IG9wdGlvbnNba2V5XS5pbmNsdWRlcyhcIj5cIikgfHwgb3B0aW9uc1trZXldLmluY2x1ZGVzKFwidXJsKGRhdGE6XCIpKSkge1xuICAgICAgZGVsZXRlIG9wdGlvbnNba2V5XTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW2tleV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHNhbml0aXplKG9wdGlvbnNba2V5XSk7XG4gICAgfVxuICB9KTtcbn0sIFwic2FuaXRpemVcIik7XG52YXIgYWRkRGlyZWN0aXZlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGlyZWN0aXZlKSA9PiB7XG4gIHNhbml0aXplRGlyZWN0aXZlKGRpcmVjdGl2ZSk7XG4gIGlmIChkaXJlY3RpdmUuZm9udEZhbWlseSAmJiAhZGlyZWN0aXZlLnRoZW1lVmFyaWFibGVzPy5mb250RmFtaWx5KSB7XG4gICAgZGlyZWN0aXZlLnRoZW1lVmFyaWFibGVzID0ge1xuICAgICAgLi4uZGlyZWN0aXZlLnRoZW1lVmFyaWFibGVzLFxuICAgICAgZm9udEZhbWlseTogZGlyZWN0aXZlLmZvbnRGYW1pbHlcbiAgICB9O1xuICB9XG4gIGRpcmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpO1xuICB1cGRhdGVDdXJyZW50Q29uZmlnKHNpdGVDb25maWcsIGRpcmVjdGl2ZXMpO1xufSwgXCJhZGREaXJlY3RpdmVcIik7XG52YXIgcmVzZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWcyID0gc2l0ZUNvbmZpZykgPT4ge1xuICBkaXJlY3RpdmVzID0gW107XG4gIHVwZGF0ZUN1cnJlbnRDb25maWcoY29uZmlnMiwgZGlyZWN0aXZlcyk7XG59LCBcInJlc2V0XCIpO1xudmFyIENvbmZpZ1dhcm5pbmcgPSB7XG4gIExBWllfTE9BRF9ERVBSRUNBVEVEOiBcIlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC5cIlxufTtcbnZhciBpc3N1ZWRXYXJuaW5ncyA9IHt9O1xudmFyIGlzc3VlV2FybmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHdhcm5pbmcpID0+IHtcbiAgaWYgKGlzc3VlZFdhcm5pbmdzW3dhcm5pbmddKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZy53YXJuKENvbmZpZ1dhcm5pbmdbd2FybmluZ10pO1xuICBpc3N1ZWRXYXJuaW5nc1t3YXJuaW5nXSA9IHRydWU7XG59LCBcImlzc3VlV2FybmluZ1wiKTtcbnZhciBjaGVja0NvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZzIpID0+IHtcbiAgaWYgKCFjb25maWcyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb25maWcyLmxhenlMb2FkZWREaWFncmFtcyB8fCBjb25maWcyLmxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwKSB7XG4gICAgaXNzdWVXYXJuaW5nKFwiTEFaWV9MT0FEX0RFUFJFQ0FURURcIik7XG4gIH1cbn0sIFwiY2hlY2tDb25maWdcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9jb21tb24vY29tbW9uLnRzXG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gXCJkb21wdXJpZnlcIjtcbnZhciBsaW5lQnJlYWtSZWdleCA9IC88YnJcXHMqXFwvPz4vZ2k7XG52YXIgZ2V0Um93cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHMpID0+IHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIFtcIlwiXTtcbiAgfVxuICBjb25zdCBzdHIgPSBicmVha1RvUGxhY2Vob2xkZXIocykucmVwbGFjZSgvXFxcXG4vZywgXCIjYnIjXCIpO1xuICByZXR1cm4gc3RyLnNwbGl0KFwiI2JyI1wiKTtcbn0sIFwiZ2V0Um93c1wiKTtcbnZhciBzZXR1cERvbXB1cmlmeUhvb2tzSWZOb3RTZXR1cCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBsZXQgc2V0dXAgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoIXNldHVwKSB7XG4gICAgICBzZXR1cERvbXB1cmlmeUhvb2tzKCk7XG4gICAgICBzZXR1cCA9IHRydWU7XG4gICAgfVxuICB9O1xufSkoKTtcbmZ1bmN0aW9uIHNldHVwRG9tcHVyaWZ5SG9va3MoKSB7XG4gIGNvbnN0IFRFTVBPUkFSWV9BVFRSSUJVVEUgPSBcImRhdGEtdGVtcC1ocmVmLXRhcmdldFwiO1xuICBET01QdXJpZnkuYWRkSG9vayhcImJlZm9yZVNhbml0aXplQXR0cmlidXRlc1wiLCAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnRhZ05hbWUgPT09IFwiQVwiICYmIG5vZGUuaGFzQXR0cmlidXRlKFwidGFyZ2V0XCIpKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShURU1QT1JBUllfQVRUUklCVVRFLCBub2RlLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKSA/PyBcIlwiKTtcbiAgICB9XG4gIH0pO1xuICBET01QdXJpZnkuYWRkSG9vayhcImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzXCIsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gXCJBXCIgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoVEVNUE9SQVJZX0FUVFJJQlVURSkpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIG5vZGUuZ2V0QXR0cmlidXRlKFRFTVBPUkFSWV9BVFRSSUJVVEUpID8/IFwiXCIpO1xuICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoVEVNUE9SQVJZX0FUVFJJQlVURSk7XG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIikgPT09IFwiX2JsYW5rXCIpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJub29wZW5lclwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuX19uYW1lKHNldHVwRG9tcHVyaWZ5SG9va3MsIFwic2V0dXBEb21wdXJpZnlIb29rc1wiKTtcbnZhciByZW1vdmVTY3JpcHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgc2V0dXBEb21wdXJpZnlIb29rc0lmTm90U2V0dXAoKTtcbiAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IERPTVB1cmlmeS5zYW5pdGl6ZSh0eHQpO1xuICByZXR1cm4gc2FuaXRpemVkVGV4dDtcbn0sIFwicmVtb3ZlU2NyaXB0XCIpO1xudmFyIHNhbml0aXplTW9yZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgaWYgKGNvbmZpZzIuZmxvd2NoYXJ0Py5odG1sTGFiZWxzICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGxldmVsID0gY29uZmlnMi5zZWN1cml0eUxldmVsO1xuICAgIGlmIChsZXZlbCA9PT0gXCJhbnRpc2NyaXB0XCIgfHwgbGV2ZWwgPT09IFwic3RyaWN0XCIpIHtcbiAgICAgIHRleHQgPSByZW1vdmVTY3JpcHQodGV4dCk7XG4gICAgfSBlbHNlIGlmIChsZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgICB0ZXh0ID0gYnJlYWtUb1BsYWNlaG9sZGVyKHRleHQpO1xuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XG4gICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC89L2csIFwiJmVxdWFscztcIik7XG4gICAgICB0ZXh0ID0gcGxhY2Vob2xkZXJUb0JyZWFrKHRleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGV4dDtcbn0sIFwic2FuaXRpemVNb3JlXCIpO1xudmFyIHNhbml0aXplVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgaWYgKGNvbmZpZzIuZG9tcHVyaWZ5Q29uZmlnKSB7XG4gICAgdGV4dCA9IERPTVB1cmlmeS5zYW5pdGl6ZShzYW5pdGl6ZU1vcmUodGV4dCwgY29uZmlnMiksIGNvbmZpZzIuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHRleHQgPSBET01QdXJpZnkuc2FuaXRpemUoc2FuaXRpemVNb3JlKHRleHQsIGNvbmZpZzIpLCB7XG4gICAgICBGT1JCSURfVEFHUzogW1wic3R5bGVcIl1cbiAgICB9KS50b1N0cmluZygpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufSwgXCJzYW5pdGl6ZVRleHRcIik7XG52YXIgc2FuaXRpemVUZXh0T3JBcnJheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGEsIGNvbmZpZzIpID0+IHtcbiAgaWYgKHR5cGVvZiBhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHNhbml0aXplVGV4dChhLCBjb25maWcyKTtcbiAgfVxuICByZXR1cm4gYS5mbGF0KCkubWFwKCh4KSA9PiBzYW5pdGl6ZVRleHQoeCwgY29uZmlnMikpO1xufSwgXCJzYW5pdGl6ZVRleHRPckFycmF5XCIpO1xudmFyIGhhc0JyZWFrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgcmV0dXJuIGxpbmVCcmVha1JlZ2V4LnRlc3QodGV4dCk7XG59LCBcImhhc0JyZWFrc1wiKTtcbnZhciBzcGxpdEJyZWFrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQuc3BsaXQobGluZUJyZWFrUmVnZXgpO1xufSwgXCJzcGxpdEJyZWFrc1wiKTtcbnZhciBwbGFjZWhvbGRlclRvQnJlYWsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzKSA9PiB7XG4gIHJldHVybiBzLnJlcGxhY2UoLyNiciMvZywgXCI8YnIvPlwiKTtcbn0sIFwicGxhY2Vob2xkZXJUb0JyZWFrXCIpO1xudmFyIGJyZWFrVG9QbGFjZWhvbGRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHMpID0+IHtcbiAgcmV0dXJuIHMucmVwbGFjZShsaW5lQnJlYWtSZWdleCwgXCIjYnIjXCIpO1xufSwgXCJicmVha1RvUGxhY2Vob2xkZXJcIik7XG52YXIgZ2V0VXJsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodXNlQWJzb2x1dGUpID0+IHtcbiAgbGV0IHVybCA9IFwiXCI7XG4gIGlmICh1c2VBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZUFsbCgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2VBbGwoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIHJldHVybiB1cmw7XG59LCBcImdldFVybFwiKTtcbnZhciBldmFsdWF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbCkgPT4gdmFsID09PSBmYWxzZSB8fCBbXCJmYWxzZVwiLCBcIm51bGxcIiwgXCIwXCJdLmluY2x1ZGVzKFN0cmluZyh2YWwpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSA/IGZhbHNlIDogdHJ1ZSwgXCJldmFsdWF0ZVwiKTtcbnZhciBnZXRNYXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKC4uLnZhbHVlcykge1xuICBjb25zdCBuZXdWYWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIE1hdGgubWF4KC4uLm5ld1ZhbHVlcyk7XG59LCBcImdldE1heFwiKTtcbnZhciBnZXRNaW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKC4uLnZhbHVlcykge1xuICBjb25zdCBuZXdWYWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIE1hdGgubWluKC4uLm5ld1ZhbHVlcyk7XG59LCBcImdldE1pblwiKTtcbnZhciBwYXJzZUdlbmVyaWNUeXBlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQpIHtcbiAgY29uc3QgaW5wdXRTZXRzID0gaW5wdXQuc3BsaXQoLygsKS8pO1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNldHMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdGhpc1NldCA9IGlucHV0U2V0c1tpXTtcbiAgICBpZiAodGhpc1NldCA9PT0gXCIsXCIgJiYgaSA+IDAgJiYgaSArIDEgPCBpbnB1dFNldHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1NldCA9IGlucHV0U2V0c1tpIC0gMV07XG4gICAgICBjb25zdCBuZXh0U2V0ID0gaW5wdXRTZXRzW2kgKyAxXTtcbiAgICAgIGlmIChzaG91bGRDb21iaW5lU2V0cyhwcmV2aW91c1NldCwgbmV4dFNldCkpIHtcbiAgICAgICAgdGhpc1NldCA9IHByZXZpb3VzU2V0ICsgXCIsXCIgKyBuZXh0U2V0O1xuICAgICAgICBpKys7XG4gICAgICAgIG91dHB1dC5wb3AoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0cHV0LnB1c2gocHJvY2Vzc1NldCh0aGlzU2V0KSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufSwgXCJwYXJzZUdlbmVyaWNUeXBlc1wiKTtcbnZhciBjb3VudE9jY3VycmVuY2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdHJpbmcsIHN1YnN0cmluZykgPT4ge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgc3RyaW5nLnNwbGl0KHN1YnN0cmluZykubGVuZ3RoIC0gMSk7XG59LCBcImNvdW50T2NjdXJyZW5jZVwiKTtcbnZhciBzaG91bGRDb21iaW5lU2V0cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHByZXZpb3VzU2V0LCBuZXh0U2V0KSA9PiB7XG4gIGNvbnN0IHByZXZDb3VudCA9IGNvdW50T2NjdXJyZW5jZShwcmV2aW91c1NldCwgXCJ+XCIpO1xuICBjb25zdCBuZXh0Q291bnQgPSBjb3VudE9jY3VycmVuY2UobmV4dFNldCwgXCJ+XCIpO1xuICByZXR1cm4gcHJldkNvdW50ID09PSAxICYmIG5leHRDb3VudCA9PT0gMTtcbn0sIFwic2hvdWxkQ29tYmluZVNldHNcIik7XG52YXIgcHJvY2Vzc1NldCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlucHV0KSA9PiB7XG4gIGNvbnN0IHRpbGRlQ291bnQgPSBjb3VudE9jY3VycmVuY2UoaW5wdXQsIFwiflwiKTtcbiAgbGV0IGhhc1N0YXJ0aW5nVGlsZGUgPSBmYWxzZTtcbiAgaWYgKHRpbGRlQ291bnQgPD0gMSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBpZiAodGlsZGVDb3VudCAlIDIgIT09IDAgJiYgaW5wdXQuc3RhcnRzV2l0aChcIn5cIikpIHtcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygxKTtcbiAgICBoYXNTdGFydGluZ1RpbGRlID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBjaGFycyA9IFsuLi5pbnB1dF07XG4gIGxldCBmaXJzdCA9IGNoYXJzLmluZGV4T2YoXCJ+XCIpO1xuICBsZXQgbGFzdCA9IGNoYXJzLmxhc3RJbmRleE9mKFwiflwiKTtcbiAgd2hpbGUgKGZpcnN0ICE9PSAtMSAmJiBsYXN0ICE9PSAtMSAmJiBmaXJzdCAhPT0gbGFzdCkge1xuICAgIGNoYXJzW2ZpcnN0XSA9IFwiPFwiO1xuICAgIGNoYXJzW2xhc3RdID0gXCI+XCI7XG4gICAgZmlyc3QgPSBjaGFycy5pbmRleE9mKFwiflwiKTtcbiAgICBsYXN0ID0gY2hhcnMubGFzdEluZGV4T2YoXCJ+XCIpO1xuICB9XG4gIGlmIChoYXNTdGFydGluZ1RpbGRlKSB7XG4gICAgY2hhcnMudW5zaGlmdChcIn5cIik7XG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oXCJcIik7XG59LCBcInByb2Nlc3NTZXRcIik7XG52YXIgaXNNYXRoTUxTdXBwb3J0ZWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHdpbmRvdy5NYXRoTUxFbGVtZW50ICE9PSB2b2lkIDAsIFwiaXNNYXRoTUxTdXBwb3J0ZWRcIik7XG52YXIga2F0ZXhSZWdleCA9IC9cXCRcXCQoLiopXFwkXFwkL2c7XG52YXIgaGFzS2F0ZXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0ZXh0KSA9PiAodGV4dC5tYXRjaChrYXRleFJlZ2V4KT8ubGVuZ3RoID8/IDApID4gMCwgXCJoYXNLYXRleFwiKTtcbnZhciBjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAodGV4dCwgY29uZmlnMikgPT4ge1xuICB0ZXh0ID0gYXdhaXQgcmVuZGVyS2F0ZXgodGV4dCwgY29uZmlnMik7XG4gIGNvbnN0IGRpdkVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBkaXZFbGVtLmlubmVySFRNTCA9IHRleHQ7XG4gIGRpdkVsZW0uaWQgPSBcImthdGV4LXRlbXBcIjtcbiAgZGl2RWxlbS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgZGl2RWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgZGl2RWxlbS5zdHlsZS50b3AgPSBcIjBcIjtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xuICBib2R5Py5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgZGl2RWxlbSk7XG4gIGNvbnN0IGRpbSA9IHsgd2lkdGg6IGRpdkVsZW0uY2xpZW50V2lkdGgsIGhlaWdodDogZGl2RWxlbS5jbGllbnRIZWlnaHQgfTtcbiAgZGl2RWxlbS5yZW1vdmUoKTtcbiAgcmV0dXJuIGRpbTtcbn0sIFwiY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9uc1wiKTtcbnZhciByZW5kZXJLYXRleCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHRleHQsIGNvbmZpZzIpID0+IHtcbiAgaWYgKCFoYXNLYXRleCh0ZXh0KSkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIGlmICghKGlzTWF0aE1MU3VwcG9ydGVkKCkgfHwgY29uZmlnMi5sZWdhY3lNYXRoTUwgfHwgY29uZmlnMi5mb3JjZUxlZ2FjeU1hdGhNTCkpIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKGthdGV4UmVnZXgsIFwiTWF0aE1MIGlzIHVuc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXCIpO1xuICB9XG4gIGNvbnN0IHsgZGVmYXVsdDoga2F0ZXggfSA9IGF3YWl0IGltcG9ydChcImthdGV4XCIpO1xuICBjb25zdCBvdXRwdXRNb2RlID0gY29uZmlnMi5mb3JjZUxlZ2FjeU1hdGhNTCB8fCAhaXNNYXRoTUxTdXBwb3J0ZWQoKSAmJiBjb25maWcyLmxlZ2FjeU1hdGhNTCA/IFwiaHRtbEFuZE1hdGhtbFwiIDogXCJtYXRobWxcIjtcbiAgcmV0dXJuIHRleHQuc3BsaXQobGluZUJyZWFrUmVnZXgpLm1hcChcbiAgICAobGluZSkgPT4gaGFzS2F0ZXgobGluZSkgPyBgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPiR7bGluZX08L2Rpdj5gIDogYDxkaXY+JHtsaW5lfTwvZGl2PmBcbiAgKS5qb2luKFwiXCIpLnJlcGxhY2UoXG4gICAga2F0ZXhSZWdleCxcbiAgICAoXywgYykgPT4ga2F0ZXgucmVuZGVyVG9TdHJpbmcoYywge1xuICAgICAgdGhyb3dPbkVycm9yOiB0cnVlLFxuICAgICAgZGlzcGxheU1vZGU6IHRydWUsXG4gICAgICBvdXRwdXQ6IG91dHB1dE1vZGVcbiAgICB9KS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XFwvYW5ub3RhdGlvbj4vZywgXCJcIilcbiAgKTtcbn0sIFwicmVuZGVyS2F0ZXhcIik7XG52YXIgY29tbW9uX2RlZmF1bHQgPSB7XG4gIGdldFJvd3MsXG4gIHNhbml0aXplVGV4dCxcbiAgc2FuaXRpemVUZXh0T3JBcnJheSxcbiAgaGFzQnJlYWtzLFxuICBzcGxpdEJyZWFrcyxcbiAgbGluZUJyZWFrUmVnZXgsXG4gIHJlbW92ZVNjcmlwdCxcbiAgZ2V0VXJsLFxuICBldmFsdWF0ZSxcbiAgZ2V0TWF4LFxuICBnZXRNaW5cbn07XG5cbi8vIHNyYy9zZXR1cEdyYXBoVmlld2JveC5qc1xudmFyIGQzQXR0cnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGQzRWxlbSwgYXR0cnMpIHtcbiAgZm9yIChsZXQgYXR0ciBvZiBhdHRycykge1xuICAgIGQzRWxlbS5hdHRyKGF0dHJbMF0sIGF0dHJbMV0pO1xuICB9XG59LCBcImQzQXR0cnNcIik7XG52YXIgY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihoZWlnaHQsIHdpZHRoLCB1c2VNYXhXaWR0aCkge1xuICBsZXQgYXR0cnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBpZiAodXNlTWF4V2lkdGgpIHtcbiAgICBhdHRycy5zZXQoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgYXR0cnMuc2V0KFwic3R5bGVcIiwgYG1heC13aWR0aDogJHt3aWR0aH1weDtgKTtcbiAgfSBlbHNlIHtcbiAgICBhdHRycy5zZXQoXCJoZWlnaHRcIiwgaGVpZ2h0KTtcbiAgICBhdHRycy5zZXQoXCJ3aWR0aFwiLCB3aWR0aCk7XG4gIH1cbiAgcmV0dXJuIGF0dHJzO1xufSwgXCJjYWxjdWxhdGVTdmdTaXplQXR0cnNcIik7XG52YXIgY29uZmlndXJlU3ZnU2l6ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3ZnRWxlbSwgaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpIHtcbiAgY29uc3QgYXR0cnMgPSBjYWxjdWxhdGVTdmdTaXplQXR0cnMoaGVpZ2h0LCB3aWR0aCwgdXNlTWF4V2lkdGgpO1xuICBkM0F0dHJzKHN2Z0VsZW0sIGF0dHJzKTtcbn0sIFwiY29uZmlndXJlU3ZnU2l6ZVwiKTtcbnZhciBzZXR1cEdyYXBoVmlld2JveCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZ3JhcGgsIHN2Z0VsZW0sIHBhZGRpbmcsIHVzZU1heFdpZHRoKSB7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Z0VsZW0ubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgc1dpZHRoID0gc3ZnQm91bmRzLndpZHRoO1xuICBjb25zdCBzSGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodDtcbiAgbG9nLmluZm8oYFNWRyBib3VuZHM6ICR7c1dpZHRofXgke3NIZWlnaHR9YCwgc3ZnQm91bmRzKTtcbiAgbGV0IHdpZHRoID0gMDtcbiAgbGV0IGhlaWdodCA9IDA7XG4gIGxvZy5pbmZvKGBHcmFwaCBib3VuZHM6ICR7d2lkdGh9eCR7aGVpZ2h0fWAsIGdyYXBoKTtcbiAgd2lkdGggPSBzV2lkdGggKyBwYWRkaW5nICogMjtcbiAgaGVpZ2h0ID0gc0hlaWdodCArIHBhZGRpbmcgKiAyO1xuICBsb2cuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7d2lkdGh9eCR7aGVpZ2h0fWApO1xuICBjb25maWd1cmVTdmdTaXplKHN2Z0VsZW0sIGhlaWdodCwgd2lkdGgsIHVzZU1heFdpZHRoKTtcbiAgY29uc3QgdkJveCA9IGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLndpZHRoICsgMiAqIHBhZGRpbmd9ICR7c3ZnQm91bmRzLmhlaWdodCArIDIgKiBwYWRkaW5nfWA7XG4gIHN2Z0VsZW0uYXR0cihcInZpZXdCb3hcIiwgdkJveCk7XG59LCBcInNldHVwR3JhcGhWaWV3Ym94XCIpO1xuXG4vLyBzcmMvc3R5bGVzLnRzXG52YXIgdGhlbWVzID0ge307XG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHlwZSwgdXNlclN0eWxlcywgb3B0aW9ucykgPT4ge1xuICBsZXQgZGlhZ3JhbVN0eWxlcyA9IFwiXCI7XG4gIGlmICh0eXBlIGluIHRoZW1lcyAmJiB0aGVtZXNbdHlwZV0pIHtcbiAgICBkaWFncmFtU3R5bGVzID0gdGhlbWVzW3R5cGVdKG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGxvZy53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHt0eXBlfWApO1xuICB9XG4gIHJldHVybiBgICYge1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gICAgZm9udC1zaXplOiAke29wdGlvbnMuZm9udFNpemV9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9XG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAmIC5lcnJvci1pY29uIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZXJyb3JCa2dDb2xvcn07XG4gIH1cbiAgJiAuZXJyb3ItdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmVycm9yVGV4dENvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5lcnJvclRleHRDb2xvcn07XG4gIH1cblxuICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG4gICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDMuNXB4XG4gIH1cbiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG4gICYgLmVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAwO1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cbiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgJiAubWFya2VyIHtcbiAgICBmaWxsOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICB9XG4gICYgLm1hcmtlci5jcm9zcyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgfVxuXG4gICYgc3ZnIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLmZvbnRTaXplfTtcbiAgfVxuICAgJiBwIHtcbiAgICBtYXJnaW46IDBcbiAgIH1cblxuICAke2RpYWdyYW1TdHlsZXN9XG5cbiAgJHt1c2VyU3R5bGVzfVxuYDtcbn0sIFwiZ2V0U3R5bGVzXCIpO1xudmFyIGFkZFN0eWxlc0ZvckRpYWdyYW0gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eXBlLCBkaWFncmFtVGhlbWUpID0+IHtcbiAgaWYgKGRpYWdyYW1UaGVtZSAhPT0gdm9pZCAwKSB7XG4gICAgdGhlbWVzW3R5cGVdID0gZGlhZ3JhbVRoZW1lO1xuICB9XG59LCBcImFkZFN0eWxlc0ZvckRpYWdyYW1cIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9jb21tb24vY29tbW9uRGIudHNcbnZhciBjb21tb25EYl9leHBvcnRzID0ge307XG5fX2V4cG9ydChjb21tb25EYl9leHBvcnRzLCB7XG4gIGNsZWFyOiAoKSA9PiBjbGVhcixcbiAgZ2V0QWNjRGVzY3JpcHRpb246ICgpID0+IGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZTogKCkgPT4gZ2V0QWNjVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZTogKCkgPT4gZ2V0RGlhZ3JhbVRpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbjogKCkgPT4gc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlOiAoKSA9PiBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlOiAoKSA9PiBzZXREaWFncmFtVGl0bGVcbn0pO1xudmFyIGFjY1RpdGxlID0gXCJcIjtcbnZhciBkaWFncmFtVGl0bGUgPSBcIlwiO1xudmFyIGFjY0Rlc2NyaXB0aW9uID0gXCJcIjtcbnZhciBzYW5pdGl6ZVRleHQyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBzYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIGNsZWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGFjY1RpdGxlID0gXCJcIjtcbiAgYWNjRGVzY3JpcHRpb24gPSBcIlwiO1xuICBkaWFncmFtVGl0bGUgPSBcIlwiO1xufSwgXCJjbGVhclwiKTtcbnZhciBzZXRBY2NUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICBhY2NUaXRsZSA9IHNhbml0aXplVGV4dDIodHh0KS5yZXBsYWNlKC9eXFxzKy9nLCBcIlwiKTtcbn0sIFwic2V0QWNjVGl0bGVcIik7XG52YXIgZ2V0QWNjVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGFjY1RpdGxlLCBcImdldEFjY1RpdGxlXCIpO1xudmFyIHNldEFjY0Rlc2NyaXB0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIGFjY0Rlc2NyaXB0aW9uID0gc2FuaXRpemVUZXh0Mih0eHQpLnJlcGxhY2UoL1xcblxccysvZywgXCJcXG5cIik7XG59LCBcInNldEFjY0Rlc2NyaXB0aW9uXCIpO1xudmFyIGdldEFjY0Rlc2NyaXB0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBhY2NEZXNjcmlwdGlvbiwgXCJnZXRBY2NEZXNjcmlwdGlvblwiKTtcbnZhciBzZXREaWFncmFtVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgZGlhZ3JhbVRpdGxlID0gc2FuaXRpemVUZXh0Mih0eHQpO1xufSwgXCJzZXREaWFncmFtVGl0bGVcIik7XG52YXIgZ2V0RGlhZ3JhbVRpdGxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBkaWFncmFtVGl0bGUsIFwiZ2V0RGlhZ3JhbVRpdGxlXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZGlhZ3JhbUFQSS50c1xudmFyIGxvZzIgPSBsb2c7XG52YXIgc2V0TG9nTGV2ZWwyID0gc2V0TG9nTGV2ZWw7XG52YXIgZ2V0Q29uZmlnMiA9IGdldENvbmZpZztcbnZhciBzZXRDb25maWcyID0gc2V0Q29uZmlnO1xudmFyIGRlZmF1bHRDb25maWcyID0gZGVmYXVsdENvbmZpZztcbnZhciBzYW5pdGl6ZVRleHQzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCkgPT4gc2FuaXRpemVUZXh0KHRleHQsIGdldENvbmZpZzIoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIHNldHVwR3JhcGhWaWV3Ym94MiA9IHNldHVwR3JhcGhWaWV3Ym94O1xudmFyIGdldENvbW1vbkRiID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIHJldHVybiBjb21tb25EYl9leHBvcnRzO1xufSwgXCJnZXRDb21tb25EYlwiKTtcbnZhciBkaWFncmFtcyA9IHt9O1xudmFyIHJlZ2lzdGVyRGlhZ3JhbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkLCBkaWFncmFtLCBkZXRlY3RvcikgPT4ge1xuICBpZiAoZGlhZ3JhbXNbaWRdKSB7XG4gICAgbG9nMi53YXJuKGBEaWFncmFtIHdpdGggaWQgJHtpZH0gYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKTtcbiAgfVxuICBkaWFncmFtc1tpZF0gPSBkaWFncmFtO1xuICBpZiAoZGV0ZWN0b3IpIHtcbiAgICBhZGREZXRlY3RvcihpZCwgZGV0ZWN0b3IpO1xuICB9XG4gIGFkZFN0eWxlc0ZvckRpYWdyYW0oaWQsIGRpYWdyYW0uc3R5bGVzKTtcbiAgZGlhZ3JhbS5pbmplY3RVdGlscz8uKFxuICAgIGxvZzIsXG4gICAgc2V0TG9nTGV2ZWwyLFxuICAgIGdldENvbmZpZzIsXG4gICAgc2FuaXRpemVUZXh0MyxcbiAgICBzZXR1cEdyYXBoVmlld2JveDIsXG4gICAgZ2V0Q29tbW9uRGIoKSxcbiAgICAoKSA9PiB7XG4gICAgfVxuICApO1xufSwgXCJyZWdpc3RlckRpYWdyYW1cIik7XG52YXIgZ2V0RGlhZ3JhbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5hbWUpID0+IHtcbiAgaWYgKG5hbWUgaW4gZGlhZ3JhbXMpIHtcbiAgICByZXR1cm4gZGlhZ3JhbXNbbmFtZV07XG4gIH1cbiAgdGhyb3cgbmV3IERpYWdyYW1Ob3RGb3VuZEVycm9yKG5hbWUpO1xufSwgXCJnZXREaWFncmFtXCIpO1xudmFyIERpYWdyYW1Ob3RGb3VuZEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiRGlhZ3JhbU5vdEZvdW5kRXJyb3JcIik7XG4gIH1cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKGBEaWFncmFtICR7bmFtZX0gbm90IGZvdW5kLmApO1xuICB9XG59O1xuXG5leHBvcnQge1xuICBfX25hbWUsXG4gIF9fZXhwb3J0LFxuICBsb2csXG4gIHNldExvZ0xldmVsLFxuICBmcm9udE1hdHRlclJlZ2V4LFxuICBkaXJlY3RpdmVSZWdleCxcbiAgVW5rbm93bkRpYWdyYW1FcnJvcixcbiAgZGV0ZWN0b3JzLFxuICBkZXRlY3RUeXBlLFxuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyxcbiAgZ2V0RGlhZ3JhbUxvYWRlcixcbiAgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQsXG4gIGdldFRoZW1lVmFyaWFibGVzMyBhcyBnZXRUaGVtZVZhcmlhYmxlcyxcbiAgdGhlbWVzX2RlZmF1bHQsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgc2FuaXRpemVEaXJlY3RpdmUsXG4gIGRlZmF1bHRDb25maWcsXG4gIHNldFNpdGVDb25maWcsXG4gIHNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZSxcbiAgdXBkYXRlU2l0ZUNvbmZpZyxcbiAgZ2V0U2l0ZUNvbmZpZyxcbiAgc2V0Q29uZmlnLFxuICBnZXRDb25maWcsXG4gIGFkZERpcmVjdGl2ZSxcbiAgcmVzZXQsXG4gIGxpbmVCcmVha1JlZ2V4LFxuICBzYW5pdGl6ZVRleHQsXG4gIGV2YWx1YXRlLFxuICBwYXJzZUdlbmVyaWNUeXBlcyxcbiAgaGFzS2F0ZXgsXG4gIGNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMsXG4gIHJlbmRlckthdGV4LFxuICBjb21tb25fZGVmYXVsdCxcbiAgY29uZmlndXJlU3ZnU2l6ZSxcbiAgc2V0dXBHcmFwaFZpZXdib3gsXG4gIHN0eWxlc19kZWZhdWx0LFxuICBjbGVhcixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBjb21tb25EYl9leHBvcnRzLFxuICBnZXRDb25maWcyLFxuICBzZXRDb25maWcyLFxuICBkZWZhdWx0Q29uZmlnMixcbiAgc2V0dXBHcmFwaFZpZXdib3gyLFxuICByZWdpc3RlckRpYWdyYW0sXG4gIGdldERpYWdyYW1cbn07XG4iLAogICAgImNvbnN0IGRlZmF1bHRJY29uRGltZW5zaW9ucyA9IE9iamVjdC5mcmVlemUoXG4gIHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNlxuICB9XG4pO1xuY29uc3QgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgcm90YXRlOiAwLFxuICB2RmxpcDogZmFsc2UsXG4gIGhGbGlwOiBmYWxzZVxufSk7XG5jb25zdCBkZWZhdWx0SWNvblByb3BzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIC4uLmRlZmF1bHRJY29uRGltZW5zaW9ucyxcbiAgLi4uZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNcbn0pO1xuY29uc3QgZGVmYXVsdEV4dGVuZGVkSWNvblByb3BzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIC4uLmRlZmF1bHRJY29uUHJvcHMsXG4gIGJvZHk6IFwiXCIsXG4gIGhpZGRlbjogZmFsc2Vcbn0pO1xuXG5leHBvcnQgeyBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHMsIGRlZmF1bHRJY29uRGltZW5zaW9ucywgZGVmYXVsdEljb25Qcm9wcywgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgfTtcbiIsCiAgICAiaW1wb3J0IHsgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuLi9pY29uL2RlZmF1bHRzLm1qcyc7XG5cbmNvbnN0IGRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGxcbn0pO1xuY29uc3QgZGVmYXVsdEljb25DdXN0b21pc2F0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICAvLyBEaW1lbnNpb25zXG4gIC4uLmRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zLFxuICAvLyBUcmFuc2Zvcm1hdGlvbnNcbiAgLi4uZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNcbn0pO1xuXG5leHBvcnQgeyBkZWZhdWx0SWNvbkN1c3RvbWlzYXRpb25zLCBkZWZhdWx0SWNvblNpemVDdXN0b21pc2F0aW9ucyB9O1xuIiwKICAgICJjb25zdCBtYXRjaEljb25OYW1lID0gL15bYS16MC05XSsoLVthLXowLTldKykqJC87XG5jb25zdCBzdHJpbmdUb0ljb24gPSAodmFsdWUsIHZhbGlkYXRlLCBhbGxvd1NpbXBsZU5hbWUsIHByb3ZpZGVyID0gXCJcIikgPT4ge1xuICBjb25zdCBjb2xvblNlcGFyYXRlZCA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgaWYgKHZhbHVlLnNsaWNlKDAsIDEpID09PSBcIkBcIikge1xuICAgIGlmIChjb2xvblNlcGFyYXRlZC5sZW5ndGggPCAyIHx8IGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm92aWRlciA9IGNvbG9uU2VwYXJhdGVkLnNoaWZ0KCkuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDMgfHwgIWNvbG9uU2VwYXJhdGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChjb2xvblNlcGFyYXRlZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgbmFtZTIgPSBjb2xvblNlcGFyYXRlZC5wb3AoKTtcbiAgICBjb25zdCBwcmVmaXggPSBjb2xvblNlcGFyYXRlZC5wb3AoKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAvLyBBbGxvdyBwcm92aWRlciB3aXRob3V0ICdAJzogXCJwcm92aWRlcjpwcmVmaXg6bmFtZVwiXG4gICAgICBwcm92aWRlcjogY29sb25TZXBhcmF0ZWQubGVuZ3RoID4gMCA/IGNvbG9uU2VwYXJhdGVkWzBdIDogcHJvdmlkZXIsXG4gICAgICBwcmVmaXgsXG4gICAgICBuYW1lOiBuYW1lMlxuICAgIH07XG4gICAgcmV0dXJuIHZhbGlkYXRlICYmICF2YWxpZGF0ZUljb25OYW1lKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xuICB9XG4gIGNvbnN0IG5hbWUgPSBjb2xvblNlcGFyYXRlZFswXTtcbiAgY29uc3QgZGFzaFNlcGFyYXRlZCA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICBpZiAoZGFzaFNlcGFyYXRlZC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcHJvdmlkZXIsXG4gICAgICBwcmVmaXg6IGRhc2hTZXBhcmF0ZWQuc2hpZnQoKSxcbiAgICAgIG5hbWU6IGRhc2hTZXBhcmF0ZWQuam9pbihcIi1cIilcbiAgICB9O1xuICAgIHJldHVybiB2YWxpZGF0ZSAmJiAhdmFsaWRhdGVJY29uTmFtZShyZXN1bHQpID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICBpZiAoYWxsb3dTaW1wbGVOYW1lICYmIHByb3ZpZGVyID09PSBcIlwiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcHJvdmlkZXIsXG4gICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICBuYW1lXG4gICAgfTtcbiAgICByZXR1cm4gdmFsaWRhdGUgJiYgIXZhbGlkYXRlSWNvbk5hbWUocmVzdWx0LCBhbGxvd1NpbXBsZU5hbWUpID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCB2YWxpZGF0ZUljb25OYW1lID0gKGljb24sIGFsbG93U2ltcGxlTmFtZSkgPT4ge1xuICBpZiAoIWljb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICEhKChpY29uLnByb3ZpZGVyID09PSBcIlwiIHx8IGljb24ucHJvdmlkZXIubWF0Y2gobWF0Y2hJY29uTmFtZSkpICYmIChhbGxvd1NpbXBsZU5hbWUgJiYgaWNvbi5wcmVmaXggPT09IFwiXCIgfHwgaWNvbi5wcmVmaXgubWF0Y2gobWF0Y2hJY29uTmFtZSkpICYmIGljb24ubmFtZS5tYXRjaChtYXRjaEljb25OYW1lKSk7XG59O1xuXG5leHBvcnQgeyBtYXRjaEljb25OYW1lLCBzdHJpbmdUb0ljb24sIHZhbGlkYXRlSWNvbk5hbWUgfTtcbiIsCiAgICAiZnVuY3Rpb24gbWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zKG9iajEsIG9iajIpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGlmICghb2JqMS5oRmxpcCAhPT0gIW9iajIuaEZsaXApIHtcbiAgICByZXN1bHQuaEZsaXAgPSB0cnVlO1xuICB9XG4gIGlmICghb2JqMS52RmxpcCAhPT0gIW9iajIudkZsaXApIHtcbiAgICByZXN1bHQudkZsaXAgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHJvdGF0ZSA9ICgob2JqMS5yb3RhdGUgfHwgMCkgKyAob2JqMi5yb3RhdGUgfHwgMCkpICUgNDtcbiAgaWYgKHJvdGF0ZSkge1xuICAgIHJlc3VsdC5yb3RhdGUgPSByb3RhdGU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHsgbWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zIH07XG4iLAogICAgImltcG9ydCB7IGRlZmF1bHRFeHRlbmRlZEljb25Qcm9wcywgZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuL2RlZmF1bHRzLm1qcyc7XG5pbXBvcnQgeyBtZXJnZUljb25UcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuL3RyYW5zZm9ybWF0aW9ucy5tanMnO1xuXG5mdW5jdGlvbiBtZXJnZUljb25EYXRhKHBhcmVudCwgY2hpbGQpIHtcbiAgY29uc3QgcmVzdWx0ID0gbWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zKHBhcmVudCwgY2hpbGQpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHMpIHtcbiAgICBpZiAoa2V5IGluIGRlZmF1bHRJY29uVHJhbnNmb3JtYXRpb25zKSB7XG4gICAgICBpZiAoa2V5IGluIHBhcmVudCAmJiAhKGtleSBpbiByZXN1bHQpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNba2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSBpbiBjaGlsZCkge1xuICAgICAgcmVzdWx0W2tleV0gPSBjaGlsZFtrZXldO1xuICAgIH0gZWxzZSBpZiAoa2V5IGluIHBhcmVudCkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwYXJlbnRba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHsgbWVyZ2VJY29uRGF0YSB9O1xuIiwKICAgICJmdW5jdGlvbiBnZXRJY29uc1RyZWUoZGF0YSwgbmFtZXMpIHtcbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCByZXNvbHZlZCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmdW5jdGlvbiByZXNvbHZlKG5hbWUpIHtcbiAgICBpZiAoaWNvbnNbbmFtZV0pIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFtuYW1lXSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIHJlc29sdmVkKSkge1xuICAgICAgcmVzb2x2ZWRbbmFtZV0gPSBudWxsO1xuICAgICAgY29uc3QgcGFyZW50ID0gYWxpYXNlc1tuYW1lXSAmJiBhbGlhc2VzW25hbWVdLnBhcmVudDtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyZW50ICYmIHJlc29sdmUocGFyZW50KTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlZFtuYW1lXSA9IFtwYXJlbnRdLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFtuYW1lXTtcbiAgfVxuICAobmFtZXMgfHwgT2JqZWN0LmtleXMoaWNvbnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc2VzKSkpLmZvckVhY2gocmVzb2x2ZSk7XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IHsgZ2V0SWNvbnNUcmVlIH07XG4iLAogICAgImltcG9ydCB7IG1lcmdlSWNvbkRhdGEgfSBmcm9tICcuLi9pY29uL21lcmdlLm1qcyc7XG5pbXBvcnQgeyBnZXRJY29uc1RyZWUgfSBmcm9tICcuL3RyZWUubWpzJztcbmltcG9ydCAnLi4vaWNvbi9kZWZhdWx0cy5tanMnO1xuaW1wb3J0ICcuLi9pY29uL3RyYW5zZm9ybWF0aW9ucy5tanMnO1xuXG5mdW5jdGlvbiBpbnRlcm5hbEdldEljb25EYXRhKGRhdGEsIG5hbWUsIHRyZWUpIHtcbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBsZXQgY3VycmVudFByb3BzID0ge307XG4gIGZ1bmN0aW9uIHBhcnNlKG5hbWUyKSB7XG4gICAgY3VycmVudFByb3BzID0gbWVyZ2VJY29uRGF0YShcbiAgICAgIGljb25zW25hbWUyXSB8fCBhbGlhc2VzW25hbWUyXSxcbiAgICAgIGN1cnJlbnRQcm9wc1xuICAgICk7XG4gIH1cbiAgcGFyc2UobmFtZSk7XG4gIHRyZWUuZm9yRWFjaChwYXJzZSk7XG4gIHJldHVybiBtZXJnZUljb25EYXRhKGRhdGEsIGN1cnJlbnRQcm9wcyk7XG59XG5mdW5jdGlvbiBnZXRJY29uRGF0YShkYXRhLCBuYW1lKSB7XG4gIGlmIChkYXRhLmljb25zW25hbWVdKSB7XG4gICAgcmV0dXJuIGludGVybmFsR2V0SWNvbkRhdGEoZGF0YSwgbmFtZSwgW10pO1xuICB9XG4gIGNvbnN0IHRyZWUgPSBnZXRJY29uc1RyZWUoZGF0YSwgW25hbWVdKVtuYW1lXTtcbiAgcmV0dXJuIHRyZWUgPyBpbnRlcm5hbEdldEljb25EYXRhKGRhdGEsIG5hbWUsIHRyZWUpIDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0SWNvbkRhdGEsIGludGVybmFsR2V0SWNvbkRhdGEgfTtcbiIsCiAgICAiY29uc3QgdW5pdHNTcGxpdCA9IC8oLT9bMC05Ll0qWzAtOV0rWzAtOS5dKikvZztcbmNvbnN0IHVuaXRzVGVzdCA9IC9eLT9bMC05Ll0qWzAtOV0rWzAtOS5dKiQvZztcbmZ1bmN0aW9uIGNhbGN1bGF0ZVNpemUoc2l6ZSwgcmF0aW8sIHByZWNpc2lvbikge1xuICBpZiAocmF0aW8gPT09IDEpIHtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuICBwcmVjaXNpb24gPSBwcmVjaXNpb24gfHwgMTAwO1xuICBpZiAodHlwZW9mIHNpemUgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHNpemUgKiByYXRpbyAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHNpemU7XG4gIH1cbiAgY29uc3Qgb2xkUGFydHMgPSBzaXplLnNwbGl0KHVuaXRzU3BsaXQpO1xuICBpZiAob2xkUGFydHMgPT09IG51bGwgfHwgIW9sZFBhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzaXplO1xuICB9XG4gIGNvbnN0IG5ld1BhcnRzID0gW107XG4gIGxldCBjb2RlID0gb2xkUGFydHMuc2hpZnQoKTtcbiAgbGV0IGlzTnVtYmVyID0gdW5pdHNUZXN0LnRlc3QoY29kZSk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGlzTnVtYmVyKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KGNvZGUpO1xuICAgICAgaWYgKGlzTmFOKG51bSkpIHtcbiAgICAgICAgbmV3UGFydHMucHVzaChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhcnRzLnB1c2goTWF0aC5jZWlsKG51bSAqIHJhdGlvICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1BhcnRzLnB1c2goY29kZSk7XG4gICAgfVxuICAgIGNvZGUgPSBvbGRQYXJ0cy5zaGlmdCgpO1xuICAgIGlmIChjb2RlID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICBpc051bWJlciA9ICFpc051bWJlcjtcbiAgfVxufVxuXG5leHBvcnQgeyBjYWxjdWxhdGVTaXplIH07XG4iLAogICAgImZ1bmN0aW9uIHNwbGl0U1ZHRGVmcyhjb250ZW50LCB0YWcgPSBcImRlZnNcIikge1xuICBsZXQgZGVmcyA9IFwiXCI7XG4gIGNvbnN0IGluZGV4ID0gY29udGVudC5pbmRleE9mKFwiPFwiICsgdGFnKTtcbiAgd2hpbGUgKGluZGV4ID49IDApIHtcbiAgICBjb25zdCBzdGFydCA9IGNvbnRlbnQuaW5kZXhPZihcIj5cIiwgaW5kZXgpO1xuICAgIGNvbnN0IGVuZCA9IGNvbnRlbnQuaW5kZXhPZihcIjwvXCIgKyB0YWcpO1xuICAgIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGVuZEVuZCA9IGNvbnRlbnQuaW5kZXhPZihcIj5cIiwgZW5kKTtcbiAgICBpZiAoZW5kRW5kID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZnMgKz0gY29udGVudC5zbGljZShzdGFydCArIDEsIGVuZCkudHJpbSgpO1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDAsIGluZGV4KS50cmltKCkgKyBjb250ZW50LnNsaWNlKGVuZEVuZCArIDEpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGVmcyxcbiAgICBjb250ZW50XG4gIH07XG59XG5mdW5jdGlvbiBtZXJnZURlZnNBbmRDb250ZW50KGRlZnMsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIGRlZnMgPyBcIjxkZWZzPlwiICsgZGVmcyArIFwiPC9kZWZzPlwiICsgY29udGVudCA6IGNvbnRlbnQ7XG59XG5mdW5jdGlvbiB3cmFwU1ZHQ29udGVudChib2R5LCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IHNwbGl0ID0gc3BsaXRTVkdEZWZzKGJvZHkpO1xuICByZXR1cm4gbWVyZ2VEZWZzQW5kQ29udGVudChzcGxpdC5kZWZzLCBzdGFydCArIHNwbGl0LmNvbnRlbnQgKyBlbmQpO1xufVxuXG5leHBvcnQgeyBtZXJnZURlZnNBbmRDb250ZW50LCBzcGxpdFNWR0RlZnMsIHdyYXBTVkdDb250ZW50IH07XG4iLAogICAgImltcG9ydCB7IGRlZmF1bHRJY29uUHJvcHMgfSBmcm9tICcuLi9pY29uL2RlZmF1bHRzLm1qcyc7XG5pbXBvcnQgeyBkZWZhdWx0SWNvbkN1c3RvbWlzYXRpb25zIH0gZnJvbSAnLi4vY3VzdG9taXNhdGlvbnMvZGVmYXVsdHMubWpzJztcbmltcG9ydCB7IGNhbGN1bGF0ZVNpemUgfSBmcm9tICcuL3NpemUubWpzJztcbmltcG9ydCB7IHdyYXBTVkdDb250ZW50IH0gZnJvbSAnLi9kZWZzLm1qcyc7XG5cbmNvbnN0IGlzVW5zZXRLZXl3b3JkID0gKHZhbHVlKSA9PiB2YWx1ZSA9PT0gXCJ1bnNldFwiIHx8IHZhbHVlID09PSBcInVuZGVmaW5lZFwiIHx8IHZhbHVlID09PSBcIm5vbmVcIjtcbmZ1bmN0aW9uIGljb25Ub1NWRyhpY29uLCBjdXN0b21pc2F0aW9ucykge1xuICBjb25zdCBmdWxsSWNvbiA9IHtcbiAgICAuLi5kZWZhdWx0SWNvblByb3BzLFxuICAgIC4uLmljb25cbiAgfTtcbiAgY29uc3QgZnVsbEN1c3RvbWlzYXRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRJY29uQ3VzdG9taXNhdGlvbnMsXG4gICAgLi4uY3VzdG9taXNhdGlvbnNcbiAgfTtcbiAgY29uc3QgYm94ID0ge1xuICAgIGxlZnQ6IGZ1bGxJY29uLmxlZnQsXG4gICAgdG9wOiBmdWxsSWNvbi50b3AsXG4gICAgd2lkdGg6IGZ1bGxJY29uLndpZHRoLFxuICAgIGhlaWdodDogZnVsbEljb24uaGVpZ2h0XG4gIH07XG4gIGxldCBib2R5ID0gZnVsbEljb24uYm9keTtcbiAgW2Z1bGxJY29uLCBmdWxsQ3VzdG9taXNhdGlvbnNdLmZvckVhY2goKHByb3BzKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtYXRpb25zID0gW107XG4gICAgY29uc3QgaEZsaXAgPSBwcm9wcy5oRmxpcDtcbiAgICBjb25zdCB2RmxpcCA9IHByb3BzLnZGbGlwO1xuICAgIGxldCByb3RhdGlvbiA9IHByb3BzLnJvdGF0ZTtcbiAgICBpZiAoaEZsaXApIHtcbiAgICAgIGlmICh2RmxpcCkge1xuICAgICAgICByb3RhdGlvbiArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zLnB1c2goXG4gICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoYm94LndpZHRoICsgYm94LmxlZnQpLnRvU3RyaW5nKCkgKyBcIiBcIiArICgwIC0gYm94LnRvcCkudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy5wdXNoKFwic2NhbGUoLTEgMSlcIik7XG4gICAgICAgIGJveC50b3AgPSBib3gubGVmdCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2RmxpcCkge1xuICAgICAgdHJhbnNmb3JtYXRpb25zLnB1c2goXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKDAgLSBib3gubGVmdCkudG9TdHJpbmcoKSArIFwiIFwiICsgKGJveC5oZWlnaHQgKyBib3gudG9wKS50b1N0cmluZygpICsgXCIpXCJcbiAgICAgICk7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMucHVzaChcInNjYWxlKDEgLTEpXCIpO1xuICAgICAgYm94LnRvcCA9IGJveC5sZWZ0ID0gMDtcbiAgICB9XG4gICAgbGV0IHRlbXBWYWx1ZTtcbiAgICBpZiAocm90YXRpb24gPCAwKSB7XG4gICAgICByb3RhdGlvbiAtPSBNYXRoLmZsb29yKHJvdGF0aW9uIC8gNCkgKiA0O1xuICAgIH1cbiAgICByb3RhdGlvbiA9IHJvdGF0aW9uICUgNDtcbiAgICBzd2l0Y2ggKHJvdGF0aW9uKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRlbXBWYWx1ZSA9IGJveC5oZWlnaHQgLyAyICsgYm94LnRvcDtcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zLnVuc2hpZnQoXG4gICAgICAgICAgXCJyb3RhdGUoOTAgXCIgKyB0ZW1wVmFsdWUudG9TdHJpbmcoKSArIFwiIFwiICsgdGVtcFZhbHVlLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zLnVuc2hpZnQoXG4gICAgICAgICAgXCJyb3RhdGUoMTgwIFwiICsgKGJveC53aWR0aCAvIDIgKyBib3gubGVmdCkudG9TdHJpbmcoKSArIFwiIFwiICsgKGJveC5oZWlnaHQgLyAyICsgYm94LnRvcCkudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICB0ZW1wVmFsdWUgPSBib3gud2lkdGggLyAyICsgYm94LmxlZnQ7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgIFwicm90YXRlKC05MCBcIiArIHRlbXBWYWx1ZS50b1N0cmluZygpICsgXCIgXCIgKyB0ZW1wVmFsdWUudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAocm90YXRpb24gJSAyID09PSAxKSB7XG4gICAgICBpZiAoYm94LmxlZnQgIT09IGJveC50b3ApIHtcbiAgICAgICAgdGVtcFZhbHVlID0gYm94LmxlZnQ7XG4gICAgICAgIGJveC5sZWZ0ID0gYm94LnRvcDtcbiAgICAgICAgYm94LnRvcCA9IHRlbXBWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChib3gud2lkdGggIT09IGJveC5oZWlnaHQpIHtcbiAgICAgICAgdGVtcFZhbHVlID0gYm94LndpZHRoO1xuICAgICAgICBib3gud2lkdGggPSBib3guaGVpZ2h0O1xuICAgICAgICBib3guaGVpZ2h0ID0gdGVtcFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHJhbnNmb3JtYXRpb25zLmxlbmd0aCkge1xuICAgICAgYm9keSA9IHdyYXBTVkdDb250ZW50KFxuICAgICAgICBib2R5LFxuICAgICAgICAnPGcgdHJhbnNmb3JtPVwiJyArIHRyYW5zZm9ybWF0aW9ucy5qb2luKFwiIFwiKSArICdcIj4nLFxuICAgICAgICBcIjwvZz5cIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBjdXN0b21pc2F0aW9uc1dpZHRoID0gZnVsbEN1c3RvbWlzYXRpb25zLndpZHRoO1xuICBjb25zdCBjdXN0b21pc2F0aW9uc0hlaWdodCA9IGZ1bGxDdXN0b21pc2F0aW9ucy5oZWlnaHQ7XG4gIGNvbnN0IGJveFdpZHRoID0gYm94LndpZHRoO1xuICBjb25zdCBib3hIZWlnaHQgPSBib3guaGVpZ2h0O1xuICBsZXQgd2lkdGg7XG4gIGxldCBoZWlnaHQ7XG4gIGlmIChjdXN0b21pc2F0aW9uc1dpZHRoID09PSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IG51bGwgPyBcIjFlbVwiIDogY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IFwiYXV0b1wiID8gYm94SGVpZ2h0IDogY3VzdG9taXNhdGlvbnNIZWlnaHQ7XG4gICAgd2lkdGggPSBjYWxjdWxhdGVTaXplKGhlaWdodCwgYm94V2lkdGggLyBib3hIZWlnaHQpO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gY3VzdG9taXNhdGlvbnNXaWR0aCA9PT0gXCJhdXRvXCIgPyBib3hXaWR0aCA6IGN1c3RvbWlzYXRpb25zV2lkdGg7XG4gICAgaGVpZ2h0ID0gY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IG51bGwgPyBjYWxjdWxhdGVTaXplKHdpZHRoLCBib3hIZWlnaHQgLyBib3hXaWR0aCkgOiBjdXN0b21pc2F0aW9uc0hlaWdodCA9PT0gXCJhdXRvXCIgPyBib3hIZWlnaHQgOiBjdXN0b21pc2F0aW9uc0hlaWdodDtcbiAgfVxuICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gIGNvbnN0IHNldEF0dHIgPSAocHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAoIWlzVW5zZXRLZXl3b3JkKHZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlc1twcm9wXSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9O1xuICBzZXRBdHRyKFwid2lkdGhcIiwgd2lkdGgpO1xuICBzZXRBdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gIGNvbnN0IHZpZXdCb3ggPSBbYm94LmxlZnQsIGJveC50b3AsIGJveFdpZHRoLCBib3hIZWlnaHRdO1xuICBhdHRyaWJ1dGVzLnZpZXdCb3ggPSB2aWV3Qm94LmpvaW4oXCIgXCIpO1xuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZXMsXG4gICAgdmlld0JveCxcbiAgICBib2R5XG4gIH07XG59XG5cbmV4cG9ydCB7IGljb25Ub1NWRywgaXNVbnNldEtleXdvcmQgfTtcbiIsCiAgICAiY29uc3QgcmVnZXggPSAvXFxzaWQ9XCIoXFxTKylcIi9nO1xuY29uc3QgcmFuZG9tUHJlZml4ID0gXCJJY29uaWZ5SWRcIiArIERhdGUubm93KCkudG9TdHJpbmcoMTYpICsgKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNiB8IDApLnRvU3RyaW5nKDE2KTtcbmxldCBjb3VudGVyID0gMDtcbmZ1bmN0aW9uIHJlcGxhY2VJRHMoYm9keSwgcHJlZml4ID0gcmFuZG9tUHJlZml4KSB7XG4gIGNvbnN0IGlkcyA9IFtdO1xuICBsZXQgbWF0Y2g7XG4gIHdoaWxlIChtYXRjaCA9IHJlZ2V4LmV4ZWMoYm9keSkpIHtcbiAgICBpZHMucHVzaChtYXRjaFsxXSk7XG4gIH1cbiAgaWYgKCFpZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgY29uc3Qgc3VmZml4ID0gXCJzdWZmaXhcIiArIChNYXRoLnJhbmRvbSgpICogMTY3NzcyMTYgfCBEYXRlLm5vdygpKS50b1N0cmluZygxNik7XG4gIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgIGNvbnN0IG5ld0lEID0gdHlwZW9mIHByZWZpeCA9PT0gXCJmdW5jdGlvblwiID8gcHJlZml4KGlkKSA6IHByZWZpeCArIChjb3VudGVyKyspLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZXNjYXBlZElEID0gaWQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xuICAgIGJvZHkgPSBib2R5LnJlcGxhY2UoXG4gICAgICAvLyBBbGxvd2VkIGNoYXJhY3RlcnMgYmVmb3JlIGlkOiBbIztcIl1cbiAgICAgIC8vIEFsbG93ZWQgY2hhcmFjdGVycyBhZnRlciBpZDogWylcIl0sIC5bYS16XVxuICAgICAgbmV3IFJlZ0V4cCgnKFsjO1wiXSkoJyArIGVzY2FwZWRJRCArICcpKFtcIildfFxcXFwuW2Etel0pJywgXCJnXCIpLFxuICAgICAgXCIkMVwiICsgbmV3SUQgKyBzdWZmaXggKyBcIiQzXCJcbiAgICApO1xuICB9KTtcbiAgYm9keSA9IGJvZHkucmVwbGFjZShuZXcgUmVnRXhwKHN1ZmZpeCwgXCJnXCIpLCBcIlwiKTtcbiAgcmV0dXJuIGJvZHk7XG59XG5cbmV4cG9ydCB7IHJlcGxhY2VJRHMgfTtcbiIsCiAgICAiZnVuY3Rpb24gaWNvblRvSFRNTChib2R5LCBhdHRyaWJ1dGVzKSB7XG4gIGxldCByZW5kZXJBdHRyaWJzSFRNTCA9IGJvZHkuaW5kZXhPZihcInhsaW5rOlwiKSA9PT0gLTEgPyBcIlwiIDogJyB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIic7XG4gIGZvciAoY29uc3QgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgcmVuZGVyQXR0cmlic0hUTUwgKz0gXCIgXCIgKyBhdHRyICsgJz1cIicgKyBhdHRyaWJ1dGVzW2F0dHJdICsgJ1wiJztcbiAgfVxuICByZXR1cm4gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiJyArIHJlbmRlckF0dHJpYnNIVE1MICsgXCI+XCIgKyBib2R5ICsgXCI8L3N2Zz5cIjtcbn1cblxuZXhwb3J0IHsgaWNvblRvSFRNTCB9O1xuIiwKICAgICIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsKSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oLT8oPzpcXGQrKT9cXC4/XFxkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKFxuICAgIHN0clxuICApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gIHZhciB0eXBlID0gKG1hdGNoWzJdIHx8ICdtcycpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3llYXJzJzpcbiAgICBjYXNlICd5ZWFyJzpcbiAgICBjYXNlICd5cnMnOlxuICAgIGNhc2UgJ3lyJzpcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBuICogeTtcbiAgICBjYXNlICd3ZWVrcyc6XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgY2FzZSAndyc6XG4gICAgICByZXR1cm4gbiAqIHc7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBkKSArICdkJztcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gaCkgKyAnaCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBzKSArICdzJztcbiAgfVxuICByZXR1cm4gbXMgKyAnbXMnO1xufVxuXG4vKipcbiAqIExvbmcgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10TG9uZyhtcykge1xuICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gIGlmIChtc0FicyA+PSBkKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gaCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBoLCAnaG91cicpO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIG0sICdtaW51dGUnKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gIH1cbiAgcmV0dXJuIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBtc0FicywgbiwgbmFtZSkge1xuICB2YXIgaXNQbHVyYWwgPSBtc0FicyA+PSBuICogMS41O1xuICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsCiAgICAiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsCiAgICAiLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG5leHBvcnRzLmRlc3Ryb3kgPSAoKCkgPT4ge1xuXHRsZXQgd2FybmVkID0gZmFsc2U7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXdhcm5lZCkge1xuXHRcdFx0d2FybmVkID0gdHJ1ZTtcblx0XHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuXHQnIzAwMDBDQycsXG5cdCcjMDAwMEZGJyxcblx0JyMwMDMzQ0MnLFxuXHQnIzAwMzNGRicsXG5cdCcjMDA2NkNDJyxcblx0JyMwMDY2RkYnLFxuXHQnIzAwOTlDQycsXG5cdCcjMDA5OUZGJyxcblx0JyMwMENDMDAnLFxuXHQnIzAwQ0MzMycsXG5cdCcjMDBDQzY2Jyxcblx0JyMwMENDOTknLFxuXHQnIzAwQ0NDQycsXG5cdCcjMDBDQ0ZGJyxcblx0JyMzMzAwQ0MnLFxuXHQnIzMzMDBGRicsXG5cdCcjMzMzM0NDJyxcblx0JyMzMzMzRkYnLFxuXHQnIzMzNjZDQycsXG5cdCcjMzM2NkZGJyxcblx0JyMzMzk5Q0MnLFxuXHQnIzMzOTlGRicsXG5cdCcjMzNDQzAwJyxcblx0JyMzM0NDMzMnLFxuXHQnIzMzQ0M2NicsXG5cdCcjMzNDQzk5Jyxcblx0JyMzM0NDQ0MnLFxuXHQnIzMzQ0NGRicsXG5cdCcjNjYwMENDJyxcblx0JyM2NjAwRkYnLFxuXHQnIzY2MzNDQycsXG5cdCcjNjYzM0ZGJyxcblx0JyM2NkNDMDAnLFxuXHQnIzY2Q0MzMycsXG5cdCcjOTkwMENDJyxcblx0JyM5OTAwRkYnLFxuXHQnIzk5MzNDQycsXG5cdCcjOTkzM0ZGJyxcblx0JyM5OUNDMDAnLFxuXHQnIzk5Q0MzMycsXG5cdCcjQ0MwMDAwJyxcblx0JyNDQzAwMzMnLFxuXHQnI0NDMDA2NicsXG5cdCcjQ0MwMDk5Jyxcblx0JyNDQzAwQ0MnLFxuXHQnI0NDMDBGRicsXG5cdCcjQ0MzMzAwJyxcblx0JyNDQzMzMzMnLFxuXHQnI0NDMzM2NicsXG5cdCcjQ0MzMzk5Jyxcblx0JyNDQzMzQ0MnLFxuXHQnI0NDMzNGRicsXG5cdCcjQ0M2NjAwJyxcblx0JyNDQzY2MzMnLFxuXHQnI0NDOTkwMCcsXG5cdCcjQ0M5OTMzJyxcblx0JyNDQ0NDMDAnLFxuXHQnI0NDQ0MzMycsXG5cdCcjRkYwMDAwJyxcblx0JyNGRjAwMzMnLFxuXHQnI0ZGMDA2NicsXG5cdCcjRkYwMDk5Jyxcblx0JyNGRjAwQ0MnLFxuXHQnI0ZGMDBGRicsXG5cdCcjRkYzMzAwJyxcblx0JyNGRjMzMzMnLFxuXHQnI0ZGMzM2NicsXG5cdCcjRkYzMzk5Jyxcblx0JyNGRjMzQ0MnLFxuXHQnI0ZGMzNGRicsXG5cdCcjRkY2NjAwJyxcblx0JyNGRjY2MzMnLFxuXHQnI0ZGOTkwMCcsXG5cdCcjRkY5OTMzJyxcblx0JyNGRkNDMDAnLFxuXHQnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0Ly8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuXHQvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuXHQvLyBleHBsaWNpdGx5XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiAod2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCB3aW5kb3cucHJvY2Vzcy5fX253anMpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGxldCBtO1xuXG5cdC8vIElzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG5cdC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG5cdHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuXHRcdC8vIElzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcblx0XHQodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuXHRcdC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuXHRcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIChtID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpICYmIHBhcnNlSW50KG1bMV0sIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLAogICAgImV4cG9ydCB7IGRlZmF1bHRJY29uQ3VzdG9taXNhdGlvbnMsIGRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zIH0gZnJvbSAnLi9jdXN0b21pc2F0aW9ucy9kZWZhdWx0cy5tanMnO1xuZXhwb3J0IHsgbWVyZ2VDdXN0b21pc2F0aW9ucyB9IGZyb20gJy4vY3VzdG9taXNhdGlvbnMvbWVyZ2UubWpzJztcbmV4cG9ydCB7IHRvQm9vbGVhbiB9IGZyb20gJy4vY3VzdG9taXNhdGlvbnMvYm9vbC5tanMnO1xuZXhwb3J0IHsgZmxpcEZyb21TdHJpbmcgfSBmcm9tICcuL2N1c3RvbWlzYXRpb25zL2ZsaXAubWpzJztcbmV4cG9ydCB7IHJvdGF0ZUZyb21TdHJpbmcgfSBmcm9tICcuL2N1c3RvbWlzYXRpb25zL3JvdGF0ZS5tanMnO1xuZXhwb3J0IHsgbWF0Y2hJY29uTmFtZSwgc3RyaW5nVG9JY29uLCB2YWxpZGF0ZUljb25OYW1lIH0gZnJvbSAnLi9pY29uL25hbWUubWpzJztcbmV4cG9ydCB7IG1lcmdlSWNvbkRhdGEgfSBmcm9tICcuL2ljb24vbWVyZ2UubWpzJztcbmV4cG9ydCB7IG1lcmdlSWNvblRyYW5zZm9ybWF0aW9ucyB9IGZyb20gJy4vaWNvbi90cmFuc2Zvcm1hdGlvbnMubWpzJztcbmV4cG9ydCB7IGRlZmF1bHRFeHRlbmRlZEljb25Qcm9wcywgZGVmYXVsdEljb25EaW1lbnNpb25zLCBkZWZhdWx0SWNvblByb3BzLCBkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9ucyB9IGZyb20gJy4vaWNvbi9kZWZhdWx0cy5tanMnO1xuZXhwb3J0IHsgbWFrZUljb25TcXVhcmUgfSBmcm9tICcuL2ljb24vc3F1YXJlLm1qcyc7XG5leHBvcnQgeyBnZXRJY29uc1RyZWUgfSBmcm9tICcuL2ljb24tc2V0L3RyZWUubWpzJztcbmV4cG9ydCB7IHBhcnNlSWNvblNldCwgcGFyc2VJY29uU2V0QXN5bmMgfSBmcm9tICcuL2ljb24tc2V0L3BhcnNlLm1qcyc7XG5leHBvcnQgeyB2YWxpZGF0ZUljb25TZXQgfSBmcm9tICcuL2ljb24tc2V0L3ZhbGlkYXRlLm1qcyc7XG5leHBvcnQgeyBxdWlja2x5VmFsaWRhdGVJY29uU2V0IH0gZnJvbSAnLi9pY29uLXNldC92YWxpZGF0ZS1iYXNpYy5tanMnO1xuZXhwb3J0IHsgZXhwYW5kSWNvblNldCB9IGZyb20gJy4vaWNvbi1zZXQvZXhwYW5kLm1qcyc7XG5leHBvcnQgeyBtaW5pZnlJY29uU2V0IH0gZnJvbSAnLi9pY29uLXNldC9taW5pZnkubWpzJztcbmV4cG9ydCB7IGdldEljb25zIH0gZnJvbSAnLi9pY29uLXNldC9nZXQtaWNvbnMubWpzJztcbmV4cG9ydCB7IGdldEljb25EYXRhIH0gZnJvbSAnLi9pY29uLXNldC9nZXQtaWNvbi5tanMnO1xuZXhwb3J0IHsgY29udmVydEljb25TZXRJbmZvIH0gZnJvbSAnLi9pY29uLXNldC9jb252ZXJ0LWluZm8ubWpzJztcbmV4cG9ydCB7IGljb25Ub1NWRyB9IGZyb20gJy4vc3ZnL2J1aWxkLm1qcyc7XG5leHBvcnQgeyBtZXJnZURlZnNBbmRDb250ZW50LCBzcGxpdFNWR0RlZnMsIHdyYXBTVkdDb250ZW50IH0gZnJvbSAnLi9zdmcvZGVmcy5tanMnO1xuZXhwb3J0IHsgcmVwbGFjZUlEcyB9IGZyb20gJy4vc3ZnL2lkLm1qcyc7XG5leHBvcnQgeyBjYWxjdWxhdGVTaXplIH0gZnJvbSAnLi9zdmcvc2l6ZS5tanMnO1xuZXhwb3J0IHsgZW5jb2RlU3ZnRm9yQ3NzIH0gZnJvbSAnLi9zdmcvZW5jb2RlLXN2Zy1mb3ItY3NzLm1qcyc7XG5leHBvcnQgeyB0cmltU1ZHIH0gZnJvbSAnLi9zdmcvdHJpbS5tanMnO1xuZXhwb3J0IHsgcHJldHRpZnlTVkcgfSBmcm9tICcuL3N2Zy9wcmV0dHkubWpzJztcbmV4cG9ydCB7IGljb25Ub0hUTUwgfSBmcm9tICcuL3N2Zy9odG1sLm1qcyc7XG5leHBvcnQgeyBzdmdUb0RhdGEsIHN2Z1RvVVJMIH0gZnJvbSAnLi9zdmcvdXJsLm1qcyc7XG5leHBvcnQgeyBjbGVhblVwSW5uZXJIVE1MIH0gZnJvbSAnLi9zdmcvaW5uZXItaHRtbC5tanMnO1xuZXhwb3J0IHsgZ2V0U1ZHVmlld0JveCB9IGZyb20gJy4vc3ZnL3ZpZXdib3gubWpzJztcbmV4cG9ydCB7IGJ1aWxkUGFyc2VkU1ZHLCBjb252ZXJ0UGFyc2VkU1ZHLCBwYXJzZVNWR0NvbnRlbnQgfSBmcm9tICcuL3N2Zy9wYXJzZS5tanMnO1xuZXhwb3J0IHsgY29sb3JLZXl3b3JkcyB9IGZyb20gJy4vY29sb3JzL2tleXdvcmRzLm1qcyc7XG5leHBvcnQgeyBjb2xvclRvU3RyaW5nLCBjb21wYXJlQ29sb3JzLCBzdHJpbmdUb0NvbG9yIH0gZnJvbSAnLi9jb2xvcnMvaW5kZXgubWpzJztcbmV4cG9ydCB7IGdldEljb25DU1MsIGdldEljb25Db250ZW50Q1NTIH0gZnJvbSAnLi9jc3MvaWNvbi5tanMnO1xuZXhwb3J0IHsgZ2V0SWNvbnNDU1MsIGdldEljb25zQ29udGVudENTUyB9IGZyb20gJy4vY3NzL2ljb25zLm1qcyc7XG5leHBvcnQgeyBtZXJnZUljb25Qcm9wcyB9IGZyb20gJy4vbG9hZGVyL3V0aWxzLm1qcyc7XG5leHBvcnQgeyBnZXRDdXN0b21JY29uIH0gZnJvbSAnLi9sb2FkZXIvY3VzdG9tLm1qcyc7XG5leHBvcnQgeyBzZWFyY2hGb3JJY29uIH0gZnJvbSAnLi9sb2FkZXIvbW9kZXJuLm1qcyc7XG5leHBvcnQgeyBsb2FkSWNvbiB9IGZyb20gJy4vbG9hZGVyL2xvYWRlci5tanMnO1xuZXhwb3J0IHsgZ2V0RW1vamlTZXF1ZW5jZUZyb21TdHJpbmcsIGdldFVucXVhbGlmaWVkRW1vamlTZXF1ZW5jZSB9IGZyb20gJy4vZW1vamkvY2xlYW51cC5tanMnO1xuZXhwb3J0IHsgY29udmVydEVtb2ppU2VxdWVuY2VUb1VURjE2LCBjb252ZXJ0RW1vamlTZXF1ZW5jZVRvVVRGMzIsIGdldEVtb2ppQ29kZVBvaW50LCBnZXRFbW9qaVVuaWNvZGUsIGlzVVRGMzJTcGxpdE51bWJlciwgbWVyZ2VVVEYzMk51bWJlcnMsIHNwbGl0VVRGMzJOdW1iZXIgfSBmcm9tICcuL2Vtb2ppL2NvbnZlcnQubWpzJztcbmV4cG9ydCB7IGdldEVtb2ppU2VxdWVuY2VLZXl3b3JkLCBnZXRFbW9qaVNlcXVlbmNlU3RyaW5nLCBnZXRFbW9qaVVuaWNvZGVTdHJpbmcgfSBmcm9tICcuL2Vtb2ppL2Zvcm1hdC5tanMnO1xuZXhwb3J0IHsgcGFyc2VFbW9qaVRlc3RGaWxlIH0gZnJvbSAnLi9lbW9qaS90ZXN0L3BhcnNlLm1qcyc7XG5leHBvcnQgeyBnZXRRdWFsaWZpZWRFbW9qaVZhcmlhdGlvbnMgfSBmcm9tICcuL2Vtb2ppL3Rlc3QvdmFyaWF0aW9ucy5tanMnO1xuZXhwb3J0IHsgZmluZE1pc3NpbmdFbW9qaXMgfSBmcm9tICcuL2Vtb2ppL3Rlc3QvbWlzc2luZy5tanMnO1xuZXhwb3J0IHsgY3JlYXRlT3B0aW1pc2VkUmVnZXgsIGNyZWF0ZU9wdGltaXNlZFJlZ2V4Rm9yRW1vamlTZXF1ZW5jZXMgfSBmcm9tICcuL2Vtb2ppL3JlZ2V4L2NyZWF0ZS5tanMnO1xuZXhwb3J0IHsgcHJlcGFyZUVtb2ppRm9ySWNvblNldCwgcHJlcGFyZUVtb2ppRm9ySWNvbnNMaXN0IH0gZnJvbSAnLi9lbW9qaS9wYXJzZS5tanMnO1xuZXhwb3J0IHsgZmluZEFuZFJlcGxhY2VFbW9qaXNJblRleHQgfSBmcm9tICcuL2Vtb2ppL3JlcGxhY2UvcmVwbGFjZS5tanMnO1xuZXhwb3J0IHsgY2FtZWxUb0tlYmFiLCBjYW1lbGl6ZSwgcGFzY2FsaXplLCBzbmFrZWxpemUgfSBmcm9tICcuL21pc2Mvc3RyaW5ncy5tanMnO1xuZXhwb3J0IHsgY29tbW9uT2JqZWN0UHJvcHMsIGNvbXBhcmVPYmplY3RzLCB1bm1lcmdlT2JqZWN0cyB9IGZyb20gJy4vbWlzYy9vYmplY3RzLm1qcyc7XG5leHBvcnQgeyBzYW5pdGlzZVRpdGxlQXR0cmlidXRlIH0gZnJvbSAnLi9taXNjL3RpdGxlLm1qcyc7XG5pbXBvcnQgJy4vY3NzL2NvbW1vbi5tanMnO1xuaW1wb3J0ICcuL2Nzcy9mb3JtYXQubWpzJztcbmltcG9ydCAnZGVidWcnO1xuaW1wb3J0ICcuL2Vtb2ppL2RhdGEubWpzJztcbmltcG9ydCAnLi9lbW9qaS90ZXN0L2NvbXBvbmVudHMubWpzJztcbmltcG9ydCAnLi9lbW9qaS9yZWdleC90cmVlLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvcmVnZXgvYmFzZS5tanMnO1xuaW1wb3J0ICcuL2Vtb2ppL3JlZ2V4L251bWJlcnMubWpzJztcbmltcG9ydCAnLi9lbW9qaS9yZWdleC9zaW1pbGFyLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvdGVzdC9zaW1pbGFyLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvdGVzdC9uYW1lLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvdGVzdC90cmVlLm1qcyc7XG5pbXBvcnQgJy4vZW1vamkvcmVwbGFjZS9maW5kLm1qcyc7XG4iLAogICAgImltcG9ydCB7XG4gIF9fbmFtZSxcbiAgbG9nXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvaWNvbnMudHNcbmltcG9ydCB7IGdldEljb25EYXRhLCBpY29uVG9IVE1MLCBpY29uVG9TVkcsIHJlcGxhY2VJRHMsIHN0cmluZ1RvSWNvbiB9IGZyb20gXCJAaWNvbmlmeS91dGlsc1wiO1xudmFyIHVua25vd25JY29uID0ge1xuICBib2R5OiAnPGc+PHJlY3Qgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgc3R5bGU9XCJmaWxsOiAjMDg3ZWJmOyBzdHJva2Utd2lkdGg6IDBweDtcIi8+PHRleHQgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDIxLjE2IDY0LjY3KVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgZm9udC1mYW1pbHk6IEFyaWFsTVQsIEFyaWFsOyBmb250LXNpemU6IDY3Ljc1cHg7XCI+PHRzcGFuIHg9XCIwXCIgeT1cIjBcIj4/PC90c3Bhbj48L3RleHQ+PC9nPicsXG4gIGhlaWdodDogODAsXG4gIHdpZHRoOiA4MFxufTtcbnZhciBpY29uc1N0b3JlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBsb2FkZXJTdG9yZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcmVnaXN0ZXJJY29uUGFja3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpY29uTG9hZGVycykgPT4ge1xuICBmb3IgKGNvbnN0IGljb25Mb2FkZXIgb2YgaWNvbkxvYWRlcnMpIHtcbiAgICBpZiAoIWljb25Mb2FkZXIubmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGEgXCJuYW1lXCIgcHJvcGVydHkgd2l0aCBub24tZW1wdHkgc3RyaW5nIHZhbHVlLidcbiAgICAgICk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcIlJlZ2lzdGVyaW5nIGljb24gcGFjazpcIiwgaWNvbkxvYWRlci5uYW1lKTtcbiAgICBpZiAoXCJsb2FkZXJcIiBpbiBpY29uTG9hZGVyKSB7XG4gICAgICBsb2FkZXJTdG9yZS5zZXQoaWNvbkxvYWRlci5uYW1lLCBpY29uTG9hZGVyLmxvYWRlcik7XG4gICAgfSBlbHNlIGlmIChcImljb25zXCIgaW4gaWNvbkxvYWRlcikge1xuICAgICAgaWNvbnNTdG9yZS5zZXQoaWNvbkxvYWRlci5uYW1lLCBpY29uTG9hZGVyLmljb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmVycm9yKFwiSW52YWxpZCBpY29uIGxvYWRlcjpcIiwgaWNvbkxvYWRlcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBlaXRoZXIgXCJpY29uc1wiIG9yIFwibG9hZGVyXCIgcHJvcGVydHkuJyk7XG4gICAgfVxuICB9XG59LCBcInJlZ2lzdGVySWNvblBhY2tzXCIpO1xudmFyIGdldFJlZ2lzdGVyZWRJY29uRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGljb25OYW1lLCBmYWxsYmFja1ByZWZpeCkgPT4ge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVG9JY29uKGljb25OYW1lLCB0cnVlLCBmYWxsYmFja1ByZWZpeCAhPT0gdm9pZCAwKTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogJHtpY29uTmFtZX1gKTtcbiAgfVxuICBjb25zdCBwcmVmaXggPSBkYXRhLnByZWZpeCB8fCBmYWxsYmFja1ByZWZpeDtcbiAgaWYgKCFwcmVmaXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEljb24gbmFtZSBtdXN0IGNvbnRhaW4gYSBwcmVmaXg6ICR7aWNvbk5hbWV9YCk7XG4gIH1cbiAgbGV0IGljb25zID0gaWNvbnNTdG9yZS5nZXQocHJlZml4KTtcbiAgaWYgKCFpY29ucykge1xuICAgIGNvbnN0IGxvYWRlciA9IGxvYWRlclN0b3JlLmdldChwcmVmaXgpO1xuICAgIGlmICghbG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEljb24gc2V0IG5vdCBmb3VuZDogJHtkYXRhLnByZWZpeH1gKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRlcigpO1xuICAgICAgaWNvbnMgPSB7IC4uLmxvYWRlZCwgcHJlZml4IH07XG4gICAgICBpY29uc1N0b3JlLnNldChwcmVmaXgsIGljb25zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIGljb24gc2V0OiAke2RhdGEucHJlZml4fWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBpY29uRGF0YSA9IGdldEljb25EYXRhKGljb25zLCBkYXRhLm5hbWUpO1xuICBpZiAoIWljb25EYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJY29uIG5vdCBmb3VuZDogJHtpY29uTmFtZX1gKTtcbiAgfVxuICByZXR1cm4gaWNvbkRhdGE7XG59LCBcImdldFJlZ2lzdGVyZWRJY29uRGF0YVwiKTtcbnZhciBnZXRJY29uU1ZHID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoaWNvbk5hbWUsIGN1c3RvbWlzYXRpb25zKSA9PiB7XG4gIGxldCBpY29uRGF0YTtcbiAgdHJ5IHtcbiAgICBpY29uRGF0YSA9IGF3YWl0IGdldFJlZ2lzdGVyZWRJY29uRGF0YShpY29uTmFtZSwgY3VzdG9taXNhdGlvbnM/LmZhbGxiYWNrUHJlZml4KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcihlKTtcbiAgICBpY29uRGF0YSA9IHVua25vd25JY29uO1xuICB9XG4gIGNvbnN0IHJlbmRlckRhdGEgPSBpY29uVG9TVkcoaWNvbkRhdGEsIGN1c3RvbWlzYXRpb25zKTtcbiAgY29uc3Qgc3ZnID0gaWNvblRvSFRNTChyZXBsYWNlSURzKHJlbmRlckRhdGEuYm9keSksIHJlbmRlckRhdGEuYXR0cmlidXRlcyk7XG4gIHJldHVybiBzdmc7XG59LCBcImdldEljb25TVkdcIik7XG5cbmV4cG9ydCB7XG4gIHVua25vd25JY29uLFxuICByZWdpc3Rlckljb25QYWNrcyxcbiAgZ2V0SWNvblNWR1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvdXRpbHMvc3ViR3JhcGhUaXRsZU1hcmdpbnMudHNcbnZhciBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHtcbiAgZmxvd2NoYXJ0XG59KSA9PiB7XG4gIGNvbnN0IHN1YkdyYXBoVGl0bGVUb3BNYXJnaW4gPSBmbG93Y2hhcnQ/LnN1YkdyYXBoVGl0bGVNYXJnaW4/LnRvcCA/PyAwO1xuICBjb25zdCBzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luID0gZmxvd2NoYXJ0Py5zdWJHcmFwaFRpdGxlTWFyZ2luPy5ib3R0b20gPz8gMDtcbiAgY29uc3Qgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luID0gc3ViR3JhcGhUaXRsZVRvcE1hcmdpbiArIHN1YkdyYXBoVGl0bGVCb3R0b21NYXJnaW47XG4gIHJldHVybiB7XG4gICAgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbixcbiAgICBzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luLFxuICAgIHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpblxuICB9O1xufSwgXCJnZXRTdWJHcmFwaFRpdGxlTWFyZ2luc1wiKTtcblxuLy8gc3JjL3V0aWxzL2xpbmVXaXRoT2Zmc2V0LnRzXG52YXIgbWFya2VyT2Zmc2V0cyA9IHtcbiAgYWdncmVnYXRpb246IDE4LFxuICBleHRlbnNpb246IDE4LFxuICBjb21wb3NpdGlvbjogMTgsXG4gIGRlcGVuZGVuY3k6IDYsXG4gIGxvbGxpcG9wOiAxMy41LFxuICBhcnJvd19wb2ludDogNFxufTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZURlbHRhQW5kQW5nbGUocG9pbnQxLCBwb2ludDIpIHtcbiAgaWYgKHBvaW50MSA9PT0gdm9pZCAwIHx8IHBvaW50MiA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHsgYW5nbGU6IDAsIGRlbHRhWDogMCwgZGVsdGFZOiAwIH07XG4gIH1cbiAgcG9pbnQxID0gcG9pbnRUcmFuc2Zvcm1lcihwb2ludDEpO1xuICBwb2ludDIgPSBwb2ludFRyYW5zZm9ybWVyKHBvaW50Mik7XG4gIGNvbnN0IFt4MSwgeTFdID0gW3BvaW50MS54LCBwb2ludDEueV07XG4gIGNvbnN0IFt4MiwgeTJdID0gW3BvaW50Mi54LCBwb2ludDIueV07XG4gIGNvbnN0IGRlbHRhWCA9IHgyIC0geDE7XG4gIGNvbnN0IGRlbHRhWSA9IHkyIC0geTE7XG4gIHJldHVybiB7IGFuZ2xlOiBNYXRoLmF0YW4oZGVsdGFZIC8gZGVsdGFYKSwgZGVsdGFYLCBkZWx0YVkgfTtcbn1cbl9fbmFtZShjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlLCBcImNhbGN1bGF0ZURlbHRhQW5kQW5nbGVcIik7XG52YXIgcG9pbnRUcmFuc2Zvcm1lciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRhdGEpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4geyB4OiBkYXRhWzBdLCB5OiBkYXRhWzFdIH07XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59LCBcInBvaW50VHJhbnNmb3JtZXJcIik7XG52YXIgZ2V0TGluZUZ1bmN0aW9uc1dpdGhPZmZzZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlZGdlKSA9PiB7XG4gIHJldHVybiB7XG4gICAgeDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkLCBpLCBkYXRhKSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgIGlmIChpID09PSAwICYmIE9iamVjdC5oYXNPd24obWFya2VyT2Zmc2V0cywgZWRnZS5hcnJvd1R5cGVTdGFydCkpIHtcbiAgICAgICAgY29uc3QgeyBhbmdsZSwgZGVsdGFYIH0gPSBjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKGRhdGFbMF0sIGRhdGFbMV0pO1xuICAgICAgICBvZmZzZXQgPSBtYXJrZXJPZmZzZXRzW2VkZ2UuYXJyb3dUeXBlU3RhcnRdICogTWF0aC5jb3MoYW5nbGUpICogKGRlbHRhWCA+PSAwID8gMSA6IC0xKTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZGF0YS5sZW5ndGggLSAxICYmIE9iamVjdC5oYXNPd24obWFya2VyT2Zmc2V0cywgZWRnZS5hcnJvd1R5cGVFbmQpKSB7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUsIGRlbHRhWCB9ID0gY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShcbiAgICAgICAgICBkYXRhW2RhdGEubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgZGF0YVtkYXRhLmxlbmd0aCAtIDJdXG4gICAgICAgICk7XG4gICAgICAgIG9mZnNldCA9IG1hcmtlck9mZnNldHNbZWRnZS5hcnJvd1R5cGVFbmRdICogTWF0aC5jb3MoYW5nbGUpICogKGRlbHRhWCA+PSAwID8gMSA6IC0xKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb2ludFRyYW5zZm9ybWVyKGQpLnggKyBvZmZzZXQ7XG4gICAgfSwgXCJ4XCIpLFxuICAgIHk6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZCwgaSwgZGF0YSkge1xuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBpZiAoaSA9PT0gMCAmJiBPYmplY3QuaGFzT3duKG1hcmtlck9mZnNldHMsIGVkZ2UuYXJyb3dUeXBlU3RhcnQpKSB7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUsIGRlbHRhWSB9ID0gY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShkYXRhWzBdLCBkYXRhWzFdKTtcbiAgICAgICAgb2Zmc2V0ID0gbWFya2VyT2Zmc2V0c1tlZGdlLmFycm93VHlwZVN0YXJ0XSAqIE1hdGguYWJzKE1hdGguc2luKGFuZ2xlKSkgKiAoZGVsdGFZID49IDAgPyAxIDogLTEpO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBkYXRhLmxlbmd0aCAtIDEgJiYgT2JqZWN0Lmhhc093bihtYXJrZXJPZmZzZXRzLCBlZGdlLmFycm93VHlwZUVuZCkpIHtcbiAgICAgICAgY29uc3QgeyBhbmdsZSwgZGVsdGFZIH0gPSBjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKFxuICAgICAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSxcbiAgICAgICAgICBkYXRhW2RhdGEubGVuZ3RoIC0gMl1cbiAgICAgICAgKTtcbiAgICAgICAgb2Zmc2V0ID0gbWFya2VyT2Zmc2V0c1tlZGdlLmFycm93VHlwZUVuZF0gKiBNYXRoLmFicyhNYXRoLnNpbihhbmdsZSkpICogKGRlbHRhWSA+PSAwID8gMSA6IC0xKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb2ludFRyYW5zZm9ybWVyKGQpLnkgKyBvZmZzZXQ7XG4gICAgfSwgXCJ5XCIpXG4gIH07XG59LCBcImdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0XCIpO1xuaWYgKHZvaWQgMCkge1xuICBjb25zdCB7IGl0LCBleHBlY3QsIGRlc2NyaWJlIH0gPSB2b2lkIDA7XG4gIGRlc2NyaWJlKFwiY2FsY3VsYXRlRGVsdGFBbmRBbmdsZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIHRoZSBhbmdsZSBhbmQgZGVsdGFzIGJldHdlZW4gdHdvIHBvaW50c1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShbMCwgMF0sIFswLCAxXSkpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgICBhbmdsZTogMS41NzA3OTYzMjY3OTQ4OTY2LFxuICAgICAgICBkZWx0YVg6IDAsXG4gICAgICAgIGRlbHRhWTogMVxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY2FsY3VsYXRlRGVsdGFBbmRBbmdsZShbMSwgMF0sIFswLCAtMV0pKS50b1N0cmljdEVxdWFsKHtcbiAgICAgICAgYW5nbGU6IDAuNzg1Mzk4MTYzMzk3NDQ4MyxcbiAgICAgICAgZGVsdGFYOiAtMSxcbiAgICAgICAgZGVsdGFZOiAtMVxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY2FsY3VsYXRlRGVsdGFBbmRBbmdsZSh7IHg6IDEsIHk6IDAgfSwgWzAsIC0xXSkpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgICBhbmdsZTogMC43ODUzOTgxNjMzOTc0NDgzLFxuICAgICAgICBkZWx0YVg6IC0xLFxuICAgICAgICBkZWx0YVk6IC0xXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKHsgeDogMSwgeTogMCB9LCB7IHg6IDEsIHk6IDAgfSkpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgICBhbmdsZTogTmFOLFxuICAgICAgICBkZWx0YVg6IDAsXG4gICAgICAgIGRlbHRhWTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoXCJzaG91bGQgY2FsY3VsYXRlIHRoZSBhbmdsZSBhbmQgZGVsdGFzIGlmIG9uZSBwb2ludCBpbiB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNhbGN1bGF0ZURlbHRhQW5kQW5nbGUodm9pZCAwLCBbMCwgMV0pKS50b1N0cmljdEVxdWFsKHtcbiAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgIGRlbHRhWDogMCxcbiAgICAgICAgZGVsdGFZOiAwXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlKFswLCAxXSwgdm9pZCAwKSkudG9TdHJpY3RFcXVhbCh7XG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBkZWx0YVg6IDAsXG4gICAgICAgIGRlbHRhWTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQge1xuICBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyxcbiAgZ2V0TGluZUZ1bmN0aW9uc1dpdGhPZmZzZXRcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CTEFOS19VUkwgPSBleHBvcnRzLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzID0gZXhwb3J0cy53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleCA9IGV4cG9ydHMudXJsU2NoZW1lUmVnZXggPSBleHBvcnRzLmN0cmxDaGFyYWN0ZXJzUmVnZXggPSBleHBvcnRzLmh0bWxDdHJsRW50aXR5UmVnZXggPSBleHBvcnRzLmh0bWxFbnRpdGllc1JlZ2V4ID0gZXhwb3J0cy5pbnZhbGlkUHJvdG9jb2xSZWdleCA9IHZvaWQgMDtcbmV4cG9ydHMuaW52YWxpZFByb3RvY29sUmVnZXggPSAvXihbXlxcd10qKShqYXZhc2NyaXB0fGRhdGF8dmJzY3JpcHQpL2ltO1xuZXhwb3J0cy5odG1sRW50aXRpZXNSZWdleCA9IC8mIyhcXHcrKSheXFx3fDspPy9nO1xuZXhwb3J0cy5odG1sQ3RybEVudGl0eVJlZ2V4ID0gLyYobmV3bGluZXx0YWIpOy9naTtcbmV4cG9ydHMuY3RybENoYXJhY3RlcnNSZWdleCA9IC9bXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXFx1MjAwMC1cXHUyMDBEXFx1RkVGRl0vZ2ltO1xuZXhwb3J0cy51cmxTY2hlbWVSZWdleCA9IC9eLisoOnwmY29sb247KS9naW07XG5leHBvcnRzLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4ID0gLyhcXFxcfCU1W2NDXSkoKCUoNltlRV18NzJ8NzQpKXxbbnJ0XSkvZztcbmV4cG9ydHMucmVsYXRpdmVGaXJzdENoYXJhY3RlcnMgPSBbXCIuXCIsIFwiL1wiXTtcbmV4cG9ydHMuQkxBTktfVVJMID0gXCJhYm91dDpibGFua1wiO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2FuaXRpemVVcmwgPSB2b2lkIDA7XG52YXIgY29uc3RhbnRzXzEgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBpc1JlbGF0aXZlVXJsV2l0aG91dFByb3RvY29sKHVybCkge1xuICAgIHJldHVybiBjb25zdGFudHNfMS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycy5pbmRleE9mKHVybFswXSkgPiAtMTtcbn1cbmZ1bmN0aW9uIGRlY29kZUh0bWxDaGFyYWN0ZXJzKHN0cikge1xuICAgIHZhciByZW1vdmVkTnVsbEJ5dGUgPSBzdHIucmVwbGFjZShjb25zdGFudHNfMS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCBcIlwiKTtcbiAgICByZXR1cm4gcmVtb3ZlZE51bGxCeXRlLnJlcGxhY2UoY29uc3RhbnRzXzEuaHRtbEVudGl0aWVzUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgZGVjKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlYyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkVXJsKHVybCkge1xuICAgIHJldHVybiBVUkwuY2FuUGFyc2UodXJsKTtcbn1cbmZ1bmN0aW9uIGRlY29kZVVSSSh1cmkpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElnbm9yaW5nIGVycm9yXG4gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIFVSSSBjb250YWlucyBhIGAlYCBub3QgYXNzb2NpYXRlZFxuICAgICAgICAvLyB3aXRoIFVSSS9VUkwtZW5jb2RpbmcuXG4gICAgICAgIHJldHVybiB1cmk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2FuaXRpemVVcmwodXJsKSB7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50c18xLkJMQU5LX1VSTDtcbiAgICB9XG4gICAgdmFyIGNoYXJzVG9EZWNvZGU7XG4gICAgdmFyIGRlY29kZWRVcmwgPSBkZWNvZGVVUkkodXJsLnRyaW0oKSk7XG4gICAgZG8ge1xuICAgICAgICBkZWNvZGVkVXJsID0gZGVjb2RlSHRtbENoYXJhY3RlcnMoZGVjb2RlZFVybClcbiAgICAgICAgICAgIC5yZXBsYWNlKGNvbnN0YW50c18xLmh0bWxDdHJsRW50aXR5UmVnZXgsIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZShjb25zdGFudHNfMS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoY29uc3RhbnRzXzEud2hpdGVzcGFjZUVzY2FwZUNoYXJzUmVnZXgsIFwiXCIpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICBkZWNvZGVkVXJsID0gZGVjb2RlVVJJKGRlY29kZWRVcmwpO1xuICAgICAgICBjaGFyc1RvRGVjb2RlID1cbiAgICAgICAgICAgIGRlY29kZWRVcmwubWF0Y2goY29uc3RhbnRzXzEuY3RybENoYXJhY3RlcnNSZWdleCkgfHxcbiAgICAgICAgICAgICAgICBkZWNvZGVkVXJsLm1hdGNoKGNvbnN0YW50c18xLmh0bWxFbnRpdGllc1JlZ2V4KSB8fFxuICAgICAgICAgICAgICAgIGRlY29kZWRVcmwubWF0Y2goY29uc3RhbnRzXzEuaHRtbEN0cmxFbnRpdHlSZWdleCkgfHxcbiAgICAgICAgICAgICAgICBkZWNvZGVkVXJsLm1hdGNoKGNvbnN0YW50c18xLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4KTtcbiAgICB9IHdoaWxlIChjaGFyc1RvRGVjb2RlICYmIGNoYXJzVG9EZWNvZGUubGVuZ3RoID4gMCk7XG4gICAgdmFyIHNhbml0aXplZFVybCA9IGRlY29kZWRVcmw7XG4gICAgaWYgKCFzYW5pdGl6ZWRVcmwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0YW50c18xLkJMQU5LX1VSTDtcbiAgICB9XG4gICAgaWYgKGlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2woc2FuaXRpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkVXJsO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSBiZWZvcmUgY2hlY2tpbmcgdGhlIFVSTCBzY2hlbWVcbiAgICB2YXIgdHJpbW1lZFVybCA9IHNhbml0aXplZFVybC50cmltU3RhcnQoKTtcbiAgICB2YXIgdXJsU2NoZW1lUGFyc2VSZXN1bHRzID0gdHJpbW1lZFVybC5tYXRjaChjb25zdGFudHNfMS51cmxTY2hlbWVSZWdleCk7XG4gICAgaWYgKCF1cmxTY2hlbWVQYXJzZVJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplZFVybDtcbiAgICB9XG4gICAgdmFyIHVybFNjaGVtZSA9IHVybFNjaGVtZVBhcnNlUmVzdWx0c1swXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoY29uc3RhbnRzXzEuaW52YWxpZFByb3RvY29sUmVnZXgudGVzdCh1cmxTY2hlbWUpKSB7XG4gICAgICAgIHJldHVybiBjb25zdGFudHNfMS5CTEFOS19VUkw7XG4gICAgfVxuICAgIHZhciBiYWNrU2FuaXRpemVkID0gdHJpbW1lZFVybC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAvLyBIYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgbWFpbHRvOiBhbmQgY3VzdG9tIGRlZXAtbGluayBwcm90b2NvbHNcbiAgICBpZiAodXJsU2NoZW1lID09PSBcIm1haWx0bzpcIiB8fCB1cmxTY2hlbWUuaW5jbHVkZXMoXCI6Ly9cIikpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tTYW5pdGl6ZWQ7XG4gICAgfVxuICAgIC8vIEZvciBodHRwIGFuZCBodHRwcyBVUkxzLCBwZXJmb3JtIGFkZGl0aW9uYWwgdmFsaWRhdGlvblxuICAgIGlmICh1cmxTY2hlbWUgPT09IFwiaHR0cDpcIiB8fCB1cmxTY2hlbWUgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkVXJsKGJhY2tTYW5pdGl6ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc3RhbnRzXzEuQkxBTktfVVJMO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1cmxfMSA9IG5ldyBVUkwoYmFja1Nhbml0aXplZCk7XG4gICAgICAgIHVybF8xLnByb3RvY29sID0gdXJsXzEucHJvdG9jb2wudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdXJsXzEuaG9zdG5hbWUgPSB1cmxfMS5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdXJsXzEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhY2tTYW5pdGl6ZWQ7XG59XG5leHBvcnRzLnNhbml0aXplVXJsID0gc2FuaXRpemVVcmw7XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA9PSBudWxsIHx8IGIgPT0gbnVsbCA/IE5hTlxuICAgIDogYiA8IGEgPyAtMVxuICAgIDogYiA+IGEgPyAxXG4gICAgOiBiID49IGEgPyAwXG4gICAgOiBOYU47XG59XG4iLAogICAgImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpc2VjdG9yKGYpIHtcbiAgbGV0IGNvbXBhcmUxLCBjb21wYXJlMiwgZGVsdGE7XG5cbiAgLy8gSWYgYW4gYWNjZXNzb3IgaXMgc3BlY2lmaWVkLCBwcm9tb3RlIGl0IHRvIGEgY29tcGFyYXRvci4gSW4gdGhpcyBjYXNlIHdlXG4gIC8vIGNhbiB0ZXN0IHdoZXRoZXIgdGhlIHNlYXJjaCB2YWx1ZSBpcyAoc2VsZi0pIGNvbXBhcmFibGUuIFdlIGNhbuKAmXQgZG8gdGhpc1xuICAvLyBmb3IgYSBjb21wYXJhdG9yIChleGNlcHQgZm9yIHNwZWNpZmljLCBrbm93biBjb21wYXJhdG9ycykgYmVjYXVzZSB3ZSBjYW7igJl0XG4gIC8vIHRlbGwgaWYgdGhlIGNvbXBhcmF0b3IgaXMgc3ltbWV0cmljLCBhbmQgYW4gYXN5bW1ldHJpYyBjb21wYXJhdG9yIGNhbuKAmXQgYmVcbiAgLy8gdXNlZCB0byB0ZXN0IHdoZXRoZXIgYSBzaW5nbGUgdmFsdWUgaXMgY29tcGFyYWJsZS5cbiAgaWYgKGYubGVuZ3RoICE9PSAyKSB7XG4gICAgY29tcGFyZTEgPSBhc2NlbmRpbmc7XG4gICAgY29tcGFyZTIgPSAoZCwgeCkgPT4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4O1xuICB9IGVsc2Uge1xuICAgIGNvbXBhcmUxID0gZiA9PT0gYXNjZW5kaW5nIHx8IGYgPT09IGRlc2NlbmRpbmcgPyBmIDogemVybztcbiAgICBjb21wYXJlMiA9IGY7XG4gICAgZGVsdGEgPSBmO1xuICB9XG5cbiAgZnVuY3Rpb24gbGVmdChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICB9IHdoaWxlIChsbyA8IGhpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmlnaHQoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgaWYgKGxvIDwgaGkpIHtcbiAgICAgIGlmIChjb21wYXJlMSh4LCB4KSAhPT0gMCkgcmV0dXJuIGhpO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlMihhW21pZF0sIHgpIDw9IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgY29uc3QgaSA9IGxlZnQoYSwgeCwgbG8sIGhpIC0gMSk7XG4gICAgcmV0dXJuIGkgPiBsbyAmJiBkZWx0YShhW2kgLSAxXSwgeCkgPiAtZGVsdGEoYVtpXSwgeCkgPyBpIC0gMSA6IGk7XG4gIH1cblxuICByZXR1cm4ge2xlZnQsIGNlbnRlciwgcmlnaHR9O1xufVxuXG5mdW5jdGlvbiB6ZXJvKCkge1xuICByZXR1cm4gMDtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLAogICAgImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3IuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmNvbnN0IGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgY29uc3QgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgY29uc3QgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdENlbnRlciA9IGJpc2VjdG9yKG51bWJlcikuY2VudGVyO1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLAogICAgImV4cG9ydCBjbGFzcyBJbnRlcm5NYXAgZXh0ZW5kcyBNYXAge1xuICBjb25zdHJ1Y3RvcihlbnRyaWVzLCBrZXkgPSBrZXlvZikge1xuICAgIHN1cGVyKCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge19pbnRlcm46IHt2YWx1ZTogbmV3IE1hcCgpfSwgX2tleToge3ZhbHVlOiBrZXl9fSk7XG4gICAgaWYgKGVudHJpZXMgIT0gbnVsbCkgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cbiAgZ2V0KGtleSkge1xuICAgIHJldHVybiBzdXBlci5nZXQoaW50ZXJuX2dldCh0aGlzLCBrZXkpKTtcbiAgfVxuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmhhcyhpbnRlcm5fZ2V0KHRoaXMsIGtleSkpO1xuICB9XG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLnNldChpbnRlcm5fc2V0KHRoaXMsIGtleSksIHZhbHVlKTtcbiAgfVxuICBkZWxldGUoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpbnRlcm5fZGVsZXRlKHRoaXMsIGtleSkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcm5TZXQgZXh0ZW5kcyBTZXQge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZXMsIGtleSA9IGtleW9mKSB7XG4gICAgc3VwZXIoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7X2ludGVybjoge3ZhbHVlOiBuZXcgTWFwKCl9LCBfa2V5OiB7dmFsdWU6IGtleX19KTtcbiAgICBpZiAodmFsdWVzICE9IG51bGwpIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB0aGlzLmFkZCh2YWx1ZSk7XG4gIH1cbiAgaGFzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLmhhcyhpbnRlcm5fZ2V0KHRoaXMsIHZhbHVlKSk7XG4gIH1cbiAgYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLmFkZChpbnRlcm5fc2V0KHRoaXMsIHZhbHVlKSk7XG4gIH1cbiAgZGVsZXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpbnRlcm5fZGVsZXRlKHRoaXMsIHZhbHVlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50ZXJuX2dldCh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICByZXR1cm4gX2ludGVybi5oYXMoa2V5KSA/IF9pbnRlcm4uZ2V0KGtleSkgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuX3NldCh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICBpZiAoX2ludGVybi5oYXMoa2V5KSkgcmV0dXJuIF9pbnRlcm4uZ2V0KGtleSk7XG4gIF9pbnRlcm4uc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGludGVybl9kZWxldGUoe19pbnRlcm4sIF9rZXl9LCB2YWx1ZSkge1xuICBjb25zdCBrZXkgPSBfa2V5KHZhbHVlKTtcbiAgaWYgKF9pbnRlcm4uaGFzKGtleSkpIHtcbiAgICB2YWx1ZSA9IF9pbnRlcm4uZ2V0KGtleSk7XG4gICAgX2ludGVybi5kZWxldGUoa2V5KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGtleW9mKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbn1cbiIsCiAgICAiY29uc3QgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICBlNSA9IE1hdGguc3FydCgxMCksXG4gICAgZTIgPSBNYXRoLnNxcnQoMik7XG5cbmZ1bmN0aW9uIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBjb25zdCBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChzdGVwKSksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpLFxuICAgICAgZmFjdG9yID0gZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxO1xuICBsZXQgaTEsIGkyLCBpbmM7XG4gIGlmIChwb3dlciA8IDApIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgLXBvd2VyKSAvIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgKiBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wICogaW5jKTtcbiAgICBpZiAoaTEgLyBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgLyBpbmMgPiBzdG9wKSAtLWkyO1xuICAgIGluYyA9IC1pbmM7XG4gIH0gZWxzZSB7XG4gICAgaW5jID0gTWF0aC5wb3coMTAsIHBvd2VyKSAqIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgLyBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wIC8gaW5jKTtcbiAgICBpZiAoaTEgKiBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgKiBpbmMgPiBzdG9wKSAtLWkyO1xuICB9XG4gIGlmIChpMiA8IGkxICYmIDAuNSA8PSBjb3VudCAmJiBjb3VudCA8IDIpIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQgKiAyKTtcbiAgcmV0dXJuIFtpMSwgaTIsIGluY107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKCEoY291bnQgPiAwKSkgcmV0dXJuIFtdO1xuICBpZiAoc3RhcnQgPT09IHN0b3ApIHJldHVybiBbc3RhcnRdO1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBbaTEsIGkyLCBpbmNdID0gcmV2ZXJzZSA/IHRpY2tTcGVjKHN0b3AsIHN0YXJ0LCBjb3VudCkgOiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpO1xuICBpZiAoIShpMiA+PSBpMSkpIHJldHVybiBbXTtcbiAgY29uc3QgbiA9IGkyIC0gaTEgKyAxLCB0aWNrcyA9IG5ldyBBcnJheShuKTtcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgKiBpbmM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluYyA8IDApIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpIC8gLWluYztcbiAgICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpICogaW5jO1xuICB9XG4gIHJldHVybiB0aWNrcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICByZXR1cm4gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KVsyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydCwgaW5jID0gcmV2ZXJzZSA/IHRpY2tJbmNyZW1lbnQoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgcmV0dXJuIChyZXZlcnNlID8gLTEgOiAxKSAqIChpbmMgPCAwID8gMSAvIC1pbmMgOiBpbmMpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgYmlzZWN0LCBiaXNlY3RSaWdodCwgYmlzZWN0TGVmdCwgYmlzZWN0Q2VudGVyfSBmcm9tIFwiLi9iaXNlY3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhc2NlbmRpbmd9IGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdG9yfSBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuZXhwb3J0IHtibHVyLCBibHVyMiwgYmx1ckltYWdlfSBmcm9tIFwiLi9ibHVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY291bnR9IGZyb20gXCIuL2NvdW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Jvc3N9IGZyb20gXCIuL2Nyb3NzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Vtc3VtfSBmcm9tIFwiLi9jdW1zdW0uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkZXNjZW5kaW5nfSBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGV2aWF0aW9ufSBmcm9tIFwiLi9kZXZpYXRpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBleHRlbnR9IGZyb20gXCIuL2V4dGVudC5qc1wiO1xuZXhwb3J0IHtBZGRlciwgZnN1bSwgZmN1bXN1bX0gZnJvbSBcIi4vZnN1bS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdyb3VwLCBmbGF0R3JvdXAsIGZsYXRSb2xsdXAsIGdyb3VwcywgaW5kZXgsIGluZGV4ZXMsIHJvbGx1cCwgcm9sbHVwc30gZnJvbSBcIi4vZ3JvdXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncm91cFNvcnR9IGZyb20gXCIuL2dyb3VwU29ydC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJpbiwgZGVmYXVsdCBhcyBoaXN0b2dyYW19IGZyb20gXCIuL2Jpbi5qc1wiOyAvLyBEZXByZWNhdGVkOyB1c2UgYmluLlxuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXN9IGZyb20gXCIuL3RocmVzaG9sZC9mcmVlZG1hbkRpYWNvbmlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGhyZXNob2xkU2NvdHR9IGZyb20gXCIuL3RocmVzaG9sZC9zY290dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFN0dXJnZXN9IGZyb20gXCIuL3RocmVzaG9sZC9zdHVyZ2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWF4fSBmcm9tIFwiLi9tYXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXhJbmRleH0gZnJvbSBcIi4vbWF4SW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtZWFufSBmcm9tIFwiLi9tZWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVkaWFuLCBtZWRpYW5JbmRleH0gZnJvbSBcIi4vbWVkaWFuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVyZ2V9IGZyb20gXCIuL21lcmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWlufSBmcm9tIFwiLi9taW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtaW5JbmRleH0gZnJvbSBcIi4vbWluSW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtb2RlfSBmcm9tIFwiLi9tb2RlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmljZX0gZnJvbSBcIi4vbmljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhaXJzfSBmcm9tIFwiLi9wYWlycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBlcm11dGV9IGZyb20gXCIuL3Blcm11dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFudGlsZSwgcXVhbnRpbGVJbmRleCwgcXVhbnRpbGVTb3J0ZWR9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVpY2tzZWxlY3R9IGZyb20gXCIuL3F1aWNrc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZ2V9IGZyb20gXCIuL3JhbmdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFua30gZnJvbSBcIi4vcmFuay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxlYXN0fSBmcm9tIFwiLi9sZWFzdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxlYXN0SW5kZXh9IGZyb20gXCIuL2xlYXN0SW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncmVhdGVzdH0gZnJvbSBcIi4vZ3JlYXRlc3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBncmVhdGVzdEluZGV4fSBmcm9tIFwiLi9ncmVhdGVzdEluZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2Nhbn0gZnJvbSBcIi4vc2Nhbi5qc1wiOyAvLyBEZXByZWNhdGVkOyB1c2UgbGVhc3RJbmRleC5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzaHVmZmxlLCBzaHVmZmxlcn0gZnJvbSBcIi4vc2h1ZmZsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1bX0gZnJvbSBcIi4vc3VtLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGlja3MsIHRpY2tJbmNyZW1lbnQsIHRpY2tTdGVwfSBmcm9tIFwiLi90aWNrcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zcG9zZX0gZnJvbSBcIi4vdHJhbnNwb3NlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmFyaWFuY2V9IGZyb20gXCIuL3ZhcmlhbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgemlwfSBmcm9tIFwiLi96aXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBldmVyeX0gZnJvbSBcIi4vZXZlcnkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzb21lfSBmcm9tIFwiLi9zb21lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZmlsdGVyfSBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXB9IGZyb20gXCIuL21hcC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJlZHVjZX0gZnJvbSBcIi4vcmVkdWNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmV2ZXJzZX0gZnJvbSBcIi4vcmV2ZXJzZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNvcnR9IGZyb20gXCIuL3NvcnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkaWZmZXJlbmNlfSBmcm9tIFwiLi9kaWZmZXJlbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGlzam9pbnR9IGZyb20gXCIuL2Rpc2pvaW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJzZWN0aW9ufSBmcm9tIFwiLi9pbnRlcnNlY3Rpb24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdWJzZXR9IGZyb20gXCIuL3N1YnNldC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1cGVyc2V0fSBmcm9tIFwiLi9zdXBlcnNldC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHVuaW9ufSBmcm9tIFwiLi91bmlvbi5qc1wiO1xuZXhwb3J0IHtJbnRlcm5NYXAsIEludGVyblNldH0gZnJvbSBcImludGVybm1hcFwiO1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwKICAgICJpbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCIsMClcIjtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlWSh5KSB7XG4gIHJldHVybiBcInRyYW5zbGF0ZSgwLFwiICsgeSArIFwiKVwiO1xufVxuXG5mdW5jdGlvbiBudW1iZXIoc2NhbGUpIHtcbiAgcmV0dXJuIGQgPT4gK3NjYWxlKGQpO1xufVxuXG5mdW5jdGlvbiBjZW50ZXIoc2NhbGUsIG9mZnNldCkge1xuICBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIG9mZnNldCAqIDIpIC8gMjtcbiAgaWYgKHNjYWxlLnJvdW5kKCkpIG9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0KTtcbiAgcmV0dXJuIGQgPT4gK3NjYWxlKGQpICsgb2Zmc2V0O1xufVxuXG5mdW5jdGlvbiBlbnRlcmluZygpIHtcbiAgcmV0dXJuICF0aGlzLl9fYXhpcztcbn1cblxuZnVuY3Rpb24gYXhpcyhvcmllbnQsIHNjYWxlKSB7XG4gIHZhciB0aWNrQXJndW1lbnRzID0gW10sXG4gICAgICB0aWNrVmFsdWVzID0gbnVsbCxcbiAgICAgIHRpY2tGb3JtYXQgPSBudWxsLFxuICAgICAgdGlja1NpemVJbm5lciA9IDYsXG4gICAgICB0aWNrU2l6ZU91dGVyID0gNixcbiAgICAgIHRpY2tQYWRkaW5nID0gMyxcbiAgICAgIG9mZnNldCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxID8gMCA6IDAuNSxcbiAgICAgIGsgPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGxlZnQgPyAtMSA6IDEsXG4gICAgICB4ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyBcInhcIiA6IFwieVwiLFxuICAgICAgdHJhbnNmb3JtID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBib3R0b20gPyB0cmFuc2xhdGVYIDogdHJhbnNsYXRlWTtcblxuICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWVzID0gdGlja1ZhbHVlcyA9PSBudWxsID8gKHNjYWxlLnRpY2tzID8gc2NhbGUudGlja3MuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogc2NhbGUuZG9tYWluKCkpIDogdGlja1ZhbHVlcyxcbiAgICAgICAgZm9ybWF0ID0gdGlja0Zvcm1hdCA9PSBudWxsID8gKHNjYWxlLnRpY2tGb3JtYXQgPyBzY2FsZS50aWNrRm9ybWF0LmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IGlkZW50aXR5KSA6IHRpY2tGb3JtYXQsXG4gICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLFxuICAgICAgICByYW5nZSA9IHNjYWxlLnJhbmdlKCksXG4gICAgICAgIHJhbmdlMCA9ICtyYW5nZVswXSArIG9mZnNldCxcbiAgICAgICAgcmFuZ2UxID0gK3JhbmdlW3JhbmdlLmxlbmd0aCAtIDFdICsgb2Zmc2V0LFxuICAgICAgICBwb3NpdGlvbiA9IChzY2FsZS5iYW5kd2lkdGggPyBjZW50ZXIgOiBudW1iZXIpKHNjYWxlLmNvcHkoKSwgb2Zmc2V0KSxcbiAgICAgICAgc2VsZWN0aW9uID0gY29udGV4dC5zZWxlY3Rpb24gPyBjb250ZXh0LnNlbGVjdGlvbigpIDogY29udGV4dCxcbiAgICAgICAgcGF0aCA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoXCIuZG9tYWluXCIpLmRhdGEoW251bGxdKSxcbiAgICAgICAgdGljayA9IHNlbGVjdGlvbi5zZWxlY3RBbGwoXCIudGlja1wiKS5kYXRhKHZhbHVlcywgc2NhbGUpLm9yZGVyKCksXG4gICAgICAgIHRpY2tFeGl0ID0gdGljay5leGl0KCksXG4gICAgICAgIHRpY2tFbnRlciA9IHRpY2suZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRpY2tcIiksXG4gICAgICAgIGxpbmUgPSB0aWNrLnNlbGVjdChcImxpbmVcIiksXG4gICAgICAgIHRleHQgPSB0aWNrLnNlbGVjdChcInRleHRcIik7XG5cbiAgICBwYXRoID0gcGF0aC5tZXJnZShwYXRoLmVudGVyKCkuaW5zZXJ0KFwicGF0aFwiLCBcIi50aWNrXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkb21haW5cIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIikpO1xuXG4gICAgdGljayA9IHRpY2subWVyZ2UodGlja0VudGVyKTtcblxuICAgIGxpbmUgPSBsaW5lLm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpKTtcblxuICAgIHRleHQgPSB0ZXh0Lm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLmF0dHIoXCJkeVwiLCBvcmllbnQgPT09IHRvcCA/IFwiMGVtXCIgOiBvcmllbnQgPT09IGJvdHRvbSA/IFwiMC43MWVtXCIgOiBcIjAuMzJlbVwiKSk7XG5cbiAgICBpZiAoY29udGV4dCAhPT0gc2VsZWN0aW9uKSB7XG4gICAgICBwYXRoID0gcGF0aC50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGljayA9IHRpY2sudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIGxpbmUgPSBsaW5lLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0ZXh0ID0gdGV4dC50cmFuc2l0aW9uKGNvbnRleHQpO1xuXG4gICAgICB0aWNrRXhpdCA9IHRpY2tFeGl0LnRyYW5zaXRpb24oY29udGV4dClcbiAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgZXBzaWxvbilcbiAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBpc0Zpbml0ZShkID0gcG9zaXRpb24oZCkpID8gdHJhbnNmb3JtKGQgKyBvZmZzZXQpIDogdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7IH0pO1xuXG4gICAgICB0aWNrRW50ZXJcbiAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgZXBzaWxvbilcbiAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHZhciBwID0gdGhpcy5wYXJlbnROb2RlLl9fYXhpczsgcmV0dXJuIHRyYW5zZm9ybSgocCAmJiBpc0Zpbml0ZShwID0gcChkKSkgPyBwIDogcG9zaXRpb24oZCkpICsgb2Zmc2V0KTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09PSByaWdodFxuICAgICAgICAgICAgPyAodGlja1NpemVPdXRlciA/IFwiTVwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIixcIiArIHJhbmdlMCArIFwiSFwiICsgb2Zmc2V0ICsgXCJWXCIgKyByYW5nZTEgKyBcIkhcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNXCIgKyBvZmZzZXQgKyBcIixcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVlwiICsgb2Zmc2V0ICsgXCJIXCIgKyByYW5nZTEgKyBcIlZcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNXCIgKyByYW5nZTAgKyBcIixcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxKSk7XG5cbiAgICB0aWNrXG4gICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCAxKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiB0cmFuc2Zvcm0ocG9zaXRpb24oZCkgKyBvZmZzZXQpOyB9KTtcblxuICAgIGxpbmVcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcik7XG5cbiAgICB0ZXh0XG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAudGV4dChmb3JtYXQpO1xuXG4gICAgc2VsZWN0aW9uLmZpbHRlcihlbnRlcmluZylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCAxMClcbiAgICAgICAgLmF0dHIoXCJmb250LWZhbWlseVwiLCBcInNhbnMtc2VyaWZcIilcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBvcmllbnQgPT09IHJpZ2h0ID8gXCJzdGFydFwiIDogb3JpZW50ID09PSBsZWZ0ID8gXCJlbmRcIiA6IFwibWlkZGxlXCIpO1xuXG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgeyB0aGlzLl9fYXhpcyA9IHBvc2l0aW9uOyB9KTtcbiAgfVxuXG4gIGF4aXMuc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGUgPSBfLCBheGlzKSA6IHNjYWxlO1xuICB9O1xuXG4gIGF4aXMudGlja3MgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGlja0FyZ3VtZW50cyA9IEFycmF5LmZyb20oYXJndW1lbnRzKSwgYXhpcztcbiAgfTtcblxuICBheGlzLnRpY2tBcmd1bWVudHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0FyZ3VtZW50cyA9IF8gPT0gbnVsbCA/IFtdIDogQXJyYXkuZnJvbShfKSwgYXhpcykgOiB0aWNrQXJndW1lbnRzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tWYWx1ZXMgPSBfID09IG51bGwgPyBudWxsIDogQXJyYXkuZnJvbShfKSwgYXhpcykgOiB0aWNrVmFsdWVzICYmIHRpY2tWYWx1ZXMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0Zvcm1hdCA9IF8sIGF4aXMpIDogdGlja0Zvcm1hdDtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSB0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZU91dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZU91dGVyO1xuICB9O1xuXG4gIGF4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1BhZGRpbmcgPSArXywgYXhpcykgOiB0aWNrUGFkZGluZztcbiAgfTtcblxuICBheGlzLm9mZnNldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChvZmZzZXQgPSArXywgYXhpcykgOiBvZmZzZXQ7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwKICAgICJleHBvcnQge1xuICBheGlzVG9wLFxuICBheGlzUmlnaHQsXG4gIGF4aXNCb3R0b20sXG4gIGF4aXNMZWZ0XG59IGZyb20gXCIuL2F4aXMuanNcIjtcbiIsCiAgICAidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLAogICAgImV4cG9ydCB7ZGVmYXVsdCBhcyBkaXNwYXRjaH0gZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbiIsCiAgICAiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwKICAgICJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLAogICAgImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLAogICAgImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwKICAgICIvLyBHaXZlbiBzb21ldGhpbmcgYXJyYXkgbGlrZSAob3IgbnVsbCksIHJldHVybnMgc29tZXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgYW5cbi8vIGFycmF5LiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYXJyYXktbGlrZSBvYmplY3RzIHBhc3NlZCB0byBkMy5zZWxlY3RBbGxcbi8vIG9yIHNlbGVjdGlvbi5zZWxlY3RBbGwgYXJlIGNvbnZlcnRlZCBpbnRvIHByb3BlciBhcnJheXMgd2hlbiBjcmVhdGluZyBhXG4vLyBzZWxlY3Rpb247IHdlIGRvbuKAmXQgZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNlbGVjdGlvbiBiYWNrZWQgYnkgYSBsaXZlXG4vLyBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdC4gSG93ZXZlciwgbm90ZSB0aGF0IHNlbGVjdGlvbi5zZWxlY3RBbGwgd2lsbCB1c2UgYVxuLy8gc3RhdGljIE5vZGVMaXN0IGFzIGEgZ3JvdXAsIHNpbmNlIGl0IHNhZmVseSBkZXJpdmVkIGZyb20gcXVlcnlTZWxlY3RvckFsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFycmF5KHgpIHtcbiAgcmV0dXJuIHggPT0gbnVsbCA/IFtdIDogQXJyYXkuaXNBcnJheSh4KSA/IHggOiBBcnJheS5mcm9tKHgpO1xufVxuIiwKICAgICJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkTWF0Y2hlcihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG4iLAogICAgImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwKICAgICJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLAogICAgImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwKICAgICJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9uZW50ZXIsIG9udXBkYXRlLCBvbmV4aXQpIHtcbiAgdmFyIGVudGVyID0gdGhpcy5lbnRlcigpLCB1cGRhdGUgPSB0aGlzLCBleGl0ID0gdGhpcy5leGl0KCk7XG4gIGlmICh0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZW50ZXIgPSBvbmVudGVyKGVudGVyKTtcbiAgICBpZiAoZW50ZXIpIGVudGVyID0gZW50ZXIuc2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgZW50ZXIgPSBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICB9XG4gIGlmIChvbnVwZGF0ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgICBpZiAodXBkYXRlKSB1cGRhdGUgPSB1cGRhdGUuc2VsZWN0aW9uKCk7XG4gIH1cbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiIsCiAgICAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLAogICAgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwKICAgICJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLAogICAgImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLAogICAgImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwKICAgICJmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gIHJldHVybiBub2RlLmNsYXNzTGlzdCB8fCBuZXcgQ2xhc3NMaXN0KG5vZGUpO1xufVxuXG5mdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICB0aGlzLl9ub2RlID0gbm9kZTtcbiAgdGhpcy5fbmFtZXMgPSBjbGFzc0FycmF5KG5vZGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIik7XG59XG5cbkNsYXNzTGlzdC5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5hZGQobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LnJlbW92ZShuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKG5hbWVzLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdCh0aGlzLm5vZGUoKSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgID8gY2xhc3NlZFRydWVcbiAgICAgIDogY2xhc3NlZEZhbHNlKShuYW1lcywgdmFsdWUpKTtcbn1cbiIsCiAgICAiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsCiAgICAiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLAogICAgImZ1bmN0aW9uIHJhaXNlKCkge1xuICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG59XG4iLAogICAgImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLAogICAgImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iLAogICAgImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLAogICAgImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwKICAgICJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIiwKICAgICJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwKICAgICJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKigpIHtcbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHlpZWxkIG5vZGU7XG4gICAgfVxuICB9XG59XG4iLAogICAgImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwKICAgICJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLAogICAgImV4cG9ydCB7ZGVmYXVsdCBhcyBjcmVhdGV9IGZyb20gXCIuL2NyZWF0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0b3J9IGZyb20gXCIuL2NyZWF0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsb2NhbH0gZnJvbSBcIi4vbG9jYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXRjaGVyfSBmcm9tIFwiLi9tYXRjaGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmFtZXNwYWNlfSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2VzfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9pbnRlcn0gZnJvbSBcIi4vcG9pbnRlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50ZXJzfSBmcm9tIFwiLi9wb2ludGVycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdH0gZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0QWxsfSBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rpb259IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yfSBmcm9tIFwiLi9zZWxlY3Rvci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yQWxsfSBmcm9tIFwiLi9zZWxlY3RvckFsbC5qc1wiO1xuZXhwb3J0IHtzdHlsZVZhbHVlIGFzIHN0eWxlfSBmcm9tIFwiLi9zZWxlY3Rpb24vc3R5bGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB3aW5kb3d9IGZyb20gXCIuL3dpbmRvdy5qc1wiO1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsCiAgICAiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dPyg/OlxcXFxkKlxcXFwuKT9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dPyg/OlxcXFxkKlxcXFwuKT9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIsXG4gICAgcmVIZXggPSAvXiMoWzAtOWEtZl17Myw4fSkkLyxcbiAgICByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlSX0sJHtyZUl9LCR7cmVJfVxcXFwpJGApLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JcXFxcKCR7cmVQfSwke3JlUH0sJHtyZVB9XFxcXCkkYCksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlSX0sJHtyZUl9LCR7cmVJfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChgXnJnYmFcXFxcKCR7cmVQfSwke3JlUH0sJHtyZVB9LCR7cmVOfVxcXFwpJGApLFxuICAgIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5oc2xcXFxcKCR7cmVOfSwke3JlUH0sJHtyZVB9XFxcXCkkYCksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5oc2xhXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgY29weShjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIGhleDogY29sb3JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IGNvbG9yX2Zvcm1hdEhleCxcbiAgZm9ybWF0SGV4ODogY29sb3JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0SHNsOiBjb2xvcl9mb3JtYXRIc2wsXG4gIGZvcm1hdFJnYjogY29sb3JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogY29sb3JfZm9ybWF0UmdiXG59KTtcblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIc2woKSB7XG4gIHJldHVybiBoc2xDb252ZXJ0KHRoaXMpLmZvcm1hdEhzbCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRSZ2IoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG0sIGw7XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXguZXhlYyhmb3JtYXQpKSA/IChsID0gbVsxXS5sZW5ndGgsIG0gPSBwYXJzZUludChtWzFdLCAxNiksIGwgPT09IDYgPyByZ2JuKG0pIC8vICNmZjAwMDBcbiAgICAgIDogbCA9PT0gMyA/IG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkgLy8gI2YwMFxuICAgICAgOiBsID09PSA4ID8gcmdiYShtID4+IDI0ICYgMHhmZiwgbSA+PiAxNiAmIDB4ZmYsIG0gPj4gOCAmIDB4ZmYsIChtICYgMHhmZikgLyAweGZmKSAvLyAjZmYwMDAwMDBcbiAgICAgIDogbCA9PT0gNCA/IHJnYmEoKG0gPj4gMTIgJiAweGYpIHwgKG0gPj4gOCAmIDB4ZjApLCAobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSkgLyAweGZmKSAvLyAjZjAwMFxuICAgICAgOiBudWxsKSAvLyBpbnZhbGlkIGhleFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY2xhbXAoKSB7XG4gICAgcmV0dXJuIG5ldyBSZ2IoY2xhbXBpKHRoaXMuciksIGNsYW1waSh0aGlzLmcpLCBjbGFtcGkodGhpcy5iKSwgY2xhbXBhKHRoaXMub3BhY2l0eSkpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gKC0wLjUgPD0gdGhpcy5yICYmIHRoaXMuciA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmcgJiYgdGhpcy5nIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuYiAmJiB0aGlzLmIgPCAyNTUuNSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgaGV4OiByZ2JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IHJnYl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IHJnYl9mb3JtYXRIZXg4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBgIyR7aGV4KHRoaXMucil9JHtoZXgodGhpcy5nKX0ke2hleCh0aGlzLmIpfWA7XG59XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXg4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX0ke2hleCgoaXNOYU4odGhpcy5vcGFjaXR5KSA/IDEgOiB0aGlzLm9wYWNpdHkpICogMjU1KX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0UmdiKCkge1xuICBjb25zdCBhID0gY2xhbXBhKHRoaXMub3BhY2l0eSk7XG4gIHJldHVybiBgJHthID09PSAxID8gXCJyZ2IoXCIgOiBcInJnYmEoXCJ9JHtjbGFtcGkodGhpcy5yKX0sICR7Y2xhbXBpKHRoaXMuZyl9LCAke2NsYW1waSh0aGlzLmIpfSR7YSA9PT0gMSA/IFwiKVwiIDogYCwgJHthfSlgfWA7XG59XG5cbmZ1bmN0aW9uIGNsYW1wYShvcGFjaXR5KSB7XG4gIHJldHVybiBpc05hTihvcGFjaXR5KSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBvcGFjaXR5KSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1waSh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG59XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IGNsYW1waSh2YWx1ZSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgSHNsKGNsYW1waCh0aGlzLmgpLCBjbGFtcHQodGhpcy5zKSwgY2xhbXB0KHRoaXMubCksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGZvcm1hdEhzbCgpIHtcbiAgICBjb25zdCBhID0gY2xhbXBhKHRoaXMub3BhY2l0eSk7XG4gICAgcmV0dXJuIGAke2EgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIn0ke2NsYW1waCh0aGlzLmgpfSwgJHtjbGFtcHQodGhpcy5zKSAqIDEwMH0lLCAke2NsYW1wdCh0aGlzLmwpICogMTAwfSUke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGNsYW1waCh2YWx1ZSkge1xuICB2YWx1ZSA9ICh2YWx1ZSB8fCAwKSAlIDM2MDtcbiAgcmV0dXJuIHZhbHVlIDwgMCA/IHZhbHVlICsgMzYwIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNsYW1wdCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdmFsdWUgfHwgMCkpO1xufVxuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iLAogICAgImV4cG9ydCBjb25zdCByYWRpYW5zID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCBjb25zdCBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcbiIsCiAgICAiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuY29uc3QgSyA9IDE4LFxuICAgIFhuID0gMC45NjQyMixcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAwLjgyNTIxLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxuICAgICAgYiA9IHJnYjJscmdiKG8uYiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcbiAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcbiAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgfVxuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmF5KGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIG5ldyBMYWIobCwgMCwgMCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLmEgPSArYTtcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgbHJnYjJyZ2IoLTAuOTc4NzY4NCAqIHggKyAxLjkxNjE0MTUgKiB5ICsgMC4wMzM0NTQwICogeiksXG4gICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiBscmdiMnJnYih4KSB7XG4gIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IybHJnYih4KSB7XG4gIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiBkZWdyZWVzO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5mdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBvLmggKiByYWRpYW5zO1xuICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgY29sb3IsIHJnYiwgaHNsfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxhYiwgaGNsLCBsY2gsIGdyYXl9IGZyb20gXCIuL2xhYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1YmVoZWxpeH0gZnJvbSBcIi4vY3ViZWhlbGl4LmpzXCI7XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7YmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwKICAgICJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgaWYgKCFiKSBiID0gW107XG4gIHZhciBuID0gYSA/IE1hdGgubWluKGIubGVuZ3RoLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgYyA9IGIuc2xpY2UoKSxcbiAgICAgIGk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5KHgpIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XG59XG4iLAogICAgImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwKICAgICJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwKICAgICJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCByZ2IgZnJvbSBcIi4vcmdiLmpzXCI7XG5pbXBvcnQge2dlbmVyaWNBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBkYXRlIGZyb20gXCIuL2RhdGUuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQgb2JqZWN0IGZyb20gXCIuL29iamVjdC5qc1wiO1xuaW1wb3J0IHN0cmluZyBmcm9tIFwiLi9zdHJpbmcuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICByZXR1cm4gYiA9PSBudWxsIHx8IHQgPT09IFwiYm9vbGVhblwiID8gY29uc3RhbnQoYilcbiAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBudW1iZXJcbiAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiXG4gICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxuICAgICAgOiBpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXlcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGdlbmVyaWNBcnJheVxuICAgICAgOiB0eXBlb2YgYi52YWx1ZU9mICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGIudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIiB8fCBpc05hTihiKSA/IG9iamVjdFxuICAgICAgOiBudW1iZXIpKGEsIGIpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKiAoMSAtIHQpICsgYiAqIHQpO1xuICB9O1xufVxuIiwKICAgICJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIHN2Z05vZGU7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgY29uc3QgbSA9IG5ldyAodHlwZW9mIERPTU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiID8gRE9NTWF0cml4IDogV2ViS2l0Q1NTTWF0cml4KSh2YWx1ZSArIFwiXCIpO1xuICByZXR1cm4gbS5pc0lkZW50aXR5ID8gaWRlbnRpdHkgOiBkZWNvbXBvc2UobS5hLCBtLmIsIG0uYywgbS5kLCBtLmUsIG0uZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwKICAgICJpbXBvcnQgbnVtYmVyIGZyb20gXCIuLi9udW1iZXIuanNcIjtcbmltcG9ydCB7cGFyc2VDc3MsIHBhcnNlU3ZnfSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZUNzcywgXCJweCwgXCIsIFwicHgpXCIsIFwiZGVnKVwiKTtcbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZVN2ZywgXCIsIFwiLCBcIilcIiwgXCIpXCIpO1xuIiwKICAgICJpbXBvcnQge2hjbCBhcyBjb2xvckhjbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGhjbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhjbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IGNvbG9yKHN0YXJ0LmMsIGVuZC5jKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGNsKGh1ZSk7XG5leHBvcnQgdmFyIGhjbExvbmcgPSBoY2woY29sb3IpO1xuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGV9IGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJhc2lzfSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmFzaXNDbG9zZWR9IGZyb20gXCIuL2Jhc2lzQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVEYXRlfSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVEaXNjcmV0ZX0gZnJvbSBcIi4vZGlzY3JldGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUh1ZX0gZnJvbSBcIi4vaHVlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVOdW1iZXJ9IGZyb20gXCIuL251bWJlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPYmplY3R9IGZyb20gXCIuL29iamVjdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUm91bmR9IGZyb20gXCIuL3JvdW5kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCIuL3N0cmluZy5qc1wiO1xuZXhwb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcywgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmd9IGZyb20gXCIuL3RyYW5zZm9ybS9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWm9vbX0gZnJvbSBcIi4vem9vbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmdiLCByZ2JCYXNpcyBhcyBpbnRlcnBvbGF0ZVJnYkJhc2lzLCByZ2JCYXNpc0Nsb3NlZCBhcyBpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9yZ2IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUhzbCwgaHNsTG9uZyBhcyBpbnRlcnBvbGF0ZUhzbExvbmd9IGZyb20gXCIuL2hzbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlTGFifSBmcm9tIFwiLi9sYWIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUhjbCwgaGNsTG9uZyBhcyBpbnRlcnBvbGF0ZUhjbExvbmd9IGZyb20gXCIuL2hjbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ3ViZWhlbGl4LCBjdWJlaGVsaXhMb25nIGFzIGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcIi4vY3ViZWhlbGl4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGllY2V3aXNlfSBmcm9tIFwiLi9waWVjZXdpc2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFudGl6ZX0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcbiIsCiAgICAidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdl4oCZdmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlbuKAmXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsCiAgICAiZXhwb3J0IHtcbiAgbm93LFxuICB0aW1lcixcbiAgdGltZXJGbHVzaFxufSBmcm9tIFwiLi90aW1lci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVvdXRcbn0gZnJvbSBcIi4vdGltZW91dC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG4iLAogICAgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLAogICAgImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLAogICAgImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7Z2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkZWxheUZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVsYXlDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkZWxheUZ1bmN0aW9uXG4gICAgICAgICAgOiBkZWxheUNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kZWxheTtcbn1cbiIsCiAgICAiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwKICAgICJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsCiAgICAiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGVhc2VWYXJ5aW5nKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgdiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLmVhY2goZWFzZVZhcnlpbmcodGhpcy5faWQsIHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwKICAgICJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtnZXQsIHNldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gc3RhcnQobmFtZSkge1xuICByZXR1cm4gKG5hbWUgKyBcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuICF0IHx8IHQgPT09IFwic3RhcnRcIjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBvbjAsIG9uMSwgc2l0ID0gc3RhcnQobmFtZSkgPyBpbml0IDogc2V0O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2l0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCkgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihuYW1lLCBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyXG4gICAgICA/IGdldCh0aGlzLm5vZGUoKSwgaWQpLm9uLm9uKG5hbWUpXG4gICAgICA6IHRoaXMuZWFjaChvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikpO1xufVxuIiwKICAgICJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLAogICAgImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLAogICAgImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsCiAgICAiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZU51bGwobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICBzdHJpbmcxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgc3RyaW5nMTAgPSBzdHJpbmcxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSxcbiAgICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSBzdHJpbmcxID0gdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlTWF5YmVSZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIG9uMCwgb24xLCBsaXN0ZW5lcjAsIGtleSA9IFwic3R5bGUuXCIgKyBuYW1lLCBldmVudCA9IFwiZW5kLlwiICsga2V5LCByZW1vdmU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uLFxuICAgICAgICBsaXN0ZW5lciA9IHNjaGVkdWxlLnZhbHVlW2tleV0gPT0gbnVsbCA/IHJlbW92ZSB8fCAocmVtb3ZlID0gc3R5bGVSZW1vdmUobmFtZSkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wIHx8IGxpc3RlbmVyMCAhPT0gbGlzdGVuZXIpIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24oZXZlbnQsIGxpc3RlbmVyMCA9IGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVOdWxsKG5hbWUsIGkpKVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmUobmFtZSkpXG4gICAgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKSlcbiAgICAgIC5lYWNoKHN0eWxlTWF5YmVSZW1vdmUodGhpcy5faWQsIG5hbWUpKVxuICAgIDogdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSksIHByaW9yaXR5KVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgbnVsbCk7XG59XG4iLAogICAgImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkuY2FsbCh0aGlzLCB0KSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgdCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQgPSAoaTAgPSBpKSAmJiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsCiAgICAiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIiwKICAgICJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iLAogICAgImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwKICAgICJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc2VsZWN0aW9uIHdhcyBlbXB0eSwgcmVzb2x2ZSBlbmQgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXkuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nIGZyb20gXCIuL2Vhc2VWYXJ5aW5nLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZVR3ZWVuIGZyb20gXCIuL3N0eWxlVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dFR3ZWVuIGZyb20gXCIuL3RleHRUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90d2VlbiBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZW5kIGZyb20gXCIuL2VuZC5qc1wiO1xuXG52YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnNpdGlvbihncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIHRoaXMuX25hbWUgPSBuYW1lO1xuICB0aGlzLl9pZCA9IGlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdGlvbigpLnRyYW5zaXRpb24obmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5cbnZhciBzZWxlY3Rpb25fcHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZTtcblxuVHJhbnNpdGlvbi5wcm90b3R5cGUgPSB0cmFuc2l0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zaXRpb24sXG4gIHNlbGVjdDogdHJhbnNpdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogdHJhbnNpdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZHJlbixcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgdGV4dFR3ZWVuOiB0cmFuc2l0aW9uX3RleHRUd2VlbixcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlLFxuICBlYXNlVmFyeWluZzogdHJhbnNpdGlvbl9lYXNlVmFyeWluZyxcbiAgZW5kOiB0cmFuc2l0aW9uX2VuZCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXVxufTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0ICogdCA6ICh0IC09IDIpICogdCAqIHQgKyAyKSAvIDI7XG59XG4iLAogICAgImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7aWR9IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwKICAgICJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsCiAgICAiaW1wb3J0IFwiLi9zZWxlY3Rpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmFuc2l0aW9ufSBmcm9tIFwiLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYWN0aXZlfSBmcm9tIFwiLi9hY3RpdmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnJ1cHR9IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuIiwKICAgICJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7cG9pbnRlciwgc2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IEJydXNoRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG52YXIgTU9ERV9EUkFHID0ge25hbWU6IFwiZHJhZ1wifSxcbiAgICBNT0RFX1NQQUNFID0ge25hbWU6IFwic3BhY2VcIn0sXG4gICAgTU9ERV9IQU5ETEUgPSB7bmFtZTogXCJoYW5kbGVcIn0sXG4gICAgTU9ERV9DRU5URVIgPSB7bmFtZTogXCJjZW50ZXJcIn07XG5cbmNvbnN0IHthYnMsIG1heCwgbWlufSA9IE1hdGg7XG5cbmZ1bmN0aW9uIG51bWJlcjEoZSkge1xuICByZXR1cm4gWytlWzBdLCArZVsxXV07XG59XG5cbmZ1bmN0aW9uIG51bWJlcjIoZSkge1xuICByZXR1cm4gW251bWJlcjEoZVswXSksIG51bWJlcjEoZVsxXSldO1xufVxuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcIndcIiwgXCJlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiBbWyt4WzBdLCBlWzBdWzFdXSwgWyt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgPT0gbnVsbCA/IG51bGwgOiBbW2VbMF1bMF0sICt5WzBdXSwgW2VbMV1bMF0sICt5WzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVsxXSwgeHlbMV1bMV1dOyB9XG59O1xuXG52YXIgWFkgPSB7XG4gIG5hbWU6IFwieHlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcIndcIiwgXCJlXCIsIFwic1wiLCBcIm53XCIsIFwibmVcIiwgXCJzd1wiLCBcInNlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSA9PSBudWxsID8gbnVsbCA6IG51bWJlcjIoeHkpOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uLCBldmVudCkge1xuICAgIGlmIChncm91cC50d2Vlbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydChldmVudCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKGV2ZW50KTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KGV2ZW50KS5icnVzaChldmVudCkuZW5kKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCwgZXZlbnQpIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB2YXIgZW1pdCA9IHRoYXQuX19icnVzaC5lbWl0dGVyO1xuICAgIHJldHVybiBlbWl0ICYmICghY2xlYW4gfHwgIWVtaXQuY2xlYW4pID8gZW1pdCA6IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5jbGVhbiA9IGNsZWFuO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIGVsc2UgdGhpcy5lbWl0KFwiYnJ1c2hcIiwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbihldmVudCwgbW9kZSkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCBtb2RlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgQnJ1c2hFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHRhcmdldDogYnJ1c2gsXG4gICAgICAgICAgc2VsZWN0aW9uOiBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIGRpc3BhdGNoOiBsaXN0ZW5lcnNcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoZXZlbnQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50cyA9IEFycmF5LmZyb20oZXZlbnQudG91Y2hlcyB8fCBbZXZlbnRdLCB0ID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gdC5pZGVudGlmaWVyO1xuICAgICAgICAgIHQgPSBwb2ludGVyKHQsIHRoYXQpO1xuICAgICAgICAgIHQucG9pbnQwID0gdC5zbGljZSgpO1xuICAgICAgICAgIHQuaWRlbnRpZmllciA9IGk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pO1xuXG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHZhciBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMsIHRydWUpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIGlmIChzZWxlY3Rpb24pIG1vdmluZyA9IHRydWU7XG4gICAgICBjb25zdCBwdHMgPSBbcG9pbnRzWzBdLCBwb2ludHNbMV0gfHwgcG9pbnRzWzBdXTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtbXG4gICAgICAgICAgdzAgPSBkaW0gPT09IFkgPyBXIDogbWluKHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBuMCA9IGRpbSA9PT0gWCA/IE4gOiBtaW4ocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF0sIFtcbiAgICAgICAgICBlMCA9IGRpbSA9PT0gWSA/IEUgOiBtYXgocHRzWzBdWzBdLCBwdHNbMV1bMF0pLFxuICAgICAgICAgIHMwID0gZGltID09PSBYID8gUyA6IG1heChwdHNbMF1bMV0sIHB0c1sxXVsxXSlcbiAgICAgICAgXV07XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpIG1vdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3MCA9IHNlbGVjdGlvblswXVswXTtcbiAgICAgIG4wID0gc2VsZWN0aW9uWzBdWzFdO1xuICAgICAgZTAgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBzMCA9IHNlbGVjdGlvblsxXVsxXTtcbiAgICB9XG5cbiAgICB3MSA9IHcwO1xuICAgIG4xID0gbjA7XG4gICAgZTEgPSBlMDtcbiAgICBzMSA9IHMwO1xuXG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoYXQpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgdmFyIG92ZXJsYXkgPSBncm91cC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcblxuICAgIGlmIChldmVudC50b3VjaGVzKSB7XG4gICAgICBlbWl0Lm1vdmVkID0gbW92ZWQ7XG4gICAgICBlbWl0LmVuZGVkID0gZW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAgICAgLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNldXAuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgICAgaWYgKGtleXMpIHZpZXdcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydChldmVudCwgbW9kZS5uYW1lKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgfHwgW2V2ZW50XSkge1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcG9pbnRzKVxuICAgICAgICAgIGlmIChkLmlkZW50aWZpZXIgPT09IHAuaWRlbnRpZmllcikgZC5jdXIgPSBwb2ludGVyKHAsIHRoYXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNoaWZ0aW5nICYmICFsb2NrWCAmJiAhbG9ja1kgJiYgcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgaWYgKGFicyhwb2ludC5jdXJbMF0gLSBwb2ludFswXSkgPiBhYnMocG9pbnQuY3VyWzFdIC0gcG9pbnRbMV0pKVxuICAgICAgICAgIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxvY2tYID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKVxuICAgICAgICBpZiAocG9pbnQuY3VyKSBwb2ludFswXSA9IHBvaW50LmN1clswXSwgcG9pbnRbMV0gPSBwb2ludC5jdXJbMV07XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBtb3ZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXSwgcG9pbnQwID0gcG9pbnQucG9pbnQwO1xuICAgICAgdmFyIHQ7XG5cbiAgICAgIGR4ID0gcG9pbnRbMF0gLSBwb2ludDBbMF07XG4gICAgICBkeSA9IHBvaW50WzFdIC0gcG9pbnQwWzFdO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBNT0RFX1NQQUNFOlxuICAgICAgICBjYXNlIE1PREVfRFJBRzoge1xuICAgICAgICAgIGlmIChzaWduWCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChwb2ludHNbMV0pIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHBvaW50c1swXVswXSkpLCBlMSA9IG1heChXLCBtaW4oRSwgcG9pbnRzWzFdWzBdKSksIHNpZ25YID0gMTtcbiAgICAgICAgICAgIGlmIChzaWduWSkgbjEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1swXVsxXSkpLCBzMSA9IG1heChOLCBtaW4oUywgcG9pbnRzWzFdWzFdKSksIHNpZ25ZID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gbWF4KFcgLSBlMCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBtYXgoTiAtIG4wLCBtaW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWSA+IDApIGR5ID0gbWF4KE4gLSBzMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE1PREVfQ0VOVEVSOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSB3MSA9IG1heChXLCBtaW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gbWF4KFcsIG1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBuMCAtIGR5ICogc2lnblkpKSwgczEgPSBtYXgoTiwgbWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaChldmVudCwgbW9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRlZChldmVudCkge1xuICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKGV2ZW50LCBtb2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsCiAgICAiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBicnVzaCxcbiAgYnJ1c2hYLFxuICBicnVzaFksXG4gIGJydXNoU2VsZWN0aW9uXG59IGZyb20gXCIuL2JydXNoLmpzXCI7XG4iLAogICAgImNvbnN0IHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIGFwcGVuZChzdHJpbmdzKSB7XG4gIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICBmb3IgKGxldCBpID0gMSwgbiA9IHN0cmluZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgdGhpcy5fICs9IGFyZ3VtZW50c1tpXSArIHN0cmluZ3NbaV07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwZW5kUm91bmQoZGlnaXRzKSB7XG4gIGxldCBkID0gTWF0aC5mbG9vcihkaWdpdHMpO1xuICBpZiAoIShkID49IDApKSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2RpZ2l0c31gKTtcbiAgaWYgKGQgPiAxNSkgcmV0dXJuIGFwcGVuZDtcbiAgY29uc3QgayA9IDEwICoqIGQ7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmdzKSB7XG4gICAgdGhpcy5fICs9IHN0cmluZ3NbMF07XG4gICAgZm9yIChsZXQgaSA9IDEsIG4gPSBzdHJpbmdzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdGhpcy5fICs9IE1hdGgucm91bmQoYXJndW1lbnRzW2ldICogaykgLyBrICsgc3RyaW5nc1tpXTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQYXRoIHtcbiAgY29uc3RydWN0b3IoZGlnaXRzKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl95MCA9IC8vIHN0YXJ0IG9mIGN1cnJlbnQgc3VicGF0aFxuICAgIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gICAgdGhpcy5fID0gXCJcIjtcbiAgICB0aGlzLl9hcHBlbmQgPSBkaWdpdHMgPT0gbnVsbCA/IGFwcGVuZCA6IGFwcGVuZFJvdW5kKGRpZ2l0cyk7XG4gIH1cbiAgbW92ZVRvKHgsIHkpIHtcbiAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDAgPSB0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kwID0gdGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGNsb3NlUGF0aCgpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl9hcHBlbmRgWmA7XG4gICAgfVxuICB9XG4gIGxpbmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIHF1YWRyYXRpY0N1cnZlVG8oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYFEkeyt4MX0sJHsreTF9LCR7dGhpcy5feDEgPSAreH0sJHt0aGlzLl95MSA9ICt5fWA7XG4gIH1cbiAgYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBDJHsreDF9LCR7K3kxfSwkeyt4Mn0sJHsreTJ9LCR7dGhpcy5feDEgPSAreH0sJHt0aGlzLl95MSA9ICt5fWA7XG4gIH1cbiAgYXJjVG8oeDEsIHkxLCB4MiwgeTIsIHIpIHtcbiAgICB4MSA9ICt4MSwgeTEgPSAreTEsIHgyID0gK3gyLCB5MiA9ICt5MiwgciA9ICtyO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtyfWApO1xuXG4gICAgbGV0IHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MSx5MSkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDEgPSB4MX0sJHt0aGlzLl95MSA9IHkxfWA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxID0geDF9LCR7dGhpcy5feTEgPSB5MX1gO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICBsZXQgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuX2FwcGVuZGBMJHt4MSArIHQwMSAqIHgwMX0sJHt5MSArIHQwMSAqIHkwMX1gO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hcHBlbmRgQSR7cn0sJHtyfSwwLDAsJHsrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCl9LCR7dGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMX0sJHt0aGlzLl95MSA9IHkxICsgdDIxICogeTIxfWA7XG4gICAgfVxuICB9XG4gIGFyYyh4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3IsIGNjdyA9ICEhY2N3O1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtyfWApO1xuXG4gICAgbGV0IGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXBwZW5kYE0ke3gwfSwke3kwfWA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl9hcHBlbmRgTCR7eDB9LCR7eTB9YDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwxLCR7Y3d9LCR7eCAtIGR4fSwke3kgLSBkeX1BJHtyfSwke3J9LDAsMSwke2N3fSwke3RoaXMuX3gxID0geDB9LCR7dGhpcy5feTEgPSB5MH1gO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl9hcHBlbmRgQSR7cn0sJHtyfSwwLCR7KyhkYSA+PSBwaSl9LCR7Y3d9LCR7dGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKX0sJHt0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpfWA7XG4gICAgfVxuICB9XG4gIHJlY3QoeCwgeSwgdywgaCkge1xuICAgIHRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MCA9IHRoaXMuX3gxID0gK3h9LCR7dGhpcy5feTAgPSB0aGlzLl95MSA9ICt5fWgke3cgPSArd312JHsraH1oJHstd31aYDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gbmV3IFBhdGg7XG59XG5cbi8vIEFsbG93IGluc3RhbmNlb2YgZDMucGF0aFxucGF0aC5wcm90b3R5cGUgPSBQYXRoLnByb3RvdHlwZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhSb3VuZChkaWdpdHMgPSAzKSB7XG4gIHJldHVybiBuZXcgUGF0aCgrZGlnaXRzKTtcbn1cbiIsCiAgICAiZXhwb3J0IHtQYXRoLCBwYXRoLCBwYXRoUm91bmR9IGZyb20gXCIuL3BhdGguanNcIjtcbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsCiAgICAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncm91cGluZywgdGhvdXNhbmRzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgdCA9IFtdLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xuICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICB9O1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihudW1lcmFscykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsCiAgICAiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsCiAgICAiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwKICAgICJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgIGkgPSBleHBvbmVudCAtIChwcmVmaXhFeHBvbmVudCA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50IC8gMykpKSAqIDMpICsgMSxcbiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XG4gIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgIDogaSA+IG4gPyBjb2VmZmljaWVudCArIG5ldyBBcnJheShpIC0gbiArIDEpLmpvaW4oXCIwXCIpXG4gICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXG4gICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsUGFydHMoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsCiAgICAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsCiAgICAiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiAoeCwgcCkgPT4gKHggKiAxMDApLnRvRml4ZWQocCksXG4gIFwiYlwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKSxcbiAgXCJjXCI6ICh4KSA9PiB4ICsgXCJcIixcbiAgXCJkXCI6IGZvcm1hdERlY2ltYWwsXG4gIFwiZVwiOiAoeCwgcCkgPT4geC50b0V4cG9uZW50aWFsKHApLFxuICBcImZcIjogKHgsIHApID0+IHgudG9GaXhlZChwKSxcbiAgXCJnXCI6ICh4LCBwKSA9PiB4LnRvUHJlY2lzaW9uKHApLFxuICBcIm9cIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCksXG4gIFwicFwiOiAoeCwgcCkgPT4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksXG4gIFwieFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNilcbn07XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLAogICAgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuaW1wb3J0IGZvcm1hdEdyb3VwIGZyb20gXCIuL2Zvcm1hdEdyb3VwLmpzXCI7XG5pbXBvcnQgZm9ybWF0TnVtZXJhbHMgZnJvbSBcIi4vZm9ybWF0TnVtZXJhbHMuanNcIjtcbmltcG9ydCBmb3JtYXRTcGVjaWZpZXIgZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHJpbSBmcm9tIFwiLi9mb3JtYXRUcmltLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXMuanNcIjtcbmltcG9ydCB7cHJlZml4RXhwb25lbnR9IGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgbWFwID0gQXJyYXkucHJvdG90eXBlLm1hcCxcbiAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxvY2FsZSkge1xuICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgPT09IHVuZGVmaW5lZCB8fCBsb2NhbGUudGhvdXNhbmRzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdEdyb3VwKG1hcC5jYWxsKGxvY2FsZS5ncm91cGluZywgTnVtYmVyKSwgbG9jYWxlLnRob3VzYW5kcyArIFwiXCIpLFxuICAgICAgY3VycmVuY3lQcmVmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMF0gKyBcIlwiLFxuICAgICAgY3VycmVuY3lTdWZmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMV0gKyBcIlwiLFxuICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsID09PSB1bmRlZmluZWQgPyBcIi5cIiA6IGxvY2FsZS5kZWNpbWFsICsgXCJcIixcbiAgICAgIG51bWVyYWxzID0gbG9jYWxlLm51bWVyYWxzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdE51bWVyYWxzKG1hcC5jYWxsKGxvY2FsZS5udW1lcmFscywgU3RyaW5nKSksXG4gICAgICBwZXJjZW50ID0gbG9jYWxlLnBlcmNlbnQgPT09IHVuZGVmaW5lZCA/IFwiJVwiIDogbG9jYWxlLnBlcmNlbnQgKyBcIlwiLFxuICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwi4oiSXCIgOiBsb2NhbGUubWludXMgKyBcIlwiLFxuICAgICAgbmFuID0gbG9jYWxlLm5hbiA9PT0gdW5kZWZpbmVkID8gXCJOYU5cIiA6IGxvY2FsZS5uYW4gKyBcIlwiO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcblxuICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXG4gICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICBzaWduID0gc3BlY2lmaWVyLnNpZ24sXG4gICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXG4gICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgd2lkdGggPSBzcGVjaWZpZXIud2lkdGgsXG4gICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxuICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICB0cmltID0gc3BlY2lmaWVyLnRyaW0sXG4gICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgIC8vIFRoZSBcIm5cIiB0eXBlIGlzIGFuIGFsaWFzIGZvciBcIixnXCIuXG4gICAgaWYgKHR5cGUgPT09IFwiblwiKSBjb21tYSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgcHJlY2lzaW9uID09PSB1bmRlZmluZWQgJiYgKHByZWNpc2lvbiA9IDEyKSwgdHJpbSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIElmIHplcm8gZmlsbCBpcyBzcGVjaWZpZWQsIHBhZGRpbmcgZ29lcyBhZnRlciBzaWduIGFuZCBiZWZvcmUgZGlnaXRzLlxuICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVByZWZpeCA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5U3VmZml4IDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDZcbiAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXG4gICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0KHZhbHVlKSB7XG4gICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgaSwgbiwgYztcblxuICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzaWduLiAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBmb3JtYXR0aW5nLlxuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBhZnRlciBmb3JtYXR0aW5nLCBhbmQgbm8gZXhwbGljaXQgcG9zaXRpdmUgc2lnbiBpcyByZXF1ZXN0ZWQsIGhpZGUgdGhlIHNpZ24uXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgIC8vIEJyZWFrIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaW50byB0aGUgaW50ZWdlciDigJx2YWx1ZeKAnSBwYXJ0IHRoYXQgY2FuIGJlXG4gICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxuICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICBpID0gLTEsIG4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IChjID09PSA0NiA/IGRlY2ltYWwgKyB2YWx1ZS5zbGljZShpICsgMSkgOiB2YWx1ZS5zbGljZShpKSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cbiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBhZnRlciBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcblxuICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgIGNhc2UgXCI8XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlID0gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyICsgXCJcIjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XG4gICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxuICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcbiAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgZm9ybWF0UHJlZml4OiBmb3JtYXRQcmVmaXhcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLAogICAgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsCiAgICAiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLAogICAgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0RGVmYXVsdExvY2FsZSwgZm9ybWF0LCBmb3JtYXRQcmVmaXh9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXRMb2NhbGV9IGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdFNwZWNpZmllciwgRm9ybWF0U3BlY2lmaWVyfSBmcm9tIFwiLi9mb3JtYXRTcGVjaWZpZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25GaXhlZH0gZnJvbSBcIi4vcHJlY2lzaW9uRml4ZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwcmVjaXNpb25QcmVmaXh9IGZyb20gXCIuL3ByZWNpc2lvblByZWZpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiLi9wcmVjaXNpb25Sb3VuZC5qc1wiO1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLAogICAgImltcG9ydCB7SW50ZXJuTWFwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBpbXBsaWNpdCA9IFN5bWJvbChcImltcGxpY2l0XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRpbmFsKCkge1xuICB2YXIgaW5kZXggPSBuZXcgSW50ZXJuTWFwKCksXG4gICAgICBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB1bmtub3duID0gaW1wbGljaXQ7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIGxldCBpID0gaW5kZXguZ2V0KGQpO1xuICAgIGlmIChpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh1bmtub3duICE9PSBpbXBsaWNpdCkgcmV0dXJuIHVua25vd247XG4gICAgICBpbmRleC5zZXQoZCwgaSA9IGRvbWFpbi5wdXNoKGQpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVtpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBuZXcgSW50ZXJuTWFwKCk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBfKSB7XG4gICAgICBpZiAoaW5kZXguaGFzKHZhbHVlKSkgY29udGludWU7XG4gICAgICBpbmRleC5zZXQodmFsdWUsIGRvbWFpbi5wdXNoKHZhbHVlKSAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsCiAgICAiaW1wb3J0IHtyYW5nZSBhcyBzZXF1ZW5jZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByMCA9IDAsXG4gICAgICByMSA9IDEsXG4gICAgICBzdGVwLFxuICAgICAgYmFuZHdpZHRoLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IDAsXG4gICAgICBwYWRkaW5nT3V0ZXIgPSAwLFxuICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgZGVsZXRlIHNjYWxlLnVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgcmV2ZXJzZSA9IHIxIDwgcjAsXG4gICAgICAgIHN0YXJ0ID0gcmV2ZXJzZSA/IHIxIDogcjAsXG4gICAgICAgIHN0b3AgPSByZXZlcnNlID8gcjAgOiByMTtcbiAgICBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgxLCBuIC0gcGFkZGluZ0lubmVyICsgcGFkZGluZ091dGVyICogMik7XG4gICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICBzdGFydCArPSAoc3RvcCAtIHN0YXJ0IC0gc3RlcCAqIChuIC0gcGFkZGluZ0lubmVyKSkgKiBhbGlnbjtcbiAgICBiYW5kd2lkdGggPSBzdGVwICogKDEgLSBwYWRkaW5nSW5uZXIpO1xuICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgIHZhciB2YWx1ZXMgPSBzZXF1ZW5jZShuKS5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gc3RhcnQgKyBzdGVwICogaTsgfSk7XG4gICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoW3IwLCByMV0gPSBfLCByMCA9ICtyMCwgcjEgPSArcjEsIHJlc2NhbGUoKSkgOiBbcjAsIHIxXTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBbcjAsIHIxXSA9IF8sIHIwID0gK3IwLCByMSA9ICtyMSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuYmFuZHdpZHRoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgfTtcblxuICBzY2FsZS5zdGVwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHN0ZXA7XG4gIH07XG5cbiAgc2NhbGUucm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWluKDEsIHBhZGRpbmdPdXRlciA9ICtfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgXyksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ091dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdPdXRlciA9ICtfLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKGRvbWFpbigpLCBbcjAsIHIxXSlcbiAgICAgICAgLnJvdW5kKHJvdW5kKVxuICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgLnBhZGRpbmdPdXRlcihwYWRkaW5nT3V0ZXIpXG4gICAgICAgIC5hbGlnbihhbGlnbik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShyZXNjYWxlKCksIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50aXNoKHNjYWxlKSB7XG4gIHZhciBjb3B5ID0gc2NhbGUuY29weTtcblxuICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ0lubmVyO1xuICBkZWxldGUgc2NhbGUucGFkZGluZ091dGVyO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goY29weSgpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCgpIHtcbiAgcmV0dXJuIHBvaW50aXNoKGJhbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiAreDtcbn1cbiIsCiAgICAiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLAogICAgImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrRm9ybWF0KHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsCiAgICAiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuaWNlKGRvbWFpbiwgaW50ZXJ2YWwpIHtcbiAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgdmFyIGkwID0gMCxcbiAgICAgIGkxID0gZG9tYWluLmxlbmd0aCAtIDEsXG4gICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICB4MSA9IGRvbWFpbltpMV0sXG4gICAgICB0O1xuXG4gIGlmICh4MSA8IHgwKSB7XG4gICAgdCA9IGkwLCBpMCA9IGkxLCBpMSA9IHQ7XG4gICAgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7XG4gIH1cblxuICBkb21haW5baTBdID0gaW50ZXJ2YWwuZmxvb3IoeDApO1xuICBkb21haW5baTFdID0gaW50ZXJ2YWwuY2VpbCh4MSk7XG4gIHJldHVybiBkb21haW47XG59XG4iLAogICAgImNvbnN0IHQwID0gbmV3IERhdGUsIHQxID0gbmV3IERhdGU7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lSW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IG5ldyBEYXRlIDogbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gKGRhdGUpID0+IHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLmNlaWwgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IChkYXRlKSA9PiB7XG4gICAgY29uc3QgZDAgPSBpbnRlcnZhbChkYXRlKSwgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IChkYXRlLCBzdGVwKSA9PiB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gKHN0YXJ0LCBzdG9wLCBzdGVwKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPSBbXTtcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBsZXQgcHJldmlvdXM7XG4gICAgZG8gcmFuZ2UucHVzaChwcmV2aW91cyA9IG5ldyBEYXRlKCtzdGFydCkpLCBvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KTtcbiAgICB3aGlsZSAocHJldmlvdXMgPCBzdGFydCAmJiBzdGFydCA8IHN0b3ApO1xuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSAodGVzdCkgPT4ge1xuICAgIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB7XG4gICAgICAgIGlmIChzdGVwIDwgMCkgd2hpbGUgKCsrc3RlcCA8PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9IGVsc2Ugd2hpbGUgKC0tc3RlcCA+PSAwKSB7XG4gICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgKzEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IChzdGVwKSA9PiB7XG4gICAgICBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHJldHVybiAhaXNGaW5pdGUoc3RlcCkgfHwgIShzdGVwID4gMCkgPyBudWxsXG4gICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgOiBpbnRlcnZhbC5maWx0ZXIoZmllbGRcbiAgICAgICAgICAgICAgPyAoZCkgPT4gZmllbGQoZCkgJSBzdGVwID09PSAwXG4gICAgICAgICAgICAgIDogKGQpID0+IGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsCiAgICAiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZCA9IHRpbWVJbnRlcnZhbCgoKSA9PiB7XG4gIC8vIG5vb3Bcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gKGspID0+IHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwKICAgICJleHBvcnQgY29uc3QgZHVyYXRpb25TZWNvbmQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTWludXRlID0gZHVyYXRpb25TZWNvbmQgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uRGF5ID0gZHVyYXRpb25Ib3VyICogMjQ7XG5leHBvcnQgY29uc3QgZHVyYXRpb25XZWVrID0gZHVyYXRpb25EYXkgKiA3O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uWWVhciA9IGR1cmF0aW9uRGF5ICogMzY1O1xuIiwKICAgICJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmQgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwKICAgICJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlcyA9IHRpbWVNaW51dGUucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNaW51dGUgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLAogICAgImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91cnMgPSB0aW1lSG91ci5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiIsCiAgICAiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXkgPSB0aW1lSW50ZXJ2YWwoXG4gIGRhdGUgPT4gZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSxcbiAgKGRhdGUsIHN0ZXApID0+IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApLFxuICAoc3RhcnQsIGVuZCkgPT4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheSxcbiAgZGF0ZSA9PiBkYXRlLmdldERhdGUoKSAtIDFcbik7XG5cbmV4cG9ydCBjb25zdCB0aW1lRGF5cyA9IHRpbWVEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5ID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25EYXkpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1bml4RGF5cyA9IHVuaXhEYXkucmFuZ2U7XG4iLAogICAgImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB0aW1lV2Vla2RheShpKSB7XG4gIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5ID0gdGltZVdlZWtkYXkoMCk7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheSA9IHRpbWVXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5ID0gdGltZVdlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheSA9IHRpbWVXZWVrZGF5KDMpO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheSA9IHRpbWVXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXkgPSB0aW1lV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXkgPSB0aW1lV2Vla2RheSg2KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVTdW5kYXlzID0gdGltZVN1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lTW9uZGF5cyA9IHRpbWVNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVR1ZXNkYXlzID0gdGltZVR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheXMgPSB0aW1lV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheXMgPSB0aW1lVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZUZyaWRheXMgPSB0aW1lRnJpZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVTYXR1cmRheXMgPSB0aW1lU2F0dXJkYXkucmFuZ2U7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsCiAgICAiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lTW9udGggPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRocyA9IHRpbWVNb250aC5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y01vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZSgxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01vbnRocyA9IHV0Y01vbnRoLnJhbmdlO1xuIiwKICAgICJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudGltZVllYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHRpbWVZZWFycyA9IHRpbWVZZWFyLnJhbmdlO1xuXG5leHBvcnQgY29uc3QgdXRjWWVhciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSAoaykgPT4ge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiIsCiAgICAiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHttaWxsaXNlY29uZH0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCB7c2Vjb25kfSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcbmltcG9ydCB7dGltZU1pbnV0ZSwgdXRjTWludXRlfSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCB7dGltZUhvdXIsIHV0Y0hvdXJ9IGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCB7dGltZURheSwgdW5peERheX0gZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3RpbWVTdW5kYXksIHV0Y1N1bmRheX0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuaW1wb3J0IHt0aW1lTW9udGgsIHV0Y01vbnRofSBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHt0aW1lWWVhciwgdXRjWWVhcn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5mdW5jdGlvbiB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKSB7XG5cbiAgY29uc3QgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQ7XG4gICAgaWYgKHJldmVyc2UpIFtzdGFydCwgc3RvcF0gPSBbc3RvcCwgc3RhcnRdO1xuICAgIGNvbnN0IGludGVydmFsID0gY291bnQgJiYgdHlwZW9mIGNvdW50LnJhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBjb3VudCA6IHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIGNvbnN0IHRpY2tzID0gaW50ZXJ2YWwgPyBpbnRlcnZhbC5yYW5nZShzdGFydCwgK3N0b3AgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByZXZlcnNlID8gdGlja3MucmV2ZXJzZSgpIDogdGlja3M7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGNvdW50O1xuICAgIGNvbnN0IGkgPSBiaXNlY3RvcigoWywsIHN0ZXBdKSA9PiBzdGVwKS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkgcmV0dXJuIHllYXIuZXZlcnkodGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGNvdW50KSk7XG4gICAgaWYgKGkgPT09IDApIHJldHVybiBtaWxsaXNlY29uZC5ldmVyeShNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLCAxKSk7XG4gICAgY29uc3QgW3QsIHN0ZXBdID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgIHJldHVybiB0LmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIFt0aWNrcywgdGlja0ludGVydmFsXTtcbn1cblxuY29uc3QgW3V0Y1RpY2tzLCB1dGNUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNTdW5kYXksIHVuaXhEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSk7XG5jb25zdCBbdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsXSA9IHRpY2tlcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiIsCiAgICAiZXhwb3J0IHtcbiAgdGltZUludGVydmFsXG59IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIG1pbGxpc2Vjb25kIGFzIHV0Y01pbGxpc2Vjb25kLFxuICBtaWxsaXNlY29uZHMgYXMgdXRjTWlsbGlzZWNvbmRzLFxuICBtaWxsaXNlY29uZCBhcyB0aW1lTWlsbGlzZWNvbmQsXG4gIG1pbGxpc2Vjb25kcyBhcyB0aW1lTWlsbGlzZWNvbmRzXG59IGZyb20gXCIuL21pbGxpc2Vjb25kLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHNlY29uZCBhcyB1dGNTZWNvbmQsXG4gIHNlY29uZHMgYXMgdXRjU2Vjb25kcyxcbiAgc2Vjb25kIGFzIHRpbWVTZWNvbmQsXG4gIHNlY29uZHMgYXMgdGltZVNlY29uZHNcbn0gZnJvbSBcIi4vc2Vjb25kLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVNaW51dGUsXG4gIHRpbWVNaW51dGVzLFxuICB1dGNNaW51dGUsXG4gIHV0Y01pbnV0ZXNcbn0gZnJvbSBcIi4vbWludXRlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVIb3VyLFxuICB0aW1lSG91cnMsXG4gIHV0Y0hvdXIsXG4gIHV0Y0hvdXJzXG59IGZyb20gXCIuL2hvdXIuanNcIjtcblxuZXhwb3J0IHtcbiAgdGltZURheSxcbiAgdGltZURheXMsXG4gIHV0Y0RheSxcbiAgdXRjRGF5cyxcbiAgdW5peERheSxcbiAgdW5peERheXNcbn0gZnJvbSBcIi4vZGF5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVTdW5kYXkgYXMgdGltZVdlZWssXG4gIHRpbWVTdW5kYXlzIGFzIHRpbWVXZWVrcyxcbiAgdGltZVN1bmRheSxcbiAgdGltZVN1bmRheXMsXG4gIHRpbWVNb25kYXksXG4gIHRpbWVNb25kYXlzLFxuICB0aW1lVHVlc2RheSxcbiAgdGltZVR1ZXNkYXlzLFxuICB0aW1lV2VkbmVzZGF5LFxuICB0aW1lV2VkbmVzZGF5cyxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lVGh1cnNkYXlzLFxuICB0aW1lRnJpZGF5LFxuICB0aW1lRnJpZGF5cyxcbiAgdGltZVNhdHVyZGF5LFxuICB0aW1lU2F0dXJkYXlzLFxuICB1dGNTdW5kYXkgYXMgdXRjV2VlayxcbiAgdXRjU3VuZGF5cyBhcyB1dGNXZWVrcyxcbiAgdXRjU3VuZGF5LFxuICB1dGNTdW5kYXlzLFxuICB1dGNNb25kYXksXG4gIHV0Y01vbmRheXMsXG4gIHV0Y1R1ZXNkYXksXG4gIHV0Y1R1ZXNkYXlzLFxuICB1dGNXZWRuZXNkYXksXG4gIHV0Y1dlZG5lc2RheXMsXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNUaHVyc2RheXMsXG4gIHV0Y0ZyaWRheSxcbiAgdXRjRnJpZGF5cyxcbiAgdXRjU2F0dXJkYXksXG4gIHV0Y1NhdHVyZGF5c1xufSBmcm9tIFwiLi93ZWVrLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHRpbWVNb250aCxcbiAgdGltZU1vbnRocyxcbiAgdXRjTW9udGgsXG4gIHV0Y01vbnRoc1xufSBmcm9tIFwiLi9tb250aC5qc1wiO1xuXG5leHBvcnQge1xuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxuICB1dGNZZWFyLFxuICB1dGNZZWFyc1xufSBmcm9tIFwiLi95ZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHV0Y1RpY2tzLFxuICB1dGNUaWNrSW50ZXJ2YWwsXG4gIHRpbWVUaWNrcyxcbiAgdGltZVRpY2tJbnRlcnZhbFxufSBmcm9tIFwiLi90aWNrcy5qc1wiO1xuIiwKICAgICJpbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lU3VuZGF5LFxuICB0aW1lTW9uZGF5LFxuICB0aW1lVGh1cnNkYXksXG4gIHRpbWVZZWFyLFxuICB1dGNEYXksXG4gIHV0Y1N1bmRheSxcbiAgdXRjTW9uZGF5LFxuICB1dGNUaHVyc2RheSxcbiAgdXRjWWVhclxufSBmcm9tIFwiZDMtdGltZVwiO1xuXG5mdW5jdGlvbiBsb2NhbERhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xufVxuXG5mdW5jdGlvbiB1dGNEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xufVxuXG5mdW5jdGlvbiBuZXdEYXRlKHksIG0sIGQpIHtcbiAgcmV0dXJuIHt5OiB5LCBtOiBtLCBkOiBkLCBIOiAwLCBNOiAwLCBTOiAwLCBMOiAwfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxuICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgIGxvY2FsZV90aW1lID0gbG9jYWxlLnRpbWUsXG4gICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxuICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICBsb2NhbGVfc2hvcnRXZWVrZGF5cyA9IGxvY2FsZS5zaG9ydERheXMsXG4gICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcbiAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXG4gICAgICBwZXJpb2RMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcbiAgICAgIG1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLFxuICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcblxuICB2YXIgZm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0TWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdERheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0TWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0U2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0V2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0WWVhcixcbiAgICBcIllcIjogZm9ybWF0RnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFpvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHV0Y0Zvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFVUQ1Nob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0VVRDV2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0VVRDU2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0VVRDTW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogZm9ybWF0VVRDWWVhcklTTyxcbiAgICBcIkdcIjogZm9ybWF0VVRDRnVsbFllYXJJU08sXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcInFcIjogZm9ybWF0VVRDUXVhcnRlcixcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRVVENab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciBwYXJzZXMgPSB7XG4gICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXG4gICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcbiAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcbiAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBwYXJzZVllYXIsXG4gICAgXCJHXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgXCJIXCI6IHBhcnNlSG91cjI0LFxuICAgIFwiSVwiOiBwYXJzZUhvdXIyNCxcbiAgICBcImpcIjogcGFyc2VEYXlPZlllYXIsXG4gICAgXCJMXCI6IHBhcnNlTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBwYXJzZU1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBwYXJzZU1pbnV0ZXMsXG4gICAgXCJwXCI6IHBhcnNlUGVyaW9kLFxuICAgIFwicVwiOiBwYXJzZVF1YXJ0ZXIsXG4gICAgXCJRXCI6IHBhcnNlVW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxuICAgIFwidVwiOiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IHBhcnNlV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogcGFyc2VXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IHBhcnNlV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxuICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgXCJ5XCI6IHBhcnNlWWVhcixcbiAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgIFwiJVwiOiBwYXJzZUxpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIGogPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFkLFxuICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSBkYXRlID0gbmV3IERhdGUoK2RhdGUpO1xuXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgICBpZiAoKHBhZCA9IHBhZHNbYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKV0pICE9IG51bGwpIGMgPSBzcGVjaWZpZXIuY2hhckF0KCsraSk7XG4gICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcbiAgICAgICAgICBzdHJpbmcucHVzaChjKTtcbiAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UGFyc2Uoc3BlY2lmaWVyLCBaKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIGQgPSBuZXdEYXRlKDE5MDAsIHVuZGVmaW5lZCwgMSksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuICAgICAgaWYgKFwic1wiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLnMgKiAxMDAwICsgKFwiTFwiIGluIGQgPyBkLkwgOiAwKSk7XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgdXRjUGFyc2UsIG5ldmVyIHVzZSB0aGUgbG9jYWwgdGltZXpvbmUuXG4gICAgICBpZiAoWiAmJiAhKFwiWlwiIGluIGQpKSBkLlogPSAwO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIElmIHRoZSBtb250aCB3YXMgbm90IHNwZWNpZmllZCwgaW5oZXJpdCBmcm9tIHRoZSBxdWFydGVyLlxuICAgICAgaWYgKGQubSA9PT0gdW5kZWZpbmVkKSBkLm0gPSBcInFcIiBpbiBkID8gZC5xIDogMDtcblxuICAgICAgLy8gQ29udmVydCBkYXktb2Ytd2VlayBhbmQgd2Vlay1vZi15ZWFyIHRvIGRheS1vZi15ZWFyLlxuICAgICAgaWYgKFwiVlwiIGluIGQpIHtcbiAgICAgICAgaWYgKGQuViA8IDEgfHwgZC5WID4gNTMpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gMTtcbiAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldFVUQ0RheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHV0Y01vbmRheS5jZWlsKHdlZWspIDogdXRjTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXRVVENEYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdlZWsgPSBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXREYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB0aW1lTW9uZGF5LmNlaWwod2VlaykgOiB0aW1lTW9uZGF5KHdlZWspO1xuICAgICAgICAgIHdlZWsgPSB0aW1lRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0RGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwidVwiIGluIGQgPyBkLnUgJSA3IDogXCJXXCIgaW4gZCA/IDEgOiAwO1xuICAgICAgICBkYXkgPSBcIlpcIiBpbiBkID8gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldFVUQ0RheSgpIDogbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBsb2NhbERhdGUoZCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nLCBqKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgbSA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgIGMsXG4gICAgICAgIHBhcnNlO1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBpZiAoaiA+PSBtKSByZXR1cm4gLTE7XG4gICAgICBjID0gc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGlmIChjID09PSAzNykge1xuICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJBdChpKyspO1xuICAgICAgICBwYXJzZSA9IHBhcnNlc1tjIGluIHBhZHMgPyBzcGVjaWZpZXIuY2hhckF0KGkrKykgOiBjXTtcbiAgICAgICAgaWYgKCFwYXJzZSB8fCAoKGogPSBwYXJzZShkLCBzdHJpbmcsIGopKSA8IDApKSByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5nLmNoYXJDb2RlQXQoaisrKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGo7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHBlcmlvZFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLnAgPSBwZXJpb2RMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gd2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydE1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IHNob3J0TW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGVUaW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX3RpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0TW9udGgoKSAvIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldFVUQ01vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgZmFsc2UpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSxcbiAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICB1dGNQYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCB0cnVlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHBhZHMgPSB7XCItXCI6IFwiXCIsIFwiX1wiOiBcIiBcIiwgXCIwXCI6IFwiMFwifSxcbiAgICBudW1iZXJSZSA9IC9eXFxzKlxcZCsvLCAvLyBub3RlOiBpZ25vcmVzIG5leHQgZGlyZWN0aXZlXG4gICAgcGVyY2VudFJlID0gL14lLyxcbiAgICByZXF1b3RlUmUgPSAvW1xcXFxeJCorP3xbXFxdKCkue31dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICByZXR1cm4gbmV3IE1hcChuYW1lcy5tYXAoKG5hbWUsIGkpID0+IFtuYW1lLnRvTG93ZXJDYXNlKCksIGldKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC51ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlYgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLlogPSBuWzFdID8gMCA6IC0oblsyXSArIChuWzNdIHx8IFwiMDBcIikpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVhcnRlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnEgPSBuWzBdICogMyAtIDMsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5zID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBkSVNPKGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IGRJU08oZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFpvbmUoZCkge1xuICB2YXIgeiA9IGQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuICh6ID4gMCA/IFwiLVwiIDogKHogKj0gLTEsIFwiK1wiKSlcbiAgICAgICsgcGFkKHogLyA2MCB8IDAsIFwiMFwiLCAyKVxuICAgICAgKyBwYWQoeiAlIDYwLCBcIjBcIiwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdXRjRGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ1NlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZG93ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIGRvdyA9PT0gMCA/IDcgOiBkb3c7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y1N1bmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBVVENkSVNPKGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIGQgPSBVVENkSVNPKGQpO1xuICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldFVUQ0RheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcklTTyhkLCBwKSB7XG4gIGQgPSBVVENkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsCiAgICAiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlLCB0aW1lRm9ybWF0LCB0aW1lUGFyc2UsIHV0Y0Zvcm1hdCwgdXRjUGFyc2V9IGZyb20gXCIuL2RlZmF1bHRMb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0aW1lRm9ybWF0TG9jYWxlfSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpc29Gb3JtYXR9IGZyb20gXCIuL2lzb0Zvcm1hdC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGlzb1BhcnNlfSBmcm9tIFwiLi9pc29QYXJzZS5qc1wiO1xuIiwKICAgICJpbXBvcnQge3RpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHt0aW1lRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2UuanNcIjtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCksXG4gICAgICBpbnZlcnQgPSBzY2FsZS5pbnZlcnQsXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgdmFyIGZvcm1hdE1pbGxpc2Vjb25kID0gZm9ybWF0KFwiLiVMXCIpLFxuICAgICAgZm9ybWF0U2Vjb25kID0gZm9ybWF0KFwiOiVTXCIpLFxuICAgICAgZm9ybWF0TWludXRlID0gZm9ybWF0KFwiJUk6JU1cIiksXG4gICAgICBmb3JtYXRIb3VyID0gZm9ybWF0KFwiJUkgJXBcIiksXG4gICAgICBmb3JtYXREYXkgPSBmb3JtYXQoXCIlYSAlZFwiKSxcbiAgICAgIGZvcm1hdFdlZWsgPSBmb3JtYXQoXCIlYiAlZFwiKSxcbiAgICAgIGZvcm1hdE1vbnRoID0gZm9ybWF0KFwiJUJcIiksXG4gICAgICBmb3JtYXRZZWFyID0gZm9ybWF0KFwiJVlcIik7XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkYXRlKSB7XG4gICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgOiBtaW51dGUoZGF0ZSkgPCBkYXRlID8gZm9ybWF0U2Vjb25kXG4gICAgICAgIDogaG91cihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaW51dGVcbiAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICA6IG1vbnRoKGRhdGUpIDwgZGF0ZSA/ICh3ZWVrKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdERheSA6IGZvcm1hdFdlZWspXG4gICAgICAgIDogeWVhcihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNb250aFxuICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihBcnJheS5mcm9tKF8sIG51bWJlcikpIDogZG9tYWluKCkubWFwKGRhdGUpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGludGVydmFsID09IG51bGwgPyAxMCA6IGludGVydmFsKTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiBzcGVjaWZpZXIgPT0gbnVsbCA/IHRpY2tGb3JtYXQgOiBmb3JtYXQoc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIGlmICghaW50ZXJ2YWwgfHwgdHlwZW9mIGludGVydmFsLnJhbmdlICE9PSBcImZ1bmN0aW9uXCIpIGludGVydmFsID0gdGlja0ludGVydmFsKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICAgIHJldHVybiBpbnRlcnZhbCA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSkgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHRpY2tzLCB0aWNrSW50ZXJ2YWwsIHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmb3JtYXQpKTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpbWUoKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsLCB0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMjAwMCwgMCwgMSksIG5ldyBEYXRlKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iLAogICAgImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVCYW5kLFxuICBwb2ludCBhcyBzY2FsZVBvaW50XG59IGZyb20gXCIuL2JhbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUlkZW50aXR5XG59IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVMb2dcbn0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTeW1sb2dcbn0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVPcmRpbmFsLFxuICBpbXBsaWNpdCBhcyBzY2FsZUltcGxpY2l0XG59IGZyb20gXCIuL29yZGluYWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVBvdyxcbiAgc3FydCBhcyBzY2FsZVNxcnRcbn0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVSYWRpYWxcbn0gZnJvbSBcIi4vcmFkaWFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGlsZVxufSBmcm9tIFwiLi9xdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpemVcbn0gZnJvbSBcIi4vcXVhbnRpemUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRocmVzaG9sZFxufSBmcm9tIFwiLi90aHJlc2hvbGQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVRpbWVcbn0gZnJvbSBcIi4vdGltZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVXRjXG59IGZyb20gXCIuL3V0Y1RpbWUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWwsXG4gIHNlcXVlbnRpYWxMb2cgYXMgc2NhbGVTZXF1ZW50aWFsTG9nLFxuICBzZXF1ZW50aWFsUG93IGFzIHNjYWxlU2VxdWVudGlhbFBvdyxcbiAgc2VxdWVudGlhbFNxcnQgYXMgc2NhbGVTZXF1ZW50aWFsU3FydCxcbiAgc2VxdWVudGlhbFN5bWxvZyBhcyBzY2FsZVNlcXVlbnRpYWxTeW1sb2dcbn0gZnJvbSBcIi4vc2VxdWVudGlhbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbFF1YW50aWxlXG59IGZyb20gXCIuL3NlcXVlbnRpYWxRdWFudGlsZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlRGl2ZXJnaW5nLFxuICBkaXZlcmdpbmdMb2cgYXMgc2NhbGVEaXZlcmdpbmdMb2csXG4gIGRpdmVyZ2luZ1BvdyBhcyBzY2FsZURpdmVyZ2luZ1BvdyxcbiAgZGl2ZXJnaW5nU3FydCBhcyBzY2FsZURpdmVyZ2luZ1NxcnQsXG4gIGRpdmVyZ2luZ1N5bWxvZyBhcyBzY2FsZURpdmVyZ2luZ1N5bWxvZ1xufSBmcm9tIFwiLi9kaXZlcmdpbmcuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aWNrRm9ybWF0XG59IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gIHZhciBuID0gc3BlY2lmaWVyLmxlbmd0aCAvIDYgfCAwLCBjb2xvcnMgPSBuZXcgQXJyYXkobiksIGkgPSAwO1xuICB3aGlsZSAoaSA8IG4pIGNvbG9yc1tpXSA9IFwiI1wiICsgc3BlY2lmaWVyLnNsaWNlKGkgKiA2LCArK2kgKiA2KTtcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiIsCiAgICAiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYlwiKTtcbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZUNhdGVnb3J5MTB9IGZyb20gXCIuL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVBY2NlbnR9IGZyb20gXCIuL2NhdGVnb3JpY2FsL0FjY2VudC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZURhcmsyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9EYXJrMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZU9ic2VydmFibGUxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvb2JzZXJ2YWJsZTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFpcmVkfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYWlyZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYXN0ZWwxfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYXN0ZWwxLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFzdGVsMn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFzdGVsMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDF9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0M30gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0My5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVRhYmxlYXUxMH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvVGFibGVhdTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCckJHLCBzY2hlbWUgYXMgc2NoZW1lQnJCR30gZnJvbSBcIi4vZGl2ZXJnaW5nL0JyQkcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVBSR24sIHNjaGVtZSBhcyBzY2hlbWVQUkdufSBmcm9tIFwiLi9kaXZlcmdpbmcvUFJHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUGlZRywgc2NoZW1lIGFzIHNjaGVtZVBpWUd9IGZyb20gXCIuL2RpdmVyZ2luZy9QaVlHLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdU9yLCBzY2hlbWUgYXMgc2NoZW1lUHVPcn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1B1T3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkQnUsIHNjaGVtZSBhcyBzY2hlbWVSZEJ1fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRHeSwgc2NoZW1lIGFzIHNjaGVtZVJkR3l9IGZyb20gXCIuL2RpdmVyZ2luZy9SZEd5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFlsQnUsIHNjaGVtZSBhcyBzY2hlbWVSZFlsQnV9IGZyb20gXCIuL2RpdmVyZ2luZy9SZFlsQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkWWxHbiwgc2NoZW1lIGFzIHNjaGVtZVJkWWxHbn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkWWxHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU3BlY3RyYWwsIHNjaGVtZSBhcyBzY2hlbWVTcGVjdHJhbH0gZnJvbSBcIi4vZGl2ZXJnaW5nL1NwZWN0cmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCdUduLCBzY2hlbWUgYXMgc2NoZW1lQnVHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCdVB1LCBzY2hlbWUgYXMgc2NoZW1lQnVQdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9CdVB1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHbkJ1LCBzY2hlbWUgYXMgc2NoZW1lR25CdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9HbkJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPclJkLCBzY2hlbWUgYXMgc2NoZW1lT3JSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdUJ1R24sIHNjaGVtZSBhcyBzY2hlbWVQdUJ1R259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVCdUduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdUJ1LCBzY2hlbWUgYXMgc2NoZW1lUHVCdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdUJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdVJkLCBzY2hlbWUgYXMgc2NoZW1lUHVSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdVJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFB1LCBzY2hlbWUgYXMgc2NoZW1lUmRQdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9SZFB1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbEduQnUsIHNjaGVtZSBhcyBzY2hlbWVZbEduQnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbEduLCBzY2hlbWUgYXMgc2NoZW1lWWxHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbE9yQnIsIHNjaGVtZSBhcyBzY2hlbWVZbE9yQnJ9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxPckJyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVZbE9yUmQsIHNjaGVtZSBhcyBzY2hlbWVZbE9yUmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxPclJkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCbHVlcywgc2NoZW1lIGFzIHNjaGVtZUJsdWVzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9CbHVlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR3JlZW5zLCBzY2hlbWUgYXMgc2NoZW1lR3JlZW5zfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9HcmVlbnMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUdyZXlzLCBzY2hlbWUgYXMgc2NoZW1lR3JleXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0dyZXlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQdXJwbGVzLCBzY2hlbWUgYXMgc2NoZW1lUHVycGxlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvUHVycGxlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmVkcywgc2NoZW1lIGFzIHNjaGVtZVJlZHN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL1JlZHMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9yYW5nZXMsIHNjaGVtZSBhcyBzY2hlbWVPcmFuZ2VzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9PcmFuZ2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDaXZpZGlzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL2NpdmlkaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvY3ViZWhlbGl4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSYWluYm93LCB3YXJtIGFzIGludGVycG9sYXRlV2FybSwgY29vbCBhcyBpbnRlcnBvbGF0ZUNvb2x9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU2luZWJvd30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9zaW5lYm93LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVUdXJib30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS90dXJiby5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlVmlyaWRpcywgbWFnbWEgYXMgaW50ZXJwb2xhdGVNYWdtYSwgaW5mZXJubyBhcyBpbnRlcnBvbGF0ZUluZmVybm8sIHBsYXNtYSBhcyBpbnRlcnBvbGF0ZVBsYXNtYX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzXCI7XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwKICAgICJleHBvcnQgY29uc3QgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgY29uc3QgYXRhbjIgPSBNYXRoLmF0YW4yO1xuZXhwb3J0IGNvbnN0IGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IGNvbnN0IG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IGNvbnN0IG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IGNvbnN0IHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IGNvbnN0IHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gMWUtMTI7XG5leHBvcnQgY29uc3QgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IGNvbnN0IGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCBjb25zdCB0YXUgPSAyICogcGk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY29zKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gMCA6IHggPCAtMSA/IHBpIDogTWF0aC5hY29zKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNpbih4KSB7XG4gIHJldHVybiB4ID49IDEgPyBoYWxmUGkgOiB4IDw9IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtQYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhdGgoc2hhcGUpIHtcbiAgbGV0IGRpZ2l0cyA9IDM7XG5cbiAgc2hhcGUuZGlnaXRzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpZ2l0cztcbiAgICBpZiAoXyA9PSBudWxsKSB7XG4gICAgICBkaWdpdHMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkID0gTWF0aC5mbG9vcihfKTtcbiAgICAgIGlmICghKGQgPj0gMCkpIHRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtffWApO1xuICAgICAgZGlnaXRzID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9O1xuXG4gIHJldHVybiAoKSA9PiBuZXcgUGF0aChkaWdpdHMpO1xufVxuIiwKICAgICJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWJzLCBhY29zLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIG1heCwgbWluLCBwaSwgc2luLCBzcXJ0LCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcblxuZnVuY3Rpb24gYXJjSW5uZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5pbm5lclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjT3V0ZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5vdXRlclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjU3RhcnRBbmdsZShkKSB7XG4gIHJldHVybiBkLnN0YXJ0QW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY0VuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY1BhZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQgJiYgZC5wYWRBbmdsZTsgLy8gTm90ZTogb3B0aW9uYWwhXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHgxMCA9IHgxIC0geDAsIHkxMCA9IHkxIC0geTAsXG4gICAgICB4MzIgPSB4MyAtIHgyLCB5MzIgPSB5MyAtIHkyLFxuICAgICAgdCA9IHkzMiAqIHgxMCAtIHgzMiAqIHkxMDtcbiAgaWYgKHQgKiB0IDwgZXBzaWxvbikgcmV0dXJuO1xuICB0ID0gKHgzMiAqICh5MCAtIHkyKSAtIHkzMiAqICh4MCAtIHgyKSkgLyB0O1xuICByZXR1cm4gW3gwICsgdCAqIHgxMCwgeTAgKyB0ICogeTEwXTtcbn1cblxuLy8gQ29tcHV0ZSBwZXJwZW5kaWN1bGFyIG9mZnNldCBsaW5lIG9mIGxlbmd0aCByYy5cbi8vIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vQ2lyY2xlLUxpbmVJbnRlcnNlY3Rpb24uaHRtbFxuZnVuY3Rpb24gY29ybmVyVGFuZ2VudHMoeDAsIHkwLCB4MSwgeTEsIHIxLCByYywgY3cpIHtcbiAgdmFyIHgwMSA9IHgwIC0geDEsXG4gICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgbG8gPSAoY3cgPyByYyA6IC1yYykgLyBzcXJ0KHgwMSAqIHgwMSArIHkwMSAqIHkwMSksXG4gICAgICBveCA9IGxvICogeTAxLFxuICAgICAgb3kgPSAtbG8gKiB4MDEsXG4gICAgICB4MTEgPSB4MCArIG94LFxuICAgICAgeTExID0geTAgKyBveSxcbiAgICAgIHgxMCA9IHgxICsgb3gsXG4gICAgICB5MTAgPSB5MSArIG95LFxuICAgICAgeDAwID0gKHgxMSArIHgxMCkgLyAyLFxuICAgICAgeTAwID0gKHkxMSArIHkxMCkgLyAyLFxuICAgICAgZHggPSB4MTAgLSB4MTEsXG4gICAgICBkeSA9IHkxMCAtIHkxMSxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICByID0gcjEgLSByYyxcbiAgICAgIEQgPSB4MTEgKiB5MTAgLSB4MTAgKiB5MTEsXG4gICAgICBkID0gKGR5IDwgMCA/IC0xIDogMSkgKiBzcXJ0KG1heCgwLCByICogciAqIGQyIC0gRCAqIEQpKSxcbiAgICAgIGN4MCA9IChEICogZHkgLSBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTAgPSAoLUQgKiBkeCAtIGR5ICogZCkgLyBkMixcbiAgICAgIGN4MSA9IChEICogZHkgKyBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTEgPSAoLUQgKiBkeCArIGR5ICogZCkgLyBkMixcbiAgICAgIGR4MCA9IGN4MCAtIHgwMCxcbiAgICAgIGR5MCA9IGN5MCAtIHkwMCxcbiAgICAgIGR4MSA9IGN4MSAtIHgwMCxcbiAgICAgIGR5MSA9IGN5MSAtIHkwMDtcblxuICAvLyBQaWNrIHRoZSBjbG9zZXIgb2YgdGhlIHR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAvLyBUT0RPIElzIHRoZXJlIGEgZmFzdGVyIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggaW50ZXJzZWN0aW9uIHRvIHVzZT9cbiAgaWYgKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSkgY3gwID0gY3gxLCBjeTAgPSBjeTE7XG5cbiAgcmV0dXJuIHtcbiAgICBjeDogY3gwLFxuICAgIGN5OiBjeTAsXG4gICAgeDAxOiAtb3gsXG4gICAgeTAxOiAtb3ksXG4gICAgeDExOiBjeDAgKiAocjEgLyByIC0gMSksXG4gICAgeTExOiBjeTAgKiAocjEgLyByIC0gMSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpbm5lclJhZGl1cyA9IGFyY0lubmVyUmFkaXVzLFxuICAgICAgb3V0ZXJSYWRpdXMgPSBhcmNPdXRlclJhZGl1cyxcbiAgICAgIGNvcm5lclJhZGl1cyA9IGNvbnN0YW50KDApLFxuICAgICAgcGFkUmFkaXVzID0gbnVsbCxcbiAgICAgIHN0YXJ0QW5nbGUgPSBhcmNTdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUgPSBhcmNFbmRBbmdsZSxcbiAgICAgIHBhZEFuZ2xlID0gYXJjUGFkQW5nbGUsXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhdGggPSB3aXRoUGF0aChhcmMpO1xuXG4gIGZ1bmN0aW9uIGFyYygpIHtcbiAgICB2YXIgYnVmZmVyLFxuICAgICAgICByLFxuICAgICAgICByMCA9ICtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICByMSA9ICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgYTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gaGFsZlBpLFxuICAgICAgICBkYSA9IGFicyhhMSAtIGEwKSxcbiAgICAgICAgY3cgPSBhMSA+IGEwO1xuXG4gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gYnVmZmVyID0gcGF0aCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG91dGVyIHJhZGl1cyBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gdGhlIGlubmVyIHJhZGl1cy5cbiAgICBpZiAocjEgPCByMCkgciA9IHIxLCByMSA9IHIwLCByMCA9IHI7XG5cbiAgICAvLyBJcyBpdCBhIHBvaW50P1xuICAgIGlmICghKHIxID4gZXBzaWxvbikpIGNvbnRleHQubW92ZVRvKDAsIDApO1xuXG4gICAgLy8gT3IgaXMgaXQgYSBjaXJjbGUgb3IgYW5udWx1cz9cbiAgICBlbHNlIGlmIChkYSA+IHRhdSAtIGVwc2lsb24pIHtcbiAgICAgIGNvbnRleHQubW92ZVRvKHIxICogY29zKGEwKSwgcjEgKiBzaW4oYTApKTtcbiAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMCwgYTEsICFjdyk7XG4gICAgICBpZiAocjAgPiBlcHNpbG9uKSB7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKHIwICogY29zKGExKSwgcjAgKiBzaW4oYTEpKTtcbiAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExLCBhMCwgY3cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY3VsYXIgb3IgYW5udWxhciBzZWN0b3I/XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYTAxID0gYTAsXG4gICAgICAgICAgYTExID0gYTEsXG4gICAgICAgICAgYTAwID0gYTAsXG4gICAgICAgICAgYTEwID0gYTEsXG4gICAgICAgICAgZGEwID0gZGEsXG4gICAgICAgICAgZGExID0gZGEsXG4gICAgICAgICAgYXAgPSBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC8gMixcbiAgICAgICAgICBycCA9IChhcCA+IGVwc2lsb24pICYmIChwYWRSYWRpdXMgPyArcGFkUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzcXJ0KHIwICogcjAgKyByMSAqIHIxKSksXG4gICAgICAgICAgcmMgPSBtaW4oYWJzKHIxIC0gcjApIC8gMiwgK2Nvcm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgICByYzAgPSByYyxcbiAgICAgICAgICByYzEgPSByYyxcbiAgICAgICAgICB0MCxcbiAgICAgICAgICB0MTtcblxuICAgICAgLy8gQXBwbHkgcGFkZGluZz8gTm90ZSB0aGF0IHNpbmNlIHIxIOKJpSByMCwgZGExIOKJpSBkYTAuXG4gICAgICBpZiAocnAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHZhciBwMCA9IGFzaW4ocnAgLyByMCAqIHNpbihhcCkpLFxuICAgICAgICAgICAgcDEgPSBhc2luKHJwIC8gcjEgKiBzaW4oYXApKTtcbiAgICAgICAgaWYgKChkYTAgLT0gcDAgKiAyKSA+IGVwc2lsb24pIHAwICo9IChjdyA/IDEgOiAtMSksIGEwMCArPSBwMCwgYTEwIC09IHAwO1xuICAgICAgICBlbHNlIGRhMCA9IDAsIGEwMCA9IGExMCA9IChhMCArIGExKSAvIDI7XG4gICAgICAgIGlmICgoZGExIC09IHAxICogMikgPiBlcHNpbG9uKSBwMSAqPSAoY3cgPyAxIDogLTEpLCBhMDEgKz0gcDEsIGExMSAtPSBwMTtcbiAgICAgICAgZWxzZSBkYTEgPSAwLCBhMDEgPSBhMTEgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgeDAxID0gcjEgKiBjb3MoYTAxKSxcbiAgICAgICAgICB5MDEgPSByMSAqIHNpbihhMDEpLFxuICAgICAgICAgIHgxMCA9IHIwICogY29zKGExMCksXG4gICAgICAgICAgeTEwID0gcjAgKiBzaW4oYTEwKTtcblxuICAgICAgLy8gQXBwbHkgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgaWYgKHJjID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgeDExID0gcjEgKiBjb3MoYTExKSxcbiAgICAgICAgICAgIHkxMSA9IHIxICogc2luKGExMSksXG4gICAgICAgICAgICB4MDAgPSByMCAqIGNvcyhhMDApLFxuICAgICAgICAgICAgeTAwID0gcjAgKiBzaW4oYTAwKSxcbiAgICAgICAgICAgIG9jO1xuXG4gICAgICAgIC8vIFJlc3RyaWN0IHRoZSBjb3JuZXIgcmFkaXVzIGFjY29yZGluZyB0byB0aGUgc2VjdG9yIGFuZ2xlLiBJZiB0aGlzXG4gICAgICAgIC8vIGludGVyc2VjdGlvbiBmYWlscywgaXTigJlzIHByb2JhYmx5IGJlY2F1c2UgdGhlIGFyYyBpcyB0b28gc21hbGwsIHNvXG4gICAgICAgIC8vIGRpc2FibGUgdGhlIGNvcm5lciByYWRpdXMgZW50aXJlbHkuXG4gICAgICAgIGlmIChkYSA8IHBpKSB7XG4gICAgICAgICAgaWYgKG9jID0gaW50ZXJzZWN0KHgwMSwgeTAxLCB4MDAsIHkwMCwgeDExLCB5MTEsIHgxMCwgeTEwKSkge1xuICAgICAgICAgICAgdmFyIGF4ID0geDAxIC0gb2NbMF0sXG4gICAgICAgICAgICAgICAgYXkgPSB5MDEgLSBvY1sxXSxcbiAgICAgICAgICAgICAgICBieCA9IHgxMSAtIG9jWzBdLFxuICAgICAgICAgICAgICAgIGJ5ID0geTExIC0gb2NbMV0sXG4gICAgICAgICAgICAgICAga2MgPSAxIC8gc2luKGFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChzcXJ0KGF4ICogYXggKyBheSAqIGF5KSAqIHNxcnQoYnggKiBieCArIGJ5ICogYnkpKSkgLyAyKSxcbiAgICAgICAgICAgICAgICBsYyA9IHNxcnQob2NbMF0gKiBvY1swXSArIG9jWzFdICogb2NbMV0pO1xuICAgICAgICAgICAgcmMwID0gbWluKHJjLCAocjAgLSBsYykgLyAoa2MgLSAxKSk7XG4gICAgICAgICAgICByYzEgPSBtaW4ocmMsIChyMSAtIGxjKSAvIChrYyArIDEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmMwID0gcmMxID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSXMgdGhlIHNlY3RvciBjb2xsYXBzZWQgdG8gYSBsaW5lP1xuICAgICAgaWYgKCEoZGExID4gZXBzaWxvbikpIGNvbnRleHQubW92ZVRvKHgwMSwgeTAxKTtcblxuICAgICAgLy8gRG9lcyB0aGUgc2VjdG9y4oCZcyBvdXRlciByaW5nIGhhdmUgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgZWxzZSBpZiAocmMxID4gZXBzaWxvbikge1xuICAgICAgICB0MCA9IGNvcm5lclRhbmdlbnRzKHgwMCwgeTAwLCB4MDEsIHkwMSwgcjEsIHJjMSwgY3cpO1xuICAgICAgICB0MSA9IGNvcm5lclRhbmdlbnRzKHgxMSwgeTExLCB4MTAsIHkxMCwgcjEsIHJjMSwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubW92ZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzEgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMSwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjEsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmModDEuY3gsIHQxLmN5LCByYzEsIGF0YW4yKHQxLnkxMSwgdDEueDExKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIGlzIHRoZSBvdXRlciByaW5nIGp1c3QgYSBjaXJjdWxhciBhcmM/XG4gICAgICBlbHNlIGNvbnRleHQubW92ZVRvKHgwMSwgeTAxKSwgY29udGV4dC5hcmMoMCwgMCwgcjEsIGEwMSwgYTExLCAhY3cpO1xuXG4gICAgICAvLyBJcyB0aGVyZSBubyBpbm5lciByaW5nLCBhbmQgaXTigJlzIGEgY2lyY3VsYXIgc2VjdG9yP1xuICAgICAgLy8gT3IgcGVyaGFwcyBpdOKAmXMgYW4gYW5udWxhciBzZWN0b3IgY29sbGFwc2VkIGR1ZSB0byBwYWRkaW5nP1xuICAgICAgaWYgKCEocjAgPiBlcHNpbG9uKSB8fCAhKGRhMCA+IGVwc2lsb24pKSBjb250ZXh0LmxpbmVUbyh4MTAsIHkxMCk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgaW5uZXIgcmluZyAob3IgcG9pbnQpIGhhdmUgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgZWxzZSBpZiAocmMwID4gZXBzaWxvbikge1xuICAgICAgICB0MCA9IGNvcm5lclRhbmdlbnRzKHgxMCwgeTEwLCB4MTEsIHkxMSwgcjAsIC1yYzAsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MDEsIHkwMSwgeDAwLCB5MDAsIHIwLCAtcmMwLCBjdyk7XG5cbiAgICAgICAgY29udGV4dC5saW5lVG8odDAuY3ggKyB0MC54MDEsIHQwLmN5ICsgdDAueTAxKTtcblxuICAgICAgICAvLyBIYXZlIHRoZSBjb3JuZXJzIG1lcmdlZD9cbiAgICAgICAgaWYgKHJjMCA8IHJjKSBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkcmF3IHRoZSB0d28gY29ybmVycyBhbmQgdGhlIHJpbmcuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMwLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQwLnkxMSwgdDAueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMCwgYXRhbjIodDAuY3kgKyB0MC55MTEsIHQwLmN4ICsgdDAueDExKSwgYXRhbjIodDEuY3kgKyB0MS55MTEsIHQxLmN4ICsgdDEueDExKSwgY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMwLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgaW5uZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0LmFyYygwLCAwLCByMCwgYTEwLCBhMDAsIGN3KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBhcmMuY2VudHJvaWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9ICgraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSArICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSAvIDIsXG4gICAgICAgIGEgPSAoK3N0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSArICtlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSAvIDIgLSBwaSAvIDI7XG4gICAgcmV0dXJuIFtjb3MoYSkgKiByLCBzaW4oYSkgKiByXTtcbiAgfTtcblxuICBhcmMuaW5uZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW5uZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGlubmVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5vdXRlclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChvdXRlclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogb3V0ZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLmNvcm5lclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb3JuZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGNvcm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMucGFkUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZFJhZGl1cyA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHBhZFJhZGl1cztcbiAgfTtcblxuICBhcmMuc3RhcnRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdGFydEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBzdGFydEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5lbmRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlbmRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogZW5kQW5nbGU7XG4gIH07XG5cbiAgYXJjLnBhZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRBbmdsZTtcbiAgfTtcblxuICBhcmMuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgYXJjKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyYztcbn1cbiIsCiAgICAiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsCiAgICAiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsCiAgICAiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKGxpbmUpO1xuXG4gIHggPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6ICh4ID09PSB1bmRlZmluZWQpID8gcG9pbnRYIDogY29uc3RhbnQoeCk7XG4gIHkgPSB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geSA6ICh5ID09PSB1bmRlZmluZWQpID8gcG9pbnRZIDogY29uc3RhbnQoeSk7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYiA8IGEgPyAtMSA6IGIgPiBhID8gMSA6IGIgPj0gYSA/IDAgOiBOYU47XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLAogICAgImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGluZGV4ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhcmNzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhMCA9ICtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGRhID0gTWF0aC5taW4odGF1LCBNYXRoLm1heCgtdGF1LCBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gYTApKSxcbiAgICAgICAgYTEsXG4gICAgICAgIHAgPSBNYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgcGEgPSBwICogKGRhIDwgMCA/IC0xIDogMSksXG4gICAgICAgIHY7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHYgPSBhcmNzW2luZGV4W2ldID0gaV0gPSArdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSkpID4gMCkge1xuICAgICAgICBzdW0gKz0gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbGx5IHNvcnQgdGhlIGFyY3MgYnkgcHJldmlvdXNseS1jb21wdXRlZCB2YWx1ZXMgb3IgYnkgZGF0YS5cbiAgICBpZiAoc29ydFZhbHVlcyAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnRWYWx1ZXMoYXJjc1tpXSwgYXJjc1tqXSk7IH0pO1xuICAgIGVsc2UgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0KGRhdGFbaV0sIGRhdGFbal0pOyB9KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGFyY3MhIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSdzIG9yZGVyLlxuICAgIGZvciAoaSA9IDAsIGsgPSBzdW0gPyAoZGEgLSBuICogcGEpIC8gc3VtIDogMDsgaSA8IG47ICsraSwgYTAgPSBhMSkge1xuICAgICAgaiA9IGluZGV4W2ldLCB2ID0gYXJjc1tqXSwgYTEgPSBhMCArICh2ID4gMCA/IHYgKiBrIDogMCkgKyBwYSwgYXJjc1tqXSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVtqXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICBwYWRBbmdsZTogcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfVxuXG4gIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogdmFsdWU7XG4gIH07XG5cbiAgcGllLnNvcnRWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydFZhbHVlcyA9IF8sIHNvcnQgPSBudWxsLCBwaWUpIDogc29ydFZhbHVlcztcbiAgfTtcblxuICBwaWUuc29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0ID0gXywgc29ydFZhbHVlcyA9IG51bGwsIHBpZSkgOiBzb3J0O1xuICB9O1xuXG4gIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBwaWUucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIHJldHVybiBwaWU7XG59XG4iLAogICAgImltcG9ydCBwb2ludFJhZGlhbCBmcm9tIFwiLi4vcG9pbnRSYWRpYWwuanNcIjtcblxuY2xhc3MgQnVtcCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHgpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLl94ID0geDtcbiAgfVxuICBhcmVhU3RhcnQoKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH1cbiAgYXJlYUVuZCgpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9XG4gIGxpbmVTdGFydCgpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH1cbiAgbGluZUVuZCgpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9XG4gIHBvaW50KHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSAxO1xuICAgICAgICBpZiAodGhpcy5fbGluZSkgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgICAgIGVsc2UgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3gpIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCA9ICh0aGlzLl94MCArIHgpIC8gMiwgdGhpcy5feTAsIHRoaXMuX3gwLCB5LCB4LCB5KTtcbiAgICAgICAgZWxzZSB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsIHRoaXMuX3kwID0gKHRoaXMuX3kwICsgeSkgLyAyLCB4LCB0aGlzLl95MCwgeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl94MCA9IHgsIHRoaXMuX3kwID0geTtcbiAgfVxufVxuXG5jbGFzcyBCdW1wUmFkaWFsIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB9XG4gIGxpbmVTdGFydCgpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH1cbiAgbGluZUVuZCgpIHt9XG4gIHBvaW50KHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQgPT09IDApIHtcbiAgICAgIHRoaXMuX3BvaW50ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcDAgPSBwb2ludFJhZGlhbCh0aGlzLl94MCwgdGhpcy5feTApO1xuICAgICAgY29uc3QgcDEgPSBwb2ludFJhZGlhbCh0aGlzLl94MCwgdGhpcy5feTAgPSAodGhpcy5feTAgKyB5KSAvIDIpO1xuICAgICAgY29uc3QgcDIgPSBwb2ludFJhZGlhbCh4LCB0aGlzLl95MCk7XG4gICAgICBjb25zdCBwMyA9IHBvaW50UmFkaWFsKHgsIHkpO1xuICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oLi4ucDApO1xuICAgICAgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKC4uLnAxLCAuLi5wMiwgLi4ucDMpO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHgsIHRoaXMuX3kwID0geTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVtcFgoY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJ1bXAoY29udGV4dCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wWShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQnVtcChjb250ZXh0LCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidW1wUmFkaWFsKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCdW1wUmFkaWFsKGNvbnRleHQpO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHt9XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBwb2ludCh0aGF0LCB4LCB5KSB7XG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhcbiAgICAoMiAqIHRoYXQuX3gwICsgdGhhdC5feDEpIC8gMyxcbiAgICAoMiAqIHRoYXQuX3kwICsgdGhhdC5feTEpIC8gMyxcbiAgICAodGhhdC5feDAgKyAyICogdGhhdC5feDEpIC8gMyxcbiAgICAodGhhdC5feTAgKyAyICogdGhhdC5feTEpIC8gMyxcbiAgICAodGhhdC5feDAgKyA0ICogdGhhdC5feDEgKyB4KSAvIDYsXG4gICAgKHRoYXQuX3kwICsgNCAqIHRoYXQuX3kxICsgeSkgLyA2XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCYXNpcyhjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpcy5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5feDEsIHRoaXMuX3kxKTsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2NvbnRleHQubGluZVRvKCg1ICogdGhpcy5feDAgKyB0aGlzLl94MSkgLyA2LCAoNSAqIHRoaXMuX3kwICsgdGhpcy5feTEpIC8gNik7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzKGNvbnRleHQpO1xufVxuIiwKICAgICJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcC5qc1wiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQmFzaXNDbG9zZWQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuQmFzaXNDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gdGhpcy5feTMgPSB0aGlzLl95NCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIgKyAyICogdGhpcy5feDMpIC8gMywgKHRoaXMuX3kyICsgMiAqIHRoaXMuX3kzKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMgKyAyICogdGhpcy5feDIpIC8gMywgKHRoaXMuX3kzICsgMiAqIHRoaXMuX3kyKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gyLCB0aGlzLl95Mik7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gyID0geCwgdGhpcy5feTIgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHk7IHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2KTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCYXNpc0Nsb3NlZChjb250ZXh0KTtcbn1cbiIsCiAgICAiaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQmFzaXNPcGVuKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHZhciB4MCA9ICh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgeTAgPSAodGhpcy5feTAgKyA0ICogdGhpcy5feTEgKyB5KSAvIDY7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4MCwgeTApIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeDAsIHkwKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXNPcGVuKGNvbnRleHQpO1xufVxuIiwKICAgICJpbXBvcnQge0Jhc2lzfSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuXG5mdW5jdGlvbiBCdW5kbGUoY29udGV4dCwgYmV0YSkge1xuICB0aGlzLl9iYXNpcyA9IG5ldyBCYXNpcyhjb250ZXh0KTtcbiAgdGhpcy5fYmV0YSA9IGJldGE7XG59XG5cbkJ1bmRsZS5wcm90b3R5cGUgPSB7XG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IFtdO1xuICAgIHRoaXMuX3kgPSBbXTtcbiAgICB0aGlzLl9iYXNpcy5saW5lU3RhcnQoKTtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSB0aGlzLl94LFxuICAgICAgICB5ID0gdGhpcy5feSxcbiAgICAgICAgaiA9IHgubGVuZ3RoIC0gMTtcblxuICAgIGlmIChqID4gMCkge1xuICAgICAgdmFyIHgwID0geFswXSxcbiAgICAgICAgICB5MCA9IHlbMF0sXG4gICAgICAgICAgZHggPSB4W2pdIC0geDAsXG4gICAgICAgICAgZHkgPSB5W2pdIC0geTAsXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIHQ7XG5cbiAgICAgIHdoaWxlICgrK2kgPD0gaikge1xuICAgICAgICB0ID0gaSAvIGo7XG4gICAgICAgIHRoaXMuX2Jhc2lzLnBvaW50KFxuICAgICAgICAgIHRoaXMuX2JldGEgKiB4W2ldICsgKDEgLSB0aGlzLl9iZXRhKSAqICh4MCArIHQgKiBkeCksXG4gICAgICAgICAgdGhpcy5fYmV0YSAqIHlbaV0gKyAoMSAtIHRoaXMuX2JldGEpICogKHkwICsgdCAqIGR5KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3ggPSB0aGlzLl95ID0gbnVsbDtcbiAgICB0aGlzLl9iYXNpcy5saW5lRW5kKCk7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5feC5wdXNoKCt4KTtcbiAgICB0aGlzLl95LnB1c2goK3kpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGJldGEpIHtcblxuICBmdW5jdGlvbiBidW5kbGUoY29udGV4dCkge1xuICAgIHJldHVybiBiZXRhID09PSAxID8gbmV3IEJhc2lzKGNvbnRleHQpIDogbmV3IEJ1bmRsZShjb250ZXh0LCBiZXRhKTtcbiAgfVxuXG4gIGJ1bmRsZS5iZXRhID0gZnVuY3Rpb24oYmV0YSkge1xuICAgIHJldHVybiBjdXN0b20oK2JldGEpO1xuICB9O1xuXG4gIHJldHVybiBidW5kbGU7XG59KSgwLjg1KTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgIHRoYXQuX3gxICsgdGhhdC5fayAqICh0aGF0Ll94MiAtIHRoYXQuX3gwKSxcbiAgICB0aGF0Ll95MSArIHRoYXQuX2sgKiAodGhhdC5feTIgLSB0aGF0Ll95MCksXG4gICAgdGhhdC5feDIgKyB0aGF0Ll9rICogKHRoYXQuX3gxIC0geCksXG4gICAgdGhhdC5feTIgKyB0aGF0Ll9rICogKHRoYXQuX3kxIC0geSksXG4gICAgdGhhdC5feDIsXG4gICAgdGhhdC5feTJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MSA9IHgsIHRoaXMuX3kxID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbChjb250ZXh0LCB0ZW5zaW9uKTtcbiAgfVxuXG4gIGNhcmRpbmFsLnRlbnNpb24gPSBmdW5jdGlvbih0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrdGVuc2lvbik7XG4gIH07XG5cbiAgcmV0dXJuIGNhcmRpbmFsO1xufSkoMCk7XG4iLAogICAgImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbENsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID0gdGhpcy5feDUgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IHRoaXMuX3kzID0gdGhpcy5feTQgPSB0aGlzLl95NSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NSwgdGhpcy5feTUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIiwKICAgICJpbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxPcGVuKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWxPcGVuLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbE9wZW4oY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIiwKICAgICJpbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge0NhcmRpbmFsfSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB2YXIgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICB4MiA9IHRoYXQuX3gyLFxuICAgICAgeTIgPSB0aGF0Ll95MjtcblxuICBpZiAodGhhdC5fbDAxX2EgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGEgPSAyICogdGhhdC5fbDAxXzJhICsgMyAqIHRoYXQuX2wwMV9hICogdGhhdC5fbDEyX2EgKyB0aGF0Ll9sMTJfMmEsXG4gICAgICAgIG4gPSAzICogdGhhdC5fbDAxX2EgKiAodGhhdC5fbDAxX2EgKyB0aGF0Ll9sMTJfYSk7XG4gICAgeDEgPSAoeDEgKiBhIC0gdGhhdC5feDAgKiB0aGF0Ll9sMTJfMmEgKyB0aGF0Ll94MiAqIHRoYXQuX2wwMV8yYSkgLyBuO1xuICAgIHkxID0gKHkxICogYSAtIHRoYXQuX3kwICogdGhhdC5fbDEyXzJhICsgdGhhdC5feTIgKiB0aGF0Ll9sMDFfMmEpIC8gbjtcbiAgfVxuXG4gIGlmICh0aGF0Ll9sMjNfYSA+IGVwc2lsb24pIHtcbiAgICB2YXIgYiA9IDIgKiB0aGF0Ll9sMjNfMmEgKyAzICogdGhhdC5fbDIzX2EgKiB0aGF0Ll9sMTJfYSArIHRoYXQuX2wxMl8yYSxcbiAgICAgICAgbSA9IDMgKiB0aGF0Ll9sMjNfYSAqICh0aGF0Ll9sMjNfYSArIHRoYXQuX2wxMl9hKTtcbiAgICB4MiA9ICh4MiAqIGIgKyB0aGF0Ll94MSAqIHRoYXQuX2wyM18yYSAtIHggKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgICB5MiA9ICh5MiAqIGIgKyB0aGF0Ll95MSAqIHRoYXQuX2wyM18yYSAtIHkgKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgfVxuXG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgdGhhdC5feDIsIHRoYXQuX3kyKTtcbn1cblxuZnVuY3Rpb24gQ2F0bXVsbFJvbShjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbS5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5wb2ludCh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb20oY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsCiAgICAiaW1wb3J0IHtDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY2FyZGluYWxDbG9zZWQuanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXRtdWxsUm9tLmpzXCI7XG5cbmZ1bmN0aW9uIENhdG11bGxSb21DbG9zZWQoY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21DbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g1LCB0aGlzLl95NSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbUNsb3NlZChjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwKICAgICJpbXBvcnQge0NhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY2FyZGluYWxPcGVuLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXRtdWxsUm9tLmpzXCI7XG5cbmZ1bmN0aW9uIENhdG11bGxSb21PcGVuKGNvbnRleHQsIGFscGhhKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9hbHBoYSA9IGFscGhhO1xufVxuXG5DYXRtdWxsUm9tT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDMpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsIHRoaXMuX3kyKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EsIHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2E7XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhLCB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmE7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShhbHBoYSkge1xuXG4gIGZ1bmN0aW9uIGNhdG11bGxSb20oY29udGV4dCkge1xuICAgIHJldHVybiBhbHBoYSA/IG5ldyBDYXRtdWxsUm9tT3Blbihjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWxPcGVuKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsCiAgICAiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcblxuZnVuY3Rpb24gTGluZWFyQ2xvc2VkKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhckNsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9wb2ludCkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQpIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGVsc2UgdGhpcy5fcG9pbnQgPSAxLCB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhckNsb3NlZChjb250ZXh0KTtcbn1cbiIsCiAgICAiZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiB4IDwgMCA/IC0xIDogMTtcbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBzbG9wZXMgb2YgdGhlIHRhbmdlbnRzIChIZXJtaXRlLXR5cGUgaW50ZXJwb2xhdGlvbikgYmFzZWQgb25cbi8vIHRoZSBmb2xsb3dpbmcgcGFwZXI6IFN0ZWZmZW4sIE0uIDE5OTAuIEEgU2ltcGxlIE1ldGhvZCBmb3IgTW9ub3RvbmljXG4vLyBJbnRlcnBvbGF0aW9uIGluIE9uZSBEaW1lbnNpb24uIEFzdHJvbm9teSBhbmQgQXN0cm9waHlzaWNzLCBWb2wuIDIzOSwgTk8uXG4vLyBOT1YoSUkpLCBQLiA0NDMsIDE5OTAuXG5mdW5jdGlvbiBzbG9wZTModGhhdCwgeDIsIHkyKSB7XG4gIHZhciBoMCA9IHRoYXQuX3gxIC0gdGhhdC5feDAsXG4gICAgICBoMSA9IHgyIC0gdGhhdC5feDEsXG4gICAgICBzMCA9ICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIChoMCB8fCBoMSA8IDAgJiYgLTApLFxuICAgICAgczEgPSAoeTIgLSB0aGF0Ll95MSkgLyAoaDEgfHwgaDAgPCAwICYmIC0wKSxcbiAgICAgIHAgPSAoczAgKiBoMSArIHMxICogaDApIC8gKGgwICsgaDEpO1xuICByZXR1cm4gKHNpZ24oczApICsgc2lnbihzMSkpICogTWF0aC5taW4oTWF0aC5hYnMoczApLCBNYXRoLmFicyhzMSksIDAuNSAqIE1hdGguYWJzKHApKSB8fCAwO1xufVxuXG4vLyBDYWxjdWxhdGUgYSBvbmUtc2lkZWQgc2xvcGUuXG5mdW5jdGlvbiBzbG9wZTIodGhhdCwgdCkge1xuICB2YXIgaCA9IHRoYXQuX3gxIC0gdGhhdC5feDA7XG4gIHJldHVybiBoID8gKDMgKiAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyBoIC0gdCkgLyAyIDogdDtcbn1cblxuLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1YmljX0hlcm1pdGVfc3BsaW5lI1JlcHJlc2VudGF0aW9uc1xuLy8gXCJ5b3UgY2FuIGV4cHJlc3MgY3ViaWMgSGVybWl0ZSBpbnRlcnBvbGF0aW9uIGluIHRlcm1zIG9mIGN1YmljIELDqXppZXIgY3VydmVzXG4vLyB3aXRoIHJlc3BlY3QgdG8gdGhlIGZvdXIgdmFsdWVzIHAwLCBwMCArIG0wIC8gMywgcDEgLSBtMSAvIDMsIHAxXCIuXG5mdW5jdGlvbiBwb2ludCh0aGF0LCB0MCwgdDEpIHtcbiAgdmFyIHgwID0gdGhhdC5feDAsXG4gICAgICB5MCA9IHRoYXQuX3kwLFxuICAgICAgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICBkeCA9ICh4MSAtIHgwKSAvIDM7XG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MCArIGR4LCB5MCArIGR4ICogdDAsIHgxIC0gZHgsIHkxIC0gZHggKiB0MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbk1vbm90b25lWC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9XG4gICAgdGhpcy5fdDAgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl90MCwgc2xvcGUyKHRoaXMsIHRoaXMuX3QwKSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciB0MSA9IE5hTjtcblxuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIGlmICh4ID09PSB0aGlzLl94MSAmJiB5ID09PSB0aGlzLl95MSkgcmV0dXJuOyAvLyBJZ25vcmUgY29pbmNpZGVudCBwb2ludHMuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyBwb2ludCh0aGlzLCBzbG9wZTIodGhpcywgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpLCB0MSk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgdGhpcy5fdDAsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgICB0aGlzLl90MCA9IHQxO1xuICB9XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWShjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBuZXcgUmVmbGVjdENvbnRleHQoY29udGV4dCk7XG59XG5cbihNb25vdG9uZVkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShNb25vdG9uZVgucHJvdG90eXBlKSkucG9pbnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIE1vbm90b25lWC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLCB5LCB4KTtcbn07XG5cbmZ1bmN0aW9uIFJlZmxlY3RDb250ZXh0KGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblJlZmxlY3RDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubW92ZVRvKHksIHgpOyB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkgeyB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpOyB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5saW5lVG8oeSwgeCk7IH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7IHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh5MSwgeDEsIHkyLCB4MiwgeSwgeCk7IH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVgoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWChjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVZKGNvbnRleHQpO1xufVxuIiwKICAgICJmdW5jdGlvbiBOYXR1cmFsKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbk5hdHVyYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3ggPSBbXTtcbiAgICB0aGlzLl95ID0gW107XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gdGhpcy5feCxcbiAgICAgICAgeSA9IHRoaXMuX3ksXG4gICAgICAgIG4gPSB4Lmxlbmd0aDtcblxuICAgIGlmIChuKSB7XG4gICAgICB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeFswXSwgeVswXSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4WzBdLCB5WzBdKTtcbiAgICAgIGlmIChuID09PSAyKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHhbMV0sIHlbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHB4ID0gY29udHJvbFBvaW50cyh4KSxcbiAgICAgICAgICAgIHB5ID0gY29udHJvbFBvaW50cyh5KTtcbiAgICAgICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDE7IGkxIDwgbjsgKytpMCwgKytpMSkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhweFswXVtpMF0sIHB5WzBdW2kwXSwgcHhbMV1baTBdLCBweVsxXVtpMF0sIHhbaTFdLCB5W2kxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiBuID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBudWxsO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuX3gucHVzaCgreCk7XG4gICAgdGhpcy5feS5wdXNoKCt5KTtcbiAgfVxufTtcblxuLy8gU2VlIGh0dHBzOi8vd3d3LnBhcnRpY2xlaW5jZWxsLmNvbS8yMDEyL2Jlemllci1zcGxpbmVzLyBmb3IgZGVyaXZhdGlvbi5cbmZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoeCkge1xuICB2YXIgaSxcbiAgICAgIG4gPSB4Lmxlbmd0aCAtIDEsXG4gICAgICBtLFxuICAgICAgYSA9IG5ldyBBcnJheShuKSxcbiAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICByID0gbmV3IEFycmF5KG4pO1xuICBhWzBdID0gMCwgYlswXSA9IDIsIHJbMF0gPSB4WzBdICsgMiAqIHhbMV07XG4gIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgKytpKSBhW2ldID0gMSwgYltpXSA9IDQsIHJbaV0gPSA0ICogeFtpXSArIDIgKiB4W2kgKyAxXTtcbiAgYVtuIC0gMV0gPSAyLCBiW24gLSAxXSA9IDcsIHJbbiAtIDFdID0gOCAqIHhbbiAtIDFdICsgeFtuXTtcbiAgZm9yIChpID0gMTsgaSA8IG47ICsraSkgbSA9IGFbaV0gLyBiW2kgLSAxXSwgYltpXSAtPSBtLCByW2ldIC09IG0gKiByW2kgLSAxXTtcbiAgYVtuIC0gMV0gPSByW24gLSAxXSAvIGJbbiAtIDFdO1xuICBmb3IgKGkgPSBuIC0gMjsgaSA+PSAwOyAtLWkpIGFbaV0gPSAocltpXSAtIGFbaSArIDFdKSAvIGJbaV07XG4gIGJbbiAtIDFdID0gKHhbbl0gKyBhW24gLSAxXSkgLyAyO1xuICBmb3IgKGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgYltpXSA9IDIgKiB4W2kgKyAxXSAtIGFbaSArIDFdO1xuICByZXR1cm4gW2EsIGJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTmF0dXJhbChjb250ZXh0KTtcbn1cbiIsCiAgICAiZnVuY3Rpb24gU3RlcChjb250ZXh0LCB0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl90ID0gdDtcbn1cblxuU3RlcC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoMCA8IHRoaXMuX3QgJiYgdGhpcy5fdCA8IDEgJiYgdGhpcy5fcG9pbnQgPT09IDIpIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHRoaXMuX3kpO1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBpZiAodGhpcy5fbGluZSA+PSAwKSB0aGlzLl90ID0gMSAtIHRoaXMuX3QsIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIGZhbGxzIHRocm91Z2hcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3QgPD0gMCkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHkpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMuX3ggKiAoMSAtIHRoaXMuX3QpICsgeCAqIHRoaXMuX3Q7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeDEsIHRoaXMuX3kpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgxLCB5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5feCA9IHgsIHRoaXMuX3kgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwLjUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEJlZm9yZShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBBZnRlcihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAxKTtcbn1cbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIGFyY30gZnJvbSBcIi4vYXJjLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxpbmV9IGZyb20gXCIuL2xpbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwaWV9IGZyb20gXCIuL3BpZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFyZWFSYWRpYWwsIGRlZmF1bHQgYXMgcmFkaWFsQXJlYX0gZnJvbSBcIi4vYXJlYVJhZGlhbC5qc1wiOyAvLyBOb3RlOiByYWRpYWxBcmVhIGlzIGRlcHJlY2F0ZWQhXG5leHBvcnQge2RlZmF1bHQgYXMgbGluZVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxMaW5lfSBmcm9tIFwiLi9saW5lUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbExpbmUgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2ludFJhZGlhbH0gZnJvbSBcIi4vcG9pbnRSYWRpYWwuanNcIjtcbmV4cG9ydCB7bGluaywgbGlua0hvcml6b250YWwsIGxpbmtWZXJ0aWNhbCwgbGlua1JhZGlhbH0gZnJvbSBcIi4vbGluay5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sLCBzeW1ib2xzU3Ryb2tlLCBzeW1ib2xzRmlsbCwgc3ltYm9sc0ZpbGwgYXMgc3ltYm9sc30gZnJvbSBcIi4vc3ltYm9sLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sQXN0ZXJpc2t9IGZyb20gXCIuL3N5bWJvbC9hc3Rlcmlzay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbERpYW1vbmQyfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xQbHVzfSBmcm9tIFwiLi9zeW1ib2wvcGx1cy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZTJ9IGZyb20gXCIuL3N5bWJvbC9zcXVhcmUyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sU3Rhcn0gZnJvbSBcIi4vc3ltYm9sL3N0YXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xUcmlhbmdsZX0gZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGUyfSBmcm9tIFwiLi9zeW1ib2wvdHJpYW5nbGUyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sV3llfSBmcm9tIFwiLi9zeW1ib2wvd3llLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVGltZXMsIGRlZmF1bHQgYXMgc3ltYm9sWH0gZnJvbSBcIi4vc3ltYm9sL3RpbWVzLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXNPcGVufSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc09wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpcy5qc1wiO1xuZXhwb3J0IHtidW1wWCBhcyBjdXJ2ZUJ1bXBYLCBidW1wWSBhcyBjdXJ2ZUJ1bXBZfSBmcm9tIFwiLi9jdXJ2ZS9idW1wLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCdW5kbGV9IGZyb20gXCIuL2N1cnZlL2J1bmRsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWxDbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbE9wZW59IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWx9IGZyb20gXCIuL2N1cnZlL2NhcmRpbmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tT3Blbn0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbU9wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb219IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb20uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhckNsb3NlZH0gZnJvbSBcIi4vY3VydmUvbGluZWFyQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVMaW5lYXJ9IGZyb20gXCIuL2N1cnZlL2xpbmVhci5qc1wiO1xuZXhwb3J0IHttb25vdG9uZVggYXMgY3VydmVNb25vdG9uZVgsIG1vbm90b25lWSBhcyBjdXJ2ZU1vbm90b25lWX0gZnJvbSBcIi4vY3VydmUvbW9ub3RvbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZU5hdHVyYWx9IGZyb20gXCIuL2N1cnZlL25hdHVyYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZVN0ZXAsIHN0ZXBBZnRlciBhcyBjdXJ2ZVN0ZXBBZnRlciwgc3RlcEJlZm9yZSBhcyBjdXJ2ZVN0ZXBCZWZvcmV9IGZyb20gXCIuL2N1cnZlL3N0ZXAuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrfSBmcm9tIFwiLi9zdGFjay5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0RXhwYW5kfSBmcm9tIFwiLi9vZmZzZXQvZXhwYW5kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXREaXZlcmdpbmd9IGZyb20gXCIuL29mZnNldC9kaXZlcmdpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldE5vbmV9IGZyb20gXCIuL29mZnNldC9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRTaWxob3VldHRlfSBmcm9tIFwiLi9vZmZzZXQvc2lsaG91ZXR0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0V2lnZ2xlfSBmcm9tIFwiLi9vZmZzZXQvd2lnZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckFwcGVhcmFuY2V9IGZyb20gXCIuL29yZGVyL2FwcGVhcmFuY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9hc2NlbmRpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyRGVzY2VuZGluZ30gZnJvbSBcIi4vb3JkZXIvZGVzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJJbnNpZGVPdXR9IGZyb20gXCIuL29yZGVyL2luc2lkZU91dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJOb25lfSBmcm9tIFwiLi9vcmRlci9ub25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlclJldmVyc2V9IGZyb20gXCIuL29yZGVyL3JldmVyc2UuanNcIjtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIFRyYW5zZm9ybShrLCB4LCB5KSB7XG4gIHRoaXMuayA9IGs7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sXG4gIHNjYWxlOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmsgKiBrLCB0aGlzLngsIHRoaXMueSk7XG4gIH0sXG4gIHRyYW5zbGF0ZTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID09PSAwICYgeSA9PT0gMCA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuaywgdGhpcy54ICsgdGhpcy5rICogeCwgdGhpcy55ICsgdGhpcy5rICogeSk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTtcbiAgfSxcbiAgYXBwbHlYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggKiB0aGlzLmsgKyB0aGlzLng7XG4gIH0sXG4gIGFwcGx5WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5ICogdGhpcy5rICsgdGhpcy55O1xuICB9LFxuICBpbnZlcnQ6IGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTtcbiAgfSxcbiAgaW52ZXJ0WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMueCkgLyB0aGlzLms7XG4gIH0sXG4gIGludmVydFk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLnkpIC8gdGhpcy5rO1xuICB9LFxuICByZXNjYWxlWDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpO1xuICB9LFxuICByZXNjYWxlWTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5LmNvcHkoKS5kb21haW4oeS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksIHRoaXMpLm1hcCh5LmludmVydCwgeSkpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIikgc2NhbGUoXCIgKyB0aGlzLmsgKyBcIilcIjtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IG5ldyBUcmFuc2Zvcm0oMSwgMCwgMCk7XG5cbnRyYW5zZm9ybS5wcm90b3R5cGUgPSBUcmFuc2Zvcm0ucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSkge1xuICB3aGlsZSAoIW5vZGUuX196b29tKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuIGlkZW50aXR5O1xuICByZXR1cm4gbm9kZS5fX3pvb207XG59XG4iLAogICAgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtkcmFnRGlzYWJsZSwgZHJhZ0VuYWJsZX0gZnJvbSBcImQzLWRyYWdcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVab29tfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c2VsZWN0LCBwb2ludGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IFpvb21FdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuaW1wb3J0IHtUcmFuc2Zvcm0sIGlkZW50aXR5fSBmcm9tIFwiLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbi8vIGV4Y2VwdCBmb3IgcGluY2gtdG8tem9vbSwgd2hpY2ggaXMgc2VudCBhcyBhIHdoZWVsK2N0cmxLZXkgZXZlbnRcbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICghZXZlbnQuY3RybEtleSB8fCBldmVudC50eXBlID09PSAnd2hlZWwnKSAmJiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RXh0ZW50KCkge1xuICB2YXIgZSA9IHRoaXM7XG4gIGlmIChlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuICAgIGUgPSBlLm93bmVyU1ZHRWxlbWVudCB8fCBlO1xuICAgIGlmIChlLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICAgIGUgPSBlLnZpZXdCb3guYmFzZVZhbDtcbiAgICAgIHJldHVybiBbW2UueCwgZS55XSwgW2UueCArIGUud2lkdGgsIGUueSArIGUuaGVpZ2h0XV07XG4gICAgfVxuICAgIHJldHVybiBbWzAsIDBdLCBbZS53aWR0aC5iYXNlVmFsLnZhbHVlLCBlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtlLmNsaWVudFdpZHRoLCBlLmNsaWVudEhlaWdodF1dO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNmb3JtKCkge1xuICByZXR1cm4gdGhpcy5fX3pvb20gfHwgaWRlbnRpdHk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXaGVlbERlbHRhKGV2ZW50KSB7XG4gIHJldHVybiAtZXZlbnQuZGVsdGFZICogKGV2ZW50LmRlbHRhTW9kZSA9PT0gMSA/IDAuMDUgOiBldmVudC5kZWx0YU1vZGUgPyAxIDogMC4wMDIpICogKGV2ZW50LmN0cmxLZXkgPyAxMCA6IDEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzIHx8IChcIm9udG91Y2hzdGFydFwiIGluIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29uc3RyYWluKHRyYW5zZm9ybSwgZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpIHtcbiAgdmFyIGR4MCA9IHRyYW5zZm9ybS5pbnZlcnRYKGV4dGVudFswXVswXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMF0sXG4gICAgICBkeDEgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMV1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzBdLFxuICAgICAgZHkwID0gdHJhbnNmb3JtLmludmVydFkoZXh0ZW50WzBdWzFdKSAtIHRyYW5zbGF0ZUV4dGVudFswXVsxXSxcbiAgICAgIGR5MSA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFsxXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMV1bMV07XG4gIHJldHVybiB0cmFuc2Zvcm0udHJhbnNsYXRlKFxuICAgIGR4MSA+IGR4MCA/IChkeDAgKyBkeDEpIC8gMiA6IE1hdGgubWluKDAsIGR4MCkgfHwgTWF0aC5tYXgoMCwgZHgxKSxcbiAgICBkeTEgPiBkeTAgPyAoZHkwICsgZHkxKSAvIDIgOiBNYXRoLm1pbigwLCBkeTApIHx8IE1hdGgubWF4KDAsIGR5MSlcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGNvbnN0cmFpbiA9IGRlZmF1bHRDb25zdHJhaW4sXG4gICAgICB3aGVlbERlbHRhID0gZGVmYXVsdFdoZWVsRGVsdGEsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgc2NhbGVFeHRlbnQgPSBbMCwgSW5maW5pdHldLFxuICAgICAgdHJhbnNsYXRlRXh0ZW50ID0gW1stSW5maW5pdHksIC1JbmZpbml0eV0sIFtJbmZpbml0eSwgSW5maW5pdHldXSxcbiAgICAgIGR1cmF0aW9uID0gMjUwLFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVpvb20sXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiem9vbVwiLCBcImVuZFwiKSxcbiAgICAgIHRvdWNoc3RhcnRpbmcsXG4gICAgICB0b3VjaGZpcnN0LFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICB0b3VjaERlbGF5ID0gNTAwLFxuICAgICAgd2hlZWxEZWxheSA9IDE1MCxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMCxcbiAgICAgIHRhcERpc3RhbmNlID0gMTA7XG5cbiAgZnVuY3Rpb24gem9vbShzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pXG4gICAgICAgIC5vbihcIndoZWVsLnpvb21cIiwgd2hlZWxlZCwge3Bhc3NpdmU6IGZhbHNlfSlcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLnpvb21cIiwgbW91c2Vkb3duZWQpXG4gICAgICAgIC5vbihcImRibGNsaWNrLnpvb21cIiwgZGJsY2xpY2tlZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0Lnpvb21cIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuem9vbVwiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb21cIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIHpvb20udHJhbnNmb3JtID0gZnVuY3Rpb24oY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gY29sbGVjdGlvbi5zZWxlY3Rpb24gPyBjb2xsZWN0aW9uLnNlbGVjdGlvbigpIDogY29sbGVjdGlvbjtcbiAgICBzZWxlY3Rpb24ucHJvcGVydHkoXCJfX3pvb21cIiwgZGVmYXVsdFRyYW5zZm9ybSk7XG4gICAgaWYgKGNvbGxlY3Rpb24gIT09IHNlbGVjdGlvbikge1xuICAgICAgc2NoZWR1bGUoY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgLmV2ZW50KGV2ZW50KVxuICAgICAgICAgIC5zdGFydCgpXG4gICAgICAgICAgLnpvb20obnVsbCwgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0cmFuc2Zvcm0pXG4gICAgICAgICAgLmVuZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHpvb20uc2NhbGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgaywgcCwgZXZlbnQpIHtcbiAgICB6b29tLnNjYWxlVG8oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrMCA9IHRoaXMuX196b29tLmssXG4gICAgICAgICAgazEgPSB0eXBlb2YgayA9PT0gXCJmdW5jdGlvblwiID8gay5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogaztcbiAgICAgIHJldHVybiBrMCAqIGsxO1xuICAgIH0sIHAsIGV2ZW50KTtcbiAgfTtcblxuICB6b29tLnNjYWxlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHAsIGV2ZW50KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgICBwMCA9IHAgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHAgPT09IFwiZnVuY3Rpb25cIiA/IHAuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHAsXG4gICAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBlLCB0cmFuc2xhdGVFeHRlbnQpO1xuICAgIH0sIHAsIGV2ZW50KTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUJ5ID0gZnVuY3Rpb24oc2VsZWN0aW9uLCB4LCB5LCBldmVudCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRoaXMuX196b29tLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHguYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB5XG4gICAgICApLCBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVUbyA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSwgcCwgZXZlbnQpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbihpZGVudGl0eS50cmFuc2xhdGUocDBbMF0sIHAwWzFdKS5zY2FsZSh0LmspLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IC14LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteCxcbiAgICAgICAgdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IC15LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteVxuICAgICAgKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gc2NhbGUodHJhbnNmb3JtLCBrKSB7XG4gICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgaykpO1xuICAgIHJldHVybiBrID09PSB0cmFuc2Zvcm0uayA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0oaywgdHJhbnNmb3JtLngsIHRyYW5zZm9ybS55KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh0cmFuc2Zvcm0sIHAwLCBwMSkge1xuICAgIHZhciB4ID0gcDBbMF0gLSBwMVswXSAqIHRyYW5zZm9ybS5rLCB5ID0gcDBbMV0gLSBwMVsxXSAqIHRyYW5zZm9ybS5rO1xuICAgIHJldHVybiB4ID09PSB0cmFuc2Zvcm0ueCAmJiB5ID09PSB0cmFuc2Zvcm0ueSA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0odHJhbnNmb3JtLmssIHgsIHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudHJvaWQoZXh0ZW50KSB7XG4gICAgcmV0dXJuIFsoK2V4dGVudFswXVswXSArICtleHRlbnRbMV1bMF0pIC8gMiwgKCtleHRlbnRbMF1bMV0gKyArZXh0ZW50WzFdWzFdKSAvIDJdO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodHJhbnNpdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpIHtcbiAgICB0cmFuc2l0aW9uXG4gICAgICAgIC5vbihcInN0YXJ0Lnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5ldmVudChldmVudCkuc3RhcnQoKTsgfSlcbiAgICAgICAgLm9uKFwiaW50ZXJydXB0Lnpvb20gZW5kLnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5ldmVudChldmVudCkuZW5kKCk7IH0pXG4gICAgICAgIC50d2VlbihcInpvb21cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICBnID0gZ2VzdHVyZSh0aGF0LCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgICAgICAgIGUgPSBleHRlbnQuYXBwbHkodGhhdCwgYXJncyksXG4gICAgICAgICAgICAgIHAgPSBwb2ludCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcG9pbnQgPT09IFwiZnVuY3Rpb25cIiA/IHBvaW50LmFwcGx5KHRoYXQsIGFyZ3MpIDogcG9pbnQsXG4gICAgICAgICAgICAgIHcgPSBNYXRoLm1heChlWzFdWzBdIC0gZVswXVswXSwgZVsxXVsxXSAtIGVbMF1bMV0pLFxuICAgICAgICAgICAgICBhID0gdGhhdC5fX3pvb20sXG4gICAgICAgICAgICAgIGIgPSB0eXBlb2YgdHJhbnNmb3JtID09PSBcImZ1bmN0aW9uXCIgPyB0cmFuc2Zvcm0uYXBwbHkodGhhdCwgYXJncykgOiB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShhLmludmVydChwKS5jb25jYXQodyAvIGEuayksIGIuaW52ZXJ0KHApLmNvbmNhdCh3IC8gYi5rKSk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0ID09PSAxKSB0ID0gYjsgLy8gQXZvaWQgcm91bmRpbmcgZXJyb3Igb24gZW5kLlxuICAgICAgICAgICAgZWxzZSB7IHZhciBsID0gaSh0KSwgayA9IHcgLyBsWzJdOyB0ID0gbmV3IFRyYW5zZm9ybShrLCBwWzBdIC0gbFswXSAqIGssIHBbMV0gLSBsWzFdICogayk7IH1cbiAgICAgICAgICAgIGcuem9vbShudWxsLCB0KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlc3R1cmUodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICByZXR1cm4gKCFjbGVhbiAmJiB0aGF0Ll9fem9vbWluZykgfHwgbmV3IEdlc3R1cmUodGhhdCwgYXJncyk7XG4gIH1cblxuICBmdW5jdGlvbiBHZXN0dXJlKHRoYXQsIGFyZ3MpIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICAgIHRoaXMuc291cmNlRXZlbnQgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpO1xuICAgIHRoaXMudGFwcyA9IDA7XG4gIH1cblxuICBHZXN0dXJlLnByb3RvdHlwZSA9IHtcbiAgICBldmVudDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkgdGhpcy5zb3VyY2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKyt0aGlzLmFjdGl2ZSA9PT0gMSkge1xuICAgICAgICB0aGlzLnRoYXQuX196b29taW5nID0gdGhpcztcbiAgICAgICAgdGhpcy5lbWl0KFwic3RhcnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHpvb206IGZ1bmN0aW9uKGtleSwgdHJhbnNmb3JtKSB7XG4gICAgICBpZiAodGhpcy5tb3VzZSAmJiBrZXkgIT09IFwibW91c2VcIikgdGhpcy5tb3VzZVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy5tb3VzZVswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDAgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gwWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMFswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDEgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gxWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMVswXSk7XG4gICAgICB0aGlzLnRoYXQuX196b29tID0gdHJhbnNmb3JtO1xuICAgICAgdGhpcy5lbWl0KFwiem9vbVwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nO1xuICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgIHZhciBkID0gc2VsZWN0KHRoaXMudGhhdCkuZGF0dW0oKTtcbiAgICAgIGxpc3RlbmVycy5jYWxsKFxuICAgICAgICB0eXBlLFxuICAgICAgICB0aGlzLnRoYXQsXG4gICAgICAgIG5ldyBab29tRXZlbnQodHlwZSwge1xuICAgICAgICAgIHNvdXJjZUV2ZW50OiB0aGlzLnNvdXJjZUV2ZW50LFxuICAgICAgICAgIHRhcmdldDogem9vbSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHRyYW5zZm9ybTogdGhpcy50aGF0Ll9fem9vbSxcbiAgICAgICAgICBkaXNwYXRjaDogbGlzdGVuZXJzXG4gICAgICAgIH0pLFxuICAgICAgICBkXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB3aGVlbGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHQgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgdC5rICogTWF0aC5wb3coMiwgd2hlZWxEZWx0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSkpLFxuICAgICAgICBwID0gcG9pbnRlcihldmVudCk7XG5cbiAgICAvLyBJZiB0aGUgbW91c2UgaXMgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgYmVmb3JlLCByZXVzZSBpdC5cbiAgICAvLyBJZiB0aGVyZSB3ZXJlIHJlY2VudCB3aGVlbCBldmVudHMsIHJlc2V0IHRoZSB3aGVlbCBpZGxlIHRpbWVvdXQuXG4gICAgaWYgKGcud2hlZWwpIHtcbiAgICAgIGlmIChnLm1vdXNlWzBdWzBdICE9PSBwWzBdIHx8IGcubW91c2VbMF1bMV0gIT09IHBbMV0pIHtcbiAgICAgICAgZy5tb3VzZVsxXSA9IHQuaW52ZXJ0KGcubW91c2VbMF0gPSBwKTtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dChnLndoZWVsKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIHdoZWVsIGV2ZW50IHdvbuKAmXQgdHJpZ2dlciBhIHRyYW5zZm9ybSBjaGFuZ2UsIGlnbm9yZSBpdC5cbiAgICBlbHNlIGlmICh0LmsgPT09IGspIHJldHVybjtcblxuICAgIC8vIE90aGVyd2lzZSwgY2FwdHVyZSB0aGUgbW91c2UgcG9pbnQgYW5kIGxvY2F0aW9uIGF0IHRoZSBzdGFydC5cbiAgICBlbHNlIHtcbiAgICAgIGcubW91c2UgPSBbcCwgdC5pbnZlcnQocCldO1xuICAgICAgaW50ZXJydXB0KHRoaXMpO1xuICAgICAgZy5zdGFydCgpO1xuICAgIH1cblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGcud2hlZWwgPSBzZXRUaW1lb3V0KHdoZWVsaWRsZWQsIHdoZWVsRGVsYXkpO1xuICAgIGcuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodCwgayksIGcubW91c2VbMF0sIGcubW91c2VbMV0pLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG5cbiAgICBmdW5jdGlvbiB3aGVlbGlkbGVkKCkge1xuICAgICAgZy53aGVlbCA9IG51bGw7XG4gICAgICBnLmVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlZG93bmVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJncywgdHJ1ZSkuZXZlbnQoZXZlbnQpLFxuICAgICAgICB2ID0gc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLnpvb21cIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLnpvb21cIiwgbW91c2V1cHBlZCwgdHJ1ZSksXG4gICAgICAgIHAgPSBwb2ludGVyKGV2ZW50LCBjdXJyZW50VGFyZ2V0KSxcbiAgICAgICAgeDAgPSBldmVudC5jbGllbnRYLFxuICAgICAgICB5MCA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBkcmFnRGlzYWJsZShldmVudC52aWV3KTtcbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBnLm1vdXNlID0gW3AsIHRoaXMuX196b29tLmludmVydChwKV07XG4gICAgaW50ZXJydXB0KHRoaXMpO1xuICAgIGcuc3RhcnQoKTtcblxuICAgIGZ1bmN0aW9uIG1vdXNlbW92ZWQoZXZlbnQpIHtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgaWYgKCFnLm1vdmVkKSB7XG4gICAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSB4MCwgZHkgPSBldmVudC5jbGllbnRZIC0geTA7XG4gICAgICAgIGcubW92ZWQgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgICAgfVxuICAgICAgZy5ldmVudChldmVudClcbiAgICAgICAuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoZy50aGF0Ll9fem9vbSwgZy5tb3VzZVswXSA9IHBvaW50ZXIoZXZlbnQsIGN1cnJlbnRUYXJnZXQpLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdXNldXBwZWQoZXZlbnQpIHtcbiAgICAgIHYub24oXCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb21cIiwgbnVsbCk7XG4gICAgICBkcmFnRW5hYmxlKGV2ZW50LnZpZXcsIGcubW92ZWQpO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBnLmV2ZW50KGV2ZW50KS5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkYmxjbGlja2VkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0MCA9IHRoaXMuX196b29tLFxuICAgICAgICBwMCA9IHBvaW50ZXIoZXZlbnQuY2hhbmdlZFRvdWNoZXMgPyBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSA6IGV2ZW50LCB0aGlzKSxcbiAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICBrMSA9IHQwLmsgKiAoZXZlbnQuc2hpZnRLZXkgPyAwLjUgOiAyKSxcbiAgICAgICAgdDEgPSBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQwLCBrMSksIHAwLCBwMSksIGV4dGVudC5hcHBseSh0aGlzLCBhcmdzKSwgdHJhbnNsYXRlRXh0ZW50KTtcblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGlmIChkdXJhdGlvbiA+IDApIHNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pLmNhbGwoc2NoZWR1bGUsIHQxLCBwMCwgZXZlbnQpO1xuICAgIGVsc2Ugc2VsZWN0KHRoaXMpLmNhbGwoem9vbS50cmFuc2Zvcm0sIHQxLCBwMCwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQudG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLFxuICAgICAgICBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzLCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPT09IG4pLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgc3RhcnRlZCwgaSwgdCwgcDtcblxuICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gcG9pbnRlcih0LCB0aGlzKTtcbiAgICAgIHAgPSBbcCwgdGhpcy5fX3pvb20uaW52ZXJ0KHApLCB0LmlkZW50aWZpZXJdO1xuICAgICAgaWYgKCFnLnRvdWNoMCkgZy50b3VjaDAgPSBwLCBzdGFydGVkID0gdHJ1ZSwgZy50YXBzID0gMSArICEhdG91Y2hzdGFydGluZztcbiAgICAgIGVsc2UgaWYgKCFnLnRvdWNoMSAmJiBnLnRvdWNoMFsyXSAhPT0gcFsyXSkgZy50b3VjaDEgPSBwLCBnLnRhcHMgPSAwO1xuICAgIH1cblxuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuXG4gICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgIGlmIChnLnRhcHMgPCAyKSB0b3VjaGZpcnN0ID0gcFswXSwgdG91Y2hzdGFydGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoc3RhcnRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0LCBwLCBsO1xuXG4gICAgbm9ldmVudChldmVudCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdCA9IHRvdWNoZXNbaV0sIHAgPSBwb2ludGVyKHQsIHRoaXMpO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gwWzBdID0gcDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gxWzBdID0gcDtcbiAgICB9XG4gICAgdCA9IGcudGhhdC5fX3pvb207XG4gICAgaWYgKGcudG91Y2gxKSB7XG4gICAgICB2YXIgcDAgPSBnLnRvdWNoMFswXSwgbDAgPSBnLnRvdWNoMFsxXSxcbiAgICAgICAgICBwMSA9IGcudG91Y2gxWzBdLCBsMSA9IGcudG91Y2gxWzFdLFxuICAgICAgICAgIGRwID0gKGRwID0gcDFbMF0gLSBwMFswXSkgKiBkcCArIChkcCA9IHAxWzFdIC0gcDBbMV0pICogZHAsXG4gICAgICAgICAgZGwgPSAoZGwgPSBsMVswXSAtIGwwWzBdKSAqIGRsICsgKGRsID0gbDFbMV0gLSBsMFsxXSkgKiBkbDtcbiAgICAgIHQgPSBzY2FsZSh0LCBNYXRoLnNxcnQoZHAgLyBkbCkpO1xuICAgICAgcCA9IFsocDBbMF0gKyBwMVswXSkgLyAyLCAocDBbMV0gKyBwMVsxXSkgLyAyXTtcbiAgICAgIGwgPSBbKGwwWzBdICsgbDFbMF0pIC8gMiwgKGwwWzFdICsgbDFbMV0pIC8gMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGcudG91Y2gwKSBwID0gZy50b3VjaDBbMF0sIGwgPSBnLnRvdWNoMFsxXTtcbiAgICBlbHNlIHJldHVybjtcblxuICAgIGcuem9vbShcInRvdWNoXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUodCwgcCwgbCksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuX196b29taW5nKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3MpLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIHQ7XG5cbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIHRvdWNoRGVsYXkpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGRlbGV0ZSBnLnRvdWNoMDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICB9XG4gICAgaWYgKGcudG91Y2gxICYmICFnLnRvdWNoMCkgZy50b3VjaDAgPSBnLnRvdWNoMSwgZGVsZXRlIGcudG91Y2gxO1xuICAgIGlmIChnLnRvdWNoMCkgZy50b3VjaDBbMV0gPSB0aGlzLl9fem9vbS5pbnZlcnQoZy50b3VjaDBbMF0pO1xuICAgIGVsc2Uge1xuICAgICAgZy5lbmQoKTtcbiAgICAgIC8vIElmIHRoaXMgd2FzIGEgZGJsdGFwLCByZXJvdXRlIHRvIHRoZSAob3B0aW9uYWwpIGRibGNsaWNrLnpvb20gaGFuZGxlci5cbiAgICAgIGlmIChnLnRhcHMgPT09IDIpIHtcbiAgICAgICAgdCA9IHBvaW50ZXIodCwgdGhpcyk7XG4gICAgICAgIGlmIChNYXRoLmh5cG90KHRvdWNoZmlyc3RbMF0gLSB0WzBdLCB0b3VjaGZpcnN0WzFdIC0gdFsxXSkgPCB0YXBEaXN0YW5jZSkge1xuICAgICAgICAgIHZhciBwID0gc2VsZWN0KHRoaXMpLm9uKFwiZGJsY2xpY2suem9vbVwiKTtcbiAgICAgICAgICBpZiAocCkgcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgem9vbS53aGVlbERlbHRhID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHdoZWVsRGVsdGEgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgem9vbSkgOiB3aGVlbERlbHRhO1xuICB9O1xuXG4gIHpvb20uZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiBmaWx0ZXI7XG4gIH07XG5cbiAgem9vbS50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCB6b29tKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICB6b29tLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtbK19bMF1bMF0sICtfWzBdWzFdXSwgWytfWzFdWzBdLCArX1sxXVsxXV1dKSwgem9vbSkgOiBleHRlbnQ7XG4gIH07XG5cbiAgem9vbS5zY2FsZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZUV4dGVudFswXSA9ICtfWzBdLCBzY2FsZUV4dGVudFsxXSA9ICtfWzFdLCB6b29tKSA6IFtzY2FsZUV4dGVudFswXSwgc2NhbGVFeHRlbnRbMV1dO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zbGF0ZUV4dGVudFswXVswXSA9ICtfWzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMF0gPSArX1sxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdID0gK19bMF1bMV0sIHRyYW5zbGF0ZUV4dGVudFsxXVsxXSA9ICtfWzFdWzFdLCB6b29tKSA6IFtbdHJhbnNsYXRlRXh0ZW50WzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMF1bMV1dLCBbdHJhbnNsYXRlRXh0ZW50WzFdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV1dXTtcbiAgfTtcblxuICB6b29tLmNvbnN0cmFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb25zdHJhaW4gPSBfLCB6b29tKSA6IGNvbnN0cmFpbjtcbiAgfTtcblxuICB6b29tLmR1cmF0aW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR1cmF0aW9uID0gK18sIHpvb20pIDogZHVyYXRpb247XG4gIH07XG5cbiAgem9vbS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHpvb20pIDogaW50ZXJwb2xhdGU7XG4gIH07XG5cbiAgem9vbS5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyB6b29tIDogdmFsdWU7XG4gIH07XG5cbiAgem9vbS5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCB6b29tKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgem9vbS50YXBEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXBEaXN0YW5jZSA9ICtfLCB6b29tKSA6IHRhcERpc3RhbmNlO1xuICB9O1xuXG4gIHJldHVybiB6b29tO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgem9vbX0gZnJvbSBcIi4vem9vbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHpvb21UcmFuc2Zvcm0sIGlkZW50aXR5IGFzIHpvb21JZGVudGl0eSwgVHJhbnNmb3JtIGFzIFpvb21UcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybS5qc1wiO1xuIiwKICAgICJleHBvcnQgKiBmcm9tIFwiZDMtYXJyYXlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1heGlzXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYnJ1c2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jaG9yZFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtY29udG91clwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRlbGF1bmF5XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kcmFnXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZHN2XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZWFzZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZldGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZm9yY2VcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mb3JtYXRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1nZW9cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXBhdGhcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1wb2x5Z29uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1yYW5kb21cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1zY2FsZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNoYXBlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZXJcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtem9vbVwiO1xuIiwKICAgICIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwKICAgICJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJhd1RhZztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuIiwKICAgICJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsCiAgICAiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNvcmVKc0RhdGE7XG4iLAogICAgImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcbiIsCiAgICAiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuIiwKICAgICJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUNyZWF0ZTtcbiIsCiAgICAiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIiwKICAgICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoRGVsZXRlO1xuIiwKICAgICJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaEdldDtcbiIsCiAgICAiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iLAogICAgImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hTZXQ7XG4iLAogICAgImltcG9ydCBoYXNoQ2xlYXIgZnJvbSAnLi9faGFzaENsZWFyLmpzJztcbmltcG9ydCBoYXNoRGVsZXRlIGZyb20gJy4vX2hhc2hEZWxldGUuanMnO1xuaW1wb3J0IGhhc2hHZXQgZnJvbSAnLi9faGFzaEdldC5qcyc7XG5pbXBvcnQgaGFzaEhhcyBmcm9tICcuL19oYXNoSGFzLmpzJztcbmltcG9ydCBoYXNoU2V0IGZyb20gJy4vX2hhc2hTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuZXhwb3J0IGRlZmF1bHQgSGFzaDtcbiIsCiAgICAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiIsCiAgICAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIiwKICAgICJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc29jSW5kZXhPZjtcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVHZXQ7XG4iLAogICAgImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsCiAgICAiaW1wb3J0IGxpc3RDYWNoZUNsZWFyIGZyb20gJy4vX2xpc3RDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVEZWxldGUgZnJvbSAnLi9fbGlzdENhY2hlRGVsZXRlLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVHZXQgZnJvbSAnLi9fbGlzdENhY2hlR2V0LmpzJztcbmltcG9ydCBsaXN0Q2FjaGVIYXMgZnJvbSAnLi9fbGlzdENhY2hlSGFzLmpzJztcbmltcG9ydCBsaXN0Q2FjaGVTZXQgZnJvbSAnLi9fbGlzdENhY2hlU2V0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBMaXN0Q2FjaGU7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuIiwKICAgICJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzS2V5YWJsZTtcbiIsCiAgICAiaW1wb3J0IGlzS2V5YWJsZSBmcm9tICcuL19pc0tleWFibGUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE1hcERhdGE7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlR2V0O1xuIiwKICAgICJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVIYXM7XG4iLAogICAgImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwKICAgICJpbXBvcnQgbWFwQ2FjaGVDbGVhciBmcm9tICcuL19tYXBDYWNoZUNsZWFyLmpzJztcbmltcG9ydCBtYXBDYWNoZURlbGV0ZSBmcm9tICcuL19tYXBDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVHZXQgZnJvbSAnLi9fbWFwQ2FjaGVHZXQuanMnO1xuaW1wb3J0IG1hcENhY2hlSGFzIGZyb20gJy4vX21hcENhY2hlSGFzLmpzJztcbmltcG9ydCBtYXBDYWNoZVNldCBmcm9tICcuL19tYXBDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBDYWNoZTtcbiIsCiAgICAiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplO1xuIiwKICAgICJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrQ2xlYXI7XG4iLAogICAgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tEZWxldGU7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tHZXQ7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrSGFzO1xuIiwKICAgICJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iLAogICAgImltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBzdGFja0NsZWFyIGZyb20gJy4vX3N0YWNrQ2xlYXIuanMnO1xuaW1wb3J0IHN0YWNrRGVsZXRlIGZyb20gJy4vX3N0YWNrRGVsZXRlLmpzJztcbmltcG9ydCBzdGFja0dldCBmcm9tICcuL19zdGFja0dldC5qcyc7XG5pbXBvcnQgc3RhY2tIYXMgZnJvbSAnLi9fc3RhY2tIYXMuanMnO1xuaW1wb3J0IHN0YWNrU2V0IGZyb20gJy4vX3N0YWNrU2V0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBTdGFjaztcbiIsCiAgICAiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLAogICAgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25NZXJnZVZhbHVlO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQmFzZUZvcjtcbiIsCiAgICAiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsCiAgICAiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lQnVmZmVyO1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgVWludDhBcnJheTtcbiIsCiAgICAiaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVBcnJheUJ1ZmZlcjtcbiIsCiAgICAiaW1wb3J0IGNsb25lQXJyYXlCdWZmZXIgZnJvbSAnLi9fY2xvbmVBcnJheUJ1ZmZlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lVHlwZWRBcnJheTtcbiIsCiAgICAiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlBcnJheTtcbiIsCiAgICAiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ3JlYXRlO1xuIiwKICAgICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb3ZlckFyZztcbiIsCiAgICAiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLAogICAgImltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVPYmplY3Q7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iLAogICAgImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsCiAgICAiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG4iLAogICAgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNMZW5ndGg7XG4iLAogICAgImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5TGlrZTtcbiIsCiAgICAiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2VPYmplY3Q7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuIiwKICAgICJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG4iLAogICAgImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVW5hcnk7XG4iLAogICAgImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc1R5cGVkQXJyYXkgZnJvbSAnLi9fYmFzZUlzVHlwZWRBcnJheS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNUeXBlZEFycmF5O1xuIiwKICAgICIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2FmZUdldDtcbiIsCiAgICAiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcbiIsCiAgICAiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUaW1lcztcbiIsCiAgICAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwKICAgICJpbXBvcnQgYmFzZVRpbWVzIGZyb20gJy4vX2Jhc2VUaW1lcy5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUxpa2VLZXlzO1xuIiwKICAgICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuIiwKICAgICJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuIiwKICAgICJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIiwKICAgICJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvUGxhaW5PYmplY3Q7XG4iLAogICAgImltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGNsb25lQnVmZmVyIGZyb20gJy4vX2Nsb25lQnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5pbXBvcnQgdG9QbGFpbk9iamVjdCBmcm9tICcuL3RvUGxhaW5PYmplY3QuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2VEZWVwO1xuIiwKICAgICJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGFzc2lnbk1lcmdlVmFsdWUgZnJvbSAnLi9fYXNzaWduTWVyZ2VWYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZUZvciBmcm9tICcuL19iYXNlRm9yLmpzJztcbmltcG9ydCBiYXNlTWVyZ2VEZWVwIGZyb20gJy4vX2Jhc2VNZXJnZURlZXAuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5pbXBvcnQgc2FmZUdldCBmcm9tICcuL19zYWZlR2V0LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2U7XG4iLAogICAgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwKICAgICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuIiwKICAgICJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsCiAgICAiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbnN0YW50O1xuIiwKICAgICJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldFRvU3RyaW5nO1xuIiwKICAgICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3J0T3V0O1xuIiwKICAgICJpbXBvcnQgYmFzZVNldFRvU3RyaW5nIGZyb20gJy4vX2Jhc2VTZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXRUb1N0cmluZztcbiIsCiAgICAiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcbiIsCiAgICAiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iLAogICAgImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcjtcbiIsCiAgICAiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlO1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0LFxuICBjb21tb25fZGVmYXVsdCxcbiAgZGV0ZWN0VHlwZSxcbiAgZGlyZWN0aXZlUmVnZXgsXG4gIGxvZyxcbiAgc2FuaXRpemVEaXJlY3RpdmVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy91dGlscy50c1xuaW1wb3J0IHsgc2FuaXRpemVVcmwgfSBmcm9tIFwiQGJyYWludHJlZS9zYW5pdGl6ZS11cmxcIjtcbmltcG9ydCB7XG4gIGN1cnZlQmFzaXMsXG4gIGN1cnZlQmFzaXNDbG9zZWQsXG4gIGN1cnZlQmFzaXNPcGVuLFxuICBjdXJ2ZUJ1bXBYLFxuICBjdXJ2ZUJ1bXBZLFxuICBjdXJ2ZUJ1bmRsZSxcbiAgY3VydmVDYXJkaW5hbENsb3NlZCxcbiAgY3VydmVDYXJkaW5hbE9wZW4sXG4gIGN1cnZlQ2FyZGluYWwsXG4gIGN1cnZlQ2F0bXVsbFJvbUNsb3NlZCxcbiAgY3VydmVDYXRtdWxsUm9tT3BlbixcbiAgY3VydmVDYXRtdWxsUm9tLFxuICBjdXJ2ZUxpbmVhcixcbiAgY3VydmVMaW5lYXJDbG9zZWQsXG4gIGN1cnZlTW9ub3RvbmVYLFxuICBjdXJ2ZU1vbm90b25lWSxcbiAgY3VydmVOYXR1cmFsLFxuICBjdXJ2ZVN0ZXAsXG4gIGN1cnZlU3RlcEFmdGVyLFxuICBjdXJ2ZVN0ZXBCZWZvcmUsXG4gIHNlbGVjdFxufSBmcm9tIFwiZDNcIjtcbmltcG9ydCBtZW1vaXplIGZyb20gXCJsb2Rhc2gtZXMvbWVtb2l6ZS5qc1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJsb2Rhc2gtZXMvbWVyZ2UuanNcIjtcbnZhciBaRVJPX1dJRFRIX1NQQUNFID0gXCJcXHUyMDBCXCI7XG52YXIgZDNDdXJ2ZVR5cGVzID0ge1xuICBjdXJ2ZUJhc2lzLFxuICBjdXJ2ZUJhc2lzQ2xvc2VkLFxuICBjdXJ2ZUJhc2lzT3BlbixcbiAgY3VydmVCdW1wWCxcbiAgY3VydmVCdW1wWSxcbiAgY3VydmVCdW5kbGUsXG4gIGN1cnZlQ2FyZGluYWxDbG9zZWQsXG4gIGN1cnZlQ2FyZGluYWxPcGVuLFxuICBjdXJ2ZUNhcmRpbmFsLFxuICBjdXJ2ZUNhdG11bGxSb21DbG9zZWQsXG4gIGN1cnZlQ2F0bXVsbFJvbU9wZW4sXG4gIGN1cnZlQ2F0bXVsbFJvbSxcbiAgY3VydmVMaW5lYXIsXG4gIGN1cnZlTGluZWFyQ2xvc2VkLFxuICBjdXJ2ZU1vbm90b25lWCxcbiAgY3VydmVNb25vdG9uZVksXG4gIGN1cnZlTmF0dXJhbCxcbiAgY3VydmVTdGVwLFxuICBjdXJ2ZVN0ZXBBZnRlcixcbiAgY3VydmVTdGVwQmVmb3JlXG59O1xudmFyIGRpcmVjdGl2ZVdpdGhvdXRPcGVuID0gL1xccyooPzooXFx3KykoPz06KTp8KFxcdyspKVxccyooPzooXFx3Kyl8KCg/Oig/IX0lezJ9KS58XFxyP1xcbikqKSk/XFxzKig/On0lezJ9KT8vZ2k7XG52YXIgZGV0ZWN0SW5pdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgY29uZmlnKSB7XG4gIGNvbnN0IGluaXRzID0gZGV0ZWN0RGlyZWN0aXZlKHRleHQsIC8oPzppbml0XFxiKXwoPzppbml0aWFsaXplXFxiKS8pO1xuICBsZXQgcmVzdWx0cyA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbml0cykpIHtcbiAgICBjb25zdCBhcmdzID0gaW5pdHMubWFwKChpbml0KSA9PiBpbml0LmFyZ3MpO1xuICAgIHNhbml0aXplRGlyZWN0aXZlKGFyZ3MpO1xuICAgIHJlc3VsdHMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdChyZXN1bHRzLCBbLi4uYXJnc10pO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdHMgPSBpbml0cy5hcmdzO1xuICB9XG4gIGlmICghcmVzdWx0cykge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgdHlwZSA9IGRldGVjdFR5cGUodGV4dCwgY29uZmlnKTtcbiAgY29uc3QgcHJvcCA9IFwiY29uZmlnXCI7XG4gIGlmIChyZXN1bHRzW3Byb3BdICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZSA9PT0gXCJmbG93Y2hhcnQtdjJcIikge1xuICAgICAgdHlwZSA9IFwiZmxvd2NoYXJ0XCI7XG4gICAgfVxuICAgIHJlc3VsdHNbdHlwZV0gPSByZXN1bHRzW3Byb3BdO1xuICAgIGRlbGV0ZSByZXN1bHRzW3Byb3BdO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufSwgXCJkZXRlY3RJbml0XCIpO1xudmFyIGRldGVjdERpcmVjdGl2ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgdHlwZSA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb21tZW50V2l0aG91dERpcmVjdGl2ZXMgPSBuZXcgUmVnRXhwKFxuICAgICAgYFslXXsyfSg/IVt7XSR7ZGlyZWN0aXZlV2l0aG91dE9wZW4uc291cmNlfSkoPz1bfV1bJV17Mn0pLipcbmAsXG4gICAgICBcImlnXCJcbiAgICApO1xuICAgIHRleHQgPSB0ZXh0LnRyaW0oKS5yZXBsYWNlKGNvbW1lbnRXaXRob3V0RGlyZWN0aXZlcywgXCJcIikucmVwbGFjZSgvJy9nbSwgJ1wiJyk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7dHlwZSAhPT0gbnVsbCA/IFwiIHR5cGU6XCIgKyB0eXBlIDogXCJcIn0gYmFzZWQgb24gdGhlIHRleHQ6JHt0ZXh0fWBcbiAgICApO1xuICAgIGxldCBtYXRjaDtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoID0gZGlyZWN0aXZlUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICAgIGlmIChtYXRjaC5pbmRleCA9PT0gZGlyZWN0aXZlUmVnZXgubGFzdEluZGV4KSB7XG4gICAgICAgIGRpcmVjdGl2ZVJlZ2V4Lmxhc3RJbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKG1hdGNoICYmICF0eXBlIHx8IHR5cGUgJiYgbWF0Y2hbMV0/Lm1hdGNoKHR5cGUpIHx8IHR5cGUgJiYgbWF0Y2hbMl0/Lm1hdGNoKHR5cGUpKSB7XG4gICAgICAgIGNvbnN0IHR5cGUyID0gbWF0Y2hbMV0gPyBtYXRjaFsxXSA6IG1hdGNoWzJdO1xuICAgICAgICBjb25zdCBhcmdzID0gbWF0Y2hbM10gPyBtYXRjaFszXS50cmltKCkgOiBtYXRjaFs0XSA/IEpTT04ucGFyc2UobWF0Y2hbNF0udHJpbSgpKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5wdXNoKHsgdHlwZTogdHlwZTIsIGFyZ3MgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiB0ZXh0LCBhcmdzOiBudWxsIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcihcbiAgICAgIGBFUlJPUjogJHtlcnJvci5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUgdHlwZTogJyR7dHlwZX0nIGJhc2VkIG9uIHRoZSB0ZXh0OiAnJHt0ZXh0fSdgXG4gICAgKTtcbiAgICByZXR1cm4geyB0eXBlOiB2b2lkIDAsIGFyZ3M6IG51bGwgfTtcbiAgfVxufSwgXCJkZXRlY3REaXJlY3RpdmVcIik7XG52YXIgcmVtb3ZlRGlyZWN0aXZlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKGRpcmVjdGl2ZVJlZ2V4LCBcIlwiKTtcbn0sIFwicmVtb3ZlRGlyZWN0aXZlc1wiKTtcbnZhciBpc1N1YnN0cmluZ0luQXJyYXkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0ciwgYXJyKSB7XG4gIGZvciAoY29uc3QgW2ksIGVsZW1lbnRdIG9mIGFyci5lbnRyaWVzKCkpIHtcbiAgICBpZiAoZWxlbWVudC5tYXRjaChzdHIpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufSwgXCJpc1N1YnN0cmluZ0luQXJyYXlcIik7XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRvQ3VydmUoaW50ZXJwb2xhdGUsIGRlZmF1bHRDdXJ2ZSkge1xuICBpZiAoIWludGVycG9sYXRlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDdXJ2ZTtcbiAgfVxuICBjb25zdCBjdXJ2ZU5hbWUgPSBgY3VydmUke2ludGVycG9sYXRlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaW50ZXJwb2xhdGUuc2xpY2UoMSl9YDtcbiAgcmV0dXJuIGQzQ3VydmVUeXBlc1tjdXJ2ZU5hbWVdID8/IGRlZmF1bHRDdXJ2ZTtcbn1cbl9fbmFtZShpbnRlcnBvbGF0ZVRvQ3VydmUsIFwiaW50ZXJwb2xhdGVUb0N1cnZlXCIpO1xuZnVuY3Rpb24gZm9ybWF0VXJsKGxpbmtTdHIsIGNvbmZpZykge1xuICBjb25zdCB1cmwgPSBsaW5rU3RyLnRyaW0oKTtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmIChjb25maWcuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgcmV0dXJuIHNhbml0aXplVXJsKHVybCk7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbl9fbmFtZShmb3JtYXRVcmwsIFwiZm9ybWF0VXJsXCIpO1xudmFyIHJ1bkZ1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChmdW5jdGlvbk5hbWUsIC4uLnBhcmFtcykgPT4ge1xuICBjb25zdCBhcnJQYXRocyA9IGZ1bmN0aW9uTmFtZS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbiA9IGFyclBhdGhzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGZuTmFtZSA9IGFyclBhdGhzW2xlbl07XG4gIGxldCBvYmogPSB3aW5kb3c7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBvYmogPSBvYmpbYXJyUGF0aHNbaV1dO1xuICAgIGlmICghb2JqKSB7XG4gICAgICBsb2cuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7ZnVuY3Rpb25OYW1lfSBub3QgZm91bmQgaW4gd2luZG93YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIG9ialtmbk5hbWVdKC4uLnBhcmFtcyk7XG59LCBcInJ1bkZ1bmNcIik7XG5mdW5jdGlvbiBkaXN0YW5jZShwMSwgcDIpIHtcbiAgaWYgKCFwMSB8fCAhcDIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHAyLnggLSBwMS54LCAyKSArIE1hdGgucG93KHAyLnkgLSBwMS55LCAyKSk7XG59XG5fX25hbWUoZGlzdGFuY2UsIFwiZGlzdGFuY2VcIik7XG5mdW5jdGlvbiB0cmF2ZXJzZUVkZ2UocG9pbnRzKSB7XG4gIGxldCBwcmV2UG9pbnQ7XG4gIGxldCB0b3RhbERpc3RhbmNlID0gMDtcbiAgcG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiB7XG4gICAgdG90YWxEaXN0YW5jZSArPSBkaXN0YW5jZShwb2ludCwgcHJldlBvaW50KTtcbiAgICBwcmV2UG9pbnQgPSBwb2ludDtcbiAgfSk7XG4gIGNvbnN0IHJlbWFpbmluZ0Rpc3RhbmNlID0gdG90YWxEaXN0YW5jZSAvIDI7XG4gIHJldHVybiBjYWxjdWxhdGVQb2ludChwb2ludHMsIHJlbWFpbmluZ0Rpc3RhbmNlKTtcbn1cbl9fbmFtZSh0cmF2ZXJzZUVkZ2UsIFwidHJhdmVyc2VFZGdlXCIpO1xuZnVuY3Rpb24gY2FsY0xhYmVsUG9zaXRpb24ocG9pbnRzKSB7XG4gIGlmIChwb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHBvaW50c1swXTtcbiAgfVxuICByZXR1cm4gdHJhdmVyc2VFZGdlKHBvaW50cyk7XG59XG5fX25hbWUoY2FsY0xhYmVsUG9zaXRpb24sIFwiY2FsY0xhYmVsUG9zaXRpb25cIik7XG52YXIgcm91bmROdW1iZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChudW0sIHByZWNpc2lvbiA9IDIpID0+IHtcbiAgY29uc3QgZmFjdG9yID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG4gIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIGZhY3RvcikgLyBmYWN0b3I7XG59LCBcInJvdW5kTnVtYmVyXCIpO1xudmFyIGNhbGN1bGF0ZVBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocG9pbnRzLCBkaXN0YW5jZVRvVHJhdmVyc2UpID0+IHtcbiAgbGV0IHByZXZQb2ludCA9IHZvaWQgMDtcbiAgbGV0IHJlbWFpbmluZ0Rpc3RhbmNlID0gZGlzdGFuY2VUb1RyYXZlcnNlO1xuICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykge1xuICAgIGlmIChwcmV2UG9pbnQpIHtcbiAgICAgIGNvbnN0IHZlY3RvckRpc3RhbmNlID0gZGlzdGFuY2UocG9pbnQsIHByZXZQb2ludCk7XG4gICAgICBpZiAodmVjdG9yRGlzdGFuY2UgPCByZW1haW5pbmdEaXN0YW5jZSkge1xuICAgICAgICByZW1haW5pbmdEaXN0YW5jZSAtPSB2ZWN0b3JEaXN0YW5jZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlUmF0aW8gPSByZW1haW5pbmdEaXN0YW5jZSAvIHZlY3RvckRpc3RhbmNlO1xuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA8PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQb2ludDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzdGFuY2VSYXRpbyA+PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXN0YW5jZVJhdGlvID4gMCAmJiBkaXN0YW5jZVJhdGlvIDwgMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByb3VuZE51bWJlcigoMSAtIGRpc3RhbmNlUmF0aW8pICogcHJldlBvaW50LnggKyBkaXN0YW5jZVJhdGlvICogcG9pbnQueCwgNSksXG4gICAgICAgICAgICB5OiByb3VuZE51bWJlcigoMSAtIGRpc3RhbmNlUmF0aW8pICogcHJldlBvaW50LnkgKyBkaXN0YW5jZVJhdGlvICogcG9pbnQueSwgNSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZQb2ludCA9IHBvaW50O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgcG9pbnQgZm9yIHRoZSBnaXZlbiBkaXN0YW5jZVwiKTtcbn0sIFwiY2FsY3VsYXRlUG9pbnRcIik7XG52YXIgY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpc1JlbGF0aW9uVHlwZVByZXNlbnQsIHBvaW50cywgaW5pdGlhbFBvc2l0aW9uKSA9PiB7XG4gIGxvZy5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkocG9pbnRzKX1gKTtcbiAgaWYgKHBvaW50c1swXSAhPT0gaW5pdGlhbFBvc2l0aW9uKSB7XG4gICAgcG9pbnRzID0gcG9pbnRzLnJldmVyc2UoKTtcbiAgfVxuICBjb25zdCBkaXN0YW5jZVRvQ2FyZGluYWxpdHlQb2ludCA9IDI1O1xuICBjb25zdCBjZW50ZXIgPSBjYWxjdWxhdGVQb2ludChwb2ludHMsIGRpc3RhbmNlVG9DYXJkaW5hbGl0eVBvaW50KTtcbiAgY29uc3QgZCA9IGlzUmVsYXRpb25UeXBlUHJlc2VudCA/IDEwIDogNTtcbiAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHBvaW50c1swXS55IC0gY2VudGVyLnksIHBvaW50c1swXS54IC0gY2VudGVyLngpO1xuICBjb25zdCBjYXJkaW5hbGl0eVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XG4gIGNhcmRpbmFsaXR5UG9zaXRpb24ueCA9IE1hdGguc2luKGFuZ2xlKSAqIGQgKyAocG9pbnRzWzBdLnggKyBjZW50ZXIueCkgLyAyO1xuICBjYXJkaW5hbGl0eVBvc2l0aW9uLnkgPSAtTWF0aC5jb3MoYW5nbGUpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDI7XG4gIHJldHVybiBjYXJkaW5hbGl0eVBvc2l0aW9uO1xufSwgXCJjYWxjQ2FyZGluYWxpdHlQb3NpdGlvblwiKTtcbmZ1bmN0aW9uIGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odGVybWluYWxNYXJrZXJTaXplLCBwb3NpdGlvbiwgX3BvaW50cykge1xuICBjb25zdCBwb2ludHMgPSBzdHJ1Y3R1cmVkQ2xvbmUoX3BvaW50cyk7XG4gIGxvZy5pbmZvKFwib3VyIHBvaW50c1wiLCBwb2ludHMpO1xuICBpZiAocG9zaXRpb24gIT09IFwic3RhcnRfbGVmdFwiICYmIHBvc2l0aW9uICE9PSBcInN0YXJ0X3JpZ2h0XCIpIHtcbiAgICBwb2ludHMucmV2ZXJzZSgpO1xuICB9XG4gIGNvbnN0IGRpc3RhbmNlVG9DYXJkaW5hbGl0eVBvaW50ID0gMjUgKyB0ZXJtaW5hbE1hcmtlclNpemU7XG4gIGNvbnN0IGNlbnRlciA9IGNhbGN1bGF0ZVBvaW50KHBvaW50cywgZGlzdGFuY2VUb0NhcmRpbmFsaXR5UG9pbnQpO1xuICBjb25zdCBkID0gMTAgKyB0ZXJtaW5hbE1hcmtlclNpemUgKiAwLjU7XG4gIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihwb2ludHNbMF0ueSAtIGNlbnRlci55LCBwb2ludHNbMF0ueCAtIGNlbnRlci54KTtcbiAgY29uc3QgY2FyZGluYWxpdHlQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xuICBpZiAocG9zaXRpb24gPT09IFwic3RhcnRfbGVmdFwiKSB7XG4gICAgY2FyZGluYWxpdHlQb3NpdGlvbi54ID0gTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJKSAqIGQgKyAocG9pbnRzWzBdLnggKyBjZW50ZXIueCkgLyAyO1xuICAgIGNhcmRpbmFsaXR5UG9zaXRpb24ueSA9IC1NYXRoLmNvcyhhbmdsZSArIE1hdGguUEkpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDI7XG4gIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwiZW5kX3JpZ2h0XCIpIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkpICogZCArIChwb2ludHNbMF0ueCArIGNlbnRlci54KSAvIDIgLSA1O1xuICAgIGNhcmRpbmFsaXR5UG9zaXRpb24ueSA9IC1NYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDIgLSA1O1xuICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBcImVuZF9sZWZ0XCIpIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMiAtIDU7XG4gICAgY2FyZGluYWxpdHlQb3NpdGlvbi55ID0gLU1hdGguY29zKGFuZ2xlKSAqIGQgKyAocG9pbnRzWzBdLnkgKyBjZW50ZXIueSkgLyAyIC0gNTtcbiAgfSBlbHNlIHtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnggPSBNYXRoLnNpbihhbmdsZSkgKiBkICsgKHBvaW50c1swXS54ICsgY2VudGVyLngpIC8gMjtcbiAgICBjYXJkaW5hbGl0eVBvc2l0aW9uLnkgPSAtTWF0aC5jb3MoYW5nbGUpICogZCArIChwb2ludHNbMF0ueSArIGNlbnRlci55KSAvIDI7XG4gIH1cbiAgcmV0dXJuIGNhcmRpbmFsaXR5UG9zaXRpb247XG59XG5fX25hbWUoY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbiwgXCJjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0U3R5bGVzRnJvbUFycmF5KGFycikge1xuICBsZXQgc3R5bGUgPSBcIlwiO1xuICBsZXQgbGFiZWxTdHlsZSA9IFwiXCI7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcnIpIHtcbiAgICBpZiAoZWxlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgICBpZiAoZWxlbWVudC5zdGFydHNXaXRoKFwiY29sb3I6XCIpIHx8IGVsZW1lbnQuc3RhcnRzV2l0aChcInRleHQtYWxpZ246XCIpKSB7XG4gICAgICAgIGxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlICsgZWxlbWVudCArIFwiO1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSBzdHlsZSArIGVsZW1lbnQgKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgc3R5bGUsIGxhYmVsU3R5bGUgfTtcbn1cbl9fbmFtZShnZXRTdHlsZXNGcm9tQXJyYXksIFwiZ2V0U3R5bGVzRnJvbUFycmF5XCIpO1xudmFyIGNudCA9IDA7XG52YXIgZ2VuZXJhdGVJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjbnQrKztcbiAgcmV0dXJuIFwiaWQtXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTIpICsgXCItXCIgKyBjbnQ7XG59LCBcImdlbmVyYXRlSWRcIik7XG5mdW5jdGlvbiBtYWtlUmFuZG9tSGV4KGxlbmd0aCkge1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgY29uc3QgY2hhcmFjdGVycyA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUobWFrZVJhbmRvbUhleCwgXCJtYWtlUmFuZG9tSGV4XCIpO1xudmFyIHJhbmRvbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG1ha2VSYW5kb21IZXgob3B0aW9ucy5sZW5ndGgpO1xufSwgXCJyYW5kb21cIik7XG52YXIgZ2V0VGV4dE9iaiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IHZvaWQgMCxcbiAgICBhbmNob3I6IFwic3RhcnRcIixcbiAgICBzdHlsZTogXCIjNjY2XCIsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICB0ZXh0TWFyZ2luOiAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwLFxuICAgIHZhbGlnbjogdm9pZCAwLFxuICAgIHRleHQ6IFwiXCJcbiAgfTtcbn0sIFwiZ2V0VGV4dE9ialwiKTtcbnZhciBkcmF3U2ltcGxlVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdGV4dERhdGEpIHtcbiAgY29uc3QgblRleHQgPSB0ZXh0RGF0YS50ZXh0LnJlcGxhY2UoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgsIFwiIFwiKTtcbiAgY29uc3QgWywgX2ZvbnRTaXplUHhdID0gcGFyc2VGb250U2l6ZSh0ZXh0RGF0YS5mb250U2l6ZSk7XG4gIGNvbnN0IHRleHRFbGVtID0gZWxlbS5hcHBlbmQoXCJ0ZXh0XCIpO1xuICB0ZXh0RWxlbS5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgdGV4dEVsZW0uYXR0cihcInlcIiwgdGV4dERhdGEueSk7XG4gIHRleHRFbGVtLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJmb250LWZhbWlseVwiLCB0ZXh0RGF0YS5mb250RmFtaWx5KTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXNpemVcIiwgX2ZvbnRTaXplUHgpO1xuICB0ZXh0RWxlbS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIHRleHREYXRhLmZvbnRXZWlnaHQpO1xuICB0ZXh0RWxlbS5hdHRyKFwiZmlsbFwiLCB0ZXh0RGF0YS5maWxsKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHNwYW4gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ0c3BhblwiKTtcbiAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54ICsgdGV4dERhdGEudGV4dE1hcmdpbiAqIDIpO1xuICBzcGFuLmF0dHIoXCJmaWxsXCIsIHRleHREYXRhLmZpbGwpO1xuICBzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59LCBcImRyYXdTaW1wbGVUZXh0XCIpO1xudmFyIHdyYXBMYWJlbCA9IG1lbW9pemUoXG4gIChsYWJlbCwgbWF4V2lkdGgsIGNvbmZpZykgPT4ge1xuICAgIGlmICghbGFiZWwpIHtcbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG4gICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHsgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiA0MDAsIGZvbnRGYW1pbHk6IFwiQXJpYWxcIiwgam9pbldpdGg6IFwiPGJyLz5cIiB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICBpZiAoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgudGVzdChsYWJlbCkpIHtcbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG4gICAgY29uc3Qgd29yZHMgPSBsYWJlbC5zcGxpdChcIiBcIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IGNvbXBsZXRlZExpbmVzID0gW107XG4gICAgbGV0IG5leHRMaW5lID0gXCJcIjtcbiAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgd29yZExlbmd0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChgJHt3b3JkfSBgLCBjb25maWcpO1xuICAgICAgY29uc3QgbmV4dExpbmVMZW5ndGggPSBjYWxjdWxhdGVUZXh0V2lkdGgobmV4dExpbmUsIGNvbmZpZyk7XG4gICAgICBpZiAod29yZExlbmd0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHsgaHlwaGVuYXRlZFN0cmluZ3MsIHJlbWFpbmluZ1dvcmQgfSA9IGJyZWFrU3RyaW5nKHdvcmQsIG1heFdpZHRoLCBcIi1cIiwgY29uZmlnKTtcbiAgICAgICAgY29tcGxldGVkTGluZXMucHVzaChuZXh0TGluZSwgLi4uaHlwaGVuYXRlZFN0cmluZ3MpO1xuICAgICAgICBuZXh0TGluZSA9IHJlbWFpbmluZ1dvcmQ7XG4gICAgICB9IGVsc2UgaWYgKG5leHRMaW5lTGVuZ3RoICsgd29yZExlbmd0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICBjb21wbGV0ZWRMaW5lcy5wdXNoKG5leHRMaW5lKTtcbiAgICAgICAgbmV4dExpbmUgPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dExpbmUgPSBbbmV4dExpbmUsIHdvcmRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRXb3JkID0gaW5kZXggKyAxO1xuICAgICAgY29uc3QgaXNMYXN0V29yZCA9IGN1cnJlbnRXb3JkID09PSB3b3Jkcy5sZW5ndGg7XG4gICAgICBpZiAoaXNMYXN0V29yZCkge1xuICAgICAgICBjb21wbGV0ZWRMaW5lcy5wdXNoKG5leHRMaW5lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tcGxldGVkTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSBcIlwiKS5qb2luKGNvbmZpZy5qb2luV2l0aCk7XG4gIH0sXG4gIChsYWJlbCwgbWF4V2lkdGgsIGNvbmZpZykgPT4gYCR7bGFiZWx9JHttYXhXaWR0aH0ke2NvbmZpZy5mb250U2l6ZX0ke2NvbmZpZy5mb250V2VpZ2h0fSR7Y29uZmlnLmZvbnRGYW1pbHl9JHtjb25maWcuam9pbldpdGh9YFxuKTtcbnZhciBicmVha1N0cmluZyA9IG1lbW9pemUoXG4gICh3b3JkLCBtYXhXaWR0aCwgaHlwaGVuQ2hhcmFjdGVyID0gXCItXCIsIGNvbmZpZykgPT4ge1xuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBmb250RmFtaWx5OiBcIkFyaWFsXCIsIG1hcmdpbjogMCB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gWy4uLndvcmRdO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgbGV0IGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICBjaGFyYWN0ZXJzLmZvckVhY2goKGNoYXJhY3RlciwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5leHRMaW5lID0gYCR7Y3VycmVudExpbmV9JHtjaGFyYWN0ZXJ9YDtcbiAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChuZXh0TGluZSwgY29uZmlnKTtcbiAgICAgIGlmIChsaW5lV2lkdGggPj0gbWF4V2lkdGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudENoYXJhY3RlciA9IGluZGV4ICsgMTtcbiAgICAgICAgY29uc3QgaXNMYXN0TGluZSA9IGNoYXJhY3RlcnMubGVuZ3RoID09PSBjdXJyZW50Q2hhcmFjdGVyO1xuICAgICAgICBjb25zdCBoeXBoZW5hdGVkTmV4dExpbmUgPSBgJHtuZXh0TGluZX0ke2h5cGhlbkNoYXJhY3Rlcn1gO1xuICAgICAgICBsaW5lcy5wdXNoKGlzTGFzdExpbmUgPyBuZXh0TGluZSA6IGh5cGhlbmF0ZWROZXh0TGluZSk7XG4gICAgICAgIGN1cnJlbnRMaW5lID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRMaW5lID0gbmV4dExpbmU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgaHlwaGVuYXRlZFN0cmluZ3M6IGxpbmVzLCByZW1haW5pbmdXb3JkOiBjdXJyZW50TGluZSB9O1xuICB9LFxuICAod29yZCwgbWF4V2lkdGgsIGh5cGhlbkNoYXJhY3RlciA9IFwiLVwiLCBjb25maWcpID0+IGAke3dvcmR9JHttYXhXaWR0aH0ke2h5cGhlbkNoYXJhY3Rlcn0ke2NvbmZpZy5mb250U2l6ZX0ke2NvbmZpZy5mb250V2VpZ2h0fSR7Y29uZmlnLmZvbnRGYW1pbHl9YFxuKTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVRleHRIZWlnaHQodGV4dCwgY29uZmlnKSB7XG4gIHJldHVybiBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0ZXh0LCBjb25maWcpLmhlaWdodDtcbn1cbl9fbmFtZShjYWxjdWxhdGVUZXh0SGVpZ2h0LCBcImNhbGN1bGF0ZVRleHRIZWlnaHRcIik7XG5mdW5jdGlvbiBjYWxjdWxhdGVUZXh0V2lkdGgodGV4dCwgY29uZmlnKSB7XG4gIHJldHVybiBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0ZXh0LCBjb25maWcpLndpZHRoO1xufVxuX19uYW1lKGNhbGN1bGF0ZVRleHRXaWR0aCwgXCJjYWxjdWxhdGVUZXh0V2lkdGhcIik7XG52YXIgY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMgPSBtZW1vaXplKFxuICAodGV4dCwgY29uZmlnKSA9PiB7XG4gICAgY29uc3QgeyBmb250U2l6ZSA9IDEyLCBmb250RmFtaWx5ID0gXCJBcmlhbFwiLCBmb250V2VpZ2h0ID0gNDAwIH0gPSBjb25maWc7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgfVxuICAgIGNvbnN0IFssIF9mb250U2l6ZVB4XSA9IHBhcnNlRm9udFNpemUoZm9udFNpemUpO1xuICAgIGNvbnN0IGZvbnRGYW1pbGllcyA9IFtcInNhbnMtc2VyaWZcIiwgZm9udEZhbWlseV07XG4gICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBjb25zdCBkaW1zID0gW107XG4gICAgY29uc3QgYm9keSA9IHNlbGVjdChcImJvZHlcIik7XG4gICAgaWYgKCFib2R5LnJlbW92ZSkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCwgbGluZUhlaWdodDogMCB9O1xuICAgIH1cbiAgICBjb25zdCBnID0gYm9keS5hcHBlbmQoXCJzdmdcIik7XG4gICAgZm9yIChjb25zdCBmb250RmFtaWx5MiBvZiBmb250RmFtaWxpZXMpIHtcbiAgICAgIGxldCBjSGVpZ2h0ID0gMDtcbiAgICAgIGNvbnN0IGRpbSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgbGluZUhlaWdodDogMCB9O1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IHRleHRPYmogPSBnZXRUZXh0T2JqKCk7XG4gICAgICAgIHRleHRPYmoudGV4dCA9IGxpbmUgfHwgWkVST19XSURUSF9TUEFDRTtcbiAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkcmF3U2ltcGxlVGV4dChnLCB0ZXh0T2JqKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBfZm9udFNpemVQeCkuc3R5bGUoXCJmb250LXdlaWdodFwiLCBmb250V2VpZ2h0KS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGZvbnRGYW1pbHkyKTtcbiAgICAgICAgY29uc3QgYkJveCA9ICh0ZXh0RWxlbS5fZ3JvdXBzIHx8IHRleHRFbGVtKVswXVswXS5nZXRCQm94KCk7XG4gICAgICAgIGlmIChiQm94LndpZHRoID09PSAwICYmIGJCb3guaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3ZnIGVsZW1lbnQgbm90IGluIHJlbmRlciB0cmVlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRpbS53aWR0aCA9IE1hdGgucm91bmQoTWF0aC5tYXgoZGltLndpZHRoLCBiQm94LndpZHRoKSk7XG4gICAgICAgIGNIZWlnaHQgPSBNYXRoLnJvdW5kKGJCb3guaGVpZ2h0KTtcbiAgICAgICAgZGltLmhlaWdodCArPSBjSGVpZ2h0O1xuICAgICAgICBkaW0ubGluZUhlaWdodCA9IE1hdGgucm91bmQoTWF0aC5tYXgoZGltLmxpbmVIZWlnaHQsIGNIZWlnaHQpKTtcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChkaW0pO1xuICAgIH1cbiAgICBnLnJlbW92ZSgpO1xuICAgIGNvbnN0IGluZGV4ID0gaXNOYU4oZGltc1sxXS5oZWlnaHQpIHx8IGlzTmFOKGRpbXNbMV0ud2lkdGgpIHx8IGlzTmFOKGRpbXNbMV0ubGluZUhlaWdodCkgfHwgZGltc1swXS5oZWlnaHQgPiBkaW1zWzFdLmhlaWdodCAmJiBkaW1zWzBdLndpZHRoID4gZGltc1sxXS53aWR0aCAmJiBkaW1zWzBdLmxpbmVIZWlnaHQgPiBkaW1zWzFdLmxpbmVIZWlnaHQgPyAwIDogMTtcbiAgICByZXR1cm4gZGltc1tpbmRleF07XG4gIH0sXG4gICh0ZXh0LCBjb25maWcpID0+IGAke3RleHR9JHtjb25maWcuZm9udFNpemV9JHtjb25maWcuZm9udFdlaWdodH0ke2NvbmZpZy5mb250RmFtaWx5fWBcbik7XG52YXIgSW5pdElER2VuZXJhdG9yID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihkZXRlcm1pbmlzdGljID0gZmFsc2UsIHNlZWQpIHtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmNvdW50ID0gc2VlZCA/IHNlZWQubGVuZ3RoIDogMDtcbiAgICB0aGlzLm5leHQgPSBkZXRlcm1pbmlzdGljID8gKCkgPT4gdGhpcy5jb3VudCsrIDogKCkgPT4gRGF0ZS5ub3coKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkluaXRJREdlbmVyYXRvclwiKTtcbiAgfVxufTtcbnZhciBkZWNvZGVyO1xudmFyIGVudGl0eURlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaHRtbCkge1xuICBkZWNvZGVyID0gZGVjb2RlciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBodG1sID0gZXNjYXBlKGh0bWwpLnJlcGxhY2UoLyUyNi9nLCBcIiZcIikucmVwbGFjZSgvJTIzL2csIFwiI1wiKS5yZXBsYWNlKC8lM0IvZywgXCI7XCIpO1xuICBkZWNvZGVyLmlubmVySFRNTCA9IGh0bWw7XG4gIHJldHVybiB1bmVzY2FwZShkZWNvZGVyLnRleHRDb250ZW50KTtcbn0sIFwiZW50aXR5RGVjb2RlXCIpO1xuZnVuY3Rpb24gaXNEZXRhaWxlZEVycm9yKGVycm9yKSB7XG4gIHJldHVybiBcInN0clwiIGluIGVycm9yO1xufVxuX19uYW1lKGlzRGV0YWlsZWRFcnJvciwgXCJpc0RldGFpbGVkRXJyb3JcIik7XG52YXIgaW5zZXJ0VGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIGNzc0NsYXNzLCB0aXRsZVRvcE1hcmdpbiwgdGl0bGUpID0+IHtcbiAgaWYgKCF0aXRsZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBwYXJlbnQubm9kZSgpPy5nZXRCQm94KCk7XG4gIGlmICghYm91bmRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhcmVudC5hcHBlbmQoXCJ0ZXh0XCIpLnRleHQodGl0bGUpLmF0dHIoXCJ4XCIsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMikuYXR0cihcInlcIiwgLXRpdGxlVG9wTWFyZ2luKS5hdHRyKFwiY2xhc3NcIiwgY3NzQ2xhc3MpO1xufSwgXCJpbnNlcnRUaXRsZVwiKTtcbnZhciBwYXJzZUZvbnRTaXplID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZm9udFNpemUpID0+IHtcbiAgaWYgKHR5cGVvZiBmb250U2l6ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBbZm9udFNpemUsIGZvbnRTaXplICsgXCJweFwiXTtcbiAgfVxuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHBhcnNlSW50KGZvbnRTaXplID8/IFwiXCIsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihmb250U2l6ZU51bWJlcikpIHtcbiAgICByZXR1cm4gW3ZvaWQgMCwgdm9pZCAwXTtcbiAgfSBlbHNlIGlmIChmb250U2l6ZSA9PT0gU3RyaW5nKGZvbnRTaXplTnVtYmVyKSkge1xuICAgIHJldHVybiBbZm9udFNpemVOdW1iZXIsIGZvbnRTaXplICsgXCJweFwiXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW2ZvbnRTaXplTnVtYmVyLCBmb250U2l6ZV07XG4gIH1cbn0sIFwicGFyc2VGb250U2l6ZVwiKTtcbmZ1bmN0aW9uIGNsZWFuQW5kTWVyZ2UoZGVmYXVsdERhdGEsIGRhdGEpIHtcbiAgcmV0dXJuIG1lcmdlKHt9LCBkZWZhdWx0RGF0YSwgZGF0YSk7XG59XG5fX25hbWUoY2xlYW5BbmRNZXJnZSwgXCJjbGVhbkFuZE1lcmdlXCIpO1xudmFyIHV0aWxzX2RlZmF1bHQgPSB7XG4gIGFzc2lnbldpdGhEZXB0aDogYXNzaWduV2l0aERlcHRoX2RlZmF1bHQsXG4gIHdyYXBMYWJlbCxcbiAgY2FsY3VsYXRlVGV4dEhlaWdodCxcbiAgY2FsY3VsYXRlVGV4dFdpZHRoLFxuICBjYWxjdWxhdGVUZXh0RGltZW5zaW9ucyxcbiAgY2xlYW5BbmRNZXJnZSxcbiAgZGV0ZWN0SW5pdCxcbiAgZGV0ZWN0RGlyZWN0aXZlLFxuICBpc1N1YnN0cmluZ0luQXJyYXksXG4gIGludGVycG9sYXRlVG9DdXJ2ZSxcbiAgY2FsY0xhYmVsUG9zaXRpb24sXG4gIGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uLFxuICBjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uLFxuICBmb3JtYXRVcmwsXG4gIGdldFN0eWxlc0Zyb21BcnJheSxcbiAgZ2VuZXJhdGVJZCxcbiAgcmFuZG9tLFxuICBydW5GdW5jLFxuICBlbnRpdHlEZWNvZGUsXG4gIGluc2VydFRpdGxlLFxuICBwYXJzZUZvbnRTaXplLFxuICBJbml0SURHZW5lcmF0b3Jcbn07XG52YXIgZW5jb2RlRW50aXRpZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQpIHtcbiAgbGV0IHR4dCA9IHRleHQ7XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9zdHlsZS4qOlxcUyojLio7L2csIGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgfSk7XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC9jbGFzc0RlZi4qOlxcUyojLio7L2csIGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgfSk7XG4gIHR4dCA9IHR4dC5yZXBsYWNlKC8jXFx3KzsvZywgZnVuY3Rpb24ocykge1xuICAgIGNvbnN0IGlubmVyVHh0ID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBpc0ludCA9IC9eXFwrP1xcZCskLy50ZXN0KGlubmVyVHh0KTtcbiAgICBpZiAoaXNJbnQpIHtcbiAgICAgIHJldHVybiBcIlxcdUZCMDJcXHhCMFxceEIwXCIgKyBpbm5lclR4dCArIFwiXFx4QjZcXHhERlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcXHVGQjAyXFx4QjBcIiArIGlubmVyVHh0ICsgXCJcXHhCNlxceERGXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR4dDtcbn0sIFwiZW5jb2RlRW50aXRpZXNcIik7XG52YXIgZGVjb2RlRW50aXRpZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgv76yCwrDCsC9nLCBcIiYjXCIpLnJlcGxhY2UoL++sgsKwL2csIFwiJlwiKS5yZXBsYWNlKC/CtsOfL2csIFwiO1wiKTtcbn0sIFwiZGVjb2RlRW50aXRpZXNcIik7XG52YXIgZ2V0RWRnZUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZnJvbSwgdG8sIHtcbiAgY291bnRlciA9IDAsXG4gIHByZWZpeCxcbiAgc3VmZml4XG59KSA9PiB7XG4gIHJldHVybiBgJHtwcmVmaXggPyBgJHtwcmVmaXh9X2AgOiBcIlwifSR7ZnJvbX1fJHt0b31fJHtjb3VudGVyfSR7c3VmZml4ID8gYF8ke3N1ZmZpeH1gIDogXCJcIn1gO1xufSwgXCJnZXRFZGdlSWRcIik7XG5cbmV4cG9ydCB7XG4gIFpFUk9fV0lEVEhfU1BBQ0UsXG4gIHJlbW92ZURpcmVjdGl2ZXMsXG4gIGludGVycG9sYXRlVG9DdXJ2ZSxcbiAgZ2V0U3R5bGVzRnJvbUFycmF5LFxuICBnZW5lcmF0ZUlkLFxuICByYW5kb20sXG4gIHdyYXBMYWJlbCxcbiAgY2FsY3VsYXRlVGV4dEhlaWdodCxcbiAgY2FsY3VsYXRlVGV4dFdpZHRoLFxuICBpc0RldGFpbGVkRXJyb3IsXG4gIHBhcnNlRm9udFNpemUsXG4gIGNsZWFuQW5kTWVyZ2UsXG4gIHV0aWxzX2RlZmF1bHQsXG4gIGVuY29kZUVudGl0aWVzLFxuICBkZWNvZGVFbnRpdGllcyxcbiAgZ2V0RWRnZUlkXG59O1xuIiwKICAgICIvKipcbiAqIG1hcmtlZCB2MTMuMC4zIC0gYSBtYXJrZG93biBwYXJzZXJcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDI0LCBDaHJpc3RvcGhlciBKZWZmcmV5LiAoTUlUIExpY2Vuc2VkKVxuICogaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZFxuICovXG5cbi8qKlxuICogRE8gTk9UIEVESVQgVEhJUyBGSUxFXG4gKiBUaGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gZmlsZXMgaW4gLi9zcmMvXG4gKi9cblxuLyoqXG4gKiBHZXRzIHRoZSBvcmlnaW5hbCBtYXJrZWQgZGVmYXVsdCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICBicmVha3M6IGZhbHNlLFxuICAgICAgICBleHRlbnNpb25zOiBudWxsLFxuICAgICAgICBnZm06IHRydWUsXG4gICAgICAgIGhvb2tzOiBudWxsLFxuICAgICAgICBwZWRhbnRpYzogZmFsc2UsXG4gICAgICAgIHJlbmRlcmVyOiBudWxsLFxuICAgICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgICAgICB0b2tlbml6ZXI6IG51bGwsXG4gICAgICAgIHdhbGtUb2tlbnM6IG51bGwsXG4gICAgfTtcbn1cbmxldCBfZGVmYXVsdHMgPSBfZ2V0RGVmYXVsdHMoKTtcbmZ1bmN0aW9uIGNoYW5nZURlZmF1bHRzKG5ld0RlZmF1bHRzKSB7XG4gICAgX2RlZmF1bHRzID0gbmV3RGVmYXVsdHM7XG59XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5jb25zdCBlc2NhcGVUZXN0ID0gL1smPD5cIiddLztcbmNvbnN0IGVzY2FwZVJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVRlc3Quc291cmNlLCAnZycpO1xuY29uc3QgZXNjYXBlVGVzdE5vRW5jb2RlID0gL1s8PlwiJ118Jig/ISgjXFxkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFxcdyspOykvO1xuY29uc3QgZXNjYXBlUmVwbGFjZU5vRW5jb2RlID0gbmV3IFJlZ0V4cChlc2NhcGVUZXN0Tm9FbmNvZGUuc291cmNlLCAnZycpO1xuY29uc3QgZXNjYXBlUmVwbGFjZW1lbnRzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7Jyxcbn07XG5jb25zdCBnZXRFc2NhcGVSZXBsYWNlbWVudCA9IChjaCkgPT4gZXNjYXBlUmVwbGFjZW1lbnRzW2NoXTtcbmZ1bmN0aW9uIGVzY2FwZSQxKGh0bWwsIGVuY29kZSkge1xuICAgIGlmIChlbmNvZGUpIHtcbiAgICAgICAgaWYgKGVzY2FwZVRlc3QudGVzdChodG1sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlc2NhcGVSZXBsYWNlLCBnZXRFc2NhcGVSZXBsYWNlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChlc2NhcGVUZXN0Tm9FbmNvZGUudGVzdChodG1sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlc2NhcGVSZXBsYWNlTm9FbmNvZGUsIGdldEVzY2FwZVJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbn1cbmNvbnN0IHVuZXNjYXBlVGVzdCA9IC8mKCMoPzpcXGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XFx3KykpOz8vaWc7XG5mdW5jdGlvbiB1bmVzY2FwZShodG1sKSB7XG4gICAgLy8gZXhwbGljaXRseSBtYXRjaCBkZWNpbWFsLCBoZXgsIGFuZCBuYW1lZCBIVE1MIGVudGl0aWVzXG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZSh1bmVzY2FwZVRlc3QsIChfLCBuKSA9PiB7XG4gICAgICAgIG4gPSBuLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChuID09PSAnY29sb24nKVxuICAgICAgICAgICAgcmV0dXJuICc6JztcbiAgICAgICAgaWYgKG4uY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgIHJldHVybiBuLmNoYXJBdCgxKSA9PT0gJ3gnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLCAxNikpXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCtuLnN1YnN0cmluZygxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xufVxuY29uc3QgY2FyZXQgPSAvKF58W15cXFtdKVxcXi9nO1xuZnVuY3Rpb24gZWRpdChyZWdleCwgb3B0KSB7XG4gICAgbGV0IHNvdXJjZSA9IHR5cGVvZiByZWdleCA9PT0gJ3N0cmluZycgPyByZWdleCA6IHJlZ2V4LnNvdXJjZTtcbiAgICBvcHQgPSBvcHQgfHwgJyc7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgICByZXBsYWNlOiAobmFtZSwgdmFsKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsU291cmNlID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwgOiB2YWwuc291cmNlO1xuICAgICAgICAgICAgdmFsU291cmNlID0gdmFsU291cmNlLnJlcGxhY2UoY2FyZXQsICckMScpO1xuICAgICAgICAgICAgc291cmNlID0gc291cmNlLnJlcGxhY2UobmFtZSwgdmFsU291cmNlKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJlZ2V4OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIG9wdCk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gY2xlYW5VcmwoaHJlZikge1xuICAgIHRyeSB7XG4gICAgICAgIGhyZWYgPSBlbmNvZGVVUkkoaHJlZikucmVwbGFjZSgvJTI1L2csICclJyk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBocmVmO1xufVxuY29uc3Qgbm9vcFRlc3QgPSB7IGV4ZWM6ICgpID0+IG51bGwgfTtcbmZ1bmN0aW9uIHNwbGl0Q2VsbHModGFibGVSb3csIGNvdW50KSB7XG4gICAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgY2VsbC1kZWxpbWl0aW5nIHBpcGUgaGFzIGEgc3BhY2VcbiAgICAvLyBiZWZvcmUgaXQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhbiBlc2NhcGVkIHBpcGVcbiAgICBjb25zdCByb3cgPSB0YWJsZVJvdy5yZXBsYWNlKC9cXHwvZywgKG1hdGNoLCBvZmZzZXQsIHN0cikgPT4ge1xuICAgICAgICBsZXQgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgY3VyciA9IG9mZnNldDtcbiAgICAgICAgd2hpbGUgKC0tY3VyciA+PSAwICYmIHN0cltjdXJyXSA9PT0gJ1xcXFwnKVxuICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkO1xuICAgICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAgICAgLy8gb2RkIG51bWJlciBvZiBzbGFzaGVzIG1lYW5zIHwgaXMgZXNjYXBlZFxuICAgICAgICAgICAgLy8gc28gd2UgbGVhdmUgaXQgYWxvbmVcbiAgICAgICAgICAgIHJldHVybiAnfCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQgc3BhY2UgYmVmb3JlIHVuZXNjYXBlZCB8XG4gICAgICAgICAgICByZXR1cm4gJyB8JztcbiAgICAgICAgfVxuICAgIH0pLCBjZWxscyA9IHJvdy5zcGxpdCgvIFxcfC8pO1xuICAgIGxldCBpID0gMDtcbiAgICAvLyBGaXJzdC9sYXN0IGNlbGwgaW4gYSByb3cgY2Fubm90IGJlIGVtcHR5IGlmIGl0IGhhcyBubyBsZWFkaW5nL3RyYWlsaW5nIHBpcGVcbiAgICBpZiAoIWNlbGxzWzBdLnRyaW0oKSkge1xuICAgICAgICBjZWxscy5zaGlmdCgpO1xuICAgIH1cbiAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCAmJiAhY2VsbHNbY2VsbHMubGVuZ3RoIC0gMV0udHJpbSgpKSB7XG4gICAgICAgIGNlbGxzLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoY291bnQpIHtcbiAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IGNvdW50KSB7XG4gICAgICAgICAgICBjZWxscy5zcGxpY2UoY291bnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKGNlbGxzLmxlbmd0aCA8IGNvdW50KVxuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgcGVyIHRoZSBnZm0gc3BlY1xuICAgICAgICBjZWxsc1tpXSA9IGNlbGxzW2ldLnRyaW0oKS5yZXBsYWNlKC9cXFxcXFx8L2csICd8Jyk7XG4gICAgfVxuICAgIHJldHVybiBjZWxscztcbn1cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nICdjJ3MuIEVxdWl2YWxlbnQgdG8gc3RyLnJlcGxhY2UoL2MqJC8sICcnKS5cbiAqIC9jKiQvIGlzIHZ1bG5lcmFibGUgdG8gUkVET1MuXG4gKlxuICogQHBhcmFtIHN0clxuICogQHBhcmFtIGNcbiAqIEBwYXJhbSBpbnZlcnQgUmVtb3ZlIHN1ZmZpeCBvZiBub24tYyBjaGFycyBpbnN0ZWFkLiBEZWZhdWx0IGZhbHNleS5cbiAqL1xuZnVuY3Rpb24gcnRyaW0oc3RyLCBjLCBpbnZlcnQpIHtcbiAgICBjb25zdCBsID0gc3RyLmxlbmd0aDtcbiAgICBpZiAobCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vIExlbmd0aCBvZiBzdWZmaXggbWF0Y2hpbmcgdGhlIGludmVydCBjb25kaXRpb24uXG4gICAgbGV0IHN1ZmZMZW4gPSAwO1xuICAgIC8vIFN0ZXAgbGVmdCB1bnRpbCB3ZSBmYWlsIHRvIG1hdGNoIHRoZSBpbnZlcnQgY29uZGl0aW9uLlxuICAgIHdoaWxlIChzdWZmTGVuIDwgbCkge1xuICAgICAgICBjb25zdCBjdXJyQ2hhciA9IHN0ci5jaGFyQXQobCAtIHN1ZmZMZW4gLSAxKTtcbiAgICAgICAgaWYgKGN1cnJDaGFyID09PSBjICYmICFpbnZlcnQpIHtcbiAgICAgICAgICAgIHN1ZmZMZW4rKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyQ2hhciAhPT0gYyAmJiBpbnZlcnQpIHtcbiAgICAgICAgICAgIHN1ZmZMZW4rKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgbCAtIHN1ZmZMZW4pO1xufVxuZnVuY3Rpb24gZmluZENsb3NpbmdCcmFja2V0KHN0ciwgYikge1xuICAgIGlmIChzdHIuaW5kZXhPZihiWzFdKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzdHJbaV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0cltpXSA9PT0gYlswXSkge1xuICAgICAgICAgICAgbGV2ZWwrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHJbaV0gPT09IGJbMV0pIHtcbiAgICAgICAgICAgIGxldmVsLS07XG4gICAgICAgICAgICBpZiAobGV2ZWwgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5rKGNhcCwgbGluaywgcmF3LCBsZXhlcikge1xuICAgIGNvbnN0IGhyZWYgPSBsaW5rLmhyZWY7XG4gICAgY29uc3QgdGl0bGUgPSBsaW5rLnRpdGxlID8gZXNjYXBlJDEobGluay50aXRsZSkgOiBudWxsO1xuICAgIGNvbnN0IHRleHQgPSBjYXBbMV0ucmVwbGFjZSgvXFxcXChbXFxbXFxdXSkvZywgJyQxJyk7XG4gICAgaWYgKGNhcFswXS5jaGFyQXQoMCkgIT09ICchJykge1xuICAgICAgICBsZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICAgICAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB0b2tlbnM6IGxleGVyLmlubGluZVRva2Vucyh0ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV4ZXIuc3RhdGUuaW5MaW5rID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgcmF3LFxuICAgICAgICBocmVmLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdGV4dDogZXNjYXBlJDEodGV4dCksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluZGVudENvZGVDb21wZW5zYXRpb24ocmF3LCB0ZXh0KSB7XG4gICAgY29uc3QgbWF0Y2hJbmRlbnRUb0NvZGUgPSByYXcubWF0Y2goL14oXFxzKykoPzpgYGApLyk7XG4gICAgaWYgKG1hdGNoSW5kZW50VG9Db2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBjb25zdCBpbmRlbnRUb0NvZGUgPSBtYXRjaEluZGVudFRvQ29kZVsxXTtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoSW5kZW50SW5Ob2RlID0gbm9kZS5tYXRjaCgvXlxccysvKTtcbiAgICAgICAgaWYgKG1hdGNoSW5kZW50SW5Ob2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbaW5kZW50SW5Ob2RlXSA9IG1hdGNoSW5kZW50SW5Ob2RlO1xuICAgICAgICBpZiAoaW5kZW50SW5Ob2RlLmxlbmd0aCA+PSBpbmRlbnRUb0NvZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5zbGljZShpbmRlbnRUb0NvZGUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vKipcbiAqIFRva2VuaXplclxuICovXG5jbGFzcyBfVG9rZW5pemVyIHtcbiAgICBvcHRpb25zO1xuICAgIHJ1bGVzOyAvLyBzZXQgYnkgdGhlIGxleGVyXG4gICAgbGV4ZXI7IC8vIHNldCBieSB0aGUgbGV4ZXJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgIH1cbiAgICBzcGFjZShzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCAmJiBjYXBbMF0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3BhY2UnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb2RlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gY2FwWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sICcnKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIGNvZGVCbG9ja1N0eWxlOiAnaW5kZW50ZWQnLFxuICAgICAgICAgICAgICAgIHRleHQ6ICF0aGlzLm9wdGlvbnMucGVkYW50aWNcbiAgICAgICAgICAgICAgICAgICAgPyBydHJpbSh0ZXh0LCAnXFxuJylcbiAgICAgICAgICAgICAgICAgICAgOiB0ZXh0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmZW5jZXMoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgY29uc3QgcmF3ID0gY2FwWzBdO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGluZGVudENvZGVDb21wZW5zYXRpb24ocmF3LCBjYXBbM10gfHwgJycpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgcmF3LFxuICAgICAgICAgICAgICAgIGxhbmc6IGNhcFsyXSA/IGNhcFsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwgJyQxJykgOiBjYXBbMl0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGVhZGluZyhzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgbGV0IHRleHQgPSBjYXBbMl0udHJpbSgpO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nICNzXG4gICAgICAgICAgICBpZiAoLyMkLy50ZXN0KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHJ0cmltKHRleHQsICcjJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJpbW1lZC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0cmltbWVkIHx8IC8gJC8udGVzdCh0cmltbWVkKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb21tb25NYXJrIHJlcXVpcmVzIHNwYWNlIGJlZm9yZSB0cmFpbGluZyAjc1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJpbW1lZC50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaGVhZGluZycsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBocihzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5ibG9jay5oci5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2hyJyxcbiAgICAgICAgICAgICAgICByYXc6IHJ0cmltKGNhcFswXSwgJ1xcbicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBibG9ja3F1b3RlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBsZXQgbGluZXMgPSBydHJpbShjYXBbMF0sICdcXG4nKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICBsZXQgcmF3ID0gJyc7XG4gICAgICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gW107XG4gICAgICAgICAgICB3aGlsZSAobGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBpbkJsb2NrcXVvdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGluZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgaTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGxpbmVzIHVwIHRvIGEgY29udGludWF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXiB7MCwzfT4vLnRlc3QobGluZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGluZXMucHVzaChsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbkJsb2NrcXVvdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpbkJsb2NrcXVvdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lcy5wdXNoKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2UoaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJhdyA9IGN1cnJlbnRMaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VGV4dCA9IGN1cnJlbnRSYXdcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlY2VkZSBzZXRleHQgY29udGludWF0aW9uIHdpdGggNCBzcGFjZXMgc28gaXQgaXNuJ3QgYSBzZXRleHRcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cXG58JCkvZywgJ1xcbiAgICAkMScpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eIHswLDN9PlsgXFx0XT8vZ20sICcnKTtcbiAgICAgICAgICAgICAgICByYXcgPSByYXcgPyBgJHtyYXd9XFxuJHtjdXJyZW50UmF3fWAgOiBjdXJyZW50UmF3O1xuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0ID8gYCR7dGV4dH1cXG4ke2N1cnJlbnRUZXh0fWAgOiBjdXJyZW50VGV4dDtcbiAgICAgICAgICAgICAgICAvLyBwYXJzZSBibG9ja3F1b3RlIGxpbmVzIGFzIHRvcCBsZXZlbCB0b2tlbnNcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBwYXJhZ3JhcGhzIGlmIHRoaXMgaXMgYSBjb250aW51YXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmxleGVyLnN0YXRlLnRvcDtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5ibG9ja1Rva2VucyhjdXJyZW50VGV4dCwgdG9rZW5zLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLnRvcCA9IHRvcDtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250aW51YXRpb24gdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2NvZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrcXVvdGUgY29udGludWF0aW9uIGNhbm5vdCBiZSBwcmVjZWRlZCBieSBhIGNvZGUgYmxvY2tcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhc3RUb2tlbj8udHlwZSA9PT0gJ2Jsb2NrcXVvdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgY29udGludWF0aW9uIGluIG5lc3RlZCBibG9ja3F1b3RlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFRva2VuID0gbGFzdFRva2VuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gb2xkVG9rZW4ucmF3ICsgJ1xcbicgKyBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLmJsb2NrcXVvdGUobmV3VGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPSBuZXdUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgcmF3ID0gcmF3LnN1YnN0cmluZygwLCByYXcubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIG9sZFRva2VuLnRleHQubGVuZ3RoKSArIG5ld1Rva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0VG9rZW4/LnR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIGNvbnRpbnVhdGlvbiBpbiBuZXN0ZWQgbGlzdFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRUb2tlbiA9IGxhc3RUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dCA9IG9sZFRva2VuLnJhdyArICdcXG4nICsgbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5saXN0KG5ld1RleHQpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbmV3VG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHJhdyA9IHJhdy5zdWJzdHJpbmcoMCwgcmF3Lmxlbmd0aCAtIGxhc3RUb2tlbi5yYXcubGVuZ3RoKSArIG5ld1Rva2VuLnJhdztcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gb2xkVG9rZW4ucmF3Lmxlbmd0aCkgKyBuZXdUb2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbmV3VGV4dC5zdWJzdHJpbmcodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5yYXcubGVuZ3RoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jsb2NrcXVvdGUnLFxuICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGlzdChzcmMpIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGxldCBidWxsID0gY2FwWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIHJhdzogJycsXG4gICAgICAgICAgICAgICAgb3JkZXJlZDogaXNvcmRlcmVkLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBpc29yZGVyZWQgPyArYnVsbC5zbGljZSgwLCAtMSkgOiAnJyxcbiAgICAgICAgICAgICAgICBsb29zZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBgXFxcXGR7MSw5fVxcXFwke2J1bGwuc2xpY2UoLTEpfWAgOiBgXFxcXCR7YnVsbH1gO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICAgICAgICAgIGJ1bGwgPSBpc29yZGVyZWQgPyBidWxsIDogJ1sqKy1dJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCBuZXh0IGxpc3QgaXRlbVxuICAgICAgICAgICAgY29uc3QgaXRlbVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiggezAsM30ke2J1bGx9KSgoPzpbXFx0IF1bXlxcXFxuXSopPyg/OlxcXFxufCQpKWApO1xuICAgICAgICAgICAgbGV0IGVuZHNXaXRoQmxhbmtMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjdXJyZW50IGJ1bGxldCBwb2ludCBjYW4gc3RhcnQgYSBuZXcgTGlzdCBJdGVtXG4gICAgICAgICAgICB3aGlsZSAoc3JjKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEVhcmx5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHJhdyA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtQ29udGVudHMgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoIShjYXAgPSBpdGVtUmVnZXguZXhlYyhzcmMpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChzcmMpKSB7IC8vIEVuZCBsaXN0IGlmIGJ1bGxldCB3YXMgYWN0dWFsbHkgSFIgKHBvc3NpYmx5IG1vdmUgaW50byBpdGVtUmVnZXg/KVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmF3ID0gY2FwWzBdO1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcocmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXBbMl0uc3BsaXQoJ1xcbicsIDEpWzBdLnJlcGxhY2UoL15cXHQrLywgKHQpID0+ICcgJy5yZXBlYXQoMyAqIHQubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgbGV0IG5leHRMaW5lID0gc3JjLnNwbGl0KCdcXG4nLCAxKVswXTtcbiAgICAgICAgICAgICAgICBsZXQgYmxhbmtMaW5lID0gIWxpbmUudHJpbSgpO1xuICAgICAgICAgICAgICAgIGxldCBpbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS50cmltU3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYmxhbmtMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGNhcFsxXS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gY2FwWzJdLnNlYXJjaCgvW14gXS8pOyAvLyBGaW5kIGZpcnN0IG5vbi1zcGFjZSBjaGFyXG4gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCA+IDQgPyAxIDogaW5kZW50OyAvLyBUcmVhdCBpbmRlbnRlZCBjb2RlIGJsb2NrcyAoPiA0IHNwYWNlcykgYXMgaGF2aW5nIG9ubHkgMSBpbmRlbnRcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzID0gbGluZS5zbGljZShpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gY2FwWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSAmJiAvXiAqJC8udGVzdChuZXh0TGluZSkpIHsgLy8gSXRlbXMgYmVnaW4gd2l0aCBhdCBtb3N0IG9uZSBibGFuayBsaW5lXG4gICAgICAgICAgICAgICAgICAgIHJhdyArPSBuZXh0TGluZSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKG5leHRMaW5lLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBlbmRFYXJseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZW5kRWFybHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEJ1bGxldFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsIGluZGVudCAtIDEpfX0oPzpbKistXXxcXFxcZHsxLDl9Wy4pXSkoKD86WyBcXHRdW15cXFxcbl0qKT8oPzpcXFxcbnwkKSlgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJSZWdleCA9IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcXFwqICopezMsfSkoPzpcXFxcbit8JClgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVuY2VzQmVnaW5SZWdleCA9IG5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLCBpbmRlbnQgLSAxKX19KD86XFxgXFxgXFxgfH5+filgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGluZ0JlZ2luUmVnZXggPSBuZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMywgaW5kZW50IC0gMSl9fSNgKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZm9sbG93aW5nIGxpbmVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBMaXN0IEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3TGluZSA9IHNyYy5zcGxpdCgnXFxuJywgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluZSA9IHJhd0xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZS1hbGlnbiB0byBmb2xsb3cgY29tbW9ubWFyayBuZXN0aW5nIHJ1bGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUgPSBuZXh0TGluZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csICcgICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBjb2RlIGZlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlbmNlc0JlZ2luUmVnZXgudGVzdChuZXh0TGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZCBsaXN0IGl0ZW0gaWYgZm91bmQgc3RhcnQgb2YgbmV3IGhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkaW5nQmVnaW5SZWdleC50ZXN0KG5leHRMaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIGxpc3QgaXRlbSBpZiBmb3VuZCBzdGFydCBvZiBuZXcgYnVsbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJ1bGxldFJlZ2V4LnRlc3QobmV4dExpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIb3Jpem9udGFsIHJ1bGUgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoclJlZ2V4LnRlc3Qoc3JjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMaW5lLnNlYXJjaCgvW14gXS8pID49IGluZGVudCB8fCAhbmV4dExpbmUudHJpbSgpKSB7IC8vIERlZGVudCBpZiBwb3NzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db250ZW50cyArPSAnXFxuJyArIG5leHRMaW5lLnNsaWNlKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZW5vdWdoIGluZGVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsYW5rTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyYWdyYXBoIGNvbnRpbnVhdGlvbiB1bmxlc3MgbGFzdCBsaW5lIHdhcyBhIGRpZmZlcmVudCBibG9jayBsZXZlbCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUuc2VhcmNoKC9bXiBdLykgPj0gNCkgeyAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVuY2VzQmVnaW5SZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGluZ0JlZ2luUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhyUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvbnRlbnRzICs9ICdcXG4nICsgbmV4dExpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsYW5rTGluZSAmJiAhbmV4dExpbmUudHJpbSgpKSB7IC8vIENoZWNrIGlmIGN1cnJlbnQgbGluZSBpcyBibGFua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rTGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByYXcgKz0gcmF3TGluZSArICdcXG4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhyYXdMaW5lLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IG5leHRMaW5lLnNsaWNlKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBpdGVtIGVuZGVkIHdpdGggYSBibGFuayBsaW5lLCB0aGUgbGlzdCBpcyBsb29zZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kc1dpdGhCbGFua0xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QubG9vc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9cXG4gKlxcbiAqJC8udGVzdChyYXcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRzV2l0aEJsYW5rTGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGlzdGFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGlzY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdGFzayBsaXN0IGl0ZW1zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXN0YXNrID0gL15cXFtbIHhYXVxcXSAvLmV4ZWMoaXRlbUNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNjaGVja2VkID0gaXN0YXNrWzBdICE9PSAnWyBdICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29udGVudHMgPSBpdGVtQ29udGVudHMucmVwbGFjZSgvXlxcW1sgeFhdXFxdICsvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbScsXG4gICAgICAgICAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgICAgICAgICAgdGFzazogISFpc3Rhc2ssXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGlzY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtQ29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIHRva2VuczogW10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGlzdC5yYXcgKz0gcmF3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRG8gbm90IGNvbnN1bWUgbmV3bGluZXMgYXQgZW5kIG9mIGZpbmFsIGl0ZW0uIEFsdGVybmF0aXZlbHksIG1ha2UgaXRlbVJlZ2V4ICpzdGFydCogd2l0aCBhbnkgbmV3bGluZXMgdG8gc2ltcGxpZnkvc3BlZWQgdXAgZW5kc1dpdGhCbGFua0xpbmUgbG9naWNcbiAgICAgICAgICAgIGxpc3QuaXRlbXNbbGlzdC5pdGVtcy5sZW5ndGggLSAxXS5yYXcgPSBsaXN0Lml0ZW1zW2xpc3QuaXRlbXMubGVuZ3RoIC0gMV0ucmF3LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIGxpc3QuaXRlbXNbbGlzdC5pdGVtcy5sZW5ndGggLSAxXS50ZXh0ID0gbGlzdC5pdGVtc1tsaXN0Lml0ZW1zLmxlbmd0aCAtIDFdLnRleHQudHJpbUVuZCgpO1xuICAgICAgICAgICAgbGlzdC5yYXcgPSBsaXN0LnJhdy50cmltRW5kKCk7XG4gICAgICAgICAgICAvLyBJdGVtIGNoaWxkIHRva2VucyBoYW5kbGVkIGhlcmUgYXQgZW5kIGJlY2F1c2Ugd2UgbmVlZGVkIHRvIGhhdmUgdGhlIGZpbmFsIGl0ZW0gdG8gdHJpbSBpdCBmaXJzdFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS50b3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaXN0Lml0ZW1zW2ldLnRva2VucyA9IHRoaXMubGV4ZXIuYmxvY2tUb2tlbnMobGlzdC5pdGVtc1tpXS50ZXh0LCBbXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaXN0Lmxvb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGxpc3Qgc2hvdWxkIGJlIGxvb3NlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYWNlcnMgPSBsaXN0Lml0ZW1zW2ldLnRva2Vucy5maWx0ZXIodCA9PiB0LnR5cGUgPT09ICdzcGFjZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNNdWx0aXBsZUxpbmVCcmVha3MgPSBzcGFjZXJzLmxlbmd0aCA+IDAgJiYgc3BhY2Vycy5zb21lKHQgPT4gL1xcbi4qXFxuLy50ZXN0KHQucmF3KSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3QubG9vc2UgPSBoYXNNdWx0aXBsZUxpbmVCcmVha3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGFsbCBpdGVtcyB0byBsb29zZSBpZiBsaXN0IGlzIGxvb3NlXG4gICAgICAgICAgICBpZiAobGlzdC5sb29zZSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsaXN0Lml0ZW1zW2ldLmxvb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBodG1sKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgYmxvY2s6IHRydWUsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgcHJlOiBjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIHRleHQ6IGNhcFswXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVmKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IGNhcFsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBjYXBbMl0gPyBjYXBbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCAnJDEnKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6IGNhcFszXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RlZicsXG4gICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhYmxlKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKCFjYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIS9bOnxdLy50ZXN0KGNhcFsyXSkpIHtcbiAgICAgICAgICAgIC8vIGRlbGltaXRlciByb3cgbXVzdCBoYXZlIGEgcGlwZSAofCkgb3IgY29sb24gKDopIG90aGVyd2lzZSBpdCBpcyBhIHNldGV4dCBoZWFkaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHNwbGl0Q2VsbHMoY2FwWzFdKTtcbiAgICAgICAgY29uc3QgYWxpZ25zID0gY2FwWzJdLnJlcGxhY2UoL15cXHx8XFx8ICokL2csICcnKS5zcGxpdCgnfCcpO1xuICAgICAgICBjb25zdCByb3dzID0gY2FwWzNdICYmIGNhcFszXS50cmltKCkgPyBjYXBbM10ucmVwbGFjZSgvXFxuWyBcXHRdKiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW107XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICBoZWFkZXI6IFtdLFxuICAgICAgICAgICAgYWxpZ246IFtdLFxuICAgICAgICAgICAgcm93czogW10sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAhPT0gYWxpZ25zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gaGVhZGVyIGFuZCBhbGlnbiBjb2x1bW5zIG11c3QgYmUgZXF1YWwsIHJvd3MgY2FuIGJlIGRpZmZlcmVudC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGFsaWduIG9mIGFsaWducykge1xuICAgICAgICAgICAgaWYgKC9eICotKzogKiQvLnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL14gKjotKzogKiQvLnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdjZW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKC9eICo6LSsgKiQvLnRlc3QoYWxpZ24pKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5hbGlnbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLmFsaWduLnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtLmhlYWRlci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBoZWFkZXJzW2ldLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoaGVhZGVyc1tpXSksXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsaWduOiBpdGVtLmFsaWduW2ldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICAgICAgaXRlbS5yb3dzLnB1c2goc3BsaXRDZWxscyhyb3csIGl0ZW0uaGVhZGVyLmxlbmd0aCkubWFwKChjZWxsLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZShjZWxsKSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ246IGl0ZW0uYWxpZ25baV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgbGhlYWRpbmcoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICBkZXB0aDogY2FwWzJdLmNoYXJBdCgwKSA9PT0gJz0nID8gMSA6IDIsXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzFdLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmUoY2FwWzFdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYWdyYXBoKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgICA6IGNhcFsxXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lKHRleHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXh0KHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZShjYXBbMF0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlc2NhcGUoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2VzY2FwZScsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dDogZXNjYXBlJDEoY2FwWzFdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGFnKHNyYykge1xuICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rICYmIC9ePGEgL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsgJiYgL148XFwvYT4vaS50ZXN0KGNhcFswXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnN0YXRlLmluTGluayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgJiYgL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxcc3w+KS9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2sgJiYgL148XFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxcc3w+KS9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgaW5MaW5rOiB0aGlzLmxleGVyLnN0YXRlLmluTGluayxcbiAgICAgICAgICAgICAgICBpblJhd0Jsb2NrOiB0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssXG4gICAgICAgICAgICAgICAgYmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRleHQ6IGNhcFswXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGluayhzcmMpIHtcbiAgICAgICAgY29uc3QgY2FwID0gdGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWRVcmwgPSBjYXBbMl0udHJpbSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucGVkYW50aWMgJiYgL148Ly50ZXN0KHRyaW1tZWRVcmwpKSB7XG4gICAgICAgICAgICAgICAgLy8gY29tbW9ubWFyayByZXF1aXJlcyBtYXRjaGluZyBhbmdsZSBicmFja2V0c1xuICAgICAgICAgICAgICAgIGlmICghKC8+JC8udGVzdCh0cmltbWVkVXJsKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbmRpbmcgYW5nbGUgYnJhY2tldCBjYW5ub3QgYmUgZXNjYXBlZFxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0cmltU2xhc2ggPSBydHJpbSh0cmltbWVkVXJsLnNsaWNlKDAsIC0xKSwgJ1xcXFwnKTtcbiAgICAgICAgICAgICAgICBpZiAoKHRyaW1tZWRVcmwubGVuZ3RoIC0gcnRyaW1TbGFzaC5sZW5ndGgpICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFBhcmVuSW5kZXggPSBmaW5kQ2xvc2luZ0JyYWNrZXQoY2FwWzJdLCAnKCknKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFBhcmVuSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGNhcFswXS5pbmRleE9mKCchJykgPT09IDAgPyA1IDogNDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua0xlbiA9IHN0YXJ0ICsgY2FwWzFdLmxlbmd0aCArIGxhc3RQYXJlbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjYXBbMl0gPSBjYXBbMl0uc3Vic3RyaW5nKDAsIGxhc3RQYXJlbkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY2FwWzBdID0gY2FwWzBdLnN1YnN0cmluZygwLCBsaW5rTGVuKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGNhcFszXSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBocmVmID0gY2FwWzJdO1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgcGVkYW50aWMgaHJlZiBhbmQgdGl0bGVcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gL14oW14nXCJdKlteXFxzXSlcXHMrKFsnXCJdKSguKilcXDIvLmV4ZWMoaHJlZik7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGxpbmtbMV07XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gbGlua1szXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGNhcFszXSA/IGNhcFszXS5zbGljZSgxLCAtMSkgOiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhyZWYgPSBocmVmLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgvXjwvLnRlc3QoaHJlZikpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljICYmICEoLz4kLy50ZXN0KHRyaW1tZWRVcmwpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBwZWRhbnRpYyBhbGxvd3Mgc3RhcnRpbmcgYW5nbGUgYnJhY2tldCB3aXRob3V0IGVuZGluZyBhbmdsZSBicmFja2V0XG4gICAgICAgICAgICAgICAgICAgIGhyZWYgPSBocmVmLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRMaW5rKGNhcCwge1xuICAgICAgICAgICAgICAgIGhyZWY6IGhyZWYgPyBocmVmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sICckMScpIDogaHJlZixcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUgPyB0aXRsZS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCAnJDEnKSA6IHRpdGxlLFxuICAgICAgICAgICAgfSwgY2FwWzBdLCB0aGlzLmxleGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWZsaW5rKHNyYywgbGlua3MpIHtcbiAgICAgICAgbGV0IGNhcDtcbiAgICAgICAgaWYgKChjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMoc3JjKSlcbiAgICAgICAgICAgIHx8IChjYXAgPSB0aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhzcmMpKSkge1xuICAgICAgICAgICAgY29uc3QgbGlua1N0cmluZyA9IChjYXBbMl0gfHwgY2FwWzFdKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gbGlua3NbbGlua1N0cmluZy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjYXBbMF0uY2hhckF0KDApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgcmF3OiB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0TGluayhjYXAsIGxpbmssIGNhcFswXSwgdGhpcy5sZXhlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1TdHJvbmcoc3JjLCBtYXNrZWRTcmMsIHByZXZDaGFyID0gJycpIHtcbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhzcmMpO1xuICAgICAgICBpZiAoIW1hdGNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBfIGNhbid0IGJlIGJldHdlZW4gdHdvIGFscGhhbnVtZXJpY3MuIFxccHtMfVxccHtOfSBpbmNsdWRlcyBub24tZW5nbGlzaCBhbHBoYWJldC9udW1iZXJzIGFzIHdlbGxcbiAgICAgICAgaWYgKG1hdGNoWzNdICYmIHByZXZDaGFyLm1hdGNoKC9bXFxwe0x9XFxwe059XS91KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSBtYXRjaFsxXSB8fCBtYXRjaFsyXSB8fCAnJztcbiAgICAgICAgaWYgKCFuZXh0Q2hhciB8fCAhcHJldkNoYXIgfHwgdGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgIC8vIHVuaWNvZGUgUmVnZXggY291bnRzIGVtb2ppIGFzIDEgY2hhcjsgc3ByZWFkIGludG8gYXJyYXkgZm9yIHByb3BlciBjb3VudCAodXNlZCBtdWx0aXBsZSB0aW1lcyBiZWxvdylcbiAgICAgICAgICAgIGNvbnN0IGxMZW5ndGggPSBbLi4ubWF0Y2hbMF1dLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBsZXQgckRlbGltLCByTGVuZ3RoLCBkZWxpbVRvdGFsID0gbExlbmd0aCwgbWlkRGVsaW1Ub3RhbCA9IDA7XG4gICAgICAgICAgICBjb25zdCBlbmRSZWcgPSBtYXRjaFswXVswXSA9PT0gJyonID8gdGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3QgOiB0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ1JEZWxpbVVuZDtcbiAgICAgICAgICAgIGVuZFJlZy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgLy8gQ2xpcCBtYXNrZWRTcmMgdG8gc2FtZSBzZWN0aW9uIG9mIHN0cmluZyBhcyBzcmMgKG1vdmUgdG8gbGV4ZXI/KVxuICAgICAgICAgICAgbWFza2VkU3JjID0gbWFza2VkU3JjLnNsaWNlKC0xICogc3JjLmxlbmd0aCArIGxMZW5ndGgpO1xuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IGVuZFJlZy5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByRGVsaW0gPSBtYXRjaFsxXSB8fCBtYXRjaFsyXSB8fCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBtYXRjaFs2XTtcbiAgICAgICAgICAgICAgICBpZiAoIXJEZWxpbSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgc2luZ2xlICogaW4gX19hYmMqYWJjX19cbiAgICAgICAgICAgICAgICByTGVuZ3RoID0gWy4uLnJEZWxpbV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaFszXSB8fCBtYXRjaFs0XSkgeyAvLyBmb3VuZCBhbm90aGVyIExlZnQgRGVsaW1cbiAgICAgICAgICAgICAgICAgICAgZGVsaW1Ub3RhbCArPSByTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbNV0gfHwgbWF0Y2hbNl0pIHsgLy8gZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxMZW5ndGggJSAzICYmICEoKGxMZW5ndGggKyByTGVuZ3RoKSAlIDMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaWREZWxpbVRvdGFsICs9IHJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gQ29tbW9uTWFyayBFbXBoYXNpcyBSdWxlcyA5LTEwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsaW1Ub3RhbCAtPSByTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChkZWxpbVRvdGFsID4gMClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIEhhdmVuJ3QgZm91bmQgZW5vdWdoIGNsb3NpbmcgZGVsaW1pdGVyc1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBleHRyYSBjaGFyYWN0ZXJzLiAqYSoqKiAtPiAqYSpcbiAgICAgICAgICAgICAgICByTGVuZ3RoID0gTWF0aC5taW4ockxlbmd0aCwgckxlbmd0aCArIGRlbGltVG90YWwgKyBtaWREZWxpbVRvdGFsKTtcbiAgICAgICAgICAgICAgICAvLyBjaGFyIGxlbmd0aCBjYW4gYmUgPjEgZm9yIHVuaWNvZGUgY2hhcmFjdGVycztcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hhckxlbmd0aCA9IFsuLi5tYXRjaFswXV1bMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IHNyYy5zbGljZSgwLCBsTGVuZ3RoICsgbWF0Y2guaW5kZXggKyBsYXN0Q2hhckxlbmd0aCArIHJMZW5ndGgpO1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBgZW1gIGlmIHNtYWxsZXN0IGRlbGltaXRlciBoYXMgb2RkIGNoYXIgY291bnQuICphKioqXG4gICAgICAgICAgICAgICAgaWYgKE1hdGgubWluKGxMZW5ndGgsIHJMZW5ndGgpICUgMikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0aGlzLmxleGVyLmlubGluZVRva2Vucyh0ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlICdzdHJvbmcnIGlmIHNtYWxsZXN0IGRlbGltaXRlciBoYXMgZXZlbiBjaGFyIGNvdW50LiAqKmEqKipcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gcmF3LnNsaWNlKDIsIC0yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3Ryb25nJyxcbiAgICAgICAgICAgICAgICAgICAgcmF3LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRleHQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29kZXNwYW4oc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dCA9IGNhcFsyXS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc05vblNwYWNlQ2hhcnMgPSAvW14gXS8udGVzdCh0ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzID0gL14gLy50ZXN0KHRleHQpICYmIC8gJC8udGVzdCh0ZXh0KTtcbiAgICAgICAgICAgIGlmIChoYXNOb25TcGFjZUNoYXJzICYmIGhhc1NwYWNlQ2hhcnNPbkJvdGhFbmRzKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ID0gZXNjYXBlJDEodGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjb2Rlc3BhbicsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnIoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYnInLFxuICAgICAgICAgICAgICAgIHJhdzogY2FwWzBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWwoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHNyYyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RlbCcsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dDogY2FwWzJdLFxuICAgICAgICAgICAgICAgIHRva2VuczogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoY2FwWzJdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXV0b2xpbmsoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoc3JjKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgbGV0IHRleHQsIGhyZWY7XG4gICAgICAgICAgICBpZiAoY2FwWzJdID09PSAnQCcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gZXNjYXBlJDEoY2FwWzFdKTtcbiAgICAgICAgICAgICAgICBocmVmID0gJ21haWx0bzonICsgdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRleHQgPSBlc2NhcGUkMShjYXBbMV0pO1xuICAgICAgICAgICAgICAgIGhyZWYgPSB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICAgIHRva2VuczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHVybChzcmMpIHtcbiAgICAgICAgbGV0IGNhcDtcbiAgICAgICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKHNyYykpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0LCBocmVmO1xuICAgICAgICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGVzY2FwZSQxKGNhcFswXSk7XG4gICAgICAgICAgICAgICAgaHJlZiA9ICdtYWlsdG86JyArIHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBleHRlbmRlZCBhdXRvbGluayBwYXRoIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBsZXQgcHJldkNhcFplcm87XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2FwWmVybyA9IGNhcFswXTtcbiAgICAgICAgICAgICAgICAgICAgY2FwWzBdID0gdGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGNhcFswXSk/LlswXSA/PyAnJztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChwcmV2Q2FwWmVybyAhPT0gY2FwWzBdKTtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gZXNjYXBlJDEoY2FwWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FwWzFdID09PSAnd3d3LicpIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9ICdodHRwOi8vJyArIGNhcFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhyZWYgPSBjYXBbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICAgICAgcmF3OiBjYXBbMF0sXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICAgIHRva2VuczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlubGluZVRleHQoc3JjKSB7XG4gICAgICAgIGNvbnN0IGNhcCA9IHRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhzcmMpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2spIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY2FwWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGVzY2FwZSQxKGNhcFswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICByYXc6IGNhcFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBCbG9jay1MZXZlbCBHcmFtbWFyXG4gKi9cbmNvbnN0IG5ld2xpbmUgPSAvXig/OiAqKD86XFxufCQpKSsvO1xuY29uc3QgYmxvY2tDb2RlID0gL14oIHs0fVteXFxuXSsoPzpcXG4oPzogKig/OlxcbnwkKSkqKT8pKy87XG5jb25zdCBmZW5jZXMgPSAvXiB7MCwzfShgezMsfSg/PVteYFxcbl0qKD86XFxufCQpKXx+ezMsfSkoW15cXG5dKikoPzpcXG58JCkoPzp8KFtcXHNcXFNdKj8pKD86XFxufCQpKSg/OiB7MCwzfVxcMVt+YF0qICooPz1cXG58JCl8JCkvO1xuY29uc3QgaHIgPSAvXiB7MCwzfSgoPzotW1xcdCBdKil7Myx9fCg/Ol9bIFxcdF0qKXszLH18KD86XFwqWyBcXHRdKil7Myx9KSg/Olxcbit8JCkvO1xuY29uc3QgaGVhZGluZyA9IC9eIHswLDN9KCN7MSw2fSkoPz1cXHN8JCkoLiopKD86XFxuK3wkKS87XG5jb25zdCBidWxsZXQgPSAvKD86WyorLV18XFxkezEsOX1bLildKS87XG5jb25zdCBsaGVhZGluZyA9IGVkaXQoL14oPyFidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sKSgoPzoufFxcbig/IVxccyo/XFxufGJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWwpKSs/KVxcbiB7MCwzfSg9K3wtKykgKig/Olxcbit8JCkvKVxuICAgIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldCkgLy8gbGlzdHMgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKC9ibG9ja0NvZGUvZywgLyB7NH0vKSAvLyBpbmRlbnRlZCBjb2RlIGJsb2NrcyBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoL2ZlbmNlcy9nLCAvIHswLDN9KD86YHszLH18fnszLH0pLykgLy8gZmVuY2VkIGNvZGUgYmxvY2tzIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgvYmxvY2txdW90ZS9nLCAvIHswLDN9Pi8pIC8vIGJsb2NrcXVvdGUgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKC9oZWFkaW5nL2csIC8gezAsM30jezEsNn0vKSAvLyBBVFggaGVhZGluZyBjYW4gaW50ZXJydXB0XG4gICAgLnJlcGxhY2UoL2h0bWwvZywgLyB7MCwzfTxbXlxcbj5dKz5cXG4vKSAvLyBibG9jayBodG1sIGNhbiBpbnRlcnJ1cHRcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF9wYXJhZ3JhcGggPSAvXihbXlxcbl0rKD86XFxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcXG4pW15cXG5dKykqKS87XG5jb25zdCBibG9ja1RleHQgPSAvXlteXFxuXSsvO1xuY29uc3QgX2Jsb2NrTGFiZWwgPSAvKD8hXFxzKlxcXSkoPzpcXFxcLnxbXlxcW1xcXVxcXFxdKSsvO1xuY29uc3QgZGVmID0gZWRpdCgvXiB7MCwzfVxcWyhsYWJlbClcXF06ICooPzpcXG4gKik/KFtePFxcc11bXlxcc10qfDwuKj8+KSg/Oig/OiArKD86XFxuICopP3wgKlxcbiAqKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgX2Jsb2NrTGFiZWwpXG4gICAgLnJlcGxhY2UoJ3RpdGxlJywgLyg/OlwiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCdbXidcXG5dKig/OlxcblteJ1xcbl0rKSpcXG4/J3xcXChbXigpXSpcXCkpLylcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGxpc3QgPSBlZGl0KC9eKCB7MCwzfWJ1bGwpKFsgXFx0XVteXFxuXSs/KT8oPzpcXG58JCkvKVxuICAgIC5yZXBsYWNlKC9idWxsL2csIGJ1bGxldClcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IF90YWcgPSAnYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb24nXG4gICAgKyAnfGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9uJ1xuICAgICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICAgICsgJ3xsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9uJ1xuICAgICsgJ3xwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGUnXG4gICAgKyAnfHRyfHRyYWNrfHVsJztcbmNvbnN0IF9jb21tZW50ID0gLzwhLS0oPzotPz58W1xcc1xcU10qPyg/Oi0tPnwkKSkvO1xuY29uc3QgaHRtbCA9IGVkaXQoJ14gezAsM30oPzonIC8vIG9wdGlvbmFsIGluZGVudGF0aW9uXG4gICAgKyAnPChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4gICAgKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbiAgICArICd8PFxcXFw/W1xcXFxzXFxcXFNdKj8oPzpcXFxcPz5cXFxcbip8JCknIC8vICgzKVxuICAgICsgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8oPzo+XFxcXG4qfCQpJyAvLyAoNClcbiAgICArICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qPyg/OlxcXFxdXFxcXF0+XFxcXG4qfCQpJyAvLyAoNSlcbiAgICArICd8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcbiAqKStcXFxcbnwkKScgLy8gKDYpXG4gICAgKyAnfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXFxcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFxcXHRdKig/OlxcXFxufCQpKVtcXFxcc1xcXFxTXSo/KD86KD86XFxcXG4gKikrXFxcXG58JCknIC8vICg3KSBvcGVuIHRhZ1xuICAgICsgJ3w8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFxcXHctXSpcXFxccyo+KD89WyBcXFxcdF0qKD86XFxcXG58JCkpW1xcXFxzXFxcXFNdKj8oPzooPzpcXFxcbiAqKStcXFxcbnwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4gICAgKyAnKScsICdpJylcbiAgICAucmVwbGFjZSgnY29tbWVudCcsIF9jb21tZW50KVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKVxuICAgIC5yZXBsYWNlKCdhdHRyaWJ1dGUnLCAvICtbYS16QS1aOl9dW1xcdy46LV0qKD86ICo9ICpcIlteXCJcXG5dKlwifCAqPSAqJ1teJ1xcbl0qJ3wgKj0gKlteXFxzXCInPTw+YF0rKT8vKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgcGFyYWdyYXBoID0gZWRpdChfcGFyYWdyYXBoKVxuICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgIC5yZXBsYWNlKCdoZWFkaW5nJywgJyB7MCwzfSN7MSw2fSg/OlxcXFxzfCQpJylcbiAgICAucmVwbGFjZSgnfGxoZWFkaW5nJywgJycpIC8vIHNldGV4dCBoZWFkaW5ncyBkb24ndCBpbnRlcnJ1cHQgY29tbW9ubWFyayBwYXJhZ3JhcGhzXG4gICAgLnJlcGxhY2UoJ3x0YWJsZScsICcnKVxuICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgIC5yZXBsYWNlKCdmZW5jZXMnLCAnIHswLDN9KD86YHszLH0oPz1bXmBcXFxcbl0qXFxcXG4pfH57Myx9KVteXFxcXG5dKlxcXFxuJylcbiAgICAucmVwbGFjZSgnbGlzdCcsICcgezAsM30oPzpbKistXXwxWy4pXSkgJykgLy8gb25seSBsaXN0cyBzdGFydGluZyBmcm9tIDEgY2FuIGludGVycnVwdFxuICAgIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAgIC5yZXBsYWNlKCd0YWcnLCBfdGFnKSAvLyBwYXJzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgYmxvY2txdW90ZSA9IGVkaXQoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxcbl0qKSg/OlxcbnwkKSkrLylcbiAgICAucmVwbGFjZSgncGFyYWdyYXBoJywgcGFyYWdyYXBoKVxuICAgIC5nZXRSZWdleCgpO1xuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5jb25zdCBibG9ja05vcm1hbCA9IHtcbiAgICBibG9ja3F1b3RlLFxuICAgIGNvZGU6IGJsb2NrQ29kZSxcbiAgICBkZWYsXG4gICAgZmVuY2VzLFxuICAgIGhlYWRpbmcsXG4gICAgaHIsXG4gICAgaHRtbCxcbiAgICBsaGVhZGluZyxcbiAgICBsaXN0LFxuICAgIG5ld2xpbmUsXG4gICAgcGFyYWdyYXBoLFxuICAgIHRhYmxlOiBub29wVGVzdCxcbiAgICB0ZXh0OiBibG9ja1RleHQsXG59O1xuLyoqXG4gKiBHRk0gQmxvY2sgR3JhbW1hclxuICovXG5jb25zdCBnZm1UYWJsZSA9IGVkaXQoJ14gKihbXlxcXFxuIF0uKilcXFxcbicgLy8gSGVhZGVyXG4gICAgKyAnIHswLDN9KCg/OlxcXFx8ICopPzo/LSs6PyAqKD86XFxcXHwgKjo/LSs6PyAqKSooPzpcXFxcfCAqKT8pJyAvLyBBbGlnblxuICAgICsgJyg/OlxcXFxuKCg/Oig/ISAqXFxcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcXFxufCQpKSopXFxcXG4qfCQpJykgLy8gQ2VsbHNcbiAgICAucmVwbGFjZSgnaHInLCBocilcbiAgICAucmVwbGFjZSgnaGVhZGluZycsICcgezAsM30jezEsNn0oPzpcXFxcc3wkKScpXG4gICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgLnJlcGxhY2UoJ2NvZGUnLCAnIHs0fVteXFxcXG5dJylcbiAgICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gICAgLnJlcGxhY2UoJ2xpc3QnLCAnIHswLDN9KD86WyorLV18MVsuKV0pICcpIC8vIG9ubHkgbGlzdHMgc3RhcnRpbmcgZnJvbSAxIGNhbiBpbnRlcnJ1cHRcbiAgICAucmVwbGFjZSgnaHRtbCcsICc8Lz8oPzp0YWcpKD86ICt8XFxcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pJylcbiAgICAucmVwbGFjZSgndGFnJywgX3RhZykgLy8gdGFibGVzIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBlICg2KSBodG1sIGJsb2Nrc1xuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgYmxvY2tHZm0gPSB7XG4gICAgLi4uYmxvY2tOb3JtYWwsXG4gICAgdGFibGU6IGdmbVRhYmxlLFxuICAgIHBhcmFncmFwaDogZWRpdChfcGFyYWdyYXBoKVxuICAgICAgICAucmVwbGFjZSgnaHInLCBocilcbiAgICAgICAgLnJlcGxhY2UoJ2hlYWRpbmcnLCAnIHswLDN9I3sxLDZ9KD86XFxcXHN8JCknKVxuICAgICAgICAucmVwbGFjZSgnfGxoZWFkaW5nJywgJycpIC8vIHNldGV4dCBoZWFkaW5ncyBkb24ndCBpbnRlcnJ1cHQgY29tbW9ubWFyayBwYXJhZ3JhcGhzXG4gICAgICAgIC5yZXBsYWNlKCd0YWJsZScsIGdmbVRhYmxlKSAvLyBpbnRlcnJ1cHQgcGFyYWdyYXBocyB3aXRoIHRhYmxlXG4gICAgICAgIC5yZXBsYWNlKCdibG9ja3F1b3RlJywgJyB7MCwzfT4nKVxuICAgICAgICAucmVwbGFjZSgnZmVuY2VzJywgJyB7MCwzfSg/OmB7Myx9KD89W15gXFxcXG5dKlxcXFxuKXx+ezMsfSlbXlxcXFxuXSpcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKCdsaXN0JywgJyB7MCwzfSg/OlsqKy1dfDFbLildKSAnKSAvLyBvbmx5IGxpc3RzIHN0YXJ0aW5nIGZyb20gMSBjYW4gaW50ZXJydXB0XG4gICAgICAgIC5yZXBsYWNlKCdodG1sJywgJzwvPyg/OnRhZykoPzogK3xcXFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSknKVxuICAgICAgICAucmVwbGFjZSgndGFnJywgX3RhZykgLy8gcGFycyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgdHlwZSAoNikgaHRtbCBibG9ja3NcbiAgICAgICAgLmdldFJlZ2V4KCksXG59O1xuLyoqXG4gKiBQZWRhbnRpYyBncmFtbWFyIChvcmlnaW5hbCBKb2huIEdydWJlcidzIGxvb3NlIG1hcmtkb3duIHNwZWNpZmljYXRpb24pXG4gKi9cbmNvbnN0IGJsb2NrUGVkYW50aWMgPSB7XG4gICAgLi4uYmxvY2tOb3JtYWwsXG4gICAgaHRtbDogZWRpdCgnXiAqKD86Y29tbWVudCAqKD86XFxcXG58XFxcXHMqJCknXG4gICAgICAgICsgJ3w8KHRhZylbXFxcXHNcXFxcU10rPzwvXFxcXDE+ICooPzpcXFxcbnsyLH18XFxcXHMqJCknIC8vIGNsb3NlZCB0YWdcbiAgICAgICAgKyAnfDx0YWcoPzpcIlteXCJdKlwifFxcJ1teXFwnXSpcXCd8XFxcXHNbXlxcJ1wiLz5cXFxcc10qKSo/Lz8+ICooPzpcXFxcbnsyLH18XFxcXHMqJCkpJylcbiAgICAgICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBfY29tbWVudClcbiAgICAgICAgLnJlcGxhY2UoL3RhZy9nLCAnKD8hKD86J1xuICAgICAgICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3ViJ1xuICAgICAgICArICd8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKSdcbiAgICAgICAgKyAnXFxcXGIpXFxcXHcrKD8hOnxbXlxcXFx3XFxcXHNAXSpAKVxcXFxiJylcbiAgICAgICAgLmdldFJlZ2V4KCksXG4gICAgZGVmOiAvXiAqXFxbKFteXFxdXSspXFxdOiAqPD8oW15cXHM+XSspPj8oPzogKyhbXCIoXVteXFxuXStbXCIpXSkpPyAqKD86XFxuK3wkKS8sXG4gICAgaGVhZGluZzogL14oI3sxLDZ9KSguKikoPzpcXG4rfCQpLyxcbiAgICBmZW5jZXM6IG5vb3BUZXN0LCAvLyBmZW5jZXMgbm90IHN1cHBvcnRlZFxuICAgIGxoZWFkaW5nOiAvXiguKz8pXFxuIHswLDN9KD0rfC0rKSAqKD86XFxuK3wkKS8sXG4gICAgcGFyYWdyYXBoOiBlZGl0KF9wYXJhZ3JhcGgpXG4gICAgICAgIC5yZXBsYWNlKCdocicsIGhyKVxuICAgICAgICAucmVwbGFjZSgnaGVhZGluZycsICcgKiN7MSw2fSAqW15cXG5dJylcbiAgICAgICAgLnJlcGxhY2UoJ2xoZWFkaW5nJywgbGhlYWRpbmcpXG4gICAgICAgIC5yZXBsYWNlKCd8dGFibGUnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ2Jsb2NrcXVvdGUnLCAnIHswLDN9PicpXG4gICAgICAgIC5yZXBsYWNlKCd8ZmVuY2VzJywgJycpXG4gICAgICAgIC5yZXBsYWNlKCd8bGlzdCcsICcnKVxuICAgICAgICAucmVwbGFjZSgnfGh0bWwnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ3x0YWcnLCAnJylcbiAgICAgICAgLmdldFJlZ2V4KCksXG59O1xuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5jb25zdCBlc2NhcGUgPSAvXlxcXFwoWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BcXFtcXF1cXFxcXl9ge3x9fl0pLztcbmNvbnN0IGlubGluZUNvZGUgPSAvXihgKykoW15gXXxbXmBdW1xcc1xcU10qP1teYF0pXFwxKD8hYCkvO1xuY29uc3QgYnIgPSAvXiggezIsfXxcXFxcKVxcbig/IVxccyokKS87XG5jb25zdCBpbmxpbmVUZXh0ID0gL14oYCt8W15gXSkoPzooPz0gezIsfVxcbil8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKl9dfFxcYl98JCl8W14gXSg/PSB7Mix9XFxuKSkpLztcbi8vIGxpc3Qgb2YgdW5pY29kZSBwdW5jdHVhdGlvbiBtYXJrcywgcGx1cyBhbnkgbWlzc2luZyBjaGFyYWN0ZXJzIGZyb20gQ29tbW9uTWFyayBzcGVjXG5jb25zdCBfcHVuY3R1YXRpb24gPSAnXFxcXHB7UH1cXFxccHtTfSc7XG5jb25zdCBwdW5jdHVhdGlvbiA9IGVkaXQoL14oKD8hWypfXSlbXFxzcHVuY3R1YXRpb25dKS8sICd1JylcbiAgICAucmVwbGFjZSgvcHVuY3R1YXRpb24vZywgX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1xuLy8gc2VxdWVuY2VzIGVtIHNob3VsZCBza2lwIG92ZXIgW3RpdGxlXShsaW5rKSwgYGNvZGVgLCA8aHRtbD5cbmNvbnN0IGJsb2NrU2tpcCA9IC9cXFtbXltcXF1dKj9cXF1cXChbXlxcKFxcKV0qP1xcKXxgW15gXSo/YHw8W148Pl0qPz4vZztcbmNvbnN0IGVtU3Ryb25nTERlbGltID0gZWRpdCgvXig/OlxcKisoPzooKD8hXFwqKVtwdW5jdF0pfFteXFxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cXHNfXSkpLywgJ3UnKVxuICAgIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBlbVN0cm9uZ1JEZWxpbUFzdCA9IGVkaXQoJ15bXl8qXSo/X19bXl8qXSo/XFxcXCpbXl8qXSo/KD89X18pJyAvLyBTa2lwIG9ycGhhbiBpbnNpZGUgc3Ryb25nXG4gICAgKyAnfFteKl0rKD89W14qXSknIC8vIENvbnN1bWUgdG8gZGVsaW1cbiAgICArICd8KD8hXFxcXCopW3B1bmN0XShcXFxcKispKD89W1xcXFxzXXwkKScgLy8gKDEpICMqKiogY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8W15wdW5jdFxcXFxzXShcXFxcKispKD8hXFxcXCopKD89W3B1bmN0XFxcXHNdfCQpJyAvLyAoMikgYSoqKiMsIGEqKiogY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8KD8hXFxcXCopW3B1bmN0XFxcXHNdKFxcXFwqKykoPz1bXnB1bmN0XFxcXHNdKScgLy8gKDMpICMqKiphLCAqKiphIGNhbiBvbmx5IGJlIExlZnQgRGVsaW1pdGVyXG4gICAgKyAnfFtcXFxcc10oXFxcXCorKSg/IVxcXFwqKSg/PVtwdW5jdF0pJyAvLyAoNCkgKioqIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3woPyFcXFxcKilbcHVuY3RdKFxcXFwqKykoPyFcXFxcKikoPz1bcHVuY3RdKScgLy8gKDUpICMqKiojIGNhbiBiZSBlaXRoZXIgTGVmdCBvciBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8W15wdW5jdFxcXFxzXShcXFxcKispKD89W15wdW5jdFxcXFxzXSknLCAnZ3UnKSAvLyAoNikgYSoqKmEgY2FuIGJlIGVpdGhlciBMZWZ0IG9yIFJpZ2h0IERlbGltaXRlclxuICAgIC5yZXBsYWNlKC9wdW5jdC9nLCBfcHVuY3R1YXRpb24pXG4gICAgLmdldFJlZ2V4KCk7XG4vLyAoNikgTm90IGFsbG93ZWQgZm9yIF9cbmNvbnN0IGVtU3Ryb25nUkRlbGltVW5kID0gZWRpdCgnXlteXypdKj9cXFxcKlxcXFwqW15fKl0qP19bXl8qXSo/KD89XFxcXCpcXFxcKiknIC8vIFNraXAgb3JwaGFuIGluc2lkZSBzdHJvbmdcbiAgICArICd8W15fXSsoPz1bXl9dKScgLy8gQ29uc3VtZSB0byBkZWxpbVxuICAgICsgJ3woPyFfKVtwdW5jdF0oXyspKD89W1xcXFxzXXwkKScgLy8gKDEpICNfX18gY2FuIG9ubHkgYmUgYSBSaWdodCBEZWxpbWl0ZXJcbiAgICArICd8W15wdW5jdFxcXFxzXShfKykoPyFfKSg/PVtwdW5jdFxcXFxzXXwkKScgLy8gKDIpIGFfX18jLCBhX19fIGNhbiBvbmx5IGJlIGEgUmlnaHQgRGVsaW1pdGVyXG4gICAgKyAnfCg/IV8pW3B1bmN0XFxcXHNdKF8rKSg/PVtecHVuY3RcXFxcc10pJyAvLyAoMykgI19fX2EsIF9fX2EgY2FuIG9ubHkgYmUgTGVmdCBEZWxpbWl0ZXJcbiAgICArICd8W1xcXFxzXShfKykoPyFfKSg/PVtwdW5jdF0pJyAvLyAoNCkgX19fIyBjYW4gb25seSBiZSBMZWZ0IERlbGltaXRlclxuICAgICsgJ3woPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKScsICdndScpIC8vICg1KSAjX19fIyBjYW4gYmUgZWl0aGVyIExlZnQgb3IgUmlnaHQgRGVsaW1pdGVyXG4gICAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGFueVB1bmN0dWF0aW9uID0gZWRpdCgvXFxcXChbcHVuY3RdKS8sICdndScpXG4gICAgLnJlcGxhY2UoL3B1bmN0L2csIF9wdW5jdHVhdGlvbilcbiAgICAuZ2V0UmVnZXgoKTtcbmNvbnN0IGF1dG9saW5rID0gZWRpdCgvXjwoc2NoZW1lOlteXFxzXFx4MDAtXFx4MWY8Pl0qfGVtYWlsKT4vKVxuICAgIC5yZXBsYWNlKCdzY2hlbWUnLCAvW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8pXG4gICAgLnJlcGxhY2UoJ2VtYWlsJywgL1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBfaW5saW5lQ29tbWVudCA9IGVkaXQoX2NvbW1lbnQpLnJlcGxhY2UoJyg/Oi0tPnwkKScsICctLT4nKS5nZXRSZWdleCgpO1xuY29uc3QgdGFnID0gZWRpdCgnXmNvbW1lbnQnXG4gICAgKyAnfF48L1thLXpBLVpdW1xcXFx3Oi1dKlxcXFxzKj4nIC8vIHNlbGYtY2xvc2luZyB0YWdcbiAgICArICd8XjxbYS16QS1aXVtcXFxcdy1dKig/OmF0dHJpYnV0ZSkqP1xcXFxzKi8/PicgLy8gb3BlbiB0YWdcbiAgICArICd8XjxcXFxcP1tcXFxcc1xcXFxTXSo/XFxcXD8+JyAvLyBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCBlLmcuIDw/cGhwID8+XG4gICAgKyAnfF48IVthLXpBLVpdK1xcXFxzW1xcXFxzXFxcXFNdKj8+JyAvLyBkZWNsYXJhdGlvbiwgZS5nLiA8IURPQ1RZUEUgaHRtbD5cbiAgICArICd8XjwhXFxcXFtDREFUQVxcXFxbW1xcXFxzXFxcXFNdKj9cXFxcXVxcXFxdPicpIC8vIENEQVRBIHNlY3Rpb25cbiAgICAucmVwbGFjZSgnY29tbWVudCcsIF9pbmxpbmVDb21tZW50KVxuICAgIC5yZXBsYWNlKCdhdHRyaWJ1dGUnLCAvXFxzK1thLXpBLVo6X11bXFx3LjotXSooPzpcXHMqPVxccypcIlteXCJdKlwifFxccyo9XFxzKidbXiddKid8XFxzKj1cXHMqW15cXHNcIic9PD5gXSspPy8pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCBfaW5saW5lTGFiZWwgPSAvKD86XFxbKD86XFxcXC58W15cXFtcXF1cXFxcXSkqXFxdfFxcXFwufGBbXmBdKmB8W15cXFtcXF1cXFxcYF0pKj8vO1xuY29uc3QgbGluayA9IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXChcXHMqKGhyZWYpKD86XFxzKyh0aXRsZSkpP1xccypcXCkvKVxuICAgIC5yZXBsYWNlKCdsYWJlbCcsIF9pbmxpbmVMYWJlbClcbiAgICAucmVwbGFjZSgnaHJlZicsIC88KD86XFxcXC58W15cXG48PlxcXFxdKSs+fFteXFxzXFx4MDAtXFx4MWZdKi8pXG4gICAgLnJlcGxhY2UoJ3RpdGxlJywgL1wiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCcoPzpcXFxcJz98W14nXFxcXF0pKid8XFwoKD86XFxcXFxcKT98W14pXFxcXF0pKlxcKS8pXG4gICAgLmdldFJlZ2V4KCk7XG5jb25zdCByZWZsaW5rID0gZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcWyhyZWYpXFxdLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgLnJlcGxhY2UoJ3JlZicsIF9ibG9ja0xhYmVsKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3Qgbm9saW5rID0gZWRpdCgvXiE/XFxbKHJlZilcXF0oPzpcXFtcXF0pPy8pXG4gICAgLnJlcGxhY2UoJ3JlZicsIF9ibG9ja0xhYmVsKVxuICAgIC5nZXRSZWdleCgpO1xuY29uc3QgcmVmbGlua1NlYXJjaCA9IGVkaXQoJ3JlZmxpbmt8bm9saW5rKD8hXFxcXCgpJywgJ2cnKVxuICAgIC5yZXBsYWNlKCdyZWZsaW5rJywgcmVmbGluaylcbiAgICAucmVwbGFjZSgnbm9saW5rJywgbm9saW5rKVxuICAgIC5nZXRSZWdleCgpO1xuLyoqXG4gKiBOb3JtYWwgSW5saW5lIEdyYW1tYXJcbiAqL1xuY29uc3QgaW5saW5lTm9ybWFsID0ge1xuICAgIF9iYWNrcGVkYWw6IG5vb3BUZXN0LCAvLyBvbmx5IHVzZWQgZm9yIEdGTSB1cmxcbiAgICBhbnlQdW5jdHVhdGlvbixcbiAgICBhdXRvbGluayxcbiAgICBibG9ja1NraXAsXG4gICAgYnIsXG4gICAgY29kZTogaW5saW5lQ29kZSxcbiAgICBkZWw6IG5vb3BUZXN0LFxuICAgIGVtU3Ryb25nTERlbGltLFxuICAgIGVtU3Ryb25nUkRlbGltQXN0LFxuICAgIGVtU3Ryb25nUkRlbGltVW5kLFxuICAgIGVzY2FwZSxcbiAgICBsaW5rLFxuICAgIG5vbGluayxcbiAgICBwdW5jdHVhdGlvbixcbiAgICByZWZsaW5rLFxuICAgIHJlZmxpbmtTZWFyY2gsXG4gICAgdGFnLFxuICAgIHRleHQ6IGlubGluZVRleHQsXG4gICAgdXJsOiBub29wVGVzdCxcbn07XG4vKipcbiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyXG4gKi9cbmNvbnN0IGlubGluZVBlZGFudGljID0ge1xuICAgIC4uLmlubGluZU5vcm1hbCxcbiAgICBsaW5rOiBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFwoKC4qPylcXCkvKVxuICAgICAgICAucmVwbGFjZSgnbGFiZWwnLCBfaW5saW5lTGFiZWwpXG4gICAgICAgIC5nZXRSZWdleCgpLFxuICAgIHJlZmxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXHMqXFxbKFteXFxdXSopXFxdLylcbiAgICAgICAgLnJlcGxhY2UoJ2xhYmVsJywgX2lubGluZUxhYmVsKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIEdGTSBJbmxpbmUgR3JhbW1hclxuICovXG5jb25zdCBpbmxpbmVHZm0gPSB7XG4gICAgLi4uaW5saW5lTm9ybWFsLFxuICAgIGVzY2FwZTogZWRpdChlc2NhcGUpLnJlcGxhY2UoJ10pJywgJ358XSknKS5nZXRSZWdleCgpLFxuICAgIHVybDogZWRpdCgvXigoPzpmdHB8aHR0cHM/KTpcXC9cXC98d3d3XFwuKSg/OlthLXpBLVowLTlcXC1dK1xcLj8pK1teXFxzPF0qfF5lbWFpbC8sICdpJylcbiAgICAgICAgLnJlcGxhY2UoJ2VtYWlsJywgL1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlxcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLylcbiAgICAgICAgLmdldFJlZ2V4KCksXG4gICAgX2JhY2twZWRhbDogLyg/OltePyEuLDo7Kl8nXCJ+KCkmXSt8XFwoW14pXSpcXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nXCJ+KV0rKD8hJCkpKy8sXG4gICAgZGVsOiAvXih+fj8pKD89W15cXHN+XSkoW1xcc1xcU10qP1teXFxzfl0pXFwxKD89W15+XXwkKS8sXG4gICAgdGV4dDogL14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cXG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCl8W1xcc1xcU10qPyg/Oig/PVtcXFxcPCFcXFtgKn5fXXxcXGJffGh0dHBzPzpcXC9cXC98ZnRwOlxcL1xcL3x3d3dcXC58JCl8W14gXSg/PSB7Mix9XFxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1xcLz0/X2B7XFx8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcXC89P19ge1xcfH1+LV0rQCkpKS8sXG59O1xuLyoqXG4gKiBHRk0gKyBMaW5lIEJyZWFrcyBJbmxpbmUgR3JhbW1hclxuICovXG5jb25zdCBpbmxpbmVCcmVha3MgPSB7XG4gICAgLi4uaW5saW5lR2ZtLFxuICAgIGJyOiBlZGl0KGJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICAgIHRleHQ6IGVkaXQoaW5saW5lR2ZtLnRleHQpXG4gICAgICAgIC5yZXBsYWNlKCdcXFxcYl8nLCAnXFxcXGJffCB7Mix9XFxcXG4nKVxuICAgICAgICAucmVwbGFjZSgvXFx7MixcXH0vZywgJyonKVxuICAgICAgICAuZ2V0UmVnZXgoKSxcbn07XG4vKipcbiAqIGV4cG9ydHNcbiAqL1xuY29uc3QgYmxvY2sgPSB7XG4gICAgbm9ybWFsOiBibG9ja05vcm1hbCxcbiAgICBnZm06IGJsb2NrR2ZtLFxuICAgIHBlZGFudGljOiBibG9ja1BlZGFudGljLFxufTtcbmNvbnN0IGlubGluZSA9IHtcbiAgICBub3JtYWw6IGlubGluZU5vcm1hbCxcbiAgICBnZm06IGlubGluZUdmbSxcbiAgICBicmVha3M6IGlubGluZUJyZWFrcyxcbiAgICBwZWRhbnRpYzogaW5saW5lUGVkYW50aWMsXG59O1xuXG4vKipcbiAqIEJsb2NrIExleGVyXG4gKi9cbmNsYXNzIF9MZXhlciB7XG4gICAgdG9rZW5zO1xuICAgIG9wdGlvbnM7XG4gICAgc3RhdGU7XG4gICAgdG9rZW5pemVyO1xuICAgIGlubGluZVF1ZXVlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgLy8gVG9rZW5MaXN0IGNhbm5vdCBiZSBjcmVhdGVkIGluIG9uZSBnb1xuICAgICAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgICAgICB0aGlzLnRva2Vucy5saW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgICAgICB0aGlzLm9wdGlvbnMudG9rZW5pemVyID0gdGhpcy5vcHRpb25zLnRva2VuaXplciB8fCBuZXcgX1Rva2VuaXplcigpO1xuICAgICAgICB0aGlzLnRva2VuaXplciA9IHRoaXMub3B0aW9ucy50b2tlbml6ZXI7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLmxleGVyID0gdGhpcztcbiAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaW5MaW5rOiBmYWxzZSxcbiAgICAgICAgICAgIGluUmF3QmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgdG9wOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBydWxlcyA9IHtcbiAgICAgICAgICAgIGJsb2NrOiBibG9jay5ub3JtYWwsXG4gICAgICAgICAgICBpbmxpbmU6IGlubGluZS5ub3JtYWwsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICAgICAgICAgIHJ1bGVzLmJsb2NrID0gYmxvY2sucGVkYW50aWM7XG4gICAgICAgICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUucGVkYW50aWM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmdmbSkge1xuICAgICAgICAgICAgcnVsZXMuYmxvY2sgPSBibG9jay5nZm07XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrcykge1xuICAgICAgICAgICAgICAgIHJ1bGVzLmlubGluZSA9IGlubGluZS5icmVha3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBydWxlcy5pbmxpbmUgPSBpbmxpbmUuZ2ZtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnJ1bGVzID0gcnVsZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9zZSBSdWxlc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgcnVsZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgIGlubGluZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGljIExleCBNZXRob2RcbiAgICAgKi9cbiAgICBzdGF0aWMgbGV4KHNyYywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsZXhlciA9IG5ldyBfTGV4ZXIob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBsZXhlci5sZXgoc3JjKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RhdGljIExleCBJbmxpbmUgTWV0aG9kXG4gICAgICovXG4gICAgc3RhdGljIGxleElubGluZShzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgX0xleGVyKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbGV4ZXIuaW5saW5lVG9rZW5zKHNyYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXByb2Nlc3NpbmdcbiAgICAgKi9cbiAgICBsZXgoc3JjKSB7XG4gICAgICAgIHNyYyA9IHNyY1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpO1xuICAgICAgICB0aGlzLmJsb2NrVG9rZW5zKHNyYywgdGhpcy50b2tlbnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5saW5lUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlubGluZVF1ZXVlW2ldO1xuICAgICAgICAgICAgdGhpcy5pbmxpbmVUb2tlbnMobmV4dC5zcmMsIG5leHQudG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlubGluZVF1ZXVlID0gW107XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG4gICAgYmxvY2tUb2tlbnMoc3JjLCB0b2tlbnMgPSBbXSwgbGFzdFBhcmFncmFwaENsaXBwZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgICAgICBzcmMgPSBzcmMucmVwbGFjZSgvXFx0L2csICcgICAgJykucmVwbGFjZSgvXiArJC9nbSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL14oICopKFxcdCspL2dtLCAoXywgbGVhZGluZywgdGFicykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWFkaW5nICsgJyAgICAnLnJlcGVhdCh0YWJzLmxlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9rZW47XG4gICAgICAgIGxldCBsYXN0VG9rZW47XG4gICAgICAgIGxldCBjdXRTcmM7XG4gICAgICAgIHdoaWxlIChzcmMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZSgoZXh0VG9rZW5pemVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9IGV4dFRva2VuaXplci5jYWxsKHsgbGV4ZXI6IHRoaXMgfSwgc3JjLCB0b2tlbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBuZXdsaW5lXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5zcGFjZShzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmF3Lmxlbmd0aCA9PT0gMSAmJiB0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIGEgc2luZ2xlIFxcbiBhcyBhIHNwYWNlciwgaXQncyB0ZXJtaW5hdGluZyB0aGUgbGFzdCBsaW5lLFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyBtb3ZlIGl0IHRoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHVubmVjZXNzYXJ5IHBhcmFncmFwaCB0YWdzXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0ucmF3ICs9ICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvZGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmNvZGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAvLyBBbiBpbmRlbnRlZCBjb2RlIGJsb2NrIGNhbm5vdCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGguXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbiAmJiAobGFzdFRva2VuLnR5cGUgPT09ICdwYXJhZ3JhcGgnIHx8IGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aCAtIDFdLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZlbmNlc1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZmVuY2VzKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhlYWRpbmdcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmhlYWRpbmcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaHJcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmhyKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJsb2NrcXVvdGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbGlzdFxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIubGlzdChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBodG1sXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5odG1sKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRlZlxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuZGVmKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUb2tlbiAmJiAobGFzdFRva2VuLnR5cGUgPT09ICdwYXJhZ3JhcGgnIHx8IGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoIC0gMV0uc3JjID0gbGFzdFRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnRva2Vucy5saW5rc1t0b2tlbi50YWddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLmxpbmtzW3Rva2VuLnRhZ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB0b2tlbi5ocmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRva2VuLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRhYmxlIChnZm0pXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWJsZShzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBsaGVhZGluZ1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIubGhlYWRpbmcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdG9wLWxldmVsIHBhcmFncmFwaFxuICAgICAgICAgICAgLy8gcHJldmVudCBwYXJhZ3JhcGggY29uc3VtaW5nIGV4dGVuc2lvbnMgYnkgY2xpcHBpbmcgJ3NyYycgdG8gZXh0ZW5zaW9uIHN0YXJ0XG4gICAgICAgICAgICBjdXRTcmMgPSBzcmM7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jaykge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydEluZGV4ID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFNyYyA9IHNyYy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcFN0YXJ0O1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaCgoZ2V0U3RhcnRJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhcnQgPSBnZXRTdGFydEluZGV4LmNhbGwoeyBsZXhlcjogdGhpcyB9LCB0ZW1wU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wU3RhcnQgPT09ICdudW1iZXInICYmIHRlbXBTdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdGVtcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4IDwgSW5maW5pdHkgJiYgc3RhcnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dFNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnRvcCAmJiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoY3V0U3JjKSkpIHtcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0UGFyYWdyYXBoQ2xpcHBlZCAmJiBsYXN0VG9rZW4/LnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gJ1xcbicgKyB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9ICdcXG4nICsgdG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aCAtIDFdLnNyYyA9IGxhc3RUb2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYXN0UGFyYWdyYXBoQ2xpcHBlZCA9IChjdXRTcmMubGVuZ3RoICE9PSBzcmMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGV4dFxuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIudGV4dChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4ucmF3ICs9ICdcXG4nICsgdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSAnXFxuJyArIHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lUXVldWUucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGggLSAxXS5zcmMgPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3JjKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gJ0luZmluaXRlIGxvb3Agb24gYnl0ZTogJyArIHNyYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS50b3AgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbiAgICBpbmxpbmUoc3JjLCB0b2tlbnMgPSBbXSkge1xuICAgICAgICB0aGlzLmlubGluZVF1ZXVlLnB1c2goeyBzcmMsIHRva2VucyB9KTtcbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGV4aW5nL0NvbXBpbGluZ1xuICAgICAqL1xuICAgIGlubGluZVRva2VucyhzcmMsIHRva2VucyA9IFtdKSB7XG4gICAgICAgIGxldCB0b2tlbiwgbGFzdFRva2VuLCBjdXRTcmM7XG4gICAgICAgIC8vIFN0cmluZyB3aXRoIGxpbmtzIG1hc2tlZCB0byBhdm9pZCBpbnRlcmZlcmVuY2Ugd2l0aCBlbSBhbmQgc3Ryb25nXG4gICAgICAgIGxldCBtYXNrZWRTcmMgPSBzcmM7XG4gICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgbGV0IGtlZXBQcmV2Q2hhciwgcHJldkNoYXI7XG4gICAgICAgIC8vIE1hc2sgb3V0IHJlZmxpbmtzXG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5saW5rcykge1xuICAgICAgICAgICAgY29uc3QgbGlua3MgPSBPYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7XG4gICAgICAgICAgICBpZiAobGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSB0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKG1hdGNoWzBdLnNsaWNlKG1hdGNoWzBdLmxhc3RJbmRleE9mKCdbJykgKyAxLCAtMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrZWRTcmMgPSBtYXNrZWRTcmMuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgJ1snICsgJ2EnLnJlcGVhdChtYXRjaFswXS5sZW5ndGggLSAyKSArICddJyArIG1hc2tlZFNyYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hc2sgb3V0IG90aGVyIGJsb2Nrc1xuICAgICAgICB3aGlsZSAoKG1hdGNoID0gdGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAnWycgKyAnYScucmVwZWF0KG1hdGNoWzBdLmxlbmd0aCAtIDIpICsgJ10nICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYXNrIG91dCBlc2NhcGVkIGNoYXJhY3RlcnNcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKG1hc2tlZFNyYykpICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hc2tlZFNyYyA9IG1hc2tlZFNyYy5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAnKysnICsgbWFza2VkU3JjLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzcmMpIHtcbiAgICAgICAgICAgIGlmICgha2VlcFByZXZDaGFyKSB7XG4gICAgICAgICAgICAgICAgcHJldkNoYXIgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtlZXBQcmV2Q2hhciA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gZXh0ZW5zaW9uc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoKGV4dFRva2VuaXplcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPSBleHRUb2tlbml6ZXIuY2FsbCh7IGxleGVyOiB0aGlzIH0sIHNyYywgdG9rZW5zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXNjYXBlXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5lc2NhcGUoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGFnXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci50YWcoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRva2VuICYmIHRva2VuLnR5cGUgPT09ICd0ZXh0JyAmJiBsYXN0VG9rZW4udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi5yYXcgKz0gdG9rZW4ucmF3O1xuICAgICAgICAgICAgICAgICAgICBsYXN0VG9rZW4udGV4dCArPSB0b2tlbi50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxpbmtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmxpbmsoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVmbGluaywgbm9saW5rXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5yZWZsaW5rKHNyYywgdGhpcy50b2tlbnMubGlua3MpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3RleHQnICYmIGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnJhdyArPSB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZW0gJiBzdHJvbmdcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmVtU3Ryb25nKHNyYywgbWFza2VkU3JjLCBwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvZGVcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmNvZGVzcGFuKHNyYykpIHtcbiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKHRva2VuLnJhdy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJyXG4gICAgICAgICAgICBpZiAodG9rZW4gPSB0aGlzLnRva2VuaXplci5icihzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWwgKGdmbSlcbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmRlbChzcmMpKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyh0b2tlbi5yYXcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvbGlua1xuICAgICAgICAgICAgaWYgKHRva2VuID0gdGhpcy50b2tlbml6ZXIuYXV0b2xpbmsoc3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdXJsIChnZm0pXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaW5MaW5rICYmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLnVybChzcmMpKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGV4dFxuICAgICAgICAgICAgLy8gcHJldmVudCBpbmxpbmVUZXh0IGNvbnN1bWluZyBleHRlbnNpb25zIGJ5IGNsaXBwaW5nICdzcmMnIHRvIGV4dGVuc2lvbiBzdGFydFxuICAgICAgICAgICAgY3V0U3JjID0gc3JjO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wU3JjID0gc3JjLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wU3RhcnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaCgoZ2V0U3RhcnRJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wU3RhcnQgPSBnZXRTdGFydEluZGV4LmNhbGwoeyBsZXhlcjogdGhpcyB9LCB0ZW1wU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wU3RhcnQgPT09ICdudW1iZXInICYmIHRlbXBTdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdGVtcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4IDwgSW5maW5pdHkgJiYgc3RhcnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dFNyYyA9IHNyYy5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiA9IHRoaXMudG9rZW5pemVyLmlubGluZVRleHQoY3V0U3JjKSkge1xuICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcodG9rZW4ucmF3Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnJhdy5zbGljZSgtMSkgIT09ICdfJykgeyAvLyBUcmFjayBwcmV2Q2hhciBiZWZvcmUgc3RyaW5nIG9mIF9fX18gc3RhcnRlZFxuICAgICAgICAgICAgICAgICAgICBwcmV2Q2hhciA9IHRva2VuLnJhdy5zbGljZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtlZXBQcmV2Q2hhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRva2VuICYmIGxhc3RUb2tlbi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRva2VuLnJhdyArPSB0b2tlbi5yYXc7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUb2tlbi50ZXh0ICs9IHRva2VuLnRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9ICdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlbmRlcmVyXG4gKi9cbmNsYXNzIF9SZW5kZXJlciB7XG4gICAgb3B0aW9ucztcbiAgICBwYXJzZXI7IC8vIHNldCBieSB0aGUgcGFyc2VyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IF9kZWZhdWx0cztcbiAgICB9XG4gICAgc3BhY2UodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb2RlKHsgdGV4dCwgbGFuZywgZXNjYXBlZCB9KSB7XG4gICAgICAgIGNvbnN0IGxhbmdTdHJpbmcgPSAobGFuZyB8fCAnJykubWF0Y2goL15cXFMqLyk/LlswXTtcbiAgICAgICAgY29uc3QgY29kZSA9IHRleHQucmVwbGFjZSgvXFxuJC8sICcnKSArICdcXG4nO1xuICAgICAgICBpZiAoIWxhbmdTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnPHByZT48Y29kZT4nXG4gICAgICAgICAgICAgICAgKyAoZXNjYXBlZCA/IGNvZGUgOiBlc2NhcGUkMShjb2RlLCB0cnVlKSlcbiAgICAgICAgICAgICAgICArICc8L2NvZGU+PC9wcmU+XFxuJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzxwcmU+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0nXG4gICAgICAgICAgICArIGVzY2FwZSQxKGxhbmdTdHJpbmcpXG4gICAgICAgICAgICArICdcIj4nXG4gICAgICAgICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZSQxKGNvZGUsIHRydWUpKVxuICAgICAgICAgICAgKyAnPC9jb2RlPjwvcHJlPlxcbic7XG4gICAgfVxuICAgIGJsb2NrcXVvdGUoeyB0b2tlbnMgfSkge1xuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZXIucGFyc2UodG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGA8YmxvY2txdW90ZT5cXG4ke2JvZHl9PC9ibG9ja3F1b3RlPlxcbmA7XG4gICAgfVxuICAgIGh0bWwoeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGhlYWRpbmcoeyB0b2tlbnMsIGRlcHRoIH0pIHtcbiAgICAgICAgcmV0dXJuIGA8aCR7ZGVwdGh9PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2gke2RlcHRofT5cXG5gO1xuICAgIH1cbiAgICBocih0b2tlbikge1xuICAgICAgICByZXR1cm4gJzxocj5cXG4nO1xuICAgIH1cbiAgICBsaXN0KHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG9yZGVyZWQgPSB0b2tlbi5vcmRlcmVkO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRva2VuLnN0YXJ0O1xuICAgICAgICBsZXQgYm9keSA9ICcnO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLml0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdG9rZW4uaXRlbXNbal07XG4gICAgICAgICAgICBib2R5ICs9IHRoaXMubGlzdGl0ZW0oaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZSA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJztcbiAgICAgICAgY29uc3Qgc3RhcnRBdHRyID0gKG9yZGVyZWQgJiYgc3RhcnQgIT09IDEpID8gKCcgc3RhcnQ9XCInICsgc3RhcnQgKyAnXCInKSA6ICcnO1xuICAgICAgICByZXR1cm4gJzwnICsgdHlwZSArIHN0YXJ0QXR0ciArICc+XFxuJyArIGJvZHkgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbiAgICB9XG4gICAgbGlzdGl0ZW0oaXRlbSkge1xuICAgICAgICBsZXQgaXRlbUJvZHkgPSAnJztcbiAgICAgICAgaWYgKGl0ZW0udGFzaykge1xuICAgICAgICAgICAgY29uc3QgY2hlY2tib3ggPSB0aGlzLmNoZWNrYm94KHsgY2hlY2tlZDogISFpdGVtLmNoZWNrZWQgfSk7XG4gICAgICAgICAgICBpZiAoaXRlbS5sb29zZSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vucy5sZW5ndGggPiAwICYmIGl0ZW0udG9rZW5zWzBdLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveCArICcgJyArIGl0ZW0udG9rZW5zWzBdLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vuc1swXS50b2tlbnMgJiYgaXRlbS50b2tlbnNbMF0udG9rZW5zLmxlbmd0aCA+IDAgJiYgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveCArICcgJyArIGl0ZW0udG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnRva2Vucy51bnNoaWZ0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogY2hlY2tib3ggKyAnICcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaGVja2JveCArICcgJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbUJvZHkgKz0gY2hlY2tib3ggKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbUJvZHkgKz0gdGhpcy5wYXJzZXIucGFyc2UoaXRlbS50b2tlbnMsICEhaXRlbS5sb29zZSk7XG4gICAgICAgIHJldHVybiBgPGxpPiR7aXRlbUJvZHl9PC9saT5cXG5gO1xuICAgIH1cbiAgICBjaGVja2JveCh7IGNoZWNrZWQgfSkge1xuICAgICAgICByZXR1cm4gJzxpbnB1dCAnXG4gICAgICAgICAgICArIChjaGVja2VkID8gJ2NoZWNrZWQ9XCJcIiAnIDogJycpXG4gICAgICAgICAgICArICdkaXNhYmxlZD1cIlwiIHR5cGU9XCJjaGVja2JveFwiPic7XG4gICAgfVxuICAgIHBhcmFncmFwaCh7IHRva2VucyB9KSB7XG4gICAgICAgIHJldHVybiBgPHA+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpfTwvcD5cXG5gO1xuICAgIH1cbiAgICB0YWJsZSh0b2tlbikge1xuICAgICAgICBsZXQgaGVhZGVyID0gJyc7XG4gICAgICAgIC8vIGhlYWRlclxuICAgICAgICBsZXQgY2VsbCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLmhlYWRlci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY2VsbCArPSB0aGlzLnRhYmxlY2VsbCh0b2tlbi5oZWFkZXJbal0pO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlciArPSB0aGlzLnRhYmxlcm93KHsgdGV4dDogY2VsbCB9KTtcbiAgICAgICAgbGV0IGJvZHkgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5yb3dzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0b2tlbi5yb3dzW2pdO1xuICAgICAgICAgICAgY2VsbCA9ICcnO1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByb3cubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBjZWxsICs9IHRoaXMudGFibGVjZWxsKHJvd1trXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5ICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5KVxuICAgICAgICAgICAgYm9keSA9IGA8dGJvZHk+JHtib2R5fTwvdGJvZHk+YDtcbiAgICAgICAgcmV0dXJuICc8dGFibGU+XFxuJ1xuICAgICAgICAgICAgKyAnPHRoZWFkPlxcbidcbiAgICAgICAgICAgICsgaGVhZGVyXG4gICAgICAgICAgICArICc8L3RoZWFkPlxcbidcbiAgICAgICAgICAgICsgYm9keVxuICAgICAgICAgICAgKyAnPC90YWJsZT5cXG4nO1xuICAgIH1cbiAgICB0YWJsZXJvdyh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gYDx0cj5cXG4ke3RleHR9PC90cj5cXG5gO1xuICAgIH1cbiAgICB0YWJsZWNlbGwodG9rZW4pIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRva2Vucyk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5oZWFkZXIgPyAndGgnIDogJ3RkJztcbiAgICAgICAgY29uc3QgdGFnID0gdG9rZW4uYWxpZ25cbiAgICAgICAgICAgID8gYDwke3R5cGV9IGFsaWduPVwiJHt0b2tlbi5hbGlnbn1cIj5gXG4gICAgICAgICAgICA6IGA8JHt0eXBlfT5gO1xuICAgICAgICByZXR1cm4gdGFnICsgY29udGVudCArIGA8LyR7dHlwZX0+XFxuYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3BhbiBsZXZlbCByZW5kZXJlclxuICAgICAqL1xuICAgIHN0cm9uZyh7IHRva2VucyB9KSB7XG4gICAgICAgIHJldHVybiBgPHN0cm9uZz4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9zdHJvbmc+YDtcbiAgICB9XG4gICAgZW0oeyB0b2tlbnMgfSkge1xuICAgICAgICByZXR1cm4gYDxlbT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2Vucyl9PC9lbT5gO1xuICAgIH1cbiAgICBjb2Rlc3Bhbih7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gYDxjb2RlPiR7dGV4dH08L2NvZGU+YDtcbiAgICB9XG4gICAgYnIodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuICc8YnI+JztcbiAgICB9XG4gICAgZGVsKHsgdG9rZW5zIH0pIHtcbiAgICAgICAgcmV0dXJuIGA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW5zKX08L2RlbD5gO1xuICAgIH1cbiAgICBsaW5rKHsgaHJlZiwgdGl0bGUsIHRva2VucyB9KSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpO1xuICAgICAgICBjb25zdCBjbGVhbkhyZWYgPSBjbGVhblVybChocmVmKTtcbiAgICAgICAgaWYgKGNsZWFuSHJlZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaHJlZiA9IGNsZWFuSHJlZjtcbiAgICAgICAgbGV0IG91dCA9ICc8YSBocmVmPVwiJyArIGhyZWYgKyAnXCInO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJz4nICsgdGV4dCArICc8L2E+JztcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgaW1hZ2UoeyBocmVmLCB0aXRsZSwgdGV4dCB9KSB7XG4gICAgICAgIGNvbnN0IGNsZWFuSHJlZiA9IGNsZWFuVXJsKGhyZWYpO1xuICAgICAgICBpZiAoY2xlYW5IcmVmID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBocmVmID0gY2xlYW5IcmVmO1xuICAgICAgICBsZXQgb3V0ID0gYDxpbWcgc3JjPVwiJHtocmVmfVwiIGFsdD1cIiR7dGV4dH1cImA7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgb3V0ICs9IGAgdGl0bGU9XCIke3RpdGxlfVwiYDtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJz4nO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICB0ZXh0KHRva2VuKSB7XG4gICAgICAgIHJldHVybiAndG9rZW5zJyBpbiB0b2tlbiAmJiB0b2tlbi50b2tlbnMgPyB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpIDogdG9rZW4udGV4dDtcbiAgICB9XG59XG5cbi8qKlxuICogVGV4dFJlbmRlcmVyXG4gKiByZXR1cm5zIG9ubHkgdGhlIHRleHR1YWwgcGFydCBvZiB0aGUgdG9rZW5cbiAqL1xuY2xhc3MgX1RleHRSZW5kZXJlciB7XG4gICAgLy8gbm8gbmVlZCBmb3IgYmxvY2sgbGV2ZWwgcmVuZGVyZXJzXG4gICAgc3Ryb25nKHsgdGV4dCB9KSB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBlbSh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgY29kZXNwYW4oeyB0ZXh0IH0pIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGRlbCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaHRtbCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgdGV4dCh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgbGluayh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gJycgKyB0ZXh0O1xuICAgIH1cbiAgICBpbWFnZSh7IHRleHQgfSkge1xuICAgICAgICByZXR1cm4gJycgKyB0ZXh0O1xuICAgIH1cbiAgICBicigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn1cblxuLyoqXG4gKiBQYXJzaW5nICYgQ29tcGlsaW5nXG4gKi9cbmNsYXNzIF9QYXJzZXIge1xuICAgIG9wdGlvbnM7XG4gICAgcmVuZGVyZXI7XG4gICAgdGV4dFJlbmRlcmVyO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBfZGVmYXVsdHM7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgX1JlbmRlcmVyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXI7XG4gICAgICAgIHRoaXMucmVuZGVyZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJlci5wYXJzZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLnRleHRSZW5kZXJlciA9IG5ldyBfVGV4dFJlbmRlcmVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBQYXJzZSBNZXRob2RcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2UodG9rZW5zLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfUGFyc2VyKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKHRva2Vucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBQYXJzZSBJbmxpbmUgTWV0aG9kXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlSW5saW5lKHRva2Vucywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX1BhcnNlcihvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZUlubGluZSh0b2tlbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXJzZSBMb29wXG4gICAgICovXG4gICAgcGFyc2UodG9rZW5zLCB0b3AgPSB0cnVlKSB7XG4gICAgICAgIGxldCBvdXQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFueVRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgLy8gUnVuIGFueSByZW5kZXJlciBleHRlbnNpb25zXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMgJiYgdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thbnlUb2tlbi50eXBlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyaWNUb2tlbiA9IGFueVRva2VuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tnZW5lcmljVG9rZW4udHlwZV0uY2FsbCh7IHBhcnNlcjogdGhpcyB9LCBnZW5lcmljVG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmIChyZXQgIT09IGZhbHNlIHx8ICFbJ3NwYWNlJywgJ2hyJywgJ2hlYWRpbmcnLCAnY29kZScsICd0YWJsZScsICdibG9ja3F1b3RlJywgJ2xpc3QnLCAnaHRtbCcsICdwYXJhZ3JhcGgnLCAndGV4dCddLmluY2x1ZGVzKGdlbmVyaWNUb2tlbi50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGFueVRva2VuO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnNwYWNlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2hyJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5ocih0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdoZWFkaW5nJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmNvZGUodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIubGlzdCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdodG1sJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5odG1sKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhcmFncmFwaCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHkgPSB0aGlzLnJlbmRlcmVyLnRleHQodGV4dFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgKyAxIDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaSArIDFdLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRva2VuID0gdG9rZW5zWysraV07XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9ICdcXG4nICsgdGhpcy5yZW5kZXJlci50ZXh0KHRleHRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IGJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogYm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IFt7IHR5cGU6ICd0ZXh0JywgcmF3OiBib2R5LCB0ZXh0OiBib2R5IH1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gYm9keTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2cgPSAnVG9rZW4gd2l0aCBcIicgKyB0b2tlbi50eXBlICsgJ1wiIHR5cGUgd2FzIG5vdCBmb3VuZC4nO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGFyc2UgSW5saW5lIFRva2Vuc1xuICAgICAqL1xuICAgIHBhcnNlSW5saW5lKHRva2VucywgcmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlciB8fCB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBsZXQgb3V0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhbnlUb2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIC8vIFJ1biBhbnkgcmVuZGVyZXIgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRlbnNpb25zICYmIHRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyAmJiB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYW55VG9rZW4udHlwZV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYW55VG9rZW4udHlwZV0uY2FsbCh7IHBhcnNlcjogdGhpcyB9LCBhbnlUb2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gZmFsc2UgfHwgIVsnZXNjYXBlJywgJ2h0bWwnLCAnbGluaycsICdpbWFnZScsICdzdHJvbmcnLCAnZW0nLCAnY29kZXNwYW4nLCAnYnInLCAnZGVsJywgJ3RleHQnXS5pbmNsdWRlcyhhbnlUb2tlbi50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGFueVRva2VuO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZXNjYXBlJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIudGV4dCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdodG1sJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuaHRtbCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdsaW5rJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIubGluayh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmltYWdlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cm9uZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLnN0cm9uZyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdlbSc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLmVtKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGVzcGFuJzoge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gcmVuZGVyZXIuY29kZXNwYW4odG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnYnInOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5icih0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdkZWwnOiB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSByZW5kZXJlci5kZWwodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAndGV4dCc6IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHJlbmRlcmVyLnRleHQodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJNc2cgPSAnVG9rZW4gd2l0aCBcIicgKyB0b2tlbi50eXBlICsgJ1wiIHR5cGUgd2FzIG5vdCBmb3VuZC4nO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG59XG5cbmNsYXNzIF9Ib29rcyB7XG4gICAgb3B0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgX2RlZmF1bHRzO1xuICAgIH1cbiAgICBzdGF0aWMgcGFzc1Rocm91Z2hIb29rcyA9IG5ldyBTZXQoW1xuICAgICAgICAncHJlcHJvY2VzcycsXG4gICAgICAgICdwb3N0cHJvY2VzcycsXG4gICAgICAgICdwcm9jZXNzQWxsVG9rZW5zJyxcbiAgICBdKTtcbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIG1hcmtkb3duIGJlZm9yZSBtYXJrZWRcbiAgICAgKi9cbiAgICBwcmVwcm9jZXNzKG1hcmtkb3duKSB7XG4gICAgICAgIHJldHVybiBtYXJrZG93bjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBIVE1MIGFmdGVyIG1hcmtlZCBpcyBmaW5pc2hlZFxuICAgICAqL1xuICAgIHBvc3Rwcm9jZXNzKGh0bWwpIHtcbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgYWxsIHRva2VucyBiZWZvcmUgd2FsayB0b2tlbnNcbiAgICAgKi9cbiAgICBwcm9jZXNzQWxsVG9rZW5zKHRva2Vucykge1xuICAgICAgICByZXR1cm4gdG9rZW5zO1xuICAgIH1cbn1cblxuY2xhc3MgTWFya2VkIHtcbiAgICBkZWZhdWx0cyA9IF9nZXREZWZhdWx0cygpO1xuICAgIG9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnM7XG4gICAgcGFyc2UgPSB0aGlzLiNwYXJzZU1hcmtkb3duKF9MZXhlci5sZXgsIF9QYXJzZXIucGFyc2UpO1xuICAgIHBhcnNlSW5saW5lID0gdGhpcy4jcGFyc2VNYXJrZG93bihfTGV4ZXIubGV4SW5saW5lLCBfUGFyc2VyLnBhcnNlSW5saW5lKTtcbiAgICBQYXJzZXIgPSBfUGFyc2VyO1xuICAgIFJlbmRlcmVyID0gX1JlbmRlcmVyO1xuICAgIFRleHRSZW5kZXJlciA9IF9UZXh0UmVuZGVyZXI7XG4gICAgTGV4ZXIgPSBfTGV4ZXI7XG4gICAgVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbiAgICBIb29rcyA9IF9Ib29rcztcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMudXNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gICAgICovXG4gICAgd2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoY2FsbGJhY2suY2FsbCh0aGlzLCB0b2tlbikpO1xuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHRhYmxlVG9rZW4uaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0YWJsZVRva2VuLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiByb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhjZWxsLnRva2VucywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdFRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodGhpcy53YWxrVG9rZW5zKGxpc3RUb2tlbi5pdGVtcywgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJpY1Rva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnM/LmNoaWxkVG9rZW5zPy5bZ2VuZXJpY1Rva2VuLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbZ2VuZXJpY1Rva2VuLnR5cGVdLmZvckVhY2goKGNoaWxkVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gZ2VuZXJpY1Rva2VuW2NoaWxkVG9rZW5zXS5mbGF0KEluZmluaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnZW5lcmljVG9rZW4udG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhnZW5lcmljVG9rZW4udG9rZW5zLCBjYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuICAgIHVzZSguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSB0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMgfHwgeyByZW5kZXJlcnM6IHt9LCBjaGlsZFRva2Vuczoge30gfTtcbiAgICAgICAgYXJncy5mb3JFYWNoKChwYWNrKSA9PiB7XG4gICAgICAgICAgICAvLyBjb3B5IG9wdGlvbnMgdG8gbmV3IG9iamVjdFxuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHsgLi4ucGFjayB9O1xuICAgICAgICAgICAgLy8gc2V0IGFzeW5jIHRvIHRydWUgaWYgaXQgd2FzIHNldCB0byB0cnVlIGJlZm9yZVxuICAgICAgICAgICAgb3B0cy5hc3luYyA9IHRoaXMuZGVmYXVsdHMuYXN5bmMgfHwgb3B0cy5hc3luYyB8fCBmYWxzZTtcbiAgICAgICAgICAgIC8vID09LS0gUGFyc2UgXCJhZGRvblwiIGV4dGVuc2lvbnMgLS09PSAvL1xuICAgICAgICAgICAgaWYgKHBhY2suZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIHBhY2suZXh0ZW5zaW9ucy5mb3JFYWNoKChleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHRlbnNpb24gbmFtZSByZXF1aXJlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgncmVuZGVyZXInIGluIGV4dCkgeyAvLyBSZW5kZXJlciBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyZXIgPSBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBleHRlbnNpb24gd2l0aCBmdW5jIHRvIHJ1biBuZXcgZXh0ZW5zaW9uIGJ1dCBmYWxsIGJhY2sgaWYgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmVyc1tleHQubmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gZXh0LnJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldlJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyZXJzW2V4dC5uYW1lXSA9IGV4dC5yZW5kZXJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3Rva2VuaXplcicgaW4gZXh0KSB7IC8vIFRva2VuaXplciBFeHRlbnNpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4dC5sZXZlbCB8fCAoZXh0LmxldmVsICE9PSAnYmxvY2snICYmIGV4dC5sZXZlbCAhPT0gJ2lubGluZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dExldmVsID0gZXh0ZW5zaW9uc1tleHQubGV2ZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0TGV2ZWwudW5zaGlmdChleHQudG9rZW5pemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNbZXh0LmxldmVsXSA9IFtleHQudG9rZW5pemVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHQuc3RhcnQpIHsgLy8gRnVuY3Rpb24gdG8gY2hlY2sgZm9yIHN0YXJ0IG9mIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dC5sZXZlbCA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0QmxvY2sucHVzaChleHQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydEJsb2NrID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXh0LmxldmVsID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdGFydElubGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5zdGFydElubGluZS5wdXNoKGV4dC5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnN0YXJ0SW5saW5lID0gW2V4dC5zdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdjaGlsZFRva2VucycgaW4gZXh0ICYmIGV4dC5jaGlsZFRva2VucykgeyAvLyBDaGlsZCB0b2tlbnMgdG8gYmUgdmlzaXRlZCBieSB3YWxrVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmNoaWxkVG9rZW5zW2V4dC5uYW1lXSA9IGV4dC5jaGlsZFRva2VucztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA9PS0tIFBhcnNlIFwib3ZlcndyaXRlXCIgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay5yZW5kZXJlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5kZWZhdWx0cy5yZW5kZXJlciB8fCBuZXcgX1JlbmRlcmVyKHRoaXMuZGVmYXVsdHMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwYWNrLnJlbmRlcmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHByb3AgaW4gcmVuZGVyZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3Byb3B9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChbJ29wdGlvbnMnLCAncGFyc2VyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlclByb3AgPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVuZGVyZXJGdW5jID0gcGFjay5yZW5kZXJlcltyZW5kZXJlclByb3BdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2sudXNlTmV3UmVuZGVyZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGluIG5leHQgbWFqb3IgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJGdW5jID0gdGhpcy4jY29udmVydFJlbmRlcmVyRnVuY3Rpb24ocmVuZGVyZXJGdW5jLCByZW5kZXJlclByb3AsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyZXIgPSByZW5kZXJlcltyZW5kZXJlclByb3BdO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHJlbmRlcmVyIHdpdGggZnVuYyB0byBydW4gZXh0ZW5zaW9uLCBidXQgZmFsbCBiYWNrIGlmIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyW3JlbmRlcmVyUHJvcF0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IHJlbmRlcmVyRnVuYy5hcHBseShyZW5kZXJlciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHByZXZSZW5kZXJlci5hcHBseShyZW5kZXJlciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFjay50b2tlbml6ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbml6ZXIgPSB0aGlzLmRlZmF1bHRzLnRva2VuaXplciB8fCBuZXcgX1Rva2VuaXplcih0aGlzLmRlZmF1bHRzKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcGFjay50b2tlbml6ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJvcCBpbiB0b2tlbml6ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHtwcm9wfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoWydvcHRpb25zJywgJ3J1bGVzJywgJ2xleGVyJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvcHRpb25zLCBydWxlcywgYW5kIGxleGVyIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuaXplclByb3AgPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbml6ZXJGdW5jID0gcGFjay50b2tlbml6ZXJbdG9rZW5pemVyUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZUb2tlbml6ZXIgPSB0b2tlbml6ZXJbdG9rZW5pemVyUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdG9rZW5pemVyIHdpdGggZnVuYyB0byBydW4gZXh0ZW5zaW9uLCBidXQgZmFsbCBiYWNrIGlmIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgdG9rZW5pemVyIGZ1bmN0aW9uIGR5bmFtaWNhbGx5XG4gICAgICAgICAgICAgICAgICAgIHRva2VuaXplclt0b2tlbml6ZXJQcm9wXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gdG9rZW5pemVyRnVuYy5hcHBseSh0b2tlbml6ZXIsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBwcmV2VG9rZW5pemVyLmFwcGx5KHRva2VuaXplciwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLnRva2VuaXplciA9IHRva2VuaXplcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vID09LS0gUGFyc2UgSG9va3MgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay5ob29rcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvb2tzID0gdGhpcy5kZWZhdWx0cy5ob29rcyB8fCBuZXcgX0hvb2tzKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBhY2suaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJvcCBpbiBob29rcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9vayAnJHtwcm9wfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gJ29wdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgb3B0aW9ucyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9va3NQcm9wID0gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9va3NGdW5jID0gcGFjay5ob29rc1tob29rc1Byb3BdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2SG9vayA9IGhvb2tzW2hvb2tzUHJvcF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChfSG9va3MucGFzc1Rocm91Z2hIb29rcy5oYXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgaG9vayBmdW5jdGlvbiBkeW5hbWljYWxseVxuICAgICAgICAgICAgICAgICAgICAgICAgaG9va3NbaG9va3NQcm9wXSA9IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0cy5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhvb2tzRnVuYy5jYWxsKGhvb2tzLCBhcmcpKS50aGVuKHJldCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkhvb2suY2FsbChob29rcywgcmV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldCA9IGhvb2tzRnVuYy5jYWxsKGhvb2tzLCBhcmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2SG9vay5jYWxsKGhvb2tzLCByZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY2Fubm90IHR5cGUgaG9vayBmdW5jdGlvbiBkeW5hbWljYWxseVxuICAgICAgICAgICAgICAgICAgICAgICAgaG9va3NbaG9va3NQcm9wXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IGhvb2tzRnVuYy5hcHBseShob29rcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcHJldkhvb2suYXBwbHkoaG9va3MsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRzLmhvb2tzID0gaG9va3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA9PS0tIFBhcnNlIFdhbGtUb2tlbnMgZXh0ZW5zaW9ucyAtLT09IC8vXG4gICAgICAgICAgICBpZiAocGFjay53YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2Fsa1Rva2VucyA9IHRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrV2Fsa3Rva2VucyA9IHBhY2sud2Fsa1Rva2VucztcbiAgICAgICAgICAgICAgICBvcHRzLndhbGtUb2tlbnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwYWNrV2Fsa3Rva2Vucy5jYWxsKHRoaXMsIHRva2VuKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHdhbGtUb2tlbnMuY2FsbCh0aGlzLCB0b2tlbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9wdHMgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBpbiBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAjY29udmVydFJlbmRlcmVyRnVuY3Rpb24oZnVuYywgcHJvcCwgcmVuZGVyZXIpIHtcbiAgICAgICAgc3dpdGNoIChwcm9wKSB7XG4gICAgICAgICAgICBjYXNlICdoZWFkaW5nJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVuZGVyZXIucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRva2VucyksIHRva2VuLmRlcHRoLCB1bmVzY2FwZShyZW5kZXJlci5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zLCByZW5kZXJlci5wYXJzZXIudGV4dFJlbmRlcmVyKSkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdjb2RlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4udGV4dCwgdG9rZW4ubGFuZywgISF0b2tlbi5lc2NhcGVkKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNlbGwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5oZWFkZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgKz0gdGhpcy50YWJsZWNlbGwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRva2VuLmhlYWRlcltqXS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuczogdG9rZW4uaGVhZGVyW2pdLnRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246IHRva2VuLmFsaWduW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRva2VuLnJvd3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRva2VuLnJvd3Nbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJvdy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgKz0gdGhpcy50YWJsZWNlbGwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiByb3dba10udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiByb3dba10udG9rZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogdG9rZW4uYWxpZ25ba10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IHRoaXMudGFibGVyb3coeyB0ZXh0OiBjZWxsIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgaGVhZGVyLCBib2R5KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuLnR5cGUgfHwgdG9rZW4udHlwZSAhPT0gcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZXIucGFyc2UodG9rZW4udG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBib2R5KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuLnR5cGUgfHwgdG9rZW4udHlwZSAhPT0gcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmRlcmVkID0gdG9rZW4ub3JkZXJlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0b2tlbi5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9vc2UgPSB0b2tlbi5sb29zZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHkgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbi5pdGVtcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRva2VuLml0ZW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBpdGVtLnRhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbUJvZHkgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IHRoaXMuY2hlY2tib3goeyBjaGVja2VkOiAhIWNoZWNrZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnRva2Vucy5sZW5ndGggPiAwICYmIGl0ZW0udG9rZW5zWzBdLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRva2Vuc1swXS50ZXh0ID0gY2hlY2tib3ggKyAnICcgKyBpdGVtLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udG9rZW5zWzBdLnRva2VucyAmJiBpdGVtLnRva2Vuc1swXS50b2tlbnMubGVuZ3RoID4gMCAmJiBpdGVtLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQgPSBjaGVja2JveCArICcgJyArIGl0ZW0udG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50b2tlbnMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNoZWNrYm94ICsgJyAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Cb2R5ICs9IGNoZWNrYm94ICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Cb2R5ICs9IHRoaXMucGFyc2VyLnBhcnNlKGl0ZW0udG9rZW5zLCBsb29zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ICs9IHRoaXMubGlzdGl0ZW0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogaXRlbUJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbUJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiAhIWNoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiBpdGVtLnRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgYm9keSwgb3JkZXJlZCwgc3RhcnQpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4udGV4dCwgdG9rZW4uYmxvY2spO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdwYXJhZ3JhcGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4udGV4dCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0b2tlbi5ocmVmLCB0b2tlbi50aXRsZSwgdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdG9rZW4uaHJlZiwgdG9rZW4udGl0bGUsIHRva2VuLnRleHQpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlICdzdHJvbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50b2tlbnMpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnY29kZXNwYW4nOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0b2tlbi50ZXh0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSAnZGVsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4udHlwZSB8fCB0b2tlbi50eXBlICE9PSBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpcywgdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udG9rZW5zKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlbi50eXBlIHx8IHRva2VuLnR5cGUgIT09IHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCB0b2tlbi50ZXh0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jO1xuICAgIH1cbiAgICBzZXRPcHRpb25zKG9wdCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0geyAuLi50aGlzLmRlZmF1bHRzLCAuLi5vcHQgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGxleGVyKHNyYywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX0xleGVyLmxleChzcmMsIG9wdGlvbnMgPz8gdGhpcy5kZWZhdWx0cyk7XG4gICAgfVxuICAgIHBhcnNlcih0b2tlbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9QYXJzZXIucGFyc2UodG9rZW5zLCBvcHRpb25zID8/IHRoaXMuZGVmYXVsdHMpO1xuICAgIH1cbiAgICAjcGFyc2VNYXJrZG93bihsZXhlciwgcGFyc2VyKSB7XG4gICAgICAgIHJldHVybiAoc3JjLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnT3B0ID0geyAuLi5vcHRpb25zIH07XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7IC4uLnRoaXMuZGVmYXVsdHMsIC4uLm9yaWdPcHQgfTtcbiAgICAgICAgICAgIC8vIFNob3cgd2FybmluZyBpZiBhbiBleHRlbnNpb24gc2V0IGFzeW5jIHRvIHRydWUgYnV0IHRoZSBwYXJzZSB3YXMgY2FsbGVkIHdpdGggYXN5bmM6IGZhbHNlXG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0cy5hc3luYyA9PT0gdHJ1ZSAmJiBvcmlnT3B0LmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGlmICghb3B0LnNpbGVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ21hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFRoZSBhc3luYzogZmFsc2Ugb3B0aW9uIHNlbnQgdG8gcGFyc2Ugd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGhyb3dFcnJvciA9IHRoaXMuI29uRXJyb3IoISFvcHQuc2lsZW50LCAhIW9wdC5hc3luYyk7XG4gICAgICAgICAgICAvLyB0aHJvdyBlcnJvciBpbiBjYXNlIG9mIG5vbiBzdHJpbmcgaW5wdXRcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3JjID09PSAndW5kZWZpbmVkJyB8fCBzcmMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAnXG4gICAgICAgICAgICAgICAgICAgICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNyYykgKyAnLCBzdHJpbmcgZXhwZWN0ZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lmhvb2tzKSB7XG4gICAgICAgICAgICAgICAgb3B0Lmhvb2tzLm9wdGlvbnMgPSBvcHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvcHQuaG9va3MgPyBvcHQuaG9va3MucHJlcHJvY2VzcyhzcmMpIDogc3JjKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihzcmMgPT4gbGV4ZXIoc3JjLCBvcHQpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbih0b2tlbnMgPT4gb3B0Lmhvb2tzID8gb3B0Lmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModG9rZW5zKSA6IHRva2VucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4odG9rZW5zID0+IG9wdC53YWxrVG9rZW5zID8gUHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKHRva2Vucywgb3B0LndhbGtUb2tlbnMpKS50aGVuKCgpID0+IHRva2VucykgOiB0b2tlbnMpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHRva2VucyA9PiBwYXJzZXIodG9rZW5zLCBvcHQpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihodG1sID0+IG9wdC5ob29rcyA/IG9wdC5ob29rcy5wb3N0cHJvY2VzcyhodG1sKSA6IGh0bWwpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCh0aHJvd0Vycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5ob29rcykge1xuICAgICAgICAgICAgICAgICAgICBzcmMgPSBvcHQuaG9va3MucHJlcHJvY2VzcyhzcmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gbGV4ZXIoc3JjLCBvcHQpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gb3B0Lmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdC53YWxrVG9rZW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Fsa1Rva2Vucyh0b2tlbnMsIG9wdC53YWxrVG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBwYXJzZXIodG9rZW5zLCBvcHQpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuaG9va3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IG9wdC5ob29rcy5wb3N0cHJvY2VzcyhodG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAjb25FcnJvcihzaWxlbnQsIGFzeW5jKSB7XG4gICAgICAgIHJldHVybiAoZSkgPT4ge1xuICAgICAgICAgICAgZS5tZXNzYWdlICs9ICdcXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4nO1xuICAgICAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9ICc8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4nXG4gICAgICAgICAgICAgICAgICAgICsgZXNjYXBlJDEoZS5tZXNzYWdlICsgJycsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICsgJzwvcHJlPic7XG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jb25zdCBtYXJrZWRJbnN0YW5jZSA9IG5ldyBNYXJrZWQoKTtcbmZ1bmN0aW9uIG1hcmtlZChzcmMsIG9wdCkge1xuICAgIHJldHVybiBtYXJrZWRJbnN0YW5jZS5wYXJzZShzcmMsIG9wdCk7XG59XG4vKipcbiAqIFNldHMgdGhlIGRlZmF1bHQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBIYXNoIG9mIG9wdGlvbnNcbiAqL1xubWFya2VkLm9wdGlvbnMgPVxuICAgIG1hcmtlZC5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgbWFya2VkSW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgbWFya2VkLmRlZmF1bHRzID0gbWFya2VkSW5zdGFuY2UuZGVmYXVsdHM7XG4gICAgICAgIGNoYW5nZURlZmF1bHRzKG1hcmtlZC5kZWZhdWx0cyk7XG4gICAgICAgIHJldHVybiBtYXJrZWQ7XG4gICAgfTtcbi8qKlxuICogR2V0cyB0aGUgb3JpZ2luYWwgbWFya2VkIGRlZmF1bHQgb3B0aW9ucy5cbiAqL1xubWFya2VkLmdldERlZmF1bHRzID0gX2dldERlZmF1bHRzO1xubWFya2VkLmRlZmF1bHRzID0gX2RlZmF1bHRzO1xuLyoqXG4gKiBVc2UgRXh0ZW5zaW9uXG4gKi9cbm1hcmtlZC51c2UgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIG1hcmtlZEluc3RhbmNlLnVzZSguLi5hcmdzKTtcbiAgICBtYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWRJbnN0YW5jZS5kZWZhdWx0cztcbiAgICBjaGFuZ2VEZWZhdWx0cyhtYXJrZWQuZGVmYXVsdHMpO1xuICAgIHJldHVybiBtYXJrZWQ7XG59O1xuLyoqXG4gKiBSdW4gY2FsbGJhY2sgZm9yIGV2ZXJ5IHRva2VuXG4gKi9cbm1hcmtlZC53YWxrVG9rZW5zID0gZnVuY3Rpb24gKHRva2VucywgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbWFya2VkSW5zdGFuY2Uud2Fsa1Rva2Vucyh0b2tlbnMsIGNhbGxiYWNrKTtcbn07XG4vKipcbiAqIENvbXBpbGVzIG1hcmtkb3duIHRvIEhUTUwgd2l0aG91dCBlbmNsb3NpbmcgYHBgIHRhZy5cbiAqXG4gKiBAcGFyYW0gc3JjIFN0cmluZyBvZiBtYXJrZG93biBzb3VyY2UgdG8gYmUgY29tcGlsZWRcbiAqIEBwYXJhbSBvcHRpb25zIEhhc2ggb2Ygb3B0aW9uc1xuICogQHJldHVybiBTdHJpbmcgb2YgY29tcGlsZWQgSFRNTFxuICovXG5tYXJrZWQucGFyc2VJbmxpbmUgPSBtYXJrZWRJbnN0YW5jZS5wYXJzZUlubGluZTtcbi8qKlxuICogRXhwb3NlXG4gKi9cbm1hcmtlZC5QYXJzZXIgPSBfUGFyc2VyO1xubWFya2VkLnBhcnNlciA9IF9QYXJzZXIucGFyc2U7XG5tYXJrZWQuUmVuZGVyZXIgPSBfUmVuZGVyZXI7XG5tYXJrZWQuVGV4dFJlbmRlcmVyID0gX1RleHRSZW5kZXJlcjtcbm1hcmtlZC5MZXhlciA9IF9MZXhlcjtcbm1hcmtlZC5sZXhlciA9IF9MZXhlci5sZXg7XG5tYXJrZWQuVG9rZW5pemVyID0gX1Rva2VuaXplcjtcbm1hcmtlZC5Ib29rcyA9IF9Ib29rcztcbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcbmNvbnN0IG9wdGlvbnMgPSBtYXJrZWQub3B0aW9ucztcbmNvbnN0IHNldE9wdGlvbnMgPSBtYXJrZWQuc2V0T3B0aW9ucztcbmNvbnN0IHVzZSA9IG1hcmtlZC51c2U7XG5jb25zdCB3YWxrVG9rZW5zID0gbWFya2VkLndhbGtUb2tlbnM7XG5jb25zdCBwYXJzZUlubGluZSA9IG1hcmtlZC5wYXJzZUlubGluZTtcbmNvbnN0IHBhcnNlID0gbWFya2VkO1xuY29uc3QgcGFyc2VyID0gX1BhcnNlci5wYXJzZTtcbmNvbnN0IGxleGVyID0gX0xleGVyLmxleDtcblxuZXhwb3J0IHsgX0hvb2tzIGFzIEhvb2tzLCBfTGV4ZXIgYXMgTGV4ZXIsIE1hcmtlZCwgX1BhcnNlciBhcyBQYXJzZXIsIF9SZW5kZXJlciBhcyBSZW5kZXJlciwgX1RleHRSZW5kZXJlciBhcyBUZXh0UmVuZGVyZXIsIF9Ub2tlbml6ZXIgYXMgVG9rZW5pemVyLCBfZGVmYXVsdHMgYXMgZGVmYXVsdHMsIF9nZXREZWZhdWx0cyBhcyBnZXREZWZhdWx0cywgbGV4ZXIsIG1hcmtlZCwgb3B0aW9ucywgcGFyc2UsIHBhcnNlSW5saW5lLCBwYXJzZXIsIHNldE9wdGlvbnMsIHVzZSwgd2Fsa1Rva2VucyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFya2VkLmVzbS5qcy5tYXBcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGRlZGVudCh0ZW1wbCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzdHJpbmdzID0gQXJyYXkuZnJvbSh0eXBlb2YgdGVtcGwgPT09ICdzdHJpbmcnID8gW3RlbXBsXSA6IHRlbXBsKTtcbiAgICBzdHJpbmdzW3N0cmluZ3MubGVuZ3RoIC0gMV0gPSBzdHJpbmdzW3N0cmluZ3MubGVuZ3RoIC0gMV0ucmVwbGFjZSgvXFxyP1xcbihbXFx0IF0qKSQvLCAnJyk7XG4gICAgdmFyIGluZGVudExlbmd0aHMgPSBzdHJpbmdzLnJlZHVjZShmdW5jdGlvbiAoYXJyLCBzdHIpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goL1xcbihbXFx0IF0rfCg/IVxccykuKS9nKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIuY29uY2F0KG1hdGNoZXMubWFwKGZ1bmN0aW9uIChtYXRjaCkgeyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gbWF0Y2gubWF0Y2goL1tcXHQgXS9nKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDsgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSwgW10pO1xuICAgIGlmIChpbmRlbnRMZW5ndGhzLmxlbmd0aCkge1xuICAgICAgICB2YXIgcGF0dGVybl8xID0gbmV3IFJlZ0V4cChcIlxcbltcXHQgXXtcIiArIE1hdGgubWluLmFwcGx5KE1hdGgsIGluZGVudExlbmd0aHMpICsgXCJ9XCIsICdnJyk7XG4gICAgICAgIHN0cmluZ3MgPSBzdHJpbmdzLm1hcChmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShwYXR0ZXJuXzEsICdcXG4nKTsgfSk7XG4gICAgfVxuICAgIHN0cmluZ3NbMF0gPSBzdHJpbmdzWzBdLnJlcGxhY2UoL15cXHI/XFxuLywgJycpO1xuICAgIHZhciBzdHJpbmcgPSBzdHJpbmdzWzBdO1xuICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaSkge1xuICAgICAgICB2YXIgZW5kZW50YXRpb25zID0gc3RyaW5nLm1hdGNoKC8oPzpefFxcbikoICopJC8pO1xuICAgICAgICB2YXIgZW5kZW50YXRpb24gPSBlbmRlbnRhdGlvbnMgPyBlbmRlbnRhdGlvbnNbMV0gOiAnJztcbiAgICAgICAgdmFyIGluZGVudGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICAgICAgICBpbmRlbnRlZFZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChzdHIsIGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gMCA/IHN0ciA6IFwiXCIgKyBlbmRlbnRhdGlvbiArIHN0cjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmluZyArPSBpbmRlbnRlZFZhbHVlICsgc3RyaW5nc1tpICsgMV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGRlZGVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHtcbiAgZGVjb2RlRW50aXRpZXNcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgaGFzS2F0ZXgsXG4gIGxvZyxcbiAgcmVuZGVyS2F0ZXhcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9jcmVhdGVUZXh0LnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL2hhbmRsZS1tYXJrZG93bi10ZXh0LnRzXG5pbXBvcnQgeyBtYXJrZWQgfSBmcm9tIFwibWFya2VkXCI7XG5pbXBvcnQgeyBkZWRlbnQgfSBmcm9tIFwidHMtZGVkZW50XCI7XG5mdW5jdGlvbiBwcmVwcm9jZXNzTWFya2Rvd24obWFya2Rvd24sIHsgbWFya2Rvd25BdXRvV3JhcCB9KSB7XG4gIGNvbnN0IHdpdGhvdXRCUiA9IG1hcmtkb3duLnJlcGxhY2UoLzxiclxcLz4vZywgXCJcXG5cIik7XG4gIGNvbnN0IHdpdGhvdXRNdWx0aXBsZU5ld2xpbmVzID0gd2l0aG91dEJSLnJlcGxhY2UoL1xcbnsyLH0vZywgXCJcXG5cIik7XG4gIGNvbnN0IHdpdGhvdXRFeHRyYVNwYWNlcyA9IGRlZGVudCh3aXRob3V0TXVsdGlwbGVOZXdsaW5lcyk7XG4gIGlmIChtYXJrZG93bkF1dG9XcmFwID09PSBmYWxzZSkge1xuICAgIHJldHVybiB3aXRob3V0RXh0cmFTcGFjZXMucmVwbGFjZSgvIC9nLCBcIiZuYnNwO1wiKTtcbiAgfVxuICByZXR1cm4gd2l0aG91dEV4dHJhU3BhY2VzO1xufVxuX19uYW1lKHByZXByb2Nlc3NNYXJrZG93biwgXCJwcmVwcm9jZXNzTWFya2Rvd25cIik7XG5mdW5jdGlvbiBtYXJrZG93blRvTGluZXMobWFya2Rvd24sIGNvbmZpZyA9IHt9KSB7XG4gIGNvbnN0IHByZXByb2Nlc3NlZE1hcmtkb3duID0gcHJlcHJvY2Vzc01hcmtkb3duKG1hcmtkb3duLCBjb25maWcpO1xuICBjb25zdCBub2RlcyA9IG1hcmtlZC5sZXhlcihwcmVwcm9jZXNzZWRNYXJrZG93bik7XG4gIGNvbnN0IGxpbmVzID0gW1tdXTtcbiAgbGV0IGN1cnJlbnRMaW5lID0gMDtcbiAgZnVuY3Rpb24gcHJvY2Vzc05vZGUobm9kZSwgcGFyZW50VHlwZSA9IFwibm9ybWFsXCIpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSBcInRleHRcIikge1xuICAgICAgY29uc3QgdGV4dExpbmVzID0gbm9kZS50ZXh0LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgdGV4dExpbmVzLmZvckVhY2goKHRleHRMaW5lLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgICAgIGxpbmVzLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICAgIHRleHRMaW5lLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh3b3JkKSA9PiB7XG4gICAgICAgICAgaWYgKHdvcmQpIHtcbiAgICAgICAgICAgIGxpbmVzW2N1cnJlbnRMaW5lXS5wdXNoKHsgY29udGVudDogd29yZCwgdHlwZTogcGFyZW50VHlwZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3Ryb25nXCIgfHwgbm9kZS50eXBlID09PSBcImVtXCIpIHtcbiAgICAgIG5vZGUudG9rZW5zLmZvckVhY2goKGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICAgIHByb2Nlc3NOb2RlKGNvbnRlbnROb2RlLCBub2RlLnR5cGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICBsaW5lc1tjdXJyZW50TGluZV0ucHVzaCh7IGNvbnRlbnQ6IG5vZGUudGV4dCwgdHlwZTogXCJub3JtYWxcIiB9KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKHByb2Nlc3NOb2RlLCBcInByb2Nlc3NOb2RlXCIpO1xuICBub2Rlcy5mb3JFYWNoKCh0cmVlTm9kZSkgPT4ge1xuICAgIGlmICh0cmVlTm9kZS50eXBlID09PSBcInBhcmFncmFwaFwiKSB7XG4gICAgICB0cmVlTm9kZS50b2tlbnM/LmZvckVhY2goKGNvbnRlbnROb2RlKSA9PiB7XG4gICAgICAgIHByb2Nlc3NOb2RlKGNvbnRlbnROb2RlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHJlZU5vZGUudHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIGxpbmVzW2N1cnJlbnRMaW5lXS5wdXNoKHsgY29udGVudDogdHJlZU5vZGUudGV4dCwgdHlwZTogXCJub3JtYWxcIiB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGluZXM7XG59XG5fX25hbWUobWFya2Rvd25Ub0xpbmVzLCBcIm1hcmtkb3duVG9MaW5lc1wiKTtcbmZ1bmN0aW9uIG1hcmtkb3duVG9IVE1MKG1hcmtkb3duLCB7IG1hcmtkb3duQXV0b1dyYXAgfSA9IHt9KSB7XG4gIGNvbnN0IG5vZGVzID0gbWFya2VkLmxleGVyKG1hcmtkb3duKTtcbiAgZnVuY3Rpb24gb3V0cHV0KG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSBcInRleHRcIikge1xuICAgICAgaWYgKG1hcmtkb3duQXV0b1dyYXAgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnRleHQucmVwbGFjZSgvXFxuICovZywgXCI8YnIvPlwiKS5yZXBsYWNlKC8gL2csIFwiJm5ic3A7XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGUudGV4dC5yZXBsYWNlKC9cXG4gKi9nLCBcIjxici8+XCIpO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInN0cm9uZ1wiKSB7XG4gICAgICByZXR1cm4gYDxzdHJvbmc+JHtub2RlLnRva2Vucz8ubWFwKG91dHB1dCkuam9pbihcIlwiKX08L3N0cm9uZz5gO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcImVtXCIpIHtcbiAgICAgIHJldHVybiBgPGVtPiR7bm9kZS50b2tlbnM/Lm1hcChvdXRwdXQpLmpvaW4oXCJcIil9PC9lbT5gO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcInBhcmFncmFwaFwiKSB7XG4gICAgICByZXR1cm4gYDxwPiR7bm9kZS50b2tlbnM/Lm1hcChvdXRwdXQpLmpvaW4oXCJcIil9PC9wPmA7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3BhY2VcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICByZXR1cm4gYCR7bm9kZS50ZXh0fWA7XG4gICAgfVxuICAgIHJldHVybiBgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7bm9kZS50eXBlfWA7XG4gIH1cbiAgX19uYW1lKG91dHB1dCwgXCJvdXRwdXRcIik7XG4gIHJldHVybiBub2Rlcy5tYXAob3V0cHV0KS5qb2luKFwiXCIpO1xufVxuX19uYW1lKG1hcmtkb3duVG9IVE1MLCBcIm1hcmtkb3duVG9IVE1MXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvc3BsaXRUZXh0LnRzXG5mdW5jdGlvbiBzcGxpdFRleHRUb0NoYXJzKHRleHQpIHtcbiAgaWYgKEludGwuU2VnbWVudGVyKSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KHRleHQpXS5tYXAoKHMpID0+IHMuc2VnbWVudCk7XG4gIH1cbiAgcmV0dXJuIFsuLi50ZXh0XTtcbn1cbl9fbmFtZShzcGxpdFRleHRUb0NoYXJzLCBcInNwbGl0VGV4dFRvQ2hhcnNcIik7XG5mdW5jdGlvbiBzcGxpdFdvcmRUb0ZpdFdpZHRoKGNoZWNrRml0LCB3b3JkKSB7XG4gIGNvbnN0IGNoYXJhY3RlcnMgPSBzcGxpdFRleHRUb0NoYXJzKHdvcmQuY29udGVudCk7XG4gIHJldHVybiBzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uKGNoZWNrRml0LCBbXSwgY2hhcmFjdGVycywgd29yZC50eXBlKTtcbn1cbl9fbmFtZShzcGxpdFdvcmRUb0ZpdFdpZHRoLCBcInNwbGl0V29yZFRvRml0V2lkdGhcIik7XG5mdW5jdGlvbiBzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uKGNoZWNrRml0LCB1c2VkQ2hhcnMsIHJlbWFpbmluZ0NoYXJzLCB0eXBlKSB7XG4gIGlmIChyZW1haW5pbmdDaGFycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyBjb250ZW50OiB1c2VkQ2hhcnMuam9pbihcIlwiKSwgdHlwZSB9LFxuICAgICAgeyBjb250ZW50OiBcIlwiLCB0eXBlIH1cbiAgICBdO1xuICB9XG4gIGNvbnN0IFtuZXh0Q2hhciwgLi4ucmVzdF0gPSByZW1haW5pbmdDaGFycztcbiAgY29uc3QgbmV3V29yZCA9IFsuLi51c2VkQ2hhcnMsIG5leHRDaGFyXTtcbiAgaWYgKGNoZWNrRml0KFt7IGNvbnRlbnQ6IG5ld1dvcmQuam9pbihcIlwiKSwgdHlwZSB9XSkpIHtcbiAgICByZXR1cm4gc3BsaXRXb3JkVG9GaXRXaWR0aFJlY3Vyc2lvbihjaGVja0ZpdCwgbmV3V29yZCwgcmVzdCwgdHlwZSk7XG4gIH1cbiAgaWYgKHVzZWRDaGFycy5sZW5ndGggPT09IDAgJiYgbmV4dENoYXIpIHtcbiAgICB1c2VkQ2hhcnMucHVzaChuZXh0Q2hhcik7XG4gICAgcmVtYWluaW5nQ2hhcnMuc2hpZnQoKTtcbiAgfVxuICByZXR1cm4gW1xuICAgIHsgY29udGVudDogdXNlZENoYXJzLmpvaW4oXCJcIiksIHR5cGUgfSxcbiAgICB7IGNvbnRlbnQ6IHJlbWFpbmluZ0NoYXJzLmpvaW4oXCJcIiksIHR5cGUgfVxuICBdO1xufVxuX19uYW1lKHNwbGl0V29yZFRvRml0V2lkdGhSZWN1cnNpb24sIFwic3BsaXRXb3JkVG9GaXRXaWR0aFJlY3Vyc2lvblwiKTtcbmZ1bmN0aW9uIHNwbGl0TGluZVRvRml0V2lkdGgobGluZSwgY2hlY2tGaXQpIHtcbiAgaWYgKGxpbmUuc29tZSgoeyBjb250ZW50IH0pID0+IGNvbnRlbnQuaW5jbHVkZXMoXCJcXG5cIikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lXCIpO1xuICB9XG4gIHJldHVybiBzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uKGxpbmUsIGNoZWNrRml0KTtcbn1cbl9fbmFtZShzcGxpdExpbmVUb0ZpdFdpZHRoLCBcInNwbGl0TGluZVRvRml0V2lkdGhcIik7XG5mdW5jdGlvbiBzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uKHdvcmRzLCBjaGVja0ZpdCwgbGluZXMgPSBbXSwgbmV3TGluZSA9IFtdKSB7XG4gIGlmICh3b3Jkcy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAobmV3TGluZS5sZW5ndGggPiAwKSB7XG4gICAgICBsaW5lcy5wdXNoKG5ld0xpbmUpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXMubGVuZ3RoID4gMCA/IGxpbmVzIDogW107XG4gIH1cbiAgbGV0IGpvaW5lciA9IFwiXCI7XG4gIGlmICh3b3Jkc1swXS5jb250ZW50ID09PSBcIiBcIikge1xuICAgIGpvaW5lciA9IFwiIFwiO1xuICAgIHdvcmRzLnNoaWZ0KCk7XG4gIH1cbiAgY29uc3QgbmV4dFdvcmQgPSB3b3Jkcy5zaGlmdCgpID8/IHsgY29udGVudDogXCIgXCIsIHR5cGU6IFwibm9ybWFsXCIgfTtcbiAgY29uc3QgbGluZVdpdGhOZXh0V29yZCA9IFsuLi5uZXdMaW5lXTtcbiAgaWYgKGpvaW5lciAhPT0gXCJcIikge1xuICAgIGxpbmVXaXRoTmV4dFdvcmQucHVzaCh7IGNvbnRlbnQ6IGpvaW5lciwgdHlwZTogXCJub3JtYWxcIiB9KTtcbiAgfVxuICBsaW5lV2l0aE5leHRXb3JkLnB1c2gobmV4dFdvcmQpO1xuICBpZiAoY2hlY2tGaXQobGluZVdpdGhOZXh0V29yZCkpIHtcbiAgICByZXR1cm4gc3BsaXRMaW5lVG9GaXRXaWR0aFJlY3Vyc2lvbih3b3JkcywgY2hlY2tGaXQsIGxpbmVzLCBsaW5lV2l0aE5leHRXb3JkKTtcbiAgfVxuICBpZiAobmV3TGluZS5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaChuZXdMaW5lKTtcbiAgICB3b3Jkcy51bnNoaWZ0KG5leHRXb3JkKTtcbiAgfSBlbHNlIGlmIChuZXh0V29yZC5jb250ZW50KSB7XG4gICAgY29uc3QgW2xpbmUsIHJlc3RdID0gc3BsaXRXb3JkVG9GaXRXaWR0aChjaGVja0ZpdCwgbmV4dFdvcmQpO1xuICAgIGxpbmVzLnB1c2goW2xpbmVdKTtcbiAgICBpZiAocmVzdC5jb250ZW50KSB7XG4gICAgICB3b3Jkcy51bnNoaWZ0KHJlc3QpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3BsaXRMaW5lVG9GaXRXaWR0aFJlY3Vyc2lvbih3b3JkcywgY2hlY2tGaXQsIGxpbmVzKTtcbn1cbl9fbmFtZShzcGxpdExpbmVUb0ZpdFdpZHRoUmVjdXJzaW9uLCBcInNwbGl0TGluZVRvRml0V2lkdGhSZWN1cnNpb25cIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9jcmVhdGVUZXh0LnRzXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRvbSwgc3R5bGVGbikge1xuICBpZiAoc3R5bGVGbikge1xuICAgIGRvbS5hdHRyKFwic3R5bGVcIiwgc3R5bGVGbik7XG4gIH1cbn1cbl9fbmFtZShhcHBseVN0eWxlLCBcImFwcGx5U3R5bGVcIik7XG5hc3luYyBmdW5jdGlvbiBhZGRIdG1sU3BhbihlbGVtZW50LCBub2RlLCB3aWR0aCwgY2xhc3NlcywgYWRkQmFja2dyb3VuZCA9IGZhbHNlKSB7XG4gIGNvbnN0IGZvID0gZWxlbWVudC5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpO1xuICBjb25zdCBkaXYgPSBmby5hcHBlbmQoXCJ4aHRtbDpkaXZcIik7XG4gIGxldCBsYWJlbCA9IG5vZGUubGFiZWw7XG4gIGlmIChub2RlLmxhYmVsICYmIGhhc0thdGV4KG5vZGUubGFiZWwpKSB7XG4gICAgbGFiZWwgPSBhd2FpdCByZW5kZXJLYXRleChub2RlLmxhYmVsLnJlcGxhY2UoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgsIFwiXFxuXCIpLCBnZXRDb25maWcoKSk7XG4gIH1cbiAgY29uc3QgbGFiZWxDbGFzcyA9IG5vZGUuaXNOb2RlID8gXCJub2RlTGFiZWxcIiA6IFwiZWRnZUxhYmVsXCI7XG4gIGNvbnN0IHNwYW4gPSBkaXYuYXBwZW5kKFwic3BhblwiKTtcbiAgc3Bhbi5odG1sKGxhYmVsKTtcbiAgYXBwbHlTdHlsZShzcGFuLCBub2RlLmxhYmVsU3R5bGUpO1xuICBzcGFuLmF0dHIoXCJjbGFzc1wiLCBgJHtsYWJlbENsYXNzfSAke2NsYXNzZXN9YCk7XG4gIGFwcGx5U3R5bGUoZGl2LCBub2RlLmxhYmVsU3R5bGUpO1xuICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGUtY2VsbFwiKTtcbiAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJub3dyYXBcIik7XG4gIGRpdi5zdHlsZShcImxpbmUtaGVpZ2h0XCIsIFwiMS41XCIpO1xuICBkaXYuc3R5bGUoXCJtYXgtd2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICBkaXYuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpO1xuICBkaXYuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKTtcbiAgaWYgKGFkZEJhY2tncm91bmQpIHtcbiAgICBkaXYuYXR0cihcImNsYXNzXCIsIFwibGFiZWxCa2dcIik7XG4gIH1cbiAgbGV0IGJib3ggPSBkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBpZiAoYmJveC53aWR0aCA9PT0gd2lkdGgpIHtcbiAgICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIik7XG4gICAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJicmVhay1zcGFjZXNcIik7XG4gICAgZGl2LnN0eWxlKFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xuICAgIGJib3ggPSBkaXYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG4gIHJldHVybiBmby5ub2RlKCk7XG59XG5fX25hbWUoYWRkSHRtbFNwYW4sIFwiYWRkSHRtbFNwYW5cIik7XG5mdW5jdGlvbiBjcmVhdGVUc3Bhbih0ZXh0RWxlbWVudCwgbGluZUluZGV4LCBsaW5lSGVpZ2h0KSB7XG4gIHJldHVybiB0ZXh0RWxlbWVudC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0ZXh0LW91dGVyLXRzcGFuXCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIGxpbmVJbmRleCAqIGxpbmVIZWlnaHQgLSAwLjEgKyBcImVtXCIpLmF0dHIoXCJkeVwiLCBsaW5lSGVpZ2h0ICsgXCJlbVwiKTtcbn1cbl9fbmFtZShjcmVhdGVUc3BhbiwgXCJjcmVhdGVUc3BhblwiKTtcbmZ1bmN0aW9uIGNvbXB1dGVXaWR0aE9mVGV4dChwYXJlbnROb2RlLCBsaW5lSGVpZ2h0LCBsaW5lKSB7XG4gIGNvbnN0IHRlc3RFbGVtZW50ID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpO1xuICBjb25zdCB0ZXN0U3BhbiA9IGNyZWF0ZVRzcGFuKHRlc3RFbGVtZW50LCAxLCBsaW5lSGVpZ2h0KTtcbiAgdXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXModGVzdFNwYW4sIGxpbmUpO1xuICBjb25zdCB0ZXh0TGVuZ3RoID0gdGVzdFNwYW4ubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO1xuICB0ZXN0RWxlbWVudC5yZW1vdmUoKTtcbiAgcmV0dXJuIHRleHRMZW5ndGg7XG59XG5fX25hbWUoY29tcHV0ZVdpZHRoT2ZUZXh0LCBcImNvbXB1dGVXaWR0aE9mVGV4dFwiKTtcbmZ1bmN0aW9uIGNvbXB1dGVEaW1lbnNpb25PZlRleHQocGFyZW50Tm9kZSwgbGluZUhlaWdodCwgdGV4dCkge1xuICBjb25zdCB0ZXN0RWxlbWVudCA9IHBhcmVudE5vZGUuYXBwZW5kKFwidGV4dFwiKTtcbiAgY29uc3QgdGVzdFNwYW4gPSBjcmVhdGVUc3Bhbih0ZXN0RWxlbWVudCwgMSwgbGluZUhlaWdodCk7XG4gIHVwZGF0ZVRleHRDb250ZW50QW5kU3R5bGVzKHRlc3RTcGFuLCBbeyBjb250ZW50OiB0ZXh0LCB0eXBlOiBcIm5vcm1hbFwiIH1dKTtcbiAgY29uc3QgdGV4dERpbWVuc2lvbiA9IHRlc3RTcGFuLm5vZGUoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGlmICh0ZXh0RGltZW5zaW9uKSB7XG4gICAgdGVzdEVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cbiAgcmV0dXJuIHRleHREaW1lbnNpb247XG59XG5fX25hbWUoY29tcHV0ZURpbWVuc2lvbk9mVGV4dCwgXCJjb21wdXRlRGltZW5zaW9uT2ZUZXh0XCIpO1xuZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVkVGV4dCh3aWR0aCwgZywgc3RydWN0dXJlZFRleHQsIGFkZEJhY2tncm91bmQgPSBmYWxzZSkge1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gMS4xO1xuICBjb25zdCBsYWJlbEdyb3VwID0gZy5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCBia2cgPSBsYWJlbEdyb3VwLmluc2VydChcInJlY3RcIikuYXR0cihcImNsYXNzXCIsIFwiYmFja2dyb3VuZFwiKS5hdHRyKFwic3R5bGVcIiwgXCJzdHJva2U6IG5vbmVcIik7XG4gIGNvbnN0IHRleHRFbGVtZW50ID0gbGFiZWxHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIFwiLTEwLjFcIik7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RydWN0dXJlZFRleHQpIHtcbiAgICBjb25zdCBjaGVja1dpZHRoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobGluZTIpID0+IGNvbXB1dGVXaWR0aE9mVGV4dChsYWJlbEdyb3VwLCBsaW5lSGVpZ2h0LCBsaW5lMikgPD0gd2lkdGgsIFwiY2hlY2tXaWR0aFwiKTtcbiAgICBjb25zdCBsaW5lc1VuZGVyV2lkdGggPSBjaGVja1dpZHRoKGxpbmUpID8gW2xpbmVdIDogc3BsaXRMaW5lVG9GaXRXaWR0aChsaW5lLCBjaGVja1dpZHRoKTtcbiAgICBmb3IgKGNvbnN0IHByZXBhcmVkTGluZSBvZiBsaW5lc1VuZGVyV2lkdGgpIHtcbiAgICAgIGNvbnN0IHRzcGFuID0gY3JlYXRlVHNwYW4odGV4dEVsZW1lbnQsIGxpbmVJbmRleCwgbGluZUhlaWdodCk7XG4gICAgICB1cGRhdGVUZXh0Q29udGVudEFuZFN0eWxlcyh0c3BhbiwgcHJlcGFyZWRMaW5lKTtcbiAgICAgIGxpbmVJbmRleCsrO1xuICAgIH1cbiAgfVxuICBpZiAoYWRkQmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGJib3ggPSB0ZXh0RWxlbWVudC5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xuICAgIGJrZy5hdHRyKFwieFwiLCAtcGFkZGluZykuYXR0cihcInlcIiwgLXBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgMiAqIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgcmV0dXJuIGxhYmVsR3JvdXAubm9kZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZXh0RWxlbWVudC5ub2RlKCk7XG4gIH1cbn1cbl9fbmFtZShjcmVhdGVGb3JtYXR0ZWRUZXh0LCBcImNyZWF0ZUZvcm1hdHRlZFRleHRcIik7XG5mdW5jdGlvbiB1cGRhdGVUZXh0Q29udGVudEFuZFN0eWxlcyh0c3Bhbiwgd3JhcHBlZExpbmUpIHtcbiAgdHNwYW4udGV4dChcIlwiKTtcbiAgd3JhcHBlZExpbmUuZm9yRWFjaCgod29yZCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpbm5lclRzcGFuID0gdHNwYW4uYXBwZW5kKFwidHNwYW5cIikuYXR0cihcImZvbnQtc3R5bGVcIiwgd29yZC50eXBlID09PSBcImVtXCIgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIikuYXR0cihcImNsYXNzXCIsIFwidGV4dC1pbm5lci10c3BhblwiKS5hdHRyKFwiZm9udC13ZWlnaHRcIiwgd29yZC50eXBlID09PSBcInN0cm9uZ1wiID8gXCJib2xkXCIgOiBcIm5vcm1hbFwiKTtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIGlubmVyVHNwYW4udGV4dCh3b3JkLmNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lclRzcGFuLnRleHQoXCIgXCIgKyB3b3JkLmNvbnRlbnQpO1xuICAgIH1cbiAgfSk7XG59XG5fX25hbWUodXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXMsIFwidXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXNcIik7XG5mdW5jdGlvbiByZXBsYWNlSWNvblN1YnN0cmluZyh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoXG4gICAgL2ZhW2JrbHJzXT86ZmEtW1xcdy1dKy9nLFxuICAgIC8vIGNzcGVsbDogZGlzYWJsZS1saW5lXG4gICAgKHMpID0+IGA8aSBjbGFzcz0nJHtzLnJlcGxhY2UoXCI6XCIsIFwiIFwiKX0nPjwvaT5gXG4gICk7XG59XG5fX25hbWUocmVwbGFjZUljb25TdWJzdHJpbmcsIFwicmVwbGFjZUljb25TdWJzdHJpbmdcIik7XG52YXIgY3JlYXRlVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsLCB0ZXh0ID0gXCJcIiwge1xuICBzdHlsZSA9IFwiXCIsXG4gIGlzVGl0bGUgPSBmYWxzZSxcbiAgY2xhc3NlcyA9IFwiXCIsXG4gIHVzZUh0bWxMYWJlbHMgPSB0cnVlLFxuICBpc05vZGUgPSB0cnVlLFxuICB3aWR0aCA9IDIwMCxcbiAgYWRkU3ZnQmFja2dyb3VuZCA9IGZhbHNlXG59ID0ge30sIGNvbmZpZykgPT4ge1xuICBsb2cuaW5mbyhcbiAgICBcIlhZWiBjcmVhdGVUZXh0XCIsXG4gICAgdGV4dCxcbiAgICBzdHlsZSxcbiAgICBpc1RpdGxlLFxuICAgIGNsYXNzZXMsXG4gICAgdXNlSHRtbExhYmVscyxcbiAgICBpc05vZGUsXG4gICAgXCJhZGRTdmdCYWNrZ3JvdW5kOiBcIixcbiAgICBhZGRTdmdCYWNrZ3JvdW5kXG4gICk7XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgY29uc3QgaHRtbFRleHQgPSBtYXJrZG93blRvSFRNTCh0ZXh0LCBjb25maWcpO1xuICAgIGNvbnN0IGRlY29kZWRSZXBsYWNlZFRleHQgPSByZXBsYWNlSWNvblN1YnN0cmluZyhkZWNvZGVFbnRpdGllcyhodG1sVGV4dCkpO1xuICAgIGNvbnN0IGlucHV0Rm9yS2F0ZXggPSB0ZXh0LnJlcGxhY2UoL1xcXFxcXFxcL2csIFwiXFxcXFwiKTtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgaXNOb2RlLFxuICAgICAgbGFiZWw6IGhhc0thdGV4KHRleHQpID8gaW5wdXRGb3JLYXRleCA6IGRlY29kZWRSZXBsYWNlZFRleHQsXG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZS5yZXBsYWNlKFwiZmlsbDpcIiwgXCJjb2xvcjpcIilcbiAgICB9O1xuICAgIGNvbnN0IHZlcnRleE5vZGUgPSBhd2FpdCBhZGRIdG1sU3BhbihlbCwgbm9kZSwgd2lkdGgsIGNsYXNzZXMsIGFkZFN2Z0JhY2tncm91bmQpO1xuICAgIHJldHVybiB2ZXJ0ZXhOb2RlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNhbml0aXplQlIgPSB0ZXh0LnJlcGxhY2UoLzxiclxccypcXC8/Pi9nLCBcIjxici8+XCIpO1xuICAgIGNvbnN0IHN0cnVjdHVyZWRUZXh0ID0gbWFya2Rvd25Ub0xpbmVzKHNhbml0aXplQlIucmVwbGFjZShcIjxicj5cIiwgXCI8YnIvPlwiKSwgY29uZmlnKTtcbiAgICBjb25zdCBzdmdMYWJlbCA9IGNyZWF0ZUZvcm1hdHRlZFRleHQoXG4gICAgICB3aWR0aCxcbiAgICAgIGVsLFxuICAgICAgc3RydWN0dXJlZFRleHQsXG4gICAgICB0ZXh0ID8gYWRkU3ZnQmFja2dyb3VuZCA6IGZhbHNlXG4gICAgKTtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBpZiAoL3N0cm9rZTovLmV4ZWMoc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlID0gc3R5bGUucmVwbGFjZShcInN0cm9rZTpcIiwgXCJsaW5lQ29sb3I6XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZUxhYmVsVGV4dFN0eWxlID0gc3R5bGUucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL2NvbG9yOi9nLCBcImZpbGw6XCIpO1xuICAgICAgc2VsZWN0KHN2Z0xhYmVsKS5hdHRyKFwic3R5bGVcIiwgbm9kZUxhYmVsVGV4dFN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZWRnZUxhYmVsUmVjdFN0eWxlID0gc3R5bGUucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywgXCJcIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL2JhY2tncm91bmQ6L2csIFwiZmlsbDpcIik7XG4gICAgICBzZWxlY3Qoc3ZnTGFiZWwpLnNlbGVjdChcInJlY3RcIikuYXR0cihcInN0eWxlXCIsIGVkZ2VMYWJlbFJlY3RTdHlsZS5yZXBsYWNlKC9iYWNrZ3JvdW5kOi9nLCBcImZpbGw6XCIpKTtcbiAgICAgIGNvbnN0IGVkZ2VMYWJlbFRleHRTdHlsZSA9IHN0eWxlLnJlcGxhY2UoL3N0cm9rZTpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL3N0cm9rZS13aWR0aDpbXjtdKzs/L2csIFwiXCIpLnJlcGxhY2UoL2ZpbGw6W147XSs7Py9nLCBcIlwiKS5yZXBsYWNlKC9jb2xvcjovZywgXCJmaWxsOlwiKTtcbiAgICAgIHNlbGVjdChzdmdMYWJlbCkuc2VsZWN0KFwidGV4dFwiKS5hdHRyKFwic3R5bGVcIiwgZWRnZUxhYmVsVGV4dFN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59LCBcImNyZWF0ZVRleHRcIik7XG5cbmV4cG9ydCB7XG4gIGNvbXB1dGVEaW1lbnNpb25PZlRleHQsXG4gIHJlcGxhY2VJY29uU3Vic3RyaW5nLFxuICBjcmVhdGVUZXh0XG59O1xuIiwKICAgICJmdW5jdGlvbiB0KHQsZSxzKXtpZih0JiZ0Lmxlbmd0aCl7Y29uc3RbbixvXT1lLGE9TWF0aC5QSS8xODAqcyxoPU1hdGguY29zKGEpLHI9TWF0aC5zaW4oYSk7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3RbdCxzXT1lO2VbMF09KHQtbikqaC0ocy1vKSpyK24sZVsxXT0odC1uKSpyKyhzLW8pKmgrb319fWZ1bmN0aW9uIGUodCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfWZ1bmN0aW9uIHMocyxuLG8sYT0xKXtjb25zdCBoPW8scj1NYXRoLm1heChuLC4xKSxpPXNbMF0mJnNbMF1bMF0mJlwibnVtYmVyXCI9PXR5cGVvZiBzWzBdWzBdP1tzXTpzLGM9WzAsMF07aWYoaClmb3IoY29uc3QgZSBvZiBpKXQoZSxjLGgpO2NvbnN0IGw9ZnVuY3Rpb24odCxzLG4pe2NvbnN0IG89W107Zm9yKGNvbnN0IHMgb2YgdCl7Y29uc3QgdD1bLi4uc107ZSh0WzBdLHRbdC5sZW5ndGgtMV0pfHx0LnB1c2goW3RbMF1bMF0sdFswXVsxXV0pLHQubGVuZ3RoPjImJm8ucHVzaCh0KX1jb25zdCBhPVtdO3M9TWF0aC5tYXgocywuMSk7Y29uc3QgaD1bXTtmb3IoY29uc3QgdCBvZiBvKWZvcihsZXQgZT0wO2U8dC5sZW5ndGgtMTtlKyspe2NvbnN0IHM9dFtlXSxuPXRbZSsxXTtpZihzWzFdIT09blsxXSl7Y29uc3QgdD1NYXRoLm1pbihzWzFdLG5bMV0pO2gucHVzaCh7eW1pbjp0LHltYXg6TWF0aC5tYXgoc1sxXSxuWzFdKSx4OnQ9PT1zWzFdP3NbMF06blswXSxpc2xvcGU6KG5bMF0tc1swXSkvKG5bMV0tc1sxXSl9KX19aWYoaC5zb3J0KCgodCxlKT0+dC55bWluPGUueW1pbj8tMTp0LnltaW4+ZS55bWluPzE6dC54PGUueD8tMTp0Lng+ZS54PzE6dC55bWF4PT09ZS55bWF4PzA6KHQueW1heC1lLnltYXgpL01hdGguYWJzKHQueW1heC1lLnltYXgpKSksIWgubGVuZ3RoKXJldHVybiBhO2xldCByPVtdLGk9aFswXS55bWluLGM9MDtmb3IoO3IubGVuZ3RofHxoLmxlbmd0aDspe2lmKGgubGVuZ3RoKXtsZXQgdD0tMTtmb3IobGV0IGU9MDtlPGgubGVuZ3RoJiYhKGhbZV0ueW1pbj5pKTtlKyspdD1lO2guc3BsaWNlKDAsdCsxKS5mb3JFYWNoKCh0PT57ci5wdXNoKHtzOmksZWRnZTp0fSl9KSl9aWYocj1yLmZpbHRlcigodD0+ISh0LmVkZ2UueW1heDw9aSkpKSxyLnNvcnQoKCh0LGUpPT50LmVkZ2UueD09PWUuZWRnZS54PzA6KHQuZWRnZS54LWUuZWRnZS54KS9NYXRoLmFicyh0LmVkZ2UueC1lLmVkZ2UueCkpKSwoMSE9PW58fGMlcz09MCkmJnIubGVuZ3RoPjEpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kz0yKXtjb25zdCBlPXQrMTtpZihlPj1yLmxlbmd0aClicmVhaztjb25zdCBzPXJbdF0uZWRnZSxuPXJbZV0uZWRnZTthLnB1c2goW1tNYXRoLnJvdW5kKHMueCksaV0sW01hdGgucm91bmQobi54KSxpXV0pfWkrPW4sci5mb3JFYWNoKCh0PT57dC5lZGdlLng9dC5lZGdlLngrbip0LmVkZ2UuaXNsb3BlfSkpLGMrK31yZXR1cm4gYX0oaSxyLGEpO2lmKGgpe2Zvcihjb25zdCBlIG9mIGkpdChlLGMsLWgpOyFmdW5jdGlvbihlLHMsbil7Y29uc3Qgbz1bXTtlLmZvckVhY2goKHQ9Pm8ucHVzaCguLi50KSkpLHQobyxzLG4pfShsLGMsLWgpfXJldHVybiBsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbjtjb25zdCBvPWUuaGFjaHVyZUFuZ2xlKzkwO2xldCBhPWUuaGFjaHVyZUdhcDthPDAmJihhPTQqZS5zdHJva2VXaWR0aCksYT1NYXRoLnJvdW5kKE1hdGgubWF4KGEsLjEpKTtsZXQgaD0xO3JldHVybiBlLnJvdWdobmVzcz49MSYmKChudWxsPT09KG49ZS5yYW5kb21pemVyKXx8dm9pZCAwPT09bj92b2lkIDA6bi5uZXh0KCkpfHxNYXRoLnJhbmRvbSgpKT4uNyYmKGg9YSkscyh0LGEsbyxofHwxKX1jbGFzcyBve2NvbnN0cnVjdG9yKHQpe3RoaXMuaGVscGVyPXR9ZmlsbFBvbHlnb25zKHQsZSl7cmV0dXJuIHRoaXMuX2ZpbGxQb2x5Z29ucyh0LGUpfV9maWxsUG9seWdvbnModCxlKXtjb25zdCBzPW4odCxlKTtyZXR1cm57dHlwZTpcImZpbGxTa2V0Y2hcIixvcHM6dGhpcy5yZW5kZXJMaW5lcyhzLGUpfX1yZW5kZXJMaW5lcyh0LGUpe2NvbnN0IHM9W107Zm9yKGNvbnN0IG4gb2YgdClzLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyhuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdLGUpKTtyZXR1cm4gc319ZnVuY3Rpb24gYSh0KXtjb25zdCBlPXRbMF0scz10WzFdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZVswXS1zWzBdLDIpK01hdGgucG93KGVbMV0tc1sxXSwyKSl9Y2xhc3MgaCBleHRlbmRzIG97ZmlsbFBvbHlnb25zKHQsZSl7bGV0IHM9ZS5oYWNodXJlR2FwO3M8MCYmKHM9NCplLnN0cm9rZVdpZHRoKSxzPU1hdGgubWF4KHMsLjEpO2NvbnN0IG89bih0LE9iamVjdC5hc3NpZ24oe30sZSx7aGFjaHVyZUdhcDpzfSkpLGg9TWF0aC5QSS8xODAqZS5oYWNodXJlQW5nbGUscj1bXSxpPS41KnMqTWF0aC5jb3MoaCksYz0uNSpzKk1hdGguc2luKGgpO2Zvcihjb25zdFt0LGVdb2YgbylhKFt0LGVdKSYmci5wdXNoKFtbdFswXS1pLHRbMV0rY10sWy4uLmVdXSxbW3RbMF0raSx0WzFdLWNdLFsuLi5lXV0pO3JldHVybnt0eXBlOlwiZmlsbFNrZXRjaFwiLG9wczp0aGlzLnJlbmRlckxpbmVzKHIsZSl9fX1jbGFzcyByIGV4dGVuZHMgb3tmaWxsUG9seWdvbnModCxlKXtjb25zdCBzPXRoaXMuX2ZpbGxQb2x5Z29ucyh0LGUpLG49T2JqZWN0LmFzc2lnbih7fSxlLHtoYWNodXJlQW5nbGU6ZS5oYWNodXJlQW5nbGUrOTB9KSxvPXRoaXMuX2ZpbGxQb2x5Z29ucyh0LG4pO3JldHVybiBzLm9wcz1zLm9wcy5jb25jYXQoby5vcHMpLHN9fWNsYXNzIGl7Y29uc3RydWN0b3IodCl7dGhpcy5oZWxwZXI9dH1maWxsUG9seWdvbnModCxlKXtjb25zdCBzPW4odCxlPU9iamVjdC5hc3NpZ24oe30sZSx7aGFjaHVyZUFuZ2xlOjB9KSk7cmV0dXJuIHRoaXMuZG90c09uTGluZXMocyxlKX1kb3RzT25MaW5lcyh0LGUpe2NvbnN0IHM9W107bGV0IG49ZS5oYWNodXJlR2FwO248MCYmKG49NCplLnN0cm9rZVdpZHRoKSxuPU1hdGgubWF4KG4sLjEpO2xldCBvPWUuZmlsbFdlaWdodDtvPDAmJihvPWUuc3Ryb2tlV2lkdGgvMik7Y29uc3QgaD1uLzQ7Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3QgdD1hKHIpLGk9dC9uLGM9TWF0aC5jZWlsKGkpLTEsbD10LWMqbix1PShyWzBdWzBdK3JbMV1bMF0pLzItbi80LHA9TWF0aC5taW4oclswXVsxXSxyWzFdWzFdKTtmb3IobGV0IHQ9MDt0PGM7dCsrKXtjb25zdCBhPXArbCt0Km4scj11LWgrMipNYXRoLnJhbmRvbSgpKmgsaT1hLWgrMipNYXRoLnJhbmRvbSgpKmgsYz10aGlzLmhlbHBlci5lbGxpcHNlKHIsaSxvLG8sZSk7cy5wdXNoKC4uLmMub3BzKX19cmV0dXJue3R5cGU6XCJmaWxsU2tldGNoXCIsb3BzOnN9fX1jbGFzcyBje2NvbnN0cnVjdG9yKHQpe3RoaXMuaGVscGVyPXR9ZmlsbFBvbHlnb25zKHQsZSl7Y29uc3Qgcz1uKHQsZSk7cmV0dXJue3R5cGU6XCJmaWxsU2tldGNoXCIsb3BzOnRoaXMuZGFzaGVkTGluZShzLGUpfX1kYXNoZWRMaW5lKHQsZSl7Y29uc3Qgcz1lLmRhc2hPZmZzZXQ8MD9lLmhhY2h1cmVHYXA8MD80KmUuc3Ryb2tlV2lkdGg6ZS5oYWNodXJlR2FwOmUuZGFzaE9mZnNldCxuPWUuZGFzaEdhcDwwP2UuaGFjaHVyZUdhcDwwPzQqZS5zdHJva2VXaWR0aDplLmhhY2h1cmVHYXA6ZS5kYXNoR2FwLG89W107cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IGg9YSh0KSxyPU1hdGguZmxvb3IoaC8ocytuKSksaT0oaCtuLXIqKHMrbikpLzI7bGV0IGM9dFswXSxsPXRbMV07Y1swXT5sWzBdJiYoYz10WzFdLGw9dFswXSk7Y29uc3QgdT1NYXRoLmF0YW4oKGxbMV0tY1sxXSkvKGxbMF0tY1swXSkpO2ZvcihsZXQgdD0wO3Q8cjt0Kyspe2NvbnN0IGE9dCoocytuKSxoPWErcyxyPVtjWzBdK2EqTWF0aC5jb3ModSkraSpNYXRoLmNvcyh1KSxjWzFdK2EqTWF0aC5zaW4odSkraSpNYXRoLnNpbih1KV0sbD1bY1swXStoKk1hdGguY29zKHUpK2kqTWF0aC5jb3ModSksY1sxXStoKk1hdGguc2luKHUpK2kqTWF0aC5zaW4odSldO28ucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHJbMF0sclsxXSxsWzBdLGxbMV0sZSkpfX0pKSxvfX1jbGFzcyBse2NvbnN0cnVjdG9yKHQpe3RoaXMuaGVscGVyPXR9ZmlsbFBvbHlnb25zKHQsZSl7Y29uc3Qgcz1lLmhhY2h1cmVHYXA8MD80KmUuc3Ryb2tlV2lkdGg6ZS5oYWNodXJlR2FwLG89ZS56aWd6YWdPZmZzZXQ8MD9zOmUuemlnemFnT2Zmc2V0LGE9bih0LGU9T2JqZWN0LmFzc2lnbih7fSxlLHtoYWNodXJlR2FwOnMrb30pKTtyZXR1cm57dHlwZTpcImZpbGxTa2V0Y2hcIixvcHM6dGhpcy56aWd6YWdMaW5lcyhhLG8sZSl9fXppZ3phZ0xpbmVzKHQsZSxzKXtjb25zdCBuPVtdO3JldHVybiB0LmZvckVhY2goKHQ9Pntjb25zdCBvPWEodCksaD1NYXRoLnJvdW5kKG8vKDIqZSkpO2xldCByPXRbMF0saT10WzFdO3JbMF0+aVswXSYmKHI9dFsxXSxpPXRbMF0pO2NvbnN0IGM9TWF0aC5hdGFuKChpWzFdLXJbMV0pLyhpWzBdLXJbMF0pKTtmb3IobGV0IHQ9MDt0PGg7dCsrKXtjb25zdCBvPTIqdCplLGE9MioodCsxKSplLGg9TWF0aC5zcXJ0KDIqTWF0aC5wb3coZSwyKSksaT1bclswXStvKk1hdGguY29zKGMpLHJbMV0rbypNYXRoLnNpbihjKV0sbD1bclswXSthKk1hdGguY29zKGMpLHJbMV0rYSpNYXRoLnNpbihjKV0sdT1baVswXStoKk1hdGguY29zKGMrTWF0aC5QSS80KSxpWzFdK2gqTWF0aC5zaW4oYytNYXRoLlBJLzQpXTtuLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyhpWzBdLGlbMV0sdVswXSx1WzFdLHMpLC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHModVswXSx1WzFdLGxbMF0sbFsxXSxzKSl9fSkpLG59fWNvbnN0IHU9e307Y2xhc3MgcHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlZWQ9dH1uZXh0KCl7cmV0dXJuIHRoaXMuc2VlZD8oMioqMzEtMSYodGhpcy5zZWVkPU1hdGguaW11bCg0ODI3MSx0aGlzLnNlZWQpKSkvMioqMzE6TWF0aC5yYW5kb20oKX19Y29uc3QgZj0wLGQ9MSxnPTIsTT17QTo3LGE6NyxDOjYsYzo2LEg6MSxoOjEsTDoyLGw6MixNOjIsbToyLFE6NCxxOjQsUzo0LHM6NCxUOjIsdDoyLFY6MSx2OjEsWjowLHo6MH07ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0LnR5cGU9PT1lfWZ1bmN0aW9uIGIodCl7Y29uc3QgZT1bXSxzPWZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3IEFycmF5O2Zvcig7XCJcIiE9PXQ7KWlmKHQubWF0Y2goL14oWyBcXHRcXHJcXG4sXSspLykpdD10LnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKTtlbHNlIGlmKHQubWF0Y2goL14oW2FBY0NoSGxMbU1xUXNTdFR2VnpaXSkvKSllW2UubGVuZ3RoXT17dHlwZTpmLHRleHQ6UmVnRXhwLiQxfSx0PXQuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2V7aWYoIXQubWF0Y2goL14oKFstK10/WzAtOV0rKFxcLlswLTldKik/fFstK10/XFwuWzAtOV0rKShbZUVdWy0rXT9bMC05XSspPykvKSlyZXR1cm5bXTtlW2UubGVuZ3RoXT17dHlwZTpkLHRleHQ6YCR7cGFyc2VGbG9hdChSZWdFeHAuJDEpfWB9LHQ9dC5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCl9cmV0dXJuIGVbZS5sZW5ndGhdPXt0eXBlOmcsdGV4dDpcIlwifSxlfSh0KTtsZXQgbj1cIkJPRFwiLG89MCxhPXNbb107Zm9yKDshayhhLGcpOyl7bGV0IGg9MDtjb25zdCByPVtdO2lmKFwiQk9EXCI9PT1uKXtpZihcIk1cIiE9PWEudGV4dCYmXCJtXCIhPT1hLnRleHQpcmV0dXJuIGIoXCJNMCwwXCIrdCk7bysrLGg9TVthLnRleHRdLG49YS50ZXh0fWVsc2UgayhhLGQpP2g9TVtuXToobysrLGg9TVthLnRleHRdLG49YS50ZXh0KTtpZighKG8raDxzLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBkYXRhIGVuZGVkIHNob3J0XCIpO2ZvcihsZXQgdD1vO3Q8bytoO3QrKyl7Y29uc3QgZT1zW3RdO2lmKCFrKGUsZCkpdGhyb3cgbmV3IEVycm9yKFwiUGFyYW0gbm90IGEgbnVtYmVyOiBcIituK1wiLFwiK2UudGV4dCk7cltyLmxlbmd0aF09K2UudGV4dH1pZihcIm51bWJlclwiIT10eXBlb2YgTVtuXSl0aHJvdyBuZXcgRXJyb3IoXCJCYWQgc2VnbWVudDogXCIrbik7e2NvbnN0IHQ9e2tleTpuLGRhdGE6cn07ZS5wdXNoKHQpLG8rPWgsYT1zW29dLFwiTVwiPT09biYmKG49XCJMXCIpLFwibVwiPT09biYmKG49XCJsXCIpfX1yZXR1cm4gZX1mdW5jdGlvbiB5KHQpe2xldCBlPTAscz0wLG49MCxvPTA7Y29uc3QgYT1bXTtmb3IoY29uc3R7a2V5OmgsZGF0YTpyfW9mIHQpc3dpdGNoKGgpe2Nhc2VcIk1cIjphLnB1c2goe2tleTpcIk1cIixkYXRhOlsuLi5yXX0pLFtlLHNdPXIsW24sb109cjticmVhaztjYXNlXCJtXCI6ZSs9clswXSxzKz1yWzFdLGEucHVzaCh7a2V5OlwiTVwiLGRhdGE6W2Usc119KSxuPWUsbz1zO2JyZWFrO2Nhc2VcIkxcIjphLnB1c2goe2tleTpcIkxcIixkYXRhOlsuLi5yXX0pLFtlLHNdPXI7YnJlYWs7Y2FzZVwibFwiOmUrPXJbMF0scys9clsxXSxhLnB1c2goe2tleTpcIkxcIixkYXRhOltlLHNdfSk7YnJlYWs7Y2FzZVwiQ1wiOmEucHVzaCh7a2V5OlwiQ1wiLGRhdGE6Wy4uLnJdfSksZT1yWzRdLHM9cls1XTticmVhaztjYXNlXCJjXCI6e2NvbnN0IHQ9ci5tYXAoKCh0LG4pPT5uJTI/dCtzOnQrZSkpO2EucHVzaCh7a2V5OlwiQ1wiLGRhdGE6dH0pLGU9dFs0XSxzPXRbNV07YnJlYWt9Y2FzZVwiUVwiOmEucHVzaCh7a2V5OlwiUVwiLGRhdGE6Wy4uLnJdfSksZT1yWzJdLHM9clszXTticmVhaztjYXNlXCJxXCI6e2NvbnN0IHQ9ci5tYXAoKCh0LG4pPT5uJTI/dCtzOnQrZSkpO2EucHVzaCh7a2V5OlwiUVwiLGRhdGE6dH0pLGU9dFsyXSxzPXRbM107YnJlYWt9Y2FzZVwiQVwiOmEucHVzaCh7a2V5OlwiQVwiLGRhdGE6Wy4uLnJdfSksZT1yWzVdLHM9cls2XTticmVhaztjYXNlXCJhXCI6ZSs9cls1XSxzKz1yWzZdLGEucHVzaCh7a2V5OlwiQVwiLGRhdGE6W3JbMF0sclsxXSxyWzJdLHJbM10scls0XSxlLHNdfSk7YnJlYWs7Y2FzZVwiSFwiOmEucHVzaCh7a2V5OlwiSFwiLGRhdGE6Wy4uLnJdfSksZT1yWzBdO2JyZWFrO2Nhc2VcImhcIjplKz1yWzBdLGEucHVzaCh7a2V5OlwiSFwiLGRhdGE6W2VdfSk7YnJlYWs7Y2FzZVwiVlwiOmEucHVzaCh7a2V5OlwiVlwiLGRhdGE6Wy4uLnJdfSkscz1yWzBdO2JyZWFrO2Nhc2VcInZcIjpzKz1yWzBdLGEucHVzaCh7a2V5OlwiVlwiLGRhdGE6W3NdfSk7YnJlYWs7Y2FzZVwiU1wiOmEucHVzaCh7a2V5OlwiU1wiLGRhdGE6Wy4uLnJdfSksZT1yWzJdLHM9clszXTticmVhaztjYXNlXCJzXCI6e2NvbnN0IHQ9ci5tYXAoKCh0LG4pPT5uJTI/dCtzOnQrZSkpO2EucHVzaCh7a2V5OlwiU1wiLGRhdGE6dH0pLGU9dFsyXSxzPXRbM107YnJlYWt9Y2FzZVwiVFwiOmEucHVzaCh7a2V5OlwiVFwiLGRhdGE6Wy4uLnJdfSksZT1yWzBdLHM9clsxXTticmVhaztjYXNlXCJ0XCI6ZSs9clswXSxzKz1yWzFdLGEucHVzaCh7a2V5OlwiVFwiLGRhdGE6W2Usc119KTticmVhaztjYXNlXCJaXCI6Y2FzZVwielwiOmEucHVzaCh7a2V5OlwiWlwiLGRhdGE6W119KSxlPW4scz1vfXJldHVybiBhfWZ1bmN0aW9uIG0odCl7Y29uc3QgZT1bXTtsZXQgcz1cIlwiLG49MCxvPTAsYT0wLGg9MCxyPTAsaT0wO2Zvcihjb25zdHtrZXk6YyxkYXRhOmx9b2YgdCl7c3dpdGNoKGMpe2Nhc2VcIk1cIjplLnB1c2goe2tleTpcIk1cIixkYXRhOlsuLi5sXX0pLFtuLG9dPWwsW2EsaF09bDticmVhaztjYXNlXCJDXCI6ZS5wdXNoKHtrZXk6XCJDXCIsZGF0YTpbLi4ubF19KSxuPWxbNF0sbz1sWzVdLHI9bFsyXSxpPWxbM107YnJlYWs7Y2FzZVwiTFwiOmUucHVzaCh7a2V5OlwiTFwiLGRhdGE6Wy4uLmxdfSksW24sb109bDticmVhaztjYXNlXCJIXCI6bj1sWzBdLGUucHVzaCh7a2V5OlwiTFwiLGRhdGE6W24sb119KTticmVhaztjYXNlXCJWXCI6bz1sWzBdLGUucHVzaCh7a2V5OlwiTFwiLGRhdGE6W24sb119KTticmVhaztjYXNlXCJTXCI6e2xldCB0PTAsYT0wO1wiQ1wiPT09c3x8XCJTXCI9PT1zPyh0PW4rKG4tciksYT1vKyhvLWkpKToodD1uLGE9byksZS5wdXNoKHtrZXk6XCJDXCIsZGF0YTpbdCxhLC4uLmxdfSkscj1sWzBdLGk9bFsxXSxuPWxbMl0sbz1sWzNdO2JyZWFrfWNhc2VcIlRcIjp7Y29uc3RbdCxhXT1sO2xldCBoPTAsYz0wO1wiUVwiPT09c3x8XCJUXCI9PT1zPyhoPW4rKG4tciksYz1vKyhvLWkpKTooaD1uLGM9byk7Y29uc3QgdT1uKzIqKGgtbikvMyxwPW8rMiooYy1vKS8zLGY9dCsyKihoLXQpLzMsZD1hKzIqKGMtYSkvMztlLnB1c2goe2tleTpcIkNcIixkYXRhOlt1LHAsZixkLHQsYV19KSxyPWgsaT1jLG49dCxvPWE7YnJlYWt9Y2FzZVwiUVwiOntjb25zdFt0LHMsYSxoXT1sLGM9bisyKih0LW4pLzMsdT1vKzIqKHMtbykvMyxwPWErMioodC1hKS8zLGY9aCsyKihzLWgpLzM7ZS5wdXNoKHtrZXk6XCJDXCIsZGF0YTpbYyx1LHAsZixhLGhdfSkscj10LGk9cyxuPWEsbz1oO2JyZWFrfWNhc2VcIkFcIjp7Y29uc3QgdD1NYXRoLmFicyhsWzBdKSxzPU1hdGguYWJzKGxbMV0pLGE9bFsyXSxoPWxbM10scj1sWzRdLGk9bFs1XSxjPWxbNl07aWYoMD09PXR8fDA9PT1zKWUucHVzaCh7a2V5OlwiQ1wiLGRhdGE6W24sbyxpLGMsaSxjXX0pLG49aSxvPWM7ZWxzZSBpZihuIT09aXx8byE9PWMpe3gobixvLGksYyx0LHMsYSxoLHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh7a2V5OlwiQ1wiLGRhdGE6dH0pfSkpLG49aSxvPWN9YnJlYWt9Y2FzZVwiWlwiOmUucHVzaCh7a2V5OlwiWlwiLGRhdGE6W119KSxuPWEsbz1ofXM9Y31yZXR1cm4gZX1mdW5jdGlvbiB3KHQsZSxzKXtyZXR1cm5bdCpNYXRoLmNvcyhzKS1lKk1hdGguc2luKHMpLHQqTWF0aC5zaW4ocykrZSpNYXRoLmNvcyhzKV19ZnVuY3Rpb24geCh0LGUscyxuLG8sYSxoLHIsaSxjKXtjb25zdCBsPSh1PWgsTWF0aC5QSSp1LzE4MCk7dmFyIHU7bGV0IHA9W10sZj0wLGQ9MCxnPTAsTT0wO2lmKGMpW2YsZCxnLE1dPWM7ZWxzZXtbdCxlXT13KHQsZSwtbCksW3Msbl09dyhzLG4sLWwpO2NvbnN0IGg9KHQtcykvMixjPShlLW4pLzI7bGV0IHU9aCpoLyhvKm8pK2MqYy8oYSphKTt1PjEmJih1PU1hdGguc3FydCh1KSxvKj11LGEqPXUpO2NvbnN0IHA9bypvLGs9YSphLGI9cCprLXAqYypjLWsqaCpoLHk9cCpjKmMraypoKmgsbT0ocj09PWk/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKGIveSkpO2c9bSpvKmMvYSsodCtzKS8yLE09bSotYSpoL28rKGUrbikvMixmPU1hdGguYXNpbihwYXJzZUZsb2F0KCgoZS1NKS9hKS50b0ZpeGVkKDkpKSksZD1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKG4tTSkvYSkudG9GaXhlZCg5KSkpLHQ8ZyYmKGY9TWF0aC5QSS1mKSxzPGcmJihkPU1hdGguUEktZCksZjwwJiYoZj0yKk1hdGguUEkrZiksZDwwJiYoZD0yKk1hdGguUEkrZCksaSYmZj5kJiYoZi09MipNYXRoLlBJKSwhaSYmZD5mJiYoZC09MipNYXRoLlBJKX1sZXQgaz1kLWY7aWYoTWF0aC5hYnMoayk+MTIwKk1hdGguUEkvMTgwKXtjb25zdCB0PWQsZT1zLHI9bjtkPWkmJmQ+Zj9mKzEyMCpNYXRoLlBJLzE4MCoxOmYrMTIwKk1hdGguUEkvMTgwKi0xLHA9eChzPWcrbypNYXRoLmNvcyhkKSxuPU0rYSpNYXRoLnNpbihkKSxlLHIsbyxhLGgsMCxpLFtkLHQsZyxNXSl9az1kLWY7Y29uc3QgYj1NYXRoLmNvcyhmKSx5PU1hdGguc2luKGYpLG09TWF0aC5jb3MoZCksUD1NYXRoLnNpbihkKSx2PU1hdGgudGFuKGsvNCksUz00LzMqbyp2LE89NC8zKmEqdixMPVt0LGVdLFQ9W3QrUyp5LGUtTypiXSxEPVtzK1MqUCxuLU8qbV0sQT1bcyxuXTtpZihUWzBdPTIqTFswXS1UWzBdLFRbMV09MipMWzFdLVRbMV0sYylyZXR1cm5bVCxELEFdLmNvbmNhdChwKTt7cD1bVCxELEFdLmNvbmNhdChwKTtjb25zdCB0PVtdO2ZvcihsZXQgZT0wO2U8cC5sZW5ndGg7ZSs9Myl7Y29uc3Qgcz13KHBbZV1bMF0scFtlXVsxXSxsKSxuPXcocFtlKzFdWzBdLHBbZSsxXVsxXSxsKSxvPXcocFtlKzJdWzBdLHBbZSsyXVsxXSxsKTt0LnB1c2goW3NbMF0sc1sxXSxuWzBdLG5bMV0sb1swXSxvWzFdXSl9cmV0dXJuIHR9fWNvbnN0IFA9e3JhbmRPZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gRyh0LGUpfSxyYW5kT2Zmc2V0V2l0aFJhbmdlOmZ1bmN0aW9uKHQsZSxzKXtyZXR1cm4gRSh0LGUscyl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLHMsbixvKXtjb25zdCBhPVQocyxuLG8pO3JldHVybiBEKHQsZSxvLGEpLm9wc2V0fSxkb3VibGVMaW5lT3BzOmZ1bmN0aW9uKHQsZSxzLG4sbyl7cmV0dXJuICQodCxlLHMsbixvLCEwKX19O2Z1bmN0aW9uIHYodCxlLHMsbixvKXtyZXR1cm57dHlwZTpcInBhdGhcIixvcHM6JCh0LGUscyxuLG8pfX1mdW5jdGlvbiBTKHQsZSxzKXtjb25zdCBuPSh0fHxbXSkubGVuZ3RoO2lmKG4+Mil7Y29uc3Qgbz1bXTtmb3IobGV0IGU9MDtlPG4tMTtlKyspby5wdXNoKC4uLiQodFtlXVswXSx0W2VdWzFdLHRbZSsxXVswXSx0W2UrMV1bMV0scykpO3JldHVybiBlJiZvLnB1c2goLi4uJCh0W24tMV1bMF0sdFtuLTFdWzFdLHRbMF1bMF0sdFswXVsxXSxzKSkse3R5cGU6XCJwYXRoXCIsb3BzOm99fXJldHVybiAyPT09bj92KHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0scyk6e3R5cGU6XCJwYXRoXCIsb3BzOltdfX1mdW5jdGlvbiBPKHQsZSxzLG4sbyl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCwhMCxlKX0oW1t0LGVdLFt0K3MsZV0sW3QrcyxlK25dLFt0LGUrbl1dLG8pfWZ1bmN0aW9uIEwodCxlKXtpZih0Lmxlbmd0aCl7Y29uc3Qgcz1cIm51bWJlclwiPT10eXBlb2YgdFswXVswXT9bdF06dCxuPWooc1swXSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxvPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOmooc1swXSwxLjUqKDErLjIyKmUucm91Z2huZXNzKSx6KGUpKTtmb3IobGV0IHQ9MTt0PHMubGVuZ3RoO3QrKyl7Y29uc3QgYT1zW3RdO2lmKGEubGVuZ3RoKXtjb25zdCB0PWooYSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxzPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOmooYSwxLjUqKDErLjIyKmUucm91Z2huZXNzKSx6KGUpKTtmb3IoY29uc3QgZSBvZiB0KVwibW92ZVwiIT09ZS5vcCYmbi5wdXNoKGUpO2Zvcihjb25zdCB0IG9mIHMpXCJtb3ZlXCIhPT10Lm9wJiZvLnB1c2godCl9fXJldHVybnt0eXBlOlwicGF0aFwiLG9wczpuLmNvbmNhdChvKX19cmV0dXJue3R5cGU6XCJwYXRoXCIsb3BzOltdfX1mdW5jdGlvbiBUKHQsZSxzKXtjb25zdCBuPU1hdGguc3FydCgyKk1hdGguUEkqTWF0aC5zcXJ0KChNYXRoLnBvdyh0LzIsMikrTWF0aC5wb3coZS8yLDIpKS8yKSksbz1NYXRoLmNlaWwoTWF0aC5tYXgocy5jdXJ2ZVN0ZXBDb3VudCxzLmN1cnZlU3RlcENvdW50L01hdGguc3FydCgyMDApKm4pKSxhPTIqTWF0aC5QSS9vO2xldCBoPU1hdGguYWJzKHQvMikscj1NYXRoLmFicyhlLzIpO2NvbnN0IGk9MS1zLmN1cnZlRml0dGluZztyZXR1cm4gaCs9RyhoKmkscykscis9RyhyKmkscykse2luY3JlbWVudDphLHJ4Omgscnk6cn19ZnVuY3Rpb24gRCh0LGUscyxuKXtjb25zdFtvLGFdPUYobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLG4uaW5jcmVtZW50KkUoLjEsRSguNCwxLHMpLHMpLHMpO2xldCBoPXEobyxudWxsLHMpO2lmKCFzLmRpc2FibGVNdWx0aVN0cm9rZSYmMCE9PXMucm91Z2huZXNzKXtjb25zdFtvXT1GKG4uaW5jcmVtZW50LHQsZSxuLnJ4LG4ucnksMS41LDAscyksYT1xKG8sbnVsbCxzKTtoPWguY29uY2F0KGEpfXJldHVybntlc3RpbWF0ZWRQb2ludHM6YSxvcHNldDp7dHlwZTpcInBhdGhcIixvcHM6aH19fWZ1bmN0aW9uIEEodCxlLHMsbixvLGEsaCxyLGkpe2NvbnN0IGM9dCxsPWU7bGV0IHU9TWF0aC5hYnMocy8yKSxwPU1hdGguYWJzKG4vMik7dSs9RyguMDEqdSxpKSxwKz1HKC4wMSpwLGkpO2xldCBmPW8sZD1hO2Zvcig7ZjwwOylmKz0yKk1hdGguUEksZCs9MipNYXRoLlBJO2QtZj4yKk1hdGguUEkmJihmPTAsZD0yKk1hdGguUEkpO2NvbnN0IGc9MipNYXRoLlBJL2kuY3VydmVTdGVwQ291bnQsTT1NYXRoLm1pbihnLzIsKGQtZikvMiksaz1WKE0sYyxsLHUscCxmLGQsMSxpKTtpZighaS5kaXNhYmxlTXVsdGlTdHJva2Upe2NvbnN0IHQ9VihNLGMsbCx1LHAsZixkLDEuNSxpKTtrLnB1c2goLi4udCl9cmV0dXJuIGgmJihyP2sucHVzaCguLi4kKGMsbCxjK3UqTWF0aC5jb3MoZiksbCtwKk1hdGguc2luKGYpLGkpLC4uLiQoYyxsLGMrdSpNYXRoLmNvcyhkKSxsK3AqTWF0aC5zaW4oZCksaSkpOmsucHVzaCh7b3A6XCJsaW5lVG9cIixkYXRhOltjLGxdfSx7b3A6XCJsaW5lVG9cIixkYXRhOltjK3UqTWF0aC5jb3MoZiksbCtwKk1hdGguc2luKGYpXX0pKSx7dHlwZTpcInBhdGhcIixvcHM6a319ZnVuY3Rpb24gXyh0LGUpe2NvbnN0IHM9bSh5KGIodCkpKSxuPVtdO2xldCBvPVswLDBdLGE9WzAsMF07Zm9yKGNvbnN0e2tleTp0LGRhdGE6aH1vZiBzKXN3aXRjaCh0KXtjYXNlXCJNXCI6YT1baFswXSxoWzFdXSxvPVtoWzBdLGhbMV1dO2JyZWFrO2Nhc2VcIkxcIjpuLnB1c2goLi4uJChhWzBdLGFbMV0saFswXSxoWzFdLGUpKSxhPVtoWzBdLGhbMV1dO2JyZWFrO2Nhc2VcIkNcIjp7Y29uc3RbdCxzLG8scixpLGNdPWg7bi5wdXNoKC4uLloodCxzLG8scixpLGMsYSxlKSksYT1baSxjXTticmVha31jYXNlXCJaXCI6bi5wdXNoKC4uLiQoYVswXSxhWzFdLG9bMF0sb1sxXSxlKSksYT1bb1swXSxvWzFdXX1yZXR1cm57dHlwZTpcInBhdGhcIixvcHM6bn19ZnVuY3Rpb24gSSh0LGUpe2NvbnN0IHM9W107Zm9yKGNvbnN0IG4gb2YgdClpZihuLmxlbmd0aCl7Y29uc3QgdD1lLm1heFJhbmRvbW5lc3NPZmZzZXR8fDAsbz1uLmxlbmd0aDtpZihvPjIpe3MucHVzaCh7b3A6XCJtb3ZlXCIsZGF0YTpbblswXVswXStHKHQsZSksblswXVsxXStHKHQsZSldfSk7Zm9yKGxldCBhPTE7YTxvO2ErKylzLnB1c2goe29wOlwibGluZVRvXCIsZGF0YTpbblthXVswXStHKHQsZSksblthXVsxXStHKHQsZSldfSl9fXJldHVybnt0eXBlOlwiZmlsbFBhdGhcIixvcHM6c319ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe2xldCBzPXQuZmlsbFN0eWxlfHxcImhhY2h1cmVcIjtpZighdVtzXSlzd2l0Y2gocyl7Y2FzZVwiemlnemFnXCI6dVtzXXx8KHVbc109bmV3IGgoZSkpO2JyZWFrO2Nhc2VcImNyb3NzLWhhdGNoXCI6dVtzXXx8KHVbc109bmV3IHIoZSkpO2JyZWFrO2Nhc2VcImRvdHNcIjp1W3NdfHwodVtzXT1uZXcgaShlKSk7YnJlYWs7Y2FzZVwiZGFzaGVkXCI6dVtzXXx8KHVbc109bmV3IGMoZSkpO2JyZWFrO2Nhc2VcInppZ3phZy1saW5lXCI6dVtzXXx8KHVbc109bmV3IGwoZSkpO2JyZWFrO2RlZmF1bHQ6cz1cImhhY2h1cmVcIix1W3NdfHwodVtzXT1uZXcgbyhlKSl9cmV0dXJuIHVbc119KGUsUCkuZmlsbFBvbHlnb25zKHQsZSl9ZnVuY3Rpb24geih0KXtjb25zdCBlPU9iamVjdC5hc3NpZ24oe30sdCk7cmV0dXJuIGUucmFuZG9taXplcj12b2lkIDAsdC5zZWVkJiYoZS5zZWVkPXQuc2VlZCsxKSxlfWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQucmFuZG9taXplcnx8KHQucmFuZG9taXplcj1uZXcgcCh0LnNlZWR8fDApKSx0LnJhbmRvbWl6ZXIubmV4dCgpfWZ1bmN0aW9uIEUodCxlLHMsbj0xKXtyZXR1cm4gcy5yb3VnaG5lc3MqbiooVyhzKSooZS10KSt0KX1mdW5jdGlvbiBHKHQsZSxzPTEpe3JldHVybiBFKC10LHQsZSxzKX1mdW5jdGlvbiAkKHQsZSxzLG4sbyxhPSExKXtjb25zdCBoPWE/by5kaXNhYmxlTXVsdGlTdHJva2VGaWxsOm8uZGlzYWJsZU11bHRpU3Ryb2tlLHI9Uih0LGUscyxuLG8sITAsITEpO2lmKGgpcmV0dXJuIHI7Y29uc3QgaT1SKHQsZSxzLG4sbywhMCwhMCk7cmV0dXJuIHIuY29uY2F0KGkpfWZ1bmN0aW9uIFIodCxlLHMsbixvLGEsaCl7Y29uc3Qgcj1NYXRoLnBvdyh0LXMsMikrTWF0aC5wb3coZS1uLDIpLGk9TWF0aC5zcXJ0KHIpO2xldCBjPTE7Yz1pPDIwMD8xOmk+NTAwPy40Oi0uMDAxNjY2OCppKzEuMjMzMzM0O2xldCBsPW8ubWF4UmFuZG9tbmVzc09mZnNldHx8MDtsKmwqMTAwPnImJihsPWkvMTApO2NvbnN0IHU9bC8yLHA9LjIrLjIqVyhvKTtsZXQgZj1vLmJvd2luZypvLm1heFJhbmRvbW5lc3NPZmZzZXQqKG4tZSkvMjAwLGQ9by5ib3dpbmcqby5tYXhSYW5kb21uZXNzT2Zmc2V0Kih0LXMpLzIwMDtmPUcoZixvLGMpLGQ9RyhkLG8sYyk7Y29uc3QgZz1bXSxNPSgpPT5HKHUsbyxjKSxrPSgpPT5HKGwsbyxjKSxiPW8ucHJlc2VydmVWZXJ0aWNlcztyZXR1cm4gYSYmKGg/Zy5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOlt0KyhiPzA6TSgpKSxlKyhiPzA6TSgpKV19KTpnLnB1c2goe29wOlwibW92ZVwiLGRhdGE6W3QrKGI/MDpHKGwsbyxjKSksZSsoYj8wOkcobCxvLGMpKV19KSksaD9nLnB1c2goe29wOlwiYmN1cnZlVG9cIixkYXRhOltmK3QrKHMtdCkqcCtNKCksZCtlKyhuLWUpKnArTSgpLGYrdCsyKihzLXQpKnArTSgpLGQrZSsyKihuLWUpKnArTSgpLHMrKGI/MDpNKCkpLG4rKGI/MDpNKCkpXX0pOmcucHVzaCh7b3A6XCJiY3VydmVUb1wiLGRhdGE6W2YrdCsocy10KSpwK2soKSxkK2UrKG4tZSkqcCtrKCksZit0KzIqKHMtdCkqcCtrKCksZCtlKzIqKG4tZSkqcCtrKCkscysoYj8wOmsoKSksbisoYj8wOmsoKSldfSksZ31mdW5jdGlvbiBqKHQsZSxzKXtpZighdC5sZW5ndGgpcmV0dXJuW107Y29uc3Qgbj1bXTtuLnB1c2goW3RbMF1bMF0rRyhlLHMpLHRbMF1bMV0rRyhlLHMpXSksbi5wdXNoKFt0WzBdWzBdK0coZSxzKSx0WzBdWzFdK0coZSxzKV0pO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKW4ucHVzaChbdFtvXVswXStHKGUscyksdFtvXVsxXStHKGUscyldKSxvPT09dC5sZW5ndGgtMSYmbi5wdXNoKFt0W29dWzBdK0coZSxzKSx0W29dWzFdK0coZSxzKV0pO3JldHVybiBxKG4sbnVsbCxzKX1mdW5jdGlvbiBxKHQsZSxzKXtjb25zdCBuPXQubGVuZ3RoLG89W107aWYobj4zKXtjb25zdCBhPVtdLGg9MS1zLmN1cnZlVGlnaHRuZXNzO28ucHVzaCh7b3A6XCJtb3ZlXCIsZGF0YTpbdFsxXVswXSx0WzFdWzFdXX0pO2ZvcihsZXQgZT0xO2UrMjxuO2UrKyl7Y29uc3Qgcz10W2VdO2FbMF09W3NbMF0sc1sxXV0sYVsxXT1bc1swXSsoaCp0W2UrMV1bMF0taCp0W2UtMV1bMF0pLzYsc1sxXSsoaCp0W2UrMV1bMV0taCp0W2UtMV1bMV0pLzZdLGFbMl09W3RbZSsxXVswXSsoaCp0W2VdWzBdLWgqdFtlKzJdWzBdKS82LHRbZSsxXVsxXSsoaCp0W2VdWzFdLWgqdFtlKzJdWzFdKS82XSxhWzNdPVt0W2UrMV1bMF0sdFtlKzFdWzFdXSxvLnB1c2goe29wOlwiYmN1cnZlVG9cIixkYXRhOlthWzFdWzBdLGFbMV1bMV0sYVsyXVswXSxhWzJdWzFdLGFbM11bMF0sYVszXVsxXV19KX1pZihlJiYyPT09ZS5sZW5ndGgpe2NvbnN0IHQ9cy5tYXhSYW5kb21uZXNzT2Zmc2V0O28ucHVzaCh7b3A6XCJsaW5lVG9cIixkYXRhOltlWzBdK0codCxzKSxlWzFdK0codCxzKV19KX19ZWxzZSAzPT09bj8oby5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOlt0WzFdWzBdLHRbMV1bMV1dfSksby5wdXNoKHtvcDpcImJjdXJ2ZVRvXCIsZGF0YTpbdFsxXVswXSx0WzFdWzFdLHRbMl1bMF0sdFsyXVsxXSx0WzJdWzBdLHRbMl1bMV1dfSkpOjI9PT1uJiZvLnB1c2goLi4uUih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHMsITAsITApKTtyZXR1cm4gb31mdW5jdGlvbiBGKHQsZSxzLG4sbyxhLGgscil7Y29uc3QgaT1bXSxjPVtdO2lmKDA9PT1yLnJvdWdobmVzcyl7dC89NCxjLnB1c2goW2UrbipNYXRoLmNvcygtdCkscytvKk1hdGguc2luKC10KV0pO2ZvcihsZXQgYT0wO2E8PTIqTWF0aC5QSTthKz10KXtjb25zdCB0PVtlK24qTWF0aC5jb3MoYSkscytvKk1hdGguc2luKGEpXTtpLnB1c2godCksYy5wdXNoKHQpfWMucHVzaChbZStuKk1hdGguY29zKDApLHMrbypNYXRoLnNpbigwKV0pLGMucHVzaChbZStuKk1hdGguY29zKHQpLHMrbypNYXRoLnNpbih0KV0pfWVsc2V7Y29uc3QgbD1HKC41LHIpLU1hdGguUEkvMjtjLnB1c2goW0coYSxyKStlKy45Km4qTWF0aC5jb3MobC10KSxHKGEscikrcysuOSpvKk1hdGguc2luKGwtdCldKTtjb25zdCB1PTIqTWF0aC5QSStsLS4wMTtmb3IobGV0IGg9bDtoPHU7aCs9dCl7Y29uc3QgdD1bRyhhLHIpK2UrbipNYXRoLmNvcyhoKSxHKGEscikrcytvKk1hdGguc2luKGgpXTtpLnB1c2godCksYy5wdXNoKHQpfWMucHVzaChbRyhhLHIpK2UrbipNYXRoLmNvcyhsKzIqTWF0aC5QSSsuNSpoKSxHKGEscikrcytvKk1hdGguc2luKGwrMipNYXRoLlBJKy41KmgpXSksYy5wdXNoKFtHKGEscikrZSsuOTgqbipNYXRoLmNvcyhsK2gpLEcoYSxyKStzKy45OCpvKk1hdGguc2luKGwraCldKSxjLnB1c2goW0coYSxyKStlKy45Km4qTWF0aC5jb3MobCsuNSpoKSxHKGEscikrcysuOSpvKk1hdGguc2luKGwrLjUqaCldKX1yZXR1cm5bYyxpXX1mdW5jdGlvbiBWKHQsZSxzLG4sbyxhLGgscixpKXtjb25zdCBjPWErRyguMSxpKSxsPVtdO2wucHVzaChbRyhyLGkpK2UrLjkqbipNYXRoLmNvcyhjLXQpLEcocixpKStzKy45Km8qTWF0aC5zaW4oYy10KV0pO2ZvcihsZXQgYT1jO2E8PWg7YSs9dClsLnB1c2goW0cocixpKStlK24qTWF0aC5jb3MoYSksRyhyLGkpK3MrbypNYXRoLnNpbihhKV0pO3JldHVybiBsLnB1c2goW2UrbipNYXRoLmNvcyhoKSxzK28qTWF0aC5zaW4oaCldKSxsLnB1c2goW2UrbipNYXRoLmNvcyhoKSxzK28qTWF0aC5zaW4oaCldKSxxKGwsbnVsbCxpKX1mdW5jdGlvbiBaKHQsZSxzLG4sbyxhLGgscil7Y29uc3QgaT1bXSxjPVtyLm1heFJhbmRvbW5lc3NPZmZzZXR8fDEsKHIubWF4UmFuZG9tbmVzc09mZnNldHx8MSkrLjNdO2xldCBsPVswLDBdO2NvbnN0IHU9ci5kaXNhYmxlTXVsdGlTdHJva2U/MToyLHA9ci5wcmVzZXJ2ZVZlcnRpY2VzO2ZvcihsZXQgZj0wO2Y8dTtmKyspMD09PWY/aS5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOltoWzBdLGhbMV1dfSk6aS5wdXNoKHtvcDpcIm1vdmVcIixkYXRhOltoWzBdKyhwPzA6RyhjWzBdLHIpKSxoWzFdKyhwPzA6RyhjWzBdLHIpKV19KSxsPXA/W28sYV06W28rRyhjW2ZdLHIpLGErRyhjW2ZdLHIpXSxpLnB1c2goe29wOlwiYmN1cnZlVG9cIixkYXRhOlt0K0coY1tmXSxyKSxlK0coY1tmXSxyKSxzK0coY1tmXSxyKSxuK0coY1tmXSxyKSxsWzBdLGxbMV1dfSk7cmV0dXJuIGl9ZnVuY3Rpb24gUSh0KXtyZXR1cm5bLi4udF19ZnVuY3Rpb24gSCh0LGU9MCl7Y29uc3Qgcz10Lmxlbmd0aDtpZihzPDMpdGhyb3cgbmV3IEVycm9yKFwiQSBjdXJ2ZSBtdXN0IGhhdmUgYXQgbGVhc3QgdGhyZWUgcG9pbnRzLlwiKTtjb25zdCBuPVtdO2lmKDM9PT1zKW4ucHVzaChRKHRbMF0pLFEodFsxXSksUSh0WzJdKSxRKHRbMl0pKTtlbHNle2NvbnN0IHM9W107cy5wdXNoKHRbMF0sdFswXSk7Zm9yKGxldCBlPTE7ZTx0Lmxlbmd0aDtlKyspcy5wdXNoKHRbZV0pLGU9PT10Lmxlbmd0aC0xJiZzLnB1c2godFtlXSk7Y29uc3Qgbz1bXSxhPTEtZTtuLnB1c2goUShzWzBdKSk7Zm9yKGxldCB0PTE7dCsyPHMubGVuZ3RoO3QrKyl7Y29uc3QgZT1zW3RdO29bMF09W2VbMF0sZVsxXV0sb1sxXT1bZVswXSsoYSpzW3QrMV1bMF0tYSpzW3QtMV1bMF0pLzYsZVsxXSsoYSpzW3QrMV1bMV0tYSpzW3QtMV1bMV0pLzZdLG9bMl09W3NbdCsxXVswXSsoYSpzW3RdWzBdLWEqc1t0KzJdWzBdKS82LHNbdCsxXVsxXSsoYSpzW3RdWzFdLWEqc1t0KzJdWzFdKS82XSxvWzNdPVtzW3QrMV1bMF0sc1t0KzFdWzFdXSxuLnB1c2gob1sxXSxvWzJdLG9bM10pfX1yZXR1cm4gbn1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIE1hdGgucG93KHRbMF0tZVswXSwyKStNYXRoLnBvdyh0WzFdLWVbMV0sMil9ZnVuY3Rpb24gQih0LGUscyl7Y29uc3Qgbj1OKGUscyk7aWYoMD09PW4pcmV0dXJuIE4odCxlKTtsZXQgbz0oKHRbMF0tZVswXSkqKHNbMF0tZVswXSkrKHRbMV0tZVsxXSkqKHNbMV0tZVsxXSkpL247cmV0dXJuIG89TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKSxOKHQsSihlLHMsbykpfWZ1bmN0aW9uIEoodCxlLHMpe3JldHVyblt0WzBdKyhlWzBdLXRbMF0pKnMsdFsxXSsoZVsxXS10WzFdKSpzXX1mdW5jdGlvbiBLKHQsZSxzLG4pe2NvbnN0IG89bnx8W107aWYoZnVuY3Rpb24odCxlKXtjb25zdCBzPXRbZSswXSxuPXRbZSsxXSxvPXRbZSsyXSxhPXRbZSszXTtsZXQgaD0zKm5bMF0tMipzWzBdLWFbMF07aCo9aDtsZXQgcj0zKm5bMV0tMipzWzFdLWFbMV07cio9cjtsZXQgaT0zKm9bMF0tMiphWzBdLXNbMF07aSo9aTtsZXQgYz0zKm9bMV0tMiphWzFdLXNbMV07cmV0dXJuIGMqPWMsaDxpJiYoaD1pKSxyPGMmJihyPWMpLGgrcn0odCxlKTxzKXtjb25zdCBzPXRbZSswXTtpZihvLmxlbmd0aCl7KGE9b1tvLmxlbmd0aC0xXSxoPXMsTWF0aC5zcXJ0KE4oYSxoKSkpPjEmJm8ucHVzaChzKX1lbHNlIG8ucHVzaChzKTtvLnB1c2godFtlKzNdKX1lbHNle2NvbnN0IG49LjUsYT10W2UrMF0saD10W2UrMV0scj10W2UrMl0saT10W2UrM10sYz1KKGEsaCxuKSxsPUooaCxyLG4pLHU9SihyLGksbikscD1KKGMsbCxuKSxmPUoobCx1LG4pLGQ9SihwLGYsbik7SyhbYSxjLHAsZF0sMCxzLG8pLEsoW2QsZix1LGldLDAscyxvKX12YXIgYSxoO3JldHVybiBvfWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gWCh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gWCh0LGUscyxuLG8pe2NvbnN0IGE9b3x8W10saD10W2VdLHI9dFtzLTFdO2xldCBpPTAsYz0xO2ZvcihsZXQgbj1lKzE7bjxzLTE7KytuKXtjb25zdCBlPUIodFtuXSxoLHIpO2U+aSYmKGk9ZSxjPW4pfXJldHVybiBNYXRoLnNxcnQoaSk+bj8oWCh0LGUsYysxLG4sYSksWCh0LGMscyxuLGEpKTooYS5sZW5ndGh8fGEucHVzaChoKSxhLnB1c2gocikpLGF9ZnVuY3Rpb24gWSh0LGU9LjE1LHMpe2NvbnN0IG49W10sbz0odC5sZW5ndGgtMSkvMztmb3IobGV0IHM9MDtzPG87cysrKXtLKHQsMypzLGUsbil9cmV0dXJuIHMmJnM+MD9YKG4sMCxuLmxlbmd0aCxzKTpufWNvbnN0IHR0PVwibm9uZVwiO2NsYXNzIGV0e2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdE9wdGlvbnM9e21heFJhbmRvbW5lc3NPZmZzZXQ6Mixyb3VnaG5lc3M6MSxib3dpbmc6MSxzdHJva2U6XCIjMDAwXCIsc3Ryb2tlV2lkdGg6MSxjdXJ2ZVRpZ2h0bmVzczowLGN1cnZlRml0dGluZzouOTUsY3VydmVTdGVwQ291bnQ6OSxmaWxsU3R5bGU6XCJoYWNodXJlXCIsZmlsbFdlaWdodDotMSxoYWNodXJlQW5nbGU6LTQxLGhhY2h1cmVHYXA6LTEsZGFzaE9mZnNldDotMSxkYXNoR2FwOi0xLHppZ3phZ09mZnNldDotMSxzZWVkOjAsZGlzYWJsZU11bHRpU3Ryb2tlOiExLGRpc2FibGVNdWx0aVN0cm9rZUZpbGw6ITEscHJlc2VydmVWZXJ0aWNlczohMSxmaWxsU2hhcGVSb3VnaG5lc3NHYWluOi44fSx0aGlzLmNvbmZpZz10fHx7fSx0aGlzLmNvbmZpZy5vcHRpb25zJiYodGhpcy5kZWZhdWx0T3B0aW9ucz10aGlzLl9vKHRoaXMuY29uZmlnLm9wdGlvbnMpKX1zdGF0aWMgbmV3U2VlZCgpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMioqMzEpfV9vKHQpe3JldHVybiB0P09iamVjdC5hc3NpZ24oe30sdGhpcy5kZWZhdWx0T3B0aW9ucyx0KTp0aGlzLmRlZmF1bHRPcHRpb25zfV9kKHQsZSxzKXtyZXR1cm57c2hhcGU6dCxzZXRzOmV8fFtdLG9wdGlvbnM6c3x8dGhpcy5kZWZhdWx0T3B0aW9uc319bGluZSh0LGUscyxuLG8pe2NvbnN0IGE9dGhpcy5fbyhvKTtyZXR1cm4gdGhpcy5fZChcImxpbmVcIixbdih0LGUscyxuLGEpXSxhKX1yZWN0YW5nbGUodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuX28obyksaD1bXSxyPU8odCxlLHMsbixhKTtpZihhLmZpbGwpe2NvbnN0IG89W1t0LGVdLFt0K3MsZV0sW3QrcyxlK25dLFt0LGUrbl1dO1wic29saWRcIj09PWEuZmlsbFN0eWxlP2gucHVzaChJKFtvXSxhKSk6aC5wdXNoKEMoW29dLGEpKX1yZXR1cm4gYS5zdHJva2UhPT10dCYmaC5wdXNoKHIpLHRoaXMuX2QoXCJyZWN0YW5nbGVcIixoLGEpfWVsbGlwc2UodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuX28obyksaD1bXSxyPVQocyxuLGEpLGk9RCh0LGUsYSxyKTtpZihhLmZpbGwpaWYoXCJzb2xpZFwiPT09YS5maWxsU3R5bGUpe2NvbnN0IHM9RCh0LGUsYSxyKS5vcHNldDtzLnR5cGU9XCJmaWxsUGF0aFwiLGgucHVzaChzKX1lbHNlIGgucHVzaChDKFtpLmVzdGltYXRlZFBvaW50c10sYSkpO3JldHVybiBhLnN0cm9rZSE9PXR0JiZoLnB1c2goaS5vcHNldCksdGhpcy5fZChcImVsbGlwc2VcIixoLGEpfWNpcmNsZSh0LGUscyxuKXtjb25zdCBvPXRoaXMuZWxsaXBzZSh0LGUscyxzLG4pO3JldHVybiBvLnNoYXBlPVwiY2lyY2xlXCIsb31saW5lYXJQYXRoKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpO3JldHVybiB0aGlzLl9kKFwibGluZWFyUGF0aFwiLFtTKHQsITEscyldLHMpfWFyYyh0LGUscyxuLG8sYSxoPSExLHIpe2NvbnN0IGk9dGhpcy5fbyhyKSxjPVtdLGw9QSh0LGUscyxuLG8sYSxoLCEwLGkpO2lmKGgmJmkuZmlsbClpZihcInNvbGlkXCI9PT1pLmZpbGxTdHlsZSl7Y29uc3QgaD1PYmplY3QuYXNzaWduKHt9LGkpO2guZGlzYWJsZU11bHRpU3Ryb2tlPSEwO2NvbnN0IHI9QSh0LGUscyxuLG8sYSwhMCwhMSxoKTtyLnR5cGU9XCJmaWxsUGF0aFwiLGMucHVzaChyKX1lbHNlIGMucHVzaChmdW5jdGlvbih0LGUscyxuLG8sYSxoKXtjb25zdCByPXQsaT1lO2xldCBjPU1hdGguYWJzKHMvMiksbD1NYXRoLmFicyhuLzIpO2MrPUcoLjAxKmMsaCksbCs9RyguMDEqbCxoKTtsZXQgdT1vLHA9YTtmb3IoO3U8MDspdSs9MipNYXRoLlBJLHArPTIqTWF0aC5QSTtwLXU+MipNYXRoLlBJJiYodT0wLHA9MipNYXRoLlBJKTtjb25zdCBmPShwLXUpL2guY3VydmVTdGVwQ291bnQsZD1bXTtmb3IobGV0IHQ9dTt0PD1wO3QrPWYpZC5wdXNoKFtyK2MqTWF0aC5jb3ModCksaStsKk1hdGguc2luKHQpXSk7cmV0dXJuIGQucHVzaChbcitjKk1hdGguY29zKHApLGkrbCpNYXRoLnNpbihwKV0pLGQucHVzaChbcixpXSksQyhbZF0saCl9KHQsZSxzLG4sbyxhLGkpKTtyZXR1cm4gaS5zdHJva2UhPT10dCYmYy5wdXNoKGwpLHRoaXMuX2QoXCJhcmNcIixjLGkpfWN1cnZlKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpLG49W10sbz1MKHQscyk7aWYocy5maWxsJiZzLmZpbGwhPT10dClpZihcInNvbGlkXCI9PT1zLmZpbGxTdHlsZSl7Y29uc3QgZT1MKHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtkaXNhYmxlTXVsdGlTdHJva2U6ITAscm91Z2huZXNzOnMucm91Z2huZXNzP3Mucm91Z2huZXNzK3MuZmlsbFNoYXBlUm91Z2huZXNzR2FpbjowfSkpO24ucHVzaCh7dHlwZTpcImZpbGxQYXRoXCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGUub3BzKX0pfWVsc2V7Y29uc3QgZT1bXSxvPXQ7aWYoby5sZW5ndGgpe2NvbnN0IHQ9XCJudW1iZXJcIj09dHlwZW9mIG9bMF1bMF0/W29dOm87Zm9yKGNvbnN0IG4gb2YgdCluLmxlbmd0aDwzP2UucHVzaCguLi5uKTozPT09bi5sZW5ndGg/ZS5wdXNoKC4uLlkoSChbblswXSxuWzBdLG5bMV0sblsyXV0pLDEwLCgxK3Mucm91Z2huZXNzKS8yKSk6ZS5wdXNoKC4uLlkoSChuKSwxMCwoMStzLnJvdWdobmVzcykvMikpfWUubGVuZ3RoJiZuLnB1c2goQyhbZV0scykpfXJldHVybiBzLnN0cm9rZSE9PXR0JiZuLnB1c2gobyksdGhpcy5fZChcImN1cnZlXCIsbixzKX1wb2x5Z29uKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpLG49W10sbz1TKHQsITAscyk7cmV0dXJuIHMuZmlsbCYmKFwic29saWRcIj09PXMuZmlsbFN0eWxlP24ucHVzaChJKFt0XSxzKSk6bi5wdXNoKEMoW3RdLHMpKSkscy5zdHJva2UhPT10dCYmbi5wdXNoKG8pLHRoaXMuX2QoXCJwb2x5Z29uXCIsbixzKX1wYXRoKHQsZSl7Y29uc3Qgcz10aGlzLl9vKGUpLG49W107aWYoIXQpcmV0dXJuIHRoaXMuX2QoXCJwYXRoXCIsbixzKTt0PSh0fHxcIlwiKS5yZXBsYWNlKC9cXG4vZyxcIiBcIikucmVwbGFjZSgvKC1cXHMpL2csXCItXCIpLnJlcGxhY2UoXCIvKHNzKS9nXCIsXCIgXCIpO2NvbnN0IG89cy5maWxsJiZcInRyYW5zcGFyZW50XCIhPT1zLmZpbGwmJnMuZmlsbCE9PXR0LGE9cy5zdHJva2UhPT10dCxoPSEhKHMuc2ltcGxpZmljYXRpb24mJnMuc2ltcGxpZmljYXRpb248MSkscj1mdW5jdGlvbih0LGUscyl7Y29uc3Qgbj1tKHkoYih0KSkpLG89W107bGV0IGE9W10saD1bMCwwXSxyPVtdO2NvbnN0IGk9KCk9PntyLmxlbmd0aD49NCYmYS5wdXNoKC4uLlkocixlKSkscj1bXX0sYz0oKT0+e2koKSxhLmxlbmd0aCYmKG8ucHVzaChhKSxhPVtdKX07Zm9yKGNvbnN0e2tleTp0LGRhdGE6ZX1vZiBuKXN3aXRjaCh0KXtjYXNlXCJNXCI6YygpLGg9W2VbMF0sZVsxXV0sYS5wdXNoKGgpO2JyZWFrO2Nhc2VcIkxcIjppKCksYS5wdXNoKFtlWzBdLGVbMV1dKTticmVhaztjYXNlXCJDXCI6aWYoIXIubGVuZ3RoKXtjb25zdCB0PWEubGVuZ3RoP2FbYS5sZW5ndGgtMV06aDtyLnB1c2goW3RbMF0sdFsxXV0pfXIucHVzaChbZVswXSxlWzFdXSksci5wdXNoKFtlWzJdLGVbM11dKSxyLnB1c2goW2VbNF0sZVs1XV0pO2JyZWFrO2Nhc2VcIlpcIjppKCksYS5wdXNoKFtoWzBdLGhbMV1dKX1pZihjKCksIXMpcmV0dXJuIG87Y29uc3QgbD1bXTtmb3IoY29uc3QgdCBvZiBvKXtjb25zdCBlPVUodCxzKTtlLmxlbmd0aCYmbC5wdXNoKGUpfXJldHVybiBsfSh0LDEsaD80LTQqKHMuc2ltcGxpZmljYXRpb258fDEpOigxK3Mucm91Z2huZXNzKS8yKSxpPV8odCxzKTtpZihvKWlmKFwic29saWRcIj09PXMuZmlsbFN0eWxlKWlmKDE9PT1yLmxlbmd0aCl7Y29uc3QgZT1fKHQsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtkaXNhYmxlTXVsdGlTdHJva2U6ITAscm91Z2huZXNzOnMucm91Z2huZXNzP3Mucm91Z2huZXNzK3MuZmlsbFNoYXBlUm91Z2huZXNzR2FpbjowfSkpO24ucHVzaCh7dHlwZTpcImZpbGxQYXRoXCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGUub3BzKX0pfWVsc2Ugbi5wdXNoKEkocixzKSk7ZWxzZSBuLnB1c2goQyhyLHMpKTtyZXR1cm4gYSYmKGg/ci5mb3JFYWNoKCh0PT57bi5wdXNoKFModCwhMSxzKSl9KSk6bi5wdXNoKGkpKSx0aGlzLl9kKFwicGF0aFwiLG4scyl9b3BzVG9QYXRoKHQsZSl7bGV0IHM9XCJcIjtmb3IoY29uc3QgbiBvZiB0Lm9wcyl7Y29uc3QgdD1cIm51bWJlclwiPT10eXBlb2YgZSYmZT49MD9uLmRhdGEubWFwKCh0PT4rdC50b0ZpeGVkKGUpKSk6bi5kYXRhO3N3aXRjaChuLm9wKXtjYXNlXCJtb3ZlXCI6cys9YE0ke3RbMF19ICR7dFsxXX0gYDticmVhaztjYXNlXCJiY3VydmVUb1wiOnMrPWBDJHt0WzBdfSAke3RbMV19LCAke3RbMl19ICR7dFszXX0sICR7dFs0XX0gJHt0WzVdfSBgO2JyZWFrO2Nhc2VcImxpbmVUb1wiOnMrPWBMJHt0WzBdfSAke3RbMV19IGB9fXJldHVybiBzLnRyaW0oKX10b1BhdGhzKHQpe2NvbnN0IGU9dC5zZXRzfHxbXSxzPXQub3B0aW9uc3x8dGhpcy5kZWZhdWx0T3B0aW9ucyxuPVtdO2Zvcihjb25zdCB0IG9mIGUpe2xldCBlPW51bGw7c3dpdGNoKHQudHlwZSl7Y2FzZVwicGF0aFwiOmU9e2Q6dGhpcy5vcHNUb1BhdGgodCksc3Ryb2tlOnMuc3Ryb2tlLHN0cm9rZVdpZHRoOnMuc3Ryb2tlV2lkdGgsZmlsbDp0dH07YnJlYWs7Y2FzZVwiZmlsbFBhdGhcIjplPXtkOnRoaXMub3BzVG9QYXRoKHQpLHN0cm9rZTp0dCxzdHJva2VXaWR0aDowLGZpbGw6cy5maWxsfHx0dH07YnJlYWs7Y2FzZVwiZmlsbFNrZXRjaFwiOmU9dGhpcy5maWxsU2tldGNoKHQscyl9ZSYmbi5wdXNoKGUpfXJldHVybiBufWZpbGxTa2V0Y2godCxlKXtsZXQgcz1lLmZpbGxXZWlnaHQ7cmV0dXJuIHM8MCYmKHM9ZS5zdHJva2VXaWR0aC8yKSx7ZDp0aGlzLm9wc1RvUGF0aCh0KSxzdHJva2U6ZS5maWxsfHx0dCxzdHJva2VXaWR0aDpzLGZpbGw6dHR9fV9tZXJnZWRTaGFwZSh0KXtyZXR1cm4gdC5maWx0ZXIoKCh0LGUpPT4wPT09ZXx8XCJtb3ZlXCIhPT10Lm9wKSl9fWNsYXNzIHN0e2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jYW52YXM9dCx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5nZW49bmV3IGV0KGUpfWRyYXcodCl7Y29uc3QgZT10LnNldHN8fFtdLHM9dC5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksbj10aGlzLmN0eCxvPXQub3B0aW9ucy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cztmb3IoY29uc3QgYSBvZiBlKXN3aXRjaChhLnR5cGUpe2Nhc2VcInBhdGhcIjpuLnNhdmUoKSxuLnN0cm9rZVN0eWxlPVwibm9uZVwiPT09cy5zdHJva2U/XCJ0cmFuc3BhcmVudFwiOnMuc3Ryb2tlLG4ubGluZVdpZHRoPXMuc3Ryb2tlV2lkdGgscy5zdHJva2VMaW5lRGFzaCYmbi5zZXRMaW5lRGFzaChzLnN0cm9rZUxpbmVEYXNoKSxzLnN0cm9rZUxpbmVEYXNoT2Zmc2V0JiYobi5saW5lRGFzaE9mZnNldD1zLnN0cm9rZUxpbmVEYXNoT2Zmc2V0KSx0aGlzLl9kcmF3VG9Db250ZXh0KG4sYSxvKSxuLnJlc3RvcmUoKTticmVhaztjYXNlXCJmaWxsUGF0aFwiOntuLnNhdmUoKSxuLmZpbGxTdHlsZT1zLmZpbGx8fFwiXCI7Y29uc3QgZT1cImN1cnZlXCI9PT10LnNoYXBlfHxcInBvbHlnb25cIj09PXQuc2hhcGV8fFwicGF0aFwiPT09dC5zaGFwZT9cImV2ZW5vZGRcIjpcIm5vbnplcm9cIjt0aGlzLl9kcmF3VG9Db250ZXh0KG4sYSxvLGUpLG4ucmVzdG9yZSgpO2JyZWFrfWNhc2VcImZpbGxTa2V0Y2hcIjp0aGlzLmZpbGxTa2V0Y2gobixhLHMpfX1maWxsU2tldGNoKHQsZSxzKXtsZXQgbj1zLmZpbGxXZWlnaHQ7bjwwJiYobj1zLnN0cm9rZVdpZHRoLzIpLHQuc2F2ZSgpLHMuZmlsbExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKHMuZmlsbExpbmVEYXNoKSxzLmZpbGxMaW5lRGFzaE9mZnNldCYmKHQubGluZURhc2hPZmZzZXQ9cy5maWxsTGluZURhc2hPZmZzZXQpLHQuc3Ryb2tlU3R5bGU9cy5maWxsfHxcIlwiLHQubGluZVdpZHRoPW4sdGhpcy5fZHJhd1RvQ29udGV4dCh0LGUscy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cyksdC5yZXN0b3JlKCl9X2RyYXdUb0NvbnRleHQodCxlLHMsbj1cIm5vbnplcm9cIil7dC5iZWdpblBhdGgoKTtmb3IoY29uc3QgbiBvZiBlLm9wcyl7Y29uc3QgZT1cIm51bWJlclwiPT10eXBlb2YgcyYmcz49MD9uLmRhdGEubWFwKCh0PT4rdC50b0ZpeGVkKHMpKSk6bi5kYXRhO3N3aXRjaChuLm9wKXtjYXNlXCJtb3ZlXCI6dC5tb3ZlVG8oZVswXSxlWzFdKTticmVhaztjYXNlXCJiY3VydmVUb1wiOnQuYmV6aWVyQ3VydmVUbyhlWzBdLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSk7YnJlYWs7Y2FzZVwibGluZVRvXCI6dC5saW5lVG8oZVswXSxlWzFdKX19XCJmaWxsUGF0aFwiPT09ZS50eXBlP3QuZmlsbChuKTp0LnN0cm9rZSgpfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9bGluZSh0LGUscyxuLG8pe2NvbnN0IGE9dGhpcy5nZW4ubGluZSh0LGUscyxuLG8pO3JldHVybiB0aGlzLmRyYXcoYSksYX1yZWN0YW5nbGUodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuZ2VuLnJlY3RhbmdsZSh0LGUscyxuLG8pO3JldHVybiB0aGlzLmRyYXcoYSksYX1lbGxpcHNlKHQsZSxzLG4sbyl7Y29uc3QgYT10aGlzLmdlbi5lbGxpcHNlKHQsZSxzLG4sbyk7cmV0dXJuIHRoaXMuZHJhdyhhKSxhfWNpcmNsZSh0LGUscyxuKXtjb25zdCBvPXRoaXMuZ2VuLmNpcmNsZSh0LGUscyxuKTtyZXR1cm4gdGhpcy5kcmF3KG8pLG99bGluZWFyUGF0aCh0LGUpe2NvbnN0IHM9dGhpcy5nZW4ubGluZWFyUGF0aCh0LGUpO3JldHVybiB0aGlzLmRyYXcocyksc31wb2x5Z29uKHQsZSl7Y29uc3Qgcz10aGlzLmdlbi5wb2x5Z29uKHQsZSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWFyYyh0LGUscyxuLG8sYSxoPSExLHIpe2NvbnN0IGk9dGhpcy5nZW4uYXJjKHQsZSxzLG4sbyxhLGgscik7cmV0dXJuIHRoaXMuZHJhdyhpKSxpfWN1cnZlKHQsZSl7Y29uc3Qgcz10aGlzLmdlbi5jdXJ2ZSh0LGUpO3JldHVybiB0aGlzLmRyYXcocyksc31wYXRoKHQsZSl7Y29uc3Qgcz10aGlzLmdlbi5wYXRoKHQsZSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfX1jb25zdCBudD1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7Y2xhc3Mgb3R7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN2Zz10LHRoaXMuZ2VuPW5ldyBldChlKX1kcmF3KHQpe2NvbnN0IGU9dC5zZXRzfHxbXSxzPXQub3B0aW9uc3x8dGhpcy5nZXREZWZhdWx0T3B0aW9ucygpLG49dGhpcy5zdmcub3duZXJEb2N1bWVudHx8d2luZG93LmRvY3VtZW50LG89bi5jcmVhdGVFbGVtZW50TlMobnQsXCJnXCIpLGE9dC5vcHRpb25zLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzO2Zvcihjb25zdCBoIG9mIGUpe2xldCBlPW51bGw7c3dpdGNoKGgudHlwZSl7Y2FzZVwicGF0aFwiOmU9bi5jcmVhdGVFbGVtZW50TlMobnQsXCJwYXRoXCIpLGUuc2V0QXR0cmlidXRlKFwiZFwiLHRoaXMub3BzVG9QYXRoKGgsYSkpLGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIscy5zdHJva2UpLGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIscy5zdHJva2VXaWR0aCtcIlwiKSxlLnNldEF0dHJpYnV0ZShcImZpbGxcIixcIm5vbmVcIikscy5zdHJva2VMaW5lRGFzaCYmZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIscy5zdHJva2VMaW5lRGFzaC5qb2luKFwiIFwiKS50cmltKCkpLHMuc3Ryb2tlTGluZURhc2hPZmZzZXQmJmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLWRhc2hvZmZzZXRcIixgJHtzLnN0cm9rZUxpbmVEYXNoT2Zmc2V0fWApO2JyZWFrO2Nhc2VcImZpbGxQYXRoXCI6ZT1uLmNyZWF0ZUVsZW1lbnROUyhudCxcInBhdGhcIiksZS5zZXRBdHRyaWJ1dGUoXCJkXCIsdGhpcy5vcHNUb1BhdGgoaCxhKSksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIixcIm5vbmVcIiksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixcIjBcIiksZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIscy5maWxsfHxcIlwiKSxcImN1cnZlXCIhPT10LnNoYXBlJiZcInBvbHlnb25cIiE9PXQuc2hhcGV8fGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpO2JyZWFrO2Nhc2VcImZpbGxTa2V0Y2hcIjplPXRoaXMuZmlsbFNrZXRjaChuLGgscyl9ZSYmby5hcHBlbmRDaGlsZChlKX1yZXR1cm4gb31maWxsU2tldGNoKHQsZSxzKXtsZXQgbj1zLmZpbGxXZWlnaHQ7bjwwJiYobj1zLnN0cm9rZVdpZHRoLzIpO2NvbnN0IG89dC5jcmVhdGVFbGVtZW50TlMobnQsXCJwYXRoXCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZShcImRcIix0aGlzLm9wc1RvUGF0aChlLHMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHMpKSxvLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLHMuZmlsbHx8XCJcIiksby5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixuK1wiXCIpLG8uc2V0QXR0cmlidXRlKFwiZmlsbFwiLFwibm9uZVwiKSxzLmZpbGxMaW5lRGFzaCYmby5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIscy5maWxsTGluZURhc2guam9pbihcIiBcIikudHJpbSgpKSxzLmZpbGxMaW5lRGFzaE9mZnNldCYmby5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaG9mZnNldFwiLGAke3MuZmlsbExpbmVEYXNoT2Zmc2V0fWApLG99Z2V0IGdlbmVyYXRvcigpe3JldHVybiB0aGlzLmdlbn1nZXREZWZhdWx0T3B0aW9ucygpe3JldHVybiB0aGlzLmdlbi5kZWZhdWx0T3B0aW9uc31vcHNUb1BhdGgodCxlKXtyZXR1cm4gdGhpcy5nZW4ub3BzVG9QYXRoKHQsZSl9bGluZSh0LGUscyxuLG8pe2NvbnN0IGE9dGhpcy5nZW4ubGluZSh0LGUscyxuLG8pO3JldHVybiB0aGlzLmRyYXcoYSl9cmVjdGFuZ2xlKHQsZSxzLG4sbyl7Y29uc3QgYT10aGlzLmdlbi5yZWN0YW5nbGUodCxlLHMsbixvKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWVsbGlwc2UodCxlLHMsbixvKXtjb25zdCBhPXRoaXMuZ2VuLmVsbGlwc2UodCxlLHMsbixvKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWNpcmNsZSh0LGUscyxuKXtjb25zdCBvPXRoaXMuZ2VuLmNpcmNsZSh0LGUscyxuKTtyZXR1cm4gdGhpcy5kcmF3KG8pfWxpbmVhclBhdGgodCxlKXtjb25zdCBzPXRoaXMuZ2VuLmxpbmVhclBhdGgodCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfXBvbHlnb24odCxlKXtjb25zdCBzPXRoaXMuZ2VuLnBvbHlnb24odCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfWFyYyh0LGUscyxuLG8sYSxoPSExLHIpe2NvbnN0IGk9dGhpcy5nZW4uYXJjKHQsZSxzLG4sbyxhLGgscik7cmV0dXJuIHRoaXMuZHJhdyhpKX1jdXJ2ZSh0LGUpe2NvbnN0IHM9dGhpcy5nZW4uY3VydmUodCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfXBhdGgodCxlKXtjb25zdCBzPXRoaXMuZ2VuLnBhdGgodCxlKTtyZXR1cm4gdGhpcy5kcmF3KHMpfX12YXIgYXQ9e2NhbnZhczoodCxlKT0+bmV3IHN0KHQsZSksc3ZnOih0LGUpPT5uZXcgb3QodCxlKSxnZW5lcmF0b3I6dD0+bmV3IGV0KHQpLG5ld1NlZWQ6KCk9PmV0Lm5ld1NlZWQoKX07ZXhwb3J0e2F0IGFzIGRlZmF1bHR9O1xuIiwKICAgICJpbXBvcnQge1xuICBnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldCxcbiAgZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnNcbn0gZnJvbSBcIi4vY2h1bmstMjNBVE1aWFYubWpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVUZXh0XG59IGZyb20gXCIuL2NodW5rLVpJNlYyVUUyLm1qc1wiO1xuaW1wb3J0IHtcbiAgZGVjb2RlRW50aXRpZXMsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBldmFsdWF0ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGhhc0thdGV4LFxuICBsb2csXG4gIHJlbmRlckthdGV4LFxuICBzYW5pdGl6ZVRleHRcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvY2x1c3RlcnMuanNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3QyIH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgcm91Z2ggZnJvbSBcInJvdWdoanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9pbnRlcnNlY3QvaW50ZXJzZWN0LXJlY3QuanNcbnZhciBpbnRlcnNlY3RSZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgcG9pbnQyKSA9PiB7XG4gIHZhciB4ID0gbm9kZS54O1xuICB2YXIgeSA9IG5vZGUueTtcbiAgdmFyIGR4ID0gcG9pbnQyLnggLSB4O1xuICB2YXIgZHkgPSBwb2ludDIueSAtIHk7XG4gIHZhciB3ID0gbm9kZS53aWR0aCAvIDI7XG4gIHZhciBoID0gbm9kZS5oZWlnaHQgLyAyO1xuICB2YXIgc3gsIHN5O1xuICBpZiAoTWF0aC5hYnMoZHkpICogdyA+IE1hdGguYWJzKGR4KSAqIGgpIHtcbiAgICBpZiAoZHkgPCAwKSB7XG4gICAgICBoID0gLWg7XG4gICAgfVxuICAgIHN4ID0gZHkgPT09IDAgPyAwIDogaCAqIGR4IC8gZHk7XG4gICAgc3kgPSBoO1xuICB9IGVsc2Uge1xuICAgIGlmIChkeCA8IDApIHtcbiAgICAgIHcgPSAtdztcbiAgICB9XG4gICAgc3ggPSB3O1xuICAgIHN5ID0gZHggPT09IDAgPyAwIDogdyAqIGR5IC8gZHg7XG4gIH1cbiAgcmV0dXJuIHsgeDogeCArIHN4LCB5OiB5ICsgc3kgfTtcbn0sIFwiaW50ZXJzZWN0UmVjdFwiKTtcbnZhciBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0ID0gaW50ZXJzZWN0UmVjdDtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9jcmVhdGVMYWJlbC5qc1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5mdW5jdGlvbiBhcHBseVN0eWxlKGRvbSwgc3R5bGVGbikge1xuICBpZiAoc3R5bGVGbikge1xuICAgIGRvbS5hdHRyKFwic3R5bGVcIiwgc3R5bGVGbik7XG4gIH1cbn1cbl9fbmFtZShhcHBseVN0eWxlLCBcImFwcGx5U3R5bGVcIik7XG5hc3luYyBmdW5jdGlvbiBhZGRIdG1sTGFiZWwobm9kZSkge1xuICBjb25zdCBmbyA9IHNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImZvcmVpZ25PYmplY3RcIikpO1xuICBjb25zdCBkaXYgPSBmby5hcHBlbmQoXCJ4aHRtbDpkaXZcIik7XG4gIGxldCBsYWJlbCA9IG5vZGUubGFiZWw7XG4gIGlmIChub2RlLmxhYmVsICYmIGhhc0thdGV4KG5vZGUubGFiZWwpKSB7XG4gICAgbGFiZWwgPSBhd2FpdCByZW5kZXJLYXRleChub2RlLmxhYmVsLnJlcGxhY2UoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgsIFwiXFxuXCIpLCBnZXRDb25maWcoKSk7XG4gIH1cbiAgY29uc3QgbGFiZWxDbGFzcyA9IG5vZGUuaXNOb2RlID8gXCJub2RlTGFiZWxcIiA6IFwiZWRnZUxhYmVsXCI7XG4gIGRpdi5odG1sKFxuICAgICc8c3BhbiBjbGFzcz1cIicgKyBsYWJlbENsYXNzICsgJ1wiICcgKyAobm9kZS5sYWJlbFN0eWxlID8gJ3N0eWxlPVwiJyArIG5vZGUubGFiZWxTdHlsZSArICdcIicgOiBcIlwiKSArIC8vIGNvZGVxbCBbanMvaHRtbC1jb25zdHJ1Y3RlZC1mcm9tLWlucHV0XSA6IGZhbHNlIHBvc2l0aXZlXG4gICAgXCI+XCIgKyBsYWJlbCArIFwiPC9zcGFuPlwiXG4gICk7XG4gIGFwcGx5U3R5bGUoZGl2LCBub2RlLmxhYmVsU3R5bGUpO1xuICBkaXYuc3R5bGUoXCJkaXNwbGF5XCIsIFwiaW5saW5lLWJsb2NrXCIpO1xuICBkaXYuc3R5bGUoXCJwYWRkaW5nLXJpZ2h0XCIsIFwiMXB4XCIpO1xuICBkaXYuc3R5bGUoXCJ3aGl0ZS1zcGFjZVwiLCBcIm5vd3JhcFwiKTtcbiAgZGl2LmF0dHIoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIik7XG4gIHJldHVybiBmby5ub2RlKCk7XG59XG5fX25hbWUoYWRkSHRtbExhYmVsLCBcImFkZEh0bWxMYWJlbFwiKTtcbnZhciBjcmVhdGVMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKF92ZXJ0ZXhUZXh0LCBzdHlsZSwgaXNUaXRsZSwgaXNOb2RlKSA9PiB7XG4gIGxldCB2ZXJ0ZXhUZXh0ID0gX3ZlcnRleFRleHQgfHwgXCJcIjtcbiAgaWYgKHR5cGVvZiB2ZXJ0ZXhUZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgdmVydGV4VGV4dCA9IHZlcnRleFRleHRbMF07XG4gIH1cbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIHZlcnRleFRleHQgPSB2ZXJ0ZXhUZXh0LnJlcGxhY2UoL1xcXFxufFxcbi9nLCBcIjxiciAvPlwiKTtcbiAgICBsb2cuaW5mbyhcInZlcnRleFRleHRcIiArIHZlcnRleFRleHQpO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBpc05vZGUsXG4gICAgICBsYWJlbDogZGVjb2RlRW50aXRpZXModmVydGV4VGV4dCkucmVwbGFjZShcbiAgICAgICAgL2ZhW2JscnNdPzpmYS1bXFx3LV0rL2csXG4gICAgICAgIChzKSA9PiBgPGkgY2xhc3M9JyR7cy5yZXBsYWNlKFwiOlwiLCBcIiBcIil9Jz48L2k+YFxuICAgICAgKSxcbiAgICAgIGxhYmVsU3R5bGU6IHN0eWxlID8gc3R5bGUucmVwbGFjZShcImZpbGw6XCIsIFwiY29sb3I6XCIpIDogc3R5bGVcbiAgICB9O1xuICAgIGxldCB2ZXJ0ZXhOb2RlID0gYXdhaXQgYWRkSHRtbExhYmVsKG5vZGUpO1xuICAgIHJldHVybiB2ZXJ0ZXhOb2RlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0ZXh0XCIpO1xuICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKSk7XG4gICAgbGV0IHJvd3MgPSBbXTtcbiAgICBpZiAodHlwZW9mIHZlcnRleFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0LnNwbGl0KC9cXFxcbnxcXG58PGJyXFxzKlxcLz8+L2dpKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmVydGV4VGV4dCkpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dzID0gW107XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHRzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcInhcIiwgXCIwXCIpO1xuICAgICAgaWYgKGlzVGl0bGUpIHtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJ0aXRsZS1yb3dcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJvd1wiKTtcbiAgICAgIH1cbiAgICAgIHRzcGFuLnRleHRDb250ZW50ID0gcm93LnRyaW0oKTtcbiAgICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgICB9XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59LCBcImNyZWF0ZUxhYmVsXCIpO1xudmFyIGNyZWF0ZUxhYmVsX2RlZmF1bHQgPSBjcmVhdGVMYWJlbDtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvcm91bmRlZFJlY3RQYXRoLnRzXG52YXIgY3JlYXRlUm91bmRlZFJlY3RQYXRoRCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgsIHksIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0LCByYWRpdXMpID0+IFtcbiAgXCJNXCIsXG4gIHggKyByYWRpdXMsXG4gIHksXG4gIC8vIE1vdmUgdG8gdGhlIGZpcnN0IHBvaW50XG4gIFwiSFwiLFxuICB4ICsgdG90YWxXaWR0aCAtIHJhZGl1cyxcbiAgLy8gRHJhdyBob3Jpem9udGFsIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmlnaHQgY29ybmVyXG4gIFwiQVwiLFxuICByYWRpdXMsXG4gIHJhZGl1cyxcbiAgMCxcbiAgMCxcbiAgMSxcbiAgeCArIHRvdGFsV2lkdGgsXG4gIHkgKyByYWRpdXMsXG4gIC8vIERyYXcgYXJjIHRvIHRoZSByaWdodCB0b3AgY29ybmVyXG4gIFwiVlwiLFxuICB5ICsgdG90YWxIZWlnaHQgLSByYWRpdXMsXG4gIC8vIERyYXcgdmVydGljYWwgbGluZSBkb3duIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJpZ2h0IGJvdHRvbSBjb3JuZXJcbiAgXCJBXCIsXG4gIHJhZGl1cyxcbiAgcmFkaXVzLFxuICAwLFxuICAwLFxuICAxLFxuICB4ICsgdG90YWxXaWR0aCAtIHJhZGl1cyxcbiAgeSArIHRvdGFsSGVpZ2h0LFxuICAvLyBEcmF3IGFyYyB0byB0aGUgcmlnaHQgYm90dG9tIGNvcm5lclxuICBcIkhcIixcbiAgeCArIHJhZGl1cyxcbiAgLy8gRHJhdyBob3Jpem9udGFsIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGVmdCBib3R0b20gY29ybmVyXG4gIFwiQVwiLFxuICByYWRpdXMsXG4gIHJhZGl1cyxcbiAgMCxcbiAgMCxcbiAgMSxcbiAgeCxcbiAgeSArIHRvdGFsSGVpZ2h0IC0gcmFkaXVzLFxuICAvLyBEcmF3IGFyYyB0byB0aGUgbGVmdCBib3R0b20gY29ybmVyXG4gIFwiVlwiLFxuICB5ICsgcmFkaXVzLFxuICAvLyBEcmF3IHZlcnRpY2FsIGxpbmUgdXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGVmdCB0b3AgY29ybmVyXG4gIFwiQVwiLFxuICByYWRpdXMsXG4gIHJhZGl1cyxcbiAgMCxcbiAgMCxcbiAgMSxcbiAgeCArIHJhZGl1cyxcbiAgeSxcbiAgLy8gRHJhdyBhcmMgdG8gdGhlIGxlZnQgdG9wIGNvcm5lclxuICBcIlpcIlxuICAvLyBDbG9zZSB0aGUgcGF0aFxuXS5qb2luKFwiIFwiKSwgXCJjcmVhdGVSb3VuZGVkUmVjdFBhdGhEXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9oYW5kRHJhd25TaGFwZVN0eWxlcy50c1xudmFyIHNvbGlkU3RhdGVGaWxsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29sb3IpID0+IHtcbiAgY29uc3QgeyBoYW5kRHJhd25TZWVkIH0gPSBnZXRDb25maWcoKTtcbiAgcmV0dXJuIHtcbiAgICBmaWxsOiBjb2xvcixcbiAgICBoYWNodXJlQW5nbGU6IDEyMCxcbiAgICAvLyBhbmdsZSBvZiBoYWNodXJlLFxuICAgIGhhY2h1cmVHYXA6IDQsXG4gICAgZmlsbFdlaWdodDogMixcbiAgICByb3VnaG5lc3M6IDAuNyxcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHNlZWQ6IGhhbmREcmF3blNlZWRcbiAgfTtcbn0sIFwic29saWRTdGF0ZUZpbGxcIik7XG52YXIgY29tcGlsZVN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUpID0+IHtcbiAgY29uc3Qgc3R5bGVzTWFwID0gc3R5bGVzMk1hcChbLi4ubm9kZS5jc3NDb21waWxlZFN0eWxlcyB8fCBbXSwgLi4ubm9kZS5jc3NTdHlsZXMgfHwgW11dKTtcbiAgcmV0dXJuIHsgc3R5bGVzTWFwLCBzdHlsZXNBcnJheTogWy4uLnN0eWxlc01hcF0gfTtcbn0sIFwiY29tcGlsZVN0eWxlc1wiKTtcbnZhciBzdHlsZXMyTWFwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHN0eWxlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgc3R5bGVzLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gc3R5bGUuc3BsaXQoXCI6XCIpO1xuICAgIHN0eWxlTWFwLnNldChrZXkudHJpbSgpLCB2YWx1ZT8udHJpbSgpKTtcbiAgfSk7XG4gIHJldHVybiBzdHlsZU1hcDtcbn0sIFwic3R5bGVzMk1hcFwiKTtcbnZhciBzdHlsZXMyU3RyaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSkgPT4ge1xuICBjb25zdCB7IHN0eWxlc0FycmF5IH0gPSBjb21waWxlU3R5bGVzKG5vZGUpO1xuICBjb25zdCBsYWJlbFN0eWxlcyA9IFtdO1xuICBjb25zdCBub2RlU3R5bGVzID0gW107XG4gIGNvbnN0IGJvcmRlclN0eWxlcyA9IFtdO1xuICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID0gW107XG4gIHN0eWxlc0FycmF5LmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gc3R5bGVbMF07XG4gICAgaWYgKGtleSA9PT0gXCJjb2xvclwiIHx8IGtleSA9PT0gXCJmb250LXNpemVcIiB8fCBrZXkgPT09IFwiZm9udC1mYW1pbHlcIiB8fCBrZXkgPT09IFwiZm9udC13ZWlnaHRcIiB8fCBrZXkgPT09IFwiZm9udC1zdHlsZVwiIHx8IGtleSA9PT0gXCJ0ZXh0LWRlY29yYXRpb25cIiB8fCBrZXkgPT09IFwidGV4dC1hbGlnblwiIHx8IGtleSA9PT0gXCJ0ZXh0LXRyYW5zZm9ybVwiIHx8IGtleSA9PT0gXCJsaW5lLWhlaWdodFwiIHx8IGtleSA9PT0gXCJsZXR0ZXItc3BhY2luZ1wiIHx8IGtleSA9PT0gXCJ3b3JkLXNwYWNpbmdcIiB8fCBrZXkgPT09IFwidGV4dC1zaGFkb3dcIiB8fCBrZXkgPT09IFwidGV4dC1vdmVyZmxvd1wiIHx8IGtleSA9PT0gXCJ3aGl0ZS1zcGFjZVwiIHx8IGtleSA9PT0gXCJ3b3JkLXdyYXBcIiB8fCBrZXkgPT09IFwid29yZC1icmVha1wiIHx8IGtleSA9PT0gXCJvdmVyZmxvdy13cmFwXCIgfHwga2V5ID09PSBcImh5cGhlbnNcIikge1xuICAgICAgbGFiZWxTdHlsZXMucHVzaChzdHlsZS5qb2luKFwiOlwiKSArIFwiICFpbXBvcnRhbnRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVTdHlsZXMucHVzaChzdHlsZS5qb2luKFwiOlwiKSArIFwiICFpbXBvcnRhbnRcIik7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwic3Ryb2tlXCIpKSB7XG4gICAgICAgIGJvcmRlclN0eWxlcy5wdXNoKHN0eWxlLmpvaW4oXCI6XCIpICsgXCIgIWltcG9ydGFudFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09IFwiZmlsbFwiKSB7XG4gICAgICAgIGJhY2tncm91bmRTdHlsZXMucHVzaChzdHlsZS5qb2luKFwiOlwiKSArIFwiICFpbXBvcnRhbnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsYWJlbFN0eWxlczogbGFiZWxTdHlsZXMuam9pbihcIjtcIiksXG4gICAgbm9kZVN0eWxlczogbm9kZVN0eWxlcy5qb2luKFwiO1wiKSxcbiAgICBzdHlsZXNBcnJheSxcbiAgICBib3JkZXJTdHlsZXMsXG4gICAgYmFja2dyb3VuZFN0eWxlc1xuICB9O1xufSwgXCJzdHlsZXMyU3RyaW5nXCIpO1xudmFyIHVzZXJOb2RlT3ZlcnJpZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBoYW5kRHJhd25TZWVkIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBub2RlQm9yZGVyLCBtYWluQmtnIH0gPSB0aGVtZVZhcmlhYmxlcztcbiAgY29uc3QgeyBzdHlsZXNNYXAgfSA9IGNvbXBpbGVTdHlsZXMobm9kZSk7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgcm91Z2huZXNzOiAwLjcsXG4gICAgICBmaWxsOiBzdHlsZXNNYXAuZ2V0KFwiZmlsbFwiKSB8fCBtYWluQmtnLFxuICAgICAgZmlsbFN0eWxlOiBcImhhY2h1cmVcIixcbiAgICAgIC8vIHNvbGlkIGZpbGxcbiAgICAgIGZpbGxXZWlnaHQ6IDQsXG4gICAgICBzdHJva2U6IHN0eWxlc01hcC5nZXQoXCJzdHJva2VcIikgfHwgbm9kZUJvcmRlcixcbiAgICAgIHNlZWQ6IGhhbmREcmF3blNlZWQsXG4gICAgICBzdHJva2VXaWR0aDogMS4zXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICk7XG4gIHJldHVybiByZXN1bHQ7XG59LCBcInVzZXJOb2RlT3ZlcnJpZGVzXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2NsdXN0ZXJzLmpzXG52YXIgcmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBsb2cuaW5mbyhcIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yIFwiLCBub2RlLmlkLCBub2RlKTtcbiAgY29uc3Qgc2l0ZUNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBoYW5kRHJhd25TZWVkIH0gPSBzaXRlQ29uZmlnO1xuICBjb25zdCB7IGNsdXN0ZXJCa2csIGNsdXN0ZXJCb3JkZXIgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzLCBib3JkZXJTdHlsZXMsIGJhY2tncm91bmRTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiY2x1c3RlciBcIiArIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBjb25zdCBsYWJlbEVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsIFwiKTtcbiAgY29uc3QgdGV4dCA9IGF3YWl0IGNyZWF0ZVRleHQobGFiZWxFbCwgbm9kZS5sYWJlbCwge1xuICAgIHN0eWxlOiBub2RlLmxhYmVsU3R5bGUsXG4gICAgdXNlSHRtbExhYmVscyxcbiAgICBpc05vZGU6IHRydWVcbiAgfSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QyKHRleHQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nID8gYmJveC53aWR0aCArIG5vZGUucGFkZGluZyA6IG5vZGUud2lkdGg7XG4gIGlmIChub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpIHtcbiAgICBub2RlLmRpZmYgPSAod2lkdGggLSBub2RlLndpZHRoKSAvIDIgLSBub2RlLnBhZGRpbmc7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5kaWZmID0gLW5vZGUucGFkZGluZztcbiAgfVxuICBjb25zdCBoZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgY29uc3QgeCA9IG5vZGUueCAtIHdpZHRoIC8gMjtcbiAgY29uc3QgeSA9IG5vZGUueSAtIGhlaWdodCAvIDI7XG4gIGxvZy50cmFjZShcIkRhdGEgXCIsIG5vZGUsIEpTT04uc3RyaW5naWZ5KG5vZGUpKTtcbiAgbGV0IHJlY3QyO1xuICBpZiAobm9kZS5sb29rID09PSBcImhhbmREcmF3blwiKSB7XG4gICAgY29uc3QgcmMgPSByb3VnaC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7XG4gICAgICByb3VnaG5lc3M6IDAuNyxcbiAgICAgIGZpbGw6IGNsdXN0ZXJCa2csXG4gICAgICAvLyBmaWxsOiAncmVkJyxcbiAgICAgIHN0cm9rZTogY2x1c3RlckJvcmRlcixcbiAgICAgIGZpbGxXZWlnaHQ6IDMsXG4gICAgICBzZWVkOiBoYW5kRHJhd25TZWVkXG4gICAgfSk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucGF0aChjcmVhdGVSb3VuZGVkUmVjdFBhdGhEKHgsIHksIHdpZHRoLCBoZWlnaHQsIDApLCBvcHRpb25zKTtcbiAgICByZWN0MiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiB7XG4gICAgICBsb2cuZGVidWcoXCJSb3VnaCBub2RlIGluc2VydCBDWENcIiwgcm91Z2hOb2RlKTtcbiAgICAgIHJldHVybiByb3VnaE5vZGU7XG4gICAgfSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgcmVjdDIuc2VsZWN0KFwicGF0aDpudGgtY2hpbGQoMilcIikuYXR0cihcInN0eWxlXCIsIGJvcmRlclN0eWxlcy5qb2luKFwiO1wiKSk7XG4gICAgcmVjdDIuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwic3R5bGVcIiwgYmFja2dyb3VuZFN0eWxlcy5qb2luKFwiO1wiKS5yZXBsYWNlKFwiZmlsbFwiLCBcInN0cm9rZVwiKSk7XG4gIH0gZWxzZSB7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKS5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpO1xuICB9XG4gIGNvbnN0IHsgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbiB9ID0gZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnMoc2l0ZUNvbmZpZyk7XG4gIGxhYmVsRWwuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIC8vIFRoaXMgcHV0cyB0aGUgbGFiZWwgb24gdG9wIG9mIHRoZSBib3ggaW5zdGVhZCBvZiBpbnNpZGUgaXRcbiAgICBgdHJhbnNsYXRlKCR7bm9kZS54IC0gYmJveC53aWR0aCAvIDJ9LCAke25vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiArIHN1YkdyYXBoVGl0bGVUb3BNYXJnaW59KWBcbiAgKTtcbiAgaWYgKGxhYmVsU3R5bGVzKSB7XG4gICAgY29uc3Qgc3BhbiA9IGxhYmVsRWwuc2VsZWN0KFwic3BhblwiKTtcbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5hdHRyKFwic3R5bGVcIiwgbGFiZWxTdHlsZXMpO1xuICAgIH1cbiAgfVxuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS5vZmZzZXRYID0gMDtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUub2Zmc2V0WSA9IGJib3guaGVpZ2h0IC0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X3JlY3RfZGVmYXVsdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4geyBjbHVzdGVyOiBzaGFwZVN2ZywgbGFiZWxCQm94OiBiYm94IH07XG59LCBcInJlY3RcIik7XG52YXIgbm90ZUdyb3VwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm90ZS1jbHVzdGVyXCIpLmF0dHIoXCJpZFwiLCBub2RlLmlkKTtcbiAgY29uc3QgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICBjb25zdCBwYWRkaW5nID0gMCAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBwYWRkaW5nIC8gMjtcbiAgcmVjdDIuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCBub2RlLnggLSBub2RlLndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCBub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGggKyBwYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0ICsgcGFkZGluZykuYXR0cihcImZpbGxcIiwgXCJub25lXCIpO1xuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9yZWN0X2RlZmF1bHQobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHsgY2x1c3Rlcjogc2hhcGVTdmcsIGxhYmVsQkJveDogeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0gfTtcbn0sIFwibm90ZUdyb3VwXCIpO1xudmFyIHJvdW5kZWRXaXRoVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2l0ZUNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBoYW5kRHJhd25TZWVkIH0gPSBzaXRlQ29uZmlnO1xuICBjb25zdCB7IGFsdEJhY2tncm91bmQsIGNvbXBvc2l0ZUJhY2tncm91bmQsIGNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZCwgbm9kZUJvcmRlciB9ID0gdGhlbWVWYXJpYWJsZXM7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgY29uc3Qgb3V0ZXJSZWN0RyA9IHNoYXBlU3ZnLmluc2VydChcImdcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsXCIpO1xuICBsZXQgaW5uZXJSZWN0ID0gc2hhcGVTdmcuYXBwZW5kKFwicmVjdFwiKTtcbiAgY29uc3QgdGV4dCA9IGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KG5vZGUubGFiZWwsIG5vZGUubGFiZWxTdHlsZSwgdm9pZCAwLCB0cnVlKSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QyKHRleHQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IHBhZGRpbmcgLyAyO1xuICBjb25zdCB3aWR0aCA9IChub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcgPyBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nIDogbm9kZS53aWR0aCkgKyBwYWRkaW5nO1xuICBpZiAobm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nKSB7XG4gICAgbm9kZS5kaWZmID0gKHdpZHRoIC0gbm9kZS53aWR0aCkgLyAyIC0gbm9kZS5wYWRkaW5nO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuZGlmZiA9IC1ub2RlLnBhZGRpbmc7XG4gIH1cbiAgY29uc3QgaGVpZ2h0ID0gbm9kZS5oZWlnaHQgKyBwYWRkaW5nO1xuICBjb25zdCBpbm5lckhlaWdodCA9IG5vZGUuaGVpZ2h0ICsgcGFkZGluZyAtIGJib3guaGVpZ2h0IC0gNjtcbiAgY29uc3QgeCA9IG5vZGUueCAtIHdpZHRoIC8gMjtcbiAgY29uc3QgeSA9IG5vZGUueSAtIGhlaWdodCAvIDI7XG4gIG5vZGUud2lkdGggPSB3aWR0aDtcbiAgY29uc3QgaW5uZXJZID0gbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBiYm94LmhlaWdodCArIDI7XG4gIGxldCByZWN0MjtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IGlzQWx0ID0gbm9kZS5jc3NDbGFzc2VzLmluY2x1ZGVzKFwic3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0XCIpO1xuICAgIGNvbnN0IHJjID0gcm91Z2guc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCByb3VnaE91dGVyTm9kZSA9IG5vZGUucnggfHwgbm9kZS5yeSA/IHJjLnBhdGgoY3JlYXRlUm91bmRlZFJlY3RQYXRoRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAxMCksIHtcbiAgICAgIHJvdWdobmVzczogMC43LFxuICAgICAgZmlsbDogY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kLFxuICAgICAgZmlsbFN0eWxlOiBcInNvbGlkXCIsXG4gICAgICBzdHJva2U6IG5vZGVCb3JkZXIsXG4gICAgICBzZWVkOiBoYW5kRHJhd25TZWVkXG4gICAgfSkgOiByYy5yZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgeyBzZWVkOiBoYW5kRHJhd25TZWVkIH0pO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoT3V0ZXJOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCByb3VnaElubmVyTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCBpbm5lclksIHdpZHRoLCBpbm5lckhlaWdodCwge1xuICAgICAgZmlsbDogaXNBbHQgPyBhbHRCYWNrZ3JvdW5kIDogY29tcG9zaXRlQmFja2dyb3VuZCxcbiAgICAgIGZpbGxTdHlsZTogaXNBbHQgPyBcImhhY2h1cmVcIiA6IFwic29saWRcIixcbiAgICAgIHN0cm9rZTogbm9kZUJvcmRlcixcbiAgICAgIHNlZWQ6IGhhbmREcmF3blNlZWRcbiAgICB9KTtcbiAgICByZWN0MiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE91dGVyTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgaW5uZXJSZWN0ID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoSW5uZXJOb2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZWN0MiA9IG91dGVyUmVjdEcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCBvdXRlclJlY3RDbGFzcyA9IFwib3V0ZXJcIjtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgb3V0ZXJSZWN0Q2xhc3MpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgICBpbm5lclJlY3QuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgaW5uZXJZKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaW5uZXJIZWlnaHQpO1xuICB9XG4gIGxhYmVsLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBgdHJhbnNsYXRlKCR7bm9kZS54IC0gYmJveC53aWR0aCAvIDJ9LCAke3kgKyAxIC0gKGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpID8gMCA6IDMpfSlgXG4gICk7XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLmhlaWdodCA9IHJlY3RCb3guaGVpZ2h0O1xuICBub2RlLm9mZnNldFggPSAwO1xuICBub2RlLm9mZnNldFkgPSBiYm94LmhlaWdodCAtIG5vZGUucGFkZGluZyAvIDI7XG4gIG5vZGUubGFiZWxCQm94ID0gYmJveDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X3JlY3RfZGVmYXVsdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4geyBjbHVzdGVyOiBzaGFwZVN2ZywgbGFiZWxCQm94OiBiYm94IH07XG59LCBcInJvdW5kZWRXaXRoVGl0bGVcIik7XG52YXIgZGl2aWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgdGhlbWVWYXJpYWJsZXMsIGhhbmREcmF3blNlZWQgfSA9IHNpdGVDb25maWc7XG4gIGNvbnN0IHsgbm9kZUJvcmRlciB9ID0gdGhlbWVWYXJpYWJsZXM7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpLmF0dHIoXCJkYXRhLWxvb2tcIiwgbm9kZS5sb29rKTtcbiAgY29uc3Qgb3V0ZXJSZWN0RyA9IHNoYXBlU3ZnLmluc2VydChcImdcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCB3aWR0aCA9IG5vZGUud2lkdGggKyBwYWRkaW5nO1xuICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoZWlnaHQgPSBub2RlLmhlaWdodCArIHBhZGRpbmc7XG4gIGNvbnN0IHggPSBub2RlLnggLSB3aWR0aCAvIDI7XG4gIGNvbnN0IHkgPSBub2RlLnkgLSBoZWlnaHQgLyAyO1xuICBub2RlLndpZHRoID0gd2lkdGg7XG4gIGxldCByZWN0MjtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2guc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCByb3VnaE91dGVyTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB7XG4gICAgICBmaWxsOiBcImxpZ2h0Z3JleVwiLFxuICAgICAgcm91Z2huZXNzOiAwLjUsXG4gICAgICBzdHJva2VMaW5lRGFzaDogWzVdLFxuICAgICAgc3Ryb2tlOiBub2RlQm9yZGVyLFxuICAgICAgc2VlZDogaGFuZERyYXduU2VlZFxuICAgIH0pO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoT3V0ZXJOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZWN0MiA9IG91dGVyUmVjdEcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCBvdXRlclJlY3RDbGFzcyA9IFwiZGl2aWRlclwiO1xuICAgIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBvdXRlclJlY3RDbGFzcykuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCkuYXR0cihcImRhdGEtbG9va1wiLCBub2RlLmxvb2spO1xuICB9XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLmhlaWdodCA9IHJlY3RCb3guaGVpZ2h0O1xuICBub2RlLm9mZnNldFggPSAwO1xuICBub2RlLm9mZnNldFkgPSAwO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiB7IGNsdXN0ZXI6IHNoYXBlU3ZnLCBsYWJlbEJCb3g6IHt9IH07XG59LCBcImRpdmlkZXJcIik7XG52YXIgc3F1YXJlUmVjdCA9IHJlY3Q7XG52YXIgc2hhcGVzID0ge1xuICByZWN0LFxuICBzcXVhcmVSZWN0LFxuICByb3VuZGVkV2l0aFRpdGxlLFxuICBub3RlR3JvdXAsXG4gIGRpdmlkZXJcbn07XG52YXIgY2x1c3RlckVsZW1zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBpbnNlcnRDbHVzdGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoZWxlbSwgbm9kZSkgPT4ge1xuICBjb25zdCBzaGFwZSA9IG5vZGUuc2hhcGUgfHwgXCJyZWN0XCI7XG4gIGNvbnN0IGNsdXN0ZXIgPSBhd2FpdCBzaGFwZXNbc2hhcGVdKGVsZW0sIG5vZGUpO1xuICBjbHVzdGVyRWxlbXMuc2V0KG5vZGUuaWQsIGNsdXN0ZXIpO1xuICByZXR1cm4gY2x1c3Rlcjtcbn0sIFwiaW5zZXJ0Q2x1c3RlclwiKTtcbnZhciBjbGVhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjbHVzdGVyRWxlbXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xufSwgXCJjbGVhclwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9lZGdlcy5qc1xuaW1wb3J0IHsgY3VydmVCYXNpcywgbGluZSwgc2VsZWN0IGFzIHNlbGVjdDMgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCByb3VnaDIgZnJvbSBcInJvdWdoanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9lZGdlTWFya2VyLnRzXG52YXIgYWRkRWRnZU1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSkgPT4ge1xuICBpZiAoZWRnZS5hcnJvd1R5cGVTdGFydCkge1xuICAgIGFkZEVkZ2VNYXJrZXIoc3ZnUGF0aCwgXCJzdGFydFwiLCBlZGdlLmFycm93VHlwZVN0YXJ0LCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIH1cbiAgaWYgKGVkZ2UuYXJyb3dUeXBlRW5kKSB7XG4gICAgYWRkRWRnZU1hcmtlcihzdmdQYXRoLCBcImVuZFwiLCBlZGdlLmFycm93VHlwZUVuZCwgdXJsLCBpZCwgZGlhZ3JhbVR5cGUpO1xuICB9XG59LCBcImFkZEVkZ2VNYXJrZXJzXCIpO1xudmFyIGFycm93VHlwZXNNYXAgPSB7XG4gIGFycm93X2Nyb3NzOiBcImNyb3NzXCIsXG4gIGFycm93X3BvaW50OiBcInBvaW50XCIsXG4gIGFycm93X2JhcmI6IFwiYmFyYlwiLFxuICBhcnJvd19jaXJjbGU6IFwiY2lyY2xlXCIsXG4gIGFnZ3JlZ2F0aW9uOiBcImFnZ3JlZ2F0aW9uXCIsXG4gIGV4dGVuc2lvbjogXCJleHRlbnNpb25cIixcbiAgY29tcG9zaXRpb246IFwiY29tcG9zaXRpb25cIixcbiAgZGVwZW5kZW5jeTogXCJkZXBlbmRlbmN5XCIsXG4gIGxvbGxpcG9wOiBcImxvbGxpcG9wXCJcbn07XG52YXIgYWRkRWRnZU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Z1BhdGgsIHBvc2l0aW9uLCBhcnJvd1R5cGUsIHVybCwgaWQsIGRpYWdyYW1UeXBlKSA9PiB7XG4gIGNvbnN0IGVuZE1hcmtlclR5cGUgPSBhcnJvd1R5cGVzTWFwW2Fycm93VHlwZV07XG4gIGlmICghZW5kTWFya2VyVHlwZSkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7YXJyb3dUeXBlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdWZmaXggPSBwb3NpdGlvbiA9PT0gXCJzdGFydFwiID8gXCJTdGFydFwiIDogXCJFbmRcIjtcbiAgc3ZnUGF0aC5hdHRyKGBtYXJrZXItJHtwb3NpdGlvbn1gLCBgdXJsKCR7dXJsfSMke2lkfV8ke2RpYWdyYW1UeXBlfS0ke2VuZE1hcmtlclR5cGV9JHtzdWZmaXh9KWApO1xufSwgXCJhZGRFZGdlTWFya2VyXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2VkZ2VzLmpzXG52YXIgZWRnZUxhYmVscyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgdGVybWluYWxMYWJlbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBlZGdlTGFiZWxzLmNsZWFyKCk7XG4gIHRlcm1pbmFsTGFiZWxzLmNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIGdldExhYmVsU3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3R5bGVBcnJheSkgPT4ge1xuICBsZXQgc3R5bGVzID0gc3R5bGVBcnJheSA/IHN0eWxlQXJyYXkucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MgKyBcIjtcIiArIHN0eWxlLCBcIlwiKSA6IFwiXCI7XG4gIHJldHVybiBzdHlsZXM7XG59LCBcImdldExhYmVsU3R5bGVzXCIpO1xudmFyIGluc2VydEVkZ2VMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsZW0sIGVkZ2UpID0+IHtcbiAgbGV0IHVzZUh0bWxMYWJlbHMgPSBldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGNvbnN0IGxhYmVsRWxlbWVudCA9IGF3YWl0IGNyZWF0ZVRleHQoZWxlbSwgZWRnZS5sYWJlbCwge1xuICAgIHN0eWxlOiBnZXRMYWJlbFN0eWxlcyhlZGdlLmxhYmVsU3R5bGUpLFxuICAgIHVzZUh0bWxMYWJlbHMsXG4gICAgYWRkU3ZnQmFja2dyb3VuZDogdHJ1ZSxcbiAgICBpc05vZGU6IGZhbHNlXG4gIH0pO1xuICBsb2cuaW5mbyhcImFiYzgyXCIsIGVkZ2UsIGVkZ2UubGFiZWxUeXBlKTtcbiAgY29uc3QgZWRnZUxhYmVsID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VMYWJlbFwiKTtcbiAgY29uc3QgbGFiZWwgPSBlZGdlTGFiZWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7XG4gIGxldCBiYm94ID0gbGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgaWYgKHVzZUh0bWxMYWJlbHMpIHtcbiAgICBjb25zdCBkaXYgPSBsYWJlbEVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QzKGxhYmVsRWxlbWVudCk7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC1iYm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIGVkZ2VMYWJlbHMuc2V0KGVkZ2UuaWQsIGVkZ2VMYWJlbCk7XG4gIGVkZ2Uud2lkdGggPSBiYm94LndpZHRoO1xuICBlZGdlLmhlaWdodCA9IGJib3guaGVpZ2h0O1xuICBsZXQgZm87XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxMZWZ0KSB7XG4gICAgY29uc3Qgc3RhcnRMYWJlbEVsZW1lbnQgPSBhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KFxuICAgICAgZWRnZS5zdGFydExhYmVsTGVmdCxcbiAgICAgIGdldExhYmVsU3R5bGVzKGVkZ2UubGFiZWxTdHlsZSlcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0RWRnZUxhYmVsTGVmdCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gc3RhcnRFZGdlTGFiZWxMZWZ0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBpbm5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoc3RhcnRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gc3RhcnRMYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIGlubmVyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtc2xCb3gud2lkdGggLyAyICsgXCIsIFwiICsgLXNsQm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkpIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzLnNldChlZGdlLmlkLCB7fSk7XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5zdGFydExlZnQgPSBzdGFydEVkZ2VMYWJlbExlZnQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5zdGFydExhYmVsTGVmdCk7XG4gIH1cbiAgaWYgKGVkZ2Uuc3RhcnRMYWJlbFJpZ2h0KSB7XG4gICAgY29uc3Qgc3RhcnRMYWJlbEVsZW1lbnQgPSBhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KFxuICAgICAgZWRnZS5zdGFydExhYmVsUmlnaHQsXG4gICAgICBnZXRMYWJlbFN0eWxlcyhlZGdlLmxhYmVsU3R5bGUpXG4gICAgKTtcbiAgICBjb25zdCBzdGFydEVkZ2VMYWJlbFJpZ2h0ID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VUZXJtaW5hbHNcIik7XG4gICAgY29uc3QgaW5uZXIgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChzdGFydExhYmVsRWxlbWVudCk7XG4gICAgaW5uZXIubm9kZSgpLmFwcGVuZENoaWxkKHN0YXJ0TGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBzbEJveCA9IHN0YXJ0TGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHMuZ2V0KGVkZ2UuaWQpKSB7XG4gICAgICB0ZXJtaW5hbExhYmVscy5zZXQoZWRnZS5pZCwge30pO1xuICAgIH1cbiAgICB0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkuc3RhcnRSaWdodCA9IHN0YXJ0RWRnZUxhYmVsUmlnaHQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5zdGFydExhYmVsUmlnaHQpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsTGVmdCkge1xuICAgIGNvbnN0IGVuZExhYmVsRWxlbWVudCA9IGF3YWl0IGNyZWF0ZUxhYmVsX2RlZmF1bHQoZWRnZS5lbmRMYWJlbExlZnQsIGdldExhYmVsU3R5bGVzKGVkZ2UubGFiZWxTdHlsZSkpO1xuICAgIGNvbnN0IGVuZEVkZ2VMYWJlbExlZnQgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVRlcm1pbmFsc1wiKTtcbiAgICBjb25zdCBpbm5lciA9IGVuZEVkZ2VMYWJlbExlZnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbExlZnQubm9kZSgpLmFwcGVuZENoaWxkKGVuZExhYmVsRWxlbWVudCk7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkpIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzLnNldChlZGdlLmlkLCB7fSk7XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5lbmRMZWZ0ID0gZW5kRWRnZUxhYmVsTGVmdDtcbiAgICBzZXRUZXJtaW5hbFdpZHRoKGZvLCBlZGdlLmVuZExhYmVsTGVmdCk7XG4gIH1cbiAgaWYgKGVkZ2UuZW5kTGFiZWxSaWdodCkge1xuICAgIGNvbnN0IGVuZExhYmVsRWxlbWVudCA9IGF3YWl0IGNyZWF0ZUxhYmVsX2RlZmF1bHQoZWRnZS5lbmRMYWJlbFJpZ2h0LCBnZXRMYWJlbFN0eWxlcyhlZGdlLmxhYmVsU3R5bGUpKTtcbiAgICBjb25zdCBlbmRFZGdlTGFiZWxSaWdodCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gZW5kRWRnZUxhYmVsUmlnaHQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHMuZ2V0KGVkZ2UuaWQpKSB7XG4gICAgICB0ZXJtaW5hbExhYmVscy5zZXQoZWRnZS5pZCwge30pO1xuICAgIH1cbiAgICB0ZXJtaW5hbExhYmVscy5nZXQoZWRnZS5pZCkuZW5kUmlnaHQgPSBlbmRFZGdlTGFiZWxSaWdodDtcbiAgICBzZXRUZXJtaW5hbFdpZHRoKGZvLCBlZGdlLmVuZExhYmVsUmlnaHQpO1xuICB9XG4gIHJldHVybiBsYWJlbEVsZW1lbnQ7XG59LCBcImluc2VydEVkZ2VMYWJlbFwiKTtcbmZ1bmN0aW9uIHNldFRlcm1pbmFsV2lkdGgoZm8sIHZhbHVlKSB7XG4gIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyAmJiBmbykge1xuICAgIGZvLnN0eWxlLndpZHRoID0gdmFsdWUubGVuZ3RoICogOSArIFwicHhcIjtcbiAgICBmby5zdHlsZS5oZWlnaHQgPSBcIjEycHhcIjtcbiAgfVxufVxuX19uYW1lKHNldFRlcm1pbmFsV2lkdGgsIFwic2V0VGVybWluYWxXaWR0aFwiKTtcbnZhciBwb3NpdGlvbkVkZ2VMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVkZ2UsIHBhdGhzKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcIk1vdmluZyBsYWJlbCBhYmM4OCBcIiwgZWRnZS5pZCwgZWRnZS5sYWJlbCwgZWRnZUxhYmVscy5nZXQoZWRnZS5pZCksIHBhdGhzKTtcbiAgbGV0IHBhdGggPSBwYXRocy51cGRhdGVkUGF0aCA/IHBhdGhzLnVwZGF0ZWRQYXRoIDogcGF0aHMub3JpZ2luYWxQYXRoO1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgaWYgKGVkZ2UubGFiZWwpIHtcbiAgICBjb25zdCBlbCA9IGVkZ2VMYWJlbHMuZ2V0KGVkZ2UuaWQpO1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlsc19kZWZhdWx0LmNhbGNMYWJlbFBvc2l0aW9uKHBhdGgpO1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBcIk1vdmluZyBsYWJlbCBcIiArIGVkZ2UubGFiZWwgKyBcIiBmcm9tIChcIixcbiAgICAgICAgeCxcbiAgICAgICAgXCIsXCIsXG4gICAgICAgIHksXG4gICAgICAgIFwiKSB0byAoXCIsXG4gICAgICAgIHBvcy54LFxuICAgICAgICBcIixcIixcbiAgICAgICAgcG9zLnksXG4gICAgICAgIFwiKSBhYmM4OFwiXG4gICAgICApO1xuICAgICAgaWYgKHBhdGhzLnVwZGF0ZWRQYXRoKSB7XG4gICAgICAgIHggPSBwb3MueDtcbiAgICAgICAgeSA9IHBvcy55O1xuICAgICAgfVxuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5ICsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIC8gMn0pYCk7XG4gIH1cbiAgaWYgKGVkZ2Uuc3RhcnRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5zdGFydExlZnQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZVN0YXJ0ID8gMTAgOiAwLCBcInN0YXJ0X2xlZnRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApO1xuICB9XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxSaWdodCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHMuZ2V0KGVkZ2UuaWQpLnN0YXJ0UmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihcbiAgICAgICAgZWRnZS5hcnJvd1R5cGVTdGFydCA/IDEwIDogMCxcbiAgICAgICAgXCJzdGFydF9yaWdodFwiLFxuICAgICAgICBwYXRoXG4gICAgICApO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSlgKTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5lbmRMZWZ0O1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlsc19kZWZhdWx0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oZWRnZS5hcnJvd1R5cGVFbmQgPyAxMCA6IDAsIFwiZW5kX2xlZnRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzLmdldChlZGdlLmlkKS5lbmRSaWdodDtcbiAgICBsZXQgeCA9IGVkZ2UueDtcbiAgICBsZXQgeSA9IGVkZ2UueTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgY29uc3QgcG9zID0gdXRpbHNfZGVmYXVsdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGVkZ2UuYXJyb3dUeXBlRW5kID8gMTAgOiAwLCBcImVuZF9yaWdodFwiLCBwYXRoKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7eH0sICR7eX0pYCk7XG4gIH1cbn0sIFwicG9zaXRpb25FZGdlTGFiZWxcIik7XG52YXIgb3V0c2lkZU5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBwb2ludDIpID0+IHtcbiAgY29uc3QgeCA9IG5vZGUueDtcbiAgY29uc3QgeSA9IG5vZGUueTtcbiAgY29uc3QgZHggPSBNYXRoLmFicyhwb2ludDIueCAtIHgpO1xuICBjb25zdCBkeSA9IE1hdGguYWJzKHBvaW50Mi55IC0geSk7XG4gIGNvbnN0IHcgPSBub2RlLndpZHRoIC8gMjtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcbiAgcmV0dXJuIGR4ID49IHcgfHwgZHkgPj0gaDtcbn0sIFwib3V0c2lkZU5vZGVcIik7XG52YXIgaW50ZXJzZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgb3V0c2lkZVBvaW50LCBpbnNpZGVQb2ludCkgPT4ge1xuICBsb2cuZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkob3V0c2lkZVBvaW50KX1cbiAgaW5zaWRlUG9pbnQgOiAke0pTT04uc3RyaW5naWZ5KGluc2lkZVBvaW50KX1cbiAgbm9kZSAgICAgICAgOiB4OiR7bm9kZS54fSB5OiR7bm9kZS55fSB3OiR7bm9kZS53aWR0aH0gaDoke25vZGUuaGVpZ2h0fWApO1xuICBjb25zdCB4ID0gbm9kZS54O1xuICBjb25zdCB5ID0gbm9kZS55O1xuICBjb25zdCBkeCA9IE1hdGguYWJzKHggLSBpbnNpZGVQb2ludC54KTtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGggLyAyO1xuICBsZXQgciA9IGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCA/IHcgLSBkeCA6IHcgKyBkeDtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0IC8gMjtcbiAgY29uc3QgUSA9IE1hdGguYWJzKG91dHNpZGVQb2ludC55IC0gaW5zaWRlUG9pbnQueSk7XG4gIGNvbnN0IFIgPSBNYXRoLmFicyhvdXRzaWRlUG9pbnQueCAtIGluc2lkZVBvaW50LngpO1xuICBpZiAoTWF0aC5hYnMoeSAtIG91dHNpZGVQb2ludC55KSAqIHcgPiBNYXRoLmFicyh4IC0gb3V0c2lkZVBvaW50LngpICogaCkge1xuICAgIGxldCBxID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gb3V0c2lkZVBvaW50LnkgLSBoIC0geSA6IHkgLSBoIC0gb3V0c2lkZVBvaW50Lnk7XG4gICAgciA9IFIgKiBxIC8gUTtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICB4OiBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgciA6IGluc2lkZVBvaW50LnggLSBSICsgcixcbiAgICAgIHk6IGluc2lkZVBvaW50LnkgPCBvdXRzaWRlUG9pbnQueSA/IGluc2lkZVBvaW50LnkgKyBRIC0gcSA6IGluc2lkZVBvaW50LnkgLSBRICsgcVxuICAgIH07XG4gICAgaWYgKHIgPT09IDApIHtcbiAgICAgIHJlcy54ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgICByZXMueSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICBpZiAoUiA9PT0gMCkge1xuICAgICAgcmVzLnggPSBvdXRzaWRlUG9pbnQueDtcbiAgICB9XG4gICAgaWYgKFEgPT09IDApIHtcbiAgICAgIHJlcy55ID0gb3V0c2lkZVBvaW50Lnk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgYWJjODkgdG9wL2JvdHRvbSBjYWxjLCBRICR7UX0sIHEgJHtxfSwgUiAke1J9LCByICR7cn1gLCByZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCkge1xuICAgICAgciA9IG91dHNpZGVQb2ludC54IC0gdyAtIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSB4IC0gdyAtIG91dHNpZGVQb2ludC54O1xuICAgIH1cbiAgICBsZXQgcSA9IFEgKiByIC8gUjtcbiAgICBsZXQgX3ggPSBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgUiAtIHIgOiBpbnNpZGVQb2ludC54IC0gUiArIHI7XG4gICAgbGV0IF95ID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gaW5zaWRlUG9pbnQueSArIHEgOiBpbnNpZGVQb2ludC55IC0gcTtcbiAgICBsb2cuZGVidWcoYHNpZGVzIGNhbGMgYWJjODksIFEgJHtRfSwgcSAke3F9LCBSICR7Un0sIHIgJHtyfWAsIHsgX3gsIF95IH0pO1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICBfeCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgX3kgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIF94ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICBfeSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICByZXR1cm4geyB4OiBfeCwgeTogX3kgfTtcbiAgfVxufSwgXCJpbnRlcnNlY3Rpb25cIik7XG52YXIgY3V0UGF0aEF0SW50ZXJzZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3BvaW50cywgYm91bmRhcnlOb2RlKSA9PiB7XG4gIGxvZy53YXJuKFwiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0XCIsIF9wb2ludHMsIGJvdW5kYXJ5Tm9kZSk7XG4gIGxldCBwb2ludHMgPSBbXTtcbiAgbGV0IGxhc3RQb2ludE91dHNpZGUgPSBfcG9pbnRzWzBdO1xuICBsZXQgaXNJbnNpZGUgPSBmYWxzZTtcbiAgX3BvaW50cy5mb3JFYWNoKChwb2ludDIpID0+IHtcbiAgICBsb2cuaW5mbyhcImFiYzg4IGNoZWNraW5nIHBvaW50XCIsIHBvaW50MiwgYm91bmRhcnlOb2RlKTtcbiAgICBpZiAoIW91dHNpZGVOb2RlKGJvdW5kYXJ5Tm9kZSwgcG9pbnQyKSAmJiAhaXNJbnNpZGUpIHtcbiAgICAgIGNvbnN0IGludGVyID0gaW50ZXJzZWN0aW9uKGJvdW5kYXJ5Tm9kZSwgbGFzdFBvaW50T3V0c2lkZSwgcG9pbnQyKTtcbiAgICAgIGxvZy5kZWJ1ZyhcImFiYzg4IGluc2lkZVwiLCBwb2ludDIsIGxhc3RQb2ludE91dHNpZGUsIGludGVyKTtcbiAgICAgIGxvZy5kZWJ1ZyhcImFiYzg4IGludGVyc2VjdGlvblwiLCBpbnRlciwgYm91bmRhcnlOb2RlKTtcbiAgICAgIGxldCBwb2ludFByZXNlbnQgPSBmYWxzZTtcbiAgICAgIHBvaW50cy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIHBvaW50UHJlc2VudCA9IHBvaW50UHJlc2VudCB8fCBwLnggPT09IGludGVyLnggJiYgcC55ID09PSBpbnRlci55O1xuICAgICAgfSk7XG4gICAgICBpZiAoIXBvaW50cy5zb21lKChlKSA9PiBlLnggPT09IGludGVyLnggJiYgZS55ID09PSBpbnRlci55KSkge1xuICAgICAgICBwb2ludHMucHVzaChpbnRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihcImFiYzg4IG5vIGludGVyc2VjdFwiLCBpbnRlciwgcG9pbnRzKTtcbiAgICAgIH1cbiAgICAgIGlzSW5zaWRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLndhcm4oXCJhYmM4OCBvdXRzaWRlXCIsIHBvaW50MiwgbGFzdFBvaW50T3V0c2lkZSk7XG4gICAgICBsYXN0UG9pbnRPdXRzaWRlID0gcG9pbnQyO1xuICAgICAgaWYgKCFpc0luc2lkZSkge1xuICAgICAgICBwb2ludHMucHVzaChwb2ludDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGxvZy5kZWJ1ZyhcInJldHVybmluZyBwb2ludHNcIiwgcG9pbnRzKTtcbiAgcmV0dXJuIHBvaW50cztcbn0sIFwiY3V0UGF0aEF0SW50ZXJzZWN0XCIpO1xuZnVuY3Rpb24gZXh0cmFjdENvcm5lclBvaW50cyhwb2ludHMpIHtcbiAgY29uc3QgY29ybmVyUG9pbnRzID0gW107XG4gIGNvbnN0IGNvcm5lclBvaW50UG9zaXRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IHByZXYgPSBwb2ludHNbaSAtIDFdO1xuICAgIGNvbnN0IGN1cnIgPSBwb2ludHNbaV07XG4gICAgY29uc3QgbmV4dCA9IHBvaW50c1tpICsgMV07XG4gICAgaWYgKHByZXYueCA9PT0gY3Vyci54ICYmIGN1cnIueSA9PT0gbmV4dC55ICYmIE1hdGguYWJzKGN1cnIueCAtIG5leHQueCkgPiA1ICYmIE1hdGguYWJzKGN1cnIueSAtIHByZXYueSkgPiA1KSB7XG4gICAgICBjb3JuZXJQb2ludHMucHVzaChjdXJyKTtcbiAgICAgIGNvcm5lclBvaW50UG9zaXRpb25zLnB1c2goaSk7XG4gICAgfSBlbHNlIGlmIChwcmV2LnkgPT09IGN1cnIueSAmJiBjdXJyLnggPT09IG5leHQueCAmJiBNYXRoLmFicyhjdXJyLnggLSBwcmV2LngpID4gNSAmJiBNYXRoLmFicyhjdXJyLnkgLSBuZXh0LnkpID4gNSkge1xuICAgICAgY29ybmVyUG9pbnRzLnB1c2goY3Vycik7XG4gICAgICBjb3JuZXJQb2ludFBvc2l0aW9ucy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjb3JuZXJQb2ludHMsIGNvcm5lclBvaW50UG9zaXRpb25zIH07XG59XG5fX25hbWUoZXh0cmFjdENvcm5lclBvaW50cywgXCJleHRyYWN0Q29ybmVyUG9pbnRzXCIpO1xudmFyIGZpbmRBZGphY2VudFBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb2ludEEsIHBvaW50QiwgZGlzdGFuY2UpIHtcbiAgY29uc3QgeERpZmYgPSBwb2ludEIueCAtIHBvaW50QS54O1xuICBjb25zdCB5RGlmZiA9IHBvaW50Qi55IC0gcG9pbnRBLnk7XG4gIGNvbnN0IGxlbmd0aCA9IE1hdGguc3FydCh4RGlmZiAqIHhEaWZmICsgeURpZmYgKiB5RGlmZik7XG4gIGNvbnN0IHJhdGlvID0gZGlzdGFuY2UgLyBsZW5ndGg7XG4gIHJldHVybiB7IHg6IHBvaW50Qi54IC0gcmF0aW8gKiB4RGlmZiwgeTogcG9pbnRCLnkgLSByYXRpbyAqIHlEaWZmIH07XG59LCBcImZpbmRBZGphY2VudFBvaW50XCIpO1xudmFyIGZpeENvcm5lcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGxpbmVEYXRhKSB7XG4gIGNvbnN0IHsgY29ybmVyUG9pbnRQb3NpdGlvbnMgfSA9IGV4dHJhY3RDb3JuZXJQb2ludHMobGluZURhdGEpO1xuICBjb25zdCBuZXdMaW5lRGF0YSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvcm5lclBvaW50UG9zaXRpb25zLmluY2x1ZGVzKGkpKSB7XG4gICAgICBjb25zdCBwcmV2UG9pbnQgPSBsaW5lRGF0YVtpIC0gMV07XG4gICAgICBjb25zdCBuZXh0UG9pbnQgPSBsaW5lRGF0YVtpICsgMV07XG4gICAgICBjb25zdCBjb3JuZXJQb2ludCA9IGxpbmVEYXRhW2ldO1xuICAgICAgY29uc3QgbmV3UHJldlBvaW50ID0gZmluZEFkamFjZW50UG9pbnQocHJldlBvaW50LCBjb3JuZXJQb2ludCwgNSk7XG4gICAgICBjb25zdCBuZXdOZXh0UG9pbnQgPSBmaW5kQWRqYWNlbnRQb2ludChuZXh0UG9pbnQsIGNvcm5lclBvaW50LCA1KTtcbiAgICAgIGNvbnN0IHhEaWZmID0gbmV3TmV4dFBvaW50LnggLSBuZXdQcmV2UG9pbnQueDtcbiAgICAgIGNvbnN0IHlEaWZmID0gbmV3TmV4dFBvaW50LnkgLSBuZXdQcmV2UG9pbnQueTtcbiAgICAgIG5ld0xpbmVEYXRhLnB1c2gobmV3UHJldlBvaW50KTtcbiAgICAgIGNvbnN0IGEgPSBNYXRoLnNxcnQoMikgKiAyO1xuICAgICAgbGV0IG5ld0Nvcm5lclBvaW50ID0geyB4OiBjb3JuZXJQb2ludC54LCB5OiBjb3JuZXJQb2ludC55IH07XG4gICAgICBpZiAoTWF0aC5hYnMobmV4dFBvaW50LnggLSBwcmV2UG9pbnQueCkgPiAxMCAmJiBNYXRoLmFicyhuZXh0UG9pbnQueSAtIHByZXZQb2ludC55KSA+PSAxMCkge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgXCJDb3JuZXIgcG9pbnQgZml4aW5nXCIsXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnggLSBwcmV2UG9pbnQueCksXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnkgLSBwcmV2UG9pbnQueSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgciA9IDU7XG4gICAgICAgIGlmIChjb3JuZXJQb2ludC54ID09PSBuZXdQcmV2UG9pbnQueCkge1xuICAgICAgICAgIG5ld0Nvcm5lclBvaW50ID0ge1xuICAgICAgICAgICAgeDogeERpZmYgPCAwID8gbmV3UHJldlBvaW50LnggLSByICsgYSA6IG5ld1ByZXZQb2ludC54ICsgciAtIGEsXG4gICAgICAgICAgICB5OiB5RGlmZiA8IDAgPyBuZXdQcmV2UG9pbnQueSAtIGEgOiBuZXdQcmV2UG9pbnQueSArIGFcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Nvcm5lclBvaW50ID0ge1xuICAgICAgICAgICAgeDogeERpZmYgPCAwID8gbmV3UHJldlBvaW50LnggLSBhIDogbmV3UHJldlBvaW50LnggKyBhLFxuICAgICAgICAgICAgeTogeURpZmYgPCAwID8gbmV3UHJldlBvaW50LnkgLSByICsgYSA6IG5ld1ByZXZQb2ludC55ICsgciAtIGFcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgXCJDb3JuZXIgcG9pbnQgc2tpcHBpbmcgZml4aW5nXCIsXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnggLSBwcmV2UG9pbnQueCksXG4gICAgICAgICAgTWF0aC5hYnMobmV4dFBvaW50LnkgLSBwcmV2UG9pbnQueSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5ld0xpbmVEYXRhLnB1c2gobmV3Q29ybmVyUG9pbnQsIG5ld05leHRQb2ludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xpbmVEYXRhLnB1c2gobGluZURhdGFbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3TGluZURhdGE7XG59LCBcImZpeENvcm5lcnNcIik7XG52YXIgaW5zZXJ0RWRnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgZWRnZSwgY2x1c3RlckRiLCBkaWFncmFtVHlwZSwgc3RhcnROb2RlLCBlbmROb2RlLCBpZCkge1xuICBjb25zdCB7IGhhbmREcmF3blNlZWQgfSA9IGdldENvbmZpZygpO1xuICBsZXQgcG9pbnRzID0gZWRnZS5wb2ludHM7XG4gIGxldCBwb2ludHNIYXNDaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IHRhaWwgPSBzdGFydE5vZGU7XG4gIHZhciBoZWFkID0gZW5kTm9kZTtcbiAgaWYgKGhlYWQuaW50ZXJzZWN0ICYmIHRhaWwuaW50ZXJzZWN0KSB7XG4gICAgcG9pbnRzID0gcG9pbnRzLnNsaWNlKDEsIGVkZ2UucG9pbnRzLmxlbmd0aCAtIDEpO1xuICAgIHBvaW50cy51bnNoaWZ0KHRhaWwuaW50ZXJzZWN0KHBvaW50c1swXSkpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIFwiTGFzdCBwb2ludCBBUEExMlwiLFxuICAgICAgZWRnZS5zdGFydCxcbiAgICAgIFwiLS0+XCIsXG4gICAgICBlZGdlLmVuZCxcbiAgICAgIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sXG4gICAgICBoZWFkLFxuICAgICAgaGVhZC5pbnRlcnNlY3QocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSlcbiAgICApO1xuICAgIHBvaW50cy5wdXNoKGhlYWQuaW50ZXJzZWN0KHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pKTtcbiAgfVxuICBpZiAoZWRnZS50b0NsdXN0ZXIpIHtcbiAgICBsb2cuaW5mbyhcInRvIGNsdXN0ZXIgYWJjODhcIiwgY2x1c3RlckRiLmdldChlZGdlLnRvQ2x1c3RlcikpO1xuICAgIHBvaW50cyA9IGN1dFBhdGhBdEludGVyc2VjdChlZGdlLnBvaW50cywgY2x1c3RlckRiLmdldChlZGdlLnRvQ2x1c3Rlcikubm9kZSk7XG4gICAgcG9pbnRzSGFzQ2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgaWYgKGVkZ2UuZnJvbUNsdXN0ZXIpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcImZyb20gY2x1c3RlciBhYmM4OFwiLFxuICAgICAgY2x1c3RlckRiLmdldChlZGdlLmZyb21DbHVzdGVyKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHBvaW50cywgbnVsbCwgMilcbiAgICApO1xuICAgIHBvaW50cyA9IGN1dFBhdGhBdEludGVyc2VjdChwb2ludHMucmV2ZXJzZSgpLCBjbHVzdGVyRGIuZ2V0KGVkZ2UuZnJvbUNsdXN0ZXIpLm5vZGUpLnJldmVyc2UoKTtcbiAgICBwb2ludHNIYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICBsZXQgbGluZURhdGEgPSBwb2ludHMuZmlsdGVyKChwKSA9PiAhTnVtYmVyLmlzTmFOKHAueSkpO1xuICBsaW5lRGF0YSA9IGZpeENvcm5lcnMobGluZURhdGEpO1xuICBsZXQgbGFzdFBvaW50ID0gbGluZURhdGFbbGluZURhdGEubGVuZ3RoIC0gMV07XG4gIGlmIChsaW5lRGF0YS5sZW5ndGggPiAxKSB7XG4gICAgbGFzdFBvaW50ID0gbGluZURhdGFbbGluZURhdGEubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgc2Vjb25kTGFzdFBvaW50ID0gbGluZURhdGFbbGluZURhdGEubGVuZ3RoIC0gMl07XG4gICAgY29uc3QgZGlmZlggPSAobGFzdFBvaW50LnggLSBzZWNvbmRMYXN0UG9pbnQueCkgLyAyO1xuICAgIGNvbnN0IGRpZmZZID0gKGxhc3RQb2ludC55IC0gc2Vjb25kTGFzdFBvaW50LnkpIC8gMjtcbiAgICBjb25zdCBtaWRQb2ludCA9IHsgeDogc2Vjb25kTGFzdFBvaW50LnggKyBkaWZmWCwgeTogc2Vjb25kTGFzdFBvaW50LnkgKyBkaWZmWSB9O1xuICAgIGxpbmVEYXRhLnNwbGljZSgtMSwgMCwgbWlkUG9pbnQpO1xuICB9XG4gIGxldCBjdXJ2ZSA9IGN1cnZlQmFzaXM7XG4gIGlmIChlZGdlLmN1cnZlKSB7XG4gICAgY3VydmUgPSBlZGdlLmN1cnZlO1xuICB9XG4gIGNvbnN0IHsgeCwgeSB9ID0gZ2V0TGluZUZ1bmN0aW9uc1dpdGhPZmZzZXQoZWRnZSk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KHgpLnkoeSkuY3VydmUoY3VydmUpO1xuICBsZXQgc3Ryb2tlQ2xhc3NlcztcbiAgc3dpdGNoIChlZGdlLnRoaWNrbmVzcykge1xuICAgIGNhc2UgXCJub3JtYWxcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcImVkZ2UtdGhpY2tuZXNzLW5vcm1hbFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRoaWNrXCI6XG4gICAgICBzdHJva2VDbGFzc2VzID0gXCJlZGdlLXRoaWNrbmVzcy10aGlja1wiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImludmlzaWJsZVwiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3MtaW52aXNpYmxlXCI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3Mtbm9ybWFsXCI7XG4gIH1cbiAgc3dpdGNoIChlZGdlLnBhdHRlcm4pIHtcbiAgICBjYXNlIFwic29saWRcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLXNvbGlkXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZG90dGVkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1kb3R0ZWRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkYXNoZWRcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLWRhc2hlZFwiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0cm9rZUNsYXNzZXMgKz0gXCIgZWRnZS1wYXR0ZXJuLXNvbGlkXCI7XG4gIH1cbiAgbGV0IHN2Z1BhdGg7XG4gIGxldCBsaW5lUGF0aCA9IGxpbmVGdW5jdGlvbihsaW5lRGF0YSk7XG4gIGNvbnN0IGVkZ2VTdHlsZXMgPSBBcnJheS5pc0FycmF5KGVkZ2Uuc3R5bGUpID8gZWRnZS5zdHlsZSA6IFtlZGdlLnN0eWxlXTtcbiAgaWYgKGVkZ2UubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gyLnN2ZyhlbGVtKTtcbiAgICBPYmplY3QuYXNzaWduKFtdLCBsaW5lRGF0YSk7XG4gICAgY29uc3Qgc3ZnUGF0aE5vZGUgPSByYy5wYXRoKGxpbmVQYXRoLCB7XG4gICAgICByb3VnaG5lc3M6IDAuMyxcbiAgICAgIHNlZWQ6IGhhbmREcmF3blNlZWRcbiAgICB9KTtcbiAgICBzdHJva2VDbGFzc2VzICs9IFwiIHRyYW5zaXRpb25cIjtcbiAgICBzdmdQYXRoID0gc2VsZWN0MyhzdmdQYXRoTm9kZSkuc2VsZWN0KFwicGF0aFwiKS5hdHRyKFwiaWRcIiwgZWRnZS5pZCkuYXR0cihcImNsYXNzXCIsIFwiIFwiICsgc3Ryb2tlQ2xhc3NlcyArIChlZGdlLmNsYXNzZXMgPyBcIiBcIiArIGVkZ2UuY2xhc3NlcyA6IFwiXCIpKS5hdHRyKFwic3R5bGVcIiwgZWRnZVN0eWxlcyA/IGVkZ2VTdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MgKyBcIjtcIiArIHN0eWxlLCBcIlwiKSA6IFwiXCIpO1xuICAgIGxldCBkID0gc3ZnUGF0aC5hdHRyKFwiZFwiKTtcbiAgICBzdmdQYXRoLmF0dHIoXCJkXCIsIGQpO1xuICAgIGVsZW0ubm9kZSgpLmFwcGVuZENoaWxkKHN2Z1BhdGgubm9kZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdQYXRoID0gZWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIGxpbmVQYXRoKS5hdHRyKFwiaWRcIiwgZWRnZS5pZCkuYXR0cihcImNsYXNzXCIsIFwiIFwiICsgc3Ryb2tlQ2xhc3NlcyArIChlZGdlLmNsYXNzZXMgPyBcIiBcIiArIGVkZ2UuY2xhc3NlcyA6IFwiXCIpKS5hdHRyKFwic3R5bGVcIiwgZWRnZVN0eWxlcyA/IGVkZ2VTdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MgKyBcIjtcIiArIHN0eWxlLCBcIlwiKSA6IFwiXCIpO1xuICB9XG4gIGxldCB1cmwgPSBcIlwiO1xuICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGUgfHwgZ2V0Q29uZmlnKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIikucmVwbGFjZSgvXFwpL2csIFwiXFxcXClcIik7XG4gIH1cbiAgbG9nLmluZm8oXCJhcnJvd1R5cGVTdGFydFwiLCBlZGdlLmFycm93VHlwZVN0YXJ0KTtcbiAgbG9nLmluZm8oXCJhcnJvd1R5cGVFbmRcIiwgZWRnZS5hcnJvd1R5cGVFbmQpO1xuICBhZGRFZGdlTWFya2VycyhzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIGxldCBwYXRocyA9IHt9O1xuICBpZiAocG9pbnRzSGFzQ2hhbmdlZCkge1xuICAgIHBhdGhzLnVwZGF0ZWRQYXRoID0gcG9pbnRzO1xuICB9XG4gIHBhdGhzLm9yaWdpbmFsUGF0aCA9IGVkZ2UucG9pbnRzO1xuICByZXR1cm4gcGF0aHM7XG59LCBcImluc2VydEVkZ2VcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvbWFya2Vycy5qc1xudmFyIGluc2VydE1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCBtYXJrZXJBcnJheSwgdHlwZSwgaWQpID0+IHtcbiAgbWFya2VyQXJyYXkuZm9yRWFjaCgobWFya2VyTmFtZSkgPT4ge1xuICAgIG1hcmtlcnNbbWFya2VyTmFtZV0oZWxlbSwgdHlwZSwgaWQpO1xuICB9KTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBleHRlbnNpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBsb2cudHJhY2UoXCJNYWtpbmcgbWFya2VycyBmb3IgXCIsIGlkKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1leHRlbnNpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWV4dGVuc2lvbkVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xufSwgXCJleHRlbnNpb25cIik7XG52YXIgY29tcG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNvbXBvc2l0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBjb21wb3NpdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiY29tcG9zaXRpb25cIik7XG52YXIgYWdncmVnYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGFnZ3JlZ2F0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBhZ2dyZWdhdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiYWdncmVnYXRpb25cIik7XG52YXIgZGVwZW5kZW5jeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgNikuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1kZXBlbmRlbmN5RW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59LCBcImRlcGVuZGVuY3lcIik7XG52YXIgbG9sbGlwb3AgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWxvbGxpcG9wU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGxvbGxpcG9wIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIikuYXR0cihcImN4XCIsIDcpLmF0dHIoXCJjeVwiLCA3KS5hdHRyKFwiclwiLCA2KTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1sb2xsaXBvcEVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgbG9sbGlwb3AgXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxKS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTkwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpLmF0dHIoXCJjeFwiLCA3KS5hdHRyKFwiY3lcIiwgNykuYXR0cihcInJcIiwgNik7XG59LCBcImxvbGxpcG9wXCIpO1xudmFyIHBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItcG9pbnRFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgNSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDgpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCAwIEwgMTAgNSBMIDAgMTAgelwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1wb2ludFN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIDQuNSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDgpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHpcIikuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dNYXJrZXJQYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIDEpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEsMFwiKTtcbn0sIFwicG9pbnRcIik7XG52YXIgY2lyY2xlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItY2lyY2xlRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIDExKS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgXCI1XCIpLmF0dHIoXCJjeVwiLCBcIjVcIikuYXR0cihcInJcIiwgXCI1XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNpcmNsZVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDEwIDEwXCIpLmF0dHIoXCJyZWZYXCIsIC0xKS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgXCI1XCIpLmF0dHIoXCJjeVwiLCBcIjVcIikuYXR0cihcInJcIiwgXCI1XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59LCBcImNpcmNsZVwiKTtcbnZhciBjcm9zcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNyb3NzRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBjcm9zcyBcIiArIHR5cGUpLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDExIDExXCIpLmF0dHIoXCJyZWZYXCIsIDEyKS5hdHRyKFwicmVmWVwiLCA1LjIpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxMSkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxMSkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDlcIikuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dNYXJrZXJQYXRoXCIpLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIDIpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjEsMFwiKTtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItY3Jvc3NTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY3Jvc3MgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMSAxMVwiKS5hdHRyKFwicmVmWFwiLCAtMSkuYXR0cihcInJlZllcIiwgNS4yKS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAyKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59LCBcImNyb3NzXCIpO1xudmFyIGJhcmIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWJhcmJFbmRcIikuYXR0cihcInJlZlhcIiwgMTkpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxNCkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59LCBcImJhcmJcIik7XG52YXIgbWFya2VycyA9IHtcbiAgZXh0ZW5zaW9uLFxuICBjb21wb3NpdGlvbixcbiAgYWdncmVnYXRpb24sXG4gIGRlcGVuZGVuY3ksXG4gIGxvbGxpcG9wLFxuICBwb2ludCxcbiAgY2lyY2xlLFxuICBjcm9zcyxcbiAgYmFyYlxufTtcbnZhciBtYXJrZXJzX2RlZmF1bHQgPSBpbnNlcnRNYXJrZXJzO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy91dGlsLmpzXG5pbXBvcnQgeyBzZWxlY3QgYXMgc2VsZWN0NCB9IGZyb20gXCJkM1wiO1xudmFyIGxhYmVsSGVscGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlLCBfY2xhc3NlcykgPT4ge1xuICBsZXQgY3NzQ2xhc3NlcztcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IG5vZGUudXNlSHRtbExhYmVscyB8fCBldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGlmICghX2NsYXNzZXMpIHtcbiAgICBjc3NDbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjc3NDbGFzc2VzID0gX2NsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY3NzQ2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGxhYmVsRWwgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLmF0dHIoXCJzdHlsZVwiLCBub2RlLmxhYmVsU3R5bGUpO1xuICBsZXQgbGFiZWw7XG4gIGlmIChub2RlLmxhYmVsID09PSB2b2lkIDApIHtcbiAgICBsYWJlbCA9IFwiXCI7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwgPSB0eXBlb2Ygbm9kZS5sYWJlbCA9PT0gXCJzdHJpbmdcIiA/IG5vZGUubGFiZWwgOiBub2RlLmxhYmVsWzBdO1xuICB9XG4gIGxldCB0ZXh0O1xuICB0ZXh0ID0gYXdhaXQgY3JlYXRlVGV4dChsYWJlbEVsLCBzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWwpLCBnZXRDb25maWcoKSksIHtcbiAgICB1c2VIdG1sTGFiZWxzLFxuICAgIHdpZHRoOiBub2RlLndpZHRoIHx8IGdldENvbmZpZygpLmZsb3djaGFydC53cmFwcGluZ1dpZHRoLFxuICAgIGNzc0NsYXNzZXM6IFwibWFya2Rvd24tbm9kZS1sYWJlbFwiLFxuICAgIHN0eWxlOiBub2RlLmxhYmVsU3R5bGVcbiAgfSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3Q0KHRleHQpO1xuICAgIGNvbnN0IGltYWdlcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcImltZ1wiKTtcbiAgICBpZiAoaW1hZ2VzKSB7XG4gICAgICBjb25zdCBub0ltZ1RleHQgPSBsYWJlbC5yZXBsYWNlKC88aW1nW14+XSo+L2csIFwiXCIpLnRyaW0oKSA9PT0gXCJcIjtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uaW1hZ2VzXS5tYXAoXG4gICAgICAgICAgKGltZykgPT4gbmV3IFByb21pc2UoKHJlcykgPT4ge1xuICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXBJbWFnZSgpIHtcbiAgICAgICAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbiAgICAgICAgICAgICAgaW1nLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcImNvbHVtblwiO1xuICAgICAgICAgICAgICBpZiAobm9JbWdUZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUZvbnRTaXplID0gZ2V0Q29uZmlnKCkuZm9udFNpemUgPyBnZXRDb25maWcoKS5mb250U2l6ZSA6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVubGFyZ2luZ0ZhY3RvciA9IDU7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChib2R5Rm9udFNpemUsIDEwKSAqIGVubGFyZ2luZ0ZhY3RvciArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWluV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMoaW1nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fbmFtZShzZXR1cEltYWdlLCBcInNldHVwSW1hZ2VcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGltZy5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHNldHVwSW1hZ2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgbGFiZWxFbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfSBlbHNlIHtcbiAgICBsYWJlbEVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCwgXCIgKyAtYmJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICB9XG4gIGlmIChub2RlLmNlbnRlckxhYmVsKSB7XG4gICAgbGFiZWxFbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICBsYWJlbEVsLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIHJldHVybiB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZywgbGFiZWw6IGxhYmVsRWwgfTtcbn0sIFwibGFiZWxIZWxwZXJcIik7XG52YXIgdXBkYXRlTm9kZUJvdW5kcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUsIGVsZW1lbnQpID0+IHtcbiAgY29uc3QgYmJveCA9IGVsZW1lbnQubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IGJib3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gYmJveC5oZWlnaHQ7XG59LCBcInVwZGF0ZU5vZGVCb3VuZHNcIik7XG52YXIgZ2V0Tm9kZUNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBleHRyYSkgPT4gKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIiA/IFwicm91Z2gtbm9kZVwiIDogXCJub2RlXCIpICsgXCIgXCIgKyBub2RlLmNzc0NsYXNzZXMgKyBcIiBcIiArIChleHRyYSB8fCBcIlwiKSwgXCJnZXROb2RlQ2xhc3Nlc1wiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9pbnRlcnNlY3QvaW50ZXJzZWN0LW5vZGUuanNcbmZ1bmN0aW9uIGludGVyc2VjdE5vZGUobm9kZSwgcG9pbnQyKSB7XG4gIHJldHVybiBub2RlLmludGVyc2VjdChwb2ludDIpO1xufVxuX19uYW1lKGludGVyc2VjdE5vZGUsIFwiaW50ZXJzZWN0Tm9kZVwiKTtcbnZhciBpbnRlcnNlY3Rfbm9kZV9kZWZhdWx0ID0gaW50ZXJzZWN0Tm9kZTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9pbnRlcnNlY3QvaW50ZXJzZWN0LWVsbGlwc2UuanNcbmZ1bmN0aW9uIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ5LCBwb2ludDIpIHtcbiAgdmFyIGN4ID0gbm9kZS54O1xuICB2YXIgY3kgPSBub2RlLnk7XG4gIHZhciBweCA9IGN4IC0gcG9pbnQyLng7XG4gIHZhciBweSA9IGN5IC0gcG9pbnQyLnk7XG4gIHZhciBkZXQgPSBNYXRoLnNxcnQocnggKiByeCAqIHB5ICogcHkgKyByeSAqIHJ5ICogcHggKiBweCk7XG4gIHZhciBkeCA9IE1hdGguYWJzKHJ4ICogcnkgKiBweCAvIGRldCk7XG4gIGlmIChwb2ludDIueCA8IGN4KSB7XG4gICAgZHggPSAtZHg7XG4gIH1cbiAgdmFyIGR5ID0gTWF0aC5hYnMocnggKiByeSAqIHB5IC8gZGV0KTtcbiAgaWYgKHBvaW50Mi55IDwgY3kpIHtcbiAgICBkeSA9IC1keTtcbiAgfVxuICByZXR1cm4geyB4OiBjeCArIGR4LCB5OiBjeSArIGR5IH07XG59XG5fX25hbWUoaW50ZXJzZWN0RWxsaXBzZSwgXCJpbnRlcnNlY3RFbGxpcHNlXCIpO1xudmFyIGludGVyc2VjdF9lbGxpcHNlX2RlZmF1bHQgPSBpbnRlcnNlY3RFbGxpcHNlO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2ludGVyc2VjdC9pbnRlcnNlY3QtY2lyY2xlLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3RDaXJjbGUobm9kZSwgcngsIHBvaW50Mikge1xuICByZXR1cm4gaW50ZXJzZWN0X2VsbGlwc2VfZGVmYXVsdChub2RlLCByeCwgcngsIHBvaW50Mik7XG59XG5fX25hbWUoaW50ZXJzZWN0Q2lyY2xlLCBcImludGVyc2VjdENpcmNsZVwiKTtcbnZhciBpbnRlcnNlY3RfY2lyY2xlX2RlZmF1bHQgPSBpbnRlcnNlY3RDaXJjbGU7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvaW50ZXJzZWN0L2ludGVyc2VjdC1saW5lLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3RMaW5lKHAxLCBwMiwgcTEsIHEyKSB7XG4gIHZhciBhMSwgYTIsIGIxLCBiMiwgYzEsIGMyO1xuICB2YXIgcjEsIHIyLCByMywgcjQ7XG4gIHZhciBkZW5vbSwgb2Zmc2V0LCBudW07XG4gIHZhciB4LCB5O1xuICBhMSA9IHAyLnkgLSBwMS55O1xuICBiMSA9IHAxLnggLSBwMi54O1xuICBjMSA9IHAyLnggKiBwMS55IC0gcDEueCAqIHAyLnk7XG4gIHIzID0gYTEgKiBxMS54ICsgYjEgKiBxMS55ICsgYzE7XG4gIHI0ID0gYTEgKiBxMi54ICsgYjEgKiBxMi55ICsgYzE7XG4gIGlmIChyMyAhPT0gMCAmJiByNCAhPT0gMCAmJiBzYW1lU2lnbihyMywgcjQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGEyID0gcTIueSAtIHExLnk7XG4gIGIyID0gcTEueCAtIHEyLng7XG4gIGMyID0gcTIueCAqIHExLnkgLSBxMS54ICogcTIueTtcbiAgcjEgPSBhMiAqIHAxLnggKyBiMiAqIHAxLnkgKyBjMjtcbiAgcjIgPSBhMiAqIHAyLnggKyBiMiAqIHAyLnkgKyBjMjtcbiAgaWYgKHIxICE9PSAwICYmIHIyICE9PSAwICYmIHNhbWVTaWduKHIxLCByMikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZGVub20gPSBhMSAqIGIyIC0gYTIgKiBiMTtcbiAgaWYgKGRlbm9tID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG9mZnNldCA9IE1hdGguYWJzKGRlbm9tIC8gMik7XG4gIG51bSA9IGIxICogYzIgLSBiMiAqIGMxO1xuICB4ID0gbnVtIDwgMCA/IChudW0gLSBvZmZzZXQpIC8gZGVub20gOiAobnVtICsgb2Zmc2V0KSAvIGRlbm9tO1xuICBudW0gPSBhMiAqIGMxIC0gYTEgKiBjMjtcbiAgeSA9IG51bSA8IDAgPyAobnVtIC0gb2Zmc2V0KSAvIGRlbm9tIDogKG51bSArIG9mZnNldCkgLyBkZW5vbTtcbiAgcmV0dXJuIHsgeCwgeSB9O1xufVxuX19uYW1lKGludGVyc2VjdExpbmUsIFwiaW50ZXJzZWN0TGluZVwiKTtcbmZ1bmN0aW9uIHNhbWVTaWduKHIxLCByMikge1xuICByZXR1cm4gcjEgKiByMiA+IDA7XG59XG5fX25hbWUoc2FtZVNpZ24sIFwic2FtZVNpZ25cIik7XG52YXIgaW50ZXJzZWN0X2xpbmVfZGVmYXVsdCA9IGludGVyc2VjdExpbmU7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvaW50ZXJzZWN0L2ludGVyc2VjdC1wb2x5Z29uLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3RQb2x5Z29uKG5vZGUsIHBvbHlQb2ludHMsIHBvaW50Mikge1xuICBsZXQgeDEgPSBub2RlLng7XG4gIGxldCB5MSA9IG5vZGUueTtcbiAgbGV0IGludGVyc2VjdGlvbnMgPSBbXTtcbiAgbGV0IG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIGxldCBtaW5ZID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBpZiAodHlwZW9mIHBvbHlQb2ludHMuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcG9seVBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgZW50cnkueCk7XG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZW50cnkueSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvbHlQb2ludHMueCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvbHlQb2ludHMueSk7XG4gIH1cbiAgbGV0IGxlZnQgPSB4MSAtIG5vZGUud2lkdGggLyAyIC0gbWluWDtcbiAgbGV0IHRvcCA9IHkxIC0gbm9kZS5oZWlnaHQgLyAyIC0gbWluWTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5UG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHAxID0gcG9seVBvaW50c1tpXTtcbiAgICBsZXQgcDIgPSBwb2x5UG9pbnRzW2kgPCBwb2x5UG9pbnRzLmxlbmd0aCAtIDEgPyBpICsgMSA6IDBdO1xuICAgIGxldCBpbnRlcnNlY3QgPSBpbnRlcnNlY3RfbGluZV9kZWZhdWx0KFxuICAgICAgbm9kZSxcbiAgICAgIHBvaW50MixcbiAgICAgIHsgeDogbGVmdCArIHAxLngsIHk6IHRvcCArIHAxLnkgfSxcbiAgICAgIHsgeDogbGVmdCArIHAyLngsIHk6IHRvcCArIHAyLnkgfVxuICAgICk7XG4gICAgaWYgKGludGVyc2VjdCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG4gIGlmICghaW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgaW50ZXJzZWN0aW9ucy5zb3J0KGZ1bmN0aW9uKHAsIHEpIHtcbiAgICAgIGxldCBwZHggPSBwLnggLSBwb2ludDIueDtcbiAgICAgIGxldCBwZHkgPSBwLnkgLSBwb2ludDIueTtcbiAgICAgIGxldCBkaXN0cCA9IE1hdGguc3FydChwZHggKiBwZHggKyBwZHkgKiBwZHkpO1xuICAgICAgbGV0IHFkeCA9IHEueCAtIHBvaW50Mi54O1xuICAgICAgbGV0IHFkeSA9IHEueSAtIHBvaW50Mi55O1xuICAgICAgbGV0IGRpc3RxID0gTWF0aC5zcXJ0KHFkeCAqIHFkeCArIHFkeSAqIHFkeSk7XG4gICAgICByZXR1cm4gZGlzdHAgPCBkaXN0cSA/IC0xIDogZGlzdHAgPT09IGRpc3RxID8gMCA6IDE7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGludGVyc2VjdGlvbnNbMF07XG59XG5fX25hbWUoaW50ZXJzZWN0UG9seWdvbiwgXCJpbnRlcnNlY3RQb2x5Z29uXCIpO1xudmFyIGludGVyc2VjdF9wb2x5Z29uX2RlZmF1bHQgPSBpbnRlcnNlY3RQb2x5Z29uO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL2ludGVyc2VjdC9pbmRleC5qc1xudmFyIGludGVyc2VjdF9kZWZhdWx0ID0ge1xuICBub2RlOiBpbnRlcnNlY3Rfbm9kZV9kZWZhdWx0LFxuICBjaXJjbGU6IGludGVyc2VjdF9jaXJjbGVfZGVmYXVsdCxcbiAgZWxsaXBzZTogaW50ZXJzZWN0X2VsbGlwc2VfZGVmYXVsdCxcbiAgcG9seWdvbjogaW50ZXJzZWN0X3BvbHlnb25fZGVmYXVsdCxcbiAgcmVjdDogaW50ZXJzZWN0X3JlY3RfZGVmYXVsdFxufTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvZHJhd1JlY3QudHNcbmltcG9ydCByb3VnaDMgZnJvbSBcInJvdWdoanNcIjtcbnZhciBkcmF3UmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzIH0gPSBzdHlsZXMyU3RyaW5nKG5vZGUpO1xuICBub2RlLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlcztcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHRvdGFsV2lkdGggPSBNYXRoLm1heChiYm94LndpZHRoICsgb3B0aW9ucy5sYWJlbFBhZGRpbmdYICogMiwgbm9kZT8ud2lkdGggfHwgMCk7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gTWF0aC5tYXgoYmJveC5oZWlnaHQgKyBvcHRpb25zLmxhYmVsUGFkZGluZ1kgKiAyLCBub2RlPy5oZWlnaHQgfHwgMCk7XG4gIGNvbnN0IHggPSAtdG90YWxXaWR0aCAvIDI7XG4gIGNvbnN0IHkgPSAtdG90YWxIZWlnaHQgLyAyO1xuICBsZXQgcmVjdDI7XG4gIGxldCB7IHJ4LCByeSB9ID0gbm9kZTtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChvcHRpb25zPy5yeCAmJiBvcHRpb25zLnJ5KSB7XG4gICAgcnggPSBvcHRpb25zLnJ4O1xuICAgIHJ5ID0gb3B0aW9ucy5yeTtcbiAgfVxuICBpZiAobm9kZS5sb29rID09PSBcImhhbmREcmF3blwiKSB7XG4gICAgY29uc3QgcmMgPSByb3VnaDMuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zMiA9IHVzZXJOb2RlT3ZlcnJpZGVzKG5vZGUsIHt9KTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByeCB8fCByeSA/IHJjLnBhdGgoY3JlYXRlUm91bmRlZFJlY3RQYXRoRCh4LCB5LCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwgcnggfHwgMCksIG9wdGlvbnMyKSA6IHJjLnJlY3RhbmdsZSh4LCB5LCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwgb3B0aW9uczIpO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJiYXNpYyBsYWJlbC1jb250YWluZXJcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpLmF0dHIoXCJyeFwiLCByeCkuYXR0cihcImRhdGEtaWRcIiwgXCJhYmNcIikuYXR0cihcImRhdGEtZXRcIiwgXCJub2RlXCIpLmF0dHIoXCJyeVwiLCByeSkuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiZHJhd1JlY3RcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3N0YXRlLnRzXG52YXIgc3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICByeDogNSxcbiAgICByeTogNSxcbiAgICBjbGFzc2VzOiBcImZsb3djaGFydC1ub2RlXCJcbiAgfTtcbiAgcmV0dXJuIGRyYXdSZWN0KHBhcmVudCwgbm9kZSwgb3B0aW9ucyk7XG59LCBcInN0YXRlXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9yb3VuZGVkUmVjdC50c1xudmFyIHJvdW5kZWRSZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgcng6IDUsXG4gICAgcnk6IDUsXG4gICAgY2xhc3NlczogXCJcIixcbiAgICBsYWJlbFBhZGRpbmdYOiAobm9kZT8ucGFkZGluZyB8fCAwKSAqIDEsXG4gICAgbGFiZWxQYWRkaW5nWTogKG5vZGU/LnBhZGRpbmcgfHwgMCkgKiAxXG4gIH07XG4gIHJldHVybiBkcmF3UmVjdChwYXJlbnQsIG5vZGUsIG9wdGlvbnMpO1xufSwgXCJyb3VuZGVkUmVjdFwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvc3F1YXJlUmVjdC50c1xudmFyIHNxdWFyZVJlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgcng6IDAsXG4gICAgcnk6IDAsXG4gICAgY2xhc3NlczogXCJcIixcbiAgICBsYWJlbFBhZGRpbmdYOiAobm9kZT8ucGFkZGluZyB8fCAwKSAqIDIsXG4gICAgbGFiZWxQYWRkaW5nWTogKG5vZGU/LnBhZGRpbmcgfHwgMCkgKiAxXG4gIH07XG4gIHJldHVybiBkcmF3UmVjdChwYXJlbnQsIG5vZGUsIG9wdGlvbnMpO1xufSwgXCJzcXVhcmVSZWN0XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9zdGF0ZVN0YXJ0LnRzXG5pbXBvcnQgcm91Z2g0IGZyb20gXCJyb3VnaGpzXCI7XG52YXIgc3RhdGVTdGFydCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBsaW5lQ29sb3IgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdFwiKS5hdHRyKFwiaWRcIiwgbm9kZS5kb21JZCB8fCBub2RlLmlkKTtcbiAgbGV0IGNpcmNsZTM7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoNC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLmNpcmNsZSgwLCAwLCAxNCwgc29saWRTdGF0ZUZpbGwobGluZUNvbG9yKSk7XG4gICAgY2lyY2xlMyA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGNpcmNsZTMgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIH1cbiAgY2lyY2xlMy5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTMpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgNywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJzdGF0ZVN0YXJ0XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9zdGF0ZUVuZC50c1xuaW1wb3J0IHJvdWdoNSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIHN0YXRlRW5kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgdGhlbWVWYXJpYWJsZXMgfSA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IGxpbmVDb2xvciB9ID0gdGhlbWVWYXJpYWJsZXM7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZSBkZWZhdWx0XCIpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBsZXQgY2lyY2xlMztcbiAgbGV0IGlubmVyQ2lyY2xlO1xuICBpZiAobm9kZS5sb29rID09PSBcImhhbmREcmF3blwiKSB7XG4gICAgY29uc3QgcmMgPSByb3VnaDUuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5jaXJjbGUoMCwgMCwgMTQsIHsgLi4uc29saWRTdGF0ZUZpbGwobGluZUNvbG9yKSwgcm91Z2huZXNzOiAwLjUgfSk7XG4gICAgY29uc3Qgcm91Z2hJbm5lck5vZGUgPSByYy5jaXJjbGUoMCwgMCwgNSwgeyAuLi5zb2xpZFN0YXRlRmlsbChsaW5lQ29sb3IpLCBmaWxsU3R5bGU6IFwic29saWRcIiB9KTtcbiAgICBjaXJjbGUzID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSk7XG4gICAgaW5uZXJDaXJjbGUgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hJbm5lck5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGlubmVyQ2lyY2xlID0gc2hhcGVTdmcuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNpcmNsZTMgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgY2lyY2xlMy5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICAgIGlubmVyQ2lyY2xlLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLWVuZFwiKS5hdHRyKFwiclwiLCA1KS5hdHRyKFwid2lkdGhcIiwgMTApLmF0dHIoXCJoZWlnaHRcIiwgMTApO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY2lyY2xlMyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LmNpcmNsZShub2RlLCA3LCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YXRlRW5kXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9mb3JrSm9pbi50c1xuaW1wb3J0IHJvdWdoNiBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGZvcmtKb2luID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlLCBkaXIpID0+IHtcbiAgY29uc3QgeyB0aGVtZVZhcmlhYmxlcyB9ID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgbGluZUNvbG9yIH0gPSB0aGVtZVZhcmlhYmxlcztcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGxldCB3aWR0aCA9IDcwO1xuICBsZXQgaGVpZ2h0ID0gMTA7XG4gIGlmIChkaXIgPT09IFwiTFJcIikge1xuICAgIHdpZHRoID0gMTA7XG4gICAgaGVpZ2h0ID0gNzA7XG4gIH1cbiAgY29uc3QgeCA9IC0xICogd2lkdGggLyAyO1xuICBjb25zdCB5ID0gLTEgKiBoZWlnaHQgLyAyO1xuICBsZXQgc2hhcGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoNi5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb2xpZFN0YXRlRmlsbChsaW5lQ29sb3IpKTtcbiAgICBzaGFwZSA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHNoYXBlID0gc2hhcGVTdmcuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJmb3JrLWpvaW5cIik7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBzaGFwZSk7XG4gIGxldCBub2RlSGVpZ2h0ID0gMDtcbiAgbGV0IG5vZGVXaWR0aCA9IDA7XG4gIGxldCBub2RlUGFkZGluZyA9IDEwO1xuICBpZiAobm9kZS5oZWlnaHQpIHtcbiAgICBub2RlSGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gIH1cbiAgaWYgKG5vZGUud2lkdGgpIHtcbiAgICBub2RlV2lkdGggPSBub2RlLndpZHRoO1xuICB9XG4gIGlmIChub2RlLnBhZGRpbmcpIHtcbiAgICBub2RlUGFkZGluZyA9IG5vZGUucGFkZGluZztcbiAgfVxuICBub2RlLmhlaWdodCA9IG5vZGVIZWlnaHQgKyBub2RlUGFkZGluZyAvIDI7XG4gIG5vZGUud2lkdGggPSBub2RlV2lkdGggKyBub2RlUGFkZGluZyAvIDI7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJmb3JrSm9pblwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvY2hvaWNlLnRzXG5pbXBvcnQgcm91Z2g3IGZyb20gXCJyb3VnaGpzXCI7XG52YXIgY2hvaWNlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBsaW5lQ29sb3IgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCBzaGFwZVN2ZyA9IHBhcmVudC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdFwiKS5hdHRyKFwiaWRcIiwgbm9kZS5kb21JZCB8fCBub2RlLmlkKTtcbiAgY29uc3QgcyA9IDI4O1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiBzIC8gMiB9LFxuICAgIHsgeDogcyAvIDIsIHk6IDAgfSxcbiAgICB7IHg6IDAsIHk6IC1zIC8gMiB9LFxuICAgIHsgeDogLXMgLyAyLCB5OiAwIH1cbiAgXTtcbiAgbGV0IGNob2ljZTI7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoNy5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHBvaW50QXJyID0gcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gW2QueCwgZC55XTtcbiAgICB9KTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5wb2x5Z29uKHBvaW50QXJyLCBzb2xpZFN0YXRlRmlsbChsaW5lQ29sb3IpKTtcbiAgICBjaG9pY2UyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgY2hvaWNlMiA9IHNoYXBlU3ZnLmluc2VydChcInBvbHlnb25cIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcbiAgICAgIFwicG9pbnRzXCIsXG4gICAgICBwb2ludHMubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIGQueCArIFwiLFwiICsgZC55O1xuICAgICAgfSkuam9pbihcIiBcIilcbiAgICApO1xuICB9XG4gIGNob2ljZTIuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtc3RhcnRcIikuYXR0cihcInJcIiwgNykuYXR0cihcIndpZHRoXCIsIDI4KS5hdHRyKFwiaGVpZ2h0XCIsIDI4KS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIG5vZGUud2lkdGggPSAyODtcbiAgbm9kZS5oZWlnaHQgPSAyODtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIDE0LCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImNob2ljZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvbm90ZS50c1xuaW1wb3J0IHJvdWdoOCBmcm9tIFwicm91Z2hqc1wiO1xudmFyIG5vdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyB0aGVtZVZhcmlhYmxlcywgaGFuZERyYXduU2VlZCB9ID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgbm90ZUJvcmRlckNvbG9yLCBub3RlQmtnQ29sb3IgfSA9IHRoZW1lVmFyaWFibGVzO1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gbm9kZS51c2VIdG1sTGFiZWxzO1xuICBpZiAoIXVzZUh0bWxMYWJlbHMpIHtcbiAgICBub2RlLmNlbnRlckxhYmVsID0gdHJ1ZTtcbiAgfVxuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIFwibm9kZSBcIiArIG5vZGUuY3NzQ2xhc3Nlcyk7XG4gIGxvZy5pbmZvKFwiQ2xhc3NlcyA9IFwiLCBub2RlLmNzc0NsYXNzZXMpO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgbGV0IHJlY3QyO1xuICBjb25zdCB0b3RhbFdpZHRoID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgeCA9IC10b3RhbFdpZHRoIC8gMjtcbiAgY29uc3QgeSA9IC10b3RhbEhlaWdodCAvIDI7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoOC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnJlY3RhbmdsZSh4LCB5LCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCwge1xuICAgICAgcm91Z2huZXNzOiAwLjcsXG4gICAgICBmaWxsOiBub3RlQmtnQ29sb3IsXG4gICAgICBmaWxsV2VpZ2h0OiAzLFxuICAgICAgc2VlZDogaGFuZERyYXduU2VlZCxcbiAgICAgIC8vIGZpbGxTdHlsZTogJ3NvbGlkJywgLy8gc29saWQgZmlsbCdcbiAgICAgIHN0cm9rZTogbm90ZUJvcmRlckNvbG9yXG4gICAgfSk7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJiYXNpYyBsYWJlbC1jb250YWluZXJcIikuYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyLmF0dHIoXCJyeFwiLCBub2RlLnJ4KS5hdHRyKFwicnlcIiwgbm9kZS5yeSkuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwibm90ZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvc3RhZGl1bS50c1xuaW1wb3J0IHJvdWdoOSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIHN0YWRpdW0gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgaCAvIDQgKyBub2RlLnBhZGRpbmc7XG4gIGxldCByZWN0MjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoOS5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVSb3VuZGVkUmVjdFBhdGhEKC13IC8gMiwgLWggLyAyLCB3LCBoLCBoIC8gMik7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucGF0aChwYXRoRGF0YSwgb3B0aW9ucyk7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJiYXNpYyBsYWJlbC1jb250YWluZXJcIikuYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjdDIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcykuYXR0cihcInJ4XCIsIGggLyAyKS5hdHRyKFwicnlcIiwgaCAvIDIpLmF0dHIoXCJ4XCIsIC13IC8gMikuYXR0cihcInlcIiwgLWggLyAyKS5hdHRyKFwid2lkdGhcIiwgdykuYXR0cihcImhlaWdodFwiLCBoKTtcbiAgfVxuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YWRpdW1cIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3JlY3RXaXRoVGl0bGUudHNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3Q1IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgcm91Z2gxMCBmcm9tIFwicm91Z2hqc1wiO1xudmFyIHJlY3RXaXRoVGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGxldCBjbGFzc2VzO1xuICBpZiAoIW5vZGUuY3NzQ2xhc3Nlcykge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgZGVmYXVsdFwiO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgXCIgKyBub2RlLmNzc0NsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGcgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpO1xuICBjb25zdCBsYWJlbCA9IHNoYXBlU3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWxcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IG5vZGUuZGVzY3JpcHRpb247XG4gIGNvbnN0IHRpdGxlID0gbm9kZS5sYWJlbDtcbiAgY29uc3QgdGV4dCA9IGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBjcmVhdGVMYWJlbF9kZWZhdWx0KHRpdGxlLCBub2RlLmxhYmVsU3R5bGUsIHRydWUsIHRydWUpKTtcbiAgbGV0IGJib3ggPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2MiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYyID0gc2VsZWN0NSh0ZXh0KTtcbiAgICBiYm94ID0gZGl2Mi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdjIuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2Mi5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0KTtcbiAgfVxuICBsb2cuaW5mbyhcIlRleHQgMlwiLCBkZXNjcmlwdGlvbik7XG4gIGNvbnN0IHRleHRSb3dzID0gZGVzY3JpcHRpb24gfHwgW107XG4gIGNvbnN0IHRpdGxlQm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGNvbnN0IGRlc2NyID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKFxuICAgIGF3YWl0IGNyZWF0ZUxhYmVsX2RlZmF1bHQoXG4gICAgICB0ZXh0Um93cy5qb2luID8gdGV4dFJvd3Muam9pbihcIjxici8+XCIpIDogdGV4dFJvd3MsXG4gICAgICBub2RlLmxhYmVsU3R5bGUsXG4gICAgICB0cnVlLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgKTtcbiAgY29uc3QgZGl2ID0gZGVzY3IuY2hpbGRyZW5bMF07XG4gIGNvbnN0IGR2ID0gc2VsZWN0NShkZXNjcik7XG4gIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gKG5vZGUucGFkZGluZyB8fCAwKSAvIDI7XG4gIHNlbGVjdDUoZGVzY3IpLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZSggXCIgKyAoYmJveC53aWR0aCA+IHRpdGxlQm94LndpZHRoID8gMCA6ICh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgXCIgKyAodGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcgKyA1KSArIFwiKVwiXG4gICk7XG4gIHNlbGVjdDUodGV4dCkuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKCBcIiArIChiYm94LndpZHRoIDwgdGl0bGVCb3gud2lkdGggPyAwIDogLSh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgMClcIlxuICApO1xuICBiYm94ID0gbGFiZWwubm9kZSgpLmdldEJCb3goKTtcbiAgbGFiZWwuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgKC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIDMpICsgXCIpXCJcbiAgKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IGJib3gud2lkdGggKyAobm9kZS5wYWRkaW5nIHx8IDApO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IGJib3guaGVpZ2h0ICsgKG5vZGUucGFkZGluZyB8fCAwKTtcbiAgY29uc3QgeCA9IC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nO1xuICBjb25zdCB5ID0gLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nO1xuICBsZXQgcmVjdDI7XG4gIGxldCBpbm5lckxpbmU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTAuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgoXG4gICAgICBjcmVhdGVSb3VuZGVkUmVjdFBhdGhEKHgsIHksIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0LCBub2RlLnJ4IHx8IDApLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgY29uc3Qgcm91Z2hMaW5lID0gcmMubGluZShcbiAgICAgIC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nLFxuICAgICAgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgdGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcsXG4gICAgICBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nLFxuICAgICAgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgdGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpbm5lckxpbmUgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4ge1xuICAgICAgbG9nLmRlYnVnKFwiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDXCIsIHJvdWdoTm9kZSk7XG4gICAgICByZXR1cm4gcm91Z2hMaW5lO1xuICAgIH0sIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhcIlJvdWdoIG5vZGUgaW5zZXJ0IENYQ1wiLCByb3VnaE5vZGUpO1xuICAgICAgcmV0dXJuIHJvdWdoTm9kZTtcbiAgICB9LCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZWN0MiA9IGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBpbm5lckxpbmUgPSBnLmluc2VydChcImxpbmVcIik7XG4gICAgcmVjdDIuYXR0cihcImNsYXNzXCIsIFwib3V0ZXIgdGl0bGUtc3RhdGVcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpLmF0dHIoXCJ4XCIsIC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgKG5vZGUucGFkZGluZyB8fCAwKSkuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIChub2RlLnBhZGRpbmcgfHwgMCkpO1xuICAgIGlubmVyTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIngyXCIsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcpLmF0dHIoXCJ5MVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyB0aXRsZUJveC5oZWlnaHQgKyBoYWxmUGFkZGluZykuYXR0cihcInkyXCIsIC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIHRpdGxlQm94LmhlaWdodCArIGhhbGZQYWRkaW5nKTtcbiAgfVxuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInJlY3RXaXRoVGl0bGVcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3N1YnJvdXRpbmUudHNcbmltcG9ydCByb3VnaDExIGZyb20gXCJyb3VnaGpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2luc2VydFBvbHlnb25TaGFwZS50c1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbC1jb250YWluZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC13IC8gMiArIFwiLFwiICsgaCAvIDIgKyBcIilcIik7XG59XG5fX25hbWUoaW5zZXJ0UG9seWdvblNoYXBlLCBcImluc2VydFBvbHlnb25TaGFwZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvc3Vicm91dGluZS50c1xudmFyIHN1YnJvdXRpbmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IChub2RlPy5wYWRkaW5nIHx8IDApIC8gMjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgeCA9IC1iYm94LndpZHRoIC8gMiAtIGhhbGZQYWRkaW5nO1xuICBjb25zdCB5ID0gLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggfSxcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IC04LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgOCwgeTogMCB9LFxuICAgIHsgeDogdyArIDgsIHk6IC1oIH0sXG4gICAgeyB4OiAtOCwgeTogLWggfSxcbiAgICB7IHg6IC04LCB5OiAwIH1cbiAgXTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxMS5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucmVjdGFuZ2xlKHggLSA4LCB5LCB3ICsgMTYsIGgsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGwxID0gcmMubGluZSh4LCB5LCB4LCB5ICsgaCwgb3B0aW9ucyk7XG4gICAgY29uc3QgbDIgPSByYy5saW5lKHggKyB3LCB5LCB4ICsgdywgeSArIGgsIG9wdGlvbnMpO1xuICAgIHNoYXBlU3ZnLmluc2VydCgoKSA9PiBsMSwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgc2hhcGVTdmcuaW5zZXJ0KCgpID0+IGwyLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IHsgY3NzU3R5bGVzIH0gPSBub2RlO1xuICAgIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgICBpZiAobm9kZVN0eWxlcykge1xuICAgICAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICAgIH1cbiAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgfVxuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJzdWJyb3V0aW5lXCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy9jeWxpbmRlci50c1xuaW1wb3J0IHJvdWdoMTIgZnJvbSBcInJvdWdoanNcIjtcbnZhciBjcmVhdGVDeWxpbmRlclBhdGhEID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgcngsIHJ5KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3h9LCR7eSArIHJ5fWAsXG4gICAgYGEke3J4fSwke3J5fSAwLDAsMCAke3dpZHRofSwwYCxcbiAgICBgYSR7cnh9LCR7cnl9IDAsMCwwICR7LXdpZHRofSwwYCxcbiAgICBgbDAsJHtoZWlnaHR9YCxcbiAgICBgYSR7cnh9LCR7cnl9IDAsMCwwICR7d2lkdGh9LDBgLFxuICAgIGBsMCwkey1oZWlnaHR9YFxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVDeWxpbmRlclBhdGhEXCIpO1xudmFyIGNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJ4LCByeSkgPT4ge1xuICByZXR1cm4gW1xuICAgIGBNJHt4fSwke3kgKyByeX1gLFxuICAgIGBNJHt4ICsgd2lkdGh9LCR7eSArIHJ5fWAsXG4gICAgYGEke3J4fSwke3J5fSAwLDAsMCAkey13aWR0aH0sMGAsXG4gICAgYGwwLCR7aGVpZ2h0fWAsXG4gICAgYGEke3J4fSwke3J5fSAwLDAsMCAke3dpZHRofSwwYCxcbiAgICBgbDAsJHstaGVpZ2h0fWBcbiAgXS5qb2luKFwiIFwiKTtcbn0sIFwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEXCIpO1xudmFyIGNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJ4LCByeSkgPT4ge1xuICByZXR1cm4gW2BNJHt4IC0gd2lkdGggLyAyfSwkey1oZWlnaHQgLyAyfWAsIGBhJHtyeH0sJHtyeX0gMCwwLDAgJHt3aWR0aH0sMGBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aERcIik7XG52YXIgY3lsaW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcnggPSB3IC8gMjtcbiAgY29uc3QgcnkgPSByeCAvICgyLjUgKyB3IC8gNTApO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyByeSArIG5vZGUucGFkZGluZztcbiAgbGV0IGN5bGluZGVyMjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTIuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvdXRlclBhdGhEYXRhID0gY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEKDAsIDAsIHcsIGgsIHJ4LCByeSk7XG4gICAgY29uc3QgaW5uZXJQYXRoRGF0YSA9IGNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCgwLCByeSwgdywgaCwgcngsIHJ5KTtcbiAgICBjb25zdCBvdXRlck5vZGUgPSByYy5wYXRoKG91dGVyUGF0aERhdGEsIHVzZXJOb2RlT3ZlcnJpZGVzKG5vZGUsIHt9KSk7XG4gICAgY29uc3QgaW5uZXJMaW5lID0gcmMucGF0aChpbm5lclBhdGhEYXRhLCB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7IGZpbGw6IFwibm9uZVwiIH0pKTtcbiAgICBjeWxpbmRlcjIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gaW5uZXJMaW5lLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjeWxpbmRlcjIgPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gb3V0ZXJOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjeWxpbmRlcjIuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpO1xuICAgIGlmIChjc3NTdHlsZXMpIHtcbiAgICAgIGN5bGluZGVyMi5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVDeWxpbmRlclBhdGhEKDAsIDAsIHcsIGgsIHJ4LCByeSk7XG4gICAgY3lsaW5kZXIyID0gc2hhcGVTdmcuaW5zZXJ0KFwicGF0aFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiZFwiLCBwYXRoRGF0YSkuYXR0cihcImNsYXNzXCIsIFwiYmFzaWMgbGFiZWwtY29udGFpbmVyXCIpLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKTtcbiAgfVxuICBjeWxpbmRlcjIuYXR0cihcImxhYmVsLW9mZnNldC15XCIsIHJ5KTtcbiAgY3lsaW5kZXIyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgkey13IC8gMn0sICR7LShoIC8gMiArIHJ5KX0pYCk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY3lsaW5kZXIyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICBjb25zdCBwb3MgPSBpbnRlcnNlY3RfZGVmYXVsdC5yZWN0KG5vZGUsIHBvaW50Mik7XG4gICAgY29uc3QgeCA9IHBvcy54IC0gKG5vZGUueCA/PyAwKTtcbiAgICBpZiAocnggIT0gMCAmJiAoTWF0aC5hYnMoeCkgPCAobm9kZS53aWR0aCA/PyAwKSAvIDIgfHwgTWF0aC5hYnMoeCkgPT0gKG5vZGUud2lkdGggPz8gMCkgLyAyICYmIE1hdGguYWJzKHBvcy55IC0gKG5vZGUueSA/PyAwKSkgPiAobm9kZS5oZWlnaHQgPz8gMCkgLyAyIC0gcnkpKSB7XG4gICAgICBsZXQgeSA9IHJ5ICogcnkgKiAoMSAtIHggKiB4IC8gKHJ4ICogcngpKTtcbiAgICAgIGlmICh5ID4gMCkge1xuICAgICAgICB5ID0gTWF0aC5zcXJ0KHkpO1xuICAgICAgfVxuICAgICAgeSA9IHJ5IC0geTtcbiAgICAgIGlmIChwb2ludDIueSAtIChub2RlLnkgPz8gMCkgPiAwKSB7XG4gICAgICAgIHkgPSAteTtcbiAgICAgIH1cbiAgICAgIHBvcy55ICs9IHk7XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiY3lsaW5kZXJcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2NpcmNsZS50c1xuaW1wb3J0IHJvdWdoMTMgZnJvbSBcInJvdWdoanNcIjtcbnZhciBjaXJjbGUyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZyB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHJhZGl1cyA9IGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmc7XG4gIGxldCBjaXJjbGVFbGVtO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxMy5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMuY2lyY2xlKDAsIDAsIHJhZGl1cyAqIDIsIG9wdGlvbnMpO1xuICAgIGNpcmNsZUVsZW0gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgICBjaXJjbGVFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgfSBlbHNlIHtcbiAgICBjaXJjbGVFbGVtID0gc2hhcGVTdmcuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcykuYXR0cihcInJcIiwgcmFkaXVzKS5hdHRyKFwiY3hcIiwgMCkuYXR0cihcImN5XCIsIDApO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY2lyY2xlRWxlbSk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgbG9nLmluZm8oXCJDaXJjbGUgaW50ZXJzZWN0XCIsIG5vZGUsIHJhZGl1cywgcG9pbnQyKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIHJhZGl1cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJjaXJjbGVcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2RvdWJsZUNpcmNsZS50c1xuaW1wb3J0IHJvdWdoMTQgZnJvbSBcInJvdWdoanNcIjtcbnZhciBkb3VibGVjaXJjbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIGdldE5vZGVDbGFzc2VzKG5vZGUpKTtcbiAgY29uc3QgZ2FwID0gNTtcbiAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nICsgZ2FwO1xuICBjb25zdCBpbm5lclJhZGl1cyA9IGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmc7XG4gIGxldCBjaXJjbGVHcm91cDtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTQuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvdXRlck9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7IHJvdWdobmVzczogMC4yLCBzdHJva2VXaWR0aDogMi41IH0pO1xuICAgIGNvbnN0IGlubmVyT3B0aW9ucyA9IHVzZXJOb2RlT3ZlcnJpZGVzKG5vZGUsIHsgcm91Z2huZXNzOiAwLjIsIHN0cm9rZVdpZHRoOiAxLjUgfSk7XG4gICAgY29uc3Qgb3V0ZXJSb3VnaE5vZGUgPSByYy5jaXJjbGUoMCwgMCwgb3V0ZXJSYWRpdXMgKiAyLCBvdXRlck9wdGlvbnMpO1xuICAgIGNvbnN0IGlubmVyUm91Z2hOb2RlID0gcmMuY2lyY2xlKDAsIDAsIGlubmVyUmFkaXVzICogMiwgaW5uZXJPcHRpb25zKTtcbiAgICBjaXJjbGVHcm91cCA9IHNoYXBlU3ZnLmluc2VydChcImdcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gICAgY2lyY2xlR3JvdXAuYXR0cihcImNsYXNzXCIsIG5vZGUuY3NzQ2xhc3NlcykuYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gICAgY2lyY2xlR3JvdXAubm9kZSgpPy5hcHBlbmRDaGlsZChvdXRlclJvdWdoTm9kZSk7XG4gICAgY2lyY2xlR3JvdXAubm9kZSgpPy5hcHBlbmRDaGlsZChpbm5lclJvdWdoTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgY2lyY2xlR3JvdXAgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IG91dGVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IGlubmVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIpO1xuICAgIGNpcmNsZUdyb3VwLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gICAgb3V0ZXJDaXJjbGUuYXR0cihcImNsYXNzXCIsIFwib3V0ZXItY2lyY2xlXCIpLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKS5hdHRyKFwiclwiLCBvdXRlclJhZGl1cykuYXR0cihcImN4XCIsIDApLmF0dHIoXCJjeVwiLCAwKTtcbiAgICBpbm5lckNpcmNsZS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lci1jaXJjbGVcIikuYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpLmF0dHIoXCJyXCIsIGlubmVyUmFkaXVzKS5hdHRyKFwiY3hcIiwgMCkuYXR0cihcImN5XCIsIDApO1xuICB9XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgY2lyY2xlR3JvdXApO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIGxvZy5pbmZvKFwiRG91YmxlQ2lyY2xlIGludGVyc2VjdFwiLCBub2RlLCBvdXRlclJhZGl1cywgcG9pbnQyKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIG91dGVyUmFkaXVzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImRvdWJsZWNpcmNsZVwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvcmVjdExlZnRJbnZBcnJvdy50c1xuaW1wb3J0IHJvdWdoMTUgZnJvbSBcInJvdWdoanNcIjtcbnZhciBjcmVhdGVQb2x5Z29uUGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggLSBoZWlnaHQgLyAyfSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRofSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRofSwke3kgLSBoZWlnaHR9YCxcbiAgICBgTCR7eCAtIGhlaWdodCAvIDJ9LCR7eSAtIGhlaWdodH1gLFxuICAgIGBMJHt4fSwke3kgLSBoZWlnaHQgLyAyfWAsXG4gICAgXCJaXCJcbiAgXS5qb2luKFwiIFwiKTtcbn0sIFwiY3JlYXRlUG9seWdvblBhdGhEXCIpO1xudmFyIHJlY3RfbGVmdF9pbnZfYXJyb3cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtaCAvIDIsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIH0sXG4gICAgeyB4OiAtaCAvIDIsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCAvIDIgfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTUuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlUG9seWdvblBhdGhEKDAsIDAsIHcsIGgpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstdyAvIDJ9LCAke2ggLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgbm9kZS53aWR0aCA9IHcgKyBoO1xuICBub2RlLmhlaWdodCA9IGg7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcG9seWdvbik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL3F1ZXN0aW9uLnRzXG5pbXBvcnQgcm91Z2gxNiBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZURlY2lzaW9uQm94UGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCBzaXplKSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggKyBzaXplIC8gMn0sJHt5fWAsXG4gICAgYEwke3ggKyBzaXplfSwke3kgLSBzaXplIC8gMn1gLFxuICAgIGBMJHt4ICsgc2l6ZSAvIDJ9LCR7eSAtIHNpemV9YCxcbiAgICBgTCR7eH0sJHt5IC0gc2l6ZSAvIDJ9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVEZWNpc2lvbkJveFBhdGhEXCIpO1xudmFyIHF1ZXN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIGdldE5vZGVDbGFzc2VzKG5vZGUpKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcyA9IHcgKyBoO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBzIC8gMiwgeTogMCB9LFxuICAgIHsgeDogcywgeTogLXMgLyAyIH0sXG4gICAgeyB4OiBzIC8gMiwgeTogLXMgfSxcbiAgICB7IHg6IDAsIHk6IC1zIC8gMiB9XG4gIF07XG4gIGxldCBwb2x5Z29uO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxNi5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVEZWNpc2lvbkJveFBhdGhEKDAsIDAsIHMpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstcyAvIDJ9LCAke3MgLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCBzLCBzLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBwb2x5Z29uKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcIkFQQTEyIEludGVyc2VjdCBjYWxsZWQgU1BMSVRcXG5wb2ludDpcIixcbiAgICAgIHBvaW50MixcbiAgICAgIFwiXFxubm9kZTpcXG5cIixcbiAgICAgIG5vZGUsXG4gICAgICBcIlxcbnJlczpcIixcbiAgICAgIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpXG4gICAgKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicXVlc3Rpb25cIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2hleGFnb24udHNcbmltcG9ydCByb3VnaDE3IGZyb20gXCJyb3VnaGpzXCI7XG52YXIgY3JlYXRlSGV4YWdvblBhdGhEID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCwgeSwgd2lkdGgsIGhlaWdodCwgbSkgPT4ge1xuICByZXR1cm4gW1xuICAgIGBNJHt4ICsgbX0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCAtIG19LCR7eX1gLFxuICAgIGBMJHt4ICsgd2lkdGh9LCR7eSAtIGhlaWdodCAvIDJ9YCxcbiAgICBgTCR7eCArIHdpZHRoIC0gbX0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgYEwke3ggKyBtfSwke3kgLSBoZWlnaHR9YCxcbiAgICBgTCR7eH0sJHt5IC0gaGVpZ2h0IC8gMn1gLFxuICAgIFwiWlwiXG4gIF0uam9pbihcIiBcIik7XG59LCBcImNyZWF0ZUhleGFnb25QYXRoRFwiKTtcbnZhciBoZXhhZ29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgbGFiZWxTdHlsZXMsIG5vZGVTdHlsZXMgfSA9IHN0eWxlczJTdHJpbmcobm9kZSk7XG4gIG5vZGUubGFiZWxTdHlsZSA9IGxhYmVsU3R5bGVzO1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIGdldE5vZGVDbGFzc2VzKG5vZGUpKTtcbiAgY29uc3QgZiA9IDQ7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgbSA9IGggLyBmO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIDIgKiBtICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBtLCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gbSwgeTogMCB9LFxuICAgIHsgeDogdywgeTogLWggLyAyIH0sXG4gICAgeyB4OiB3IC0gbSwgeTogLWggfSxcbiAgICB7IHg6IG0sIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCAvIDIgfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMTcuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlSGV4YWdvblBhdGhEKDAsIDAsIHcsIGgsIG0pO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstdyAvIDJ9LCAke2ggLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgbm9kZS53aWR0aCA9IHc7XG4gIG5vZGUuaGVpZ2h0ID0gaDtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBwb2x5Z29uKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiaGV4YWdvblwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9zaGFwZXMvbGVhblJpZ2h0LnRzXG5pbXBvcnQgcm91Z2gxOCBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZUxlYW5SaWdodFBhdGhEID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCwgeSwgd2lkdGgsIGhlaWdodCkgPT4ge1xuICByZXR1cm4gW1xuICAgIGBNJHt4IC0gMiAqIGhlaWdodCAvIDZ9LCR7eX1gLFxuICAgIGBMJHt4ICsgd2lkdGggLSBoZWlnaHQgLyA2fSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRoICsgMiAqIGhlaWdodCAvIDZ9LCR7eSAtIGhlaWdodH1gLFxuICAgIGBMJHt4ICsgaGVpZ2h0IC8gNn0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgXCJaXCJcbiAgXS5qb2luKFwiIFwiKTtcbn0sIFwiY3JlYXRlTGVhblJpZ2h0UGF0aERcIik7XG52YXIgbGVhbl9yaWdodCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzIH0gPSBzdHlsZXMyU3RyaW5nKG5vZGUpO1xuICBub2RlLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlcztcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IC0yICogaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgLSBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIDIgKiBoIC8gNiwgeTogLWggfSxcbiAgICB7IHg6IGggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGxldCBwb2x5Z29uO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxOC5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVMZWFuUmlnaHRQYXRoRCgwLCAwLCB3LCBoKTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5wYXRoKHBhdGhEYXRhLCBvcHRpb25zKTtcbiAgICBwb2x5Z29uID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7LXcgLyAyfSwgJHtoIC8gMn0pYCk7XG4gICAgaWYgKGNzc1N0eWxlcykge1xuICAgICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcG9seWdvbiA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgfVxuICBpZiAobm9kZVN0eWxlcykge1xuICAgIHBvbHlnb24uYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICB9XG4gIG5vZGUud2lkdGggPSB3O1xuICBub2RlLmhlaWdodCA9IGg7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcG9seWdvbik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImxlYW5fcmlnaHRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2xlYW5MZWZ0LnRzXG5pbXBvcnQgcm91Z2gxOSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZUxlYW5MZWZ0UGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggKyAyICogaGVpZ2h0IC8gNn0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCArIGhlaWdodCAvIDZ9LCR7eX1gLFxuICAgIGBMJHt4ICsgd2lkdGggLSAyICogaGVpZ2h0IC8gNn0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgYEwke3ggLSBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVMZWFuTGVmdFBhdGhEXCIpO1xudmFyIGxlYW5fbGVmdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IGxhYmVsU3R5bGVzLCBub2RlU3R5bGVzIH0gPSBzdHlsZXMyU3RyaW5nKG5vZGUpO1xuICBub2RlLmxhYmVsU3R5bGUgPSBsYWJlbFN0eWxlcztcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXROb2RlQ2xhc3Nlcyhub2RlKSk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gMiAqIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogLWggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGxldCBwb2x5Z29uO1xuICBjb25zdCB7IGNzc1N0eWxlcyB9ID0gbm9kZTtcbiAgaWYgKG5vZGUubG9vayA9PT0gXCJoYW5kRHJhd25cIikge1xuICAgIGNvbnN0IHJjID0gcm91Z2gxOS5zdmcoc2hhcGVTdmcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB1c2VyTm9kZU92ZXJyaWRlcyhub2RlLCB7fSk7XG4gICAgY29uc3QgcGF0aERhdGEgPSBjcmVhdGVMZWFuTGVmdFBhdGhEKDAsIDAsIHcsIGgpO1xuICAgIGNvbnN0IHJvdWdoTm9kZSA9IHJjLnBhdGgocGF0aERhdGEsIG9wdGlvbnMpO1xuICAgIHBvbHlnb24gPSBzaGFwZVN2Zy5pbnNlcnQoKCkgPT4gcm91Z2hOb2RlLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHstdyAvIDJ9LCAke2ggLyAyfSlgKTtcbiAgICBpZiAoY3NzU3R5bGVzKSB7XG4gICAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBjc3NTdHlsZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2x5Z29uID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICB9XG4gIGlmIChub2RlU3R5bGVzKSB7XG4gICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgbm9kZVN0eWxlcyk7XG4gIH1cbiAgbm9kZS53aWR0aCA9IHc7XG4gIG5vZGUuaGVpZ2h0ID0gaDtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBwb2x5Z29uKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50Mik7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwibGVhbl9sZWZ0XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvcmVuZGVyaW5nLWVsZW1lbnRzL3NoYXBlcy90cmFwZXpvaWQudHNcbmltcG9ydCByb3VnaDIwIGZyb20gXCJyb3VnaGpzXCI7XG52YXIgY3JlYXRlVHJhcGV6b2lkUGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggLSAyICogaGVpZ2h0IC8gNn0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCArIDIgKiBoZWlnaHQgLyA2fSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRoIC0gaGVpZ2h0IC8gNn0sJHt5IC0gaGVpZ2h0fWAsXG4gICAgYEwke3ggKyBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVUcmFwZXpvaWRQYXRoRFwiKTtcbnZhciB0cmFwZXpvaWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMjAuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlVHJhcGV6b2lkUGF0aEQoMCwgMCwgdywgaCk7XG4gICAgY29uc3Qgcm91Z2hOb2RlID0gcmMucGF0aChwYXRoRGF0YSwgb3B0aW9ucyk7XG4gICAgcG9seWdvbiA9IHNoYXBlU3ZnLmluc2VydCgoKSA9PiByb3VnaE5vZGUsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgkey13IC8gMn0sICR7aCAvIDJ9KWApO1xuICAgIGlmIChjc3NTdHlsZXMpIHtcbiAgICAgIHBvbHlnb24uYXR0cihcInN0eWxlXCIsIGNzc1N0eWxlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBvbHlnb24gPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIH1cbiAgaWYgKG5vZGVTdHlsZXMpIHtcbiAgICBwb2x5Z29uLmF0dHIoXCJzdHlsZVwiLCBub2RlU3R5bGVzKTtcbiAgfVxuICBub2RlLndpZHRoID0gdztcbiAgbm9kZS5oZWlnaHQgPSBoO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHBvbHlnb24pO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50Mikge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQyKTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJ0cmFwZXpvaWRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2ludmVydGVkVHJhcGV6b2lkLnRzXG5pbXBvcnQgcm91Z2gyMSBmcm9tIFwicm91Z2hqc1wiO1xudmFyIGNyZWF0ZUludmVydGVkVHJhcGV6b2lkUGF0aEQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gIHJldHVybiBbXG4gICAgYE0ke3ggKyBoZWlnaHQgLyA2fSwke3l9YCxcbiAgICBgTCR7eCArIHdpZHRoIC0gaGVpZ2h0IC8gNn0sJHt5fWAsXG4gICAgYEwke3ggKyB3aWR0aCArIDIgKiBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBgTCR7eCAtIDIgKiBoZWlnaHQgLyA2fSwke3kgLSBoZWlnaHR9YCxcbiAgICBcIlpcIlxuICBdLmpvaW4oXCIgXCIpO1xufSwgXCJjcmVhdGVJbnZlcnRlZFRyYXBlem9pZFBhdGhEXCIpO1xudmFyIGludl90cmFwZXpvaWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBsYWJlbFN0eWxlcywgbm9kZVN0eWxlcyB9ID0gc3R5bGVzMlN0cmluZyhub2RlKTtcbiAgbm9kZS5sYWJlbFN0eWxlID0gbGFiZWxTdHlsZXM7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgZ2V0Tm9kZUNsYXNzZXMobm9kZSkpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgMiAqIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogLTIgKiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBsZXQgcG9seWdvbjtcbiAgY29uc3QgeyBjc3NTdHlsZXMgfSA9IG5vZGU7XG4gIGlmIChub2RlLmxvb2sgPT09IFwiaGFuZERyYXduXCIpIHtcbiAgICBjb25zdCByYyA9IHJvdWdoMjEuc3ZnKHNoYXBlU3ZnKTtcbiAgICBjb25zdCBvcHRpb25zID0gdXNlck5vZGVPdmVycmlkZXMobm9kZSwge30pO1xuICAgIGNvbnN0IHBhdGhEYXRhID0gY3JlYXRlSW52ZXJ0ZWRUcmFwZXpvaWRQYXRoRCgwLCAwLCB3LCBoKTtcbiAgICBjb25zdCByb3VnaE5vZGUgPSByYy5wYXRoKHBhdGhEYXRhLCBvcHRpb25zKTtcbiAgICBwb2x5Z29uID0gc2hhcGVTdmcuaW5zZXJ0KCgpID0+IHJvdWdoTm9kZSwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7LXcgLyAyfSwgJHtoIC8gMn0pYCk7XG4gICAgaWYgKGNzc1N0eWxlcykge1xuICAgICAgcG9seWdvbi5hdHRyKFwic3R5bGVcIiwgY3NzU3R5bGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcG9seWdvbiA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgfVxuICBpZiAobm9kZVN0eWxlcykge1xuICAgIHBvbHlnb24uYXR0cihcInN0eWxlXCIsIG5vZGVTdHlsZXMpO1xuICB9XG4gIG5vZGUud2lkdGggPSB3O1xuICBub2RlLmhlaWdodCA9IGg7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcG9seWdvbik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQyKSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImludl90cmFwZXpvaWRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9yZW5kZXJpbmctZWxlbWVudHMvc2hhcGVzL2xhYmVsUmVjdC50c1xudmFyIGxhYmVsUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIFwibGFiZWxcIik7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IDAuMTtcbiAgY29uc3QgdG90YWxIZWlnaHQgPSAwLjE7XG4gIHJlY3QyLmF0dHIoXCJ3aWR0aFwiLCB0b3RhbFdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIHRvdGFsSGVpZ2h0KTtcbiAgc2hhcGVTdmcuYXR0cihcImNsYXNzXCIsIFwibGFiZWwgZWRnZUxhYmVsXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIHJlY3QyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludDIpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludDIpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImxhYmVsUmVjdFwiKTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlcmluZy1lbGVtZW50cy9ub2Rlcy5qc1xudmFyIHNoYXBlczIgPSB7XG4gIHN0YXRlLFxuICBzdGF0ZVN0YXJ0LFxuICBzdGF0ZUVuZCxcbiAgZm9yazogZm9ya0pvaW4sXG4gIGpvaW46IGZvcmtKb2luLFxuICBjaG9pY2UsXG4gIG5vdGUsXG4gIHJvdW5kZWRSZWN0LFxuICByZWN0V2l0aFRpdGxlLFxuICBzcXVhcmVSZWN0OiBzcXVhcmVSZWN0MixcbiAgc3RhZGl1bSxcbiAgc3Vicm91dGluZSxcbiAgY3lsaW5kZXIsXG4gIGNpcmNsZTogY2lyY2xlMixcbiAgZG91YmxlY2lyY2xlLFxuICBvZGQ6IHJlY3RfbGVmdF9pbnZfYXJyb3csXG4gIGRpYW1vbmQ6IHF1ZXN0aW9uLFxuICBoZXhhZ29uLFxuICBsZWFuX3JpZ2h0LFxuICBsZWFuX2xlZnQsXG4gIHRyYXBlem9pZCxcbiAgaW52X3RyYXBlem9pZCxcbiAgbGFiZWxSZWN0XG59O1xudmFyIG5vZGVFbGVtcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgaW5zZXJ0Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsZW0sIG5vZGUsIGRpcikgPT4ge1xuICBsZXQgbmV3RWw7XG4gIGxldCBlbDtcbiAgaWYgKG5vZGUuc2hhcGUgPT09IFwicmVjdFwiKSB7XG4gICAgaWYgKG5vZGUucnggJiYgbm9kZS5yeSkge1xuICAgICAgbm9kZS5zaGFwZSA9IFwicm91bmRlZFJlY3RcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zaGFwZSA9IFwic3F1YXJlUmVjdFwiO1xuICAgIH1cbiAgfVxuICBpZiAobm9kZS5saW5rKSB7XG4gICAgbGV0IHRhcmdldDtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgIHRhcmdldCA9IFwiX3RvcFwiO1xuICAgIH0gZWxzZSBpZiAobm9kZS5saW5rVGFyZ2V0KSB7XG4gICAgICB0YXJnZXQgPSBub2RlLmxpbmtUYXJnZXQgfHwgXCJfYmxhbmtcIjtcbiAgICB9XG4gICAgbmV3RWwgPSBlbGVtLmluc2VydChcInN2ZzphXCIpLmF0dHIoXCJ4bGluazpocmVmXCIsIG5vZGUubGluaykuYXR0cihcInRhcmdldFwiLCB0YXJnZXQpO1xuICAgIGVsID0gYXdhaXQgc2hhcGVzMltub2RlLnNoYXBlXShuZXdFbCwgbm9kZSwgZGlyKTtcbiAgfSBlbHNlIHtcbiAgICBlbCA9IGF3YWl0IHNoYXBlczJbbm9kZS5zaGFwZV0oZWxlbSwgbm9kZSwgZGlyKTtcbiAgICBuZXdFbCA9IGVsO1xuICB9XG4gIGlmIChub2RlLnRvb2x0aXApIHtcbiAgICBlbC5hdHRyKFwidGl0bGVcIiwgbm9kZS50b29sdGlwKTtcbiAgfVxuICBub2RlRWxlbXMuc2V0KG5vZGUuaWQsIG5ld0VsKTtcbiAgaWYgKG5vZGUuaGF2ZUNhbGxiYWNrKSB7XG4gICAgbm9kZUVsZW1zLmdldChub2RlLmlkKS5hdHRyKFwiY2xhc3NcIiwgbm9kZUVsZW1zLmdldChub2RlLmlkKS5hdHRyKFwiY2xhc3NcIikgKyBcIiBjbGlja2FibGVcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0VsO1xufSwgXCJpbnNlcnROb2RlXCIpO1xudmFyIHNldE5vZGVFbGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgbm9kZSkgPT4ge1xuICBub2RlRWxlbXMuc2V0KG5vZGUuaWQsIGVsZW0pO1xufSwgXCJzZXROb2RlRWxlbVwiKTtcbnZhciBjbGVhcjMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgbm9kZUVsZW1zLmNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIHBvc2l0aW9uTm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUpID0+IHtcbiAgY29uc3QgZWwgPSBub2RlRWxlbXMuZ2V0KG5vZGUuaWQpO1xuICBsb2cudHJhY2UoXG4gICAgXCJUcmFuc2Zvcm1pbmcgbm9kZVwiLFxuICAgIG5vZGUuZGlmZixcbiAgICBub2RlLFxuICAgIFwidHJhbnNsYXRlKFwiICsgKG5vZGUueCAtIG5vZGUud2lkdGggLyAyIC0gNSkgKyBcIiwgXCIgKyBub2RlLndpZHRoIC8gMiArIFwiKVwiXG4gICk7XG4gIGNvbnN0IHBhZGRpbmcgPSA4O1xuICBjb25zdCBkaWZmID0gbm9kZS5kaWZmIHx8IDA7XG4gIGlmIChub2RlLmNsdXN0ZXJOb2RlKSB7XG4gICAgZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICBcInRyYW5zbGF0ZShcIiArIChub2RlLnggKyBkaWZmIC0gbm9kZS53aWR0aCAvIDIpICsgXCIsIFwiICsgKG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIHBhZGRpbmcpICsgXCIpXCJcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLnggKyBcIiwgXCIgKyBub2RlLnkgKyBcIilcIik7XG4gIH1cbiAgcmV0dXJuIGRpZmY7XG59LCBcInBvc2l0aW9uTm9kZVwiKTtcblxuZXhwb3J0IHtcbiAgaW5zZXJ0Q2x1c3RlcixcbiAgY2xlYXIsXG4gIGNsZWFyMixcbiAgaW5zZXJ0RWRnZUxhYmVsLFxuICBwb3NpdGlvbkVkZ2VMYWJlbCxcbiAgaW5zZXJ0RWRnZSxcbiAgbWFya2Vyc19kZWZhdWx0LFxuICBsYWJlbEhlbHBlcixcbiAgdXBkYXRlTm9kZUJvdW5kcyxcbiAgaW5zZXJ0Tm9kZSxcbiAgc2V0Tm9kZUVsZW0sXG4gIGNsZWFyMyxcbiAgcG9zaXRpb25Ob2RlXG59O1xuIiwKICAgICJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3ltYm9sO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcbiIsCiAgICAiLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG52YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbi8qKlxuICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltbWVkRW5kSW5kZXg7XG4iLAogICAgImltcG9ydCB0cmltbWVkRW5kSW5kZXggZnJvbSAnLi9fdHJpbW1lZEVuZEluZGV4LmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50cmltYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdcbiAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVHJpbTtcbiIsCiAgICAiaW1wb3J0IGJhc2VUcmltIGZyb20gJy4vX2Jhc2VUcmltLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvTnVtYmVyO1xuIiwKICAgICJpbXBvcnQgdG9OdW1iZXIgZnJvbSAnLi90b051bWJlci5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTIuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvRmluaXRlKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9GaW5pdGUoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gIH1cbiAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zpbml0ZTtcbiIsCiAgICAiaW1wb3J0IHRvRmluaXRlIGZyb20gJy4vdG9GaW5pdGUuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0ludGVnZXJgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9pbnRlZ2VyKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvSW50ZWdlcigzLjIpO1xuICogLy8gPT4gM1xuICpcbiAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gMFxuICpcbiAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0ludGVnZXIoJzMuMicpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7XG5cbiAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0ludGVnZXI7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBXZWFrTWFwO1xuIiwKICAgICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5leHBvcnQgZGVmYXVsdCBub29wO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RWFjaDtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGaW5kSW5kZXg7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hTjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpY3RJbmRleE9mO1xuIiwKICAgICJpbXBvcnQgYmFzZUZpbmRJbmRleCBmcm9tICcuL19iYXNlRmluZEluZGV4LmpzJztcbmltcG9ydCBiYXNlSXNOYU4gZnJvbSAnLi9fYmFzZUlzTmFOLmpzJztcbmltcG9ydCBzdHJpY3RJbmRleE9mIGZyb20gJy4vX3N0cmljdEluZGV4T2YuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSW5kZXhPZjtcbiIsCiAgICAiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlJbmNsdWRlcztcbiIsCiAgICAiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsCiAgICAiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIiwKICAgICJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwKICAgICJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbjtcbiIsCiAgICAiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleTtcbiIsCiAgICAiaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplQ2FwcGVkO1xuIiwKICAgICJpbXBvcnQgbWVtb2l6ZUNhcHBlZCBmcm9tICcuL19tZW1vaXplQ2FwcGVkLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb1BhdGg7XG4iLAogICAgImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcbiIsCiAgICAiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0tleSBmcm9tICcuL19pc0tleS5qcyc7XG5pbXBvcnQgc3RyaW5nVG9QYXRoIGZyb20gJy4vX3N0cmluZ1RvUGF0aC5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhc3RQYXRoO1xuIiwKICAgICJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiIsCiAgICAiaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXQ7XG4iLAogICAgImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldDtcbiIsCiAgICAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVB1c2g7XG4iLAogICAgImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZsYXR0ZW5hYmxlO1xuIiwKICAgICJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNGbGF0dGVuYWJsZSBmcm9tICcuL19pc0ZsYXR0ZW5hYmxlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGbGF0dGVuO1xuIiwKICAgICJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdHRlbjtcbiIsCiAgICAiaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9mbGF0dGVuLmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXRSZXN0O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTbGljZTtcbiIsCiAgICAiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1VuaWNvZGU7XG4iLAogICAgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlSZWR1Y2U7XG4iLAogICAgImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduO1xuIiwKICAgICJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25JbjtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUZpbHRlcjtcbiIsCiAgICAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkFycmF5O1xuIiwKICAgICJpbXBvcnQgYXJyYXlGaWx0ZXIgZnJvbSAnLi9fYXJyYXlGaWx0ZXIuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0U3ltYm9scztcbiIsCiAgICAiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9scztcbiIsCiAgICAiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGdldFN5bWJvbHMgZnJvbSAnLi9fZ2V0U3ltYm9scy5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0U3ltYm9sc0luO1xuIiwKICAgICJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBnZXRTeW1ib2xzSW4gZnJvbSAnLi9fZ2V0U3ltYm9sc0luLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9sc0luO1xuIiwKICAgICJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRBbGxLZXlzO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldEFsbEtleXMgZnJvbSAnLi9fYmFzZUdldEFsbEtleXMuanMnO1xuaW1wb3J0IGdldFN5bWJvbHMgZnJvbSAnLi9fZ2V0U3ltYm9scy5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRBbGxLZXlzO1xuIiwKICAgICJpbXBvcnQgYmFzZUdldEFsbEtleXMgZnJvbSAnLi9fYmFzZUdldEFsbEtleXMuanMnO1xuaW1wb3J0IGdldFN5bWJvbHNJbiBmcm9tICcuL19nZXRTeW1ib2xzSW4uanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldEFsbEtleXNJbjtcbiIsCiAgICAiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0YVZpZXc7XG4iLAogICAgImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlO1xuIiwKICAgICJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IFNldDtcbiIsCiAgICAiaW1wb3J0IERhdGFWaWV3IGZyb20gJy4vX0RhdGFWaWV3LmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJy4vX1Byb21pc2UuanMnO1xuaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi9fV2Vha01hcC5qcyc7XG5pbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRhZztcbiIsCiAgICAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdENsb25lQXJyYXk7XG4iLAogICAgImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURhdGFWaWV3O1xuIiwKICAgICIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVJlZ0V4cDtcbiIsCiAgICAiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lU3ltYm9sO1xuIiwKICAgICJpbXBvcnQgY2xvbmVBcnJheUJ1ZmZlciBmcm9tICcuL19jbG9uZUFycmF5QnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZURhdGFWaWV3IGZyb20gJy4vX2Nsb25lRGF0YVZpZXcuanMnO1xuaW1wb3J0IGNsb25lUmVnRXhwIGZyb20gJy4vX2Nsb25lUmVnRXhwLmpzJztcbmltcG9ydCBjbG9uZVN5bWJvbCBmcm9tICcuL19jbG9uZVN5bWJvbC5qcyc7XG5pbXBvcnQgY2xvbmVUeXBlZEFycmF5IGZyb20gJy4vX2Nsb25lVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVCeVRhZztcbiIsCiAgICAiaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNNYXA7XG4iLAogICAgImltcG9ydCBiYXNlSXNNYXAgZnJvbSAnLi9fYmFzZUlzTWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFwO1xuIiwKICAgICJpbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1NldDtcbiIsCiAgICAiaW1wb3J0IGJhc2VJc1NldCBmcm9tICcuL19iYXNlSXNTZXQuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxuZXhwb3J0IGRlZmF1bHQgaXNTZXQ7XG4iLAogICAgImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ24gZnJvbSAnLi9fYmFzZUFzc2lnbi5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnbkluIGZyb20gJy4vX2Jhc2VBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgY2xvbmVCdWZmZXIgZnJvbSAnLi9fY2xvbmVCdWZmZXIuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGNvcHlTeW1ib2xzIGZyb20gJy4vX2NvcHlTeW1ib2xzLmpzJztcbmltcG9ydCBjb3B5U3ltYm9sc0luIGZyb20gJy4vX2NvcHlTeW1ib2xzSW4uanMnO1xuaW1wb3J0IGdldEFsbEtleXMgZnJvbSAnLi9fZ2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaW5pdENsb25lQXJyYXkgZnJvbSAnLi9faW5pdENsb25lQXJyYXkuanMnO1xuaW1wb3J0IGluaXRDbG9uZUJ5VGFnIGZyb20gJy4vX2luaXRDbG9uZUJ5VGFnLmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNNYXAgZnJvbSAnLi9pc01hcC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNTZXQgZnJvbSAnLi9pc1NldC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ2xvbmU7XG4iLAogICAgImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICogYW5kIHN1cHBvcnRzIGNsb25pbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucywgZGF0ZSBvYmplY3RzLCBtYXBzLFxuICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICogYXMgcGxhaW4gb2JqZWN0cy4gQW4gZW1wdHkgb2JqZWN0IGlzIHJldHVybmVkIGZvciB1bmNsb25lYWJsZSB2YWx1ZXMgc3VjaFxuICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhzaGFsbG93WzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY2xvbmUodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmU7XG4iLAogICAgImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURlZXA7XG4iLAogICAgIi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNvbXBhY3QoWzAsIDEsIGZhbHNlLCAyLCAnJywgM10pO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhY3Q7XG4iLAogICAgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRDYWNoZUFkZDtcbiIsCiAgICAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRDYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IE1hcENhY2hlIGZyb20gJy4vX01hcENhY2hlLmpzJztcbmltcG9ydCBzZXRDYWNoZUFkZCBmcm9tICcuL19zZXRDYWNoZUFkZC5qcyc7XG5pbXBvcnQgc2V0Q2FjaGVIYXMgZnJvbSAnLi9fc2V0Q2FjaGVIYXMuanMnO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbmV4cG9ydCBkZWZhdWx0IFNldENhY2hlO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheVNvbWU7XG4iLAogICAgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYWNoZUhhcztcbiIsCiAgICAiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheVNvbWUgZnJvbSAnLi9fYXJyYXlTb21lLmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxBcnJheXM7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcFRvQXJyYXk7XG4iLAogICAgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvQXJyYXk7XG4iLAogICAgImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBVaW50OEFycmF5IGZyb20gJy4vX1VpbnQ4QXJyYXkuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGVxdWFsQXJyYXlzIGZyb20gJy4vX2VxdWFsQXJyYXlzLmpzJztcbmltcG9ydCBtYXBUb0FycmF5IGZyb20gJy4vX21hcFRvQXJyYXkuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsQnlUYWc7XG4iLAogICAgImltcG9ydCBnZXRBbGxLZXlzIGZyb20gJy4vX2dldEFsbEtleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxPYmplY3RzO1xuIiwKICAgICJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGVxdWFsQXJyYXlzIGZyb20gJy4vX2VxdWFsQXJyYXlzLmpzJztcbmltcG9ydCBlcXVhbEJ5VGFnIGZyb20gJy4vX2VxdWFsQnlUYWcuanMnO1xuaW1wb3J0IGVxdWFsT2JqZWN0cyBmcm9tICcuL19lcXVhbE9iamVjdHMuanMnO1xuaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzRXF1YWxEZWVwO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzRXF1YWxEZWVwIGZyb20gJy4vX2Jhc2VJc0VxdWFsRGVlcC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsO1xuIiwKICAgICJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hdGNoO1xuIiwKICAgICJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTdHJpY3RDb21wYXJhYmxlO1xuIiwKICAgICJpbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWF0Y2hEYXRhO1xuIiwKICAgICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzTWF0Y2ggZnJvbSAnLi9fYmFzZUlzTWF0Y2guanMnO1xuaW1wb3J0IGdldE1hdGNoRGF0YSBmcm9tICcuL19nZXRNYXRjaERhdGEuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNYXRjaGVzO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhc0luO1xuIiwKICAgICJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1BhdGg7XG4iLAogICAgImltcG9ydCBiYXNlSGFzSW4gZnJvbSAnLi9fYmFzZUhhc0luLmpzJztcbmltcG9ydCBoYXNQYXRoIGZyb20gJy4vX2hhc1BhdGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc0luO1xuIiwKICAgICJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IGlzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19pc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5O1xuIiwKICAgICJpbXBvcnQgYmFzZUdldCBmcm9tICcuL19iYXNlR2V0LmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eURlZXA7XG4iLAogICAgImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHlEZWVwIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eURlZXAuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogeyAnYic6IDIgfSB9LFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gKiBdO1xuICpcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAqIC8vID0+IFsyLCAxXVxuICpcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHk7XG4iLAogICAgImltcG9ydCBiYXNlTWF0Y2hlcyBmcm9tICcuL19iYXNlTWF0Y2hlcy5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJdGVyYXRlZTtcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VBZ2dyZWdhdG9yYCBmb3IgYXJyYXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICovXG5mdW5jdGlvbiBhcnJheUFnZ3JlZ2F0b3IoYXJyYXksIHNldHRlciwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUFnZ3JlZ2F0b3I7XG4iLAogICAgImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIiwKICAgICJpbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJhc2VFYWNoO1xuIiwKICAgICJpbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBjcmVhdGVCYXNlRWFjaCBmcm9tICcuL19jcmVhdGVCYXNlRWFjaC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlRWFjaDtcbiIsCiAgICAiaW1wb3J0IGJhc2VFYWNoIGZyb20gJy4vX2Jhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBZ2dyZWdhdG9yO1xuIiwKICAgICJpbXBvcnQgYXJyYXlBZ2dyZWdhdG9yIGZyb20gJy4vX2FycmF5QWdncmVnYXRvci5qcyc7XG5pbXBvcnQgYmFzZUFnZ3JlZ2F0b3IgZnJvbSAnLi9fYmFzZUFnZ3JlZ2F0b3IuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWdncmVnYXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgc2V0dGVyLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFnZ3JlZ2F0b3I7XG4iLAogICAgImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBub3c7XG4iLAogICAgImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICogb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcyB0aGF0XG4gKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICBsZW5ndGggPSAxO1xuICB9XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgdmFyIHByb3BzSW5kZXggPSAtMTtcbiAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1twcm9wc0luZGV4XTtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLAogICAgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwKICAgICJpbXBvcnQgU2V0Q2FjaGUgZnJvbSAnLi9fU2V0Q2FjaGUuanMnO1xuaW1wb3J0IGFycmF5SW5jbHVkZXMgZnJvbSAnLi9fYXJyYXlJbmNsdWRlcy5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlc1dpdGggZnJvbSAnLi9fYXJyYXlJbmNsdWRlc1dpdGguanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRGlmZmVyZW5jZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBhcnJheXNcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqL1xudmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICA6IFtdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2U7XG4iLAogICAgIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0O1xuIiwKICAgICJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRyb3AoWzEsIDIsIDNdKTtcbiAqIC8vID0+IFsyLCAzXVxuICpcbiAqIF8uZHJvcChbMSwgMiwgM10sIDIpO1xuICogLy8gPT4gWzNdXG4gKlxuICogXy5kcm9wKFsxLCAyLCAzXSwgNSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8uZHJvcChbMSwgMiwgM10sIDApO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGRyb3AoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJvcDtcbiIsCiAgICAiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdKTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gKiAvLyA9PiBbMV1cbiAqXG4gKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDUpO1xuICogLy8gPT4gW11cbiAqXG4gKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDApO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICBuID0gbGVuZ3RoIC0gbjtcbiAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BSaWdodDtcbiIsCiAgICAiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYGlkZW50aXR5YCBpZiBpdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGNhc3QgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhc3RGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgPyB2YWx1ZSA6IGlkZW50aXR5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYXN0RnVuY3Rpb247XG4iLAogICAgImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yRWFjaDtcbiIsCiAgICAiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vZm9yRWFjaC5qcydcbiIsCiAgICAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUV2ZXJ5O1xuIiwKICAgICJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgXG4gKi9cbmZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFdmVyeTtcbiIsCiAgICAiaW1wb3J0IGFycmF5RXZlcnkgZnJvbSAnLi9fYXJyYXlFdmVyeS5qcyc7XG5pbXBvcnQgYmFzZUV2ZXJ5IGZyb20gJy4vX2Jhc2VFdmVyeS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBmb3JcbiAqIFtlbXB0eSBjb2xsZWN0aW9uc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW1wdHlfc2V0KSBiZWNhdXNlXG4gKiBbZXZlcnl0aGluZyBpcyB0cnVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWN1b3VzX3RydXRoKSBvZlxuICogZWxlbWVudHMgb2YgZW1wdHkgY29sbGVjdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXZlcnkoW3RydWUsIDEsIG51bGwsICd5ZXMnXSwgQm9vbGVhbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZXZlcnkodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmV2ZXJ5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RXZlcnkgOiBiYXNlRXZlcnk7XG4gIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSkge1xuICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZXJ5O1xuIiwKICAgICJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VGaWx0ZXI7XG4iLAogICAgImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAqL1xuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmlsdGVyO1xuIiwKICAgICJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbmQ7XG4iLAogICAgImltcG9ydCBiYXNlRmluZEluZGV4IGZyb20gJy4vX2Jhc2VGaW5kSW5kZXguanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgeyAndXNlcic6ICdmcmVkJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gMlxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRJbmRleDtcbiIsCiAgICAiaW1wb3J0IGNyZWF0ZUZpbmQgZnJvbSAnLi9fY3JlYXRlRmluZC5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gKiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKi9cbnZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG5leHBvcnQgZGVmYXVsdCBmaW5kO1xuIiwKICAgICIvKipcbiAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAYWxpYXMgZmlyc3RcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAxXG4gKlxuICogXy5oZWFkKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoZWFkO1xuIiwKICAgICJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9oZWFkLmpzJ1xuIiwKICAgICJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWFwO1xuIiwKICAgICJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VNYXAgZnJvbSAnLi9fYmFzZU1hcC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAqIGBfLmV2ZXJ5YCwgYF8uZmlsdGVyYCwgYF8ubWFwYCwgYF8ubWFwVmFsdWVzYCwgYF8ucmVqZWN0YCwgYW5kIGBfLnNvbWVgLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFyeWAsIGBjaHVua2AsIGBjdXJyeWAsIGBjdXJyeVJpZ2h0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGV2ZXJ5YCxcbiAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICogYHRlbXBsYXRlYCwgYHRyaW1gLCBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBhbmQgYHdvcmRzYFxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIF8ubWFwKFs0LCA4XSwgc3F1YXJlKTtcbiAqIC8vID0+IFsxNiwgNjRdXG4gKlxuICogXy5tYXAoeyAnYSc6IDQsICdiJzogOCB9LCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1hcCh1c2VycywgJ3VzZXInKTtcbiAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICovXG5mdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwO1xuIiwKICAgICJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21hcC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZsYXR0ZW5lZCBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gXG4gKiB0aHJ1IGBpdGVyYXRlZWAgYW5kIGZsYXR0ZW5pbmcgdGhlIG1hcHBlZCByZXN1bHRzLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gKiAgIHJldHVybiBbbiwgbl07XG4gKiB9XG4gKlxuICogXy5mbGF0TWFwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICovXG5mdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCAxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdE1hcDtcbiIsCiAgICAiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3Iob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpLCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JJbjtcbiIsCiAgICAiaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjMuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5mb3JPd25SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yT3duO1xuIiwKICAgICJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgY3JlYXRlQWdncmVnYXRvciBmcm9tICcuL19jcmVhdGVBZ2dyZWdhdG9yLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgb3JkZXIgb2YgZ3JvdXBlZCB2YWx1ZXNcbiAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gKiBrZXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiB7ICc0JzogWzQuMl0sICc2JzogWzYuMSwgNi4zXSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmdyb3VwQnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICovXG52YXIgZ3JvdXBCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBncm91cEJ5O1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlR3QodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA+IG90aGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR3Q7XG4iLAogICAgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhcztcbiIsCiAgICAiaW1wb3J0IGJhc2VIYXMgZnJvbSAnLi9fYmFzZUhhcy5qcyc7XG5pbXBvcnQgaGFzUGF0aCBmcm9tICcuL19oYXNQYXRoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogMiB9IH07XG4gKiB2YXIgb3RoZXIgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXMob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXMob3RoZXIsICdhJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXMob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhcztcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N0cmluZztcbiIsCiAgICAiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG4iLAogICAgImltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlcztcbiIsCiAgICAiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICcuL3ZhbHVlcy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaW5jbHVkZXMoeyAnYSc6IDEsICdiJzogMiB9LCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluY2x1ZGVzKCdhYmNkJywgJ2JjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7XG4gIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICA6ICghIWxlbmd0aCAmJiBiYXNlSW5kZXhPZihjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5jbHVkZXM7XG4iLAogICAgImltcG9ydCBiYXNlSW5kZXhPZiBmcm9tICcuL19iYXNlSW5kZXhPZi5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleE9mO1xuIiwKICAgICJpbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFbXB0eTtcbiIsCiAgICAiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzUmVnRXhwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNSZWdFeHAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gcmVnZXhwVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNSZWdFeHA7XG4iLAogICAgImltcG9ydCBiYXNlSXNSZWdFeHAgZnJvbSAnLi9fYmFzZUlzUmVnRXhwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzUmVnRXhwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNSZWdFeHA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzUmVnRXhwO1xuIiwKICAgICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlTHQodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA8IG90aGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTHQ7XG4iLAogICAgImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XG4gKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICogQHNlZSBfLm1hcEtleXNcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0ge1xuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAqIH07XG4gKlxuICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwVmFsdWVzO1xuIiwKICAgICJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgOiBjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKVxuICAgICAgICApKSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRXh0cmVtdW07XG4iLAogICAgImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlR3QgZnJvbSAnLi9fYmFzZUd0LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBgYXJyYXlgLiBJZiBgYXJyYXlgIGlzIGVtcHR5IG9yIGZhbHNleSxcbiAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gKiAvLyA9PiA4XG4gKlxuICogXy5tYXgoW10pO1xuICogLy8gPT4gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIG1heChhcnJheSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWF4O1xuIiwKICAgICJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUx0IGZyb20gJy4vX2Jhc2VMdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMlxuICpcbiAqIF8ubWluKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbjtcbiIsCiAgICAiaW1wb3J0IGJhc2VFeHRyZW11bSBmcm9tICcuL19iYXNlRXh0cmVtdW0uanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VMdCBmcm9tICcuL19iYXNlTHQuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICpcbiAqIF8ubWluQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAqIC8vID0+IHsgJ24nOiAxIH1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAqIC8vID0+IHsgJ24nOiAxIH1cbiAqL1xuZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbkJ5O1xuIiwKICAgICIvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG5lZ2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJlZGljYXRlIGBmdW5jYC4gVGhlXG4gKiBgZnVuY2AgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGVcbiAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBuZWdhdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAqIH1cbiAqXG4gKiBfLmZpbHRlcihbMSwgMiwgMywgNCwgNSwgNl0sIF8ubmVnYXRlKGlzRXZlbikpO1xuICogLy8gPT4gWzEsIDMsIDVdXG4gKi9cbmZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHtcbiAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMpO1xuICAgICAgY2FzZSAxOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cbiAgICByZXR1cm4gIXByZWRpY2F0ZS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmVnYXRlO1xuIiwKICAgICJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNhc3RQYXRoIGZyb20gJy4vX2Nhc3RQYXRoLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3Qob2JqVmFsdWUpXG4gICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgIG5lc3RlZCA9IG5lc3RlZFtrZXldO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXQ7XG4iLAogICAgImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2tCeTtcbiIsCiAgICAiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUGlja0J5IGZyb20gJy4vX2Jhc2VQaWNrQnkuanMnO1xuaW1wb3J0IGdldEFsbEtleXNJbiBmcm9tICcuL19nZXRBbGxLZXlzSW4uanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAqIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2tCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHBpY2tCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICByZXR1cm4gW3Byb3BdO1xuICB9KTtcbiAgcHJlZGljYXRlID0gYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSk7XG4gIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHByZWRpY2F0ZSh2YWx1ZSwgcGF0aFswXSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwaWNrQnk7XG4iLAogICAgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICogc29ydCBvcmRlciBvZiBgYXJyYXlgIGFuZCByZXBsYWNlcyBjcml0ZXJpYSBvYmplY3RzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZ1xuICogdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBhcnJheVtsZW5ndGhdID0gYXJyYXlbbGVuZ3RoXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTb3J0Qnk7XG4iLAogICAgImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqXG4gKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgaWYgKHZhbHVlICE9PSBvdGhlcikge1xuICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgIG90aElzTnVsbCA9IG90aGVyID09PSBudWxsLFxuICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICBpZiAoKCFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sICYmICF2YWxJc1N5bWJvbCAmJiB2YWx1ZSA+IG90aGVyKSB8fFxuICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgKCF2YWxJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgIChvdGhJc051bGwgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wYXJlQXNjZW5kaW5nO1xuIiwKICAgICJpbXBvcnQgY29tcGFyZUFzY2VuZGluZyBmcm9tICcuL19jb21wYXJlQXNjZW5kaW5nLmpzJztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAqIGFuZCBzdGFibGUgc29ydCB0aGVtLlxuICpcbiAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gKiBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvciBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyXG4gKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFuW118c3RyaW5nW119IG9yZGVycyBUaGUgb3JkZXIgdG8gc29ydCBieSBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgb3RoQ3JpdGVyaWEgPSBvdGhlci5jcml0ZXJpYSxcbiAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcmVzdWx0ID0gY29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sIG90aENyaXRlcmlhW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgaWYgKGluZGV4ID49IG9yZGVyc0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIG9yZGVyID0gb3JkZXJzW2luZGV4XTtcbiAgICAgIHJldHVybiByZXN1bHQgKiAob3JkZXIgPT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICB9XG4gIH1cbiAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAvLyBgb2JqZWN0YCBhbmQgYG90aGVyYC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9wdWxsLzEyNDdcbiAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgLy9cbiAgLy8gVGhpcyBhbHNvIGVuc3VyZXMgYSBzdGFibGUgc29ydCBpbiBWOCBhbmQgb3RoZXIgZW5naW5lcy5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG4gIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcGFyZU11bHRpcGxlO1xuIiwKICAgICJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZU1hcCBmcm9tICcuL19iYXNlTWFwLmpzJztcbmltcG9ydCBiYXNlU29ydEJ5IGZyb20gJy4vX2Jhc2VTb3J0QnkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvbXBhcmVNdWx0aXBsZSBmcm9tICcuL19jb21wYXJlTXVsdGlwbGUuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5vcmRlckJ5YCB3aXRob3V0IHBhcmFtIGd1YXJkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpIHtcbiAgaWYgKGl0ZXJhdGVlcy5sZW5ndGgpIHtcbiAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICBpZiAoaXNBcnJheShpdGVyYXRlZSkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGJhc2VHZXQodmFsdWUsIGl0ZXJhdGVlLmxlbmd0aCA9PT0gMSA/IGl0ZXJhdGVlWzBdIDogaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlcmF0ZWU7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZWVzID0gW2lkZW50aXR5XTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IC0xO1xuICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU9yZGVyQnk7XG4iLAogICAgImltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBzaXplIG9mIGFuIEFTQ0lJIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG52YXIgYXNjaWlTaXplID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxuZXhwb3J0IGRlZmF1bHQgYXNjaWlTaXplO1xuIiwKICAgICIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IHJlVW5pY29kZS5sYXN0SW5kZXggPSAwO1xuICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICsrcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVTaXplO1xuIiwKICAgICJpbXBvcnQgYXNjaWlTaXplIGZyb20gJy4vX2FzY2lpU2l6ZS5qcyc7XG5pbXBvcnQgaGFzVW5pY29kZSBmcm9tICcuL19oYXNVbmljb2RlLmpzJztcbmltcG9ydCB1bmljb2RlU2l6ZSBmcm9tICcuL191bmljb2RlU2l6ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgaW4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1NpemUoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICA6IGFzY2lpU2l6ZShzdHJpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdTaXplO1xuIiwKICAgICJpbXBvcnQgYmFzZVBpY2tCeSBmcm9tICcuL19iYXNlUGlja0J5LmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5waWNrYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAqIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgcmV0dXJuIGhhc0luKG9iamVjdCwgcGF0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUGljaztcbiIsCiAgICAiaW1wb3J0IGJhc2VQaWNrIGZyb20gJy4vX2Jhc2VQaWNrLmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBgb2JqZWN0YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5waWNrKG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIHBpY2sgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHt9IDogYmFzZVBpY2sob2JqZWN0LCBwYXRocyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcGljaztcbiIsCiAgICAiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZ2VgIGFuZCBgXy5yYW5nZVJpZ2h0YCB3aGljaCBkb2Vzbid0XG4gKiBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RlcCBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICovXG5mdW5jdGlvbiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZCAtIHN0YXJ0KSAvIChzdGVwIHx8IDEpKSwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHJlc3VsdFtmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XSA9IHN0YXJ0O1xuICAgIHN0YXJ0ICs9IHN0ZXA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJhbmdlO1xuIiwKICAgICJpbXBvcnQgYmFzZVJhbmdlIGZyb20gJy4vX2Jhc2VSYW5nZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvRmluaXRlIGZyb20gJy4vdG9GaW5pdGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJhbmdlO1xuIiwKICAgICJpbXBvcnQgY3JlYXRlUmFuZ2UgZnJvbSAnLi9fY3JlYXRlUmFuZ2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbmdlO1xuIiwKICAgICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlZHVjZWAgYW5kIGBfLnJlZHVjZVJpZ2h0YCwgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmAgdXNpbmcgYGVhY2hGdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRBY2N1bSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVsZW1lbnQgb2ZcbiAqICBgY29sbGVjdGlvbmAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgZWFjaEZ1bmMpIHtcbiAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpbml0QWNjdW1cbiAgICAgID8gKGluaXRBY2N1bSA9IGZhbHNlLCB2YWx1ZSlcbiAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZWR1Y2U7XG4iLAogICAgImltcG9ydCBhcnJheVJlZHVjZSBmcm9tICcuL19hcnJheVJlZHVjZS5qcyc7XG5pbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZWR1Y2UgZnJvbSAnLi9fYmFzZVJlZHVjZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFJlZHVjZXMgYGNvbGxlY3Rpb25gIHRvIGEgdmFsdWUgd2hpY2ggaXMgdGhlIGFjY3VtdWxhdGVkIHJlc3VsdCBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYCwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gKiB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czpcbiAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICpcbiAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gKiBhbmQgYHNvcnRCeWBcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAc2VlIF8ucmVkdWNlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yZWR1Y2UoWzEsIDJdLCBmdW5jdGlvbihzdW0sIG4pIHtcbiAqICAgcmV0dXJuIHN1bSArIG47XG4gKiB9LCAwKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiAgIHJldHVybiByZXN1bHQ7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2UgOiBiYXNlUmVkdWNlLFxuICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZWR1Y2U7XG4iLAogICAgImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbmVnYXRlIGZyb20gJy4vbmVnYXRlLmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gKiB0aGF0IGBwcmVkaWNhdGVgIGRvZXMgKipub3QqKiByZXR1cm4gdHJ1dGh5IGZvci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8uZmlsdGVyXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlamVjdDtcbiIsCiAgICAiaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAgYnkgcmV0dXJuaW5nIGl0cyBsZW5ndGggZm9yIGFycmF5LWxpa2VcbiAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zaXplKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiAyXG4gKlxuICogXy5zaXplKCdwZWJibGVzJyk7XG4gKiAvLyA9PiA3XG4gKi9cbmZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcoY29sbGVjdGlvbik7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICB9XG4gIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpemU7XG4iLAogICAgImltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29tZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0O1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiAhcmVzdWx0O1xuICB9KTtcbiAgcmV0dXJuICEhcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU29tZTtcbiIsCiAgICAiaW1wb3J0IGFycmF5U29tZSBmcm9tICcuL19hcnJheVNvbWUuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VTb21lIGZyb20gJy4vX2Jhc2VTb21lLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbnkqKiBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYC5cbiAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc29tZShbbnVsbCwgMCwgJ3llcycsIGZhbHNlXSwgQm9vbGVhbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAqIF07XG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29tZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTtcbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29tZTtcbiIsCiAgICAiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBiYXNlT3JkZXJCeSBmcm9tICcuL19iYXNlT3JkZXJCeS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSByZXN1bHRzIG9mXG4gKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gKiBlcXVhbCBlbGVtZW50cy4gVGhlIGl0ZXJhdGVlcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiAzMCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gKiBdO1xuICpcbiAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDMwXV1cbiAqXG4gKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDMwXSwgWydmcmVkJywgNDhdXVxuICovXG52YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPiAxICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdKSkge1xuICAgIGl0ZXJhdGVlcyA9IFtdO1xuICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICBpdGVyYXRlZXMgPSBbaXRlcmF0ZWVzWzBdXTtcbiAgfVxuICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRCeTtcbiIsCiAgICAiaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IG5vb3AgZnJvbSAnLi9ub29wLmpzJztcbmltcG9ydCBzZXRUb0FycmF5IGZyb20gJy4vX3NldFRvQXJyYXkuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gKi9cbnZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0wXSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTZXQ7XG4iLAogICAgImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlcyBmcm9tICcuL19hcnJheUluY2x1ZGVzLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzV2l0aCBmcm9tICcuL19hcnJheUluY2x1ZGVzV2l0aC5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuaW1wb3J0IGNyZWF0ZVNldCBmcm9tICcuL19jcmVhdGVTZXQuanMnO1xuaW1wb3J0IHNldFRvQXJyYXkgZnJvbSAnLi9fc2V0VG9BcnJheS5qcyc7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmlxO1xuIiwKICAgICJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbjtcbiIsCiAgICAiaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiBhbiBhcnJheSwgdXNpbmdcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGluIHdoaWNoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gKiBpcyBrZXB0LiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyXG4gKiBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG5mdW5jdGlvbiB1bmlxKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5KSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bmlxO1xuIiwKICAgICJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVVuaXEgZnJvbSAnLi9fYmFzZVVuaXEuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiBbMi4xLCAxLjJdXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAqL1xuZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pcUJ5O1xuIiwKICAgICJpbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuICovXG52YXIgaWRDb3VudGVyID0gMDtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQuIElmIGBwcmVmaXhgIGlzIGdpdmVuLCB0aGUgSUQgaXMgYXBwZW5kZWQgdG8gaXQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJlZml4PScnXSBUaGUgdmFsdWUgdG8gcHJlZml4IHRoZSBJRCB3aXRoLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICogLy8gPT4gJ2NvbnRhY3RfMTA0J1xuICpcbiAqIF8udW5pcXVlSWQoKTtcbiAqIC8vID0+ICcxMDUnXG4gKi9cbmZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICB2YXIgaWQgPSArK2lkQ291bnRlcjtcbiAgcmV0dXJuIHRvU3RyaW5nKHByZWZpeCkgKyBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pcXVlSWQ7XG4iLAogICAgIi8qKlxuICogVGhpcyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnppcE9iamVjdGAgd2hpY2ggYXNzaWducyB2YWx1ZXMgdXNpbmcgYGFzc2lnbkZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICBhc3NpZ25GdW5jKHJlc3VsdCwgcHJvcHNbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVppcE9iamVjdDtcbiIsCiAgICAiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlWmlwT2JqZWN0IGZyb20gJy4vX2Jhc2VaaXBPYmplY3QuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZnJvbVBhaXJzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHR3byBhcnJheXMsXG4gKiBvbmUgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMgYW5kIG9uZSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlcz1bXV0gVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uemlwT2JqZWN0KFsnYScsICdiJ10sIFsxLCAyXSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xuZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYXNzaWduVmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB6aXBPYmplY3Q7XG4iLAogICAgIi8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIEJ1aWxkOiBgbG9kYXNoIG1vZHVsYXJpemUgZXhwb3J0cz1cImVzXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+XG4gKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+XG4gKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPlxuICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4gKi9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWRkIH0gZnJvbSAnLi9hZGQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhZnRlciB9IGZyb20gJy4vYWZ0ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnkgfSBmcm9tICcuL2FyeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzc2lnbiB9IGZyb20gJy4vYXNzaWduLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXNzaWduSW4gfSBmcm9tICcuL2Fzc2lnbkluLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXNzaWduSW5XaXRoIH0gZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3NpZ25XaXRoIH0gZnJvbSAnLi9hc3NpZ25XaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXQgfSBmcm9tICcuL2F0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXR0ZW1wdCB9IGZyb20gJy4vYXR0ZW1wdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlZm9yZSB9IGZyb20gJy4vYmVmb3JlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmluZCB9IGZyb20gJy4vYmluZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJpbmRBbGwgfSBmcm9tICcuL2JpbmRBbGwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBiaW5kS2V5IH0gZnJvbSAnLi9iaW5kS2V5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2FtZWxDYXNlIH0gZnJvbSAnLi9jYW1lbENhc2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjYXBpdGFsaXplIH0gZnJvbSAnLi9jYXBpdGFsaXplLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2FzdEFycmF5IH0gZnJvbSAnLi9jYXN0QXJyYXkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjZWlsIH0gZnJvbSAnLi9jZWlsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2hhaW4gfSBmcm9tICcuL2NoYWluLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2h1bmsgfSBmcm9tICcuL2NodW5rLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhbXAgfSBmcm9tICcuL2NsYW1wLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xvbmUgfSBmcm9tICcuL2Nsb25lLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xvbmVEZWVwIH0gZnJvbSAnLi9jbG9uZURlZXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbG9uZURlZXBXaXRoIH0gZnJvbSAnLi9jbG9uZURlZXBXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xvbmVXaXRoIH0gZnJvbSAnLi9jbG9uZVdpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21taXQgfSBmcm9tICcuL2NvbW1pdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXBhY3QgfSBmcm9tICcuL2NvbXBhY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25jYXQgfSBmcm9tICcuL2NvbmNhdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbmQgfSBmcm9tICcuL2NvbmQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25mb3JtcyB9IGZyb20gJy4vY29uZm9ybXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25mb3Jtc1RvIH0gZnJvbSAnLi9jb25mb3Jtc1RvLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29uc3RhbnQgfSBmcm9tICcuL2NvbnN0YW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY291bnRCeSB9IGZyb20gJy4vY291bnRCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZSB9IGZyb20gJy4vY3JlYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3VycnkgfSBmcm9tICcuL2N1cnJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3VycnlSaWdodCB9IGZyb20gJy4vY3VycnlSaWdodC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlYm91bmNlIH0gZnJvbSAnLi9kZWJvdW5jZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlYnVyciB9IGZyb20gJy4vZGVidXJyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdFRvIH0gZnJvbSAnLi9kZWZhdWx0VG8uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWZhdWx0c0RlZXAgfSBmcm9tICcuL2RlZmF1bHRzRGVlcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlZmVyIH0gZnJvbSAnLi9kZWZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlbGF5IH0gZnJvbSAnLi9kZWxheS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpZmZlcmVuY2UgfSBmcm9tICcuL2RpZmZlcmVuY2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkaWZmZXJlbmNlQnkgfSBmcm9tICcuL2RpZmZlcmVuY2VCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpZmZlcmVuY2VXaXRoIH0gZnJvbSAnLi9kaWZmZXJlbmNlV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpdmlkZSB9IGZyb20gJy4vZGl2aWRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcCB9IGZyb20gJy4vZHJvcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRyb3BSaWdodCB9IGZyb20gJy4vZHJvcFJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcFJpZ2h0V2hpbGUgfSBmcm9tICcuL2Ryb3BSaWdodFdoaWxlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcFdoaWxlIH0gZnJvbSAnLi9kcm9wV2hpbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlYWNoIH0gZnJvbSAnLi9lYWNoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZWFjaFJpZ2h0IH0gZnJvbSAnLi9lYWNoUmlnaHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbmRzV2l0aCB9IGZyb20gJy4vZW5kc1dpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlbnRyaWVzIH0gZnJvbSAnLi9lbnRyaWVzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW50cmllc0luIH0gZnJvbSAnLi9lbnRyaWVzSW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlcSB9IGZyb20gJy4vZXEuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlc2NhcGUgfSBmcm9tICcuL2VzY2FwZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vZXNjYXBlUmVnRXhwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlcnkgfSBmcm9tICcuL2V2ZXJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXh0ZW5kIH0gZnJvbSAnLi9leHRlbmQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBleHRlbmRXaXRoIH0gZnJvbSAnLi9leHRlbmRXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmlsbCB9IGZyb20gJy4vZmlsbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbHRlciB9IGZyb20gJy4vZmlsdGVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmluZCB9IGZyb20gJy4vZmluZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbmRJbmRleCB9IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmluZEtleSB9IGZyb20gJy4vZmluZEtleS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbmRMYXN0IH0gZnJvbSAnLi9maW5kTGFzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbmRMYXN0SW5kZXggfSBmcm9tICcuL2ZpbmRMYXN0SW5kZXguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmaW5kTGFzdEtleSB9IGZyb20gJy4vZmluZExhc3RLZXkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmaXJzdCB9IGZyb20gJy4vZmlyc3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGF0TWFwIH0gZnJvbSAnLi9mbGF0TWFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdE1hcERlZXAgfSBmcm9tICcuL2ZsYXRNYXBEZWVwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdE1hcERlcHRoIH0gZnJvbSAnLi9mbGF0TWFwRGVwdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGF0dGVuIH0gZnJvbSAnLi9mbGF0dGVuLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdHRlbkRlZXAgfSBmcm9tICcuL2ZsYXR0ZW5EZWVwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxhdHRlbkRlcHRoIH0gZnJvbSAnLi9mbGF0dGVuRGVwdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGlwIH0gZnJvbSAnLi9mbGlwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvb3IgfSBmcm9tICcuL2Zsb29yLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvdyB9IGZyb20gJy4vZmxvdy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsb3dSaWdodCB9IGZyb20gJy4vZmxvd1JpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9yRWFjaCB9IGZyb20gJy4vZm9yRWFjaC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZvckVhY2hSaWdodCB9IGZyb20gJy4vZm9yRWFjaFJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9ySW4gfSBmcm9tICcuL2ZvckluLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9ySW5SaWdodCB9IGZyb20gJy4vZm9ySW5SaWdodC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZvck93biB9IGZyb20gJy4vZm9yT3duLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZm9yT3duUmlnaHQgfSBmcm9tICcuL2Zvck93blJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZnJvbVBhaXJzIH0gZnJvbSAnLi9mcm9tUGFpcnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmdW5jdGlvbnMgfSBmcm9tICcuL2Z1bmN0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZ1bmN0aW9uc0luIH0gZnJvbSAnLi9mdW5jdGlvbnNJbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdldCB9IGZyb20gJy4vZ2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ3JvdXBCeSB9IGZyb20gJy4vZ3JvdXBCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGd0IH0gZnJvbSAnLi9ndC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGd0ZSB9IGZyb20gJy4vZ3RlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGFzIH0gZnJvbSAnLi9oYXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoYXNJbiB9IGZyb20gJy4vaGFzSW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkIH0gZnJvbSAnLi9oZWFkLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaWRlbnRpdHkgfSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW5SYW5nZSB9IGZyb20gJy4vaW5SYW5nZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGluY2x1ZGVzIH0gZnJvbSAnLi9pbmNsdWRlcy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGluZGV4T2YgfSBmcm9tICcuL2luZGV4T2YuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbml0aWFsIH0gZnJvbSAnLi9pbml0aWFsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW50ZXJzZWN0aW9uIH0gZnJvbSAnLi9pbnRlcnNlY3Rpb24uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnRlcnNlY3Rpb25CeSB9IGZyb20gJy4vaW50ZXJzZWN0aW9uQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnRlcnNlY3Rpb25XaXRoIH0gZnJvbSAnLi9pbnRlcnNlY3Rpb25XaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW52ZXJ0IH0gZnJvbSAnLi9pbnZlcnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnZlcnRCeSB9IGZyb20gJy4vaW52ZXJ0QnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbnZva2UgfSBmcm9tICcuL2ludm9rZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGludm9rZU1hcCB9IGZyb20gJy4vaW52b2tlTWFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNBcmd1bWVudHMgfSBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNBcnJheSB9IGZyb20gJy4vaXNBcnJheS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzQXJyYXlCdWZmZXIgfSBmcm9tICcuL2lzQXJyYXlCdWZmZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0FycmF5TGlrZSB9IGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0FycmF5TGlrZU9iamVjdCB9IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0Jvb2xlYW4gfSBmcm9tICcuL2lzQm9vbGVhbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzQnVmZmVyIH0gZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzRGF0ZSB9IGZyb20gJy4vaXNEYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNFbGVtZW50IH0gZnJvbSAnLi9pc0VsZW1lbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0VtcHR5IH0gZnJvbSAnLi9pc0VtcHR5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNFcXVhbCB9IGZyb20gJy4vaXNFcXVhbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzRXF1YWxXaXRoIH0gZnJvbSAnLi9pc0VxdWFsV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzRXJyb3IgfSBmcm9tICcuL2lzRXJyb3IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0Zpbml0ZSB9IGZyb20gJy4vaXNGaW5pdGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNJbnRlZ2VyIH0gZnJvbSAnLi9pc0ludGVnZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc0xlbmd0aCB9IGZyb20gJy4vaXNMZW5ndGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc01hcCB9IGZyb20gJy4vaXNNYXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc01hdGNoIH0gZnJvbSAnLi9pc01hdGNoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNNYXRjaFdpdGggfSBmcm9tICcuL2lzTWF0Y2hXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOYU4gfSBmcm9tICcuL2lzTmFOLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOYXRpdmUgfSBmcm9tICcuL2lzTmF0aXZlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOaWwgfSBmcm9tICcuL2lzTmlsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNOdWxsIH0gZnJvbSAnLi9pc051bGwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc051bWJlciB9IGZyb20gJy4vaXNOdW1iZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc09iamVjdCB9IGZyb20gJy4vaXNPYmplY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc09iamVjdExpa2UgfSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzUGxhaW5PYmplY3QgfSBmcm9tICcuL2lzUGxhaW5PYmplY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1JlZ0V4cCB9IGZyb20gJy4vaXNSZWdFeHAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1NhZmVJbnRlZ2VyIH0gZnJvbSAnLi9pc1NhZmVJbnRlZ2VyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNTZXQgfSBmcm9tICcuL2lzU2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNTdHJpbmcgfSBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNTeW1ib2wgfSBmcm9tICcuL2lzU3ltYm9sLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNUeXBlZEFycmF5IH0gZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1VuZGVmaW5lZCB9IGZyb20gJy4vaXNVbmRlZmluZWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1dlYWtNYXAgfSBmcm9tICcuL2lzV2Vha01hcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzV2Vha1NldCB9IGZyb20gJy4vaXNXZWFrU2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXRlcmF0ZWUgfSBmcm9tICcuL2l0ZXJhdGVlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgam9pbiB9IGZyb20gJy4vam9pbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtlYmFiQ2FzZSB9IGZyb20gJy4va2ViYWJDYXNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5QnkgfSBmcm9tICcuL2tleUJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2V5cyB9IGZyb20gJy4va2V5cy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleXNJbiB9IGZyb20gJy4va2V5c0luLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGFzdCB9IGZyb20gJy4vbGFzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGxhc3RJbmRleE9mIH0gZnJvbSAnLi9sYXN0SW5kZXhPZi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGxvZGFzaCB9IGZyb20gJy4vd3JhcHBlckxvZGFzaC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGxvd2VyQ2FzZSB9IGZyb20gJy4vbG93ZXJDYXNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbG93ZXJGaXJzdCB9IGZyb20gJy4vbG93ZXJGaXJzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGx0IH0gZnJvbSAnLi9sdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGx0ZSB9IGZyb20gJy4vbHRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWFwIH0gZnJvbSAnLi9tYXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXBLZXlzIH0gZnJvbSAnLi9tYXBLZXlzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWFwVmFsdWVzIH0gZnJvbSAnLi9tYXBWYWx1ZXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXRjaGVzIH0gZnJvbSAnLi9tYXRjaGVzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWF0Y2hlc1Byb3BlcnR5IH0gZnJvbSAnLi9tYXRjaGVzUHJvcGVydHkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtYXggfSBmcm9tICcuL21heC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1heEJ5IH0gZnJvbSAnLi9tYXhCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1lYW4gfSBmcm9tICcuL21lYW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZWFuQnkgfSBmcm9tICcuL21lYW5CeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1lbW9pemUgfSBmcm9tICcuL21lbW9pemUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXJnZSB9IGZyb20gJy4vbWVyZ2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXJnZVdpdGggfSBmcm9tICcuL21lcmdlV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZCB9IGZyb20gJy4vbWV0aG9kLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWV0aG9kT2YgfSBmcm9tICcuL21ldGhvZE9mLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWluIH0gZnJvbSAnLi9taW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtaW5CeSB9IGZyb20gJy4vbWluQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtaXhpbiB9IGZyb20gJy4vbWl4aW4uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtdWx0aXBseSB9IGZyb20gJy4vbXVsdGlwbHkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBuZWdhdGUgfSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5leHQgfSBmcm9tICcuL25leHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub29wIH0gZnJvbSAnLi9ub29wLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbm93IH0gZnJvbSAnLi9ub3cuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBudGggfSBmcm9tICcuL250aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG50aEFyZyB9IGZyb20gJy4vbnRoQXJnLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb21pdCB9IGZyb20gJy4vb21pdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9taXRCeSB9IGZyb20gJy4vb21pdEJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb25jZSB9IGZyb20gJy4vb25jZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9yZGVyQnkgfSBmcm9tICcuL29yZGVyQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvdmVyIH0gZnJvbSAnLi9vdmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3ZlckFyZ3MgfSBmcm9tICcuL292ZXJBcmdzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3ZlckV2ZXJ5IH0gZnJvbSAnLi9vdmVyRXZlcnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvdmVyU29tZSB9IGZyb20gJy4vb3ZlclNvbWUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYWQgfSBmcm9tICcuL3BhZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhZEVuZCB9IGZyb20gJy4vcGFkRW5kLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFkU3RhcnQgfSBmcm9tICcuL3BhZFN0YXJ0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyc2VJbnQgfSBmcm9tICcuL3BhcnNlSW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydGlhbCB9IGZyb20gJy4vcGFydGlhbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRpYWxSaWdodCB9IGZyb20gJy4vcGFydGlhbFJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFydGl0aW9uIH0gZnJvbSAnLi9wYXJ0aXRpb24uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwaWNrIH0gZnJvbSAnLi9waWNrLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGlja0J5IH0gZnJvbSAnLi9waWNrQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwbGFudCB9IGZyb20gJy4vcGxhbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcm9wZXJ0eSB9IGZyb20gJy4vcHJvcGVydHkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcm9wZXJ0eU9mIH0gZnJvbSAnLi9wcm9wZXJ0eU9mLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHVsbCB9IGZyb20gJy4vcHVsbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB1bGxBbGwgfSBmcm9tICcuL3B1bGxBbGwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwdWxsQWxsQnkgfSBmcm9tICcuL3B1bGxBbGxCeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB1bGxBbGxXaXRoIH0gZnJvbSAnLi9wdWxsQWxsV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHB1bGxBdCB9IGZyb20gJy4vcHVsbEF0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmFuZG9tIH0gZnJvbSAnLi9yYW5kb20uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByYW5nZSB9IGZyb20gJy4vcmFuZ2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByYW5nZVJpZ2h0IH0gZnJvbSAnLi9yYW5nZVJpZ2h0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVhcmcgfSBmcm9tICcuL3JlYXJnLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVkdWNlIH0gZnJvbSAnLi9yZWR1Y2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZWR1Y2VSaWdodCB9IGZyb20gJy4vcmVkdWNlUmlnaHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZWplY3QgfSBmcm9tICcuL3JlamVjdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlbW92ZSB9IGZyb20gJy4vcmVtb3ZlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVwZWF0IH0gZnJvbSAnLi9yZXBlYXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZXBsYWNlIH0gZnJvbSAnLi9yZXBsYWNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzdCB9IGZyb20gJy4vcmVzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3VsdCB9IGZyb20gJy4vcmVzdWx0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmV2ZXJzZSB9IGZyb20gJy4vcmV2ZXJzZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdW5kIH0gZnJvbSAnLi9yb3VuZC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNhbXBsZSB9IGZyb20gJy4vc2FtcGxlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2FtcGxlU2l6ZSB9IGZyb20gJy4vc2FtcGxlU2l6ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNldCB9IGZyb20gJy4vc2V0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0V2l0aCB9IGZyb20gJy4vc2V0V2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNodWZmbGUgfSBmcm9tICcuL3NodWZmbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzaXplIH0gZnJvbSAnLi9zaXplLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2xpY2UgfSBmcm9tICcuL3NsaWNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc25ha2VDYXNlIH0gZnJvbSAnLi9zbmFrZUNhc2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb21lIH0gZnJvbSAnLi9zb21lLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydEJ5IH0gZnJvbSAnLi9zb3J0QnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb3J0ZWRJbmRleCB9IGZyb20gJy4vc29ydGVkSW5kZXguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb3J0ZWRJbmRleEJ5IH0gZnJvbSAnLi9zb3J0ZWRJbmRleEJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkSW5kZXhPZiB9IGZyb20gJy4vc29ydGVkSW5kZXhPZi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNvcnRlZExhc3RJbmRleCB9IGZyb20gJy4vc29ydGVkTGFzdEluZGV4LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkTGFzdEluZGV4QnkgfSBmcm9tICcuL3NvcnRlZExhc3RJbmRleEJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkTGFzdEluZGV4T2YgfSBmcm9tICcuL3NvcnRlZExhc3RJbmRleE9mLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc29ydGVkVW5pcSB9IGZyb20gJy4vc29ydGVkVW5pcS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNvcnRlZFVuaXFCeSB9IGZyb20gJy4vc29ydGVkVW5pcUJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BsaXQgfSBmcm9tICcuL3NwbGl0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3ByZWFkIH0gZnJvbSAnLi9zcHJlYWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGFydENhc2UgfSBmcm9tICcuL3N0YXJ0Q2FzZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXJ0c1dpdGggfSBmcm9tICcuL3N0YXJ0c1dpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHViQXJyYXkgfSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0dWJGYWxzZSB9IGZyb20gJy4vc3R1YkZhbHNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R1Yk9iamVjdCB9IGZyb20gJy4vc3R1Yk9iamVjdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0dWJTdHJpbmcgfSBmcm9tICcuL3N0dWJTdHJpbmcuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHViVHJ1ZSB9IGZyb20gJy4vc3R1YlRydWUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdWJ0cmFjdCB9IGZyb20gJy4vc3VidHJhY3QuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdW0gfSBmcm9tICcuL3N1bS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN1bUJ5IH0gZnJvbSAnLi9zdW1CeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhaWwgfSBmcm9tICcuL3RhaWwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWtlIH0gZnJvbSAnLi90YWtlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFrZVJpZ2h0IH0gZnJvbSAnLi90YWtlUmlnaHQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWtlUmlnaHRXaGlsZSB9IGZyb20gJy4vdGFrZVJpZ2h0V2hpbGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YWtlV2hpbGUgfSBmcm9tICcuL3Rha2VXaGlsZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhcCB9IGZyb20gJy4vdGFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVTZXR0aW5ncyB9IGZyb20gJy4vdGVtcGxhdGVTZXR0aW5ncy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRocm90dGxlIH0gZnJvbSAnLi90aHJvdHRsZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRocnUgfSBmcm9tICcuL3RocnUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0aW1lcyB9IGZyb20gJy4vdGltZXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0FycmF5IH0gZnJvbSAnLi90b0FycmF5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9GaW5pdGUgfSBmcm9tICcuL3RvRmluaXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9JbnRlZ2VyIH0gZnJvbSAnLi90b0ludGVnZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0l0ZXJhdG9yIH0gZnJvbSAnLi90b0l0ZXJhdG9yLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9KU09OIH0gZnJvbSAnLi90b0pTT04uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0xlbmd0aCB9IGZyb20gJy4vdG9MZW5ndGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b0xvd2VyIH0gZnJvbSAnLi90b0xvd2VyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9OdW1iZXIgfSBmcm9tICcuL3RvTnVtYmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9QYWlycyB9IGZyb20gJy4vdG9QYWlycy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRvUGFpcnNJbiB9IGZyb20gJy4vdG9QYWlyc0luLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9QYXRoIH0gZnJvbSAnLi90b1BhdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0b1BsYWluT2JqZWN0IH0gZnJvbSAnLi90b1BsYWluT2JqZWN0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdG9TYWZlSW50ZWdlciB9IGZyb20gJy4vdG9TYWZlSW50ZWdlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRvU3RyaW5nIH0gZnJvbSAnLi90b1N0cmluZy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRvVXBwZXIgfSBmcm9tICcuL3RvVXBwZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmFuc2Zvcm0gfSBmcm9tICcuL3RyYW5zZm9ybS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyaW0gfSBmcm9tICcuL3RyaW0uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmltRW5kIH0gZnJvbSAnLi90cmltRW5kLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHJpbVN0YXJ0IH0gZnJvbSAnLi90cmltU3RhcnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cnVuY2F0ZSB9IGZyb20gJy4vdHJ1bmNhdGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmFyeSB9IGZyb20gJy4vdW5hcnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlvbiB9IGZyb20gJy4vdW5pb24uanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlvbkJ5IH0gZnJvbSAnLi91bmlvbkJ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5pb25XaXRoIH0gZnJvbSAnLi91bmlvbldpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlxIH0gZnJvbSAnLi91bmlxLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5pcUJ5IH0gZnJvbSAnLi91bmlxQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlxV2l0aCB9IGZyb20gJy4vdW5pcVdpdGguanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bmlxdWVJZCB9IGZyb20gJy4vdW5pcXVlSWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnNldCB9IGZyb20gJy4vdW5zZXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnppcCB9IGZyb20gJy4vdW56aXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnppcFdpdGggfSBmcm9tICcuL3VuemlwV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVwZGF0ZSB9IGZyb20gJy4vdXBkYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXBkYXRlV2l0aCB9IGZyb20gJy4vdXBkYXRlV2l0aC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVwcGVyQ2FzZSB9IGZyb20gJy4vdXBwZXJDYXNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXBwZXJGaXJzdCB9IGZyb20gJy4vdXBwZXJGaXJzdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbHVlIH0gZnJvbSAnLi92YWx1ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbHVlT2YgfSBmcm9tICcuL3ZhbHVlT2YuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2YWx1ZXMgfSBmcm9tICcuL3ZhbHVlcy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbHVlc0luIH0gZnJvbSAnLi92YWx1ZXNJbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhvdXQgfSBmcm9tICcuL3dpdGhvdXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3b3JkcyB9IGZyb20gJy4vd29yZHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwIH0gZnJvbSAnLi93cmFwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd3JhcHBlckF0IH0gZnJvbSAnLi93cmFwcGVyQXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyQ2hhaW4gfSBmcm9tICcuL3dyYXBwZXJDaGFpbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJDb21taXQgfSBmcm9tICcuL2NvbW1pdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJMb2Rhc2ggfSBmcm9tICcuL3dyYXBwZXJMb2Rhc2guanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyTmV4dCB9IGZyb20gJy4vbmV4dC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJQbGFudCB9IGZyb20gJy4vcGxhbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyUmV2ZXJzZSB9IGZyb20gJy4vd3JhcHBlclJldmVyc2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3cmFwcGVyVG9JdGVyYXRvciB9IGZyb20gJy4vdG9JdGVyYXRvci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHdyYXBwZXJWYWx1ZSB9IGZyb20gJy4vd3JhcHBlclZhbHVlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgeG9yIH0gZnJvbSAnLi94b3IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB4b3JCeSB9IGZyb20gJy4veG9yQnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB4b3JXaXRoIH0gZnJvbSAnLi94b3JXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgemlwIH0gZnJvbSAnLi96aXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB6aXBPYmplY3QgfSBmcm9tICcuL3ppcE9iamVjdC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHppcE9iamVjdERlZXAgfSBmcm9tICcuL3ppcE9iamVjdERlZXAuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB6aXBXaXRoIH0gZnJvbSAnLi96aXBXaXRoLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuL2xvZGFzaC5kZWZhdWx0LmpzJztcbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG52YXIgREVGQVVMVF9FREdFX05BTUUgPSAnXFx4MDAnO1xudmFyIEdSQVBIX05PREUgPSAnXFx4MDAnO1xudmFyIEVER0VfS0VZX0RFTElNID0gJ1xceDAxJztcblxuLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6XG4vL1xuLy8gICogTm9kZSBpZCBxdWVyeSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBzdHJpbmcgaWRzIGZvciB0aGUgbm9kZXNcbi8vICAqIEVkZ2UgaWQgcXVlcnkgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gXCJlZGdlT2JqXCIsIGVkZ2Ugb2JqZWN0LCB0aGF0IGlzXG4vLyAgICBjb21wb3NlZCBvZiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gZWRnZToge3YsIHcsIG5hbWV9LlxuLy8gICogSW50ZXJuYWxseSB3ZSB1c2UgYW4gXCJlZGdlSWRcIiwgYSBzdHJpbmdpZmllZCBmb3JtIG9mIHRoZSBlZGdlT2JqLCB0b1xuLy8gICAgcmVmZXJlbmNlIGVkZ2VzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCBhIHBlcmZvcm1hbnQgd2F5IHRvIGxvb2sgdGhlc2Vcbi8vICAgIGVkZ2VzIHVwIGFuZCwgb2JqZWN0IHByb3BlcnRpZXMsIHdoaWNoIGhhdmUgc3RyaW5nIGtleXMsIGFyZSB0aGUgY2xvc2VzdFxuLy8gICAgd2UncmUgZ29pbmcgdG8gZ2V0IHRvIGEgcGVyZm9ybWFudCBoYXNodGFibGUgaW4gSmF2YVNjcmlwdC5cblxuLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6XG4vL1xuLy8gICogTm9kZSBpZCBxdWVyeSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBzdHJpbmcgaWRzIGZvciB0aGUgbm9kZXNcbi8vICAqIEVkZ2UgaWQgcXVlcnkgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYW4gXCJlZGdlT2JqXCIsIGVkZ2Ugb2JqZWN0LCB0aGF0IGlzXG4vLyAgICBjb21wb3NlZCBvZiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gZWRnZToge3YsIHcsIG5hbWV9LlxuLy8gICogSW50ZXJuYWxseSB3ZSB1c2UgYW4gXCJlZGdlSWRcIiwgYSBzdHJpbmdpZmllZCBmb3JtIG9mIHRoZSBlZGdlT2JqLCB0b1xuLy8gICAgcmVmZXJlbmNlIGVkZ2VzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCBhIHBlcmZvcm1hbnQgd2F5IHRvIGxvb2sgdGhlc2Vcbi8vICAgIGVkZ2VzIHVwIGFuZCwgb2JqZWN0IHByb3BlcnRpZXMsIHdoaWNoIGhhdmUgc3RyaW5nIGtleXMsIGFyZSB0aGUgY2xvc2VzdFxuLy8gICAgd2UncmUgZ29pbmcgdG8gZ2V0IHRvIGEgcGVyZm9ybWFudCBoYXNodGFibGUgaW4gSmF2YVNjcmlwdC5cbmV4cG9ydCBjbGFzcyBHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHRoaXMuX2lzRGlyZWN0ZWQgPSBfLmhhcyhvcHRzLCAnZGlyZWN0ZWQnKSA/IG9wdHMuZGlyZWN0ZWQgOiB0cnVlO1xuICAgIHRoaXMuX2lzTXVsdGlncmFwaCA9IF8uaGFzKG9wdHMsICdtdWx0aWdyYXBoJykgPyBvcHRzLm11bHRpZ3JhcGggOiBmYWxzZTtcbiAgICB0aGlzLl9pc0NvbXBvdW5kID0gXy5oYXMob3B0cywgJ2NvbXBvdW5kJykgPyBvcHRzLmNvbXBvdW5kIDogZmFsc2U7XG5cbiAgICAvLyBMYWJlbCBmb3IgdGhlIGdyYXBoIGl0c2VsZlxuICAgIHRoaXMuX2xhYmVsID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gRGVmYXVsdHMgdG8gYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgbm9kZVxuICAgIHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbiA9IF8uY29uc3RhbnQodW5kZWZpbmVkKTtcblxuICAgIC8vIERlZmF1bHRzIHRvIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IGVkZ2VcbiAgICB0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4gPSBfLmNvbnN0YW50KHVuZGVmaW5lZCk7XG5cbiAgICAvLyB2IC0+IGxhYmVsXG4gICAgdGhpcy5fbm9kZXMgPSB7fTtcblxuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICAvLyB2IC0+IHBhcmVudFxuICAgICAgdGhpcy5fcGFyZW50ID0ge307XG5cbiAgICAgIC8vIHYgLT4gY2hpbGRyZW5cbiAgICAgIHRoaXMuX2NoaWxkcmVuID0ge307XG4gICAgICB0aGlzLl9jaGlsZHJlbltHUkFQSF9OT0RFXSA9IHt9O1xuICAgIH1cblxuICAgIC8vIHYgLT4gZWRnZU9ialxuICAgIHRoaXMuX2luID0ge307XG5cbiAgICAvLyB1IC0+IHYgLT4gTnVtYmVyXG4gICAgdGhpcy5fcHJlZHMgPSB7fTtcblxuICAgIC8vIHYgLT4gZWRnZU9ialxuICAgIHRoaXMuX291dCA9IHt9O1xuXG4gICAgLy8gdiAtPiB3IC0+IE51bWJlclxuICAgIHRoaXMuX3N1Y3MgPSB7fTtcblxuICAgIC8vIGUgLT4gZWRnZU9ialxuICAgIHRoaXMuX2VkZ2VPYmpzID0ge307XG5cbiAgICAvLyBlIC0+IGxhYmVsXG4gICAgdGhpcy5fZWRnZUxhYmVscyA9IHt9O1xuICB9XG4gIC8qID09PSBHcmFwaCBmdW5jdGlvbnMgPT09PT09PT09ICovXG4gIGlzRGlyZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWQ7XG4gIH1cbiAgaXNNdWx0aWdyYXBoKCkge1xuICAgIHJldHVybiB0aGlzLl9pc011bHRpZ3JhcGg7XG4gIH1cbiAgaXNDb21wb3VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNDb21wb3VuZDtcbiAgfVxuICBzZXRHcmFwaChsYWJlbCkge1xuICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ3JhcGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICB9XG4gIC8qID09PSBOb2RlIGZ1bmN0aW9ucyA9PT09PT09PT09ICovXG4gIHNldERlZmF1bHROb2RlTGFiZWwobmV3RGVmYXVsdCkge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKSB7XG4gICAgICBuZXdEZWZhdWx0ID0gXy5jb25zdGFudChuZXdEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuID0gbmV3RGVmYXVsdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBub2RlQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb3VudDtcbiAgfVxuICBub2RlcygpIHtcbiAgICByZXR1cm4gXy5rZXlzKHRoaXMuX25vZGVzKTtcbiAgfVxuICBzb3VyY2VzKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gXy5maWx0ZXIodGhpcy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIF8uaXNFbXB0eShzZWxmLl9pblt2XSk7XG4gICAgfSk7XG4gIH1cbiAgc2lua3MoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBfLmZpbHRlcih0aGlzLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gXy5pc0VtcHR5KHNlbGYuX291dFt2XSk7XG4gICAgfSk7XG4gIH1cbiAgc2V0Tm9kZXModnMsIHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIF8uZWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgc2VsZi5zZXROb2RlKHYsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuc2V0Tm9kZSh2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXROb2RlKHYsIHZhbHVlKSB7XG4gICAgaWYgKF8uaGFzKHRoaXMuX25vZGVzLCB2KSkge1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuX25vZGVzW3ZdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5fbm9kZXNbdl0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHZhbHVlIDogdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHYpO1xuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICB0aGlzLl9wYXJlbnRbdl0gPSBHUkFQSF9OT0RFO1xuICAgICAgdGhpcy5fY2hpbGRyZW5bdl0gPSB7fTtcbiAgICAgIHRoaXMuX2NoaWxkcmVuW0dSQVBIX05PREVdW3ZdID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faW5bdl0gPSB7fTtcbiAgICB0aGlzLl9wcmVkc1t2XSA9IHt9O1xuICAgIHRoaXMuX291dFt2XSA9IHt9O1xuICAgIHRoaXMuX3N1Y3Nbdl0gPSB7fTtcbiAgICArK3RoaXMuX25vZGVDb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBub2RlKHYpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZXNbdl07XG4gIH1cbiAgaGFzTm9kZSh2KSB7XG4gICAgcmV0dXJuIF8uaGFzKHRoaXMuX25vZGVzLCB2KTtcbiAgfVxuICByZW1vdmVOb2RlKHYpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKF8uaGFzKHRoaXMuX25vZGVzLCB2KSkge1xuICAgICAgdmFyIHJlbW92ZUVkZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZWxmLnJlbW92ZUVkZ2Uoc2VsZi5fZWRnZU9ianNbZV0pO1xuICAgICAgfTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rlc1t2XTtcbiAgICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGFyZW50W3ZdO1xuICAgICAgICBfLmVhY2godGhpcy5jaGlsZHJlbih2KSwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgc2VsZi5zZXRQYXJlbnQoY2hpbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3ZdO1xuICAgICAgfVxuICAgICAgXy5lYWNoKF8ua2V5cyh0aGlzLl9pblt2XSksIHJlbW92ZUVkZ2UpO1xuICAgICAgZGVsZXRlIHRoaXMuX2luW3ZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3ByZWRzW3ZdO1xuICAgICAgXy5lYWNoKF8ua2V5cyh0aGlzLl9vdXRbdl0pLCByZW1vdmVFZGdlKTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9vdXRbdl07XG4gICAgICBkZWxldGUgdGhpcy5fc3Vjc1t2XTtcbiAgICAgIC0tdGhpcy5fbm9kZUNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXRQYXJlbnQodiwgcGFyZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoJyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gR1JBUEhfTk9ERTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29lcmNlIHBhcmVudCB0byBzdHJpbmdcbiAgICAgIHBhcmVudCArPSAnJztcbiAgICAgIGZvciAodmFyIGFuY2VzdG9yID0gcGFyZW50OyAhXy5pc1VuZGVmaW5lZChhbmNlc3Rvcik7IGFuY2VzdG9yID0gdGhpcy5wYXJlbnQoYW5jZXN0b3IpKSB7XG4gICAgICAgIGlmIChhbmNlc3RvciA9PT0gdikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyAnICsgcGFyZW50ICsgJyBhcyBwYXJlbnQgb2YgJyArIHYgKyAnIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXROb2RlKHBhcmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXROb2RlKHYpO1xuICAgIHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO1xuICAgIHRoaXMuX3BhcmVudFt2XSA9IHBhcmVudDtcbiAgICB0aGlzLl9jaGlsZHJlbltwYXJlbnRdW3ZdID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBfcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodikge1xuICAgIGRlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdl1dW3ZdO1xuICB9XG4gIHBhcmVudCh2KSB7XG4gICAgaWYgKHRoaXMuX2lzQ29tcG91bmQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLl9wYXJlbnRbdl07XG4gICAgICBpZiAocGFyZW50ICE9PSBHUkFQSF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNoaWxkcmVuKHYpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh2KSkge1xuICAgICAgdiA9IEdSQVBIX05PREU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzQ29tcG91bmQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuW3ZdO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBfLmtleXMoY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodiA9PT0gR1JBUEhfTk9ERSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzTm9kZSh2KSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICBwcmVkZWNlc3NvcnModikge1xuICAgIHZhciBwcmVkc1YgPSB0aGlzLl9wcmVkc1t2XTtcbiAgICBpZiAocHJlZHNWKSB7XG4gICAgICByZXR1cm4gXy5rZXlzKHByZWRzVik7XG4gICAgfVxuICB9XG4gIHN1Y2Nlc3NvcnModikge1xuICAgIHZhciBzdWNzViA9IHRoaXMuX3N1Y3Nbdl07XG4gICAgaWYgKHN1Y3NWKSB7XG4gICAgICByZXR1cm4gXy5rZXlzKHN1Y3NWKTtcbiAgICB9XG4gIH1cbiAgbmVpZ2hib3JzKHYpIHtcbiAgICB2YXIgcHJlZHMgPSB0aGlzLnByZWRlY2Vzc29ycyh2KTtcbiAgICBpZiAocHJlZHMpIHtcbiAgICAgIHJldHVybiBfLnVuaW9uKHByZWRzLCB0aGlzLnN1Y2Nlc3NvcnModikpO1xuICAgIH1cbiAgfVxuICBpc0xlYWYodikge1xuICAgIHZhciBuZWlnaGJvcnM7XG4gICAgaWYgKHRoaXMuaXNEaXJlY3RlZCgpKSB7XG4gICAgICBuZWlnaGJvcnMgPSB0aGlzLnN1Y2Nlc3NvcnModik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5laWdoYm9ycyA9IHRoaXMubmVpZ2hib3JzKHYpO1xuICAgIH1cbiAgICByZXR1cm4gbmVpZ2hib3JzLmxlbmd0aCA9PT0gMDtcbiAgfVxuICBmaWx0ZXJOb2RlcyhmaWx0ZXIpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIGNvcHkgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7XG4gICAgICBkaXJlY3RlZDogdGhpcy5faXNEaXJlY3RlZCxcbiAgICAgIG11bHRpZ3JhcGg6IHRoaXMuX2lzTXVsdGlncmFwaCxcbiAgICAgIGNvbXBvdW5kOiB0aGlzLl9pc0NvbXBvdW5kLFxuICAgIH0pO1xuXG4gICAgY29weS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIF8uZWFjaCh0aGlzLl9ub2RlcywgZnVuY3Rpb24gKHZhbHVlLCB2KSB7XG4gICAgICBpZiAoZmlsdGVyKHYpKSB7XG4gICAgICAgIGNvcHkuc2V0Tm9kZSh2LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfLmVhY2godGhpcy5fZWRnZU9ianMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoY29weS5oYXNOb2RlKGUudikgJiYgY29weS5oYXNOb2RlKGUudykpIHtcbiAgICAgICAgY29weS5zZXRFZGdlKGUsIHNlbGYuZWRnZShlKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcGFyZW50cyA9IHt9O1xuICAgIGZ1bmN0aW9uIGZpbmRQYXJlbnQodikge1xuICAgICAgdmFyIHBhcmVudCA9IHNlbGYucGFyZW50KHYpO1xuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkIHx8IGNvcHkuaGFzTm9kZShwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudHNbdl0gPSBwYXJlbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9IGVsc2UgaWYgKHBhcmVudCBpbiBwYXJlbnRzKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRzW3BhcmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0NvbXBvdW5kKSB7XG4gICAgICBfLmVhY2goY29weS5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgICBjb3B5LnNldFBhcmVudCh2LCBmaW5kUGFyZW50KHYpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb3B5O1xuICB9XG4gIC8qID09PSBFZGdlIGZ1bmN0aW9ucyA9PT09PT09PT09ICovXG4gIHNldERlZmF1bHRFZGdlTGFiZWwobmV3RGVmYXVsdCkge1xuICAgIGlmICghXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKSB7XG4gICAgICBuZXdEZWZhdWx0ID0gXy5jb25zdGFudChuZXdEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuID0gbmV3RGVmYXVsdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBlZGdlQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkZ2VDb3VudDtcbiAgfVxuICBlZGdlcygpIHtcbiAgICByZXR1cm4gXy52YWx1ZXModGhpcy5fZWRnZU9ianMpO1xuICB9XG4gIHNldFBhdGgodnMsIHZhbHVlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIF8ucmVkdWNlKHZzLCBmdW5jdGlvbiAodiwgdykge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICBzZWxmLnNldEVkZ2UodiwgdywgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5zZXRFZGdlKHYsIHcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHc7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLypcbiAgICogc2V0RWRnZSh2LCB3LCBbdmFsdWUsIFtuYW1lXV0pXG4gICAqIHNldEVkZ2UoeyB2LCB3LCBbbmFtZV0gfSwgW3ZhbHVlXSlcbiAgICovXG4gIHNldEVkZ2UoKSB7XG4gICAgdmFyIHYsIHcsIG5hbWUsIHZhbHVlO1xuICAgIHZhciB2YWx1ZVNwZWNpZmllZCA9IGZhbHNlO1xuICAgIHZhciBhcmcwID0gYXJndW1lbnRzWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnb2JqZWN0JyAmJiBhcmcwICE9PSBudWxsICYmICd2JyBpbiBhcmcwKSB7XG4gICAgICB2ID0gYXJnMC52O1xuICAgICAgdyA9IGFyZzAudztcbiAgICAgIG5hbWUgPSBhcmcwLm5hbWU7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgdmFsdWVTcGVjaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2ID0gYXJnMDtcbiAgICAgIHcgPSBhcmd1bWVudHNbMV07XG4gICAgICBuYW1lID0gYXJndW1lbnRzWzNdO1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdO1xuICAgICAgICB2YWx1ZVNwZWNpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdiA9ICcnICsgdjtcbiAgICB3ID0gJycgKyB3O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgbmFtZSA9ICcnICsgbmFtZTtcbiAgICB9XG5cbiAgICB2YXIgZSA9IGVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCB2LCB3LCBuYW1lKTtcbiAgICBpZiAoXy5oYXModGhpcy5fZWRnZUxhYmVscywgZSkpIHtcbiAgICAgIGlmICh2YWx1ZVNwZWNpZmllZCkge1xuICAgICAgICB0aGlzLl9lZGdlTGFiZWxzW2VdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQobmFtZSkgJiYgIXRoaXMuX2lzTXVsdGlncmFwaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlJyk7XG4gICAgfVxuXG4gICAgLy8gSXQgZGlkbid0IGV4aXN0LCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdC5cbiAgICAvLyBGaXJzdCBlbnN1cmUgdGhlIG5vZGVzIGV4aXN0LlxuICAgIHRoaXMuc2V0Tm9kZSh2KTtcbiAgICB0aGlzLnNldE5vZGUodyk7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5fZWRnZUxhYmVsc1tlXSA9IHZhbHVlU3BlY2lmaWVkID8gdmFsdWUgOiB0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odiwgdywgbmFtZSk7XG5cbiAgICB2YXIgZWRnZU9iaiA9IGVkZ2VBcmdzVG9PYmoodGhpcy5faXNEaXJlY3RlZCwgdiwgdywgbmFtZSk7XG4gICAgLy8gRW5zdXJlIHdlIGFkZCB1bmRpcmVjdGVkIGVkZ2VzIGluIGEgY29uc2lzdGVudCB3YXkuXG4gICAgdiA9IGVkZ2VPYmoudjtcbiAgICB3ID0gZWRnZU9iai53O1xuXG4gICAgT2JqZWN0LmZyZWV6ZShlZGdlT2JqKTtcbiAgICB0aGlzLl9lZGdlT2Jqc1tlXSA9IGVkZ2VPYmo7XG4gICAgaW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fcHJlZHNbd10sIHYpO1xuICAgIGluY3JlbWVudE9ySW5pdEVudHJ5KHRoaXMuX3N1Y3Nbdl0sIHcpO1xuICAgIHRoaXMuX2luW3ddW2VdID0gZWRnZU9iajtcbiAgICB0aGlzLl9vdXRbdl1bZV0gPSBlZGdlT2JqO1xuICAgIHRoaXMuX2VkZ2VDb3VudCsrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGVkZ2UodiwgdywgbmFtZSkge1xuICAgIHZhciBlID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgPyBlZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCBhcmd1bWVudHNbMF0pXG4gICAgICAgIDogZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsIHYsIHcsIG5hbWUpO1xuICAgIHJldHVybiB0aGlzLl9lZGdlTGFiZWxzW2VdO1xuICB9XG4gIGhhc0VkZ2UodiwgdywgbmFtZSkge1xuICAgIHZhciBlID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgPyBlZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCBhcmd1bWVudHNbMF0pXG4gICAgICAgIDogZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsIHYsIHcsIG5hbWUpO1xuICAgIHJldHVybiBfLmhhcyh0aGlzLl9lZGdlTGFiZWxzLCBlKTtcbiAgfVxuICByZW1vdmVFZGdlKHYsIHcsIG5hbWUpIHtcbiAgICB2YXIgZSA9XG4gICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxXG4gICAgICAgID8gZWRnZU9ialRvSWQodGhpcy5faXNEaXJlY3RlZCwgYXJndW1lbnRzWzBdKVxuICAgICAgICA6IGVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLCB2LCB3LCBuYW1lKTtcbiAgICB2YXIgZWRnZSA9IHRoaXMuX2VkZ2VPYmpzW2VdO1xuICAgIGlmIChlZGdlKSB7XG4gICAgICB2ID0gZWRnZS52O1xuICAgICAgdyA9IGVkZ2UudztcbiAgICAgIGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW2VdO1xuICAgICAgZGVjcmVtZW50T3JSZW1vdmVFbnRyeSh0aGlzLl9wcmVkc1t3XSwgdik7XG4gICAgICBkZWNyZW1lbnRPclJlbW92ZUVudHJ5KHRoaXMuX3N1Y3Nbdl0sIHcpO1xuICAgICAgZGVsZXRlIHRoaXMuX2luW3ddW2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX291dFt2XVtlXTtcbiAgICAgIHRoaXMuX2VkZ2VDb3VudC0tO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBpbkVkZ2VzKHYsIHUpIHtcbiAgICB2YXIgaW5WID0gdGhpcy5faW5bdl07XG4gICAgaWYgKGluVikge1xuICAgICAgdmFyIGVkZ2VzID0gXy52YWx1ZXMoaW5WKTtcbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gZWRnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5maWx0ZXIoZWRnZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLnYgPT09IHU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgb3V0RWRnZXModiwgdykge1xuICAgIHZhciBvdXRWID0gdGhpcy5fb3V0W3ZdO1xuICAgIGlmIChvdXRWKSB7XG4gICAgICB2YXIgZWRnZXMgPSBfLnZhbHVlcyhvdXRWKTtcbiAgICAgIGlmICghdykge1xuICAgICAgICByZXR1cm4gZWRnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5maWx0ZXIoZWRnZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLncgPT09IHc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgbm9kZUVkZ2VzKHYsIHcpIHtcbiAgICB2YXIgaW5FZGdlcyA9IHRoaXMuaW5FZGdlcyh2LCB3KTtcbiAgICBpZiAoaW5FZGdlcykge1xuICAgICAgcmV0dXJuIGluRWRnZXMuY29uY2F0KHRoaXMub3V0RWRnZXModiwgdykpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBOdW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGdyYXBoLiBTaG91bGQgb25seSBiZSBjaGFuZ2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gKi9cbkdyYXBoLnByb3RvdHlwZS5fbm9kZUNvdW50ID0gMDtcblxuLyogTnVtYmVyIG9mIGVkZ2VzIGluIHRoZSBncmFwaC4gU2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBieSB0aGUgaW1wbGVtZW50YXRpb24uICovXG5HcmFwaC5wcm90b3R5cGUuX2VkZ2VDb3VudCA9IDA7XG5cbmZ1bmN0aW9uIGluY3JlbWVudE9ySW5pdEVudHJ5KG1hcCwgaykge1xuICBpZiAobWFwW2tdKSB7XG4gICAgbWFwW2tdKys7XG4gIH0gZWxzZSB7XG4gICAgbWFwW2tdID0gMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNyZW1lbnRPclJlbW92ZUVudHJ5KG1hcCwgaykge1xuICBpZiAoIS0tbWFwW2tdKSB7XG4gICAgZGVsZXRlIG1hcFtrXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlZGdlQXJnc1RvSWQoaXNEaXJlY3RlZCwgdl8sIHdfLCBuYW1lKSB7XG4gIHZhciB2ID0gJycgKyB2XztcbiAgdmFyIHcgPSAnJyArIHdfO1xuICBpZiAoIWlzRGlyZWN0ZWQgJiYgdiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG4gIHJldHVybiB2ICsgRURHRV9LRVlfREVMSU0gKyB3ICsgRURHRV9LRVlfREVMSU0gKyAoXy5pc1VuZGVmaW5lZChuYW1lKSA/IERFRkFVTFRfRURHRV9OQU1FIDogbmFtZSk7XG59XG5cbmZ1bmN0aW9uIGVkZ2VBcmdzVG9PYmooaXNEaXJlY3RlZCwgdl8sIHdfLCBuYW1lKSB7XG4gIHZhciB2ID0gJycgKyB2XztcbiAgdmFyIHcgPSAnJyArIHdfO1xuICBpZiAoIWlzRGlyZWN0ZWQgJiYgdiA+IHcpIHtcbiAgICB2YXIgdG1wID0gdjtcbiAgICB2ID0gdztcbiAgICB3ID0gdG1wO1xuICB9XG4gIHZhciBlZGdlT2JqID0geyB2OiB2LCB3OiB3IH07XG4gIGlmIChuYW1lKSB7XG4gICAgZWRnZU9iai5uYW1lID0gbmFtZTtcbiAgfVxuICByZXR1cm4gZWRnZU9iajtcbn1cblxuZnVuY3Rpb24gZWRnZU9ialRvSWQoaXNEaXJlY3RlZCwgZWRnZU9iaikge1xuICByZXR1cm4gZWRnZUFyZ3NUb0lkKGlzRGlyZWN0ZWQsIGVkZ2VPYmoudiwgZWRnZU9iai53LCBlZGdlT2JqLm5hbWUpO1xufVxuIiwKICAgICIvLyBJbmNsdWRlcyBvbmx5IHRoZSBcImNvcmVcIiBvZiBncmFwaGxpYlxuXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4vZ3JhcGguanMnO1xuXG5jb25zdCB2ZXJzaW9uID0gJzIuMS45LXByZSc7XG5cbmV4cG9ydCB7IEdyYXBoLCB2ZXJzaW9uIH07XG4iLAogICAgIi8qXG4gKiBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBDb3JtZW4sIGV0IGFsLixcbiAqIFwiSW50cm9kdWN0aW9uIHRvIEFsZ29yaXRobXNcIi5cbiAqL1xuXG5leHBvcnQgeyBMaXN0IH07XG5cbmNsYXNzIExpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgc2VudGluZWwgPSB7fTtcbiAgICBzZW50aW5lbC5fbmV4dCA9IHNlbnRpbmVsLl9wcmV2ID0gc2VudGluZWw7XG4gICAgdGhpcy5fc2VudGluZWwgPSBzZW50aW5lbDtcbiAgfVxuICBkZXF1ZXVlKCkge1xuICAgIHZhciBzZW50aW5lbCA9IHRoaXMuX3NlbnRpbmVsO1xuICAgIHZhciBlbnRyeSA9IHNlbnRpbmVsLl9wcmV2O1xuICAgIGlmIChlbnRyeSAhPT0gc2VudGluZWwpIHtcbiAgICAgIHVubGluayhlbnRyeSk7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG4gIGVucXVldWUoZW50cnkpIHtcbiAgICB2YXIgc2VudGluZWwgPSB0aGlzLl9zZW50aW5lbDtcbiAgICBpZiAoZW50cnkuX3ByZXYgJiYgZW50cnkuX25leHQpIHtcbiAgICAgIHVubGluayhlbnRyeSk7XG4gICAgfVxuICAgIGVudHJ5Ll9uZXh0ID0gc2VudGluZWwuX25leHQ7XG4gICAgc2VudGluZWwuX25leHQuX3ByZXYgPSBlbnRyeTtcbiAgICBzZW50aW5lbC5fbmV4dCA9IGVudHJ5O1xuICAgIGVudHJ5Ll9wcmV2ID0gc2VudGluZWw7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgdmFyIHN0cnMgPSBbXTtcbiAgICB2YXIgc2VudGluZWwgPSB0aGlzLl9zZW50aW5lbDtcbiAgICB2YXIgY3VyciA9IHNlbnRpbmVsLl9wcmV2O1xuICAgIHdoaWxlIChjdXJyICE9PSBzZW50aW5lbCkge1xuICAgICAgc3Rycy5wdXNoKEpTT04uc3RyaW5naWZ5KGN1cnIsIGZpbHRlck91dExpbmtzKSk7XG4gICAgICBjdXJyID0gY3Vyci5fcHJldjtcbiAgICB9XG4gICAgcmV0dXJuICdbJyArIHN0cnMuam9pbignLCAnKSArICddJztcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmxpbmsoZW50cnkpIHtcbiAgZW50cnkuX3ByZXYuX25leHQgPSBlbnRyeS5fbmV4dDtcbiAgZW50cnkuX25leHQuX3ByZXYgPSBlbnRyeS5fcHJldjtcbiAgZGVsZXRlIGVudHJ5Ll9uZXh0O1xuICBkZWxldGUgZW50cnkuX3ByZXY7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck91dExpbmtzKGssIHYpIHtcbiAgaWYgKGsgIT09ICdfbmV4dCcgJiYgayAhPT0gJ19wcmV2Jykge1xuICAgIHJldHVybiB2O1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vZ3JhcGhsaWIvaW5kZXguanMnO1xuaW1wb3J0IHsgTGlzdCB9IGZyb20gJy4vZGF0YS9saXN0LmpzJztcblxuLypcbiAqIEEgZ3JlZWR5IGhldXJpc3RpYyBmb3IgZmluZGluZyBhIGZlZWRiYWNrIGFyYyBzZXQgZm9yIGEgZ3JhcGguIEEgZmVlZGJhY2tcbiAqIGFyYyBzZXQgaXMgYSBzZXQgb2YgZWRnZXMgdGhhdCBjYW4gYmUgcmVtb3ZlZCB0byBtYWtlIGEgZ3JhcGggYWN5Y2xpYy5cbiAqIFRoZSBhbGdvcml0aG0gY29tZXMgZnJvbTogUC4gRWFkZXMsIFguIExpbiwgYW5kIFcuIEYuIFNteXRoLCBcIkEgZmFzdCBhbmRcbiAqIGVmZmVjdGl2ZSBoZXVyaXN0aWMgZm9yIHRoZSBmZWVkYmFjayBhcmMgc2V0IHByb2JsZW0uXCIgVGhpcyBpbXBsZW1lbnRhdGlvblxuICogYWRqdXN0cyB0aGF0IGZyb20gdGhlIHBhcGVyIHRvIGFsbG93IGZvciB3ZWlnaHRlZCBlZGdlcy5cbiAqL1xuZXhwb3J0IHsgZ3JlZWR5RkFTIH07XG5cbnZhciBERUZBVUxUX1dFSUdIVF9GTiA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGdyZWVkeUZBUyhnLCB3ZWlnaHRGbikge1xuICBpZiAoZy5ub2RlQ291bnQoKSA8PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciBzdGF0ZSA9IGJ1aWxkU3RhdGUoZywgd2VpZ2h0Rm4gfHwgREVGQVVMVF9XRUlHSFRfRk4pO1xuICB2YXIgcmVzdWx0cyA9IGRvR3JlZWR5RkFTKHN0YXRlLmdyYXBoLCBzdGF0ZS5idWNrZXRzLCBzdGF0ZS56ZXJvSWR4KTtcblxuICAvLyBFeHBhbmQgbXVsdGktZWRnZXNcbiAgcmV0dXJuIF8uZmxhdHRlbihcbiAgICBfLm1hcChyZXN1bHRzLCBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIGcub3V0RWRnZXMoZS52LCBlLncpO1xuICAgIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRvR3JlZWR5RkFTKGcsIGJ1Y2tldHMsIHplcm9JZHgpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHNvdXJjZXMgPSBidWNrZXRzW2J1Y2tldHMubGVuZ3RoIC0gMV07XG4gIHZhciBzaW5rcyA9IGJ1Y2tldHNbMF07XG5cbiAgdmFyIGVudHJ5O1xuICB3aGlsZSAoZy5ub2RlQ291bnQoKSkge1xuICAgIHdoaWxlICgoZW50cnkgPSBzaW5rcy5kZXF1ZXVlKCkpKSB7XG4gICAgICByZW1vdmVOb2RlKGcsIGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5KTtcbiAgICB9XG4gICAgd2hpbGUgKChlbnRyeSA9IHNvdXJjZXMuZGVxdWV1ZSgpKSkge1xuICAgICAgcmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSk7XG4gICAgfVxuICAgIGlmIChnLm5vZGVDb3VudCgpKSB7XG4gICAgICBmb3IgKHZhciBpID0gYnVja2V0cy5sZW5ndGggLSAyOyBpID4gMDsgLS1pKSB7XG4gICAgICAgIGVudHJ5ID0gYnVja2V0c1tpXS5kZXF1ZXVlKCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChyZW1vdmVOb2RlKGcsIGJ1Y2tldHMsIHplcm9JZHgsIGVudHJ5LCB0cnVlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShnLCBidWNrZXRzLCB6ZXJvSWR4LCBlbnRyeSwgY29sbGVjdFByZWRlY2Vzc29ycykge1xuICB2YXIgcmVzdWx0cyA9IGNvbGxlY3RQcmVkZWNlc3NvcnMgPyBbXSA6IHVuZGVmaW5lZDtcblxuICBfLmZvckVhY2goZy5pbkVkZ2VzKGVudHJ5LnYpLCBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciB3ZWlnaHQgPSBnLmVkZ2UoZWRnZSk7XG4gICAgdmFyIHVFbnRyeSA9IGcubm9kZShlZGdlLnYpO1xuXG4gICAgaWYgKGNvbGxlY3RQcmVkZWNlc3NvcnMpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IHY6IGVkZ2UudiwgdzogZWRnZS53IH0pO1xuICAgIH1cblxuICAgIHVFbnRyeS5vdXQgLT0gd2VpZ2h0O1xuICAgIGFzc2lnbkJ1Y2tldChidWNrZXRzLCB6ZXJvSWR4LCB1RW50cnkpO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5vdXRFZGdlcyhlbnRyeS52KSwgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICB2YXIgd2VpZ2h0ID0gZy5lZGdlKGVkZ2UpO1xuICAgIHZhciB3ID0gZWRnZS53O1xuICAgIHZhciB3RW50cnkgPSBnLm5vZGUodyk7XG4gICAgd0VudHJ5WydpbiddIC09IHdlaWdodDtcbiAgICBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgd0VudHJ5KTtcbiAgfSk7XG5cbiAgZy5yZW1vdmVOb2RlKGVudHJ5LnYpO1xuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0YXRlKGcsIHdlaWdodEZuKSB7XG4gIHZhciBmYXNHcmFwaCA9IG5ldyBHcmFwaCgpO1xuICB2YXIgbWF4SW4gPSAwO1xuICB2YXIgbWF4T3V0ID0gMDtcblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGZhc0dyYXBoLnNldE5vZGUodiwgeyB2OiB2LCBpbjogMCwgb3V0OiAwIH0pO1xuICB9KTtcblxuICAvLyBBZ2dyZWdhdGUgd2VpZ2h0cyBvbiBub2RlcywgYnV0IGFsc28gc3VtIHRoZSB3ZWlnaHRzIGFjcm9zcyBtdWx0aS1lZGdlc1xuICAvLyBpbnRvIGEgc2luZ2xlIGVkZ2UgZm9yIHRoZSBmYXNHcmFwaC5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgcHJldldlaWdodCA9IGZhc0dyYXBoLmVkZ2UoZS52LCBlLncpIHx8IDA7XG4gICAgdmFyIHdlaWdodCA9IHdlaWdodEZuKGUpO1xuICAgIHZhciBlZGdlV2VpZ2h0ID0gcHJldldlaWdodCArIHdlaWdodDtcbiAgICBmYXNHcmFwaC5zZXRFZGdlKGUudiwgZS53LCBlZGdlV2VpZ2h0KTtcbiAgICBtYXhPdXQgPSBNYXRoLm1heChtYXhPdXQsIChmYXNHcmFwaC5ub2RlKGUudikub3V0ICs9IHdlaWdodCkpO1xuICAgIG1heEluID0gTWF0aC5tYXgobWF4SW4sIChmYXNHcmFwaC5ub2RlKGUudylbJ2luJ10gKz0gd2VpZ2h0KSk7XG4gIH0pO1xuXG4gIHZhciBidWNrZXRzID0gXy5yYW5nZShtYXhPdXQgKyBtYXhJbiArIDMpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBMaXN0KCk7XG4gIH0pO1xuICB2YXIgemVyb0lkeCA9IG1heEluICsgMTtcblxuICBfLmZvckVhY2goZmFzR3JhcGgubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgZmFzR3JhcGgubm9kZSh2KSk7XG4gIH0pO1xuXG4gIHJldHVybiB7IGdyYXBoOiBmYXNHcmFwaCwgYnVja2V0czogYnVja2V0cywgemVyb0lkeDogemVyb0lkeCB9O1xufVxuXG5mdW5jdGlvbiBhc3NpZ25CdWNrZXQoYnVja2V0cywgemVyb0lkeCwgZW50cnkpIHtcbiAgaWYgKCFlbnRyeS5vdXQpIHtcbiAgICBidWNrZXRzWzBdLmVucXVldWUoZW50cnkpO1xuICB9IGVsc2UgaWYgKCFlbnRyeVsnaW4nXSkge1xuICAgIGJ1Y2tldHNbYnVja2V0cy5sZW5ndGggLSAxXS5lbnF1ZXVlKGVudHJ5KTtcbiAgfSBlbHNlIHtcbiAgICBidWNrZXRzW2VudHJ5Lm91dCAtIGVudHJ5WydpbiddICsgemVyb0lkeF0uZW5xdWV1ZShlbnRyeSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZ3JlZWR5RkFTIH0gZnJvbSAnLi9ncmVlZHktZmFzLmpzJztcblxuZXhwb3J0IHsgcnVuLCB1bmRvIH07XG5cbmZ1bmN0aW9uIHJ1bihnKSB7XG4gIHZhciBmYXMgPSBnLmdyYXBoKCkuYWN5Y2xpY2VyID09PSAnZ3JlZWR5JyA/IGdyZWVkeUZBUyhnLCB3ZWlnaHRGbihnKSkgOiBkZnNGQVMoZyk7XG4gIF8uZm9yRWFjaChmYXMsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGcucmVtb3ZlRWRnZShlKTtcbiAgICBsYWJlbC5mb3J3YXJkTmFtZSA9IGUubmFtZTtcbiAgICBsYWJlbC5yZXZlcnNlZCA9IHRydWU7XG4gICAgZy5zZXRFZGdlKGUudywgZS52LCBsYWJlbCwgXy51bmlxdWVJZCgncmV2JykpO1xuICB9KTtcblxuICBmdW5jdGlvbiB3ZWlnaHRGbihnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZy5lZGdlKGUpLndlaWdodDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRmc0ZBUyhnKSB7XG4gIHZhciBmYXMgPSBbXTtcbiAgdmFyIHN0YWNrID0ge307XG4gIHZhciB2aXNpdGVkID0ge307XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICBpZiAoXy5oYXModmlzaXRlZCwgdikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmlzaXRlZFt2XSA9IHRydWU7XG4gICAgc3RhY2tbdl0gPSB0cnVlO1xuICAgIF8uZm9yRWFjaChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF8uaGFzKHN0YWNrLCBlLncpKSB7XG4gICAgICAgIGZhcy5wdXNoKGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGZzKGUudyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIHN0YWNrW3ZdO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZGZzKTtcbiAgcmV0dXJuIGZhcztcbn1cblxuZnVuY3Rpb24gdW5kbyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGxhYmVsID0gZy5lZGdlKGUpO1xuICAgIGlmIChsYWJlbC5yZXZlcnNlZCkge1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuXG4gICAgICB2YXIgZm9yd2FyZE5hbWUgPSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGRlbGV0ZSBsYWJlbC5yZXZlcnNlZDtcbiAgICAgIGRlbGV0ZSBsYWJlbC5mb3J3YXJkTmFtZTtcbiAgICAgIGcuc2V0RWRnZShlLncsIGUudiwgbGFiZWwsIGZvcndhcmROYW1lKTtcbiAgICB9XG4gIH0pO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL2dyYXBobGliL2luZGV4LmpzJztcblxuZXhwb3J0IHtcbiAgYWRkRHVtbXlOb2RlLFxuICBzaW1wbGlmeSxcbiAgYXNOb25Db21wb3VuZEdyYXBoLFxuICBzdWNjZXNzb3JXZWlnaHRzLFxuICBwcmVkZWNlc3NvcldlaWdodHMsXG4gIGludGVyc2VjdFJlY3QsXG4gIGJ1aWxkTGF5ZXJNYXRyaXgsXG4gIG5vcm1hbGl6ZVJhbmtzLFxuICByZW1vdmVFbXB0eVJhbmtzLFxuICBhZGRCb3JkZXJOb2RlLFxuICBtYXhSYW5rLFxuICBwYXJ0aXRpb24sXG4gIHRpbWUsXG4gIG5vdGltZSxcbn07XG5cbi8qXG4gKiBBZGRzIGEgZHVtbXkgbm9kZSB0byB0aGUgZ3JhcGggYW5kIHJldHVybiB2LlxuICovXG5mdW5jdGlvbiBhZGREdW1teU5vZGUoZywgdHlwZSwgYXR0cnMsIG5hbWUpIHtcbiAgdmFyIHY7XG4gIGRvIHtcbiAgICB2ID0gXy51bmlxdWVJZChuYW1lKTtcbiAgfSB3aGlsZSAoZy5oYXNOb2RlKHYpKTtcblxuICBhdHRycy5kdW1teSA9IHR5cGU7XG4gIGcuc2V0Tm9kZSh2LCBhdHRycyk7XG4gIHJldHVybiB2O1xufVxuXG4vKlxuICogUmV0dXJucyBhIG5ldyBncmFwaCB3aXRoIG9ubHkgc2ltcGxlIGVkZ2VzLiBIYW5kbGVzIGFnZ3JlZ2F0aW9uIG9mIGRhdGFcbiAqIGFzc29jaWF0ZWQgd2l0aCBtdWx0aS1lZGdlcy5cbiAqL1xuZnVuY3Rpb24gc2ltcGxpZnkoZykge1xuICB2YXIgc2ltcGxpZmllZCA9IG5ldyBHcmFwaCgpLnNldEdyYXBoKGcuZ3JhcGgoKSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgc2ltcGxpZmllZC5zZXROb2RlKHYsIGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBzaW1wbGVMYWJlbCA9IHNpbXBsaWZpZWQuZWRnZShlLnYsIGUudykgfHwgeyB3ZWlnaHQ6IDAsIG1pbmxlbjogMSB9O1xuICAgIHZhciBsYWJlbCA9IGcuZWRnZShlKTtcbiAgICBzaW1wbGlmaWVkLnNldEVkZ2UoZS52LCBlLncsIHtcbiAgICAgIHdlaWdodDogc2ltcGxlTGFiZWwud2VpZ2h0ICsgbGFiZWwud2VpZ2h0LFxuICAgICAgbWlubGVuOiBNYXRoLm1heChzaW1wbGVMYWJlbC5taW5sZW4sIGxhYmVsLm1pbmxlbiksXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gc2ltcGxpZmllZDtcbn1cblxuZnVuY3Rpb24gYXNOb25Db21wb3VuZEdyYXBoKGcpIHtcbiAgdmFyIHNpbXBsaWZpZWQgPSBuZXcgR3JhcGgoeyBtdWx0aWdyYXBoOiBnLmlzTXVsdGlncmFwaCgpIH0pLnNldEdyYXBoKGcuZ3JhcGgoKSk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKCFnLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgc2ltcGxpZmllZC5zZXROb2RlKHYsIGcubm9kZSh2KSk7XG4gICAgfVxuICB9KTtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBzaW1wbGlmaWVkLnNldEVkZ2UoZSwgZy5lZGdlKGUpKTtcbiAgfSk7XG4gIHJldHVybiBzaW1wbGlmaWVkO1xufVxuXG5mdW5jdGlvbiBzdWNjZXNzb3JXZWlnaHRzKGcpIHtcbiAgdmFyIHdlaWdodE1hcCA9IF8ubWFwKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgc3VjcyA9IHt9O1xuICAgIF8uZm9yRWFjaChnLm91dEVkZ2VzKHYpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgc3Vjc1tlLnddID0gKHN1Y3NbZS53XSB8fCAwKSArIGcuZWRnZShlKS53ZWlnaHQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1Y3M7XG4gIH0pO1xuICByZXR1cm4gXy56aXBPYmplY3QoZy5ub2RlcygpLCB3ZWlnaHRNYXApO1xufVxuXG5mdW5jdGlvbiBwcmVkZWNlc3NvcldlaWdodHMoZykge1xuICB2YXIgd2VpZ2h0TWFwID0gXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBwcmVkcyA9IHt9O1xuICAgIF8uZm9yRWFjaChnLmluRWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBwcmVkc1tlLnZdID0gKHByZWRzW2Uudl0gfHwgMCkgKyBnLmVkZ2UoZSkud2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBwcmVkcztcbiAgfSk7XG4gIHJldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksIHdlaWdodE1hcCk7XG59XG5cbi8qXG4gKiBGaW5kcyB3aGVyZSBhIGxpbmUgc3RhcnRpbmcgYXQgcG9pbnQgKHt4LCB5fSkgd291bGQgaW50ZXJzZWN0IGEgcmVjdGFuZ2xlXG4gKiAoe3gsIHksIHdpZHRoLCBoZWlnaHR9KSBpZiBpdCB3ZXJlIHBvaW50aW5nIGF0IHRoZSByZWN0YW5nbGUncyBjZW50ZXIuXG4gKi9cbmZ1bmN0aW9uIGludGVyc2VjdFJlY3QocmVjdCwgcG9pbnQpIHtcbiAgdmFyIHggPSByZWN0Lng7XG4gIHZhciB5ID0gcmVjdC55O1xuXG4gIC8vIFJlY3RhbmdsZSBpbnRlcnNlY3Rpb24gYWxnb3JpdGhtIGZyb206XG4gIC8vIGh0dHA6Ly9tYXRoLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMDgxMTMvZmluZC1lZGdlLWJldHdlZW4tdHdvLWJveGVzXG4gIHZhciBkeCA9IHBvaW50LnggLSB4O1xuICB2YXIgZHkgPSBwb2ludC55IC0geTtcbiAgdmFyIHcgPSByZWN0LndpZHRoIC8gMjtcbiAgdmFyIGggPSByZWN0LmhlaWdodCAvIDI7XG5cbiAgaWYgKCFkeCAmJiAhZHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZScpO1xuICB9XG5cbiAgdmFyIHN4LCBzeTtcbiAgaWYgKE1hdGguYWJzKGR5KSAqIHcgPiBNYXRoLmFicyhkeCkgKiBoKSB7XG4gICAgLy8gSW50ZXJzZWN0aW9uIGlzIHRvcCBvciBib3R0b20gb2YgcmVjdC5cbiAgICBpZiAoZHkgPCAwKSB7XG4gICAgICBoID0gLWg7XG4gICAgfVxuICAgIHN4ID0gKGggKiBkeCkgLyBkeTtcbiAgICBzeSA9IGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gSW50ZXJzZWN0aW9uIGlzIGxlZnQgb3IgcmlnaHQgb2YgcmVjdC5cbiAgICBpZiAoZHggPCAwKSB7XG4gICAgICB3ID0gLXc7XG4gICAgfVxuICAgIHN4ID0gdztcbiAgICBzeSA9ICh3ICogZHkpIC8gZHg7XG4gIH1cblxuICByZXR1cm4geyB4OiB4ICsgc3gsIHk6IHkgKyBzeSB9O1xufVxuXG4vKlxuICogR2l2ZW4gYSBEQUcgd2l0aCBlYWNoIG5vZGUgYXNzaWduZWQgXCJyYW5rXCIgYW5kIFwib3JkZXJcIiBwcm9wZXJ0aWVzLCB0aGlzXG4gKiBmdW5jdGlvbiB3aWxsIHByb2R1Y2UgYSBtYXRyaXggd2l0aCB0aGUgaWRzIG9mIGVhY2ggbm9kZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRMYXllck1hdHJpeChnKSB7XG4gIHZhciBsYXllcmluZyA9IF8ubWFwKF8ucmFuZ2UobWF4UmFuayhnKSArIDEpLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB2YXIgcmFuayA9IG5vZGUucmFuaztcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocmFuaykpIHtcbiAgICAgIGxheWVyaW5nW3JhbmtdW25vZGUub3JkZXJdID0gdjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGF5ZXJpbmc7XG59XG5cbi8qXG4gKiBBZGp1c3RzIHRoZSByYW5rcyBmb3IgYWxsIG5vZGVzIGluIHRoZSBncmFwaCBzdWNoIHRoYXQgYWxsIG5vZGVzIHYgaGF2ZVxuICogcmFuayh2KSA+PSAwIGFuZCBhdCBsZWFzdCBvbmUgbm9kZSB3IGhhcyByYW5rKHcpID0gMC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFua3MoZykge1xuICB2YXIgbWluID0gXy5taW4oXG4gICAgXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIGcubm9kZSh2KS5yYW5rO1xuICAgIH0pXG4gICk7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKF8uaGFzKG5vZGUsICdyYW5rJykpIHtcbiAgICAgIG5vZGUucmFuayAtPSBtaW47XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRW1wdHlSYW5rcyhnKSB7XG4gIC8vIFJhbmtzIG1heSBub3Qgc3RhcnQgYXQgMCwgc28gd2UgbmVlZCB0byBvZmZzZXQgdGhlbVxuICB2YXIgb2Zmc2V0ID0gXy5taW4oXG4gICAgXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIGcubm9kZSh2KS5yYW5rO1xuICAgIH0pXG4gICk7XG5cbiAgdmFyIGxheWVycyA9IFtdO1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciByYW5rID0gZy5ub2RlKHYpLnJhbmsgLSBvZmZzZXQ7XG4gICAgaWYgKCFsYXllcnNbcmFua10pIHtcbiAgICAgIGxheWVyc1tyYW5rXSA9IFtdO1xuICAgIH1cbiAgICBsYXllcnNbcmFua10ucHVzaCh2KTtcbiAgfSk7XG5cbiAgdmFyIGRlbHRhID0gMDtcbiAgdmFyIG5vZGVSYW5rRmFjdG9yID0gZy5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO1xuICBfLmZvckVhY2gobGF5ZXJzLCBmdW5jdGlvbiAodnMsIGkpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh2cykgJiYgaSAlIG5vZGVSYW5rRmFjdG9yICE9PSAwKSB7XG4gICAgICAtLWRlbHRhO1xuICAgIH0gZWxzZSBpZiAoZGVsdGEpIHtcbiAgICAgIF8uZm9yRWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgZy5ub2RlKHYpLnJhbmsgKz0gZGVsdGE7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcsIHByZWZpeCwgcmFuaywgb3JkZXIpIHtcbiAgdmFyIG5vZGUgPSB7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICB9O1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSB7XG4gICAgbm9kZS5yYW5rID0gcmFuaztcbiAgICBub2RlLm9yZGVyID0gb3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFkZER1bW15Tm9kZShnLCAnYm9yZGVyJywgbm9kZSwgcHJlZml4KTtcbn1cblxuZnVuY3Rpb24gbWF4UmFuayhnKSB7XG4gIHJldHVybiBfLm1heChcbiAgICBfLm1hcChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgcmFuayA9IGcubm9kZSh2KS5yYW5rO1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHJhbmspKSB7XG4gICAgICAgIHJldHVybiByYW5rO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG59XG5cbi8qXG4gKiBQYXJ0aXRpb24gYSBjb2xsZWN0aW9uIGludG8gdHdvIGdyb3VwczogYGxoc2AgYW5kIGByaHNgLiBJZiB0aGUgc3VwcGxpZWRcbiAqIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW50cnkgaXQgZ29lcyBpbnRvIGBsaHNgLiBPdGhlcndpc2UgaXQgZ29lc1xuICogaW50byBgcmhzLlxuICovXG5mdW5jdGlvbiBwYXJ0aXRpb24oY29sbGVjdGlvbiwgZm4pIHtcbiAgdmFyIHJlc3VsdCA9IHsgbGhzOiBbXSwgcmhzOiBbXSB9O1xuICBfLmZvckVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKGZuKHZhbHVlKSkge1xuICAgICAgcmVzdWx0Lmxocy5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnJocy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKlxuICogUmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmbmAgd2l0aCBhIHRpbWVyLiBUaGUgd3JhcHBlciBsb2dzIHRoZVxuICogdGltZSBpdCB0YWtlcyB0byBleGVjdXRlIHRoZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdGltZShuYW1lLCBmbikge1xuICB2YXIgc3RhcnQgPSBfLm5vdygpO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbnNvbGUubG9nKG5hbWUgKyAnIHRpbWU6ICcgKyAoXy5ub3coKSAtIHN0YXJ0KSArICdtcycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGltZShuYW1lLCBmbikge1xuICByZXR1cm4gZm4oKTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBhZGRCb3JkZXJTZWdtZW50cyB9O1xuXG5mdW5jdGlvbiBhZGRCb3JkZXJTZWdtZW50cyhnKSB7XG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZy5jaGlsZHJlbih2KTtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBfLmZvckVhY2goY2hpbGRyZW4sIGRmcyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaGFzKG5vZGUsICdtaW5SYW5rJykpIHtcbiAgICAgIG5vZGUuYm9yZGVyTGVmdCA9IFtdO1xuICAgICAgbm9kZS5ib3JkZXJSaWdodCA9IFtdO1xuICAgICAgZm9yICh2YXIgcmFuayA9IG5vZGUubWluUmFuaywgbWF4UmFuayA9IG5vZGUubWF4UmFuayArIDE7IHJhbmsgPCBtYXhSYW5rOyArK3JhbmspIHtcbiAgICAgICAgYWRkQm9yZGVyTm9kZShnLCAnYm9yZGVyTGVmdCcsICdfYmwnLCB2LCBub2RlLCByYW5rKTtcbiAgICAgICAgYWRkQm9yZGVyTm9kZShnLCAnYm9yZGVyUmlnaHQnLCAnX2JyJywgdiwgbm9kZSwgcmFuayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgXy5mb3JFYWNoKGcuY2hpbGRyZW4oKSwgZGZzKTtcbn1cblxuZnVuY3Rpb24gYWRkQm9yZGVyTm9kZShnLCBwcm9wLCBwcmVmaXgsIHNnLCBzZ05vZGUsIHJhbmspIHtcbiAgdmFyIGxhYmVsID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCByYW5rOiByYW5rLCBib3JkZXJUeXBlOiBwcm9wIH07XG4gIHZhciBwcmV2ID0gc2dOb2RlW3Byb3BdW3JhbmsgLSAxXTtcbiAgdmFyIGN1cnIgPSB1dGlsLmFkZER1bW15Tm9kZShnLCAnYm9yZGVyJywgbGFiZWwsIHByZWZpeCk7XG4gIHNnTm9kZVtwcm9wXVtyYW5rXSA9IGN1cnI7XG4gIGcuc2V0UGFyZW50KGN1cnIsIHNnKTtcbiAgaWYgKHByZXYpIHtcbiAgICBnLnNldEVkZ2UocHJldiwgY3VyciwgeyB3ZWlnaHQ6IDEgfSk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBhZGp1c3QsIHVuZG8gfTtcblxuZnVuY3Rpb24gYWRqdXN0KGcpIHtcbiAgdmFyIHJhbmtEaXIgPSBnLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmFua0RpciA9PT0gJ2xyJyB8fCByYW5rRGlyID09PSAncmwnKSB7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuZG8oZykge1xuICB2YXIgcmFua0RpciA9IGcuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYW5rRGlyID09PSAnYnQnIHx8IHJhbmtEaXIgPT09ICdybCcpIHtcbiAgICByZXZlcnNlWShnKTtcbiAgfVxuXG4gIGlmIChyYW5rRGlyID09PSAnbHInIHx8IHJhbmtEaXIgPT09ICdybCcpIHtcbiAgICBzd2FwWFkoZyk7XG4gICAgc3dhcFdpZHRoSGVpZ2h0KGcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN3YXBXaWR0aEhlaWdodChnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgc3dhcFdpZHRoSGVpZ2h0T25lKGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHN3YXBXaWR0aEhlaWdodE9uZShnLmVkZ2UoZSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dhcFdpZHRoSGVpZ2h0T25lKGF0dHJzKSB7XG4gIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gIGF0dHJzLndpZHRoID0gYXR0cnMuaGVpZ2h0O1xuICBhdHRycy5oZWlnaHQgPSB3O1xufVxuXG5mdW5jdGlvbiByZXZlcnNlWShnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV2ZXJzZVlPbmUoZy5ub2RlKHYpKTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBfLmZvckVhY2goZWRnZS5wb2ludHMsIHJldmVyc2VZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3knKSkge1xuICAgICAgcmV2ZXJzZVlPbmUoZWRnZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVlPbmUoYXR0cnMpIHtcbiAgYXR0cnMueSA9IC1hdHRycy55O1xufVxuXG5mdW5jdGlvbiBzd2FwWFkoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHN3YXBYWU9uZShnLm5vZGUodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIF8uZm9yRWFjaChlZGdlLnBvaW50cywgc3dhcFhZT25lKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgc3dhcFhZT25lKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN3YXBYWU9uZShhdHRycykge1xuICB2YXIgeCA9IGF0dHJzLng7XG4gIGF0dHJzLnggPSBhdHRycy55O1xuICBhdHRycy55ID0geDtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBydW4sIHVuZG8gfTtcblxuLypcbiAqIEJyZWFrcyBhbnkgbG9uZyBlZGdlcyBpbiB0aGUgZ3JhcGggaW50byBzaG9ydCBzZWdtZW50cyB0aGF0IHNwYW4gMSBsYXllclxuICogZWFjaC4gVGhpcyBvcGVyYXRpb24gaXMgdW5kb2FibGUgd2l0aCB0aGUgZGVub3JtYWxpemUgZnVuY3Rpb24uXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gVGhlIGlucHV0IGdyYXBoIGlzIGEgREFHLlxuICogICAgMi4gRWFjaCBub2RlIGluIHRoZSBncmFwaCBoYXMgYSBcInJhbmtcIiBwcm9wZXJ0eS5cbiAqXG4gKiBQb3N0LWNvbmRpdGlvbjpcbiAqXG4gKiAgICAxLiBBbGwgZWRnZXMgaW4gdGhlIGdyYXBoIGhhdmUgYSBsZW5ndGggb2YgMS5cbiAqICAgIDIuIER1bW15IG5vZGVzIGFyZSBhZGRlZCB3aGVyZSBlZGdlcyBoYXZlIGJlZW4gc3BsaXQgaW50byBzZWdtZW50cy5cbiAqICAgIDMuIFRoZSBncmFwaCBpcyBhdWdtZW50ZWQgd2l0aCBhIFwiZHVtbXlDaGFpbnNcIiBhdHRyaWJ1dGUgd2hpY2ggY29udGFpbnNcbiAqICAgICAgIHRoZSBmaXJzdCBkdW1teSBpbiBlYWNoIGNoYWluIG9mIGR1bW15IG5vZGVzIHByb2R1Y2VkLlxuICovXG5mdW5jdGlvbiBydW4oZykge1xuICBnLmdyYXBoKCkuZHVtbXlDaGFpbnMgPSBbXTtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICBub3JtYWxpemVFZGdlKGcsIGVkZ2UpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRWRnZShnLCBlKSB7XG4gIHZhciB2ID0gZS52O1xuICB2YXIgdlJhbmsgPSBnLm5vZGUodikucmFuaztcbiAgdmFyIHcgPSBlLnc7XG4gIHZhciB3UmFuayA9IGcubm9kZSh3KS5yYW5rO1xuICB2YXIgbmFtZSA9IGUubmFtZTtcbiAgdmFyIGVkZ2VMYWJlbCA9IGcuZWRnZShlKTtcbiAgdmFyIGxhYmVsUmFuayA9IGVkZ2VMYWJlbC5sYWJlbFJhbms7XG5cbiAgaWYgKHdSYW5rID09PSB2UmFuayArIDEpIHJldHVybjtcblxuICBnLnJlbW92ZUVkZ2UoZSk7XG5cbiAgdmFyIGR1bW15LCBhdHRycywgaTtcbiAgZm9yIChpID0gMCwgKyt2UmFuazsgdlJhbmsgPCB3UmFuazsgKytpLCArK3ZSYW5rKSB7XG4gICAgZWRnZUxhYmVsLnBvaW50cyA9IFtdO1xuICAgIGF0dHJzID0ge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBlZGdlTGFiZWw6IGVkZ2VMYWJlbCxcbiAgICAgIGVkZ2VPYmo6IGUsXG4gICAgICByYW5rOiB2UmFuayxcbiAgICB9O1xuICAgIGR1bW15ID0gdXRpbC5hZGREdW1teU5vZGUoZywgJ2VkZ2UnLCBhdHRycywgJ19kJyk7XG4gICAgaWYgKHZSYW5rID09PSBsYWJlbFJhbmspIHtcbiAgICAgIGF0dHJzLndpZHRoID0gZWRnZUxhYmVsLndpZHRoO1xuICAgICAgYXR0cnMuaGVpZ2h0ID0gZWRnZUxhYmVsLmhlaWdodDtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGF0dHJzLmR1bW15ID0gJ2VkZ2UtbGFiZWwnO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgYXR0cnMubGFiZWxwb3MgPSBlZGdlTGFiZWwubGFiZWxwb3M7XG4gICAgfVxuICAgIGcuc2V0RWRnZSh2LCBkdW1teSwgeyB3ZWlnaHQ6IGVkZ2VMYWJlbC53ZWlnaHQgfSwgbmFtZSk7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGcuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGR1bW15KTtcbiAgICB9XG4gICAgdiA9IGR1bW15O1xuICB9XG5cbiAgZy5zZXRFZGdlKHYsIHcsIHsgd2VpZ2h0OiBlZGdlTGFiZWwud2VpZ2h0IH0sIG5hbWUpO1xufVxuXG5mdW5jdGlvbiB1bmRvKGcpIHtcbiAgXy5mb3JFYWNoKGcuZ3JhcGgoKS5kdW1teUNoYWlucywgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB2YXIgb3JpZ0xhYmVsID0gbm9kZS5lZGdlTGFiZWw7XG4gICAgdmFyIHc7XG4gICAgZy5zZXRFZGdlKG5vZGUuZWRnZU9iaiwgb3JpZ0xhYmVsKTtcbiAgICB3aGlsZSAobm9kZS5kdW1teSkge1xuICAgICAgdyA9IGcuc3VjY2Vzc29ycyh2KVswXTtcbiAgICAgIGcucmVtb3ZlTm9kZSh2KTtcbiAgICAgIG9yaWdMYWJlbC5wb2ludHMucHVzaCh7IHg6IG5vZGUueCwgeTogbm9kZS55IH0pO1xuICAgICAgaWYgKG5vZGUuZHVtbXkgPT09ICdlZGdlLWxhYmVsJykge1xuICAgICAgICBvcmlnTGFiZWwueCA9IG5vZGUueDtcbiAgICAgICAgb3JpZ0xhYmVsLnkgPSBub2RlLnk7XG4gICAgICAgIG9yaWdMYWJlbC53aWR0aCA9IG5vZGUud2lkdGg7XG4gICAgICAgIG9yaWdMYWJlbC5oZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICAgIH1cbiAgICAgIHYgPSB3O1xuICAgICAgbm9kZSA9IGcubm9kZSh2KTtcbiAgICB9XG4gIH0pO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGxvbmdlc3RQYXRoLCBzbGFjayB9O1xuXG4vKlxuICogSW5pdGlhbGl6ZXMgcmFua3MgZm9yIHRoZSBpbnB1dCBncmFwaCB1c2luZyB0aGUgbG9uZ2VzdCBwYXRoIGFsZ29yaXRobS4gVGhpc1xuICogYWxnb3JpdGhtIHNjYWxlcyB3ZWxsIGFuZCBpcyBmYXN0IGluIHByYWN0aWNlLCBpdCB5aWVsZHMgcmF0aGVyIHBvb3JcbiAqIHNvbHV0aW9ucy4gTm9kZXMgYXJlIHB1c2hlZCB0byB0aGUgbG93ZXN0IGxheWVyIHBvc3NpYmxlLCBsZWF2aW5nIHRoZSBib3R0b21cbiAqIHJhbmtzIHdpZGUgYW5kIGxlYXZpbmcgZWRnZXMgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5LiBIb3dldmVyLCBkdWUgdG8gaXRzXG4gKiBzcGVlZCwgdGhpcyBhbGdvcml0aG0gaXMgZ29vZCBmb3IgZ2V0dGluZyBhbiBpbml0aWFsIHJhbmtpbmcgdGhhdCBjYW4gYmUgZmVkXG4gKiBpbnRvIG90aGVyIGFsZ29yaXRobXMuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gZG9lcyBub3Qgbm9ybWFsaXplIGxheWVycyBiZWNhdXNlIGl0IHdpbGwgYmUgdXNlZCBieSBvdGhlclxuICogYWxnb3JpdGhtcyBpbiBtb3N0IGNhc2VzLiBJZiB1c2luZyB0aGlzIGFsZ29yaXRobSBkaXJlY3RseSwgYmUgc3VyZSB0b1xuICogcnVuIG5vcm1hbGl6ZSBhdCB0aGUgZW5kLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHLlxuICogICAgMi4gSW5wdXQgZ3JhcGggbm9kZSBsYWJlbHMgY2FuIGJlIGFzc2lnbmVkIHByb3BlcnRpZXMuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEVhY2ggbm9kZSB3aWxsIGJlIGFzc2lnbiBhbiAodW5ub3JtYWxpemVkKSBcInJhbmtcIiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gbG9uZ2VzdFBhdGgoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuXG4gIGZ1bmN0aW9uIGRmcyh2KSB7XG4gICAgdmFyIGxhYmVsID0gZy5ub2RlKHYpO1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgICAgcmV0dXJuIGxhYmVsLnJhbms7XG4gICAgfVxuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuXG4gICAgdmFyIHJhbmsgPSBfLm1pbihcbiAgICAgIF8ubWFwKGcub3V0RWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBkZnMoZS53KSAtIGcuZWRnZShlKS5taW5sZW47XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICByYW5rID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtdKSBmb3IgTG9kYXNoIDNcbiAgICAgIHJhbmsgPT09IHVuZGVmaW5lZCB8fCAvLyByZXR1cm4gdmFsdWUgb2YgXy5tYXAoW10pIGZvciBMb2Rhc2ggNFxuICAgICAgcmFuayA9PT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gcmV0dXJuIHZhbHVlIG9mIF8ubWFwKFtudWxsXSlcbiAgICAgIHJhbmsgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiAobGFiZWwucmFuayA9IHJhbmspO1xuICB9XG5cbiAgXy5mb3JFYWNoKGcuc291cmNlcygpLCBkZnMpO1xufVxuXG4vKlxuICogUmV0dXJucyB0aGUgYW1vdW50IG9mIHNsYWNrIGZvciB0aGUgZ2l2ZW4gZWRnZS4gVGhlIHNsYWNrIGlzIGRlZmluZWQgYXMgdGhlXG4gKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxlbmd0aCBvZiB0aGUgZWRnZSBhbmQgaXRzIG1pbmltdW0gbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzbGFjayhnLCBlKSB7XG4gIHJldHVybiBnLm5vZGUoZS53KS5yYW5rIC0gZy5ub2RlKGUudikucmFuayAtIGcuZWRnZShlKS5taW5sZW47XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vLi4vZ3JhcGhsaWIvaW5kZXguanMnO1xuaW1wb3J0IHsgc2xhY2sgfSBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBmZWFzaWJsZVRyZWUgfTtcblxuLypcbiAqIENvbnN0cnVjdHMgYSBzcGFubmluZyB0cmVlIHdpdGggdGlnaHQgZWRnZXMgYW5kIGFkanVzdGVkIHRoZSBpbnB1dCBub2RlJ3NcbiAqIHJhbmtzIHRvIGFjaGlldmUgdGhpcy4gQSB0aWdodCBlZGdlIGlzIG9uZSB0aGF0IGlzIGhhcyBhIGxlbmd0aCB0aGF0IG1hdGNoZXNcbiAqIGl0cyBcIm1pbmxlblwiIGF0dHJpYnV0ZS5cbiAqXG4gKiBUaGUgYmFzaWMgc3RydWN0dXJlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBHYW5zbmVyLCBldCBhbC4sIFwiQVxuICogVGVjaG5pcXVlIGZvciBEcmF3aW5nIERpcmVjdGVkIEdyYXBocy5cIlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG11c3QgYmUgYSBEQUcuXG4gKiAgICAyLiBHcmFwaCBtdXN0IGJlIGNvbm5lY3RlZC5cbiAqICAgIDMuIEdyYXBoIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbm9kZS5cbiAqICAgIDUuIEdyYXBoIG5vZGVzIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYXNzaWduZWQgYSBcInJhbmtcIiBwcm9wZXJ0eSB0aGF0XG4gKiAgICAgICByZXNwZWN0cyB0aGUgXCJtaW5sZW5cIiBwcm9wZXJ0eSBvZiBpbmNpZGVudCBlZGdlcy5cbiAqICAgIDYuIEdyYXBoIGVkZ2VzIG11c3QgaGF2ZSBhIFwibWlubGVuXCIgcHJvcGVydHkuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIC0gR3JhcGggbm9kZXMgd2lsbCBoYXZlIHRoZWlyIHJhbmsgYWRqdXN0ZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGVkZ2VzIGFyZVxuICogICAgICB0aWdodC5cbiAqXG4gKiBSZXR1cm5zIGEgdHJlZSAodW5kaXJlY3RlZCBncmFwaCkgdGhhdCBpcyBjb25zdHJ1Y3RlZCB1c2luZyBvbmx5IFwidGlnaHRcIlxuICogZWRnZXMuXG4gKi9cbmZ1bmN0aW9uIGZlYXNpYmxlVHJlZShnKSB7XG4gIHZhciB0ID0gbmV3IEdyYXBoKHsgZGlyZWN0ZWQ6IGZhbHNlIH0pO1xuXG4gIC8vIENob29zZSBhcmJpdHJhcnkgbm9kZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IG91ciB0cmVlXG4gIHZhciBzdGFydCA9IGcubm9kZXMoKVswXTtcbiAgdmFyIHNpemUgPSBnLm5vZGVDb3VudCgpO1xuICB0LnNldE5vZGUoc3RhcnQsIHt9KTtcblxuICB2YXIgZWRnZSwgZGVsdGE7XG4gIHdoaWxlICh0aWdodFRyZWUodCwgZykgPCBzaXplKSB7XG4gICAgZWRnZSA9IGZpbmRNaW5TbGFja0VkZ2UodCwgZyk7XG4gICAgZGVsdGEgPSB0Lmhhc05vZGUoZWRnZS52KSA/IHNsYWNrKGcsIGVkZ2UpIDogLXNsYWNrKGcsIGVkZ2UpO1xuICAgIHNoaWZ0UmFua3ModCwgZywgZGVsdGEpO1xuICB9XG5cbiAgcmV0dXJuIHQ7XG59XG5cbi8qXG4gKiBGaW5kcyBhIG1heGltYWwgdHJlZSBvZiB0aWdodCBlZGdlcyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZVxuICogdHJlZS5cbiAqL1xuZnVuY3Rpb24gdGlnaHRUcmVlKHQsIGcpIHtcbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICBfLmZvckVhY2goZy5ub2RlRWRnZXModiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgZWRnZVYgPSBlLnYsXG4gICAgICAgIHcgPSB2ID09PSBlZGdlViA/IGUudyA6IGVkZ2VWO1xuICAgICAgaWYgKCF0Lmhhc05vZGUodykgJiYgIXNsYWNrKGcsIGUpKSB7XG4gICAgICAgIHQuc2V0Tm9kZSh3LCB7fSk7XG4gICAgICAgIHQuc2V0RWRnZSh2LCB3LCB7fSk7XG4gICAgICAgIGRmcyh3KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF8uZm9yRWFjaCh0Lm5vZGVzKCksIGRmcyk7XG4gIHJldHVybiB0Lm5vZGVDb3VudCgpO1xufVxuXG4vKlxuICogRmluZHMgdGhlIGVkZ2Ugd2l0aCB0aGUgc21hbGxlc3Qgc2xhY2sgdGhhdCBpcyBpbmNpZGVudCBvbiB0cmVlIGFuZCByZXR1cm5zXG4gKiBpdC5cbiAqL1xuZnVuY3Rpb24gZmluZE1pblNsYWNrRWRnZSh0LCBnKSB7XG4gIHJldHVybiBfLm1pbkJ5KGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAodC5oYXNOb2RlKGUudikgIT09IHQuaGFzTm9kZShlLncpKSB7XG4gICAgICByZXR1cm4gc2xhY2soZywgZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hpZnRSYW5rcyh0LCBnLCBkZWx0YSkge1xuICBfLmZvckVhY2godC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGcubm9kZSh2KS5yYW5rICs9IGRlbHRhO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgUHJpb3JpdHlRdWV1ZSB9IGZyb20gJy4uL2RhdGEvcHJpb3JpdHktcXVldWUuanMnO1xuXG5leHBvcnQgeyBkaWprc3RyYSB9O1xuXG52YXIgREVGQVVMVF9XRUlHSFRfRlVOQyA9IF8uY29uc3RhbnQoMSk7XG5cbmZ1bmN0aW9uIGRpamtzdHJhKGcsIHNvdXJjZSwgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICByZXR1cm4gcnVuRGlqa3N0cmEoXG4gICAgZyxcbiAgICBTdHJpbmcoc291cmNlKSxcbiAgICB3ZWlnaHRGbiB8fCBERUZBVUxUX1dFSUdIVF9GVU5DLFxuICAgIGVkZ2VGbiB8fFxuICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGcub3V0RWRnZXModik7XG4gICAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRpamtzdHJhKGcsIHNvdXJjZSwgd2VpZ2h0Rm4sIGVkZ2VGbikge1xuICB2YXIgcmVzdWx0cyA9IHt9O1xuICB2YXIgcHEgPSBuZXcgUHJpb3JpdHlRdWV1ZSgpO1xuICB2YXIgdiwgdkVudHJ5O1xuXG4gIHZhciB1cGRhdGVOZWlnaGJvcnMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHZhciB3ID0gZWRnZS52ICE9PSB2ID8gZWRnZS52IDogZWRnZS53O1xuICAgIHZhciB3RW50cnkgPSByZXN1bHRzW3ddO1xuICAgIHZhciB3ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICB2YXIgZGlzdGFuY2UgPSB2RW50cnkuZGlzdGFuY2UgKyB3ZWlnaHQ7XG5cbiAgICBpZiAod2VpZ2h0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnZGlqa3N0cmEgZG9lcyBub3QgYWxsb3cgbmVnYXRpdmUgZWRnZSB3ZWlnaHRzLiAnICtcbiAgICAgICAgICAnQmFkIGVkZ2U6ICcgK1xuICAgICAgICAgIGVkZ2UgK1xuICAgICAgICAgICcgV2VpZ2h0OiAnICtcbiAgICAgICAgICB3ZWlnaHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3RhbmNlIDwgd0VudHJ5LmRpc3RhbmNlKSB7XG4gICAgICB3RW50cnkuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgIHdFbnRyeS5wcmVkZWNlc3NvciA9IHY7XG4gICAgICBwcS5kZWNyZWFzZSh3LCBkaXN0YW5jZSk7XG4gICAgfVxuICB9O1xuXG4gIGcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGRpc3RhbmNlID0gdiA9PT0gc291cmNlID8gMCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICByZXN1bHRzW3ZdID0geyBkaXN0YW5jZTogZGlzdGFuY2UgfTtcbiAgICBwcS5hZGQodiwgZGlzdGFuY2UpO1xuICB9KTtcblxuICB3aGlsZSAocHEuc2l6ZSgpID4gMCkge1xuICAgIHYgPSBwcS5yZW1vdmVNaW4oKTtcbiAgICB2RW50cnkgPSByZXN1bHRzW3ZdO1xuICAgIGlmICh2RW50cnkuZGlzdGFuY2UgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZWRnZUZuKHYpLmZvckVhY2godXBkYXRlTmVpZ2hib3JzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBkaWprc3RyYSB9IGZyb20gJy4vZGlqa3N0cmEuanMnO1xuXG5leHBvcnQgeyBkaWprc3RyYUFsbCB9O1xuXG5mdW5jdGlvbiBkaWprc3RyYUFsbChnLCB3ZWlnaHRGdW5jLCBlZGdlRnVuYykge1xuICByZXR1cm4gXy50cmFuc2Zvcm0oXG4gICAgZy5ub2RlcygpLFxuICAgIGZ1bmN0aW9uIChhY2MsIHYpIHtcbiAgICAgIGFjY1t2XSA9IGRpamtzdHJhKGcsIHYsIHdlaWdodEZ1bmMsIGVkZ2VGdW5jKTtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHRhcmphbiB9IGZyb20gJy4vdGFyamFuLmpzJztcblxuZXhwb3J0IHsgZmluZEN5Y2xlcyB9O1xuXG5mdW5jdGlvbiBmaW5kQ3ljbGVzKGcpIHtcbiAgcmV0dXJuIF8uZmlsdGVyKHRhcmphbihnKSwgZnVuY3Rpb24gKGNtcHQpIHtcbiAgICByZXR1cm4gY21wdC5sZW5ndGggPiAxIHx8IChjbXB0Lmxlbmd0aCA9PT0gMSAmJiBnLmhhc0VkZ2UoY21wdFswXSwgY21wdFswXSkpO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyBmbG95ZFdhcnNoYWxsIH07XG5cbnZhciBERUZBVUxUX1dFSUdIVF9GVU5DID0gXy5jb25zdGFudCgxKTtcblxuZnVuY3Rpb24gZmxveWRXYXJzaGFsbChnLCB3ZWlnaHRGbiwgZWRnZUZuKSB7XG4gIHJldHVybiBydW5GbG95ZFdhcnNoYWxsKFxuICAgIGcsXG4gICAgd2VpZ2h0Rm4gfHwgREVGQVVMVF9XRUlHSFRfRlVOQyxcbiAgICBlZGdlRm4gfHxcbiAgICAgIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBnLm91dEVkZ2VzKHYpO1xuICAgICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBydW5GbG95ZFdhcnNoYWxsKGcsIHdlaWdodEZuLCBlZGdlRm4pIHtcbiAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgdmFyIG5vZGVzID0gZy5ub2RlcygpO1xuXG4gIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICByZXN1bHRzW3ZdID0ge307XG4gICAgcmVzdWx0c1t2XVt2XSA9IHsgZGlzdGFuY2U6IDAgfTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uICh3KSB7XG4gICAgICBpZiAodiAhPT0gdykge1xuICAgICAgICByZXN1bHRzW3ZdW3ddID0geyBkaXN0YW5jZTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgZWRnZUZuKHYpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgIHZhciB3ID0gZWRnZS52ID09PSB2ID8gZWRnZS53IDogZWRnZS52O1xuICAgICAgdmFyIGQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICAgIHJlc3VsdHNbdl1bd10gPSB7IGRpc3RhbmNlOiBkLCBwcmVkZWNlc3NvcjogdiB9O1xuICAgIH0pO1xuICB9KTtcblxuICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIHJvd0sgPSByZXN1bHRzW2tdO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgIHZhciByb3dJID0gcmVzdWx0c1tpXTtcbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGopIHtcbiAgICAgICAgdmFyIGlrID0gcm93SVtrXTtcbiAgICAgICAgdmFyIGtqID0gcm93S1tqXTtcbiAgICAgICAgdmFyIGlqID0gcm93SVtqXTtcbiAgICAgICAgdmFyIGFsdERpc3RhbmNlID0gaWsuZGlzdGFuY2UgKyBrai5kaXN0YW5jZTtcbiAgICAgICAgaWYgKGFsdERpc3RhbmNlIDwgaWouZGlzdGFuY2UpIHtcbiAgICAgICAgICBpai5kaXN0YW5jZSA9IGFsdERpc3RhbmNlO1xuICAgICAgICAgIGlqLnByZWRlY2Vzc29yID0ga2oucHJlZGVjZXNzb3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgeyB0b3Bzb3J0LCBDeWNsZUV4Y2VwdGlvbiB9O1xuXG50b3Bzb3J0LkN5Y2xlRXhjZXB0aW9uID0gQ3ljbGVFeGNlcHRpb247XG5cbmZ1bmN0aW9uIHRvcHNvcnQoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuICB2YXIgc3RhY2sgPSB7fTtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICBmdW5jdGlvbiB2aXNpdChub2RlKSB7XG4gICAgaWYgKF8uaGFzKHN0YWNrLCBub2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEN5Y2xlRXhjZXB0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmhhcyh2aXNpdGVkLCBub2RlKSkge1xuICAgICAgc3RhY2tbbm9kZV0gPSB0cnVlO1xuICAgICAgdmlzaXRlZFtub2RlXSA9IHRydWU7XG4gICAgICBfLmVhY2goZy5wcmVkZWNlc3NvcnMobm9kZSksIHZpc2l0KTtcbiAgICAgIGRlbGV0ZSBzdGFja1tub2RlXTtcbiAgICAgIHJlc3VsdHMucHVzaChub2RlKTtcbiAgICB9XG4gIH1cblxuICBfLmVhY2goZy5zaW5rcygpLCB2aXNpdCk7XG5cbiAgaWYgKF8uc2l6ZSh2aXNpdGVkKSAhPT0gZy5ub2RlQ291bnQoKSkge1xuICAgIHRocm93IG5ldyBDeWNsZUV4Y2VwdGlvbigpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIEN5Y2xlRXhjZXB0aW9uKCkge31cbkN5Y2xlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOyAvLyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEVycm9yIHRvIHBhc3MgdGVzdGluZ1xuIiwKICAgICJpbXBvcnQgeyB0b3Bzb3J0LCBDeWNsZUV4Y2VwdGlvbiB9IGZyb20gJy4vdG9wc29ydC5qcyc7XG5cbmV4cG9ydCB7IGlzQWN5Y2xpYyB9O1xuXG5mdW5jdGlvbiBpc0FjeWNsaWMoZykge1xuICB0cnkge1xuICAgIHRvcHNvcnQoZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEN5Y2xlRXhjZXB0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgZGZzIH07XG5cbi8qXG4gKiBBIGhlbHBlciB0aGF0IHByZWZvcm1zIGEgcHJlLSBvciBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvbiB0aGUgaW5wdXQgZ3JhcGhcbiAqIGFuZCByZXR1cm5zIHRoZSBub2RlcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHZpc2l0ZWQuIElmIHRoZSBncmFwaCBpc1xuICogdW5kaXJlY3RlZCB0aGVuIHRoaXMgYWxnb3JpdGhtIHdpbGwgbmF2aWdhdGUgdXNpbmcgbmVpZ2hib3JzLiBJZiB0aGUgZ3JhcGhcbiAqIGlzIGRpcmVjdGVkIHRoZW4gdGhpcyBhbGdvcml0aG0gd2lsbCBuYXZpZ2F0ZSB1c2luZyBzdWNjZXNzb3JzLlxuICpcbiAqIE9yZGVyIG11c3QgYmUgb25lIG9mIFwicHJlXCIgb3IgXCJwb3N0XCIuXG4gKi9cbmZ1bmN0aW9uIGRmcyhnLCB2cywgb3JkZXIpIHtcbiAgaWYgKCFfLmlzQXJyYXkodnMpKSB7XG4gICAgdnMgPSBbdnNdO1xuICB9XG5cbiAgdmFyIG5hdmlnYXRpb24gPSAoZy5pc0RpcmVjdGVkKCkgPyBnLnN1Y2Nlc3NvcnMgOiBnLm5laWdoYm9ycykuYmluZChnKTtcblxuICB2YXIgYWNjID0gW107XG4gIHZhciB2aXNpdGVkID0ge307XG4gIF8uZWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoIWcuaGFzTm9kZSh2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICcgKyB2KTtcbiAgICB9XG5cbiAgICBkb0RmcyhnLCB2LCBvcmRlciA9PT0gJ3Bvc3QnLCB2aXNpdGVkLCBuYXZpZ2F0aW9uLCBhY2MpO1xuICB9KTtcbiAgcmV0dXJuIGFjYztcbn1cblxuZnVuY3Rpb24gZG9EZnMoZywgdiwgcG9zdG9yZGVyLCB2aXNpdGVkLCBuYXZpZ2F0aW9uLCBhY2MpIHtcbiAgaWYgKCFfLmhhcyh2aXNpdGVkLCB2KSkge1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuXG4gICAgaWYgKCFwb3N0b3JkZXIpIHtcbiAgICAgIGFjYy5wdXNoKHYpO1xuICAgIH1cbiAgICBfLmVhY2gobmF2aWdhdGlvbih2KSwgZnVuY3Rpb24gKHcpIHtcbiAgICAgIGRvRGZzKGcsIHcsIHBvc3RvcmRlciwgdmlzaXRlZCwgbmF2aWdhdGlvbiwgYWNjKTtcbiAgICB9KTtcbiAgICBpZiAocG9zdG9yZGVyKSB7XG4gICAgICBhY2MucHVzaCh2KTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZGZzIH0gZnJvbSAnLi9kZnMuanMnO1xuXG5leHBvcnQgeyBwb3N0b3JkZXIgfTtcblxuZnVuY3Rpb24gcG9zdG9yZGVyKGcsIHZzKSB7XG4gIHJldHVybiBkZnMoZywgdnMsICdwb3N0Jyk7XG59XG4iLAogICAgImltcG9ydCB7IGRmcyB9IGZyb20gJy4vZGZzLmpzJztcblxuZXhwb3J0IHsgcHJlb3JkZXIgfTtcblxuZnVuY3Rpb24gcHJlb3JkZXIoZywgdnMpIHtcbiAgcmV0dXJuIGRmcyhnLCB2cywgJ3ByZScpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBQcmlvcml0eVF1ZXVlIH0gZnJvbSAnLi4vZGF0YS9wcmlvcml0eS1xdWV1ZS5qcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uL2dyYXBoLmpzJztcblxuZXhwb3J0IHsgcHJpbSB9O1xuXG5mdW5jdGlvbiBwcmltKGcsIHdlaWdodEZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBHcmFwaCgpO1xuICB2YXIgcGFyZW50cyA9IHt9O1xuICB2YXIgcHEgPSBuZXcgUHJpb3JpdHlRdWV1ZSgpO1xuICB2YXIgdjtcblxuICBmdW5jdGlvbiB1cGRhdGVOZWlnaGJvcnMoZWRnZSkge1xuICAgIHZhciB3ID0gZWRnZS52ID09PSB2ID8gZWRnZS53IDogZWRnZS52O1xuICAgIHZhciBwcmkgPSBwcS5wcmlvcml0eSh3KTtcbiAgICBpZiAocHJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBlZGdlV2VpZ2h0ID0gd2VpZ2h0RnVuYyhlZGdlKTtcbiAgICAgIGlmIChlZGdlV2VpZ2h0IDwgcHJpKSB7XG4gICAgICAgIHBhcmVudHNbd10gPSB2O1xuICAgICAgICBwcS5kZWNyZWFzZSh3LCBlZGdlV2VpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZy5ub2RlQ291bnQoKSA9PT0gMCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfLmVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHBxLmFkZCh2LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIHJlc3VsdC5zZXROb2RlKHYpO1xuICB9KTtcblxuICAvLyBTdGFydCBmcm9tIGFuIGFyYml0cmFyeSBub2RlXG4gIHBxLmRlY3JlYXNlKGcubm9kZXMoKVswXSwgMCk7XG5cbiAgdmFyIGluaXQgPSBmYWxzZTtcbiAgd2hpbGUgKHBxLnNpemUoKSA+IDApIHtcbiAgICB2ID0gcHEucmVtb3ZlTWluKCk7XG4gICAgaWYgKF8uaGFzKHBhcmVudHMsIHYpKSB7XG4gICAgICByZXN1bHQuc2V0RWRnZSh2LCBwYXJlbnRzW3ZdKTtcbiAgICB9IGVsc2UgaWYgKGluaXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogJyArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbml0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnLm5vZGVFZGdlcyh2KS5mb3JFYWNoKHVwZGF0ZU5laWdoYm9ycyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwKICAgICJpbXBvcnQgeyBjb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzLmpzJztcbmltcG9ydCB7IGRpamtzdHJhIH0gZnJvbSAnLi9kaWprc3RyYS5qcyc7XG5pbXBvcnQgeyBkaWprc3RyYUFsbCB9IGZyb20gJy4vZGlqa3N0cmEtYWxsLmpzJztcbmltcG9ydCB7IGZpbmRDeWNsZXMgfSBmcm9tICcuL2ZpbmQtY3ljbGVzLmpzJztcbmltcG9ydCB7IGZsb3lkV2Fyc2hhbGwgfSBmcm9tICcuL2Zsb3lkLXdhcnNoYWxsLmpzJztcbmltcG9ydCB7IGlzQWN5Y2xpYyB9IGZyb20gJy4vaXMtYWN5Y2xpYy5qcyc7XG5pbXBvcnQgeyBwb3N0b3JkZXIgfSBmcm9tICcuL3Bvc3RvcmRlci5qcyc7XG5pbXBvcnQgeyBwcmVvcmRlciB9IGZyb20gJy4vcHJlb3JkZXIuanMnO1xuaW1wb3J0IHsgcHJpbSB9IGZyb20gJy4vcHJpbS5qcyc7XG5pbXBvcnQgeyB0YXJqYW4gfSBmcm9tICcuL3Rhcmphbi5qcyc7XG5pbXBvcnQgeyB0b3Bzb3J0IH0gZnJvbSAnLi90b3Bzb3J0LmpzJztcblxuZXhwb3J0IHtcbiAgY29tcG9uZW50cyxcbiAgZGlqa3N0cmEsXG4gIGRpamtzdHJhQWxsLFxuICBmaW5kQ3ljbGVzLFxuICBmbG95ZFdhcnNoYWxsLFxuICBpc0FjeWNsaWMsXG4gIHBvc3RvcmRlcixcbiAgcHJlb3JkZXIsXG4gIHByaW0sXG4gIHRhcmphbixcbiAgdG9wc29ydCxcbn07XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIGFsZyBmcm9tICcuLi8uLi9ncmFwaGxpYi9hbGcvaW5kZXguanMnO1xuaW1wb3J0IHsgc2ltcGxpZnkgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGZlYXNpYmxlVHJlZSB9IGZyb20gJy4vZmVhc2libGUtdHJlZS5qcyc7XG5pbXBvcnQgeyBsb25nZXN0UGF0aCwgc2xhY2sgfSBmcm9tICcuL3V0aWwuanMnO1xuXG5leHBvcnQgeyBuZXR3b3JrU2ltcGxleCB9O1xuXG4vLyBFeHBvc2Ugc29tZSBpbnRlcm5hbHMgZm9yIHRlc3RpbmcgcHVycG9zZXNcbm5ldHdvcmtTaW1wbGV4LmluaXRMb3dMaW1WYWx1ZXMgPSBpbml0TG93TGltVmFsdWVzO1xubmV0d29ya1NpbXBsZXguaW5pdEN1dFZhbHVlcyA9IGluaXRDdXRWYWx1ZXM7XG5uZXR3b3JrU2ltcGxleC5jYWxjQ3V0VmFsdWUgPSBjYWxjQ3V0VmFsdWU7XG5uZXR3b3JrU2ltcGxleC5sZWF2ZUVkZ2UgPSBsZWF2ZUVkZ2U7XG5uZXR3b3JrU2ltcGxleC5lbnRlckVkZ2UgPSBlbnRlckVkZ2U7XG5uZXR3b3JrU2ltcGxleC5leGNoYW5nZUVkZ2VzID0gZXhjaGFuZ2VFZGdlcztcblxuLypcbiAqIFRoZSBuZXR3b3JrIHNpbXBsZXggYWxnb3JpdGhtIGFzc2lnbnMgcmFua3MgdG8gZWFjaCBub2RlIGluIHRoZSBpbnB1dCBncmFwaFxuICogYW5kIGl0ZXJhdGl2ZWx5IGltcHJvdmVzIHRoZSByYW5raW5nIHRvIHJlZHVjZSB0aGUgbGVuZ3RoIG9mIGVkZ2VzLlxuICpcbiAqIFByZWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gVGhlIGlucHV0IGdyYXBoIG11c3QgYmUgYSBEQUcuXG4gKiAgICAyLiBBbGwgbm9kZXMgaW4gdGhlIGdyYXBoIG11c3QgaGF2ZSBhbiBvYmplY3QgdmFsdWUuXG4gKiAgICAzLiBBbGwgZWRnZXMgaW4gdGhlIGdyYXBoIG11c3QgaGF2ZSBcIm1pbmxlblwiIGFuZCBcIndlaWdodFwiIGF0dHJpYnV0ZXMuXG4gKlxuICogUG9zdGNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gQWxsIG5vZGVzIGluIHRoZSBncmFwaCB3aWxsIGhhdmUgYW4gYXNzaWduZWQgXCJyYW5rXCIgYXR0cmlidXRlIHRoYXQgaGFzXG4gKiAgICAgICBiZWVuIG9wdGltaXplZCBieSB0aGUgbmV0d29yayBzaW1wbGV4IGFsZ29yaXRobS4gUmFua3Mgc3RhcnQgYXQgMC5cbiAqXG4gKlxuICogQSByb3VnaCBza2V0Y2ggb2YgdGhlIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxuICpcbiAqICAgIDEuIEFzc2lnbiBpbml0aWFsIHJhbmtzIHRvIGVhY2ggbm9kZS4gV2UgdXNlIHRoZSBsb25nZXN0IHBhdGggYWxnb3JpdGhtLFxuICogICAgICAgd2hpY2ggYXNzaWducyByYW5rcyB0byB0aGUgbG93ZXN0IHBvc2l0aW9uIHBvc3NpYmxlLiBJbiBnZW5lcmFsIHRoaXNcbiAqICAgICAgIGxlYWRzIHRvIHZlcnkgd2lkZSBib3R0b20gcmFua3MgYW5kIHVubmVjZXNzYXJpbHkgbG9uZyBlZGdlcy5cbiAqICAgIDIuIENvbnN0cnVjdCBhIGZlYXNpYmxlIHRpZ2h0IHRyZWUuIEEgdGlnaHQgdHJlZSBpcyBvbmUgc3VjaCB0aGF0IGFsbFxuICogICAgICAgZWRnZXMgaW4gdGhlIHRyZWUgaGF2ZSBubyBzbGFjayAoZGlmZmVyZW5jZSBiZXR3ZWVuIGxlbmd0aCBvZiBlZGdlXG4gKiAgICAgICBhbmQgbWlubGVuIGZvciB0aGUgZWRnZSkuIFRoaXMgYnkgaXRzZWxmIGdyZWF0bHkgaW1wcm92ZXMgdGhlIGFzc2lnbmVkXG4gKiAgICAgICByYW5raW5ncyBieSBzaG9ydGluZyBlZGdlcy5cbiAqICAgIDMuIEl0ZXJhdGl2ZWx5IGZpbmQgZWRnZXMgdGhhdCBoYXZlIG5lZ2F0aXZlIGN1dCB2YWx1ZXMuIEdlbmVyYWxseSBhXG4gKiAgICAgICBuZWdhdGl2ZSBjdXQgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIGVkZ2UgY291bGQgYmUgcmVtb3ZlZCBhbmQgYSBuZXdcbiAqICAgICAgIHRyZWUgZWRnZSBjb3VsZCBiZSBhZGRlZCB0byBwcm9kdWNlIGEgbW9yZSBjb21wYWN0IGdyYXBoLlxuICpcbiAqIE11Y2ggb2YgdGhlIGFsZ29yaXRobXMgaGVyZSBhcmUgZGVyaXZlZCBmcm9tIEdhbnNuZXIsIGV0IGFsLiwgXCJBIFRlY2huaXF1ZVxuICogZm9yIERyYXdpbmcgRGlyZWN0ZWQgR3JhcGhzLlwiIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgcm91Z2hseSBmb2xsb3dzIHRoZVxuICogc3RydWN0dXJlIG9mIHRoZSBvdmVyYWxsIGFsZ29yaXRobS5cbiAqL1xuZnVuY3Rpb24gbmV0d29ya1NpbXBsZXgoZykge1xuICBnID0gc2ltcGxpZnkoZyk7XG4gIGxvbmdlc3RQYXRoKGcpO1xuICB2YXIgdCA9IGZlYXNpYmxlVHJlZShnKTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcblxuICB2YXIgZSwgZjtcbiAgd2hpbGUgKChlID0gbGVhdmVFZGdlKHQpKSkge1xuICAgIGYgPSBlbnRlckVkZ2UodCwgZywgZSk7XG4gICAgZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKTtcbiAgfVxufVxuXG4vKlxuICogSW5pdGlhbGl6ZXMgY3V0IHZhbHVlcyBmb3IgYWxsIGVkZ2VzIGluIHRoZSB0cmVlLlxuICovXG5mdW5jdGlvbiBpbml0Q3V0VmFsdWVzKHQsIGcpIHtcbiAgdmFyIHZzID0gYWxnLnBvc3RvcmRlcih0LCB0Lm5vZGVzKCkpO1xuICB2cyA9IHZzLnNsaWNlKDAsIHZzLmxlbmd0aCAtIDEpO1xuICBfLmZvckVhY2godnMsIGZ1bmN0aW9uICh2KSB7XG4gICAgYXNzaWduQ3V0VmFsdWUodCwgZywgdik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DdXRWYWx1ZSh0LCBnLCBjaGlsZCkge1xuICB2YXIgY2hpbGRMYWIgPSB0Lm5vZGUoY2hpbGQpO1xuICB2YXIgcGFyZW50ID0gY2hpbGRMYWIucGFyZW50O1xuICB0LmVkZ2UoY2hpbGQsIHBhcmVudCkuY3V0dmFsdWUgPSBjYWxjQ3V0VmFsdWUodCwgZywgY2hpbGQpO1xufVxuXG4vKlxuICogR2l2ZW4gdGhlIHRpZ2h0IHRyZWUsIGl0cyBncmFwaCwgYW5kIGEgY2hpbGQgaW4gdGhlIGdyYXBoIGNhbGN1bGF0ZSBhbmRcbiAqIHJldHVybiB0aGUgY3V0IHZhbHVlIGZvciB0aGUgZWRnZSBiZXR3ZWVuIHRoZSBjaGlsZCBhbmQgaXRzIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gY2FsY0N1dFZhbHVlKHQsIGcsIGNoaWxkKSB7XG4gIHZhciBjaGlsZExhYiA9IHQubm9kZShjaGlsZCk7XG4gIHZhciBwYXJlbnQgPSBjaGlsZExhYi5wYXJlbnQ7XG4gIC8vIFRydWUgaWYgdGhlIGNoaWxkIGlzIG9uIHRoZSB0YWlsIGVuZCBvZiB0aGUgZWRnZSBpbiB0aGUgZGlyZWN0ZWQgZ3JhcGhcbiAgdmFyIGNoaWxkSXNUYWlsID0gdHJ1ZTtcbiAgLy8gVGhlIGdyYXBoJ3MgdmlldyBvZiB0aGUgdHJlZSBlZGdlIHdlJ3JlIGluc3BlY3RpbmdcbiAgdmFyIGdyYXBoRWRnZSA9IGcuZWRnZShjaGlsZCwgcGFyZW50KTtcbiAgLy8gVGhlIGFjY3VtdWxhdGVkIGN1dCB2YWx1ZSBmb3IgdGhlIGVkZ2UgYmV0d2VlbiB0aGlzIG5vZGUgYW5kIGl0cyBwYXJlbnRcbiAgdmFyIGN1dFZhbHVlID0gMDtcblxuICBpZiAoIWdyYXBoRWRnZSkge1xuICAgIGNoaWxkSXNUYWlsID0gZmFsc2U7XG4gICAgZ3JhcGhFZGdlID0gZy5lZGdlKHBhcmVudCwgY2hpbGQpO1xuICB9XG5cbiAgY3V0VmFsdWUgPSBncmFwaEVkZ2Uud2VpZ2h0O1xuXG4gIF8uZm9yRWFjaChnLm5vZGVFZGdlcyhjaGlsZCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGlzT3V0RWRnZSA9IGUudiA9PT0gY2hpbGQsXG4gICAgICBvdGhlciA9IGlzT3V0RWRnZSA/IGUudyA6IGUudjtcblxuICAgIGlmIChvdGhlciAhPT0gcGFyZW50KSB7XG4gICAgICB2YXIgcG9pbnRzVG9IZWFkID0gaXNPdXRFZGdlID09PSBjaGlsZElzVGFpbCxcbiAgICAgICAgb3RoZXJXZWlnaHQgPSBnLmVkZ2UoZSkud2VpZ2h0O1xuXG4gICAgICBjdXRWYWx1ZSArPSBwb2ludHNUb0hlYWQgPyBvdGhlcldlaWdodCA6IC1vdGhlcldlaWdodDtcbiAgICAgIGlmIChpc1RyZWVFZGdlKHQsIGNoaWxkLCBvdGhlcikpIHtcbiAgICAgICAgdmFyIG90aGVyQ3V0VmFsdWUgPSB0LmVkZ2UoY2hpbGQsIG90aGVyKS5jdXR2YWx1ZTtcbiAgICAgICAgY3V0VmFsdWUgKz0gcG9pbnRzVG9IZWFkID8gLW90aGVyQ3V0VmFsdWUgOiBvdGhlckN1dFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGN1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbml0TG93TGltVmFsdWVzKHRyZWUsIHJvb3QpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgcm9vdCA9IHRyZWUubm9kZXMoKVswXTtcbiAgfVxuICBkZnNBc3NpZ25Mb3dMaW0odHJlZSwge30sIDEsIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBkZnNBc3NpZ25Mb3dMaW0odHJlZSwgdmlzaXRlZCwgbmV4dExpbSwgdiwgcGFyZW50KSB7XG4gIHZhciBsb3cgPSBuZXh0TGltO1xuICB2YXIgbGFiZWwgPSB0cmVlLm5vZGUodik7XG5cbiAgdmlzaXRlZFt2XSA9IHRydWU7XG4gIF8uZm9yRWFjaCh0cmVlLm5laWdoYm9ycyh2KSwgZnVuY3Rpb24gKHcpIHtcbiAgICBpZiAoIV8uaGFzKHZpc2l0ZWQsIHcpKSB7XG4gICAgICBuZXh0TGltID0gZGZzQXNzaWduTG93TGltKHRyZWUsIHZpc2l0ZWQsIG5leHRMaW0sIHcsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGFiZWwubG93ID0gbG93O1xuICBsYWJlbC5saW0gPSBuZXh0TGltKys7XG4gIGlmIChwYXJlbnQpIHtcbiAgICBsYWJlbC5wYXJlbnQgPSBwYXJlbnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyB3aGVuIHdlIGluY3JlbWVudGFsbHkgdXBkYXRlIGxvdyBsaW1cbiAgICBkZWxldGUgbGFiZWwucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIG5leHRMaW07XG59XG5cbmZ1bmN0aW9uIGxlYXZlRWRnZSh0cmVlKSB7XG4gIHJldHVybiBfLmZpbmQodHJlZS5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiB0cmVlLmVkZ2UoZSkuY3V0dmFsdWUgPCAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZW50ZXJFZGdlKHQsIGcsIGVkZ2UpIHtcbiAgdmFyIHYgPSBlZGdlLnY7XG4gIHZhciB3ID0gZWRnZS53O1xuXG4gIC8vIEZvciB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIHdlIGFzc3VtZSB0aGF0IHYgaXMgdGhlIHRhaWwgYW5kIHcgaXMgdGhlXG4gIC8vIGhlYWQsIHNvIGlmIHdlIGRvbid0IGhhdmUgdGhpcyBlZGdlIGluIHRoZSBncmFwaCB3ZSBzaG91bGQgZmxpcCBpdCB0b1xuICAvLyBtYXRjaCB0aGUgY29ycmVjdCBvcmllbnRhdGlvbi5cbiAgaWYgKCFnLmhhc0VkZ2UodiwgdykpIHtcbiAgICB2ID0gZWRnZS53O1xuICAgIHcgPSBlZGdlLnY7XG4gIH1cblxuICB2YXIgdkxhYmVsID0gdC5ub2RlKHYpO1xuICB2YXIgd0xhYmVsID0gdC5ub2RlKHcpO1xuICB2YXIgdGFpbExhYmVsID0gdkxhYmVsO1xuICB2YXIgZmxpcCA9IGZhbHNlO1xuXG4gIC8vIElmIHRoZSByb290IGlzIGluIHRoZSB0YWlsIG9mIHRoZSBlZGdlIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBsb2dpYyB0aGF0XG4gIC8vIGNoZWNrcyBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgbm9kZXMgaW4gdGhlIGNhbmRpZGF0ZXMgZnVuY3Rpb24gYmVsb3cuXG4gIGlmICh2TGFiZWwubGltID4gd0xhYmVsLmxpbSkge1xuICAgIHRhaWxMYWJlbCA9IHdMYWJlbDtcbiAgICBmbGlwID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjYW5kaWRhdGVzID0gXy5maWx0ZXIoZy5lZGdlcygpLCBmdW5jdGlvbiAoZWRnZSkge1xuICAgIHJldHVybiAoXG4gICAgICBmbGlwID09PSBpc0Rlc2NlbmRhbnQodCwgdC5ub2RlKGVkZ2UudiksIHRhaWxMYWJlbCkgJiZcbiAgICAgIGZsaXAgIT09IGlzRGVzY2VuZGFudCh0LCB0Lm5vZGUoZWRnZS53KSwgdGFpbExhYmVsKVxuICAgICk7XG4gIH0pO1xuXG4gIHJldHVybiBfLm1pbkJ5KGNhbmRpZGF0ZXMsIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgcmV0dXJuIHNsYWNrKGcsIGVkZ2UpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXhjaGFuZ2VFZGdlcyh0LCBnLCBlLCBmKSB7XG4gIHZhciB2ID0gZS52O1xuICB2YXIgdyA9IGUudztcbiAgdC5yZW1vdmVFZGdlKHYsIHcpO1xuICB0LnNldEVkZ2UoZi52LCBmLncsIHt9KTtcbiAgaW5pdExvd0xpbVZhbHVlcyh0KTtcbiAgaW5pdEN1dFZhbHVlcyh0LCBnKTtcbiAgdXBkYXRlUmFua3ModCwgZyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsIGcpIHtcbiAgdmFyIHJvb3QgPSBfLmZpbmQodC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiAhZy5ub2RlKHYpLnBhcmVudDtcbiAgfSk7XG4gIHZhciB2cyA9IGFsZy5wcmVvcmRlcih0LCByb290KTtcbiAgdnMgPSB2cy5zbGljZSgxKTtcbiAgXy5mb3JFYWNoKHZzLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBwYXJlbnQgPSB0Lm5vZGUodikucGFyZW50LFxuICAgICAgZWRnZSA9IGcuZWRnZSh2LCBwYXJlbnQpLFxuICAgICAgZmxpcHBlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCFlZGdlKSB7XG4gICAgICBlZGdlID0gZy5lZGdlKHBhcmVudCwgdik7XG4gICAgICBmbGlwcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnLm5vZGUodikucmFuayA9IGcubm9kZShwYXJlbnQpLnJhbmsgKyAoZmxpcHBlZCA/IGVkZ2UubWlubGVuIDogLWVkZ2UubWlubGVuKTtcbiAgfSk7XG59XG5cbi8qXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVkZ2UgaXMgaW4gdGhlIHRyZWUuXG4gKi9cbmZ1bmN0aW9uIGlzVHJlZUVkZ2UodHJlZSwgdSwgdikge1xuICByZXR1cm4gdHJlZS5oYXNFZGdlKHUsIHYpO1xufVxuXG4vKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyBkZXNjZW5kYW50IG9mIHRoZSByb290IG5vZGUgcGVyIHRoZVxuICogYXNzaWduZWQgbG93IGFuZCBsaW0gYXR0cmlidXRlcyBpbiB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gaXNEZXNjZW5kYW50KHRyZWUsIHZMYWJlbCwgcm9vdExhYmVsKSB7XG4gIHJldHVybiByb290TGFiZWwubG93IDw9IHZMYWJlbC5saW0gJiYgdkxhYmVsLmxpbSA8PSByb290TGFiZWwubGltO1xufVxuIiwKICAgICJpbXBvcnQgeyBmZWFzaWJsZVRyZWUgfSBmcm9tICcuL2ZlYXNpYmxlLXRyZWUuanMnO1xuaW1wb3J0IHsgbmV0d29ya1NpbXBsZXggfSBmcm9tICcuL25ldHdvcmstc2ltcGxleC5qcyc7XG5pbXBvcnQgeyBsb25nZXN0UGF0aCB9IGZyb20gJy4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHJhbmsgfTtcblxuLypcbiAqIEFzc2lnbnMgYSByYW5rIHRvIGVhY2ggbm9kZSBpbiB0aGUgaW5wdXQgZ3JhcGggdGhhdCByZXNwZWN0cyB0aGUgXCJtaW5sZW5cIlxuICogY29uc3RyYWludCBzcGVjaWZpZWQgb24gZWRnZXMgYmV0d2VlbiBub2Rlcy5cbiAqXG4gKiBUaGlzIGJhc2ljIHN0cnVjdHVyZSBpcyBkZXJpdmVkIGZyb20gR2Fuc25lciwgZXQgYWwuLCBcIkEgVGVjaG5pcXVlIGZvclxuICogRHJhd2luZyBEaXJlY3RlZCBHcmFwaHMuXCJcbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBHcmFwaCBtdXN0IGJlIGEgY29ubmVjdGVkIERBR1xuICogICAgMi4gR3JhcGggbm9kZXMgbXVzdCBiZSBvYmplY3RzXG4gKiAgICAzLiBHcmFwaCBlZGdlcyBtdXN0IGhhdmUgXCJ3ZWlnaHRcIiBhbmQgXCJtaW5sZW5cIiBhdHRyaWJ1dGVzXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG5vZGVzIHdpbGwgaGF2ZSBhIFwicmFua1wiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiB0aGVcbiAqICAgICAgIGFsZ29yaXRobS4gUmFua3MgY2FuIHN0YXJ0IGF0IGFueSBpbmRleCAoaW5jbHVkaW5nIG5lZ2F0aXZlKSwgd2UnbGxcbiAqICAgICAgIGZpeCB0aGVtIHVwIGxhdGVyLlxuICovXG5mdW5jdGlvbiByYW5rKGcpIHtcbiAgc3dpdGNoIChnLmdyYXBoKCkucmFua2VyKSB7XG4gICAgY2FzZSAnbmV0d29yay1zaW1wbGV4JzpcbiAgICAgIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGlnaHQtdHJlZSc6XG4gICAgICB0aWdodFRyZWVSYW5rZXIoZyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsb25nZXN0LXBhdGgnOlxuICAgICAgbG9uZ2VzdFBhdGhSYW5rZXIoZyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbmV0d29ya1NpbXBsZXhSYW5rZXIoZyk7XG4gIH1cbn1cblxuLy8gQSBmYXN0IGFuZCBzaW1wbGUgcmFua2VyLCBidXQgcmVzdWx0cyBhcmUgZmFyIGZyb20gb3B0aW1hbC5cbnZhciBsb25nZXN0UGF0aFJhbmtlciA9IGxvbmdlc3RQYXRoO1xuXG5mdW5jdGlvbiB0aWdodFRyZWVSYW5rZXIoZykge1xuICBsb25nZXN0UGF0aChnKTtcbiAgZmVhc2libGVUcmVlKGcpO1xufVxuXG5mdW5jdGlvbiBuZXR3b3JrU2ltcGxleFJhbmtlcihnKSB7XG4gIG5ldHdvcmtTaW1wbGV4KGcpO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHJ1biwgY2xlYW51cCB9O1xuXG4vKlxuICogQSBuZXN0aW5nIGdyYXBoIGNyZWF0ZXMgZHVtbXkgbm9kZXMgZm9yIHRoZSB0b3BzIGFuZCBib3R0b21zIG9mIHN1YmdyYXBocyxcbiAqIGFkZHMgYXBwcm9wcmlhdGUgZWRnZXMgdG8gZW5zdXJlIHRoYXQgYWxsIGNsdXN0ZXIgbm9kZXMgYXJlIHBsYWNlZCBiZXR3ZWVuXG4gKiB0aGVzZSBib3VuZHJpZXMsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIGdyYXBoIGlzIGNvbm5lY3RlZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB3ZSBlbnN1cmUsIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgbWlubGVuIHByb3BlcnR5LCB0aGF0IG5vZGVzXG4gKiBhbmQgc3ViZ3JhcGggYm9yZGVyIG5vZGVzIHRvIG5vdCBlbmQgdXAgb24gdGhlIHNhbWUgcmFuay5cbiAqXG4gKiBQcmVjb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHXG4gKiAgICAyLiBOb2RlcyBpbiB0aGUgaW5wdXQgZ3JhcGggaGFzIGEgbWlubGVuIGF0dHJpYnV0ZVxuICpcbiAqIFBvc3Rjb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGNvbm5lY3RlZC5cbiAqICAgIDIuIER1bW15IG5vZGVzIGFyZSBhZGRlZCBmb3IgdGhlIHRvcHMgYW5kIGJvdHRvbXMgb2Ygc3ViZ3JhcGhzLlxuICogICAgMy4gVGhlIG1pbmxlbiBhdHRyaWJ1dGUgZm9yIG5vZGVzIGlzIGFkanVzdGVkIHRvIGVuc3VyZSBub2RlcyBkbyBub3RcbiAqICAgICAgIGdldCBwbGFjZWQgb24gdGhlIHNhbWUgcmFuayBhcyBzdWJncmFwaCBib3JkZXIgbm9kZXMuXG4gKlxuICogVGhlIG5lc3RpbmcgZ3JhcGggaWRlYSBjb21lcyBmcm9tIFNhbmRlciwgXCJMYXlvdXQgb2YgQ29tcG91bmQgRGlyZWN0ZWRcbiAqIEdyYXBocy5cIlxuICovXG5mdW5jdGlvbiBydW4oZykge1xuICB2YXIgcm9vdCA9IHV0aWwuYWRkRHVtbXlOb2RlKGcsICdyb290Jywge30sICdfcm9vdCcpO1xuICB2YXIgZGVwdGhzID0gdHJlZURlcHRocyhnKTtcbiAgdmFyIGhlaWdodCA9IF8ubWF4KF8udmFsdWVzKGRlcHRocykpIC0gMTsgLy8gTm90ZTogZGVwdGhzIGlzIGFuIE9iamVjdCBub3QgYW4gYXJyYXlcbiAgdmFyIG5vZGVTZXAgPSAyICogaGVpZ2h0ICsgMTtcblxuICBnLmdyYXBoKCkubmVzdGluZ1Jvb3QgPSByb290O1xuXG4gIC8vIE11bHRpcGx5IG1pbmxlbiBieSBub2RlU2VwIHRvIGFsaWduIG5vZGVzIG9uIG5vbi1ib3JkZXIgcmFua3MuXG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgZy5lZGdlKGUpLm1pbmxlbiAqPSBub2RlU2VwO1xuICB9KTtcblxuICAvLyBDYWxjdWxhdGUgYSB3ZWlnaHQgdGhhdCBpcyBzdWZmaWNpZW50IHRvIGtlZXAgc3ViZ3JhcGhzIHZlcnRpY2FsbHkgY29tcGFjdFxuICB2YXIgd2VpZ2h0ID0gc3VtV2VpZ2h0cyhnKSArIDE7XG5cbiAgLy8gQ3JlYXRlIGJvcmRlciBub2RlcyBhbmQgbGluayB0aGVtIHVwXG4gIF8uZm9yRWFjaChnLmNoaWxkcmVuKCksIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGRmcyhnLCByb290LCBub2RlU2VwLCB3ZWlnaHQsIGhlaWdodCwgZGVwdGhzLCBjaGlsZCk7XG4gIH0pO1xuXG4gIC8vIFNhdmUgdGhlIG11bHRpcGxpZXIgZm9yIG5vZGUgbGF5ZXJzIGZvciBsYXRlciByZW1vdmFsIG9mIGVtcHR5IGJvcmRlclxuICAvLyBsYXllcnMuXG4gIGcuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvciA9IG5vZGVTZXA7XG59XG5cbmZ1bmN0aW9uIGRmcyhnLCByb290LCBub2RlU2VwLCB3ZWlnaHQsIGhlaWdodCwgZGVwdGhzLCB2KSB7XG4gIHZhciBjaGlsZHJlbiA9IGcuY2hpbGRyZW4odik7XG4gIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgaWYgKHYgIT09IHJvb3QpIHtcbiAgICAgIGcuc2V0RWRnZShyb290LCB2LCB7IHdlaWdodDogMCwgbWlubGVuOiBub2RlU2VwIH0pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9wID0gdXRpbC5hZGRCb3JkZXJOb2RlKGcsICdfYnQnKTtcbiAgdmFyIGJvdHRvbSA9IHV0aWwuYWRkQm9yZGVyTm9kZShnLCAnX2JiJyk7XG4gIHZhciBsYWJlbCA9IGcubm9kZSh2KTtcblxuICBnLnNldFBhcmVudCh0b3AsIHYpO1xuICBsYWJlbC5ib3JkZXJUb3AgPSB0b3A7XG4gIGcuc2V0UGFyZW50KGJvdHRvbSwgdik7XG4gIGxhYmVsLmJvcmRlckJvdHRvbSA9IGJvdHRvbTtcblxuICBfLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGRmcyhnLCByb290LCBub2RlU2VwLCB3ZWlnaHQsIGhlaWdodCwgZGVwdGhzLCBjaGlsZCk7XG5cbiAgICB2YXIgY2hpbGROb2RlID0gZy5ub2RlKGNoaWxkKTtcbiAgICB2YXIgY2hpbGRUb3AgPSBjaGlsZE5vZGUuYm9yZGVyVG9wID8gY2hpbGROb2RlLmJvcmRlclRvcCA6IGNoaWxkO1xuICAgIHZhciBjaGlsZEJvdHRvbSA9IGNoaWxkTm9kZS5ib3JkZXJCb3R0b20gPyBjaGlsZE5vZGUuYm9yZGVyQm90dG9tIDogY2hpbGQ7XG4gICAgdmFyIHRoaXNXZWlnaHQgPSBjaGlsZE5vZGUuYm9yZGVyVG9wID8gd2VpZ2h0IDogMiAqIHdlaWdodDtcbiAgICB2YXIgbWlubGVuID0gY2hpbGRUb3AgIT09IGNoaWxkQm90dG9tID8gMSA6IGhlaWdodCAtIGRlcHRoc1t2XSArIDE7XG5cbiAgICBnLnNldEVkZ2UodG9wLCBjaGlsZFRvcCwge1xuICAgICAgd2VpZ2h0OiB0aGlzV2VpZ2h0LFxuICAgICAgbWlubGVuOiBtaW5sZW4sXG4gICAgICBuZXN0aW5nRWRnZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGcuc2V0RWRnZShjaGlsZEJvdHRvbSwgYm90dG9tLCB7XG4gICAgICB3ZWlnaHQ6IHRoaXNXZWlnaHQsXG4gICAgICBtaW5sZW46IG1pbmxlbixcbiAgICAgIG5lc3RpbmdFZGdlOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpZiAoIWcucGFyZW50KHYpKSB7XG4gICAgZy5zZXRFZGdlKHJvb3QsIHRvcCwgeyB3ZWlnaHQ6IDAsIG1pbmxlbjogaGVpZ2h0ICsgZGVwdGhzW3ZdIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyZWVEZXB0aHMoZykge1xuICB2YXIgZGVwdGhzID0ge307XG4gIGZ1bmN0aW9uIGRmcyh2LCBkZXB0aCkge1xuICAgIHZhciBjaGlsZHJlbiA9IGcuY2hpbGRyZW4odik7XG4gICAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgXy5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgZGZzKGNoaWxkLCBkZXB0aCArIDEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGRlcHRoc1t2XSA9IGRlcHRoO1xuICB9XG4gIF8uZm9yRWFjaChnLmNoaWxkcmVuKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgZGZzKHYsIDEpO1xuICB9KTtcbiAgcmV0dXJuIGRlcHRocztcbn1cblxuZnVuY3Rpb24gc3VtV2VpZ2h0cyhnKSB7XG4gIHJldHVybiBfLnJlZHVjZShcbiAgICBnLmVkZ2VzKCksXG4gICAgZnVuY3Rpb24gKGFjYywgZSkge1xuICAgICAgcmV0dXJuIGFjYyArIGcuZWRnZShlKS53ZWlnaHQ7XG4gICAgfSxcbiAgICAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNsZWFudXAoZykge1xuICB2YXIgZ3JhcGhMYWJlbCA9IGcuZ3JhcGgoKTtcbiAgZy5yZW1vdmVOb2RlKGdyYXBoTGFiZWwubmVzdGluZ1Jvb3QpO1xuICBkZWxldGUgZ3JhcGhMYWJlbC5uZXN0aW5nUm9vdDtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBpZiAoZWRnZS5uZXN0aW5nRWRnZSkge1xuICAgICAgZy5yZW1vdmVFZGdlKGUpO1xuICAgIH1cbiAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgYWRkU3ViZ3JhcGhDb25zdHJhaW50cyB9O1xuXG5mdW5jdGlvbiBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGcsIGNnLCB2cykge1xuICB2YXIgcHJldiA9IHt9LFxuICAgIHJvb3RQcmV2O1xuXG4gIF8uZm9yRWFjaCh2cywgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgY2hpbGQgPSBnLnBhcmVudCh2KSxcbiAgICAgIHBhcmVudCxcbiAgICAgIHByZXZDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIHBhcmVudCA9IGcucGFyZW50KGNoaWxkKTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcHJldkNoaWxkID0gcHJldltwYXJlbnRdO1xuICAgICAgICBwcmV2W3BhcmVudF0gPSBjaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZDaGlsZCA9IHJvb3RQcmV2O1xuICAgICAgICByb290UHJldiA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZDaGlsZCAmJiBwcmV2Q2hpbGQgIT09IGNoaWxkKSB7XG4gICAgICAgIGNnLnNldEVkZ2UocHJldkNoaWxkLCBjaGlsZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNoaWxkID0gcGFyZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgLypcbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2ID8gZy5jaGlsZHJlbih2KSA6IGcuY2hpbGRyZW4oKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgIHN1YmdyYXBocyA9IFtdO1xuICAgICAgXy5lYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICB2YXIgY2hpbGRNaW4gPSBkZnMoY2hpbGQpO1xuICAgICAgICBpZiAoZy5jaGlsZHJlbihjaGlsZCkubGVuZ3RoKSB7XG4gICAgICAgICAgc3ViZ3JhcGhzLnB1c2goeyB2OiBjaGlsZCwgb3JkZXI6IGNoaWxkTWluIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgY2hpbGRNaW4pO1xuICAgICAgfSk7XG4gICAgICBfLnJlZHVjZShfLnNvcnRCeShzdWJncmFwaHMsIFwib3JkZXJcIiksIGZ1bmN0aW9uKHByZXYsIGN1cnIpIHtcbiAgICAgICAgY2cuc2V0RWRnZShwcmV2LnYsIGN1cnIudik7XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gZy5ub2RlKHYpLm9yZGVyO1xuICB9XG4gIGRmcyh1bmRlZmluZWQpO1xuICAqL1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcblxuZXhwb3J0IHsgYnVpbGRMYXllckdyYXBoIH07XG5cbi8qXG4gKiBDb25zdHJ1Y3RzIGEgZ3JhcGggdGhhdCBjYW4gYmUgdXNlZCB0byBzb3J0IGEgbGF5ZXIgb2Ygbm9kZXMuIFRoZSBncmFwaCB3aWxsXG4gKiBjb250YWluIGFsbCBiYXNlIGFuZCBzdWJncmFwaCBub2RlcyBmcm9tIHRoZSByZXF1ZXN0IGxheWVyIGluIHRoZWlyIG9yaWdpbmFsXG4gKiBoaWVyYXJjaHkgYW5kIGFueSBlZGdlcyB0aGF0IGFyZSBpbmNpZGVudCBvbiB0aGVzZSBub2RlcyBhbmQgYXJlIG9mIHRoZSB0eXBlXG4gKiByZXF1ZXN0ZWQgYnkgdGhlIFwicmVsYXRpb25zaGlwXCIgcGFyYW1ldGVyLlxuICpcbiAqIE5vZGVzIGZyb20gdGhlIHJlcXVlc3RlZCByYW5rIHRoYXQgZG8gbm90IGhhdmUgcGFyZW50cyBhcmUgYXNzaWduZWQgYSByb290XG4gKiBub2RlIGluIHRoZSBvdXRwdXQgZ3JhcGgsIHdoaWNoIGlzIHNldCBpbiB0aGUgcm9vdCBncmFwaCBhdHRyaWJ1dGUuIFRoaXNcbiAqIG1ha2VzIGl0IGVhc3kgdG8gd2FsayB0aGUgaGllcmFyY2h5IG9mIG1vdmFibGUgbm9kZXMgZHVyaW5nIG9yZGVyaW5nLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIElucHV0IGdyYXBoIGlzIGEgREFHXG4gKiAgICAyLiBCYXNlIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXZlIGEgcmFuayBhdHRyaWJ1dGVcbiAqICAgIDMuIFN1YmdyYXBoIG5vZGVzIGluIHRoZSBpbnB1dCBncmFwaCBoYXMgbWluUmFuayBhbmQgbWF4UmFuayBhdHRyaWJ1dGVzXG4gKiAgICA0LiBFZGdlcyBoYXZlIGFuIGFzc2lnbmVkIHdlaWdodFxuICpcbiAqIFBvc3QtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBPdXRwdXQgZ3JhcGggaGFzIGFsbCBub2RlcyBpbiB0aGUgbW92YWJsZSByYW5rIHdpdGggcHJlc2VydmVkXG4gKiAgICAgICBoaWVyYXJjaHkuXG4gKiAgICAyLiBSb290IG5vZGVzIGluIHRoZSBtb3ZhYmxlIGxheWVyIGFyZSBtYWRlIGNoaWxkcmVuIG9mIHRoZSBub2RlXG4gKiAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJvb3QgYXR0cmlidXRlIG9mIHRoZSBncmFwaC5cbiAqICAgIDMuIE5vbi1tb3ZhYmxlIG5vZGVzIGluY2lkZW50IG9uIG1vdmFibGUgbm9kZXMsIHNlbGVjdGVkIGJ5IHRoZVxuICogICAgICAgcmVsYXRpb25zaGlwIHBhcmFtZXRlciwgYXJlIGluY2x1ZGVkIGluIHRoZSBncmFwaCAod2l0aG91dCBoaWVyYXJjaHkpLlxuICogICAgNC4gRWRnZXMgaW5jaWRlbnQgb24gbW92YWJsZSBub2Rlcywgc2VsZWN0ZWQgYnkgdGhlIHJlbGF0aW9uc2hpcFxuICogICAgICAgcGFyYW1ldGVyLCBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dCBncmFwaC5cbiAqICAgIDUuIFRoZSB3ZWlnaHRzIGZvciBjb3BpZWQgZWRnZXMgYXJlIGFnZ3JlZ2F0ZWQgYXMgbmVlZCwgc2luY2UgdGhlIG91dHB1dFxuICogICAgICAgZ3JhcGggaXMgbm90IGEgbXVsdGktZ3JhcGguXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaChnLCByYW5rLCByZWxhdGlvbnNoaXApIHtcbiAgdmFyIHJvb3QgPSBjcmVhdGVSb290Tm9kZShnKSxcbiAgICByZXN1bHQgPSBuZXcgR3JhcGgoeyBjb21wb3VuZDogdHJ1ZSB9KVxuICAgICAgLnNldEdyYXBoKHsgcm9vdDogcm9vdCB9KVxuICAgICAgLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGcubm9kZSh2KTtcbiAgICAgIH0pO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodiksXG4gICAgICBwYXJlbnQgPSBnLnBhcmVudCh2KTtcblxuICAgIGlmIChub2RlLnJhbmsgPT09IHJhbmsgfHwgKG5vZGUubWluUmFuayA8PSByYW5rICYmIHJhbmsgPD0gbm9kZS5tYXhSYW5rKSkge1xuICAgICAgcmVzdWx0LnNldE5vZGUodik7XG4gICAgICByZXN1bHQuc2V0UGFyZW50KHYsIHBhcmVudCB8fCByb290KTtcblxuICAgICAgLy8gVGhpcyBhc3N1bWVzIHdlIGhhdmUgb25seSBzaG9ydCBlZGdlcyFcbiAgICAgIF8uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciB1ID0gZS52ID09PSB2ID8gZS53IDogZS52LFxuICAgICAgICAgIGVkZ2UgPSByZXN1bHQuZWRnZSh1LCB2KSxcbiAgICAgICAgICB3ZWlnaHQgPSAhXy5pc1VuZGVmaW5lZChlZGdlKSA/IGVkZ2Uud2VpZ2h0IDogMDtcbiAgICAgICAgcmVzdWx0LnNldEVkZ2UodSwgdiwgeyB3ZWlnaHQ6IGcuZWRnZShlKS53ZWlnaHQgKyB3ZWlnaHQgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF8uaGFzKG5vZGUsICdtaW5SYW5rJykpIHtcbiAgICAgICAgcmVzdWx0LnNldE5vZGUodiwge1xuICAgICAgICAgIGJvcmRlckxlZnQ6IG5vZGUuYm9yZGVyTGVmdFtyYW5rXSxcbiAgICAgICAgICBib3JkZXJSaWdodDogbm9kZS5ib3JkZXJSaWdodFtyYW5rXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSb290Tm9kZShnKSB7XG4gIHZhciB2O1xuICB3aGlsZSAoZy5oYXNOb2RlKCh2ID0gXy51bmlxdWVJZCgnX3Jvb3QnKSkpKTtcbiAgcmV0dXJuIHY7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgY3Jvc3NDb3VudCB9O1xuXG4vKlxuICogQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgbGF5ZXJpbmcgKGFuIGFycmF5IG9mIGxheWVycywgZWFjaCB3aXRoIGFuIGFycmF5IG9mXG4gKiBvcmRlcmVyZCBub2RlcykgYW5kIGEgZ3JhcGggYW5kIHJldHVybnMgYSB3ZWlnaHRlZCBjcm9zc2luZyBjb3VudC5cbiAqXG4gKiBQcmUtY29uZGl0aW9uczpcbiAqXG4gKiAgICAxLiBJbnB1dCBncmFwaCBtdXN0IGJlIHNpbXBsZSAobm90IGEgbXVsdGlncmFwaCksIGRpcmVjdGVkLCBhbmQgaW5jbHVkZVxuICogICAgICAgb25seSBzaW1wbGUgZWRnZXMuXG4gKiAgICAyLiBFZGdlcyBpbiB0aGUgaW5wdXQgZ3JhcGggbXVzdCBoYXZlIGFzc2lnbmVkIHdlaWdodHMuXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIFRoZSBncmFwaCBhbmQgbGF5ZXJpbmcgbWF0cml4IGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqXG4gKiBUaGlzIGFsZ29yaXRobSBpcyBkZXJpdmVkIGZyb20gQmFydGgsIGV0IGFsLiwgXCJCaWxheWVyIENyb3NzIENvdW50aW5nLlwiXG4gKi9cbmZ1bmN0aW9uIGNyb3NzQ291bnQoZywgbGF5ZXJpbmcpIHtcbiAgdmFyIGNjID0gMDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsYXllcmluZy5sZW5ndGg7ICsraSkge1xuICAgIGNjICs9IHR3b0xheWVyQ3Jvc3NDb3VudChnLCBsYXllcmluZ1tpIC0gMV0sIGxheWVyaW5nW2ldKTtcbiAgfVxuICByZXR1cm4gY2M7XG59XG5cbmZ1bmN0aW9uIHR3b0xheWVyQ3Jvc3NDb3VudChnLCBub3J0aExheWVyLCBzb3V0aExheWVyKSB7XG4gIC8vIFNvcnQgYWxsIG9mIHRoZSBlZGdlcyBiZXR3ZWVuIHRoZSBub3J0aCBhbmQgc291dGggbGF5ZXJzIGJ5IHRoZWlyIHBvc2l0aW9uXG4gIC8vIGluIHRoZSBub3J0aCBsYXllciBhbmQgdGhlbiB0aGUgc291dGguIE1hcCB0aGVzZSBlZGdlcyB0byB0aGUgcG9zaXRpb24gb2ZcbiAgLy8gdGhlaXIgaGVhZCBpbiB0aGUgc291dGggbGF5ZXIuXG4gIHZhciBzb3V0aFBvcyA9IF8uemlwT2JqZWN0KFxuICAgIHNvdXRoTGF5ZXIsXG4gICAgXy5tYXAoc291dGhMYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH0pXG4gICk7XG4gIHZhciBzb3V0aEVudHJpZXMgPSBfLmZsYXR0ZW4oXG4gICAgXy5tYXAobm9ydGhMYXllciwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBfLnNvcnRCeShcbiAgICAgICAgXy5tYXAoZy5vdXRFZGdlcyh2KSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXR1cm4geyBwb3M6IHNvdXRoUG9zW2Uud10sIHdlaWdodDogZy5lZGdlKGUpLndlaWdodCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgJ3BvcydcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICAvLyBCdWlsZCB0aGUgYWNjdW11bGF0b3IgdHJlZVxuICB2YXIgZmlyc3RJbmRleCA9IDE7XG4gIHdoaWxlIChmaXJzdEluZGV4IDwgc291dGhMYXllci5sZW5ndGgpIGZpcnN0SW5kZXggPDw9IDE7XG4gIHZhciB0cmVlU2l6ZSA9IDIgKiBmaXJzdEluZGV4IC0gMTtcbiAgZmlyc3RJbmRleCAtPSAxO1xuICB2YXIgdHJlZSA9IF8ubWFwKG5ldyBBcnJheSh0cmVlU2l6ZSksIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSB3ZWlnaHRlZCBjcm9zc2luZ3NcbiAgdmFyIGNjID0gMDtcbiAgXy5mb3JFYWNoKFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBzb3V0aEVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgIHZhciBpbmRleCA9IGVudHJ5LnBvcyArIGZpcnN0SW5kZXg7XG4gICAgICB0cmVlW2luZGV4XSArPSBlbnRyeS53ZWlnaHQ7XG4gICAgICB2YXIgd2VpZ2h0U3VtID0gMDtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHdoaWxlIChpbmRleCA+IDApIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoaW5kZXggJSAyKSB7XG4gICAgICAgICAgd2VpZ2h0U3VtICs9IHRyZWVbaW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIGluZGV4ID0gKGluZGV4IC0gMSkgPj4gMTtcbiAgICAgICAgdHJlZVtpbmRleF0gKz0gZW50cnkud2VpZ2h0O1xuICAgICAgfVxuICAgICAgY2MgKz0gZW50cnkud2VpZ2h0ICogd2VpZ2h0U3VtO1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGNjO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB7IGluaXRPcmRlciB9O1xuXG4vKlxuICogQXNzaWducyBhbiBpbml0aWFsIG9yZGVyIHZhbHVlIGZvciBlYWNoIG5vZGUgYnkgcGVyZm9ybWluZyBhIERGUyBzZWFyY2hcbiAqIHN0YXJ0aW5nIGZyb20gbm9kZXMgaW4gdGhlIGZpcnN0IHJhbmsuIE5vZGVzIGFyZSBhc3NpZ25lZCBhbiBvcmRlciBpbiB0aGVpclxuICogcmFuayBhcyB0aGV5IGFyZSBmaXJzdCB2aXNpdGVkLlxuICpcbiAqIFRoaXMgYXBwcm9hY2ggY29tZXMgZnJvbSBHYW5zbmVyLCBldCBhbC4sIFwiQSBUZWNobmlxdWUgZm9yIERyYXdpbmcgRGlyZWN0ZWRcbiAqIEdyYXBocy5cIlxuICpcbiAqIFJldHVybnMgYSBsYXllcmluZyBtYXRyaXggd2l0aCBhbiBhcnJheSBwZXIgbGF5ZXIgYW5kIGVhY2ggbGF5ZXIgc29ydGVkIGJ5XG4gKiB0aGUgb3JkZXIgb2YgaXRzIG5vZGVzLlxuICovXG5mdW5jdGlvbiBpbml0T3JkZXIoZykge1xuICB2YXIgdmlzaXRlZCA9IHt9O1xuICB2YXIgc2ltcGxlTm9kZXMgPSBfLmZpbHRlcihnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuICFnLmNoaWxkcmVuKHYpLmxlbmd0aDtcbiAgfSk7XG4gIHZhciBtYXhSYW5rID0gXy5tYXgoXG4gICAgXy5tYXAoc2ltcGxlTm9kZXMsIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gZy5ub2RlKHYpLnJhbms7XG4gICAgfSlcbiAgKTtcbiAgdmFyIGxheWVycyA9IF8ubWFwKF8ucmFuZ2UobWF4UmFuayArIDEpLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBmdW5jdGlvbiBkZnModikge1xuICAgIGlmIChfLmhhcyh2aXNpdGVkLCB2KSkgcmV0dXJuO1xuICAgIHZpc2l0ZWRbdl0gPSB0cnVlO1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGxheWVyc1tub2RlLnJhbmtdLnB1c2godik7XG4gICAgXy5mb3JFYWNoKGcuc3VjY2Vzc29ycyh2KSwgZGZzKTtcbiAgfVxuXG4gIHZhciBvcmRlcmVkVnMgPSBfLnNvcnRCeShzaW1wbGVOb2RlcywgZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gZy5ub2RlKHYpLnJhbms7XG4gIH0pO1xuICBfLmZvckVhY2gob3JkZXJlZFZzLCBkZnMpO1xuXG4gIHJldHVybiBsYXllcnM7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgYmFyeWNlbnRlciB9O1xuXG5mdW5jdGlvbiBiYXJ5Y2VudGVyKGcsIG1vdmFibGUpIHtcbiAgcmV0dXJuIF8ubWFwKG1vdmFibGUsIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGluViA9IGcuaW5FZGdlcyh2KTtcbiAgICBpZiAoIWluVi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IHY6IHYgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IF8ucmVkdWNlKFxuICAgICAgICBpblYsXG4gICAgICAgIGZ1bmN0aW9uIChhY2MsIGUpIHtcbiAgICAgICAgICB2YXIgZWRnZSA9IGcuZWRnZShlKSxcbiAgICAgICAgICAgIG5vZGVVID0gZy5ub2RlKGUudik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1bTogYWNjLnN1bSArIGVkZ2Uud2VpZ2h0ICogbm9kZVUub3JkZXIsXG4gICAgICAgICAgICB3ZWlnaHQ6IGFjYy53ZWlnaHQgKyBlZGdlLndlaWdodCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7IHN1bTogMCwgd2VpZ2h0OiAwIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHY6IHYsXG4gICAgICAgIGJhcnljZW50ZXI6IHJlc3VsdC5zdW0gLyByZXN1bHQud2VpZ2h0LFxuICAgICAgICB3ZWlnaHQ6IHJlc3VsdC53ZWlnaHQsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgcmVzb2x2ZUNvbmZsaWN0cyB9O1xuXG4vKlxuICogR2l2ZW4gYSBsaXN0IG9mIGVudHJpZXMgb2YgdGhlIGZvcm0ge3YsIGJhcnljZW50ZXIsIHdlaWdodH0gYW5kIGFcbiAqIGNvbnN0cmFpbnQgZ3JhcGggdGhpcyBmdW5jdGlvbiB3aWxsIHJlc29sdmUgYW55IGNvbmZsaWN0cyBiZXR3ZWVuIHRoZVxuICogY29uc3RyYWludCBncmFwaCBhbmQgdGhlIGJhcnljZW50ZXJzIGZvciB0aGUgZW50cmllcy4gSWYgdGhlIGJhcnljZW50ZXJzIGZvclxuICogYW4gZW50cnkgd291bGQgdmlvbGF0ZSBhIGNvbnN0cmFpbnQgaW4gdGhlIGNvbnN0cmFpbnQgZ3JhcGggdGhlbiB3ZSBjb2FsZXNjZVxuICogdGhlIG5vZGVzIGluIHRoZSBjb25mbGljdCBpbnRvIGEgbmV3IG5vZGUgdGhhdCByZXNwZWN0cyB0aGUgY29udHJhaW50IGFuZFxuICogYWdncmVnYXRlcyBiYXJ5Y2VudGVyIGFuZCB3ZWlnaHQgaW5mb3JtYXRpb24uXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gaW4gRm9yc3RlciwgXCJBIEZhc3QgYW5kXG4gKiBTaW1wbGUgSHVlcmlzdGljIGZvciBDb25zdHJhaW5lZCBUd28tTGV2ZWwgQ3Jvc3NpbmcgUmVkdWN0aW9uLFwiIHRob3VnaHQgaXRcbiAqIGRpZmZlcnMgaW4gc29tZSBzcGVjaWZpYyBkZXRhaWxzLlxuICpcbiAqIFByZS1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEVhY2ggZW50cnkgaGFzIHRoZSBmb3JtIHt2LCBiYXJ5Y2VudGVyLCB3ZWlnaHR9LCBvciBpZiB0aGUgbm9kZSBoYXNcbiAqICAgICAgIG5vIGJhcnljZW50ZXIsIHRoZW4ge3Z9LlxuICpcbiAqIFJldHVybnM6XG4gKlxuICogICAgQSBuZXcgbGlzdCBvZiBlbnRyaWVzIG9mIHRoZSBmb3JtIHt2cywgaSwgYmFyeWNlbnRlciwgd2VpZ2h0fS4gVGhlIGxpc3RcbiAqICAgIGB2c2AgbWF5IGVpdGhlciBiZSBhIHNpbmdsZXRvbiBvciBpdCBtYXkgYmUgYW4gYWdncmVnYXRpb24gb2Ygbm9kZXNcbiAqICAgIG9yZGVyZWQgc3VjaCB0aGF0IHRoZXkgZG8gbm90IHZpb2xhdGUgY29uc3RyYWludHMgZnJvbSB0aGUgY29uc3RyYWludFxuICogICAgZ3JhcGguIFRoZSBwcm9wZXJ0eSBgaWAgaXMgdGhlIGxvd2VzdCBvcmlnaW5hbCBpbmRleCBvZiBhbnkgb2YgdGhlXG4gKiAgICBlbGVtZW50cyBpbiBgdnNgLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGVudHJpZXMsIGNnKSB7XG4gIHZhciBtYXBwZWRFbnRyaWVzID0ge307XG4gIF8uZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnksIGkpIHtcbiAgICB2YXIgdG1wID0gKG1hcHBlZEVudHJpZXNbZW50cnkudl0gPSB7XG4gICAgICBpbmRlZ3JlZTogMCxcbiAgICAgIGluOiBbXSxcbiAgICAgIG91dDogW10sXG4gICAgICB2czogW2VudHJ5LnZdLFxuICAgICAgaTogaSxcbiAgICB9KTtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoZW50cnkuYmFyeWNlbnRlcikpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHRtcC5iYXJ5Y2VudGVyID0gZW50cnkuYmFyeWNlbnRlcjtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHRtcC53ZWlnaHQgPSBlbnRyeS53ZWlnaHQ7XG4gICAgfVxuICB9KTtcblxuICBfLmZvckVhY2goY2cuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZW50cnlWID0gbWFwcGVkRW50cmllc1tlLnZdO1xuICAgIHZhciBlbnRyeVcgPSBtYXBwZWRFbnRyaWVzW2Uud107XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGVudHJ5VikgJiYgIV8uaXNVbmRlZmluZWQoZW50cnlXKSkge1xuICAgICAgZW50cnlXLmluZGVncmVlKys7XG4gICAgICBlbnRyeVYub3V0LnB1c2gobWFwcGVkRW50cmllc1tlLnddKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBzb3VyY2VTZXQgPSBfLmZpbHRlcihtYXBwZWRFbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuICFlbnRyeS5pbmRlZ3JlZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRvUmVzb2x2ZUNvbmZsaWN0cyhzb3VyY2VTZXQpO1xufVxuXG5mdW5jdGlvbiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KSB7XG4gIHZhciBlbnRyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW4odkVudHJ5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh1RW50cnkpIHtcbiAgICAgIGlmICh1RW50cnkubWVyZ2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgXy5pc1VuZGVmaW5lZCh1RW50cnkuYmFyeWNlbnRlcikgfHxcbiAgICAgICAgXy5pc1VuZGVmaW5lZCh2RW50cnkuYmFyeWNlbnRlcikgfHxcbiAgICAgICAgdUVudHJ5LmJhcnljZW50ZXIgPj0gdkVudHJ5LmJhcnljZW50ZXJcbiAgICAgICkge1xuICAgICAgICBtZXJnZUVudHJpZXModkVudHJ5LCB1RW50cnkpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVPdXQodkVudHJ5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh3RW50cnkpIHtcbiAgICAgIHdFbnRyeVsnaW4nXS5wdXNoKHZFbnRyeSk7XG4gICAgICBpZiAoLS13RW50cnkuaW5kZWdyZWUgPT09IDApIHtcbiAgICAgICAgc291cmNlU2V0LnB1c2god0VudHJ5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgd2hpbGUgKHNvdXJjZVNldC5sZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBzb3VyY2VTZXQucG9wKCk7XG4gICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBfLmZvckVhY2goZW50cnlbJ2luJ10ucmV2ZXJzZSgpLCBoYW5kbGVJbihlbnRyeSkpO1xuICAgIF8uZm9yRWFjaChlbnRyeS5vdXQsIGhhbmRsZU91dChlbnRyeSkpO1xuICB9XG5cbiAgcmV0dXJuIF8ubWFwKFxuICAgIF8uZmlsdGVyKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuICFlbnRyeS5tZXJnZWQ7XG4gICAgfSksXG4gICAgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICByZXR1cm4gXy5waWNrKGVudHJ5LCBbJ3ZzJywgJ2knLCAnYmFyeWNlbnRlcicsICd3ZWlnaHQnXSk7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBtZXJnZUVudHJpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciB3ZWlnaHQgPSAwO1xuXG4gIGlmICh0YXJnZXQud2VpZ2h0KSB7XG4gICAgc3VtICs9IHRhcmdldC5iYXJ5Y2VudGVyICogdGFyZ2V0LndlaWdodDtcbiAgICB3ZWlnaHQgKz0gdGFyZ2V0LndlaWdodDtcbiAgfVxuXG4gIGlmIChzb3VyY2Uud2VpZ2h0KSB7XG4gICAgc3VtICs9IHNvdXJjZS5iYXJ5Y2VudGVyICogc291cmNlLndlaWdodDtcbiAgICB3ZWlnaHQgKz0gc291cmNlLndlaWdodDtcbiAgfVxuXG4gIHRhcmdldC52cyA9IHNvdXJjZS52cy5jb25jYXQodGFyZ2V0LnZzKTtcbiAgdGFyZ2V0LmJhcnljZW50ZXIgPSBzdW0gLyB3ZWlnaHQ7XG4gIHRhcmdldC53ZWlnaHQgPSB3ZWlnaHQ7XG4gIHRhcmdldC5pID0gTWF0aC5taW4oc291cmNlLmksIHRhcmdldC5pKTtcbiAgc291cmNlLm1lcmdlZCA9IHRydWU7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5cbmV4cG9ydCB7IHNvcnQgfTtcblxuZnVuY3Rpb24gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpIHtcbiAgdmFyIHBhcnRzID0gdXRpbC5wYXJ0aXRpb24oZW50cmllcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuIF8uaGFzKGVudHJ5LCAnYmFyeWNlbnRlcicpO1xuICB9KTtcbiAgdmFyIHNvcnRhYmxlID0gcGFydHMubGhzLFxuICAgIHVuc29ydGFibGUgPSBfLnNvcnRCeShwYXJ0cy5yaHMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuIC1lbnRyeS5pO1xuICAgIH0pLFxuICAgIHZzID0gW10sXG4gICAgc3VtID0gMCxcbiAgICB3ZWlnaHQgPSAwLFxuICAgIHZzSW5kZXggPSAwO1xuXG4gIHNvcnRhYmxlLnNvcnQoY29tcGFyZVdpdGhCaWFzKCEhYmlhc1JpZ2h0KSk7XG5cbiAgdnNJbmRleCA9IGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCB2c0luZGV4KTtcblxuICBfLmZvckVhY2goc29ydGFibGUsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIHZzSW5kZXggKz0gZW50cnkudnMubGVuZ3RoO1xuICAgIHZzLnB1c2goZW50cnkudnMpO1xuICAgIHN1bSArPSBlbnRyeS5iYXJ5Y2VudGVyICogZW50cnkud2VpZ2h0O1xuICAgIHdlaWdodCArPSBlbnRyeS53ZWlnaHQ7XG4gICAgdnNJbmRleCA9IGNvbnN1bWVVbnNvcnRhYmxlKHZzLCB1bnNvcnRhYmxlLCB2c0luZGV4KTtcbiAgfSk7XG5cbiAgdmFyIHJlc3VsdCA9IHsgdnM6IF8uZmxhdHRlbih2cykgfTtcbiAgaWYgKHdlaWdodCkge1xuICAgIHJlc3VsdC5iYXJ5Y2VudGVyID0gc3VtIC8gd2VpZ2h0O1xuICAgIHJlc3VsdC53ZWlnaHQgPSB3ZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY29uc3VtZVVuc29ydGFibGUodnMsIHVuc29ydGFibGUsIGluZGV4KSB7XG4gIHZhciBsYXN0O1xuICB3aGlsZSAodW5zb3J0YWJsZS5sZW5ndGggJiYgKGxhc3QgPSBfLmxhc3QodW5zb3J0YWJsZSkpLmkgPD0gaW5kZXgpIHtcbiAgICB1bnNvcnRhYmxlLnBvcCgpO1xuICAgIHZzLnB1c2gobGFzdC52cyk7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVXaXRoQmlhcyhiaWFzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZW50cnlWLCBlbnRyeVcpIHtcbiAgICBpZiAoZW50cnlWLmJhcnljZW50ZXIgPCBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoZW50cnlWLmJhcnljZW50ZXIgPiBlbnRyeVcuYmFyeWNlbnRlcikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuICFiaWFzID8gZW50cnlWLmkgLSBlbnRyeVcuaSA6IGVudHJ5Vy5pIC0gZW50cnlWLmk7XG4gIH07XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGJhcnljZW50ZXIgfSBmcm9tICcuL2JhcnljZW50ZXIuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbmZsaWN0cyB9IGZyb20gJy4vcmVzb2x2ZS1jb25mbGljdHMuanMnO1xuaW1wb3J0IHsgc29ydCB9IGZyb20gJy4vc29ydC5qcyc7XG5cbmV4cG9ydCB7IHNvcnRTdWJncmFwaCB9O1xuXG5mdW5jdGlvbiBzb3J0U3ViZ3JhcGgoZywgdiwgY2csIGJpYXNSaWdodCkge1xuICB2YXIgbW92YWJsZSA9IGcuY2hpbGRyZW4odik7XG4gIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICB2YXIgYmwgPSBub2RlID8gbm9kZS5ib3JkZXJMZWZ0IDogdW5kZWZpbmVkO1xuICB2YXIgYnIgPSBub2RlID8gbm9kZS5ib3JkZXJSaWdodCA6IHVuZGVmaW5lZDtcbiAgdmFyIHN1YmdyYXBocyA9IHt9O1xuXG4gIGlmIChibCkge1xuICAgIG1vdmFibGUgPSBfLmZpbHRlcihtb3ZhYmxlLCBmdW5jdGlvbiAodykge1xuICAgICAgcmV0dXJuIHcgIT09IGJsICYmIHcgIT09IGJyO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGJhcnljZW50ZXJzID0gYmFyeWNlbnRlcihnLCBtb3ZhYmxlKTtcbiAgXy5mb3JFYWNoKGJhcnljZW50ZXJzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBpZiAoZy5jaGlsZHJlbihlbnRyeS52KS5sZW5ndGgpIHtcbiAgICAgIHZhciBzdWJncmFwaFJlc3VsdCA9IHNvcnRTdWJncmFwaChnLCBlbnRyeS52LCBjZywgYmlhc1JpZ2h0KTtcbiAgICAgIHN1YmdyYXBoc1tlbnRyeS52XSA9IHN1YmdyYXBoUmVzdWx0O1xuICAgICAgaWYgKF8uaGFzKHN1YmdyYXBoUmVzdWx0LCAnYmFyeWNlbnRlcicpKSB7XG4gICAgICAgIG1lcmdlQmFyeWNlbnRlcnMoZW50cnksIHN1YmdyYXBoUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciBlbnRyaWVzID0gcmVzb2x2ZUNvbmZsaWN0cyhiYXJ5Y2VudGVycywgY2cpO1xuICBleHBhbmRTdWJncmFwaHMoZW50cmllcywgc3ViZ3JhcGhzKTtcblxuICB2YXIgcmVzdWx0ID0gc29ydChlbnRyaWVzLCBiaWFzUmlnaHQpO1xuXG4gIGlmIChibCkge1xuICAgIHJlc3VsdC52cyA9IF8uZmxhdHRlbihbYmwsIHJlc3VsdC52cywgYnJdKTtcbiAgICBpZiAoZy5wcmVkZWNlc3NvcnMoYmwpLmxlbmd0aCkge1xuICAgICAgdmFyIGJsUHJlZCA9IGcubm9kZShnLnByZWRlY2Vzc29ycyhibClbMF0pLFxuICAgICAgICBiclByZWQgPSBnLm5vZGUoZy5wcmVkZWNlc3NvcnMoYnIpWzBdKTtcbiAgICAgIGlmICghXy5oYXMocmVzdWx0LCAnYmFyeWNlbnRlcicpKSB7XG4gICAgICAgIHJlc3VsdC5iYXJ5Y2VudGVyID0gMDtcbiAgICAgICAgcmVzdWx0LndlaWdodCA9IDA7XG4gICAgICB9XG4gICAgICByZXN1bHQuYmFyeWNlbnRlciA9XG4gICAgICAgIChyZXN1bHQuYmFyeWNlbnRlciAqIHJlc3VsdC53ZWlnaHQgKyBibFByZWQub3JkZXIgKyBiclByZWQub3JkZXIpIC8gKHJlc3VsdC53ZWlnaHQgKyAyKTtcbiAgICAgIHJlc3VsdC53ZWlnaHQgKz0gMjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHBhbmRTdWJncmFwaHMoZW50cmllcywgc3ViZ3JhcGhzKSB7XG4gIF8uZm9yRWFjaChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBlbnRyeS52cyA9IF8uZmxhdHRlbihcbiAgICAgIGVudHJ5LnZzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoc3ViZ3JhcGhzW3ZdKSB7XG4gICAgICAgICAgcmV0dXJuIHN1YmdyYXBoc1t2XS52cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQmFyeWNlbnRlcnModGFyZ2V0LCBvdGhlcikge1xuICBpZiAoIV8uaXNVbmRlZmluZWQodGFyZ2V0LmJhcnljZW50ZXIpKSB7XG4gICAgdGFyZ2V0LmJhcnljZW50ZXIgPVxuICAgICAgKHRhcmdldC5iYXJ5Y2VudGVyICogdGFyZ2V0LndlaWdodCArIG90aGVyLmJhcnljZW50ZXIgKiBvdGhlci53ZWlnaHQpIC9cbiAgICAgICh0YXJnZXQud2VpZ2h0ICsgb3RoZXIud2VpZ2h0KTtcbiAgICB0YXJnZXQud2VpZ2h0ICs9IG90aGVyLndlaWdodDtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuYmFyeWNlbnRlciA9IG90aGVyLmJhcnljZW50ZXI7XG4gICAgdGFyZ2V0LndlaWdodCA9IG90aGVyLndlaWdodDtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gJy4uLy4uL2dyYXBobGliL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBhZGRTdWJncmFwaENvbnN0cmFpbnRzIH0gZnJvbSAnLi9hZGQtc3ViZ3JhcGgtY29uc3RyYWludHMuanMnO1xuaW1wb3J0IHsgYnVpbGRMYXllckdyYXBoIH0gZnJvbSAnLi9idWlsZC1sYXllci1ncmFwaC5qcyc7XG5pbXBvcnQgeyBjcm9zc0NvdW50IH0gZnJvbSAnLi9jcm9zcy1jb3VudC5qcyc7XG5pbXBvcnQgeyBpbml0T3JkZXIgfSBmcm9tICcuL2luaXQtb3JkZXIuanMnO1xuaW1wb3J0IHsgc29ydFN1YmdyYXBoIH0gZnJvbSAnLi9zb3J0LXN1YmdyYXBoLmpzJztcblxuZXhwb3J0IHsgb3JkZXIgfTtcblxuLypcbiAqIEFwcGxpZXMgaGV1cmlzdGljcyB0byBtaW5pbWl6ZSBlZGdlIGNyb3NzaW5ncyBpbiB0aGUgZ3JhcGggYW5kIHNldHMgdGhlIGJlc3RcbiAqIG9yZGVyIHNvbHV0aW9uIGFzIGFuIG9yZGVyIGF0dHJpYnV0ZSBvbiBlYWNoIG5vZGUuXG4gKlxuICogUHJlLWNvbmRpdGlvbnM6XG4gKlxuICogICAgMS4gR3JhcGggbXVzdCBiZSBEQUdcbiAqICAgIDIuIEdyYXBoIG5vZGVzIG11c3QgYmUgb2JqZWN0cyB3aXRoIGEgXCJyYW5rXCIgYXR0cmlidXRlXG4gKiAgICAzLiBHcmFwaCBlZGdlcyBtdXN0IGhhdmUgdGhlIFwid2VpZ2h0XCIgYXR0cmlidXRlXG4gKlxuICogUG9zdC1jb25kaXRpb25zOlxuICpcbiAqICAgIDEuIEdyYXBoIG5vZGVzIHdpbGwgaGF2ZSBhbiBcIm9yZGVyXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIHRoZVxuICogICAgICAgYWxnb3JpdGhtLlxuICovXG5mdW5jdGlvbiBvcmRlcihnKSB7XG4gIHZhciBtYXhSYW5rID0gdXRpbC5tYXhSYW5rKGcpLFxuICAgIGRvd25MYXllckdyYXBocyA9IGJ1aWxkTGF5ZXJHcmFwaHMoZywgXy5yYW5nZSgxLCBtYXhSYW5rICsgMSksICdpbkVkZ2VzJyksXG4gICAgdXBMYXllckdyYXBocyA9IGJ1aWxkTGF5ZXJHcmFwaHMoZywgXy5yYW5nZShtYXhSYW5rIC0gMSwgLTEsIC0xKSwgJ291dEVkZ2VzJyk7XG5cbiAgdmFyIGxheWVyaW5nID0gaW5pdE9yZGVyKGcpO1xuICBhc3NpZ25PcmRlcihnLCBsYXllcmluZyk7XG5cbiAgdmFyIGJlc3RDQyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICBiZXN0O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsYXN0QmVzdCA9IDA7IGxhc3RCZXN0IDwgNDsgKytpLCArK2xhc3RCZXN0KSB7XG4gICAgc3dlZXBMYXllckdyYXBocyhpICUgMiA/IGRvd25MYXllckdyYXBocyA6IHVwTGF5ZXJHcmFwaHMsIGkgJSA0ID49IDIpO1xuXG4gICAgbGF5ZXJpbmcgPSB1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7XG4gICAgdmFyIGNjID0gY3Jvc3NDb3VudChnLCBsYXllcmluZyk7XG4gICAgaWYgKGNjIDwgYmVzdENDKSB7XG4gICAgICBsYXN0QmVzdCA9IDA7XG4gICAgICBiZXN0ID0gXy5jbG9uZURlZXAobGF5ZXJpbmcpO1xuICAgICAgYmVzdENDID0gY2M7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduT3JkZXIoZywgYmVzdCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGF5ZXJHcmFwaHMoZywgcmFua3MsIHJlbGF0aW9uc2hpcCkge1xuICByZXR1cm4gXy5tYXAocmFua3MsIGZ1bmN0aW9uIChyYW5rKSB7XG4gICAgcmV0dXJuIGJ1aWxkTGF5ZXJHcmFwaChnLCByYW5rLCByZWxhdGlvbnNoaXApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dlZXBMYXllckdyYXBocyhsYXllckdyYXBocywgYmlhc1JpZ2h0KSB7XG4gIHZhciBjZyA9IG5ldyBHcmFwaCgpO1xuICBfLmZvckVhY2gobGF5ZXJHcmFwaHMsIGZ1bmN0aW9uIChsZykge1xuICAgIHZhciByb290ID0gbGcuZ3JhcGgoKS5yb290O1xuICAgIHZhciBzb3J0ZWQgPSBzb3J0U3ViZ3JhcGgobGcsIHJvb3QsIGNnLCBiaWFzUmlnaHQpO1xuICAgIF8uZm9yRWFjaChzb3J0ZWQudnMsIGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICBsZy5ub2RlKHYpLm9yZGVyID0gaTtcbiAgICB9KTtcbiAgICBhZGRTdWJncmFwaENvbnN0cmFpbnRzKGxnLCBjZywgc29ydGVkLnZzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbk9yZGVyKGcsIGxheWVyaW5nKSB7XG4gIF8uZm9yRWFjaChsYXllcmluZywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgZy5ub2RlKHYpLm9yZGVyID0gaTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHsgcGFyZW50RHVtbXlDaGFpbnMgfTtcblxuZnVuY3Rpb24gcGFyZW50RHVtbXlDaGFpbnMoZykge1xuICB2YXIgcG9zdG9yZGVyTnVtcyA9IHBvc3RvcmRlcihnKTtcblxuICBfLmZvckVhY2goZy5ncmFwaCgpLmR1bW15Q2hhaW5zLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIHZhciBlZGdlT2JqID0gbm9kZS5lZGdlT2JqO1xuICAgIHZhciBwYXRoRGF0YSA9IGZpbmRQYXRoKGcsIHBvc3RvcmRlck51bXMsIGVkZ2VPYmoudiwgZWRnZU9iai53KTtcbiAgICB2YXIgcGF0aCA9IHBhdGhEYXRhLnBhdGg7XG4gICAgdmFyIGxjYSA9IHBhdGhEYXRhLmxjYTtcbiAgICB2YXIgcGF0aElkeCA9IDA7XG4gICAgdmFyIHBhdGhWID0gcGF0aFtwYXRoSWR4XTtcbiAgICB2YXIgYXNjZW5kaW5nID0gdHJ1ZTtcblxuICAgIHdoaWxlICh2ICE9PSBlZGdlT2JqLncpIHtcbiAgICAgIG5vZGUgPSBnLm5vZGUodik7XG5cbiAgICAgIGlmIChhc2NlbmRpbmcpIHtcbiAgICAgICAgd2hpbGUgKChwYXRoViA9IHBhdGhbcGF0aElkeF0pICE9PSBsY2EgJiYgZy5ub2RlKHBhdGhWKS5tYXhSYW5rIDwgbm9kZS5yYW5rKSB7XG4gICAgICAgICAgcGF0aElkeCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhWID09PSBsY2EpIHtcbiAgICAgICAgICBhc2NlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFzY2VuZGluZykge1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgcGF0aElkeCA8IHBhdGgubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgIGcubm9kZSgocGF0aFYgPSBwYXRoW3BhdGhJZHggKyAxXSkpLm1pblJhbmsgPD0gbm9kZS5yYW5rXG4gICAgICAgICkge1xuICAgICAgICAgIHBhdGhJZHgrKztcbiAgICAgICAgfVxuICAgICAgICBwYXRoViA9IHBhdGhbcGF0aElkeF07XG4gICAgICB9XG5cbiAgICAgIGcuc2V0UGFyZW50KHYsIHBhdGhWKTtcbiAgICAgIHYgPSBnLnN1Y2Nlc3NvcnModilbMF07XG4gICAgfVxuICB9KTtcbn1cblxuLy8gRmluZCBhIHBhdGggZnJvbSB2IHRvIHcgdGhyb3VnaCB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciAoTENBKS4gUmV0dXJuIHRoZVxuLy8gZnVsbCBwYXRoIGFuZCB0aGUgTENBLlxuZnVuY3Rpb24gZmluZFBhdGgoZywgcG9zdG9yZGVyTnVtcywgdiwgdykge1xuICB2YXIgdlBhdGggPSBbXTtcbiAgdmFyIHdQYXRoID0gW107XG4gIHZhciBsb3cgPSBNYXRoLm1pbihwb3N0b3JkZXJOdW1zW3ZdLmxvdywgcG9zdG9yZGVyTnVtc1t3XS5sb3cpO1xuICB2YXIgbGltID0gTWF0aC5tYXgocG9zdG9yZGVyTnVtc1t2XS5saW0sIHBvc3RvcmRlck51bXNbd10ubGltKTtcbiAgdmFyIHBhcmVudDtcbiAgdmFyIGxjYTtcblxuICAvLyBUcmF2ZXJzZSB1cCBmcm9tIHYgdG8gZmluZCB0aGUgTENBXG4gIHBhcmVudCA9IHY7XG4gIGRvIHtcbiAgICBwYXJlbnQgPSBnLnBhcmVudChwYXJlbnQpO1xuICAgIHZQYXRoLnB1c2gocGFyZW50KTtcbiAgfSB3aGlsZSAocGFyZW50ICYmIChwb3N0b3JkZXJOdW1zW3BhcmVudF0ubG93ID4gbG93IHx8IGxpbSA+IHBvc3RvcmRlck51bXNbcGFyZW50XS5saW0pKTtcbiAgbGNhID0gcGFyZW50O1xuXG4gIC8vIFRyYXZlcnNlIGZyb20gdyB0byBMQ0FcbiAgcGFyZW50ID0gdztcbiAgd2hpbGUgKChwYXJlbnQgPSBnLnBhcmVudChwYXJlbnQpKSAhPT0gbGNhKSB7XG4gICAgd1BhdGgucHVzaChwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aDogdlBhdGguY29uY2F0KHdQYXRoLnJldmVyc2UoKSksIGxjYTogbGNhIH07XG59XG5cbmZ1bmN0aW9uIHBvc3RvcmRlcihnKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIGxpbSA9IDA7XG5cbiAgZnVuY3Rpb24gZGZzKHYpIHtcbiAgICB2YXIgbG93ID0gbGltO1xuICAgIF8uZm9yRWFjaChnLmNoaWxkcmVuKHYpLCBkZnMpO1xuICAgIHJlc3VsdFt2XSA9IHsgbG93OiBsb3csIGxpbTogbGltKysgfTtcbiAgfVxuICBfLmZvckVhY2goZy5jaGlsZHJlbigpLCBkZnMpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vLi4vZ3JhcGhsaWIvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsLmpzJztcblxuLypcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvb3JkaW5hdGUgYXNzaWdubWVudCBiYXNlZCBvbiBCcmFuZGVzIGFuZCBLw7ZwZiwgXCJGYXN0XG4gKiBhbmQgU2ltcGxlIEhvcml6b250YWwgQ29vcmRpbmF0ZSBBc3NpZ25tZW50LlwiXG4gKi9cblxuZXhwb3J0IHtcbiAgcG9zaXRpb25YLFxuICBmaW5kVHlwZTFDb25mbGljdHMsXG4gIGZpbmRUeXBlMkNvbmZsaWN0cyxcbiAgYWRkQ29uZmxpY3QsXG4gIGhhc0NvbmZsaWN0LFxuICB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgaG9yaXpvbnRhbENvbXBhY3Rpb24sXG4gIGFsaWduQ29vcmRpbmF0ZXMsXG4gIGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50LFxuICBiYWxhbmNlLFxufTtcblxuLypcbiAqIE1hcmtzIGFsbCBlZGdlcyBpbiB0aGUgZ3JhcGggd2l0aCBhIHR5cGUtMSBjb25mbGljdCB3aXRoIHRoZSBcInR5cGUxQ29uZmxpY3RcIlxuICogcHJvcGVydHkuIEEgdHlwZS0xIGNvbmZsaWN0IGlzIG9uZSB3aGVyZSBhIG5vbi1pbm5lciBzZWdtZW50IGNyb3NzZXMgYW5cbiAqIGlubmVyIHNlZ21lbnQuIEFuIGlubmVyIHNlZ21lbnQgaXMgYW4gZWRnZSB3aXRoIGJvdGggaW5jaWRlbnQgbm9kZXMgbWFya2VkXG4gKiB3aXRoIHRoZSBcImR1bW15XCIgcHJvcGVydHkuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gc2NhbnMgbGF5ZXIgYnkgbGF5ZXIsIHN0YXJ0aW5nIHdpdGggdGhlIHNlY29uZCwgZm9yIHR5cGUtMVxuICogY29uZmxpY3RzIGJldHdlZW4gdGhlIGN1cnJlbnQgbGF5ZXIgYW5kIHRoZSBwcmV2aW91cyBsYXllci4gRm9yIGVhY2ggbGF5ZXJcbiAqIGl0IHNjYW5zIHRoZSBub2RlcyBmcm9tIGxlZnQgdG8gcmlnaHQgdW50aWwgaXQgcmVhY2hlcyBvbmUgdGhhdCBpcyBpbmNpZGVudFxuICogb24gYW4gaW5uZXIgc2VnbWVudC4gSXQgdGhlbiBzY2FucyBwcmVkZWNlc3NvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgaGF2ZVxuICogZWRnZXMgdGhhdCBjcm9zcyB0aGF0IGlubmVyIHNlZ21lbnQuIEF0IHRoZSBlbmQgYSBmaW5hbCBzY2FuIGlzIGRvbmUgZm9yIGFsbFxuICogbm9kZXMgb24gdGhlIGN1cnJlbnQgcmFuayB0byBzZWUgaWYgdGhleSBjcm9zcyB0aGUgbGFzdCB2aXNpdGVkIGlubmVyXG4gKiBzZWdtZW50LlxuICpcbiAqIFRoaXMgYWxnb3JpdGhtIChzYWZlbHkpIGFzc3VtZXMgdGhhdCBhIGR1bW15IG5vZGUgd2lsbCBvbmx5IGJlIGluY2lkZW50IG9uIGFcbiAqIHNpbmdsZSBub2RlIGluIHRoZSBsYXllcnMgYmVpbmcgc2Nhbm5lZC5cbiAqL1xuZnVuY3Rpb24gZmluZFR5cGUxQ29uZmxpY3RzKGcsIGxheWVyaW5nKSB7XG4gIHZhciBjb25mbGljdHMgPSB7fTtcblxuICBmdW5jdGlvbiB2aXNpdExheWVyKHByZXZMYXllciwgbGF5ZXIpIHtcbiAgICB2YXIgLy8gbGFzdCB2aXNpdGVkIG5vZGUgaW4gdGhlIHByZXZpb3VzIGxheWVyIHRoYXQgaXMgaW5jaWRlbnQgb24gYW4gaW5uZXJcbiAgICAgIC8vIHNlZ21lbnQuXG4gICAgICBrMCA9IDAsXG4gICAgICAvLyBUcmFja3MgdGhlIGxhc3Qgbm9kZSBpbiB0aGlzIGxheWVyIHNjYW5uZWQgZm9yIGNyb3NzaW5ncyB3aXRoIGEgdHlwZS0xXG4gICAgICAvLyBzZWdtZW50LlxuICAgICAgc2NhblBvcyA9IDAsXG4gICAgICBwcmV2TGF5ZXJMZW5ndGggPSBwcmV2TGF5ZXIubGVuZ3RoLFxuICAgICAgbGFzdE5vZGUgPSBfLmxhc3QobGF5ZXIpO1xuXG4gICAgXy5mb3JFYWNoKGxheWVyLCBmdW5jdGlvbiAodiwgaSkge1xuICAgICAgdmFyIHcgPSBmaW5kT3RoZXJJbm5lclNlZ21lbnROb2RlKGcsIHYpLFxuICAgICAgICBrMSA9IHcgPyBnLm5vZGUodykub3JkZXIgOiBwcmV2TGF5ZXJMZW5ndGg7XG5cbiAgICAgIGlmICh3IHx8IHYgPT09IGxhc3ROb2RlKSB7XG4gICAgICAgIF8uZm9yRWFjaChsYXllci5zbGljZShzY2FuUG9zLCBpICsgMSksIGZ1bmN0aW9uIChzY2FuTm9kZSkge1xuICAgICAgICAgIF8uZm9yRWFjaChnLnByZWRlY2Vzc29ycyhzY2FuTm9kZSksIGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICB2YXIgdUxhYmVsID0gZy5ub2RlKHUpLFxuICAgICAgICAgICAgICB1UG9zID0gdUxhYmVsLm9yZGVyO1xuICAgICAgICAgICAgaWYgKCh1UG9zIDwgazAgfHwgazEgPCB1UG9zKSAmJiAhKHVMYWJlbC5kdW1teSAmJiBnLm5vZGUoc2Nhbk5vZGUpLmR1bW15KSkge1xuICAgICAgICAgICAgICBhZGRDb25mbGljdChjb25mbGljdHMsIHUsIHNjYW5Ob2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgc2NhblBvcyA9IGkgKyAxO1xuICAgICAgICBrMCA9IGsxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgXy5yZWR1Y2UobGF5ZXJpbmcsIHZpc2l0TGF5ZXIpO1xuICByZXR1cm4gY29uZmxpY3RzO1xufVxuXG5mdW5jdGlvbiBmaW5kVHlwZTJDb25mbGljdHMoZywgbGF5ZXJpbmcpIHtcbiAgdmFyIGNvbmZsaWN0cyA9IHt9O1xuXG4gIGZ1bmN0aW9uIHNjYW4oc291dGgsIHNvdXRoUG9zLCBzb3V0aEVuZCwgcHJldk5vcnRoQm9yZGVyLCBuZXh0Tm9ydGhCb3JkZXIpIHtcbiAgICB2YXIgdjtcbiAgICBfLmZvckVhY2goXy5yYW5nZShzb3V0aFBvcywgc291dGhFbmQpLCBmdW5jdGlvbiAoaSkge1xuICAgICAgdiA9IHNvdXRoW2ldO1xuICAgICAgaWYgKGcubm9kZSh2KS5kdW1teSkge1xuICAgICAgICBfLmZvckVhY2goZy5wcmVkZWNlc3NvcnModiksIGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgdmFyIHVOb2RlID0gZy5ub2RlKHUpO1xuICAgICAgICAgIGlmICh1Tm9kZS5kdW1teSAmJiAodU5vZGUub3JkZXIgPCBwcmV2Tm9ydGhCb3JkZXIgfHwgdU5vZGUub3JkZXIgPiBuZXh0Tm9ydGhCb3JkZXIpKSB7XG4gICAgICAgICAgICBhZGRDb25mbGljdChjb25mbGljdHMsIHUsIHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdExheWVyKG5vcnRoLCBzb3V0aCkge1xuICAgIHZhciBwcmV2Tm9ydGhQb3MgPSAtMSxcbiAgICAgIG5leHROb3J0aFBvcyxcbiAgICAgIHNvdXRoUG9zID0gMDtcblxuICAgIF8uZm9yRWFjaChzb3V0aCwgZnVuY3Rpb24gKHYsIHNvdXRoTG9va2FoZWFkKSB7XG4gICAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSAnYm9yZGVyJykge1xuICAgICAgICB2YXIgcHJlZGVjZXNzb3JzID0gZy5wcmVkZWNlc3NvcnModik7XG4gICAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dE5vcnRoUG9zID0gZy5ub2RlKHByZWRlY2Vzc29yc1swXSkub3JkZXI7XG4gICAgICAgICAgc2Nhbihzb3V0aCwgc291dGhQb3MsIHNvdXRoTG9va2FoZWFkLCBwcmV2Tm9ydGhQb3MsIG5leHROb3J0aFBvcyk7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHNvdXRoUG9zID0gc291dGhMb29rYWhlYWQ7XG4gICAgICAgICAgcHJldk5vcnRoUG9zID0gbmV4dE5vcnRoUG9zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzY2FuKHNvdXRoLCBzb3V0aFBvcywgc291dGgubGVuZ3RoLCBuZXh0Tm9ydGhQb3MsIG5vcnRoLmxlbmd0aCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc291dGg7XG4gIH1cblxuICBfLnJlZHVjZShsYXllcmluZywgdmlzaXRMYXllcik7XG4gIHJldHVybiBjb25mbGljdHM7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdGhlcklubmVyU2VnbWVudE5vZGUoZywgdikge1xuICBpZiAoZy5ub2RlKHYpLmR1bW15KSB7XG4gICAgcmV0dXJuIF8uZmluZChnLnByZWRlY2Vzc29ycyh2KSwgZnVuY3Rpb24gKHUpIHtcbiAgICAgIHJldHVybiBnLm5vZGUodSkuZHVtbXk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ29uZmxpY3QoY29uZmxpY3RzLCB2LCB3KSB7XG4gIGlmICh2ID4gdykge1xuICAgIHZhciB0bXAgPSB2O1xuICAgIHYgPSB3O1xuICAgIHcgPSB0bXA7XG4gIH1cblxuICB2YXIgY29uZmxpY3RzViA9IGNvbmZsaWN0c1t2XTtcbiAgaWYgKCFjb25mbGljdHNWKSB7XG4gICAgY29uZmxpY3RzW3ZdID0gY29uZmxpY3RzViA9IHt9O1xuICB9XG4gIGNvbmZsaWN0c1Zbd10gPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNDb25mbGljdChjb25mbGljdHMsIHYsIHcpIHtcbiAgaWYgKHYgPiB3KSB7XG4gICAgdmFyIHRtcCA9IHY7XG4gICAgdiA9IHc7XG4gICAgdyA9IHRtcDtcbiAgfVxuICByZXR1cm4gXy5oYXMoY29uZmxpY3RzW3ZdLCB3KTtcbn1cblxuLypcbiAqIFRyeSB0byBhbGlnbiBub2RlcyBpbnRvIHZlcnRpY2FsIFwiYmxvY2tzXCIgd2hlcmUgcG9zc2libGUuIFRoaXMgYWxnb3JpdGhtXG4gKiBhdHRlbXB0cyB0byBhbGlnbiBhIG5vZGUgd2l0aCBvbmUgb2YgaXRzIG1lZGlhbiBuZWlnaGJvcnMuIElmIHRoZSBlZGdlXG4gKiBjb25uZWN0aW5nIGEgbmVpZ2hib3IgaXMgYSB0eXBlLTEgY29uZmxpY3QgdGhlbiB3ZSBpZ25vcmUgdGhhdCBwb3NzaWJpbGl0eS5cbiAqIElmIGEgcHJldmlvdXMgbm9kZSBoYXMgYWxyZWFkeSBmb3JtZWQgYSBibG9jayB3aXRoIGEgbm9kZSBhZnRlciB0aGUgbm9kZVxuICogd2UncmUgdHJ5aW5nIHRvIGZvcm0gYSBibG9jayB3aXRoLCB3ZSBhbHNvIGlnbm9yZSB0aGF0IHBvc3NpYmlsaXR5IC0gb3VyXG4gKiBibG9ja3Mgd291bGQgYmUgc3BsaXQgaW4gdGhhdCBzY2VuYXJpby5cbiAqL1xuZnVuY3Rpb24gdmVydGljYWxBbGlnbm1lbnQoZywgbGF5ZXJpbmcsIGNvbmZsaWN0cywgbmVpZ2hib3JGbikge1xuICB2YXIgcm9vdCA9IHt9LFxuICAgIGFsaWduID0ge30sXG4gICAgcG9zID0ge307XG5cbiAgLy8gV2UgY2FjaGUgdGhlIHBvc2l0aW9uIGhlcmUgYmFzZWQgb24gdGhlIGxheWVyaW5nIGJlY2F1c2UgdGhlIGdyYXBoIGFuZFxuICAvLyBsYXllcmluZyBtYXkgYmUgb3V0IG9mIHN5bmMuIFRoZSBsYXllcmluZyBtYXRyaXggaXMgbWFuaXB1bGF0ZWQgdG9cbiAgLy8gZ2VuZXJhdGUgZGlmZmVyZW50IGV4dHJlbWUgYWxpZ25tZW50cy5cbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2LCBvcmRlcikge1xuICAgICAgcm9vdFt2XSA9IHY7XG4gICAgICBhbGlnblt2XSA9IHY7XG4gICAgICBwb3Nbdl0gPSBvcmRlcjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICB2YXIgcHJldklkeCA9IC0xO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHZhciB3cyA9IG5laWdoYm9yRm4odik7XG4gICAgICBpZiAod3MubGVuZ3RoKSB7XG4gICAgICAgIHdzID0gXy5zb3J0Qnkod3MsIGZ1bmN0aW9uICh3KSB7XG4gICAgICAgICAgcmV0dXJuIHBvc1t3XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBtcCA9ICh3cy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKG1wKSwgaWwgPSBNYXRoLmNlaWwobXApOyBpIDw9IGlsOyArK2kpIHtcbiAgICAgICAgICB2YXIgdyA9IHdzW2ldO1xuICAgICAgICAgIGlmIChhbGlnblt2XSA9PT0gdiAmJiBwcmV2SWR4IDwgcG9zW3ddICYmICFoYXNDb25mbGljdChjb25mbGljdHMsIHYsIHcpKSB7XG4gICAgICAgICAgICBhbGlnblt3XSA9IHY7XG4gICAgICAgICAgICBhbGlnblt2XSA9IHJvb3Rbdl0gPSByb290W3ddO1xuICAgICAgICAgICAgcHJldklkeCA9IHBvc1t3XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgcm9vdDogcm9vdCwgYWxpZ246IGFsaWduIH07XG59XG5cbmZ1bmN0aW9uIGhvcml6b250YWxDb21wYWN0aW9uKGcsIGxheWVyaW5nLCByb290LCBhbGlnbiwgcmV2ZXJzZVNlcCkge1xuICAvLyBUaGlzIHBvcnRpb24gb2YgdGhlIGFsZ29yaXRobSBkaWZmZXJzIGZyb20gQksgZHVlIHRvIGEgbnVtYmVyIG9mIHByb2JsZW1zLlxuICAvLyBJbnN0ZWFkIG9mIHRoZWlyIGFsZ29yaXRobSB3ZSBjb25zdHJ1Y3QgYSBuZXcgYmxvY2sgZ3JhcGggYW5kIGRvIHR3b1xuICAvLyBzd2VlcHMuIFRoZSBmaXJzdCBzd2VlcCBwbGFjZXMgYmxvY2tzIHdpdGggdGhlIHNtYWxsZXN0IHBvc3NpYmxlXG4gIC8vIGNvb3JkaW5hdGVzLiBUaGUgc2Vjb25kIHN3ZWVwIHJlbW92ZXMgdW51c2VkIHNwYWNlIGJ5IG1vdmluZyBibG9ja3MgdG8gdGhlXG4gIC8vIGdyZWF0ZXN0IGNvb3JkaW5hdGVzIHdpdGhvdXQgdmlvbGF0aW5nIHNlcGFyYXRpb24uXG4gIHZhciB4cyA9IHt9LFxuICAgIGJsb2NrRyA9IGJ1aWxkQmxvY2tHcmFwaChnLCBsYXllcmluZywgcm9vdCwgcmV2ZXJzZVNlcCksXG4gICAgYm9yZGVyVHlwZSA9IHJldmVyc2VTZXAgPyAnYm9yZGVyTGVmdCcgOiAnYm9yZGVyUmlnaHQnO1xuXG4gIGZ1bmN0aW9uIGl0ZXJhdGUoc2V0WHNGdW5jLCBuZXh0Tm9kZXNGdW5jKSB7XG4gICAgdmFyIHN0YWNrID0gYmxvY2tHLm5vZGVzKCk7XG4gICAgdmFyIGVsZW0gPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdmlzaXRlZCA9IHt9O1xuICAgIHdoaWxlIChlbGVtKSB7XG4gICAgICBpZiAodmlzaXRlZFtlbGVtXSkge1xuICAgICAgICBzZXRYc0Z1bmMoZWxlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXNpdGVkW2VsZW1dID0gdHJ1ZTtcbiAgICAgICAgc3RhY2sucHVzaChlbGVtKTtcbiAgICAgICAgc3RhY2sgPSBzdGFjay5jb25jYXQobmV4dE5vZGVzRnVuYyhlbGVtKSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW0gPSBzdGFjay5wb3AoKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCBwYXNzLCBhc3NpZ24gc21hbGxlc3QgY29vcmRpbmF0ZXNcbiAgZnVuY3Rpb24gcGFzczEoZWxlbSkge1xuICAgIHhzW2VsZW1dID0gYmxvY2tHLmluRWRnZXMoZWxlbSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heChhY2MsIHhzW2Uudl0gKyBibG9ja0cuZWRnZShlKSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyBTZWNvbmQgcGFzcywgYXNzaWduIGdyZWF0ZXN0IGNvb3JkaW5hdGVzXG4gIGZ1bmN0aW9uIHBhc3MyKGVsZW0pIHtcbiAgICB2YXIgbWluID0gYmxvY2tHLm91dEVkZ2VzKGVsZW0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBlKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oYWNjLCB4c1tlLnddIC0gYmxvY2tHLmVkZ2UoZSkpO1xuICAgIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG5cbiAgICB2YXIgbm9kZSA9IGcubm9kZShlbGVtKTtcbiAgICBpZiAobWluICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgbm9kZS5ib3JkZXJUeXBlICE9PSBib3JkZXJUeXBlKSB7XG4gICAgICB4c1tlbGVtXSA9IE1hdGgubWF4KHhzW2VsZW1dLCBtaW4pO1xuICAgIH1cbiAgfVxuXG4gIGl0ZXJhdGUocGFzczEsIGJsb2NrRy5wcmVkZWNlc3NvcnMuYmluZChibG9ja0cpKTtcbiAgaXRlcmF0ZShwYXNzMiwgYmxvY2tHLnN1Y2Nlc3NvcnMuYmluZChibG9ja0cpKTtcblxuICAvLyBBc3NpZ24geCBjb29yZGluYXRlcyB0byBhbGwgbm9kZXNcbiAgXy5mb3JFYWNoKGFsaWduLCBmdW5jdGlvbiAodikge1xuICAgIHhzW3ZdID0geHNbcm9vdFt2XV07XG4gIH0pO1xuXG4gIHJldHVybiB4cztcbn1cblxuZnVuY3Rpb24gYnVpbGRCbG9ja0dyYXBoKGcsIGxheWVyaW5nLCByb290LCByZXZlcnNlU2VwKSB7XG4gIHZhciBibG9ja0dyYXBoID0gbmV3IEdyYXBoKCksXG4gICAgZ3JhcGhMYWJlbCA9IGcuZ3JhcGgoKSxcbiAgICBzZXBGbiA9IHNlcChncmFwaExhYmVsLm5vZGVzZXAsIGdyYXBoTGFiZWwuZWRnZXNlcCwgcmV2ZXJzZVNlcCk7XG5cbiAgXy5mb3JFYWNoKGxheWVyaW5nLCBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgICB2YXIgdTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICB2YXIgdlJvb3QgPSByb290W3ZdO1xuICAgICAgYmxvY2tHcmFwaC5zZXROb2RlKHZSb290KTtcbiAgICAgIGlmICh1KSB7XG4gICAgICAgIHZhciB1Um9vdCA9IHJvb3RbdV0sXG4gICAgICAgICAgcHJldk1heCA9IGJsb2NrR3JhcGguZWRnZSh1Um9vdCwgdlJvb3QpO1xuICAgICAgICBibG9ja0dyYXBoLnNldEVkZ2UodVJvb3QsIHZSb290LCBNYXRoLm1heChzZXBGbihnLCB2LCB1KSwgcHJldk1heCB8fCAwKSk7XG4gICAgICB9XG4gICAgICB1ID0gdjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJsb2NrR3JhcGg7XG59XG5cbi8qXG4gKiBSZXR1cm5zIHRoZSBhbGlnbm1lbnQgdGhhdCBoYXMgdGhlIHNtYWxsZXN0IHdpZHRoIG9mIHRoZSBnaXZlbiBhbGlnbm1lbnRzLlxuICovXG5mdW5jdGlvbiBmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudChnLCB4c3MpIHtcbiAgcmV0dXJuIF8ubWluQnkoXy52YWx1ZXMoeHNzKSwgZnVuY3Rpb24gKHhzKSB7XG4gICAgdmFyIG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXG4gICAgXy5mb3JJbih4cywgZnVuY3Rpb24gKHgsIHYpIHtcbiAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aChnLCB2KSAvIDI7XG5cbiAgICAgIG1heCA9IE1hdGgubWF4KHggKyBoYWxmV2lkdGgsIG1heCk7XG4gICAgICBtaW4gPSBNYXRoLm1pbih4IC0gaGFsZldpZHRoLCBtaW4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1heCAtIG1pbjtcbiAgfSk7XG59XG5cbi8qXG4gKiBBbGlnbiB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBvZiB0aGUgbGF5b3V0IGFsaWdubWVudHMgc3VjaCB0aGF0XG4gKiBsZWZ0LWJpYXNlZCBhbGlnbm1lbnRzIGhhdmUgdGhlaXIgbWluaW11bSBjb29yZGluYXRlIGF0IHRoZSBzYW1lIHBvaW50IGFzXG4gKiB0aGUgbWluaW11bSBjb29yZGluYXRlIG9mIHRoZSBzbWFsbGVzdCB3aWR0aCBhbGlnbm1lbnQgYW5kIHJpZ2h0LWJpYXNlZFxuICogYWxpZ25tZW50cyBoYXZlIHRoZWlyIG1heGltdW0gY29vcmRpbmF0ZSBhdCB0aGUgc2FtZSBwb2ludCBhcyB0aGUgbWF4aW11bVxuICogY29vcmRpbmF0ZSBvZiB0aGUgc21hbGxlc3Qgd2lkdGggYWxpZ25tZW50LlxuICovXG5mdW5jdGlvbiBhbGlnbkNvb3JkaW5hdGVzKHhzcywgYWxpZ25Ubykge1xuICB2YXIgYWxpZ25Ub1ZhbHMgPSBfLnZhbHVlcyhhbGlnblRvKSxcbiAgICBhbGlnblRvTWluID0gXy5taW4oYWxpZ25Ub1ZhbHMpLFxuICAgIGFsaWduVG9NYXggPSBfLm1heChhbGlnblRvVmFscyk7XG5cbiAgXy5mb3JFYWNoKFsndScsICdkJ10sIGZ1bmN0aW9uICh2ZXJ0KSB7XG4gICAgXy5mb3JFYWNoKFsnbCcsICdyJ10sIGZ1bmN0aW9uIChob3Jpeikge1xuICAgICAgdmFyIGFsaWdubWVudCA9IHZlcnQgKyBob3JpeixcbiAgICAgICAgeHMgPSB4c3NbYWxpZ25tZW50XSxcbiAgICAgICAgZGVsdGE7XG4gICAgICBpZiAoeHMgPT09IGFsaWduVG8pIHJldHVybjtcblxuICAgICAgdmFyIHhzVmFscyA9IF8udmFsdWVzKHhzKTtcbiAgICAgIGRlbHRhID0gaG9yaXogPT09ICdsJyA/IGFsaWduVG9NaW4gLSBfLm1pbih4c1ZhbHMpIDogYWxpZ25Ub01heCAtIF8ubWF4KHhzVmFscyk7XG5cbiAgICAgIGlmIChkZWx0YSkge1xuICAgICAgICB4c3NbYWxpZ25tZW50XSA9IF8ubWFwVmFsdWVzKHhzLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgZGVsdGE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYmFsYW5jZSh4c3MsIGFsaWduKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyh4c3MudWwsIGZ1bmN0aW9uIChpZ25vcmUsIHYpIHtcbiAgICBpZiAoYWxpZ24pIHtcbiAgICAgIHJldHVybiB4c3NbYWxpZ24udG9Mb3dlckNhc2UoKV1bdl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB4cyA9IF8uc29ydEJ5KF8ubWFwKHhzcywgdikpO1xuICAgICAgcmV0dXJuICh4c1sxXSArIHhzWzJdKSAvIDI7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25YKGcpIHtcbiAgdmFyIGxheWVyaW5nID0gdXRpbC5idWlsZExheWVyTWF0cml4KGcpO1xuICB2YXIgY29uZmxpY3RzID0gXy5tZXJnZShmaW5kVHlwZTFDb25mbGljdHMoZywgbGF5ZXJpbmcpLCBmaW5kVHlwZTJDb25mbGljdHMoZywgbGF5ZXJpbmcpKTtcblxuICB2YXIgeHNzID0ge307XG4gIHZhciBhZGp1c3RlZExheWVyaW5nO1xuICBfLmZvckVhY2goWyd1JywgJ2QnXSwgZnVuY3Rpb24gKHZlcnQpIHtcbiAgICBhZGp1c3RlZExheWVyaW5nID0gdmVydCA9PT0gJ3UnID8gbGF5ZXJpbmcgOiBfLnZhbHVlcyhsYXllcmluZykucmV2ZXJzZSgpO1xuICAgIF8uZm9yRWFjaChbJ2wnLCAnciddLCBmdW5jdGlvbiAoaG9yaXopIHtcbiAgICAgIGlmIChob3JpeiA9PT0gJ3InKSB7XG4gICAgICAgIGFkanVzdGVkTGF5ZXJpbmcgPSBfLm1hcChhZGp1c3RlZExheWVyaW5nLCBmdW5jdGlvbiAoaW5uZXIpIHtcbiAgICAgICAgICByZXR1cm4gXy52YWx1ZXMoaW5uZXIpLnJldmVyc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZWlnaGJvckZuID0gKHZlcnQgPT09ICd1JyA/IGcucHJlZGVjZXNzb3JzIDogZy5zdWNjZXNzb3JzKS5iaW5kKGcpO1xuICAgICAgdmFyIGFsaWduID0gdmVydGljYWxBbGlnbm1lbnQoZywgYWRqdXN0ZWRMYXllcmluZywgY29uZmxpY3RzLCBuZWlnaGJvckZuKTtcbiAgICAgIHZhciB4cyA9IGhvcml6b250YWxDb21wYWN0aW9uKGcsIGFkanVzdGVkTGF5ZXJpbmcsIGFsaWduLnJvb3QsIGFsaWduLmFsaWduLCBob3JpeiA9PT0gJ3InKTtcbiAgICAgIGlmIChob3JpeiA9PT0gJ3InKSB7XG4gICAgICAgIHhzID0gXy5tYXBWYWx1ZXMoeHMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIC14O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHhzc1t2ZXJ0ICsgaG9yaXpdID0geHM7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZhciBzbWFsbGVzdFdpZHRoID0gZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQoZywgeHNzKTtcbiAgYWxpZ25Db29yZGluYXRlcyh4c3MsIHNtYWxsZXN0V2lkdGgpO1xuICByZXR1cm4gYmFsYW5jZSh4c3MsIGcuZ3JhcGgoKS5hbGlnbik7XG59XG5cbmZ1bmN0aW9uIHNlcChub2RlU2VwLCBlZGdlU2VwLCByZXZlcnNlU2VwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZywgdiwgdykge1xuICAgIHZhciB2TGFiZWwgPSBnLm5vZGUodik7XG4gICAgdmFyIHdMYWJlbCA9IGcubm9kZSh3KTtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgZGVsdGE7XG5cbiAgICBzdW0gKz0gdkxhYmVsLndpZHRoIC8gMjtcbiAgICBpZiAoXy5oYXModkxhYmVsLCAnbGFiZWxwb3MnKSkge1xuICAgICAgc3dpdGNoICh2TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdsJzpcbiAgICAgICAgICBkZWx0YSA9IC12TGFiZWwud2lkdGggLyAyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICBkZWx0YSA9IHZMYWJlbC53aWR0aCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZWx0YSkge1xuICAgICAgc3VtICs9IHJldmVyc2VTZXAgPyBkZWx0YSA6IC1kZWx0YTtcbiAgICB9XG4gICAgZGVsdGEgPSAwO1xuXG4gICAgc3VtICs9ICh2TGFiZWwuZHVtbXkgPyBlZGdlU2VwIDogbm9kZVNlcCkgLyAyO1xuICAgIHN1bSArPSAod0xhYmVsLmR1bW15ID8gZWRnZVNlcCA6IG5vZGVTZXApIC8gMjtcblxuICAgIHN1bSArPSB3TGFiZWwud2lkdGggLyAyO1xuICAgIGlmIChfLmhhcyh3TGFiZWwsICdsYWJlbHBvcycpKSB7XG4gICAgICBzd2l0Y2ggKHdMYWJlbC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgIGRlbHRhID0gd0xhYmVsLndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgZGVsdGEgPSAtd0xhYmVsLndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBzdW0gKz0gcmV2ZXJzZVNlcCA/IGRlbHRhIDogLWRlbHRhO1xuICAgIH1cbiAgICBkZWx0YSA9IDA7XG5cbiAgICByZXR1cm4gc3VtO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3aWR0aChnLCB2KSB7XG4gIHJldHVybiBnLm5vZGUodikud2lkdGg7XG59XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBwb3NpdGlvblggfSBmcm9tICcuL2JrLmpzJztcblxuZXhwb3J0IHsgcG9zaXRpb24gfTtcblxuZnVuY3Rpb24gcG9zaXRpb24oZykge1xuICBnID0gdXRpbC5hc05vbkNvbXBvdW5kR3JhcGgoZyk7XG5cbiAgcG9zaXRpb25ZKGcpO1xuICBfLmZvck93bihwb3NpdGlvblgoZyksIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgZy5ub2RlKHYpLnggPSB4O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25ZKGcpIHtcbiAgdmFyIGxheWVyaW5nID0gdXRpbC5idWlsZExheWVyTWF0cml4KGcpO1xuICB2YXIgcmFua1NlcCA9IGcuZ3JhcGgoKS5yYW5rc2VwO1xuICB2YXIgcHJldlkgPSAwO1xuICBfLmZvckVhY2gobGF5ZXJpbmcsIGZ1bmN0aW9uIChsYXllcikge1xuICAgIHZhciBtYXhIZWlnaHQgPSBfLm1heChcbiAgICAgIF8ubWFwKGxheWVyLCBmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZy5ub2RlKHYpLmhlaWdodDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBfLmZvckVhY2gobGF5ZXIsIGZ1bmN0aW9uICh2KSB7XG4gICAgICBnLm5vZGUodikueSA9IHByZXZZICsgbWF4SGVpZ2h0IC8gMjtcbiAgICB9KTtcbiAgICBwcmV2WSArPSBtYXhIZWlnaHQgKyByYW5rU2VwO1xuICB9KTtcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9ncmFwaGxpYi9pbmRleC5qcyc7XG5pbXBvcnQgeyBhZGRCb3JkZXJTZWdtZW50cyB9IGZyb20gJy4vYWRkLWJvcmRlci1zZWdtZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBjb29yZGluYXRlU3lzdGVtIGZyb20gJy4vY29vcmRpbmF0ZS1zeXN0ZW0uanMnO1xuaW1wb3J0ICogYXMgYWN5Y2xpYyBmcm9tICcuL2FjeWNsaWMuanMnO1xuaW1wb3J0ICogYXMgbm9ybWFsaXplIGZyb20gJy4vbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IHJhbmsgfSBmcm9tICcuL3JhbmsvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgbmVzdGluZ0dyYXBoIGZyb20gJy4vbmVzdGluZy1ncmFwaC5qcyc7XG5pbXBvcnQgeyBvcmRlciB9IGZyb20gJy4vb3JkZXIvaW5kZXguanMnO1xuaW1wb3J0IHsgcGFyZW50RHVtbXlDaGFpbnMgfSBmcm9tICcuL3BhcmVudC1kdW1teS1jaGFpbnMuanMnO1xuaW1wb3J0IHsgcG9zaXRpb24gfSBmcm9tICcuL3Bvc2l0aW9uL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsLmpzJztcblxuZXhwb3J0IHsgbGF5b3V0IH07XG5cbmZ1bmN0aW9uIGxheW91dChnLCBvcHRzKSB7XG4gIHZhciB0aW1lID0gb3B0cyAmJiBvcHRzLmRlYnVnVGltaW5nID8gdXRpbC50aW1lIDogdXRpbC5ub3RpbWU7XG4gIHRpbWUoJ2xheW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGF5b3V0R3JhcGggPSB0aW1lKCcgIGJ1aWxkTGF5b3V0R3JhcGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYnVpbGRMYXlvdXRHcmFwaChnKTtcbiAgICB9KTtcbiAgICB0aW1lKCcgIHJ1bkxheW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJ1bkxheW91dChsYXlvdXRHcmFwaCwgdGltZSk7XG4gICAgfSk7XG4gICAgdGltZSgnICB1cGRhdGVJbnB1dEdyYXBoJywgZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlSW5wdXRHcmFwaChnLCBsYXlvdXRHcmFwaCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBydW5MYXlvdXQoZywgdGltZSkge1xuICB0aW1lKCcgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscycsIGZ1bmN0aW9uICgpIHtcbiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHJlbW92ZVNlbGZFZGdlcycsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVTZWxmRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgYWN5Y2xpYycsIGZ1bmN0aW9uICgpIHtcbiAgICBhY3ljbGljLnJ1bihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBuZXN0aW5nR3JhcGgucnVuJywgZnVuY3Rpb24gKCkge1xuICAgIG5lc3RpbmdHcmFwaC5ydW4oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmFuaycsIGZ1bmN0aW9uICgpIHtcbiAgICByYW5rKHV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlRW1wdHlSYW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICB1dGlsLnJlbW92ZUVtcHR5UmFua3MoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgbmVzdGluZ0dyYXBoLmNsZWFudXAoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbm9ybWFsaXplUmFua3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5ub3JtYWxpemVSYW5rcyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBhc3NpZ25SYW5rTWluTWF4JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2lnblJhbmtNaW5NYXgoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIG5vcm1hbGl6ZS5ydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbm9ybWFsaXplLnJ1bihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBwYXJlbnREdW1teUNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICBwYXJlbnREdW1teUNoYWlucyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBhZGRCb3JkZXJTZWdtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBhZGRCb3JkZXJTZWdtZW50cyhnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBvcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBvcmRlcihnKTtcbiAgfSk7XG4gIHRpbWUoJyAgICBpbnNlcnRTZWxmRWRnZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaW5zZXJ0U2VsZkVkZ2VzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbS5hZGp1c3QoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcG9zaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgcG9zaXRpb24oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcG9zaXRpb25TZWxmRWRnZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcG9zaXRpb25TZWxmRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgcmVtb3ZlQm9yZGVyTm9kZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmVtb3ZlQm9yZGVyTm9kZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgbm9ybWFsaXplLnVuZG8nLCBmdW5jdGlvbiAoKSB7XG4gICAgbm9ybWFsaXplLnVuZG8oZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgZml4dXBFZGdlTGFiZWxDb29yZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZml4dXBFZGdlTGFiZWxDb29yZHMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29vcmRpbmF0ZVN5c3RlbS51bmRvKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHRyYW5zbGF0ZUdyYXBoJywgZnVuY3Rpb24gKCkge1xuICAgIHRyYW5zbGF0ZUdyYXBoKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzKGcpO1xuICB9KTtcbiAgdGltZSgnICAgIHJldmVyc2VQb2ludHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZyk7XG4gIH0pO1xuICB0aW1lKCcgICAgYWN5Y2xpYy51bmRvJywgZnVuY3Rpb24gKCkge1xuICAgIGFjeWNsaWMudW5kbyhnKTtcbiAgfSk7XG59XG5cbi8qXG4gKiBDb3BpZXMgZmluYWwgbGF5b3V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGxheW91dCBncmFwaCBiYWNrIHRvIHRoZSBpbnB1dFxuICogZ3JhcGguIFRoaXMgcHJvY2VzcyBvbmx5IGNvcGllcyB3aGl0ZWxpc3RlZCBhdHRyaWJ1dGVzIGZyb20gdGhlIGxheW91dCBncmFwaFxuICogdG8gdGhlIGlucHV0IGdyYXBoLCBzbyBpdCBzZXJ2ZXMgYXMgYSBnb29kIHBsYWNlIHRvIGRldGVybWluZSB3aGF0XG4gKiBhdHRyaWJ1dGVzIGNhbiBpbmZsdWVuY2UgbGF5b3V0LlxuICovXG5mdW5jdGlvbiB1cGRhdGVJbnB1dEdyYXBoKGlucHV0R3JhcGgsIGxheW91dEdyYXBoKSB7XG4gIF8uZm9yRWFjaChpbnB1dEdyYXBoLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIGlucHV0TGFiZWwgPSBpbnB1dEdyYXBoLm5vZGUodik7XG4gICAgdmFyIGxheW91dExhYmVsID0gbGF5b3V0R3JhcGgubm9kZSh2KTtcblxuICAgIGlmIChpbnB1dExhYmVsKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcblxuICAgICAgaWYgKGxheW91dEdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgICBpbnB1dExhYmVsLndpZHRoID0gbGF5b3V0TGFiZWwud2lkdGg7XG4gICAgICAgIGlucHV0TGFiZWwuaGVpZ2h0ID0gbGF5b3V0TGFiZWwuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgaW5wdXRMYWJlbCA9IGlucHV0R3JhcGguZWRnZShlKTtcbiAgICB2YXIgbGF5b3V0TGFiZWwgPSBsYXlvdXRHcmFwaC5lZGdlKGUpO1xuXG4gICAgaW5wdXRMYWJlbC5wb2ludHMgPSBsYXlvdXRMYWJlbC5wb2ludHM7XG4gICAgaWYgKF8uaGFzKGxheW91dExhYmVsLCAneCcpKSB7XG4gICAgICBpbnB1dExhYmVsLnggPSBsYXlvdXRMYWJlbC54O1xuICAgICAgaW5wdXRMYWJlbC55ID0gbGF5b3V0TGFiZWwueTtcbiAgICB9XG4gIH0pO1xuXG4gIGlucHV0R3JhcGguZ3JhcGgoKS53aWR0aCA9IGxheW91dEdyYXBoLmdyYXBoKCkud2lkdGg7XG4gIGlucHV0R3JhcGguZ3JhcGgoKS5oZWlnaHQgPSBsYXlvdXRHcmFwaC5ncmFwaCgpLmhlaWdodDtcbn1cblxudmFyIGdyYXBoTnVtQXR0cnMgPSBbJ25vZGVzZXAnLCAnZWRnZXNlcCcsICdyYW5rc2VwJywgJ21hcmdpbngnLCAnbWFyZ2lueSddO1xudmFyIGdyYXBoRGVmYXVsdHMgPSB7IHJhbmtzZXA6IDUwLCBlZGdlc2VwOiAyMCwgbm9kZXNlcDogNTAsIHJhbmtkaXI6ICd0YicgfTtcbnZhciBncmFwaEF0dHJzID0gWydhY3ljbGljZXInLCAncmFua2VyJywgJ3JhbmtkaXInLCAnYWxpZ24nXTtcbnZhciBub2RlTnVtQXR0cnMgPSBbJ3dpZHRoJywgJ2hlaWdodCddO1xudmFyIG5vZGVEZWZhdWx0cyA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xudmFyIGVkZ2VOdW1BdHRycyA9IFsnbWlubGVuJywgJ3dlaWdodCcsICd3aWR0aCcsICdoZWlnaHQnLCAnbGFiZWxvZmZzZXQnXTtcbnZhciBlZGdlRGVmYXVsdHMgPSB7XG4gIG1pbmxlbjogMSxcbiAgd2VpZ2h0OiAxLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBsYWJlbG9mZnNldDogMTAsXG4gIGxhYmVscG9zOiAncicsXG59O1xudmFyIGVkZ2VBdHRycyA9IFsnbGFiZWxwb3MnXTtcblxuLypcbiAqIENvbnN0cnVjdHMgYSBuZXcgZ3JhcGggZnJvbSB0aGUgaW5wdXQgZ3JhcGgsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBsYXlvdXQuXG4gKiBUaGlzIHByb2Nlc3MgY29waWVzIG9ubHkgd2hpdGVsaXN0ZWQgYXR0cmlidXRlcyBmcm9tIHRoZSBpbnB1dCBncmFwaCB0byB0aGVcbiAqIGxheW91dCBncmFwaC4gVGh1cyB0aGlzIGZ1bmN0aW9uIHNlcnZlcyBhcyBhIGdvb2QgcGxhY2UgdG8gZGV0ZXJtaW5lIHdoYXRcbiAqIGF0dHJpYnV0ZXMgY2FuIGluZmx1ZW5jZSBsYXlvdXQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5b3V0R3JhcGgoaW5wdXRHcmFwaCkge1xuICB2YXIgZyA9IG5ldyBHcmFwaCh7IG11bHRpZ3JhcGg6IHRydWUsIGNvbXBvdW5kOiB0cnVlIH0pO1xuICB2YXIgZ3JhcGggPSBjYW5vbmljYWxpemUoaW5wdXRHcmFwaC5ncmFwaCgpKTtcblxuICBnLnNldEdyYXBoKFxuICAgIF8ubWVyZ2Uoe30sIGdyYXBoRGVmYXVsdHMsIHNlbGVjdE51bWJlckF0dHJzKGdyYXBoLCBncmFwaE51bUF0dHJzKSwgXy5waWNrKGdyYXBoLCBncmFwaEF0dHJzKSlcbiAgKTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGgubm9kZSh2KSk7XG4gICAgZy5zZXROb2RlKHYsIF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSwgbm9kZU51bUF0dHJzKSwgbm9kZURlZmF1bHRzKSk7XG4gICAgZy5zZXRQYXJlbnQodiwgaW5wdXRHcmFwaC5wYXJlbnQodikpO1xuICB9KTtcblxuICBfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gY2Fub25pY2FsaXplKGlucHV0R3JhcGguZWRnZShlKSk7XG4gICAgZy5zZXRFZGdlKFxuICAgICAgZSxcbiAgICAgIF8ubWVyZ2Uoe30sIGVkZ2VEZWZhdWx0cywgc2VsZWN0TnVtYmVyQXR0cnMoZWRnZSwgZWRnZU51bUF0dHJzKSwgXy5waWNrKGVkZ2UsIGVkZ2VBdHRycykpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGc7XG59XG5cbi8qXG4gKiBUaGlzIGlkZWEgY29tZXMgZnJvbSB0aGUgR2Fuc25lciBwYXBlcjogdG8gYWNjb3VudCBmb3IgZWRnZSBsYWJlbHMgaW4gb3VyXG4gKiBsYXlvdXQgd2Ugc3BsaXQgZWFjaCByYW5rIGluIGhhbGYgYnkgZG91YmxpbmcgbWlubGVuIGFuZCBoYWx2aW5nIHJhbmtzZXAuXG4gKiBUaGVuIHdlIGNhbiBwbGFjZSBsYWJlbHMgYXQgdGhlc2UgbWlkLXBvaW50cyBiZXR3ZWVuIG5vZGVzLlxuICpcbiAqIFdlIGFsc28gYWRkIHNvbWUgbWluaW1hbCBwYWRkaW5nIHRvIHRoZSB3aWR0aCB0byBwdXNoIHRoZSBsYWJlbCBmb3IgdGhlIGVkZ2VcbiAqIGF3YXkgZnJvbSB0aGUgZWRnZSBpdHNlbGYgYSBiaXQuXG4gKi9cbmZ1bmN0aW9uIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZykge1xuICB2YXIgZ3JhcGggPSBnLmdyYXBoKCk7XG4gIGdyYXBoLnJhbmtzZXAgLz0gMjtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBlZGdlLm1pbmxlbiAqPSAyO1xuICAgIGlmIChlZGdlLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkgIT09ICdjJykge1xuICAgICAgaWYgKGdyYXBoLnJhbmtkaXIgPT09ICdUQicgfHwgZ3JhcGgucmFua2RpciA9PT0gJ0JUJykge1xuICAgICAgICBlZGdlLndpZHRoICs9IGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlLmhlaWdodCArPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbi8qXG4gKiBDcmVhdGVzIHRlbXBvcmFyeSBkdW1teSBub2RlcyB0aGF0IGNhcHR1cmUgdGhlIHJhbmsgaW4gd2hpY2ggZWFjaCBlZGdlJ3NcbiAqIGxhYmVsIGlzIGdvaW5nIHRvLCBpZiBpdCBoYXMgb25lIG9mIG5vbi16ZXJvIHdpZHRoIGFuZCBoZWlnaHQuIFdlIGRvIHRoaXNcbiAqIHNvIHRoYXQgd2UgY2FuIHNhZmVseSByZW1vdmUgZW1wdHkgcmFua3Mgd2hpbGUgcHJlc2VydmluZyBiYWxhbmNlIGZvciB0aGVcbiAqIGxhYmVsJ3MgcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGluamVjdEVkZ2VMYWJlbFByb3hpZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLndpZHRoICYmIGVkZ2UuaGVpZ2h0KSB7XG4gICAgICB2YXIgdiA9IGcubm9kZShlLnYpO1xuICAgICAgdmFyIHcgPSBnLm5vZGUoZS53KTtcbiAgICAgIHZhciBsYWJlbCA9IHsgcmFuazogKHcucmFuayAtIHYucmFuaykgLyAyICsgdi5yYW5rLCBlOiBlIH07XG4gICAgICB1dGlsLmFkZER1bW15Tm9kZShnLCAnZWRnZS1wcm94eScsIGxhYmVsLCAnX2VwJyk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYXNzaWduUmFua01pbk1heChnKSB7XG4gIHZhciBtYXhSYW5rID0gMDtcbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgbm9kZSA9IGcubm9kZSh2KTtcbiAgICBpZiAobm9kZS5ib3JkZXJUb3ApIHtcbiAgICAgIG5vZGUubWluUmFuayA9IGcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztcbiAgICAgIG5vZGUubWF4UmFuayA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSkucmFuaztcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIG1heFJhbmsgPSBfLm1heChtYXhSYW5rLCBub2RlLm1heFJhbmspO1xuICAgIH1cbiAgfSk7XG4gIGcuZ3JhcGgoKS5tYXhSYW5rID0gbWF4UmFuaztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKSB7XG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgaWYgKG5vZGUuZHVtbXkgPT09ICdlZGdlLXByb3h5Jykge1xuICAgICAgZy5lZGdlKG5vZGUuZSkubGFiZWxSYW5rID0gbm9kZS5yYW5rO1xuICAgICAgZy5yZW1vdmVOb2RlKHYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUdyYXBoKGcpIHtcbiAgdmFyIG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtYXhYID0gMDtcbiAgdmFyIG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIHZhciBtYXhZID0gMDtcbiAgdmFyIGdyYXBoTGFiZWwgPSBnLmdyYXBoKCk7XG4gIHZhciBtYXJnaW5YID0gZ3JhcGhMYWJlbC5tYXJnaW54IHx8IDA7XG4gIHZhciBtYXJnaW5ZID0gZ3JhcGhMYWJlbC5tYXJnaW55IHx8IDA7XG5cbiAgZnVuY3Rpb24gZ2V0RXh0cmVtZXMoYXR0cnMpIHtcbiAgICB2YXIgeCA9IGF0dHJzLng7XG4gICAgdmFyIHkgPSBhdHRycy55O1xuICAgIHZhciB3ID0gYXR0cnMud2lkdGg7XG4gICAgdmFyIGggPSBhdHRycy5oZWlnaHQ7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHggLSB3IC8gMik7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHggKyB3IC8gMik7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHkgLSBoIC8gMik7XG4gICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkgKyBoIC8gMik7XG4gIH1cblxuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGdldEV4dHJlbWVzKGcubm9kZSh2KSk7XG4gIH0pO1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChfLmhhcyhlZGdlLCAneCcpKSB7XG4gICAgICBnZXRFeHRyZW1lcyhlZGdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIG1pblggLT0gbWFyZ2luWDtcbiAgbWluWSAtPSBtYXJnaW5ZO1xuXG4gIF8uZm9yRWFjaChnLm5vZGVzKCksIGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgbm9kZS54IC09IG1pblg7XG4gICAgbm9kZS55IC09IG1pblk7XG4gIH0pO1xuXG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgXy5mb3JFYWNoKGVkZ2UucG9pbnRzLCBmdW5jdGlvbiAocCkge1xuICAgICAgcC54IC09IG1pblg7XG4gICAgICBwLnkgLT0gbWluWTtcbiAgICB9KTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgZWRnZS54IC09IG1pblg7XG4gICAgfVxuICAgIGlmIChfLmhhcyhlZGdlLCAneScpKSB7XG4gICAgICBlZGdlLnkgLT0gbWluWTtcbiAgICB9XG4gIH0pO1xuXG4gIGdyYXBoTGFiZWwud2lkdGggPSBtYXhYIC0gbWluWCArIG1hcmdpblg7XG4gIGdyYXBoTGFiZWwuaGVpZ2h0ID0gbWF4WSAtIG1pblkgKyBtYXJnaW5ZO1xufVxuXG5mdW5jdGlvbiBhc3NpZ25Ob2RlSW50ZXJzZWN0cyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIGVkZ2UgPSBnLmVkZ2UoZSk7XG4gICAgdmFyIG5vZGVWID0gZy5ub2RlKGUudik7XG4gICAgdmFyIG5vZGVXID0gZy5ub2RlKGUudyk7XG4gICAgdmFyIHAxLCBwMjtcbiAgICBpZiAoIWVkZ2UucG9pbnRzKSB7XG4gICAgICBlZGdlLnBvaW50cyA9IFtdO1xuICAgICAgcDEgPSBub2RlVztcbiAgICAgIHAyID0gbm9kZVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAxID0gZWRnZS5wb2ludHNbMF07XG4gICAgICBwMiA9IGVkZ2UucG9pbnRzW2VkZ2UucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBlZGdlLnBvaW50cy51bnNoaWZ0KHV0aWwuaW50ZXJzZWN0UmVjdChub2RlViwgcDEpKTtcbiAgICBlZGdlLnBvaW50cy5wdXNoKHV0aWwuaW50ZXJzZWN0UmVjdChub2RlVywgcDIpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpeHVwRWRnZUxhYmVsQ29vcmRzKGcpIHtcbiAgXy5mb3JFYWNoKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZSA9IGcuZWRnZShlKTtcbiAgICBpZiAoXy5oYXMoZWRnZSwgJ3gnKSkge1xuICAgICAgaWYgKGVkZ2UubGFiZWxwb3MgPT09ICdsJyB8fCBlZGdlLmxhYmVscG9zID09PSAncicpIHtcbiAgICAgICAgZWRnZS53aWR0aCAtPSBlZGdlLmxhYmVsb2Zmc2V0O1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlZGdlLmxhYmVscG9zKSB7XG4gICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgIGVkZ2UueCAtPSBlZGdlLndpZHRoIC8gMiArIGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3InOlxuICAgICAgICAgIGVkZ2UueCArPSBlZGdlLndpZHRoIC8gMiArIGVkZ2UubGFiZWxvZmZzZXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5lZGdlcygpLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBlZGdlID0gZy5lZGdlKGUpO1xuICAgIGlmIChlZGdlLnJldmVyc2VkKSB7XG4gICAgICBlZGdlLnBvaW50cy5yZXZlcnNlKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQm9yZGVyTm9kZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIGlmIChnLmNoaWxkcmVuKHYpLmxlbmd0aCkge1xuICAgICAgdmFyIG5vZGUgPSBnLm5vZGUodik7XG4gICAgICB2YXIgdCA9IGcubm9kZShub2RlLmJvcmRlclRvcCk7XG4gICAgICB2YXIgYiA9IGcubm9kZShub2RlLmJvcmRlckJvdHRvbSk7XG4gICAgICB2YXIgbCA9IGcubm9kZShfLmxhc3Qobm9kZS5ib3JkZXJMZWZ0KSk7XG4gICAgICB2YXIgciA9IGcubm9kZShfLmxhc3Qobm9kZS5ib3JkZXJSaWdodCkpO1xuXG4gICAgICBub2RlLndpZHRoID0gTWF0aC5hYnMoci54IC0gbC54KTtcbiAgICAgIG5vZGUuaGVpZ2h0ID0gTWF0aC5hYnMoYi55IC0gdC55KTtcbiAgICAgIG5vZGUueCA9IGwueCArIG5vZGUud2lkdGggLyAyO1xuICAgICAgbm9kZS55ID0gdC55ICsgbm9kZS5oZWlnaHQgLyAyO1xuICAgIH1cbiAgfSk7XG5cbiAgXy5mb3JFYWNoKGcubm9kZXMoKSwgZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoZy5ub2RlKHYpLmR1bW15ID09PSAnYm9yZGVyJykge1xuICAgICAgZy5yZW1vdmVOb2RlKHYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlbGZFZGdlcyhnKSB7XG4gIF8uZm9yRWFjaChnLmVkZ2VzKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUudiA9PT0gZS53KSB7XG4gICAgICB2YXIgbm9kZSA9IGcubm9kZShlLnYpO1xuICAgICAgaWYgKCFub2RlLnNlbGZFZGdlcykge1xuICAgICAgICBub2RlLnNlbGZFZGdlcyA9IFtdO1xuICAgICAgfVxuICAgICAgbm9kZS5zZWxmRWRnZXMucHVzaCh7IGU6IGUsIGxhYmVsOiBnLmVkZ2UoZSkgfSk7XG4gICAgICBnLnJlbW92ZUVkZ2UoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U2VsZkVkZ2VzKGcpIHtcbiAgdmFyIGxheWVycyA9IHV0aWwuYnVpbGRMYXllck1hdHJpeChnKTtcbiAgXy5mb3JFYWNoKGxheWVycywgZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgdmFyIG9yZGVyU2hpZnQgPSAwO1xuICAgIF8uZm9yRWFjaChsYXllciwgZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgICAgbm9kZS5vcmRlciA9IGkgKyBvcmRlclNoaWZ0O1xuICAgICAgXy5mb3JFYWNoKG5vZGUuc2VsZkVkZ2VzLCBmdW5jdGlvbiAoc2VsZkVkZ2UpIHtcbiAgICAgICAgdXRpbC5hZGREdW1teU5vZGUoXG4gICAgICAgICAgZyxcbiAgICAgICAgICAnc2VsZmVkZ2UnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdpZHRoOiBzZWxmRWRnZS5sYWJlbC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogc2VsZkVkZ2UubGFiZWwuaGVpZ2h0LFxuICAgICAgICAgICAgcmFuazogbm9kZS5yYW5rLFxuICAgICAgICAgICAgb3JkZXI6IGkgKyArK29yZGVyU2hpZnQsXG4gICAgICAgICAgICBlOiBzZWxmRWRnZS5lLFxuICAgICAgICAgICAgbGFiZWw6IHNlbGZFZGdlLmxhYmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ19zZSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIG5vZGUuc2VsZkVkZ2VzO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZykge1xuICBfLmZvckVhY2goZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlID0gZy5ub2RlKHYpO1xuICAgIGlmIChub2RlLmR1bW15ID09PSAnc2VsZmVkZ2UnKSB7XG4gICAgICB2YXIgc2VsZk5vZGUgPSBnLm5vZGUobm9kZS5lLnYpO1xuICAgICAgdmFyIHggPSBzZWxmTm9kZS54ICsgc2VsZk5vZGUud2lkdGggLyAyO1xuICAgICAgdmFyIHkgPSBzZWxmTm9kZS55O1xuICAgICAgdmFyIGR4ID0gbm9kZS54IC0geDtcbiAgICAgIHZhciBkeSA9IHNlbGZOb2RlLmhlaWdodCAvIDI7XG4gICAgICBnLnNldEVkZ2Uobm9kZS5lLCBub2RlLmxhYmVsKTtcbiAgICAgIGcucmVtb3ZlTm9kZSh2KTtcbiAgICAgIG5vZGUubGFiZWwucG9pbnRzID0gW1xuICAgICAgICB7IHg6IHggKyAoMiAqIGR4KSAvIDMsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyAoNSAqIGR4KSAvIDYsIHk6IHkgLSBkeSB9LFxuICAgICAgICB7IHg6IHggKyBkeCwgeTogeSB9LFxuICAgICAgICB7IHg6IHggKyAoNSAqIGR4KSAvIDYsIHk6IHkgKyBkeSB9LFxuICAgICAgICB7IHg6IHggKyAoMiAqIGR4KSAvIDMsIHk6IHkgKyBkeSB9LFxuICAgICAgXTtcbiAgICAgIG5vZGUubGFiZWwueCA9IG5vZGUueDtcbiAgICAgIG5vZGUubGFiZWwueSA9IG5vZGUueTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosIGF0dHJzKSB7XG4gIHJldHVybiBfLm1hcFZhbHVlcyhfLnBpY2sob2JqLCBhdHRycyksIE51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZShhdHRycykge1xuICB2YXIgbmV3QXR0cnMgPSB7fTtcbiAgXy5mb3JFYWNoKGF0dHJzLCBmdW5jdGlvbiAodiwgaykge1xuICAgIG5ld0F0dHJzW2sudG9Mb3dlckNhc2UoKV0gPSB2O1xuICB9KTtcbiAgcmV0dXJuIG5ld0F0dHJzO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBhY3ljbGljIGZyb20gJy4vYWN5Y2xpYy5qcyc7XG5pbXBvcnQgeyBsYXlvdXQgfSBmcm9tICcuL2xheW91dC5qcyc7XG5pbXBvcnQgKiBhcyBub3JtYWxpemUgZnJvbSAnLi9ub3JtYWxpemUuanMnO1xuaW1wb3J0IHsgcmFuayB9IGZyb20gJy4vcmFuay9pbmRleC5qcyc7XG5cbmV4cG9ydCB7IGFjeWNsaWMsIG5vcm1hbGl6ZSwgcmFuaywgbGF5b3V0IH07XG4iLAogICAgImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi9ncmFwaC5qcyc7XG5cbmV4cG9ydCB7IHdyaXRlLCByZWFkIH07XG5cbmZ1bmN0aW9uIHdyaXRlKGcpIHtcbiAgdmFyIGpzb24gPSB7XG4gICAgb3B0aW9uczoge1xuICAgICAgZGlyZWN0ZWQ6IGcuaXNEaXJlY3RlZCgpLFxuICAgICAgbXVsdGlncmFwaDogZy5pc011bHRpZ3JhcGgoKSxcbiAgICAgIGNvbXBvdW5kOiBnLmlzQ29tcG91bmQoKSxcbiAgICB9LFxuICAgIG5vZGVzOiB3cml0ZU5vZGVzKGcpLFxuICAgIGVkZ2VzOiB3cml0ZUVkZ2VzKGcpLFxuICB9O1xuICBpZiAoIV8uaXNVbmRlZmluZWQoZy5ncmFwaCgpKSkge1xuICAgIGpzb24udmFsdWUgPSBfLmNsb25lKGcuZ3JhcGgoKSk7XG4gIH1cbiAgcmV0dXJuIGpzb247XG59XG5cbmZ1bmN0aW9uIHdyaXRlTm9kZXMoZykge1xuICByZXR1cm4gXy5tYXAoZy5ub2RlcygpLCBmdW5jdGlvbiAodikge1xuICAgIHZhciBub2RlVmFsdWUgPSBnLm5vZGUodik7XG4gICAgdmFyIHBhcmVudCA9IGcucGFyZW50KHYpO1xuICAgIHZhciBub2RlID0geyB2OiB2IH07XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKG5vZGVWYWx1ZSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSBub2RlVmFsdWU7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJlbnQpKSB7XG4gICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZUVkZ2VzKGcpIHtcbiAgcmV0dXJuIF8ubWFwKGcuZWRnZXMoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZWRnZVZhbHVlID0gZy5lZGdlKGUpO1xuICAgIHZhciBlZGdlID0geyB2OiBlLnYsIHc6IGUudyB9O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlLm5hbWUpKSB7XG4gICAgICBlZGdlLm5hbWUgPSBlLm5hbWU7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChlZGdlVmFsdWUpKSB7XG4gICAgICBlZGdlLnZhbHVlID0gZWRnZVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWQoanNvbikge1xuICB2YXIgZyA9IG5ldyBHcmFwaChqc29uLm9wdGlvbnMpLnNldEdyYXBoKGpzb24udmFsdWUpO1xuICBfLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgZy5zZXROb2RlKGVudHJ5LnYsIGVudHJ5LnZhbHVlKTtcbiAgICBpZiAoZW50cnkucGFyZW50KSB7XG4gICAgICBnLnNldFBhcmVudChlbnRyeS52LCBlbnRyeS5wYXJlbnQpO1xuICAgIH1cbiAgfSk7XG4gIF8uZWFjaChqc29uLmVkZ2VzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICBnLnNldEVkZ2UoeyB2OiBlbnRyeS52LCB3OiBlbnRyeS53LCBuYW1lOiBlbnRyeS5uYW1lIH0sIGVudHJ5LnZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBnO1xufVxuIiwKICAgICJpbXBvcnQge1xuICBjbGVhcixcbiAgY2xlYXIyLFxuICBjbGVhcjMsXG4gIGluc2VydENsdXN0ZXIsXG4gIGluc2VydEVkZ2UsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgaW5zZXJ0Tm9kZSxcbiAgbWFya2Vyc19kZWZhdWx0LFxuICBwb3NpdGlvbkVkZ2VMYWJlbCxcbiAgcG9zaXRpb25Ob2RlLFxuICBzZXROb2RlRWxlbSxcbiAgdXBkYXRlTm9kZUJvdW5kc1xufSBmcm9tIFwiLi9jaHVuay1ST0tZVVZDVS5tanNcIjtcbmltcG9ydCB7XG4gIGdldFN1YkdyYXBoVGl0bGVNYXJnaW5zXG59IGZyb20gXCIuL2NodW5rLTIzQVRNWlhWLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2dcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9sYXlvdXQtYWxnb3JpdGhtcy9kYWdyZS9pbmRleC5qc1xuaW1wb3J0IHsgbGF5b3V0IGFzIGRhZ3JlTGF5b3V0IH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWJKc29uMiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2pzb24uanNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliMiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9sYXlvdXQtYWxnb3JpdGhtcy9kYWdyZS9tZXJtYWlkLWdyYXBobGliLmpzXG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG52YXIgY2x1c3RlckRiID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBkZXNjZW5kYW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcGFyZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgY2xlYXI0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRlc2NlbmRhbnRzLmNsZWFyKCk7XG4gIHBhcmVudHMuY2xlYXIoKTtcbiAgY2x1c3RlckRiLmNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIGlzRGVzY2VuZGFudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkLCBhbmNlc3RvcklkKSA9PiB7XG4gIGNvbnN0IGFuY2VzdG9yRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50cy5nZXQoYW5jZXN0b3JJZCkgfHwgW107XG4gIGxvZy50cmFjZShcIkluIGlzRGVzY2VuZGFudFwiLCBhbmNlc3RvcklkLCBcIiBcIiwgaWQsIFwiID0gXCIsIGFuY2VzdG9yRGVzY2VuZGFudHMuaW5jbHVkZXMoaWQpKTtcbiAgcmV0dXJuIGFuY2VzdG9yRGVzY2VuZGFudHMuaW5jbHVkZXMoaWQpO1xufSwgXCJpc0Rlc2NlbmRhbnRcIik7XG52YXIgZWRnZUluQ2x1c3RlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVkZ2UsIGNsdXN0ZXJJZCkgPT4ge1xuICBjb25zdCBjbHVzdGVyRGVzY2VuZGFudHMgPSBkZXNjZW5kYW50cy5nZXQoY2x1c3RlcklkKSB8fCBbXTtcbiAgbG9nLmluZm8oXCJEZXNjZW5kYW50cyBvZiBcIiwgY2x1c3RlcklkLCBcIiBpcyBcIiwgY2x1c3RlckRlc2NlbmRhbnRzKTtcbiAgbG9nLmluZm8oXCJFZGdlIGlzIFwiLCBlZGdlKTtcbiAgaWYgKGVkZ2UudiA9PT0gY2x1c3RlcklkIHx8IGVkZ2UudyA9PT0gY2x1c3RlcklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghY2x1c3RlckRlc2NlbmRhbnRzKSB7XG4gICAgbG9nLmRlYnVnKFwiVGlsdCwgXCIsIGNsdXN0ZXJJZCwgXCIsbm90IGluIGRlc2NlbmRhbnRzXCIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY2x1c3RlckRlc2NlbmRhbnRzLmluY2x1ZGVzKGVkZ2UudikgfHwgaXNEZXNjZW5kYW50KGVkZ2UudiwgY2x1c3RlcklkKSB8fCBpc0Rlc2NlbmRhbnQoZWRnZS53LCBjbHVzdGVySWQpIHx8IGNsdXN0ZXJEZXNjZW5kYW50cy5pbmNsdWRlcyhlZGdlLncpO1xufSwgXCJlZGdlSW5DbHVzdGVyXCIpO1xudmFyIGNvcHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbHVzdGVySWQsIGdyYXBoLCBuZXdHcmFwaCwgcm9vdElkKSA9PiB7XG4gIGxvZy53YXJuKFxuICAgIFwiQ29weWluZyBjaGlsZHJlbiBvZiBcIixcbiAgICBjbHVzdGVySWQsXG4gICAgXCJyb290XCIsXG4gICAgcm9vdElkLFxuICAgIFwiZGF0YVwiLFxuICAgIGdyYXBoLm5vZGUoY2x1c3RlcklkKSxcbiAgICByb290SWRcbiAgKTtcbiAgY29uc3Qgbm9kZXMgPSBncmFwaC5jaGlsZHJlbihjbHVzdGVySWQpIHx8IFtdO1xuICBpZiAoY2x1c3RlcklkICE9PSByb290SWQpIHtcbiAgICBub2Rlcy5wdXNoKGNsdXN0ZXJJZCk7XG4gIH1cbiAgbG9nLndhcm4oXCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkXCIsIGNsdXN0ZXJJZCwgXCJub2Rlc1wiLCBub2Rlcyk7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBpZiAoZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgY29weShub2RlLCBncmFwaCwgbmV3R3JhcGgsIHJvb3RJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBncmFwaC5ub2RlKG5vZGUpO1xuICAgICAgbG9nLmluZm8oXCJjcCBcIiwgbm9kZSwgXCIgdG8gXCIsIHJvb3RJZCwgXCIgd2l0aCBwYXJlbnQgXCIsIGNsdXN0ZXJJZCk7XG4gICAgICBuZXdHcmFwaC5zZXROb2RlKG5vZGUsIGRhdGEpO1xuICAgICAgaWYgKHJvb3RJZCAhPT0gZ3JhcGgucGFyZW50KG5vZGUpKSB7XG4gICAgICAgIGxvZy53YXJuKFwiU2V0dGluZyBwYXJlbnRcIiwgbm9kZSwgZ3JhcGgucGFyZW50KG5vZGUpKTtcbiAgICAgICAgbmV3R3JhcGguc2V0UGFyZW50KG5vZGUsIGdyYXBoLnBhcmVudChub2RlKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2x1c3RlcklkICE9PSByb290SWQgJiYgbm9kZSAhPT0gY2x1c3RlcklkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlNldHRpbmcgcGFyZW50XCIsIG5vZGUsIGNsdXN0ZXJJZCk7XG4gICAgICAgIG5ld0dyYXBoLnNldFBhcmVudChub2RlLCBjbHVzdGVySWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oXCJJbiBjb3B5IFwiLCBjbHVzdGVySWQsIFwicm9vdFwiLCByb290SWQsIFwiZGF0YVwiLCBncmFwaC5ub2RlKGNsdXN0ZXJJZCksIHJvb3RJZCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBcIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT1cIixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIFwiY2x1c3RlciE9PXJvb3RJZFwiLFxuICAgICAgICAgIGNsdXN0ZXJJZCAhPT0gcm9vdElkLFxuICAgICAgICAgIFwibm9kZSE9PWNsdXN0ZXJJZFwiLFxuICAgICAgICAgIG5vZGUgIT09IGNsdXN0ZXJJZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZWRnZXMgPSBncmFwaC5lZGdlcyhub2RlKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNvcHlpbmcgRWRnZXNcIiwgZWRnZXMpO1xuICAgICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhcIkVkZ2VcIiwgZWRnZSk7XG4gICAgICAgIGNvbnN0IGRhdGEyID0gZ3JhcGguZWRnZShlZGdlLnYsIGVkZ2UudywgZWRnZS5uYW1lKTtcbiAgICAgICAgbG9nLmluZm8oXCJFZGdlIGRhdGFcIiwgZGF0YTIsIHJvb3RJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVkZ2VJbkNsdXN0ZXIoZWRnZSwgcm9vdElkKSkge1xuICAgICAgICAgICAgbG9nLmluZm8oXCJDb3B5aW5nIGFzIFwiLCBlZGdlLnYsIGVkZ2UudywgZGF0YTIsIGVkZ2UubmFtZSk7XG4gICAgICAgICAgICBuZXdHcmFwaC5zZXRFZGdlKGVkZ2UudiwgZWRnZS53LCBkYXRhMiwgZWRnZS5uYW1lKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwibmV3R3JhcGggZWRnZXMgXCIsIG5ld0dyYXBoLmVkZ2VzKCksIG5ld0dyYXBoLmVkZ2UobmV3R3JhcGguZWRnZXMoKVswXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgICAgXCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgXCIsXG4gICAgICAgICAgICAgIGVkZ2UudixcbiAgICAgICAgICAgICAgXCItLT5cIixcbiAgICAgICAgICAgICAgZWRnZS53LFxuICAgICAgICAgICAgICBcIiByb290SWQ6IFwiLFxuICAgICAgICAgICAgICByb290SWQsXG4gICAgICAgICAgICAgIFwiIGNsdXN0ZXJJZDpcIixcbiAgICAgICAgICAgICAgY2x1c3RlcklkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcIlJlbW92aW5nIG5vZGVcIiwgbm9kZSk7XG4gICAgZ3JhcGgucmVtb3ZlTm9kZShub2RlKTtcbiAgfSk7XG59LCBcImNvcHlcIik7XG52YXIgZXh0cmFjdERlc2NlbmRhbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQsIGdyYXBoKSA9PiB7XG4gIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICBsZXQgcmVzID0gWy4uLmNoaWxkcmVuXTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHBhcmVudHMuc2V0KGNoaWxkLCBpZCk7XG4gICAgcmVzID0gWy4uLnJlcywgLi4uZXh0cmFjdERlc2NlbmRhbnRzKGNoaWxkLCBncmFwaCldO1xuICB9XG4gIHJldHVybiByZXM7XG59LCBcImV4dHJhY3REZXNjZW5kYW50c1wiKTtcbnZhciBmaW5kQ29tbW9uRWRnZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChncmFwaCwgaWQxLCBpZDIpID0+IHtcbiAgY29uc3QgZWRnZXMxID0gZ3JhcGguZWRnZXMoKS5maWx0ZXIoKGVkZ2UpID0+IGVkZ2UudiA9PT0gaWQxIHx8IGVkZ2UudyA9PT0gaWQxKTtcbiAgY29uc3QgZWRnZXMyID0gZ3JhcGguZWRnZXMoKS5maWx0ZXIoKGVkZ2UpID0+IGVkZ2UudiA9PT0gaWQyIHx8IGVkZ2UudyA9PT0gaWQyKTtcbiAgY29uc3QgZWRnZXMxUHJpbSA9IGVkZ2VzMS5tYXAoKGVkZ2UpID0+IHtcbiAgICByZXR1cm4geyB2OiBlZGdlLnYgPT09IGlkMSA/IGlkMiA6IGVkZ2UudiwgdzogZWRnZS53ID09PSBpZDEgPyBpZDEgOiBlZGdlLncgfTtcbiAgfSk7XG4gIGNvbnN0IGVkZ2VzMlByaW0gPSBlZGdlczIubWFwKChlZGdlKSA9PiB7XG4gICAgcmV0dXJuIHsgdjogZWRnZS52LCB3OiBlZGdlLncgfTtcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGVkZ2VzMVByaW0uZmlsdGVyKChlZGdlSW4xKSA9PiB7XG4gICAgcmV0dXJuIGVkZ2VzMlByaW0uc29tZSgoZWRnZSkgPT4gZWRnZUluMS52ID09PSBlZGdlLnYgJiYgZWRnZUluMS53ID09PSBlZGdlLncpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sIFwiZmluZENvbW1vbkVkZ2VzXCIpO1xudmFyIGZpbmROb25DbHVzdGVyQ2hpbGQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgZ3JhcGgsIGNsdXN0ZXJJZCkgPT4ge1xuICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKGlkKTtcbiAgbG9nLnRyYWNlKFwiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkIFwiLCBpZCwgY2hpbGRyZW4pO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBsZXQgcmVzZXJ2ZTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGNvbnN0IF9pZCA9IGZpbmROb25DbHVzdGVyQ2hpbGQoY2hpbGQsIGdyYXBoLCBjbHVzdGVySWQpO1xuICAgIGNvbnN0IGNvbW1vbkVkZ2VzID0gZmluZENvbW1vbkVkZ2VzKGdyYXBoLCBjbHVzdGVySWQsIF9pZCk7XG4gICAgaWYgKF9pZCkge1xuICAgICAgaWYgKGNvbW1vbkVkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzZXJ2ZSA9IF9pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfaWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNlcnZlO1xufSwgXCJmaW5kTm9uQ2x1c3RlckNoaWxkXCIpO1xudmFyIGdldEFuY2hvcklkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQpID0+IHtcbiAgaWYgKCFjbHVzdGVyRGIuaGFzKGlkKSkge1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBpZiAoIWNsdXN0ZXJEYi5nZXQoaWQpLmV4dGVybmFsQ29ubmVjdGlvbnMpIHtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgaWYgKGNsdXN0ZXJEYi5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJEYi5nZXQoaWQpLmlkO1xuICB9XG4gIHJldHVybiBpZDtcbn0sIFwiZ2V0QW5jaG9ySWRcIik7XG52YXIgYWRqdXN0Q2x1c3RlcnNBbmRFZGdlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGdyYXBoLCBkZXB0aCkgPT4ge1xuICBpZiAoIWdyYXBoIHx8IGRlcHRoID4gMTApIHtcbiAgICBsb2cuZGVidWcoXCJPcHRpbmcgb3V0LCBubyBncmFwaCBcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhcIk9wdGluZyBpbiwgZ3JhcGggXCIpO1xuICB9XG4gIGdyYXBoLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgXCJDbHVzdGVyIGlkZW50aWZpZWRcIixcbiAgICAgICAgaWQsXG4gICAgICAgIFwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiBcIixcbiAgICAgICAgZmluZE5vbkNsdXN0ZXJDaGlsZChpZCwgZ3JhcGgsIGlkKVxuICAgICAgKTtcbiAgICAgIGRlc2NlbmRhbnRzLnNldChpZCwgZXh0cmFjdERlc2NlbmRhbnRzKGlkLCBncmFwaCkpO1xuICAgICAgY2x1c3RlckRiLnNldChpZCwgeyBpZDogZmluZE5vbkNsdXN0ZXJDaGlsZChpZCwgZ3JhcGgsIGlkKSwgY2x1c3RlckRhdGE6IGdyYXBoLm5vZGUoaWQpIH0pO1xuICAgIH1cbiAgfSk7XG4gIGdyYXBoLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICAgIGNvbnN0IGVkZ2VzID0gZ3JhcGguZWRnZXMoKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLmRlYnVnKFwiQ2x1c3RlciBpZGVudGlmaWVkXCIsIGlkLCBkZXNjZW5kYW50cyk7XG4gICAgICBlZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGQxID0gaXNEZXNjZW5kYW50KGVkZ2UudiwgaWQpO1xuICAgICAgICBjb25zdCBkMiA9IGlzRGVzY2VuZGFudChlZGdlLncsIGlkKTtcbiAgICAgICAgaWYgKGQxIF4gZDIpIHtcbiAgICAgICAgICBsb2cud2FybihcIkVkZ2U6IFwiLCBlZGdlLCBcIiBsZWF2ZXMgY2x1c3RlciBcIiwgaWQpO1xuICAgICAgICAgIGxvZy53YXJuKFwiRGVzY2VuZGFudHMgb2YgWFhYIFwiLCBpZCwgXCI6IFwiLCBkZXNjZW5kYW50cy5nZXQoaWQpKTtcbiAgICAgICAgICBjbHVzdGVyRGIuZ2V0KGlkKS5leHRlcm5hbENvbm5lY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vdCBhIGNsdXN0ZXIgXCIsIGlkLCBkZXNjZW5kYW50cyk7XG4gICAgfVxuICB9KTtcbiAgZm9yIChsZXQgaWQgb2YgY2x1c3RlckRiLmtleXMoKSkge1xuICAgIGNvbnN0IG5vbkNsdXN0ZXJDaGlsZCA9IGNsdXN0ZXJEYi5nZXQoaWQpLmlkO1xuICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudChub25DbHVzdGVyQ2hpbGQpO1xuICAgIGlmIChwYXJlbnQgIT09IGlkICYmIGNsdXN0ZXJEYi5oYXMocGFyZW50KSAmJiAhY2x1c3RlckRiLmdldChwYXJlbnQpLmV4dGVybmFsQ29ubmVjdGlvbnMpIHtcbiAgICAgIGNsdXN0ZXJEYi5nZXQoaWQpLmlkID0gcGFyZW50O1xuICAgIH1cbiAgfVxuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgIGxldCB2ID0gZS52O1xuICAgIGxldCB3ID0gZS53O1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJGaXggWFhYXCIsXG4gICAgICBjbHVzdGVyRGIsXG4gICAgICBcImlkczpcIixcbiAgICAgIGUudixcbiAgICAgIGUudyxcbiAgICAgIFwiVHJhbnNsYXRpbmc6IFwiLFxuICAgICAgY2x1c3RlckRiLmdldChlLnYpLFxuICAgICAgXCIgLS0tIFwiLFxuICAgICAgY2x1c3RlckRiLmdldChlLncpXG4gICAgKTtcbiAgICBpZiAoY2x1c3RlckRiLmdldChlLnYpIHx8IGNsdXN0ZXJEYi5nZXQoZS53KSkge1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyeWluZyAtIHJlbW92aW5nIFhYWFwiLCBlLnYsIGUudywgZS5uYW1lKTtcbiAgICAgIHYgPSBnZXRBbmNob3JJZChlLnYpO1xuICAgICAgdyA9IGdldEFuY2hvcklkKGUudyk7XG4gICAgICBncmFwaC5yZW1vdmVFZGdlKGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgaWYgKHYgIT09IGUudikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBncmFwaC5wYXJlbnQodik7XG4gICAgICAgIGNsdXN0ZXJEYi5nZXQocGFyZW50KS5leHRlcm5hbENvbm5lY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgZWRnZS5mcm9tQ2x1c3RlciA9IGUudjtcbiAgICAgIH1cbiAgICAgIGlmICh3ICE9PSBlLncpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ3JhcGgucGFyZW50KHcpO1xuICAgICAgICBjbHVzdGVyRGIuZ2V0KHBhcmVudCkuZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIGVkZ2UudG9DbHVzdGVyID0gZS53O1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oXCJGaXggUmVwbGFjaW5nIHdpdGggWFhYXCIsIHYsIHcsIGUubmFtZSk7XG4gICAgICBncmFwaC5zZXRFZGdlKHYsIHcsIGVkZ2UsIGUubmFtZSk7XG4gICAgfVxuICB9KTtcbiAgbG9nLndhcm4oXCJBZGp1c3RlZCBHcmFwaFwiLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpKTtcbiAgZXh0cmFjdG9yKGdyYXBoLCAwKTtcbiAgbG9nLnRyYWNlKGNsdXN0ZXJEYik7XG59LCBcImFkanVzdENsdXN0ZXJzQW5kRWRnZXNcIik7XG52YXIgZXh0cmFjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIGRlcHRoKSA9PiB7XG4gIGxvZy53YXJuKFwiZXh0cmFjdG9yIC0gXCIsIGRlcHRoLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpLCBncmFwaC5jaGlsZHJlbihcIkRcIikpO1xuICBpZiAoZGVwdGggPiAxMCkge1xuICAgIGxvZy5lcnJvcihcIkJhaWxpbmcgb3V0XCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbm9kZXMgPSBncmFwaC5ub2RlcygpO1xuICBsZXQgaGFzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihub2RlKTtcbiAgICBoYXNDaGlsZHJlbiA9IGhhc0NoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gIH1cbiAgaWYgKCFoYXNDaGlsZHJlbikge1xuICAgIGxvZy5kZWJ1ZyhcIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuXCIsIGdyYXBoLm5vZGVzKCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2cuZGVidWcoXCJOb2RlcyA9IFwiLCBub2RlcywgZGVwdGgpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcIkV4dHJhY3Rpbmcgbm9kZVwiLFxuICAgICAgbm9kZSxcbiAgICAgIGNsdXN0ZXJEYixcbiAgICAgIGNsdXN0ZXJEYi5oYXMobm9kZSkgJiYgIWNsdXN0ZXJEYi5nZXQobm9kZSkuZXh0ZXJuYWxDb25uZWN0aW9ucyxcbiAgICAgICFncmFwaC5wYXJlbnQobm9kZSksXG4gICAgICBncmFwaC5ub2RlKG5vZGUpLFxuICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgXCIgRGVwdGggXCIsXG4gICAgICBkZXB0aFxuICAgICk7XG4gICAgaWYgKCFjbHVzdGVyRGIuaGFzKG5vZGUpKSB7XG4gICAgICBsb2cuZGVidWcoXCJOb3QgYSBjbHVzdGVyXCIsIG5vZGUsIGRlcHRoKTtcbiAgICB9IGVsc2UgaWYgKCFjbHVzdGVyRGIuZ2V0KG5vZGUpLmV4dGVybmFsQ29ubmVjdGlvbnMgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGRlcHRoXG4gICAgICApO1xuICAgICAgY29uc3QgZ3JhcGhTZXR0aW5ncyA9IGdyYXBoLmdyYXBoKCk7XG4gICAgICBsZXQgZGlyID0gZ3JhcGhTZXR0aW5ncy5yYW5rZGlyID09PSBcIlRCXCIgPyBcIkxSXCIgOiBcIlRCXCI7XG4gICAgICBpZiAoY2x1c3RlckRiLmdldChub2RlKT8uY2x1c3RlckRhdGE/LmRpcikge1xuICAgICAgICBkaXIgPSBjbHVzdGVyRGIuZ2V0KG5vZGUpLmNsdXN0ZXJEYXRhLmRpcjtcbiAgICAgICAgbG9nLndhcm4oXCJGaXhpbmcgZGlyXCIsIGNsdXN0ZXJEYi5nZXQobm9kZSkuY2x1c3RlckRhdGEuZGlyLCBkaXIpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2x1c3RlckdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgICAgY29tcG91bmQ6IHRydWVcbiAgICAgIH0pLnNldEdyYXBoKHtcbiAgICAgICAgcmFua2RpcjogZGlyLFxuICAgICAgICBub2Rlc2VwOiA1MCxcbiAgICAgICAgcmFua3NlcDogNTAsXG4gICAgICAgIG1hcmdpbng6IDgsXG4gICAgICAgIG1hcmdpbnk6IDhcbiAgICAgIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuICAgICAgbG9nLndhcm4oXCJPbGQgZ3JhcGggYmVmb3JlIGNvcHlcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gICAgICBjb3B5KG5vZGUsIGdyYXBoLCBjbHVzdGVyR3JhcGgsIG5vZGUpO1xuICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLCB7XG4gICAgICAgIGNsdXN0ZXJOb2RlOiB0cnVlLFxuICAgICAgICBpZDogbm9kZSxcbiAgICAgICAgY2x1c3RlckRhdGE6IGNsdXN0ZXJEYi5nZXQobm9kZSkuY2x1c3RlckRhdGEsXG4gICAgICAgIGxhYmVsOiBjbHVzdGVyRGIuZ2V0KG5vZGUpLmxhYmVsLFxuICAgICAgICBncmFwaDogY2x1c3RlckdyYXBoXG4gICAgICB9KTtcbiAgICAgIGxvZy53YXJuKFwiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKFwiLCBub2RlLCBcIilcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGNsdXN0ZXJHcmFwaCkpO1xuICAgICAgbG9nLmRlYnVnKFwiT2xkIGdyYXBoIGFmdGVyIGNvcHlcIiwgZ3JhcGhsaWJKc29uLndyaXRlKGdyYXBoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBcIkNsdXN0ZXIgKiogXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIFwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOlwiLFxuICAgICAgICAhY2x1c3RlckRiLmdldChub2RlKS5leHRlcm5hbENvbm5lY3Rpb25zLFxuICAgICAgICBcIiBubyBwYXJlbnQ6IFwiLFxuICAgICAgICAhZ3JhcGgucGFyZW50KG5vZGUpLFxuICAgICAgICBcIiBjaGlsZHJlbiBcIixcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCxcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgICBkZXB0aFxuICAgICAgKTtcbiAgICAgIGxvZy5kZWJ1ZyhjbHVzdGVyRGIpO1xuICAgIH1cbiAgfVxuICBub2RlcyA9IGdyYXBoLm5vZGVzKCk7XG4gIGxvZy53YXJuKFwiTmV3IGxpc3Qgb2Ygbm9kZXNcIiwgbm9kZXMpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ3JhcGgubm9kZShub2RlKTtcbiAgICBsb2cud2FybihcIiBOb3cgbmV4dCBsZXZlbFwiLCBub2RlLCBkYXRhKTtcbiAgICBpZiAoZGF0YT8uY2x1c3Rlck5vZGUpIHtcbiAgICAgIGV4dHJhY3RvcihkYXRhLmdyYXBoLCBkZXB0aCArIDEpO1xuICAgIH1cbiAgfVxufSwgXCJleHRyYWN0b3JcIik7XG52YXIgc29ydGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIG5vZGVzKSA9PiB7XG4gIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oW10sIG5vZGVzKTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4obm9kZSk7XG4gICAgY29uc3Qgc29ydGVkID0gc29ydGVyKGdyYXBoLCBjaGlsZHJlbik7XG4gICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uc29ydGVkXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59LCBcInNvcnRlclwiKTtcbnZhciBzb3J0Tm9kZXNCeUhpZXJhcmNoeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGdyYXBoKSA9PiBzb3J0ZXIoZ3JhcGgsIGdyYXBoLmNoaWxkcmVuKCkpLCBcInNvcnROb2Rlc0J5SGllcmFyY2h5XCIpO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvbGF5b3V0LWFsZ29yaXRobXMvZGFncmUvaW5kZXguanNcbnZhciByZWN1cnNpdmVSZW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChfZWxlbSwgZ3JhcGgsIGRpYWdyYW1UeXBlLCBpZCwgcGFyZW50Q2x1c3Rlciwgc2l0ZUNvbmZpZykgPT4ge1xuICBsb2cud2FybihcIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6WEFYXCIsIGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpLCBwYXJlbnRDbHVzdGVyKTtcbiAgY29uc3QgZGlyID0gZ3JhcGguZ3JhcGgoKS5yYW5rZGlyO1xuICBsb2cudHJhY2UoXCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjpcIiwgZGlyKTtcbiAgY29uc3QgZWxlbSA9IF9lbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwicm9vdFwiKTtcbiAgaWYgKCFncmFwaC5ub2RlcygpKSB7XG4gICAgbG9nLmluZm8oXCJObyBub2RlcyBmb3VuZCBmb3JcIiwgZ3JhcGgpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIHJlbmRlciBYWFhcIiwgZ3JhcGgubm9kZXMoKSk7XG4gIH1cbiAgaWYgKGdyYXBoLmVkZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIGVkZ2VzXCIsIGdyYXBoLmVkZ2UoZ3JhcGguZWRnZXMoKVswXSkpO1xuICB9XG4gIGNvbnN0IGNsdXN0ZXJzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNsdXN0ZXJzXCIpO1xuICBjb25zdCBlZGdlUGF0aHMgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVBhdGhzXCIpO1xuICBjb25zdCBlZGdlTGFiZWxzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VMYWJlbHNcIik7XG4gIGNvbnN0IG5vZGVzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGVzXCIpO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBncmFwaC5ub2RlcygpLm1hcChhc3luYyBmdW5jdGlvbih2KSB7XG4gICAgICBjb25zdCBub2RlID0gZ3JhcGgubm9kZSh2KTtcbiAgICAgIGlmIChwYXJlbnRDbHVzdGVyICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFyZW50Q2x1c3Rlci5jbHVzdGVyRGF0YSkpO1xuICAgICAgICBsb2cudHJhY2UoXG4gICAgICAgICAgXCJTZXR0aW5nIGRhdGEgZm9yIHBhcmVudCBjbHVzdGVyIFhYWFxcbiBOb2RlLmlkID0gXCIsXG4gICAgICAgICAgdixcbiAgICAgICAgICBcIlxcbiBkYXRhPVwiLFxuICAgICAgICAgIGRhdGEuaGVpZ2h0LFxuICAgICAgICAgIFwiXFxuUGFyZW50IGNsdXN0ZXJcIixcbiAgICAgICAgICBwYXJlbnRDbHVzdGVyLmhlaWdodFxuICAgICAgICApO1xuICAgICAgICBncmFwaC5zZXROb2RlKHBhcmVudENsdXN0ZXIuaWQsIGRhdGEpO1xuICAgICAgICBpZiAoIWdyYXBoLnBhcmVudCh2KSkge1xuICAgICAgICAgIGxvZy50cmFjZShcIlNldHRpbmcgcGFyZW50XCIsIHYsIHBhcmVudENsdXN0ZXIuaWQpO1xuICAgICAgICAgIGdyYXBoLnNldFBhcmVudCh2LCBwYXJlbnRDbHVzdGVyLmlkLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLmluZm8oXCIoSW5zZXJ0KSBOb2RlIFhYWFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLm5vZGUodikpKTtcbiAgICAgIGlmIChub2RlPy5jbHVzdGVyTm9kZSkge1xuICAgICAgICBsb2cuaW5mbyhcIkNsdXN0ZXIgaWRlbnRpZmllZCBYQlhcIiwgdiwgbm9kZS53aWR0aCwgZ3JhcGgubm9kZSh2KSk7XG4gICAgICAgIGNvbnN0IHsgcmFua3NlcCwgbm9kZXNlcCB9ID0gZ3JhcGguZ3JhcGgoKTtcbiAgICAgICAgbm9kZS5ncmFwaC5zZXRHcmFwaCh7XG4gICAgICAgICAgLi4ubm9kZS5ncmFwaC5ncmFwaCgpLFxuICAgICAgICAgIHJhbmtzZXA6IHJhbmtzZXAgKyAyNSxcbiAgICAgICAgICBub2Rlc2VwXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvID0gYXdhaXQgcmVjdXJzaXZlUmVuZGVyKFxuICAgICAgICAgIG5vZGVzLFxuICAgICAgICAgIG5vZGUuZ3JhcGgsXG4gICAgICAgICAgZGlhZ3JhbVR5cGUsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgZ3JhcGgubm9kZSh2KSxcbiAgICAgICAgICBzaXRlQ29uZmlnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0VsID0gby5lbGVtO1xuICAgICAgICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIG5ld0VsKTtcbiAgICAgICAgbm9kZS5kaWZmID0gby5kaWZmIHx8IDA7XG4gICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgIFwiTmV3IGNvbXBvdW5kIG5vZGUgYWZ0ZXIgcmVjdXJzaXZlIHJlbmRlciBYQVhcIixcbiAgICAgICAgICB2LFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAvLyBub2RlLFxuICAgICAgICAgIG5vZGUud2lkdGgsXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBub2RlLmhlaWdodFxuICAgICAgICAgIC8vIG5vZGUueCxcbiAgICAgICAgICAvLyBub2RlLnlcbiAgICAgICAgKTtcbiAgICAgICAgc2V0Tm9kZUVsZW0obmV3RWwsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2cudHJhY2UoXG4gICAgICAgICAgICBcIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhCWFwiLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIG5vZGUuaWQsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICAgIFwiR3JhcGg6XCIsXG4gICAgICAgICAgICBncmFwaFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nLnRyYWNlKGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpKTtcbiAgICAgICAgICBjbHVzdGVyRGIuc2V0KG5vZGUuaWQsIHsgaWQ6IGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpLCBub2RlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy50cmFjZShcIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhBWFwiLCB2LCBub2RlcywgZ3JhcGgubm9kZSh2KSwgZGlyKTtcbiAgICAgICAgICBhd2FpdCBpbnNlcnROb2RlKG5vZGVzLCBncmFwaC5ub2RlKHYpLCBkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgY29uc3QgcHJvY2Vzc0VkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZWRnZVByb21pc2VzID0gZ3JhcGguZWRnZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24oZSkge1xuICAgICAgY29uc3QgZWRnZSA9IGdyYXBoLmVkZ2UoZS52LCBlLncsIGUubmFtZSk7XG4gICAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgIGxvZy5pbmZvKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiLCBlLCBcIiBcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIFwiRml4XCIsXG4gICAgICAgIGNsdXN0ZXJEYixcbiAgICAgICAgXCJpZHM6XCIsXG4gICAgICAgIGUudixcbiAgICAgICAgZS53LFxuICAgICAgICBcIlRyYW5zbGF0aW5nOiBcIixcbiAgICAgICAgY2x1c3RlckRiLmdldChlLnYpLFxuICAgICAgICBjbHVzdGVyRGIuZ2V0KGUudylcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbnNlcnRFZGdlTGFiZWwoZWRnZUxhYmVscywgZWRnZSk7XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZWRnZVByb21pc2VzKTtcbiAgfSwgXCJwcm9jZXNzRWRnZXNcIik7XG4gIGF3YWl0IHByb2Nlc3NFZGdlcygpO1xuICBsb2cuaW5mbyhcIkdyYXBoIGJlZm9yZSBsYXlvdXQ6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGxvZy5pbmZvKFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFhYWFwiKTtcbiAgbG9nLmluZm8oXCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMgWFhYXCIpO1xuICBsb2cuaW5mbyhcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBYWFhcIik7XG4gIGRhZ3JlTGF5b3V0KGdyYXBoKTtcbiAgbG9nLmluZm8oXCJHcmFwaCBhZnRlciBsYXlvdXQ6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGxldCBkaWZmID0gMDtcbiAgbGV0IHsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgc29ydE5vZGVzQnlIaWVyYXJjaHkoZ3JhcGgpLm1hcChhc3luYyBmdW5jdGlvbih2KSB7XG4gICAgICBjb25zdCBub2RlID0gZ3JhcGgubm9kZSh2KTtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBcIlBvc2l0aW9uIFhCWCA9PiBcIiArIHYgKyBcIjogKFwiICsgbm9kZS54LFxuICAgICAgICBcIixcIiArIG5vZGUueSxcbiAgICAgICAgXCIpIHdpZHRoOiBcIixcbiAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgXCIgaGVpZ2h0OiBcIixcbiAgICAgICAgbm9kZS5oZWlnaHRcbiAgICAgICk7XG4gICAgICBpZiAobm9kZT8uY2x1c3Rlck5vZGUpIHtcbiAgICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgXCJBIHRhaW50ZWQgY2x1c3RlciBub2RlIFhCWDFcIixcbiAgICAgICAgICB2LFxuICAgICAgICAgIG5vZGUuaWQsXG4gICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICBub2RlLmhlaWdodCxcbiAgICAgICAgICBub2RlLngsXG4gICAgICAgICAgbm9kZS55LFxuICAgICAgICAgIGdyYXBoLnBhcmVudCh2KVxuICAgICAgICApO1xuICAgICAgICBjbHVzdGVyRGIuZ2V0KG5vZGUuaWQpLm5vZGUgPSBub2RlO1xuICAgICAgICBwb3NpdGlvbk5vZGUobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZ3JhcGguY2hpbGRyZW4odikubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgICAgXCJBIHB1cmUgY2x1c3RlciBub2RlIFhCWDFcIixcbiAgICAgICAgICAgIHYsXG4gICAgICAgICAgICBub2RlLmlkLFxuICAgICAgICAgICAgbm9kZS54LFxuICAgICAgICAgICAgbm9kZS55LFxuICAgICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICAgIG5vZGUuaGVpZ2h0LFxuICAgICAgICAgICAgZ3JhcGgucGFyZW50KHYpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2RlLmhlaWdodCArPSBzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW47XG4gICAgICAgICAgZ3JhcGgubm9kZShub2RlLnBhcmVudElkKTtcbiAgICAgICAgICBjb25zdCBoYWxmUGFkZGluZyA9IG5vZGU/LnBhZGRpbmcgLyAyIHx8IDA7XG4gICAgICAgICAgY29uc3QgbGFiZWxIZWlnaHQgPSBub2RlPy5sYWJlbEJCb3g/LmhlaWdodCB8fCAwO1xuICAgICAgICAgIGNvbnN0IG9mZnNldFkgPSBsYWJlbEhlaWdodCAtIGhhbGZQYWRkaW5nIHx8IDA7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiT2Zmc2V0WVwiLCBvZmZzZXRZLCBcImxhYmVsSGVpZ2h0XCIsIGxhYmVsSGVpZ2h0LCBcImhhbGZQYWRkaW5nXCIsIGhhbGZQYWRkaW5nKTtcbiAgICAgICAgICBhd2FpdCBpbnNlcnRDbHVzdGVyKGNsdXN0ZXJzLCBub2RlKTtcbiAgICAgICAgICBjbHVzdGVyRGIuZ2V0KG5vZGUuaWQpLm5vZGUgPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLm5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiAvIDI7XG4gICAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgICBcIkEgcmVndWxhciBub2RlIFhCWDEgLSB1c2luZyB0aGUgcGFkZGluZ1wiLFxuICAgICAgICAgICAgbm9kZS5pZCxcbiAgICAgICAgICAgIFwicGFyZW50XCIsXG4gICAgICAgICAgICBub2RlLnBhcmVudElkLFxuICAgICAgICAgICAgbm9kZS53aWR0aCxcbiAgICAgICAgICAgIG5vZGUuaGVpZ2h0LFxuICAgICAgICAgICAgbm9kZS54LFxuICAgICAgICAgICAgbm9kZS55LFxuICAgICAgICAgICAgXCJvZmZzZXRZXCIsXG4gICAgICAgICAgICBub2RlLm9mZnNldFksXG4gICAgICAgICAgICBcInBhcmVudFwiLFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgcGFyZW50Py5vZmZzZXRZLFxuICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcG9zaXRpb25Ob2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgZ3JhcGguZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBlZGdlID0gZ3JhcGguZWRnZShlKTtcbiAgICBsb2cuaW5mbyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGVkZ2UpLCBlZGdlKTtcbiAgICBlZGdlLnBvaW50cy5mb3JFYWNoKChwb2ludCkgPT4gcG9pbnQueSArPSBzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW4gLyAyKTtcbiAgICBjb25zdCBzdGFydE5vZGUgPSBncmFwaC5ub2RlKGUudik7XG4gICAgdmFyIGVuZE5vZGUgPSBncmFwaC5ub2RlKGUudyk7XG4gICAgY29uc3QgcGF0aHMgPSBpbnNlcnRFZGdlKGVkZ2VQYXRocywgZWRnZSwgY2x1c3RlckRiLCBkaWFncmFtVHlwZSwgc3RhcnROb2RlLCBlbmROb2RlLCBpZCk7XG4gICAgcG9zaXRpb25FZGdlTGFiZWwoZWRnZSwgcGF0aHMpO1xuICB9KTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBuID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyh2LCBuLnR5cGUsIG4uZGlmZik7XG4gICAgaWYgKG4uaXNHcm91cCkge1xuICAgICAgZGlmZiA9IG4uZGlmZjtcbiAgICB9XG4gIH0pO1xuICBsb2cud2FybihcIlJldHVybmluZyBmcm9tIHJlY3Vyc2l2ZSByZW5kZXIgWEFYXCIsIGVsZW0sIGRpZmYpO1xuICByZXR1cm4geyBlbGVtLCBkaWZmIH07XG59LCBcInJlY3Vyc2l2ZVJlbmRlclwiKTtcbnZhciByZW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChkYXRhNExheW91dCwgc3ZnKSA9PiB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IGdyYXBobGliMi5HcmFwaCh7XG4gICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICBjb21wb3VuZDogdHJ1ZVxuICB9KS5zZXRHcmFwaCh7XG4gICAgcmFua2RpcjogZGF0YTRMYXlvdXQuZGlyZWN0aW9uLFxuICAgIG5vZGVzZXA6IGRhdGE0TGF5b3V0LmNvbmZpZz8ubm9kZVNwYWNpbmcgfHwgZGF0YTRMYXlvdXQuY29uZmlnPy5mbG93Y2hhcnQ/Lm5vZGVTcGFjaW5nIHx8IGRhdGE0TGF5b3V0Lm5vZGVTcGFjaW5nLFxuICAgIHJhbmtzZXA6IGRhdGE0TGF5b3V0LmNvbmZpZz8ucmFua1NwYWNpbmcgfHwgZGF0YTRMYXlvdXQuY29uZmlnPy5mbG93Y2hhcnQ/LnJhbmtTcGFjaW5nIHx8IGRhdGE0TGF5b3V0LnJhbmtTcGFjaW5nLFxuICAgIG1hcmdpbng6IDgsXG4gICAgbWFyZ2lueTogOFxuICB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGNvbnN0IGVsZW1lbnQgPSBzdmcuc2VsZWN0KFwiZ1wiKTtcbiAgbWFya2Vyc19kZWZhdWx0KGVsZW1lbnQsIGRhdGE0TGF5b3V0Lm1hcmtlcnMsIGRhdGE0TGF5b3V0LnR5cGUsIGRhdGE0TGF5b3V0LmRpYWdyYW1JZCk7XG4gIGNsZWFyMygpO1xuICBjbGVhcjIoKTtcbiAgY2xlYXIoKTtcbiAgY2xlYXI0KCk7XG4gIGRhdGE0TGF5b3V0Lm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIHsgLi4ubm9kZSB9KTtcbiAgICBpZiAobm9kZS5wYXJlbnRJZCkge1xuICAgICAgZ3JhcGguc2V0UGFyZW50KG5vZGUuaWQsIG5vZGUucGFyZW50SWQpO1xuICAgIH1cbiAgfSk7XG4gIGxvZy5kZWJ1ZyhcIkVkZ2VzOlwiLCBkYXRhNExheW91dC5lZGdlcyk7XG4gIGRhdGE0TGF5b3V0LmVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICBpZiAoZWRnZS5zdGFydCA9PT0gZWRnZS5lbmQpIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGVkZ2Uuc3RhcnQ7XG4gICAgICBjb25zdCBzcGVjaWFsSWQxID0gbm9kZUlkICsgXCItLS1cIiArIG5vZGVJZCArIFwiLS0tMVwiO1xuICAgICAgY29uc3Qgc3BlY2lhbElkMiA9IG5vZGVJZCArIFwiLS0tXCIgKyBub2RlSWQgKyBcIi0tLTJcIjtcbiAgICAgIGNvbnN0IG5vZGUgPSBncmFwaC5ub2RlKG5vZGVJZCk7XG4gICAgICBncmFwaC5zZXROb2RlKHNwZWNpYWxJZDEsIHtcbiAgICAgICAgZG9tSWQ6IHNwZWNpYWxJZDEsXG4gICAgICAgIGlkOiBzcGVjaWFsSWQxLFxuICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHNoYXBlOiBcImxhYmVsUmVjdFwiLFxuICAgICAgICAvLyBzaGFwZTogJ3JlY3QnLFxuICAgICAgICBzdHlsZTogXCJcIixcbiAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICBoZWlnaHQ6IDEwXG4gICAgICB9KTtcbiAgICAgIGdyYXBoLnNldFBhcmVudChzcGVjaWFsSWQxLCBub2RlLnBhcmVudElkKTtcbiAgICAgIGdyYXBoLnNldE5vZGUoc3BlY2lhbElkMiwge1xuICAgICAgICBkb21JZDogc3BlY2lhbElkMixcbiAgICAgICAgaWQ6IHNwZWNpYWxJZDIsXG4gICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxuICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBzaGFwZTogJ3JlY3QnLFxuICAgICAgICBzaGFwZTogXCJsYWJlbFJlY3RcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIHN0eWxlOiBcIlwiLFxuICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgIGhlaWdodDogMTBcbiAgICAgIH0pO1xuICAgICAgZ3JhcGguc2V0UGFyZW50KHNwZWNpYWxJZDIsIG5vZGUucGFyZW50SWQpO1xuICAgICAgY29uc3QgZWRnZTEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZWRnZSk7XG4gICAgICBjb25zdCBlZGdlTWlkID0gc3RydWN0dXJlZENsb25lKGVkZ2UpO1xuICAgICAgY29uc3QgZWRnZTIgPSBzdHJ1Y3R1cmVkQ2xvbmUoZWRnZSk7XG4gICAgICBlZGdlMS5sYWJlbCA9IFwiXCI7XG4gICAgICBlZGdlMS5hcnJvd1R5cGVFbmQgPSBcIm5vbmVcIjtcbiAgICAgIGVkZ2UxLmlkID0gbm9kZUlkICsgXCItY3ljbGljLXNwZWNpYWwtMVwiO1xuICAgICAgZWRnZU1pZC5hcnJvd1R5cGVFbmQgPSBcIm5vbmVcIjtcbiAgICAgIGVkZ2VNaWQuaWQgPSBub2RlSWQgKyBcIi1jeWNsaWMtc3BlY2lhbC1taWRcIjtcbiAgICAgIGVkZ2UyLmxhYmVsID0gXCJcIjtcbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgZWRnZTEuZnJvbUNsdXN0ZXIgPSBub2RlSWQ7XG4gICAgICAgIGVkZ2UyLnRvQ2x1c3RlciA9IG5vZGVJZDtcbiAgICAgIH1cbiAgICAgIGVkZ2UyLmlkID0gbm9kZUlkICsgXCItY3ljbGljLXNwZWNpYWwtMlwiO1xuICAgICAgZ3JhcGguc2V0RWRnZShub2RlSWQsIHNwZWNpYWxJZDEsIGVkZ2UxLCBub2RlSWQgKyBcIi1jeWNsaWMtc3BlY2lhbC0wXCIpO1xuICAgICAgZ3JhcGguc2V0RWRnZShzcGVjaWFsSWQxLCBzcGVjaWFsSWQyLCBlZGdlTWlkLCBub2RlSWQgKyBcIi1jeWNsaWMtc3BlY2lhbC0xXCIpO1xuICAgICAgZ3JhcGguc2V0RWRnZShzcGVjaWFsSWQyLCBub2RlSWQsIGVkZ2UyLCBub2RlSWQgKyBcIi1jeWM8bGljLXNwZWNpYWwtMlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JhcGguc2V0RWRnZShlZGdlLnN0YXJ0LCBlZGdlLmVuZCwgeyAuLi5lZGdlIH0sIGVkZ2UuaWQpO1xuICAgIH1cbiAgfSk7XG4gIGxvZy53YXJuKFwiR3JhcGggYXQgZmlyc3Q6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGFkanVzdENsdXN0ZXJzQW5kRWRnZXMoZ3JhcGgpO1xuICBsb2cud2FybihcIkdyYXBoIGFmdGVyIFhBWDpcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGhsaWJKc29uMi53cml0ZShncmFwaCkpKTtcbiAgY29uc3Qgc2l0ZUNvbmZpZyA9IGdldENvbmZpZygpO1xuICBhd2FpdCByZWN1cnNpdmVSZW5kZXIoXG4gICAgZWxlbWVudCxcbiAgICBncmFwaCxcbiAgICBkYXRhNExheW91dC50eXBlLFxuICAgIGRhdGE0TGF5b3V0LmRpYWdyYW1JZCxcbiAgICB2b2lkIDAsXG4gICAgc2l0ZUNvbmZpZ1xuICApO1xufSwgXCJyZW5kZXJcIik7XG5leHBvcnQge1xuICByZW5kZXJcbn07XG4iLAogICAgImltcG9ydCB7XG4gIGluc2VydENsdXN0ZXIsXG4gIGluc2VydEVkZ2UsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgaW5zZXJ0Tm9kZSxcbiAgbGFiZWxIZWxwZXIsXG4gIG1hcmtlcnNfZGVmYXVsdCxcbiAgcG9zaXRpb25FZGdlTGFiZWxcbn0gZnJvbSBcIi4vY2h1bmstUk9LWVVWQ1UubWpzXCI7XG5pbXBvcnQge1xuICBpbnRlcnBvbGF0ZVRvQ3VydmVcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBnZXRDb25maWcsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2ludGVybmFscy50c1xudmFyIGludGVybmFsSGVscGVycyA9IHtcbiAgY29tbW9uOiBjb21tb25fZGVmYXVsdCxcbiAgZ2V0Q29uZmlnLFxuICBpbnNlcnRDbHVzdGVyLFxuICBpbnNlcnRFZGdlLFxuICBpbnNlcnRFZGdlTGFiZWwsXG4gIGluc2VydE1hcmtlcnM6IG1hcmtlcnNfZGVmYXVsdCxcbiAgaW5zZXJ0Tm9kZSxcbiAgaW50ZXJwb2xhdGVUb0N1cnZlLFxuICBsYWJlbEhlbHBlcixcbiAgbG9nLFxuICBwb3NpdGlvbkVkZ2VMYWJlbFxufTtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3JlbmRlci50c1xudmFyIGxheW91dEFsZ29yaXRobXMgPSB7fTtcbnZhciByZWdpc3RlckxheW91dExvYWRlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChsb2FkZXJzKSA9PiB7XG4gIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICBsYXlvdXRBbGdvcml0aG1zW2xvYWRlci5uYW1lXSA9IGxvYWRlcjtcbiAgfVxufSwgXCJyZWdpc3RlckxheW91dExvYWRlcnNcIik7XG52YXIgcmVnaXN0ZXJEZWZhdWx0TGF5b3V0TG9hZGVycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZWdpc3RlckxheW91dExvYWRlcnMoW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiZGFncmVcIixcbiAgICAgIGxvYWRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiBhd2FpdCBpbXBvcnQoXCIuL2RhZ3JlLUM0WUE0M0YzLm1qc1wiKSwgXCJsb2FkZXJcIilcbiAgICB9XG4gIF0pO1xufSwgXCJyZWdpc3RlckRlZmF1bHRMYXlvdXRMb2FkZXJzXCIpO1xucmVnaXN0ZXJEZWZhdWx0TGF5b3V0TG9hZGVycygpO1xudmFyIHJlbmRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGRhdGE0TGF5b3V0LCBzdmcpID0+IHtcbiAgaWYgKCEoZGF0YTRMYXlvdXQubGF5b3V0QWxnb3JpdGhtIGluIGxheW91dEFsZ29yaXRobXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxheW91dCBhbGdvcml0aG06ICR7ZGF0YTRMYXlvdXQubGF5b3V0QWxnb3JpdGhtfWApO1xuICB9XG4gIGNvbnN0IGxheW91dERlZmluaXRpb24gPSBsYXlvdXRBbGdvcml0aG1zW2RhdGE0TGF5b3V0LmxheW91dEFsZ29yaXRobV07XG4gIGNvbnN0IGxheW91dFJlbmRlcmVyID0gYXdhaXQgbGF5b3V0RGVmaW5pdGlvbi5sb2FkZXIoKTtcbiAgcmV0dXJuIGxheW91dFJlbmRlcmVyLnJlbmRlcihkYXRhNExheW91dCwgc3ZnLCBpbnRlcm5hbEhlbHBlcnMsIHtcbiAgICBhbGdvcml0aG06IGxheW91dERlZmluaXRpb24uYWxnb3JpdGhtXG4gIH0pO1xufSwgXCJyZW5kZXJcIik7XG52YXIgZ2V0UmVnaXN0ZXJlZExheW91dEFsZ29yaXRobSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFsZ29yaXRobSA9IFwiXCIsIHsgZmFsbGJhY2sgPSBcImRhZ3JlXCIgfSA9IHt9KSA9PiB7XG4gIGlmIChhbGdvcml0aG0gaW4gbGF5b3V0QWxnb3JpdGhtcykge1xuICAgIHJldHVybiBhbGdvcml0aG07XG4gIH1cbiAgaWYgKGZhbGxiYWNrIGluIGxheW91dEFsZ29yaXRobXMpIHtcbiAgICBsb2cud2FybihgTGF5b3V0IGFsZ29yaXRobSAke2FsZ29yaXRobX0gaXMgbm90IHJlZ2lzdGVyZWQuIFVzaW5nICR7ZmFsbGJhY2t9IGFzIGZhbGxiYWNrLmApO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEJvdGggbGF5b3V0IGFsZ29yaXRobXMgJHthbGdvcml0aG19IGFuZCAke2ZhbGxiYWNrfSBhcmUgbm90IHJlZ2lzdGVyZWQuYCk7XG59LCBcImdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG1cIik7XG5cbmV4cG9ydCB7XG4gIHJlZ2lzdGVyTGF5b3V0TG9hZGVycyxcbiAgcmVuZGVyLFxuICBnZXRSZWdpc3RlcmVkTGF5b3V0QWxnb3JpdGhtXG59O1xuIiwKICAgICIvLyBwYWNrYWdlLmpzb25cbnZhciB2ZXJzaW9uID0gXCIxMS4xLjFcIjtcblxuZXhwb3J0IHtcbiAgdmVyc2lvblxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19uYW1lLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL3NlbGVjdFN2Z0VsZW1lbnQudHNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIHNlbGVjdFN2Z0VsZW1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4ge1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwgfSA9IGdldENvbmZpZygpO1xuICBsZXQgcm9vdCA9IHNlbGVjdChcImJvZHlcIik7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIGNvbnN0IHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KGAjaSR7aWR9YCk7XG4gICAgY29uc3QgZG9jID0gc2FuZGJveEVsZW1lbnQubm9kZSgpPy5jb250ZW50RG9jdW1lbnQgPz8gZG9jdW1lbnQ7XG4gICAgcm9vdCA9IHNlbGVjdChkb2MuYm9keSk7XG4gIH1cbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYCMke2lkfWApO1xuICByZXR1cm4gc3ZnO1xufSwgXCJzZWxlY3RTdmdFbGVtZW50XCIpO1xuXG5leHBvcnQge1xuICBzZWxlY3RTdmdFbGVtZW50XG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGxpbmVCcmVha1JlZ2V4XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvY29tbW9uL3N2Z0RyYXdDb21tb24udHNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG52YXIgZHJhd1JlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtZW50LCByZWN0RGF0YSkgPT4ge1xuICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwicmVjdFwiKTtcbiAgcmVjdEVsZW1lbnQuYXR0cihcInhcIiwgcmVjdERhdGEueCk7XG4gIHJlY3RFbGVtZW50LmF0dHIoXCJ5XCIsIHJlY3REYXRhLnkpO1xuICByZWN0RWxlbWVudC5hdHRyKFwiZmlsbFwiLCByZWN0RGF0YS5maWxsKTtcbiAgcmVjdEVsZW1lbnQuYXR0cihcInN0cm9rZVwiLCByZWN0RGF0YS5zdHJva2UpO1xuICByZWN0RWxlbWVudC5hdHRyKFwid2lkdGhcIiwgcmVjdERhdGEud2lkdGgpO1xuICByZWN0RWxlbWVudC5hdHRyKFwiaGVpZ2h0XCIsIHJlY3REYXRhLmhlaWdodCk7XG4gIGlmIChyZWN0RGF0YS5uYW1lKSB7XG4gICAgcmVjdEVsZW1lbnQuYXR0cihcIm5hbWVcIiwgcmVjdERhdGEubmFtZSk7XG4gIH1cbiAgaWYgKHJlY3REYXRhLnJ4KSB7XG4gICAgcmVjdEVsZW1lbnQuYXR0cihcInJ4XCIsIHJlY3REYXRhLnJ4KTtcbiAgfVxuICBpZiAocmVjdERhdGEucnkpIHtcbiAgICByZWN0RWxlbWVudC5hdHRyKFwicnlcIiwgcmVjdERhdGEucnkpO1xuICB9XG4gIGlmIChyZWN0RGF0YS5hdHRycyAhPT0gdm9pZCAwKSB7XG4gICAgZm9yIChjb25zdCBhdHRyS2V5IGluIHJlY3REYXRhLmF0dHJzKSB7XG4gICAgICByZWN0RWxlbWVudC5hdHRyKGF0dHJLZXksIHJlY3REYXRhLmF0dHJzW2F0dHJLZXldKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlY3REYXRhLmNsYXNzKSB7XG4gICAgcmVjdEVsZW1lbnQuYXR0cihcImNsYXNzXCIsIHJlY3REYXRhLmNsYXNzKTtcbiAgfVxuICByZXR1cm4gcmVjdEVsZW1lbnQ7XG59LCBcImRyYXdSZWN0XCIpO1xudmFyIGRyYXdCYWNrZ3JvdW5kUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW1lbnQsIGJvdW5kcykgPT4ge1xuICBjb25zdCByZWN0RGF0YSA9IHtcbiAgICB4OiBib3VuZHMuc3RhcnR4LFxuICAgIHk6IGJvdW5kcy5zdGFydHksXG4gICAgd2lkdGg6IGJvdW5kcy5zdG9weCAtIGJvdW5kcy5zdGFydHgsXG4gICAgaGVpZ2h0OiBib3VuZHMuc3RvcHkgLSBib3VuZHMuc3RhcnR5LFxuICAgIGZpbGw6IGJvdW5kcy5maWxsLFxuICAgIHN0cm9rZTogYm91bmRzLnN0cm9rZSxcbiAgICBjbGFzczogXCJyZWN0XCJcbiAgfTtcbiAgY29uc3QgcmVjdEVsZW1lbnQgPSBkcmF3UmVjdChlbGVtZW50LCByZWN0RGF0YSk7XG4gIHJlY3RFbGVtZW50Lmxvd2VyKCk7XG59LCBcImRyYXdCYWNrZ3JvdW5kUmVjdFwiKTtcbnZhciBkcmF3VGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW1lbnQsIHRleHREYXRhKSA9PiB7XG4gIGNvbnN0IG5UZXh0ID0gdGV4dERhdGEudGV4dC5yZXBsYWNlKGxpbmVCcmVha1JlZ2V4LCBcIiBcIik7XG4gIGNvbnN0IHRleHRFbGVtID0gZWxlbWVudC5hcHBlbmQoXCJ0ZXh0XCIpO1xuICB0ZXh0RWxlbS5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgdGV4dEVsZW0uYXR0cihcInlcIiwgdGV4dERhdGEueSk7XG4gIHRleHRFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImxlZ2VuZFwiKTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCB0ZXh0RGF0YS5hbmNob3IpO1xuICBpZiAodGV4dERhdGEuY2xhc3MpIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHRzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gIHRzcGFuLmF0dHIoXCJ4XCIsIHRleHREYXRhLnggKyB0ZXh0RGF0YS50ZXh0TWFyZ2luICogMik7XG4gIHRzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdJbWFnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHgsIHksIGxpbmspID0+IHtcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gZWxlbS5hcHBlbmQoXCJpbWFnZVwiKTtcbiAgaW1hZ2VFbGVtZW50LmF0dHIoXCJ4XCIsIHgpO1xuICBpbWFnZUVsZW1lbnQuYXR0cihcInlcIiwgeSk7XG4gIGNvbnN0IHNhbml0aXplZExpbmsgPSBzYW5pdGl6ZVVybChsaW5rKTtcbiAgaW1hZ2VFbGVtZW50LmF0dHIoXCJ4bGluazpocmVmXCIsIHNhbml0aXplZExpbmspO1xufSwgXCJkcmF3SW1hZ2VcIik7XG52YXIgZHJhd0VtYmVkZGVkSW1hZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtZW50LCB4LCB5LCBsaW5rKSA9PiB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwidXNlXCIpO1xuICBpbWFnZUVsZW1lbnQuYXR0cihcInhcIiwgeCk7XG4gIGltYWdlRWxlbWVudC5hdHRyKFwieVwiLCB5KTtcbiAgY29uc3Qgc2FuaXRpemVkTGluayA9IHNhbml0aXplVXJsKGxpbmspO1xuICBpbWFnZUVsZW1lbnQuYXR0cihcInhsaW5rOmhyZWZcIiwgYCMke3Nhbml0aXplZExpbmt9YCk7XG59LCBcImRyYXdFbWJlZGRlZEltYWdlXCIpO1xudmFyIGdldE5vdGVSZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGNvbnN0IG5vdGVSZWN0RGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICBmaWxsOiBcIiNFREYyQUVcIixcbiAgICBzdHJva2U6IFwiIzY2NlwiLFxuICAgIGFuY2hvcjogXCJzdGFydFwiLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwXG4gIH07XG4gIHJldHVybiBub3RlUmVjdERhdGE7XG59LCBcImdldE5vdGVSZWN0XCIpO1xudmFyIGdldFRleHRPYmogPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgdGVzdE9iamVjdCA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDEwMCxcbiAgICBcInRleHQtYW5jaG9yXCI6IFwic3RhcnRcIixcbiAgICBzdHlsZTogXCIjNjY2XCIsXG4gICAgdGV4dE1hcmdpbjogMCxcbiAgICByeDogMCxcbiAgICByeTogMCxcbiAgICB0c3BhbjogdHJ1ZVxuICB9O1xuICByZXR1cm4gdGVzdE9iamVjdDtcbn0sIFwiZ2V0VGV4dE9ialwiKTtcblxuZXhwb3J0IHtcbiAgZHJhd1JlY3QsXG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZHJhd1RleHQsXG4gIGRyYXdJbWFnZSxcbiAgZHJhd0VtYmVkZGVkSW1hZ2UsXG4gIGdldE5vdGVSZWN0LFxuICBnZXRUZXh0T2JqXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBkcmF3UmVjdCxcbiAgZ2V0Tm90ZVJlY3Rcbn0gZnJvbSBcIi4vY2h1bmstWFZPWU9NMkMubWpzXCI7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVUZXh0SGVpZ2h0LFxuICBjYWxjdWxhdGVUZXh0V2lkdGgsXG4gIHdyYXBMYWJlbFxufSBmcm9tIFwiLi9jaHVuay0yRURUV0RZSS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2csXG4gIHNhbml0aXplVGV4dCxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYzQvcGFyc2VyL2M0RGlhZ3JhbS5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzEsIDI0XSwgJFYxID0gWzEsIDI1XSwgJFYyID0gWzEsIDI2XSwgJFYzID0gWzEsIDI3XSwgJFY0ID0gWzEsIDI4XSwgJFY1ID0gWzEsIDYzXSwgJFY2ID0gWzEsIDY0XSwgJFY3ID0gWzEsIDY1XSwgJFY4ID0gWzEsIDY2XSwgJFY5ID0gWzEsIDY3XSwgJFZhID0gWzEsIDY4XSwgJFZiID0gWzEsIDY5XSwgJFZjID0gWzEsIDI5XSwgJFZkID0gWzEsIDMwXSwgJFZlID0gWzEsIDMxXSwgJFZmID0gWzEsIDMyXSwgJFZnID0gWzEsIDMzXSwgJFZoID0gWzEsIDM0XSwgJFZpID0gWzEsIDM1XSwgJFZqID0gWzEsIDM2XSwgJFZrID0gWzEsIDM3XSwgJFZsID0gWzEsIDM4XSwgJFZtID0gWzEsIDM5XSwgJFZuID0gWzEsIDQwXSwgJFZvID0gWzEsIDQxXSwgJFZwID0gWzEsIDQyXSwgJFZxID0gWzEsIDQzXSwgJFZyID0gWzEsIDQ0XSwgJFZzID0gWzEsIDQ1XSwgJFZ0ID0gWzEsIDQ2XSwgJFZ1ID0gWzEsIDQ3XSwgJFZ2ID0gWzEsIDQ4XSwgJFZ3ID0gWzEsIDUwXSwgJFZ4ID0gWzEsIDUxXSwgJFZ5ID0gWzEsIDUyXSwgJFZ6ID0gWzEsIDUzXSwgJFZBID0gWzEsIDU0XSwgJFZCID0gWzEsIDU1XSwgJFZDID0gWzEsIDU2XSwgJFZEID0gWzEsIDU3XSwgJFZFID0gWzEsIDU4XSwgJFZGID0gWzEsIDU5XSwgJFZHID0gWzEsIDYwXSwgJFZIID0gWzE0LCA0Ml0sICRWSSA9IFsxNCwgMzQsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NF0sICRWSiA9IFsxMiwgMTQsIDM0LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzRdLCAkVksgPSBbMSwgODJdLCAkVkwgPSBbMSwgODNdLCAkVk0gPSBbMSwgODRdLCAkVk4gPSBbMSwgODVdLCAkVk8gPSBbMTIsIDE0LCA0Ml0sICRWUCA9IFsxMiwgMTQsIDMzLCA0Ml0sICRWUSA9IFsxMiwgMTQsIDMzLCA0MiwgNzYsIDc3LCA3OSwgODBdLCAkVlIgPSBbMTIsIDMzXSwgJFZTID0gWzM0LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIm1lcm1haWREb2NcIjogNCwgXCJkaXJlY3Rpb25cIjogNSwgXCJkaXJlY3Rpb25fdGJcIjogNiwgXCJkaXJlY3Rpb25fYnRcIjogNywgXCJkaXJlY3Rpb25fcmxcIjogOCwgXCJkaXJlY3Rpb25fbHJcIjogOSwgXCJncmFwaENvbmZpZ1wiOiAxMCwgXCJDNF9DT05URVhUXCI6IDExLCBcIk5FV0xJTkVcIjogMTIsIFwic3RhdGVtZW50c1wiOiAxMywgXCJFT0ZcIjogMTQsIFwiQzRfQ09OVEFJTkVSXCI6IDE1LCBcIkM0X0NPTVBPTkVOVFwiOiAxNiwgXCJDNF9EWU5BTUlDXCI6IDE3LCBcIkM0X0RFUExPWU1FTlRcIjogMTgsIFwib3RoZXJTdGF0ZW1lbnRzXCI6IDE5LCBcImRpYWdyYW1TdGF0ZW1lbnRzXCI6IDIwLCBcIm90aGVyU3RhdGVtZW50XCI6IDIxLCBcInRpdGxlXCI6IDIyLCBcImFjY0Rlc2NyaXB0aW9uXCI6IDIzLCBcImFjY190aXRsZVwiOiAyNCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMjUsIFwiYWNjX2Rlc2NyXCI6IDI2LCBcImFjY19kZXNjcl92YWx1ZVwiOiAyNywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDI4LCBcImJvdW5kYXJ5U3RhdGVtZW50XCI6IDI5LCBcImJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnRcIjogMzAsIFwiYm91bmRhcnlTdG9wU3RhdGVtZW50XCI6IDMxLCBcImJvdW5kYXJ5U3RhcnRcIjogMzIsIFwiTEJSQUNFXCI6IDMzLCBcIkVOVEVSUFJJU0VfQk9VTkRBUllcIjogMzQsIFwiYXR0cmlidXRlc1wiOiAzNSwgXCJTWVNURU1fQk9VTkRBUllcIjogMzYsIFwiQk9VTkRBUllcIjogMzcsIFwiQ09OVEFJTkVSX0JPVU5EQVJZXCI6IDM4LCBcIk5PREVcIjogMzksIFwiTk9ERV9MXCI6IDQwLCBcIk5PREVfUlwiOiA0MSwgXCJSQlJBQ0VcIjogNDIsIFwiZGlhZ3JhbVN0YXRlbWVudFwiOiA0MywgXCJQRVJTT05cIjogNDQsIFwiUEVSU09OX0VYVFwiOiA0NSwgXCJTWVNURU1cIjogNDYsIFwiU1lTVEVNX0RCXCI6IDQ3LCBcIlNZU1RFTV9RVUVVRVwiOiA0OCwgXCJTWVNURU1fRVhUXCI6IDQ5LCBcIlNZU1RFTV9FWFRfREJcIjogNTAsIFwiU1lTVEVNX0VYVF9RVUVVRVwiOiA1MSwgXCJDT05UQUlORVJcIjogNTIsIFwiQ09OVEFJTkVSX0RCXCI6IDUzLCBcIkNPTlRBSU5FUl9RVUVVRVwiOiA1NCwgXCJDT05UQUlORVJfRVhUXCI6IDU1LCBcIkNPTlRBSU5FUl9FWFRfREJcIjogNTYsIFwiQ09OVEFJTkVSX0VYVF9RVUVVRVwiOiA1NywgXCJDT01QT05FTlRcIjogNTgsIFwiQ09NUE9ORU5UX0RCXCI6IDU5LCBcIkNPTVBPTkVOVF9RVUVVRVwiOiA2MCwgXCJDT01QT05FTlRfRVhUXCI6IDYxLCBcIkNPTVBPTkVOVF9FWFRfREJcIjogNjIsIFwiQ09NUE9ORU5UX0VYVF9RVUVVRVwiOiA2MywgXCJSRUxcIjogNjQsIFwiQklSRUxcIjogNjUsIFwiUkVMX1VcIjogNjYsIFwiUkVMX0RcIjogNjcsIFwiUkVMX0xcIjogNjgsIFwiUkVMX1JcIjogNjksIFwiUkVMX0JcIjogNzAsIFwiUkVMX0lOREVYXCI6IDcxLCBcIlVQREFURV9FTF9TVFlMRVwiOiA3MiwgXCJVUERBVEVfUkVMX1NUWUxFXCI6IDczLCBcIlVQREFURV9MQVlPVVRfQ09ORklHXCI6IDc0LCBcImF0dHJpYnV0ZVwiOiA3NSwgXCJTVFJcIjogNzYsIFwiU1RSX0tFWVwiOiA3NywgXCJTVFJfVkFMVUVcIjogNzgsIFwiQVRUUklCVVRFXCI6IDc5LCBcIkFUVFJJQlVURV9FTVBUWVwiOiA4MCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDY6IFwiZGlyZWN0aW9uX3RiXCIsIDc6IFwiZGlyZWN0aW9uX2J0XCIsIDg6IFwiZGlyZWN0aW9uX3JsXCIsIDk6IFwiZGlyZWN0aW9uX2xyXCIsIDExOiBcIkM0X0NPTlRFWFRcIiwgMTI6IFwiTkVXTElORVwiLCAxNDogXCJFT0ZcIiwgMTU6IFwiQzRfQ09OVEFJTkVSXCIsIDE2OiBcIkM0X0NPTVBPTkVOVFwiLCAxNzogXCJDNF9EWU5BTUlDXCIsIDE4OiBcIkM0X0RFUExPWU1FTlRcIiwgMjI6IFwidGl0bGVcIiwgMjM6IFwiYWNjRGVzY3JpcHRpb25cIiwgMjQ6IFwiYWNjX3RpdGxlXCIsIDI1OiBcImFjY190aXRsZV92YWx1ZVwiLCAyNjogXCJhY2NfZGVzY3JcIiwgMjc6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDI4OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMzM6IFwiTEJSQUNFXCIsIDM0OiBcIkVOVEVSUFJJU0VfQk9VTkRBUllcIiwgMzY6IFwiU1lTVEVNX0JPVU5EQVJZXCIsIDM3OiBcIkJPVU5EQVJZXCIsIDM4OiBcIkNPTlRBSU5FUl9CT1VOREFSWVwiLCAzOTogXCJOT0RFXCIsIDQwOiBcIk5PREVfTFwiLCA0MTogXCJOT0RFX1JcIiwgNDI6IFwiUkJSQUNFXCIsIDQ0OiBcIlBFUlNPTlwiLCA0NTogXCJQRVJTT05fRVhUXCIsIDQ2OiBcIlNZU1RFTVwiLCA0NzogXCJTWVNURU1fREJcIiwgNDg6IFwiU1lTVEVNX1FVRVVFXCIsIDQ5OiBcIlNZU1RFTV9FWFRcIiwgNTA6IFwiU1lTVEVNX0VYVF9EQlwiLCA1MTogXCJTWVNURU1fRVhUX1FVRVVFXCIsIDUyOiBcIkNPTlRBSU5FUlwiLCA1MzogXCJDT05UQUlORVJfREJcIiwgNTQ6IFwiQ09OVEFJTkVSX1FVRVVFXCIsIDU1OiBcIkNPTlRBSU5FUl9FWFRcIiwgNTY6IFwiQ09OVEFJTkVSX0VYVF9EQlwiLCA1NzogXCJDT05UQUlORVJfRVhUX1FVRVVFXCIsIDU4OiBcIkNPTVBPTkVOVFwiLCA1OTogXCJDT01QT05FTlRfREJcIiwgNjA6IFwiQ09NUE9ORU5UX1FVRVVFXCIsIDYxOiBcIkNPTVBPTkVOVF9FWFRcIiwgNjI6IFwiQ09NUE9ORU5UX0VYVF9EQlwiLCA2MzogXCJDT01QT05FTlRfRVhUX1FVRVVFXCIsIDY0OiBcIlJFTFwiLCA2NTogXCJCSVJFTFwiLCA2NjogXCJSRUxfVVwiLCA2NzogXCJSRUxfRFwiLCA2ODogXCJSRUxfTFwiLCA2OTogXCJSRUxfUlwiLCA3MDogXCJSRUxfQlwiLCA3MTogXCJSRUxfSU5ERVhcIiwgNzI6IFwiVVBEQVRFX0VMX1NUWUxFXCIsIDczOiBcIlVQREFURV9SRUxfU1RZTEVcIiwgNzQ6IFwiVVBEQVRFX0xBWU9VVF9DT05GSUdcIiwgNzY6IFwiU1RSXCIsIDc3OiBcIlNUUl9LRVlcIiwgNzg6IFwiU1RSX1ZBTFVFXCIsIDc5OiBcIkFUVFJJQlVURVwiLCA4MDogXCJBVFRSSUJVVEVfRU1QVFlcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDFdLCBbNSwgMV0sIFs1LCAxXSwgWzUsIDFdLCBbNSwgMV0sIFs0LCAxXSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEwLCA0XSwgWzEzLCAxXSwgWzEzLCAxXSwgWzEzLCAyXSwgWzE5LCAxXSwgWzE5LCAyXSwgWzE5LCAzXSwgWzIxLCAxXSwgWzIxLCAxXSwgWzIxLCAyXSwgWzIxLCAyXSwgWzIxLCAxXSwgWzI5LCAzXSwgWzMwLCAzXSwgWzMwLCAzXSwgWzMwLCA0XSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMyLCAyXSwgWzMxLCAxXSwgWzIwLCAxXSwgWzIwLCAyXSwgWzIwLCAzXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAxXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzQzLCAyXSwgWzM1LCAxXSwgWzM1LCAyXSwgWzc1LCAxXSwgWzc1LCAyXSwgWzc1LCAxXSwgWzc1LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJUQlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIkJUXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgeXkuc2V0RGlyZWN0aW9uKFwiUkxcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJMUlwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuc2V0QzRUeXBlKCQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHl5LnNldFRpdGxlKCQkWyQwXS5zdWJzdHJpbmcoNikpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHJpbmcoNik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24oJCRbJDBdLnN1YnN0cmluZygxNSkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHJpbmcoMTUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0VGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgJCRbJDBdLnNwbGljZSgyLCAwLCBcIkVOVEVSUFJJU0VcIik7XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAkJFskMF0uc3BsaWNlKDIsIDAsIFwiU1lTVEVNXCIpO1xuICAgICAgICAgIHl5LmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAkJFskMF0uc3BsaWNlKDIsIDAsIFwiQ09OVEFJTkVSXCIpO1xuICAgICAgICAgIHl5LmFkZENvbnRhaW5lckJvdW5kYXJ5KC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHl5LmFkZERlcGxveW1lbnROb2RlKFwibm9kZVwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5hZGREZXBsb3ltZW50Tm9kZShcIm5vZGVMXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHl5LmFkZERlcGxveW1lbnROb2RlKFwibm9kZVJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgeXkucG9wQm91bmRhcnlQYXJzZVN0YWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJwZXJzb25cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9wZXJzb25cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJzeXN0ZW1cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJzeXN0ZW1fZGJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJzeXN0ZW1fcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9zeXN0ZW1cIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9zeXN0ZW1fZGJcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgeXkuYWRkUGVyc29uT3JTeXN0ZW0oXCJleHRlcm5hbF9zeXN0ZW1fcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyKFwiY29udGFpbmVyXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgIHl5LmFkZENvbnRhaW5lcihcImNvbnRhaW5lcl9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICB5eS5hZGRDb250YWluZXIoXCJjb250YWluZXJfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgeXkuYWRkQ29udGFpbmVyKFwiZXh0ZXJuYWxfY29udGFpbmVyXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHl5LmFkZENvbnRhaW5lcihcImV4dGVybmFsX2NvbnRhaW5lcl9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB5eS5hZGRDb250YWluZXIoXCJleHRlcm5hbF9jb250YWluZXJfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgeXkuYWRkQ29tcG9uZW50KFwiY29tcG9uZW50XCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgIHl5LmFkZENvbXBvbmVudChcImNvbXBvbmVudF9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICB5eS5hZGRDb21wb25lbnQoXCJjb21wb25lbnRfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgeXkuYWRkQ29tcG9uZW50KFwiZXh0ZXJuYWxfY29tcG9uZW50XCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHl5LmFkZENvbXBvbmVudChcImV4dGVybmFsX2NvbXBvbmVudF9kYlwiLCAuLi4kJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICB5eS5hZGRDb21wb25lbnQoXCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYxOlxuICAgICAgICAgIHl5LmFkZFJlbChcImJpcmVsXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF91XCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9kXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9sXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9yXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIHl5LmFkZFJlbChcInJlbF9iXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICQkWyQwXS5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgeXkuYWRkUmVsKFwicmVsXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHl5LnVwZGF0ZUVsU3R5bGUoXCJ1cGRhdGVfZWxfc3R5bGVcIiwgLi4uJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgeXkudXBkYXRlUmVsU3R5bGUoXCJ1cGRhdGVfcmVsX3N0eWxlXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgIHl5LnVwZGF0ZUxheW91dENvbmZpZyhcInVwZGF0ZV9sYXlvdXRfY29uZmlnXCIsIC4uLiQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICQkWyQwXS51bnNoaWZ0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgIGxldCBrdiA9IHt9O1xuICAgICAgICAgIGt2WyQkWyQwIC0gMV0udHJpbSgpXSA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgdGhpcy4kID0ga3Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgdGhpcy4kID0gXCJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgNTogMywgNjogWzEsIDVdLCA3OiBbMSwgNl0sIDg6IFsxLCA3XSwgOTogWzEsIDhdLCAxMDogNCwgMTE6IFsxLCA5XSwgMTU6IFsxLCAxMF0sIDE2OiBbMSwgMTFdLCAxNzogWzEsIDEyXSwgMTg6IFsxLCAxM10gfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgN10gfSwgeyAxOiBbMiwgM10gfSwgeyAxOiBbMiwgNF0gfSwgeyAxOiBbMiwgNV0gfSwgeyAxOiBbMiwgNl0gfSwgeyAxMjogWzEsIDE0XSB9LCB7IDEyOiBbMSwgMTVdIH0sIHsgMTI6IFsxLCAxNl0gfSwgeyAxMjogWzEsIDE3XSB9LCB7IDEyOiBbMSwgMThdIH0sIHsgMTM6IDE5LCAxOTogMjAsIDIwOiAyMSwgMjE6IDIyLCAyMjogJFYwLCAyMzogJFYxLCAyNDogJFYyLCAyNjogJFYzLCAyODogJFY0LCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0MzogMjMsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmksIDUxOiAkVmosIDUyOiAkVmssIDUzOiAkVmwsIDU0OiAkVm0sIDU1OiAkVm4sIDU2OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDU5OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYyOiAkVnUsIDYzOiAkVnYsIDY0OiAkVncsIDY1OiAkVngsIDY2OiAkVnksIDY3OiAkVnosIDY4OiAkVkEsIDY5OiAkVkIsIDcwOiAkVkMsIDcxOiAkVkQsIDcyOiAkVkUsIDczOiAkVkYsIDc0OiAkVkcgfSwgeyAxMzogNzAsIDE5OiAyMCwgMjA6IDIxLCAyMTogMjIsIDIyOiAkVjAsIDIzOiAkVjEsIDI0OiAkVjIsIDI2OiAkVjMsIDI4OiAkVjQsIDI5OiA0OSwgMzA6IDYxLCAzMjogNjIsIDM0OiAkVjUsIDM2OiAkVjYsIDM3OiAkVjcsIDM4OiAkVjgsIDM5OiAkVjksIDQwOiAkVmEsIDQxOiAkVmIsIDQzOiAyMywgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSwgNTE6ICRWaiwgNTI6ICRWaywgNTM6ICRWbCwgNTQ6ICRWbSwgNTU6ICRWbiwgNTY6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNTk6ICRWciwgNjA6ICRWcywgNjE6ICRWdCwgNjI6ICRWdSwgNjM6ICRWdiwgNjQ6ICRWdywgNjU6ICRWeCwgNjY6ICRWeSwgNjc6ICRWeiwgNjg6ICRWQSwgNjk6ICRWQiwgNzA6ICRWQywgNzE6ICRWRCwgNzI6ICRWRSwgNzM6ICRWRiwgNzQ6ICRWRyB9LCB7IDEzOiA3MSwgMTk6IDIwLCAyMDogMjEsIDIxOiAyMiwgMjI6ICRWMCwgMjM6ICRWMSwgMjQ6ICRWMiwgMjY6ICRWMywgMjg6ICRWNCwgMjk6IDQ5LCAzMDogNjEsIDMyOiA2MiwgMzQ6ICRWNSwgMzY6ICRWNiwgMzc6ICRWNywgMzg6ICRWOCwgMzk6ICRWOSwgNDA6ICRWYSwgNDE6ICRWYiwgNDM6IDIzLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpLCA1MTogJFZqLCA1MjogJFZrLCA1MzogJFZsLCA1NDogJFZtLCA1NTogJFZuLCA1NjogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA1OTogJFZyLCA2MDogJFZzLCA2MTogJFZ0LCA2MjogJFZ1LCA2MzogJFZ2LCA2NDogJFZ3LCA2NTogJFZ4LCA2NjogJFZ5LCA2NzogJFZ6LCA2ODogJFZBLCA2OTogJFZCLCA3MDogJFZDLCA3MTogJFZELCA3MjogJFZFLCA3MzogJFZGLCA3NDogJFZHIH0sIHsgMTM6IDcyLCAxOTogMjAsIDIwOiAyMSwgMjE6IDIyLCAyMjogJFYwLCAyMzogJFYxLCAyNDogJFYyLCAyNjogJFYzLCAyODogJFY0LCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0MzogMjMsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmksIDUxOiAkVmosIDUyOiAkVmssIDUzOiAkVmwsIDU0OiAkVm0sIDU1OiAkVm4sIDU2OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDU5OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYyOiAkVnUsIDYzOiAkVnYsIDY0OiAkVncsIDY1OiAkVngsIDY2OiAkVnksIDY3OiAkVnosIDY4OiAkVkEsIDY5OiAkVkIsIDcwOiAkVkMsIDcxOiAkVkQsIDcyOiAkVkUsIDczOiAkVkYsIDc0OiAkVkcgfSwgeyAxMzogNzMsIDE5OiAyMCwgMjA6IDIxLCAyMTogMjIsIDIyOiAkVjAsIDIzOiAkVjEsIDI0OiAkVjIsIDI2OiAkVjMsIDI4OiAkVjQsIDI5OiA0OSwgMzA6IDYxLCAzMjogNjIsIDM0OiAkVjUsIDM2OiAkVjYsIDM3OiAkVjcsIDM4OiAkVjgsIDM5OiAkVjksIDQwOiAkVmEsIDQxOiAkVmIsIDQzOiAyMywgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSwgNTE6ICRWaiwgNTI6ICRWaywgNTM6ICRWbCwgNTQ6ICRWbSwgNTU6ICRWbiwgNTY6ICRWbywgNTc6ICRWcCwgNTg6ICRWcSwgNTk6ICRWciwgNjA6ICRWcywgNjE6ICRWdCwgNjI6ICRWdSwgNjM6ICRWdiwgNjQ6ICRWdywgNjU6ICRWeCwgNjY6ICRWeSwgNjc6ICRWeiwgNjg6ICRWQSwgNjk6ICRWQiwgNzA6ICRWQywgNzE6ICRWRCwgNzI6ICRWRSwgNzM6ICRWRiwgNzQ6ICRWRyB9LCB7IDE0OiBbMSwgNzRdIH0sIG8oJFZILCBbMiwgMTNdLCB7IDQzOiAyMywgMjk6IDQ5LCAzMDogNjEsIDMyOiA2MiwgMjA6IDc1LCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpLCA1MTogJFZqLCA1MjogJFZrLCA1MzogJFZsLCA1NDogJFZtLCA1NTogJFZuLCA1NjogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA1OTogJFZyLCA2MDogJFZzLCA2MTogJFZ0LCA2MjogJFZ1LCA2MzogJFZ2LCA2NDogJFZ3LCA2NTogJFZ4LCA2NjogJFZ5LCA2NzogJFZ6LCA2ODogJFZBLCA2OTogJFZCLCA3MDogJFZDLCA3MTogJFZELCA3MjogJFZFLCA3MzogJFZGLCA3NDogJFZHIH0pLCBvKCRWSCwgWzIsIDE0XSksIG8oJFZJLCBbMiwgMTZdLCB7IDEyOiBbMSwgNzZdIH0pLCBvKCRWSCwgWzIsIDM2XSwgeyAxMjogWzEsIDc3XSB9KSwgbygkVkosIFsyLCAxOV0pLCBvKCRWSiwgWzIsIDIwXSksIHsgMjU6IFsxLCA3OF0gfSwgeyAyNzogWzEsIDc5XSB9LCBvKCRWSiwgWzIsIDIzXSksIHsgMzU6IDgwLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogODYsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA4NywgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDg4LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogODksIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5MCwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDkxLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogOTIsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5MywgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDk0LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogOTUsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5NiwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDk3LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogOTgsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiA5OSwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMCwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMSwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMiwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwMywgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIHsgMzU6IDEwNCwgNzU6IDgxLCA3NjogJFZLLCA3NzogJFZMLCA3OTogJFZNLCA4MDogJFZOIH0sIG8oJFZPLCBbMiwgNTldKSwgeyAzNTogMTA1LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA2LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA3LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA4LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTA5LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTEwLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTExLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTEyLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTEzLCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTE0LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAzNTogMTE1LCA3NTogODEsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSwgeyAyMDogMTE2LCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0MzogMjMsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmksIDUxOiAkVmosIDUyOiAkVmssIDUzOiAkVmwsIDU0OiAkVm0sIDU1OiAkVm4sIDU2OiAkVm8sIDU3OiAkVnAsIDU4OiAkVnEsIDU5OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYyOiAkVnUsIDYzOiAkVnYsIDY0OiAkVncsIDY1OiAkVngsIDY2OiAkVnksIDY3OiAkVnosIDY4OiAkVkEsIDY5OiAkVkIsIDcwOiAkVkMsIDcxOiAkVkQsIDcyOiAkVkUsIDczOiAkVkYsIDc0OiAkVkcgfSwgeyAxMjogWzEsIDExOF0sIDMzOiBbMSwgMTE3XSB9LCB7IDM1OiAxMTksIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjAsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjEsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjIsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjMsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjQsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDM1OiAxMjUsIDc1OiA4MSwgNzY6ICRWSywgNzc6ICRWTCwgNzk6ICRWTSwgODA6ICRWTiB9LCB7IDE0OiBbMSwgMTI2XSB9LCB7IDE0OiBbMSwgMTI3XSB9LCB7IDE0OiBbMSwgMTI4XSB9LCB7IDE0OiBbMSwgMTI5XSB9LCB7IDE6IFsyLCA4XSB9LCBvKCRWSCwgWzIsIDE1XSksIG8oJFZJLCBbMiwgMTddLCB7IDIxOiAyMiwgMTk6IDEzMCwgMjI6ICRWMCwgMjM6ICRWMSwgMjQ6ICRWMiwgMjY6ICRWMywgMjg6ICRWNCB9KSwgbygkVkgsIFsyLCAzN10sIHsgMTk6IDIwLCAyMDogMjEsIDIxOiAyMiwgNDM6IDIzLCAyOTogNDksIDMwOiA2MSwgMzI6IDYyLCAxMzogMTMxLCAyMjogJFYwLCAyMzogJFYxLCAyNDogJFYyLCAyNjogJFYzLCAyODogJFY0LCAzNDogJFY1LCAzNjogJFY2LCAzNzogJFY3LCAzODogJFY4LCAzOTogJFY5LCA0MDogJFZhLCA0MTogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpLCA1MTogJFZqLCA1MjogJFZrLCA1MzogJFZsLCA1NDogJFZtLCA1NTogJFZuLCA1NjogJFZvLCA1NzogJFZwLCA1ODogJFZxLCA1OTogJFZyLCA2MDogJFZzLCA2MTogJFZ0LCA2MjogJFZ1LCA2MzogJFZ2LCA2NDogJFZ3LCA2NTogJFZ4LCA2NjogJFZ5LCA2NzogJFZ6LCA2ODogJFZBLCA2OTogJFZCLCA3MDogJFZDLCA3MTogJFZELCA3MjogJFZFLCA3MzogJFZGLCA3NDogJFZHIH0pLCBvKCRWSiwgWzIsIDIxXSksIG8oJFZKLCBbMiwgMjJdKSwgbygkVk8sIFsyLCAzOV0pLCBvKCRWUCwgWzIsIDcxXSwgeyA3NTogODEsIDM1OiAxMzIsIDc2OiAkVkssIDc3OiAkVkwsIDc5OiAkVk0sIDgwOiAkVk4gfSksIG8oJFZRLCBbMiwgNzNdKSwgeyA3ODogWzEsIDEzM10gfSwgbygkVlEsIFsyLCA3NV0pLCBvKCRWUSwgWzIsIDc2XSksIG8oJFZPLCBbMiwgNDBdKSwgbygkVk8sIFsyLCA0MV0pLCBvKCRWTywgWzIsIDQyXSksIG8oJFZPLCBbMiwgNDNdKSwgbygkVk8sIFsyLCA0NF0pLCBvKCRWTywgWzIsIDQ1XSksIG8oJFZPLCBbMiwgNDZdKSwgbygkVk8sIFsyLCA0N10pLCBvKCRWTywgWzIsIDQ4XSksIG8oJFZPLCBbMiwgNDldKSwgbygkVk8sIFsyLCA1MF0pLCBvKCRWTywgWzIsIDUxXSksIG8oJFZPLCBbMiwgNTJdKSwgbygkVk8sIFsyLCA1M10pLCBvKCRWTywgWzIsIDU0XSksIG8oJFZPLCBbMiwgNTVdKSwgbygkVk8sIFsyLCA1Nl0pLCBvKCRWTywgWzIsIDU3XSksIG8oJFZPLCBbMiwgNThdKSwgbygkVk8sIFsyLCA2MF0pLCBvKCRWTywgWzIsIDYxXSksIG8oJFZPLCBbMiwgNjJdKSwgbygkVk8sIFsyLCA2M10pLCBvKCRWTywgWzIsIDY0XSksIG8oJFZPLCBbMiwgNjVdKSwgbygkVk8sIFsyLCA2Nl0pLCBvKCRWTywgWzIsIDY3XSksIG8oJFZPLCBbMiwgNjhdKSwgbygkVk8sIFsyLCA2OV0pLCBvKCRWTywgWzIsIDcwXSksIHsgMzE6IDEzNCwgNDI6IFsxLCAxMzVdIH0sIHsgMTI6IFsxLCAxMzZdIH0sIHsgMzM6IFsxLCAxMzddIH0sIG8oJFZSLCBbMiwgMjhdKSwgbygkVlIsIFsyLCAyOV0pLCBvKCRWUiwgWzIsIDMwXSksIG8oJFZSLCBbMiwgMzFdKSwgbygkVlIsIFsyLCAzMl0pLCBvKCRWUiwgWzIsIDMzXSksIG8oJFZSLCBbMiwgMzRdKSwgeyAxOiBbMiwgOV0gfSwgeyAxOiBbMiwgMTBdIH0sIHsgMTogWzIsIDExXSB9LCB7IDE6IFsyLCAxMl0gfSwgbygkVkksIFsyLCAxOF0pLCBvKCRWSCwgWzIsIDM4XSksIG8oJFZQLCBbMiwgNzJdKSwgbygkVlEsIFsyLCA3NF0pLCBvKCRWTywgWzIsIDI0XSksIG8oJFZPLCBbMiwgMzVdKSwgbygkVlMsIFsyLCAyNV0pLCBvKCRWUywgWzIsIDI2XSwgeyAxMjogWzEsIDEzOF0gfSksIG8oJFZTLCBbMiwgMjddKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMjogWzIsIDFdLCAzOiBbMiwgMl0sIDQ6IFsyLCA3XSwgNTogWzIsIDNdLCA2OiBbMiwgNF0sIDc6IFsyLCA1XSwgODogWzIsIDZdLCA3NDogWzIsIDhdLCAxMjY6IFsyLCA5XSwgMTI3OiBbMiwgMTBdLCAxMjg6IFsyLCAxMV0sIDEyOTogWzIsIDEyXSB9LFxuICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShwb3BTdGFjaywgXCJwb3BTdGFja1wiKTtcbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgX19uYW1lKGxleCwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwicGFyc2VcIilcbiAgfTtcbiAgdmFyIGxleGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwic2V0SW5wdXRcIiksXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LCBcImlucHV0XCIpLFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJ1bnB1dFwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcIm1vcmVcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJyZWplY3RcIiksXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LCBcImxlc3NcIiksXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwicGFzdElucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJ1cGNvbWluZ0lucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMyID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMyICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gMjI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gMjM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgYztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiAxMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBlcnNvbl9leHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBlcnNvblwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dF9kYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX2V4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3lzdGVtX3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzeXN0ZW1fZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN5c3RlbVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYm91bmRhcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gMzc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImVudGVycHJpc2VfYm91bmRhcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN5c3RlbV9ib3VuZGFyeVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dF9xdWV1ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dF9kYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2V4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb250YWluZXJfZGJcIik7XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29udGFpbmVyX2JvdW5kYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0X3F1ZXVlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0X2RiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDYxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjb21wb25lbnRfcXVldWVcIik7XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNvbXBvbmVudF9kYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA1OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY29tcG9uZW50XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJub2RlX2xcIik7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm5vZGVfclwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJiaXJlbFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX3VcIik7XG4gICAgICAgICAgICByZXR1cm4gNjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF91XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfZFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX2RcIik7XG4gICAgICAgICAgICByZXR1cm4gNjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9sXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfbFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX3JcIik7XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInJlbF9yXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJyZWxfYlwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicmVsX2luZGV4XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDcxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJ1cGRhdGVfZWxfc3R5bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gNzI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInVwZGF0ZV9yZWxfc3R5bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInVwZGF0ZV9sYXlvdXRfY29uZmlnXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDc0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICAgIHJldHVybiBcIkVPRl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYXR0cmlidXRlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVRUUklCVVRFX0VNUFRZXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImF0dHJpYnV0ZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgICAgcmV0dXJuIDgwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInN0cmluZ19rdlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nX2t2X2tleVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIlNUUl9LRVlcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nX2t2X3ZhbHVlXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiBcIlNUUl9WQUxVRVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODA6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICByZXR1cm4gXCJMQlJBQ0VcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgICByZXR1cm4gXCJSQlJBQ0VcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgICByZXR1cm4gXCJTUEFDRVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgIHJldHVybiBcIkVPTFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NTpcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzouKmRpcmVjdGlvblxccytUQlteXFxuXSopLywgL14oPzouKmRpcmVjdGlvblxccytCVFteXFxuXSopLywgL14oPzouKmRpcmVjdGlvblxccytSTFteXFxuXSopLywgL14oPzouKmRpcmVjdGlvblxccytMUlteXFxuXSopLywgL14oPzp0aXRsZVxcc1teI1xcbjtdKykvLCAvXig/OmFjY0Rlc2NyaXB0aW9uXFxzW14jXFxuO10rKS8sIC9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86JSUoPyFcXHspKlteXFxuXSooXFxyP1xcbj8pKykvLCAvXig/OiUlW15cXG5dKihcXHI/XFxuKSopLywgL14oPzpcXHMqKFxccj9cXG4pKykvLCAvXig/OlxccyspLywgL14oPzpDNENvbnRleHRcXGIpLywgL14oPzpDNENvbnRhaW5lclxcYikvLCAvXig/OkM0Q29tcG9uZW50XFxiKS8sIC9eKD86QzREeW5hbWljXFxiKS8sIC9eKD86QzREZXBsb3ltZW50XFxiKS8sIC9eKD86UGVyc29uX0V4dFxcYikvLCAvXig/OlBlcnNvblxcYikvLCAvXig/OlN5c3RlbVF1ZXVlX0V4dFxcYikvLCAvXig/OlN5c3RlbURiX0V4dFxcYikvLCAvXig/OlN5c3RlbV9FeHRcXGIpLywgL14oPzpTeXN0ZW1RdWV1ZVxcYikvLCAvXig/OlN5c3RlbURiXFxiKS8sIC9eKD86U3lzdGVtXFxiKS8sIC9eKD86Qm91bmRhcnlcXGIpLywgL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XFxiKS8sIC9eKD86U3lzdGVtX0JvdW5kYXJ5XFxiKS8sIC9eKD86Q29udGFpbmVyUXVldWVfRXh0XFxiKS8sIC9eKD86Q29udGFpbmVyRGJfRXh0XFxiKS8sIC9eKD86Q29udGFpbmVyX0V4dFxcYikvLCAvXig/OkNvbnRhaW5lclF1ZXVlXFxiKS8sIC9eKD86Q29udGFpbmVyRGJcXGIpLywgL14oPzpDb250YWluZXJcXGIpLywgL14oPzpDb250YWluZXJfQm91bmRhcnlcXGIpLywgL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcXGIpLywgL14oPzpDb21wb25lbnREYl9FeHRcXGIpLywgL14oPzpDb21wb25lbnRfRXh0XFxiKS8sIC9eKD86Q29tcG9uZW50UXVldWVcXGIpLywgL14oPzpDb21wb25lbnREYlxcYikvLCAvXig/OkNvbXBvbmVudFxcYikvLCAvXig/OkRlcGxveW1lbnRfTm9kZVxcYikvLCAvXig/Ok5vZGVcXGIpLywgL14oPzpOb2RlX0xcXGIpLywgL14oPzpOb2RlX1JcXGIpLywgL14oPzpSZWxcXGIpLywgL14oPzpCaVJlbFxcYikvLCAvXig/OlJlbF9VcFxcYikvLCAvXig/OlJlbF9VXFxiKS8sIC9eKD86UmVsX0Rvd25cXGIpLywgL14oPzpSZWxfRFxcYikvLCAvXig/OlJlbF9MZWZ0XFxiKS8sIC9eKD86UmVsX0xcXGIpLywgL14oPzpSZWxfUmlnaHRcXGIpLywgL14oPzpSZWxfUlxcYikvLCAvXig/OlJlbF9CYWNrXFxiKS8sIC9eKD86UmVsSW5kZXhcXGIpLywgL14oPzpVcGRhdGVFbGVtZW50U3R5bGVcXGIpLywgL14oPzpVcGRhdGVSZWxTdHlsZVxcYikvLCAvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xcYikvLCAvXig/OiQpLywgL14oPzpbKF1bIF0qWyxdKS8sIC9eKD86WyhdKS8sIC9eKD86WyldKS8sIC9eKD86LCwpLywgL14oPzosKS8sIC9eKD86WyBdKltcIl1bXCJdKS8sIC9eKD86WyBdKltcIl0pLywgL14oPzpbXCJdKS8sIC9eKD86W15cIl0qKS8sIC9eKD86WyBdKltcXCRdKS8sIC9eKD86W149XSopLywgL14oPzpbPV1bIF0qW1wiXSkvLCAvXig/OlteXCJdKykvLCAvXig/OltcIl0pLywgL14oPzpbXixdKykvLCAvXig/OlxceykvLCAvXig/OlxcfSkvLCAvXig/OltcXHNdKykvLCAvXig/OltcXG5cXHJdKykvLCAvXig/OiQpL10sXG4gICAgICBjb25kaXRpb25zOiB7IFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzExLCAxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbOV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nX2t2X3ZhbHVlXCI6IHsgXCJydWxlc1wiOiBbNzgsIDc5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdfa3Zfa2V5XCI6IHsgXCJydWxlc1wiOiBbNzddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ19rdlwiOiB7IFwicnVsZXNcIjogWzc2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFs3MywgNzRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImF0dHJpYnV0ZVwiOiB7IFwicnVsZXNcIjogWzY4LCA2OSwgNzAsIDcxLCA3MiwgNzUsIDgwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ1cGRhdGVfbGF5b3V0X2NvbmZpZ1wiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ1cGRhdGVfcmVsX3N0eWxlXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInVwZGF0ZV9lbF9zdHlsZVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfclwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfbFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfZFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfdVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJyZWxfYmlcIjogeyBcInJ1bGVzXCI6IFtdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInJlbFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJub2RlX3JcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibm9kZV9sXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm5vZGVcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiaW5kZXhcIjogeyBcInJ1bGVzXCI6IFtdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInJlbF9pbmRleFwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRfZXh0X3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRfZXh0X2RiXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbXBvbmVudF9leHRcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29tcG9uZW50X3F1ZXVlXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbXBvbmVudF9kYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb21wb25lbnRcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyX2JvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9leHRfcXVldWVcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyX2V4dF9kYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJfZXh0XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbnRhaW5lcl9xdWV1ZVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjb250YWluZXJfZGJcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY29udGFpbmVyXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImJpcmVsXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9ib3VuZGFyeVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJlbnRlcnByaXNlX2JvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImJvdW5kYXJ5XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9leHRfcXVldWVcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtX2V4dF9kYlwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzeXN0ZW1fZXh0XCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN5c3RlbV9xdWV1ZVwiOiB7IFwicnVsZXNcIjogWzY1LCA2NiwgNjcsIDY4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzeXN0ZW1fZGJcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3lzdGVtXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInBlcnNvbl9leHRcIjogeyBcInJ1bGVzXCI6IFs2NSwgNjYsIDY3LCA2OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicGVyc29uXCI6IHsgXCJydWxlc1wiOiBbNjUsIDY2LCA2NywgNjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDgxLCA4MiwgODMsIDg0LCA4NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBjNERpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2M0L2M0RGIuanNcbnZhciBjNFNoYXBlQXJyYXkgPSBbXTtcbnZhciBib3VuZGFyeVBhcnNlU3RhY2sgPSBbXCJcIl07XG52YXIgY3VycmVudEJvdW5kYXJ5UGFyc2UgPSBcImdsb2JhbFwiO1xudmFyIHBhcmVudEJvdW5kYXJ5UGFyc2UgPSBcIlwiO1xudmFyIGJvdW5kYXJpZXMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJnbG9iYWxcIixcbiAgICBsYWJlbDogeyB0ZXh0OiBcImdsb2JhbFwiIH0sXG4gICAgdHlwZTogeyB0ZXh0OiBcImdsb2JhbFwiIH0sXG4gICAgdGFnczogbnVsbCxcbiAgICBsaW5rOiBudWxsLFxuICAgIHBhcmVudEJvdW5kYXJ5OiBcIlwiXG4gIH1cbl07XG52YXIgcmVscyA9IFtdO1xudmFyIHRpdGxlID0gXCJcIjtcbnZhciB3cmFwRW5hYmxlZCA9IGZhbHNlO1xudmFyIGM0U2hhcGVJblJvdyA9IDQ7XG52YXIgYzRCb3VuZGFyeUluUm93ID0gMjtcbnZhciBjNFR5cGU7XG52YXIgZ2V0QzRUeXBlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGM0VHlwZTtcbn0sIFwiZ2V0QzRUeXBlXCIpO1xudmFyIHNldEM0VHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYzRUeXBlUGFyYW0pIHtcbiAgbGV0IHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZVRleHQoYzRUeXBlUGFyYW0sIGdldENvbmZpZygpKTtcbiAgYzRUeXBlID0gc2FuaXRpemVkVGV4dDtcbn0sIFwic2V0QzRUeXBlXCIpO1xudmFyIGFkZFJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZSwgZnJvbSwgdG8sIGxhYmVsLCB0ZWNobiwgZGVzY3IsIHNwcml0ZSwgdGFncywgbGluaykge1xuICBpZiAodHlwZSA9PT0gdm9pZCAwIHx8IHR5cGUgPT09IG51bGwgfHwgZnJvbSA9PT0gdm9pZCAwIHx8IGZyb20gPT09IG51bGwgfHwgdG8gPT09IHZvaWQgMCB8fCB0byA9PT0gbnVsbCB8fCBsYWJlbCA9PT0gdm9pZCAwIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCByZWwgPSB7fTtcbiAgY29uc3Qgb2xkID0gcmVscy5maW5kKChyZWwyKSA9PiByZWwyLmZyb20gPT09IGZyb20gJiYgcmVsMi50byA9PT0gdG8pO1xuICBpZiAob2xkKSB7XG4gICAgcmVsID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIHJlbHMucHVzaChyZWwpO1xuICB9XG4gIHJlbC50eXBlID0gdHlwZTtcbiAgcmVsLmZyb20gPSBmcm9tO1xuICByZWwudG8gPSB0bztcbiAgcmVsLmxhYmVsID0geyB0ZXh0OiBsYWJlbCB9O1xuICBpZiAodGVjaG4gPT09IHZvaWQgMCB8fCB0ZWNobiA9PT0gbnVsbCkge1xuICAgIHJlbC50ZWNobiA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGVjaG4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0ZWNobilbMF07XG4gICAgICByZWxba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVsLnRlY2huID0geyB0ZXh0OiB0ZWNobiB9O1xuICAgIH1cbiAgfVxuICBpZiAoZGVzY3IgPT09IHZvaWQgMCB8fCBkZXNjciA9PT0gbnVsbCkge1xuICAgIHJlbC5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICByZWxba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVsLmRlc2NyID0geyB0ZXh0OiBkZXNjciB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzcHJpdGUpWzBdO1xuICAgIHJlbFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmVsLnNwcml0ZSA9IHNwcml0ZTtcbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgcmVsW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZWwudGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIHJlbFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmVsLmxpbmsgPSBsaW5rO1xuICB9XG4gIHJlbC53cmFwID0gYXV0b1dyYXAoKTtcbn0sIFwiYWRkUmVsXCIpO1xudmFyIGFkZFBlcnNvbk9yU3lzdGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eXBlQzRTaGFwZSwgYWxpYXMsIGxhYmVsLCBkZXNjciwgc3ByaXRlLCB0YWdzLCBsaW5rKSB7XG4gIGlmIChhbGlhcyA9PT0gbnVsbCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgcGVyc29uT3JTeXN0ZW0gPSB7fTtcbiAgY29uc3Qgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKHBlcnNvbk9yU3lzdGVtMikgPT4gcGVyc29uT3JTeXN0ZW0yLmFsaWFzID09PSBhbGlhcyk7XG4gIGlmIChvbGQgJiYgYWxpYXMgPT09IG9sZC5hbGlhcykge1xuICAgIHBlcnNvbk9yU3lzdGVtID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIHBlcnNvbk9yU3lzdGVtLmFsaWFzID0gYWxpYXM7XG4gICAgYzRTaGFwZUFycmF5LnB1c2gocGVyc29uT3JTeXN0ZW0pO1xuICB9XG4gIGlmIChsYWJlbCA9PT0gdm9pZCAwIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcGVyc29uT3JTeXN0ZW0ubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS5sYWJlbCA9IHsgdGV4dDogbGFiZWwgfTtcbiAgfVxuICBpZiAoZGVzY3IgPT09IHZvaWQgMCB8fCBkZXNjciA9PT0gbnVsbCkge1xuICAgIHBlcnNvbk9yU3lzdGVtLmRlc2NyID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGRlc2NyKVswXTtcbiAgICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcnNvbk9yU3lzdGVtLmRlc2NyID0geyB0ZXh0OiBkZXNjciB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzcHJpdGUpWzBdO1xuICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS5zcHJpdGUgPSBzcHJpdGU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIHBlcnNvbk9yU3lzdGVtW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwZXJzb25PclN5c3RlbS50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgcGVyc29uT3JTeXN0ZW1ba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHBlcnNvbk9yU3lzdGVtLmxpbmsgPSBsaW5rO1xuICB9XG4gIHBlcnNvbk9yU3lzdGVtLnR5cGVDNFNoYXBlID0geyB0ZXh0OiB0eXBlQzRTaGFwZSB9O1xuICBwZXJzb25PclN5c3RlbS5wYXJlbnRCb3VuZGFyeSA9IGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xuICBwZXJzb25PclN5c3RlbS53cmFwID0gYXV0b1dyYXAoKTtcbn0sIFwiYWRkUGVyc29uT3JTeXN0ZW1cIik7XG52YXIgYWRkQ29udGFpbmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eXBlQzRTaGFwZSwgYWxpYXMsIGxhYmVsLCB0ZWNobiwgZGVzY3IsIHNwcml0ZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGNvbnRhaW5lciA9IHt9O1xuICBjb25zdCBvbGQgPSBjNFNoYXBlQXJyYXkuZmluZCgoY29udGFpbmVyMikgPT4gY29udGFpbmVyMi5hbGlhcyA9PT0gYWxpYXMpO1xuICBpZiAob2xkICYmIGFsaWFzID09PSBvbGQuYWxpYXMpIHtcbiAgICBjb250YWluZXIgPSBvbGQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmFsaWFzID0gYWxpYXM7XG4gICAgYzRTaGFwZUFycmF5LnB1c2goY29udGFpbmVyKTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5sYWJlbCA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5sYWJlbCA9IHsgdGV4dDogbGFiZWwgfTtcbiAgfVxuICBpZiAodGVjaG4gPT09IHZvaWQgMCB8fCB0ZWNobiA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci50ZWNobiA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGVjaG4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0ZWNobilbMF07XG4gICAgICBjb250YWluZXJba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnRlY2huID0geyB0ZXh0OiB0ZWNobiB9O1xuICAgIH1cbiAgfVxuICBpZiAoZGVzY3IgPT09IHZvaWQgMCB8fCBkZXNjciA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICBjb250YWluZXJba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLmRlc2NyID0geyB0ZXh0OiBkZXNjciB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHNwcml0ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzcHJpdGUpWzBdO1xuICAgIGNvbnRhaW5lcltrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnNwcml0ZSA9IHNwcml0ZTtcbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgY29udGFpbmVyW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIudGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIGNvbnRhaW5lcltrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmxpbmsgPSBsaW5rO1xuICB9XG4gIGNvbnRhaW5lci53cmFwID0gYXV0b1dyYXAoKTtcbiAgY29udGFpbmVyLnR5cGVDNFNoYXBlID0geyB0ZXh0OiB0eXBlQzRTaGFwZSB9O1xuICBjb250YWluZXIucGFyZW50Qm91bmRhcnkgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbn0sIFwiYWRkQ29udGFpbmVyXCIpO1xudmFyIGFkZENvbXBvbmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZUM0U2hhcGUsIGFsaWFzLCBsYWJlbCwgdGVjaG4sIGRlc2NyLCBzcHJpdGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBjb21wb25lbnQgPSB7fTtcbiAgY29uc3Qgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKGNvbXBvbmVudDIpID0+IGNvbXBvbmVudDIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgY29tcG9uZW50ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5hbGlhcyA9IGFsaWFzO1xuICAgIGM0U2hhcGVBcnJheS5wdXNoKGNvbXBvbmVudCk7XG4gIH1cbiAgaWYgKGxhYmVsID09PSB2b2lkIDAgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnQubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHRlY2huID09PSB2b2lkIDAgfHwgdGVjaG4gPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQudGVjaG4gPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRlY2huID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGVjaG4pWzBdO1xuICAgICAgY29tcG9uZW50W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC50ZWNobiA9IHsgdGV4dDogdGVjaG4gfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnQuZGVzY3IgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoZGVzY3IpWzBdO1xuICAgICAgY29tcG9uZW50W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBzcHJpdGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICBjb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5zcHJpdGUgPSBzcHJpdGU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGNvbXBvbmVudFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgY29tcG9uZW50LnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBjb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudC5saW5rID0gbGluaztcbiAgfVxuICBjb21wb25lbnQud3JhcCA9IGF1dG9XcmFwKCk7XG4gIGNvbXBvbmVudC50eXBlQzRTaGFwZSA9IHsgdGV4dDogdHlwZUM0U2hhcGUgfTtcbiAgY29tcG9uZW50LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG59LCBcImFkZENvbXBvbmVudFwiKTtcbnZhciBhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhbGlhcywgbGFiZWwsIHR5cGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBib3VuZGFyeSA9IHt9O1xuICBjb25zdCBvbGQgPSBib3VuZGFyaWVzLmZpbmQoKGJvdW5kYXJ5MikgPT4gYm91bmRhcnkyLmFsaWFzID09PSBhbGlhcyk7XG4gIGlmIChvbGQgJiYgYWxpYXMgPT09IG9sZC5hbGlhcykge1xuICAgIGJvdW5kYXJ5ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmFsaWFzID0gYWxpYXM7XG4gICAgYm91bmRhcmllcy5wdXNoKGJvdW5kYXJ5KTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IHZvaWQgMCB8fCB0eXBlID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogXCJzeXN0ZW1cIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHR5cGUpWzBdO1xuICAgICAgYm91bmRhcnlba2V5XSA9IHsgdGV4dDogdmFsdWUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogdHlwZSB9O1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHRhZ3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGFncylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LnRhZ3MgPSB0YWdzO1xuICB9XG4gIGlmICh0eXBlb2YgbGluayA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsaW5rKVswXTtcbiAgICBib3VuZGFyeVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGluayA9IGxpbms7XG4gIH1cbiAgYm91bmRhcnkucGFyZW50Qm91bmRhcnkgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgYm91bmRhcnkud3JhcCA9IGF1dG9XcmFwKCk7XG4gIHBhcmVudEJvdW5kYXJ5UGFyc2UgPSBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbiAgY3VycmVudEJvdW5kYXJ5UGFyc2UgPSBhbGlhcztcbiAgYm91bmRhcnlQYXJzZVN0YWNrLnB1c2gocGFyZW50Qm91bmRhcnlQYXJzZSk7XG59LCBcImFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnlcIik7XG52YXIgYWRkQ29udGFpbmVyQm91bmRhcnkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGFsaWFzLCBsYWJlbCwgdHlwZSwgdGFncywgbGluaykge1xuICBpZiAoYWxpYXMgPT09IG51bGwgfHwgbGFiZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGJvdW5kYXJ5ID0ge307XG4gIGNvbnN0IG9sZCA9IGJvdW5kYXJpZXMuZmluZCgoYm91bmRhcnkyKSA9PiBib3VuZGFyeTIuYWxpYXMgPT09IGFsaWFzKTtcbiAgaWYgKG9sZCAmJiBhbGlhcyA9PT0gb2xkLmFsaWFzKSB7XG4gICAgYm91bmRhcnkgPSBvbGQ7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkuYWxpYXMgPSBhbGlhcztcbiAgICBib3VuZGFyaWVzLnB1c2goYm91bmRhcnkpO1xuICB9XG4gIGlmIChsYWJlbCA9PT0gdm9pZCAwIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IFwiXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS5sYWJlbCA9IHsgdGV4dDogbGFiZWwgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gdm9pZCAwIHx8IHR5cGUgPT09IG51bGwpIHtcbiAgICBib3VuZGFyeS50eXBlID0geyB0ZXh0OiBcImNvbnRhaW5lclwiIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModHlwZSlbMF07XG4gICAgICBib3VuZGFyeVtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZGFyeS50eXBlID0geyB0ZXh0OiB0eXBlIH07XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgdGFncyA9PT0gXCJvYmplY3RcIikge1xuICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0YWdzKVswXTtcbiAgICBib3VuZGFyeVtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkudGFncyA9IHRhZ3M7XG4gIH1cbiAgaWYgKHR5cGVvZiBsaW5rID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmspWzBdO1xuICAgIGJvdW5kYXJ5W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS5saW5rID0gbGluaztcbiAgfVxuICBib3VuZGFyeS5wYXJlbnRCb3VuZGFyeSA9IGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xuICBib3VuZGFyeS53cmFwID0gYXV0b1dyYXAoKTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IGN1cnJlbnRCb3VuZGFyeVBhcnNlO1xuICBjdXJyZW50Qm91bmRhcnlQYXJzZSA9IGFsaWFzO1xuICBib3VuZGFyeVBhcnNlU3RhY2sucHVzaChwYXJlbnRCb3VuZGFyeVBhcnNlKTtcbn0sIFwiYWRkQ29udGFpbmVyQm91bmRhcnlcIik7XG52YXIgYWRkRGVwbG95bWVudE5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG5vZGVUeXBlLCBhbGlhcywgbGFiZWwsIHR5cGUsIGRlc2NyLCBzcHJpdGUsIHRhZ3MsIGxpbmspIHtcbiAgaWYgKGFsaWFzID09PSBudWxsIHx8IGxhYmVsID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBib3VuZGFyeSA9IHt9O1xuICBjb25zdCBvbGQgPSBib3VuZGFyaWVzLmZpbmQoKGJvdW5kYXJ5MikgPT4gYm91bmRhcnkyLmFsaWFzID09PSBhbGlhcyk7XG4gIGlmIChvbGQgJiYgYWxpYXMgPT09IG9sZC5hbGlhcykge1xuICAgIGJvdW5kYXJ5ID0gb2xkO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmFsaWFzID0gYWxpYXM7XG4gICAgYm91bmRhcmllcy5wdXNoKGJvdW5kYXJ5KTtcbiAgfVxuICBpZiAobGFiZWwgPT09IHZvaWQgMCB8fCBsYWJlbCA9PT0gbnVsbCkge1xuICAgIGJvdW5kYXJ5LmxhYmVsID0geyB0ZXh0OiBcIlwiIH07XG4gIH0gZWxzZSB7XG4gICAgYm91bmRhcnkubGFiZWwgPSB7IHRleHQ6IGxhYmVsIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IHZvaWQgMCB8fCB0eXBlID09PSBudWxsKSB7XG4gICAgYm91bmRhcnkudHlwZSA9IHsgdGV4dDogXCJub2RlXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyh0eXBlKVswXTtcbiAgICAgIGJvdW5kYXJ5W2tleV0gPSB7IHRleHQ6IHZhbHVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdW5kYXJ5LnR5cGUgPSB7IHRleHQ6IHR5cGUgfTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyID09PSB2b2lkIDAgfHwgZGVzY3IgPT09IG51bGwpIHtcbiAgICBib3VuZGFyeS5kZXNjciA9IHsgdGV4dDogXCJcIiB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhkZXNjcilbMF07XG4gICAgICBib3VuZGFyeVtrZXldID0geyB0ZXh0OiB2YWx1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZGFyeS5kZXNjciA9IHsgdGV4dDogZGVzY3IgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB0YWdzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRhZ3MpWzBdO1xuICAgIGJvdW5kYXJ5W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBib3VuZGFyeS50YWdzID0gdGFncztcbiAgfVxuICBpZiAodHlwZW9mIGxpbmsgPT09IFwib2JqZWN0XCIpIHtcbiAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGluaylbMF07XG4gICAgYm91bmRhcnlba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kYXJ5LmxpbmsgPSBsaW5rO1xuICB9XG4gIGJvdW5kYXJ5Lm5vZGVUeXBlID0gbm9kZVR5cGU7XG4gIGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5LndyYXAgPSBhdXRvV3JhcCgpO1xuICBwYXJlbnRCb3VuZGFyeVBhcnNlID0gY3VycmVudEJvdW5kYXJ5UGFyc2U7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gYWxpYXM7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wdXNoKHBhcmVudEJvdW5kYXJ5UGFyc2UpO1xufSwgXCJhZGREZXBsb3ltZW50Tm9kZVwiKTtcbnZhciBwb3BCb3VuZGFyeVBhcnNlU3RhY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBjdXJyZW50Qm91bmRhcnlQYXJzZSA9IHBhcmVudEJvdW5kYXJ5UGFyc2U7XG4gIGJvdW5kYXJ5UGFyc2VTdGFjay5wb3AoKTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IGJvdW5kYXJ5UGFyc2VTdGFjay5wb3AoKTtcbiAgYm91bmRhcnlQYXJzZVN0YWNrLnB1c2gocGFyZW50Qm91bmRhcnlQYXJzZSk7XG59LCBcInBvcEJvdW5kYXJ5UGFyc2VTdGFja1wiKTtcbnZhciB1cGRhdGVFbFN0eWxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eXBlQzRTaGFwZSwgZWxlbWVudE5hbWUsIGJnQ29sb3IsIGZvbnRDb2xvciwgYm9yZGVyQ29sb3IsIHNoYWRvd2luZywgc2hhcGUsIHNwcml0ZSwgdGVjaG4sIGxlZ2VuZFRleHQsIGxlZ2VuZFNwcml0ZSkge1xuICBsZXQgb2xkID0gYzRTaGFwZUFycmF5LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuYWxpYXMgPT09IGVsZW1lbnROYW1lKTtcbiAgaWYgKG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgb2xkID0gYm91bmRhcmllcy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmFsaWFzID09PSBlbGVtZW50TmFtZSk7XG4gICAgaWYgKG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmIChiZ0NvbG9yICE9PSB2b2lkIDAgJiYgYmdDb2xvciAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgYmdDb2xvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGJnQ29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLmJnQ29sb3IgPSBiZ0NvbG9yO1xuICAgIH1cbiAgfVxuICBpZiAoZm9udENvbG9yICE9PSB2b2lkIDAgJiYgZm9udENvbG9yICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBmb250Q29sb3IgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhmb250Q29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgICB9XG4gIH1cbiAgaWYgKGJvcmRlckNvbG9yICE9PSB2b2lkIDAgJiYgYm9yZGVyQ29sb3IgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGJvcmRlckNvbG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoYm9yZGVyQ29sb3IpWzBdO1xuICAgICAgb2xkW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkLmJvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7XG4gICAgfVxuICB9XG4gIGlmIChzaGFkb3dpbmcgIT09IHZvaWQgMCAmJiBzaGFkb3dpbmcgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHNoYWRvd2luZyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHNoYWRvd2luZylbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQuc2hhZG93aW5nID0gc2hhZG93aW5nO1xuICAgIH1cbiAgfVxuICBpZiAoc2hhcGUgIT09IHZvaWQgMCAmJiBzaGFwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygc2hhcGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhzaGFwZSlbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQuc2hhcGUgPSBzaGFwZTtcbiAgICB9XG4gIH1cbiAgaWYgKHNwcml0ZSAhPT0gdm9pZCAwICYmIHNwcml0ZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygc3ByaXRlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMoc3ByaXRlKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5zcHJpdGUgPSBzcHJpdGU7XG4gICAgfVxuICB9XG4gIGlmICh0ZWNobiAhPT0gdm9pZCAwICYmIHRlY2huICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiB0ZWNobiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKHRlY2huKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC50ZWNobiA9IHRlY2huO1xuICAgIH1cbiAgfVxuICBpZiAobGVnZW5kVGV4dCAhPT0gdm9pZCAwICYmIGxlZ2VuZFRleHQgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGxlZ2VuZFRleHQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhsZWdlbmRUZXh0KVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5sZWdlbmRUZXh0ID0gbGVnZW5kVGV4dDtcbiAgICB9XG4gIH1cbiAgaWYgKGxlZ2VuZFNwcml0ZSAhPT0gdm9pZCAwICYmIGxlZ2VuZFNwcml0ZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgbGVnZW5kU3ByaXRlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXMobGVnZW5kU3ByaXRlKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC5sZWdlbmRTcHJpdGUgPSBsZWdlbmRTcHJpdGU7XG4gICAgfVxuICB9XG59LCBcInVwZGF0ZUVsU3R5bGVcIik7XG52YXIgdXBkYXRlUmVsU3R5bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR5cGVDNFNoYXBlLCBmcm9tLCB0bywgdGV4dENvbG9yLCBsaW5lQ29sb3IsIG9mZnNldFgsIG9mZnNldFkpIHtcbiAgY29uc3Qgb2xkID0gcmVscy5maW5kKChyZWwpID0+IHJlbC5mcm9tID09PSBmcm9tICYmIHJlbC50byA9PT0gdG8pO1xuICBpZiAob2xkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRleHRDb2xvciAhPT0gdm9pZCAwICYmIHRleHRDb2xvciAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgdGV4dENvbG9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBsZXQgW2tleSwgdmFsdWVdID0gT2JqZWN0LmVudHJpZXModGV4dENvbG9yKVswXTtcbiAgICAgIG9sZFtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZC50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgfVxuICB9XG4gIGlmIChsaW5lQ29sb3IgIT09IHZvaWQgMCAmJiBsaW5lQ29sb3IgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGxpbmVDb2xvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKGxpbmVDb2xvcilbMF07XG4gICAgICBvbGRba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIH1cbiAgfVxuICBpZiAob2Zmc2V0WCAhPT0gdm9pZCAwICYmIG9mZnNldFggIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9mZnNldFggPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhvZmZzZXRYKVswXTtcbiAgICAgIG9sZFtrZXldID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQub2Zmc2V0WCA9IHBhcnNlSW50KG9mZnNldFgpO1xuICAgIH1cbiAgfVxuICBpZiAob2Zmc2V0WSAhPT0gdm9pZCAwICYmIG9mZnNldFkgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9mZnNldFkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBPYmplY3QuZW50cmllcyhvZmZzZXRZKVswXTtcbiAgICAgIG9sZFtrZXldID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGQub2Zmc2V0WSA9IHBhcnNlSW50KG9mZnNldFkpO1xuICAgIH1cbiAgfVxufSwgXCJ1cGRhdGVSZWxTdHlsZVwiKTtcbnZhciB1cGRhdGVMYXlvdXRDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR5cGVDNFNoYXBlLCBjNFNoYXBlSW5Sb3dQYXJhbSwgYzRCb3VuZGFyeUluUm93UGFyYW0pIHtcbiAgbGV0IGM0U2hhcGVJblJvd1ZhbHVlID0gYzRTaGFwZUluUm93O1xuICBsZXQgYzRCb3VuZGFyeUluUm93VmFsdWUgPSBjNEJvdW5kYXJ5SW5Sb3c7XG4gIGlmICh0eXBlb2YgYzRTaGFwZUluUm93UGFyYW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoYzRTaGFwZUluUm93UGFyYW0pWzBdO1xuICAgIGM0U2hhcGVJblJvd1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGM0U2hhcGVJblJvd1ZhbHVlID0gcGFyc2VJbnQoYzRTaGFwZUluUm93UGFyYW0pO1xuICB9XG4gIGlmICh0eXBlb2YgYzRCb3VuZGFyeUluUm93UGFyYW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoYzRCb3VuZGFyeUluUm93UGFyYW0pWzBdO1xuICAgIGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGM0Qm91bmRhcnlJblJvd1ZhbHVlID0gcGFyc2VJbnQoYzRCb3VuZGFyeUluUm93UGFyYW0pO1xuICB9XG4gIGlmIChjNFNoYXBlSW5Sb3dWYWx1ZSA+PSAxKSB7XG4gICAgYzRTaGFwZUluUm93ID0gYzRTaGFwZUluUm93VmFsdWU7XG4gIH1cbiAgaWYgKGM0Qm91bmRhcnlJblJvd1ZhbHVlID49IDEpIHtcbiAgICBjNEJvdW5kYXJ5SW5Sb3cgPSBjNEJvdW5kYXJ5SW5Sb3dWYWx1ZTtcbiAgfVxufSwgXCJ1cGRhdGVMYXlvdXRDb25maWdcIik7XG52YXIgZ2V0QzRTaGFwZUluUm93ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGM0U2hhcGVJblJvdztcbn0sIFwiZ2V0QzRTaGFwZUluUm93XCIpO1xudmFyIGdldEM0Qm91bmRhcnlJblJvdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjNEJvdW5kYXJ5SW5Sb3c7XG59LCBcImdldEM0Qm91bmRhcnlJblJvd1wiKTtcbnZhciBnZXRDdXJyZW50Qm91bmRhcnlQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjdXJyZW50Qm91bmRhcnlQYXJzZTtcbn0sIFwiZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2VcIik7XG52YXIgZ2V0UGFyZW50Qm91bmRhcnlQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwYXJlbnRCb3VuZGFyeVBhcnNlO1xufSwgXCJnZXRQYXJlbnRCb3VuZGFyeVBhcnNlXCIpO1xudmFyIGdldEM0U2hhcGVBcnJheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFyZW50Qm91bmRhcnkpIHtcbiAgaWYgKHBhcmVudEJvdW5kYXJ5ID09PSB2b2lkIDAgfHwgcGFyZW50Qm91bmRhcnkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYzRTaGFwZUFycmF5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjNFNoYXBlQXJyYXkuZmlsdGVyKChwZXJzb25PclN5c3RlbSkgPT4ge1xuICAgICAgcmV0dXJuIHBlcnNvbk9yU3lzdGVtLnBhcmVudEJvdW5kYXJ5ID09PSBwYXJlbnRCb3VuZGFyeTtcbiAgICB9KTtcbiAgfVxufSwgXCJnZXRDNFNoYXBlQXJyYXlcIik7XG52YXIgZ2V0QzRTaGFwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWxpYXMpIHtcbiAgcmV0dXJuIGM0U2hhcGVBcnJheS5maW5kKChwZXJzb25PclN5c3RlbSkgPT4gcGVyc29uT3JTeXN0ZW0uYWxpYXMgPT09IGFsaWFzKTtcbn0sIFwiZ2V0QzRTaGFwZVwiKTtcbnZhciBnZXRDNFNoYXBlS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFyZW50Qm91bmRhcnkpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGdldEM0U2hhcGVBcnJheShwYXJlbnRCb3VuZGFyeSkpO1xufSwgXCJnZXRDNFNoYXBlS2V5c1wiKTtcbnZhciBnZXRCb3VuZGFyaWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwYXJlbnRCb3VuZGFyeSkge1xuICBpZiAocGFyZW50Qm91bmRhcnkgPT09IHZvaWQgMCB8fCBwYXJlbnRCb3VuZGFyeSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBib3VuZGFyaWVzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBib3VuZGFyaWVzLmZpbHRlcigoYm91bmRhcnkpID0+IGJvdW5kYXJ5LnBhcmVudEJvdW5kYXJ5ID09PSBwYXJlbnRCb3VuZGFyeSk7XG4gIH1cbn0sIFwiZ2V0Qm91bmRhcmllc1wiKTtcbnZhciBnZXRCb3VuZGFyeXMgPSBnZXRCb3VuZGFyaWVzO1xudmFyIGdldFJlbHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcmVscztcbn0sIFwiZ2V0UmVsc1wiKTtcbnZhciBnZXRUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aXRsZTtcbn0sIFwiZ2V0VGl0bGVcIik7XG52YXIgc2V0V3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24od3JhcFNldHRpbmcpIHtcbiAgd3JhcEVuYWJsZWQgPSB3cmFwU2V0dGluZztcbn0sIFwic2V0V3JhcFwiKTtcbnZhciBhdXRvV3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB3cmFwRW5hYmxlZDtcbn0sIFwiYXV0b1dyYXBcIik7XG52YXIgY2xlYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBjNFNoYXBlQXJyYXkgPSBbXTtcbiAgYm91bmRhcmllcyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJnbG9iYWxcIixcbiAgICAgIGxhYmVsOiB7IHRleHQ6IFwiZ2xvYmFsXCIgfSxcbiAgICAgIHR5cGU6IHsgdGV4dDogXCJnbG9iYWxcIiB9LFxuICAgICAgdGFnczogbnVsbCxcbiAgICAgIGxpbms6IG51bGwsXG4gICAgICBwYXJlbnRCb3VuZGFyeTogXCJcIlxuICAgIH1cbiAgXTtcbiAgcGFyZW50Qm91bmRhcnlQYXJzZSA9IFwiXCI7XG4gIGN1cnJlbnRCb3VuZGFyeVBhcnNlID0gXCJnbG9iYWxcIjtcbiAgYm91bmRhcnlQYXJzZVN0YWNrID0gW1wiXCJdO1xuICByZWxzID0gW107XG4gIGJvdW5kYXJ5UGFyc2VTdGFjayA9IFtcIlwiXTtcbiAgdGl0bGUgPSBcIlwiO1xuICB3cmFwRW5hYmxlZCA9IGZhbHNlO1xuICBjNFNoYXBlSW5Sb3cgPSA0O1xuICBjNEJvdW5kYXJ5SW5Sb3cgPSAyO1xufSwgXCJjbGVhclwiKTtcbnZhciBMSU5FVFlQRSA9IHtcbiAgU09MSUQ6IDAsXG4gIERPVFRFRDogMSxcbiAgTk9URTogMixcbiAgU09MSURfQ1JPU1M6IDMsXG4gIERPVFRFRF9DUk9TUzogNCxcbiAgU09MSURfT1BFTjogNSxcbiAgRE9UVEVEX09QRU46IDYsXG4gIExPT1BfU1RBUlQ6IDEwLFxuICBMT09QX0VORDogMTEsXG4gIEFMVF9TVEFSVDogMTIsXG4gIEFMVF9FTFNFOiAxMyxcbiAgQUxUX0VORDogMTQsXG4gIE9QVF9TVEFSVDogMTUsXG4gIE9QVF9FTkQ6IDE2LFxuICBBQ1RJVkVfU1RBUlQ6IDE3LFxuICBBQ1RJVkVfRU5EOiAxOCxcbiAgUEFSX1NUQVJUOiAxOSxcbiAgUEFSX0FORDogMjAsXG4gIFBBUl9FTkQ6IDIxLFxuICBSRUNUX1NUQVJUOiAyMixcbiAgUkVDVF9FTkQ6IDIzLFxuICBTT0xJRF9QT0lOVDogMjQsXG4gIERPVFRFRF9QT0lOVDogMjVcbn07XG52YXIgQVJST1dUWVBFID0ge1xuICBGSUxMRUQ6IDAsXG4gIE9QRU46IDFcbn07XG52YXIgUExBQ0VNRU5UID0ge1xuICBMRUZUT0Y6IDAsXG4gIFJJR0hUT0Y6IDEsXG4gIE9WRVI6IDJcbn07XG52YXIgc2V0VGl0bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBsZXQgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplVGV4dCh0eHQsIGdldENvbmZpZygpKTtcbiAgdGl0bGUgPSBzYW5pdGl6ZWRUZXh0O1xufSwgXCJzZXRUaXRsZVwiKTtcbnZhciBjNERiX2RlZmF1bHQgPSB7XG4gIGFkZFBlcnNvbk9yU3lzdGVtLFxuICBhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5LFxuICBhZGRDb250YWluZXIsXG4gIGFkZENvbnRhaW5lckJvdW5kYXJ5LFxuICBhZGRDb21wb25lbnQsXG4gIGFkZERlcGxveW1lbnROb2RlLFxuICBwb3BCb3VuZGFyeVBhcnNlU3RhY2ssXG4gIGFkZFJlbCxcbiAgdXBkYXRlRWxTdHlsZSxcbiAgdXBkYXRlUmVsU3R5bGUsXG4gIHVwZGF0ZUxheW91dENvbmZpZyxcbiAgYXV0b1dyYXAsXG4gIHNldFdyYXAsXG4gIGdldEM0U2hhcGVBcnJheSxcbiAgZ2V0QzRTaGFwZSxcbiAgZ2V0QzRTaGFwZUtleXMsXG4gIGdldEJvdW5kYXJpZXMsXG4gIGdldEJvdW5kYXJ5cyxcbiAgZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2UsXG4gIGdldFBhcmVudEJvdW5kYXJ5UGFyc2UsXG4gIGdldFJlbHMsXG4gIGdldFRpdGxlLFxuICBnZXRDNFR5cGUsXG4gIGdldEM0U2hhcGVJblJvdyxcbiAgZ2V0QzRCb3VuZGFyeUluUm93LFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLmM0LCBcImdldENvbmZpZ1wiKSxcbiAgY2xlYXIsXG4gIExJTkVUWVBFLFxuICBBUlJPV1RZUEUsXG4gIFBMQUNFTUVOVCxcbiAgc2V0VGl0bGUsXG4gIHNldEM0VHlwZVxuICAvLyBhcHBseSxcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jNC9jNFJlbmRlcmVyLmpzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2M0L3N2Z0RyYXcuanNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG52YXIgZHJhd1JlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCByZWN0RGF0YSkge1xuICByZXR1cm4gZHJhd1JlY3QoZWxlbSwgcmVjdERhdGEpO1xufSwgXCJkcmF3UmVjdFwiKTtcbnZhciBkcmF3SW1hZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHdpZHRoLCBoZWlnaHQsIHgsIHksIGxpbmspIHtcbiAgY29uc3QgaW1hZ2VFbGVtID0gZWxlbS5hcHBlbmQoXCJpbWFnZVwiKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCk7XG4gIGltYWdlRWxlbS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gIGltYWdlRWxlbS5hdHRyKFwieFwiLCB4KTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ5XCIsIHkpO1xuICBsZXQgc2FuaXRpemVkTGluayA9IGxpbmsuc3RhcnRzV2l0aChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NFwiKSA/IGxpbmsgOiBzYW5pdGl6ZVVybChsaW5rKTtcbiAgaW1hZ2VFbGVtLmF0dHIoXCJ4bGluazpocmVmXCIsIHNhbml0aXplZExpbmspO1xufSwgXCJkcmF3SW1hZ2VcIik7XG52YXIgZHJhd1JlbHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCByZWxzMiwgY29uZjIpID0+IHtcbiAgY29uc3QgcmVsc0VsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGxldCBpID0gMDtcbiAgZm9yIChsZXQgcmVsIG9mIHJlbHMyKSB7XG4gICAgbGV0IHRleHRDb2xvciA9IHJlbC50ZXh0Q29sb3IgPyByZWwudGV4dENvbG9yIDogXCIjNDQ0NDQ0XCI7XG4gICAgbGV0IHN0cm9rZUNvbG9yID0gcmVsLmxpbmVDb2xvciA/IHJlbC5saW5lQ29sb3IgOiBcIiM0NDQ0NDRcIjtcbiAgICBsZXQgb2Zmc2V0WCA9IHJlbC5vZmZzZXRYID8gcGFyc2VJbnQocmVsLm9mZnNldFgpIDogMDtcbiAgICBsZXQgb2Zmc2V0WSA9IHJlbC5vZmZzZXRZID8gcGFyc2VJbnQocmVsLm9mZnNldFkpIDogMDtcbiAgICBsZXQgdXJsID0gXCJcIjtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgbGV0IGxpbmUgPSByZWxzRWxlbS5hcHBlbmQoXCJsaW5lXCIpO1xuICAgICAgbGluZS5hdHRyKFwieDFcIiwgcmVsLnN0YXJ0UG9pbnQueCk7XG4gICAgICBsaW5lLmF0dHIoXCJ5MVwiLCByZWwuc3RhcnRQb2ludC55KTtcbiAgICAgIGxpbmUuYXR0cihcIngyXCIsIHJlbC5lbmRQb2ludC54KTtcbiAgICAgIGxpbmUuYXR0cihcInkyXCIsIHJlbC5lbmRQb2ludC55KTtcbiAgICAgIGxpbmUuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFcIik7XG4gICAgICBsaW5lLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpO1xuICAgICAgbGluZS5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpO1xuICAgICAgaWYgKHJlbC50eXBlICE9PSBcInJlbF9iXCIpIHtcbiAgICAgICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gICAgICB9XG4gICAgICBpZiAocmVsLnR5cGUgPT09IFwiYmlyZWxcIiB8fCByZWwudHlwZSA9PT0gXCJyZWxfYlwiKSB7XG4gICAgICAgIGxpbmUuYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93ZW5kKVwiKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGxpbmUgPSByZWxzRWxlbS5hcHBlbmQoXCJwYXRoXCIpO1xuICAgICAgbGluZS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFcIikuYXR0cihcInN0cm9rZVwiLCBzdHJva2VDb2xvcikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIFwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5IFwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgcmVsLnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCByZWwuc3RhcnRQb2ludC55KS5yZXBsYWNlQWxsKFxuICAgICAgICAgIFwiY29udHJvbHhcIixcbiAgICAgICAgICByZWwuc3RhcnRQb2ludC54ICsgKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyAyIC0gKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyA0XG4gICAgICAgICkucmVwbGFjZUFsbChcImNvbnRyb2x5XCIsIHJlbC5zdGFydFBvaW50LnkgKyAocmVsLmVuZFBvaW50LnkgLSByZWwuc3RhcnRQb2ludC55KSAvIDIpLnJlcGxhY2VBbGwoXCJzdG9weFwiLCByZWwuZW5kUG9pbnQueCkucmVwbGFjZUFsbChcInN0b3B5XCIsIHJlbC5lbmRQb2ludC55KVxuICAgICAgKTtcbiAgICAgIGlmIChyZWwudHlwZSAhPT0gXCJyZWxfYlwiKSB7XG4gICAgICAgIGxpbmUuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2hlYWQpXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbC50eXBlID09PSBcImJpcmVsXCIgfHwgcmVsLnR5cGUgPT09IFwicmVsX2JcIikge1xuICAgICAgICBsaW5lLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2VuZClcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBtZXNzYWdlQ29uZiA9IGNvbmYyLm1lc3NhZ2VGb250KCk7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICByZWwubGFiZWwudGV4dCxcbiAgICAgIHJlbHNFbGVtLFxuICAgICAgTWF0aC5taW4ocmVsLnN0YXJ0UG9pbnQueCwgcmVsLmVuZFBvaW50LngpICsgTWF0aC5hYnMocmVsLmVuZFBvaW50LnggLSByZWwuc3RhcnRQb2ludC54KSAvIDIgKyBvZmZzZXRYLFxuICAgICAgTWF0aC5taW4ocmVsLnN0YXJ0UG9pbnQueSwgcmVsLmVuZFBvaW50LnkpICsgTWF0aC5hYnMocmVsLmVuZFBvaW50LnkgLSByZWwuc3RhcnRQb2ludC55KSAvIDIgKyBvZmZzZXRZLFxuICAgICAgcmVsLmxhYmVsLndpZHRoLFxuICAgICAgcmVsLmxhYmVsLmhlaWdodCxcbiAgICAgIHsgZmlsbDogdGV4dENvbG9yIH0sXG4gICAgICBtZXNzYWdlQ29uZlxuICAgICk7XG4gICAgaWYgKHJlbC50ZWNobiAmJiByZWwudGVjaG4udGV4dCAhPT0gXCJcIikge1xuICAgICAgbWVzc2FnZUNvbmYgPSBjb25mMi5tZXNzYWdlRm9udCgpO1xuICAgICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICAgIFwiW1wiICsgcmVsLnRlY2huLnRleHQgKyBcIl1cIixcbiAgICAgICAgcmVsc0VsZW0sXG4gICAgICAgIE1hdGgubWluKHJlbC5zdGFydFBvaW50LngsIHJlbC5lbmRQb2ludC54KSArIE1hdGguYWJzKHJlbC5lbmRQb2ludC54IC0gcmVsLnN0YXJ0UG9pbnQueCkgLyAyICsgb2Zmc2V0WCxcbiAgICAgICAgTWF0aC5taW4ocmVsLnN0YXJ0UG9pbnQueSwgcmVsLmVuZFBvaW50LnkpICsgTWF0aC5hYnMocmVsLmVuZFBvaW50LnkgLSByZWwuc3RhcnRQb2ludC55KSAvIDIgKyBjb25mMi5tZXNzYWdlRm9udFNpemUgKyA1ICsgb2Zmc2V0WSxcbiAgICAgICAgTWF0aC5tYXgocmVsLmxhYmVsLndpZHRoLCByZWwudGVjaG4ud2lkdGgpLFxuICAgICAgICByZWwudGVjaG4uaGVpZ2h0LFxuICAgICAgICB7IGZpbGw6IHRleHRDb2xvciwgXCJmb250LXN0eWxlXCI6IFwiaXRhbGljXCIgfSxcbiAgICAgICAgbWVzc2FnZUNvbmZcbiAgICAgICk7XG4gICAgfVxuICB9XG59LCBcImRyYXdSZWxzXCIpO1xudmFyIGRyYXdCb3VuZGFyeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYm91bmRhcnksIGNvbmYyKSB7XG4gIGNvbnN0IGJvdW5kYXJ5RWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgbGV0IGZpbGxDb2xvciA9IGJvdW5kYXJ5LmJnQ29sb3IgPyBib3VuZGFyeS5iZ0NvbG9yIDogXCJub25lXCI7XG4gIGxldCBzdHJva2VDb2xvciA9IGJvdW5kYXJ5LmJvcmRlckNvbG9yID8gYm91bmRhcnkuYm9yZGVyQ29sb3IgOiBcIiM0NDQ0NDRcIjtcbiAgbGV0IGZvbnRDb2xvciA9IGJvdW5kYXJ5LmZvbnRDb2xvciA/IGJvdW5kYXJ5LmZvbnRDb2xvciA6IFwiYmxhY2tcIjtcbiAgbGV0IGF0dHJzVmFsdWUgPSB7IFwic3Ryb2tlLXdpZHRoXCI6IDEsIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcIjcuMCw3LjBcIiB9O1xuICBpZiAoYm91bmRhcnkubm9kZVR5cGUpIHtcbiAgICBhdHRyc1ZhbHVlID0geyBcInN0cm9rZS13aWR0aFwiOiAxIH07XG4gIH1cbiAgbGV0IHJlY3REYXRhID0ge1xuICAgIHg6IGJvdW5kYXJ5LngsXG4gICAgeTogYm91bmRhcnkueSxcbiAgICBmaWxsOiBmaWxsQ29sb3IsXG4gICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcbiAgICB3aWR0aDogYm91bmRhcnkud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZGFyeS5oZWlnaHQsXG4gICAgcng6IDIuNSxcbiAgICByeTogMi41LFxuICAgIGF0dHJzOiBhdHRyc1ZhbHVlXG4gIH07XG4gIGRyYXdSZWN0Mihib3VuZGFyeUVsZW0sIHJlY3REYXRhKTtcbiAgbGV0IGJvdW5kYXJ5Q29uZiA9IGNvbmYyLmJvdW5kYXJ5Rm9udCgpO1xuICBib3VuZGFyeUNvbmYuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICBib3VuZGFyeUNvbmYuZm9udFNpemUgPSBib3VuZGFyeUNvbmYuZm9udFNpemUgKyAyO1xuICBib3VuZGFyeUNvbmYuZm9udENvbG9yID0gZm9udENvbG9yO1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICBib3VuZGFyeS5sYWJlbC50ZXh0LFxuICAgIGJvdW5kYXJ5RWxlbSxcbiAgICBib3VuZGFyeS54LFxuICAgIGJvdW5kYXJ5LnkgKyBib3VuZGFyeS5sYWJlbC5ZLFxuICAgIGJvdW5kYXJ5LndpZHRoLFxuICAgIGJvdW5kYXJ5LmhlaWdodCxcbiAgICB7IGZpbGw6IFwiIzQ0NDQ0NFwiIH0sXG4gICAgYm91bmRhcnlDb25mXG4gICk7XG4gIGlmIChib3VuZGFyeS50eXBlICYmIGJvdW5kYXJ5LnR5cGUudGV4dCAhPT0gXCJcIikge1xuICAgIGJvdW5kYXJ5Q29uZiA9IGNvbmYyLmJvdW5kYXJ5Rm9udCgpO1xuICAgIGJvdW5kYXJ5Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gICAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMikoXG4gICAgICBib3VuZGFyeS50eXBlLnRleHQsXG4gICAgICBib3VuZGFyeUVsZW0sXG4gICAgICBib3VuZGFyeS54LFxuICAgICAgYm91bmRhcnkueSArIGJvdW5kYXJ5LnR5cGUuWSxcbiAgICAgIGJvdW5kYXJ5LndpZHRoLFxuICAgICAgYm91bmRhcnkuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBcIiM0NDQ0NDRcIiB9LFxuICAgICAgYm91bmRhcnlDb25mXG4gICAgKTtcbiAgfVxuICBpZiAoYm91bmRhcnkuZGVzY3IgJiYgYm91bmRhcnkuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgIGJvdW5kYXJ5Q29uZiA9IGNvbmYyLmJvdW5kYXJ5Rm9udCgpO1xuICAgIGJvdW5kYXJ5Q29uZi5mb250U2l6ZSA9IGJvdW5kYXJ5Q29uZi5mb250U2l6ZSAtIDI7XG4gICAgYm91bmRhcnlDb25mLmZvbnRDb2xvciA9IGZvbnRDb2xvcjtcbiAgICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICAgIGJvdW5kYXJ5LmRlc2NyLnRleHQsXG4gICAgICBib3VuZGFyeUVsZW0sXG4gICAgICBib3VuZGFyeS54LFxuICAgICAgYm91bmRhcnkueSArIGJvdW5kYXJ5LmRlc2NyLlksXG4gICAgICBib3VuZGFyeS53aWR0aCxcbiAgICAgIGJvdW5kYXJ5LmhlaWdodCxcbiAgICAgIHsgZmlsbDogXCIjNDQ0NDQ0XCIgfSxcbiAgICAgIGJvdW5kYXJ5Q29uZlxuICAgICk7XG4gIH1cbn0sIFwiZHJhd0JvdW5kYXJ5XCIpO1xudmFyIGRyYXdDNFNoYXBlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBjNFNoYXBlLCBjb25mMikge1xuICBsZXQgZmlsbENvbG9yID0gYzRTaGFwZS5iZ0NvbG9yID8gYzRTaGFwZS5iZ0NvbG9yIDogY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJfYmdfY29sb3JcIl07XG4gIGxldCBzdHJva2VDb2xvciA9IGM0U2hhcGUuYm9yZGVyQ29sb3IgPyBjNFNoYXBlLmJvcmRlckNvbG9yIDogY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJfYm9yZGVyX2NvbG9yXCJdO1xuICBsZXQgZm9udENvbG9yID0gYzRTaGFwZS5mb250Q29sb3IgPyBjNFNoYXBlLmZvbnRDb2xvciA6IFwiI0ZGRkZGRlwiO1xuICBsZXQgcGVyc29uSW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9XCI7XG4gIHN3aXRjaCAoYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KSB7XG4gICAgY2FzZSBcInBlcnNvblwiOlxuICAgICAgcGVyc29uSW1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZXh0ZXJuYWxfcGVyc29uXCI6XG4gICAgICBwZXJzb25JbWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUI2RWxFUVZSNFh1MllMWStFTUJDRzkrZFdyMGFqMFdnMEdvMUdvMCtqOFhkdjJ1VEN2djFncHQwZWJIS1B1aERhZVc0NjA1WjltSnZ4NEFkWFV5VFVkZDA4eit1NmZsbVdaUm5Ic1drYWZrOURwdEF3RFB1K2YwZUFZdHUyUEVhR1d1ajVmQ0lackJBQzJlTEJBblJDc0Vra3htZWFKcDdpREoyUU1EZEhzTGc4U3hLRkVKYUFvOGxBWG5tdU9GSWhUTXB4eEtBVGVibzRVaUZrbnVObzRPbmlTSVhReVJ4RUEzWXNuakdDVkVqVlhEN3lMVUFxeEJHVXlQdi9ZNFcyYmVNZ0d1UzdrVlFJQnljSDBmRCtvaTVwZXpRRVR4ZEhLbVFLR2sxZVFFWWxkSytqdzVHeFBmWjl6N01rMFFuaGYxVzFtM3cvL0VVbjVCRG1TWnNiUjQ0UVFMQkVxckJIcU9ybVNLYVFBeGRuTEFyQ3J4WmNNN0E3WktzNGlvUnE4TEZDK05wQzNXQ0JKc3ZwVnc1ZWRtOWlFWEZ1eU5meFhBZ1N3ZnJGUTFjMGlOZGE4QWRlanZVZ25rdE90SlFReG1jZkZ6R2dsYzVXVkNqN29EZ0ZxVTE4Ym9lRlNzNTJDVWg4TEU4QklWUURUMUFCckIwSHRnU0VZbFg1ZG9KbkN3djlUWG9jS0NhS2Jud2hkREtQcTRsZjNTd1UzSExxNFYvK1dZaEhWTWEvM2I0SWxmeWlrQWR1Q2tjQmM3bVEzL3ovUXEvY1R1aWtoa3pCMTJBZS9tY0pDOVUrVm84RWoxZ1dBdGdiZUdnRnNBTUhyNTBCSVdPTENiZXp2aHBCRlVkWTZFSnVKL1FEVzBYb01YNjB6WjBBQUFBQVNVVk9SSzVDWUlJPVwiO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgY29uc3QgYzRTaGFwZUVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGM0U2hhcGVFbGVtLmF0dHIoXCJjbGFzc1wiLCBcInBlcnNvbi1tYW5cIik7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICBzd2l0Y2ggKGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCkge1xuICAgIGNhc2UgXCJwZXJzb25cIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfcGVyc29uXCI6XG4gICAgY2FzZSBcInN5c3RlbVwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9zeXN0ZW1cIjpcbiAgICBjYXNlIFwiY29udGFpbmVyXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX2NvbnRhaW5lclwiOlxuICAgIGNhc2UgXCJjb21wb25lbnRcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29tcG9uZW50XCI6XG4gICAgICByZWN0LnggPSBjNFNoYXBlLng7XG4gICAgICByZWN0LnkgPSBjNFNoYXBlLnk7XG4gICAgICByZWN0LmZpbGwgPSBmaWxsQ29sb3I7XG4gICAgICByZWN0LndpZHRoID0gYzRTaGFwZS53aWR0aDtcbiAgICAgIHJlY3QuaGVpZ2h0ID0gYzRTaGFwZS5oZWlnaHQ7XG4gICAgICByZWN0LnN0cm9rZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgcmVjdC5yeCA9IDIuNTtcbiAgICAgIHJlY3QucnkgPSAyLjU7XG4gICAgICByZWN0LmF0dHJzID0geyBcInN0cm9rZS13aWR0aFwiOiAwLjUgfTtcbiAgICAgIGRyYXdSZWN0MihjNFNoYXBlRWxlbSwgcmVjdCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic3lzdGVtX2RiXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX3N5c3RlbV9kYlwiOlxuICAgIGNhc2UgXCJjb250YWluZXJfZGJcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29udGFpbmVyX2RiXCI6XG4gICAgY2FzZSBcImNvbXBvbmVudF9kYlwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9jb21wb25lbnRfZGJcIjpcbiAgICAgIGM0U2hhcGVFbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgZmlsbENvbG9yKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMC41XCIpLmF0dHIoXCJzdHJva2VcIiwgc3Ryb2tlQ29sb3IpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBcIk1zdGFydHgsc3RhcnR5YzAsLTEwIGhhbGYsLTEwIGhhbGYsLTEwYzAsMCBoYWxmLDAgaGFsZiwxMGwwLGhlaWdodGMwLDEwIC1oYWxmLDEwIC1oYWxmLDEwYzAsMCAtaGFsZiwwIC1oYWxmLC0xMGwwLC1oZWlnaHRcIi5yZXBsYWNlQWxsKFwic3RhcnR4XCIsIGM0U2hhcGUueCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCBjNFNoYXBlLnkpLnJlcGxhY2VBbGwoXCJoYWxmXCIsIGM0U2hhcGUud2lkdGggLyAyKS5yZXBsYWNlQWxsKFwiaGVpZ2h0XCIsIGM0U2hhcGUuaGVpZ2h0KVxuICAgICAgKTtcbiAgICAgIGM0U2hhcGVFbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVcIikuYXR0cihcInN0cm9rZVwiLCBzdHJva2VDb2xvcikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIFwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMFwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgYzRTaGFwZS54KS5yZXBsYWNlQWxsKFwic3RhcnR5XCIsIGM0U2hhcGUueSkucmVwbGFjZUFsbChcImhhbGZcIiwgYzRTaGFwZS53aWR0aCAvIDIpXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInN5c3RlbV9xdWV1ZVwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9zeXN0ZW1fcXVldWVcIjpcbiAgICBjYXNlIFwiY29udGFpbmVyX3F1ZXVlXCI6XG4gICAgY2FzZSBcImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZVwiOlxuICAgIGNhc2UgXCJjb21wb25lbnRfcXVldWVcIjpcbiAgICBjYXNlIFwiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlXCI6XG4gICAgICBjNFNoYXBlRWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJmaWxsXCIsIGZpbGxDb2xvcikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjAuNVwiKS5hdHRyKFwic3Ryb2tlXCIsIHN0cm9rZUNvbG9yKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNc3RhcnR4LHN0YXJ0eWx3aWR0aCwwYzUsMCA1LGhhbGYgNSxoYWxmYzAsMCAwLGhhbGYgLTUsaGFsZmwtd2lkdGgsMGMtNSwwIC01LC1oYWxmIC01LC1oYWxmYzAsMCAwLC1oYWxmIDUsLWhhbGZcIi5yZXBsYWNlQWxsKFwic3RhcnR4XCIsIGM0U2hhcGUueCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCBjNFNoYXBlLnkpLnJlcGxhY2VBbGwoXCJ3aWR0aFwiLCBjNFNoYXBlLndpZHRoKS5yZXBsYWNlQWxsKFwiaGFsZlwiLCBjNFNoYXBlLmhlaWdodCAvIDIpXG4gICAgICApO1xuICAgICAgYzRTaGFwZUVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjAuNVwiKS5hdHRyKFwic3Ryb2tlXCIsIHN0cm9rZUNvbG9yKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZlwiLnJlcGxhY2VBbGwoXCJzdGFydHhcIiwgYzRTaGFwZS54ICsgYzRTaGFwZS53aWR0aCkucmVwbGFjZUFsbChcInN0YXJ0eVwiLCBjNFNoYXBlLnkpLnJlcGxhY2VBbGwoXCJoYWxmXCIsIGM0U2hhcGUuaGVpZ2h0IC8gMilcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxuICBsZXQgYzRTaGFwZUZvbnRDb25mID0gZ2V0QzRTaGFwZUZvbnQoY29uZjIsIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCk7XG4gIGM0U2hhcGVFbGVtLmFwcGVuZChcInRleHRcIikuYXR0cihcImZpbGxcIiwgZm9udENvbG9yKS5hdHRyKFwiZm9udC1mYW1pbHlcIiwgYzRTaGFwZUZvbnRDb25mLmZvbnRGYW1pbHkpLmF0dHIoXCJmb250LXNpemVcIiwgYzRTaGFwZUZvbnRDb25mLmZvbnRTaXplIC0gMikuYXR0cihcImZvbnQtc3R5bGVcIiwgXCJpdGFsaWNcIikuYXR0cihcImxlbmd0aEFkanVzdFwiLCBcInNwYWNpbmdcIikuYXR0cihcInRleHRMZW5ndGhcIiwgYzRTaGFwZS50eXBlQzRTaGFwZS53aWR0aCkuYXR0cihcInhcIiwgYzRTaGFwZS54ICsgYzRTaGFwZS53aWR0aCAvIDIgLSBjNFNoYXBlLnR5cGVDNFNoYXBlLndpZHRoIC8gMikuYXR0cihcInlcIiwgYzRTaGFwZS55ICsgYzRTaGFwZS50eXBlQzRTaGFwZS5ZKS50ZXh0KFwiPDxcIiArIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCArIFwiPj5cIik7XG4gIHN3aXRjaCAoYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0KSB7XG4gICAgY2FzZSBcInBlcnNvblwiOlxuICAgIGNhc2UgXCJleHRlcm5hbF9wZXJzb25cIjpcbiAgICAgIGRyYXdJbWFnZShcbiAgICAgICAgYzRTaGFwZUVsZW0sXG4gICAgICAgIDQ4LFxuICAgICAgICA0OCxcbiAgICAgICAgYzRTaGFwZS54ICsgYzRTaGFwZS53aWR0aCAvIDIgLSAyNCxcbiAgICAgICAgYzRTaGFwZS55ICsgYzRTaGFwZS5pbWFnZS5ZLFxuICAgICAgICBwZXJzb25JbWdcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgfVxuICBsZXQgdGV4dEZvbnRDb25mID0gY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJGb250XCJdKCk7XG4gIHRleHRGb250Q29uZi5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gIHRleHRGb250Q29uZi5mb250U2l6ZSA9IHRleHRGb250Q29uZi5mb250U2l6ZSArIDI7XG4gIHRleHRGb250Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIGM0U2hhcGUubGFiZWwudGV4dCxcbiAgICBjNFNoYXBlRWxlbSxcbiAgICBjNFNoYXBlLngsXG4gICAgYzRTaGFwZS55ICsgYzRTaGFwZS5sYWJlbC5ZLFxuICAgIGM0U2hhcGUud2lkdGgsXG4gICAgYzRTaGFwZS5oZWlnaHQsXG4gICAgeyBmaWxsOiBmb250Q29sb3IgfSxcbiAgICB0ZXh0Rm9udENvbmZcbiAgKTtcbiAgdGV4dEZvbnRDb25mID0gY29uZjJbYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJGb250XCJdKCk7XG4gIHRleHRGb250Q29uZi5mb250Q29sb3IgPSBmb250Q29sb3I7XG4gIGlmIChjNFNoYXBlLnRlY2huICYmIGM0U2hhcGUudGVjaG4/LnRleHQgIT09IFwiXCIpIHtcbiAgICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyKShcbiAgICAgIGM0U2hhcGUudGVjaG4udGV4dCxcbiAgICAgIGM0U2hhcGVFbGVtLFxuICAgICAgYzRTaGFwZS54LFxuICAgICAgYzRTaGFwZS55ICsgYzRTaGFwZS50ZWNobi5ZLFxuICAgICAgYzRTaGFwZS53aWR0aCxcbiAgICAgIGM0U2hhcGUuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBmb250Q29sb3IsIFwiZm9udC1zdHlsZVwiOiBcIml0YWxpY1wiIH0sXG4gICAgICB0ZXh0Rm9udENvbmZcbiAgICApO1xuICB9IGVsc2UgaWYgKGM0U2hhcGUudHlwZSAmJiBjNFNoYXBlLnR5cGUudGV4dCAhPT0gXCJcIikge1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYzRTaGFwZS50eXBlLnRleHQsXG4gICAgICBjNFNoYXBlRWxlbSxcbiAgICAgIGM0U2hhcGUueCxcbiAgICAgIGM0U2hhcGUueSArIGM0U2hhcGUudHlwZS5ZLFxuICAgICAgYzRTaGFwZS53aWR0aCxcbiAgICAgIGM0U2hhcGUuaGVpZ2h0LFxuICAgICAgeyBmaWxsOiBmb250Q29sb3IsIFwiZm9udC1zdHlsZVwiOiBcIml0YWxpY1wiIH0sXG4gICAgICB0ZXh0Rm9udENvbmZcbiAgICApO1xuICB9XG4gIGlmIChjNFNoYXBlLmRlc2NyICYmIGM0U2hhcGUuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgIHRleHRGb250Q29uZiA9IGNvbmYyLnBlcnNvbkZvbnQoKTtcbiAgICB0ZXh0Rm9udENvbmYuZm9udENvbG9yID0gZm9udENvbG9yO1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYzRTaGFwZS5kZXNjci50ZXh0LFxuICAgICAgYzRTaGFwZUVsZW0sXG4gICAgICBjNFNoYXBlLngsXG4gICAgICBjNFNoYXBlLnkgKyBjNFNoYXBlLmRlc2NyLlksXG4gICAgICBjNFNoYXBlLndpZHRoLFxuICAgICAgYzRTaGFwZS5oZWlnaHQsXG4gICAgICB7IGZpbGw6IGZvbnRDb2xvciB9LFxuICAgICAgdGV4dEZvbnRDb25mXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYzRTaGFwZS5oZWlnaHQ7XG59LCBcImRyYXdDNFNoYXBlXCIpO1xudmFyIGluc2VydERhdGFiYXNlSWNvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSkge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwic3ltYm9sXCIpLmF0dHIoXCJpZFwiLCBcImRhdGFiYXNlXCIpLmF0dHIoXCJmaWxsLXJ1bGVcIiwgXCJldmVub2RkXCIpLmF0dHIoXCJjbGlwLXJ1bGVcIiwgXCJldmVub2RkXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxelwiXG4gICk7XG59LCBcImluc2VydERhdGFiYXNlSWNvblwiKTtcbnZhciBpbnNlcnRDb21wdXRlckljb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJjb21wdXRlclwiKS5hdHRyKFwid2lkdGhcIiwgXCIyNFwiKS5hdHRyKFwiaGVpZ2h0XCIsIFwiMjRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3elwiXG4gICk7XG59LCBcImluc2VydENvbXB1dGVySWNvblwiKTtcbnZhciBpbnNlcnRDbG9ja0ljb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJjbG9ja1wiKS5hdHRyKFwid2lkdGhcIiwgXCIyNFwiKS5hdHRyKFwiaGVpZ2h0XCIsIFwiMjRcIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwic2NhbGUoLjUpXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExelwiXG4gICk7XG59LCBcImluc2VydENsb2NrSWNvblwiKTtcbnZhciBpbnNlcnRBcnJvd0hlYWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhcnJvd2hlYWRcIikuYXR0cihcInJlZlhcIiwgOSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6XCIpO1xufSwgXCJpbnNlcnRBcnJvd0hlYWRcIik7XG52YXIgaW5zZXJ0QXJyb3dFbmQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhcnJvd2VuZFwiKS5hdHRyKFwicmVmWFwiLCAxKS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTIpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6XCIpO1xufSwgXCJpbnNlcnRBcnJvd0VuZFwiKTtcbnZhciBpbnNlcnRBcnJvd0ZpbGxlZEhlYWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJmaWxsZWQtaGVhZFwiKS5hdHRyKFwicmVmWFwiLCAxOCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0QXJyb3dGaWxsZWRIZWFkXCIpO1xudmFyIGluc2VydER5bmFtaWNOdW1iZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJzZXF1ZW5jZW51bWJlclwiKS5hdHRyKFwicmVmWFwiLCAxNSkuYXR0cihcInJlZllcIiwgMTUpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA2MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCA0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCAxNSkuYXR0cihcImN5XCIsIDE1KS5hdHRyKFwiclwiLCA2KTtcbn0sIFwiaW5zZXJ0RHluYW1pY051bWJlclwiKTtcbnZhciBpbnNlcnRBcnJvd0Nyb3NzSGVhZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSkge1xuICBjb25zdCBkZWZzID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpO1xuICBjb25zdCBtYXJrZXIgPSBkZWZzLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJjcm9zc2hlYWRcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE1KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmF0dHIoXCJyZWZYXCIsIDE2KS5hdHRyKFwicmVmWVwiLCA0KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzAwMDAwMFwiKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIwLCAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcImRcIiwgXCJNIDksMiBWIDYgTDE2LDQgWlwiKTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjMDAwMDAwXCIpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjAsIDBcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFweFwiKS5hdHRyKFwiZFwiLCBcIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3XCIpO1xufSwgXCJpbnNlcnRBcnJvd0Nyb3NzSGVhZFwiKTtcbnZhciBnZXRDNFNoYXBlRm9udCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZiwgdHlwZUM0U2hhcGUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmZbdHlwZUM0U2hhcGUgKyBcIkZvbnRGYW1pbHlcIl0sXG4gICAgZm9udFNpemU6IGNuZlt0eXBlQzRTaGFwZSArIFwiRm9udFNpemVcIl0sXG4gICAgZm9udFdlaWdodDogY25mW3R5cGVDNFNoYXBlICsgXCJGb250V2VpZ2h0XCJdXG4gIH07XG59LCBcImdldEM0U2hhcGVGb250XCIpO1xudmFyIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ5VGV4dChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyICsgNSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlUZXh0LCBcImJ5VGV4dFwiKTtcbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBmb250U2l6ZSwgZm9udEZhbWlseSwgZm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkeSA9IGkgKiBmb250U2l6ZSAtIGZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJmb250LXNpemVcIiwgZm9udFNpemUpLnN0eWxlKFwiZm9udC13ZWlnaHRcIiwgZm9udFdlaWdodCkuc3R5bGUoXCJmb250LWZhbWlseVwiLCBmb250RmFtaWx5KTtcbiAgICAgIHRleHQuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcImR5XCIsIGR5KS50ZXh0KGxpbmVzW2ldKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWF0aGVtYXRpY2FsXCIpO1xuICAgICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICAgIH1cbiAgfVxuICBfX25hbWUoYnlUc3BhbiwgXCJieVRzcGFuXCIpO1xuICBmdW5jdGlvbiBieUZvKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpIHtcbiAgICBjb25zdCBzID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IHMuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIHMsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlGbywgXCJieUZvXCIpO1xuICBmdW5jdGlvbiBfc2V0VGV4dEF0dHJzKHRvVGV4dCwgZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgaWYgKGZyb21UZXh0QXR0cnNEaWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgdG9UZXh0LmF0dHIoa2V5LCBmcm9tVGV4dEF0dHJzRGljdFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX19uYW1lKF9zZXRUZXh0QXR0cnMsIFwiX3NldFRleHRBdHRyc1wiKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbmYyKSB7XG4gICAgcmV0dXJuIGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwiZm9cIiA/IGJ5Rm8gOiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbnZhciBzdmdEcmF3X2RlZmF1bHQgPSB7XG4gIGRyYXdSZWN0OiBkcmF3UmVjdDIsXG4gIGRyYXdCb3VuZGFyeSxcbiAgZHJhd0M0U2hhcGUsXG4gIGRyYXdSZWxzLFxuICBkcmF3SW1hZ2UsXG4gIGluc2VydEFycm93SGVhZCxcbiAgaW5zZXJ0QXJyb3dFbmQsXG4gIGluc2VydEFycm93RmlsbGVkSGVhZCxcbiAgaW5zZXJ0RHluYW1pY051bWJlcixcbiAgaW5zZXJ0QXJyb3dDcm9zc0hlYWQsXG4gIGluc2VydERhdGFiYXNlSWNvbixcbiAgaW5zZXJ0Q29tcHV0ZXJJY29uLFxuICBpbnNlcnRDbG9ja0ljb25cbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jNC9jNFJlbmRlcmVyLmpzXG52YXIgZ2xvYmFsQm91bmRhcnlNYXhYID0gMDtcbnZhciBnbG9iYWxCb3VuZGFyeU1heFkgPSAwO1xudmFyIGM0U2hhcGVJblJvdzIgPSA0O1xudmFyIGM0Qm91bmRhcnlJblJvdzIgPSAyO1xucGFyc2VyLnl5ID0gYzREYl9kZWZhdWx0O1xudmFyIGNvbmYgPSB7fTtcbnZhciBCb3VuZHMgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQm91bmRzXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKGRpYWdPYmopIHtcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHRoaXMuZGF0YS5zdGFydHggPSB2b2lkIDA7XG4gICAgdGhpcy5kYXRhLnN0b3B4ID0gdm9pZCAwO1xuICAgIHRoaXMuZGF0YS5zdGFydHkgPSB2b2lkIDA7XG4gICAgdGhpcy5kYXRhLnN0b3B5ID0gdm9pZCAwO1xuICAgIHRoaXMuZGF0YS53aWR0aExpbWl0ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEgPSB7fTtcbiAgICB0aGlzLm5leHREYXRhLnN0YXJ0eCA9IHZvaWQgMDtcbiAgICB0aGlzLm5leHREYXRhLnN0b3B4ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEuc3RhcnR5ID0gdm9pZCAwO1xuICAgIHRoaXMubmV4dERhdGEuc3RvcHkgPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0RGF0YS5jbnQgPSAwO1xuICAgIHNldENvbmYoZGlhZ09iai5kYi5nZXRDb25maWcoKSk7XG4gIH1cbiAgc2V0RGF0YShzdGFydHgsIHN0b3B4LCBzdGFydHksIHN0b3B5KSB7XG4gICAgdGhpcy5uZXh0RGF0YS5zdGFydHggPSB0aGlzLmRhdGEuc3RhcnR4ID0gc3RhcnR4O1xuICAgIHRoaXMubmV4dERhdGEuc3RvcHggPSB0aGlzLmRhdGEuc3RvcHggPSBzdG9weDtcbiAgICB0aGlzLm5leHREYXRhLnN0YXJ0eSA9IHRoaXMuZGF0YS5zdGFydHkgPSBzdGFydHk7XG4gICAgdGhpcy5uZXh0RGF0YS5zdG9weSA9IHRoaXMuZGF0YS5zdG9weSA9IHN0b3B5O1xuICB9XG4gIHVwZGF0ZVZhbChvYmosIGtleSwgdmFsLCBmdW4pIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gZnVuKHZhbCwgb2JqW2tleV0pO1xuICAgIH1cbiAgfVxuICBpbnNlcnQoYzRTaGFwZSkge1xuICAgIHRoaXMubmV4dERhdGEuY250ID0gdGhpcy5uZXh0RGF0YS5jbnQgKyAxO1xuICAgIGxldCBfc3RhcnR4ID0gdGhpcy5uZXh0RGF0YS5zdGFydHggPT09IHRoaXMubmV4dERhdGEuc3RvcHggPyB0aGlzLm5leHREYXRhLnN0b3B4ICsgYzRTaGFwZS5tYXJnaW4gOiB0aGlzLm5leHREYXRhLnN0b3B4ICsgYzRTaGFwZS5tYXJnaW4gKiAyO1xuICAgIGxldCBfc3RvcHggPSBfc3RhcnR4ICsgYzRTaGFwZS53aWR0aDtcbiAgICBsZXQgX3N0YXJ0eSA9IHRoaXMubmV4dERhdGEuc3RhcnR5ICsgYzRTaGFwZS5tYXJnaW4gKiAyO1xuICAgIGxldCBfc3RvcHkgPSBfc3RhcnR5ICsgYzRTaGFwZS5oZWlnaHQ7XG4gICAgaWYgKF9zdGFydHggPj0gdGhpcy5kYXRhLndpZHRoTGltaXQgfHwgX3N0b3B4ID49IHRoaXMuZGF0YS53aWR0aExpbWl0IHx8IHRoaXMubmV4dERhdGEuY250ID4gYzRTaGFwZUluUm93Mikge1xuICAgICAgX3N0YXJ0eCA9IHRoaXMubmV4dERhdGEuc3RhcnR4ICsgYzRTaGFwZS5tYXJnaW4gKyBjb25mLm5leHRMaW5lUGFkZGluZ1g7XG4gICAgICBfc3RhcnR5ID0gdGhpcy5uZXh0RGF0YS5zdG9weSArIGM0U2hhcGUubWFyZ2luICogMjtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RvcHggPSBfc3RvcHggPSBfc3RhcnR4ICsgYzRTaGFwZS53aWR0aDtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RhcnR5ID0gdGhpcy5uZXh0RGF0YS5zdG9weTtcbiAgICAgIHRoaXMubmV4dERhdGEuc3RvcHkgPSBfc3RvcHkgPSBfc3RhcnR5ICsgYzRTaGFwZS5oZWlnaHQ7XG4gICAgICB0aGlzLm5leHREYXRhLmNudCA9IDE7XG4gICAgfVxuICAgIGM0U2hhcGUueCA9IF9zdGFydHg7XG4gICAgYzRTaGFwZS55ID0gX3N0YXJ0eTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RhcnR4XCIsIF9zdGFydHgsIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsIFwic3RvcHhcIiwgX3N0b3B4LCBNYXRoLm1heCk7XG4gICAgdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCBcInN0b3B5XCIsIF9zdG9weSwgTWF0aC5tYXgpO1xuICAgIHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsIFwic3RhcnR4XCIsIF9zdGFydHgsIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCBcInN0YXJ0eVwiLCBfc3RhcnR5LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCBcInN0b3B5XCIsIF9zdG9weSwgTWF0aC5tYXgpO1xuICB9XG4gIGluaXQoZGlhZ09iaikge1xuICAgIHRoaXMubmFtZSA9IFwiXCI7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwLFxuICAgICAgd2lkdGhMaW1pdDogdm9pZCAwXG4gICAgfTtcbiAgICB0aGlzLm5leHREYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwLFxuICAgICAgY250OiAwXG4gICAgfTtcbiAgICBzZXRDb25mKGRpYWdPYmouZGIuZ2V0Q29uZmlnKCkpO1xuICB9XG4gIGJ1bXBMYXN0TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuZGF0YS5zdG9weCArPSBtYXJnaW47XG4gICAgdGhpcy5kYXRhLnN0b3B5ICs9IG1hcmdpbjtcbiAgfVxufTtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbmYpIHtcbiAgYXNzaWduV2l0aERlcHRoX2RlZmF1bHQoY29uZiwgY25mKTtcbiAgaWYgKGNuZi5mb250RmFtaWx5KSB7XG4gICAgY29uZi5wZXJzb25Gb250RmFtaWx5ID0gY29uZi5zeXN0ZW1Gb250RmFtaWx5ID0gY29uZi5tZXNzYWdlRm9udEZhbWlseSA9IGNuZi5mb250RmFtaWx5O1xuICB9XG4gIGlmIChjbmYuZm9udFNpemUpIHtcbiAgICBjb25mLnBlcnNvbkZvbnRTaXplID0gY29uZi5zeXN0ZW1Gb250U2l6ZSA9IGNvbmYubWVzc2FnZUZvbnRTaXplID0gY25mLmZvbnRTaXplO1xuICB9XG4gIGlmIChjbmYuZm9udFdlaWdodCkge1xuICAgIGNvbmYucGVyc29uRm9udFdlaWdodCA9IGNvbmYuc3lzdGVtRm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQgPSBjbmYuZm9udFdlaWdodDtcbiAgfVxufSwgXCJzZXRDb25mXCIpO1xudmFyIGM0U2hhcGVGb250ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mLCB0eXBlQzRTaGFwZSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZlt0eXBlQzRTaGFwZSArIFwiRm9udEZhbWlseVwiXSxcbiAgICBmb250U2l6ZTogY25mW3R5cGVDNFNoYXBlICsgXCJGb250U2l6ZVwiXSxcbiAgICBmb250V2VpZ2h0OiBjbmZbdHlwZUM0U2hhcGUgKyBcIkZvbnRXZWlnaHRcIl1cbiAgfTtcbn0sIFwiYzRTaGFwZUZvbnRcIik7XG52YXIgYm91bmRhcnlGb250ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9udEZhbWlseTogY25mLmJvdW5kYXJ5Rm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogY25mLmJvdW5kYXJ5Rm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLmJvdW5kYXJ5Rm9udFdlaWdodFxuICB9O1xufSwgXCJib3VuZGFyeUZvbnRcIik7XG52YXIgbWVzc2FnZUZvbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbmYpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmYubWVzc2FnZUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5tZXNzYWdlRm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLm1lc3NhZ2VGb250V2VpZ2h0XG4gIH07XG59LCBcIm1lc3NhZ2VGb250XCIpO1xuZnVuY3Rpb24gY2FsY0M0U2hhcGVUZXh0V0godGV4dFR5cGUsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgdGV4dENvbmYsIHRleHRMaW1pdFdpZHRoKSB7XG4gIGlmICghYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGgpIHtcbiAgICBpZiAoYzRTaGFwZVRleHRXcmFwKSB7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0ID0gd3JhcExhYmVsKGM0U2hhcGVbdGV4dFR5cGVdLnRleHQsIHRleHRMaW1pdFdpZHRoLCB0ZXh0Q29uZik7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS50ZXh0TGluZXMgPSBjNFNoYXBlW3RleHRUeXBlXS50ZXh0LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KS5sZW5ndGg7XG4gICAgICBjNFNoYXBlW3RleHRUeXBlXS53aWR0aCA9IHRleHRMaW1pdFdpZHRoO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0uaGVpZ2h0ID0gY2FsY3VsYXRlVGV4dEhlaWdodChjNFNoYXBlW3RleHRUeXBlXS50ZXh0LCB0ZXh0Q29uZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsaW5lcyA9IGM0U2hhcGVbdGV4dFR5cGVdLnRleHQuc3BsaXQoY29tbW9uX2RlZmF1bHQubGluZUJyZWFrUmVnZXgpO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0udGV4dExpbmVzID0gbGluZXMubGVuZ3RoO1xuICAgICAgbGV0IGxpbmVIZWlnaHQgPSAwO1xuICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0uaGVpZ2h0ID0gMDtcbiAgICAgIGM0U2hhcGVbdGV4dFR5cGVdLndpZHRoID0gMDtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBjNFNoYXBlW3RleHRUeXBlXS53aWR0aCA9IE1hdGgubWF4KFxuICAgICAgICAgIGNhbGN1bGF0ZVRleHRXaWR0aChsaW5lLCB0ZXh0Q29uZiksXG4gICAgICAgICAgYzRTaGFwZVt0ZXh0VHlwZV0ud2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgbGluZUhlaWdodCA9IGNhbGN1bGF0ZVRleHRIZWlnaHQobGluZSwgdGV4dENvbmYpO1xuICAgICAgICBjNFNoYXBlW3RleHRUeXBlXS5oZWlnaHQgPSBjNFNoYXBlW3RleHRUeXBlXS5oZWlnaHQgKyBsaW5lSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuX19uYW1lKGNhbGNDNFNoYXBlVGV4dFdILCBcImNhbGNDNFNoYXBlVGV4dFdIXCIpO1xudmFyIGRyYXdCb3VuZGFyeTIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRpYWdyYW0yLCBib3VuZGFyeSwgYm91bmRzKSB7XG4gIGJvdW5kYXJ5LnggPSBib3VuZHMuZGF0YS5zdGFydHg7XG4gIGJvdW5kYXJ5LnkgPSBib3VuZHMuZGF0YS5zdGFydHk7XG4gIGJvdW5kYXJ5LndpZHRoID0gYm91bmRzLmRhdGEuc3RvcHggLSBib3VuZHMuZGF0YS5zdGFydHg7XG4gIGJvdW5kYXJ5LmhlaWdodCA9IGJvdW5kcy5kYXRhLnN0b3B5IC0gYm91bmRzLmRhdGEuc3RhcnR5O1xuICBib3VuZGFyeS5sYWJlbC55ID0gY29uZi5jNFNoYXBlTWFyZ2luIC0gMzU7XG4gIGxldCBib3VuZGFyeVRleHRXcmFwID0gYm91bmRhcnkud3JhcCAmJiBjb25mLndyYXA7XG4gIGxldCBib3VuZGFyeUxhYmVsQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgYm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgPSBib3VuZGFyeUxhYmVsQ29uZi5mb250U2l6ZSArIDI7XG4gIGJvdW5kYXJ5TGFiZWxDb25mLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgbGV0IHRleHRMaW1pdFdpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKGJvdW5kYXJ5LmxhYmVsLnRleHQsIGJvdW5kYXJ5TGFiZWxDb25mKTtcbiAgY2FsY0M0U2hhcGVUZXh0V0goXCJsYWJlbFwiLCBib3VuZGFyeSwgYm91bmRhcnlUZXh0V3JhcCwgYm91bmRhcnlMYWJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgc3ZnRHJhd19kZWZhdWx0LmRyYXdCb3VuZGFyeShkaWFncmFtMiwgYm91bmRhcnksIGNvbmYpO1xufSwgXCJkcmF3Qm91bmRhcnlcIik7XG52YXIgZHJhd0M0U2hhcGVBcnJheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY3VycmVudEJvdW5kcywgZGlhZ3JhbTIsIGM0U2hhcGVBcnJheTIsIGM0U2hhcGVLZXlzKSB7XG4gIGxldCBZID0gMDtcbiAgZm9yIChjb25zdCBjNFNoYXBlS2V5IG9mIGM0U2hhcGVLZXlzKSB7XG4gICAgWSA9IDA7XG4gICAgY29uc3QgYzRTaGFwZSA9IGM0U2hhcGVBcnJheTJbYzRTaGFwZUtleV07XG4gICAgbGV0IGM0U2hhcGVUeXBlQ29uZiA9IGM0U2hhcGVGb250KGNvbmYsIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCk7XG4gICAgYzRTaGFwZVR5cGVDb25mLmZvbnRTaXplID0gYzRTaGFwZVR5cGVDb25mLmZvbnRTaXplIC0gMjtcbiAgICBjNFNoYXBlLnR5cGVDNFNoYXBlLndpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKFxuICAgICAgXCJcXHhBQlwiICsgYzRTaGFwZS50eXBlQzRTaGFwZS50ZXh0ICsgXCJcXHhCQlwiLFxuICAgICAgYzRTaGFwZVR5cGVDb25mXG4gICAgKTtcbiAgICBjNFNoYXBlLnR5cGVDNFNoYXBlLmhlaWdodCA9IGM0U2hhcGVUeXBlQ29uZi5mb250U2l6ZSArIDI7XG4gICAgYzRTaGFwZS50eXBlQzRTaGFwZS5ZID0gY29uZi5jNFNoYXBlUGFkZGluZztcbiAgICBZID0gYzRTaGFwZS50eXBlQzRTaGFwZS5ZICsgYzRTaGFwZS50eXBlQzRTaGFwZS5oZWlnaHQgLSA0O1xuICAgIGM0U2hhcGUuaW1hZ2UgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIFk6IDAgfTtcbiAgICBzd2l0Y2ggKGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCkge1xuICAgICAgY2FzZSBcInBlcnNvblwiOlxuICAgICAgY2FzZSBcImV4dGVybmFsX3BlcnNvblwiOlxuICAgICAgICBjNFNoYXBlLmltYWdlLndpZHRoID0gNDg7XG4gICAgICAgIGM0U2hhcGUuaW1hZ2UuaGVpZ2h0ID0gNDg7XG4gICAgICAgIGM0U2hhcGUuaW1hZ2UuWSA9IFk7XG4gICAgICAgIFkgPSBjNFNoYXBlLmltYWdlLlkgKyBjNFNoYXBlLmltYWdlLmhlaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChjNFNoYXBlLnNwcml0ZSkge1xuICAgICAgYzRTaGFwZS5pbWFnZS53aWR0aCA9IDQ4O1xuICAgICAgYzRTaGFwZS5pbWFnZS5oZWlnaHQgPSA0ODtcbiAgICAgIGM0U2hhcGUuaW1hZ2UuWSA9IFk7XG4gICAgICBZID0gYzRTaGFwZS5pbWFnZS5ZICsgYzRTaGFwZS5pbWFnZS5oZWlnaHQ7XG4gICAgfVxuICAgIGxldCBjNFNoYXBlVGV4dFdyYXAgPSBjNFNoYXBlLndyYXAgJiYgY29uZi53cmFwO1xuICAgIGxldCB0ZXh0TGltaXRXaWR0aCA9IGNvbmYud2lkdGggLSBjb25mLmM0U2hhcGVQYWRkaW5nICogMjtcbiAgICBsZXQgYzRTaGFwZUxhYmVsQ29uZiA9IGM0U2hhcGVGb250KGNvbmYsIGM0U2hhcGUudHlwZUM0U2hhcGUudGV4dCk7XG4gICAgYzRTaGFwZUxhYmVsQ29uZi5mb250U2l6ZSA9IGM0U2hhcGVMYWJlbENvbmYuZm9udFNpemUgKyAyO1xuICAgIGM0U2hhcGVMYWJlbENvbmYuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwibGFiZWxcIiwgYzRTaGFwZSwgYzRTaGFwZVRleHRXcmFwLCBjNFNoYXBlTGFiZWxDb25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgYzRTaGFwZS5sYWJlbC5ZID0gWSArIDg7XG4gICAgWSA9IGM0U2hhcGUubGFiZWwuWSArIGM0U2hhcGUubGFiZWwuaGVpZ2h0O1xuICAgIGlmIChjNFNoYXBlLnR5cGUgJiYgYzRTaGFwZS50eXBlLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGM0U2hhcGUudHlwZS50ZXh0ID0gXCJbXCIgKyBjNFNoYXBlLnR5cGUudGV4dCArIFwiXVwiO1xuICAgICAgbGV0IGM0U2hhcGVUeXBlQ29uZjIgPSBjNFNoYXBlRm9udChjb25mLCBjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXCJ0eXBlXCIsIGM0U2hhcGUsIGM0U2hhcGVUZXh0V3JhcCwgYzRTaGFwZVR5cGVDb25mMiwgdGV4dExpbWl0V2lkdGgpO1xuICAgICAgYzRTaGFwZS50eXBlLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjNFNoYXBlLnR5cGUuWSArIGM0U2hhcGUudHlwZS5oZWlnaHQ7XG4gICAgfSBlbHNlIGlmIChjNFNoYXBlLnRlY2huICYmIGM0U2hhcGUudGVjaG4udGV4dCAhPT0gXCJcIikge1xuICAgICAgYzRTaGFwZS50ZWNobi50ZXh0ID0gXCJbXCIgKyBjNFNoYXBlLnRlY2huLnRleHQgKyBcIl1cIjtcbiAgICAgIGxldCBjNFNoYXBlVGVjaG5Db25mID0gYzRTaGFwZUZvbnQoY29uZiwgYzRTaGFwZS50ZWNobi50ZXh0KTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFwidGVjaG5cIiwgYzRTaGFwZSwgYzRTaGFwZVRleHRXcmFwLCBjNFNoYXBlVGVjaG5Db25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgICBjNFNoYXBlLnRlY2huLlkgPSBZICsgNTtcbiAgICAgIFkgPSBjNFNoYXBlLnRlY2huLlkgKyBjNFNoYXBlLnRlY2huLmhlaWdodDtcbiAgICB9XG4gICAgbGV0IHJlY3RIZWlnaHQgPSBZO1xuICAgIGxldCByZWN0V2lkdGggPSBjNFNoYXBlLmxhYmVsLndpZHRoO1xuICAgIGlmIChjNFNoYXBlLmRlc2NyICYmIGM0U2hhcGUuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgICAgbGV0IGM0U2hhcGVEZXNjckNvbmYgPSBjNFNoYXBlRm9udChjb25mLCBjNFNoYXBlLnR5cGVDNFNoYXBlLnRleHQpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXCJkZXNjclwiLCBjNFNoYXBlLCBjNFNoYXBlVGV4dFdyYXAsIGM0U2hhcGVEZXNjckNvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICAgIGM0U2hhcGUuZGVzY3IuWSA9IFkgKyAyMDtcbiAgICAgIFkgPSBjNFNoYXBlLmRlc2NyLlkgKyBjNFNoYXBlLmRlc2NyLmhlaWdodDtcbiAgICAgIHJlY3RXaWR0aCA9IE1hdGgubWF4KGM0U2hhcGUubGFiZWwud2lkdGgsIGM0U2hhcGUuZGVzY3Iud2lkdGgpO1xuICAgICAgcmVjdEhlaWdodCA9IFkgLSBjNFNoYXBlLmRlc2NyLnRleHRMaW5lcyAqIDU7XG4gICAgfVxuICAgIHJlY3RXaWR0aCA9IHJlY3RXaWR0aCArIGNvbmYuYzRTaGFwZVBhZGRpbmc7XG4gICAgYzRTaGFwZS53aWR0aCA9IE1hdGgubWF4KGM0U2hhcGUud2lkdGggfHwgY29uZi53aWR0aCwgcmVjdFdpZHRoLCBjb25mLndpZHRoKTtcbiAgICBjNFNoYXBlLmhlaWdodCA9IE1hdGgubWF4KGM0U2hhcGUuaGVpZ2h0IHx8IGNvbmYuaGVpZ2h0LCByZWN0SGVpZ2h0LCBjb25mLmhlaWdodCk7XG4gICAgYzRTaGFwZS5tYXJnaW4gPSBjNFNoYXBlLm1hcmdpbiB8fCBjb25mLmM0U2hhcGVNYXJnaW47XG4gICAgY3VycmVudEJvdW5kcy5pbnNlcnQoYzRTaGFwZSk7XG4gICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdDNFNoYXBlKGRpYWdyYW0yLCBjNFNoYXBlLCBjb25mKTtcbiAgfVxuICBjdXJyZW50Qm91bmRzLmJ1bXBMYXN0TWFyZ2luKGNvbmYuYzRTaGFwZU1hcmdpbik7XG59LCBcImRyYXdDNFNoYXBlQXJyYXlcIik7XG52YXIgUG9pbnQgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiUG9pbnRcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxufTtcbnZhciBnZXRJbnRlcnNlY3RQb2ludCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZnJvbU5vZGUsIGVuZFBvaW50KSB7XG4gIGxldCB4MSA9IGZyb21Ob2RlLng7XG4gIGxldCB5MSA9IGZyb21Ob2RlLnk7XG4gIGxldCB4MiA9IGVuZFBvaW50Lng7XG4gIGxldCB5MiA9IGVuZFBvaW50Lnk7XG4gIGxldCBmcm9tQ2VudGVyWCA9IHgxICsgZnJvbU5vZGUud2lkdGggLyAyO1xuICBsZXQgZnJvbUNlbnRlclkgPSB5MSArIGZyb21Ob2RlLmhlaWdodCAvIDI7XG4gIGxldCBkeCA9IE1hdGguYWJzKHgxIC0geDIpO1xuICBsZXQgZHkgPSBNYXRoLmFicyh5MSAtIHkyKTtcbiAgbGV0IHRhbkRZWCA9IGR5IC8gZHg7XG4gIGxldCBmcm9tRFlYID0gZnJvbU5vZGUuaGVpZ2h0IC8gZnJvbU5vZGUud2lkdGg7XG4gIGxldCByZXR1cm5Qb2ludCA9IG51bGw7XG4gIGlmICh5MSA9PSB5MiAmJiB4MSA8IHgyKSB7XG4gICAgcmV0dXJuUG9pbnQgPSBuZXcgUG9pbnQoeDEgKyBmcm9tTm9kZS53aWR0aCwgZnJvbUNlbnRlclkpO1xuICB9IGVsc2UgaWYgKHkxID09IHkyICYmIHgxID4geDIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSwgZnJvbUNlbnRlclkpO1xuICB9IGVsc2UgaWYgKHgxID09IHgyICYmIHkxIDwgeTIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCwgeTEgKyBmcm9tTm9kZS5oZWlnaHQpO1xuICB9IGVsc2UgaWYgKHgxID09IHgyICYmIHkxID4geTIpIHtcbiAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCwgeTEpO1xuICB9XG4gIGlmICh4MSA+IHgyICYmIHkxIDwgeTIpIHtcbiAgICBpZiAoZnJvbURZWCA+PSB0YW5EWVgpIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KHgxLCBmcm9tQ2VudGVyWSArIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KFxuICAgICAgICBmcm9tQ2VudGVyWCAtIGR4IC8gZHkgKiBmcm9tTm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB5MSArIGZyb21Ob2RlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPCB4MiAmJiB5MSA8IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSArIGZyb21Ob2RlLndpZHRoLCBmcm9tQ2VudGVyWSArIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KFxuICAgICAgICBmcm9tQ2VudGVyWCArIGR4IC8gZHkgKiBmcm9tTm9kZS5oZWlnaHQgLyAyLFxuICAgICAgICB5MSArIGZyb21Ob2RlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPCB4MiAmJiB5MSA+IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSArIGZyb21Ob2RlLndpZHRoLCBmcm9tQ2VudGVyWSAtIHRhbkRZWCAqIGZyb21Ob2RlLndpZHRoIC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblBvaW50ID0gbmV3IFBvaW50KGZyb21DZW50ZXJYICsgZnJvbU5vZGUuaGVpZ2h0IC8gMiAqIGR4IC8gZHksIHkxKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoeDEgPiB4MiAmJiB5MSA+IHkyKSB7XG4gICAgaWYgKGZyb21EWVggPj0gdGFuRFlYKSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludCh4MSwgZnJvbUNlbnRlclkgLSBmcm9tTm9kZS53aWR0aCAvIDIgKiB0YW5EWVgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5Qb2ludCA9IG5ldyBQb2ludChmcm9tQ2VudGVyWCAtIGZyb21Ob2RlLmhlaWdodCAvIDIgKiBkeCAvIGR5LCB5MSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXR1cm5Qb2ludDtcbn0sIFwiZ2V0SW50ZXJzZWN0UG9pbnRcIik7XG52YXIgZ2V0SW50ZXJzZWN0UG9pbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihmcm9tTm9kZSwgZW5kTm9kZSkge1xuICBsZXQgZW5kSW50ZXJzZWN0UG9pbnQgPSB7IHg6IDAsIHk6IDAgfTtcbiAgZW5kSW50ZXJzZWN0UG9pbnQueCA9IGVuZE5vZGUueCArIGVuZE5vZGUud2lkdGggLyAyO1xuICBlbmRJbnRlcnNlY3RQb2ludC55ID0gZW5kTm9kZS55ICsgZW5kTm9kZS5oZWlnaHQgLyAyO1xuICBsZXQgc3RhcnRQb2ludCA9IGdldEludGVyc2VjdFBvaW50KGZyb21Ob2RlLCBlbmRJbnRlcnNlY3RQb2ludCk7XG4gIGVuZEludGVyc2VjdFBvaW50LnggPSBmcm9tTm9kZS54ICsgZnJvbU5vZGUud2lkdGggLyAyO1xuICBlbmRJbnRlcnNlY3RQb2ludC55ID0gZnJvbU5vZGUueSArIGZyb21Ob2RlLmhlaWdodCAvIDI7XG4gIGxldCBlbmRQb2ludCA9IGdldEludGVyc2VjdFBvaW50KGVuZE5vZGUsIGVuZEludGVyc2VjdFBvaW50KTtcbiAgcmV0dXJuIHsgc3RhcnRQb2ludCwgZW5kUG9pbnQgfTtcbn0sIFwiZ2V0SW50ZXJzZWN0UG9pbnRzXCIpO1xudmFyIGRyYXdSZWxzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlhZ3JhbTIsIHJlbHMyLCBnZXRDNFNoYXBlT2JqLCBkaWFnT2JqKSB7XG4gIGxldCBpID0gMDtcbiAgZm9yIChsZXQgcmVsIG9mIHJlbHMyKSB7XG4gICAgaSA9IGkgKyAxO1xuICAgIGxldCByZWxUZXh0V3JhcCA9IHJlbC53cmFwICYmIGNvbmYud3JhcDtcbiAgICBsZXQgcmVsQ29uZiA9IG1lc3NhZ2VGb250KGNvbmYpO1xuICAgIGxldCBkaWFncmFtVHlwZSA9IGRpYWdPYmouZGIuZ2V0QzRUeXBlKCk7XG4gICAgaWYgKGRpYWdyYW1UeXBlID09PSBcIkM0RHluYW1pY1wiKSB7XG4gICAgICByZWwubGFiZWwudGV4dCA9IGkgKyBcIjogXCIgKyByZWwubGFiZWwudGV4dDtcbiAgICB9XG4gICAgbGV0IHRleHRMaW1pdFdpZHRoID0gY2FsY3VsYXRlVGV4dFdpZHRoKHJlbC5sYWJlbC50ZXh0LCByZWxDb25mKTtcbiAgICBjYWxjQzRTaGFwZVRleHRXSChcImxhYmVsXCIsIHJlbCwgcmVsVGV4dFdyYXAsIHJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICBpZiAocmVsLnRlY2huICYmIHJlbC50ZWNobi50ZXh0ICE9PSBcIlwiKSB7XG4gICAgICB0ZXh0TGltaXRXaWR0aCA9IGNhbGN1bGF0ZVRleHRXaWR0aChyZWwudGVjaG4udGV4dCwgcmVsQ29uZik7XG4gICAgICBjYWxjQzRTaGFwZVRleHRXSChcInRlY2huXCIsIHJlbCwgcmVsVGV4dFdyYXAsIHJlbENvbmYsIHRleHRMaW1pdFdpZHRoKTtcbiAgICB9XG4gICAgaWYgKHJlbC5kZXNjciAmJiByZWwuZGVzY3IudGV4dCAhPT0gXCJcIikge1xuICAgICAgdGV4dExpbWl0V2lkdGggPSBjYWxjdWxhdGVUZXh0V2lkdGgocmVsLmRlc2NyLnRleHQsIHJlbENvbmYpO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXCJkZXNjclwiLCByZWwsIHJlbFRleHRXcmFwLCByZWxDb25mLCB0ZXh0TGltaXRXaWR0aCk7XG4gICAgfVxuICAgIGxldCBmcm9tTm9kZSA9IGdldEM0U2hhcGVPYmoocmVsLmZyb20pO1xuICAgIGxldCBlbmROb2RlID0gZ2V0QzRTaGFwZU9iaihyZWwudG8pO1xuICAgIGxldCBwb2ludHMgPSBnZXRJbnRlcnNlY3RQb2ludHMoZnJvbU5vZGUsIGVuZE5vZGUpO1xuICAgIHJlbC5zdGFydFBvaW50ID0gcG9pbnRzLnN0YXJ0UG9pbnQ7XG4gICAgcmVsLmVuZFBvaW50ID0gcG9pbnRzLmVuZFBvaW50O1xuICB9XG4gIHN2Z0RyYXdfZGVmYXVsdC5kcmF3UmVscyhkaWFncmFtMiwgcmVsczIsIGNvbmYpO1xufSwgXCJkcmF3UmVsc1wiKTtcbmZ1bmN0aW9uIGRyYXdJbnNpZGVCb3VuZGFyeShkaWFncmFtMiwgcGFyZW50Qm91bmRhcnlBbGlhcywgcGFyZW50Qm91bmRzLCBjdXJyZW50Qm91bmRhcmllcywgZGlhZ09iaikge1xuICBsZXQgY3VycmVudEJvdW5kcyA9IG5ldyBCb3VuZHMoZGlhZ09iaik7XG4gIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0ID0gcGFyZW50Qm91bmRzLmRhdGEud2lkdGhMaW1pdCAvIE1hdGgubWluKGM0Qm91bmRhcnlJblJvdzIsIGN1cnJlbnRCb3VuZGFyaWVzLmxlbmd0aCk7XG4gIGZvciAobGV0IFtpLCBjdXJyZW50Qm91bmRhcnldIG9mIGN1cnJlbnRCb3VuZGFyaWVzLmVudHJpZXMoKSkge1xuICAgIGxldCBZID0gMDtcbiAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2UgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIFk6IDAgfTtcbiAgICBpZiAoY3VycmVudEJvdW5kYXJ5LnNwcml0ZSkge1xuICAgICAgY3VycmVudEJvdW5kYXJ5LmltYWdlLndpZHRoID0gNDg7XG4gICAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuaGVpZ2h0ID0gNDg7XG4gICAgICBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuWSA9IFk7XG4gICAgICBZID0gY3VycmVudEJvdW5kYXJ5LmltYWdlLlkgKyBjdXJyZW50Qm91bmRhcnkuaW1hZ2UuaGVpZ2h0O1xuICAgIH1cbiAgICBsZXQgY3VycmVudEJvdW5kYXJ5VGV4dFdyYXAgPSBjdXJyZW50Qm91bmRhcnkud3JhcCAmJiBjb25mLndyYXA7XG4gICAgbGV0IGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgICBjdXJyZW50Qm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgPSBjdXJyZW50Qm91bmRhcnlMYWJlbENvbmYuZm9udFNpemUgKyAyO1xuICAgIGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZi5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgY2FsY0M0U2hhcGVUZXh0V0goXG4gICAgICBcImxhYmVsXCIsXG4gICAgICBjdXJyZW50Qm91bmRhcnksXG4gICAgICBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCxcbiAgICAgIGN1cnJlbnRCb3VuZGFyeUxhYmVsQ29uZixcbiAgICAgIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0XG4gICAgKTtcbiAgICBjdXJyZW50Qm91bmRhcnkubGFiZWwuWSA9IFkgKyA4O1xuICAgIFkgPSBjdXJyZW50Qm91bmRhcnkubGFiZWwuWSArIGN1cnJlbnRCb3VuZGFyeS5sYWJlbC5oZWlnaHQ7XG4gICAgaWYgKGN1cnJlbnRCb3VuZGFyeS50eXBlICYmIGN1cnJlbnRCb3VuZGFyeS50eXBlLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeS50eXBlLnRleHQgPSBcIltcIiArIGN1cnJlbnRCb3VuZGFyeS50eXBlLnRleHQgKyBcIl1cIjtcbiAgICAgIGxldCBjdXJyZW50Qm91bmRhcnlUeXBlQ29uZiA9IGJvdW5kYXJ5Rm9udChjb25mKTtcbiAgICAgIGNhbGNDNFNoYXBlVGV4dFdIKFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5LFxuICAgICAgICBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCxcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5VHlwZUNvbmYsXG4gICAgICAgIGN1cnJlbnRCb3VuZHMuZGF0YS53aWR0aExpbWl0XG4gICAgICApO1xuICAgICAgY3VycmVudEJvdW5kYXJ5LnR5cGUuWSA9IFkgKyA1O1xuICAgICAgWSA9IGN1cnJlbnRCb3VuZGFyeS50eXBlLlkgKyBjdXJyZW50Qm91bmRhcnkudHlwZS5oZWlnaHQ7XG4gICAgfVxuICAgIGlmIChjdXJyZW50Qm91bmRhcnkuZGVzY3IgJiYgY3VycmVudEJvdW5kYXJ5LmRlc2NyLnRleHQgIT09IFwiXCIpIHtcbiAgICAgIGxldCBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYgPSBib3VuZGFyeUZvbnQoY29uZik7XG4gICAgICBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYuZm9udFNpemUgPSBjdXJyZW50Qm91bmRhcnlEZXNjckNvbmYuZm9udFNpemUgLSAyO1xuICAgICAgY2FsY0M0U2hhcGVUZXh0V0goXG4gICAgICAgIFwiZGVzY3JcIixcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5LFxuICAgICAgICBjdXJyZW50Qm91bmRhcnlUZXh0V3JhcCxcbiAgICAgICAgY3VycmVudEJvdW5kYXJ5RGVzY3JDb25mLFxuICAgICAgICBjdXJyZW50Qm91bmRzLmRhdGEud2lkdGhMaW1pdFxuICAgICAgKTtcbiAgICAgIGN1cnJlbnRCb3VuZGFyeS5kZXNjci5ZID0gWSArIDIwO1xuICAgICAgWSA9IGN1cnJlbnRCb3VuZGFyeS5kZXNjci5ZICsgY3VycmVudEJvdW5kYXJ5LmRlc2NyLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKGkgPT0gMCB8fCBpICUgYzRCb3VuZGFyeUluUm93MiA9PT0gMCkge1xuICAgICAgbGV0IF94ID0gcGFyZW50Qm91bmRzLmRhdGEuc3RhcnR4ICsgY29uZi5kaWFncmFtTWFyZ2luWDtcbiAgICAgIGxldCBfeSA9IHBhcmVudEJvdW5kcy5kYXRhLnN0b3B5ICsgY29uZi5kaWFncmFtTWFyZ2luWSArIFk7XG4gICAgICBjdXJyZW50Qm91bmRzLnNldERhdGEoX3gsIF94LCBfeSwgX3kpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgX3ggPSBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggIT09IGN1cnJlbnRCb3VuZHMuZGF0YS5zdGFydHggPyBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggKyBjb25mLmRpYWdyYW1NYXJnaW5YIDogY3VycmVudEJvdW5kcy5kYXRhLnN0YXJ0eDtcbiAgICAgIGxldCBfeSA9IGN1cnJlbnRCb3VuZHMuZGF0YS5zdGFydHk7XG4gICAgICBjdXJyZW50Qm91bmRzLnNldERhdGEoX3gsIF94LCBfeSwgX3kpO1xuICAgIH1cbiAgICBjdXJyZW50Qm91bmRzLm5hbWUgPSBjdXJyZW50Qm91bmRhcnkuYWxpYXM7XG4gICAgbGV0IGN1cnJlbnRQZXJzb25PclN5c3RlbUFycmF5ID0gZGlhZ09iai5kYi5nZXRDNFNoYXBlQXJyYXkoY3VycmVudEJvdW5kYXJ5LmFsaWFzKTtcbiAgICBsZXQgY3VycmVudFBlcnNvbk9yU3lzdGVtS2V5cyA9IGRpYWdPYmouZGIuZ2V0QzRTaGFwZUtleXMoY3VycmVudEJvdW5kYXJ5LmFsaWFzKTtcbiAgICBpZiAoY3VycmVudFBlcnNvbk9yU3lzdGVtS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBkcmF3QzRTaGFwZUFycmF5KFxuICAgICAgICBjdXJyZW50Qm91bmRzLFxuICAgICAgICBkaWFncmFtMixcbiAgICAgICAgY3VycmVudFBlcnNvbk9yU3lzdGVtQXJyYXksXG4gICAgICAgIGN1cnJlbnRQZXJzb25PclN5c3RlbUtleXNcbiAgICAgICk7XG4gICAgfVxuICAgIHBhcmVudEJvdW5kYXJ5QWxpYXMgPSBjdXJyZW50Qm91bmRhcnkuYWxpYXM7XG4gICAgbGV0IG5leHRDdXJyZW50Qm91bmRhcmllcyA9IGRpYWdPYmouZGIuZ2V0Qm91bmRhcnlzKHBhcmVudEJvdW5kYXJ5QWxpYXMpO1xuICAgIGlmIChuZXh0Q3VycmVudEJvdW5kYXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgZHJhd0luc2lkZUJvdW5kYXJ5KFxuICAgICAgICBkaWFncmFtMixcbiAgICAgICAgcGFyZW50Qm91bmRhcnlBbGlhcyxcbiAgICAgICAgY3VycmVudEJvdW5kcyxcbiAgICAgICAgbmV4dEN1cnJlbnRCb3VuZGFyaWVzLFxuICAgICAgICBkaWFnT2JqXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudEJvdW5kYXJ5LmFsaWFzICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICBkcmF3Qm91bmRhcnkyKGRpYWdyYW0yLCBjdXJyZW50Qm91bmRhcnksIGN1cnJlbnRCb3VuZHMpO1xuICAgIH1cbiAgICBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSA9IE1hdGgubWF4KFxuICAgICAgY3VycmVudEJvdW5kcy5kYXRhLnN0b3B5ICsgY29uZi5jNFNoYXBlTWFyZ2luLFxuICAgICAgcGFyZW50Qm91bmRzLmRhdGEuc3RvcHlcbiAgICApO1xuICAgIHBhcmVudEJvdW5kcy5kYXRhLnN0b3B4ID0gTWF0aC5tYXgoXG4gICAgICBjdXJyZW50Qm91bmRzLmRhdGEuc3RvcHggKyBjb25mLmM0U2hhcGVNYXJnaW4sXG4gICAgICBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weFxuICAgICk7XG4gICAgZ2xvYmFsQm91bmRhcnlNYXhYID0gTWF0aC5tYXgoZ2xvYmFsQm91bmRhcnlNYXhYLCBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weCk7XG4gICAgZ2xvYmFsQm91bmRhcnlNYXhZID0gTWF0aC5tYXgoZ2xvYmFsQm91bmRhcnlNYXhZLCBwYXJlbnRCb3VuZHMuZGF0YS5zdG9weSk7XG4gIH1cbn1cbl9fbmFtZShkcmF3SW5zaWRlQm91bmRhcnksIFwiZHJhd0luc2lkZUJvdW5kYXJ5XCIpO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF90ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uZiA9IGdldENvbmZpZygpLmM0O1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgbGV0IGRiID0gZGlhZ09iai5kYjtcbiAgZGlhZ09iai5kYi5zZXRXcmFwKGNvbmYud3JhcCk7XG4gIGM0U2hhcGVJblJvdzIgPSBkYi5nZXRDNFNoYXBlSW5Sb3coKTtcbiAgYzRCb3VuZGFyeUluUm93MiA9IGRiLmdldEM0Qm91bmRhcnlJblJvdygpO1xuICBsb2cuZGVidWcoYEM6JHtKU09OLnN0cmluZ2lmeShjb25mLCBudWxsLCAyKX1gKTtcbiAgY29uc3QgZGlhZ3JhbTIgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApIDogc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0Q29tcHV0ZXJJY29uKGRpYWdyYW0yKTtcbiAgc3ZnRHJhd19kZWZhdWx0Lmluc2VydERhdGFiYXNlSWNvbihkaWFncmFtMik7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRDbG9ja0ljb24oZGlhZ3JhbTIpO1xuICBsZXQgc2NyZWVuQm91bmRzID0gbmV3IEJvdW5kcyhkaWFnT2JqKTtcbiAgc2NyZWVuQm91bmRzLnNldERhdGEoXG4gICAgY29uZi5kaWFncmFtTWFyZ2luWCxcbiAgICBjb25mLmRpYWdyYW1NYXJnaW5YLFxuICAgIGNvbmYuZGlhZ3JhbU1hcmdpblksXG4gICAgY29uZi5kaWFncmFtTWFyZ2luWVxuICApO1xuICBzY3JlZW5Cb3VuZHMuZGF0YS53aWR0aExpbWl0ID0gc2NyZWVuLmF2YWlsV2lkdGg7XG4gIGdsb2JhbEJvdW5kYXJ5TWF4WCA9IGNvbmYuZGlhZ3JhbU1hcmdpblg7XG4gIGdsb2JhbEJvdW5kYXJ5TWF4WSA9IGNvbmYuZGlhZ3JhbU1hcmdpblk7XG4gIGNvbnN0IHRpdGxlMiA9IGRpYWdPYmouZGIuZ2V0VGl0bGUoKTtcbiAgbGV0IGN1cnJlbnRCb3VuZGFyaWVzID0gZGlhZ09iai5kYi5nZXRCb3VuZGFyeXMoXCJcIik7XG4gIGRyYXdJbnNpZGVCb3VuZGFyeShkaWFncmFtMiwgXCJcIiwgc2NyZWVuQm91bmRzLCBjdXJyZW50Qm91bmRhcmllcywgZGlhZ09iaik7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRBcnJvd0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dFbmQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGRpYWdyYW0yKTtcbiAgZHJhd1JlbHMyKGRpYWdyYW0yLCBkaWFnT2JqLmRiLmdldFJlbHMoKSwgZGlhZ09iai5kYi5nZXRDNFNoYXBlLCBkaWFnT2JqKTtcbiAgc2NyZWVuQm91bmRzLmRhdGEuc3RvcHggPSBnbG9iYWxCb3VuZGFyeU1heFg7XG4gIHNjcmVlbkJvdW5kcy5kYXRhLnN0b3B5ID0gZ2xvYmFsQm91bmRhcnlNYXhZO1xuICBjb25zdCBib3ggPSBzY3JlZW5Cb3VuZHMuZGF0YTtcbiAgbGV0IGJveEhlaWdodCA9IGJveC5zdG9weSAtIGJveC5zdGFydHk7XG4gIGxldCBoZWlnaHQgPSBib3hIZWlnaHQgKyAyICogY29uZi5kaWFncmFtTWFyZ2luWTtcbiAgbGV0IGJveFdpZHRoID0gYm94LnN0b3B4IC0gYm94LnN0YXJ0eDtcbiAgY29uc3Qgd2lkdGggPSBib3hXaWR0aCArIDIgKiBjb25mLmRpYWdyYW1NYXJnaW5YO1xuICBpZiAodGl0bGUyKSB7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlMikuYXR0cihcInhcIiwgKGJveC5zdG9weCAtIGJveC5zdGFydHgpIC8gMiAtIDQgKiBjb25mLmRpYWdyYW1NYXJnaW5YKS5hdHRyKFwieVwiLCBib3guc3RhcnR5ICsgY29uZi5kaWFncmFtTWFyZ2luWSk7XG4gIH1cbiAgY29uZmlndXJlU3ZnU2l6ZShkaWFncmFtMiwgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIGNvbnN0IGV4dHJhVmVydEZvclRpdGxlID0gdGl0bGUyID8gNjAgOiAwO1xuICBkaWFncmFtMi5hdHRyKFxuICAgIFwidmlld0JveFwiLFxuICAgIGJveC5zdGFydHggLSBjb25mLmRpYWdyYW1NYXJnaW5YICsgXCIgLVwiICsgKGNvbmYuZGlhZ3JhbU1hcmdpblkgKyBleHRyYVZlcnRGb3JUaXRsZSkgKyBcIiBcIiArIHdpZHRoICsgXCIgXCIgKyAoaGVpZ2h0ICsgZXh0cmFWZXJ0Rm9yVGl0bGUpXG4gICk7XG4gIGxvZy5kZWJ1ZyhgbW9kZWxzOmAsIGJveCk7XG59LCBcImRyYXdcIik7XG52YXIgYzRSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTogZHJhd0M0U2hhcGVBcnJheSxcbiAgZHJhd0JvdW5kYXJ5OiBkcmF3Qm91bmRhcnkyLFxuICBzZXRDb25mLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYzQvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYC5wZXJzb24ge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBlcnNvbkJvcmRlcn07XG4gICAgZmlsbDogJHtvcHRpb25zLnBlcnNvbkJrZ307XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYzQvYzREaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBjNERpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IGM0RGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IGM0UmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeyBjNCwgd3JhcCB9KSA9PiB7XG4gICAgYzRSZW5kZXJlcl9kZWZhdWx0LnNldENvbmYoYzQpO1xuICAgIGM0RGJfZGVmYXVsdC5zZXRXcmFwKHdyYXApO1xuICB9LCBcImluaXRcIilcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL3JlbmRlcmluZy11dGlsL2luc2VydEVsZW1lbnRzRm9yU2l6ZS5qc1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG52YXIgZ2V0RGlhZ3JhbUVsZW1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgc2VjdXJpdHlMZXZlbCkgPT4ge1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgcmV0dXJuIHN2Zztcbn0sIFwiZ2V0RGlhZ3JhbUVsZW1lbnRcIik7XG5cbi8vIHNyYy9yZW5kZXJpbmctdXRpbC9zZXR1cFZpZXdQb3J0Rm9yU1ZHLnRzXG52YXIgc2V0dXBWaWV3UG9ydEZvclNWRyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2ZywgcGFkZGluZywgY3NzRGlhZ3JhbSwgdXNlTWF4V2lkdGgpID0+IHtcbiAgc3ZnLmF0dHIoXCJjbGFzc1wiLCBjc3NEaWFncmFtKTtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0gPSBjYWxjdWxhdGVEaW1lbnNpb25zV2l0aFBhZGRpbmcoc3ZnLCBwYWRkaW5nKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgd2lkdGgsIHVzZU1heFdpZHRoKTtcbiAgY29uc3Qgdmlld0JveCA9IGNyZWF0ZVZpZXdCb3goeCwgeSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZyk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCB2aWV3Qm94KTtcbiAgbG9nLmRlYnVnKGB2aWV3Qm94IGNvbmZpZ3VyZWQ6ICR7dmlld0JveH0gd2l0aCBwYWRkaW5nOiAke3BhZGRpbmd9YCk7XG59LCBcInNldHVwVmlld1BvcnRGb3JTVkdcIik7XG52YXIgY2FsY3VsYXRlRGltZW5zaW9uc1dpdGhQYWRkaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3ZnLCBwYWRkaW5nKSA9PiB7XG4gIGNvbnN0IGJvdW5kcyA9IHN2Zy5ub2RlKCk/LmdldEJCb3goKSB8fCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHg6IDAsIHk6IDAgfTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogYm91bmRzLndpZHRoICsgcGFkZGluZyAqIDIsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDIsXG4gICAgeDogYm91bmRzLngsXG4gICAgeTogYm91bmRzLnlcbiAgfTtcbn0sIFwiY2FsY3VsYXRlRGltZW5zaW9uc1dpdGhQYWRkaW5nXCIpO1xudmFyIGNyZWF0ZVZpZXdCb3ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSA9PiB7XG4gIHJldHVybiBgJHt4IC0gcGFkZGluZ30gJHt5IC0gcGFkZGluZ30gJHt3aWR0aH0gJHtoZWlnaHR9YDtcbn0sIFwiY3JlYXRlVmlld0JveFwiKTtcblxuZXhwb3J0IHtcbiAgZ2V0RGlhZ3JhbUVsZW1lbnQsXG4gIHNldHVwVmlld1BvcnRGb3JTVkdcbn07XG4iLAogICAgImltcG9ydCB7XG4gIGNyZWF0ZVRleHQsXG4gIHJlcGxhY2VJY29uU3Vic3RyaW5nXG59IGZyb20gXCIuL2NodW5rLVpJNlYyVUUyLm1qc1wiO1xuaW1wb3J0IHtcbiAgZGVjb2RlRW50aXRpZXNcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGV2YWx1YXRlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgbG9nLFxuICBzYW5pdGl6ZVRleHRcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2NyZWF0ZUxhYmVsLmpzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmZ1bmN0aW9uIGFwcGx5U3R5bGUoZG9tLCBzdHlsZUZuKSB7XG4gIGlmIChzdHlsZUZuKSB7XG4gICAgZG9tLmF0dHIoXCJzdHlsZVwiLCBzdHlsZUZuKTtcbiAgfVxufVxuX19uYW1lKGFwcGx5U3R5bGUsIFwiYXBwbHlTdHlsZVwiKTtcbmZ1bmN0aW9uIGFkZEh0bWxMYWJlbChub2RlKSB7XG4gIGNvbnN0IGZvID0gc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZm9yZWlnbk9iamVjdFwiKSk7XG4gIGNvbnN0IGRpdiA9IGZvLmFwcGVuZChcInhodG1sOmRpdlwiKTtcbiAgY29uc3QgbGFiZWwgPSBub2RlLmxhYmVsO1xuICBjb25zdCBsYWJlbENsYXNzID0gbm9kZS5pc05vZGUgPyBcIm5vZGVMYWJlbFwiIDogXCJlZGdlTGFiZWxcIjtcbiAgY29uc3Qgc3BhbiA9IGRpdi5hcHBlbmQoXCJzcGFuXCIpO1xuICBzcGFuLmh0bWwobGFiZWwpO1xuICBhcHBseVN0eWxlKHNwYW4sIG5vZGUubGFiZWxTdHlsZSk7XG4gIHNwYW4uYXR0cihcImNsYXNzXCIsIGxhYmVsQ2xhc3MpO1xuICBhcHBseVN0eWxlKGRpdiwgbm9kZS5sYWJlbFN0eWxlKTtcbiAgZGl2LnN0eWxlKFwiZGlzcGxheVwiLCBcImlubGluZS1ibG9ja1wiKTtcbiAgZGl2LnN0eWxlKFwid2hpdGUtc3BhY2VcIiwgXCJub3dyYXBcIik7XG4gIGRpdi5hdHRyKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpO1xuICByZXR1cm4gZm8ubm9kZSgpO1xufVxuX19uYW1lKGFkZEh0bWxMYWJlbCwgXCJhZGRIdG1sTGFiZWxcIik7XG52YXIgY3JlYXRlTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChfdmVydGV4VGV4dCwgc3R5bGUsIGlzVGl0bGUsIGlzTm9kZSkgPT4ge1xuICBsZXQgdmVydGV4VGV4dCA9IF92ZXJ0ZXhUZXh0IHx8IFwiXCI7XG4gIGlmICh0eXBlb2YgdmVydGV4VGV4dCA9PT0gXCJvYmplY3RcIikge1xuICAgIHZlcnRleFRleHQgPSB2ZXJ0ZXhUZXh0WzBdO1xuICB9XG4gIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICB2ZXJ0ZXhUZXh0ID0gdmVydGV4VGV4dC5yZXBsYWNlKC9cXFxcbnxcXG4vZywgXCI8YnIgLz5cIik7XG4gICAgbG9nLmRlYnVnKFwidmVydGV4VGV4dFwiICsgdmVydGV4VGV4dCk7XG4gICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgIGlzTm9kZSxcbiAgICAgIGxhYmVsOiByZXBsYWNlSWNvblN1YnN0cmluZyhkZWNvZGVFbnRpdGllcyh2ZXJ0ZXhUZXh0KSksXG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZS5yZXBsYWNlKFwiZmlsbDpcIiwgXCJjb2xvcjpcIilcbiAgICB9O1xuICAgIGxldCB2ZXJ0ZXhOb2RlID0gYWRkSHRtbExhYmVsKG5vZGUpO1xuICAgIHJldHVybiB2ZXJ0ZXhOb2RlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0ZXh0XCIpO1xuICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKSk7XG4gICAgbGV0IHJvd3MgPSBbXTtcbiAgICBpZiAodHlwZW9mIHZlcnRleFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0LnNwbGl0KC9cXFxcbnxcXG58PGJyXFxzKlxcLz8+L2dpKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmVydGV4VGV4dCkpIHtcbiAgICAgIHJvd3MgPSB2ZXJ0ZXhUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dzID0gW107XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHRzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgIHRzcGFuLnNldEF0dHJpYnV0ZShcInhcIiwgXCIwXCIpO1xuICAgICAgaWYgKGlzVGl0bGUpIHtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJ0aXRsZS1yb3dcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInJvd1wiKTtcbiAgICAgIH1cbiAgICAgIHRzcGFuLnRleHRDb250ZW50ID0gcm93LnRyaW0oKTtcbiAgICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgICB9XG4gICAgcmV0dXJuIHN2Z0xhYmVsO1xuICB9XG59LCBcImNyZWF0ZUxhYmVsXCIpO1xudmFyIGNyZWF0ZUxhYmVsX2RlZmF1bHQgPSBjcmVhdGVMYWJlbDtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvc2hhcGVzL3V0aWwuanNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3QyIH0gZnJvbSBcImQzXCI7XG52YXIgbGFiZWxIZWxwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUsIF9jbGFzc2VzLCBpc05vZGUpID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGxldCBjbGFzc2VzO1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gbm9kZS51c2VIdG1sTGFiZWxzIHx8IGV2YWx1YXRlKGNvbmZpZy5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGlmICghX2NsYXNzZXMpIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzID0gX2NsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5sYWJlbFN0eWxlKTtcbiAgbGV0IGxhYmVsVGV4dDtcbiAgaWYgKG5vZGUubGFiZWxUZXh0ID09PSB2b2lkIDApIHtcbiAgICBsYWJlbFRleHQgPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIGxhYmVsVGV4dCA9IHR5cGVvZiBub2RlLmxhYmVsVGV4dCA9PT0gXCJzdHJpbmdcIiA/IG5vZGUubGFiZWxUZXh0IDogbm9kZS5sYWJlbFRleHRbMF07XG4gIH1cbiAgY29uc3QgdGV4dE5vZGUgPSBsYWJlbC5ub2RlKCk7XG4gIGxldCB0ZXh0O1xuICBpZiAobm9kZS5sYWJlbFR5cGUgPT09IFwibWFya2Rvd25cIikge1xuICAgIHRleHQgPSBjcmVhdGVUZXh0KFxuICAgICAgbGFiZWwsXG4gICAgICBzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWxUZXh0KSwgY29uZmlnKSxcbiAgICAgIHtcbiAgICAgICAgdXNlSHRtbExhYmVscyxcbiAgICAgICAgd2lkdGg6IG5vZGUud2lkdGggfHwgY29uZmlnLmZsb3djaGFydC53cmFwcGluZ1dpZHRoLFxuICAgICAgICBjbGFzc2VzOiBcIm1hcmtkb3duLW5vZGUtbGFiZWxcIlxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IHRleHROb2RlLmFwcGVuZENoaWxkKFxuICAgICAgY3JlYXRlTGFiZWxfZGVmYXVsdChzYW5pdGl6ZVRleHQoZGVjb2RlRW50aXRpZXMobGFiZWxUZXh0KSwgY29uZmlnKSwgbm9kZS5sYWJlbFN0eWxlLCBmYWxzZSwgaXNOb2RlKVxuICAgICk7XG4gIH1cbiAgbGV0IGJib3ggPSB0ZXh0LmdldEJCb3goKTtcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBpZiAoZXZhbHVhdGUoY29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QyKHRleHQpO1xuICAgIGNvbnN0IGltYWdlcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcImltZ1wiKTtcbiAgICBpZiAoaW1hZ2VzKSB7XG4gICAgICBjb25zdCBub0ltZ1RleHQgPSBsYWJlbFRleHQucmVwbGFjZSgvPGltZ1tePl0qPi9nLCBcIlwiKS50cmltKCkgPT09IFwiXCI7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgWy4uLmltYWdlc10ubWFwKFxuICAgICAgICAgIChpbWcpID0+IG5ldyBQcm9taXNlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwSW1hZ2UoKSB7XG4gICAgICAgICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgICAgICAgIGltZy5zdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJjb2x1bW5cIjtcbiAgICAgICAgICAgICAgaWYgKG5vSW1nVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlGb250U2l6ZSA9IGNvbmZpZy5mb250U2l6ZSA/IGNvbmZpZy5mb250U2l6ZSA6IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVubGFyZ2luZ0ZhY3RvciA9IDU7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChib2R5Rm9udFNpemUsIDEwKSAqIGVubGFyZ2luZ0ZhY3RvciArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWluV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMoaW1nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fbmFtZShzZXR1cEltYWdlLCBcInNldHVwSW1hZ2VcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGltZy5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHNldHVwSW1hZ2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHNldHVwSW1hZ2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGlmICh1c2VIdG1sTGFiZWxzKSB7XG4gICAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC1iYm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLCBcIiArIC1iYm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gIH1cbiAgaWYgKG5vZGUuY2VudGVyTGFiZWwpIHtcbiAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLWJib3gud2lkdGggLyAyICsgXCIsIFwiICsgLWJib3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICBsYWJlbC5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpO1xuICByZXR1cm4geyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcsIGxhYmVsIH07XG59LCBcImxhYmVsSGVscGVyXCIpO1xudmFyIHVwZGF0ZU5vZGVCb3VuZHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBlbGVtZW50KSA9PiB7XG4gIGNvbnN0IGJib3ggPSBlbGVtZW50Lm5vZGUoKS5nZXRCQm94KCk7XG4gIG5vZGUud2lkdGggPSBiYm94LndpZHRoO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0O1xufSwgXCJ1cGRhdGVOb2RlQm91bmRzXCIpO1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbC1jb250YWluZXJcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIC13IC8gMiArIFwiLFwiICsgaCAvIDIgKyBcIilcIik7XG59XG5fX25hbWUoaW5zZXJ0UG9seWdvblNoYXBlLCBcImluc2VydFBvbHlnb25TaGFwZVwiKTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvbm9kZXMuanNcbmltcG9ydCB7IHNlbGVjdCBhcyBzZWxlY3QzIH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2Jsb2NrQXJyb3dIZWxwZXIudHNcbnZhciBleHBhbmRBbmREZWR1cGxpY2F0ZURpcmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkaXJlY3Rpb25zKSA9PiB7XG4gIGNvbnN0IHVuaXF1ZURpcmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IGRpcmVjdGlvbiBvZiBkaXJlY3Rpb25zKSB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgIHVuaXF1ZURpcmVjdGlvbnMuYWRkKFwicmlnaHRcIik7XG4gICAgICAgIHVuaXF1ZURpcmVjdGlvbnMuYWRkKFwibGVmdFwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICB1bmlxdWVEaXJlY3Rpb25zLmFkZChcInVwXCIpO1xuICAgICAgICB1bmlxdWVEaXJlY3Rpb25zLmFkZChcImRvd25cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdW5pcXVlRGlyZWN0aW9ucy5hZGQoZGlyZWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmlxdWVEaXJlY3Rpb25zO1xufSwgXCJleHBhbmRBbmREZWR1cGxpY2F0ZURpcmVjdGlvbnNcIik7XG52YXIgZ2V0QXJyb3dQb2ludHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkdXBsaWNhdGVkRGlyZWN0aW9ucywgYmJveCwgbm9kZSkgPT4ge1xuICBjb25zdCBkaXJlY3Rpb25zID0gZXhwYW5kQW5kRGVkdXBsaWNhdGVEaXJlY3Rpb25zKGR1cGxpY2F0ZWREaXJlY3Rpb25zKTtcbiAgY29uc3QgZiA9IDI7XG4gIGNvbnN0IGhlaWdodCA9IGJib3guaGVpZ2h0ICsgMiAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgbWlkcG9pbnQgPSBoZWlnaHQgLyBmO1xuICBjb25zdCB3aWR0aCA9IGJib3gud2lkdGggKyAyICogbWlkcG9pbnQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcImRvd25cIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gQm90dG9tXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGggLyAyLCB5OiAyICogcGFkZGluZyB9LFxuICAgICAgeyB4OiB3aWR0aCAtIG1pZHBvaW50LCB5OiAwIH0sXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICAvLyBSaWdodFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCAvIDMgfSxcbiAgICAgIHsgeDogd2lkdGggKyAyICogcGFkZGluZywgeTogLWhlaWdodCAvIDIgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC0yICogaGVpZ2h0IC8gMyB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCB9LFxuICAgICAgLy8gVG9wXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLyAyLCB5OiAtaGVpZ2h0IC0gMiAqIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIC8vIExlZnRcbiAgICAgIHsgeDogMCwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiAwLCB5OiAtMiAqIGhlaWdodCAvIDMgfSxcbiAgICAgIHsgeDogLTIgKiBwYWRkaW5nLCB5OiAtaGVpZ2h0IC8gMiB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0IC8gMyB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAwIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgLyAyIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogMCwgeTogLWhlaWdodCAvIDIgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJsZWZ0XCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogMCB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcInVwXCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1taWRwb2ludCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCArIG1pZHBvaW50IH0sXG4gICAgICB7IHg6IDAsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwibGVmdFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcInVwXCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC1taWRwb2ludCB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0ICsgbWlkcG9pbnQgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJsZWZ0XCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgLyAyIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtaGVpZ2h0IH0sXG4gICAgICB7IHg6IDAsIHk6IC1oZWlnaHQgLyAyIH1cbiAgICBdO1xuICB9XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhcInVwXCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBCb3R0b20gY2VudGVyXG4gICAgICB7IHg6IHdpZHRoIC8gMiwgeTogMCB9LFxuICAgICAgLy8gTGVmdCBwb250IG9mIGJvdHRvbSBhcnJvd1xuICAgICAgeyB4OiAwLCB5OiAtcGFkZGluZyB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIC8vIExlZnQgdG9wIG92ZXIgdmVydGljYWwgc2VjdGlvblxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogMCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIC8vIFRvcCBvZiBhcnJvd1xuICAgICAgeyB4OiB3aWR0aCAvIDIsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICAvLyBUb3Agb2YgcmlnaHQgdmVydGljYWwgYmFyXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoLCB5OiAtcGFkZGluZyB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJyaWdodFwiKSAmJiBkaXJlY3Rpb25zLmhhcyhcInVwXCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLW1pZHBvaW50IH0sXG4gICAgICB7IHg6IDAsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJkb3duXCIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogMCB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0IH1cbiAgICBdO1xuICB9XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikgJiYgZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC1taWRwb2ludCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJsZWZ0XCIpICYmIGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHdpZHRoLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwicmlnaHRcIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IDAgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1oZWlnaHQgLyAyIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIC8vIHRvcCBsZWZ0IGNvcm5lciBvZiBhcnJvd1xuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH1cbiAgICBdO1xuICB9XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhcImxlZnRcIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyB4OiBtaWRwb2ludCwgeTogMCB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIC8vIFR3byBwb2ludHMsIHRoZSByaWdodCBjb3JuZXJzXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1wYWRkaW5nIH0sXG4gICAgICB7IHg6IHdpZHRoIC0gbWlkcG9pbnQsIHk6IC1oZWlnaHQgKyBwYWRkaW5nIH0sXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtaGVpZ2h0ICsgcGFkZGluZyB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0IC8gMiB9XG4gICAgXTtcbiAgfVxuICBpZiAoZGlyZWN0aW9ucy5oYXMoXCJ1cFwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBCb3R0b20gY2VudGVyXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtcGFkZGluZyB9LFxuICAgICAgLy8gTGVmdCB0b3Agb3ZlciB2ZXJ0aWNhbCBzZWN0aW9uXG4gICAgICB7IHg6IG1pZHBvaW50LCB5OiAtaGVpZ2h0ICsgcGFkZGluZyB9LFxuICAgICAgeyB4OiAwLCB5OiAtaGVpZ2h0ICsgcGFkZGluZyB9LFxuICAgICAgLy8gVG9wIG9mIGFycm93XG4gICAgICB7IHg6IHdpZHRoIC8gMiwgeTogLWhlaWdodCB9LFxuICAgICAgeyB4OiB3aWR0aCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIC8vIFRvcCBvZiByaWdodCB2ZXJ0aWNhbCBiYXJcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLXBhZGRpbmcgfVxuICAgIF07XG4gIH1cbiAgaWYgKGRpcmVjdGlvbnMuaGFzKFwiZG93blwiKSkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBCb3R0b20gY2VudGVyXG4gICAgICB7IHg6IHdpZHRoIC8gMiwgeTogMCB9LFxuICAgICAgLy8gTGVmdCBwb250IG9mIGJvdHRvbSBhcnJvd1xuICAgICAgeyB4OiAwLCB5OiAtcGFkZGluZyB9LFxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIC8vIExlZnQgdG9wIG92ZXIgdmVydGljYWwgc2VjdGlvblxuICAgICAgeyB4OiBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLWhlaWdodCArIHBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGggLSBtaWRwb2ludCwgeTogLXBhZGRpbmcgfSxcbiAgICAgIHsgeDogd2lkdGgsIHk6IC1wYWRkaW5nIH1cbiAgICBdO1xuICB9XG4gIHJldHVybiBbeyB4OiAwLCB5OiAwIH1dO1xufSwgXCJnZXRBcnJvd1BvaW50c1wiKTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvaW50ZXJzZWN0L2ludGVyc2VjdC1ub2RlLmpzXG5mdW5jdGlvbiBpbnRlcnNlY3ROb2RlKG5vZGUsIHBvaW50KSB7XG4gIHJldHVybiBub2RlLmludGVyc2VjdChwb2ludCk7XG59XG5fX25hbWUoaW50ZXJzZWN0Tm9kZSwgXCJpbnRlcnNlY3ROb2RlXCIpO1xudmFyIGludGVyc2VjdF9ub2RlX2RlZmF1bHQgPSBpbnRlcnNlY3ROb2RlO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbnRlcnNlY3QvaW50ZXJzZWN0LWVsbGlwc2UuanNcbmZ1bmN0aW9uIGludGVyc2VjdEVsbGlwc2Uobm9kZSwgcngsIHJ5LCBwb2ludCkge1xuICB2YXIgY3ggPSBub2RlLng7XG4gIHZhciBjeSA9IG5vZGUueTtcbiAgdmFyIHB4ID0gY3ggLSBwb2ludC54O1xuICB2YXIgcHkgPSBjeSAtIHBvaW50Lnk7XG4gIHZhciBkZXQgPSBNYXRoLnNxcnQocnggKiByeCAqIHB5ICogcHkgKyByeSAqIHJ5ICogcHggKiBweCk7XG4gIHZhciBkeCA9IE1hdGguYWJzKHJ4ICogcnkgKiBweCAvIGRldCk7XG4gIGlmIChwb2ludC54IDwgY3gpIHtcbiAgICBkeCA9IC1keDtcbiAgfVxuICB2YXIgZHkgPSBNYXRoLmFicyhyeCAqIHJ5ICogcHkgLyBkZXQpO1xuICBpZiAocG9pbnQueSA8IGN5KSB7XG4gICAgZHkgPSAtZHk7XG4gIH1cbiAgcmV0dXJuIHsgeDogY3ggKyBkeCwgeTogY3kgKyBkeSB9O1xufVxuX19uYW1lKGludGVyc2VjdEVsbGlwc2UsIFwiaW50ZXJzZWN0RWxsaXBzZVwiKTtcbnZhciBpbnRlcnNlY3RfZWxsaXBzZV9kZWZhdWx0ID0gaW50ZXJzZWN0RWxsaXBzZTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvaW50ZXJzZWN0L2ludGVyc2VjdC1jaXJjbGUuanNcbmZ1bmN0aW9uIGludGVyc2VjdENpcmNsZShub2RlLCByeCwgcG9pbnQpIHtcbiAgcmV0dXJuIGludGVyc2VjdF9lbGxpcHNlX2RlZmF1bHQobm9kZSwgcngsIHJ4LCBwb2ludCk7XG59XG5fX25hbWUoaW50ZXJzZWN0Q2lyY2xlLCBcImludGVyc2VjdENpcmNsZVwiKTtcbnZhciBpbnRlcnNlY3RfY2lyY2xlX2RlZmF1bHQgPSBpbnRlcnNlY3RDaXJjbGU7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2ludGVyc2VjdC9pbnRlcnNlY3QtbGluZS5qc1xuZnVuY3Rpb24gaW50ZXJzZWN0TGluZShwMSwgcDIsIHExLCBxMikge1xuICB2YXIgYTEsIGEyLCBiMSwgYjIsIGMxLCBjMjtcbiAgdmFyIHIxLCByMiwgcjMsIHI0O1xuICB2YXIgZGVub20sIG9mZnNldCwgbnVtO1xuICB2YXIgeCwgeTtcbiAgYTEgPSBwMi55IC0gcDEueTtcbiAgYjEgPSBwMS54IC0gcDIueDtcbiAgYzEgPSBwMi54ICogcDEueSAtIHAxLnggKiBwMi55O1xuICByMyA9IGExICogcTEueCArIGIxICogcTEueSArIGMxO1xuICByNCA9IGExICogcTIueCArIGIxICogcTIueSArIGMxO1xuICBpZiAocjMgIT09IDAgJiYgcjQgIT09IDAgJiYgc2FtZVNpZ24ocjMsIHI0KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhMiA9IHEyLnkgLSBxMS55O1xuICBiMiA9IHExLnggLSBxMi54O1xuICBjMiA9IHEyLnggKiBxMS55IC0gcTEueCAqIHEyLnk7XG4gIHIxID0gYTIgKiBwMS54ICsgYjIgKiBwMS55ICsgYzI7XG4gIHIyID0gYTIgKiBwMi54ICsgYjIgKiBwMi55ICsgYzI7XG4gIGlmIChyMSAhPT0gMCAmJiByMiAhPT0gMCAmJiBzYW1lU2lnbihyMSwgcjIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRlbm9tID0gYTEgKiBiMiAtIGEyICogYjE7XG4gIGlmIChkZW5vbSA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBvZmZzZXQgPSBNYXRoLmFicyhkZW5vbSAvIDIpO1xuICBudW0gPSBiMSAqIGMyIC0gYjIgKiBjMTtcbiAgeCA9IG51bSA8IDAgPyAobnVtIC0gb2Zmc2V0KSAvIGRlbm9tIDogKG51bSArIG9mZnNldCkgLyBkZW5vbTtcbiAgbnVtID0gYTIgKiBjMSAtIGExICogYzI7XG4gIHkgPSBudW0gPCAwID8gKG51bSAtIG9mZnNldCkgLyBkZW5vbSA6IChudW0gKyBvZmZzZXQpIC8gZGVub207XG4gIHJldHVybiB7IHgsIHkgfTtcbn1cbl9fbmFtZShpbnRlcnNlY3RMaW5lLCBcImludGVyc2VjdExpbmVcIik7XG5mdW5jdGlvbiBzYW1lU2lnbihyMSwgcjIpIHtcbiAgcmV0dXJuIHIxICogcjIgPiAwO1xufVxuX19uYW1lKHNhbWVTaWduLCBcInNhbWVTaWduXCIpO1xudmFyIGludGVyc2VjdF9saW5lX2RlZmF1bHQgPSBpbnRlcnNlY3RMaW5lO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbnRlcnNlY3QvaW50ZXJzZWN0LXBvbHlnb24uanNcbnZhciBpbnRlcnNlY3RfcG9seWdvbl9kZWZhdWx0ID0gaW50ZXJzZWN0UG9seWdvbjtcbmZ1bmN0aW9uIGludGVyc2VjdFBvbHlnb24obm9kZSwgcG9seVBvaW50cywgcG9pbnQpIHtcbiAgdmFyIHgxID0gbm9kZS54O1xuICB2YXIgeTEgPSBub2RlLnk7XG4gIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG4gIHZhciBtaW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICB2YXIgbWluWSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKHR5cGVvZiBwb2x5UG9pbnRzLmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBvbHlQb2ludHMuZm9yRWFjaChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIGVudHJ5LngpO1xuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGVudHJ5LnkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwb2x5UG9pbnRzLngpO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwb2x5UG9pbnRzLnkpO1xuICB9XG4gIHZhciBsZWZ0ID0geDEgLSBub2RlLndpZHRoIC8gMiAtIG1pblg7XG4gIHZhciB0b3AgPSB5MSAtIG5vZGUuaGVpZ2h0IC8gMiAtIG1pblk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9seVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwMSA9IHBvbHlQb2ludHNbaV07XG4gICAgdmFyIHAyID0gcG9seVBvaW50c1tpIDwgcG9seVBvaW50cy5sZW5ndGggLSAxID8gaSArIDEgOiAwXTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gaW50ZXJzZWN0X2xpbmVfZGVmYXVsdChcbiAgICAgIG5vZGUsXG4gICAgICBwb2ludCxcbiAgICAgIHsgeDogbGVmdCArIHAxLngsIHk6IHRvcCArIHAxLnkgfSxcbiAgICAgIHsgeDogbGVmdCArIHAyLngsIHk6IHRvcCArIHAyLnkgfVxuICAgICk7XG4gICAgaWYgKGludGVyc2VjdCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG4gIGlmICghaW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBpZiAoaW50ZXJzZWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgaW50ZXJzZWN0aW9ucy5zb3J0KGZ1bmN0aW9uKHAsIHEpIHtcbiAgICAgIHZhciBwZHggPSBwLnggLSBwb2ludC54O1xuICAgICAgdmFyIHBkeSA9IHAueSAtIHBvaW50Lnk7XG4gICAgICB2YXIgZGlzdHAgPSBNYXRoLnNxcnQocGR4ICogcGR4ICsgcGR5ICogcGR5KTtcbiAgICAgIHZhciBxZHggPSBxLnggLSBwb2ludC54O1xuICAgICAgdmFyIHFkeSA9IHEueSAtIHBvaW50Lnk7XG4gICAgICB2YXIgZGlzdHEgPSBNYXRoLnNxcnQocWR4ICogcWR4ICsgcWR5ICogcWR5KTtcbiAgICAgIHJldHVybiBkaXN0cCA8IGRpc3RxID8gLTEgOiBkaXN0cCA9PT0gZGlzdHEgPyAwIDogMTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaW50ZXJzZWN0aW9uc1swXTtcbn1cbl9fbmFtZShpbnRlcnNlY3RQb2x5Z29uLCBcImludGVyc2VjdFBvbHlnb25cIik7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2ludGVyc2VjdC9pbnRlcnNlY3QtcmVjdC5qc1xudmFyIGludGVyc2VjdFJlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBwb2ludCkgPT4ge1xuICB2YXIgeCA9IG5vZGUueDtcbiAgdmFyIHkgPSBub2RlLnk7XG4gIHZhciBkeCA9IHBvaW50LnggLSB4O1xuICB2YXIgZHkgPSBwb2ludC55IC0geTtcbiAgdmFyIHcgPSBub2RlLndpZHRoIC8gMjtcbiAgdmFyIGggPSBub2RlLmhlaWdodCAvIDI7XG4gIHZhciBzeCwgc3k7XG4gIGlmIChNYXRoLmFicyhkeSkgKiB3ID4gTWF0aC5hYnMoZHgpICogaCkge1xuICAgIGlmIChkeSA8IDApIHtcbiAgICAgIGggPSAtaDtcbiAgICB9XG4gICAgc3ggPSBkeSA9PT0gMCA/IDAgOiBoICogZHggLyBkeTtcbiAgICBzeSA9IGg7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGR4IDwgMCkge1xuICAgICAgdyA9IC13O1xuICAgIH1cbiAgICBzeCA9IHc7XG4gICAgc3kgPSBkeCA9PT0gMCA/IDAgOiB3ICogZHkgLyBkeDtcbiAgfVxuICByZXR1cm4geyB4OiB4ICsgc3gsIHk6IHkgKyBzeSB9O1xufSwgXCJpbnRlcnNlY3RSZWN0XCIpO1xudmFyIGludGVyc2VjdF9yZWN0X2RlZmF1bHQgPSBpbnRlcnNlY3RSZWN0O1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbnRlcnNlY3QvaW5kZXguanNcbnZhciBpbnRlcnNlY3RfZGVmYXVsdCA9IHtcbiAgbm9kZTogaW50ZXJzZWN0X25vZGVfZGVmYXVsdCxcbiAgY2lyY2xlOiBpbnRlcnNlY3RfY2lyY2xlX2RlZmF1bHQsXG4gIGVsbGlwc2U6IGludGVyc2VjdF9lbGxpcHNlX2RlZmF1bHQsXG4gIHBvbHlnb246IGludGVyc2VjdF9wb2x5Z29uX2RlZmF1bHQsXG4gIHJlY3Q6IGludGVyc2VjdF9yZWN0X2RlZmF1bHRcbn07XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL3NoYXBlcy9ub3RlLmpzXG52YXIgbm90ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB1c2VIdG1sTGFiZWxzID0gbm9kZS51c2VIdG1sTGFiZWxzIHx8IGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzO1xuICBpZiAoIXVzZUh0bWxMYWJlbHMpIHtcbiAgICBub2RlLmNlbnRlckxhYmVsID0gdHJ1ZTtcbiAgfVxuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94LCBoYWxmUGFkZGluZyB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgXCJub2RlIFwiICsgbm9kZS5jbGFzc2VzLFxuICAgIHRydWVcbiAgKTtcbiAgbG9nLmluZm8oXCJDbGFzc2VzID0gXCIsIG5vZGUuY2xhc3Nlcyk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgcmVjdDIuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcIm5vdGVcIik7XG52YXIgbm90ZV9kZWZhdWx0ID0gbm90ZTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvbm9kZXMuanNcbnZhciBmb3JtYXRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0cikgPT4ge1xuICBpZiAoc3RyKSB7XG4gICAgcmV0dXJuIFwiIFwiICsgc3RyO1xuICB9XG4gIHJldHVybiBcIlwiO1xufSwgXCJmb3JtYXRDbGFzc1wiKTtcbnZhciBnZXRDbGFzc2VzRnJvbU5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlLCBvdGhlckNsYXNzZXMpID0+IHtcbiAgcmV0dXJuIGAke290aGVyQ2xhc3NlcyA/IG90aGVyQ2xhc3NlcyA6IFwibm9kZSBkZWZhdWx0XCJ9JHtmb3JtYXRDbGFzcyhub2RlLmNsYXNzZXMpfSAke2Zvcm1hdENsYXNzKFxuICAgIG5vZGUuY2xhc3NcbiAgKX1gO1xufSwgXCJnZXRDbGFzc2VzRnJvbU5vZGVcIik7XG52YXIgcXVlc3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgZ2V0Q2xhc3Nlc0Zyb21Ob2RlKG5vZGUsIHZvaWQgMCksXG4gICAgdHJ1ZVxuICApO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBzID0gdyArIGg7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IHMgLyAyLCB5OiAwIH0sXG4gICAgeyB4OiBzLCB5OiAtcyAvIDIgfSxcbiAgICB7IHg6IHMgLyAyLCB5OiAtcyB9LFxuICAgIHsgeDogMCwgeTogLXMgLyAyIH1cbiAgXTtcbiAgbG9nLmluZm8oXCJRdWVzdGlvbiBtYWluIChDaXJjbGUpXCIpO1xuICBjb25zdCBxdWVzdGlvbkVsZW0gPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHMsIHMsIHBvaW50cyk7XG4gIHF1ZXN0aW9uRWxlbS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcXVlc3Rpb25FbGVtKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIGxvZy53YXJuKFwiSW50ZXJzZWN0IGNhbGxlZFwiKTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJxdWVzdGlvblwiKTtcbnZhciBjaG9pY2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IHMgPSAyODtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogMCwgeTogcyAvIDIgfSxcbiAgICB7IHg6IHMgLyAyLCB5OiAwIH0sXG4gICAgeyB4OiAwLCB5OiAtcyAvIDIgfSxcbiAgICB7IHg6IC1zIC8gMiwgeTogMCB9XG4gIF07XG4gIGNvbnN0IGNob2ljZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJwb2x5Z29uXCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXG4gICAgXCJwb2ludHNcIixcbiAgICBwb2ludHMubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLnggKyBcIixcIiArIGQueTtcbiAgICB9KS5qb2luKFwiIFwiKVxuICApO1xuICBjaG9pY2UyLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLXN0YXJ0XCIpLmF0dHIoXCJyXCIsIDcpLmF0dHIoXCJ3aWR0aFwiLCAyOCkuYXR0cihcImhlaWdodFwiLCAyOCk7XG4gIG5vZGUud2lkdGggPSAyODtcbiAgbm9kZS5oZWlnaHQgPSAyODtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgMTQsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJjaG9pY2VcIik7XG52YXIgaGV4YWdvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IGYgPSA0O1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyAyICogbSArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogbSwgeTogMCB9LFxuICAgIHsgeDogdyAtIG0sIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyAtIG0sIHk6IC1oIH0sXG4gICAgeyB4OiBtLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3QgaGV4ID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBoZXguYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGhleCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJoZXhhZ29uXCIpO1xudmFyIGJsb2NrX2Fycm93ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKHBhcmVudCwgbm9kZSwgdm9pZCAwLCB0cnVlKTtcbiAgY29uc3QgZiA9IDI7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIDIgKiBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyAyICogbSArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gZ2V0QXJyb3dQb2ludHMobm9kZS5kaXJlY3Rpb25zLCBiYm94LCBub2RlKTtcbiAgY29uc3QgYmxvY2tBcnJvdyA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgYmxvY2tBcnJvdy5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgYmxvY2tBcnJvdyk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJibG9ja19hcnJvd1wiKTtcbnZhciByZWN0X2xlZnRfaW52X2Fycm93ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogLWggLyAyLCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAwIH0sXG4gICAgeyB4OiB3LCB5OiAtaCB9LFxuICAgIHsgeDogLWggLyAyLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgbm9kZS53aWR0aCA9IHcgKyBoO1xuICBub2RlLmhlaWdodCA9IGg7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJyZWN0X2xlZnRfaW52X2Fycm93XCIpO1xudmFyIGxlYW5fcmlnaHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIocGFyZW50LCBub2RlLCBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSksIHRydWUpO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBwb2ludHMgPSBbXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiBoIC8gNiwgeTogLWggfVxuICBdO1xuICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImxlYW5fcmlnaHRcIik7XG52YXIgbGVhbl9sZWZ0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogMiAqIGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgLSAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiAtaCAvIDYsIHk6IC1oIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJsZWFuX2xlZnRcIik7XG52YXIgdHJhcGV6b2lkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgdyA9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGggPSBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogLTIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyArIDIgKiBoIC8gNiwgeTogMCB9LFxuICAgIHsgeDogdyAtIGggLyA2LCB5OiAtaCB9LFxuICAgIHsgeDogaCAvIDYsIHk6IC1oIH1cbiAgXTtcbiAgY29uc3QgZWwgPSBpbnNlcnRQb2x5Z29uU2hhcGUoc2hhcGVTdmcsIHcsIGgsIHBvaW50cyk7XG4gIGVsLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBlbCk7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucG9seWdvbihub2RlLCBwb2ludHMsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJ0cmFwZXpvaWRcIik7XG52YXIgaW52X3RyYXBlem9pZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IGggLyA2LCB5OiAwIH0sXG4gICAgeyB4OiB3IC0gaCAvIDYsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyAyICogaCAvIDYsIHk6IC1oIH0sXG4gICAgeyB4OiAtMiAqIGggLyA2LCB5OiAtaCB9XG4gIF07XG4gIGNvbnN0IGVsID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBlbC5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgZWwpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiaW52X3RyYXBlem9pZFwiKTtcbnZhciByZWN0X3JpZ2h0X2ludl9hcnJvdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyBoIC8gMiwgeTogMCB9LFxuICAgIHsgeDogdywgeTogLWggLyAyIH0sXG4gICAgeyB4OiB3ICsgaCAvIDIsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCB9XG4gIF07XG4gIGNvbnN0IGVsID0gaW5zZXJ0UG9seWdvblNoYXBlKHNoYXBlU3ZnLCB3LCBoLCBwb2ludHMpO1xuICBlbC5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgZWwpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnBvbHlnb24obm9kZSwgcG9pbnRzLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdF9yaWdodF9pbnZfYXJyb3dcIik7XG52YXIgY3lsaW5kZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCB9ID0gYXdhaXQgbGFiZWxIZWxwZXIoXG4gICAgcGFyZW50LFxuICAgIG5vZGUsXG4gICAgZ2V0Q2xhc3Nlc0Zyb21Ob2RlKG5vZGUsIHZvaWQgMCksXG4gICAgdHJ1ZVxuICApO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZztcbiAgY29uc3QgcnggPSB3IC8gMjtcbiAgY29uc3QgcnkgPSByeCAvICgyLjUgKyB3IC8gNTApO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyByeSArIG5vZGUucGFkZGluZztcbiAgY29uc3Qgc2hhcGUgPSBcIk0gMCxcIiArIHJ5ICsgXCIgYSBcIiArIHJ4ICsgXCIsXCIgKyByeSArIFwiIDAsMCwwIFwiICsgdyArIFwiIDAgYSBcIiArIHJ4ICsgXCIsXCIgKyByeSArIFwiIDAsMCwwIFwiICsgLXcgKyBcIiAwIGwgMCxcIiArIGggKyBcIiBhIFwiICsgcnggKyBcIixcIiArIHJ5ICsgXCIgMCwwLDAgXCIgKyB3ICsgXCIgMCBsIDAsXCIgKyAtaDtcbiAgY29uc3QgZWwgPSBzaGFwZVN2Zy5hdHRyKFwibGFiZWwtb2Zmc2V0LXlcIiwgcnkpLmluc2VydChcInBhdGhcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJkXCIsIHNoYXBlKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXcgLyAyICsgXCIsXCIgKyAtKGggLyAyICsgcnkpICsgXCIpXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIGNvbnN0IHBvcyA9IGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICAgIGNvbnN0IHggPSBwb3MueCAtIG5vZGUueDtcbiAgICBpZiAocnggIT0gMCAmJiAoTWF0aC5hYnMoeCkgPCBub2RlLndpZHRoIC8gMiB8fCBNYXRoLmFicyh4KSA9PSBub2RlLndpZHRoIC8gMiAmJiBNYXRoLmFicyhwb3MueSAtIG5vZGUueSkgPiBub2RlLmhlaWdodCAvIDIgLSByeSkpIHtcbiAgICAgIGxldCB5ID0gcnkgKiByeSAqICgxIC0geCAqIHggLyAocnggKiByeCkpO1xuICAgICAgaWYgKHkgIT0gMCkge1xuICAgICAgICB5ID0gTWF0aC5zcXJ0KHkpO1xuICAgICAgfVxuICAgICAgeSA9IHJ5IC0geTtcbiAgICAgIGlmIChwb2ludC55IC0gbm9kZS55ID4gMCkge1xuICAgICAgICB5ID0gLXk7XG4gICAgICB9XG4gICAgICBwb3MueSArPSB5O1xuICAgIH1cbiAgICByZXR1cm4gcG9zO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImN5bGluZGVyXCIpO1xudmFyIHJlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcgfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIFwibm9kZSBcIiArIG5vZGUuY2xhc3NlcyArIFwiIFwiICsgbm9kZS5jbGFzcyxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUud2lkdGggOiBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUuaGVpZ2h0IDogYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHggPSBub2RlLnBvc2l0aW9uZWQgPyAtdG90YWxXaWR0aCAvIDIgOiAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZztcbiAgY29uc3QgeSA9IG5vZGUucG9zaXRpb25lZCA/IC10b3RhbEhlaWdodCAvIDIgOiAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmc7XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgdG90YWxXaWR0aCkuYXR0cihcImhlaWdodFwiLCB0b3RhbEhlaWdodCk7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdFwiKTtcbnZhciBjb21wb3NpdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgeyBzaGFwZVN2ZywgYmJveCwgaGFsZlBhZGRpbmcgfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIFwibm9kZSBcIiArIG5vZGUuY2xhc3NlcyxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUud2lkdGggOiBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCB0b3RhbEhlaWdodCA9IG5vZGUucG9zaXRpb25lZCA/IG5vZGUuaGVpZ2h0IDogYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHggPSBub2RlLnBvc2l0aW9uZWQgPyAtdG90YWxXaWR0aCAvIDIgOiAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZztcbiAgY29uc3QgeSA9IG5vZGUucG9zaXRpb25lZCA/IC10b3RhbEhlaWdodCAvIDIgOiAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmc7XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImJhc2ljIGNsdXN0ZXIgY29tcG9zaXRlIGxhYmVsLWNvbnRhaW5lclwiKS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgdG90YWxXaWR0aCkuYXR0cihcImhlaWdodFwiLCB0b3RhbEhlaWdodCk7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiY29tcG9zaXRlXCIpO1xudmFyIGxhYmVsUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihwYXJlbnQsIG5vZGUsIFwibGFiZWxcIiwgdHJ1ZSk7XG4gIGxvZy50cmFjZShcIkNsYXNzZXMgPSBcIiwgbm9kZS5jbGFzcyk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IDA7XG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gMDtcbiAgcmVjdDIuYXR0cihcIndpZHRoXCIsIHRvdGFsV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgdG90YWxIZWlnaHQpO1xuICBzaGFwZVN2Zy5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbCBlZGdlTGFiZWxcIik7XG4gIGlmIChub2RlLnByb3BzKSB7XG4gICAgY29uc3QgcHJvcEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5vZGUucHJvcHMpKTtcbiAgICBpZiAobm9kZS5wcm9wcy5ib3JkZXJzKSB7XG4gICAgICBhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnMocmVjdDIsIG5vZGUucHJvcHMuYm9yZGVycywgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQpO1xuICAgICAgcHJvcEtleXMuZGVsZXRlKFwiYm9yZGVyc1wiKTtcbiAgICB9XG4gICAgcHJvcEtleXMuZm9yRWFjaCgocHJvcEtleSkgPT4ge1xuICAgICAgbG9nLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke3Byb3BLZXl9YCk7XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwibGFiZWxSZWN0XCIpO1xuZnVuY3Rpb24gYXBwbHlOb2RlUHJvcGVydHlCb3JkZXJzKHJlY3QyLCBib3JkZXJzLCB0b3RhbFdpZHRoLCB0b3RhbEhlaWdodCkge1xuICBjb25zdCBzdHJva2VEYXNoQXJyYXkgPSBbXTtcbiAgY29uc3QgYWRkQm9yZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobGVuZ3RoKSA9PiB7XG4gICAgc3Ryb2tlRGFzaEFycmF5LnB1c2gobGVuZ3RoLCAwKTtcbiAgfSwgXCJhZGRCb3JkZXJcIik7XG4gIGNvbnN0IHNraXBCb3JkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChsZW5ndGgpID0+IHtcbiAgICBzdHJva2VEYXNoQXJyYXkucHVzaCgwLCBsZW5ndGgpO1xuICB9LCBcInNraXBCb3JkZXJcIik7XG4gIGlmIChib3JkZXJzLmluY2x1ZGVzKFwidFwiKSkge1xuICAgIGxvZy5kZWJ1ZyhcImFkZCB0b3AgYm9yZGVyXCIpO1xuICAgIGFkZEJvcmRlcih0b3RhbFdpZHRoKTtcbiAgfSBlbHNlIHtcbiAgICBza2lwQm9yZGVyKHRvdGFsV2lkdGgpO1xuICB9XG4gIGlmIChib3JkZXJzLmluY2x1ZGVzKFwiclwiKSkge1xuICAgIGxvZy5kZWJ1ZyhcImFkZCByaWdodCBib3JkZXJcIik7XG4gICAgYWRkQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICBza2lwQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfVxuICBpZiAoYm9yZGVycy5pbmNsdWRlcyhcImJcIikpIHtcbiAgICBsb2cuZGVidWcoXCJhZGQgYm90dG9tIGJvcmRlclwiKTtcbiAgICBhZGRCb3JkZXIodG90YWxXaWR0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2tpcEJvcmRlcih0b3RhbFdpZHRoKTtcbiAgfVxuICBpZiAoYm9yZGVycy5pbmNsdWRlcyhcImxcIikpIHtcbiAgICBsb2cuZGVidWcoXCJhZGQgbGVmdCBib3JkZXJcIik7XG4gICAgYWRkQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICBza2lwQm9yZGVyKHRvdGFsSGVpZ2h0KTtcbiAgfVxuICByZWN0Mi5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBzdHJva2VEYXNoQXJyYXkuam9pbihcIiBcIikpO1xufVxuX19uYW1lKGFwcGx5Tm9kZVByb3BlcnR5Qm9yZGVycywgXCJhcHBseU5vZGVQcm9wZXJ0eUJvcmRlcnNcIik7XG52YXIgcmVjdFdpdGhUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBsZXQgY2xhc3NlcztcbiAgaWYgKCFub2RlLmNsYXNzZXMpIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIGRlZmF1bHRcIjtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzID0gXCJub2RlIFwiICsgbm9kZS5jbGFzc2VzO1xuICB9XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzZXMpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGlubmVyTGluZSA9IHNoYXBlU3ZnLmluc2VydChcImxpbmVcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbFwiKTtcbiAgY29uc3QgdGV4dDIgPSBub2RlLmxhYmVsVGV4dC5mbGF0ID8gbm9kZS5sYWJlbFRleHQuZmxhdCgpIDogbm9kZS5sYWJlbFRleHQ7XG4gIGxldCB0aXRsZSA9IFwiXCI7XG4gIGlmICh0eXBlb2YgdGV4dDIgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0aXRsZSA9IHRleHQyWzBdO1xuICB9IGVsc2Uge1xuICAgIHRpdGxlID0gdGV4dDI7XG4gIH1cbiAgbG9nLmluZm8oXCJMYWJlbCB0ZXh0IGFiYzc5XCIsIHRpdGxlLCB0ZXh0MiwgdHlwZW9mIHRleHQyID09PSBcIm9iamVjdFwiKTtcbiAgY29uc3QgdGV4dCA9IGxhYmVsLm5vZGUoKS5hcHBlbmRDaGlsZChjcmVhdGVMYWJlbF9kZWZhdWx0KHRpdGxlLCBub2RlLmxhYmVsU3R5bGUsIHRydWUsIHRydWUpKTtcbiAgbGV0IGJib3ggPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QzKHRleHQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGxvZy5pbmZvKFwiVGV4dCAyXCIsIHRleHQyKTtcbiAgY29uc3QgdGV4dFJvd3MgPSB0ZXh0Mi5zbGljZSgxLCB0ZXh0Mi5sZW5ndGgpO1xuICBsZXQgdGl0bGVCb3ggPSB0ZXh0LmdldEJCb3goKTtcbiAgY29uc3QgZGVzY3IgPSBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQoXG4gICAgY3JlYXRlTGFiZWxfZGVmYXVsdCh0ZXh0Um93cy5qb2luID8gdGV4dFJvd3Muam9pbihcIjxici8+XCIpIDogdGV4dFJvd3MsIG5vZGUubGFiZWxTdHlsZSwgdHJ1ZSwgdHJ1ZSlcbiAgKTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IGRlc2NyLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhkZXNjcik7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBzZWxlY3QzKGRlc2NyKS5hdHRyKFxuICAgIFwidHJhbnNmb3JtXCIsXG4gICAgXCJ0cmFuc2xhdGUoIFwiICsgLy8gKHRpdGxlQm94LndpZHRoIC0gYmJveC53aWR0aCkgLyAyICtcbiAgICAoYmJveC53aWR0aCA+IHRpdGxlQm94LndpZHRoID8gMCA6ICh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMikgKyBcIiwgXCIgKyAodGl0bGVCb3guaGVpZ2h0ICsgaGFsZlBhZGRpbmcgKyA1KSArIFwiKVwiXG4gICk7XG4gIHNlbGVjdDModGV4dCkuYXR0cihcbiAgICBcInRyYW5zZm9ybVwiLFxuICAgIFwidHJhbnNsYXRlKCBcIiArIC8vICh0aXRsZUJveC53aWR0aCAtIGJib3gud2lkdGgpIC8gMiArXG4gICAgKGJib3gud2lkdGggPCB0aXRsZUJveC53aWR0aCA/IDAgOiAtKHRpdGxlQm94LndpZHRoIC0gYmJveC53aWR0aCkgLyAyKSArIFwiLCAwKVwiXG4gICk7XG4gIGJib3ggPSBsYWJlbC5ub2RlKCkuZ2V0QkJveCgpO1xuICBsYWJlbC5hdHRyKFxuICAgIFwidHJhbnNmb3JtXCIsXG4gICAgXCJ0cmFuc2xhdGUoXCIgKyAtYmJveC53aWR0aCAvIDIgKyBcIiwgXCIgKyAoLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgMykgKyBcIilcIlxuICApO1xuICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJvdXRlciB0aXRsZS1zdGF0ZVwiKS5hdHRyKFwieFwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgLWJib3guaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIGlubmVyTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtYmJveC53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcIngyXCIsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcpLmF0dHIoXCJ5MVwiLCAtYmJveC5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyB0aXRsZUJveC5oZWlnaHQgKyBoYWxmUGFkZGluZykuYXR0cihcInkyXCIsIC1iYm94LmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIHRpdGxlQm94LmhlaWdodCArIGhhbGZQYWRkaW5nKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCByZWN0Mik7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdFdpdGhUaXRsZVwiKTtcbnZhciBzdGFkaXVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3ggfSA9IGF3YWl0IGxhYmVsSGVscGVyKFxuICAgIHBhcmVudCxcbiAgICBub2RlLFxuICAgIGdldENsYXNzZXNGcm9tTm9kZShub2RlLCB2b2lkIDApLFxuICAgIHRydWVcbiAgKTtcbiAgY29uc3QgaCA9IGJib3guaGVpZ2h0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCB3ID0gYmJveC53aWR0aCArIGggLyA0ICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJyeFwiLCBoIC8gMikuYXR0cihcInJ5XCIsIGggLyAyKS5hdHRyKFwieFwiLCAtdyAvIDIpLmF0dHIoXCJ5XCIsIC1oIC8gMikuYXR0cihcIndpZHRoXCIsIHcpLmF0dHIoXCJoZWlnaHRcIiwgaCk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YWRpdW1cIik7XG52YXIgY2lyY2xlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IGNpcmNsZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNpcmNsZTIuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpLmF0dHIoXCJyeFwiLCBub2RlLnJ4KS5hdHRyKFwicnlcIiwgbm9kZS5yeSkuYXR0cihcInJcIiwgYmJveC53aWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmcpO1xuICBsb2cuaW5mbyhcIkNpcmNsZSBtYWluXCIpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGNpcmNsZTIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgbG9nLmluZm8oXCJDaXJjbGUgaW50ZXJzZWN0XCIsIG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcsIHBvaW50KTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJjaXJjbGVcIik7XG52YXIgZG91YmxlY2lyY2xlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHsgc2hhcGVTdmcsIGJib3gsIGhhbGZQYWRkaW5nIH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IGdhcCA9IDU7XG4gIGNvbnN0IGNpcmNsZUdyb3VwID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3Qgb3V0ZXJDaXJjbGUgPSBjaXJjbGVHcm91cC5pbnNlcnQoXCJjaXJjbGVcIik7XG4gIGNvbnN0IGlubmVyQ2lyY2xlID0gY2lyY2xlR3JvdXAuaW5zZXJ0KFwiY2lyY2xlXCIpO1xuICBjaXJjbGVHcm91cC5hdHRyKFwiY2xhc3NcIiwgbm9kZS5jbGFzcyk7XG4gIG91dGVyQ2lyY2xlLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJyXCIsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcgKyBnYXApLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nICsgZ2FwICogMikuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyArIGdhcCAqIDIpO1xuICBpbm5lckNpcmNsZS5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwiclwiLCBiYm94LndpZHRoIC8gMiArIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCArIG5vZGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIGxvZy5pbmZvKFwiRG91YmxlQ2lyY2xlIG1haW5cIik7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgb3V0ZXJDaXJjbGUpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgbG9nLmluZm8oXCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0XCIsIG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcgKyBnYXAsIHBvaW50KTtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQuY2lyY2xlKG5vZGUsIGJib3gud2lkdGggLyAyICsgaGFsZlBhZGRpbmcgKyBnYXAsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJkb3VibGVjaXJjbGVcIik7XG52YXIgc3Vicm91dGluZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCB7IHNoYXBlU3ZnLCBiYm94IH0gPSBhd2FpdCBsYWJlbEhlbHBlcihcbiAgICBwYXJlbnQsXG4gICAgbm9kZSxcbiAgICBnZXRDbGFzc2VzRnJvbU5vZGUobm9kZSwgdm9pZCAwKSxcbiAgICB0cnVlXG4gICk7XG4gIGNvbnN0IHcgPSBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoID0gYmJveC5oZWlnaHQgKyBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IHBvaW50cyA9IFtcbiAgICB7IHg6IDAsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIH0sXG4gICAgeyB4OiAwLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogMCB9LFxuICAgIHsgeDogLTgsIHk6IDAgfSxcbiAgICB7IHg6IHcgKyA4LCB5OiAwIH0sXG4gICAgeyB4OiB3ICsgOCwgeTogLWggfSxcbiAgICB7IHg6IC04LCB5OiAtaCB9LFxuICAgIHsgeDogLTgsIHk6IDAgfVxuICBdO1xuICBjb25zdCBlbCA9IGluc2VydFBvbHlnb25TaGFwZShzaGFwZVN2ZywgdywgaCwgcG9pbnRzKTtcbiAgZWwuYXR0cihcInN0eWxlXCIsIG5vZGUuc3R5bGUpO1xuICB1cGRhdGVOb2RlQm91bmRzKG5vZGUsIGVsKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5wb2x5Z29uKG5vZGUsIHBvaW50cywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN1YnJvdXRpbmVcIik7XG52YXIgc3RhcnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IGNpcmNsZTIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJjaXJjbGVcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNpcmNsZTIuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtc3RhcnRcIikuYXR0cihcInJcIiwgNykuYXR0cihcIndpZHRoXCIsIDE0KS5hdHRyKFwiaGVpZ2h0XCIsIDE0KTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBjaXJjbGUyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgNywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcInN0YXJ0XCIpO1xudmFyIGZvcmtKb2luID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlLCBkaXIpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlIGRlZmF1bHRcIikuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGxldCB3aWR0aCA9IDcwO1xuICBsZXQgaGVpZ2h0ID0gMTA7XG4gIGlmIChkaXIgPT09IFwiTFJcIikge1xuICAgIHdpZHRoID0gMTA7XG4gICAgaGVpZ2h0ID0gNzA7XG4gIH1cbiAgY29uc3Qgc2hhcGUgPSBzaGFwZVN2Zy5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIC0xICogd2lkdGggLyAyKS5hdHRyKFwieVwiLCAtMSAqIGhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJjbGFzc1wiLCBcImZvcmstam9pblwiKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBzaGFwZSk7XG4gIG5vZGUuaGVpZ2h0ID0gbm9kZS5oZWlnaHQgKyBub2RlLnBhZGRpbmcgLyAyO1xuICBub2RlLndpZHRoID0gbm9kZS53aWR0aCArIG5vZGUucGFkZGluZyAvIDI7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X2RlZmF1bHQucmVjdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwiZm9ya0pvaW5cIik7XG52YXIgZW5kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBub2RlKSA9PiB7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZSBkZWZhdWx0XCIpLmF0dHIoXCJpZFwiLCBub2RlLmRvbUlkIHx8IG5vZGUuaWQpO1xuICBjb25zdCBpbm5lckNpcmNsZSA9IHNoYXBlU3ZnLmluc2VydChcImNpcmNsZVwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgY2lyY2xlMiA9IHNoYXBlU3ZnLmluc2VydChcImNpcmNsZVwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY2lyY2xlMi5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1zdGFydFwiKS5hdHRyKFwiclwiLCA3KS5hdHRyKFwid2lkdGhcIiwgMTQpLmF0dHIoXCJoZWlnaHRcIiwgMTQpO1xuICBpbm5lckNpcmNsZS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS1lbmRcIikuYXR0cihcInJcIiwgNSkuYXR0cihcIndpZHRoXCIsIDEwKS5hdHRyKFwiaGVpZ2h0XCIsIDEwKTtcbiAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBjaXJjbGUyKTtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfZGVmYXVsdC5jaXJjbGUobm9kZSwgNywgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImVuZFwiKTtcbnZhciBjbGFzc19ib3ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBub2RlLnBhZGRpbmcgLyAyO1xuICBjb25zdCByb3dQYWRkaW5nID0gNDtcbiAgY29uc3QgbGluZUhlaWdodCA9IDg7XG4gIGxldCBjbGFzc2VzO1xuICBpZiAoIW5vZGUuY2xhc3Nlcykge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgZGVmYXVsdFwiO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMgPSBcIm5vZGUgXCIgKyBub2RlLmNsYXNzZXM7XG4gIH1cbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuZG9tSWQgfHwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdG9wTGluZSA9IHNoYXBlU3ZnLmluc2VydChcImxpbmVcIik7XG4gIGNvbnN0IGJvdHRvbUxpbmUgPSBzaGFwZVN2Zy5pbnNlcnQoXCJsaW5lXCIpO1xuICBsZXQgbWF4V2lkdGggPSAwO1xuICBsZXQgbWF4SGVpZ2h0ID0gcm93UGFkZGluZztcbiAgY29uc3QgbGFiZWxDb250YWluZXIgPSBzaGFwZVN2Zy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsZXQgdmVydGljYWxQb3MgPSAwO1xuICBjb25zdCBoYXNJbnRlcmZhY2UgPSBub2RlLmNsYXNzRGF0YS5hbm5vdGF0aW9ucz8uWzBdO1xuICBjb25zdCBpbnRlcmZhY2VMYWJlbFRleHQgPSBub2RlLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSA/IFwiXFx4QUJcIiArIG5vZGUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdICsgXCJcXHhCQlwiIDogXCJcIjtcbiAgY29uc3QgaW50ZXJmYWNlTGFiZWwgPSBsYWJlbENvbnRhaW5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoY3JlYXRlTGFiZWxfZGVmYXVsdChpbnRlcmZhY2VMYWJlbFRleHQsIG5vZGUubGFiZWxTdHlsZSwgdHJ1ZSwgdHJ1ZSkpO1xuICBsZXQgaW50ZXJmYWNlQkJveCA9IGludGVyZmFjZUxhYmVsLmdldEJCb3goKTtcbiAgaWYgKGV2YWx1YXRlKGdldENvbmZpZygpLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IGludGVyZmFjZUxhYmVsLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhpbnRlcmZhY2VMYWJlbCk7XG4gICAgaW50ZXJmYWNlQkJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgaW50ZXJmYWNlQkJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBpbnRlcmZhY2VCQm94LmhlaWdodCk7XG4gIH1cbiAgaWYgKG5vZGUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKSB7XG4gICAgbWF4SGVpZ2h0ICs9IGludGVyZmFjZUJCb3guaGVpZ2h0ICsgcm93UGFkZGluZztcbiAgICBtYXhXaWR0aCArPSBpbnRlcmZhY2VCQm94LndpZHRoO1xuICB9XG4gIGxldCBjbGFzc1RpdGxlU3RyaW5nID0gbm9kZS5jbGFzc0RhdGEubGFiZWw7XG4gIGlmIChub2RlLmNsYXNzRGF0YS50eXBlICE9PSB2b2lkIDAgJiYgbm9kZS5jbGFzc0RhdGEudHlwZSAhPT0gXCJcIikge1xuICAgIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykge1xuICAgICAgY2xhc3NUaXRsZVN0cmluZyArPSBcIiZsdDtcIiArIG5vZGUuY2xhc3NEYXRhLnR5cGUgKyBcIiZndDtcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NUaXRsZVN0cmluZyArPSBcIjxcIiArIG5vZGUuY2xhc3NEYXRhLnR5cGUgKyBcIj5cIjtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2xhc3NUaXRsZUxhYmVsID0gbGFiZWxDb250YWluZXIubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsX2RlZmF1bHQoY2xhc3NUaXRsZVN0cmluZywgbm9kZS5sYWJlbFN0eWxlLCB0cnVlLCB0cnVlKSk7XG4gIHNlbGVjdDMoY2xhc3NUaXRsZUxhYmVsKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc1RpdGxlXCIpO1xuICBsZXQgY2xhc3NUaXRsZUJCb3ggPSBjbGFzc1RpdGxlTGFiZWwuZ2V0QkJveCgpO1xuICBpZiAoZXZhbHVhdGUoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKSB7XG4gICAgY29uc3QgZGl2ID0gY2xhc3NUaXRsZUxhYmVsLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhjbGFzc1RpdGxlTGFiZWwpO1xuICAgIGNsYXNzVGl0bGVCQm94ID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBjbGFzc1RpdGxlQkJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBjbGFzc1RpdGxlQkJveC5oZWlnaHQpO1xuICB9XG4gIG1heEhlaWdodCArPSBjbGFzc1RpdGxlQkJveC5oZWlnaHQgKyByb3dQYWRkaW5nO1xuICBpZiAoY2xhc3NUaXRsZUJCb3gud2lkdGggPiBtYXhXaWR0aCkge1xuICAgIG1heFdpZHRoID0gY2xhc3NUaXRsZUJCb3gud2lkdGg7XG4gIH1cbiAgY29uc3QgY2xhc3NBdHRyaWJ1dGVzID0gW107XG4gIG5vZGUuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgobWVtYmVyKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkSW5mbyA9IG1lbWJlci5nZXREaXNwbGF5RGV0YWlscygpO1xuICAgIGxldCBwYXJzZWRUZXh0ID0gcGFyc2VkSW5mby5kaXNwbGF5VGV4dDtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpIHtcbiAgICAgIHBhcnNlZFRleHQgPSBwYXJzZWRUZXh0LnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpO1xuICAgIH1cbiAgICBjb25zdCBsYmwgPSBsYWJlbENvbnRhaW5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoXG4gICAgICBjcmVhdGVMYWJlbF9kZWZhdWx0KFxuICAgICAgICBwYXJzZWRUZXh0LFxuICAgICAgICBwYXJzZWRJbmZvLmNzc1N0eWxlID8gcGFyc2VkSW5mby5jc3NTdHlsZSA6IG5vZGUubGFiZWxTdHlsZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IGJib3ggPSBsYmwuZ2V0QkJveCgpO1xuICAgIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICAgIGNvbnN0IGRpdiA9IGxibC5jaGlsZHJlblswXTtcbiAgICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhsYmwpO1xuICAgICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoYmJveC53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IGJib3gud2lkdGg7XG4gICAgfVxuICAgIG1heEhlaWdodCArPSBiYm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gICAgY2xhc3NBdHRyaWJ1dGVzLnB1c2gobGJsKTtcbiAgfSk7XG4gIG1heEhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICBjb25zdCBjbGFzc01ldGhvZHMgPSBbXTtcbiAgbm9kZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChtZW1iZXIpID0+IHtcbiAgICBjb25zdCBwYXJzZWRJbmZvID0gbWVtYmVyLmdldERpc3BsYXlEZXRhaWxzKCk7XG4gICAgbGV0IGRpc3BsYXlUZXh0ID0gcGFyc2VkSW5mby5kaXNwbGF5VGV4dDtcbiAgICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpIHtcbiAgICAgIGRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XG4gICAgfVxuICAgIGNvbnN0IGxibCA9IGxhYmVsQ29udGFpbmVyLm5vZGUoKS5hcHBlbmRDaGlsZChcbiAgICAgIGNyZWF0ZUxhYmVsX2RlZmF1bHQoXG4gICAgICAgIGRpc3BsYXlUZXh0LFxuICAgICAgICBwYXJzZWRJbmZvLmNzc1N0eWxlID8gcGFyc2VkSW5mby5jc3NTdHlsZSA6IG5vZGUubGFiZWxTdHlsZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IGJib3ggPSBsYmwuZ2V0QkJveCgpO1xuICAgIGlmIChldmFsdWF0ZShnZXRDb25maWcoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpIHtcbiAgICAgIGNvbnN0IGRpdiA9IGxibC5jaGlsZHJlblswXTtcbiAgICAgIGNvbnN0IGR2ID0gc2VsZWN0MyhsYmwpO1xuICAgICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGR2LmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoKTtcbiAgICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoYmJveC53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IGJib3gud2lkdGg7XG4gICAgfVxuICAgIG1heEhlaWdodCArPSBiYm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gICAgY2xhc3NNZXRob2RzLnB1c2gobGJsKTtcbiAgfSk7XG4gIG1heEhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICBpZiAoaGFzSW50ZXJmYWNlKSB7XG4gICAgbGV0IGRpZmZYMiA9IChtYXhXaWR0aCAtIGludGVyZmFjZUJCb3gud2lkdGgpIC8gMjtcbiAgICBzZWxlY3QzKGludGVyZmFjZUxhYmVsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArICgtMSAqIG1heFdpZHRoIC8gMiArIGRpZmZYMikgKyBcIiwgXCIgKyAtMSAqIG1heEhlaWdodCAvIDIgKyBcIilcIlxuICAgICk7XG4gICAgdmVydGljYWxQb3MgPSBpbnRlcmZhY2VCQm94LmhlaWdodCArIHJvd1BhZGRpbmc7XG4gIH1cbiAgbGV0IGRpZmZYID0gKG1heFdpZHRoIC0gY2xhc3NUaXRsZUJCb3gud2lkdGgpIC8gMjtcbiAgc2VsZWN0MyhjbGFzc1RpdGxlTGFiZWwpLmF0dHIoXG4gICAgXCJ0cmFuc2Zvcm1cIixcbiAgICBcInRyYW5zbGF0ZSggXCIgKyAoLTEgKiBtYXhXaWR0aCAvIDIgKyBkaWZmWCkgKyBcIiwgXCIgKyAoLTEgKiBtYXhIZWlnaHQgLyAyICsgdmVydGljYWxQb3MpICsgXCIpXCJcbiAgKTtcbiAgdmVydGljYWxQb3MgKz0gY2xhc3NUaXRsZUJCb3guaGVpZ2h0ICsgcm93UGFkZGluZztcbiAgdG9wTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtbWF4V2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ4MlwiLCBtYXhXaWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcInkxXCIsIC1tYXhIZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBsaW5lSGVpZ2h0ICsgdmVydGljYWxQb3MpLmF0dHIoXCJ5MlwiLCAtbWF4SGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgbGluZUhlaWdodCArIHZlcnRpY2FsUG9zKTtcbiAgdmVydGljYWxQb3MgKz0gbGluZUhlaWdodDtcbiAgY2xhc3NBdHRyaWJ1dGVzLmZvckVhY2goKGxibCkgPT4ge1xuICAgIHNlbGVjdDMobGJsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArIC1tYXhXaWR0aCAvIDIgKyBcIiwgXCIgKyAoLTEgKiBtYXhIZWlnaHQgLyAyICsgdmVydGljYWxQb3MgKyBsaW5lSGVpZ2h0IC8gMikgKyBcIilcIlxuICAgICk7XG4gICAgY29uc3QgbWVtYmVyQkJveCA9IGxibD8uZ2V0QkJveCgpO1xuICAgIHZlcnRpY2FsUG9zICs9IChtZW1iZXJCQm94Py5oZWlnaHQgPz8gMCkgKyByb3dQYWRkaW5nO1xuICB9KTtcbiAgdmVydGljYWxQb3MgKz0gbGluZUhlaWdodDtcbiAgYm90dG9tTGluZS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MVwiLCAtbWF4V2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ4MlwiLCBtYXhXaWR0aCAvIDIgKyBoYWxmUGFkZGluZykuYXR0cihcInkxXCIsIC1tYXhIZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcgKyBsaW5lSGVpZ2h0ICsgdmVydGljYWxQb3MpLmF0dHIoXCJ5MlwiLCAtbWF4SGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nICsgbGluZUhlaWdodCArIHZlcnRpY2FsUG9zKTtcbiAgdmVydGljYWxQb3MgKz0gbGluZUhlaWdodDtcbiAgY2xhc3NNZXRob2RzLmZvckVhY2goKGxibCkgPT4ge1xuICAgIHNlbGVjdDMobGJsKS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKCBcIiArIC1tYXhXaWR0aCAvIDIgKyBcIiwgXCIgKyAoLTEgKiBtYXhIZWlnaHQgLyAyICsgdmVydGljYWxQb3MpICsgXCIpXCJcbiAgICApO1xuICAgIGNvbnN0IG1lbWJlckJCb3ggPSBsYmw/LmdldEJCb3goKTtcbiAgICB2ZXJ0aWNhbFBvcyArPSAobWVtYmVyQkJveD8uaGVpZ2h0ID8/IDApICsgcm93UGFkZGluZztcbiAgfSk7XG4gIHJlY3QyLmF0dHIoXCJzdHlsZVwiLCBub2RlLnN0eWxlKS5hdHRyKFwiY2xhc3NcIiwgXCJvdXRlciB0aXRsZS1zdGF0ZVwiKS5hdHRyKFwieFwiLCAtbWF4V2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIC0obWF4SGVpZ2h0IC8gMikgLSBoYWxmUGFkZGluZykuYXR0cihcIndpZHRoXCIsIG1heFdpZHRoICsgbm9kZS5wYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIG1heEhlaWdodCArIG5vZGUucGFkZGluZyk7XG4gIHVwZGF0ZU5vZGVCb3VuZHMobm9kZSwgcmVjdDIpO1xuICBub2RlLmludGVyc2VjdCA9IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIGludGVyc2VjdF9kZWZhdWx0LnJlY3Qobm9kZSwgcG9pbnQpO1xuICB9O1xuICByZXR1cm4gc2hhcGVTdmc7XG59LCBcImNsYXNzX2JveFwiKTtcbnZhciBzaGFwZXMgPSB7XG4gIHJob21idXM6IHF1ZXN0aW9uLFxuICBjb21wb3NpdGUsXG4gIHF1ZXN0aW9uLFxuICByZWN0LFxuICBsYWJlbFJlY3QsXG4gIHJlY3RXaXRoVGl0bGUsXG4gIGNob2ljZSxcbiAgY2lyY2xlLFxuICBkb3VibGVjaXJjbGUsXG4gIHN0YWRpdW0sXG4gIGhleGFnb24sXG4gIGJsb2NrX2Fycm93LFxuICByZWN0X2xlZnRfaW52X2Fycm93LFxuICBsZWFuX3JpZ2h0LFxuICBsZWFuX2xlZnQsXG4gIHRyYXBlem9pZCxcbiAgaW52X3RyYXBlem9pZCxcbiAgcmVjdF9yaWdodF9pbnZfYXJyb3csXG4gIGN5bGluZGVyLFxuICBzdGFydCxcbiAgZW5kLFxuICBub3RlOiBub3RlX2RlZmF1bHQsXG4gIHN1YnJvdXRpbmUsXG4gIGZvcms6IGZvcmtKb2luLFxuICBqb2luOiBmb3JrSm9pbixcbiAgY2xhc3NfYm94XG59O1xudmFyIG5vZGVFbGVtcyA9IHt9O1xudmFyIGluc2VydE5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChlbGVtLCBub2RlLCBkaXIpID0+IHtcbiAgbGV0IG5ld0VsO1xuICBsZXQgZWw7XG4gIGlmIChub2RlLmxpbmspIHtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIGlmIChnZXRDb25maWcoKS5zZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgICAgdGFyZ2V0ID0gXCJfdG9wXCI7XG4gICAgfSBlbHNlIGlmIChub2RlLmxpbmtUYXJnZXQpIHtcbiAgICAgIHRhcmdldCA9IG5vZGUubGlua1RhcmdldCB8fCBcIl9ibGFua1wiO1xuICAgIH1cbiAgICBuZXdFbCA9IGVsZW0uaW5zZXJ0KFwic3ZnOmFcIikuYXR0cihcInhsaW5rOmhyZWZcIiwgbm9kZS5saW5rKS5hdHRyKFwidGFyZ2V0XCIsIHRhcmdldCk7XG4gICAgZWwgPSBhd2FpdCBzaGFwZXNbbm9kZS5zaGFwZV0obmV3RWwsIG5vZGUsIGRpcik7XG4gIH0gZWxzZSB7XG4gICAgZWwgPSBhd2FpdCBzaGFwZXNbbm9kZS5zaGFwZV0oZWxlbSwgbm9kZSwgZGlyKTtcbiAgICBuZXdFbCA9IGVsO1xuICB9XG4gIGlmIChub2RlLnRvb2x0aXApIHtcbiAgICBlbC5hdHRyKFwidGl0bGVcIiwgbm9kZS50b29sdGlwKTtcbiAgfVxuICBpZiAobm9kZS5jbGFzcykge1xuICAgIGVsLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUgZGVmYXVsdCBcIiArIG5vZGUuY2xhc3MpO1xuICB9XG4gIG5vZGVFbGVtc1tub2RlLmlkXSA9IG5ld0VsO1xuICBpZiAobm9kZS5oYXZlQ2FsbGJhY2spIHtcbiAgICBub2RlRWxlbXNbbm9kZS5pZF0uYXR0cihcImNsYXNzXCIsIG5vZGVFbGVtc1tub2RlLmlkXS5hdHRyKFwiY2xhc3NcIikgKyBcIiBjbGlja2FibGVcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0VsO1xufSwgXCJpbnNlcnROb2RlXCIpO1xudmFyIHNldE5vZGVFbGVtID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgbm9kZSkgPT4ge1xuICBub2RlRWxlbXNbbm9kZS5pZF0gPSBlbGVtO1xufSwgXCJzZXROb2RlRWxlbVwiKTtcbnZhciBjbGVhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBub2RlRWxlbXMgPSB7fTtcbn0sIFwiY2xlYXJcIik7XG52YXIgcG9zaXRpb25Ob2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSkgPT4ge1xuICBjb25zdCBlbCA9IG5vZGVFbGVtc1tub2RlLmlkXTtcbiAgbG9nLnRyYWNlKFxuICAgIFwiVHJhbnNmb3JtaW5nIG5vZGVcIixcbiAgICBub2RlLmRpZmYsXG4gICAgbm9kZSxcbiAgICBcInRyYW5zbGF0ZShcIiArIChub2RlLnggLSBub2RlLndpZHRoIC8gMiAtIDUpICsgXCIsIFwiICsgbm9kZS53aWR0aCAvIDIgKyBcIilcIlxuICApO1xuICBjb25zdCBwYWRkaW5nID0gODtcbiAgY29uc3QgZGlmZiA9IG5vZGUuZGlmZiB8fCAwO1xuICBpZiAobm9kZS5jbHVzdGVyTm9kZSkge1xuICAgIGVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAobm9kZS54ICsgZGlmZiAtIG5vZGUud2lkdGggLyAyKSArIFwiLCBcIiArIChub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBwYWRkaW5nKSArIFwiKVwiXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbm9kZS54ICsgXCIsIFwiICsgbm9kZS55ICsgXCIpXCIpO1xuICB9XG4gIHJldHVybiBkaWZmO1xufSwgXCJwb3NpdGlvbk5vZGVcIik7XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZUxhYmVsX2RlZmF1bHQsXG4gIGludGVyc2VjdF9yZWN0X2RlZmF1bHQsXG4gIHVwZGF0ZU5vZGVCb3VuZHMsXG4gIGluc2VydE5vZGUsXG4gIHNldE5vZGVFbGVtLFxuICBjbGVhcixcbiAgcG9zaXRpb25Ob2RlXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBnZXREaWFncmFtRWxlbWVudCxcbiAgc2V0dXBWaWV3UG9ydEZvclNWR1xufSBmcm9tIFwiLi9jaHVuay1XWkJJQVRTSy5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstR1dITURESEIubWpzXCI7XG5pbXBvcnQge1xuICBnZXRSZWdpc3RlcmVkTGF5b3V0QWxnb3JpdGhtLFxuICByZW5kZXJcbn0gZnJvbSBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVJPS1lVVkNVLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICBnZXRFZGdlSWQsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb21tb25fZGVmYXVsdCxcbiAgZGVmYXVsdENvbmZpZzIgYXMgZGVmYXVsdENvbmZpZyxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBsb2csXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0Q29uZmlnMiBhcyBzZXRDb25maWcsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9mbG93RGIudHNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIE1FUk1BSURfRE9NX0lEX1BSRUZJWCA9IFwiZmxvd2NoYXJ0LVwiO1xudmFyIHZlcnRleENvdW50ZXIgPSAwO1xudmFyIGNvbmZpZyA9IGdldENvbmZpZygpO1xudmFyIHZlcnRpY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBlZGdlcyA9IFtdO1xudmFyIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHN1YkdyYXBocyA9IFtdO1xudmFyIHN1YkdyYXBoTG9va3VwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciB0b29sdGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgc3ViQ291bnQgPSAwO1xudmFyIGZpcnN0R3JhcGhGbGFnID0gdHJ1ZTtcbnZhciBkaXJlY3Rpb247XG52YXIgdmVyc2lvbjtcbnZhciBmdW5zID0gW107XG52YXIgc2FuaXRpemVUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodHh0LCBjb25maWcpLCBcInNhbml0aXplVGV4dFwiKTtcbnZhciBsb29rVXBEb21JZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgZm9yIChjb25zdCB2ZXJ0ZXggb2YgdmVydGljZXMudmFsdWVzKCkpIHtcbiAgICBpZiAodmVydGV4LmlkID09PSBpZCkge1xuICAgICAgcmV0dXJuIHZlcnRleC5kb21JZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlkO1xufSwgXCJsb29rVXBEb21JZFwiKTtcbnZhciBhZGRWZXJ0ZXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCB0ZXh0T2JqLCB0eXBlLCBzdHlsZSwgY2xhc3NlczIsIGRpciwgcHJvcHMgPSB7fSkge1xuICBpZiAoIWlkIHx8IGlkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHR4dDtcbiAgbGV0IHZlcnRleCA9IHZlcnRpY2VzLmdldChpZCk7XG4gIGlmICh2ZXJ0ZXggPT09IHZvaWQgMCkge1xuICAgIHZlcnRleCA9IHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWxUeXBlOiBcInRleHRcIixcbiAgICAgIGRvbUlkOiBNRVJNQUlEX0RPTV9JRF9QUkVGSVggKyBpZCArIFwiLVwiICsgdmVydGV4Q291bnRlcixcbiAgICAgIHN0eWxlczogW10sXG4gICAgICBjbGFzc2VzOiBbXVxuICAgIH07XG4gICAgdmVydGljZXMuc2V0KGlkLCB2ZXJ0ZXgpO1xuICB9XG4gIHZlcnRleENvdW50ZXIrKztcbiAgaWYgKHRleHRPYmogIT09IHZvaWQgMCkge1xuICAgIGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIHR4dCA9IHNhbml0aXplVGV4dCh0ZXh0T2JqLnRleHQudHJpbSgpKTtcbiAgICB2ZXJ0ZXgubGFiZWxUeXBlID0gdGV4dE9iai50eXBlO1xuICAgIGlmICh0eHQuc3RhcnRzV2l0aCgnXCInKSAmJiB0eHQuZW5kc1dpdGgoJ1wiJykpIHtcbiAgICAgIHR4dCA9IHR4dC5zdWJzdHJpbmcoMSwgdHh0Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICB2ZXJ0ZXgudGV4dCA9IHR4dDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodmVydGV4LnRleHQgPT09IHZvaWQgMCkge1xuICAgICAgdmVydGV4LnRleHQgPSBpZDtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGUgIT09IHZvaWQgMCkge1xuICAgIHZlcnRleC50eXBlID0gdHlwZTtcbiAgfVxuICBpZiAoc3R5bGUgIT09IHZvaWQgMCAmJiBzdHlsZSAhPT0gbnVsbCkge1xuICAgIHN0eWxlLmZvckVhY2goZnVuY3Rpb24ocykge1xuICAgICAgdmVydGV4LnN0eWxlcy5wdXNoKHMpO1xuICAgIH0pO1xuICB9XG4gIGlmIChjbGFzc2VzMiAhPT0gdm9pZCAwICYmIGNsYXNzZXMyICE9PSBudWxsKSB7XG4gICAgY2xhc3NlczIuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgICB2ZXJ0ZXguY2xhc3Nlcy5wdXNoKHMpO1xuICAgIH0pO1xuICB9XG4gIGlmIChkaXIgIT09IHZvaWQgMCkge1xuICAgIHZlcnRleC5kaXIgPSBkaXI7XG4gIH1cbiAgaWYgKHZlcnRleC5wcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgdmVydGV4LnByb3BzID0gcHJvcHM7XG4gIH0gZWxzZSBpZiAocHJvcHMgIT09IHZvaWQgMCkge1xuICAgIE9iamVjdC5hc3NpZ24odmVydGV4LnByb3BzLCBwcm9wcyk7XG4gIH1cbn0sIFwiYWRkVmVydGV4XCIpO1xudmFyIGFkZFNpbmdsZUxpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF9zdGFydCwgX2VuZCwgdHlwZSkge1xuICBjb25zdCBzdGFydCA9IF9zdGFydDtcbiAgY29uc3QgZW5kID0gX2VuZDtcbiAgY29uc3QgZWRnZSA9IHsgc3RhcnQsIGVuZCwgdHlwZTogdm9pZCAwLCB0ZXh0OiBcIlwiLCBsYWJlbFR5cGU6IFwidGV4dFwiIH07XG4gIGxvZy5pbmZvKFwiYWJjNzggR290IGVkZ2UuLi5cIiwgZWRnZSk7XG4gIGNvbnN0IGxpbmtUZXh0T2JqID0gdHlwZS50ZXh0O1xuICBpZiAobGlua1RleHRPYmogIT09IHZvaWQgMCkge1xuICAgIGVkZ2UudGV4dCA9IHNhbml0aXplVGV4dChsaW5rVGV4dE9iai50ZXh0LnRyaW0oKSk7XG4gICAgaWYgKGVkZ2UudGV4dC5zdGFydHNXaXRoKCdcIicpICYmIGVkZ2UudGV4dC5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgZWRnZS50ZXh0ID0gZWRnZS50ZXh0LnN1YnN0cmluZygxLCBlZGdlLnRleHQubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGVkZ2UubGFiZWxUeXBlID0gbGlua1RleHRPYmoudHlwZTtcbiAgfVxuICBpZiAodHlwZSAhPT0gdm9pZCAwKSB7XG4gICAgZWRnZS50eXBlID0gdHlwZS50eXBlO1xuICAgIGVkZ2Uuc3Ryb2tlID0gdHlwZS5zdHJva2U7XG4gICAgZWRnZS5sZW5ndGggPSB0eXBlLmxlbmd0aCA+IDEwID8gMTAgOiB0eXBlLmxlbmd0aDtcbiAgfVxuICBpZiAoZWRnZXMubGVuZ3RoIDwgKGNvbmZpZy5tYXhFZGdlcyA/PyA1MDApKSB7XG4gICAgbG9nLmluZm8oXCJQdXNoaW5nIGVkZ2UuLi5cIik7XG4gICAgZWRnZXMucHVzaChlZGdlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRWRnZSBsaW1pdCBleGNlZWRlZC4gJHtlZGdlcy5sZW5ndGh9IGVkZ2VzIGZvdW5kLCBidXQgdGhlIGxpbWl0IGlzICR7Y29uZmlnLm1heEVkZ2VzfS5cblxuSW5pdGlhbGl6ZSBtZXJtYWlkIHdpdGggbWF4RWRnZXMgc2V0IHRvIGEgaGlnaGVyIG51bWJlciB0byBhbGxvdyBtb3JlIGVkZ2VzLlxuWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy5cbllvdSBoYXZlIHRvIGNhbGwgbWVybWFpZC5pbml0aWFsaXplLmBcbiAgICApO1xuICB9XG59LCBcImFkZFNpbmdsZUxpbmtcIik7XG52YXIgYWRkTGluayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX3N0YXJ0LCBfZW5kLCB0eXBlKSB7XG4gIGxvZy5pbmZvKFwiYWRkTGlua1wiLCBfc3RhcnQsIF9lbmQsIHR5cGUpO1xuICBmb3IgKGNvbnN0IHN0YXJ0IG9mIF9zdGFydCkge1xuICAgIGZvciAoY29uc3QgZW5kIG9mIF9lbmQpIHtcbiAgICAgIGFkZFNpbmdsZUxpbmsoc3RhcnQsIGVuZCwgdHlwZSk7XG4gICAgfVxuICB9XG59LCBcImFkZExpbmtcIik7XG52YXIgdXBkYXRlTGlua0ludGVycG9sYXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3NpdGlvbnMsIGludGVycG9sYXRlKSB7XG4gIHBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHBvcykge1xuICAgIGlmIChwb3MgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICBlZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRnZXNbcG9zXS5pbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlO1xuICAgIH1cbiAgfSk7XG59LCBcInVwZGF0ZUxpbmtJbnRlcnBvbGF0ZVwiKTtcbnZhciB1cGRhdGVMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3NpdGlvbnMsIHN0eWxlKSB7XG4gIHBvc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHBvcykge1xuICAgIGlmICh0eXBlb2YgcG9zID09PSBcIm51bWJlclwiICYmIHBvcyA+PSBlZGdlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBpbmRleCAke3Bvc30gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHtlZGdlcy5sZW5ndGggLSAxfS4gKEhlbHA6IEVuc3VyZSB0aGF0IHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGV4aXN0aW5nIGVkZ2VzLilgXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocG9zID09PSBcImRlZmF1bHRcIikge1xuICAgICAgZWRnZXMuZGVmYXVsdFN0eWxlID0gc3R5bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkZ2VzW3Bvc10uc3R5bGUgPSBzdHlsZTtcbiAgICAgIGlmICgoZWRnZXNbcG9zXT8uc3R5bGU/Lmxlbmd0aCA/PyAwKSA+IDAgJiYgIWVkZ2VzW3Bvc10/LnN0eWxlPy5zb21lKChzKSA9PiBzPy5zdGFydHNXaXRoKFwiZmlsbFwiKSkpIHtcbiAgICAgICAgZWRnZXNbcG9zXT8uc3R5bGU/LnB1c2goXCJmaWxsOm5vbmVcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIFwidXBkYXRlTGlua1wiKTtcbnZhciBhZGRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBzdHlsZSkge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBsZXQgY2xhc3NOb2RlID0gY2xhc3Nlcy5nZXQoaWQpO1xuICAgIGlmIChjbGFzc05vZGUgPT09IHZvaWQgMCkge1xuICAgICAgY2xhc3NOb2RlID0geyBpZCwgc3R5bGVzOiBbXSwgdGV4dFN0eWxlczogW10gfTtcbiAgICAgIGNsYXNzZXMuc2V0KGlkLCBjbGFzc05vZGUpO1xuICAgIH1cbiAgICBpZiAoc3R5bGUgIT09IHZvaWQgMCAmJiBzdHlsZSAhPT0gbnVsbCkge1xuICAgICAgc3R5bGUuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgICAgIGlmICgvY29sb3IvLmV4ZWMocykpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdHlsZSA9IHMucmVwbGFjZShcImZpbGxcIiwgXCJiZ0ZpbGxcIik7XG4gICAgICAgICAgY2xhc3NOb2RlLnRleHRTdHlsZXMucHVzaChuZXdTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2xhc3NOb2RlLnN0eWxlcy5wdXNoKHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn0sIFwiYWRkQ2xhc3NcIik7XG52YXIgc2V0RGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkaXIpIHtcbiAgZGlyZWN0aW9uID0gZGlyO1xuICBpZiAoLy4qPC8uZXhlYyhkaXJlY3Rpb24pKSB7XG4gICAgZGlyZWN0aW9uID0gXCJSTFwiO1xuICB9XG4gIGlmICgvLipcXF4vLmV4ZWMoZGlyZWN0aW9uKSkge1xuICAgIGRpcmVjdGlvbiA9IFwiQlRcIjtcbiAgfVxuICBpZiAoLy4qPi8uZXhlYyhkaXJlY3Rpb24pKSB7XG4gICAgZGlyZWN0aW9uID0gXCJMUlwiO1xuICB9XG4gIGlmICgvLip2Ly5leGVjKGRpcmVjdGlvbikpIHtcbiAgICBkaXJlY3Rpb24gPSBcIlRCXCI7XG4gIH1cbiAgaWYgKGRpcmVjdGlvbiA9PT0gXCJURFwiKSB7XG4gICAgZGlyZWN0aW9uID0gXCJUQlwiO1xuICB9XG59LCBcInNldERpcmVjdGlvblwiKTtcbnZhciBzZXRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBjbGFzc05hbWUpIHtcbiAgZm9yIChjb25zdCBpZCBvZiBpZHMuc3BsaXQoXCIsXCIpKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdmVydGljZXMuZ2V0KGlkKTtcbiAgICBpZiAodmVydGV4KSB7XG4gICAgICB2ZXJ0ZXguY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IHN1YkdyYXBoID0gc3ViR3JhcGhMb29rdXAuZ2V0KGlkKTtcbiAgICBpZiAoc3ViR3JhcGgpIHtcbiAgICAgIHN1YkdyYXBoLmNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgfVxufSwgXCJzZXRDbGFzc1wiKTtcbnZhciBzZXRUb29sdGlwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIHRvb2x0aXApIHtcbiAgaWYgKHRvb2x0aXAgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB0b29sdGlwID0gc2FuaXRpemVUZXh0KHRvb2x0aXApO1xuICBmb3IgKGNvbnN0IGlkIG9mIGlkcy5zcGxpdChcIixcIikpIHtcbiAgICB0b29sdGlwcy5zZXQodmVyc2lvbiA9PT0gXCJnZW4tMVwiID8gbG9va1VwRG9tSWQoaWQpIDogaWQsIHRvb2x0aXApO1xuICB9XG59LCBcInNldFRvb2x0aXBcIik7XG52YXIgc2V0Q2xpY2tGdW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBjb25zdCBkb21JZCA9IGxvb2tVcERvbUlkKGlkKTtcbiAgaWYgKGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWwgIT09IFwibG9vc2VcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25OYW1lID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGFyZ0xpc3QgPSBbXTtcbiAgaWYgKHR5cGVvZiBmdW5jdGlvbkFyZ3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICBhcmdMaXN0ID0gZnVuY3Rpb25BcmdzLnNwbGl0KC8sKD89KD86KD86W15cIl0qXCIpezJ9KSpbXlwiXSokKS8pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGl0ZW0gPSBhcmdMaXN0W2ldLnRyaW0oKTtcbiAgICAgIGlmIChpdGVtLnN0YXJ0c1dpdGgoJ1wiJykgJiYgaXRlbS5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgICBpdGVtID0gaXRlbS5zdWJzdHIoMSwgaXRlbS5sZW5ndGggLSAyKTtcbiAgICAgIH1cbiAgICAgIGFyZ0xpc3RbaV0gPSBpdGVtO1xuICAgIH1cbiAgfVxuICBpZiAoYXJnTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBhcmdMaXN0LnB1c2goaWQpO1xuICB9XG4gIGNvbnN0IHZlcnRleCA9IHZlcnRpY2VzLmdldChpZCk7XG4gIGlmICh2ZXJ0ZXgpIHtcbiAgICB2ZXJ0ZXguaGF2ZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICBmdW5zLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtkb21JZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtICE9PSBudWxsKSB7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1dGlsc19kZWZhdWx0LnJ1bkZ1bmMoZnVuY3Rpb25OYW1lLCAuLi5hcmdMaXN0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0sIFwic2V0Q2xpY2tGdW5cIik7XG52YXIgc2V0TGluayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBsaW5rU3RyLCB0YXJnZXQpIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdmVydGljZXMuZ2V0KGlkKTtcbiAgICBpZiAodmVydGV4ICE9PSB2b2lkIDApIHtcbiAgICAgIHZlcnRleC5saW5rID0gdXRpbHNfZGVmYXVsdC5mb3JtYXRVcmwobGlua1N0ciwgY29uZmlnKTtcbiAgICAgIHZlcnRleC5saW5rVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cbiAgfSk7XG4gIHNldENsYXNzKGlkcywgXCJjbGlja2FibGVcIik7XG59LCBcInNldExpbmtcIik7XG52YXIgZ2V0VG9vbHRpcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHRvb2x0aXBzLmdldChpZCk7XG59LCBcImdldFRvb2x0aXBcIik7XG52YXIgc2V0Q2xpY2tFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBzZXRDbGlja0Z1bihpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0Q2xpY2tFdmVudFwiKTtcbnZhciBiaW5kRnVuY3Rpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtZW50KSB7XG4gIGZ1bnMuZm9yRWFjaChmdW5jdGlvbihmdW4pIHtcbiAgICBmdW4oZWxlbWVudCk7XG4gIH0pO1xufSwgXCJiaW5kRnVuY3Rpb25zXCIpO1xudmFyIGdldERpcmVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBkaXJlY3Rpb24udHJpbSgpO1xufSwgXCJnZXREaXJlY3Rpb25cIik7XG52YXIgZ2V0VmVydGljZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdmVydGljZXM7XG59LCBcImdldFZlcnRpY2VzXCIpO1xudmFyIGdldEVkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGVkZ2VzO1xufSwgXCJnZXRFZGdlc1wiKTtcbnZhciBnZXRDbGFzc2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNsYXNzZXM7XG59LCBcImdldENsYXNzZXNcIik7XG52YXIgc2V0dXBUb29sVGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCkge1xuICBsZXQgdG9vbHRpcEVsZW0gPSBzZWxlY3QoXCIubWVybWFpZFRvb2x0aXBcIik7XG4gIGlmICgodG9vbHRpcEVsZW0uX2dyb3VwcyB8fCB0b29sdGlwRWxlbSlbMF1bMF0gPT09IG51bGwpIHtcbiAgICB0b29sdGlwRWxlbSA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1lcm1haWRUb29sdGlwXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgfVxuICBjb25zdCBzdmcgPSBzZWxlY3QoZWxlbWVudCkuc2VsZWN0KFwic3ZnXCIpO1xuICBjb25zdCBub2RlcyA9IHN2Zy5zZWxlY3RBbGwoXCJnLm5vZGVcIik7XG4gIG5vZGVzLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGVsID0gc2VsZWN0KHRoaXMpO1xuICAgIGNvbnN0IHRpdGxlID0gZWwuYXR0cihcInRpdGxlXCIpO1xuICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gdGhpcz8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdG9vbHRpcEVsZW0udHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoXCJvcGFjaXR5XCIsIFwiLjlcIik7XG4gICAgdG9vbHRpcEVsZW0udGV4dChlbC5hdHRyKFwidGl0bGVcIikpLnN0eWxlKFwibGVmdFwiLCB3aW5kb3cuc2Nyb2xsWCArIHJlY3QubGVmdCArIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDIgKyBcInB4XCIpLnN0eWxlKFwidG9wXCIsIHdpbmRvdy5zY3JvbGxZICsgcmVjdC5ib3R0b20gKyBcInB4XCIpO1xuICAgIHRvb2x0aXBFbGVtLmh0bWwodG9vbHRpcEVsZW0uaHRtbCgpLnJlcGxhY2UoLyZsdDticlxcLyZndDsvZywgXCI8YnIvPlwiKSk7XG4gICAgZWwuY2xhc3NlZChcImhvdmVyXCIsIHRydWUpO1xuICB9KS5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKCkge1xuICAgIHRvb2x0aXBFbGVtLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICBjb25zdCBlbCA9IHNlbGVjdCh0aGlzKTtcbiAgICBlbC5jbGFzc2VkKFwiaG92ZXJcIiwgZmFsc2UpO1xuICB9KTtcbn0sIFwic2V0dXBUb29sVGlwc1wiKTtcbmZ1bnMucHVzaChzZXR1cFRvb2xUaXBzKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHZlciA9IFwiZ2VuLTFcIikge1xuICB2ZXJ0aWNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBlZGdlcyA9IFtdO1xuICBmdW5zID0gW3NldHVwVG9vbFRpcHNdO1xuICBzdWJHcmFwaHMgPSBbXTtcbiAgc3ViR3JhcGhMb29rdXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBzdWJDb3VudCA9IDA7XG4gIHRvb2x0aXBzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgZmlyc3RHcmFwaEZsYWcgPSB0cnVlO1xuICB2ZXJzaW9uID0gdmVyO1xuICBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgc2V0R2VuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmVyKSA9PiB7XG4gIHZlcnNpb24gPSB2ZXIgfHwgXCJnZW4tMlwiO1xufSwgXCJzZXRHZW5cIik7XG52YXIgZGVmYXVsdFN0eWxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFwiZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjtcIjtcbn0sIFwiZGVmYXVsdFN0eWxlXCIpO1xudmFyIGFkZFN1YkdyYXBoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihfaWQsIGxpc3QsIF90aXRsZSkge1xuICBsZXQgaWQgPSBfaWQudGV4dC50cmltKCk7XG4gIGxldCB0aXRsZSA9IF90aXRsZS50ZXh0O1xuICBpZiAoX2lkID09PSBfdGl0bGUgJiYgL1xccy8uZXhlYyhfdGl0bGUudGV4dCkpIHtcbiAgICBpZCA9IHZvaWQgMDtcbiAgfVxuICBmdW5jdGlvbiB1bmlxKGEpIHtcbiAgICBjb25zdCBwcmltcyA9IHsgYm9vbGVhbjoge30sIG51bWJlcjoge30sIHN0cmluZzoge30gfTtcbiAgICBjb25zdCBvYmpzID0gW107XG4gICAgbGV0IGRpcjI7XG4gICAgY29uc3Qgbm9kZUxpc3QyID0gYS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBpdGVtO1xuICAgICAgaWYgKGl0ZW0uc3RtdCAmJiBpdGVtLnN0bXQgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgZGlyMiA9IGl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSBpbiBwcmltcykge1xuICAgICAgICByZXR1cm4gcHJpbXNbdHlwZV0uaGFzT3duUHJvcGVydHkoaXRlbSkgPyBmYWxzZSA6IHByaW1zW3R5cGVdW2l0ZW1dID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvYmpzLmluY2x1ZGVzKGl0ZW0pID8gZmFsc2UgOiBvYmpzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbm9kZUxpc3Q6IG5vZGVMaXN0MiwgZGlyOiBkaXIyIH07XG4gIH1cbiAgX19uYW1lKHVuaXEsIFwidW5pcVwiKTtcbiAgY29uc3QgeyBub2RlTGlzdCwgZGlyIH0gPSB1bmlxKGxpc3QuZmxhdCgpKTtcbiAgaWYgKHZlcnNpb24gPT09IFwiZ2VuLTFcIikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGVMaXN0W2ldID0gbG9va1VwRG9tSWQobm9kZUxpc3RbaV0pO1xuICAgIH1cbiAgfVxuICBpZCA9IGlkID8/IFwic3ViR3JhcGhcIiArIHN1YkNvdW50O1xuICB0aXRsZSA9IHRpdGxlIHx8IFwiXCI7XG4gIHRpdGxlID0gc2FuaXRpemVUZXh0KHRpdGxlKTtcbiAgc3ViQ291bnQgPSBzdWJDb3VudCArIDE7XG4gIGNvbnN0IHN1YkdyYXBoID0ge1xuICAgIGlkLFxuICAgIG5vZGVzOiBub2RlTGlzdCxcbiAgICB0aXRsZTogdGl0bGUudHJpbSgpLFxuICAgIGNsYXNzZXM6IFtdLFxuICAgIGRpcixcbiAgICBsYWJlbFR5cGU6IF90aXRsZS50eXBlXG4gIH07XG4gIGxvZy5pbmZvKFwiQWRkaW5nXCIsIHN1YkdyYXBoLmlkLCBzdWJHcmFwaC5ub2Rlcywgc3ViR3JhcGguZGlyKTtcbiAgc3ViR3JhcGgubm9kZXMgPSBtYWtlVW5pcShzdWJHcmFwaCwgc3ViR3JhcGhzKS5ub2RlcztcbiAgc3ViR3JhcGhzLnB1c2goc3ViR3JhcGgpO1xuICBzdWJHcmFwaExvb2t1cC5zZXQoaWQsIHN1YkdyYXBoKTtcbiAgcmV0dXJuIGlkO1xufSwgXCJhZGRTdWJHcmFwaFwiKTtcbnZhciBnZXRQb3NGb3JJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgZm9yIChjb25zdCBbaSwgc3ViR3JhcGhdIG9mIHN1YkdyYXBocy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoc3ViR3JhcGguaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufSwgXCJnZXRQb3NGb3JJZFwiKTtcbnZhciBzZWNDb3VudCA9IC0xO1xudmFyIHBvc0Nyb3NzUmVmID0gW107XG52YXIgaW5kZXhOb2RlczIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBwb3MpIHtcbiAgY29uc3Qgbm9kZXMgPSBzdWJHcmFwaHNbcG9zXS5ub2RlcztcbiAgc2VjQ291bnQgPSBzZWNDb3VudCArIDE7XG4gIGlmIChzZWNDb3VudCA+IDJlMykge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgY291bnQ6IDBcbiAgICB9O1xuICB9XG4gIHBvc0Nyb3NzUmVmW3NlY0NvdW50XSA9IHBvcztcbiAgaWYgKHN1YkdyYXBoc1twb3NdLmlkID09PSBpZCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IHRydWUsXG4gICAgICBjb3VudDogMFxuICAgIH07XG4gIH1cbiAgbGV0IGNvdW50ID0gMDtcbiAgbGV0IHBvc0NvdW50ID0gMTtcbiAgd2hpbGUgKGNvdW50IDwgbm9kZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hpbGRQb3MgPSBnZXRQb3NGb3JJZChub2Rlc1tjb3VudF0pO1xuICAgIGlmIChjaGlsZFBvcyA+PSAwKSB7XG4gICAgICBjb25zdCByZXMgPSBpbmRleE5vZGVzMihpZCwgY2hpbGRQb3MpO1xuICAgICAgaWYgKHJlcy5yZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXN1bHQ6IHRydWUsXG4gICAgICAgICAgY291bnQ6IHBvc0NvdW50ICsgcmVzLmNvdW50XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3NDb3VudCA9IHBvc0NvdW50ICsgcmVzLmNvdW50O1xuICAgICAgfVxuICAgIH1cbiAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlc3VsdDogZmFsc2UsXG4gICAgY291bnQ6IHBvc0NvdW50XG4gIH07XG59LCBcImluZGV4Tm9kZXMyXCIpO1xudmFyIGdldERlcHRoRmlyc3RQb3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHBvcykge1xuICByZXR1cm4gcG9zQ3Jvc3NSZWZbcG9zXTtcbn0sIFwiZ2V0RGVwdGhGaXJzdFBvc1wiKTtcbnZhciBpbmRleE5vZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc2VjQ291bnQgPSAtMTtcbiAgaWYgKHN1YkdyYXBocy5sZW5ndGggPiAwKSB7XG4gICAgaW5kZXhOb2RlczIoXCJub25lXCIsIHN1YkdyYXBocy5sZW5ndGggLSAxKTtcbiAgfVxufSwgXCJpbmRleE5vZGVzXCIpO1xudmFyIGdldFN1YkdyYXBocyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdWJHcmFwaHM7XG59LCBcImdldFN1YkdyYXBoc1wiKTtcbnZhciBmaXJzdEdyYXBoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGlmIChmaXJzdEdyYXBoRmxhZykge1xuICAgIGZpcnN0R3JhcGhGbGFnID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJmaXJzdEdyYXBoXCIpO1xudmFyIGRlc3RydWN0U3RhcnRMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3N0cikgPT4ge1xuICBsZXQgc3RyID0gX3N0ci50cmltKCk7XG4gIGxldCB0eXBlID0gXCJhcnJvd19vcGVuXCI7XG4gIHN3aXRjaCAoc3RyWzBdKSB7XG4gICAgY2FzZSBcIjxcIjpcbiAgICAgIHR5cGUgPSBcImFycm93X3BvaW50XCI7XG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwieFwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY3Jvc3NcIjtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvXCI6XG4gICAgICB0eXBlID0gXCJhcnJvd19jaXJjbGVcIjtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGxldCBzdHJva2UgPSBcIm5vcm1hbFwiO1xuICBpZiAoc3RyLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgIHN0cm9rZSA9IFwidGhpY2tcIjtcbiAgfVxuICBpZiAoc3RyLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgIHN0cm9rZSA9IFwiZG90dGVkXCI7XG4gIH1cbiAgcmV0dXJuIHsgdHlwZSwgc3Ryb2tlIH07XG59LCBcImRlc3RydWN0U3RhcnRMaW5rXCIpO1xudmFyIGNvdW50Q2hhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNoYXIsIHN0cikgPT4ge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICBsZXQgY291bnQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHN0cltpXSA9PT0gY2hhcikge1xuICAgICAgKytjb3VudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufSwgXCJjb3VudENoYXJcIik7XG52YXIgZGVzdHJ1Y3RFbmRMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3N0cikgPT4ge1xuICBjb25zdCBzdHIgPSBfc3RyLnRyaW0oKTtcbiAgbGV0IGxpbmUgPSBzdHIuc2xpY2UoMCwgLTEpO1xuICBsZXQgdHlwZSA9IFwiYXJyb3dfb3BlblwiO1xuICBzd2l0Y2ggKHN0ci5zbGljZSgtMSkpIHtcbiAgICBjYXNlIFwieFwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY3Jvc3NcIjtcbiAgICAgIGlmIChzdHIuc3RhcnRzV2l0aChcInhcIikpIHtcbiAgICAgICAgdHlwZSA9IFwiZG91YmxlX1wiICsgdHlwZTtcbiAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPlwiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfcG9pbnRcIjtcbiAgICAgIGlmIChzdHIuc3RhcnRzV2l0aChcIjxcIikpIHtcbiAgICAgICAgdHlwZSA9IFwiZG91YmxlX1wiICsgdHlwZTtcbiAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwib1wiOlxuICAgICAgdHlwZSA9IFwiYXJyb3dfY2lyY2xlXCI7XG4gICAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoXCJvXCIpKSB7XG4gICAgICAgIHR5cGUgPSBcImRvdWJsZV9cIiArIHR5cGU7XG4gICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgbGV0IHN0cm9rZSA9IFwibm9ybWFsXCI7XG4gIGxldCBsZW5ndGggPSBsaW5lLmxlbmd0aCAtIDE7XG4gIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCI9XCIpKSB7XG4gICAgc3Ryb2tlID0gXCJ0aGlja1wiO1xuICB9XG4gIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJ+XCIpKSB7XG4gICAgc3Ryb2tlID0gXCJpbnZpc2libGVcIjtcbiAgfVxuICBjb25zdCBkb3RzID0gY291bnRDaGFyKFwiLlwiLCBsaW5lKTtcbiAgaWYgKGRvdHMpIHtcbiAgICBzdHJva2UgPSBcImRvdHRlZFwiO1xuICAgIGxlbmd0aCA9IGRvdHM7XG4gIH1cbiAgcmV0dXJuIHsgdHlwZSwgc3Ryb2tlLCBsZW5ndGggfTtcbn0sIFwiZGVzdHJ1Y3RFbmRMaW5rXCIpO1xudmFyIGRlc3RydWN0TGluayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF9zdHIsIF9zdGFydFN0cikgPT4ge1xuICBjb25zdCBpbmZvID0gZGVzdHJ1Y3RFbmRMaW5rKF9zdHIpO1xuICBsZXQgc3RhcnRJbmZvO1xuICBpZiAoX3N0YXJ0U3RyKSB7XG4gICAgc3RhcnRJbmZvID0gZGVzdHJ1Y3RTdGFydExpbmsoX3N0YXJ0U3RyKTtcbiAgICBpZiAoc3RhcnRJbmZvLnN0cm9rZSAhPT0gaW5mby5zdHJva2UpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiSU5WQUxJRFwiLCBzdHJva2U6IFwiSU5WQUxJRFwiIH07XG4gICAgfVxuICAgIGlmIChzdGFydEluZm8udHlwZSA9PT0gXCJhcnJvd19vcGVuXCIpIHtcbiAgICAgIHN0YXJ0SW5mby50eXBlID0gaW5mby50eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnRJbmZvLnR5cGUgIT09IGluZm8udHlwZSkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIklOVkFMSURcIiwgc3Ryb2tlOiBcIklOVkFMSURcIiB9O1xuICAgICAgfVxuICAgICAgc3RhcnRJbmZvLnR5cGUgPSBcImRvdWJsZV9cIiArIHN0YXJ0SW5mby50eXBlO1xuICAgIH1cbiAgICBpZiAoc3RhcnRJbmZvLnR5cGUgPT09IFwiZG91YmxlX2Fycm93XCIpIHtcbiAgICAgIHN0YXJ0SW5mby50eXBlID0gXCJkb3VibGVfYXJyb3dfcG9pbnRcIjtcbiAgICB9XG4gICAgc3RhcnRJbmZvLmxlbmd0aCA9IGluZm8ubGVuZ3RoO1xuICAgIHJldHVybiBzdGFydEluZm87XG4gIH1cbiAgcmV0dXJuIGluZm87XG59LCBcImRlc3RydWN0TGlua1wiKTtcbnZhciBleGlzdHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhbGxTZ3MsIF9pZCkgPT4ge1xuICBmb3IgKGNvbnN0IHNnIG9mIGFsbFNncykge1xuICAgIGlmIChzZy5ub2Rlcy5pbmNsdWRlcyhfaWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJleGlzdHNcIik7XG52YXIgbWFrZVVuaXEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzZywgYWxsU3ViZ3JhcGhzKSA9PiB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBzZy5ub2Rlcy5mb3JFYWNoKChfaWQsIHBvcykgPT4ge1xuICAgIGlmICghZXhpc3RzKGFsbFN1YmdyYXBocywgX2lkKSkge1xuICAgICAgcmVzLnB1c2goc2cubm9kZXNbcG9zXSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHsgbm9kZXM6IHJlcyB9O1xufSwgXCJtYWtlVW5pcVwiKTtcbnZhciBsZXggPSB7XG4gIGZpcnN0R3JhcGhcbn07XG52YXIgZ2V0VHlwZUZyb21WZXJ0ZXggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2ZXJ0ZXgpID0+IHtcbiAgaWYgKHZlcnRleC50eXBlID09PSBcInNxdWFyZVwiKSB7XG4gICAgcmV0dXJuIFwic3F1YXJlUmVjdFwiO1xuICB9XG4gIGlmICh2ZXJ0ZXgudHlwZSA9PT0gXCJyb3VuZFwiKSB7XG4gICAgcmV0dXJuIFwicm91bmRlZFJlY3RcIjtcbiAgfVxuICByZXR1cm4gdmVydGV4LnR5cGUgPz8gXCJzcXVhcmVSZWN0XCI7XG59LCBcImdldFR5cGVGcm9tVmVydGV4XCIpO1xudmFyIGZpbmROb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZXMsIGlkKSA9PiBub2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBpZCksIFwiZmluZE5vZGVcIik7XG52YXIgZGVzdHJ1Y3RFZGdlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR5cGUpID0+IHtcbiAgbGV0IGFycm93VHlwZVN0YXJ0ID0gXCJub25lXCI7XG4gIGxldCBhcnJvd1R5cGVFbmQgPSBcImFycm93X3BvaW50XCI7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJhcnJvd19wb2ludFwiOlxuICAgIGNhc2UgXCJhcnJvd19jaXJjbGVcIjpcbiAgICBjYXNlIFwiYXJyb3dfY3Jvc3NcIjpcbiAgICAgIGFycm93VHlwZUVuZCA9IHR5cGU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZG91YmxlX2Fycm93X3BvaW50XCI6XG4gICAgY2FzZSBcImRvdWJsZV9hcnJvd19jaXJjbGVcIjpcbiAgICBjYXNlIFwiZG91YmxlX2Fycm93X2Nyb3NzXCI6XG4gICAgICBhcnJvd1R5cGVTdGFydCA9IHR5cGUucmVwbGFjZShcImRvdWJsZV9cIiwgXCJcIik7XG4gICAgICBhcnJvd1R5cGVFbmQgPSBhcnJvd1R5cGVTdGFydDtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7IGFycm93VHlwZVN0YXJ0LCBhcnJvd1R5cGVFbmQgfTtcbn0sIFwiZGVzdHJ1Y3RFZGdlVHlwZVwiKTtcbnZhciBhZGROb2RlRnJvbVZlcnRleCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZlcnRleCwgbm9kZXMsIHBhcmVudERCLCBzdWJHcmFwaERCLCBjb25maWcyLCBsb29rKSA9PiB7XG4gIGNvbnN0IHBhcmVudElkID0gcGFyZW50REIuZ2V0KHZlcnRleC5pZCk7XG4gIGNvbnN0IGlzR3JvdXAgPSBzdWJHcmFwaERCLmdldCh2ZXJ0ZXguaWQpID8/IGZhbHNlO1xuICBjb25zdCBub2RlID0gZmluZE5vZGUobm9kZXMsIHZlcnRleC5pZCk7XG4gIGlmIChub2RlKSB7XG4gICAgbm9kZS5jc3NTdHlsZXMgPSB2ZXJ0ZXguc3R5bGVzO1xuICAgIG5vZGUuY3NzQ29tcGlsZWRTdHlsZXMgPSBnZXRDb21waWxlZFN0eWxlcyh2ZXJ0ZXguY2xhc3Nlcyk7XG4gICAgbm9kZS5jc3NDbGFzc2VzID0gdmVydGV4LmNsYXNzZXMuam9pbihcIiBcIik7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMucHVzaCh7XG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgbGFiZWw6IHZlcnRleC50ZXh0LFxuICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgIHBhcmVudElkLFxuICAgICAgcGFkZGluZzogY29uZmlnMi5mbG93Y2hhcnQ/LnBhZGRpbmcgfHwgOCxcbiAgICAgIGNzc1N0eWxlczogdmVydGV4LnN0eWxlcyxcbiAgICAgIGNzc0NvbXBpbGVkU3R5bGVzOiBnZXRDb21waWxlZFN0eWxlcyhbXCJkZWZhdWx0XCIsIFwibm9kZVwiLCAuLi52ZXJ0ZXguY2xhc3Nlc10pLFxuICAgICAgY3NzQ2xhc3NlczogXCJkZWZhdWx0IFwiICsgdmVydGV4LmNsYXNzZXMuam9pbihcIiBcIiksXG4gICAgICBzaGFwZTogZ2V0VHlwZUZyb21WZXJ0ZXgodmVydGV4KSxcbiAgICAgIGRpcjogdmVydGV4LmRpcixcbiAgICAgIGRvbUlkOiB2ZXJ0ZXguZG9tSWQsXG4gICAgICBpc0dyb3VwLFxuICAgICAgbG9vayxcbiAgICAgIGxpbms6IHZlcnRleC5saW5rLFxuICAgICAgbGlua1RhcmdldDogdmVydGV4LmxpbmtUYXJnZXQsXG4gICAgICB0b29sdGlwOiBnZXRUb29sdGlwKHZlcnRleC5pZClcbiAgICB9KTtcbiAgfVxufSwgXCJhZGROb2RlRnJvbVZlcnRleFwiKTtcbmZ1bmN0aW9uIGdldENvbXBpbGVkU3R5bGVzKGNsYXNzRGVmcykge1xuICBsZXQgY29tcGlsZWRTdHlsZXMgPSBbXTtcbiAgZm9yIChjb25zdCBjdXN0b21DbGFzcyBvZiBjbGFzc0RlZnMpIHtcbiAgICBjb25zdCBjc3NDbGFzcyA9IGNsYXNzZXMuZ2V0KGN1c3RvbUNsYXNzKTtcbiAgICBpZiAoY3NzQ2xhc3M/LnN0eWxlcykge1xuICAgICAgY29tcGlsZWRTdHlsZXMgPSBbLi4uY29tcGlsZWRTdHlsZXMsIC4uLmNzc0NsYXNzLnN0eWxlcyA/PyBbXV0ubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgfVxuICAgIGlmIChjc3NDbGFzcz8udGV4dFN0eWxlcykge1xuICAgICAgY29tcGlsZWRTdHlsZXMgPSBbLi4uY29tcGlsZWRTdHlsZXMsIC4uLmNzc0NsYXNzLnRleHRTdHlsZXMgPz8gW11dLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcGlsZWRTdHlsZXM7XG59XG5fX25hbWUoZ2V0Q29tcGlsZWRTdHlsZXMsIFwiZ2V0Q29tcGlsZWRTdHlsZXNcIik7XG52YXIgZ2V0RGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjb25zdCBjb25maWcyID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IG5vZGVzID0gW107XG4gIGNvbnN0IGVkZ2VzMiA9IFtdO1xuICBjb25zdCBzdWJHcmFwaHMyID0gZ2V0U3ViR3JhcGhzKCk7XG4gIGNvbnN0IHBhcmVudERCID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qgc3ViR3JhcGhEQiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGZvciAobGV0IGkgPSBzdWJHcmFwaHMyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3Qgc3ViR3JhcGggPSBzdWJHcmFwaHMyW2ldO1xuICAgIGlmIChzdWJHcmFwaC5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBzdWJHcmFwaERCLnNldChzdWJHcmFwaC5pZCwgdHJ1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWQgb2Ygc3ViR3JhcGgubm9kZXMpIHtcbiAgICAgIHBhcmVudERCLnNldChpZCwgc3ViR3JhcGguaWQpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gc3ViR3JhcGhzMi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IHN1YkdyYXBoID0gc3ViR3JhcGhzMltpXTtcbiAgICBub2Rlcy5wdXNoKHtcbiAgICAgIGlkOiBzdWJHcmFwaC5pZCxcbiAgICAgIGxhYmVsOiBzdWJHcmFwaC50aXRsZSxcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBwYXJlbnRJZDogcGFyZW50REIuZ2V0KHN1YkdyYXBoLmlkKSxcbiAgICAgIHBhZGRpbmc6IDgsXG4gICAgICBjc3NDb21waWxlZFN0eWxlczogZ2V0Q29tcGlsZWRTdHlsZXMoc3ViR3JhcGguY2xhc3NlcyksXG4gICAgICBjc3NDbGFzc2VzOiBzdWJHcmFwaC5jbGFzc2VzLmpvaW4oXCIgXCIpLFxuICAgICAgc2hhcGU6IFwicmVjdFwiLFxuICAgICAgZGlyOiBzdWJHcmFwaC5kaXIsXG4gICAgICBpc0dyb3VwOiB0cnVlLFxuICAgICAgbG9vazogY29uZmlnMi5sb29rXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbiA9IGdldFZlcnRpY2VzKCk7XG4gIG4uZm9yRWFjaCgodmVydGV4KSA9PiB7XG4gICAgYWRkTm9kZUZyb21WZXJ0ZXgodmVydGV4LCBub2RlcywgcGFyZW50REIsIHN1YkdyYXBoREIsIGNvbmZpZzIsIGNvbmZpZzIubG9vayB8fCBcImNsYXNzaWNcIik7XG4gIH0pO1xuICBjb25zdCBlID0gZ2V0RWRnZXMoKTtcbiAgZS5mb3JFYWNoKChyYXdFZGdlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgYXJyb3dUeXBlU3RhcnQsIGFycm93VHlwZUVuZCB9ID0gZGVzdHJ1Y3RFZGdlVHlwZShyYXdFZGdlLnR5cGUpO1xuICAgIGNvbnN0IHN0eWxlcyA9IFsuLi5lLmRlZmF1bHRTdHlsZSA/PyBbXV07XG4gICAgaWYgKHJhd0VkZ2Uuc3R5bGUpIHtcbiAgICAgIHN0eWxlcy5wdXNoKC4uLnJhd0VkZ2Uuc3R5bGUpO1xuICAgIH1cbiAgICBjb25zdCBlZGdlID0ge1xuICAgICAgaWQ6IGdldEVkZ2VJZChyYXdFZGdlLnN0YXJ0LCByYXdFZGdlLmVuZCwgeyBjb3VudGVyOiBpbmRleCwgcHJlZml4OiBcIkxcIiB9KSxcbiAgICAgIHN0YXJ0OiByYXdFZGdlLnN0YXJ0LFxuICAgICAgZW5kOiByYXdFZGdlLmVuZCxcbiAgICAgIHR5cGU6IHJhd0VkZ2UudHlwZSA/PyBcIm5vcm1hbFwiLFxuICAgICAgbGFiZWw6IHJhd0VkZ2UudGV4dCxcbiAgICAgIGxhYmVscG9zOiBcImNcIixcbiAgICAgIHRoaWNrbmVzczogcmF3RWRnZS5zdHJva2UsXG4gICAgICBtaW5sZW46IHJhd0VkZ2UubGVuZ3RoLFxuICAgICAgY2xhc3NlczogcmF3RWRnZT8uc3Ryb2tlID09PSBcImludmlzaWJsZVwiID8gXCJcIiA6IFwiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGlua1wiLFxuICAgICAgYXJyb3dUeXBlU3RhcnQ6IHJhd0VkZ2U/LnN0cm9rZSA9PT0gXCJpbnZpc2libGVcIiA/IFwibm9uZVwiIDogYXJyb3dUeXBlU3RhcnQsXG4gICAgICBhcnJvd1R5cGVFbmQ6IHJhd0VkZ2U/LnN0cm9rZSA9PT0gXCJpbnZpc2libGVcIiA/IFwibm9uZVwiIDogYXJyb3dUeXBlRW5kLFxuICAgICAgYXJyb3doZWFkU3R5bGU6IFwiZmlsbDogIzMzM1wiLFxuICAgICAgbGFiZWxTdHlsZTogc3R5bGVzLFxuICAgICAgc3R5bGU6IHN0eWxlcyxcbiAgICAgIHBhdHRlcm46IHJhd0VkZ2Uuc3Ryb2tlLFxuICAgICAgbG9vazogY29uZmlnMi5sb29rXG4gICAgfTtcbiAgICBlZGdlczIucHVzaChlZGdlKTtcbiAgfSk7XG4gIHJldHVybiB7IG5vZGVzLCBlZGdlczogZWRnZXMyLCBvdGhlcjoge30sIGNvbmZpZzogY29uZmlnMiB9O1xufSwgXCJnZXREYXRhXCIpO1xudmFyIGZsb3dEYl9kZWZhdWx0ID0ge1xuICBkZWZhdWx0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGRlZmF1bHRDb25maWcuZmxvd2NoYXJ0LCBcImRlZmF1bHRDb25maWdcIiksXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldERhdGEsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRWZXJ0ZXgsXG4gIGxvb2tVcERvbUlkLFxuICBhZGRMaW5rLFxuICB1cGRhdGVMaW5rSW50ZXJwb2xhdGUsXG4gIHVwZGF0ZUxpbmssXG4gIGFkZENsYXNzLFxuICBzZXREaXJlY3Rpb24sXG4gIHNldENsYXNzLFxuICBzZXRUb29sdGlwLFxuICBnZXRUb29sdGlwLFxuICBzZXRDbGlja0V2ZW50LFxuICBzZXRMaW5rLFxuICBiaW5kRnVuY3Rpb25zLFxuICBnZXREaXJlY3Rpb24sXG4gIGdldFZlcnRpY2VzLFxuICBnZXRFZGdlcyxcbiAgZ2V0Q2xhc3NlcyxcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0R2VuLFxuICBkZWZhdWx0U3R5bGUsXG4gIGFkZFN1YkdyYXBoLFxuICBnZXREZXB0aEZpcnN0UG9zLFxuICBpbmRleE5vZGVzLFxuICBnZXRTdWJHcmFwaHMsXG4gIGRlc3RydWN0TGluayxcbiAgbGV4LFxuICBleGlzdHMsXG4gIG1ha2VVbmlxLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9mbG93UmVuZGVyZXItdjMtdW5pZmllZC50c1xuaW1wb3J0IHsgc2VsZWN0IGFzIHNlbGVjdDIgfSBmcm9tIFwiZDNcIjtcbnZhciBnZXRDbGFzc2VzMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgZGlhZ3JhbU9iaikge1xuICByZXR1cm4gZGlhZ3JhbU9iai5kYi5nZXRDbGFzc2VzKCk7XG59LCBcImdldENsYXNzZXNcIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24odGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnKSB7XG4gIGxvZy5pbmZvKFwiUkVGMDpcIik7XG4gIGxvZy5pbmZvKFwiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MilcIiwgaWQpO1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIGZsb3djaGFydDogY29uZiwgbGF5b3V0IH0gPSBnZXRDb25maWcoKTtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdDIoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgbG9nLmRlYnVnKFwiQmVmb3JlIGdldERhdGE6IFwiKTtcbiAgY29uc3QgZGF0YTRMYXlvdXQgPSBkaWFnLmRiLmdldERhdGEoKTtcbiAgbG9nLmRlYnVnKFwiRGF0YTogXCIsIGRhdGE0TGF5b3V0KTtcbiAgY29uc3Qgc3ZnID0gZ2V0RGlhZ3JhbUVsZW1lbnQoaWQsIHNlY3VyaXR5TGV2ZWwpO1xuICBjb25zdCBkaXJlY3Rpb24yID0gZ2V0RGlyZWN0aW9uKCk7XG4gIGRhdGE0TGF5b3V0LnR5cGUgPSBkaWFnLnR5cGU7XG4gIGRhdGE0TGF5b3V0LmxheW91dEFsZ29yaXRobSA9IGdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG0obGF5b3V0KTtcbiAgaWYgKGRhdGE0TGF5b3V0LmxheW91dEFsZ29yaXRobSA9PT0gXCJkYWdyZVwiICYmIGxheW91dCA9PT0gXCJlbGtcIikge1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJmbG93Y2hhcnQtZWxrIHdhcyBtb3ZlZCB0byBhbiBleHRlcm5hbCBwYWNrYWdlIGluIE1lcm1haWQgdjExLiBQbGVhc2UgcmVmZXIgW3JlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tZXJtYWlkLWpzL21lcm1haWQvcmVsZWFzZXMvdGFnL3YxMS4wLjApIGZvciBtb3JlIGRldGFpbHMuIFRoaXMgZGlhZ3JhbSB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGBkYWdyZWAgbGF5b3V0IGFzIGEgZmFsbGJhY2suXCJcbiAgICApO1xuICB9XG4gIGRhdGE0TGF5b3V0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjI7XG4gIGRhdGE0TGF5b3V0Lm5vZGVTcGFjaW5nID0gY29uZj8ubm9kZVNwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0LnJhbmtTcGFjaW5nID0gY29uZj8ucmFua1NwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0Lm1hcmtlcnMgPSBbXCJwb2ludFwiLCBcImNpcmNsZVwiLCBcImNyb3NzXCJdO1xuICBkYXRhNExheW91dC5kaWFncmFtSWQgPSBpZDtcbiAgbG9nLmRlYnVnKFwiUkVGMTpcIiwgZGF0YTRMYXlvdXQpO1xuICBhd2FpdCByZW5kZXIoZGF0YTRMYXlvdXQsIHN2Zyk7XG4gIGNvbnN0IHBhZGRpbmcgPSBkYXRhNExheW91dC5jb25maWcuZmxvd2NoYXJ0Py5kaWFncmFtUGFkZGluZyA/PyA4O1xuICB1dGlsc19kZWZhdWx0Lmluc2VydFRpdGxlKFxuICAgIHN2ZyxcbiAgICBcImZsb3djaGFydFRpdGxlVGV4dFwiLFxuICAgIGNvbmY/LnRpdGxlVG9wTWFyZ2luIHx8IDAsXG4gICAgZGlhZy5kYi5nZXREaWFncmFtVGl0bGUoKVxuICApO1xuICBzZXR1cFZpZXdQb3J0Rm9yU1ZHKHN2ZywgcGFkZGluZywgXCJmbG93Y2hhcnRcIiwgY29uZj8udXNlTWF4V2lkdGggfHwgZmFsc2UpO1xuICBmb3IgKGNvbnN0IHZlcnRleCBvZiBkYXRhNExheW91dC5ub2Rlcykge1xuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3QyKGAjJHtpZH0gW2lkPVwiJHt2ZXJ0ZXguaWR9XCJdYCk7XG4gICAgaWYgKCFub2RlIHx8ICF2ZXJ0ZXgubGluaykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJhXCIpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImNsYXNzXCIsIHZlcnRleC5jc3NDbGFzc2VzKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJyZWxcIiwgXCJub29wZW5lclwiKTtcbiAgICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRhcmdldFwiLCBcIl90b3BcIik7XG4gICAgfSBlbHNlIGlmICh2ZXJ0ZXgubGlua1RhcmdldCkge1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGFyZ2V0XCIsIHZlcnRleC5saW5rVGFyZ2V0KTtcbiAgICB9XG4gICAgY29uc3QgbGlua05vZGUgPSBub2RlLmluc2VydChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBsaW5rO1xuICAgIH0sIFwiOmZpcnN0LWNoaWxkXCIpO1xuICAgIGNvbnN0IHNoYXBlID0gbm9kZS5zZWxlY3QoXCIubGFiZWwtY29udGFpbmVyXCIpO1xuICAgIGlmIChzaGFwZSkge1xuICAgICAgbGlua05vZGUuYXBwZW5kKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2hhcGUubm9kZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gbm9kZS5zZWxlY3QoXCIubGFiZWxcIik7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBsaW5rTm9kZS5hcHBlbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsYWJlbC5ub2RlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0sIFwiZHJhd1wiKTtcbnZhciBmbG93UmVuZGVyZXJfdjNfdW5pZmllZF9kZWZhdWx0ID0ge1xuICBnZXRDbGFzc2VzOiBnZXRDbGFzc2VzMixcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9wYXJzZXIvZmxvdy5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzEsIDRdLCAkVjEgPSBbMSwgM10sICRWMiA9IFsxLCA1XSwgJFYzID0gWzEsIDgsIDksIDEwLCAxMSwgMjcsIDM0LCAzNiwgMzgsIDQyLCA1OCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExMywgMTE4LCAxMTksIDEyMCwgMTIxXSwgJFY0ID0gWzIsIDJdLCAkVjUgPSBbMSwgMTNdLCAkVjYgPSBbMSwgMTRdLCAkVjcgPSBbMSwgMTVdLCAkVjggPSBbMSwgMTZdLCAkVjkgPSBbMSwgMjNdLCAkVmEgPSBbMSwgMjVdLCAkVmIgPSBbMSwgMjZdLCAkVmMgPSBbMSwgMjddLCAkVmQgPSBbMSwgNDldLCAkVmUgPSBbMSwgNDhdLCAkVmYgPSBbMSwgMjldLCAkVmcgPSBbMSwgMzBdLCAkVmggPSBbMSwgMzFdLCAkVmkgPSBbMSwgMzJdLCAkVmogPSBbMSwgMzNdLCAkVmsgPSBbMSwgNDRdLCAkVmwgPSBbMSwgNDZdLCAkVm0gPSBbMSwgNDJdLCAkVm4gPSBbMSwgNDddLCAkVm8gPSBbMSwgNDNdLCAkVnAgPSBbMSwgNTBdLCAkVnEgPSBbMSwgNDVdLCAkVnIgPSBbMSwgNTFdLCAkVnMgPSBbMSwgNTJdLCAkVnQgPSBbMSwgMzRdLCAkVnUgPSBbMSwgMzVdLCAkVnYgPSBbMSwgMzZdLCAkVncgPSBbMSwgMzddLCAkVnggPSBbMSwgNTddLCAkVnkgPSBbMSwgOCwgOSwgMTAsIDExLCAyNywgMzIsIDM0LCAzNiwgMzgsIDQyLCA1OCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExMywgMTE4LCAxMTksIDEyMCwgMTIxXSwgJFZ6ID0gWzEsIDYxXSwgJFZBID0gWzEsIDYwXSwgJFZCID0gWzEsIDYyXSwgJFZDID0gWzgsIDksIDExLCA3MywgNzVdLCAkVkQgPSBbMSwgODhdLCAkVkUgPSBbMSwgOTNdLCAkVkYgPSBbMSwgOTJdLCAkVkcgPSBbMSwgODldLCAkVkggPSBbMSwgODVdLCAkVkkgPSBbMSwgOTFdLCAkVkogPSBbMSwgODddLCAkVksgPSBbMSwgOTRdLCAkVkwgPSBbMSwgOTBdLCAkVk0gPSBbMSwgOTVdLCAkVk4gPSBbMSwgODZdLCAkVk8gPSBbOCwgOSwgMTAsIDExLCA3MywgNzVdLCAkVlAgPSBbOCwgOSwgMTAsIDExLCA0NCwgNzMsIDc1XSwgJFZRID0gWzgsIDksIDEwLCAxMSwgMjksIDQyLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDU0LCA1NiwgNTgsIDYxLCA2MywgNjUsIDY2LCA2OCwgNzMsIDc1LCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExM10sICRWUiA9IFs4LCA5LCAxMSwgNDIsIDU4LCA3MywgNzUsIDg2LCA5OSwgMTAyLCAxMDMsIDEwNiwgMTA4LCAxMTEsIDExMiwgMTEzXSwgJFZTID0gWzQyLCA1OCwgODYsIDk5LCAxMDIsIDEwMywgMTA2LCAxMDgsIDExMSwgMTEyLCAxMTNdLCAkVlQgPSBbMSwgMTIxXSwgJFZVID0gWzEsIDEyMF0sICRWViA9IFsxLCAxMjhdLCAkVlcgPSBbMSwgMTQyXSwgJFZYID0gWzEsIDE0M10sICRWWSA9IFsxLCAxNDRdLCAkVlogPSBbMSwgMTQ1XSwgJFZfID0gWzEsIDEzMF0sICRWJCA9IFsxLCAxMzJdLCAkVjAxID0gWzEsIDEzNl0sICRWMTEgPSBbMSwgMTM3XSwgJFYyMSA9IFsxLCAxMzhdLCAkVjMxID0gWzEsIDEzOV0sICRWNDEgPSBbMSwgMTQwXSwgJFY1MSA9IFsxLCAxNDFdLCAkVjYxID0gWzEsIDE0Nl0sICRWNzEgPSBbMSwgMTQ3XSwgJFY4MSA9IFsxLCAxMjZdLCAkVjkxID0gWzEsIDEyN10sICRWYTEgPSBbMSwgMTM0XSwgJFZiMSA9IFsxLCAxMjldLCAkVmMxID0gWzEsIDEzM10sICRWZDEgPSBbMSwgMTMxXSwgJFZlMSA9IFs4LCA5LCAxMCwgMTEsIDI3LCAzMiwgMzQsIDM2LCAzOCwgNDIsIDU4LCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA5OSwgMTAyLCAxMDMsIDEwNiwgMTA4LCAxMTEsIDExMiwgMTEzLCAxMTgsIDExOSwgMTIwLCAxMjFdLCAkVmYxID0gWzEsIDE0OV0sICRWZzEgPSBbOCwgOSwgMTFdLCAkVmgxID0gWzgsIDksIDEwLCAxMSwgMTQsIDQyLCA1OCwgODYsIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExM10sICRWaTEgPSBbMSwgMTY5XSwgJFZqMSA9IFsxLCAxNjVdLCAkVmsxID0gWzEsIDE2Nl0sICRWbDEgPSBbMSwgMTcwXSwgJFZtMSA9IFsxLCAxNjddLCAkVm4xID0gWzEsIDE2OF0sICRWbzEgPSBbNzUsIDExMywgMTE2XSwgJFZwMSA9IFs4LCA5LCAxMCwgMTEsIDEyLCAxNCwgMjcsIDI5LCAzMiwgNDIsIDU4LCA3MywgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDEwMiwgMTA2LCAxMDgsIDExMSwgMTEyLCAxMTNdLCAkVnExID0gWzEwLCAxMDNdLCAkVnIxID0gWzMxLCA0NywgNDksIDUxLCA1MywgNTUsIDYwLCA2MiwgNjQsIDY1LCA2NywgNjksIDExMywgMTE0LCAxMTVdLCAkVnMxID0gWzEsIDIzNV0sICRWdDEgPSBbMSwgMjMzXSwgJFZ1MSA9IFsxLCAyMzddLCAkVnYxID0gWzEsIDIzMV0sICRWdzEgPSBbMSwgMjMyXSwgJFZ4MSA9IFsxLCAyMzRdLCAkVnkxID0gWzEsIDIzNl0sICRWejEgPSBbMSwgMjM4XSwgJFZBMSA9IFsxLCAyNTVdLCAkVkIxID0gWzgsIDksIDExLCAxMDNdLCAkVkMxID0gWzgsIDksIDEwLCAxMSwgNTgsIDgxLCAxMDIsIDEwMywgMTA2LCAxMDcsIDEwOCwgMTA5XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiZ3JhcGhDb25maWdcIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcImxpbmVcIjogNiwgXCJzdGF0ZW1lbnRcIjogNywgXCJTRU1JXCI6IDgsIFwiTkVXTElORVwiOiA5LCBcIlNQQUNFXCI6IDEwLCBcIkVPRlwiOiAxMSwgXCJHUkFQSFwiOiAxMiwgXCJOT0RJUlwiOiAxMywgXCJESVJcIjogMTQsIFwiRmlyc3RTdG10U2VwYXJhdG9yXCI6IDE1LCBcImVuZGluZ1wiOiAxNiwgXCJlbmRUb2tlblwiOiAxNywgXCJzcGFjZUxpc3RcIjogMTgsIFwic3BhY2VMaXN0TmV3bGluZVwiOiAxOSwgXCJ2ZXJ0ZXhTdGF0ZW1lbnRcIjogMjAsIFwic2VwYXJhdG9yXCI6IDIxLCBcInN0eWxlU3RhdGVtZW50XCI6IDIyLCBcImxpbmtTdHlsZVN0YXRlbWVudFwiOiAyMywgXCJjbGFzc0RlZlN0YXRlbWVudFwiOiAyNCwgXCJjbGFzc1N0YXRlbWVudFwiOiAyNSwgXCJjbGlja1N0YXRlbWVudFwiOiAyNiwgXCJzdWJncmFwaFwiOiAyNywgXCJ0ZXh0Tm9UYWdzXCI6IDI4LCBcIlNRU1wiOiAyOSwgXCJ0ZXh0XCI6IDMwLCBcIlNRRVwiOiAzMSwgXCJlbmRcIjogMzIsIFwiZGlyZWN0aW9uXCI6IDMzLCBcImFjY190aXRsZVwiOiAzNCwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzUsIFwiYWNjX2Rlc2NyXCI6IDM2LCBcImFjY19kZXNjcl92YWx1ZVwiOiAzNywgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDM4LCBcImxpbmtcIjogMzksIFwibm9kZVwiOiA0MCwgXCJzdHlsZWRWZXJ0ZXhcIjogNDEsIFwiQU1QXCI6IDQyLCBcInZlcnRleFwiOiA0MywgXCJTVFlMRV9TRVBBUkFUT1JcIjogNDQsIFwiaWRTdHJpbmdcIjogNDUsIFwiRE9VQkxFQ0lSQ0xFU1RBUlRcIjogNDYsIFwiRE9VQkxFQ0lSQ0xFRU5EXCI6IDQ3LCBcIlBTXCI6IDQ4LCBcIlBFXCI6IDQ5LCBcIigtXCI6IDUwLCBcIi0pXCI6IDUxLCBcIlNUQURJVU1TVEFSVFwiOiA1MiwgXCJTVEFESVVNRU5EXCI6IDUzLCBcIlNVQlJPVVRJTkVTVEFSVFwiOiA1NCwgXCJTVUJST1VUSU5FRU5EXCI6IDU1LCBcIlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUXCI6IDU2LCBcIk5PREVfU1RSSU5HW2ZpZWxkXVwiOiA1NywgXCJDT0xPTlwiOiA1OCwgXCJOT0RFX1NUUklOR1t2YWx1ZV1cIjogNTksIFwiUElQRVwiOiA2MCwgXCJDWUxJTkRFUlNUQVJUXCI6IDYxLCBcIkNZTElOREVSRU5EXCI6IDYyLCBcIkRJQU1PTkRfU1RBUlRcIjogNjMsIFwiRElBTU9ORF9TVE9QXCI6IDY0LCBcIlRBR0VORFwiOiA2NSwgXCJUUkFQU1RBUlRcIjogNjYsIFwiVFJBUEVORFwiOiA2NywgXCJJTlZUUkFQU1RBUlRcIjogNjgsIFwiSU5WVFJBUEVORFwiOiA2OSwgXCJsaW5rU3RhdGVtZW50XCI6IDcwLCBcImFycm93VGV4dFwiOiA3MSwgXCJURVNUU1RSXCI6IDcyLCBcIlNUQVJUX0xJTktcIjogNzMsIFwiZWRnZVRleHRcIjogNzQsIFwiTElOS1wiOiA3NSwgXCJlZGdlVGV4dFRva2VuXCI6IDc2LCBcIlNUUlwiOiA3NywgXCJNRF9TVFJcIjogNzgsIFwidGV4dFRva2VuXCI6IDc5LCBcImtleXdvcmRzXCI6IDgwLCBcIlNUWUxFXCI6IDgxLCBcIkxJTktTVFlMRVwiOiA4MiwgXCJDTEFTU0RFRlwiOiA4MywgXCJDTEFTU1wiOiA4NCwgXCJDTElDS1wiOiA4NSwgXCJET1dOXCI6IDg2LCBcIlVQXCI6IDg3LCBcInRleHROb1RhZ3NUb2tlblwiOiA4OCwgXCJzdHlsZXNPcHRcIjogODksIFwiaWRTdHJpbmdbdmVydGV4XVwiOiA5MCwgXCJpZFN0cmluZ1tjbGFzc11cIjogOTEsIFwiQ0FMTEJBQ0tOQU1FXCI6IDkyLCBcIkNBTExCQUNLQVJHU1wiOiA5MywgXCJIUkVGXCI6IDk0LCBcIkxJTktfVEFSR0VUXCI6IDk1LCBcIlNUUltsaW5rXVwiOiA5NiwgXCJTVFJbdG9vbHRpcF1cIjogOTcsIFwiYWxwaGFOdW1cIjogOTgsIFwiREVGQVVMVFwiOiA5OSwgXCJudW1MaXN0XCI6IDEwMCwgXCJJTlRFUlBPTEFURVwiOiAxMDEsIFwiTlVNXCI6IDEwMiwgXCJDT01NQVwiOiAxMDMsIFwic3R5bGVcIjogMTA0LCBcInN0eWxlQ29tcG9uZW50XCI6IDEwNSwgXCJOT0RFX1NUUklOR1wiOiAxMDYsIFwiVU5JVFwiOiAxMDcsIFwiQlJLVFwiOiAxMDgsIFwiUENUXCI6IDEwOSwgXCJpZFN0cmluZ1Rva2VuXCI6IDExMCwgXCJNSU5VU1wiOiAxMTEsIFwiTVVMVFwiOiAxMTIsIFwiVU5JQ09ERV9URVhUXCI6IDExMywgXCJURVhUXCI6IDExNCwgXCJUQUdTVEFSVFwiOiAxMTUsIFwiRURHRV9URVhUXCI6IDExNiwgXCJhbHBoYU51bVRva2VuXCI6IDExNywgXCJkaXJlY3Rpb25fdGJcIjogMTE4LCBcImRpcmVjdGlvbl9idFwiOiAxMTksIFwiZGlyZWN0aW9uX3JsXCI6IDEyMCwgXCJkaXJlY3Rpb25fbHJcIjogMTIxLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgODogXCJTRU1JXCIsIDk6IFwiTkVXTElORVwiLCAxMDogXCJTUEFDRVwiLCAxMTogXCJFT0ZcIiwgMTI6IFwiR1JBUEhcIiwgMTM6IFwiTk9ESVJcIiwgMTQ6IFwiRElSXCIsIDI3OiBcInN1YmdyYXBoXCIsIDI5OiBcIlNRU1wiLCAzMTogXCJTUUVcIiwgMzI6IFwiZW5kXCIsIDM0OiBcImFjY190aXRsZVwiLCAzNTogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzY6IFwiYWNjX2Rlc2NyXCIsIDM3OiBcImFjY19kZXNjcl92YWx1ZVwiLCAzODogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDQyOiBcIkFNUFwiLCA0NDogXCJTVFlMRV9TRVBBUkFUT1JcIiwgNDY6IFwiRE9VQkxFQ0lSQ0xFU1RBUlRcIiwgNDc6IFwiRE9VQkxFQ0lSQ0xFRU5EXCIsIDQ4OiBcIlBTXCIsIDQ5OiBcIlBFXCIsIDUwOiBcIigtXCIsIDUxOiBcIi0pXCIsIDUyOiBcIlNUQURJVU1TVEFSVFwiLCA1MzogXCJTVEFESVVNRU5EXCIsIDU0OiBcIlNVQlJPVVRJTkVTVEFSVFwiLCA1NTogXCJTVUJST1VUSU5FRU5EXCIsIDU2OiBcIlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUXCIsIDU3OiBcIk5PREVfU1RSSU5HW2ZpZWxkXVwiLCA1ODogXCJDT0xPTlwiLCA1OTogXCJOT0RFX1NUUklOR1t2YWx1ZV1cIiwgNjA6IFwiUElQRVwiLCA2MTogXCJDWUxJTkRFUlNUQVJUXCIsIDYyOiBcIkNZTElOREVSRU5EXCIsIDYzOiBcIkRJQU1PTkRfU1RBUlRcIiwgNjQ6IFwiRElBTU9ORF9TVE9QXCIsIDY1OiBcIlRBR0VORFwiLCA2NjogXCJUUkFQU1RBUlRcIiwgNjc6IFwiVFJBUEVORFwiLCA2ODogXCJJTlZUUkFQU1RBUlRcIiwgNjk6IFwiSU5WVFJBUEVORFwiLCA3MjogXCJURVNUU1RSXCIsIDczOiBcIlNUQVJUX0xJTktcIiwgNzU6IFwiTElOS1wiLCA3NzogXCJTVFJcIiwgNzg6IFwiTURfU1RSXCIsIDgxOiBcIlNUWUxFXCIsIDgyOiBcIkxJTktTVFlMRVwiLCA4MzogXCJDTEFTU0RFRlwiLCA4NDogXCJDTEFTU1wiLCA4NTogXCJDTElDS1wiLCA4NjogXCJET1dOXCIsIDg3OiBcIlVQXCIsIDkwOiBcImlkU3RyaW5nW3ZlcnRleF1cIiwgOTE6IFwiaWRTdHJpbmdbY2xhc3NdXCIsIDkyOiBcIkNBTExCQUNLTkFNRVwiLCA5MzogXCJDQUxMQkFDS0FSR1NcIiwgOTQ6IFwiSFJFRlwiLCA5NTogXCJMSU5LX1RBUkdFVFwiLCA5NjogXCJTVFJbbGlua11cIiwgOTc6IFwiU1RSW3Rvb2x0aXBdXCIsIDk5OiBcIkRFRkFVTFRcIiwgMTAxOiBcIklOVEVSUE9MQVRFXCIsIDEwMjogXCJOVU1cIiwgMTAzOiBcIkNPTU1BXCIsIDEwNjogXCJOT0RFX1NUUklOR1wiLCAxMDc6IFwiVU5JVFwiLCAxMDg6IFwiQlJLVFwiLCAxMDk6IFwiUENUXCIsIDExMTogXCJNSU5VU1wiLCAxMTI6IFwiTVVMVFwiLCAxMTM6IFwiVU5JQ09ERV9URVhUXCIsIDExNDogXCJURVhUXCIsIDExNTogXCJUQUdTVEFSVFwiLCAxMTY6IFwiRURHRV9URVhUXCIsIDExODogXCJkaXJlY3Rpb25fdGJcIiwgMTE5OiBcImRpcmVjdGlvbl9idFwiLCAxMjA6IFwiZGlyZWN0aW9uX3JsXCIsIDEyMTogXCJkaXJlY3Rpb25fbHJcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzUsIDBdLCBbNSwgMl0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgM10sIFsxNiwgMl0sIFsxNiwgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNSwgMV0sIFsxNSwgMV0sIFsxNSwgMl0sIFsxOSwgMl0sIFsxOSwgMl0sIFsxOSwgMV0sIFsxOSwgMV0sIFsxOCwgMl0sIFsxOCwgMV0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFs3LCA5XSwgWzcsIDZdLCBbNywgNF0sIFs3LCAxXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAxXSwgWzIxLCAxXSwgWzIxLCAxXSwgWzIxLCAxXSwgWzIwLCAzXSwgWzIwLCA0XSwgWzIwLCAyXSwgWzIwLCAxXSwgWzQwLCAxXSwgWzQwLCA1XSwgWzQxLCAxXSwgWzQxLCAzXSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA2XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA4XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA2XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCA0XSwgWzQzLCAxXSwgWzM5LCAyXSwgWzM5LCAzXSwgWzM5LCAzXSwgWzM5LCAxXSwgWzM5LCAzXSwgWzc0LCAxXSwgWzc0LCAyXSwgWzc0LCAxXSwgWzc0LCAxXSwgWzcwLCAxXSwgWzcxLCAzXSwgWzMwLCAxXSwgWzMwLCAyXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzgwLCAxXSwgWzI4LCAxXSwgWzI4LCAyXSwgWzI4LCAxXSwgWzI4LCAxXSwgWzI0LCA1XSwgWzI1LCA1XSwgWzI2LCAyXSwgWzI2LCA0XSwgWzI2LCAzXSwgWzI2LCA1XSwgWzI2LCAzXSwgWzI2LCA1XSwgWzI2LCA1XSwgWzI2LCA3XSwgWzI2LCAyXSwgWzI2LCA0XSwgWzI2LCAyXSwgWzI2LCA0XSwgWzI2LCA0XSwgWzI2LCA2XSwgWzIyLCA1XSwgWzIzLCA1XSwgWzIzLCA1XSwgWzIzLCA5XSwgWzIzLCA5XSwgWzIzLCA3XSwgWzIzLCA3XSwgWzEwMCwgMV0sIFsxMDAsIDNdLCBbODksIDFdLCBbODksIDNdLCBbMTA0LCAxXSwgWzEwNCwgMl0sIFsxMDUsIDFdLCBbMTA1LCAxXSwgWzEwNSwgMV0sIFsxMDUsIDFdLCBbMTA1LCAxXSwgWzEwNSwgMV0sIFsxMDUsIDFdLCBbMTA1LCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbMTEwLCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbMTEwLCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbMTEwLCAxXSwgWzExMCwgMV0sIFsxMTAsIDFdLCBbNzksIDFdLCBbNzksIDFdLCBbNzksIDFdLCBbNzksIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbODgsIDFdLCBbNzYsIDFdLCBbNzYsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFsxMTcsIDFdLCBbMTE3LCAxXSwgWzExNywgMV0sIFs0NSwgMV0sIFs0NSwgMl0sIFs5OCwgMV0sIFs5OCwgMl0sIFszMywgMV0sIFszMywgMV0sIFszMywgMV0sIFszMywgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoJCRbJDBdKSB8fCAkJFskMF0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSAxNzY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlRCXCIpO1xuICAgICAgICAgIHRoaXMuJCA9IFwiVEJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oJCRbJDAgLSAxXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdLm5vZGVzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICBjYXNlIDMwOlxuICAgICAgICBjYXNlIDMxOlxuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmFkZFN1YkdyYXBoKCQkWyQwIC0gNl0sICQkWyQwIC0gMV0sICQkWyQwIC0gNF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmFkZFN1YkdyYXBoKCQkWyQwIC0gM10sICQkWyQwIC0gMV0sICQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LmFkZFN1YkdyYXBoKHZvaWQgMCwgJCRbJDAgLSAxXSwgdm9pZCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgIHl5LmFkZExpbmsoJCRbJDAgLSAyXS5zdG10LCAkJFskMF0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogJCRbJDBdLCBub2RlczogJCRbJDBdLmNvbmNhdCgkJFskMCAtIDJdLm5vZGVzKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHl5LmFkZExpbmsoJCRbJDAgLSAzXS5zdG10LCAkJFskMCAtIDFdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6ICQkWyQwIC0gMV0sIG5vZGVzOiAkJFskMCAtIDFdLmNvbmNhdCgkJFskMCAtIDNdLm5vZGVzKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogJCRbJDAgLSAxXSwgbm9kZXM6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6ICQkWyQwXSwgbm9kZXM6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF0uY29uY2F0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xhc3MoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcInNxdWFyZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImRvdWJsZWNpcmNsZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDVdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDVdLCAkJFskMCAtIDJdLCBcImNpcmNsZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImVsbGlwc2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJzdGFkaXVtXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwic3Vicm91dGluZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDddO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDddLCAkJFskMCAtIDFdLCBcInJlY3RcIiwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgT2JqZWN0LmZyb21FbnRyaWVzKFtbJCRbJDAgLSA1XSwgJCRbJDAgLSAzXV1dKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJjeWxpbmRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcInJvdW5kXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwiZGlhbW9uZFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDVdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDVdLCAkJFskMCAtIDJdLCBcImhleGFnb25cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJvZGRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJ0cmFwZXpvaWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5hZGRWZXJ0ZXgoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgXCJpbnZfdHJhcGV6b2lkXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sIFwibGVhbl9yaWdodFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LmFkZFZlcnRleCgkJFskMCAtIDNdLCAkJFskMCAtIDFdLCBcImxlYW5fbGVmdFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgJCRbJDAgLSAxXS50ZXh0ID0gJCRbJDBdO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgIGNhc2UgNzA6XG4gICAgICAgICAgJCRbJDAgLSAyXS50ZXh0ID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICB2YXIgaW5mID0geXkuZGVzdHJ1Y3RMaW5rKCQkWyQwXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBcInR5cGVcIjogaW5mLnR5cGUsIFwic3Ryb2tlXCI6IGluZi5zdHJva2UsIFwibGVuZ3RoXCI6IGluZi5sZW5ndGgsIFwidGV4dFwiOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwidGV4dFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMCAtIDFdLnRleHQgKyBcIlwiICsgJCRbJDBdLCB0eXBlOiAkJFskMCAtIDFdLnR5cGUgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJzdHJpbmdcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcIm1hcmtkb3duXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICB2YXIgaW5mID0geXkuZGVzdHJ1Y3RMaW5rKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBcInR5cGVcIjogaW5mLnR5cGUsIFwic3Ryb2tlXCI6IGluZi5zdHJva2UsIFwibGVuZ3RoXCI6IGluZi5sZW5ndGggfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcInRleHRcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDAgLSAxXS50ZXh0ICsgXCJcIiArICQkWyQwXSwgdHlwZTogJCRbJDAgLSAxXS50eXBlIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwic3RyaW5nXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4MjpcbiAgICAgICAgY2FzZSA5NzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJtYXJrZG93blwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMF0sIHR5cGU6IFwidGV4dFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTU6XG4gICAgICAgICAgdGhpcy4kID0geyB0ZXh0OiAkJFskMCAtIDFdLnRleHQgKyBcIlwiICsgJCRbJDBdLCB0eXBlOiAkJFskMCAtIDFdLnR5cGUgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LmFkZENsYXNzKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5zZXRDbGFzcygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gNF0sICQkWyQwIC0gM10sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDRdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDZdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSA2XSwgJCRbJDAgLSA0XSwgJCRbJDBdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gNl0sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSAzXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNV07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDVdLCAkJFskMCAtIDRdLCAkJFskMF0pO1xuICAgICAgICAgIHl5LnNldFRvb2x0aXAoJCRbJDAgLSA1XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuYWRkVmVydGV4KCQkWyQwIC0gMl0sIHZvaWQgMCwgdm9pZCAwLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmsoWyQkWyQwIC0gMl1dLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmsoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA4XTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoWyQkWyQwIC0gNl1dLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rKFskJFskMCAtIDZdXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA4XTtcbiAgICAgICAgICB5eS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoJCRbJDAgLSA2XSwgJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkudXBkYXRlTGluaygkJFskMCAtIDZdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDZdO1xuICAgICAgICAgIHl5LnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbJCRbJDAgLSA0XV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNl07XG4gICAgICAgICAgeXkudXBkYXRlTGlua0ludGVycG9sYXRlKCQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIxOlxuICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjI6XG4gICAgICAgIGNhc2UgMTI0OlxuICAgICAgICAgICQkWyQwIC0gMl0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc3OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyBcIlwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3ODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlRCXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzk6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcImRpclwiLCB2YWx1ZTogXCJCVFwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTgwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJkaXJcIiwgdmFsdWU6IFwiUkxcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4MTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkxSXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgOTogJFYwLCAxMDogJFYxLCAxMjogJFYyIH0sIHsgMTogWzNdIH0sIG8oJFYzLCAkVjQsIHsgNTogNiB9KSwgeyA0OiA3LCA5OiAkVjAsIDEwOiAkVjEsIDEyOiAkVjIgfSwgeyA0OiA4LCA5OiAkVjAsIDEwOiAkVjEsIDEyOiAkVjIgfSwgeyAxMzogWzEsIDldLCAxNDogWzEsIDEwXSB9LCB7IDE6IFsyLCAxXSwgNjogMTEsIDc6IDEyLCA4OiAkVjUsIDk6ICRWNiwgMTA6ICRWNywgMTE6ICRWOCwgMjA6IDE3LCAyMjogMTgsIDIzOiAxOSwgMjQ6IDIwLCAyNTogMjEsIDI2OiAyMiwgMjc6ICRWOSwgMzM6IDI0LCAzNDogJFZhLCAzNjogJFZiLCAzODogJFZjLCA0MDogMjgsIDQxOiAzOCwgNDI6ICRWZCwgNDM6IDM5LCA0NTogNDAsIDU4OiAkVmUsIDgxOiAkVmYsIDgyOiAkVmcsIDgzOiAkVmgsIDg0OiAkVmksIDg1OiAkVmosIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTg6ICRWdCwgMTE5OiAkVnUsIDEyMDogJFZ2LCAxMjE6ICRWdyB9LCBvKCRWMywgWzIsIDldKSwgbygkVjMsIFsyLCAxMF0pLCBvKCRWMywgWzIsIDExXSksIHsgODogWzEsIDU0XSwgOTogWzEsIDU1XSwgMTA6ICRWeCwgMTU6IDUzLCAxODogNTYgfSwgbygkVnksIFsyLCAzXSksIG8oJFZ5LCBbMiwgNF0pLCBvKCRWeSwgWzIsIDVdKSwgbygkVnksIFsyLCA2XSksIG8oJFZ5LCBbMiwgN10pLCBvKCRWeSwgWzIsIDhdKSwgeyA4OiAkVnosIDk6ICRWQSwgMTE6ICRWQiwgMjE6IDU4LCAzOTogNTksIDcwOiA2MywgNzM6IFsxLCA2NF0sIDc1OiBbMSwgNjVdIH0sIHsgODogJFZ6LCA5OiAkVkEsIDExOiAkVkIsIDIxOiA2NiB9LCB7IDg6ICRWeiwgOTogJFZBLCAxMTogJFZCLCAyMTogNjcgfSwgeyA4OiAkVnosIDk6ICRWQSwgMTE6ICRWQiwgMjE6IDY4IH0sIHsgODogJFZ6LCA5OiAkVkEsIDExOiAkVkIsIDIxOiA2OSB9LCB7IDg6ICRWeiwgOTogJFZBLCAxMTogJFZCLCAyMTogNzAgfSwgeyA4OiAkVnosIDk6ICRWQSwgMTA6IFsxLCA3MV0sIDExOiAkVkIsIDIxOiA3MiB9LCBvKCRWeSwgWzIsIDM2XSksIHsgMzU6IFsxLCA3M10gfSwgeyAzNzogWzEsIDc0XSB9LCBvKCRWeSwgWzIsIDM5XSksIG8oJFZDLCBbMiwgNDZdLCB7IDE4OiA3NSwgMTA6ICRWeCB9KSwgeyAxMDogWzEsIDc2XSB9LCB7IDEwOiBbMSwgNzddIH0sIHsgMTA6IFsxLCA3OF0gfSwgeyAxMDogWzEsIDc5XSB9LCB7IDE0OiAkVkQsIDQyOiAkVkUsIDU4OiAkVkYsIDc3OiBbMSwgODNdLCA4NjogJFZHLCA5MjogWzEsIDgwXSwgOTQ6IFsxLCA4MV0sIDk4OiA4MiwgMTAyOiAkVkgsIDEwMzogJFZJLCAxMDY6ICRWSiwgMTA4OiAkVkssIDExMTogJFZMLCAxMTI6ICRWTSwgMTEzOiAkVk4sIDExNzogODQgfSwgbygkVnksIFsyLCAxNzhdKSwgbygkVnksIFsyLCAxNzldKSwgbygkVnksIFsyLCAxODBdKSwgbygkVnksIFsyLCAxODFdKSwgbygkVk8sIFsyLCA0N10pLCBvKCRWTywgWzIsIDQ5XSwgeyA0NDogWzEsIDk2XSB9KSwgbygkVlAsIFsyLCA2N10sIHsgMTEwOiAxMDksIDI5OiBbMSwgOTddLCA0MjogJFZkLCA0NjogWzEsIDk4XSwgNDg6IFsxLCA5OV0sIDUwOiBbMSwgMTAwXSwgNTI6IFsxLCAxMDFdLCA1NDogWzEsIDEwMl0sIDU2OiBbMSwgMTAzXSwgNTg6ICRWZSwgNjE6IFsxLCAxMDRdLCA2MzogWzEsIDEwNV0sIDY1OiBbMSwgMTA2XSwgNjY6IFsxLCAxMDddLCA2ODogWzEsIDEwOF0sIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0pLCBvKCRWUSwgWzIsIDE3NF0pLCBvKCRWUSwgWzIsIDEzNV0pLCBvKCRWUSwgWzIsIDEzNl0pLCBvKCRWUSwgWzIsIDEzN10pLCBvKCRWUSwgWzIsIDEzOF0pLCBvKCRWUSwgWzIsIDEzOV0pLCBvKCRWUSwgWzIsIDE0MF0pLCBvKCRWUSwgWzIsIDE0MV0pLCBvKCRWUSwgWzIsIDE0Ml0pLCBvKCRWUSwgWzIsIDE0M10pLCBvKCRWUSwgWzIsIDE0NF0pLCBvKCRWUSwgWzIsIDE0NV0pLCBvKCRWMywgWzIsIDEyXSksIG8oJFYzLCBbMiwgMThdKSwgbygkVjMsIFsyLCAxOV0pLCB7IDk6IFsxLCAxMTBdIH0sIG8oJFZSLCBbMiwgMjZdLCB7IDE4OiAxMTEsIDEwOiAkVnggfSksIG8oJFZ5LCBbMiwgMjddKSwgeyA0MDogMTEyLCA0MTogMzgsIDQyOiAkVmQsIDQzOiAzOSwgNDU6IDQwLCA1ODogJFZlLCA4NjogJFZrLCA5OTogJFZsLCAxMDI6ICRWbSwgMTAzOiAkVm4sIDEwNjogJFZvLCAxMDg6ICRWcCwgMTEwOiA0MSwgMTExOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcyB9LCBvKCRWeSwgWzIsIDQwXSksIG8oJFZ5LCBbMiwgNDFdKSwgbygkVnksIFsyLCA0Ml0pLCBvKCRWUywgWzIsIDcxXSwgeyA3MTogMTEzLCA2MDogWzEsIDExNV0sIDcyOiBbMSwgMTE0XSB9KSwgeyA3NDogMTE2LCA3NjogMTE3LCA3NzogWzEsIDExOF0sIDc4OiBbMSwgMTE5XSwgMTEzOiAkVlQsIDExNjogJFZVIH0sIG8oWzQyLCA1OCwgNjAsIDcyLCA4NiwgOTksIDEwMiwgMTAzLCAxMDYsIDEwOCwgMTExLCAxMTIsIDExM10sIFsyLCA3N10pLCBvKCRWeSwgWzIsIDI4XSksIG8oJFZ5LCBbMiwgMjldKSwgbygkVnksIFsyLCAzMF0pLCBvKCRWeSwgWzIsIDMxXSksIG8oJFZ5LCBbMiwgMzJdKSwgeyAxMDogJFZWLCAxMjogJFZXLCAxNDogJFZYLCAyNzogJFZZLCAyODogMTIyLCAzMjogJFZaLCA0MjogJFZfLCA1ODogJFYkLCA3MzogJFYwMSwgNzc6IFsxLCAxMjRdLCA3ODogWzEsIDEyNV0sIDgwOiAxMzUsIDgxOiAkVjExLCA4MjogJFYyMSwgODM6ICRWMzEsIDg0OiAkVjQxLCA4NTogJFY1MSwgODY6ICRWNjEsIDg3OiAkVjcxLCA4ODogMTIzLCAxMDI6ICRWODEsIDEwNjogJFY5MSwgMTA4OiAkVmExLCAxMTE6ICRWYjEsIDExMjogJFZjMSwgMTEzOiAkVmQxIH0sIG8oJFZlMSwgJFY0LCB7IDU6IDE0OCB9KSwgbygkVnksIFsyLCAzN10pLCBvKCRWeSwgWzIsIDM4XSksIG8oJFZDLCBbMiwgNDVdLCB7IDQyOiAkVmYxIH0pLCB7IDQyOiAkVmQsIDQ1OiAxNTAsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIHsgOTk6IFsxLCAxNTFdLCAxMDA6IDE1MiwgMTAyOiBbMSwgMTUzXSB9LCB7IDQyOiAkVmQsIDQ1OiAxNTQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIHsgNDI6ICRWZCwgNDU6IDE1NSwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMgfSwgbygkVmcxLCBbMiwgMTAwXSwgeyAxMDogWzEsIDE1Nl0sIDkzOiBbMSwgMTU3XSB9KSwgeyA3NzogWzEsIDE1OF0gfSwgbygkVmcxLCBbMiwgMTA4XSwgeyAxMTc6IDE2MCwgMTA6IFsxLCAxNTldLCAxNDogJFZELCA0MjogJFZFLCA1ODogJFZGLCA4NjogJFZHLCAxMDI6ICRWSCwgMTAzOiAkVkksIDEwNjogJFZKLCAxMDg6ICRWSywgMTExOiAkVkwsIDExMjogJFZNLCAxMTM6ICRWTiB9KSwgbygkVmcxLCBbMiwgMTEwXSwgeyAxMDogWzEsIDE2MV0gfSksIG8oJFZoMSwgWzIsIDE3Nl0pLCBvKCRWaDEsIFsyLCAxNjNdKSwgbygkVmgxLCBbMiwgMTY0XSksIG8oJFZoMSwgWzIsIDE2NV0pLCBvKCRWaDEsIFsyLCAxNjZdKSwgbygkVmgxLCBbMiwgMTY3XSksIG8oJFZoMSwgWzIsIDE2OF0pLCBvKCRWaDEsIFsyLCAxNjldKSwgbygkVmgxLCBbMiwgMTcwXSksIG8oJFZoMSwgWzIsIDE3MV0pLCBvKCRWaDEsIFsyLCAxNzJdKSwgbygkVmgxLCBbMiwgMTczXSksIHsgNDI6ICRWZCwgNDU6IDE2MiwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMgfSwgeyAzMDogMTYzLCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE3MSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAxNzMsIDQ4OiBbMSwgMTcyXSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAxNzQsIDY1OiAkVmkxLCA3NzogJFZqMSwgNzg6ICRWazEsIDc5OiAxNjQsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyAzMDogMTc1LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE3NiwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDEwNjogWzEsIDE3N10gfSwgeyAzMDogMTc4LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE3OSwgNjM6IFsxLCAxODBdLCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzA6IDE4MSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAxODIsIDY1OiAkVmkxLCA3NzogJFZqMSwgNzg6ICRWazEsIDc5OiAxNjQsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyAzMDogMTgzLCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIG8oJFZRLCBbMiwgMTc1XSksIG8oJFYzLCBbMiwgMjBdKSwgbygkVlIsIFsyLCAyNV0pLCBvKCRWQywgWzIsIDQzXSwgeyAxODogMTg0LCAxMDogJFZ4IH0pLCBvKCRWUywgWzIsIDY4XSwgeyAxMDogWzEsIDE4NV0gfSksIHsgMTA6IFsxLCAxODZdIH0sIHsgMzA6IDE4NywgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDc1OiBbMSwgMTg4XSwgNzY6IDE4OSwgMTEzOiAkVlQsIDExNjogJFZVIH0sIG8oJFZvMSwgWzIsIDczXSksIG8oJFZvMSwgWzIsIDc1XSksIG8oJFZvMSwgWzIsIDc2XSksIG8oJFZvMSwgWzIsIDE2MV0pLCBvKCRWbzEsIFsyLCAxNjJdKSwgeyA4OiAkVnosIDk6ICRWQSwgMTA6ICRWViwgMTE6ICRWQiwgMTI6ICRWVywgMTQ6ICRWWCwgMjE6IDE5MSwgMjc6ICRWWSwgMjk6IFsxLCAxOTBdLCAzMjogJFZaLCA0MjogJFZfLCA1ODogJFYkLCA3MzogJFYwMSwgODA6IDEzNSwgODE6ICRWMTEsIDgyOiAkVjIxLCA4MzogJFYzMSwgODQ6ICRWNDEsIDg1OiAkVjUxLCA4NjogJFY2MSwgODc6ICRWNzEsIDg4OiAxOTIsIDEwMjogJFY4MSwgMTA2OiAkVjkxLCAxMDg6ICRWYTEsIDExMTogJFZiMSwgMTEyOiAkVmMxLCAxMTM6ICRWZDEgfSwgbygkVnAxLCBbMiwgOTRdKSwgbygkVnAxLCBbMiwgOTZdKSwgbygkVnAxLCBbMiwgOTddKSwgbygkVnAxLCBbMiwgMTUwXSksIG8oJFZwMSwgWzIsIDE1MV0pLCBvKCRWcDEsIFsyLCAxNTJdKSwgbygkVnAxLCBbMiwgMTUzXSksIG8oJFZwMSwgWzIsIDE1NF0pLCBvKCRWcDEsIFsyLCAxNTVdKSwgbygkVnAxLCBbMiwgMTU2XSksIG8oJFZwMSwgWzIsIDE1N10pLCBvKCRWcDEsIFsyLCAxNThdKSwgbygkVnAxLCBbMiwgMTU5XSksIG8oJFZwMSwgWzIsIDE2MF0pLCBvKCRWcDEsIFsyLCA4M10pLCBvKCRWcDEsIFsyLCA4NF0pLCBvKCRWcDEsIFsyLCA4NV0pLCBvKCRWcDEsIFsyLCA4Nl0pLCBvKCRWcDEsIFsyLCA4N10pLCBvKCRWcDEsIFsyLCA4OF0pLCBvKCRWcDEsIFsyLCA4OV0pLCBvKCRWcDEsIFsyLCA5MF0pLCBvKCRWcDEsIFsyLCA5MV0pLCBvKCRWcDEsIFsyLCA5Ml0pLCBvKCRWcDEsIFsyLCA5M10pLCB7IDY6IDExLCA3OiAxMiwgODogJFY1LCA5OiAkVjYsIDEwOiAkVjcsIDExOiAkVjgsIDIwOiAxNywgMjI6IDE4LCAyMzogMTksIDI0OiAyMCwgMjU6IDIxLCAyNjogMjIsIDI3OiAkVjksIDMyOiBbMSwgMTkzXSwgMzM6IDI0LCAzNDogJFZhLCAzNjogJFZiLCAzODogJFZjLCA0MDogMjgsIDQxOiAzOCwgNDI6ICRWZCwgNDM6IDM5LCA0NTogNDAsIDU4OiAkVmUsIDgxOiAkVmYsIDgyOiAkVmcsIDgzOiAkVmgsIDg0OiAkVmksIDg1OiAkVmosIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTg6ICRWdCwgMTE5OiAkVnUsIDEyMDogJFZ2LCAxMjE6ICRWdyB9LCB7IDEwOiAkVngsIDE4OiAxOTQgfSwgeyAxMDogWzEsIDE5NV0sIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDEwOSwgMTExOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcyB9LCB7IDEwOiBbMSwgMTk2XSB9LCB7IDEwOiBbMSwgMTk3XSwgMTAzOiBbMSwgMTk4XSB9LCBvKCRWcTEsIFsyLCAxMjFdKSwgeyAxMDogWzEsIDE5OV0sIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDEwOSwgMTExOiAkVnEsIDExMjogJFZyLCAxMTM6ICRWcyB9LCB7IDEwOiBbMSwgMjAwXSwgNDI6ICRWZCwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogMTA5LCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIHsgNzc6IFsxLCAyMDFdIH0sIG8oJFZnMSwgWzIsIDEwMl0sIHsgMTA6IFsxLCAyMDJdIH0pLCBvKCRWZzEsIFsyLCAxMDRdLCB7IDEwOiBbMSwgMjAzXSB9KSwgeyA3NzogWzEsIDIwNF0gfSwgbygkVmgxLCBbMiwgMTc3XSksIHsgNzc6IFsxLCAyMDVdLCA5NTogWzEsIDIwNl0gfSwgbygkVk8sIFsyLCA1MF0sIHsgMTEwOiAxMDksIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0pLCB7IDMxOiBbMSwgMjA3XSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgbygkVnIxLCBbMiwgNzldKSwgbygkVnIxLCBbMiwgODFdKSwgbygkVnIxLCBbMiwgODJdKSwgbygkVnIxLCBbMiwgMTQ2XSksIG8oJFZyMSwgWzIsIDE0N10pLCBvKCRWcjEsIFsyLCAxNDhdKSwgbygkVnIxLCBbMiwgMTQ5XSksIHsgNDc6IFsxLCAyMDldLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDMwOiAyMTAsIDY1OiAkVmkxLCA3NzogJFZqMSwgNzg6ICRWazEsIDc5OiAxNjQsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyA0OTogWzEsIDIxMV0sIDY1OiAkVmkxLCA3OTogMjA4LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgNTE6IFsxLCAyMTJdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDUzOiBbMSwgMjEzXSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyA1NTogWzEsIDIxNF0sIDY1OiAkVmkxLCA3OTogMjA4LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgNTg6IFsxLCAyMTVdIH0sIHsgNjI6IFsxLCAyMTZdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY0OiBbMSwgMjE3XSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgeyAzMDogMjE4LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgMzE6IFsxLCAyMTldLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY1OiAkVmkxLCA2NzogWzEsIDIyMF0sIDY5OiBbMSwgMjIxXSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY1OiAkVmkxLCA2NzogWzEsIDIyM10sIDY5OiBbMSwgMjIyXSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWQywgWzIsIDQ0XSwgeyA0MjogJFZmMSB9KSwgbygkVlMsIFsyLCA3MF0pLCBvKCRWUywgWzIsIDY5XSksIHsgNjA6IFsxLCAyMjRdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWUywgWzIsIDcyXSksIG8oJFZvMSwgWzIsIDc0XSksIHsgMzA6IDIyNSwgNjU6ICRWaTEsIDc3OiAkVmoxLCA3ODogJFZrMSwgNzk6IDE2NCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWZTEsICRWNCwgeyA1OiAyMjYgfSksIG8oJFZwMSwgWzIsIDk1XSksIG8oJFZ5LCBbMiwgMzVdKSwgeyA0MTogMjI3LCA0MjogJFZkLCA0MzogMzksIDQ1OiA0MCwgNTg6ICRWZSwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMgfSwgeyAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCA4OTogMjI4LCAxMDI6ICRWdjEsIDEwNDogMjI5LCAxMDU6IDIzMCwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0sIHsgMTA6ICRWczEsIDU4OiAkVnQxLCA4MTogJFZ1MSwgODk6IDIzOSwgMTAxOiBbMSwgMjQwXSwgMTAyOiAkVnYxLCAxMDQ6IDIyOSwgMTA1OiAyMzAsIDEwNjogJFZ3MSwgMTA3OiAkVngxLCAxMDg6ICRWeTEsIDEwOTogJFZ6MSB9LCB7IDEwOiAkVnMxLCA1ODogJFZ0MSwgODE6ICRWdTEsIDg5OiAyNDEsIDEwMTogWzEsIDI0Ml0sIDEwMjogJFZ2MSwgMTA0OiAyMjksIDEwNTogMjMwLCAxMDY6ICRWdzEsIDEwNzogJFZ4MSwgMTA4OiAkVnkxLCAxMDk6ICRWejEgfSwgeyAxMDI6IFsxLCAyNDNdIH0sIHsgMTA6ICRWczEsIDU4OiAkVnQxLCA4MTogJFZ1MSwgODk6IDI0NCwgMTAyOiAkVnYxLCAxMDQ6IDIyOSwgMTA1OiAyMzAsIDEwNjogJFZ3MSwgMTA3OiAkVngxLCAxMDg6ICRWeTEsIDEwOTogJFZ6MSB9LCB7IDQyOiAkVmQsIDQ1OiAyNDUsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0sIG8oJFZnMSwgWzIsIDEwMV0pLCB7IDc3OiBbMSwgMjQ2XSB9LCB7IDc3OiBbMSwgMjQ3XSwgOTU6IFsxLCAyNDhdIH0sIG8oJFZnMSwgWzIsIDEwOV0pLCBvKCRWZzEsIFsyLCAxMTFdLCB7IDEwOiBbMSwgMjQ5XSB9KSwgbygkVmcxLCBbMiwgMTEyXSksIG8oJFZQLCBbMiwgNTFdKSwgbygkVnIxLCBbMiwgODBdKSwgbygkVlAsIFsyLCA1Ml0pLCB7IDQ5OiBbMSwgMjUwXSwgNjU6ICRWaTEsIDc5OiAyMDgsIDExMzogJFZsMSwgMTE0OiAkVm0xLCAxMTU6ICRWbjEgfSwgbygkVlAsIFsyLCA1OV0pLCBvKCRWUCwgWzIsIDU0XSksIG8oJFZQLCBbMiwgNTVdKSwgbygkVlAsIFsyLCA1Nl0pLCB7IDEwNjogWzEsIDI1MV0gfSwgbygkVlAsIFsyLCA1OF0pLCBvKCRWUCwgWzIsIDYwXSksIHsgNjQ6IFsxLCAyNTJdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCBvKCRWUCwgWzIsIDYyXSksIG8oJFZQLCBbMiwgNjNdKSwgbygkVlAsIFsyLCA2NV0pLCBvKCRWUCwgWzIsIDY0XSksIG8oJFZQLCBbMiwgNjZdKSwgbyhbMTAsIDQyLCA1OCwgODYsIDk5LCAxMDIsIDEwMywgMTA2LCAxMDgsIDExMSwgMTEyLCAxMTNdLCBbMiwgNzhdKSwgeyAzMTogWzEsIDI1M10sIDY1OiAkVmkxLCA3OTogMjA4LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIHsgNjogMTEsIDc6IDEyLCA4OiAkVjUsIDk6ICRWNiwgMTA6ICRWNywgMTE6ICRWOCwgMjA6IDE3LCAyMjogMTgsIDIzOiAxOSwgMjQ6IDIwLCAyNTogMjEsIDI2OiAyMiwgMjc6ICRWOSwgMzI6IFsxLCAyNTRdLCAzMzogMjQsIDM0OiAkVmEsIDM2OiAkVmIsIDM4OiAkVmMsIDQwOiAyOCwgNDE6IDM4LCA0MjogJFZkLCA0MzogMzksIDQ1OiA0MCwgNTg6ICRWZSwgODE6ICRWZiwgODI6ICRWZywgODM6ICRWaCwgODQ6ICRWaSwgODU6ICRWaiwgODY6ICRWaywgOTk6ICRWbCwgMTAyOiAkVm0sIDEwMzogJFZuLCAxMDY6ICRWbywgMTA4OiAkVnAsIDExMDogNDEsIDExMTogJFZxLCAxMTI6ICRWciwgMTEzOiAkVnMsIDExODogJFZ0LCAxMTk6ICRWdSwgMTIwOiAkVnYsIDEyMTogJFZ3IH0sIG8oJFZPLCBbMiwgNDhdKSwgbygkVmcxLCBbMiwgMTE0XSwgeyAxMDM6ICRWQTEgfSksIG8oJFZCMSwgWzIsIDEyM10sIHsgMTA1OiAyNTYsIDEwOiAkVnMxLCA1ODogJFZ0MSwgODE6ICRWdTEsIDEwMjogJFZ2MSwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0pLCBvKCRWQzEsIFsyLCAxMjVdKSwgbygkVkMxLCBbMiwgMTI3XSksIG8oJFZDMSwgWzIsIDEyOF0pLCBvKCRWQzEsIFsyLCAxMjldKSwgbygkVkMxLCBbMiwgMTMwXSksIG8oJFZDMSwgWzIsIDEzMV0pLCBvKCRWQzEsIFsyLCAxMzJdKSwgbygkVkMxLCBbMiwgMTMzXSksIG8oJFZDMSwgWzIsIDEzNF0pLCBvKCRWZzEsIFsyLCAxMTVdLCB7IDEwMzogJFZBMSB9KSwgeyAxMDogWzEsIDI1N10gfSwgbygkVmcxLCBbMiwgMTE2XSwgeyAxMDM6ICRWQTEgfSksIHsgMTA6IFsxLCAyNThdIH0sIG8oJFZxMSwgWzIsIDEyMl0pLCBvKCRWZzEsIFsyLCA5OF0sIHsgMTAzOiAkVkExIH0pLCBvKCRWZzEsIFsyLCA5OV0sIHsgMTEwOiAxMDksIDQyOiAkVmQsIDU4OiAkVmUsIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzIH0pLCBvKCRWZzEsIFsyLCAxMDNdKSwgbygkVmcxLCBbMiwgMTA1XSwgeyAxMDogWzEsIDI1OV0gfSksIG8oJFZnMSwgWzIsIDEwNl0pLCB7IDk1OiBbMSwgMjYwXSB9LCB7IDQ5OiBbMSwgMjYxXSB9LCB7IDYwOiBbMSwgMjYyXSB9LCB7IDY0OiBbMSwgMjYzXSB9LCB7IDg6ICRWeiwgOTogJFZBLCAxMTogJFZCLCAyMTogMjY0IH0sIG8oJFZ5LCBbMiwgMzRdKSwgeyAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCAxMDI6ICRWdjEsIDEwNDogMjY1LCAxMDU6IDIzMCwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0sIG8oJFZDMSwgWzIsIDEyNl0pLCB7IDE0OiAkVkQsIDQyOiAkVkUsIDU4OiAkVkYsIDg2OiAkVkcsIDk4OiAyNjYsIDEwMjogJFZILCAxMDM6ICRWSSwgMTA2OiAkVkosIDEwODogJFZLLCAxMTE6ICRWTCwgMTEyOiAkVk0sIDExMzogJFZOLCAxMTc6IDg0IH0sIHsgMTQ6ICRWRCwgNDI6ICRWRSwgNTg6ICRWRiwgODY6ICRWRywgOTg6IDI2NywgMTAyOiAkVkgsIDEwMzogJFZJLCAxMDY6ICRWSiwgMTA4OiAkVkssIDExMTogJFZMLCAxMTI6ICRWTSwgMTEzOiAkVk4sIDExNzogODQgfSwgeyA5NTogWzEsIDI2OF0gfSwgbygkVmcxLCBbMiwgMTEzXSksIG8oJFZQLCBbMiwgNTNdKSwgeyAzMDogMjY5LCA2NTogJFZpMSwgNzc6ICRWajEsIDc4OiAkVmsxLCA3OTogMTY0LCAxMTM6ICRWbDEsIDExNDogJFZtMSwgMTE1OiAkVm4xIH0sIG8oJFZQLCBbMiwgNjFdKSwgbygkVmUxLCAkVjQsIHsgNTogMjcwIH0pLCBvKCRWQjEsIFsyLCAxMjRdLCB7IDEwNTogMjU2LCAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCAxMDI6ICRWdjEsIDEwNjogJFZ3MSwgMTA3OiAkVngxLCAxMDg6ICRWeTEsIDEwOTogJFZ6MSB9KSwgbygkVmcxLCBbMiwgMTE5XSwgeyAxMTc6IDE2MCwgMTA6IFsxLCAyNzFdLCAxNDogJFZELCA0MjogJFZFLCA1ODogJFZGLCA4NjogJFZHLCAxMDI6ICRWSCwgMTAzOiAkVkksIDEwNjogJFZKLCAxMDg6ICRWSywgMTExOiAkVkwsIDExMjogJFZNLCAxMTM6ICRWTiB9KSwgbygkVmcxLCBbMiwgMTIwXSwgeyAxMTc6IDE2MCwgMTA6IFsxLCAyNzJdLCAxNDogJFZELCA0MjogJFZFLCA1ODogJFZGLCA4NjogJFZHLCAxMDI6ICRWSCwgMTAzOiAkVkksIDEwNjogJFZKLCAxMDg6ICRWSywgMTExOiAkVkwsIDExMjogJFZNLCAxMTM6ICRWTiB9KSwgbygkVmcxLCBbMiwgMTA3XSksIHsgMzE6IFsxLCAyNzNdLCA2NTogJFZpMSwgNzk6IDIwOCwgMTEzOiAkVmwxLCAxMTQ6ICRWbTEsIDExNTogJFZuMSB9LCB7IDY6IDExLCA3OiAxMiwgODogJFY1LCA5OiAkVjYsIDEwOiAkVjcsIDExOiAkVjgsIDIwOiAxNywgMjI6IDE4LCAyMzogMTksIDI0OiAyMCwgMjU6IDIxLCAyNjogMjIsIDI3OiAkVjksIDMyOiBbMSwgMjc0XSwgMzM6IDI0LCAzNDogJFZhLCAzNjogJFZiLCAzODogJFZjLCA0MDogMjgsIDQxOiAzOCwgNDI6ICRWZCwgNDM6IDM5LCA0NTogNDAsIDU4OiAkVmUsIDgxOiAkVmYsIDgyOiAkVmcsIDgzOiAkVmgsIDg0OiAkVmksIDg1OiAkVmosIDg2OiAkVmssIDk5OiAkVmwsIDEwMjogJFZtLCAxMDM6ICRWbiwgMTA2OiAkVm8sIDEwODogJFZwLCAxMTA6IDQxLCAxMTE6ICRWcSwgMTEyOiAkVnIsIDExMzogJFZzLCAxMTg6ICRWdCwgMTE5OiAkVnUsIDEyMDogJFZ2LCAxMjE6ICRWdyB9LCB7IDEwOiAkVnMxLCA1ODogJFZ0MSwgODE6ICRWdTEsIDg5OiAyNzUsIDEwMjogJFZ2MSwgMTA0OiAyMjksIDEwNTogMjMwLCAxMDY6ICRWdzEsIDEwNzogJFZ4MSwgMTA4OiAkVnkxLCAxMDk6ICRWejEgfSwgeyAxMDogJFZzMSwgNTg6ICRWdDEsIDgxOiAkVnUxLCA4OTogMjc2LCAxMDI6ICRWdjEsIDEwNDogMjI5LCAxMDU6IDIzMCwgMTA2OiAkVncxLCAxMDc6ICRWeDEsIDEwODogJFZ5MSwgMTA5OiAkVnoxIH0sIG8oJFZQLCBbMiwgNTddKSwgbygkVnksIFsyLCAzM10pLCBvKCRWZzEsIFsyLCAxMTddLCB7IDEwMzogJFZBMSB9KSwgbygkVmcxLCBbMiwgMTE4XSwgeyAxMDM6ICRWQTEgfSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7fSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgyKCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4MiwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4MigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4MigpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2tuYW1lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNhbGxiYWNrYXJnc1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gOTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiA5MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gXCJNRF9TVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm1kX3N0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDgxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiA5OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICByZXR1cm4gODI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgcmV0dXJuIDEwMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gODM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmV0dXJuIDg0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiA5NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2xpY2tcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiA4NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICBpZiAoeXkubGV4LmZpcnN0R3JhcGgoKSkge1xuICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZGlyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIGlmICh5eS5sZXguZmlyc3RHcmFwaCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJkaXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgaWYgKHl5LmxleC5maXJzdEdyYXBoKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImRpclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDMyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA5NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gOTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDk1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiA5NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHJldHVybiAxMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIDExOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gMTIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiAxMjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgcmV0dXJuIDEwMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgICByZXR1cm4gMTA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHJldHVybiAxMDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgcmV0dXJuIDExMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNzU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJlZGdlVGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgICByZXR1cm4gMTE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRoaWNrRWRnZVRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDExNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNzU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJkb3R0ZWRFZGdlVGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA3MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgICByZXR1cm4gMTE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICAgcmV0dXJuIFwiVEVYVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiZWxsaXBzZVRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiA1NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA2NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgICAgcmV0dXJuIDExNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRyYXBUZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4ODpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidHJhcFRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg5OlxuICAgICAgICAgICAgcmV0dXJuIDExNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgcmV0dXJuIDg3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MjpcbiAgICAgICAgICAgIHJldHVybiBcIlNFUFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgIHJldHVybiA4NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgICByZXR1cm4gMTEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5NTpcbiAgICAgICAgICAgIHJldHVybiAxMDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5NzpcbiAgICAgICAgICAgIHJldHVybiAxMDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk4OlxuICAgICAgICAgICAgcmV0dXJuIDExMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTk6XG4gICAgICAgICAgICByZXR1cm4gMTEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInRleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gNDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJ0ZXh0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgICAgcmV0dXJuIFwiVEVYVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICByZXR1cm4gXCJRVU9URVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTA6XG4gICAgICAgICAgICByZXR1cm4gOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86Y2FsbFtcXHNdKykvLCAvXig/OlxcKFtcXHNdKlxcKSkvLCAvXig/OlxcKCkvLCAvXig/OlteKF0qKS8sIC9eKD86XFwpKS8sIC9eKD86W14pXSopLywgL14oPzpbXmBcIl0rKS8sIC9eKD86W2BdW1wiXSkvLCAvXig/OltcIl1bYF0pLywgL14oPzpbXlwiXSspLywgL14oPzpbXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OnN0eWxlXFxiKS8sIC9eKD86ZGVmYXVsdFxcYikvLCAvXig/OmxpbmtTdHlsZVxcYikvLCAvXig/OmludGVycG9sYXRlXFxiKS8sIC9eKD86Y2xhc3NEZWZcXGIpLywgL14oPzpjbGFzc1xcYikvLCAvXig/OmhyZWZbXFxzXSkvLCAvXig/OmNsaWNrW1xcc10rKS8sIC9eKD86W1xcc1xcbl0pLywgL14oPzpbXlxcc1xcbl0qKS8sIC9eKD86Zmxvd2NoYXJ0LWVsa1xcYikvLCAvXig/OmdyYXBoXFxiKS8sIC9eKD86Zmxvd2NoYXJ0XFxiKS8sIC9eKD86c3ViZ3JhcGhcXGIpLywgL14oPzplbmRcXGJcXHMqKS8sIC9eKD86X3NlbGZcXGIpLywgL14oPzpfYmxhbmtcXGIpLywgL14oPzpfcGFyZW50XFxiKS8sIC9eKD86X3RvcFxcYikvLCAvXig/OihcXHI/XFxuKSpcXHMqXFxuKS8sIC9eKD86XFxzKkxSXFxiKS8sIC9eKD86XFxzKlJMXFxiKS8sIC9eKD86XFxzKlRCXFxiKS8sIC9eKD86XFxzKkJUXFxiKS8sIC9eKD86XFxzKlREXFxiKS8sIC9eKD86XFxzKkJSXFxiKS8sIC9eKD86XFxzKjwpLywgL14oPzpcXHMqPikvLCAvXig/OlxccypcXF4pLywgL14oPzpcXHMqdlxcYikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1JMW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvLCAvXig/OlswLTldKykvLCAvXig/OiMpLywgL14oPzo6OjopLywgL14oPzo6KS8sIC9eKD86JikvLCAvXig/OjspLywgL14oPzosKS8sIC9eKD86XFwqKS8sIC9eKD86XFxzKlt4bzxdPy0tK1steG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/LS1cXHMqKS8sIC9eKD86W14tXXwtKD8hLSkrKS8sIC9eKD86XFxzKlt4bzxdPz09K1s9eG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/PT1cXHMqKS8sIC9eKD86W149XXw9KD8hKSkvLCAvXig/OlxccypbeG88XT8tP1xcListW3hvPl0/XFxzKikvLCAvXig/OlxccypbeG88XT8tXFwuXFxzKikvLCAvXig/OlteXFwuXXxcXC4oPyEpKS8sIC9eKD86XFxzKn5+W1xcfl0rXFxzKikvLCAvXig/OlstL1xcKV1bXFwpXSkvLCAvXig/OlteXFwoXFwpXFxbXFxdXFx7XFx9XXwhXFwpKykvLCAvXig/OlxcKC0pLywgL14oPzpcXF1cXCkpLywgL14oPzpcXChcXFspLywgL14oPzpcXF1cXF0pLywgL14oPzpcXFtcXFspLywgL14oPzpcXFtcXHwpLywgL14oPzo+KS8sIC9eKD86XFwpXFxdKS8sIC9eKD86XFxbXFwoKS8sIC9eKD86XFwpXFwpXFwpKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86W1xcXFwoPz1cXF0pXVtcXF1dKS8sIC9eKD86XFwvKD89XFxdKVxcXSkvLCAvXig/OlxcLyg/IVxcXSl8XFxcXCg/IVxcXSl8W15cXFxcXFxbXFxdXFwoXFwpXFx7XFx9XFwvXSspLywgL14oPzpcXFtcXC8pLywgL14oPzpcXFtcXFxcKS8sIC9eKD86PCkvLCAvXig/Oj4pLywgL14oPzpcXF4pLywgL14oPzpcXFxcXFx8KS8sIC9eKD86dlxcYikvLCAvXig/OlxcKikvLCAvXig/OiMpLywgL14oPzomKS8sIC9eKD86KFtBLVphLXowLTkhXCJcXCMkJSYnKitcXC5gP1xcXFxfXFwvXXwtKD89W15cXD5cXC1cXC5dKXwoPyEpKSspLywgL14oPzotKS8sIC9eKD86W1xcdTAwQUFcXHUwMEI1XFx1MDBCQVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNl18W1xcdTAwRjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzddfFtcXHUwMzdBLVxcdTAzN0RcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNV18W1xcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFdfFtcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVdfFtcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXXxbXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhBMF18W1xcdTA4QTItXFx1MDhBQ1xcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTc3XXxbXFx1MDk3OS1cXHUwOTdGXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXXxbXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXXxbXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzldfFtcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XXxbXFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEIwNS1cXHUwQjBDXXxbXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXXxbXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OV18W1xcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBdfFtcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzNcXHUwQzM1LVxcdTBDMzlcXHUwQzNEXXxbXFx1MEM1OFxcdTBDNTlcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM118W1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMF18W1xcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ2MFxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFdfFtcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXXxbXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXXxbXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZdfFtcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXXxbXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MV18W1xcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RF18W1xcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBdfFtcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXXxbXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXXxbXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXXxbXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN118W1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFDXXxbXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlDMS1cXHUxOUM3XFx1MUEwMC1cXHUxQTE2XXxbXFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXXxbXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXXxbXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURdfFtcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RdfFtcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXXxbXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZdfFtcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhdfFtcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRdfFtcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM118W1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNl18W1xcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRV18W1xcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXXxbXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXXxbXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXXxbXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJdfFtcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OTdcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhdfFtcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3OTNcXHVBN0EwLVxcdUE3QUFcXHVBN0Y4LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVdfFtcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXXxbXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUFBMDAtXFx1QUEyOF18W1xcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTgwLVxcdUFBQUZcXHVBQUIxXFx1QUFCNV18W1xcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNF18W1xcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRV18W1xcdUFCQzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RF18W1xcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZdfFtcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRF18W1xcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ118W1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRl18W1xcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10pLywgL14oPzpcXHwpLywgL14oPzpcXHwpLywgL14oPzpcXCkpLywgL14oPzpcXCgpLywgL14oPzpcXF0pLywgL14oPzpcXFspLywgL14oPzooXFx9KSkvLCAvXig/OlxceykvLCAvXig/OlteXFxbXFxdXFwoXFwpXFx7XFx9XFx8XFxcIl0rKS8sIC9eKD86XCIpLywgL14oPzooXFxyP1xcbikrKS8sIC9eKD86XFxzKS8sIC9eKD86JCkvXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJjYWxsYmFja2FyZ3NcIjogeyBcInJ1bGVzXCI6IFsxMSwgMTIsIDE1LCAxOCwgNzAsIDczLCA3NSwgNzcsIDgxLCA4MywgODcsIDg4LCAxMDEsIDEwMywgMTA1LCAxMDddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNhbGxiYWNrbmFtZVwiOiB7IFwicnVsZXNcIjogWzgsIDksIDEwLCAxNSwgMTgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJocmVmXCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2xpY2tcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTgsIDI3LCAyOCwgNzAsIDczLCA3NSwgNzcsIDgxLCA4MywgODcsIDg4LCAxMDEsIDEwMywgMTA1LCAxMDddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImRvdHRlZEVkZ2VUZXh0XCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA2NywgNjksIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0aGlja0VkZ2VUZXh0XCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA2NCwgNjYsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJlZGdlVGV4dFwiOiB7IFwicnVsZXNcIjogWzE1LCAxOCwgNjEsIDYzLCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidHJhcFRleHRcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJlbGxpcHNlVGV4dFwiOiB7IFwicnVsZXNcIjogWzE1LCAxOCwgNzAsIDcxLCA3MiwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidGV4dFwiOiB7IFwicnVsZXNcIjogWzE1LCAxOCwgNzAsIDczLCA3NCwgNzUsIDc2LCA3NywgODAsIDgxLCA4MiwgODMsIDg3LCA4OCwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidmVydGV4XCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiZGlyXCI6IHsgXCJydWxlc1wiOiBbMTUsIDE4LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbNSwgNiwgMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMywgMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMSwgMTUsIDE4LCA3MCwgNzMsIDc1LCA3NywgODEsIDgzLCA4NywgODgsIDEwMSwgMTAzLCAxMDUsIDEwN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibWRfc3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbMTMsIDE0LCAxNSwgMTgsIDcwLCA3MywgNzUsIDc3LCA4MSwgODMsIDg3LCA4OCwgMTAxLCAxMDMsIDEwNSwgMTA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTYsIDE3LCAxOCwgNzAsIDczLCA3NSwgNzcsIDgxLCA4MywgODcsIDg4LCAxMDEsIDEwMywgMTA1LCAxMDddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAyLCA0LCA3LCAxNSwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2NCwgNjUsIDY3LCA2OCwgNzAsIDczLCA3NSwgNzcsIDc4LCA3OSwgODEsIDgzLCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAxLCAxMDMsIDEwNSwgMTA3LCAxMDksIDExMCwgMTExLCAxMTJdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgZmxvd19kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZmxvd2NoYXJ0L3N0eWxlcy50c1xuaW1wb3J0ICogYXMga2hyb21hIGZyb20gXCJraHJvbWFcIjtcbnZhciBmYWRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29sb3IsIG9wYWNpdHkpID0+IHtcbiAgY29uc3QgY2hhbm5lbDIgPSBraHJvbWEuY2hhbm5lbDtcbiAgY29uc3QgciA9IGNoYW5uZWwyKGNvbG9yLCBcInJcIik7XG4gIGNvbnN0IGcgPSBjaGFubmVsMihjb2xvciwgXCJnXCIpO1xuICBjb25zdCBiID0gY2hhbm5lbDIoY29sb3IsIFwiYlwiKTtcbiAgcmV0dXJuIGtocm9tYS5yZ2JhKHIsIGcsIGIsIG9wYWNpdHkpO1xufSwgXCJmYWRlXCIpO1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGAubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gICAgY29sb3I6ICR7b3B0aW9ucy5ub2RlVGV4dENvbG9yIHx8IG9wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCBzcGFuIHAge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLmxhYmVsIHRleHQsc3BhbiB7XG4gICAgZmlsbDogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICAgIGNvbG9yOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuICAucm91Z2gtbm9kZSAubGFiZWwgdGV4dCAsIC5ub2RlIC5sYWJlbCB0ZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICB9XG4gIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4ge1xuICAvLyAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gIC8vIH1cbiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7XG4gIC8vICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAvLyB9XG5cbiAgLm5vZGUgLmthdGV4IHBhdGgge1xuICAgIGZpbGw6ICMwMDA7XG4gICAgc3Ryb2tlOiAjMDAwO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmFycm93aGVhZENvbG9yfTtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDIuMHB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gICAgcCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gICAgfVxuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgICAgZmlsbDogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqL1xuICAubGFiZWxCa2cge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZmFkZShvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmQsIDAuNSl9O1xuICAgIC8vIGJhY2tncm91bmQtY29sb3I6XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuY2x1c3RlckJrZ307XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuY2x1c3RlckJvcmRlcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtvcHRpb25zLmJvcmRlcjJ9O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9mbG93Y2hhcnQvZmxvd0RpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IGZsb3dfZGVmYXVsdCxcbiAgZGI6IGZsb3dEYl9kZWZhdWx0LFxuICByZW5kZXJlcjogZmxvd1JlbmRlcmVyX3YzX3VuaWZpZWRfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuZmxvd2NoYXJ0KSB7XG4gICAgICBjbmYuZmxvd2NoYXJ0ID0ge307XG4gICAgfVxuICAgIGlmIChjbmYubGF5b3V0KSB7XG4gICAgICBzZXRDb25maWcoeyBsYXlvdXQ6IGNuZi5sYXlvdXQgfSk7XG4gICAgfVxuICAgIGNuZi5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIHNldENvbmZpZyh7IGZsb3djaGFydDogeyBhcnJvd01hcmtlckFic29sdXRlOiBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSB9IH0pO1xuICAgIGZsb3dEYl9kZWZhdWx0LmNsZWFyKCk7XG4gICAgZmxvd0RiX2RlZmF1bHQuc2V0R2VuKFwiZ2VuLTJcIik7XG4gIH0sIFwiaW5pdFwiKVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLAogICAgImltcG9ydCBSRUdFWCBmcm9tICcuL3JlZ2V4LmpzJztcblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIFJFR0VYLnRlc3QodXVpZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlOyIsCiAgICAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwKICAgICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlOyIsCiAgICAiaW1wb3J0IHsgdW5zYWZlU3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuaW1wb3J0IHBhcnNlIGZyb20gJy4vcGFyc2UuanMnO1xuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5leHBvcnQgY29uc3QgRE5TID0gJzZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnQgY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9IHBhcnNlKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zYWZlU3RyaW5naWZ5KGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLAogICAgIi8vIEFkYXB0ZWQgZnJvbSBDaHJpcyBWZW5lc3MnIFNIQTEgY29kZSBhdFxuLy8gaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9zaGExLmh0bWxcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICBzd2l0Y2ggKHMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcblxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gIH1cbn1cblxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgY29uc3QgSyA9IFsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2XTtcbiAgY29uc3QgSCA9IFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwXTtcblxuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cblxuICBieXRlcy5wdXNoKDB4ODApO1xuICBjb25zdCBsID0gYnl0ZXMubGVuZ3RoIC8gNCArIDI7XG4gIGNvbnN0IE4gPSBNYXRoLmNlaWwobCAvIDE2KTtcbiAgY29uc3QgTSA9IG5ldyBBcnJheShOKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50MzJBcnJheSgxNik7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIGFycltqXSA9IGJ5dGVzW2kgKiA2NCArIGogKiA0XSA8PCAyNCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tpICogNjQgKyBqICogNCArIDJdIDw8IDggfCBieXRlc1tpICogNjQgKyBqICogNCArIDNdO1xuICAgIH1cblxuICAgIE1baV0gPSBhcnI7XG4gIH1cblxuICBNW04gLSAxXVsxNF0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4IC8gTWF0aC5wb3coMiwgMzIpO1xuICBNW04gLSAxXVsxNF0gPSBNYXRoLmZsb29yKE1bTiAtIDFdWzE0XSk7XG4gIE1bTiAtIDFdWzE1XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggJiAweGZmZmZmZmZmO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgVyA9IG5ldyBVaW50MzJBcnJheSg4MCk7XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDE2OyArK3QpIHtcbiAgICAgIFdbdF0gPSBNW2ldW3RdO1xuICAgIH1cblxuICAgIGZvciAobGV0IHQgPSAxNjsgdCA8IDgwOyArK3QpIHtcbiAgICAgIFdbdF0gPSBST1RMKFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpO1xuICAgIH1cblxuICAgIGxldCBhID0gSFswXTtcbiAgICBsZXQgYiA9IEhbMV07XG4gICAgbGV0IGMgPSBIWzJdO1xuICAgIGxldCBkID0gSFszXTtcbiAgICBsZXQgZSA9IEhbNF07XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDgwOyArK3QpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHQgLyAyMCk7XG4gICAgICBjb25zdCBUID0gUk9UTChhLCA1KSArIGYocywgYiwgYywgZCkgKyBlICsgS1tzXSArIFdbdF0gPj4+IDA7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IFJPVEwoYiwgMzApID4+PiAwO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gVDtcbiAgICB9XG5cbiAgICBIWzBdID0gSFswXSArIGEgPj4+IDA7XG4gICAgSFsxXSA9IEhbMV0gKyBiID4+PiAwO1xuICAgIEhbMl0gPSBIWzJdICsgYyA+Pj4gMDtcbiAgICBIWzNdID0gSFszXSArIGQgPj4+IDA7XG4gICAgSFs0XSA9IEhbNF0gKyBlID4+PiAwO1xuICB9XG5cbiAgcmV0dXJuIFtIWzBdID4+IDI0ICYgMHhmZiwgSFswXSA+PiAxNiAmIDB4ZmYsIEhbMF0gPj4gOCAmIDB4ZmYsIEhbMF0gJiAweGZmLCBIWzFdID4+IDI0ICYgMHhmZiwgSFsxXSA+PiAxNiAmIDB4ZmYsIEhbMV0gPj4gOCAmIDB4ZmYsIEhbMV0gJiAweGZmLCBIWzJdID4+IDI0ICYgMHhmZiwgSFsyXSA+PiAxNiAmIDB4ZmYsIEhbMl0gPj4gOCAmIDB4ZmYsIEhbMl0gJiAweGZmLCBIWzNdID4+IDI0ICYgMHhmZiwgSFszXSA+PiAxNiAmIDB4ZmYsIEhbM10gPj4gOCAmIDB4ZmYsIEhbM10gJiAweGZmLCBIWzRdID4+IDI0ICYgMHhmZiwgSFs0XSA+PiAxNiAmIDB4ZmYsIEhbNF0gPj4gOCAmIDB4ZmYsIEhbNF0gJiAweGZmXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hhMTsiLAogICAgImltcG9ydCB2MzUgZnJvbSAnLi92MzUuanMnO1xuaW1wb3J0IHNoYTEgZnJvbSAnLi9zaGExLmpzJztcbmNvbnN0IHY1ID0gdjM1KCd2NScsIDB4NTAsIHNoYTEpO1xuZXhwb3J0IGRlZmF1bHQgdjU7IiwKICAgICJleHBvcnQgeyBkZWZhdWx0IGFzIHYxIH0gZnJvbSAnLi92MS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHYzIH0gZnJvbSAnLi92My5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHY0IH0gZnJvbSAnLi92NC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHY1IH0gZnJvbSAnLi92NS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5JTCB9IGZyb20gJy4vbmlsLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZhbGlkYXRlIH0gZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyc2UgfSBmcm9tICcuL3BhcnNlLmpzJzsiLAogICAgImltcG9ydCB7XG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGxvZyxcbiAgcGFyc2VHZW5lcmljVHlwZXMsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvcGFyc2VyL2VyRGlhZ3JhbS5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzYsIDgsIDEwLCAyMCwgMjIsIDI0LCAyNiwgMjcsIDI4XSwgJFYxID0gWzEsIDEwXSwgJFYyID0gWzEsIDExXSwgJFYzID0gWzEsIDEyXSwgJFY0ID0gWzEsIDEzXSwgJFY1ID0gWzEsIDE0XSwgJFY2ID0gWzEsIDE1XSwgJFY3ID0gWzEsIDIxXSwgJFY4ID0gWzEsIDIyXSwgJFY5ID0gWzEsIDIzXSwgJFZhID0gWzEsIDI0XSwgJFZiID0gWzEsIDI1XSwgJFZjID0gWzYsIDgsIDEwLCAxMywgMTUsIDE4LCAxOSwgMjAsIDIyLCAyNCwgMjYsIDI3LCAyOCwgNDEsIDQyLCA0MywgNDQsIDQ1XSwgJFZkID0gWzEsIDM0XSwgJFZlID0gWzI3LCAyOCwgNDYsIDQ3XSwgJFZmID0gWzQxLCA0MiwgNDMsIDQ0LCA0NV0sICRWZyA9IFsxNywgMzRdLCAkVmggPSBbMSwgNTRdLCAkVmkgPSBbMSwgNTNdLCAkVmogPSBbMTcsIDM0LCAzNiwgMzhdO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LCBcInRyYWNlXCIpLFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJFUl9ESUFHUkFNXCI6IDQsIFwiZG9jdW1lbnRcIjogNSwgXCJFT0ZcIjogNiwgXCJsaW5lXCI6IDcsIFwiU1BBQ0VcIjogOCwgXCJzdGF0ZW1lbnRcIjogOSwgXCJORVdMSU5FXCI6IDEwLCBcImVudGl0eU5hbWVcIjogMTEsIFwicmVsU3BlY1wiOiAxMiwgXCI6XCI6IDEzLCBcInJvbGVcIjogMTQsIFwiQkxPQ0tfU1RBUlRcIjogMTUsIFwiYXR0cmlidXRlc1wiOiAxNiwgXCJCTE9DS19TVE9QXCI6IDE3LCBcIlNRU1wiOiAxOCwgXCJTUUVcIjogMTksIFwidGl0bGVcIjogMjAsIFwidGl0bGVfdmFsdWVcIjogMjEsIFwiYWNjX3RpdGxlXCI6IDIyLCBcImFjY190aXRsZV92YWx1ZVwiOiAyMywgXCJhY2NfZGVzY3JcIjogMjQsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDI1LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMjYsIFwiQUxQSEFOVU1cIjogMjcsIFwiRU5USVRZX05BTUVcIjogMjgsIFwiYXR0cmlidXRlXCI6IDI5LCBcImF0dHJpYnV0ZVR5cGVcIjogMzAsIFwiYXR0cmlidXRlTmFtZVwiOiAzMSwgXCJhdHRyaWJ1dGVLZXlUeXBlTGlzdFwiOiAzMiwgXCJhdHRyaWJ1dGVDb21tZW50XCI6IDMzLCBcIkFUVFJJQlVURV9XT1JEXCI6IDM0LCBcImF0dHJpYnV0ZUtleVR5cGVcIjogMzUsIFwiQ09NTUFcIjogMzYsIFwiQVRUUklCVVRFX0tFWVwiOiAzNywgXCJDT01NRU5UXCI6IDM4LCBcImNhcmRpbmFsaXR5XCI6IDM5LCBcInJlbFR5cGVcIjogNDAsIFwiWkVST19PUl9PTkVcIjogNDEsIFwiWkVST19PUl9NT1JFXCI6IDQyLCBcIk9ORV9PUl9NT1JFXCI6IDQzLCBcIk9OTFlfT05FXCI6IDQ0LCBcIk1EX1BBUkVOVFwiOiA0NSwgXCJOT05fSURFTlRJRllJTkdcIjogNDYsIFwiSURFTlRJRllJTkdcIjogNDcsIFwiV09SRFwiOiA0OCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiRVJfRElBR1JBTVwiLCA2OiBcIkVPRlwiLCA4OiBcIlNQQUNFXCIsIDEwOiBcIk5FV0xJTkVcIiwgMTM6IFwiOlwiLCAxNTogXCJCTE9DS19TVEFSVFwiLCAxNzogXCJCTE9DS19TVE9QXCIsIDE4OiBcIlNRU1wiLCAxOTogXCJTUUVcIiwgMjA6IFwidGl0bGVcIiwgMjE6IFwidGl0bGVfdmFsdWVcIiwgMjI6IFwiYWNjX3RpdGxlXCIsIDIzOiBcImFjY190aXRsZV92YWx1ZVwiLCAyNDogXCJhY2NfZGVzY3JcIiwgMjU6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDI2OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMjc6IFwiQUxQSEFOVU1cIiwgMjg6IFwiRU5USVRZX05BTUVcIiwgMzQ6IFwiQVRUUklCVVRFX1dPUkRcIiwgMzY6IFwiQ09NTUFcIiwgMzc6IFwiQVRUUklCVVRFX0tFWVwiLCAzODogXCJDT01NRU5UXCIsIDQxOiBcIlpFUk9fT1JfT05FXCIsIDQyOiBcIlpFUk9fT1JfTU9SRVwiLCA0MzogXCJPTkVfT1JfTU9SRVwiLCA0NDogXCJPTkxZX09ORVwiLCA0NTogXCJNRF9QQVJFTlRcIiwgNDY6IFwiTk9OX0lERU5USUZZSU5HXCIsIDQ3OiBcIklERU5USUZZSU5HXCIsIDQ4OiBcIldPUkRcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzUsIDBdLCBbNSwgMl0sIFs3LCAyXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzksIDVdLCBbOSwgNF0sIFs5LCAzXSwgWzksIDFdLCBbOSwgN10sIFs5LCA2XSwgWzksIDRdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMV0sIFsxMSwgMV0sIFsxMSwgMV0sIFsxNiwgMV0sIFsxNiwgMl0sIFsyOSwgMl0sIFsyOSwgM10sIFsyOSwgM10sIFsyOSwgNF0sIFszMCwgMV0sIFszMSwgMV0sIFszMiwgMV0sIFszMiwgM10sIFszNSwgMV0sIFszMywgMV0sIFsxMiwgM10sIFszOSwgMV0sIFszOSwgMV0sIFszOSwgMV0sIFszOSwgMV0sIFszOSwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFsxNCwgMV0sIFsxNCwgMV0sIFsxNCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5hZGRFbnRpdHkoJCRbJDAgLSA0XSk7XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIHl5LmFkZFJlbGF0aW9uc2hpcCgkJFskMCAtIDRdLCAkJFskMF0sICQkWyQwIC0gMl0sICQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gM10pO1xuICAgICAgICAgIHl5LmFkZEF0dHJpYnV0ZXMoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgeXkuYWRkRW50aXR5KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMCAtIDZdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICB5eS5hZGRBdHRyaWJ1dGVzKCQkWyQwIC0gNl0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHl5LmFkZEVudGl0eSgkJFskMCAtIDVdLCAkJFskMCAtIDNdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICB5eS5hZGRFbnRpdHkoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgIGNhc2UgNDE6XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICQkWyQwXS5wdXNoKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSB7IGF0dHJpYnV0ZVR5cGU6ICQkWyQwIC0gMV0sIGF0dHJpYnV0ZU5hbWU6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgYXR0cmlidXRlVHlwZTogJCRbJDAgLSAyXSwgYXR0cmlidXRlTmFtZTogJCRbJDAgLSAxXSwgYXR0cmlidXRlS2V5VHlwZUxpc3Q6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgYXR0cmlidXRlVHlwZTogJCRbJDAgLSAyXSwgYXR0cmlidXRlTmFtZTogJCRbJDAgLSAxXSwgYXR0cmlidXRlQ29tbWVudDogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0geyBhdHRyaWJ1dGVUeXBlOiAkJFskMCAtIDNdLCBhdHRyaWJ1dGVOYW1lOiAkJFskMCAtIDJdLCBhdHRyaWJ1dGVLZXlUeXBlTGlzdDogJCRbJDAgLSAxXSwgYXR0cmlidXRlQ29tbWVudDogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICQkWyQwIC0gMl0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIHRoaXMuJCA9IHsgY2FyZEE6ICQkWyQwXSwgcmVsVHlwZTogJCRbJDAgLSAxXSwgY2FyZEI6ICQkWyQwIC0gMl0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuT05MWV9PTkU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgdGhpcy4kID0geXkuQ2FyZGluYWxpdHkuTURfUEFSRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IFsxLCA2XSwgOTogNywgMTA6IFsxLCA4XSwgMTE6IDksIDIwOiAkVjEsIDIyOiAkVjIsIDI0OiAkVjMsIDI2OiAkVjQsIDI3OiAkVjUsIDI4OiAkVjYgfSwgbygkVjAsIFsyLCA3XSwgeyAxOiBbMiwgMV0gfSksIG8oJFYwLCBbMiwgM10pLCB7IDk6IDE2LCAxMTogOSwgMjA6ICRWMSwgMjI6ICRWMiwgMjQ6ICRWMywgMjY6ICRWNCwgMjc6ICRWNSwgMjg6ICRWNiB9LCBvKCRWMCwgWzIsIDVdKSwgbygkVjAsIFsyLCA2XSksIG8oJFYwLCBbMiwgMTFdLCB7IDEyOiAxNywgMzk6IDIwLCAxNTogWzEsIDE4XSwgMTg6IFsxLCAxOV0sIDQxOiAkVjcsIDQyOiAkVjgsIDQzOiAkVjksIDQ0OiAkVmEsIDQ1OiAkVmIgfSksIHsgMjE6IFsxLCAyNl0gfSwgeyAyMzogWzEsIDI3XSB9LCB7IDI1OiBbMSwgMjhdIH0sIG8oJFYwLCBbMiwgMThdKSwgbygkVmMsIFsyLCAxOV0pLCBvKCRWYywgWzIsIDIwXSksIG8oJFYwLCBbMiwgNF0pLCB7IDExOiAyOSwgMjc6ICRWNSwgMjg6ICRWNiB9LCB7IDE2OiAzMCwgMTc6IFsxLCAzMV0sIDI5OiAzMiwgMzA6IDMzLCAzNDogJFZkIH0sIHsgMTE6IDM1LCAyNzogJFY1LCAyODogJFY2IH0sIHsgNDA6IDM2LCA0NjogWzEsIDM3XSwgNDc6IFsxLCAzOF0gfSwgbygkVmUsIFsyLCAzNF0pLCBvKCRWZSwgWzIsIDM1XSksIG8oJFZlLCBbMiwgMzZdKSwgbygkVmUsIFsyLCAzN10pLCBvKCRWZSwgWzIsIDM4XSksIG8oJFYwLCBbMiwgMTVdKSwgbygkVjAsIFsyLCAxNl0pLCBvKCRWMCwgWzIsIDE3XSksIHsgMTM6IFsxLCAzOV0gfSwgeyAxNzogWzEsIDQwXSB9LCBvKCRWMCwgWzIsIDEwXSksIHsgMTY6IDQxLCAxNzogWzIsIDIxXSwgMjk6IDMyLCAzMDogMzMsIDM0OiAkVmQgfSwgeyAzMTogNDIsIDM0OiBbMSwgNDNdIH0sIHsgMzQ6IFsyLCAyN10gfSwgeyAxOTogWzEsIDQ0XSB9LCB7IDM5OiA0NSwgNDE6ICRWNywgNDI6ICRWOCwgNDM6ICRWOSwgNDQ6ICRWYSwgNDU6ICRWYiB9LCBvKCRWZiwgWzIsIDM5XSksIG8oJFZmLCBbMiwgNDBdKSwgeyAxNDogNDYsIDI3OiBbMSwgNDldLCAyODogWzEsIDQ4XSwgNDg6IFsxLCA0N10gfSwgbygkVjAsIFsyLCA5XSksIHsgMTc6IFsyLCAyMl0gfSwgbygkVmcsIFsyLCAyM10sIHsgMzI6IDUwLCAzMzogNTEsIDM1OiA1MiwgMzc6ICRWaCwgMzg6ICRWaSB9KSwgbyhbMTcsIDM0LCAzNywgMzhdLCBbMiwgMjhdKSwgbygkVjAsIFsyLCAxNF0sIHsgMTU6IFsxLCA1NV0gfSksIG8oWzI3LCAyOF0sIFsyLCAzM10pLCBvKCRWMCwgWzIsIDhdKSwgbygkVjAsIFsyLCA0MV0pLCBvKCRWMCwgWzIsIDQyXSksIG8oJFYwLCBbMiwgNDNdKSwgbygkVmcsIFsyLCAyNF0sIHsgMzM6IDU2LCAzNjogWzEsIDU3XSwgMzg6ICRWaSB9KSwgbygkVmcsIFsyLCAyNV0pLCBvKCRWaiwgWzIsIDI5XSksIG8oJFZnLCBbMiwgMzJdKSwgbygkVmosIFsyLCAzMV0pLCB7IDE2OiA1OCwgMTc6IFsxLCA1OV0sIDI5OiAzMiwgMzA6IDMzLCAzNDogJFZkIH0sIG8oJFZnLCBbMiwgMjZdKSwgeyAzNTogNjAsIDM3OiAkVmggfSwgeyAxNzogWzEsIDYxXSB9LCBvKCRWMCwgWzIsIDEzXSksIG8oJFZqLCBbMiwgMzBdKSwgbygkVjAsIFsyLCAxMl0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyAzNDogWzIsIDI3XSwgNDE6IFsyLCAyMl0gfSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJibG9ja1wiKTtcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiB5eV8ueXl0ZXh0WzBdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIHJldHVybiA0MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIDQ3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHJldHVybiAyNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgICByZXR1cm4geXlfLnl5dGV4dFswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86W1xcbl0rKS9pLCAvXig/OlxccyspL2ksIC9eKD86W1xcc10rKS9pLCAvXig/OlwiW15cIiVcXHJcXG5cXHZcXGJcXFxcXStcIikvaSwgL14oPzpcIlteXCJdKlwiKS9pLCAvXig/OmVyRGlhZ3JhbVxcYikvaSwgL14oPzpcXHspL2ksIC9eKD86LCkvaSwgL14oPzpcXHMrKS9pLCAvXig/OlxcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcXGIpL2ksIC9eKD86KC4qPylbfl0oLio/KSpbfl0pL2ksIC9eKD86W1xcKkEtWmEtel9dW0EtWmEtejAtOVxcLV9cXFtcXF1cXChcXCldKikvaSwgL14oPzpcIlteXCJdKlwiKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXH0pL2ksIC9eKD86LikvaSwgL14oPzpcXFspL2ksIC9eKD86XFxdKS9pLCAvXig/Om9uZSBvciB6ZXJvXFxiKS9pLCAvXig/Om9uZSBvciBtb3JlXFxiKS9pLCAvXig/Om9uZSBvciBtYW55XFxiKS9pLCAvXig/OjFcXCspL2ksIC9eKD86XFx8b1xcYikvaSwgL14oPzp6ZXJvIG9yIG9uZVxcYikvaSwgL14oPzp6ZXJvIG9yIG1vcmVcXGIpL2ksIC9eKD86emVybyBvciBtYW55XFxiKS9pLCAvXig/OjBcXCspL2ksIC9eKD86XFx9b1xcYikvaSwgL14oPzptYW55XFwoMFxcKSkvaSwgL14oPzptYW55XFwoMVxcKSkvaSwgL14oPzptYW55XFxiKS9pLCAvXig/OlxcfVxcfCkvaSwgL14oPzpvbmVcXGIpL2ksIC9eKD86b25seSBvbmVcXGIpL2ksIC9eKD86MVxcYikvaSwgL14oPzpcXHxcXHwpL2ksIC9eKD86b1xcfCkvaSwgL14oPzpvXFx7KS9pLCAvXig/OlxcfFxceykvaSwgL14oPzpcXHMqdVxcYikvaSwgL14oPzpcXC5cXC4pL2ksIC9eKD86LS0pL2ksIC9eKD86dG9cXGIpL2ksIC9eKD86b3B0aW9uYWxseSB0b1xcYikvaSwgL14oPzpcXC4tKS9pLCAvXig/Oi1cXC4pL2ksIC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVxcLV9dKikvaSwgL14oPzouKS9pLCAvXig/OiQpL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs1LCA2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFszXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsxXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJibG9ja1wiOiB7IFwicnVsZXNcIjogWzE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAyLCA0LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBlckRpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2VyL2VyRGIuanNcbnZhciBlbnRpdGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgcmVsYXRpb25zaGlwcyA9IFtdO1xudmFyIENhcmRpbmFsaXR5ID0ge1xuICBaRVJPX09SX09ORTogXCJaRVJPX09SX09ORVwiLFxuICBaRVJPX09SX01PUkU6IFwiWkVST19PUl9NT1JFXCIsXG4gIE9ORV9PUl9NT1JFOiBcIk9ORV9PUl9NT1JFXCIsXG4gIE9OTFlfT05FOiBcIk9OTFlfT05FXCIsXG4gIE1EX1BBUkVOVDogXCJNRF9QQVJFTlRcIlxufTtcbnZhciBJZGVudGlmaWNhdGlvbiA9IHtcbiAgTk9OX0lERU5USUZZSU5HOiBcIk5PTl9JREVOVElGWUlOR1wiLFxuICBJREVOVElGWUlORzogXCJJREVOVElGWUlOR1wiXG59O1xudmFyIGFkZEVudGl0eSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obmFtZSwgYWxpYXMgPSB2b2lkIDApIHtcbiAgaWYgKCFlbnRpdGllcy5oYXMobmFtZSkpIHtcbiAgICBlbnRpdGllcy5zZXQobmFtZSwgeyBhdHRyaWJ1dGVzOiBbXSwgYWxpYXMgfSk7XG4gICAgbG9nLmluZm8oXCJBZGRlZCBuZXcgZW50aXR5IDpcIiwgbmFtZSk7XG4gIH0gZWxzZSBpZiAoIWVudGl0aWVzLmdldChuYW1lKS5hbGlhcyAmJiBhbGlhcykge1xuICAgIGVudGl0aWVzLmdldChuYW1lKS5hbGlhcyA9IGFsaWFzO1xuICAgIGxvZy5pbmZvKGBBZGQgYWxpYXMgJyR7YWxpYXN9JyB0byBlbnRpdHkgJyR7bmFtZX0nYCk7XG4gIH1cbiAgcmV0dXJuIGVudGl0aWVzLmdldChuYW1lKTtcbn0sIFwiYWRkRW50aXR5XCIpO1xudmFyIGdldEVudGl0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBlbnRpdGllcywgXCJnZXRFbnRpdGllc1wiKTtcbnZhciBhZGRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbnRpdHlOYW1lLCBhdHRyaWJzKSB7XG4gIGxldCBlbnRpdHkgPSBhZGRFbnRpdHkoZW50aXR5TmFtZSk7XG4gIGxldCBpO1xuICBmb3IgKGkgPSBhdHRyaWJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgZW50aXR5LmF0dHJpYnV0ZXMucHVzaChhdHRyaWJzW2ldKTtcbiAgICBsb2cuZGVidWcoXCJBZGRlZCBhdHRyaWJ1dGUgXCIsIGF0dHJpYnNbaV0uYXR0cmlidXRlTmFtZSk7XG4gIH1cbn0sIFwiYWRkQXR0cmlidXRlc1wiKTtcbnZhciBhZGRSZWxhdGlvbnNoaXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVudEEsIHJvbEEsIGVudEIsIHJTcGVjKSB7XG4gIGxldCByZWwgPSB7XG4gICAgZW50aXR5QTogZW50QSxcbiAgICByb2xlQTogcm9sQSxcbiAgICBlbnRpdHlCOiBlbnRCLFxuICAgIHJlbFNwZWM6IHJTcGVjXG4gIH07XG4gIHJlbGF0aW9uc2hpcHMucHVzaChyZWwpO1xuICBsb2cuZGVidWcoXCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDpcIiwgcmVsKTtcbn0sIFwiYWRkUmVsYXRpb25zaGlwXCIpO1xudmFyIGdldFJlbGF0aW9uc2hpcHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHJlbGF0aW9uc2hpcHMsIFwiZ2V0UmVsYXRpb25zaGlwc1wiKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBlbnRpdGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHJlbGF0aW9uc2hpcHMgPSBbXTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZXJEYl9kZWZhdWx0ID0ge1xuICBDYXJkaW5hbGl0eSxcbiAgSWRlbnRpZmljYXRpb24sXG4gIGdldENvbmZpZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBnZXRDb25maWcoKS5lciwgXCJnZXRDb25maWdcIiksXG4gIGFkZEVudGl0eSxcbiAgYWRkQXR0cmlidXRlcyxcbiAgZ2V0RW50aXRpZXMsXG4gIGFkZFJlbGF0aW9uc2hpcCxcbiAgZ2V0UmVsYXRpb25zaGlwcyxcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvZXJSZW5kZXJlci5qc1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgbGluZSwgY3VydmVCYXNpcywgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBsYXlvdXQgYXMgZGFncmVMYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9lci9lck1hcmtlcnMuanNcbnZhciBFUk1hcmtlcnMgPSB7XG4gIE9OTFlfT05FX1NUQVJUOiBcIk9OTFlfT05FX1NUQVJUXCIsXG4gIE9OTFlfT05FX0VORDogXCJPTkxZX09ORV9FTkRcIixcbiAgWkVST19PUl9PTkVfU1RBUlQ6IFwiWkVST19PUl9PTkVfU1RBUlRcIixcbiAgWkVST19PUl9PTkVfRU5EOiBcIlpFUk9fT1JfT05FX0VORFwiLFxuICBPTkVfT1JfTU9SRV9TVEFSVDogXCJPTkVfT1JfTU9SRV9TVEFSVFwiLFxuICBPTkVfT1JfTU9SRV9FTkQ6IFwiT05FX09SX01PUkVfRU5EXCIsXG4gIFpFUk9fT1JfTU9SRV9TVEFSVDogXCJaRVJPX09SX01PUkVfU1RBUlRcIixcbiAgWkVST19PUl9NT1JFX0VORDogXCJaRVJPX09SX01PUkVfRU5EXCIsXG4gIE1EX1BBUkVOVF9FTkQ6IFwiTURfUEFSRU5UX0VORFwiLFxuICBNRF9QQVJFTlRfU1RBUlQ6IFwiTURfUEFSRU5UX1NUQVJUXCJcbn07XG52YXIgaW5zZXJ0TWFya2VycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgY29uZjIpIHtcbiAgbGV0IG1hcmtlcjtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCkuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDkpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMThcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5PTkxZX09ORV9FTkQpLmF0dHIoXCJyZWZYXCIsIDE4KS5hdHRyKFwicmVmWVwiLCA5KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTgpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwiZFwiLCBcIk0zLDAgTDMsMTggTTksMCBMOSwxOFwiKTtcbiAgbWFya2VyID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAwKS5hdHRyKFwicmVmWVwiLCA5KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMzApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpO1xuICBtYXJrZXIuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIndoaXRlXCIpLmF0dHIoXCJjeFwiLCAyMSkuYXR0cihcImN5XCIsIDkpLmF0dHIoXCJyXCIsIDYpO1xuICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTksMCBMOSwxOFwiKTtcbiAgbWFya2VyID0gZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLlpFUk9fT1JfT05FX0VORCkuYXR0cihcInJlZlhcIiwgMzApLmF0dHIoXCJyZWZZXCIsIDkpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAzMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAxOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDkpLmF0dHIoXCJjeVwiLCA5KS5hdHRyKFwiclwiLCA2KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKS5hdHRyKFwiZFwiLCBcIk0yMSwwIEwyMSwxOFwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAxOCkuYXR0cihcInJlZllcIiwgMTgpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA0NSkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAzNikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjdcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoXCJyZWZYXCIsIDI3KS5hdHRyKFwicmVmWVwiLCAxOCkuYXR0cihcIm1hcmtlcldpZHRoXCIsIDQ1KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDM2KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4XCIpO1xuICBtYXJrZXIgPSBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBFUk1hcmtlcnMuWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKFwicmVmWFwiLCAxOCkuYXR0cihcInJlZllcIiwgMTgpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA1NykuYXR0cihcIm1hcmtlckhlaWdodFwiLCAzNikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDQ4KS5hdHRyKFwiY3lcIiwgMTgpLmF0dHIoXCJyXCIsIDYpO1xuICBtYXJrZXIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwic3Ryb2tlXCIsIGNvbmYyLnN0cm9rZSkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJkXCIsIFwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMThcIik7XG4gIG1hcmtlciA9IGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIEVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EKS5hdHRyKFwicmVmWFwiLCAzOSkuYXR0cihcInJlZllcIiwgMTgpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA1NykuYXR0cihcIm1hcmtlckhlaWdodFwiLCAzNikuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIik7XG4gIG1hcmtlci5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBjb25mMi5zdHJva2UpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImN4XCIsIDkpLmF0dHIoXCJjeVwiLCAxOCkuYXR0cihcInJcIiwgNik7XG4gIG1hcmtlci5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgY29uZjIuc3Ryb2tlKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIikuYXR0cihcImRcIiwgXCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4XCIpO1xuICByZXR1cm47XG59LCBcImluc2VydE1hcmtlcnNcIik7XG52YXIgZXJNYXJrZXJzX2RlZmF1bHQgPSB7XG4gIEVSTWFya2VycyxcbiAgaW5zZXJ0TWFya2Vyc1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2VyL2VyUmVuZGVyZXIuanNcbmltcG9ydCB7IHY1IGFzIHV1aWQ1IH0gZnJvbSBcInV1aWRcIjtcbnZhciBCQURfSURfQ0hBUlNfUkVHRVhQID0gL1teXFxkQS1aYS16XShcXFcpKi9nO1xudmFyIGNvbmYgPSB7fTtcbnZhciBlbnRpdHlOYW1lSWRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbmYpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNuZik7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25mW2tleV0gPSBjbmZba2V5XTtcbiAgfVxufSwgXCJzZXRDb25mXCIpO1xudmFyIGRyYXdBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JvdXBOb2RlLCBlbnRpdHlUZXh0Tm9kZSwgYXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBoZWlnaHRQYWRkaW5nID0gY29uZi5lbnRpdHlQYWRkaW5nIC8gMztcbiAgY29uc3Qgd2lkdGhQYWRkaW5nID0gY29uZi5lbnRpdHlQYWRkaW5nIC8gMztcbiAgY29uc3QgYXR0ckZvbnRTaXplID0gY29uZi5mb250U2l6ZSAqIDAuODU7XG4gIGNvbnN0IGxhYmVsQkJveCA9IGVudGl0eVRleHROb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IGF0dHJpYnV0ZU5vZGVzID0gW107XG4gIGxldCBoYXNLZXlUeXBlID0gZmFsc2U7XG4gIGxldCBoYXNDb21tZW50ID0gZmFsc2U7XG4gIGxldCBtYXhUeXBlV2lkdGggPSAwO1xuICBsZXQgbWF4TmFtZVdpZHRoID0gMDtcbiAgbGV0IG1heEtleVdpZHRoID0gMDtcbiAgbGV0IG1heENvbW1lbnRXaWR0aCA9IDA7XG4gIGxldCBjdW11bGF0aXZlSGVpZ2h0ID0gbGFiZWxCQm94LmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyO1xuICBsZXQgYXR0ck51bSA9IDE7XG4gIGF0dHJpYnV0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0ICE9PSB2b2lkIDAgJiYgaXRlbS5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBoYXNLZXlUeXBlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uYXR0cmlidXRlQ29tbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgICBoYXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBhdHRyaWJ1dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBjb25zdCBhdHRyUHJlZml4ID0gYCR7ZW50aXR5VGV4dE5vZGUubm9kZSgpLmlkfS1hdHRyLSR7YXR0ck51bX1gO1xuICAgIGxldCBub2RlSGVpZ2h0ID0gMDtcbiAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gcGFyc2VHZW5lcmljVHlwZXMoaXRlbS5hdHRyaWJ1dGVUeXBlKTtcbiAgICBjb25zdCB0eXBlTm9kZSA9IGdyb3VwTm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJlciBlbnRpdHlMYWJlbFwiLCB0cnVlKS5hdHRyKFwiaWRcIiwgYCR7YXR0clByZWZpeH0tdHlwZWApLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLnN0eWxlKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImxlZnRcIikuc3R5bGUoXCJmb250LWZhbWlseVwiLCBnZXRDb25maWcoKS5mb250RmFtaWx5KS5zdHlsZShcImZvbnQtc2l6ZVwiLCBhdHRyRm9udFNpemUgKyBcInB4XCIpLnRleHQoYXR0cmlidXRlVHlwZSk7XG4gICAgY29uc3QgbmFtZU5vZGUgPSBncm91cE5vZGUuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiZXIgZW50aXR5TGFiZWxcIiwgdHJ1ZSkuYXR0cihcImlkXCIsIGAke2F0dHJQcmVmaXh9LW5hbWVgKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5zdHlsZShcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJsZWZ0XCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgYXR0ckZvbnRTaXplICsgXCJweFwiKS50ZXh0KGl0ZW0uYXR0cmlidXRlTmFtZSk7XG4gICAgY29uc3QgYXR0cmlidXRlTm9kZSA9IHt9O1xuICAgIGF0dHJpYnV0ZU5vZGUudG4gPSB0eXBlTm9kZTtcbiAgICBhdHRyaWJ1dGVOb2RlLm5uID0gbmFtZU5vZGU7XG4gICAgY29uc3QgdHlwZUJCb3ggPSB0eXBlTm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGNvbnN0IG5hbWVCQm94ID0gbmFtZU5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgICBtYXhUeXBlV2lkdGggPSBNYXRoLm1heChtYXhUeXBlV2lkdGgsIHR5cGVCQm94LndpZHRoKTtcbiAgICBtYXhOYW1lV2lkdGggPSBNYXRoLm1heChtYXhOYW1lV2lkdGgsIG5hbWVCQm94LndpZHRoKTtcbiAgICBub2RlSGVpZ2h0ID0gTWF0aC5tYXgodHlwZUJCb3guaGVpZ2h0LCBuYW1lQkJveC5oZWlnaHQpO1xuICAgIGlmIChoYXNLZXlUeXBlKSB7XG4gICAgICBjb25zdCBrZXlUeXBlTm9kZVRleHQgPSBpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0ICE9PSB2b2lkIDAgPyBpdGVtLmF0dHJpYnV0ZUtleVR5cGVMaXN0LmpvaW4oXCIsXCIpIDogXCJcIjtcbiAgICAgIGNvbnN0IGtleVR5cGVOb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCBgJHthdHRyUHJlZml4fS1rZXlgKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5zdHlsZShcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJsZWZ0XCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgYXR0ckZvbnRTaXplICsgXCJweFwiKS50ZXh0KGtleVR5cGVOb2RlVGV4dCk7XG4gICAgICBhdHRyaWJ1dGVOb2RlLmtuID0ga2V5VHlwZU5vZGU7XG4gICAgICBjb25zdCBrZXlUeXBlQkJveCA9IGtleVR5cGVOb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICBtYXhLZXlXaWR0aCA9IE1hdGgubWF4KG1heEtleVdpZHRoLCBrZXlUeXBlQkJveC53aWR0aCk7XG4gICAgICBub2RlSGVpZ2h0ID0gTWF0aC5tYXgobm9kZUhlaWdodCwga2V5VHlwZUJCb3guaGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKGhhc0NvbW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gZ3JvdXBOb2RlLmFwcGVuZChcInRleHRcIikuY2xhc3NlZChcImVyIGVudGl0eUxhYmVsXCIsIHRydWUpLmF0dHIoXCJpZFwiLCBgJHthdHRyUHJlZml4fS1jb21tZW50YCkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibGVmdFwiKS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGdldENvbmZpZygpLmZvbnRGYW1pbHkpLnN0eWxlKFwiZm9udC1zaXplXCIsIGF0dHJGb250U2l6ZSArIFwicHhcIikudGV4dChpdGVtLmF0dHJpYnV0ZUNvbW1lbnQgfHwgXCJcIik7XG4gICAgICBhdHRyaWJ1dGVOb2RlLmNuID0gY29tbWVudE5vZGU7XG4gICAgICBjb25zdCBjb21tZW50Tm9kZUJCb3ggPSBjb21tZW50Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgbWF4Q29tbWVudFdpZHRoID0gTWF0aC5tYXgobWF4Q29tbWVudFdpZHRoLCBjb21tZW50Tm9kZUJCb3gud2lkdGgpO1xuICAgICAgbm9kZUhlaWdodCA9IE1hdGgubWF4KG5vZGVIZWlnaHQsIGNvbW1lbnROb2RlQkJveC5oZWlnaHQpO1xuICAgIH1cbiAgICBhdHRyaWJ1dGVOb2RlLmhlaWdodCA9IG5vZGVIZWlnaHQ7XG4gICAgYXR0cmlidXRlTm9kZXMucHVzaChhdHRyaWJ1dGVOb2RlKTtcbiAgICBjdW11bGF0aXZlSGVpZ2h0ICs9IG5vZGVIZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMjtcbiAgICBhdHRyTnVtICs9IDE7XG4gIH0pO1xuICBsZXQgd2lkdGhQYWRkaW5nRmFjdG9yID0gNDtcbiAgaWYgKGhhc0tleVR5cGUpIHtcbiAgICB3aWR0aFBhZGRpbmdGYWN0b3IgKz0gMjtcbiAgfVxuICBpZiAoaGFzQ29tbWVudCkge1xuICAgIHdpZHRoUGFkZGluZ0ZhY3RvciArPSAyO1xuICB9XG4gIGNvbnN0IG1heFdpZHRoID0gbWF4VHlwZVdpZHRoICsgbWF4TmFtZVdpZHRoICsgbWF4S2V5V2lkdGggKyBtYXhDb21tZW50V2lkdGg7XG4gIGNvbnN0IGJCb3ggPSB7XG4gICAgd2lkdGg6IE1hdGgubWF4KFxuICAgICAgY29uZi5taW5FbnRpdHlXaWR0aCxcbiAgICAgIE1hdGgubWF4KFxuICAgICAgICBsYWJlbEJCb3gud2lkdGggKyBjb25mLmVudGl0eVBhZGRpbmcgKiAyLFxuICAgICAgICBtYXhXaWR0aCArIHdpZHRoUGFkZGluZyAqIHdpZHRoUGFkZGluZ0ZhY3RvclxuICAgICAgKVxuICAgICksXG4gICAgaGVpZ2h0OiBhdHRyaWJ1dGVzLmxlbmd0aCA+IDAgPyBjdW11bGF0aXZlSGVpZ2h0IDogTWF0aC5tYXgoY29uZi5taW5FbnRpdHlIZWlnaHQsIGxhYmVsQkJveC5oZWlnaHQgKyBjb25mLmVudGl0eVBhZGRpbmcgKiAyKVxuICB9O1xuICBpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc3BhcmVDb2x1bW5XaWR0aCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIChiQm94LndpZHRoIC0gbWF4V2lkdGggLSB3aWR0aFBhZGRpbmcgKiB3aWR0aFBhZGRpbmdGYWN0b3IpIC8gKHdpZHRoUGFkZGluZ0ZhY3RvciAvIDIpXG4gICAgKTtcbiAgICBlbnRpdHlUZXh0Tm9kZS5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIFwidHJhbnNsYXRlKFwiICsgYkJveC53aWR0aCAvIDIgKyBcIixcIiArIChoZWlnaHRQYWRkaW5nICsgbGFiZWxCQm94LmhlaWdodCAvIDIpICsgXCIpXCJcbiAgICApO1xuICAgIGxldCBoZWlnaHRPZmZzZXQgPSBsYWJlbEJCb3guaGVpZ2h0ICsgaGVpZ2h0UGFkZGluZyAqIDI7XG4gICAgbGV0IGF0dHJpYlN0eWxlID0gXCJhdHRyaWJ1dGVCb3hPZGRcIjtcbiAgICBhdHRyaWJ1dGVOb2Rlcy5mb3JFYWNoKChhdHRyaWJ1dGVOb2RlKSA9PiB7XG4gICAgICBjb25zdCBhbGlnblkgPSBoZWlnaHRPZmZzZXQgKyBoZWlnaHRQYWRkaW5nICsgYXR0cmlidXRlTm9kZS5oZWlnaHQgLyAyO1xuICAgICAgYXR0cmlidXRlTm9kZS50bi5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgd2lkdGhQYWRkaW5nICsgXCIsXCIgKyBhbGlnblkgKyBcIilcIik7XG4gICAgICBjb25zdCB0eXBlUmVjdCA9IGdyb3VwTm9kZS5pbnNlcnQoXCJyZWN0XCIsIFwiI1wiICsgYXR0cmlidXRlTm9kZS50bi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7YXR0cmliU3R5bGV9YCwgdHJ1ZSkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgaGVpZ2h0T2Zmc2V0KS5hdHRyKFwid2lkdGhcIiwgbWF4VHlwZVdpZHRoICsgd2lkdGhQYWRkaW5nICogMiArIHNwYXJlQ29sdW1uV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgYXR0cmlidXRlTm9kZS5oZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMik7XG4gICAgICBjb25zdCBuYW1lWE9mZnNldCA9IHBhcnNlRmxvYXQodHlwZVJlY3QuYXR0cihcInhcIikpICsgcGFyc2VGbG9hdCh0eXBlUmVjdC5hdHRyKFwid2lkdGhcIikpO1xuICAgICAgYXR0cmlidXRlTm9kZS5ubi5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArIChuYW1lWE9mZnNldCArIHdpZHRoUGFkZGluZykgKyBcIixcIiArIGFsaWduWSArIFwiKVwiXG4gICAgICApO1xuICAgICAgY29uc3QgbmFtZVJlY3QgPSBncm91cE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGF0dHJpYnV0ZU5vZGUubm4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2F0dHJpYlN0eWxlfWAsIHRydWUpLmF0dHIoXCJ4XCIsIG5hbWVYT2Zmc2V0KS5hdHRyKFwieVwiLCBoZWlnaHRPZmZzZXQpLmF0dHIoXCJ3aWR0aFwiLCBtYXhOYW1lV2lkdGggKyB3aWR0aFBhZGRpbmcgKiAyICsgc3BhcmVDb2x1bW5XaWR0aCkuYXR0cihcImhlaWdodFwiLCBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyKTtcbiAgICAgIGxldCBrZXlUeXBlQW5kQ29tbWVudFhPZmZzZXQgPSBwYXJzZUZsb2F0KG5hbWVSZWN0LmF0dHIoXCJ4XCIpKSArIHBhcnNlRmxvYXQobmFtZVJlY3QuYXR0cihcIndpZHRoXCIpKTtcbiAgICAgIGlmIChoYXNLZXlUeXBlKSB7XG4gICAgICAgIGF0dHJpYnV0ZU5vZGUua24uYXR0cihcbiAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGtleVR5cGVBbmRDb21tZW50WE9mZnNldCArIHdpZHRoUGFkZGluZykgKyBcIixcIiArIGFsaWduWSArIFwiKVwiXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleVR5cGVSZWN0ID0gZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBhdHRyaWJ1dGVOb2RlLmtuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthdHRyaWJTdHlsZX1gLCB0cnVlKS5hdHRyKFwieFwiLCBrZXlUeXBlQW5kQ29tbWVudFhPZmZzZXQpLmF0dHIoXCJ5XCIsIGhlaWdodE9mZnNldCkuYXR0cihcIndpZHRoXCIsIG1heEtleVdpZHRoICsgd2lkdGhQYWRkaW5nICogMiArIHNwYXJlQ29sdW1uV2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgYXR0cmlidXRlTm9kZS5oZWlnaHQgKyBoZWlnaHRQYWRkaW5nICogMik7XG4gICAgICAgIGtleVR5cGVBbmRDb21tZW50WE9mZnNldCA9IHBhcnNlRmxvYXQoa2V5VHlwZVJlY3QuYXR0cihcInhcIikpICsgcGFyc2VGbG9hdChrZXlUeXBlUmVjdC5hdHRyKFwid2lkdGhcIikpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc0NvbW1lbnQpIHtcbiAgICAgICAgYXR0cmlidXRlTm9kZS5jbi5hdHRyKFxuICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoa2V5VHlwZUFuZENvbW1lbnRYT2Zmc2V0ICsgd2lkdGhQYWRkaW5nKSArIFwiLFwiICsgYWxpZ25ZICsgXCIpXCJcbiAgICAgICAgKTtcbiAgICAgICAgZ3JvdXBOb2RlLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBhdHRyaWJ1dGVOb2RlLmNuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthdHRyaWJTdHlsZX1gLCBcInRydWVcIikuYXR0cihcInhcIiwga2V5VHlwZUFuZENvbW1lbnRYT2Zmc2V0KS5hdHRyKFwieVwiLCBoZWlnaHRPZmZzZXQpLmF0dHIoXCJ3aWR0aFwiLCBtYXhDb21tZW50V2lkdGggKyB3aWR0aFBhZGRpbmcgKiAyICsgc3BhcmVDb2x1bW5XaWR0aCkuYXR0cihcImhlaWdodFwiLCBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyKTtcbiAgICAgIH1cbiAgICAgIGhlaWdodE9mZnNldCArPSBhdHRyaWJ1dGVOb2RlLmhlaWdodCArIGhlaWdodFBhZGRpbmcgKiAyO1xuICAgICAgYXR0cmliU3R5bGUgPSBhdHRyaWJTdHlsZSA9PT0gXCJhdHRyaWJ1dGVCb3hPZGRcIiA/IFwiYXR0cmlidXRlQm94RXZlblwiIDogXCJhdHRyaWJ1dGVCb3hPZGRcIjtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiQm94LmhlaWdodCA9IE1hdGgubWF4KGNvbmYubWluRW50aXR5SGVpZ2h0LCBjdW11bGF0aXZlSGVpZ2h0KTtcbiAgICBlbnRpdHlUZXh0Tm9kZS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgYkJveC53aWR0aCAvIDIgKyBcIixcIiArIGJCb3guaGVpZ2h0IC8gMiArIFwiKVwiKTtcbiAgfVxuICByZXR1cm4gYkJveDtcbn0sIFwiZHJhd0F0dHJpYnV0ZXNcIik7XG52YXIgZHJhd0VudGl0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdmdOb2RlLCBlbnRpdGllczIsIGdyYXBoKSB7XG4gIGNvbnN0IGtleXMgPSBbLi4uZW50aXRpZXMyLmtleXMoKV07XG4gIGxldCBmaXJzdE9uZTtcbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGVudGl0eU5hbWUpIHtcbiAgICBjb25zdCBlbnRpdHlJZCA9IGdlbmVyYXRlSWQoZW50aXR5TmFtZSwgXCJlbnRpdHlcIik7XG4gICAgZW50aXR5TmFtZUlkcy5zZXQoZW50aXR5TmFtZSwgZW50aXR5SWQpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgZW50aXR5SWQpO1xuICAgIGZpcnN0T25lID0gZmlyc3RPbmUgPT09IHZvaWQgMCA/IGVudGl0eUlkIDogZmlyc3RPbmU7XG4gICAgY29uc3QgdGV4dElkID0gXCJ0ZXh0LVwiICsgZW50aXR5SWQ7XG4gICAgY29uc3QgdGV4dE5vZGUgPSBncm91cE5vZGUuYXBwZW5kKFwidGV4dFwiKS5jbGFzc2VkKFwiZXIgZW50aXR5TGFiZWxcIiwgdHJ1ZSkuYXR0cihcImlkXCIsIHRleHRJZCkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgZ2V0Q29uZmlnKCkuZm9udEZhbWlseSkuc3R5bGUoXCJmb250LXNpemVcIiwgY29uZi5mb250U2l6ZSArIFwicHhcIikudGV4dChlbnRpdGllczIuZ2V0KGVudGl0eU5hbWUpLmFsaWFzID8/IGVudGl0eU5hbWUpO1xuICAgIGNvbnN0IHsgd2lkdGg6IGVudGl0eVdpZHRoLCBoZWlnaHQ6IGVudGl0eUhlaWdodCB9ID0gZHJhd0F0dHJpYnV0ZXMoXG4gICAgICBncm91cE5vZGUsXG4gICAgICB0ZXh0Tm9kZSxcbiAgICAgIGVudGl0aWVzMi5nZXQoZW50aXR5TmFtZSkuYXR0cmlidXRlc1xuICAgICk7XG4gICAgY29uc3QgcmVjdE5vZGUgPSBncm91cE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIHRleHRJZCkuY2xhc3NlZChcImVyIGVudGl0eUJveFwiLCB0cnVlKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS5hdHRyKFwid2lkdGhcIiwgZW50aXR5V2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgZW50aXR5SGVpZ2h0KTtcbiAgICBjb25zdCByZWN0QkJveCA9IHJlY3ROb2RlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgZ3JhcGguc2V0Tm9kZShlbnRpdHlJZCwge1xuICAgICAgd2lkdGg6IHJlY3RCQm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWN0QkJveC5oZWlnaHQsXG4gICAgICBzaGFwZTogXCJyZWN0XCIsXG4gICAgICBpZDogZW50aXR5SWRcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmaXJzdE9uZTtcbn0sIFwiZHJhd0VudGl0aWVzXCIpO1xudmFyIGFkanVzdEVudGl0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdmdOb2RlLCBncmFwaCkge1xuICBncmFwaC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIGlmICh2ICE9PSB2b2lkIDAgJiYgZ3JhcGgubm9kZSh2KSAhPT0gdm9pZCAwKSB7XG4gICAgICBzdmdOb2RlLnNlbGVjdChcIiNcIiArIHYpLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKSArIFwiLFwiICsgKGdyYXBoLm5vZGUodikueSAtIGdyYXBoLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0sIFwiYWRqdXN0RW50aXRpZXNcIik7XG52YXIgZ2V0RWRnZU5hbWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHJlbCkge1xuICByZXR1cm4gKHJlbC5lbnRpdHlBICsgcmVsLnJvbGVBICsgcmVsLmVudGl0eUIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcbn0sIFwiZ2V0RWRnZU5hbWVcIik7XG52YXIgYWRkUmVsYXRpb25zaGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocmVsYXRpb25zaGlwczIsIGcpIHtcbiAgcmVsYXRpb25zaGlwczIuZm9yRWFjaChmdW5jdGlvbihyKSB7XG4gICAgZy5zZXRFZGdlKFxuICAgICAgZW50aXR5TmFtZUlkcy5nZXQoci5lbnRpdHlBKSxcbiAgICAgIGVudGl0eU5hbWVJZHMuZ2V0KHIuZW50aXR5QiksXG4gICAgICB7IHJlbGF0aW9uc2hpcDogciB9LFxuICAgICAgZ2V0RWRnZU5hbWUocilcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIHJlbGF0aW9uc2hpcHMyO1xufSwgXCJhZGRSZWxhdGlvbnNoaXBzXCIpO1xudmFyIHJlbENudCA9IDA7XG52YXIgZHJhd1JlbGF0aW9uc2hpcEZyb21MYXlvdXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN2ZywgcmVsLCBnLCBpbnNlcnQsIGRpYWdPYmopIHtcbiAgcmVsQ250Kys7XG4gIGNvbnN0IGVkZ2UgPSBnLmVkZ2UoXG4gICAgZW50aXR5TmFtZUlkcy5nZXQocmVsLmVudGl0eUEpLFxuICAgIGVudGl0eU5hbWVJZHMuZ2V0KHJlbC5lbnRpdHlCKSxcbiAgICBnZXRFZGdlTmFtZShyZWwpXG4gICk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KS5jdXJ2ZShjdXJ2ZUJhc2lzKTtcbiAgY29uc3Qgc3ZnUGF0aCA9IHN2Zy5pbnNlcnQoXCJwYXRoXCIsIFwiI1wiICsgaW5zZXJ0KS5jbGFzc2VkKFwiZXIgcmVsYXRpb25zaGlwTGluZVwiLCB0cnVlKS5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24oZWRnZS5wb2ludHMpKS5zdHlsZShcInN0cm9rZVwiLCBjb25mLnN0cm9rZSkuc3R5bGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgaWYgKHJlbC5yZWxTcGVjLnJlbFR5cGUgPT09IGRpYWdPYmouZGIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjgsOFwiKTtcbiAgfVxuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIHN3aXRjaCAocmVsLnJlbFNwZWMuY2FyZEEpIHtcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjXCIgKyBlck1hcmtlcnNfZGVmYXVsdC5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EICsgXCIpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EICsgXCIpXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLk9ORV9PUl9NT1JFX0VORCArIFwiKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGlhZ09iai5kYi5DYXJkaW5hbGl0eS5PTkxZX09ORTpcbiAgICAgIHN2Z1BhdGguYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5PTkxZX09ORV9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOlxuICAgICAgc3ZnUGF0aC5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLk1EX1BBUkVOVF9FTkQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgfVxuICBzd2l0Y2ggKHJlbC5yZWxTcGVjLmNhcmRCKSB7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUICsgXCIpXCJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9TVEFSVCArIFwiKVwiXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkaWFnT2JqLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOlxuICAgICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZXJNYXJrZXJzX2RlZmF1bHQuRVJNYXJrZXJzLk9ORV9PUl9NT1JFX1NUQVJUICsgXCIpXCJcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRpYWdPYmouZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5PTkxZX09ORV9TVEFSVCArIFwiKVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGlhZ09iai5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6XG4gICAgICBzdmdQYXRoLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGVyTWFya2Vyc19kZWZhdWx0LkVSTWFya2Vycy5NRF9QQVJFTlRfU1RBUlQgKyBcIilcIik7XG4gICAgICBicmVhaztcbiAgfVxuICBjb25zdCBsZW4gPSBzdmdQYXRoLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpO1xuICBjb25zdCBsYWJlbFBvaW50ID0gc3ZnUGF0aC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChsZW4gKiAwLjUpO1xuICBjb25zdCBsYWJlbElkID0gXCJyZWxcIiArIHJlbENudDtcbiAgY29uc3QgbGFiZWxUZXh0ID0gcmVsLnJvbGVBLnNwbGl0KC88YnIgP1xcLz4vZyk7XG4gIGNvbnN0IGxhYmVsTm9kZSA9IHN2Zy5hcHBlbmQoXCJ0ZXh0XCIpLmNsYXNzZWQoXCJlciByZWxhdGlvbnNoaXBMYWJlbFwiLCB0cnVlKS5hdHRyKFwiaWRcIiwgbGFiZWxJZCkuYXR0cihcInhcIiwgbGFiZWxQb2ludC54KS5hdHRyKFwieVwiLCBsYWJlbFBvaW50LnkpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikuc3R5bGUoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtZmFtaWx5XCIsIGdldENvbmZpZygpLmZvbnRGYW1pbHkpLnN0eWxlKFwiZm9udC1zaXplXCIsIGNvbmYuZm9udFNpemUgKyBcInB4XCIpO1xuICBpZiAobGFiZWxUZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgbGFiZWxOb2RlLnRleHQocmVsLnJvbGVBKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaXJzdFNoaWZ0ID0gLShsYWJlbFRleHQubGVuZ3RoIC0gMSkgKiAwLjU7XG4gICAgbGFiZWxUZXh0LmZvckVhY2goKHR4dCwgaSkgPT4ge1xuICAgICAgbGFiZWxOb2RlLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIGxhYmVsUG9pbnQueCkuYXR0cihcImR5XCIsIGAke2kgPT09IDAgPyBmaXJzdFNoaWZ0IDogMX1lbWApLnRleHQodHh0KTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBsYWJlbEJCb3ggPSBsYWJlbE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgc3ZnLmluc2VydChcInJlY3RcIiwgXCIjXCIgKyBsYWJlbElkKS5jbGFzc2VkKFwiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3hcIiwgdHJ1ZSkuYXR0cihcInhcIiwgbGFiZWxQb2ludC54IC0gbGFiZWxCQm94LndpZHRoIC8gMikuYXR0cihcInlcIiwgbGFiZWxQb2ludC55IC0gbGFiZWxCQm94LmhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBsYWJlbEJCb3gud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgbGFiZWxCQm94LmhlaWdodCk7XG59LCBcImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0XCIpO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25mID0gZ2V0Q29uZmlnKCkuZXI7XG4gIGxvZy5pbmZvKFwiRHJhd2luZyBFUiBkaWFncmFtXCIpO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICBlck1hcmtlcnNfZGVmYXVsdC5pbnNlcnRNYXJrZXJzKHN2ZywgY29uZik7XG4gIGxldCBnO1xuICBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGRpcmVjdGVkOiB0cnVlLFxuICAgIGNvbXBvdW5kOiBmYWxzZVxuICB9KS5zZXRHcmFwaCh7XG4gICAgcmFua2RpcjogY29uZi5sYXlvdXREaXJlY3Rpb24sXG4gICAgbWFyZ2lueDogMjAsXG4gICAgbWFyZ2lueTogMjAsXG4gICAgbm9kZXNlcDogMTAwLFxuICAgIGVkZ2VzZXA6IDEwMCxcbiAgICByYW5rc2VwOiAxMDBcbiAgfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge307XG4gIH0pO1xuICBjb25zdCBmaXJzdEVudGl0eSA9IGRyYXdFbnRpdGllcyhzdmcsIGRpYWdPYmouZGIuZ2V0RW50aXRpZXMoKSwgZyk7XG4gIGNvbnN0IHJlbGF0aW9uc2hpcHMyID0gYWRkUmVsYXRpb25zaGlwcyhkaWFnT2JqLmRiLmdldFJlbGF0aW9uc2hpcHMoKSwgZyk7XG4gIGRhZ3JlTGF5b3V0KGcpO1xuICBhZGp1c3RFbnRpdGllcyhzdmcsIGcpO1xuICByZWxhdGlvbnNoaXBzMi5mb3JFYWNoKGZ1bmN0aW9uKHJlbCkge1xuICAgIGRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0KHN2ZywgcmVsLCBnLCBmaXJzdEVudGl0eSwgZGlhZ09iaik7XG4gIH0pO1xuICBjb25zdCBwYWRkaW5nID0gY29uZi5kaWFncmFtUGFkZGluZztcbiAgdXRpbHNfZGVmYXVsdC5pbnNlcnRUaXRsZShzdmcsIFwiZW50aXR5VGl0bGVUZXh0XCIsIGNvbmYudGl0bGVUb3BNYXJnaW4sIGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO1xuICBjb25zdCBzdmdCb3VuZHMgPSBzdmcubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgd2lkdGggPSBzdmdCb3VuZHMud2lkdGggKyBwYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgaGVpZ2h0LCB3aWR0aCwgY29uZi51c2VNYXhXaWR0aCk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBgJHtzdmdCb3VuZHMueCAtIHBhZGRpbmd9ICR7c3ZnQm91bmRzLnkgLSBwYWRkaW5nfSAke3dpZHRofSAke2hlaWdodH1gKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBNRVJNQUlEX0VSRElBR1JBTV9VVUlEID0gXCIyOGU5ZjlkYi0zYzhkLTVhYTUtOWZhZi00NDI4NmFlNTkzN2NcIjtcbmZ1bmN0aW9uIGdlbmVyYXRlSWQoc3RyID0gXCJcIiwgcHJlZml4ID0gXCJcIikge1xuICBjb25zdCBzaW1wbGlmaWVkU3RyID0gc3RyLnJlcGxhY2UoQkFEX0lEX0NIQVJTX1JFR0VYUCwgXCJcIik7XG4gIHJldHVybiBgJHtzdHJXaXRoSHlwaGVuKHByZWZpeCl9JHtzdHJXaXRoSHlwaGVuKHNpbXBsaWZpZWRTdHIpfSR7dXVpZDUoXG4gICAgc3RyLFxuICAgIE1FUk1BSURfRVJESUFHUkFNX1VVSURcbiAgKX1gO1xufVxuX19uYW1lKGdlbmVyYXRlSWQsIFwiZ2VuZXJhdGVJZFwiKTtcbmZ1bmN0aW9uIHN0cldpdGhIeXBoZW4oc3RyID0gXCJcIikge1xuICByZXR1cm4gc3RyLmxlbmd0aCA+IDAgPyBgJHtzdHJ9LWAgOiBcIlwiO1xufVxuX19uYW1lKHN0cldpdGhIeXBoZW4sIFwic3RyV2l0aEh5cGhlblwiKTtcbnZhciBlclJlbmRlcmVyX2RlZmF1bHQgPSB7XG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9lci9zdHlsZXMuanNcbnZhciBnZXRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zKSA9PiBgXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hPZGQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveEV2ZW4ge1xuICAgIGZpbGw6ICAke29wdGlvbnMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIH1cblxuICAucmVsYXRpb25zaGlwTGFiZWxCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50ZXJ0aWFyeUNvbG9yfTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLnRlcnRpYXJ5Q29sb3J9O1xuICAgICAgcmVjdCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIH1cbiAgfVxuXG4gICAgLnJlbGF0aW9uc2hpcExpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICB9XG5cbiAgLmVudGl0eVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH0gICAgXG4gICNNRF9QQVJFTlRfU1RBUlQge1xuICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gICNNRF9QQVJFTlRfRU5EIHtcbiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgfVxuICBcbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvZXJEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBlckRpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IGVyRGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IGVyUmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIF9fbmFtZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NvbW1vbi9wb3B1bGF0ZUNvbW1vbkRiLnRzXG5mdW5jdGlvbiBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIpIHtcbiAgaWYgKGFzdC5hY2NEZXNjcikge1xuICAgIGRiLnNldEFjY0Rlc2NyaXB0aW9uPy4oYXN0LmFjY0Rlc2NyKTtcbiAgfVxuICBpZiAoYXN0LmFjY1RpdGxlKSB7XG4gICAgZGIuc2V0QWNjVGl0bGU/Lihhc3QuYWNjVGl0bGUpO1xuICB9XG4gIGlmIChhc3QudGl0bGUpIHtcbiAgICBkYi5zZXREaWFncmFtVGl0bGU/Lihhc3QudGl0bGUpO1xuICB9XG59XG5fX25hbWUocG9wdWxhdGVDb21tb25EYiwgXCJwb3B1bGF0ZUNvbW1vbkRiXCIpO1xuXG5leHBvcnQge1xuICBwb3B1bGF0ZUNvbW1vbkRiXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy91dGlscy9pbXBlcmF0aXZlU3RhdGUudHNcbnZhciBJbXBlcmF0aXZlU3RhdGUgPSBjbGFzcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gaW5pdCAtIEZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgZGVmYXVsdCBzdGF0ZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGluaXQpIHtcbiAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIHRoaXMucmVjb3JkcyA9IHRoaXMuaW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiSW1wZXJhdGl2ZVN0YXRlXCIpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMucmVjb3JkcyA9IHRoaXMuaW5pdCgpO1xuICB9XG59O1xuXG5leHBvcnQge1xuICBJbXBlcmF0aXZlU3RhdGVcbn07XG4iLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzdE5vZGUob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqLiR0eXBlID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmouJHJlZlRleHQgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN0Tm9kZURlc2NyaXB0aW9uKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGxcbiAgICAgICAgJiYgdHlwZW9mIG9iai5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAmJiB0eXBlb2Ygb2JqLnR5cGUgPT09ICdzdHJpbmcnXG4gICAgICAgICYmIHR5cGVvZiBvYmoucGF0aCA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNMaW5raW5nRXJyb3Iob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbFxuICAgICAgICAmJiBpc0FzdE5vZGUob2JqLmNvbnRhaW5lcilcbiAgICAgICAgJiYgaXNSZWZlcmVuY2Uob2JqLnJlZmVyZW5jZSlcbiAgICAgICAgJiYgdHlwZW9mIG9iai5tZXNzYWdlID09PSAnc3RyaW5nJztcbn1cbi8qKlxuICogQW4gYWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBc3RSZWZsZWN0aW9ufSBpbnRlcmZhY2UuXG4gKiBTZXJ2ZXMgdG8gY2FjaGUgc3VidHlwZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgdGhyb3VnaG91dCBkaWZmZXJlbnQgcGFydHMgb2YgTGFuZ2l1bS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0QXN0UmVmbGVjdGlvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3VidHlwZXMgPSB7fTtcbiAgICAgICAgdGhpcy5hbGxTdWJ0eXBlcyA9IHt9O1xuICAgIH1cbiAgICBpc0luc3RhbmNlKG5vZGUsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGlzQXN0Tm9kZShub2RlKSAmJiB0aGlzLmlzU3VidHlwZShub2RlLiR0eXBlLCB0eXBlKTtcbiAgICB9XG4gICAgaXNTdWJ0eXBlKHN1YnR5cGUsIHN1cGVydHlwZSkge1xuICAgICAgICBpZiAoc3VidHlwZSA9PT0gc3VwZXJ0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmVzdGVkID0gdGhpcy5zdWJ0eXBlc1tzdWJ0eXBlXTtcbiAgICAgICAgaWYgKCFuZXN0ZWQpIHtcbiAgICAgICAgICAgIG5lc3RlZCA9IHRoaXMuc3VidHlwZXNbc3VidHlwZV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdGluZyA9IG5lc3RlZFtzdXBlcnR5cGVdO1xuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb21wdXRlSXNTdWJ0eXBlKHN1YnR5cGUsIHN1cGVydHlwZSk7XG4gICAgICAgICAgICBuZXN0ZWRbc3VwZXJ0eXBlXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QWxsU3ViVHlwZXModHlwZSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWxsU3VidHlwZXNbdHlwZV07XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWxsVHlwZXMgPSB0aGlzLmdldEFsbFR5cGVzKCk7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb3NzaWJsZVN1YlR5cGUgb2YgYWxsVHlwZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N1YnR5cGUocG9zc2libGVTdWJUeXBlLCB0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKHBvc3NpYmxlU3ViVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbGxTdWJ0eXBlc1t0eXBlXSA9IHR5cGVzO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9zaXRlQ3N0Tm9kZShub2RlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobm9kZS5jb250ZW50KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xlYWZDc3ROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGUgIT09IG51bGwgJiYgdHlwZW9mIG5vZGUudG9rZW5UeXBlID09PSAnb2JqZWN0Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Jvb3RDc3ROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gaXNDb21wb3NpdGVDc3ROb2RlKG5vZGUpICYmIHR5cGVvZiBub2RlLmZ1bGxUZXh0ID09PSAnc3RyaW5nJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN5bnRheC10cmVlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgU3RyZWFtYCB3b3JrcyB3aXRoIHR3byBpbnB1dCBmdW5jdGlvbnM6XG4gKiAgLSBUaGUgZmlyc3QgZnVuY3Rpb24gY3JlYXRlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhbiBpdGVyYXRpb24uXG4gKiAgLSBUaGUgc2Vjb25kIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnQgc3RhdGUgYXMgYXJndW1lbnQgYW5kIHJldHVybnMgYW4gYEl0ZXJhdG9yUmVzdWx0YC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0cmVhbUltcGwge1xuICAgIGNvbnN0cnVjdG9yKHN0YXJ0Rm4sIG5leHRGbikge1xuICAgICAgICB0aGlzLnN0YXJ0Rm4gPSBzdGFydEZuO1xuICAgICAgICB0aGlzLm5leHRGbiA9IG5leHRGbjtcbiAgICB9XG4gICAgaXRlcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhcnRGbigpLFxuICAgICAgICAgICAgbmV4dDogKCkgPT4gdGhpcy5uZXh0Rm4oaXRlcmF0b3Iuc3RhdGUpLFxuICAgICAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpID0+IGl0ZXJhdG9yXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpdGVyYXRvcjtcbiAgICB9XG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCk7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVyYXRvci5uZXh0KCkuZG9uZSk7XG4gICAgfVxuICAgIGNvdW50KCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAobmV4dC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV4dC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKCFuZXh0LmRvbmUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB0b1NldCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcyk7XG4gICAgfVxuICAgIHRvTWFwKGtleUZuLCB2YWx1ZUZuKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5U3RyZWFtID0gdGhpcy5tYXAoZWxlbWVudCA9PiBbXG4gICAgICAgICAgICBrZXlGbiA/IGtleUZuKGVsZW1lbnQpIDogZWxlbWVudCxcbiAgICAgICAgICAgIHZhbHVlRm4gPyB2YWx1ZUZuKGVsZW1lbnQpIDogZWxlbWVudFxuICAgICAgICBdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAoZW50cnlTdHJlYW0pO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9pbigpO1xuICAgIH1cbiAgICBjb25jYXQob3RoZXIpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBvdGhlcltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtSW1wbCgoKSA9PiAoeyBmaXJzdDogdGhpcy5zdGFydEZuKCksIGZpcnN0RG9uZTogZmFsc2UgfSksIHN0YXRlID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLmZpcnN0RG9uZSkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5uZXh0Rm4oc3RhdGUuZmlyc3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoIXJlc3VsdC5kb25lKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5maXJzdERvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAoIXJlc3VsdC5kb25lKTtcbiAgICAgICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGpvaW4oc2VwYXJhdG9yID0gJywnKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgbGV0IGFkZFNlcGFyYXRvciA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzZXBhcmF0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlICs9IHRvU3RyaW5nKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRTZXBhcmF0b3IgPSB0cnVlO1xuICAgICAgICB9IHdoaWxlICghcmVzdWx0LmRvbmUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGluZGV4T2Yoc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4ID0gMCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gZnJvbUluZGV4ICYmIG5leHQudmFsdWUgPT09IHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGV2ZXJ5KHByZWRpY2F0ZSkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShuZXh0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNvbWUocHJlZGljYXRlKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUobmV4dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3JFYWNoKGNhbGxiYWNrZm4pIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgY2FsbGJhY2tmbihuZXh0LnZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXAoY2FsbGJhY2tmbikge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwodGhpcy5zdGFydEZuLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHRoaXMubmV4dEZuKHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBjYWxsYmFja2ZuKHZhbHVlKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsdGVyKHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwodGhpcy5zdGFydEZuLCBzdGF0ZSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubmV4dEZuKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5kb25lICYmIHByZWRpY2F0ZShyZXN1bHQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAoIXJlc3VsdC5kb25lKTtcbiAgICAgICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbk51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZSA9PiBlICE9PSB1bmRlZmluZWQgJiYgZSAhPT0gbnVsbCk7XG4gICAgfVxuICAgIHJlZHVjZShjYWxsYmFja2ZuLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gbmV4dC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFja2ZuKHByZXZpb3VzVmFsdWUsIG5leHQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAgICB9XG4gICAgcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3Vyc2l2ZVJlZHVjZSh0aGlzLml0ZXJhdG9yKCksIGNhbGxiYWNrZm4sIGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIHJlY3Vyc2l2ZVJlZHVjZShpdGVyYXRvciwgY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMucmVjdXJzaXZlUmVkdWNlKGl0ZXJhdG9yLCBjYWxsYmFja2ZuLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2tmbihwcmV2aW91c1ZhbHVlLCBuZXh0LnZhbHVlKTtcbiAgICB9XG4gICAgZmluZChwcmVkaWNhdGUpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShuZXh0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kSW5kZXgocHJlZGljYXRlKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcigpO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUobmV4dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKG5leHQudmFsdWUgPT09IHNlYXJjaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmbGF0TWFwKGNhbGxiYWNrZm4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IHRoaXM6IHRoaXMuc3RhcnRGbigpIH0pLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaXRlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHN0YXRlLml0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSB0aGlzLm5leHRGbihzdGF0ZS50aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gY2FsbGJhY2tmbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0ZXJhYmxlKG1hcHBlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLml0ZXJhdG9yID0gbWFwcGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogbWFwcGVkIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzdGF0ZS5pdGVyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gRE9ORV9SRVNVTFQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmbGF0KGRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZXB0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlcHRoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGRlcHRoID4gMSA/IHRoaXMuZmxhdChkZXB0aCAtIDEpIDogdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IHRoaXM6IHN0cmVhbS5zdGFydEZuKCkgfSksIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pdGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gc3RhdGUuaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pdGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IHN0cmVhbS5uZXh0Rm4oc3RhdGUudGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3IgPSB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzdGF0ZS5pdGVyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gRE9ORV9SRVNVTFQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoZWFkKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gICAgdGFpbChza2lwQ291bnQgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtSW1wbCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhcnRGbigpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBza2lwQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm5leHRGbihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LCB0aGlzLm5leHRGbik7XG4gICAgfVxuICAgIGxpbWl0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IHNpemU6IDAsIHN0YXRlOiB0aGlzLnN0YXJ0Rm4oKSB9KSwgc3RhdGUgPT4ge1xuICAgICAgICAgICAgc3RhdGUuc2l6ZSsrO1xuICAgICAgICAgICAgaWYgKHN0YXRlLnNpemUgPiBtYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dEZuKHN0YXRlLnN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRpc3RpbmN0KGJ5KSB7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBieSA/IGJ5KGUpIDogZTtcbiAgICAgICAgICAgIGlmIChzZXQuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldC5hZGQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjbHVkZShvdGhlciwga2V5KSB7XG4gICAgICAgIGNvbnN0IG90aGVyS2V5U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb3RoZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ga2V5ID8ga2V5KGl0ZW0pIDogaXRlbTtcbiAgICAgICAgICAgIG90aGVyS2V5U2V0LmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3duS2V5ID0ga2V5ID8ga2V5KGUpIDogZTtcbiAgICAgICAgICAgIHJldHVybiAhb3RoZXJLZXlTZXQuaGFzKG93bktleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvU3RyaW5nKGl0ZW0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAodHlwZW9mIGl0ZW0udG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIGl0ZW0udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVtKTtcbn1cbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogQW4gZW1wdHkgc3RyZWFtIG9mIGFueSB0eXBlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUkVBTSA9IG5ldyBTdHJlYW1JbXBsKCgpID0+IHVuZGVmaW5lZCwgKCkgPT4gRE9ORV9SRVNVTFQpO1xuLyoqXG4gKiBVc2UgdGhpcyBgSXRlcmF0b3JSZXN1bHRgIHdoZW4gaW1wbGVtZW50aW5nIGEgYFN0cmVhbUltcGxgIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgZWxlbWVudHMgaW4gdGhlIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGNvbnN0IERPTkVfUkVTVUxUID0gT2JqZWN0LmZyZWV6ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmVhbSBmcm9tIG9uZSBvciBtb3JlIGl0ZXJhYmxlcyBvciBhcnJheS1saWtlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbSguLi5jb2xsZWN0aW9ucykge1xuICAgIGlmIChjb2xsZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zWzBdO1xuICAgICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIFN0cmVhbUltcGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwoKCkgPT4gY29sbGVjdGlvbltTeW1ib2wuaXRlcmF0b3JdKCksIChpdGVyYXRvcikgPT4gaXRlcmF0b3IubmV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNvbGxlY3Rpb24ubGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1JbXBsKCgpID0+ICh7IGluZGV4OiAwIH0pLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5kZXggPCBjb2xsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IGNvbGxlY3Rpb25bc3RhdGUuaW5kZXgrK10gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29sbGVjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwoKCkgPT4gKHsgY29sbEluZGV4OiAwLCBhcnJJbmRleDogMCB9KSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLml0ZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBzdGF0ZS5pdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pdGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hcnJJbmRleCA8IHN0YXRlLmFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBzdGF0ZS5hcnJheVtzdGF0ZS5hcnJJbmRleCsrXSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFycmF5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jb2xsSW5kZXggPCBjb2xsZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zW3N0YXRlLmNvbGxJbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSXRlcmFibGUoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLml0ZXJhdG9yID0gY29sbGVjdGlvbltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sbGVjdGlvbiAmJiB0eXBlb2YgY29sbGVjdGlvbi5sZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJheSA9IGNvbGxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzdGF0ZS5pdGVyYXRvciB8fCBzdGF0ZS5hcnJheSB8fCBzdGF0ZS5jb2xsSW5kZXggPCBjb2xsZWN0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZX1NUUkVBTTtcbn1cbi8qKlxuICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYFRyZWVTdHJlYW1gIHRha2VzIGEgcm9vdCBlbGVtZW50IGFuZCBhIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlXG4gKiBjaGlsZHJlbiBvZiBpdHMgYXJndW1lbnQuIFdoZXRoZXIgdGhlIHJvb3Qgbm9kZSBpbmNsdWRlZCBpbiB0aGUgc3RyZWFtIGlzIGNvbnRyb2xsZWQgd2l0aCB0aGVcbiAqIGBpbmNsdWRlUm9vdGAgb3B0aW9uLCB3aGljaCBkZWZhdWx0cyB0byBgZmFsc2VgLlxuICovXG5leHBvcnQgY2xhc3MgVHJlZVN0cmVhbUltcGwgZXh0ZW5kcyBTdHJlYW1JbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcihyb290LCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICAgICAgICBzdXBlcigoKSA9PiAoe1xuICAgICAgICAgICAgaXRlcmF0b3JzOiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmluY2x1ZGVSb290KSA/IFtbcm9vdF1bU3ltYm9sLml0ZXJhdG9yXSgpXSA6IFtjaGlsZHJlbihyb290KVtTeW1ib2wuaXRlcmF0b3JdKCldLFxuICAgICAgICAgICAgcHJ1bmVkOiBmYWxzZVxuICAgICAgICB9KSwgc3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnBydW5lZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLml0ZXJhdG9ycy5wb3AoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5wcnVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzdGF0ZS5pdGVyYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3JzW3N0YXRlLml0ZXJhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3JzLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXRlcmF0b3JzLnB1c2goY2hpbGRyZW4obmV4dC52YWx1ZSlbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIERPTkVfUkVTVUxUO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXRlcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhcnRGbigpLFxuICAgICAgICAgICAgbmV4dDogKCkgPT4gdGhpcy5uZXh0Rm4oaXRlcmF0b3Iuc3RhdGUpLFxuICAgICAgICAgICAgcHJ1bmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGF0ZS5wcnVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiBpdGVyYXRvclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXRlcmF0b3I7XG4gICAgfVxufVxuLyoqXG4gKiBBIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IHJlZHVjZSBhIHN0cmVhbSB0byBhIHNpbmdsZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHZhciBSZWR1Y3Rpb247XG4oZnVuY3Rpb24gKFJlZHVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIHN1bSBvZiBhIG51bWJlciBzdHJlYW0uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VtKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgIH1cbiAgICBSZWR1Y3Rpb24uc3VtID0gc3VtO1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIHByb2R1Y3Qgb2YgYSBudW1iZXIgc3RyZWFtLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb2R1Y3Qoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0ucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMCk7XG4gICAgfVxuICAgIFJlZHVjdGlvbi5wcm9kdWN0ID0gcHJvZHVjdDtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBtaW5pbXVtIG9mIGEgbnVtYmVyIHN0cmVhbS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgc3RyZWFtIGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1pbihzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKTtcbiAgICB9XG4gICAgUmVkdWN0aW9uLm1pbiA9IG1pbjtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBtYXhpbXVtIG9mIGEgbnVtYmVyIHN0cmVhbS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgc3RyZWFtIGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1heChzdHJlYW0pIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpKTtcbiAgICB9XG4gICAgUmVkdWN0aW9uLm1heCA9IG1heDtcbn0pKFJlZHVjdGlvbiB8fCAoUmVkdWN0aW9uID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmVhbS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGlzQ29tcG9zaXRlQ3N0Tm9kZSwgaXNMZWFmQ3N0Tm9kZSwgaXNSb290Q3N0Tm9kZSB9IGZyb20gJy4uL3N5bnRheC10cmVlLmpzJztcbmltcG9ydCB7IFRyZWVTdHJlYW1JbXBsIH0gZnJvbSAnLi9zdHJlYW0uanMnO1xuLyoqXG4gKiBDcmVhdGUgYSBzdHJlYW0gb2YgYWxsIENTVCBub2RlcyB0aGF0IGFyZSBkaXJlY3RseSBhbmQgaW5kaXJlY3RseSBjb250YWluZWQgaW4gdGhlIGdpdmVuIHJvb3Qgbm9kZSxcbiAqIGluY2x1ZGluZyB0aGUgcm9vdCBub2RlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUNzdChub2RlKSB7XG4gICAgcmV0dXJuIG5ldyBUcmVlU3RyZWFtSW1wbChub2RlLCBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGlzQ29tcG9zaXRlQ3N0Tm9kZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH0sIHsgaW5jbHVkZVJvb3Q6IHRydWUgfSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHN0cmVhbSBvZiBhbGwgbGVhZiBub2RlcyB0aGF0IGFyZSBkaXJlY3RseSBhbmQgaW5kaXJlY3RseSBjb250YWluZWQgaW4gdGhlIGdpdmVuIHJvb3Qgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5Dc3Qobm9kZSkge1xuICAgIHJldHVybiBzdHJlYW1Dc3Qobm9kZSkuZmlsdGVyKGlzTGVhZkNzdE5vZGUpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjc3Qgbm9kZSBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NoaWxkTm9kZShjaGlsZCwgcGFyZW50KSB7XG4gICAgd2hpbGUgKGNoaWxkLmNvbnRhaW5lcikge1xuICAgICAgICBjaGlsZCA9IGNoaWxkLmNvbnRhaW5lcjtcbiAgICAgICAgaWYgKGNoaWxkID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b2tlblRvUmFuZ2UodG9rZW4pIHtcbiAgICAvLyBDaGV2cm90YWluIHVzZXMgMS1iYXNlZCBpbmRpY2VzIGV2ZXJ5d2hlcmVcbiAgICAvLyBTbyB3ZSBzdWJ0cmFjdCAxIGZyb20gZXZlcnkgdmFsdWUgdG8gYWxpZ24gd2l0aCB0aGUgTFNQXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGNoYXJhY3RlcjogdG9rZW4uc3RhcnRDb2x1bW4gLSAxLFxuICAgICAgICAgICAgbGluZTogdG9rZW4uc3RhcnRMaW5lIC0gMVxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIGNoYXJhY3RlcjogdG9rZW4uZW5kQ29sdW1uLFxuICAgICAgICAgICAgbGluZTogdG9rZW4uZW5kTGluZSAtIDFcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Eb2N1bWVudFNlZ21lbnQobm9kZSkge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCB7IG9mZnNldCwgZW5kLCByYW5nZSB9ID0gbm9kZTtcbiAgICByZXR1cm4ge1xuICAgICAgICByYW5nZSxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBlbmQsXG4gICAgICAgIGxlbmd0aDogZW5kIC0gb2Zmc2V0XG4gICAgfTtcbn1cbmV4cG9ydCB2YXIgUmFuZ2VDb21wYXJpc29uO1xuKGZ1bmN0aW9uIChSYW5nZUNvbXBhcmlzb24pIHtcbiAgICBSYW5nZUNvbXBhcmlzb25bUmFuZ2VDb21wYXJpc29uW1wiQmVmb3JlXCJdID0gMF0gPSBcIkJlZm9yZVwiO1xuICAgIFJhbmdlQ29tcGFyaXNvbltSYW5nZUNvbXBhcmlzb25bXCJBZnRlclwiXSA9IDFdID0gXCJBZnRlclwiO1xuICAgIFJhbmdlQ29tcGFyaXNvbltSYW5nZUNvbXBhcmlzb25bXCJPdmVybGFwRnJvbnRcIl0gPSAyXSA9IFwiT3ZlcmxhcEZyb250XCI7XG4gICAgUmFuZ2VDb21wYXJpc29uW1JhbmdlQ29tcGFyaXNvbltcIk92ZXJsYXBCYWNrXCJdID0gM10gPSBcIk92ZXJsYXBCYWNrXCI7XG4gICAgUmFuZ2VDb21wYXJpc29uW1JhbmdlQ29tcGFyaXNvbltcIkluc2lkZVwiXSA9IDRdID0gXCJJbnNpZGVcIjtcbn0pKFJhbmdlQ29tcGFyaXNvbiB8fCAoUmFuZ2VDb21wYXJpc29uID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlUmFuZ2UocmFuZ2UsIHRvKSB7XG4gICAgaWYgKHJhbmdlLmVuZC5saW5lIDwgdG8uc3RhcnQubGluZSB8fCAocmFuZ2UuZW5kLmxpbmUgPT09IHRvLnN0YXJ0LmxpbmUgJiYgcmFuZ2UuZW5kLmNoYXJhY3RlciA8IHJhbmdlLnN0YXJ0LmNoYXJhY3RlcikpIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlQ29tcGFyaXNvbi5CZWZvcmU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmdlLnN0YXJ0LmxpbmUgPiB0by5lbmQubGluZSB8fCAocmFuZ2Uuc3RhcnQubGluZSA9PT0gdG8uZW5kLmxpbmUgJiYgcmFuZ2Uuc3RhcnQuY2hhcmFjdGVyID4gdG8uZW5kLmNoYXJhY3RlcikpIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlQ29tcGFyaXNvbi5BZnRlcjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRJbnNpZGUgPSByYW5nZS5zdGFydC5saW5lID4gdG8uc3RhcnQubGluZSB8fCAocmFuZ2Uuc3RhcnQubGluZSA9PT0gdG8uc3RhcnQubGluZSAmJiByYW5nZS5zdGFydC5jaGFyYWN0ZXIgPj0gdG8uc3RhcnQuY2hhcmFjdGVyKTtcbiAgICBjb25zdCBlbmRJbnNpZGUgPSByYW5nZS5lbmQubGluZSA8IHRvLmVuZC5saW5lIHx8IChyYW5nZS5lbmQubGluZSA9PT0gdG8uZW5kLmxpbmUgJiYgcmFuZ2UuZW5kLmNoYXJhY3RlciA8PSB0by5lbmQuY2hhcmFjdGVyKTtcbiAgICBpZiAoc3RhcnRJbnNpZGUgJiYgZW5kSW5zaWRlKSB7XG4gICAgICAgIHJldHVybiBSYW5nZUNvbXBhcmlzb24uSW5zaWRlO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdGFydEluc2lkZSkge1xuICAgICAgICByZXR1cm4gUmFuZ2VDb21wYXJpc29uLk92ZXJsYXBCYWNrO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJhbmdlQ29tcGFyaXNvbi5PdmVybGFwRnJvbnQ7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGluUmFuZ2UocmFuZ2UsIHRvKSB7XG4gICAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVSYW5nZShyYW5nZSwgdG8pO1xuICAgIHJldHVybiBjb21wYXJpc29uID4gUmFuZ2VDb21wYXJpc29uLkFmdGVyO1xufVxuLy8gVGhlIFxccHtMfSByZWdleCBtYXRjaGVzIGFueSB1bmljb2RlIGxldHRlciBjaGFyYWN0ZXIsIGkuZS4gY2hhcmFjdGVycyBmcm9tIG5vbi1lbmdsaXNoIGFscGhhYmV0c1xuLy8gVG9nZXRoZXIgd2l0aCBcXHcgaXQgbWF0Y2hlcyBhbnkga2luZCBvZiBjaGFyYWN0ZXIgd2hpY2ggY2FuIGNvbW1vbmx5IGFwcGVhciBpbiBJRHNcbmV4cG9ydCBjb25zdCBEZWZhdWx0TmFtZVJlZ2V4cCA9IC9eW1xcd1xccHtMfV0kL3U7XG4vKipcbiAqIFBlcmZvcm1zIGBmaW5kTGVhZk5vZGVBdE9mZnNldGAgd2l0aCBhIG1pbm9yIGRpZmZlcmVuY2U6IFdoZW4gZW5jb3VudGVyaW5nIGEgY2hhcmFjdGVyIHRoYXQgbWF0Y2hlcyB0aGUgYG5hbWVSZWdleHBgIGFyZ3VtZW50LFxuICogaXQgd2lsbCBpbnN0ZWFkIHJldHVybiB0aGUgbGVhZiBub2RlIGF0IHRoZSBgb2Zmc2V0IC0gMWAgcG9zaXRpb24uXG4gKlxuICogRm9yIExTUCBzZXJ2aWNlcywgdXNlcnMgZXhwZWN0IHRoYXQgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIGVsZW1lbnQgaXMgYXZhaWxhYmxlIGlmIHRoZSBjdXJzb3IgaXMgZGlyZWN0bHkgYWZ0ZXIgdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQoY3N0Tm9kZSwgb2Zmc2V0LCBuYW1lUmVnZXhwID0gRGVmYXVsdE5hbWVSZWdleHApIHtcbiAgICBpZiAoY3N0Tm9kZSkge1xuICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxPZmZzZXQgPSBvZmZzZXQgLSBjc3ROb2RlLm9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRBdE9mZnNldCA9IGNzdE5vZGUudGV4dC5jaGFyQXQobG9jYWxPZmZzZXQpO1xuICAgICAgICAgICAgaWYgKCFuYW1lUmVnZXhwLnRlc3QodGV4dEF0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIG9mZnNldC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5kTGVhZk5vZGVBdE9mZnNldChjc3ROb2RlLCBvZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb21tZW50Tm9kZShjc3ROb2RlLCBjb21tZW50TmFtZXMpIHtcbiAgICBpZiAoY3N0Tm9kZSkge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGdldFByZXZpb3VzTm9kZShjc3ROb2RlLCB0cnVlKTtcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIGlzQ29tbWVudE5vZGUocHJldmlvdXMsIGNvbW1lbnROYW1lcykpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSb290Q3N0Tm9kZShjc3ROb2RlKSkge1xuICAgICAgICAgICAgLy8gR28gZnJvbSB0aGUgZmlyc3Qgbm9uLWhpZGRlbiBub2RlIHRocm91Z2ggYWxsIG5vZGVzIGluIHJldmVyc2Ugb3JkZXJcbiAgICAgICAgICAgIC8vIFdlIGRvIHRoaXMgdG8gZmluZCB0aGUgY29tbWVudCBub2RlIHdoaWNoIGRpcmVjdGx5IHByZWNlZGVzIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gY3N0Tm9kZS5jb250ZW50LmZpbmRJbmRleChlID0+ICFlLmhpZGRlbik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZW5kSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY3N0Tm9kZS5jb250ZW50W2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1lbnROb2RlKGNoaWxkLCBjb21tZW50TmFtZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1lbnROb2RlKGNzdE5vZGUsIGNvbW1lbnROYW1lcykge1xuICAgIHJldHVybiBpc0xlYWZDc3ROb2RlKGNzdE5vZGUpICYmIGNvbW1lbnROYW1lcy5pbmNsdWRlcyhjc3ROb2RlLnRva2VuVHlwZS5uYW1lKTtcbn1cbi8qKlxuICogRmluZHMgdGhlIGxlYWYgQ1NUIG5vZGUgYXQgdGhlIHNwZWNpZmllZCAwLWJhc2VkIHN0cmluZyBvZmZzZXQuXG4gKiBOb3RlIHRoYXQgdGhlIGdpdmVuIG9mZnNldCB3aWxsIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIHJldHVybmVkIGxlYWYgbm9kZS5cbiAqXG4gKiBJZiB0aGUgb2Zmc2V0IGRvZXMgbm90IHBvaW50IHRvIGEgQ1NUIG5vZGUgKGJ1dCBqdXN0IHdoaXRlIHNwYWNlKSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIG5vZGUgVGhlIENTVCBub2RlIHRvIHNlYXJjaCB0aHJvdWdoLlxuICogQHBhcmFtIG9mZnNldCBUaGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqIEByZXR1cm5zIFRoZSBDU1Qgbm9kZSBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMZWFmTm9kZUF0T2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIGlmIChpc0xlYWZDc3ROb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0NvbXBvc2l0ZUNzdE5vZGUobm9kZSkpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYmluYXJ5U2VhcmNoKG5vZGUsIG9mZnNldCwgZmFsc2UpO1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZExlYWZOb2RlQXRPZmZzZXQoc2VhcmNoUmVzdWx0LCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEZpbmRzIHRoZSBsZWFmIENTVCBub2RlIGF0IHRoZSBzcGVjaWZpZWQgMC1iYXNlZCBzdHJpbmcgb2Zmc2V0LlxuICogSWYgbm8gQ1NUIG5vZGUgZXhpc3RzIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24sIGl0IHdpbGwgcmV0dXJuIHRoZSBsZWFmIG5vZGUgYmVmb3JlIGl0LlxuICpcbiAqIElmIHRoZXJlIGlzIG5vIGxlYWYgbm9kZSBiZWZvcmUgdGhlIHNwZWNpZmllZCBvZmZzZXQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwYXJhbSBub2RlIFRoZSBDU1Qgbm9kZSB0byBzZWFyY2ggdGhyb3VnaC5cbiAqIEBwYXJhbSBvZmZzZXQgVGhlIHNwZWNpZmllZCBvZmZzZXQuXG4gKiBAcmV0dXJucyBUaGUgQ1NUIG5vZGUgY2xvc2VzdCB0byB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMZWFmTm9kZUJlZm9yZU9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBpZiAoaXNMZWFmQ3N0Tm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb21wb3NpdGVDc3ROb2RlKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGJpbmFyeVNlYXJjaChub2RlLCBvZmZzZXQsIHRydWUpO1xuICAgICAgICBpZiAoc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0KHNlYXJjaFJlc3VsdCwgb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKG5vZGUsIG9mZnNldCwgY2xvc2VzdCkge1xuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBsZXQgcmlnaHQgPSBub2RlLmNvbnRlbnQubGVuZ3RoIC0gMTtcbiAgICBsZXQgY2xvc2VzdE5vZGUgPSB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHtcbiAgICAgICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xuICAgICAgICBjb25zdCBtaWRkbGVOb2RlID0gbm9kZS5jb250ZW50W21pZGRsZV07XG4gICAgICAgIGlmIChtaWRkbGVOb2RlLm9mZnNldCA8PSBvZmZzZXQgJiYgbWlkZGxlTm9kZS5lbmQgPiBvZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIEZvdW5kIGFuIGV4YWN0IG1hdGNoXG4gICAgICAgICAgICByZXR1cm4gbWlkZGxlTm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlkZGxlTm9kZS5lbmQgPD0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNsb3Nlc3Qgbm9kZSAobGVzcyB0aGFuIG9mZnNldCkgYW5kIG1vdmUgdG8gdGhlIHJpZ2h0IGhhbGZcbiAgICAgICAgICAgIGNsb3Nlc3ROb2RlID0gY2xvc2VzdCA/IG1pZGRsZU5vZGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGxlZnQgaGFsZlxuICAgICAgICAgICAgcmlnaHQgPSBtaWRkbGUgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbG9zZXN0Tm9kZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c05vZGUobm9kZSwgaGlkZGVuID0gdHJ1ZSkge1xuICAgIHdoaWxlIChub2RlLmNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgbGV0IGluZGV4ID0gcGFyZW50LmNvbnRlbnQuaW5kZXhPZihub2RlKTtcbiAgICAgICAgd2hpbGUgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcGFyZW50LmNvbnRlbnRbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGhpZGRlbiB8fCAhcHJldmlvdXMuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dE5vZGUobm9kZSwgaGlkZGVuID0gdHJ1ZSkge1xuICAgIHdoaWxlIChub2RlLmNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgbGV0IGluZGV4ID0gcGFyZW50LmNvbnRlbnQuaW5kZXhPZihub2RlKTtcbiAgICAgICAgY29uc3QgbGFzdCA9IHBhcmVudC5jb250ZW50Lmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QpIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gcGFyZW50LmNvbnRlbnRbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGhpZGRlbiB8fCAhbmV4dC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXJ0bGluZU5vZGUobm9kZSkge1xuICAgIGlmIChub2RlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgY29uc3QgbGluZSA9IG5vZGUucmFuZ2Uuc3RhcnQubGluZTtcbiAgICBsZXQgbGFzdCA9IG5vZGU7XG4gICAgbGV0IGluZGV4O1xuICAgIHdoaWxlIChub2RlLmNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgY29uc3Qgc2VsZkluZGV4ID0gaW5kZXggIT09IG51bGwgJiYgaW5kZXggIT09IHZvaWQgMCA/IGluZGV4IDogcGFyZW50LmNvbnRlbnQuaW5kZXhPZihub2RlKTtcbiAgICAgICAgaWYgKHNlbGZJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgICAgIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSBzZWxmSW5kZXggLSAxO1xuICAgICAgICAgICAgbm9kZSA9IHBhcmVudC5jb250ZW50W2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yYW5nZS5zdGFydC5saW5lICE9PSBsaW5lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYXN0ID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3Q7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJpb3JOb2RlcyhzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgY29tbW9uUGFyZW50ID0gZ2V0Q29tbW9uUGFyZW50KHN0YXJ0LCBlbmQpO1xuICAgIGlmICghY29tbW9uUGFyZW50KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1vblBhcmVudC5wYXJlbnQuY29udGVudC5zbGljZShjb21tb25QYXJlbnQuYSArIDEsIGNvbW1vblBhcmVudC5iKTtcbn1cbmZ1bmN0aW9uIGdldENvbW1vblBhcmVudChhLCBiKSB7XG4gICAgY29uc3QgYVBhcmVudHMgPSBnZXRQYXJlbnRDaGFpbihhKTtcbiAgICBjb25zdCBiUGFyZW50cyA9IGdldFBhcmVudENoYWluKGIpO1xuICAgIGxldCBjdXJyZW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVBhcmVudHMubGVuZ3RoICYmIGkgPCBiUGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhUGFyZW50ID0gYVBhcmVudHNbaV07XG4gICAgICAgIGNvbnN0IGJQYXJlbnQgPSBiUGFyZW50c1tpXTtcbiAgICAgICAgaWYgKGFQYXJlbnQucGFyZW50ID09PSBiUGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgY3VycmVudCA9IHtcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGFQYXJlbnQucGFyZW50LFxuICAgICAgICAgICAgICAgIGE6IGFQYXJlbnQuaW5kZXgsXG4gICAgICAgICAgICAgICAgYjogYlBhcmVudC5pbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gZ2V0UGFyZW50Q2hhaW4obm9kZSkge1xuICAgIGNvbnN0IGNoYWluID0gW107XG4gICAgd2hpbGUgKG5vZGUuY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUuY29udGFpbmVyO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jb250ZW50LmluZGV4T2Yobm9kZSk7XG4gICAgICAgIGNoYWluLnB1c2goe1xuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfSk7XG4gICAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBjaGFpbi5yZXZlcnNlKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3QtdXRpbHMuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgY2xhc3MgRXJyb3JXaXRoTG9jYXRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3Iobm9kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihub2RlID8gYCR7bWVzc2FnZX0gYXQgJHtub2RlLnJhbmdlLnN0YXJ0LmxpbmV9OiR7bm9kZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXJ9YCA6IG1lc3NhZ2UpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZShfKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciEgVGhlIGlucHV0IHZhbHVlIHdhcyBub3QgaGFuZGxlZC4nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxhbmdpdW0tY2xpIDMuMC4wLlxuICogRE8gTk9UIEVESVQgTUFOVUFMTFkhXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQWJzdHJhY3RBc3RSZWZsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc3ludGF4LXRyZWUuanMnO1xuZXhwb3J0IGNvbnN0IExhbmdpdW1HcmFtbWFyVGVybWluYWxzID0ge1xuICAgIElEOiAvXFxeP1tfYS16QS1aXVtcXHdfXSovLFxuICAgIFNUUklORzogL1wiKFxcXFwufFteXCJcXFxcXSkqXCJ8JyhcXFxcLnxbXidcXFxcXSkqJy8sXG4gICAgTlVNQkVSOiAvTmFOfC0/KChcXGQqXFwuXFxkK3xcXGQrKShbRWVdWystXT9cXGQrKT98SW5maW5pdHkpLyxcbiAgICBSZWdleExpdGVyYWw6IC9cXC8oPyFbKis/XSkoPzpbXlxcclxcblxcWy9cXFxcXXxcXFxcLnxcXFsoPzpbXlxcclxcblxcXVxcXFxdfFxcXFwuKSpcXF0pK1xcL1thLXpdKi8sXG4gICAgV1M6IC9cXHMrLyxcbiAgICBNTF9DT01NRU5UOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG4gICAgU0xfQ09NTUVOVDogL1xcL1xcL1teXFxuXFxyXSovLFxufTtcbmV4cG9ydCBjb25zdCBBYnN0cmFjdFJ1bGUgPSAnQWJzdHJhY3RSdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBpc0Fic3RyYWN0UnVsZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBBYnN0cmFjdFJ1bGUpO1xufVxuZXhwb3J0IGNvbnN0IEFic3RyYWN0VHlwZSA9ICdBYnN0cmFjdFR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzdHJhY3RUeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEFic3RyYWN0VHlwZSk7XG59XG5leHBvcnQgY29uc3QgQ29uZGl0aW9uID0gJ0NvbmRpdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNDb25kaXRpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQ29uZGl0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVOYW1lKGl0ZW0pIHtcbiAgICByZXR1cm4gaXNQcmltaXRpdmVUeXBlKGl0ZW0pIHx8IGl0ZW0gPT09ICdjdXJyZW50JyB8fCBpdGVtID09PSAnZW50cnknIHx8IGl0ZW0gPT09ICdleHRlbmRzJyB8fCBpdGVtID09PSAnZmFsc2UnIHx8IGl0ZW0gPT09ICdmcmFnbWVudCcgfHwgaXRlbSA9PT0gJ2dyYW1tYXInIHx8IGl0ZW0gPT09ICdoaWRkZW4nIHx8IGl0ZW0gPT09ICdpbXBvcnQnIHx8IGl0ZW0gPT09ICdpbnRlcmZhY2UnIHx8IGl0ZW0gPT09ICdyZXR1cm5zJyB8fCBpdGVtID09PSAndGVybWluYWwnIHx8IGl0ZW0gPT09ICd0cnVlJyB8fCBpdGVtID09PSAndHlwZScgfHwgaXRlbSA9PT0gJ2luZmVyJyB8fCBpdGVtID09PSAnaW5mZXJzJyB8fCBpdGVtID09PSAnd2l0aCcgfHwgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyAmJiAoL1xcXj9bX2EtekEtWl1bXFx3X10qLy50ZXN0KGl0ZW0pKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmVUeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbSA9PT0gJ3N0cmluZycgfHwgaXRlbSA9PT0gJ251bWJlcicgfHwgaXRlbSA9PT0gJ2Jvb2xlYW4nIHx8IGl0ZW0gPT09ICdEYXRlJyB8fCBpdGVtID09PSAnYmlnaW50Jztcbn1cbmV4cG9ydCBjb25zdCBUeXBlRGVmaW5pdGlvbiA9ICdUeXBlRGVmaW5pdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlRGVmaW5pdGlvbihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBUeXBlRGVmaW5pdGlvbik7XG59XG5leHBvcnQgY29uc3QgVmFsdWVMaXRlcmFsID0gJ1ZhbHVlTGl0ZXJhbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZUxpdGVyYWwoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgVmFsdWVMaXRlcmFsKTtcbn1cbmV4cG9ydCBjb25zdCBBYnN0cmFjdEVsZW1lbnQgPSAnQWJzdHJhY3RFbGVtZW50JztcbmV4cG9ydCBmdW5jdGlvbiBpc0Fic3RyYWN0RWxlbWVudChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBBYnN0cmFjdEVsZW1lbnQpO1xufVxuZXhwb3J0IGNvbnN0IEFycmF5TGl0ZXJhbCA9ICdBcnJheUxpdGVyYWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlMaXRlcmFsKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEFycmF5TGl0ZXJhbCk7XG59XG5leHBvcnQgY29uc3QgQXJyYXlUeXBlID0gJ0FycmF5VHlwZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheVR5cGUoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQXJyYXlUeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBCb29sZWFuTGl0ZXJhbCA9ICdCb29sZWFuTGl0ZXJhbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuTGl0ZXJhbChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBCb29sZWFuTGl0ZXJhbCk7XG59XG5leHBvcnQgY29uc3QgQ29uanVuY3Rpb24gPSAnQ29uanVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uanVuY3Rpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQ29uanVuY3Rpb24pO1xufVxuZXhwb3J0IGNvbnN0IERpc2p1bmN0aW9uID0gJ0Rpc2p1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc2p1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIERpc2p1bmN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBHcmFtbWFyID0gJ0dyYW1tYXInO1xuZXhwb3J0IGZ1bmN0aW9uIGlzR3JhbW1hcihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHcmFtbWFyKTtcbn1cbmV4cG9ydCBjb25zdCBHcmFtbWFySW1wb3J0ID0gJ0dyYW1tYXJJbXBvcnQnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzR3JhbW1hckltcG9ydChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHcmFtbWFySW1wb3J0KTtcbn1cbmV4cG9ydCBjb25zdCBJbmZlcnJlZFR5cGUgPSAnSW5mZXJyZWRUeXBlJztcbmV4cG9ydCBmdW5jdGlvbiBpc0luZmVycmVkVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBJbmZlcnJlZFR5cGUpO1xufVxuZXhwb3J0IGNvbnN0IEludGVyZmFjZSA9ICdJbnRlcmZhY2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJmYWNlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEludGVyZmFjZSk7XG59XG5leHBvcnQgY29uc3QgTmFtZWRBcmd1bWVudCA9ICdOYW1lZEFyZ3VtZW50JztcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQXJndW1lbnQoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgTmFtZWRBcmd1bWVudCk7XG59XG5leHBvcnQgY29uc3QgTmVnYXRpb24gPSAnTmVnYXRpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmVnYXRpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgTmVnYXRpb24pO1xufVxuZXhwb3J0IGNvbnN0IE51bWJlckxpdGVyYWwgPSAnTnVtYmVyTGl0ZXJhbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJMaXRlcmFsKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIE51bWJlckxpdGVyYWwpO1xufVxuZXhwb3J0IGNvbnN0IFBhcmFtZXRlciA9ICdQYXJhbWV0ZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYW1ldGVyKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFBhcmFtZXRlcik7XG59XG5leHBvcnQgY29uc3QgUGFyYW1ldGVyUmVmZXJlbmNlID0gJ1BhcmFtZXRlclJlZmVyZW5jZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNQYXJhbWV0ZXJSZWZlcmVuY2UoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgUGFyYW1ldGVyUmVmZXJlbmNlKTtcbn1cbmV4cG9ydCBjb25zdCBQYXJzZXJSdWxlID0gJ1BhcnNlclJ1bGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VyUnVsZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBQYXJzZXJSdWxlKTtcbn1cbmV4cG9ydCBjb25zdCBSZWZlcmVuY2VUeXBlID0gJ1JlZmVyZW5jZVR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSZWZlcmVuY2VUeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBSZXR1cm5UeXBlID0gJ1JldHVyblR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0dXJuVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSZXR1cm5UeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBTaW1wbGVUeXBlID0gJ1NpbXBsZVR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2ltcGxlVHlwZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBTaW1wbGVUeXBlKTtcbn1cbmV4cG9ydCBjb25zdCBTdHJpbmdMaXRlcmFsID0gJ1N0cmluZ0xpdGVyYWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTGl0ZXJhbChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBTdHJpbmdMaXRlcmFsKTtcbn1cbmV4cG9ydCBjb25zdCBUZXJtaW5hbFJ1bGUgPSAnVGVybWluYWxSdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBpc1Rlcm1pbmFsUnVsZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBUZXJtaW5hbFJ1bGUpO1xufVxuZXhwb3J0IGNvbnN0IFR5cGUgPSAnVHlwZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFR5cGUpO1xufVxuZXhwb3J0IGNvbnN0IFR5cGVBdHRyaWJ1dGUgPSAnVHlwZUF0dHJpYnV0ZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlQXR0cmlidXRlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFR5cGVBdHRyaWJ1dGUpO1xufVxuZXhwb3J0IGNvbnN0IFVuaW9uVHlwZSA9ICdVbmlvblR5cGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb25UeXBlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFVuaW9uVHlwZSk7XG59XG5leHBvcnQgY29uc3QgQWN0aW9uID0gJ0FjdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb24oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBBbHRlcm5hdGl2ZXMgPSAnQWx0ZXJuYXRpdmVzJztcbmV4cG9ydCBmdW5jdGlvbiBpc0FsdGVybmF0aXZlcyhpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBBbHRlcm5hdGl2ZXMpO1xufVxuZXhwb3J0IGNvbnN0IEFzc2lnbm1lbnQgPSAnQXNzaWdubWVudCc7XG5leHBvcnQgZnVuY3Rpb24gaXNBc3NpZ25tZW50KGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEFzc2lnbm1lbnQpO1xufVxuZXhwb3J0IGNvbnN0IENoYXJhY3RlclJhbmdlID0gJ0NoYXJhY3RlclJhbmdlJztcbmV4cG9ydCBmdW5jdGlvbiBpc0NoYXJhY3RlclJhbmdlKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIENoYXJhY3RlclJhbmdlKTtcbn1cbmV4cG9ydCBjb25zdCBDcm9zc1JlZmVyZW5jZSA9ICdDcm9zc1JlZmVyZW5jZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNDcm9zc1JlZmVyZW5jZShpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBDcm9zc1JlZmVyZW5jZSk7XG59XG5leHBvcnQgY29uc3QgRW5kT2ZGaWxlID0gJ0VuZE9mRmlsZSc7XG5leHBvcnQgZnVuY3Rpb24gaXNFbmRPZkZpbGUoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgRW5kT2ZGaWxlKTtcbn1cbmV4cG9ydCBjb25zdCBHcm91cCA9ICdHcm91cCc7XG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHcm91cCk7XG59XG5leHBvcnQgY29uc3QgS2V5d29yZCA9ICdLZXl3b3JkJztcbmV4cG9ydCBmdW5jdGlvbiBpc0tleXdvcmQoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgS2V5d29yZCk7XG59XG5leHBvcnQgY29uc3QgTmVnYXRlZFRva2VuID0gJ05lZ2F0ZWRUb2tlbic7XG5leHBvcnQgZnVuY3Rpb24gaXNOZWdhdGVkVG9rZW4oaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgTmVnYXRlZFRva2VuKTtcbn1cbmV4cG9ydCBjb25zdCBSZWdleFRva2VuID0gJ1JlZ2V4VG9rZW4nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnZXhUb2tlbihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSZWdleFRva2VuKTtcbn1cbmV4cG9ydCBjb25zdCBSdWxlQ2FsbCA9ICdSdWxlQ2FsbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNSdWxlQ2FsbChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBSdWxlQ2FsbCk7XG59XG5leHBvcnQgY29uc3QgVGVybWluYWxBbHRlcm5hdGl2ZXMgPSAnVGVybWluYWxBbHRlcm5hdGl2ZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVybWluYWxBbHRlcm5hdGl2ZXMoaXRlbSkge1xuICAgIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgVGVybWluYWxBbHRlcm5hdGl2ZXMpO1xufVxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsR3JvdXAgPSAnVGVybWluYWxHcm91cCc7XG5leHBvcnQgZnVuY3Rpb24gaXNUZXJtaW5hbEdyb3VwKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFRlcm1pbmFsR3JvdXApO1xufVxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsUnVsZUNhbGwgPSAnVGVybWluYWxSdWxlQ2FsbCc7XG5leHBvcnQgZnVuY3Rpb24gaXNUZXJtaW5hbFJ1bGVDYWxsKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFRlcm1pbmFsUnVsZUNhbGwpO1xufVxuZXhwb3J0IGNvbnN0IFVub3JkZXJlZEdyb3VwID0gJ1Vub3JkZXJlZEdyb3VwJztcbmV4cG9ydCBmdW5jdGlvbiBpc1Vub3JkZXJlZEdyb3VwKGl0ZW0pIHtcbiAgICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFVub3JkZXJlZEdyb3VwKTtcbn1cbmV4cG9ydCBjb25zdCBVbnRpbFRva2VuID0gJ1VudGlsVG9rZW4nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW50aWxUb2tlbihpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBVbnRpbFRva2VuKTtcbn1cbmV4cG9ydCBjb25zdCBXaWxkY2FyZCA9ICdXaWxkY2FyZCc7XG5leHBvcnQgZnVuY3Rpb24gaXNXaWxkY2FyZChpdGVtKSB7XG4gICAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBXaWxkY2FyZCk7XG59XG5leHBvcnQgY2xhc3MgTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBc3RSZWZsZWN0aW9uIHtcbiAgICBnZXRBbGxUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIFsnQWJzdHJhY3RFbGVtZW50JywgJ0Fic3RyYWN0UnVsZScsICdBYnN0cmFjdFR5cGUnLCAnQWN0aW9uJywgJ0FsdGVybmF0aXZlcycsICdBcnJheUxpdGVyYWwnLCAnQXJyYXlUeXBlJywgJ0Fzc2lnbm1lbnQnLCAnQm9vbGVhbkxpdGVyYWwnLCAnQ2hhcmFjdGVyUmFuZ2UnLCAnQ29uZGl0aW9uJywgJ0Nvbmp1bmN0aW9uJywgJ0Nyb3NzUmVmZXJlbmNlJywgJ0Rpc2p1bmN0aW9uJywgJ0VuZE9mRmlsZScsICdHcmFtbWFyJywgJ0dyYW1tYXJJbXBvcnQnLCAnR3JvdXAnLCAnSW5mZXJyZWRUeXBlJywgJ0ludGVyZmFjZScsICdLZXl3b3JkJywgJ05hbWVkQXJndW1lbnQnLCAnTmVnYXRlZFRva2VuJywgJ05lZ2F0aW9uJywgJ051bWJlckxpdGVyYWwnLCAnUGFyYW1ldGVyJywgJ1BhcmFtZXRlclJlZmVyZW5jZScsICdQYXJzZXJSdWxlJywgJ1JlZmVyZW5jZVR5cGUnLCAnUmVnZXhUb2tlbicsICdSZXR1cm5UeXBlJywgJ1J1bGVDYWxsJywgJ1NpbXBsZVR5cGUnLCAnU3RyaW5nTGl0ZXJhbCcsICdUZXJtaW5hbEFsdGVybmF0aXZlcycsICdUZXJtaW5hbEdyb3VwJywgJ1Rlcm1pbmFsUnVsZScsICdUZXJtaW5hbFJ1bGVDYWxsJywgJ1R5cGUnLCAnVHlwZUF0dHJpYnV0ZScsICdUeXBlRGVmaW5pdGlvbicsICdVbmlvblR5cGUnLCAnVW5vcmRlcmVkR3JvdXAnLCAnVW50aWxUb2tlbicsICdWYWx1ZUxpdGVyYWwnLCAnV2lsZGNhcmQnXTtcbiAgICB9XG4gICAgY29tcHV0ZUlzU3VidHlwZShzdWJ0eXBlLCBzdXBlcnR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFjdGlvbjpcbiAgICAgICAgICAgIGNhc2UgQWx0ZXJuYXRpdmVzOlxuICAgICAgICAgICAgY2FzZSBBc3NpZ25tZW50OlxuICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXJSYW5nZTpcbiAgICAgICAgICAgIGNhc2UgQ3Jvc3NSZWZlcmVuY2U6XG4gICAgICAgICAgICBjYXNlIEVuZE9mRmlsZTpcbiAgICAgICAgICAgIGNhc2UgR3JvdXA6XG4gICAgICAgICAgICBjYXNlIEtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIE5lZ2F0ZWRUb2tlbjpcbiAgICAgICAgICAgIGNhc2UgUmVnZXhUb2tlbjpcbiAgICAgICAgICAgIGNhc2UgUnVsZUNhbGw6XG4gICAgICAgICAgICBjYXNlIFRlcm1pbmFsQWx0ZXJuYXRpdmVzOlxuICAgICAgICAgICAgY2FzZSBUZXJtaW5hbEdyb3VwOlxuICAgICAgICAgICAgY2FzZSBUZXJtaW5hbFJ1bGVDYWxsOlxuICAgICAgICAgICAgY2FzZSBVbm9yZGVyZWRHcm91cDpcbiAgICAgICAgICAgIGNhc2UgVW50aWxUb2tlbjpcbiAgICAgICAgICAgIGNhc2UgV2lsZGNhcmQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoQWJzdHJhY3RFbGVtZW50LCBzdXBlcnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBcnJheUxpdGVyYWw6XG4gICAgICAgICAgICBjYXNlIE51bWJlckxpdGVyYWw6XG4gICAgICAgICAgICBjYXNlIFN0cmluZ0xpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoVmFsdWVMaXRlcmFsLCBzdXBlcnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBcnJheVR5cGU6XG4gICAgICAgICAgICBjYXNlIFJlZmVyZW5jZVR5cGU6XG4gICAgICAgICAgICBjYXNlIFNpbXBsZVR5cGU6XG4gICAgICAgICAgICBjYXNlIFVuaW9uVHlwZToge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3VidHlwZShUeXBlRGVmaW5pdGlvbiwgc3VwZXJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQm9vbGVhbkxpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoQ29uZGl0aW9uLCBzdXBlcnR5cGUpIHx8IHRoaXMuaXNTdWJ0eXBlKFZhbHVlTGl0ZXJhbCwgc3VwZXJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQ29uanVuY3Rpb246XG4gICAgICAgICAgICBjYXNlIERpc2p1bmN0aW9uOlxuICAgICAgICAgICAgY2FzZSBOZWdhdGlvbjpcbiAgICAgICAgICAgIGNhc2UgUGFyYW1ldGVyUmVmZXJlbmNlOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJ0eXBlKENvbmRpdGlvbiwgc3VwZXJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOlxuICAgICAgICAgICAgY2FzZSBJbnRlcmZhY2U6XG4gICAgICAgICAgICBjYXNlIFR5cGU6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1YnR5cGUoQWJzdHJhY3RUeXBlLCBzdXBlcnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBQYXJzZXJSdWxlOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJ0eXBlKEFic3RyYWN0UnVsZSwgc3VwZXJ0eXBlKSB8fCB0aGlzLmlzU3VidHlwZShBYnN0cmFjdFR5cGUsIHN1cGVydHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRlcm1pbmFsUnVsZToge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3VidHlwZShBYnN0cmFjdFJ1bGUsIHN1cGVydHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFJlZmVyZW5jZVR5cGUocmVmSW5mbykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IGAke3JlZkluZm8uY29udGFpbmVyLiR0eXBlfToke3JlZkluZm8ucHJvcGVydHl9YDtcbiAgICAgICAgc3dpdGNoIChyZWZlcmVuY2VJZCkge1xuICAgICAgICAgICAgY2FzZSAnQWN0aW9uOnR5cGUnOlxuICAgICAgICAgICAgY2FzZSAnQ3Jvc3NSZWZlcmVuY2U6dHlwZSc6XG4gICAgICAgICAgICBjYXNlICdJbnRlcmZhY2U6c3VwZXJUeXBlcyc6XG4gICAgICAgICAgICBjYXNlICdQYXJzZXJSdWxlOnJldHVyblR5cGUnOlxuICAgICAgICAgICAgY2FzZSAnU2ltcGxlVHlwZTp0eXBlUmVmJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHcmFtbWFyOmhpZGRlblRva2Vucyc6XG4gICAgICAgICAgICBjYXNlICdQYXJzZXJSdWxlOmhpZGRlblRva2Vucyc6XG4gICAgICAgICAgICBjYXNlICdSdWxlQ2FsbDpydWxlJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFJ1bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHcmFtbWFyOnVzZWRHcmFtbWFycyc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gR3JhbW1hcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ05hbWVkQXJndW1lbnQ6cGFyYW1ldGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ1BhcmFtZXRlclJlZmVyZW5jZTpwYXJhbWV0ZXInOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcmFtZXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1Rlcm1pbmFsUnVsZUNhbGw6cnVsZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVGVybWluYWxSdWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWZlcmVuY2VJZH0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFR5cGVNZXRhRGF0YSh0eXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQWJzdHJhY3RFbGVtZW50Jzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBYnN0cmFjdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0FycmF5TGl0ZXJhbCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQXJyYXlMaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZWxlbWVudHMnLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJheVR5cGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FycmF5VHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2VsZW1lbnRUeXBlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0Jvb2xlYW5MaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHJ1ZScsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Nvbmp1bmN0aW9uJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdDb25qdW5jdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xlZnQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdyaWdodCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Rpc2p1bmN0aW9uJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdEaXNqdW5jdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xlZnQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdyaWdodCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0dyYW1tYXInOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dyYW1tYXInLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdkZWZpbmVzSGlkZGVuVG9rZW5zJywgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnaGlkZGVuVG9rZW5zJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnaW1wb3J0cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2ludGVyZmFjZXMnLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdpc0RlY2xhcmVkJywgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3J1bGVzJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZXMnLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd1c2VkR3JhbW1hcnMnLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHcmFtbWFySW1wb3J0Jzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHcmFtbWFySW1wb3J0JyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0luZmVycmVkVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW5mZXJyZWRUeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0ludGVyZmFjZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW50ZXJmYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnYXR0cmlidXRlcycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdzdXBlclR5cGVzJywgZGVmYXVsdFZhbHVlOiBbXSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTmFtZWRBcmd1bWVudCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnTmFtZWRBcmd1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhbGxlZEJ5TmFtZScsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhcmFtZXRlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3ZhbHVlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTmVnYXRpb24nOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ05lZ2F0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdOdW1iZXJMaXRlcmFsJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdOdW1iZXJMaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdQYXJhbWV0ZXInOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdQYXJhbWV0ZXJSZWZlcmVuY2UnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BhcmFtZXRlclJlZmVyZW5jZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhcmFtZXRlcicgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1BhcnNlclJ1bGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BhcnNlclJ1bGUnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdkYXRhVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlZmluZXNIaWRkZW5Ub2tlbnMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdkZWZpbml0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZW50cnknLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdmcmFnbWVudCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2hpZGRlblRva2VucycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2luZmVycmVkVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXJhbWV0ZXJzJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncmV0dXJuVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3dpbGRjYXJkJywgZGVmYXVsdFZhbHVlOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnUmVmZXJlbmNlVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUmVmZXJlbmNlVHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3JlZmVyZW5jZVR5cGUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdSZXR1cm5UeXBlJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSZXR1cm5UeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1NpbXBsZVR5cGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NpbXBsZVR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwcmltaXRpdmVUeXBlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnc3RyaW5nVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3R5cGVSZWYnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdTdHJpbmdMaXRlcmFsJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdUZXJtaW5hbFJ1bGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1Rlcm1pbmFsUnVsZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlZmluaXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdmcmFnbWVudCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2hpZGRlbicsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd0eXBlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd0eXBlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVHlwZUF0dHJpYnV0ZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVHlwZUF0dHJpYnV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2lzT3B0aW9uYWwnLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICduYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VuaW9uVHlwZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVW5pb25UeXBlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZXMnLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZmVhdHVyZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2luZmVycmVkVHlwZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdG9yJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndHlwZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0FsdGVybmF0aXZlcyc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQWx0ZXJuYXRpdmVzJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdlbGVtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Fzc2lnbm1lbnQnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0Fzc2lnbm1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2ZlYXR1cmUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRvcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3Rlcm1pbmFsJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQ2hhcmFjdGVyUmFuZ2UnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NoYXJhY3RlclJhbmdlJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncmlnaHQnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdDcm9zc1JlZmVyZW5jZSc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ3Jvc3NSZWZlcmVuY2UnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2RlcHJlY2F0ZWRTeW50YXgnLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXJtaW5hbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3R5cGUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdFbmRPZkZpbGUnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VuZE9mRmlsZScsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnR3JvdXAnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdlbGVtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2d1YXJkQ29uZGl0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnS2V5d29yZCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnS2V5d29yZCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndmFsdWUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdOZWdhdGVkVG9rZW4nOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ05lZ2F0ZWRUb2tlbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndGVybWluYWwnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdSZWdleFRva2VuJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSZWdleFRva2VuJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdyZWdleCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1J1bGVDYWxsJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdSdWxlQ2FsbCcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2FyZ3VtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncnVsZScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1Rlcm1pbmFsQWx0ZXJuYXRpdmVzJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUZXJtaW5hbEFsdGVybmF0aXZlcycsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZWxlbWVudHMnLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdsb29rYWhlYWQnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdUZXJtaW5hbEdyb3VwJzoge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUZXJtaW5hbEdyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2FyZGluYWxpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdlbGVtZW50cycsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1Rlcm1pbmFsUnVsZUNhbGwnOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1Rlcm1pbmFsUnVsZUNhbGwnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3J1bGUnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdVbm9yZGVyZWRHcm91cCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVW5vcmRlcmVkR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2VsZW1lbnRzJywgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVW50aWxUb2tlbic6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVW50aWxUb2tlbicsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2NhcmRpbmFsaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnbG9va2FoZWFkJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndGVybWluYWwnIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdXaWxkY2FyZCc6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnV2lsZGNhcmQnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjYXJkaW5hbGl0eScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2xvb2thaGVhZCcgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY29uc3QgcmVmbGVjdGlvbiA9IG5ldyBMYW5naXVtR3JhbW1hckFzdFJlZmxlY3Rpb24oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGlzQXN0Tm9kZSwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBET05FX1JFU1VMVCwgc3RyZWFtLCBTdHJlYW1JbXBsLCBUcmVlU3RyZWFtSW1wbCB9IGZyb20gJy4vc3RyZWFtLmpzJztcbmltcG9ydCB7IGluUmFuZ2UgfSBmcm9tICcuL2NzdC11dGlscy5qcyc7XG4vKipcbiAqIExpbmsgdGhlIGAkY29udGFpbmVyYCBhbmQgb3RoZXIgcmVsYXRlZCBwcm9wZXJ0aWVzIG9mIGV2ZXJ5IEFTVCBub2RlIHRoYXQgaXMgZGlyZWN0bHkgY29udGFpbmVkXG4gKiBpbiB0aGUgZ2l2ZW4gYG5vZGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlua0NvbnRlbnRUb0NvbnRhaW5lcihub2RlKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzdE5vZGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRjb250YWluZXJQcm9wZXJ0eSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRjb250YWluZXJJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0FzdE5vZGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuJGNvbnRhaW5lciA9IG5vZGU7XG4gICAgICAgICAgICAgICAgdmFsdWUuJGNvbnRhaW5lclByb3BlcnR5ID0gbmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogV2FsayBhbG9uZyB0aGUgaGllcmFyY2h5IG9mIGNvbnRhaW5lcnMgZnJvbSB0aGUgZ2l2ZW4gQVNUIG5vZGUgdG8gdGhlIHJvb3QgYW5kIHJldHVybiB0aGUgZmlyc3RcbiAqIG5vZGUgdGhhdCBtYXRjaGVzIHRoZSB0eXBlIHByZWRpY2F0ZS4gSWYgdGhlIHN0YXJ0IG5vZGUgaXRzZWxmIG1hdGNoZXMsIGl0IGlzIHJldHVybmVkLlxuICogSWYgbm8gY29udGFpbmVyIG1hdGNoZXMsIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGFpbmVyT2ZUeXBlKG5vZGUsIHR5cGVQcmVkaWNhdGUpIHtcbiAgICBsZXQgaXRlbSA9IG5vZGU7XG4gICAgd2hpbGUgKGl0ZW0pIHtcbiAgICAgICAgaWYgKHR5cGVQcmVkaWNhdGUoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0gPSBpdGVtLiRjb250YWluZXI7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFdhbGsgYWxvbmcgdGhlIGhpZXJhcmNoeSBvZiBjb250YWluZXJzIGZyb20gdGhlIGdpdmVuIEFTVCBub2RlIHRvIHRoZSByb290IGFuZCBjaGVjayBmb3IgZXhpc3RlbmNlXG4gKiBvZiBhIGNvbnRhaW5lciB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHByZWRpY2F0ZS4gVGhlIHN0YXJ0IG5vZGUgaXMgaW5jbHVkZWQgaW4gdGhlIGNoZWNrcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbnRhaW5lck9mVHlwZShub2RlLCBwcmVkaWNhdGUpIHtcbiAgICBsZXQgaXRlbSA9IG5vZGU7XG4gICAgd2hpbGUgKGl0ZW0pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbSA9IGl0ZW0uJGNvbnRhaW5lcjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggdGhlIGdpdmVuIEFTVCBub2RlIGlzIGNvbnRhaW5lZC4gQSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IGlzXG4gKiB1c3VhbGx5IGhlbGQgYnkgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgQVNULlxuICpcbiAqIEB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIG5vZGUgaXMgbm90IGNvbnRhaW5lZCBpbiBhIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnQobm9kZSkge1xuICAgIGNvbnN0IHJvb3ROb2RlID0gZmluZFJvb3ROb2RlKG5vZGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJvb3ROb2RlLiRkb2N1bWVudDtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTVCBub2RlIGhhcyBubyBkb2N1bWVudC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgcm9vdCBub2RlIG9mIHRoZSBnaXZlbiBBU1Qgbm9kZSBieSBmb2xsb3dpbmcgdGhlIGAkY29udGFpbmVyYCByZWZlcmVuY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFJvb3ROb2RlKG5vZGUpIHtcbiAgICB3aGlsZSAobm9kZS4kY29udGFpbmVyKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLiRjb250YWluZXI7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBzdHJlYW0gb2YgYWxsIEFTVCBub2RlcyB0aGF0IGFyZSBkaXJlY3RseSBjb250YWluZWQgaW4gdGhlIGdpdmVuIG5vZGUuIFRoaXMgaW5jbHVkZXNcbiAqIHNpbmdsZS12YWx1ZWQgYXMgd2VsbCBhcyBtdWx0aS12YWx1ZWQgKGFycmF5KSBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtQ29udGVudHMobm9kZSwgb3B0aW9ucykge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLicpO1xuICAgIH1cbiAgICBjb25zdCByYW5nZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yYW5nZTtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUltcGwoKCkgPT4gKHtcbiAgICAgICAga2V5czogT2JqZWN0LmtleXMobm9kZSksXG4gICAgICAgIGtleUluZGV4OiAwLFxuICAgICAgICBhcnJheUluZGV4OiAwXG4gICAgfSksIHN0YXRlID0+IHtcbiAgICAgICAgd2hpbGUgKHN0YXRlLmtleUluZGV4IDwgc3RhdGUua2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gc3RhdGUua2V5c1tzdGF0ZS5rZXlJbmRleF07XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZVtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUua2V5SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZUluUmFuZ2UodmFsdWUsIHJhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmFycmF5SW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuYXJyYXlJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FzdE5vZGUoZWxlbWVudCkgJiYgaXNBc3ROb2RlSW5SYW5nZShlbGVtZW50LCByYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IGVsZW1lbnQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJheUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5rZXlJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3RyZWFtIG9mIGFsbCBBU1Qgbm9kZXMgdGhhdCBhcmUgZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkgY29udGFpbmVkIGluIHRoZSBnaXZlbiByb290IG5vZGUuXG4gKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIHJvb3Qgbm9kZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1BbGxDb250ZW50cyhyb290LCBvcHRpb25zKSB7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBub2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUcmVlU3RyZWFtSW1wbChyb290LCBub2RlID0+IHN0cmVhbUNvbnRlbnRzKG5vZGUsIG9wdGlvbnMpKTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3RyZWFtIG9mIGFsbCBBU1Qgbm9kZXMgdGhhdCBhcmUgZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkgY29udGFpbmVkIGluIHRoZSBnaXZlbiByb290IG5vZGUsXG4gKiBpbmNsdWRpbmcgdGhlIHJvb3Qgbm9kZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1Bc3Qocm9vdCwgb3B0aW9ucykge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3Qgbm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmFuZ2UpICYmICFpc0FzdE5vZGVJblJhbmdlKHJvb3QsIG9wdGlvbnMucmFuZ2UpKSB7XG4gICAgICAgIC8vIFJldHVybiBhbiBlbXB0eSBzdHJlYW0gaWYgdGhlIHJvb3Qgbm9kZSBpc24ndCBpbiByYW5nZVxuICAgICAgICByZXR1cm4gbmV3IFRyZWVTdHJlYW1JbXBsKHJvb3QsICgpID0+IFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUcmVlU3RyZWFtSW1wbChyb290LCBub2RlID0+IHN0cmVhbUNvbnRlbnRzKG5vZGUsIG9wdGlvbnMpLCB7IGluY2x1ZGVSb290OiB0cnVlIH0pO1xufVxuZnVuY3Rpb24gaXNBc3ROb2RlSW5SYW5nZShhc3ROb2RlLCByYW5nZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBub2RlUmFuZ2UgPSAoX2EgPSBhc3ROb2RlLiRjc3ROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmFuZ2U7XG4gICAgaWYgKCFub2RlUmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaW5SYW5nZShub2RlUmFuZ2UsIHJhbmdlKTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgc3RyZWFtIG9mIGFsbCBjcm9zcy1yZWZlcmVuY2VzIHRoYXQgYXJlIGhlbGQgYnkgdGhlIGdpdmVuIEFTVCBub2RlLiBUaGlzIGluY2x1ZGVzXG4gKiBzaW5nbGUtdmFsdWVkIGFzIHdlbGwgYXMgbXVsdGktdmFsdWVkIChhcnJheSkgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVJlZmVyZW5jZXMobm9kZSkge1xuICAgIHJldHVybiBuZXcgU3RyZWFtSW1wbCgoKSA9PiAoe1xuICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhub2RlKSxcbiAgICAgICAga2V5SW5kZXg6IDAsXG4gICAgICAgIGFycmF5SW5kZXg6IDBcbiAgICB9KSwgc3RhdGUgPT4ge1xuICAgICAgICB3aGlsZSAoc3RhdGUua2V5SW5kZXggPCBzdGF0ZS5rZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBzdGF0ZS5rZXlzW3N0YXRlLmtleUluZGV4XTtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmtleUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogeyByZWZlcmVuY2U6IHZhbHVlLCBjb250YWluZXI6IG5vZGUsIHByb3BlcnR5IH0gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXRlLmFycmF5SW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUuYXJyYXlJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogeyByZWZlcmVuY2U6IGVsZW1lbnQsIGNvbnRhaW5lcjogbm9kZSwgcHJvcGVydHksIGluZGV4IH0gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hcnJheUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5rZXlJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBET05FX1JFU1VMVDtcbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIFN0cmVhbSBvZiByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQgbm9kZSBmcm9tIHRoZSBBc3ROb2RlIHRyZWVcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0Tm9kZSBBc3ROb2RlIHdlIGFyZSBsb29raW5nIGZvclxuICogQHBhcmFtIGxvb2t1cCBBc3ROb2RlIHdoZXJlIHdlIHNlYXJjaCBmb3IgcmVmZXJlbmNlcy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcm9vdCBub2RlIG9mIHRoZSBkb2N1bWVudCBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTG9jYWxSZWZlcmVuY2VzKHRhcmdldE5vZGUsIGxvb2t1cCA9IGdldERvY3VtZW50KHRhcmdldE5vZGUpLnBhcnNlUmVzdWx0LnZhbHVlKSB7XG4gICAgY29uc3QgcmVmcyA9IFtdO1xuICAgIHN0cmVhbUFzdChsb29rdXApLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgIHN0cmVhbVJlZmVyZW5jZXMobm9kZSkuZm9yRWFjaChyZWZJbmZvID0+IHtcbiAgICAgICAgICAgIGlmIChyZWZJbmZvLnJlZmVyZW5jZS5yZWYgPT09IHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2gocmVmSW5mby5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RyZWFtKHJlZnMpO1xufVxuLyoqXG4gKiBBc3NpZ25zIGFsbCBtYW5kYXRvcnkgQVNUIHByb3BlcnRpZXMgdG8gdGhlIHNwZWNpZmllZCBub2RlLlxuICpcbiAqIEBwYXJhbSByZWZsZWN0aW9uIFJlZmxlY3Rpb24gb2JqZWN0IHVzZWQgdG8gZ2F0aGVyIG1hbmRhdG9yeSBwcm9wZXJ0aWVzIGZvciB0aGUgbm9kZS5cbiAqIEBwYXJhbSBub2RlIFNwZWNpZmllZCBub2RlIGlzIG1vZGlmaWVkIGluIHBsYWNlIGFuZCBwcm9wZXJ0aWVzIGFyZSBkaXJlY3RseSBhc3NpZ25lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXMocmVmbGVjdGlvbiwgbm9kZSkge1xuICAgIGNvbnN0IHR5cGVNZXRhRGF0YSA9IHJlZmxlY3Rpb24uZ2V0VHlwZU1ldGFEYXRhKG5vZGUuJHR5cGUpO1xuICAgIGNvbnN0IGdlbmVyaWNOb2RlID0gbm9kZTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHR5cGVNZXRhRGF0YS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIC8vIE9ubHkgc2V0IHRoZSB2YWx1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGFscmVhZHkgc2V0IGFuZCBpZiBpdCBoYXMgYSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGlmIChwcm9wZXJ0eS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBnZW5lcmljTm9kZVtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnZW5lcmljTm9kZVtwcm9wZXJ0eS5uYW1lXSA9IGNvcHlEZWZhdWx0VmFsdWUocHJvcGVydHkuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNvcHlEZWZhdWx0VmFsdWUocHJvcGVydHlUeXBlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlUeXBlKSkge1xuICAgICAgICByZXR1cm4gWy4uLnByb3BlcnR5VHlwZS5tYXAoY29weURlZmF1bHRWYWx1ZSldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5VHlwZTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgdGhlIHNwZWNpZmllZCBBU1Qgbm9kZS5cbiAqIFRoZSByZXN1bHRpbmcgY29weSB3aWxsIG9ubHkgY29udGFpbiBzZW1hbnRpY2FsbHkgcmVsZXZhbnQgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGAkdHlwZWAgcHJvcGVydHkgYW5kIEFTVCBwcm9wZXJ0aWVzLlxuICpcbiAqIFJlZmVyZW5jZXMgYXJlIGNvcGllZCB3aXRob3V0IHJlc29sdmVkIGNyb3NzIHJlZmVyZW5jZS4gVGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYnVpbGQgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlBc3ROb2RlKG5vZGUsIGJ1aWxkUmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29weSA9IHsgJHR5cGU6IG5vZGUuJHR5cGUgfTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb3B5W25hbWVdID0gY29weUFzdE5vZGUodmFsdWUsIGJ1aWxkUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVmZXJlbmNlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvcHlbbmFtZV0gPSBidWlsZFJlZmVyZW5jZShjb3B5LCBuYW1lLCB2YWx1ZS4kcmVmTm9kZSwgdmFsdWUuJHJlZlRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3BpZWRBcnJheSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3ROb2RlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRBcnJheS5wdXNoKGNvcHlBc3ROb2RlKGVsZW1lbnQsIGJ1aWxkUmVmZXJlbmNlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWZlcmVuY2UoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZEFycmF5LnB1c2goYnVpbGRSZWZlcmVuY2UoY29weSwgbmFtZSwgZWxlbWVudC4kcmVmTm9kZSwgZWxlbWVudC4kcmVmVGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkQXJyYXkucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb3B5W25hbWVdID0gY29waWVkQXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb3B5W25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGlua0NvbnRlbnRUb0NvbnRhaW5lcihjb3B5KTtcbiAgICByZXR1cm4gY29weTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzdC11dGlscy5qcy5tYXAiLAogICAgImV4cG9ydCBmdW5jdGlvbiBjYyhjaGFyKSB7XG4gICAgcmV0dXJuIGNoYXIuY2hhckNvZGVBdCgwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUb1NldChpdGVtLCBzZXQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICBpdGVtLmZvckVhY2goZnVuY3Rpb24gKHN1Ykl0ZW0pIHtcbiAgICAgICAgICAgIHNldC5wdXNoKHN1Ykl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNldC5wdXNoKGl0ZW0pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGRGbGFnKGZsYWdPYmosIGZsYWdLZXkpIHtcbiAgICBpZiAoZmxhZ09ialtmbGFnS2V5XSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBcImR1cGxpY2F0ZSBmbGFnIFwiICsgZmxhZ0tleTtcbiAgICB9XG4gICAgY29uc3QgeCA9IGZsYWdPYmpbZmxhZ0tleV07XG4gICAgZmxhZ09ialtmbGFnS2V5XSA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gQVNTRVJUX0VYSVNUUyhvYmopIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkludGVybmFsIEVycm9yIC0gU2hvdWxkIG5ldmVyIGdldCBoZXJlIVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuZXhwb3J0IGZ1bmN0aW9uIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFKCkge1xuICAgIHRocm93IEVycm9yKFwiSW50ZXJuYWwgRXJyb3IgLSBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUhXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hhcmFjdGVyKG9iaikge1xuICAgIHJldHVybiBvYmpbXCJ0eXBlXCJdID09PSBcIkNoYXJhY3RlclwiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwKICAgICJpbXBvcnQgeyBjYyB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5leHBvcnQgY29uc3QgZGlnaXRzQ2hhckNvZGVzID0gW107XG5mb3IgKGxldCBpID0gY2MoXCIwXCIpOyBpIDw9IGNjKFwiOVwiKTsgaSsrKSB7XG4gICAgZGlnaXRzQ2hhckNvZGVzLnB1c2goaSk7XG59XG5leHBvcnQgY29uc3Qgd29yZENoYXJDb2RlcyA9IFtjYyhcIl9cIildLmNvbmNhdChkaWdpdHNDaGFyQ29kZXMpO1xuZm9yIChsZXQgaSA9IGNjKFwiYVwiKTsgaSA8PSBjYyhcInpcIik7IGkrKykge1xuICAgIHdvcmRDaGFyQ29kZXMucHVzaChpKTtcbn1cbmZvciAobGV0IGkgPSBjYyhcIkFcIik7IGkgPD0gY2MoXCJaXCIpOyBpKyspIHtcbiAgICB3b3JkQ2hhckNvZGVzLnB1c2goaSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9SZWdFeHAjY2hhcmFjdGVyLWNsYXNzZXNcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlQ29kZXMgPSBbXG4gICAgY2MoXCIgXCIpLFxuICAgIGNjKFwiXFxmXCIpLFxuICAgIGNjKFwiXFxuXCIpLFxuICAgIGNjKFwiXFxyXCIpLFxuICAgIGNjKFwiXFx0XCIpLFxuICAgIGNjKFwiXFx2XCIpLFxuICAgIGNjKFwiXFx0XCIpLFxuICAgIGNjKFwiXFx1MDBhMFwiKSxcbiAgICBjYyhcIlxcdTE2ODBcIiksXG4gICAgY2MoXCJcXHUyMDAwXCIpLFxuICAgIGNjKFwiXFx1MjAwMVwiKSxcbiAgICBjYyhcIlxcdTIwMDJcIiksXG4gICAgY2MoXCJcXHUyMDAzXCIpLFxuICAgIGNjKFwiXFx1MjAwNFwiKSxcbiAgICBjYyhcIlxcdTIwMDVcIiksXG4gICAgY2MoXCJcXHUyMDA2XCIpLFxuICAgIGNjKFwiXFx1MjAwN1wiKSxcbiAgICBjYyhcIlxcdTIwMDhcIiksXG4gICAgY2MoXCJcXHUyMDA5XCIpLFxuICAgIGNjKFwiXFx1MjAwYVwiKSxcbiAgICBjYyhcIlxcdTIwMjhcIiksXG4gICAgY2MoXCJcXHUyMDI5XCIpLFxuICAgIGNjKFwiXFx1MjAyZlwiKSxcbiAgICBjYyhcIlxcdTIwNWZcIiksXG4gICAgY2MoXCJcXHUzMDAwXCIpLFxuICAgIGNjKFwiXFx1ZmVmZlwiKSxcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFyYWN0ZXItY2xhc3Nlcy5qcy5tYXAiLAogICAgImltcG9ydCB7IGFkZEZsYWcsIEFTU0VSVF9FWElTVFMsIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFLCBjYywgaW5zZXJ0VG9TZXQsIGlzQ2hhcmFjdGVyLCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBkaWdpdHNDaGFyQ29kZXMsIHdoaXRlc3BhY2VDb2Rlcywgd29yZENoYXJDb2RlcywgfSBmcm9tIFwiLi9jaGFyYWN0ZXItY2xhc3Nlcy5qc1wiO1xuLy8gY29uc3RzIGFuZCB1dGlsaXRpZXNcbmNvbnN0IGhleERpZ2l0UGF0dGVybiA9IC9bMC05YS1mQS1GXS87XG5jb25zdCBkZWNpbWFsUGF0dGVybiA9IC9bMC05XS87XG5jb25zdCBkZWNpbWFsUGF0dGVybk5vWmVybyA9IC9bMS05XS87XG4vLyBodHRwczovL2hhY2tlcm5vb24uY29tL3RoZS1tYWRuZXNzLW9mLXBhcnNpbmctcmVhbC13b3JsZC1qYXZhc2NyaXB0LXJlZ2V4cHMtZDllZTMzNmRmOTgzXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC9pbmRleC5odG1sI3Byb2QtUGF0dGVyblxuZXhwb3J0IGNsYXNzIFJlZ0V4cFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaWR4ID0gMDtcbiAgICAgICAgdGhpcy5pbnB1dCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZ3JvdXBJZHggPSAwO1xuICAgIH1cbiAgICBzYXZlU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZHg6IHRoaXMuaWR4LFxuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuaW5wdXQsXG4gICAgICAgICAgICBncm91cElkeDogdGhpcy5ncm91cElkeCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVzdG9yZVN0YXRlKG5ld1N0YXRlKSB7XG4gICAgICAgIHRoaXMuaWR4ID0gbmV3U3RhdGUuaWR4O1xuICAgICAgICB0aGlzLmlucHV0ID0gbmV3U3RhdGUuaW5wdXQ7XG4gICAgICAgIHRoaXMuZ3JvdXBJZHggPSBuZXdTdGF0ZS5ncm91cElkeDtcbiAgICB9XG4gICAgcGF0dGVybihpbnB1dCkge1xuICAgICAgICAvLyBwYXJzZXIgc3RhdGVcbiAgICAgICAgdGhpcy5pZHggPSAwO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuZ3JvdXBJZHggPSAwO1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiL1wiKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRpc2p1bmN0aW9uKCk7XG4gICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCIvXCIpO1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiRmxhZ3NcIixcbiAgICAgICAgICAgIGxvYzogeyBiZWdpbjogdGhpcy5pZHgsIGVuZDogaW5wdXQubGVuZ3RoIH0sXG4gICAgICAgICAgICBnbG9iYWw6IGZhbHNlLFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogZmFsc2UsXG4gICAgICAgICAgICBtdWx0aUxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgdW5pY29kZTogZmFsc2UsXG4gICAgICAgICAgICBzdGlja3k6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICB3aGlsZSAodGhpcy5pc1JlZ0V4cEZsYWcoKSkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZsYWcoZmxhZ3MsIFwiZ2xvYmFsXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRGbGFnKGZsYWdzLCBcImlnbm9yZUNhc2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZsYWcoZmxhZ3MsIFwibXVsdGlMaW5lXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgICAgICBhZGRGbGFnKGZsYWdzLCBcInVuaWNvZGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ5XCI6XG4gICAgICAgICAgICAgICAgICAgIGFkZEZsYWcoZmxhZ3MsIFwic3RpY2t5XCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pZHggIT09IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJlZHVuZGFudCBpbnB1dDogXCIgKyB0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLmlkeCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlBhdHRlcm5cIixcbiAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGxvYzogdGhpcy5sb2MoMCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRpc2p1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBhbHRzID0gW107XG4gICAgICAgIGNvbnN0IGJlZ2luID0gdGhpcy5pZHg7XG4gICAgICAgIGFsdHMucHVzaCh0aGlzLmFsdGVybmF0aXZlKCkpO1xuICAgICAgICB3aGlsZSAodGhpcy5wZWVrQ2hhcigpID09PSBcInxcIikge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcInxcIik7XG4gICAgICAgICAgICBhbHRzLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0eXBlOiBcIkRpc2p1bmN0aW9uXCIsIHZhbHVlOiBhbHRzLCBsb2M6IHRoaXMubG9jKGJlZ2luKSB9O1xuICAgIH1cbiAgICBhbHRlcm5hdGl2ZSgpIHtcbiAgICAgICAgY29uc3QgdGVybXMgPSBbXTtcbiAgICAgICAgY29uc3QgYmVnaW4gPSB0aGlzLmlkeDtcbiAgICAgICAgd2hpbGUgKHRoaXMuaXNUZXJtKCkpIHtcbiAgICAgICAgICAgIHRlcm1zLnB1c2godGhpcy50ZXJtKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiQWx0ZXJuYXRpdmVcIiwgdmFsdWU6IHRlcm1zLCBsb2M6IHRoaXMubG9jKGJlZ2luKSB9O1xuICAgIH1cbiAgICB0ZXJtKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Fzc2VydGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hc3NlcnRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0b20oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnRpb24oKSB7XG4gICAgICAgIGNvbnN0IGJlZ2luID0gdGhpcy5pZHg7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wb3BDaGFyKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJTdGFydEFuY2hvclwiLFxuICAgICAgICAgICAgICAgICAgICBsb2M6IHRoaXMubG9jKGJlZ2luKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSBcIiRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIkVuZEFuY2hvclwiLCBsb2M6IHRoaXMubG9jKGJlZ2luKSB9O1xuICAgICAgICAgICAgLy8gJ1xcYicgb3IgJ1xcQidcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIldvcmRCb3VuZGFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogdGhpcy5sb2MoYmVnaW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJOb25Xb3JkQm91bmRhcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2M6IHRoaXMubG9jKGJlZ2luKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGVcIik7XG4gICAgICAgICAgICAvLyAnKD89JyBvciAnKD8hJ1xuICAgICAgICAgICAgY2FzZSBcIihcIjpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiP1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMucG9wQ2hhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCI9XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gXCJMb29rYWhlYWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiIVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IFwiTmVnYXRpdmVMb29rYWhlYWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBBU1NFUlRfRVhJU1RTKHR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2p1bmN0aW9uID0gdGhpcy5kaXNqdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCIpXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkaXNqdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbG9jOiB0aGlzLmxvYyhiZWdpbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICByZXR1cm4gQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUoKTtcbiAgICB9XG4gICAgcXVhbnRpZmllcihpc0JhY2t0cmFja2luZyA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYmVnaW4gPSB0aGlzLmlkeDtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgY2FzZSBcIipcIjpcbiAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogMCxcbiAgICAgICAgICAgICAgICAgICAgYXRNb3N0OiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogMSxcbiAgICAgICAgICAgICAgICAgICAgYXRNb3N0OiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogMCxcbiAgICAgICAgICAgICAgICAgICAgYXRNb3N0OiAxLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwie1wiOlxuICAgICAgICAgICAgICAgIGNvbnN0IGF0TGVhc3QgPSB0aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwifVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRMZWFzdDogYXRMZWFzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdE1vc3Q6IGF0TGVhc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCIsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXRNb3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEaWdpdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRNb3N0ID0gdGhpcy5pbnRlZ2VySW5jbHVkaW5nWmVybygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdExlYXN0OiBhdExlYXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdE1vc3Q6IGF0TW9zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0TGVhc3Q6IGF0TGVhc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0TW9zdDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHRocm93aW5nIGV4Y2VwdGlvbnMgZnJvbSBcIkFTU0VSVF9FWElTVFNcIiBkdXJpbmcgYmFja3RyYWNraW5nXG4gICAgICAgICAgICAgICAgLy8gY2F1c2VzIHNldmVyZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoaXNCYWNrdHJhY2tpbmcgPT09IHRydWUgJiYgcmFuZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBBU1NFUlRfRVhJU1RTKHJhbmdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyB0aHJvd2luZyBleGNlcHRpb25zIGZyb20gXCJBU1NFUlRfRVhJU1RTXCIgZHVyaW5nIGJhY2t0cmFja2luZ1xuICAgICAgICAvLyBjYXVzZXMgc2V2ZXJlIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uc1xuICAgICAgICBpZiAoaXNCYWNrdHJhY2tpbmcgPT09IHRydWUgJiYgcmFuZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhyYW5nZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlZWtDaGFyKDApID09PSBcIj9cIikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCI/XCIpO1xuICAgICAgICAgICAgICAgIHJhbmdlLmdyZWVkeSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZ3JlZWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJhbmdlLnR5cGUgPSBcIlF1YW50aWZpZXJcIjtcbiAgICAgICAgICAgIHJhbmdlLmxvYyA9IHRoaXMubG9jKGJlZ2luKTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdG9tKCkge1xuICAgICAgICBsZXQgYXRvbTtcbiAgICAgICAgY29uc3QgYmVnaW4gPSB0aGlzLmlkeDtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICAgICAgYXRvbSA9IHRoaXMuZG90QWxsKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgICAgICAgIGF0b20gPSB0aGlzLmF0b21Fc2NhcGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgICAgICAgYXRvbSA9IHRoaXMuY2hhcmFjdGVyQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCIoXCI6XG4gICAgICAgICAgICAgICAgYXRvbSA9IHRoaXMuZ3JvdXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXRvbSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuaXNQYXR0ZXJuQ2hhcmFjdGVyKCkpIHtcbiAgICAgICAgICAgIGF0b20gPSB0aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhhdG9tKSkge1xuICAgICAgICAgICAgYXRvbS5sb2MgPSB0aGlzLmxvYyhiZWdpbik7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1F1YW50aWZpZXIoKSkge1xuICAgICAgICAgICAgICAgIGF0b20ucXVhbnRpZmllciA9IHRoaXMucXVhbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF0b207XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgcmV0dXJuIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFKCk7XG4gICAgfVxuICAgIGRvdEFsbCgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcIi5cIik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlNldFwiLFxuICAgICAgICAgICAgY29tcGxlbWVudDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbY2MoXCJcXG5cIiksIGNjKFwiXFxyXCIpLCBjYyhcIlxcdTIwMjhcIiksIGNjKFwiXFx1MjAyOVwiKV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGF0b21Fc2NhcGUoKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCJcXFxcXCIpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoKSkge1xuICAgICAgICAgICAgY2FzZSBcIjFcIjpcbiAgICAgICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgICAgICBjYXNlIFwiM1wiOlxuICAgICAgICAgICAgY2FzZSBcIjRcIjpcbiAgICAgICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgICAgICBjYXNlIFwiNlwiOlxuICAgICAgICAgICAgY2FzZSBcIjdcIjpcbiAgICAgICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgICAgICBjYXNlIFwiOVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxFc2NhcGVBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyQ2xhc3NFc2NhcGUoKTtcbiAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgY2FzZSBcInJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0XCI6XG4gICAgICAgICAgICBjYXNlIFwidlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwiMFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtcbiAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVjaW1hbEVzY2FwZUF0b20oKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wb3NpdGl2ZUludGVnZXIoKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJHcm91cEJhY2tSZWZlcmVuY2VcIiwgdmFsdWU6IHZhbHVlIH07XG4gICAgfVxuICAgIGNoYXJhY3RlckNsYXNzRXNjYXBlKCkge1xuICAgICAgICBsZXQgc2V0O1xuICAgICAgICBsZXQgY29tcGxlbWVudCA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKHRoaXMucG9wQ2hhcigpKSB7XG4gICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgIHNldCA9IGRpZ2l0c0NoYXJDb2RlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICAgICAgc2V0ID0gZGlnaXRzQ2hhckNvZGVzO1xuICAgICAgICAgICAgICAgIGNvbXBsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICBzZXQgPSB3aGl0ZXNwYWNlQ29kZXM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgICAgIHNldCA9IHdoaXRlc3BhY2VDb2RlcztcbiAgICAgICAgICAgICAgICBjb21wbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICAgICAgc2V0ID0gd29yZENoYXJDb2RlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICAgICAgc2V0ID0gd29yZENoYXJDb2RlcztcbiAgICAgICAgICAgICAgICBjb21wbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIlNldFwiLCB2YWx1ZTogc2V0LCBjb21wbGVtZW50OiBjb21wbGVtZW50IH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgcmV0dXJuIEFTU0VSVF9ORVZFUl9SRUFDSF9IRVJFKCk7XG4gICAgfVxuICAgIGNvbnRyb2xFc2NhcGVBdG9tKCkge1xuICAgICAgICBsZXQgZXNjYXBlQ29kZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBvcENoYXIoKSkge1xuICAgICAgICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgICAgICAgICBlc2NhcGVDb2RlID0gY2MoXCJcXGZcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgICAgIGVzY2FwZUNvZGUgPSBjYyhcIlxcblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICAgICAgZXNjYXBlQ29kZSA9IGNjKFwiXFxyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgICAgICAgICBlc2NhcGVDb2RlID0gY2MoXCJcXHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidlwiOlxuICAgICAgICAgICAgICAgIGVzY2FwZUNvZGUgPSBjYyhcIlxcdlwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAoQVNTRVJUX0VYSVNUUyhlc2NhcGVDb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGVzY2FwZUNvZGUgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICByZXR1cm4gQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUoKTtcbiAgICB9XG4gICAgY29udHJvbExldHRlckVzY2FwZUF0b20oKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZUNoYXIoXCJjXCIpO1xuICAgICAgICBjb25zdCBsZXR0ZXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgaWYgKC9bYS16QS1aXS8udGVzdChsZXR0ZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZXR0ZXJDb2RlID0gbGV0dGVyLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtIDY0O1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIkNoYXJhY3RlclwiLCB2YWx1ZTogbGV0dGVyQ29kZSB9O1xuICAgIH1cbiAgICBudWxDaGFyYWN0ZXJBdG9tKCkge1xuICAgICAgICAvLyBUT0RPIGltcGxlbWVudCAnW2xvb2thaGVhZCDiiIkgRGVjaW1hbERpZ2l0XSdcbiAgICAgICAgLy8gVE9ETzogZm9yIHRoZSBkZXByZWNhdGVkIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiMFwiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNjKFwiXFwwXCIpIH07XG4gICAgfVxuICAgIGhleEVzY2FwZVNlcXVlbmNlQXRvbSgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcInhcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlSGV4RGlnaXRzKDIpO1xuICAgIH1cbiAgICByZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwidVwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VIZXhEaWdpdHMoNCk7XG4gICAgfVxuICAgIGlkZW50aXR5RXNjYXBlQXRvbSgpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IFwiU291cmNlQ2hhcmFjdGVyIGJ1dCBub3QgVW5pY29kZUlEQ29udGludWVcIlxuICAgICAgICAvLyAvLyBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjMxLyNTcGVjaWZpY19DaGFyYWN0ZXJfQWRqdXN0bWVudHNcbiAgICAgICAgY29uc3QgZXNjYXBlZENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNjKGVzY2FwZWRDaGFyKSB9O1xuICAgIH1cbiAgICBjbGFzc1BhdHRlcm5DaGFyYWN0ZXJBdG9tKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoKSkge1xuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXG5cIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxyXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjhcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOVwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIl1cIjpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRCRFwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIkNoYXJhY3RlclwiLCB2YWx1ZTogY2MobmV4dENoYXIpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhcmFjdGVyQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHNldCA9IFtdO1xuICAgICAgICBsZXQgY29tcGxlbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiW1wiKTtcbiAgICAgICAgaWYgKHRoaXMucGVla0NoYXIoMCkgPT09IFwiXlwiKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiXlwiKTtcbiAgICAgICAgICAgIGNvbXBsZW1lbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLmlzQ2xhc3NBdG9tKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNsYXNzQXRvbSgpO1xuICAgICAgICAgICAgY29uc3QgaXNGcm9tU2luZ2xlQ2hhciA9IGZyb20udHlwZSA9PT0gXCJDaGFyYWN0ZXJcIjtcbiAgICAgICAgICAgIGlmIChpc0NoYXJhY3Rlcihmcm9tKSAmJiB0aGlzLmlzUmFuZ2VEYXNoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiLVwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0byA9IHRoaXMuY2xhc3NBdG9tKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb1NpbmdsZUNoYXIgPSB0by50eXBlID09PSBcIkNoYXJhY3RlclwiO1xuICAgICAgICAgICAgICAgIC8vIGEgcmFuZ2UgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGJvdGggc2lkZXMgYXJlIHNpbmdsZSBjaGFyYWN0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hhcmFjdGVyKHRvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG8udmFsdWUgPCBmcm9tLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJhbmdlIG91dCBvZiBvcmRlciBpbiBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0LnB1c2goeyBmcm9tOiBmcm9tLnZhbHVlLCB0bzogdG8udmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBsaXRlcmFsIGRhc2hcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9TZXQoZnJvbS52YWx1ZSwgc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LnB1c2goY2MoXCItXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9TZXQodG8udmFsdWUsIHNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5zZXJ0VG9TZXQoZnJvbS52YWx1ZSwgc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiXVwiKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJTZXRcIiwgY29tcGxlbWVudDogY29tcGxlbWVudCwgdmFsdWU6IHNldCB9O1xuICAgIH1cbiAgICBjbGFzc0F0b20oKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wZWVrQ2hhcigpKSB7XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIl1cIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxuXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcclwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXHUyMDI4XCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjlcIjpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRCRFwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NFc2NhcGUoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzRXNjYXBlKCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiXFxcXFwiKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKCkpIHtcbiAgICAgICAgICAgIC8vIE1hdGNoZXMgYSBiYWNrc3BhY2UuXG4gICAgICAgICAgICAvLyAoTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggXFxiIHdvcmQgYm91bmRhcnkgb3V0c2lkZSBjaGFyYWN0ZXJDbGFzcylcbiAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcImJcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNjKFwiXFx1MDAwOFwiKSB9O1xuICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7XG4gICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgY2FzZSBcInZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO1xuICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO1xuICAgICAgICAgICAgY2FzZSBcIjBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udWxDaGFyYWN0ZXJBdG9tKCk7XG4gICAgICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO1xuICAgICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlkZW50aXR5RXNjYXBlQXRvbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdyb3VwKCkge1xuICAgICAgICBsZXQgY2FwdHVyaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcihcIihcIik7XG4gICAgICAgIHN3aXRjaCAodGhpcy5wZWVrQ2hhcigwKSkge1xuICAgICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiP1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiOlwiKTtcbiAgICAgICAgICAgICAgICBjYXB0dXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cElkeCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kaXNqdW5jdGlvbigpO1xuICAgICAgICB0aGlzLmNvbnN1bWVDaGFyKFwiKVwiKTtcbiAgICAgICAgY29uc3QgZ3JvdXBBc3QgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIkdyb3VwXCIsXG4gICAgICAgICAgICBjYXB0dXJpbmc6IGNhcHR1cmluZyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNhcHR1cmluZykge1xuICAgICAgICAgICAgZ3JvdXBBc3RbXCJpZHhcIl0gPSB0aGlzLmdyb3VwSWR4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncm91cEFzdDtcbiAgICB9XG4gICAgcG9zaXRpdmVJbnRlZ2VyKCkge1xuICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy5wb3BDaGFyKCk7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY2FuJ3QgZXZlciBnZXQgaGVyZSBkdWUgdG8gcHJldmlvdXMgbG9va2FoZWFkIGNoZWNrc1xuICAgICAgICAvLyBzdGlsbCBpbXBsZW1lbnRpbmcgdGhpcyBlcnJvciBjaGVja2luZyBpbiBjYXNlIHRoaXMgZXZlciBjaGFuZ2VzLlxuICAgICAgICBpZiAoZGVjaW1hbFBhdHRlcm5Ob1plcm8udGVzdChudW1iZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RpbmcgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChkZWNpbWFsUGF0dGVybi50ZXN0KHRoaXMucGVla0NoYXIoMCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5wb3BDaGFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgIH1cbiAgICBpbnRlZ2VySW5jbHVkaW5nWmVybygpIHtcbiAgICAgICAgbGV0IG51bWJlciA9IHRoaXMucG9wQ2hhcigpO1xuICAgICAgICBpZiAoZGVjaW1hbFBhdHRlcm4udGVzdChudW1iZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RpbmcgYW4gaW50ZWdlclwiKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoZGVjaW1hbFBhdHRlcm4udGVzdCh0aGlzLnBlZWtDaGFyKDApKSkge1xuICAgICAgICAgICAgbnVtYmVyICs9IHRoaXMucG9wQ2hhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUludChudW1iZXIsIDEwKTtcbiAgICB9XG4gICAgcGF0dGVybkNoYXJhY3RlcigpIHtcbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgc3dpdGNoIChuZXh0Q2hhcikge1xuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJcXG5cIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxyXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjhcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOVwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIiRcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIipcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiK1wiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCI/XCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcIihcIjpcbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICBjYXNlIFwiKVwiOlxuICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgY2FzZSBcInxcIjpcbiAgICAgICAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVEJEXCIpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiBcIkNoYXJhY3RlclwiLCB2YWx1ZTogY2MobmV4dENoYXIpIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNSZWdFeHBGbGFnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNSYW5nZURhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlZWtDaGFyKCkgPT09IFwiLVwiICYmIHRoaXMuaXNDbGFzc0F0b20oMSk7XG4gICAgfVxuICAgIGlzRGlnaXQoKSB7XG4gICAgICAgIHJldHVybiBkZWNpbWFsUGF0dGVybi50ZXN0KHRoaXMucGVla0NoYXIoMCkpO1xuICAgIH1cbiAgICBpc0NsYXNzQXRvbShob3dNdWNoID0gMCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoaG93TXVjaCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJdXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFxuXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFxyXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOFwiOlxuICAgICAgICAgICAgY2FzZSBcIlxcdTIwMjlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzVGVybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBdG9tKCkgfHwgdGhpcy5pc0Fzc2VydGlvbigpO1xuICAgIH1cbiAgICBpc0F0b20oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICBjYXNlIFwiXFxcXFwiOiAvLyBhdG9tRXNjYXBlXG4gICAgICAgICAgICBjYXNlIFwiW1wiOiAvLyBjaGFyYWN0ZXJDbGFzc1xuICAgICAgICAgICAgLy8gVE9ETzogaXNBdG9tIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpc0Fzc2VydGlvbiAtIGRpc2FtYmlndWF0ZVxuICAgICAgICAgICAgY2FzZSBcIihcIjogLy8gZ3JvdXBcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzQXNzZXJ0aW9uKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVla0NoYXIoMCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgLy8gJ1xcYicgb3IgJ1xcQidcbiAgICAgICAgICAgIGNhc2UgXCJcXFxcXCI6XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJCXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAnKD89JyBvciAnKD8hJ1xuICAgICAgICAgICAgY2FzZSBcIihcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucGVla0NoYXIoMSkgPT09IFwiP1wiICYmXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnBlZWtDaGFyKDIpID09PSBcIj1cIiB8fCB0aGlzLnBlZWtDaGFyKDIpID09PSBcIiFcIikpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNRdWFudGlmaWVyKCkge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVhbnRpZmllcih0cnVlKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShwcmV2U3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzUGF0dGVybkNoYXJhY3RlcigpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlZWtDaGFyKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJeXCI6XG4gICAgICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgICAgY2FzZSBcIlxcXFxcIjpcbiAgICAgICAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgICAgICBjYXNlIFwiKlwiOlxuICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgIGNhc2UgXCI/XCI6XG4gICAgICAgICAgICBjYXNlIFwiKFwiOlxuICAgICAgICAgICAgY2FzZSBcIilcIjpcbiAgICAgICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgICBjYXNlIFwifFwiOlxuICAgICAgICAgICAgY2FzZSBcIi9cIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXG5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXHJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJcXHUyMDI4XCI6XG4gICAgICAgICAgICBjYXNlIFwiXFx1MjAyOVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VIZXhEaWdpdHMoaG93TWFueSkge1xuICAgICAgICBsZXQgaGV4U3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBob3dNYW55OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGhleENoYXIgPSB0aGlzLnBvcENoYXIoKTtcbiAgICAgICAgICAgIGlmIChoZXhEaWdpdFBhdHRlcm4udGVzdChoZXhDaGFyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGluZyBhIEhleERlY2ltYWwgZGlnaXRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGV4U3RyaW5nICs9IGhleENoYXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBwYXJzZUludChoZXhTdHJpbmcsIDE2KTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJDaGFyYWN0ZXJcIiwgdmFsdWU6IGNoYXJDb2RlIH07XG4gICAgfVxuICAgIHBlZWtDaGFyKGhvd011Y2ggPSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0W3RoaXMuaWR4ICsgaG93TXVjaF07XG4gICAgfVxuICAgIHBvcENoYXIoKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gdGhpcy5wZWVrQ2hhcigwKTtcbiAgICAgICAgdGhpcy5jb25zdW1lQ2hhcih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gbmV4dENoYXI7XG4gICAgfVxuICAgIGNvbnN1bWVDaGFyKGNoYXIpIHtcbiAgICAgICAgaWYgKGNoYXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlucHV0W3RoaXMuaWR4XSAhPT0gY2hhcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZDogJ1wiICtcbiAgICAgICAgICAgICAgICBjaGFyICtcbiAgICAgICAgICAgICAgICBcIicgYnV0IGZvdW5kOiAnXCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRbdGhpcy5pZHhdICtcbiAgICAgICAgICAgICAgICBcIicgYXQgb2Zmc2V0OiBcIiArXG4gICAgICAgICAgICAgICAgdGhpcy5pZHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlkeCA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlkeCsrO1xuICAgIH1cbiAgICBsb2MoYmVnaW4pIHtcbiAgICAgICAgcmV0dXJuIHsgYmVnaW46IGJlZ2luLCBlbmQ6IHRoaXMuaWR4IH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVnZXhwLXBhcnNlci5qcy5tYXAiLAogICAgImV4cG9ydCBjbGFzcyBCYXNlUmVnRXhwVmlzaXRvciB7XG4gICAgdmlzaXRDaGlsZHJlbihub2RlKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5mb3JFYWNoKChzdWJDaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpdChzdWJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdChub2RlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiUGF0dGVyblwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRQYXR0ZXJuKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZsYWdzXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdEZsYWdzKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkRpc2p1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdERpc2p1bmN0aW9uKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkFsdGVybmF0aXZlXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdEFsdGVybmF0aXZlKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlN0YXJ0QW5jaG9yXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdFN0YXJ0QW5jaG9yKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkVuZEFuY2hvclwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRFbmRBbmNob3Iobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiV29yZEJvdW5kYXJ5XCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdFdvcmRCb3VuZGFyeShub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJOb25Xb3JkQm91bmRhcnlcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9uV29yZEJvdW5kYXJ5KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkxvb2thaGVhZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRMb29rYWhlYWQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiTmVnYXRpdmVMb29rYWhlYWRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiQ2hhcmFjdGVyXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdENoYXJhY3Rlcihub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0U2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkdyb3VwXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdEdyb3VwKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkdyb3VwQmFja1JlZmVyZW5jZVwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRHcm91cEJhY2tSZWZlcmVuY2Uobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiUXVhbnRpZmllclwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRRdWFudGlmaWVyKG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTtcbiAgICB9XG4gICAgdmlzaXRQYXR0ZXJuKG5vZGUpIHsgfVxuICAgIHZpc2l0RmxhZ3Mobm9kZSkgeyB9XG4gICAgdmlzaXREaXNqdW5jdGlvbihub2RlKSB7IH1cbiAgICB2aXNpdEFsdGVybmF0aXZlKG5vZGUpIHsgfVxuICAgIC8vIEFzc2VydGlvblxuICAgIHZpc2l0U3RhcnRBbmNob3Iobm9kZSkgeyB9XG4gICAgdmlzaXRFbmRBbmNob3Iobm9kZSkgeyB9XG4gICAgdmlzaXRXb3JkQm91bmRhcnkobm9kZSkgeyB9XG4gICAgdmlzaXROb25Xb3JkQm91bmRhcnkobm9kZSkgeyB9XG4gICAgdmlzaXRMb29rYWhlYWQobm9kZSkgeyB9XG4gICAgdmlzaXROZWdhdGl2ZUxvb2thaGVhZChub2RlKSB7IH1cbiAgICAvLyBhdG9tc1xuICAgIHZpc2l0Q2hhcmFjdGVyKG5vZGUpIHsgfVxuICAgIHZpc2l0U2V0KG5vZGUpIHsgfVxuICAgIHZpc2l0R3JvdXAobm9kZSkgeyB9XG4gICAgdmlzaXRHcm91cEJhY2tSZWZlcmVuY2Uobm9kZSkgeyB9XG4gICAgdmlzaXRRdWFudGlmaWVyKG5vZGUpIHsgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS1yZWdleHAtdmlzaXRvci5qcy5tYXAiLAogICAgImV4cG9ydCB7IFJlZ0V4cFBhcnNlciB9IGZyb20gXCIuL3JlZ2V4cC1wYXJzZXIuanNcIjtcbmV4cG9ydCB7IEJhc2VSZWdFeHBWaXNpdG9yIH0gZnJvbSBcIi4vYmFzZS1yZWdleHAtdmlzaXRvci5qc1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgUmVnRXhwUGFyc2VyLCBCYXNlUmVnRXhwVmlzaXRvciB9IGZyb20gJ0BjaGV2cm90YWluL3JlZ2V4cC10by1hc3QnO1xuZXhwb3J0IGNvbnN0IE5FV0xJTkVfUkVHRVhQID0gL1xccj9cXG4vZ207XG5jb25zdCByZWdleHBQYXJzZXIgPSBuZXcgUmVnRXhwUGFyc2VyKCk7XG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgaW4gY2hhcmdlIG9mIGhldXJpc3RpY2FsbHkgaWRlbnRpZnlpbmcgc3RhcnQvZW5kIHRva2VucyBvZiB0ZXJtaW5hbHMuXG4gKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6XG4gKiAxLiBUcmF2ZXJzZSB0aGUgcmVndWxhciBleHByZXNzaW9uIGluIHRoZSBcInN0YXJ0IHN0YXRlXCJcbiAqIDIuIEFkZCBhbnkgZW5jb3VudGVyZWQgc2V0cy9zaW5nbGUgY2hhcmFjdGVycyB0byB0aGUgXCJzdGFydCByZWdleHBcIlxuICogMy4gT25jZSB3ZSBlbmNvdW50ZXIgYW55IHZhcmlhYmxlLWxlbmd0aCBjb250ZW50IChpLmUuIHdpdGggcXVhbnRpZmllcnMgc3VjaCBhcyArLz8vKiksIHdlIGVudGVyIHRoZSBcImVuZCBzdGF0ZVwiXG4gKiA0LiBJbiB0aGUgZW5kIHN0YXRlLCBhbnkgc2V0cy9zaW5nbGUgY2hhcmFjdGVycyBhcmUgYWRkZWQgdG8gYW4gXCJlbmQgc3RhY2tcIi5cbiAqIDUuIElmIHdlIHJlLWVuY291bnRlciBhbnkgdmFyaWFibGUtbGVuZ3RoIGNvbnRlbnQgd2UgcmVzZXQgdGhlIGVuZCBzdGFja1xuICogNi4gV2UgY29udGludWUgdmlzaXRpbmcgdGhlIHJlZ2V4IHVudGlsIHRoZSBlbmQsIHJlc2V0aW5nIHRoZSBlbmQgc3RhY2sgYW5kIHJlYnVpbGRpbmcgaXQgYXMgbmVjZXNzYXJ5XG4gKlxuICogQWZ0ZXIgdHJhdmVyc2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGUgYHN0YXJ0UmVnZXhwL2VuZFJlZ2V4cGAgcHJvcGVydGllcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIHN0b3JlZCBzdGFydC9lbmQgb2YgdGhlIHRlcm1pbmFsXG4gKi9cbmNsYXNzIFRlcm1pbmFsUmVnRXhwVmlzaXRvciBleHRlbmRzIEJhc2VSZWdFeHBWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbmRSZWdleHBTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLm11bHRpbGluZSA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgZW5kUmVnZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVuZFJlZ2V4cFN0YWNrLmpvaW4oJycpO1xuICAgIH1cbiAgICByZXNldChyZWdleCkge1xuICAgICAgICB0aGlzLm11bHRpbGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7XG4gICAgICAgIHRoaXMuc3RhcnRSZWdleHAgPSAnJztcbiAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbmRSZWdleHBTdGFjayA9IFtdO1xuICAgIH1cbiAgICB2aXNpdEdyb3VwKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucXVhbnRpZmllcikge1xuICAgICAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuZFJlZ2V4cFN0YWNrID0gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDaGFyYWN0ZXIobm9kZSkge1xuICAgICAgICBjb25zdCBjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShub2RlLnZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpbGluZSAmJiBjaGFyID09PSAnXFxuJykge1xuICAgICAgICAgICAgdGhpcy5tdWx0aWxpbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnF1YW50aWZpZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdGFydGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWdleHBTdGFjayA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXNjYXBlZENoYXIgPSBlc2NhcGVSZWdFeHAoY2hhcik7XG4gICAgICAgICAgICB0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2goZXNjYXBlZENoYXIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWdleHAgKz0gZXNjYXBlZENoYXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRTZXQobm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlsaW5lKSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnJlZ2V4LnN1YnN0cmluZyhub2RlLmxvYy5iZWdpbiwgbm9kZS5sb2MuZW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzZXQpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aWxpbmUgPSBCb29sZWFuKCdcXG4nLm1hdGNoKHJlZ2V4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucXVhbnRpZmllcikge1xuICAgICAgICAgICAgdGhpcy5pc1N0YXJ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuZFJlZ2V4cFN0YWNrID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnJlZ2V4LnN1YnN0cmluZyhub2RlLmxvYy5iZWdpbiwgbm9kZS5sb2MuZW5kKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVnZXhwU3RhY2sucHVzaChzZXQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWdleHAgKz0gc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q2hpbGRyZW4obm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnR3JvdXAnKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgY2hpbGRyZW4gb2YgZ3JvdXBzIHdpdGggcXVhbnRpZmllciAoKy8qLz8pXG4gICAgICAgICAgICAvLyBUaGVzZSBncm91cHMgYXJlIHVucmVsYXRlZCB0byBzdGFydC9lbmQgdG9rZW5zIG9mIHRlcm1pbmFsc1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBub2RlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLnF1YW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIudmlzaXRDaGlsZHJlbihub2RlKTtcbiAgICB9XG59XG5jb25zdCB2aXNpdG9yID0gbmV3IFRlcm1pbmFsUmVnRXhwVmlzaXRvcigpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmFsUGFydHMocmVnZXhwKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiByZWdleHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZWdleHAgPSByZWdleHAuc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2V4cCA9IGAvJHtyZWdleHB9L2A7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSByZWdleHBQYXJzZXIucGF0dGVybihyZWdleHApO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGFsdGVybmF0aXZlIG9mIHBhdHRlcm4udmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIHZpc2l0b3IucmVzZXQocmVnZXhwKTtcbiAgICAgICAgICAgIHZpc2l0b3IudmlzaXQoYWx0ZXJuYXRpdmUpO1xuICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHZpc2l0b3Iuc3RhcnRSZWdleHAsXG4gICAgICAgICAgICAgICAgZW5kOiB2aXNpdG9yLmVuZFJlZ2V4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHM7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlsaW5lQ29tbWVudChyZWdleHApIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHJlZ2V4cCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwKTtcbiAgICAgICAgfVxuICAgICAgICByZWdleHAgPSByZWdleHAudG9TdHJpbmcoKTtcbiAgICAgICAgdmlzaXRvci5yZXNldChyZWdleHApO1xuICAgICAgICAvLyBQYXJzaW5nIHRoZSBwYXR0ZXJuIG1pZ2h0IGZhaWwgKHNpbmNlIGl0J3MgdXNlciBjb2RlKVxuICAgICAgICB2aXNpdG9yLnZpc2l0KHJlZ2V4cFBhcnNlci5wYXR0ZXJuKHJlZ2V4cCkpO1xuICAgICAgICByZXR1cm4gdmlzaXRvci5tdWx0aWxpbmU7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZSh2YWx1ZSkge1xuICAgIGNvbnN0IHJlZ2V4cCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgUmVnRXhwKHZhbHVlKSA6IHZhbHVlO1xuICAgIHJldHVybiByZWdleHAudGVzdCgnICcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENhc2VJbnNlbnNpdGl2ZVBhdHRlcm4oa2V5d29yZCkge1xuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoa2V5d29yZCwgbGV0dGVyID0+IC9cXHcvLnRlc3QobGV0dGVyKSA/IGBbJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX0ke2xldHRlci50b1VwcGVyQ2FzZSgpfV1gIDogZXNjYXBlUmVnRXhwKGxldHRlcikpLmpvaW4oJycpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGhhcyBhIHBhcnRpYWwgbWF0Y2ggd2l0aCB0aGUgc3BlY2lmaWVkIHJlZ2V4LlxuICogQHBhcmFtIHJlZ2V4IFRoZSByZWdleCB0byBwYXJ0aWFsbHkgbWF0Y2ggYWdhaW5zdFxuICogQHBhcmFtIGlucHV0IFRoZSBpbnB1dCBzdHJpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW55IG1hdGNoIGV4aXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaGVzKHJlZ2V4LCBpbnB1dCkge1xuICAgIGNvbnN0IHBhcnRpYWwgPSBwYXJ0aWFsUmVnRXhwKHJlZ2V4KTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKHBhcnRpYWwpO1xuICAgIHJldHVybiAhIW1hdGNoICYmIG1hdGNoWzBdLmxlbmd0aCA+IDA7XG59XG4vKipcbiAqIEJ1aWxkcyBhIHBhcnRpYWwgcmVnZXggZnJvbSB0aGUgaW5wdXQgcmVnZXguIEEgcGFydGlhbCByZWdleCBpcyBhYmxlIHRvIG1hdGNoIGluY29tcGxldGUgaW5wdXQgc3RyaW5ncy4gRS5nLlxuICogYSBwYXJ0aWFsIHJlZ2V4IGNvbnN0cnVjdGVkIGZyb20gYC9hYi9gIGlzIGFibGUgdG8gbWF0Y2ggdGhlIHN0cmluZyBgYWAgd2l0aG91dCBuZWVkaW5nIGEgZm9sbG93aW5nIGBiYCBjaGFyYWN0ZXIuIEhvd2V2ZXIgaXQgd29uJ3QgbWF0Y2ggYGJgIGFsb25lLlxuICogQHBhcmFtIHJlZ2V4IFRoZSBpbnB1dCByZWdleCB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJucyBBIHBhcnRpYWwgcmVnZXggY29uc3RydWN0ZWQgZnJvbSB0aGUgaW5wdXQgcmVnZXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsUmVnRXhwKHJlZ2V4KSB7XG4gICAgaWYgKHR5cGVvZiByZWdleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4KTtcbiAgICB9XG4gICAgY29uc3QgcmUgPSByZWdleCwgc291cmNlID0gcmVnZXguc291cmNlO1xuICAgIGxldCBpID0gMDtcbiAgICBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJycsIHRtcDtcbiAgICAgICAgZnVuY3Rpb24gYXBwZW5kUmF3KG5iQ2hhcnMpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzb3VyY2Uuc3Vic3RyKGksIG5iQ2hhcnMpO1xuICAgICAgICAgICAgaSArPSBuYkNoYXJzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGVuZE9wdGlvbmFsKG5iQ2hhcnMpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnKD86JyArIHNvdXJjZS5zdWJzdHIoaSwgbmJDaGFycykgKyAnfCQpJztcbiAgICAgICAgICAgIGkgKz0gbmJDaGFycztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA8IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc291cmNlW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc291cmNlW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZS51bmljb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaSArIDJdID09PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE9wdGlvbmFsKHNvdXJjZS5pbmRleE9mKCd9JywgaSkgLSBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmUudW5pY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbChzb3VyY2UuaW5kZXhPZignfScsIGkpIC0gaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnayc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoc291cmNlLmluZGV4T2YoJz4nLCBpKSAtIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kT3B0aW9uYWwoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICAgICAgICAgIHRtcCA9IC9cXFsoPzpcXFxcLnwuKSo/XFxdL2c7XG4gICAgICAgICAgICAgICAgICAgIHRtcC5sYXN0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAuZXhlYyhzb3VyY2UpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCh0bXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnXic6XG4gICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFJhdygxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICAgICAgICAgIHRtcCA9IC9cXHtcXGQrLD9cXGQqXFx9L2c7XG4gICAgICAgICAgICAgICAgICAgIHRtcC5sYXN0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAuZXhlYyhzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSYXcodG1wWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpICsgMV0gPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzb3VyY2VbaSArIDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnKD86JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvY2VzcygpICsgJ3wkKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJz0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyg/PSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHByb2Nlc3MoKSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc291cmNlLnN1YnN0cih0bXAsIGkgLSB0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzb3VyY2VbaSArIDNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc9JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc291cmNlLnN1YnN0cih0bXAsIGkgLSB0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSYXcoc291cmNlLmluZGV4T2YoJz4nLCBpKSAtIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvY2VzcygpICsgJ3wkKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSYXcoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvY2VzcygpICsgJ3wkKSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRPcHRpb25hbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAocHJvY2VzcygpLCByZWdleC5mbGFncyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdleHAtdXRpbHMuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGFzc2VydFVucmVhY2hhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3JzLmpzJztcbmltcG9ydCAqIGFzIGFzdCBmcm9tICcuLi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyc7XG5pbXBvcnQgeyBpc0NvbXBvc2l0ZUNzdE5vZGUgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBnZXRDb250YWluZXJPZlR5cGUsIHN0cmVhbUFsbENvbnRlbnRzIH0gZnJvbSAnLi9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgc3RyZWFtQ3N0IH0gZnJvbSAnLi9jc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgZXNjYXBlUmVnRXhwIH0gZnJvbSAnLi9yZWdleHAtdXRpbHMuanMnO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbnRyeSBydWxlIG9mIHRoZSBnaXZlbiBncmFtbWFyLCBpZiBhbnkuIElmIHRoZSBncmFtbWFyIGZpbGUgZG9lcyBub3QgY29udGFpbiBhbiBlbnRyeSBydWxlLFxuICogdGhlIHJlc3VsdCBpcyBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5UnVsZShncmFtbWFyKSB7XG4gICAgcmV0dXJuIGdyYW1tYXIucnVsZXMuZmluZChlID0+IGFzdC5pc1BhcnNlclJ1bGUoZSkgJiYgZS5lbnRyeSk7XG59XG4vKipcbiAqIFJldHVybnMgYWxsIGhpZGRlbiB0ZXJtaW5hbCBydWxlcyBvZiB0aGUgZ2l2ZW4gZ3JhbW1hciwgaWYgYW55LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuUnVsZXMoZ3JhbW1hcikge1xuICAgIHJldHVybiBncmFtbWFyLnJ1bGVzLmZpbHRlcigoZSkgPT4gYXN0LmlzVGVybWluYWxSdWxlKGUpICYmIGUuaGlkZGVuKTtcbn1cbi8qKlxuICogUmV0dXJucyBhbGwgcnVsZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSB0b3Btb3N0IHJ1bGVzIG9mIHRoZSBzcGVjaWZpZWQgZ3JhbW1hciAoZW50cnkgYW5kIGhpZGRlbiB0ZXJtaW5hbCBydWxlcykuXG4gKlxuICogQHBhcmFtIGdyYW1tYXIgVGhlIGdyYW1tYXIgdGhhdCBjb250YWlucyBhbGwgcnVsZXNcbiAqIEBwYXJhbSBhbGxUZXJtaW5hbHMgV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0ZXJtaW5hbHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBvbmx5IGJ5IG90aGVyIHRlcm1pbmFsc1xuICogQHJldHVybnMgQSBsaXN0IG9mIHJlZmVyZW5jZWQgcGFyc2VyIGFuZCB0ZXJtaW5hbCBydWxlcy4gSWYgdGhlIGdyYW1tYXIgY29udGFpbnMgbm8gZW50cnkgcnVsZSxcbiAqICAgICAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCBydWxlcyBvZiB0aGUgc3BlY2lmaWVkIGdyYW1tYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxSZWFjaGFibGVSdWxlcyhncmFtbWFyLCBhbGxUZXJtaW5hbHMpIHtcbiAgICBjb25zdCBydWxlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZW50cnlSdWxlID0gZ2V0RW50cnlSdWxlKGdyYW1tYXIpO1xuICAgIGlmICghZW50cnlSdWxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KGdyYW1tYXIucnVsZXMpO1xuICAgIH1cbiAgICBjb25zdCB0b3BNb3N0UnVsZXMgPSBbZW50cnlSdWxlXS5jb25jYXQoZ2V0SGlkZGVuUnVsZXMoZ3JhbW1hcikpO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiB0b3BNb3N0UnVsZXMpIHtcbiAgICAgICAgcnVsZURmcyhydWxlLCBydWxlTmFtZXMsIGFsbFRlcm1pbmFscyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1bGVzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBncmFtbWFyLnJ1bGVzKSB7XG4gICAgICAgIGlmIChydWxlTmFtZXMuaGFzKHJ1bGUubmFtZSkgfHwgKGFzdC5pc1Rlcm1pbmFsUnVsZShydWxlKSAmJiBydWxlLmhpZGRlbikpIHtcbiAgICAgICAgICAgIHJ1bGVzLmFkZChydWxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcnVsZXM7XG59XG5mdW5jdGlvbiBydWxlRGZzKHJ1bGUsIHZpc2l0ZWRTZXQsIGFsbFRlcm1pbmFscykge1xuICAgIHZpc2l0ZWRTZXQuYWRkKHJ1bGUubmFtZSk7XG4gICAgc3RyZWFtQWxsQ29udGVudHMocnVsZSkuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgaWYgKGFzdC5pc1J1bGVDYWxsKG5vZGUpIHx8IChhbGxUZXJtaW5hbHMgJiYgYXN0LmlzVGVybWluYWxSdWxlQ2FsbChub2RlKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZlJ1bGUgPSBub2RlLnJ1bGUucmVmO1xuICAgICAgICAgICAgaWYgKHJlZlJ1bGUgJiYgIXZpc2l0ZWRTZXQuaGFzKHJlZlJ1bGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBydWxlRGZzKHJlZlJ1bGUsIHZpc2l0ZWRTZXQsIGFsbFRlcm1pbmFscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZ3JhbW1hciBleHByZXNzaW9uIHVzZWQgdG8gcGFyc2UgYSBjcm9zcy1yZWZlcmVuY2UgKHVzdWFsbHkgYSByZWZlcmVuY2UgdG8gYSB0ZXJtaW5hbCBydWxlKS5cbiAqIEEgY3Jvc3MtcmVmZXJlbmNlIGNhbiBkZWNsYXJlIHRoaXMgZXhwcmVzc2lvbiBleHBsaWNpdGx5IGluIHRoZSBmb3JtIGBbVHlwZSA6IFRlcm1pbmFsXWAsIGJ1dCBpZiBgVGVybWluYWxgXG4gKiBpcyBvbWl0dGVkLCB0aGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGluZmVyIGl0IGZyb20gdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZWQgYFR5cGVgICh1c2luZyBgZmluZE5hbWVBc3NpZ25tZW50YCkuXG4gKlxuICogUmV0dXJucyB0aGUgZ3JhbW1hciBleHByZXNzaW9uIHVzZWQgdG8gcGFyc2UgdGhlIGdpdmVuIGNyb3NzLXJlZmVyZW5jZSwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgaXMgbm90IGRlY2xhcmVkXG4gKiBhbmQgY2Fubm90IGJlIGluZmVycmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3Jvc3NSZWZlcmVuY2VUZXJtaW5hbChjcm9zc1JlZikge1xuICAgIGlmIChjcm9zc1JlZi50ZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4gY3Jvc3NSZWYudGVybWluYWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNyb3NzUmVmLnR5cGUucmVmKSB7XG4gICAgICAgIGNvbnN0IG5hbWVBc3NpZ21lbnQgPSBmaW5kTmFtZUFzc2lnbm1lbnQoY3Jvc3NSZWYudHlwZS5yZWYpO1xuICAgICAgICByZXR1cm4gbmFtZUFzc2lnbWVudCA9PT0gbnVsbCB8fCBuYW1lQXNzaWdtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYW1lQXNzaWdtZW50LnRlcm1pbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIHRlcm1pbmFsIHJ1bGUgcmVwcmVzZW50cyBhIGNvbW1lbnQuIFRoaXMgaXMgdHJ1ZSBpZiB0aGUgcnVsZSBpcyBtYXJrZWRcbiAqIGFzIGBoaWRkZW5gIGFuZCBpdCBkb2VzIG5vdCBtYXRjaCB3aGl0ZSBzcGFjZS4gVGhpcyBtZWFucyBldmVyeSBoaWRkZW4gdG9rZW4gKGkuZS4gZXhjbHVkZWQgZnJvbSB0aGUgQVNUKVxuICogdGhhdCBjb250YWlucyB2aXNpYmxlIGNoYXJhY3RlcnMgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1lbnRUZXJtaW5hbCh0ZXJtaW5hbFJ1bGUpIHtcbiAgICByZXR1cm4gdGVybWluYWxSdWxlLmhpZGRlbiAmJiAhdGVybWluYWxSZWdleCh0ZXJtaW5hbFJ1bGUpLnRlc3QoJyAnKTtcbn1cbi8qKlxuICogRmluZCBhbGwgQ1NUIG5vZGVzIHdpdGhpbiB0aGUgZ2l2ZW4gbm9kZSB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gbm9kZSBBIENTVCBub2RlIGluIHdoaWNoIHRvIGxvb2sgZm9yIHByb3BlcnR5IGFzc2lnbm1lbnRzLiBJZiB0aGlzIGlzIHVuZGVmaW5lZCwgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBhcnJheS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHByb3BlcnR5IG5hbWUgb2YgdGhlIGNvbnN0cnVjdGVkIEFTVCBub2RlLiBJZiB0aGlzIGlzIHVuZGVmaW5lZCwgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROb2Rlc0ZvclByb3BlcnR5KG5vZGUsIHByb3BlcnR5KSB7XG4gICAgaWYgKCFub2RlIHx8ICFwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBmaW5kTm9kZXNGb3JQcm9wZXJ0eUludGVybmFsKG5vZGUsIHByb3BlcnR5LCBub2RlLmFzdE5vZGUsIHRydWUpO1xufVxuLyoqXG4gKiBGaW5kIGEgc2luZ2xlIENTVCBub2RlIHdpdGhpbiB0aGUgZ2l2ZW4gbm9kZSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG5vZGUgQSBDU1Qgbm9kZSBpbiB3aGljaCB0byBsb29rIGZvciBwcm9wZXJ0eSBhc3NpZ25tZW50cy4gSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZSByZXN1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3RlZCBBU1Qgbm9kZS4gSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZSByZXN1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gaW5kZXggSWYgbm8gaW5kZXggaXMgc3BlY2lmaWVkIG9yIHRoZSBpbmRleCBpcyBsZXNzIHRoYW4gemVybywgdGhlIGZpcnN0IGZvdW5kIG5vZGUgaXMgcmV0dXJuZWQuIElmIHRoZVxuICogICAgICAgIHNwZWNpZmllZCBpbmRleCBleGNlZWRzIHRoZSBudW1iZXIgb2YgYXNzaWdubWVudHMgdG8gdGhlIHByb3BlcnR5LCB0aGUgbGFzdCBmb3VuZCBub2RlIGlzIHJldHVybmVkLiBPdGhlcndpc2UsXG4gKiAgICAgICAgdGhlIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVGb3JQcm9wZXJ0eShub2RlLCBwcm9wZXJ0eSwgaW5kZXgpIHtcbiAgICBpZiAoIW5vZGUgfHwgIXByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVzID0gZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbChub2RlLCBwcm9wZXJ0eSwgbm9kZS5hc3ROb2RlLCB0cnVlKTtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIG5vZGVzLmxlbmd0aCAtIDEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzW2luZGV4XTtcbn1cbmZ1bmN0aW9uIGZpbmROb2Rlc0ZvclByb3BlcnR5SW50ZXJuYWwobm9kZSwgcHJvcGVydHksIGVsZW1lbnQsIGZpcnN0KSB7XG4gICAgaWYgKCFmaXJzdCkge1xuICAgICAgICBjb25zdCBub2RlRmVhdHVyZSA9IGdldENvbnRhaW5lck9mVHlwZShub2RlLmdyYW1tYXJTb3VyY2UsIGFzdC5pc0Fzc2lnbm1lbnQpO1xuICAgICAgICBpZiAobm9kZUZlYXR1cmUgJiYgbm9kZUZlYXR1cmUuZmVhdHVyZSA9PT0gcHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBbbm9kZV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ29tcG9zaXRlQ3N0Tm9kZShub2RlKSAmJiBub2RlLmFzdE5vZGUgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY29udGVudC5mbGF0TWFwKGUgPT4gZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbChlLCBwcm9wZXJ0eSwgZWxlbWVudCwgZmFsc2UpKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuLyoqXG4gKiBGaW5kIGFsbCBDU1Qgbm9kZXMgd2l0aGluIHRoZSBnaXZlbiBub2RlIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGtleXdvcmQuXG4gKlxuICogQHBhcmFtIG5vZGUgQSBDU1Qgbm9kZSBpbiB3aGljaCB0byBsb29rIGZvciBrZXl3b3Jkcy4gSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgYXJyYXkuXG4gKiBAcGFyYW0ga2V5d29yZCBBIGtleXdvcmQgYXMgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVzRm9yS2V5d29yZChub2RlLCBrZXl3b3JkKSB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmROb2Rlc0ZvcktleXdvcmRJbnRlcm5hbChub2RlLCBrZXl3b3JkLCBub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5vZGUuYXN0Tm9kZSk7XG59XG4vKipcbiAqIEZpbmQgYSBzaW5nbGUgQ1NUIG5vZGUgd2l0aGluIHRoZSBnaXZlbiBub2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBrZXl3b3JkLlxuICpcbiAqIEBwYXJhbSBub2RlIEEgQ1NUIG5vZGUgaW4gd2hpY2ggdG8gbG9vayBmb3Iga2V5d29yZHMuIElmIHRoaXMgaXMgdW5kZWZpbmVkLCB0aGUgcmVzdWx0IGlzIGB1bmRlZmluZWRgLlxuICogQHBhcmFtIGtleXdvcmQgQSBrZXl3b3JkIGFzIHNwZWNpZmllZCBpbiB0aGUgZ3JhbW1hci5cbiAqIEBwYXJhbSBpbmRleCBJZiBubyBpbmRleCBpcyBzcGVjaWZpZWQgb3IgdGhlIGluZGV4IGlzIGxlc3MgdGhhbiB6ZXJvLCB0aGUgZmlyc3QgZm91bmQgbm9kZSBpcyByZXR1cm5lZC4gSWYgdGhlXG4gKiAgICAgICAgc3BlY2lmaWVkIGluZGV4IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBrZXl3b3JkIG9jY3VycmVuY2VzLCB0aGUgbGFzdCBmb3VuZCBub2RlIGlzIHJldHVybmVkLiBPdGhlcndpc2UsXG4gKiAgICAgICAgdGhlIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGVGb3JLZXl3b3JkKG5vZGUsIGtleXdvcmQsIGluZGV4KSB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVzID0gZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsKG5vZGUsIGtleXdvcmQsIG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbm9kZS5hc3ROb2RlKTtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIG5vZGVzLmxlbmd0aCAtIDEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzW2luZGV4XTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm9kZXNGb3JLZXl3b3JkSW50ZXJuYWwobm9kZSwga2V5d29yZCwgZWxlbWVudCkge1xuICAgIGlmIChub2RlLmFzdE5vZGUgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoYXN0LmlzS2V5d29yZChub2RlLmdyYW1tYXJTb3VyY2UpICYmIG5vZGUuZ3JhbW1hclNvdXJjZS52YWx1ZSA9PT0ga2V5d29yZCkge1xuICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgIH1cbiAgICBjb25zdCB0cmVlSXRlcmF0b3IgPSBzdHJlYW1Dc3Qobm9kZSkuaXRlcmF0b3IoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IGtleXdvcmROb2RlcyA9IFtdO1xuICAgIGRvIHtcbiAgICAgICAgcmVzdWx0ID0gdHJlZUl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5hc3ROb2RlID09PSBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFzdC5pc0tleXdvcmQoY2hpbGROb2RlLmdyYW1tYXJTb3VyY2UpICYmIGNoaWxkTm9kZS5ncmFtbWFyU291cmNlLnZhbHVlID09PSBrZXl3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZXJhdG9yLnBydW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IHdoaWxlICghcmVzdWx0LmRvbmUpO1xuICAgIHJldHVybiBrZXl3b3JkTm9kZXM7XG59XG4vKipcbiAqIElmIHRoZSBnaXZlbiBDU1Qgbm9kZSB3YXMgcGFyc2VkIGluIHRoZSBjb250ZXh0IG9mIGEgcHJvcGVydHkgYXNzaWdubWVudCwgdGhlIHJlc3BlY3RpdmUgYEFzc2lnbm1lbnRgIGdyYW1tYXJcbiAqIG5vZGUgaXMgcmV0dXJuZWQuIElmIG5vIGFzc2lnbm1lbnQgaXMgZm91bmQsIHRoZSByZXN1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIGNzdE5vZGUgQSBDU1Qgbm9kZSBmb3Igd2hpY2ggdG8gZmluZCBhIHByb3BlcnR5IGFzc2lnbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQXNzaWdubWVudChjc3ROb2RlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGFzdE5vZGUgPSBjc3ROb2RlLmFzdE5vZGU7XG4gICAgLy8gT25seSBzZWFyY2ggdW50aWwgdGhlIGFzdCBub2RlIG9mIHRoZSBwYXJlbnQgY3N0IG5vZGUgaXMgbm8gbG9uZ2VyIHRoZSBvcmlnaW5hbCBhc3Qgbm9kZVxuICAgIC8vIFRoaXMgd291bGQgbWFrZSB1cyBqdW1wIHRvIGEgcHJlY2VkaW5nIHJ1bGUgY2FsbCwgd2hpY2ggY29udGFpbnMgb25seSB1bnJlbGF0ZWQgYXNzaWdubWVudHNcbiAgICB3aGlsZSAoYXN0Tm9kZSA9PT0gKChfYSA9IGNzdE5vZGUuY29udGFpbmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYXN0Tm9kZSkpIHtcbiAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IGdldENvbnRhaW5lck9mVHlwZShjc3ROb2RlLmdyYW1tYXJTb3VyY2UsIGFzdC5pc0Fzc2lnbm1lbnQpO1xuICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3N0Tm9kZSA9IGNzdE5vZGUuY29udGFpbmVyO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBGaW5kIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGBuYW1lYCBwcm9wZXJ0eSBmb3IgdGhlIGdpdmVuIGdyYW1tYXIgdHlwZS4gVGhpcyByZXF1aXJlcyB0aGUgYHR5cGVgIHRvIGJlIGluZmVycmVkXG4gKiBmcm9tIGEgcGFyc2VyIHJ1bGUsIGFuZCB0aGF0IHJ1bGUgbXVzdCBjb250YWluIGFuIGFzc2lnbm1lbnQgdG8gdGhlIGBuYW1lYCBwcm9wZXJ0eS4gSW4gYWxsIG90aGVyIGNhc2VzLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5hbWVBc3NpZ25tZW50KHR5cGUpIHtcbiAgICBsZXQgc3RhcnROb2RlID0gdHlwZTtcbiAgICBpZiAoYXN0LmlzSW5mZXJyZWRUeXBlKHN0YXJ0Tm9kZSkpIHtcbiAgICAgICAgLy8gZm9yIGluZmVycmVkIHR5cGVzLCB0aGUgbG9jYXRpb24gdG8gc3RhcnQgc2VhcmNoaW5nIGZvciB0aGUgbmFtZS1hc3NpZ25tZW50IGlzIGRpZmZlcmVudFxuICAgICAgICBpZiAoYXN0LmlzQWN0aW9uKHN0YXJ0Tm9kZS4kY29udGFpbmVyKSkge1xuICAgICAgICAgICAgLy8gYSB0eXBlIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5mZXJyZWQgYnkgYW4gYWN0aW9uOiBpbnZlc3RpZ2F0ZSB0aGUgc2liYmxpbmcgb2YgdGhlIEFjdGlvbiBub2RlLCBpLmUuIHN0YXJ0IHNlYXJjaGluZyBhdCB0aGUgQWN0aW9uJ3MgcGFyZW50XG4gICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUuJGNvbnRhaW5lci4kY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFzdC5pc1BhcnNlclJ1bGUoc3RhcnROb2RlLiRjb250YWluZXIpKSB7XG4gICAgICAgICAgICAvLyBpbnZlc3RpZ2F0ZSB0aGUgcGFyc2VyIHJ1bGUgd2l0aCB0aGUgZXhwbGljaXRseSBpbmZlcnJlZCB0eXBlXG4gICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUuJGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXJ0Tm9kZS4kY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwodHlwZSwgc3RhcnROb2RlLCBuZXcgTWFwKCkpO1xufVxuZnVuY3Rpb24gZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwodHlwZSwgc3RhcnROb2RlLCBjYWNoZSkge1xuICAgIHZhciBfYTtcbiAgICAvLyB0aGUgY2FjaGUgaXMgb25seSByZXF1aXJlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gICAgZnVuY3Rpb24gZ28obm9kZSwgcmVmVHlwZSkge1xuICAgICAgICBsZXQgY2hpbGRBc3NpZ25tZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwYXJlbnRBc3NpZ25tZW50ID0gZ2V0Q29udGFpbmVyT2ZUeXBlKG5vZGUsIGFzdC5pc0Fzc2lnbm1lbnQpO1xuICAgICAgICAvLyBObyBwYXJlbnQgYXNzaWdubWVudCBpbXBsaWVzIHVuYXNzaWduZWQgcnVsZSBjYWxsXG4gICAgICAgIGlmICghcGFyZW50QXNzaWdubWVudCkge1xuICAgICAgICAgICAgY2hpbGRBc3NpZ25tZW50ID0gZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwocmVmVHlwZSwgcmVmVHlwZSwgY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnNldCh0eXBlLCBjaGlsZEFzc2lnbm1lbnQpO1xuICAgICAgICByZXR1cm4gY2hpbGRBc3NpZ25tZW50O1xuICAgIH1cbiAgICBpZiAoY2FjaGUuaGFzKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQodHlwZSk7XG4gICAgfVxuICAgIGNhY2hlLnNldCh0eXBlLCB1bmRlZmluZWQpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzdHJlYW1BbGxDb250ZW50cyhzdGFydE5vZGUpKSB7XG4gICAgICAgIGlmIChhc3QuaXNBc3NpZ25tZW50KG5vZGUpICYmIG5vZGUuZmVhdHVyZS50b0xvd2VyQ2FzZSgpID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgIGNhY2hlLnNldCh0eXBlLCBub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFzdC5pc1J1bGVDYWxsKG5vZGUpICYmIGFzdC5pc1BhcnNlclJ1bGUobm9kZS5ydWxlLnJlZikpIHtcbiAgICAgICAgICAgIHJldHVybiBnbyhub2RlLCBub2RlLnJ1bGUucmVmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhc3QuaXNTaW1wbGVUeXBlKG5vZGUpICYmICgoX2EgPSBub2RlLnR5cGVSZWYpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ28obm9kZSwgbm9kZS50eXBlUmVmLnJlZik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25BdEVsZW1lbnQoZWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuJGNvbnRhaW5lcjtcbiAgICBpZiAoYXN0LmlzR3JvdXAocGFyZW50KSkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHBhcmVudC5lbGVtZW50cztcbiAgICAgICAgY29uc3QgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGFzdC5pc0FjdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gc3RyZWFtQWxsQ29udGVudHMoZWxlbWVudHNbaV0pLmZpbmQoYXN0LmlzQWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhc3QuaXNBYnN0cmFjdEVsZW1lbnQocGFyZW50KSkge1xuICAgICAgICByZXR1cm4gZ2V0QWN0aW9uQXRFbGVtZW50KHBhcmVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09wdGlvbmFsQ2FyZGluYWxpdHkoY2FyZGluYWxpdHksIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gY2FyZGluYWxpdHkgPT09ICc/JyB8fCBjYXJkaW5hbGl0eSA9PT0gJyonIHx8IChhc3QuaXNHcm91cChlbGVtZW50KSAmJiBCb29sZWFuKGVsZW1lbnQuZ3VhcmRDb25kaXRpb24pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5Q2FyZGluYWxpdHkoY2FyZGluYWxpdHkpIHtcbiAgICByZXR1cm4gY2FyZGluYWxpdHkgPT09ICcqJyB8fCBjYXJkaW5hbGl0eSA9PT0gJysnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlPcGVyYXRvcihvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvciA9PT0gJys9Jztcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXJzZXIgcnVsZSBpcyBhIF9kYXRhIHR5cGUgcnVsZV8sIG1lYW5pbmcgdGhhdCBpdCBoYXMgYVxuICogcHJpbWl0aXZlIHJldHVybiB0eXBlIGxpa2UgYG51bWJlcmAsIGBib29sZWFuYCwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVHlwZVJ1bGUocnVsZSkge1xuICAgIHJldHVybiBpc0RhdGFUeXBlUnVsZUludGVybmFsKHJ1bGUsIG5ldyBTZXQoKSk7XG59XG5mdW5jdGlvbiBpc0RhdGFUeXBlUnVsZUludGVybmFsKHJ1bGUsIHZpc2l0ZWQpIHtcbiAgICBpZiAodmlzaXRlZC5oYXMocnVsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2aXNpdGVkLmFkZChydWxlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHN0cmVhbUFsbENvbnRlbnRzKHJ1bGUpKSB7XG4gICAgICAgIGlmIChhc3QuaXNSdWxlQ2FsbChub2RlKSkge1xuICAgICAgICAgICAgaWYgKCFub2RlLnJ1bGUucmVmKSB7XG4gICAgICAgICAgICAgICAgLy8gUnVsZUNhbGwgdG8gdW5yZXNvbHZlZCBydWxlLiBEb24ndCBhc3N1bWUgYHJ1bGVgIGlzIGEgRGF0YVR5cGUgcnVsZS5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXN0LmlzUGFyc2VyUnVsZShub2RlLnJ1bGUucmVmKSAmJiAhaXNEYXRhVHlwZVJ1bGVJbnRlcm5hbChub2RlLnJ1bGUucmVmLCB2aXNpdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhc3QuaXNBc3NpZ25tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXN0LmlzQWN0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4ocnVsZS5kZWZpbml0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gaXNEYXRhVHlwZUludGVybmFsKHR5cGUudHlwZSwgbmV3IFNldCgpKTtcbn1cbmZ1bmN0aW9uIGlzRGF0YVR5cGVJbnRlcm5hbCh0eXBlLCB2aXNpdGVkKSB7XG4gICAgaWYgKHZpc2l0ZWQuaGFzKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmlzaXRlZC5hZGQodHlwZSk7XG4gICAgfVxuICAgIGlmIChhc3QuaXNBcnJheVR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNSZWZlcmVuY2VUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzVW5pb25UeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlLnR5cGVzLmV2ZXJ5KGUgPT4gaXNEYXRhVHlwZUludGVybmFsKGUsIHZpc2l0ZWQpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzU2ltcGxlVHlwZSh0eXBlKSkge1xuICAgICAgICBpZiAodHlwZS5wcmltaXRpdmVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUuc3RyaW5nVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlLnR5cGVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gdHlwZS50eXBlUmVmLnJlZjtcbiAgICAgICAgICAgIGlmIChhc3QuaXNUeXBlKHJlZikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNEYXRhVHlwZUludGVybmFsKHJlZi50eXBlLCB2aXNpdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHBsaWNpdFJ1bGVUeXBlKHJ1bGUpIHtcbiAgICBpZiAocnVsZS5pbmZlcnJlZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuaW5mZXJyZWRUeXBlLm5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJ1bGUuZGF0YVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuZGF0YVR5cGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJ1bGUucmV0dXJuVHlwZSkge1xuICAgICAgICBjb25zdCByZWZUeXBlID0gcnVsZS5yZXR1cm5UeXBlLnJlZjtcbiAgICAgICAgaWYgKHJlZlR5cGUpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gY2hlY2sgQWN0aW9uIGFzIHJldHVybiB0eXBlXG4gICAgICAgICAgICBpZiAoYXN0LmlzUGFyc2VyUnVsZShyZWZUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZUeXBlLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhc3QuaXNJbnRlcmZhY2UocmVmVHlwZSkgfHwgYXN0LmlzVHlwZShyZWZUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZUeXBlLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlTmFtZSh0eXBlKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChhc3QuaXNQYXJzZXJSdWxlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBpc0RhdGFUeXBlUnVsZSh0eXBlKSA/IHR5cGUubmFtZSA6IChfYSA9IGdldEV4cGxpY2l0UnVsZVR5cGUodHlwZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHR5cGUubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzSW50ZXJmYWNlKHR5cGUpIHx8IGFzdC5pc1R5cGUodHlwZSkgfHwgYXN0LmlzUmV0dXJuVHlwZSh0eXBlKSkge1xuICAgICAgICByZXR1cm4gdHlwZS5uYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNBY3Rpb24odHlwZSkpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uVHlwZSA9IGdldEFjdGlvblR5cGUodHlwZSk7XG4gICAgICAgIGlmIChhY3Rpb25UeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNJbmZlcnJlZFR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUubmFtZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IG5hbWUgb2YgVW5rbm93biBUeXBlJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uVHlwZShhY3Rpb24pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGFjdGlvbi5pbmZlcnJlZFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5pbmZlcnJlZFR5cGUubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKF9hID0gYWN0aW9uLnR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWYpIHtcbiAgICAgICAgcmV0dXJuIGdldFR5cGVOYW1lKGFjdGlvbi50eXBlLnJlZik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdCBpbmZlcnJpbmcgYW5kIG5vdCByZWZlcmVuY2luZyBhIHZhbGlkIHR5cGVcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdWxlVHlwZShydWxlKSB7XG4gICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgaWYgKGFzdC5pc1Rlcm1pbmFsUnVsZShydWxlKSkge1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gcnVsZS50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJ3N0cmluZyc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNEYXRhVHlwZVJ1bGUocnVsZSkgPyBydWxlLm5hbWUgOiAoX2MgPSBnZXRFeHBsaWNpdFJ1bGVUeXBlKHJ1bGUpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBydWxlLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1pbmFsUmVnZXgodGVybWluYWxSdWxlKSB7XG4gICAgY29uc3QgZmxhZ3MgPSB7XG4gICAgICAgIHM6IGZhbHNlLFxuICAgICAgICBpOiBmYWxzZSxcbiAgICAgICAgdTogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IHNvdXJjZSA9IGFic3RyYWN0RWxlbWVudFRvUmVnZXgodGVybWluYWxSdWxlLmRlZmluaXRpb24sIGZsYWdzKTtcbiAgICBjb25zdCBmbGFnVGV4dCA9IE9iamVjdC5lbnRyaWVzKGZsYWdzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpLm1hcCgoW25hbWVdKSA9PiBuYW1lKS5qb2luKCcnKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2UsIGZsYWdUZXh0KTtcbn1cbi8vIFVzaW5nIFtcXHNcXFNdKiBhbGxvd3MgdG8gbWF0Y2ggZXZlcnl0aGluZywgY29tcGFyZWQgdG8gLiB3aGljaCBkb2Vzbid0IG1hdGNoIGxpbmUgdGVybWluYXRvcnNcbmNvbnN0IFdJTERDQVJEID0gL1tcXHNcXFNdLy5zb3VyY2U7XG5mdW5jdGlvbiBhYnN0cmFjdEVsZW1lbnRUb1JlZ2V4KGVsZW1lbnQsIGZsYWdzKSB7XG4gICAgaWYgKGFzdC5pc1Rlcm1pbmFsQWx0ZXJuYXRpdmVzKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB0ZXJtaW5hbEFsdGVybmF0aXZlc1RvUmVnZXgoZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFzdC5pc1Rlcm1pbmFsR3JvdXAoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRlcm1pbmFsR3JvdXBUb1JlZ2V4KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNDaGFyYWN0ZXJSYW5nZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VUb1JlZ2V4KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNUZXJtaW5hbFJ1bGVDYWxsKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBlbGVtZW50LnJ1bGUucmVmO1xuICAgICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBydWxlIHJlZmVyZW5jZS4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGFic3RyYWN0RWxlbWVudFRvUmVnZXgocnVsZS5kZWZpbml0aW9uKSwge1xuICAgICAgICAgICAgY2FyZGluYWxpdHk6IGVsZW1lbnQuY2FyZGluYWxpdHksXG4gICAgICAgICAgICBsb29rYWhlYWQ6IGVsZW1lbnQubG9va2FoZWFkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChhc3QuaXNOZWdhdGVkVG9rZW4oZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIG5lZ2F0ZVRva2VuVG9SZWdleChlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzVW50aWxUb2tlbihlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdW50aWxUb2tlblRvUmVnZXgoZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFzdC5pc1JlZ2V4VG9rZW4oZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGFzdFNsYXNoID0gZWxlbWVudC5yZWdleC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBlbGVtZW50LnJlZ2V4LnN1YnN0cmluZygxLCBsYXN0U2xhc2gpO1xuICAgICAgICBjb25zdCByZWdleEZsYWdzID0gZWxlbWVudC5yZWdleC5zdWJzdHJpbmcobGFzdFNsYXNoICsgMSk7XG4gICAgICAgIGlmIChmbGFncykge1xuICAgICAgICAgICAgZmxhZ3MuaSA9IHJlZ2V4RmxhZ3MuaW5jbHVkZXMoJ2knKTtcbiAgICAgICAgICAgIGZsYWdzLnMgPSByZWdleEZsYWdzLmluY2x1ZGVzKCdzJyk7XG4gICAgICAgICAgICBmbGFncy51ID0gcmVnZXhGbGFncy5pbmNsdWRlcygndScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aXRoQ2FyZGluYWxpdHkoc291cmNlLCB7XG4gICAgICAgICAgICBjYXJkaW5hbGl0eTogZWxlbWVudC5jYXJkaW5hbGl0eSxcbiAgICAgICAgICAgIGxvb2thaGVhZDogZWxlbWVudC5sb29rYWhlYWQsXG4gICAgICAgICAgICB3cmFwOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXN0LmlzV2lsZGNhcmQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhDYXJkaW5hbGl0eShXSUxEQ0FSRCwge1xuICAgICAgICAgICAgY2FyZGluYWxpdHk6IGVsZW1lbnQuY2FyZGluYWxpdHksXG4gICAgICAgICAgICBsb29rYWhlYWQ6IGVsZW1lbnQubG9va2FoZWFkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlcm1pbmFsIGVsZW1lbnQ6ICR7ZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbGVtZW50LiR0eXBlfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRlcm1pbmFsQWx0ZXJuYXRpdmVzVG9SZWdleChhbHRlcm5hdGl2ZXMpIHtcbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGFsdGVybmF0aXZlcy5lbGVtZW50cy5tYXAoZSA9PiBhYnN0cmFjdEVsZW1lbnRUb1JlZ2V4KGUpKS5qb2luKCd8JyksIHtcbiAgICAgICAgY2FyZGluYWxpdHk6IGFsdGVybmF0aXZlcy5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiBhbHRlcm5hdGl2ZXMubG9va2FoZWFkXG4gICAgfSk7XG59XG5mdW5jdGlvbiB0ZXJtaW5hbEdyb3VwVG9SZWdleChncm91cCkge1xuICAgIHJldHVybiB3aXRoQ2FyZGluYWxpdHkoZ3JvdXAuZWxlbWVudHMubWFwKGUgPT4gYWJzdHJhY3RFbGVtZW50VG9SZWdleChlKSkuam9pbignJyksIHtcbiAgICAgICAgY2FyZGluYWxpdHk6IGdyb3VwLmNhcmRpbmFsaXR5LFxuICAgICAgICBsb29rYWhlYWQ6IGdyb3VwLmxvb2thaGVhZFxuICAgIH0pO1xufVxuZnVuY3Rpb24gdW50aWxUb2tlblRvUmVnZXgodW50aWwpIHtcbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGAke1dJTERDQVJEfSo/JHthYnN0cmFjdEVsZW1lbnRUb1JlZ2V4KHVudGlsLnRlcm1pbmFsKX1gLCB7XG4gICAgICAgIGNhcmRpbmFsaXR5OiB1bnRpbC5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiB1bnRpbC5sb29rYWhlYWRcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG5lZ2F0ZVRva2VuVG9SZWdleChuZWdhdGUpIHtcbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGAoPyEke2Fic3RyYWN0RWxlbWVudFRvUmVnZXgobmVnYXRlLnRlcm1pbmFsKX0pJHtXSUxEQ0FSRH0qP2AsIHtcbiAgICAgICAgY2FyZGluYWxpdHk6IG5lZ2F0ZS5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiBuZWdhdGUubG9va2FoZWFkXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGFyYWN0ZXJSYW5nZVRvUmVnZXgocmFuZ2UpIHtcbiAgICBpZiAocmFuZ2UucmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhDYXJkaW5hbGl0eShgWyR7a2V5d29yZFRvUmVnZXgocmFuZ2UubGVmdCl9LSR7a2V5d29yZFRvUmVnZXgocmFuZ2UucmlnaHQpfV1gLCB7XG4gICAgICAgICAgICBjYXJkaW5hbGl0eTogcmFuZ2UuY2FyZGluYWxpdHksXG4gICAgICAgICAgICBsb29rYWhlYWQ6IHJhbmdlLmxvb2thaGVhZCxcbiAgICAgICAgICAgIHdyYXA6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gd2l0aENhcmRpbmFsaXR5KGtleXdvcmRUb1JlZ2V4KHJhbmdlLmxlZnQpLCB7XG4gICAgICAgIGNhcmRpbmFsaXR5OiByYW5nZS5jYXJkaW5hbGl0eSxcbiAgICAgICAgbG9va2FoZWFkOiByYW5nZS5sb29rYWhlYWQsXG4gICAgICAgIHdyYXA6IGZhbHNlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBrZXl3b3JkVG9SZWdleChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGVzY2FwZVJlZ0V4cChrZXl3b3JkLnZhbHVlKTtcbn1cbmZ1bmN0aW9uIHdpdGhDYXJkaW5hbGl0eShyZWdleCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBpZiAob3B0aW9ucy53cmFwICE9PSBmYWxzZSB8fCBvcHRpb25zLmxvb2thaGVhZCkge1xuICAgICAgICByZWdleCA9IGAoJHsoX2EgPSBvcHRpb25zLmxvb2thaGVhZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyd9JHtyZWdleH0pYDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2FyZGluYWxpdHkpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZ2V4fSR7b3B0aW9ucy5jYXJkaW5hbGl0eX1gO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncmFtbWFyLXV0aWxzLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgRGVmYXVsdE5hbWVSZWdleHAgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNDb21tZW50VGVybWluYWwsIHRlcm1pbmFsUmVnZXggfSBmcm9tICcuLi91dGlscy9ncmFtbWFyLXV0aWxzLmpzJztcbmltcG9ydCB7IGlzTXVsdGlsaW5lQ29tbWVudCB9IGZyb20gJy4uL3V0aWxzL3JlZ2V4cC11dGlscy5qcyc7XG5pbXBvcnQgeyBpc1Rlcm1pbmFsUnVsZSB9IGZyb20gJy4vZ2VuZXJhdGVkL2FzdC5qcyc7XG4vKipcbiAqIENyZWF0ZSB0aGUgZGVmYXVsdCBncmFtbWFyIGNvbmZpZ3VyYXRpb24gKHVzZWQgYnkgYGNyZWF0ZURlZmF1bHRNb2R1bGVgKS4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBhXG4gKiBsYW5ndWFnZS1zcGVjaWZpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmFtbWFyQ29uZmlnKHNlcnZpY2VzKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbXTtcbiAgICBjb25zdCBncmFtbWFyID0gc2VydmljZXMuR3JhbW1hcjtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZ3JhbW1hci5ydWxlcykge1xuICAgICAgICBpZiAoaXNUZXJtaW5hbFJ1bGUocnVsZSkgJiYgaXNDb21tZW50VGVybWluYWwocnVsZSkgJiYgaXNNdWx0aWxpbmVDb21tZW50KHRlcm1pbmFsUmVnZXgocnVsZSkpKSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXVsdGlsaW5lQ29tbWVudFJ1bGVzOiBydWxlcyxcbiAgICAgICAgbmFtZVJlZ2V4cDogRGVmYXVsdE5hbWVSZWdleHBcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhbW1hci1jb25maWcuanMubWFwIiwKICAgICJleHBvcnQgZnVuY3Rpb24gUFJJTlRfRVJST1IobXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBjYW4ndCBvdmVycmlkZSBnbG9iYWwuY29uc29sZSBpbiBub2RlLmpzICovXG4gICAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogJHttc2d9YCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIFBSSU5UX1dBUk5JTkcobXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBjYW4ndCBvdmVycmlkZSBnbG9iYWwuY29uc29sZSBpbiBub2RlLmpzKi9cbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgLy8gVE9ETzogbW9kaWZ5IGRvY3MgYWNjb3JkaW5nbHlcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiAke21zZ31gKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmludC5qcy5tYXAiLAogICAgImV4cG9ydCBmdW5jdGlvbiB0aW1lcihmdW5jKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCB2YWwgPSBmdW5jKCk7XG4gICAgY29uc3QgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdG90YWwgPSBlbmQgLSBzdGFydDtcbiAgICByZXR1cm4geyB0aW1lOiB0b3RhbCwgdmFsdWU6IHZhbCB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXIuanMubWFwIiwKICAgICIvLyBiYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC9ibG9iL2I5N2MwZDJkNDg3ZThjNTA3NmU4YmQ4OTdlMGRjZDQ2MjJkMzE4NDYvc3JjL3V0aWwuanMjTDIwMS1MMjE2XG5leHBvcnQgZnVuY3Rpb24gdG9GYXN0UHJvcGVydGllcyh0b0JlY29tZUZhc3QpIHtcbiAgICBmdW5jdGlvbiBGYWtlQ29uc3RydWN0b3IoKSB7IH1cbiAgICAvLyBJZiBvdXIgb2JqZWN0IGlzIHVzZWQgYXMgYSBjb25zdHJ1Y3RvciwgaXQgd291bGQgcmVjZWl2ZVxuICAgIEZha2VDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSB0b0JlY29tZUZhc3Q7XG4gICAgY29uc3QgZmFrZUluc3RhbmNlID0gbmV3IEZha2VDb25zdHJ1Y3RvcigpO1xuICAgIGZ1bmN0aW9uIGZha2VBY2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZmFrZUluc3RhbmNlLmJhcjtcbiAgICB9XG4gICAgLy8gaGVscCBWOCB1bmRlcnN0YW5kIHRoaXMgaXMgYSBcInJlYWxcIiBwcm90b3R5cGUgYnkgYWN0dWFsbHkgdXNpbmdcbiAgICAvLyB0aGUgZmFrZSBpbnN0YW5jZS5cbiAgICBmYWtlQWNjZXNzKCk7XG4gICAgZmFrZUFjY2VzcygpO1xuICAgIC8vIEFsd2F5cyB0cnVlIGNvbmRpdGlvbiB0byBzdXBwcmVzcyB0aGUgRmlyZWZveCB3YXJuaW5nIG9mIHVucmVhY2hhYmxlXG4gICAgLy8gY29kZSBhZnRlciBhIHJldHVybiBzdGF0ZW1lbnQuXG4gICAgaWYgKDEpXG4gICAgICAgIHJldHVybiB0b0JlY29tZUZhc3Q7XG4gICAgLy8gRXZhbCBwcmV2ZW50cyBvcHRpbWl6YXRpb24gb2YgdGhpcyBtZXRob2QgKGV2ZW4gdGhvdWdoIHRoaXMgaXMgZGVhZCBjb2RlKVxuICAgIC8vIC0gaHR0cHM6Ly9lc2J1aWxkLmdpdGh1Yi5pby9jb250ZW50LXR5cGVzLyNkaXJlY3QtZXZhbFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgKDAsIGV2YWwpKHRvQmVjb21lRmFzdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10by1mYXN0LXByb3BlcnRpZXMuanMubWFwIiwKICAgICJpbXBvcnQgeyBhc3NpZ24sIGZvckVhY2gsIGlzUmVnRXhwLCBpc1N0cmluZywgbWFwLCBwaWNrQnkgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG4vLyBUT0RPOiBkdXBsaWNhdGVkIGNvZGUgdG8gYXZvaWQgZXh0cmFjdGluZyBhbm90aGVyIHN1Yi1wYWNrYWdlIC0tIGhvdyB0byBhdm9pZD9cbmZ1bmN0aW9uIHRva2VuTGFiZWwodG9rVHlwZSkge1xuICAgIGlmIChoYXNUb2tlbkxhYmVsKHRva1R5cGUpKSB7XG4gICAgICAgIHJldHVybiB0b2tUeXBlLkxBQkVMO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva1R5cGUubmFtZTtcbiAgICB9XG59XG4vLyBUT0RPOiBkdXBsaWNhdGVkIGNvZGUgdG8gYXZvaWQgZXh0cmFjdGluZyBhbm90aGVyIHN1Yi1wYWNrYWdlIC0tIGhvdyB0byBhdm9pZD9cbmZ1bmN0aW9uIGhhc1Rva2VuTGFiZWwob2JqKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKG9iai5MQUJFTCkgJiYgb2JqLkxBQkVMICE9PSBcIlwiO1xufVxuZXhwb3J0IGNsYXNzIEFic3RyYWN0UHJvZHVjdGlvbiB7XG4gICAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uO1xuICAgIH1cbiAgICBzZXQgZGVmaW5pdGlvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9uID0gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKF9kZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBfZGVmaW5pdGlvbjtcbiAgICB9XG4gICAgYWNjZXB0KHZpc2l0b3IpIHtcbiAgICAgICAgdmlzaXRvci52aXNpdCh0aGlzKTtcbiAgICAgICAgZm9yRWFjaCh0aGlzLmRlZmluaXRpb24sIChwcm9kKSA9PiB7XG4gICAgICAgICAgICBwcm9kLmFjY2VwdCh2aXNpdG9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE5vblRlcm1pbmFsIGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKFtdKTtcbiAgICAgICAgdGhpcy5pZHggPSAxO1xuICAgICAgICBhc3NpZ24odGhpcywgcGlja0J5KG9wdGlvbnMsICh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG4gICAgc2V0IGRlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgICAgICAvLyBpbW11dGFibGVcbiAgICB9XG4gICAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZmVyZW5jZWRSdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZWRSdWxlLmRlZmluaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhY2NlcHQodmlzaXRvcikge1xuICAgICAgICB2aXNpdG9yLnZpc2l0KHRoaXMpO1xuICAgICAgICAvLyBkb24ndCB2aXNpdCBjaGlsZHJlbiBvZiBhIHJlZmVyZW5jZSwgd2Ugd2lsbCBnZXQgY3ljbGljIGluZmluaXRlIGxvb3BzIGlmIHdlIGRvIHNvXG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJ1bGUgZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5vcmdUZXh0ID0gXCJcIjtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEFsdGVybmF0aXZlIGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWdub3JlQW1iaWd1aXRpZXMgPSBmYWxzZTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9wdGlvbiBleHRlbmRzIEFic3RyYWN0UHJvZHVjdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zLmRlZmluaXRpb24pO1xuICAgICAgICB0aGlzLmlkeCA9IDE7XG4gICAgICAgIGFzc2lnbih0aGlzLCBwaWNrQnkob3B0aW9ucywgKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSZXBldGl0aW9uTWFuZGF0b3J5IGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RQcm9kdWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcGV0aXRpb24gZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5pZHggPSAxO1xuICAgICAgICBhc3NpZ24odGhpcywgcGlja0J5KG9wdGlvbnMsICh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucy5kZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5pZHggPSAxO1xuICAgICAgICBhc3NpZ24odGhpcywgcGlja0J5KG9wdGlvbnMsICh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWx0ZXJuYXRpb24gZXh0ZW5kcyBBYnN0cmFjdFByb2R1Y3Rpb24ge1xuICAgIGdldCBkZWZpbml0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgICB9XG4gICAgc2V0IGRlZmluaXRpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IHZhbHVlO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMuZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgdGhpcy5pZ25vcmVBbWJpZ3VpdGllcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc1ByZWRpY2F0ZXMgPSBmYWxzZTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuaWR4ID0gMTtcbiAgICAgICAgYXNzaWduKHRoaXMsIHBpY2tCeShvcHRpb25zLCAodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuICAgIGFjY2VwdCh2aXNpdG9yKSB7XG4gICAgICAgIHZpc2l0b3IudmlzaXQodGhpcyk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUdyYW1tYXIodG9wUnVsZXMpIHtcbiAgICByZXR1cm4gbWFwKHRvcFJ1bGVzLCBzZXJpYWxpemVQcm9kdWN0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVQcm9kdWN0aW9uKG5vZGUpIHtcbiAgICBmdW5jdGlvbiBjb252ZXJ0RGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiBtYXAoZGVmaW5pdGlvbiwgc2VyaWFsaXplUHJvZHVjdGlvbik7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkTm9uVGVybWluYWwgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIk5vblRlcm1pbmFsXCIsXG4gICAgICAgICAgICBuYW1lOiBub2RlLm5vblRlcm1pbmFsTmFtZSxcbiAgICAgICAgICAgIGlkeDogbm9kZS5pZHgsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc1N0cmluZyhub2RlLmxhYmVsKSkge1xuICAgICAgICAgICAgc2VyaWFsaXplZE5vblRlcm1pbmFsLmxhYmVsID0gbm9kZS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZE5vblRlcm1pbmFsO1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiQWx0ZXJuYXRpdmVcIixcbiAgICAgICAgICAgIGRlZmluaXRpb246IGNvbnZlcnREZWZpbml0aW9uKG5vZGUuZGVmaW5pdGlvbiksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiT3B0aW9uXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiUmVwZXRpdGlvbk1hbmRhdG9yeVwiLFxuICAgICAgICAgICAgaWR4OiBub2RlLmlkeCxcbiAgICAgICAgICAgIGRlZmluaXRpb246IGNvbnZlcnREZWZpbml0aW9uKG5vZGUuZGVmaW5pdGlvbiksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvclwiLFxuICAgICAgICAgICAgaWR4OiBub2RlLmlkeCxcbiAgICAgICAgICAgIHNlcGFyYXRvcjogKHNlcmlhbGl6ZVByb2R1Y3Rpb24obmV3IFRlcm1pbmFsKHsgdGVybWluYWxUeXBlOiBub2RlLnNlcGFyYXRvciB9KSkpLFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgc2VwYXJhdG9yOiAoc2VyaWFsaXplUHJvZHVjdGlvbihuZXcgVGVybWluYWwoeyB0ZXJtaW5hbFR5cGU6IG5vZGUuc2VwYXJhdG9yIH0pKSksXG4gICAgICAgICAgICBkZWZpbml0aW9uOiBjb252ZXJ0RGVmaW5pdGlvbihub2RlLmRlZmluaXRpb24pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgUmVwZXRpdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJSZXBldGl0aW9uXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIkFsdGVybmF0aW9uXCIsXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogY29udmVydERlZmluaXRpb24obm9kZS5kZWZpbml0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFRlcm1pbmFsKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUZXJtaW5hbCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgIG5hbWU6IG5vZGUudGVybWluYWxUeXBlLm5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdG9rZW5MYWJlbChub2RlLnRlcm1pbmFsVHlwZSksXG4gICAgICAgICAgICBpZHg6IG5vZGUuaWR4LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNTdHJpbmcobm9kZS5sYWJlbCkpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUZXJtaW5hbC50ZXJtaW5hbExhYmVsID0gbm9kZS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbm9kZS50ZXJtaW5hbFR5cGUuUEFUVEVSTjtcbiAgICAgICAgaWYgKG5vZGUudGVybWluYWxUeXBlLlBBVFRFUk4pIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRUZXJtaW5hbC5wYXR0ZXJuID0gaXNSZWdFeHAocGF0dGVybilcbiAgICAgICAgICAgICAgICA/IHBhdHRlcm4uc291cmNlXG4gICAgICAgICAgICAgICAgOiBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkVGVybWluYWw7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBSdWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIlJ1bGVcIixcbiAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgICAgIG9yZ1RleHQ6IG5vZGUub3JnVGV4dCxcbiAgICAgICAgICAgIGRlZmluaXRpb246IGNvbnZlcnREZWZpbml0aW9uKG5vZGUuZGVmaW5pdGlvbiksXG4gICAgICAgIH07XG4gICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kZWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgUnVsZSwgVGVybWluYWwsIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmV4cG9ydCBjbGFzcyBHQXN0VmlzaXRvciB7XG4gICAgdmlzaXQobm9kZSkge1xuICAgICAgICBjb25zdCBub2RlQW55ID0gbm9kZTtcbiAgICAgICAgc3dpdGNoIChub2RlQW55LmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICBjYXNlIE5vblRlcm1pbmFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0Tm9uVGVybWluYWwobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIEFsdGVybmF0aXZlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpdmUobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIE9wdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdE9wdGlvbihub2RlQW55KTtcbiAgICAgICAgICAgIGNhc2UgUmVwZXRpdGlvbk1hbmRhdG9yeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3Iobm9kZUFueSk7XG4gICAgICAgICAgICBjYXNlIFJlcGV0aXRpb246XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKG5vZGVBbnkpO1xuICAgICAgICAgICAgY2FzZSBBbHRlcm5hdGlvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdEFsdGVybmF0aW9uKG5vZGVBbnkpO1xuICAgICAgICAgICAgY2FzZSBUZXJtaW5hbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdFRlcm1pbmFsKG5vZGVBbnkpO1xuICAgICAgICAgICAgY2FzZSBSdWxlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0UnVsZShub2RlQW55KTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDIgKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgIHZpc2l0Tm9uVGVybWluYWwobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdEFsdGVybmF0aXZlKG5vZGUpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgdmlzaXRPcHRpb24obm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJlcGV0aXRpb24obm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG5vZGUpIHsgfVxuICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgdmlzaXRBbHRlcm5hdGlvbihub2RlKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgIHZpc2l0VGVybWluYWwobm9kZSkgeyB9XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICB2aXNpdFJ1bGUobm9kZSkgeyB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD12aXNpdG9yLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXZlcnksIGluY2x1ZGVzLCBzb21lIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQcm9kdWN0aW9uLCBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgUnVsZSwgVGVybWluYWwsIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBpc1NlcXVlbmNlUHJvZChwcm9kKSB7XG4gICAgcmV0dXJuIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUgfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIE9wdGlvbiB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbiB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IgfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIHx8XG4gICAgICAgIHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCB8fFxuICAgICAgICBwcm9kIGluc3RhbmNlb2YgUnVsZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPcHRpb25hbFByb2QocHJvZCwgYWxyZWFkeVZpc2l0ZWQgPSBbXSkge1xuICAgIGNvbnN0IGlzRGlyZWN0bHlPcHRpb25hbCA9IHByb2QgaW5zdGFuY2VvZiBPcHRpb24gfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb24gfHxcbiAgICAgICAgcHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yO1xuICAgIGlmIChpc0RpcmVjdGx5T3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIG5vdGUgdGhhdCB0aGlzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wIGlmIG9uZSBvcHRpb25hbCBlbXB0eSBUT1AgcHJvZHVjdGlvbiBoYXMgYSBjeWNsaWMgZGVwZW5kZW5jeSB3aXRoIGFub3RoZXJcbiAgICAvLyBlbXB0eSBvcHRpb25hbCB0b3AgcnVsZVxuICAgIC8vIG1heSBiZSBpbmRpcmVjdGx5IG9wdGlvbmFsICgoQT9CP0M/KSB8IChEP0U/Rj8pKVxuICAgIGlmIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpb24pIHtcbiAgICAgICAgLy8gZm9yIE9SIGl0cyBlbm91Z2ggZm9yIGp1c3Qgb25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgdG8gYmUgb3B0aW9uYWxcbiAgICAgICAgcmV0dXJuIHNvbWUocHJvZC5kZWZpbml0aW9uLCAoc3ViUHJvZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzT3B0aW9uYWxQcm9kKHN1YlByb2QsIGFscmVhZHlWaXNpdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCAmJiBpbmNsdWRlcyhhbHJlYWR5VmlzaXRlZCwgcHJvZCkpIHtcbiAgICAgICAgLy8gYXZvaWRpbmcgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIGluZmluaXRlIHJlY3Vyc2lvblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBYnN0cmFjdFByb2R1Y3Rpb24pIHtcbiAgICAgICAgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAgICAgYWxyZWFkeVZpc2l0ZWQucHVzaChwcm9kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlcnkocHJvZC5kZWZpbml0aW9uLCAoc3ViUHJvZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzT3B0aW9uYWxQcm9kKHN1YlByb2QsIGFscmVhZHlWaXNpdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJhbmNoaW5nUHJvZChwcm9kKSB7XG4gICAgcmV0dXJuIHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9kdWN0aW9uRHNsTmFtZShwcm9kKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvZCBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiBcIlNVQlJVTEVcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgICByZXR1cm4gXCJPUFRJT05cIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBcIk9SXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5KSB7XG4gICAgICAgIHJldHVybiBcIkFUX0xFQVNUX09ORVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIFwiQVRfTEVBU1RfT05FX1NFUFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIFwiTUFOWV9TRVBcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb24pIHtcbiAgICAgICAgcmV0dXJuIFwiTUFOWVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgcmV0dXJuIFwiQ09OU1VNRVwiO1xuICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIiwKICAgICJleHBvcnQgeyBSdWxlLCBUZXJtaW5hbCwgTm9uVGVybWluYWwsIE9wdGlvbiwgUmVwZXRpdGlvbiwgUmVwZXRpdGlvbk1hbmRhdG9yeSwgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IsIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLCBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIHNlcmlhbGl6ZUdyYW1tYXIsIHNlcmlhbGl6ZVByb2R1Y3Rpb24sIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmV4cG9ydCB7IEdBc3RWaXNpdG9yIH0gZnJvbSBcIi4vdmlzaXRvci5qc1wiO1xuZXhwb3J0IHsgZ2V0UHJvZHVjdGlvbkRzbE5hbWUsIGlzT3B0aW9uYWxQcm9kLCBpc0JyYW5jaGluZ1Byb2QsIGlzU2VxdWVuY2VQcm9kLCB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5qcy5tYXAiLAogICAgImltcG9ydCB7IGRyb3AsIGZvckVhY2ggfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgVGVybWluYWwsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbi8qKlxuICogIEEgR3JhbW1hciBXYWxrZXIgdGhhdCBjb21wdXRlcyB0aGUgXCJyZW1haW5pbmdcIiBncmFtbWFyIFwiYWZ0ZXJcIiBhIHByb2R1Y3Rpb25zIGluIHRoZSBncmFtbWFyLlxuICovXG5leHBvcnQgY2xhc3MgUmVzdFdhbGtlciB7XG4gICAgd2Fsayhwcm9kLCBwcmV2UmVzdCA9IFtdKSB7XG4gICAgICAgIGZvckVhY2gocHJvZC5kZWZpbml0aW9uLCAoc3ViUHJvZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSZXN0ID0gZHJvcChwcm9kLmRlZmluaXRpb24sIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa1Byb2RSZWYoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa1Rlcm1pbmFsKHN1YlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdWJQcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtGbGF0KHN1YlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdWJQcm9kIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrT3B0aW9uKHN1YlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdWJQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0F0TGVhc3RPbmUoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0F0TGVhc3RPbmVTZXAoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uV2l0aFNlcGFyYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMud2Fsa01hbnlTZXAoc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN1YlByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrTWFueShzdWJQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3ViUHJvZCBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YWxrT3Ioc3ViUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3YWxrVGVybWluYWwodGVybWluYWwsIGN1cnJSZXN0LCBwcmV2UmVzdCkgeyB9XG4gICAgd2Fsa1Byb2RSZWYocmVmUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7IH1cbiAgICB3YWxrRmxhdChmbGF0UHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIC8vIEFCQ0RFRiA9PiBhZnRlciB0aGUgRCB0aGUgcmVzdCBpcyBFRlxuICAgICAgICBjb25zdCBmdWxsT3JSZXN0ID0gY3VyclJlc3QuY29uY2F0KHByZXZSZXN0KTtcbiAgICAgICAgdGhpcy53YWxrKGZsYXRQcm9kLCBmdWxsT3JSZXN0KTtcbiAgICB9XG4gICAgd2Fsa09wdGlvbihvcHRpb25Qcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgLy8gQUJDKERFKT9GID0+IGFmdGVyIHRoZSAoREUpPyB0aGUgcmVzdCBpcyBGXG4gICAgICAgIGNvbnN0IGZ1bGxPclJlc3QgPSBjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpO1xuICAgICAgICB0aGlzLndhbGsob3B0aW9uUHJvZCwgZnVsbE9yUmVzdCk7XG4gICAgfVxuICAgIHdhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgLy8gQUJDKERFKStGID0+IGFmdGVyIHRoZSAoREUpKyB0aGUgcmVzdCBpcyAoREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbEF0TGVhc3RPbmVSZXN0ID0gW1xuICAgICAgICAgICAgbmV3IE9wdGlvbih7IGRlZmluaXRpb246IGF0TGVhc3RPbmVQcm9kLmRlZmluaXRpb24gfSksXG4gICAgICAgIF0uY29uY2F0KGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIHRoaXMud2FsayhhdExlYXN0T25lUHJvZCwgZnVsbEF0TGVhc3RPbmVSZXN0KTtcbiAgICB9XG4gICAgd2Fsa0F0TGVhc3RPbmVTZXAoYXRMZWFzdE9uZVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBBQkMgREUoLERFKSogRiA9PiBhZnRlciB0aGUgKCxERSkrIHRoZSByZXN0IGlzICgsREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbEF0TGVhc3RPbmVTZXBSZXN0ID0gcmVzdEZvclJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGF0TGVhc3RPbmVTZXBQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB0aGlzLndhbGsoYXRMZWFzdE9uZVNlcFByb2QsIGZ1bGxBdExlYXN0T25lU2VwUmVzdCk7XG4gICAgfVxuICAgIHdhbGtNYW55KG1hbnlQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgLy8gQUJDKERFKSpGID0+IGFmdGVyIHRoZSAoREUpKiB0aGUgcmVzdCBpcyAoREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbE1hbnlSZXN0ID0gW1xuICAgICAgICAgICAgbmV3IE9wdGlvbih7IGRlZmluaXRpb246IG1hbnlQcm9kLmRlZmluaXRpb24gfSksXG4gICAgICAgIF0uY29uY2F0KGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIHRoaXMud2FsayhtYW55UHJvZCwgZnVsbE1hbnlSZXN0KTtcbiAgICB9XG4gICAgd2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBBQkMgKERFKCxERSkqKT8gRiA9PiBhZnRlciB0aGUgKCxERSkqIHRoZSByZXN0IGlzICgsREUpP0ZcbiAgICAgICAgY29uc3QgZnVsbE1hbnlTZXBSZXN0ID0gcmVzdEZvclJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG1hbnlTZXBQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB0aGlzLndhbGsobWFueVNlcFByb2QsIGZ1bGxNYW55U2VwUmVzdCk7XG4gICAgfVxuICAgIHdhbGtPcihvclByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBBQkMoRHxFfEYpRyA9PiB3aGVuIGZpbmRpbmcgdGhlIChEfEV8RikgdGhlIHJlc3QgaXMgR1xuICAgICAgICBjb25zdCBmdWxsT3JSZXN0ID0gY3VyclJlc3QuY29uY2F0KHByZXZSZXN0KTtcbiAgICAgICAgLy8gd2FsayBhbGwgZGlmZmVyZW50IGFsdGVybmF0aXZlc1xuICAgICAgICBmb3JFYWNoKG9yUHJvZC5kZWZpbml0aW9uLCAoYWx0KSA9PiB7XG4gICAgICAgICAgICAvLyB3cmFwcGluZyBlYWNoIGFsdGVybmF0aXZlIGluIGEgc2luZ2xlIGRlZmluaXRpb24gd3JhcHBlclxuICAgICAgICAgICAgLy8gdG8gYXZvaWQgZXJyb3JzIGluIGNvbXB1dGluZyB0aGUgcmVzdCBvZiB0aGF0IGFsdGVybmF0aXZlIGluIHRoZSBpbnZvY2F0aW9uIHRvIGNvbXB1dGVJblByb2RGb2xsb3dzXG4gICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGZvciBPUihbYWx0MSxhbHQyXSkgYWx0MiB3aWxsIGJlIGNvbnNpZGVyZWQgaW4gJ3Jlc3QnIG9mIGFsdDFcbiAgICAgICAgICAgIGNvbnN0IHByb2RXcmFwcGVyID0gbmV3IEFsdGVybmF0aXZlKHsgZGVmaW5pdGlvbjogW2FsdF0gfSk7XG4gICAgICAgICAgICB0aGlzLndhbGsocHJvZFdyYXBwZXIsIGZ1bGxPclJlc3QpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXN0Rm9yUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IocmVwU2VwUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgY29uc3QgcmVwU2VwUmVzdCA9IFtcbiAgICAgICAgbmV3IE9wdGlvbih7XG4gICAgICAgICAgICBkZWZpbml0aW9uOiBbXG4gICAgICAgICAgICAgICAgbmV3IFRlcm1pbmFsKHsgdGVybWluYWxUeXBlOiByZXBTZXBQcm9kLnNlcGFyYXRvciB9KSxcbiAgICAgICAgICAgIF0uY29uY2F0KHJlcFNlcFByb2QuZGVmaW5pdGlvbiksXG4gICAgICAgIH0pLFxuICAgIF07XG4gICAgY29uc3QgZnVsbFJlcFNlcFJlc3QgPSByZXBTZXBSZXN0LmNvbmNhdChjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgIHJldHVybiBmdWxsUmVwU2VwUmVzdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3QuanMubWFwIiwKICAgICJpbXBvcnQgeyBmbGF0dGVuLCBtYXAsIHVuaXEgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBpc0JyYW5jaGluZ1Byb2QsIGlzT3B0aW9uYWxQcm9kLCBpc1NlcXVlbmNlUHJvZCwgTm9uVGVybWluYWwsIFRlcm1pbmFsLCB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG5leHBvcnQgZnVuY3Rpb24gZmlyc3QocHJvZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAvLyB0aGlzIGNvdWxkIGluIHRoZW9yeSBjYXVzZSBpbmZpbml0ZSBsb29wcyBpZlxuICAgICAgICAvLyAoMSkgcHJvZCBBIHJlZnMgcHJvZCBCLlxuICAgICAgICAvLyAoMikgcHJvZCBCIHJlZnMgcHJvZCBBXG4gICAgICAgIC8vICgzKSBBQiBjYW4gbWF0Y2ggdGhlIGVtcHR5IHNldFxuICAgICAgICAvLyBpbiBvdGhlciB3b3JkcyBhIGN5Y2xlIHdoZXJlIGV2ZXJ5dGhpbmcgaXMgb3B0aW9uYWwgc28gdGhlIGZpcnN0IHdpbGwga2VlcFxuICAgICAgICAvLyBsb29raW5nIGFoZWFkIGZvciB0aGUgbmV4dCBvcHRpb25hbCBwYXJ0IGFuZCB3aWxsIG5ldmVyIGV4aXRcbiAgICAgICAgLy8gY3VycmVudGx5IHRoZXJlIGlzIG5vIHNhZmVndWFyZCBmb3IgdGhpcyB1bmlxdWUgZWRnZSBjYXNlIGJlY2F1c2VcbiAgICAgICAgLy8gKDEpIG5vdCBzdXJlIGEgZ3JhbW1hciBpbiB3aGljaCB0aGlzIGNhbiBoYXBwZW4gaXMgdXNlZnVsIGZvciBhbnl0aGluZyAocHJvZHVjdGl2ZSlcbiAgICAgICAgcmV0dXJuIGZpcnN0KHByb2QucmVmZXJlbmNlZFJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Rm9yVGVybWluYWwocHJvZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU2VxdWVuY2VQcm9kKHByb2QpKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEZvclNlcXVlbmNlKHByb2QpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0JyYW5jaGluZ1Byb2QocHJvZCkpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Rm9yQnJhbmNoaW5nKHByb2QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RGb3JTZXF1ZW5jZShwcm9kKSB7XG4gICAgbGV0IGZpcnN0U2V0ID0gW107XG4gICAgY29uc3Qgc2VxID0gcHJvZC5kZWZpbml0aW9uO1xuICAgIGxldCBuZXh0U3ViUHJvZElkeCA9IDA7XG4gICAgbGV0IGhhc0lubmVyUHJvZHNSZW1haW5pbmcgPSBzZXEubGVuZ3RoID4gbmV4dFN1YlByb2RJZHg7XG4gICAgbGV0IGN1cnJTdWJQcm9kO1xuICAgIC8vIHNvIHdlIGVudGVyIHRoZSBsb29wIGF0IGxlYXN0IG9uY2UgKGlmIHRoZSBkZWZpbml0aW9uIGlzIG5vdCBlbXB0eVxuICAgIGxldCBpc0xhc3RJbm5lclByb2RPcHRpb25hbCA9IHRydWU7XG4gICAgLy8gc2NhbiBhIHNlcXVlbmNlIHVudGlsIGl0J3MgZW5kIG9yIHVudGlsIHdlIGhhdmUgZm91bmQgYSBOT05FIG9wdGlvbmFsIHByb2R1Y3Rpb24gaW4gaXRcbiAgICB3aGlsZSAoaGFzSW5uZXJQcm9kc1JlbWFpbmluZyAmJiBpc0xhc3RJbm5lclByb2RPcHRpb25hbCkge1xuICAgICAgICBjdXJyU3ViUHJvZCA9IHNlcVtuZXh0U3ViUHJvZElkeF07XG4gICAgICAgIGlzTGFzdElubmVyUHJvZE9wdGlvbmFsID0gaXNPcHRpb25hbFByb2QoY3VyclN1YlByb2QpO1xuICAgICAgICBmaXJzdFNldCA9IGZpcnN0U2V0LmNvbmNhdChmaXJzdChjdXJyU3ViUHJvZCkpO1xuICAgICAgICBuZXh0U3ViUHJvZElkeCA9IG5leHRTdWJQcm9kSWR4ICsgMTtcbiAgICAgICAgaGFzSW5uZXJQcm9kc1JlbWFpbmluZyA9IHNlcS5sZW5ndGggPiBuZXh0U3ViUHJvZElkeDtcbiAgICB9XG4gICAgcmV0dXJuIHVuaXEoZmlyc3RTZXQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0Rm9yQnJhbmNoaW5nKHByb2QpIHtcbiAgICBjb25zdCBhbGxBbHRlcm5hdGl2ZXNGaXJzdHMgPSBtYXAocHJvZC5kZWZpbml0aW9uLCAoaW5uZXJQcm9kKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXJzdChpbm5lclByb2QpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4oYWxsQWx0ZXJuYXRpdmVzRmlyc3RzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RGb3JUZXJtaW5hbCh0ZXJtaW5hbCkge1xuICAgIHJldHVybiBbdGVybWluYWwudGVybWluYWxUeXBlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0LmpzLm1hcCIsCiAgICAiLy8gVE9ETzogY2FuIHRoaXMgYmUgcmVtb3ZlZD8gd2hlcmUgaXMgaXQgdXNlZD9cbmV4cG9ydCBjb25zdCBJTiA9IFwiX35JTn5fXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwKICAgICJpbXBvcnQgeyBSZXN0V2Fsa2VyIH0gZnJvbSBcIi4vcmVzdC5qc1wiO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi9maXJzdC5qc1wiO1xuaW1wb3J0IHsgYXNzaWduLCBmb3JFYWNoIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgSU4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZSB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG4vLyBUaGlzIFJlc3luY0ZvbGxvd3NXYWxrZXIgY29tcHV0ZXMgYWxsIG9mIHRoZSBmb2xsb3dzIHJlcXVpcmVkIGZvciBSRVNZTkNcbi8vIChza2lwcGluZyByZWZlcmVuY2UgcHJvZHVjdGlvbikuXG5leHBvcnQgY2xhc3MgUmVzeW5jRm9sbG93c1dhbGtlciBleHRlbmRzIFJlc3RXYWxrZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvcFByb2QpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50b3BQcm9kID0gdG9wUHJvZDtcbiAgICAgICAgdGhpcy5mb2xsb3dzID0ge307XG4gICAgfVxuICAgIHN0YXJ0V2Fsa2luZygpIHtcbiAgICAgICAgdGhpcy53YWxrKHRoaXMudG9wUHJvZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZvbGxvd3M7XG4gICAgfVxuICAgIHdhbGtUZXJtaW5hbCh0ZXJtaW5hbCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmchIGp1c3QgbGlrZSBpbiB0aGUgcHVibGljIHNlY3RvciBhZnRlciAxMzowMFxuICAgIH1cbiAgICB3YWxrUHJvZFJlZihyZWZQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgY29uc3QgZm9sbG93TmFtZSA9IGJ1aWxkQmV0d2VlblByb2RzRm9sbG93UHJlZml4KHJlZlByb2QucmVmZXJlbmNlZFJ1bGUsIHJlZlByb2QuaWR4KSArXG4gICAgICAgICAgICB0aGlzLnRvcFByb2QubmFtZTtcbiAgICAgICAgY29uc3QgZnVsbFJlc3QgPSBjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpO1xuICAgICAgICBjb25zdCByZXN0UHJvZCA9IG5ldyBBbHRlcm5hdGl2ZSh7IGRlZmluaXRpb246IGZ1bGxSZXN0IH0pO1xuICAgICAgICBjb25zdCB0X2luX3RvcFByb2RfZm9sbG93cyA9IGZpcnN0KHJlc3RQcm9kKTtcbiAgICAgICAgdGhpcy5mb2xsb3dzW2ZvbGxvd05hbWVdID0gdF9pbl90b3BQcm9kX2ZvbGxvd3M7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVBbGxQcm9kc0ZvbGxvd3ModG9wUHJvZHVjdGlvbnMpIHtcbiAgICBjb25zdCByZVN5bmNGb2xsb3dzID0ge307XG4gICAgZm9yRWFjaCh0b3BQcm9kdWN0aW9ucywgKHRvcFByb2QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyclJlZnNGb2xsb3cgPSBuZXcgUmVzeW5jRm9sbG93c1dhbGtlcih0b3BQcm9kKS5zdGFydFdhbGtpbmcoKTtcbiAgICAgICAgYXNzaWduKHJlU3luY0ZvbGxvd3MsIGN1cnJSZWZzRm9sbG93KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVTeW5jRm9sbG93cztcbn1cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJldHdlZW5Qcm9kc0ZvbGxvd1ByZWZpeChpbm5lciwgb2NjdXJlbmNlSW5QYXJlbnQpIHtcbiAgICByZXR1cm4gaW5uZXIubmFtZSArIG9jY3VyZW5jZUluUGFyZW50ICsgSU47XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJblByb2RGb2xsb3dQcmVmaXgodGVybWluYWwpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5hbWUgPSB0ZXJtaW5hbC50ZXJtaW5hbFR5cGUubmFtZTtcbiAgICByZXR1cm4gdGVybWluYWxOYW1lICsgdGVybWluYWwuaWR4ICsgSU47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb2xsb3cuanMubWFwIiwKICAgICJpbXBvcnQgeyBSZWdFeHBQYXJzZXIsIH0gZnJvbSBcIkBjaGV2cm90YWluL3JlZ2V4cC10by1hc3RcIjtcbmxldCByZWdFeHBBc3RDYWNoZSA9IHt9O1xuY29uc3QgcmVnRXhwUGFyc2VyID0gbmV3IFJlZ0V4cFBhcnNlcigpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZ0V4cEFzdChyZWdFeHApIHtcbiAgICBjb25zdCByZWdFeHBTdHIgPSByZWdFeHAudG9TdHJpbmcoKTtcbiAgICBpZiAocmVnRXhwQXN0Q2FjaGUuaGFzT3duUHJvcGVydHkocmVnRXhwU3RyKSkge1xuICAgICAgICByZXR1cm4gcmVnRXhwQXN0Q2FjaGVbcmVnRXhwU3RyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cEFzdCA9IHJlZ0V4cFBhcnNlci5wYXR0ZXJuKHJlZ0V4cFN0cik7XG4gICAgICAgIHJlZ0V4cEFzdENhY2hlW3JlZ0V4cFN0cl0gPSByZWdFeHBBc3Q7XG4gICAgICAgIHJldHVybiByZWdFeHBBc3Q7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyUmVnRXhwUGFyc2VyQ2FjaGUoKSB7XG4gICAgcmVnRXhwQXN0Q2FjaGUgPSB7fTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ19leHBfcGFyc2VyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQmFzZVJlZ0V4cFZpc2l0b3IsIH0gZnJvbSBcIkBjaGV2cm90YWluL3JlZ2V4cC10by1hc3RcIjtcbmltcG9ydCB7IGV2ZXJ5LCBmaW5kLCBmb3JFYWNoLCBpbmNsdWRlcywgaXNBcnJheSwgdmFsdWVzIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJJTlRfRVJST1IsIFBSSU5UX1dBUk5JTkcgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGdldFJlZ0V4cEFzdCB9IGZyb20gXCIuL3JlZ19leHBfcGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgsIG1pbk9wdGltaXphdGlvblZhbCB9IGZyb20gXCIuL2xleGVyLmpzXCI7XG5jb25zdCBjb21wbGVtZW50RXJyb3JNZXNzYWdlID0gXCJDb21wbGVtZW50IFNldHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9uXCI7XG5leHBvcnQgY29uc3QgZmFpbGVkT3B0aW1pemF0aW9uUHJlZml4TXNnID0gJ1VuYWJsZSB0byB1c2UgXCJmaXJzdCBjaGFyXCIgbGV4ZXIgb3B0aW1pemF0aW9uczpcXG4nO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wdGltaXplZFN0YXJ0Q29kZXNJbmRpY2VzKHJlZ0V4cCwgZW5zdXJlT3B0aW1pemF0aW9ucyA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXN0ID0gZ2V0UmVnRXhwQXN0KHJlZ0V4cCk7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hhcnMgPSBmaXJzdENoYXJPcHRpbWl6ZWRJbmRpY2VzKGFzdC52YWx1ZSwge30sIGFzdC5mbGFncy5pZ25vcmVDYXNlKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0Q2hhcnM7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8vIFRlc3RpbmcgdGhpcyByZWxpZXMgb24gdGhlIHJlZ2V4cC10by1hc3QgbGlicmFyeSBoYXZpbmcgYSBidWcuLi4gKi9cbiAgICAgICAgLy8gVE9ETzogb25seSB0aGUgZWxzZSBicmFuY2ggbmVlZHMgdG8gYmUgaWdub3JlZCwgdHJ5IHRvIGZpeCB3aXRoIG5ld2VyIHByZXR0aWVyIC8gdHNjXG4gICAgICAgIGlmIChlLm1lc3NhZ2UgPT09IGNvbXBsZW1lbnRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGlmIChlbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgUFJJTlRfV0FSTklORyhgJHtmYWlsZWRPcHRpbWl6YXRpb25QcmVmaXhNc2d9YCArXG4gICAgICAgICAgICAgICAgICAgIGBcXHRVbmFibGUgdG8gb3B0aW1pemU6IDwgJHtyZWdFeHAudG9TdHJpbmcoKX0gPlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcdENvbXBsZW1lbnQgU2V0cyBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBvcHRpbWl6ZWQuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIFwiXFx0U2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ09NUExFTUVOVCBmb3IgZGV0YWlscy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbXNnU3VmZml4ID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChlbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgbXNnU3VmZml4ID1cbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cXHRUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHRTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNSRUdFWFBfUEFSU0lORyBmb3IgZGV0YWlscy5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFBSSU5UX0VSUk9SKGAke2ZhaWxlZE9wdGltaXphdGlvblByZWZpeE1zZ31cXG5gICtcbiAgICAgICAgICAgICAgICBgXFx0RmFpbGVkIHBhcnNpbmc6IDwgJHtyZWdFeHAudG9TdHJpbmcoKX0gPlxcbmAgK1xuICAgICAgICAgICAgICAgIGBcXHRVc2luZyB0aGUgQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdCBsaWJyYXJ5XFxuYCArXG4gICAgICAgICAgICAgICAgXCJcXHRQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdDogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXNcIiArXG4gICAgICAgICAgICAgICAgbXNnU3VmZml4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW107XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyhhc3QsIHJlc3VsdCwgaWdub3JlQ2FzZSkge1xuICAgIHN3aXRjaCAoYXN0LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkRpc2p1bmN0aW9uXCI6XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFzdC52YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZpcnN0Q2hhck9wdGltaXplZEluZGljZXMoYXN0LnZhbHVlW2ldLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBbHRlcm5hdGl2ZVwiOlxuICAgICAgICAgICAgY29uc3QgdGVybXMgPSBhc3QudmFsdWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybSA9IHRlcm1zW2ldO1xuICAgICAgICAgICAgICAgIC8vIHNraXAgdGVybXMgdGhhdCBjYW5ub3QgZWZmZWN0IHRoZSBmaXJzdCBjaGFyIHJlc3VsdHNcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlcm0udHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiRW5kQW5jaG9yXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgZ3JvdXAgYmFjayByZWZlcmVuY2UgY2Fubm90IGFmZmVjdCBwb3RlbnRpYWwgc3RhcnRpbmcgY2hhci5cbiAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpZiBhIGJhY2sgcmVmZXJlbmNlIGlzIHRoZSBmaXJzdCBwcm9kdWN0aW9uIHRoYW4gYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZ3JvdXAgYmVpbmcgcmVmZXJlbmNlZCBoYXMgaGFkIHRvIGNvbWUgQkVGT1JFIHNvIGl0cyBjb2RlcyBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiR3JvdXBCYWNrUmVmZXJlbmNlXCI6XG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgZG8gbm90IGFmZmVjdCBwb3RlbnRpYWwgc3RhcnRpbmcgY29kZXNcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkxvb2thaGVhZFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiTmVnYXRpdmVMb29rYWhlYWRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlN0YXJ0QW5jaG9yXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJXb3JkQm91bmRhcnlcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIk5vbldvcmRCb3VuZGFyeVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0b20gPSB0ZXJtO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYXRvbS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDaGFyYWN0ZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9wdGltaXplZElkeFRvUmVzdWx0KGF0b20udmFsdWUsIHJlc3VsdCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlNldFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0b20uY29tcGxlbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGNvbXBsZW1lbnRFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChhdG9tLnZhbHVlLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPcHRpbWl6ZWRJZHhUb1Jlc3VsdChjb2RlLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3Qgb3B0aW1pemUgd2hlbiBpZ25vcmVDYXNlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVDYXNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByYW5nZUNvZGUgPSByYW5nZS5mcm9tOyByYW5nZUNvZGUgPD0gcmFuZ2UudG87IHJhbmdlQ29kZSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3B0aW1pemVkSWR4VG9SZXN1bHQocmFuZ2VDb2RlLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbiAoMiBvcmRlcnMgb2YgbWFnbml0dWRlIGxlc3Mgd29yayBmb3IgdmVyeSBsYXJnZSByYW5nZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHVub3B0aW1pemVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcmFuZ2VDb2RlID0gcmFuZ2UuZnJvbTsgcmFuZ2VDb2RlIDw9IHJhbmdlLnRvICYmIHJhbmdlQ29kZSA8IG1pbk9wdGltaXphdGlvblZhbDsgcmFuZ2VDb2RlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPcHRpbWl6ZWRJZHhUb1Jlc3VsdChyYW5nZUNvZGUsIHJlc3VsdCwgaWdub3JlQ2FzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXNzIGNvbW1vbiBjaGFyQ29kZSB3aGVyZSB3ZSBvcHRpbWl6ZSBmb3IgZmFzdGVyIGluaXQgdGltZSwgYnkgdXNpbmcgbGFyZ2VyIFwiYnVja2V0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UudG8gPj0gbWluT3B0aW1pemF0aW9uVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVW5PcHRWYWwgPSByYW5nZS5mcm9tID49IG1pbk9wdGltaXphdGlvblZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJhbmdlLmZyb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtaW5PcHRpbWl6YXRpb25WYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VW5PcHRWYWwgPSByYW5nZS50bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5PcHRJZHggPSBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgobWluVW5PcHRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heE9wdElkeCA9IGNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleChtYXhVbk9wdFZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY3Vyck9wdElkeCA9IG1pbk9wdElkeDsgY3Vyck9wdElkeCA8PSBtYXhPcHRJZHg7IGN1cnJPcHRJZHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3Vyck9wdElkeF0gPSBjdXJyT3B0SWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJHcm91cFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyhhdG9tLnZhbHVlLCByZXN1bHQsIGlnbm9yZUNhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk5vbiBFeGhhdXN0aXZlIE1hdGNoXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZWFjaGVkIGEgbWFuZGF0b3J5IHByb2R1Y3Rpb24sIG5vIG1vcmUgKipzdGFydCoqIGNvZGVzIGNhbiBiZSBmb3VuZCBvbiB0aGlzIGFsdGVybmF0aXZlXG4gICAgICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbFF1YW50aWZpZXIgPSBhdG9tLnF1YW50aWZpZXIgIT09IHVuZGVmaW5lZCAmJiBhdG9tLnF1YW50aWZpZXIuYXRMZWFzdCA9PT0gMDtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gQSBncm91cCBtYXkgYmUgb3B0aW9uYWwgZHVlIHRvIGVtcHR5IGNvbnRlbnRzIC8oPzopL1xuICAgICAgICAgICAgICAgIC8vIG9yIGlmIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IGlzIG9wdGlvbmFsIC8oKGEpPykvXG4gICAgICAgICAgICAgICAgKGF0b20udHlwZSA9PT0gXCJHcm91cFwiICYmIGlzV2hvbGVPcHRpb25hbChhdG9tKSA9PT0gZmFsc2UpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgdGVybSBpcyBub3QgYSBncm91cCBpdCBtYXkgb25seSBiZSBvcHRpb25hbCBpZiBpdCBoYXMgYW4gb3B0aW9uYWwgcXVhbnRpZmllclxuICAgICAgICAgICAgICAgICAgICAoYXRvbS50eXBlICE9PSBcIkdyb3VwXCIgJiYgaXNPcHRpb25hbFF1YW50aWZpZXIgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2ghXCIpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aClcbiAgICByZXR1cm4gdmFsdWVzKHJlc3VsdCk7XG59XG5mdW5jdGlvbiBhZGRPcHRpbWl6ZWRJZHhUb1Jlc3VsdChjb2RlLCByZXN1bHQsIGlnbm9yZUNhc2UpIHtcbiAgICBjb25zdCBvcHRpbWl6ZWRDaGFySWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KGNvZGUpO1xuICAgIHJlc3VsdFtvcHRpbWl6ZWRDaGFySWR4XSA9IG9wdGltaXplZENoYXJJZHg7XG4gICAgaWYgKGlnbm9yZUNhc2UgPT09IHRydWUpIHtcbiAgICAgICAgaGFuZGxlSWdub3JlQ2FzZShjb2RlLCByZXN1bHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUlnbm9yZUNhc2UoY29kZSwgcmVzdWx0KSB7XG4gICAgY29uc3QgY2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgY29uc3QgdXBwZXJDaGFyID0gY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHVwcGVyQ2hhciAhPT0gY2hhcikge1xuICAgICAgICBjb25zdCBvcHRpbWl6ZWRDaGFySWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KHVwcGVyQ2hhci5jaGFyQ29kZUF0KDApKTtcbiAgICAgICAgcmVzdWx0W29wdGltaXplZENoYXJJZHhdID0gb3B0aW1pemVkQ2hhcklkeDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQ2hhciA9IGNoYXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGxvd2VyQ2hhciAhPT0gY2hhcikge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW1pemVkQ2hhcklkeCA9IGNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleChsb3dlckNoYXIuY2hhckNvZGVBdCgwKSk7XG4gICAgICAgICAgICByZXN1bHRbb3B0aW1pemVkQ2hhcklkeF0gPSBvcHRpbWl6ZWRDaGFySWR4O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZmluZENvZGUoc2V0Tm9kZSwgdGFyZ2V0Q2hhckNvZGVzKSB7XG4gICAgcmV0dXJuIGZpbmQoc2V0Tm9kZS52YWx1ZSwgKGNvZGVPclJhbmdlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29kZU9yUmFuZ2UgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0YXJnZXRDaGFyQ29kZXMsIGNvZGVPclJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJhbmdlXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvZGVPclJhbmdlO1xuICAgICAgICAgICAgcmV0dXJuIChmaW5kKHRhcmdldENoYXJDb2RlcywgKHRhcmdldENvZGUpID0+IHJhbmdlLmZyb20gPD0gdGFyZ2V0Q29kZSAmJiB0YXJnZXRDb2RlIDw9IHJhbmdlLnRvKSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNXaG9sZU9wdGlvbmFsKGFzdCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXIgPSBhc3QucXVhbnRpZmllcjtcbiAgICBpZiAocXVhbnRpZmllciAmJiBxdWFudGlmaWVyLmF0TGVhc3QgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghYXN0LnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQXJyYXkoYXN0LnZhbHVlKVxuICAgICAgICA/IGV2ZXJ5KGFzdC52YWx1ZSwgaXNXaG9sZU9wdGlvbmFsKVxuICAgICAgICA6IGlzV2hvbGVPcHRpb25hbChhc3QudmFsdWUpO1xufVxuY2xhc3MgQ2hhckNvZGVGaW5kZXIgZXh0ZW5kcyBCYXNlUmVnRXhwVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0Q2hhckNvZGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0Q2hhckNvZGVzID0gdGFyZ2V0Q2hhckNvZGVzO1xuICAgICAgICB0aGlzLmZvdW5kID0gZmFsc2U7XG4gICAgfVxuICAgIHZpc2l0Q2hpbGRyZW4obm9kZSkge1xuICAgICAgICAvLyBObyBuZWVkIHRvIGtlZXAgbG9va2luZy4uLlxuICAgICAgICBpZiAodGhpcy5mb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN3aXRjaCBsb29rYWhlYWRzIGFzIHRoZXkgZG8gbm90IGFjdHVhbGx5IGNvbnN1bWUgYW55IGNoYXJhY3RlcnMgdGh1c1xuICAgICAgICAvLyBmaW5kaW5nIGEgY2hhckNvZGUgYXQgbG9va2FoZWFkIGNvbnRleHQgZG9lcyBub3QgbWVhbiB0aGF0IHJlZ2V4cCBjYW4gYWN0dWFsbHkgY29udGFpbiBpdCBpbiBhIG1hdGNoLlxuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIkxvb2thaGVhZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMudmlzaXRMb29rYWhlYWQobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIk5lZ2F0aXZlTG9va2FoZWFkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci52aXNpdENoaWxkcmVuKG5vZGUpO1xuICAgIH1cbiAgICB2aXNpdENoYXJhY3Rlcihub2RlKSB7XG4gICAgICAgIGlmIChpbmNsdWRlcyh0aGlzLnRhcmdldENoYXJDb2Rlcywgbm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0U2V0KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY29tcGxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGZpbmRDb2RlKG5vZGUsIHRoaXMudGFyZ2V0Q2hhckNvZGVzKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZmluZENvZGUobm9kZSwgdGhpcy50YXJnZXRDaGFyQ29kZXMpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5NYXRjaENoYXJDb2RlKGNoYXJDb2RlcywgcGF0dGVybikge1xuICAgIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIGNvbnN0IGFzdCA9IGdldFJlZ0V4cEFzdChwYXR0ZXJuKTtcbiAgICAgICAgY29uc3QgY2hhckNvZGVGaW5kZXIgPSBuZXcgQ2hhckNvZGVGaW5kZXIoY2hhckNvZGVzKTtcbiAgICAgICAgY2hhckNvZGVGaW5kZXIudmlzaXQoYXN0KTtcbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlRmluZGVyLmZvdW5kO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChmaW5kKHBhdHRlcm4sIChjaGFyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5jbHVkZXMoY2hhckNvZGVzLCBjaGFyLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICB9KSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdfZXhwLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgQmFzZVJlZ0V4cFZpc2l0b3IgfSBmcm9tIFwiQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdFwiO1xuaW1wb3J0IHsgTGV4ZXIsIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZSwgfSBmcm9tIFwiLi9sZXhlcl9wdWJsaWMuanNcIjtcbmltcG9ydCB7IGNvbXBhY3QsIGRlZmF1bHRzLCBkaWZmZXJlbmNlLCBmaWx0ZXIsIGZpbmQsIGZpcnN0LCBmbGF0dGVuLCBmb3JFYWNoLCBoYXMsIGluY2x1ZGVzLCBpbmRleE9mLCBpc0FycmF5LCBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCBrZXlzLCBtYXAsIHJlZHVjZSwgcmVqZWN0LCB2YWx1ZXMsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJJTlRfRVJST1IgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGNhbk1hdGNoQ2hhckNvZGUsIGZhaWxlZE9wdGltaXphdGlvblByZWZpeE1zZywgZ2V0T3B0aW1pemVkU3RhcnRDb2Rlc0luZGljZXMsIH0gZnJvbSBcIi4vcmVnX2V4cC5qc1wiO1xuaW1wb3J0IHsgZ2V0UmVnRXhwQXN0IH0gZnJvbSBcIi4vcmVnX2V4cF9wYXJzZXIuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBcIlBBVFRFUk5cIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREUgPSBcImRlZmF1bHRNb2RlXCI7XG5leHBvcnQgY29uc3QgTU9ERVMgPSBcIm1vZGVzXCI7XG5leHBvcnQgbGV0IFNVUFBPUlRfU1RJQ0tZID0gdHlwZW9mIG5ldyBSZWdFeHAoXCIoPzopXCIpLnN0aWNreSA9PT0gXCJib29sZWFuXCI7XG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVN0aWNreSgpIHtcbiAgICBTVVBQT1JUX1NUSUNLWSA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZVN0aWNreSgpIHtcbiAgICBTVVBQT1JUX1NUSUNLWSA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZVRva2VuVHlwZXModG9rZW5UeXBlcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICAgIHVzZVN0aWNreTogU1VQUE9SVF9TVElDS1ksXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgc2FmZU1vZGU6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblRyYWNraW5nOiBcImZ1bGxcIixcbiAgICAgICAgbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOiBbXCJcXHJcIiwgXCJcXG5cIl0sXG4gICAgICAgIHRyYWNlcjogKG1zZywgYWN0aW9uKSA9PiBhY3Rpb24oKSxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFjZXIgPSBvcHRpb25zLnRyYWNlcjtcbiAgICB0cmFjZXIoXCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwXCIsICgpID0+IHtcbiAgICAgICAgaW5pdENoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleE1hcCgpO1xuICAgIH0pO1xuICAgIGxldCBvbmx5UmVsZXZhbnRUeXBlcztcbiAgICB0cmFjZXIoXCJSZWplY3QgTGV4ZXIuTkFcIiwgKCkgPT4ge1xuICAgICAgICBvbmx5UmVsZXZhbnRUeXBlcyA9IHJlamVjdCh0b2tlblR5cGVzLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyVHlwZVtQQVRURVJOXSA9PT0gTGV4ZXIuTkE7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGxldCBoYXNDdXN0b20gPSBmYWxzZTtcbiAgICBsZXQgYWxsVHJhbnNmb3JtZWRQYXR0ZXJucztcbiAgICB0cmFjZXIoXCJUcmFuc2Zvcm0gUGF0dGVybnNcIiwgKCkgPT4ge1xuICAgICAgICBoYXNDdXN0b20gPSBmYWxzZTtcbiAgICAgICAgYWxsVHJhbnNmb3JtZWRQYXR0ZXJucyA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUGF0dGVybiA9IGN1cnJUeXBlW1BBVFRFUk5dO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpc1JlZ0V4cChjdXJyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdFeHBTb3VyY2UgPSBjdXJyUGF0dGVybi5zb3VyY2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ0V4cFNvdXJjZS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSB0aGVzZSByZWdFeHAgbWV0YSBjaGFyYWN0ZXJzIHdoaWNoIGNhbiBhcHBlYXIgaW4gYSBsZW5ndGggb25lIHJlZ0V4cFxuICAgICAgICAgICAgICAgICAgICByZWdFeHBTb3VyY2UgIT09IFwiXlwiICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZ0V4cFNvdXJjZSAhPT0gXCIkXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVnRXhwU291cmNlICE9PSBcIi5cIiAmJlxuICAgICAgICAgICAgICAgICAgICAhY3VyclBhdHRlcm4uaWdub3JlQ2FzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwU291cmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWdFeHBTb3VyY2UubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIHJlZ0V4cFNvdXJjZVswXSA9PT0gXCJcXFxcXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gbm90IGEgbWV0YSBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICAgICAgIWluY2x1ZGVzKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiV1wiLFxuICAgICAgICAgICAgICAgICAgICBdLCByZWdFeHBTb3VyY2VbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZWQgbWV0YSBDaGFyYWN0ZXJzOiAvXFwrLyAvXFxbL1xuICAgICAgICAgICAgICAgICAgICAvLyBvciByZWR1bmRhbnQgZXNjYXBpbmc6IC9cXGEvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgdGhlIGVzY2FwaW5nIFwiXFxcIlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwU291cmNlWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMudXNlU3RpY2t5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGFkZFN0aWNreUZsYWcoY3VyclBhdHRlcm4pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFkZFN0YXJ0T2ZJbnB1dChjdXJyUGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihjdXJyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBoYXNDdXN0b20gPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIEN1c3RvbVBhdHRlcm5NYXRjaGVyRnVuYyAtIGN1c3RvbSBwYXR0ZXJucyBkbyBub3QgcmVxdWlyZSBhbnkgdHJhbnNmb3JtYXRpb25zLCBvbmx5IHdyYXBwaW5nIGluIGEgUmVnRXhwIExpa2Ugb2JqZWN0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXhlYzogY3VyclBhdHRlcm4gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyUGF0dGVybiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGhhc0N1c3RvbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gSUN1c3RvbVBhdHRlcm5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyclBhdHRlcm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY3VyclBhdHRlcm4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VyclBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyUGF0dGVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVzY2FwZWRSZWdFeHBTdHJpbmcgPSBjdXJyUGF0dGVybi5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZywgXCJcXFxcJCZcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZWdFeHAgPSBuZXcgUmVnRXhwKGVzY2FwZWRSZWdFeHBTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy51c2VTdGlja3lcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWRkU3RpY2t5RmxhZyh3cmFwcGVkUmVnRXhwKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRTdGFydE9mSW5wdXQod3JhcHBlZFJlZ0V4cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgbGV0IHBhdHRlcm5JZHhUb1R5cGU7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0dyb3VwO1xuICAgIGxldCBwYXR0ZXJuSWR4VG9Mb25nZXJBbHRJZHhBcnI7XG4gICAgbGV0IHBhdHRlcm5JZHhUb1B1c2hNb2RlO1xuICAgIGxldCBwYXR0ZXJuSWR4VG9Qb3BNb2RlO1xuICAgIHRyYWNlcihcIm1pc2MgbWFwcGluZ1wiLCAoKSA9PiB7XG4gICAgICAgIHBhdHRlcm5JZHhUb1R5cGUgPSBtYXAob25seVJlbGV2YW50VHlwZXMsIChjdXJyVHlwZSkgPT4gY3VyclR5cGUudG9rZW5UeXBlSWR4KTtcbiAgICAgICAgcGF0dGVybklkeFRvR3JvdXAgPSBtYXAob25seVJlbGV2YW50VHlwZXMsIChjbGF6eikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBOYW1lID0gY2xhenouR1JPVVA7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKGdyb3VwTmFtZSA9PT0gTGV4ZXIuU0tJUFBFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZyhncm91cE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKGdyb3VwTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcGF0dGVybklkeFRvTG9uZ2VyQWx0SWR4QXJyID0gbWFwKG9ubHlSZWxldmFudFR5cGVzLCAoY2xhenopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdFR5cGUgPSBjbGF6ei5MT05HRVJfQUxUO1xuICAgICAgICAgICAgaWYgKGxvbmdlckFsdFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb25nZXJBbHRJZHhBcnIgPSBpc0FycmF5KGxvbmdlckFsdFR5cGUpXG4gICAgICAgICAgICAgICAgICAgID8gbWFwKGxvbmdlckFsdFR5cGUsICh0eXBlKSA9PiBpbmRleE9mKG9ubHlSZWxldmFudFR5cGVzLCB0eXBlKSlcbiAgICAgICAgICAgICAgICAgICAgOiBbaW5kZXhPZihvbmx5UmVsZXZhbnRUeXBlcywgbG9uZ2VyQWx0VHlwZSldO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb25nZXJBbHRJZHhBcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBwYXR0ZXJuSWR4VG9QdXNoTW9kZSA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgKGNsYXp6KSA9PiBjbGF6ei5QVVNIX01PREUpO1xuICAgICAgICBwYXR0ZXJuSWR4VG9Qb3BNb2RlID0gbWFwKG9ubHlSZWxldmFudFR5cGVzLCAoY2xhenopID0+IGhhcyhjbGF6eiwgXCJQT1BfTU9ERVwiKSk7XG4gICAgfSk7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0NhbkxpbmVUZXJtaW5hdG9yO1xuICAgIHRyYWNlcihcIkxpbmUgVGVybWluYXRvciBIYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmVUZXJtaW5hdG9yQ2hhckNvZGVzID0gZ2V0Q2hhckNvZGVzKG9wdGlvbnMubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKTtcbiAgICAgICAgcGF0dGVybklkeFRvQ2FuTGluZVRlcm1pbmF0b3IgPSBtYXAob25seVJlbGV2YW50VHlwZXMsICh0b2tUeXBlKSA9PiBmYWxzZSk7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uVHJhY2tpbmcgIT09IFwib25seU9mZnNldFwiKSB7XG4gICAgICAgICAgICBwYXR0ZXJuSWR4VG9DYW5MaW5lVGVybWluYXRvciA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgKHRva1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzKHRva1R5cGUsIFwiTElORV9CUkVBS1NcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdG9rVHlwZS5MSU5FX0JSRUFLUztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hlY2tMaW5lQnJlYWtzSXNzdWVzKHRva1R5cGUsIGxpbmVUZXJtaW5hdG9yQ2hhckNvZGVzKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbk1hdGNoQ2hhckNvZGUobGluZVRlcm1pbmF0b3JDaGFyQ29kZXMsIHRva1R5cGUuUEFUVEVSTikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0lzQ3VzdG9tO1xuICAgIGxldCBwYXR0ZXJuSWR4VG9TaG9ydDtcbiAgICBsZXQgZW1wdHlHcm91cHM7XG4gICAgbGV0IHBhdHRlcm5JZHhUb0NvbmZpZztcbiAgICB0cmFjZXIoXCJNaXNjIE1hcHBpbmcgIzJcIiwgKCkgPT4ge1xuICAgICAgICBwYXR0ZXJuSWR4VG9Jc0N1c3RvbSA9IG1hcChvbmx5UmVsZXZhbnRUeXBlcywgaXNDdXN0b21QYXR0ZXJuKTtcbiAgICAgICAgcGF0dGVybklkeFRvU2hvcnQgPSBtYXAoYWxsVHJhbnNmb3JtZWRQYXR0ZXJucywgaXNTaG9ydFBhdHRlcm4pO1xuICAgICAgICBlbXB0eUdyb3VwcyA9IHJlZHVjZShvbmx5UmVsZXZhbnRUeXBlcywgKGFjYywgY2xhenopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IGNsYXp6LkdST1VQO1xuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGdyb3VwTmFtZSkgJiYgIShncm91cE5hbWUgPT09IExleGVyLlNLSVBQRUQpKSB7XG4gICAgICAgICAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgcGF0dGVybklkeFRvQ29uZmlnID0gbWFwKGFsbFRyYW5zZm9ybWVkUGF0dGVybnMsICh4LCBpZHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogYWxsVHJhbnNmb3JtZWRQYXR0ZXJuc1tpZHhdLFxuICAgICAgICAgICAgICAgIGxvbmdlckFsdDogcGF0dGVybklkeFRvTG9uZ2VyQWx0SWR4QXJyW2lkeF0sXG4gICAgICAgICAgICAgICAgY2FuTGluZVRlcm1pbmF0b3I6IHBhdHRlcm5JZHhUb0NhbkxpbmVUZXJtaW5hdG9yW2lkeF0sXG4gICAgICAgICAgICAgICAgaXNDdXN0b206IHBhdHRlcm5JZHhUb0lzQ3VzdG9tW2lkeF0sXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHBhdHRlcm5JZHhUb1Nob3J0W2lkeF0sXG4gICAgICAgICAgICAgICAgZ3JvdXA6IHBhdHRlcm5JZHhUb0dyb3VwW2lkeF0sXG4gICAgICAgICAgICAgICAgcHVzaDogcGF0dGVybklkeFRvUHVzaE1vZGVbaWR4XSxcbiAgICAgICAgICAgICAgICBwb3A6IHBhdHRlcm5JZHhUb1BvcE1vZGVbaWR4XSxcbiAgICAgICAgICAgICAgICB0b2tlblR5cGVJZHg6IHBhdHRlcm5JZHhUb1R5cGVbaWR4XSxcbiAgICAgICAgICAgICAgICB0b2tlblR5cGU6IG9ubHlSZWxldmFudFR5cGVzW2lkeF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBsZXQgY2FuQmVPcHRpbWl6ZWQgPSB0cnVlO1xuICAgIGxldCBjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnID0gW107XG4gICAgaWYgKCFvcHRpb25zLnNhZmVNb2RlKSB7XG4gICAgICAgIHRyYWNlcihcIkZpcnN0IENoYXIgT3B0aW1pemF0aW9uXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgPSByZWR1Y2Uob25seVJlbGV2YW50VHlwZXMsIChyZXN1bHQsIGN1cnJUb2tUeXBlLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJUb2tUeXBlLlBBVFRFUk4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhckNvZGUgPSBjdXJyVG9rVHlwZS5QQVRURVJOLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGltaXplZElkeCA9IGNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleChjaGFyQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRvTWFwT2ZBcnJheXMocmVzdWx0LCBvcHRpbWl6ZWRJZHgsIHBhdHRlcm5JZHhUb0NvbmZpZ1tpZHhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheShjdXJyVG9rVHlwZS5TVEFSVF9DSEFSU19ISU5UKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdE9wdGltaXplZElkeDtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjdXJyVG9rVHlwZS5TVEFSVF9DSEFSU19ISU5ULCAoY2hhck9ySW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IHR5cGVvZiBjaGFyT3JJbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNoYXJPckludC5jaGFyQ29kZUF0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGFyT3JJbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyT3B0aW1pemVkSWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KGNoYXJDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIGFkZGluZyB0aGUgY29uZmlnIG11bHRpcGxlIHRpbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBEaWZmaWN1bHQgdG8gY2hlY2sgdGhpcyBzY2VuYXJpbyBlZmZlY3RzIGFzIGl0IGlzIG9ubHkgYSBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBvcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBjaGFuZ2UgY29ycmVjdG5lc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T3B0aW1pemVkSWR4ICE9PSBjdXJyT3B0aW1pemVkSWR4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE9wdGltaXplZElkeCA9IGN1cnJPcHRpbWl6ZWRJZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9NYXBPZkFycmF5cyhyZXN1bHQsIGN1cnJPcHRpbWl6ZWRJZHgsIHBhdHRlcm5JZHhUb0NvbmZpZ1tpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVnRXhwKGN1cnJUb2tUeXBlLlBBVFRFUk4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVG9rVHlwZS5QQVRURVJOLnVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbkJlT3B0aW1pemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlRfRVJST1IoYCR7ZmFpbGVkT3B0aW1pemF0aW9uUHJlZml4TXNnfWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFx0VW5hYmxlIHRvIGFuYWx5emUgPCAke2N1cnJUb2tUeXBlLlBBVFRFUk4udG9TdHJpbmcoKX0gPiBwYXR0ZXJuLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdFRoZSByZWdleHAgdW5pY29kZSBmbGFnIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSByZWdleHAtdG8tYXN0IGxpYnJhcnkuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFx0Rm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5JQ09ERV9PUFRJTUlaRVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGltaXplZENvZGVzID0gZ2V0T3B0aW1pemVkU3RhcnRDb2Rlc0luZGljZXMoY3VyclRva1R5cGUuUEFUVEVSTiwgb3B0aW9ucy5lbnN1cmVPcHRpbWl6YXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgY29kZSB3aWxsIG9ubHkgYmUgZW1wdHkgZ2l2ZW4gYW4gZW1wdHkgcmVnRXhwIG9yIGZhaWx1cmUgb2YgcmVnZXhwLXRvLWFzdCBsaWJyYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3Qgc2hvdWxkIGJlIGEgZGlmZmVyZW50IHZhbGlkYXRpb24gYW5kIHRoZSBzZWNvbmQgY2Fubm90IGJlIHRlc3RlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KG9wdGltaXplZENvZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbm5vdCB1bmRlcnN0YW5kIHdoYXQgY29kZXMgbWF5IHN0YXJ0IHBvc3NpYmxlIG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3B0aW1pemF0aW9uIGNvcnJlY3RuZXNzIHJlcXVpcmVzIGtub3dpbmcgc3RhcnQgY29kZXMgZm9yIEFMTCBwYXR0ZXJucy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgYWN0dWFsbHkgc3VyZSB0aGlzIGlzIGFuIGVycm9yLCBubyBkZWJ1ZyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2gob3B0aW1pemVkQ29kZXMsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9NYXBPZkFycmF5cyhyZXN1bHQsIGNvZGUsIHBhdHRlcm5JZHhUb0NvbmZpZ1tpZHhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbnN1cmVPcHRpbWl6YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBQUklOVF9FUlJPUihgJHtmYWlsZWRPcHRpbWl6YXRpb25QcmVmaXhNc2d9YCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxcdFRva2VuVHlwZTogPCR7Y3VyclRva1R5cGUubmFtZX0+IGlzIHVzaW5nIGEgY3VzdG9tIHRva2VuIHBhdHRlcm4gd2l0aG91dCBwcm92aWRpbmcgPHN0YXJ0X2NoYXJzX2hpbnQ+IHBhcmFtZXRlci5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHRGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fT1BUSU1JWkVcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVtcHR5R3JvdXBzOiBlbXB0eUdyb3VwcyxcbiAgICAgICAgcGF0dGVybklkeFRvQ29uZmlnOiBwYXR0ZXJuSWR4VG9Db25maWcsXG4gICAgICAgIGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc6IGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcsXG4gICAgICAgIGhhc0N1c3RvbTogaGFzQ3VzdG9tLFxuICAgICAgICBjYW5CZU9wdGltaXplZDogY2FuQmVPcHRpbWl6ZWQsXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5zKHRva2VuVHlwZXMsIHZhbGlkTW9kZXNOYW1lcykge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBtaXNzaW5nUmVzdWx0ID0gZmluZE1pc3NpbmdQYXR0ZXJucyh0b2tlblR5cGVzKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KG1pc3NpbmdSZXN1bHQuZXJyb3JzKTtcbiAgICBjb25zdCBpbnZhbGlkUmVzdWx0ID0gZmluZEludmFsaWRQYXR0ZXJucyhtaXNzaW5nUmVzdWx0LnZhbGlkKTtcbiAgICBjb25zdCB2YWxpZFRva2VuVHlwZXMgPSBpbnZhbGlkUmVzdWx0LnZhbGlkO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoaW52YWxpZFJlc3VsdC5lcnJvcnMpO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVSZWdFeHBQYXR0ZXJuKHZhbGlkVG9rZW5UeXBlcykpO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoZmluZEludmFsaWRHcm91cFR5cGUodmFsaWRUb2tlblR5cGVzKSk7XG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmaW5kTW9kZXNUaGF0RG9Ob3RFeGlzdCh2YWxpZFRva2VuVHlwZXMsIHZhbGlkTW9kZXNOYW1lcykpO1xuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoZmluZFVucmVhY2hhYmxlUGF0dGVybnModmFsaWRUb2tlblR5cGVzKSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlUmVnRXhwUGF0dGVybih0b2tlblR5cGVzKSB7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IHdpdGhSZWdFeHBQYXR0ZXJucyA9IGZpbHRlcih0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IGlzUmVnRXhwKGN1cnJUb2tUeXBlW1BBVFRFUk5dKSk7XG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmaW5kRW5kT2ZJbnB1dEFuY2hvcih3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGZpbmRTdGFydE9mSW5wdXRBbmNob3Iod2l0aFJlZ0V4cFBhdHRlcm5zKSk7XG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmaW5kVW5zdXBwb3J0ZWRGbGFncyh3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGZpbmREdXBsaWNhdGVQYXR0ZXJucyh3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGZpbmRFbXB0eU1hdGNoUmVnRXhwcyh3aXRoUmVnRXhwUGF0dGVybnMpKTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRNaXNzaW5nUGF0dGVybnModG9rZW5UeXBlcykge1xuICAgIGNvbnN0IHRva2VuVHlwZXNXaXRoTWlzc2luZ1BhdHRlcm4gPSBmaWx0ZXIodG9rZW5UeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiAhaGFzKGN1cnJUeXBlLCBQQVRURVJOKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAodG9rZW5UeXBlc1dpdGhNaXNzaW5nUGF0dGVybiwgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gbWlzc2luZyBzdGF0aWMgJ1BBVFRFUk4nIHByb3BlcnR5XCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuTUlTU0lOR19QQVRURVJOLFxuICAgICAgICAgICAgdG9rZW5UeXBlczogW2N1cnJUeXBlXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZCA9IGRpZmZlcmVuY2UodG9rZW5UeXBlcywgdG9rZW5UeXBlc1dpdGhNaXNzaW5nUGF0dGVybik7XG4gICAgcmV0dXJuIHsgZXJyb3JzLCB2YWxpZCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbnZhbGlkUGF0dGVybnModG9rZW5UeXBlcykge1xuICAgIGNvbnN0IHRva2VuVHlwZXNXaXRoSW52YWxpZFBhdHRlcm4gPSBmaWx0ZXIodG9rZW5UeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyVHlwZVtQQVRURVJOXTtcbiAgICAgICAgcmV0dXJuICghaXNSZWdFeHAocGF0dGVybikgJiZcbiAgICAgICAgICAgICFpc0Z1bmN0aW9uKHBhdHRlcm4pICYmXG4gICAgICAgICAgICAhaGFzKHBhdHRlcm4sIFwiZXhlY1wiKSAmJlxuICAgICAgICAgICAgIWlzU3RyaW5nKHBhdHRlcm4pKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAodG9rZW5UeXBlc1dpdGhJbnZhbGlkUGF0dGVybiwgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBjYW4gb25seSBiZSBhIFJlZ0V4cCwgYVwiICtcbiAgICAgICAgICAgICAgICBcIiBGdW5jdGlvbiBtYXRjaGluZyB0aGUge0N1c3RvbVBhdHRlcm5NYXRjaGVyRnVuY30gdHlwZSBvciBhbiBPYmplY3QgbWF0Y2hpbmcgdGhlIHtJQ3VzdG9tUGF0dGVybn0gaW50ZXJmYWNlLlwiLFxuICAgICAgICAgICAgdHlwZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLklOVkFMSURfUEFUVEVSTixcbiAgICAgICAgICAgIHRva2VuVHlwZXM6IFtjdXJyVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWQgPSBkaWZmZXJlbmNlKHRva2VuVHlwZXMsIHRva2VuVHlwZXNXaXRoSW52YWxpZFBhdHRlcm4pO1xuICAgIHJldHVybiB7IGVycm9ycywgdmFsaWQgfTtcbn1cbmNvbnN0IGVuZF9vZl9pbnB1dCA9IC9bXlxcXFxdWyRdLztcbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW5kT2ZJbnB1dEFuY2hvcih0b2tlblR5cGVzKSB7XG4gICAgY2xhc3MgRW5kQW5jaG9yRmluZGVyIGV4dGVuZHMgQmFzZVJlZ0V4cFZpc2l0b3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmZvdW5kID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRFbmRBbmNob3Iobm9kZSkge1xuICAgICAgICAgICAgdGhpcy5mb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW52YWxpZFJlZ2V4ID0gZmlsdGVyKHRva2VuVHlwZXMsIChjdXJyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VyclR5cGUuUEFUVEVSTjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4cEFzdCA9IGdldFJlZ0V4cEFzdChwYXR0ZXJuKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEFuY2hvclZpc2l0b3IgPSBuZXcgRW5kQW5jaG9yRmluZGVyKCk7XG4gICAgICAgICAgICBlbmRBbmNob3JWaXNpdG9yLnZpc2l0KHJlZ2V4cEFzdCk7XG4gICAgICAgICAgICByZXR1cm4gZW5kQW5jaG9yVmlzaXRvci5mb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gb2xkIGJlaGF2aW9yIGluIGNhc2Ugb2YgcnVudGltZSBleGNlcHRpb25zIHdpdGggcmVnZXhwLXRvLWFzdC5cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gY2Fubm90IGVuc3VyZSBhbiBlcnJvciBpbiByZWdleHAtdG8tYXN0Ki9cbiAgICAgICAgICAgIHJldHVybiBlbmRfb2ZfaW5wdXQudGVzdChwYXR0ZXJuLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAoaW52YWxpZFJlZ2V4LCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdFRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJ1xcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdFNlZSBjaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlNcIiArXG4gICAgICAgICAgICAgICAgXCJcXHRmb3IgZGV0YWlscy5cIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5FT0lfQU5DSE9SX0ZPVU5ELFxuICAgICAgICAgICAgdG9rZW5UeXBlczogW2N1cnJUeXBlXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbXB0eU1hdGNoUmVnRXhwcyh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgbWF0Y2hlc0VtcHR5U3RyaW5nID0gZmlsdGVyKHRva2VuVHlwZXMsIChjdXJyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VyclR5cGUuUEFUVEVSTjtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChcIlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAobWF0Y2hlc0VtcHR5U3RyaW5nLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVG9rZW4gVHlwZTogLT5cIiArXG4gICAgICAgICAgICAgICAgY3VyclR5cGUubmFtZSArXG4gICAgICAgICAgICAgICAgXCI8LSBzdGF0aWMgJ1BBVFRFUk4nIG11c3Qgbm90IG1hdGNoIGFuIGVtcHR5IHN0cmluZ1wiLFxuICAgICAgICAgICAgdHlwZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLkVNUFRZX01BVENIX1BBVFRFUk4sXG4gICAgICAgICAgICB0b2tlblR5cGVzOiBbY3VyclR5cGVdLFxuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5jb25zdCBzdGFydF9vZl9pbnB1dCA9IC9bXlxcXFxbXVtcXF5dfF5cXF4vO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTdGFydE9mSW5wdXRBbmNob3IodG9rZW5UeXBlcykge1xuICAgIGNsYXNzIFN0YXJ0QW5jaG9yRmluZGVyIGV4dGVuZHMgQmFzZVJlZ0V4cFZpc2l0b3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmZvdW5kID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRTdGFydEFuY2hvcihub2RlKSB7XG4gICAgICAgICAgICB0aGlzLmZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkUmVnZXggPSBmaWx0ZXIodG9rZW5UeXBlcywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyVHlwZS5QQVRURVJOO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVnZXhwQXN0ID0gZ2V0UmVnRXhwQXN0KHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRBbmNob3JWaXNpdG9yID0gbmV3IFN0YXJ0QW5jaG9yRmluZGVyKCk7XG4gICAgICAgICAgICBzdGFydEFuY2hvclZpc2l0b3IudmlzaXQocmVnZXhwQXN0KTtcbiAgICAgICAgICAgIHJldHVybiBzdGFydEFuY2hvclZpc2l0b3IuZm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG9sZCBiZWhhdmlvciBpbiBjYXNlIG9mIHJ1bnRpbWUgZXhjZXB0aW9ucyB3aXRoIHJlZ2V4cC10by1hc3QuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGNhbm5vdCBlbnN1cmUgYW4gZXJyb3IgaW4gcmVnZXhwLXRvLWFzdCovXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRfb2ZfaW5wdXQudGVzdChwYXR0ZXJuLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAoaW52YWxpZFJlZ2V4LCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdFRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0U2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNBTkNIT1JTXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0Zm9yIGRldGFpbHMuXCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuU09JX0FOQ0hPUl9GT1VORCxcbiAgICAgICAgICAgIHRva2VuVHlwZXM6IFtjdXJyVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVW5zdXBwb3J0ZWRGbGFncyh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgaW52YWxpZEZsYWdzID0gZmlsdGVyKHRva2VuVHlwZXMsIChjdXJyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VyclR5cGVbUEFUVEVSTl07XG4gICAgICAgIHJldHVybiBwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwICYmIChwYXR0ZXJuLm11bHRpbGluZSB8fCBwYXR0ZXJuLmdsb2JhbCk7XG4gICAgfSk7XG4gICAgY29uc3QgZXJyb3JzID0gbWFwKGludmFsaWRGbGFncywgKGN1cnJUeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlRva2VuIFR5cGU6IC0+XCIgK1xuICAgICAgICAgICAgICAgIGN1cnJUeXBlLm5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPC0gc3RhdGljICdQQVRURVJOJyBtYXkgTk9UIGNvbnRhaW4gZ2xvYmFsKCdnJykgb3IgbXVsdGlsaW5lKCdtJylcIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5VTlNVUFBPUlRFRF9GTEFHU19GT1VORCxcbiAgICAgICAgICAgIHRva2VuVHlwZXM6IFtjdXJyVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbi8vIFRoaXMgY2FuIG9ubHkgdGVzdCBmb3IgaWRlbnRpY2FsIGR1cGxpY2F0ZSBSZWdFeHBzLCBub3Qgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgb25lcy5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRHVwbGljYXRlUGF0dGVybnModG9rZW5UeXBlcykge1xuICAgIGNvbnN0IGZvdW5kID0gW107XG4gICAgbGV0IGlkZW50aWNhbFBhdHRlcm5zID0gbWFwKHRva2VuVHlwZXMsIChvdXRlclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZHVjZSh0b2tlblR5cGVzLCAocmVzdWx0LCBpbm5lclR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmIChvdXRlclR5cGUuUEFUVEVSTi5zb3VyY2UgPT09IGlubmVyVHlwZS5QQVRURVJOLnNvdXJjZSAmJlxuICAgICAgICAgICAgICAgICFpbmNsdWRlcyhmb3VuZCwgaW5uZXJUeXBlKSAmJlxuICAgICAgICAgICAgICAgIGlubmVyVHlwZS5QQVRURVJOICE9PSBMZXhlci5OQSkge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgYXZvaWRzIGR1cGxpY2F0ZXMgaW4gdGhlIHJlc3VsdCwgZWFjaCBUb2tlbiBUeXBlIG1heSBvbmx5IGFwcGVhciBpbiBvbmUgXCJzZXRcIlxuICAgICAgICAgICAgICAgIC8vIGluIGVzc2VuY2Ugd2UgYXJlIGNyZWF0aW5nIEVxdWl2YWxlbmNlIGNsYXNzZXMgb24gZXF1YWxpdHkgcmVsYXRpb24uXG4gICAgICAgICAgICAgICAgZm91bmQucHVzaChpbm5lclR5cGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlubmVyVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9KTtcbiAgICBpZGVudGljYWxQYXR0ZXJucyA9IGNvbXBhY3QoaWRlbnRpY2FsUGF0dGVybnMpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm5zID0gZmlsdGVyKGlkZW50aWNhbFBhdHRlcm5zLCAoY3VycklkZW50aWNhbFNldCkgPT4ge1xuICAgICAgICByZXR1cm4gY3VycklkZW50aWNhbFNldC5sZW5ndGggPiAxO1xuICAgIH0pO1xuICAgIGNvbnN0IGVycm9ycyA9IG1hcChkdXBsaWNhdGVQYXR0ZXJucywgKHNldE9mSWRlbnRpY2FsKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuVHlwZU5hbWVzID0gbWFwKHNldE9mSWRlbnRpY2FsLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyVHlwZS5uYW1lO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZHVwUGF0dGVyblNyYyA9IGZpcnN0KHNldE9mSWRlbnRpY2FsKS5QQVRURVJOO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogYFRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+JHtkdXBQYXR0ZXJuU3JjfTwtYCArXG4gICAgICAgICAgICAgICAgYGhhcyBiZWVuIHVzZWQgaW4gYWxsIG9mIHRoZSBmb2xsb3dpbmcgVG9rZW4gVHlwZXM6ICR7dG9rZW5UeXBlTmFtZXMuam9pbihcIiwgXCIpfSA8LWAsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5ELFxuICAgICAgICAgICAgdG9rZW5UeXBlczogc2V0T2ZJZGVudGljYWwsXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW52YWxpZEdyb3VwVHlwZSh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgaW52YWxpZFR5cGVzID0gZmlsdGVyKHRva2VuVHlwZXMsIChjbGF6eikgPT4ge1xuICAgICAgICBpZiAoIWhhcyhjbGF6eiwgXCJHUk9VUFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwID0gY2xhenouR1JPVVA7XG4gICAgICAgIHJldHVybiBncm91cCAhPT0gTGV4ZXIuU0tJUFBFRCAmJiBncm91cCAhPT0gTGV4ZXIuTkEgJiYgIWlzU3RyaW5nKGdyb3VwKTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAoaW52YWxpZFR5cGVzLCAoY3VyclR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVG9rZW4gVHlwZTogLT5cIiArXG4gICAgICAgICAgICAgICAgY3VyclR5cGUubmFtZSArXG4gICAgICAgICAgICAgICAgXCI8LSBzdGF0aWMgJ0dST1VQJyBjYW4gb25seSBiZSBMZXhlci5TS0lQUEVEL0xleGVyLk5BL0EgU3RyaW5nXCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuSU5WQUxJRF9HUk9VUF9UWVBFX0ZPVU5ELFxuICAgICAgICAgICAgdG9rZW5UeXBlczogW2N1cnJUeXBlXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRNb2Rlc1RoYXREb05vdEV4aXN0KHRva2VuVHlwZXMsIHZhbGlkTW9kZXMpIHtcbiAgICBjb25zdCBpbnZhbGlkTW9kZXMgPSBmaWx0ZXIodG9rZW5UeXBlcywgKGNsYXp6KSA9PiB7XG4gICAgICAgIHJldHVybiAoY2xhenouUFVTSF9NT0RFICE9PSB1bmRlZmluZWQgJiYgIWluY2x1ZGVzKHZhbGlkTW9kZXMsIGNsYXp6LlBVU0hfTU9ERSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGVycm9ycyA9IG1hcChpbnZhbGlkTW9kZXMsICh0b2tUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBUb2tlbiBUeXBlOiAtPiR7dG9rVHlwZS5uYW1lfTwtIHN0YXRpYyAnUFVTSF9NT0RFJyB2YWx1ZSBjYW5ub3QgcmVmZXIgdG8gYSBMZXhlciBNb2RlIC0+JHt0b2tUeXBlLlBVU0hfTU9ERX08LWAgK1xuICAgICAgICAgICAgYHdoaWNoIGRvZXMgbm90IGV4aXN0YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5QVVNIX01PREVfRE9FU19OT1RfRVhJU1QsXG4gICAgICAgICAgICB0b2tlblR5cGVzOiBbdG9rVHlwZV0sXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVW5yZWFjaGFibGVQYXR0ZXJucyh0b2tlblR5cGVzKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgY29uc3QgY2FuQmVUZXN0ZWQgPSByZWR1Y2UodG9rZW5UeXBlcywgKHJlc3VsdCwgdG9rVHlwZSwgaWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0b2tUeXBlLlBBVFRFUk47XG4gICAgICAgIGlmIChwYXR0ZXJuID09PSBMZXhlci5OQSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIGZvciBhbGwgZm9ybXMgb2YgcmVnRXhwcyB3b3VsZCByZXF1aXJlXG4gICAgICAgIC8vIGRlZXBlciByZWdFeHAgYW5hbHlzaXMgY2FwYWJpbGl0aWVzXG4gICAgICAgIGlmIChpc1N0cmluZyhwYXR0ZXJuKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBzdHI6IHBhdHRlcm4sIGlkeCwgdG9rZW5UeXBlOiB0b2tUeXBlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pICYmIG5vTWV0YUNoYXIocGF0dGVybikpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgc3RyOiBwYXR0ZXJuLnNvdXJjZSwgaWR4LCB0b2tlblR5cGU6IHRva1R5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBbXSk7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAodG9rVHlwZSwgdGVzdElkeCkgPT4ge1xuICAgICAgICBmb3JFYWNoKGNhbkJlVGVzdGVkLCAoeyBzdHIsIGlkeCwgdG9rZW5UeXBlIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0SWR4IDwgaWR4ICYmIHRlc3RUb2tlblR5cGUoc3RyLCB0b2tUeXBlLlBBVFRFUk4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYFRva2VuOiAtPiR7dG9rZW5UeXBlLm5hbWV9PC0gY2FuIG5ldmVyIGJlIG1hdGNoZWQuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBCZWNhdXNlIGl0IGFwcGVhcnMgQUZURVIgdGhlIFRva2VuIFR5cGUgLT4ke3Rva1R5cGUubmFtZX08LWAgK1xuICAgICAgICAgICAgICAgICAgICBgaW4gdGhlIGxleGVyJ3MgZGVmaW5pdGlvbi5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYFNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5SRUFDSEFCTEVgO1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuVU5SRUFDSEFCTEVfUEFUVEVSTixcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5UeXBlczogW3Rva1R5cGUsIHRva2VuVHlwZV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5mdW5jdGlvbiB0ZXN0VG9rZW5UeXBlKHN0ciwgcGF0dGVybikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cEFycmF5ID0gcGF0dGVybi5leGVjKHN0cik7XG4gICAgICAgIHJldHVybiByZWdFeHBBcnJheSAhPT0gbnVsbCAmJiByZWdFeHBBcnJheS5pbmRleCA9PT0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbihwYXR0ZXJuKSkge1xuICAgICAgICAvLyBtYWludGFpbiB0aGUgQVBJIG9mIGN1c3RvbSBwYXR0ZXJuc1xuICAgICAgICByZXR1cm4gcGF0dGVybihzdHIsIDAsIFtdLCB7fSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhcyhwYXR0ZXJuLCBcImV4ZWNcIikpIHtcbiAgICAgICAgLy8gbWFpbnRhaW4gdGhlIEFQSSBvZiBjdXN0b20gcGF0dGVybnNcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uZXhlYyhzdHIsIDAsIFtdLCB7fSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuID09PSBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG5vTWV0YUNoYXIocmVnRXhwKSB7XG4gICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9SZWdFeHBcbiAgICBjb25zdCBtZXRhQ2hhcnMgPSBbXG4gICAgICAgIFwiLlwiLFxuICAgICAgICBcIlxcXFxcIixcbiAgICAgICAgXCJbXCIsXG4gICAgICAgIFwiXVwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJeXCIsXG4gICAgICAgIFwiJFwiLFxuICAgICAgICBcIihcIixcbiAgICAgICAgXCIpXCIsXG4gICAgICAgIFwiP1wiLFxuICAgICAgICBcIipcIixcbiAgICAgICAgXCIrXCIsXG4gICAgICAgIFwie1wiLFxuICAgIF07XG4gICAgcmV0dXJuIChmaW5kKG1ldGFDaGFycywgKGNoYXIpID0+IHJlZ0V4cC5zb3VyY2UuaW5kZXhPZihjaGFyKSAhPT0gLTEpID09PSB1bmRlZmluZWQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0YXJ0T2ZJbnB1dChwYXR0ZXJuKSB7XG4gICAgY29uc3QgZmxhZ3MgPSBwYXR0ZXJuLmlnbm9yZUNhc2UgPyBcImlcIiA6IFwiXCI7XG4gICAgLy8gYWx3YXlzIHdyYXBwaW5nIGluIGEgbm9uZSBjYXB0dXJpbmcgZ3JvdXAgcHJlY2VkZWQgYnkgJ14nIHRvIG1ha2Ugc3VyZSBtYXRjaGluZyBjYW4gb25seSB3b3JrIG9uIHN0YXJ0IG9mIGlucHV0LlxuICAgIC8vIGR1cGxpY2F0ZS9yZWR1bmRhbnQgc3RhcnQgb2YgaW5wdXQgbWFya2VycyBoYXZlIG5vIG1lYW5pbmcgKC9eXl5eQS8gPT09IC9eQS8pXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke3BhdHRlcm4uc291cmNlfSlgLCBmbGFncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWRkU3RpY2t5RmxhZyhwYXR0ZXJuKSB7XG4gICAgY29uc3QgZmxhZ3MgPSBwYXR0ZXJuLmlnbm9yZUNhc2UgPyBcIml5XCIgOiBcInlcIjtcbiAgICAvLyBhbHdheXMgd3JhcHBpbmcgaW4gYSBub25lIGNhcHR1cmluZyBncm91cCBwcmVjZWRlZCBieSAnXicgdG8gbWFrZSBzdXJlIG1hdGNoaW5nIGNhbiBvbmx5IHdvcmsgb24gc3RhcnQgb2YgaW5wdXQuXG4gICAgLy8gZHVwbGljYXRlL3JlZHVuZGFudCBzdGFydCBvZiBpbnB1dCBtYXJrZXJzIGhhdmUgbm8gbWVhbmluZyAoL15eXl5BLyA9PT0gL15BLylcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHtwYXR0ZXJuLnNvdXJjZX1gLCBmbGFncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVJ1bnRpbWVDaGVja3MobGV4ZXJEZWZpbml0aW9uLCB0cmFja0xpbmVzLCBsaW5lVGVybWluYXRvckNoYXJhY3RlcnMpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAvLyBzb21lIHJ1biB0aW1lIGNoZWNrcyB0byBoZWxwIHRoZSBlbmQgdXNlcnMuXG4gICAgaWYgKCFoYXMobGV4ZXJEZWZpbml0aW9uLCBERUZBVUxUX01PREUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8XCIgK1xuICAgICAgICAgICAgICAgIERFRkFVTFRfTU9ERSArXG4gICAgICAgICAgICAgICAgXCI+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uXFxuXCIsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaGFzKGxleGVyRGVmaW5pdGlvbiwgTU9ERVMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8XCIgK1xuICAgICAgICAgICAgICAgIE1PREVTICtcbiAgICAgICAgICAgICAgICBcIj4gcHJvcGVydHkgaW4gaXRzIGRlZmluaXRpb25cXG5cIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaGFzKGxleGVyRGVmaW5pdGlvbiwgTU9ERVMpICYmXG4gICAgICAgIGhhcyhsZXhlckRlZmluaXRpb24sIERFRkFVTFRfTU9ERSkgJiZcbiAgICAgICAgIWhhcyhsZXhlckRlZmluaXRpb24ubW9kZXMsIGxleGVyRGVmaW5pdGlvbi5kZWZhdWx0TW9kZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgJHtERUZBVUxUX01PREV9OiA8JHtsZXhlckRlZmluaXRpb24uZGVmYXVsdE1vZGV9PmAgK1xuICAgICAgICAgICAgICAgIGB3aGljaCBkb2VzIG5vdCBleGlzdFxcbmAsXG4gICAgICAgICAgICB0eXBlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1QsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaGFzKGxleGVyRGVmaW5pdGlvbiwgTU9ERVMpKSB7XG4gICAgICAgIGZvckVhY2gobGV4ZXJEZWZpbml0aW9uLm1vZGVzLCAoY3Vyck1vZGVWYWx1ZSwgY3Vyck1vZGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBmb3JFYWNoKGN1cnJNb2RlVmFsdWUsIChjdXJyVG9rVHlwZSwgY3VycklkeCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChjdXJyVG9rVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEEgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHVzaW5nIGFuIHVuZGVmaW5lZCBUb2tlbiBUeXBlLiBNb2RlOmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA8JHtjdXJyTW9kZU5hbWV9PiBhdCBpbmRleDogPCR7Y3VycklkeH0+XFxuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhcyhjdXJyVG9rVHlwZSwgXCJMT05HRVJfQUxUXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdCA9IGlzQXJyYXkoY3VyclRva1R5cGUuTE9OR0VSX0FMVClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3VyclRva1R5cGUuTE9OR0VSX0FMVFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbY3VyclRva1R5cGUuTE9OR0VSX0FMVF07XG4gICAgICAgICAgICAgICAgICAgIGZvckVhY2gobG9uZ2VyQWx0LCAoY3VyckxvbmdlckFsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjdXJyTG9uZ2VyQWx0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbmNsdWRlcyhjdXJyTW9kZVZhbHVlLCBjdXJyTG9uZ2VyQWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgbG9uZ2VyX2FsdCA8JHtjdXJyTG9uZ2VyQWx0Lm5hbWV9PiBvbiB0b2tlbiA8JHtjdXJyVG9rVHlwZS5uYW1lfT4gb3V0c2lkZSBvZiBtb2RlIDwke2N1cnJNb2RlTmFtZX0+XFxuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLk1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzKGxleGVyRGVmaW5pdGlvbiwgdHJhY2tMaW5lcywgbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSB7XG4gICAgY29uc3Qgd2FybmluZ3MgPSBbXTtcbiAgICBsZXQgaGFzQW55TGluZUJyZWFrID0gZmFsc2U7XG4gICAgY29uc3QgYWxsVG9rZW5UeXBlcyA9IGNvbXBhY3QoZmxhdHRlbih2YWx1ZXMobGV4ZXJEZWZpbml0aW9uLm1vZGVzKSkpO1xuICAgIGNvbnN0IGNvbmNyZXRlVG9rZW5UeXBlcyA9IHJlamVjdChhbGxUb2tlblR5cGVzLCAoY3VyclR5cGUpID0+IGN1cnJUeXBlW1BBVFRFUk5dID09PSBMZXhlci5OQSk7XG4gICAgY29uc3QgdGVybWluYXRvckNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhsaW5lVGVybWluYXRvckNoYXJhY3RlcnMpO1xuICAgIGlmICh0cmFja0xpbmVzKSB7XG4gICAgICAgIGZvckVhY2goY29uY3JldGVUb2tlblR5cGVzLCAodG9rVHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3Vycklzc3VlID0gY2hlY2tMaW5lQnJlYWtzSXNzdWVzKHRva1R5cGUsIHRlcm1pbmF0b3JDaGFyQ29kZXMpO1xuICAgICAgICAgICAgaWYgKGN1cnJJc3N1ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYnVpbGRMaW5lQnJlYWtJc3N1ZU1lc3NhZ2UodG9rVHlwZSwgY3Vycklzc3VlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB3YXJuaW5nRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogY3Vycklzc3VlLmlzc3VlLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblR5cGU6IHRva1R5cGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHdhcm5pbmdEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYXR0ZW1wdCB0byBzY2FuIGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRoZSBsaW5lX2JyZWFrcyBvcHRpb24uXG4gICAgICAgICAgICAgICAgaWYgKGhhcyh0b2tUeXBlLCBcIkxJTkVfQlJFQUtTXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tUeXBlLkxJTkVfQlJFQUtTID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNBbnlMaW5lQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTWF0Y2hDaGFyQ29kZSh0ZXJtaW5hdG9yQ2hhckNvZGVzLCB0b2tUeXBlLlBBVFRFUk4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNBbnlMaW5lQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRyYWNrTGluZXMgJiYgIWhhc0FueUxpbmVCcmVhaykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiV2FybmluZzogTm8gTElORV9CUkVBS1MgRm91bmQuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0VGhpcyBMZXhlciBoYXMgYmVlbiBkZWZpbmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbixcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXHRCdXQgbm9uZSBvZiB0aGUgVG9rZW4gVHlwZXMgY2FuIGJlIGlkZW50aWZpZWQgYXMgbWF0Y2hpbmcgYSBsaW5lIHRlcm1pbmF0b3IuXFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiXFx0U2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNMSU5FX0JSRUFLUyBcXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXHRmb3IgZGV0YWlscy5cIixcbiAgICAgICAgICAgIHR5cGU6IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5OT19MSU5FX0JSRUFLU19GTEFHUyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3YXJuaW5ncztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUVtcHR5R3JvdXBzKGVtcHR5R3JvdXBzKSB7XG4gICAgY29uc3QgY2xvbmVkUmVzdWx0ID0ge307XG4gICAgY29uc3QgZ3JvdXBLZXlzID0ga2V5cyhlbXB0eUdyb3Vwcyk7XG4gICAgZm9yRWFjaChncm91cEtleXMsIChjdXJyS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJHcm91cFZhbHVlID0gZW1wdHlHcm91cHNbY3VycktleV07XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpc0FycmF5KGN1cnJHcm91cFZhbHVlKSkge1xuICAgICAgICAgICAgY2xvbmVkUmVzdWx0W2N1cnJLZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lZFJlc3VsdDtcbn1cbi8vIFRPRE86IHJlZmFjdG9yIHRvIGF2b2lkIGR1cGxpY2F0aW9uXG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21QYXR0ZXJuKHRva2VuVHlwZSkge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0b2tlblR5cGUuUEFUVEVSTjtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocGF0dGVybikpIHtcbiAgICAgICAgLy8gQ3VzdG9tUGF0dGVybk1hdGNoZXJGdW5jIC0gY3VzdG9tIHBhdHRlcm5zIGRvIG5vdCByZXF1aXJlIGFueSB0cmFuc2Zvcm1hdGlvbnMsIG9ubHkgd3JhcHBpbmcgaW4gYSBSZWdFeHAgTGlrZSBvYmplY3RcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhcyhwYXR0ZXJuLCBcImV4ZWNcIikpIHtcbiAgICAgICAgLy8gSUN1c3RvbVBhdHRlcm5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHBhdHRlcm4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2hvcnRQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgICBpZiAoaXNTdHJpbmcocGF0dGVybikgJiYgcGF0dGVybi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4uY2hhckNvZGVBdCgwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIEZhc3RlciB0aGFuIHVzaW5nIGEgUmVnRXhwIGZvciBkZWZhdWx0IG5ld2xpbmUgZGV0ZWN0aW9uIGR1cmluZyBsZXhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBMaW5lVGVybWluYXRvck9wdGltaXplZFRlc3RlciA9IHtcbiAgICAvLyBpbXBsZW1lbnRzIC9cXG58XFxyXFxuPy9nLnRlc3RcbiAgICB0ZXN0OiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBjb25zdCBsZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGFzdEluZGV4OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGkgKyAxKSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBpICsgMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEluZGV4ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGxhc3RJbmRleDogMCxcbn07XG5mdW5jdGlvbiBjaGVja0xpbmVCcmVha3NJc3N1ZXModG9rVHlwZSwgbGluZVRlcm1pbmF0b3JDaGFyQ29kZXMpIHtcbiAgICBpZiAoaGFzKHRva1R5cGUsIFwiTElORV9CUkVBS1NcIikpIHtcbiAgICAgICAgLy8gaWYgdGhlIHVzZXIgZXhwbGljaXRseSBkZWNsYXJlZCB0aGUgbGluZV9icmVha3Mgb3B0aW9uIHdlIHdpbGwgcmVzcGVjdCB0aGVpciBjaG9pY2VcbiAgICAgICAgLy8gYW5kIGFzc3VtZSBpdCBpcyBjb3JyZWN0LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXNSZWdFeHAodG9rVHlwZS5QQVRURVJOKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiB3aHkgaXMgdGhlIGNhc3Rpbmcgc3VkZGVubHkgbmVlZGVkP1xuICAgICAgICAgICAgICAgIGNhbk1hdGNoQ2hhckNvZGUobGluZVRlcm1pbmF0b3JDaGFyQ29kZXMsIHRva1R5cGUuUEFUVEVSTik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gdG8gdGVzdCB0aGlzIHdlIHdvdWxkIGhhdmUgdG8gbW9jayA8Y2FuTWF0Y2hDaGFyQ29kZT4gdG8gdGhyb3cgYW4gZXJyb3IgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlLklERU5USUZZX1RFUk1JTkFUT1IsXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZzogZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodG9rVHlwZS5QQVRURVJOKSkge1xuICAgICAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwgcGF0dGVybnMgY2FuIGFsd2F5cyBiZSBhbmFseXplZCB0byBkZXRlY3QgbGluZSB0ZXJtaW5hdG9yIHVzYWdlXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDdXN0b21QYXR0ZXJuKHRva1R5cGUpKSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gdG9rZW4gdHlwZXNcbiAgICAgICAgICAgIHJldHVybiB7IGlzc3VlOiBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuQ1VTVE9NX0xJTkVfQlJFQUsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMaW5lQnJlYWtJc3N1ZU1lc3NhZ2UodG9rVHlwZSwgZGV0YWlscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGRldGFpbHMuaXNzdWUgPT09IExleGVyRGVmaW5pdGlvbkVycm9yVHlwZS5JREVOVElGWV9URVJNSU5BVE9SKSB7XG4gICAgICAgIHJldHVybiAoXCJXYXJuaW5nOiB1bmFibGUgdG8gaWRlbnRpZnkgbGluZSB0ZXJtaW5hdG9yIHVzYWdlIGluIHBhdHRlcm4uXFxuXCIgK1xuICAgICAgICAgICAgYFxcdFRoZSBwcm9ibGVtIGlzIGluIHRoZSA8JHt0b2tUeXBlLm5hbWV9PiBUb2tlbiBUeXBlXFxuYCArXG4gICAgICAgICAgICBgXFx0IFJvb3QgY2F1c2U6ICR7ZGV0YWlscy5lcnJNc2d9LlxcbmAgK1xuICAgICAgICAgICAgXCJcXHRGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNJREVOVElGWV9URVJNSU5BVE9SXCIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZXRhaWxzLmlzc3VlID09PSBMZXhlckRlZmluaXRpb25FcnJvclR5cGUuQ1VTVE9NX0xJTkVfQlJFQUspIHtcbiAgICAgICAgcmV0dXJuIChcIldhcm5pbmc6IEEgQ3VzdG9tIFRva2VuIFBhdHRlcm4gc2hvdWxkIHNwZWNpZnkgdGhlIDxsaW5lX2JyZWFrcz4gb3B0aW9uLlxcblwiICtcbiAgICAgICAgICAgIGBcXHRUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dG9rVHlwZS5uYW1lfT4gVG9rZW4gVHlwZVxcbmAgK1xuICAgICAgICAgICAgXCJcXHRGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fTElORV9CUkVBS1wiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hhckNvZGVzKGNoYXJzT3JDb2Rlcykge1xuICAgIGNvbnN0IGNoYXJDb2RlcyA9IG1hcChjaGFyc09yQ29kZXMsIChudW1PclN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaXNTdHJpbmcobnVtT3JTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtT3JTdHJpbmcuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1PclN0cmluZztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFyQ29kZXM7XG59XG5mdW5jdGlvbiBhZGRUb01hcE9mQXJyYXlzKG1hcCwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChtYXBba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcFtrZXldID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG1hcFtrZXldLnB1c2godmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBtaW5PcHRpbWl6YXRpb25WYWwgPSAyNTY7XG4vKipcbiAqIFdlIGFyZSBtYXBwaW5nIGNoYXJDb2RlIGFib3ZlIEFTQ0kgKDI1NikgaW50byBidWNrZXRzIGVhY2ggaW4gdGhlIHNpemUgb2YgMjU2LlxuICogVGhpcyBpcyBiZWNhdXNlIEFTQ0kgYXJlIHRoZSBtb3N0IGNvbW1vbiBzdGFydCBjaGFycyBzbyBlYWNoIG9uZSBvZiB0aG9zZSB3aWxsIGdldCBpdHMgb3duXG4gKiBwb3NzaWJsZSB0b2tlbiBjb25maWdzIHZlY3Rvci5cbiAqXG4gKiBUb2tlbnMgc3RhcnRpbmcgd2l0aCBjaGFyQ29kZXMgXCJhYm92ZVwiIEFTQ0kgYXJlIHVuY29tbW9uLCBzbyB3ZSBjYW4gXCJhZmZvcmRcIlxuICogdG8gcGxhY2UgdGhlc2UgaW50byBidWNrZXRzIG9mIHBvc3NpYmxlIHRva2VuIGNvbmZpZ3MsIFdoYXQgd2UgZ2FpbiBmcm9tXG4gKiB0aGlzIGlzIGF2b2lkaW5nIHRoZSBjYXNlIG9mIGNyZWF0aW5nIGFuIG9wdGltaXphdGlvbiAnY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZydcbiAqIHdoaWNoIHdvdWxkIGNvbnRhaW4gMTAsMDAwKyBhcnJheXMgb2Ygc21hbGwgc2l6ZSAoZS5nIHVuaWNvZGUgSWRlbnRpZmllcnMgc2NlbmFyaW8pLlxuICogT3VyICdjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnJyBtYXggc2l6ZSB3aWxsIG5vdyBiZTpcbiAqIDI1NiArICgyXjE2IC8gMl44KSAtIDEgPT09IDUxMVxuICpcbiAqIG5vdGUgdGhlIGhhY2sgZm9yIGZhc3QgZGl2aXNpb24gaW50ZWdlciBwYXJ0IGV4dHJhY3Rpb25cbiAqIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyMjg1MjhcbiAqL1xubGV0IGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXAgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgoY2hhckNvZGUpIHtcbiAgICByZXR1cm4gY2hhckNvZGUgPCBtaW5PcHRpbWl6YXRpb25WYWxcbiAgICAgICAgPyBjaGFyQ29kZVxuICAgICAgICA6IGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXBbY2hhckNvZGVdO1xufVxuLyoqXG4gKiBUaGlzIGlzIGEgY29tcHJvbWlzZSBiZXR3ZWVuIGNvbGQgc3RhcnQgLyBob3QgcnVubmluZyBwZXJmb3JtYW5jZVxuICogQ3JlYXRpbmcgdGhpcyBhcnJheSB0YWtlcyB+M21zIG9uIGEgbW9kZXJuIG1hY2hpbmUsXG4gKiBCdXQgaWYgd2UgcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gYXQgcnVudGltZSBhcyBuZWVkZWQgdGhlIENTUyBMZXhlciBiZW5jaG1hcmtcbiAqIHBlcmZvcm1hbmNlIGRlZ3JhZGVzIGJ5IH4xMCVcbiAqXG4gKiBUT0RPOiBQZXJoYXBzIGl0IHNob3VsZCBiZSBsYXp5IGluaXRpYWxpemVkIG9ubHkgaWYgYSBjaGFyQ29kZSA+IDI1NSBpcyB1c2VkLlxuICovXG5mdW5jdGlvbiBpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwKCkge1xuICAgIGlmIChpc0VtcHR5KGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXApKSB7XG4gICAgICAgIGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXAgPSBuZXcgQXJyYXkoNjU1MzYpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY1NTM2OyBpKyspIHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9PcHRpbWl6ZWRJZHhNYXBbaV0gPSBpID4gMjU1ID8gMjU1ICsgfn4oaSAvIDI1NSkgOiBpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBjbG9uZSwgY29tcGFjdCwgZGlmZmVyZW5jZSwgZmxhdHRlbiwgZm9yRWFjaCwgaGFzLCBpbmNsdWRlcywgaXNBcnJheSwgaXNFbXB0eSwgbWFwLCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmV4cG9ydCBmdW5jdGlvbiB0b2tlblN0cnVjdHVyZWRNYXRjaGVyKHRva0luc3RhbmNlLCB0b2tDb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IHRva0luc3RhbmNlLnRva2VuVHlwZUlkeDtcbiAgICBpZiAoaW5zdGFuY2VUeXBlID09PSB0b2tDb25zdHJ1Y3Rvci50b2tlblR5cGVJZHgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHRva0NvbnN0cnVjdG9yLmlzUGFyZW50ID09PSB0cnVlICYmXG4gICAgICAgICAgICB0b2tDb25zdHJ1Y3Rvci5jYXRlZ29yeU1hdGNoZXNNYXBbaW5zdGFuY2VUeXBlXSA9PT0gdHJ1ZSk7XG4gICAgfVxufVxuLy8gT3B0aW1pemVkIHRva2VuTWF0Y2hlciBpbiBjYXNlIG91ciBncmFtbWFyIGRvZXMgbm90IHVzZSB0b2tlbiBjYXRlZ29yaWVzXG4vLyBCZWluZyBzbyB0aW55IGl0IGlzIG11Y2ggbW9yZSBsaWtlbHkgdG8gYmUgaW4tbGluZWQgYW5kIHRoaXMgYXZvaWQgdGhlIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWRcbmV4cG9ydCBmdW5jdGlvbiB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzKHRva2VuLCB0b2tUeXBlKSB7XG4gICAgcmV0dXJuIHRva2VuLnRva2VuVHlwZUlkeCA9PT0gdG9rVHlwZS50b2tlblR5cGVJZHg7XG59XG5leHBvcnQgbGV0IHRva2VuU2hvcnROYW1lSWR4ID0gMTtcbmV4cG9ydCBjb25zdCB0b2tlbklkeFRvQ2xhc3MgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50VG9rZW5UeXBlcyh0b2tlblR5cGVzKSB7XG4gICAgLy8gY29sbGVjdCB0aGUgcGFyZW50IFRva2VuIFR5cGVzIGFzIHdlbGwuXG4gICAgY29uc3QgdG9rZW5UeXBlc0FuZFBhcmVudHMgPSBleHBhbmRDYXRlZ29yaWVzKHRva2VuVHlwZXMpO1xuICAgIC8vIGFkZCByZXF1aXJlZCB0b2tlblR5cGUgYW5kIGNhdGVnb3J5TWF0Y2hlcyBwcm9wZXJ0aWVzXG4gICAgYXNzaWduVG9rZW5EZWZhdWx0UHJvcHModG9rZW5UeXBlc0FuZFBhcmVudHMpO1xuICAgIC8vIGZpbGwgdXAgdGhlIGNhdGVnb3J5TWF0Y2hlc1xuICAgIGFzc2lnbkNhdGVnb3JpZXNNYXBQcm9wKHRva2VuVHlwZXNBbmRQYXJlbnRzKTtcbiAgICBhc3NpZ25DYXRlZ29yaWVzVG9rZW5zUHJvcCh0b2tlblR5cGVzQW5kUGFyZW50cyk7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzQW5kUGFyZW50cywgKHRva1R5cGUpID0+IHtcbiAgICAgICAgdG9rVHlwZS5pc1BhcmVudCA9IHRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzLmxlbmd0aCA+IDA7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQ2F0ZWdvcmllcyh0b2tlblR5cGVzKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNsb25lKHRva2VuVHlwZXMpO1xuICAgIGxldCBjYXRlZ29yaWVzID0gdG9rZW5UeXBlcztcbiAgICBsZXQgc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB3aGlsZSAoc2VhcmNoaW5nKSB7XG4gICAgICAgIGNhdGVnb3JpZXMgPSBjb21wYWN0KGZsYXR0ZW4obWFwKGNhdGVnb3JpZXMsIChjdXJyVG9rVHlwZSkgPT4gY3VyclRva1R5cGUuQ0FURUdPUklFUykpKTtcbiAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcmllcyA9IGRpZmZlcmVuY2UoY2F0ZWdvcmllcywgcmVzdWx0KTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChuZXdDYXRlZ29yaWVzKTtcbiAgICAgICAgaWYgKGlzRW1wdHkobmV3Q2F0ZWdvcmllcykpIHtcbiAgICAgICAgICAgIHNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2F0ZWdvcmllcyA9IG5ld0NhdGVnb3JpZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Ub2tlbkRlZmF1bHRQcm9wcyh0b2tlblR5cGVzKSB7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IHtcbiAgICAgICAgaWYgKCFoYXNTaG9ydEtleVByb3BlcnR5KGN1cnJUb2tUeXBlKSkge1xuICAgICAgICAgICAgdG9rZW5JZHhUb0NsYXNzW3Rva2VuU2hvcnROYW1lSWR4XSA9IGN1cnJUb2tUeXBlO1xuICAgICAgICAgICAgY3VyclRva1R5cGUudG9rZW5UeXBlSWR4ID0gdG9rZW5TaG9ydE5hbWVJZHgrKztcbiAgICAgICAgfVxuICAgICAgICAvLyBDQVRFR09SSUVTPyA6IFRva2VuVHlwZSB8IFRva2VuVHlwZVtdXG4gICAgICAgIGlmIChoYXNDYXRlZ29yaWVzUHJvcGVydHkoY3VyclRva1R5cGUpICYmXG4gICAgICAgICAgICAhaXNBcnJheShjdXJyVG9rVHlwZS5DQVRFR09SSUVTKVxuICAgICAgICAvLyAmJlxuICAgICAgICAvLyAhaXNVbmRlZmluZWQoY3VyclRva1R5cGUuQ0FURUdPUklFUy5QQVRURVJOKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGN1cnJUb2tUeXBlLkNBVEVHT1JJRVMgPSBbY3VyclRva1R5cGUuQ0FURUdPUklFU107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNDYXRlZ29yaWVzUHJvcGVydHkoY3VyclRva1R5cGUpKSB7XG4gICAgICAgICAgICBjdXJyVG9rVHlwZS5DQVRFR09SSUVTID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc1Byb3BlcnR5KGN1cnJUb2tUeXBlKSkge1xuICAgICAgICAgICAgY3VyclRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc01hcFByb3BlcnR5KGN1cnJUb2tUeXBlKSkge1xuICAgICAgICAgICAgY3VyclRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25DYXRlZ29yaWVzVG9rZW5zUHJvcCh0b2tlblR5cGVzKSB7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IHtcbiAgICAgICAgLy8gYXZvaWQgZHVwbGljYXRpb25zXG4gICAgICAgIGN1cnJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKGN1cnJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlc01hcCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICBjdXJyVG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMucHVzaCh0b2tlbklkeFRvQ2xhc3Nba2V5XS50b2tlblR5cGVJZHgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25DYXRlZ29yaWVzTWFwUHJvcCh0b2tlblR5cGVzKSB7XG4gICAgZm9yRWFjaCh0b2tlblR5cGVzLCAoY3VyclRva1R5cGUpID0+IHtcbiAgICAgICAgc2luZ2xlQXNzaWduQ2F0ZWdvcmllc1Rva3NNYXAoW10sIGN1cnJUb2tUeXBlKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVBc3NpZ25DYXRlZ29yaWVzVG9rc01hcChwYXRoLCBuZXh0Tm9kZSkge1xuICAgIGZvckVhY2gocGF0aCwgKHBhdGhOb2RlKSA9PiB7XG4gICAgICAgIG5leHROb2RlLmNhdGVnb3J5TWF0Y2hlc01hcFtwYXRoTm9kZS50b2tlblR5cGVJZHhdID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBmb3JFYWNoKG5leHROb2RlLkNBVEVHT1JJRVMsIChuZXh0Q2F0ZWdvcnkpID0+IHtcbiAgICAgICAgY29uc3QgbmV3UGF0aCA9IHBhdGguY29uY2F0KG5leHROb2RlKTtcbiAgICAgICAgLy8gYXZvaWRzIGluZmluaXRlIGxvb3BzIGR1ZSB0byBjeWNsaWMgY2F0ZWdvcmllcy5cbiAgICAgICAgaWYgKCFpbmNsdWRlcyhuZXdQYXRoLCBuZXh0Q2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICBzaW5nbGVBc3NpZ25DYXRlZ29yaWVzVG9rc01hcChuZXdQYXRoLCBuZXh0Q2F0ZWdvcnkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzU2hvcnRLZXlQcm9wZXJ0eSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIGhhcyh0b2tUeXBlLCBcInRva2VuVHlwZUlkeFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNDYXRlZ29yaWVzUHJvcGVydHkodG9rVHlwZSkge1xuICAgIHJldHVybiBoYXModG9rVHlwZSwgXCJDQVRFR09SSUVTXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzUHJvcGVydHkodG9rVHlwZSkge1xuICAgIHJldHVybiBoYXModG9rVHlwZSwgXCJjYXRlZ29yeU1hdGNoZXNcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzRXh0ZW5kaW5nVG9rZW5zVHlwZXNNYXBQcm9wZXJ0eSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIGhhcyh0b2tUeXBlLCBcImNhdGVnb3J5TWF0Y2hlc01hcFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuVHlwZSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIGhhcyh0b2tUeXBlLCBcInRva2VuVHlwZUlkeFwiKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2Vucy5qcy5tYXAiLAogICAgImV4cG9ydCBjb25zdCBkZWZhdWx0TGV4ZXJFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKHRva2VuKSB7XG4gICAgICAgIHJldHVybiBgVW5hYmxlIHRvIHBvcCBMZXhlciBNb2RlIGFmdGVyIGVuY291bnRlcmluZyBUb2tlbiAtPiR7dG9rZW4uaW1hZ2V9PC0gVGhlIE1vZGUgU3RhY2sgaXMgZW1wdHlgO1xuICAgIH0sXG4gICAgYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UoZnVsbFRleHQsIHN0YXJ0T2Zmc2V0LCBsZW5ndGgsIGxpbmUsIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gKGB1bmV4cGVjdGVkIGNoYXJhY3RlcjogLT4ke2Z1bGxUZXh0LmNoYXJBdChzdGFydE9mZnNldCl9PC0gYXQgb2Zmc2V0OiAke3N0YXJ0T2Zmc2V0fSxgICsgYCBza2lwcGVkICR7bGVuZ3RofSBjaGFyYWN0ZXJzLmApO1xuICAgIH0sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXJfZXJyb3JzX3B1YmxpYy5qcy5tYXAiLAogICAgImltcG9ydCB7IGFuYWx5emVUb2tlblR5cGVzLCBjaGFyQ29kZVRvT3B0aW1pemVkSW5kZXgsIGNsb25lRW1wdHlHcm91cHMsIERFRkFVTFRfTU9ERSwgTGluZVRlcm1pbmF0b3JPcHRpbWl6ZWRUZXN0ZXIsIHBlcmZvcm1SdW50aW1lQ2hlY2tzLCBwZXJmb3JtV2FybmluZ1J1bnRpbWVDaGVja3MsIFNVUFBPUlRfU1RJQ0tZLCB2YWxpZGF0ZVBhdHRlcm5zLCB9IGZyb20gXCIuL2xleGVyLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ24sIGNsb25lLCBmb3JFYWNoLCBpZGVudGl0eSwgaXNBcnJheSwgaXNFbXB0eSwgaXNVbmRlZmluZWQsIGtleXMsIGxhc3QsIG1hcCwgbm9vcCwgcmVkdWNlLCByZWplY3QsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUFJJTlRfV0FSTklORywgdGltZXIsIHRvRmFzdFByb3BlcnRpZXMgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGF1Z21lbnRUb2tlblR5cGVzIH0gZnJvbSBcIi4vdG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0TGV4ZXJFcnJvclByb3ZpZGVyIH0gZnJvbSBcIi4vbGV4ZXJfZXJyb3JzX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSB9IGZyb20gXCIuL3JlZ19leHBfcGFyc2VyLmpzXCI7XG5leHBvcnQgdmFyIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZTtcbihmdW5jdGlvbiAoTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlKSB7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk1JU1NJTkdfUEFUVEVSTlwiXSA9IDBdID0gXCJNSVNTSU5HX1BBVFRFUk5cIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiSU5WQUxJRF9QQVRURVJOXCJdID0gMV0gPSBcIklOVkFMSURfUEFUVEVSTlwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJFT0lfQU5DSE9SX0ZPVU5EXCJdID0gMl0gPSBcIkVPSV9BTkNIT1JfRk9VTkRcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiVU5TVVBQT1JURURfRkxBR1NfRk9VTkRcIl0gPSAzXSA9IFwiVU5TVVBQT1JURURfRkxBR1NfRk9VTkRcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EXCJdID0gNF0gPSBcIkRVUExJQ0FURV9QQVRURVJOU19GT1VORFwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJJTlZBTElEX0dST1VQX1RZUEVfRk9VTkRcIl0gPSA1XSA9IFwiSU5WQUxJRF9HUk9VUF9UWVBFX0ZPVU5EXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVFwiXSA9IDZdID0gXCJQVVNIX01PREVfRE9FU19OT1RfRVhJU1RcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERVwiXSA9IDddID0gXCJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWVwiXSA9IDhdID0gXCJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFlcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1RcIl0gPSA5XSA9IFwiTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1RcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORURcIl0gPSAxMF0gPSBcIkxFWEVSX0RFRklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIlNPSV9BTkNIT1JfRk9VTkRcIl0gPSAxMV0gPSBcIlNPSV9BTkNIT1JfRk9VTkRcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiRU1QVFlfTUFUQ0hfUEFUVEVSTlwiXSA9IDEyXSA9IFwiRU1QVFlfTUFUQ0hfUEFUVEVSTlwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJOT19MSU5FX0JSRUFLU19GTEFHU1wiXSA9IDEzXSA9IFwiTk9fTElORV9CUkVBS1NfRkxBR1NcIjtcbiAgICBMZXhlckRlZmluaXRpb25FcnJvclR5cGVbTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiVU5SRUFDSEFCTEVfUEFUVEVSTlwiXSA9IDE0XSA9IFwiVU5SRUFDSEFCTEVfUEFUVEVSTlwiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJJREVOVElGWV9URVJNSU5BVE9SXCJdID0gMTVdID0gXCJJREVOVElGWV9URVJNSU5BVE9SXCI7XG4gICAgTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlW0xleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtcIkNVU1RPTV9MSU5FX0JSRUFLXCJdID0gMTZdID0gXCJDVVNUT01fTElORV9CUkVBS1wiO1xuICAgIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZVtMZXhlckRlZmluaXRpb25FcnJvclR5cGVbXCJNVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERVwiXSA9IDE3XSA9IFwiTVVMVElfTU9ERV9MRVhFUl9MT05HRVJfQUxUX05PVF9JTl9DVVJSRU5UX01PREVcIjtcbn0pKExleGVyRGVmaW5pdGlvbkVycm9yVHlwZSB8fCAoTGV4ZXJEZWZpbml0aW9uRXJyb3JUeXBlID0ge30pKTtcbmNvbnN0IERFRkFVTFRfTEVYRVJfQ09ORklHID0ge1xuICAgIGRlZmVyRGVmaW5pdGlvbkVycm9yc0hhbmRsaW5nOiBmYWxzZSxcbiAgICBwb3NpdGlvblRyYWNraW5nOiBcImZ1bGxcIixcbiAgICBsaW5lVGVybWluYXRvcnNQYXR0ZXJuOiAvXFxufFxcclxcbj8vZyxcbiAgICBsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6IFtcIlxcblwiLCBcIlxcclwiXSxcbiAgICBlbnN1cmVPcHRpbWl6YXRpb25zOiBmYWxzZSxcbiAgICBzYWZlTW9kZTogZmFsc2UsXG4gICAgZXJyb3JNZXNzYWdlUHJvdmlkZXI6IGRlZmF1bHRMZXhlckVycm9yUHJvdmlkZXIsXG4gICAgdHJhY2VJbml0UGVyZjogZmFsc2UsXG4gICAgc2tpcFZhbGlkYXRpb25zOiBmYWxzZSxcbiAgICByZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG59O1xuT2JqZWN0LmZyZWV6ZShERUZBVUxUX0xFWEVSX0NPTkZJRyk7XG5leHBvcnQgY2xhc3MgTGV4ZXIge1xuICAgIGNvbnN0cnVjdG9yKGxleGVyRGVmaW5pdGlvbiwgY29uZmlnID0gREVGQVVMVF9MRVhFUl9DT05GSUcpIHtcbiAgICAgICAgdGhpcy5sZXhlckRlZmluaXRpb24gPSBsZXhlckRlZmluaXRpb247XG4gICAgICAgIHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzID0gW107XG4gICAgICAgIHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZyA9IFtdO1xuICAgICAgICB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZyA9IHt9O1xuICAgICAgICB0aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmVtcHR5R3JvdXBzID0ge307XG4gICAgICAgIHRoaXMudHJhY2tTdGFydExpbmVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50cmFja0VuZExpbmVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oYXNDdXN0b20gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWQgPSB7fTtcbiAgICAgICAgLy8gRHVwbGljYXRlZCBmcm9tIHRoZSBwYXJzZXIncyBwZXJmIHRyYWNlIHRyYWl0IHRvIGFsbG93IGZ1dHVyZSBleHRyYWN0aW9uXG4gICAgICAgIC8vIG9mIHRoZSBsZXhlciB0byBhIHNlcGFyYXRlIHBhY2thZ2UuXG4gICAgICAgIHRoaXMuVFJBQ0VfSU5JVCA9IChwaGFzZURlc2MsIHBoYXNlSW1wbCkgPT4ge1xuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBvcHRpbWl6ZSB0aGlzIHVzaW5nIE5PT1AgcGF0dGVybiBiZWNhdXNlXG4gICAgICAgICAgICAvLyBJdCBpcyBub3QgY2FsbGVkIGluIGEgaG90IHNwb3QuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlSW5pdFBlcmYgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNlSW5pdEluZGVudCsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGVudCA9IG5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCArIDEpLmpvaW4oXCJcXHRcIik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2VJbml0SW5kZW50IDwgdGhpcy50cmFjZUluaXRNYXhJZGVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpbmRlbnR9LS0+IDwke3BoYXNlRGVzY30+YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGltZSwgdmFsdWUgfSA9IHRpbWVyKHBoYXNlSW1wbCk7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBEaWZmaWN1bHQgdG8gcmVwcm9kdWNlIHNwZWNpZmljIHBlcmZvcm1hbmNlIGJlaGF2aW9yICg+MTBtcykgaW4gdGVzdHMgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFjZU1ldGhvZCA9IHRpbWUgPiAxMCA/IGNvbnNvbGUud2FybiA6IGNvbnNvbGUubG9nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlSW5pdEluZGVudCA8IHRoaXMudHJhY2VJbml0TWF4SWRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2VNZXRob2QoYCR7aW5kZW50fTwtLSA8JHtwaGFzZURlc2N9PiB0aW1lOiAke3RpbWV9bXNgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZUluaXRJbmRlbnQtLTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGhhc2VJbXBsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMZXhlciBjb25zdHJ1Y3RvciBpcyBub3cgYW4gSUxleGVyQ29uZmlnIE9iamVjdC5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJhIGJvb2xlYW4gMm5kIGFyZ3VtZW50IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG9kbzogZGVmYXVsdHMgZnVuYz9cbiAgICAgICAgdGhpcy5jb25maWcgPSBhc3NpZ24oe30sIERFRkFVTFRfTEVYRVJfQ09ORklHLCBjb25maWcpO1xuICAgICAgICBjb25zdCB0cmFjZUluaXRWYWwgPSB0aGlzLmNvbmZpZy50cmFjZUluaXRQZXJmO1xuICAgICAgICBpZiAodHJhY2VJbml0VmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdE1heElkZW50ID0gSW5maW5pdHk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdFBlcmYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0cmFjZUluaXRWYWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0TWF4SWRlbnQgPSB0cmFjZUluaXRWYWw7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdFBlcmYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2VJbml0SW5kZW50ID0gLTE7XG4gICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkxleGVyIENvbnN0cnVjdG9yXCIsICgpID0+IHtcbiAgICAgICAgICAgIGxldCBhY3R1YWxEZWZpbml0aW9uO1xuICAgICAgICAgICAgbGV0IGhhc09ubHlTaW5nbGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkxleGVyIENvbmZpZyBoYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4gPT09XG4gICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTEVYRVJfQ09ORklHLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW1pemVkIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIGZvciB0aGUgZGVmYXVsdHMgZGVmaW5pdGlvbiBvZiBsaW5lVGVybWluYXRvcnNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JzUGF0dGVybiA9IExpbmVUZXJtaW5hdG9yT3B0aW1pemVkVGVzdGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTEVYRVJfQ09ORklHLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFcnJvcjogTWlzc2luZyA8bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPiBwcm9wZXJ0eSBvbiB0aGUgTGV4ZXIgY29uZmlnLlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcdEZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI01JU1NJTkdfTElORV9URVJNX0NIQVJTXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2FmZU1vZGUgJiYgY29uZmlnLmVuc3VyZU9wdGltaXphdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1wic2FmZU1vZGVcIiBhbmQgXCJlbnN1cmVPcHRpbWl6YXRpb25zXCIgZmxhZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50cmFja1N0YXJ0TGluZXMgPSAvZnVsbHxvbmx5U3RhcnQvaS50ZXN0KHRoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2tFbmRMaW5lcyA9IC9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKTtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IFNpbmdsZU1vZGVMZXhlckRlZmluaXRpb24gaW50byBhIElNdWx0aU1vZGVMZXhlckRlZmluaXRpb24uXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkobGV4ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBhY3R1YWxEZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXM6IHsgZGVmYXVsdE1vZGU6IGNsb25lKGxleGVyRGVmaW5pdGlvbikgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNb2RlOiBERUZBVUxUX01PREUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBubyBjb252ZXJzaW9uIG5lZWRlZCwgaW5wdXQgc2hvdWxkIGFscmVhZHkgYmUgYSBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgICAgIGhhc09ubHlTaW5nbGVNb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbERlZmluaXRpb24gPSBjbG9uZShsZXhlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJwZXJmb3JtUnVudGltZUNoZWNrc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzID0gdGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMuY29uY2F0KHBlcmZvcm1SdW50aW1lQ2hlY2tzKGFjdHVhbERlZmluaXRpb24sIHRoaXMudHJhY2tTdGFydExpbmVzLCB0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJwZXJmb3JtV2FybmluZ1J1bnRpbWVDaGVja3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmcgPSB0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmcuY29uY2F0KHBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyhhY3R1YWxEZWZpbml0aW9uLCB0aGlzLnRyYWNrU3RhcnRMaW5lcywgdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmb3IgZXh0cmEgcm9idXN0bmVzcyB0byBhdm9pZCB0aHJvd2luZyBhbiBub25lIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgIGFjdHVhbERlZmluaXRpb24ubW9kZXMgPSBhY3R1YWxEZWZpbml0aW9uLm1vZGVzXG4gICAgICAgICAgICAgICAgPyBhY3R1YWxEZWZpbml0aW9uLm1vZGVzXG4gICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgIC8vIGFuIGVycm9yIG9mIHVuZGVmaW5lZCBUb2tlblR5cGVzIHdpbGwgYmUgZGV0ZWN0ZWQgaW4gXCJwZXJmb3JtUnVudGltZUNoZWNrc1wiIGFib3ZlLlxuICAgICAgICAgICAgLy8gdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB0byBpbmNyZWFzZSByb2J1c3RuZXNzIGluIHRoZSBjYXNlIG9mIHBhcnRpYWxseSBpbnZhbGlkIGxleGVyIGRlZmluaXRpb24uXG4gICAgICAgICAgICBmb3JFYWNoKGFjdHVhbERlZmluaXRpb24ubW9kZXMsIChjdXJyTW9kZVZhbHVlLCBjdXJyTW9kZU5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY3R1YWxEZWZpbml0aW9uLm1vZGVzW2N1cnJNb2RlTmFtZV0gPSByZWplY3QoY3Vyck1vZGVWYWx1ZSwgKGN1cnJUb2tUeXBlKSA9PiBpc1VuZGVmaW5lZChjdXJyVG9rVHlwZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBhbGxNb2RlTmFtZXMgPSBrZXlzKGFjdHVhbERlZmluaXRpb24ubW9kZXMpO1xuICAgICAgICAgICAgZm9yRWFjaChhY3R1YWxEZWZpbml0aW9uLm1vZGVzLCAoY3Vyck1vZERlZiwgY3Vyck1vZE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYE1vZGU6IDwke2N1cnJNb2ROYW1lfT4gcHJvY2Vzc2luZ2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2Rlcy5wdXNoKGN1cnJNb2ROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChgdmFsaWRhdGVQYXR0ZXJuc2AsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycyA9IHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdCh2YWxpZGF0ZVBhdHRlcm5zKGN1cnJNb2REZWYsIGFsbE1vZGVOYW1lcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGVmaW5pdGlvbiBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCwgdGhlIGFuYWx5c2lzIHBoYXNlIG1heSBmYWlsIHVuZXhwZWN0ZWRseS9cbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXJpbmcgYSBsZXhlciB3aXRoIGRlZmluaXRpb24gZXJyb3JzIG1heSBuZXZlciBiZSB1c2VkLCB0aGVyZSBpcyBubyBwb2ludFxuICAgICAgICAgICAgICAgICAgICAvLyB0byBwZXJmb3JtaW5nIHRoZSBhbmFseXNpcyBhbnlob3cuLi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdWdtZW50VG9rZW5UeXBlcyhjdXJyTW9kRGVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyQW5hbHl6ZVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChgYW5hbHl6ZVRva2VuVHlwZXNgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFuYWx5emVSZXN1bHQgPSBhbmFseXplVG9rZW5UeXBlcyhjdXJyTW9kRGVmLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVyczogdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblRyYWNraW5nOiBjb25maWcucG9zaXRpb25UcmFja2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlT3B0aW1pemF0aW9uczogY29uZmlnLmVuc3VyZU9wdGltaXphdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVNb2RlOiBjb25maWcuc2FmZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlcjogdGhpcy5UUkFDRV9JTklULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tjdXJyTW9kTmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBbmFseXplUmVzdWx0LnBhdHRlcm5JZHhUb0NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tjdXJyTW9kTmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJBbmFseXplUmVzdWx0LmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5R3JvdXBzID0gYXNzaWduKHt9LCB0aGlzLmVtcHR5R3JvdXBzLCBjdXJyQW5hbHl6ZVJlc3VsdC5lbXB0eUdyb3Vwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0N1c3RvbSA9IGN1cnJBbmFseXplUmVzdWx0Lmhhc0N1c3RvbSB8fCB0aGlzLmhhc0N1c3RvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkW2N1cnJNb2ROYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFuYWx5emVSZXN1bHQuY2FuQmVPcHRpbWl6ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZSA9IGFjdHVhbERlZmluaXRpb24uZGVmYXVsdE1vZGU7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuY29uZmlnLmRlZmVyRGVmaW5pdGlvbkVycm9yc0hhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRXJyTWVzc2FnZXMgPSBtYXAodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGxFcnJNZXNzYWdlc1N0cmluZyA9IGFsbEVyck1lc3NhZ2VzLmpvaW4oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcblwiKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjpcXG5cIiArIGFsbEVyck1lc3NhZ2VzU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE9ubHkgcHJpbnQgd2FybmluZyBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCBUaGlzIHdpbGwgYXZvaWQgcGxcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLCAod2FybmluZ0Rlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgICAgICBQUklOVF9XQVJOSU5HKHdhcm5pbmdEZXNjcmlwdG9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJDaG9vc2luZyBzdWItbWV0aG9kcyBpbXBsZW1lbnRhdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENob29zZSB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25zIGZvciB0aGlzIHNwZWNpZmljIHBhcnNlci5cbiAgICAgICAgICAgICAgICAvLyBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIGluLWxpbmVkIGJ5IHRoZSBKYXZhU2NyaXB0IGVuZ2luZVxuICAgICAgICAgICAgICAgIC8vIHRvIHByb3ZpZGUgb3B0aW1hbCBwZXJmb3JtYW5jZSBpbiBlYWNoIHNjZW5hcmlvLlxuICAgICAgICAgICAgICAgIGlmIChTVVBQT1JUX1NUSUNLWSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNob3BJbnB1dCA9IGlkZW50aXR5O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaFdpdGhUZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXN0SW5kZXggPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaFdpdGhFeGVjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGFzT25seVNpbmdsZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNb2RlcyA9IG5vb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrU3RhcnRMaW5lcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlTmV3Q29sdW1uID0gaWRlbnRpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrRW5kTGluZXMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24gPSBub29wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoL2Z1bGwvaS50ZXN0KHRoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZSA9IHRoaXMuY3JlYXRlRnVsbFRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvb25seVN0YXJ0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2UgPSB0aGlzLmNyZWF0ZVN0YXJ0T25seVRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvb25seU9mZnNldC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlID0gdGhpcy5jcmVhdGVPZmZzZXRPbmx5VG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCA8cG9zaXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogXCIke3RoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmd9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ3VzdG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9rZW4gPSB0aGlzLmFkZFRva2VuVXNpbmdQdXNoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBheWxvYWQgPSB0aGlzLmhhbmRsZVBheWxvYWRXaXRoQ3VzdG9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb2tlbiA9IHRoaXMuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXlsb2FkID0gdGhpcy5oYW5kbGVQYXlsb2FkTm9DdXN0b207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJGYWlsZWQgT3B0aW1pemF0aW9uIFdhcm5pbmdzXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bk9wdGltaXplZE1vZGVzID0gcmVkdWNlKHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkLCAoY2Fubm90QmVPcHRpbWl6ZWQsIGNhbkJlT3B0aW1pemVkLCBtb2RlTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5ub3RCZU9wdGltaXplZC5wdXNoKG1vZGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fubm90QmVPcHRpbWl6ZWQ7XG4gICAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5zdXJlT3B0aW1pemF0aW9ucyAmJiAhaXNFbXB0eSh1bk9wdGltaXplZE1vZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTGV4ZXIgTW9kZXM6IDwgJHt1bk9wdGltaXplZE1vZGVzLmpvaW4oXCIsIFwiKX0gPiBjYW5ub3QgYmUgb3B0aW1pemVkLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcdCBEaXNhYmxlIHRoZSBcImVuc3VyZU9wdGltaXphdGlvbnNcIiBsZXhlciBjb25maWcgZmxhZyB0byBzaWxlbnRseSBpZ25vcmUgdGhpcyBhbmQgcnVuIHRoZSBsZXhlciBpbiBhbiB1bi1vcHRpbWl6ZWQgbW9kZS5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFx0IE9yIGluc3BlY3QgdGhlIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzIG9uIGhvdyB0byByZXNvbHZlIHRoZXNlIGlzc3Vlcy5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJjbGVhclJlZ0V4cFBhcnNlckNhY2hlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclJlZ0V4cFBhcnNlckNhY2hlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcInRvRmFzdFByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvRmFzdFByb3BlcnRpZXModGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRva2VuaXplKHRleHQsIGluaXRpYWxNb2RlID0gdGhpcy5kZWZhdWx0TW9kZSkge1xuICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxFcnJNZXNzYWdlcyA9IG1hcCh0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFsbEVyck1lc3NhZ2VzU3RyaW5nID0gYWxsRXJyTWVzc2FnZXMuam9pbihcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIFRva2VuaXplIGJlY2F1c2UgRXJyb3JzIGRldGVjdGVkIGluIGRlZmluaXRpb24gb2YgTGV4ZXI6XFxuXCIgK1xuICAgICAgICAgICAgICAgIGFsbEVyck1lc3NhZ2VzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKHRleHQsIGluaXRpYWxNb2RlKTtcbiAgICB9XG4gICAgLy8gVGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgZHVwbGljYXRpb24gYmV0d2VlbiB0aGlzIGFuZCBcInRva2VuaXplSW50ZXJuYWxMYXp5XCJcbiAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsIGR1ZSB0byBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy5cbiAgICAvLyB0aGlzIG1ldGhvZCBhbHNvIHVzZWQgcXVpdGUgYSBiaXQgb2YgYCFgIG5vbmUgbnVsbCBhc3NlcnRpb25zIGJlY2F1c2UgaXQgaXMgdG9vIG9wdGltaXplZFxuICAgIC8vIGZvciBgdHNjYCB0byBhbHdheXMgdW5kZXJzdGFuZCBpdCBpcyBcInNhZmVcIlxuICAgIHRva2VuaXplSW50ZXJuYWwodGV4dCwgaW5pdGlhbE1vZGUpIHtcbiAgICAgICAgbGV0IGksIGosIGssIG1hdGNoQWx0SW1hZ2UsIGxvbmdlckFsdCwgbWF0Y2hlZEltYWdlLCBwYXlsb2FkLCBhbHRQYXlsb2FkLCBpbWFnZUxlbmd0aCwgZ3JvdXAsIHRva1R5cGUsIG5ld1Rva2VuLCBlcnJMZW5ndGgsIGRyb3BwZWRDaGFyLCBtc2csIG1hdGNoO1xuICAgICAgICBjb25zdCBvcmdUZXh0ID0gdGV4dDtcbiAgICAgICAgY29uc3Qgb3JnTGVuZ3RoID0gb3JnVGV4dC5sZW5ndGg7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBsZXQgbWF0Y2hlZFRva2Vuc0luZGV4ID0gMDtcbiAgICAgICAgLy8gaW5pdGlhbGl6aW5nIHRoZSB0b2tlbnNBcnJheSB0byB0aGUgXCJndWVzc2VkXCIgc2l6ZS5cbiAgICAgICAgLy8gZ3Vlc3NpbmcgdG9vIGxpdHRsZSB3aWxsIHN0aWxsIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGFycmF5IHJlLXNpemVzIG9uIHB1c2hlcy5cbiAgICAgICAgLy8gZ3Vlc3NpbmcgdG9vIGxhcmdlIChUZXN0ZWQgYnkgZ3Vlc3NpbmcgeDQgdG9vIGxhcmdlKSBtYXkgY29zdCBhIGJpdCBtb3JlIG9mIG1lbW9yeVxuICAgICAgICAvLyBidXQgd291bGQgc3RpbGwgaGF2ZSBhIGZhc3RlciBydW50aW1lIGJ5IGF2b2lkaW5nIChBbGwgYnV0IG9uZSkgYXJyYXkgcmVzaXppbmcuXG4gICAgICAgIGNvbnN0IGd1ZXNzZWROdW1iZXJPZlRva2VucyA9IHRoaXMuaGFzQ3VzdG9tXG4gICAgICAgICAgICA/IDAgLy8gd2lsbCBicmVhayBjdXN0b20gdG9rZW4gcGF0dGVybiBBUElzIHRoZSBtYXRjaGVkVG9rZW5zIGFycmF5IHdpbGwgY29udGFpbiB1bmRlZmluZWQgZWxlbWVudHMuXG4gICAgICAgICAgICA6IE1hdGguZmxvb3IodGV4dC5sZW5ndGggLyAxMCk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRUb2tlbnMgPSBuZXcgQXJyYXkoZ3Vlc3NlZE51bWJlck9mVG9rZW5zKTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGxldCBsaW5lID0gdGhpcy50cmFja1N0YXJ0TGluZXMgPyAxIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY29sdW1uID0gdGhpcy50cmFja1N0YXJ0TGluZXMgPyAxIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBncm91cHMgPSBjbG9uZUVtcHR5R3JvdXBzKHRoaXMuZW1wdHlHcm91cHMpO1xuICAgICAgICBjb25zdCB0cmFja0xpbmVzID0gdGhpcy50cmFja1N0YXJ0TGluZXM7XG4gICAgICAgIGNvbnN0IGxpbmVUZXJtaW5hdG9yUGF0dGVybiA9IHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm47XG4gICAgICAgIGxldCBjdXJyTW9kZVBhdHRlcm5zTGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IHBhdHRlcm5JZHhUb0NvbmZpZyA9IFtdO1xuICAgICAgICBsZXQgY3VyckNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgPSBbXTtcbiAgICAgICAgY29uc3QgbW9kZVN0YWNrID0gW107XG4gICAgICAgIGNvbnN0IGVtcHR5QXJyYXkgPSBbXTtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShlbXB0eUFycmF5KTtcbiAgICAgICAgbGV0IGdldFBvc3NpYmxlUGF0dGVybnM7XG4gICAgICAgIGZ1bmN0aW9uIGdldFBvc3NpYmxlUGF0dGVybnNTbG93KCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm5JZHhUb0NvbmZpZztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRQb3NzaWJsZVBhdHRlcm5zT3B0aW1pemVkKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpbWl6ZWRDaGFySWR4ID0gY2hhckNvZGVUb09wdGltaXplZEluZGV4KGNoYXJDb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0dGVybnMgPSBjdXJyQ2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tvcHRpbWl6ZWRDaGFySWR4XTtcbiAgICAgICAgICAgIGlmIChwb3NzaWJsZVBhdHRlcm5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlBcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZVBhdHRlcm5zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcF9tb2RlID0gKHBvcFRva2VuKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBwZXJoYXBzIGF2b2lkIHRoaXMgZXJyb3IgaW4gdGhlIGVkZ2UgY2FzZSB0aGVyZSBpcyBubyBtb3JlIGlucHV0P1xuICAgICAgICAgICAgaWYgKG1vZGVTdGFjay5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGJvdGggYSBQT1BfTU9ERSBhbmQgYSBQVVNIX01PREUgdGhpcyBpcyBpbi1mYWN0IGEgXCJ0cmFuc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAvLyBTbyBubyBlcnJvciBzaG91bGQgb2NjdXIuXG4gICAgICAgICAgICAgICAgcG9wVG9rZW4udG9rZW5UeXBlLlBVU0hfTU9ERSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgdHJ5IHRvIHBvcCB0aGUgbGFzdCBtb2RlIHRoZXJlIGxleGVyIHdpbGwgbm8gbG9uZ2VyIGhhdmUgQU5ZIG1vZGUuXG4gICAgICAgICAgICAgICAgLy8gdGh1cyB0aGUgcG9wIGlzIGlnbm9yZWQsIGFuIGVycm9yIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlIGxleGVyIHdpbGwgY29udGludWUgcGFyc2luZyBpbiB0aGUgcHJldmlvdXMgbW9kZS5cbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZShwb3BUb2tlbik7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHBvcFRva2VuLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBsaW5lOiBwb3BUb2tlbi5zdGFydExpbmUsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogcG9wVG9rZW4uc3RhcnRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogcG9wVG9rZW4uaW1hZ2UubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3TW9kZSA9IGxhc3QobW9kZVN0YWNrKTtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuSWR4VG9Db25maWcgPSB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tuZXdNb2RlXTtcbiAgICAgICAgICAgICAgICBjdXJyQ2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tuZXdNb2RlXTtcbiAgICAgICAgICAgICAgICBjdXJyTW9kZVBhdHRlcm5zTGVuZ3RoID0gcGF0dGVybklkeFRvQ29uZmlnLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlQ2FuQmVPcHRpbWl6ZWQgPSB0aGlzLmNhbk1vZGVCZU9wdGltaXplZFtuZXdNb2RlXSAmJiB0aGlzLmNvbmZpZy5zYWZlTW9kZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJDaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnICYmIG1vZGVDYW5CZU9wdGltaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQb3NzaWJsZVBhdHRlcm5zID0gZ2V0UG9zc2libGVQYXR0ZXJuc09wdGltaXplZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBvc3NpYmxlUGF0dGVybnMgPSBnZXRQb3NzaWJsZVBhdHRlcm5zU2xvdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHB1c2hfbW9kZShuZXdNb2RlKSB7XG4gICAgICAgICAgICBtb2RlU3RhY2sucHVzaChuZXdNb2RlKTtcbiAgICAgICAgICAgIGN1cnJDaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnID1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbbmV3TW9kZV07XG4gICAgICAgICAgICBwYXR0ZXJuSWR4VG9Db25maWcgPSB0aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tuZXdNb2RlXTtcbiAgICAgICAgICAgIGN1cnJNb2RlUGF0dGVybnNMZW5ndGggPSBwYXR0ZXJuSWR4VG9Db25maWcubGVuZ3RoO1xuICAgICAgICAgICAgY3Vyck1vZGVQYXR0ZXJuc0xlbmd0aCA9IHBhdHRlcm5JZHhUb0NvbmZpZy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtb2RlQ2FuQmVPcHRpbWl6ZWQgPSB0aGlzLmNhbk1vZGVCZU9wdGltaXplZFtuZXdNb2RlXSAmJiB0aGlzLmNvbmZpZy5zYWZlTW9kZSA9PT0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoY3VyckNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcgJiYgbW9kZUNhbkJlT3B0aW1pemVkKSB7XG4gICAgICAgICAgICAgICAgZ2V0UG9zc2libGVQYXR0ZXJucyA9IGdldFBvc3NpYmxlUGF0dGVybnNPcHRpbWl6ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQb3NzaWJsZVBhdHRlcm5zID0gZ2V0UG9zc2libGVQYXR0ZXJuc1Nsb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBwYXR0ZXJuIHNlZW1zIHRvIGF2b2lkIGEgVjggZGUtb3B0aW1pemF0aW9uLCBhbHRob3VnaCB0aGF0IGRlLW9wdGltaXphdGlvbiBkb2VzIG5vdFxuICAgICAgICAvLyBzZWVtIHRvIG1hdHRlciBwZXJmb3JtYW5jZSB3aXNlLlxuICAgICAgICBwdXNoX21vZGUuY2FsbCh0aGlzLCBpbml0aWFsTW9kZSk7XG4gICAgICAgIGxldCBjdXJyQ29uZmlnO1xuICAgICAgICBjb25zdCByZWNvdmVyeUVuYWJsZWQgPSB0aGlzLmNvbmZpZy5yZWNvdmVyeUVuYWJsZWQ7XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBvcmdMZW5ndGgpIHtcbiAgICAgICAgICAgIG1hdGNoZWRJbWFnZSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBuZXh0Q2hhckNvZGUgPSBvcmdUZXh0LmNoYXJDb2RlQXQob2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlblBhdHRlcm5JZHhUb0NvbmZpZyA9IGdldFBvc3NpYmxlUGF0dGVybnMobmV4dENoYXJDb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlblBhdHRlcm5zTGVuZ3RoID0gY2hvc2VuUGF0dGVybklkeFRvQ29uZmlnLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaG9zZW5QYXR0ZXJuc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY3VyckNvbmZpZyA9IGNob3NlblBhdHRlcm5JZHhUb0NvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGF0dGVybiA9IGN1cnJDb25maWcucGF0dGVybjtcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBpbi1saW5lZCBiZWNhdXNlID4gNjAwIGNoYXJzIHdvbid0IGJlIGluLWxpbmVkIGluIFY4XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlQ2hhckNvZGUgPSBjdXJyQ29uZmlnLnNob3J0O1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVDaGFyQ29kZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRDaGFyQ29kZSA9PT0gc2luZ2xlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSW1hZ2UgPSBjdXJyUGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ29uZmlnLmlzQ3VzdG9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY3VyclBhdHRlcm4uZXhlYyhvcmdUZXh0LCBvZmZzZXQsIG1hdGNoZWRUb2tlbnMsIGdyb3Vwcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEltYWdlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gucGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IG1hdGNoLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSW1hZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhc3RJbmRleChjdXJyUGF0dGVybiwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEltYWdlID0gdGhpcy5tYXRjaChjdXJyUGF0dGVybiwgdGV4dCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRJbWFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGlzIHBhdHRlcm4gbWF0Y2hlZCB3ZSBtdXN0IHRyeSBhIGFub3RoZXIgbG9uZ2VyIGFsdGVybmF0aXZlLlxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhbiBiZSB1c2VkIHRvIHByaW9yaXRpemUga2V5d29yZHMgb3ZlciBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICAgICAgICBsb25nZXJBbHQgPSBjdXJyQ29uZmlnLmxvbmdlckFsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvbmdlckFsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBtaWNybyBvcHRpbWl6ZSwgYXZvaWQgZXh0cmEgcHJvcCBhY2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IHNhdmluZy9saW5raW5nIGxvbmdlckFsdCBvbiB0aGUgb3JpZ2luYWwgY29uZmlnP1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9uZ2VyQWx0TGVuZ3RoID0gbG9uZ2VyQWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBsb25nZXJBbHRMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdENvbmZpZyA9IHBhdHRlcm5JZHhUb0NvbmZpZ1tsb25nZXJBbHRba11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdlckFsdFBhdHRlcm4gPSBsb25nZXJBbHRDb25maWcucGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRQYXlsb2FkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5nbGUgQ2hhciBjYW4gbmV2ZXIgYmUgYSBsb25nZXIgYWx0IHNvIG5vIG5lZWQgdG8gdGVzdCBpdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBpbi1saW5lZCBiZWNhdXNlID4gNjAwIGNoYXJzIHdvbid0IGJlIGluLWxpbmVkIGluIFY4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvbmdlckFsdENvbmZpZy5pc0N1c3RvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGxvbmdlckFsdFBhdHRlcm4uZXhlYyhvcmdUZXh0LCBvZmZzZXQsIG1hdGNoZWRUb2tlbnMsIGdyb3Vwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hBbHRJbWFnZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLnBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdFBheWxvYWQgPSBtYXRjaC5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hBbHRJbWFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFzdEluZGV4KGxvbmdlckFsdFBhdHRlcm4sIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoQWx0SW1hZ2UgPSB0aGlzLm1hdGNoKGxvbmdlckFsdFBhdHRlcm4sIHRleHQsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaEFsdEltYWdlICYmIG1hdGNoQWx0SW1hZ2UubGVuZ3RoID4gbWF0Y2hlZEltYWdlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSW1hZ2UgPSBtYXRjaEFsdEltYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gYWx0UGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyckNvbmZpZyA9IGxvbmdlckFsdENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhpdCB0aGUgbG9vcCBlYXJseSBhZnRlciBtYXRjaGluZyBvbmUgb2YgdGhlIGxvbmdlciBhbHRlcm5hdGl2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IG1hdGNoZWQgYWx0ZXJuYXRpdmUgdGFrZXMgcHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bCBtYXRjaFxuICAgICAgICAgICAgaWYgKG1hdGNoZWRJbWFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGltYWdlTGVuZ3RoID0gbWF0Y2hlZEltYWdlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBncm91cCA9IGN1cnJDb25maWcuZ3JvdXA7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rVHlwZSA9IGN1cnJDb25maWcudG9rZW5UeXBlSWR4O1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBcIm9mZnNldCArIGltYWdlTGVuZ3RoXCIgYW5kIHRoZSBuZXcgY29sdW1uIG1heSBiZSBjb21wdXRlZCB0d2ljZSBpbiBjYXNlIG9mIFwiZnVsbFwiIGxvY2F0aW9uIGluZm9ybWF0aW9uIGluc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVGdWxsVG9rZW4gbWV0aG9kXG4gICAgICAgICAgICAgICAgICAgIG5ld1Rva2VuID0gdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlKG1hdGNoZWRJbWFnZSwgb2Zmc2V0LCB0b2tUeXBlLCBjdXJyQ29uZmlnLnRva2VuVHlwZSwgbGluZSwgY29sdW1uLCBpbWFnZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGF5bG9hZChuZXdUb2tlbiwgcGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IG9wdGltaXplIE5PT1AgaW4gY2FzZSB0aGVyZSBhcmUgbm8gc3BlY2lhbCBncm91cHM/XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRUb2tlbnNJbmRleCA9IHRoaXMuYWRkVG9rZW4obWF0Y2hlZFRva2VucywgbWF0Y2hlZFRva2Vuc0luZGV4LCBuZXdUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbZ3JvdXBdLnB1c2gobmV3VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLmNob3BJbnB1dCh0ZXh0LCBpbWFnZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgaW1hZ2VMZW5ndGg7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogd2l0aCBuZXdsaW5lcyB0aGUgY29sdW1uIG1heSBiZSBhc3NpZ25lZCB0d2ljZVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29tcHV0ZU5ld0NvbHVtbihjb2x1bW4sIGltYWdlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tMaW5lcyA9PT0gdHJ1ZSAmJiBjdXJyQ29uZmlnLmNhbkxpbmVUZXJtaW5hdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1PZkxUc0luTWF0Y2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmRUZXJtaW5hdG9yO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdExURW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICBsaW5lVGVybWluYXRvclBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRUZXJtaW5hdG9yID0gbGluZVRlcm1pbmF0b3JQYXR0ZXJuLnRlc3QobWF0Y2hlZEltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFRlcm1pbmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TFRFbmRPZmZzZXQgPSBsaW5lVGVybWluYXRvclBhdHRlcm4ubGFzdEluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZkxUc0luTWF0Y2grKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoZm91bmRUZXJtaW5hdG9yID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bU9mTFRzSW5NYXRjaCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBudW1PZkxUc0luTWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBpbWFnZUxlbmd0aCAtIGxhc3RMVEVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24obmV3VG9rZW4sIGdyb3VwLCBsYXN0TFRFbmRPZmZzZXQsIG51bU9mTFRzSW5NYXRjaCwgbGluZSwgY29sdW1uLCBpbWFnZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBOT09QIGlmIG5vIG1vZGVzIHByZXNlbnRcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1vZGVzKGN1cnJDb25maWcsIHBvcF9tb2RlLCBwdXNoX21vZGUsIG5ld1Rva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVycm9yIHJlY292ZXJ5LCBkcm9wIGNoYXJhY3RlcnMgdW50aWwgd2UgaWRlbnRpZnkgYSB2YWxpZCB0b2tlbidzIHN0YXJ0IHBvaW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JTdGFydE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxpbmUgPSBsaW5lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgIGxldCBmb3VuZFJlc3luY1BvaW50ID0gcmVjb3ZlcnlFbmFibGVkID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZm91bmRSZXN5bmNQb2ludCA9PT0gZmFsc2UgJiYgb2Zmc2V0IDwgb3JnTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5IEZ1bmMgKHdoZW4gc3RpY2t5IGZsYWcgaXMgZW5hYmxlZClcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMuY2hvcElucHV0KHRleHQsIDEpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1cnJNb2RlUGF0dGVybnNMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyckNvbmZpZyA9IHBhdHRlcm5JZHhUb0NvbmZpZ1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQYXR0ZXJuID0gY3VyckNvbmZpZy5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgaW4tbGluZWQgYmVjYXVzZSA+IDYwMCBjaGFycyB3b24ndCBiZSBpbi1saW5lZCBpbiBWOFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlQ2hhckNvZGUgPSBjdXJyQ29uZmlnLnNob3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUNoYXJDb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmdUZXh0LmNoYXJDb2RlQXQob2Zmc2V0KSA9PT0gc2luZ2xlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRSZXN5bmNQb2ludCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNvbmZpZy5pc0N1c3RvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUmVzeW5jUG9pbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyUGF0dGVybi5leGVjKG9yZ1RleHQsIG9mZnNldCwgbWF0Y2hlZFRva2VucywgZ3JvdXBzKSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGFzdEluZGV4KGN1cnJQYXR0ZXJuLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUmVzeW5jUG9pbnQgPSBjdXJyUGF0dGVybi5leGVjKHRleHQpICE9PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kUmVzeW5jUG9pbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlcnJMZW5ndGggPSBvZmZzZXQgLSBlcnJvclN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29tcHV0ZU5ld0NvbHVtbihjb2x1bW4sIGVyckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB3ZSBlaXRoZXIgcmUtc3luY2VkIG9yIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdGV4dFxuICAgICAgICAgICAgICAgIG1zZyA9IHRoaXMuY29uZmlnLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKG9yZ1RleHQsIGVycm9yU3RhcnRPZmZzZXQsIGVyckxlbmd0aCwgZXJyb3JMaW5lLCBlcnJvckNvbHVtbik7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGVycm9yU3RhcnRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IGVycm9yTGluZSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlcnJvckNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBlcnJMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnlFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UgZG8gaGF2ZSBjdXN0b20gcGF0dGVybnMgd2hpY2ggcHVzaCBkaXJlY3RseSBpbnRvIHRoZVxuICAgICAgICAvLyBUT0RPOiBjdXN0b20gdG9rZW5zIHNob3VsZCBub3QgcHVzaCBkaXJlY3RseT8/XG4gICAgICAgIGlmICghdGhpcy5oYXNDdXN0b20pIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGd1ZXNzZWQgYSB0b28gbGFyZ2Ugc2l6ZSBmb3IgdGhlIHRva2VucyBhcnJheSB0aGlzIHdpbGwgc2hyaW5rIGl0IHRvIHRoZSByaWdodCBzaXplLlxuICAgICAgICAgICAgbWF0Y2hlZFRva2Vucy5sZW5ndGggPSBtYXRjaGVkVG9rZW5zSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRva2VuczogbWF0Y2hlZFRva2VucyxcbiAgICAgICAgICAgIGdyb3VwczogZ3JvdXBzLFxuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhbmRsZU1vZGVzKGNvbmZpZywgcG9wX21vZGUsIHB1c2hfbW9kZSwgbmV3VG9rZW4pIHtcbiAgICAgICAgaWYgKGNvbmZpZy5wb3AgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gc2F2ZSB0aGUgUFVTSF9NT0RFIHByb3BlcnR5IGFzIGlmIHRoZSBtb2RlIGlzIHBvcHBlZFxuICAgICAgICAgICAgLy8gcGF0dGVybklkeFRvUG9wTW9kZSBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBtb2RlIGFmdGVyIHBvcHBpbmcgdGhlIHN0YWNrXG4gICAgICAgICAgICBjb25zdCBwdXNoTW9kZSA9IGNvbmZpZy5wdXNoO1xuICAgICAgICAgICAgcG9wX21vZGUobmV3VG9rZW4pO1xuICAgICAgICAgICAgaWYgKHB1c2hNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwdXNoX21vZGUuY2FsbCh0aGlzLCBwdXNoTW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnLnB1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHVzaF9tb2RlLmNhbGwodGhpcywgY29uZmlnLnB1c2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNob3BJbnB1dCh0ZXh0LCBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKGxlbmd0aCk7XG4gICAgfVxuICAgIHVwZGF0ZUxhc3RJbmRleChyZWdFeHAsIG5ld0xhc3RJbmRleCkge1xuICAgICAgICByZWdFeHAubGFzdEluZGV4ID0gbmV3TGFzdEluZGV4O1xuICAgIH1cbiAgICAvLyBUT0RPOiBkZWNyZWFzZSB0aGlzIHVuZGVyIDYwMCBjaGFyYWN0ZXJzPyBpbnNwZWN0IHN0cmlwcGluZyBjb21tZW50cyBvcHRpb24gaW4gVFNDIGNvbXBpbGVyXG4gICAgdXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24obmV3VG9rZW4sIGdyb3VwLCBsYXN0TFRJZHgsIG51bU9mTFRzSW5NYXRjaCwgbGluZSwgY29sdW1uLCBpbWFnZUxlbmd0aCkge1xuICAgICAgICBsZXQgbGFzdENoYXJJc0xULCBmaXhGb3JFbmRpbmdJbkxUO1xuICAgICAgICBpZiAoZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gYSBub25lIHNraXBwZWQgbXVsdGkgbGluZSBUb2tlbiwgbmVlZCB0byB1cGRhdGUgZW5kTGluZS9lbmRDb2x1bW5cbiAgICAgICAgICAgIGxhc3RDaGFySXNMVCA9IGxhc3RMVElkeCA9PT0gaW1hZ2VMZW5ndGggLSAxO1xuICAgICAgICAgICAgZml4Rm9yRW5kaW5nSW5MVCA9IGxhc3RDaGFySXNMVCA/IC0xIDogMDtcbiAgICAgICAgICAgIGlmICghKG51bU9mTFRzSW5NYXRjaCA9PT0gMSAmJiBsYXN0Q2hhcklzTFQgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgYSB0b2tlbiBlbmRzIGluIGEgTFQgdGhhdCBsYXN0IExUIG9ubHkgYWZmZWN0cyB0aGUgbGluZSBudW1iZXJpbmcgb2YgZm9sbG93aW5nIFRva2Vuc1xuICAgICAgICAgICAgICAgIG5ld1Rva2VuLmVuZExpbmUgPSBsaW5lICsgZml4Rm9yRW5kaW5nSW5MVDtcbiAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCBMVCBpbiBhIHRva2VuIGRvZXMgbm90IGFmZmVjdCB0aGUgZW5kQ29sdW1uIGVpdGhlciBhcyB0aGUgW2NvbHVtblN0YXJ0IC4uLiBjb2x1bW5FbmQpXG4gICAgICAgICAgICAgICAgLy8gaW5jbHVzaXZlIHRvIGV4Y2x1c2l2ZSByYW5nZS5cbiAgICAgICAgICAgICAgICBuZXdUb2tlbi5lbmRDb2x1bW4gPSBjb2x1bW4gLSAxICsgLWZpeEZvckVuZGluZ0luTFQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIHNpbmdsZSBMVCBpbiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSB0b2tlbiwgbm8gbmVlZCB0byBtb2RpZnkgdGhlIGVuZExpbmUvRW5kQ29sdW1uXG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcHV0ZU5ld0NvbHVtbihvbGRDb2x1bW4sIGltYWdlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvbGRDb2x1bW4gKyBpbWFnZUxlbmd0aDtcbiAgICB9XG4gICAgY3JlYXRlT2Zmc2V0T25seVRva2VuKGltYWdlLCBzdGFydE9mZnNldCwgdG9rZW5UeXBlSWR4LCB0b2tlblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICB0b2tlblR5cGVJZHgsXG4gICAgICAgICAgICB0b2tlblR5cGUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNyZWF0ZVN0YXJ0T25seVRva2VuKGltYWdlLCBzdGFydE9mZnNldCwgdG9rZW5UeXBlSWR4LCB0b2tlblR5cGUsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydENvbHVtbixcbiAgICAgICAgICAgIHRva2VuVHlwZUlkeCxcbiAgICAgICAgICAgIHRva2VuVHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY3JlYXRlRnVsbFRva2VuKGltYWdlLCBzdGFydE9mZnNldCwgdG9rZW5UeXBlSWR4LCB0b2tlblR5cGUsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGltYWdlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbWFnZSxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBzdGFydE9mZnNldCArIGltYWdlTGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHN0YXJ0TGluZSxcbiAgICAgICAgICAgIGVuZExpbmU6IHN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICAgICAgZW5kQ29sdW1uOiBzdGFydENvbHVtbiArIGltYWdlTGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHRva2VuVHlwZUlkeCxcbiAgICAgICAgICAgIHRva2VuVHlwZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYWRkVG9rZW5Vc2luZ1B1c2godG9rZW5WZWN0b3IsIGluZGV4LCB0b2tlblRvQWRkKSB7XG4gICAgICAgIHRva2VuVmVjdG9yLnB1c2godG9rZW5Ub0FkZCk7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcyh0b2tlblZlY3RvciwgaW5kZXgsIHRva2VuVG9BZGQpIHtcbiAgICAgICAgdG9rZW5WZWN0b3JbaW5kZXhdID0gdG9rZW5Ub0FkZDtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICBoYW5kbGVQYXlsb2FkTm9DdXN0b20odG9rZW4sIHBheWxvYWQpIHsgfVxuICAgIGhhbmRsZVBheWxvYWRXaXRoQ3VzdG9tKHRva2VuLCBwYXlsb2FkKSB7XG4gICAgICAgIGlmIChwYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0b2tlbi5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaFdpdGhUZXN0KHBhdHRlcm4sIHRleHQsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHBhdHRlcm4udGVzdCh0ZXh0KTtcbiAgICAgICAgaWYgKGZvdW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBwYXR0ZXJuLmxhc3RJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG1hdGNoV2l0aEV4ZWMocGF0dGVybiwgdGV4dCkge1xuICAgICAgICBjb25zdCByZWdFeHBBcnJheSA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHJlZ0V4cEFycmF5ICE9PSBudWxsID8gcmVnRXhwQXJyYXlbMF0gOiBudWxsO1xuICAgIH1cbn1cbkxleGVyLlNLSVBQRUQgPSBcIlRoaXMgbWFya3MgYSBza2lwcGVkIFRva2VuIHBhdHRlcm4sIHRoaXMgbWVhbnMgZWFjaCB0b2tlbiBpZGVudGlmaWVkIGJ5IGl0IHdpbGxcIiArXG4gICAgXCJiZSBjb25zdW1lZCBhbmQgdGhlbiB0aHJvd24gaW50byBvYmxpdmlvbiwgdGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB0byBjb21wbGV0ZWx5IGlnbm9yZSB3aGl0ZXNwYWNlLlwiO1xuTGV4ZXIuTkEgPSAvTk9UX0FQUExJQ0FCTEUvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXJfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaGFzLCBpc1N0cmluZywgaXNVbmRlZmluZWQgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBMZXhlciB9IGZyb20gXCIuL2xleGVyX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgYXVnbWVudFRva2VuVHlwZXMsIHRva2VuU3RydWN0dXJlZE1hdGNoZXIgfSBmcm9tIFwiLi90b2tlbnMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB0b2tlbkxhYmVsKHRva1R5cGUpIHtcbiAgICBpZiAoaGFzVG9rZW5MYWJlbCh0b2tUeXBlKSkge1xuICAgICAgICByZXR1cm4gdG9rVHlwZS5MQUJFTDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB0b2tUeXBlLm5hbWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuTmFtZSh0b2tUeXBlKSB7XG4gICAgcmV0dXJuIHRva1R5cGUubmFtZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNUb2tlbkxhYmVsKG9iaikge1xuICAgIHJldHVybiBpc1N0cmluZyhvYmouTEFCRUwpICYmIG9iai5MQUJFTCAhPT0gXCJcIjtcbn1cbmNvbnN0IFBBUkVOVCA9IFwicGFyZW50XCI7XG5jb25zdCBDQVRFR09SSUVTID0gXCJjYXRlZ29yaWVzXCI7XG5jb25zdCBMQUJFTCA9IFwibGFiZWxcIjtcbmNvbnN0IEdST1VQID0gXCJncm91cFwiO1xuY29uc3QgUFVTSF9NT0RFID0gXCJwdXNoX21vZGVcIjtcbmNvbnN0IFBPUF9NT0RFID0gXCJwb3BfbW9kZVwiO1xuY29uc3QgTE9OR0VSX0FMVCA9IFwibG9uZ2VyX2FsdFwiO1xuY29uc3QgTElORV9CUkVBS1MgPSBcImxpbmVfYnJlYWtzXCI7XG5jb25zdCBTVEFSVF9DSEFSU19ISU5UID0gXCJzdGFydF9jaGFyc19oaW50XCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW4oY29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRva2VuSW50ZXJuYWwoY29uZmlnKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRva2VuSW50ZXJuYWwoY29uZmlnKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IGNvbmZpZy5wYXR0ZXJuO1xuICAgIGNvbnN0IHRva2VuVHlwZSA9IHt9O1xuICAgIHRva2VuVHlwZS5uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChwYXR0ZXJuKSkge1xuICAgICAgICB0b2tlblR5cGUuUEFUVEVSTiA9IHBhdHRlcm47XG4gICAgfVxuICAgIGlmIChoYXMoY29uZmlnLCBQQVJFTlQpKSB7XG4gICAgICAgIHRocm93IChcIlRoZSBwYXJlbnQgcHJvcGVydHkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cXG5cIiArXG4gICAgICAgICAgICBcIlNlZTogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXMvNTY0I2lzc3VlY29tbWVudC0zNDkwNjIzNDYgZm9yIGRldGFpbHMuXCIpO1xuICAgIH1cbiAgICBpZiAoaGFzKGNvbmZpZywgQ0FURUdPUklFUykpIHtcbiAgICAgICAgLy8gY2FzdGluZyB0byBBTlkgYXMgdGhpcyB3aWxsIGJlIGZpeGVkIGluc2lkZSBgYXVnbWVudFRva2VuVHlwZXNgYFxuICAgICAgICB0b2tlblR5cGUuQ0FURUdPUklFUyA9IGNvbmZpZ1tDQVRFR09SSUVTXTtcbiAgICB9XG4gICAgYXVnbWVudFRva2VuVHlwZXMoW3Rva2VuVHlwZV0pO1xuICAgIGlmIChoYXMoY29uZmlnLCBMQUJFTCkpIHtcbiAgICAgICAgdG9rZW5UeXBlLkxBQkVMID0gY29uZmlnW0xBQkVMXTtcbiAgICB9XG4gICAgaWYgKGhhcyhjb25maWcsIEdST1VQKSkge1xuICAgICAgICB0b2tlblR5cGUuR1JPVVAgPSBjb25maWdbR1JPVVBdO1xuICAgIH1cbiAgICBpZiAoaGFzKGNvbmZpZywgUE9QX01PREUpKSB7XG4gICAgICAgIHRva2VuVHlwZS5QT1BfTU9ERSA9IGNvbmZpZ1tQT1BfTU9ERV07XG4gICAgfVxuICAgIGlmIChoYXMoY29uZmlnLCBQVVNIX01PREUpKSB7XG4gICAgICAgIHRva2VuVHlwZS5QVVNIX01PREUgPSBjb25maWdbUFVTSF9NT0RFXTtcbiAgICB9XG4gICAgaWYgKGhhcyhjb25maWcsIExPTkdFUl9BTFQpKSB7XG4gICAgICAgIHRva2VuVHlwZS5MT05HRVJfQUxUID0gY29uZmlnW0xPTkdFUl9BTFRdO1xuICAgIH1cbiAgICBpZiAoaGFzKGNvbmZpZywgTElORV9CUkVBS1MpKSB7XG4gICAgICAgIHRva2VuVHlwZS5MSU5FX0JSRUFLUyA9IGNvbmZpZ1tMSU5FX0JSRUFLU107XG4gICAgfVxuICAgIGlmIChoYXMoY29uZmlnLCBTVEFSVF9DSEFSU19ISU5UKSkge1xuICAgICAgICB0b2tlblR5cGUuU1RBUlRfQ0hBUlNfSElOVCA9IGNvbmZpZ1tTVEFSVF9DSEFSU19ISU5UXTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuVHlwZTtcbn1cbmV4cG9ydCBjb25zdCBFT0YgPSBjcmVhdGVUb2tlbih7IG5hbWU6IFwiRU9GXCIsIHBhdHRlcm46IExleGVyLk5BIH0pO1xuYXVnbWVudFRva2VuVHlwZXMoW0VPRl0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuSW5zdGFuY2UodG9rVHlwZSwgaW1hZ2UsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHN0YXJ0TGluZSwgZW5kTGluZSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGltYWdlLFxuICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgZW5kT2Zmc2V0LFxuICAgICAgICBzdGFydExpbmUsXG4gICAgICAgIGVuZExpbmUsXG4gICAgICAgIHN0YXJ0Q29sdW1uLFxuICAgICAgICBlbmRDb2x1bW4sXG4gICAgICAgIHRva2VuVHlwZUlkeDogdG9rVHlwZS50b2tlblR5cGVJZHgsXG4gICAgICAgIHRva2VuVHlwZTogdG9rVHlwZSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuTWF0Y2hlcih0b2tlbiwgdG9rVHlwZSkge1xuICAgIHJldHVybiB0b2tlblN0cnVjdHVyZWRNYXRjaGVyKHRva2VuLCB0b2tUeXBlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2Vuc19wdWJsaWMuanMubWFwIiwKICAgICJpbXBvcnQgeyBoYXNUb2tlbkxhYmVsLCB0b2tlbkxhYmVsIH0gZnJvbSBcIi4uL3NjYW4vdG9rZW5zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgcmVkdWNlIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdGlvbkRzbE5hbWUsIE5vblRlcm1pbmFsLCBSdWxlLCBUZXJtaW5hbCwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2UoeyBleHBlY3RlZCwgYWN0dWFsLCBwcmV2aW91cywgcnVsZU5hbWUgfSkge1xuICAgICAgICBjb25zdCBoYXNMYWJlbCA9IGhhc1Rva2VuTGFiZWwoZXhwZWN0ZWQpO1xuICAgICAgICBjb25zdCBleHBlY3RlZE1zZyA9IGhhc0xhYmVsXG4gICAgICAgICAgICA/IGAtLT4gJHt0b2tlbkxhYmVsKGV4cGVjdGVkKX0gPC0tYFxuICAgICAgICAgICAgOiBgdG9rZW4gb2YgdHlwZSAtLT4gJHtleHBlY3RlZC5uYW1lfSA8LS1gO1xuICAgICAgICBjb25zdCBtc2cgPSBgRXhwZWN0aW5nICR7ZXhwZWN0ZWRNc2d9IGJ1dCBmb3VuZCAtLT4gJyR7YWN0dWFsLmltYWdlfScgPC0tYDtcbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9LFxuICAgIGJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHsgZmlyc3RSZWR1bmRhbnQsIHJ1bGVOYW1lIH0pIHtcbiAgICAgICAgcmV0dXJuIFwiUmVkdW5kYW50IGlucHV0LCBleHBlY3RpbmcgRU9GIGJ1dCBmb3VuZDogXCIgKyBmaXJzdFJlZHVuZGFudC5pbWFnZTtcbiAgICB9LFxuICAgIGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHsgZXhwZWN0ZWRQYXRoc1BlckFsdCwgYWN0dWFsLCBwcmV2aW91cywgY3VzdG9tVXNlckRlc2NyaXB0aW9uLCBydWxlTmFtZSwgfSkge1xuICAgICAgICBjb25zdCBlcnJQcmVmaXggPSBcIkV4cGVjdGluZzogXCI7XG4gICAgICAgIC8vIFRPRE86IGlzc3VlOiBObyBWaWFibGUgQWx0ZXJuYXRpdmUgRXJyb3IgbWF5IGhhdmUgaW5jb21wbGV0ZSBkZXRhaWxzLiAjNTAyXG4gICAgICAgIGNvbnN0IGFjdHVhbFRleHQgPSBmaXJzdChhY3R1YWwpLmltYWdlO1xuICAgICAgICBjb25zdCBlcnJTdWZmaXggPSBcIlxcbmJ1dCBmb3VuZDogJ1wiICsgYWN0dWFsVGV4dCArIFwiJ1wiO1xuICAgICAgICBpZiAoY3VzdG9tVXNlckRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyUHJlZml4ICsgY3VzdG9tVXNlckRlc2NyaXB0aW9uICsgZXJyU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWxsTG9va0FoZWFkUGF0aHMgPSByZWR1Y2UoZXhwZWN0ZWRQYXRoc1BlckFsdCwgKHJlc3VsdCwgY3VyckFsdFBhdGhzKSA9PiByZXN1bHQuY29uY2F0KGN1cnJBbHRQYXRocyksIFtdKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWYWxpZFRva2VuU2VxdWVuY2VzID0gbWFwKGFsbExvb2tBaGVhZFBhdGhzLCAoY3VyclBhdGgpID0+IGBbJHttYXAoY3VyclBhdGgsIChjdXJyVG9rZW5UeXBlKSA9PiB0b2tlbkxhYmVsKGN1cnJUb2tlblR5cGUpKS5qb2luKFwiLCBcIil9XWApO1xuICAgICAgICAgICAgY29uc3QgbmV4dFZhbGlkU2VxdWVuY2VJdGVtcyA9IG1hcChuZXh0VmFsaWRUb2tlblNlcXVlbmNlcywgKGl0ZW1Nc2csIGlkeCkgPT4gYCAgJHtpZHggKyAxfS4gJHtpdGVtTXNnfWApO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZERlc2NyaXB0aW9uID0gYG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6XFxuJHtuZXh0VmFsaWRTZXF1ZW5jZUl0ZW1zLmpvaW4oXCJcXG5cIil9YDtcbiAgICAgICAgICAgIHJldHVybiBlcnJQcmVmaXggKyBjYWxjdWxhdGVkRGVzY3JpcHRpb24gKyBlcnJTdWZmaXg7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7IGV4cGVjdGVkSXRlcmF0aW9uUGF0aHMsIGFjdHVhbCwgY3VzdG9tVXNlckRlc2NyaXB0aW9uLCBydWxlTmFtZSwgfSkge1xuICAgICAgICBjb25zdCBlcnJQcmVmaXggPSBcIkV4cGVjdGluZzogXCI7XG4gICAgICAgIC8vIFRPRE86IGlzc3VlOiBObyBWaWFibGUgQWx0ZXJuYXRpdmUgRXJyb3IgbWF5IGhhdmUgaW5jb21wbGV0ZSBkZXRhaWxzLiAjNTAyXG4gICAgICAgIGNvbnN0IGFjdHVhbFRleHQgPSBmaXJzdChhY3R1YWwpLmltYWdlO1xuICAgICAgICBjb25zdCBlcnJTdWZmaXggPSBcIlxcbmJ1dCBmb3VuZDogJ1wiICsgYWN0dWFsVGV4dCArIFwiJ1wiO1xuICAgICAgICBpZiAoY3VzdG9tVXNlckRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyUHJlZml4ICsgY3VzdG9tVXNlckRlc2NyaXB0aW9uICsgZXJyU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dFZhbGlkVG9rZW5TZXF1ZW5jZXMgPSBtYXAoZXhwZWN0ZWRJdGVyYXRpb25QYXRocywgKGN1cnJQYXRoKSA9PiBgWyR7bWFwKGN1cnJQYXRoLCAoY3VyclRva2VuVHlwZSkgPT4gdG9rZW5MYWJlbChjdXJyVG9rZW5UeXBlKSkuam9pbihcIixcIil9XWApO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZERlc2NyaXB0aW9uID0gYGV4cGVjdGluZyBhdCBsZWFzdCBvbmUgaXRlcmF0aW9uIHdoaWNoIHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6OlxcbiAgYCArXG4gICAgICAgICAgICAgICAgYDwke25leHRWYWxpZFRva2VuU2VxdWVuY2VzLmpvaW4oXCIgLFwiKX0+YDtcbiAgICAgICAgICAgIHJldHVybiBlcnJQcmVmaXggKyBjYWxjdWxhdGVkRGVzY3JpcHRpb24gKyBlcnJTdWZmaXg7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbk9iamVjdC5mcmVlemUoZGVmYXVsdFBhcnNlckVycm9yUHJvdmlkZXIpO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRHcmFtbWFyUmVzb2x2ZXJFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodG9wTGV2ZWxSdWxlLCB1bmRlZmluZWRSdWxlKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IFwiSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPlwiICtcbiAgICAgICAgICAgIHVuZGVmaW5lZFJ1bGUubm9uVGVybWluYWxOYW1lICtcbiAgICAgICAgICAgIFwiPC1cXG5cIiArXG4gICAgICAgICAgICBcImluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5cIiArXG4gICAgICAgICAgICB0b3BMZXZlbFJ1bGUubmFtZSArXG4gICAgICAgICAgICBcIjwtXCI7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyID0ge1xuICAgIGJ1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0b3BMZXZlbFJ1bGUsIGR1cGxpY2F0ZVByb2RzKSB7XG4gICAgICAgIGZ1bmN0aW9uIGdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50KHByb2QpIHtcbiAgICAgICAgICAgIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvZC50ZXJtaW5hbFR5cGUubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kLm5vblRlcm1pbmFsTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvcExldmVsTmFtZSA9IHRvcExldmVsUnVsZS5uYW1lO1xuICAgICAgICBjb25zdCBkdXBsaWNhdGVQcm9kID0gZmlyc3QoZHVwbGljYXRlUHJvZHMpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGR1cGxpY2F0ZVByb2QuaWR4O1xuICAgICAgICBjb25zdCBkc2xOYW1lID0gZ2V0UHJvZHVjdGlvbkRzbE5hbWUoZHVwbGljYXRlUHJvZCk7XG4gICAgICAgIGNvbnN0IGV4dHJhQXJndW1lbnQgPSBnZXRFeHRyYVByb2R1Y3Rpb25Bcmd1bWVudChkdXBsaWNhdGVQcm9kKTtcbiAgICAgICAgY29uc3QgaGFzRXhwbGljaXRJbmRleCA9IGluZGV4ID4gMDtcbiAgICAgICAgbGV0IG1zZyA9IGAtPiR7ZHNsTmFtZX0ke2hhc0V4cGxpY2l0SW5kZXggPyBpbmRleCA6IFwiXCJ9PC0gJHtleHRyYUFyZ3VtZW50ID8gYHdpdGggYXJndW1lbnQ6IC0+JHtleHRyYUFyZ3VtZW50fTwtYCA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlICgke2R1cGxpY2F0ZVByb2RzLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke3RvcExldmVsTmFtZX08LS4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgXG4gICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAvLyB3aGl0ZSBzcGFjZSB0cmltbWluZyB0aW1lISBiZXR0ZXIgdG8gdHJpbSBhZnRlcndhcmRzIGFzIGl0IGFsbG93cyB0byB1c2UgV0VMTCBmb3JtYXR0ZWQgbXVsdGkgbGluZSB0ZW1wbGF0ZSBzdHJpbmdzLi4uXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bIFxcdF0rL2csIFwiIFwiKTtcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcc1xccysvZywgXCJcXG5cIik7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgfSxcbiAgICBidWlsZE5hbWVzcGFjZUNvbmZsaWN0RXJyb3IocnVsZSkge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBgTmFtZXNwYWNlIGNvbmZsaWN0IGZvdW5kIGluIGdyYW1tYXIuXFxuYCArXG4gICAgICAgICAgICBgVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHtydWxlLm5hbWV9Pi5cXG5gICtcbiAgICAgICAgICAgIGBUbyByZXNvbHZlIHRoaXMgbWFrZSBzdXJlIGVhY2ggVGVybWluYWwgYW5kIE5vbi1UZXJtaW5hbCBuYW1lcyBhcmUgdW5pcXVlXFxuYCArXG4gICAgICAgICAgICBgVGhpcyBpcyBlYXN5IHRvIGFjY29tcGxpc2ggYnkgdXNpbmcgdGhlIGNvbnZlbnRpb24gdGhhdCBUZXJtaW5hbCBuYW1lcyBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXJcXG5gICtcbiAgICAgICAgICAgIGBhbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gO1xuICAgICAgICByZXR1cm4gZXJyTXNnO1xuICAgIH0sXG4gICAgYnVpbGRBbHRlcm5hdGlvblByZWZpeEFtYmlndWl0eUVycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGF0aE1zZyA9IG1hcChvcHRpb25zLnByZWZpeFBhdGgsIChjdXJyVG9rKSA9PiB0b2tlbkxhYmVsKGN1cnJUb2spKS5qb2luKFwiLCBcIik7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2UgPSBvcHRpb25zLmFsdGVybmF0aW9uLmlkeCA9PT0gMCA/IFwiXCIgOiBvcHRpb25zLmFsdGVybmF0aW9uLmlkeDtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gYEFtYmlndW91cyBhbHRlcm5hdGl2ZXM6IDwke29wdGlvbnMuYW1iaWd1aXR5SW5kaWNlcy5qb2luKFwiICxcIil9PiBkdWUgdG8gY29tbW9uIGxvb2thaGVhZCBwcmVmaXhcXG5gICtcbiAgICAgICAgICAgIGBpbiA8T1Ike29jY3VycmVuY2V9PiBpbnNpZGUgPCR7b3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsXFxuYCArXG4gICAgICAgICAgICBgPCR7cGF0aE1zZ30+IG1heSBhcHBlYXJzIGFzIGEgcHJlZml4IHBhdGggaW4gYWxsIHRoZXNlIGFsdGVybmF0aXZlcy5cXG5gICtcbiAgICAgICAgICAgIGBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0NPTU1PTl9QUkVGSVhcXG5gICtcbiAgICAgICAgICAgIGBGb3IgRnVydGhlciBkZXRhaWxzLmA7XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfSxcbiAgICBidWlsZEFsdGVybmF0aW9uQW1iaWd1aXR5RXJyb3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYXRoTXNnID0gbWFwKG9wdGlvbnMucHJlZml4UGF0aCwgKGN1cnJ0b2spID0+IHRva2VuTGFiZWwoY3VycnRvaykpLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc3Qgb2NjdXJyZW5jZSA9IG9wdGlvbnMuYWx0ZXJuYXRpb24uaWR4ID09PSAwID8gXCJcIiA6IG9wdGlvbnMuYWx0ZXJuYXRpb24uaWR4O1xuICAgICAgICBsZXQgY3Vyck1lc3NhZ2UgPSBgQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7b3B0aW9ucy5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oXCIgLFwiKX0+IGluIDxPUiR7b2NjdXJyZW5jZX0+YCArXG4gICAgICAgICAgICBgIGluc2lkZSA8JHtvcHRpb25zLnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZSxcXG5gICtcbiAgICAgICAgICAgIGA8JHtwYXRoTXNnfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLlxcbmA7XG4gICAgICAgIGN1cnJNZXNzYWdlID1cbiAgICAgICAgICAgIGN1cnJNZXNzYWdlICtcbiAgICAgICAgICAgICAgICBgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTXFxuYCArXG4gICAgICAgICAgICAgICAgYEZvciBGdXJ0aGVyIGRldGFpbHMuYDtcbiAgICAgICAgcmV0dXJuIGN1cnJNZXNzYWdlO1xuICAgIH0sXG4gICAgYnVpbGRFbXB0eVJlcGV0aXRpb25FcnJvcihvcHRpb25zKSB7XG4gICAgICAgIGxldCBkc2xOYW1lID0gZ2V0UHJvZHVjdGlvbkRzbE5hbWUob3B0aW9ucy5yZXBldGl0aW9uKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVwZXRpdGlvbi5pZHggIT09IDApIHtcbiAgICAgICAgICAgIGRzbE5hbWUgKz0gb3B0aW9ucy5yZXBldGl0aW9uLmlkeDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJNc2cgPSBgVGhlIHJlcGV0aXRpb24gPCR7ZHNsTmFtZX0+IHdpdGhpbiBSdWxlIDwke29wdGlvbnMudG9wTGV2ZWxSdWxlLm5hbWV9PiBjYW4gbmV2ZXIgY29uc3VtZSBhbnkgdG9rZW5zLlxcbmAgK1xuICAgICAgICAgICAgYFRoaXMgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLmA7XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfSxcbiAgICAvLyBUT0RPOiByZW1vdmUgLSBgZXJyb3JzX3B1YmxpY2AgZnJvbSBueWMuY29uZmlnLmpzIGV4Y2x1ZGVcbiAgICAvLyAgICAgICBvbmNlIHRoaXMgbWV0aG9kIGlzIGZ1bGx5IHJlbW92ZWQgZnJvbSB0aGlzIGZpbGVcbiAgICBidWlsZFRva2VuTmFtZUVycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIFwiZGVwcmVjYXRlZFwiO1xuICAgIH0sXG4gICAgYnVpbGRFbXB0eUFsdGVybmF0aW9uRXJyb3Iob3B0aW9ucykge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBgQW1iaWd1b3VzIGVtcHR5IGFsdGVybmF0aXZlOiA8JHtvcHRpb25zLmVtcHR5Q2hvaWNlSWR4ICsgMX0+YCArXG4gICAgICAgICAgICBgIGluIDxPUiR7b3B0aW9ucy5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7b3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuXFxuYCArXG4gICAgICAgICAgICBgT25seSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBtYXkgYmUgYW4gZW1wdHkgYWx0ZXJuYXRpdmUuYDtcbiAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICB9LFxuICAgIGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gYEFuIEFsdGVybmF0aW9uIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyNTYgYWx0ZXJuYXRpdmVzOlxcbmAgK1xuICAgICAgICAgICAgYDxPUiR7b3B0aW9ucy5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7b3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuXFxuIGhhcyAke29wdGlvbnMuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGggKyAxfSBhbHRlcm5hdGl2ZXMuYDtcbiAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICB9LFxuICAgIGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBvcHRpb25zLnRvcExldmVsUnVsZS5uYW1lO1xuICAgICAgICBjb25zdCBwYXRoTmFtZXMgPSBtYXAob3B0aW9ucy5sZWZ0UmVjdXJzaW9uUGF0aCwgKGN1cnJSdWxlKSA9PiBjdXJyUnVsZS5uYW1lKTtcbiAgICAgICAgY29uc3QgbGVmdFJlY3Vyc2l2ZVBhdGggPSBgJHtydWxlTmFtZX0gLS0+ICR7cGF0aE5hbWVzXG4gICAgICAgICAgICAuY29uY2F0KFtydWxlTmFtZV0pXG4gICAgICAgICAgICAuam9pbihcIiAtLT4gXCIpfWA7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IGBMZWZ0IFJlY3Vyc2lvbiBmb3VuZCBpbiBncmFtbWFyLlxcbmAgK1xuICAgICAgICAgICAgYHJ1bGU6IDwke3J1bGVOYW1lfT4gY2FuIGJlIGludm9rZWQgZnJvbSBpdHNlbGYgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpXFxuYCArXG4gICAgICAgICAgICBgd2l0aG91dCBjb25zdW1pbmcgYW55IFRva2Vucy4gVGhlIGdyYW1tYXIgcGF0aCB0aGF0IGNhdXNlcyB0aGlzIGlzOiBcXG4gJHtsZWZ0UmVjdXJzaXZlUGF0aH1cXG5gICtcbiAgICAgICAgICAgIGAgVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uXFxuYCArXG4gICAgICAgICAgICBgc2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MTF9wYXJzZXIjTGVmdF9mYWN0b3JpbmcuYDtcbiAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICB9LFxuICAgIC8vIFRPRE86IHJlbW92ZSAtIGBlcnJvcnNfcHVibGljYCBmcm9tIG55Yy5jb25maWcuanMgZXhjbHVkZVxuICAgIC8vICAgICAgIG9uY2UgdGhpcyBtZXRob2QgaXMgZnVsbHkgcmVtb3ZlZCBmcm9tIHRoaXMgZmlsZVxuICAgIGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3Iob3B0aW9ucykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gXCJkZXByZWNhdGVkXCI7XG4gICAgfSxcbiAgICBidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3Iob3B0aW9ucykge1xuICAgICAgICBsZXQgcnVsZU5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zLnRvcExldmVsUnVsZSBpbnN0YW5jZW9mIFJ1bGUpIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gb3B0aW9ucy50b3BMZXZlbFJ1bGUubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lID0gb3B0aW9ucy50b3BMZXZlbFJ1bGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyTXNnID0gYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7cnVsZU5hbWV9PC0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBncmFtbWFyOiAtPiR7b3B0aW9ucy5ncmFtbWFyTmFtZX08LWA7XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnNfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSwgfSBmcm9tIFwiLi4vcGFyc2VyL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgZm9yRWFjaCwgdmFsdWVzIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgR0FzdFZpc2l0b3IgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHcmFtbWFyKHRvcExldmVscywgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCByZWZSZXNvbHZlciA9IG5ldyBHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yKHRvcExldmVscywgZXJyTXNnUHJvdmlkZXIpO1xuICAgIHJlZlJlc29sdmVyLnJlc29sdmVSZWZzKCk7XG4gICAgcmV0dXJuIHJlZlJlc29sdmVyLmVycm9ycztcbn1cbmV4cG9ydCBjbGFzcyBHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIGV4dGVuZHMgR0FzdFZpc2l0b3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWVUb1RvcFJ1bGUsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubmFtZVRvVG9wUnVsZSA9IG5hbWVUb1RvcFJ1bGU7XG4gICAgICAgIHRoaXMuZXJyTXNnUHJvdmlkZXIgPSBlcnJNc2dQcm92aWRlcjtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICB9XG4gICAgcmVzb2x2ZVJlZnMoKSB7XG4gICAgICAgIGZvckVhY2godmFsdWVzKHRoaXMubmFtZVRvVG9wUnVsZSksIChwcm9kKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJUb3BMZXZlbCA9IHByb2Q7XG4gICAgICAgICAgICBwcm9kLmFjY2VwdCh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZpc2l0Tm9uVGVybWluYWwobm9kZSkge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLm5hbWVUb1RvcFJ1bGVbbm9kZS5ub25UZXJtaW5hbE5hbWVdO1xuICAgICAgICBpZiAoIXJlZikge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5lcnJNc2dQcm92aWRlci5idWlsZFJ1bGVOb3RGb3VuZEVycm9yKHRoaXMuY3VyclRvcExldmVsLCBub2RlKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLlVOUkVTT0xWRURfU1VCUlVMRV9SRUYsXG4gICAgICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuY3VyclRvcExldmVsLm5hbWUsXG4gICAgICAgICAgICAgICAgdW5yZXNvbHZlZFJlZk5hbWU6IG5vZGUubm9uVGVybWluYWxOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlLnJlZmVyZW5jZWRSdWxlID0gcmVmO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBjbG9uZSwgZHJvcCwgZHJvcFJpZ2h0LCBmaXJzdCBhcyBfZmlyc3QsIGZvckVhY2gsIGlzRW1wdHksIGxhc3QsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi9maXJzdC5qc1wiO1xuaW1wb3J0IHsgUmVzdFdhbGtlciB9IGZyb20gXCIuL3Jlc3QuanNcIjtcbmltcG9ydCB7IEFsdGVybmF0aW9uLCBBbHRlcm5hdGl2ZSwgTm9uVGVybWluYWwsIE9wdGlvbiwgUmVwZXRpdGlvbiwgUmVwZXRpdGlvbk1hbmRhdG9yeSwgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IsIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLCBSdWxlLCBUZXJtaW5hbCwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0TmV4dFBvc3NpYmxlVG9rZW5zV2Fsa2VyIGV4dGVuZHMgUmVzdFdhbGtlciB7XG4gICAgY29uc3RydWN0b3IodG9wUHJvZCwgcGF0aCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRvcFByb2QgPSB0b3BQcm9kO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLnBvc3NpYmxlVG9rVHlwZXMgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZSA9IDA7XG4gICAgICAgIHRoaXMuZm91bmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0F0RW5kT2ZQYXRoID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0V2Fsa2luZygpIHtcbiAgICAgICAgdGhpcy5mb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wYXRoLnJ1bGVTdGFja1swXSAhPT0gdGhpcy50b3BQcm9kLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGltbXV0YWJsZSBmb3IgdGhlIHdpblxuICAgICAgICB0aGlzLnJ1bGVTdGFjayA9IGNsb25lKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKTsgLy8gaW50ZWxpaiBidWcgcmVxdWlyZXMgYXNzZXJ0aW9uXG4gICAgICAgIHRoaXMub2NjdXJyZW5jZVN0YWNrID0gY2xvbmUodGhpcy5wYXRoLm9jY3VycmVuY2VTdGFjaykucmV2ZXJzZSgpOyAvLyBpbnRlbGlqIGJ1ZyByZXF1aXJlcyBhc3NlcnRpb25cbiAgICAgICAgLy8gYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBmaXJzdCBwcm9kdWN0aW9uIGlzIHZhbGlkLCB3ZSBub3cgc2VlayB0aGUgMm5kIHByb2R1Y3Rpb25cbiAgICAgICAgdGhpcy5ydWxlU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMub2NjdXJyZW5jZVN0YWNrLnBvcCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUV4cGVjdGVkTmV4dCgpO1xuICAgICAgICB0aGlzLndhbGsodGhpcy50b3BQcm9kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zc2libGVUb2tUeXBlcztcbiAgICB9XG4gICAgd2Fsayhwcm9kLCBwcmV2UmVzdCA9IFtdKSB7XG4gICAgICAgIC8vIHN0b3Agc2Nhbm5pbmcgb25jZSB3ZSBmb3VuZCB0aGUgcGF0aFxuICAgICAgICBpZiAoIXRoaXMuZm91bmQpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGsocHJvZCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdhbGtQcm9kUmVmKHJlZlByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICAvLyBmb3VuZCB0aGUgbmV4dCBwcm9kdWN0aW9uLCBuZWVkIHRvIGtlZXAgd2Fsa2luZyBpbiBpdFxuICAgICAgICBpZiAocmVmUHJvZC5yZWZlcmVuY2VkUnVsZS5uYW1lID09PSB0aGlzLm5leHRQcm9kdWN0aW9uTmFtZSAmJlxuICAgICAgICAgICAgcmVmUHJvZC5pZHggPT09IHRoaXMubmV4dFByb2R1Y3Rpb25PY2N1cnJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsUmVzdCA9IGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUV4cGVjdGVkTmV4dCgpO1xuICAgICAgICAgICAgdGhpcy53YWxrKHJlZlByb2QucmVmZXJlbmNlZFJ1bGUsIGZ1bGxSZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVFeHBlY3RlZE5leHQoKSB7XG4gICAgICAgIC8vIG5lZWQgdG8gY29uc3VtZSB0aGUgVGVybWluYWxcbiAgICAgICAgaWYgKGlzRW1wdHkodGhpcy5ydWxlU3RhY2spKSB7XG4gICAgICAgICAgICAvLyBtdXN0IHJlc2V0IG5leHRQcm9kdWN0aW9uWFhYIHRvIGF2b2lkIHdhbGtpbmcgZG93biBhbm90aGVyIFRvcCBMZXZlbCBwcm9kdWN0aW9uIHdoaWxlIHdoYXQgd2UgYXJlXG4gICAgICAgICAgICAvLyByZWFsbHkgc2Vla2luZyBpcyB0aGUgbGFzdCBUZXJtaW5hbC4uLlxuICAgICAgICAgICAgdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2UgPSAwO1xuICAgICAgICAgICAgdGhpcy5pc0F0RW5kT2ZQYXRoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmV4dFByb2R1Y3Rpb25OYW1lID0gdGhpcy5ydWxlU3RhY2sucG9wKCk7XG4gICAgICAgICAgICB0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZSA9IHRoaXMub2NjdXJyZW5jZVN0YWNrLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE5leHRBZnRlclRva2VuV2Fsa2VyIGV4dGVuZHMgQWJzdHJhY3ROZXh0UG9zc2libGVUb2tlbnNXYWxrZXIge1xuICAgIGNvbnN0cnVjdG9yKHRvcFByb2QsIHBhdGgpIHtcbiAgICAgICAgc3VwZXIodG9wUHJvZCwgcGF0aCk7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsTmFtZSA9IFwiXCI7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSA9IDA7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsTmFtZSA9IHRoaXMucGF0aC5sYXN0VG9rLm5hbWU7XG4gICAgICAgIHRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSA9IHRoaXMucGF0aC5sYXN0VG9rT2NjdXJyZW5jZTtcbiAgICB9XG4gICAgd2Fsa1Rlcm1pbmFsKHRlcm1pbmFsLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBdEVuZE9mUGF0aCAmJlxuICAgICAgICAgICAgdGVybWluYWwudGVybWluYWxUeXBlLm5hbWUgPT09IHRoaXMubmV4dFRlcm1pbmFsTmFtZSAmJlxuICAgICAgICAgICAgdGVybWluYWwuaWR4ID09PSB0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2UgJiZcbiAgICAgICAgICAgICF0aGlzLmZvdW5kKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsUmVzdCA9IGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCk7XG4gICAgICAgICAgICBjb25zdCByZXN0UHJvZCA9IG5ldyBBbHRlcm5hdGl2ZSh7IGRlZmluaXRpb246IGZ1bGxSZXN0IH0pO1xuICAgICAgICAgICAgdGhpcy5wb3NzaWJsZVRva1R5cGVzID0gZmlyc3QocmVzdFByb2QpO1xuICAgICAgICAgICAgdGhpcy5mb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFRoaXMgd2Fsa2VyIG9ubHkgXCJ3YWxrc1wiIGEgc2luZ2xlIFwiVE9QXCIgbGV2ZWwgaW4gdGhlIEdyYW1tYXIgQXN0LCB0aGlzIG1lYW5zXG4gKiBpdCBuZXZlciBcImZvbGxvd3NcIiBwcm9kdWN0aW9uIHJlZnNcbiAqL1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIGV4dGVuZHMgUmVzdFdhbGtlciB7XG4gICAgY29uc3RydWN0b3IodG9wUnVsZSwgb2NjdXJyZW5jZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRvcFJ1bGUgPSB0b3BSdWxlO1xuICAgICAgICB0aGlzLm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlO1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHtcbiAgICAgICAgICAgIHRva2VuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvY2N1cnJlbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpc0VuZE9mUnVsZTogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGFydFdhbGtpbmcoKSB7XG4gICAgICAgIHRoaXMud2Fsayh0aGlzLnRvcFJ1bGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciBleHRlbmRzIEFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIHtcbiAgICB3YWxrTWFueShtYW55UHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmIChtYW55UHJvZC5pZHggPT09IHRoaXMub2NjdXJyZW5jZSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZnRlck1hbnkgPSBfZmlyc3QoY3VyclJlc3QuY29uY2F0KHByZXZSZXN0KSk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdC5pc0VuZE9mUnVsZSA9IGZpcnN0QWZ0ZXJNYW55ID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlyc3RBZnRlck1hbnkgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0LnRva2VuID0gZmlyc3RBZnRlck1hbnkudGVybWluYWxUeXBlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0Lm9jY3VycmVuY2UgPSBmaXJzdEFmdGVyTWFueS5pZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlci53YWxrTWFueShtYW55UHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBOZXh0VGVybWluYWxBZnRlck1hbnlTZXBXYWxrZXIgZXh0ZW5kcyBBYnN0cmFjdE5leHRUZXJtaW5hbEFmdGVyUHJvZHVjdGlvbldhbGtlciB7XG4gICAgd2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICBpZiAobWFueVNlcFByb2QuaWR4ID09PSB0aGlzLm9jY3VycmVuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWZ0ZXJNYW55U2VwID0gX2ZpcnN0KGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCkpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGUgPSBmaXJzdEFmdGVyTWFueVNlcCA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpcnN0QWZ0ZXJNYW55U2VwIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC50b2tlbiA9IGZpcnN0QWZ0ZXJNYW55U2VwLnRlcm1pbmFsVHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC5vY2N1cnJlbmNlID0gZmlyc3RBZnRlck1hbnlTZXAuaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIud2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTmV4dFRlcm1pbmFsQWZ0ZXJBdExlYXN0T25lV2Fsa2VyIGV4dGVuZHMgQWJzdHJhY3ROZXh0VGVybWluYWxBZnRlclByb2R1Y3Rpb25XYWxrZXIge1xuICAgIHdhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKGF0TGVhc3RPbmVQcm9kLmlkeCA9PT0gdGhpcy5vY2N1cnJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFmdGVyQXRMZWFzdE9uZSA9IF9maXJzdChjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpKTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0LmlzRW5kT2ZSdWxlID0gZmlyc3RBZnRlckF0TGVhc3RPbmUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEFmdGVyQXRMZWFzdE9uZSBpbnN0YW5jZW9mIFRlcm1pbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQudG9rZW4gPSBmaXJzdEFmdGVyQXRMZWFzdE9uZS50ZXJtaW5hbFR5cGU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQub2NjdXJyZW5jZSA9IGZpcnN0QWZ0ZXJBdExlYXN0T25lLmlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gVE9ETzogcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gaW4gdGhlIEFmdGVyV2Fsa2Vyc1xuZXhwb3J0IGNsYXNzIE5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciBleHRlbmRzIEFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIHtcbiAgICB3YWxrQXRMZWFzdE9uZVNlcChhdGxlYXN0T25lU2VwUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmIChhdGxlYXN0T25lU2VwUHJvZC5pZHggPT09IHRoaXMub2NjdXJyZW5jZSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZnRlcmZpcnN0QWZ0ZXJBdExlYXN0T25lU2VwID0gX2ZpcnN0KGN1cnJSZXN0LmNvbmNhdChwcmV2UmVzdCkpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuaXNFbmRPZlJ1bGUgPSBmaXJzdEFmdGVyZmlyc3RBZnRlckF0TGVhc3RPbmVTZXAgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEFmdGVyZmlyc3RBZnRlckF0TGVhc3RPbmVTZXAgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0LnRva2VuID0gZmlyc3RBZnRlcmZpcnN0QWZ0ZXJBdExlYXN0T25lU2VwLnRlcm1pbmFsVHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC5vY2N1cnJlbmNlID0gZmlyc3RBZnRlcmZpcnN0QWZ0ZXJBdExlYXN0T25lU2VwLmlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtBdExlYXN0T25lU2VwKGF0bGVhc3RPbmVTZXBQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBvc3NpYmxlUGF0aHNGcm9tKHRhcmdldERlZiwgbWF4TGVuZ3RoLCBjdXJyUGF0aCA9IFtdKSB7XG4gICAgLy8gYXZvaWQgc2lkZSBlZmZlY3RzXG4gICAgY3VyclBhdGggPSBjbG9uZShjdXJyUGF0aCk7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICAvLyBUT0RPOiBhdm9pZCBpbm5lciBmdW5jc1xuICAgIGZ1bmN0aW9uIHJlbWFpbmluZ1BhdGhXaXRoKG5leHREZWYpIHtcbiAgICAgICAgcmV0dXJuIG5leHREZWYuY29uY2F0KGRyb3AodGFyZ2V0RGVmLCBpICsgMSkpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBhdm9pZCBpbm5lciBmdW5jc1xuICAgIGZ1bmN0aW9uIGdldEFsdGVybmF0aXZlc0ZvclByb2QoZGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZXMgPSBwb3NzaWJsZVBhdGhzRnJvbShyZW1haW5pbmdQYXRoV2l0aChkZWZpbml0aW9uKSwgbWF4TGVuZ3RoLCBjdXJyUGF0aCk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KGFsdGVybmF0aXZlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hbmRhdG9yeSBwcm9kdWN0aW9ucyB3aWxsIGhhbHQgdGhlIGxvb3AgYXMgdGhlIHBhdGhzIGNvbXB1dGVkIGZyb20gdGhlaXIgcmVjdXJzaXZlIGNhbGxzIHdpbGwgYWxyZWFkeSBjb250YWluIHRoZVxuICAgICAqIGZvbGxvd2luZyAocmVzdCkgb2YgdGhlIHRhcmdldERlZi5cbiAgICAgKlxuICAgICAqIEZvciBvcHRpb25hbCBwcm9kdWN0aW9ucyAoT3B0aW9uL1JlcGV0aXRpb24vLi4uKSB0aGUgbG9vcCB3aWxsIGNvbnRpbnVlIHRvIHJlcHJlc2VudCB0aGUgcGF0aHMgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGVcbiAgICAgKiB0aGUgb3B0aW9uYWwgcHJvZHVjdGlvbi5cbiAgICAgKi9cbiAgICB3aGlsZSAoY3VyclBhdGgubGVuZ3RoIDwgbWF4TGVuZ3RoICYmIGkgPCB0YXJnZXREZWYubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByb2QgPSB0YXJnZXREZWZbaV07XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKHByb2QuZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZChwcm9kLmRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldEFsdGVybmF0aXZlc0ZvclByb2QocHJvZC5kZWZpbml0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGVmID0gcHJvZC5kZWZpbml0aW9uLmNvbmNhdChbXG4gICAgICAgICAgICAgICAgbmV3IFJlcGV0aXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBwcm9kLmRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKG5ld0RlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEZWYgPSBbXG4gICAgICAgICAgICAgICAgbmV3IEFsdGVybmF0aXZlKHsgZGVmaW5pdGlvbjogcHJvZC5kZWZpbml0aW9uIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBSZXBldGl0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogW25ldyBUZXJtaW5hbCh7IHRlcm1pbmFsVHlwZTogcHJvZC5zZXBhcmF0b3IgfSldLmNvbmNhdChwcm9kLmRlZmluaXRpb24pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKG5ld0RlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEZWYgPSBwcm9kLmRlZmluaXRpb24uY29uY2F0KFtcbiAgICAgICAgICAgICAgICBuZXcgUmVwZXRpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb246IFtuZXcgVGVybWluYWwoeyB0ZXJtaW5hbFR5cGU6IHByb2Quc2VwYXJhdG9yIH0pXS5jb25jYXQocHJvZC5kZWZpbml0aW9uKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZChuZXdEZWYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEZWYgPSBwcm9kLmRlZmluaXRpb24uY29uY2F0KFtcbiAgICAgICAgICAgICAgICBuZXcgUmVwZXRpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb246IHByb2QuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0QWx0ZXJuYXRpdmVzRm9yUHJvZChuZXdEZWYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgZm9yRWFjaChwcm9kLmRlZmluaXRpb24sIChjdXJyQWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBhIGxpbWl0ZWQgY2hlY2sgZm9yIGVtcHR5IGFsdGVybmF0aXZlc1xuICAgICAgICAgICAgICAgIC8vICAgSXQgd291bGQgcHJldmVudCBhIGNvbW1vbiBjYXNlIG9mIGluZmluaXRlIGxvb3BzIGR1cmluZyBwYXJzZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgICAgICAgICAgICAgLy8gICBIb3dldmVyICoqaW4tZGlyZWN0bHkqKiBlbXB0eSBhbHRlcm5hdGl2ZXMgbWF5IHN0aWxsIGNhdXNlIGlzc3Vlcy5cbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eShjdXJyQWx0LmRlZmluaXRpb24pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRBbHRlcm5hdGl2ZXNGb3JQcm9kKGN1cnJBbHQuZGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAgICAgY3VyclBhdGgucHVzaChwcm9kLnRlcm1pbmFsVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBwYXJ0aWFsUGF0aDogY3VyclBhdGgsXG4gICAgICAgIHN1ZmZpeERlZjogZHJvcCh0YXJnZXREZWYsIGkpLFxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dFBvc3NpYmxlVG9rZW5zQWZ0ZXIoaW5pdGlhbERlZiwgdG9rZW5WZWN0b3IsIHRva01hdGNoZXIsIG1heExvb2tBaGVhZCkge1xuICAgIGNvbnN0IEVYSVRfTk9OX1RFUk1JTkFMID0gXCJFWElUX05PTkVfVEVSTUlOQUxcIjtcbiAgICAvLyB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBBcnJheSBlYWNoIHRpbWUuXG4gICAgY29uc3QgRVhJVF9OT05fVEVSTUlOQUxfQVJSID0gW0VYSVRfTk9OX1RFUk1JTkFMXTtcbiAgICBjb25zdCBFWElUX0FMVEVSTkFUSVZFID0gXCJFWElUX0FMVEVSTkFUSVZFXCI7XG4gICAgbGV0IGZvdW5kQ29tcGxldGVQYXRoID0gZmFsc2U7XG4gICAgY29uc3QgdG9rZW5WZWN0b3JMZW5ndGggPSB0b2tlblZlY3Rvci5sZW5ndGg7XG4gICAgY29uc3QgbWluaW1hbEFsdGVybmF0aXZlc0luZGV4ID0gdG9rZW5WZWN0b3JMZW5ndGggLSBtYXhMb29rQWhlYWQgLSAxO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXTtcbiAgICBwb3NzaWJsZVBhdGhzLnB1c2goe1xuICAgICAgICBpZHg6IC0xLFxuICAgICAgICBkZWY6IGluaXRpYWxEZWYsXG4gICAgICAgIHJ1bGVTdGFjazogW10sXG4gICAgICAgIG9jY3VycmVuY2VTdGFjazogW10sXG4gICAgfSk7XG4gICAgd2hpbGUgKCFpc0VtcHR5KHBvc3NpYmxlUGF0aHMpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJQYXRoID0gcG9zc2libGVQYXRocy5wb3AoKTtcbiAgICAgICAgLy8gc2tpcCBhbHRlcm5hdGl2ZXMgaWYgbm8gbW9yZSByZXN1bHRzIGNhbiBiZSBmb3VuZCAoYXNzdW1pbmcgZGV0ZXJtaW5pc3RpYyBncmFtbWFyIHdpdGggZml4ZWQgbG9va2FoZWFkKVxuICAgICAgICBpZiAoY3VyclBhdGggPT09IEVYSVRfQUxURVJOQVRJVkUpIHtcbiAgICAgICAgICAgIGlmIChmb3VuZENvbXBsZXRlUGF0aCAmJlxuICAgICAgICAgICAgICAgIGxhc3QocG9zc2libGVQYXRocykuaWR4IDw9IG1pbmltYWxBbHRlcm5hdGl2ZXNJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBpcnJlbGV2YW50IGFsdGVybmF0aXZlXG4gICAgICAgICAgICAgICAgcG9zc2libGVQYXRocy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJEZWYgPSBjdXJyUGF0aC5kZWY7XG4gICAgICAgIGNvbnN0IGN1cnJJZHggPSBjdXJyUGF0aC5pZHg7XG4gICAgICAgIGNvbnN0IGN1cnJSdWxlU3RhY2sgPSBjdXJyUGF0aC5ydWxlU3RhY2s7XG4gICAgICAgIGNvbnN0IGN1cnJPY2N1cnJlbmNlU3RhY2sgPSBjdXJyUGF0aC5vY2N1cnJlbmNlU3RhY2s7XG4gICAgICAgIC8vIEZvciBFeGFtcGxlOiBhbiBlbXB0eSBwYXRoIGNvdWxkIGV4aXN0IGluIGEgdmFsaWQgZ3JhbW1hciBpbiB0aGUgY2FzZSBvZiBhbiBFTVBUWV9BTFRcbiAgICAgICAgaWYgKGlzRW1wdHkoY3VyckRlZikpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2QgPSBjdXJyRGVmWzBdO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocHJvZCA9PT0gRVhJVF9OT05fVEVSTUlOQUwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoID0ge1xuICAgICAgICAgICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgICAgICAgICBkZWY6IGRyb3AoY3VyckRlZiksXG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBkcm9wUmlnaHQoY3VyclJ1bGVTdGFjayksXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBkcm9wUmlnaHQoY3Vyck9jY3VycmVuY2VTdGFjayksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgVGVybWluYWwpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoY3VycklkeCA8IHRva2VuVmVjdG9yTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRJZHggPSBjdXJySWR4ICsgMTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxUb2tlbiA9IHRva2VuVmVjdG9yW25leHRJZHhdO1xuICAgICAgICAgICAgICAgIGlmICh0b2tNYXRjaGVyKGFjdHVhbFRva2VuLCBwcm9kLnRlcm1pbmFsVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhdGggPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHg6IG5leHRJZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWY6IGRyb3AoY3VyckRlZiksXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycklkeCA9PT0gdG9rZW5WZWN0b3JMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gSUdOT1JFIEFCT1ZFIEVMU0VcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5leHRUb2tlblR5cGU6IHByb2QudGVybWluYWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0VG9rZW5PY2N1cnJlbmNlOiBwcm9kLmlkeCxcbiAgICAgICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBjdXJyUnVsZVN0YWNrLFxuICAgICAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm91bmRDb21wbGV0ZVBhdGggPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgTm9uVGVybWluYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1J1bGVTdGFjayA9IGNsb25lKGN1cnJSdWxlU3RhY2spO1xuICAgICAgICAgICAgbmV3UnVsZVN0YWNrLnB1c2gocHJvZC5ub25UZXJtaW5hbE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgbmV3T2NjdXJyZW5jZVN0YWNrID0gY2xvbmUoY3Vyck9jY3VycmVuY2VTdGFjayk7XG4gICAgICAgICAgICBuZXdPY2N1cnJlbmNlU3RhY2sucHVzaChwcm9kLmlkeCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBwcm9kLmRlZmluaXRpb24uY29uY2F0KEVYSVRfTk9OX1RFUk1JTkFMX0FSUiwgZHJvcChjdXJyRGVmKSksXG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBuZXdSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBuZXdPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgICAgICAvLyB0aGUgb3JkZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIG1lYW5pbmdmdWwsIEZJTE8gKExhc3QgcGF0aCB3aWxsIGJlIHRyYXZlcnNlZCBmaXJzdCkuXG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aFdpdGhvdXQgPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogZHJvcChjdXJyRGVmKSxcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aFdpdGhvdXQpO1xuICAgICAgICAgICAgLy8gcmVxdWlyZWQgbWFya2VyIHRvIGF2b2lkIGJhY2t0cmFja2luZyBwYXRocyB3aG9zZSBoaWdoZXIgcHJpb3JpdHkgYWx0ZXJuYXRpdmVzIGFscmVhZHkgbWF0Y2hlZFxuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKEVYSVRfQUxURVJOQVRJVkUpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFBhdGhXaXRoID0ge1xuICAgICAgICAgICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgICAgICAgICBkZWY6IHByb2QuZGVmaW5pdGlvbi5jb25jYXQoZHJvcChjdXJyRGVmKSksXG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiBjdXJyUnVsZVN0YWNrLFxuICAgICAgICAgICAgICAgIG9jY3VycmVuY2VTdGFjazogY3Vyck9jY3VycmVuY2VTdGFjayxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwb3NzaWJsZVBhdGhzLnB1c2gobmV4dFBhdGhXaXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICAgICAgLy8gVE9ETzooVEhFIE5FVyBvcGVyYXRvcnMgaGVyZSB0YWtlIGEgd2hpbGUuLi4pIChjb252ZXJ0IG9uY2U/KVxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSXRlcmF0aW9uID0gbmV3IFJlcGV0aXRpb24oe1xuICAgICAgICAgICAgICAgIGRlZmluaXRpb246IHByb2QuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICBpZHg6IHByb2QuaWR4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGVmID0gcHJvZC5kZWZpbml0aW9uLmNvbmNhdChbc2Vjb25kSXRlcmF0aW9uXSwgZHJvcChjdXJyRGVmKSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBuZXh0RGVmLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIC8vIFRPRE86KFRIRSBORVcgb3BlcmF0b3JzIGhlcmUgdGFrZSBhIHdoaWxlLi4uKSAoY29udmVydCBvbmNlPylcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvckdhc3QgPSBuZXcgVGVybWluYWwoe1xuICAgICAgICAgICAgICAgIHRlcm1pbmFsVHlwZTogcHJvZC5zZXBhcmF0b3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEl0ZXJhdGlvbiA9IG5ldyBSZXBldGl0aW9uKHtcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBbc2VwYXJhdG9yR2FzdF0uY29uY2F0KHByb2QuZGVmaW5pdGlvbiksXG4gICAgICAgICAgICAgICAgaWR4OiBwcm9kLmlkeCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV4dERlZiA9IHByb2QuZGVmaW5pdGlvbi5jb25jYXQoW3NlY29uZEl0ZXJhdGlvbl0sIGRyb3AoY3VyckRlZikpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFBhdGggPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogbmV4dERlZixcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAvLyB0aGUgb3JkZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIG1lYW5pbmdmdWwsIEZJTE8gKExhc3QgcGF0aCB3aWxsIGJlIHRyYXZlcnNlZCBmaXJzdCkuXG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aFdpdGhvdXQgPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogZHJvcChjdXJyRGVmKSxcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aFdpdGhvdXQpO1xuICAgICAgICAgICAgLy8gcmVxdWlyZWQgbWFya2VyIHRvIGF2b2lkIGJhY2t0cmFja2luZyBwYXRocyB3aG9zZSBoaWdoZXIgcHJpb3JpdHkgYWx0ZXJuYXRpdmVzIGFscmVhZHkgbWF0Y2hlZFxuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKEVYSVRfQUxURVJOQVRJVkUpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yR2FzdCA9IG5ldyBUZXJtaW5hbCh7XG4gICAgICAgICAgICAgICAgdGVybWluYWxUeXBlOiBwcm9kLnNlcGFyYXRvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbnRoUmVwZXRpdGlvbiA9IG5ldyBSZXBldGl0aW9uKHtcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBbc2VwYXJhdG9yR2FzdF0uY29uY2F0KHByb2QuZGVmaW5pdGlvbiksXG4gICAgICAgICAgICAgICAgaWR4OiBwcm9kLmlkeCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV4dERlZiA9IHByb2QuZGVmaW5pdGlvbi5jb25jYXQoW250aFJlcGV0aXRpb25dLCBkcm9wKGN1cnJEZWYpKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoV2l0aCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBuZXh0RGVmLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoV2l0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb24pIHtcbiAgICAgICAgICAgIC8vIHRoZSBvcmRlciBvZiBhbHRlcm5hdGl2ZXMgaXMgbWVhbmluZ2Z1bCwgRklMTyAoTGFzdCBwYXRoIHdpbGwgYmUgdHJhdmVyc2VkIGZpcnN0KS5cbiAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoV2l0aG91dCA9IHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBkcm9wKGN1cnJEZWYpLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKG5leHRQYXRoV2l0aG91dCk7XG4gICAgICAgICAgICAvLyByZXF1aXJlZCBtYXJrZXIgdG8gYXZvaWQgYmFja3RyYWNraW5nIHBhdGhzIHdob3NlIGhpZ2hlciBwcmlvcml0eSBhbHRlcm5hdGl2ZXMgYWxyZWFkeSBtYXRjaGVkXG4gICAgICAgICAgICBwb3NzaWJsZVBhdGhzLnB1c2goRVhJVF9BTFRFUk5BVElWRSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBhbiBlbXB0eSByZXBldGl0aW9uIHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcHMgaGVyZSwgd2lsbCB0aGUgcGFyc2VyIGRldGVjdCB0aGlzIGluIHNlbGZBbmFseXNpcz9cbiAgICAgICAgICAgIGNvbnN0IG50aFJlcGV0aXRpb24gPSBuZXcgUmVwZXRpdGlvbih7XG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogcHJvZC5kZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgIGlkeDogcHJvZC5pZHgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5leHREZWYgPSBwcm9kLmRlZmluaXRpb24uY29uY2F0KFtudGhSZXBldGl0aW9uXSwgZHJvcChjdXJyRGVmKSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0UGF0aFdpdGggPSB7XG4gICAgICAgICAgICAgICAgaWR4OiBjdXJySWR4LFxuICAgICAgICAgICAgICAgIGRlZjogbmV4dERlZixcbiAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBjdXJyT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChuZXh0UGF0aFdpdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgLy8gdGhlIG9yZGVyIG9mIGFsdGVybmF0aXZlcyBpcyBtZWFuaW5nZnVsLCBGSUxPIChMYXN0IHBhdGggd2lsbCBiZSB0cmF2ZXJzZWQgZmlyc3QpLlxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHByb2QuZGVmaW5pdGlvbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJBbHQgPSBwcm9kLmRlZmluaXRpb25baV07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdFBhdGggPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBjdXJyQWx0LmRlZmluaXRpb24uY29uY2F0KGRyb3AoY3VyckRlZikpLFxuICAgICAgICAgICAgICAgICAgICBydWxlU3RhY2s6IGN1cnJSdWxlU3RhY2ssXG4gICAgICAgICAgICAgICAgICAgIG9jY3VycmVuY2VTdGFjazogY3Vyck9jY3VycmVuY2VTdGFjayxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChjdXJyQWx0UGF0aCk7XG4gICAgICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKEVYSVRfQUxURVJOQVRJVkUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGl2ZSkge1xuICAgICAgICAgICAgcG9zc2libGVQYXRocy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZHg6IGN1cnJJZHgsXG4gICAgICAgICAgICAgICAgZGVmOiBwcm9kLmRlZmluaXRpb24uY29uY2F0KGRyb3AoY3VyckRlZikpLFxuICAgICAgICAgICAgICAgIHJ1bGVTdGFjazogY3VyclJ1bGVTdGFjayxcbiAgICAgICAgICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IGN1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUnVsZSkge1xuICAgICAgICAgICAgLy8gbGFzdCBiZWNhdXNlIHdlIHNob3VsZCBvbmx5IGVuY291bnRlciBhdCBtb3N0IGEgc2luZ2xlIG9uZSBvZiB0aGVzZSBwZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICAgIHBvc3NpYmxlUGF0aHMucHVzaChleHBhbmRUb3BMZXZlbFJ1bGUocHJvZCwgY3VycklkeCwgY3VyclJ1bGVTdGFjaywgY3Vyck9jY3VycmVuY2VTdGFjaykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZXhwYW5kVG9wTGV2ZWxSdWxlKHRvcFJ1bGUsIGN1cnJJZHgsIGN1cnJSdWxlU3RhY2ssIGN1cnJPY2N1cnJlbmNlU3RhY2spIHtcbiAgICBjb25zdCBuZXdSdWxlU3RhY2sgPSBjbG9uZShjdXJyUnVsZVN0YWNrKTtcbiAgICBuZXdSdWxlU3RhY2sucHVzaCh0b3BSdWxlLm5hbWUpO1xuICAgIGNvbnN0IG5ld0N1cnJPY2N1cnJlbmNlU3RhY2sgPSBjbG9uZShjdXJyT2NjdXJyZW5jZVN0YWNrKTtcbiAgICAvLyB0b3AgcnVsZSBpcyBhbHdheXMgYXNzdW1lZCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggb2NjdXJyZW5jZSBpbmRleCAxXG4gICAgbmV3Q3Vyck9jY3VycmVuY2VTdGFjay5wdXNoKDEpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkeDogY3VycklkeCxcbiAgICAgICAgZGVmOiB0b3BSdWxlLmRlZmluaXRpb24sXG4gICAgICAgIHJ1bGVTdGFjazogbmV3UnVsZVN0YWNrLFxuICAgICAgICBvY2N1cnJlbmNlU3RhY2s6IG5ld0N1cnJPY2N1cnJlbmNlU3RhY2ssXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVycHJldGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXZlcnksIGZsYXR0ZW4sIGZvckVhY2gsIGhhcywgaXNFbXB0eSwgbWFwLCByZWR1Y2UgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBwb3NzaWJsZVBhdGhzRnJvbSB9IGZyb20gXCIuL2ludGVycHJldGVyLmpzXCI7XG5pbXBvcnQgeyBSZXN0V2Fsa2VyIH0gZnJvbSBcIi4vcmVzdC5qc1wiO1xuaW1wb3J0IHsgdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlciwgdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlck5vQ2F0ZWdvcmllcywgfSBmcm9tIFwiLi4vLi4vc2Nhbi90b2tlbnMuanNcIjtcbmltcG9ydCB7IEFsdGVybmF0aW9uLCBBbHRlcm5hdGl2ZSBhcyBBbHRlcm5hdGl2ZUdBU1QsIEdBc3RWaXNpdG9yLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IHZhciBQUk9EX1RZUEU7XG4oZnVuY3Rpb24gKFBST0RfVFlQRSkge1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJPUFRJT05cIl0gPSAwXSA9IFwiT1BUSU9OXCI7XG4gICAgUFJPRF9UWVBFW1BST0RfVFlQRVtcIlJFUEVUSVRJT05cIl0gPSAxXSA9IFwiUkVQRVRJVElPTlwiO1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJSRVBFVElUSU9OX01BTkRBVE9SWVwiXSA9IDJdID0gXCJSRVBFVElUSU9OX01BTkRBVE9SWVwiO1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJSRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUlwiXSA9IDNdID0gXCJSRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUlwiO1xuICAgIFBST0RfVFlQRVtQUk9EX1RZUEVbXCJSRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SXCJdID0gNF0gPSBcIlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1JcIjtcbiAgICBQUk9EX1RZUEVbUFJPRF9UWVBFW1wiQUxURVJOQVRJT05cIl0gPSA1XSA9IFwiQUxURVJOQVRJT05cIjtcbn0pKFBST0RfVFlQRSB8fCAoUFJPRF9UWVBFID0ge30pKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9kVHlwZShwcm9kKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvZCBpbnN0YW5jZW9mIE9wdGlvbiB8fCBwcm9kID09PSBcIk9wdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBQUk9EX1RZUEUuT1BUSU9OO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbiB8fCBwcm9kID09PSBcIlJlcGV0aXRpb25cIikge1xuICAgICAgICByZXR1cm4gUFJPRF9UWVBFLlJFUEVUSVRJT047XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5IHx8XG4gICAgICAgIHByb2QgPT09IFwiUmVwZXRpdGlvbk1hbmRhdG9yeVwiKSB7XG4gICAgICAgIHJldHVybiBQUk9EX1RZUEUuUkVQRVRJVElPTl9NQU5EQVRPUlk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciB8fFxuICAgICAgICBwcm9kID09PSBcIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yXCIpIHtcbiAgICAgICAgcmV0dXJuIFBST0RfVFlQRS5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIHx8XG4gICAgICAgIHByb2QgPT09IFwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3JcIikge1xuICAgICAgICByZXR1cm4gUFJPRF9UWVBFLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1I7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGlvbiB8fCBwcm9kID09PSBcIkFsdGVybmF0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIFBST0RfVFlQRS5BTFRFUk5BVElPTjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwibm9uIGV4aGF1c3RpdmUgbWF0Y2hcIik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExvb2thaGVhZFBhdGhzKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG9jY3VycmVuY2UsIHJ1bGUsIHByb2RUeXBlLCBtYXhMb29rYWhlYWQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdHlwZSA9IGdldFByb2RUeXBlKHByb2RUeXBlKTtcbiAgICBpZiAodHlwZSA9PT0gUFJPRF9UWVBFLkFMVEVSTkFUSU9OKSB7XG4gICAgICAgIHJldHVybiBnZXRMb29rYWhlYWRQYXRoc0Zvck9yKG9jY3VycmVuY2UsIHJ1bGUsIG1heExvb2thaGVhZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2Qob2NjdXJyZW5jZSwgcnVsZSwgdHlwZSwgbWF4TG9va2FoZWFkKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb29rYWhlYWRGdW5jRm9yT3Iob2NjdXJyZW5jZSwgcnVsZUdyYW1tYXIsIG1heExvb2thaGVhZCwgaGFzUHJlZGljYXRlcywgZHluYW1pY1Rva2Vuc0VuYWJsZWQsIGxhRnVuY0J1aWxkZXIpIHtcbiAgICBjb25zdCBsb29rQWhlYWRQYXRocyA9IGdldExvb2thaGVhZFBhdGhzRm9yT3Iob2NjdXJyZW5jZSwgcnVsZUdyYW1tYXIsIG1heExvb2thaGVhZCk7XG4gICAgY29uc3QgdG9rZW5NYXRjaGVyID0gYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZChsb29rQWhlYWRQYXRocylcbiAgICAgICAgPyB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzXG4gICAgICAgIDogdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlcjtcbiAgICByZXR1cm4gbGFGdW5jQnVpbGRlcihsb29rQWhlYWRQYXRocywgaGFzUHJlZGljYXRlcywgdG9rZW5NYXRjaGVyLCBkeW5hbWljVG9rZW5zRW5hYmxlZCk7XG59XG4vKipcbiAqICBXaGVuIGRlYWxpbmcgd2l0aCBhbiBPcHRpb25hbCBwcm9kdWN0aW9uIChPUFRJT04vTUFOWS8ybmQgaXRlcmF0aW9uIG9mIEFUX0xFQVNUX09ORS8uLi4pIHdlIG5lZWQgdG8gY29tcGFyZVxuICogIHRoZSBsb29rYWhlYWQgXCJpbnNpZGVcIiB0aGUgcHJvZHVjdGlvbiBhbmQgdGhlIGxvb2thaGVhZCBpbW1lZGlhdGVseSBcImFmdGVyXCIgaXQgaW4gdGhlIHNhbWUgdG9wIGxldmVsIHJ1bGUgKGNvbnRleHQgZnJlZSkuXG4gKlxuICogIEV4YW1wbGU6IGdpdmVuIGEgcHJvZHVjdGlvbjpcbiAqICBBQkMoREUpP0RGXG4gKlxuICogIFRoZSBvcHRpb25hbCAnKERFKT8nIHNob3VsZCBvbmx5IGJlIGVudGVyZWQgaWYgd2Ugc2VlICdERScuIGEgc2luZ2xlIFRva2VuICdEJyBpcyBub3Qgc3VmZmljaWVudCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d29cbiAqICBhbHRlcm5hdGl2ZXMuXG4gKlxuICogIEByZXR1cm5zIEEgTG9va2FoZWFkIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcmV0dXJuIHRydWUgSUZGIHRoZSBwYXJzZXIgc2hvdWxkIHBhcnNlIHRoZSBPcHRpb25hbCBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb29rYWhlYWRGdW5jRm9yT3B0aW9uYWxQcm9kKG9jY3VycmVuY2UsIHJ1bGVHcmFtbWFyLCBrLCBkeW5hbWljVG9rZW5zRW5hYmxlZCwgcHJvZFR5cGUsIGxvb2thaGVhZEJ1aWxkZXIpIHtcbiAgICBjb25zdCBsb29rQWhlYWRQYXRocyA9IGdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kKG9jY3VycmVuY2UsIHJ1bGVHcmFtbWFyLCBwcm9kVHlwZSwgayk7XG4gICAgY29uc3QgdG9rZW5NYXRjaGVyID0gYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZChsb29rQWhlYWRQYXRocylcbiAgICAgICAgPyB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzXG4gICAgICAgIDogdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlcjtcbiAgICByZXR1cm4gbG9va2FoZWFkQnVpbGRlcihsb29rQWhlYWRQYXRoc1swXSwgdG9rZW5NYXRjaGVyLCBkeW5hbWljVG9rZW5zRW5hYmxlZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jKGFsdHMsIGhhc1ByZWRpY2F0ZXMsIHRva2VuTWF0Y2hlciwgZHluYW1pY1Rva2Vuc0VuYWJsZWQpIHtcbiAgICBjb25zdCBudW1PZkFsdHMgPSBhbHRzLmxlbmd0aDtcbiAgICBjb25zdCBhcmVBbGxPbmVUb2tlbkxvb2thaGVhZCA9IGV2ZXJ5KGFsdHMsIChjdXJyQWx0KSA9PiB7XG4gICAgICAgIHJldHVybiBldmVyeShjdXJyQWx0LCAoY3VyclBhdGgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyUGF0aC5sZW5ndGggPT09IDE7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFRoaXMgdmVyc2lvbiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHByZWRpY2F0ZXMgYXMgd2VsbC5cbiAgICBpZiAoaGFzUHJlZGljYXRlcykge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgY2hvc2VuIGFsdGVybmF0aXZlIGluZGV4XG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yQWx0cykge1xuICAgICAgICAgICAgLy8gdW5mb3J0dW5hdGVseSB0aGUgcHJlZGljYXRlcyBtdXN0IGJlIGV4dHJhY3RlZCBldmVyeSBzaW5nbGUgdGltZVxuICAgICAgICAgICAgLy8gYXMgdGhleSBjYW5ub3QgYmUgY2FjaGVkIGR1ZSB0byByZWZlcmVuY2VzIHRvIHBhcmFtZXRlcnModmFycykgd2hpY2ggYXJlIG5vIGxvbmdlciB2YWxpZC5cbiAgICAgICAgICAgIC8vIG5vdGUgdGhhdCBpbiB0aGUgY29tbW9uIGNhc2Ugb2Ygbm8gcHJlZGljYXRlcywgbm8gY3B1IHRpbWUgd2lsbCBiZSB3YXN0ZWQgb24gdGhpcyAoc2VlIGVsc2UgYmxvY2spXG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVzID0gbWFwKG9yQWx0cywgKGN1cnJBbHQpID0+IGN1cnJBbHQuR0FURSk7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG51bU9mQWx0czsgdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdCA9IGFsdHNbdF07XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck51bU9mUGF0aHMgPSBjdXJyQWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUHJlZGljYXRlID0gcHJlZGljYXRlc1t0XTtcbiAgICAgICAgICAgICAgICBpZiAoY3VyclByZWRpY2F0ZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJQcmVkaWNhdGUuY2FsbCh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHByZWRpY2F0ZSBkb2VzIG5vdCBtYXRjaCB0aGVyZSBpcyBubyBwb2ludCBpbiBjaGVja2luZyB0aGUgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHRQYXRoOiBmb3IgKGxldCBqID0gMDsgaiA8IGN1cnJOdW1PZlBhdGhzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGggPSBjdXJyQWx0W2pdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGF0aExlbmd0aCA9IGN1cnJQYXRoLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGF0aExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLkxBKGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbk1hdGNoZXIobmV4dFRva2VuLCBjdXJyUGF0aFtpXSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWlzbWF0Y2ggaW4gY3VycmVudCBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBuZXh0IHB0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG5leHRQYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgZnVsbCBwYXRoIHRoYXQgbWF0Y2hlcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3aWxsIGFsc28gd29yayBmb3IgYW4gZW1wdHkgQUxUIGFzIHRoZSBsb29wIHdpbGwgYmUgc2tpcHBlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbm9uZSBvZiB0aGUgcGF0aHMgZm9yIHRoZSBjdXJyZW50IGFsdGVybmF0aXZlIG1hdGNoZWRcbiAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIG5leHQgYWx0ZXJuYXRpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vbmUgb2YgdGhlIGFsdGVybmF0aXZlcyBjb3VsZCBiZSBtYXRjaGVkXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmVBbGxPbmVUb2tlbkxvb2thaGVhZCAmJiAhZHluYW1pY1Rva2Vuc0VuYWJsZWQpIHtcbiAgICAgICAgLy8gb3B0aW1pemVkIChjb21tb24pIGNhc2Ugb2YgYWxsIHRoZSBsb29rYWhlYWRzIHBhdGhzIHJlcXVpcmluZyBvbmx5XG4gICAgICAgIC8vIGEgc2luZ2xlIHRva2VuIGxvb2thaGVhZC4gVGhlc2UgT3B0aW1pemF0aW9ucyBjYW5ub3Qgd29yayBpZiBkeW5hbWljYWxseSBkZWZpbmVkIFRva2VucyBhcmUgdXNlZC5cbiAgICAgICAgY29uc3Qgc2luZ2xlVG9rZW5BbHRzID0gbWFwKGFsdHMsIChjdXJyQWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdHRlbihjdXJyQWx0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNob2ljZVRvQWx0ID0gcmVkdWNlKHNpbmdsZVRva2VuQWx0cywgKHJlc3VsdCwgY3VyckFsdCwgaWR4KSA9PiB7XG4gICAgICAgICAgICBmb3JFYWNoKGN1cnJBbHQsIChjdXJyVG9rVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaGFzKHJlc3VsdCwgY3VyclRva1R5cGUudG9rZW5UeXBlSWR4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3VyclRva1R5cGUudG9rZW5UeXBlSWR4XSA9IGlkeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yRWFjaChjdXJyVG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMsIChjdXJyRXh0ZW5kaW5nVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhcyhyZXN1bHQsIGN1cnJFeHRlbmRpbmdUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJFeHRlbmRpbmdUeXBlXSA9IGlkeDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBjaG9zZW4gYWx0ZXJuYXRpdmUgaW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLkxBKDEpO1xuICAgICAgICAgICAgcmV0dXJuIGNob2ljZVRvQWx0W25leHRUb2tlbi50b2tlblR5cGVJZHhdO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gb3B0aW1pemVkIGxvb2thaGVhZCB3aXRob3V0IG5lZWRpbmcgdG8gY2hlY2sgdGhlIHByZWRpY2F0ZXMgYXQgYWxsLlxuICAgICAgICAvLyB0aGlzIGNhdXNlcyBjb2RlIGR1cGxpY2F0aW9uIHdoaWNoIGlzIGludGVudGlvbmFsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBjaG9zZW4gYWx0ZXJuYXRpdmUgaW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG51bU9mQWx0czsgdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdCA9IGFsdHNbdF07XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck51bU9mUGF0aHMgPSBjdXJyQWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBuZXh0UGF0aDogZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyTnVtT2ZQYXRoczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQYXRoID0gY3VyckFsdFtqXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGhMZW5ndGggPSBjdXJyUGF0aC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhdGhMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5MQShpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5NYXRjaGVyKG5leHRUb2tlbiwgY3VyclBhdGhbaV0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pc21hdGNoIGluIGN1cnJlbnQgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgbmV4dCBwdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBuZXh0UGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGZ1bGwgcGF0aCB0aGF0IG1hdGNoZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIGFuIGVtcHR5IEFMVCBhcyB0aGUgbG9vcCB3aWxsIGJlIHNraXBwZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG5vbmUgb2YgdGhlIHBhdGhzIGZvciB0aGUgY3VycmVudCBhbHRlcm5hdGl2ZSBtYXRjaGVkXG4gICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBuZXh0IGFsdGVybmF0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgY291bGQgYmUgbWF0Y2hlZFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaW5nbGVBbHRlcm5hdGl2ZUxvb2thaGVhZEZ1bmN0aW9uKGFsdCwgdG9rZW5NYXRjaGVyLCBkeW5hbWljVG9rZW5zRW5hYmxlZCkge1xuICAgIGNvbnN0IGFyZUFsbE9uZVRva2VuTG9va2FoZWFkID0gZXZlcnkoYWx0LCAoY3VyclBhdGgpID0+IHtcbiAgICAgICAgcmV0dXJuIGN1cnJQYXRoLmxlbmd0aCA9PT0gMTtcbiAgICB9KTtcbiAgICBjb25zdCBudW1PZlBhdGhzID0gYWx0Lmxlbmd0aDtcbiAgICAvLyBvcHRpbWl6ZWQgKGNvbW1vbikgY2FzZSBvZiBhbGwgdGhlIGxvb2thaGVhZHMgcGF0aHMgcmVxdWlyaW5nIG9ubHlcbiAgICAvLyBhIHNpbmdsZSB0b2tlbiBsb29rYWhlYWQuXG4gICAgaWYgKGFyZUFsbE9uZVRva2VuTG9va2FoZWFkICYmICFkeW5hbWljVG9rZW5zRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBzaW5nbGVUb2tlbnNUeXBlcyA9IGZsYXR0ZW4oYWx0KTtcbiAgICAgICAgaWYgKHNpbmdsZVRva2Vuc1R5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgaXNFbXB0eShzaW5nbGVUb2tlbnNUeXBlc1swXS5jYXRlZ29yeU1hdGNoZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFRva2VuVHlwZSA9IHNpbmdsZVRva2Vuc1R5cGVzWzBdO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUb2tlblVuaXF1ZUtleSA9IGV4cGVjdGVkVG9rZW5UeXBlLnRva2VuVHlwZUlkeDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEEoMSkudG9rZW5UeXBlSWR4ID09PSBleHBlY3RlZFRva2VuVW5pcXVlS2V5O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNob2ljZVRvQWx0ID0gcmVkdWNlKHNpbmdsZVRva2Vuc1R5cGVzLCAocmVzdWx0LCBjdXJyVG9rVHlwZSwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJUb2tUeXBlLnRva2VuVHlwZUlkeF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvckVhY2goY3VyclRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzLCAoY3VyckV4dGVuZGluZ1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJFeHRlbmRpbmdUeXBlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5MQSgxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlVG9BbHRbbmV4dFRva2VuLnRva2VuVHlwZUlkeF0gPT09IHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbmV4dFBhdGg6IGZvciAobGV0IGogPSAwOyBqIDwgbnVtT2ZQYXRoczsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGggPSBhbHRbal07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGhMZW5ndGggPSBjdXJyUGF0aC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGF0aExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5NYXRjaGVyKG5leHRUb2tlbiwgY3VyclBhdGhbaV0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWlzbWF0Y2ggaW4gY3VycmVudCBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIG5leHQgcHRoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBuZXh0UGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIGZ1bGwgcGF0aCB0aGF0IG1hdGNoZXMuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub25lIG9mIHRoZSBwYXRocyBtYXRjaGVkXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxufVxuY2xhc3MgUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIgZXh0ZW5kcyBSZXN0V2Fsa2VyIHtcbiAgICBjb25zdHJ1Y3Rvcih0b3BQcm9kLCB0YXJnZXRPY2N1cnJlbmNlLCB0YXJnZXRQcm9kVHlwZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRvcFByb2QgPSB0b3BQcm9kO1xuICAgICAgICB0aGlzLnRhcmdldE9jY3VycmVuY2UgPSB0YXJnZXRPY2N1cnJlbmNlO1xuICAgICAgICB0aGlzLnRhcmdldFByb2RUeXBlID0gdGFyZ2V0UHJvZFR5cGU7XG4gICAgfVxuICAgIHN0YXJ0V2Fsa2luZygpIHtcbiAgICAgICAgdGhpcy53YWxrKHRoaXMudG9wUHJvZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3REZWY7XG4gICAgfVxuICAgIGNoZWNrSXNUYXJnZXQobm9kZSwgZXhwZWN0ZWRQcm9kVHlwZSwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmIChub2RlLmlkeCA9PT0gdGhpcy50YXJnZXRPY2N1cnJlbmNlICYmXG4gICAgICAgICAgICB0aGlzLnRhcmdldFByb2RUeXBlID09PSBleHBlY3RlZFByb2RUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3REZWYgPSBjdXJyUmVzdC5jb25jYXQocHJldlJlc3QpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBkbyBub3QgaXRlcmF0ZSBvdmVyIHRoZSBlbnRpcmUgR3JhbW1hciBhc3QgYWZ0ZXIgd2UgaGF2ZSBmb3VuZCB0aGUgdGFyZ2V0XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgd2Fsa09wdGlvbihvcHRpb25Qcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNUYXJnZXQob3B0aW9uUHJvZCwgUFJPRF9UWVBFLk9QVElPTiwgY3VyclJlc3QsIHByZXZSZXN0KSkge1xuICAgICAgICAgICAgc3VwZXIud2Fsa09wdGlvbihvcHRpb25Qcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdhbGtBdExlYXN0T25lKGF0TGVhc3RPbmVQcm9kLCBjdXJyUmVzdCwgcHJldlJlc3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNUYXJnZXQoYXRMZWFzdE9uZVByb2QsIFBST0RfVFlQRS5SRVBFVElUSU9OX01BTkRBVE9SWSwgY3VyclJlc3QsIHByZXZSZXN0KSkge1xuICAgICAgICAgICAgc3VwZXIud2Fsa09wdGlvbihhdExlYXN0T25lUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3YWxrQXRMZWFzdE9uZVNlcChhdExlYXN0T25lU2VwUHJvZCwgY3VyclJlc3QsIHByZXZSZXN0KSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0lzVGFyZ2V0KGF0TGVhc3RPbmVTZXBQcm9kLCBQUk9EX1RZUEUuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IsIGN1cnJSZXN0LCBwcmV2UmVzdCkpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtPcHRpb24oYXRMZWFzdE9uZVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2Fsa01hbnkobWFueVByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJc1RhcmdldChtYW55UHJvZCwgUFJPRF9UWVBFLlJFUEVUSVRJT04sIGN1cnJSZXN0LCBwcmV2UmVzdCkpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtPcHRpb24obWFueVByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2Fsa01hbnlTZXAobWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJc1RhcmdldChtYW55U2VwUHJvZCwgUFJPRF9UWVBFLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IsIGN1cnJSZXN0LCBwcmV2UmVzdCkpIHtcbiAgICAgICAgICAgIHN1cGVyLndhbGtPcHRpb24obWFueVNlcFByb2QsIGN1cnJSZXN0LCBwcmV2UmVzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmluaXRpb24gb2YgYSB0YXJnZXQgcHJvZHVjdGlvbiBpbiBhIHRvcCBsZXZlbCBsZXZlbCBydWxlLlxuICovXG5jbGFzcyBJbnNpZGVEZWZpbml0aW9uRmluZGVyVmlzaXRvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRPY2N1cnJlbmNlLCB0YXJnZXRQcm9kVHlwZSwgdGFyZ2V0UmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0T2NjdXJyZW5jZSA9IHRhcmdldE9jY3VycmVuY2U7XG4gICAgICAgIHRoaXMudGFyZ2V0UHJvZFR5cGUgPSB0YXJnZXRQcm9kVHlwZTtcbiAgICAgICAgdGhpcy50YXJnZXRSZWYgPSB0YXJnZXRSZWY7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gW107XG4gICAgfVxuICAgIGNoZWNrSXNUYXJnZXQobm9kZSwgZXhwZWN0ZWRQcm9kTmFtZSkge1xuICAgICAgICBpZiAobm9kZS5pZHggPT09IHRoaXMudGFyZ2V0T2NjdXJyZW5jZSAmJlxuICAgICAgICAgICAgdGhpcy50YXJnZXRQcm9kVHlwZSA9PT0gZXhwZWN0ZWRQcm9kTmFtZSAmJlxuICAgICAgICAgICAgKHRoaXMudGFyZ2V0UmVmID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gdGhpcy50YXJnZXRSZWYpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IG5vZGUuZGVmaW5pdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9wdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tJc1RhcmdldChub2RlLCBQUk9EX1RZUEUuT1BUSU9OKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5jaGVja0lzVGFyZ2V0KG5vZGUsIFBST0RfVFlQRS5SRVBFVElUSU9OKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jaGVja0lzVGFyZ2V0KG5vZGUsIFBST0RfVFlQRS5SRVBFVElUSU9OX01BTkRBVE9SWSk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLmNoZWNrSXNUYXJnZXQobm9kZSwgUFJPRF9UWVBFLlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihub2RlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tJc1RhcmdldChub2RlLCBQUk9EX1RZUEUuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIHZpc2l0QWx0ZXJuYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLmNoZWNrSXNUYXJnZXQobm9kZSwgUFJPRF9UWVBFLkFMVEVSTkFUSU9OKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbml0aWFsaXplQXJyYXlPZkFycmF5cyhzaXplKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBBIHNvcnQgb2YgaGFzaCBmdW5jdGlvbiBiZXR3ZWVuIGEgUGF0aCBpbiB0aGUgZ3JhbW1hciBhbmQgYSBzdHJpbmcuXG4gKiBOb3RlIHRoYXQgdGhpcyByZXR1cm5zIG11bHRpcGxlIFwiaGFzaGVzXCIgdG8gc3VwcG9ydCB0aGUgc2NlbmFyaW8gb2YgdG9rZW4gY2F0ZWdvcmllcy5cbiAqIC0gIEEgc2luZ2xlIHBhdGggd2l0aCBjYXRlZ29yaWVzIG1heSBtYXRjaCBtdWx0aXBsZSAqKmFjdHVhbCoqIHBhdGhzLlxuICovXG5mdW5jdGlvbiBwYXRoVG9IYXNoS2V5cyhwYXRoKSB7XG4gICAgbGV0IGtleXMgPSBbXCJcIl07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRva1R5cGUgPSBwYXRoW2ldO1xuICAgICAgICBjb25zdCBsb25nZXJLZXlzID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgY3VyclNob3J0ZXJLZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgbG9uZ2VyS2V5cy5wdXNoKGN1cnJTaG9ydGVyS2V5ICsgXCJfXCIgKyB0b2tUeXBlLnRva2VuVHlwZUlkeCk7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva1R5cGUuY2F0ZWdvcnlNYXRjaGVzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllc0tleVN1ZmZpeCA9IFwiX1wiICsgdG9rVHlwZS5jYXRlZ29yeU1hdGNoZXNbdF07XG4gICAgICAgICAgICAgICAgbG9uZ2VyS2V5cy5wdXNoKGN1cnJTaG9ydGVyS2V5ICsgY2F0ZWdvcmllc0tleVN1ZmZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cyA9IGxvbmdlcktleXM7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuLyoqXG4gKiBJbXBlcmF0aXZlIHN0eWxlIGR1ZSB0byBiZWluZyBjYWxsZWQgZnJvbSBhIGhvdCBzcG90XG4gKi9cbmZ1bmN0aW9uIGlzVW5pcXVlUHJlZml4SGFzaChhbHRLbm93blBhdGhzS2V5cywgc2VhcmNoUGF0aEtleXMsIGlkeCkge1xuICAgIGZvciAobGV0IGN1cnJBbHRJZHggPSAwOyBjdXJyQWx0SWR4IDwgYWx0S25vd25QYXRoc0tleXMubGVuZ3RoOyBjdXJyQWx0SWR4KyspIHtcbiAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHRlc3QgdnMgdGhlIG90aGVyIGFsdGVybmF0aXZlc1xuICAgICAgICBpZiAoY3VyckFsdElkeCA9PT0gaWR4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdGhlckFsdEtub3duUGF0aHNLZXlzID0gYWx0S25vd25QYXRoc0tleXNbY3VyckFsdElkeF07XG4gICAgICAgIGZvciAobGV0IHNlYXJjaElkeCA9IDA7IHNlYXJjaElkeCA8IHNlYXJjaFBhdGhLZXlzLmxlbmd0aDsgc2VhcmNoSWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEtleSA9IHNlYXJjaFBhdGhLZXlzW3NlYXJjaElkeF07XG4gICAgICAgICAgICBpZiAob3RoZXJBbHRLbm93blBhdGhzS2V5c1tzZWFyY2hLZXldID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vbmUgb2YgdGhlIFNlYXJjaFBhdGhLZXlzIHdlcmUgZm91bmQgaW4gYW55IG9mIHRoZSBvdGhlciBhbHRlcm5hdGl2ZXNcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXMoYWx0c0RlZnMsIGspIHtcbiAgICBjb25zdCBwYXJ0aWFsQWx0cyA9IG1hcChhbHRzRGVmcywgKGN1cnJBbHQpID0+IHBvc3NpYmxlUGF0aHNGcm9tKFtjdXJyQWx0XSwgMSkpO1xuICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMocGFydGlhbEFsdHMubGVuZ3RoKTtcbiAgICBjb25zdCBhbHRzSGFzaGVzID0gbWFwKHBhcnRpYWxBbHRzLCAoY3VyckFsdFBhdGhzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICAgICAgZm9yRWFjaChjdXJyQWx0UGF0aHMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gcGF0aFRvSGFzaEtleXMoaXRlbS5wYXJ0aWFsUGF0aCk7XG4gICAgICAgICAgICBmb3JFYWNoKGtleXMsIChjdXJyS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgZGljdFtjdXJyS2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkaWN0O1xuICAgIH0pO1xuICAgIGxldCBuZXdEYXRhID0gcGFydGlhbEFsdHM7XG4gICAgLy8gbWF4TG9va2FoZWFkIGxvb3BcbiAgICBmb3IgKGxldCBwYXRoTGVuZ3RoID0gMTsgcGF0aExlbmd0aCA8PSBrOyBwYXRoTGVuZ3RoKyspIHtcbiAgICAgICAgY29uc3QgY3VyckRhdGFzZXQgPSBuZXdEYXRhO1xuICAgICAgICBuZXdEYXRhID0gaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMoY3VyckRhdGFzZXQubGVuZ3RoKTtcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmVzIGxvb3BcbiAgICAgICAgZm9yIChsZXQgYWx0SWR4ID0gMDsgYWx0SWR4IDwgY3VyckRhdGFzZXQubGVuZ3RoOyBhbHRJZHgrKykge1xuICAgICAgICAgICAgY29uc3QgY3VyckFsdFBhdGhzQW5kU3VmZml4ZXMgPSBjdXJyRGF0YXNldFthbHRJZHhdO1xuICAgICAgICAgICAgLy8gcGF0aHMgaW4gY3VycmVudCBhbHRlcm5hdGl2ZSBsb29wXG4gICAgICAgICAgICBmb3IgKGxldCBjdXJyUGF0aElkeCA9IDA7IGN1cnJQYXRoSWR4IDwgY3VyckFsdFBhdGhzQW5kU3VmZml4ZXMubGVuZ3RoOyBjdXJyUGF0aElkeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhdGhQcmVmaXggPSBjdXJyQWx0UGF0aHNBbmRTdWZmaXhlc1tjdXJyUGF0aElkeF0ucGFydGlhbFBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VmZml4RGVmID0gY3VyckFsdFBhdGhzQW5kU3VmZml4ZXNbY3VyclBhdGhJZHhdLnN1ZmZpeERlZjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhLZXlzID0gcGF0aFRvSGFzaEtleXMoY3VyclBhdGhQcmVmaXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzVW5pcXVlID0gaXNVbmlxdWVQcmVmaXhIYXNoKGFsdHNIYXNoZXMsIHByZWZpeEtleXMsIGFsdElkeCk7XG4gICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsaW5lIGZvciB0aGlzIHBhdGguXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5pcXVlIHx8IGlzRW1wdHkoc3VmZml4RGVmKSB8fCBjdXJyUGF0aFByZWZpeC5sZW5ndGggPT09IGspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyckFsdFJlc3VsdCA9IGZpbmFsUmVzdWx0W2FsdElkeF07XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSBpbXBsZW1lbnQgYSBjb250YWluc1BhdGggdXNpbmcgTWFwcy9EaWN0aW9uYXJpZXM/XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluc1BhdGgoY3VyckFsdFJlc3VsdCwgY3VyclBhdGhQcmVmaXgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyckFsdFJlc3VsdC5wdXNoKGN1cnJQYXRoUHJlZml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGwgbmV3ICBrZXlzIGZvciB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwcmVmaXhLZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycktleSA9IHByZWZpeEtleXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0c0hhc2hlc1thbHRJZHhdW2N1cnJLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFeHBhbmQgbG9uZ2VyIHBhdGhzXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcnRpYWxQYXRoc0FuZFN1ZmZpeGVzID0gcG9zc2libGVQYXRoc0Zyb20oc3VmZml4RGVmLCBwYXRoTGVuZ3RoICsgMSwgY3VyclBhdGhQcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICBuZXdEYXRhW2FsdElkeF0gPSBuZXdEYXRhW2FsdElkeF0uY29uY2F0KG5ld1BhcnRpYWxQYXRoc0FuZFN1ZmZpeGVzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGtleXMgZm9yIG5ldyBrbm93biBwYXRoc1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKG5ld1BhcnRpYWxQYXRoc0FuZFN1ZmZpeGVzLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4S2V5cyA9IHBhdGhUb0hhc2hLZXlzKGl0ZW0ucGFydGlhbFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChwcmVmaXhLZXlzLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0c0hhc2hlc1thbHRJZHhdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluYWxSZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcihvY2N1cnJlbmNlLCBydWxlR3JhbW1hciwgaywgb3JQcm9kKSB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBJbnNpZGVEZWZpbml0aW9uRmluZGVyVmlzaXRvcihvY2N1cnJlbmNlLCBQUk9EX1RZUEUuQUxURVJOQVRJT04sIG9yUHJvZCk7XG4gICAgcnVsZUdyYW1tYXIuYWNjZXB0KHZpc2l0b3IpO1xuICAgIHJldHVybiBsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXModmlzaXRvci5yZXN1bHQsIGspO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kKG9jY3VycmVuY2UsIHJ1bGVHcmFtbWFyLCBwcm9kVHlwZSwgaykge1xuICAgIGNvbnN0IGluc2lkZURlZlZpc2l0b3IgPSBuZXcgSW5zaWRlRGVmaW5pdGlvbkZpbmRlclZpc2l0b3Iob2NjdXJyZW5jZSwgcHJvZFR5cGUpO1xuICAgIHJ1bGVHcmFtbWFyLmFjY2VwdChpbnNpZGVEZWZWaXNpdG9yKTtcbiAgICBjb25zdCBpbnNpZGVEZWYgPSBpbnNpZGVEZWZWaXNpdG9yLnJlc3VsdDtcbiAgICBjb25zdCBhZnRlckRlZldhbGtlciA9IG5ldyBSZXN0RGVmaW5pdGlvbkZpbmRlcldhbGtlcihydWxlR3JhbW1hciwgb2NjdXJyZW5jZSwgcHJvZFR5cGUpO1xuICAgIGNvbnN0IGFmdGVyRGVmID0gYWZ0ZXJEZWZXYWxrZXIuc3RhcnRXYWxraW5nKCk7XG4gICAgY29uc3QgaW5zaWRlRmxhdCA9IG5ldyBBbHRlcm5hdGl2ZUdBU1QoeyBkZWZpbml0aW9uOiBpbnNpZGVEZWYgfSk7XG4gICAgY29uc3QgYWZ0ZXJGbGF0ID0gbmV3IEFsdGVybmF0aXZlR0FTVCh7IGRlZmluaXRpb246IGFmdGVyRGVmIH0pO1xuICAgIHJldHVybiBsb29rQWhlYWRTZXF1ZW5jZUZyb21BbHRlcm5hdGl2ZXMoW2luc2lkZUZsYXQsIGFmdGVyRmxhdF0sIGspO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zUGF0aChhbHRlcm5hdGl2ZSwgc2VhcmNoUGF0aCkge1xuICAgIGNvbXBhcmVPdGhlclBhdGg6IGZvciAobGV0IGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3RoZXJQYXRoID0gYWx0ZXJuYXRpdmVbaV07XG4gICAgICAgIGlmIChvdGhlclBhdGgubGVuZ3RoICE9PSBzZWFyY2hQYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvdGhlclBhdGgubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRvayA9IHNlYXJjaFBhdGhbal07XG4gICAgICAgICAgICBjb25zdCBvdGhlclRvayA9IG90aGVyUGF0aFtqXTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVG9rZW5zID0gc2VhcmNoVG9rID09PSBvdGhlclRvayB8fFxuICAgICAgICAgICAgICAgIG90aGVyVG9rLmNhdGVnb3J5TWF0Y2hlc01hcFtzZWFyY2hUb2sudG9rZW5UeXBlSWR4XSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVG9rZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbXBhcmVPdGhlclBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmljdFByZWZpeE9mUGF0aChwcmVmaXgsIG90aGVyKSB7XG4gICAgcmV0dXJuIChwcmVmaXgubGVuZ3RoIDwgb3RoZXIubGVuZ3RoICYmXG4gICAgICAgIGV2ZXJ5KHByZWZpeCwgKHRva1R5cGUsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJUb2tUeXBlID0gb3RoZXJbaWR4XTtcbiAgICAgICAgICAgIHJldHVybiAodG9rVHlwZSA9PT0gb3RoZXJUb2tUeXBlIHx8XG4gICAgICAgICAgICAgICAgb3RoZXJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlc01hcFt0b2tUeXBlLnRva2VuVHlwZUlkeF0pO1xuICAgICAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJlVG9rZW5DYXRlZ29yaWVzTm90VXNlZChsb29rQWhlYWRQYXRocykge1xuICAgIHJldHVybiBldmVyeShsb29rQWhlYWRQYXRocywgKHNpbmdsZUFsdFBhdGhzKSA9PiBldmVyeShzaW5nbGVBbHRQYXRocywgKHNpbmdsZVBhdGgpID0+IGV2ZXJ5KHNpbmdsZVBhdGgsICh0b2tlbikgPT4gaXNFbXB0eSh0b2tlbi5jYXRlZ29yeU1hdGNoZXMpKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9va2FoZWFkLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY2xvbmUsIGNvbXBhY3QsIGRpZmZlcmVuY2UsIGRyb3AsIGRyb3BSaWdodCwgZmlsdGVyLCBmaXJzdCwgZmxhdE1hcCwgZmxhdHRlbiwgZm9yRWFjaCwgZ3JvdXBCeSwgaW5jbHVkZXMsIGlzRW1wdHksIG1hcCwgcGlja0J5LCByZWR1Y2UsIHJlamVjdCwgdmFsdWVzLCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IFBhcnNlckRlZmluaXRpb25FcnJvclR5cGUsIH0gZnJvbSBcIi4uL3BhcnNlci9wYXJzZXIuanNcIjtcbmltcG9ydCB7IEFsdGVybmF0aW9uLCBBbHRlcm5hdGl2ZSBhcyBBbHRlcm5hdGl2ZUdBU1QsIEdBc3RWaXNpdG9yLCBnZXRQcm9kdWN0aW9uRHNsTmFtZSwgaXNPcHRpb25hbFByb2QsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgVGVybWluYWwsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbmltcG9ydCB7IGNvbnRhaW5zUGF0aCwgZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2QsIGdldExvb2thaGVhZFBhdGhzRm9yT3IsIGdldFByb2RUeXBlLCBpc1N0cmljdFByZWZpeE9mUGF0aCwgfSBmcm9tIFwiLi9sb29rYWhlYWQuanNcIjtcbmltcG9ydCB7IG5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIH0gZnJvbSBcIi4vaW50ZXJwcmV0ZXIuanNcIjtcbmltcG9ydCB7IHRva2VuU3RydWN0dXJlZE1hdGNoZXIgfSBmcm9tIFwiLi4vLi4vc2Nhbi90b2tlbnMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxvb2thaGVhZChvcHRpb25zKSB7XG4gICAgY29uc3QgbG9va2FoZWFkVmFsaWRhdGlvbkVycm9yTWVzc2FnZXMgPSBvcHRpb25zLmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtcbiAgICAgICAgcnVsZXM6IG9wdGlvbnMucnVsZXMsXG4gICAgICAgIHRva2VuVHlwZXM6IG9wdGlvbnMudG9rZW5UeXBlcyxcbiAgICAgICAgZ3JhbW1hck5hbWU6IG9wdGlvbnMuZ3JhbW1hck5hbWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcChsb29rYWhlYWRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlcywgKGVycm9yTWVzc2FnZSkgPT4gKE9iamVjdC5hc3NpZ24oeyB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTiB9LCBlcnJvck1lc3NhZ2UpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHcmFtbWFyKHRvcExldmVscywgdG9rZW5UeXBlcywgZXJyTXNnUHJvdmlkZXIsIGdyYW1tYXJOYW1lKSB7XG4gICAgY29uc3QgZHVwbGljYXRlRXJyb3JzID0gZmxhdE1hcCh0b3BMZXZlbHMsIChjdXJyVG9wTGV2ZWwpID0+IHZhbGlkYXRlRHVwbGljYXRlUHJvZHVjdGlvbnMoY3VyclRvcExldmVsLCBlcnJNc2dQcm92aWRlcikpO1xuICAgIGNvbnN0IHRlcm1zTmFtZXNwYWNlQ29uZmxpY3RFcnJvcnMgPSBjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSh0b3BMZXZlbHMsIHRva2VuVHlwZXMsIGVyck1zZ1Byb3ZpZGVyKTtcbiAgICBjb25zdCB0b29NYW55QWx0c0Vycm9ycyA9IGZsYXRNYXAodG9wTGV2ZWxzLCAoY3VyUnVsZSkgPT4gdmFsaWRhdGVUb29NYW55QWx0cyhjdXJSdWxlLCBlcnJNc2dQcm92aWRlcikpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVJ1bGVzRXJyb3IgPSBmbGF0TWFwKHRvcExldmVscywgKGN1clJ1bGUpID0+IHZhbGlkYXRlUnVsZURvZXNOb3RBbHJlYWR5RXhpc3QoY3VyUnVsZSwgdG9wTGV2ZWxzLCBncmFtbWFyTmFtZSwgZXJyTXNnUHJvdmlkZXIpKTtcbiAgICByZXR1cm4gZHVwbGljYXRlRXJyb3JzLmNvbmNhdCh0ZXJtc05hbWVzcGFjZUNvbmZsaWN0RXJyb3JzLCB0b29NYW55QWx0c0Vycm9ycywgZHVwbGljYXRlUnVsZXNFcnJvcik7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zKHRvcExldmVsUnVsZSwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBjb2xsZWN0b3JWaXNpdG9yID0gbmV3IE9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yKCk7XG4gICAgdG9wTGV2ZWxSdWxlLmFjY2VwdChjb2xsZWN0b3JWaXNpdG9yKTtcbiAgICBjb25zdCBhbGxSdWxlUHJvZHVjdGlvbnMgPSBjb2xsZWN0b3JWaXNpdG9yLmFsbFByb2R1Y3Rpb25zO1xuICAgIGNvbnN0IHByb2R1Y3Rpb25Hcm91cHMgPSBncm91cEJ5KGFsbFJ1bGVQcm9kdWN0aW9ucywgaWRlbnRpZnlQcm9kdWN0aW9uRm9yRHVwbGljYXRlcyk7XG4gICAgY29uc3QgZHVwbGljYXRlcyA9IHBpY2tCeShwcm9kdWN0aW9uR3JvdXBzLCAoY3Vyckdyb3VwKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXJyR3JvdXAubGVuZ3RoID4gMTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAodmFsdWVzKGR1cGxpY2F0ZXMpLCAoY3VyckR1cGxpY2F0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RQcm9kID0gZmlyc3QoY3VyckR1cGxpY2F0ZXMpO1xuICAgICAgICBjb25zdCBtc2cgPSBlcnJNc2dQcm92aWRlci5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodG9wTGV2ZWxSdWxlLCBjdXJyRHVwbGljYXRlcyk7XG4gICAgICAgIGNvbnN0IGRzbE5hbWUgPSBnZXRQcm9kdWN0aW9uRHNsTmFtZShmaXJzdFByb2QpO1xuICAgICAgICBjb25zdCBkZWZFcnJvciA9IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgIHR5cGU6IFBhcnNlckRlZmluaXRpb25FcnJvclR5cGUuRFVQTElDQVRFX1BST0RVQ1RJT05TLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHRvcExldmVsUnVsZS5uYW1lLFxuICAgICAgICAgICAgZHNsTmFtZTogZHNsTmFtZSxcbiAgICAgICAgICAgIG9jY3VycmVuY2U6IGZpcnN0UHJvZC5pZHgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmFtID0gZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQoZmlyc3RQcm9kKTtcbiAgICAgICAgaWYgKHBhcmFtKSB7XG4gICAgICAgICAgICBkZWZFcnJvci5wYXJhbWV0ZXIgPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmRXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeVByb2R1Y3Rpb25Gb3JEdXBsaWNhdGVzKHByb2QpIHtcbiAgICByZXR1cm4gYCR7Z2V0UHJvZHVjdGlvbkRzbE5hbWUocHJvZCl9XyNfJHtwcm9kLmlkeH1fI18ke2dldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50KHByb2QpfWA7XG59XG5mdW5jdGlvbiBnZXRFeHRyYVByb2R1Y3Rpb25Bcmd1bWVudChwcm9kKSB7XG4gICAgaWYgKHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4gcHJvZC50ZXJtaW5hbFR5cGUubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiBwcm9kLm5vblRlcm1pbmFsTmFtZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPY2N1cnJlbmNlVmFsaWRhdGlvbkNvbGxlY3RvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucyA9IFtdO1xuICAgIH1cbiAgICB2aXNpdE5vblRlcm1pbmFsKHN1YnJ1bGUpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKHN1YnJ1bGUpO1xuICAgIH1cbiAgICB2aXNpdE9wdGlvbihvcHRpb24pIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IobWFueVNlcCkge1xuICAgICAgICB0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2gobWFueVNlcCk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShhdExlYXN0T25lKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChhdExlYXN0T25lKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihhdExlYXN0T25lU2VwKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChhdExlYXN0T25lU2VwKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uKG1hbnkpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKG1hbnkpO1xuICAgIH1cbiAgICB2aXNpdEFsdGVybmF0aW9uKG9yKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChvcik7XG4gICAgfVxuICAgIHZpc2l0VGVybWluYWwodGVybWluYWwpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKHRlcm1pbmFsKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSdWxlRG9lc05vdEFscmVhZHlFeGlzdChydWxlLCBhbGxSdWxlcywgY2xhc3NOYW1lLCBlcnJNc2dQcm92aWRlcikge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IG9jY3VycmVuY2VzID0gcmVkdWNlKGFsbFJ1bGVzLCAocmVzdWx0LCBjdXJSdWxlKSA9PiB7XG4gICAgICAgIGlmIChjdXJSdWxlLm5hbWUgPT09IHJ1bGUubmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCAwKTtcbiAgICBpZiAob2NjdXJyZW5jZXMgPiAxKSB7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IGVyck1zZ1Byb3ZpZGVyLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7XG4gICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICBncmFtbWFyTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyTXNnLFxuICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5EVVBMSUNBVEVfUlVMRV9OQU1FLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGUubmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4vLyBUT0RPOiBpcyB0aGVyZSBhbnl3YXkgdG8gZ2V0IG9ubHkgdGhlIHJ1bGUgbmFtZXMgb2YgcnVsZXMgaW5oZXJpdGVkIGZyb20gdGhlIHN1cGVyIGdyYW1tYXJzP1xuLy8gVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgSUdyYW1tYXJFcnJvclByb3ZpZGVyIGJlY2F1c2UgdGhlIHZhbGlkYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBvblxuLy8gVGhlIGdyYW1tYXIgc3RydWN0dXJlLCBvbmx5IGF0IHJ1bnRpbWUuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSdWxlSXNPdmVycmlkZGVuKHJ1bGVOYW1lLCBkZWZpbmVkUnVsZXNOYW1lcywgY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgbGV0IGVyck1zZztcbiAgICBpZiAoIWluY2x1ZGVzKGRlZmluZWRSdWxlc05hbWVzLCBydWxlTmFtZSkpIHtcbiAgICAgICAgZXJyTXNnID1cbiAgICAgICAgICAgIGBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHtydWxlTmFtZX08LSBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgZ3JhbW1hcjogLT4ke2NsYXNzTmFtZX08LWAgK1xuICAgICAgICAgICAgICAgIGBhcyBpdCBpcyBub3QgZGVmaW5lZCBpbiBhbnkgb2YgdGhlIHN1cGVyIGdyYW1tYXJzIGA7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyck1zZyxcbiAgICAgICAgICAgIHR5cGU6IFBhcnNlckRlZmluaXRpb25FcnJvclR5cGUuSU5WQUxJRF9SVUxFX09WRVJSSURFLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGVOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbih0b3BSdWxlLCBjdXJyUnVsZSwgZXJyTXNnUHJvdmlkZXIsIHBhdGggPSBbXSkge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IG5leHROb25UZXJtaW5hbHMgPSBnZXRGaXJzdE5vbmVUZXJtaW5hbChjdXJyUnVsZS5kZWZpbml0aW9uKTtcbiAgICBpZiAoaXNFbXB0eShuZXh0Tm9uVGVybWluYWxzKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBydWxlTmFtZSA9IHRvcFJ1bGUubmFtZTtcbiAgICAgICAgY29uc3QgZm91bmRMZWZ0UmVjdXJzaW9uID0gaW5jbHVkZXMobmV4dE5vblRlcm1pbmFscywgdG9wUnVsZSk7XG4gICAgICAgIGlmIChmb3VuZExlZnRSZWN1cnNpb24pIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2dQcm92aWRlci5idWlsZExlZnRSZWN1cnNpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHRvcExldmVsUnVsZTogdG9wUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgbGVmdFJlY3Vyc2lvblBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5MRUZUX1JFQ1VSU0lPTixcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogcnVsZU5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBhcmUgb25seSBsb29raW5nIGZvciBjeWNsaWMgcGF0aHMgbGVhZGluZyBiYWNrIHRvIHRoZSBzcGVjaWZpYyB0b3BSdWxlXG4gICAgICAgIC8vIG90aGVyIGN5Y2xpYyBwYXRocyBhcmUgaWdub3JlZCwgd2Ugc3RpbGwgbmVlZCB0aGlzIGRpZmZlcmVuY2UgdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuLi5cbiAgICAgICAgY29uc3QgdmFsaWROZXh0U3RlcHMgPSBkaWZmZXJlbmNlKG5leHROb25UZXJtaW5hbHMsIHBhdGguY29uY2F0KFt0b3BSdWxlXSkpO1xuICAgICAgICBjb25zdCBlcnJvcnNGcm9tTmV4dFN0ZXBzID0gZmxhdE1hcCh2YWxpZE5leHRTdGVwcywgKGN1cnJSZWZSdWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gY2xvbmUocGF0aCk7XG4gICAgICAgICAgICBuZXdQYXRoLnB1c2goY3VyclJlZlJ1bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKHRvcFJ1bGUsIGN1cnJSZWZSdWxlLCBlcnJNc2dQcm92aWRlciwgbmV3UGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdChlcnJvcnNGcm9tTmV4dFN0ZXBzKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3ROb25lVGVybWluYWwoZGVmaW5pdGlvbikge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAoaXNFbXB0eShkZWZpbml0aW9uKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFByb2QgPSBmaXJzdChkZWZpbml0aW9uKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdFByb2QgaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICByZXN1bHQucHVzaChmaXJzdFByb2QucmVmZXJlbmNlZFJ1bGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChmaXJzdFByb2QgaW5zdGFuY2VvZiBBbHRlcm5hdGl2ZUdBU1QgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgT3B0aW9uIHx8XG4gICAgICAgIGZpcnN0UHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnkgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IgfHxcbiAgICAgICAgZmlyc3RQcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGdldEZpcnN0Tm9uZVRlcm1pbmFsKGZpcnN0UHJvZC5kZWZpbml0aW9uKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0UHJvZCBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIC8vIGVhY2ggc3ViIGRlZmluaXRpb24gaW4gYWx0ZXJuYXRpb24gaXMgYSBGTEFUXG4gICAgICAgIHJlc3VsdCA9IGZsYXR0ZW4obWFwKGZpcnN0UHJvZC5kZWZpbml0aW9uLCAoY3VyclN1YkRlZikgPT4gZ2V0Rmlyc3ROb25lVGVybWluYWwoY3VyclN1YkRlZi5kZWZpbml0aW9uKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChmaXJzdFByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIHNlZSwgbW92ZSBhbG9uZ1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJub24gZXhoYXVzdGl2ZSBtYXRjaFwiKTtcbiAgICB9XG4gICAgY29uc3QgaXNGaXJzdE9wdGlvbmFsID0gaXNPcHRpb25hbFByb2QoZmlyc3RQcm9kKTtcbiAgICBjb25zdCBoYXNNb3JlID0gZGVmaW5pdGlvbi5sZW5ndGggPiAxO1xuICAgIGlmIChpc0ZpcnN0T3B0aW9uYWwgJiYgaGFzTW9yZSkge1xuICAgICAgICBjb25zdCByZXN0ID0gZHJvcChkZWZpbml0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoZ2V0Rmlyc3ROb25lVGVybWluYWwocmVzdCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5jbGFzcyBPckNvbGxlY3RvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5hbHRlcm5hdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgdmlzaXRBbHRlcm5hdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRpb25zLnB1c2gobm9kZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlKHRvcExldmVsUnVsZSwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBvckNvbGxlY3RvciA9IG5ldyBPckNvbGxlY3RvcigpO1xuICAgIHRvcExldmVsUnVsZS5hY2NlcHQob3JDb2xsZWN0b3IpO1xuICAgIGNvbnN0IG9ycyA9IG9yQ29sbGVjdG9yLmFsdGVybmF0aW9ucztcbiAgICBjb25zdCBlcnJvcnMgPSBmbGF0TWFwKG9ycywgKGN1cnJPcikgPT4ge1xuICAgICAgICBjb25zdCBleGNlcHRMYXN0ID0gZHJvcFJpZ2h0KGN1cnJPci5kZWZpbml0aW9uKTtcbiAgICAgICAgcmV0dXJuIGZsYXRNYXAoZXhjZXB0TGFzdCwgKGN1cnJBbHRlcm5hdGl2ZSwgY3VyckFsdElkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9zc2libGVGaXJzdEluQWx0ID0gbmV4dFBvc3NpYmxlVG9rZW5zQWZ0ZXIoW2N1cnJBbHRlcm5hdGl2ZV0sIFtdLCB0b2tlblN0cnVjdHVyZWRNYXRjaGVyLCAxKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KHBvc3NpYmxlRmlyc3RJbkFsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2dQcm92aWRlci5idWlsZEVtcHR5QWx0ZXJuYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxSdWxlOiB0b3BMZXZlbFJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpb246IGN1cnJPcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNob2ljZUlkeDogY3VyckFsdElkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5OT05FX0xBU1RfRU1QVFlfQUxULFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IHRvcExldmVsUnVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZW5jZTogY3Vyck9yLmlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlOiBjdXJyQWx0SWR4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXModG9wTGV2ZWxSdWxlLCBnbG9iYWxNYXhMb29rYWhlYWQsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgY29uc3Qgb3JDb2xsZWN0b3IgPSBuZXcgT3JDb2xsZWN0b3IoKTtcbiAgICB0b3BMZXZlbFJ1bGUuYWNjZXB0KG9yQ29sbGVjdG9yKTtcbiAgICBsZXQgb3JzID0gb3JDb2xsZWN0b3IuYWx0ZXJuYXRpb25zO1xuICAgIC8vIE5ldyBIYW5kbGluZyBvZiBpZ25vcmluZyBhbWJpZ3VpdGllc1xuICAgIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXMvODY5XG4gICAgb3JzID0gcmVqZWN0KG9ycywgKGN1cnJPcikgPT4gY3Vyck9yLmlnbm9yZUFtYmlndWl0aWVzID09PSB0cnVlKTtcbiAgICBjb25zdCBlcnJvcnMgPSBmbGF0TWFwKG9ycywgKGN1cnJPcikgPT4ge1xuICAgICAgICBjb25zdCBjdXJyT2NjdXJyZW5jZSA9IGN1cnJPci5pZHg7XG4gICAgICAgIGNvbnN0IGFjdHVhbE1heExvb2thaGVhZCA9IGN1cnJPci5tYXhMb29rYWhlYWQgfHwgZ2xvYmFsTWF4TG9va2FoZWFkO1xuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZXMgPSBnZXRMb29rYWhlYWRQYXRoc0Zvck9yKGN1cnJPY2N1cnJlbmNlLCB0b3BMZXZlbFJ1bGUsIGFjdHVhbE1heExvb2thaGVhZCwgY3Vyck9yKTtcbiAgICAgICAgY29uc3QgYWx0c0FtYmlndWl0eUVycm9ycyA9IGNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMoYWx0ZXJuYXRpdmVzLCBjdXJyT3IsIHRvcExldmVsUnVsZSwgZXJyTXNnUHJvdmlkZXIpO1xuICAgICAgICBjb25zdCBhbHRzUHJlZml4QW1iaWd1aXR5RXJyb3JzID0gY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyhhbHRlcm5hdGl2ZXMsIGN1cnJPciwgdG9wTGV2ZWxSdWxlLCBlcnJNc2dQcm92aWRlcik7XG4gICAgICAgIHJldHVybiBhbHRzQW1iaWd1aXR5RXJyb3JzLmNvbmNhdChhbHRzUHJlZml4QW1iaWd1aXR5RXJyb3JzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzO1xufVxuZXhwb3J0IGNsYXNzIFJlcGV0aXRpb25Db2xsZWN0b3IgZXh0ZW5kcyBHQXN0VmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihtYW55U2VwKSB7XG4gICAgICAgIHRoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChtYW55U2VwKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGF0TGVhc3RPbmUpIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGF0TGVhc3RPbmUpO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGF0TGVhc3RPbmVTZXApIHtcbiAgICAgICAgdGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGF0TGVhc3RPbmVTZXApO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb24obWFueSkge1xuICAgICAgICB0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2gobWFueSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVG9vTWFueUFsdHModG9wTGV2ZWxSdWxlLCBlcnJNc2dQcm92aWRlcikge1xuICAgIGNvbnN0IG9yQ29sbGVjdG9yID0gbmV3IE9yQ29sbGVjdG9yKCk7XG4gICAgdG9wTGV2ZWxSdWxlLmFjY2VwdChvckNvbGxlY3Rvcik7XG4gICAgY29uc3Qgb3JzID0gb3JDb2xsZWN0b3IuYWx0ZXJuYXRpb25zO1xuICAgIGNvbnN0IGVycm9ycyA9IGZsYXRNYXAob3JzLCAoY3Vyck9yKSA9PiB7XG4gICAgICAgIGlmIChjdXJyT3IuZGVmaW5pdGlvbi5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2dQcm92aWRlci5idWlsZFRvb01hbnlBbHRlcm5hdGl2ZXNFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHRvcExldmVsUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uOiBjdXJyT3IsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLlRPT19NQU5ZX0FMVFMsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiB0b3BMZXZlbFJ1bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb2NjdXJyZW5jZTogY3Vyck9yLmlkeCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKHRvcExldmVsUnVsZXMsIG1heExvb2thaGVhZCwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBmb3JFYWNoKHRvcExldmVsUnVsZXMsIChjdXJyVG9wUnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2xsZWN0b3JWaXNpdG9yID0gbmV3IFJlcGV0aXRpb25Db2xsZWN0b3IoKTtcbiAgICAgICAgY3VyclRvcFJ1bGUuYWNjZXB0KGNvbGxlY3RvclZpc2l0b3IpO1xuICAgICAgICBjb25zdCBhbGxSdWxlUHJvZHVjdGlvbnMgPSBjb2xsZWN0b3JWaXNpdG9yLmFsbFByb2R1Y3Rpb25zO1xuICAgICAgICBmb3JFYWNoKGFsbFJ1bGVQcm9kdWN0aW9ucywgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9kVHlwZSA9IGdldFByb2RUeXBlKGN1cnJQcm9kKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbE1heExvb2thaGVhZCA9IGN1cnJQcm9kLm1heExvb2thaGVhZCB8fCBtYXhMb29rYWhlYWQ7XG4gICAgICAgICAgICBjb25zdCBjdXJyT2NjdXJyZW5jZSA9IGN1cnJQcm9kLmlkeDtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcHRpb25hbFByb2QoY3Vyck9jY3VycmVuY2UsIGN1cnJUb3BSdWxlLCBwcm9kVHlwZSwgYWN0dWFsTWF4TG9va2FoZWFkKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhzSW5zaWRlUHJvZHVjdGlvbiA9IHBhdGhzWzBdO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoZmxhdHRlbihwYXRoc0luc2lkZVByb2R1Y3Rpb24pKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IGVyck1zZ1Byb3ZpZGVyLmJ1aWxkRW1wdHlSZXBldGl0aW9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IGN1cnJUb3BSdWxlLFxuICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uOiBjdXJyUHJvZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyck1zZyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5OT19OT05fRU1QVFlfTE9PS0FIRUFELFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogY3VyclRvcFJ1bGUubmFtZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycztcbn1cbmZ1bmN0aW9uIGNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMoYWx0ZXJuYXRpdmVzLCBhbHRlcm5hdGlvbiwgcnVsZSwgZXJyTXNnUHJvdmlkZXIpIHtcbiAgICBjb25zdCBmb3VuZEFtYmlndW91c1BhdGhzID0gW107XG4gICAgY29uc3QgaWRlbnRpY2FsQW1iaWd1aXRpZXMgPSByZWR1Y2UoYWx0ZXJuYXRpdmVzLCAocmVzdWx0LCBjdXJyQWx0LCBjdXJyQWx0SWR4KSA9PiB7XG4gICAgICAgIC8vIGlnbm9yZSAoc2tpcCkgYW1iaWd1aXRpZXMgd2l0aCB0aGlzIGFsdGVybmF0aXZlXG4gICAgICAgIGlmIChhbHRlcm5hdGlvbi5kZWZpbml0aW9uW2N1cnJBbHRJZHhdLmlnbm9yZUFtYmlndWl0aWVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGZvckVhY2goY3VyckFsdCwgKGN1cnJQYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbHRzQ3VyclBhdGhBcHBlYXJzSW4gPSBbY3VyckFsdElkeF07XG4gICAgICAgICAgICBmb3JFYWNoKGFsdGVybmF0aXZlcywgKGN1cnJPdGhlckFsdCwgY3Vyck90aGVyQWx0SWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJBbHRJZHggIT09IGN1cnJPdGhlckFsdElkeCAmJlxuICAgICAgICAgICAgICAgICAgICBjb250YWluc1BhdGgoY3Vyck90aGVyQWx0LCBjdXJyUGF0aCkgJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIChza2lwKSBhbWJpZ3VpdGllcyB3aXRoIHRoaXMgXCJvdGhlclwiIGFsdGVybmF0aXZlXG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aW9uLmRlZmluaXRpb25bY3Vyck90aGVyQWx0SWR4XS5pZ25vcmVBbWJpZ3VpdGllcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBhbHRzQ3VyclBhdGhBcHBlYXJzSW4ucHVzaChjdXJyT3RoZXJBbHRJZHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFsdHNDdXJyUGF0aEFwcGVhcnNJbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgIWNvbnRhaW5zUGF0aChmb3VuZEFtYmlndW91c1BhdGhzLCBjdXJyUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEFtYmlndW91c1BhdGhzLnB1c2goY3VyclBhdGgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWx0czogYWx0c0N1cnJQYXRoQXBwZWFyc0luLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdXJyUGF0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGN1cnJFcnJvcnMgPSBtYXAoaWRlbnRpY2FsQW1iaWd1aXRpZXMsIChjdXJyQW1iRGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCBhbWJnSW5kaWNlcyA9IG1hcChjdXJyQW1iRGVzY3JpcHRvci5hbHRzLCAoY3VyckFsdElkeCkgPT4gY3VyckFsdElkeCArIDEpO1xuICAgICAgICBjb25zdCBjdXJyTWVzc2FnZSA9IGVyck1zZ1Byb3ZpZGVyLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7XG4gICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICBhbHRlcm5hdGlvbjogYWx0ZXJuYXRpb24sXG4gICAgICAgICAgICBhbWJpZ3VpdHlJbmRpY2VzOiBhbWJnSW5kaWNlcyxcbiAgICAgICAgICAgIHByZWZpeFBhdGg6IGN1cnJBbWJEZXNjcmlwdG9yLnBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogY3Vyck1lc3NhZ2UsXG4gICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLkFNQklHVU9VU19BTFRTLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGUubmFtZSxcbiAgICAgICAgICAgIG9jY3VycmVuY2U6IGFsdGVybmF0aW9uLmlkeCxcbiAgICAgICAgICAgIGFsdGVybmF0aXZlczogY3VyckFtYkRlc2NyaXB0b3IuYWx0cyxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gY3VyckVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ByZWZpeEFsdGVybmF0aXZlc0FtYmlndWl0aWVzKGFsdGVybmF0aXZlcywgYWx0ZXJuYXRpb24sIHJ1bGUsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgLy8gZmxhdHRlblxuICAgIGNvbnN0IHBhdGhzQW5kSW5kaWNlcyA9IHJlZHVjZShhbHRlcm5hdGl2ZXMsIChyZXN1bHQsIGN1cnJBbHQsIGlkeCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyUGF0aHNBbmRJZHggPSBtYXAoY3VyckFsdCwgKGN1cnJQYXRoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBpZHg6IGlkeCwgcGF0aDogY3VyclBhdGggfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29uY2F0KGN1cnJQYXRoc0FuZElkeCk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGVycm9ycyA9IGNvbXBhY3QoZmxhdE1hcChwYXRoc0FuZEluZGljZXMsIChjdXJyUGF0aEFuZElkeCkgPT4ge1xuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZUdhc3QgPSBhbHRlcm5hdGlvbi5kZWZpbml0aW9uW2N1cnJQYXRoQW5kSWR4LmlkeF07XG4gICAgICAgIC8vIGlnbm9yZSAoc2tpcCkgYW1iaWd1aXRpZXMgd2l0aCB0aGlzIGFsdGVybmF0aXZlXG4gICAgICAgIGlmIChhbHRlcm5hdGl2ZUdhc3QuaWdub3JlQW1iaWd1aXRpZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXRJZHggPSBjdXJyUGF0aEFuZElkeC5pZHg7XG4gICAgICAgIGNvbnN0IHRhcmdldFBhdGggPSBjdXJyUGF0aEFuZElkeC5wYXRoO1xuICAgICAgICBjb25zdCBwcmVmaXhBbWJpZ3VpdGllc1BhdGhzQW5kSW5kaWNlcyA9IGZpbHRlcihwYXRoc0FuZEluZGljZXMsIChzZWFyY2hQYXRoQW5kSWR4KSA9PiB7XG4gICAgICAgICAgICAvLyBwcmVmaXggYW1iaWd1aXR5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgZnJvbSBsb3dlciBpZHggKGhpZ2hlciBwcmlvcml0eSkgcGF0aFxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIC8vIGlnbm9yZSAoc2tpcCkgYW1iaWd1aXRpZXMgd2l0aCB0aGlzIFwib3RoZXJcIiBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgYWx0ZXJuYXRpb24uZGVmaW5pdGlvbltzZWFyY2hQYXRoQW5kSWR4LmlkeF0uaWdub3JlQW1iaWd1aXRpZXMgIT09XG4gICAgICAgICAgICAgICAgdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHNlYXJjaFBhdGhBbmRJZHguaWR4IDwgdGFyZ2V0SWR4ICYmXG4gICAgICAgICAgICAgICAgLy8gY2hlY2tpbmcgZm9yIHN0cmljdCBwcmVmaXggYmVjYXVzZSBpZGVudGljYWwgbG9va2FoZWFkc1xuICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgYmUgZGV0ZWN0ZWQgdXNpbmcgYSBkaWZmZXJlbnQgdmFsaWRhdGlvbi5cbiAgICAgICAgICAgICAgICBpc1N0cmljdFByZWZpeE9mUGF0aChzZWFyY2hQYXRoQW5kSWR4LnBhdGgsIHRhcmdldFBhdGgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGN1cnJQYXRoUHJlZml4RXJyb3JzID0gbWFwKHByZWZpeEFtYmlndWl0aWVzUGF0aHNBbmRJbmRpY2VzLCAoY3VyckFtYlBhdGhBbmRJZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFtYmdJbmRpY2VzID0gW2N1cnJBbWJQYXRoQW5kSWR4LmlkeCArIDEsIHRhcmdldElkeCArIDFdO1xuICAgICAgICAgICAgY29uc3Qgb2NjdXJyZW5jZSA9IGFsdGVybmF0aW9uLmlkeCA9PT0gMCA/IFwiXCIgOiBhbHRlcm5hdGlvbi5pZHg7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyTXNnUHJvdmlkZXIuYnVpbGRBbHRlcm5hdGlvblByZWZpeEFtYmlndWl0eUVycm9yKHtcbiAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IHJ1bGUsXG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRpb246IGFsdGVybmF0aW9uLFxuICAgICAgICAgICAgICAgIGFtYmlndWl0eUluZGljZXM6IGFtYmdJbmRpY2VzLFxuICAgICAgICAgICAgICAgIHByZWZpeFBhdGg6IGN1cnJBbWJQYXRoQW5kSWR4LnBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLkFNQklHVU9VU19QUkVGSVhfQUxUUyxcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogcnVsZS5uYW1lLFxuICAgICAgICAgICAgICAgIG9jY3VycmVuY2U6IG9jY3VycmVuY2UsXG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzOiBhbWJnSW5kaWNlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY3VyclBhdGhQcmVmaXhFcnJvcnM7XG4gICAgfSkpO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG5mdW5jdGlvbiBjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSh0b3BMZXZlbHMsIHRva2VuVHlwZXMsIGVyck1zZ1Byb3ZpZGVyKSB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgY29uc3QgdG9rZW5OYW1lcyA9IG1hcCh0b2tlblR5cGVzLCAoY3VyclRva2VuKSA9PiBjdXJyVG9rZW4ubmFtZSk7XG4gICAgZm9yRWFjaCh0b3BMZXZlbHMsIChjdXJyUnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyUnVsZU5hbWUgPSBjdXJyUnVsZS5uYW1lO1xuICAgICAgICBpZiAoaW5jbHVkZXModG9rZW5OYW1lcywgY3VyclJ1bGVOYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gZXJyTXNnUHJvdmlkZXIuYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKGN1cnJSdWxlKTtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2csXG4gICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBjdXJyUnVsZU5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGVja3MuanMubWFwIiwKICAgICJpbXBvcnQgeyBkZWZhdWx0cywgZm9yRWFjaCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IHJlc29sdmVHcmFtbWFyIGFzIG9yZ1Jlc29sdmVHcmFtbWFyIH0gZnJvbSBcIi4uL3Jlc29sdmVyLmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUdyYW1tYXIgYXMgb3JnVmFsaWRhdGVHcmFtbWFyIH0gZnJvbSBcIi4uL2NoZWNrcy5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdEdyYW1tYXJSZXNvbHZlckVycm9yUHJvdmlkZXIsIGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlciwgfSBmcm9tIFwiLi4vLi4vZXJyb3JzX3B1YmxpYy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHcmFtbWFyKG9wdGlvbnMpIHtcbiAgICBjb25zdCBhY3R1YWxPcHRpb25zID0gZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgICBlcnJNc2dQcm92aWRlcjogZGVmYXVsdEdyYW1tYXJSZXNvbHZlckVycm9yUHJvdmlkZXIsXG4gICAgfSk7XG4gICAgY29uc3QgdG9wUnVsZXNUYWJsZSA9IHt9O1xuICAgIGZvckVhY2gob3B0aW9ucy5ydWxlcywgKHJ1bGUpID0+IHtcbiAgICAgICAgdG9wUnVsZXNUYWJsZVtydWxlLm5hbWVdID0gcnVsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3JnUmVzb2x2ZUdyYW1tYXIodG9wUnVsZXNUYWJsZSwgYWN0dWFsT3B0aW9ucy5lcnJNc2dQcm92aWRlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHcmFtbWFyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHMob3B0aW9ucywge1xuICAgICAgICBlcnJNc2dQcm92aWRlcjogZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBvcmdWYWxpZGF0ZUdyYW1tYXIob3B0aW9ucy5ydWxlcywgb3B0aW9ucy50b2tlblR5cGVzLCBvcHRpb25zLmVyck1zZ1Byb3ZpZGVyLCBvcHRpb25zLmdyYW1tYXJOYW1lKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdhc3RfcmVzb2x2ZXJfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaW5jbHVkZXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5jb25zdCBNSVNNQVRDSEVEX1RPS0VOX0VYQ0VQVElPTiA9IFwiTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uXCI7XG5jb25zdCBOT19WSUFCTEVfQUxUX0VYQ0VQVElPTiA9IFwiTm9WaWFibGVBbHRFeGNlcHRpb25cIjtcbmNvbnN0IEVBUkxZX0VYSVRfRVhDRVBUSU9OID0gXCJFYXJseUV4aXRFeGNlcHRpb25cIjtcbmNvbnN0IE5PVF9BTExfSU5QVVRfUEFSU0VEX0VYQ0VQVElPTiA9IFwiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb25cIjtcbmNvbnN0IFJFQ09HTklUSU9OX0VYQ0VQVElPTl9OQU1FUyA9IFtcbiAgICBNSVNNQVRDSEVEX1RPS0VOX0VYQ0VQVElPTixcbiAgICBOT19WSUFCTEVfQUxUX0VYQ0VQVElPTixcbiAgICBFQVJMWV9FWElUX0VYQ0VQVElPTixcbiAgICBOT1RfQUxMX0lOUFVUX1BBUlNFRF9FWENFUFRJT04sXG5dO1xuT2JqZWN0LmZyZWV6ZShSRUNPR05JVElPTl9FWENFUFRJT05fTkFNRVMpO1xuLy8gaGFja3MgdG8gYnlwYXNzIG5vIHN1cHBvcnQgZm9yIGN1c3RvbSBFcnJvcnMgaW4gamF2YXNjcmlwdC90eXBlc2NyaXB0XG5leHBvcnQgZnVuY3Rpb24gaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbihlcnJvcikge1xuICAgIC8vIGNhbid0IGRvIGluc3RhbmNlb2Ygb24gaGFja2VkIGN1c3RvbSBqcyBleGNlcHRpb25zXG4gICAgcmV0dXJuIGluY2x1ZGVzKFJFQ09HTklUSU9OX0VYQ0VQVElPTl9OQU1FUywgZXJyb3IubmFtZSk7XG59XG5jbGFzcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0b2tlbikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICB0aGlzLnJlc3luY2VkVG9rZW5zID0gW107XG4gICAgICAgIC8vIGZpeCBwcm90b3R5cGUgY2hhaW4gd2hlbiB0eXBlc2NyaXB0IHRhcmdldCBpcyBFUzVcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBWOCB3b3JrYXJvdW5kIHRvIHJlbW92ZSBjb25zdHJ1Y3RvciBmcm9tIHN0YWNrdHJhY2Ugd2hlbiB0eXBlc2NyaXB0IHRhcmdldCBpcyBFUzUgKi9cbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24gZXh0ZW5kcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdG9rZW4sIHByZXZpb3VzVG9rZW4pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdG9rZW4pO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuICAgICAgICB0aGlzLm5hbWUgPSBNSVNNQVRDSEVEX1RPS0VOX0VYQ0VQVElPTjtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTm9WaWFibGVBbHRFeGNlcHRpb24gZXh0ZW5kcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdG9rZW4sIHByZXZpb3VzVG9rZW4pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdG9rZW4pO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuICAgICAgICB0aGlzLm5hbWUgPSBOT19WSUFCTEVfQUxUX0VYQ0VQVElPTjtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24gZXh0ZW5kcyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgdG9rZW4pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgdG9rZW4pO1xuICAgICAgICB0aGlzLm5hbWUgPSBOT1RfQUxMX0lOUFVUX1BBUlNFRF9FWENFUFRJT047XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEVhcmx5RXhpdEV4Y2VwdGlvbiBleHRlbmRzIFJlY29nbml0aW9uRXhjZXB0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCB0b2tlbiwgcHJldmlvdXNUb2tlbikge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCB0b2tlbik7XG4gICAgICAgIHRoaXMucHJldmlvdXNUb2tlbiA9IHByZXZpb3VzVG9rZW47XG4gICAgICAgIHRoaXMubmFtZSA9IEVBUkxZX0VYSVRfRVhDRVBUSU9OO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4Y2VwdGlvbnNfcHVibGljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY3JlYXRlVG9rZW5JbnN0YW5jZSwgRU9GLCB0b2tlbk1hdGNoZXIsIH0gZnJvbSBcIi4uLy4uLy4uL3NjYW4vdG9rZW5zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgY2xvbmUsIGRyb3BSaWdodCwgZmluZCwgZmxhdHRlbiwgaGFzLCBpbmNsdWRlcywgaXNFbXB0eSwgbWFwLCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9leGNlcHRpb25zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgSU4gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyLmpzXCI7XG5leHBvcnQgY29uc3QgRU9GX0ZPTExPV19LRVkgPSB7fTtcbmV4cG9ydCBjb25zdCBJTl9SVUxFX1JFQ09WRVJZX0VYQ0VQVElPTiA9IFwiSW5SdWxlUmVjb3ZlcnlFeGNlcHRpb25cIjtcbmV4cG9ydCBjbGFzcyBJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBJTl9SVUxFX1JFQ09WRVJZX0VYQ0VQVElPTjtcbiAgICB9XG59XG4vKipcbiAqIFRoaXMgdHJhaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBlcnJvciByZWNvdmVyeSBhbmQgZmF1bHQgdG9sZXJhbnQgbG9naWNcbiAqL1xuZXhwb3J0IGNsYXNzIFJlY292ZXJhYmxlIHtcbiAgICBpbml0UmVjb3ZlcmFibGUoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuZmlyc3RBZnRlclJlcE1hcCA9IHt9O1xuICAgICAgICB0aGlzLnJlc3luY0ZvbGxvd3MgPSB7fTtcbiAgICAgICAgdGhpcy5yZWNvdmVyeUVuYWJsZWQgPSBoYXMoY29uZmlnLCBcInJlY292ZXJ5RW5hYmxlZFwiKVxuICAgICAgICAgICAgPyBjb25maWcucmVjb3ZlcnlFbmFibGVkIC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgICAgIDogREVGQVVMVF9QQVJTRVJfQ09ORklHLnJlY292ZXJ5RW5hYmxlZDtcbiAgICAgICAgLy8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBOT09QIHdpbGwgYmUgaW5saW5lZCB3aGljaFxuICAgICAgICAvLyBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoaXMgb3B0aW9uYWwgZmVhdHVyZSBkb2VzIG5vdCBleGlzdFxuICAgICAgICAvLyB3aGVuIG5vdCB1c2VkLlxuICAgICAgICBpZiAodGhpcy5yZWNvdmVyeUVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5ID0gYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFRva2VuVG9JbnNlcnQodG9rVHlwZSkge1xuICAgICAgICBjb25zdCB0b2tUb0luc2VydCA9IGNyZWF0ZVRva2VuSW5zdGFuY2UodG9rVHlwZSwgXCJcIiwgTmFOLCBOYU4sIE5hTiwgTmFOLCBOYU4sIE5hTik7XG4gICAgICAgIHRva1RvSW5zZXJ0LmlzSW5zZXJ0ZWRJblJlY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRva1RvSW5zZXJ0O1xuICAgIH1cbiAgICBjYW5Ub2tlblR5cGVCZUluc2VydGVkSW5SZWNvdmVyeSh0b2tUeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KHRva1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRyeUluUmVwZXRpdGlvblJlY292ZXJ5KGdyYW1tYXJSdWxlLCBncmFtbWFyUnVsZUFyZ3MsIGxvb2tBaGVhZEZ1bmMsIGV4cGVjdGVkVG9rVHlwZSkge1xuICAgICAgICAvLyBUT0RPOiBjYW4gdGhlIHJlc3luY1Rva2VuVHlwZSBiZSBjYWNoZWQ/XG4gICAgICAgIGNvbnN0IHJlU3luY1Rva1R5cGUgPSB0aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtcbiAgICAgICAgY29uc3Qgc2F2ZWRMZXhlclN0YXRlID0gdGhpcy5leHBvcnRMZXhlclN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHJlc3luY2VkVG9rZW5zID0gW107XG4gICAgICAgIGxldCBwYXNzZWRSZXN5bmNQb2ludCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBuZXh0VG9rZW5XaXRob3V0UmVzeW5jID0gdGhpcy5MQSgxKTtcbiAgICAgICAgbGV0IGN1cnJUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlRXJyb3JNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNUb2tlbiA9IHRoaXMuTEEoMCk7XG4gICAgICAgICAgICAvLyB3ZSBhcmUgcHJlZW1wdGl2ZWx5IHJlLXN5bmNpbmcgYmVmb3JlIGFuIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLCB0aGVyZWZvciB3ZSBtdXN0IHJlcHJvZHVjZVxuICAgICAgICAgICAgLy8gdGhlIGVycm9yIHRoYXQgd291bGQgaGF2ZSBiZWVuIHRocm93blxuICAgICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRUb2tUeXBlLFxuICAgICAgICAgICAgICAgIGFjdHVhbDogbmV4dFRva2VuV2l0aG91dFJlc3luYyxcbiAgICAgICAgICAgICAgICBwcmV2aW91czogcHJldmlvdXNUb2tlbixcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbihtc2csIG5leHRUb2tlbldpdGhvdXRSZXN5bmMsIHRoaXMuTEEoMCkpO1xuICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHRva2VuIGhlcmUgd2lsbCBiZSB0aGUgb3JpZ2luYWwgY2F1c2Ugb2YgdGhlIGVycm9yLCB0aGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXN5bmNlZFRva2VucyBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGVycm9yLnJlc3luY2VkVG9rZW5zID0gZHJvcFJpZ2h0KHJlc3luY2VkVG9rZW5zKTtcbiAgICAgICAgICAgIHRoaXMuU0FWRV9FUlJPUihlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIHdoaWxlICghcGFzc2VkUmVzeW5jUG9pbnQpIHtcbiAgICAgICAgICAgIC8vIHJlLXN5bmNlZCB0byBhIHBvaW50IHdoZXJlIHdlIGNhbiBzYWZlbHkgZXhpdCB0aGUgcmVwZXRpdGlvbi9cbiAgICAgICAgICAgIGlmICh0aGlzLnRva2VuTWF0Y2hlcihjdXJyVG9rZW4sIGV4cGVjdGVkVG9rVHlwZSkpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUVycm9yTWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gbXVzdCByZXR1cm4gaGVyZSB0byBhdm9pZCByZXZlcnRpbmcgdGhlIGlucHV0SWR4XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChsb29rQWhlYWRGdW5jLmNhbGwodGhpcykpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBza2lwcGVkIGVub3VnaCB0b2tlbnMgc28gd2UgY2FuIHJlc3luYyByaWdodCBiYWNrIGludG8gYW5vdGhlciBpdGVyYXRpb24gb2YgdGhlIHJlcGV0aXRpb24gZ3JhbW1hciBydWxlXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgaW52b2NhdGlvbiBpbiBvdGhlciB0byBzdXBwb3J0IG11bHRpcGxlIHJlLXN5bmNzIGluIHRoZSBzYW1lIHRvcCBsZXZlbCByZXBldGl0aW9uIGdyYW1tYXIgcnVsZVxuICAgICAgICAgICAgICAgIGdyYW1tYXJSdWxlLmFwcGx5KHRoaXMsIGdyYW1tYXJSdWxlQXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBtdXN0IHJldHVybiBoZXJlIHRvIGF2b2lkIHJldmVydGluZyB0aGUgaW5wdXRJZHhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudG9rZW5NYXRjaGVyKGN1cnJUb2tlbiwgcmVTeW5jVG9rVHlwZSkpIHtcbiAgICAgICAgICAgICAgICBwYXNzZWRSZXN5bmNQb2ludCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyVG9rZW4gPSB0aGlzLlNLSVBfVE9LRU4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKGN1cnJUb2tlbiwgcmVzeW5jZWRUb2tlbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBDTE9TRVIgcG9pbnQgdG8gcmVzeW5jIGluc2lkZSB0aGUgUmVwZXRpdGlvbiwgcmVzZXQgdGhlIHN0YXRlLlxuICAgICAgICAvLyBUaGUgcGFyc2luZyBleGNlcHRpb24gd2Ugd2VyZSB0cnlpbmcgdG8gcHJldmVudCB3aWxsIGhhcHBlbiBpbiB0aGUgTkVYVCBwYXJzaW5nIHN0ZXAuIGl0IG1heSBiZSBoYW5kbGVkIGJ5XG4gICAgICAgIC8vIFwiYmV0d2VlbiBydWxlc1wiIHJlc3luYyByZWNvdmVyeSBsYXRlciBpbiB0aGUgZmxvdy5cbiAgICAgICAgdGhpcy5pbXBvcnRMZXhlclN0YXRlKHNhdmVkTGV4ZXJTdGF0ZSk7XG4gICAgfVxuICAgIHNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChleHBlY3RUb2tBZnRlckxhc3RNYXRjaCwgbmV4dFRva0lkeCwgbm90U3R1Y2spIHtcbiAgICAgICAgLy8gRWRnZSBjYXNlIG9mIGFycml2aW5nIGZyb20gYSBNQU5ZIHJlcGV0aXRpb24gd2hpY2ggaXMgc3R1Y2tcbiAgICAgICAgLy8gQXR0ZW1wdGluZyByZWNvdmVyeSBpbiB0aGlzIGNhc2UgY291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICBpZiAobm90U3R1Y2sgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gbmVlZCB0byByZWNvdmVyLCBuZXh0IHRva2VuIGlzIHdoYXQgd2UgZXhwZWN0Li4uXG4gICAgICAgIGlmICh0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLCBleHBlY3RUb2tBZnRlckxhc3RNYXRjaCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlcnJvciByZWNvdmVyeSBpcyBkaXNhYmxlZCBkdXJpbmcgYmFja3RyYWNraW5nIGFzIGl0IGNhbiBtYWtlIHRoZSBwYXJzZXIgaWdub3JlIGEgdmFsaWQgZ3JhbW1hciBwYXRoXG4gICAgICAgIC8vIGFuZCBwcmVmZXIgc29tZSBiYWNrdHJhY2tpbmcgcGF0aCB0aGF0IGluY2x1ZGVzIHJlY292ZXJlZCBlcnJvcnMuXG4gICAgICAgIGlmICh0aGlzLmlzQmFja1RyYWNraW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSBjYW4gcGVyZm9ybSBpblJ1bGUgcmVjb3ZlcnkgKHNpbmdsZSB0b2tlbiBpbnNlcnRpb24gb3IgZGVsZXRpb24pIHdlIGFsd2F5cyBwcmVmZXIgdGhhdCByZWNvdmVyeSBhbGdvcml0aG1cbiAgICAgICAgLy8gYmVjYXVzZSBpZiBpdCB3b3JrcywgaXQgbWFrZXMgdGhlIGxlYXN0IGFtb3VudCBvZiBjaGFuZ2VzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKGdyZWVkeSBhbGdvcml0aG0pXG4gICAgICAgIC8vbm9pbnNwZWN0aW9uIFJlZHVuZGFudElmU3RhdGVtZW50SlNcbiAgICAgICAgaWYgKHRoaXMuY2FuUGVyZm9ybUluUnVsZVJlY292ZXJ5KGV4cGVjdFRva0FmdGVyTGFzdE1hdGNoLCB0aGlzLmdldEZvbGxvd3NGb3JJblJ1bGVSZWNvdmVyeShleHBlY3RUb2tBZnRlckxhc3RNYXRjaCwgbmV4dFRva0lkeCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIEVycm9yIFJlY292ZXJ5IGZ1bmN0aW9uYWxpdHlcbiAgICBnZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkodG9rVHlwZSwgdG9rSWR4SW5SdWxlKSB7XG4gICAgICAgIGNvbnN0IGdyYW1tYXJQYXRoID0gdGhpcy5nZXRDdXJyZW50R3JhbW1hclBhdGgodG9rVHlwZSwgdG9rSWR4SW5SdWxlKTtcbiAgICAgICAgY29uc3QgZm9sbG93cyA9IHRoaXMuZ2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhncmFtbWFyUGF0aCk7XG4gICAgICAgIHJldHVybiBmb2xsb3dzO1xuICAgIH1cbiAgICB0cnlJblJ1bGVSZWNvdmVyeShleHBlY3RlZFRva1R5cGUsIGZvbGxvd3MpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihleHBlY3RlZFRva1R5cGUsIGZvbGxvd3MpKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tUb0luc2VydCA9IHRoaXMuZ2V0VG9rZW5Ub0luc2VydChleHBlY3RlZFRva1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRva1RvSW5zZXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihleHBlY3RlZFRva1R5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9rID0gdGhpcy5TS0lQX1RPS0VOKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVUb2tlbigpO1xuICAgICAgICAgICAgcmV0dXJuIG5leHRUb2s7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEluUnVsZVJlY292ZXJ5RXhjZXB0aW9uKFwic2FkIHNhZCBwYW5kYVwiKTtcbiAgICB9XG4gICAgY2FuUGVyZm9ybUluUnVsZVJlY292ZXJ5KGV4cGVjdGVkVG9rZW4sIGZvbGxvd3MpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZXhwZWN0ZWRUb2tlbiwgZm9sbG93cykgfHxcbiAgICAgICAgICAgIHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGV4cGVjdGVkVG9rZW4pKTtcbiAgICB9XG4gICAgY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihleHBlY3RlZFRva1R5cGUsIGZvbGxvd3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGV4cGVjdGVkVG9rVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtdXN0IGtub3cgdGhlIHBvc3NpYmxlIGZvbGxvd2luZyB0b2tlbnMgdG8gcGVyZm9ybSBzaW5nbGUgdG9rZW4gaW5zZXJ0aW9uXG4gICAgICAgIGlmIChpc0VtcHR5KGZvbGxvd3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlzbWF0Y2hlZFRvayA9IHRoaXMuTEEoMSk7XG4gICAgICAgIGNvbnN0IGlzTWlzTWF0Y2hlZFRva0luRm9sbG93cyA9IGZpbmQoZm9sbG93cywgKHBvc3NpYmxlRm9sbG93c1Rva1R5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuTWF0Y2hlcihtaXNtYXRjaGVkVG9rLCBwb3NzaWJsZUZvbGxvd3NUb2tUeXBlKTtcbiAgICAgICAgfSkgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGlzTWlzTWF0Y2hlZFRva0luRm9sbG93cztcbiAgICB9XG4gICAgY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGV4cGVjdGVkVG9rVHlwZSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShleHBlY3RlZFRva1R5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNOZXh0VG9rZW5XaGF0SXNFeHBlY3RlZCA9IHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksIGV4cGVjdGVkVG9rVHlwZSk7XG4gICAgICAgIHJldHVybiBpc05leHRUb2tlbldoYXRJc0V4cGVjdGVkO1xuICAgIH1cbiAgICBpc0luQ3VycmVudFJ1bGVSZVN5bmNTZXQodG9rZW5UeXBlSWR4KSB7XG4gICAgICAgIGNvbnN0IGZvbGxvd0tleSA9IHRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50UnVsZVJlU3luY1NldCA9IHRoaXMuZ2V0Rm9sbG93U2V0RnJvbUZvbGxvd0tleShmb2xsb3dLZXkpO1xuICAgICAgICByZXR1cm4gaW5jbHVkZXMoY3VycmVudFJ1bGVSZVN5bmNTZXQsIHRva2VuVHlwZUlkeCk7XG4gICAgfVxuICAgIGZpbmRSZVN5bmNUb2tlblR5cGUoKSB7XG4gICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlUmVTeW5jVG9rVHlwZXMgPSB0aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKTtcbiAgICAgICAgLy8gdGhpcyBsb29wIHdpbGwgYWx3YXlzIHRlcm1pbmF0ZSBhcyBFT0YgaXMgYWx3YXlzIGluIHRoZSBmb2xsb3cgc3RhY2sgYW5kIGFsc28gYWx3YXlzICh2aXJ0dWFsbHkpIGluIHRoZSBpbnB1dFxuICAgICAgICBsZXQgbmV4dFRva2VuID0gdGhpcy5MQSgxKTtcbiAgICAgICAgbGV0IGsgPSAyO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmRNYXRjaCA9IGZpbmQoYWxsUG9zc2libGVSZVN5bmNUb2tUeXBlcywgKHJlc3luY1Rva1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5NYXRjaCA9IHRva2VuTWF0Y2hlcihuZXh0VG9rZW4sIHJlc3luY1Rva1R5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW5NYXRjaDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZvdW5kTWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZE1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFRva2VuID0gdGhpcy5MQShrKTtcbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDdXJyRm9sbG93S2V5KCkge1xuICAgICAgICAvLyB0aGUgbGVuZ3RoIGlzIGF0IGxlYXN0IG9uZSBhcyB3ZSBhbHdheXMgYWRkIHRoZSBydWxlTmFtZSB0byB0aGUgc3RhY2sgYmVmb3JlIGludm9raW5nIHRoZSBydWxlLlxuICAgICAgICBpZiAodGhpcy5SVUxFX1NUQUNLLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIEVPRl9GT0xMT1dfS0VZO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJSdWxlU2hvcnROYW1lID0gdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7XG4gICAgICAgIGNvbnN0IGN1cnJSdWxlSWR4ID0gdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlT2NjdXJyZW5jZUluZGV4KCk7XG4gICAgICAgIGNvbnN0IHByZXZSdWxlU2hvcnROYW1lID0gdGhpcy5nZXRQcmV2aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoY3VyclJ1bGVTaG9ydE5hbWUpLFxuICAgICAgICAgICAgaWR4SW5DYWxsaW5nUnVsZTogY3VyclJ1bGVJZHgsXG4gICAgICAgICAgICBpblJ1bGU6IHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUocHJldlJ1bGVTaG9ydE5hbWUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBidWlsZEZ1bGxGb2xsb3dLZXlTdGFjaygpIHtcbiAgICAgICAgY29uc3QgZXhwbGljaXRSdWxlU3RhY2sgPSB0aGlzLlJVTEVfU1RBQ0s7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0T2NjdXJyZW5jZVN0YWNrID0gdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7XG4gICAgICAgIHJldHVybiBtYXAoZXhwbGljaXRSdWxlU3RhY2ssIChydWxlTmFtZSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEVPRl9GT0xMT1dfS0VZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShydWxlTmFtZSksXG4gICAgICAgICAgICAgICAgaWR4SW5DYWxsaW5nUnVsZTogZXhwbGljaXRPY2N1cnJlbmNlU3RhY2tbaWR4XSxcbiAgICAgICAgICAgICAgICBpblJ1bGU6IHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoZXhwbGljaXRSdWxlU3RhY2tbaWR4IC0gMV0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZsYXR0ZW5Gb2xsb3dTZXQoKSB7XG4gICAgICAgIGNvbnN0IGZvbGxvd1N0YWNrID0gbWFwKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSwgKGN1cnJLZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkoY3VycktleSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmxhdHRlbihmb2xsb3dTdGFjayk7XG4gICAgfVxuICAgIGdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkoZm9sbG93S2V5KSB7XG4gICAgICAgIGlmIChmb2xsb3dLZXkgPT09IEVPRl9GT0xMT1dfS0VZKSB7XG4gICAgICAgICAgICByZXR1cm4gW0VPRl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9sbG93TmFtZSA9IGZvbGxvd0tleS5ydWxlTmFtZSArIGZvbGxvd0tleS5pZHhJbkNhbGxpbmdSdWxlICsgSU4gKyBmb2xsb3dLZXkuaW5SdWxlO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN5bmNGb2xsb3dzW2ZvbGxvd05hbWVdO1xuICAgIH1cbiAgICAvLyBJdCBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSB0byBpbmNsdWRlIGEgdmlydHVhbCBFT0YgdG9rZW4gaW4gdGhlIGxpc3Qgb2YgcmVzeW5jZWQgdG9rZW5zXG4gICAgLy8gYXMgRU9GIGRvZXMgbm90IHJlYWxseSBleGlzdCBhbmQgdGh1cyBkb2VzIG5vdCBjb250YWluIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gKGxpbmUvY29sdW1uIG51bWJlcnMpXG4gICAgYWRkVG9SZXN5bmNUb2tlbnModG9rZW4sIHJlc3luY1Rva2Vucykge1xuICAgICAgICBpZiAoIXRoaXMudG9rZW5NYXRjaGVyKHRva2VuLCBFT0YpKSB7XG4gICAgICAgICAgICByZXN5bmNUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3luY1Rva2VucztcbiAgICB9XG4gICAgcmVTeW5jVG8odG9rVHlwZSkge1xuICAgICAgICBjb25zdCByZXN5bmNlZFRva2VucyA9IFtdO1xuICAgICAgICBsZXQgbmV4dFRvayA9IHRoaXMuTEEoMSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRva2VuTWF0Y2hlcihuZXh0VG9rLCB0b2tUeXBlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5leHRUb2sgPSB0aGlzLlNLSVBfVE9LRU4oKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9SZXN5bmNUb2tlbnMobmV4dFRvaywgcmVzeW5jZWRUb2tlbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBsYXN0IHRva2VuIGlzIG5vdCBwYXJ0IG9mIHRoZSBlcnJvci5cbiAgICAgICAgcmV0dXJuIGRyb3BSaWdodChyZXN5bmNlZFRva2Vucyk7XG4gICAgfVxuICAgIGF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShwcm9kRnVuYywgYXJncywgbG9va2FoZWFkRnVuYywgZHNsTWV0aG9kSWR4LCBwcm9kT2NjdXJyZW5jZSwgbmV4dFRva3NXYWxrZXIsIG5vdFN0dWNrKSB7XG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgdGhpcyBpcyBhIE5PLU9QXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gaXMgd2l0aCB0aGUgZnVuY3Rpb24obm90IG1ldGhvZCkgYmVsb3dcbiAgICB9XG4gICAgZ2V0Q3VycmVudEdyYW1tYXJQYXRoKHRva1R5cGUsIHRva0lkeEluUnVsZSkge1xuICAgICAgICBjb25zdCBwYXRoUnVsZVN0YWNrID0gdGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCk7XG4gICAgICAgIGNvbnN0IHBhdGhPY2N1cnJlbmNlU3RhY2sgPSBjbG9uZSh0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7XG4gICAgICAgIGNvbnN0IGdyYW1tYXJQYXRoID0ge1xuICAgICAgICAgICAgcnVsZVN0YWNrOiBwYXRoUnVsZVN0YWNrLFxuICAgICAgICAgICAgb2NjdXJyZW5jZVN0YWNrOiBwYXRoT2NjdXJyZW5jZVN0YWNrLFxuICAgICAgICAgICAgbGFzdFRvazogdG9rVHlwZSxcbiAgICAgICAgICAgIGxhc3RUb2tPY2N1cnJlbmNlOiB0b2tJZHhJblJ1bGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBncmFtbWFyUGF0aDtcbiAgICB9XG4gICAgZ2V0SHVtYW5SZWFkYWJsZVJ1bGVTdGFjaygpIHtcbiAgICAgICAgcmV0dXJuIG1hcCh0aGlzLlJVTEVfU1RBQ0ssIChjdXJyU2hvcnROYW1lKSA9PiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGN1cnJTaG9ydE5hbWUpKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHByb2RGdW5jLCBhcmdzLCBsb29rYWhlYWRGdW5jLCBkc2xNZXRob2RJZHgsIHByb2RPY2N1cnJlbmNlLCBuZXh0VG9rc1dhbGtlciwgbm90U3R1Y2spIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChkc2xNZXRob2RJZHgsIHByb2RPY2N1cnJlbmNlKTtcbiAgICBsZXQgZmlyc3RBZnRlclJlcEluZm8gPSB0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBba2V5XTtcbiAgICBpZiAoZmlyc3RBZnRlclJlcEluZm8gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjdXJyUnVsZU5hbWUgPSB0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKTtcbiAgICAgICAgY29uc3QgcnVsZUdyYW1tYXIgPSB0aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2N1cnJSdWxlTmFtZV07XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IG5ldyBuZXh0VG9rc1dhbGtlcihydWxlR3JhbW1hciwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICBmaXJzdEFmdGVyUmVwSW5mbyA9IHdhbGtlci5zdGFydFdhbGtpbmcoKTtcbiAgICAgICAgdGhpcy5maXJzdEFmdGVyUmVwTWFwW2tleV0gPSBmaXJzdEFmdGVyUmVwSW5mbztcbiAgICB9XG4gICAgbGV0IGV4cGVjdFRva0FmdGVyTGFzdE1hdGNoID0gZmlyc3RBZnRlclJlcEluZm8udG9rZW47XG4gICAgbGV0IG5leHRUb2tJZHggPSBmaXJzdEFmdGVyUmVwSW5mby5vY2N1cnJlbmNlO1xuICAgIGNvbnN0IGlzRW5kT2ZSdWxlID0gZmlyc3RBZnRlclJlcEluZm8uaXNFbmRPZlJ1bGU7XG4gICAgLy8gc3BlY2lhbCBlZGdlIGNhc2Ugb2YgYSBUT1AgbW9zdCByZXBldGl0aW9uIGFmdGVyIHdoaWNoIHRoZSBpbnB1dCBzaG91bGQgRU5ELlxuICAgIC8vIHRoaXMgd2lsbCBmb3JjZSBhbiBhdHRlbXB0IGZvciBpblJ1bGUgcmVjb3ZlcnkgaW4gdGhhdCBzY2VuYXJpby5cbiAgICBpZiAodGhpcy5SVUxFX1NUQUNLLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBpc0VuZE9mUnVsZSAmJlxuICAgICAgICBleHBlY3RUb2tBZnRlckxhc3RNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4cGVjdFRva0FmdGVyTGFzdE1hdGNoID0gRU9GO1xuICAgICAgICBuZXh0VG9rSWR4ID0gMTtcbiAgICB9XG4gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byByZS1zeW5jIHRvLi4uXG4gICAgLy8gdGhpcyBjb25kaXRpb24gd2FzIGV4dHJhY3RlZCBmcm9tIGBzaG91bGRJblJlcGV0aXRpb25SZWNvdmVyeUJlVHJpZWRgIHRvIGFjdCBhcyBhIHR5cGUtZ3VhcmRcbiAgICBpZiAoZXhwZWN0VG9rQWZ0ZXJMYXN0TWF0Y2ggPT09IHVuZGVmaW5lZCB8fCBuZXh0VG9rSWR4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG91bGRJblJlcGV0aXRpb25SZWNvdmVyeUJlVHJpZWQoZXhwZWN0VG9rQWZ0ZXJMYXN0TWF0Y2gsIG5leHRUb2tJZHgsIG5vdFN0dWNrKSkge1xuICAgICAgICAvLyBUT0RPOiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGluc3RlYWQgb2YgcGFzc2luZyB0aGUgb3JpZ2luYWwgYXJncyBoZXJlLCB3ZSBtb2RpZnlcbiAgICAgICAgLy8gdGhlIGFyZ3MgcGFyYW0gKG9yIGNyZWF0ZSBhIG5ldyBvbmUpIGFuZCBtYWtlIHN1cmUgdGhlIGxvb2thaGVhZCBmdW5jIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWRcbiAgICAgICAgLy8gdG8gYXZvaWQgc2VhcmNoaW5nIHRoZSBjYWNoZSBmb3IgaXQgb25jZSBtb3JlLlxuICAgICAgICB0aGlzLnRyeUluUmVwZXRpdGlvblJlY292ZXJ5KHByb2RGdW5jLCBhcmdzLCBsb29rYWhlYWRGdW5jLCBleHBlY3RUb2tBZnRlckxhc3RNYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVjb3ZlcmFibGUuanMubWFwIiwKICAgICIvLyBMb29rYWhlYWQga2V5cyBhcmUgMzJCaXQgaW50ZWdlcnMgaW4gdGhlIGZvcm1cbi8vIFRUVFRUVFRULVpaWlpaWlpaWlpaWi1ZWVlZLVhYWFhYWFhYXG4vLyBYWFhYIC0+IE9jY3VycmVuY2UgSW5kZXggYml0bWFwLlxuLy8gWVlZWSAtPiBEU0wgTWV0aG9kIFR5cGUgYml0bWFwLlxuLy8gWlpaWlpaWlpaWlpaWlpaIC0+IFJ1bGUgc2hvcnQgSW5kZXggYml0bWFwLlxuLy8gVFRUVFRUVFRUIC0+IGFsdGVybmF0aW9uIGFsdGVybmF0aXZlIGluZGV4IGJpdG1hcFxuZXhwb3J0IGNvbnN0IEJJVFNfRk9SX01FVEhPRF9UWVBFID0gNDtcbmV4cG9ydCBjb25zdCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWCA9IDg7XG5leHBvcnQgY29uc3QgQklUU19GT1JfUlVMRV9JRFggPSAxMjtcbi8vIFRPRE86IHZhbGlkYXRpb24sIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBtYXkgYXQgbW9zdCAyXjggLS0+IDI1NiBhbHRlcm5hdGl2ZXMgZm9yIGFuIGFsdGVybmF0aW9uLlxuZXhwb3J0IGNvbnN0IEJJVFNfRk9SX0FMVF9JRFggPSA4O1xuLy8gc2hvcnQgc3RyaW5nIHVzZWQgYXMgcGFydCBvZiBtYXBwaW5nIGtleXMuXG4vLyBiZWluZyBzaG9ydCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugd2hlbiBjb21wb3NpbmcgS0VZUyBmb3IgbWFwcyBvdXQgb2YgdGhlc2Vcbi8vIFRoZSA1IC0gOCBiaXRzICgxNiBwb3NzaWJsZSB2YWx1ZXMsIGFyZSByZXNlcnZlZCBmb3IgdGhlIERTTCBtZXRob2QgaW5kaWNlcylcbmV4cG9ydCBjb25zdCBPUl9JRFggPSAxIDw8IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYO1xuZXhwb3J0IGNvbnN0IE9QVElPTl9JRFggPSAyIDw8IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYO1xuZXhwb3J0IGNvbnN0IE1BTllfSURYID0gMyA8PCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWDtcbmV4cG9ydCBjb25zdCBBVF9MRUFTVF9PTkVfSURYID0gNCA8PCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWDtcbmV4cG9ydCBjb25zdCBNQU5ZX1NFUF9JRFggPSA1IDw8IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYO1xuZXhwb3J0IGNvbnN0IEFUX0xFQVNUX09ORV9TRVBfSURYID0gNiA8PCBCSVRTX0ZPUl9PQ0NVUlJFTkNFX0lEWDtcbi8vIHRoaXMgYWN0dWFsbHkgcmV0dXJucyBhIG51bWJlciwgYnV0IGl0IGlzIGFsd2F5cyB1c2VkIGFzIGEgc3RyaW5nIChvYmplY3QgcHJvcCBrZXkpXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKHJ1bGVJZHgsIGRzbE1ldGhvZElkeCwgb2NjdXJyZW5jZSkge1xuICAgIHJldHVybiBvY2N1cnJlbmNlIHwgZHNsTWV0aG9kSWR4IHwgcnVsZUlkeDtcbn1cbmNvbnN0IEJJVFNfU1RBUlRfRk9SX0FMVF9JRFggPSAzMiAtIEJJVFNfRk9SX0FMVF9JRFg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXlzLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZmxhdE1hcCwgaXNFbXB0eSB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlciB9IGZyb20gXCIuLi9lcnJvcnNfcHVibGljLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcywgdmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmUsIHZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uLCB2YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgsIH0gZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgeyBidWlsZEFsdGVybmF0aXZlc0xvb2tBaGVhZEZ1bmMsIGJ1aWxkTG9va2FoZWFkRnVuY0Zvck9wdGlvbmFsUHJvZCwgYnVpbGRMb29rYWhlYWRGdW5jRm9yT3IsIGJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiwgZ2V0UHJvZFR5cGUsIH0gZnJvbSBcIi4vbG9va2FoZWFkLmpzXCI7XG5leHBvcnQgY2xhc3MgTExrTG9va2FoZWFkU3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLm1heExvb2thaGVhZCA9XG4gICAgICAgICAgICAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWF4TG9va2FoZWFkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1BBUlNFUl9DT05GSUcubWF4TG9va2FoZWFkO1xuICAgIH1cbiAgICB2YWxpZGF0ZShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxlZnRSZWN1cnNpb25FcnJvcnMgPSB0aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKG9wdGlvbnMucnVsZXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShsZWZ0UmVjdXJzaW9uRXJyb3JzKSkge1xuICAgICAgICAgICAgY29uc3QgZW1wdHlBbHRFcnJvcnMgPSB0aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhvcHRpb25zLnJ1bGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGFtYmlndW91c0FsdHNFcnJvcnMgPSB0aGlzLnZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMob3B0aW9ucy5ydWxlcywgdGhpcy5tYXhMb29rYWhlYWQpO1xuICAgICAgICAgICAgY29uc3QgZW1wdHlSZXBldGl0aW9uRXJyb3JzID0gdGhpcy52YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgob3B0aW9ucy5ydWxlcywgdGhpcy5tYXhMb29rYWhlYWQpO1xuICAgICAgICAgICAgY29uc3QgYWxsRXJyb3JzID0gW1xuICAgICAgICAgICAgICAgIC4uLmxlZnRSZWN1cnNpb25FcnJvcnMsXG4gICAgICAgICAgICAgICAgLi4uZW1wdHlBbHRFcnJvcnMsXG4gICAgICAgICAgICAgICAgLi4uYW1iaWd1b3VzQWx0c0Vycm9ycyxcbiAgICAgICAgICAgICAgICAuLi5lbXB0eVJlcGV0aXRpb25FcnJvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIGFsbEVycm9ycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVmdFJlY3Vyc2lvbkVycm9ycztcbiAgICB9XG4gICAgdmFsaWRhdGVOb0xlZnRSZWN1cnNpb24ocnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZsYXRNYXAocnVsZXMsIChjdXJyVG9wUnVsZSkgPT4gdmFsaWRhdGVOb0xlZnRSZWN1cnNpb24oY3VyclRvcFJ1bGUsIGN1cnJUb3BSdWxlLCBkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgdmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmVzKHJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwKHJ1bGVzLCAoY3VyclRvcFJ1bGUpID0+IHZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlKGN1cnJUb3BSdWxlLCBkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgdmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhydWxlcywgbWF4TG9va2FoZWFkKSB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwKHJ1bGVzLCAoY3VyclRvcFJ1bGUpID0+IHZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMoY3VyclRvcFJ1bGUsIG1heExvb2thaGVhZCwgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyKSk7XG4gICAgfVxuICAgIHZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChydWxlcywgbWF4TG9va2FoZWFkKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVNvbWVOb25FbXB0eUxvb2thaGVhZFBhdGgocnVsZXMsIG1heExvb2thaGVhZCwgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyKTtcbiAgICB9XG4gICAgYnVpbGRMb29rYWhlYWRGb3JBbHRlcm5hdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBidWlsZExvb2thaGVhZEZ1bmNGb3JPcihvcHRpb25zLnByb2RPY2N1cnJlbmNlLCBvcHRpb25zLnJ1bGUsIG9wdGlvbnMubWF4TG9va2FoZWFkLCBvcHRpb25zLmhhc1ByZWRpY2F0ZXMsIG9wdGlvbnMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsIGJ1aWxkQWx0ZXJuYXRpdmVzTG9va0FoZWFkRnVuYyk7XG4gICAgfVxuICAgIGJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYnVpbGRMb29rYWhlYWRGdW5jRm9yT3B0aW9uYWxQcm9kKG9wdGlvbnMucHJvZE9jY3VycmVuY2UsIG9wdGlvbnMucnVsZSwgb3B0aW9ucy5tYXhMb29rYWhlYWQsIG9wdGlvbnMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsIGdldFByb2RUeXBlKG9wdGlvbnMucHJvZFR5cGUpLCBidWlsZFNpbmdsZUFsdGVybmF0aXZlTG9va2FoZWFkRnVuY3Rpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxsa19sb29rYWhlYWQuanMubWFwIiwKICAgICJpbXBvcnQgeyBmb3JFYWNoLCBoYXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBBVF9MRUFTVF9PTkVfSURYLCBBVF9MRUFTVF9PTkVfU0VQX0lEWCwgZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkLCBNQU5ZX0lEWCwgTUFOWV9TRVBfSURYLCBPUFRJT05fSURYLCBPUl9JRFgsIH0gZnJvbSBcIi4uLy4uL2dyYW1tYXIva2V5cy5qc1wiO1xuaW1wb3J0IHsgR0FzdFZpc2l0b3IsIGdldFByb2R1Y3Rpb25Ec2xOYW1lLCB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG5pbXBvcnQgeyBMTGtMb29rYWhlYWRTdHJhdGVneSB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2xsa19sb29rYWhlYWQuanNcIjtcbi8qKlxuICogVHJhaXQgcmVzcG9uc2libGUgZm9yIHRoZSBsb29rYWhlYWQgcmVsYXRlZCB1dGlsaXRpZXMgYW5kIG9wdGltaXphdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb29rc0FoZWFkIHtcbiAgICBpbml0TG9va3NBaGVhZChjb25maWcpIHtcbiAgICAgICAgdGhpcy5keW5hbWljVG9rZW5zRW5hYmxlZCA9IGhhcyhjb25maWcsIFwiZHluYW1pY1Rva2Vuc0VuYWJsZWRcIilcbiAgICAgICAgICAgID8gY29uZmlnLmR5bmFtaWNUb2tlbnNFbmFibGVkIC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgICAgIDogREVGQVVMVF9QQVJTRVJfQ09ORklHLmR5bmFtaWNUb2tlbnNFbmFibGVkO1xuICAgICAgICB0aGlzLm1heExvb2thaGVhZCA9IGhhcyhjb25maWcsIFwibWF4TG9va2FoZWFkXCIpXG4gICAgICAgICAgICA/IGNvbmZpZy5tYXhMb29rYWhlYWQgLy8gYXNzdW1lcyBlbmQgdXNlciBwcm92aWRlcyB0aGUgY29ycmVjdCBjb25maWcgdmFsdWUvdHlwZVxuICAgICAgICAgICAgOiBERUZBVUxUX1BBUlNFUl9DT05GSUcubWF4TG9va2FoZWFkO1xuICAgICAgICB0aGlzLmxvb2thaGVhZFN0cmF0ZWd5ID0gaGFzKGNvbmZpZywgXCJsb29rYWhlYWRTdHJhdGVneVwiKVxuICAgICAgICAgICAgPyBjb25maWcubG9va2FoZWFkU3RyYXRlZ3kgLy8gYXNzdW1lcyBlbmQgdXNlciBwcm92aWRlcyB0aGUgY29ycmVjdCBjb25maWcgdmFsdWUvdHlwZVxuICAgICAgICAgICAgOiBuZXcgTExrTG9va2FoZWFkU3RyYXRlZ3koeyBtYXhMb29rYWhlYWQ6IHRoaXMubWF4TG9va2FoZWFkIH0pO1xuICAgICAgICB0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMocnVsZXMpIHtcbiAgICAgICAgZm9yRWFjaChydWxlcywgKGN1cnJSdWxlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7Y3VyclJ1bGUubmFtZX0gUnVsZSBMb29rYWhlYWRgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhbHRlcm5hdGlvbiwgcmVwZXRpdGlvbiwgb3B0aW9uLCByZXBldGl0aW9uTWFuZGF0b3J5LCByZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgcmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIH0gPSBjb2xsZWN0TWV0aG9kcyhjdXJyUnVsZSk7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChhbHRlcm5hdGlvbiwgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2RJZHggPSBjdXJyUHJvZC5pZHggPT09IDAgPyBcIlwiIDogY3VyclByb2QuaWR4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7Z2V0UHJvZHVjdGlvbkRzbE5hbWUoY3VyclByb2QpfSR7cHJvZElkeH1gLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYUZ1bmMgPSB0aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2RPY2N1cnJlbmNlOiBjdXJyUHJvZC5pZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogY3VyclJ1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TG9va2FoZWFkOiBjdXJyUHJvZC5tYXhMb29rYWhlYWQgfHwgdGhpcy5tYXhMb29rYWhlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUHJlZGljYXRlczogY3VyclByb2QuaGFzUHJlZGljYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljVG9rZW5zRW5hYmxlZDogdGhpcy5keW5hbWljVG9rZW5zRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtjdXJyUnVsZS5uYW1lXSwgT1JfSURYLCBjdXJyUHJvZC5pZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYUZ1bmNDYWNoZShrZXksIGxhRnVuYyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvckVhY2gocmVwZXRpdGlvbiwgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUxvb2thaGVhZEZ1bmMoY3VyclJ1bGUsIGN1cnJQcm9kLmlkeCwgTUFOWV9JRFgsIFwiUmVwZXRpdGlvblwiLCBjdXJyUHJvZC5tYXhMb29rYWhlYWQsIGdldFByb2R1Y3Rpb25Ec2xOYW1lKGN1cnJQcm9kKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChvcHRpb24sIChjdXJyUHJvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKGN1cnJSdWxlLCBjdXJyUHJvZC5pZHgsIE9QVElPTl9JRFgsIFwiT3B0aW9uXCIsIGN1cnJQcm9kLm1heExvb2thaGVhZCwgZ2V0UHJvZHVjdGlvbkRzbE5hbWUoY3VyclByb2QpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHJlcGV0aXRpb25NYW5kYXRvcnksIChjdXJyUHJvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKGN1cnJSdWxlLCBjdXJyUHJvZC5pZHgsIEFUX0xFQVNUX09ORV9JRFgsIFwiUmVwZXRpdGlvbk1hbmRhdG9yeVwiLCBjdXJyUHJvZC5tYXhMb29rYWhlYWQsIGdldFByb2R1Y3Rpb25Ec2xOYW1lKGN1cnJQcm9kKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgKGN1cnJQcm9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUxvb2thaGVhZEZ1bmMoY3VyclJ1bGUsIGN1cnJQcm9kLmlkeCwgQVRfTEVBU1RfT05FX1NFUF9JRFgsIFwiUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3JcIiwgY3VyclByb2QubWF4TG9va2FoZWFkLCBnZXRQcm9kdWN0aW9uRHNsTmFtZShjdXJyUHJvZCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvckVhY2gocmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIChjdXJyUHJvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKGN1cnJSdWxlLCBjdXJyUHJvZC5pZHgsIE1BTllfU0VQX0lEWCwgXCJSZXBldGl0aW9uV2l0aFNlcGFyYXRvclwiLCBjdXJyUHJvZC5tYXhMb29rYWhlYWQsIGdldFByb2R1Y3Rpb25Ec2xOYW1lKGN1cnJQcm9kKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbXB1dGVMb29rYWhlYWRGdW5jKHJ1bGUsIHByb2RPY2N1cnJlbmNlLCBwcm9kS2V5LCBwcm9kVHlwZSwgcHJvZE1heExvb2thaGVhZCwgZHNsTWV0aG9kTmFtZSkge1xuICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7ZHNsTWV0aG9kTmFtZX0ke3Byb2RPY2N1cnJlbmNlID09PSAwID8gXCJcIiA6IHByb2RPY2N1cnJlbmNlfWAsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhRnVuYyA9IHRoaXMubG9va2FoZWFkU3RyYXRlZ3kuYnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbCh7XG4gICAgICAgICAgICAgICAgcHJvZE9jY3VycmVuY2UsXG4gICAgICAgICAgICAgICAgcnVsZSxcbiAgICAgICAgICAgICAgICBtYXhMb29rYWhlYWQ6IHByb2RNYXhMb29rYWhlYWQgfHwgdGhpcy5tYXhMb29rYWhlYWQsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Rva2Vuc0VuYWJsZWQ6IHRoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgcHJvZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbcnVsZS5uYW1lXSwgcHJvZEtleSwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRMYUZ1bmNDYWNoZShrZXksIGxhRnVuYyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyB0aGlzIGFjdHVhbGx5IHJldHVybnMgYSBudW1iZXIsIGJ1dCBpdCBpcyBhbHdheXMgdXNlZCBhcyBhIHN0cmluZyAob2JqZWN0IHByb3Aga2V5KVxuICAgIGdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChkc2xNZXRob2RJZHgsIG9jY3VycmVuY2UpIHtcbiAgICAgICAgY29uc3QgY3VyclJ1bGVTaG9ydE5hbWUgPSB0aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtcbiAgICAgICAgcmV0dXJuIGdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZChjdXJyUnVsZVNob3J0TmFtZSwgZHNsTWV0aG9kSWR4LCBvY2N1cnJlbmNlKTtcbiAgICB9XG4gICAgZ2V0TGFGdW5jRnJvbUNhY2hlKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHNldExhRnVuY0NhY2hlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5sb29rQWhlYWRGdW5jc0NhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG59XG5jbGFzcyBEc2xNZXRob2RzQ29sbGVjdG9yVmlzaXRvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5kc2xNZXRob2RzID0ge1xuICAgICAgICAgICAgb3B0aW9uOiBbXSxcbiAgICAgICAgICAgIGFsdGVybmF0aW9uOiBbXSxcbiAgICAgICAgICAgIHJlcGV0aXRpb246IFtdLFxuICAgICAgICAgICAgcmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6IFtdLFxuICAgICAgICAgICAgcmVwZXRpdGlvbk1hbmRhdG9yeTogW10sXG4gICAgICAgICAgICByZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjogW10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmRzbE1ldGhvZHMgPSB7XG4gICAgICAgICAgICBvcHRpb246IFtdLFxuICAgICAgICAgICAgYWx0ZXJuYXRpb246IFtdLFxuICAgICAgICAgICAgcmVwZXRpdGlvbjogW10sXG4gICAgICAgICAgICByZXBldGl0aW9uV2l0aFNlcGFyYXRvcjogW10sXG4gICAgICAgICAgICByZXBldGl0aW9uTWFuZGF0b3J5OiBbXSxcbiAgICAgICAgICAgIHJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmlzaXRPcHRpb24ob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChvcHRpb24pO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG1hbnlTZXApIHtcbiAgICAgICAgdGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLnB1c2gobWFueVNlcCk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShhdExlYXN0T25lKSB7XG4gICAgICAgIHRoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uTWFuZGF0b3J5LnB1c2goYXRMZWFzdE9uZSk7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoYXRMZWFzdE9uZVNlcCkge1xuICAgICAgICB0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IucHVzaChhdExlYXN0T25lU2VwKTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uKG1hbnkpIHtcbiAgICAgICAgdGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb24ucHVzaChtYW55KTtcbiAgICB9XG4gICAgdmlzaXRBbHRlcm5hdGlvbihvcikge1xuICAgICAgICB0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChvcik7XG4gICAgfVxufVxuY29uc3QgY29sbGVjdG9yVmlzaXRvciA9IG5ldyBEc2xNZXRob2RzQ29sbGVjdG9yVmlzaXRvcigpO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RNZXRob2RzKHJ1bGUpIHtcbiAgICBjb2xsZWN0b3JWaXNpdG9yLnJlc2V0KCk7XG4gICAgcnVsZS5hY2NlcHQoY29sbGVjdG9yVmlzaXRvcik7XG4gICAgY29uc3QgZHNsTWV0aG9kcyA9IGNvbGxlY3RvclZpc2l0b3IuZHNsTWV0aG9kcztcbiAgICAvLyBhdm9pZCB1bmNsZWFuZWQgcmVmZXJlbmNlc1xuICAgIGNvbGxlY3RvclZpc2l0b3IucmVzZXQoKTtcbiAgICByZXR1cm4gZHNsTWV0aG9kcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvb2tzYWhlYWQuanMubWFwIiwKICAgICIvKipcbiAqIFRoaXMgbm9kZUxvY2F0aW9uIHRyYWNraW5nIGlzIG5vdCBlZmZpY2llbnQgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWRcbiAqIHdoZW4gZXJyb3IgcmVjb3ZlcnkgaXMgZW5hYmxlZCBvciB0aGUgVG9rZW4gVmVjdG9yIGNvbnRhaW5zIHZpcnR1YWwgVG9rZW5zXG4gKiAoZS5nLCBQeXRob24gSW5kZW50L091dGRlbnQpXG4gKiBBcyBpdCBleGVjdXRlcyB0aGUgY2FsY3VsYXRpb24gZm9yIGV2ZXJ5IHNpbmdsZSB0ZXJtaW5hbC9ub25UZXJtaW5hbFxuICogYW5kIGRvZXMgbm90IHJlbHkgb24gdGhlIGZhY3QgdGhlIHRva2VuIHZlY3RvciBpcyAqKnNvcnRlZCoqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROb2RlTG9jYXRpb25Pbmx5T2Zmc2V0KGN1cnJOb2RlTG9jYXRpb24sIG5ld0xvY2F0aW9uSW5mbykge1xuICAgIC8vIEZpcnN0ICh2YWxpZCkgdXBkYXRlIGZvciB0aGlzIGNzdCBub2RlXG4gICAgaWYgKGlzTmFOKGN1cnJOb2RlTG9jYXRpb24uc3RhcnRPZmZzZXQpID09PSB0cnVlKSB7XG4gICAgICAgIC8vIGFzc3VtcHRpb24xOiBUb2tlbiBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBlaXRoZXIgTmFOIG9yIGEgdmFsaWQgbnVtYmVyXG4gICAgICAgIC8vIGFzc3VtcHRpb24yOiBUb2tlbiBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBmdWxseSB2YWxpZCBpZiBpdCBleGlzdFxuICAgICAgICAvLyAoYm90aCBzdGFydC9lbmQgb2Zmc2V0cyBleGlzdCBhbmQgYXJlIG51bWJlcnMpLlxuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLnN0YXJ0T2Zmc2V0ID0gbmV3TG9jYXRpb25JbmZvLnN0YXJ0T2Zmc2V0O1xuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLmVuZE9mZnNldCA9IG5ld0xvY2F0aW9uSW5mby5lbmRPZmZzZXQ7XG4gICAgfVxuICAgIC8vIE9uY2UgdGhlIHN0YXJ0T2Zmc2V0IGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBhIHZhbGlkIG51bWJlciBpdCBzaG91bGQgbmV2ZXIgcmVjZWl2ZVxuICAgIC8vIGFueSBmYXJ0aGVyIHVwZGF0ZXMgYXMgdGhlIFRva2VuIHZlY3RvciBpcyBzb3J0ZWQuXG4gICAgLy8gV2Ugc3RpbGwgaGF2ZSB0byBjaGVjayB0aGlzIHRoaXMgY29uZGl0aW9uIGZvciBldmVyeSBuZXcgcG9zc2libGUgbG9jYXRpb24gaW5mb1xuICAgIC8vIGJlY2F1c2Ugd2l0aCBlcnJvciByZWNvdmVyeSBlbmFibGVkIHdlIG1heSBlbmNvdW50ZXIgaW52YWxpZCB0b2tlbnMgKE5hTiBsb2NhdGlvbiBwcm9wcylcbiAgICBlbHNlIGlmIChjdXJyTm9kZUxvY2F0aW9uLmVuZE9mZnNldCA8IG5ld0xvY2F0aW9uSW5mby5lbmRPZmZzZXQgPT09IHRydWUpIHtcbiAgICAgICAgY3Vyck5vZGVMb2NhdGlvbi5lbmRPZmZzZXQgPSBuZXdMb2NhdGlvbkluZm8uZW5kT2Zmc2V0O1xuICAgIH1cbn1cbi8qKlxuICogVGhpcyBub2RlTG9jYXRpb24gdHJhY2tpbmcgaXMgbm90IGVmZmljaWVudCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZFxuICogd2hlbiBlcnJvciByZWNvdmVyeSBpcyBlbmFibGVkIG9yIHRoZSBUb2tlbiBWZWN0b3IgY29udGFpbnMgdmlydHVhbCBUb2tlbnNcbiAqIChlLmcsIFB5dGhvbiBJbmRlbnQvT3V0ZGVudClcbiAqIEFzIGl0IGV4ZWN1dGVzIHRoZSBjYWxjdWxhdGlvbiBmb3IgZXZlcnkgc2luZ2xlIHRlcm1pbmFsL25vblRlcm1pbmFsXG4gKiBhbmQgZG9lcyBub3QgcmVseSBvbiB0aGUgZmFjdCB0aGUgdG9rZW4gdmVjdG9yIGlzICoqc29ydGVkKipcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE5vZGVMb2NhdGlvbkZ1bGwoY3Vyck5vZGVMb2NhdGlvbiwgbmV3TG9jYXRpb25JbmZvKSB7XG4gICAgLy8gRmlyc3QgKHZhbGlkKSB1cGRhdGUgZm9yIHRoaXMgY3N0IG5vZGVcbiAgICBpZiAoaXNOYU4oY3Vyck5vZGVMb2NhdGlvbi5zdGFydE9mZnNldCkgPT09IHRydWUpIHtcbiAgICAgICAgLy8gYXNzdW1wdGlvbjE6IFRva2VuIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIGVpdGhlciBOYU4gb3IgYSB2YWxpZCBudW1iZXJcbiAgICAgICAgLy8gYXNzdW1wdGlvbjI6IFRva2VuIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIGZ1bGx5IHZhbGlkIGlmIGl0IGV4aXN0XG4gICAgICAgIC8vIChhbGwgc3RhcnQvZW5kIHByb3BzIGV4aXN0IGFuZCBhcmUgbnVtYmVycykuXG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBuZXdMb2NhdGlvbkluZm8uc3RhcnRPZmZzZXQ7XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uc3RhcnRDb2x1bW4gPSBuZXdMb2NhdGlvbkluZm8uc3RhcnRDb2x1bW47XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uc3RhcnRMaW5lID0gbmV3TG9jYXRpb25JbmZvLnN0YXJ0TGluZTtcbiAgICAgICAgY3Vyck5vZGVMb2NhdGlvbi5lbmRPZmZzZXQgPSBuZXdMb2NhdGlvbkluZm8uZW5kT2Zmc2V0O1xuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLmVuZENvbHVtbiA9IG5ld0xvY2F0aW9uSW5mby5lbmRDb2x1bW47XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uZW5kTGluZSA9IG5ld0xvY2F0aW9uSW5mby5lbmRMaW5lO1xuICAgIH1cbiAgICAvLyBPbmNlIHRoZSBzdGFydCBwcm9wcyBoYXMgYmVlbiB1cGRhdGVkIHdpdGggYSB2YWxpZCBudW1iZXIgaXQgc2hvdWxkIG5ldmVyIHJlY2VpdmVcbiAgICAvLyBhbnkgZmFydGhlciB1cGRhdGVzIGFzIHRoZSBUb2tlbiB2ZWN0b3IgaXMgc29ydGVkLlxuICAgIC8vIFdlIHN0aWxsIGhhdmUgdG8gY2hlY2sgdGhpcyB0aGlzIGNvbmRpdGlvbiBmb3IgZXZlcnkgbmV3IHBvc3NpYmxlIGxvY2F0aW9uIGluZm9cbiAgICAvLyBiZWNhdXNlIHdpdGggZXJyb3IgcmVjb3ZlcnkgZW5hYmxlZCB3ZSBtYXkgZW5jb3VudGVyIGludmFsaWQgdG9rZW5zIChOYU4gbG9jYXRpb24gcHJvcHMpXG4gICAgZWxzZSBpZiAoY3Vyck5vZGVMb2NhdGlvbi5lbmRPZmZzZXQgPCBuZXdMb2NhdGlvbkluZm8uZW5kT2Zmc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIGN1cnJOb2RlTG9jYXRpb24uZW5kT2Zmc2V0ID0gbmV3TG9jYXRpb25JbmZvLmVuZE9mZnNldDtcbiAgICAgICAgY3Vyck5vZGVMb2NhdGlvbi5lbmRDb2x1bW4gPSBuZXdMb2NhdGlvbkluZm8uZW5kQ29sdW1uO1xuICAgICAgICBjdXJyTm9kZUxvY2F0aW9uLmVuZExpbmUgPSBuZXdMb2NhdGlvbkluZm8uZW5kTGluZTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYWRkVGVybWluYWxUb0NzdChub2RlLCB0b2tlbiwgdG9rZW5UeXBlTmFtZSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuW3Rva2VuVHlwZU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlblt0b2tlblR5cGVOYW1lXSA9IFt0b2tlbl07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkcmVuW3Rva2VuVHlwZU5hbWVdLnB1c2godG9rZW4pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGROb25lVGVybWluYWxUb0NzdChub2RlLCBydWxlTmFtZSwgcnVsZVJlc3VsdCkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuW3J1bGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5bcnVsZU5hbWVdID0gW3J1bGVSZXN1bHRdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltydWxlTmFtZV0ucHVzaChydWxlUmVzdWx0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jc3QuanMubWFwIiwKICAgICJjb25zdCBOQU1FID0gXCJuYW1lXCI7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTmFtZVByb3Aob2JqLCBuYW1lVmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBOQU1FLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5hbWVWYWx1ZSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhbmdfZXh0ZW5zaW9ucy5qcy5tYXAiLAogICAgImltcG9ydCB7IGNvbXBhY3QsIGZpbHRlciwgZm9yRWFjaCwgaXNBcnJheSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNVbmRlZmluZWQsIGtleXMsIG1hcCwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBkZWZpbmVOYW1lUHJvcCB9IGZyb20gXCIuLi8uLi9sYW5nL2xhbmdfZXh0ZW5zaW9ucy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRWaXNpdChjdHgsIHBhcmFtKSB7XG4gICAgY29uc3QgY2hpbGRyZW5OYW1lcyA9IGtleXMoY3R4KTtcbiAgICBjb25zdCBjaGlsZHJlbk5hbWVzTGVuZ3RoID0gY2hpbGRyZW5OYW1lcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbk5hbWVzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY3VyckNoaWxkTmFtZSA9IGNoaWxkcmVuTmFtZXNbaV07XG4gICAgICAgIGNvbnN0IGN1cnJDaGlsZEFycmF5ID0gY3R4W2N1cnJDaGlsZE5hbWVdO1xuICAgICAgICBjb25zdCBjdXJyQ2hpbGRBcnJheUxlbmd0aCA9IGN1cnJDaGlsZEFycmF5Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyQ2hpbGRBcnJheUxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGRBcnJheVtqXTtcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGJldHdlZW4gVG9rZW5zIENoaWxkcmVuIGFuZCBDc3ROb2RlIGNoaWxkcmVuXG4gICAgICAgICAgICBpZiAoY3VyckNoaWxkLnRva2VuVHlwZUlkeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tjdXJyQ2hpbGQubmFtZV0oY3VyckNoaWxkLmNoaWxkcmVuLCBwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZGVmYXVsdFZpc2l0IGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyBvdXQgcGFyYW1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCYXNlU2VtYW50aWNWaXNpdG9yQ29uc3RydWN0b3IoZ3JhbW1hck5hbWUsIHJ1bGVOYW1lcykge1xuICAgIGNvbnN0IGRlcml2ZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYWNjb3JkaW5nIHRvOlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Z1bmN0aW9uL1xuICAgIC8vIG5hbWU/cmVkaXJlY3Rsb2NhbGU9ZW4tVVMmcmVkaXJlY3RzbHVnPUphdmFTY3JpcHQlMkZSZWZlcmVuY2UlMkZHbG9iYWxfT2JqZWN0cyUyRkZ1bmN0aW9uJTJGbmFtZVxuICAgIGRlZmluZU5hbWVQcm9wKGRlcml2ZWRDb25zdHJ1Y3RvciwgZ3JhbW1hck5hbWUgKyBcIkJhc2VTZW1hbnRpY3NcIik7XG4gICAgY29uc3Qgc2VtYW50aWNQcm90byA9IHtcbiAgICAgICAgdmlzaXQ6IGZ1bmN0aW9uIChjc3ROb2RlLCBwYXJhbSkge1xuICAgICAgICAgICAgLy8gZW5hYmxlcyB3cml0aW5nIG1vcmUgY29uY2lzZSB2aXNpdG9yIG1ldGhvZHMgd2hlbiBDc3ROb2RlIGhhcyBvbmx5IGEgc2luZ2xlIGNoaWxkXG4gICAgICAgICAgICBpZiAoaXNBcnJheShjc3ROb2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIEEgQ1NUIE5vZGUncyBjaGlsZHJlbiBkaWN0aW9uYXJ5IGNhbiBuZXZlciBoYXZlIGVtcHR5IGFycmF5cyBhcyB2YWx1ZXNcbiAgICAgICAgICAgICAgICAvLyBJZiBhIGtleSBpcyBkZWZpbmVkIHRoZXJlIHdpbGwgYmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYXJyYXkuXG4gICAgICAgICAgICAgICAgY3N0Tm9kZSA9IGNzdE5vZGVbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbmFibGVzIHBhc3Npbmcgb3B0aW9uYWwgQ3N0Tm9kZXMgY29uY2lzZWx5LlxuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNzdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzW2NzdE5vZGUubmFtZV0oY3N0Tm9kZS5jaGlsZHJlbiwgcGFyYW0pO1xuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0ZVZpc2l0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbWFudGljRGVmaW5pdGlvbkVycm9ycyA9IHZhbGlkYXRlVmlzaXRvcih0aGlzLCBydWxlTmFtZXMpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHNlbWFudGljRGVmaW5pdGlvbkVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gbWFwKHNlbWFudGljRGVmaW5pdGlvbkVycm9ycywgKGN1cnJEZWZFcnJvcikgPT4gY3VyckRlZkVycm9yLm1zZyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEVycm9ycyBEZXRlY3RlZCBpbiBDU1QgVmlzaXRvciA8JHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9PjpcXG5cXHRgICtcbiAgICAgICAgICAgICAgICAgICAgYCR7ZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXFxuXCIpLnJlcGxhY2UoL1xcbi9nLCBcIlxcblxcdFwiKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGRlcml2ZWRDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBzZW1hbnRpY1Byb3RvO1xuICAgIGRlcml2ZWRDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBkZXJpdmVkQ29uc3RydWN0b3I7XG4gICAgZGVyaXZlZENvbnN0cnVjdG9yLl9SVUxFX05BTUVTID0gcnVsZU5hbWVzO1xuICAgIHJldHVybiBkZXJpdmVkQ29uc3RydWN0b3I7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZVZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cyhncmFtbWFyTmFtZSwgcnVsZU5hbWVzLCBiYXNlQ29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBkZXJpdmVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGFjY29yZGluZyB0bzpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9cbiAgICAvLyBuYW1lP3JlZGlyZWN0bG9jYWxlPWVuLVVTJnJlZGlyZWN0c2x1Zz1KYXZhU2NyaXB0JTJGUmVmZXJlbmNlJTJGR2xvYmFsX09iamVjdHMlMkZGdW5jdGlvbiUyRm5hbWVcbiAgICBkZWZpbmVOYW1lUHJvcChkZXJpdmVkQ29uc3RydWN0b3IsIGdyYW1tYXJOYW1lICsgXCJCYXNlU2VtYW50aWNzV2l0aERlZmF1bHRzXCIpO1xuICAgIGNvbnN0IHdpdGhEZWZhdWx0c1Byb3RvID0gT2JqZWN0LmNyZWF0ZShiYXNlQ29uc3RydWN0b3IucHJvdG90eXBlKTtcbiAgICBmb3JFYWNoKHJ1bGVOYW1lcywgKHJ1bGVOYW1lKSA9PiB7XG4gICAgICAgIHdpdGhEZWZhdWx0c1Byb3RvW3J1bGVOYW1lXSA9IGRlZmF1bHRWaXNpdDtcbiAgICB9KTtcbiAgICBkZXJpdmVkQ29uc3RydWN0b3IucHJvdG90eXBlID0gd2l0aERlZmF1bHRzUHJvdG87XG4gICAgZGVyaXZlZENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGRlcml2ZWRDb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gZGVyaXZlZENvbnN0cnVjdG9yO1xufVxuZXhwb3J0IHZhciBDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yO1xuKGZ1bmN0aW9uIChDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yKSB7XG4gICAgQ3N0VmlzaXRvckRlZmluaXRpb25FcnJvcltDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yW1wiUkVEVU5EQU5UX01FVEhPRFwiXSA9IDBdID0gXCJSRURVTkRBTlRfTUVUSE9EXCI7XG4gICAgQ3N0VmlzaXRvckRlZmluaXRpb25FcnJvcltDc3RWaXNpdG9yRGVmaW5pdGlvbkVycm9yW1wiTUlTU0lOR19NRVRIT0RcIl0gPSAxXSA9IFwiTUlTU0lOR19NRVRIT0RcIjtcbn0pKENzdFZpc2l0b3JEZWZpbml0aW9uRXJyb3IgfHwgKENzdFZpc2l0b3JEZWZpbml0aW9uRXJyb3IgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmlzaXRvcih2aXNpdG9ySW5zdGFuY2UsIHJ1bGVOYW1lcykge1xuICAgIGNvbnN0IG1pc3NpbmdFcnJvcnMgPSB2YWxpZGF0ZU1pc3NpbmdDc3RNZXRob2RzKHZpc2l0b3JJbnN0YW5jZSwgcnVsZU5hbWVzKTtcbiAgICByZXR1cm4gbWlzc2luZ0Vycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1pc3NpbmdDc3RNZXRob2RzKHZpc2l0b3JJbnN0YW5jZSwgcnVsZU5hbWVzKSB7XG4gICAgY29uc3QgbWlzc2luZ1J1bGVOYW1lcyA9IGZpbHRlcihydWxlTmFtZXMsIChjdXJyUnVsZU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odmlzaXRvckluc3RhbmNlW2N1cnJSdWxlTmFtZV0pID09PSBmYWxzZTtcbiAgICB9KTtcbiAgICBjb25zdCBlcnJvcnMgPSBtYXAobWlzc2luZ1J1bGVOYW1lcywgKGN1cnJSdWxlTmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbXNnOiBgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7Y3VyclJ1bGVOYW1lfT4gb24gJHsodmlzaXRvckluc3RhbmNlLmNvbnN0cnVjdG9yLm5hbWUpfSBDU1QgVmlzaXRvci5gLFxuICAgICAgICAgICAgdHlwZTogQ3N0VmlzaXRvckRlZmluaXRpb25FcnJvci5NSVNTSU5HX01FVEhPRCxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IGN1cnJSdWxlTmFtZSxcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29tcGFjdChlcnJvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3N0X3Zpc2l0b3IuanMubWFwIiwKICAgICJpbXBvcnQgeyBhZGROb25lVGVybWluYWxUb0NzdCwgYWRkVGVybWluYWxUb0NzdCwgc2V0Tm9kZUxvY2F0aW9uRnVsbCwgc2V0Tm9kZUxvY2F0aW9uT25seU9mZnNldCwgfSBmcm9tIFwiLi4vLi4vY3N0L2NzdC5qc1wiO1xuaW1wb3J0IHsgaGFzLCBpc1VuZGVmaW5lZCwga2V5cywgbm9vcCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciwgY3JlYXRlQmFzZVZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cywgfSBmcm9tIFwiLi4vLi4vY3N0L2NzdF92aXNpdG9yLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1BBUlNFUl9DT05GSUcgfSBmcm9tIFwiLi4vcGFyc2VyLmpzXCI7XG4vKipcbiAqIFRoaXMgdHJhaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBDU1QgYnVpbGRpbmcgbG9naWMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlQnVpbGRlciB7XG4gICAgaW5pdFRyZWVCdWlsZGVyKGNvbmZpZykge1xuICAgICAgICB0aGlzLkNTVF9TVEFDSyA9IFtdO1xuICAgICAgICAvLyBvdXRwdXRDc3QgaXMgbm8gbG9uZ2VyIGV4cG9zZWQvZGVmaW5lZCBpbiB0aGUgcHViaWMgQVBJXG4gICAgICAgIHRoaXMub3V0cHV0Q3N0ID0gY29uZmlnLm91dHB1dENzdDtcbiAgICAgICAgdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZyA9IGhhcyhjb25maWcsIFwibm9kZUxvY2F0aW9uVHJhY2tpbmdcIilcbiAgICAgICAgICAgID8gY29uZmlnLm5vZGVMb2NhdGlvblRyYWNraW5nIC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgICAgIDogREVGQVVMVF9QQVJTRVJfQ09ORklHLm5vZGVMb2NhdGlvblRyYWNraW5nO1xuICAgICAgICBpZiAoIXRoaXMub3V0cHV0Q3N0KSB7XG4gICAgICAgICAgICB0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3RUZXJtaW5hbCA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3ROb25UZXJtaW5hbCA9IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3RSdWxlID0gbm9vcDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNvdmVyeUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4gPSBzZXROb2RlTG9jYXRpb25GdWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlID0gc2V0Tm9kZUxvY2F0aW9uRnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3RQb3N0UnVsZSA9IG5vb3A7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbiA9IHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZSA9IG5vb3A7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3N0UG9zdFJ1bGUgPSB0aGlzLmNzdFBvc3RSdWxlRnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uID0gdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL29ubHlPZmZzZXQvaS50ZXN0KHRoaXMubm9kZUxvY2F0aW9uVHJhY2tpbmcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVjb3ZlcnlFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuID0gc2V0Tm9kZUxvY2F0aW9uT25seU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZSA9IHNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3N0UG9zdFJ1bGUgPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4gPSBub29wO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVMb2NhdGlvbkZyb21Ob2RlID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3RQb3N0UnVsZSA9IHRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlZ3VsYXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL25vbmUvaS50ZXN0KHRoaXMubm9kZUxvY2F0aW9uVHJhY2tpbmcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW4gPSBub29wO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGUgPSBub29wO1xuICAgICAgICAgICAgICAgIHRoaXMuY3N0UG9zdFJ1bGUgPSBub29wO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbiA9IG5vb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCA8bm9kZUxvY2F0aW9uVHJhY2tpbmc+IGNvbmZpZyBvcHRpb246IFwiJHtjb25maWcubm9kZUxvY2F0aW9uVHJhY2tpbmd9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KGNzdE5vZGUpIHtcbiAgICAgICAgY3N0Tm9kZS5sb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBOYU4sXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IE5hTixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGNzdE5vZGUpIHtcbiAgICAgICAgY3N0Tm9kZS5sb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIC8vIHdpdGhvdXQgZXJyb3IgcmVjb3ZlcnkgdGhlIHN0YXJ0aW5nIExvY2F0aW9uIG9mIGEgbmV3IENzdE5vZGUgaXMgZ3VhcmFudGVlZFxuICAgICAgICAgICAgLy8gVG8gYmUgdGhlIG5leHQgVG9rZW4ncyBzdGFydE9mZnNldCAoZm9yIHZhbGlkIGlucHV0cykuXG4gICAgICAgICAgICAvLyBGb3IgaW52YWxpZCBpbnB1dHMgdGhlcmUgd29uJ3QgYmUgYW55IENTVE91dHB1dCBzbyB0aGlzIHBvdGVudGlhbFxuICAgICAgICAgICAgLy8gaW5hY2N1cmFjeSBkb2VzIG5vdCBtYXR0ZXJcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiB0aGlzLkxBKDEpLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBOYU4sXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVjb3ZlcnkoY3N0Tm9kZSkge1xuICAgICAgICBjc3ROb2RlLmxvY2F0aW9uID0ge1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IE5hTixcbiAgICAgICAgICAgIHN0YXJ0TGluZTogTmFOLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW46IE5hTixcbiAgICAgICAgICAgIGVuZE9mZnNldDogTmFOLFxuICAgICAgICAgICAgZW5kTGluZTogTmFOLFxuICAgICAgICAgICAgZW5kQ29sdW1uOiBOYU4sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAgICogIEBzZWUgc2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyIGZvciBleHBsYW5hdGlvbiB3aHkgdGhpcyB3b3JrXG4gIFxuICAgICAgICogQHBhcmFtIGNzdE5vZGVcbiAgICAgICAqL1xuICAgIHNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcihjc3ROb2RlKSB7XG4gICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgIGNzdE5vZGUubG9jYXRpb24gPSB7XG4gICAgICAgICAgICBzdGFydE9mZnNldDogbmV4dFRva2VuLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgc3RhcnRMaW5lOiBuZXh0VG9rZW4uc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2x1bW46IG5leHRUb2tlbi5zdGFydENvbHVtbixcbiAgICAgICAgICAgIGVuZE9mZnNldDogTmFOLFxuICAgICAgICAgICAgZW5kTGluZTogTmFOLFxuICAgICAgICAgICAgZW5kQ29sdW1uOiBOYU4sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShmdWxsUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgY3N0Tm9kZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGZ1bGxSdWxlTmFtZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb24oY3N0Tm9kZSk7XG4gICAgICAgIHRoaXMuQ1NUX1NUQUNLLnB1c2goY3N0Tm9kZSk7XG4gICAgfVxuICAgIGNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5DU1RfU1RBQ0sucG9wKCk7XG4gICAgfVxuICAgIGNzdFBvc3RSdWxlRnVsbChydWxlQ3N0Tm9kZSkge1xuICAgICAgICAvLyBjYXN0cyB0byBgcmVxdWlyZWQ8Q3N0Tm9kZUxvY2F0aW9uPmAgYXJlIHNhZmUgYmVjYXVzZSBgY3N0UG9zdFJ1bGVGdWxsYCBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gZnVsbCBsb2NhdGlvbiBpcyBlbmFibGVkXG4gICAgICAgIGNvbnN0IHByZXZUb2tlbiA9IHRoaXMuTEEoMCk7XG4gICAgICAgIGNvbnN0IGxvYyA9IHJ1bGVDc3ROb2RlLmxvY2F0aW9uO1xuICAgICAgICAvLyBJZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlIGl0IG1lYW5zIHdlIGNvbnN1bWVkIGF0IGxlYXN0IG9uZSBUb2tlblxuICAgICAgICAvLyBJbiB0aGlzIENzdE5vZGUuXG4gICAgICAgIGlmIChsb2Muc3RhcnRPZmZzZXQgPD0gcHJldlRva2VuLnN0YXJ0T2Zmc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBsb2MuZW5kT2Zmc2V0ID0gcHJldlRva2VuLmVuZE9mZnNldDtcbiAgICAgICAgICAgIGxvYy5lbmRMaW5lID0gcHJldlRva2VuLmVuZExpbmU7XG4gICAgICAgICAgICBsb2MuZW5kQ29sdW1uID0gcHJldlRva2VuLmVuZENvbHVtbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBcImVtcHR5XCIgQ3N0Tm9kZSBlZGdlIGNhc2VcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsb2Muc3RhcnRPZmZzZXQgPSBOYU47XG4gICAgICAgICAgICBsb2Muc3RhcnRMaW5lID0gTmFOO1xuICAgICAgICAgICAgbG9jLnN0YXJ0Q29sdW1uID0gTmFOO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNzdFBvc3RSdWxlT25seU9mZnNldChydWxlQ3N0Tm9kZSkge1xuICAgICAgICBjb25zdCBwcmV2VG9rZW4gPSB0aGlzLkxBKDApO1xuICAgICAgICAvLyBgbG9jYXRpb24nIGlzIG5vdCBudWxsIGJlY2F1c2UgYGNzdFBvc3RSdWxlT25seU9mZnNldGAgd2lsbCBvbmx5IGJlIGludm9rZWQgd2hlbiBsb2NhdGlvbiB0cmFja2luZyBpcyBlbmFibGVkLlxuICAgICAgICBjb25zdCBsb2MgPSBydWxlQ3N0Tm9kZS5sb2NhdGlvbjtcbiAgICAgICAgLy8gSWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZSBpdCBtZWFucyB3ZSBjb25zdW1lZCBhdCBsZWFzdCBvbmUgVG9rZW5cbiAgICAgICAgLy8gSW4gdGhpcyBDc3ROb2RlLlxuICAgICAgICBpZiAobG9jLnN0YXJ0T2Zmc2V0IDw9IHByZXZUb2tlbi5zdGFydE9mZnNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbG9jLmVuZE9mZnNldCA9IHByZXZUb2tlbi5lbmRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gXCJlbXB0eVwiIENzdE5vZGUgZWRnZSBjYXNlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbG9jLnN0YXJ0T2Zmc2V0ID0gTmFOO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNzdFBvc3RUZXJtaW5hbChrZXksIGNvbnN1bWVkVG9rZW4pIHtcbiAgICAgICAgY29uc3Qgcm9vdENzdCA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICBhZGRUZXJtaW5hbFRvQ3N0KHJvb3RDc3QsIGNvbnN1bWVkVG9rZW4sIGtleSk7XG4gICAgICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gKipib3RoKiogZXJyb3IgcmVjb3ZlcnkgYW5kIENTVCBPdXRwdXQgYXJlIGVuYWJsZWQuXG4gICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKHJvb3RDc3QubG9jYXRpb24sIGNvbnN1bWVkVG9rZW4pO1xuICAgIH1cbiAgICBjc3RQb3N0Tm9uVGVybWluYWwocnVsZUNzdFJlc3VsdCwgcnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJlQ3N0Tm9kZSA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICBhZGROb25lVGVybWluYWxUb0NzdChwcmVDc3ROb2RlLCBydWxlTmFtZSwgcnVsZUNzdFJlc3VsdCk7XG4gICAgICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gKipib3RoKiogZXJyb3IgcmVjb3ZlcnkgYW5kIENTVCBPdXRwdXQgYXJlIGVuYWJsZWQuXG4gICAgICAgIHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGUocHJlQ3N0Tm9kZS5sb2NhdGlvbiwgcnVsZUNzdFJlc3VsdC5sb2NhdGlvbik7XG4gICAgfVxuICAgIGdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdCYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yID0gY3JlYXRlQmFzZVNlbWFudGljVmlzaXRvckNvbnN0cnVjdG9yKHRoaXMuY2xhc3NOYW1lLCBrZXlzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvciA9IG5ld0Jhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gbmV3QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yO1xuICAgIH1cbiAgICBnZXRCYXNlQ3N0VmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzKCkge1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uc3RydWN0b3IgPSBjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzKHRoaXMuY2xhc3NOYW1lLCBrZXlzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLCB0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7XG4gICAgICAgICAgICB0aGlzLmJhc2VDc3RWaXNpdG9yV2l0aERlZmF1bHRzQ29uc3RydWN0b3IgPSBuZXdDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJldHVybiBuZXdDb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlQ3N0VmlzaXRvcldpdGhEZWZhdWx0c0NvbnN0cnVjdG9yO1xuICAgIH1cbiAgICBnZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkge1xuICAgICAgICBjb25zdCBydWxlU3RhY2sgPSB0aGlzLlJVTEVfU1RBQ0s7XG4gICAgICAgIHJldHVybiBydWxlU3RhY2tbcnVsZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBnZXRQcmV2aW91c0V4cGxpY2l0UnVsZVNob3J0TmFtZSgpIHtcbiAgICAgICAgY29uc3QgcnVsZVN0YWNrID0gdGhpcy5SVUxFX1NUQUNLO1xuICAgICAgICByZXR1cm4gcnVsZVN0YWNrW3J1bGVTdGFjay5sZW5ndGggLSAyXTtcbiAgICB9XG4gICAgZ2V0TGFzdEV4cGxpY2l0UnVsZU9jY3VycmVuY2VJbmRleCgpIHtcbiAgICAgICAgY29uc3Qgb2NjdXJyZW5jZVN0YWNrID0gdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7XG4gICAgICAgIHJldHVybiBvY2N1cnJlbmNlU3RhY2tbb2NjdXJyZW5jZVN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyZWVfYnVpbGRlci5qcy5tYXAiLAogICAgImltcG9ydCB7IEVORF9PRl9GSUxFIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuLyoqXG4gKiBUcmFpdCByZXNwb25zaWJsZSBhYnN0cmFjdGluZyBvdmVyIHRoZSBpbnRlcmFjdGlvbiB3aXRoIExleGVyIG91dHB1dCAoVG9rZW4gdmVjdG9yKS5cbiAqXG4gKiBUaGlzIGNvdWxkIGJlIGdlbmVyYWxpemVkIHRvIHN1cHBvcnQgb3RoZXIga2luZHMgb2YgbGV4ZXJzLCBlLmcuXG4gKiAtIEp1c3QgaW4gVGltZSBMZXhpbmcgLyBMZXhlci1MZXNzIHBhcnNpbmcuXG4gKiAtIFN0cmVhbWluZyBMZXhlci5cbiAqL1xuZXhwb3J0IGNsYXNzIExleGVyQWRhcHRlciB7XG4gICAgaW5pdExleGVyQWRhcHRlcigpIHtcbiAgICAgICAgdGhpcy50b2tWZWN0b3IgPSBbXTtcbiAgICAgICAgdGhpcy50b2tWZWN0b3JMZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmN1cnJJZHggPSAtMTtcbiAgICB9XG4gICAgc2V0IGlucHV0KG5ld0lucHV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBgdGhpcyBwYXJhbWV0ZXJgIG5vdCBzdXBwb3J0ZWQgaW4gc2V0dGVycy9nZXR0ZXJzXG4gICAgICAgIC8vICAgLSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9mdW5jdGlvbnMuaHRtbCN0aGlzLXBhcmFtZXRlcnNcbiAgICAgICAgaWYgKHRoaXMuc2VsZkFuYWx5c2lzRG9uZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE1pc3NpbmcgPHBlcmZvcm1TZWxmQW5hbHlzaXM+IGludm9jYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgUGFyc2VyJ3MgY29uc3RydWN0b3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWlnbm9yZSAtIGB0aGlzIHBhcmFtZXRlcmAgbm90IHN1cHBvcnRlZCBpbiBzZXR0ZXJzL2dldHRlcnNcbiAgICAgICAgLy8gICAtIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2Z1bmN0aW9ucy5odG1sI3RoaXMtcGFyYW1ldGVyc1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMudG9rVmVjdG9yID0gbmV3SW5wdXQ7XG4gICAgICAgIHRoaXMudG9rVmVjdG9yTGVuZ3RoID0gbmV3SW5wdXQubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgaW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva1ZlY3RvcjtcbiAgICB9XG4gICAgLy8gc2tpcHMgYSB0b2tlbiBhbmQgcmV0dXJucyB0aGUgbmV4dCB0b2tlblxuICAgIFNLSVBfVE9LRU4oKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJJZHggPD0gdGhpcy50b2tWZWN0b3IubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lVG9rZW4oKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkxBKDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEVORF9PRl9GSUxFO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIExleGVyIChhY2Nlc3NpbmcgVG9rZW4gdmVjdG9yKSByZWxhdGVkIG1ldGhvZHMgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gdG8gaW1wbGVtZW50IGxhenkgbGV4ZXJzXG4gICAgLy8gb3IgbGV4ZXJzIGRlcGVuZGVudCBvbiBwYXJzZXIgY29udGV4dC5cbiAgICBMQShob3dNdWNoKSB7XG4gICAgICAgIGNvbnN0IHNvdWdodElkeCA9IHRoaXMuY3VycklkeCArIGhvd011Y2g7XG4gICAgICAgIGlmIChzb3VnaHRJZHggPCAwIHx8IHRoaXMudG9rVmVjdG9yTGVuZ3RoIDw9IHNvdWdodElkeCkge1xuICAgICAgICAgICAgcmV0dXJuIEVORF9PRl9GSUxFO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rVmVjdG9yW3NvdWdodElkeF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3VtZVRva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJJZHgrKztcbiAgICB9XG4gICAgZXhwb3J0TGV4ZXJTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycklkeDtcbiAgICB9XG4gICAgaW1wb3J0TGV4ZXJTdGF0ZShuZXdTdGF0ZSkge1xuICAgICAgICB0aGlzLmN1cnJJZHggPSBuZXdTdGF0ZTtcbiAgICB9XG4gICAgcmVzZXRMZXhlclN0YXRlKCkge1xuICAgICAgICB0aGlzLmN1cnJJZHggPSAtMTtcbiAgICB9XG4gICAgbW92ZVRvVGVybWluYXRlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLmN1cnJJZHggPSB0aGlzLnRva1ZlY3Rvci5sZW5ndGggLSAxO1xuICAgIH1cbiAgICBnZXRMZXhlclBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRMZXhlclN0YXRlKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGV4ZXJfYWRhcHRlci5qcy5tYXAiLAogICAgImltcG9ydCB7IGluY2x1ZGVzLCB2YWx1ZXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBpc1JlY29nbml0aW9uRXhjZXB0aW9uIH0gZnJvbSBcIi4uLy4uL2V4Y2VwdGlvbnNfcHVibGljLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1JVTEVfQ09ORklHLCBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdEdyYW1tYXJWYWxpZGF0b3JFcnJvclByb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL2Vycm9yc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2NoZWNrcy5qc1wiO1xuaW1wb3J0IHsgc2VyaWFsaXplR3JhbW1hciB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG4vKipcbiAqIFRoaXMgdHJhaXQgaXMgcmVzcG9uc2libGUgZm9yIGltcGxlbWVudGluZyB0aGUgcHVibGljIEFQSVxuICogZm9yIGRlZmluaW5nIENoZXZyb3RhaW4gcGFyc2VycywgaS5lOlxuICogLSBDT05TVU1FXG4gKiAtIFJVTEVcbiAqIC0gT1BUSU9OXG4gKiAtIC4uLlxuICovXG5leHBvcnQgY2xhc3MgUmVjb2duaXplckFwaSB7XG4gICAgQUNUSU9OKGltcGwpIHtcbiAgICAgICAgcmV0dXJuIGltcGwuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgY29uc3VtZShpZHgsIHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIGlkeCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHN1YnJ1bGUoaWR4LCBydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCBpZHgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBvcHRpb24oaWR4LCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgaWR4KTtcbiAgICB9XG4gICAgb3IoaWR4LCBhbHRzT3JPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9ySW50ZXJuYWwoYWx0c09yT3B0cywgaWR4KTtcbiAgICB9XG4gICAgbWFueShpZHgsIGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbnlJbnRlcm5hbChpZHgsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgYXRMZWFzdE9uZShpZHgsIGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbChpZHgsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQ09OU1VNRSh0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCAwLCBvcHRpb25zKTtcbiAgICB9XG4gICAgQ09OU1VNRTEodG9rVHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwodG9rVHlwZSwgMSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIENPTlNVTUUyKHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBDT05TVU1FMyh0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCAzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgQ09OU1VNRTQodG9rVHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwodG9rVHlwZSwgNCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIENPTlNVTUU1KHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBDT05TVU1FNih0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCA2LCBvcHRpb25zKTtcbiAgICB9XG4gICAgQ09OU1VNRTcodG9rVHlwZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwodG9rVHlwZSwgNywgb3B0aW9ucyk7XG4gICAgfVxuICAgIENPTlNVTUU4KHRva1R5cGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKHRva1R5cGUsIDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBDT05TVU1FOSh0b2tUeXBlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbCh0b2tUeXBlLCA5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRShydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCAwLCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRTEocnVsZVRvQ2FsbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocnVsZVRvQ2FsbCwgMSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIFNVQlJVTEUyKHJ1bGVUb0NhbGwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHJ1bGVUb0NhbGwsIDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBTVUJSVUxFMyhydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCAzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRTQocnVsZVRvQ2FsbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocnVsZVRvQ2FsbCwgNCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIFNVQlJVTEU1KHJ1bGVUb0NhbGwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHJ1bGVUb0NhbGwsIDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBTVUJSVUxFNihydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCA2LCBvcHRpb25zKTtcbiAgICB9XG4gICAgU1VCUlVMRTcocnVsZVRvQ2FsbCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwocnVsZVRvQ2FsbCwgNywgb3B0aW9ucyk7XG4gICAgfVxuICAgIFNVQlJVTEU4KHJ1bGVUb0NhbGwsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHJ1bGVUb0NhbGwsIDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBTVUJSVUxFOShydWxlVG9DYWxsLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCA5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgT1BUSU9OKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCAwKTtcbiAgICB9XG4gICAgT1BUSU9OMShhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgMSk7XG4gICAgfVxuICAgIE9QVElPTjIoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIDIpO1xuICAgIH1cbiAgICBPUFRJT04zKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCAzKTtcbiAgICB9XG4gICAgT1BUSU9ONChhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgNCk7XG4gICAgfVxuICAgIE9QVElPTjUoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIDUpO1xuICAgIH1cbiAgICBPUFRJT042KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCA2KTtcbiAgICB9XG4gICAgT1BUSU9ONyhhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChhY3Rpb25PUk1ldGhvZERlZiwgNyk7XG4gICAgfVxuICAgIE9QVElPTjgoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIDgpO1xuICAgIH1cbiAgICBPUFRJT045KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGFjdGlvbk9STWV0aG9kRGVmLCA5KTtcbiAgICB9XG4gICAgT1IoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDApO1xuICAgIH1cbiAgICBPUjEoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDEpO1xuICAgIH1cbiAgICBPUjIoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDIpO1xuICAgIH1cbiAgICBPUjMoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDMpO1xuICAgIH1cbiAgICBPUjQoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDQpO1xuICAgIH1cbiAgICBPUjUoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDUpO1xuICAgIH1cbiAgICBPUjYoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDYpO1xuICAgIH1cbiAgICBPUjcoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDcpO1xuICAgIH1cbiAgICBPUjgoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDgpO1xuICAgIH1cbiAgICBPUjkoYWx0c09yT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5vckludGVybmFsKGFsdHNPck9wdHMsIDkpO1xuICAgIH1cbiAgICBNQU5ZKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDAsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWTEoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5tYW55SW50ZXJuYWwoMSwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBNQU5ZMihhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLm1hbnlJbnRlcm5hbCgyLCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIE1BTlkzKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDMsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWTQoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5tYW55SW50ZXJuYWwoNCwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBNQU5ZNShhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLm1hbnlJbnRlcm5hbCg1LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIE1BTlk2KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDYsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWTcoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5tYW55SW50ZXJuYWwoNywgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBNQU5ZOChhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLm1hbnlJbnRlcm5hbCg4LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIE1BTlk5KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMubWFueUludGVybmFsKDksIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgTUFOWV9TRVAob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDEob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDIob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDMob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDQob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDUob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDYob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDcob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDcsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDgob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBNQU5ZX1NFUDkob3B0aW9ucykge1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkUoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMCwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkUxKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgxLCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORTIoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMiwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkUzKGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKDMsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FNChhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg0LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORTUoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNSwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkU2KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKDYsIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FNyhhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg3LCBhY3Rpb25PUk1ldGhvZERlZik7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORTgoYWN0aW9uT1JNZXRob2REZWYpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoOCwgYWN0aW9uT1JNZXRob2REZWYpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkU5KGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKDksIGFjdGlvbk9STWV0aG9kRGVmKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUChvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORV9TRVAxKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgxLCBvcHRpb25zKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUDIob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkVfU0VQMyhvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMywgb3B0aW9ucyk7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORV9TRVA0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUDUob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkVfU0VQNihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIEFUX0xFQVNUX09ORV9TRVA3KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg3LCBvcHRpb25zKTtcbiAgICB9XG4gICAgQVRfTEVBU1RfT05FX1NFUDgob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBBVF9MRUFTVF9PTkVfU0VQOShvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoOSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIFJVTEUobmFtZSwgaW1wbGVtZW50YXRpb24sIGNvbmZpZyA9IERFRkFVTFRfUlVMRV9DT05GSUcpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsIG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJNc2cgPSBkZWZhdWx0R3JhbW1hclZhbGlkYXRvckVycm9yUHJvdmlkZXIuYnVpbGREdXBsaWNhdGVSdWxlTmFtZUVycm9yKHtcbiAgICAgICAgICAgICAgICB0b3BMZXZlbFJ1bGU6IG5hbWUsXG4gICAgICAgICAgICAgICAgZ3JhbW1hck5hbWU6IHRoaXMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJNc2csXG4gICAgICAgICAgICAgICAgdHlwZTogUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZS5EVVBMSUNBVEVfUlVMRV9OQU1FLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbkVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlZmluZWRSdWxlc05hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgIGNvbnN0IHJ1bGVJbXBsZW1lbnRhdGlvbiA9IHRoaXMuZGVmaW5lUnVsZShuYW1lLCBpbXBsZW1lbnRhdGlvbiwgY29uZmlnKTtcbiAgICAgICAgdGhpc1tuYW1lXSA9IHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgcmV0dXJuIHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICB9XG4gICAgT1ZFUlJJREVfUlVMRShuYW1lLCBpbXBsLCBjb25maWcgPSBERUZBVUxUX1JVTEVfQ09ORklHKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFcnJvcnMgPSB2YWxpZGF0ZVJ1bGVJc092ZXJyaWRkZW4obmFtZSwgdGhpcy5kZWZpbmVkUnVsZXNOYW1lcywgdGhpcy5jbGFzc05hbWUpO1xuICAgICAgICB0aGlzLmRlZmluaXRpb25FcnJvcnMgPSB0aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KHJ1bGVFcnJvcnMpO1xuICAgICAgICBjb25zdCBydWxlSW1wbGVtZW50YXRpb24gPSB0aGlzLmRlZmluZVJ1bGUobmFtZSwgaW1wbCwgY29uZmlnKTtcbiAgICAgICAgdGhpc1tuYW1lXSA9IHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgcmV0dXJuIHJ1bGVJbXBsZW1lbnRhdGlvbjtcbiAgICB9XG4gICAgQkFDS1RSQUNLKGdyYW1tYXJSdWxlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBzYXZlIG9yZyBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLnB1c2goMSk7XG4gICAgICAgICAgICBjb25zdCBvcmdTdGF0ZSA9IHRoaXMuc2F2ZVJlY29nU3RhdGUoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZ3JhbW1hclJ1bGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgLy8gaWYgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gd2UgaGF2ZSBzdWNjZWVkIHBhcnNpbmcgdGhlIHJ1bGUuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1JlY29nbml0aW9uRXhjZXB0aW9uKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG9yZ1N0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2sucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIEdBU1QgZXhwb3J0IEFQSXNcbiAgICBnZXRHQXN0UHJvZHVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlO1xuICAgIH1cbiAgICBnZXRTZXJpYWxpemVkR2FzdFByb2R1Y3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplR3JhbW1hcih2YWx1ZXModGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlY29nbml6ZXJfYXBpLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgY2xvbmUsIGV2ZXJ5LCBmbGF0dGVuLCBoYXMsIGlzQXJyYXksIGlzRW1wdHksIGlzT2JqZWN0LCByZWR1Y2UsIHVuaXEsIHZhbHVlcywgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgeyBBVF9MRUFTVF9PTkVfSURYLCBBVF9MRUFTVF9PTkVfU0VQX0lEWCwgQklUU19GT1JfTUVUSE9EX1RZUEUsIEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYLCBNQU5ZX0lEWCwgTUFOWV9TRVBfSURYLCBPUFRJT05fSURYLCBPUl9JRFgsIH0gZnJvbSBcIi4uLy4uL2dyYW1tYXIva2V5cy5qc1wiO1xuaW1wb3J0IHsgaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbiwgTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uLCBOb3RBbGxJbnB1dFBhcnNlZEV4Y2VwdGlvbiwgfSBmcm9tIFwiLi4vLi4vZXhjZXB0aW9uc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IFBST0RfVFlQRSB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2xvb2thaGVhZC5qc1wiO1xuaW1wb3J0IHsgTmV4dFRlcm1pbmFsQWZ0ZXJBdExlYXN0T25lU2VwV2Fsa2VyLCBOZXh0VGVybWluYWxBZnRlckF0TGVhc3RPbmVXYWxrZXIsIE5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciwgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55V2Fsa2VyLCB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2ludGVycHJldGVyLmpzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1JVTEVfQ09ORklHIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuaW1wb3J0IHsgSU5fUlVMRV9SRUNPVkVSWV9FWENFUFRJT04gfSBmcm9tIFwiLi9yZWNvdmVyYWJsZS5qc1wiO1xuaW1wb3J0IHsgRU9GIH0gZnJvbSBcIi4uLy4uLy4uL3NjYW4vdG9rZW5zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgYXVnbWVudFRva2VuVHlwZXMsIGlzVG9rZW5UeXBlLCB0b2tlblN0cnVjdHVyZWRNYXRjaGVyLCB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzLCB9IGZyb20gXCIuLi8uLi8uLi9zY2FuL3Rva2Vucy5qc1wiO1xuLyoqXG4gKiBUaGlzIHRyYWl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgcnVudGltZSBwYXJzaW5nIGVuZ2luZVxuICogVXNlZCBieSB0aGUgb2ZmaWNpYWwgQVBJIChyZWNvZ25pemVyX2FwaS50cylcbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29nbml6ZXJFbmdpbmUge1xuICAgIGluaXRSZWNvZ25pemVyRW5naW5lKHRva2VuVm9jYWJ1bGFyeSwgY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAvLyBUT0RPOiB3b3VsZCB1c2luZyBhbiBFUzYgTWFwIG9yIHBsYWluIG9iamVjdCBiZSBmYXN0ZXIgKENTVCBidWlsZGluZyBzY2VuYXJpbylcbiAgICAgICAgdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsID0ge307XG4gICAgICAgIHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydCA9IHt9O1xuICAgICAgICB0aGlzLnJ1bGVTaG9ydE5hbWVJZHggPSAyNTY7XG4gICAgICAgIHRoaXMudG9rZW5NYXRjaGVyID0gdG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlck5vQ2F0ZWdvcmllcztcbiAgICAgICAgdGhpcy5zdWJydWxlSWR4ID0gMDtcbiAgICAgICAgdGhpcy5kZWZpbmVkUnVsZXNOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnRva2Vuc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5SVUxFX1NUQUNLID0gW107XG4gICAgICAgIHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLID0gW107XG4gICAgICAgIHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUgPSB7fTtcbiAgICAgICAgaWYgKGhhcyhjb25maWcsIFwic2VyaWFsaXplZEdyYW1tYXJcIikpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiVGhlIFBhcnNlcidzIGNvbmZpZ3VyYXRpb24gY2FuIG5vIGxvbmdlciBjb250YWluIGEgPHNlcmlhbGl6ZWRHcmFtbWFyPiBwcm9wZXJ0eS5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJcXHRTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI182LTAtMFxcblwiICtcbiAgICAgICAgICAgICAgICBcIlxcdEZvciBGdXJ0aGVyIGRldGFpbHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KHRva2VuVm9jYWJ1bGFyeSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgb25seSBjaGVja3MgZm9yIFRva2VuIHZvY2FidWxhcmllcyBwcm92aWRlZCBhcyBhcnJheXMuXG4gICAgICAgICAgICAvLyBUaGF0IGlzIGdvb2QgZW5vdWdoIGJlY2F1c2UgdGhlIG1haW4gb2JqZWN0aXZlIGlzIHRvIGRldGVjdCB1c2VycyBvZiBwcmUtVjQuMCBBUElzXG4gICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBhbGwgZWRnZSBjYXNlcyBvZiBlbXB0eSBUb2tlbiB2b2NhYnVsYXJpZXMuXG4gICAgICAgICAgICBpZiAoaXNFbXB0eSh0b2tlblZvY2FidWxhcnkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXHROb3RlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IGZvciB0aGUgcGFyc2VyIGNvbnN0cnVjdG9yXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcdGlzIG5vIGxvbmdlciBhIFRva2VuIHZlY3RvciAoc2luY2UgdjQuMCkuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b2tlblZvY2FidWxhcnlbMF0uc3RhcnRPZmZzZXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXHRTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI180LTAtMFxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXHRGb3IgRnVydGhlciBkZXRhaWxzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheSh0b2tlblZvY2FidWxhcnkpKSB7XG4gICAgICAgICAgICB0aGlzLnRva2Vuc01hcCA9IHJlZHVjZSh0b2tlblZvY2FidWxhcnksIChhY2MsIHRva1R5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbdG9rVHlwZS5uYW1lXSA9IHRva1R5cGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXModG9rZW5Wb2NhYnVsYXJ5LCBcIm1vZGVzXCIpICYmXG4gICAgICAgICAgICBldmVyeShmbGF0dGVuKHZhbHVlcyh0b2tlblZvY2FidWxhcnkubW9kZXMpKSwgaXNUb2tlblR5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUb2tlblR5cGVzID0gZmxhdHRlbih2YWx1ZXModG9rZW5Wb2NhYnVsYXJ5Lm1vZGVzKSk7XG4gICAgICAgICAgICBjb25zdCB1bmlxdWVUb2tlbnMgPSB1bmlxKGFsbFRva2VuVHlwZXMpO1xuICAgICAgICAgICAgdGhpcy50b2tlbnNNYXAgPSByZWR1Y2UodW5pcXVlVG9rZW5zLCAoYWNjLCB0b2tUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW3Rva1R5cGUubmFtZV0gPSB0b2tUeXBlO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodG9rZW5Wb2NhYnVsYXJ5KSkge1xuICAgICAgICAgICAgdGhpcy50b2tlbnNNYXAgPSBjbG9uZSh0b2tlblZvY2FidWxhcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiPHRva2Vuc0RpY3Rpb25hcnk+IGFyZ3VtZW50IG11c3QgYmUgQW4gQXJyYXkgb2YgVG9rZW4gY29uc3RydWN0b3JzLFwiICtcbiAgICAgICAgICAgICAgICBcIiBBIGRpY3Rpb25hcnkgb2YgVG9rZW4gY29uc3RydWN0b3JzIG9yIGFuIElNdWx0aU1vZGVMZXhlckRlZmluaXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWx3YXlzIGFkZCBFT0YgdG8gdGhlIHRva2VuTmFtZXMgLT4gY29uc3RydWN0b3JzIG1hcC4gaXQgaXMgdXNlZnVsIHRvIGFzc3VyZSBhbGwgdGhlIGlucHV0IGhhcyBiZWVuXG4gICAgICAgIC8vIHBhcnNlZCB3aXRoIGEgY2xlYXIgZXJyb3IgbWVzc2FnZSAoXCJleHBlY3RpbmcgRU9GIGJ1dCBmb3VuZCAuLi5cIilcbiAgICAgICAgdGhpcy50b2tlbnNNYXBbXCJFT0ZcIl0gPSBFT0Y7XG4gICAgICAgIGNvbnN0IGFsbFRva2VuVHlwZXMgPSBoYXModG9rZW5Wb2NhYnVsYXJ5LCBcIm1vZGVzXCIpXG4gICAgICAgICAgICA/IGZsYXR0ZW4odmFsdWVzKHRva2VuVm9jYWJ1bGFyeS5tb2RlcykpXG4gICAgICAgICAgICA6IHZhbHVlcyh0b2tlblZvY2FidWxhcnkpO1xuICAgICAgICBjb25zdCBub1Rva2VuQ2F0ZWdvcmllc1VzZWQgPSBldmVyeShhbGxUb2tlblR5cGVzLCAodG9rZW5Db25zdHJ1Y3RvcikgPT4gaXNFbXB0eSh0b2tlbkNvbnN0cnVjdG9yLmNhdGVnb3J5TWF0Y2hlcykpO1xuICAgICAgICB0aGlzLnRva2VuTWF0Y2hlciA9IG5vVG9rZW5DYXRlZ29yaWVzVXNlZFxuICAgICAgICAgICAgPyB0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzXG4gICAgICAgICAgICA6IHRva2VuU3RydWN0dXJlZE1hdGNoZXI7XG4gICAgICAgIC8vIEJlY2F1c2UgRVMyMDE1KyBzeW50YXggc2hvdWxkIGJlIHN1cHBvcnRlZCBmb3IgY3JlYXRpbmcgVG9rZW4gY2xhc3Nlc1xuICAgICAgICAvLyBXZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIFRva2VuIGNsYXNzZXMgd2VyZSBjcmVhdGVkIHVzaW5nIHRoZSBcImV4dGVuZFRva2VuXCIgdXRpbGl0aWVzXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBtdXN0IGF1Z21lbnQgdGhlIFRva2VuIGNsYXNzZXMgYm90aCBvbiBMZXhlciBpbml0aWFsaXphdGlvbiBhbmQgb24gUGFyc2VyIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGF1Z21lbnRUb2tlblR5cGVzKHZhbHVlcyh0aGlzLnRva2Vuc01hcCkpO1xuICAgIH1cbiAgICBkZWZpbmVSdWxlKHJ1bGVOYW1lLCBpbXBsLCBjb25maWcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZkFuYWx5c2lzRG9uZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtydWxlTmFtZX0+IG1heSBub3QgYmUgZGVmaW5lZCBhZnRlciB0aGUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQnXFxuYCArXG4gICAgICAgICAgICAgICAgYE1ha2Ugc3VyZSB0aGF0IGFsbCBncmFtbWFyIHJ1bGUgZGVmaW5pdGlvbnMgYXJlIGRvbmUgYmVmb3JlICdwZXJmb3JtU2VsZkFuYWx5c2lzJyBpcyBjYWxsZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzeW5jRW5hYmxlZCA9IGhhcyhjb25maWcsIFwicmVzeW5jRW5hYmxlZFwiKVxuICAgICAgICAgICAgPyBjb25maWcucmVzeW5jRW5hYmxlZCAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgICAgICA6IERFRkFVTFRfUlVMRV9DT05GSUcucmVzeW5jRW5hYmxlZDtcbiAgICAgICAgY29uc3QgcmVjb3ZlcnlWYWx1ZUZ1bmMgPSBoYXMoY29uZmlnLCBcInJlY292ZXJ5VmFsdWVGdW5jXCIpXG4gICAgICAgICAgICA/IGNvbmZpZy5yZWNvdmVyeVZhbHVlRnVuYyAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgICAgICA6IERFRkFVTFRfUlVMRV9DT05GSUcucmVjb3ZlcnlWYWx1ZUZ1bmM7XG4gICAgICAgIC8vIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogVXNlIHNtYWxsIGludGVnZXJzIGFzIGtleXMgZm9yIHRoZSBsb25nZXIgaHVtYW4gcmVhZGFibGUgXCJmdWxsXCIgcnVsZSBuYW1lcy5cbiAgICAgICAgLy8gdGhpcyBncmVhdGx5IGltcHJvdmVzIE1hcCBhY2Nlc3MgdGltZSAoYXMgbXVjaCBhcyA4JSBmb3Igc29tZSBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzKS5cbiAgICAgICAgY29uc3Qgc2hvcnROYW1lID0gdGhpcy5ydWxlU2hvcnROYW1lSWR4IDw8IChCSVRTX0ZPUl9NRVRIT0RfVFlQRSArIEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYKTtcbiAgICAgICAgdGhpcy5ydWxlU2hvcnROYW1lSWR4Kys7XG4gICAgICAgIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzaG9ydE5hbWVdID0gcnVsZU5hbWU7XG4gICAgICAgIHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtydWxlTmFtZV0gPSBzaG9ydE5hbWU7XG4gICAgICAgIGxldCBpbnZva2VSdWxlV2l0aFRyeTtcbiAgICAgICAgLy8gTWljcm8gb3B0aW1pemF0aW9uLCBvbmx5IGNoZWNrIHRoZSBjb25kaXRpb24gKipvbmNlKiogb24gcnVsZSBkZWZpbml0aW9uXG4gICAgICAgIC8vIGluc3RlYWQgb2YgKipldmVyeSBzaW5nbGUqKiBydWxlIGludm9jYXRpb24uXG4gICAgICAgIGlmICh0aGlzLm91dHB1dENzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaW52b2tlUnVsZVdpdGhUcnkgPSBmdW5jdGlvbiBpbnZva2VSdWxlV2l0aFRyeSguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHNob3J0TmFtZSwgcnVsZU5hbWUsIHRoaXMuc3VicnVsZUlkeCk7XG4gICAgICAgICAgICAgICAgICAgIGltcGwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzdCA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNzdFBvc3RSdWxlKGNzdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChlLCByZXN5bmNFbmFibGVkLCByZWNvdmVyeVZhbHVlRnVuYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW52b2tlUnVsZVdpdGhUcnkgPSBmdW5jdGlvbiBpbnZva2VSdWxlV2l0aFRyeUNzdCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHNob3J0TmFtZSwgcnVsZU5hbWUsIHRoaXMuc3VicnVsZUlkeCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbXBsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZSwgcmVzeW5jRW5hYmxlZCwgcmVjb3ZlcnlWYWx1ZUZ1bmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVkR3JhbW1hclJ1bGUgPSBPYmplY3QuYXNzaWduKGludm9rZVJ1bGVXaXRoVHJ5LCB7IHJ1bGVOYW1lLCBvcmlnaW5hbEdyYW1tYXJBY3Rpb246IGltcGwgfSk7XG4gICAgICAgIHJldHVybiB3cmFwcGVkR3JhbW1hclJ1bGU7XG4gICAgfVxuICAgIGludm9rZVJ1bGVDYXRjaChlLCByZXN5bmNFbmFibGVkQ29uZmlnLCByZWNvdmVyeVZhbHVlRnVuYykge1xuICAgICAgICBjb25zdCBpc0ZpcnN0SW52b2tlZFJ1bGUgPSB0aGlzLlJVTEVfU1RBQ0subGVuZ3RoID09PSAxO1xuICAgICAgICAvLyBub3RlIHRoZSByZVN5bmMgaXMgYWx3YXlzIGVuYWJsZWQgZm9yIHRoZSBmaXJzdCBydWxlIGludm9jYXRpb24sIGJlY2F1c2Ugd2UgbXVzdCBhbHdheXMgYmUgYWJsZSB0b1xuICAgICAgICAvLyByZVN5bmMgd2l0aCBFT0YgYW5kIGp1c3Qgb3V0cHV0IHNvbWUgSU5WQUxJRCBQYXJzZVRyZWVcbiAgICAgICAgLy8gZHVyaW5nIGJhY2t0cmFja2luZyByZVN5bmMgcmVjb3ZlcnkgaXMgZGlzYWJsZWQsIG90aGVyd2lzZSB3ZSBjYW4ndCBiZSBjZXJ0YWluIHRoZSBiYWNrdHJhY2tpbmdcbiAgICAgICAgLy8gcGF0aCBpcyByZWFsbHkgdGhlIG1vc3QgdmFsaWQgb25lXG4gICAgICAgIGNvbnN0IHJlU3luY0VuYWJsZWQgPSByZXN5bmNFbmFibGVkQ29uZmlnICYmICF0aGlzLmlzQmFja1RyYWNraW5nKCkgJiYgdGhpcy5yZWNvdmVyeUVuYWJsZWQ7XG4gICAgICAgIGlmIChpc1JlY29nbml0aW9uRXhjZXB0aW9uKGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvZ0Vycm9yID0gZTtcbiAgICAgICAgICAgIGlmIChyZVN5bmNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVTeW5jVG9rVHlwZSA9IHRoaXMuZmluZFJlU3luY1Rva2VuVHlwZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChyZVN5bmNUb2tUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICByZWNvZ0Vycm9yLnJlc3luY2VkVG9rZW5zID0gdGhpcy5yZVN5bmNUbyhyZVN5bmNUb2tUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsQ3N0UmVzdWx0ID0gdGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsQ3N0UmVzdWx0LnJlY292ZXJlZE5vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWxDc3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3ZlcnlWYWx1ZUZ1bmMoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dENzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGlhbENzdFJlc3VsdCA9IHRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbENzdFJlc3VsdC5yZWNvdmVyZWROb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29nRXJyb3IucGFydGlhbENzdFJlc3VsdCA9IHBhcnRpYWxDc3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgaGFuZGxlZCBGdXJ0aGVyIHVwIHRoZSBjYWxsIHN0YWNrXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHJlY29nRXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNGaXJzdEludm9rZWRSdWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGEgUmVkdW5kYW50IGlucHV0IGVycm9yIHdpbGwgYmUgY3JlYXRlZCBhcyB3ZWxsIGFuZCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2VcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJzZXIgc2hvdWxkIG5ldmVyIHRocm93IG9uZSBvZiBpdHMgb3duIGVycm9ycyBvdXRzaWRlIGl0cyBmbG93LlxuICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgZXJyb3IgcmVjb3ZlcnkgaXMgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3ZlcnlWYWx1ZUZ1bmMoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0byBiZSByZWNvdmVyZWQgRnVydGhlciB1cCB0aGUgY2FsbCBzdGFja1xuICAgICAgICAgICAgICAgIHRocm93IHJlY29nRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzb21lIG90aGVyIEVycm9yIHR5cGUgd2hpY2ggd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIChmb3IgZXhhbXBsZSBhIGJ1aWx0IGluIEphdmFTY3JpcHQgRXJyb3IpXG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIHBhcnNpbmcgRFNMXG4gICAgb3B0aW9uSW50ZXJuYWwoYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoT1BUSU9OX0lEWCwgb2NjdXJyZW5jZSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkludGVybmFsTG9naWMoYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UsIGtleSk7XG4gICAgfVxuICAgIG9wdGlvbkludGVybmFsTG9naWMoYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UsIGtleSkge1xuICAgICAgICBsZXQgbG9va0FoZWFkRnVuYyA9IHRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKGtleSk7XG4gICAgICAgIGxldCBhY3Rpb247XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uT1JNZXRob2REZWYgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uT1JNZXRob2REZWYuREVGO1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlID0gYWN0aW9uT1JNZXRob2REZWYuR0FURTtcbiAgICAgICAgICAgIC8vIHByZWRpY2F0ZSBwcmVzZW50XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmdMb29rYWhlYWRGdW5jdGlvbiA9IGxvb2tBaGVhZEZ1bmM7XG4gICAgICAgICAgICAgICAgbG9va0FoZWFkRnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZS5jYWxsKHRoaXMpICYmIG9yZ0xvb2thaGVhZEZ1bmN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rQWhlYWRGdW5jLmNhbGwodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhdExlYXN0T25lSW50ZXJuYWwocHJvZE9jY3VycmVuY2UsIGFjdGlvbk9STWV0aG9kRGVmKSB7XG4gICAgICAgIGNvbnN0IGxhS2V5ID0gdGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoQVRfTEVBU1RfT05FX0lEWCwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICByZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgYWN0aW9uT1JNZXRob2REZWYsIGxhS2V5KTtcbiAgICB9XG4gICAgYXRMZWFzdE9uZUludGVybmFsTG9naWMocHJvZE9jY3VycmVuY2UsIGFjdGlvbk9STWV0aG9kRGVmLCBrZXkpIHtcbiAgICAgICAgbGV0IGxvb2tBaGVhZEZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICBsZXQgYWN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk9STWV0aG9kRGVmICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmLkRFRjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZSA9IGFjdGlvbk9STWV0aG9kRGVmLkdBVEU7XG4gICAgICAgICAgICAvLyBwcmVkaWNhdGUgcHJlc2VudFxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JnTG9va2FoZWFkRnVuY3Rpb24gPSBsb29rQWhlYWRGdW5jO1xuICAgICAgICAgICAgICAgIGxvb2tBaGVhZEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUuY2FsbCh0aGlzKSAmJiBvcmdMb29rYWhlYWRGdW5jdGlvbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb25PUk1ldGhvZERlZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9va0FoZWFkRnVuYy5jYWxsKHRoaXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBsZXQgbm90U3R1Y2sgPSB0aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgd2hpbGUgKGxvb2tBaGVhZEZ1bmMuY2FsbCh0aGlzKSA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIG5vdFN0dWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgbm90U3R1Y2sgPSB0aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihwcm9kT2NjdXJyZW5jZSwgUFJPRF9UWVBFLlJFUEVUSVRJT05fTUFOREFUT1JZLCBhY3Rpb25PUk1ldGhvZERlZi5FUlJfTVNHKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3RlIHRoYXQgd2hpbGUgaXQgbWF5IHNlZW0gdGhhdCB0aGlzIGNhbiBjYXVzZSBhbiBlcnJvciBiZWNhdXNlIGJ5IHVzaW5nIGEgcmVjdXJzaXZlIGNhbGwgdG9cbiAgICAgICAgLy8gQVRfTEVBU1RfT05FIHdlIGNoYW5nZSB0aGUgZ3JhbW1hciB0byBBVF9MRUFTVF9UV08sIEFUX0xFQVNUX1RIUkVFIC4uLiAsIHRoZSBwb3NzaWJsZSByZWN1cnNpdmUgY2FsbFxuICAgICAgICAvLyBmcm9tIHRoZSB0cnlJblJlcGV0aXRpb25SZWNvdmVyeSguLi4pIHdpbGwgb25seSBoYXBwZW4gSUZGIHRoZXJlIHJlYWxseSBhcmUgVFdPL1RIUkVFLy4uLi4gaXRlbXMuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIiB3aWxsIGJlIGRlZmluZWQgYXMgTk9PUCB1bmxlc3MgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgICAgICB0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCwgW3Byb2RPY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZl0sIGxvb2tBaGVhZEZ1bmMsIEFUX0xFQVNUX09ORV9JRFgsIHByb2RPY2N1cnJlbmNlLCBOZXh0VGVybWluYWxBZnRlckF0TGVhc3RPbmVXYWxrZXIpO1xuICAgIH1cbiAgICBhdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbChwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKEFUX0xFQVNUX09ORV9TRVBfSURYLCBwcm9kT2NjdXJyZW5jZSk7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucywgbGFLZXkpO1xuICAgIH1cbiAgICBhdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbExvZ2ljKHByb2RPY2N1cnJlbmNlLCBvcHRpb25zLCBrZXkpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5ERUY7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuU0VQO1xuICAgICAgICBjb25zdCBmaXJzdEl0ZXJhdGlvbkxvb2thaGVhZEZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICAvLyAxc3QgaXRlcmF0aW9uXG4gICAgICAgIGlmIChmaXJzdEl0ZXJhdGlvbkxvb2thaGVhZEZ1bmMuY2FsbCh0aGlzKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYWN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAvLyAgVE9ETzogT3B0aW1pemF0aW9uIGNhbiBtb3ZlIHRoaXMgZnVuY3Rpb24gY29uc3RydWN0aW9uIGludG8gXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIlxuICAgICAgICAgICAgLy8gIGJlY2F1c2UgaXQgaXMgb25seSBuZWVkZWQgaW4gZXJyb3IgcmVjb3Zlcnkgc2NlbmFyaW9zLlxuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yTG9va0FoZWFkRnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSwgc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyAybmQuLm50aCBpdGVyYXRpb25zXG4gICAgICAgICAgICB3aGlsZSAodGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSwgc2VwYXJhdG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIG5vdGUgdGhhdCB0aGlzIENPTlNVTUUgd2lsbCBuZXZlciBlbnRlciByZWNvdmVyeSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMgY2hlY2tzIHRoYXQgdGhlIHNlcGFyYXRvciByZWFsbHkgZG9lcyBleGlzdC5cbiAgICAgICAgICAgICAgICB0aGlzLkNPTlNVTUUoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICAvLyBObyBuZWVkIGZvciBjaGVja2luZyBpbmZpbml0ZSBsb29wIGhlcmUgZHVlIHRvIGNvbnN1bWluZyB0aGUgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGFjdGlvbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBcImF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeVwiIHdpbGwgYmUgZGVmaW5lZCBhcyBOT09QIHVubGVzcyByZWNvdmVyeSBpcyBlbmFibGVkXG4gICAgICAgICAgICB0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCwgW1xuICAgICAgICAgICAgICAgIHByb2RPY2N1cnJlbmNlLFxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcixcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3JMb29rQWhlYWRGdW5jLFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBOZXh0VGVybWluYWxBZnRlckF0TGVhc3RPbmVTZXBXYWxrZXIsXG4gICAgICAgICAgICBdLCBzZXBhcmF0b3JMb29rQWhlYWRGdW5jLCBBVF9MRUFTVF9PTkVfU0VQX0lEWCwgcHJvZE9jY3VycmVuY2UsIE5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKHByb2RPY2N1cnJlbmNlLCBQUk9EX1RZUEUuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IsIG9wdGlvbnMuRVJSX01TRyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWFueUludGVybmFsKHByb2RPY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE1BTllfSURYLCBwcm9kT2NjdXJyZW5jZSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hbnlJbnRlcm5hbExvZ2ljKHByb2RPY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZiwgbGFLZXkpO1xuICAgIH1cbiAgICBtYW55SW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgYWN0aW9uT1JNZXRob2REZWYsIGtleSkge1xuICAgICAgICBsZXQgbG9va2FoZWFkRnVuY3Rpb24gPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICBsZXQgYWN0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk9STWV0aG9kRGVmICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmLkRFRjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZSA9IGFjdGlvbk9STWV0aG9kRGVmLkdBVEU7XG4gICAgICAgICAgICAvLyBwcmVkaWNhdGUgcHJlc2VudFxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JnTG9va2FoZWFkRnVuY3Rpb24gPSBsb29rYWhlYWRGdW5jdGlvbjtcbiAgICAgICAgICAgICAgICBsb29rYWhlYWRGdW5jdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZS5jYWxsKHRoaXMpICYmIG9yZ0xvb2thaGVhZEZ1bmN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbk9STWV0aG9kRGVmO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub3RTdHVjayA9IHRydWU7XG4gICAgICAgIHdoaWxlIChsb29rYWhlYWRGdW5jdGlvbi5jYWxsKHRoaXMpID09PSB0cnVlICYmIG5vdFN0dWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICBub3RTdHVjayA9IHRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBcImF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeVwiIHdpbGwgYmUgZGVmaW5lZCBhcyBOT09QIHVubGVzcyByZWNvdmVyeSBpcyBlbmFibGVkXG4gICAgICAgIHRoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLCBbcHJvZE9jY3VycmVuY2UsIGFjdGlvbk9STWV0aG9kRGVmXSwgbG9va2FoZWFkRnVuY3Rpb24sIE1BTllfSURYLCBwcm9kT2NjdXJyZW5jZSwgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55V2Fsa2VyLCBcbiAgICAgICAgLy8gVGhlIG5vdFN0dWNrIHBhcmFtZXRlciBpcyBvbmx5IHJlbGV2YW50IHdoZW4gXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIlxuICAgICAgICAvLyBpcyBpbnZva2VkIGZyb20gbWFueUludGVybmFsLCBpbiB0aGUgTUFOWV9TRVAgY2FzZSBhbmQgQVRfTEVBU1RfT05FW19TRVBdXG4gICAgICAgIC8vIEFuIGluZmluaXRlIGxvb3AgY2Fubm90IG9jY3VyIGFzOlxuICAgICAgICAvLyAtIEVpdGhlciB0aGUgbG9va2FoZWFkIGlzIGd1YXJhbnRlZWQgdG8gY29uc3VtZSBzb21ldGhpbmcgKFNpbmdsZSBUb2tlbiBTZXBhcmF0b3IpXG4gICAgICAgIC8vIC0gQVRfTEVBU1RfT05FIGJ5IGRlZmluaXRpb24gaXMgZ3VhcmFudGVlZCB0byBjb25zdW1lIHNvbWV0aGluZyAob3IgZXJyb3Igb3V0KS5cbiAgICAgICAgbm90U3R1Y2spO1xuICAgIH1cbiAgICBtYW55U2VwRmlyc3RJbnRlcm5hbChwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE1BTllfU0VQX0lEWCwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICB0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsTG9naWMocHJvZE9jY3VycmVuY2UsIG9wdGlvbnMsIGxhS2V5KTtcbiAgICB9XG4gICAgbWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhwcm9kT2NjdXJyZW5jZSwgb3B0aW9ucywga2V5KSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuREVGO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBvcHRpb25zLlNFUDtcbiAgICAgICAgY29uc3QgZmlyc3RJdGVyYXRpb25MYUZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShrZXkpO1xuICAgICAgICAvLyAxc3QgaXRlcmF0aW9uXG4gICAgICAgIGlmIChmaXJzdEl0ZXJhdGlvbkxhRnVuYy5jYWxsKHRoaXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksIHNlcGFyYXRvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gMm5kLi5udGggaXRlcmF0aW9uc1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksIHNlcGFyYXRvcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBub3RlIHRoYXQgdGhpcyBDT05TVU1FIHdpbGwgbmV2ZXIgZW50ZXIgcmVjb3ZlcnkgYmVjYXVzZVxuICAgICAgICAgICAgICAgIC8vIHRoZSBzZXBhcmF0b3JMb29rQWhlYWRGdW5jIGNoZWNrcyB0aGF0IHRoZSBzZXBhcmF0b3IgcmVhbGx5IGRvZXMgZXhpc3QuXG4gICAgICAgICAgICAgICAgdGhpcy5DT05TVU1FKHNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgY2hlY2tpbmcgaW5maW5pdGUgbG9vcCBoZXJlIGR1ZSB0byBjb25zdW1pbmcgdGhlIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIiB3aWxsIGJlIGRlZmluZWQgYXMgTk9PUCB1bmxlc3MgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgICAgICAgICAgdGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsIFtcbiAgICAgICAgICAgICAgICBwcm9kT2NjdXJyZW5jZSxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yTG9va0FoZWFkRnVuYyxcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55U2VwV2Fsa2VyLFxuICAgICAgICAgICAgXSwgc2VwYXJhdG9yTG9va0FoZWFkRnVuYywgTUFOWV9TRVBfSURYLCBwcm9kT2NjdXJyZW5jZSwgTmV4dFRlcm1pbmFsQWZ0ZXJNYW55U2VwV2Fsa2VyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwocHJvZE9jY3VycmVuY2UsIHNlcGFyYXRvciwgc2VwYXJhdG9yTG9va0FoZWFkRnVuYywgYWN0aW9uLCBuZXh0VGVybWluYWxBZnRlcldhbGtlcikge1xuICAgICAgICB3aGlsZSAoc2VwYXJhdG9yTG9va0FoZWFkRnVuYygpKSB7XG4gICAgICAgICAgICAvLyBub3RlIHRoYXQgdGhpcyBDT05TVU1FIHdpbGwgbmV2ZXIgZW50ZXIgcmVjb3ZlcnkgYmVjYXVzZVxuICAgICAgICAgICAgLy8gdGhlIHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMgY2hlY2tzIHRoYXQgdGhlIHNlcGFyYXRvciByZWFsbHkgZG9lcyBleGlzdC5cbiAgICAgICAgICAgIHRoaXMuQ09OU1VNRShzZXBhcmF0b3IpO1xuICAgICAgICAgICAgYWN0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgY2FuIG9ubHkgYXJyaXZlIHRvIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgYW4gZXJyb3JcbiAgICAgICAgLy8gaGFzIG9jY3VycmVkIChoZW5jZSB0aGUgbmFtZSAnc2Vjb25kJykgc28gdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyBJRiB3aWxsIGFsd2F5cyBiZSBlbnRlcmVkLCBpdHMgcG9zc2libGUgdG8gcmVtb3ZlIGl0Li4uXG4gICAgICAgIC8vIGhvd2V2ZXIgaXQgaXMga2VwdCB0byBhdm9pZCBjb25mdXNpb24gYW5kIGJlIGNvbnNpc3RlbnQuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogXCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnlcIiB3aWxsIGJlIGRlZmluZWQgYXMgTk9PUCB1bmxlc3MgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICB0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLnJlcGV0aXRpb25TZXBTZWNvbmRJbnRlcm5hbCwgW1xuICAgICAgICAgICAgcHJvZE9jY3VycmVuY2UsXG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICBzZXBhcmF0b3JMb29rQWhlYWRGdW5jLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgbmV4dFRlcm1pbmFsQWZ0ZXJXYWxrZXIsXG4gICAgICAgIF0sIHNlcGFyYXRvckxvb2tBaGVhZEZ1bmMsIEFUX0xFQVNUX09ORV9TRVBfSURYLCBwcm9kT2NjdXJyZW5jZSwgbmV4dFRlcm1pbmFsQWZ0ZXJXYWxrZXIpO1xuICAgIH1cbiAgICBkb1NpbmdsZVJlcGV0aXRpb24oYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZUl0ZXJhdGlvbiA9IHRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO1xuICAgICAgICBhY3Rpb24uY2FsbCh0aGlzKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJJdGVyYXRpb24gPSB0aGlzLmdldExleGVyUG9zaXRpb24oKTtcbiAgICAgICAgLy8gVGhpcyBib29sZWFuIHdpbGwgaW5kaWNhdGUgaWYgdGhpcyByZXBldGl0aW9uIHByb2dyZXNzZWRcbiAgICAgICAgLy8gb3IgaWYgd2UgYXJlIFwic3R1Y2tcIiAocG90ZW50aWFsIGluZmluaXRlIGxvb3AgaW4gdGhlIHJlcGV0aXRpb24pLlxuICAgICAgICByZXR1cm4gYWZ0ZXJJdGVyYXRpb24gPiBiZWZvcmVJdGVyYXRpb247XG4gICAgfVxuICAgIG9ySW50ZXJuYWwoYWx0c09yT3B0cywgb2NjdXJyZW5jZSkge1xuICAgICAgICBjb25zdCBsYUtleSA9IHRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKE9SX0lEWCwgb2NjdXJyZW5jZSk7XG4gICAgICAgIGNvbnN0IGFsdHMgPSBpc0FycmF5KGFsdHNPck9wdHMpID8gYWx0c09yT3B0cyA6IGFsdHNPck9wdHMuREVGO1xuICAgICAgICBjb25zdCBsYUZ1bmMgPSB0aGlzLmdldExhRnVuY0Zyb21DYWNoZShsYUtleSk7XG4gICAgICAgIGNvbnN0IGFsdElkeFRvVGFrZSA9IGxhRnVuYy5jYWxsKHRoaXMsIGFsdHMpO1xuICAgICAgICBpZiAoYWx0SWR4VG9UYWtlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNob3NlbkFsdGVybmF0aXZlID0gYWx0c1thbHRJZHhUb1Rha2VdO1xuICAgICAgICAgICAgcmV0dXJuIGNob3NlbkFsdGVybmF0aXZlLkFMVC5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihvY2N1cnJlbmNlLCBhbHRzT3JPcHRzLkVSUl9NU0cpO1xuICAgIH1cbiAgICBydWxlRmluYWxseVN0YXRlVXBkYXRlKCkge1xuICAgICAgICB0aGlzLlJVTEVfU1RBQ0sucG9wKCk7XG4gICAgICAgIHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLLnBvcCgpO1xuICAgICAgICAvLyBOT09QIHdoZW4gY3N0IGlzIGRpc2FibGVkXG4gICAgICAgIHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLlJVTEVfU1RBQ0subGVuZ3RoID09PSAwICYmIHRoaXMuaXNBdEVuZE9mSW5wdXQoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVkdW5kYW50VG9rID0gdGhpcy5MQSgxKTtcbiAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIGZpcnN0UmVkdW5kYW50OiBmaXJzdFJlZHVuZGFudFRvayxcbiAgICAgICAgICAgICAgICBydWxlTmFtZTogdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuU0FWRV9FUlJPUihuZXcgTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24oZXJyTXNnLCBmaXJzdFJlZHVuZGFudFRvaykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnJ1bGVJbnRlcm5hbChydWxlVG9DYWxsLCBpZHgsIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHJ1bGVSZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5BUkdTIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWJydWxlSWR4ID0gaWR4O1xuICAgICAgICAgICAgcnVsZVJlc3VsdCA9IHJ1bGVUb0NhbGwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3ROb25UZXJtaW5hbChydWxlUmVzdWx0LCBvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5MQUJFTCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLkxBQkVMXG4gICAgICAgICAgICAgICAgOiBydWxlVG9DYWxsLnJ1bGVOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBydWxlUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLnN1YnJ1bGVJbnRlcm5hbEVycm9yKGUsIG9wdGlvbnMsIHJ1bGVUb0NhbGwucnVsZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnJ1bGVJbnRlcm5hbEVycm9yKGUsIG9wdGlvbnMsIHJ1bGVOYW1lKSB7XG4gICAgICAgIGlmIChpc1JlY29nbml0aW9uRXhjZXB0aW9uKGUpICYmIGUucGFydGlhbENzdFJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNzdFBvc3ROb25UZXJtaW5hbChlLnBhcnRpYWxDc3RSZXN1bHQsIG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLkxBQkVMICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuTEFCRUxcbiAgICAgICAgICAgICAgICA6IHJ1bGVOYW1lKTtcbiAgICAgICAgICAgIGRlbGV0ZSBlLnBhcnRpYWxDc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgY29uc3VtZUludGVybmFsKHRva1R5cGUsIGlkeCwgb3B0aW9ucykge1xuICAgICAgICBsZXQgY29uc3VtZWRUb2tlbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgICAgICBpZiAodGhpcy50b2tlbk1hdGNoZXIobmV4dFRva2VuLCB0b2tUeXBlKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVRva2VuKCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZWRUb2tlbiA9IG5leHRUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUludGVybmFsRXJyb3IodG9rVHlwZSwgbmV4dFRva2VuLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZUZyb21Db25zdW1wdGlvbikge1xuICAgICAgICAgICAgY29uc3VtZWRUb2tlbiA9IHRoaXMuY29uc3VtZUludGVybmFsUmVjb3ZlcnkodG9rVHlwZSwgaWR4LCBlRnJvbUNvbnN1bXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNzdFBvc3RUZXJtaW5hbChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5MQUJFTCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG9wdGlvbnMuTEFCRUxcbiAgICAgICAgICAgIDogdG9rVHlwZS5uYW1lLCBjb25zdW1lZFRva2VuKTtcbiAgICAgICAgcmV0dXJuIGNvbnN1bWVkVG9rZW47XG4gICAgfVxuICAgIGNvbnN1bWVJbnRlcm5hbEVycm9yKHRva1R5cGUsIG5leHRUb2tlbiwgb3B0aW9ucykge1xuICAgICAgICBsZXQgbXNnO1xuICAgICAgICBjb25zdCBwcmV2aW91c1Rva2VuID0gdGhpcy5MQSgwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLkVSUl9NU0cpIHtcbiAgICAgICAgICAgIG1zZyA9IG9wdGlvbnMuRVJSX01TRztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHRva1R5cGUsXG4gICAgICAgICAgICAgICAgYWN0dWFsOiBuZXh0VG9rZW4sXG4gICAgICAgICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzVG9rZW4sXG4gICAgICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24obXNnLCBuZXh0VG9rZW4sIHByZXZpb3VzVG9rZW4pKTtcbiAgICB9XG4gICAgY29uc3VtZUludGVybmFsUmVjb3ZlcnkodG9rVHlwZSwgaWR4LCBlRnJvbUNvbnN1bXB0aW9uKSB7XG4gICAgICAgIC8vIG5vIHJlY292ZXJ5IGFsbG93ZWQgZHVyaW5nIGJhY2t0cmFja2luZywgb3RoZXJ3aXNlIGJhY2t0cmFja2luZyBtYXkgcmVjb3ZlciBpbnZhbGlkIHN5bnRheCBhbmQgYWNjZXB0IGl0XG4gICAgICAgIC8vIGJ1dCB0aGUgb3JpZ2luYWwgc3ludGF4IGNvdWxkIGhhdmUgYmVlbiBwYXJzZWQgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgYW55IGJhY2t0cmFja2luZyArIHJlY292ZXJ5XG4gICAgICAgIGlmICh0aGlzLnJlY292ZXJ5RW5hYmxlZCAmJlxuICAgICAgICAgICAgLy8gVE9ETzogbW9yZSByb2J1c3QgY2hlY2tpbmcgb2YgdGhlIGV4Y2VwdGlvbiB0eXBlLiBQZXJoYXBzIFR5cGVzY3JpcHQgZXh0ZW5kaW5nIGV4cHJlc3Npb25zP1xuICAgICAgICAgICAgZUZyb21Db25zdW1wdGlvbi5uYW1lID09PSBcIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvblwiICYmXG4gICAgICAgICAgICAhdGhpcy5pc0JhY2tUcmFja2luZygpKSB7XG4gICAgICAgICAgICBjb25zdCBmb2xsb3dzID0gdGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkodG9rVHlwZSwgaWR4KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkodG9rVHlwZSwgZm9sbG93cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZUZyb21JblJ1bGVSZWNvdmVyeSkge1xuICAgICAgICAgICAgICAgIGlmIChlRnJvbUluUnVsZVJlY292ZXJ5Lm5hbWUgPT09IElOX1JVTEVfUkVDT1ZFUllfRVhDRVBUSU9OKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZhaWxlZCBpbiBSdWxlUmVjb3ZlcnkuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRocm93IHRoZSBvcmlnaW5hbCBlcnJvciBpbiBvcmRlciB0byB0cmlnZ2VyIHJlU3luYyBlcnJvciByZWNvdmVyeVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlRnJvbUNvbnN1bXB0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZUZyb21JblJ1bGVSZWNvdmVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlRnJvbUNvbnN1bXB0aW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNhdmVSZWNvZ1N0YXRlKCkge1xuICAgICAgICAvLyBlcnJvcnMgaXMgYSBnZXR0ZXIgd2hpY2ggd2lsbCBjbG9uZSB0aGUgZXJyb3JzIGFycmF5XG4gICAgICAgIGNvbnN0IHNhdmVkRXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgICAgIGNvbnN0IHNhdmVkUnVsZVN0YWNrID0gY2xvbmUodGhpcy5SVUxFX1NUQUNLKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogc2F2ZWRFcnJvcnMsXG4gICAgICAgICAgICBsZXhlclN0YXRlOiB0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxcbiAgICAgICAgICAgIFJVTEVfU1RBQ0s6IHNhdmVkUnVsZVN0YWNrLFxuICAgICAgICAgICAgQ1NUX1NUQUNLOiB0aGlzLkNTVF9TVEFDSyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVsb2FkUmVjb2dTdGF0ZShuZXdTdGF0ZSkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IG5ld1N0YXRlLmVycm9ycztcbiAgICAgICAgdGhpcy5pbXBvcnRMZXhlclN0YXRlKG5ld1N0YXRlLmxleGVyU3RhdGUpO1xuICAgICAgICB0aGlzLlJVTEVfU1RBQ0sgPSBuZXdTdGF0ZS5SVUxFX1NUQUNLO1xuICAgIH1cbiAgICBydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHNob3J0TmFtZSwgZnVsbE5hbWUsIGlkeEluQ2FsbGluZ1J1bGUpIHtcbiAgICAgICAgdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChpZHhJbkNhbGxpbmdSdWxlKTtcbiAgICAgICAgdGhpcy5SVUxFX1NUQUNLLnB1c2goc2hvcnROYW1lKTtcbiAgICAgICAgLy8gTk9PUCB3aGVuIGNzdCBpcyBkaXNhYmxlZFxuICAgICAgICB0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShmdWxsTmFtZSk7XG4gICAgfVxuICAgIGlzQmFja1RyYWNraW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrLmxlbmd0aCAhPT0gMDtcbiAgICB9XG4gICAgZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpIHtcbiAgICAgICAgY29uc3Qgc2hvcnROYW1lID0gdGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxbc2hvcnROYW1lXTtcbiAgICB9XG4gICAgc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUoc2hvcnROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxbc2hvcnROYW1lXTtcbiAgICB9XG4gICAgaXNBdEVuZE9mSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLCBFT0YpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5yZXNldExleGVyU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zdWJydWxlSWR4ID0gMDtcbiAgICAgICAgdGhpcy5pc0JhY2tUcmFja2luZ1N0YWNrID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuUlVMRV9TVEFDSyA9IFtdO1xuICAgICAgICAvLyBUT0RPOiBleHRyYWN0IGEgc3BlY2lmaWMgcmVzZXQgZm9yIFRyZWVCdWlsZGVyIHRyYWl0XG4gICAgICAgIHRoaXMuQ1NUX1NUQUNLID0gW107XG4gICAgICAgIHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLID0gW107XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVjb2duaXplcl9lbmdpbmUuanMubWFwIiwKICAgICJpbXBvcnQgeyBFYXJseUV4aXRFeGNlcHRpb24sIGlzUmVjb2duaXRpb25FeGNlcHRpb24sIE5vVmlhYmxlQWx0RXhjZXB0aW9uLCB9IGZyb20gXCIuLi8uLi9leGNlcHRpb25zX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgY2xvbmUsIGhhcyB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kLCBnZXRMb29rYWhlYWRQYXRoc0Zvck9yLCB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2xvb2thaGVhZC5qc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9QQVJTRVJfQ09ORklHIH0gZnJvbSBcIi4uL3BhcnNlci5qc1wiO1xuLyoqXG4gKiBUcmFpdCByZXNwb25zaWJsZSBmb3IgcnVudGltZSBwYXJzaW5nIGVycm9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlciB7XG4gICAgaW5pdEVycm9ySGFuZGxlcihjb25maWcpIHtcbiAgICAgICAgdGhpcy5fZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIgPSBoYXMoY29uZmlnLCBcImVycm9yTWVzc2FnZVByb3ZpZGVyXCIpXG4gICAgICAgICAgICA/IGNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlciAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgICAgICA6IERFRkFVTFRfUEFSU0VSX0NPTkZJRy5lcnJvck1lc3NhZ2VQcm92aWRlcjtcbiAgICB9XG4gICAgU0FWRV9FUlJPUihlcnJvcikge1xuICAgICAgICBpZiAoaXNSZWNvZ25pdGlvbkV4Y2VwdGlvbihlcnJvcikpIHtcbiAgICAgICAgICAgIGVycm9yLmNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgcnVsZVN0YWNrOiB0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxcbiAgICAgICAgICAgICAgICBydWxlT2NjdXJyZW5jZVN0YWNrOiBjbG9uZSh0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJUcnlpbmcgdG8gc2F2ZSBhbiBFcnJvciB3aGljaCBpcyBub3QgYSBSZWNvZ25pdGlvbkV4Y2VwdGlvblwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5fZXJyb3JzKTtcbiAgICB9XG4gICAgc2V0IGVycm9ycyhuZXdFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5fZXJyb3JzID0gbmV3RXJyb3JzO1xuICAgIH1cbiAgICAvLyBUT0RPOiBjb25zaWRlciBjYWNoaW5nIHRoZSBlcnJvciBtZXNzYWdlIGNvbXB1dGVkIGluZm9ybWF0aW9uXG4gICAgcmFpc2VFYXJseUV4aXRFeGNlcHRpb24ob2NjdXJyZW5jZSwgcHJvZFR5cGUsIHVzZXJEZWZpbmVkRXJyTXNnKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCk7XG4gICAgICAgIGNvbnN0IHJ1bGVHcmFtbWFyID0gdGhpcy5nZXRHQXN0UHJvZHVjdGlvbnMoKVtydWxlTmFtZV07XG4gICAgICAgIGNvbnN0IGxvb2tBaGVhZFBhdGhzUGVyQWx0ZXJuYXRpdmUgPSBnZXRMb29rYWhlYWRQYXRoc0Zvck9wdGlvbmFsUHJvZChvY2N1cnJlbmNlLCBydWxlR3JhbW1hciwgcHJvZFR5cGUsIHRoaXMubWF4TG9va2FoZWFkKTtcbiAgICAgICAgY29uc3QgaW5zaWRlUHJvZFBhdGhzID0gbG9va0FoZWFkUGF0aHNQZXJBbHRlcm5hdGl2ZVswXTtcbiAgICAgICAgY29uc3QgYWN0dWFsVG9rZW5zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMubWF4TG9va2FoZWFkOyBpKyspIHtcbiAgICAgICAgICAgIGFjdHVhbFRva2Vucy5wdXNoKHRoaXMuTEEoaSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtcbiAgICAgICAgICAgIGV4cGVjdGVkSXRlcmF0aW9uUGF0aHM6IGluc2lkZVByb2RQYXRocyxcbiAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsVG9rZW5zLFxuICAgICAgICAgICAgcHJldmlvdXM6IHRoaXMuTEEoMCksXG4gICAgICAgICAgICBjdXN0b21Vc2VyRGVzY3JpcHRpb246IHVzZXJEZWZpbmVkRXJyTXNnLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHJ1bGVOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBFYXJseUV4aXRFeGNlcHRpb24obXNnLCB0aGlzLkxBKDEpLCB0aGlzLkxBKDApKSk7XG4gICAgfVxuICAgIC8vIFRPRE86IGNvbnNpZGVyIGNhY2hpbmcgdGhlIGVycm9yIG1lc3NhZ2UgY29tcHV0ZWQgaW5mb3JtYXRpb25cbiAgICByYWlzZU5vQWx0RXhjZXB0aW9uKG9jY3VycmVuY2UsIGVyck1zZ1R5cGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCk7XG4gICAgICAgIGNvbnN0IHJ1bGVHcmFtbWFyID0gdGhpcy5nZXRHQXN0UHJvZHVjdGlvbnMoKVtydWxlTmFtZV07XG4gICAgICAgIC8vIFRPRE86IGdldExvb2thaGVhZFBhdGhzRm9yT3IgY2FuIGJlIHNsb3cgZm9yIGxhcmdlIGVub3VnaCBtYXhMb29rYWhlYWQgYW5kIGNlcnRhaW4gZ3JhbW1hcnMsIGNvbnNpZGVyIGNhY2hpbmcgP1xuICAgICAgICBjb25zdCBsb29rQWhlYWRQYXRoc1BlckFsdGVybmF0aXZlID0gZ2V0TG9va2FoZWFkUGF0aHNGb3JPcihvY2N1cnJlbmNlLCBydWxlR3JhbW1hciwgdGhpcy5tYXhMb29rYWhlYWQpO1xuICAgICAgICBjb25zdCBhY3R1YWxUb2tlbnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5tYXhMb29rYWhlYWQ7IGkrKykge1xuICAgICAgICAgICAgYWN0dWFsVG9rZW5zLnB1c2godGhpcy5MQShpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldmlvdXNUb2tlbiA9IHRoaXMuTEEoMCk7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IHRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZXhwZWN0ZWRQYXRoc1BlckFsdDogbG9va0FoZWFkUGF0aHNQZXJBbHRlcm5hdGl2ZSxcbiAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsVG9rZW5zLFxuICAgICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzVG9rZW4sXG4gICAgICAgICAgICBjdXN0b21Vc2VyRGVzY3JpcHRpb246IGVyck1zZ1R5cGVzLFxuICAgICAgICAgICAgcnVsZU5hbWU6IHRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihlcnJNc2csIHRoaXMuTEEoMSksIHByZXZpb3VzVG9rZW4pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcl9oYW5kbGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgTmV4dEFmdGVyVG9rZW5XYWxrZXIsIG5leHRQb3NzaWJsZVRva2Vuc0FmdGVyLCB9IGZyb20gXCIuLi8uLi9ncmFtbWFyL2ludGVycHJldGVyLmpzXCI7XG5pbXBvcnQgeyBmaXJzdCwgaXNVbmRlZmluZWQgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5leHBvcnQgY2xhc3MgQ29udGVudEFzc2lzdCB7XG4gICAgaW5pdENvbnRlbnRBc3Npc3QoKSB7IH1cbiAgICBjb21wdXRlQ29udGVudEFzc2lzdChzdGFydFJ1bGVOYW1lLCBwcmVjZWRpbmdJbnB1dCkge1xuICAgICAgICBjb25zdCBzdGFydFJ1bGVHYXN0ID0gdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtzdGFydFJ1bGVOYW1lXTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHN0YXJ0UnVsZUdhc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUnVsZSAtPiR7c3RhcnRSdWxlTmFtZX08LSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGdyYW1tYXIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NzaWJsZVRva2Vuc0FmdGVyKFtzdGFydFJ1bGVHYXN0XSwgcHJlY2VkaW5nSW5wdXQsIHRoaXMudG9rZW5NYXRjaGVyLCB0aGlzLm1heExvb2thaGVhZCk7XG4gICAgfVxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIGJlIGEgbWVtYmVyIG1ldGhvZCBvciBhIHV0aWxpdHk/IGl0IGRvZXMgbm90IGhhdmUgYW55IHN0YXRlIG9yIHVzYWdlIG9mICd0aGlzJy4uLlxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIGJlIG1vcmUgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJP1xuICAgIGdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMoZ3JhbW1hclBhdGgpIHtcbiAgICAgICAgY29uc3QgdG9wUnVsZU5hbWUgPSBmaXJzdChncmFtbWFyUGF0aC5ydWxlU3RhY2spO1xuICAgICAgICBjb25zdCBnYXN0UHJvZHVjdGlvbnMgPSB0aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpO1xuICAgICAgICBjb25zdCB0b3BQcm9kdWN0aW9uID0gZ2FzdFByb2R1Y3Rpb25zW3RvcFJ1bGVOYW1lXTtcbiAgICAgICAgY29uc3QgbmV4dFBvc3NpYmxlVG9rZW5UeXBlcyA9IG5ldyBOZXh0QWZ0ZXJUb2tlbldhbGtlcih0b3BQcm9kdWN0aW9uLCBncmFtbWFyUGF0aCkuc3RhcnRXYWxraW5nKCk7XG4gICAgICAgIHJldHVybiBuZXh0UG9zc2libGVUb2tlblR5cGVzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHRfYXNzaXN0LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZm9yRWFjaCwgaGFzLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBsYXN0IGFzIHBlZWssIHNvbWUsIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpb24sIEFsdGVybmF0aXZlLCBOb25UZXJtaW5hbCwgT3B0aW9uLCBSZXBldGl0aW9uLCBSZXBldGl0aW9uTWFuZGF0b3J5LCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIFJ1bGUsIFRlcm1pbmFsLCB9IGZyb20gXCJAY2hldnJvdGFpbi9nYXN0XCI7XG5pbXBvcnQgeyBMZXhlciB9IGZyb20gXCIuLi8uLi8uLi9zY2FuL2xleGVyX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgYXVnbWVudFRva2VuVHlwZXMsIGhhc1Nob3J0S2V5UHJvcGVydHksIH0gZnJvbSBcIi4uLy4uLy4uL3NjYW4vdG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbiwgY3JlYXRlVG9rZW5JbnN0YW5jZSwgfSBmcm9tIFwiLi4vLi4vLi4vc2Nhbi90b2tlbnNfcHVibGljLmpzXCI7XG5pbXBvcnQgeyBFTkRfT0ZfRklMRSB9IGZyb20gXCIuLi9wYXJzZXIuanNcIjtcbmltcG9ydCB7IEJJVFNfRk9SX09DQ1VSUkVOQ0VfSURYIH0gZnJvbSBcIi4uLy4uL2dyYW1tYXIva2V5cy5qc1wiO1xuY29uc3QgUkVDT1JESU5HX05VTExfT0JKRUNUID0ge1xuICAgIGRlc2NyaXB0aW9uOiBcIlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2VcIixcbn07XG5PYmplY3QuZnJlZXplKFJFQ09SRElOR19OVUxMX09CSkVDVCk7XG5jb25zdCBIQU5ETEVfU0VQQVJBVE9SID0gdHJ1ZTtcbmNvbnN0IE1BWF9NRVRIT0RfSURYID0gTWF0aC5wb3coMiwgQklUU19GT1JfT0NDVVJSRU5DRV9JRFgpIC0gMTtcbmNvbnN0IFJGVCA9IGNyZWF0ZVRva2VuKHsgbmFtZTogXCJSRUNPUkRJTkdfUEhBU0VfVE9LRU5cIiwgcGF0dGVybjogTGV4ZXIuTkEgfSk7XG5hdWdtZW50VG9rZW5UeXBlcyhbUkZUXSk7XG5jb25zdCBSRUNPUkRJTkdfUEhBU0VfVE9LRU4gPSBjcmVhdGVUb2tlbkluc3RhbmNlKFJGVCwgXCJUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2VcXG5cXHRcIiArXG4gICAgXCJcIiArXG4gICAgXCJTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzXCIsIFxuLy8gVXNpbmcgXCItMVwiIGluc3RlYWQgb2YgTmFOIChhcyBpbiBFT0YpIGJlY2F1c2UgYW4gYWN0dWFsIG51bWJlciBpcyBsZXNzIGxpa2VseSB0b1xuLy8gY2F1c2UgZXJyb3JzIGlmIHRoZSBvdXRwdXQgb2YgTEEgb3IgQ09OU1VNRSB3b3VsZCBiZSAoaW5jb3JyZWN0bHkpIHVzZWQgZHVyaW5nIHRoZSByZWNvcmRpbmcgcGhhc2UuXG4tMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTtcbk9iamVjdC5mcmVlemUoUkVDT1JESU5HX1BIQVNFX1RPS0VOKTtcbmNvbnN0IFJFQ09SRElOR19QSEFTRV9DU1ROT0RFID0ge1xuICAgIG5hbWU6IFwiVGhpcyBDU1ROb2RlIGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGluIFJlY29yZGluZyBQaGFzZVxcblxcdFwiICtcbiAgICAgICAgXCJTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzXCIsXG4gICAgY2hpbGRyZW46IHt9LFxufTtcbi8qKlxuICogVGhpcyB0cmFpdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiB0aGUgR0FTVCBzdHJ1Y3R1cmUgZm9yIENoZXZyb3RhaW4gR3JhbW1hcnNcbiAqL1xuZXhwb3J0IGNsYXNzIEdhc3RSZWNvcmRlciB7XG4gICAgaW5pdEdhc3RSZWNvcmRlcihjb25maWcpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5SRUNPUkRJTkdfUEhBU0UgPSBmYWxzZTtcbiAgICB9XG4gICAgZW5hYmxlUmVjb3JkaW5nKCkge1xuICAgICAgICB0aGlzLlJFQ09SRElOR19QSEFTRSA9IHRydWU7XG4gICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkVuYWJsZSBSZWNvcmRpbmdcIiwgKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXYXJuaW5nIERhcmsgVm9vZG9vIE1hZ2ljIHVwY29taW5nIVxuICAgICAgICAgICAgICogV2UgYXJlIFwicmVwbGFjaW5nXCIgdGhlIHB1YmxpYyBwYXJzaW5nIERTTCBtZXRob2RzIEFQSVxuICAgICAgICAgICAgICogV2l0aCAqKm5ldyoqIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBvbiB0aGUgUGFyc2VyICoqaW5zdGFuY2UqKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFNvIGZhciB0aGlzIGlzIHRoZSBvbmx5IHdheSBJJ3ZlIGZvdW5kIHRvIGF2b2lkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGR1cmluZyBwYXJzaW5nIHRpbWUuXG4gICAgICAgICAgICAgKiAtIEFwcHJveCAzMCUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3YXMgbWVhc3VyZWQgb24gQ2hyb21lIDc1IENhbmFyeSB3aGVuIGF0dGVtcHRpbmcgdG8gcmVwbGFjZSB0aGUgXCJpbnRlcm5hbFwiXG4gICAgICAgICAgICAgKiAgIGltcGxlbWVudGF0aW9ucyBkaXJlY3RseSBpbnN0ZWFkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBpID4gMCA/IGkgOiBcIlwiO1xuICAgICAgICAgICAgICAgIHRoaXNbYENPTlNVTUUke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbFJlY29yZChhcmcxLCBpLCBhcmcyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXNbYFNVQlJVTEUke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChhcmcxLCBpLCBhcmcyKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXNbYE9QVElPTiR7aWR4fWBdID0gZnVuY3Rpb24gKGFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQoYXJnMSwgaSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzW2BPUiR7aWR4fWBdID0gZnVuY3Rpb24gKGFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JJbnRlcm5hbFJlY29yZChhcmcxLCBpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXNbYE1BTlkke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFueUludGVybmFsUmVjb3JkKGksIGFyZzEpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpc1tgTUFOWV9TRVAke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoaSwgYXJnMSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzW2BBVF9MRUFTVF9PTkUke2lkeH1gXSA9IGZ1bmN0aW9uIChhcmcxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXRMZWFzdE9uZUludGVybmFsUmVjb3JkKGksIGFyZzEpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpc1tgQVRfTEVBU1RfT05FX1NFUCR7aWR4fWBdID0gZnVuY3Rpb24gKGFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbFJlY29yZChpLCBhcmcxKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRFNMIG1ldGhvZHMgd2l0aCB0aGUgaWR4KHN1ZmZpeCkgYXMgYW4gYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXNbYGNvbnN1bWVgXSA9IGZ1bmN0aW9uIChpZHgsIGFyZzEsIGFyZzIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQoYXJnMSwgaWR4LCBhcmcyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BzdWJydWxlYF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxLCBhcmcyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKGFyZzEsIGlkeCwgYXJnMik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpc1tgb3B0aW9uYF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQoYXJnMSwgaWR4KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BvcmBdID0gZnVuY3Rpb24gKGlkeCwgYXJnMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQoYXJnMSwgaWR4KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BtYW55YF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoaWR4LCBhcmcxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzW2BhdExlYXN0T25lYF0gPSBmdW5jdGlvbiAoaWR4LCBhcmcxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoaWR4LCBhcmcxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLkFDVElPTiA9IHRoaXMuQUNUSU9OX1JFQ09SRDtcbiAgICAgICAgICAgIHRoaXMuQkFDS1RSQUNLID0gdGhpcy5CQUNLVFJBQ0tfUkVDT1JEO1xuICAgICAgICAgICAgdGhpcy5MQSA9IHRoaXMuTEFfUkVDT1JEO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzYWJsZVJlY29yZGluZygpIHtcbiAgICAgICAgdGhpcy5SRUNPUkRJTkdfUEhBU0UgPSBmYWxzZTtcbiAgICAgICAgLy8gQnkgZGVsZXRpbmcgdGhlc2UgKippbnN0YW5jZSoqIHByb3BlcnRpZXMsIGFueSBmdXR1cmUgaW52b2NhdGlvblxuICAgICAgICAvLyB3aWxsIGJlIGRlZmVycmVkIHRvIHRoZSBvcmlnaW5hbCBtZXRob2RzIG9uIHRoZSAqKnByb3RvdHlwZSoqIG9iamVjdFxuICAgICAgICAvLyBUaGlzIHNlZW1zIHRvIGdldCByaWQgb2YgYW55IGluY29ycmVjdCBvcHRpbWl6YXRpb25zIHRoYXQgVjggbWF5XG4gICAgICAgIC8vIGRvIGR1cmluZyB0aGUgcmVjb3JkaW5nIHBoYXNlLlxuICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJEZWxldGluZyBSZWNvcmRpbmcgbWV0aG9kc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IGkgPiAwID8gaSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoYXRbYENPTlNVTUUke2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgU1VCUlVMRSR7aWR4fWBdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BPUFRJT04ke2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgT1Ike2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgTUFOWSR7aWR4fWBdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BNQU5ZX1NFUCR7aWR4fWBdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BBVF9MRUFTVF9PTkUke2lkeH1gXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhhdFtgQVRfTEVBU1RfT05FX1NFUCR7aWR4fWBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoYXRbYGNvbnN1bWVgXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BzdWJydWxlYF07XG4gICAgICAgICAgICBkZWxldGUgdGhhdFtgb3B0aW9uYF07XG4gICAgICAgICAgICBkZWxldGUgdGhhdFtgb3JgXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGF0W2BtYW55YF07XG4gICAgICAgICAgICBkZWxldGUgdGhhdFtgYXRMZWFzdE9uZWBdO1xuICAgICAgICAgICAgZGVsZXRlIHRoYXQuQUNUSU9OO1xuICAgICAgICAgICAgZGVsZXRlIHRoYXQuQkFDS1RSQUNLO1xuICAgICAgICAgICAgZGVsZXRlIHRoYXQuTEE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyAgIFBhcnNlciBtZXRob2RzIGFyZSBjYWxsZWQgaW5zaWRlIGFuIEFDVElPTj9cbiAgICAvLyAgIE1heWJlIHRyeS9jYXRjaC9maW5hbGx5IG9uIEFDVElPTlMgd2hpbGUgZGlzYWJsaW5nIHRoZSByZWNvcmRlcnMgc3RhdGUgY2hhbmdlcz9cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIG5vb3AgcGxhY2UgaG9sZGVyXG4gICAgQUNUSU9OX1JFQ09SRChpbXBsKSB7XG4gICAgICAgIC8vIE5PLU9QIGR1cmluZyByZWNvcmRpbmdcbiAgICB9XG4gICAgLy8gRXhlY3V0aW5nIGJhY2t0cmFja2luZyBsb2dpYyB3aWxsIGJyZWFrIG91ciByZWNvcmRpbmcgbG9naWMgYXNzdW1wdGlvbnNcbiAgICBCQUNLVFJBQ0tfUkVDT1JEKGdyYW1tYXJSdWxlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgIH1cbiAgICAvLyBMQSBpcyBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEkgYW5kIG1heSBiZSB1c2VkIGZvciBjdXN0b20gbG9va2FoZWFkIGxvZ2ljXG4gICAgLy8gYnkgZW5kIHVzZXJzIHdobyBtYXkgZm9yZ2V0IHRvIHdyYXAgaXQgaW4gQUNUSU9OIG9yIGluc2lkZSBhIEdBVEVcbiAgICBMQV9SRUNPUkQoaG93TXVjaCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIHRoZSBSRUNPUkRfUEhBU0VfVE9LRU4gaGVyZSBiZWNhdXNlIHNvbWVvbmUgbWF5IGRlcGVuZFxuICAgICAgICAvLyBPbiBMQSByZXR1cm4gRU9GIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHNvIGFuIGluZmluaXRlIGxvb3AgbWF5IG9jY3VyLlxuICAgICAgICByZXR1cm4gRU5EX09GX0ZJTEU7XG4gICAgfVxuICAgIHRvcExldmVsUnVsZVJlY29yZChuYW1lLCBkZWYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RvcExldmVsUnVsZSA9IG5ldyBSdWxlKHsgZGVmaW5pdGlvbjogW10sIG5hbWU6IG5hbWUgfSk7XG4gICAgICAgICAgICBuZXdUb3BMZXZlbFJ1bGUubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG5ld1RvcExldmVsUnVsZSk7XG4gICAgICAgICAgICBkZWYuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RvcExldmVsUnVsZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRXJyb3IuS05PV05fUkVDT1JERVJfRVJST1IgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEVycm9yLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFcnJvci5tZXNzYWdlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuXFx0IFRoaXMgZXJyb3Igd2FzIHRocm93biBkdXJpbmcgdGhlIFwiZ3JhbW1hciByZWNvcmRpbmcgcGhhc2VcIiBGb3IgbW9yZSBpbmZvIHNlZTpcXG5cXHQnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChtdXRhYmlsaXR5RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IG5vdCBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgb3JpZ2luYWwgZXJyb3Igb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBwYXJzaW5nIERTTFxuICAgIG9wdGlvbkludGVybmFsUmVjb3JkKGFjdGlvbk9STWV0aG9kRGVmLCBvY2N1cnJlbmNlKSB7XG4gICAgICAgIHJldHVybiByZWNvcmRQcm9kLmNhbGwodGhpcywgT3B0aW9uLCBhY3Rpb25PUk1ldGhvZERlZiwgb2NjdXJyZW5jZSk7XG4gICAgfVxuICAgIGF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZWNvcmRQcm9kLmNhbGwodGhpcywgUmVwZXRpdGlvbk1hbmRhdG9yeSwgYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UpO1xuICAgIH1cbiAgICBhdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJlY29yZFByb2QuY2FsbCh0aGlzLCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgb3B0aW9ucywgb2NjdXJyZW5jZSwgSEFORExFX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIG1hbnlJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBhY3Rpb25PUk1ldGhvZERlZikge1xuICAgICAgICByZWNvcmRQcm9kLmNhbGwodGhpcywgUmVwZXRpdGlvbiwgYWN0aW9uT1JNZXRob2REZWYsIG9jY3VycmVuY2UpO1xuICAgIH1cbiAgICBtYW55U2VwRmlyc3RJbnRlcm5hbFJlY29yZChvY2N1cnJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJlY29yZFByb2QuY2FsbCh0aGlzLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgb3B0aW9ucywgb2NjdXJyZW5jZSwgSEFORExFX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIG9ySW50ZXJuYWxSZWNvcmQoYWx0c09yT3B0cywgb2NjdXJyZW5jZSkge1xuICAgICAgICByZXR1cm4gcmVjb3JkT3JQcm9kLmNhbGwodGhpcywgYWx0c09yT3B0cywgb2NjdXJyZW5jZSk7XG4gICAgfVxuICAgIHN1YnJ1bGVJbnRlcm5hbFJlY29yZChydWxlVG9DYWxsLCBvY2N1cnJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydE1ldGhvZElkeElzVmFsaWQob2NjdXJyZW5jZSk7XG4gICAgICAgIGlmICghcnVsZVRvQ2FsbCB8fCBoYXMocnVsZVRvQ2FsbCwgXCJydWxlTmFtZVwiKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGA8U1VCUlVMRSR7Z2V0SWR4U3VmZml4KG9jY3VycmVuY2UpfT4gYXJndW1lbnQgaXMgaW52YWxpZGAgK1xuICAgICAgICAgICAgICAgIGAgZXhwZWN0aW5nIGEgUGFyc2VyIG1ldGhvZCByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkocnVsZVRvQ2FsbCl9PmAgK1xuICAgICAgICAgICAgICAgIGBcXG4gaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTtcbiAgICAgICAgICAgIGVycm9yLktOT1dOX1JFQ09SREVSX0VSUk9SID0gdHJ1ZTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZQcm9kID0gcGVlayh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayk7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZVRvQ2FsbC5ydWxlTmFtZTtcbiAgICAgICAgY29uc3QgbmV3Tm9uZVRlcm1pbmFsID0gbmV3IE5vblRlcm1pbmFsKHtcbiAgICAgICAgICAgIGlkeDogb2NjdXJyZW5jZSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTmFtZTogcnVsZU5hbWUsXG4gICAgICAgICAgICBsYWJlbDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLkxBQkVMLFxuICAgICAgICAgICAgLy8gVGhlIHJlc29sdmluZyBvZiB0aGUgYHJlZmVyZW5jZWRSdWxlYCBwcm9wZXJ0eSB3aWxsIGJlIGRvbmUgb25jZSBhbGwgdGhlIFJ1bGUncyBHQVNUcyBoYXZlIGJlZW4gY3JlYXRlZFxuICAgICAgICAgICAgcmVmZXJlbmNlZFJ1bGU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZQcm9kLmRlZmluaXRpb24ucHVzaChuZXdOb25lVGVybWluYWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXRDc3RcbiAgICAgICAgICAgID8gUkVDT1JESU5HX1BIQVNFX0NTVE5PREVcbiAgICAgICAgICAgIDogUkVDT1JESU5HX05VTExfT0JKRUNUO1xuICAgIH1cbiAgICBjb25zdW1lSW50ZXJuYWxSZWNvcmQodG9rVHlwZSwgb2NjdXJyZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBhc3NlcnRNZXRob2RJZHhJc1ZhbGlkKG9jY3VycmVuY2UpO1xuICAgICAgICBpZiAoIWhhc1Nob3J0S2V5UHJvcGVydHkodG9rVHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGA8Q09OU1VNRSR7Z2V0SWR4U3VmZml4KG9jY3VycmVuY2UpfT4gYXJndW1lbnQgaXMgaW52YWxpZGAgK1xuICAgICAgICAgICAgICAgIGAgZXhwZWN0aW5nIGEgVG9rZW5UeXBlIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeSh0b2tUeXBlKX0+YCArXG4gICAgICAgICAgICAgICAgYFxcbiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO1xuICAgICAgICAgICAgZXJyb3IuS05PV05fUkVDT1JERVJfRVJST1IgPSB0cnVlO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldlByb2QgPSBwZWVrKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKTtcbiAgICAgICAgY29uc3QgbmV3Tm9uZVRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKHtcbiAgICAgICAgICAgIGlkeDogb2NjdXJyZW5jZSxcbiAgICAgICAgICAgIHRlcm1pbmFsVHlwZTogdG9rVHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuTEFCRUwsXG4gICAgICAgIH0pO1xuICAgICAgICBwcmV2UHJvZC5kZWZpbml0aW9uLnB1c2gobmV3Tm9uZVRlcm1pbmFsKTtcbiAgICAgICAgcmV0dXJuIFJFQ09SRElOR19QSEFTRV9UT0tFTjtcbiAgICB9XG59XG5mdW5jdGlvbiByZWNvcmRQcm9kKHByb2RDb25zdHJ1Y3RvciwgbWFpblByb2RBcmcsIG9jY3VycmVuY2UsIGhhbmRsZVNlcCA9IGZhbHNlKSB7XG4gICAgYXNzZXJ0TWV0aG9kSWR4SXNWYWxpZChvY2N1cnJlbmNlKTtcbiAgICBjb25zdCBwcmV2UHJvZCA9IHBlZWsodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spO1xuICAgIGNvbnN0IGdyYW1tYXJBY3Rpb24gPSBpc0Z1bmN0aW9uKG1haW5Qcm9kQXJnKSA/IG1haW5Qcm9kQXJnIDogbWFpblByb2RBcmcuREVGO1xuICAgIGNvbnN0IG5ld1Byb2QgPSBuZXcgcHJvZENvbnN0cnVjdG9yKHsgZGVmaW5pdGlvbjogW10sIGlkeDogb2NjdXJyZW5jZSB9KTtcbiAgICBpZiAoaGFuZGxlU2VwKSB7XG4gICAgICAgIG5ld1Byb2Quc2VwYXJhdG9yID0gbWFpblByb2RBcmcuU0VQO1xuICAgIH1cbiAgICBpZiAoaGFzKG1haW5Qcm9kQXJnLCBcIk1BWF9MT09LQUhFQURcIikpIHtcbiAgICAgICAgbmV3UHJvZC5tYXhMb29rYWhlYWQgPSBtYWluUHJvZEFyZy5NQVhfTE9PS0FIRUFEO1xuICAgIH1cbiAgICB0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG5ld1Byb2QpO1xuICAgIGdyYW1tYXJBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICBwcmV2UHJvZC5kZWZpbml0aW9uLnB1c2gobmV3UHJvZCk7XG4gICAgdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIFJFQ09SRElOR19OVUxMX09CSkVDVDtcbn1cbmZ1bmN0aW9uIHJlY29yZE9yUHJvZChtYWluUHJvZEFyZywgb2NjdXJyZW5jZSkge1xuICAgIGFzc2VydE1ldGhvZElkeElzVmFsaWQob2NjdXJyZW5jZSk7XG4gICAgY29uc3QgcHJldlByb2QgPSBwZWVrKHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrKTtcbiAgICAvLyBPbmx5IGFuIGFycmF5IG9mIGFsdGVybmF0aXZlc1xuICAgIGNvbnN0IGhhc09wdGlvbnMgPSBpc0FycmF5KG1haW5Qcm9kQXJnKSA9PT0gZmFsc2U7XG4gICAgY29uc3QgYWx0cyA9IGhhc09wdGlvbnMgPT09IGZhbHNlID8gbWFpblByb2RBcmcgOiBtYWluUHJvZEFyZy5ERUY7XG4gICAgY29uc3QgbmV3T3JQcm9kID0gbmV3IEFsdGVybmF0aW9uKHtcbiAgICAgICAgZGVmaW5pdGlvbjogW10sXG4gICAgICAgIGlkeDogb2NjdXJyZW5jZSxcbiAgICAgICAgaWdub3JlQW1iaWd1aXRpZXM6IGhhc09wdGlvbnMgJiYgbWFpblByb2RBcmcuSUdOT1JFX0FNQklHVUlUSUVTID09PSB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChoYXMobWFpblByb2RBcmcsIFwiTUFYX0xPT0tBSEVBRFwiKSkge1xuICAgICAgICBuZXdPclByb2QubWF4TG9va2FoZWFkID0gbWFpblByb2RBcmcuTUFYX0xPT0tBSEVBRDtcbiAgICB9XG4gICAgY29uc3QgaGFzUHJlZGljYXRlcyA9IHNvbWUoYWx0cywgKGN1cnJBbHQpID0+IGlzRnVuY3Rpb24oY3VyckFsdC5HQVRFKSk7XG4gICAgbmV3T3JQcm9kLmhhc1ByZWRpY2F0ZXMgPSBoYXNQcmVkaWNhdGVzO1xuICAgIHByZXZQcm9kLmRlZmluaXRpb24ucHVzaChuZXdPclByb2QpO1xuICAgIGZvckVhY2goYWx0cywgKGN1cnJBbHQpID0+IHtcbiAgICAgICAgY29uc3QgY3VyckFsdEZsYXQgPSBuZXcgQWx0ZXJuYXRpdmUoeyBkZWZpbml0aW9uOiBbXSB9KTtcbiAgICAgICAgbmV3T3JQcm9kLmRlZmluaXRpb24ucHVzaChjdXJyQWx0RmxhdCk7XG4gICAgICAgIGlmIChoYXMoY3VyckFsdCwgXCJJR05PUkVfQU1CSUdVSVRJRVNcIikpIHtcbiAgICAgICAgICAgIGN1cnJBbHRGbGF0Lmlnbm9yZUFtYmlndWl0aWVzID0gY3VyckFsdC5JR05PUkVfQU1CSUdVSVRJRVM7IC8vIGFzc3VtZXMgZW5kIHVzZXIgcHJvdmlkZXMgdGhlIGNvcnJlY3QgY29uZmlnIHZhbHVlL3R5cGVcbiAgICAgICAgfVxuICAgICAgICAvLyAqKmltcGxpY2l0KiogaWdub3JlQW1iaWd1aXRpZXMgZHVlIHRvIHVzYWdlIG9mIGdhdGVcbiAgICAgICAgZWxzZSBpZiAoaGFzKGN1cnJBbHQsIFwiR0FURVwiKSkge1xuICAgICAgICAgICAgY3VyckFsdEZsYXQuaWdub3JlQW1iaWd1aXRpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVjb3JkaW5nUHJvZFN0YWNrLnB1c2goY3VyckFsdEZsYXQpO1xuICAgICAgICBjdXJyQWx0LkFMVC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUkVDT1JESU5HX05VTExfT0JKRUNUO1xufVxuZnVuY3Rpb24gZ2V0SWR4U3VmZml4KGlkeCkge1xuICAgIHJldHVybiBpZHggPT09IDAgPyBcIlwiIDogYCR7aWR4fWA7XG59XG5mdW5jdGlvbiBhc3NlcnRNZXRob2RJZHhJc1ZhbGlkKGlkeCkge1xuICAgIGlmIChpZHggPCAwIHx8IGlkeCA+IE1BWF9NRVRIT0RfSURYKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAvLyBUaGUgc3RhY2sgdHJhY2Ugd2lsbCBjb250YWluIGFsbCB0aGUgbmVlZGVkIGRldGFpbHNcbiAgICAgICAgYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke2lkeH0+XFxuXFx0YCArXG4gICAgICAgICAgICBgSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke01BWF9NRVRIT0RfSURYICsgMX1gKTtcbiAgICAgICAgZXJyb3IuS05PV05fUkVDT1JERVJfRVJST1IgPSB0cnVlO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nYXN0X3JlY29yZGVyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgaGFzIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IERFRkFVTFRfUEFSU0VSX0NPTkZJRyB9IGZyb20gXCIuLi9wYXJzZXIuanNcIjtcbi8qKlxuICogVHJhaXQgcmVzcG9uc2libGUgZm9yIHJ1bnRpbWUgcGFyc2luZyBlcnJvcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJmb3JtYW5jZVRyYWNlciB7XG4gICAgaW5pdFBlcmZvcm1hbmNlVHJhY2VyKGNvbmZpZykge1xuICAgICAgICBpZiAoaGFzKGNvbmZpZywgXCJ0cmFjZUluaXRQZXJmXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyVHJhY2VJbml0UGVyZiA9IGNvbmZpZy50cmFjZUluaXRQZXJmO1xuICAgICAgICAgICAgY29uc3QgdHJhY2VJc051bWJlciA9IHR5cGVvZiB1c2VyVHJhY2VJbml0UGVyZiA9PT0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0TWF4SWRlbnQgPSB0cmFjZUlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyB1c2VyVHJhY2VJbml0UGVyZlxuICAgICAgICAgICAgICAgIDogSW5maW5pdHk7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdFBlcmYgPSB0cmFjZUlzTnVtYmVyXG4gICAgICAgICAgICAgICAgPyB1c2VyVHJhY2VJbml0UGVyZiA+IDBcbiAgICAgICAgICAgICAgICA6IHVzZXJUcmFjZUluaXRQZXJmOyAvLyBhc3N1bWVzIGVuZCB1c2VyIHByb3ZpZGVzIHRoZSBjb3JyZWN0IGNvbmZpZyB2YWx1ZS90eXBlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdE1heElkZW50ID0gMDtcbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0UGVyZiA9IERFRkFVTFRfUEFSU0VSX0NPTkZJRy50cmFjZUluaXRQZXJmO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2VJbml0SW5kZW50ID0gLTE7XG4gICAgfVxuICAgIFRSQUNFX0lOSVQocGhhc2VEZXNjLCBwaGFzZUltcGwpIHtcbiAgICAgICAgLy8gTm8gbmVlZCB0byBvcHRpbWl6ZSB0aGlzIHVzaW5nIE5PT1AgcGF0dGVybiBiZWNhdXNlXG4gICAgICAgIC8vIEl0IGlzIG5vdCBjYWxsZWQgaW4gYSBob3Qgc3BvdC4uLlxuICAgICAgICBpZiAodGhpcy50cmFjZUluaXRQZXJmID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNlSW5pdEluZGVudCsrO1xuICAgICAgICAgICAgY29uc3QgaW5kZW50ID0gbmV3IEFycmF5KHRoaXMudHJhY2VJbml0SW5kZW50ICsgMSkuam9pbihcIlxcdFwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYWNlSW5pdEluZGVudCA8IHRoaXMudHJhY2VJbml0TWF4SWRlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpbmRlbnR9LS0+IDwke3BoYXNlRGVzY30+YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHRpbWUsIHZhbHVlIH0gPSB0aW1lcihwaGFzZUltcGwpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBEaWZmaWN1bHQgdG8gcmVwcm9kdWNlIHNwZWNpZmljIHBlcmZvcm1hbmNlIGJlaGF2aW9yICg+MTBtcykgaW4gdGVzdHMgKi9cbiAgICAgICAgICAgIGNvbnN0IHRyYWNlTWV0aG9kID0gdGltZSA+IDEwID8gY29uc29sZS53YXJuIDogY29uc29sZS5sb2c7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFjZUluaXRJbmRlbnQgPCB0aGlzLnRyYWNlSW5pdE1heElkZW50KSB7XG4gICAgICAgICAgICAgICAgdHJhY2VNZXRob2QoYCR7aW5kZW50fTwtLSA8JHtwaGFzZURlc2N9PiB0aW1lOiAke3RpbWV9bXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJhY2VJbml0SW5kZW50LS07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGhhc2VJbXBsKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmX3RyYWNlci5qcy5tYXAiLAogICAgImV4cG9ydCBmdW5jdGlvbiBhcHBseU1peGlucyhkZXJpdmVkQ3RvciwgYmFzZUN0b3JzKSB7XG4gICAgYmFzZUN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VQcm90byA9IGJhc2VDdG9yLnByb3RvdHlwZTtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZVByb3RvKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BOYW1lID09PSBcImNvbnN0cnVjdG9yXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYXNlUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2VQcm90bywgcHJvcE5hbWUpO1xuICAgICAgICAgICAgLy8gSGFuZGxlIEFjY2Vzc29yc1xuICAgICAgICAgICAgaWYgKGJhc2VQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgIChiYXNlUHJvcERlc2NyaXB0b3IuZ2V0IHx8IGJhc2VQcm9wRGVzY3JpcHRvci5zZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlcml2ZWRDdG9yLnByb3RvdHlwZSwgcHJvcE5hbWUsIGJhc2VQcm9wRGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZXJpdmVkQ3Rvci5wcm90b3R5cGVbcHJvcE5hbWVdID0gYmFzZUN0b3IucHJvdG90eXBlW3Byb3BOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBseV9taXhpbnMuanMubWFwIiwKICAgICJpbXBvcnQgeyBjbG9uZSwgZm9yRWFjaCwgaGFzLCBpc0VtcHR5LCBtYXAsIHZhbHVlcyB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IHRvRmFzdFByb3BlcnRpZXMgfSBmcm9tIFwiQGNoZXZyb3RhaW4vdXRpbHNcIjtcbmltcG9ydCB7IGNvbXB1dGVBbGxQcm9kc0ZvbGxvd3MgfSBmcm9tIFwiLi4vZ3JhbW1hci9mb2xsb3cuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRva2VuSW5zdGFuY2UsIEVPRiB9IGZyb20gXCIuLi8uLi9zY2FuL3Rva2Vuc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlciwgZGVmYXVsdFBhcnNlckVycm9yUHJvdmlkZXIsIH0gZnJvbSBcIi4uL2Vycm9yc19wdWJsaWMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVHcmFtbWFyLCB2YWxpZGF0ZUdyYW1tYXIsIH0gZnJvbSBcIi4uL2dyYW1tYXIvZ2FzdC9nYXN0X3Jlc29sdmVyX3B1YmxpYy5qc1wiO1xuaW1wb3J0IHsgUmVjb3ZlcmFibGUgfSBmcm9tIFwiLi90cmFpdHMvcmVjb3ZlcmFibGUuanNcIjtcbmltcG9ydCB7IExvb2tzQWhlYWQgfSBmcm9tIFwiLi90cmFpdHMvbG9va3NhaGVhZC5qc1wiO1xuaW1wb3J0IHsgVHJlZUJ1aWxkZXIgfSBmcm9tIFwiLi90cmFpdHMvdHJlZV9idWlsZGVyLmpzXCI7XG5pbXBvcnQgeyBMZXhlckFkYXB0ZXIgfSBmcm9tIFwiLi90cmFpdHMvbGV4ZXJfYWRhcHRlci5qc1wiO1xuaW1wb3J0IHsgUmVjb2duaXplckFwaSB9IGZyb20gXCIuL3RyYWl0cy9yZWNvZ25pemVyX2FwaS5qc1wiO1xuaW1wb3J0IHsgUmVjb2duaXplckVuZ2luZSB9IGZyb20gXCIuL3RyYWl0cy9yZWNvZ25pemVyX2VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyIH0gZnJvbSBcIi4vdHJhaXRzL2Vycm9yX2hhbmRsZXIuanNcIjtcbmltcG9ydCB7IENvbnRlbnRBc3Npc3QgfSBmcm9tIFwiLi90cmFpdHMvY29udGV4dF9hc3Npc3QuanNcIjtcbmltcG9ydCB7IEdhc3RSZWNvcmRlciB9IGZyb20gXCIuL3RyYWl0cy9nYXN0X3JlY29yZGVyLmpzXCI7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZVRyYWNlciB9IGZyb20gXCIuL3RyYWl0cy9wZXJmX3RyYWNlci5qc1wiO1xuaW1wb3J0IHsgYXBwbHlNaXhpbnMgfSBmcm9tIFwiLi91dGlscy9hcHBseV9taXhpbnMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlTG9va2FoZWFkIH0gZnJvbSBcIi4uL2dyYW1tYXIvY2hlY2tzLmpzXCI7XG5leHBvcnQgY29uc3QgRU5EX09GX0ZJTEUgPSBjcmVhdGVUb2tlbkluc3RhbmNlKEVPRiwgXCJcIiwgTmFOLCBOYU4sIE5hTiwgTmFOLCBOYU4sIE5hTik7XG5PYmplY3QuZnJlZXplKEVORF9PRl9GSUxFKTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBUlNFUl9DT05GSUcgPSBPYmplY3QuZnJlZXplKHtcbiAgICByZWNvdmVyeUVuYWJsZWQ6IGZhbHNlLFxuICAgIG1heExvb2thaGVhZDogMyxcbiAgICBkeW5hbWljVG9rZW5zRW5hYmxlZDogZmFsc2UsXG4gICAgb3V0cHV0Q3N0OiB0cnVlLFxuICAgIGVycm9yTWVzc2FnZVByb3ZpZGVyOiBkZWZhdWx0UGFyc2VyRXJyb3JQcm92aWRlcixcbiAgICBub2RlTG9jYXRpb25UcmFja2luZzogXCJub25lXCIsXG4gICAgdHJhY2VJbml0UGVyZjogZmFsc2UsXG4gICAgc2tpcFZhbGlkYXRpb25zOiBmYWxzZSxcbn0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUlVMRV9DT05GSUcgPSBPYmplY3QuZnJlZXplKHtcbiAgICByZWNvdmVyeVZhbHVlRnVuYzogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlc3luY0VuYWJsZWQ6IHRydWUsXG59KTtcbmV4cG9ydCB2YXIgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZTtcbihmdW5jdGlvbiAoUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSkge1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIklOVkFMSURfUlVMRV9OQU1FXCJdID0gMF0gPSBcIklOVkFMSURfUlVMRV9OQU1FXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiRFVQTElDQVRFX1JVTEVfTkFNRVwiXSA9IDFdID0gXCJEVVBMSUNBVEVfUlVMRV9OQU1FXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiSU5WQUxJRF9SVUxFX09WRVJSSURFXCJdID0gMl0gPSBcIklOVkFMSURfUlVMRV9PVkVSUklERVwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIkRVUExJQ0FURV9QUk9EVUNUSU9OU1wiXSA9IDNdID0gXCJEVVBMSUNBVEVfUFJPRFVDVElPTlNcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJVTlJFU09MVkVEX1NVQlJVTEVfUkVGXCJdID0gNF0gPSBcIlVOUkVTT0xWRURfU1VCUlVMRV9SRUZcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJMRUZUX1JFQ1VSU0lPTlwiXSA9IDVdID0gXCJMRUZUX1JFQ1VSU0lPTlwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk5PTkVfTEFTVF9FTVBUWV9BTFRcIl0gPSA2XSA9IFwiTk9ORV9MQVNUX0VNUFRZX0FMVFwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIkFNQklHVU9VU19BTFRTXCJdID0gN10gPSBcIkFNQklHVU9VU19BTFRTXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiQ09ORkxJQ1RfVE9LRU5TX1JVTEVTX05BTUVTUEFDRVwiXSA9IDhdID0gXCJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFXCI7XG4gICAgUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1wiSU5WQUxJRF9UT0tFTl9OQU1FXCJdID0gOV0gPSBcIklOVkFMSURfVE9LRU5fTkFNRVwiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIk5PX05PTl9FTVBUWV9MT09LQUhFQURcIl0gPSAxMF0gPSBcIk5PX05PTl9FTVBUWV9MT09LQUhFQURcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJBTUJJR1VPVVNfUFJFRklYX0FMVFNcIl0gPSAxMV0gPSBcIkFNQklHVU9VU19QUkVGSVhfQUxUU1wiO1xuICAgIFBhcnNlckRlZmluaXRpb25FcnJvclR5cGVbUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZVtcIlRPT19NQU5ZX0FMVFNcIl0gPSAxMl0gPSBcIlRPT19NQU5ZX0FMVFNcIjtcbiAgICBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlW1BhcnNlckRlZmluaXRpb25FcnJvclR5cGVbXCJDVVNUT01fTE9PS0FIRUFEX1ZBTElEQVRJT05cIl0gPSAxM10gPSBcIkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTlwiO1xufSkoUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSB8fCAoUGFyc2VyRGVmaW5pdGlvbkVycm9yVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gRU1QVFlfQUxUKHZhbHVlID0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59XG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcbiAgICAvKipcbiAgICAgKiAgQGRlcHJlY2F0ZWQgdXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkXG4gICAgICovXG4gICAgc3RhdGljIHBlcmZvcm1TZWxmQW5hbHlzaXMocGFyc2VySW5zdGFuY2UpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuXCIgK1xuICAgICAgICAgICAgXCJcXHRcXG5Vc2UgdGhlICoqaW5zdGFuY2UqKiBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBwZXJmb3JtU2VsZkFuYWx5c2lzKCkge1xuICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJwZXJmb3JtU2VsZkFuYWx5c2lzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGxldCBkZWZFcnJvcnNNc2dzO1xuICAgICAgICAgICAgdGhpcy5zZWxmQW5hbHlzaXNEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lO1xuICAgICAgICAgICAgdGhpcy5UUkFDRV9JTklUKFwidG9GYXN0UHJvcHNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcyB2b29kb28gbWFnaWMgdGhlIHBhcnNlciB3b3VsZCBiZSB4My14NCBzbG93ZXJcbiAgICAgICAgICAgICAgICAvLyBJdCBzZWVtcyBpdCBpcyBiZXR0ZXIgdG8gaW52b2tlIGB0b0Zhc3RQcm9wZXJ0aWVzYCAqKmJlZm9yZSoqXG4gICAgICAgICAgICAgICAgLy8gQW55IG1hbmlwdWxhdGlvbnMgb2YgdGhlIGB0aGlzYCBvYmplY3QgZG9uZSBkdXJpbmcgdGhlIHJlY29yZGluZyBwaGFzZS5cbiAgICAgICAgICAgICAgICB0b0Zhc3RQcm9wZXJ0aWVzKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJHcmFtbWFyIFJlY29yZGluZ1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVSZWNvcmRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGRpbmcgdGhlIEdBU1RcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzLmRlZmluZWRSdWxlc05hbWVzLCAoY3VyclJ1bGVOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVkUnVsZSA9IHRoaXNbY3VyclJ1bGVOYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsR3JhbW1hckFjdGlvbiA9IHdyYXBwZWRSdWxlW1wib3JpZ2luYWxHcmFtbWFyQWN0aW9uXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlY29yZGVkUnVsZUdhc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoYCR7Y3VyclJ1bGVOYW1lfSBSdWxlYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkUnVsZUdhc3QgPSB0aGlzLnRvcExldmVsUnVsZVJlY29yZChjdXJyUnVsZU5hbWUsIG9yaWdpbmFsR3JhbW1hckFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbY3VyclJ1bGVOYW1lXSA9IHJlY29yZGVkUnVsZUdhc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlUmVjb3JkaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZXJFcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuVFJBQ0VfSU5JVChcIkdyYW1tYXIgUmVzb2x2aW5nXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlckVycm9ycyA9IHJlc29sdmVHcmFtbWFyKHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHZhbHVlcyh0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmluaXRpb25FcnJvcnMgPSB0aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KHJlc29sdmVyRXJyb3JzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5UUkFDRV9JTklUKFwiR3JhbW1hciBWYWxpZGF0aW9uc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gb25seSBwZXJmb3JtIGFkZGl0aW9uYWwgZ3JhbW1hciB2YWxpZGF0aW9ucyBJRkYgbm8gcmVzb2x2aW5nIGVycm9ycyBoYXZlIG9jY3VycmVkLlxuICAgICAgICAgICAgICAgIC8vIGFzIHVucmVzb2x2ZWQgZ3JhbW1hciBtYXkgbGVhZCB0byB1bmhhbmRsZWQgcnVudGltZSBleGNlcHRpb25zIGluIHRoZSBmb2xsb3cgdXAgdmFsaWRhdGlvbnMuXG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkocmVzb2x2ZXJFcnJvcnMpICYmIHRoaXMuc2tpcFZhbGlkYXRpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVHcmFtbWFyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzOiB2YWx1ZXModGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlblR5cGVzOiB2YWx1ZXModGhpcy50b2tlbnNNYXApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyTXNnUHJvdmlkZXI6IGRlZmF1bHRHcmFtbWFyVmFsaWRhdG9yRXJyb3JQcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29rYWhlYWRWYWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVMb29rYWhlYWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkU3RyYXRlZ3k6IHRoaXMubG9va2FoZWFkU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlczogdmFsdWVzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5UeXBlczogdmFsdWVzKHRoaXMudG9rZW5zTWFwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaXRpb25FcnJvcnMgPSB0aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KHZhbGlkYXRpb25FcnJvcnMsIGxvb2thaGVhZFZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGhpcyBhbmFseXNpcyBtYXkgZmFpbCBpZiB0aGUgZ3JhbW1hciBpcyBub3QgcGVyZmVjdGx5IHZhbGlkXG4gICAgICAgICAgICBpZiAoaXNFbXB0eSh0aGlzLmRlZmluaXRpb25FcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlc3VsdHMgb2YgdGhlc2UgY29tcHV0YXRpb25zIGFyZSBub3QgbmVlZGVkIHVubGVzcyBlcnJvciByZWNvdmVyeSBpcyBlbmFibGVkLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlY292ZXJ5RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlRSQUNFX0lOSVQoXCJjb21wdXRlQWxsUHJvZHNGb2xsb3dzXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbEZvbGxvd3MgPSBjb21wdXRlQWxsUHJvZHNGb2xsb3dzKHZhbHVlcyh0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3luY0ZvbGxvd3MgPSBhbGxGb2xsb3dzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5UUkFDRV9JTklUKFwiQ29tcHV0ZUxvb2thaGVhZEZ1bmN0aW9uc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMubG9va2FoZWFkU3RyYXRlZ3kpLmluaXRpYWxpemUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlczogdmFsdWVzKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zKHZhbHVlcyh0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIVBhcnNlci5ERUZFUl9ERUZJTklUSU9OX0VSUk9SU19IQU5ETElORyAmJlxuICAgICAgICAgICAgICAgICFpc0VtcHR5KHRoaXMuZGVmaW5pdGlvbkVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBkZWZFcnJvcnNNc2dzID0gbWFwKHRoaXMuZGVmaW5pdGlvbkVycm9ycywgKGRlZkVycm9yKSA9PiBkZWZFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcnNlciBEZWZpbml0aW9uIEVycm9ycyBkZXRlY3RlZDpcXG4gJHtkZWZFcnJvcnNNc2dzLmpvaW4oXCJcXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uRXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuc2VsZkFuYWx5c2lzRG9uZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgdGhhdC5pbml0RXJyb3JIYW5kbGVyKGNvbmZpZyk7XG4gICAgICAgIHRoYXQuaW5pdExleGVyQWRhcHRlcigpO1xuICAgICAgICB0aGF0LmluaXRMb29rc0FoZWFkKGNvbmZpZyk7XG4gICAgICAgIHRoYXQuaW5pdFJlY29nbml6ZXJFbmdpbmUodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRSZWNvdmVyYWJsZShjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRUcmVlQnVpbGRlcihjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRDb250ZW50QXNzaXN0KCk7XG4gICAgICAgIHRoYXQuaW5pdEdhc3RSZWNvcmRlcihjb25maWcpO1xuICAgICAgICB0aGF0LmluaXRQZXJmb3JtYW5jZVRyYWNlcihjb25maWcpO1xuICAgICAgICBpZiAoaGFzKGNvbmZpZywgXCJpZ25vcmVkSXNzdWVzXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgPGlnbm9yZWRJc3N1ZXM+IElQYXJzZXJDb25maWcgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC5cXG5cXHRcIiArXG4gICAgICAgICAgICAgICAgXCJQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuXFxuXFx0XCIgK1xuICAgICAgICAgICAgICAgIFwiU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNJR05PUklOR19BTUJJR1VJVElFU1xcblxcdFwiICtcbiAgICAgICAgICAgICAgICBcIkZvciBmdXJ0aGVyIGRldGFpbHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tpcFZhbGlkYXRpb25zID0gaGFzKGNvbmZpZywgXCJza2lwVmFsaWRhdGlvbnNcIilcbiAgICAgICAgICAgID8gY29uZmlnLnNraXBWYWxpZGF0aW9ucyAvLyBjYXN0aW5nIGFzc3VtZXMgdGhlIGVuZCB1c2VyIHBhc3NpbmcgdGhlIGNvcnJlY3QgdHlwZVxuICAgICAgICAgICAgOiBERUZBVUxUX1BBUlNFUl9DT05GSUcuc2tpcFZhbGlkYXRpb25zO1xuICAgIH1cbn1cbi8vIFNldCB0aGlzIGZsYWcgdG8gdHJ1ZSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgUGFyc2VyIHRvIHRocm93IGVycm9yIHdoZW4gcHJvYmxlbXMgaW4gaXQncyBkZWZpbml0aW9uIGFyZSBkZXRlY3RlZC5cbi8vIChub3JtYWxseSBkdXJpbmcgdGhlIHBhcnNlcidzIGNvbnN0cnVjdG9yKS5cbi8vIFRoaXMgaXMgYSBkZXNpZ24gdGltZSBmbGFnLCBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHJ1bnRpbWUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIHBhcnNlciwganVzdCBkZXNpZ24gdGltZSBlcnJvcnMsXG4vLyBmb3IgZXhhbXBsZTogZHVwbGljYXRlIHJ1bGUgbmFtZXMsIHJlZmVyZW5jaW5nIGFuIHVucmVzb2x2ZWQgc3VicnVsZSwgZWN0Li4uXG4vLyBUaGlzIGZsYWcgc2hvdWxkIG5vdCBiZSBlbmFibGVkIGR1cmluZyBub3JtYWwgdXNhZ2UsIGl0IGlzIHVzZWQgaW4gc3BlY2lhbCBzaXR1YXRpb25zLCBmb3IgZXhhbXBsZSB3aGVuXG4vLyBuZWVkaW5nIHRvIGRpc3BsYXkgdGhlIHBhcnNlciBkZWZpbml0aW9uIGVycm9ycyBpbiBzb21lIEdVSShvbmxpbmUgcGxheWdyb3VuZCkuXG5QYXJzZXIuREVGRVJfREVGSU5JVElPTl9FUlJPUlNfSEFORExJTkcgPSBmYWxzZTtcbmFwcGx5TWl4aW5zKFBhcnNlciwgW1xuICAgIFJlY292ZXJhYmxlLFxuICAgIExvb2tzQWhlYWQsXG4gICAgVHJlZUJ1aWxkZXIsXG4gICAgTGV4ZXJBZGFwdGVyLFxuICAgIFJlY29nbml6ZXJFbmdpbmUsXG4gICAgUmVjb2duaXplckFwaSxcbiAgICBFcnJvckhhbmRsZXIsXG4gICAgQ29udGVudEFzc2lzdCxcbiAgICBHYXN0UmVjb3JkZXIsXG4gICAgUGVyZm9ybWFuY2VUcmFjZXIsXG5dKTtcbmV4cG9ydCBjbGFzcyBDc3RQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHRva2VuVm9jYWJ1bGFyeSwgY29uZmlnID0gREVGQVVMVF9QQVJTRVJfQ09ORklHKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0Nsb25lID0gY2xvbmUoY29uZmlnKTtcbiAgICAgICAgY29uZmlnQ2xvbmUub3V0cHV0Q3N0ID0gdHJ1ZTtcbiAgICAgICAgc3VwZXIodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWdDbG9uZSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEVtYmVkZGVkQWN0aW9uc1BhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWcgPSBERUZBVUxUX1BBUlNFUl9DT05GSUcpIHtcbiAgICAgICAgY29uc3QgY29uZmlnQ2xvbmUgPSBjbG9uZShjb25maWcpO1xuICAgICAgICBjb25maWdDbG9uZS5vdXRwdXRDc3QgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIodG9rZW5Wb2NhYnVsYXJ5LCBjb25maWdDbG9uZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2VyLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgR0FzdFZpc2l0b3IsIE5vblRlcm1pbmFsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbmltcG9ydCB7IGFzc2lnbiwgZmxhdHRlbiwgZ3JvdXBCeSwgbWFwLCBzb21lLCB2YWx1ZXMgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNb2RlbChwcm9kdWN0aW9ucykge1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBDc3ROb2RlRGVmaW5pdGlvbkdlbmVyYXRvcigpO1xuICAgIGNvbnN0IGFsbFJ1bGVzID0gdmFsdWVzKHByb2R1Y3Rpb25zKTtcbiAgICByZXR1cm4gbWFwKGFsbFJ1bGVzLCAocnVsZSkgPT4gZ2VuZXJhdG9yLnZpc2l0UnVsZShydWxlKSk7XG59XG5jbGFzcyBDc3ROb2RlRGVmaW5pdGlvbkdlbmVyYXRvciBleHRlbmRzIEdBc3RWaXNpdG9yIHtcbiAgICB2aXNpdFJ1bGUobm9kZSkge1xuICAgICAgICBjb25zdCByYXdFbGVtZW50cyA9IHRoaXMudmlzaXRFYWNoKG5vZGUuZGVmaW5pdGlvbik7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQgPSBncm91cEJ5KHJhd0VsZW1lbnRzLCAoZWwpID0+IGVsLnByb3BlcnR5TmFtZSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBtYXAoZ3JvdXBlZCwgKGdyb3VwLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE51bGxhYmxlID0gIXNvbWUoZ3JvdXAsIChlbCkgPT4gIWVsLmNhbkJlTnVsbCk7XG4gICAgICAgICAgICAvLyBJbiBhbiBhbHRlcm5hdGlvbiB3aXRoIGEgbGFiZWwgYSBwcm9wZXJ0eSBuYW1lIGNhbiBoYXZlXG4gICAgICAgICAgICAvLyBtdWx0aXBsZSB0eXBlcy5cbiAgICAgICAgICAgIGxldCBwcm9wZXJ0eVR5cGUgPSBncm91cFswXS50eXBlO1xuICAgICAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSBtYXAoZ3JvdXAsIChnKSA9PiBnLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogcHJvcGVydHlUeXBlLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBhbGxOdWxsYWJsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmlzaXRBbHRlcm5hdGl2ZShub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0RWFjaEFuZE92ZXJyaWRlV2l0aChub2RlLmRlZmluaXRpb24sIHsgY2FuQmVOdWxsOiB0cnVlIH0pO1xuICAgIH1cbiAgICB2aXNpdE9wdGlvbihub2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0RWFjaEFuZE92ZXJyaWRlV2l0aChub2RlLmRlZmluaXRpb24sIHsgY2FuQmVOdWxsOiB0cnVlIH0pO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb24obm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEVhY2hBbmRPdmVycmlkZVdpdGgobm9kZS5kZWZpbml0aW9uLCB7IGNhbkJlTnVsbDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgdmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRFYWNoKG5vZGUuZGVmaW5pdGlvbik7XG4gICAgfVxuICAgIHZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iobm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEVhY2gobm9kZS5kZWZpbml0aW9uKS5jb25jYXQoe1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBub2RlLnNlcGFyYXRvci5uYW1lLFxuICAgICAgICAgICAgY2FuQmVOdWxsOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZ2V0VHlwZShub2RlLnNlcGFyYXRvciksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRFYWNoQW5kT3ZlcnJpZGVXaXRoKG5vZGUuZGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgY2FuQmVOdWxsOiB0cnVlLFxuICAgICAgICB9KS5jb25jYXQoe1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBub2RlLnNlcGFyYXRvci5uYW1lLFxuICAgICAgICAgICAgY2FuQmVOdWxsOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogZ2V0VHlwZShub2RlLnNlcGFyYXRvciksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2aXNpdEFsdGVybmF0aW9uKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRFYWNoQW5kT3ZlcnJpZGVXaXRoKG5vZGUuZGVmaW5pdGlvbiwgeyBjYW5CZU51bGw6IHRydWUgfSk7XG4gICAgfVxuICAgIHZpc2l0VGVybWluYWwobm9kZSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogbm9kZS5sYWJlbCB8fCBub2RlLnRlcm1pbmFsVHlwZS5uYW1lLFxuICAgICAgICAgICAgICAgIGNhbkJlTnVsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0VHlwZShub2RlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuICAgIHZpc2l0Tm9uVGVybWluYWwobm9kZSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogbm9kZS5sYWJlbCB8fCBub2RlLm5vblRlcm1pbmFsTmFtZSxcbiAgICAgICAgICAgICAgICBjYW5CZU51bGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGdldFR5cGUobm9kZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cbiAgICB2aXNpdEVhY2hBbmRPdmVycmlkZVdpdGgoZGVmaW5pdGlvbiwgb3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG1hcCh0aGlzLnZpc2l0RWFjaChkZWZpbml0aW9uKSwgKGRlZmluaXRpb24pID0+IGFzc2lnbih7fSwgZGVmaW5pdGlvbiwgb3ZlcnJpZGUpKTtcbiAgICB9XG4gICAgdmlzaXRFYWNoKGRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4obWFwKGRlZmluaXRpb24sIChkZWZpbml0aW9uKSA9PiB0aGlzLnZpc2l0KGRlZmluaXRpb24pKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0VHlwZShwcm9kdWN0aW9uKSB7XG4gICAgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBOb25UZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJydWxlXCIsXG4gICAgICAgICAgICBuYW1lOiBwcm9kdWN0aW9uLnJlZmVyZW5jZWRSdWxlLm5hbWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IGtpbmQ6IFwidG9rZW5cIiB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kZWwuanMubWFwIiwKICAgICJpbXBvcnQgeyBidWlsZE1vZGVsIH0gZnJvbSBcIi4vbW9kZWwuanNcIjtcbmltcG9ydCB7IGdlbkR0cyB9IGZyb20gXCIuL2dlbmVyYXRlLmpzXCI7XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBpbmNsdWRlVmlzaXRvckludGVyZmFjZTogdHJ1ZSxcbiAgICB2aXNpdG9ySW50ZXJmYWNlTmFtZTogXCJJQ3N0Tm9kZVZpc2l0b3JcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDc3REdHMocHJvZHVjdGlvbnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlZmZlY3RpdmVPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGNvbnN0IG1vZGVsID0gYnVpbGRNb2RlbChwcm9kdWN0aW9ucyk7XG4gICAgcmV0dXJuIGdlbkR0cyhtb2RlbCwgZWZmZWN0aXZlT3B0aW9ucyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIiwKICAgICIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAtIHRyaWNreSB0byBpbXBvcnQgc29tZSB0aGluZ3MgZnJvbSB0aGlzIG1vZHVsZSBkdXJpbmcgdGVzdGluZyAqL1xuLy8gc2VtYW50aWMgdmVyc2lvblxuZXhwb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmV4cG9ydCB7IENzdFBhcnNlciwgRW1iZWRkZWRBY3Rpb25zUGFyc2VyLCBQYXJzZXJEZWZpbml0aW9uRXJyb3JUeXBlLCBFTVBUWV9BTFQsIH0gZnJvbSBcIi4vcGFyc2UvcGFyc2VyL3BhcnNlci5qc1wiO1xuZXhwb3J0IHsgTGV4ZXIsIExleGVyRGVmaW5pdGlvbkVycm9yVHlwZSB9IGZyb20gXCIuL3NjYW4vbGV4ZXJfcHVibGljLmpzXCI7XG4vLyBUb2tlbnMgdXRpbGl0aWVzXG5leHBvcnQgeyBjcmVhdGVUb2tlbiwgY3JlYXRlVG9rZW5JbnN0YW5jZSwgRU9GLCB0b2tlbkxhYmVsLCB0b2tlbk1hdGNoZXIsIHRva2VuTmFtZSwgfSBmcm9tIFwiLi9zY2FuL3Rva2Vuc19wdWJsaWMuanNcIjtcbi8vIExvb2thaGVhZFxuZXhwb3J0IHsgZ2V0TG9va2FoZWFkUGF0aHMgfSBmcm9tIFwiLi9wYXJzZS9ncmFtbWFyL2xvb2thaGVhZC5qc1wiO1xuZXhwb3J0IHsgTExrTG9va2FoZWFkU3RyYXRlZ3kgfSBmcm9tIFwiLi9wYXJzZS9ncmFtbWFyL2xsa19sb29rYWhlYWQuanNcIjtcbi8vIE90aGVyIFV0aWxpdGllc1xuZXhwb3J0IHsgZGVmYXVsdFBhcnNlckVycm9yUHJvdmlkZXIgfSBmcm9tIFwiLi9wYXJzZS9lcnJvcnNfcHVibGljLmpzXCI7XG5leHBvcnQgeyBFYXJseUV4aXRFeGNlcHRpb24sIGlzUmVjb2duaXRpb25FeGNlcHRpb24sIE1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiwgTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24sIE5vVmlhYmxlQWx0RXhjZXB0aW9uLCB9IGZyb20gXCIuL3BhcnNlL2V4Y2VwdGlvbnNfcHVibGljLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0TGV4ZXJFcnJvclByb3ZpZGVyIH0gZnJvbSBcIi4vc2Nhbi9sZXhlcl9lcnJvcnNfcHVibGljLmpzXCI7XG4vLyBncmFtbWFyIHJlZmxlY3Rpb24gQVBJXG5leHBvcnQgeyBBbHRlcm5hdGlvbiwgQWx0ZXJuYXRpdmUsIE5vblRlcm1pbmFsLCBPcHRpb24sIFJlcGV0aXRpb24sIFJlcGV0aXRpb25NYW5kYXRvcnksIFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uV2l0aFNlcGFyYXRvciwgUnVsZSwgVGVybWluYWwsIH0gZnJvbSBcIkBjaGV2cm90YWluL2dhc3RcIjtcbi8vIEdBU1QgVXRpbGl0aWVzXG5leHBvcnQgeyBzZXJpYWxpemVHcmFtbWFyLCBzZXJpYWxpemVQcm9kdWN0aW9uLCBHQXN0VmlzaXRvciwgfSBmcm9tIFwiQGNoZXZyb3RhaW4vZ2FzdFwiO1xuZXhwb3J0IHsgZ2VuZXJhdGVDc3REdHMgfSBmcm9tIFwiQGNoZXZyb3RhaW4vY3N0LWR0cy1nZW5cIjtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDYWNoZSgpIHtcbiAgICBjb25zb2xlLndhcm4oXCJUaGUgY2xlYXJDYWNoZSBmdW5jdGlvbiB3YXMgJ3NvZnQnIHJlbW92ZWQgZnJvbSB0aGUgQ2hldnJvdGFpbiBBUEkuXCIgK1xuICAgICAgICBcIlxcblxcdCBJdCBwZXJmb3JtcyBubyBhY3Rpb24gb3RoZXIgdGhhbiBwcmludGluZyB0aGlzIG1lc3NhZ2UuXCIgK1xuICAgICAgICBcIlxcblxcdCBQbGVhc2UgYXZvaWQgdXNpbmcgaXQgYXMgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQgaW4gdGhlIGZ1dHVyZVwiKTtcbn1cbmV4cG9ydCB7IGNyZWF0ZVN5bnRheERpYWdyYW1zQ29kZSB9IGZyb20gXCIuL2RpYWdyYW1zL3JlbmRlcl9wdWJsaWMuanNcIjtcbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgUGFyc2VyIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBDc3RQYXJzZXIgb3IgRW1iZWRkZWRBY3Rpb25zUGFyc2VyIGluc3RlYWQuXFx0XFxuXCIgK1xuICAgICAgICAgICAgXCJTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2NoYW5nZXMvQlJFQUtJTkdfQ0hBTkdFUy5odG1sI183LTAtMFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgbWFwIGZyb20gXCJsb2Rhc2gtZXMvbWFwLmpzXCI7XG5pbXBvcnQgZmlsdGVyIGZyb20gXCJsb2Rhc2gtZXMvZmlsdGVyLmpzXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGlvbiwgTm9uVGVybWluYWwsIE9wdGlvbiwgUmVwZXRpdGlvbk1hbmRhdG9yeSwgUmVwZXRpdGlvbiwgVGVybWluYWwsIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yLCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciB9IGZyb20gXCJjaGV2cm90YWluXCI7XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBVE5LZXkocnVsZSwgdHlwZSwgb2NjdXJyZW5jZSkge1xuICAgIHJldHVybiBgJHtydWxlLm5hbWV9XyR7dHlwZX1fJHtvY2N1cnJlbmNlfWA7XG59XG5leHBvcnQgY29uc3QgQVROX0lOVkFMSURfVFlQRSA9IDA7XG5leHBvcnQgY29uc3QgQVROX0JBU0lDID0gMTtcbmV4cG9ydCBjb25zdCBBVE5fUlVMRV9TVEFSVCA9IDI7XG5leHBvcnQgY29uc3QgQVROX1BMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuZXhwb3J0IGNvbnN0IEFUTl9TVEFSX0JMT0NLX1NUQVJUID0gNTtcbi8vIEN1cnJlbnRseSB1bnVzZWQgYXMgdGhlIEFUTiBpcyBub3QgdXNlZCBmb3IgbGV4aW5nXG5leHBvcnQgY29uc3QgQVROX1RPS0VOX1NUQVJUID0gNjtcbmV4cG9ydCBjb25zdCBBVE5fUlVMRV9TVE9QID0gNztcbmV4cG9ydCBjb25zdCBBVE5fQkxPQ0tfRU5EID0gODtcbmV4cG9ydCBjb25zdCBBVE5fU1RBUl9MT09QX0JBQ0sgPSA5O1xuZXhwb3J0IGNvbnN0IEFUTl9TVEFSX0xPT1BfRU5UUlkgPSAxMDtcbmV4cG9ydCBjb25zdCBBVE5fUExVU19MT09QX0JBQ0sgPSAxMTtcbmV4cG9ydCBjb25zdCBBVE5fTE9PUF9FTkQgPSAxMjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRyYW5zaXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB9XG4gICAgaXNFcHNpbG9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEF0b21UcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3RUcmFuc2l0aW9uIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIHRva2VuVHlwZSkge1xuICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICB0aGlzLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRXBzaWxvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdFRyYW5zaXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCkge1xuICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgIH1cbiAgICBpc0Vwc2lsb24oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSdWxlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0VHJhbnNpdGlvbiB7XG4gICAgY29uc3RydWN0b3IocnVsZVN0YXJ0LCBydWxlLCBmb2xsb3dTdGF0ZSkge1xuICAgICAgICBzdXBlcihydWxlU3RhcnQpO1xuICAgICAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICAgICAgICB0aGlzLmZvbGxvd1N0YXRlID0gZm9sbG93U3RhdGU7XG4gICAgfVxuICAgIGlzRXBzaWxvbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFUTihydWxlcykge1xuICAgIGNvbnN0IGF0biA9IHtcbiAgICAgICAgZGVjaXNpb25NYXA6IHt9LFxuICAgICAgICBkZWNpc2lvblN0YXRlczogW10sXG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGU6IG5ldyBNYXAoKSxcbiAgICAgICAgcnVsZVRvU3RvcFN0YXRlOiBuZXcgTWFwKCksXG4gICAgICAgIHN0YXRlczogW11cbiAgICB9O1xuICAgIGNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMoYXRuLCBydWxlcyk7XG4gICAgY29uc3QgcnVsZUxlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVMZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBydWxlID0gcnVsZXNbaV07XG4gICAgICAgIGNvbnN0IHJ1bGVCbG9jayA9IGJsb2NrKGF0biwgcnVsZSwgcnVsZSk7XG4gICAgICAgIGlmIChydWxlQmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRSdWxlSGFuZGxlKGF0biwgcnVsZSwgcnVsZUJsb2NrKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0bjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMoYXRuLCBydWxlcykge1xuICAgIGNvbnN0IHJ1bGVMZW5ndGggPSBydWxlcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydWxlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVzW2ldO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB0eXBlOiBBVE5fUlVMRV9TVEFSVFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB0eXBlOiBBVE5fUlVMRV9TVE9QXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFydC5zdG9wID0gc3RvcDtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGUuc2V0KHJ1bGUsIHN0YXJ0KTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZS5zZXQocnVsZSwgc3RvcCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXRvbShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pIHtcbiAgICBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIFRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiB0b2tlblJlZihhdG4sIHJ1bGUsIHByb2R1Y3Rpb24udGVybWluYWxUeXBlLCBwcm9kdWN0aW9uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIE5vblRlcm1pbmFsKSB7XG4gICAgICAgIHJldHVybiBydWxlUmVmKGF0biwgcnVsZSwgcHJvZHVjdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBBbHRlcm5hdGlvbikge1xuICAgICAgICByZXR1cm4gYWx0ZXJuYXRpb24oYXRuLCBydWxlLCBwcm9kdWN0aW9uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uKGF0biwgcnVsZSwgcHJvZHVjdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBSZXBldGl0aW9uKSB7XG4gICAgICAgIHJldHVybiByZXBldGl0aW9uKGF0biwgcnVsZSwgcHJvZHVjdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2R1Y3Rpb24gaW5zdGFuY2VvZiBSZXBldGl0aW9uV2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gcmVwZXRpdGlvblNlcChhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICByZXR1cm4gcmVwZXRpdGlvbk1hbmRhdG9yeShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHJlcGV0aXRpb25NYW5kYXRvcnlTZXAoYXRuLCBydWxlLCBwcm9kdWN0aW9uKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBibG9jayhhdG4sIHJ1bGUsIHByb2R1Y3Rpb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcGV0aXRpb24oYXRuLCBydWxlLCByZXBldGl0aW9uKSB7XG4gICAgY29uc3Qgc3RhclN0YXRlID0gbmV3U3RhdGUoYXRuLCBydWxlLCByZXBldGl0aW9uLCB7XG4gICAgICAgIHR5cGU6IEFUTl9TVEFSX0JMT0NLX1NUQVJUXG4gICAgfSk7XG4gICAgZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXJTdGF0ZSk7XG4gICAgY29uc3QgaGFuZGxlID0gbWFrZUFsdHMoYXRuLCBydWxlLCBzdGFyU3RhdGUsIHJlcGV0aXRpb24sIGJsb2NrKGF0biwgcnVsZSwgcmVwZXRpdGlvbikpO1xuICAgIHJldHVybiBzdGFyKGF0biwgcnVsZSwgcmVwZXRpdGlvbiwgaGFuZGxlKTtcbn1cbmZ1bmN0aW9uIHJlcGV0aXRpb25TZXAoYXRuLCBydWxlLCByZXBldGl0aW9uKSB7XG4gICAgY29uc3Qgc3RhclN0YXRlID0gbmV3U3RhdGUoYXRuLCBydWxlLCByZXBldGl0aW9uLCB7XG4gICAgICAgIHR5cGU6IEFUTl9TVEFSX0JMT0NLX1NUQVJUXG4gICAgfSk7XG4gICAgZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXJTdGF0ZSk7XG4gICAgY29uc3QgaGFuZGxlID0gbWFrZUFsdHMoYXRuLCBydWxlLCBzdGFyU3RhdGUsIHJlcGV0aXRpb24sIGJsb2NrKGF0biwgcnVsZSwgcmVwZXRpdGlvbikpO1xuICAgIGNvbnN0IHNlcCA9IHRva2VuUmVmKGF0biwgcnVsZSwgcmVwZXRpdGlvbi5zZXBhcmF0b3IsIHJlcGV0aXRpb24pO1xuICAgIHJldHVybiBzdGFyKGF0biwgcnVsZSwgcmVwZXRpdGlvbiwgaGFuZGxlLCBzZXApO1xufVxuZnVuY3Rpb24gcmVwZXRpdGlvbk1hbmRhdG9yeShhdG4sIHJ1bGUsIHJlcGV0aXRpb24pIHtcbiAgICBjb25zdCBwbHVzU3RhdGUgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHJlcGV0aXRpb24sIHtcbiAgICAgICAgdHlwZTogQVROX1BMVVNfQkxPQ0tfU1RBUlRcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgcGx1c1N0YXRlKTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHBsdXNTdGF0ZSwgcmVwZXRpdGlvbiwgYmxvY2soYXRuLCBydWxlLCByZXBldGl0aW9uKSk7XG4gICAgcmV0dXJuIHBsdXMoYXRuLCBydWxlLCByZXBldGl0aW9uLCBoYW5kbGUpO1xufVxuZnVuY3Rpb24gcmVwZXRpdGlvbk1hbmRhdG9yeVNlcChhdG4sIHJ1bGUsIHJlcGV0aXRpb24pIHtcbiAgICBjb25zdCBwbHVzU3RhdGUgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHJlcGV0aXRpb24sIHtcbiAgICAgICAgdHlwZTogQVROX1BMVVNfQkxPQ0tfU1RBUlRcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgcGx1c1N0YXRlKTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHBsdXNTdGF0ZSwgcmVwZXRpdGlvbiwgYmxvY2soYXRuLCBydWxlLCByZXBldGl0aW9uKSk7XG4gICAgY29uc3Qgc2VwID0gdG9rZW5SZWYoYXRuLCBydWxlLCByZXBldGl0aW9uLnNlcGFyYXRvciwgcmVwZXRpdGlvbik7XG4gICAgcmV0dXJuIHBsdXMoYXRuLCBydWxlLCByZXBldGl0aW9uLCBoYW5kbGUsIHNlcCk7XG59XG5mdW5jdGlvbiBhbHRlcm5hdGlvbihhdG4sIHJ1bGUsIGFsdGVybmF0aW9uKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIGFsdGVybmF0aW9uLCB7XG4gICAgICAgIHR5cGU6IEFUTl9CQVNJQ1xuICAgIH0pO1xuICAgIGRlZmluZURlY2lzaW9uU3RhdGUoYXRuLCBzdGFydCk7XG4gICAgY29uc3QgYWx0cyA9IG1hcChhbHRlcm5hdGlvbi5kZWZpbml0aW9uLCAoZSkgPT4gYXRvbShhdG4sIHJ1bGUsIGUpKTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHN0YXJ0LCBhbHRlcm5hdGlvbiwgLi4uYWx0cyk7XG4gICAgcmV0dXJuIGhhbmRsZTtcbn1cbmZ1bmN0aW9uIG9wdGlvbihhdG4sIHJ1bGUsIG9wdGlvbikge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3U3RhdGUoYXRuLCBydWxlLCBvcHRpb24sIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXJ0KTtcbiAgICBjb25zdCBoYW5kbGUgPSBtYWtlQWx0cyhhdG4sIHJ1bGUsIHN0YXJ0LCBvcHRpb24sIGJsb2NrKGF0biwgcnVsZSwgb3B0aW9uKSk7XG4gICAgcmV0dXJuIG9wdGlvbmFsKGF0biwgcnVsZSwgb3B0aW9uLCBoYW5kbGUpO1xufVxuZnVuY3Rpb24gYmxvY2soYXRuLCBydWxlLCBibG9jaykge1xuICAgIGNvbnN0IGhhbmRsZXMgPSBmaWx0ZXIobWFwKGJsb2NrLmRlZmluaXRpb24sIChlKSA9PiBhdG9tKGF0biwgcnVsZSwgZSkpLCAoZSkgPT4gZSAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoaGFuZGxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXNbMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhbmRsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbWFrZUJsb2NrKGF0biwgaGFuZGxlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGx1cyhhdG4sIHJ1bGUsIHBsdXMsIGhhbmRsZSwgc2VwKSB7XG4gICAgY29uc3QgYmxrU3RhcnQgPSBoYW5kbGUubGVmdDtcbiAgICBjb25zdCBibGtFbmQgPSBoYW5kbGUucmlnaHQ7XG4gICAgY29uc3QgbG9vcCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgcGx1cywge1xuICAgICAgICB0eXBlOiBBVE5fUExVU19MT09QX0JBQ0tcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgbG9vcCk7XG4gICAgY29uc3QgZW5kID0gbmV3U3RhdGUoYXRuLCBydWxlLCBwbHVzLCB7XG4gICAgICAgIHR5cGU6IEFUTl9MT09QX0VORFxuICAgIH0pO1xuICAgIGJsa1N0YXJ0Lmxvb3BiYWNrID0gbG9vcDtcbiAgICBlbmQubG9vcGJhY2sgPSBsb29wO1xuICAgIGF0bi5kZWNpc2lvbk1hcFtidWlsZEFUTktleShydWxlLCBzZXAgPyAnUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3InIDogJ1JlcGV0aXRpb25NYW5kYXRvcnknLCBwbHVzLmlkeCldID0gbG9vcDtcbiAgICBlcHNpbG9uKGJsa0VuZCwgbG9vcCk7IC8vIGJsb2NrIGNhbiBzZWUgbG9vcCBiYWNrXG4gICAgLy8gRGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgaGF2ZSBhIHNlcGFyYXRvciB3ZSBwdXQgdGhlIGV4aXQgdHJhbnNpdGlvbiBhdCBpbmRleCAxIG9yIDBcbiAgICAvLyBUaGlzIGluZmx1ZW5jZXMgdGhlIGNob3NlbiBvcHRpb24gaW4gdGhlIGxvb2thaGVhZCBERkFcbiAgICBpZiAoc2VwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXBzaWxvbihsb29wLCBibGtTdGFydCk7IC8vIGxvb3AgYmFjayB0byBzdGFydFxuICAgICAgICBlcHNpbG9uKGxvb3AsIGVuZCk7IC8vIGV4aXRcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVwc2lsb24obG9vcCwgZW5kKTsgLy8gZXhpdFxuICAgICAgICAvLyBsb29wIGJhY2sgdG8gc3RhcnQgd2l0aCBzZXBhcmF0b3JcbiAgICAgICAgZXBzaWxvbihsb29wLCBzZXAubGVmdCk7XG4gICAgICAgIGVwc2lsb24oc2VwLnJpZ2h0LCBibGtTdGFydCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGJsa1N0YXJ0LFxuICAgICAgICByaWdodDogZW5kXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0YXIoYXRuLCBydWxlLCBzdGFyLCBoYW5kbGUsIHNlcCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gaGFuZGxlLmxlZnQ7XG4gICAgY29uc3QgZW5kID0gaGFuZGxlLnJpZ2h0O1xuICAgIGNvbnN0IGVudHJ5ID0gbmV3U3RhdGUoYXRuLCBydWxlLCBzdGFyLCB7XG4gICAgICAgIHR5cGU6IEFUTl9TVEFSX0xPT1BfRU5UUllcbiAgICB9KTtcbiAgICBkZWZpbmVEZWNpc2lvblN0YXRlKGF0biwgZW50cnkpO1xuICAgIGNvbnN0IGxvb3BFbmQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHN0YXIsIHtcbiAgICAgICAgdHlwZTogQVROX0xPT1BfRU5EXG4gICAgfSk7XG4gICAgY29uc3QgbG9vcCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgc3Rhciwge1xuICAgICAgICB0eXBlOiBBVE5fU1RBUl9MT09QX0JBQ0tcbiAgICB9KTtcbiAgICBlbnRyeS5sb29wYmFjayA9IGxvb3A7XG4gICAgbG9vcEVuZC5sb29wYmFjayA9IGxvb3A7XG4gICAgZXBzaWxvbihlbnRyeSwgc3RhcnQpOyAvLyBsb29wIGVudGVyIGVkZ2UgKGFsdCAyKVxuICAgIGVwc2lsb24oZW50cnksIGxvb3BFbmQpOyAvLyBieXBhc3MgbG9vcCBlZGdlIChhbHQgMSlcbiAgICBlcHNpbG9uKGVuZCwgbG9vcCk7IC8vIGJsb2NrIGVuZCBoaXRzIGxvb3AgYmFja1xuICAgIGlmIChzZXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcHNpbG9uKGxvb3AsIGxvb3BFbmQpOyAvLyBlbmQgbG9vcFxuICAgICAgICAvLyBsb29wIGJhY2sgdG8gc3RhcnQgb2YgaGFuZGxlIHVzaW5nIHNlcGFyYXRvclxuICAgICAgICBlcHNpbG9uKGxvb3AsIHNlcC5sZWZ0KTtcbiAgICAgICAgZXBzaWxvbihzZXAucmlnaHQsIHN0YXJ0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVwc2lsb24obG9vcCwgZW50cnkpOyAvLyBsb29wIGJhY2sgdG8gZW50cnkvZXhpdCBkZWNpc2lvblxuICAgIH1cbiAgICBhdG4uZGVjaXNpb25NYXBbYnVpbGRBVE5LZXkocnVsZSwgc2VwID8gJ1JlcGV0aXRpb25XaXRoU2VwYXJhdG9yJyA6ICdSZXBldGl0aW9uJywgc3Rhci5pZHgpXSA9IGVudHJ5O1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGVudHJ5LFxuICAgICAgICByaWdodDogbG9vcEVuZFxuICAgIH07XG59XG5mdW5jdGlvbiBvcHRpb25hbChhdG4sIHJ1bGUsIG9wdGlvbmFsLCBoYW5kbGUpIHtcbiAgICBjb25zdCBzdGFydCA9IGhhbmRsZS5sZWZ0O1xuICAgIGNvbnN0IGVuZCA9IGhhbmRsZS5yaWdodDtcbiAgICBlcHNpbG9uKHN0YXJ0LCBlbmQpO1xuICAgIGF0bi5kZWNpc2lvbk1hcFtidWlsZEFUTktleShydWxlLCAnT3B0aW9uJywgb3B0aW9uYWwuaWR4KV0gPSBzdGFydDtcbiAgICByZXR1cm4gaGFuZGxlO1xufVxuZnVuY3Rpb24gZGVmaW5lRGVjaXNpb25TdGF0ZShhdG4sIHN0YXRlKSB7XG4gICAgYXRuLmRlY2lzaW9uU3RhdGVzLnB1c2goc3RhdGUpO1xuICAgIHN0YXRlLmRlY2lzaW9uID0gYXRuLmRlY2lzaW9uU3RhdGVzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIHN0YXRlLmRlY2lzaW9uO1xufVxuZnVuY3Rpb24gbWFrZUFsdHMoYXRuLCBydWxlLCBzdGFydCwgcHJvZHVjdGlvbiwgLi4uYWx0cykge1xuICAgIGNvbnN0IGVuZCA9IG5ld1N0YXRlKGF0biwgcnVsZSwgcHJvZHVjdGlvbiwge1xuICAgICAgICB0eXBlOiBBVE5fQkxPQ0tfRU5ELFxuICAgICAgICBzdGFydFxuICAgIH0pO1xuICAgIHN0YXJ0LmVuZCA9IGVuZDtcbiAgICBmb3IgKGNvbnN0IGFsdCBvZiBhbHRzKSB7XG4gICAgICAgIGlmIChhbHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gaG9vayBhbHRzIHVwIHRvIGRlY2lzaW9uIGJsb2NrXG4gICAgICAgICAgICBlcHNpbG9uKHN0YXJ0LCBhbHQubGVmdCk7XG4gICAgICAgICAgICBlcHNpbG9uKGFsdC5yaWdodCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVwc2lsb24oc3RhcnQsIGVuZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaGFuZGxlID0ge1xuICAgICAgICBsZWZ0OiBzdGFydCxcbiAgICAgICAgcmlnaHQ6IGVuZFxuICAgIH07XG4gICAgYXRuLmRlY2lzaW9uTWFwW2J1aWxkQVROS2V5KHJ1bGUsIGdldFByb2RUeXBlKHByb2R1Y3Rpb24pLCBwcm9kdWN0aW9uLmlkeCldID0gc3RhcnQ7XG4gICAgcmV0dXJuIGhhbmRsZTtcbn1cbmZ1bmN0aW9uIGdldFByb2RUeXBlKHByb2R1Y3Rpb24pIHtcbiAgICBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIEFsdGVybmF0aW9uKSB7XG4gICAgICAgIHJldHVybiAnQWx0ZXJuYXRpb24nO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAnT3B0aW9uJztcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIFJlcGV0aXRpb24pIHtcbiAgICAgICAgcmV0dXJuICdSZXBldGl0aW9uJztcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZHVjdGlvbiBpbnN0YW5jZW9mIFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnUmVwZXRpdGlvbldpdGhTZXBhcmF0b3InO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeSkge1xuICAgICAgICByZXR1cm4gJ1JlcGV0aXRpb25NYW5kYXRvcnknO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kdWN0aW9uIGluc3RhbmNlb2YgUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcic7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZUJsb2NrKGF0biwgYWx0cykge1xuICAgIGNvbnN0IGFsdHNMZW5ndGggPSBhbHRzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsdHNMZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgaGFuZGxlID0gYWx0c1tpXTtcbiAgICAgICAgbGV0IHRyYW5zaXRpb247XG4gICAgICAgIGlmIChoYW5kbGUubGVmdC50cmFuc2l0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb24gPSBoYW5kbGUubGVmdC50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1J1bGVUcmFuc2l0aW9uID0gdHJhbnNpdGlvbiBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uO1xuICAgICAgICBjb25zdCBydWxlVHJhbnNpdGlvbiA9IHRyYW5zaXRpb247XG4gICAgICAgIGNvbnN0IG5leHQgPSBhbHRzW2kgKyAxXS5sZWZ0O1xuICAgICAgICBpZiAoaGFuZGxlLmxlZnQudHlwZSA9PT0gQVROX0JBU0lDICYmXG4gICAgICAgICAgICBoYW5kbGUucmlnaHQudHlwZSA9PT0gQVROX0JBU0lDICYmXG4gICAgICAgICAgICB0cmFuc2l0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgoaXNSdWxlVHJhbnNpdGlvbiAmJiBydWxlVHJhbnNpdGlvbi5mb2xsb3dTdGF0ZSA9PT0gaGFuZGxlLnJpZ2h0KSB8fFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID09PSBoYW5kbGUucmlnaHQpKSB7XG4gICAgICAgICAgICAvLyB3ZSBjYW4gYXZvaWQgZXBzaWxvbiBlZGdlIHRvIG5leHQgZWxlbWVudFxuICAgICAgICAgICAgaWYgKGlzUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBydWxlVHJhbnNpdGlvbi5mb2xsb3dTdGF0ZSA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnRhcmdldCA9IG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVTdGF0ZShhdG4sIGhhbmRsZS5yaWdodCk7IC8vIHdlIHNraXBwZWQgb3ZlciB0aGlzIHN0YXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBuZWVkIGVwc2lsb24gaWYgcHJldmlvdXMgYmxvY2sncyByaWdodCBlbmQgbm9kZSBpcyBjb21wbGV4XG4gICAgICAgICAgICBlcHNpbG9uKGhhbmRsZS5yaWdodCwgbmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBhbHRzWzBdO1xuICAgIGNvbnN0IGxhc3QgPSBhbHRzW2FsdHNMZW5ndGggLSAxXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBmaXJzdC5sZWZ0LFxuICAgICAgICByaWdodDogbGFzdC5yaWdodFxuICAgIH07XG59XG5mdW5jdGlvbiB0b2tlblJlZihhdG4sIHJ1bGUsIHRva2VuVHlwZSwgcHJvZHVjdGlvbikge1xuICAgIGNvbnN0IGxlZnQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24sIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgY29uc3QgcmlnaHQgPSBuZXdTdGF0ZShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24sIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgYWRkVHJhbnNpdGlvbihsZWZ0LCBuZXcgQXRvbVRyYW5zaXRpb24ocmlnaHQsIHRva2VuVHlwZSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJ1bGVSZWYoYXRuLCBjdXJyZW50UnVsZSwgbm9uVGVybWluYWwpIHtcbiAgICBjb25zdCBydWxlID0gbm9uVGVybWluYWwucmVmZXJlbmNlZFJ1bGU7XG4gICAgY29uc3Qgc3RhcnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5nZXQocnVsZSk7XG4gICAgY29uc3QgbGVmdCA9IG5ld1N0YXRlKGF0biwgY3VycmVudFJ1bGUsIG5vblRlcm1pbmFsLCB7XG4gICAgICAgIHR5cGU6IEFUTl9CQVNJQ1xuICAgIH0pO1xuICAgIGNvbnN0IHJpZ2h0ID0gbmV3U3RhdGUoYXRuLCBjdXJyZW50UnVsZSwgbm9uVGVybWluYWwsIHtcbiAgICAgICAgdHlwZTogQVROX0JBU0lDXG4gICAgfSk7XG4gICAgY29uc3QgY2FsbCA9IG5ldyBSdWxlVHJhbnNpdGlvbihzdGFydCwgcnVsZSwgcmlnaHQpO1xuICAgIGFkZFRyYW5zaXRpb24obGVmdCwgY2FsbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHRcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRSdWxlSGFuZGxlKGF0biwgcnVsZSwgYmxvY2spIHtcbiAgICBjb25zdCBzdGFydCA9IGF0bi5ydWxlVG9TdGFydFN0YXRlLmdldChydWxlKTtcbiAgICBlcHNpbG9uKHN0YXJ0LCBibG9jay5sZWZ0KTtcbiAgICBjb25zdCBzdG9wID0gYXRuLnJ1bGVUb1N0b3BTdGF0ZS5nZXQocnVsZSk7XG4gICAgZXBzaWxvbihibG9jay5yaWdodCwgc3RvcCk7XG4gICAgY29uc3QgaGFuZGxlID0ge1xuICAgICAgICBsZWZ0OiBzdGFydCxcbiAgICAgICAgcmlnaHQ6IHN0b3BcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGU7XG59XG5mdW5jdGlvbiBlcHNpbG9uKGEsIGIpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uID0gbmV3IEVwc2lsb25UcmFuc2l0aW9uKGIpO1xuICAgIGFkZFRyYW5zaXRpb24oYSwgdHJhbnNpdGlvbik7XG59XG5mdW5jdGlvbiBuZXdTdGF0ZShhdG4sIHJ1bGUsIHByb2R1Y3Rpb24sIHBhcnRpYWwpIHtcbiAgICBjb25zdCB0ID0gT2JqZWN0LmFzc2lnbih7IGF0bixcbiAgICAgICAgcHJvZHVjdGlvbiwgZXBzaWxvbk9ubHlUcmFuc2l0aW9uczogZmFsc2UsIHJ1bGUsIHRyYW5zaXRpb25zOiBbXSwgbmV4dFRva2VuV2l0aGluUnVsZTogW10sIHN0YXRlTnVtYmVyOiBhdG4uc3RhdGVzLmxlbmd0aCB9LCBwYXJ0aWFsKTtcbiAgICBhdG4uc3RhdGVzLnB1c2godCk7XG4gICAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBhZGRUcmFuc2l0aW9uKHN0YXRlLCB0cmFuc2l0aW9uKSB7XG4gICAgLy8gQSBzaW5nbGUgQVROIHN0YXRlIGNhbiBvbmx5IGNvbnRhaW4gZXBzaWxvbiB0cmFuc2l0aW9ucyBvciBub24tZXBzaWxvbiB0cmFuc2l0aW9uc1xuICAgIC8vIEJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgbWl4ZWQsIG9ubHkgc2V0dGluZyB0aGUgcHJvcGVydHkgZm9yIHRoZSBmaXJzdCB0cmFuc2l0aW9uIGlzIGZpbmVcbiAgICBpZiAoc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9uLmlzRXBzaWxvbigpO1xuICAgIH1cbiAgICBzdGF0ZS50cmFuc2l0aW9ucy5wdXNoKHRyYW5zaXRpb24pO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3RhdGUoYXRuLCBzdGF0ZSkge1xuICAgIGF0bi5zdGF0ZXMuc3BsaWNlKGF0bi5zdGF0ZXMuaW5kZXhPZihzdGF0ZSksIDEpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXRuLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IG1hcCBmcm9tIFwibG9kYXNoLWVzL21hcC5qc1wiO1xuZXhwb3J0IGNvbnN0IERGQV9FUlJPUiA9IHt9O1xuZXhwb3J0IGNsYXNzIEFUTkNvbmZpZ1NldCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWFwID0ge307XG4gICAgICAgIHRoaXMuY29uZmlncyA9IFtdO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlncy5sZW5ndGg7XG4gICAgfVxuICAgIGZpbmFsaXplKCkge1xuICAgICAgICAvLyBFbXB0aWVzIHRoZSBtYXAgdG8gZnJlZSB1cCBtZW1vcnlcbiAgICAgICAgdGhpcy5tYXAgPSB7fTtcbiAgICB9XG4gICAgYWRkKGNvbmZpZykge1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRBVE5Db25maWdLZXkoY29uZmlnKTtcbiAgICAgICAgLy8gT25seSBhZGQgY29uZmlncyB3aGljaCBkb24ndCBleGlzdCBpbiBvdXIgbWFwIGFscmVhZHlcbiAgICAgICAgLy8gV2hpbGUgdGhpcyBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGFjdHVhbCBhbGdvcml0aG0sIGFkZGluZyB0aGVtIGFueXdheSB3b3VsZCBtYXNzaXZlbHkgaW5jcmVhc2UgbWVtb3J5IGNvbnN1bXB0aW9uXG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzLm1hcCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFwW2tleV0gPSB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5jb25maWdzLnB1c2goY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3M7XG4gICAgfVxuICAgIGdldCBhbHRzKCkge1xuICAgICAgICByZXR1cm4gbWFwKHRoaXMuY29uZmlncywgKGUpID0+IGUuYWx0KTtcbiAgICB9XG4gICAgZ2V0IGtleSgpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIHRoaXMubWFwKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBrICsgXCI6XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBVE5Db25maWdLZXkoY29uZmlnLCBhbHQgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGAke2FsdCA/IGBhJHtjb25maWcuYWx0fWAgOiBcIlwifXMke2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcn06JHtjb25maWcuc3RhY2subWFwKChlKSA9PiBlLnN0YXRlTnVtYmVyLnRvU3RyaW5nKCkpLmpvaW4oXCJfXCIpfWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZmEuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyB0b2tlbk1hdGNoZXIsIHRva2VuTGFiZWwsIE5vblRlcm1pbmFsLCBBbHRlcm5hdGlvbiwgT3B0aW9uLCBSZXBldGl0aW9uTWFuZGF0b3J5LCBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciwgUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IsIFJlcGV0aXRpb24sIFRlcm1pbmFsLCBMTGtMb29rYWhlYWRTdHJhdGVneSwgZ2V0TG9va2FoZWFkUGF0aHMgfSBmcm9tIFwiY2hldnJvdGFpblwiO1xuaW1wb3J0IHsgQVROX1JVTEVfU1RPUCwgQXRvbVRyYW5zaXRpb24sIGJ1aWxkQVROS2V5LCBjcmVhdGVBVE4sIEVwc2lsb25UcmFuc2l0aW9uLCBSdWxlVHJhbnNpdGlvbiB9IGZyb20gXCIuL2F0bi5qc1wiO1xuaW1wb3J0IHsgQVROQ29uZmlnU2V0LCBERkFfRVJST1IsIGdldEFUTkNvbmZpZ0tleSB9IGZyb20gXCIuL2RmYS5qc1wiO1xuaW1wb3J0IG1pbiBmcm9tIFwibG9kYXNoLWVzL21pbi5qc1wiO1xuaW1wb3J0IGZsYXRNYXAgZnJvbSBcImxvZGFzaC1lcy9mbGF0TWFwLmpzXCI7XG5pbXBvcnQgdW5pcUJ5IGZyb20gXCJsb2Rhc2gtZXMvdW5pcUJ5LmpzXCI7XG5pbXBvcnQgbWFwIGZyb20gXCJsb2Rhc2gtZXMvbWFwLmpzXCI7XG5pbXBvcnQgZmxhdHRlbiBmcm9tIFwibG9kYXNoLWVzL2ZsYXR0ZW4uanNcIjtcbmltcG9ydCBmb3JFYWNoIGZyb20gXCJsb2Rhc2gtZXMvZm9yRWFjaC5qc1wiO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5pbXBvcnQgcmVkdWNlIGZyb20gXCJsb2Rhc2gtZXMvcmVkdWNlLmpzXCI7XG5mdW5jdGlvbiBjcmVhdGVERkFDYWNoZShzdGFydFN0YXRlLCBkZWNpc2lvbikge1xuICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgIHJldHVybiAocHJlZGljYXRlU2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IHByZWRpY2F0ZVNldC50b1N0cmluZygpO1xuICAgICAgICBsZXQgZXhpc3RpbmcgPSBtYXBba2V5XTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4aXN0aW5nID0ge1xuICAgICAgICAgICAgICAgIGF0blN0YXJ0U3RhdGU6IHN0YXJ0U3RhdGUsXG4gICAgICAgICAgICAgICAgZGVjaXNpb24sXG4gICAgICAgICAgICAgICAgc3RhdGVzOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1hcFtrZXldID0gZXhpc3Rpbmc7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH1cbiAgICB9O1xufVxuY2xhc3MgUHJlZGljYXRlU2V0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVzID0gW107XG4gICAgfVxuICAgIGlzKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpbmRleCA+PSB0aGlzLnByZWRpY2F0ZXMubGVuZ3RoIHx8IHRoaXMucHJlZGljYXRlc1tpbmRleF07XG4gICAgfVxuICAgIHNldChpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVzW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJlZGljYXRlcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSB0aGlzLnByZWRpY2F0ZXNbaV0gPT09IHRydWUgPyBcIjFcIiA6IFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5jb25zdCBFTVBUWV9QUkVESUNBVEVTID0gbmV3IFByZWRpY2F0ZVNldCgpO1xuZXhwb3J0IGNsYXNzIExMU3Rhckxvb2thaGVhZFN0cmF0ZWd5IGV4dGVuZHMgTExrTG9va2FoZWFkU3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvZ2dpbmcgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9nZ2luZykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKChtZXNzYWdlKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGluaXRpYWxpemUob3B0aW9ucykge1xuICAgICAgICB0aGlzLmF0biA9IGNyZWF0ZUFUTihvcHRpb25zLnJ1bGVzKTtcbiAgICAgICAgdGhpcy5kZmFzID0gaW5pdEFUTlNpbXVsYXRvcih0aGlzLmF0bik7XG4gICAgfVxuICAgIHZhbGlkYXRlQW1iaWd1b3VzQWx0ZXJuYXRpb25BbHRlcm5hdGl2ZXMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdmFsaWRhdGVFbXB0eU9yQWx0ZXJuYXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24ob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHByb2RPY2N1cnJlbmNlLCBydWxlLCBoYXNQcmVkaWNhdGVzLCBkeW5hbWljVG9rZW5zRW5hYmxlZCB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGZhcyA9IHRoaXMuZGZhcztcbiAgICAgICAgY29uc3QgbG9nZ2luZyA9IHRoaXMubG9nZ2luZztcbiAgICAgICAgY29uc3Qga2V5ID0gYnVpbGRBVE5LZXkocnVsZSwgJ0FsdGVybmF0aW9uJywgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICBjb25zdCBkZWNpc2lvblN0YXRlID0gdGhpcy5hdG4uZGVjaXNpb25NYXBba2V5XTtcbiAgICAgICAgY29uc3QgZGVjaXNpb25JbmRleCA9IGRlY2lzaW9uU3RhdGUuZGVjaXNpb247XG4gICAgICAgIGNvbnN0IHBhcnRpYWxBbHRzID0gbWFwKGdldExvb2thaGVhZFBhdGhzKHtcbiAgICAgICAgICAgIG1heExvb2thaGVhZDogMSxcbiAgICAgICAgICAgIG9jY3VycmVuY2U6IHByb2RPY2N1cnJlbmNlLFxuICAgICAgICAgICAgcHJvZFR5cGU6IFwiQWx0ZXJuYXRpb25cIixcbiAgICAgICAgICAgIHJ1bGU6IHJ1bGVcbiAgICAgICAgfSksIChjdXJyQWx0KSA9PiBtYXAoY3VyckFsdCwgKHBhdGgpID0+IHBhdGhbMF0pKTtcbiAgICAgICAgaWYgKGlzTEwxU2VxdWVuY2UocGFydGlhbEFsdHMsIGZhbHNlKSAmJiAhZHluYW1pY1Rva2Vuc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNob2ljZVRvQWx0ID0gcmVkdWNlKHBhcnRpYWxBbHRzLCAocmVzdWx0LCBjdXJyQWx0LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKGN1cnJBbHQsIChjdXJyVG9rVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclRva1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyVG9rVHlwZS50b2tlblR5cGVJZHhdID0gaWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjdXJyVG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMsIChjdXJyRXh0ZW5kaW5nVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyRXh0ZW5kaW5nVHlwZV0gPSBpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICBpZiAoaGFzUHJlZGljYXRlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JBbHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZGljdGlvbiA9IGNob2ljZVRvQWx0W25leHRUb2tlbi50b2tlblR5cGVJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JBbHRzICE9PSB1bmRlZmluZWQgJiYgcHJlZGljdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnYXRlID0gKF9hID0gb3JBbHRzW3ByZWRpY3Rpb25dKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuR0FURTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnYXRlICE9PSB1bmRlZmluZWQgJiYgZ2F0ZS5jYWxsKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Rpb247XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuTEEoMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaG9pY2VUb0FsdFtuZXh0VG9rZW4udG9rZW5UeXBlSWR4XTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1ByZWRpY2F0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAob3JBbHRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlcyA9IG5ldyBQcmVkaWNhdGVTZXQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBvckFsdHMgPT09IHVuZGVmaW5lZCA/IDAgOiBvckFsdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2F0ZSA9IG9yQWx0cyA9PT0gbnVsbCB8fCBvckFsdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yQWx0c1tpXS5HQVRFO1xuICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGVzLnNldChpLCBnYXRlID09PSB1bmRlZmluZWQgfHwgZ2F0ZS5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRhcHRpdmVQcmVkaWN0LmNhbGwodGhpcywgZGZhcywgZGVjaXNpb25JbmRleCwgcHJlZGljYXRlcywgbG9nZ2luZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRhcHRpdmVQcmVkaWN0LmNhbGwodGhpcywgZGZhcywgZGVjaXNpb25JbmRleCwgRU1QVFlfUFJFRElDQVRFUywgbG9nZ2luZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBidWlsZExvb2thaGVhZEZvck9wdGlvbmFsKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBwcm9kT2NjdXJyZW5jZSwgcnVsZSwgcHJvZFR5cGUsIGR5bmFtaWNUb2tlbnNFbmFibGVkIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkZmFzID0gdGhpcy5kZmFzO1xuICAgICAgICBjb25zdCBsb2dnaW5nID0gdGhpcy5sb2dnaW5nO1xuICAgICAgICBjb25zdCBrZXkgPSBidWlsZEFUTktleShydWxlLCBwcm9kVHlwZSwgcHJvZE9jY3VycmVuY2UpO1xuICAgICAgICBjb25zdCBkZWNpc2lvblN0YXRlID0gdGhpcy5hdG4uZGVjaXNpb25NYXBba2V5XTtcbiAgICAgICAgY29uc3QgZGVjaXNpb25JbmRleCA9IGRlY2lzaW9uU3RhdGUuZGVjaXNpb247XG4gICAgICAgIGNvbnN0IGFsdHMgPSBtYXAoZ2V0TG9va2FoZWFkUGF0aHMoe1xuICAgICAgICAgICAgbWF4TG9va2FoZWFkOiAxLFxuICAgICAgICAgICAgb2NjdXJyZW5jZTogcHJvZE9jY3VycmVuY2UsXG4gICAgICAgICAgICBwcm9kVHlwZSxcbiAgICAgICAgICAgIHJ1bGVcbiAgICAgICAgfSksIChlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWFwKGUsIChnKSA9PiBnWzBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0xMMVNlcXVlbmNlKGFsdHMpICYmIGFsdHNbMF1bMF0gJiYgIWR5bmFtaWNUb2tlbnNFbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBhbHQgPSBhbHRzWzBdO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVG9rZW5zVHlwZXMgPSBmbGF0dGVuKGFsdCk7XG4gICAgICAgICAgICBpZiAoc2luZ2xlVG9rZW5zVHlwZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgaXNFbXB0eShzaW5nbGVUb2tlbnNUeXBlc1swXS5jYXRlZ29yeU1hdGNoZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUb2tlblR5cGUgPSBzaW5nbGVUb2tlbnNUeXBlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZFRva2VuVW5pcXVlS2V5ID0gZXhwZWN0ZWRUb2tlblR5cGUudG9rZW5UeXBlSWR4O1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeCA9PT0gZXhwZWN0ZWRUb2tlblVuaXF1ZUtleTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hvaWNlVG9BbHQgPSByZWR1Y2Uoc2luZ2xlVG9rZW5zVHlwZXMsIChyZXN1bHQsIGN1cnJUb2tUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVG9rVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3VyclRva1R5cGUudG9rZW5UeXBlSWR4XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGN1cnJUb2tUeXBlLmNhdGVnb3J5TWF0Y2hlcywgKGN1cnJFeHRlbmRpbmdUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2N1cnJFeHRlbmRpbmdUeXBlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlVG9BbHRbbmV4dFRva2VuLnRva2VuVHlwZUlkeF0gPT09IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRhcHRpdmVQcmVkaWN0LmNhbGwodGhpcywgZGZhcywgZGVjaXNpb25JbmRleCwgRU1QVFlfUFJFRElDQVRFUywgbG9nZ2luZyk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJlc3VsdCA9PT0gXCJvYmplY3RcIiA/IGZhbHNlIDogcmVzdWx0ID09PSAwO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzTEwxU2VxdWVuY2Uoc2VxdWVuY2VzLCBhbGxvd0VtcHR5ID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZ1bGxTZXQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBhbHQgb2Ygc2VxdWVuY2VzKSB7XG4gICAgICAgIGNvbnN0IGFsdFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tUeXBlIG9mIGFsdCkge1xuICAgICAgICAgICAgaWYgKHRva1R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChhbGxvd0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVwc2lsb24gcHJvZHVjdGlvbiBlbmNvdW50ZXJlZFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gW3Rva1R5cGUudG9rZW5UeXBlSWR4XS5jb25jYXQodG9rVHlwZS5jYXRlZ29yeU1hdGNoZXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bGxTZXQuaGFzKGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsdFNldC5oYXMoaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bGxTZXQuYWRkKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYWx0U2V0LmFkZChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaW5pdEFUTlNpbXVsYXRvcihhdG4pIHtcbiAgICBjb25zdCBkZWNpc2lvbkxlbmd0aCA9IGF0bi5kZWNpc2lvblN0YXRlcy5sZW5ndGg7XG4gICAgY29uc3QgZGVjaXNpb25Ub0RGQSA9IEFycmF5KGRlY2lzaW9uTGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY2lzaW9uTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVjaXNpb25Ub0RGQVtpXSA9IGNyZWF0ZURGQUNhY2hlKGF0bi5kZWNpc2lvblN0YXRlc1tpXSwgaSk7XG4gICAgfVxuICAgIHJldHVybiBkZWNpc2lvblRvREZBO1xufVxuZnVuY3Rpb24gYWRhcHRpdmVQcmVkaWN0KGRmYUNhY2hlcywgZGVjaXNpb24sIHByZWRpY2F0ZVNldCwgbG9nZ2luZykge1xuICAgIGNvbnN0IGRmYSA9IGRmYUNhY2hlc1tkZWNpc2lvbl0ocHJlZGljYXRlU2V0KTtcbiAgICBsZXQgc3RhcnQgPSBkZmEuc3RhcnQ7XG4gICAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY2xvc3VyZSA9IGNvbXB1dGVTdGFydFN0YXRlKGRmYS5hdG5TdGFydFN0YXRlKTtcbiAgICAgICAgc3RhcnQgPSBhZGRERkFTdGF0ZShkZmEsIG5ld0RGQVN0YXRlKGNsb3N1cmUpKTtcbiAgICAgICAgZGZhLnN0YXJ0ID0gc3RhcnQ7XG4gICAgfVxuICAgIGNvbnN0IGFsdCA9IHBlcmZvcm1Mb29rYWhlYWQuYXBwbHkodGhpcywgW2RmYSwgc3RhcnQsIHByZWRpY2F0ZVNldCwgbG9nZ2luZ10pO1xuICAgIHJldHVybiBhbHQ7XG59XG5mdW5jdGlvbiBwZXJmb3JtTG9va2FoZWFkKGRmYSwgczAsIHByZWRpY2F0ZVNldCwgbG9nZ2luZykge1xuICAgIGxldCBwcmV2aW91c0QgPSBzMDtcbiAgICBsZXQgaSA9IDE7XG4gICAgY29uc3QgcGF0aCA9IFtdO1xuICAgIGxldCB0ID0gdGhpcy5MQShpKyspO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBkID0gZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZShwcmV2aW91c0QsIHQpO1xuICAgICAgICBpZiAoZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkID0gY29tcHV0ZUxvb2thaGVhZFRhcmdldC5hcHBseSh0aGlzLCBbZGZhLCBwcmV2aW91c0QsIHQsIGksIHByZWRpY2F0ZVNldCwgbG9nZ2luZ10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkID09PSBERkFfRVJST1IpIHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZEFkYXB0aXZlUHJlZGljdEVycm9yKHBhdGgsIHByZXZpb3VzRCwgdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGQuaXNBY2NlcHRTdGF0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGQucHJlZGljdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0QgPSBkO1xuICAgICAgICBwYXRoLnB1c2godCk7XG4gICAgICAgIHQgPSB0aGlzLkxBKGkrKyk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29tcHV0ZUxvb2thaGVhZFRhcmdldChkZmEsIHByZXZpb3VzRCwgdG9rZW4sIGxvb2thaGVhZCwgcHJlZGljYXRlU2V0LCBsb2dnaW5nKSB7XG4gICAgY29uc3QgcmVhY2ggPSBjb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHRva2VuLCBwcmVkaWNhdGVTZXQpO1xuICAgIGlmIChyZWFjaC5zaXplID09PSAwKSB7XG4gICAgICAgIGFkZERGQUVkZ2UoZGZhLCBwcmV2aW91c0QsIHRva2VuLCBERkFfRVJST1IpO1xuICAgICAgICByZXR1cm4gREZBX0VSUk9SO1xuICAgIH1cbiAgICBsZXQgbmV3U3RhdGUgPSBuZXdERkFTdGF0ZShyZWFjaCk7XG4gICAgY29uc3QgcHJlZGljdGVkQWx0ID0gZ2V0VW5pcXVlQWx0KHJlYWNoLCBwcmVkaWNhdGVTZXQpO1xuICAgIGlmIChwcmVkaWN0ZWRBbHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdTdGF0ZS5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgbmV3U3RhdGUucHJlZGljdGlvbiA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgbmV3U3RhdGUuY29uZmlncy51bmlxdWVBbHQgPSBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc0NvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uKHJlYWNoKSkge1xuICAgICAgICBjb25zdCBwcmVkaWN0aW9uID0gbWluKHJlYWNoLmFsdHMpO1xuICAgICAgICBuZXdTdGF0ZS5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgbmV3U3RhdGUucHJlZGljdGlvbiA9IHByZWRpY3Rpb247XG4gICAgICAgIG5ld1N0YXRlLmNvbmZpZ3MudW5pcXVlQWx0ID0gcHJlZGljdGlvbjtcbiAgICAgICAgcmVwb3J0TG9va2FoZWFkQW1iaWd1aXR5LmFwcGx5KHRoaXMsIFtkZmEsIGxvb2thaGVhZCwgcmVhY2guYWx0cywgbG9nZ2luZ10pO1xuICAgIH1cbiAgICBuZXdTdGF0ZSA9IGFkZERGQUVkZ2UoZGZhLCBwcmV2aW91c0QsIHRva2VuLCBuZXdTdGF0ZSk7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xufVxuZnVuY3Rpb24gcmVwb3J0TG9va2FoZWFkQW1iaWd1aXR5KGRmYSwgbG9va2FoZWFkLCBhbWJpZ3VpdHlJbmRpY2VzLCBsb2dnaW5nKSB7XG4gICAgY29uc3QgcHJlZml4UGF0aCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGxvb2thaGVhZDsgaSsrKSB7XG4gICAgICAgIHByZWZpeFBhdGgucHVzaCh0aGlzLkxBKGkpLnRva2VuVHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IGF0blN0YXRlID0gZGZhLmF0blN0YXJ0U3RhdGU7XG4gICAgY29uc3QgdG9wTGV2ZWxSdWxlID0gYXRuU3RhdGUucnVsZTtcbiAgICBjb25zdCBwcm9kdWN0aW9uID0gYXRuU3RhdGUucHJvZHVjdGlvbjtcbiAgICBjb25zdCBtZXNzYWdlID0gYnVpbGRBbWJpZ3VpdHlFcnJvcih7XG4gICAgICAgIHRvcExldmVsUnVsZSxcbiAgICAgICAgYW1iaWd1aXR5SW5kaWNlcyxcbiAgICAgICAgcHJvZHVjdGlvbixcbiAgICAgICAgcHJlZml4UGF0aFxuICAgIH0pO1xuICAgIGxvZ2dpbmcobWVzc2FnZSk7XG59XG5mdW5jdGlvbiBidWlsZEFtYmlndWl0eUVycm9yKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXRoTXNnID0gbWFwKG9wdGlvbnMucHJlZml4UGF0aCwgKGN1cnJ0b2spID0+IHRva2VuTGFiZWwoY3VycnRvaykpLmpvaW4oXCIsIFwiKTtcbiAgICBjb25zdCBvY2N1cnJlbmNlID0gb3B0aW9ucy5wcm9kdWN0aW9uLmlkeCA9PT0gMCA/IFwiXCIgOiBvcHRpb25zLnByb2R1Y3Rpb24uaWR4O1xuICAgIGxldCBjdXJyTWVzc2FnZSA9IGBBbWJpZ3VvdXMgQWx0ZXJuYXRpdmVzIERldGVjdGVkOiA8JHtvcHRpb25zLmFtYmlndWl0eUluZGljZXMuam9pbihcIiwgXCIpfT4gaW4gPCR7Z2V0UHJvZHVjdGlvbkRzbE5hbWUob3B0aW9ucy5wcm9kdWN0aW9uKX0ke29jY3VycmVuY2V9PmAgK1xuICAgICAgICBgIGluc2lkZSA8JHtvcHRpb25zLnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZSxcXG5gICtcbiAgICAgICAgYDwke3BhdGhNc2d9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuXFxuYDtcbiAgICBjdXJyTWVzc2FnZSA9XG4gICAgICAgIGN1cnJNZXNzYWdlICtcbiAgICAgICAgICAgIGBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0FNQklHVU9VU19BTFRFUk5BVElWRVNcXG5gICtcbiAgICAgICAgICAgIGBGb3IgRnVydGhlciBkZXRhaWxzLmA7XG4gICAgcmV0dXJuIGN1cnJNZXNzYWdlO1xufVxuZnVuY3Rpb24gZ2V0UHJvZHVjdGlvbkRzbE5hbWUocHJvZCkge1xuICAgIGlmIChwcm9kIGluc3RhbmNlb2YgTm9uVGVybWluYWwpIHtcbiAgICAgICAgcmV0dXJuIFwiU1VCUlVMRVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBcIk9QVElPTlwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgQWx0ZXJuYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIFwiT1JcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAocHJvZCBpbnN0YW5jZW9mIFJlcGV0aXRpb25NYW5kYXRvcnkpIHtcbiAgICAgICAgcmV0dXJuIFwiQVRfTEVBU1RfT05FXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gXCJBVF9MRUFTVF9PTkVfU0VQXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBSZXBldGl0aW9uV2l0aFNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4gXCJNQU5ZX1NFUFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9kIGluc3RhbmNlb2YgUmVwZXRpdGlvbikge1xuICAgICAgICByZXR1cm4gXCJNQU5ZXCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2QgaW5zdGFuY2VvZiBUZXJtaW5hbCkge1xuICAgICAgICByZXR1cm4gXCJDT05TVU1FXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIm5vbiBleGhhdXN0aXZlIG1hdGNoXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IocGF0aCwgcHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBjb25zdCBuZXh0VHJhbnNpdGlvbnMgPSBmbGF0TWFwKHByZXZpb3VzLmNvbmZpZ3MuZWxlbWVudHMsIChlKSA9PiBlLnN0YXRlLnRyYW5zaXRpb25zKTtcbiAgICBjb25zdCBuZXh0VG9rZW5UeXBlcyA9IHVuaXFCeShuZXh0VHJhbnNpdGlvbnNcbiAgICAgICAgLmZpbHRlcigoZSkgPT4gZSBpbnN0YW5jZW9mIEF0b21UcmFuc2l0aW9uKVxuICAgICAgICAubWFwKChlKSA9PiBlLnRva2VuVHlwZSksIChlKSA9PiBlLnRva2VuVHlwZUlkeCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0dWFsVG9rZW46IGN1cnJlbnQsXG4gICAgICAgIHBvc3NpYmxlVG9rZW5UeXBlczogbmV4dFRva2VuVHlwZXMsXG4gICAgICAgIHRva2VuUGF0aDogcGF0aFxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRFeGlzdGluZ1RhcmdldFN0YXRlKHN0YXRlLCB0b2tlbikge1xuICAgIHJldHVybiBzdGF0ZS5lZGdlc1t0b2tlbi50b2tlblR5cGVJZHhdO1xufVxuZnVuY3Rpb24gY29tcHV0ZVJlYWNoU2V0KGNvbmZpZ3MsIHRva2VuLCBwcmVkaWNhdGVTZXQpIHtcbiAgICBjb25zdCBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgY29uc3Qgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY29uZmlncy5lbGVtZW50cykge1xuICAgICAgICBpZiAocHJlZGljYXRlU2V0LmlzKGMuYWx0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLnN0YXRlLnR5cGUgPT09IEFUTl9SVUxFX1NUT1ApIHtcbiAgICAgICAgICAgIHNraXBwZWRTdG9wU3RhdGVzLnB1c2goYyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmFuc2l0aW9uTGVuZ3RoID0gYy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNpdGlvbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9uID0gYy5zdGF0ZS50cmFuc2l0aW9uc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGdldFJlYWNoYWJsZVRhcmdldCh0cmFuc2l0aW9uLCB0b2tlbik7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgYWx0OiBjLmFsdCxcbiAgICAgICAgICAgICAgICAgICAgc3RhY2s6IGMuc3RhY2tcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmVhY2g7XG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzLmxlbmd0aCA9PT0gMCAmJiBpbnRlcm1lZGlhdGUuc2l6ZSA9PT0gMSkge1xuICAgICAgICByZWFjaCA9IGludGVybWVkaWF0ZTtcbiAgICB9XG4gICAgaWYgKHJlYWNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVhY2ggPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBpbnRlcm1lZGlhdGUuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNsb3N1cmUoYywgcmVhY2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcy5sZW5ndGggPiAwICYmICFoYXNDb25maWdJblJ1bGVTdG9wU3RhdGUocmVhY2gpKSB7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBza2lwcGVkU3RvcFN0YXRlcykge1xuICAgICAgICAgICAgcmVhY2guYWRkKGMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZWFjaDtcbn1cbmZ1bmN0aW9uIGdldFJlYWNoYWJsZVRhcmdldCh0cmFuc2l0aW9uLCB0b2tlbikge1xuICAgIGlmICh0cmFuc2l0aW9uIGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24gJiZcbiAgICAgICAgdG9rZW5NYXRjaGVyKHRva2VuLCB0cmFuc2l0aW9uLnRva2VuVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24udGFyZ2V0O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0VW5pcXVlQWx0KGNvbmZpZ3MsIHByZWRpY2F0ZVNldCkge1xuICAgIGxldCBhbHQ7XG4gICAgZm9yIChjb25zdCBjIG9mIGNvbmZpZ3MuZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZVNldC5pcyhjLmFsdCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFsdCA9IGMuYWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYWx0ICE9PSBjLmFsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn1cbmZ1bmN0aW9uIG5ld0RGQVN0YXRlKGNsb3N1cmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb25maWdzOiBjbG9zdXJlLFxuICAgICAgICBlZGdlczoge30sXG4gICAgICAgIGlzQWNjZXB0U3RhdGU6IGZhbHNlLFxuICAgICAgICBwcmVkaWN0aW9uOiAtMVxuICAgIH07XG59XG5mdW5jdGlvbiBhZGRERkFFZGdlKGRmYSwgZnJvbSwgdG9rZW4sIHRvKSB7XG4gICAgdG8gPSBhZGRERkFTdGF0ZShkZmEsIHRvKTtcbiAgICBmcm9tLmVkZ2VzW3Rva2VuLnRva2VuVHlwZUlkeF0gPSB0bztcbiAgICByZXR1cm4gdG87XG59XG5mdW5jdGlvbiBhZGRERkFTdGF0ZShkZmEsIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlID09PSBERkFfRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBSZXBldGl0aW9ucyBoYXZlIHRoZSBzYW1lIGNvbmZpZyBzZXRcbiAgICAvLyBUaGVyZWZvcmUsIHN0b3JpbmcgdGhlIGtleSBvZiB0aGUgY29uZmlnIGluIGEgbWFwIGFsbG93cyB1cyB0byBjcmVhdGUgYSBsb29wIGluIG91ciBERkFcbiAgICBjb25zdCBtYXBLZXkgPSBzdGF0ZS5jb25maWdzLmtleTtcbiAgICBjb25zdCBleGlzdGluZyA9IGRmYS5zdGF0ZXNbbWFwS2V5XTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIHN0YXRlLmNvbmZpZ3MuZmluYWxpemUoKTtcbiAgICBkZmEuc3RhdGVzW21hcEtleV0gPSBzdGF0ZTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5mdW5jdGlvbiBjb21wdXRlU3RhcnRTdGF0ZShhdG5TdGF0ZSkge1xuICAgIGNvbnN0IGNvbmZpZ3MgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgY29uc3QgbnVtYmVyT2ZUcmFuc2l0aW9ucyA9IGF0blN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mVHJhbnNpdGlvbnM7IGkrKykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBhdG5TdGF0ZS50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIHN0YXRlOiB0YXJnZXQsXG4gICAgICAgICAgICBhbHQ6IGksXG4gICAgICAgICAgICBzdGFjazogW11cbiAgICAgICAgfTtcbiAgICAgICAgY2xvc3VyZShjb25maWcsIGNvbmZpZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlncztcbn1cbmZ1bmN0aW9uIGNsb3N1cmUoY29uZmlnLCBjb25maWdzKSB7XG4gICAgY29uc3QgcCA9IGNvbmZpZy5zdGF0ZTtcbiAgICBpZiAocC50eXBlID09PSBBVE5fUlVMRV9TVE9QKSB7XG4gICAgICAgIGlmIChjb25maWcuc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYXRuU3RhY2sgPSBbLi4uY29uZmlnLnN0YWNrXTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGxvd1N0YXRlID0gYXRuU3RhY2sucG9wKCk7XG4gICAgICAgICAgICBjb25zdCBmb2xsb3dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IGZvbGxvd1N0YXRlLFxuICAgICAgICAgICAgICAgIGFsdDogY29uZmlnLmFsdCxcbiAgICAgICAgICAgICAgICBzdGFjazogYXRuU3RhY2tcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjbG9zdXJlKGZvbGxvd0NvbmZpZywgY29uZmlncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXBwaW5nIGludG8gb3V0ZXIgY29udGV4dCwgc2ltcGx5IGFkZCB0aGUgY29uZmlnXG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgc3RvcCBjb21wdXRhdGlvbiBvbmNlIGV2ZXJ5IGNvbmZpZyBpcyBhdCB0aGUgcnVsZSBzdG9wIHN0YXRlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFwLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNpdGlvbkxlbmd0aCA9IHAudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNpdGlvbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb24gPSBwLnRyYW5zaXRpb25zW2ldO1xuICAgICAgICBjb25zdCBjID0gZ2V0RXBzaWxvblRhcmdldChjb25maWcsIHRyYW5zaXRpb24pO1xuICAgICAgICBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjbG9zdXJlKGMsIGNvbmZpZ3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RXBzaWxvblRhcmdldChjb25maWcsIHRyYW5zaXRpb24pIHtcbiAgICBpZiAodHJhbnNpdGlvbiBpbnN0YW5jZW9mIEVwc2lsb25UcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZTogdHJhbnNpdGlvbi50YXJnZXQsXG4gICAgICAgICAgICBhbHQ6IGNvbmZpZy5hbHQsXG4gICAgICAgICAgICBzdGFjazogY29uZmlnLnN0YWNrXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyYW5zaXRpb24gaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICBjb25zdCBzdGFjayA9IFsuLi5jb25maWcuc3RhY2ssIHRyYW5zaXRpb24uZm9sbG93U3RhdGVdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdGU6IHRyYW5zaXRpb24udGFyZ2V0LFxuICAgICAgICAgICAgYWx0OiBjb25maWcuYWx0LFxuICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShjb25maWdzKSB7XG4gICAgZm9yIChjb25zdCBjIG9mIGNvbmZpZ3MuZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGMuc3RhdGUudHlwZSA9PT0gQVROX1JVTEVfU1RPUCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYWxsQ29uZmlnc0luUnVsZVN0b3BTdGF0ZXMoY29uZmlncykge1xuICAgIGZvciAoY29uc3QgYyBvZiBjb25maWdzLmVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChjLnN0YXRlLnR5cGUgIT09IEFUTl9SVUxFX1NUT1ApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGhhc0NvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uKGNvbmZpZ3MpIHtcbiAgICBpZiAoYWxsQ29uZmlnc0luUnVsZVN0b3BTdGF0ZXMoY29uZmlncykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGFsdFNldHMgPSBnZXRDb25mbGljdGluZ0FsdFNldHMoY29uZmlncy5lbGVtZW50cyk7XG4gICAgY29uc3QgaGV1cmlzdGljID0gaGFzQ29uZmxpY3RpbmdBbHRTZXQoYWx0U2V0cykgJiYgIWhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQoYWx0U2V0cyk7XG4gICAgcmV0dXJuIGhldXJpc3RpYztcbn1cbmZ1bmN0aW9uIGdldENvbmZsaWN0aW5nQWx0U2V0cyhjb25maWdzKSB7XG4gICAgY29uc3QgY29uZmlnVG9BbHRzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjb25maWdzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldEFUTkNvbmZpZ0tleShjLCBmYWxzZSk7XG4gICAgICAgIGxldCBhbHRzID0gY29uZmlnVG9BbHRzLmdldChrZXkpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbHRzID0ge307XG4gICAgICAgICAgICBjb25maWdUb0FsdHMuc2V0KGtleSwgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0c1tjLmFsdF0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnVG9BbHRzO1xufVxuZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdBbHRTZXQoYWx0U2V0cykge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuZnJvbShhbHRTZXRzLnZhbHVlcygpKSkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQoYWx0U2V0cykge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgQXJyYXkuZnJvbShhbHRTZXRzLnZhbHVlcygpKSkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWxsLXN0YXItbG9va2FoZWFkLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHsgTExTdGFyTG9va2FoZWFkU3RyYXRlZ3kgfSBmcm9tICcuL2FsbC1zdGFyLWxvb2thaGVhZC5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbid1c2Ugc3RyaWN0JztcbmV4cG9ydCB2YXIgRG9jdW1lbnRVcmk7XG4oZnVuY3Rpb24gKERvY3VtZW50VXJpKSB7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIERvY3VtZW50VXJpLmlzID0gaXM7XG59KShEb2N1bWVudFVyaSB8fCAoRG9jdW1lbnRVcmkgPSB7fSkpO1xuZXhwb3J0IHZhciBVUkk7XG4oZnVuY3Rpb24gKFVSSSkge1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgIH1cbiAgICBVUkkuaXMgPSBpcztcbn0pKFVSSSB8fCAoVVJJID0ge30pKTtcbmV4cG9ydCB2YXIgaW50ZWdlcjtcbihmdW5jdGlvbiAoaW50ZWdlcikge1xuICAgIGludGVnZXIuTUlOX1ZBTFVFID0gLTIxNDc0ODM2NDg7XG4gICAgaW50ZWdlci5NQVhfVkFMVUUgPSAyMTQ3NDgzNjQ3O1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGludGVnZXIuTUlOX1ZBTFVFIDw9IHZhbHVlICYmIHZhbHVlIDw9IGludGVnZXIuTUFYX1ZBTFVFO1xuICAgIH1cbiAgICBpbnRlZ2VyLmlzID0gaXM7XG59KShpbnRlZ2VyIHx8IChpbnRlZ2VyID0ge30pKTtcbmV4cG9ydCB2YXIgdWludGVnZXI7XG4oZnVuY3Rpb24gKHVpbnRlZ2VyKSB7XG4gICAgdWludGVnZXIuTUlOX1ZBTFVFID0gMDtcbiAgICB1aW50ZWdlci5NQVhfVkFMVUUgPSAyMTQ3NDgzNjQ3O1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHVpbnRlZ2VyLk1JTl9WQUxVRSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSB1aW50ZWdlci5NQVhfVkFMVUU7XG4gICAgfVxuICAgIHVpbnRlZ2VyLmlzID0gaXM7XG59KSh1aW50ZWdlciB8fCAodWludGVnZXIgPSB7fSkpO1xuLyoqXG4gKiBUaGUgUG9zaXRpb24gbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgUG9zaXRpb259IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIFBvc2l0aW9uO1xuKGZ1bmN0aW9uIChQb3NpdGlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUG9zaXRpb24gbGl0ZXJhbCBmcm9tIHRoZSBnaXZlbiBsaW5lIGFuZCBjaGFyYWN0ZXIuXG4gICAgICogQHBhcmFtIGxpbmUgVGhlIHBvc2l0aW9uJ3MgbGluZS5cbiAgICAgKiBAcGFyYW0gY2hhcmFjdGVyIFRoZSBwb3NpdGlvbidzIGNoYXJhY3Rlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobGluZSwgY2hhcmFjdGVyKSB7XG4gICAgICAgIGlmIChsaW5lID09PSBOdW1iZXIuTUFYX1ZBTFVFKSB7XG4gICAgICAgICAgICBsaW5lID0gdWludGVnZXIuTUFYX1ZBTFVFO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IE51bWJlci5NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIGNoYXJhY3RlciA9IHVpbnRlZ2VyLk1BWF9WQUxVRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBsaW5lLCBjaGFyYWN0ZXIgfTtcbiAgICB9XG4gICAgUG9zaXRpb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgUG9zaXRpb259IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgSXMudWludGVnZXIoY2FuZGlkYXRlLmxpbmUpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5jaGFyYWN0ZXIpO1xuICAgIH1cbiAgICBQb3NpdGlvbi5pcyA9IGlzO1xufSkoUG9zaXRpb24gfHwgKFBvc2l0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIFJhbmdlIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFJhbmdlfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBSYW5nZTtcbihmdW5jdGlvbiAoUmFuZ2UpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUob25lLCB0d28sIHRocmVlLCBmb3VyKSB7XG4gICAgICAgIGlmIChJcy51aW50ZWdlcihvbmUpICYmIElzLnVpbnRlZ2VyKHR3bykgJiYgSXMudWludGVnZXIodGhyZWUpICYmIElzLnVpbnRlZ2VyKGZvdXIpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogUG9zaXRpb24uY3JlYXRlKG9uZSwgdHdvKSwgZW5kOiBQb3NpdGlvbi5jcmVhdGUodGhyZWUsIGZvdXIpIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoUG9zaXRpb24uaXMob25lKSAmJiBQb3NpdGlvbi5pcyh0d28pKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogb25lLCBlbmQ6IHR3byB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtvbmV9LCAke3R3b30sICR7dGhyZWV9LCAke2ZvdXJ9XWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIFJhbmdlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIFJhbmdlfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFBvc2l0aW9uLmlzKGNhbmRpZGF0ZS5zdGFydCkgJiYgUG9zaXRpb24uaXMoY2FuZGlkYXRlLmVuZCk7XG4gICAgfVxuICAgIFJhbmdlLmlzID0gaXM7XG59KShSYW5nZSB8fCAoUmFuZ2UgPSB7fSkpO1xuLyoqXG4gKiBUaGUgTG9jYXRpb24gbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgTG9jYXRpb259IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIExvY2F0aW9uO1xuKGZ1bmN0aW9uIChMb2NhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb2NhdGlvbiBsaXRlcmFsLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIGxvY2F0aW9uJ3MgdXJpLlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgbG9jYXRpb24ncyByYW5nZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUodXJpLCByYW5nZSkge1xuICAgICAgICByZXR1cm4geyB1cmksIHJhbmdlIH07XG4gICAgfVxuICAgIExvY2F0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIExvY2F0aW9ufSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSkgJiYgKElzLnN0cmluZyhjYW5kaWRhdGUudXJpKSB8fCBJcy51bmRlZmluZWQoY2FuZGlkYXRlLnVyaSkpO1xuICAgIH1cbiAgICBMb2NhdGlvbi5pcyA9IGlzO1xufSkoTG9jYXRpb24gfHwgKExvY2F0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIExvY2F0aW9uTGluayBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBMb2NhdGlvbkxpbmt9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIExvY2F0aW9uTGluaztcbihmdW5jdGlvbiAoTG9jYXRpb25MaW5rKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIExvY2F0aW9uTGluayBsaXRlcmFsLlxuICAgICAqIEBwYXJhbSB0YXJnZXRVcmkgVGhlIGRlZmluaXRpb24ncyB1cmkuXG4gICAgICogQHBhcmFtIHRhcmdldFJhbmdlIFRoZSBmdWxsIHJhbmdlIG9mIHRoZSBkZWZpbml0aW9uLlxuICAgICAqIEBwYXJhbSB0YXJnZXRTZWxlY3Rpb25SYW5nZSBUaGUgc3BhbiBvZiB0aGUgc3ltYm9sIGRlZmluaXRpb24gYXQgdGhlIHRhcmdldC5cbiAgICAgKiBAcGFyYW0gb3JpZ2luU2VsZWN0aW9uUmFuZ2UgVGhlIHNwYW4gb2YgdGhlIHN5bWJvbCBiZWluZyBkZWZpbmVkIGluIHRoZSBvcmlnaW5hdGluZyBzb3VyY2UgZmlsZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUodGFyZ2V0VXJpLCB0YXJnZXRSYW5nZSwgdGFyZ2V0U2VsZWN0aW9uUmFuZ2UsIG9yaWdpblNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgIHJldHVybiB7IHRhcmdldFVyaSwgdGFyZ2V0UmFuZ2UsIHRhcmdldFNlbGVjdGlvblJhbmdlLCBvcmlnaW5TZWxlY3Rpb25SYW5nZSB9O1xuICAgIH1cbiAgICBMb2NhdGlvbkxpbmsuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgTG9jYXRpb25MaW5rfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS50YXJnZXRSYW5nZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS50YXJnZXRVcmkpXG4gICAgICAgICAgICAmJiBSYW5nZS5pcyhjYW5kaWRhdGUudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpXG4gICAgICAgICAgICAmJiAoUmFuZ2UuaXMoY2FuZGlkYXRlLm9yaWdpblNlbGVjdGlvblJhbmdlKSB8fCBJcy51bmRlZmluZWQoY2FuZGlkYXRlLm9yaWdpblNlbGVjdGlvblJhbmdlKSk7XG4gICAgfVxuICAgIExvY2F0aW9uTGluay5pcyA9IGlzO1xufSkoTG9jYXRpb25MaW5rIHx8IChMb2NhdGlvbkxpbmsgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29sb3IgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgQ29sb3J9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIENvbG9yO1xuKGZ1bmN0aW9uIChDb2xvcikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgQ29sb3IgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlZCxcbiAgICAgICAgICAgIGdyZWVuLFxuICAgICAgICAgICAgYmx1ZSxcbiAgICAgICAgICAgIGFscGhhLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBDb2xvci5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBDb2xvcn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIElzLm51bWJlclJhbmdlKGNhbmRpZGF0ZS5yZWQsIDAsIDEpXG4gICAgICAgICAgICAmJiBJcy5udW1iZXJSYW5nZShjYW5kaWRhdGUuZ3JlZW4sIDAsIDEpXG4gICAgICAgICAgICAmJiBJcy5udW1iZXJSYW5nZShjYW5kaWRhdGUuYmx1ZSwgMCwgMSlcbiAgICAgICAgICAgICYmIElzLm51bWJlclJhbmdlKGNhbmRpZGF0ZS5hbHBoYSwgMCwgMSk7XG4gICAgfVxuICAgIENvbG9yLmlzID0gaXM7XG59KShDb2xvciB8fCAoQ29sb3IgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29sb3JJbmZvcm1hdGlvbiBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBDb2xvckluZm9ybWF0aW9ufSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBDb2xvckluZm9ybWF0aW9uO1xuKGZ1bmN0aW9uIChDb2xvckluZm9ybWF0aW9uKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDb2xvckluZm9ybWF0aW9uIGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHJhbmdlLCBjb2xvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICBjb2xvcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ29sb3JJbmZvcm1hdGlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBDb2xvckluZm9ybWF0aW9ufSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLnJhbmdlKSAmJiBDb2xvci5pcyhjYW5kaWRhdGUuY29sb3IpO1xuICAgIH1cbiAgICBDb2xvckluZm9ybWF0aW9uLmlzID0gaXM7XG59KShDb2xvckluZm9ybWF0aW9uIHx8IChDb2xvckluZm9ybWF0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIENvbG9yIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIENvbG9yUHJlc2VudGF0aW9ufSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBDb2xvclByZXNlbnRhdGlvbjtcbihmdW5jdGlvbiAoQ29sb3JQcmVzZW50YXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IENvbG9ySW5mb3JtYXRpb24gbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobGFiZWwsIHRleHRFZGl0LCBhZGRpdGlvbmFsVGV4dEVkaXRzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHRleHRFZGl0LFxuICAgICAgICAgICAgYWRkaXRpb25hbFRleHRFZGl0cyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgQ29sb3JQcmVzZW50YXRpb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgQ29sb3JJbmZvcm1hdGlvbn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIElzLnN0cmluZyhjYW5kaWRhdGUubGFiZWwpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS50ZXh0RWRpdCkgfHwgVGV4dEVkaXQuaXMoY2FuZGlkYXRlKSlcbiAgICAgICAgICAgICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLmFkZGl0aW9uYWxUZXh0RWRpdHMpIHx8IElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLmFkZGl0aW9uYWxUZXh0RWRpdHMsIFRleHRFZGl0LmlzKSk7XG4gICAgfVxuICAgIENvbG9yUHJlc2VudGF0aW9uLmlzID0gaXM7XG59KShDb2xvclByZXNlbnRhdGlvbiB8fCAoQ29sb3JQcmVzZW50YXRpb24gPSB7fSkpO1xuLyoqXG4gKiBBIHNldCBvZiBwcmVkZWZpbmVkIHJhbmdlIGtpbmRzLlxuICovXG5leHBvcnQgdmFyIEZvbGRpbmdSYW5nZUtpbmQ7XG4oZnVuY3Rpb24gKEZvbGRpbmdSYW5nZUtpbmQpIHtcbiAgICAvKipcbiAgICAgKiBGb2xkaW5nIHJhbmdlIGZvciBhIGNvbW1lbnRcbiAgICAgKi9cbiAgICBGb2xkaW5nUmFuZ2VLaW5kLkNvbW1lbnQgPSAnY29tbWVudCc7XG4gICAgLyoqXG4gICAgICogRm9sZGluZyByYW5nZSBmb3IgYW4gaW1wb3J0IG9yIGluY2x1ZGVcbiAgICAgKi9cbiAgICBGb2xkaW5nUmFuZ2VLaW5kLkltcG9ydHMgPSAnaW1wb3J0cyc7XG4gICAgLyoqXG4gICAgICogRm9sZGluZyByYW5nZSBmb3IgYSByZWdpb24gKGUuZy4gYCNyZWdpb25gKVxuICAgICAqL1xuICAgIEZvbGRpbmdSYW5nZUtpbmQuUmVnaW9uID0gJ3JlZ2lvbic7XG59KShGb2xkaW5nUmFuZ2VLaW5kIHx8IChGb2xkaW5nUmFuZ2VLaW5kID0ge30pKTtcbi8qKlxuICogVGhlIGZvbGRpbmcgcmFuZ2UgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgRm9sZGluZ1JhbmdlfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBGb2xkaW5nUmFuZ2U7XG4oZnVuY3Rpb24gKEZvbGRpbmdSYW5nZSkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRm9sZGluZ1JhbmdlIGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHN0YXJ0TGluZSwgZW5kTGluZSwgc3RhcnRDaGFyYWN0ZXIsIGVuZENoYXJhY3Rlciwga2luZCwgY29sbGFwc2VkVGV4dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBlbmRMaW5lXG4gICAgICAgIH07XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKHN0YXJ0Q2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0Q2hhcmFjdGVyID0gc3RhcnRDaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzLmRlZmluZWQoZW5kQ2hhcmFjdGVyKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZENoYXJhY3RlciA9IGVuZENoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXMuZGVmaW5lZChraW5kKSkge1xuICAgICAgICAgICAgcmVzdWx0LmtpbmQgPSBraW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKGNvbGxhcHNlZFRleHQpKSB7XG4gICAgICAgICAgICByZXN1bHQuY29sbGFwc2VkVGV4dCA9IGNvbGxhcHNlZFRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRm9sZGluZ1JhbmdlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIEZvbGRpbmdSYW5nZX0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5zdGFydExpbmUpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5zdGFydExpbmUpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5zdGFydENoYXJhY3RlcikgfHwgSXMudWludGVnZXIoY2FuZGlkYXRlLnN0YXJ0Q2hhcmFjdGVyKSlcbiAgICAgICAgICAgICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLmVuZENoYXJhY3RlcikgfHwgSXMudWludGVnZXIoY2FuZGlkYXRlLmVuZENoYXJhY3RlcikpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5raW5kKSB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLmtpbmQpKTtcbiAgICB9XG4gICAgRm9sZGluZ1JhbmdlLmlzID0gaXM7XG59KShGb2xkaW5nUmFuZ2UgfHwgKEZvbGRpbmdSYW5nZSA9IHt9KSk7XG4vKipcbiAqIFRoZSBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb259IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb247XG4oZnVuY3Rpb24gKERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb24gbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobG9jYXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb259IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgTG9jYXRpb24uaXMoY2FuZGlkYXRlLmxvY2F0aW9uKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uLmlzID0gaXM7XG59KShEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uIHx8IChEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIGRpYWdub3N0aWMncyBzZXZlcml0eS5cbiAqL1xuZXhwb3J0IHZhciBEaWFnbm9zdGljU2V2ZXJpdHk7XG4oZnVuY3Rpb24gKERpYWdub3N0aWNTZXZlcml0eSkge1xuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgRGlhZ25vc3RpY1NldmVyaXR5LkVycm9yID0gMTtcbiAgICAvKipcbiAgICAgKiBSZXBvcnRzIGEgd2FybmluZy5cbiAgICAgKi9cbiAgICBEaWFnbm9zdGljU2V2ZXJpdHkuV2FybmluZyA9IDI7XG4gICAgLyoqXG4gICAgICogUmVwb3J0cyBhbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBEaWFnbm9zdGljU2V2ZXJpdHkuSW5mb3JtYXRpb24gPSAzO1xuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgYSBoaW50LlxuICAgICAqL1xuICAgIERpYWdub3N0aWNTZXZlcml0eS5IaW50ID0gNDtcbn0pKERpYWdub3N0aWNTZXZlcml0eSB8fCAoRGlhZ25vc3RpY1NldmVyaXR5ID0ge30pKTtcbi8qKlxuICogVGhlIGRpYWdub3N0aWMgdGFncy5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCB2YXIgRGlhZ25vc3RpY1RhZztcbihmdW5jdGlvbiAoRGlhZ25vc3RpY1RhZykge1xuICAgIC8qKlxuICAgICAqIFVudXNlZCBvciB1bm5lY2Vzc2FyeSBjb2RlLlxuICAgICAqXG4gICAgICogQ2xpZW50cyBhcmUgYWxsb3dlZCB0byByZW5kZXIgZGlhZ25vc3RpY3Mgd2l0aCB0aGlzIHRhZyBmYWRlZCBvdXQgaW5zdGVhZCBvZiBoYXZpbmdcbiAgICAgKiBhbiBlcnJvciBzcXVpZ2dsZS5cbiAgICAgKi9cbiAgICBEaWFnbm9zdGljVGFnLlVubmVjZXNzYXJ5ID0gMTtcbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkIG9yIG9ic29sZXRlIGNvZGUuXG4gICAgICpcbiAgICAgKiBDbGllbnRzIGFyZSBhbGxvd2VkIHRvIHJlbmRlcmVkIGRpYWdub3N0aWNzIHdpdGggdGhpcyB0YWcgc3RyaWtlIHRocm91Z2guXG4gICAgICovXG4gICAgRGlhZ25vc3RpY1RhZy5EZXByZWNhdGVkID0gMjtcbn0pKERpYWdub3N0aWNUYWcgfHwgKERpYWdub3N0aWNUYWcgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29kZURlc2NyaXB0aW9uIG5hbWVzcGFjZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGRlc2NyaXB0aW9ucyBmb3IgZGlhZ25vc3RpYyBjb2Rlcy5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCB2YXIgQ29kZURlc2NyaXB0aW9uO1xuKGZ1bmN0aW9uIChDb2RlRGVzY3JpcHRpb24pIHtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLmhyZWYpO1xuICAgIH1cbiAgICBDb2RlRGVzY3JpcHRpb24uaXMgPSBpcztcbn0pKENvZGVEZXNjcmlwdGlvbiB8fCAoQ29kZURlc2NyaXB0aW9uID0ge30pKTtcbi8qKlxuICogVGhlIERpYWdub3N0aWMgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gd29yayB3aXRoXG4gKiB7QGxpbmsgRGlhZ25vc3RpY30gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgRGlhZ25vc3RpYztcbihmdW5jdGlvbiAoRGlhZ25vc3RpYykge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgRGlhZ25vc3RpYyBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgbWVzc2FnZSwgc2V2ZXJpdHksIGNvZGUsIHNvdXJjZSwgcmVsYXRlZEluZm9ybWF0aW9uKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7IHJhbmdlLCBtZXNzYWdlIH07XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKHNldmVyaXR5KSkge1xuICAgICAgICAgICAgcmVzdWx0LnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzLmRlZmluZWQoY29kZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID0gY29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSXMuZGVmaW5lZChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKHJlbGF0ZWRJbmZvcm1hdGlvbikpIHtcbiAgICAgICAgICAgIHJlc3VsdC5yZWxhdGVkSW5mb3JtYXRpb24gPSByZWxhdGVkSW5mb3JtYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRGlhZ25vc3RpYy5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBEaWFnbm9zdGljfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSlcbiAgICAgICAgICAgICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSlcbiAgICAgICAgICAgICYmIElzLnN0cmluZyhjYW5kaWRhdGUubWVzc2FnZSlcbiAgICAgICAgICAgICYmIChJcy5udW1iZXIoY2FuZGlkYXRlLnNldmVyaXR5KSB8fCBJcy51bmRlZmluZWQoY2FuZGlkYXRlLnNldmVyaXR5KSlcbiAgICAgICAgICAgICYmIChJcy5pbnRlZ2VyKGNhbmRpZGF0ZS5jb2RlKSB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLmNvZGUpIHx8IElzLnVuZGVmaW5lZChjYW5kaWRhdGUuY29kZSkpXG4gICAgICAgICAgICAmJiAoSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5jb2RlRGVzY3JpcHRpb24pIHx8IChJcy5zdHJpbmcoKF9hID0gY2FuZGlkYXRlLmNvZGVEZXNjcmlwdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhyZWYpKSlcbiAgICAgICAgICAgICYmIChJcy5zdHJpbmcoY2FuZGlkYXRlLnNvdXJjZSkgfHwgSXMudW5kZWZpbmVkKGNhbmRpZGF0ZS5zb3VyY2UpKVxuICAgICAgICAgICAgJiYgKElzLnVuZGVmaW5lZChjYW5kaWRhdGUucmVsYXRlZEluZm9ybWF0aW9uKSB8fCBJcy50eXBlZEFycmF5KGNhbmRpZGF0ZS5yZWxhdGVkSW5mb3JtYXRpb24sIERpYWdub3N0aWNSZWxhdGVkSW5mb3JtYXRpb24uaXMpKTtcbiAgICB9XG4gICAgRGlhZ25vc3RpYy5pcyA9IGlzO1xufSkoRGlhZ25vc3RpYyB8fCAoRGlhZ25vc3RpYyA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb21tYW5kIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIENvbW1hbmR9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIENvbW1hbmQ7XG4oZnVuY3Rpb24gKENvbW1hbmQpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IENvbW1hbmQgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUodGl0bGUsIGNvbW1hbmQsIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgdGl0bGUsIGNvbW1hbmQgfTtcbiAgICAgICAgaWYgKElzLmRlZmluZWQoYXJncykgJiYgYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQuYXJndW1lbnRzID0gYXJncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBDb21tYW5kLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIENvbW1hbmR9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS50aXRsZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5jb21tYW5kKTtcbiAgICB9XG4gICAgQ29tbWFuZC5pcyA9IGlzO1xufSkoQ29tbWFuZCB8fCAoQ29tbWFuZCA9IHt9KSk7XG4vKipcbiAqIFRoZSBUZXh0RWRpdCBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSByZXBsYWNlLFxuICogaW5zZXJ0IGFuZCBkZWxldGUgZWRpdHMgbW9yZSBlYXNpbHkuXG4gKi9cbmV4cG9ydCB2YXIgVGV4dEVkaXQ7XG4oZnVuY3Rpb24gKFRleHRFZGl0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJlcGxhY2UgdGV4dCBlZGl0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgdGV4dCB0byBiZSByZXBsYWNlZC5cbiAgICAgKiBAcGFyYW0gbmV3VGV4dCBUaGUgbmV3IHRleHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwbGFjZShyYW5nZSwgbmV3VGV4dCkge1xuICAgICAgICByZXR1cm4geyByYW5nZSwgbmV3VGV4dCB9O1xuICAgIH1cbiAgICBUZXh0RWRpdC5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc2VydCB0ZXh0IGVkaXQuXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0byBpbnNlcnQgdGhlIHRleHQgYXQuXG4gICAgICogQHBhcmFtIG5ld1RleHQgVGhlIHRleHQgdG8gYmUgaW5zZXJ0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zZXJ0KHBvc2l0aW9uLCBuZXdUZXh0KSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlOiB7IHN0YXJ0OiBwb3NpdGlvbiwgZW5kOiBwb3NpdGlvbiB9LCBuZXdUZXh0IH07XG4gICAgfVxuICAgIFRleHRFZGl0Lmluc2VydCA9IGluc2VydDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZGVsZXRlIHRleHQgZWRpdC5cbiAgICAgKiBAcGFyYW0gcmFuZ2UgVGhlIHJhbmdlIG9mIHRleHQgdG8gYmUgZGVsZXRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWwocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIG5ld1RleHQ6ICcnIH07XG4gICAgfVxuICAgIFRleHRFZGl0LmRlbCA9IGRlbDtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKVxuICAgICAgICAgICAgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5uZXdUZXh0KVxuICAgICAgICAgICAgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLnJhbmdlKTtcbiAgICB9XG4gICAgVGV4dEVkaXQuaXMgPSBpcztcbn0pKFRleHRFZGl0IHx8IChUZXh0RWRpdCA9IHt9KSk7XG5leHBvcnQgdmFyIENoYW5nZUFubm90YXRpb247XG4oZnVuY3Rpb24gKENoYW5nZUFubm90YXRpb24pIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUobGFiZWwsIG5lZWRzQ29uZmlybWF0aW9uLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IGxhYmVsIH07XG4gICAgICAgIGlmIChuZWVkc0NvbmZpcm1hdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQubmVlZHNDb25maXJtYXRpb24gPSBuZWVkc0NvbmZpcm1hdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgQ2hhbmdlQW5ub3RhdGlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5sYWJlbCkgJiZcbiAgICAgICAgICAgIChJcy5ib29sZWFuKGNhbmRpZGF0ZS5uZWVkc0NvbmZpcm1hdGlvbikgfHwgY2FuZGlkYXRlLm5lZWRzQ29uZmlybWF0aW9uID09PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAoSXMuc3RyaW5nKGNhbmRpZGF0ZS5kZXNjcmlwdGlvbikgfHwgY2FuZGlkYXRlLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBDaGFuZ2VBbm5vdGF0aW9uLmlzID0gaXM7XG59KShDaGFuZ2VBbm5vdGF0aW9uIHx8IChDaGFuZ2VBbm5vdGF0aW9uID0ge30pKTtcbmV4cG9ydCB2YXIgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXI7XG4oZnVuY3Rpb24gKENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyKSB7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5zdHJpbmcoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMgPSBpcztcbn0pKENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyIHx8IChDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllciA9IHt9KSk7XG5leHBvcnQgdmFyIEFubm90YXRlZFRleHRFZGl0O1xuKGZ1bmN0aW9uIChBbm5vdGF0ZWRUZXh0RWRpdCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYW5ub3RhdGVkIHJlcGxhY2UgdGV4dCBlZGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiB0ZXh0IHRvIGJlIHJlcGxhY2VkLlxuICAgICAqIEBwYXJhbSBuZXdUZXh0IFRoZSBuZXcgdGV4dC5cbiAgICAgKiBAcGFyYW0gYW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJhbmdlLCBuZXdUZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlLCBuZXdUZXh0LCBhbm5vdGF0aW9uSWQ6IGFubm90YXRpb24gfTtcbiAgICB9XG4gICAgQW5ub3RhdGVkVGV4dEVkaXQucmVwbGFjZSA9IHJlcGxhY2U7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhbm5vdGF0ZWQgaW5zZXJ0IHRleHQgZWRpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgcG9zaXRpb24gdG8gaW5zZXJ0IHRoZSB0ZXh0IGF0LlxuICAgICAqIEBwYXJhbSBuZXdUZXh0IFRoZSB0ZXh0IHRvIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSBhbm5vdGF0aW9uIFRoZSBhbm5vdGF0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc2VydChwb3NpdGlvbiwgbmV3VGV4dCwgYW5ub3RhdGlvbikge1xuICAgICAgICByZXR1cm4geyByYW5nZTogeyBzdGFydDogcG9zaXRpb24sIGVuZDogcG9zaXRpb24gfSwgbmV3VGV4dCwgYW5ub3RhdGlvbklkOiBhbm5vdGF0aW9uIH07XG4gICAgfVxuICAgIEFubm90YXRlZFRleHRFZGl0Lmluc2VydCA9IGluc2VydDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFubm90YXRlZCBkZWxldGUgdGV4dCBlZGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSBvZiB0ZXh0IHRvIGJlIGRlbGV0ZWQuXG4gICAgICogQHBhcmFtIGFubm90YXRpb24gVGhlIGFubm90YXRpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVsKHJhbmdlLCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlLCBuZXdUZXh0OiAnJywgYW5ub3RhdGlvbklkOiBhbm5vdGF0aW9uIH07XG4gICAgfVxuICAgIEFubm90YXRlZFRleHRFZGl0LmRlbCA9IGRlbDtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIFRleHRFZGl0LmlzKGNhbmRpZGF0ZSkgJiYgKENoYW5nZUFubm90YXRpb24uaXMoY2FuZGlkYXRlLmFubm90YXRpb25JZCkgfHwgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoY2FuZGlkYXRlLmFubm90YXRpb25JZCkpO1xuICAgIH1cbiAgICBBbm5vdGF0ZWRUZXh0RWRpdC5pcyA9IGlzO1xufSkoQW5ub3RhdGVkVGV4dEVkaXQgfHwgKEFubm90YXRlZFRleHRFZGl0ID0ge30pKTtcbi8qKlxuICogVGhlIFRleHREb2N1bWVudEVkaXQgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGVcbiAqIGFuIGVkaXQgdGhhdCBtYW5pcHVsYXRlcyBhIHRleHQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCB2YXIgVGV4dERvY3VtZW50RWRpdDtcbihmdW5jdGlvbiAoVGV4dERvY3VtZW50RWRpdCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYFRleHREb2N1bWVudEVkaXRgXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHRleHREb2N1bWVudCwgZWRpdHMpIHtcbiAgICAgICAgcmV0dXJuIHsgdGV4dERvY3VtZW50LCBlZGl0cyB9O1xuICAgIH1cbiAgICBUZXh0RG9jdW1lbnRFZGl0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSlcbiAgICAgICAgICAgICYmIE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllci5pcyhjYW5kaWRhdGUudGV4dERvY3VtZW50KVxuICAgICAgICAgICAgJiYgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuZWRpdHMpO1xuICAgIH1cbiAgICBUZXh0RG9jdW1lbnRFZGl0LmlzID0gaXM7XG59KShUZXh0RG9jdW1lbnRFZGl0IHx8IChUZXh0RG9jdW1lbnRFZGl0ID0ge30pKTtcbmV4cG9ydCB2YXIgQ3JlYXRlRmlsZTtcbihmdW5jdGlvbiAoQ3JlYXRlRmlsZSkge1xuICAgIGZ1bmN0aW9uIGNyZWF0ZSh1cmksIG9wdGlvbnMsIGFubm90YXRpb24pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGtpbmQ6ICdjcmVhdGUnLFxuICAgICAgICAgICAgdXJpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgKG9wdGlvbnMub3ZlcndyaXRlICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5pZ25vcmVJZkV4aXN0cyAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgcmVzdWx0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbm5vdGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hbm5vdGF0aW9uSWQgPSBhbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIENyZWF0ZUZpbGUuY3JlYXRlID0gY3JlYXRlO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUua2luZCA9PT0gJ2NyZWF0ZScgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS51cmkpICYmIChjYW5kaWRhdGUub3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAoKGNhbmRpZGF0ZS5vcHRpb25zLm92ZXJ3cml0ZSA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLm9wdGlvbnMub3ZlcndyaXRlKSkgJiYgKGNhbmRpZGF0ZS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzID09PSB1bmRlZmluZWQgfHwgSXMuYm9vbGVhbihjYW5kaWRhdGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSkgJiYgKGNhbmRpZGF0ZS5hbm5vdGF0aW9uSWQgPT09IHVuZGVmaW5lZCB8fCBDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhjYW5kaWRhdGUuYW5ub3RhdGlvbklkKSk7XG4gICAgfVxuICAgIENyZWF0ZUZpbGUuaXMgPSBpcztcbn0pKENyZWF0ZUZpbGUgfHwgKENyZWF0ZUZpbGUgPSB7fSkpO1xuZXhwb3J0IHZhciBSZW5hbWVGaWxlO1xuKGZ1bmN0aW9uIChSZW5hbWVGaWxlKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKG9sZFVyaSwgbmV3VXJpLCBvcHRpb25zLCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICBraW5kOiAncmVuYW1lJyxcbiAgICAgICAgICAgIG9sZFVyaSxcbiAgICAgICAgICAgIG5ld1VyaVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvcHRpb25zLm92ZXJ3cml0ZSAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuaWdub3JlSWZFeGlzdHMgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQuYW5ub3RhdGlvbklkID0gYW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBSZW5hbWVGaWxlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLmtpbmQgPT09ICdyZW5hbWUnICYmIElzLnN0cmluZyhjYW5kaWRhdGUub2xkVXJpKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLm5ld1VyaSkgJiYgKGNhbmRpZGF0ZS5vcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICgoY2FuZGlkYXRlLm9wdGlvbnMub3ZlcndyaXRlID09PSB1bmRlZmluZWQgfHwgSXMuYm9vbGVhbihjYW5kaWRhdGUub3B0aW9ucy5vdmVyd3JpdGUpKSAmJiAoY2FuZGlkYXRlLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMgPT09IHVuZGVmaW5lZCB8fCBJcy5ib29sZWFuKGNhbmRpZGF0ZS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpKSAmJiAoY2FuZGlkYXRlLmFubm90YXRpb25JZCA9PT0gdW5kZWZpbmVkIHx8IENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKGNhbmRpZGF0ZS5hbm5vdGF0aW9uSWQpKTtcbiAgICB9XG4gICAgUmVuYW1lRmlsZS5pcyA9IGlzO1xufSkoUmVuYW1lRmlsZSB8fCAoUmVuYW1lRmlsZSA9IHt9KSk7XG5leHBvcnQgdmFyIERlbGV0ZUZpbGU7XG4oZnVuY3Rpb24gKERlbGV0ZUZpbGUpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUodXJpLCBvcHRpb25zLCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICBraW5kOiAnZGVsZXRlJyxcbiAgICAgICAgICAgIHVyaVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvcHRpb25zLnJlY3Vyc2l2ZSAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQuYW5ub3RhdGlvbklkID0gYW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBEZWxldGVGaWxlLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLmtpbmQgPT09ICdkZWxldGUnICYmIElzLnN0cmluZyhjYW5kaWRhdGUudXJpKSAmJiAoY2FuZGlkYXRlLm9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKChjYW5kaWRhdGUub3B0aW9ucy5yZWN1cnNpdmUgPT09IHVuZGVmaW5lZCB8fCBJcy5ib29sZWFuKGNhbmRpZGF0ZS5vcHRpb25zLnJlY3Vyc2l2ZSkpICYmIChjYW5kaWRhdGUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cyA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkpICYmIChjYW5kaWRhdGUuYW5ub3RhdGlvbklkID09PSB1bmRlZmluZWQgfHwgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoY2FuZGlkYXRlLmFubm90YXRpb25JZCkpO1xuICAgIH1cbiAgICBEZWxldGVGaWxlLmlzID0gaXM7XG59KShEZWxldGVGaWxlIHx8IChEZWxldGVGaWxlID0ge30pKTtcbmV4cG9ydCB2YXIgV29ya3NwYWNlRWRpdDtcbihmdW5jdGlvbiAoV29ya3NwYWNlRWRpdCkge1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5jaGFuZ2VzICE9PSB1bmRlZmluZWQgfHwgY2FuZGlkYXRlLmRvY3VtZW50Q2hhbmdlcyAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5kb2N1bWVudENoYW5nZXMgPT09IHVuZGVmaW5lZCB8fCBjYW5kaWRhdGUuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChjaGFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoSXMuc3RyaW5nKGNoYW5nZS5raW5kKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ3JlYXRlRmlsZS5pcyhjaGFuZ2UpIHx8IFJlbmFtZUZpbGUuaXMoY2hhbmdlKSB8fCBEZWxldGVGaWxlLmlzKGNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dERvY3VtZW50RWRpdC5pcyhjaGFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gICAgV29ya3NwYWNlRWRpdC5pcyA9IGlzO1xufSkoV29ya3NwYWNlRWRpdCB8fCAoV29ya3NwYWNlRWRpdCA9IHt9KSk7XG5jbGFzcyBUZXh0RWRpdENoYW5nZUltcGwge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRzLCBjaGFuZ2VBbm5vdGF0aW9ucykge1xuICAgICAgICB0aGlzLmVkaXRzID0gZWRpdHM7XG4gICAgICAgIHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMgPSBjaGFuZ2VBbm5vdGF0aW9ucztcbiAgICB9XG4gICAgaW5zZXJ0KHBvc2l0aW9uLCBuZXdUZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCBlZGl0O1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVkaXQgPSBUZXh0RWRpdC5pbnNlcnQocG9zaXRpb24sIG5ld1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKGFubm90YXRpb24pKSB7XG4gICAgICAgICAgICBpZCA9IGFubm90YXRpb247XG4gICAgICAgICAgICBlZGl0ID0gQW5ub3RhdGVkVGV4dEVkaXQuaW5zZXJ0KHBvc2l0aW9uLCBuZXdUZXh0LCBhbm5vdGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICBpZCA9IHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGFubm90YXRpb24pO1xuICAgICAgICAgICAgZWRpdCA9IEFubm90YXRlZFRleHRFZGl0Lmluc2VydChwb3NpdGlvbiwgbmV3VGV4dCwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdHMucHVzaChlZGl0KTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXBsYWNlKHJhbmdlLCBuZXdUZXh0LCBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGxldCBlZGl0O1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVkaXQgPSBUZXh0RWRpdC5yZXBsYWNlKHJhbmdlLCBuZXdUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhhbm5vdGF0aW9uKSkge1xuICAgICAgICAgICAgaWQgPSBhbm5vdGF0aW9uO1xuICAgICAgICAgICAgZWRpdCA9IEFubm90YXRlZFRleHRFZGl0LnJlcGxhY2UocmFuZ2UsIG5ld1RleHQsIGFubm90YXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgIGlkID0gdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBlZGl0ID0gQW5ub3RhdGVkVGV4dEVkaXQucmVwbGFjZShyYW5nZSwgbmV3VGV4dCwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdHMucHVzaChlZGl0KTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUocmFuZ2UsIGFubm90YXRpb24pIHtcbiAgICAgICAgbGV0IGVkaXQ7XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKGFubm90YXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZWRpdCA9IFRleHRFZGl0LmRlbChyYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoYW5ub3RhdGlvbikpIHtcbiAgICAgICAgICAgIGlkID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGVkaXQgPSBBbm5vdGF0ZWRUZXh0RWRpdC5kZWwocmFuZ2UsIGFubm90YXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgIGlkID0gdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBlZGl0ID0gQW5ub3RhdGVkVGV4dEVkaXQuZGVsKHJhbmdlLCBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0cy5wdXNoKGVkaXQpO1xuICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZChlZGl0KSB7XG4gICAgICAgIHRoaXMuZWRpdHMucHVzaChlZGl0KTtcbiAgICB9XG4gICAgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0cztcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuZWRpdHMuc3BsaWNlKDAsIHRoaXMuZWRpdHMubGVuZ3RoKTtcbiAgICB9XG4gICAgYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLmApO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBBIGhlbHBlciBjbGFzc1xuICovXG5jbGFzcyBDaGFuZ2VBbm5vdGF0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGFubm90YXRpb25zO1xuICAgICAgICB0aGlzLl9jb3VudGVyID0gMDtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgfVxuICAgIGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25zO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIG1hbmFnZShpZE9yQW5ub3RhdGlvbiwgYW5ub3RhdGlvbikge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGlmIChDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhpZE9yQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICAgIGlkID0gaWRPckFubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZCA9IHRoaXMubmV4dElkKCk7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gaWRPckFubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2Fubm90YXRpb25zW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElkICR7aWR9IGlzIGFscmVhZHkgaW4gdXNlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbm5vdGF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbm5vdGF0aW9uc1tpZF0gPSBhbm5vdGF0aW9uO1xuICAgICAgICB0aGlzLl9zaXplKys7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgbmV4dElkKCkge1xuICAgICAgICB0aGlzLl9jb3VudGVyKys7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuLyoqXG4gKiBBIHdvcmtzcGFjZSBjaGFuZ2UgaGVscHMgY29uc3RydWN0aW5nIGNoYW5nZXMgdG8gYSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VDaGFuZ2Uge1xuICAgIGNvbnN0cnVjdG9yKHdvcmtzcGFjZUVkaXQpIHtcbiAgICAgICAgdGhpcy5fdGV4dEVkaXRDaGFuZ2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgaWYgKHdvcmtzcGFjZUVkaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fd29ya3NwYWNlRWRpdCA9IHdvcmtzcGFjZUVkaXQ7XG4gICAgICAgICAgICBpZiAod29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyA9IG5ldyBDaGFuZ2VBbm5vdGF0aW9ucyh3b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zID0gdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCk7XG4gICAgICAgICAgICAgICAgd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChUZXh0RG9jdW1lbnRFZGl0LmlzKGNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFZGl0Q2hhbmdlID0gbmV3IFRleHRFZGl0Q2hhbmdlSW1wbChjaGFuZ2UuZWRpdHMsIHRoaXMuX2NoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tjaGFuZ2UudGV4dERvY3VtZW50LnVyaV0gPSB0ZXh0RWRpdENoYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod29ya3NwYWNlRWRpdC5jaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMod29ya3NwYWNlRWRpdC5jaGFuZ2VzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEVkaXRDaGFuZ2UgPSBuZXcgVGV4dEVkaXRDaGFuZ2VJbXBsKHdvcmtzcGFjZUVkaXQuY2hhbmdlc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2tleV0gPSB0ZXh0RWRpdENoYW5nZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtzcGFjZUVkaXQgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHtAbGluayBXb3Jrc3BhY2VFZGl0fSBsaXRlcmFsXG4gICAgICogdXNlIHRvIGJlIHJldHVybmVkIGZyb20gYSB3b3Jrc3BhY2UgZWRpdCBvcGVyYXRpb24gbGlrZSByZW5hbWUuXG4gICAgICovXG4gICAgZ2V0IGVkaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucyA9IHRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93b3Jrc3BhY2VFZGl0O1xuICAgIH1cbiAgICBnZXRUZXh0RWRpdENoYW5nZShrZXkpIHtcbiAgICAgICAgaWYgKE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllci5pcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRleHREb2N1bWVudCA9IHsgdXJpOiBrZXkudXJpLCB2ZXJzaW9uOiBrZXkudmVyc2lvbiB9O1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0ZXh0RG9jdW1lbnQudXJpXTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdHMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0RG9jdW1lbnRFZGl0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0RG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGVkaXRzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHRleHREb2N1bWVudEVkaXQpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0RWRpdENoYW5nZUltcGwoZWRpdHMsIHRoaXMuX2NoYW5nZUFubm90YXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdENoYW5nZXNbdGV4dERvY3VtZW50LnVyaV0gPSByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX3RleHRFZGl0Q2hhbmdlc1trZXldO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWRpdHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXNba2V5XSA9IGVkaXRzO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0RWRpdENoYW5nZUltcGwoZWRpdHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0Q2hhbmdlc1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0RG9jdW1lbnRDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMgPSBuZXcgQ2hhbmdlQW5ub3RhdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzID0gW107XG4gICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zID0gdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdENoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZUZpbGUodXJpLCBvcHRpb25zT3JBbm5vdGF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5ub3RhdGlvbjtcbiAgICAgICAgaWYgKENoYW5nZUFubm90YXRpb24uaXMob3B0aW9uc09yQW5ub3RhdGlvbikgfHwgQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMob3B0aW9uc09yQW5ub3RhdGlvbikpIHtcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBvcHRpb25zT3JBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNPckFubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9wZXJhdGlvbjtcbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAoYW5ub3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcGVyYXRpb24gPSBDcmVhdGVGaWxlLmNyZWF0ZSh1cmksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQgPSBDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhhbm5vdGF0aW9uKSA/IGFubm90YXRpb24gOiB0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBvcGVyYXRpb24gPSBDcmVhdGVGaWxlLmNyZWF0ZSh1cmksIG9wdGlvbnMsIGlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKG9wZXJhdGlvbik7XG4gICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuYW1lRmlsZShvbGRVcmksIG5ld1VyaSwgb3B0aW9uc09yQW5ub3RhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFubm90YXRpb247XG4gICAgICAgIGlmIChDaGFuZ2VBbm5vdGF0aW9uLmlzKG9wdGlvbnNPckFubm90YXRpb24pIHx8IENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKG9wdGlvbnNPckFubm90YXRpb24pKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gb3B0aW9uc09yQW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcGVyYXRpb247XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKGFubm90YXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3BlcmF0aW9uID0gUmVuYW1lRmlsZS5jcmVhdGUob2xkVXJpLCBuZXdVcmksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWQgPSBDaGFuZ2VBbm5vdGF0aW9uSWRlbnRpZmllci5pcyhhbm5vdGF0aW9uKSA/IGFubm90YXRpb24gOiB0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBvcGVyYXRpb24gPSBSZW5hbWVGaWxlLmNyZWF0ZShvbGRVcmksIG5ld1VyaSwgb3B0aW9ucywgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gob3BlcmF0aW9uKTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWxldGVGaWxlKHVyaSwgb3B0aW9uc09yQW5ub3RhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFubm90YXRpb247XG4gICAgICAgIGlmIChDaGFuZ2VBbm5vdGF0aW9uLmlzKG9wdGlvbnNPckFubm90YXRpb24pIHx8IENoYW5nZUFubm90YXRpb25JZGVudGlmaWVyLmlzKG9wdGlvbnNPckFubm90YXRpb24pKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gb3B0aW9uc09yQW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JBbm5vdGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcGVyYXRpb247XG4gICAgICAgIGxldCBpZDtcbiAgICAgICAgaWYgKGFubm90YXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3BlcmF0aW9uID0gRGVsZXRlRmlsZS5jcmVhdGUodXJpLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlkID0gQ2hhbmdlQW5ub3RhdGlvbklkZW50aWZpZXIuaXMoYW5ub3RhdGlvbikgPyBhbm5vdGF0aW9uIDogdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGFubm90YXRpb24pO1xuICAgICAgICAgICAgb3BlcmF0aW9uID0gRGVsZXRlRmlsZS5jcmVhdGUodXJpLCBvcHRpb25zLCBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChvcGVyYXRpb24pO1xuICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgVGV4dERvY3VtZW50SWRlbnRpZmllciBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBUZXh0RG9jdW1lbnRJZGVudGlmaWVyfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuKGZ1bmN0aW9uIChUZXh0RG9jdW1lbnRJZGVudGlmaWVyKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBUZXh0RG9jdW1lbnRJZGVudGlmaWVyIGxpdGVyYWwuXG4gICAgICogQHBhcmFtIHVyaSBUaGUgZG9jdW1lbnQncyB1cmkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSkge1xuICAgICAgICByZXR1cm4geyB1cmkgfTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50SWRlbnRpZmllci5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBUZXh0RG9jdW1lbnRJZGVudGlmaWVyfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudXJpKTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50SWRlbnRpZmllci5pcyA9IGlzO1xufSkoVGV4dERvY3VtZW50SWRlbnRpZmllciB8fCAoVGV4dERvY3VtZW50SWRlbnRpZmllciA9IHt9KSk7XG4vKipcbiAqIFRoZSBWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXJ9IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXI7XG4oZnVuY3Rpb24gKFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgbGl0ZXJhbC5cbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgZG9jdW1lbnQncyB2ZXJzaW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZSh1cmksIHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHsgdXJpLCB2ZXJzaW9uIH07XG4gICAgfVxuICAgIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLmRlZmluZWQoY2FuZGlkYXRlKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLnVyaSkgJiYgSXMuaW50ZWdlcihjYW5kaWRhdGUudmVyc2lvbik7XG4gICAgfVxuICAgIFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIuaXMgPSBpcztcbn0pKFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgfHwgKFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgPSB7fSkpO1xuLyoqXG4gKiBUaGUgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcn0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuKGZ1bmN0aW9uIChPcHRpb25hbFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciBsaXRlcmFsLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIGRvY3VtZW50J3MgdXJpLlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBkb2N1bWVudCdzIHZlcnNpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4geyB1cmksIHZlcnNpb24gfTtcbiAgICB9XG4gICAgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcn0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLmRlZmluZWQoY2FuZGlkYXRlKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLnVyaSkgJiYgKGNhbmRpZGF0ZS52ZXJzaW9uID09PSBudWxsIHx8IElzLmludGVnZXIoY2FuZGlkYXRlLnZlcnNpb24pKTtcbiAgICB9XG4gICAgT3B0aW9uYWxWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyLmlzID0gaXM7XG59KShPcHRpb25hbFZlcnNpb25lZFRleHREb2N1bWVudElkZW50aWZpZXIgfHwgKE9wdGlvbmFsVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciA9IHt9KSk7XG4vKipcbiAqIFRoZSBUZXh0RG9jdW1lbnRJdGVtIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFRleHREb2N1bWVudEl0ZW19IGxpdGVyYWxzLlxuICovXG5leHBvcnQgdmFyIFRleHREb2N1bWVudEl0ZW07XG4oZnVuY3Rpb24gKFRleHREb2N1bWVudEl0ZW0pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFRleHREb2N1bWVudEl0ZW0gbGl0ZXJhbC5cbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VJZCBUaGUgZG9jdW1lbnQncyBsYW5ndWFnZSBpZGVudGlmaWVyLlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBkb2N1bWVudCdzIHZlcnNpb24gbnVtYmVyLlxuICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBkb2N1bWVudCdzIHRleHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSwgbGFuZ3VhZ2VJZCwgdmVyc2lvbiwgdGV4dCkge1xuICAgICAgICByZXR1cm4geyB1cmksIGxhbmd1YWdlSWQsIHZlcnNpb24sIHRleHQgfTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50SXRlbS5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBUZXh0RG9jdW1lbnRJdGVtfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudXJpKSAmJiBJcy5zdHJpbmcoY2FuZGlkYXRlLmxhbmd1YWdlSWQpICYmIElzLmludGVnZXIoY2FuZGlkYXRlLnZlcnNpb24pICYmIElzLnN0cmluZyhjYW5kaWRhdGUudGV4dCk7XG4gICAgfVxuICAgIFRleHREb2N1bWVudEl0ZW0uaXMgPSBpcztcbn0pKFRleHREb2N1bWVudEl0ZW0gfHwgKFRleHREb2N1bWVudEl0ZW0gPSB7fSkpO1xuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgdHlwZSB0aGF0IGEgY2xpZW50IHN1cHBvcnRzIGluIHZhcmlvdXNcbiAqIHJlc3VsdCBsaXRlcmFscyBsaWtlIGBIb3ZlcmAsIGBQYXJhbWV0ZXJJbmZvYCBvciBgQ29tcGxldGlvbkl0ZW1gLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgYE1hcmt1cEtpbmRzYCBtdXN0IG5vdCBzdGFydCB3aXRoIGEgYCRgLiBUaGlzIGtpbmRzXG4gKiBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlLlxuICovXG5leHBvcnQgdmFyIE1hcmt1cEtpbmQ7XG4oZnVuY3Rpb24gKE1hcmt1cEtpbmQpIHtcbiAgICAvKipcbiAgICAgKiBQbGFpbiB0ZXh0IGlzIHN1cHBvcnRlZCBhcyBhIGNvbnRlbnQgZm9ybWF0XG4gICAgICovXG4gICAgTWFya3VwS2luZC5QbGFpblRleHQgPSAncGxhaW50ZXh0JztcbiAgICAvKipcbiAgICAgKiBNYXJrZG93biBpcyBzdXBwb3J0ZWQgYXMgYSBjb250ZW50IGZvcm1hdFxuICAgICAqL1xuICAgIE1hcmt1cEtpbmQuTWFya2Rvd24gPSAnbWFya2Rvd24nO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHZhbHVlIG9mIHRoZSB7QGxpbmsgTWFya3VwS2luZH0gdHlwZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSA9PT0gTWFya3VwS2luZC5QbGFpblRleHQgfHwgY2FuZGlkYXRlID09PSBNYXJrdXBLaW5kLk1hcmtkb3duO1xuICAgIH1cbiAgICBNYXJrdXBLaW5kLmlzID0gaXM7XG59KShNYXJrdXBLaW5kIHx8IChNYXJrdXBLaW5kID0ge30pKTtcbmV4cG9ydCB2YXIgTWFya3VwQ29udGVudDtcbihmdW5jdGlvbiAoTWFya3VwQ29udGVudCkge1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBjb25mb3JtcyB0byB0aGUge0BsaW5rIE1hcmt1cENvbnRlbnR9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwodmFsdWUpICYmIE1hcmt1cEtpbmQuaXMoY2FuZGlkYXRlLmtpbmQpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudmFsdWUpO1xuICAgIH1cbiAgICBNYXJrdXBDb250ZW50LmlzID0gaXM7XG59KShNYXJrdXBDb250ZW50IHx8IChNYXJrdXBDb250ZW50ID0ge30pKTtcbi8qKlxuICogVGhlIGtpbmQgb2YgYSBjb21wbGV0aW9uIGVudHJ5LlxuICovXG5leHBvcnQgdmFyIENvbXBsZXRpb25JdGVtS2luZDtcbihmdW5jdGlvbiAoQ29tcGxldGlvbkl0ZW1LaW5kKSB7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLlRleHQgPSAxO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5NZXRob2QgPSAyO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5GdW5jdGlvbiA9IDM7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLkNvbnN0cnVjdG9yID0gNDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuRmllbGQgPSA1O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5WYXJpYWJsZSA9IDY7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLkNsYXNzID0gNztcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuSW50ZXJmYWNlID0gODtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuTW9kdWxlID0gOTtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuUHJvcGVydHkgPSAxMDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuVW5pdCA9IDExO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5WYWx1ZSA9IDEyO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5FbnVtID0gMTM7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLktleXdvcmQgPSAxNDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuU25pcHBldCA9IDE1O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5Db2xvciA9IDE2O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5GaWxlID0gMTc7XG4gICAgQ29tcGxldGlvbkl0ZW1LaW5kLlJlZmVyZW5jZSA9IDE4O1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5Gb2xkZXIgPSAxOTtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuRW51bU1lbWJlciA9IDIwO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5Db25zdGFudCA9IDIxO1xuICAgIENvbXBsZXRpb25JdGVtS2luZC5TdHJ1Y3QgPSAyMjtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuRXZlbnQgPSAyMztcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuT3BlcmF0b3IgPSAyNDtcbiAgICBDb21wbGV0aW9uSXRlbUtpbmQuVHlwZVBhcmFtZXRlciA9IDI1O1xufSkoQ29tcGxldGlvbkl0ZW1LaW5kIHx8IChDb21wbGV0aW9uSXRlbUtpbmQgPSB7fSkpO1xuLyoqXG4gKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGluc2VydCB0ZXh0IGluIGEgY29tcGxldGlvbiBpdGVtIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhc1xuICogcGxhaW4gdGV4dCBvciBhIHNuaXBwZXQuXG4gKi9cbmV4cG9ydCB2YXIgSW5zZXJ0VGV4dEZvcm1hdDtcbihmdW5jdGlvbiAoSW5zZXJ0VGV4dEZvcm1hdCkge1xuICAgIC8qKlxuICAgICAqIFRoZSBwcmltYXJ5IHRleHQgdG8gYmUgaW5zZXJ0ZWQgaXMgdHJlYXRlZCBhcyBhIHBsYWluIHN0cmluZy5cbiAgICAgKi9cbiAgICBJbnNlcnRUZXh0Rm9ybWF0LlBsYWluVGV4dCA9IDE7XG4gICAgLyoqXG4gICAgICogVGhlIHByaW1hcnkgdGV4dCB0byBiZSBpbnNlcnRlZCBpcyB0cmVhdGVkIGFzIGEgc25pcHBldC5cbiAgICAgKlxuICAgICAqIEEgc25pcHBldCBjYW4gZGVmaW5lIHRhYiBzdG9wcyBhbmQgcGxhY2Vob2xkZXJzIHdpdGggYCQxYCwgYCQyYFxuICAgICAqIGFuZCBgJHszOmZvb31gLiBgJDBgIGRlZmluZXMgdGhlIGZpbmFsIHRhYiBzdG9wLCBpdCBkZWZhdWx0cyB0b1xuICAgICAqIHRoZSBlbmQgb2YgdGhlIHNuaXBwZXQuIFBsYWNlaG9sZGVycyB3aXRoIGVxdWFsIGlkZW50aWZpZXJzIGFyZSBsaW5rZWQsXG4gICAgICogdGhhdCBpcyB0eXBpbmcgaW4gb25lIHdpbGwgdXBkYXRlIG90aGVycyB0b28uXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbzogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3NuaXBwZXRfc3ludGF4XG4gICAgICovXG4gICAgSW5zZXJ0VGV4dEZvcm1hdC5TbmlwcGV0ID0gMjtcbn0pKEluc2VydFRleHRGb3JtYXQgfHwgKEluc2VydFRleHRGb3JtYXQgPSB7fSkpO1xuLyoqXG4gKiBDb21wbGV0aW9uIGl0ZW0gdGFncyBhcmUgZXh0cmEgYW5ub3RhdGlvbnMgdGhhdCB0d2VhayB0aGUgcmVuZGVyaW5nIG9mIGEgY29tcGxldGlvblxuICogaXRlbS5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCB2YXIgQ29tcGxldGlvbkl0ZW1UYWc7XG4oZnVuY3Rpb24gKENvbXBsZXRpb25JdGVtVGFnKSB7XG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgY29tcGxldGlvbiBhcyBvYnNvbGV0ZSwgdXN1YWxseSB1c2luZyBhIHN0cmlrZS1vdXQuXG4gICAgICovXG4gICAgQ29tcGxldGlvbkl0ZW1UYWcuRGVwcmVjYXRlZCA9IDE7XG59KShDb21wbGV0aW9uSXRlbVRhZyB8fCAoQ29tcGxldGlvbkl0ZW1UYWcgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5zZXJ0UmVwbGFjZUVkaXQgbmFtZXNwYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggaW5zZXJ0IC8gcmVwbGFjZSBlZGl0cy5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCB2YXIgSW5zZXJ0UmVwbGFjZUVkaXQ7XG4oZnVuY3Rpb24gKEluc2VydFJlcGxhY2VFZGl0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnNlcnQgLyByZXBsYWNlIGVkaXRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobmV3VGV4dCwgaW5zZXJ0LCByZXBsYWNlKSB7XG4gICAgICAgIHJldHVybiB7IG5ld1RleHQsIGluc2VydCwgcmVwbGFjZSB9O1xuICAgIH1cbiAgICBJbnNlcnRSZXBsYWNlRWRpdC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGxpdGVyYWwgY29uZm9ybXMgdG8gdGhlIHtAbGluayBJbnNlcnRSZXBsYWNlRWRpdH0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICYmIElzLnN0cmluZyhjYW5kaWRhdGUubmV3VGV4dCkgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLmluc2VydCkgJiYgUmFuZ2UuaXMoY2FuZGlkYXRlLnJlcGxhY2UpO1xuICAgIH1cbiAgICBJbnNlcnRSZXBsYWNlRWRpdC5pcyA9IGlzO1xufSkoSW5zZXJ0UmVwbGFjZUVkaXQgfHwgKEluc2VydFJlcGxhY2VFZGl0ID0ge30pKTtcbi8qKlxuICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAqIGl0ZW0gaW5zZXJ0aW9uLlxuICpcbiAqIEBzaW5jZSAzLjE2LjBcbiAqL1xuZXhwb3J0IHZhciBJbnNlcnRUZXh0TW9kZTtcbihmdW5jdGlvbiAoSW5zZXJ0VGV4dE1vZGUpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zZXJ0aW9uIG9yIHJlcGxhY2Ugc3RyaW5ncyBpcyB0YWtlbiBhcyBpdCBpcy4gSWYgdGhlXG4gICAgICogdmFsdWUgaXMgbXVsdGkgbGluZSB0aGUgbGluZXMgYmVsb3cgdGhlIGN1cnNvciB3aWxsIGJlXG4gICAgICogaW5zZXJ0ZWQgdXNpbmcgdGhlIGluZGVudGF0aW9uIGRlZmluZWQgaW4gdGhlIHN0cmluZyB2YWx1ZS5cbiAgICAgKiBUaGUgY2xpZW50IHdpbGwgbm90IGFwcGx5IGFueSBraW5kIG9mIGFkanVzdG1lbnRzIHRvIHRoZVxuICAgICAqIHN0cmluZy5cbiAgICAgKi9cbiAgICBJbnNlcnRUZXh0TW9kZS5hc0lzID0gMTtcbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdG9yIGFkanVzdHMgbGVhZGluZyB3aGl0ZXNwYWNlIG9mIG5ldyBsaW5lcyBzbyB0aGF0XG4gICAgICogdGhleSBtYXRjaCB0aGUgaW5kZW50YXRpb24gdXAgdG8gdGhlIGN1cnNvciBvZiB0aGUgbGluZSBmb3JcbiAgICAgKiB3aGljaCB0aGUgaXRlbSBpcyBhY2NlcHRlZC5cbiAgICAgKlxuICAgICAqIENvbnNpZGVyIGEgbGluZSBsaWtlIHRoaXM6IDwydGFicz48Y3Vyc29yPjwzdGFicz5mb28uIEFjY2VwdGluZyBhXG4gICAgICogbXVsdGkgbGluZSBjb21wbGV0aW9uIGl0ZW0gaXMgaW5kZW50ZWQgdXNpbmcgMiB0YWJzIGFuZCBhbGxcbiAgICAgKiBmb2xsb3dpbmcgbGluZXMgaW5zZXJ0ZWQgd2lsbCBiZSBpbmRlbnRlZCB1c2luZyAyIHRhYnMgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBJbnNlcnRUZXh0TW9kZS5hZGp1c3RJbmRlbnRhdGlvbiA9IDI7XG59KShJbnNlcnRUZXh0TW9kZSB8fCAoSW5zZXJ0VGV4dE1vZGUgPSB7fSkpO1xuZXhwb3J0IHZhciBDb21wbGV0aW9uSXRlbUxhYmVsRGV0YWlscztcbihmdW5jdGlvbiAoQ29tcGxldGlvbkl0ZW1MYWJlbERldGFpbHMpIHtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiAoSXMuc3RyaW5nKGNhbmRpZGF0ZS5kZXRhaWwpIHx8IGNhbmRpZGF0ZS5kZXRhaWwgPT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIChJcy5zdHJpbmcoY2FuZGlkYXRlLmRlc2NyaXB0aW9uKSB8fCBjYW5kaWRhdGUuZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIENvbXBsZXRpb25JdGVtTGFiZWxEZXRhaWxzLmlzID0gaXM7XG59KShDb21wbGV0aW9uSXRlbUxhYmVsRGV0YWlscyB8fCAoQ29tcGxldGlvbkl0ZW1MYWJlbERldGFpbHMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgQ29tcGxldGlvbkl0ZW0gbmFtZXNwYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGhcbiAqIGNvbXBsZXRpb24gaXRlbXMuXG4gKi9cbmV4cG9ydCB2YXIgQ29tcGxldGlvbkl0ZW07XG4oZnVuY3Rpb24gKENvbXBsZXRpb25JdGVtKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgY29tcGxldGlvbiBpdGVtIGFuZCBzZWVkIGl0IHdpdGggYSBsYWJlbC5cbiAgICAgKiBAcGFyYW0gbGFiZWwgVGhlIGNvbXBsZXRpb24gaXRlbSdzIGxhYmVsXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7IGxhYmVsIH07XG4gICAgfVxuICAgIENvbXBsZXRpb25JdGVtLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKENvbXBsZXRpb25JdGVtIHx8IChDb21wbGV0aW9uSXRlbSA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb21wbGV0aW9uTGlzdCBuYW1lc3BhY2UgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aFxuICogY29tcGxldGlvbiBsaXN0cy5cbiAqL1xuZXhwb3J0IHZhciBDb21wbGV0aW9uTGlzdDtcbihmdW5jdGlvbiAoQ29tcGxldGlvbkxpc3QpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbXBsZXRpb24gbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyBUaGUgY29tcGxldGlvbiBpdGVtcy5cbiAgICAgKiBAcGFyYW0gaXNJbmNvbXBsZXRlIFRoZSBsaXN0IGlzIG5vdCBjb21wbGV0ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoaXRlbXMsIGlzSW5jb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4geyBpdGVtczogaXRlbXMgPyBpdGVtcyA6IFtdLCBpc0luY29tcGxldGU6ICEhaXNJbmNvbXBsZXRlIH07XG4gICAgfVxuICAgIENvbXBsZXRpb25MaXN0LmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKENvbXBsZXRpb25MaXN0IHx8IChDb21wbGV0aW9uTGlzdCA9IHt9KSk7XG5leHBvcnQgdmFyIE1hcmtlZFN0cmluZztcbihmdW5jdGlvbiAoTWFya2VkU3RyaW5nKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG1hcmtlZCBzdHJpbmcgZnJvbSBwbGFpbiB0ZXh0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBsYWluVGV4dCBUaGUgcGxhaW4gdGV4dC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tUGxhaW5UZXh0KHBsYWluVGV4dCkge1xuICAgICAgICByZXR1cm4gcGxhaW5UZXh0LnJlcGxhY2UoL1tcXFxcYCpfe31bXFxdKCkjK1xcLS4hXS9nLCAnXFxcXCQmJyk7IC8vIGVzY2FwZSBtYXJrZG93biBzeW50YXggdG9rZW5zOiBodHRwOi8vZGFyaW5nZmlyZWJhbGwubmV0L3Byb2plY3RzL21hcmtkb3duL3N5bnRheCNiYWNrc2xhc2hcbiAgICB9XG4gICAgTWFya2VkU3RyaW5nLmZyb21QbGFpblRleHQgPSBmcm9tUGxhaW5UZXh0O1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBjb25mb3JtcyB0byB0aGUge0BsaW5rIE1hcmtlZFN0cmluZ30gdHlwZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLnN0cmluZyhjYW5kaWRhdGUpIHx8IChJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5sYW5ndWFnZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS52YWx1ZSkpO1xuICAgIH1cbiAgICBNYXJrZWRTdHJpbmcuaXMgPSBpcztcbn0pKE1hcmtlZFN0cmluZyB8fCAoTWFya2VkU3RyaW5nID0ge30pKTtcbmV4cG9ydCB2YXIgSG92ZXI7XG4oZnVuY3Rpb24gKEhvdmVyKSB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgSG92ZXJ9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiAhIWNhbmRpZGF0ZSAmJiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSkgJiYgKE1hcmt1cENvbnRlbnQuaXMoY2FuZGlkYXRlLmNvbnRlbnRzKSB8fFxuICAgICAgICAgICAgTWFya2VkU3RyaW5nLmlzKGNhbmRpZGF0ZS5jb250ZW50cykgfHxcbiAgICAgICAgICAgIElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLmNvbnRlbnRzLCBNYXJrZWRTdHJpbmcuaXMpKSAmJiAodmFsdWUucmFuZ2UgPT09IHVuZGVmaW5lZCB8fCBSYW5nZS5pcyh2YWx1ZS5yYW5nZSkpO1xuICAgIH1cbiAgICBIb3Zlci5pcyA9IGlzO1xufSkoSG92ZXIgfHwgKEhvdmVyID0ge30pKTtcbi8qKlxuICogVGhlIFBhcmFtZXRlckluZm9ybWF0aW9uIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIFBhcmFtZXRlckluZm9ybWF0aW9ufSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBQYXJhbWV0ZXJJbmZvcm1hdGlvbjtcbihmdW5jdGlvbiAoUGFyYW1ldGVySW5mb3JtYXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHBhcmFtZXRlciBpbmZvcm1hdGlvbiBsaXRlcmFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhYmVsIEEgbGFiZWwgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBkb2N1bWVudGF0aW9uIEEgZG9jIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobGFiZWwsIGRvY3VtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50YXRpb24gPyB7IGxhYmVsLCBkb2N1bWVudGF0aW9uIH0gOiB7IGxhYmVsIH07XG4gICAgfVxuICAgIFBhcmFtZXRlckluZm9ybWF0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKFBhcmFtZXRlckluZm9ybWF0aW9uIHx8IChQYXJhbWV0ZXJJbmZvcm1hdGlvbiA9IHt9KSk7XG4vKipcbiAqIFRoZSBTaWduYXR1cmVJbmZvcm1hdGlvbiBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBTaWduYXR1cmVJbmZvcm1hdGlvbn0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgU2lnbmF0dXJlSW5mb3JtYXRpb247XG4oZnVuY3Rpb24gKFNpZ25hdHVyZUluZm9ybWF0aW9uKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKGxhYmVsLCBkb2N1bWVudGF0aW9uLCAuLi5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7IGxhYmVsIH07XG4gICAgICAgIGlmIChJcy5kZWZpbmVkKGRvY3VtZW50YXRpb24pKSB7XG4gICAgICAgICAgICByZXN1bHQuZG9jdW1lbnRhdGlvbiA9IGRvY3VtZW50YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElzLmRlZmluZWQocGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24uY3JlYXRlID0gY3JlYXRlO1xufSkoU2lnbmF0dXJlSW5mb3JtYXRpb24gfHwgKFNpZ25hdHVyZUluZm9ybWF0aW9uID0ge30pKTtcbi8qKlxuICogQSBkb2N1bWVudCBoaWdobGlnaHQga2luZC5cbiAqL1xuZXhwb3J0IHZhciBEb2N1bWVudEhpZ2hsaWdodEtpbmQ7XG4oZnVuY3Rpb24gKERvY3VtZW50SGlnaGxpZ2h0S2luZCkge1xuICAgIC8qKlxuICAgICAqIEEgdGV4dHVhbCBvY2N1cnJlbmNlLlxuICAgICAqL1xuICAgIERvY3VtZW50SGlnaGxpZ2h0S2luZC5UZXh0ID0gMTtcbiAgICAvKipcbiAgICAgKiBSZWFkLWFjY2VzcyBvZiBhIHN5bWJvbCwgbGlrZSByZWFkaW5nIGEgdmFyaWFibGUuXG4gICAgICovXG4gICAgRG9jdW1lbnRIaWdobGlnaHRLaW5kLlJlYWQgPSAyO1xuICAgIC8qKlxuICAgICAqIFdyaXRlLWFjY2VzcyBvZiBhIHN5bWJvbCwgbGlrZSB3cml0aW5nIHRvIGEgdmFyaWFibGUuXG4gICAgICovXG4gICAgRG9jdW1lbnRIaWdobGlnaHRLaW5kLldyaXRlID0gMztcbn0pKERvY3VtZW50SGlnaGxpZ2h0S2luZCB8fCAoRG9jdW1lbnRIaWdobGlnaHRLaW5kID0ge30pKTtcbi8qKlxuICogRG9jdW1lbnRIaWdobGlnaHQgbmFtZXNwYWNlIHRvIHByb3ZpZGUgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBEb2N1bWVudEhpZ2hsaWdodH0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgRG9jdW1lbnRIaWdobGlnaHQ7XG4oZnVuY3Rpb24gKERvY3VtZW50SGlnaGxpZ2h0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgRG9jdW1lbnRIaWdobGlnaHQgb2JqZWN0LlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2UgdGhlIGhpZ2hsaWdodCBhcHBsaWVzIHRvLlxuICAgICAqIEBwYXJhbSBraW5kIFRoZSBoaWdobGlnaHQga2luZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwga2luZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0geyByYW5nZSB9O1xuICAgICAgICBpZiAoSXMubnVtYmVyKGtpbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQua2luZCA9IGtpbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRG9jdW1lbnRIaWdobGlnaHQuY3JlYXRlID0gY3JlYXRlO1xufSkoRG9jdW1lbnRIaWdobGlnaHQgfHwgKERvY3VtZW50SGlnaGxpZ2h0ID0ge30pKTtcbi8qKlxuICogQSBzeW1ib2wga2luZC5cbiAqL1xuZXhwb3J0IHZhciBTeW1ib2xLaW5kO1xuKGZ1bmN0aW9uIChTeW1ib2xLaW5kKSB7XG4gICAgU3ltYm9sS2luZC5GaWxlID0gMTtcbiAgICBTeW1ib2xLaW5kLk1vZHVsZSA9IDI7XG4gICAgU3ltYm9sS2luZC5OYW1lc3BhY2UgPSAzO1xuICAgIFN5bWJvbEtpbmQuUGFja2FnZSA9IDQ7XG4gICAgU3ltYm9sS2luZC5DbGFzcyA9IDU7XG4gICAgU3ltYm9sS2luZC5NZXRob2QgPSA2O1xuICAgIFN5bWJvbEtpbmQuUHJvcGVydHkgPSA3O1xuICAgIFN5bWJvbEtpbmQuRmllbGQgPSA4O1xuICAgIFN5bWJvbEtpbmQuQ29uc3RydWN0b3IgPSA5O1xuICAgIFN5bWJvbEtpbmQuRW51bSA9IDEwO1xuICAgIFN5bWJvbEtpbmQuSW50ZXJmYWNlID0gMTE7XG4gICAgU3ltYm9sS2luZC5GdW5jdGlvbiA9IDEyO1xuICAgIFN5bWJvbEtpbmQuVmFyaWFibGUgPSAxMztcbiAgICBTeW1ib2xLaW5kLkNvbnN0YW50ID0gMTQ7XG4gICAgU3ltYm9sS2luZC5TdHJpbmcgPSAxNTtcbiAgICBTeW1ib2xLaW5kLk51bWJlciA9IDE2O1xuICAgIFN5bWJvbEtpbmQuQm9vbGVhbiA9IDE3O1xuICAgIFN5bWJvbEtpbmQuQXJyYXkgPSAxODtcbiAgICBTeW1ib2xLaW5kLk9iamVjdCA9IDE5O1xuICAgIFN5bWJvbEtpbmQuS2V5ID0gMjA7XG4gICAgU3ltYm9sS2luZC5OdWxsID0gMjE7XG4gICAgU3ltYm9sS2luZC5FbnVtTWVtYmVyID0gMjI7XG4gICAgU3ltYm9sS2luZC5TdHJ1Y3QgPSAyMztcbiAgICBTeW1ib2xLaW5kLkV2ZW50ID0gMjQ7XG4gICAgU3ltYm9sS2luZC5PcGVyYXRvciA9IDI1O1xuICAgIFN5bWJvbEtpbmQuVHlwZVBhcmFtZXRlciA9IDI2O1xufSkoU3ltYm9sS2luZCB8fCAoU3ltYm9sS2luZCA9IHt9KSk7XG4vKipcbiAqIFN5bWJvbCB0YWdzIGFyZSBleHRyYSBhbm5vdGF0aW9ucyB0aGF0IHR3ZWFrIHRoZSByZW5kZXJpbmcgb2YgYSBzeW1ib2wuXG4gKlxuICogQHNpbmNlIDMuMTZcbiAqL1xuZXhwb3J0IHZhciBTeW1ib2xUYWc7XG4oZnVuY3Rpb24gKFN5bWJvbFRhZykge1xuICAgIC8qKlxuICAgICAqIFJlbmRlciBhIHN5bWJvbCBhcyBvYnNvbGV0ZSwgdXN1YWxseSB1c2luZyBhIHN0cmlrZS1vdXQuXG4gICAgICovXG4gICAgU3ltYm9sVGFnLkRlcHJlY2F0ZWQgPSAxO1xufSkoU3ltYm9sVGFnIHx8IChTeW1ib2xUYWcgPSB7fSkpO1xuZXhwb3J0IHZhciBTeW1ib2xJbmZvcm1hdGlvbjtcbihmdW5jdGlvbiAoU3ltYm9sSW5mb3JtYXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHN5bWJvbCBpbmZvcm1hdGlvbiBsaXRlcmFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0ga2luZCBUaGUga2luZCBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2Ugb2YgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIHVyaSBUaGUgcmVzb3VyY2Ugb2YgdGhlIGxvY2F0aW9uIG9mIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0gY29udGFpbmVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sIGNvbnRhaW5pbmcgdGhlIHN5bWJvbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobmFtZSwga2luZCwgcmFuZ2UsIHVyaSwgY29udGFpbmVyTmFtZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICBsb2NhdGlvbjogeyB1cmksIHJhbmdlIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbnRhaW5lck5hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5jb250YWluZXJOYW1lID0gY29udGFpbmVyTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBTeW1ib2xJbmZvcm1hdGlvbi5jcmVhdGUgPSBjcmVhdGU7XG59KShTeW1ib2xJbmZvcm1hdGlvbiB8fCAoU3ltYm9sSW5mb3JtYXRpb24gPSB7fSkpO1xuZXhwb3J0IHZhciBXb3Jrc3BhY2VTeW1ib2w7XG4oZnVuY3Rpb24gKFdvcmtzcGFjZVN5bWJvbCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyB3b3Jrc3BhY2Ugc3ltYm9sLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0ga2luZCBUaGUga2luZCBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIHJlc291cmNlIG9mIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSByYW5nZSBBbiBvcHRpb25zIHJhbmdlIG9mIHRoZSBsb2NhdGlvbi5cbiAgICAgKiBAcmV0dXJucyBBIFdvcmtzcGFjZVN5bWJvbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUobmFtZSwga2luZCwgdXJpLCByYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7IG5hbWUsIGtpbmQsIGxvY2F0aW9uOiB7IHVyaSwgcmFuZ2UgfSB9XG4gICAgICAgICAgICA6IHsgbmFtZSwga2luZCwgbG9jYXRpb246IHsgdXJpIH0gfTtcbiAgICB9XG4gICAgV29ya3NwYWNlU3ltYm9sLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKFdvcmtzcGFjZVN5bWJvbCB8fCAoV29ya3NwYWNlU3ltYm9sID0ge30pKTtcbmV4cG9ydCB2YXIgRG9jdW1lbnRTeW1ib2w7XG4oZnVuY3Rpb24gKERvY3VtZW50U3ltYm9sKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzeW1ib2wgaW5mb3JtYXRpb24gbGl0ZXJhbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIGRldGFpbCBUaGUgZGV0YWlsIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIGtpbmQgVGhlIGtpbmQgb2YgdGhlIHN5bWJvbC5cbiAgICAgKiBAcGFyYW0gcmFuZ2UgVGhlIHJhbmdlIG9mIHRoZSBzeW1ib2wuXG4gICAgICogQHBhcmFtIHNlbGVjdGlvblJhbmdlIFRoZSBzZWxlY3Rpb25SYW5nZSBvZiB0aGUgc3ltYm9sLlxuICAgICAqIEBwYXJhbSBjaGlsZHJlbiBDaGlsZHJlbiBvZiB0aGUgc3ltYm9sLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShuYW1lLCBkZXRhaWwsIGtpbmQsIHJhbmdlLCBzZWxlY3Rpb25SYW5nZSwgY2hpbGRyZW4pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXRhaWwsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgRG9jdW1lbnRTeW1ib2wuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgRG9jdW1lbnRTeW1ib2x9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiZcbiAgICAgICAgICAgIElzLnN0cmluZyhjYW5kaWRhdGUubmFtZSkgJiYgSXMubnVtYmVyKGNhbmRpZGF0ZS5raW5kKSAmJlxuICAgICAgICAgICAgUmFuZ2UuaXMoY2FuZGlkYXRlLnJhbmdlKSAmJiBSYW5nZS5pcyhjYW5kaWRhdGUuc2VsZWN0aW9uUmFuZ2UpICYmXG4gICAgICAgICAgICAoY2FuZGlkYXRlLmRldGFpbCA9PT0gdW5kZWZpbmVkIHx8IElzLnN0cmluZyhjYW5kaWRhdGUuZGV0YWlsKSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuZGVwcmVjYXRlZCA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLmRlcHJlY2F0ZWQpKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmNoaWxkcmVuKSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUudGFncyA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnRhZ3MpKTtcbiAgICB9XG4gICAgRG9jdW1lbnRTeW1ib2wuaXMgPSBpcztcbn0pKERvY3VtZW50U3ltYm9sIHx8IChEb2N1bWVudFN5bWJvbCA9IHt9KSk7XG4vKipcbiAqIEEgc2V0IG9mIHByZWRlZmluZWQgY29kZSBhY3Rpb24ga2luZHNcbiAqL1xuZXhwb3J0IHZhciBDb2RlQWN0aW9uS2luZDtcbihmdW5jdGlvbiAoQ29kZUFjdGlvbktpbmQpIHtcbiAgICAvKipcbiAgICAgKiBFbXB0eSBraW5kLlxuICAgICAqL1xuICAgIENvZGVBY3Rpb25LaW5kLkVtcHR5ID0gJyc7XG4gICAgLyoqXG4gICAgICogQmFzZSBraW5kIGZvciBxdWlja2ZpeCBhY3Rpb25zOiAncXVpY2tmaXgnXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuUXVpY2tGaXggPSAncXVpY2tmaXgnO1xuICAgIC8qKlxuICAgICAqIEJhc2Uga2luZCBmb3IgcmVmYWN0b3JpbmcgYWN0aW9uczogJ3JlZmFjdG9yJ1xuICAgICAqL1xuICAgIENvZGVBY3Rpb25LaW5kLlJlZmFjdG9yID0gJ3JlZmFjdG9yJztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIGV4dHJhY3Rpb24gYWN0aW9uczogJ3JlZmFjdG9yLmV4dHJhY3QnXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIGV4dHJhY3QgYWN0aW9uczpcbiAgICAgKlxuICAgICAqIC0gRXh0cmFjdCBtZXRob2RcbiAgICAgKiAtIEV4dHJhY3QgZnVuY3Rpb25cbiAgICAgKiAtIEV4dHJhY3QgdmFyaWFibGVcbiAgICAgKiAtIEV4dHJhY3QgaW50ZXJmYWNlIGZyb20gY2xhc3NcbiAgICAgKiAtIC4uLlxuICAgICAqL1xuICAgIENvZGVBY3Rpb25LaW5kLlJlZmFjdG9yRXh0cmFjdCA9ICdyZWZhY3Rvci5leHRyYWN0JztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIGlubGluZSBhY3Rpb25zOiAncmVmYWN0b3IuaW5saW5lJ1xuICAgICAqXG4gICAgICogRXhhbXBsZSBpbmxpbmUgYWN0aW9uczpcbiAgICAgKlxuICAgICAqIC0gSW5saW5lIGZ1bmN0aW9uXG4gICAgICogLSBJbmxpbmUgdmFyaWFibGVcbiAgICAgKiAtIElubGluZSBjb25zdGFudFxuICAgICAqIC0gLi4uXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuUmVmYWN0b3JJbmxpbmUgPSAncmVmYWN0b3IuaW5saW5lJztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIHJld3JpdGUgYWN0aW9uczogJ3JlZmFjdG9yLnJld3JpdGUnXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIHJld3JpdGUgYWN0aW9uczpcbiAgICAgKlxuICAgICAqIC0gQ29udmVydCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHRvIGNsYXNzXG4gICAgICogLSBBZGQgb3IgcmVtb3ZlIHBhcmFtZXRlclxuICAgICAqIC0gRW5jYXBzdWxhdGUgZmllbGRcbiAgICAgKiAtIE1ha2UgbWV0aG9kIHN0YXRpY1xuICAgICAqIC0gTW92ZSBtZXRob2QgdG8gYmFzZSBjbGFzc1xuICAgICAqIC0gLi4uXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuUmVmYWN0b3JSZXdyaXRlID0gJ3JlZmFjdG9yLnJld3JpdGUnO1xuICAgIC8qKlxuICAgICAqIEJhc2Uga2luZCBmb3Igc291cmNlIGFjdGlvbnM6IGBzb3VyY2VgXG4gICAgICpcbiAgICAgKiBTb3VyY2UgY29kZSBhY3Rpb25zIGFwcGx5IHRvIHRoZSBlbnRpcmUgZmlsZS5cbiAgICAgKi9cbiAgICBDb2RlQWN0aW9uS2luZC5Tb3VyY2UgPSAnc291cmNlJztcbiAgICAvKipcbiAgICAgKiBCYXNlIGtpbmQgZm9yIGFuIG9yZ2FuaXplIGltcG9ydHMgc291cmNlIGFjdGlvbjogYHNvdXJjZS5vcmdhbml6ZUltcG9ydHNgXG4gICAgICovXG4gICAgQ29kZUFjdGlvbktpbmQuU291cmNlT3JnYW5pemVJbXBvcnRzID0gJ3NvdXJjZS5vcmdhbml6ZUltcG9ydHMnO1xuICAgIC8qKlxuICAgICAqIEJhc2Uga2luZCBmb3IgYXV0by1maXggc291cmNlIGFjdGlvbnM6IGBzb3VyY2UuZml4QWxsYC5cbiAgICAgKlxuICAgICAqIEZpeCBhbGwgYWN0aW9ucyBhdXRvbWF0aWNhbGx5IGZpeCBlcnJvcnMgdGhhdCBoYXZlIGEgY2xlYXIgZml4IHRoYXQgZG8gbm90IHJlcXVpcmUgdXNlciBpbnB1dC5cbiAgICAgKiBUaGV5IHNob3VsZCBub3Qgc3VwcHJlc3MgZXJyb3JzIG9yIHBlcmZvcm0gdW5zYWZlIGZpeGVzIHN1Y2ggYXMgZ2VuZXJhdGluZyBuZXcgdHlwZXMgb3IgY2xhc3Nlcy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICBDb2RlQWN0aW9uS2luZC5Tb3VyY2VGaXhBbGwgPSAnc291cmNlLmZpeEFsbCc7XG59KShDb2RlQWN0aW9uS2luZCB8fCAoQ29kZUFjdGlvbktpbmQgPSB7fSkpO1xuLyoqXG4gKiBUaGUgcmVhc29uIHdoeSBjb2RlIGFjdGlvbnMgd2VyZSByZXF1ZXN0ZWQuXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgdmFyIENvZGVBY3Rpb25UcmlnZ2VyS2luZDtcbihmdW5jdGlvbiAoQ29kZUFjdGlvblRyaWdnZXJLaW5kKSB7XG4gICAgLyoqXG4gICAgICogQ29kZSBhY3Rpb25zIHdlcmUgZXhwbGljaXRseSByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgb3IgYnkgYW4gZXh0ZW5zaW9uLlxuICAgICAqL1xuICAgIENvZGVBY3Rpb25UcmlnZ2VyS2luZC5JbnZva2VkID0gMTtcbiAgICAvKipcbiAgICAgKiBDb2RlIGFjdGlvbnMgd2VyZSByZXF1ZXN0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgKlxuICAgICAqIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBjdXJyZW50IHNlbGVjdGlvbiBpbiBhIGZpbGUgY2hhbmdlcywgYnV0IGNhblxuICAgICAqIGFsc28gYmUgdHJpZ2dlcmVkIHdoZW4gZmlsZSBjb250ZW50IGNoYW5nZXMuXG4gICAgICovXG4gICAgQ29kZUFjdGlvblRyaWdnZXJLaW5kLkF1dG9tYXRpYyA9IDI7XG59KShDb2RlQWN0aW9uVHJpZ2dlcktpbmQgfHwgKENvZGVBY3Rpb25UcmlnZ2VyS2luZCA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb2RlQWN0aW9uQ29udGV4dCBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBDb2RlQWN0aW9uQ29udGV4dH0gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgQ29kZUFjdGlvbkNvbnRleHQ7XG4oZnVuY3Rpb24gKENvZGVBY3Rpb25Db250ZXh0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDb2RlQWN0aW9uQ29udGV4dCBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShkaWFnbm9zdGljcywgb25seSwgdHJpZ2dlcktpbmQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgZGlhZ25vc3RpY3MgfTtcbiAgICAgICAgaWYgKG9ubHkgIT09IHVuZGVmaW5lZCAmJiBvbmx5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQub25seSA9IG9ubHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXJLaW5kICE9PSB1bmRlZmluZWQgJiYgdHJpZ2dlcktpbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdC50cmlnZ2VyS2luZCA9IHRyaWdnZXJLaW5kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIENvZGVBY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIENvZGVBY3Rpb25Db250ZXh0fSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLmRpYWdub3N0aWNzLCBEaWFnbm9zdGljLmlzKVxuICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS5vbmx5ID09PSB1bmRlZmluZWQgfHwgSXMudHlwZWRBcnJheShjYW5kaWRhdGUub25seSwgSXMuc3RyaW5nKSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUudHJpZ2dlcktpbmQgPT09IHVuZGVmaW5lZCB8fCBjYW5kaWRhdGUudHJpZ2dlcktpbmQgPT09IENvZGVBY3Rpb25UcmlnZ2VyS2luZC5JbnZva2VkIHx8IGNhbmRpZGF0ZS50cmlnZ2VyS2luZCA9PT0gQ29kZUFjdGlvblRyaWdnZXJLaW5kLkF1dG9tYXRpYyk7XG4gICAgfVxuICAgIENvZGVBY3Rpb25Db250ZXh0LmlzID0gaXM7XG59KShDb2RlQWN0aW9uQ29udGV4dCB8fCAoQ29kZUFjdGlvbkNvbnRleHQgPSB7fSkpO1xuZXhwb3J0IHZhciBDb2RlQWN0aW9uO1xuKGZ1bmN0aW9uIChDb2RlQWN0aW9uKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBraW5kT3JDb21tYW5kT3JFZGl0LCBraW5kKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB7IHRpdGxlIH07XG4gICAgICAgIGxldCBjaGVja0tpbmQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIGtpbmRPckNvbW1hbmRPckVkaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjaGVja0tpbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc3VsdC5raW5kID0ga2luZE9yQ29tbWFuZE9yRWRpdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChDb21tYW5kLmlzKGtpbmRPckNvbW1hbmRPckVkaXQpKSB7XG4gICAgICAgICAgICByZXN1bHQuY29tbWFuZCA9IGtpbmRPckNvbW1hbmRPckVkaXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZWRpdCA9IGtpbmRPckNvbW1hbmRPckVkaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrS2luZCAmJiBraW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5raW5kID0ga2luZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBDb2RlQWN0aW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS50aXRsZSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuZGlhZ25vc3RpY3MgPT09IHVuZGVmaW5lZCB8fCBJcy50eXBlZEFycmF5KGNhbmRpZGF0ZS5kaWFnbm9zdGljcywgRGlhZ25vc3RpYy5pcykpICYmXG4gICAgICAgICAgICAoY2FuZGlkYXRlLmtpbmQgPT09IHVuZGVmaW5lZCB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLmtpbmQpKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5lZGl0ICE9PSB1bmRlZmluZWQgfHwgY2FuZGlkYXRlLmNvbW1hbmQgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuY29tbWFuZCA9PT0gdW5kZWZpbmVkIHx8IENvbW1hbmQuaXMoY2FuZGlkYXRlLmNvbW1hbmQpKSAmJlxuICAgICAgICAgICAgKGNhbmRpZGF0ZS5pc1ByZWZlcnJlZCA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLmlzUHJlZmVycmVkKSkgJiZcbiAgICAgICAgICAgIChjYW5kaWRhdGUuZWRpdCA9PT0gdW5kZWZpbmVkIHx8IFdvcmtzcGFjZUVkaXQuaXMoY2FuZGlkYXRlLmVkaXQpKTtcbiAgICB9XG4gICAgQ29kZUFjdGlvbi5pcyA9IGlzO1xufSkoQ29kZUFjdGlvbiB8fCAoQ29kZUFjdGlvbiA9IHt9KSk7XG4vKipcbiAqIFRoZSBDb2RlTGVucyBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBDb2RlTGVuc30gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgQ29kZUxlbnM7XG4oZnVuY3Rpb24gKENvZGVMZW5zKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBDb2RlTGVucyBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgZGF0YSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0geyByYW5nZSB9O1xuICAgICAgICBpZiAoSXMuZGVmaW5lZChkYXRhKSkge1xuICAgICAgICAgICAgcmVzdWx0LmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIENvZGVMZW5zLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIENvZGVMZW5zfSBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSkgJiYgKElzLnVuZGVmaW5lZChjYW5kaWRhdGUuY29tbWFuZCkgfHwgQ29tbWFuZC5pcyhjYW5kaWRhdGUuY29tbWFuZCkpO1xuICAgIH1cbiAgICBDb2RlTGVucy5pcyA9IGlzO1xufSkoQ29kZUxlbnMgfHwgKENvZGVMZW5zID0ge30pKTtcbi8qKlxuICogVGhlIEZvcm1hdHRpbmdPcHRpb25zIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIEZvcm1hdHRpbmdPcHRpb25zfSBsaXRlcmFscy5cbiAqL1xuZXhwb3J0IHZhciBGb3JtYXR0aW5nT3B0aW9ucztcbihmdW5jdGlvbiAoRm9ybWF0dGluZ09wdGlvbnMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEZvcm1hdHRpbmdPcHRpb25zIGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHRhYlNpemUsIGluc2VydFNwYWNlcykge1xuICAgICAgICByZXR1cm4geyB0YWJTaXplLCBpbnNlcnRTcGFjZXMgfTtcbiAgICB9XG4gICAgRm9ybWF0dGluZ09wdGlvbnMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBsaXRlcmFsIGNvbmZvcm1zIHRvIHRoZSB7QGxpbmsgRm9ybWF0dGluZ09wdGlvbnN9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgSXMudWludGVnZXIoY2FuZGlkYXRlLnRhYlNpemUpICYmIElzLmJvb2xlYW4oY2FuZGlkYXRlLmluc2VydFNwYWNlcyk7XG4gICAgfVxuICAgIEZvcm1hdHRpbmdPcHRpb25zLmlzID0gaXM7XG59KShGb3JtYXR0aW5nT3B0aW9ucyB8fCAoRm9ybWF0dGluZ09wdGlvbnMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgRG9jdW1lbnRMaW5rIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aFxuICoge0BsaW5rIERvY3VtZW50TGlua30gbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgRG9jdW1lbnRMaW5rO1xuKGZ1bmN0aW9uIChEb2N1bWVudExpbmspIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IERvY3VtZW50TGluayBsaXRlcmFsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgdGFyZ2V0LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB7IHJhbmdlLCB0YXJnZXQsIGRhdGEgfTtcbiAgICB9XG4gICAgRG9jdW1lbnRMaW5rLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIERvY3VtZW50TGlua30gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLmRlZmluZWQoY2FuZGlkYXRlKSAmJiBSYW5nZS5pcyhjYW5kaWRhdGUucmFuZ2UpICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLnRhcmdldCkgfHwgSXMuc3RyaW5nKGNhbmRpZGF0ZS50YXJnZXQpKTtcbiAgICB9XG4gICAgRG9jdW1lbnRMaW5rLmlzID0gaXM7XG59KShEb2N1bWVudExpbmsgfHwgKERvY3VtZW50TGluayA9IHt9KSk7XG4vKipcbiAqIFRoZSBTZWxlY3Rpb25SYW5nZSBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aFxuICogU2VsZWN0aW9uUmFuZ2UgbGl0ZXJhbHMuXG4gKi9cbmV4cG9ydCB2YXIgU2VsZWN0aW9uUmFuZ2U7XG4oZnVuY3Rpb24gKFNlbGVjdGlvblJhbmdlKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBTZWxlY3Rpb25SYW5nZVxuICAgICAqIEBwYXJhbSByYW5nZSB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHBhcmVudCBhbiBvcHRpb25hbCBwYXJlbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHJhbmdlLCBwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIHBhcmVudCB9O1xuICAgIH1cbiAgICBTZWxlY3Rpb25SYW5nZS5jcmVhdGUgPSBjcmVhdGU7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSkgJiYgKGNhbmRpZGF0ZS5wYXJlbnQgPT09IHVuZGVmaW5lZCB8fCBTZWxlY3Rpb25SYW5nZS5pcyhjYW5kaWRhdGUucGFyZW50KSk7XG4gICAgfVxuICAgIFNlbGVjdGlvblJhbmdlLmlzID0gaXM7XG59KShTZWxlY3Rpb25SYW5nZSB8fCAoU2VsZWN0aW9uUmFuZ2UgPSB7fSkpO1xuLyoqXG4gKiBBIHNldCBvZiBwcmVkZWZpbmVkIHRva2VuIHR5cGVzLiBUaGlzIHNldCBpcyBub3QgZml4ZWRcbiAqIGFuIGNsaWVudHMgY2FuIHNwZWNpZnkgYWRkaXRpb25hbCB0b2tlbiB0eXBlcyB2aWEgdGhlXG4gKiBjb3JyZXNwb25kaW5nIGNsaWVudCBjYXBhYmlsaXRpZXMuXG4gKlxuICogQHNpbmNlIDMuMTYuMFxuICovXG5leHBvcnQgdmFyIFNlbWFudGljVG9rZW5UeXBlcztcbihmdW5jdGlvbiAoU2VtYW50aWNUb2tlblR5cGVzKSB7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wibmFtZXNwYWNlXCJdID0gXCJuYW1lc3BhY2VcIjtcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyB0eXBlLiBBY3RzIGFzIGEgZmFsbGJhY2sgZm9yIHR5cGVzIHdoaWNoIGNhbid0IGJlIG1hcHBlZCB0b1xuICAgICAqIGEgc3BlY2lmaWMgdHlwZSBsaWtlIGNsYXNzIG9yIGVudW0uXG4gICAgICovXG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1widHlwZVwiXSA9IFwidHlwZVwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImNsYXNzXCJdID0gXCJjbGFzc1wiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImVudW1cIl0gPSBcImVudW1cIjtcbiAgICBTZW1hbnRpY1Rva2VuVHlwZXNbXCJpbnRlcmZhY2VcIl0gPSBcImludGVyZmFjZVwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcInN0cnVjdFwiXSA9IFwic3RydWN0XCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1widHlwZVBhcmFtZXRlclwiXSA9IFwidHlwZVBhcmFtZXRlclwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcInBhcmFtZXRlclwiXSA9IFwicGFyYW1ldGVyXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1widmFyaWFibGVcIl0gPSBcInZhcmlhYmxlXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wicHJvcGVydHlcIl0gPSBcInByb3BlcnR5XCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wiZW51bU1lbWJlclwiXSA9IFwiZW51bU1lbWJlclwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImV2ZW50XCJdID0gXCJldmVudFwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImZ1bmN0aW9uXCJdID0gXCJmdW5jdGlvblwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcIm1ldGhvZFwiXSA9IFwibWV0aG9kXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wibWFjcm9cIl0gPSBcIm1hY3JvXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wia2V5d29yZFwiXSA9IFwia2V5d29yZFwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcIm1vZGlmaWVyXCJdID0gXCJtb2RpZmllclwiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcImNvbW1lbnRcIl0gPSBcImNvbW1lbnRcIjtcbiAgICBTZW1hbnRpY1Rva2VuVHlwZXNbXCJzdHJpbmdcIl0gPSBcInN0cmluZ1wiO1xuICAgIFNlbWFudGljVG9rZW5UeXBlc1tcIm51bWJlclwiXSA9IFwibnVtYmVyXCI7XG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wicmVnZXhwXCJdID0gXCJyZWdleHBcIjtcbiAgICBTZW1hbnRpY1Rva2VuVHlwZXNbXCJvcGVyYXRvclwiXSA9IFwib3BlcmF0b3JcIjtcbiAgICAvKipcbiAgICAgKiBAc2luY2UgMy4xNy4wXG4gICAgICovXG4gICAgU2VtYW50aWNUb2tlblR5cGVzW1wiZGVjb3JhdG9yXCJdID0gXCJkZWNvcmF0b3JcIjtcbn0pKFNlbWFudGljVG9rZW5UeXBlcyB8fCAoU2VtYW50aWNUb2tlblR5cGVzID0ge30pKTtcbi8qKlxuICogQSBzZXQgb2YgcHJlZGVmaW5lZCB0b2tlbiBtb2RpZmllcnMuIFRoaXMgc2V0IGlzIG5vdCBmaXhlZFxuICogYW4gY2xpZW50cyBjYW4gc3BlY2lmeSBhZGRpdGlvbmFsIHRva2VuIHR5cGVzIHZpYSB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgY2xpZW50IGNhcGFiaWxpdGllcy5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCB2YXIgU2VtYW50aWNUb2tlbk1vZGlmaWVycztcbihmdW5jdGlvbiAoU2VtYW50aWNUb2tlbk1vZGlmaWVycykge1xuICAgIFNlbWFudGljVG9rZW5Nb2RpZmllcnNbXCJkZWNsYXJhdGlvblwiXSA9IFwiZGVjbGFyYXRpb25cIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiZGVmaW5pdGlvblwiXSA9IFwiZGVmaW5pdGlvblwiO1xuICAgIFNlbWFudGljVG9rZW5Nb2RpZmllcnNbXCJyZWFkb25seVwiXSA9IFwicmVhZG9ubHlcIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wic3RhdGljXCJdID0gXCJzdGF0aWNcIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiZGVwcmVjYXRlZFwiXSA9IFwiZGVwcmVjYXRlZFwiO1xuICAgIFNlbWFudGljVG9rZW5Nb2RpZmllcnNbXCJhYnN0cmFjdFwiXSA9IFwiYWJzdHJhY3RcIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiYXN5bmNcIl0gPSBcImFzeW5jXCI7XG4gICAgU2VtYW50aWNUb2tlbk1vZGlmaWVyc1tcIm1vZGlmaWNhdGlvblwiXSA9IFwibW9kaWZpY2F0aW9uXCI7XG4gICAgU2VtYW50aWNUb2tlbk1vZGlmaWVyc1tcImRvY3VtZW50YXRpb25cIl0gPSBcImRvY3VtZW50YXRpb25cIjtcbiAgICBTZW1hbnRpY1Rva2VuTW9kaWZpZXJzW1wiZGVmYXVsdExpYnJhcnlcIl0gPSBcImRlZmF1bHRMaWJyYXJ5XCI7XG59KShTZW1hbnRpY1Rva2VuTW9kaWZpZXJzIHx8IChTZW1hbnRpY1Rva2VuTW9kaWZpZXJzID0ge30pKTtcbi8qKlxuICogQHNpbmNlIDMuMTYuMFxuICovXG5leHBvcnQgdmFyIFNlbWFudGljVG9rZW5zO1xuKGZ1bmN0aW9uIChTZW1hbnRpY1Rva2Vucykge1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMub2JqZWN0TGl0ZXJhbChjYW5kaWRhdGUpICYmIChjYW5kaWRhdGUucmVzdWx0SWQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2FuZGlkYXRlLnJlc3VsdElkID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmRhdGEpICYmIChjYW5kaWRhdGUuZGF0YS5sZW5ndGggPT09IDAgfHwgdHlwZW9mIGNhbmRpZGF0ZS5kYXRhWzBdID09PSAnbnVtYmVyJyk7XG4gICAgfVxuICAgIFNlbWFudGljVG9rZW5zLmlzID0gaXM7XG59KShTZW1hbnRpY1Rva2VucyB8fCAoU2VtYW50aWNUb2tlbnMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5saW5lVmFsdWVUZXh0IG5hbWVzcGFjZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIElubGluZVZhbHVlVGV4dHMuXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgdmFyIElubGluZVZhbHVlVGV4dDtcbihmdW5jdGlvbiAoSW5saW5lVmFsdWVUZXh0KSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBJbmxpbmVWYWx1ZVRleHQgbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocmFuZ2UsIHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIHRleHQgfTtcbiAgICB9XG4gICAgSW5saW5lVmFsdWVUZXh0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAhPT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZSAhPT0gbnVsbCAmJiBSYW5nZS5pcyhjYW5kaWRhdGUucmFuZ2UpICYmIElzLnN0cmluZyhjYW5kaWRhdGUudGV4dCk7XG4gICAgfVxuICAgIElubGluZVZhbHVlVGV4dC5pcyA9IGlzO1xufSkoSW5saW5lVmFsdWVUZXh0IHx8IChJbmxpbmVWYWx1ZVRleHQgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5saW5lVmFsdWVWYXJpYWJsZUxvb2t1cCBuYW1lc3BhY2UgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBJbmxpbmVWYWx1ZVZhcmlhYmxlTG9va3Vwcy5cbiAqXG4gKiBAc2luY2UgMy4xNy4wXG4gKi9cbmV4cG9ydCB2YXIgSW5saW5lVmFsdWVWYXJpYWJsZUxvb2t1cDtcbihmdW5jdGlvbiAoSW5saW5lVmFsdWVWYXJpYWJsZUxvb2t1cCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSW5saW5lVmFsdWVUZXh0IGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHJhbmdlLCB2YXJpYWJsZU5hbWUsIGNhc2VTZW5zaXRpdmVMb29rdXApIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIHZhcmlhYmxlTmFtZSwgY2FzZVNlbnNpdGl2ZUxvb2t1cCB9O1xuICAgIH1cbiAgICBJbmxpbmVWYWx1ZVZhcmlhYmxlTG9va3VwLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSAhPT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZSAhPT0gbnVsbCAmJiBSYW5nZS5pcyhjYW5kaWRhdGUucmFuZ2UpICYmIElzLmJvb2xlYW4oY2FuZGlkYXRlLmNhc2VTZW5zaXRpdmVMb29rdXApXG4gICAgICAgICAgICAmJiAoSXMuc3RyaW5nKGNhbmRpZGF0ZS52YXJpYWJsZU5hbWUpIHx8IGNhbmRpZGF0ZS52YXJpYWJsZU5hbWUgPT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIElubGluZVZhbHVlVmFyaWFibGVMb29rdXAuaXMgPSBpcztcbn0pKElubGluZVZhbHVlVmFyaWFibGVMb29rdXAgfHwgKElubGluZVZhbHVlVmFyaWFibGVMb29rdXAgPSB7fSkpO1xuLyoqXG4gKiBUaGUgSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24gbmFtZXNwYWNlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24uXG4gKlxuICogQHNpbmNlIDMuMTcuMFxuICovXG5leHBvcnQgdmFyIElubGluZVZhbHVlRXZhbHVhdGFibGVFeHByZXNzaW9uO1xuKGZ1bmN0aW9uIChJbmxpbmVWYWx1ZUV2YWx1YXRhYmxlRXhwcmVzc2lvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24gbGl0ZXJhbC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUocmFuZ2UsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2UsIGV4cHJlc3Npb24gfTtcbiAgICB9XG4gICAgSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgJiYgY2FuZGlkYXRlICE9PSBudWxsICYmIFJhbmdlLmlzKGNhbmRpZGF0ZS5yYW5nZSlcbiAgICAgICAgICAgICYmIChJcy5zdHJpbmcoY2FuZGlkYXRlLmV4cHJlc3Npb24pIHx8IGNhbmRpZGF0ZS5leHByZXNzaW9uID09PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBJbmxpbmVWYWx1ZUV2YWx1YXRhYmxlRXhwcmVzc2lvbi5pcyA9IGlzO1xufSkoSW5saW5lVmFsdWVFdmFsdWF0YWJsZUV4cHJlc3Npb24gfHwgKElubGluZVZhbHVlRXZhbHVhdGFibGVFeHByZXNzaW9uID0ge30pKTtcbi8qKlxuICogVGhlIElubGluZVZhbHVlQ29udGV4dCBuYW1lc3BhY2UgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byB3b3JrIHdpdGhcbiAqIHtAbGluayBJbmxpbmVWYWx1ZUNvbnRleHR9IGxpdGVyYWxzLlxuICpcbiAqIEBzaW5jZSAzLjE3LjBcbiAqL1xuZXhwb3J0IHZhciBJbmxpbmVWYWx1ZUNvbnRleHQ7XG4oZnVuY3Rpb24gKElubGluZVZhbHVlQ29udGV4dCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSW5saW5lVmFsdWVDb250ZXh0IGxpdGVyYWwuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKGZyYW1lSWQsIHN0b3BwZWRMb2NhdGlvbikge1xuICAgICAgICByZXR1cm4geyBmcmFtZUlkLCBzdG9wcGVkTG9jYXRpb24gfTtcbiAgICB9XG4gICAgSW5saW5lVmFsdWVDb250ZXh0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIElubGluZVZhbHVlQ29udGV4dH0gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gSXMuZGVmaW5lZChjYW5kaWRhdGUpICYmIFJhbmdlLmlzKHZhbHVlLnN0b3BwZWRMb2NhdGlvbik7XG4gICAgfVxuICAgIElubGluZVZhbHVlQ29udGV4dC5pcyA9IGlzO1xufSkoSW5saW5lVmFsdWVDb250ZXh0IHx8IChJbmxpbmVWYWx1ZUNvbnRleHQgPSB7fSkpO1xuLyoqXG4gKiBJbmxheSBoaW50IGtpbmRzLlxuICpcbiAqIEBzaW5jZSAzLjE3LjBcbiAqL1xuZXhwb3J0IHZhciBJbmxheUhpbnRLaW5kO1xuKGZ1bmN0aW9uIChJbmxheUhpbnRLaW5kKSB7XG4gICAgLyoqXG4gICAgICogQW4gaW5sYXkgaGludCB0aGF0IGZvciBhIHR5cGUgYW5ub3RhdGlvbi5cbiAgICAgKi9cbiAgICBJbmxheUhpbnRLaW5kLlR5cGUgPSAxO1xuICAgIC8qKlxuICAgICAqIEFuIGlubGF5IGhpbnQgdGhhdCBpcyBmb3IgYSBwYXJhbWV0ZXIuXG4gICAgICovXG4gICAgSW5sYXlIaW50S2luZC5QYXJhbWV0ZXIgPSAyO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gMjtcbiAgICB9XG4gICAgSW5sYXlIaW50S2luZC5pcyA9IGlzO1xufSkoSW5sYXlIaW50S2luZCB8fCAoSW5sYXlIaW50S2luZCA9IHt9KSk7XG5leHBvcnQgdmFyIElubGF5SGludExhYmVsUGFydDtcbihmdW5jdGlvbiAoSW5sYXlIaW50TGFiZWxQYXJ0KSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlIH07XG4gICAgfVxuICAgIElubGF5SGludExhYmVsUGFydC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgZnVuY3Rpb24gaXModmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5vYmplY3RMaXRlcmFsKGNhbmRpZGF0ZSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUudG9vbHRpcCA9PT0gdW5kZWZpbmVkIHx8IElzLnN0cmluZyhjYW5kaWRhdGUudG9vbHRpcCkgfHwgTWFya3VwQ29udGVudC5pcyhjYW5kaWRhdGUudG9vbHRpcCkpXG4gICAgICAgICAgICAmJiAoY2FuZGlkYXRlLmxvY2F0aW9uID09PSB1bmRlZmluZWQgfHwgTG9jYXRpb24uaXMoY2FuZGlkYXRlLmxvY2F0aW9uKSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUuY29tbWFuZCA9PT0gdW5kZWZpbmVkIHx8IENvbW1hbmQuaXMoY2FuZGlkYXRlLmNvbW1hbmQpKTtcbiAgICB9XG4gICAgSW5sYXlIaW50TGFiZWxQYXJ0LmlzID0gaXM7XG59KShJbmxheUhpbnRMYWJlbFBhcnQgfHwgKElubGF5SGludExhYmVsUGFydCA9IHt9KSk7XG5leHBvcnQgdmFyIElubGF5SGludDtcbihmdW5jdGlvbiAoSW5sYXlIaW50KSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKHBvc2l0aW9uLCBsYWJlbCwga2luZCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IHBvc2l0aW9uLCBsYWJlbCB9O1xuICAgICAgICBpZiAoa2luZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQua2luZCA9IGtpbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgSW5sYXlIaW50LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKSAmJiBQb3NpdGlvbi5pcyhjYW5kaWRhdGUucG9zaXRpb24pXG4gICAgICAgICAgICAmJiAoSXMuc3RyaW5nKGNhbmRpZGF0ZS5sYWJlbCkgfHwgSXMudHlwZWRBcnJheShjYW5kaWRhdGUubGFiZWwsIElubGF5SGludExhYmVsUGFydC5pcykpXG4gICAgICAgICAgICAmJiAoY2FuZGlkYXRlLmtpbmQgPT09IHVuZGVmaW5lZCB8fCBJbmxheUhpbnRLaW5kLmlzKGNhbmRpZGF0ZS5raW5kKSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUudGV4dEVkaXRzID09PSB1bmRlZmluZWQpIHx8IElzLnR5cGVkQXJyYXkoY2FuZGlkYXRlLnRleHRFZGl0cywgVGV4dEVkaXQuaXMpXG4gICAgICAgICAgICAmJiAoY2FuZGlkYXRlLnRvb2x0aXAgPT09IHVuZGVmaW5lZCB8fCBJcy5zdHJpbmcoY2FuZGlkYXRlLnRvb2x0aXApIHx8IE1hcmt1cENvbnRlbnQuaXMoY2FuZGlkYXRlLnRvb2x0aXApKVxuICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZS5wYWRkaW5nTGVmdCA9PT0gdW5kZWZpbmVkIHx8IElzLmJvb2xlYW4oY2FuZGlkYXRlLnBhZGRpbmdMZWZ0KSlcbiAgICAgICAgICAgICYmIChjYW5kaWRhdGUucGFkZGluZ1JpZ2h0ID09PSB1bmRlZmluZWQgfHwgSXMuYm9vbGVhbihjYW5kaWRhdGUucGFkZGluZ1JpZ2h0KSk7XG4gICAgfVxuICAgIElubGF5SGludC5pcyA9IGlzO1xufSkoSW5sYXlIaW50IHx8IChJbmxheUhpbnQgPSB7fSkpO1xuZXhwb3J0IHZhciBTdHJpbmdWYWx1ZTtcbihmdW5jdGlvbiAoU3RyaW5nVmFsdWUpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGVTbmlwcGV0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IGtpbmQ6ICdzbmlwcGV0JywgdmFsdWUgfTtcbiAgICB9XG4gICAgU3RyaW5nVmFsdWUuY3JlYXRlU25pcHBldCA9IGNyZWF0ZVNuaXBwZXQ7XG59KShTdHJpbmdWYWx1ZSB8fCAoU3RyaW5nVmFsdWUgPSB7fSkpO1xuZXhwb3J0IHZhciBJbmxpbmVDb21wbGV0aW9uSXRlbTtcbihmdW5jdGlvbiAoSW5saW5lQ29tcGxldGlvbkl0ZW0pIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUoaW5zZXJ0VGV4dCwgZmlsdGVyVGV4dCwgcmFuZ2UsIGNvbW1hbmQpIHtcbiAgICAgICAgcmV0dXJuIHsgaW5zZXJ0VGV4dCwgZmlsdGVyVGV4dCwgcmFuZ2UsIGNvbW1hbmQgfTtcbiAgICB9XG4gICAgSW5saW5lQ29tcGxldGlvbkl0ZW0uY3JlYXRlID0gY3JlYXRlO1xufSkoSW5saW5lQ29tcGxldGlvbkl0ZW0gfHwgKElubGluZUNvbXBsZXRpb25JdGVtID0ge30pKTtcbmV4cG9ydCB2YXIgSW5saW5lQ29tcGxldGlvbkxpc3Q7XG4oZnVuY3Rpb24gKElubGluZUNvbXBsZXRpb25MaXN0KSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiB7IGl0ZW1zIH07XG4gICAgfVxuICAgIElubGluZUNvbXBsZXRpb25MaXN0LmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKElubGluZUNvbXBsZXRpb25MaXN0IHx8IChJbmxpbmVDb21wbGV0aW9uTGlzdCA9IHt9KSk7XG4vKipcbiAqIERlc2NyaWJlcyBob3cgYW4ge0BsaW5rIElubGluZUNvbXBsZXRpb25JdGVtUHJvdmlkZXIgaW5saW5lIGNvbXBsZXRpb24gcHJvdmlkZXJ9IHdhcyB0cmlnZ2VyZWQuXG4gKlxuICogQHNpbmNlIDMuMTguMFxuICogQHByb3Bvc2VkXG4gKi9cbmV4cG9ydCB2YXIgSW5saW5lQ29tcGxldGlvblRyaWdnZXJLaW5kO1xuKGZ1bmN0aW9uIChJbmxpbmVDb21wbGV0aW9uVHJpZ2dlcktpbmQpIHtcbiAgICAvKipcbiAgICAgKiBDb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWQgZXhwbGljaXRseSBieSBhIHVzZXIgZ2VzdHVyZS5cbiAgICAgKi9cbiAgICBJbmxpbmVDb21wbGV0aW9uVHJpZ2dlcktpbmQuSW52b2tlZCA9IDA7XG4gICAgLyoqXG4gICAgICogQ29tcGxldGlvbiB3YXMgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkgd2hpbGUgZWRpdGluZy5cbiAgICAgKi9cbiAgICBJbmxpbmVDb21wbGV0aW9uVHJpZ2dlcktpbmQuQXV0b21hdGljID0gMTtcbn0pKElubGluZUNvbXBsZXRpb25UcmlnZ2VyS2luZCB8fCAoSW5saW5lQ29tcGxldGlvblRyaWdnZXJLaW5kID0ge30pKTtcbmV4cG9ydCB2YXIgU2VsZWN0ZWRDb21wbGV0aW9uSW5mbztcbihmdW5jdGlvbiAoU2VsZWN0ZWRDb21wbGV0aW9uSW5mbykge1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShyYW5nZSwgdGV4dCkge1xuICAgICAgICByZXR1cm4geyByYW5nZSwgdGV4dCB9O1xuICAgIH1cbiAgICBTZWxlY3RlZENvbXBsZXRpb25JbmZvLmNyZWF0ZSA9IGNyZWF0ZTtcbn0pKFNlbGVjdGVkQ29tcGxldGlvbkluZm8gfHwgKFNlbGVjdGVkQ29tcGxldGlvbkluZm8gPSB7fSkpO1xuZXhwb3J0IHZhciBJbmxpbmVDb21wbGV0aW9uQ29udGV4dDtcbihmdW5jdGlvbiAoSW5saW5lQ29tcGxldGlvbkNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGUodHJpZ2dlcktpbmQsIHNlbGVjdGVkQ29tcGxldGlvbkluZm8pIHtcbiAgICAgICAgcmV0dXJuIHsgdHJpZ2dlcktpbmQsIHNlbGVjdGVkQ29tcGxldGlvbkluZm8gfTtcbiAgICB9XG4gICAgSW5saW5lQ29tcGxldGlvbkNvbnRleHQuY3JlYXRlID0gY3JlYXRlO1xufSkoSW5saW5lQ29tcGxldGlvbkNvbnRleHQgfHwgKElubGluZUNvbXBsZXRpb25Db250ZXh0ID0ge30pKTtcbmV4cG9ydCB2YXIgV29ya3NwYWNlRm9sZGVyO1xuKGZ1bmN0aW9uIChXb3Jrc3BhY2VGb2xkZXIpIHtcbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIElzLm9iamVjdExpdGVyYWwoY2FuZGlkYXRlKSAmJiBVUkkuaXMoY2FuZGlkYXRlLnVyaSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS5uYW1lKTtcbiAgICB9XG4gICAgV29ya3NwYWNlRm9sZGVyLmlzID0gaXM7XG59KShXb3Jrc3BhY2VGb2xkZXIgfHwgKFdvcmtzcGFjZUZvbGRlciA9IHt9KSk7XG5leHBvcnQgY29uc3QgRU9MID0gWydcXG4nLCAnXFxyXFxuJywgJ1xcciddO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHRleHQgZG9jdW1lbnQgZnJvbSB0aGUgbmV3IHZzY29kZS1sYW5ndWFnZXNlcnZlci10ZXh0ZG9jdW1lbnQgcGFja2FnZS5cbiAqL1xuZXhwb3J0IHZhciBUZXh0RG9jdW1lbnQ7XG4oZnVuY3Rpb24gKFRleHREb2N1bWVudCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgSVRleHREb2N1bWVudCBsaXRlcmFsIGZyb20gdGhlIGdpdmVuIHVyaSBhbmQgY29udGVudC5cbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VJZCBUaGUgZG9jdW1lbnQncyBsYW5ndWFnZSBJZC5cbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgZG9jdW1lbnQncyB2ZXJzaW9uLlxuICAgICAqIEBwYXJhbSBjb250ZW50IFRoZSBkb2N1bWVudCdzIGNvbnRlbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHVyaSwgbGFuZ3VhZ2VJZCwgdmVyc2lvbiwgY29udGVudCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bGxUZXh0RG9jdW1lbnQodXJpLCBsYW5ndWFnZUlkLCB2ZXJzaW9uLCBjb250ZW50KTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gbGl0ZXJhbCBjb25mb3JtcyB0byB0aGUge0BsaW5rIElUZXh0RG9jdW1lbnR9IGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpcyh2YWx1ZSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBJcy5kZWZpbmVkKGNhbmRpZGF0ZSkgJiYgSXMuc3RyaW5nKGNhbmRpZGF0ZS51cmkpICYmIChJcy51bmRlZmluZWQoY2FuZGlkYXRlLmxhbmd1YWdlSWQpIHx8IElzLnN0cmluZyhjYW5kaWRhdGUubGFuZ3VhZ2VJZCkpICYmIElzLnVpbnRlZ2VyKGNhbmRpZGF0ZS5saW5lQ291bnQpXG4gICAgICAgICAgICAmJiBJcy5mdW5jKGNhbmRpZGF0ZS5nZXRUZXh0KSAmJiBJcy5mdW5jKGNhbmRpZGF0ZS5wb3NpdGlvbkF0KSAmJiBJcy5mdW5jKGNhbmRpZGF0ZS5vZmZzZXRBdCkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIFRleHREb2N1bWVudC5pcyA9IGlzO1xuICAgIGZ1bmN0aW9uIGFwcGx5RWRpdHMoZG9jdW1lbnQsIGVkaXRzKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gZG9jdW1lbnQuZ2V0VGV4dCgpO1xuICAgICAgICBsZXQgc29ydGVkRWRpdHMgPSBtZXJnZVNvcnQoZWRpdHMsIChhLCBiKSA9PiB7XG4gICAgICAgICAgICBsZXQgZGlmZiA9IGEucmFuZ2Uuc3RhcnQubGluZSAtIGIucmFuZ2Uuc3RhcnQubGluZTtcbiAgICAgICAgICAgIGlmIChkaWZmID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyIC0gYi5yYW5nZS5zdGFydC5jaGFyYWN0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGlmZjtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBsYXN0TW9kaWZpZWRPZmZzZXQgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNvcnRlZEVkaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgZSA9IHNvcnRlZEVkaXRzW2ldO1xuICAgICAgICAgICAgbGV0IHN0YXJ0T2Zmc2V0ID0gZG9jdW1lbnQub2Zmc2V0QXQoZS5yYW5nZS5zdGFydCk7XG4gICAgICAgICAgICBsZXQgZW5kT2Zmc2V0ID0gZG9jdW1lbnQub2Zmc2V0QXQoZS5yYW5nZS5lbmQpO1xuICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA8PSBsYXN0TW9kaWZpZWRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRPZmZzZXQpICsgZS5uZXdUZXh0ICsgdGV4dC5zdWJzdHJpbmcoZW5kT2Zmc2V0LCB0ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ092ZXJsYXBwaW5nIGVkaXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RNb2RpZmllZE9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBUZXh0RG9jdW1lbnQuYXBwbHlFZGl0cyA9IGFwcGx5RWRpdHM7XG4gICAgZnVuY3Rpb24gbWVyZ2VTb3J0KGRhdGEsIGNvbXBhcmUpIHtcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIC8vIHNvcnRlZFxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IChkYXRhLmxlbmd0aCAvIDIpIHwgMDtcbiAgICAgICAgY29uc3QgbGVmdCA9IGRhdGEuc2xpY2UoMCwgcCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gZGF0YS5zbGljZShwKTtcbiAgICAgICAgbWVyZ2VTb3J0KGxlZnQsIGNvbXBhcmUpO1xuICAgICAgICBtZXJnZVNvcnQocmlnaHQsIGNvbXBhcmUpO1xuICAgICAgICBsZXQgbGVmdElkeCA9IDA7XG4gICAgICAgIGxldCByaWdodElkeCA9IDA7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKGxlZnRJZHggPCBsZWZ0Lmxlbmd0aCAmJiByaWdodElkeCA8IHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHJldCA9IGNvbXBhcmUobGVmdFtsZWZ0SWR4XSwgcmlnaHRbcmlnaHRJZHhdKTtcbiAgICAgICAgICAgIGlmIChyZXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHNtYWxsZXJfZXF1YWwgLT4gdGFrZSBsZWZ0IHRvIHByZXNlcnZlIG9yZGVyXG4gICAgICAgICAgICAgICAgZGF0YVtpKytdID0gbGVmdFtsZWZ0SWR4KytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JlYXRlciAtPiB0YWtlIHJpZ2h0XG4gICAgICAgICAgICAgICAgZGF0YVtpKytdID0gcmlnaHRbcmlnaHRJZHgrK107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGxlZnRJZHggPCBsZWZ0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZGF0YVtpKytdID0gbGVmdFtsZWZ0SWR4KytdO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChyaWdodElkeCA8IHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZGF0YVtpKytdID0gcmlnaHRbcmlnaHRJZHgrK107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufSkoVGV4dERvY3VtZW50IHx8IChUZXh0RG9jdW1lbnQgPSB7fSkpO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHRleHQgZG9jdW1lbnQgZnJvbSB0aGUgbmV3IHZzY29kZS1sYW5ndWFnZXNlcnZlci10ZXh0ZG9jdW1lbnQgcGFja2FnZS5cbiAqL1xuY2xhc3MgRnVsbFRleHREb2N1bWVudCB7XG4gICAgY29uc3RydWN0b3IodXJpLCBsYW5ndWFnZUlkLCB2ZXJzaW9uLCBjb250ZW50KSB7XG4gICAgICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2VJZCA9IGxhbmd1YWdlSWQ7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5fbGluZU9mZnNldHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCB1cmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmk7XG4gICAgfVxuICAgIGdldCBsYW5ndWFnZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZDtcbiAgICB9XG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIH1cbiAgICBnZXRUZXh0KHJhbmdlKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5vZmZzZXRBdChyYW5nZS5zdGFydCk7XG4gICAgICAgICAgICBsZXQgZW5kID0gdGhpcy5vZmZzZXRBdChyYW5nZS5lbmQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICAgIH1cbiAgICB1cGRhdGUoZXZlbnQsIHZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5fY29udGVudCA9IGV2ZW50LnRleHQ7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICB0aGlzLl9saW5lT2Zmc2V0cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0TGluZU9mZnNldHMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9saW5lT2Zmc2V0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgbGluZU9mZnNldHMgPSBbXTtcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gdGhpcy5fY29udGVudDtcbiAgICAgICAgICAgIGxldCBpc0xpbmVTdGFydCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNMaW5lU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldHMucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgaXNMaW5lU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNoID0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgICAgICAgaXNMaW5lU3RhcnQgPSAoY2ggPT09ICdcXHInIHx8IGNoID09PSAnXFxuJyk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXFxyJyAmJiBpICsgMSA8IHRleHQubGVuZ3RoICYmIHRleHQuY2hhckF0KGkgKyAxKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0xpbmVTdGFydCAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0cy5wdXNoKHRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gbGluZU9mZnNldHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzO1xuICAgIH1cbiAgICBwb3NpdGlvbkF0KG9mZnNldCkge1xuICAgICAgICBvZmZzZXQgPSBNYXRoLm1heChNYXRoLm1pbihvZmZzZXQsIHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwgMCk7XG4gICAgICAgIGxldCBsaW5lT2Zmc2V0cyA9IHRoaXMuZ2V0TGluZU9mZnNldHMoKTtcbiAgICAgICAgbGV0IGxvdyA9IDAsIGhpZ2ggPSBsaW5lT2Zmc2V0cy5sZW5ndGg7XG4gICAgICAgIGlmIChoaWdoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUG9zaXRpb24uY3JlYXRlKDAsIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXRzW21pZF0gPiBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb3cgaXMgdGhlIGxlYXN0IHggZm9yIHdoaWNoIHRoZSBsaW5lIG9mZnNldCBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBvZmZzZXRcbiAgICAgICAgLy8gb3IgYXJyYXkubGVuZ3RoIGlmIG5vIGxpbmUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IG9mZnNldFxuICAgICAgICBsZXQgbGluZSA9IGxvdyAtIDE7XG4gICAgICAgIHJldHVybiBQb3NpdGlvbi5jcmVhdGUobGluZSwgb2Zmc2V0IC0gbGluZU9mZnNldHNbbGluZV0pO1xuICAgIH1cbiAgICBvZmZzZXRBdChwb3NpdGlvbikge1xuICAgICAgICBsZXQgbGluZU9mZnNldHMgPSB0aGlzLmdldExpbmVPZmZzZXRzKCk7XG4gICAgICAgIGlmIChwb3NpdGlvbi5saW5lID49IGxpbmVPZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uLmxpbmUgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGluZU9mZnNldCA9IGxpbmVPZmZzZXRzW3Bvc2l0aW9uLmxpbmVdO1xuICAgICAgICBsZXQgbmV4dExpbmVPZmZzZXQgPSAocG9zaXRpb24ubGluZSArIDEgPCBsaW5lT2Zmc2V0cy5sZW5ndGgpID8gbGluZU9mZnNldHNbcG9zaXRpb24ubGluZSArIDFdIDogdGhpcy5fY29udGVudC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbihsaW5lT2Zmc2V0ICsgcG9zaXRpb24uY2hhcmFjdGVyLCBuZXh0TGluZU9mZnNldCksIGxpbmVPZmZzZXQpO1xuICAgIH1cbiAgICBnZXQgbGluZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aDtcbiAgICB9XG59XG52YXIgSXM7XG4oZnVuY3Rpb24gKElzKSB7XG4gICAgY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgIGZ1bmN0aW9uIGRlZmluZWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIElzLmRlZmluZWQgPSBkZWZpbmVkO1xuICAgIGZ1bmN0aW9uIHVuZGVmaW5lZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgSXMudW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGZ1bmN0aW9uIGJvb2xlYW4odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG4gICAgSXMuYm9vbGVhbiA9IGJvb2xlYW47XG4gICAgZnVuY3Rpb24gc3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG4gICAgfVxuICAgIElzLnN0cmluZyA9IHN0cmluZztcbiAgICBmdW5jdGlvbiBudW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBOdW1iZXJdJztcbiAgICB9XG4gICAgSXMubnVtYmVyID0gbnVtYmVyO1xuICAgIGZ1bmN0aW9uIG51bWJlclJhbmdlKHZhbHVlLCBtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmIG1pbiA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBtYXg7XG4gICAgfVxuICAgIElzLm51bWJlclJhbmdlID0gbnVtYmVyUmFuZ2U7XG4gICAgZnVuY3Rpb24gaW50ZWdlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE51bWJlcl0nICYmIC0yMTQ3NDgzNjQ4IDw9IHZhbHVlICYmIHZhbHVlIDw9IDIxNDc0ODM2NDc7XG4gICAgfVxuICAgIElzLmludGVnZXIgPSBpbnRlZ2VyO1xuICAgIGZ1bmN0aW9uIHVpbnRlZ2VyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAyMTQ3NDgzNjQ3O1xuICAgIH1cbiAgICBJcy51aW50ZWdlciA9IHVpbnRlZ2VyO1xuICAgIGZ1bmN0aW9uIGZ1bmModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cbiAgICBJcy5mdW5jID0gZnVuYztcbiAgICBmdW5jdGlvbiBvYmplY3RMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nIGNsYXNzIGluc3RhbmNlcyBwYXNzIHRoaXMgY2hlY2sgYXMgd2VsbC4gU2luY2UgdGhlIExTUFxuICAgICAgICAvLyBkb2Vzbid0IHVzZSBjbGFzc2VzIHdlIGlnbm9yZSB0aGlzIGZvciBub3cuIElmIHdlIGRvIHdlIG5lZWQgdG8gYWRkIHNvbWV0aGluZ1xuICAgICAgICAvLyBsaWtlIHRoaXM6IGBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpKSA9PT0gbnVsbGBcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG4gICAgfVxuICAgIElzLm9iamVjdExpdGVyYWwgPSBvYmplY3RMaXRlcmFsO1xuICAgIGZ1bmN0aW9uIHR5cGVkQXJyYXkodmFsdWUsIGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeShjaGVjayk7XG4gICAgfVxuICAgIElzLnR5cGVkQXJyYXkgPSB0eXBlZEFycmF5O1xufSkoSXMgfHwgKElzID0ge30pKTtcbiIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICd2c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMnO1xuaW1wb3J0IHsgaXNDb21wb3NpdGVDc3ROb2RlIH0gZnJvbSAnLi4vc3ludGF4LXRyZWUuanMnO1xuaW1wb3J0IHsgdG9rZW5Ub1JhbmdlIH0gZnJvbSAnLi4vdXRpbHMvY3N0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBDc3ROb2RlQnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrID0gW107XG4gICAgfVxuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGJ1aWxkUm9vdE5vZGUoaW5wdXQpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IG5ldyBSb290Q3N0Tm9kZUltcGwoaW5wdXQpO1xuICAgICAgICB0aGlzLnJvb3ROb2RlLnJvb3QgPSB0aGlzLnJvb3ROb2RlO1xuICAgICAgICB0aGlzLm5vZGVTdGFjayA9IFt0aGlzLnJvb3ROb2RlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7XG4gICAgfVxuICAgIGJ1aWxkQ29tcG9zaXRlTm9kZShmZWF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvc2l0ZU5vZGUgPSBuZXcgQ29tcG9zaXRlQ3N0Tm9kZUltcGwoKTtcbiAgICAgICAgY29tcG9zaXRlTm9kZS5ncmFtbWFyU291cmNlID0gZmVhdHVyZTtcbiAgICAgICAgY29tcG9zaXRlTm9kZS5yb290ID0gdGhpcy5yb290Tm9kZTtcbiAgICAgICAgdGhpcy5jdXJyZW50LmNvbnRlbnQucHVzaChjb21wb3NpdGVOb2RlKTtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2sucHVzaChjb21wb3NpdGVOb2RlKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZU5vZGU7XG4gICAgfVxuICAgIGJ1aWxkTGVhZk5vZGUodG9rZW4sIGZlYXR1cmUpIHtcbiAgICAgICAgY29uc3QgbGVhZk5vZGUgPSBuZXcgTGVhZkNzdE5vZGVJbXBsKHRva2VuLnN0YXJ0T2Zmc2V0LCB0b2tlbi5pbWFnZS5sZW5ndGgsIHRva2VuVG9SYW5nZSh0b2tlbiksIHRva2VuLnRva2VuVHlwZSwgZmFsc2UpO1xuICAgICAgICBsZWFmTm9kZS5ncmFtbWFyU291cmNlID0gZmVhdHVyZTtcbiAgICAgICAgbGVhZk5vZGUucm9vdCA9IHRoaXMucm9vdE5vZGU7XG4gICAgICAgIHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobGVhZk5vZGUpO1xuICAgICAgICByZXR1cm4gbGVhZk5vZGU7XG4gICAgfVxuICAgIHJlbW92ZU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLmNvbnRhaW5lcjtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY29udGVudC5pbmRleE9mKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY29udGVudC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIC8vIFRoZSBzcGVjaWZpZWQgaXRlbSBjb3VsZCBiZSBhIGRhdGF0eXBlICgkdHlwZSBpcyBzeW1ib2wpIG9yIGEgZnJhZ21lbnQgKCR0eXBlIGlzIHVuZGVmaW5lZClcbiAgICAgICAgLy8gT25seSBpZiB0aGUgJHR5cGUgaXMgYSBzdHJpbmcsIHdlIGFjdHVhbGx5IGFzc2lnbiB0aGUgZWxlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGl0ZW0uJHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQuYXN0Tm9kZSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS4kY3N0Tm9kZSA9IGN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgLy8gRW1wdHkgY29tcG9zaXRlIG5vZGVzIGFyZSBub3QgdmFsaWRcbiAgICAgICAgLy8gU2ltcGx5IHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB0cmVlXG4gICAgICAgIGlmICgobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBub2RlLmNvbnRlbnQubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEhpZGRlblRva2VucyhoaWRkZW5Ub2tlbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBoaWRkZW5Ub2tlbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk5vZGUgPSBuZXcgTGVhZkNzdE5vZGVJbXBsKHRva2VuLnN0YXJ0T2Zmc2V0LCB0b2tlbi5pbWFnZS5sZW5ndGgsIHRva2VuVG9SYW5nZSh0b2tlbiksIHRva2VuLnRva2VuVHlwZSwgdHJ1ZSk7XG4gICAgICAgICAgICBoaWRkZW5Ob2RlLnJvb3QgPSB0aGlzLnJvb3ROb2RlO1xuICAgICAgICAgICAgdGhpcy5hZGRIaWRkZW5Ub2tlbih0aGlzLnJvb3ROb2RlLCBoaWRkZW5Ob2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRIaWRkZW5Ub2tlbihub2RlLCB0b2tlbikge1xuICAgICAgICBjb25zdCB7IG9mZnNldDogdG9rZW5TdGFydCwgZW5kOiB0b2tlbkVuZCB9ID0gdG9rZW47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY29udGVudFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0OiBjaGlsZFN0YXJ0LCBlbmQ6IGNoaWxkRW5kIH0gPSBjaGlsZDtcbiAgICAgICAgICAgIGlmIChpc0NvbXBvc2l0ZUNzdE5vZGUoY2hpbGQpICYmIHRva2VuU3RhcnQgPiBjaGlsZFN0YXJ0ICYmIHRva2VuRW5kIDwgY2hpbGRFbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEhpZGRlblRva2VuKGNoaWxkLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5FbmQgPD0gY2hpbGRTdGFydCkge1xuICAgICAgICAgICAgICAgIG5vZGUuY29udGVudC5zcGxpY2UoaSwgMCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBrbm93IHRoYXQgd2UgaGF2ZW4ndCBmb3VuZCBhIHN1aXRlZCBwb3NpdGlvbiBmb3IgdGhlIHRva2VuXG4gICAgICAgIC8vIFNvIHdlIHNpbXBseSBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBub2RlXG4gICAgICAgIG5vZGUuY29udGVudC5wdXNoKHRva2VuKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RDc3ROb2RlIHtcbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBjb250YWluZXJgIGluc3RlYWQuICovXG4gICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBncmFtbWFyU291cmNlYCBpbnN0ZWFkLiAqL1xuICAgIGdldCBmZWF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFtbWFyU291cmNlO1xuICAgIH1cbiAgICBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBhc3ROb2RlKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBub2RlID0gdHlwZW9mICgoX2EgPSB0aGlzLl9hc3ROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuJHR5cGUpID09PSAnc3RyaW5nJyA/IHRoaXMuX2FzdE5vZGUgOiAoX2IgPSB0aGlzLmNvbnRhaW5lcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFzdE5vZGU7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG5vZGUgaGFzIG5vIGFzc29jaWF0ZWQgQVNUIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgc2V0IGFzdE5vZGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYXN0Tm9kZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBhc3ROb2RlYCBpbnN0ZWFkLiAqL1xuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hc3ROb2RlO1xuICAgIH1cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5mdWxsVGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsIHRoaXMuZW5kKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGVhZkNzdE5vZGVJbXBsIGV4dGVuZHMgQWJzdHJhY3RDc3ROb2RlIHtcbiAgICBnZXQgb2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0O1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgZW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0ICsgdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuO1xuICAgIH1cbiAgICBnZXQgdG9rZW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5UeXBlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob2Zmc2V0LCBsZW5ndGgsIHJhbmdlLCB0b2tlblR5cGUsIGhpZGRlbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2hpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLl90b2tlblR5cGUgPSB0b2tlblR5cGU7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdGhpcy5fcmFuZ2UgPSByYW5nZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlQ3N0Tm9kZUltcGwgZXh0ZW5kcyBBYnN0cmFjdENzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBuZXcgQ3N0Tm9kZUNvbnRhaW5lcih0aGlzKTtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIHVzZSBgY29udGVudGAgaW5zdGVhZC4gKi9cbiAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gICAgfVxuICAgIGdldCBvZmZzZXQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9mZnNldCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5vZmZzZXQ7XG4gICAgfVxuICAgIGdldCBlbmQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmxhc3ROb25IaWRkZW5Ob2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xuICAgIH1cbiAgICBnZXQgcmFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IHRoaXMuZmlyc3ROb25IaWRkZW5Ob2RlO1xuICAgICAgICBjb25zdCBsYXN0Tm9kZSA9IHRoaXMubGFzdE5vbkhpZGRlbk5vZGU7XG4gICAgICAgIGlmIChmaXJzdE5vZGUgJiYgbGFzdE5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJhbmdlOiBmaXJzdFJhbmdlIH0gPSBmaXJzdE5vZGU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByYW5nZTogbGFzdFJhbmdlIH0gPSBsYXN0Tm9kZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZUNhY2hlID0geyBzdGFydDogZmlyc3RSYW5nZS5zdGFydCwgZW5kOiBsYXN0UmFuZ2UuZW5kLmxpbmUgPCBmaXJzdFJhbmdlLnN0YXJ0LmxpbmUgPyBmaXJzdFJhbmdlLnN0YXJ0IDogbGFzdFJhbmdlLmVuZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JhbmdlQ2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogUG9zaXRpb24uY3JlYXRlKDAsIDApLCBlbmQ6IFBvc2l0aW9uLmNyZWF0ZSgwLCAwKSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBmaXJzdE5vbkhpZGRlbk5vZGUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWNoaWxkLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50WzBdO1xuICAgIH1cbiAgICBnZXQgbGFzdE5vbkhpZGRlbk5vZGUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmNvbnRlbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jb250ZW50W2ldO1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFt0aGlzLmNvbnRlbnQubGVuZ3RoIC0gMV07XG4gICAgfVxufVxuY2xhc3MgQ3N0Tm9kZUNvbnRhaW5lciBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBDc3ROb2RlQ29udGFpbmVyLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIHB1c2goLi4uaXRlbXMpIHtcbiAgICAgICAgdGhpcy5hZGRQYXJlbnRzKGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnB1c2goLi4uaXRlbXMpO1xuICAgIH1cbiAgICB1bnNoaWZ0KC4uLml0ZW1zKSB7XG4gICAgICAgIHRoaXMuYWRkUGFyZW50cyhpdGVtcyk7XG4gICAgICAgIHJldHVybiBzdXBlci51bnNoaWZ0KC4uLml0ZW1zKTtcbiAgICB9XG4gICAgc3BsaWNlKHN0YXJ0LCBjb3VudCwgLi4uaXRlbXMpIHtcbiAgICAgICAgdGhpcy5hZGRQYXJlbnRzKGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnNwbGljZShzdGFydCwgY291bnQsIC4uLml0ZW1zKTtcbiAgICB9XG4gICAgYWRkUGFyZW50cyhpdGVtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUm9vdENzdE5vZGVJbXBsIGV4dGVuZHMgQ29tcG9zaXRlQ3N0Tm9kZUltcGwge1xuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsIHRoaXMuZW5kKTtcbiAgICB9XG4gICAgZ2V0IGZ1bGxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5wdXQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fdGV4dCA9ICcnO1xuICAgICAgICB0aGlzLl90ZXh0ID0gaW5wdXQgIT09IG51bGwgJiYgaW5wdXQgIT09IHZvaWQgMCA/IGlucHV0IDogJyc7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3N0LW5vZGUtYnVpbGRlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLCBFbWJlZGRlZEFjdGlvbnNQYXJzZXIsIExMa0xvb2thaGVhZFN0cmF0ZWd5IH0gZnJvbSAnY2hldnJvdGFpbic7XG5pbXBvcnQgeyBMTFN0YXJMb29rYWhlYWRTdHJhdGVneSB9IGZyb20gJ2NoZXZyb3RhaW4tYWxsc3Rhcic7XG5pbXBvcnQgeyBpc0Fzc2lnbm1lbnQsIGlzQ3Jvc3NSZWZlcmVuY2UsIGlzS2V5d29yZCB9IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IGdldFR5cGVOYW1lLCBpc0RhdGFUeXBlUnVsZSB9IGZyb20gJy4uL3V0aWxzL2dyYW1tYXItdXRpbHMuanMnO1xuaW1wb3J0IHsgYXNzaWduTWFuZGF0b3J5UHJvcGVydGllcywgZ2V0Q29udGFpbmVyT2ZUeXBlLCBsaW5rQ29udGVudFRvQ29udGFpbmVyIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENzdE5vZGVCdWlsZGVyIH0gZnJvbSAnLi9jc3Qtbm9kZS1idWlsZGVyLmpzJztcbmV4cG9ydCBjb25zdCBEYXRhdHlwZVN5bWJvbCA9IFN5bWJvbCgnRGF0YXR5cGUnKTtcbmZ1bmN0aW9uIGlzRGF0YVR5cGVOb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS4kdHlwZSA9PT0gRGF0YXR5cGVTeW1ib2w7XG59XG5jb25zdCBydWxlU3VmZml4ID0gJ1xcdTIwMEInO1xuY29uc3Qgd2l0aFJ1bGVTdWZmaXggPSAobmFtZSkgPT4gbmFtZS5lbmRzV2l0aChydWxlU3VmZml4KSA/IG5hbWUgOiBuYW1lICsgcnVsZVN1ZmZpeDtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdExhbmdpdW1QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuX3Vub3JkZXJlZEdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5sZXhlciA9IHNlcnZpY2VzLnBhcnNlci5MZXhlcjtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5sZXhlci5kZWZpbml0aW9uO1xuICAgICAgICB0aGlzLndyYXBwZXIgPSBuZXcgQ2hldnJvdGFpbldyYXBwZXIodG9rZW5zLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNlcnZpY2VzLnBhcnNlci5QYXJzZXJDb25maWcpLCB7IGVycm9yTWVzc2FnZVByb3ZpZGVyOiBzZXJ2aWNlcy5wYXJzZXIuUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIgfSkpO1xuICAgIH1cbiAgICBhbHRlcm5hdGl2ZXMoaWR4LCBjaG9pY2VzKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwT3IoaWR4LCBjaG9pY2VzKTtcbiAgICB9XG4gICAgb3B0aW9uYWwoaWR4LCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLndyYXBwZXIud3JhcE9wdGlvbihpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgbWFueShpZHgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwTWFueShpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgYXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwQXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaXNSZWNvcmRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXIuSVNfUkVDT1JESU5HO1xuICAgIH1cbiAgICBnZXQgdW5vcmRlcmVkR3JvdXBzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5vcmRlcmVkR3JvdXBzO1xuICAgIH1cbiAgICBnZXRSdWxlU3RhY2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXIuUlVMRV9TVEFDSztcbiAgICB9XG4gICAgZmluYWxpemUoKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwU2VsZkFuYWx5c2lzKCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExhbmdpdW1QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdExhbmdpdW1QYXJzZXIge1xuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlcykge1xuICAgICAgICBzdXBlcihzZXJ2aWNlcyk7XG4gICAgICAgIHRoaXMubm9kZUJ1aWxkZXIgPSBuZXcgQ3N0Tm9kZUJ1aWxkZXIoKTtcbiAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmFzc2lnbm1lbnRNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMubGlua2VyID0gc2VydmljZXMucmVmZXJlbmNlcy5MaW5rZXI7XG4gICAgICAgIHRoaXMuY29udmVydGVyID0gc2VydmljZXMucGFyc2VyLlZhbHVlQ29udmVydGVyO1xuICAgICAgICB0aGlzLmFzdFJlZmxlY3Rpb24gPSBzZXJ2aWNlcy5zaGFyZWQuQXN0UmVmbGVjdGlvbjtcbiAgICB9XG4gICAgcnVsZShydWxlLCBpbXBsKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBydWxlLmZyYWdtZW50ID8gdW5kZWZpbmVkIDogaXNEYXRhVHlwZVJ1bGUocnVsZSkgPyBEYXRhdHlwZVN5bWJvbCA6IGdldFR5cGVOYW1lKHJ1bGUpO1xuICAgICAgICBjb25zdCBydWxlTWV0aG9kID0gdGhpcy53cmFwcGVyLkRFRklORV9SVUxFKHdpdGhSdWxlU3VmZml4KHJ1bGUubmFtZSksIHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbih0eXBlLCBpbXBsKS5iaW5kKHRoaXMpKTtcbiAgICAgICAgaWYgKHJ1bGUuZW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMubWFpblJ1bGUgPSBydWxlTWV0aG9kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlTWV0aG9kO1xuICAgIH1cbiAgICBwYXJzZShpbnB1dCkge1xuICAgICAgICB0aGlzLm5vZGVCdWlsZGVyLmJ1aWxkUm9vdE5vZGUoaW5wdXQpO1xuICAgICAgICBjb25zdCBsZXhlclJlc3VsdCA9IHRoaXMubGV4ZXIudG9rZW5pemUoaW5wdXQpO1xuICAgICAgICB0aGlzLndyYXBwZXIuaW5wdXQgPSBsZXhlclJlc3VsdC50b2tlbnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWFpblJ1bGUuY2FsbCh0aGlzLndyYXBwZXIsIHt9KTtcbiAgICAgICAgdGhpcy5ub2RlQnVpbGRlci5hZGRIaWRkZW5Ub2tlbnMobGV4ZXJSZXN1bHQuaGlkZGVuKTtcbiAgICAgICAgdGhpcy51bm9yZGVyZWRHcm91cHMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgICAgICBsZXhlckVycm9yczogbGV4ZXJSZXN1bHQuZXJyb3JzLFxuICAgICAgICAgICAgcGFyc2VyRXJyb3JzOiB0aGlzLndyYXBwZXIuZXJyb3JzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXJ0SW1wbGVtZW50YXRpb24oJHR5cGUsIGltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0geyAkdHlwZSB9O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPT09IERhdGF0eXBlU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbXBsZW1lbnRhdGlvbihhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcoKSAmJiByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY29uc3RydWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdW1lKGlkeCwgdG9rZW5UeXBlLCBmZWF0dXJlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy53cmFwcGVyLndyYXBDb25zdW1lKGlkeCwgdG9rZW5UeXBlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKCkgJiYgdGhpcy5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBsZWFmTm9kZSA9IHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRMZWFmTm9kZSh0b2tlbiwgZmVhdHVyZSk7XG4gICAgICAgICAgICBjb25zdCB7IGFzc2lnbm1lbnQsIGlzQ3Jvc3NSZWYgfSA9IHRoaXMuZ2V0QXNzaWdubWVudChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gaXNLZXl3b3JkKGZlYXR1cmUpID8gdG9rZW4uaW1hZ2UgOiB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KHRva2VuLmltYWdlLCBsZWFmTm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NpZ24oYXNzaWdubWVudC5vcGVyYXRvciwgYXNzaWdubWVudC5mZWF0dXJlLCBjb252ZXJ0ZWRWYWx1ZSwgbGVhZk5vZGUsIGlzQ3Jvc3NSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEYXRhVHlwZU5vZGUoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IHRva2VuLmltYWdlO1xuICAgICAgICAgICAgICAgIGlmICghaXNLZXl3b3JkKGZlYXR1cmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KHRleHQsIGxlYWZOb2RlKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50LnZhbHVlICs9IHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdCBjb25zdW1lZCBwYXJzZXIgdG9rZW5zIGFyZSB2YWxpZC4gSG93ZXZlciB0aGVyZSBhcmUgdHdvIGNhc2VzIGluIHdoaWNoIHRoZXkgYXJlIG5vdCB2YWxpZDpcbiAgICAgKlxuICAgICAqIDEuIFRoZXkgd2VyZSBpbnNlcnRlZCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgYnkgdGhlIHBhcnNlci4gVGhlc2UgdG9rZW5zIGRvbid0IHJlYWxseSBleGlzdCBhbmQgc2hvdWxkIG5vdCBiZSBmdXJ0aGVyIHByb2Nlc3NlZFxuICAgICAqIDIuIFRoZXkgY29udGFpbiBpbnZhbGlkIHRva2VuIHJhbmdlcy4gVGhpcyBtaWdodCBpbmNsdWRlIHRoZSBzcGVjaWFsIEVPRiB0b2tlbiwgb3Igb3RoZXIgdG9rZW5zIHByb2R1Y2VkIGJ5IGludmFsaWQgdG9rZW4gYnVpbGRlcnMuXG4gICAgICovXG4gICAgaXNWYWxpZFRva2VuKHRva2VuKSB7XG4gICAgICAgIHJldHVybiAhdG9rZW4uaXNJbnNlcnRlZEluUmVjb3ZlcnkgJiYgIWlzTmFOKHRva2VuLnN0YXJ0T2Zmc2V0KSAmJiB0eXBlb2YgdG9rZW4uZW5kT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odG9rZW4uZW5kT2Zmc2V0KTtcbiAgICB9XG4gICAgc3VicnVsZShpZHgsIHJ1bGUsIGZlYXR1cmUsIGFyZ3MpIHtcbiAgICAgICAgbGV0IGNzdE5vZGU7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBjc3ROb2RlID0gdGhpcy5ub2RlQnVpbGRlci5idWlsZENvbXBvc2l0ZU5vZGUoZmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicnVsZVJlc3VsdCA9IHRoaXMud3JhcHBlci53cmFwU3VicnVsZShpZHgsIHJ1bGUsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcoKSAmJiBjc3ROb2RlICYmIGNzdE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtU3VicnVsZUFzc2lnbm1lbnQoc3VicnVsZVJlc3VsdCwgZmVhdHVyZSwgY3N0Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGVyZm9ybVN1YnJ1bGVBc3NpZ25tZW50KHJlc3VsdCwgZmVhdHVyZSwgY3N0Tm9kZSkge1xuICAgICAgICBjb25zdCB7IGFzc2lnbm1lbnQsIGlzQ3Jvc3NSZWYgfSA9IHRoaXMuZ2V0QXNzaWdubWVudChmZWF0dXJlKTtcbiAgICAgICAgaWYgKGFzc2lnbm1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduKGFzc2lnbm1lbnQub3BlcmF0b3IsIGFzc2lnbm1lbnQuZmVhdHVyZSwgcmVzdWx0LCBjc3ROb2RlLCBpc0Nyb3NzUmVmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghYXNzaWdubWVudCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgY2FsbCBhIHN1YnJ1bGUgd2l0aG91dCBhbiBhc3NpZ25tZW50IHdlIGVpdGhlcjpcbiAgICAgICAgICAgIC8vIDEuIGFwcGVuZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWJydWxlIChkYXRhIHR5cGUgcnVsZSlcbiAgICAgICAgICAgIC8vIDIuIG92ZXJyaWRlIHRoZSBjdXJyZW50IG9iamVjdCB3aXRoIHRoZSBuZXdseSBwYXJzZWQgb2JqZWN0XG4gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGFuIEFTVCBub2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBzdWJydWxlXG4gICAgICAgICAgICAvLyBpcyBhIGRhdGEgdHlwZSBydWxlLCB3ZSBjYW4gc2FmZWx5IGRpc2NhcmQgdGhlIHJlc3VsdHMuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKGlzRGF0YVR5cGVOb2RlKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudC52YWx1ZSArPSByZXN1bHQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtpbmQgPSByZXN1bHQuJHR5cGU7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5hc3NpZ25XaXRob3V0T3ZlcnJpZGUocmVzdWx0LCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0S2luZCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuJHR5cGUgPSByZXN1bHRLaW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0gb2JqZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKG5ld0l0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFjdGlvbigkdHlwZSwgYWN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVzZWQgZm9yIGxlZnQgcmVjdXJzaXZlIGdyYW1tYXIgcnVsZXMuXG4gICAgICAgICAgICAvLyBUaG9zZSBkb24ndCBjYWxsIGBjb25zdHJ1Y3RgIGJlZm9yZSBhbm90aGVyIGFjdGlvbi5cbiAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBjYWxsIGl0IGhlcmUuXG4gICAgICAgICAgICBpZiAoIWxhc3QuJGNzdE5vZGUgJiYgYWN0aW9uLmZlYXR1cmUgJiYgYWN0aW9uLm9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgbGFzdCA9IHRoaXMuY29uc3RydWN0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbGFzdC4kY3N0Tm9kZS5mZWF0dXJlO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRDb21wb3NpdGVOb2RlKGZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgJHR5cGUgfTtcbiAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmZlYXR1cmUgJiYgYWN0aW9uLm9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NpZ24oYWN0aW9uLm9wZXJhdG9yLCBhY3Rpb24uZmVhdHVyZSwgbGFzdCwgbGFzdC4kY3N0Tm9kZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdChwb3AgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBsaW5rQ29udGVudFRvQ29udGFpbmVyKG9iaik7XG4gICAgICAgIHRoaXMubm9kZUJ1aWxkZXIuY29uc3RydWN0KG9iaik7XG4gICAgICAgIGlmIChwb3ApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGF0YVR5cGVOb2RlKG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlci5jb252ZXJ0KG9iai52YWx1ZSwgb2JqLiRjc3ROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXModGhpcy5hc3RSZWZsZWN0aW9uLCBvYmopO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGdldEFzc2lnbm1lbnQoZmVhdHVyZSkge1xuICAgICAgICBpZiAoIXRoaXMuYXNzaWdubWVudE1hcC5oYXMoZmVhdHVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBnZXRDb250YWluZXJPZlR5cGUoZmVhdHVyZSwgaXNBc3NpZ25tZW50KTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWdubWVudE1hcC5zZXQoZmVhdHVyZSwge1xuICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQ6IGFzc2lnbm1lbnQsXG4gICAgICAgICAgICAgICAgaXNDcm9zc1JlZjogYXNzaWdubWVudCA/IGlzQ3Jvc3NSZWZlcmVuY2UoYXNzaWdubWVudC50ZXJtaW5hbCkgOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudE1hcC5nZXQoZmVhdHVyZSk7XG4gICAgfVxuICAgIGFzc2lnbihvcGVyYXRvciwgZmVhdHVyZSwgdmFsdWUsIGNzdE5vZGUsIGlzQ3Jvc3NSZWYpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgaWYgKGlzQ3Jvc3NSZWYgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKG9iaiwgZmVhdHVyZSwgY3N0Tm9kZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlbSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgJz0nOiB7XG4gICAgICAgICAgICAgICAgb2JqW2ZlYXR1cmVdID0gaXRlbTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJz89Jzoge1xuICAgICAgICAgICAgICAgIG9ialtmZWF0dXJlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICcrPSc6IHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqW2ZlYXR1cmVdKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpbZmVhdHVyZV0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqW2ZlYXR1cmVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXNzaWduV2l0aG91dE92ZXJyaWRlKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4aXN0aW5nVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGFyZ2V0W25hbWVdO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBleGlzdGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShleGlzdGluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmFsdWUucHVzaCguLi5uZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gZXhpc3RpbmdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBnZXQgZGVmaW5pdGlvbkVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlci5kZWZpbml0aW9uRXJyb3JzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIHtcbiAgICBidWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uob3B0aW9ucyk7XG4gICAgfVxuICAgIGJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLmJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKG9wdGlvbnMpO1xuICAgIH1cbiAgICBidWlsZE5vVmlhYmxlQWx0TWVzc2FnZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UGFyc2VyRXJyb3JQcm92aWRlci5idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG4gICAgYnVpbGRFYXJseUV4aXRNZXNzYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJFcnJvclByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGFuZ2l1bVBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciB7XG4gICAgYnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7IGV4cGVjdGVkLCBhY3R1YWwgfSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZE1zZyA9IGV4cGVjdGVkLkxBQkVMXG4gICAgICAgICAgICA/ICdgJyArIGV4cGVjdGVkLkxBQkVMICsgJ2AnXG4gICAgICAgICAgICA6IGV4cGVjdGVkLm5hbWUuZW5kc1dpdGgoJzpLVycpXG4gICAgICAgICAgICAgICAgPyBga2V5d29yZCAnJHtleHBlY3RlZC5uYW1lLnN1YnN0cmluZygwLCBleHBlY3RlZC5uYW1lLmxlbmd0aCAtIDMpfSdgXG4gICAgICAgICAgICAgICAgOiBgdG9rZW4gb2YgdHlwZSAnJHtleHBlY3RlZC5uYW1lfSdgO1xuICAgICAgICByZXR1cm4gYEV4cGVjdGluZyAke2V4cGVjdGVkTXNnfSBidXQgZm91bmQgXFxgJHthY3R1YWwuaW1hZ2V9XFxgLmA7XG4gICAgfVxuICAgIGJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHsgZmlyc3RSZWR1bmRhbnQgfSkge1xuICAgICAgICByZXR1cm4gYEV4cGVjdGluZyBlbmQgb2YgZmlsZSBidXQgZm91bmQgXFxgJHtmaXJzdFJlZHVuZGFudC5pbWFnZX1cXGAuYDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdExhbmdpdW1QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgICAgICB0aGlzLmVsZW1lbnRTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RFbGVtZW50U3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0VG9rZW5JbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gMDtcbiAgICB9XG4gICAgYWN0aW9uKCkge1xuICAgICAgICAvLyBOT09QXG4gICAgfVxuICAgIGNvbnN0cnVjdCgpIHtcbiAgICAgICAgLy8gTk9PUFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwYXJzZShpbnB1dCkge1xuICAgICAgICB0aGlzLnJlc2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5sZXhlci50b2tlbml6ZShpbnB1dCk7XG4gICAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zLnRva2VucztcbiAgICAgICAgdGhpcy53cmFwcGVyLmlucHV0ID0gWy4uLnRoaXMudG9rZW5zXTtcbiAgICAgICAgdGhpcy5tYWluUnVsZS5jYWxsKHRoaXMud3JhcHBlciwge30pO1xuICAgICAgICB0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW5zOiB0aGlzLnRva2VucyxcbiAgICAgICAgICAgIGVsZW1lbnRTdGFjazogWy4uLnRoaXMubGFzdEVsZW1lbnRTdGFja10sXG4gICAgICAgICAgICB0b2tlbkluZGV4OiB0aGlzLm5leHRUb2tlbkluZGV4XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJ1bGUocnVsZSwgaW1wbCkge1xuICAgICAgICBjb25zdCBydWxlTWV0aG9kID0gdGhpcy53cmFwcGVyLkRFRklORV9SVUxFKHdpdGhSdWxlU3VmZml4KHJ1bGUubmFtZSksIHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihpbXBsKS5iaW5kKHRoaXMpKTtcbiAgICAgICAgaWYgKHJ1bGUuZW50cnkpIHtcbiAgICAgICAgICAgIHRoaXMubWFpblJ1bGUgPSBydWxlTWV0aG9kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlTWV0aG9kO1xuICAgIH1cbiAgICByZXNldFN0YXRlKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RFbGVtZW50U3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0VG9rZW5JbmRleCA9IDA7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gMDtcbiAgICB9XG4gICAgc3RhcnRJbXBsZW1lbnRhdGlvbihpbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmtlZXBTdGFja1NpemUoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24oYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U3RhY2tTaXplKHNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFN0YWNrLnNwbGljZSh0aGlzLnN0YWNrU2l6ZSk7XG4gICAgfVxuICAgIGtlZXBTdGFja1NpemUoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmVsZW1lbnRTdGFjay5sZW5ndGg7XG4gICAgICAgIHRoaXMuc3RhY2tTaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHNpemU7XG4gICAgfVxuICAgIHJlc2V0U3RhY2tTaXplKHNpemUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5zdGFja1NpemUgPSBzaXplO1xuICAgIH1cbiAgICBjb25zdW1lKGlkeCwgdG9rZW5UeXBlLCBmZWF0dXJlKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwQ29uc3VtZShpZHgsIHRva2VuVHlwZSk7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFbGVtZW50U3RhY2sgPSBbLi4udGhpcy5lbGVtZW50U3RhY2ssIGZlYXR1cmVdO1xuICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW5JbmRleCA9IHRoaXMuY3VycklkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3VicnVsZShpZHgsIHJ1bGUsIGZlYXR1cmUsIGFyZ3MpIHtcbiAgICAgICAgdGhpcy5iZWZvcmUoZmVhdHVyZSk7XG4gICAgICAgIHRoaXMud3JhcHBlci53cmFwU3VicnVsZShpZHgsIHJ1bGUsIGFyZ3MpO1xuICAgICAgICB0aGlzLmFmdGVyKGZlYXR1cmUpO1xuICAgIH1cbiAgICBiZWZvcmUoZWxlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZnRlcihlbGVtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZWxlbWVudFN0YWNrLmxhc3RJbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2UoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjdXJySWR4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVyLmN1cnJJZHg7XG4gICAgfVxufVxuY29uc3QgZGVmYXVsdENvbmZpZyA9IHtcbiAgICByZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgbm9kZUxvY2F0aW9uVHJhY2tpbmc6ICdmdWxsJyxcbiAgICBza2lwVmFsaWRhdGlvbnM6IHRydWUsXG4gICAgZXJyb3JNZXNzYWdlUHJvdmlkZXI6IG5ldyBMYW5naXVtUGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIoKVxufTtcbi8qKlxuICogVGhpcyBjbGFzcyB3cmFwcyB0aGUgZW1iZWRkZWQgYWN0aW9ucyBwYXJzZXIgb2YgY2hldnJvdGFpbiBhbmQgZXhwb3NlcyBwcm90ZWN0ZWQgbWV0aG9kcy5cbiAqIFRoaXMgd2F5LCB3ZSBjYW4gYnVpbGQgdGhlIGBMYW5naXVtUGFyc2VyYCBhcyBhIGNvbXBvc2l0aW9uLlxuICovXG5jbGFzcyBDaGV2cm90YWluV3JhcHBlciBleHRlbmRzIEVtYmVkZGVkQWN0aW9uc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IodG9rZW5zLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgdXNlRGVmYXVsdExvb2thaGVhZCA9IGNvbmZpZyAmJiAnbWF4TG9va2FoZWFkJyBpbiBjb25maWc7XG4gICAgICAgIHN1cGVyKHRva2VucywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcpLCB7IGxvb2thaGVhZFN0cmF0ZWd5OiB1c2VEZWZhdWx0TG9va2FoZWFkXG4gICAgICAgICAgICAgICAgPyBuZXcgTExrTG9va2FoZWFkU3RyYXRlZ3koeyBtYXhMb29rYWhlYWQ6IGNvbmZpZy5tYXhMb29rYWhlYWQgfSlcbiAgICAgICAgICAgICAgICA6IG5ldyBMTFN0YXJMb29rYWhlYWRTdHJhdGVneSgpIH0pLCBjb25maWcpKTtcbiAgICB9XG4gICAgZ2V0IElTX1JFQ09SRElORygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuUkVDT1JESU5HX1BIQVNFO1xuICAgIH1cbiAgICBERUZJTkVfUlVMRShuYW1lLCBpbXBsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlJVTEUobmFtZSwgaW1wbCk7XG4gICAgfVxuICAgIHdyYXBTZWxmQW5hbHlzaXMoKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybVNlbGZBbmFseXNpcygpO1xuICAgIH1cbiAgICB3cmFwQ29uc3VtZShpZHgsIHRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lKGlkeCwgdG9rZW5UeXBlKTtcbiAgICB9XG4gICAgd3JhcFN1YnJ1bGUoaWR4LCBydWxlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnJ1bGUoaWR4LCBydWxlLCB7XG4gICAgICAgICAgICBBUkdTOiBbYXJnc11cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdyYXBPcihpZHgsIGNob2ljZXMpIHtcbiAgICAgICAgdGhpcy5vcihpZHgsIGNob2ljZXMpO1xuICAgIH1cbiAgICB3cmFwT3B0aW9uKGlkeCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vcHRpb24oaWR4LCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHdyYXBNYW55KGlkeCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5tYW55KGlkeCwgY2FsbGJhY2spO1xuICAgIH1cbiAgICB3cmFwQXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYXRMZWFzdE9uZShpZHgsIGNhbGxiYWNrKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5naXVtLXBhcnNlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IEVNUFRZX0FMVCwgRU9GIH0gZnJvbSAnY2hldnJvdGFpbic7XG5pbXBvcnQgeyBpc0FjdGlvbiwgaXNBbHRlcm5hdGl2ZXMsIGlzRW5kT2ZGaWxlLCBpc0Fzc2lnbm1lbnQsIGlzQ29uanVuY3Rpb24sIGlzQ3Jvc3NSZWZlcmVuY2UsIGlzRGlzanVuY3Rpb24sIGlzR3JvdXAsIGlzS2V5d29yZCwgaXNOZWdhdGlvbiwgaXNQYXJhbWV0ZXJSZWZlcmVuY2UsIGlzUGFyc2VyUnVsZSwgaXNSdWxlQ2FsbCwgaXNUZXJtaW5hbFJ1bGUsIGlzVW5vcmRlcmVkR3JvdXAsIGlzQm9vbGVhbkxpdGVyYWwgfSBmcm9tICcuLi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyc7XG5pbXBvcnQgeyBhc3NlcnRVbnJlYWNoYWJsZSwgRXJyb3JXaXRoTG9jYXRpb24gfSBmcm9tICcuLi91dGlscy9lcnJvcnMuanMnO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtLmpzJztcbmltcG9ydCB7IGZpbmROYW1lQXNzaWdubWVudCwgZ2V0QWxsUmVhY2hhYmxlUnVsZXMsIGdldFR5cGVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2VyKGdyYW1tYXIsIHBhcnNlciwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZXMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcGFyc2VyQ29udGV4dCA9IHtcbiAgICAgICAgcGFyc2VyLFxuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBydWxlTmFtZXM6IG5ldyBNYXAoKVxuICAgIH07XG4gICAgYnVpbGRSdWxlcyhwYXJzZXJDb250ZXh0LCBncmFtbWFyKTtcbiAgICByZXR1cm4gcGFyc2VyO1xufVxuZnVuY3Rpb24gYnVpbGRSdWxlcyhwYXJzZXJDb250ZXh0LCBncmFtbWFyKSB7XG4gICAgY29uc3QgcmVhY2hhYmxlID0gZ2V0QWxsUmVhY2hhYmxlUnVsZXMoZ3JhbW1hciwgZmFsc2UpO1xuICAgIGNvbnN0IHBhcnNlclJ1bGVzID0gc3RyZWFtKGdyYW1tYXIucnVsZXMpLmZpbHRlcihpc1BhcnNlclJ1bGUpLmZpbHRlcihydWxlID0+IHJlYWNoYWJsZS5oYXMocnVsZSkpO1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBwYXJzZXJSdWxlcykge1xuICAgICAgICBjb25zdCBjdHggPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcnNlckNvbnRleHQpLCB7IGNvbnN1bWU6IDEsIG9wdGlvbmFsOiAxLCBzdWJydWxlOiAxLCBtYW55OiAxLCBvcjogMSB9KTtcbiAgICAgICAgY3R4LnJ1bGVzLnNldChydWxlLm5hbWUsIHBhcnNlckNvbnRleHQucGFyc2VyLnJ1bGUocnVsZSwgYnVpbGRFbGVtZW50KGN0eCwgcnVsZS5kZWZpbml0aW9uKSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkRWxlbWVudChjdHgsIGVsZW1lbnQsIGlnbm9yZUd1YXJkID0gZmFsc2UpIHtcbiAgICBsZXQgbWV0aG9kO1xuICAgIGlmIChpc0tleXdvcmQoZWxlbWVudCkpIHtcbiAgICAgICAgbWV0aG9kID0gYnVpbGRLZXl3b3JkKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQWN0aW9uKGVsZW1lbnQpKSB7XG4gICAgICAgIG1ldGhvZCA9IGJ1aWxkQWN0aW9uKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXNzaWdubWVudChlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZEVsZW1lbnQoY3R4LCBlbGVtZW50LnRlcm1pbmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDcm9zc1JlZmVyZW5jZShlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZENyb3NzUmVmZXJlbmNlKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUnVsZUNhbGwoZWxlbWVudCkpIHtcbiAgICAgICAgbWV0aG9kID0gYnVpbGRSdWxlQ2FsbChjdHgsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FsdGVybmF0aXZlcyhlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZEFsdGVybmF0aXZlcyhjdHgsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1Vub3JkZXJlZEdyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgIG1ldGhvZCA9IGJ1aWxkVW5vcmRlcmVkR3JvdXAoY3R4LCBlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICBtZXRob2QgPSBidWlsZEdyb3VwKGN0eCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRW5kT2ZGaWxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGN0eC5jb25zdW1lKys7XG4gICAgICAgIG1ldGhvZCA9ICgpID0+IGN0eC5wYXJzZXIuY29uc3VtZShpZHgsIEVPRiwgZWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JXaXRoTG9jYXRpb24oZWxlbWVudC4kY3N0Tm9kZSwgYFVuZXhwZWN0ZWQgZWxlbWVudCB0eXBlOiAke2VsZW1lbnQuJHR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwKGN0eCwgaWdub3JlR3VhcmQgPyB1bmRlZmluZWQgOiBnZXRHdWFyZENvbmRpdGlvbihlbGVtZW50KSwgbWV0aG9kLCBlbGVtZW50LmNhcmRpbmFsaXR5KTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQWN0aW9uKGN0eCwgYWN0aW9uKSB7XG4gICAgY29uc3QgYWN0aW9uVHlwZSA9IGdldFR5cGVOYW1lKGFjdGlvbik7XG4gICAgcmV0dXJuICgpID0+IGN0eC5wYXJzZXIuYWN0aW9uKGFjdGlvblR5cGUsIGFjdGlvbik7XG59XG5mdW5jdGlvbiBidWlsZFJ1bGVDYWxsKGN0eCwgcnVsZUNhbGwpIHtcbiAgICBjb25zdCBydWxlID0gcnVsZUNhbGwucnVsZS5yZWY7XG4gICAgaWYgKGlzUGFyc2VyUnVsZShydWxlKSkge1xuICAgICAgICBjb25zdCBpZHggPSBjdHguc3VicnVsZSsrO1xuICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBydWxlQ2FsbC5hcmd1bWVudHMubGVuZ3RoID4gMCA/IGJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUocnVsZSwgcnVsZUNhbGwuYXJndW1lbnRzKSA6ICgpID0+ICh7fSk7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4gY3R4LnBhcnNlci5zdWJydWxlKGlkeCwgZ2V0UnVsZShjdHgsIHJ1bGUpLCBydWxlQ2FsbCwgcHJlZGljYXRlKGFyZ3MpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNUZXJtaW5hbFJ1bGUocnVsZSkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY3R4LmNvbnN1bWUrKztcbiAgICAgICAgY29uc3QgbWV0aG9kID0gZ2V0VG9rZW4oY3R4LCBydWxlLm5hbWUpO1xuICAgICAgICByZXR1cm4gKCkgPT4gY3R4LnBhcnNlci5jb25zdW1lKGlkeCwgbWV0aG9kLCBydWxlQ2FsbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFydWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcldpdGhMb2NhdGlvbihydWxlQ2FsbC4kY3N0Tm9kZSwgYFVuZGVmaW5lZCBydWxlIHR5cGU6ICR7cnVsZUNhbGwuJHR5cGV9YCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShydWxlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBidWlsZFJ1bGVDYWxsUHJlZGljYXRlKHJ1bGUsIG5hbWVkQXJncykge1xuICAgIGNvbnN0IHByZWRpY2F0ZXMgPSBuYW1lZEFyZ3MubWFwKGUgPT4gYnVpbGRQcmVkaWNhdGUoZS52YWx1ZSkpO1xuICAgIHJldHVybiAoYXJncykgPT4ge1xuICAgICAgICBjb25zdCBydWxlQXJncyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZWRpY2F0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVUYXJnZXQgPSBydWxlLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW2ldO1xuICAgICAgICAgICAgcnVsZUFyZ3NbcnVsZVRhcmdldC5uYW1lXSA9IHByZWRpY2F0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnVsZUFyZ3M7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUHJlZGljYXRlKGNvbmRpdGlvbikge1xuICAgIGlmIChpc0Rpc2p1bmN0aW9uKGNvbmRpdGlvbikpIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IGJ1aWxkUHJlZGljYXRlKGNvbmRpdGlvbi5sZWZ0KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBidWlsZFByZWRpY2F0ZShjb25kaXRpb24ucmlnaHQpO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IChsZWZ0KGFyZ3MpIHx8IHJpZ2h0KGFyZ3MpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb25qdW5jdGlvbihjb25kaXRpb24pKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBidWlsZFByZWRpY2F0ZShjb25kaXRpb24ubGVmdCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gYnVpbGRQcmVkaWNhdGUoY29uZGl0aW9uLnJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIChhcmdzKSA9PiAobGVmdChhcmdzKSAmJiByaWdodChhcmdzKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTmVnYXRpb24oY29uZGl0aW9uKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGJ1aWxkUHJlZGljYXRlKGNvbmRpdGlvbi52YWx1ZSk7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4gIXZhbHVlKGFyZ3MpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1BhcmFtZXRlclJlZmVyZW5jZShjb25kaXRpb24pKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBjb25kaXRpb24ucGFyYW1ldGVyLnJlZi5uYW1lO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGFyZ3MgIT09IHVuZGVmaW5lZCAmJiBhcmdzW25hbWVdID09PSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Jvb2xlYW5MaXRlcmFsKGNvbmRpdGlvbikpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBCb29sZWFuKGNvbmRpdGlvbi50cnVlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHZhbHVlO1xuICAgIH1cbiAgICBhc3NlcnRVbnJlYWNoYWJsZShjb25kaXRpb24pO1xufVxuZnVuY3Rpb24gYnVpbGRBbHRlcm5hdGl2ZXMoY3R4LCBhbHRlcm5hdGl2ZXMpIHtcbiAgICBpZiAoYWx0ZXJuYXRpdmVzLmVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYnVpbGRFbGVtZW50KGN0eCwgYWx0ZXJuYXRpdmVzLmVsZW1lbnRzWzBdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFsdGVybmF0aXZlcy5lbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlZE1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYW5kbGUgdGhlIGd1YXJkIGNvbmRpdGlvbiBpbiB0aGUgYWx0ZXJuYXRpdmUgYWxyZWFkeVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBpZ25vcmUgdGhlIGdyb3VwIGd1YXJkIGNvbmRpdGlvbiBpbnNpZGVcbiAgICAgICAgICAgICAgICBBTFQ6IGJ1aWxkRWxlbWVudChjdHgsIGVsZW1lbnQsIHRydWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ3VhcmQgPSBnZXRHdWFyZENvbmRpdGlvbihlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChndWFyZCkge1xuICAgICAgICAgICAgICAgIHByZWRpY2F0ZWRNZXRob2QuR0FURSA9IGJ1aWxkUHJlZGljYXRlKGd1YXJkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGhvZHMucHVzaChwcmVkaWNhdGVkTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHggPSBjdHgub3IrKztcbiAgICAgICAgcmV0dXJuIChhcmdzKSA9PiBjdHgucGFyc2VyLmFsdGVybmF0aXZlcyhpZHgsIG1ldGhvZHMubWFwKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbHQgPSB7XG4gICAgICAgICAgICAgICAgQUxUOiAoKSA9PiBtZXRob2QuQUxUKGFyZ3MpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ2F0ZSA9IG1ldGhvZC5HQVRFO1xuICAgICAgICAgICAgaWYgKGdhdGUpIHtcbiAgICAgICAgICAgICAgICBhbHQuR0FURSA9ICgpID0+IGdhdGUoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRVbm9yZGVyZWRHcm91cChjdHgsIGdyb3VwKSB7XG4gICAgaWYgKGdyb3VwLmVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYnVpbGRFbGVtZW50KGN0eCwgZ3JvdXAuZWxlbWVudHNbMF0pO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2RzID0gW107XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGdyb3VwLmVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHByZWRpY2F0ZWRNZXRob2QgPSB7XG4gICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYW5kbGUgdGhlIGd1YXJkIGNvbmRpdGlvbiBpbiB0aGUgYWx0ZXJuYXRpdmUgYWxyZWFkeVxuICAgICAgICAgICAgLy8gV2UgY2FuIGlnbm9yZSB0aGUgZ3JvdXAgZ3VhcmQgY29uZGl0aW9uIGluc2lkZVxuICAgICAgICAgICAgQUxUOiBidWlsZEVsZW1lbnQoY3R4LCBlbGVtZW50LCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBndWFyZCA9IGdldEd1YXJkQ29uZGl0aW9uKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZ3VhcmQpIHtcbiAgICAgICAgICAgIHByZWRpY2F0ZWRNZXRob2QuR0FURSA9IGJ1aWxkUHJlZGljYXRlKGd1YXJkKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRob2RzLnB1c2gocHJlZGljYXRlZE1ldGhvZCk7XG4gICAgfVxuICAgIGNvbnN0IG9ySWR4ID0gY3R4Lm9yKys7XG4gICAgY29uc3QgaWRGdW5jID0gKGdyb3VwSWR4LCBsUGFyc2VyKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrSWQgPSBsUGFyc2VyLmdldFJ1bGVTdGFjaygpLmpvaW4oJy0nKTtcbiAgICAgICAgcmV0dXJuIGB1R3JvdXBfJHtncm91cElkeH1fJHtzdGFja0lkfWA7XG4gICAgfTtcbiAgICBjb25zdCBhbHRlcm5hdGl2ZXMgPSAoYXJncykgPT4gY3R4LnBhcnNlci5hbHRlcm5hdGl2ZXMob3JJZHgsIG1ldGhvZHMubWFwKChtZXRob2QsIGlkeCkgPT4ge1xuICAgICAgICBjb25zdCBhbHQgPSB7IEFMVDogKCkgPT4gdHJ1ZSB9O1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBjdHgucGFyc2VyO1xuICAgICAgICBhbHQuQUxUID0gKCkgPT4ge1xuICAgICAgICAgICAgbWV0aG9kLkFMVChhcmdzKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VyLmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBpZEZ1bmMob3JJZHgsIHBhcnNlcik7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZXIudW5vcmRlcmVkR3JvdXBzLmdldChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluaXQgYWZ0ZXIgY2xlYXIgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnVub3JkZXJlZEdyb3Vwcy5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhdGUgPSBwYXJzZXIudW5vcmRlcmVkR3JvdXBzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGdyb3VwU3RhdGUgPT09IG51bGwgfHwgZ3JvdXBTdGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ3JvdXBTdGF0ZVtpZHhdKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90IGFjY2Vzc2VkIHlldFxuICAgICAgICAgICAgICAgICAgICBncm91cFN0YXRlW2lkeF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2F0ZSA9IG1ldGhvZC5HQVRFO1xuICAgICAgICBpZiAoZ2F0ZSkge1xuICAgICAgICAgICAgYWx0LkdBVEUgPSAoKSA9PiBnYXRlKGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWx0LkdBVEUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tlZEFsdGVybmF0aXZlcyA9IHBhcnNlci51bm9yZGVyZWRHcm91cHMuZ2V0KGlkRnVuYyhvcklkeCwgcGFyc2VyKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsb3cgPSAhKHRyYWNrZWRBbHRlcm5hdGl2ZXMgPT09IG51bGwgfHwgdHJhY2tlZEFsdGVybmF0aXZlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhY2tlZEFsdGVybmF0aXZlc1tpZHhdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxsb3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSkpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwKGN0eCwgZ2V0R3VhcmRDb25kaXRpb24oZ3JvdXApLCBhbHRlcm5hdGl2ZXMsICcqJyk7XG4gICAgcmV0dXJuIChhcmdzKSA9PiB7XG4gICAgICAgIHdyYXBwZWQoYXJncyk7XG4gICAgICAgIGlmICghY3R4LnBhcnNlci5pc1JlY29yZGluZygpKSB7XG4gICAgICAgICAgICBjdHgucGFyc2VyLnVub3JkZXJlZEdyb3Vwcy5kZWxldGUoaWRGdW5jKG9ySWR4LCBjdHgucGFyc2VyKSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRHcm91cChjdHgsIGdyb3VwKSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IGdyb3VwLmVsZW1lbnRzLm1hcChlID0+IGJ1aWxkRWxlbWVudChjdHgsIGUpKTtcbiAgICByZXR1cm4gKGFyZ3MpID0+IG1ldGhvZHMuZm9yRWFjaChtZXRob2QgPT4gbWV0aG9kKGFyZ3MpKTtcbn1cbmZ1bmN0aW9uIGdldEd1YXJkQ29uZGl0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5ndWFyZENvbmRpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ3Jvc3NSZWZlcmVuY2UoY3R4LCBjcm9zc1JlZiwgdGVybWluYWwgPSBjcm9zc1JlZi50ZXJtaW5hbCkge1xuICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgaWYgKCFjcm9zc1JlZi50eXBlLnJlZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gdHlwZTogJyArIGNyb3NzUmVmLnR5cGUuJHJlZlRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBmaW5kTmFtZUFzc2lnbm1lbnQoY3Jvc3NSZWYudHlwZS5yZWYpO1xuICAgICAgICBjb25zdCBhc3NpZ25UZXJtaW5hbCA9IGFzc2lnbm1lbnQgPT09IG51bGwgfHwgYXNzaWdubWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXNzaWdubWVudC50ZXJtaW5hbDtcbiAgICAgICAgaWYgKCFhc3NpZ25UZXJtaW5hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBuYW1lIGFzc2lnbm1lbnQgZm9yIHR5cGU6ICcgKyBnZXRUeXBlTmFtZShjcm9zc1JlZi50eXBlLnJlZikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZENyb3NzUmVmZXJlbmNlKGN0eCwgY3Jvc3NSZWYsIGFzc2lnblRlcm1pbmFsKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSdWxlQ2FsbCh0ZXJtaW5hbCkgJiYgaXNQYXJzZXJSdWxlKHRlcm1pbmFsLnJ1bGUucmVmKSkge1xuICAgICAgICBjb25zdCBpZHggPSBjdHguc3VicnVsZSsrO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIuc3VicnVsZShpZHgsIGdldFJ1bGUoY3R4LCB0ZXJtaW5hbC5ydWxlLnJlZiksIGNyb3NzUmVmLCBhcmdzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSdWxlQ2FsbCh0ZXJtaW5hbCkgJiYgaXNUZXJtaW5hbFJ1bGUodGVybWluYWwucnVsZS5yZWYpKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGN0eC5jb25zdW1lKys7XG4gICAgICAgIGNvbnN0IHRlcm1pbmFsUnVsZSA9IGdldFRva2VuKGN0eCwgdGVybWluYWwucnVsZS5yZWYubmFtZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBjdHgucGFyc2VyLmNvbnN1bWUoaWR4LCB0ZXJtaW5hbFJ1bGUsIGNyb3NzUmVmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNLZXl3b3JkKHRlcm1pbmFsKSkge1xuICAgICAgICBjb25zdCBpZHggPSBjdHguY29uc3VtZSsrO1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gZ2V0VG9rZW4oY3R4LCB0ZXJtaW5hbC52YWx1ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBjdHgucGFyc2VyLmNvbnN1bWUoaWR4LCBrZXl3b3JkLCBjcm9zc1JlZik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBidWlsZCBjcm9zcyByZWZlcmVuY2UgcGFyc2VyJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRLZXl3b3JkKGN0eCwga2V5d29yZCkge1xuICAgIGNvbnN0IGlkeCA9IGN0eC5jb25zdW1lKys7XG4gICAgY29uc3QgdG9rZW4gPSBjdHgudG9rZW5zW2tleXdvcmQudmFsdWVdO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCB0b2tlbiBmb3Iga2V5d29yZDogJyArIGtleXdvcmQudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gY3R4LnBhcnNlci5jb25zdW1lKGlkeCwgdG9rZW4sIGtleXdvcmQpO1xufVxuZnVuY3Rpb24gd3JhcChjdHgsIGd1YXJkLCBtZXRob2QsIGNhcmRpbmFsaXR5KSB7XG4gICAgY29uc3QgZ2F0ZSA9IGd1YXJkICYmIGJ1aWxkUHJlZGljYXRlKGd1YXJkKTtcbiAgICBpZiAoIWNhcmRpbmFsaXR5KSB7XG4gICAgICAgIGlmIChnYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjdHgub3IrKztcbiAgICAgICAgICAgIHJldHVybiAoYXJncykgPT4gY3R4LnBhcnNlci5hbHRlcm5hdGl2ZXMoaWR4LCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBBTFQ6ICgpID0+IG1ldGhvZChhcmdzKSxcbiAgICAgICAgICAgICAgICAgICAgR0FURTogKCkgPT4gZ2F0ZShhcmdzKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBBTFQ6IEVNUFRZX0FMVCgpLFxuICAgICAgICAgICAgICAgICAgICBHQVRFOiAoKSA9PiAhZ2F0ZShhcmdzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2FyZGluYWxpdHkgPT09ICcqJykge1xuICAgICAgICBjb25zdCBpZHggPSBjdHgubWFueSsrO1xuICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIubWFueShpZHgsIHtcbiAgICAgICAgICAgIERFRjogKCkgPT4gbWV0aG9kKGFyZ3MpLFxuICAgICAgICAgICAgR0FURTogZ2F0ZSA/ICgpID0+IGdhdGUoYXJncykgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5ID09PSAnKycpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY3R4Lm1hbnkrKztcbiAgICAgICAgaWYgKGdhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ySWR4ID0gY3R4Lm9yKys7XG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGd1YXJkIGNvbmRpdGlvbiBmb3IgdGhlIGArYCBncm91cFxuICAgICAgICAgICAgLy8gV2UgY29tYmluZSBpdCB3aXRoIGFuIGVtcHR5IGFsdGVybmF0aXZlXG4gICAgICAgICAgICAvLyBJZiB0aGUgY29uZGl0aW9uIHJldHVybnMgdHJ1ZSwgaXQgbmVlZHMgdG8gcGFyc2UgYXQgbGVhc3QgYSBzaW5nbGUgaXRlcmF0aW9uXG4gICAgICAgICAgICAvLyBJZiBpdHMgZmFsc2UsIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHBhcnNlIGFueXRoaW5nXG4gICAgICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIuYWx0ZXJuYXRpdmVzKG9ySWR4LCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBBTFQ6ICgpID0+IGN0eC5wYXJzZXIuYXRMZWFzdE9uZShpZHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERFRjogKCkgPT4gbWV0aG9kKGFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBHQVRFOiAoKSA9PiBnYXRlKGFyZ3MpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIEFMVDogRU1QVFlfQUxUKCksXG4gICAgICAgICAgICAgICAgICAgIEdBVEU6ICgpID0+ICFnYXRlKGFyZ3MpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKGFyZ3MpID0+IGN0eC5wYXJzZXIuYXRMZWFzdE9uZShpZHgsIHtcbiAgICAgICAgICAgICAgICBERUY6ICgpID0+IG1ldGhvZChhcmdzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5ID09PSAnPycpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gY3R4Lm9wdGlvbmFsKys7XG4gICAgICAgIHJldHVybiAoYXJncykgPT4gY3R4LnBhcnNlci5vcHRpb25hbChpZHgsIHtcbiAgICAgICAgICAgIERFRjogKCkgPT4gbWV0aG9kKGFyZ3MpLFxuICAgICAgICAgICAgR0FURTogZ2F0ZSA/ICgpID0+IGdhdGUoYXJncykgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShjYXJkaW5hbGl0eSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UnVsZShjdHgsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoY3R4LCBlbGVtZW50KTtcbiAgICBjb25zdCBydWxlID0gY3R4LnJ1bGVzLmdldChuYW1lKTtcbiAgICBpZiAoIXJ1bGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUnVsZSBcIiR7bmFtZX1cIiBub3QgZm91bmQuXCJgKTtcbiAgICByZXR1cm4gcnVsZTtcbn1cbmZ1bmN0aW9uIGdldFJ1bGVOYW1lKGN0eCwgZWxlbWVudCkge1xuICAgIGlmIChpc1BhcnNlclJ1bGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnJ1bGVOYW1lcy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5ydWxlTmFtZXMuZ2V0KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBlbGVtZW50O1xuICAgICAgICBsZXQgcGFyZW50ID0gaXRlbS4kY29udGFpbmVyO1xuICAgICAgICBsZXQgcnVsZU5hbWUgPSBlbGVtZW50LiR0eXBlO1xuICAgICAgICB3aGlsZSAoIWlzUGFyc2VyUnVsZShwYXJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoaXNHcm91cChwYXJlbnQpIHx8IGlzQWx0ZXJuYXRpdmVzKHBhcmVudCkgfHwgaXNVbm9yZGVyZWRHcm91cChwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZWxlbWVudHMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGluZGV4LnRvU3RyaW5nKCkgKyAnOicgKyBydWxlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0gPSBwYXJlbnQ7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBydWxlID0gcGFyZW50O1xuICAgICAgICBydWxlTmFtZSA9IHJ1bGUubmFtZSArICc6JyArIHJ1bGVOYW1lO1xuICAgICAgICBjdHgucnVsZU5hbWVzLnNldChlbGVtZW50LCBydWxlTmFtZSk7XG4gICAgICAgIHJldHVybiBydWxlTmFtZTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRUb2tlbihjdHgsIG5hbWUpIHtcbiAgICBjb25zdCB0b2tlbiA9IGN0eC50b2tlbnNbbmFtZV07XG4gICAgaWYgKCF0b2tlbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBcIiR7bmFtZX1cIiBub3QgZm91bmQuXCJgKTtcbiAgICByZXR1cm4gdG9rZW47XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZXItYnVpbGRlci1iYXNlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIgfSBmcm9tICcuL2xhbmdpdW0tcGFyc2VyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVBhcnNlciB9IGZyb20gJy4vcGFyc2VyLWJ1aWxkZXItYmFzZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcGxldGlvblBhcnNlcihzZXJ2aWNlcykge1xuICAgIGNvbnN0IGdyYW1tYXIgPSBzZXJ2aWNlcy5HcmFtbWFyO1xuICAgIGNvbnN0IGxleGVyID0gc2VydmljZXMucGFyc2VyLkxleGVyO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBMYW5naXVtQ29tcGxldGlvblBhcnNlcihzZXJ2aWNlcyk7XG4gICAgY3JlYXRlUGFyc2VyKGdyYW1tYXIsIHBhcnNlciwgbGV4ZXIuZGVmaW5pdGlvbik7XG4gICAgcGFyc2VyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHBhcnNlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBsZXRpb24tcGFyc2VyLWJ1aWxkZXIuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBMYW5naXVtUGFyc2VyIH0gZnJvbSAnLi9sYW5naXVtLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tICcuL3BhcnNlci1idWlsZGVyLWJhc2UuanMnO1xuLyoqXG4gKiBDcmVhdGUgYW5kIGZpbmFsaXplIGEgTGFuZ2l1bSBwYXJzZXIuIFRoZSBwYXJzZXIgcnVsZXMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZ3JhbW1hciwgd2hpY2ggaXNcbiAqIGF2YWlsYWJsZSBhdCBgc2VydmljZXMuR3JhbW1hcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYW5naXVtUGFyc2VyKHNlcnZpY2VzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcHJlcGFyZUxhbmdpdW1QYXJzZXIoc2VydmljZXMpO1xuICAgIHBhcnNlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBwYXJzZXI7XG59XG4vKipcbiAqIENyZWF0ZSBhIExhbmdpdW0gcGFyc2VyIHdpdGhvdXQgZmluYWxpemluZyBpdC4gVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3QgbW9yZSBkZXRhaWxlZCBlcnJvclxuICogaW5mb3JtYXRpb24gd2hlbiB0aGUgcGFyc2VyIGlzIGluaXRpYWxseSB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGFuZ2l1bVBhcnNlcihzZXJ2aWNlcykge1xuICAgIGNvbnN0IGdyYW1tYXIgPSBzZXJ2aWNlcy5HcmFtbWFyO1xuICAgIGNvbnN0IGxleGVyID0gc2VydmljZXMucGFyc2VyLkxleGVyO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBMYW5naXVtUGFyc2VyKHNlcnZpY2VzKTtcbiAgICByZXR1cm4gY3JlYXRlUGFyc2VyKGdyYW1tYXIsIHBhcnNlciwgbGV4ZXIuZGVmaW5pdGlvbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgTGV4ZXIgfSBmcm9tICdjaGV2cm90YWluJztcbmltcG9ydCB7IGlzS2V5d29yZCwgaXNQYXJzZXJSdWxlLCBpc1Rlcm1pbmFsUnVsZSB9IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IHN0cmVhbUFsbENvbnRlbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGdldEFsbFJlYWNoYWJsZVJ1bGVzLCB0ZXJtaW5hbFJlZ2V4IH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5pbXBvcnQgeyBnZXRDYXNlSW5zZW5zaXRpdmVQYXR0ZXJuLCBpc1doaXRlc3BhY2UsIHBhcnRpYWxNYXRjaGVzIH0gZnJvbSAnLi4vdXRpbHMvcmVnZXhwLXV0aWxzLmpzJztcbmltcG9ydCB7IHN0cmVhbSB9IGZyb20gJy4uL3V0aWxzL3N0cmVhbS5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFRva2VuQnVpbGRlciB7XG4gICAgYnVpbGRUb2tlbnMoZ3JhbW1hciwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCByZWFjaGFibGVSdWxlcyA9IHN0cmVhbShnZXRBbGxSZWFjaGFibGVSdWxlcyhncmFtbWFyLCBmYWxzZSkpO1xuICAgICAgICBjb25zdCB0ZXJtaW5hbFRva2VucyA9IHRoaXMuYnVpbGRUZXJtaW5hbFRva2VucyhyZWFjaGFibGVSdWxlcyk7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuYnVpbGRLZXl3b3JkVG9rZW5zKHJlYWNoYWJsZVJ1bGVzLCB0ZXJtaW5hbFRva2Vucywgb3B0aW9ucyk7XG4gICAgICAgIHRlcm1pbmFsVG9rZW5zLmZvckVhY2godGVybWluYWxUb2tlbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGVybWluYWxUb2tlbi5QQVRURVJOO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnb2JqZWN0JyAmJiBwYXR0ZXJuICYmICd0ZXN0JyBpbiBwYXR0ZXJuICYmIGlzV2hpdGVzcGFjZShwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIHRva2Vucy51bnNoaWZ0KHRlcm1pbmFsVG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godGVybWluYWxUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgRU9GIHRva2VuIGV4cGxpY2l0bHkuXG4gICAgICAgIC8vIEl0IGlzIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIHRva2VuIHN0cmVhbS5cbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gICAgYnVpbGRUZXJtaW5hbFRva2VucyhydWxlcykge1xuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGlzVGVybWluYWxSdWxlKS5maWx0ZXIoZSA9PiAhZS5mcmFnbWVudClcbiAgICAgICAgICAgIC5tYXAodGVybWluYWwgPT4gdGhpcy5idWlsZFRlcm1pbmFsVG9rZW4odGVybWluYWwpKS50b0FycmF5KCk7XG4gICAgfVxuICAgIGJ1aWxkVGVybWluYWxUb2tlbih0ZXJtaW5hbCkge1xuICAgICAgICBjb25zdCByZWdleCA9IHRlcm1pbmFsUmVnZXgodGVybWluYWwpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5yZXF1aXJlc0N1c3RvbVBhdHRlcm4ocmVnZXgpID8gdGhpcy5yZWdleFBhdHRlcm5GdW5jdGlvbihyZWdleCkgOiByZWdleDtcbiAgICAgICAgY29uc3QgdG9rZW5UeXBlID0ge1xuICAgICAgICAgICAgbmFtZTogdGVybWluYWwubmFtZSxcbiAgICAgICAgICAgIFBBVFRFUk46IHBhdHRlcm4sXG4gICAgICAgICAgICBMSU5FX0JSRUFLUzogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGVybWluYWwuaGlkZGVuKSB7XG4gICAgICAgICAgICAvLyBPbmx5IHNraXAgdG9rZW5zIHRoYXQgYXJlIGFibGUgdG8gYWNjZXB0IHdoaXRlc3BhY2VcbiAgICAgICAgICAgIHRva2VuVHlwZS5HUk9VUCA9IGlzV2hpdGVzcGFjZShyZWdleCkgPyBMZXhlci5TS0lQUEVEIDogJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuVHlwZTtcbiAgICB9XG4gICAgcmVxdWlyZXNDdXN0b21QYXR0ZXJuKHJlZ2V4KSB7XG4gICAgICAgIGlmIChyZWdleC5mbGFncy5pbmNsdWRlcygndScpKSB7XG4gICAgICAgICAgICAvLyBVbmljb2RlIHJlZ2V4ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgQ2hldnJvdGFpbi5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJlZ2V4LnNvdXJjZS5pbmNsdWRlcygnPzw9JykgfHwgcmVnZXguc291cmNlLmluY2x1ZGVzKCc/PCEnKSkge1xuICAgICAgICAgICAgLy8gTmVnYXRpdmUgYW5kIHBvc2l0aXZlIGxvb2tiZWhpbmQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgQ2hldnJvdGFpbiB5ZXQuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdleFBhdHRlcm5GdW5jdGlvbihyZWdleCkge1xuICAgICAgICBjb25zdCBzdGlja3lSZWdleCA9IG5ldyBSZWdFeHAocmVnZXgsIHJlZ2V4LmZsYWdzICsgJ3knKTtcbiAgICAgICAgcmV0dXJuICh0ZXh0LCBvZmZzZXQpID0+IHtcbiAgICAgICAgICAgIHN0aWNreVJlZ2V4Lmxhc3RJbmRleCA9IG9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBzdGlja3lSZWdleC5leGVjKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGV4ZWNSZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGJ1aWxkS2V5d29yZFRva2VucyhydWxlcywgdGVybWluYWxUb2tlbnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGVzXG4gICAgICAgICAgICAvLyBXZSBmaWx0ZXIgYnkgcGFyc2VyIHJ1bGVzLCBzaW5jZSBrZXl3b3JkcyBpbiB0ZXJtaW5hbCBydWxlcyBnZXQgdHJhbnNmb3JtZWQgaW50byByZWdleCBhbmQgYXJlIG5vdCBhY3R1YWwgdG9rZW5zXG4gICAgICAgICAgICAuZmlsdGVyKGlzUGFyc2VyUnVsZSlcbiAgICAgICAgICAgIC5mbGF0TWFwKHJ1bGUgPT4gc3RyZWFtQWxsQ29udGVudHMocnVsZSkuZmlsdGVyKGlzS2V5d29yZCkpXG4gICAgICAgICAgICAuZGlzdGluY3QoZSA9PiBlLnZhbHVlKS50b0FycmF5KClcbiAgICAgICAgICAgIC8vIFNvcnQga2V5d29yZHMgYnkgZGVzY2VuZGluZyBsZW5ndGhcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnZhbHVlLmxlbmd0aCAtIGEudmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgLm1hcChrZXl3b3JkID0+IHRoaXMuYnVpbGRLZXl3b3JkVG9rZW4oa2V5d29yZCwgdGVybWluYWxUb2tlbnMsIEJvb2xlYW4ob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhc2VJbnNlbnNpdGl2ZSkpKTtcbiAgICB9XG4gICAgYnVpbGRLZXl3b3JkVG9rZW4oa2V5d29yZCwgdGVybWluYWxUb2tlbnMsIGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZToga2V5d29yZC52YWx1ZSxcbiAgICAgICAgICAgIFBBVFRFUk46IHRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihrZXl3b3JkLCBjYXNlSW5zZW5zaXRpdmUpLFxuICAgICAgICAgICAgTE9OR0VSX0FMVDogdGhpcy5maW5kTG9uZ2VyQWx0KGtleXdvcmQsIHRlcm1pbmFsVG9rZW5zKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBidWlsZEtleXdvcmRQYXR0ZXJuKGtleXdvcmQsIGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAgICByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID9cbiAgICAgICAgICAgIG5ldyBSZWdFeHAoZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybihrZXl3b3JkLnZhbHVlKSkgOlxuICAgICAgICAgICAga2V5d29yZC52YWx1ZTtcbiAgICB9XG4gICAgZmluZExvbmdlckFsdChrZXl3b3JkLCB0ZXJtaW5hbFRva2Vucykge1xuICAgICAgICByZXR1cm4gdGVybWluYWxUb2tlbnMucmVkdWNlKChsb25nZXJBbHRzLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0b2tlbi5QQVRURVJOO1xuICAgICAgICAgICAgaWYgKChwYXR0ZXJuID09PSBudWxsIHx8IHBhdHRlcm4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhdHRlcm4uc291cmNlKSAmJiBwYXJ0aWFsTWF0Y2hlcygnXicgKyBwYXR0ZXJuLnNvdXJjZSArICckJywga2V5d29yZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsb25nZXJBbHRzLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxvbmdlckFsdHM7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbi1idWlsZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgaXNDcm9zc1JlZmVyZW5jZSwgaXNSdWxlQ2FsbCB9IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IGdldENyb3NzUmVmZXJlbmNlVGVybWluYWwsIGdldFJ1bGVUeXBlIH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFZhbHVlQ29udmVydGVyIHtcbiAgICBjb252ZXJ0KGlucHV0LCBjc3ROb2RlKSB7XG4gICAgICAgIGxldCBmZWF0dXJlID0gY3N0Tm9kZS5ncmFtbWFyU291cmNlO1xuICAgICAgICBpZiAoaXNDcm9zc1JlZmVyZW5jZShmZWF0dXJlKSkge1xuICAgICAgICAgICAgZmVhdHVyZSA9IGdldENyb3NzUmVmZXJlbmNlVGVybWluYWwoZmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUnVsZUNhbGwoZmVhdHVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBmZWF0dXJlLnJ1bGUucmVmO1xuICAgICAgICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGNzdCBub2RlIHdhcyBub3QgcGFyc2VkIGJ5IGEgcnVsZS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkNvbnZlcnRlcihydWxlLCBpbnB1dCwgY3N0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcnVuQ29udmVydGVyKHJ1bGUsIGlucHV0LCBjc3ROb2RlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3dpdGNoIChydWxlLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnSU5UJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnRJbnQoaW5wdXQpO1xuICAgICAgICAgICAgY2FzZSAnU1RSSU5HJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnRTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgY2FzZSAnSUQnOiByZXR1cm4gVmFsdWVDb252ZXJ0ZXIuY29udmVydElEKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKChfYSA9IGdldFJ1bGVUeXBlKHJ1bGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnROdW1iZXIoaW5wdXQpO1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiBWYWx1ZUNvbnZlcnRlci5jb252ZXJ0Qm9vbGVhbihpbnB1dCk7XG4gICAgICAgICAgICBjYXNlICdiaWdpbnQnOiByZXR1cm4gVmFsdWVDb252ZXJ0ZXIuY29udmVydEJpZ2ludChpbnB1dCk7XG4gICAgICAgICAgICBjYXNlICdkYXRlJzogcmV0dXJuIFZhbHVlQ29udmVydGVyLmNvbnZlcnREYXRlKGlucHV0KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCB2YXIgVmFsdWVDb252ZXJ0ZXI7XG4oZnVuY3Rpb24gKFZhbHVlQ29udmVydGVyKSB7XG4gICAgZnVuY3Rpb24gY29udmVydFN0cmluZyhpbnB1dCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaW5wdXQubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW5wdXQuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMxID0gaW5wdXQuY2hhckF0KCsraSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbnZlcnRFc2NhcGVDaGFyYWN0ZXIoYzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydFN0cmluZyA9IGNvbnZlcnRTdHJpbmc7XG4gICAgZnVuY3Rpb24gY29udmVydEVzY2FwZUNoYXJhY3RlcihjaGFyKSB7XG4gICAgICAgIHN3aXRjaCAoY2hhcikge1xuICAgICAgICAgICAgY2FzZSAnYic6IHJldHVybiAnXFxiJztcbiAgICAgICAgICAgIGNhc2UgJ2YnOiByZXR1cm4gJ1xcZic7XG4gICAgICAgICAgICBjYXNlICduJzogcmV0dXJuICdcXG4nO1xuICAgICAgICAgICAgY2FzZSAncic6IHJldHVybiAnXFxyJztcbiAgICAgICAgICAgIGNhc2UgJ3QnOiByZXR1cm4gJ1xcdCc7XG4gICAgICAgICAgICBjYXNlICd2JzogcmV0dXJuICdcXHYnO1xuICAgICAgICAgICAgY2FzZSAnMCc6IHJldHVybiAnXFwwJztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBjaGFyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnZlcnRJRChpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckF0KDApID09PSAnXicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydElEID0gY29udmVydElEO1xuICAgIGZ1bmN0aW9uIGNvbnZlcnRJbnQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0KTtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydEludCA9IGNvbnZlcnRJbnQ7XG4gICAgZnVuY3Rpb24gY29udmVydEJpZ2ludChpbnB1dCkge1xuICAgICAgICByZXR1cm4gQmlnSW50KGlucHV0KTtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydEJpZ2ludCA9IGNvbnZlcnRCaWdpbnQ7XG4gICAgZnVuY3Rpb24gY29udmVydERhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGlucHV0KTtcbiAgICB9XG4gICAgVmFsdWVDb252ZXJ0ZXIuY29udmVydERhdGUgPSBjb252ZXJ0RGF0ZTtcbiAgICBmdW5jdGlvbiBjb252ZXJ0TnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQpO1xuICAgIH1cbiAgICBWYWx1ZUNvbnZlcnRlci5jb252ZXJ0TnVtYmVyID0gY29udmVydE51bWJlcjtcbiAgICBmdW5jdGlvbiBjb252ZXJ0Qm9vbGVhbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIH1cbiAgICBWYWx1ZUNvbnZlcnRlci5jb252ZXJ0Qm9vbGVhbiA9IGNvbnZlcnRCb29sZWFuO1xufSkoVmFsdWVDb252ZXJ0ZXIgfHwgKFZhbHVlQ29udmVydGVyID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbHVlLWNvbnZlcnRlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xubGV0IF9yYWw7XG5mdW5jdGlvbiBSQUwoKSB7XG4gICAgaWYgKF9yYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJ1bnRpbWUgYWJzdHJhY3Rpb24gbGF5ZXIgaW5zdGFsbGVkYCk7XG4gICAgfVxuICAgIHJldHVybiBfcmFsO1xufVxuKGZ1bmN0aW9uIChSQUwpIHtcbiAgICBmdW5jdGlvbiBpbnN0YWxsKHJhbCkge1xuICAgICAgICBpZiAocmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBwcm92aWRlZGApO1xuICAgICAgICB9XG4gICAgICAgIF9yYWwgPSByYWw7XG4gICAgfVxuICAgIFJBTC5pbnN0YWxsID0gaW5zdGFsbDtcbn0pKFJBTCB8fCAoUkFMID0ge30pKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJBTDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnN0cmluZ0FycmF5ID0gZXhwb3J0cy5hcnJheSA9IGV4cG9ydHMuZnVuYyA9IGV4cG9ydHMuZXJyb3IgPSBleHBvcnRzLm51bWJlciA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy5ib29sZWFuID0gdm9pZCAwO1xuZnVuY3Rpb24gYm9vbGVhbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG59XG5leHBvcnRzLmJvb2xlYW4gPSBib29sZWFuO1xuZnVuY3Rpb24gc3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbmZ1bmN0aW9uIG51bWJlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyO1xufVxuZXhwb3J0cy5udW1iZXIgPSBudW1iZXI7XG5mdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yO1xufVxuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuZnVuY3Rpb24gZnVuYyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmZ1bmMgPSBmdW5jO1xuZnVuY3Rpb24gYXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnRzLmFycmF5ID0gYXJyYXk7XG5mdW5jdGlvbiBzdHJpbmdBcnJheSh2YWx1ZSkge1xuICAgIHJldHVybiBhcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoZWxlbSA9PiBzdHJpbmcoZWxlbSkpO1xufVxuZXhwb3J0cy5zdHJpbmdBcnJheSA9IHN0cmluZ0FycmF5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRW1pdHRlciA9IGV4cG9ydHMuRXZlbnQgPSB2b2lkIDA7XG5jb25zdCByYWxfMSA9IHJlcXVpcmUoXCIuL3JhbFwiKTtcbnZhciBFdmVudDtcbihmdW5jdGlvbiAoRXZlbnQpIHtcbiAgICBjb25zdCBfZGlzcG9zYWJsZSA9IHsgZGlzcG9zZSgpIHsgfSB9O1xuICAgIEV2ZW50Lk5vbmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfZGlzcG9zYWJsZTsgfTtcbn0pKEV2ZW50IHx8IChleHBvcnRzLkV2ZW50ID0gRXZlbnQgPSB7fSkpO1xuY2xhc3MgQ2FsbGJhY2tMaXN0IHtcbiAgICBhZGQoY2FsbGJhY2ssIGNvbnRleHQgPSBudWxsLCBidWNrZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1Y2tldCkpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5wdXNoKHsgZGlzcG9zZTogKCkgPT4gdGhpcy5yZW1vdmUoY2FsbGJhY2ssIGNvbnRleHQpIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZShjYWxsYmFjaywgY29udGV4dCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZm91bmRDYWxsYmFja1dpdGhEaWZmZXJlbnRDb250ZXh0ID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9jYWxsYmFja3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRzW2ldID09PSBjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxiYWNrICYgY29udGV4dCBtYXRjaCA9PiByZW1vdmUgaXRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZENhbGxiYWNrV2l0aERpZmZlcmVudENvbnRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRDYWxsYmFja1dpdGhEaWZmZXJlbnRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1doZW4gYWRkaW5nIGEgbGlzdGVuZXIgd2l0aCBhIGNvbnRleHQsIHlvdSBzaG91bGQgcmVtb3ZlIGl0IHdpdGggdGhlIHNhbWUgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGludm9rZSguLi5hcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gW10sIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5zbGljZSgwKSwgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cy5zbGljZSgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChjYWxsYmFja3NbaV0uYXBwbHkoY29udGV4dHNbaV0sIGFyZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAoMCwgcmFsXzEuZGVmYXVsdCkoKS5jb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fY2FsbGJhY2tzIHx8IHRoaXMuX2NhbGxiYWNrcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY29udGV4dHMgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuY2xhc3MgRW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IoX29wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb3IgdGhlIHB1YmxpYyB0byBhbGxvdyB0byBzdWJzY3JpYmVcbiAgICAgKiB0byBldmVudHMgZnJvbSB0aGlzIEVtaXR0ZXJcbiAgICAgKi9cbiAgICBnZXQgZXZlbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50ID0gKGxpc3RlbmVyLCB0aGlzQXJncywgZGlzcG9zYWJsZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSBuZXcgQ2FsbGJhY2tMaXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkICYmIHRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5hZGQobGlzdGVuZXIsIHRoaXNBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzcG9zYWJsZSBpcyBkaXNwb3NlZCBhZnRlciBlbWl0dGVyIGlzIGRpc3Bvc2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5yZW1vdmUobGlzdGVuZXIsIHRoaXNBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kaXNwb3NlID0gRW1pdHRlci5fbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUgJiYgdGhpcy5fY2FsbGJhY2tzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRpc3Bvc2FibGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwb3NhYmxlcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG8gYmUga2VwdCBwcml2YXRlIHRvIGZpcmUgYW4gZXZlbnQgdG9cbiAgICAgKiBzdWJzY3JpYmVyc1xuICAgICAqL1xuICAgIGZpcmUoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLmludm9rZS5jYWxsKHRoaXMuX2NhbGxiYWNrcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLkVtaXR0ZXIgPSBFbWl0dGVyO1xuRW1pdHRlci5fbm9vcCA9IGZ1bmN0aW9uICgpIHsgfTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UgPSBleHBvcnRzLkNhbmNlbGxhdGlvblRva2VuID0gdm9pZCAwO1xuY29uc3QgcmFsXzEgPSByZXF1aXJlKFwiLi9yYWxcIik7XG5jb25zdCBJcyA9IHJlcXVpcmUoXCIuL2lzXCIpO1xuY29uc3QgZXZlbnRzXzEgPSByZXF1aXJlKFwiLi9ldmVudHNcIik7XG52YXIgQ2FuY2VsbGF0aW9uVG9rZW47XG4oZnVuY3Rpb24gKENhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiBldmVudHNfMS5FdmVudC5Ob25lXG4gICAgfSk7XG4gICAgQ2FuY2VsbGF0aW9uVG9rZW4uQ2FuY2VsbGVkID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDogZXZlbnRzXzEuRXZlbnQuTm9uZVxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGlzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICYmIChjYW5kaWRhdGUgPT09IENhbmNlbGxhdGlvblRva2VuLk5vbmVcbiAgICAgICAgICAgIHx8IGNhbmRpZGF0ZSA9PT0gQ2FuY2VsbGF0aW9uVG9rZW4uQ2FuY2VsbGVkXG4gICAgICAgICAgICB8fCAoSXMuYm9vbGVhbihjYW5kaWRhdGUuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQpICYmICEhY2FuZGlkYXRlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSk7XG4gICAgfVxuICAgIENhbmNlbGxhdGlvblRva2VuLmlzID0gaXM7XG59KShDYW5jZWxsYXRpb25Ub2tlbiB8fCAoZXhwb3J0cy5DYW5jZWxsYXRpb25Ub2tlbiA9IENhbmNlbGxhdGlvblRva2VuID0ge30pKTtcbmNvbnN0IHNob3J0Y3V0RXZlbnQgPSBPYmplY3QuZnJlZXplKGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xuICAgIGNvbnN0IGhhbmRsZSA9ICgwLCByYWxfMS5kZWZhdWx0KSgpLnRpbWVyLnNldFRpbWVvdXQoY2FsbGJhY2suYmluZChjb250ZXh0KSwgMCk7XG4gICAgcmV0dXJuIHsgZGlzcG9zZSgpIHsgaGFuZGxlLmRpc3Bvc2UoKTsgfSB9O1xufSk7XG5jbGFzcyBNdXRhYmxlVG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9pc0NhbmNlbGxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlci5maXJlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ7XG4gICAgfVxuICAgIGdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hvcnRjdXRFdmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2VtaXR0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXR0ZXIgPSBuZXcgZXZlbnRzXzEuRW1pdHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbWl0dGVyLmV2ZW50O1xuICAgIH1cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fZW1pdHRlcikge1xuICAgICAgICAgICAgdGhpcy5fZW1pdHRlci5kaXNwb3NlKCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0dGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuY2xhc3MgQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2Uge1xuICAgIGdldCB0b2tlbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90b2tlbikge1xuICAgICAgICAgICAgLy8gYmUgbGF6eSBhbmQgY3JlYXRlIHRoZSB0b2tlbiBvbmx5IHdoZW5cbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IG5lZWRlZFxuICAgICAgICAgICAgdGhpcy5fdG9rZW4gPSBuZXcgTXV0YWJsZVRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5fdG9rZW4pIHtcbiAgICAgICAgICAgIC8vIHNhdmUgYW4gb2JqZWN0IGJ5IHJldHVybmluZyB0aGUgZGVmYXVsdFxuICAgICAgICAgICAgLy8gY2FuY2VsbGVkIHRva2VuIHdoZW4gY2FuY2VsbGF0aW9uIGhhcHBlbnNcbiAgICAgICAgICAgIC8vIGJlZm9yZSBzb21lb25lIGFza3MgZm9yIHRoZSB0b2tlblxuICAgICAgICAgICAgdGhpcy5fdG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5DYW5jZWxsZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90b2tlbi5jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgdG8gaW5pdGlhbGl6ZSB3aXRoIGFuIGVtcHR5IHRva2VuIGlmIHdlIGhhZCBub25lXG4gICAgICAgICAgICB0aGlzLl90b2tlbiA9IENhbmNlbGxhdGlvblRva2VuLk5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBNdXRhYmxlVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IGRpc3Bvc2VcbiAgICAgICAgICAgIHRoaXMuX3Rva2VuLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UgPSBDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTtcbiIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjQgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuZXhwb3J0ICogZnJvbSAndnNjb2RlLWpzb25ycGMvbGliL2NvbW1vbi9jYW5jZWxsYXRpb24uanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FuY2VsbGF0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4sIENhbmNlbGxhdGlvblRva2VuU291cmNlIH0gZnJvbSAnLi4vdXRpbHMvY2FuY2VsbGF0aW9uLmpzJztcbi8qKlxuICogRGVsYXlzIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgY29kZSB0byB0aGUgbmV4dCB0aWNrIG9mIHRoZSBldmVudCBsb29wLlxuICogRG9uJ3QgY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSBpbiBhIHRpZ2h0IGxvb3AgdG8gcHJldmVudCB0b28gbWFueSBwcm9taXNlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxheU5leHRUaWNrKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgLy8gSW4gY2FzZSB3ZSBhcmUgcnVubmluZyBpbiBhIG5vbi1ub2RlIGVudmlyb25tZW50LCBgc2V0SW1tZWRpYXRlYCBpc24ndCBhdmFpbGFibGUuXG4gICAgICAgIC8vIFVzaW5nIGBzZXRUaW1lb3V0YCBvZiB0aGUgYnJvd3NlciBBUEkgYWNjb21wbGlzaGVzIHRoZSBzYW1lIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5sZXQgbGFzdFRpY2sgPSAwO1xubGV0IGdsb2JhbEludGVycnVwdGlvblBlcmlvZCA9IDEwO1xuLyoqXG4gKiBSZXNldCB0aGUgZ2xvYmFsIGludGVycnVwdGlvbiBwZXJpb2QgYW5kIGNyZWF0ZSBhIGNhbmNlbGxhdGlvbiB0b2tlbiBzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydENhbmNlbGFibGVPcGVyYXRpb24oKSB7XG4gICAgbGFzdFRpY2sgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBuZXcgQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UoKTtcbn1cbi8qKlxuICogQ2hhbmdlIHRoZSBwZXJpb2QgZHVyYXRpb24gZm9yIGBpbnRlcnJ1cHRBbmRDaGVja2AgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMG1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJydXB0aW9uUGVyaW9kKHBlcmlvZCkge1xuICAgIGdsb2JhbEludGVycnVwdGlvblBlcmlvZCA9IHBlcmlvZDtcbn1cbi8qKlxuICogVGhpcyBzeW1ib2wgbWF5IGJlIHRocm93biBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dCBieSBhbnkgTGFuZ2l1bSBzZXJ2aWNlIHRoYXQgcmVjZWl2ZXNcbiAqIGEgYENhbmNlbGxhdGlvblRva2VuYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHN1Y2ggYSBzZXJ2aWNlIGlzIHJlamVjdGVkIHdpdGhcbiAqIHRoaXMgc3ltYm9sIGFzIHJlamVjdGlvbiByZWFzb24uXG4gKi9cbmV4cG9ydCBjb25zdCBPcGVyYXRpb25DYW5jZWxsZWQgPSBTeW1ib2woJ09wZXJhdGlvbkNhbmNlbGxlZCcpO1xuLyoqXG4gKiBVc2UgdGhpcyBpbiBhIGBjYXRjaGAgYmxvY2sgdG8gY2hlY2sgd2hldGhlciB0aGUgdGhyb3duIG9iamVjdCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3BlcmF0aW9uXG4gKiBoYXMgYmVlbiBjYW5jZWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09wZXJhdGlvbkNhbmNlbGxlZChlcnIpIHtcbiAgICByZXR1cm4gZXJyID09PSBPcGVyYXRpb25DYW5jZWxsZWQ7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0d28gdGhpbmdzOlxuICogIDEuIENoZWNrIHRoZSBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIG9yIHRvIGBzdGFydENhbmNlbGFibGVPcGVyYXRpb25gLiBJZiB0aGUgcHJlZGVmaW5lZFxuICogICAgIHBlcmlvZCAoY29uZmlndXJlZCB3aXRoIGBzZXRJbnRlcnJ1cHRpb25QZXJpb2RgKSBpcyBleGNlZWRlZCwgZXhlY3V0aW9uIGlzIGRlbGF5ZWQgd2l0aCBgZGVsYXlOZXh0VGlja2AuXG4gKiAgMi4gSWYgdGhlIHByZWRlZmluZWQgcGVyaW9kIGlzIG5vdCBtZXQgeWV0IG9yIGV4ZWN1dGlvbiBpcyByZXN1bWVkIGFmdGVyIGFuIGludGVycnVwdGlvbiwgdGhlIGdpdmVuIGNhbmNlbGxhdGlvblxuICogICAgIHRva2VuIGlzIGNoZWNrZWQsIGFuZCBpZiBjYW5jZWxsYXRpb24gaXMgcmVxdWVzdGVkLCBgT3BlcmF0aW9uQ2FuY2VsZWRgIGlzIHRocm93bi5cbiAqXG4gKiBBbGwgc2VydmljZXMgaW4gTGFuZ2l1bSB0aGF0IHJlY2VpdmUgYSBgQ2FuY2VsbGF0aW9uVG9rZW5gIG1heSBwb3RlbnRpYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24sIHNvIHRoZVxuICogYENhbmNlbGxhdGlvblRva2VuYCBtdXN0IGJlIGNhdWdodCAod2l0aCBhbiBgYXN5bmNgIHRyeS1jYXRjaCBibG9jayBvciBhIGBjYXRjaGAgY2FsbGJhY2sgYXR0YWNoZWQgdG9cbiAqIHRoZSBwcm9taXNlKSB0byBhdm9pZCB0aGF0IGV2ZW50IGJlaW5nIGV4cG9zZWQgYXMgYW4gZXJyb3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnRlcnJ1cHRBbmRDaGVjayh0b2tlbikge1xuICAgIGlmICh0b2tlbiA9PT0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICAvLyBFYXJseSBleGl0IGluIGNhc2UgY2FuY2VsbGF0aW9uIHdhcyBkaXNhYmxlZCBieSB0aGUgY2FsbGVyXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IERhdGUubm93KCk7XG4gICAgaWYgKGN1cnJlbnQgLSBsYXN0VGljayA+PSBnbG9iYWxJbnRlcnJ1cHRpb25QZXJpb2QpIHtcbiAgICAgICAgbGFzdFRpY2sgPSBjdXJyZW50O1xuICAgICAgICBhd2FpdCBkZWxheU5leHRUaWNrKCk7XG4gICAgfVxuICAgIGlmICh0b2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgICAgICB0aHJvdyBPcGVyYXRpb25DYW5jZWxsZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBTaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlZmVycmVkIHBhdHRlcm4uXG4gKiBBbiBvYmplY3QgdGhhdCBleHBvc2VzIGEgcHJvbWlzZSBhbmQgZnVuY3Rpb25zIHRvIHJlc29sdmUgYW5kIHJlamVjdCBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmVycmVkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlID0gKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21pc2UtdXRpbHMuanMubWFwIiwKICAgICIvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4ndXNlIHN0cmljdCc7XG5jbGFzcyBGdWxsVGV4dERvY3VtZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih1cmksIGxhbmd1YWdlSWQsIHZlcnNpb24sIGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5fdXJpID0gdXJpO1xuICAgICAgICB0aGlzLl9sYW5ndWFnZUlkID0gbGFuZ3VhZ2VJZDtcbiAgICAgICAgdGhpcy5fdmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLl9saW5lT2Zmc2V0cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IHVyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VyaTtcbiAgICB9XG4gICAgZ2V0IGxhbmd1YWdlSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZUlkO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuICAgIGdldFRleHQocmFuZ2UpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMub2Zmc2V0QXQocmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5vZmZzZXRBdChyYW5nZS5lbmQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50O1xuICAgIH1cbiAgICB1cGRhdGUoY2hhbmdlcywgdmVyc2lvbikge1xuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoRnVsbFRleHREb2N1bWVudC5pc0luY3JlbWVudGFsKGNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlcyBzdXJlIHN0YXJ0IGlzIGJlZm9yZSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGdldFdlbGxmb3JtZWRSYW5nZShjaGFuZ2UucmFuZ2UpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjb250ZW50XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLm9mZnNldEF0KHJhbmdlLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSB0aGlzLm9mZnNldEF0KHJhbmdlLmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudCA9IHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsIHN0YXJ0T2Zmc2V0KSArIGNoYW5nZS50ZXh0ICsgdGhpcy5fY29udGVudC5zdWJzdHJpbmcoZW5kT2Zmc2V0LCB0aGlzLl9jb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBvZmZzZXRzXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRMaW5lID0gTWF0aC5tYXgocmFuZ2Uuc3RhcnQubGluZSwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kTGluZSA9IE1hdGgubWF4KHJhbmdlLmVuZC5saW5lLCAwKTtcbiAgICAgICAgICAgICAgICBsZXQgbGluZU9mZnNldHMgPSB0aGlzLl9saW5lT2Zmc2V0cztcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRlZExpbmVPZmZzZXRzID0gY29tcHV0ZUxpbmVPZmZzZXRzKGNoYW5nZS50ZXh0LCBmYWxzZSwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChlbmRMaW5lIC0gc3RhcnRMaW5lID09PSBhZGRlZExpbmVPZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWRkZWRMaW5lT2Zmc2V0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldHNbaSArIHN0YXJ0TGluZSArIDFdID0gYWRkZWRMaW5lT2Zmc2V0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkTGluZU9mZnNldHMubGVuZ3RoIDwgMTAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXRzLnNwbGljZShzdGFydExpbmUgKyAxLCBlbmRMaW5lIC0gc3RhcnRMaW5lLCAuLi5hZGRlZExpbmVPZmZzZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gYXZvaWQgdG9vIG1hbnkgYXJndW1lbnRzIGZvciBzcGxpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gbGluZU9mZnNldHMgPSBsaW5lT2Zmc2V0cy5zbGljZSgwLCBzdGFydExpbmUgKyAxKS5jb25jYXQoYWRkZWRMaW5lT2Zmc2V0cywgbGluZU9mZnNldHMuc2xpY2UoZW5kTGluZSArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRMaW5lICsgMSArIGFkZGVkTGluZU9mZnNldHMubGVuZ3RoLCBsZW4gPSBsaW5lT2Zmc2V0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldHNbaV0gPSBsaW5lT2Zmc2V0c1tpXSArIGRpZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChGdWxsVGV4dERvY3VtZW50LmlzRnVsbChjaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudCA9IGNoYW5nZS50ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIH1cbiAgICBnZXRMaW5lT2Zmc2V0cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xpbmVPZmZzZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzID0gY29tcHV0ZUxpbmVPZmZzZXRzKHRoaXMuX2NvbnRlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9saW5lT2Zmc2V0cztcbiAgICB9XG4gICAgcG9zaXRpb25BdChvZmZzZXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gTWF0aC5tYXgoTWF0aC5taW4ob2Zmc2V0LCB0aGlzLl9jb250ZW50Lmxlbmd0aCksIDApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0cyA9IHRoaXMuZ2V0TGluZU9mZnNldHMoKTtcbiAgICAgICAgbGV0IGxvdyA9IDAsIGhpZ2ggPSBsaW5lT2Zmc2V0cy5sZW5ndGg7XG4gICAgICAgIGlmIChoaWdoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBsaW5lOiAwLCBjaGFyYWN0ZXI6IG9mZnNldCB9O1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICAgICAgICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXRzW21pZF0gPiBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb3cgaXMgdGhlIGxlYXN0IHggZm9yIHdoaWNoIHRoZSBsaW5lIG9mZnNldCBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBvZmZzZXRcbiAgICAgICAgLy8gb3IgYXJyYXkubGVuZ3RoIGlmIG5vIGxpbmUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IG9mZnNldFxuICAgICAgICBjb25zdCBsaW5lID0gbG93IC0gMTtcbiAgICAgICAgb2Zmc2V0ID0gdGhpcy5lbnN1cmVCZWZvcmVFT0wob2Zmc2V0LCBsaW5lT2Zmc2V0c1tsaW5lXSk7XG4gICAgICAgIHJldHVybiB7IGxpbmUsIGNoYXJhY3Rlcjogb2Zmc2V0IC0gbGluZU9mZnNldHNbbGluZV0gfTtcbiAgICB9XG4gICAgb2Zmc2V0QXQocG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldHMgPSB0aGlzLmdldExpbmVPZmZzZXRzKCk7XG4gICAgICAgIGlmIChwb3NpdGlvbi5saW5lID49IGxpbmVPZmZzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uLmxpbmUgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gbGluZU9mZnNldHNbcG9zaXRpb24ubGluZV07XG4gICAgICAgIGlmIChwb3NpdGlvbi5jaGFyYWN0ZXIgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpbmVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dExpbmVPZmZzZXQgPSAocG9zaXRpb24ubGluZSArIDEgPCBsaW5lT2Zmc2V0cy5sZW5ndGgpID8gbGluZU9mZnNldHNbcG9zaXRpb24ubGluZSArIDFdIDogdGhpcy5fY29udGVudC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGgubWluKGxpbmVPZmZzZXQgKyBwb3NpdGlvbi5jaGFyYWN0ZXIsIG5leHRMaW5lT2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlQmVmb3JlRU9MKG9mZnNldCwgbGluZU9mZnNldCk7XG4gICAgfVxuICAgIGVuc3VyZUJlZm9yZUVPTChvZmZzZXQsIGxpbmVPZmZzZXQpIHtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA+IGxpbmVPZmZzZXQgJiYgaXNFT0wodGhpcy5fY29udGVudC5jaGFyQ29kZUF0KG9mZnNldCAtIDEpKSkge1xuICAgICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gICAgZ2V0IGxpbmVDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGg7XG4gICAgfVxuICAgIHN0YXRpYyBpc0luY3JlbWVudGFsKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgJiYgY2FuZGlkYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgY2FuZGlkYXRlLnRleHQgPT09ICdzdHJpbmcnICYmIGNhbmRpZGF0ZS5yYW5nZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAoY2FuZGlkYXRlLnJhbmdlTGVuZ3RoID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNhbmRpZGF0ZS5yYW5nZUxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNGdWxsKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgJiYgY2FuZGlkYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgY2FuZGlkYXRlLnRleHQgPT09ICdzdHJpbmcnICYmIGNhbmRpZGF0ZS5yYW5nZSA9PT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZS5yYW5nZUxlbmd0aCA9PT0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCB2YXIgVGV4dERvY3VtZW50O1xuKGZ1bmN0aW9uIChUZXh0RG9jdW1lbnQpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRleHQgZG9jdW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJpIFRoZSBkb2N1bWVudCdzIHVyaS5cbiAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VJZCAgVGhlIGRvY3VtZW50J3MgbGFuZ3VhZ2UgSWQuXG4gICAgICogQHBhcmFtIHZlcnNpb24gVGhlIGRvY3VtZW50J3MgaW5pdGlhbCB2ZXJzaW9uIG51bWJlci5cbiAgICAgKiBAcGFyYW0gY29udGVudCBUaGUgZG9jdW1lbnQncyBjb250ZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZSh1cmksIGxhbmd1YWdlSWQsIHZlcnNpb24sIGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdWxsVGV4dERvY3VtZW50KHVyaSwgbGFuZ3VhZ2VJZCwgdmVyc2lvbiwgY29udGVudCk7XG4gICAgfVxuICAgIFRleHREb2N1bWVudC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhIFRleHREb2N1bWVudCBieSBtb2RpZnlpbmcgaXRzIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IHRvIHVwZGF0ZS4gT25seSBkb2N1bWVudHMgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIGFyZSB2YWxpZCBpbnB1dHMuXG4gICAgICogQHBhcmFtIGNoYW5nZXMgdGhlIGNoYW5nZXMgdG8gYXBwbHkgdG8gdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIHRoZSBjaGFuZ2VzIHZlcnNpb24gZm9yIHRoZSBkb2N1bWVudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBUZXh0RG9jdW1lbnQuIE5vdGU6IFRoYXQncyB0aGUgc2FtZSBkb2N1bWVudCBpbnN0YW5jZSBwYXNzZWQgaW4gYXMgZmlyc3QgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlKGRvY3VtZW50LCBjaGFuZ2VzLCB2ZXJzaW9uKSB7XG4gICAgICAgIGlmIChkb2N1bWVudCBpbnN0YW5jZW9mIEZ1bGxUZXh0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnVwZGF0ZShjaGFuZ2VzLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBUZXh0RG9jdW1lbnQudXBkYXRlID0gdXBkYXRlO1xuICAgIGZ1bmN0aW9uIGFwcGx5RWRpdHMoZG9jdW1lbnQsIGVkaXRzKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBkb2N1bWVudC5nZXRUZXh0KCk7XG4gICAgICAgIGNvbnN0IHNvcnRlZEVkaXRzID0gbWVyZ2VTb3J0KGVkaXRzLm1hcChnZXRXZWxsZm9ybWVkRWRpdCksIChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gYS5yYW5nZS5zdGFydC5saW5lIC0gYi5yYW5nZS5zdGFydC5saW5lO1xuICAgICAgICAgICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5yYW5nZS5zdGFydC5jaGFyYWN0ZXIgLSBiLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkaWZmO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGxhc3RNb2RpZmllZE9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHNwYW5zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBzb3J0ZWRFZGl0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBkb2N1bWVudC5vZmZzZXRBdChlLnJhbmdlLnN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChzdGFydE9mZnNldCA8IGxhc3RNb2RpZmllZE9mZnNldCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3ZlcmxhcHBpbmcgZWRpdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBsYXN0TW9kaWZpZWRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBzcGFucy5wdXNoKHRleHQuc3Vic3RyaW5nKGxhc3RNb2RpZmllZE9mZnNldCwgc3RhcnRPZmZzZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLm5ld1RleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3BhbnMucHVzaChlLm5ld1RleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkT2Zmc2V0ID0gZG9jdW1lbnQub2Zmc2V0QXQoZS5yYW5nZS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIHNwYW5zLnB1c2godGV4dC5zdWJzdHIobGFzdE1vZGlmaWVkT2Zmc2V0KSk7XG4gICAgICAgIHJldHVybiBzcGFucy5qb2luKCcnKTtcbiAgICB9XG4gICAgVGV4dERvY3VtZW50LmFwcGx5RWRpdHMgPSBhcHBseUVkaXRzO1xufSkoVGV4dERvY3VtZW50IHx8IChUZXh0RG9jdW1lbnQgPSB7fSkpO1xuZnVuY3Rpb24gbWVyZ2VTb3J0KGRhdGEsIGNvbXBhcmUpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPD0gMSkge1xuICAgICAgICAvLyBzb3J0ZWRcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHAgPSAoZGF0YS5sZW5ndGggLyAyKSB8IDA7XG4gICAgY29uc3QgbGVmdCA9IGRhdGEuc2xpY2UoMCwgcCk7XG4gICAgY29uc3QgcmlnaHQgPSBkYXRhLnNsaWNlKHApO1xuICAgIG1lcmdlU29ydChsZWZ0LCBjb21wYXJlKTtcbiAgICBtZXJnZVNvcnQocmlnaHQsIGNvbXBhcmUpO1xuICAgIGxldCBsZWZ0SWR4ID0gMDtcbiAgICBsZXQgcmlnaHRJZHggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAobGVmdElkeCA8IGxlZnQubGVuZ3RoICYmIHJpZ2h0SWR4IDwgcmlnaHQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IGNvbXBhcmUobGVmdFtsZWZ0SWR4XSwgcmlnaHRbcmlnaHRJZHhdKTtcbiAgICAgICAgaWYgKHJldCA8PSAwKSB7XG4gICAgICAgICAgICAvLyBzbWFsbGVyX2VxdWFsIC0+IHRha2UgbGVmdCB0byBwcmVzZXJ2ZSBvcmRlclxuICAgICAgICAgICAgZGF0YVtpKytdID0gbGVmdFtsZWZ0SWR4KytdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZ3JlYXRlciAtPiB0YWtlIHJpZ2h0XG4gICAgICAgICAgICBkYXRhW2krK10gPSByaWdodFtyaWdodElkeCsrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAobGVmdElkeCA8IGxlZnQubGVuZ3RoKSB7XG4gICAgICAgIGRhdGFbaSsrXSA9IGxlZnRbbGVmdElkeCsrXTtcbiAgICB9XG4gICAgd2hpbGUgKHJpZ2h0SWR4IDwgcmlnaHQubGVuZ3RoKSB7XG4gICAgICAgIGRhdGFbaSsrXSA9IHJpZ2h0W3JpZ2h0SWR4KytdO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVMaW5lT2Zmc2V0cyh0ZXh0LCBpc0F0TGluZVN0YXJ0LCB0ZXh0T2Zmc2V0ID0gMCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGlzQXRMaW5lU3RhcnQgPyBbdGV4dE9mZnNldF0gOiBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChpc0VPTChjaCkpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgLyogQ2hhckNvZGUuQ2FycmlhZ2VSZXR1cm4gKi8gJiYgaSArIDEgPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID09PSAxMCAvKiBDaGFyQ29kZS5MaW5lRmVlZCAqLykge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRleHRPZmZzZXQgKyBpICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGlzRU9MKGNoYXIpIHtcbiAgICByZXR1cm4gY2hhciA9PT0gMTMgLyogQ2hhckNvZGUuQ2FycmlhZ2VSZXR1cm4gKi8gfHwgY2hhciA9PT0gMTAgLyogQ2hhckNvZGUuTGluZUZlZWQgKi87XG59XG5mdW5jdGlvbiBnZXRXZWxsZm9ybWVkUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgIGNvbnN0IGVuZCA9IHJhbmdlLmVuZDtcbiAgICBpZiAoc3RhcnQubGluZSA+IGVuZC5saW5lIHx8IChzdGFydC5saW5lID09PSBlbmQubGluZSAmJiBzdGFydC5jaGFyYWN0ZXIgPiBlbmQuY2hhcmFjdGVyKSkge1xuICAgICAgICByZXR1cm4geyBzdGFydDogZW5kLCBlbmQ6IHN0YXJ0IH07XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbmZ1bmN0aW9uIGdldFdlbGxmb3JtZWRFZGl0KHRleHRFZGl0KSB7XG4gICAgY29uc3QgcmFuZ2UgPSBnZXRXZWxsZm9ybWVkUmFuZ2UodGV4dEVkaXQucmFuZ2UpO1xuICAgIGlmIChyYW5nZSAhPT0gdGV4dEVkaXQucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgbmV3VGV4dDogdGV4dEVkaXQubmV3VGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRFZGl0O1xufVxuIiwKICAgICJ2YXIgTElCOygoKT0+e1widXNlIHN0cmljdFwiO3ZhciB0PXs0NzA6dD0+e2Z1bmN0aW9uIGUodCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgXCIrSlNPTi5zdHJpbmdpZnkodCkpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIHIsbj1cIlwiLGk9MCxvPS0xLHM9MCxoPTA7aDw9dC5sZW5ndGg7KytoKXtpZihoPHQubGVuZ3RoKXI9dC5jaGFyQ29kZUF0KGgpO2Vsc2V7aWYoNDc9PT1yKWJyZWFrO3I9NDd9aWYoNDc9PT1yKXtpZihvPT09aC0xfHwxPT09cyk7ZWxzZSBpZihvIT09aC0xJiYyPT09cyl7aWYobi5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpfHw0NiE9PW4uY2hhckNvZGVBdChuLmxlbmd0aC0yKSlpZihuLmxlbmd0aD4yKXt2YXIgYT1uLmxhc3RJbmRleE9mKFwiL1wiKTtpZihhIT09bi5sZW5ndGgtMSl7LTE9PT1hPyhuPVwiXCIsaT0wKTppPShuPW4uc2xpY2UoMCxhKSkubGVuZ3RoLTEtbi5sYXN0SW5kZXhPZihcIi9cIiksbz1oLHM9MDtjb250aW51ZX19ZWxzZSBpZigyPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCl7bj1cIlwiLGk9MCxvPWgscz0wO2NvbnRpbnVlfWUmJihuLmxlbmd0aD4wP24rPVwiLy4uXCI6bj1cIi4uXCIsaT0yKX1lbHNlIG4ubGVuZ3RoPjA/bis9XCIvXCIrdC5zbGljZShvKzEsaCk6bj10LnNsaWNlKG8rMSxoKSxpPWgtby0xO289aCxzPTB9ZWxzZSA0Nj09PXImJi0xIT09cz8rK3M6cz0tMX1yZXR1cm4gbn12YXIgbj17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxuPVwiXCIsaT0hMSxvPWFyZ3VtZW50cy5sZW5ndGgtMTtvPj0tMSYmIWk7by0tKXt2YXIgcztvPj0wP3M9YXJndW1lbnRzW29dOih2b2lkIDA9PT10JiYodD1wcm9jZXNzLmN3ZCgpKSxzPXQpLGUocyksMCE9PXMubGVuZ3RoJiYobj1zK1wiL1wiK24saT00Nz09PXMuY2hhckNvZGVBdCgwKSl9cmV0dXJuIG49cihuLCFpKSxpP24ubGVuZ3RoPjA/XCIvXCIrbjpcIi9cIjpuLmxlbmd0aD4wP246XCIuXCJ9LG5vcm1hbGl6ZTpmdW5jdGlvbih0KXtpZihlKHQpLDA9PT10Lmxlbmd0aClyZXR1cm5cIi5cIjt2YXIgbj00Nz09PXQuY2hhckNvZGVBdCgwKSxpPTQ3PT09dC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpO3JldHVybiAwIT09KHQ9cih0LCFuKSkubGVuZ3RofHxufHwodD1cIi5cIiksdC5sZW5ndGg+MCYmaSYmKHQrPVwiL1wiKSxuP1wiL1wiK3Q6dH0saXNBYnNvbHV0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSx0Lmxlbmd0aD4wJiY0Nz09PXQuY2hhckNvZGVBdCgwKX0sam9pbjpmdW5jdGlvbigpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVyblwiLlwiO2Zvcih2YXIgdCxyPTA7cjxhcmd1bWVudHMubGVuZ3RoOysrcil7dmFyIGk9YXJndW1lbnRzW3JdO2UoaSksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1pOnQrPVwiL1wiK2kpfXJldHVybiB2b2lkIDA9PT10P1wiLlwiOm4ubm9ybWFsaXplKHQpfSxyZWxhdGl2ZTpmdW5jdGlvbih0LHIpe2lmKGUodCksZShyKSx0PT09cilyZXR1cm5cIlwiO2lmKCh0PW4ucmVzb2x2ZSh0KSk9PT0ocj1uLnJlc29sdmUocikpKXJldHVyblwiXCI7Zm9yKHZhciBpPTE7aTx0Lmxlbmd0aCYmNDc9PT10LmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIG89dC5sZW5ndGgscz1vLWksaD0xO2g8ci5sZW5ndGgmJjQ3PT09ci5jaGFyQ29kZUF0KGgpOysraCk7Zm9yKHZhciBhPXIubGVuZ3RoLWgsYz1zPGE/czphLGY9LTEsdT0wO3U8PWM7Kyt1KXtpZih1PT09Yyl7aWYoYT5jKXtpZig0Nz09PXIuY2hhckNvZGVBdChoK3UpKXJldHVybiByLnNsaWNlKGgrdSsxKTtpZigwPT09dSlyZXR1cm4gci5zbGljZShoK3UpfWVsc2Ugcz5jJiYoNDc9PT10LmNoYXJDb2RlQXQoaSt1KT9mPXU6MD09PXUmJihmPTApKTticmVha312YXIgbD10LmNoYXJDb2RlQXQoaSt1KTtpZihsIT09ci5jaGFyQ29kZUF0KGgrdSkpYnJlYWs7NDc9PT1sJiYoZj11KX12YXIgZz1cIlwiO2Zvcih1PWkrZisxO3U8PW87Kyt1KXUhPT1vJiY0NyE9PXQuY2hhckNvZGVBdCh1KXx8KDA9PT1nLmxlbmd0aD9nKz1cIi4uXCI6Zys9XCIvLi5cIik7cmV0dXJuIGcubGVuZ3RoPjA/ZytyLnNsaWNlKGgrZik6KGgrPWYsNDc9PT1yLmNoYXJDb2RlQXQoaCkmJisraCxyLnNsaWNlKGgpKX0sX21ha2VMb25nOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxkaXJuYW1lOmZ1bmN0aW9uKHQpe2lmKGUodCksMD09PXQubGVuZ3RoKXJldHVyblwiLlwiO2Zvcih2YXIgcj10LmNoYXJDb2RlQXQoMCksbj00Nz09PXIsaT0tMSxvPSEwLHM9dC5sZW5ndGgtMTtzPj0xOy0tcylpZig0Nz09PShyPXQuY2hhckNvZGVBdChzKSkpe2lmKCFvKXtpPXM7YnJlYWt9fWVsc2Ugbz0hMTtyZXR1cm4tMT09PWk/bj9cIi9cIjpcIi5cIjpuJiYxPT09aT9cIi8vXCI6dC5zbGljZSgwLGkpfSxiYXNlbmFtZTpmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PXImJlwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2UodCk7dmFyIG4saT0wLG89LTEscz0hMDtpZih2b2lkIDAhPT1yJiZyLmxlbmd0aD4wJiZyLmxlbmd0aDw9dC5sZW5ndGgpe2lmKHIubGVuZ3RoPT09dC5sZW5ndGgmJnI9PT10KXJldHVyblwiXCI7dmFyIGg9ci5sZW5ndGgtMSxhPS0xO2ZvcihuPXQubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBjPXQuY2hhckNvZGVBdChuKTtpZig0Nz09PWMpe2lmKCFzKXtpPW4rMTticmVha319ZWxzZS0xPT09YSYmKHM9ITEsYT1uKzEpLGg+PTAmJihjPT09ci5jaGFyQ29kZUF0KGgpPy0xPT0tLWgmJihvPW4pOihoPS0xLG89YSkpfXJldHVybiBpPT09bz9vPWE6LTE9PT1vJiYobz10Lmxlbmd0aCksdC5zbGljZShpLG8pfWZvcihuPXQubGVuZ3RoLTE7bj49MDstLW4paWYoNDc9PT10LmNoYXJDb2RlQXQobikpe2lmKCFzKXtpPW4rMTticmVha319ZWxzZS0xPT09byYmKHM9ITEsbz1uKzEpO3JldHVybi0xPT09bz9cIlwiOnQuc2xpY2UoaSxvKX0sZXh0bmFtZTpmdW5jdGlvbih0KXtlKHQpO2Zvcih2YXIgcj0tMSxuPTAsaT0tMSxvPSEwLHM9MCxoPXQubGVuZ3RoLTE7aD49MDstLWgpe3ZhciBhPXQuY2hhckNvZGVBdChoKTtpZig0NyE9PWEpLTE9PT1pJiYobz0hMSxpPWgrMSksNDY9PT1hPy0xPT09cj9yPWg6MSE9PXMmJihzPTEpOi0xIT09ciYmKHM9LTEpO2Vsc2UgaWYoIW8pe249aCsxO2JyZWFrfX1yZXR1cm4tMT09PXJ8fC0xPT09aXx8MD09PXN8fDE9PT1zJiZyPT09aS0xJiZyPT09bisxP1wiXCI6dC5zbGljZShyLGkpfSxmb3JtYXQ6ZnVuY3Rpb24odCl7aWYobnVsbD09PXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZGlyfHxlLnJvb3Qsbj1lLmJhc2V8fChlLm5hbWV8fFwiXCIpKyhlLmV4dHx8XCJcIik7cmV0dXJuIHI/cj09PWUucm9vdD9yK246citcIi9cIituOm59KDAsdCl9LHBhcnNlOmZ1bmN0aW9uKHQpe2UodCk7dmFyIHI9e3Jvb3Q6XCJcIixkaXI6XCJcIixiYXNlOlwiXCIsZXh0OlwiXCIsbmFtZTpcIlwifTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHI7dmFyIG4saT10LmNoYXJDb2RlQXQoMCksbz00Nz09PWk7bz8oci5yb290PVwiL1wiLG49MSk6bj0wO2Zvcih2YXIgcz0tMSxoPTAsYT0tMSxjPSEwLGY9dC5sZW5ndGgtMSx1PTA7Zj49bjstLWYpaWYoNDchPT0oaT10LmNoYXJDb2RlQXQoZikpKS0xPT09YSYmKGM9ITEsYT1mKzEpLDQ2PT09aT8tMT09PXM/cz1mOjEhPT11JiYodT0xKTotMSE9PXMmJih1PS0xKTtlbHNlIGlmKCFjKXtoPWYrMTticmVha31yZXR1cm4tMT09PXN8fC0xPT09YXx8MD09PXV8fDE9PT11JiZzPT09YS0xJiZzPT09aCsxPy0xIT09YSYmKHIuYmFzZT1yLm5hbWU9MD09PWgmJm8/dC5zbGljZSgxLGEpOnQuc2xpY2UoaCxhKSk6KDA9PT1oJiZvPyhyLm5hbWU9dC5zbGljZSgxLHMpLHIuYmFzZT10LnNsaWNlKDEsYSkpOihyLm5hbWU9dC5zbGljZShoLHMpLHIuYmFzZT10LnNsaWNlKGgsYSkpLHIuZXh0PXQuc2xpY2UocyxhKSksaD4wP3IuZGlyPXQuc2xpY2UoMCxoLTEpOm8mJihyLmRpcj1cIi9cIikscn0sc2VwOlwiL1wiLGRlbGltaXRlcjpcIjpcIix3aW4zMjpudWxsLHBvc2l4Om51bGx9O24ucG9zaXg9bix0LmV4cG9ydHM9bn19LGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lW25dO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkuZXhwb3J0czt2YXIgbz1lW25dPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtuXShvLG8uZXhwb3J0cyxyKSxvLmV4cG9ydHN9ci5kPSh0LGUpPT57Zm9yKHZhciBuIGluIGUpci5vKGUsbikmJiFyLm8odCxuKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtuXX0pfSxyLm89KHQsZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpLHIucj10PT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX07dmFyIG49e307KCgpPT57bGV0IHQ7aWYoci5yKG4pLHIuZChuLHtVUkk6KCk9PmYsVXRpbHM6KCk9PlB9KSxcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcyl0PVwid2luMzJcIj09PXByb2Nlc3MucGxhdGZvcm07ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbmF2aWdhdG9yKXtsZXQgZT1uYXZpZ2F0b3IudXNlckFnZW50O3Q9ZS5pbmRleE9mKFwiV2luZG93c1wiKT49MH1jb25zdCBlPS9eXFx3W1xcd1xcZCsuLV0qJC8saT0vXlxcLy8sbz0vXlxcL1xcLy87ZnVuY3Rpb24gcyh0LHIpe2lmKCF0LnNjaGVtZSYmcil0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiBcIlwiLCBhdXRob3JpdHk6IFwiJHt0LmF1dGhvcml0eX1cIiwgcGF0aDogXCIke3QucGF0aH1cIiwgcXVlcnk6IFwiJHt0LnF1ZXJ5fVwiLCBmcmFnbWVudDogXCIke3QuZnJhZ21lbnR9XCJ9YCk7aWYodC5zY2hlbWUmJiFlLnRlc3QodC5zY2hlbWUpKXRocm93IG5ldyBFcnJvcihcIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuXCIpO2lmKHQucGF0aClpZih0LmF1dGhvcml0eSl7aWYoIWkudGVzdCh0LnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoIChcIi9cIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihvLnRlc3QodC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoXCIvL1wiKScpfWNvbnN0IGg9XCJcIixhPVwiL1wiLGM9L14oKFteOi8/I10rPyk6KT8oXFwvXFwvKFteLz8jXSopKT8oW14/I10qKShcXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgZntzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBmfHwhIXQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmF1dGhvcml0eSYmXCJzdHJpbmdcIj09dHlwZW9mIHQuZnJhZ21lbnQmJlwic3RyaW5nXCI9PXR5cGVvZiB0LnBhdGgmJlwic3RyaW5nXCI9PXR5cGVvZiB0LnF1ZXJ5JiZcInN0cmluZ1wiPT10eXBlb2YgdC5zY2hlbWUmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmZzUGF0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC53aXRoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRvU3RyaW5nfXNjaGVtZTthdXRob3JpdHk7cGF0aDtxdWVyeTtmcmFnbWVudDtjb25zdHJ1Y3Rvcih0LGUscixuLGksbz0hMSl7XCJvYmplY3RcIj09dHlwZW9mIHQ/KHRoaXMuc2NoZW1lPXQuc2NoZW1lfHxoLHRoaXMuYXV0aG9yaXR5PXQuYXV0aG9yaXR5fHxoLHRoaXMucGF0aD10LnBhdGh8fGgsdGhpcy5xdWVyeT10LnF1ZXJ5fHxoLHRoaXMuZnJhZ21lbnQ9dC5mcmFnbWVudHx8aCk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fGU/dDpcImZpbGVcIn0odCxvKSx0aGlzLmF1dGhvcml0eT1lfHxoLHRoaXMucGF0aD1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlXCJodHRwc1wiOmNhc2VcImh0dHBcIjpjYXNlXCJmaWxlXCI6ZT9lWzBdIT09YSYmKGU9YStlKTplPWF9cmV0dXJuIGV9KHRoaXMuc2NoZW1lLHJ8fGgpLHRoaXMucXVlcnk9bnx8aCx0aGlzLmZyYWdtZW50PWl8fGgscyh0aGlzLG8pKX1nZXQgZnNQYXRoKCl7cmV0dXJuIG0odGhpcywhMSl9d2l0aCh0KXtpZighdClyZXR1cm4gdGhpcztsZXR7c2NoZW1lOmUsYXV0aG9yaXR5OnIscGF0aDpuLHF1ZXJ5OmksZnJhZ21lbnQ6b309dDtyZXR1cm4gdm9pZCAwPT09ZT9lPXRoaXMuc2NoZW1lOm51bGw9PT1lJiYoZT1oKSx2b2lkIDA9PT1yP3I9dGhpcy5hdXRob3JpdHk6bnVsbD09PXImJihyPWgpLHZvaWQgMD09PW4/bj10aGlzLnBhdGg6bnVsbD09PW4mJihuPWgpLHZvaWQgMD09PWk/aT10aGlzLnF1ZXJ5Om51bGw9PT1pJiYoaT1oKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89aCksZT09PXRoaXMuc2NoZW1lJiZyPT09dGhpcy5hdXRob3JpdHkmJm49PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBsKGUscixuLGksbyl9c3RhdGljIHBhcnNlKHQsZT0hMSl7Y29uc3Qgcj1jLmV4ZWModCk7cmV0dXJuIHI/bmV3IGwoclsyXXx8aCxDKHJbNF18fGgpLEMocls1XXx8aCksQyhyWzddfHxoKSxDKHJbOV18fGgpLGUpOm5ldyBsKGgsaCxoLGgsaCl9c3RhdGljIGZpbGUoZSl7bGV0IHI9aDtpZih0JiYoZT1lLnJlcGxhY2UoL1xcXFwvZyxhKSksZVswXT09PWEmJmVbMV09PT1hKXtjb25zdCB0PWUuaW5kZXhPZihhLDIpOy0xPT09dD8ocj1lLnN1YnN0cmluZygyKSxlPWEpOihyPWUuc3Vic3RyaW5nKDIsdCksZT1lLnN1YnN0cmluZyh0KXx8YSl9cmV0dXJuIG5ldyBsKFwiZmlsZVwiLHIsZSxoLGgpfXN0YXRpYyBmcm9tKHQpe2NvbnN0IGU9bmV3IGwodC5zY2hlbWUsdC5hdXRob3JpdHksdC5wYXRoLHQucXVlcnksdC5mcmFnbWVudCk7cmV0dXJuIHMoZSwhMCksZX10b1N0cmluZyh0PSExKXtyZXR1cm4geSh0aGlzLHQpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIGYpcmV0dXJuIHQ7e2NvbnN0IGU9bmV3IGwodCk7cmV0dXJuIGUuX2Zvcm1hdHRlZD10LmV4dGVybmFsLGUuX2ZzUGF0aD10Ll9zZXA9PT11P3QuZnNQYXRoOm51bGwsZX19cmV0dXJuIHR9fWNvbnN0IHU9dD8xOnZvaWQgMDtjbGFzcyBsIGV4dGVuZHMgZntfZm9ybWF0dGVkPW51bGw7X2ZzUGF0aD1udWxsO2dldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPW0odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyh0PSExKXtyZXR1cm4gdD95KHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9eSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCB0PXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJih0LmZzUGF0aD10aGlzLl9mc1BhdGgsdC5fc2VwPXUpLHRoaXMuX2Zvcm1hdHRlZCYmKHQuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKHQuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKHQuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYodC5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYodC5mcmFnbWVudD10aGlzLmZyYWdtZW50KSx0fX1jb25zdCBnPXs1ODpcIiUzQVwiLDQ3OlwiJTJGXCIsNjM6XCIlM0ZcIiwzNTpcIiUyM1wiLDkxOlwiJTVCXCIsOTM6XCIlNURcIiw2NDpcIiU0MFwiLDMzOlwiJTIxXCIsMzY6XCIlMjRcIiwzODpcIiUyNlwiLDM5OlwiJTI3XCIsNDA6XCIlMjhcIiw0MTpcIiUyOVwiLDQyOlwiJTJBXCIsNDM6XCIlMkJcIiw0NDpcIiUyQ1wiLDU5OlwiJTNCXCIsNjE6XCIlM0RcIiwzMjpcIiUyMFwifTtmdW5jdGlvbiBkKHQsZSxyKXtsZXQgbixpPS0xO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtjb25zdCBzPXQuY2hhckNvZGVBdChvKTtpZihzPj05NyYmczw9MTIyfHxzPj02NSYmczw9OTB8fHM+PTQ4JiZzPD01N3x8NDU9PT1zfHw0Nj09PXN8fDk1PT09c3x8MTI2PT09c3x8ZSYmNDc9PT1zfHxyJiY5MT09PXN8fHImJjkzPT09c3x8ciYmNTg9PT1zKS0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpLG8pKSxpPS0xKSx2b2lkIDAhPT1uJiYobis9dC5jaGFyQXQobykpO2Vsc2V7dm9pZCAwPT09biYmKG49dC5zdWJzdHIoMCxvKSk7Y29uc3QgZT1nW3NdO3ZvaWQgMCE9PWU/KC0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpLG8pKSxpPS0xKSxuKz1lKTotMT09PWkmJihpPW8pfX1yZXR1cm4tMSE9PWkmJihuKz1lbmNvZGVVUklDb21wb25lbnQodC5zdWJzdHJpbmcoaSkpKSx2b2lkIDAhPT1uP246dH1mdW5jdGlvbiBwKHQpe2xldCBlO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtjb25zdCBuPXQuY2hhckNvZGVBdChyKTszNT09PW58fDYzPT09bj8odm9pZCAwPT09ZSYmKGU9dC5zdWJzdHIoMCxyKSksZSs9Z1tuXSk6dm9pZCAwIT09ZSYmKGUrPXRbcl0pfXJldHVybiB2b2lkIDAhPT1lP2U6dH1mdW5jdGlvbiBtKGUscil7bGV0IG47cmV0dXJuIG49ZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmXCJmaWxlXCI9PT1lLnNjaGVtZT9gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6NDc9PT1lLnBhdGguY2hhckNvZGVBdCgwKSYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiY1OD09PWUucGF0aC5jaGFyQ29kZUF0KDIpP3I/ZS5wYXRoLnN1YnN0cigxKTplLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOmUucGF0aCx0JiYobj1uLnJlcGxhY2UoL1xcLy9nLFwiXFxcXFwiKSksbn1mdW5jdGlvbiB5KHQsZSl7Y29uc3Qgcj1lP3A6ZDtsZXQgbj1cIlwiLHtzY2hlbWU6aSxhdXRob3JpdHk6byxwYXRoOnMscXVlcnk6aCxmcmFnbWVudDpjfT10O2lmKGkmJihuKz1pLG4rPVwiOlwiKSwob3x8XCJmaWxlXCI9PT1pKSYmKG4rPWEsbis9YSksbyl7bGV0IHQ9by5pbmRleE9mKFwiQFwiKTtpZigtMSE9PXQpe2NvbnN0IGU9by5zdWJzdHIoMCx0KTtvPW8uc3Vic3RyKHQrMSksdD1lLmxhc3RJbmRleE9mKFwiOlwiKSwtMT09PXQ/bis9cihlLCExLCExKToobis9cihlLnN1YnN0cigwLHQpLCExLCExKSxuKz1cIjpcIixuKz1yKGUuc3Vic3RyKHQrMSksITEsITApKSxuKz1cIkBcIn1vPW8udG9Mb3dlckNhc2UoKSx0PW8ubGFzdEluZGV4T2YoXCI6XCIpLC0xPT09dD9uKz1yKG8sITEsITApOihuKz1yKG8uc3Vic3RyKDAsdCksITEsITApLG4rPW8uc3Vic3RyKHQpKX1pZihzKXtpZihzLmxlbmd0aD49MyYmNDc9PT1zLmNoYXJDb2RlQXQoMCkmJjU4PT09cy5jaGFyQ29kZUF0KDIpKXtjb25zdCB0PXMuY2hhckNvZGVBdCgxKTt0Pj02NSYmdDw9OTAmJihzPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHQrMzIpfToke3Muc3Vic3RyKDMpfWApfWVsc2UgaWYocy5sZW5ndGg+PTImJjU4PT09cy5jaGFyQ29kZUF0KDEpKXtjb25zdCB0PXMuY2hhckNvZGVBdCgwKTt0Pj02NSYmdDw9OTAmJihzPWAke1N0cmluZy5mcm9tQ2hhckNvZGUodCszMil9OiR7cy5zdWJzdHIoMil9YCl9bis9cihzLCEwLCExKX1yZXR1cm4gaCYmKG4rPVwiP1wiLG4rPXIoaCwhMSwhMSkpLGMmJihuKz1cIiNcIixuKz1lP2M6ZChjLCExLCExKSksbn1mdW5jdGlvbiB2KHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoe3JldHVybiB0Lmxlbmd0aD4zP3Quc3Vic3RyKDAsMykrdih0LnN1YnN0cigzKSk6dH19Y29uc3QgYj0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBDKHQpe3JldHVybiB0Lm1hdGNoKGIpP3QucmVwbGFjZShiLCh0PT52KHQpKSk6dH12YXIgQT1yKDQ3MCk7Y29uc3Qgdz1BLnBvc2l4fHxBLHg9XCIvXCI7dmFyIFA7IWZ1bmN0aW9uKHQpe3Quam9pblBhdGg9ZnVuY3Rpb24odCwuLi5lKXtyZXR1cm4gdC53aXRoKHtwYXRoOncuam9pbih0LnBhdGgsLi4uZSl9KX0sdC5yZXNvbHZlUGF0aD1mdW5jdGlvbih0LC4uLmUpe2xldCByPXQucGF0aCxuPSExO3JbMF0hPT14JiYocj14K3Isbj0hMCk7bGV0IGk9dy5yZXNvbHZlKHIsLi4uZSk7cmV0dXJuIG4mJmlbMF09PT14JiYhdC5hdXRob3JpdHkmJihpPWkuc3Vic3RyaW5nKDEpKSx0LndpdGgoe3BhdGg6aX0pfSx0LmRpcm5hbWU9ZnVuY3Rpb24odCl7aWYoMD09PXQucGF0aC5sZW5ndGh8fHQucGF0aD09PXgpcmV0dXJuIHQ7bGV0IGU9dy5kaXJuYW1lKHQucGF0aCk7cmV0dXJuIDE9PT1lLmxlbmd0aCYmNDY9PT1lLmNoYXJDb2RlQXQoMCkmJihlPVwiXCIpLHQud2l0aCh7cGF0aDplfSl9LHQuYmFzZW5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHcuYmFzZW5hbWUodC5wYXRoKX0sdC5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiB3LmV4dG5hbWUodC5wYXRoKX19KFB8fChQPXt9KSl9KSgpLExJQj1ufSkoKTtleHBvcnQgY29uc3R7VVJJLFV0aWxzfT1MSUI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBVUkksIFV0aWxzIH0gZnJvbSAndnNjb2RlLXVyaSc7XG5leHBvcnQgeyBVUkkgfTtcbmV4cG9ydCB2YXIgVXJpVXRpbHM7XG4oZnVuY3Rpb24gKFVyaVV0aWxzKSB7XG4gICAgVXJpVXRpbHMuYmFzZW5hbWUgPSBVdGlscy5iYXNlbmFtZTtcbiAgICBVcmlVdGlscy5kaXJuYW1lID0gVXRpbHMuZGlybmFtZTtcbiAgICBVcmlVdGlscy5leHRuYW1lID0gVXRpbHMuZXh0bmFtZTtcbiAgICBVcmlVdGlscy5qb2luUGF0aCA9IFV0aWxzLmpvaW5QYXRoO1xuICAgIFVyaVV0aWxzLnJlc29sdmVQYXRoID0gVXRpbHMucmVzb2x2ZVBhdGg7XG4gICAgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIChhID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEudG9TdHJpbmcoKSkgPT09IChiID09PSBudWxsIHx8IGIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGIudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIFVyaVV0aWxzLmVxdWFscyA9IGVxdWFscztcbiAgICBmdW5jdGlvbiByZWxhdGl2ZShmcm9tLCB0bykge1xuICAgICAgICBjb25zdCBmcm9tUGF0aCA9IHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJyA/IGZyb20gOiBmcm9tLnBhdGg7XG4gICAgICAgIGNvbnN0IHRvUGF0aCA9IHR5cGVvZiB0byA9PT0gJ3N0cmluZycgPyB0byA6IHRvLnBhdGg7XG4gICAgICAgIGNvbnN0IGZyb21QYXJ0cyA9IGZyb21QYXRoLnNwbGl0KCcvJykuZmlsdGVyKGUgPT4gZS5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgdG9QYXJ0cyA9IHRvUGF0aC5zcGxpdCgnLycpLmZpbHRlcihlID0+IGUubGVuZ3RoID4gMCk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmcm9tUGFydHNbaV0gIT09IHRvUGFydHNbaV0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYWNrUGFydCA9ICcuLi8nLnJlcGVhdChmcm9tUGFydHMubGVuZ3RoIC0gaSk7XG4gICAgICAgIGNvbnN0IHRvUGFydCA9IHRvUGFydHMuc2xpY2UoaSkuam9pbignLycpO1xuICAgICAgICByZXR1cm4gYmFja1BhcnQgKyB0b1BhcnQ7XG4gICAgfVxuICAgIFVyaVV0aWxzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG59KShVcmlVdGlscyB8fCAoVXJpVXRpbHMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXJpLXV0aWxzLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBSZS1leHBvcnQgJ1RleHREb2N1bWVudCcgZnJvbSAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXRleHRkb2N1bWVudCcgZm9yIGNvbnZlbmllbmNlLFxuICogIGluY2x1ZGluZyBib3RoIHR5cGUgX2FuZF8gc3ltYm9sIChuYW1lc3BhY2UpLCBhcyB3ZSBoZXJlIGFuZCB0aGVyZSBhbHNvIHJlZmVyIHRvIHRoZSBzeW1ib2wsXG4gKiAgdGhlIG92ZXJoZWFkIGlzIHZlcnkgc21hbGwsIGp1c3QgYSBmZXcga2lsb2J5dGVzLlxuICogRXZlcnl0aGluZyBlbHNlIG9mIHRoYXQgcGFja2FnZSAoYXQgdGhlIHRpbWUgY29udHJpYnV0aW5nKSBpcyBhbHNvIGRlZmluZWRcbiAqICBpbiAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXByb3RvY29sJyBvciAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzJy5cbiAqL1xuZXhwb3J0IHsgVGV4dERvY3VtZW50IH0gZnJvbSAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXRleHRkb2N1bWVudCc7XG5pbXBvcnQgeyBUZXh0RG9jdW1lbnQgfSBmcm9tICcuL2RvY3VtZW50cy5qcyc7XG5pbXBvcnQgeyBDYW5jZWxsYXRpb25Ub2tlbiB9IGZyb20gJy4uL3V0aWxzL2NhbmNlbGxhdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuaW1wb3J0IHsgVVJJIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbi8qKlxuICogQSBkb2N1bWVudCBpcyBzdWJqZWN0IHRvIHNldmVyYWwgcGhhc2VzIHRoYXQgYXJlIHJ1biBpbiBwcmVkZWZpbmVkIG9yZGVyLiBBbnkgc3RhdGUgdmFsdWUgaW1wbGllcyB0aGF0XG4gKiBzbWFsbGVyIHN0YXRlIHZhbHVlcyBhcmUgZmluaXNoZWQgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IHZhciBEb2N1bWVudFN0YXRlO1xuKGZ1bmN0aW9uIChEb2N1bWVudFN0YXRlKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgY29udGVudCBoYXMgY2hhbmdlZCBhbmQgbmVlZHMgdG8gYmUgcGFyc2VkIGFnYWluLiBUaGUgQVNUIGhlbGQgYnkgdGhpcyBvdXRkYXRlZFxuICAgICAqIGRvY3VtZW50IGluc3RhbmNlIGlzIG5vIGxvbmdlciB2YWxpZC5cbiAgICAgKi9cbiAgICBEb2N1bWVudFN0YXRlW0RvY3VtZW50U3RhdGVbXCJDaGFuZ2VkXCJdID0gMF0gPSBcIkNoYW5nZWRcIjtcbiAgICAvKipcbiAgICAgKiBBbiBBU1QgaGFzIGJlZW4gY3JlYXRlZCBmcm9tIHRoZSB0ZXh0IGNvbnRlbnQuIFRoZSBkb2N1bWVudCBzdHJ1Y3R1cmUgY2FuIGJlIHRyYXZlcnNlZCxcbiAgICAgKiBidXQgY3Jvc3MtcmVmZXJlbmNlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgeWV0LiBJZiBuZWNlc3NhcnksIHRoZSBzdHJ1Y3R1cmUgY2FuIGJlIG1hbmlwdWxhdGVkXG4gICAgICogYXQgdGhpcyBzdGFnZSBhcyBhIHByZXByb2Nlc3Npbmcgc3RlcC5cbiAgICAgKi9cbiAgICBEb2N1bWVudFN0YXRlW0RvY3VtZW50U3RhdGVbXCJQYXJzZWRcIl0gPSAxXSA9IFwiUGFyc2VkXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGBJbmRleE1hbmFnZXJgIHNlcnZpY2UgaGFzIHByb2Nlc3NlZCBBU1Qgbm9kZXMgb2YgdGhpcyBkb2N1bWVudC4gVGhpcyBtZWFucyB0aGVcbiAgICAgKiBleHBvcnRlZCBzeW1ib2xzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbCBzY29wZSBhbmQgY2FuIGJlIHJlc29sdmVkIGZyb20gb3RoZXIgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIERvY3VtZW50U3RhdGVbRG9jdW1lbnRTdGF0ZVtcIkluZGV4ZWRDb250ZW50XCJdID0gMl0gPSBcIkluZGV4ZWRDb250ZW50XCI7XG4gICAgLyoqXG4gICAgICogVGhlIGBTY29wZUNvbXB1dGF0aW9uYCBzZXJ2aWNlIGhhcyBwcm9jZXNzZWQgdGhpcyBkb2N1bWVudC4gVGhpcyBtZWFucyB0aGUgbG9jYWwgc3ltYm9sc1xuICAgICAqIGFyZSBzdG9yZWQgaW4gYSBNdWx0aU1hcCBzbyB0aGV5IGNhbiBiZSBsb29rZWQgdXAgYnkgdGhlIGBTY29wZVByb3ZpZGVyYCBzZXJ2aWNlLlxuICAgICAqIE9uY2UgYSBkb2N1bWVudCBoYXMgcmVhY2hlZCB0aGlzIHN0YXRlLCB5b3UgbWF5IGZvbGxvdyBldmVyeSByZWZlcmVuY2UgLSBpdCB3aWxsIGxhemlseVxuICAgICAqIHJlc29sdmUgaXRzIGByZWZgIHByb3BlcnR5IGFuZCB5aWVsZCBlaXRoZXIgdGhlIHRhcmdldCBBU1Qgbm9kZSBvciBgdW5kZWZpbmVkYCBpbiBjYXNlXG4gICAgICogdGhlIHRhcmdldCBpcyBub3QgaW4gc2NvcGUuXG4gICAgICovXG4gICAgRG9jdW1lbnRTdGF0ZVtEb2N1bWVudFN0YXRlW1wiQ29tcHV0ZWRTY29wZXNcIl0gPSAzXSA9IFwiQ29tcHV0ZWRTY29wZXNcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgYExpbmtlcmAgc2VydmljZSBoYXMgcHJvY2Vzc2VkIHRoaXMgZG9jdW1lbnQuIEFsbCBvdXRnb2luZyByZWZlcmVuY2VzIGhhdmUgYmVlblxuICAgICAqIHJlc29sdmVkIG9yIG1hcmtlZCBhcyBlcnJvbmVvdXMuXG4gICAgICovXG4gICAgRG9jdW1lbnRTdGF0ZVtEb2N1bWVudFN0YXRlW1wiTGlua2VkXCJdID0gNF0gPSBcIkxpbmtlZFwiO1xuICAgIC8qKlxuICAgICAqIFRoZSBgSW5kZXhNYW5hZ2VyYCBzZXJ2aWNlIGhhcyBwcm9jZXNzZWQgQVNUIG5vZGUgcmVmZXJlbmNlcyBvZiB0aGlzIGRvY3VtZW50LiBUaGlzIGlzXG4gICAgICogbmVjZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBkb2N1bWVudHMgYXJlIGFmZmVjdGVkIGJ5IGEgY2hhbmdlIGluIG9uZSBvZiB0aGUgd29ya3NwYWNlXG4gICAgICogZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIERvY3VtZW50U3RhdGVbRG9jdW1lbnRTdGF0ZVtcIkluZGV4ZWRSZWZlcmVuY2VzXCJdID0gNV0gPSBcIkluZGV4ZWRSZWZlcmVuY2VzXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGBEb2N1bWVudFZhbGlkYXRvcmAgc2VydmljZSBoYXMgcHJvY2Vzc2VkIHRoaXMgZG9jdW1lbnQuIFRoZSBsYW5ndWFnZSBzZXJ2ZXIgbGlzdGVuc1xuICAgICAqIHRvIHRoZSByZXN1bHRzIG9mIHRoaXMgcGhhc2UgYW5kIHNlbmRzIGRpYWdub3N0aWNzIHRvIHRoZSBjbGllbnQuXG4gICAgICovXG4gICAgRG9jdW1lbnRTdGF0ZVtEb2N1bWVudFN0YXRlW1wiVmFsaWRhdGVkXCJdID0gNl0gPSBcIlZhbGlkYXRlZFwiO1xufSkoRG9jdW1lbnRTdGF0ZSB8fCAoRG9jdW1lbnRTdGF0ZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgRGVmYXVsdExhbmdpdW1Eb2N1bWVudEZhY3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuc2VydmljZVJlZ2lzdHJ5ID0gc2VydmljZXMuU2VydmljZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLnRleHREb2N1bWVudHMgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuVGV4dERvY3VtZW50cztcbiAgICAgICAgdGhpcy5maWxlU3lzdGVtUHJvdmlkZXIgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyO1xuICAgIH1cbiAgICBhc3luYyBmcm9tVXJpKHVyaSwgY2FuY2VsbGF0aW9uVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRmlsZSh1cmkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVBc3luYyh1cmksIGNvbnRlbnQsIGNhbmNlbGxhdGlvblRva2VuKTtcbiAgICB9XG4gICAgZnJvbVRleHREb2N1bWVudCh0ZXh0RG9jdW1lbnQsIHVyaSwgY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgdXJpID0gdXJpICE9PSBudWxsICYmIHVyaSAhPT0gdm9pZCAwID8gdXJpIDogVVJJLnBhcnNlKHRleHREb2N1bWVudC51cmkpO1xuICAgICAgICBpZiAoY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFzeW5jKHVyaSwgdGV4dERvY3VtZW50LCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodXJpLCB0ZXh0RG9jdW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21TdHJpbmcodGV4dCwgdXJpLCBjYW5jZWxsYXRpb25Ub2tlbikge1xuICAgICAgICBpZiAoY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFzeW5jKHVyaSwgdGV4dCwgY2FuY2VsbGF0aW9uVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHVyaSwgdGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbU1vZGVsKG1vZGVsLCB1cmkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHVyaSwgeyAkbW9kZWw6IG1vZGVsIH0pO1xuICAgIH1cbiAgICBjcmVhdGUodXJpLCBjb250ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gdGhpcy5wYXJzZSh1cmksIGNvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KHBhcnNlUmVzdWx0LCB1cmksIHVuZGVmaW5lZCwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoJyRtb2RlbCcgaW4gY29udGVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSB7IHZhbHVlOiBjb250ZW50LiRtb2RlbCwgcGFyc2VyRXJyb3JzOiBbXSwgbGV4ZXJFcnJvcnM6IFtdIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQocGFyc2VSZXN1bHQsIHVyaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHRoaXMucGFyc2UodXJpLCBjb250ZW50LmdldFRleHQoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQocGFyc2VSZXN1bHQsIHVyaSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlQXN5bmModXJpLCBjb250ZW50LCBjYW5jZWxUb2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IGF3YWl0IHRoaXMucGFyc2VBc3luYyh1cmksIGNvbnRlbnQsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChwYXJzZVJlc3VsdCwgdXJpLCB1bmRlZmluZWQsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlQXN5bmModXJpLCBjb250ZW50LmdldFRleHQoKSwgY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KHBhcnNlUmVzdWx0LCB1cmksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIExhbmdpdW1Eb2N1bWVudCBmcm9tIGEgZ2l2ZW4gcGFyc2UgcmVzdWx0LlxuICAgICAqXG4gICAgICogQSBUZXh0RG9jdW1lbnQgaXMgY3JlYXRlZCBvbiBkZW1hbmQgaWYgaXQgaXMgbm90IHByb3ZpZGVkIGFzIGFyZ3VtZW50IGhlcmUuIFVzdWFsbHkgdGhpc1xuICAgICAqIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG1haW4gcHVycG9zZSBvZiB0aGUgVGV4dERvY3VtZW50IGlzIHRvIGNvbnZlcnQgYmV0d2VlblxuICAgICAqIHRleHQgcmFuZ2VzIGFuZCBvZmZzZXRzLCB3aGljaCBpcyBkb25lIHNvbGVseSBpbiBMU1AgcmVxdWVzdCBoYW5kbGluZy5cbiAgICAgKlxuICAgICAqIFdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB7QGxpbmsgdXBkYXRlfSBiZWxvdyB0aGlzIG1ldGhvZCBpcyBzdXBwb3NlZCB0byBiZSBtYWlubHkgY2FsbGVkXG4gICAgICogZHVyaW5nIHdvcmtzcGFjZSBpbml0aWFsaXphdGlvbiBhbmQgb24gYWRkaXRpb24vcmVjb2duaXRpb24gb2YgbmV3IGZpbGVzLCB3aGlsZSBjaGFuZ2VzIGluXG4gICAgICogZXhpc3RpbmcgZG9jdW1lbnRzIGFyZSBwcm9jZXNzZWQgdmlhIHtAbGluayB1cGRhdGV9LlxuICAgICAqL1xuICAgIGNyZWF0ZUxhbmdpdW1Eb2N1bWVudChwYXJzZVJlc3VsdCwgdXJpLCB0ZXh0RG9jdW1lbnQsIHRleHQpIHtcbiAgICAgICAgbGV0IGRvY3VtZW50O1xuICAgICAgICBpZiAodGV4dERvY3VtZW50KSB7XG4gICAgICAgICAgICBkb2N1bWVudCA9IHtcbiAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdCxcbiAgICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgICAgc3RhdGU6IERvY3VtZW50U3RhdGUuUGFyc2VkLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFtdLFxuICAgICAgICAgICAgICAgIHRleHREb2N1bWVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHREb2N1bWVudEdldHRlciA9IHRoaXMuY3JlYXRlVGV4dERvY3VtZW50R2V0dGVyKHVyaSwgdGV4dCk7XG4gICAgICAgICAgICBkb2N1bWVudCA9IHtcbiAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdCxcbiAgICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgICAgc3RhdGU6IERvY3VtZW50U3RhdGUuUGFyc2VkLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFtdLFxuICAgICAgICAgICAgICAgIGdldCB0ZXh0RG9jdW1lbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0RG9jdW1lbnRHZXR0ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlUmVzdWx0LnZhbHVlLiRkb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZShkb2N1bWVudCwgY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgLy8gVGhlIENTVCBmdWxsIHRleHQgcHJvcGVydHkgY29udGFpbnMgdGhlIG9yaWdpbmFsIHRleHQgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIEFTVC5cbiAgICAgICAgY29uc3Qgb2xkVGV4dCA9IChfYSA9IGRvY3VtZW50LnBhcnNlUmVzdWx0LnZhbHVlLiRjc3ROb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eucm9vdC5mdWxsVGV4dDtcbiAgICAgICAgY29uc3QgdGV4dERvY3VtZW50ID0gKF9iID0gdGhpcy50ZXh0RG9jdW1lbnRzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0KGRvY3VtZW50LnVyaS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRleHREb2N1bWVudCA/IHRleHREb2N1bWVudC5nZXRUZXh0KCkgOiBhd2FpdCB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRmlsZShkb2N1bWVudC51cmkpO1xuICAgICAgICBpZiAodGV4dERvY3VtZW50KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICd0ZXh0RG9jdW1lbnQnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRleHREb2N1bWVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RG9jdW1lbnRHZXR0ZXIgPSB0aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihkb2N1bWVudC51cmksIHRleHQpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCAndGV4dERvY3VtZW50Jywge1xuICAgICAgICAgICAgICAgIGdldDogdGV4dERvY3VtZW50R2V0dGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb21lIG9mIHRoZXNlIGRvY3VtZW50cyBjYW4gYmUgcHJldHR5IGxhcmdlLCBzbyBwYXJzaW5nIHRoZW0gYWdhaW4gY2FuIGJlIHF1aXRlIGV4cGVuc2l2ZS5cbiAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBvbmx5IHBhcnNlIGlmIHRoZSB0ZXh0IGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuICAgICAgICBpZiAob2xkVGV4dCAhPT0gdGV4dCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucGFyc2VSZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlQXN5bmMoZG9jdW1lbnQudXJpLCB0ZXh0LCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgICAgICAgICBkb2N1bWVudC5wYXJzZVJlc3VsdC52YWx1ZS4kZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5zdGF0ZSA9IERvY3VtZW50U3RhdGUuUGFyc2VkO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIHBhcnNlKHVyaSwgdGV4dCkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKHVyaSk7XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcy5wYXJzZXIuTGFuZ2l1bVBhcnNlci5wYXJzZSh0ZXh0KTtcbiAgICB9XG4gICAgcGFyc2VBc3luYyh1cmksIHRleHQsIGNhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXModXJpKTtcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VzLnBhcnNlci5Bc3luY1BhcnNlci5wYXJzZSh0ZXh0LCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgfVxuICAgIGNyZWF0ZVRleHREb2N1bWVudEdldHRlcih1cmksIHRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZVJlZ2lzdHJ5ID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnk7XG4gICAgICAgIGxldCB0ZXh0RG9jID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRleHREb2MgIT09IG51bGwgJiYgdGV4dERvYyAhPT0gdm9pZCAwID8gdGV4dERvYyA6ICh0ZXh0RG9jID0gVGV4dERvY3VtZW50LmNyZWF0ZSh1cmkudG9TdHJpbmcoKSwgc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKHVyaSkuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkLCAwLCB0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09IHZvaWQgMCA/IHRleHQgOiAnJykpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0TGFuZ2l1bURvY3VtZW50cyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5ID0gc2VydmljZXMud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3Rvcnk7XG4gICAgfVxuICAgIGdldCBhbGwoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0odGhpcy5kb2N1bWVudE1hcC52YWx1ZXMoKSk7XG4gICAgfVxuICAgIGFkZERvY3VtZW50KGRvY3VtZW50KSB7XG4gICAgICAgIGNvbnN0IHVyaVN0cmluZyA9IGRvY3VtZW50LnVyaS50b1N0cmluZygpO1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1hcC5oYXModXJpU3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGRvY3VtZW50IHdpdGggdGhlIFVSSSAnJHt1cmlTdHJpbmd9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2N1bWVudE1hcC5zZXQodXJpU3RyaW5nLCBkb2N1bWVudCk7XG4gICAgfVxuICAgIGdldERvY3VtZW50KHVyaSkge1xuICAgICAgICBjb25zdCB1cmlTdHJpbmcgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHVyaVN0cmluZyk7XG4gICAgfVxuICAgIGFzeW5jIGdldE9yQ3JlYXRlRG9jdW1lbnQodXJpLCBjYW5jZWxsYXRpb25Ub2tlbikge1xuICAgICAgICBsZXQgZG9jdW1lbnQgPSB0aGlzLmdldERvY3VtZW50KHVyaSk7XG4gICAgICAgIGlmIChkb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50ID0gYXdhaXQgdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21VcmkodXJpLCBjYW5jZWxsYXRpb25Ub2tlbik7XG4gICAgICAgIHRoaXMuYWRkRG9jdW1lbnQoZG9jdW1lbnQpO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGNyZWF0ZURvY3VtZW50KHVyaSwgdGV4dCwgY2FuY2VsbGF0aW9uVG9rZW4pIHtcbiAgICAgICAgaWYgKGNhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcodGV4dCwgdXJpLCBjYW5jZWxsYXRpb25Ub2tlbikudGhlbihkb2N1bWVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGREb2N1bWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tU3RyaW5nKHRleHQsIHVyaSk7XG4gICAgICAgICAgICB0aGlzLmFkZERvY3VtZW50KGRvY3VtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYXNEb2N1bWVudCh1cmkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuaGFzKHVyaS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaW52YWxpZGF0ZURvY3VtZW50KHVyaSkge1xuICAgICAgICBjb25zdCB1cmlTdHJpbmcgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbGFuZ2l1bURvYyA9IHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHVyaVN0cmluZyk7XG4gICAgICAgIGlmIChsYW5naXVtRG9jKSB7XG4gICAgICAgICAgICBsYW5naXVtRG9jLnN0YXRlID0gRG9jdW1lbnRTdGF0ZS5DaGFuZ2VkO1xuICAgICAgICAgICAgbGFuZ2l1bURvYy5wcmVjb21wdXRlZFNjb3BlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxhbmdpdW1Eb2MucmVmZXJlbmNlcyA9IFtdO1xuICAgICAgICAgICAgbGFuZ2l1bURvYy5kaWFnbm9zdGljcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFuZ2l1bURvYztcbiAgICB9XG4gICAgZGVsZXRlRG9jdW1lbnQodXJpKSB7XG4gICAgICAgIGNvbnN0IHVyaVN0cmluZyA9IHVyaS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsYW5naXVtRG9jID0gdGhpcy5kb2N1bWVudE1hcC5nZXQodXJpU3RyaW5nKTtcbiAgICAgICAgaWYgKGxhbmdpdW1Eb2MpIHtcbiAgICAgICAgICAgIGxhbmdpdW1Eb2Muc3RhdGUgPSBEb2N1bWVudFN0YXRlLkNoYW5nZWQ7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TWFwLmRlbGV0ZSh1cmlTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYW5naXVtRG9jO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRvY3VtZW50cy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IENhbmNlbGxhdGlvblRva2VuIH0gZnJvbSAnLi4vdXRpbHMvY2FuY2VsbGF0aW9uLmpzJztcbmltcG9ydCB7IGlzQXN0Tm9kZSwgaXNBc3ROb2RlRGVzY3JpcHRpb24sIGlzTGlua2luZ0Vycm9yIH0gZnJvbSAnLi4vc3ludGF4LXRyZWUuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIHN0cmVhbUFzdCwgc3RyZWFtUmVmZXJlbmNlcyB9IGZyb20gJy4uL3V0aWxzL2FzdC11dGlscy5qcyc7XG5pbXBvcnQgeyBpbnRlcnJ1cHRBbmRDaGVjayB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgRG9jdW1lbnRTdGF0ZSB9IGZyb20gJy4uL3dvcmtzcGFjZS9kb2N1bWVudHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRMaW5rZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMucmVmbGVjdGlvbiA9IHNlcnZpY2VzLnNoYXJlZC5Bc3RSZWZsZWN0aW9uO1xuICAgICAgICB0aGlzLmxhbmdpdW1Eb2N1bWVudHMgPSAoKSA9PiBzZXJ2aWNlcy5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHM7XG4gICAgICAgIHRoaXMuc2NvcGVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuU2NvcGVQcm92aWRlcjtcbiAgICAgICAgdGhpcy5hc3ROb2RlTG9jYXRvciA9IHNlcnZpY2VzLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcjtcbiAgICB9XG4gICAgYXN5bmMgbGluayhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzdHJlYW1Bc3QoZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWUpKSB7XG4gICAgICAgICAgICBhd2FpdCBpbnRlcnJ1cHRBbmRDaGVjayhjYW5jZWxUb2tlbik7XG4gICAgICAgICAgICBzdHJlYW1SZWZlcmVuY2VzKG5vZGUpLmZvckVhY2gocmVmID0+IHRoaXMuZG9MaW5rKHJlZiwgZG9jdW1lbnQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkb0xpbmsocmVmSW5mbywgZG9jdW1lbnQpIHtcbiAgICAgICAgY29uc3QgcmVmID0gcmVmSW5mby5yZWZlcmVuY2U7XG4gICAgICAgIC8vIFRoZSByZWZlcmVuY2UgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJlc29sdmVkIGxhemlseSBieSBhY2Nlc3NpbmcgaXRzIGByZWZgIHByb3BlcnR5LlxuICAgICAgICBpZiAocmVmLl9yZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0Q2FuZGlkYXRlKHJlZkluZm8pO1xuICAgICAgICAgICAgICAgIGlmIChpc0xpbmtpbmdFcnJvcihkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLl9yZWYgPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5fbm9kZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhbmdpdW1Eb2N1bWVudHMoKS5oYXNEb2N1bWVudChkZXNjcmlwdGlvbi5kb2N1bWVudFVyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgZG9jdW1lbnQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtlZE5vZGUgPSB0aGlzLmxvYWRBc3ROb2RlKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5fcmVmID0gbGlua2VkTm9kZSAhPT0gbnVsbCAmJiBsaW5rZWROb2RlICE9PSB2b2lkIDAgPyBsaW5rZWROb2RlIDogdGhpcy5jcmVhdGVMaW5raW5nRXJyb3IocmVmSW5mbywgZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlZi5fcmVmID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZWZJbmZvKSwgeyBtZXNzYWdlOiBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtyZWYuJHJlZlRleHR9JzogJHtlcnJ9YCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgZG9jdW1lbnQncyBhcnJheSBvZiByZWZlcmVuY2VzXG4gICAgICAgIGRvY3VtZW50LnJlZmVyZW5jZXMucHVzaChyZWYpO1xuICAgIH1cbiAgICB1bmxpbmsoZG9jdW1lbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWYgb2YgZG9jdW1lbnQucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgZGVsZXRlIHJlZi5fcmVmO1xuICAgICAgICAgICAgZGVsZXRlIHJlZi5fbm9kZURlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LnJlZmVyZW5jZXMgPSBbXTtcbiAgICB9XG4gICAgZ2V0Q2FuZGlkYXRlKHJlZkluZm8pIHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlUHJvdmlkZXIuZ2V0U2NvcGUocmVmSW5mbyk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2NvcGUuZ2V0RWxlbWVudChyZWZJbmZvLnJlZmVyZW5jZS4kcmVmVGV4dCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbiAhPT0gbnVsbCAmJiBkZXNjcmlwdGlvbiAhPT0gdm9pZCAwID8gZGVzY3JpcHRpb24gOiB0aGlzLmNyZWF0ZUxpbmtpbmdFcnJvcihyZWZJbmZvKTtcbiAgICB9XG4gICAgYnVpbGRSZWZlcmVuY2Uobm9kZSwgcHJvcGVydHksIHJlZk5vZGUsIHJlZlRleHQpIHtcbiAgICAgICAgLy8gU2VlIGJlaGF2aW9yIGRlc2NyaXB0aW9uIGluIGRvYyBvZiBMaW5rZXIsIHVwZGF0ZSB0aGF0IG9uIGNoYW5nZXMgaW4gaGVyZS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IGxpbmtlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHtcbiAgICAgICAgICAgICRyZWZOb2RlOiByZWZOb2RlLFxuICAgICAgICAgICAgJHJlZlRleHQ6IHJlZlRleHQsXG4gICAgICAgICAgICBnZXQgcmVmKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBc3ROb2RlKHRoaXMuX3JlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBmcmVxdWVudCBjYXNlOiB0aGUgdGFyZ2V0IGlzIGFscmVhZHkgcmVzb2x2ZWQuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZURlc2NyaXB0aW9uKHRoaXMuX25vZGVEZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBjYW5kaWRhdGUgaGFzIGJlZW4gZm91bmQgYmVmb3JlLCBidXQgaXQgaXMgbm90IGxvYWRlZCB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtlZE5vZGUgPSBsaW5rZXIubG9hZEFzdE5vZGUodGhpcy5fbm9kZURlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVmID0gbGlua2VkTm9kZSAhPT0gbnVsbCAmJiBsaW5rZWROb2RlICE9PSB2b2lkIDAgPyBsaW5rZWROb2RlIDogbGlua2VyLmNyZWF0ZUxpbmtpbmdFcnJvcih7IHJlZmVyZW5jZSwgY29udGFpbmVyOiBub2RlLCBwcm9wZXJ0eSB9LCB0aGlzLl9ub2RlRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9yZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVmZXJlbmNlIGhhcyBub3QgYmVlbiBsaW5rZWQgeWV0LCBzbyBkbyB0aGF0IG5vdy5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmRGF0YSA9IGxpbmtlci5nZXRMaW5rZWROb2RlKHsgcmVmZXJlbmNlLCBjb250YWluZXI6IG5vZGUsIHByb3BlcnR5IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmRGF0YS5lcnJvciAmJiBnZXREb2N1bWVudChub2RlKS5zdGF0ZSA8IERvY3VtZW50U3RhdGUuQ29tcHV0ZWRTY29wZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvY3VtZW50IHNjb3BlIGlzIG5vdCByZWFkeSwgZG9uJ3Qgc2V0IGB0aGlzLl9yZWZgIHNvIGxpbmtlciBjYW4gcmV0cnkgbGF0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZiA9IChfYSA9IHJlZkRhdGEubm9kZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcmVmRGF0YS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZURlc2NyaXB0aW9uID0gcmVmRGF0YS5kZXNjcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQXN0Tm9kZSh0aGlzLl9yZWYpID8gdGhpcy5fcmVmIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCAkbm9kZURlc2NyaXB0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlRGVzY3JpcHRpb247XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xpbmtpbmdFcnJvcih0aGlzLl9yZWYpID8gdGhpcy5fcmVmIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVmZXJlbmNlO1xuICAgIH1cbiAgICBnZXRMaW5rZWROb2RlKHJlZkluZm8pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXRDYW5kaWRhdGUocmVmSW5mbyk7XG4gICAgICAgICAgICBpZiAoaXNMaW5raW5nRXJyb3IoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGRlc2NyaXB0aW9uIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsaW5rZWROb2RlID0gdGhpcy5sb2FkQXN0Tm9kZShkZXNjcmlwdGlvbik7XG4gICAgICAgICAgICBpZiAobGlua2VkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IGxpbmtlZE5vZGUsIGRlc2NyOiBkZXNjcmlwdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3I6IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogdGhpcy5jcmVhdGVMaW5raW5nRXJyb3IocmVmSW5mbywgZGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlZkluZm8pLCB7IG1lc3NhZ2U6IGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke3JlZkluZm8ucmVmZXJlbmNlLiRyZWZUZXh0fSc6ICR7ZXJyfWAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9hZEFzdE5vZGUobm9kZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIGlmIChub2RlRGVzY3JpcHRpb24ubm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVEZXNjcmlwdGlvbi5ub2RlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMubGFuZ2l1bURvY3VtZW50cygpLmdldERvY3VtZW50KG5vZGVEZXNjcmlwdGlvbi5kb2N1bWVudFVyaSk7XG4gICAgICAgIGlmICghZG9jKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoZG9jLnBhcnNlUmVzdWx0LnZhbHVlLCBub2RlRGVzY3JpcHRpb24ucGF0aCk7XG4gICAgfVxuICAgIGNyZWF0ZUxpbmtpbmdFcnJvcihyZWZJbmZvLCB0YXJnZXREZXNjcmlwdGlvbikge1xuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkb2N1bWVudCBpcyBzdWZmaWNpZW50bHkgcHJvY2Vzc2VkIGJ5IHRoZSBEb2N1bWVudEJ1aWxkZXIuIElmIG5vdCwgdGhpcyBpcyBhIGhpbnQgZm9yIGEgYnVnXG4gICAgICAgIC8vIGluIHRoZSBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudChyZWZJbmZvLmNvbnRhaW5lcik7XG4gICAgICAgIGlmIChkb2N1bWVudC5zdGF0ZSA8IERvY3VtZW50U3RhdGUuQ29tcHV0ZWRTY29wZXMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGVkIHJlZmVyZW5jZSByZXNvbHV0aW9uIGJlZm9yZSBkb2N1bWVudCByZWFjaGVkIENvbXB1dGVkU2NvcGVzIHN0YXRlICgke2RvY3VtZW50LnVyaX0pLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShyZWZJbmZvKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVmSW5mbyksIHsgbWVzc2FnZTogYENvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSB0byAke3JlZmVyZW5jZVR5cGV9IG5hbWVkICcke3JlZkluZm8ucmVmZXJlbmNlLiRyZWZUZXh0fScuYCwgdGFyZ2V0RGVzY3JpcHRpb24gfSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlua2VyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgZmluZE5vZGVGb3JQcm9wZXJ0eSB9IGZyb20gJy4uL3V0aWxzL2dyYW1tYXItdXRpbHMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWQobm9kZSkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS5uYW1lID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0TmFtZVByb3ZpZGVyIHtcbiAgICBnZXROYW1lKG5vZGUpIHtcbiAgICAgICAgaWYgKGlzTmFtZWQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0TmFtZU5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gZmluZE5vZGVGb3JQcm9wZXJ0eShub2RlLiRjc3ROb2RlLCAnbmFtZScpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hbWUtcHJvdmlkZXIuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBmaW5kQXNzaWdubWVudCB9IGZyb20gJy4uL3V0aWxzL2dyYW1tYXItdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJy4uL3V0aWxzL2FzdC11dGlscy5qcyc7XG5pbXBvcnQgeyBpc0NoaWxkTm9kZSwgdG9Eb2N1bWVudFNlZ21lbnQgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtLmpzJztcbmltcG9ydCB7IFVyaVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEZWZhdWx0UmVmZXJlbmNlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5uYW1lUHJvdmlkZXIgPSBzZXJ2aWNlcy5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcjtcbiAgICAgICAgdGhpcy5pbmRleCA9IHNlcnZpY2VzLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyO1xuICAgICAgICB0aGlzLm5vZGVMb2NhdG9yID0gc2VydmljZXMud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yO1xuICAgIH1cbiAgICBmaW5kRGVjbGFyYXRpb24oc291cmNlQ3N0Tm9kZSkge1xuICAgICAgICBpZiAoc291cmNlQ3N0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IGZpbmRBc3NpZ25tZW50KHNvdXJjZUNzdE5vZGUpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUVsZW0gPSBzb3VyY2VDc3ROb2RlLmFzdE5vZGU7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCAmJiBub2RlRWxlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG5vZGVFbGVtW2Fzc2lnbm1lbnQuZmVhdHVyZV07XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZS5yZWY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVmZXJlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZShyZWYpICYmIHJlZi4kcmVmTm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlZi4kcmVmTm9kZS5vZmZzZXQgPD0gc291cmNlQ3N0Tm9kZS5vZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWYuJHJlZk5vZGUuZW5kID49IHNvdXJjZUNzdE5vZGUuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5yZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZUVsZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lTm9kZSA9IHRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKG5vZGVFbGVtKTtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHJldHVybiB0aGUgdGFyZ2V0ZWQgbm9kZSBpbiBjYXNlIHRoZSB0YXJnZXRlZCBjc3Qgbm9kZSBpcyB0aGUgbmFtZSBub2RlIG9yIHBhcnQgb2YgaXRcbiAgICAgICAgICAgICAgICBpZiAobmFtZU5vZGUgJiYgKG5hbWVOb2RlID09PSBzb3VyY2VDc3ROb2RlIHx8IGlzQ2hpbGROb2RlKHNvdXJjZUNzdE5vZGUsIG5hbWVOb2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVFbGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kRGVjbGFyYXRpb25Ob2RlKHNvdXJjZUNzdE5vZGUpIHtcbiAgICAgICAgY29uc3QgYXN0Tm9kZSA9IHRoaXMuZmluZERlY2xhcmF0aW9uKHNvdXJjZUNzdE5vZGUpO1xuICAgICAgICBpZiAoYXN0Tm9kZSA9PT0gbnVsbCB8fCBhc3ROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhc3ROb2RlLiRjc3ROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUoYXN0Tm9kZSk7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Tm9kZSAhPT0gbnVsbCAmJiB0YXJnZXROb2RlICE9PSB2b2lkIDAgPyB0YXJnZXROb2RlIDogYXN0Tm9kZS4kY3N0Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kUmVmZXJlbmNlcyh0YXJnZXROb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlZnMgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZURlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSB0aGlzLmdldFJlZmVyZW5jZVRvU2VsZih0YXJnZXROb2RlKTtcbiAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2gocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXhSZWZlcmVuY2VzID0gdGhpcy5pbmRleC5maW5kQWxsUmVmZXJlbmNlcyh0YXJnZXROb2RlLCB0aGlzLm5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKHRhcmdldE5vZGUpKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZG9jdW1lbnRVcmkpIHtcbiAgICAgICAgICAgIGluZGV4UmVmZXJlbmNlcyA9IGluZGV4UmVmZXJlbmNlcy5maWx0ZXIocmVmID0+IFVyaVV0aWxzLmVxdWFscyhyZWYuc291cmNlVXJpLCBvcHRpb25zLmRvY3VtZW50VXJpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcy5wdXNoKC4uLmluZGV4UmVmZXJlbmNlcyk7XG4gICAgICAgIHJldHVybiBzdHJlYW0ocmVmcyk7XG4gICAgfVxuICAgIGdldFJlZmVyZW5jZVRvU2VsZih0YXJnZXROb2RlKSB7XG4gICAgICAgIGNvbnN0IG5hbWVOb2RlID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUodGFyZ2V0Tm9kZSk7XG4gICAgICAgIGlmIChuYW1lTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnQodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aCh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc291cmNlVXJpOiBkb2MudXJpLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgdGFyZ2V0VXJpOiBkb2MudXJpLFxuICAgICAgICAgICAgICAgIHRhcmdldFBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgc2VnbWVudDogdG9Eb2N1bWVudFNlZ21lbnQobmFtZU5vZGUpLFxuICAgICAgICAgICAgICAgIGxvY2FsOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmZXJlbmNlcy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IFJlZHVjdGlvbiwgc3RyZWFtIH0gZnJvbSAnLi9zdHJlYW0uanMnO1xuLyoqXG4gKiBBIG11bHRpbWFwIGlzIGEgdmFyaWF0aW9uIG9mIGEgTWFwIHRoYXQgaGFzIHBvdGVudGlhbGx5IG11bHRpcGxlIHZhbHVlcyBmb3IgZXZlcnkga2V5LlxuICovXG5leHBvcnQgY2xhc3MgTXVsdGlNYXAge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMubWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIG11bHRpbWFwLlxuICAgICAqL1xuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gUmVkdWN0aW9uLnN1bShzdHJlYW0odGhpcy5tYXAudmFsdWVzKCkpLm1hcChhID0+IGEubGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBlbnRyaWVzIGluIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3BlcmF0ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBgdmFsdWVgIGlzIGdpdmVuOlxuICAgICAqICAqIFdpdGggYSB2YWx1ZSwgdGhpcyBtZXRob2QgZGVsZXRlcyB0aGUgc3BlY2lmaWMga2V5IC8gdmFsdWUgcGFpciBmcm9tIHRoZSBtdWx0aW1hcC5cbiAgICAgKiAgKiBXaXRob3V0IGEgdmFsdWUsIGFsbCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgYXJlIGRlbGV0ZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSB2YWx1ZSBleGlzdGVkIGFuZCBoYXMgYmVlbiByZW1vdmVkLCBvciBgZmFsc2VgIGlmIHRoZSBzcGVjaWZpZWRcbiAgICAgKiAgICAga2V5IC8gdmFsdWUgZG9lcyBub3QgZXhpc3QuXG4gICAgICovXG4gICAgZGVsZXRlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMubWFwLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkuIElmIG5vIHZhbHVlIGV4aXN0cyxcbiAgICAgKiBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIF9Ob3RlOl8gVGhlIHJldHVybmVkIGFycmF5IGlzIGFzc3VtZWQgbm90IHRvIGJlIG1vZGlmaWVkLiBVc2UgdGhlIGBzZXRgIG1ldGhvZCB0byBhZGQgYVxuICAgICAqIHZhbHVlIGFuZCBgZGVsZXRlYCB0byByZW1vdmUgYSB2YWx1ZSBmcm9tIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMubWFwLmdldChrZXkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3BlcmF0ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBgdmFsdWVgIGlzIGdpdmVuOlxuICAgICAqICAqIFdpdGggYSB2YWx1ZSwgdGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmljIGtleSAvIHZhbHVlIHBhaXIgaXMgcHJlc2VudCBpbiB0aGUgbXVsdGltYXAuXG4gICAgICogICogV2l0aG91dCBhIHZhbHVlLCB0aGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4ga2V5IGlzIHByZXNlbnQgaW4gdGhlIG11bHRpbWFwLlxuICAgICAqL1xuICAgIGhhcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAuaGFzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmluZGV4T2YodmFsdWUpID49IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBnaXZlbiBrZXkgLyB2YWx1ZSBwYWlyIHRvIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBhZGQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5tYXAuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLmdldChrZXkpLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0KGtleSwgW3ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgZ2l2ZW4gc2V0IG9mIGtleSAvIHZhbHVlIHBhaXJzIHRvIHRoZSBtdWx0aW1hcC5cbiAgICAgKi9cbiAgICBhZGRBbGwoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMubWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5nZXQoa2V5KS5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCBBcnJheS5mcm9tKHZhbHVlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZXZlcnkga2V5IC8gdmFsdWUgcGFpciBpbiB0aGUgbXVsdGltYXAuXG4gICAgICovXG4gICAgZm9yRWFjaChjYWxsYmFja2ZuKSB7XG4gICAgICAgIHRoaXMubWFwLmZvckVhY2goKGFycmF5LCBrZXkpID0+IGFycmF5LmZvckVhY2godmFsdWUgPT4gY2FsbGJhY2tmbih2YWx1ZSwga2V5LCB0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5pdGVyYXRvcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbSh0aGlzLm1hcC5lbnRyaWVzKCkpXG4gICAgICAgICAgICAuZmxhdE1hcCgoW2tleSwgYXJyYXldKSA9PiBhcnJheS5tYXAodmFsdWUgPT4gW2tleSwgdmFsdWVdKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBzdHJlYW0gb2Yga2V5cyBpbiB0aGUgbWFwLlxuICAgICAqL1xuICAgIGtleXMoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0odGhpcy5tYXAua2V5cygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmVhbSBvZiB2YWx1ZXMgaW4gdGhlIG1hcC5cbiAgICAgKi9cbiAgICB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0odGhpcy5tYXAudmFsdWVzKCkpLmZsYXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmVhbSBvZiBrZXksIHZhbHVlIHNldCBwYWlycyBmb3IgZXZlcnkga2V5IGluIHRoZSBtYXAuXG4gICAgICovXG4gICAgZW50cmllc0dyb3VwZWRCeUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbSh0aGlzLm1hcC5lbnRyaWVzKCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBCaU1hcCB7XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5zaXplO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50cykge1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5pbnZlcnNlID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW52ZXJzZS5jbGVhcigpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLm1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW52ZXJzZS5zZXQodmFsdWUsIGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICB9XG4gICAgZ2V0S2V5KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmludmVyc2UuZ2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubWFwLmdldChrZXkpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB0aGlzLmludmVyc2UuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2xsZWN0aW9ucy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxLTIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgc3RyZWFtQWxsQ29udGVudHMsIHN0cmVhbUNvbnRlbnRzIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE11bHRpTWFwIH0gZnJvbSAnLi4vdXRpbHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHsgaW50ZXJydXB0QW5kQ2hlY2sgfSBmcm9tICcuLi91dGlscy9wcm9taXNlLXV0aWxzLmpzJztcbi8qKlxuICogVGhlIGRlZmF1bHQgc2NvcGUgY29tcHV0YXRpb24gY3JlYXRlcyBhbmQgY29sbGVjdGVzIGRlc2NyaXB0aW9ucyBvZiB0aGUgQVNUIG5vZGVzIHRvIGJlIGV4cG9ydGVkIGludG8gdGhlXG4gKiBfZ2xvYmFsXyBzY29wZSBmcm9tIHRoZSBnaXZlbiBkb2N1bWVudC4gQnkgZGVmYXVsdCB0aG9zZSBhcmUgdGhlIGRvY3VtZW50J3Mgcm9vdCBBU1Qgbm9kZSBhbmQgaXRzIGRpcmVjdGx5XG4gKiBjb250YWluZWQgY2hpbGQgbm9kZXMuXG4gKlxuICogQmVzaWRlcywgaXQgZ2F0aGVycyBhbGwgQVNUIG5vZGVzIHRoYXQgaGF2ZSBhIG5hbWUgKGFjY29yZGluZyB0byB0aGUgYE5hbWVQcm92aWRlcmAgc2VydmljZSkgYW5kIGluY2x1ZGVzIHRoZW1cbiAqIGluIHRoZSBsb2NhbCBzY29wZSBvZiB0aGVpciBwYXJ0aWN1bGFyIGNvbnRhaW5lciBub2Rlcy4gQXMgYSByZXN1bHQsIGZvciBldmVyeSBjcm9zcy1yZWZlcmVuY2UgaW4gdGhlIEFTVCxcbiAqIHRhcmdldCBlbGVtZW50cyBmcm9tIHRoZSBzYW1lIGxldmVsIChzaWJsaW5ncykgYW5kIGZ1cnRoZXIgdXAgdG93YXJkcyB0aGUgcm9vdCAocGFyZW50cyBhbmQgc2libGluZ3Mgb2YgcGFyZW50cylcbiAqIGFyZSB2aXNpYmxlLiBFbGVtZW50cyBiZWluZyBuZXN0ZWQgaW5zaWRlIGxvd2VyIGxldmVscyAoY2hpbGRyZW4sIGNoaWxkcmVuIG9mIHNpYmxpbmdzIGFuZCBwYXJlbnRzJyBzaWJsaW5ncylcbiAqIGFyZSBfaW52aXNpYmxlXyBieSBkZWZhdWx0LCBidXQgdGhhdCBjYW4gYmUgY2hhbmdlZCBieSBjdXN0b21pemluZyB0aGlzIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5uYW1lUHJvdmlkZXIgPSBzZXJ2aWNlcy5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcjtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbnMgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI7XG4gICAgfVxuICAgIGFzeW5jIGNvbXB1dGVFeHBvcnRzKGRvY3VtZW50LCBjYW5jZWxUb2tlbiA9IENhbmNlbGxhdGlvblRva2VuLk5vbmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZUV4cG9ydHNGb3JOb2RlKGRvY3VtZW50LnBhcnNlUmVzdWx0LnZhbHVlLCBkb2N1bWVudCwgdW5kZWZpbmVkLCBjYW5jZWxUb2tlbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMge0BsaW5rIEFzdE5vZGVEZXNjcmlwdGlvbiBBc3ROb2RlRGVzY3JpcHRpb25zfSBmb3IgdGhlIGdpdmVuIHtAbGluayBBc3ROb2RlIHBhcmVudE5vZGV9IGFuZCBpdHMgY2hpbGRyZW4uXG4gICAgICogVGhlIGxpc3Qgb2YgY2hpbGRyZW4gdG8gYmUgY29uc2lkZXJlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIge0BsaW5rIGNoaWxkcmVufS5cbiAgICAgKiBCeSBkZWZhdWx0IG9ubHkgdGhlIGRpcmVjdCBjaGlsZHJlbiBvZiB7QGxpbmsgcGFyZW50Tm9kZX0gYXJlIHZpc2l0ZWQsIG5lc3RlZCBub2RlcyBhcmUgbm90IGV4cG9ydGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudE5vZGUgQVNUIG5vZGUgdG8gYmUgZXhwb3J0ZWQsIGkuZS4sIG9mIHdoaWNoIGFuIHtAbGluayBBc3ROb2RlRGVzY3JpcHRpb259IHNoYWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LlxuICAgICAqIEBwYXJhbSBkb2N1bWVudCBUaGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgQVNUIG5vZGUgdG8gYmUgZXhwb3J0ZWQuXG4gICAgICogQHBhcmFtIGNoaWxkcmVuIEEgZnVuY3Rpb24gY2FsbGVkIHdpdGgge0BsaW5rIHBhcmVudE5vZGV9IGFzIHNpbmdsZSBhcmd1bWVudCBhbmQgcmV0dXJuaW5nIGFuIHtAbGluayBJdGVyYWJsZX0gc3VwcGx5aW5nIHRoZSBjaGlsZHJlbiB0byBiZSB2aXNpdGVkLCB3aGljaCBtdXN0IGJlIGRpcmVjdGx5IG9yIHRyYW5zaXRpdmVseSBjb250YWluZWQgaW4ge0BsaW5rIHBhcmVudE5vZGV9LlxuICAgICAqIEBwYXJhbSBjYW5jZWxUb2tlbiBJbmRpY2F0ZXMgd2hlbiB0byBjYW5jZWwgdGhlIGN1cnJlbnQgb3BlcmF0aW9uLlxuICAgICAqIEB0aHJvd3MgYE9wZXJhdGlvbkNhbmNlbGVkYCBpZiBhIHVzZXIgYWN0aW9uIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgbGlzdCBvZiB7QGxpbmsgQXN0Tm9kZURlc2NyaXB0aW9uIEFzdE5vZGVEZXNjcmlwdGlvbnN9IHRvIGJlIHB1Ymxpc2hlZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBhc3luYyBjb21wdXRlRXhwb3J0c0Zvck5vZGUocGFyZW50Tm9kZSwgZG9jdW1lbnQsIGNoaWxkcmVuID0gc3RyZWFtQ29udGVudHMsIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICBjb25zdCBleHBvcnRzID0gW107XG4gICAgICAgIHRoaXMuZXhwb3J0Tm9kZShwYXJlbnROb2RlLCBleHBvcnRzLCBkb2N1bWVudCk7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjaGlsZHJlbihwYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5leHBvcnROb2RlKG5vZGUsIGV4cG9ydHMsIGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgc2luZ2xlIG5vZGUgdG8gdGhlIGxpc3Qgb2YgZXhwb3J0cyBpZiBpdCBoYXMgYSBuYW1lLiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBjaGFuZ2UgaG93XG4gICAgICogc3ltYm9scyBhcmUgZXhwb3J0ZWQsIGUuZy4gYnkgbW9kaWZ5aW5nIHRoZWlyIGV4cG9ydGVkIG5hbWUuXG4gICAgICovXG4gICAgZXhwb3J0Tm9kZShub2RlLCBleHBvcnRzLCBkb2N1bWVudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShub2RlKTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaCh0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihub2RlLCBuYW1lLCBkb2N1bWVudCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGNvbXB1dGVMb2NhbFNjb3Blcyhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNjb3BlcyA9IG5ldyBNdWx0aU1hcCgpO1xuICAgICAgICAvLyBIZXJlIHdlIG5hdmlnYXRlIHRoZSBmdWxsIEFTVCAtIGxvY2FsIHNjb3BlcyBzaGFsbCBiZSBhdmFpbGFibGUgaW4gdGhlIHdob2xlIGRvY3VtZW50XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzdHJlYW1BbGxDb250ZW50cyhyb290Tm9kZSkpIHtcbiAgICAgICAgICAgIGF3YWl0IGludGVycnVwdEFuZENoZWNrKGNhbmNlbFRva2VuKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc05vZGUobm9kZSwgZG9jdW1lbnQsIHNjb3Blcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3BlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyBhIHNpbmdsZSBub2RlIGR1cmluZyBzY29wZXMgY29tcHV0YXRpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG1ha2VzIHRoZSBub2RlIHZpc2libGVcbiAgICAgKiBpbiB0aGUgc3VidHJlZSBvZiBpdHMgY29udGFpbmVyIChpZiB0aGUgbm9kZSBoYXMgYSBuYW1lKS4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoaXMsXG4gICAgICogZS5nLiBieSBpbmNyZWFzaW5nIHRoZSB2aXNpYmlsaXR5IHRvIGEgaGlnaGVyIGxldmVsIGluIHRoZSBBU1QuXG4gICAgICovXG4gICAgcHJvY2Vzc05vZGUobm9kZSwgZG9jdW1lbnQsIHNjb3Blcykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBub2RlLiRjb250YWluZXI7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKG5vZGUpO1xuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBzY29wZXMuYWRkKGNvbnRhaW5lciwgdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24obm9kZSwgbmFtZSwgZG9jdW1lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLWNvbXB1dGF0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgRU1QVFlfU1RSRUFNLCBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBzY29wZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhIGBTdHJlYW1gLiBJdCBoYXMgYW4gb3B0aW9uYWwgX291dGVyIHNjb3BlXyBkZXNjcmliaW5nXG4gKiB0aGUgbmV4dCBsZXZlbCBvZiBlbGVtZW50cywgd2hpY2ggYXJlIHF1ZXJpZWQgd2hlbiBhIHRhcmdldCBlbGVtZW50IGlzIG5vdCBmb3VuZCBpbiB0aGUgc3RyZWFtIHByb3ZpZGVkXG4gKiB0byB0aGlzIHNjb3BlLlxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzLCBvdXRlclNjb3BlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgICAgICB0aGlzLm91dGVyU2NvcGUgPSBvdXRlclNjb3BlO1xuICAgICAgICB0aGlzLmNhc2VJbnNlbnNpdGl2ZSA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXNlSW5zZW5zaXRpdmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xuICAgIH1cbiAgICBnZXRBbGxFbGVtZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMub3V0ZXJTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHMuY29uY2F0KHRoaXMub3V0ZXJTY29wZS5nZXRBbGxFbGVtZW50cygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEVsZW1lbnQobmFtZSkge1xuICAgICAgICBjb25zdCBsb2NhbCA9IHRoaXMuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgICAgICA/IHRoaXMuZWxlbWVudHMuZmluZChlID0+IGUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICA6IHRoaXMuZWxlbWVudHMuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChsb2NhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dGVyU2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNYXBTY29wZSB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudHMsIG91dGVyU2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNhc2VJbnNlbnNpdGl2ZSA9IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXNlSW5zZW5zaXRpdmUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgID8gZWxlbWVudC5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQubmFtZTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuc2V0KG5hbWUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0ZXJTY29wZSA9IG91dGVyU2NvcGU7XG4gICAgfVxuICAgIGdldEVsZW1lbnQobmFtZSkge1xuICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSB0aGlzLmNhc2VJbnNlbnNpdGl2ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IGxvY2FsID0gdGhpcy5lbGVtZW50cy5nZXQobG9jYWxOYW1lKTtcbiAgICAgICAgaWYgKGxvY2FsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3V0ZXJTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0ZXJTY29wZS5nZXRFbGVtZW50KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldEFsbEVsZW1lbnRzKCkge1xuICAgICAgICBsZXQgZWxlbWVudFN0cmVhbSA9IHN0cmVhbSh0aGlzLmVsZW1lbnRzLnZhbHVlcygpKTtcbiAgICAgICAgaWYgKHRoaXMub3V0ZXJTY29wZSkge1xuICAgICAgICAgICAgZWxlbWVudFN0cmVhbSA9IGVsZW1lbnRTdHJlYW0uY29uY2F0KHRoaXMub3V0ZXJTY29wZS5nZXRBbGxFbGVtZW50cygpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudFN0cmVhbTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgRU1QVFlfU0NPUEUgPSB7XG4gICAgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGdldEFsbEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gRU1QVFlfU1RSRUFNO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCBjbGFzcyBEaXNwb3NhYmxlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRvRGlzcG9zZSA9IFtdO1xuICAgICAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgb25EaXNwb3NlKGRpc3Bvc2FibGUpIHtcbiAgICAgICAgdGhpcy50b0Rpc3Bvc2UucHVzaChkaXNwb3NhYmxlKTtcbiAgICB9XG4gICAgZGlzcG9zZSgpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRvRGlzcG9zZS5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIH1cbiAgICB0aHJvd0lmRGlzcG9zZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBjYWNoZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgY2xhc3MgU2ltcGxlQ2FjaGUgZXh0ZW5kcyBEaXNwb3NhYmxlQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmhhcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0KGtleSwgcHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3ZpZGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29udGV4dENhY2hlIGV4dGVuZHMgRGlzcG9zYWJsZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb252ZXJ0ZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZXIgPSBjb252ZXJ0ZXIgIT09IG51bGwgJiYgY29udmVydGVyICE9PSB2b2lkIDAgPyBjb252ZXJ0ZXIgOiAodmFsdWUgPT4gdmFsdWUpO1xuICAgIH1cbiAgICBoYXMoY29udGV4dEtleSwga2V5KSB7XG4gICAgICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlRm9yQ29udGV4dChjb250ZXh0S2V5KS5oYXMoa2V5KTtcbiAgICB9XG4gICAgc2V0KGNvbnRleHRLZXksIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgdGhpcy5jYWNoZUZvckNvbnRleHQoY29udGV4dEtleSkuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQoY29udGV4dEtleSwga2V5LCBwcm92aWRlcikge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICBjb25zdCBjb250ZXh0Q2FjaGUgPSB0aGlzLmNhY2hlRm9yQ29udGV4dChjb250ZXh0S2V5KTtcbiAgICAgICAgaWYgKGNvbnRleHRDYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRDYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm92aWRlcigpO1xuICAgICAgICAgICAgY29udGV4dENhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlKGNvbnRleHRLZXksIGtleSkge1xuICAgICAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZUZvckNvbnRleHQoY29udGV4dEtleSkuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIGNsZWFyKGNvbnRleHRLZXkpIHtcbiAgICAgICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICAgICAgaWYgKGNvbnRleHRLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcEtleSA9IHRoaXMuY29udmVydGVyKGNvbnRleHRLZXkpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZS5kZWxldGUobWFwS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYWNoZUZvckNvbnRleHQoY29udGV4dEtleSkge1xuICAgICAgICBjb25zdCBtYXBLZXkgPSB0aGlzLmNvbnZlcnRlcihjb250ZXh0S2V5KTtcbiAgICAgICAgbGV0IGRvY3VtZW50Q2FjaGUgPSB0aGlzLmNhY2hlLmdldChtYXBLZXkpO1xuICAgICAgICBpZiAoIWRvY3VtZW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGRvY3VtZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnNldChtYXBLZXksIGRvY3VtZW50Q2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb2N1bWVudENhY2hlO1xuICAgIH1cbn1cbi8qKlxuICogRXZlcnkga2V5L3ZhbHVlIHBhaXIgaW4gdGhpcyBjYWNoZSBpcyBzY29wZWQgdG8gYSBkb2N1bWVudC5cbiAqIElmIHRoaXMgZG9jdW1lbnQgaXMgY2hhbmdlZCBvciBkZWxldGVkLCBhbGwgYXNzb2NpYXRlZCBrZXkvdmFsdWUgcGFpcnMgYXJlIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENhY2hlIGV4dGVuZHMgQ29udGV4dENhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihzaGFyZWRTZXJ2aWNlcykge1xuICAgICAgICBzdXBlcih1cmkgPT4gdXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLm9uRGlzcG9zZShzaGFyZWRTZXJ2aWNlcy53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKChjaGFuZ2VkLCBkZWxldGVkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbGxVcmlzID0gY2hhbmdlZC5jb25jYXQoZGVsZXRlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHVyaSBvZiBhbGxVcmlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcih1cmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfVxufVxuLyoqXG4gKiBFdmVyeSBrZXkvdmFsdWUgcGFpciBpbiB0aGlzIGNhY2hlIGlzIHNjb3BlZCB0byB0aGUgd2hvbGUgd29ya3NwYWNlLlxuICogSWYgYW55IGRvY3VtZW50IGluIHRoZSB3b3Jrc3BhY2UgY2hhbmdlcywgdGhlIHdob2xlIGNhY2hlIGlzIGV2aWN0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VDYWNoZSBleHRlbmRzIFNpbXBsZUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihzaGFyZWRTZXJ2aWNlcykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9uRGlzcG9zZShzaGFyZWRTZXJ2aWNlcy53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhY2hpbmcuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IE1hcFNjb3BlLCBTdHJlYW1TY29wZSB9IGZyb20gJy4vc2NvcGUuanMnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgc3RyZWFtIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtLmpzJztcbmltcG9ydCB7IFdvcmtzcGFjZUNhY2hlIH0gZnJvbSAnLi4vdXRpbHMvY2FjaGluZy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFNjb3BlUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMucmVmbGVjdGlvbiA9IHNlcnZpY2VzLnNoYXJlZC5Bc3RSZWZsZWN0aW9uO1xuICAgICAgICB0aGlzLm5hbWVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9ucyA9IHNlcnZpY2VzLndvcmtzcGFjZS5Bc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlcjtcbiAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIgPSBzZXJ2aWNlcy5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcjtcbiAgICAgICAgdGhpcy5nbG9iYWxTY29wZUNhY2hlID0gbmV3IFdvcmtzcGFjZUNhY2hlKHNlcnZpY2VzLnNoYXJlZCk7XG4gICAgfVxuICAgIGdldFNjb3BlKGNvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gW107XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShjb250ZXh0KTtcbiAgICAgICAgY29uc3QgcHJlY29tcHV0ZWQgPSBnZXREb2N1bWVudChjb250ZXh0LmNvbnRhaW5lcikucHJlY29tcHV0ZWRTY29wZXM7XG4gICAgICAgIGlmIChwcmVjb21wdXRlZCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gY29udGV4dC5jb250YWluZXI7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRGVzY3JpcHRpb25zID0gcHJlY29tcHV0ZWQuZ2V0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxsRGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVzLnB1c2goc3RyZWFtKGFsbERlc2NyaXB0aW9ucykuZmlsdGVyKGRlc2MgPT4gdGhpcy5yZWZsZWN0aW9uLmlzU3VidHlwZShkZXNjLnR5cGUsIHJlZmVyZW5jZVR5cGUpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuJGNvbnRhaW5lcjtcbiAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRHbG9iYWxTY29wZShyZWZlcmVuY2VUeXBlLCBjb250ZXh0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNjb3Blcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5jcmVhdGVTY29wZShzY29wZXNbaV0sIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgc2NvcGUgZm9yIHRoZSBnaXZlbiBjb2xsZWN0aW9uIG9mIEFTVCBub2RlIGRlc2NyaXB0aW9ucy5cbiAgICAgKi9cbiAgICBjcmVhdGVTY29wZShlbGVtZW50cywgb3V0ZXJTY29wZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNjb3BlKHN0cmVhbShlbGVtZW50cyksIG91dGVyU2NvcGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBzY29wZSBmb3IgdGhlIGdpdmVuIGNvbGxlY3Rpb24gb2YgQVNUIG5vZGVzLCB3aGljaCBuZWVkIHRvIGJlIHRyYW5zZm9ybWVkIGludG8gcmVzcGVjdGl2ZVxuICAgICAqIGRlc2NyaXB0aW9ucyBmaXJzdC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBgTmFtZVByb3ZpZGVyYCBhbmQgYEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyYCBzZXJ2aWNlcy5cbiAgICAgKi9cbiAgICBjcmVhdGVTY29wZUZvck5vZGVzKGVsZW1lbnRzLCBvdXRlclNjb3BlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzdHJlYW0oZWxlbWVudHMpLm1hcChlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO1xuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KS5ub25OdWxsYWJsZSgpO1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVNjb3BlKHMsIG91dGVyU2NvcGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBnbG9iYWwgc2NvcGUgZmlsdGVyZWQgZm9yIHRoZSBnaXZlbiByZWZlcmVuY2UgdHlwZS5cbiAgICAgKi9cbiAgICBnZXRHbG9iYWxTY29wZShyZWZlcmVuY2VUeXBlLCBfY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxTY29wZUNhY2hlLmdldChyZWZlcmVuY2VUeXBlLCAoKSA9PiBuZXcgTWFwU2NvcGUodGhpcy5pbmRleE1hbmFnZXIuYWxsRWxlbWVudHMocmVmZXJlbmNlVHlwZSkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS1wcm92aWRlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IFVSSSB9IGZyb20gJ3ZzY29kZS11cmknO1xuaW1wb3J0IHsgaXNBc3ROb2RlLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3N5bnRheC10cmVlLmpzJztcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGZpbmROb2Rlc0ZvclByb3BlcnR5IH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNBc3ROb2RlV2l0aENvbW1lbnQobm9kZSkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS4kY29tbWVudCA9PT0gJ3N0cmluZyc7XG59XG5mdW5jdGlvbiBpc0ludGVybWVkaWF0ZVJlZmVyZW5jZShvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgISFvYmogJiYgKCckcmVmJyBpbiBvYmogfHwgJyRlcnJvcicgaW4gb2JqKTtcbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0SnNvblNlcmlhbGl6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIC8qKiBUaGUgc2V0IG9mIEFzdE5vZGUgcHJvcGVydGllcyB0byBiZSBpZ25vcmVkIGJ5IHRoZSBzZXJpYWxpemVyLiAqL1xuICAgICAgICB0aGlzLmlnbm9yZVByb3BlcnRpZXMgPSBuZXcgU2V0KFsnJGNvbnRhaW5lcicsICckY29udGFpbmVyUHJvcGVydHknLCAnJGNvbnRhaW5lckluZGV4JywgJyRkb2N1bWVudCcsICckY3N0Tm9kZSddKTtcbiAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRzID0gc2VydmljZXMuc2hhcmVkLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzO1xuICAgICAgICB0aGlzLmFzdE5vZGVMb2NhdG9yID0gc2VydmljZXMud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yO1xuICAgICAgICB0aGlzLm5hbWVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyO1xuICAgICAgICB0aGlzLmNvbW1lbnRQcm92aWRlciA9IHNlcnZpY2VzLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyO1xuICAgIH1cbiAgICBzZXJpYWxpemUobm9kZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljUmVwbGFjZXIgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVwbGFjZXI7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRSZXBsYWNlciA9IChrZXksIHZhbHVlKSA9PiB0aGlzLnJlcGxhY2VyKGtleSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZXBsYWNlciA9IHNwZWNpZmljUmVwbGFjZXIgPyAoa2V5LCB2YWx1ZSkgPT4gc3BlY2lmaWNSZXBsYWNlcihrZXksIHZhbHVlLCBkZWZhdWx0UmVwbGFjZXIpIDogZGVmYXVsdFJlcGxhY2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RG9jdW1lbnQgPSBnZXREb2N1bWVudChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShub2RlLCByZXBsYWNlciwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudERvY3VtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc2VyaWFsaXplKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCByb290ID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgdGhpcy5saW5rTm9kZShyb290LCByb290LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuICAgIHJlcGxhY2VyKGtleSwgdmFsdWUsIHsgcmVmVGV4dCwgc291cmNlVGV4dCwgdGV4dFJlZ2lvbnMsIGNvbW1lbnRzLCB1cmlDb252ZXJ0ZXIgfSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGlmICh0aGlzLmlnbm9yZVByb3BlcnRpZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHZhbHVlLnJlZjtcbiAgICAgICAgICAgIGNvbnN0ICRyZWZUZXh0ID0gcmVmVGV4dCA/IHZhbHVlLiRyZWZUZXh0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHJlZlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0RG9jdW1lbnQgPSBnZXREb2N1bWVudChyZWZWYWx1ZSk7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFVyaSA9ICcnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnREb2N1bWVudCAmJiB0aGlzLmN1cnJlbnREb2N1bWVudCAhPT0gdGFyZ2V0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVyaUNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VXJpID0gdXJpQ29udmVydGVyKHRhcmdldERvY3VtZW50LnVyaSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VXJpID0gdGFyZ2V0RG9jdW1lbnQudXJpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IHRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocmVmVmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRyZWY6IGAke3RhcmdldFVyaX0jJHt0YXJnZXRQYXRofWAsXG4gICAgICAgICAgICAgICAgICAgICRyZWZUZXh0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRlcnJvcjogKF9iID0gKF9hID0gdmFsdWUuZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlJyxcbiAgICAgICAgICAgICAgICAgICAgJHJlZlRleHRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBhc3ROb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRleHRSZWdpb25zKSB7XG4gICAgICAgICAgICAgICAgYXN0Tm9kZSA9IHRoaXMuYWRkQXN0Tm9kZVJlZ2lvbldpdGhBc3NpZ25tZW50c1RvKE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgaWYgKCgha2V5IHx8IHZhbHVlLiRkb2N1bWVudCkgJiYgKGFzdE5vZGUgPT09IG51bGwgfHwgYXN0Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXN0Tm9kZS4kdGV4dFJlZ2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRvY3VtZW50IFVSSSBpcyBhZGRlZCB0byB0aGUgcm9vdCBub2RlIG9mIHRoZSByZXN1bHRpbmcgSlNPTiB0cmVlXG4gICAgICAgICAgICAgICAgICAgIGFzdE5vZGUuJHRleHRSZWdpb24uZG9jdW1lbnRVUkkgPSAoX2MgPSB0aGlzLmN1cnJlbnREb2N1bWVudCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnVyaS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2VUZXh0ICYmICFrZXkpIHtcbiAgICAgICAgICAgICAgICBhc3ROb2RlICE9PSBudWxsICYmIGFzdE5vZGUgIT09IHZvaWQgMCA/IGFzdE5vZGUgOiAoYXN0Tm9kZSA9IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgYXN0Tm9kZS4kc291cmNlVGV4dCA9IChfZCA9IHZhbHVlLiRjc3ROb2RlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21tZW50cykge1xuICAgICAgICAgICAgICAgIGFzdE5vZGUgIT09IG51bGwgJiYgYXN0Tm9kZSAhPT0gdm9pZCAwID8gYXN0Tm9kZSA6IChhc3ROb2RlID0gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0Tm9kZS4kY29tbWVudCA9IGNvbW1lbnQucmVwbGFjZSgvXFxyL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZSAhPT0gbnVsbCAmJiBhc3ROb2RlICE9PSB2b2lkIDAgPyBhc3ROb2RlIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkQXN0Tm9kZVJlZ2lvbldpdGhBc3NpZ25tZW50c1RvKG5vZGUpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlRG9jdW1lbnRTZWdtZW50ID0gY3N0Tm9kZSA9PiAoe1xuICAgICAgICAgICAgb2Zmc2V0OiBjc3ROb2RlLm9mZnNldCxcbiAgICAgICAgICAgIGVuZDogY3N0Tm9kZS5lbmQsXG4gICAgICAgICAgICBsZW5ndGg6IGNzdE5vZGUubGVuZ3RoLFxuICAgICAgICAgICAgcmFuZ2U6IGNzdE5vZGUucmFuZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm9kZS4kY3N0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dFJlZ2lvbiA9IG5vZGUuJHRleHRSZWdpb24gPSBjcmVhdGVEb2N1bWVudFNlZ21lbnQobm9kZS4kY3N0Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50cyA9IHRleHRSZWdpb24uYXNzaWdubWVudHMgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG5vZGUpLmZpbHRlcihrZXkgPT4gIWtleS5zdGFydHNXaXRoKCckJykpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2lnbm1lbnRzID0gZmluZE5vZGVzRm9yUHJvcGVydHkobm9kZS4kY3N0Tm9kZSwga2V5KS5tYXAoY3JlYXRlRG9jdW1lbnRTZWdtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlBc3NpZ25tZW50cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNba2V5XSA9IHByb3BlcnR5QXNzaWdubWVudHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsaW5rTm9kZShub2RlLCByb290LCBvcHRpb25zLCBjb250YWluZXIsIGNvbnRhaW5lclByb3BlcnR5LCBjb250YWluZXJJbmRleCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0ludGVybWVkaWF0ZVJlZmVyZW5jZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtpbmRleF0gPSB0aGlzLnJldml2ZVJlZmVyZW5jZShub2RlLCBwcm9wZXJ0eU5hbWUsIHJvb3QsIGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rTm9kZShlbGVtZW50LCByb290LCBvcHRpb25zLCBub2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW50ZXJtZWRpYXRlUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdGhpcy5yZXZpdmVSZWZlcmVuY2Uobm9kZSwgcHJvcGVydHlOYW1lLCByb290LCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlua05vZGUoaXRlbSwgcm9vdCwgb3B0aW9ucywgbm9kZSwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtdXRhYmxlID0gbm9kZTtcbiAgICAgICAgbXV0YWJsZS4kY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICBtdXRhYmxlLiRjb250YWluZXJQcm9wZXJ0eSA9IGNvbnRhaW5lclByb3BlcnR5O1xuICAgICAgICBtdXRhYmxlLiRjb250YWluZXJJbmRleCA9IGNvbnRhaW5lckluZGV4O1xuICAgIH1cbiAgICByZXZpdmVSZWZlcmVuY2UoY29udGFpbmVyLCBwcm9wZXJ0eSwgcm9vdCwgcmVmZXJlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGxldCByZWZUZXh0ID0gcmVmZXJlbmNlLiRyZWZUZXh0O1xuICAgICAgICBsZXQgZXJyb3IgPSByZWZlcmVuY2UuJGVycm9yO1xuICAgICAgICBpZiAocmVmZXJlbmNlLiRyZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2V0UmVmTm9kZShyb290LCByZWZlcmVuY2UuJHJlZiwgb3B0aW9ucy51cmlDb252ZXJ0ZXIpO1xuICAgICAgICAgICAgaWYgKGlzQXN0Tm9kZShyZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWZUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlRleHQgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICRyZWZUZXh0OiByZWZUZXh0ICE9PSBudWxsICYmIHJlZlRleHQgIT09IHZvaWQgMCA/IHJlZlRleHQgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmVmXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yID0gcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgcmVmID0ge1xuICAgICAgICAgICAgICAgICRyZWZUZXh0OiByZWZUZXh0ICE9PSBudWxsICYmIHJlZlRleHQgIT09IHZvaWQgMCA/IHJlZlRleHQgOiAnJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlZi5lcnJvciA9IHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IsXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlOiByZWZcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRSZWZOb2RlKHJvb3QsIHVyaSwgdXJpQ29udmVydGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudEluZGV4ID0gdXJpLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgIGlmIChmcmFnbWVudEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZShyb290LCB1cmkuc3Vic3RyaW5nKDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdDb3VsZCBub3QgcmVzb2x2ZSBwYXRoOiAnICsgdXJpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmcmFnbWVudEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VXJpID0gdXJpQ29udmVydGVyID8gdXJpQ29udmVydGVyKHVyaSkgOiBVUkkucGFyc2UodXJpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChkb2N1bWVudFVyaSk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICcgKyB1cmk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5wYXJzZVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VXJpID0gdXJpQ29udmVydGVyID8gdXJpQ29udmVydGVyKHVyaS5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCkpIDogVVJJLnBhcnNlKHVyaS5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoZG9jdW1lbnRVcmkpO1xuICAgICAgICAgICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IGZpbmQgZG9jdW1lbnQgZm9yIFVSSTogJyArIHVyaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmcmFnbWVudEluZGV4ID09PSB1cmkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5wYXJzZVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWUsIHVyaS5zdWJzdHJpbmcoZnJhZ21lbnRJbmRleCArIDEpKTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IHJlc29sdmUgVVJJOiAnICsgdXJpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlcnIpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anNvbi1zZXJpYWxpemVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuL3V0aWxzL3VyaS11dGlscy5qcyc7XG4vKipcbiAqIEdlbmVyaWMgcmVnaXN0cnkgZm9yIExhbmdpdW0gc2VydmljZXMsIGJ1dCBjYXBhYmxlIG9mIGJlaW5nIHVzZWQgd2l0aCBleHRlbmRpbmcgc2VydmljZSBzZXRzIGFzIHdlbGwgKHN1Y2ggYXMgdGhlIGxzcC1jb21wbGV0ZSBMYW5naXVtQ29yZVNlcnZpY2VzIHNldClcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRTZXJ2aWNlUmVnaXN0cnkge1xuICAgIHJlZ2lzdGVyKGxhbmd1YWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5zaW5nbGV0b24gJiYgIXRoaXMubWFwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBsYW5ndWFnZSB0byBiZSByZWdpc3RlcmVkOyBzdG9yZSBpdCBhcyBzaW5nbGV0b24uXG4gICAgICAgICAgICB0aGlzLnNpbmdsZXRvbiA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tYXApIHtcbiAgICAgICAgICAgIHRoaXMubWFwID0ge307XG4gICAgICAgICAgICBpZiAodGhpcy5zaW5nbGV0b24pIHtcbiAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBwcmV2aW91cyBzaW5nbGV0b24gaW5zdGFuY2UgdG8gdGhlIG5ldyBtYXAuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBleHQgb2YgdGhpcy5zaW5nbGV0b24uTGFuZ3VhZ2VNZXRhRGF0YS5maWxlRXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFtleHRdID0gdGhpcy5zaW5nbGV0b247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2luZ2xldG9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFN0b3JlIHRoZSBsYW5ndWFnZSBzZXJ2aWNlcyBpbiB0aGUgbWFwLlxuICAgICAgICBmb3IgKGNvbnN0IGV4dCBvZiBsYW5ndWFnZS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXBbZXh0XSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubWFwW2V4dF0gIT09IGxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmlsZSBleHRlbnNpb24gJHtleHR9IGlzIHVzZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzLiBJdCBpcyBub3cgYXNzaWduZWQgdG8gJyR7bGFuZ3VhZ2UuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkfScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hcFtleHRdID0gbGFuZ3VhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0U2VydmljZXModXJpKSB7XG4gICAgICAgIGlmICh0aGlzLnNpbmdsZXRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNlcnZpY2UgcmVnaXN0cnkgaXMgZW1wdHkuIFVzZSBgcmVnaXN0ZXJgIHRvIHJlZ2lzdGVyIHRoZSBzZXJ2aWNlcyBvZiBhIGxhbmd1YWdlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4dCA9IFVyaVV0aWxzLmV4dG5hbWUodXJpKTtcbiAgICAgICAgY29uc3Qgc2VydmljZXMgPSB0aGlzLm1hcFtleHRdO1xuICAgICAgICBpZiAoIXNlcnZpY2VzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbnRhaW5zIG5vIHNlcnZpY2VzIGZvciB0aGUgZXh0ZW5zaW9uICcke2V4dH0nLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcztcbiAgICB9XG4gICAgZ2V0IGFsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2luZ2xldG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5zaW5nbGV0b25dO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZpY2UtcmVnaXN0cnkuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMSBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBNdWx0aU1hcCB9IGZyb20gJy4uL3V0aWxzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uQ2FuY2VsbGVkIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuLyoqXG4gKiBDcmVhdGUgRGlhZ25vc3RpY0RhdGEgZm9yIGEgZ2l2ZW4gZGlhZ25vc3RpYyBjb2RlLiBUaGUgcmVzdWx0IGNhbiBiZSBwdXQgaW50byB0aGUgYGRhdGFgIGZpZWxkIG9mIGEgRGlhZ25vc3RpY0luZm8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWFnbm9zdGljRGF0YShjb2RlKSB7XG4gICAgcmV0dXJuIHsgY29kZSB9O1xufVxuZXhwb3J0IHZhciBWYWxpZGF0aW9uQ2F0ZWdvcnk7XG4oZnVuY3Rpb24gKFZhbGlkYXRpb25DYXRlZ29yeSkge1xuICAgIFZhbGlkYXRpb25DYXRlZ29yeS5hbGwgPSBbJ2Zhc3QnLCAnc2xvdycsICdidWlsdC1pbiddO1xufSkoVmFsaWRhdGlvbkNhdGVnb3J5IHx8IChWYWxpZGF0aW9uQ2F0ZWdvcnkgPSB7fSkpO1xuLyoqXG4gKiBNYW5hZ2VzIGEgc2V0IG9mIGBWYWxpZGF0aW9uQ2hlY2tgcyB0byBiZSBhcHBsaWVkIHdoZW4gZG9jdW1lbnRzIGFyZSB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IG5ldyBNdWx0aU1hcCgpO1xuICAgICAgICB0aGlzLnJlZmxlY3Rpb24gPSBzZXJ2aWNlcy5zaGFyZWQuQXN0UmVmbGVjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBzZXQgb2YgdmFsaWRhdGlvbiBjaGVja3MuIEVhY2ggdmFsdWUgaW4gdGhlIHJlY29yZCBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbGlkYXRpb24gY2hlY2sgKGkuZS4gYSBmdW5jdGlvbilcbiAgICAgKiBvciBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGVja3NSZWNvcmQgU2V0IG9mIHZhbGlkYXRpb24gY2hlY2tzIHRvIHJlZ2lzdGVyLlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSBPcHRpb25hbCBjYXRlZ29yeSBmb3IgdGhlIHZhbGlkYXRpb24gY2hlY2tzIChkZWZhdWx0cyB0byBgJ2Zhc3QnYCkuXG4gICAgICogQHBhcmFtIHRoaXNPYmogT3B0aW9uYWwgb2JqZWN0IHRvIGJlIHVzZWQgYXMgYHRoaXNgIHdoZW4gY2FsbGluZyB0aGUgdmFsaWRhdGlvbiBjaGVjayBmdW5jdGlvbnMuXG4gICAgICovXG4gICAgcmVnaXN0ZXIoY2hlY2tzUmVjb3JkLCB0aGlzT2JqID0gdGhpcywgY2F0ZWdvcnkgPSAnZmFzdCcpIHtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSAnYnVpbHQtaW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGNoXSBvZiBPYmplY3QuZW50cmllcyhjaGVja3NSZWNvcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja3MgPSBjaDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrcykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrOiB0aGlzLndyYXBWYWxpZGF0aW9uRXhjZXB0aW9uKGNoZWNrLCB0aGlzT2JqKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRW50cnkodHlwZSwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFja3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2s6IHRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24oY2FsbGJhY2tzLCB0aGlzT2JqKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW50cnkodHlwZSwgZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHdyYXBWYWxpZGF0aW9uRXhjZXB0aW9uKGNoZWNrLCB0aGlzT2JqKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAobm9kZSwgYWNjZXB0LCBjYW5jZWxUb2tlbikgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjaGVjay5jYWxsKHRoaXNPYmosIG5vZGUsIGFjY2VwdCwgY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChpc09wZXJhdGlvbkNhbmNlbGxlZChlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb246JywgZXJyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIuc3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NlcHQoJ2Vycm9yJywgJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB2YWxpZGF0aW9uOiAnICsgbWVzc2FnZSwgeyBub2RlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGRFbnRyeSh0eXBlLCBlbnRyeSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0FzdE5vZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuYWRkKCdBc3ROb2RlJywgZW50cnkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgc3VidHlwZSBvZiB0aGlzLnJlZmxlY3Rpb24uZ2V0QWxsU3ViVHlwZXModHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5hZGQoc3VidHlwZSwgZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENoZWNrcyh0eXBlLCBjYXRlZ29yaWVzKSB7XG4gICAgICAgIGxldCBjaGVja3MgPSBzdHJlYW0odGhpcy5lbnRyaWVzLmdldCh0eXBlKSlcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5lbnRyaWVzLmdldCgnQXN0Tm9kZScpKTtcbiAgICAgICAgaWYgKGNhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoZW50cnkgPT4gY2F0ZWdvcmllcy5pbmNsdWRlcyhlbnRyeS5jYXRlZ29yeSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGVja3MubWFwKGVudHJ5ID0+IGVudHJ5LmNoZWNrKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0aW9uLXJlZ2lzdHJ5LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgZmluZE5vZGVGb3JLZXl3b3JkLCBmaW5kTm9kZUZvclByb3BlcnR5IH0gZnJvbSAnLi4vdXRpbHMvZ3JhbW1hci11dGlscy5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Bc3QgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgdG9rZW5Ub1JhbmdlIH0gZnJvbSAnLi4vdXRpbHMvY3N0LXV0aWxzLmpzJztcbmltcG9ydCB7IGludGVycnVwdEFuZENoZWNrLCBpc09wZXJhdGlvbkNhbmNlbGxlZCB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgZGlhZ25vc3RpY0RhdGEgfSBmcm9tICcuL3ZhbGlkYXRpb24tcmVnaXN0cnkuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHREb2N1bWVudFZhbGlkYXRvciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUmVnaXN0cnkgPSBzZXJ2aWNlcy52YWxpZGF0aW9uLlZhbGlkYXRpb25SZWdpc3RyeTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IHNlcnZpY2VzLkxhbmd1YWdlTWV0YURhdGE7XG4gICAgfVxuICAgIGFzeW5jIHZhbGlkYXRlRG9jdW1lbnQoZG9jdW1lbnQsIG9wdGlvbnMgPSB7fSwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gZG9jdW1lbnQucGFyc2VSZXN1bHQ7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNzID0gW107XG4gICAgICAgIGF3YWl0IGludGVycnVwdEFuZENoZWNrKGNhbmNlbFRva2VuKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNhdGVnb3JpZXMgfHwgb3B0aW9ucy5jYXRlZ29yaWVzLmluY2x1ZGVzKCdidWlsdC1pbicpKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0b3BBZnRlckxleGluZ0Vycm9ycyAmJiBkaWFnbm9zdGljcy5zb21lKGQgPT4geyB2YXIgX2E7IHJldHVybiAoKF9hID0gZC5kYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29kZSkgPT09IERvY3VtZW50VmFsaWRhdG9yLkxleGluZ0Vycm9yOyB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BhcnNpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMgJiYgZGlhZ25vc3RpY3Muc29tZShkID0+IHsgdmFyIF9hOyByZXR1cm4gKChfYSA9IGQuZGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvZGUpID09PSBEb2N1bWVudFZhbGlkYXRvci5QYXJzaW5nRXJyb3I7IH0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhkb2N1bWVudCwgZGlhZ25vc3RpY3MsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RvcEFmdGVyTGlua2luZ0Vycm9ycyAmJiBkaWFnbm9zdGljcy5zb21lKGQgPT4geyB2YXIgX2E7IHJldHVybiAoKF9hID0gZC5kYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29kZSkgPT09IERvY3VtZW50VmFsaWRhdG9yLkxpbmtpbmdFcnJvcjsgfSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJvY2VzcyBjdXN0b20gdmFsaWRhdGlvbnNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4uYXdhaXQgdGhpcy52YWxpZGF0ZUFzdChwYXJzZVJlc3VsdC52YWx1ZSwgb3B0aW9ucywgY2FuY2VsVG9rZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoaXNPcGVyYXRpb25DYW5jZWxsZWQoZXJyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB2YWxpZGF0aW9uOicsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfVxuICAgIHByb2Nlc3NMZXhpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBfb3B0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGxleGVyRXJyb3Igb2YgcGFyc2VSZXN1bHQubGV4ZXJFcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSB7XG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IHRvRGlhZ25vc3RpY1NldmVyaXR5KCdlcnJvcicpLFxuICAgICAgICAgICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsZXhlckVycm9yLmxpbmUgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBsZXhlckVycm9yLmNvbHVtbiAtIDFcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsZXhlckVycm9yLmxpbmUgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBsZXhlckVycm9yLmNvbHVtbiArIGxleGVyRXJyb3IubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBsZXhlckVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZGF0YTogZGlhZ25vc3RpY0RhdGEoRG9jdW1lbnRWYWxpZGF0b3IuTGV4aW5nRXJyb3IpLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goZGlhZ25vc3RpYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc1BhcnNpbmdFcnJvcnMocGFyc2VSZXN1bHQsIGRpYWdub3N0aWNzLCBfb3B0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnNlckVycm9yIG9mIHBhcnNlUmVzdWx0LnBhcnNlckVycm9ycykge1xuICAgICAgICAgICAgbGV0IHJhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy8gV2UgY2FuIHJ1biBpbnRvIHRoZSBjaGV2cm90YWluIGVycm9yIHJlY292ZXJ5IGhlcmVcbiAgICAgICAgICAgIC8vIFRoZSB0b2tlbiBjb250YWluZWQgaW4gdGhlIHBhcnNlciBlcnJvciBtaWdodCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgZXZlcnkgcG9zaXRpb24gdmFsdWUgd2lsbCBiZSBgTmFOYFxuICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlckVycm9yLnRva2VuLnN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY2lhbCBwYXJzZXIgZXJyb3IgdHlwZXMgY29udGFpbiBhIGBwcmV2aW91c1Rva2VuYFxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBzaW1wbHkgYXBwZW5kIG91ciBkaWFnbm9zdGljIHRvIHRoYXQgdG9rZW5cbiAgICAgICAgICAgICAgICBpZiAoJ3ByZXZpb3VzVG9rZW4nIGluIHBhcnNlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcGFyc2VyRXJyb3IucHJldmlvdXNUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTih0b2tlbi5zdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0geyBsaW5lOiB0b2tlbi5lbmRMaW5lIC0gMSwgY2hhcmFjdGVyOiB0b2tlbi5lbmRDb2x1bW4gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydDogcG9zaXRpb24sIGVuZDogcG9zaXRpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHZhbGlkIHByZXYgdG9rZW4uIE1pZ2h0IGJlIGVtcHR5IGRvY3VtZW50IG9yIGNvbnRhaW5pbmcgb25seSBoaWRkZW4gdG9rZW5zLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9pbnQgdG8gZG9jdW1lbnQgc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0geyBsaW5lOiAwLCBjaGFyYWN0ZXI6IDAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydDogcG9zaXRpb24sIGVuZDogcG9zaXRpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlID0gdG9rZW5Ub1JhbmdlKHBhcnNlckVycm9yLnRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiB0b0RpYWdub3N0aWNTZXZlcml0eSgnZXJyb3InKSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHBhcnNlckVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGRpYWdub3N0aWNEYXRhKERvY3VtZW50VmFsaWRhdG9yLlBhcnNpbmdFcnJvciksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlhZ25vc3RpY3MucHVzaChkaWFnbm9zdGljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzTGlua2luZ0Vycm9ycyhkb2N1bWVudCwgZGlhZ25vc3RpY3MsIF9vcHRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGRvY3VtZW50LnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtpbmdFcnJvciA9IHJlZmVyZW5jZS5lcnJvcjtcbiAgICAgICAgICAgIGlmIChsaW5raW5nRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBsaW5raW5nRXJyb3IuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbGlua2luZ0Vycm9yLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogbGlua2luZ0Vycm9yLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBEb2N1bWVudFZhbGlkYXRvci5MaW5raW5nRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJUeXBlOiBsaW5raW5nRXJyb3IuY29udGFpbmVyLiR0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGxpbmtpbmdFcnJvci5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlRleHQ6IGxpbmtpbmdFcnJvci5yZWZlcmVuY2UuJHJlZlRleHRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh0aGlzLnRvRGlhZ25vc3RpYygnZXJyb3InLCBsaW5raW5nRXJyb3IubWVzc2FnZSwgaW5mbykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHZhbGlkYXRlQXN0KHJvb3ROb2RlLCBvcHRpb25zLCBjYW5jZWxUb2tlbiA9IENhbmNlbGxhdGlvblRva2VuLk5vbmUpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbkl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yID0gKHNldmVyaXR5LCBtZXNzYWdlLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uSXRlbXMucHVzaCh0aGlzLnRvRGlhZ25vc3RpYyhzZXZlcml0eSwgbWVzc2FnZSwgaW5mbykpO1xuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzdHJlYW1Bc3Qocm9vdE5vZGUpLm1hcChhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tzID0gdGhpcy52YWxpZGF0aW9uUmVnaXN0cnkuZ2V0Q2hlY2tzKG5vZGUuJHR5cGUsIG9wdGlvbnMuY2F0ZWdvcmllcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNoZWNrKG5vZGUsIGFjY2VwdG9yLCBjYW5jZWxUb2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25JdGVtcztcbiAgICB9XG4gICAgdG9EaWFnbm9zdGljKHNldmVyaXR5LCBtZXNzYWdlLCBpbmZvKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgcmFuZ2U6IGdldERpYWdub3N0aWNSYW5nZShpbmZvKSxcbiAgICAgICAgICAgIHNldmVyaXR5OiB0b0RpYWdub3N0aWNTZXZlcml0eShzZXZlcml0eSksXG4gICAgICAgICAgICBjb2RlOiBpbmZvLmNvZGUsXG4gICAgICAgICAgICBjb2RlRGVzY3JpcHRpb246IGluZm8uY29kZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdGFnczogaW5mby50YWdzLFxuICAgICAgICAgICAgcmVsYXRlZEluZm9ybWF0aW9uOiBpbmZvLnJlbGF0ZWRJbmZvcm1hdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGluZm8uZGF0YSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5nZXRTb3VyY2UoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmxhbmd1YWdlSWQ7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERpYWdub3N0aWNSYW5nZShpbmZvKSB7XG4gICAgaWYgKGluZm8ucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIGluZm8ucmFuZ2U7XG4gICAgfVxuICAgIGxldCBjc3ROb2RlO1xuICAgIGlmICh0eXBlb2YgaW5mby5wcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY3N0Tm9kZSA9IGZpbmROb2RlRm9yUHJvcGVydHkoaW5mby5ub2RlLiRjc3ROb2RlLCBpbmZvLnByb3BlcnR5LCBpbmZvLmluZGV4KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGluZm8ua2V5d29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY3N0Tm9kZSA9IGZpbmROb2RlRm9yS2V5d29yZChpbmZvLm5vZGUuJGNzdE5vZGUsIGluZm8ua2V5d29yZCwgaW5mby5pbmRleCk7XG4gICAgfVxuICAgIGNzdE5vZGUgIT09IG51bGwgJiYgY3N0Tm9kZSAhPT0gdm9pZCAwID8gY3N0Tm9kZSA6IChjc3ROb2RlID0gaW5mby5ub2RlLiRjc3ROb2RlKTtcbiAgICBpZiAoIWNzdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiB7IGxpbmU6IDAsIGNoYXJhY3RlcjogMCB9LFxuICAgICAgICAgICAgZW5kOiB7IGxpbmU6IDAsIGNoYXJhY3RlcjogMCB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjc3ROb2RlLnJhbmdlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvRGlhZ25vc3RpY1NldmVyaXR5KHNldmVyaXR5KSB7XG4gICAgc3dpdGNoIChzZXZlcml0eSkge1xuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICByZXR1cm4gMTsgLy8gYWNjb3JkaW5nIHRvIHZzY29kZS1sYW5ndWFnZXNlcnZlci10eXBlcy9saWIvZXNtL21haW4uanMjRGlhZ25vc3RpY1NldmVyaXR5LkVycm9yXG4gICAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICAgICAgcmV0dXJuIDI7IC8vIGFjY29yZGluZyB0byB2c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMvbGliL2VzbS9tYWluLmpzI0RpYWdub3N0aWNTZXZlcml0eS5XYXJuaW5nXG4gICAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICAgICAgcmV0dXJuIDM7IC8vIGFjY29yZGluZyB0byB2c2NvZGUtbGFuZ3VhZ2VzZXJ2ZXItdHlwZXMvbGliL2VzbS9tYWluLmpzI0RpYWdub3N0aWNTZXZlcml0eS5JbmZvcm1hdGlvblxuICAgICAgICBjYXNlICdoaW50JzpcbiAgICAgICAgICAgIHJldHVybiA0OyAvLyBhY2NvcmRpbmcgdG8gdnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzL2xpYi9lc20vbWFpbi5qcyNEaWFnbm9zdGljU2V2ZXJpdHkuSGludFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICcgKyBzZXZlcml0eSk7XG4gICAgfVxufVxuZXhwb3J0IHZhciBEb2N1bWVudFZhbGlkYXRvcjtcbihmdW5jdGlvbiAoRG9jdW1lbnRWYWxpZGF0b3IpIHtcbiAgICBEb2N1bWVudFZhbGlkYXRvci5MZXhpbmdFcnJvciA9ICdsZXhpbmctZXJyb3InO1xuICAgIERvY3VtZW50VmFsaWRhdG9yLlBhcnNpbmdFcnJvciA9ICdwYXJzaW5nLWVycm9yJztcbiAgICBEb2N1bWVudFZhbGlkYXRvci5MaW5raW5nRXJyb3IgPSAnbGlua2luZy1lcnJvcic7XG59KShEb2N1bWVudFZhbGlkYXRvciB8fCAoRG9jdW1lbnRWYWxpZGF0b3IgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG9jdW1lbnQtdmFsaWRhdG9yLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgaXNMaW5raW5nRXJyb3IgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBnZXREb2N1bWVudCwgc3RyZWFtQXN0LCBzdHJlYW1SZWZlcmVuY2VzIH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHRvRG9jdW1lbnRTZWdtZW50IH0gZnJvbSAnLi4vdXRpbHMvY3N0LXV0aWxzLmpzJztcbmltcG9ydCB7IGludGVycnVwdEFuZENoZWNrIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBVcmlVdGlscyB9IGZyb20gJy4uL3V0aWxzL3VyaS11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlcykge1xuICAgICAgICB0aGlzLmFzdE5vZGVMb2NhdG9yID0gc2VydmljZXMud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yO1xuICAgICAgICB0aGlzLm5hbWVQcm92aWRlciA9IHNlcnZpY2VzLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyO1xuICAgIH1cbiAgICBjcmVhdGVEZXNjcmlwdGlvbihub2RlLCBuYW1lLCBkb2N1bWVudCA9IGdldERvY3VtZW50KG5vZGUpKSB7XG4gICAgICAgIG5hbWUgIT09IG51bGwgJiYgbmFtZSAhPT0gdm9pZCAwID8gbmFtZSA6IChuYW1lID0gdGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShub2RlKSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKG5vZGUpO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSBhdCBwYXRoICR7cGF0aH0gaGFzIG5vIG5hbWUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5hbWVOb2RlU2VnbWVudDtcbiAgICAgICAgY29uc3QgbmFtZVNlZ21lbnRHZXR0ZXIgPSAoKSA9PiB7IHZhciBfYTsgcmV0dXJuIG5hbWVOb2RlU2VnbWVudCAhPT0gbnVsbCAmJiBuYW1lTm9kZVNlZ21lbnQgIT09IHZvaWQgMCA/IG5hbWVOb2RlU2VnbWVudCA6IChuYW1lTm9kZVNlZ21lbnQgPSB0b0RvY3VtZW50U2VnbWVudCgoX2EgPSB0aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShub2RlKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbm9kZS4kY3N0Tm9kZSkpOyB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBnZXQgbmFtZVNlZ21lbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVTZWdtZW50R2V0dGVyKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VnbWVudDogdG9Eb2N1bWVudFNlZ21lbnQobm9kZS4kY3N0Tm9kZSksXG4gICAgICAgICAgICB0eXBlOiBub2RlLiR0eXBlLFxuICAgICAgICAgICAgZG9jdW1lbnRVcmk6IGRvY3VtZW50LnVyaSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMubm9kZUxvY2F0b3IgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3I7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZURlc2NyaXB0aW9ucyhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyID0gW107XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZG9jdW1lbnQucGFyc2VSZXN1bHQudmFsdWU7XG4gICAgICAgIGZvciAoY29uc3QgYXN0Tm9kZSBvZiBzdHJlYW1Bc3Qocm9vdE5vZGUpKSB7XG4gICAgICAgICAgICBhd2FpdCBpbnRlcnJ1cHRBbmRDaGVjayhjYW5jZWxUb2tlbik7XG4gICAgICAgICAgICBzdHJlYW1SZWZlcmVuY2VzKGFzdE5vZGUpLmZpbHRlcihyZWZJbmZvID0+ICFpc0xpbmtpbmdFcnJvcihyZWZJbmZvKSkuZm9yRWFjaChyZWZJbmZvID0+IHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBsb2dnaW5nIGEgd2FybmluZyBvciB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBEb2N1bWVudFN0YXRlIGlzIDwgdGhhbiBMaW5rZWRcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuY3JlYXRlRGVzY3JpcHRpb24ocmVmSW5mbyk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcjtcbiAgICB9XG4gICAgY3JlYXRlRGVzY3JpcHRpb24ocmVmSW5mbykge1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlRGVzY3IgPSByZWZJbmZvLnJlZmVyZW5jZS4kbm9kZURlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCByZWZDc3ROb2RlID0gcmVmSW5mby5yZWZlcmVuY2UuJHJlZk5vZGU7XG4gICAgICAgIGlmICghdGFyZ2V0Tm9kZURlc2NyIHx8ICFyZWZDc3ROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY1VyaSA9IGdldERvY3VtZW50KHJlZkluZm8uY29udGFpbmVyKS51cmk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VVcmk6IGRvY1VyaSxcbiAgICAgICAgICAgIHNvdXJjZVBhdGg6IHRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocmVmSW5mby5jb250YWluZXIpLFxuICAgICAgICAgICAgdGFyZ2V0VXJpOiB0YXJnZXROb2RlRGVzY3IuZG9jdW1lbnRVcmksXG4gICAgICAgICAgICB0YXJnZXRQYXRoOiB0YXJnZXROb2RlRGVzY3IucGF0aCxcbiAgICAgICAgICAgIHNlZ21lbnQ6IHRvRG9jdW1lbnRTZWdtZW50KHJlZkNzdE5vZGUpLFxuICAgICAgICAgICAgbG9jYWw6IFVyaVV0aWxzLmVxdWFscyh0YXJnZXROb2RlRGVzY3IuZG9jdW1lbnRVcmksIGRvY1VyaSlcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3QtZGVzY3JpcHRpb25zLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRBc3ROb2RlTG9jYXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2VnbWVudFNlcGFyYXRvciA9ICcvJztcbiAgICAgICAgdGhpcy5pbmRleFNlcGFyYXRvciA9ICdAJztcbiAgICB9XG4gICAgZ2V0QXN0Tm9kZVBhdGgobm9kZSkge1xuICAgICAgICBpZiAobm9kZS4kY29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJQYXRoID0gdGhpcy5nZXRBc3ROb2RlUGF0aChub2RlLiRjb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3QgbmV3U2VnbWVudCA9IHRoaXMuZ2V0UGF0aFNlZ21lbnQobm9kZSk7XG4gICAgICAgICAgICBjb25zdCBub2RlUGF0aCA9IGNvbnRhaW5lclBhdGggKyB0aGlzLnNlZ21lbnRTZXBhcmF0b3IgKyBuZXdTZWdtZW50O1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgZ2V0UGF0aFNlZ21lbnQoeyAkY29udGFpbmVyUHJvcGVydHksICRjb250YWluZXJJbmRleCB9KSB7XG4gICAgICAgIGlmICghJGNvbnRhaW5lclByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICckY29udGFpbmVyUHJvcGVydHknIGluIEFTVCBub2RlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNvbnRhaW5lckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAkY29udGFpbmVyUHJvcGVydHkgKyB0aGlzLmluZGV4U2VwYXJhdG9yICsgJGNvbnRhaW5lckluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkY29udGFpbmVyUHJvcGVydHk7XG4gICAgfVxuICAgIGdldEFzdE5vZGUobm9kZSwgcGF0aCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQodGhpcy5zZWdtZW50U2VwYXJhdG9yKTtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzVmFsdWUgfHwgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlJbmRleCA9IGN1cnJlbnRWYWx1ZS5pbmRleE9mKHRoaXMuaW5kZXhTZXBhcmF0b3IpO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjdXJyZW50VmFsdWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5SW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5SW5kZXggPSBwYXJzZUludChjdXJyZW50VmFsdWUuc3Vic3RyaW5nKHByb3BlcnR5SW5kZXggKyAxKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBwcmV2aW91c1ZhbHVlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkgPT09IG51bGwgfHwgYXJyYXkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFycmF5W2FycmF5SW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWVbY3VycmVudFZhbHVlXTtcbiAgICAgICAgfSwgbm9kZSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LW5vZGUtbG9jYXRvci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG4vKipcbiAqIEJhc2UgY29uZmlndXJhdGlvbiBwcm92aWRlciBmb3IgYnVpbGRpbmcgdXAgb3RoZXIgY29uZmlndXJhdGlvbiBwcm92aWRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRDb25maWd1cmF0aW9uUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy53b3Jrc3BhY2VDb25maWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlUmVnaXN0cnkgPSBzZXJ2aWNlcy5TZXJ2aWNlUmVnaXN0cnk7XG4gICAgfVxuICAgIGdldCByZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2U7XG4gICAgfVxuICAgIGluaXRpYWxpemUocGFyYW1zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMud29ya3NwYWNlQ29uZmlnID0gKF9iID0gKF9hID0gcGFyYW1zLmNhcGFiaWxpdGllcy53b3Jrc3BhY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25maWd1cmF0aW9uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbiAgICB9XG4gICAgYXN5bmMgaW5pdGlhbGl6ZWQocGFyYW1zKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtzcGFjZUNvbmZpZykge1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5yZWdpc3Rlcikge1xuICAgICAgICAgICAgICAgIC8vIHBhcmFtcy5yZWdpc3RlciguLi4pIGlzIGEgZnVuY3Rpb24gdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxpbmcgbGFuZ3VhZ2Ugc2VydmVyIGZvciB0aGUgc2FrZSBvZlxuICAgICAgICAgICAgICAgIC8vICBkZWNvdXBsaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgY29uY3JldGUgTFNQIGltcGxlbWVudGF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBMU1AgQ29ubmVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbDtcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVnaXN0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGxhbmd1YWdlcy5tYXAobGFuZyA9PiB0aGlzLnRvU2VjdGlvbk5hbWUobGFuZy5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5mZXRjaENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBwYXJhbXMuZmV0Y2hDb25maWd1cmF0aW9uKC4uLikgaXMgYSBmdW5jdGlvbiB0byBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGluZyBsYW5ndWFnZSBzZXJ2ZXIgZm9yIHRoZSBzYWtlIG9mXG4gICAgICAgICAgICAgICAgLy8gIGRlY291cGxpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBjb25jcmV0ZSBMU1AgaW1wbGVtZW50YXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIExTUCBDb25uZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnVG9VcGRhdGUgPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGxhbmcgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgYWxsIGxhbmd1YWdlc1xuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnRvU2VjdGlvbk5hbWUobGFuZy5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIC8vIGdldCB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbnMgKGRlZmF1bHQgc2NvcGUgVVJJKVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBwYXJhbXMuZmV0Y2hDb25maWd1cmF0aW9uKGNvbmZpZ1RvVXBkYXRlKTtcbiAgICAgICAgICAgICAgICBjb25maWdUb1VwZGF0ZS5mb3JFYWNoKChjb25mLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihjb25mLnNlY3Rpb24sIGNvbmZpZ3NbaWR4XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVhZHkucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiAgVXBkYXRlcyB0aGUgY2FjaGVkIGNvbmZpZ3VyYXRpb25zIHVzaW5nIHRoZSBgY2hhbmdlYCBub3RpZmljYXRpb24gcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFuZ2UgVGhlIHBhcmFtZXRlcnMgb2YgYSBjaGFuZ2UgY29uZmlndXJhdGlvbiBub3RpZmljYXRpb24uXG4gICAgICogYHNldHRpbmdzYCBwcm9wZXJ0eSBvZiB0aGUgY2hhbmdlIG9iamVjdCBjb3VsZCBiZSBleHByZXNzZWQgYXMgYFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+YFxuICAgICAqL1xuICAgIHVwZGF0ZUNvbmZpZ3VyYXRpb24oY2hhbmdlKSB7XG4gICAgICAgIGlmICghY2hhbmdlLnNldHRpbmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlLnNldHRpbmdzKS5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihzZWN0aW9uLCBjaGFuZ2Uuc2V0dGluZ3Nbc2VjdGlvbl0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXBkYXRlU2VjdGlvbkNvbmZpZ3VyYXRpb24oc2VjdGlvbiwgY29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLnNldHRpbmdzW3NlY3Rpb25dID0gY29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIGEgY29uZmlndXJhdGlvbiB2YWx1ZSBzdG9yZWQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS5cbiAgICAqXG4gICAgKiBAcGFyYW0gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIGlkXG4gICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uIG5hbWVcbiAgICAqL1xuICAgIGFzeW5jIGdldENvbmZpZ3VyYXRpb24obGFuZ3VhZ2UsIGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWFkeTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLnRvU2VjdGlvbk5hbWUobGFuZ3VhZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc1tzZWN0aW9uTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzW3NlY3Rpb25OYW1lXVtjb25maWd1cmF0aW9uXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b1NlY3Rpb25OYW1lKGxhbmd1YWdlSWQpIHtcbiAgICAgICAgcmV0dXJuIGAke2xhbmd1YWdlSWR9YDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHZhciBEaXNwb3NhYmxlO1xuKGZ1bmN0aW9uIChEaXNwb3NhYmxlKSB7XG4gICAgZnVuY3Rpb24gY3JlYXRlKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXNwb3NlOiBhc3luYyAoKSA9PiBhd2FpdCBjYWxsYmFjaygpXG4gICAgICAgIH07XG4gICAgfVxuICAgIERpc3Bvc2FibGUuY3JlYXRlID0gY3JlYXRlO1xufSkoRGlzcG9zYWJsZSB8fCAoRGlzcG9zYWJsZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXNwb3NhYmxlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgRGlzcG9zYWJsZSB9IGZyb20gJy4uL3V0aWxzL2Rpc3Bvc2FibGUuanMnO1xuaW1wb3J0IHsgTXVsdGlNYXAgfSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25DYW5jZWxsZWQsIGludGVycnVwdEFuZENoZWNrIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkNhdGVnb3J5IH0gZnJvbSAnLi4vdmFsaWRhdGlvbi92YWxpZGF0aW9uLXJlZ2lzdHJ5LmpzJztcbmltcG9ydCB7IERvY3VtZW50U3RhdGUgfSBmcm9tICcuL2RvY3VtZW50cy5qcyc7XG5leHBvcnQgY2xhc3MgRGVmYXVsdERvY3VtZW50QnVpbGRlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVCdWlsZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBydW4gb25seSB0aGUgYnVpbHQtaW4gdmFsaWRhdGlvbiBjaGVja3MgYW5kIHRob3NlIGluIHRoZSBfZmFzdF8gY2F0ZWdvcnkgKGluY2x1ZGVzIHRob3NlIHdpdGhvdXQgY2F0ZWdvcnkpXG4gICAgICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllczogWydidWlsdC1pbicsICdmYXN0J11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzID0gbmV3IE11bHRpTWFwKCk7XG4gICAgICAgIHRoaXMuYnVpbGRTdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEJ1aWxkV2FpdGVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPSBEb2N1bWVudFN0YXRlLkNoYW5nZWQ7XG4gICAgICAgIHRoaXMubGFuZ2l1bURvY3VtZW50cyA9IHNlcnZpY2VzLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzO1xuICAgICAgICB0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50RmFjdG9yeTtcbiAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyO1xuICAgICAgICB0aGlzLnNlcnZpY2VSZWdpc3RyeSA9IHNlcnZpY2VzLlNlcnZpY2VSZWdpc3RyeTtcbiAgICB9XG4gICAgYXN5bmMgYnVpbGQoZG9jdW1lbnRzLCBvcHRpb25zID0ge30sIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvY3VtZW50cykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZG9jdW1lbnQudXJpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuc3RhdGUgPT09IERvY3VtZW50U3RhdGUuVmFsaWRhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnZhbGlkYXRpb24gPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgcmUtcnVubmluZyBhbGwgdmFsaWRhdGlvbiBjaGVja3NcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuc3RhdGUgPSBEb2N1bWVudFN0YXRlLkluZGV4ZWRSZWZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kaWFnbm9zdGljcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZFN0YXRlID0gdGhpcy5idWlsZFN0YXRlLmdldChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0NhdGVnb3JpZXMgPSAoX2EgPSBidWlsZFN0YXRlID09PSBudWxsIHx8IGJ1aWxkU3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1aWxkU3RhdGUucmVzdWx0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsaWRhdGlvbkNoZWNrcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiB3aXRoIGV4cGxpY2l0IG9wdGlvbnMgd2FzIHJlcXVlc3RlZCBmb3IgYSBkb2N1bWVudCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcGFydGx5IHZhbGlkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBtZXJnZSB0aGUgcHJldmlvdXMgdmFsaWRhdGlvbiBjYXRlZ29yaWVzIHdpdGggdGhlIG5ldyBvbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcmllcyA9IChfYiA9IG9wdGlvbnMudmFsaWRhdGlvbi5jYXRlZ29yaWVzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBWYWxpZGF0aW9uQ2F0ZWdvcnkuYWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IG5ld0NhdGVnb3JpZXMuZmlsdGVyKGMgPT4gIXByZXZpb3VzQ2F0ZWdvcmllcy5pbmNsdWRlcyhjKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFN0YXRlLnNldChrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnZhbGlkYXRpb24pLCB7IGNhdGVnb3JpZXMgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBidWlsZFN0YXRlLnJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0YXRlID0gRG9jdW1lbnRTdGF0ZS5JbmRleGVkUmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQ6IGZvcmdldCBhbnkgcHJldmlvdXMgYnVpbGQgb3B0aW9uc1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IERvY3VtZW50U3RhdGUuQ2hhbmdlZDtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGRvY3VtZW50cy5tYXAoZSA9PiBlLnVyaSksIFtdKTtcbiAgICAgICAgYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhkb2N1bWVudHMsIG9wdGlvbnMsIGNhbmNlbFRva2VuKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlKGNoYW5nZWQsIGRlbGV0ZWQsIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IERvY3VtZW50U3RhdGUuQ2hhbmdlZDtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBtZXRhZGF0YSBvZiBkb2N1bWVudHMgdGhhdCBhcmUgcmVwb3J0ZWQgYXMgZGVsZXRlZFxuICAgICAgICBmb3IgKGNvbnN0IGRlbGV0ZWRVcmkgb2YgZGVsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KGRlbGV0ZWRVcmkpO1xuICAgICAgICAgICAgdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShkZWxldGVkVXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIucmVtb3ZlKGRlbGV0ZWRVcmkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgc3RhdGUgb2YgYWxsIGNoYW5nZWQgZG9jdW1lbnRzIHRvIGBDaGFuZ2VkYCBzbyB0aGV5IGFyZSBjb21wbGV0ZWx5IHJlYnVpbHRcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVXJpIG9mIGNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRhdGVkID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmludmFsaWRhdGVEb2N1bWVudChjaGFuZ2VkVXJpKTtcbiAgICAgICAgICAgIGlmICghaW52YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYW4gdW5wYXJzZWQsIGludmFsaWQgZG9jdW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHBhcnNlZCBhcyBzb29uIGFzIHdlIHJlYWNoIHRoZSBmaXJzdCBkb2N1bWVudCBidWlsZGVyIHBoYXNlLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHRvIGNhbmNlbCB0aGUgcGFyc2luZyBwcm9jZXNzIGxhdGVyIGluIGNhc2Ugd2UgbmVlZCBpdC5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEb2N1bWVudCA9IHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tTW9kZWwoeyAkdHlwZTogJ0lOVkFMSUQnIH0sIGNoYW5nZWRVcmkpO1xuICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LnN0YXRlID0gRG9jdW1lbnRTdGF0ZS5DaGFuZ2VkO1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChuZXdEb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGNoYW5nZWRVcmkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSBzdGF0ZSBvZiBhbGwgZG9jdW1lbnRzIHRoYXQgc2hvdWxkIGJlIHJlbGlua2VkIHRvIGBDb21wdXRlZFNjb3Blc2AgKGlmIG5vdCBhbHJlYWR5IGxvd2VyKVxuICAgICAgICBjb25zdCBhbGxDaGFuZ2VkVXJpcyA9IHN0cmVhbShjaGFuZ2VkKS5jb25jYXQoZGVsZXRlZCkubWFwKHVyaSA9PiB1cmkudG9TdHJpbmcoKSkudG9TZXQoKTtcbiAgICAgICAgdGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbFxuICAgICAgICAgICAgLmZpbHRlcihkb2MgPT4gIWFsbENoYW5nZWRVcmlzLmhhcyhkb2MudXJpLnRvU3RyaW5nKCkpICYmIHRoaXMuc2hvdWxkUmVsaW5rKGRvYywgYWxsQ2hhbmdlZFVyaXMpKVxuICAgICAgICAgICAgLmZvckVhY2goZG9jID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlciA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGRvYy51cmkpLnJlZmVyZW5jZXMuTGlua2VyO1xuICAgICAgICAgICAgbGlua2VyLnVubGluayhkb2MpO1xuICAgICAgICAgICAgZG9jLnN0YXRlID0gTWF0aC5taW4oZG9jLnN0YXRlLCBEb2N1bWVudFN0YXRlLkNvbXB1dGVkU2NvcGVzKTtcbiAgICAgICAgICAgIGRvYy5kaWFnbm9zdGljcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgb2YgdGhlIHVwZGF0ZVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRVcGRhdGUoY2hhbmdlZCwgZGVsZXRlZCk7XG4gICAgICAgIC8vIE9ubHkgYWxsb3cgaW50ZXJydXB0aW5nIHRoZSBleGVjdXRpb24gYWZ0ZXIgYWxsIHN0YXRlIGNoYW5nZXMgYXJlIGRvbmVcbiAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAvLyBDb2xsZWN0IGFsbCBkb2N1bWVudHMgdGhhdCB3ZSBzaG91bGQgcmVidWlsZFxuICAgICAgICBjb25zdCByZWJ1aWxkRG9jdW1lbnRzID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbFxuICAgICAgICAgICAgLmZpbHRlcihkb2MgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aG9zZSB0aGF0IHdlcmUgcmVwb3J0ZWQgYXMgY2hhbmdlZCBhbmQgdGhvc2UgdGhhdCB3ZSBzZWxlY3RlZCBmb3IgcmVsaW5raW5nXG4gICAgICAgICAgICByZXR1cm4gZG9jLnN0YXRlIDwgRG9jdW1lbnRTdGF0ZS5MaW5rZWRcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIHRob3NlIGZvciB3aGljaCBhIHByZXZpb3VzIGJ1aWxkIGhhcyBiZWVuIGNhbmNlbGxlZFxuICAgICAgICAgICAgICAgIHx8ICEoKF9hID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2MudXJpLnRvU3RyaW5nKCkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGVkKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50b0FycmF5KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYnVpbGREb2N1bWVudHMocmVidWlsZERvY3VtZW50cywgdGhpcy51cGRhdGVCdWlsZE9wdGlvbnMsIGNhbmNlbFRva2VuKTtcbiAgICB9XG4gICAgYXN5bmMgZW1pdFVwZGF0ZShjaGFuZ2VkLCBkZWxldGVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMudXBkYXRlTGlzdGVuZXJzLm1hcChsaXN0ZW5lciA9PiBsaXN0ZW5lcihjaGFuZ2VkLCBkZWxldGVkKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBkb2N1bWVudCBzaG91bGQgYmUgcmVsaW5rZWQgYWZ0ZXIgY2hhbmdlcyB3ZXJlIGZvdW5kIGluIHRoZSBnaXZlbiBVUklzLlxuICAgICAqL1xuICAgIHNob3VsZFJlbGluayhkb2N1bWVudCwgY2hhbmdlZFVyaXMpIHtcbiAgICAgICAgLy8gUmVsaW5rIGRvY3VtZW50cyB3aXRoIGxpbmtpbmcgZXJyb3JzIC0tIG1heWJlIHRob3NlIHJlZmVyZW5jZXMgY2FuIGJlIHJlc29sdmVkIG5vd1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVmZXJlbmNlcy5zb21lKHJlZiA9PiByZWYuZXJyb3IgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRvY3VtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBvZiB0aGUgY2hhbmdlZCBVUklzXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4TWFuYWdlci5pc0FmZmVjdGVkKGRvY3VtZW50LCBjaGFuZ2VkVXJpcyk7XG4gICAgfVxuICAgIG9uVXBkYXRlKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gRGlzcG9zYWJsZS5jcmVhdGUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnVwZGF0ZUxpc3RlbmVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBnaXZlbiBkb2N1bWVudHMgYnkgc3RlcHBpbmcgdGhyb3VnaCBhbGwgYnVpbGQgcGhhc2VzLiBJZiBhIGRvY3VtZW50J3Mgc3RhdGUgaW5kaWNhdGVzXG4gICAgICogdGhhdCBhIGNlcnRhaW4gYnVpbGQgcGhhc2UgaXMgYWxyZWFkeSBkb25lLCB0aGUgcGhhc2UgaXMgc2tpcHBlZCBmb3IgdGhhdCBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBhc3luYyBidWlsZERvY3VtZW50cyhkb2N1bWVudHMsIG9wdGlvbnMsIGNhbmNlbFRva2VuKSB7XG4gICAgICAgIHRoaXMucHJlcGFyZUJ1aWxkKGRvY3VtZW50cywgb3B0aW9ucyk7XG4gICAgICAgIC8vIDAuIFBhcnNlIGNvbnRlbnRcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5QYXJzZWQsIGNhbmNlbFRva2VuLCBkb2MgPT4gdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LnVwZGF0ZShkb2MsIGNhbmNlbFRva2VuKSk7XG4gICAgICAgIC8vIDEuIEluZGV4IGNvbnRlbnRcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5JbmRleGVkQ29udGVudCwgY2FuY2VsVG9rZW4sIGRvYyA9PiB0aGlzLmluZGV4TWFuYWdlci51cGRhdGVDb250ZW50KGRvYywgY2FuY2VsVG9rZW4pKTtcbiAgICAgICAgLy8gMi4gQ29tcHV0ZSBzY29wZXNcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5Db21wdXRlZFNjb3BlcywgY2FuY2VsVG9rZW4sIGFzeW5jIChkb2MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlQ29tcHV0YXRpb24gPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhkb2MudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb247XG4gICAgICAgICAgICBkb2MucHJlY29tcHV0ZWRTY29wZXMgPSBhd2FpdCBzY29wZUNvbXB1dGF0aW9uLmNvbXB1dGVMb2NhbFNjb3Blcyhkb2MsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDMuIExpbmtpbmdcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGRvY3VtZW50cywgRG9jdW1lbnRTdGF0ZS5MaW5rZWQsIGNhbmNlbFRva2VuLCBkb2MgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua2VyID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZG9jLnVyaSkucmVmZXJlbmNlcy5MaW5rZXI7XG4gICAgICAgICAgICByZXR1cm4gbGlua2VyLmxpbmsoZG9jLCBjYW5jZWxUb2tlbik7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LiBJbmRleCByZWZlcmVuY2VzXG4gICAgICAgIGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShkb2N1bWVudHMsIERvY3VtZW50U3RhdGUuSW5kZXhlZFJlZmVyZW5jZXMsIGNhbmNlbFRva2VuLCBkb2MgPT4gdGhpcy5pbmRleE1hbmFnZXIudXBkYXRlUmVmZXJlbmNlcyhkb2MsIGNhbmNlbFRva2VuKSk7XG4gICAgICAgIC8vIDUuIFZhbGlkYXRpb25cbiAgICAgICAgY29uc3QgdG9CZVZhbGlkYXRlZCA9IGRvY3VtZW50cy5maWx0ZXIoZG9jID0+IHRoaXMuc2hvdWxkVmFsaWRhdGUoZG9jKSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZSh0b0JlVmFsaWRhdGVkLCBEb2N1bWVudFN0YXRlLlZhbGlkYXRlZCwgY2FuY2VsVG9rZW4sIGRvYyA9PiB0aGlzLnZhbGlkYXRlKGRvYywgY2FuY2VsVG9rZW4pKTtcbiAgICAgICAgLy8gSWYgd2UndmUgbWFkZSBpdCB0byB0aGlzIHBvaW50IHdpdGhvdXQgYmVpbmcgY2FuY2VsbGVkLCB3ZSBjYW4gbWFyayB0aGUgYnVpbGQgc3RhdGUgYXMgY29tcGxldGVkLlxuICAgICAgICBmb3IgKGNvbnN0IGRvYyBvZiBkb2N1bWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2MudXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlQnVpbGQoZG9jdW1lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZG9jIG9mIGRvY3VtZW50cykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZG9jLnVyaS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmJ1aWxkU3RhdGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaGFzIG5vIHByZXZpb3VzIGJ1aWxkIHN0YXRlLCB3ZSBzZXQgaXQuIElmIGl0IGhhcyBvbmUsIGJ1dCBpdCdzIGFscmVhZHkgbWFya2VkXG4gICAgICAgICAgICAvLyBhcyBjb21wbGV0ZWQsIHdlIG92ZXJ3cml0ZSBpdC4gSWYgdGhlIHByZXZpb3VzIGJ1aWxkIHdhcyBub3QgY29tcGxldGVkLCB3ZSBrZWVwIGl0cyBzdGF0ZVxuICAgICAgICAgICAgLy8gYW5kIGNvbnRpbnVlIHdoZXJlIGl0IHdhcyBjYW5jZWxsZWQuXG4gICAgICAgICAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRTdGF0ZS5zZXQoa2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogc3RhdGUgPT09IG51bGwgfHwgc3RhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0YXRlLnJlc3VsdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJ1bkNhbmNlbGFibGUoZG9jdW1lbnRzLCB0YXJnZXRTdGF0ZSwgY2FuY2VsVG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gZG9jdW1lbnRzLmZpbHRlcihlID0+IGUuc3RhdGUgPCB0YXJnZXRTdGF0ZSk7XG4gICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZmlsdGVyZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGludGVycnVwdEFuZENoZWNrKGNhbmNlbFRva2VuKTtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGRvY3VtZW50KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlCdWlsZFBoYXNlKGZpbHRlcmVkLCB0YXJnZXRTdGF0ZSwgY2FuY2VsVG9rZW4pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgIH1cbiAgICBvbkJ1aWxkUGhhc2UodGFyZ2V0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5hZGQodGFyZ2V0U3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIERpc3Bvc2FibGUuY3JlYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5kZWxldGUodGFyZ2V0U3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhaXRVbnRpbChzdGF0ZSwgdXJpT3JUb2tlbiwgY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgbGV0IHVyaSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHVyaU9yVG9rZW4gJiYgJ3BhdGgnIGluIHVyaU9yVG9rZW4pIHtcbiAgICAgICAgICAgIHVyaSA9IHVyaU9yVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYW5jZWxUb2tlbiA9IHVyaU9yVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsVG9rZW4gIT09IG51bGwgJiYgY2FuY2VsVG9rZW4gIT09IHZvaWQgMCA/IGNhbmNlbFRva2VuIDogKGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSk7XG4gICAgICAgIGlmICh1cmkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHVyaSk7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuc3RhdGUgPiBzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhdGUgPj0gc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYW5jZWxUb2tlbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KE9wZXJhdGlvbkNhbmNlbGxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkRGlzcG9zYWJsZSA9IHRoaXMub25CdWlsZFBoYXNlKHN0YXRlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYnVpbGREaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxEaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodXJpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHVyaSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZG9jdW1lbnQgPT09IG51bGwgfHwgZG9jdW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRvY3VtZW50LnVyaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxEaXNwb3NhYmxlID0gY2FuY2VsVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkRGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgY2FuY2VsRGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KE9wZXJhdGlvbkNhbmNlbGxlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIG5vdGlmeUJ1aWxkUGhhc2UoZG9jdW1lbnRzLCBzdGF0ZSwgY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIERvbid0IG5vdGlmeSB3aGVuIG5vIGRvY3VtZW50IGhhcyBiZWVuIHByb2Nlc3NlZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5nZXQoc3RhdGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgaW50ZXJydXB0QW5kQ2hlY2soY2FuY2VsVG9rZW4pO1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIoZG9jdW1lbnRzLCBjYW5jZWxUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGRvY3VtZW50IHNob3VsZCBiZSB2YWxpZGF0ZWQgZHVyaW5nIGEgYnVpbGQuIFRoZSBkZWZhdWx0XG4gICAgICogaW1wbGVtZW50YXRpb24gY2hlY2tzIHRoZSBgdmFsaWRhdGlvbmAgcHJvcGVydHkgb2YgdGhlIGJ1aWxkIG9wdGlvbnMuIElmIGl0J3Mgc2V0IHRvIGB0cnVlYFxuICAgICAqIG9yIGEgYFZhbGlkYXRpb25PcHRpb25zYCBvYmplY3QsIHRoZSBkb2N1bWVudCBpcyBpbmNsdWRlZCBpbiB0aGUgdmFsaWRhdGlvbiBwaGFzZS5cbiAgICAgKi9cbiAgICBzaG91bGRWYWxpZGF0ZShkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmdldEJ1aWxkT3B0aW9ucyhkb2N1bWVudCkudmFsaWRhdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1biB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgZ2l2ZW4gZG9jdW1lbnQgYW5kIHN0b3JlIHRoZSByZXN1bHRpbmcgZGlhZ25vc3RpY3MgaW4gdGhlIGRvY3VtZW50LlxuICAgICAqIElmIHRoZSBkb2N1bWVudCBhbHJlYWR5IGNvbnRhaW5zIGRpYWdub3N0aWNzLCB0aGUgbmV3IG9uZXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LlxuICAgICAqL1xuICAgIGFzeW5jIHZhbGlkYXRlKGRvY3VtZW50LCBjYW5jZWxUb2tlbikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhkb2N1bWVudC51cmkpLnZhbGlkYXRpb24uRG9jdW1lbnRWYWxpZGF0b3I7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25TZXR0aW5nID0gdGhpcy5nZXRCdWlsZE9wdGlvbnMoZG9jdW1lbnQpLnZhbGlkYXRpb247XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2YgdmFsaWRhdGlvblNldHRpbmcgPT09ICdvYmplY3QnID8gdmFsaWRhdGlvblNldHRpbmcgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNzID0gYXdhaXQgdmFsaWRhdG9yLnZhbGlkYXRlRG9jdW1lbnQoZG9jdW1lbnQsIG9wdGlvbnMsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgaWYgKGRvY3VtZW50LmRpYWdub3N0aWNzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaWFnbm9zdGljcy5wdXNoKC4uLmRpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4ZWN1dGVkIHZhbGlkYXRpb24gaW4gdGhlIGJ1aWxkIHN0YXRlXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2N1bWVudC51cmkudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgKF9hID0gc3RhdGUucmVzdWx0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoc3RhdGUucmVzdWx0ID0ge30pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcmllcyA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yaWVzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBWYWxpZGF0aW9uQ2F0ZWdvcnkuYWxsO1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVzdWx0LnZhbGlkYXRpb25DaGVja3MucHVzaCguLi5uZXdDYXRlZ29yaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzID0gWy4uLm5ld0NhdGVnb3JpZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldEJ1aWxkT3B0aW9ucyhkb2N1bWVudCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5idWlsZFN0YXRlLmdldChkb2N1bWVudC51cmkudG9TdHJpbmcoKSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpb25zKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7fTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb2N1bWVudC1idWlsZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29udGV4dENhY2hlIH0gZnJvbSAnLi4vdXRpbHMvY2FjaGluZy5qcyc7XG5pbXBvcnQgeyBDYW5jZWxsYXRpb25Ub2tlbiB9IGZyb20gJy4uL3V0aWxzL2NhbmNlbGxhdGlvbi5qcyc7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tICcuLi91dGlscy9zdHJlYW0uanMnO1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuLi91dGlscy91cmktdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRJbmRleE1hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc3ltYm9sIGluZGV4IHN0b3JlcyBhbGwgYEFzdE5vZGVEZXNjcmlwdGlvbmAgaXRlbXMgZXhwb3J0ZWQgYnkgYSBkb2N1bWVudC5cbiAgICAgICAgICogVGhlIGtleSB1c2VkIGluIHRoaXMgbWFwIGlzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmljIGRvY3VtZW50IFVSSS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3ltYm9sSW5kZXggPSBuZXcgTWFwKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGlzIGEgY2FjaGUgZm9yIHRoZSBgYWxsRWxlbWVudHMoKWAgbWV0aG9kLlxuICAgICAgICAgKiBJdCBjYWNoZXMgdGhlIGRlc2NyaXB0aW9ucyBmcm9tIGBzeW1ib2xJbmRleGAgZ3JvdXBlZCBieSB0eXBlcy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3ltYm9sQnlUeXBlSW5kZXggPSBuZXcgQ29udGV4dENhY2hlKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGluZGV4IGtlZXBzIHRyYWNrIG9mIGFsbCBgUmVmZXJlbmNlRGVzY3JpcHRpb25gIGl0ZW1zIGV4cG9ydGVkIGJ5IGEgZG9jdW1lbnQuXG4gICAgICAgICAqIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHdoaWNoIGVsZW1lbnRzIGFyZSBhZmZlY3RlZCBieSBhIGRvY3VtZW50IGNoYW5nZVxuICAgICAgICAgKiBhbmQgZm9yIGZpbmRpbmcgcmVmZXJlbmNlcyB0byBhbiBBU1Qgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVmZXJlbmNlSW5kZXggPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRzID0gc2VydmljZXMud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHM7XG4gICAgICAgIHRoaXMuc2VydmljZVJlZ2lzdHJ5ID0gc2VydmljZXMuU2VydmljZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmFzdFJlZmxlY3Rpb24gPSBzZXJ2aWNlcy5Bc3RSZWZsZWN0aW9uO1xuICAgIH1cbiAgICBmaW5kQWxsUmVmZXJlbmNlcyh0YXJnZXROb2RlLCBhc3ROb2RlUGF0aCkge1xuICAgICAgICBjb25zdCB0YXJnZXREb2NVcmkgPSBnZXREb2N1bWVudCh0YXJnZXROb2RlKS51cmk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLnJlZmVyZW5jZUluZGV4LmZvckVhY2goZG9jUmVmcyA9PiB7XG4gICAgICAgICAgICBkb2NSZWZzLmZvckVhY2gocmVmRGVzY3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChVcmlVdGlscy5lcXVhbHMocmVmRGVzY3IudGFyZ2V0VXJpLCB0YXJnZXREb2NVcmkpICYmIHJlZkRlc2NyLnRhcmdldFBhdGggPT09IGFzdE5vZGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlZkRlc2NyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJlYW0ocmVzdWx0KTtcbiAgICB9XG4gICAgYWxsRWxlbWVudHMobm9kZVR5cGUsIHVyaXMpIHtcbiAgICAgICAgbGV0IGRvY3VtZW50VXJpcyA9IHN0cmVhbSh0aGlzLnN5bWJvbEluZGV4LmtleXMoKSk7XG4gICAgICAgIGlmICh1cmlzKSB7XG4gICAgICAgICAgICBkb2N1bWVudFVyaXMgPSBkb2N1bWVudFVyaXMuZmlsdGVyKHVyaSA9PiAhdXJpcyB8fCB1cmlzLmhhcyh1cmkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9jdW1lbnRVcmlzXG4gICAgICAgICAgICAubWFwKHVyaSA9PiB0aGlzLmdldEZpbGVEZXNjcmlwdGlvbnModXJpLCBub2RlVHlwZSkpXG4gICAgICAgICAgICAuZmxhdCgpO1xuICAgIH1cbiAgICBnZXRGaWxlRGVzY3JpcHRpb25zKHVyaSwgbm9kZVR5cGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIW5vZGVUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zeW1ib2xJbmRleC5nZXQodXJpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5nZXQodXJpLCBub2RlVHlwZSwgKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgYWxsRmlsZURlc2NyaXB0aW9ucyA9IChfYSA9IHRoaXMuc3ltYm9sSW5kZXguZ2V0KHVyaSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdO1xuICAgICAgICAgICAgcmV0dXJuIGFsbEZpbGVEZXNjcmlwdGlvbnMuZmlsdGVyKGUgPT4gdGhpcy5hc3RSZWZsZWN0aW9uLmlzU3VidHlwZShlLnR5cGUsIG5vZGVUeXBlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zO1xuICAgIH1cbiAgICByZW1vdmUodXJpKSB7XG4gICAgICAgIGNvbnN0IHVyaVN0cmluZyA9IHVyaS50b1N0cmluZygpO1xuICAgICAgICB0aGlzLnN5bWJvbEluZGV4LmRlbGV0ZSh1cmlTdHJpbmcpO1xuICAgICAgICB0aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmNsZWFyKHVyaVN0cmluZyk7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlSW5kZXguZGVsZXRlKHVyaVN0cmluZyk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZUNvbnRlbnQoZG9jdW1lbnQsIGNhbmNlbFRva2VuID0gQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGRvY3VtZW50LnVyaSk7XG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSBhd2FpdCBzZXJ2aWNlcy5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb24uY29tcHV0ZUV4cG9ydHMoZG9jdW1lbnQsIGNhbmNlbFRva2VuKTtcbiAgICAgICAgY29uc3QgdXJpID0gZG9jdW1lbnQudXJpLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc3ltYm9sSW5kZXguc2V0KHVyaSwgZXhwb3J0cyk7XG4gICAgICAgIHRoaXMuc3ltYm9sQnlUeXBlSW5kZXguY2xlYXIodXJpKTtcbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlUmVmZXJlbmNlcyhkb2N1bWVudCwgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzID0gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZG9jdW1lbnQudXJpKTtcbiAgICAgICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgc2VydmljZXMud29ya3NwYWNlLlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIuY3JlYXRlRGVzY3JpcHRpb25zKGRvY3VtZW50LCBjYW5jZWxUb2tlbik7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlSW5kZXguc2V0KGRvY3VtZW50LnVyaS50b1N0cmluZygpLCBpbmRleERhdGEpO1xuICAgIH1cbiAgICBpc0FmZmVjdGVkKGRvY3VtZW50LCBjaGFuZ2VkVXJpcykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5yZWZlcmVuY2VJbmRleC5nZXQoZG9jdW1lbnQudXJpLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAoIXJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5zb21lKHJlZiA9PiAhcmVmLmxvY2FsICYmIGNoYW5nZWRVcmlzLmhhcyhyZWYudGFyZ2V0VXJpLnRvU3RyaW5nKCkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC1tYW5hZ2VyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjIgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICcuLi91dGlscy9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0IHsgRGVmZXJyZWQsIGludGVycnVwdEFuZENoZWNrIH0gZnJvbSAnLi4vdXRpbHMvcHJvbWlzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBVUkksIFVyaVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEZWZhdWx0V29ya3NwYWNlTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVpbGRPcHRpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMuc2VydmljZVJlZ2lzdHJ5ID0gc2VydmljZXMuU2VydmljZVJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmxhbmdpdW1Eb2N1bWVudHMgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cztcbiAgICAgICAgdGhpcy5kb2N1bWVudEJ1aWxkZXIgPSBzZXJ2aWNlcy53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyO1xuICAgICAgICB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlciA9IHNlcnZpY2VzLndvcmtzcGFjZS5GaWxlU3lzdGVtUHJvdmlkZXI7XG4gICAgICAgIHRoaXMubXV0ZXggPSBzZXJ2aWNlcy53b3Jrc3BhY2UuV29ya3NwYWNlTG9jaztcbiAgICB9XG4gICAgZ2V0IHJlYWR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHkucHJvbWlzZTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZShwYXJhbXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmZvbGRlcnMgPSAoX2EgPSBwYXJhbXMud29ya3NwYWNlRm9sZGVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0aWFsaXplZChfcGFyYW1zKSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHdvcmtzcGFjZSBldmVuIGlmIHRoZXJlIGFyZSBubyB3b3Jrc3BhY2UgZm9sZGVyc1xuICAgICAgICAvLyBXZSBzdGlsbCB3YW50IHRvIGxvYWQgYWRkaXRpb25hbCBkb2N1bWVudHMgKGxhbmd1YWdlIGxpYnJhcnkgb3Igc2ltaWxhcikgZHVyaW5nIGluaXRpYWxpemF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLm11dGV4LndyaXRlKHRva2VuID0+IHsgdmFyIF9hOyByZXR1cm4gdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKChfYSA9IHRoaXMuZm9sZGVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sIHRva2VuKTsgfSk7XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoZm9sZGVycywgY2FuY2VsVG9rZW4gPSBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGF3YWl0IHRoaXMucGVyZm9ybVN0YXJ0dXAoZm9sZGVycyk7XG4gICAgICAgIC8vIE9ubHkgYWZ0ZXIgY3JlYXRpbmcgYWxsIGRvY3VtZW50cyBkbyB3ZSBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gY2FuY2VsIHRoZSBpbml0aWFsaXphdGlvblxuICAgICAgICAvLyBUaGUgZG9jdW1lbnQgYnVpbGRlciB3aWxsIGxhdGVyIHBpY2sgdXAgb24gYWxsIHVucHJvY2Vzc2VkIGRvY3VtZW50c1xuICAgICAgICBhd2FpdCBpbnRlcnJ1cHRBbmRDaGVjayhjYW5jZWxUb2tlbik7XG4gICAgICAgIGF3YWl0IHRoaXMuZG9jdW1lbnRCdWlsZGVyLmJ1aWxkKGRvY3VtZW50cywgdGhpcy5pbml0aWFsQnVpbGRPcHRpb25zLCBjYW5jZWxUb2tlbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRoZSB1bmludGVycnVwdGFibGUgc3RhcnR1cCBzZXF1ZW5jZSBvZiB0aGUgd29ya3NwYWNlIG1hbmFnZXIuXG4gICAgICogVGhpcyBtZXRob2RzIGxvYWRzIGFsbCBkb2N1bWVudHMgaW4gdGhlIHdvcmtzcGFjZSBhbmQgb3RoZXIgZG9jdW1lbnRzIGFuZCByZXR1cm5zIHRoZW0uXG4gICAgICovXG4gICAgYXN5bmMgcGVyZm9ybVN0YXJ0dXAoZm9sZGVycykge1xuICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9ucyA9IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbC5mbGF0TWFwKGUgPT4gZS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRzID0gW107XG4gICAgICAgIGNvbnN0IGNvbGxlY3RvciA9IChkb2N1bWVudCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnRzLnB1c2goZG9jdW1lbnQpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaGFzRG9jdW1lbnQoZG9jdW1lbnQudXJpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGRvbid0IGF3YWl0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgd29ya3NwYWNlIG1hbmFnZXIsXG4gICAgICAgIC8vIHdlIGNhbiBzdGlsbCBhc3N1bWUgdGhhdCBhbGwgbGlicmFyeSBkb2N1bWVudHMgYW5kIGZpbGUgZG9jdW1lbnRzIGFyZSBsb2FkZWQgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgYnVpbGRpbmcgZG9jdW1lbnRzLlxuICAgICAgICAvLyBUaGUgbXV0ZXggcHJldmVudHMgYW55dGhpbmcgZnJvbSBwZXJmb3JtaW5nIGEgd29ya3NwYWNlIGJ1aWxkIHVudGlsIHdlIGNoZWNrIHRoZSBjYW5jZWxsYXRpb24gdG9rZW5cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkQWRkaXRpb25hbERvY3VtZW50cyhmb2xkZXJzLCBjb2xsZWN0b3IpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChmb2xkZXJzLm1hcCh3ZiA9PiBbd2YsIHRoaXMuZ2V0Um9vdEZvbGRlcih3ZildKVxuICAgICAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+IHRoaXMudHJhdmVyc2VGb2xkZXIoLi4uZW50cnksIGZpbGVFeHRlbnNpb25zLCBjb2xsZWN0b3IpKSk7XG4gICAgICAgIHRoaXMuX3JlYWR5LnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9hZCBhbGwgYWRkaXRpb25hbCBkb2N1bWVudHMgdGhhdCBzaGFsbCBiZSB2aXNpYmxlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBnaXZlbiB3b3Jrc3BhY2VcbiAgICAgKiBmb2xkZXJzIGFuZCBhZGQgdGhlbSB0byB0aGUgY29sbGVjdG9yLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgYnVpbHQtaW4gbGlicmFyaWVzIG9mXG4gICAgICogeW91ciBsYW5ndWFnZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBsb2FkZWQgZnJvbSBwcm92aWRlZCBmaWxlcyBvciBjb25zdHJ1Y3RlZCBpbiBtZW1vcnkuXG4gICAgICovXG4gICAgbG9hZEFkZGl0aW9uYWxEb2N1bWVudHMoX2ZvbGRlcnMsIF9jb2xsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBzb3VyY2UgZG9jdW1lbnRzIGluIHRoZSBnaXZlbiB3b3Jrc3BhY2UgZm9sZGVyLlxuICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIFVSSSBvZiB0aGUgd29ya3NwYWNlIGZvbGRlciwgYnV0IHlvdSBjYW4gb3ZlcnJpZGVcbiAgICAgKiB0aGlzIHRvIHJldHVybiBhIHN1YmZvbGRlciBsaWtlIGBzcmNgIGluc3RlYWQuXG4gICAgICovXG4gICAgZ2V0Um9vdEZvbGRlcih3b3Jrc3BhY2VGb2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIFVSSS5wYXJzZSh3b3Jrc3BhY2VGb2xkZXIudXJpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhdmVyc2UgdGhlIGZpbGUgc3lzdGVtIGZvbGRlciBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBVUkkgYW5kIGl0cyBzdWJmb2xkZXJzLiBBbGxcbiAgICAgKiBjb250YWluZWQgZmlsZXMgdGhhdCBtYXRjaCB0aGUgZmlsZSBleHRlbnNpb25zIGFyZSBhZGRlZCB0byB0aGUgY29sbGVjdG9yLlxuICAgICAqL1xuICAgIGFzeW5jIHRyYXZlcnNlRm9sZGVyKHdvcmtzcGFjZUZvbGRlciwgZm9sZGVyUGF0aCwgZmlsZUV4dGVuc2lvbnMsIGNvbGxlY3Rvcikge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5maWxlU3lzdGVtUHJvdmlkZXIucmVhZERpcmVjdG9yeShmb2xkZXJQYXRoKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY29udGVudC5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlRW50cnkod29ya3NwYWNlRm9sZGVyLCBlbnRyeSwgZmlsZUV4dGVuc2lvbnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudHJhdmVyc2VGb2xkZXIod29ya3NwYWNlRm9sZGVyLCBlbnRyeS51cmksIGZpbGVFeHRlbnNpb25zLCBjb2xsZWN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBhd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0T3JDcmVhdGVEb2N1bWVudChlbnRyeS51cmkpO1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3IoZG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZm9sZGVyIGVudHJ5IHNoYWxsIGJlIGluY2x1ZGVkIHdoaWxlIGluZGV4aW5nIHRoZSB3b3Jrc3BhY2UuXG4gICAgICovXG4gICAgaW5jbHVkZUVudHJ5KF93b3Jrc3BhY2VGb2xkZXIsIGVudHJ5LCBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBuYW1lID0gVXJpVXRpbHMuYmFzZW5hbWUoZW50cnkudXJpKTtcbiAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZSAhPT0gJ25vZGVfbW9kdWxlcycgJiYgbmFtZSAhPT0gJ291dCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZW50cnkuaXNGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBleHRuYW1lID0gVXJpVXRpbHMuZXh0bmFtZShlbnRyeS51cmkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLmluY2x1ZGVzKGV4dG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13b3Jrc3BhY2UtbWFuYWdlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIyIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IExleGVyIGFzIENoZXZyb3RhaW5MZXhlciB9IGZyb20gJ2NoZXZyb3RhaW4nO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRMZXhlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gc2VydmljZXMucGFyc2VyLlRva2VuQnVpbGRlci5idWlsZFRva2VucyhzZXJ2aWNlcy5HcmFtbWFyLCB7XG4gICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHNlcnZpY2VzLkxhbmd1YWdlTWV0YURhdGEuY2FzZUluc2Vuc2l0aXZlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRva2VuVHlwZXMgPSB0aGlzLnRvVG9rZW5UeXBlRGljdGlvbmFyeSh0b2tlbnMpO1xuICAgICAgICBjb25zdCBsZXhlclRva2VucyA9IGlzVG9rZW5UeXBlRGljdGlvbmFyeSh0b2tlbnMpID8gT2JqZWN0LnZhbHVlcyh0b2tlbnMpIDogdG9rZW5zO1xuICAgICAgICB0aGlzLmNoZXZyb3RhaW5MZXhlciA9IG5ldyBDaGV2cm90YWluTGV4ZXIobGV4ZXJUb2tlbnMsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uVHJhY2tpbmc6ICdmdWxsJ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuVHlwZXM7XG4gICAgfVxuICAgIHRva2VuaXplKHRleHQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjaGV2cm90YWluUmVzdWx0ID0gdGhpcy5jaGV2cm90YWluTGV4ZXIudG9rZW5pemUodGV4dCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b2tlbnM6IGNoZXZyb3RhaW5SZXN1bHQudG9rZW5zLFxuICAgICAgICAgICAgZXJyb3JzOiBjaGV2cm90YWluUmVzdWx0LmVycm9ycyxcbiAgICAgICAgICAgIGhpZGRlbjogKF9hID0gY2hldnJvdGFpblJlc3VsdC5ncm91cHMuaGlkZGVuKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXVxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1Rva2VuVHlwZURpY3Rpb25hcnkoYnVpbGRUb2tlbnMpIHtcbiAgICAgICAgaWYgKGlzVG9rZW5UeXBlRGljdGlvbmFyeShidWlsZFRva2VucykpXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRUb2tlbnM7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IGlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbihidWlsZFRva2VucykgPyBPYmplY3QudmFsdWVzKGJ1aWxkVG9rZW5zLm1vZGVzKS5mbGF0KCkgOiBidWlsZFRva2VucztcbiAgICAgICAgY29uc3QgcmVzID0ge307XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHJlc1t0b2tlbi5uYW1lXSA9IHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBUb2tlblZvY2FidWxhcnkgaXMgVG9rZW5UeXBlIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuVHlwZUFycmF5KHRva2VuVm9jYWJ1bGFyeSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRva2VuVm9jYWJ1bGFyeSkgJiYgKHRva2VuVm9jYWJ1bGFyeS5sZW5ndGggPT09IDAgfHwgJ25hbWUnIGluIHRva2VuVm9jYWJ1bGFyeVswXSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBUb2tlblZvY2FidWxhcnkgaXMgSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uKHRva2VuVm9jYWJ1bGFyeSkge1xuICAgIHJldHVybiB0b2tlblZvY2FidWxhcnkgJiYgJ21vZGVzJyBpbiB0b2tlblZvY2FidWxhcnkgJiYgJ2RlZmF1bHRNb2RlJyBpbiB0b2tlblZvY2FidWxhcnk7XG59XG4vKipcbiAqIFJldHVybnMgYSBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBUb2tlblZvY2FidWxhcnkgaXMgVG9rZW5UeXBlRGljdGlvbmFyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb2tlblR5cGVEaWN0aW9uYXJ5KHRva2VuVm9jYWJ1bGFyeSkge1xuICAgIHJldHVybiAhaXNUb2tlblR5cGVBcnJheSh0b2tlblZvY2FidWxhcnkpICYmICFpc0lNdWx0aU1vZGVMZXhlckRlZmluaXRpb24odG9rZW5Wb2NhYnVsYXJ5KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxleGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgUG9zaXRpb24sIFJhbmdlIH0gZnJvbSAndnNjb2RlLWxhbmd1YWdlc2VydmVyLXR5cGVzJztcbmltcG9ydCB7IE5FV0xJTkVfUkVHRVhQLCBlc2NhcGVSZWdFeHAgfSBmcm9tICcuLi91dGlscy9yZWdleHAtdXRpbHMuanMnO1xuaW1wb3J0IHsgVVJJIH0gZnJvbSAnLi4vdXRpbHMvdXJpLXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpTRG9jKG5vZGUsIHN0YXJ0LCBvcHRpb25zKSB7XG4gICAgbGV0IG9wdHM7XG4gICAgbGV0IHBvc2l0aW9uO1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcG9zaXRpb24gPSBzdGFydDtcbiAgICAgICAgb3B0cyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwb3NpdGlvbiA9IG5vZGUucmFuZ2Uuc3RhcnQ7XG4gICAgICAgIG9wdHMgPSBzdGFydDtcbiAgICB9XG4gICAgaWYgKCFwb3NpdGlvbikge1xuICAgICAgICBwb3NpdGlvbiA9IFBvc2l0aW9uLmNyZWF0ZSgwLCAwKTtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhub2RlKTtcbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9IG5vcm1hbGl6ZU9wdGlvbnMob3B0cyk7XG4gICAgY29uc3QgdG9rZW5zID0gdG9rZW5pemUoe1xuICAgICAgICBsaW5lcyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIG9wdGlvbnM6IG5vcm1hbGl6ZWRPcHRpb25zXG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlSlNEb2NDb21tZW50KHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgcG9zaXRpb25cbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0pTRG9jKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9IG5vcm1hbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhub2RlKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBsaW5lc1swXTtcbiAgICBjb25zdCBsYXN0ID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgZmlyc3RSZWdleCA9IG5vcm1hbGl6ZWRPcHRpb25zLnN0YXJ0O1xuICAgIGNvbnN0IGxhc3RSZWdleCA9IG5vcm1hbGl6ZWRPcHRpb25zLmVuZDtcbiAgICByZXR1cm4gQm9vbGVhbihmaXJzdFJlZ2V4ID09PSBudWxsIHx8IGZpcnN0UmVnZXggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpcnN0UmVnZXguZXhlYyhmaXJzdCkpICYmIEJvb2xlYW4obGFzdFJlZ2V4ID09PSBudWxsIHx8IGxhc3RSZWdleCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFzdFJlZ2V4LmV4ZWMobGFzdCkpO1xufVxuZnVuY3Rpb24gZ2V0TGluZXMobm9kZSkge1xuICAgIGxldCBjb250ZW50ID0gJyc7XG4gICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250ZW50ID0gbm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnRlbnQgPSBub2RlLnRleHQ7XG4gICAgfVxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChORVdMSU5FX1JFR0VYUCk7XG4gICAgcmV0dXJuIGxpbmVzO1xufVxuY29uc3QgdGFnUmVnZXggPSAvXFxzKihAKFtcXHB7TH1dW1xccHtMfVxccHtOfV0qKT8pL3V5O1xuY29uc3QgaW5saW5lVGFnUmVnZXggPSAvXFx7KEBbXFxwe0x9XVtcXHB7TH1cXHB7Tn1dKikoXFxzKikoW15cXHJcXG59XSspP1xcfS9ndTtcbmZ1bmN0aW9uIHRva2VuaXplKGNvbnRleHQpIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBsZXQgY3VycmVudExpbmUgPSBjb250ZXh0LnBvc2l0aW9uLmxpbmU7XG4gICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjb250ZXh0LnBvc2l0aW9uLmNoYXJhY3RlcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRleHQubGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBpID09PSAwO1xuICAgICAgICBjb25zdCBsYXN0ID0gaSA9PT0gY29udGV4dC5saW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgbGluZSA9IGNvbnRleHQubGluZXNbaV07XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGlmIChmaXJzdCAmJiBjb250ZXh0Lm9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKF9hID0gY29udGV4dC5vcHRpb25zLnN0YXJ0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXhlYyhsaW5lKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IChfYiA9IGNvbnRleHQub3B0aW9ucy5saW5lKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXhlYyhsaW5lKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKF9jID0gY29udGV4dC5vcHRpb25zLmVuZCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmV4ZWMobGluZSk7XG4gICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBsYXN0Q2hhcmFjdGVyKGxpbmUpKTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZUVuZCA9IHNraXBXaGl0ZXNwYWNlKGxpbmUsIGluZGV4KTtcbiAgICAgICAgaWYgKHdoaXRlc3BhY2VFbmQgPj0gbGluZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgYnJlYWsgdG9rZW4gd2hlbiB3ZSBhbHJlYWR5IGhhdmUgcHJldmlvdXMgdG9rZW5zXG4gICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uLmNyZWF0ZShjdXJyZW50TGluZSwgY3VycmVudENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnJlYWsnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShwb3NpdGlvbiwgcG9zaXRpb24pXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YWdSZWdleC5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHRhZ01hdGNoID0gdGFnUmVnZXguZXhlYyhsaW5lKTtcbiAgICAgICAgICAgIGlmICh0YWdNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxNYXRjaCA9IHRhZ01hdGNoWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFnTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBQb3NpdGlvbi5jcmVhdGUoY3VycmVudExpbmUsIGN1cnJlbnRDaGFyYWN0ZXIgKyBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gUG9zaXRpb24uY3JlYXRlKGN1cnJlbnRMaW5lLCBjdXJyZW50Q2hhcmFjdGVyICsgaW5kZXggKyBmdWxsTWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YWcnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShzdGFydCwgZW5kKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGluZGV4ICs9IGZ1bGxNYXRjaC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBza2lwV2hpdGVzcGFjZShsaW5lLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBsaW5lLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5saW5lVGFnTWF0Y2hlcyA9IEFycmF5LmZyb20ocmVzdC5tYXRjaEFsbChpbmxpbmVUYWdSZWdleCkpO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKC4uLmJ1aWxkSW5saW5lVG9rZW5zKGlubGluZVRhZ01hdGNoZXMsIHJlc3QsIGN1cnJlbnRMaW5lLCBjdXJyZW50Q2hhcmFjdGVyICsgaW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgICBjdXJyZW50Q2hhcmFjdGVyID0gMDtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGxhc3QgYnJlYWsgdG9rZW4gaWYgdGhlcmUgaXMgb25lXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPiAwICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9PT0gJ2JyZWFrJykge1xuICAgICAgICByZXR1cm4gdG9rZW5zLnNsaWNlKDAsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vucztcbn1cbmZ1bmN0aW9uIGJ1aWxkSW5saW5lVG9rZW5zKHRhZ3MsIGxpbmUsIGxpbmVJbmRleCwgY2hhcmFjdGVySW5kZXgpIHtcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgICBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBjaGFyYWN0ZXJJbmRleCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGNoYXJhY3RlckluZGV4ICsgbGluZS5sZW5ndGgpO1xuICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBjb250ZW50OiBsaW5lLFxuICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShzdGFydCwgZW5kKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoSW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29udGVudCA9IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2hJbmRleCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBtYXRjaEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIG1hdGNoSW5kZXggKyBjaGFyYWN0ZXJJbmRleCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gc3RhcnRDb250ZW50Lmxlbmd0aCArIDE7XG4gICAgICAgICAgICBjb25zdCB0YWdOYW1lID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2lubGluZS10YWcnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRhZ05hbWUsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBvZmZzZXQgKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIG9mZnNldCArIHRhZ05hbWUubGVuZ3RoICsgY2hhcmFjdGVySW5kZXgpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdGFnTmFtZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1hdGNoWzJdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBvZmZzZXQgKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIG9mZnNldCArIHZhbHVlLmxlbmd0aCArIGNoYXJhY3RlckluZGV4KSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFJhbmdlLmNyZWF0ZShQb3NpdGlvbi5jcmVhdGUobGluZUluZGV4LCBsYXN0SW5kZXggKyBvZmZzZXQgKyBjaGFyYWN0ZXJJbmRleCksIFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIG9mZnNldCArIGNoYXJhY3RlckluZGV4KSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kQ29udGVudCA9IGxpbmUuc3Vic3RyaW5nKGxhc3RJbmRleCk7XG4gICAgICAgIGlmIChlbmRDb250ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgY29udGVudDogZW5kQ29udGVudCxcbiAgICAgICAgICAgICAgICByYW5nZTogUmFuZ2UuY3JlYXRlKFBvc2l0aW9uLmNyZWF0ZShsaW5lSW5kZXgsIGxhc3RJbmRleCArIGNoYXJhY3RlckluZGV4KSwgUG9zaXRpb24uY3JlYXRlKGxpbmVJbmRleCwgbGFzdEluZGV4ICsgY2hhcmFjdGVySW5kZXggKyBlbmRDb250ZW50Lmxlbmd0aCkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9rZW5zO1xufVxuY29uc3Qgbm9uV2hpdGVzcGFjZVJlZ2V4ID0gL1xcUy87XG5jb25zdCB3aGl0ZXNwYWNlRW5kUmVnZXggPSAvXFxzKiQvO1xuZnVuY3Rpb24gc2tpcFdoaXRlc3BhY2UobGluZSwgaW5kZXgpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KS5tYXRjaChub25XaGl0ZXNwYWNlUmVnZXgpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgICByZXR1cm4gaW5kZXggKyBtYXRjaC5pbmRleDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBsaW5lLmxlbmd0aDtcbiAgICB9XG59XG5mdW5jdGlvbiBsYXN0Q2hhcmFjdGVyKGxpbmUpIHtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2god2hpdGVzcGFjZUVuZFJlZ2V4KTtcbiAgICBpZiAobWF0Y2ggJiYgdHlwZW9mIG1hdGNoLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gbWF0Y2guaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyBQYXJzaW5nXG5mdW5jdGlvbiBwYXJzZUpTRG9jQ29tbWVudChjb250ZXh0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBQb3NpdGlvbi5jcmVhdGUoY29udGV4dC5wb3NpdGlvbi5saW5lLCBjb250ZXh0LnBvc2l0aW9uLmNoYXJhY3Rlcik7XG4gICAgaWYgKGNvbnRleHQudG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEpTRG9jQ29tbWVudEltcGwoW10sIFJhbmdlLmNyZWF0ZShzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKSk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzID0gW107XG4gICAgd2hpbGUgKGNvbnRleHQuaW5kZXggPCBjb250ZXh0LnRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHBhcnNlSlNEb2NFbGVtZW50KGNvbnRleHQsIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSAoX2IgPSAoX2EgPSBlbGVtZW50c1swXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhbmdlLnN0YXJ0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydFBvc2l0aW9uO1xuICAgIGNvbnN0IGVuZCA9IChfZCA9IChfYyA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MucmFuZ2UuZW5kKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBzdGFydFBvc2l0aW9uO1xuICAgIHJldHVybiBuZXcgSlNEb2NDb21tZW50SW1wbChlbGVtZW50cywgUmFuZ2UuY3JlYXRlKHN0YXJ0LCBlbmQpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSlNEb2NFbGVtZW50KGNvbnRleHQsIGxhc3QpIHtcbiAgICBjb25zdCBuZXh0ID0gY29udGV4dC50b2tlbnNbY29udGV4dC5pbmRleF07XG4gICAgaWYgKG5leHQudHlwZSA9PT0gJ3RhZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNEb2NUYWcoY29udGV4dCwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIGlmIChuZXh0LnR5cGUgPT09ICd0ZXh0JyB8fCBuZXh0LnR5cGUgPT09ICdpbmxpbmUtdGFnJykge1xuICAgICAgICByZXR1cm4gcGFyc2VKU0RvY1RleHQoY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcHBlbmRFbXB0eUxpbmUobmV4dCwgbGFzdCk7XG4gICAgICAgIGNvbnRleHQuaW5kZXgrKztcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiBhcHBlbmRFbXB0eUxpbmUodG9rZW4sIGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBsaW5lID0gbmV3IEpTRG9jTGluZUltcGwoJycsIHRva2VuLnJhbmdlKTtcbiAgICAgICAgaWYgKCdpbmxpbmVzJyBpbiBlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmlubGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY29udGVudC5pbmxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUpTRG9jVGV4dChjb250ZXh0KSB7XG4gICAgbGV0IHRva2VuID0gY29udGV4dC50b2tlbnNbY29udGV4dC5pbmRleF07XG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IHRva2VuO1xuICAgIGxldCBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlICE9PSAnYnJlYWsnICYmIHRva2VuLnR5cGUgIT09ICd0YWcnKSB7XG4gICAgICAgIGxpbmVzLnB1c2gocGFyc2VKU0RvY0lubGluZShjb250ZXh0KSk7XG4gICAgICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgICB0b2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEpTRG9jVGV4dEltcGwobGluZXMsIFJhbmdlLmNyZWF0ZShmaXJzdFRva2VuLnJhbmdlLnN0YXJ0LCBsYXN0VG9rZW4ucmFuZ2UuZW5kKSk7XG59XG5mdW5jdGlvbiBwYXJzZUpTRG9jSW5saW5lKGNvbnRleHQpIHtcbiAgICBjb25zdCB0b2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXhdO1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnaW5saW5lLXRhZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNEb2NUYWcoY29udGV4dCwgdHJ1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VKU0RvY0xpbmUoY29udGV4dCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VKU0RvY1RhZyhjb250ZXh0LCBpbmxpbmUpIHtcbiAgICBjb25zdCB0YWdUb2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXgrK107XG4gICAgY29uc3QgbmFtZSA9IHRhZ1Rva2VuLmNvbnRlbnQuc3Vic3RyaW5nKDEpO1xuICAgIGNvbnN0IG5leHRUb2tlbiA9IGNvbnRleHQudG9rZW5zW2NvbnRleHQuaW5kZXhdO1xuICAgIGlmICgobmV4dFRva2VuID09PSBudWxsIHx8IG5leHRUb2tlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dFRva2VuLnR5cGUpID09PSAndGV4dCcpIHtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jTGluZSA9IHBhcnNlSlNEb2NMaW5lKGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBKU0RvY1RhZ0ltcGwobmFtZSwgbmV3IEpTRG9jVGV4dEltcGwoW2RvY0xpbmVdLCBkb2NMaW5lLnJhbmdlKSwgaW5saW5lLCBSYW5nZS5jcmVhdGUodGFnVG9rZW4ucmFuZ2Uuc3RhcnQsIGRvY0xpbmUucmFuZ2UuZW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RG9jID0gcGFyc2VKU0RvY1RleHQoY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEpTRG9jVGFnSW1wbChuYW1lLCB0ZXh0RG9jLCBpbmxpbmUsIFJhbmdlLmNyZWF0ZSh0YWdUb2tlbi5yYW5nZS5zdGFydCwgdGV4dERvYy5yYW5nZS5lbmQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0YWdUb2tlbi5yYW5nZTtcbiAgICAgICAgcmV0dXJuIG5ldyBKU0RvY1RhZ0ltcGwobmFtZSwgbmV3IEpTRG9jVGV4dEltcGwoW10sIHJhbmdlKSwgaW5saW5lLCByYW5nZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VKU0RvY0xpbmUoY29udGV4dCkge1xuICAgIGNvbnN0IHRva2VuID0gY29udGV4dC50b2tlbnNbY29udGV4dC5pbmRleCsrXTtcbiAgICByZXR1cm4gbmV3IEpTRG9jTGluZUltcGwodG9rZW4uY29udGVudCwgdG9rZW4ucmFuZ2UpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVPcHRpb25zKHtcbiAgICAgICAgICAgIHN0YXJ0OiAnLyoqJyxcbiAgICAgICAgICAgIGVuZDogJyovJyxcbiAgICAgICAgICAgIGxpbmU6ICcqJ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyBzdGFydCwgZW5kLCBsaW5lIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBub3JtYWxpemVPcHRpb24oc3RhcnQsIHRydWUpLFxuICAgICAgICBlbmQ6IG5vcm1hbGl6ZU9wdGlvbihlbmQsIGZhbHNlKSxcbiAgICAgICAgbGluZTogbm9ybWFsaXplT3B0aW9uKGxpbmUsIHRydWUpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbihvcHRpb24sIHN0YXJ0KSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGVzY2FwZWQgPSB0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJyA/IGVzY2FwZVJlZ0V4cChvcHRpb24pIDogb3B0aW9uLnNvdXJjZTtcbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlxcXFxzKiR7ZXNjYXBlZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBcXFxccyoke2VzY2FwZWR9XFxcXHMqJGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbn1cbmNsYXNzIEpTRG9jQ29tbWVudEltcGwge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzLCByYW5nZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICB9XG4gICAgZ2V0VGFnKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsVGFncygpLmZpbmQoZSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cbiAgICBnZXRUYWdzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsVGFncygpLmZpbHRlcihlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuICAgIGdldEFsbFRhZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZSkgPT4gJ25hbWUnIGluIGUpO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZWxlbWVudC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IGZpbGxOZXdsaW5lcyh2YWx1ZSkgKyB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHRvTWFya2Rvd24ob3B0aW9ucykge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQudG9NYXJrZG93bihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBlbGVtZW50LnRvTWFya2Rvd24ob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gZmlsbE5ld2xpbmVzKHZhbHVlKSArIHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICB9XG59XG5jbGFzcyBKU0RvY1RhZ0ltcGwge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGNvbnRlbnQsIGlubGluZSwgcmFuZ2UpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5pbmxpbmUgPSBpbmxpbmU7XG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGxldCB0ZXh0ID0gYEAke3RoaXMubmFtZX1gO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRleHQgPSBgJHt0ZXh0fSAke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYCR7dGV4dH1cXG4ke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIC8vIElubGluZSB0YWdzIGFyZSBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuICAgICAgICAgICAgcmV0dXJuIGB7JHt0ZXh0fX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9NYXJrZG93bihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVuZGVyVGFnKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCB0aGlzKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdGhpcy50b01hcmtkb3duRGVmYXVsdChvcHRpb25zKTtcbiAgICB9XG4gICAgdG9NYXJrZG93bkRlZmF1bHQob3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnRvTWFya2Rvd24ob3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZWQgPSByZW5kZXJJbmxpbmVUYWcodGhpcy5uYW1lLCBjb250ZW50LCBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlbmRlcmVkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFya2VyID0gJyc7XG4gICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRhZykgPT09ICdpdGFsaWMnIHx8IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGFnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSAnKic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50YWcpID09PSAnYm9sZCcpIHtcbiAgICAgICAgICAgIG1hcmtlciA9ICcqKic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50YWcpID09PSAnYm9sZC1pdGFsaWMnKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSAnKioqJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGV4dCA9IGAke21hcmtlcn1AJHt0aGlzLm5hbWV9JHttYXJrZXJ9YDtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGV4dCA9IGAke3RleHR9IOKAlCAke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0ZXh0ID0gYCR7dGV4dH1cXG4ke2NvbnRlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIC8vIElubGluZSB0YWdzIGFyZSBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuICAgICAgICAgICAgcmV0dXJuIGB7JHt0ZXh0fX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZW5kZXJJbmxpbmVUYWcodGFnLCBjb250ZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAodGFnID09PSAnbGlua3BsYWluJyB8fCB0YWcgPT09ICdsaW5rY29kZScgfHwgdGFnID09PSAnbGluaycpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZW50LmluZGV4T2YoJyAnKTtcbiAgICAgICAgbGV0IGRpc3BsYXkgPSBjb250ZW50O1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5U3RhcnQgPSBza2lwV2hpdGVzcGFjZShjb250ZW50LCBpbmRleCk7XG4gICAgICAgICAgICBkaXNwbGF5ID0gY29udGVudC5zdWJzdHJpbmcoZGlzcGxheVN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PT0gJ2xpbmtjb2RlJyB8fCAodGFnID09PSAnbGluaycgJiYgb3B0aW9ucy5saW5rID09PSAnY29kZScpKSB7XG4gICAgICAgICAgICAvLyBTdXJyb3VuZCB0aGUgZGlzcGxheSB2YWx1ZSBpbiBhIG1hcmtkb3duIGlubGluZSBjb2RlIGJsb2NrXG4gICAgICAgICAgICBkaXNwbGF5ID0gYFxcYCR7ZGlzcGxheX1cXGBgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkTGluayA9IChfYiA9IChfYSA9IG9wdGlvbnMucmVuZGVyTGluaykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgY29udGVudCwgZGlzcGxheSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHJlbmRlckxpbmtEZWZhdWx0KGNvbnRlbnQsIGRpc3BsYXkpO1xuICAgICAgICByZXR1cm4gcmVuZGVyZWRMaW5rO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVuZGVyTGlua0RlZmF1bHQoY29udGVudCwgZGlzcGxheSkge1xuICAgIHRyeSB7XG4gICAgICAgIFVSSS5wYXJzZShjb250ZW50LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGBbJHtkaXNwbGF5fV0oJHtjb250ZW50fSlgO1xuICAgIH1cbiAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxufVxuY2xhc3MgSlNEb2NUZXh0SW1wbCB7XG4gICAgY29uc3RydWN0b3IobGluZXMsIHJhbmdlKSB7XG4gICAgICAgIHRoaXMuaW5saW5lcyA9IGxpbmVzO1xuICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5saW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5saW5lID0gdGhpcy5pbmxpbmVzW2ldO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuaW5saW5lc1tpICsgMV07XG4gICAgICAgICAgICB0ZXh0ICs9IGlubGluZS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5yYW5nZS5zdGFydC5saW5lID4gaW5saW5lLnJhbmdlLnN0YXJ0LmxpbmUpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcXG4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICB0b01hcmtkb3duKG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmlubGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlubGluZSA9IHRoaXMuaW5saW5lc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmlubGluZXNbaSArIDFdO1xuICAgICAgICAgICAgdGV4dCArPSBpbmxpbmUudG9NYXJrZG93bihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQucmFuZ2Uuc3RhcnQubGluZSA+IGlubGluZS5yYW5nZS5zdGFydC5saW5lKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG59XG5jbGFzcyBKU0RvY0xpbmVJbXBsIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0LCByYW5nZSkge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbiAgICB0b01hcmtkb3duKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZpbGxOZXdsaW5lcyh0ZXh0KSB7XG4gICAgaWYgKHRleHQuZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgICAgIHJldHVybiAnXFxuJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAnXFxuXFxuJztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc2RvYy5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnLi4vdXRpbHMvYXN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGlzSlNEb2MsIHBhcnNlSlNEb2MgfSBmcm9tICcuL2pzZG9jLmpzJztcbmV4cG9ydCBjbGFzcyBKU0RvY0RvY3VtZW50YXRpb25Qcm92aWRlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5pbmRleE1hbmFnZXIgPSBzZXJ2aWNlcy5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcjtcbiAgICAgICAgdGhpcy5jb21tZW50UHJvdmlkZXIgPSBzZXJ2aWNlcy5kb2N1bWVudGF0aW9uLkNvbW1lbnRQcm92aWRlcjtcbiAgICB9XG4gICAgZ2V0RG9jdW1lbnRhdGlvbihub2RlKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmNvbW1lbnRQcm92aWRlci5nZXRDb21tZW50KG5vZGUpO1xuICAgICAgICBpZiAoY29tbWVudCAmJiBpc0pTRG9jKGNvbW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRKU0RvYyA9IHBhcnNlSlNEb2MoY29tbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkSlNEb2MudG9NYXJrZG93bih7XG4gICAgICAgICAgICAgICAgcmVuZGVyTGluazogKGxpbmssIGRpc3BsYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRhdGlvbkxpbmtSZW5kZXJlcihub2RlLCBsaW5rLCBkaXNwbGF5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbmRlclRhZzogKHRhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIobm9kZSwgdGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKG5vZGUsIG5hbWUsIGRpc3BsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IChfYSA9IHRoaXMuZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKG5vZGUsIG5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShub2RlLCBuYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLm5hbWVTZWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gZGVzY3JpcHRpb24ubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBkZXNjcmlwdGlvbi5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIgKyAxO1xuICAgICAgICAgICAgY29uc3QgdXJpID0gZGVzY3JpcHRpb24uZG9jdW1lbnRVcmkud2l0aCh7IGZyYWdtZW50OiBgTCR7bGluZX0sJHtjaGFyYWN0ZXJ9YCB9KTtcbiAgICAgICAgICAgIHJldHVybiBgWyR7ZGlzcGxheX1dKCR7dXJpLnRvU3RyaW5nKCl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50YXRpb25UYWdSZW5kZXJlcihfbm9kZSwgX3RhZykge1xuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgdGFnIHJlbmRlcmluZ1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kTmFtZUluUHJlY29tcHV0ZWRTY29wZXMobm9kZSwgbmFtZSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KG5vZGUpO1xuICAgICAgICBjb25zdCBwcmVjb21wdXRlZCA9IGRvY3VtZW50LnByZWNvbXB1dGVkU2NvcGVzO1xuICAgICAgICBpZiAoIXByZWNvbXB1dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbERlc2NyaXB0aW9ucyA9IHByZWNvbXB1dGVkLmdldChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGFsbERlc2NyaXB0aW9ucy5maW5kKGUgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuJGNvbnRhaW5lcjtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmaW5kTmFtZUluR2xvYmFsU2NvcGUobm9kZSwgbmFtZSkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuaW5kZXhNYW5hZ2VyLmFsbEVsZW1lbnRzKCkuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kb2N1bWVudGF0aW9uLXByb3ZpZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgaXNBc3ROb2RlV2l0aENvbW1lbnQgfSBmcm9tICcuLi9zZXJpYWxpemVyL2pzb24tc2VyaWFsaXplci5qcyc7XG5pbXBvcnQgeyBmaW5kQ29tbWVudE5vZGUgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRDb21tZW50UHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIHRoaXMuZ3JhbW1hckNvbmZpZyA9ICgpID0+IHNlcnZpY2VzLnBhcnNlci5HcmFtbWFyQ29uZmlnO1xuICAgIH1cbiAgICBnZXRDb21tZW50KG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaXNBc3ROb2RlV2l0aENvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLiRjb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSBmaW5kQ29tbWVudE5vZGUobm9kZS4kY3N0Tm9kZSwgdGhpcy5ncmFtbWFyQ29uZmlnKCkubXVsdGlsaW5lQ29tbWVudFJ1bGVzKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tbWVudC1wcm92aWRlci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDI0IFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWltcG9ydHNcbmV4cG9ydCAqIGZyb20gJ3ZzY29kZS1qc29ucnBjL2xpYi9jb21tb24vZXZlbnRzLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgRGVmZXJyZWQsIE9wZXJhdGlvbkNhbmNlbGxlZCB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgRW1pdHRlciB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJztcbi8qKlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXN5bmMgcGFyc2VyLiBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgd3JhcHMgdGhlIHN5bmMgcGFyc2VyIGluIGEgcHJvbWlzZS5cbiAqXG4gKiBBIHJlYWwgaW1wbGVtZW50YXRpb24gd291bGQgY3JlYXRlIHdvcmtlciB0aHJlYWRzIG9yIHdlYiB3b3JrZXJzIHRvIG9mZmxvYWQgdGhlIHBhcnNpbmcgd29yay5cbiAqL1xuZXhwb3J0IGNsYXNzIERlZmF1bHRBc3luY1BhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5zeW5jUGFyc2VyID0gc2VydmljZXMucGFyc2VyLkxhbmdpdW1QYXJzZXI7XG4gICAgfVxuICAgIHBhcnNlKHRleHQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN5bmNQYXJzZXIucGFyc2UodGV4dCkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRocmVhZGVkQXN5bmNQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2VzKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdGhyZWFkIGNvdW50IGRldGVybWluZXMgaG93IG1hbnkgdGhyZWFkcyBhcmUgdXNlZCB0byBwYXJzZSBmaWxlcyBpbiBwYXJhbGxlbC5cbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4gRGVjcmVhc2luZyB0aGlzIHZhbHVlIGluY3JlYXNlcyBzdGFydHVwIHBlcmZvcm1hbmNlLCBidXQgZGVjcmVhc2VzIHBhcmFsbGVsIHBhcnNpbmcgcGVyZm9ybWFuY2UuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRocmVhZENvdW50ID0gODtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0ZXJtaW5hdGlvbiBkZWxheSBkZXRlcm1pbmVzIGhvdyBsb25nIHRoZSBwYXJzZXIgd2FpdHMgZm9yIGEgdGhyZWFkIHRvIGZpbmlzaCBhZnRlciBhIGNhbmNlbGxhdGlvbiByZXF1ZXN0LlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMDAobXMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50ZXJtaW5hdGlvbkRlbGF5ID0gMjAwO1xuICAgICAgICB0aGlzLndvcmtlclBvb2wgPSBbXTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmh5ZHJhdG9yID0gc2VydmljZXMuc2VyaWFsaXplci5IeWRyYXRvcjtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZVdvcmtlcnMoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLndvcmtlclBvb2wubGVuZ3RoIDwgdGhpcy50aHJlYWRDb3VudCkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy5jcmVhdGVXb3JrZXIoKTtcbiAgICAgICAgICAgIHdvcmtlci5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmVycmVkID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5sb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHdvcmtlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMud29ya2VyUG9vbC5wdXNoKHdvcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcGFyc2UodGV4dCwgY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gYXdhaXQgdGhpcy5hY3F1aXJlUGFyc2VyV29ya2VyKGNhbmNlbFRva2VuKTtcbiAgICAgICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgICAgbGV0IHRpbWVvdXQ7XG4gICAgICAgIC8vIElmIHRoZSBjYW5jZWxsYXRpb24gdG9rZW4gaXMgcmVxdWVzdGVkLCB3ZSB3YWl0IGZvciBhIGNlcnRhaW4gdGltZSBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHdvcmtlci5cbiAgICAgICAgLy8gU2luY2UgdGhlIGNhbmNlbGxhdGlvbiB0b2tlbiBsaXZlcyBsb25nZXIgdGhhbiB0aGUgcGFyc2luZyBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRpc3Bvc2UgdGhlIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG1pZ2h0IGFjY2lkZW50YWxseSB0ZXJtaW5hdGUgdGhlIHdvcmtlciBhZnRlciB0aGUgcGFyc2luZyBwcm9jZXNzIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgY29uc3QgY2FuY2VsbGF0aW9uID0gY2FuY2VsVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGVybWluYXRlV29ya2VyKHdvcmtlcik7XG4gICAgICAgICAgICB9LCB0aGlzLnRlcm1pbmF0aW9uRGVsYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgd29ya2VyLnBhcnNlKHRleHQpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gdGhpcy5oeWRyYXRvci5oeWRyYXRlKHJlc3VsdCk7XG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGh5ZHJhdGVkKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdChlcnIpO1xuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbi5kaXNwb3NlKCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgdGVybWluYXRlV29ya2VyKHdvcmtlcikge1xuICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy53b3JrZXJQb29sLmluZGV4T2Yod29ya2VyKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMud29ya2VyUG9vbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVQYXJzZXJXb3JrZXIoY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplV29ya2VycygpO1xuICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiB0aGlzLndvcmtlclBvb2wpIHtcbiAgICAgICAgICAgIGlmICh3b3JrZXIucmVhZHkpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIubG9jaygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgICAgY2FuY2VsVG9rZW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnF1ZXVlLmluZGV4T2YoZGVmZXJyZWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoT3BlcmF0aW9uQ2FuY2VsbGVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucXVldWUucHVzaChkZWZlcnJlZCk7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzZXJXb3JrZXIge1xuICAgIGdldCByZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5O1xuICAgIH1cbiAgICBnZXQgb25SZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZWFkeUVtaXR0ZXIuZXZlbnQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNlbmRNZXNzYWdlLCBvbk1lc3NhZ2UsIG9uRXJyb3IsIHRlcm1pbmF0ZSkge1xuICAgICAgICB0aGlzLm9uUmVhZHlFbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3BhcnNpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSA9IHNlbmRNZXNzYWdlO1xuICAgICAgICB0aGlzLl90ZXJtaW5hdGUgPSB0ZXJtaW5hdGU7XG4gICAgICAgIG9uTWVzc2FnZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLmRlZmVycmVkLnJlc29sdmUocGFyc2VSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy51bmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy51bmxvY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgdGhpcy5kZWZlcnJlZC5yZWplY3QoT3BlcmF0aW9uQ2FuY2VsbGVkKTtcbiAgICAgICAgdGhpcy5fdGVybWluYXRlKCk7XG4gICAgfVxuICAgIGxvY2soKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2U7XG4gICAgfVxuICAgIHVubG9jaygpIHtcbiAgICAgICAgdGhpcy5fcGFyc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMub25SZWFkeUVtaXR0ZXIuZmlyZSgpO1xuICAgIH1cbiAgICBwYXJzZSh0ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlciB3b3JrZXIgaXMgYnVzeScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhcnNpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UodGV4dCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkLnByb21pc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN5bmMtcGFyc2VyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ2FuY2VsbGF0aW9uVG9rZW4sIENhbmNlbGxhdGlvblRva2VuU291cmNlIH0gZnJvbSAnLi4vdXRpbHMvY2FuY2VsbGF0aW9uLmpzJztcbmltcG9ydCB7IERlZmVycmVkLCBpc09wZXJhdGlvbkNhbmNlbGxlZCB9IGZyb20gJy4uL3V0aWxzL3Byb21pc2UtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRXb3Jrc3BhY2VMb2NrIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1Rva2VuU291cmNlID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnJlYWRRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIH1cbiAgICB3cml0ZShhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5jYW5jZWxXcml0ZSgpO1xuICAgICAgICBjb25zdCB0b2tlblNvdXJjZSA9IG5ldyBDYW5jZWxsYXRpb25Ub2tlblNvdXJjZSgpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2UgPSB0b2tlblNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZSh0aGlzLndyaXRlUXVldWUsIGFjdGlvbiwgdG9rZW5Tb3VyY2UudG9rZW4pO1xuICAgIH1cbiAgICByZWFkKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLCBhY3Rpb24pO1xuICAgIH1cbiAgICBlbnF1ZXVlKHF1ZXVlLCBhY3Rpb24sIGNhbmNlbGxhdGlvblRva2VuKSB7XG4gICAgICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgZGVmZXJyZWQsXG4gICAgICAgICAgICBjYW5jZWxsYXRpb25Ub2tlbjogY2FuY2VsbGF0aW9uVG9rZW4gIT09IG51bGwgJiYgY2FuY2VsbGF0aW9uVG9rZW4gIT09IHZvaWQgMCA/IGNhbmNlbGxhdGlvblRva2VuIDogQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZVxuICAgICAgICB9O1xuICAgICAgICBxdWV1ZS5wdXNoKGVudHJ5KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9XG4gICAgYXN5bmMgcGVyZm9ybU5leHRPcGVyYXRpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEp1c3QgcGVyZm9ybSB0aGUgbmV4dCB3cml0ZSBhY3Rpb25cbiAgICAgICAgICAgIGVudHJpZXMucHVzaCh0aGlzLndyaXRlUXVldWUuc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5yZWFkUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gRW1wdHkgdGhlIHJlYWQgcXVldWUgYW5kIHBlcmZvcm0gYWxsIGFjdGlvbnMgaW4gcGFyYWxsZWxcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCguLi50aGlzLnJlYWRRdWV1ZS5zcGxpY2UoMCwgdGhpcy5yZWFkUXVldWUubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGVudHJpZXMubWFwKGFzeW5jICh7IGFjdGlvbiwgZGVmZXJyZWQsIGNhbmNlbGxhdGlvblRva2VuIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gdG8gdGhlIG5leHQgZXZlbnQgbG9vcCB0aWNrIHZpYSBgUHJvbWlzZS5yZXNvbHZlKClgXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBhY3Rpb24oY2FuY2VsbGF0aW9uVG9rZW4pKTtcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT3BlcmF0aW9uQ2FuY2VsbGVkKGVycikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkLCB3ZSBkb24ndCB3YW50IHRvIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpO1xuICAgIH1cbiAgICBjYW5jZWxXcml0ZSgpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1Rva2VuU291cmNlLmNhbmNlbCgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdvcmtzcGFjZS1sb2NrLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjQgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgQ29tcG9zaXRlQ3N0Tm9kZUltcGwsIExlYWZDc3ROb2RlSW1wbCwgUm9vdENzdE5vZGVJbXBsIH0gZnJvbSAnLi4vcGFyc2VyL2NzdC1ub2RlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgaXNBYnN0cmFjdEVsZW1lbnQgfSBmcm9tICcuLi9sYW5ndWFnZXMvZ2VuZXJhdGVkL2FzdC5qcyc7XG5pbXBvcnQgeyBpc1Jvb3RDc3ROb2RlLCBpc0NvbXBvc2l0ZUNzdE5vZGUsIGlzTGVhZkNzdE5vZGUsIGlzQXN0Tm9kZSwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi9zeW50YXgtdHJlZS5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Bc3QgfSBmcm9tICcuLi91dGlscy9hc3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQmlNYXAgfSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQgeyBzdHJlYW1Dc3QgfSBmcm9tICcuLi91dGlscy9jc3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRIeWRyYXRvciB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZXMpIHtcbiAgICAgICAgdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwID0gbmV3IEJpTWFwKCk7XG4gICAgICAgIHRoaXMudG9rZW5UeXBlSWRNYXAgPSBuZXcgQmlNYXAoKTtcbiAgICAgICAgdGhpcy5ncmFtbWFyID0gc2VydmljZXMuR3JhbW1hcjtcbiAgICAgICAgdGhpcy5sZXhlciA9IHNlcnZpY2VzLnBhcnNlci5MZXhlcjtcbiAgICAgICAgdGhpcy5saW5rZXIgPSBzZXJ2aWNlcy5yZWZlcmVuY2VzLkxpbmtlcjtcbiAgICB9XG4gICAgZGVoeWRyYXRlKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgc2hhbGxvdyBjb3BpZXMgb2YgdGhlIGVycm9yc1xuICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGVycm9ycyBpbmhlcml0IGZyb20gdGhlIGBFcnJvcmAgY2xhc3MsIHdoaWNoIGlzIG5vdCB0cmFuc2ZlcmFibGUgYWNyb3NzIHdvcmtlciB0aHJlYWRzXG4gICAgICAgICAgICBsZXhlckVycm9yczogcmVzdWx0LmxleGVyRXJyb3JzLm1hcChlID0+IChPYmplY3QuYXNzaWduKHt9LCBlKSkpLFxuICAgICAgICAgICAgcGFyc2VyRXJyb3JzOiByZXN1bHQucGFyc2VyRXJyb3JzLm1hcChlID0+IChPYmplY3QuYXNzaWduKHt9LCBlKSkpLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGVoeWRyYXRlQXN0Tm9kZShyZXN1bHQudmFsdWUsIHRoaXMuY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQocmVzdWx0LnZhbHVlKSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQobm9kZSkge1xuICAgICAgICBjb25zdCBhc3ROb2RlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgY3N0Tm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgYXN0Tm9kZSBvZiBzdHJlYW1Bc3Qobm9kZSkpIHtcbiAgICAgICAgICAgIGFzdE5vZGVzLnNldChhc3ROb2RlLCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuJGNzdE5vZGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3N0Tm9kZSBvZiBzdHJlYW1Dc3Qobm9kZS4kY3N0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjc3ROb2Rlcy5zZXQoY3N0Tm9kZSwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhc3ROb2RlcyxcbiAgICAgICAgICAgIGNzdE5vZGVzXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRlaHlkcmF0ZUFzdE5vZGUobm9kZSwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBvYmogPSBjb250ZXh0LmFzdE5vZGVzLmdldChub2RlKTtcbiAgICAgICAgb2JqLiR0eXBlID0gbm9kZS4kdHlwZTtcbiAgICAgICAgb2JqLiRjb250YWluZXJJbmRleCA9IG5vZGUuJGNvbnRhaW5lckluZGV4O1xuICAgICAgICBvYmouJGNvbnRhaW5lclByb3BlcnR5ID0gbm9kZS4kY29udGFpbmVyUHJvcGVydHk7XG4gICAgICAgIGlmIChub2RlLiRjc3ROb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9iai4kY3N0Tm9kZSA9IHRoaXMuZGVoeWRyYXRlQ3N0Tm9kZShub2RlLiRjc3ROb2RlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICAgICAgb2JqW25hbWVdID0gYXJyO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3ROb2RlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmRlaHlkcmF0ZUFzdE5vZGUoaXRlbSwgY29udGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzUmVmZXJlbmNlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmRlaHlkcmF0ZVJlZmVyZW5jZShpdGVtLCBjb250ZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXN0Tm9kZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBvYmpbbmFtZV0gPSB0aGlzLmRlaHlkcmF0ZUFzdE5vZGUodmFsdWUsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgb2JqW25hbWVdID0gdGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UodmFsdWUsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGRlaHlkcmF0ZVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIG9iai4kcmVmVGV4dCA9IHJlZmVyZW5jZS4kcmVmVGV4dDtcbiAgICAgICAgaWYgKHJlZmVyZW5jZS4kcmVmTm9kZSkge1xuICAgICAgICAgICAgb2JqLiRyZWZOb2RlID0gY29udGV4dC5jc3ROb2Rlcy5nZXQocmVmZXJlbmNlLiRyZWZOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBkZWh5ZHJhdGVDc3ROb2RlKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgY3N0Tm9kZSA9IGNvbnRleHQuY3N0Tm9kZXMuZ2V0KG5vZGUpO1xuICAgICAgICBpZiAoaXNSb290Q3N0Tm9kZShub2RlKSkge1xuICAgICAgICAgICAgY3N0Tm9kZS5mdWxsVGV4dCA9IG5vZGUuZnVsbFRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBOb3RlOiBUaGlzIHJldHVybnMgdW5kZWZpbmVkIGZvciBoaWRkZW4gbm9kZXMgKGkuZS4gY29tbWVudHMpXG4gICAgICAgICAgICBjc3ROb2RlLmdyYW1tYXJTb3VyY2UgPSB0aGlzLmdldEdyYW1tYXJFbGVtZW50SWQobm9kZS5ncmFtbWFyU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjc3ROb2RlLmhpZGRlbiA9IG5vZGUuaGlkZGVuO1xuICAgICAgICBjc3ROb2RlLmFzdE5vZGUgPSBjb250ZXh0LmFzdE5vZGVzLmdldChub2RlLmFzdE5vZGUpO1xuICAgICAgICBpZiAoaXNDb21wb3NpdGVDc3ROb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICBjc3ROb2RlLmNvbnRlbnQgPSBub2RlLmNvbnRlbnQubWFwKGNoaWxkID0+IHRoaXMuZGVoeWRyYXRlQ3N0Tm9kZShjaGlsZCwgY29udGV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTGVhZkNzdE5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIGNzdE5vZGUudG9rZW5UeXBlID0gbm9kZS50b2tlblR5cGUubmFtZTtcbiAgICAgICAgICAgIGNzdE5vZGUub2Zmc2V0ID0gbm9kZS5vZmZzZXQ7XG4gICAgICAgICAgICBjc3ROb2RlLmxlbmd0aCA9IG5vZGUubGVuZ3RoO1xuICAgICAgICAgICAgY3N0Tm9kZS5zdGFydExpbmUgPSBub2RlLnJhbmdlLnN0YXJ0LmxpbmU7XG4gICAgICAgICAgICBjc3ROb2RlLnN0YXJ0Q29sdW1uID0gbm9kZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXI7XG4gICAgICAgICAgICBjc3ROb2RlLmVuZExpbmUgPSBub2RlLnJhbmdlLmVuZC5saW5lO1xuICAgICAgICAgICAgY3N0Tm9kZS5lbmRDb2x1bW4gPSBub2RlLnJhbmdlLmVuZC5jaGFyYWN0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzdE5vZGU7XG4gICAgfVxuICAgIGh5ZHJhdGUocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQobm9kZSk7XG4gICAgICAgIGlmICgnJGNzdE5vZGUnIGluIG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaHlkcmF0ZUNzdE5vZGUobm9kZS4kY3N0Tm9kZSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxleGVyRXJyb3JzOiByZXN1bHQubGV4ZXJFcnJvcnMsXG4gICAgICAgICAgICBwYXJzZXJFcnJvcnM6IHJlc3VsdC5wYXJzZXJFcnJvcnMsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5oeWRyYXRlQXN0Tm9kZShub2RlLCBjb250ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjcmVhdGVIeWRyYXRpb25Db250ZXh0KG5vZGUpIHtcbiAgICAgICAgY29uc3QgYXN0Tm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGNzdE5vZGVzID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGFzdE5vZGUgb2Ygc3RyZWFtQXN0KG5vZGUpKSB7XG4gICAgICAgICAgICBhc3ROb2Rlcy5zZXQoYXN0Tm9kZSwge30pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb290O1xuICAgICAgICBpZiAobm9kZS4kY3N0Tm9kZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjc3ROb2RlIG9mIHN0cmVhbUNzdChub2RlLiRjc3ROb2RlKSkge1xuICAgICAgICAgICAgICAgIGxldCBjc3Q7XG4gICAgICAgICAgICAgICAgaWYgKCdmdWxsVGV4dCcgaW4gY3N0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjc3QgPSBuZXcgUm9vdENzdE5vZGVJbXBsKGNzdE5vZGUuZnVsbFRleHQpO1xuICAgICAgICAgICAgICAgICAgICByb290ID0gY3N0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgnY29udGVudCcgaW4gY3N0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjc3QgPSBuZXcgQ29tcG9zaXRlQ3N0Tm9kZUltcGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoJ3Rva2VuVHlwZScgaW4gY3N0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjc3QgPSB0aGlzLmh5ZHJhdGVDc3RMZWFmTm9kZShjc3ROb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNzdCkge1xuICAgICAgICAgICAgICAgICAgICBjc3ROb2Rlcy5zZXQoY3N0Tm9kZSwgY3N0KTtcbiAgICAgICAgICAgICAgICAgICAgY3N0LnJvb3QgPSByb290O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXN0Tm9kZXMsXG4gICAgICAgICAgICBjc3ROb2Rlc1xuICAgICAgICB9O1xuICAgIH1cbiAgICBoeWRyYXRlQXN0Tm9kZShub2RlLCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGFzdE5vZGUgPSBjb250ZXh0LmFzdE5vZGVzLmdldChub2RlKTtcbiAgICAgICAgYXN0Tm9kZS4kdHlwZSA9IG5vZGUuJHR5cGU7XG4gICAgICAgIGFzdE5vZGUuJGNvbnRhaW5lckluZGV4ID0gbm9kZS4kY29udGFpbmVySW5kZXg7XG4gICAgICAgIGFzdE5vZGUuJGNvbnRhaW5lclByb3BlcnR5ID0gbm9kZS4kY29udGFpbmVyUHJvcGVydHk7XG4gICAgICAgIGlmIChub2RlLiRjc3ROb2RlKSB7XG4gICAgICAgICAgICBhc3ROb2RlLiRjc3ROb2RlID0gY29udGV4dC5jc3ROb2Rlcy5nZXQobm9kZS4kY3N0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCckJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICAgICAgICAgIGFzdE5vZGVbbmFtZV0gPSBhcnI7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FzdE5vZGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuc2V0UGFyZW50KHRoaXMuaHlkcmF0ZUFzdE5vZGUoaXRlbSwgY29udGV4dCksIGFzdE5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1JlZmVyZW5jZShpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5oeWRyYXRlUmVmZXJlbmNlKGl0ZW0sIGFzdE5vZGUsIG5hbWUsIGNvbnRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBc3ROb2RlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFzdE5vZGVbbmFtZV0gPSB0aGlzLnNldFBhcmVudCh0aGlzLmh5ZHJhdGVBc3ROb2RlKHZhbHVlLCBjb250ZXh0KSwgYXN0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1JlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBhc3ROb2RlW25hbWVdID0gdGhpcy5oeWRyYXRlUmVmZXJlbmNlKHZhbHVlLCBhc3ROb2RlLCBuYW1lLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3ROb2RlW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzdE5vZGU7XG4gICAgfVxuICAgIHNldFBhcmVudChub2RlLCBwYXJlbnQpIHtcbiAgICAgICAgbm9kZS4kY29udGFpbmVyID0gcGFyZW50O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgaHlkcmF0ZVJlZmVyZW5jZShyZWZlcmVuY2UsIG5vZGUsIG5hbWUsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKG5vZGUsIG5hbWUsIGNvbnRleHQuY3N0Tm9kZXMuZ2V0KHJlZmVyZW5jZS4kcmVmTm9kZSksIHJlZmVyZW5jZS4kcmVmVGV4dCk7XG4gICAgfVxuICAgIGh5ZHJhdGVDc3ROb2RlKGNzdE5vZGUsIGNvbnRleHQsIG51bSA9IDApIHtcbiAgICAgICAgY29uc3QgY3N0Tm9kZU9iaiA9IGNvbnRleHQuY3N0Tm9kZXMuZ2V0KGNzdE5vZGUpO1xuICAgICAgICBpZiAodHlwZW9mIGNzdE5vZGUuZ3JhbW1hclNvdXJjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNzdE5vZGVPYmouZ3JhbW1hclNvdXJjZSA9IHRoaXMuZ2V0R3JhbW1hckVsZW1lbnQoY3N0Tm9kZS5ncmFtbWFyU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjc3ROb2RlT2JqLmFzdE5vZGUgPSBjb250ZXh0LmFzdE5vZGVzLmdldChjc3ROb2RlLmFzdE5vZGUpO1xuICAgICAgICBpZiAoaXNDb21wb3NpdGVDc3ROb2RlKGNzdE5vZGVPYmopKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNzdE5vZGUuY29udGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gdGhpcy5oeWRyYXRlQ3N0Tm9kZShjaGlsZCwgY29udGV4dCwgbnVtKyspO1xuICAgICAgICAgICAgICAgIGNzdE5vZGVPYmouY29udGVudC5wdXNoKGh5ZHJhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3N0Tm9kZU9iajtcbiAgICB9XG4gICAgaHlkcmF0ZUNzdExlYWZOb2RlKGNzdE5vZGUpIHtcbiAgICAgICAgY29uc3QgdG9rZW5UeXBlID0gdGhpcy5nZXRUb2tlblR5cGUoY3N0Tm9kZS50b2tlblR5cGUpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjc3ROb2RlLm9mZnNldDtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gY3N0Tm9kZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN0YXJ0TGluZSA9IGNzdE5vZGUuc3RhcnRMaW5lO1xuICAgICAgICBjb25zdCBzdGFydENvbHVtbiA9IGNzdE5vZGUuc3RhcnRDb2x1bW47XG4gICAgICAgIGNvbnN0IGVuZExpbmUgPSBjc3ROb2RlLmVuZExpbmU7XG4gICAgICAgIGNvbnN0IGVuZENvbHVtbiA9IGNzdE5vZGUuZW5kQ29sdW1uO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBjc3ROb2RlLmhpZGRlbjtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBMZWFmQ3N0Tm9kZUltcGwob2Zmc2V0LCBsZW5ndGgsIHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhcnRMaW5lLFxuICAgICAgICAgICAgICAgIGNoYXJhY3Rlcjogc3RhcnRDb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBlbmRMaW5lLFxuICAgICAgICAgICAgICAgIGNoYXJhY3RlcjogZW5kQ29sdW1uXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRva2VuVHlwZSwgaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGdldFRva2VuVHlwZShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxleGVyLmRlZmluaXRpb25bbmFtZV07XG4gICAgfVxuICAgIGdldEdyYW1tYXJFbGVtZW50SWQobm9kZSkge1xuICAgICAgICBpZiAodGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KG5vZGUpO1xuICAgIH1cbiAgICBnZXRHcmFtbWFyRWxlbWVudChpZCkge1xuICAgICAgICBpZiAodGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0S2V5KGlkKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdyYW1tYXIgZWxlbWVudCBpZDogJyArIGlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVHcmFtbWFyRWxlbWVudElkTWFwKCkge1xuICAgICAgICBsZXQgaWQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc3RyZWFtQXN0KHRoaXMuZ3JhbW1hcikpIHtcbiAgICAgICAgICAgIGlmIChpc0Fic3RyYWN0RWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQoZWxlbWVudCwgaWQrKyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oeWRyYXRvci5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIxIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgY3JlYXRlR3JhbW1hckNvbmZpZyB9IGZyb20gJy4vbGFuZ3VhZ2VzL2dyYW1tYXItY29uZmlnLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvbXBsZXRpb25QYXJzZXIgfSBmcm9tICcuL3BhcnNlci9jb21wbGV0aW9uLXBhcnNlci1idWlsZGVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxhbmdpdW1QYXJzZXIgfSBmcm9tICcuL3BhcnNlci9sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRUb2tlbkJ1aWxkZXIgfSBmcm9tICcuL3BhcnNlci90b2tlbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRWYWx1ZUNvbnZlcnRlciB9IGZyb20gJy4vcGFyc2VyL3ZhbHVlLWNvbnZlcnRlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0TGlua2VyIH0gZnJvbSAnLi9yZWZlcmVuY2VzL2xpbmtlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0TmFtZVByb3ZpZGVyIH0gZnJvbSAnLi9yZWZlcmVuY2VzL25hbWUtcHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgRGVmYXVsdFJlZmVyZW5jZXMgfSBmcm9tICcuL3JlZmVyZW5jZXMvcmVmZXJlbmNlcy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiB9IGZyb20gJy4vcmVmZXJlbmNlcy9zY29wZS1jb21wdXRhdGlvbi5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0U2NvcGVQcm92aWRlciB9IGZyb20gJy4vcmVmZXJlbmNlcy9zY29wZS1wcm92aWRlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0SnNvblNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXIvanNvbi1zZXJpYWxpemVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRTZXJ2aWNlUmVnaXN0cnkgfSBmcm9tICcuL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0aW9uL2RvY3VtZW50LXZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVnaXN0cnkgfSBmcm9tICcuL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIsIERlZmF1bHRSZWZlcmVuY2VEZXNjcmlwdGlvblByb3ZpZGVyIH0gZnJvbSAnLi93b3Jrc3BhY2UvYXN0LWRlc2NyaXB0aW9ucy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0QXN0Tm9kZUxvY2F0b3IgfSBmcm9tICcuL3dvcmtzcGFjZS9hc3Qtbm9kZS1sb2NhdG9yLmpzJztcbmltcG9ydCB7IERlZmF1bHRDb25maWd1cmF0aW9uUHJvdmlkZXIgfSBmcm9tICcuL3dvcmtzcGFjZS9jb25maWd1cmF0aW9uLmpzJztcbmltcG9ydCB7IERlZmF1bHREb2N1bWVudEJ1aWxkZXIgfSBmcm9tICcuL3dvcmtzcGFjZS9kb2N1bWVudC1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5LCBEZWZhdWx0TGFuZ2l1bURvY3VtZW50cyB9IGZyb20gJy4vd29ya3NwYWNlL2RvY3VtZW50cy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0SW5kZXhNYW5hZ2VyIH0gZnJvbSAnLi93b3Jrc3BhY2UvaW5kZXgtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0V29ya3NwYWNlTWFuYWdlciB9IGZyb20gJy4vd29ya3NwYWNlL3dvcmtzcGFjZS1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IERlZmF1bHRMZXhlciB9IGZyb20gJy4vcGFyc2VyL2xleGVyLmpzJztcbmltcG9ydCB7IEpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9kb2N1bWVudGF0aW9uL2RvY3VtZW50YXRpb24tcHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1lbnRQcm92aWRlciB9IGZyb20gJy4vZG9jdW1lbnRhdGlvbi9jb21tZW50LXByb3ZpZGVyLmpzJztcbmltcG9ydCB7IExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciB9IGZyb20gJy4vcGFyc2VyL2xhbmdpdW0tcGFyc2VyLmpzJztcbmltcG9ydCB7IERlZmF1bHRBc3luY1BhcnNlciB9IGZyb20gJy4vcGFyc2VyL2FzeW5jLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0V29ya3NwYWNlTG9jayB9IGZyb20gJy4vd29ya3NwYWNlL3dvcmtzcGFjZS1sb2NrLmpzJztcbmltcG9ydCB7IERlZmF1bHRIeWRyYXRvciB9IGZyb20gJy4vc2VyaWFsaXplci9oeWRyYXRvci5qcyc7XG4vKipcbiAqIENyZWF0ZXMgYSBkZXBlbmRlbmN5IGluamVjdGlvbiBtb2R1bGUgY29uZmlndXJpbmcgdGhlIGRlZmF1bHQgY29yZSBzZXJ2aWNlcy5cbiAqIFRoaXMgaXMgYSBzZXQgb2Ygc2VydmljZXMgdGhhdCBhcmUgZGVkaWNhdGVkIHRvIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZG9jdW1lbnRhdGlvbjoge1xuICAgICAgICAgICAgQ29tbWVudFByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0Q29tbWVudFByb3ZpZGVyKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIERvY3VtZW50YXRpb25Qcm92aWRlcjogKHNlcnZpY2VzKSA9PiBuZXcgSlNEb2NEb2N1bWVudGF0aW9uUHJvdmlkZXIoc2VydmljZXMpXG4gICAgICAgIH0sXG4gICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgICAgQXN5bmNQYXJzZXI6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRBc3luY1BhcnNlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBHcmFtbWFyQ29uZmlnOiAoc2VydmljZXMpID0+IGNyZWF0ZUdyYW1tYXJDb25maWcoc2VydmljZXMpLFxuICAgICAgICAgICAgTGFuZ2l1bVBhcnNlcjogKHNlcnZpY2VzKSA9PiBjcmVhdGVMYW5naXVtUGFyc2VyKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIENvbXBsZXRpb25QYXJzZXI6IChzZXJ2aWNlcykgPT4gY3JlYXRlQ29tcGxldGlvblBhcnNlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBWYWx1ZUNvbnZlcnRlcjogKCkgPT4gbmV3IERlZmF1bHRWYWx1ZUNvbnZlcnRlcigpLFxuICAgICAgICAgICAgVG9rZW5CdWlsZGVyOiAoKSA9PiBuZXcgRGVmYXVsdFRva2VuQnVpbGRlcigpLFxuICAgICAgICAgICAgTGV4ZXI6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRMZXhlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjogKCkgPT4gbmV3IExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcigpXG4gICAgICAgIH0sXG4gICAgICAgIHdvcmtzcGFjZToge1xuICAgICAgICAgICAgQXN0Tm9kZUxvY2F0b3I6ICgpID0+IG5ldyBEZWZhdWx0QXN0Tm9kZUxvY2F0b3IoKSxcbiAgICAgICAgICAgIEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIoc2VydmljZXMpLFxuICAgICAgICAgICAgUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIoc2VydmljZXMpXG4gICAgICAgIH0sXG4gICAgICAgIHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICAgIExpbmtlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdExpbmtlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBOYW1lUHJvdmlkZXI6ICgpID0+IG5ldyBEZWZhdWx0TmFtZVByb3ZpZGVyKCksXG4gICAgICAgICAgICBTY29wZVByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0U2NvcGVQcm92aWRlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBTY29wZUNvbXB1dGF0aW9uOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0U2NvcGVDb21wdXRhdGlvbihzZXJ2aWNlcyksXG4gICAgICAgICAgICBSZWZlcmVuY2VzOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0UmVmZXJlbmNlcyhzZXJ2aWNlcylcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplcjoge1xuICAgICAgICAgICAgSHlkcmF0b3I6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRIeWRyYXRvcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBKc29uU2VyaWFsaXplcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdEpzb25TZXJpYWxpemVyKHNlcnZpY2VzKVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgICAgICBEb2N1bWVudFZhbGlkYXRvcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIFZhbGlkYXRpb25SZWdpc3RyeTogKHNlcnZpY2VzKSA9PiBuZXcgVmFsaWRhdGlvblJlZ2lzdHJ5KHNlcnZpY2VzKVxuICAgICAgICB9LFxuICAgICAgICBzaGFyZWQ6ICgpID0+IGNvbnRleHQuc2hhcmVkXG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG1vZHVsZSBjb25maWd1cmluZyB0aGUgZGVmYXVsdCBzaGFyZWQgY29yZSBzZXJ2aWNlcy5cbiAqIFRoaXMgaXMgdGhlIHNldCBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBsYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgU2VydmljZVJlZ2lzdHJ5OiAoKSA9PiBuZXcgRGVmYXVsdFNlcnZpY2VSZWdpc3RyeSgpLFxuICAgICAgICB3b3Jrc3BhY2U6IHtcbiAgICAgICAgICAgIExhbmdpdW1Eb2N1bWVudHM6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRMYW5naXVtRG9jdW1lbnRzKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIExhbmdpdW1Eb2N1bWVudEZhY3Rvcnk6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5KHNlcnZpY2VzKSxcbiAgICAgICAgICAgIERvY3VtZW50QnVpbGRlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdERvY3VtZW50QnVpbGRlcihzZXJ2aWNlcyksXG4gICAgICAgICAgICBJbmRleE1hbmFnZXI6IChzZXJ2aWNlcykgPT4gbmV3IERlZmF1bHRJbmRleE1hbmFnZXIoc2VydmljZXMpLFxuICAgICAgICAgICAgV29ya3NwYWNlTWFuYWdlcjogKHNlcnZpY2VzKSA9PiBuZXcgRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXIoc2VydmljZXMpLFxuICAgICAgICAgICAgRmlsZVN5c3RlbVByb3ZpZGVyOiAoc2VydmljZXMpID0+IGNvbnRleHQuZmlsZVN5c3RlbVByb3ZpZGVyKHNlcnZpY2VzKSxcbiAgICAgICAgICAgIFdvcmtzcGFjZUxvY2s6ICgpID0+IG5ldyBEZWZhdWx0V29ya3NwYWNlTG9jaygpLFxuICAgICAgICAgICAgQ29uZmlndXJhdGlvblByb3ZpZGVyOiAoc2VydmljZXMpID0+IG5ldyBEZWZhdWx0Q29uZmlndXJhdGlvblByb3ZpZGVyKHNlcnZpY2VzKVxuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHQtbW9kdWxlLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHZhciBNb2R1bGU7XG4oZnVuY3Rpb24gKE1vZHVsZSkge1xuICAgIE1vZHVsZS5tZXJnZSA9IChtMSwgbTIpID0+IF9tZXJnZShfbWVyZ2Uoe30sIG0xKSwgbTIpO1xufSkoTW9kdWxlIHx8IChNb2R1bGUgPSB7fSkpO1xuLyoqXG4gKiBHaXZlbiBhIHNldCBvZiBtb2R1bGVzLCB0aGUgaW5qZWN0IGZ1bmN0aW9uIHJldHVybnMgYSBsYXppbHkgZXZhbHVhdGVkIGluamVjdG9yXG4gKiB0aGF0IGluamVjdHMgZGVwZW5kZW5jaWVzIGludG8gdGhlIHJlcXVlc3RlZCBzZXJ2aWNlIHdoZW4gaXQgaXMgcmVxdWVzdGVkIHRoZVxuICogZmlyc3QgdGltZS4gU3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIHJldHVybiB0aGUgc2FtZSBzZXJ2aWNlLlxuICpcbiAqIEluIHRoZSBjYXNlIG9mIGN5Y2xpYyBkZXBlbmRlbmNpZXMsIGFuIEVycm9yIHdpbGwgYmUgdGhyb3duLiBUaGlzIGNhbiBiZSBmaXhlZFxuICogYnkgaW5qZWN0aW5nIGEgcHJvdmlkZXIgYCgpID0+IFRgIGluc3RlYWQgb2YgYSBgVGAuXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgYXJndW1lbnRzIG1heSBiZSBvYmplY3RzIG9yIGFycmF5cy4gSG93ZXZlciwgdGhlIHJlc3VsdCB3aWxsXG4gKiBiZSBhbiBvYmplY3QuIFVzaW5nIGl0IHdpdGggZm9yLi5vZiB3aWxsIGhhdmUgbm8gZWZmZWN0LlxuICpcbiAqIEBwYXJhbSBtb2R1bGUxIGZpcnN0IE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTIgKG9wdGlvbmFsKSBzZWNvbmQgTW9kdWxlXG4gKiBAcGFyYW0gbW9kdWxlMyAob3B0aW9uYWwpIHRoaXJkIE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTQgKG9wdGlvbmFsKSBmb3VydGggTW9kdWxlXG4gKiBAcGFyYW0gbW9kdWxlNSAob3B0aW9uYWwpIGZpZnRoIE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTYgKG9wdGlvbmFsKSBzaXh0aCBNb2R1bGVcbiAqIEBwYXJhbSBtb2R1bGU3IChvcHRpb25hbCkgc2V2ZW50aCBNb2R1bGVcbiAqIEBwYXJhbSBtb2R1bGU4IChvcHRpb25hbCkgZWlnaHRoIE1vZHVsZVxuICogQHBhcmFtIG1vZHVsZTkgKG9wdGlvbmFsKSBuaW50aCBNb2R1bGVcbiAqIEByZXR1cm5zIGEgbmV3IG9iamVjdCBvZiB0eXBlIElcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdChtb2R1bGUxLCBtb2R1bGUyLCBtb2R1bGUzLCBtb2R1bGU0LCBtb2R1bGU1LCBtb2R1bGU2LCBtb2R1bGU3LCBtb2R1bGU4LCBtb2R1bGU5KSB7XG4gICAgY29uc3QgbW9kdWxlID0gW21vZHVsZTEsIG1vZHVsZTIsIG1vZHVsZTMsIG1vZHVsZTQsIG1vZHVsZTUsIG1vZHVsZTYsIG1vZHVsZTcsIG1vZHVsZTgsIG1vZHVsZTldLnJlZHVjZShfbWVyZ2UsIHt9KTtcbiAgICByZXR1cm4gX2luamVjdChtb2R1bGUpO1xufVxuY29uc3QgaXNQcm94eSA9IFN5bWJvbCgnaXNQcm94eScpO1xuLyoqXG4gKiBFYWdlcmx5IGxvYWQgYWxsIHNlcnZpY2VzIGluIHRoZSBnaXZlbiBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250YWluZXIuIFRoaXMgaXMgc29tZXRpbWVzXG4gKiBuZWNlc3NhcnkgYmVjYXVzZSBzZXJ2aWNlcyBjYW4gcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzIGluIHRoZWlyIGNvbnN0cnVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhZ2VyTG9hZChpdGVtKSB7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbVtpc1Byb3h5XSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoaXRlbSkpIHtcbiAgICAgICAgICAgIGVhZ2VyTG9hZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gaW5qZWN0b3IgYnkgY3JlYXRpbmcgYSBwcm94eS5cbiAqIEludmFyaWFudDogaW5qZWN0b3IgaXMgb2YgdHlwZSBJLiBJZiBpbmplY3RvciBpcyB1bmRlZmluZWQsIHRoZW4gVCA9IEkuXG4gKi9cbmZ1bmN0aW9uIF9pbmplY3QobW9kdWxlLCBpbmplY3Rvcikge1xuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgIGRlbGV0ZVByb3BlcnR5OiAoKSA9PiBmYWxzZSxcbiAgICAgICAgZ2V0OiAob2JqLCBwcm9wKSA9PiBfcmVzb2x2ZShvYmosIHByb3AsIG1vZHVsZSwgaW5qZWN0b3IgfHwgcHJveHkpLFxuICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IChvYmosIHByb3ApID0+IChfcmVzb2x2ZShvYmosIHByb3AsIG1vZHVsZSwgaW5qZWN0b3IgfHwgcHJveHkpLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCkpLFxuICAgICAgICBoYXM6IChfLCBwcm9wKSA9PiBwcm9wIGluIG1vZHVsZSxcbiAgICAgICAgb3duS2V5czogKCkgPT4gWy4uLlJlZmxlY3Qub3duS2V5cyhtb2R1bGUpLCBpc1Byb3h5XSAvLyB1c2VkIGJ5IGZvci4uaW5cbiAgICB9KTtcbiAgICBwcm94eVtpc1Byb3h5XSA9IHRydWU7XG4gICAgcmV0dXJuIHByb3h5O1xufVxuLyoqXG4gKiBJbnRlcm5hbGx5IHVzZWQgdG8gdGFnIGEgcmVxdWVzdGVkIGRlcGVuZGVuY3ksIGRpcmVjdGx5IGJlZm9yZSBjYWxsaW5nIHRoZSBmYWN0b3J5LlxuICogVGhpcyBhbGxvd3MgdXMgdG8gZmluZCBjeWNsZXMgZHVyaW5nIGluc3RhbmNlIGNyZWF0aW9uLlxuICovXG5jb25zdCBfX3JlcXVlc3RlZF9fID0gU3ltYm9sKCk7XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGBvYmpbcHJvcF1gLiBJZiB0aGUgdmFsdWUgZG9lcyBub3QgZXhpc3QsIHlldCwgaXQgaXMgcmVzb2x2ZWQgZnJvbVxuICogdGhlIG1vZHVsZSBkZXNjcmlwdGlvbi4gVGhlIHJlc3VsdCBvZiBzZXJ2aWNlIGZhY3RvcmllcyBpcyBjYWNoZWQuIEdyb3VwcyBhcmVcbiAqIHJlY3Vyc2l2ZWx5IHByb3hpZWQuXG4gKlxuICogQHBhcmFtIG9iaiBhbiBvYmplY3QgaG9sZGluZyBhbGwgZ3JvdXAgcHJveGllcyBhbmQgc2VydmljZXNcbiAqIEBwYXJhbSBwcm9wIHRoZSBrZXkgb2YgYSB2YWx1ZSB3aXRoaW4gb2JqXG4gKiBAcGFyYW0gbW9kdWxlIGFuIG9iamVjdCBjb250YWluaW5nIGdyb3VwcyBhbmQgc2VydmljZSBmYWN0b3JpZXNcbiAqIEBwYXJhbSBpbmplY3RvciB0aGUgZmlyc3QgbGV2ZWwgcHJveHkgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gYWxsIHZhbHVlc1xuICogQHJldHVybnMgdGhlIHJlcXVlc3RlZCB2YWx1ZSBgb2JqW3Byb3BdYFxuICogQHRocm93cyBFcnJvciBpZiBhIGRlcGVuZGVuY3kgY3ljbGUgaXMgZGV0ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gX3Jlc29sdmUob2JqLCBwcm9wLCBtb2R1bGUsIGluamVjdG9yKSB7XG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmpbcHJvcF0gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zdHJ1Y3Rpb24gZmFpbHVyZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdXIgZGVwZW5kZW5jaWVzIGFyZSBjb25zdHJ1Y3RhYmxlLicsIHsgY2F1c2U6IG9ialtwcm9wXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqW3Byb3BdID09PSBfX3JlcXVlc3RlZF9fKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlIGRldGVjdGVkLiBQbGVhc2UgbWFrZSBcIicgKyBTdHJpbmcocHJvcCkgKyAnXCIgbGF6eS4gU2VlIGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXNlcnZpY2VzLyNyZXNvbHZpbmctY3ljbGljLWRlcGVuZGVuY2llcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpbcHJvcF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb3AgaW4gbW9kdWxlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW3Byb3BdO1xuICAgICAgICBvYmpbcHJvcF0gPSBfX3JlcXVlc3RlZF9fO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgb2JqW3Byb3BdID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgPyB2YWx1ZShpbmplY3RvcikgOiBfaW5qZWN0KHZhbHVlLCBpbmplY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBvYmpbcHJvcF0gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqW3Byb3BdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcC1tZXJnZSBvZiB0d28gbW9kdWxlcyBieSB3cml0aW5nIHNvdXJjZSBlbnRyaWVzIGludG8gdGhlIHRhcmdldCBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHRhcmdldCB0aGUgbW9kdWxlIHdoaWNoIGlzIHdyaXR0ZW5cbiAqIEBwYXJhbSBzb3VyY2UgdGhlIG1vZHVsZSB3aGljaCBpcyByZWFkXG4gKiBAcmV0dXJucyB0aGUgdGFyZ2V0IG1vZHVsZVxuICovXG5mdW5jdGlvbiBfbWVyZ2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZTEgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUxICE9PSBudWxsICYmIHZhbHVlMiAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUxID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IF9tZXJnZSh2YWx1ZTEsIHZhbHVlMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGVuZGVuY3ktaW5qZWN0aW9uLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9jb21tZW50LXByb3ZpZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZG9jdW1lbnRhdGlvbi1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2pzZG9jLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9ncmFtbWFyLWNvbmZpZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xhbmd1YWdlLW1ldGEtZGF0YS5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCAqIGZyb20gJy4vYXN5bmMtcGFyc2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tcGxldGlvbi1wYXJzZXItYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NzdC1ub2RlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sYW5naXVtLXBhcnNlci1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ2l1bS1wYXJzZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sZXhlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlci1jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbi1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsdWUtY29udmVydGVyLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9saW5rZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9uYW1lLXByb3ZpZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmNlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Njb3BlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NvcGUtY29tcHV0YXRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY29wZS1wcm92aWRlci5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAyMDIzIFR5cGVGb3ggR21iSFxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gKiB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCAqIGZyb20gJy4vaHlkcmF0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uLXNlcmlhbGl6ZXIuanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMiBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgY2xhc3MgRW1wdHlGaWxlU3lzdGVtUHJvdmlkZXIge1xuICAgIHJlYWRGaWxlKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGZpbGUgc3lzdGVtIGlzIGF2YWlsYWJsZS4nKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZERpcmVjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBFbXB0eUZpbGVTeXN0ZW0gPSB7XG4gICAgZmlsZVN5c3RlbVByb3ZpZGVyOiAoKSA9PiBuZXcgRW1wdHlGaWxlU3lzdGVtUHJvdmlkZXIoKVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUtc3lzdGVtLXByb3ZpZGVyLmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjMgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUsIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlIH0gZnJvbSAnLi4vZGVmYXVsdC1tb2R1bGUuanMnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnLi4vZGVwZW5kZW5jeS1pbmplY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgYXN0IGZyb20gJy4uL2xhbmd1YWdlcy9nZW5lcmF0ZWQvYXN0LmpzJztcbmltcG9ydCB7IEVtcHR5RmlsZVN5c3RlbSB9IGZyb20gJy4uL3dvcmtzcGFjZS9maWxlLXN5c3RlbS1wcm92aWRlci5qcyc7XG5pbXBvcnQgeyBVUkkgfSBmcm9tICcuL3VyaS11dGlscy5qcyc7XG5jb25zdCBtaW5pbWFsR3JhbW1hck1vZHVsZSA9IHtcbiAgICBHcmFtbWFyOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgTGFuZ3VhZ2VNZXRhRGF0YTogKCkgPT4gKHtcbiAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgICAgZmlsZUV4dGVuc2lvbnM6IFsnLmxhbmdpdW0nXSxcbiAgICAgICAgbGFuZ3VhZ2VJZDogJ2xhbmdpdW0nXG4gICAgfSlcbn07XG5jb25zdCBtaW5pbWFsU2hhcmVkR3JhbW1hck1vZHVsZSA9IHtcbiAgICBBc3RSZWZsZWN0aW9uOiAoKSA9PiBuZXcgYXN0LkxhbmdpdW1HcmFtbWFyQXN0UmVmbGVjdGlvbigpXG59O1xuZnVuY3Rpb24gY3JlYXRlTWluaW1hbEdyYW1tYXJTZXJ2aWNlcygpIHtcbiAgICBjb25zdCBzaGFyZWQgPSBpbmplY3QoY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUoRW1wdHlGaWxlU3lzdGVtKSwgbWluaW1hbFNoYXJlZEdyYW1tYXJNb2R1bGUpO1xuICAgIGNvbnN0IGdyYW1tYXIgPSBpbmplY3QoY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUoeyBzaGFyZWQgfSksIG1pbmltYWxHcmFtbWFyTW9kdWxlKTtcbiAgICBzaGFyZWQuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKGdyYW1tYXIpO1xuICAgIHJldHVybiBncmFtbWFyO1xufVxuLyoqXG4gKiBMb2FkIGEgTGFuZ2l1bSBncmFtbWFyIGZvciB5b3VyIGxhbmd1YWdlIGZyb20gYSBKU09OIHN0cmluZy4gVGhpcyBpcyB1c2VkIGJ5IHNldmVyYWwgc2VydmljZXMsXG4gKiBtb3N0IG5vdGFibHkgdGhlIHBhcnNlciBidWlsZGVyIHdoaWNoIGludGVycHJldHMgdGhlIGdyYW1tYXIgdG8gY3JlYXRlIGEgcGFyc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEdyYW1tYXJGcm9tSnNvbihqc29uKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY3JlYXRlTWluaW1hbEdyYW1tYXJTZXJ2aWNlcygpO1xuICAgIGNvbnN0IGFzdE5vZGUgPSBzZXJ2aWNlcy5zZXJpYWxpemVyLkpzb25TZXJpYWxpemVyLmRlc2VyaWFsaXplKGpzb24pO1xuICAgIHNlcnZpY2VzLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tTW9kZWwoYXN0Tm9kZSwgVVJJLnBhcnNlKGBtZW1vcnk6Ly8keyhfYSA9IGFzdE5vZGUubmFtZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2dyYW1tYXInfS5sYW5naXVtYCkpO1xuICAgIHJldHVybiBhc3ROb2RlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JhbW1hci1sb2FkZXIuanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMyBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgKiBmcm9tICcuL2NhY2hpbmcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbGxlY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlzcG9zYWJsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyYW1tYXItbG9hZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvbWlzZS11dGlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmVhbS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3VyaS11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBBc3RVdGlscyBmcm9tICcuL2FzdC11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBDYW5jZWxsYXRpb24gZnJvbSAnLi9jYW5jZWxsYXRpb24uanMnO1xuaW1wb3J0ICogYXMgQ3N0VXRpbHMgZnJvbSAnLi9jc3QtdXRpbHMuanMnO1xuaW1wb3J0ICogYXMgR3JhbW1hclV0aWxzIGZyb20gJy4vZ3JhbW1hci11dGlscy5qcyc7XG5pbXBvcnQgKiBhcyBSZWdFeHBVdGlscyBmcm9tICcuL3JlZ2V4cC11dGlscy5qcyc7XG5leHBvcnQgeyBBc3RVdGlscywgQ2FuY2VsbGF0aW9uLCBDc3RVdGlscywgR3JhbW1hclV0aWxzLCBSZWdFeHBVdGlscyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMyBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50LXZhbGlkYXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb24tcmVnaXN0cnkuanMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgMjAyMyBUeXBlRm94IEdtYkhcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZVxuICogdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5leHBvcnQgKiBmcm9tICcuL2FzdC1kZXNjcmlwdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hc3Qtbm9kZS1sb2NhdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlndXJhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RvY3VtZW50LWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLXN5c3RlbS1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZGV4LW1hbmFnZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3Jrc3BhY2UtbG9jay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmtzcGFjZS1tYW5hZ2VyLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjEgVHlwZUZveCBHbWJIXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGVcbiAqIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0LW1vZHVsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlcGVuZGVuY3ktaW5qZWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZS1yZWdpc3RyeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3ludGF4LXRyZWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2N1bWVudGF0aW9uL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2VzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2VyL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmNlcy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcmlhbGl6ZXIvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb24vaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3Jrc3BhY2UvaW5kZXguanMnO1xuLy8gRXhwb3J0IHRoZSBMYW5naXVtIEdyYW1tYXIgQVNUIGRlZmluaXRpb25zIGluIHRoZSBgR3JhbW1hckFTVGAgbmFtZXNwYWNlXG5pbXBvcnQgKiBhcyBHcmFtbWFyQVNUIGZyb20gJy4vbGFuZ3VhZ2VzL2dlbmVyYXRlZC9hc3QuanMnO1xuZXhwb3J0IHsgR3JhbW1hckFTVCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvZ2VuZXJhdGVkL2FzdC50c1xuaW1wb3J0IHsgQWJzdHJhY3RBc3RSZWZsZWN0aW9uIH0gZnJvbSBcImxhbmdpdW1cIjtcbnZhciBTdGF0ZW1lbnQgPSBcIlN0YXRlbWVudFwiO1xudmFyIEFyY2hpdGVjdHVyZSA9IFwiQXJjaGl0ZWN0dXJlXCI7XG5mdW5jdGlvbiBpc0FyY2hpdGVjdHVyZShpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQXJjaGl0ZWN0dXJlKTtcbn1cbl9fbmFtZShpc0FyY2hpdGVjdHVyZSwgXCJpc0FyY2hpdGVjdHVyZVwiKTtcbnZhciBCcmFuY2ggPSBcIkJyYW5jaFwiO1xuZnVuY3Rpb24gaXNCcmFuY2goaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIEJyYW5jaCk7XG59XG5fX25hbWUoaXNCcmFuY2gsIFwiaXNCcmFuY2hcIik7XG52YXIgQ2hlY2tvdXQgPSBcIkNoZWNrb3V0XCI7XG52YXIgQ2hlcnJ5UGlja2luZyA9IFwiQ2hlcnJ5UGlja2luZ1wiO1xudmFyIENvbW1pdCA9IFwiQ29tbWl0XCI7XG5mdW5jdGlvbiBpc0NvbW1pdChpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgQ29tbWl0KTtcbn1cbl9fbmFtZShpc0NvbW1pdCwgXCJpc0NvbW1pdFwiKTtcbnZhciBDb21tb24gPSBcIkNvbW1vblwiO1xuZnVuY3Rpb24gaXNDb21tb24oaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIENvbW1vbik7XG59XG5fX25hbWUoaXNDb21tb24sIFwiaXNDb21tb25cIik7XG52YXIgR2l0R3JhcGggPSBcIkdpdEdyYXBoXCI7XG5mdW5jdGlvbiBpc0dpdEdyYXBoKGl0ZW0pIHtcbiAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBHaXRHcmFwaCk7XG59XG5fX25hbWUoaXNHaXRHcmFwaCwgXCJpc0dpdEdyYXBoXCIpO1xudmFyIEluZm8gPSBcIkluZm9cIjtcbmZ1bmN0aW9uIGlzSW5mbyhpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgSW5mbyk7XG59XG5fX25hbWUoaXNJbmZvLCBcImlzSW5mb1wiKTtcbnZhciBNZXJnZSA9IFwiTWVyZ2VcIjtcbmZ1bmN0aW9uIGlzTWVyZ2UoaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIE1lcmdlKTtcbn1cbl9fbmFtZShpc01lcmdlLCBcImlzTWVyZ2VcIik7XG52YXIgUGFja2V0ID0gXCJQYWNrZXRcIjtcbmZ1bmN0aW9uIGlzUGFja2V0KGl0ZW0pIHtcbiAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBQYWNrZXQpO1xufVxuX19uYW1lKGlzUGFja2V0LCBcImlzUGFja2V0XCIpO1xudmFyIFBhY2tldEJsb2NrID0gXCJQYWNrZXRCbG9ja1wiO1xuZnVuY3Rpb24gaXNQYWNrZXRCbG9jayhpdGVtKSB7XG4gIHJldHVybiByZWZsZWN0aW9uLmlzSW5zdGFuY2UoaXRlbSwgUGFja2V0QmxvY2spO1xufVxuX19uYW1lKGlzUGFja2V0QmxvY2ssIFwiaXNQYWNrZXRCbG9ja1wiKTtcbnZhciBQaWUgPSBcIlBpZVwiO1xuZnVuY3Rpb24gaXNQaWUoaXRlbSkge1xuICByZXR1cm4gcmVmbGVjdGlvbi5pc0luc3RhbmNlKGl0ZW0sIFBpZSk7XG59XG5fX25hbWUoaXNQaWUsIFwiaXNQaWVcIik7XG52YXIgUGllU2VjdGlvbiA9IFwiUGllU2VjdGlvblwiO1xuZnVuY3Rpb24gaXNQaWVTZWN0aW9uKGl0ZW0pIHtcbiAgcmV0dXJuIHJlZmxlY3Rpb24uaXNJbnN0YW5jZShpdGVtLCBQaWVTZWN0aW9uKTtcbn1cbl9fbmFtZShpc1BpZVNlY3Rpb24sIFwiaXNQaWVTZWN0aW9uXCIpO1xudmFyIERpcmVjdGlvbiA9IFwiRGlyZWN0aW9uXCI7XG52YXIgTWVybWFpZEFzdFJlZmxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIEFic3RyYWN0QXN0UmVmbGVjdGlvbiB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiTWVybWFpZEFzdFJlZmxlY3Rpb25cIik7XG4gIH1cbiAgZ2V0QWxsVHlwZXMoKSB7XG4gICAgcmV0dXJuIFtcIkFyY2hpdGVjdHVyZVwiLCBcIkJyYW5jaFwiLCBcIkNoZWNrb3V0XCIsIFwiQ2hlcnJ5UGlja2luZ1wiLCBcIkNvbW1pdFwiLCBcIkNvbW1vblwiLCBcIkRpcmVjdGlvblwiLCBcIkVkZ2VcIiwgXCJHaXRHcmFwaFwiLCBcIkdyb3VwXCIsIFwiSW5mb1wiLCBcIkp1bmN0aW9uXCIsIFwiTWVyZ2VcIiwgXCJQYWNrZXRcIiwgXCJQYWNrZXRCbG9ja1wiLCBcIlBpZVwiLCBcIlBpZVNlY3Rpb25cIiwgXCJTZXJ2aWNlXCIsIFwiU3RhdGVtZW50XCJdO1xuICB9XG4gIGNvbXB1dGVJc1N1YnR5cGUoc3VidHlwZSwgc3VwZXJ0eXBlKSB7XG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIEJyYW5jaDpcbiAgICAgIGNhc2UgQ2hlY2tvdXQ6XG4gICAgICBjYXNlIENoZXJyeVBpY2tpbmc6XG4gICAgICBjYXNlIENvbW1pdDpcbiAgICAgIGNhc2UgTWVyZ2U6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFN0YXRlbWVudCwgc3VwZXJ0eXBlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRGlyZWN0aW9uOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VidHlwZShHaXRHcmFwaCwgc3VwZXJ0eXBlKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRSZWZlcmVuY2VUeXBlKHJlZkluZm8pIHtcbiAgICBjb25zdCByZWZlcmVuY2VJZCA9IGAke3JlZkluZm8uY29udGFpbmVyLiR0eXBlfToke3JlZkluZm8ucHJvcGVydHl9YDtcbiAgICBzd2l0Y2ggKHJlZmVyZW5jZUlkKSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWZlcmVuY2VJZH0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRUeXBlTWV0YURhdGEodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIkFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJBcmNoaXRlY3R1cmVcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjRGVzY3JcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFjY1RpdGxlXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJlZGdlc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZ3JvdXBzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJqdW5jdGlvbnNcIiwgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInNlcnZpY2VzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQnJhbmNoXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkJyYW5jaFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJvcmRlclwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQ2hlY2tvdXRcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiQ2hlY2tvdXRcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYnJhbmNoXCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDaGVycnlQaWNraW5nXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkNoZXJyeVBpY2tpbmdcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInBhcmVudFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGFnc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQ29tbWl0XCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkNvbW1pdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibWVzc2FnZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGFnc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidHlwZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiQ29tbW9uXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkNvbW1vblwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NEZXNjclwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjVGl0bGVcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInRpdGxlXCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJFZGdlXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkVkZ2VcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwibGhzRGlyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJsaHNHcm91cFwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibGhzSWRcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImxoc0ludG9cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInJoc0RpclwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwicmhzR3JvdXBcIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInJoc0lkXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJyaHNJbnRvXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiR2l0R3JhcGhcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR2l0R3JhcGhcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjRGVzY3JcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFjY1RpdGxlXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJzdGF0ZW1lbnRzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiR3JvdXBcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR3JvdXBcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiaWNvblwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImluXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiSW5mb1wiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJJbmZvXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFjY0Rlc2NyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NUaXRsZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGl0bGVcIiB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcIkp1bmN0aW9uXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkp1bmN0aW9uXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJpblwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiTWVyZ2VcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiTWVyZ2VcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYnJhbmNoXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGFnc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidHlwZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiUGFja2V0XCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIlBhY2tldFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NEZXNjclwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiYWNjVGl0bGVcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImJsb2Nrc1wiLCBkZWZhdWx0VmFsdWU6IFtdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwidGl0bGVcIiB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcIlBhY2tldEJsb2NrXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIlBhY2tldEJsb2NrXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImVuZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibGFiZWxcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInN0YXJ0XCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJQaWVcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiUGllXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFjY0Rlc2NyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NUaXRsZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic2VjdGlvbnNcIiwgZGVmYXVsdFZhbHVlOiBbXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInNob3dEYXRhXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiUGllU2VjdGlvblwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJQaWVTZWN0aW9uXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImxhYmVsXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ2YWx1ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwiU2VydmljZVwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJTZXJ2aWNlXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImljb25cIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImljb25UZXh0XCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJpZFwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaW5cIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInRpdGxlXCIgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJEaXJlY3Rpb25cIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiRGlyZWN0aW9uXCIsXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFjY0Rlc2NyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhY2NUaXRsZVwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZGlyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJzdGF0ZW1lbnRzXCIsIGRlZmF1bHRWYWx1ZTogW10gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ0aXRsZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdHlwZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbnZhciByZWZsZWN0aW9uID0gbmV3IE1lcm1haWRBc3RSZWZsZWN0aW9uKCk7XG5cbi8vIHNyYy9sYW5ndWFnZS9nZW5lcmF0ZWQvZ3JhbW1hci50c1xuaW1wb3J0IHsgbG9hZEdyYW1tYXJGcm9tSnNvbiB9IGZyb20gXCJsYW5naXVtXCI7XG52YXIgbG9hZGVkSW5mb0dyYW1tYXI7XG52YXIgSW5mb0dyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZEluZm9HcmFtbWFyID8/IChsb2FkZWRJbmZvR3JhbW1hciA9IGxvYWRHcmFtbWFyRnJvbUpzb24oJ3tcIiR0eXBlXCI6XCJHcmFtbWFyXCIsXCJpc0RlY2xhcmVkXCI6dHJ1ZSxcIm5hbWVcIjpcIkluZm9cIixcImltcG9ydHNcIjpbXSxcInJ1bGVzXCI6W3tcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJJbmZvXCIsXCJlbnRyeVwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiaW5mb1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJzaG93SW5mb1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XSxcImNhcmRpbmFsaXR5XCI6XCI/XCJ9LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMVwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIj9cIn1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJUaXRsZUFuZEFjY2Vzc2liaWxpdGllc1wiLFwiZnJhZ21lbnRcIjp0cnVlLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY0Rlc2NyXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJhY2NUaXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXX1dLFwiY2FyZGluYWxpdHlcIjpcIitcIn0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiRU9MXCIsXCJmcmFnbWVudFwiOnRydWUsXCJkYXRhVHlwZVwiOlwic3RyaW5nXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AzXCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSx7XCIkdHlwZVwiOlwiRW5kT2ZGaWxlXCJ9XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJORVdMSU5FXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvXFxcXFxcXFxyP1xcXFxcXFxcbi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFDQ19ERVNDUlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSphY2NEZXNjcig/OltcXFxcXFxcXHQgXSo6KFteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopfFxcXFxcXFxccyp7KFtefV0qKX0pL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX1RJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY1RpdGxlW1xcXFxcXFxcdCBdKjooPzpbXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXlxcXFxcXFxcblxcXFxcXFxccl0qKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIlRJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKnRpdGxlKD86W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKnwpL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIldISVRFU1BBQ0VcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0rL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJZQU1MXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvLS0tW1xcXFxcXFxcdCBdKlxcXFxcXFxccj9cXFxcXFxcXG4oPzpbXFxcXFxcXFxTXFxcXFxcXFxzXSo/XFxcXFxcXFxyP1xcXFxcXFxcbik/LS0tKD86XFxcXFxcXFxyP1xcXFxcXFxcbnwoPyFcXFxcXFxcXFMpKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiRElSRUNUSVZFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUle1tcXFxcXFxcXFNcXFxcXFxcXHNdKj99JSUoPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJTSU5HTEVfTElORV9DT01NRU5UXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUlW15cXFxcXFxcXG5cXFxcXFxcXHJdKi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfV0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcImludGVyZmFjZXNcIjpbe1wiJHR5cGVcIjpcIkludGVyZmFjZVwiLFwibmFtZVwiOlwiQ29tbW9uXCIsXCJhdHRyaWJ1dGVzXCI6W3tcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NEZXNjclwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY1RpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwidGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19XSxcInN1cGVyVHlwZXNcIjpbXX1dLFwidHlwZXNcIjpbXSxcInVzZWRHcmFtbWFyc1wiOltdfScpKSwgXCJJbmZvR3JhbW1hclwiKTtcbnZhciBsb2FkZWRQYWNrZXRHcmFtbWFyO1xudmFyIFBhY2tldEdyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZFBhY2tldEdyYW1tYXIgPz8gKGxvYWRlZFBhY2tldEdyYW1tYXIgPSBsb2FkR3JhbW1hckZyb21Kc29uKGB7XCIkdHlwZVwiOlwiR3JhbW1hclwiLFwiaXNEZWNsYXJlZFwiOnRydWUsXCJuYW1lXCI6XCJQYWNrZXRcIixcImltcG9ydHNcIjpbXSxcInJ1bGVzXCI6W3tcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQYWNrZXRcIixcImVudHJ5XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJwYWNrZXQtYmV0YVwifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A0XCJ9LFwiYXJndW1lbnRzXCI6W119LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJibG9ja3NcIixcIm9wZXJhdG9yXCI6XCIrPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A2XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYmxvY2tzXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIitcIn1dfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQYWNrZXRCbG9ja1wiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInN0YXJ0XCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCItXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJlbmRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfX1dLFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJsYWJlbFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AzXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDVcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJJTlRcIixcInR5cGVcIjp7XCIkdHlwZVwiOlwiUmV0dXJuVHlwZVwiLFwibmFtZVwiOlwibnVtYmVyXCJ9LFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiLzB8WzEtOV1bMC05XSovXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJTVFJJTkdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXCJbXlxcXFxcIl0qXFxcXFwifCdbXiddKicvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXNcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJhY2NEZXNjclwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A3XCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYWNjVGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOFwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInRpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDlcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119XSxcImNhcmRpbmFsaXR5XCI6XCIrXCJ9LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIkVPTFwiLFwiZnJhZ21lbnRcIjp0cnVlLFwiZGF0YVR5cGVcIjpcInN0cmluZ1wiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIitcIn0se1wiJHR5cGVcIjpcIkVuZE9mRmlsZVwifV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiTkVXTElORVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1xcXFxcXFxccj9cXFxcXFxcXG4vXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBQ0NfREVTQ1JcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXFxcXFx0IF0qOihbXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXlxcXFxcXFxcblxcXFxcXFxccl0qKXxcXFxcXFxcXHMqeyhbXn1dKil9KS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFDQ19USVRMRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSphY2NUaXRsZVtcXFxcXFxcXHQgXSo6KD86W15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W15cXFxcXFxcXG5cXFxcXFxcXHJdKikvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJUSVRMRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSp0aXRsZSg/OltcXFxcXFxcXHQgXVteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFtcXFxcXFxcXHQgXVteXFxcXFxcXFxuXFxcXFxcXFxyXSp8KS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJXSElURVNQQUNFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKy9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiWUFNTFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiLy0tLVtcXFxcXFxcXHQgXSpcXFxcXFxcXHI/XFxcXFxcXFxuKD86W1xcXFxcXFxcU1xcXFxcXFxcc10qP1xcXFxcXFxccj9cXFxcXFxcXG4pPy0tLSg/OlxcXFxcXFxccj9cXFxcXFxcXG58KD8hXFxcXFxcXFxTKSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIkRJUkVDVElWRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSolJXtbXFxcXFxcXFxTXFxcXFxcXFxzXSo/fSUlKD86XFxcXFxcXFxyP1xcXFxcXFxcbnwoPyFcXFxcXFxcXFMpKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiU0lOR0xFX0xJTkVfQ09NTUVOVFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSolJVteXFxcXFxcXFxuXFxcXFxcXFxyXSovXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX1dLFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJpbnRlcmZhY2VzXCI6W3tcIiR0eXBlXCI6XCJJbnRlcmZhY2VcIixcIm5hbWVcIjpcIkNvbW1vblwiLFwiYXR0cmlidXRlc1wiOlt7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwiYWNjRGVzY3JcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19LHtcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NUaXRsZVwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcInRpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fV0sXCJzdXBlclR5cGVzXCI6W119XSxcInR5cGVzXCI6W10sXCJ1c2VkR3JhbW1hcnNcIjpbXX1gKSksIFwiUGFja2V0R3JhbW1hclwiKTtcbnZhciBsb2FkZWRQaWVHcmFtbWFyO1xudmFyIFBpZUdyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZFBpZUdyYW1tYXIgPz8gKGxvYWRlZFBpZUdyYW1tYXIgPSBsb2FkR3JhbW1hckZyb21Kc29uKCd7XCIkdHlwZVwiOlwiR3JhbW1hclwiLFwiaXNEZWNsYXJlZFwiOnRydWUsXCJuYW1lXCI6XCJQaWVcIixcImltcG9ydHNcIjpbXSxcInJ1bGVzXCI6W3tcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQaWVcIixcImVudHJ5XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJwaWVcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInNob3dEYXRhXCIsXCJvcGVyYXRvclwiOlwiPz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJzaG93RGF0YVwifSxcImNhcmRpbmFsaXR5XCI6XCI/XCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A2XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInNlY3Rpb25zXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIipcIn1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIitcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInNlY3Rpb25zXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIitcIn1dfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJQaWVTZWN0aW9uXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibGFiZWxcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ2YWx1ZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AzXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDVcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJQSUVfU0VDVElPTl9MQUJFTFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1xcXFxcIlteXFxcXFwiXStcXFxcXCIvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJQSUVfU0VDVElPTl9WQUxVRVwiLFwidHlwZVwiOntcIiR0eXBlXCI6XCJSZXR1cm5UeXBlXCIsXCJuYW1lXCI6XCJudW1iZXJcIn0sXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvKDB8WzEtOV1bMC05XSopKFxcXFxcXFxcLlswLTldKyk/L1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzXCIsXCJmcmFnbWVudFwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYWNjRGVzY3JcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAN1wifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY1RpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDhcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0aXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A5XCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNANVwifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFT0xcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRhdGFUeXBlXCI6XCJzdHJpbmdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIrXCJ9LHtcIiR0eXBlXCI6XCJFbmRPZkZpbGVcIn1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIk5FV0xJTkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXHI/XFxcXFxcXFxuL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX0RFU0NSXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFxcXFxcdCBdKjooW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W15cXFxcXFxcXG5cXFxcXFxcXHJdKil8XFxcXFxcXFxzKnsoW159XSopfSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBQ0NfVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qYWNjVGl0bGVbXFxcXFxcXFx0IF0qOig/OlteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qdGl0bGUoPzpbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qfCkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiV0hJVEVTUEFDRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSsvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIllBTUxcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi8tLS1bXFxcXFxcXFx0IF0qXFxcXFxcXFxyP1xcXFxcXFxcbig/OltcXFxcXFxcXFNcXFxcXFxcXHNdKj9cXFxcXFxcXHI/XFxcXFxcXFxuKT8tLS0oPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJESVJFQ1RJVkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSV7W1xcXFxcXFxcU1xcXFxcXFxcc10qP30lJSg/OlxcXFxcXFxccj9cXFxcXFxcXG58KD8hXFxcXFxcXFxTKSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIlNJTkdMRV9MSU5FX0NPTU1FTlRcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSVbXlxcXFxcXFxcblxcXFxcXFxccl0qL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9XSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwiaW50ZXJmYWNlc1wiOlt7XCIkdHlwZVwiOlwiSW50ZXJmYWNlXCIsXCJuYW1lXCI6XCJDb21tb25cIixcImF0dHJpYnV0ZXNcIjpbe1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY0Rlc2NyXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwiYWNjVGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19LHtcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJ0aXRsZVwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX1dLFwic3VwZXJUeXBlc1wiOltdfV0sXCJ0eXBlc1wiOltdLFwidXNlZEdyYW1tYXJzXCI6W119JykpLCBcIlBpZUdyYW1tYXJcIik7XG52YXIgbG9hZGVkQXJjaGl0ZWN0dXJlR3JhbW1hcjtcbnZhciBBcmNoaXRlY3R1cmVHcmFtbWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBsb2FkZWRBcmNoaXRlY3R1cmVHcmFtbWFyID8/IChsb2FkZWRBcmNoaXRlY3R1cmVHcmFtbWFyID0gbG9hZEdyYW1tYXJGcm9tSnNvbigne1wiJHR5cGVcIjpcIkdyYW1tYXJcIixcImlzRGVjbGFyZWRcIjp0cnVlLFwibmFtZVwiOlwiQXJjaGl0ZWN0dXJlXCIsXCJpbXBvcnRzXCI6W10sXCJydWxlc1wiOlt7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQXJjaGl0ZWN0dXJlXCIsXCJlbnRyeVwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE4XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImFyY2hpdGVjdHVyZS1iZXRhXCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOFwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxNlwifSxcImFyZ3VtZW50c1wiOltdfV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOFwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxXCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMThcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9XX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJTdGF0ZW1lbnRcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiZ3JvdXBzXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwic2VydmljZXNcIixcIm9wZXJhdG9yXCI6XCIrPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDZcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJqdW5jdGlvbnNcIixcIm9wZXJhdG9yXCI6XCIrPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDdcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJlZGdlc1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJMZWZ0UG9ydFwiLFwiZnJhZ21lbnRcIjp0cnVlLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJsaHNEaXJcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOVwifSxcImFyZ3VtZW50c1wiOltdfX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJSaWdodFBvcnRcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJyaHNEaXJcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAOVwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCI6XCJ9XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQXJyb3dcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibGhzSW50b1wiLFwib3BlcmF0b3JcIjpcIj89XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTVcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIi0tXCJ9LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCItXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0aXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxM1wifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCItXCJ9XX1dfSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwicmhzSW50b1wiLFwib3BlcmF0b3JcIjpcIj89XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTVcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDNcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJHcm91cFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJncm91cFwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiaWRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTBcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpY29uXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEyXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInRpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEzXCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImluXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpblwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMFwifSxcImFyZ3VtZW50c1wiOltdfX1dLFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJTZXJ2aWNlXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInNlcnZpY2VcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImlkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEwXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiaWNvblRleHRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTFcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpY29uXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEyXCJ9LFwiYXJndW1lbnRzXCI6W119fV0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTNcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiaW5cIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImluXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEwXCJ9LFwiYXJndW1lbnRzXCI6W119fV0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE3XCJ9LFwiYXJndW1lbnRzXCI6W119XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIkp1bmN0aW9uXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImp1bmN0aW9uXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpZFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMFwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImluXCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpblwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMFwifSxcImFyZ3VtZW50c1wiOltdfX1dLFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFZGdlXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibGhzSWRcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTBcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJsaHNHcm91cFwiLFwib3BlcmF0b3JcIjpcIj89XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTRcIn0sXCJhcmd1bWVudHNcIjpbXX0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInJoc0lkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDEwXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwicmhzR3JvdXBcIixcIm9wZXJhdG9yXCI6XCI/PVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE0XCJ9LFwiYXJndW1lbnRzXCI6W119LFwiY2FyZGluYWxpdHlcIjpcIj9cIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSUk9XX0RJUkVDVElPTlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJUZXJtaW5hbEFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlRlcm1pbmFsQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiVGVybWluYWxBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJDaGFyYWN0ZXJSYW5nZVwiLFwibGVmdFwiOntcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiTFwifX0se1wiJHR5cGVcIjpcIkNoYXJhY3RlclJhbmdlXCIsXCJsZWZ0XCI6e1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJSXCJ9fV19LHtcIiR0eXBlXCI6XCJDaGFyYWN0ZXJSYW5nZVwiLFwibGVmdFwiOntcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiVFwifX1dfSx7XCIkdHlwZVwiOlwiQ2hhcmFjdGVyUmFuZ2VcIixcImxlZnRcIjp7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIkJcIn19XX0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSQ0hfSURcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx3XSsvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBUkNIX1RFWFRfSUNPTlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1xcXFxcXFxcKFxcXFxcIlteXFxcXFwiXStcXFxcXCJcXFxcXFxcXCkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBUkNIX0lDT05cIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXChbXFxcXFxcXFx3LTpdK1xcXFxcXFxcKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSQ0hfVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXFtbXFxcXFxcXFx3IF0rXFxcXFxcXFxdL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQVJST1dfR1JPVVBcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXHtncm91cFxcXFxcXFxcfS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFSUk9XX0lOVE9cIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi88fD4vXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXNcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJhY2NEZXNjclwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOVwifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY1RpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119fSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGl0bGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMjFcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxN1wifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFT0xcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRhdGFUeXBlXCI6XCJzdHJpbmdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE4XCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSx7XCIkdHlwZVwiOlwiRW5kT2ZGaWxlXCJ9XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJORVdMSU5FXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvXFxcXFxcXFxyP1xcXFxcXFxcbi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIkFDQ19ERVNDUlwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSphY2NEZXNjcig/OltcXFxcXFxcXHQgXSo6KFteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopfFxcXFxcXFxccyp7KFtefV0qKX0pL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX1RJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY1RpdGxlW1xcXFxcXFxcdCBdKjooPzpbXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXlxcXFxcXFxcblxcXFxcXFxccl0qKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIlRJVExFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKnRpdGxlKD86W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W1xcXFxcXFxcdCBdW15cXFxcXFxcXG5cXFxcXFxcXHJdKnwpL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIldISVRFU1BBQ0VcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0rL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJZQU1MXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvLS0tW1xcXFxcXFxcdCBdKlxcXFxcXFxccj9cXFxcXFxcXG4oPzpbXFxcXFxcXFxTXFxcXFxcXFxzXSo/XFxcXFxcXFxyP1xcXFxcXFxcbik/LS0tKD86XFxcXFxcXFxyP1xcXFxcXFxcbnwoPyFcXFxcXFxcXFMpKS9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiRElSRUNUSVZFXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUle1tcXFxcXFxcXFNcXFxcXFxcXHNdKj99JSUoPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJTSU5HTEVfTElORV9DT01NRU5UXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKiUlW15cXFxcXFxcXG5cXFxcXFxcXHJdKi9cIn0sXCJmcmFnbWVudFwiOmZhbHNlfV0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcImludGVyZmFjZXNcIjpbe1wiJHR5cGVcIjpcIkludGVyZmFjZVwiLFwibmFtZVwiOlwiQ29tbW9uXCIsXCJhdHRyaWJ1dGVzXCI6W3tcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NEZXNjclwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY1RpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwidGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19XSxcInN1cGVyVHlwZXNcIjpbXX1dLFwidHlwZXNcIjpbXSxcInVzZWRHcmFtbWFyc1wiOltdfScpKSwgXCJBcmNoaXRlY3R1cmVHcmFtbWFyXCIpO1xudmFyIGxvYWRlZEdpdEdyYXBoR3JhbW1hcjtcbnZhciBHaXRHcmFwaEdyYW1tYXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGxvYWRlZEdpdEdyYXBoR3JhbW1hciA/PyAobG9hZGVkR2l0R3JhcGhHcmFtbWFyID0gbG9hZEdyYW1tYXJGcm9tSnNvbihge1wiJHR5cGVcIjpcIkdyYW1tYXJcIixcImlzRGVjbGFyZWRcIjp0cnVlLFwibmFtZVwiOlwiR2l0R3JhcGhcIixcImludGVyZmFjZXNcIjpbe1wiJHR5cGVcIjpcIkludGVyZmFjZVwiLFwibmFtZVwiOlwiQ29tbW9uXCIsXCJhdHRyaWJ1dGVzXCI6W3tcIiR0eXBlXCI6XCJUeXBlQXR0cmlidXRlXCIsXCJuYW1lXCI6XCJhY2NEZXNjclwiLFwiaXNPcHRpb25hbFwiOnRydWUsXCJ0eXBlXCI6e1wiJHR5cGVcIjpcIlNpbXBsZVR5cGVcIixcInByaW1pdGl2ZVR5cGVcIjpcInN0cmluZ1wifX0se1wiJHR5cGVcIjpcIlR5cGVBdHRyaWJ1dGVcIixcIm5hbWVcIjpcImFjY1RpdGxlXCIsXCJpc09wdGlvbmFsXCI6dHJ1ZSxcInR5cGVcIjp7XCIkdHlwZVwiOlwiU2ltcGxlVHlwZVwiLFwicHJpbWl0aXZlVHlwZVwiOlwic3RyaW5nXCJ9fSx7XCIkdHlwZVwiOlwiVHlwZUF0dHJpYnV0ZVwiLFwibmFtZVwiOlwidGl0bGVcIixcImlzT3B0aW9uYWxcIjp0cnVlLFwidHlwZVwiOntcIiR0eXBlXCI6XCJTaW1wbGVUeXBlXCIsXCJwcmltaXRpdmVUeXBlXCI6XCJzdHJpbmdcIn19XSxcInN1cGVyVHlwZXNcIjpbXX1dLFwicnVsZXNcIjpbe1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzXCIsXCJmcmFnbWVudFwiOnRydWUsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwiYWNjRGVzY3JcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAM1wifSxcImFyZ3VtZW50c1wiOltdfX0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImFjY1RpdGxlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDRcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0aXRsZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0A1XCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMVwifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiK1wifSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJFT0xcIixcImZyYWdtZW50XCI6dHJ1ZSxcImRhdGFUeXBlXCI6XCJzdHJpbmdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIrXCJ9LHtcIiR0eXBlXCI6XCJFbmRPZkZpbGVcIn1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcIm5hbWVcIjpcIk5FV0xJTkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXFxcXHI/XFxcXFxcXFxuL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiQUNDX0RFU0NSXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvW1xcXFxcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFxcXFxcdCBdKjooW15cXFxcXFxcXG5cXFxcXFxcXHJdKj8oPz0lJSl8W15cXFxcXFxcXG5cXFxcXFxcXHJdKil8XFxcXFxcXFxzKnsoW159XSopfSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJBQ0NfVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qYWNjVGl0bGVbXFxcXFxcXFx0IF0qOig/OlteXFxcXFxcXFxuXFxcXFxcXFxyXSo/KD89JSUpfFteXFxcXFxcXFxuXFxcXFxcXFxyXSopL1wifSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5cIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwibmFtZVwiOlwiVElUTEVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qdGl0bGUoPzpbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qPyg/PSUlKXxbXFxcXFxcXFx0IF1bXlxcXFxcXFxcblxcXFxcXFxccl0qfCkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJoaWRkZW5cIjp0cnVlLFwibmFtZVwiOlwiV0hJVEVTUEFDRVwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1tcXFxcXFxcXHQgXSsvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIllBTUxcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi8tLS1bXFxcXFxcXFx0IF0qXFxcXFxcXFxyP1xcXFxcXFxcbig/OltcXFxcXFxcXFNcXFxcXFxcXHNdKj9cXFxcXFxcXHI/XFxcXFxcXFxuKT8tLS0oPzpcXFxcXFxcXHI/XFxcXFxcXFxufCg/IVxcXFxcXFxcUykpL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJUZXJtaW5hbFJ1bGVcIixcImhpZGRlblwiOnRydWUsXCJuYW1lXCI6XCJESVJFQ1RJVkVcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSV7W1xcXFxcXFxcU1xcXFxcXFxcc10qP30lJSg/OlxcXFxcXFxccj9cXFxcXFxcXG58KD8hXFxcXFxcXFxTKSkvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlRlcm1pbmFsUnVsZVwiLFwiaGlkZGVuXCI6dHJ1ZSxcIm5hbWVcIjpcIlNJTkdMRV9MSU5FX0NPTU1FTlRcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9bXFxcXFxcXFx0IF0qJSVbXlxcXFxcXFxcblxcXFxcXFxccl0qL1wifSxcImZyYWdtZW50XCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJHaXRHcmFwaFwiLFwiZW50cnlcIjp0cnVlLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyXCJ9LFwiYXJndW1lbnRzXCI6W10sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImdpdEdyYXBoXCJ9LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJnaXRHcmFwaFwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIjpcIn1dfSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImdpdEdyYXBoOlwifSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiZ2l0R3JhcGhcIn0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxMlwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIjpcIn1dfV19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdLFwiY2FyZGluYWxpdHlcIjpcIipcIn0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDJcIn0sXCJhcmd1bWVudHNcIjpbXSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMFwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwic3RhdGVtZW50c1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTFcIn0sXCJhcmd1bWVudHNcIjpbXX19LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMlwifSxcImFyZ3VtZW50c1wiOltdfV0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifV19XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiU3RhdGVtZW50XCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxM1wifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE0XCJ9LFwiYXJndW1lbnRzXCI6W119LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTVcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxNlwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE3XCJ9LFwiYXJndW1lbnRzXCI6W119XX0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJlbnRyeVwiOmZhbHNlLFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblRva2Vuc1wiOltdLFwicGFyYW1ldGVyc1wiOltdLFwid2lsZGNhcmRcIjpmYWxzZX0se1wiJHR5cGVcIjpcIlBhcnNlclJ1bGVcIixcIm5hbWVcIjpcIkRpcmVjdGlvblwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJkaXJcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiTFJcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJUQlwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIkJUXCJ9XX19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJDb21taXRcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiY29tbWl0XCJ9LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJpZDpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImlkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJtc2c6XCIsXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibWVzc2FnZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwidGFnOlwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGFnc1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMjBcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInR5cGU6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0eXBlXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIk5PUk1BTFwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIlJFVkVSU0VcIn0se1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJISUdITElHSFRcIn1dfX1dfV0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQnJhbmNoXCIsXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcImJyYW5jaFwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwibmFtZVwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOVwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119XX19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJvcmRlcjpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcIm9yZGVyXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDE4XCJ9LFwiYXJndW1lbnRzXCI6W119fV0sXCJjYXJkaW5hbGl0eVwiOlwiP1wifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiTWVyZ2VcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwibWVyZ2VcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImJyYW5jaFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AxOVwifSxcImFyZ3VtZW50c1wiOltdfSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119XX19LHtcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJpZDpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcImlkXCIsXCJvcGVyYXRvclwiOlwiPVwiLFwidGVybWluYWxcIjp7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDIwXCJ9LFwiYXJndW1lbnRzXCI6W119fV19LHtcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJ0YWc6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJ0YWdzXCIsXCJvcGVyYXRvclwiOlwiKz1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwidHlwZTpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInR5cGVcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiTk9STUFMXCJ9LHtcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiUkVWRVJTRVwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcIkhJR0hMSUdIVFwifV19fV19XSxcImNhcmRpbmFsaXR5XCI6XCIqXCJ9LHtcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMVwifSxcImFyZ3VtZW50c1wiOltdfV19LFwiZGVmaW5lc0hpZGRlblRva2Vuc1wiOmZhbHNlLFwiZW50cnlcIjpmYWxzZSxcImZyYWdtZW50XCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcInBhcmFtZXRlcnNcIjpbXSxcIndpbGRjYXJkXCI6ZmFsc2V9LHtcIiR0eXBlXCI6XCJQYXJzZXJSdWxlXCIsXCJuYW1lXCI6XCJDaGVja291dFwiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIkFsdGVybmF0aXZlc1wiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJjaGVja291dFwifSx7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInN3aXRjaFwifV19LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJicmFuY2hcIixcIm9wZXJhdG9yXCI6XCI9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJBbHRlcm5hdGl2ZXNcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMTlcIn0sXCJhcmd1bWVudHNcIjpbXX0se1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfV19fSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiUGFyc2VyUnVsZVwiLFwibmFtZVwiOlwiQ2hlcnJ5UGlja2luZ1wiLFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJHcm91cFwiLFwiZWxlbWVudHNcIjpbe1wiJHR5cGVcIjpcIktleXdvcmRcIixcInZhbHVlXCI6XCJjaGVycnktcGlja1wifSx7XCIkdHlwZVwiOlwiQWx0ZXJuYXRpdmVzXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwiaWQ6XCJ9LHtcIiR0eXBlXCI6XCJBc3NpZ25tZW50XCIsXCJmZWF0dXJlXCI6XCJpZFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfSx7XCIkdHlwZVwiOlwiR3JvdXBcIixcImVsZW1lbnRzXCI6W3tcIiR0eXBlXCI6XCJLZXl3b3JkXCIsXCJ2YWx1ZVwiOlwidGFnOlwifSx7XCIkdHlwZVwiOlwiQXNzaWdubWVudFwiLFwiZmVhdHVyZVwiOlwidGFnc1wiLFwib3BlcmF0b3JcIjpcIis9XCIsXCJ0ZXJtaW5hbFwiOntcIiR0eXBlXCI6XCJSdWxlQ2FsbFwiLFwicnVsZVwiOntcIiRyZWZcIjpcIiMvcnVsZXNAMjBcIn0sXCJhcmd1bWVudHNcIjpbXX19XX0se1wiJHR5cGVcIjpcIkdyb3VwXCIsXCJlbGVtZW50c1wiOlt7XCIkdHlwZVwiOlwiS2V5d29yZFwiLFwidmFsdWVcIjpcInBhcmVudDpcIn0se1wiJHR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImZlYXR1cmVcIjpcInBhcmVudFwiLFwib3BlcmF0b3JcIjpcIj1cIixcInRlcm1pbmFsXCI6e1wiJHR5cGVcIjpcIlJ1bGVDYWxsXCIsXCJydWxlXCI6e1wiJHJlZlwiOlwiIy9ydWxlc0AyMFwifSxcImFyZ3VtZW50c1wiOltdfX1dfV0sXCJjYXJkaW5hbGl0eVwiOlwiKlwifSx7XCIkdHlwZVwiOlwiUnVsZUNhbGxcIixcInJ1bGVcIjp7XCIkcmVmXCI6XCIjL3J1bGVzQDFcIn0sXCJhcmd1bWVudHNcIjpbXX1dfSxcImRlZmluZXNIaWRkZW5Ub2tlbnNcIjpmYWxzZSxcImVudHJ5XCI6ZmFsc2UsXCJmcmFnbWVudFwiOmZhbHNlLFwiaGlkZGVuVG9rZW5zXCI6W10sXCJwYXJhbWV0ZXJzXCI6W10sXCJ3aWxkY2FyZFwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJJTlRcIixcInR5cGVcIjp7XCIkdHlwZVwiOlwiUmV0dXJuVHlwZVwiLFwibmFtZVwiOlwibnVtYmVyXCJ9LFwiZGVmaW5pdGlvblwiOntcIiR0eXBlXCI6XCJSZWdleFRva2VuXCIsXCJyZWdleFwiOlwiL1swLTldKyg/PVxcXFxcXFxccykvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJJRFwiLFwidHlwZVwiOntcIiR0eXBlXCI6XCJSZXR1cm5UeXBlXCIsXCJuYW1lXCI6XCJzdHJpbmdcIn0sXCJkZWZpbml0aW9uXCI6e1wiJHR5cGVcIjpcIlJlZ2V4VG9rZW5cIixcInJlZ2V4XCI6XCIvXFxcXFxcXFx3KFstXFxcXFxcXFwuL1xcXFxcXFxcd10qWy1cXFxcXFxcXHddKT8vXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfSx7XCIkdHlwZVwiOlwiVGVybWluYWxSdWxlXCIsXCJuYW1lXCI6XCJTVFJJTkdcIixcImRlZmluaXRpb25cIjp7XCIkdHlwZVwiOlwiUmVnZXhUb2tlblwiLFwicmVnZXhcIjpcIi9cXFxcXCJbXlxcXFxcIl0qXFxcXFwifCdbXiddKicvXCJ9LFwiZnJhZ21lbnRcIjpmYWxzZSxcImhpZGRlblwiOmZhbHNlfV0sXCJkZWZpbmVzSGlkZGVuVG9rZW5zXCI6ZmFsc2UsXCJoaWRkZW5Ub2tlbnNcIjpbXSxcImltcG9ydHNcIjpbXSxcInR5cGVzXCI6W10sXCJ1c2VkR3JhbW1hcnNcIjpbXX1gKSksIFwiR2l0R3JhcGhHcmFtbWFyXCIpO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvZ2VuZXJhdGVkL21vZHVsZS50c1xudmFyIEluZm9MYW5ndWFnZU1ldGFEYXRhID0ge1xuICBsYW5ndWFnZUlkOiBcImluZm9cIixcbiAgZmlsZUV4dGVuc2lvbnM6IFtcIi5tbWRcIiwgXCIubWVybWFpZFwiXSxcbiAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZVxufTtcbnZhciBQYWNrZXRMYW5ndWFnZU1ldGFEYXRhID0ge1xuICBsYW5ndWFnZUlkOiBcInBhY2tldFwiLFxuICBmaWxlRXh0ZW5zaW9uczogW1wiLm1tZFwiLCBcIi5tZXJtYWlkXCJdLFxuICBjYXNlSW5zZW5zaXRpdmU6IGZhbHNlXG59O1xudmFyIFBpZUxhbmd1YWdlTWV0YURhdGEgPSB7XG4gIGxhbmd1YWdlSWQ6IFwicGllXCIsXG4gIGZpbGVFeHRlbnNpb25zOiBbXCIubW1kXCIsIFwiLm1lcm1haWRcIl0sXG4gIGNhc2VJbnNlbnNpdGl2ZTogZmFsc2Vcbn07XG52YXIgQXJjaGl0ZWN0dXJlTGFuZ3VhZ2VNZXRhRGF0YSA9IHtcbiAgbGFuZ3VhZ2VJZDogXCJhcmNoaXRlY3R1cmVcIixcbiAgZmlsZUV4dGVuc2lvbnM6IFtcIi5tbWRcIiwgXCIubWVybWFpZFwiXSxcbiAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZVxufTtcbnZhciBHaXRHcmFwaExhbmd1YWdlTWV0YURhdGEgPSB7XG4gIGxhbmd1YWdlSWQ6IFwiZ2l0R3JhcGhcIixcbiAgZmlsZUV4dGVuc2lvbnM6IFtcIi5tbWRcIiwgXCIubWVybWFpZFwiXSxcbiAgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZVxufTtcbnZhciBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlID0ge1xuICBBc3RSZWZsZWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IG5ldyBNZXJtYWlkQXN0UmVmbGVjdGlvbigpLCBcIkFzdFJlZmxlY3Rpb25cIilcbn07XG52YXIgSW5mb0dlbmVyYXRlZE1vZHVsZSA9IHtcbiAgR3JhbW1hcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBJbmZvR3JhbW1hcigpLCBcIkdyYW1tYXJcIiksXG4gIExhbmd1YWdlTWV0YURhdGE6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gSW5mb0xhbmd1YWdlTWV0YURhdGEsIFwiTGFuZ3VhZ2VNZXRhRGF0YVwiKSxcbiAgcGFyc2VyOiB7fVxufTtcbnZhciBQYWNrZXRHZW5lcmF0ZWRNb2R1bGUgPSB7XG4gIEdyYW1tYXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gUGFja2V0R3JhbW1hcigpLCBcIkdyYW1tYXJcIiksXG4gIExhbmd1YWdlTWV0YURhdGE6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gUGFja2V0TGFuZ3VhZ2VNZXRhRGF0YSwgXCJMYW5ndWFnZU1ldGFEYXRhXCIpLFxuICBwYXJzZXI6IHt9XG59O1xudmFyIFBpZUdlbmVyYXRlZE1vZHVsZSA9IHtcbiAgR3JhbW1hcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBQaWVHcmFtbWFyKCksIFwiR3JhbW1hclwiKSxcbiAgTGFuZ3VhZ2VNZXRhRGF0YTogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBQaWVMYW5ndWFnZU1ldGFEYXRhLCBcIkxhbmd1YWdlTWV0YURhdGFcIiksXG4gIHBhcnNlcjoge31cbn07XG52YXIgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlID0ge1xuICBHcmFtbWFyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IEFyY2hpdGVjdHVyZUdyYW1tYXIoKSwgXCJHcmFtbWFyXCIpLFxuICBMYW5ndWFnZU1ldGFEYXRhOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IEFyY2hpdGVjdHVyZUxhbmd1YWdlTWV0YURhdGEsIFwiTGFuZ3VhZ2VNZXRhRGF0YVwiKSxcbiAgcGFyc2VyOiB7fVxufTtcbnZhciBHaXRHcmFwaEdlbmVyYXRlZE1vZHVsZSA9IHtcbiAgR3JhbW1hcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBHaXRHcmFwaEdyYW1tYXIoKSwgXCJHcmFtbWFyXCIpLFxuICBMYW5ndWFnZU1ldGFEYXRhOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IEdpdEdyYXBoTGFuZ3VhZ2VNZXRhRGF0YSwgXCJMYW5ndWFnZU1ldGFEYXRhXCIpLFxuICBwYXJzZXI6IHt9XG59O1xuXG4vLyBzcmMvbGFuZ3VhZ2UvY29tbW9uL3ZhbHVlQ29udmVydGVyLnRzXG5pbXBvcnQgeyBEZWZhdWx0VmFsdWVDb252ZXJ0ZXIgfSBmcm9tIFwibGFuZ2l1bVwiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvY29tbW9uL21hdGNoZXIudHNcbnZhciBhY2Nlc3NpYmlsaXR5RGVzY3JSZWdleCA9IC9hY2NEZXNjcig/OltcXHQgXSo6KFteXFxuXFxyXSopfFxccyp7KFtefV0qKX0pLztcbnZhciBhY2Nlc3NpYmlsaXR5VGl0bGVSZWdleCA9IC9hY2NUaXRsZVtcXHQgXSo6KFteXFxuXFxyXSopLztcbnZhciB0aXRsZVJlZ2V4ID0gL3RpdGxlKFtcXHQgXVteXFxuXFxyXSp8KS87XG5cbi8vIHNyYy9sYW5ndWFnZS9jb21tb24vdmFsdWVDb252ZXJ0ZXIudHNcbnZhciBydWxlc1JlZ2V4ZXMgPSB7XG4gIEFDQ19ERVNDUjogYWNjZXNzaWJpbGl0eURlc2NyUmVnZXgsXG4gIEFDQ19USVRMRTogYWNjZXNzaWJpbGl0eVRpdGxlUmVnZXgsXG4gIFRJVExFOiB0aXRsZVJlZ2V4XG59O1xudmFyIEFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyID0gY2xhc3MgZXh0ZW5kcyBEZWZhdWx0VmFsdWVDb252ZXJ0ZXIge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyXCIpO1xuICB9XG4gIHJ1bkNvbnZlcnRlcihydWxlLCBpbnB1dCwgY3N0Tm9kZSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucnVuQ29tbW9uQ29udmVydGVyKHJ1bGUsIGlucHV0LCBjc3ROb2RlKTtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSB0aGlzLnJ1bkN1c3RvbUNvbnZlcnRlcihydWxlLCBpbnB1dCwgY3N0Tm9kZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gc3VwZXIucnVuQ29udmVydGVyKHJ1bGUsIGlucHV0LCBjc3ROb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJ1bkNvbW1vbkNvbnZlcnRlcihydWxlLCBpbnB1dCwgX2NzdE5vZGUpIHtcbiAgICBjb25zdCByZWdleCA9IHJ1bGVzUmVnZXhlc1tydWxlLm5hbWVdO1xuICAgIGlmIChyZWdleCA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaW5wdXQpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgaWYgKG1hdGNoWzFdICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBtYXRjaFsxXS50cmltKCkucmVwbGFjZSgvW1xcdCBdezIsfS9nbSwgXCIgXCIpO1xuICAgIH1cbiAgICBpZiAobWF0Y2hbMl0gIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIG1hdGNoWzJdLnJlcGxhY2UoL15cXHMqL2dtLCBcIlwiKS5yZXBsYWNlKC9cXHMrJC9nbSwgXCJcIikucmVwbGFjZSgvW1xcdCBdezIsfS9nbSwgXCIgXCIpLnJlcGxhY2UoL1tcXG5cXHJdezIsfS9nbSwgXCJcXG5cIik7XG4gICAgfVxuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbn07XG52YXIgQ29tbW9uVmFsdWVDb252ZXJ0ZXIgPSBjbGFzcyBleHRlbmRzIEFic3RyYWN0TWVybWFpZFZhbHVlQ29udmVydGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJDb21tb25WYWx1ZUNvbnZlcnRlclwiKTtcbiAgfVxuICBydW5DdXN0b21Db252ZXJ0ZXIoX3J1bGUsIF9pbnB1dCwgX2NzdE5vZGUpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG59O1xuXG4vLyBzcmMvbGFuZ3VhZ2UvY29tbW9uL3Rva2VuQnVpbGRlci50c1xuaW1wb3J0IHsgRGVmYXVsdFRva2VuQnVpbGRlciB9IGZyb20gXCJsYW5naXVtXCI7XG52YXIgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyID0gY2xhc3MgZXh0ZW5kcyBEZWZhdWx0VG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXJcIik7XG4gIH1cbiAgY29uc3RydWN0b3Ioa2V5d29yZHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMua2V5d29yZHMgPSBuZXcgU2V0KGtleXdvcmRzKTtcbiAgfVxuICBidWlsZEtleXdvcmRUb2tlbnMocnVsZXMsIHRlcm1pbmFsVG9rZW5zLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdG9rZW5UeXBlcyA9IHN1cGVyLmJ1aWxkS2V5d29yZFRva2VucyhydWxlcywgdGVybWluYWxUb2tlbnMsIG9wdGlvbnMpO1xuICAgIHRva2VuVHlwZXMuZm9yRWFjaCgodG9rZW5UeXBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5rZXl3b3Jkcy5oYXModG9rZW5UeXBlLm5hbWUpICYmIHRva2VuVHlwZS5QQVRURVJOICE9PSB2b2lkIDApIHtcbiAgICAgICAgdG9rZW5UeXBlLlBBVFRFUk4gPSBuZXcgUmVnRXhwKHRva2VuVHlwZS5QQVRURVJOLnRvU3RyaW5nKCkgKyBcIig/Oig/PSUlKXwoPyFcXFxcUykpXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b2tlblR5cGVzO1xuICB9XG59O1xudmFyIENvbW1vblRva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJDb21tb25Ub2tlbkJ1aWxkZXJcIik7XG4gIH1cbn07XG5cbmV4cG9ydCB7XG4gIF9fbmFtZSxcbiAgU3RhdGVtZW50LFxuICBBcmNoaXRlY3R1cmUsXG4gIGlzQXJjaGl0ZWN0dXJlLFxuICBCcmFuY2gsXG4gIGlzQnJhbmNoLFxuICBDb21taXQsXG4gIGlzQ29tbWl0LFxuICBpc0NvbW1vbixcbiAgR2l0R3JhcGgsXG4gIGlzR2l0R3JhcGgsXG4gIEluZm8sXG4gIGlzSW5mbyxcbiAgTWVyZ2UsXG4gIGlzTWVyZ2UsXG4gIFBhY2tldCxcbiAgaXNQYWNrZXQsXG4gIFBhY2tldEJsb2NrLFxuICBpc1BhY2tldEJsb2NrLFxuICBQaWUsXG4gIGlzUGllLFxuICBQaWVTZWN0aW9uLFxuICBpc1BpZVNlY3Rpb24sXG4gIE1lcm1haWRHZW5lcmF0ZWRTaGFyZWRNb2R1bGUsXG4gIEluZm9HZW5lcmF0ZWRNb2R1bGUsXG4gIFBhY2tldEdlbmVyYXRlZE1vZHVsZSxcbiAgUGllR2VuZXJhdGVkTW9kdWxlLFxuICBBcmNoaXRlY3R1cmVHZW5lcmF0ZWRNb2R1bGUsXG4gIEdpdEdyYXBoR2VuZXJhdGVkTW9kdWxlLFxuICBBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlcixcbiAgQ29tbW9uVmFsdWVDb252ZXJ0ZXIsXG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQ29tbW9uVG9rZW5CdWlsZGVyXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIsXG4gIENvbW1vblZhbHVlQ29udmVydGVyLFxuICBHaXRHcmFwaEdlbmVyYXRlZE1vZHVsZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvZ2l0R3JhcGgvbW9kdWxlLnRzXG5pbXBvcnQge1xuICBpbmplY3QsXG4gIGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlLFxuICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSxcbiAgRW1wdHlGaWxlU3lzdGVtXG59IGZyb20gXCJsYW5naXVtXCI7XG5cbi8vIHNyYy9sYW5ndWFnZS9naXRHcmFwaC90b2tlbkJ1aWxkZXIudHNcbnZhciBHaXRHcmFwaFRva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJHaXRHcmFwaFRva2VuQnVpbGRlclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihbXCJnaXRHcmFwaFwiXSk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9naXRHcmFwaC9tb2R1bGUudHNcbnZhciBHaXRHcmFwaE1vZHVsZSA9IHtcbiAgcGFyc2VyOiB7XG4gICAgVG9rZW5CdWlsZGVyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IG5ldyBHaXRHcmFwaFRva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgQ29tbW9uVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcyhjb250ZXh0ID0gRW1wdHlGaWxlU3lzdGVtKSB7XG4gIGNvbnN0IHNoYXJlZCA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZShjb250ZXh0KSxcbiAgICBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlXG4gICk7XG4gIGNvbnN0IEdpdEdyYXBoID0gaW5qZWN0KFxuICAgIGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlKHsgc2hhcmVkIH0pLFxuICAgIEdpdEdyYXBoR2VuZXJhdGVkTW9kdWxlLFxuICAgIEdpdEdyYXBoTW9kdWxlXG4gICk7XG4gIHNoYXJlZC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoR2l0R3JhcGgpO1xuICByZXR1cm4geyBzaGFyZWQsIEdpdEdyYXBoIH07XG59XG5fX25hbWUoY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcywgXCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzXCIpO1xuXG5leHBvcnQge1xuICBHaXRHcmFwaE1vZHVsZSxcbiAgY3JlYXRlR2l0R3JhcGhTZXJ2aWNlc1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyLFxuICBDb21tb25WYWx1ZUNvbnZlcnRlcixcbiAgSW5mb0dlbmVyYXRlZE1vZHVsZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvaW5mby9tb2R1bGUudHNcbmltcG9ydCB7XG4gIEVtcHR5RmlsZVN5c3RlbSxcbiAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUsXG4gIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlLFxuICBpbmplY3Rcbn0gZnJvbSBcImxhbmdpdW1cIjtcblxuLy8gc3JjL2xhbmd1YWdlL2luZm8vdG9rZW5CdWlsZGVyLnRzXG52YXIgSW5mb1Rva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJJbmZvVG9rZW5CdWlsZGVyXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFtcImluZm9cIiwgXCJzaG93SW5mb1wiXSk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9pbmZvL21vZHVsZS50c1xudmFyIEluZm9Nb2R1bGUgPSB7XG4gIHBhcnNlcjoge1xuICAgIFRva2VuQnVpbGRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgSW5mb1Rva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgQ29tbW9uVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlSW5mb1NlcnZpY2VzKGNvbnRleHQgPSBFbXB0eUZpbGVTeXN0ZW0pIHtcbiAgY29uc3Qgc2hhcmVkID0gaW5qZWN0KFxuICAgIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlKGNvbnRleHQpLFxuICAgIE1lcm1haWRHZW5lcmF0ZWRTaGFyZWRNb2R1bGVcbiAgKTtcbiAgY29uc3QgSW5mbyA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSh7IHNoYXJlZCB9KSxcbiAgICBJbmZvR2VuZXJhdGVkTW9kdWxlLFxuICAgIEluZm9Nb2R1bGVcbiAgKTtcbiAgc2hhcmVkLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihJbmZvKTtcbiAgcmV0dXJuIHsgc2hhcmVkLCBJbmZvIH07XG59XG5fX25hbWUoY3JlYXRlSW5mb1NlcnZpY2VzLCBcImNyZWF0ZUluZm9TZXJ2aWNlc1wiKTtcblxuZXhwb3J0IHtcbiAgSW5mb01vZHVsZSxcbiAgY3JlYXRlSW5mb1NlcnZpY2VzXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIsXG4gIENvbW1vblZhbHVlQ29udmVydGVyLFxuICBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlLFxuICBQYWNrZXRHZW5lcmF0ZWRNb2R1bGUsXG4gIF9fbmFtZVxufSBmcm9tIFwiLi9jaHVuay1ZMjdNUVozVS5tanNcIjtcblxuLy8gc3JjL2xhbmd1YWdlL3BhY2tldC9tb2R1bGUudHNcbmltcG9ydCB7XG4gIEVtcHR5RmlsZVN5c3RlbSxcbiAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUsXG4gIGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlLFxuICBpbmplY3Rcbn0gZnJvbSBcImxhbmdpdW1cIjtcblxuLy8gc3JjL2xhbmd1YWdlL3BhY2tldC90b2tlbkJ1aWxkZXIudHNcbnZhciBQYWNrZXRUb2tlbkJ1aWxkZXIgPSBjbGFzcyBleHRlbmRzIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiUGFja2V0VG9rZW5CdWlsZGVyXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFtcInBhY2tldC1iZXRhXCJdKTtcbiAgfVxufTtcblxuLy8gc3JjL2xhbmd1YWdlL3BhY2tldC9tb2R1bGUudHNcbnZhciBQYWNrZXRNb2R1bGUgPSB7XG4gIHBhcnNlcjoge1xuICAgIFRva2VuQnVpbGRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUGFja2V0VG9rZW5CdWlsZGVyKCksIFwiVG9rZW5CdWlsZGVyXCIpLFxuICAgIFZhbHVlQ29udmVydGVyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IG5ldyBDb21tb25WYWx1ZUNvbnZlcnRlcigpLCBcIlZhbHVlQ29udmVydGVyXCIpXG4gIH1cbn07XG5mdW5jdGlvbiBjcmVhdGVQYWNrZXRTZXJ2aWNlcyhjb250ZXh0ID0gRW1wdHlGaWxlU3lzdGVtKSB7XG4gIGNvbnN0IHNoYXJlZCA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZShjb250ZXh0KSxcbiAgICBNZXJtYWlkR2VuZXJhdGVkU2hhcmVkTW9kdWxlXG4gICk7XG4gIGNvbnN0IFBhY2tldCA9IGluamVjdChcbiAgICBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSh7IHNoYXJlZCB9KSxcbiAgICBQYWNrZXRHZW5lcmF0ZWRNb2R1bGUsXG4gICAgUGFja2V0TW9kdWxlXG4gICk7XG4gIHNoYXJlZC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoUGFja2V0KTtcbiAgcmV0dXJuIHsgc2hhcmVkLCBQYWNrZXQgfTtcbn1cbl9fbmFtZShjcmVhdGVQYWNrZXRTZXJ2aWNlcywgXCJjcmVhdGVQYWNrZXRTZXJ2aWNlc1wiKTtcblxuZXhwb3J0IHtcbiAgUGFja2V0TW9kdWxlLFxuICBjcmVhdGVQYWNrZXRTZXJ2aWNlc1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyLFxuICBBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlcixcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgUGllR2VuZXJhdGVkTW9kdWxlLFxuICBfX25hbWVcbn0gZnJvbSBcIi4vY2h1bmstWTI3TVFaM1UubWpzXCI7XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvbW9kdWxlLnRzXG5pbXBvcnQge1xuICBFbXB0eUZpbGVTeXN0ZW0sXG4gIGNyZWF0ZURlZmF1bHRDb3JlTW9kdWxlLFxuICBjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSxcbiAgaW5qZWN0XG59IGZyb20gXCJsYW5naXVtXCI7XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvdG9rZW5CdWlsZGVyLnRzXG52YXIgUGllVG9rZW5CdWlsZGVyID0gY2xhc3MgZXh0ZW5kcyBBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlBpZVRva2VuQnVpbGRlclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihbXCJwaWVcIiwgXCJzaG93RGF0YVwiXSk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvdmFsdWVDb252ZXJ0ZXIudHNcbnZhciBQaWVWYWx1ZUNvbnZlcnRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlBpZVZhbHVlQ29udmVydGVyXCIpO1xuICB9XG4gIHJ1bkN1c3RvbUNvbnZlcnRlcihydWxlLCBpbnB1dCwgX2NzdE5vZGUpIHtcbiAgICBpZiAocnVsZS5uYW1lICE9PSBcIlBJRV9TRUNUSU9OX0xBQkVMXCIpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cIi9nLCBcIlwiKS50cmltKCk7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9waWUvbW9kdWxlLnRzXG52YXIgUGllTW9kdWxlID0ge1xuICBwYXJzZXI6IHtcbiAgICBUb2tlbkJ1aWxkZXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbmV3IFBpZVRva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUGllVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlUGllU2VydmljZXMoY29udGV4dCA9IEVtcHR5RmlsZVN5c3RlbSkge1xuICBjb25zdCBzaGFyZWQgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUoY29udGV4dCksXG4gICAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZVxuICApO1xuICBjb25zdCBQaWUgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUoeyBzaGFyZWQgfSksXG4gICAgUGllR2VuZXJhdGVkTW9kdWxlLFxuICAgIFBpZU1vZHVsZVxuICApO1xuICBzaGFyZWQuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKFBpZSk7XG4gIHJldHVybiB7IHNoYXJlZCwgUGllIH07XG59XG5fX25hbWUoY3JlYXRlUGllU2VydmljZXMsIFwiY3JlYXRlUGllU2VydmljZXNcIik7XG5cbmV4cG9ydCB7XG4gIFBpZU1vZHVsZSxcbiAgY3JlYXRlUGllU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIsXG4gIEFyY2hpdGVjdHVyZUdlbmVyYXRlZE1vZHVsZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvYXJjaGl0ZWN0dXJlL21vZHVsZS50c1xuaW1wb3J0IHtcbiAgRW1wdHlGaWxlU3lzdGVtLFxuICBjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSxcbiAgY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUsXG4gIGluamVjdFxufSBmcm9tIFwibGFuZ2l1bVwiO1xuXG4vLyBzcmMvbGFuZ3VhZ2UvYXJjaGl0ZWN0dXJlL3Rva2VuQnVpbGRlci50c1xudmFyIEFyY2hpdGVjdHVyZVRva2VuQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJBcmNoaXRlY3R1cmVUb2tlbkJ1aWxkZXJcIik7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoW1wiYXJjaGl0ZWN0dXJlXCJdKTtcbiAgfVxufTtcblxuLy8gc3JjL2xhbmd1YWdlL2FyY2hpdGVjdHVyZS92YWx1ZUNvbnZlcnRlci50c1xudmFyIEFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyID0gY2xhc3MgZXh0ZW5kcyBBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQXJjaGl0ZWN0dXJlVmFsdWVDb252ZXJ0ZXJcIik7XG4gIH1cbiAgcnVuQ3VzdG9tQ29udmVydGVyKHJ1bGUsIGlucHV0LCBfY3N0Tm9kZSkge1xuICAgIGlmIChydWxlLm5hbWUgPT09IFwiQVJDSF9JQ09OXCIpIHtcbiAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9bKCldL2csIFwiXCIpLnRyaW0oKTtcbiAgICB9IGVsc2UgaWYgKHJ1bGUubmFtZSA9PT0gXCJBUkNIX1RFWFRfSUNPTlwiKSB7XG4gICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvW1wiKCldL2csIFwiXCIpO1xuICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lID09PSBcIkFSQ0hfVElUTEVcIikge1xuICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1tbXFxdXS9nLCBcIlwiKS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbn07XG5cbi8vIHNyYy9sYW5ndWFnZS9hcmNoaXRlY3R1cmUvbW9kdWxlLnRzXG52YXIgQXJjaGl0ZWN0dXJlTW9kdWxlID0ge1xuICBwYXJzZXI6IHtcbiAgICBUb2tlbkJ1aWxkZXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbmV3IEFyY2hpdGVjdHVyZVRva2VuQnVpbGRlcigpLCBcIlRva2VuQnVpbGRlclwiKSxcbiAgICBWYWx1ZUNvbnZlcnRlcjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgQXJjaGl0ZWN0dXJlVmFsdWVDb252ZXJ0ZXIoKSwgXCJWYWx1ZUNvbnZlcnRlclwiKVxuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMoY29udGV4dCA9IEVtcHR5RmlsZVN5c3RlbSkge1xuICBjb25zdCBzaGFyZWQgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGUoY29udGV4dCksXG4gICAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZVxuICApO1xuICBjb25zdCBBcmNoaXRlY3R1cmUgPSBpbmplY3QoXG4gICAgY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUoeyBzaGFyZWQgfSksXG4gICAgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlLFxuICAgIEFyY2hpdGVjdHVyZU1vZHVsZVxuICApO1xuICBzaGFyZWQuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKEFyY2hpdGVjdHVyZSk7XG4gIHJldHVybiB7IHNoYXJlZCwgQXJjaGl0ZWN0dXJlIH07XG59XG5fX25hbWUoY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMsIFwiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXNcIik7XG5cbmV4cG9ydCB7XG4gIEFyY2hpdGVjdHVyZU1vZHVsZSxcbiAgY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIEluZm9Nb2R1bGUsXG4gIGNyZWF0ZUluZm9TZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVuay00WUZCNVZVQy5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWTI3TVFaM1UubWpzXCI7XG5leHBvcnQge1xuICBJbmZvTW9kdWxlLFxuICBjcmVhdGVJbmZvU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIFBhY2tldE1vZHVsZSxcbiAgY3JlYXRlUGFja2V0U2VydmljZXNcbn0gZnJvbSBcIi4vY2h1bmstRVFGTEZNTkUubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuZXhwb3J0IHtcbiAgUGFja2V0TW9kdWxlLFxuICBjcmVhdGVQYWNrZXRTZXJ2aWNlc1xufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgUGllTW9kdWxlLFxuICBjcmVhdGVQaWVTZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVuay1CSTZFUUtPUS5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWTI3TVFaM1UubWpzXCI7XG5leHBvcnQge1xuICBQaWVNb2R1bGUsXG4gIGNyZWF0ZVBpZVNlcnZpY2VzXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBBcmNoaXRlY3R1cmVNb2R1bGUsXG4gIGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzXG59IGZyb20gXCIuL2NodW5rLUZGN0JRWE9ILm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1ZMjdNUVozVS5tanNcIjtcbmV4cG9ydCB7XG4gIEFyY2hpdGVjdHVyZU1vZHVsZSxcbiAgY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXNcbn07XG4iLAogICAgImltcG9ydCB7XG4gIEdpdEdyYXBoTW9kdWxlLFxuICBjcmVhdGVHaXRHcmFwaFNlcnZpY2VzXG59IGZyb20gXCIuL2NodW5rLU5DTUZUVFVXLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1ZMjdNUVozVS5tanNcIjtcbmV4cG9ydCB7XG4gIEdpdEdyYXBoTW9kdWxlLFxuICBjcmVhdGVHaXRHcmFwaFNlcnZpY2VzXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBHaXRHcmFwaE1vZHVsZSxcbiAgY3JlYXRlR2l0R3JhcGhTZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1OQ01GVFRVVy5tanNcIjtcbmltcG9ydCB7XG4gIEluZm9Nb2R1bGUsXG4gIGNyZWF0ZUluZm9TZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay00WUZCNVZVQy5tanNcIjtcbmltcG9ydCB7XG4gIFBhY2tldE1vZHVsZSxcbiAgY3JlYXRlUGFja2V0U2VydmljZXNcbn0gZnJvbSBcIi4vY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvY2h1bmstRVFGTEZNTkUubWpzXCI7XG5pbXBvcnQge1xuICBQaWVNb2R1bGUsXG4gIGNyZWF0ZVBpZVNlcnZpY2VzXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLUJJNkVRS09RLm1qc1wiO1xuaW1wb3J0IHtcbiAgQXJjaGl0ZWN0dXJlTW9kdWxlLFxuICBjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9jaHVuay1GRjdCUVhPSC5tanNcIjtcbmltcG9ydCB7XG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIsXG4gIEFyY2hpdGVjdHVyZSxcbiAgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlLFxuICBCcmFuY2gsXG4gIENvbW1pdCxcbiAgQ29tbW9uVG9rZW5CdWlsZGVyLFxuICBDb21tb25WYWx1ZUNvbnZlcnRlcixcbiAgR2l0R3JhcGgsXG4gIEdpdEdyYXBoR2VuZXJhdGVkTW9kdWxlLFxuICBJbmZvLFxuICBJbmZvR2VuZXJhdGVkTW9kdWxlLFxuICBNZXJnZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgUGFja2V0LFxuICBQYWNrZXRCbG9jayxcbiAgUGFja2V0R2VuZXJhdGVkTW9kdWxlLFxuICBQaWUsXG4gIFBpZUdlbmVyYXRlZE1vZHVsZSxcbiAgUGllU2VjdGlvbixcbiAgU3RhdGVtZW50LFxuICBfX25hbWUsXG4gIGlzQXJjaGl0ZWN0dXJlLFxuICBpc0JyYW5jaCxcbiAgaXNDb21taXQsXG4gIGlzQ29tbW9uLFxuICBpc0dpdEdyYXBoLFxuICBpc0luZm8sXG4gIGlzTWVyZ2UsXG4gIGlzUGFja2V0LFxuICBpc1BhY2tldEJsb2NrLFxuICBpc1BpZSxcbiAgaXNQaWVTZWN0aW9uXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2NodW5rLVkyN01RWjNVLm1qc1wiO1xuXG4vLyBzcmMvcGFyc2UudHNcbnZhciBwYXJzZXJzID0ge307XG52YXIgaW5pdGlhbGl6ZXJzID0ge1xuICBpbmZvOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZUluZm9TZXJ2aWNlczogY3JlYXRlSW5mb1NlcnZpY2VzMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9pbmZvLTQ2RFc2Vko3Lm1qc1wiKTtcbiAgICBjb25zdCBwYXJzZXIgPSBjcmVhdGVJbmZvU2VydmljZXMyKCkuSW5mby5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtcbiAgICBwYXJzZXJzLmluZm8gPSBwYXJzZXI7XG4gIH0sIFwiaW5mb1wiKSxcbiAgcGFja2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZVBhY2tldFNlcnZpY2VzOiBjcmVhdGVQYWNrZXRTZXJ2aWNlczIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvcGFja2V0LVcyR0hWQ1lKLm1qc1wiKTtcbiAgICBjb25zdCBwYXJzZXIgPSBjcmVhdGVQYWNrZXRTZXJ2aWNlczIoKS5QYWNrZXQucGFyc2VyLkxhbmdpdW1QYXJzZXI7XG4gICAgcGFyc2Vycy5wYWNrZXQgPSBwYXJzZXI7XG4gIH0sIFwicGFja2V0XCIpLFxuICBwaWU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlUGllU2VydmljZXM6IGNyZWF0ZVBpZVNlcnZpY2VzMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC1wYXJzZXIuY29yZS9waWUtQkVXVDRSSEUubWpzXCIpO1xuICAgIGNvbnN0IHBhcnNlciA9IGNyZWF0ZVBpZVNlcnZpY2VzMigpLlBpZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtcbiAgICBwYXJzZXJzLnBpZSA9IHBhcnNlcjtcbiAgfSwgXCJwaWVcIiksXG4gIGFyY2hpdGVjdHVyZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlczogY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLXBhcnNlci5jb3JlL2FyY2hpdGVjdHVyZS1JM1FGWU1MMi5tanNcIik7XG4gICAgY29uc3QgcGFyc2VyID0gY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMyKCkuQXJjaGl0ZWN0dXJlLnBhcnNlci5MYW5naXVtUGFyc2VyO1xuICAgIHBhcnNlcnMuYXJjaGl0ZWN0dXJlID0gcGFyc2VyO1xuICB9LCBcImFyY2hpdGVjdHVyZVwiKSxcbiAgZ2l0R3JhcGg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlR2l0R3JhcGhTZXJ2aWNlczogY3JlYXRlR2l0R3JhcGhTZXJ2aWNlczIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQtcGFyc2VyLmNvcmUvZ2l0R3JhcGgtWUNZUEw1N0IubWpzXCIpO1xuICAgIGNvbnN0IHBhcnNlciA9IGNyZWF0ZUdpdEdyYXBoU2VydmljZXMyKCkuR2l0R3JhcGgucGFyc2VyLkxhbmdpdW1QYXJzZXI7XG4gICAgcGFyc2Vycy5naXRHcmFwaCA9IHBhcnNlcjtcbiAgfSwgXCJnaXRHcmFwaFwiKVxufTtcbmFzeW5jIGZ1bmN0aW9uIHBhcnNlKGRpYWdyYW1UeXBlLCB0ZXh0KSB7XG4gIGNvbnN0IGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJzW2RpYWdyYW1UeXBlXTtcbiAgaWYgKCFpbml0aWFsaXplcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkaWFncmFtIHR5cGU6ICR7ZGlhZ3JhbVR5cGV9YCk7XG4gIH1cbiAgaWYgKCFwYXJzZXJzW2RpYWdyYW1UeXBlXSkge1xuICAgIGF3YWl0IGluaXRpYWxpemVyKCk7XG4gIH1cbiAgY29uc3QgcGFyc2VyID0gcGFyc2Vyc1tkaWFncmFtVHlwZV07XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5wYXJzZSh0ZXh0KTtcbiAgaWYgKHJlc3VsdC5sZXhlckVycm9ycy5sZW5ndGggPiAwIHx8IHJlc3VsdC5wYXJzZXJFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBNZXJtYWlkUGFyc2VFcnJvcihyZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQudmFsdWU7XG59XG5fX25hbWUocGFyc2UsIFwicGFyc2VcIik7XG52YXIgTWVybWFpZFBhcnNlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzdWx0KSB7XG4gICAgY29uc3QgbGV4ZXJFcnJvcnMgPSByZXN1bHQubGV4ZXJFcnJvcnMubWFwKChlcnIpID0+IGVyci5tZXNzYWdlKS5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IHBhcnNlckVycm9ycyA9IHJlc3VsdC5wYXJzZXJFcnJvcnMubWFwKChlcnIpID0+IGVyci5tZXNzYWdlKS5qb2luKFwiXFxuXCIpO1xuICAgIHN1cGVyKGBQYXJzaW5nIGZhaWxlZDogJHtsZXhlckVycm9yc30gJHtwYXJzZXJFcnJvcnN9YCk7XG4gICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJNZXJtYWlkUGFyc2VFcnJvclwiKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIEFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlcixcbiAgQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIsXG4gIEFyY2hpdGVjdHVyZSxcbiAgQXJjaGl0ZWN0dXJlR2VuZXJhdGVkTW9kdWxlLFxuICBBcmNoaXRlY3R1cmVNb2R1bGUsXG4gIEJyYW5jaCxcbiAgQ29tbWl0LFxuICBDb21tb25Ub2tlbkJ1aWxkZXIsXG4gIENvbW1vblZhbHVlQ29udmVydGVyLFxuICBHaXRHcmFwaCxcbiAgR2l0R3JhcGhHZW5lcmF0ZWRNb2R1bGUsXG4gIEdpdEdyYXBoTW9kdWxlLFxuICBJbmZvLFxuICBJbmZvR2VuZXJhdGVkTW9kdWxlLFxuICBJbmZvTW9kdWxlLFxuICBNZXJnZSxcbiAgTWVybWFpZEdlbmVyYXRlZFNoYXJlZE1vZHVsZSxcbiAgTWVybWFpZFBhcnNlRXJyb3IsXG4gIFBhY2tldCxcbiAgUGFja2V0QmxvY2ssXG4gIFBhY2tldEdlbmVyYXRlZE1vZHVsZSxcbiAgUGFja2V0TW9kdWxlLFxuICBQaWUsXG4gIFBpZUdlbmVyYXRlZE1vZHVsZSxcbiAgUGllTW9kdWxlLFxuICBQaWVTZWN0aW9uLFxuICBTdGF0ZW1lbnQsXG4gIGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzLFxuICBjcmVhdGVHaXRHcmFwaFNlcnZpY2VzLFxuICBjcmVhdGVJbmZvU2VydmljZXMsXG4gIGNyZWF0ZVBhY2tldFNlcnZpY2VzLFxuICBjcmVhdGVQaWVTZXJ2aWNlcyxcbiAgaXNBcmNoaXRlY3R1cmUsXG4gIGlzQnJhbmNoLFxuICBpc0NvbW1pdCxcbiAgaXNDb21tb24sXG4gIGlzR2l0R3JhcGgsXG4gIGlzSW5mbyxcbiAgaXNNZXJnZSxcbiAgaXNQYWNrZXQsXG4gIGlzUGFja2V0QmxvY2ssXG4gIGlzUGllLFxuICBpc1BpZVNlY3Rpb24sXG4gIHBhcnNlXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBwb3B1bGF0ZUNvbW1vbkRiXG59IGZyb20gXCIuL2NodW5rLU9RQ001TEhVLm1qc1wiO1xuaW1wb3J0IHtcbiAgSW1wZXJhdGl2ZVN0YXRlXG59IGZyb20gXCIuL2NodW5rLTJSWVEzUVRCLm1qc1wiO1xuaW1wb3J0IHtcbiAgY2xlYW5BbmRNZXJnZSxcbiAgcmFuZG9tLFxuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcsXG4gIGdldENvbmZpZzIsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgbG9nLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgc2V0dXBHcmFwaFZpZXdib3gyIGFzIHNldHVwR3JhcGhWaWV3Ym94XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2l0L2dpdEdyYXBoUGFyc2VyLnRzXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAbWVybWFpZC1qcy9wYXJzZXJcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9naXRHcmFwaFR5cGVzLnRzXG52YXIgY29tbWl0VHlwZSA9IHtcbiAgTk9STUFMOiAwLFxuICBSRVZFUlNFOiAxLFxuICBISUdITElHSFQ6IDIsXG4gIE1FUkdFOiAzLFxuICBDSEVSUllfUElDSzogNFxufTtcblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9naXRHcmFwaEFzdC50c1xudmFyIERFRkFVTFRfR0lUR1JBUEhfQ09ORklHID0gZGVmYXVsdENvbmZpZ19kZWZhdWx0LmdpdEdyYXBoO1xudmFyIGdldENvbmZpZzMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgY29uZmlnID0gY2xlYW5BbmRNZXJnZSh7XG4gICAgLi4uREVGQVVMVF9HSVRHUkFQSF9DT05GSUcsXG4gICAgLi4uZ2V0Q29uZmlnKCkuZ2l0R3JhcGhcbiAgfSk7XG4gIHJldHVybiBjb25maWc7XG59LCBcImdldENvbmZpZ1wiKTtcbnZhciBzdGF0ZSA9IG5ldyBJbXBlcmF0aXZlU3RhdGUoKCkgPT4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWczKCk7XG4gIGNvbnN0IG1haW5CcmFuY2hOYW1lID0gY29uZmlnLm1haW5CcmFuY2hOYW1lO1xuICBjb25zdCBtYWluQnJhbmNoT3JkZXIgPSBjb25maWcubWFpbkJyYW5jaE9yZGVyO1xuICByZXR1cm4ge1xuICAgIG1haW5CcmFuY2hOYW1lLFxuICAgIGNvbW1pdHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgaGVhZDogbnVsbCxcbiAgICBicmFuY2hDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtbbWFpbkJyYW5jaE5hbWUsIHsgbmFtZTogbWFpbkJyYW5jaE5hbWUsIG9yZGVyOiBtYWluQnJhbmNoT3JkZXIgfV1dKSxcbiAgICBicmFuY2hlczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1ttYWluQnJhbmNoTmFtZSwgbnVsbF1dKSxcbiAgICBjdXJyQnJhbmNoOiBtYWluQnJhbmNoTmFtZSxcbiAgICBkaXJlY3Rpb246IFwiTFJcIixcbiAgICBzZXE6IDAsXG4gICAgb3B0aW9uczoge31cbiAgfTtcbn0pO1xuZnVuY3Rpb24gZ2V0SUQoKSB7XG4gIHJldHVybiByYW5kb20oeyBsZW5ndGg6IDcgfSk7XG59XG5fX25hbWUoZ2V0SUQsIFwiZ2V0SURcIik7XG5mdW5jdGlvbiB1bmlxQnkobGlzdCwgZm4pIHtcbiAgY29uc3QgcmVjb3JkTWFwID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBsaXN0LnJlZHVjZSgob3V0LCBpdGVtKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gZm4oaXRlbSk7XG4gICAgaWYgKCFyZWNvcmRNYXBba2V5XSkge1xuICAgICAgcmVjb3JkTWFwW2tleV0gPSB0cnVlO1xuICAgICAgb3V0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH0sIFtdKTtcbn1cbl9fbmFtZSh1bmlxQnksIFwidW5pcUJ5XCIpO1xudmFyIHNldERpcmVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlyMikge1xuICBzdGF0ZS5yZWNvcmRzLmRpcmVjdGlvbiA9IGRpcjI7XG59LCBcInNldERpcmVjdGlvblwiKTtcbnZhciBzZXRPcHRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihyYXdPcHRTdHJpbmcpIHtcbiAgbG9nLmRlYnVnKFwib3B0aW9ucyBzdHJcIiwgcmF3T3B0U3RyaW5nKTtcbiAgcmF3T3B0U3RyaW5nID0gcmF3T3B0U3RyaW5nPy50cmltKCk7XG4gIHJhd09wdFN0cmluZyA9IHJhd09wdFN0cmluZyB8fCBcInt9XCI7XG4gIHRyeSB7XG4gICAgc3RhdGUucmVjb3Jkcy5vcHRpb25zID0gSlNPTi5wYXJzZShyYXdPcHRTdHJpbmcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zXCIsIGUubWVzc2FnZSk7XG4gIH1cbn0sIFwic2V0T3B0aW9uc1wiKTtcbnZhciBnZXRPcHRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMub3B0aW9ucztcbn0sIFwiZ2V0T3B0aW9uc1wiKTtcbnZhciBjb21taXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNvbW1pdERCKSB7XG4gIGxldCBtc2cgPSBjb21taXREQi5tc2c7XG4gIGxldCBpZCA9IGNvbW1pdERCLmlkO1xuICBjb25zdCB0eXBlID0gY29tbWl0REIudHlwZTtcbiAgbGV0IHRhZ3MgPSBjb21taXREQi50YWdzO1xuICBsb2cuaW5mbyhcImNvbW1pdFwiLCBtc2csIGlkLCB0eXBlLCB0YWdzKTtcbiAgbG9nLmRlYnVnKFwiRW50ZXJpbmcgY29tbWl0OlwiLCBtc2csIGlkLCB0eXBlLCB0YWdzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnMygpO1xuICBpZCA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChpZCwgY29uZmlnKTtcbiAgbXNnID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KG1zZywgY29uZmlnKTtcbiAgdGFncyA9IHRhZ3M/Lm1hcCgodGFnKSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodGFnLCBjb25maWcpKTtcbiAgY29uc3QgbmV3Q29tbWl0ID0ge1xuICAgIGlkOiBpZCA/IGlkIDogc3RhdGUucmVjb3Jkcy5zZXEgKyBcIi1cIiArIGdldElEKCksXG4gICAgbWVzc2FnZTogbXNnLFxuICAgIHNlcTogc3RhdGUucmVjb3Jkcy5zZXErKyxcbiAgICB0eXBlOiB0eXBlID8/IGNvbW1pdFR5cGUuTk9STUFMLFxuICAgIHRhZ3M6IHRhZ3MgPz8gW10sXG4gICAgcGFyZW50czogc3RhdGUucmVjb3Jkcy5oZWFkID09IG51bGwgPyBbXSA6IFtzdGF0ZS5yZWNvcmRzLmhlYWQuaWRdLFxuICAgIGJyYW5jaDogc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoXG4gIH07XG4gIHN0YXRlLnJlY29yZHMuaGVhZCA9IG5ld0NvbW1pdDtcbiAgbG9nLmluZm8oXCJtYWluIGJyYW5jaFwiLCBjb25maWcubWFpbkJyYW5jaE5hbWUpO1xuICBzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuc2V0KG5ld0NvbW1pdC5pZCwgbmV3Q29tbWl0KTtcbiAgc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5zZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoLCBuZXdDb21taXQuaWQpO1xuICBsb2cuZGVidWcoXCJpbiBwdXNoQ29tbWl0IFwiICsgbmV3Q29tbWl0LmlkKTtcbn0sIFwiY29tbWl0XCIpO1xudmFyIGJyYW5jaCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYnJhbmNoREIpIHtcbiAgbGV0IG5hbWUgPSBicmFuY2hEQi5uYW1lO1xuICBjb25zdCBvcmRlciA9IGJyYW5jaERCLm9yZGVyO1xuICBuYW1lID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KG5hbWUsIGdldENvbmZpZzMoKSk7XG4gIGlmIChzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLmhhcyhuYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyBcImNoZWNrb3V0ICR7bmFtZX1cIilgXG4gICAgKTtcbiAgfVxuICBzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLnNldChuYW1lLCBzdGF0ZS5yZWNvcmRzLmhlYWQgIT0gbnVsbCA/IHN0YXRlLnJlY29yZHMuaGVhZC5pZCA6IG51bGwpO1xuICBzdGF0ZS5yZWNvcmRzLmJyYW5jaENvbmZpZy5zZXQobmFtZSwgeyBuYW1lLCBvcmRlciB9KTtcbiAgY2hlY2tvdXQobmFtZSk7XG4gIGxvZy5kZWJ1ZyhcImluIGNyZWF0ZUJyYW5jaFwiKTtcbn0sIFwiYnJhbmNoXCIpO1xudmFyIG1lcmdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobWVyZ2VEQikgPT4ge1xuICBsZXQgb3RoZXJCcmFuY2ggPSBtZXJnZURCLmJyYW5jaDtcbiAgbGV0IGN1c3RvbUlkID0gbWVyZ2VEQi5pZDtcbiAgY29uc3Qgb3ZlcnJpZGVUeXBlID0gbWVyZ2VEQi50eXBlO1xuICBjb25zdCBjdXN0b21UYWdzID0gbWVyZ2VEQi50YWdzO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWczKCk7XG4gIG90aGVyQnJhbmNoID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KG90aGVyQnJhbmNoLCBjb25maWcpO1xuICBpZiAoY3VzdG9tSWQpIHtcbiAgICBjdXN0b21JZCA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChjdXN0b21JZCwgY29uZmlnKTtcbiAgfVxuICBjb25zdCBjdXJyZW50QnJhbmNoQ2hlY2sgPSBzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLmdldChzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2gpO1xuICBjb25zdCBvdGhlckJyYW5jaENoZWNrID0gc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5nZXQob3RoZXJCcmFuY2gpO1xuICBjb25zdCBjdXJyZW50Q29tbWl0ID0gY3VycmVudEJyYW5jaENoZWNrID8gc3RhdGUucmVjb3Jkcy5jb21taXRzLmdldChjdXJyZW50QnJhbmNoQ2hlY2spIDogdm9pZCAwO1xuICBjb25zdCBvdGhlckNvbW1pdCA9IG90aGVyQnJhbmNoQ2hlY2sgPyBzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuZ2V0KG90aGVyQnJhbmNoQ2hlY2spIDogdm9pZCAwO1xuICBpZiAoY3VycmVudENvbW1pdCAmJiBvdGhlckNvbW1pdCAmJiBjdXJyZW50Q29tbWl0LmJyYW5jaCA9PT0gb3RoZXJCcmFuY2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtZXJnZSBicmFuY2ggJyR7b3RoZXJCcmFuY2h9JyBpbnRvIGl0c2VsZi5gKTtcbiAgfVxuICBpZiAoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoID09PSBvdGhlckJyYW5jaCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJtZXJnZVwiLiBDYW5ub3QgbWVyZ2UgYSBicmFuY2ggdG8gaXRzZWxmJyk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IGBtZXJnZSAke290aGVyQnJhbmNofWAsXG4gICAgICB0b2tlbjogYG1lcmdlICR7b3RoZXJCcmFuY2h9YCxcbiAgICAgIGV4cGVjdGVkOiBbXCJicmFuY2ggYWJjXCJdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoY3VycmVudENvbW1pdCA9PT0gdm9pZCAwIHx8ICFjdXJyZW50Q29tbWl0KSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQ3VycmVudCBicmFuY2ggKCR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2BcbiAgICApO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgdG9rZW46IGBtZXJnZSAke290aGVyQnJhbmNofWAsXG4gICAgICBleHBlY3RlZDogW1wiY29tbWl0XCJdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoIXN0YXRlLnJlY29yZHMuYnJhbmNoZXMuaGFzKG90aGVyQnJhbmNoKSkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcIm1lcmdlXCIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcgKyBvdGhlckJyYW5jaCArIFwiKSBkb2VzIG5vdCBleGlzdFwiXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogYG1lcmdlICR7b3RoZXJCcmFuY2h9YCxcbiAgICAgIHRva2VuOiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgZXhwZWN0ZWQ6IFtgYnJhbmNoICR7b3RoZXJCcmFuY2h9YF1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChvdGhlckNvbW1pdCA9PT0gdm9pZCAwIHx8ICFvdGhlckNvbW1pdCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgJ0luY29ycmVjdCB1c2FnZSBvZiBcIm1lcmdlXCIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcgKyBvdGhlckJyYW5jaCArIFwiKSBoYXMgbm8gY29tbWl0c1wiXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogYG1lcmdlICR7b3RoZXJCcmFuY2h9YCxcbiAgICAgIHRva2VuOiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgZXhwZWN0ZWQ6IFsnXCJjb21taXRcIiddXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoY3VycmVudENvbW1pdCA9PT0gb3RoZXJDb21taXQpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBgbWVyZ2UgJHtvdGhlckJyYW5jaH1gLFxuICAgICAgdG9rZW46IGBtZXJnZSAke290aGVyQnJhbmNofWAsXG4gICAgICBleHBlY3RlZDogW1wiYnJhbmNoIGFiY1wiXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKGN1c3RvbUlkICYmIHN0YXRlLnJlY29yZHMuY29tbWl0cy5oYXMoY3VzdG9tSWQpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwibWVyZ2VcIi4gQ29tbWl0IHdpdGggaWQ6JyArIGN1c3RvbUlkICsgXCIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkXCJcbiAgICApO1xuICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICB0ZXh0OiBgbWVyZ2UgJHtvdGhlckJyYW5jaH0gJHtjdXN0b21JZH0gJHtvdmVycmlkZVR5cGV9ICR7Y3VzdG9tVGFncz8uam9pbihcIiBcIil9YCxcbiAgICAgIHRva2VuOiBgbWVyZ2UgJHtvdGhlckJyYW5jaH0gJHtjdXN0b21JZH0gJHtvdmVycmlkZVR5cGV9ICR7Y3VzdG9tVGFncz8uam9pbihcIiBcIil9YCxcbiAgICAgIGV4cGVjdGVkOiBbXG4gICAgICAgIGBtZXJnZSAke290aGVyQnJhbmNofSAke2N1c3RvbUlkfV9VTklRVUUgJHtvdmVycmlkZVR5cGV9ICR7Y3VzdG9tVGFncz8uam9pbihcIiBcIil9YFxuICAgICAgXVxuICAgIH07XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgY29uc3QgdmVyaWZpZWRCcmFuY2ggPSBvdGhlckJyYW5jaENoZWNrID8gb3RoZXJCcmFuY2hDaGVjayA6IFwiXCI7XG4gIGNvbnN0IGNvbW1pdDIgPSB7XG4gICAgaWQ6IGN1c3RvbUlkIHx8IGAke3N0YXRlLnJlY29yZHMuc2VxfS0ke2dldElEKCl9YCxcbiAgICBtZXNzYWdlOiBgbWVyZ2VkIGJyYW5jaCAke290aGVyQnJhbmNofSBpbnRvICR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofWAsXG4gICAgc2VxOiBzdGF0ZS5yZWNvcmRzLnNlcSsrLFxuICAgIHBhcmVudHM6IHN0YXRlLnJlY29yZHMuaGVhZCA9PSBudWxsID8gW10gOiBbc3RhdGUucmVjb3Jkcy5oZWFkLmlkLCB2ZXJpZmllZEJyYW5jaF0sXG4gICAgYnJhbmNoOiBzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2gsXG4gICAgdHlwZTogY29tbWl0VHlwZS5NRVJHRSxcbiAgICBjdXN0b21UeXBlOiBvdmVycmlkZVR5cGUsXG4gICAgY3VzdG9tSWQ6IGN1c3RvbUlkID8gdHJ1ZSA6IGZhbHNlLFxuICAgIHRhZ3M6IGN1c3RvbVRhZ3MgPz8gW11cbiAgfTtcbiAgc3RhdGUucmVjb3Jkcy5oZWFkID0gY29tbWl0MjtcbiAgc3RhdGUucmVjb3Jkcy5jb21taXRzLnNldChjb21taXQyLmlkLCBjb21taXQyKTtcbiAgc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5zZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoLCBjb21taXQyLmlkKTtcbiAgbG9nLmRlYnVnKHN0YXRlLnJlY29yZHMuYnJhbmNoZXMpO1xuICBsb2cuZGVidWcoXCJpbiBtZXJnZUJyYW5jaFwiKTtcbn0sIFwibWVyZ2VcIik7XG52YXIgY2hlcnJ5UGljayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2hlcnJ5UGlja0RCKSB7XG4gIGxldCBzb3VyY2VJZCA9IGNoZXJyeVBpY2tEQi5pZDtcbiAgbGV0IHRhcmdldElkID0gY2hlcnJ5UGlja0RCLnRhcmdldElkO1xuICBsZXQgdGFncyA9IGNoZXJyeVBpY2tEQi50YWdzO1xuICBsZXQgcGFyZW50Q29tbWl0SWQgPSBjaGVycnlQaWNrREIucGFyZW50O1xuICBsb2cuZGVidWcoXCJFbnRlcmluZyBjaGVycnlQaWNrOlwiLCBzb3VyY2VJZCwgdGFyZ2V0SWQsIHRhZ3MpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWczKCk7XG4gIHNvdXJjZUlkID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KHNvdXJjZUlkLCBjb25maWcpO1xuICB0YXJnZXRJZCA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dCh0YXJnZXRJZCwgY29uZmlnKTtcbiAgdGFncyA9IHRhZ3M/Lm1hcCgodGFnKSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodGFnLCBjb25maWcpKTtcbiAgcGFyZW50Q29tbWl0SWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQocGFyZW50Q29tbWl0SWQsIGNvbmZpZyk7XG4gIGlmICghc291cmNlSWQgfHwgIXN0YXRlLnJlY29yZHMuY29tbWl0cy5oYXMoc291cmNlSWQpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAnSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5UGlja1wiLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnXG4gICAgKTtcbiAgICBlcnJvci5oYXNoID0ge1xuICAgICAgdGV4dDogYGNoZXJyeVBpY2sgJHtzb3VyY2VJZH0gJHt0YXJnZXRJZH1gLFxuICAgICAgdG9rZW46IGBjaGVycnlQaWNrICR7c291cmNlSWR9ICR7dGFyZ2V0SWR9YCxcbiAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICB9O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGNvbnN0IHNvdXJjZUNvbW1pdCA9IHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoc291cmNlSWQpO1xuICBpZiAoc291cmNlQ29tbWl0ID09PSB2b2lkIDAgfHwgIXNvdXJjZUNvbW1pdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5UGlja1wiLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAocGFyZW50Q29tbWl0SWQgJiYgIShBcnJheS5pc0FycmF5KHNvdXJjZUNvbW1pdC5wYXJlbnRzKSAmJiBzb3VyY2VDb21taXQucGFyZW50cy5pbmNsdWRlcyhwYXJlbnRDb21taXRJZCkpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBcIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LlwiXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBjb25zdCBzb3VyY2VDb21taXRCcmFuY2ggPSBzb3VyY2VDb21taXQuYnJhbmNoO1xuICBpZiAoc291cmNlQ29tbWl0LnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgIXBhcmVudENvbW1pdElkKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBcIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLlwiXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoIXRhcmdldElkIHx8ICFzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuaGFzKHRhcmdldElkKSkge1xuICAgIGlmIChzb3VyY2VDb21taXRCcmFuY2ggPT09IHN0YXRlLnJlY29yZHMuY3VyckJyYW5jaCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJjaGVycnlQaWNrXCIuIFNvdXJjZSBjb21taXQgaXMgYWxyZWFkeSBvbiBjdXJyZW50IGJyYW5jaCdcbiAgICAgICk7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIHRva2VuOiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudENvbW1pdElkID0gc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5nZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoKTtcbiAgICBpZiAoY3VycmVudENvbW1pdElkID09PSB2b2lkIDAgfHwgIWN1cnJlbnRDb21taXRJZCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGBJbmNvcnJlY3QgdXNhZ2Ugb2YgXCJjaGVycnktcGlja1wiLiBDdXJyZW50IGJyYW5jaCAoJHtzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYFxuICAgICAgKTtcbiAgICAgIGVycm9yLmhhc2ggPSB7XG4gICAgICAgIHRleHQ6IGBjaGVycnlQaWNrICR7c291cmNlSWR9ICR7dGFyZ2V0SWR9YCxcbiAgICAgICAgdG9rZW46IGBjaGVycnlQaWNrICR7c291cmNlSWR9ICR7dGFyZ2V0SWR9YCxcbiAgICAgICAgZXhwZWN0ZWQ6IFtcImNoZXJyeS1waWNrIGFiY1wiXVxuICAgICAgfTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Q29tbWl0ID0gc3RhdGUucmVjb3Jkcy5jb21taXRzLmdldChjdXJyZW50Q29tbWl0SWQpO1xuICAgIGlmIChjdXJyZW50Q29tbWl0ID09PSB2b2lkIDAgfHwgIWN1cnJlbnRDb21taXQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICBgSW5jb3JyZWN0IHVzYWdlIG9mIFwiY2hlcnJ5LXBpY2tcIi4gQ3VycmVudCBicmFuY2ggKCR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2BcbiAgICAgICk7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIHRva2VuOiBgY2hlcnJ5UGljayAke3NvdXJjZUlkfSAke3RhcmdldElkfWAsXG4gICAgICAgIGV4cGVjdGVkOiBbXCJjaGVycnktcGljayBhYmNcIl1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgY29tbWl0MiA9IHtcbiAgICAgIGlkOiBzdGF0ZS5yZWNvcmRzLnNlcSArIFwiLVwiICsgZ2V0SUQoKSxcbiAgICAgIG1lc3NhZ2U6IGBjaGVycnktcGlja2VkICR7c291cmNlQ29tbWl0Py5tZXNzYWdlfSBpbnRvICR7c3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNofWAsXG4gICAgICBzZXE6IHN0YXRlLnJlY29yZHMuc2VxKyssXG4gICAgICBwYXJlbnRzOiBzdGF0ZS5yZWNvcmRzLmhlYWQgPT0gbnVsbCA/IFtdIDogW3N0YXRlLnJlY29yZHMuaGVhZC5pZCwgc291cmNlQ29tbWl0LmlkXSxcbiAgICAgIGJyYW5jaDogc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoLFxuICAgICAgdHlwZTogY29tbWl0VHlwZS5DSEVSUllfUElDSyxcbiAgICAgIHRhZ3M6IHRhZ3MgPyB0YWdzLmZpbHRlcihCb29sZWFuKSA6IFtcbiAgICAgICAgYGNoZXJyeS1waWNrOiR7c291cmNlQ29tbWl0LmlkfSR7c291cmNlQ29tbWl0LnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgPyBgfHBhcmVudDoke3BhcmVudENvbW1pdElkfWAgOiBcIlwifWBcbiAgICAgIF1cbiAgICB9O1xuICAgIHN0YXRlLnJlY29yZHMuaGVhZCA9IGNvbW1pdDI7XG4gICAgc3RhdGUucmVjb3Jkcy5jb21taXRzLnNldChjb21taXQyLmlkLCBjb21taXQyKTtcbiAgICBzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLnNldChzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2gsIGNvbW1pdDIuaWQpO1xuICAgIGxvZy5kZWJ1ZyhzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzKTtcbiAgICBsb2cuZGVidWcoXCJpbiBjaGVycnlQaWNrXCIpO1xuICB9XG59LCBcImNoZXJyeVBpY2tcIik7XG52YXIgY2hlY2tvdXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGJyYW5jaDIpIHtcbiAgYnJhbmNoMiA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChicmFuY2gyLCBnZXRDb25maWczKCkpO1xuICBpZiAoIXN0YXRlLnJlY29yZHMuYnJhbmNoZXMuaGFzKGJyYW5jaDIpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgVHJ5aW5nIHRvIGNoZWNrb3V0IGJyYW5jaCB3aGljaCBpcyBub3QgeWV0IGNyZWF0ZWQuIChIZWxwIHRyeSB1c2luZyBcImJyYW5jaCAke2JyYW5jaDJ9XCIpYFxuICAgICk7XG4gICAgZXJyb3IuaGFzaCA9IHtcbiAgICAgIHRleHQ6IGBjaGVja291dCAke2JyYW5jaDJ9YCxcbiAgICAgIHRva2VuOiBgY2hlY2tvdXQgJHticmFuY2gyfWAsXG4gICAgICBleHBlY3RlZDogW2BicmFuY2ggJHticmFuY2gyfWBdXG4gICAgfTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5yZWNvcmRzLmN1cnJCcmFuY2ggPSBicmFuY2gyO1xuICAgIGNvbnN0IGlkID0gc3RhdGUucmVjb3Jkcy5icmFuY2hlcy5nZXQoc3RhdGUucmVjb3Jkcy5jdXJyQnJhbmNoKTtcbiAgICBpZiAoaWQgPT09IHZvaWQgMCB8fCAhaWQpIHtcbiAgICAgIHN0YXRlLnJlY29yZHMuaGVhZCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnJlY29yZHMuaGVhZCA9IHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoaWQpID8/IG51bGw7XG4gICAgfVxuICB9XG59LCBcImNoZWNrb3V0XCIpO1xuZnVuY3Rpb24gdXBzZXJ0KGFyciwga2V5LCBuZXdWYWwpIHtcbiAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZihrZXkpO1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgYXJyLnB1c2gobmV3VmFsKTtcbiAgfSBlbHNlIHtcbiAgICBhcnIuc3BsaWNlKGluZGV4LCAxLCBuZXdWYWwpO1xuICB9XG59XG5fX25hbWUodXBzZXJ0LCBcInVwc2VydFwiKTtcbmZ1bmN0aW9uIHByZXR0eVByaW50Q29tbWl0SGlzdG9yeShjb21taXRBcnIpIHtcbiAgY29uc3QgY29tbWl0MiA9IGNvbW1pdEFyci5yZWR1Y2UoKG91dCwgY29tbWl0MykgPT4ge1xuICAgIGlmIChvdXQuc2VxID4gY29tbWl0My5zZXEpIHtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIHJldHVybiBjb21taXQzO1xuICB9LCBjb21taXRBcnJbMF0pO1xuICBsZXQgbGluZSA9IFwiXCI7XG4gIGNvbW1pdEFyci5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAoYyA9PT0gY29tbWl0Mikge1xuICAgICAgbGluZSArPSBcIlx0KlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lICs9IFwiXHR8XCI7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgbGFiZWwgPSBbbGluZSwgY29tbWl0Mi5pZCwgY29tbWl0Mi5zZXFdO1xuICBmb3IgKGNvbnN0IGJyYW5jaDIgaW4gc3RhdGUucmVjb3Jkcy5icmFuY2hlcykge1xuICAgIGlmIChzdGF0ZS5yZWNvcmRzLmJyYW5jaGVzLmdldChicmFuY2gyKSA9PT0gY29tbWl0Mi5pZCkge1xuICAgICAgbGFiZWwucHVzaChicmFuY2gyKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGxhYmVsLmpvaW4oXCIgXCIpKTtcbiAgaWYgKGNvbW1pdDIucGFyZW50cyAmJiBjb21taXQyLnBhcmVudHMubGVuZ3RoID09IDIgJiYgY29tbWl0Mi5wYXJlbnRzWzBdICYmIGNvbW1pdDIucGFyZW50c1sxXSkge1xuICAgIGNvbnN0IG5ld0NvbW1pdCA9IHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoY29tbWl0Mi5wYXJlbnRzWzBdKTtcbiAgICB1cHNlcnQoY29tbWl0QXJyLCBjb21taXQyLCBuZXdDb21taXQpO1xuICAgIGlmIChjb21taXQyLnBhcmVudHNbMV0pIHtcbiAgICAgIGNvbW1pdEFyci5wdXNoKHN0YXRlLnJlY29yZHMuY29tbWl0cy5nZXQoY29tbWl0Mi5wYXJlbnRzWzFdKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbW1pdDIucGFyZW50cy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29tbWl0Mi5wYXJlbnRzWzBdKSB7XG4gICAgICBjb25zdCBuZXdDb21taXQgPSBzdGF0ZS5yZWNvcmRzLmNvbW1pdHMuZ2V0KGNvbW1pdDIucGFyZW50c1swXSk7XG4gICAgICB1cHNlcnQoY29tbWl0QXJyLCBjb21taXQyLCBuZXdDb21taXQpO1xuICAgIH1cbiAgfVxuICBjb21taXRBcnIgPSB1bmlxQnkoY29tbWl0QXJyLCAoYykgPT4gYy5pZCk7XG4gIHByZXR0eVByaW50Q29tbWl0SGlzdG9yeShjb21taXRBcnIpO1xufVxuX19uYW1lKHByZXR0eVByaW50Q29tbWl0SGlzdG9yeSwgXCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnlcIik7XG52YXIgcHJldHR5UHJpbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBsb2cuZGVidWcoc3RhdGUucmVjb3Jkcy5jb21taXRzKTtcbiAgY29uc3Qgbm9kZSA9IGdldENvbW1pdHNBcnJheSgpWzBdO1xuICBwcmV0dHlQcmludENvbW1pdEhpc3RvcnkoW25vZGVdKTtcbn0sIFwicHJldHR5UHJpbnRcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc3RhdGUucmVzZXQoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZ2V0QnJhbmNoZXNBc09iakFycmF5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY29uc3QgYnJhbmNoZXNBcnJheSA9IFsuLi5zdGF0ZS5yZWNvcmRzLmJyYW5jaENvbmZpZy52YWx1ZXMoKV0ubWFwKChicmFuY2hDb25maWcsIGkpID0+IHtcbiAgICBpZiAoYnJhbmNoQ29uZmlnLm9yZGVyICE9PSBudWxsICYmIGJyYW5jaENvbmZpZy5vcmRlciAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gYnJhbmNoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYnJhbmNoQ29uZmlnLFxuICAgICAgb3JkZXI6IHBhcnNlRmxvYXQoYDAuJHtpfWApXG4gICAgfTtcbiAgfSkuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKSkubWFwKCh7IG5hbWUgfSkgPT4gKHsgbmFtZSB9KSk7XG4gIHJldHVybiBicmFuY2hlc0FycmF5O1xufSwgXCJnZXRCcmFuY2hlc0FzT2JqQXJyYXlcIik7XG52YXIgZ2V0QnJhbmNoZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5icmFuY2hlcztcbn0sIFwiZ2V0QnJhbmNoZXNcIik7XG52YXIgZ2V0Q29tbWl0cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLmNvbW1pdHM7XG59LCBcImdldENvbW1pdHNcIik7XG52YXIgZ2V0Q29tbWl0c0FycmF5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY29uc3QgY29tbWl0QXJyID0gWy4uLnN0YXRlLnJlY29yZHMuY29tbWl0cy52YWx1ZXMoKV07XG4gIGNvbW1pdEFyci5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICBsb2cuZGVidWcoby5pZCk7XG4gIH0pO1xuICBjb21taXRBcnIuc29ydCgoYSwgYikgPT4gYS5zZXEgLSBiLnNlcSk7XG4gIHJldHVybiBjb21taXRBcnI7XG59LCBcImdldENvbW1pdHNBcnJheVwiKTtcbnZhciBnZXRDdXJyZW50QnJhbmNoID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuY3VyckJyYW5jaDtcbn0sIFwiZ2V0Q3VycmVudEJyYW5jaFwiKTtcbnZhciBnZXREaXJlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5kaXJlY3Rpb247XG59LCBcImdldERpcmVjdGlvblwiKTtcbnZhciBnZXRIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuaGVhZDtcbn0sIFwiZ2V0SGVhZFwiKTtcbnZhciBkYiA9IHtcbiAgY29tbWl0VHlwZSxcbiAgZ2V0Q29uZmlnOiBnZXRDb25maWczLFxuICBzZXREaXJlY3Rpb24sXG4gIHNldE9wdGlvbnMsXG4gIGdldE9wdGlvbnMsXG4gIGNvbW1pdCxcbiAgYnJhbmNoLFxuICBtZXJnZSxcbiAgY2hlcnJ5UGljayxcbiAgY2hlY2tvdXQsXG4gIC8vcmVzZXQsXG4gIHByZXR0eVByaW50LFxuICBjbGVhcjogY2xlYXIyLFxuICBnZXRCcmFuY2hlc0FzT2JqQXJyYXksXG4gIGdldEJyYW5jaGVzLFxuICBnZXRDb21taXRzLFxuICBnZXRDb21taXRzQXJyYXksXG4gIGdldEN1cnJlbnRCcmFuY2gsXG4gIGdldERpcmVjdGlvbixcbiAgZ2V0SGVhZCxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2l0L2dpdEdyYXBoUGFyc2VyLnRzXG52YXIgcG9wdWxhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhc3QsIGRiMikgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIyKTtcbiAgaWYgKGFzdC5kaXIpIHtcbiAgICBkYjIuc2V0RGlyZWN0aW9uKGFzdC5kaXIpO1xuICB9XG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFzdC5zdGF0ZW1lbnRzKSB7XG4gICAgcGFyc2VTdGF0ZW1lbnQoc3RhdGVtZW50LCBkYjIpO1xuICB9XG59LCBcInBvcHVsYXRlXCIpO1xudmFyIHBhcnNlU3RhdGVtZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RhdGVtZW50LCBkYjIpID0+IHtcbiAgY29uc3QgcGFyc2VycyA9IHtcbiAgICBDb21taXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0bXQpID0+IGRiMi5jb21taXQocGFyc2VDb21taXQoc3RtdCkpLCBcIkNvbW1pdFwiKSxcbiAgICBCcmFuY2g6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0bXQpID0+IGRiMi5icmFuY2gocGFyc2VCcmFuY2goc3RtdCkpLCBcIkJyYW5jaFwiKSxcbiAgICBNZXJnZTogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RtdCkgPT4gZGIyLm1lcmdlKHBhcnNlTWVyZ2Uoc3RtdCkpLCBcIk1lcmdlXCIpLFxuICAgIENoZWNrb3V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdG10KSA9PiBkYjIuY2hlY2tvdXQocGFyc2VDaGVja291dChzdG10KSksIFwiQ2hlY2tvdXRcIiksXG4gICAgQ2hlcnJ5UGlja2luZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3RtdCkgPT4gZGIyLmNoZXJyeVBpY2socGFyc2VDaGVycnlQaWNraW5nKHN0bXQpKSwgXCJDaGVycnlQaWNraW5nXCIpXG4gIH07XG4gIGNvbnN0IHBhcnNlcjIgPSBwYXJzZXJzW3N0YXRlbWVudC4kdHlwZV07XG4gIGlmIChwYXJzZXIyKSB7XG4gICAgcGFyc2VyMihzdGF0ZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHtzdGF0ZW1lbnQuJHR5cGV9YCk7XG4gIH1cbn0sIFwicGFyc2VTdGF0ZW1lbnRcIik7XG52YXIgcGFyc2VDb21taXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb21taXQyKSA9PiB7XG4gIGNvbnN0IGNvbW1pdERCID0ge1xuICAgIGlkOiBjb21taXQyLmlkLFxuICAgIG1zZzogY29tbWl0Mi5tZXNzYWdlID8/IFwiXCIsXG4gICAgdHlwZTogY29tbWl0Mi50eXBlICE9PSB2b2lkIDAgPyBjb21taXRUeXBlW2NvbW1pdDIudHlwZV0gOiBjb21taXRUeXBlLk5PUk1BTCxcbiAgICB0YWdzOiBjb21taXQyLnRhZ3MgPz8gdm9pZCAwXG4gIH07XG4gIHJldHVybiBjb21taXREQjtcbn0sIFwicGFyc2VDb21taXRcIik7XG52YXIgcGFyc2VCcmFuY2ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChicmFuY2gyKSA9PiB7XG4gIGNvbnN0IGJyYW5jaERCID0ge1xuICAgIG5hbWU6IGJyYW5jaDIubmFtZSxcbiAgICBvcmRlcjogYnJhbmNoMi5vcmRlciA/PyAwXG4gIH07XG4gIHJldHVybiBicmFuY2hEQjtcbn0sIFwicGFyc2VCcmFuY2hcIik7XG52YXIgcGFyc2VNZXJnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG1lcmdlMikgPT4ge1xuICBjb25zdCBtZXJnZURCID0ge1xuICAgIGJyYW5jaDogbWVyZ2UyLmJyYW5jaCxcbiAgICBpZDogbWVyZ2UyLmlkID8/IFwiXCIsXG4gICAgdHlwZTogbWVyZ2UyLnR5cGUgIT09IHZvaWQgMCA/IGNvbW1pdFR5cGVbbWVyZ2UyLnR5cGVdIDogdm9pZCAwLFxuICAgIHRhZ3M6IG1lcmdlMi50YWdzID8/IHZvaWQgMFxuICB9O1xuICByZXR1cm4gbWVyZ2VEQjtcbn0sIFwicGFyc2VNZXJnZVwiKTtcbnZhciBwYXJzZUNoZWNrb3V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY2hlY2tvdXQyKSA9PiB7XG4gIGNvbnN0IGJyYW5jaDIgPSBjaGVja291dDIuYnJhbmNoO1xuICByZXR1cm4gYnJhbmNoMjtcbn0sIFwicGFyc2VDaGVja291dFwiKTtcbnZhciBwYXJzZUNoZXJyeVBpY2tpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjaGVycnlQaWNraW5nKSA9PiB7XG4gIGNvbnN0IGNoZXJyeVBpY2tEQiA9IHtcbiAgICBpZDogY2hlcnJ5UGlja2luZy5pZCxcbiAgICB0YXJnZXRJZDogXCJcIixcbiAgICB0YWdzOiBjaGVycnlQaWNraW5nLnRhZ3M/Lmxlbmd0aCA9PT0gMCA/IHZvaWQgMCA6IGNoZXJyeVBpY2tpbmcudGFncyxcbiAgICBwYXJlbnQ6IGNoZXJyeVBpY2tpbmcucGFyZW50XG4gIH07XG4gIHJldHVybiBjaGVycnlQaWNrREI7XG59LCBcInBhcnNlQ2hlcnJ5UGlja2luZ1wiKTtcbnZhciBwYXJzZXIgPSB7XG4gIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHBhcnNlKFwiZ2l0R3JhcGhcIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICAgIHBvcHVsYXRlKGFzdCwgZGIpO1xuICB9LCBcInBhcnNlXCIpXG59O1xuaWYgKHZvaWQgMCkge1xuICBjb25zdCB7IGl0LCBleHBlY3QsIGRlc2NyaWJlIH0gPSB2b2lkIDA7XG4gIGNvbnN0IG1vY2tEQiA9IHtcbiAgICBjb21taXRUeXBlLFxuICAgIHNldERpcmVjdGlvbjogdmkuZm4oKSxcbiAgICBjb21taXQ6IHZpLmZuKCksXG4gICAgYnJhbmNoOiB2aS5mbigpLFxuICAgIG1lcmdlOiB2aS5mbigpLFxuICAgIGNoZXJyeVBpY2s6IHZpLmZuKCksXG4gICAgY2hlY2tvdXQ6IHZpLmZuKClcbiAgfTtcbiAgZGVzY3JpYmUoXCJHaXRHcmFwaCBQYXJzZXJcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgY29tbWl0IHN0YXRlbWVudFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb21taXQyID0ge1xuICAgICAgICAkdHlwZTogXCJDb21taXRcIixcbiAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICBtZXNzYWdlOiBcInRlc3RcIixcbiAgICAgICAgdGFnczogW1widGFnMVwiLCBcInRhZzJcIl0sXG4gICAgICAgIHR5cGU6IFwiTk9STUFMXCJcbiAgICAgIH07XG4gICAgICBwYXJzZVN0YXRlbWVudChjb21taXQyLCBtb2NrREIpO1xuICAgICAgZXhwZWN0KG1vY2tEQi5jb21taXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICBtc2c6IFwidGVzdFwiLFxuICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXSxcbiAgICAgICAgdHlwZTogMFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBicmFuY2ggc3RhdGVtZW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGJyYW5jaDIgPSB7XG4gICAgICAgICR0eXBlOiBcIkJyYW5jaFwiLFxuICAgICAgICBuYW1lOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICBvcmRlcjogMVxuICAgICAgfTtcbiAgICAgIHBhcnNlU3RhdGVtZW50KGJyYW5jaDIsIG1vY2tEQik7XG4gICAgICBleHBlY3QobW9ja0RCLmJyYW5jaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBuYW1lOiBcIm5ld0JyYW5jaFwiLCBvcmRlcjogMSB9KTtcbiAgICB9KTtcbiAgICBpdChcInNob3VsZCBwYXJzZSBhIGNoZWNrb3V0IHN0YXRlbWVudFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaGVja291dDIgPSB7XG4gICAgICAgICR0eXBlOiBcIkNoZWNrb3V0XCIsXG4gICAgICAgIGJyYW5jaDogXCJuZXdCcmFuY2hcIlxuICAgICAgfTtcbiAgICAgIHBhcnNlU3RhdGVtZW50KGNoZWNrb3V0MiwgbW9ja0RCKTtcbiAgICAgIGV4cGVjdChtb2NrREIuY2hlY2tvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFwibmV3QnJhbmNoXCIpO1xuICAgIH0pO1xuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgbWVyZ2Ugc3RhdGVtZW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lcmdlMiA9IHtcbiAgICAgICAgJHR5cGU6IFwiTWVyZ2VcIixcbiAgICAgICAgYnJhbmNoOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICB0eXBlOiBcIk5PUk1BTFwiXG4gICAgICB9O1xuICAgICAgcGFyc2VTdGF0ZW1lbnQobWVyZ2UyLCBtb2NrREIpO1xuICAgICAgZXhwZWN0KG1vY2tEQi5tZXJnZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBicmFuY2g6IFwibmV3QnJhbmNoXCIsXG4gICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgdGFnczogW1widGFnMVwiLCBcInRhZzJcIl0sXG4gICAgICAgIHR5cGU6IDBcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgY2hlcnJ5IHBpY2tpbmcgc3RhdGVtZW50XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGNoZXJyeVBpY2syID0ge1xuICAgICAgICAkdHlwZTogXCJDaGVycnlQaWNraW5nXCIsXG4gICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgdGFnczogW1widGFnMVwiLCBcInRhZzJcIl0sXG4gICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgIH07XG4gICAgICBwYXJzZVN0YXRlbWVudChjaGVycnlQaWNrMiwgbW9ja0RCKTtcbiAgICAgIGV4cGVjdChtb2NrREIuY2hlcnJ5UGljaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlwiLFxuICAgICAgICBwYXJlbnQ6IFwiMlwiLFxuICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBsYW5naXVtIGdlbmVyYXRlZCBnaXRHcmFwaCBhc3RcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgZHVtbXkgPSB7XG4gICAgICAgICR0eXBlOiBcIkdpdEdyYXBoXCIsXG4gICAgICAgIHN0YXRlbWVudHM6IFtdXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2l0R3JhcGhBc3QgPSB7XG4gICAgICAgICR0eXBlOiBcIkdpdEdyYXBoXCIsXG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkY29udGFpbmVyOiBkdW1teSxcbiAgICAgICAgICAgICR0eXBlOiBcIkNvbW1pdFwiLFxuICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJ0ZXN0XCIsXG4gICAgICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXSxcbiAgICAgICAgICAgIHR5cGU6IFwiTk9STUFMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRjb250YWluZXI6IGR1bW15LFxuICAgICAgICAgICAgJHR5cGU6IFwiQnJhbmNoXCIsXG4gICAgICAgICAgICBuYW1lOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICAgICAgb3JkZXI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRjb250YWluZXI6IGR1bW15LFxuICAgICAgICAgICAgJHR5cGU6IFwiTWVyZ2VcIixcbiAgICAgICAgICAgIGJyYW5jaDogXCJuZXdCcmFuY2hcIixcbiAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICAgICAgdHlwZTogXCJOT1JNQUxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJGNvbnRhaW5lcjogZHVtbXksXG4gICAgICAgICAgICAkdHlwZTogXCJDaGVja291dFwiLFxuICAgICAgICAgICAgYnJhbmNoOiBcIm5ld0JyYW5jaFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkY29udGFpbmVyOiBkdW1teSxcbiAgICAgICAgICAgICR0eXBlOiBcIkNoZXJyeVBpY2tpbmdcIixcbiAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICAgIHBvcHVsYXRlKGdpdEdyYXBoQXN0LCBtb2NrREIpO1xuICAgICAgZXhwZWN0KG1vY2tEQi5jb21taXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICBtc2c6IFwidGVzdFwiLFxuICAgICAgICB0YWdzOiBbXCJ0YWcxXCIsIFwidGFnMlwiXSxcbiAgICAgICAgdHlwZTogMFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja0RCLmJyYW5jaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBuYW1lOiBcIm5ld0JyYW5jaFwiLCBvcmRlcjogMSB9KTtcbiAgICAgIGV4cGVjdChtb2NrREIubWVyZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYnJhbmNoOiBcIm5ld0JyYW5jaFwiLFxuICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgIHRhZ3M6IFtcInRhZzFcIiwgXCJ0YWcyXCJdLFxuICAgICAgICB0eXBlOiAwXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtb2NrREIuY2hlY2tvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFwibmV3QnJhbmNoXCIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9naXRHcmFwaFJlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbnZhciBERUZBVUxUX0NPTkZJRyA9IGdldENvbmZpZzIoKTtcbnZhciBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIgPSBERUZBVUxUX0NPTkZJRz8uZ2l0R3JhcGg7XG52YXIgTEFZT1VUX09GRlNFVCA9IDEwO1xudmFyIENPTU1JVF9TVEVQID0gNDA7XG52YXIgUFggPSA0O1xudmFyIFBZID0gMjtcbnZhciBUSEVNRV9DT0xPUl9MSU1JVCA9IDg7XG52YXIgYnJhbmNoUG9zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBjb21taXRQb3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGRlZmF1bHRQb3MgPSAzMDtcbnZhciBhbGxDb21taXRzRGljdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgbGFuZXMgPSBbXTtcbnZhciBtYXhQb3MgPSAwO1xudmFyIGRpciA9IFwiTFJcIjtcbnZhciBjbGVhcjMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgYnJhbmNoUG9zLmNsZWFyKCk7XG4gIGNvbW1pdFBvcy5jbGVhcigpO1xuICBhbGxDb21taXRzRGljdC5jbGVhcigpO1xuICBtYXhQb3MgPSAwO1xuICBsYW5lcyA9IFtdO1xuICBkaXIgPSBcIkxSXCI7XG59LCBcImNsZWFyXCIpO1xudmFyIGRyYXdUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIGNvbnN0IHN2Z0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0ZXh0XCIpO1xuICBjb25zdCByb3dzID0gdHlwZW9mIHR4dCA9PT0gXCJzdHJpbmdcIiA/IHR4dC5zcGxpdCgvXFxcXG58XFxufDxiclxccypcXC8/Pi9naSkgOiB0eHQ7XG4gIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgY29uc3QgdHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInRzcGFuXCIpO1xuICAgIHRzcGFuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiZHlcIiwgXCIxZW1cIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJyb3dcIik7XG4gICAgdHNwYW4udGV4dENvbnRlbnQgPSByb3cudHJpbSgpO1xuICAgIHN2Z0xhYmVsLmFwcGVuZENoaWxkKHRzcGFuKTtcbiAgfSk7XG4gIHJldHVybiBzdmdMYWJlbDtcbn0sIFwiZHJhd1RleHRcIik7XG52YXIgZmluZENsb3Nlc3RQYXJlbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnRzKSA9PiB7XG4gIGxldCBjbG9zZXN0UGFyZW50O1xuICBsZXQgY29tcGFyaXNvbkZ1bmM7XG4gIGxldCB0YXJnZXRQb3NpdGlvbjtcbiAgaWYgKGRpciA9PT0gXCJCVFwiKSB7XG4gICAgY29tcGFyaXNvbkZ1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhLCBiKSA9PiBhIDw9IGIsIFwiY29tcGFyaXNvbkZ1bmNcIik7XG4gICAgdGFyZ2V0UG9zaXRpb24gPSBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBjb21wYXJpc29uRnVuYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGEsIGIpID0+IGEgPj0gYiwgXCJjb21wYXJpc29uRnVuY1wiKTtcbiAgICB0YXJnZXRQb3NpdGlvbiA9IDA7XG4gIH1cbiAgcGFyZW50cy5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnRQb3NpdGlvbiA9IGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PSBcIkJUXCIgPyBjb21taXRQb3MuZ2V0KHBhcmVudCk/LnkgOiBjb21taXRQb3MuZ2V0KHBhcmVudCk/Lng7XG4gICAgaWYgKHBhcmVudFBvc2l0aW9uICE9PSB2b2lkIDAgJiYgY29tcGFyaXNvbkZ1bmMocGFyZW50UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKSkge1xuICAgICAgY2xvc2VzdFBhcmVudCA9IHBhcmVudDtcbiAgICAgIHRhcmdldFBvc2l0aW9uID0gcGFyZW50UG9zaXRpb247XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNsb3Nlc3RQYXJlbnQ7XG59LCBcImZpbmRDbG9zZXN0UGFyZW50XCIpO1xudmFyIGZpbmRDbG9zZXN0UGFyZW50QlQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnRzKSA9PiB7XG4gIGxldCBjbG9zZXN0UGFyZW50ID0gXCJcIjtcbiAgbGV0IG1heFBvc2l0aW9uID0gSW5maW5pdHk7XG4gIHBhcmVudHMuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50UG9zaXRpb24gPSBjb21taXRQb3MuZ2V0KHBhcmVudCkueTtcbiAgICBpZiAocGFyZW50UG9zaXRpb24gPD0gbWF4UG9zaXRpb24pIHtcbiAgICAgIGNsb3Nlc3RQYXJlbnQgPSBwYXJlbnQ7XG4gICAgICBtYXhQb3NpdGlvbiA9IHBhcmVudFBvc2l0aW9uO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbG9zZXN0UGFyZW50IHx8IHZvaWQgMDtcbn0sIFwiZmluZENsb3Nlc3RQYXJlbnRCVFwiKTtcbnZhciBzZXRQYXJhbGxlbEJUUG9zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc29ydGVkS2V5cywgY29tbWl0cywgZGVmYXVsdFBvczIpID0+IHtcbiAgbGV0IGN1clBvcyA9IGRlZmF1bHRQb3MyO1xuICBsZXQgbWF4UG9zaXRpb24gPSBkZWZhdWx0UG9zMjtcbiAgY29uc3Qgcm9vdHMgPSBbXTtcbiAgc29ydGVkS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBjb21taXQyID0gY29tbWl0cy5nZXQoa2V5KTtcbiAgICBpZiAoIWNvbW1pdDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7a2V5fWApO1xuICAgIH1cbiAgICBpZiAoY29tbWl0Mi5wYXJlbnRzLmxlbmd0aCkge1xuICAgICAgY3VyUG9zID0gY2FsY3VsYXRlQ29tbWl0UG9zaXRpb24oY29tbWl0Mik7XG4gICAgICBtYXhQb3NpdGlvbiA9IE1hdGgubWF4KGN1clBvcywgbWF4UG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290cy5wdXNoKGNvbW1pdDIpO1xuICAgIH1cbiAgICBzZXRDb21taXRQb3NpdGlvbihjb21taXQyLCBjdXJQb3MpO1xuICB9KTtcbiAgY3VyUG9zID0gbWF4UG9zaXRpb247XG4gIHJvb3RzLmZvckVhY2goKGNvbW1pdDIpID0+IHtcbiAgICBzZXRSb290UG9zaXRpb24oY29tbWl0MiwgY3VyUG9zLCBkZWZhdWx0UG9zMik7XG4gIH0pO1xuICBzb3J0ZWRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGNvbW1pdDIgPSBjb21taXRzLmdldChrZXkpO1xuICAgIGlmIChjb21taXQyPy5wYXJlbnRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2xvc2VzdFBhcmVudCA9IGZpbmRDbG9zZXN0UGFyZW50QlQoY29tbWl0Mi5wYXJlbnRzKTtcbiAgICAgIGN1clBvcyA9IGNvbW1pdFBvcy5nZXQoY2xvc2VzdFBhcmVudCkueSAtIENPTU1JVF9TVEVQO1xuICAgICAgaWYgKGN1clBvcyA8PSBtYXhQb3NpdGlvbikge1xuICAgICAgICBtYXhQb3NpdGlvbiA9IGN1clBvcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHggPSBicmFuY2hQb3MuZ2V0KGNvbW1pdDIuYnJhbmNoKS5wb3M7XG4gICAgICBjb25zdCB5ID0gY3VyUG9zIC0gTEFZT1VUX09GRlNFVDtcbiAgICAgIGNvbW1pdFBvcy5zZXQoY29tbWl0Mi5pZCwgeyB4LCB5IH0pO1xuICAgIH1cbiAgfSk7XG59LCBcInNldFBhcmFsbGVsQlRQb3NcIik7XG52YXIgZmluZENsb3Nlc3RQYXJlbnRQb3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb21taXQyKSA9PiB7XG4gIGNvbnN0IGNsb3Nlc3RQYXJlbnQgPSBmaW5kQ2xvc2VzdFBhcmVudChjb21taXQyLnBhcmVudHMuZmlsdGVyKChwKSA9PiBwICE9PSBudWxsKSk7XG4gIGlmICghY2xvc2VzdFBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHtjb21taXQyLmlkfWApO1xuICB9XG4gIGNvbnN0IGNsb3Nlc3RQYXJlbnRQb3MgPSBjb21taXRQb3MuZ2V0KGNsb3Nlc3RQYXJlbnQpPy55O1xuICBpZiAoY2xvc2VzdFBhcmVudFBvcyA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDbG9zZXN0IHBhcmVudCBwb3NpdGlvbiBub3QgZm91bmQgZm9yIGNvbW1pdCAke2NvbW1pdDIuaWR9YCk7XG4gIH1cbiAgcmV0dXJuIGNsb3Nlc3RQYXJlbnRQb3M7XG59LCBcImZpbmRDbG9zZXN0UGFyZW50UG9zXCIpO1xudmFyIGNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MikgPT4ge1xuICBjb25zdCBjbG9zZXN0UGFyZW50UG9zID0gZmluZENsb3Nlc3RQYXJlbnRQb3MoY29tbWl0Mik7XG4gIHJldHVybiBjbG9zZXN0UGFyZW50UG9zICsgQ09NTUlUX1NURVA7XG59LCBcImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uXCIpO1xudmFyIHNldENvbW1pdFBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MiwgY3VyUG9zKSA9PiB7XG4gIGNvbnN0IGJyYW5jaDIgPSBicmFuY2hQb3MuZ2V0KGNvbW1pdDIuYnJhbmNoKTtcbiAgaWYgKCFicmFuY2gyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCcmFuY2ggbm90IGZvdW5kIGZvciBjb21taXQgJHtjb21taXQyLmlkfWApO1xuICB9XG4gIGNvbnN0IHggPSBicmFuY2gyLnBvcztcbiAgY29uc3QgeSA9IGN1clBvcyArIExBWU9VVF9PRkZTRVQ7XG4gIGNvbW1pdFBvcy5zZXQoY29tbWl0Mi5pZCwgeyB4LCB5IH0pO1xuICByZXR1cm4geyB4LCB5IH07XG59LCBcInNldENvbW1pdFBvc2l0aW9uXCIpO1xudmFyIHNldFJvb3RQb3NpdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbW1pdDIsIGN1clBvcywgZGVmYXVsdFBvczIpID0+IHtcbiAgY29uc3QgYnJhbmNoMiA9IGJyYW5jaFBvcy5nZXQoY29tbWl0Mi5icmFuY2gpO1xuICBpZiAoIWJyYW5jaDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke2NvbW1pdDIuaWR9YCk7XG4gIH1cbiAgY29uc3QgeSA9IGN1clBvcyArIGRlZmF1bHRQb3MyO1xuICBjb25zdCB4ID0gYnJhbmNoMi5wb3M7XG4gIGNvbW1pdFBvcy5zZXQoY29tbWl0Mi5pZCwgeyB4LCB5IH0pO1xufSwgXCJzZXRSb290UG9zaXRpb25cIik7XG52YXIgZHJhd0NvbW1pdEJ1bGxldCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGdCdWxsZXRzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgdHlwZUNsYXNzLCBicmFuY2hJbmRleCwgY29tbWl0U3ltYm9sVHlwZSkgPT4ge1xuICBpZiAoY29tbWl0U3ltYm9sVHlwZSA9PT0gY29tbWl0VHlwZS5ISUdITElHSFQpIHtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIGNvbW1pdFBvc2l0aW9uLnggLSAxMCkuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDEwKS5hdHRyKFwid2lkdGhcIiwgMjApLmF0dHIoXCJoZWlnaHRcIiwgMjApLmF0dHIoXG4gICAgICBcImNsYXNzXCIsXG4gICAgICBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gY29tbWl0LWhpZ2hsaWdodCR7YnJhbmNoSW5kZXggJSBUSEVNRV9DT0xPUl9MSU1JVH0gJHt0eXBlQ2xhc3N9LW91dGVyYFxuICAgICk7XG4gICAgZ0J1bGxldHMuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi54IC0gNikuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDYpLmF0dHIoXCJ3aWR0aFwiLCAxMikuYXR0cihcImhlaWdodFwiLCAxMikuYXR0cihcbiAgICAgIFwiY2xhc3NcIixcbiAgICAgIGBjb21taXQgJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaEluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9ICR7dHlwZUNsYXNzfS1pbm5lcmBcbiAgICApO1xuICB9IGVsc2UgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuQ0hFUlJZX1BJQ0spIHtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLngpLmF0dHIoXCJjeVwiLCBjb21taXRQb3NpdGlvbi55KS5hdHRyKFwiclwiLCAxMCkuYXR0cihcImNsYXNzXCIsIGBjb21taXQgJHtjb21taXQyLmlkfSAke3R5cGVDbGFzc31gKTtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLnggLSAzKS5hdHRyKFwiY3lcIiwgY29tbWl0UG9zaXRpb24ueSArIDIpLmF0dHIoXCJyXCIsIDIuNzUpLmF0dHIoXCJmaWxsXCIsIFwiI2ZmZlwiKS5hdHRyKFwiY2xhc3NcIiwgYGNvbW1pdCAke2NvbW1pdDIuaWR9ICR7dHlwZUNsYXNzfWApO1xuICAgIGdCdWxsZXRzLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgY29tbWl0UG9zaXRpb24ueCArIDMpLmF0dHIoXCJjeVwiLCBjb21taXRQb3NpdGlvbi55ICsgMikuYXR0cihcInJcIiwgMi43NSkuYXR0cihcImZpbGxcIiwgXCIjZmZmXCIpLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gJHt0eXBlQ2xhc3N9YCk7XG4gICAgZ0J1bGxldHMuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgY29tbWl0UG9zaXRpb24ueCArIDMpLmF0dHIoXCJ5MVwiLCBjb21taXRQb3NpdGlvbi55ICsgMSkuYXR0cihcIngyXCIsIGNvbW1pdFBvc2l0aW9uLngpLmF0dHIoXCJ5MlwiLCBjb21taXRQb3NpdGlvbi55IC0gNSkuYXR0cihcInN0cm9rZVwiLCBcIiNmZmZcIikuYXR0cihcImNsYXNzXCIsIGBjb21taXQgJHtjb21taXQyLmlkfSAke3R5cGVDbGFzc31gKTtcbiAgICBnQnVsbGV0cy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBjb21taXRQb3NpdGlvbi54IC0gMykuYXR0cihcInkxXCIsIGNvbW1pdFBvc2l0aW9uLnkgKyAxKS5hdHRyKFwieDJcIiwgY29tbWl0UG9zaXRpb24ueCkuYXR0cihcInkyXCIsIGNvbW1pdFBvc2l0aW9uLnkgLSA1KS5hdHRyKFwic3Ryb2tlXCIsIFwiI2ZmZlwiKS5hdHRyKFwiY2xhc3NcIiwgYGNvbW1pdCAke2NvbW1pdDIuaWR9ICR7dHlwZUNsYXNzfWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNpcmNsZSA9IGdCdWxsZXRzLmFwcGVuZChcImNpcmNsZVwiKTtcbiAgICBjaXJjbGUuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLngpO1xuICAgIGNpcmNsZS5hdHRyKFwiY3lcIiwgY29tbWl0UG9zaXRpb24ueSk7XG4gICAgY2lyY2xlLmF0dHIoXCJyXCIsIGNvbW1pdDIudHlwZSA9PT0gY29tbWl0VHlwZS5NRVJHRSA/IDkgOiAxMCk7XG4gICAgY2lyY2xlLmF0dHIoXCJjbGFzc1wiLCBgY29tbWl0ICR7Y29tbWl0Mi5pZH0gY29tbWl0JHticmFuY2hJbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUfWApO1xuICAgIGlmIChjb21taXRTeW1ib2xUeXBlID09PSBjb21taXRUeXBlLk1FUkdFKSB7XG4gICAgICBjb25zdCBjaXJjbGUyID0gZ0J1bGxldHMuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICAgICAgY2lyY2xlMi5hdHRyKFwiY3hcIiwgY29tbWl0UG9zaXRpb24ueCk7XG4gICAgICBjaXJjbGUyLmF0dHIoXCJjeVwiLCBjb21taXRQb3NpdGlvbi55KTtcbiAgICAgIGNpcmNsZTIuYXR0cihcInJcIiwgNik7XG4gICAgICBjaXJjbGUyLmF0dHIoXG4gICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgYGNvbW1pdCAke3R5cGVDbGFzc30gJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaEluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbW1pdFN5bWJvbFR5cGUgPT09IGNvbW1pdFR5cGUuUkVWRVJTRSkge1xuICAgICAgY29uc3QgY3Jvc3MgPSBnQnVsbGV0cy5hcHBlbmQoXCJwYXRoXCIpO1xuICAgICAgY3Jvc3MuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIGBNICR7Y29tbWl0UG9zaXRpb24ueCAtIDV9LCR7Y29tbWl0UG9zaXRpb24ueSAtIDV9TCR7Y29tbWl0UG9zaXRpb24ueCArIDV9LCR7Y29tbWl0UG9zaXRpb24ueSArIDV9TSR7Y29tbWl0UG9zaXRpb24ueCAtIDV9LCR7Y29tbWl0UG9zaXRpb24ueSArIDV9TCR7Y29tbWl0UG9zaXRpb24ueCArIDV9LCR7Y29tbWl0UG9zaXRpb24ueSAtIDV9YFxuICAgICAgKS5hdHRyKFwiY2xhc3NcIiwgYGNvbW1pdCAke3R5cGVDbGFzc30gJHtjb21taXQyLmlkfSBjb21taXQke2JyYW5jaEluZGV4ICUgVEhFTUVfQ09MT1JfTElNSVR9YCk7XG4gICAgfVxuICB9XG59LCBcImRyYXdDb21taXRCdWxsZXRcIik7XG52YXIgZHJhd0NvbW1pdExhYmVsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ0xhYmVscywgY29tbWl0MiwgY29tbWl0UG9zaXRpb24sIHBvcykgPT4ge1xuICBpZiAoY29tbWl0Mi50eXBlICE9PSBjb21taXRUeXBlLkNIRVJSWV9QSUNLICYmIChjb21taXQyLmN1c3RvbUlkICYmIGNvbW1pdDIudHlwZSA9PT0gY29tbWl0VHlwZS5NRVJHRSB8fCBjb21taXQyLnR5cGUgIT09IGNvbW1pdFR5cGUuTUVSR0UpICYmIERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMj8uc2hvd0NvbW1pdExhYmVsKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGdMYWJlbHMuYXBwZW5kKFwiZ1wiKTtcbiAgICBjb25zdCBsYWJlbEJrZyA9IHdyYXBwZXIuaW5zZXJ0KFwicmVjdFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJjb21taXQtbGFiZWwtYmtnXCIpO1xuICAgIGNvbnN0IHRleHQgPSB3cmFwcGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgcG9zKS5hdHRyKFwieVwiLCBjb21taXRQb3NpdGlvbi55ICsgMjUpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1sYWJlbFwiKS50ZXh0KGNvbW1pdDIuaWQpO1xuICAgIGNvbnN0IGJib3ggPSB0ZXh0Lm5vZGUoKT8uZ2V0QkJveCgpO1xuICAgIGlmIChiYm94KSB7XG4gICAgICBsYWJlbEJrZy5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi5wb3NXaXRoT2Zmc2V0IC0gYmJveC53aWR0aCAvIDIgLSBQWSkuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSArIDEzLjUpLmF0dHIoXCJ3aWR0aFwiLCBiYm94LndpZHRoICsgMiAqIFBZKS5hdHRyKFwiaGVpZ2h0XCIsIGJib3guaGVpZ2h0ICsgMiAqIFBZKTtcbiAgICAgIGlmIChkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIikge1xuICAgICAgICBsYWJlbEJrZy5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi54IC0gKGJib3gud2lkdGggKyA0ICogUFggKyA1KSkuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDEyKTtcbiAgICAgICAgdGV4dC5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi54IC0gKGJib3gud2lkdGggKyA0ICogUFgpKS5hdHRyKFwieVwiLCBjb21taXRQb3NpdGlvbi55ICsgYmJveC5oZWlnaHQgLSAxMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0LmF0dHIoXCJ4XCIsIGNvbW1pdFBvc2l0aW9uLnBvc1dpdGhPZmZzZXQgLSBiYm94LndpZHRoIC8gMik7XG4gICAgICB9XG4gICAgICBpZiAoREVGQVVMVF9HSVRHUkFQSF9DT05GSUcyLnJvdGF0ZUNvbW1pdExhYmVsKSB7XG4gICAgICAgIGlmIChkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIikge1xuICAgICAgICAgIHRleHQuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInJvdGF0ZSgtNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLCBcIiArIGNvbW1pdFBvc2l0aW9uLnkgKyBcIilcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgbGFiZWxCa2cuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInJvdGF0ZSgtNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLCBcIiArIGNvbW1pdFBvc2l0aW9uLnkgKyBcIilcIlxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgcl94ID0gLTcuNSAtIChiYm94LndpZHRoICsgMTApIC8gMjUgKiA5LjU7XG4gICAgICAgICAgY29uc3Qgcl95ID0gMTAgKyBiYm94LndpZHRoIC8gMjUgKiA4LjU7XG4gICAgICAgICAgd3JhcHBlci5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgcl94ICsgXCIsIFwiICsgcl95ICsgXCIpIHJvdGF0ZSgtNDUsIFwiICsgcG9zICsgXCIsIFwiICsgY29tbWl0UG9zaXRpb24ueSArIFwiKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSwgXCJkcmF3Q29tbWl0TGFiZWxcIik7XG52YXIgZHJhd0NvbW1pdFRhZ3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChnTGFiZWxzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgcG9zKSA9PiB7XG4gIGlmIChjb21taXQyLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgIGxldCB5T2Zmc2V0ID0gMDtcbiAgICBsZXQgbWF4VGFnQmJveFdpZHRoID0gMDtcbiAgICBsZXQgbWF4VGFnQmJveEhlaWdodCA9IDA7XG4gICAgY29uc3QgdGFnRWxlbWVudHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIG9mIGNvbW1pdDIudGFncy5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IHJlY3QgPSBnTGFiZWxzLmluc2VydChcInBvbHlnb25cIik7XG4gICAgICBjb25zdCBob2xlID0gZ0xhYmVscy5hcHBlbmQoXCJjaXJjbGVcIik7XG4gICAgICBjb25zdCB0YWcgPSBnTGFiZWxzLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29tbWl0UG9zaXRpb24ueSAtIDE2IC0geU9mZnNldCkuYXR0cihcImNsYXNzXCIsIFwidGFnLWxhYmVsXCIpLnRleHQodGFnVmFsdWUpO1xuICAgICAgY29uc3QgdGFnQmJveCA9IHRhZy5ub2RlKCk/LmdldEJCb3goKTtcbiAgICAgIGlmICghdGFnQmJveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWcgYmJveCBub3QgZm91bmRcIik7XG4gICAgICB9XG4gICAgICBtYXhUYWdCYm94V2lkdGggPSBNYXRoLm1heChtYXhUYWdCYm94V2lkdGgsIHRhZ0Jib3gud2lkdGgpO1xuICAgICAgbWF4VGFnQmJveEhlaWdodCA9IE1hdGgubWF4KG1heFRhZ0Jib3hIZWlnaHQsIHRhZ0Jib3guaGVpZ2h0KTtcbiAgICAgIHRhZy5hdHRyKFwieFwiLCBjb21taXRQb3NpdGlvbi5wb3NXaXRoT2Zmc2V0IC0gdGFnQmJveC53aWR0aCAvIDIpO1xuICAgICAgdGFnRWxlbWVudHMucHVzaCh7XG4gICAgICAgIHRhZyxcbiAgICAgICAgaG9sZSxcbiAgICAgICAgcmVjdCxcbiAgICAgICAgeU9mZnNldFxuICAgICAgfSk7XG4gICAgICB5T2Zmc2V0ICs9IDIwO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgdGFnLCBob2xlLCByZWN0LCB5T2Zmc2V0OiB5T2Zmc2V0MiB9IG9mIHRhZ0VsZW1lbnRzKSB7XG4gICAgICBjb25zdCBoMiA9IG1heFRhZ0Jib3hIZWlnaHQgLyAyO1xuICAgICAgY29uc3QgbHkgPSBjb21taXRQb3NpdGlvbi55IC0gMTkuMiAtIHlPZmZzZXQyO1xuICAgICAgcmVjdC5hdHRyKFwiY2xhc3NcIiwgXCJ0YWctbGFiZWwtYmtnXCIpLmF0dHIoXG4gICAgICAgIFwicG9pbnRzXCIsXG4gICAgICAgIGBcbiAgICAgICR7cG9zIC0gbWF4VGFnQmJveFdpZHRoIC8gMiAtIFBYIC8gMn0sJHtseSArIFBZfSAgXG4gICAgICAke3BvcyAtIG1heFRhZ0Jib3hXaWR0aCAvIDIgLSBQWCAvIDJ9LCR7bHkgLSBQWX1cbiAgICAgICR7Y29tbWl0UG9zaXRpb24ucG9zV2l0aE9mZnNldCAtIG1heFRhZ0Jib3hXaWR0aCAvIDIgLSBQWH0sJHtseSAtIGgyIC0gUFl9XG4gICAgICAke2NvbW1pdFBvc2l0aW9uLnBvc1dpdGhPZmZzZXQgKyBtYXhUYWdCYm94V2lkdGggLyAyICsgUFh9LCR7bHkgLSBoMiAtIFBZfVxuICAgICAgJHtjb21taXRQb3NpdGlvbi5wb3NXaXRoT2Zmc2V0ICsgbWF4VGFnQmJveFdpZHRoIC8gMiArIFBYfSwke2x5ICsgaDIgKyBQWX1cbiAgICAgICR7Y29tbWl0UG9zaXRpb24ucG9zV2l0aE9mZnNldCAtIG1heFRhZ0Jib3hXaWR0aCAvIDIgLSBQWH0sJHtseSArIGgyICsgUFl9YFxuICAgICAgKTtcbiAgICAgIGhvbGUuYXR0cihcImN5XCIsIGx5KS5hdHRyKFwiY3hcIiwgcG9zIC0gbWF4VGFnQmJveFdpZHRoIC8gMiArIFBYIC8gMikuYXR0cihcInJcIiwgMS41KS5hdHRyKFwiY2xhc3NcIiwgXCJ0YWctaG9sZVwiKTtcbiAgICAgIGlmIChkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIikge1xuICAgICAgICBjb25zdCB5T3JpZ2luID0gcG9zICsgeU9mZnNldDI7XG4gICAgICAgIHJlY3QuYXR0cihcImNsYXNzXCIsIFwidGFnLWxhYmVsLWJrZ1wiKS5hdHRyKFxuICAgICAgICAgIFwicG9pbnRzXCIsXG4gICAgICAgICAgYFxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnh9LCR7eU9yaWdpbiArIDJ9XG4gICAgICAgICR7Y29tbWl0UG9zaXRpb24ueH0sJHt5T3JpZ2luIC0gMn1cbiAgICAgICAgJHtjb21taXRQb3NpdGlvbi54ICsgTEFZT1VUX09GRlNFVH0sJHt5T3JpZ2luIC0gaDIgLSAyfVxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnggKyBMQVlPVVRfT0ZGU0VUICsgbWF4VGFnQmJveFdpZHRoICsgNH0sJHt5T3JpZ2luIC0gaDIgLSAyfVxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnggKyBMQVlPVVRfT0ZGU0VUICsgbWF4VGFnQmJveFdpZHRoICsgNH0sJHt5T3JpZ2luICsgaDIgKyAyfVxuICAgICAgICAke2NvbW1pdFBvc2l0aW9uLnggKyBMQVlPVVRfT0ZGU0VUfSwke3lPcmlnaW4gKyBoMiArIDJ9YFxuICAgICAgICApLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgXCIgKyBjb21taXRQb3NpdGlvbi54ICsgXCIsXCIgKyBwb3MgKyBcIilcIik7XG4gICAgICAgIGhvbGUuYXR0cihcImN4XCIsIGNvbW1pdFBvc2l0aW9uLnggKyBQWCAvIDIpLmF0dHIoXCJjeVwiLCB5T3JpZ2luKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDEyLDEyKSByb3RhdGUoNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLFwiICsgcG9zICsgXCIpXCIpO1xuICAgICAgICB0YWcuYXR0cihcInhcIiwgY29tbWl0UG9zaXRpb24ueCArIDUpLmF0dHIoXCJ5XCIsIHlPcmlnaW4gKyAzKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsIFwiICsgY29tbWl0UG9zaXRpb24ueCArIFwiLFwiICsgcG9zICsgXCIpXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSwgXCJkcmF3Q29tbWl0VGFnc1wiKTtcbnZhciBnZXRDb21taXRDbGFzc1R5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb21taXQyKSA9PiB7XG4gIGNvbnN0IGNvbW1pdFN5bWJvbFR5cGUgPSBjb21taXQyLmN1c3RvbVR5cGUgPz8gY29tbWl0Mi50eXBlO1xuICBzd2l0Y2ggKGNvbW1pdFN5bWJvbFR5cGUpIHtcbiAgICBjYXNlIGNvbW1pdFR5cGUuTk9STUFMOlxuICAgICAgcmV0dXJuIFwiY29tbWl0LW5vcm1hbFwiO1xuICAgIGNhc2UgY29tbWl0VHlwZS5SRVZFUlNFOlxuICAgICAgcmV0dXJuIFwiY29tbWl0LXJldmVyc2VcIjtcbiAgICBjYXNlIGNvbW1pdFR5cGUuSElHSExJR0hUOlxuICAgICAgcmV0dXJuIFwiY29tbWl0LWhpZ2hsaWdodFwiO1xuICAgIGNhc2UgY29tbWl0VHlwZS5NRVJHRTpcbiAgICAgIHJldHVybiBcImNvbW1pdC1tZXJnZVwiO1xuICAgIGNhc2UgY29tbWl0VHlwZS5DSEVSUllfUElDSzpcbiAgICAgIHJldHVybiBcImNvbW1pdC1jaGVycnktcGlja1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJjb21taXQtbm9ybWFsXCI7XG4gIH1cbn0sIFwiZ2V0Q29tbWl0Q2xhc3NUeXBlXCIpO1xudmFyIGNhbGN1bGF0ZVBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MiwgZGlyMiwgcG9zLCBjb21taXRQb3MyKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRDb21taXRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xuICBpZiAoY29tbWl0Mi5wYXJlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjbG9zZXN0UGFyZW50ID0gZmluZENsb3Nlc3RQYXJlbnQoY29tbWl0Mi5wYXJlbnRzKTtcbiAgICBpZiAoY2xvc2VzdFBhcmVudCkge1xuICAgICAgY29uc3QgcGFyZW50UG9zaXRpb24gPSBjb21taXRQb3MyLmdldChjbG9zZXN0UGFyZW50KSA/PyBkZWZhdWx0Q29tbWl0UG9zaXRpb247XG4gICAgICBpZiAoZGlyMiA9PT0gXCJUQlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRQb3NpdGlvbi55ICsgQ09NTUlUX1NURVA7XG4gICAgICB9IGVsc2UgaWYgKGRpcjIgPT09IFwiQlRcIikge1xuICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSBjb21taXRQb3MyLmdldChjb21taXQyLmlkKSA/PyBkZWZhdWx0Q29tbWl0UG9zaXRpb247XG4gICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb24ueSAtIENPTU1JVF9TVEVQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFBvc2l0aW9uLnggKyBDT01NSVRfU1RFUDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRpcjIgPT09IFwiVEJcIikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQb3M7XG4gICAgfSBlbHNlIGlmIChkaXIyID09PSBcIkJUXCIpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGNvbW1pdFBvczIuZ2V0KGNvbW1pdDIuaWQpID8/IGRlZmF1bHRDb21taXRQb3NpdGlvbjtcbiAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb24ueSAtIENPTU1JVF9TVEVQO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59LCBcImNhbGN1bGF0ZVBvc2l0aW9uXCIpO1xudmFyIGdldENvbW1pdFBvc2l0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29tbWl0MiwgcG9zLCBpc1BhcmFsbGVsQ29tbWl0cykgPT4ge1xuICBjb25zdCBwb3NXaXRoT2Zmc2V0ID0gZGlyID09PSBcIkJUXCIgJiYgaXNQYXJhbGxlbENvbW1pdHMgPyBwb3MgOiBwb3MgKyBMQVlPVVRfT0ZGU0VUO1xuICBjb25zdCB5ID0gZGlyID09PSBcIlRCXCIgfHwgZGlyID09PSBcIkJUXCIgPyBwb3NXaXRoT2Zmc2V0IDogYnJhbmNoUG9zLmdldChjb21taXQyLmJyYW5jaCk/LnBvcztcbiAgY29uc3QgeCA9IGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiID8gYnJhbmNoUG9zLmdldChjb21taXQyLmJyYW5jaCk/LnBvcyA6IHBvc1dpdGhPZmZzZXQ7XG4gIGlmICh4ID09PSB2b2lkIDAgfHwgeSA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiB3ZXJlIHVuZGVmaW5lZCBmb3IgY29tbWl0ICR7Y29tbWl0Mi5pZH1gKTtcbiAgfVxuICByZXR1cm4geyB4LCB5LCBwb3NXaXRoT2Zmc2V0IH07XG59LCBcImdldENvbW1pdFBvc2l0aW9uXCIpO1xudmFyIGRyYXdDb21taXRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3ZnLCBjb21taXRzLCBtb2RpZnlHcmFwaCkgPT4ge1xuICBpZiAoIURFRkFVTFRfR0lUR1JBUEhfQ09ORklHMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgZ0J1bGxldHMgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjb21taXQtYnVsbGV0c1wiKTtcbiAgY29uc3QgZ0xhYmVscyA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1sYWJlbHNcIik7XG4gIGxldCBwb3MgPSBkaXIgPT09IFwiVEJcIiB8fCBkaXIgPT09IFwiQlRcIiA/IGRlZmF1bHRQb3MgOiAwO1xuICBjb25zdCBrZXlzID0gWy4uLmNvbW1pdHMua2V5cygpXTtcbiAgY29uc3QgaXNQYXJhbGxlbENvbW1pdHMgPSBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzI/LnBhcmFsbGVsQ29tbWl0cyA/PyBmYWxzZTtcbiAgY29uc3Qgc29ydEtleXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc2VxQSA9IGNvbW1pdHMuZ2V0KGEpPy5zZXE7XG4gICAgY29uc3Qgc2VxQiA9IGNvbW1pdHMuZ2V0KGIpPy5zZXE7XG4gICAgcmV0dXJuIHNlcUEgIT09IHZvaWQgMCAmJiBzZXFCICE9PSB2b2lkIDAgPyBzZXFBIC0gc2VxQiA6IDA7XG4gIH0sIFwic29ydEtleXNcIik7XG4gIGxldCBzb3J0ZWRLZXlzID0ga2V5cy5zb3J0KHNvcnRLZXlzKTtcbiAgaWYgKGRpciA9PT0gXCJCVFwiKSB7XG4gICAgaWYgKGlzUGFyYWxsZWxDb21taXRzKSB7XG4gICAgICBzZXRQYXJhbGxlbEJUUG9zKHNvcnRlZEtleXMsIGNvbW1pdHMsIHBvcyk7XG4gICAgfVxuICAgIHNvcnRlZEtleXMgPSBzb3J0ZWRLZXlzLnJldmVyc2UoKTtcbiAgfVxuICBzb3J0ZWRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGNvbW1pdDIgPSBjb21taXRzLmdldChrZXkpO1xuICAgIGlmICghY29tbWl0Mikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtrZXl9YCk7XG4gICAgfVxuICAgIGlmIChpc1BhcmFsbGVsQ29tbWl0cykge1xuICAgICAgcG9zID0gY2FsY3VsYXRlUG9zaXRpb24oY29tbWl0MiwgZGlyLCBwb3MsIGNvbW1pdFBvcyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1pdFBvc2l0aW9uID0gZ2V0Q29tbWl0UG9zaXRpb24oY29tbWl0MiwgcG9zLCBpc1BhcmFsbGVsQ29tbWl0cyk7XG4gICAgaWYgKG1vZGlmeUdyYXBoKSB7XG4gICAgICBjb25zdCB0eXBlQ2xhc3MgPSBnZXRDb21taXRDbGFzc1R5cGUoY29tbWl0Mik7XG4gICAgICBjb25zdCBjb21taXRTeW1ib2xUeXBlID0gY29tbWl0Mi5jdXN0b21UeXBlID8/IGNvbW1pdDIudHlwZTtcbiAgICAgIGNvbnN0IGJyYW5jaEluZGV4ID0gYnJhbmNoUG9zLmdldChjb21taXQyLmJyYW5jaCk/LmluZGV4ID8/IDA7XG4gICAgICBkcmF3Q29tbWl0QnVsbGV0KGdCdWxsZXRzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgdHlwZUNsYXNzLCBicmFuY2hJbmRleCwgY29tbWl0U3ltYm9sVHlwZSk7XG4gICAgICBkcmF3Q29tbWl0TGFiZWwoZ0xhYmVscywgY29tbWl0MiwgY29tbWl0UG9zaXRpb24sIHBvcyk7XG4gICAgICBkcmF3Q29tbWl0VGFncyhnTGFiZWxzLCBjb21taXQyLCBjb21taXRQb3NpdGlvbiwgcG9zKTtcbiAgICB9XG4gICAgaWYgKGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiKSB7XG4gICAgICBjb21taXRQb3Muc2V0KGNvbW1pdDIuaWQsIHsgeDogY29tbWl0UG9zaXRpb24ueCwgeTogY29tbWl0UG9zaXRpb24ucG9zV2l0aE9mZnNldCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0UG9zLnNldChjb21taXQyLmlkLCB7IHg6IGNvbW1pdFBvc2l0aW9uLnBvc1dpdGhPZmZzZXQsIHk6IGNvbW1pdFBvc2l0aW9uLnkgfSk7XG4gICAgfVxuICAgIHBvcyA9IGRpciA9PT0gXCJCVFwiICYmIGlzUGFyYWxsZWxDb21taXRzID8gcG9zICsgQ09NTUlUX1NURVAgOiBwb3MgKyBDT01NSVRfU1RFUCArIExBWU9VVF9PRkZTRVQ7XG4gICAgaWYgKHBvcyA+IG1heFBvcykge1xuICAgICAgbWF4UG9zID0gcG9zO1xuICAgIH1cbiAgfSk7XG59LCBcImRyYXdDb21taXRzXCIpO1xudmFyIHNob3VsZFJlcm91dGVBcnJvdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbW1pdEEsIGNvbW1pdEIsIHAxLCBwMiwgYWxsQ29tbWl0cykgPT4ge1xuICBjb25zdCBjb21taXRCSXNGdXJ0aGVzdCA9IGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiID8gcDEueCA8IHAyLnggOiBwMS55IDwgcDIueTtcbiAgY29uc3QgYnJhbmNoVG9HZXRDdXJ2ZSA9IGNvbW1pdEJJc0Z1cnRoZXN0ID8gY29tbWl0Qi5icmFuY2ggOiBjb21taXRBLmJyYW5jaDtcbiAgY29uc3QgaXNPbkJyYW5jaFRvR2V0Q3VydmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4KSA9PiB4LmJyYW5jaCA9PT0gYnJhbmNoVG9HZXRDdXJ2ZSwgXCJpc09uQnJhbmNoVG9HZXRDdXJ2ZVwiKTtcbiAgY29uc3QgaXNCZXR3ZWVuQ29tbWl0cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHguc2VxID4gY29tbWl0QS5zZXEgJiYgeC5zZXEgPCBjb21taXRCLnNlcSwgXCJpc0JldHdlZW5Db21taXRzXCIpO1xuICByZXR1cm4gWy4uLmFsbENvbW1pdHMudmFsdWVzKCldLnNvbWUoKGNvbW1pdFgpID0+IHtcbiAgICByZXR1cm4gaXNCZXR3ZWVuQ29tbWl0cyhjb21taXRYKSAmJiBpc09uQnJhbmNoVG9HZXRDdXJ2ZShjb21taXRYKTtcbiAgfSk7XG59LCBcInNob3VsZFJlcm91dGVBcnJvd1wiKTtcbnZhciBmaW5kTGFuZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHkxLCB5MiwgZGVwdGggPSAwKSA9PiB7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHkxICsgTWF0aC5hYnMoeTEgLSB5MikgLyAyO1xuICBpZiAoZGVwdGggPiA1KSB7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuICBjb25zdCBvayA9IGxhbmVzLmV2ZXJ5KChsYW5lKSA9PiBNYXRoLmFicyhsYW5lIC0gY2FuZGlkYXRlKSA+PSAxMCk7XG4gIGlmIChvaykge1xuICAgIGxhbmVzLnB1c2goY2FuZGlkYXRlKTtcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG4gIGNvbnN0IGRpZmYgPSBNYXRoLmFicyh5MSAtIHkyKTtcbiAgcmV0dXJuIGZpbmRMYW5lKHkxLCB5MiAtIGRpZmYgLyA1LCBkZXB0aCArIDEpO1xufSwgXCJmaW5kTGFuZVwiKTtcbnZhciBkcmF3QXJyb3cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmcsIGNvbW1pdEEsIGNvbW1pdEIsIGFsbENvbW1pdHMpID0+IHtcbiAgY29uc3QgcDEgPSBjb21taXRQb3MuZ2V0KGNvbW1pdEEuaWQpO1xuICBjb25zdCBwMiA9IGNvbW1pdFBvcy5nZXQoY29tbWl0Qi5pZCk7XG4gIGlmIChwMSA9PT0gdm9pZCAwIHx8IHAyID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1pdCBwb3NpdGlvbnMgbm90IGZvdW5kIGZvciBjb21taXRzICR7Y29tbWl0QS5pZH0gYW5kICR7Y29tbWl0Qi5pZH1gKTtcbiAgfVxuICBjb25zdCBhcnJvd05lZWRzUmVyb3V0aW5nID0gc2hvdWxkUmVyb3V0ZUFycm93KGNvbW1pdEEsIGNvbW1pdEIsIHAxLCBwMiwgYWxsQ29tbWl0cyk7XG4gIGxldCBhcmMgPSBcIlwiO1xuICBsZXQgYXJjMiA9IFwiXCI7XG4gIGxldCByYWRpdXMgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3MuZ2V0KGNvbW1pdEIuYnJhbmNoKT8uaW5kZXg7XG4gIGlmIChjb21taXRCLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgY29tbWl0QS5pZCAhPT0gY29tbWl0Qi5wYXJlbnRzWzBdKSB7XG4gICAgY29sb3JDbGFzc051bSA9IGJyYW5jaFBvcy5nZXQoY29tbWl0QS5icmFuY2gpPy5pbmRleDtcbiAgfVxuICBsZXQgbGluZURlZjtcbiAgaWYgKGFycm93TmVlZHNSZXJvdXRpbmcpIHtcbiAgICBhcmMgPSBcIkEgMTAgMTAsIDAsIDAsIDAsXCI7XG4gICAgYXJjMiA9IFwiQSAxMCAxMCwgMCwgMCwgMSxcIjtcbiAgICByYWRpdXMgPSAxMDtcbiAgICBvZmZzZXQgPSAxMDtcbiAgICBjb25zdCBsaW5lWSA9IHAxLnkgPCBwMi55ID8gZmluZExhbmUocDEueSwgcDIueSkgOiBmaW5kTGFuZShwMi55LCBwMS55KTtcbiAgICBjb25zdCBsaW5lWCA9IHAxLnggPCBwMi54ID8gZmluZExhbmUocDEueCwgcDIueCkgOiBmaW5kTGFuZShwMi54LCBwMS54KTtcbiAgICBpZiAoZGlyID09PSBcIlRCXCIpIHtcbiAgICAgIGlmIChwMS54IDwgcDIueCkge1xuICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtsaW5lWCAtIHJhZGl1c30gJHtwMS55fSAke2FyYzJ9ICR7bGluZVh9ICR7cDEueSArIG9mZnNldH0gTCAke2xpbmVYfSAke3AyLnkgLSByYWRpdXN9ICR7YXJjfSAke2xpbmVYICsgb2Zmc2V0fSAke3AyLnl9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3MuZ2V0KGNvbW1pdEEuYnJhbmNoKT8uaW5kZXg7XG4gICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke2xpbmVYICsgcmFkaXVzfSAke3AxLnl9ICR7YXJjfSAke2xpbmVYfSAke3AxLnkgKyBvZmZzZXR9IEwgJHtsaW5lWH0gJHtwMi55IC0gcmFkaXVzfSAke2FyYzJ9ICR7bGluZVggLSBvZmZzZXR9ICR7cDIueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlyID09PSBcIkJUXCIpIHtcbiAgICAgIGlmIChwMS54IDwgcDIueCkge1xuICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtsaW5lWCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtsaW5lWH0gJHtwMS55IC0gb2Zmc2V0fSBMICR7bGluZVh9ICR7cDIueSArIHJhZGl1c30gJHthcmMyfSAke2xpbmVYICsgb2Zmc2V0fSAke3AyLnl9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbG9yQ2xhc3NOdW0gPSBicmFuY2hQb3MuZ2V0KGNvbW1pdEEuYnJhbmNoKT8uaW5kZXg7XG4gICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke2xpbmVYICsgcmFkaXVzfSAke3AxLnl9ICR7YXJjMn0gJHtsaW5lWH0gJHtwMS55IC0gb2Zmc2V0fSBMICR7bGluZVh9ICR7cDIueSArIHJhZGl1c30gJHthcmN9ICR7bGluZVggLSBvZmZzZXR9ICR7cDIueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocDEueSA8IHAyLnkpIHtcbiAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtsaW5lWSAtIHJhZGl1c30gJHthcmN9ICR7cDEueCArIG9mZnNldH0gJHtsaW5lWX0gTCAke3AyLnggLSByYWRpdXN9ICR7bGluZVl9ICR7YXJjMn0gJHtwMi54fSAke2xpbmVZICsgb2Zmc2V0fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckNsYXNzTnVtID0gYnJhbmNoUG9zLmdldChjb21taXRBLmJyYW5jaCk/LmluZGV4O1xuICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtwMS54fSAke2xpbmVZICsgcmFkaXVzfSAke2FyYzJ9ICR7cDEueCArIG9mZnNldH0gJHtsaW5lWX0gTCAke3AyLnggLSByYWRpdXN9ICR7bGluZVl9ICR7YXJjfSAke3AyLnh9ICR7bGluZVkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXJjID0gXCJBIDIwIDIwLCAwLCAwLCAwLFwiO1xuICAgIGFyYzIgPSBcIkEgMjAgMjAsIDAsIDAsIDEsXCI7XG4gICAgcmFkaXVzID0gMjA7XG4gICAgb2Zmc2V0ID0gMjA7XG4gICAgaWYgKGRpciA9PT0gXCJUQlwiKSB7XG4gICAgICBpZiAocDEueCA8IHAyLngpIHtcbiAgICAgICAgaWYgKGNvbW1pdEIudHlwZSA9PT0gY29tbWl0VHlwZS5NRVJHRSAmJiBjb21taXRBLmlkICE9PSBjb21taXRCLnBhcmVudHNbMF0pIHtcbiAgICAgICAgICBsaW5lRGVmID0gYE0gJHtwMS54fSAke3AxLnl9IEwgJHtwMS54fSAke3AyLnkgLSByYWRpdXN9ICR7YXJjfSAke3AxLnggKyBvZmZzZXR9ICR7cDIueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnggLSByYWRpdXN9ICR7cDEueX0gJHthcmMyfSAke3AyLnh9ICR7cDEueSArIG9mZnNldH0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocDEueCA+IHAyLngpIHtcbiAgICAgICAgYXJjID0gXCJBIDIwIDIwLCAwLCAwLCAwLFwiO1xuICAgICAgICBhcmMyID0gXCJBIDIwIDIwLCAwLCAwLCAxLFwiO1xuICAgICAgICByYWRpdXMgPSAyMDtcbiAgICAgICAgb2Zmc2V0ID0gMjA7XG4gICAgICAgIGlmIChjb21taXRCLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgY29tbWl0QS5pZCAhPT0gY29tbWl0Qi5wYXJlbnRzWzBdKSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55IC0gcmFkaXVzfSAke2FyYzJ9ICR7cDEueCAtIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCArIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgKyBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHAxLnggPT09IHAyLngpIHtcbiAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXIgPT09IFwiQlRcIikge1xuICAgICAgaWYgKHAxLnggPCBwMi54KSB7XG4gICAgICAgIGlmIChjb21taXRCLnR5cGUgPT09IGNvbW1pdFR5cGUuTUVSR0UgJiYgY29tbWl0QS5pZCAhPT0gY29tbWl0Qi5wYXJlbnRzWzBdKSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55ICsgcmFkaXVzfSAke2FyYzJ9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHAxLnggPiBwMi54KSB7XG4gICAgICAgIGFyYyA9IFwiQSAyMCAyMCwgMCwgMCwgMCxcIjtcbiAgICAgICAgYXJjMiA9IFwiQSAyMCAyMCwgMCwgMCwgMSxcIjtcbiAgICAgICAgcmFkaXVzID0gMjA7XG4gICAgICAgIG9mZnNldCA9IDIwO1xuICAgICAgICBpZiAoY29tbWl0Qi50eXBlID09PSBjb21taXRUeXBlLk1FUkdFICYmIGNvbW1pdEEuaWQgIT09IGNvbW1pdEIucGFyZW50c1swXSkge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AxLnh9ICR7cDIueSArIHJhZGl1c30gJHthcmN9ICR7cDEueCAtIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueCAtIHJhZGl1c30gJHtwMS55fSAke2FyY30gJHtwMi54fSAke3AxLnkgLSBvZmZzZXR9IEwgJHtwMi54fSAke3AyLnl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHAxLnggPT09IHAyLngpIHtcbiAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwMS55IDwgcDIueSkge1xuICAgICAgICBpZiAoY29tbWl0Qi50eXBlID09PSBjb21taXRUeXBlLk1FUkdFICYmIGNvbW1pdEEuaWQgIT09IGNvbW1pdEIucGFyZW50c1swXSkge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnggLSByYWRpdXN9ICR7cDEueX0gJHthcmMyfSAke3AyLnh9ICR7cDEueSArIG9mZnNldH0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AxLnh9ICR7cDIueSAtIHJhZGl1c30gJHthcmN9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwMS55ID4gcDIueSkge1xuICAgICAgICBpZiAoY29tbWl0Qi50eXBlID09PSBjb21taXRUeXBlLk1FUkdFICYmIGNvbW1pdEEuaWQgIT09IGNvbW1pdEIucGFyZW50c1swXSkge1xuICAgICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnggLSByYWRpdXN9ICR7cDEueX0gJHthcmN9ICR7cDIueH0gJHtwMS55IC0gb2Zmc2V0fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZURlZiA9IGBNICR7cDEueH0gJHtwMS55fSBMICR7cDEueH0gJHtwMi55ICsgcmFkaXVzfSAke2FyYzJ9ICR7cDEueCArIG9mZnNldH0gJHtwMi55fSBMICR7cDIueH0gJHtwMi55fWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwMS55ID09PSBwMi55KSB7XG4gICAgICAgIGxpbmVEZWYgPSBgTSAke3AxLnh9ICR7cDEueX0gTCAke3AyLnh9ICR7cDIueX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobGluZURlZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTGluZSBkZWZpbml0aW9uIG5vdCBmb3VuZFwiKTtcbiAgfVxuICBzdmcuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBsaW5lRGVmKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvdyBhcnJvd1wiICsgY29sb3JDbGFzc051bSAlIFRIRU1FX0NPTE9SX0xJTUlUKTtcbn0sIFwiZHJhd0Fycm93XCIpO1xudmFyIGRyYXdBcnJvd3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmcsIGNvbW1pdHMpID0+IHtcbiAgY29uc3QgZ0Fycm93cyA9IHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNvbW1pdC1hcnJvd3NcIik7XG4gIFsuLi5jb21taXRzLmtleXMoKV0uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgY29tbWl0MiA9IGNvbW1pdHMuZ2V0KGtleSk7XG4gICAgaWYgKGNvbW1pdDIucGFyZW50cyAmJiBjb21taXQyLnBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29tbWl0Mi5wYXJlbnRzLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICBkcmF3QXJyb3coZ0Fycm93cywgY29tbWl0cy5nZXQocGFyZW50KSwgY29tbWl0MiwgY29tbWl0cyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSwgXCJkcmF3QXJyb3dzXCIpO1xudmFyIGRyYXdCcmFuY2hlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2ZywgYnJhbmNoZXMpID0+IHtcbiAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBicmFuY2hlcy5mb3JFYWNoKChicmFuY2gyLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGFkanVzdEluZGV4Rm9yVGhlbWUgPSBpbmRleCAlIFRIRU1FX0NPTE9SX0xJTUlUO1xuICAgIGNvbnN0IHBvcyA9IGJyYW5jaFBvcy5nZXQoYnJhbmNoMi5uYW1lKT8ucG9zO1xuICAgIGlmIChwb3MgPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke2JyYW5jaDIubmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgbGluZSA9IGcuYXBwZW5kKFwibGluZVwiKTtcbiAgICBsaW5lLmF0dHIoXCJ4MVwiLCAwKTtcbiAgICBsaW5lLmF0dHIoXCJ5MVwiLCBwb3MpO1xuICAgIGxpbmUuYXR0cihcIngyXCIsIG1heFBvcyk7XG4gICAgbGluZS5hdHRyKFwieTJcIiwgcG9zKTtcbiAgICBsaW5lLmF0dHIoXCJjbGFzc1wiLCBcImJyYW5jaCBicmFuY2hcIiArIGFkanVzdEluZGV4Rm9yVGhlbWUpO1xuICAgIGlmIChkaXIgPT09IFwiVEJcIikge1xuICAgICAgbGluZS5hdHRyKFwieTFcIiwgZGVmYXVsdFBvcyk7XG4gICAgICBsaW5lLmF0dHIoXCJ4MVwiLCBwb3MpO1xuICAgICAgbGluZS5hdHRyKFwieTJcIiwgbWF4UG9zKTtcbiAgICAgIGxpbmUuYXR0cihcIngyXCIsIHBvcyk7XG4gICAgfSBlbHNlIGlmIChkaXIgPT09IFwiQlRcIikge1xuICAgICAgbGluZS5hdHRyKFwieTFcIiwgbWF4UG9zKTtcbiAgICAgIGxpbmUuYXR0cihcIngxXCIsIHBvcyk7XG4gICAgICBsaW5lLmF0dHIoXCJ5MlwiLCBkZWZhdWx0UG9zKTtcbiAgICAgIGxpbmUuYXR0cihcIngyXCIsIHBvcyk7XG4gICAgfVxuICAgIGxhbmVzLnB1c2gocG9zKTtcbiAgICBjb25zdCBuYW1lID0gYnJhbmNoMi5uYW1lO1xuICAgIGNvbnN0IGxhYmVsRWxlbWVudCA9IGRyYXdUZXh0KG5hbWUpO1xuICAgIGNvbnN0IGJrZyA9IGcuaW5zZXJ0KFwicmVjdFwiKTtcbiAgICBjb25zdCBicmFuY2hMYWJlbCA9IGcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJicmFuY2hMYWJlbFwiKTtcbiAgICBjb25zdCBsYWJlbCA9IGJyYW5jaExhYmVsLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGFiZWwgYnJhbmNoLWxhYmVsXCIgKyBhZGp1c3RJbmRleEZvclRoZW1lKTtcbiAgICBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBiYm94ID0gbGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBia2cuYXR0cihcImNsYXNzXCIsIFwiYnJhbmNoTGFiZWxCa2cgbGFiZWxcIiArIGFkanVzdEluZGV4Rm9yVGhlbWUpLmF0dHIoXCJyeFwiLCA0KS5hdHRyKFwicnlcIiwgNCkuYXR0cihcInhcIiwgLWJib3gud2lkdGggLSA0IC0gKERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMj8ucm90YXRlQ29tbWl0TGFiZWwgPT09IHRydWUgPyAzMCA6IDApKS5hdHRyKFwieVwiLCAtYmJveC5oZWlnaHQgLyAyICsgOCkuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGggKyAxOCkuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCArIDQpO1xuICAgIGxhYmVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoLWJib3gud2lkdGggLSAxNCAtIChERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzI/LnJvdGF0ZUNvbW1pdExhYmVsID09PSB0cnVlID8gMzAgOiAwKSkgKyBcIiwgXCIgKyAocG9zIC0gYmJveC5oZWlnaHQgLyAyIC0gMSkgKyBcIilcIlxuICAgICk7XG4gICAgaWYgKGRpciA9PT0gXCJUQlwiKSB7XG4gICAgICBia2cuYXR0cihcInhcIiwgcG9zIC0gYmJveC53aWR0aCAvIDIgLSAxMCkuYXR0cihcInlcIiwgMCk7XG4gICAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKHBvcyAtIGJib3gud2lkdGggLyAyIC0gNSkgKyBcIiwgMClcIik7XG4gICAgfSBlbHNlIGlmIChkaXIgPT09IFwiQlRcIikge1xuICAgICAgYmtnLmF0dHIoXCJ4XCIsIHBvcyAtIGJib3gud2lkdGggLyAyIC0gMTApLmF0dHIoXCJ5XCIsIG1heFBvcyk7XG4gICAgICBsYWJlbC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKHBvcyAtIGJib3gud2lkdGggLyAyIC0gNSkgKyBcIiwgXCIgKyBtYXhQb3MgKyBcIilcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJrZy5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKC0xOSwgXCIgKyAocG9zIC0gYmJveC5oZWlnaHQgLyAyKSArIFwiKVwiKTtcbiAgICB9XG4gIH0pO1xufSwgXCJkcmF3QnJhbmNoZXNcIik7XG52YXIgc2V0QnJhbmNoUG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG5hbWUsIHBvcywgaW5kZXgsIGJib3gsIHJvdGF0ZUNvbW1pdExhYmVsKSB7XG4gIGJyYW5jaFBvcy5zZXQobmFtZSwgeyBwb3MsIGluZGV4IH0pO1xuICBwb3MgKz0gNTAgKyAocm90YXRlQ29tbWl0TGFiZWwgPyA0MCA6IDApICsgKGRpciA9PT0gXCJUQlwiIHx8IGRpciA9PT0gXCJCVFwiID8gYmJveC53aWR0aCAvIDIgOiAwKTtcbiAgcmV0dXJuIHBvcztcbn0sIFwic2V0QnJhbmNoUG9zaXRpb25cIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0LCBpZCwgdmVyLCBkaWFnT2JqKSB7XG4gIGNsZWFyMygpO1xuICBsb2cuZGVidWcoXCJpbiBnaXRncmFwaCByZW5kZXJlclwiLCB0eHQgKyBcIlxcblwiLCBcImlkOlwiLCBpZCwgdmVyKTtcbiAgaWYgKCFERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXRHcmFwaCBjb25maWcgbm90IGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJvdGF0ZUNvbW1pdExhYmVsID0gREVGQVVMVF9HSVRHUkFQSF9DT05GSUcyLnJvdGF0ZUNvbW1pdExhYmVsID8/IGZhbHNlO1xuICBjb25zdCBkYjIgPSBkaWFnT2JqLmRiO1xuICBhbGxDb21taXRzRGljdCA9IGRiMi5nZXRDb21taXRzKCk7XG4gIGNvbnN0IGJyYW5jaGVzID0gZGIyLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpO1xuICBkaXIgPSBkYjIuZ2V0RGlyZWN0aW9uKCk7XG4gIGNvbnN0IGRpYWdyYW0yID0gc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBsZXQgcG9zID0gMDtcbiAgYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoMiwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSBkcmF3VGV4dChicmFuY2gyLm5hbWUpO1xuICAgIGNvbnN0IGcgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpO1xuICAgIGNvbnN0IGJyYW5jaExhYmVsID0gZy5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJyYW5jaExhYmVsXCIpO1xuICAgIGNvbnN0IGxhYmVsID0gYnJhbmNoTGFiZWwuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbCBicmFuY2gtbGFiZWxcIik7XG4gICAgbGFiZWwubm9kZSgpPy5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IGJib3ggPSBsYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIHBvcyA9IHNldEJyYW5jaFBvc2l0aW9uKGJyYW5jaDIubmFtZSwgcG9zLCBpbmRleCwgYmJveCwgcm90YXRlQ29tbWl0TGFiZWwpO1xuICAgIGxhYmVsLnJlbW92ZSgpO1xuICAgIGJyYW5jaExhYmVsLnJlbW92ZSgpO1xuICAgIGcucmVtb3ZlKCk7XG4gIH0pO1xuICBkcmF3Q29tbWl0cyhkaWFncmFtMiwgYWxsQ29tbWl0c0RpY3QsIGZhbHNlKTtcbiAgaWYgKERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMi5zaG93QnJhbmNoZXMpIHtcbiAgICBkcmF3QnJhbmNoZXMoZGlhZ3JhbTIsIGJyYW5jaGVzKTtcbiAgfVxuICBkcmF3QXJyb3dzKGRpYWdyYW0yLCBhbGxDb21taXRzRGljdCk7XG4gIGRyYXdDb21taXRzKGRpYWdyYW0yLCBhbGxDb21taXRzRGljdCwgdHJ1ZSk7XG4gIHV0aWxzX2RlZmF1bHQuaW5zZXJ0VGl0bGUoXG4gICAgZGlhZ3JhbTIsXG4gICAgXCJnaXRUaXRsZVRleHRcIixcbiAgICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIudGl0bGVUb3BNYXJnaW4gPz8gMCxcbiAgICBkYjIuZ2V0RGlhZ3JhbVRpdGxlKClcbiAgKTtcbiAgc2V0dXBHcmFwaFZpZXdib3goXG4gICAgdm9pZCAwLFxuICAgIGRpYWdyYW0yLFxuICAgIERFRkFVTFRfR0lUR1JBUEhfQ09ORklHMi5kaWFncmFtUGFkZGluZyxcbiAgICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIudXNlTWF4V2lkdGhcbiAgKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBnaXRHcmFwaFJlbmRlcmVyX2RlZmF1bHQgPSB7XG4gIGRyYXdcbn07XG5pZiAodm9pZCAwKSB7XG4gIGNvbnN0IHsgaXQsIGV4cGVjdCwgZGVzY3JpYmUgfSA9IHZvaWQgMDtcbiAgZGVzY3JpYmUoXCJkcmF3VGV4dFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgZHJhd1RleHRcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc3ZnTGFiZWwgPSBkcmF3VGV4dChcIm1haW5cIik7XG4gICAgICBleHBlY3Qoc3ZnTGFiZWwpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3Qoc3ZnTGFiZWwuY2hpbGRyZW5bMF0uaW5uZXJIVE1MKS50b0JlKFwibWFpblwiKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKFwiYnJhbmNoUG9zaXRpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGJib3ggPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodDogMTAsXG4gICAgICB0b3A6IDAsXG4gICAgICByaWdodDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b0pTT046IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gXCJcIiwgXCJ0b0pTT05cIilcbiAgICB9O1xuICAgIGl0KFwic2hvdWxkIHNldEJyYW5jaFBvc2l0aW9ucyBMUiB3aXRoIHR3byBicmFuY2hlc1wiLCAoKSA9PiB7XG4gICAgICBkaXIgPSBcIkxSXCI7XG4gICAgICBjb25zdCBwb3MgPSBzZXRCcmFuY2hQb3NpdGlvbihcIm1haW5cIiwgMCwgMCwgYmJveCwgdHJ1ZSk7XG4gICAgICBleHBlY3QocG9zKS50b0JlKDkwKTtcbiAgICAgIGV4cGVjdChicmFuY2hQb3MuZ2V0KFwibWFpblwiKSkudG9FcXVhbCh7IHBvczogMCwgaW5kZXg6IDAgfSk7XG4gICAgICBjb25zdCBwb3NOZXh0ID0gc2V0QnJhbmNoUG9zaXRpb24oXCJkZXZlbG9wXCIsIHBvcywgMSwgYmJveCwgdHJ1ZSk7XG4gICAgICBleHBlY3QocG9zTmV4dCkudG9CZSgxODApO1xuICAgICAgZXhwZWN0KGJyYW5jaFBvcy5nZXQoXCJkZXZlbG9wXCIpKS50b0VxdWFsKHsgcG9zLCBpbmRleDogMSB9KTtcbiAgICB9KTtcbiAgICBpdChcInNob3VsZCBzZXRCcmFuY2hQb3NpdGlvbnMgVEIgd2l0aCB0d28gYnJhbmNoZXNcIiwgKCkgPT4ge1xuICAgICAgZGlyID0gXCJUQlwiO1xuICAgICAgYmJveC53aWR0aCA9IDM0Ljk5MjE4NzU7XG4gICAgICBjb25zdCBwb3MgPSBzZXRCcmFuY2hQb3NpdGlvbihcIm1haW5cIiwgMCwgMCwgYmJveCwgdHJ1ZSk7XG4gICAgICBleHBlY3QocG9zKS50b0JlKDEwNy40OTYwOTM3NSk7XG4gICAgICBleHBlY3QoYnJhbmNoUG9zLmdldChcIm1haW5cIikpLnRvRXF1YWwoeyBwb3M6IDAsIGluZGV4OiAwIH0pO1xuICAgICAgYmJveC53aWR0aCA9IDU2LjQyMTg3NTtcbiAgICAgIGNvbnN0IHBvc05leHQgPSBzZXRCcmFuY2hQb3NpdGlvbihcImRldmVsb3BcIiwgcG9zLCAxLCBiYm94LCB0cnVlKTtcbiAgICAgIGV4cGVjdChwb3NOZXh0KS50b0JlKDIyNS43MDcwMzEyNSk7XG4gICAgICBleHBlY3QoYnJhbmNoUG9zLmdldChcImRldmVsb3BcIikpLnRvRXF1YWwoeyBwb3MsIGluZGV4OiAxIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoXCJjb21taXRQb3NpdGlvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29tbWl0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXRaZXJvXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJaRVJPXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDAsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW10sXG4gICAgICAgICAgYnJhbmNoOiBcIm1haW5cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBcImNvbW1pdEFcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIkFcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlwiLFxuICAgICAgICAgIHNlcTogMSxcbiAgICAgICAgICB0eXBlOiBjb21taXRUeXBlLk5PUk1BTCxcbiAgICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgICBwYXJlbnRzOiBbXCJaRVJPXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJmZWF0dXJlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXRCXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJCXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDIsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiQVwiXSxcbiAgICAgICAgICBicmFuY2g6IFwiZmVhdHVyZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFwiY29tbWl0TVwiLFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiTVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwibWVyZ2VkIGJyYW5jaCBmZWF0dXJlIGludG8gbWFpblwiLFxuICAgICAgICAgIHNlcTogMyxcbiAgICAgICAgICB0eXBlOiBjb21taXRUeXBlLk1FUkdFLFxuICAgICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICAgIHBhcmVudHM6IFtcIlpFUk9cIiwgXCJCXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCIsXG4gICAgICAgICAgY3VzdG9tSWQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXRDXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJDXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDQsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiWkVST1wiXSxcbiAgICAgICAgICBicmFuY2g6IFwicmVsZWFzZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFwiY29tbWl0NV84OTI4ZWEwXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCI1LTg5MjhlYTBcIixcbiAgICAgICAgICBtZXNzYWdlOiBcImNoZXJyeS1waWNrZWQgW29iamVjdCBPYmplY3RdIGludG8gcmVsZWFzZVwiLFxuICAgICAgICAgIHNlcTogNSxcbiAgICAgICAgICB0eXBlOiBjb21taXRUeXBlLkNIRVJSWV9QSUNLLFxuICAgICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICAgIHBhcmVudHM6IFtcIkNcIiwgXCJNXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJyZWxlYXNlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXREXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJEXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICBzZXE6IDYsXG4gICAgICAgICAgdHlwZTogY29tbWl0VHlwZS5OT1JNQUwsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiNS04OTI4ZWEwXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJyZWxlYXNlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJjb21taXQ3X2VkODQ4YmFcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjctZWQ4NDhiYVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiY2hlcnJ5LXBpY2tlZCBbb2JqZWN0IE9iamVjdF0gaW50byByZWxlYXNlXCIsXG4gICAgICAgICAgc2VxOiA3LFxuICAgICAgICAgIHR5cGU6IGNvbW1pdFR5cGUuQ0hFUlJZX1BJQ0ssXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiRFwiLCBcIk1cIl0sXG4gICAgICAgICAgYnJhbmNoOiBcInJlbGVhc2VcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgXSk7XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgYnJhbmNoUG9zLnNldChcIm1haW5cIiwgeyBwb3M6IDAsIGluZGV4OiAwIH0pO1xuICAgIGJyYW5jaFBvcy5zZXQoXCJmZWF0dXJlXCIsIHsgcG9zOiAxMDcuNDk2MDkzNzUsIGluZGV4OiAxIH0pO1xuICAgIGJyYW5jaFBvcy5zZXQoXCJyZWxlYXNlXCIsIHsgcG9zOiAyMjQuMDM1MTU2MjUsIGluZGV4OiAyIH0pO1xuICAgIGRlc2NyaWJlKFwiVEJcIiwgKCkgPT4ge1xuICAgICAgcG9zID0gMzA7XG4gICAgICBkaXIgPSBcIlRCXCI7XG4gICAgICBjb25zdCBleHBlY3RlZENvbW1pdFBvc2l0aW9uVEIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICAgIFtcImNvbW1pdFplcm9cIiwgeyB4OiAwLCB5OiA0MCwgcG9zV2l0aE9mZnNldDogNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdEFcIiwgeyB4OiAxMDcuNDk2MDkzNzUsIHk6IDkwLCBwb3NXaXRoT2Zmc2V0OiA5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0QlwiLCB7IHg6IDEwNy40OTYwOTM3NSwgeTogMTQwLCBwb3NXaXRoT2Zmc2V0OiAxNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdE1cIiwgeyB4OiAwLCB5OiAxOTAsIHBvc1dpdGhPZmZzZXQ6IDE5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0Q1wiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjQwLCBwb3NXaXRoT2Zmc2V0OiAyNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdDVfODkyOGVhMFwiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjkwLCBwb3NXaXRoT2Zmc2V0OiAyOTAgfV0sXG4gICAgICAgIFtcImNvbW1pdERcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM0MCwgcG9zV2l0aE9mZnNldDogMzQwIH1dLFxuICAgICAgICBbXCJjb21taXQ3X2VkODQ4YmFcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM5MCwgcG9zV2l0aE9mZnNldDogMzkwIH1dXG4gICAgICBdKTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgZ2l2ZSB0aGUgY29ycmVjdCBwb3NpdGlvbiBmb3IgY29tbWl0ICR7a2V5fWAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldENvbW1pdFBvc2l0aW9uKGNvbW1pdDIsIHBvcywgZmFsc2UpO1xuICAgICAgICAgIGV4cGVjdChwb3NpdGlvbikudG9FcXVhbChleHBlY3RlZENvbW1pdFBvc2l0aW9uVEIuZ2V0KGtleSkpO1xuICAgICAgICAgIHBvcyArPSA1MDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZShcIkxSXCIsICgpID0+IHtcbiAgICAgIGxldCBwb3MyID0gMzA7XG4gICAgICBkaXIgPSBcIkxSXCI7XG4gICAgICBjb25zdCBleHBlY3RlZENvbW1pdFBvc2l0aW9uTFIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICAgIFtcImNvbW1pdFplcm9cIiwgeyB4OiAwLCB5OiA0MCwgcG9zV2l0aE9mZnNldDogNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdEFcIiwgeyB4OiAxMDcuNDk2MDkzNzUsIHk6IDkwLCBwb3NXaXRoT2Zmc2V0OiA5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0QlwiLCB7IHg6IDEwNy40OTYwOTM3NSwgeTogMTQwLCBwb3NXaXRoT2Zmc2V0OiAxNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdE1cIiwgeyB4OiAwLCB5OiAxOTAsIHBvc1dpdGhPZmZzZXQ6IDE5MCB9XSxcbiAgICAgICAgW1wiY29tbWl0Q1wiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjQwLCBwb3NXaXRoT2Zmc2V0OiAyNDAgfV0sXG4gICAgICAgIFtcImNvbW1pdDVfODkyOGVhMFwiLCB7IHg6IDIyNC4wMzUxNTYyNSwgeTogMjkwLCBwb3NXaXRoT2Zmc2V0OiAyOTAgfV0sXG4gICAgICAgIFtcImNvbW1pdERcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM0MCwgcG9zV2l0aE9mZnNldDogMzQwIH1dLFxuICAgICAgICBbXCJjb21taXQ3X2VkODQ4YmFcIiwgeyB4OiAyMjQuMDM1MTU2MjUsIHk6IDM5MCwgcG9zV2l0aE9mZnNldDogMzkwIH1dXG4gICAgICBdKTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgZ2l2ZSB0aGUgY29ycmVjdCBwb3NpdGlvbiBmb3IgY29tbWl0ICR7a2V5fWAsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldENvbW1pdFBvc2l0aW9uKGNvbW1pdDIsIHBvczIsIGZhbHNlKTtcbiAgICAgICAgICBleHBlY3QocG9zaXRpb24pLnRvRXF1YWwoZXhwZWN0ZWRDb21taXRQb3NpdGlvbkxSLmdldChrZXkpKTtcbiAgICAgICAgICBwb3MyICs9IDUwO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKFwiZ2V0Q29tbWl0Q2xhc3NUeXBlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQ29tbWl0Q2xhc3NUeXBlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1xuICAgICAgICBbXCJjb21taXRaZXJvXCIsIFwiY29tbWl0LW5vcm1hbFwiXSxcbiAgICAgICAgW1wiY29tbWl0QVwiLCBcImNvbW1pdC1ub3JtYWxcIl0sXG4gICAgICAgIFtcImNvbW1pdEJcIiwgXCJjb21taXQtbm9ybWFsXCJdLFxuICAgICAgICBbXCJjb21taXRNXCIsIFwiY29tbWl0LW1lcmdlXCJdLFxuICAgICAgICBbXCJjb21taXRDXCIsIFwiY29tbWl0LW5vcm1hbFwiXSxcbiAgICAgICAgW1wiY29tbWl0NV84OTI4ZWEwXCIsIFwiY29tbWl0LWNoZXJyeS1waWNrXCJdLFxuICAgICAgICBbXCJjb21taXREXCIsIFwiY29tbWl0LW5vcm1hbFwiXSxcbiAgICAgICAgW1wiY29tbWl0N19lZDg0OGJhXCIsIFwiY29tbWl0LWNoZXJyeS1waWNrXCJdXG4gICAgICBdKTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgZ2l2ZSB0aGUgY29ycmVjdCBjbGFzcyB0eXBlIGZvciBjb21taXQgJHtrZXl9YCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsYXNzVHlwZSA9IGdldENvbW1pdENsYXNzVHlwZShjb21taXQyKTtcbiAgICAgICAgICBleHBlY3QoY2xhc3NUeXBlKS50b0JlKGV4cGVjdGVkQ29tbWl0Q2xhc3NUeXBlLmdldChrZXkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKFwiYnVpbGRpbmcgQlQgcGFyYWxsZWwgY29tbWl0IGRpYWdyYW1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNvbW1pdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXG4gICAgICAgIFwiMS1hYmNkZWZnXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCIxLWFiY2RlZmdcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlwiLFxuICAgICAgICAgIHNlcTogMCxcbiAgICAgICAgICB0eXBlOiAwLFxuICAgICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICAgIHBhcmVudHM6IFtdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCIyLWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjItYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiAxLFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMS1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCIzLWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjMtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiAyLFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMi1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJkZXZlbG9wXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI0LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjQtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiAzLFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMy1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJkZXZlbG9wXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI1LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjUtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA0LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMi1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJmZWF0dXJlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI2LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjYtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA1LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiNS1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJmZWF0dXJlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI3LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjctYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA2LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiMi1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCI4LWFiY2RlZmdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcIjgtYWJjZGVmZ1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgc2VxOiA3LFxuICAgICAgICAgIHR5cGU6IDAsXG4gICAgICAgICAgdGFnczogW10sXG4gICAgICAgICAgcGFyZW50czogW1wiNy1hYmNkZWZnXCJdLFxuICAgICAgICAgIGJyYW5jaDogXCJtYWluXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIF0pO1xuICAgIGNvbnN0IGV4cGVjdGVkQ29tbWl0UG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXCIxLWFiY2RlZmdcIiwgeyB4OiAwLCB5OiA0MCB9XSxcbiAgICAgIFtcIjItYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDkwIH1dLFxuICAgICAgW1wiMy1hYmNkZWZnXCIsIHsgeDogMTA3LjQ5NjA5Mzc1LCB5OiAxNDAgfV0sXG4gICAgICBbXCI0LWFiY2RlZmdcIiwgeyB4OiAxMDcuNDk2MDkzNzUsIHk6IDE5MCB9XSxcbiAgICAgIFtcIjUtYWJjZGVmZ1wiLCB7IHg6IDIyNS43MDcwMzEyNSwgeTogMTQwIH1dLFxuICAgICAgW1wiNi1hYmNkZWZnXCIsIHsgeDogMjI1LjcwNzAzMTI1LCB5OiAxOTAgfV0sXG4gICAgICBbXCI3LWFiY2RlZmdcIiwgeyB4OiAwLCB5OiAxNDAgfV0sXG4gICAgICBbXCI4LWFiY2RlZmdcIiwgeyB4OiAwLCB5OiAxOTAgfV1cbiAgICBdKTtcbiAgICBjb25zdCBleHBlY3RlZENvbW1pdFBvc2l0aW9uQWZ0ZXJQYXJhbGxlbCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgIFtcIjEtYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDIxMCB9XSxcbiAgICAgIFtcIjItYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDE2MCB9XSxcbiAgICAgIFtcIjMtYWJjZGVmZ1wiLCB7IHg6IDEwNy40OTYwOTM3NSwgeTogMTEwIH1dLFxuICAgICAgW1wiNC1hYmNkZWZnXCIsIHsgeDogMTA3LjQ5NjA5Mzc1LCB5OiA2MCB9XSxcbiAgICAgIFtcIjUtYWJjZGVmZ1wiLCB7IHg6IDIyNS43MDcwMzEyNSwgeTogMTEwIH1dLFxuICAgICAgW1wiNi1hYmNkZWZnXCIsIHsgeDogMjI1LjcwNzAzMTI1LCB5OiA2MCB9XSxcbiAgICAgIFtcIjctYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDExMCB9XSxcbiAgICAgIFtcIjgtYWJjZGVmZ1wiLCB7IHg6IDAsIHk6IDYwIH1dXG4gICAgXSk7XG4gICAgY29uc3QgZXhwZWN0ZWRDb21taXRDdXJyZW50UG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXCIxLWFiY2RlZmdcIiwgMzBdLFxuICAgICAgW1wiMi1hYmNkZWZnXCIsIDgwXSxcbiAgICAgIFtcIjMtYWJjZGVmZ1wiLCAxMzBdLFxuICAgICAgW1wiNC1hYmNkZWZnXCIsIDE4MF0sXG4gICAgICBbXCI1LWFiY2RlZmdcIiwgMTMwXSxcbiAgICAgIFtcIjYtYWJjZGVmZ1wiLCAxODBdLFxuICAgICAgW1wiNy1hYmNkZWZnXCIsIDEzMF0sXG4gICAgICBbXCI4LWFiY2RlZmdcIiwgMTgwXVxuICAgIF0pO1xuICAgIGNvbnN0IHNvcnRlZEtleXMgPSBbLi4uZXhwZWN0ZWRDb21taXRQb3NpdGlvbi5rZXlzKCldO1xuICAgIGl0KFwic2hvdWxkIGdldCB0aGUgY29ycmVjdCBjb21taXQgcG9zaXRpb24gYW5kIGN1cnJlbnQgcG9zaXRpb25cIiwgKCkgPT4ge1xuICAgICAgZGlyID0gXCJCVFwiO1xuICAgICAgbGV0IGN1clBvcyA9IDMwO1xuICAgICAgY29tbWl0UG9zLmNsZWFyKCk7XG4gICAgICBicmFuY2hQb3MuY2xlYXIoKTtcbiAgICAgIGJyYW5jaFBvcy5zZXQoXCJtYWluXCIsIHsgcG9zOiAwLCBpbmRleDogMCB9KTtcbiAgICAgIGJyYW5jaFBvcy5zZXQoXCJkZXZlbG9wXCIsIHsgcG9zOiAxMDcuNDk2MDkzNzUsIGluZGV4OiAxIH0pO1xuICAgICAgYnJhbmNoUG9zLnNldChcImZlYXR1cmVcIiwgeyBwb3M6IDIyNS43MDcwMzEyNSwgaW5kZXg6IDIgfSk7XG4gICAgICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIucGFyYWxsZWxDb21taXRzID0gdHJ1ZTtcbiAgICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0Miwga2V5KSA9PiB7XG4gICAgICAgIGlmIChjb21taXQyLnBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1clBvcyA9IGNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uKGNvbW1pdDIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2V0Q29tbWl0UG9zaXRpb24oY29tbWl0MiwgY3VyUG9zKTtcbiAgICAgICAgZXhwZWN0KHBvc2l0aW9uKS50b0VxdWFsKGV4cGVjdGVkQ29tbWl0UG9zaXRpb24uZ2V0KGtleSkpO1xuICAgICAgICBleHBlY3QoY3VyUG9zKS50b0VxdWFsKGV4cGVjdGVkQ29tbWl0Q3VycmVudFBvc2l0aW9uLmdldChrZXkpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGl0KFwic2hvdWxkIGdldCB0aGUgY29ycmVjdCBjb21taXQgcG9zaXRpb24gYWZ0ZXIgcGFyYWxsZWwgY29tbWl0c1wiLCAoKSA9PiB7XG4gICAgICBjb21taXRQb3MuY2xlYXIoKTtcbiAgICAgIGJyYW5jaFBvcy5jbGVhcigpO1xuICAgICAgZGlyID0gXCJCVFwiO1xuICAgICAgY29uc3QgY3VyUG9zID0gMzA7XG4gICAgICBjb21taXRQb3MuY2xlYXIoKTtcbiAgICAgIGJyYW5jaFBvcy5jbGVhcigpO1xuICAgICAgYnJhbmNoUG9zLnNldChcIm1haW5cIiwgeyBwb3M6IDAsIGluZGV4OiAwIH0pO1xuICAgICAgYnJhbmNoUG9zLnNldChcImRldmVsb3BcIiwgeyBwb3M6IDEwNy40OTYwOTM3NSwgaW5kZXg6IDEgfSk7XG4gICAgICBicmFuY2hQb3Muc2V0KFwiZmVhdHVyZVwiLCB7IHBvczogMjI1LjcwNzAzMTI1LCBpbmRleDogMiB9KTtcbiAgICAgIHNldFBhcmFsbGVsQlRQb3Moc29ydGVkS2V5cywgY29tbWl0cywgY3VyUG9zKTtcbiAgICAgIHNvcnRlZEtleXMuZm9yRWFjaCgoY29tbWl0MikgPT4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNvbW1pdFBvcy5nZXQoY29tbWl0Mik7XG4gICAgICAgIGV4cGVjdChwb3NpdGlvbikudG9FcXVhbChleHBlY3RlZENvbW1pdFBvc2l0aW9uQWZ0ZXJQYXJhbGxlbC5nZXQoY29tbWl0MikpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBERUZBVUxUX0dJVEdSQVBIX0NPTkZJRzIucGFyYWxsZWxDb21taXRzID0gZmFsc2U7XG4gIGl0KFwiYWRkXCIsICgpID0+IHtcbiAgICBjb21taXRQb3Muc2V0KFwicGFyZW50MVwiLCB7IHg6IDEsIHk6IDEgfSk7XG4gICAgY29tbWl0UG9zLnNldChcInBhcmVudDJcIiwgeyB4OiAyLCB5OiAyIH0pO1xuICAgIGNvbW1pdFBvcy5zZXQoXCJwYXJlbnQzXCIsIHsgeDogMywgeTogMyB9KTtcbiAgICBkaXIgPSBcIkxSXCI7XG4gICAgY29uc3QgcGFyZW50cyA9IFtcInBhcmVudDFcIiwgXCJwYXJlbnQyXCIsIFwicGFyZW50M1wiXTtcbiAgICBjb25zdCBjbG9zZXN0UGFyZW50ID0gZmluZENsb3Nlc3RQYXJlbnQocGFyZW50cyk7XG4gICAgZXhwZWN0KGNsb3Nlc3RQYXJlbnQpLnRvQmUoXCJwYXJlbnQzXCIpO1xuICAgIGNvbW1pdFBvcy5jbGVhcigpO1xuICB9KTtcbn1cblxuLy8gc3JjL2RpYWdyYW1zL2dpdC9zdHlsZXMuanNcbnZhciBnZXRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zKSA9PiBgXG4gIC5jb21taXQtaWQsXG4gIC5jb21taXQtbXNnLFxuICAuYnJhbmNoLWxhYmVsIHtcbiAgICBmaWxsOiBsaWdodGdyZXk7XG4gICAgY29sb3I6IGxpZ2h0Z3JleTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuICAke1swLCAxLCAyLCAzLCA0LCA1LCA2LCA3XS5tYXAoXG4gIChpKSA9PiBgXG4gICAgICAgIC5icmFuY2gtbGFiZWwke2l9IHsgZmlsbDogJHtvcHRpb25zW1wiZ2l0QnJhbmNoTGFiZWxcIiArIGldfTsgfVxuICAgICAgICAuY29tbWl0JHtpfSB7IHN0cm9rZTogJHtvcHRpb25zW1wiZ2l0XCIgKyBpXX07IGZpbGw6ICR7b3B0aW9uc1tcImdpdFwiICsgaV19OyB9XG4gICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtpfSB7IHN0cm9rZTogJHtvcHRpb25zW1wiZ2l0SW52XCIgKyBpXX07IGZpbGw6ICR7b3B0aW9uc1tcImdpdEludlwiICsgaV19OyB9XG4gICAgICAgIC5sYWJlbCR7aX0gIHsgZmlsbDogJHtvcHRpb25zW1wiZ2l0XCIgKyBpXX07IH1cbiAgICAgICAgLmFycm93JHtpfSB7IHN0cm9rZTogJHtvcHRpb25zW1wiZ2l0XCIgKyBpXX07IH1cbiAgICAgICAgYFxuKS5qb2luKFwiXFxuXCIpfVxuXG4gIC5icmFuY2gge1xuICAgIHN0cm9rZS13aWR0aDogMTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7XG4gIH1cbiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHtvcHRpb25zLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke29wdGlvbnMuY29tbWl0TGFiZWxDb2xvcn07fVxuICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHtvcHRpb25zLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke29wdGlvbnMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9XG4gIC50YWctbGFiZWwgeyBmb250LXNpemU6ICR7b3B0aW9ucy50YWdMYWJlbEZvbnRTaXplfTsgZmlsbDogJHtvcHRpb25zLnRhZ0xhYmVsQ29sb3J9O31cbiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke29wdGlvbnMudGFnTGFiZWxCYWNrZ3JvdW5kfTsgc3Ryb2tlOiAke29wdGlvbnMudGFnTGFiZWxCb3JkZXJ9OyB9XG4gIC50YWctaG9sZSB7IGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9OyB9XG5cbiAgLmNvbW1pdC1tZXJnZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgfVxuICAuY29tbWl0LXJldmVyc2Uge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnByaW1hcnlDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLnByaW1hcnlDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAzO1xuICB9XG4gIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHtcbiAgfVxuICAuY29tbWl0LWhpZ2hsaWdodC1pbm5lciB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMucHJpbWFyeUNvbG9yfTtcbiAgfVxuXG4gIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfVxuICAuZ2l0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9naXQvZ2l0R3JhcGhEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXI6IGdpdEdyYXBoUmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPVwiZGF5XCI7cmV0dXJuIGZ1bmN0aW9uKHQsaSxzKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hZGQoNC10Lmlzb1dlZWtkYXkoKSxlKX0sZD1pLnByb3RvdHlwZTtkLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykueWVhcigpfSxkLmlzb1dlZWs9ZnVuY3Rpb24odCl7aWYoIXRoaXMuJHV0aWxzKCkudSh0KSlyZXR1cm4gdGhpcy5hZGQoNyoodC10aGlzLmlzb1dlZWsoKSksZSk7dmFyIGksZCxuLG8scj1hKHRoaXMpLHU9KGk9dGhpcy5pc29XZWVrWWVhcigpLGQ9dGhpcy4kdSxuPShkP3MudXRjOnMpKCkueWVhcihpKS5zdGFydE9mKFwieWVhclwiKSxvPTQtbi5pc29XZWVrZGF5KCksbi5pc29XZWVrZGF5KCk+NCYmKG8rPTcpLG4uYWRkKG8sZSkpO3JldHVybiByLmRpZmYodSxcIndlZWtcIikrMX0sZC5pc29XZWVrZGF5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiR1dGlscygpLnUoZSk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/ZTplLTcpfTt2YXIgbj1kLnN0YXJ0T2Y7ZC5zdGFydE9mPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy4kdXRpbHMoKSxzPSEhaS51KHQpfHx0O3JldHVyblwiaXNvd2Vla1wiPT09aS5wKGUpP3M/dGhpcy5kYXRlKHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSkuc3RhcnRPZihcImRheVwiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoXCJkYXlcIik6bi5iaW5kKHRoaXMpKGUsdCl9fX0pKTsiLAogICAgIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2N1c3RvbVBhcnNlRm9ybWF0PXQoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17TFRTOlwiaDptbTpzcyBBXCIsTFQ6XCJoOm1tIEFcIixMOlwiTU0vREQvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBXCJ9LHQ9LyhcXFtbXltdKlxcXSl8KFstXzovLiwoKVxcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2csbj0vXFxkLyxyPS9cXGRcXGQvLGk9L1xcZFxcZD8vLG89L1xcZCpbXi1fOi8sKClcXHNcXGRdKy8scz17fSxhPWZ1bmN0aW9uKGUpe3JldHVybihlPStlKSsoZT42OD8xOTAwOjJlMyl9O3ZhciBmPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzW2VdPSt0fX0saD1bL1srLV1cXGRcXGQ6PyhcXGRcXGQpP3xaLyxmdW5jdGlvbihlKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiAwO2lmKFwiWlwiPT09ZSlyZXR1cm4gMDt2YXIgdD1lLm1hdGNoKC8oWystXXxcXGRcXGQpL2cpLG49NjAqdFsxXSsoK3RbMl18fDApO3JldHVybiAwPT09bj8wOlwiK1wiPT09dFswXT8tbjpufShlKX1dLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9c1tlXTtyZXR1cm4gdCYmKHQuaW5kZXhPZj90OnQucy5jb25jYXQodC5mKSl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXMubWVyaWRpZW07aWYocil7Zm9yKHZhciBpPTE7aTw9MjQ7aSs9MSlpZihlLmluZGV4T2YocihpLDAsdCkpPi0xKXtuPWk+MTI7YnJlYWt9fWVsc2Ugbj1lPT09KHQ/XCJwbVwiOlwiUE1cIik7cmV0dXJuIG59LGM9e0E6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCExKX1dLGE6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCEwKX1dLFE6W24sZnVuY3Rpb24oZSl7dGhpcy5tb250aD0zKihlLTEpKzF9XSxTOltuLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZX1dLFNTOltyLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitlfV0sU1NTOlsvXFxkezN9LyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0rZX1dLHM6W2ksZihcInNlY29uZHNcIildLHNzOltpLGYoXCJzZWNvbmRzXCIpXSxtOltpLGYoXCJtaW51dGVzXCIpXSxtbTpbaSxmKFwibWludXRlc1wiKV0sSDpbaSxmKFwiaG91cnNcIildLGg6W2ksZihcImhvdXJzXCIpXSxISDpbaSxmKFwiaG91cnNcIildLGhoOltpLGYoXCJob3Vyc1wiKV0sRDpbaSxmKFwiZGF5XCIpXSxERDpbcixmKFwiZGF5XCIpXSxEbzpbbyxmdW5jdGlvbihlKXt2YXIgdD1zLm9yZGluYWwsbj1lLm1hdGNoKC9cXGQrLyk7aWYodGhpcy5kYXk9blswXSx0KWZvcih2YXIgcj0xO3I8PTMxO3IrPTEpdChyKS5yZXBsYWNlKC9cXFt8XFxdL2csXCJcIik9PT1lJiYodGhpcy5kYXk9cil9XSx3OltpLGYoXCJ3ZWVrXCIpXSx3dzpbcixmKFwid2Vla1wiKV0sTTpbaSxmKFwibW9udGhcIildLE1NOltyLGYoXCJtb250aFwiKV0sTU1NOltvLGZ1bmN0aW9uKGUpe3ZhciB0PXUoXCJtb250aHNcIiksbj0odShcIm1vbnRoc1Nob3J0XCIpfHx0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoMCwzKX0pKSkuaW5kZXhPZihlKSsxO2lmKG48MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1uJTEyfHxufV0sTU1NTTpbbyxmdW5jdGlvbihlKXt2YXIgdD11KFwibW9udGhzXCIpLmluZGV4T2YoZSkrMTtpZih0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9dCUxMnx8dH1dLFk6Wy9bKy1dP1xcZCsvLGYoXCJ5ZWFyXCIpXSxZWTpbcixmdW5jdGlvbihlKXt0aGlzLnllYXI9YShlKX1dLFlZWVk6Wy9cXGR7NH0vLGYoXCJ5ZWFyXCIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbChuKXt2YXIgcixpO3I9bixpPXMmJnMuZm9ybWF0cztmb3IodmFyIG89KG49ci5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csKGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1yJiZyLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG58fGlbcl18fGVbcl18fGlbb10ucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHR8fG4uc2xpY2UoMSl9KSl9KSkpLm1hdGNoKHQpLGE9by5sZW5ndGgsZj0wO2Y8YTtmKz0xKXt2YXIgaD1vW2ZdLHU9Y1toXSxkPXUmJnVbMF0sbD11JiZ1WzFdO29bZl09bD97cmVnZXg6ZCxwYXJzZXI6bH06aC5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX1yZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LG49MCxyPTA7bjxhO24rPTEpe3ZhciBpPW9bbl07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpcis9aS5sZW5ndGg7ZWxzZXt2YXIgcz1pLnJlZ2V4LGY9aS5wYXJzZXIsaD1lLnNsaWNlKHIpLHU9cy5leGVjKGgpWzBdO2YuY2FsbCh0LHUpLGU9ZS5yZXBsYWNlKHUsXCJcIil9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmFmdGVybm9vbjtpZih2b2lkIDAhPT10KXt2YXIgbj1lLmhvdXJzO3Q/bjwxMiYmKGUuaG91cnMrPTEyKToxMj09PW4mJihlLmhvdXJzPTApLGRlbGV0ZSBlLmFmdGVybm9vbn19KHQpLHR9fXJldHVybiBmdW5jdGlvbihlLHQsbil7bi5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLGUmJmUucGFyc2VUd29EaWdpdFllYXImJihhPWUucGFyc2VUd29EaWdpdFllYXIpO3ZhciByPXQucHJvdG90eXBlLGk9ci5wYXJzZTtyLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0ZSxyPWUudXRjLG89ZS5hcmdzO3RoaXMuJHU9cjt2YXIgYT1vWzFdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj0hMD09PW9bMl0saD0hMD09PW9bM10sdT1mfHxoLGQ9b1syXTtoJiYoZD1vWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFmJiZkJiYocz1uLkxzW2RdKSx0aGlzLiRkPWZ1bmN0aW9uKGUsdCxuLHIpe3RyeXtpZihbXCJ4XCIsXCJYXCJdLmluZGV4T2YodCk+LTEpcmV0dXJuIG5ldyBEYXRlKChcIlhcIj09PXQ/MWUzOjEpKmUpO3ZhciBpPWwodCkoZSksbz1pLnllYXIscz1pLm1vbnRoLGE9aS5kYXksZj1pLmhvdXJzLGg9aS5taW51dGVzLHU9aS5zZWNvbmRzLGQ9aS5taWxsaXNlY29uZHMsYz1pLnpvbmUsbT1pLndlZWssTT1uZXcgRGF0ZSxZPWF8fChvfHxzPzE6TS5nZXREYXRlKCkpLHA9b3x8TS5nZXRGdWxsWWVhcigpLHY9MDtvJiYhc3x8KHY9cz4wP3MtMTpNLmdldE1vbnRoKCkpO3ZhciBELHc9Znx8MCxnPWh8fDAseT11fHwwLEw9ZHx8MDtyZXR1cm4gYz9uZXcgRGF0ZShEYXRlLlVUQyhwLHYsWSx3LGcseSxMKzYwKmMub2Zmc2V0KjFlMykpOm4/bmV3IERhdGUoRGF0ZS5VVEMocCx2LFksdyxnLHksTCkpOihEPW5ldyBEYXRlKHAsdixZLHcsZyx5LEwpLG0mJihEPXIoRCkud2VlayhtKS50b0RhdGUoKSksRCl9Y2F0Y2goZSl7cmV0dXJuIG5ldyBEYXRlKFwiXCIpfX0odCxhLHIsbiksdGhpcy5pbml0KCksZCYmITAhPT1kJiYodGhpcy4kTD10aGlzLmxvY2FsZShkKS4kTCksdSYmdCE9dGhpcy5mb3JtYXQoYSkmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKSxzPXt9fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgYz1hLmxlbmd0aCxtPTE7bTw9YzttKz0xKXtvWzFdPWFbbS0xXTt2YXIgTT1uLmFwcGx5KHRoaXMsbyk7aWYoTS5pc1ZhbGlkKCkpe3RoaXMuJGQ9TS4kZCx0aGlzLiRMPU0uJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWMmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKX1lbHNlIGkuY2FsbCh0aGlzLGUpfX19KSk7IiwKICAgICIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5wcm90b3R5cGUsbj1yLmZvcm1hdDtyLmZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBuLmJpbmQodGhpcykoZSk7dmFyIHM9dGhpcy4kdXRpbHMoKSxhPShlfHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIpLnJlcGxhY2UoL1xcWyhbXlxcXV0rKV18UXx3b3x3d3x3fFdXfFd8enp6fHp8Z2dnZ3xHR0dHfERvfFh8eHxrezEsMn18Uy9nLChmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwiUVwiOnJldHVybiBNYXRoLmNlaWwoKHQuJE0rMSkvMyk7Y2FzZVwiRG9cIjpyZXR1cm4gci5vcmRpbmFsKHQuJEQpO2Nhc2VcImdnZ2dcIjpyZXR1cm4gdC53ZWVrWWVhcigpO2Nhc2VcIkdHR0dcIjpyZXR1cm4gdC5pc29XZWVrWWVhcigpO2Nhc2VcIndvXCI6cmV0dXJuIHIub3JkaW5hbCh0LndlZWsoKSxcIldcIik7Y2FzZVwid1wiOmNhc2VcInd3XCI6cmV0dXJuIHMucyh0LndlZWsoKSxcIndcIj09PWU/MToyLFwiMFwiKTtjYXNlXCJXXCI6Y2FzZVwiV1dcIjpyZXR1cm4gcy5zKHQuaXNvV2VlaygpLFwiV1wiPT09ZT8xOjIsXCIwXCIpO2Nhc2VcImtcIjpjYXNlXCJra1wiOnJldHVybiBzLnMoU3RyaW5nKDA9PT10LiRIPzI0OnQuJEgpLFwia1wiPT09ZT8xOjIsXCIwXCIpO2Nhc2VcIlhcIjpyZXR1cm4gTWF0aC5mbG9vcih0LiRkLmdldFRpbWUoKS8xZTMpO2Nhc2VcInhcIjpyZXR1cm4gdC4kZC5nZXRUaW1lKCk7Y2FzZVwielwiOnJldHVyblwiW1wiK3Qub2Zmc2V0TmFtZSgpK1wiXVwiO2Nhc2VcInp6elwiOnJldHVyblwiW1wiK3Qub2Zmc2V0TmFtZShcImxvbmdcIikrXCJdXCI7ZGVmYXVsdDpyZXR1cm4gZX19KSk7cmV0dXJuIG4uYmluZCh0aGlzKShhKX19fSkpOyIsCiAgICAiaW1wb3J0IHtcbiAgdXRpbHNfZGVmYXVsdFxufSBmcm9tIFwiLi9jaHVuay0yRURUV0RZSS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjVGl0bGUsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGxvZyxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9nYW50dC9wYXJzZXIvZ2FudHQuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFs2LCA4LCAxMCwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMzLCAzNSwgMzYsIDM4LCA0MF0sICRWMSA9IFsxLCAyNl0sICRWMiA9IFsxLCAyN10sICRWMyA9IFsxLCAyOF0sICRWNCA9IFsxLCAyOV0sICRWNSA9IFsxLCAzMF0sICRWNiA9IFsxLCAzMV0sICRWNyA9IFsxLCAzMl0sICRWOCA9IFsxLCAzM10sICRWOSA9IFsxLCAzNF0sICRWYSA9IFsxLCA5XSwgJFZiID0gWzEsIDEwXSwgJFZjID0gWzEsIDExXSwgJFZkID0gWzEsIDEyXSwgJFZlID0gWzEsIDEzXSwgJFZmID0gWzEsIDE0XSwgJFZnID0gWzEsIDE1XSwgJFZoID0gWzEsIDE2XSwgJFZpID0gWzEsIDE5XSwgJFZqID0gWzEsIDIwXSwgJFZrID0gWzEsIDIxXSwgJFZsID0gWzEsIDIyXSwgJFZtID0gWzEsIDIzXSwgJFZuID0gWzEsIDI1XSwgJFZvID0gWzEsIDM1XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiZ2FudHRcIjogNCwgXCJkb2N1bWVudFwiOiA1LCBcIkVPRlwiOiA2LCBcImxpbmVcIjogNywgXCJTUEFDRVwiOiA4LCBcInN0YXRlbWVudFwiOiA5LCBcIk5MXCI6IDEwLCBcIndlZWtkYXlcIjogMTEsIFwid2Vla2RheV9tb25kYXlcIjogMTIsIFwid2Vla2RheV90dWVzZGF5XCI6IDEzLCBcIndlZWtkYXlfd2VkbmVzZGF5XCI6IDE0LCBcIndlZWtkYXlfdGh1cnNkYXlcIjogMTUsIFwid2Vla2RheV9mcmlkYXlcIjogMTYsIFwid2Vla2RheV9zYXR1cmRheVwiOiAxNywgXCJ3ZWVrZGF5X3N1bmRheVwiOiAxOCwgXCJ3ZWVrZW5kXCI6IDE5LCBcIndlZWtlbmRfZnJpZGF5XCI6IDIwLCBcIndlZWtlbmRfc2F0dXJkYXlcIjogMjEsIFwiZGF0ZUZvcm1hdFwiOiAyMiwgXCJpbmNsdXNpdmVFbmREYXRlc1wiOiAyMywgXCJ0b3BBeGlzXCI6IDI0LCBcImF4aXNGb3JtYXRcIjogMjUsIFwidGlja0ludGVydmFsXCI6IDI2LCBcImV4Y2x1ZGVzXCI6IDI3LCBcImluY2x1ZGVzXCI6IDI4LCBcInRvZGF5TWFya2VyXCI6IDI5LCBcInRpdGxlXCI6IDMwLCBcImFjY190aXRsZVwiOiAzMSwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzIsIFwiYWNjX2Rlc2NyXCI6IDMzLCBcImFjY19kZXNjcl92YWx1ZVwiOiAzNCwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDM1LCBcInNlY3Rpb25cIjogMzYsIFwiY2xpY2tTdGF0ZW1lbnRcIjogMzcsIFwidGFza1R4dFwiOiAzOCwgXCJ0YXNrRGF0YVwiOiAzOSwgXCJjbGlja1wiOiA0MCwgXCJjYWxsYmFja25hbWVcIjogNDEsIFwiY2FsbGJhY2thcmdzXCI6IDQyLCBcImhyZWZcIjogNDMsIFwiY2xpY2tTdGF0ZW1lbnREZWJ1Z1wiOiA0NCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiZ2FudHRcIiwgNjogXCJFT0ZcIiwgODogXCJTUEFDRVwiLCAxMDogXCJOTFwiLCAxMjogXCJ3ZWVrZGF5X21vbmRheVwiLCAxMzogXCJ3ZWVrZGF5X3R1ZXNkYXlcIiwgMTQ6IFwid2Vla2RheV93ZWRuZXNkYXlcIiwgMTU6IFwid2Vla2RheV90aHVyc2RheVwiLCAxNjogXCJ3ZWVrZGF5X2ZyaWRheVwiLCAxNzogXCJ3ZWVrZGF5X3NhdHVyZGF5XCIsIDE4OiBcIndlZWtkYXlfc3VuZGF5XCIsIDIwOiBcIndlZWtlbmRfZnJpZGF5XCIsIDIxOiBcIndlZWtlbmRfc2F0dXJkYXlcIiwgMjI6IFwiZGF0ZUZvcm1hdFwiLCAyMzogXCJpbmNsdXNpdmVFbmREYXRlc1wiLCAyNDogXCJ0b3BBeGlzXCIsIDI1OiBcImF4aXNGb3JtYXRcIiwgMjY6IFwidGlja0ludGVydmFsXCIsIDI3OiBcImV4Y2x1ZGVzXCIsIDI4OiBcImluY2x1ZGVzXCIsIDI5OiBcInRvZGF5TWFya2VyXCIsIDMwOiBcInRpdGxlXCIsIDMxOiBcImFjY190aXRsZVwiLCAzMjogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzM6IFwiYWNjX2Rlc2NyXCIsIDM0OiBcImFjY19kZXNjcl92YWx1ZVwiLCAzNTogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDM2OiBcInNlY3Rpb25cIiwgMzg6IFwidGFza1R4dFwiLCAzOTogXCJ0YXNrRGF0YVwiLCA0MDogXCJjbGlja1wiLCA0MTogXCJjYWxsYmFja25hbWVcIiwgNDI6IFwiY2FsbGJhY2thcmdzXCIsIDQzOiBcImhyZWZcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzUsIDBdLCBbNSwgMl0sIFs3LCAyXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzExLCAxXSwgWzE5LCAxXSwgWzE5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMl0sIFszNywgMl0sIFszNywgM10sIFszNywgM10sIFszNywgNF0sIFszNywgM10sIFszNywgNF0sIFszNywgMl0sIFs0NCwgMl0sIFs0NCwgM10sIFs0NCwgM10sIFs0NCwgNF0sIFs0NCwgM10sIFs0NCwgNF0sIFs0NCwgMl1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5zZXRXZWVrZGF5KFwibW9uZGF5XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcInR1ZXNkYXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcIndlZG5lc2RheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB5eS5zZXRXZWVrZGF5KFwidGh1cnNkYXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcImZyaWRheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB5eS5zZXRXZWVrZGF5KFwic2F0dXJkYXlcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkuc2V0V2Vla2RheShcInN1bmRheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5zZXRXZWVrZW5kKFwiZnJpZGF5XCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LnNldFdlZWtlbmQoXCJzYXR1cmRheVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICB5eS5zZXREYXRlRm9ybWF0KCQkWyQwXS5zdWJzdHIoMTEpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDExKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICB5eS5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoMTgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHl5LlRvcEF4aXMoKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHl5LnNldEF4aXNGb3JtYXQoJCRbJDBdLnN1YnN0cigxMSkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoMTEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHl5LnNldFRpY2tJbnRlcnZhbCgkJFskMF0uc3Vic3RyKDEzKSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cigxMyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgeXkuc2V0RXhjbHVkZXMoJCRbJDBdLnN1YnN0cig5KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5zZXRJbmNsdWRlcygkJFskMF0uc3Vic3RyKDkpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHl5LnNldFRvZGF5TWFya2VyKCQkWyQwXS5zdWJzdHIoMTIpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDEyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cig2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHl5LmFkZFNlY3Rpb24oJCRbJDBdLnN1YnN0cig4KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5hZGRUYXNrKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gXCJ0YXNrXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMV0sICQkWyQwXSwgbnVsbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sIG51bGwpO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAyXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0Q2xpY2tFdmVudCgkJFskMCAtIDJdLCAkJFskMF0sIG51bGwpO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXTtcbiAgICAgICAgICB5eS5zZXRDbGlja0V2ZW50KCQkWyQwIC0gM10sICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIHl5LnNldExpbmsoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdICsgXCIgXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAyXSArIFwiIFwiICsgJCRbJDAgLSAxXSArIFwiIFwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM10gKyBcIiBcIiArICQkWyQwIC0gMl0gKyBcIiBcIiArICQkWyQwIC0gMV0gKyBcIiBcIiArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IFsxLCA2XSwgOTogNywgMTA6IFsxLCA4XSwgMTE6IDE3LCAxMjogJFYxLCAxMzogJFYyLCAxNDogJFYzLCAxNTogJFY0LCAxNjogJFY1LCAxNzogJFY2LCAxODogJFY3LCAxOTogMTgsIDIwOiAkVjgsIDIxOiAkVjksIDIyOiAkVmEsIDIzOiAkVmIsIDI0OiAkVmMsIDI1OiAkVmQsIDI2OiAkVmUsIDI3OiAkVmYsIDI4OiAkVmcsIDI5OiAkVmgsIDMwOiAkVmksIDMxOiAkVmosIDMzOiAkVmssIDM1OiAkVmwsIDM2OiAkVm0sIDM3OiAyNCwgMzg6ICRWbiwgNDA6ICRWbyB9LCBvKCRWMCwgWzIsIDddLCB7IDE6IFsyLCAxXSB9KSwgbygkVjAsIFsyLCAzXSksIHsgOTogMzYsIDExOiAxNywgMTI6ICRWMSwgMTM6ICRWMiwgMTQ6ICRWMywgMTU6ICRWNCwgMTY6ICRWNSwgMTc6ICRWNiwgMTg6ICRWNywgMTk6IDE4LCAyMDogJFY4LCAyMTogJFY5LCAyMjogJFZhLCAyMzogJFZiLCAyNDogJFZjLCAyNTogJFZkLCAyNjogJFZlLCAyNzogJFZmLCAyODogJFZnLCAyOTogJFZoLCAzMDogJFZpLCAzMTogJFZqLCAzMzogJFZrLCAzNTogJFZsLCAzNjogJFZtLCAzNzogMjQsIDM4OiAkVm4sIDQwOiAkVm8gfSwgbygkVjAsIFsyLCA1XSksIG8oJFYwLCBbMiwgNl0pLCBvKCRWMCwgWzIsIDE3XSksIG8oJFYwLCBbMiwgMThdKSwgbygkVjAsIFsyLCAxOV0pLCBvKCRWMCwgWzIsIDIwXSksIG8oJFYwLCBbMiwgMjFdKSwgbygkVjAsIFsyLCAyMl0pLCBvKCRWMCwgWzIsIDIzXSksIG8oJFYwLCBbMiwgMjRdKSwgbygkVjAsIFsyLCAyNV0pLCBvKCRWMCwgWzIsIDI2XSksIG8oJFYwLCBbMiwgMjddKSwgeyAzMjogWzEsIDM3XSB9LCB7IDM0OiBbMSwgMzhdIH0sIG8oJFYwLCBbMiwgMzBdKSwgbygkVjAsIFsyLCAzMV0pLCBvKCRWMCwgWzIsIDMyXSksIHsgMzk6IFsxLCAzOV0gfSwgbygkVjAsIFsyLCA4XSksIG8oJFYwLCBbMiwgOV0pLCBvKCRWMCwgWzIsIDEwXSksIG8oJFYwLCBbMiwgMTFdKSwgbygkVjAsIFsyLCAxMl0pLCBvKCRWMCwgWzIsIDEzXSksIG8oJFYwLCBbMiwgMTRdKSwgbygkVjAsIFsyLCAxNV0pLCBvKCRWMCwgWzIsIDE2XSksIHsgNDE6IFsxLCA0MF0sIDQzOiBbMSwgNDFdIH0sIG8oJFYwLCBbMiwgNF0pLCBvKCRWMCwgWzIsIDI4XSksIG8oJFYwLCBbMiwgMjldKSwgbygkVjAsIFsyLCAzM10pLCBvKCRWMCwgWzIsIDM0XSwgeyA0MjogWzEsIDQyXSwgNDM6IFsxLCA0M10gfSksIG8oJFYwLCBbMiwgNDBdLCB7IDQxOiBbMSwgNDRdIH0pLCBvKCRWMCwgWzIsIDM1XSwgeyA0MzogWzEsIDQ1XSB9KSwgbygkVjAsIFsyLCAzNl0pLCBvKCRWMCwgWzIsIDM4XSwgeyA0MjogWzEsIDQ2XSB9KSwgbygkVjAsIFsyLCAzN10pLCBvKCRWMCwgWzIsIDM5XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7fSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIm9wZW5fZGlyZWN0aXZlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwib3Blbl9kaXJlY3RpdmVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiaHJlZlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja25hbWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJjYWxsYmFja2FyZ3NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsaWNrXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDIyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gMjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgcmV0dXJuIDI1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY0Rlc2NyaXB0aW9uXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIFwiOlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzolJVxceykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86JSUoPyFcXHspKlteXFxuXSopL2ksIC9eKD86W15cXH1dJSUqW15cXG5dKikvaSwgL14oPzolJSpbXlxcbl0qW1xcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiVbXlxcbl0qKS9pLCAvXig/OmhyZWZbXFxzXStbXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0qKS9pLCAvXig/OmNhbGxbXFxzXSspL2ksIC9eKD86XFwoW1xcc10qXFwpKS9pLCAvXig/OlxcKCkvaSwgL14oPzpbXihdKikvaSwgL14oPzpcXCkpL2ksIC9eKD86W14pXSopL2ksIC9eKD86Y2xpY2tbXFxzXSspL2ksIC9eKD86W1xcc1xcbl0pL2ksIC9eKD86W15cXHNcXG5dKikvaSwgL14oPzpnYW50dFxcYikvaSwgL14oPzpkYXRlRm9ybWF0XFxzW14jXFxuO10rKS9pLCAvXig/OmluY2x1c2l2ZUVuZERhdGVzXFxiKS9pLCAvXig/OnRvcEF4aXNcXGIpL2ksIC9eKD86YXhpc0Zvcm1hdFxcc1teI1xcbjtdKykvaSwgL14oPzp0aWNrSW50ZXJ2YWxcXHNbXiNcXG47XSspL2ksIC9eKD86aW5jbHVkZXNcXHNbXiNcXG47XSspL2ksIC9eKD86ZXhjbHVkZXNcXHNbXiNcXG47XSspL2ksIC9eKD86dG9kYXlNYXJrZXJcXHNbXlxcbjtdKykvaSwgL14oPzp3ZWVrZGF5XFxzK21vbmRheVxcYikvaSwgL14oPzp3ZWVrZGF5XFxzK3R1ZXNkYXlcXGIpL2ksIC9eKD86d2Vla2RheVxccyt3ZWRuZXNkYXlcXGIpL2ksIC9eKD86d2Vla2RheVxccyt0aHVyc2RheVxcYikvaSwgL14oPzp3ZWVrZGF5XFxzK2ZyaWRheVxcYikvaSwgL14oPzp3ZWVrZGF5XFxzK3NhdHVyZGF5XFxiKS9pLCAvXig/OndlZWtkYXlcXHMrc3VuZGF5XFxiKS9pLCAvXig/OndlZWtlbmRcXHMrZnJpZGF5XFxiKS9pLCAvXig/OndlZWtlbmRcXHMrc2F0dXJkYXlcXGIpL2ksIC9eKD86XFxkXFxkXFxkXFxkLVxcZFxcZC1cXGRcXGRcXGIpL2ksIC9eKD86dGl0bGVcXHNbXlxcbl0rKS9pLCAvXig/OmFjY0Rlc2NyaXB0aW9uXFxzW14jXFxuO10rKS9pLCAvXig/OnNlY3Rpb25cXHNbXlxcbl0rKS9pLCAvXig/OlteOlxcbl0rKS9pLCAvXig/OjpbXiNcXG47XSspL2ksIC9eKD86OikvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs2LCA3XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFs0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFsyXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjYWxsYmFja2FyZ3NcIjogeyBcInJ1bGVzXCI6IFsyMSwgMjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNhbGxiYWNrbmFtZVwiOiB7IFwicnVsZXNcIjogWzE4LCAxOSwgMjBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImhyZWZcIjogeyBcInJ1bGVzXCI6IFsxNSwgMTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsaWNrXCI6IHsgXCJydWxlc1wiOiBbMjQsIDI1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMywgNSwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNywgMjMsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTJdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgZ2FudHRfZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2dhbnR0L2dhbnR0RGIuanNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgZGF5anNJc29XZWVrIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNvV2Vlay5qc1wiO1xuaW1wb3J0IGRheWpzQ3VzdG9tUGFyc2VGb3JtYXQgZnJvbSBcImRheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdC5qc1wiO1xuaW1wb3J0IGRheWpzQWR2YW5jZWRGb3JtYXQgZnJvbSBcImRheWpzL3BsdWdpbi9hZHZhbmNlZEZvcm1hdC5qc1wiO1xuZGF5anMuZXh0ZW5kKGRheWpzSXNvV2Vlayk7XG5kYXlqcy5leHRlbmQoZGF5anNDdXN0b21QYXJzZUZvcm1hdCk7XG5kYXlqcy5leHRlbmQoZGF5anNBZHZhbmNlZEZvcm1hdCk7XG52YXIgV0VFS0VORF9TVEFSVF9EQVkgPSB7IGZyaWRheTogNSwgc2F0dXJkYXk6IDYgfTtcbnZhciBkYXRlRm9ybWF0ID0gXCJcIjtcbnZhciBheGlzRm9ybWF0ID0gXCJcIjtcbnZhciB0aWNrSW50ZXJ2YWwgPSB2b2lkIDA7XG52YXIgdG9kYXlNYXJrZXIgPSBcIlwiO1xudmFyIGluY2x1ZGVzID0gW107XG52YXIgZXhjbHVkZXMgPSBbXTtcbnZhciBsaW5rcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgc2VjdGlvbnMgPSBbXTtcbnZhciB0YXNrcyA9IFtdO1xudmFyIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbnZhciBkaXNwbGF5TW9kZSA9IFwiXCI7XG52YXIgdGFncyA9IFtcImFjdGl2ZVwiLCBcImRvbmVcIiwgXCJjcml0XCIsIFwibWlsZXN0b25lXCJdO1xudmFyIGZ1bnMgPSBbXTtcbnZhciBpbmNsdXNpdmVFbmREYXRlcyA9IGZhbHNlO1xudmFyIHRvcEF4aXMgPSBmYWxzZTtcbnZhciB3ZWVrZGF5ID0gXCJzdW5kYXlcIjtcbnZhciB3ZWVrZW5kID0gXCJzYXR1cmRheVwiO1xudmFyIGxhc3RPcmRlciA9IDA7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc2VjdGlvbnMgPSBbXTtcbiAgdGFza3MgPSBbXTtcbiAgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xuICBmdW5zID0gW107XG4gIHRhc2tDbnQgPSAwO1xuICBsYXN0VGFzayA9IHZvaWQgMDtcbiAgbGFzdFRhc2tJRCA9IHZvaWQgMDtcbiAgcmF3VGFza3MgPSBbXTtcbiAgZGF0ZUZvcm1hdCA9IFwiXCI7XG4gIGF4aXNGb3JtYXQgPSBcIlwiO1xuICBkaXNwbGF5TW9kZSA9IFwiXCI7XG4gIHRpY2tJbnRlcnZhbCA9IHZvaWQgMDtcbiAgdG9kYXlNYXJrZXIgPSBcIlwiO1xuICBpbmNsdWRlcyA9IFtdO1xuICBleGNsdWRlcyA9IFtdO1xuICBpbmNsdXNpdmVFbmREYXRlcyA9IGZhbHNlO1xuICB0b3BBeGlzID0gZmFsc2U7XG4gIGxhc3RPcmRlciA9IDA7XG4gIGxpbmtzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY2xlYXIoKTtcbiAgd2Vla2RheSA9IFwic3VuZGF5XCI7XG4gIHdlZWtlbmQgPSBcInNhdHVyZGF5XCI7XG59LCBcImNsZWFyXCIpO1xudmFyIHNldEF4aXNGb3JtYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBheGlzRm9ybWF0ID0gdHh0O1xufSwgXCJzZXRBeGlzRm9ybWF0XCIpO1xudmFyIGdldEF4aXNGb3JtYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYXhpc0Zvcm1hdDtcbn0sIFwiZ2V0QXhpc0Zvcm1hdFwiKTtcbnZhciBzZXRUaWNrSW50ZXJ2YWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICB0aWNrSW50ZXJ2YWwgPSB0eHQ7XG59LCBcInNldFRpY2tJbnRlcnZhbFwiKTtcbnZhciBnZXRUaWNrSW50ZXJ2YWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGlja0ludGVydmFsO1xufSwgXCJnZXRUaWNrSW50ZXJ2YWxcIik7XG52YXIgc2V0VG9kYXlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICB0b2RheU1hcmtlciA9IHR4dDtcbn0sIFwic2V0VG9kYXlNYXJrZXJcIik7XG52YXIgZ2V0VG9kYXlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdG9kYXlNYXJrZXI7XG59LCBcImdldFRvZGF5TWFya2VyXCIpO1xudmFyIHNldERhdGVGb3JtYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBkYXRlRm9ybWF0ID0gdHh0O1xufSwgXCJzZXREYXRlRm9ybWF0XCIpO1xudmFyIGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgaW5jbHVzaXZlRW5kRGF0ZXMgPSB0cnVlO1xufSwgXCJlbmFibGVJbmNsdXNpdmVFbmREYXRlc1wiKTtcbnZhciBlbmREYXRlc0FyZUluY2x1c2l2ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbmNsdXNpdmVFbmREYXRlcztcbn0sIFwiZW5kRGF0ZXNBcmVJbmNsdXNpdmVcIik7XG52YXIgZW5hYmxlVG9wQXhpcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHRvcEF4aXMgPSB0cnVlO1xufSwgXCJlbmFibGVUb3BBeGlzXCIpO1xudmFyIHRvcEF4aXNFbmFibGVkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRvcEF4aXM7XG59LCBcInRvcEF4aXNFbmFibGVkXCIpO1xudmFyIHNldERpc3BsYXlNb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eHQpIHtcbiAgZGlzcGxheU1vZGUgPSB0eHQ7XG59LCBcInNldERpc3BsYXlNb2RlXCIpO1xudmFyIGdldERpc3BsYXlNb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRpc3BsYXlNb2RlO1xufSwgXCJnZXREaXNwbGF5TW9kZVwiKTtcbnZhciBnZXREYXRlRm9ybWF0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXQ7XG59LCBcImdldERhdGVGb3JtYXRcIik7XG52YXIgc2V0SW5jbHVkZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHR4dCkge1xuICBpbmNsdWRlcyA9IHR4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXFxzLF0rLyk7XG59LCBcInNldEluY2x1ZGVzXCIpO1xudmFyIGdldEluY2x1ZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGluY2x1ZGVzO1xufSwgXCJnZXRJbmNsdWRlc1wiKTtcbnZhciBzZXRFeGNsdWRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIGV4Y2x1ZGVzID0gdHh0LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcXHMsXSsvKTtcbn0sIFwic2V0RXhjbHVkZXNcIik7XG52YXIgZ2V0RXhjbHVkZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZXhjbHVkZXM7XG59LCBcImdldEV4Y2x1ZGVzXCIpO1xudmFyIGdldExpbmtzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGxpbmtzO1xufSwgXCJnZXRMaW5rc1wiKTtcbnZhciBhZGRTZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0eHQpIHtcbiAgY3VycmVudFNlY3Rpb24gPSB0eHQ7XG4gIHNlY3Rpb25zLnB1c2godHh0KTtcbn0sIFwiYWRkU2VjdGlvblwiKTtcbnZhciBnZXRTZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzZWN0aW9ucztcbn0sIFwiZ2V0U2VjdGlvbnNcIik7XG52YXIgZ2V0VGFza3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBsZXQgYWxsSXRlbXNQcm9jZXNzZWQgPSBjb21waWxlVGFza3MoKTtcbiAgY29uc3QgbWF4RGVwdGggPSAxMDtcbiAgbGV0IGl0ZXJhdGlvbkNvdW50ID0gMDtcbiAgd2hpbGUgKCFhbGxJdGVtc1Byb2Nlc3NlZCAmJiBpdGVyYXRpb25Db3VudCA8IG1heERlcHRoKSB7XG4gICAgYWxsSXRlbXNQcm9jZXNzZWQgPSBjb21waWxlVGFza3MoKTtcbiAgICBpdGVyYXRpb25Db3VudCsrO1xuICB9XG4gIHRhc2tzID0gcmF3VGFza3M7XG4gIHJldHVybiB0YXNrcztcbn0sIFwiZ2V0VGFza3NcIik7XG52YXIgaXNJbnZhbGlkRGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGF0ZSwgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKSB7XG4gIGlmIChpbmNsdWRlczIuaW5jbHVkZXMoZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdDIudHJpbSgpKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGV4Y2x1ZGVzMi5pbmNsdWRlcyhcIndlZWtlbmRzXCIpICYmIChkYXRlLmlzb1dlZWtkYXkoKSA9PT0gV0VFS0VORF9TVEFSVF9EQVlbd2Vla2VuZF0gfHwgZGF0ZS5pc29XZWVrZGF5KCkgPT09IFdFRUtFTkRfU1RBUlRfREFZW3dlZWtlbmRdICsgMSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoZXhjbHVkZXMyLmluY2x1ZGVzKGRhdGUuZm9ybWF0KFwiZGRkZFwiKS50b0xvd2VyQ2FzZSgpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBleGNsdWRlczIuaW5jbHVkZXMoZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdDIudHJpbSgpKSk7XG59LCBcImlzSW52YWxpZERhdGVcIik7XG52YXIgc2V0V2Vla2RheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIHdlZWtkYXkgPSB0eHQ7XG59LCBcInNldFdlZWtkYXlcIik7XG52YXIgZ2V0V2Vla2RheSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB3ZWVrZGF5O1xufSwgXCJnZXRXZWVrZGF5XCIpO1xudmFyIHNldFdlZWtlbmQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0YXJ0RGF5KSB7XG4gIHdlZWtlbmQgPSBzdGFydERheTtcbn0sIFwic2V0V2Vla2VuZFwiKTtcbnZhciBjaGVja1Rhc2tEYXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGFzaywgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKSB7XG4gIGlmICghZXhjbHVkZXMyLmxlbmd0aCB8fCB0YXNrLm1hbnVhbEVuZFRpbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHN0YXJ0VGltZTtcbiAgaWYgKHRhc2suc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHN0YXJ0VGltZSA9IGRheWpzKHRhc2suc3RhcnRUaW1lKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFydFRpbWUgPSBkYXlqcyh0YXNrLnN0YXJ0VGltZSwgZGF0ZUZvcm1hdDIsIHRydWUpO1xuICB9XG4gIHN0YXJ0VGltZSA9IHN0YXJ0VGltZS5hZGQoMSwgXCJkXCIpO1xuICBsZXQgb3JpZ2luYWxFbmRUaW1lO1xuICBpZiAodGFzay5lbmRUaW1lIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIG9yaWdpbmFsRW5kVGltZSA9IGRheWpzKHRhc2suZW5kVGltZSk7XG4gIH0gZWxzZSB7XG4gICAgb3JpZ2luYWxFbmRUaW1lID0gZGF5anModGFzay5lbmRUaW1lLCBkYXRlRm9ybWF0MiwgdHJ1ZSk7XG4gIH1cbiAgY29uc3QgW2ZpeGVkRW5kVGltZSwgcmVuZGVyRW5kVGltZV0gPSBmaXhUYXNrRGF0ZXMoXG4gICAgc3RhcnRUaW1lLFxuICAgIG9yaWdpbmFsRW5kVGltZSxcbiAgICBkYXRlRm9ybWF0MixcbiAgICBleGNsdWRlczIsXG4gICAgaW5jbHVkZXMyXG4gICk7XG4gIHRhc2suZW5kVGltZSA9IGZpeGVkRW5kVGltZS50b0RhdGUoKTtcbiAgdGFzay5yZW5kZXJFbmRUaW1lID0gcmVuZGVyRW5kVGltZTtcbn0sIFwiY2hlY2tUYXNrRGF0ZXNcIik7XG52YXIgZml4VGFza0RhdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdGFydFRpbWUsIGVuZFRpbWUsIGRhdGVGb3JtYXQyLCBleGNsdWRlczIsIGluY2x1ZGVzMikge1xuICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICBsZXQgcmVuZGVyRW5kVGltZSA9IG51bGw7XG4gIHdoaWxlIChzdGFydFRpbWUgPD0gZW5kVGltZSkge1xuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgcmVuZGVyRW5kVGltZSA9IGVuZFRpbWUudG9EYXRlKCk7XG4gICAgfVxuICAgIGludmFsaWQgPSBpc0ludmFsaWREYXRlKHN0YXJ0VGltZSwgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKTtcbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgZW5kVGltZSA9IGVuZFRpbWUuYWRkKDEsIFwiZFwiKTtcbiAgICB9XG4gICAgc3RhcnRUaW1lID0gc3RhcnRUaW1lLmFkZCgxLCBcImRcIik7XG4gIH1cbiAgcmV0dXJuIFtlbmRUaW1lLCByZW5kZXJFbmRUaW1lXTtcbn0sIFwiZml4VGFza0RhdGVzXCIpO1xudmFyIGdldFN0YXJ0RGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocHJldlRpbWUsIGRhdGVGb3JtYXQyLCBzdHIpIHtcbiAgc3RyID0gc3RyLnRyaW0oKTtcbiAgY29uc3QgYWZ0ZXJSZVBhdHRlcm4gPSAvXmFmdGVyXFxzKyg/PGlkcz5bXFxkXFx3LSBdKykvO1xuICBjb25zdCBhZnRlclN0YXRlbWVudCA9IGFmdGVyUmVQYXR0ZXJuLmV4ZWMoc3RyKTtcbiAgaWYgKGFmdGVyU3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgbGV0IGxhdGVzdFRhc2sgPSBudWxsO1xuICAgIGZvciAoY29uc3QgaWQgb2YgYWZ0ZXJTdGF0ZW1lbnQuZ3JvdXBzLmlkcy5zcGxpdChcIiBcIikpIHtcbiAgICAgIGxldCB0YXNrID0gZmluZFRhc2tCeUlkKGlkKTtcbiAgICAgIGlmICh0YXNrICE9PSB2b2lkIDAgJiYgKCFsYXRlc3RUYXNrIHx8IHRhc2suZW5kVGltZSA+IGxhdGVzdFRhc2suZW5kVGltZSkpIHtcbiAgICAgICAgbGF0ZXN0VGFzayA9IHRhc2s7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsYXRlc3RUYXNrKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0VGFzay5lbmRUaW1lO1xuICAgIH1cbiAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiB0b2RheTtcbiAgfVxuICBsZXQgbURhdGUgPSBkYXlqcyhzdHIsIGRhdGVGb3JtYXQyLnRyaW0oKSwgdHJ1ZSk7XG4gIGlmIChtRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICByZXR1cm4gbURhdGUudG9EYXRlKCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKFwiSW52YWxpZCBkYXRlOlwiICsgc3RyKTtcbiAgICBsb2cuZGVidWcoXCJXaXRoIGRhdGUgZm9ybWF0OlwiICsgZGF0ZUZvcm1hdDIudHJpbSgpKTtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoc3RyKTtcbiAgICBpZiAoZCA9PT0gdm9pZCAwIHx8IGlzTmFOKGQuZ2V0VGltZSgpKSB8fCAvLyBXZWJLaXQgYnJvd3NlcnMgY2FuIG1pcy1wYXJzZSBpbnZhbGlkIGRhdGVzIHRvIGJlIHJpZGljdWxvdXNseVxuICAgIC8vIGh1Z2UgbnVtYmVycywgZS5nLiBuZXcgRGF0ZSgnMjAyMzA0JykgZ2V0cyBwYXJzZWQgYXMgSmFudWFyeSAxLCAyMDIzMDQuXG4gICAgLy8gVGhpcyBjYW4gY2F1c2UgdmlydHVhbGx5IGluZmluaXRlIGxvb3BzIHdoaWxlIHJlbmRlcmluZywgc28gZm9yIHRoZVxuICAgIC8vIHB1cnBvc2VzIG9mIEdhbnR0IGNoYXJ0cyB3ZSdsbCBqdXN0IHRyZWF0IGFueSBkYXRlIGJleW9uZCAxMCwwMDAgQUQvQkMgYXNcbiAgICAvLyBpbnZhbGlkLlxuICAgIGQuZ2V0RnVsbFllYXIoKSA8IC0xZTQgfHwgZC5nZXRGdWxsWWVhcigpID4gMWU0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGU6XCIgKyBzdHIpO1xuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxufSwgXCJnZXRTdGFydERhdGVcIik7XG52YXIgcGFyc2VEdXJhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3RyKSB7XG4gIGNvbnN0IHN0YXRlbWVudCA9IC9eKFxcZCsoPzpcXC5cXGQrKT8pKFtNZGhtc3d5XXxtcykkLy5leGVjKHN0ci50cmltKCkpO1xuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtOdW1iZXIucGFyc2VGbG9hdChzdGF0ZW1lbnRbMV0pLCBzdGF0ZW1lbnRbMl1dO1xuICB9XG4gIHJldHVybiBbTmFOLCBcIm1zXCJdO1xufSwgXCJwYXJzZUR1cmF0aW9uXCIpO1xudmFyIGdldEVuZERhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHByZXZUaW1lLCBkYXRlRm9ybWF0Miwgc3RyLCBpbmNsdXNpdmUgPSBmYWxzZSkge1xuICBzdHIgPSBzdHIudHJpbSgpO1xuICBjb25zdCB1bnRpbFJlUGF0dGVybiA9IC9edW50aWxcXHMrKD88aWRzPltcXGRcXHctIF0rKS87XG4gIGNvbnN0IHVudGlsU3RhdGVtZW50ID0gdW50aWxSZVBhdHRlcm4uZXhlYyhzdHIpO1xuICBpZiAodW50aWxTdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBsZXQgZWFybGllc3RUYXNrID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHVudGlsU3RhdGVtZW50Lmdyb3Vwcy5pZHMuc3BsaXQoXCIgXCIpKSB7XG4gICAgICBsZXQgdGFzayA9IGZpbmRUYXNrQnlJZChpZCk7XG4gICAgICBpZiAodGFzayAhPT0gdm9pZCAwICYmICghZWFybGllc3RUYXNrIHx8IHRhc2suc3RhcnRUaW1lIDwgZWFybGllc3RUYXNrLnN0YXJ0VGltZSkpIHtcbiAgICAgICAgZWFybGllc3RUYXNrID0gdGFzaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVhcmxpZXN0VGFzaykge1xuICAgICAgcmV0dXJuIGVhcmxpZXN0VGFzay5zdGFydFRpbWU7XG4gICAgfVxuICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIHRvZGF5O1xuICB9XG4gIGxldCBwYXJzZWREYXRlID0gZGF5anMoc3RyLCBkYXRlRm9ybWF0Mi50cmltKCksIHRydWUpO1xuICBpZiAocGFyc2VkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICBpZiAoaW5jbHVzaXZlKSB7XG4gICAgICBwYXJzZWREYXRlID0gcGFyc2VkRGF0ZS5hZGQoMSwgXCJkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkRGF0ZS50b0RhdGUoKTtcbiAgfVxuICBsZXQgZW5kVGltZSA9IGRheWpzKHByZXZUaW1lKTtcbiAgY29uc3QgW2R1cmF0aW9uVmFsdWUsIGR1cmF0aW9uVW5pdF0gPSBwYXJzZUR1cmF0aW9uKHN0cik7XG4gIGlmICghTnVtYmVyLmlzTmFOKGR1cmF0aW9uVmFsdWUpKSB7XG4gICAgY29uc3QgbmV3RW5kVGltZSA9IGVuZFRpbWUuYWRkKGR1cmF0aW9uVmFsdWUsIGR1cmF0aW9uVW5pdCk7XG4gICAgaWYgKG5ld0VuZFRpbWUuaXNWYWxpZCgpKSB7XG4gICAgICBlbmRUaW1lID0gbmV3RW5kVGltZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVuZFRpbWUudG9EYXRlKCk7XG59LCBcImdldEVuZERhdGVcIik7XG52YXIgdGFza0NudCA9IDA7XG52YXIgcGFyc2VJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRTdHIpIHtcbiAgaWYgKGlkU3RyID09PSB2b2lkIDApIHtcbiAgICB0YXNrQ250ID0gdGFza0NudCArIDE7XG4gICAgcmV0dXJuIFwidGFza1wiICsgdGFza0NudDtcbiAgfVxuICByZXR1cm4gaWRTdHI7XG59LCBcInBhcnNlSWRcIik7XG52YXIgY29tcGlsZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHByZXZUYXNrLCBkYXRhU3RyKSB7XG4gIGxldCBkcztcbiAgaWYgKGRhdGFTdHIuc3Vic3RyKDAsIDEpID09PSBcIjpcIikge1xuICAgIGRzID0gZGF0YVN0ci5zdWJzdHIoMSwgZGF0YVN0ci5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIGRzID0gZGF0YVN0cjtcbiAgfVxuICBjb25zdCBkYXRhID0gZHMuc3BsaXQoXCIsXCIpO1xuICBjb25zdCB0YXNrID0ge307XG4gIGdldFRhc2tUYWdzKGRhdGEsIHRhc2ssIHRhZ3MpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBkYXRhW2ldID0gZGF0YVtpXS50cmltKCk7XG4gIH1cbiAgbGV0IGVuZFRpbWVEYXRhID0gXCJcIjtcbiAgc3dpdGNoIChkYXRhLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKCk7XG4gICAgICB0YXNrLnN0YXJ0VGltZSA9IHByZXZUYXNrLmVuZFRpbWU7XG4gICAgICBlbmRUaW1lRGF0YSA9IGRhdGFbMF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICB0YXNrLmlkID0gcGFyc2VJZCgpO1xuICAgICAgdGFzay5zdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCBkYXRhWzBdKTtcbiAgICAgIGVuZFRpbWVEYXRhID0gZGF0YVsxXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIHRhc2suaWQgPSBwYXJzZUlkKGRhdGFbMF0pO1xuICAgICAgdGFzay5zdGFydFRpbWUgPSBnZXRTdGFydERhdGUodm9pZCAwLCBkYXRlRm9ybWF0LCBkYXRhWzFdKTtcbiAgICAgIGVuZFRpbWVEYXRhID0gZGF0YVsyXTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gIH1cbiAgaWYgKGVuZFRpbWVEYXRhKSB7XG4gICAgdGFzay5lbmRUaW1lID0gZ2V0RW5kRGF0ZSh0YXNrLnN0YXJ0VGltZSwgZGF0ZUZvcm1hdCwgZW5kVGltZURhdGEsIGluY2x1c2l2ZUVuZERhdGVzKTtcbiAgICB0YXNrLm1hbnVhbEVuZFRpbWUgPSBkYXlqcyhlbmRUaW1lRGF0YSwgXCJZWVlZLU1NLUREXCIsIHRydWUpLmlzVmFsaWQoKTtcbiAgICBjaGVja1Rhc2tEYXRlcyh0YXNrLCBkYXRlRm9ybWF0LCBleGNsdWRlcywgaW5jbHVkZXMpO1xuICB9XG4gIHJldHVybiB0YXNrO1xufSwgXCJjb21waWxlRGF0YVwiKTtcbnZhciBwYXJzZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHByZXZUYXNrSWQsIGRhdGFTdHIpIHtcbiAgbGV0IGRzO1xuICBpZiAoZGF0YVN0ci5zdWJzdHIoMCwgMSkgPT09IFwiOlwiKSB7XG4gICAgZHMgPSBkYXRhU3RyLnN1YnN0cigxLCBkYXRhU3RyLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgZHMgPSBkYXRhU3RyO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBkcy5zcGxpdChcIixcIik7XG4gIGNvbnN0IHRhc2sgPSB7fTtcbiAgZ2V0VGFza1RhZ3MoZGF0YSwgdGFzaywgdGFncyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGRhdGFbaV0gPSBkYXRhW2ldLnRyaW0oKTtcbiAgfVxuICBzd2l0Y2ggKGRhdGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgdGFzay5pZCA9IHBhcnNlSWQoKTtcbiAgICAgIHRhc2suc3RhcnRUaW1lID0ge1xuICAgICAgICB0eXBlOiBcInByZXZUYXNrRW5kXCIsXG4gICAgICAgIGlkOiBwcmV2VGFza0lkXG4gICAgICB9O1xuICAgICAgdGFzay5lbmRUaW1lID0ge1xuICAgICAgICBkYXRhOiBkYXRhWzBdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgdGFzay5pZCA9IHBhcnNlSWQoKTtcbiAgICAgIHRhc2suc3RhcnRUaW1lID0ge1xuICAgICAgICB0eXBlOiBcImdldFN0YXJ0RGF0ZVwiLFxuICAgICAgICBzdGFydERhdGE6IGRhdGFbMF1cbiAgICAgIH07XG4gICAgICB0YXNrLmVuZFRpbWUgPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbMV1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB0YXNrLmlkID0gcGFyc2VJZChkYXRhWzBdKTtcbiAgICAgIHRhc2suc3RhcnRUaW1lID0ge1xuICAgICAgICB0eXBlOiBcImdldFN0YXJ0RGF0ZVwiLFxuICAgICAgICBzdGFydERhdGE6IGRhdGFbMV1cbiAgICAgIH07XG4gICAgICB0YXNrLmVuZFRpbWUgPSB7XG4gICAgICAgIGRhdGE6IGRhdGFbMl1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICB9XG4gIHJldHVybiB0YXNrO1xufSwgXCJwYXJzZURhdGFcIik7XG52YXIgbGFzdFRhc2s7XG52YXIgbGFzdFRhc2tJRDtcbnZhciByYXdUYXNrcyA9IFtdO1xudmFyIHRhc2tEYiA9IHt9O1xudmFyIGFkZFRhc2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRlc2NyLCBkYXRhKSB7XG4gIGNvbnN0IHJhd1Rhc2sgPSB7XG4gICAgc2VjdGlvbjogY3VycmVudFNlY3Rpb24sXG4gICAgdHlwZTogY3VycmVudFNlY3Rpb24sXG4gICAgcHJvY2Vzc2VkOiBmYWxzZSxcbiAgICBtYW51YWxFbmRUaW1lOiBmYWxzZSxcbiAgICByZW5kZXJFbmRUaW1lOiBudWxsLFxuICAgIHJhdzogeyBkYXRhIH0sXG4gICAgdGFzazogZGVzY3IsXG4gICAgY2xhc3NlczogW11cbiAgfTtcbiAgY29uc3QgdGFza0luZm8gPSBwYXJzZURhdGEobGFzdFRhc2tJRCwgZGF0YSk7XG4gIHJhd1Rhc2sucmF3LnN0YXJ0VGltZSA9IHRhc2tJbmZvLnN0YXJ0VGltZTtcbiAgcmF3VGFzay5yYXcuZW5kVGltZSA9IHRhc2tJbmZvLmVuZFRpbWU7XG4gIHJhd1Rhc2suaWQgPSB0YXNrSW5mby5pZDtcbiAgcmF3VGFzay5wcmV2VGFza0lkID0gbGFzdFRhc2tJRDtcbiAgcmF3VGFzay5hY3RpdmUgPSB0YXNrSW5mby5hY3RpdmU7XG4gIHJhd1Rhc2suZG9uZSA9IHRhc2tJbmZvLmRvbmU7XG4gIHJhd1Rhc2suY3JpdCA9IHRhc2tJbmZvLmNyaXQ7XG4gIHJhd1Rhc2subWlsZXN0b25lID0gdGFza0luZm8ubWlsZXN0b25lO1xuICByYXdUYXNrLm9yZGVyID0gbGFzdE9yZGVyO1xuICBsYXN0T3JkZXIrKztcbiAgY29uc3QgcG9zID0gcmF3VGFza3MucHVzaChyYXdUYXNrKTtcbiAgbGFzdFRhc2tJRCA9IHJhd1Rhc2suaWQ7XG4gIHRhc2tEYltyYXdUYXNrLmlkXSA9IHBvcyAtIDE7XG59LCBcImFkZFRhc2tcIik7XG52YXIgZmluZFRhc2tCeUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCkge1xuICBjb25zdCBwb3MgPSB0YXNrRGJbaWRdO1xuICByZXR1cm4gcmF3VGFza3NbcG9zXTtcbn0sIFwiZmluZFRhc2tCeUlkXCIpO1xudmFyIGFkZFRhc2tPcmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRlc2NyLCBkYXRhKSB7XG4gIGNvbnN0IG5ld1Rhc2sgPSB7XG4gICAgc2VjdGlvbjogY3VycmVudFNlY3Rpb24sXG4gICAgdHlwZTogY3VycmVudFNlY3Rpb24sXG4gICAgZGVzY3JpcHRpb246IGRlc2NyLFxuICAgIHRhc2s6IGRlc2NyLFxuICAgIGNsYXNzZXM6IFtdXG4gIH07XG4gIGNvbnN0IHRhc2tJbmZvID0gY29tcGlsZURhdGEobGFzdFRhc2ssIGRhdGEpO1xuICBuZXdUYXNrLnN0YXJ0VGltZSA9IHRhc2tJbmZvLnN0YXJ0VGltZTtcbiAgbmV3VGFzay5lbmRUaW1lID0gdGFza0luZm8uZW5kVGltZTtcbiAgbmV3VGFzay5pZCA9IHRhc2tJbmZvLmlkO1xuICBuZXdUYXNrLmFjdGl2ZSA9IHRhc2tJbmZvLmFjdGl2ZTtcbiAgbmV3VGFzay5kb25lID0gdGFza0luZm8uZG9uZTtcbiAgbmV3VGFzay5jcml0ID0gdGFza0luZm8uY3JpdDtcbiAgbmV3VGFzay5taWxlc3RvbmUgPSB0YXNrSW5mby5taWxlc3RvbmU7XG4gIGxhc3RUYXNrID0gbmV3VGFzaztcbiAgdGFza3MucHVzaChuZXdUYXNrKTtcbn0sIFwiYWRkVGFza09yZ1wiKTtcbnZhciBjb21waWxlVGFza3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBjb25zdCBjb21waWxlVGFzayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocG9zKSB7XG4gICAgY29uc3QgdGFzayA9IHJhd1Rhc2tzW3Bvc107XG4gICAgbGV0IHN0YXJ0VGltZSA9IFwiXCI7XG4gICAgc3dpdGNoIChyYXdUYXNrc1twb3NdLnJhdy5zdGFydFRpbWUudHlwZSkge1xuICAgICAgY2FzZSBcInByZXZUYXNrRW5kXCI6IHtcbiAgICAgICAgY29uc3QgcHJldlRhc2sgPSBmaW5kVGFza0J5SWQodGFzay5wcmV2VGFza0lkKTtcbiAgICAgICAgdGFzay5zdGFydFRpbWUgPSBwcmV2VGFzay5lbmRUaW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJnZXRTdGFydERhdGVcIjpcbiAgICAgICAgc3RhcnRUaW1lID0gZ2V0U3RhcnREYXRlKHZvaWQgMCwgZGF0ZUZvcm1hdCwgcmF3VGFza3NbcG9zXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSk7XG4gICAgICAgIGlmIChzdGFydFRpbWUpIHtcbiAgICAgICAgICByYXdUYXNrc1twb3NdLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJhd1Rhc2tzW3Bvc10uc3RhcnRUaW1lKSB7XG4gICAgICByYXdUYXNrc1twb3NdLmVuZFRpbWUgPSBnZXRFbmREYXRlKFxuICAgICAgICByYXdUYXNrc1twb3NdLnN0YXJ0VGltZSxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgcmF3VGFza3NbcG9zXS5yYXcuZW5kVGltZS5kYXRhLFxuICAgICAgICBpbmNsdXNpdmVFbmREYXRlc1xuICAgICAgKTtcbiAgICAgIGlmIChyYXdUYXNrc1twb3NdLmVuZFRpbWUpIHtcbiAgICAgICAgcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICByYXdUYXNrc1twb3NdLm1hbnVhbEVuZFRpbWUgPSBkYXlqcyhcbiAgICAgICAgICByYXdUYXNrc1twb3NdLnJhdy5lbmRUaW1lLmRhdGEsXG4gICAgICAgICAgXCJZWVlZLU1NLUREXCIsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApLmlzVmFsaWQoKTtcbiAgICAgICAgY2hlY2tUYXNrRGF0ZXMocmF3VGFza3NbcG9zXSwgZGF0ZUZvcm1hdCwgZXhjbHVkZXMsIGluY2x1ZGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJhd1Rhc2tzW3Bvc10ucHJvY2Vzc2VkO1xuICB9LCBcImNvbXBpbGVUYXNrXCIpO1xuICBsZXQgYWxsUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgZm9yIChjb25zdCBbaSwgcmF3VGFza10gb2YgcmF3VGFza3MuZW50cmllcygpKSB7XG4gICAgY29tcGlsZVRhc2soaSk7XG4gICAgYWxsUHJvY2Vzc2VkID0gYWxsUHJvY2Vzc2VkICYmIHJhd1Rhc2sucHJvY2Vzc2VkO1xuICB9XG4gIHJldHVybiBhbGxQcm9jZXNzZWQ7XG59LCBcImNvbXBpbGVUYXNrc1wiKTtcbnZhciBzZXRMaW5rID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIF9saW5rU3RyKSB7XG4gIGxldCBsaW5rU3RyID0gX2xpbmtTdHI7XG4gIGlmIChnZXRDb25maWcoKS5zZWN1cml0eUxldmVsICE9PSBcImxvb3NlXCIpIHtcbiAgICBsaW5rU3RyID0gc2FuaXRpemVVcmwoX2xpbmtTdHIpO1xuICB9XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGxldCByYXdUYXNrID0gZmluZFRhc2tCeUlkKGlkKTtcbiAgICBpZiAocmF3VGFzayAhPT0gdm9pZCAwKSB7XG4gICAgICBwdXNoRnVuKGlkLCAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGxpbmtTdHIsIFwiX3NlbGZcIik7XG4gICAgICB9KTtcbiAgICAgIGxpbmtzLnNldChpZCwgbGlua1N0cik7XG4gICAgfVxuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0TGlua1wiKTtcbnZhciBzZXRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBjbGFzc05hbWUpIHtcbiAgaWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgbGV0IHJhd1Rhc2sgPSBmaW5kVGFza0J5SWQoaWQpO1xuICAgIGlmIChyYXdUYXNrICE9PSB2b2lkIDApIHtcbiAgICAgIHJhd1Rhc2suY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0Q2xhc3NcIik7XG52YXIgc2V0Q2xpY2tGdW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZiAoZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbCAhPT0gXCJsb29zZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbk5hbWUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgYXJnTGlzdCA9IFtdO1xuICBpZiAodHlwZW9mIGZ1bmN0aW9uQXJncyA9PT0gXCJzdHJpbmdcIikge1xuICAgIGFyZ0xpc3QgPSBmdW5jdGlvbkFyZ3Muc3BsaXQoLywoPz0oPzooPzpbXlwiXSpcIil7Mn0pKlteXCJdKiQpLyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaXRlbSA9IGFyZ0xpc3RbaV0udHJpbSgpO1xuICAgICAgaWYgKGl0ZW0uc3RhcnRzV2l0aCgnXCInKSAmJiBpdGVtLmVuZHNXaXRoKCdcIicpKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtLnN1YnN0cigxLCBpdGVtLmxlbmd0aCAtIDIpO1xuICAgICAgfVxuICAgICAgYXJnTGlzdFtpXSA9IGl0ZW07XG4gICAgfVxuICB9XG4gIGlmIChhcmdMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGFyZ0xpc3QucHVzaChpZCk7XG4gIH1cbiAgbGV0IHJhd1Rhc2sgPSBmaW5kVGFza0J5SWQoaWQpO1xuICBpZiAocmF3VGFzayAhPT0gdm9pZCAwKSB7XG4gICAgcHVzaEZ1bihpZCwgKCkgPT4ge1xuICAgICAgdXRpbHNfZGVmYXVsdC5ydW5GdW5jKGZ1bmN0aW9uTmFtZSwgLi4uYXJnTGlzdCk7XG4gICAgfSk7XG4gIH1cbn0sIFwic2V0Q2xpY2tGdW5cIik7XG52YXIgcHVzaEZ1biA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQsIGNhbGxiYWNrRnVuY3Rpb24pIHtcbiAgZnVucy5wdXNoKFxuICAgIGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWR9XCJdYCk7XG4gICAgICBpZiAoZWxlbSAhPT0gbnVsbCkge1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZH0tdGV4dFwiXWApO1xuICAgICAgaWYgKGVsZW0gIT09IG51bGwpIHtcbiAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59LCBcInB1c2hGdW5cIik7XG52YXIgc2V0Q2xpY2tFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQXJncykge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICBzZXRDbGlja0Z1bihpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICB9KTtcbiAgc2V0Q2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0Q2xpY2tFdmVudFwiKTtcbnZhciBiaW5kRnVuY3Rpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtZW50KSB7XG4gIGZ1bnMuZm9yRWFjaChmdW5jdGlvbihmdW4pIHtcbiAgICBmdW4oZWxlbWVudCk7XG4gIH0pO1xufSwgXCJiaW5kRnVuY3Rpb25zXCIpO1xudmFyIGdhbnR0RGJfZGVmYXVsdCA9IHtcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLmdhbnR0LCBcImdldENvbmZpZ1wiKSxcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0RGF0ZUZvcm1hdCxcbiAgZ2V0RGF0ZUZvcm1hdCxcbiAgZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMsXG4gIGVuZERhdGVzQXJlSW5jbHVzaXZlLFxuICBlbmFibGVUb3BBeGlzLFxuICB0b3BBeGlzRW5hYmxlZCxcbiAgc2V0QXhpc0Zvcm1hdCxcbiAgZ2V0QXhpc0Zvcm1hdCxcbiAgc2V0VGlja0ludGVydmFsLFxuICBnZXRUaWNrSW50ZXJ2YWwsXG4gIHNldFRvZGF5TWFya2VyLFxuICBnZXRUb2RheU1hcmtlcixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0RGlzcGxheU1vZGUsXG4gIGdldERpc3BsYXlNb2RlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGFkZFNlY3Rpb24sXG4gIGdldFNlY3Rpb25zLFxuICBnZXRUYXNrcyxcbiAgYWRkVGFzayxcbiAgZmluZFRhc2tCeUlkLFxuICBhZGRUYXNrT3JnLFxuICBzZXRJbmNsdWRlcyxcbiAgZ2V0SW5jbHVkZXMsXG4gIHNldEV4Y2x1ZGVzLFxuICBnZXRFeGNsdWRlcyxcbiAgc2V0Q2xpY2tFdmVudCxcbiAgc2V0TGluayxcbiAgZ2V0TGlua3MsXG4gIGJpbmRGdW5jdGlvbnMsXG4gIHBhcnNlRHVyYXRpb24sXG4gIGlzSW52YWxpZERhdGUsXG4gIHNldFdlZWtkYXksXG4gIGdldFdlZWtkYXksXG4gIHNldFdlZWtlbmRcbn07XG5mdW5jdGlvbiBnZXRUYXNrVGFncyhkYXRhLCB0YXNrLCB0YWdzMikge1xuICBsZXQgbWF0Y2hGb3VuZCA9IHRydWU7XG4gIHdoaWxlIChtYXRjaEZvdW5kKSB7XG4gICAgbWF0Y2hGb3VuZCA9IGZhbHNlO1xuICAgIHRhZ3MyLmZvckVhY2goZnVuY3Rpb24odCkge1xuICAgICAgY29uc3QgcGF0dGVybiA9IFwiXlxcXFxzKlwiICsgdCArIFwiXFxcXHMqJFwiO1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xuICAgICAgaWYgKGRhdGFbMF0ubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgIHRhc2tbdF0gPSB0cnVlO1xuICAgICAgICBkYXRhLnNoaWZ0KDEpO1xuICAgICAgICBtYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuX19uYW1lKGdldFRhc2tUYWdzLCBcImdldFRhc2tUYWdzXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2FudHQvZ2FudHRSZW5kZXJlci5qc1xuaW1wb3J0IGRheWpzMiBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7XG4gIHNlbGVjdCxcbiAgc2NhbGVUaW1lLFxuICBtaW4sXG4gIG1heCxcbiAgc2NhbGVMaW5lYXIsXG4gIGludGVycG9sYXRlSGNsLFxuICBheGlzQm90dG9tLFxuICBheGlzVG9wLFxuICB0aW1lRm9ybWF0LFxuICB0aW1lTWlsbGlzZWNvbmQsXG4gIHRpbWVTZWNvbmQsXG4gIHRpbWVNaW51dGUsXG4gIHRpbWVIb3VyLFxuICB0aW1lRGF5LFxuICB0aW1lTW9uZGF5LFxuICB0aW1lVHVlc2RheSxcbiAgdGltZVdlZG5lc2RheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lRnJpZGF5LFxuICB0aW1lU2F0dXJkYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb250aFxufSBmcm9tIFwiZDNcIjtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgbG9nLmRlYnVnKFwiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbFwiKTtcbn0sIFwic2V0Q29uZlwiKTtcbnZhciBtYXBXZWVrZGF5VG9UaW1lRnVuY3Rpb24gPSB7XG4gIG1vbmRheTogdGltZU1vbmRheSxcbiAgdHVlc2RheTogdGltZVR1ZXNkYXksXG4gIHdlZG5lc2RheTogdGltZVdlZG5lc2RheSxcbiAgdGh1cnNkYXk6IHRpbWVUaHVyc2RheSxcbiAgZnJpZGF5OiB0aW1lRnJpZGF5LFxuICBzYXR1cmRheTogdGltZVNhdHVyZGF5LFxuICBzdW5kYXk6IHRpbWVTdW5kYXlcbn07XG52YXIgZ2V0TWF4SW50ZXJzZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRhc2tzMiwgb3JkZXJPZmZzZXQpID0+IHtcbiAgbGV0IHRpbWVsaW5lID0gWy4uLnRhc2tzMl0ubWFwKCgpID0+IC1JbmZpbml0eSk7XG4gIGxldCBzb3J0ZWQgPSBbLi4udGFza3MyXS5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0VGltZSAtIGIuc3RhcnRUaW1lIHx8IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgbGV0IG1heEludGVyc2VjdGlvbnMgPSAwO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc29ydGVkKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aW1lbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGVsZW1lbnQuc3RhcnRUaW1lID49IHRpbWVsaW5lW2pdKSB7XG4gICAgICAgIHRpbWVsaW5lW2pdID0gZWxlbWVudC5lbmRUaW1lO1xuICAgICAgICBlbGVtZW50Lm9yZGVyID0gaiArIG9yZGVyT2Zmc2V0O1xuICAgICAgICBpZiAoaiA+IG1heEludGVyc2VjdGlvbnMpIHtcbiAgICAgICAgICBtYXhJbnRlcnNlY3Rpb25zID0gajtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heEludGVyc2VjdGlvbnM7XG59LCBcImdldE1heEludGVyc2VjdGlvbnNcIik7XG52YXIgdztcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25zdCBjb25mID0gZ2V0Q29uZmlnKCkuZ2FudHQ7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QoXCJib2R5XCIpO1xuICBjb25zdCBkb2MgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50IDogZG9jdW1lbnQ7XG4gIGNvbnN0IGVsZW0gPSBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICB3ID0gZWxlbS5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoO1xuICBpZiAodyA9PT0gdm9pZCAwKSB7XG4gICAgdyA9IDEyMDA7XG4gIH1cbiAgaWYgKGNvbmYudXNlV2lkdGggIT09IHZvaWQgMCkge1xuICAgIHcgPSBjb25mLnVzZVdpZHRoO1xuICB9XG4gIGNvbnN0IHRhc2tBcnJheSA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgbGV0IGNhdGVnb3JpZXMgPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRhc2tBcnJheSkge1xuICAgIGNhdGVnb3JpZXMucHVzaChlbGVtZW50LnR5cGUpO1xuICB9XG4gIGNhdGVnb3JpZXMgPSBjaGVja1VuaXF1ZShjYXRlZ29yaWVzKTtcbiAgY29uc3QgY2F0ZWdvcnlIZWlnaHRzID0ge307XG4gIGxldCBoID0gMiAqIGNvbmYudG9wUGFkZGluZztcbiAgaWYgKGRpYWdPYmouZGIuZ2V0RGlzcGxheU1vZGUoKSA9PT0gXCJjb21wYWN0XCIgfHwgY29uZi5kaXNwbGF5TW9kZSA9PT0gXCJjb21wYWN0XCIpIHtcbiAgICBjb25zdCBjYXRlZ29yeUVsZW1lbnRzID0ge307XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRhc2tBcnJheSkge1xuICAgICAgaWYgKGNhdGVnb3J5RWxlbWVudHNbZWxlbWVudC5zZWN0aW9uXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNhdGVnb3J5RWxlbWVudHNbZWxlbWVudC5zZWN0aW9uXSA9IFtlbGVtZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhdGVnb3J5RWxlbWVudHNbZWxlbWVudC5zZWN0aW9uXS5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaW50ZXJzZWN0aW9ucyA9IDA7XG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBPYmplY3Qua2V5cyhjYXRlZ29yeUVsZW1lbnRzKSkge1xuICAgICAgY29uc3QgY2F0ZWdvcnlIZWlnaHQgPSBnZXRNYXhJbnRlcnNlY3Rpb25zKGNhdGVnb3J5RWxlbWVudHNbY2F0ZWdvcnldLCBpbnRlcnNlY3Rpb25zKSArIDE7XG4gICAgICBpbnRlcnNlY3Rpb25zICs9IGNhdGVnb3J5SGVpZ2h0O1xuICAgICAgaCArPSBjYXRlZ29yeUhlaWdodCAqIChjb25mLmJhckhlaWdodCArIGNvbmYuYmFyR2FwKTtcbiAgICAgIGNhdGVnb3J5SGVpZ2h0c1tjYXRlZ29yeV0gPSBjYXRlZ29yeUhlaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaCArPSB0YXNrQXJyYXkubGVuZ3RoICogKGNvbmYuYmFySGVpZ2h0ICsgY29uZi5iYXJHYXApO1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgICAgY2F0ZWdvcnlIZWlnaHRzW2NhdGVnb3J5XSA9IHRhc2tBcnJheS5maWx0ZXIoKHRhc2spID0+IHRhc2sudHlwZSA9PT0gY2F0ZWdvcnkpLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgZWxlbS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIFwiICsgdyArIFwiIFwiICsgaCk7XG4gIGNvbnN0IHN2ZyA9IHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBjb25zdCB0aW1lU2NhbGUgPSBzY2FsZVRpbWUoKS5kb21haW4oW1xuICAgIG1pbih0YXNrQXJyYXksIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLnN0YXJ0VGltZTtcbiAgICB9KSxcbiAgICBtYXgodGFza0FycmF5LCBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC5lbmRUaW1lO1xuICAgIH0pXG4gIF0pLnJhbmdlUm91bmQoWzAsIHcgLSBjb25mLmxlZnRQYWRkaW5nIC0gY29uZi5yaWdodFBhZGRpbmddKTtcbiAgZnVuY3Rpb24gdGFza0NvbXBhcmUoYSwgYikge1xuICAgIGNvbnN0IHRhc2tBID0gYS5zdGFydFRpbWU7XG4gICAgY29uc3QgdGFza0IgPSBiLnN0YXJ0VGltZTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAodGFza0EgPiB0YXNrQikge1xuICAgICAgcmVzdWx0ID0gMTtcbiAgICB9IGVsc2UgaWYgKHRhc2tBIDwgdGFza0IpIHtcbiAgICAgIHJlc3VsdCA9IC0xO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIF9fbmFtZSh0YXNrQ29tcGFyZSwgXCJ0YXNrQ29tcGFyZVwiKTtcbiAgdGFza0FycmF5LnNvcnQodGFza0NvbXBhcmUpO1xuICBtYWtlR2FudHQodGFza0FycmF5LCB3LCBoKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGgsIHcsIGNvbmYudXNlTWF4V2lkdGgpO1xuICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLmF0dHIoXCJ4XCIsIHcgLyAyKS5hdHRyKFwieVwiLCBjb25mLnRpdGxlVG9wTWFyZ2luKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZVRleHRcIik7XG4gIGZ1bmN0aW9uIG1ha2VHYW50dCh0YXNrczIsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkge1xuICAgIGNvbnN0IGJhckhlaWdodCA9IGNvbmYuYmFySGVpZ2h0O1xuICAgIGNvbnN0IGdhcCA9IGJhckhlaWdodCArIGNvbmYuYmFyR2FwO1xuICAgIGNvbnN0IHRvcFBhZGRpbmcgPSBjb25mLnRvcFBhZGRpbmc7XG4gICAgY29uc3QgbGVmdFBhZGRpbmcgPSBjb25mLmxlZnRQYWRkaW5nO1xuICAgIGNvbnN0IGNvbG9yU2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbihbMCwgY2F0ZWdvcmllcy5sZW5ndGhdKS5yYW5nZShbXCIjMDBCOUZBXCIsIFwiI0Y5NTAwMlwiXSkuaW50ZXJwb2xhdGUoaW50ZXJwb2xhdGVIY2wpO1xuICAgIGRyYXdFeGNsdWRlRGF5cyhcbiAgICAgIGdhcCxcbiAgICAgIHRvcFBhZGRpbmcsXG4gICAgICBsZWZ0UGFkZGluZyxcbiAgICAgIHBhZ2VXaWR0aCxcbiAgICAgIHBhZ2VIZWlnaHQsXG4gICAgICB0YXNrczIsXG4gICAgICBkaWFnT2JqLmRiLmdldEV4Y2x1ZGVzKCksXG4gICAgICBkaWFnT2JqLmRiLmdldEluY2x1ZGVzKClcbiAgICApO1xuICAgIG1ha2VHcmlkKGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpO1xuICAgIGRyYXdSZWN0cyh0YXNrczIsIGdhcCwgdG9wUGFkZGluZywgbGVmdFBhZGRpbmcsIGJhckhlaWdodCwgY29sb3JTY2FsZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTtcbiAgICB2ZXJ0TGFiZWxzKGdhcCwgdG9wUGFkZGluZywgbGVmdFBhZGRpbmcsIGJhckhlaWdodCwgY29sb3JTY2FsZSk7XG4gICAgZHJhd1RvZGF5KGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpO1xuICB9XG4gIF9fbmFtZShtYWtlR2FudHQsIFwibWFrZUdhbnR0XCIpO1xuICBmdW5jdGlvbiBkcmF3UmVjdHModGhlQXJyYXksIHRoZUdhcCwgdGhlVG9wUGFkLCB0aGVTaWRlUGFkLCB0aGVCYXJIZWlnaHQsIHRoZUNvbG9yU2NhbGUsIHcyKSB7XG4gICAgY29uc3QgdW5pcXVlVGFza09yZGVySWRzID0gWy4uLm5ldyBTZXQodGhlQXJyYXkubWFwKChpdGVtKSA9PiBpdGVtLm9yZGVyKSldO1xuICAgIGNvbnN0IHVuaXF1ZVRhc2tzID0gdW5pcXVlVGFza09yZGVySWRzLm1hcCgoaWQyKSA9PiB0aGVBcnJheS5maW5kKChpdGVtKSA9PiBpdGVtLm9yZGVyID09PSBpZDIpKTtcbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEodW5pcXVlVGFza3MpLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpID0gZC5vcmRlcjtcbiAgICAgIHJldHVybiBpICogdGhlR2FwICsgdGhlVG9wUGFkIC0gMjtcbiAgICB9KS5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdzIgLSBjb25mLnJpZ2h0UGFkZGluZyAvIDI7XG4gICAgfSkuYXR0cihcImhlaWdodFwiLCB0aGVHYXApLmF0dHIoXCJjbGFzc1wiLCBmdW5jdGlvbihkKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpLCBjYXRlZ29yeV0gb2YgY2F0ZWdvcmllcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGQudHlwZSA9PT0gY2F0ZWdvcnkpIHtcbiAgICAgICAgICByZXR1cm4gXCJzZWN0aW9uIHNlY3Rpb25cIiArIGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInNlY3Rpb24gc2VjdGlvbjBcIjtcbiAgICB9KTtcbiAgICBjb25zdCByZWN0YW5nbGVzID0gc3ZnLmFwcGVuZChcImdcIikuc2VsZWN0QWxsKFwicmVjdFwiKS5kYXRhKHRoZUFycmF5KS5lbnRlcigpO1xuICAgIGNvbnN0IGxpbmtzMiA9IGRpYWdPYmouZGIuZ2V0TGlua3MoKTtcbiAgICByZWN0YW5nbGVzLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLmlkO1xuICAgIH0pLmF0dHIoXCJyeFwiLCAzKS5hdHRyKFwicnlcIiwgMykuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkge1xuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIHJldHVybiB0aW1lU2NhbGUoZC5zdGFydFRpbWUpICsgdGhlU2lkZVBhZCArIDAuNSAqICh0aW1lU2NhbGUoZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkpIC0gMC41ICogdGhlQmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkgKyB0aGVTaWRlUGFkO1xuICAgIH0pLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGkgPSBkLm9yZGVyO1xuICAgICAgcmV0dXJuIGkgKiB0aGVHYXAgKyB0aGVUb3BQYWQ7XG4gICAgfSkuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGlmIChkLm1pbGVzdG9uZSkge1xuICAgICAgICByZXR1cm4gdGhlQmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRpbWVTY2FsZShkLnJlbmRlckVuZFRpbWUgfHwgZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSk7XG4gICAgfSkuYXR0cihcImhlaWdodFwiLCB0aGVCYXJIZWlnaHQpLmF0dHIoXCJ0cmFuc2Zvcm0tb3JpZ2luXCIsIGZ1bmN0aW9uKGQsIGkpIHtcbiAgICAgIGkgPSBkLm9yZGVyO1xuICAgICAgcmV0dXJuICh0aW1lU2NhbGUoZC5zdGFydFRpbWUpICsgdGhlU2lkZVBhZCArIDAuNSAqICh0aW1lU2NhbGUoZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkpKS50b1N0cmluZygpICsgXCJweCBcIiArIChpICogdGhlR2FwICsgdGhlVG9wUGFkICsgMC41ICogdGhlQmFySGVpZ2h0KS50b1N0cmluZygpICsgXCJweFwiO1xuICAgIH0pLmF0dHIoXCJjbGFzc1wiLCBmdW5jdGlvbihkKSB7XG4gICAgICBjb25zdCByZXMgPSBcInRhc2tcIjtcbiAgICAgIGxldCBjbGFzc1N0ciA9IFwiXCI7XG4gICAgICBpZiAoZC5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2xhc3NTdHIgPSBkLmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICB9XG4gICAgICBsZXQgc2VjTnVtID0gMDtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZC50eXBlID09PSBjYXRlZ29yeSkge1xuICAgICAgICAgIHNlY051bSA9IGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCB0YXNrQ2xhc3MgPSBcIlwiO1xuICAgICAgaWYgKGQuYWN0aXZlKSB7XG4gICAgICAgIGlmIChkLmNyaXQpIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgKz0gXCIgYWN0aXZlQ3JpdFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhc2tDbGFzcyA9IFwiIGFjdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGQuZG9uZSkge1xuICAgICAgICBpZiAoZC5jcml0KSB7XG4gICAgICAgICAgdGFza0NsYXNzID0gXCIgZG9uZUNyaXRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgPSBcIiBkb25lXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkLmNyaXQpIHtcbiAgICAgICAgICB0YXNrQ2xhc3MgKz0gXCIgY3JpdFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFza0NsYXNzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0YXNrQ2xhc3MgPSBcIiB0YXNrXCI7XG4gICAgICB9XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgdGFza0NsYXNzID0gXCIgbWlsZXN0b25lIFwiICsgdGFza0NsYXNzO1xuICAgICAgfVxuICAgICAgdGFza0NsYXNzICs9IHNlY051bTtcbiAgICAgIHRhc2tDbGFzcyArPSBcIiBcIiArIGNsYXNzU3RyO1xuICAgICAgcmV0dXJuIHJlcyArIHRhc2tDbGFzcztcbiAgICB9KTtcbiAgICByZWN0YW5nbGVzLmFwcGVuZChcInRleHRcIikuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBkLmlkICsgXCItdGV4dFwiO1xuICAgIH0pLnRleHQoZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGQudGFzaztcbiAgICB9KS5hdHRyKFwiZm9udC1zaXplXCIsIGNvbmYuZm9udFNpemUpLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGxldCBzdGFydFggPSB0aW1lU2NhbGUoZC5zdGFydFRpbWUpO1xuICAgICAgbGV0IGVuZFggPSB0aW1lU2NhbGUoZC5yZW5kZXJFbmRUaW1lIHx8IGQuZW5kVGltZSk7XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgc3RhcnRYICs9IDAuNSAqICh0aW1lU2NhbGUoZC5lbmRUaW1lKSAtIHRpbWVTY2FsZShkLnN0YXJ0VGltZSkpIC0gMC41ICogdGhlQmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIGVuZFggPSBzdGFydFggKyB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSB0aGlzLmdldEJCb3goKS53aWR0aDtcbiAgICAgIGlmICh0ZXh0V2lkdGggPiBlbmRYIC0gc3RhcnRYKSB7XG4gICAgICAgIGlmIChlbmRYICsgdGV4dFdpZHRoICsgMS41ICogY29uZi5sZWZ0UGFkZGluZyA+IHcyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXJ0WCArIHRoZVNpZGVQYWQgLSA1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlbmRYICsgdGhlU2lkZVBhZCArIDU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoZW5kWCAtIHN0YXJ0WCkgLyAyICsgc3RhcnRYICsgdGhlU2lkZVBhZDtcbiAgICAgIH1cbiAgICB9KS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpID0gZC5vcmRlcjtcbiAgICAgIHJldHVybiBpICogdGhlR2FwICsgY29uZi5iYXJIZWlnaHQgLyAyICsgKGNvbmYuZm9udFNpemUgLyAyIC0gMikgKyB0aGVUb3BQYWQ7XG4gICAgfSkuYXR0cihcInRleHQtaGVpZ2h0XCIsIHRoZUJhckhlaWdodCkuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0WCA9IHRpbWVTY2FsZShkLnN0YXJ0VGltZSk7XG4gICAgICBsZXQgZW5kWCA9IHRpbWVTY2FsZShkLmVuZFRpbWUpO1xuICAgICAgaWYgKGQubWlsZXN0b25lKSB7XG4gICAgICAgIGVuZFggPSBzdGFydFggKyB0aGVCYXJIZWlnaHQ7XG4gICAgICB9XG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSB0aGlzLmdldEJCb3goKS53aWR0aDtcbiAgICAgIGxldCBjbGFzc1N0ciA9IFwiXCI7XG4gICAgICBpZiAoZC5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2xhc3NTdHIgPSBkLmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICB9XG4gICAgICBsZXQgc2VjTnVtID0gMDtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZC50eXBlID09PSBjYXRlZ29yeSkge1xuICAgICAgICAgIHNlY051bSA9IGkgJSBjb25mLm51bWJlclNlY3Rpb25TdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCB0YXNrVHlwZSA9IFwiXCI7XG4gICAgICBpZiAoZC5hY3RpdmUpIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tUeXBlID0gXCJhY3RpdmVDcml0VGV4dFwiICsgc2VjTnVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhc2tUeXBlID0gXCJhY3RpdmVUZXh0XCIgKyBzZWNOdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkLmRvbmUpIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tUeXBlID0gdGFza1R5cGUgKyBcIiBkb25lQ3JpdFRleHRcIiArIHNlY051bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXNrVHlwZSA9IHRhc2tUeXBlICsgXCIgZG9uZVRleHRcIiArIHNlY051bTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGQuY3JpdCkge1xuICAgICAgICAgIHRhc2tUeXBlID0gdGFza1R5cGUgKyBcIiBjcml0VGV4dFwiICsgc2VjTnVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZC5taWxlc3RvbmUpIHtcbiAgICAgICAgdGFza1R5cGUgKz0gXCIgbWlsZXN0b25lVGV4dFwiO1xuICAgICAgfVxuICAgICAgaWYgKHRleHRXaWR0aCA+IGVuZFggLSBzdGFydFgpIHtcbiAgICAgICAgaWYgKGVuZFggKyB0ZXh0V2lkdGggKyAxLjUgKiBjb25mLmxlZnRQYWRkaW5nID4gdzIpIHtcbiAgICAgICAgICByZXR1cm4gY2xhc3NTdHIgKyBcIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZVwiICsgc2VjTnVtICsgXCIgXCIgKyB0YXNrVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2xhc3NTdHIgKyBcIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGVcIiArIHNlY051bSArIFwiIFwiICsgdGFza1R5cGUgKyBcIiB3aWR0aC1cIiArIHRleHRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzU3RyICsgXCIgdGFza1RleHQgdGFza1RleHRcIiArIHNlY051bSArIFwiIFwiICsgdGFza1R5cGUgKyBcIiB3aWR0aC1cIiArIHRleHRXaWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZWN1cml0eUxldmVsMiA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gICAgaWYgKHNlY3VyaXR5TGV2ZWwyID09PSBcInNhbmRib3hcIikge1xuICAgICAgbGV0IHNhbmRib3hFbGVtZW50MjtcbiAgICAgIHNhbmRib3hFbGVtZW50MiA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gICAgICBjb25zdCBkb2MyID0gc2FuZGJveEVsZW1lbnQyLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O1xuICAgICAgcmVjdGFuZ2xlcy5maWx0ZXIoZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gbGlua3MyLmhhcyhkLmlkKTtcbiAgICAgIH0pLmVhY2goZnVuY3Rpb24obykge1xuICAgICAgICB2YXIgdGFza1JlY3QgPSBkb2MyLnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyBvLmlkKTtcbiAgICAgICAgdmFyIHRhc2tUZXh0ID0gZG9jMi5xdWVyeVNlbGVjdG9yKFwiI1wiICsgby5pZCArIFwiLXRleHRcIik7XG4gICAgICAgIGNvbnN0IG9sZFBhcmVudCA9IHRhc2tSZWN0LnBhcmVudE5vZGU7XG4gICAgICAgIHZhciBMaW5rID0gZG9jMi5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgTGluay5zZXRBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIsIGxpbmtzMi5nZXQoby5pZCkpO1xuICAgICAgICBMaW5rLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBcIl90b3BcIik7XG4gICAgICAgIG9sZFBhcmVudC5hcHBlbmRDaGlsZChMaW5rKTtcbiAgICAgICAgTGluay5hcHBlbmRDaGlsZCh0YXNrUmVjdCk7XG4gICAgICAgIExpbmsuYXBwZW5kQ2hpbGQodGFza1RleHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF9fbmFtZShkcmF3UmVjdHMsIFwiZHJhd1JlY3RzXCIpO1xuICBmdW5jdGlvbiBkcmF3RXhjbHVkZURheXModGhlR2FwLCB0aGVUb3BQYWQsIHRoZVNpZGVQYWQsIHcyLCBoMiwgdGFza3MyLCBleGNsdWRlczIsIGluY2x1ZGVzMikge1xuICAgIGlmIChleGNsdWRlczIubGVuZ3RoID09PSAwICYmIGluY2x1ZGVzMi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG1pblRpbWU7XG4gICAgbGV0IG1heFRpbWU7XG4gICAgZm9yIChjb25zdCB7IHN0YXJ0VGltZSwgZW5kVGltZSB9IG9mIHRhc2tzMikge1xuICAgICAgaWYgKG1pblRpbWUgPT09IHZvaWQgMCB8fCBzdGFydFRpbWUgPCBtaW5UaW1lKSB7XG4gICAgICAgIG1pblRpbWUgPSBzdGFydFRpbWU7XG4gICAgICB9XG4gICAgICBpZiAobWF4VGltZSA9PT0gdm9pZCAwIHx8IGVuZFRpbWUgPiBtYXhUaW1lKSB7XG4gICAgICAgIG1heFRpbWUgPSBlbmRUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1pblRpbWUgfHwgIW1heFRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRheWpzMihtYXhUaW1lKS5kaWZmKGRheWpzMihtaW5UaW1lKSwgXCJ5ZWFyXCIpID4gNSkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdGltZSBpcyBtb3JlIHRoYW4gNSB5ZWFycy4gVGhpcyB3aWxsIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy4gU2tpcHBpbmcgZHJhd2luZyBleGNsdWRlIGRheXMuXCJcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGVGb3JtYXQyID0gZGlhZ09iai5kYi5nZXREYXRlRm9ybWF0KCk7XG4gICAgY29uc3QgZXhjbHVkZVJhbmdlcyA9IFtdO1xuICAgIGxldCByYW5nZSA9IG51bGw7XG4gICAgbGV0IGQgPSBkYXlqczIobWluVGltZSk7XG4gICAgd2hpbGUgKGQudmFsdWVPZigpIDw9IG1heFRpbWUpIHtcbiAgICAgIGlmIChkaWFnT2JqLmRiLmlzSW52YWxpZERhdGUoZCwgZGF0ZUZvcm1hdDIsIGV4Y2x1ZGVzMiwgaW5jbHVkZXMyKSkge1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICBzdGFydDogZCxcbiAgICAgICAgICAgIGVuZDogZFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmFuZ2UuZW5kID0gZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgZXhjbHVkZVJhbmdlcy5wdXNoKHJhbmdlKTtcbiAgICAgICAgICByYW5nZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGQgPSBkLmFkZCgxLCBcImRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlY3RhbmdsZXMgPSBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEoZXhjbHVkZVJhbmdlcykuZW50ZXIoKTtcbiAgICByZWN0YW5nbGVzLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQyKSB7XG4gICAgICByZXR1cm4gXCJleGNsdWRlLVwiICsgZDIuc3RhcnQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICB9KS5hdHRyKFwieFwiLCBmdW5jdGlvbihkMikge1xuICAgICAgcmV0dXJuIHRpbWVTY2FsZShkMi5zdGFydCkgKyB0aGVTaWRlUGFkO1xuICAgIH0pLmF0dHIoXCJ5XCIsIGNvbmYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbihkMikge1xuICAgICAgY29uc3QgcmVuZGVyRW5kID0gZDIuZW5kLmFkZCgxLCBcImRheVwiKTtcbiAgICAgIHJldHVybiB0aW1lU2NhbGUocmVuZGVyRW5kKSAtIHRpbWVTY2FsZShkMi5zdGFydCk7XG4gICAgfSkuYXR0cihcImhlaWdodFwiLCBoMiAtIHRoZVRvcFBhZCAtIGNvbmYuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoXCJ0cmFuc2Zvcm0tb3JpZ2luXCIsIGZ1bmN0aW9uKGQyLCBpKSB7XG4gICAgICByZXR1cm4gKHRpbWVTY2FsZShkMi5zdGFydCkgKyB0aGVTaWRlUGFkICsgMC41ICogKHRpbWVTY2FsZShkMi5lbmQpIC0gdGltZVNjYWxlKGQyLnN0YXJ0KSkpLnRvU3RyaW5nKCkgKyBcInB4IFwiICsgKGkgKiB0aGVHYXAgKyAwLjUgKiBoMikudG9TdHJpbmcoKSArIFwicHhcIjtcbiAgICB9KS5hdHRyKFwiY2xhc3NcIiwgXCJleGNsdWRlLXJhbmdlXCIpO1xuICB9XG4gIF9fbmFtZShkcmF3RXhjbHVkZURheXMsIFwiZHJhd0V4Y2x1ZGVEYXlzXCIpO1xuICBmdW5jdGlvbiBtYWtlR3JpZCh0aGVTaWRlUGFkLCB0aGVUb3BQYWQsIHcyLCBoMikge1xuICAgIGxldCBib3R0b21YQXhpcyA9IGF4aXNCb3R0b20odGltZVNjYWxlKS50aWNrU2l6ZSgtaDIgKyB0aGVUb3BQYWQgKyBjb25mLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KHRpbWVGb3JtYXQoZGlhZ09iai5kYi5nZXRBeGlzRm9ybWF0KCkgfHwgY29uZi5heGlzRm9ybWF0IHx8IFwiJVktJW0tJWRcIikpO1xuICAgIGNvbnN0IHJlVGlja0ludGVydmFsID0gL14oWzEtOV1cXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC87XG4gICAgY29uc3QgcmVzdWx0VGlja0ludGVydmFsID0gcmVUaWNrSW50ZXJ2YWwuZXhlYyhcbiAgICAgIGRpYWdPYmouZGIuZ2V0VGlja0ludGVydmFsKCkgfHwgY29uZi50aWNrSW50ZXJ2YWxcbiAgICApO1xuICAgIGlmIChyZXN1bHRUaWNrSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGV2ZXJ5ID0gcmVzdWx0VGlja0ludGVydmFsWzFdO1xuICAgICAgY29uc3QgaW50ZXJ2YWwgPSByZXN1bHRUaWNrSW50ZXJ2YWxbMl07XG4gICAgICBjb25zdCB3ZWVrZGF5MiA9IGRpYWdPYmouZGIuZ2V0V2Vla2RheSgpIHx8IGNvbmYud2Vla2RheTtcbiAgICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgICAgY2FzZSBcIm1pbGxpc2Vjb25kXCI6XG4gICAgICAgICAgYm90dG9tWEF4aXMudGlja3ModGltZU1pbGxpc2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZWNvbmRcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lU2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyh0aW1lTWludXRlLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgYm90dG9tWEF4aXMudGlja3ModGltZUhvdXIuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRheVwiOlxuICAgICAgICAgIGJvdHRvbVhBeGlzLnRpY2tzKHRpbWVEYXkuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICBib3R0b21YQXhpcy50aWNrcyhtYXBXZWVrZGF5VG9UaW1lRnVuY3Rpb25bd2Vla2RheTJdLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgIGJvdHRvbVhBeGlzLnRpY2tzKHRpbWVNb250aC5ldmVyeShldmVyeSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJncmlkXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGVTaWRlUGFkICsgXCIsIFwiICsgKGgyIC0gNTApICsgXCIpXCIpLmNhbGwoYm90dG9tWEF4aXMpLnNlbGVjdEFsbChcInRleHRcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZmlsbFwiLCBcIiMwMDBcIikuYXR0cihcInN0cm9rZVwiLCBcIm5vbmVcIikuYXR0cihcImZvbnQtc2l6ZVwiLCAxMCkuYXR0cihcImR5XCIsIFwiMWVtXCIpO1xuICAgIGlmIChkaWFnT2JqLmRiLnRvcEF4aXNFbmFibGVkKCkgfHwgY29uZi50b3BBeGlzKSB7XG4gICAgICBsZXQgdG9wWEF4aXMgPSBheGlzVG9wKHRpbWVTY2FsZSkudGlja1NpemUoLWgyICsgdGhlVG9wUGFkICsgY29uZi5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdCh0aW1lRm9ybWF0KGRpYWdPYmouZGIuZ2V0QXhpc0Zvcm1hdCgpIHx8IGNvbmYuYXhpc0Zvcm1hdCB8fCBcIiVZLSVtLSVkXCIpKTtcbiAgICAgIGlmIChyZXN1bHRUaWNrSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZXZlcnkgPSByZXN1bHRUaWNrSW50ZXJ2YWxbMV07XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gcmVzdWx0VGlja0ludGVydmFsWzJdO1xuICAgICAgICBjb25zdCB3ZWVrZGF5MiA9IGRpYWdPYmouZGIuZ2V0V2Vla2RheSgpIHx8IGNvbmYud2Vla2RheTtcbiAgICAgICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgICAgIGNhc2UgXCJtaWxsaXNlY29uZFwiOlxuICAgICAgICAgICAgdG9wWEF4aXMudGlja3ModGltZU1pbGxpc2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwic2Vjb25kXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyh0aW1lU2Vjb25kLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwibWludXRlXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyh0aW1lTWludXRlLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiaG91clwiOlxuICAgICAgICAgICAgdG9wWEF4aXMudGlja3ModGltZUhvdXIuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJkYXlcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVEYXkuZXZlcnkoZXZlcnkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ3ZWVrXCI6XG4gICAgICAgICAgICB0b3BYQXhpcy50aWNrcyhtYXBXZWVrZGF5VG9UaW1lRnVuY3Rpb25bd2Vla2RheTJdLmV2ZXJ5KGV2ZXJ5KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgICAgIHRvcFhBeGlzLnRpY2tzKHRpbWVNb250aC5ldmVyeShldmVyeSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN2Zy5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImdyaWRcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoZVNpZGVQYWQgKyBcIiwgXCIgKyB0aGVUb3BQYWQgKyBcIilcIikuY2FsbCh0b3BYQXhpcykuc2VsZWN0QWxsKFwidGV4dFwiKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJmaWxsXCIsIFwiIzAwMFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwibm9uZVwiKS5hdHRyKFwiZm9udC1zaXplXCIsIDEwKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKG1ha2VHcmlkLCBcIm1ha2VHcmlkXCIpO1xuICBmdW5jdGlvbiB2ZXJ0TGFiZWxzKHRoZUdhcCwgdGhlVG9wUGFkKSB7XG4gICAgbGV0IHByZXZHYXAgPSAwO1xuICAgIGNvbnN0IG51bU9jY3VycmVuY2VzID0gT2JqZWN0LmtleXMoY2F0ZWdvcnlIZWlnaHRzKS5tYXAoKGQpID0+IFtkLCBjYXRlZ29yeUhlaWdodHNbZF1dKTtcbiAgICBzdmcuYXBwZW5kKFwiZ1wiKS5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEobnVtT2NjdXJyZW5jZXMpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKGQpIHtcbiAgICAgIGNvbnN0IHJvd3MgPSBkWzBdLnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICAgIGNvbnN0IGR5ID0gLShyb3dzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHN2Z0xhYmVsID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidGV4dFwiKTtcbiAgICAgIHN2Z0xhYmVsLnNldEF0dHJpYnV0ZShcImR5XCIsIGR5ICsgXCJlbVwiKTtcbiAgICAgIGZvciAoY29uc3QgW2osIHJvd10gb2Ygcm93cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdHNwYW4gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0c3BhblwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgICAgdHNwYW4uc2V0QXR0cmlidXRlKFwieFwiLCBcIjEwXCIpO1xuICAgICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgICB0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjFlbVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0c3Bhbi50ZXh0Q29udGVudCA9IHJvdztcbiAgICAgICAgc3ZnTGFiZWwuYXBwZW5kQ2hpbGQodHNwYW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN2Z0xhYmVsO1xuICAgIH0pLmF0dHIoXCJ4XCIsIDEwKS5hdHRyKFwieVwiLCBmdW5jdGlvbihkLCBpKSB7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgICBwcmV2R2FwICs9IG51bU9jY3VycmVuY2VzW2kgLSAxXVsxXTtcbiAgICAgICAgICByZXR1cm4gZFsxXSAqIHRoZUdhcCAvIDIgKyBwcmV2R2FwICogdGhlR2FwICsgdGhlVG9wUGFkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZFsxXSAqIHRoZUdhcCAvIDIgKyB0aGVUb3BQYWQ7XG4gICAgICB9XG4gICAgfSkuYXR0cihcImZvbnQtc2l6ZVwiLCBjb25mLnNlY3Rpb25Gb250U2l6ZSkuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgIGZvciAoY29uc3QgW2ksIGNhdGVnb3J5XSBvZiBjYXRlZ29yaWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZFswXSA9PT0gY2F0ZWdvcnkpIHtcbiAgICAgICAgICByZXR1cm4gXCJzZWN0aW9uVGl0bGUgc2VjdGlvblRpdGxlXCIgKyBpICUgY29uZi5udW1iZXJTZWN0aW9uU3R5bGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzZWN0aW9uVGl0bGVcIjtcbiAgICB9KTtcbiAgfVxuICBfX25hbWUodmVydExhYmVscywgXCJ2ZXJ0TGFiZWxzXCIpO1xuICBmdW5jdGlvbiBkcmF3VG9kYXkodGhlU2lkZVBhZCwgdGhlVG9wUGFkLCB3MiwgaDIpIHtcbiAgICBjb25zdCB0b2RheU1hcmtlcjIgPSBkaWFnT2JqLmRiLmdldFRvZGF5TWFya2VyKCk7XG4gICAgaWYgKHRvZGF5TWFya2VyMiA9PT0gXCJvZmZcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2RheUcgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0b2RheVwiKTtcbiAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5TGluZSA9IHRvZGF5Ry5hcHBlbmQoXCJsaW5lXCIpO1xuICAgIHRvZGF5TGluZS5hdHRyKFwieDFcIiwgdGltZVNjYWxlKHRvZGF5KSArIHRoZVNpZGVQYWQpLmF0dHIoXCJ4MlwiLCB0aW1lU2NhbGUodG9kYXkpICsgdGhlU2lkZVBhZCkuYXR0cihcInkxXCIsIGNvbmYudGl0bGVUb3BNYXJnaW4pLmF0dHIoXCJ5MlwiLCBoMiAtIGNvbmYudGl0bGVUb3BNYXJnaW4pLmF0dHIoXCJjbGFzc1wiLCBcInRvZGF5XCIpO1xuICAgIGlmICh0b2RheU1hcmtlcjIgIT09IFwiXCIpIHtcbiAgICAgIHRvZGF5TGluZS5hdHRyKFwic3R5bGVcIiwgdG9kYXlNYXJrZXIyLnJlcGxhY2UoLywvZywgXCI7XCIpKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGRyYXdUb2RheSwgXCJkcmF3VG9kYXlcIik7XG4gIGZ1bmN0aW9uIGNoZWNrVW5pcXVlKGFycikge1xuICAgIGNvbnN0IGhhc2ggPSB7fTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFyci5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhhc2gsIGFycltpXSkpIHtcbiAgICAgICAgaGFzaFthcnJbaV1dID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0LnB1c2goYXJyW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBfX25hbWUoY2hlY2tVbmlxdWUsIFwiY2hlY2tVbmlxdWVcIik7XG59LCBcImRyYXdcIik7XG52YXIgZ2FudHRSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBzZXRDb25mLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2FudHQvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuICAubWVybWFpZC1tYWluLWZvbnQge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCBcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7XG4gIH1cblxuICAuZXhjbHVkZS1yYW5nZSB7XG4gICAgZmlsbDogJHtvcHRpb25zLmV4Y2x1ZGVCa2dDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNlY3Rpb25Ca2dDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5zZWN0aW9uQmtnQ29sb3IyfTtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYWx0U2VjdGlvbkJrZ0NvbG9yfTtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCBcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7XG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuZ3JpZENvbG9yfTtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICB9XG5cbiAgLmdyaWQgLnRpY2sgdGV4dCB7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy50b2RheUxpbmVDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksIFwidHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfTtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksIFwidHJlYnVjaGV0IG1zXCIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0IHtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHREYXJrQ29sb3J9O1xuICAgIHRleHQtYW5jaG9yOiBlbmQ7XG4gIH1cblxuXG4gIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi9cblxuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC50YXNrVGV4dC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAke29wdGlvbnMudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cblxuICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqL1xuXG4gIC50YXNrVGV4dDAsXG4gIC50YXNrVGV4dDEsXG4gIC50YXNrVGV4dDIsXG4gIC50YXNrVGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dENvbG9yfTtcbiAgfVxuXG4gIC50YXNrMCxcbiAgLnRhc2sxLFxuICAudGFzazIsXG4gIC50YXNrMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tCa2dDb2xvcn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMudGFza0JvcmRlckNvbG9yfTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUwLFxuICAudGFza1RleHRPdXRzaWRlMlxuICB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGUxLFxuICAudGFza1RleHRPdXRzaWRlMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0T3V0c2lkZUNvbG9yfTtcbiAgfVxuXG5cbiAgLyogQWN0aXZlIHRhc2sgKi9cblxuICAuYWN0aXZlMCxcbiAgLmFjdGl2ZTEsXG4gIC5hY3RpdmUyLFxuICAuYWN0aXZlMyB7XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdGl2ZVRhc2tCa2dDb2xvcn07XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuYWN0aXZlVGFza0JvcmRlckNvbG9yfTtcbiAgfVxuXG4gIC5hY3RpdmVUZXh0MCxcbiAgLmFjdGl2ZVRleHQxLFxuICAuYWN0aXZlVGV4dDIsXG4gIC5hY3RpdmVUZXh0MyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBDb21wbGV0ZWQgdGFzayAqL1xuXG4gIC5kb25lMCxcbiAgLmRvbmUxLFxuICAuZG9uZTIsXG4gIC5kb25lMyB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuZG9uZVRhc2tCb3JkZXJDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmRvbmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lVGV4dDAsXG4gIC5kb25lVGV4dDEsXG4gIC5kb25lVGV4dDIsXG4gIC5kb25lVGV4dDMge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi9cblxuICAuY3JpdDAsXG4gIC5jcml0MSxcbiAgLmNyaXQyLFxuICAuY3JpdDMge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmNyaXRCb3JkZXJDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmNyaXRCa2dDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmFjdGl2ZUNyaXQwLFxuICAuYWN0aXZlQ3JpdDEsXG4gIC5hY3RpdmVDcml0MixcbiAgLmFjdGl2ZUNyaXQzIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5jcml0Qm9yZGVyQ29sb3J9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5kb25lQ3JpdDAsXG4gIC5kb25lQ3JpdDEsXG4gIC5kb25lQ3JpdDIsXG4gIC5kb25lQ3JpdDMge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmNyaXRCb3JkZXJDb2xvcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmRvbmVUYXNrQmtnQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICB9XG5cbiAgLm1pbGVzdG9uZSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpO1xuICB9XG5cbiAgLm1pbGVzdG9uZVRleHQge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAuZG9uZUNyaXRUZXh0MCxcbiAgLmRvbmVDcml0VGV4dDEsXG4gIC5kb25lQ3JpdFRleHQyLFxuICAuZG9uZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmFjdGl2ZUNyaXRUZXh0MCxcbiAgLmFjdGl2ZUNyaXRUZXh0MSxcbiAgLmFjdGl2ZUNyaXRUZXh0MixcbiAgLmFjdGl2ZUNyaXRUZXh0MyB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCBcInRyZWJ1Y2hldCBtc1wiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZ2FudHQvZ2FudHREaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBnYW50dF9kZWZhdWx0LFxuICBkYjogZ2FudHREYl9kZWZhdWx0LFxuICByZW5kZXJlcjogZ2FudHRSZW5kZXJlcl9kZWZhdWx0LFxuICBzdHlsZXM6IHN0eWxlc19kZWZhdWx0XG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgdmVyc2lvblxufSBmcm9tIFwiLi9jaHVuay1CRlNJMlE3Ui5tanNcIjtcbmltcG9ydCB7XG4gIHNlbGVjdFN2Z0VsZW1lbnRcbn0gZnJvbSBcIi4vY2h1bmstRjJYRk4zQlkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2luZm8vaW5mb1BhcnNlci50c1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQG1lcm1haWQtanMvcGFyc2VyXCI7XG52YXIgcGFyc2VyID0ge1xuICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoaW5wdXQpID0+IHtcbiAgICBjb25zdCBhc3QgPSBhd2FpdCBwYXJzZShcImluZm9cIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICB9LCBcInBhcnNlXCIpXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvaW5mby9pbmZvRGIudHNcbnZhciBERUZBVUxUX0lORk9fREIgPSB7IHZlcnNpb24gfTtcbnZhciBnZXRWZXJzaW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBERUZBVUxUX0lORk9fREIudmVyc2lvbiwgXCJnZXRWZXJzaW9uXCIpO1xudmFyIGRiID0ge1xuICBnZXRWZXJzaW9uXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvaW5mby9pbmZvUmVuZGVyZXIudHNcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgaWQsIHZlcnNpb24yKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcInJlbmRlcmluZyBpbmZvIGRpYWdyYW1cXG5cIiArIHRleHQpO1xuICBjb25zdCBzdmcgPSBzZWxlY3RTdmdFbGVtZW50KGlkKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIDEwMCwgNDAwLCB0cnVlKTtcbiAgY29uc3QgZ3JvdXAgPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAxMDApLmF0dHIoXCJ5XCIsIDQwKS5hdHRyKFwiY2xhc3NcIiwgXCJ2ZXJzaW9uXCIpLmF0dHIoXCJmb250LXNpemVcIiwgMzIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChgdiR7dmVyc2lvbjJ9YCk7XG59LCBcImRyYXdcIik7XG52YXIgcmVuZGVyZXIgPSB7IGRyYXcgfTtcblxuLy8gc3JjL2RpYWdyYW1zL2luZm8vaW5mb0RpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiLFxuICByZW5kZXJlclxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIHBvcHVsYXRlQ29tbW9uRGJcbn0gZnJvbSBcIi4vY2h1bmstT1FDTTVMSFUubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhbkFuZE1lcmdlLFxuICBwYXJzZUZvbnRTaXplXG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVuay1GMlhGTjNCWS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBsb2csXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGllL3BpZVBhcnNlci50c1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQG1lcm1haWQtanMvcGFyc2VyXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllRGIudHNcbnZhciBERUZBVUxUX1BJRV9DT05GSUcgPSBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucGllO1xudmFyIERFRkFVTFRfUElFX0RCID0ge1xuICBzZWN0aW9uczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgc2hvd0RhdGE6IGZhbHNlLFxuICBjb25maWc6IERFRkFVTFRfUElFX0NPTkZJR1xufTtcbnZhciBzZWN0aW9ucyA9IERFRkFVTFRfUElFX0RCLnNlY3Rpb25zO1xudmFyIHNob3dEYXRhID0gREVGQVVMVF9QSUVfREIuc2hvd0RhdGE7XG52YXIgY29uZmlnID0gc3RydWN0dXJlZENsb25lKERFRkFVTFRfUElFX0NPTkZJRyk7XG52YXIgZ2V0Q29uZmlnMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gc3RydWN0dXJlZENsb25lKGNvbmZpZyksIFwiZ2V0Q29uZmlnXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBzZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHNob3dEYXRhID0gREVGQVVMVF9QSUVfREIuc2hvd0RhdGE7XG4gIGNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIGFkZFNlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiB7XG4gIGlmICghc2VjdGlvbnMuaGFzKGxhYmVsKSkge1xuICAgIHNlY3Rpb25zLnNldChsYWJlbCwgdmFsdWUpO1xuICAgIGxvZy5kZWJ1ZyhgYWRkZWQgbmV3IHNlY3Rpb246ICR7bGFiZWx9LCB3aXRoIHZhbHVlOiAke3ZhbHVlfWApO1xuICB9XG59LCBcImFkZFNlY3Rpb25cIik7XG52YXIgZ2V0U2VjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHNlY3Rpb25zLCBcImdldFNlY3Rpb25zXCIpO1xudmFyIHNldFNob3dEYXRhID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodG9nZ2xlKSA9PiB7XG4gIHNob3dEYXRhID0gdG9nZ2xlO1xufSwgXCJzZXRTaG93RGF0YVwiKTtcbnZhciBnZXRTaG93RGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gc2hvd0RhdGEsIFwiZ2V0U2hvd0RhdGFcIik7XG52YXIgZGIgPSB7XG4gIGdldENvbmZpZzogZ2V0Q29uZmlnMixcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTZWN0aW9uLFxuICBnZXRTZWN0aW9ucyxcbiAgc2V0U2hvd0RhdGEsXG4gIGdldFNob3dEYXRhXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGllL3BpZVBhcnNlci50c1xudmFyIHBvcHVsYXRlRGIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhc3QsIGRiMikgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIyKTtcbiAgZGIyLnNldFNob3dEYXRhKGFzdC5zaG93RGF0YSk7XG4gIGFzdC5zZWN0aW9ucy5tYXAoZGIyLmFkZFNlY3Rpb24pO1xufSwgXCJwb3B1bGF0ZURiXCIpO1xudmFyIHBhcnNlciA9IHtcbiAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgY29uc3QgYXN0ID0gYXdhaXQgcGFyc2UoXCJwaWVcIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICAgIHBvcHVsYXRlRGIoYXN0LCBkYik7XG4gIH0sIFwicGFyc2VcIilcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllU3R5bGVzLnRzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuICAucGllQ2lyY2xle1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBpZVN0cm9rZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGggOiAke29wdGlvbnMucGllU3Ryb2tlV2lkdGh9O1xuICAgIG9wYWNpdHkgOiAke29wdGlvbnMucGllT3BhY2l0eX07XG4gIH1cbiAgLnBpZU91dGVyQ2lyY2xle1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnBpZU91dGVyU3Ryb2tlQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLnBpZU91dGVyU3Ryb2tlV2lkdGh9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cbiAgLnBpZVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6ICR7b3B0aW9ucy5waWVUaXRsZVRleHRTaXplfTtcbiAgICBmaWxsOiAke29wdGlvbnMucGllVGl0bGVUZXh0Q29sb3J9O1xuICAgIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gIH1cbiAgLnNsaWNlIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5waWVTZWN0aW9uVGV4dENvbG9yfTtcbiAgICBmb250LXNpemU6JHtvcHRpb25zLnBpZVNlY3Rpb25UZXh0U2l6ZX07XG4gICAgLy8gZmlsbDogd2hpdGU7XG4gIH1cbiAgLmxlZ2VuZCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMucGllTGVnZW5kVGV4dENvbG9yfTtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLnBpZUxlZ2VuZFRleHRTaXplfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgcGllU3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllUmVuZGVyZXIudHNcbmltcG9ydCB7IGFyYywgcGllIGFzIGQzcGllLCBzY2FsZU9yZGluYWwgfSBmcm9tIFwiZDNcIjtcbnZhciBjcmVhdGVQaWVBcmNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2VjdGlvbnMyKSA9PiB7XG4gIGNvbnN0IHBpZURhdGEgPSBbLi4uc2VjdGlvbnMyLmVudHJpZXMoKV0ubWFwKChlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBlbGVtZW50WzBdLFxuICAgICAgdmFsdWU6IGVsZW1lbnRbMV1cbiAgICB9O1xuICB9KS5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGIudmFsdWUgLSBhLnZhbHVlO1xuICB9KTtcbiAgY29uc3QgcGllID0gZDNwaWUoKS52YWx1ZShcbiAgICAoZDNTZWN0aW9uKSA9PiBkM1NlY3Rpb24udmFsdWVcbiAgKTtcbiAgcmV0dXJuIHBpZShwaWVEYXRhKTtcbn0sIFwiY3JlYXRlUGllQXJjc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcInJlbmRlcmluZyBwaWUgY2hhcnRcXG5cIiArIHRleHQpO1xuICBjb25zdCBkYjIgPSBkaWFnT2JqLmRiO1xuICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgcGllQ29uZmlnID0gY2xlYW5BbmRNZXJnZShkYjIuZ2V0Q29uZmlnKCksIGdsb2JhbENvbmZpZy5waWUpO1xuICBjb25zdCBNQVJHSU4gPSA0MDtcbiAgY29uc3QgTEVHRU5EX1JFQ1RfU0laRSA9IDE4O1xuICBjb25zdCBMRUdFTkRfU1BBQ0lORyA9IDQ7XG4gIGNvbnN0IGhlaWdodCA9IDQ1MDtcbiAgY29uc3QgcGllV2lkdGggPSBoZWlnaHQ7XG4gIGNvbnN0IHN2ZyA9IHNlbGVjdFN2Z0VsZW1lbnQoaWQpO1xuICBjb25zdCBncm91cCA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBncm91cC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgcGllV2lkdGggLyAyICsgXCIsXCIgKyBoZWlnaHQgLyAyICsgXCIpXCIpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzIH0gPSBnbG9iYWxDb25maWc7XG4gIGxldCBbb3V0ZXJTdHJva2VXaWR0aF0gPSBwYXJzZUZvbnRTaXplKHRoZW1lVmFyaWFibGVzLnBpZU91dGVyU3Ryb2tlV2lkdGgpO1xuICBvdXRlclN0cm9rZVdpZHRoID8/PSAyO1xuICBjb25zdCB0ZXh0UG9zaXRpb24gPSBwaWVDb25maWcudGV4dFBvc2l0aW9uO1xuICBjb25zdCByYWRpdXMgPSBNYXRoLm1pbihwaWVXaWR0aCwgaGVpZ2h0KSAvIDIgLSBNQVJHSU47XG4gIGNvbnN0IGFyY0dlbmVyYXRvciA9IGFyYygpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKHJhZGl1cyk7XG4gIGNvbnN0IGxhYmVsQXJjR2VuZXJhdG9yID0gYXJjKCkuaW5uZXJSYWRpdXMocmFkaXVzICogdGV4dFBvc2l0aW9uKS5vdXRlclJhZGl1cyhyYWRpdXMgKiB0ZXh0UG9zaXRpb24pO1xuICBncm91cC5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIDApLmF0dHIoXCJjeVwiLCAwKS5hdHRyKFwiclwiLCByYWRpdXMgKyBvdXRlclN0cm9rZVdpZHRoIC8gMikuYXR0cihcImNsYXNzXCIsIFwicGllT3V0ZXJDaXJjbGVcIik7XG4gIGNvbnN0IHNlY3Rpb25zMiA9IGRiMi5nZXRTZWN0aW9ucygpO1xuICBjb25zdCBhcmNzID0gY3JlYXRlUGllQXJjcyhzZWN0aW9uczIpO1xuICBjb25zdCBteUdlbmVyYXRlZENvbG9ycyA9IFtcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxLFxuICAgIHRoZW1lVmFyaWFibGVzLnBpZTIsXG4gICAgdGhlbWVWYXJpYWJsZXMucGllMyxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWU0LFxuICAgIHRoZW1lVmFyaWFibGVzLnBpZTUsXG4gICAgdGhlbWVWYXJpYWJsZXMucGllNixcbiAgICB0aGVtZVZhcmlhYmxlcy5waWU3LFxuICAgIHRoZW1lVmFyaWFibGVzLnBpZTgsXG4gICAgdGhlbWVWYXJpYWJsZXMucGllOSxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxMCxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxMSxcbiAgICB0aGVtZVZhcmlhYmxlcy5waWUxMlxuICBdO1xuICBjb25zdCBjb2xvciA9IHNjYWxlT3JkaW5hbChteUdlbmVyYXRlZENvbG9ycyk7XG4gIGdyb3VwLnNlbGVjdEFsbChcIm15U2xpY2VzXCIpLmRhdGEoYXJjcykuZW50ZXIoKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIGFyY0dlbmVyYXRvcikuYXR0cihcImZpbGxcIiwgKGRhdHVtKSA9PiB7XG4gICAgcmV0dXJuIGNvbG9yKGRhdHVtLmRhdGEubGFiZWwpO1xuICB9KS5hdHRyKFwiY2xhc3NcIiwgXCJwaWVDaXJjbGVcIik7XG4gIGxldCBzdW0gPSAwO1xuICBzZWN0aW9uczIuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHN1bSArPSBzZWN0aW9uO1xuICB9KTtcbiAgZ3JvdXAuc2VsZWN0QWxsKFwibXlTbGljZXNcIikuZGF0YShhcmNzKS5lbnRlcigpLmFwcGVuZChcInRleHRcIikudGV4dCgoZGF0dW0pID0+IHtcbiAgICByZXR1cm4gKGRhdHVtLmRhdGEudmFsdWUgLyBzdW0gKiAxMDApLnRvRml4ZWQoMCkgKyBcIiVcIjtcbiAgfSkuYXR0cihcInRyYW5zZm9ybVwiLCAoZGF0dW0pID0+IHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyBsYWJlbEFyY0dlbmVyYXRvci5jZW50cm9pZChkYXR1bSkgKyBcIilcIjtcbiAgfSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJzbGljZVwiKTtcbiAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS50ZXh0KGRiMi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgLShoZWlnaHQgLSA1MCkgLyAyKS5hdHRyKFwiY2xhc3NcIiwgXCJwaWVUaXRsZVRleHRcIik7XG4gIGNvbnN0IGxlZ2VuZCA9IGdyb3VwLnNlbGVjdEFsbChcIi5sZWdlbmRcIikuZGF0YShjb2xvci5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxlZ2VuZFwiKS5hdHRyKFwidHJhbnNmb3JtXCIsIChfZGF0dW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaGVpZ2h0MiA9IExFR0VORF9SRUNUX1NJWkUgKyBMRUdFTkRfU1BBQ0lORztcbiAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHQyICogY29sb3IuZG9tYWluKCkubGVuZ3RoIC8gMjtcbiAgICBjb25zdCBob3Jpem9udGFsID0gMTIgKiBMRUdFTkRfUkVDVF9TSVpFO1xuICAgIGNvbnN0IHZlcnRpY2FsID0gaW5kZXggKiBoZWlnaHQyIC0gb2Zmc2V0O1xuICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIGhvcml6b250YWwgKyBcIixcIiArIHZlcnRpY2FsICsgXCIpXCI7XG4gIH0pO1xuICBsZWdlbmQuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwid2lkdGhcIiwgTEVHRU5EX1JFQ1RfU0laRSkuYXR0cihcImhlaWdodFwiLCBMRUdFTkRfUkVDVF9TSVpFKS5zdHlsZShcImZpbGxcIiwgY29sb3IpLnN0eWxlKFwic3Ryb2tlXCIsIGNvbG9yKTtcbiAgbGVnZW5kLmRhdGEoYXJjcykuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBMRUdFTkRfUkVDVF9TSVpFICsgTEVHRU5EX1NQQUNJTkcpLmF0dHIoXCJ5XCIsIExFR0VORF9SRUNUX1NJWkUgLSBMRUdFTkRfU1BBQ0lORykudGV4dCgoZGF0dW0pID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCB2YWx1ZSB9ID0gZGF0dW0uZGF0YTtcbiAgICBpZiAoZGIyLmdldFNob3dEYXRhKCkpIHtcbiAgICAgIHJldHVybiBgJHtsYWJlbH0gWyR7dmFsdWV9XWA7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG4gIGNvbnN0IGxvbmdlc3RUZXh0V2lkdGggPSBNYXRoLm1heChcbiAgICAuLi5sZWdlbmQuc2VsZWN0QWxsKFwidGV4dFwiKS5ub2RlcygpLm1hcCgobm9kZSkgPT4gbm9kZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMClcbiAgKTtcbiAgY29uc3QgdG90YWxXaWR0aCA9IHBpZVdpZHRoICsgTUFSR0lOICsgTEVHRU5EX1JFQ1RfU0laRSArIExFR0VORF9TUEFDSU5HICsgbG9uZ2VzdFRleHRXaWR0aDtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHt0b3RhbFdpZHRofSAke2hlaWdodH1gKTtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgdG90YWxXaWR0aCwgcGllQ29uZmlnLnVzZU1heFdpZHRoKTtcbn0sIFwiZHJhd1wiKTtcbnZhciByZW5kZXJlciA9IHsgZHJhdyB9O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGllL3BpZURpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXIsXG4gIGRiLFxuICByZW5kZXJlcixcbiAgc3R5bGVzOiBwaWVTdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBnZXRUaGVtZVZhcmlhYmxlcyxcbiAgbG9nLFxuICBzYW5pdGl6ZVRleHQsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvcXVhZHJhbnQtY2hhcnQvcGFyc2VyL3F1YWRyYW50Lmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgM10sICRWMSA9IFsxLCA0XSwgJFYyID0gWzEsIDVdLCAkVjMgPSBbMSwgNl0sICRWNCA9IFsxLCA3XSwgJFY1ID0gWzEsIDQsIDUsIDEwLCAxMiwgMTMsIDE0LCAxOCwgMjUsIDM1LCAzNywgMzksIDQxLCA0MiwgNDgsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNjAsIDYxLCA2MywgNjQsIDY1LCA2NiwgNjddLCAkVjYgPSBbMSwgNCwgNSwgMTAsIDEyLCAxMywgMTQsIDE4LCAyNSwgMjgsIDM1LCAzNywgMzksIDQxLCA0MiwgNDgsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNjAsIDYxLCA2MywgNjQsIDY1LCA2NiwgNjddLCAkVjcgPSBbNTUsIDU2LCA1N10sICRWOCA9IFsyLCAzNl0sICRWOSA9IFsxLCAzN10sICRWYSA9IFsxLCAzNl0sICRWYiA9IFsxLCAzOF0sICRWYyA9IFsxLCAzNV0sICRWZCA9IFsxLCA0M10sICRWZSA9IFsxLCA0MV0sICRWZiA9IFsxLCAxNF0sICRWZyA9IFsxLCAyM10sICRWaCA9IFsxLCAxOF0sICRWaSA9IFsxLCAxOV0sICRWaiA9IFsxLCAyMF0sICRWayA9IFsxLCAyMV0sICRWbCA9IFsxLCAyMl0sICRWbSA9IFsxLCAyNF0sICRWbiA9IFsxLCAyNV0sICRWbyA9IFsxLCAyNl0sICRWcCA9IFsxLCAyN10sICRWcSA9IFsxLCAyOF0sICRWciA9IFsxLCAyOV0sICRWcyA9IFsxLCAzMl0sICRWdCA9IFsxLCAzM10sICRWdSA9IFsxLCAzNF0sICRWdiA9IFsxLCAzOV0sICRWdyA9IFsxLCA0MF0sICRWeCA9IFsxLCA0Ml0sICRWeSA9IFsxLCA0NF0sICRWeiA9IFsxLCA2Ml0sICRWQSA9IFsxLCA2MV0sICRWQiA9IFs0LCA1LCA4LCAxMCwgMTIsIDEzLCAxNCwgMTgsIDQ0LCA0NywgNDksIDU1LCA1NiwgNTcsIDYzLCA2NCwgNjUsIDY2LCA2N10sICRWQyA9IFsxLCA2NV0sICRWRCA9IFsxLCA2Nl0sICRWRSA9IFsxLCA2N10sICRWRiA9IFsxLCA2OF0sICRWRyA9IFsxLCA2OV0sICRWSCA9IFsxLCA3MF0sICRWSSA9IFsxLCA3MV0sICRWSiA9IFsxLCA3Ml0sICRWSyA9IFsxLCA3M10sICRWTCA9IFsxLCA3NF0sICRWTSA9IFsxLCA3NV0sICRWTiA9IFsxLCA3Nl0sICRWTyA9IFs0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxOF0sICRWUCA9IFsxLCA5MF0sICRWUSA9IFsxLCA5MV0sICRWUiA9IFsxLCA5Ml0sICRWUyA9IFsxLCA5OV0sICRWVCA9IFsxLCA5M10sICRWVSA9IFsxLCA5Nl0sICRWViA9IFsxLCA5NF0sICRWVyA9IFsxLCA5NV0sICRWWCA9IFsxLCA5N10sICRWWSA9IFsxLCA5OF0sICRWWiA9IFsxLCAxMDJdLCAkVl8gPSBbMTAsIDU1LCA1NiwgNTddLCAkViQgPSBbNCwgNSwgNiwgOCwgMTAsIDExLCAxMywgMTcsIDE4LCAxOSwgMjAsIDU1LCA1NiwgNTddO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LCBcInRyYWNlXCIpLFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwiaWRTdHJpbmdUb2tlblwiOiAzLCBcIkFMUEhBXCI6IDQsIFwiTlVNXCI6IDUsIFwiTk9ERV9TVFJJTkdcIjogNiwgXCJET1dOXCI6IDcsIFwiTUlOVVNcIjogOCwgXCJERUZBVUxUXCI6IDksIFwiQ09NTUFcIjogMTAsIFwiQ09MT05cIjogMTEsIFwiQU1QXCI6IDEyLCBcIkJSS1RcIjogMTMsIFwiTVVMVFwiOiAxNCwgXCJVTklDT0RFX1RFWFRcIjogMTUsIFwic3R5bGVDb21wb25lbnRcIjogMTYsIFwiVU5JVFwiOiAxNywgXCJTUEFDRVwiOiAxOCwgXCJTVFlMRVwiOiAxOSwgXCJQQ1RcIjogMjAsIFwiaWRTdHJpbmdcIjogMjEsIFwic3R5bGVcIjogMjIsIFwic3R5bGVzT3B0XCI6IDIzLCBcImNsYXNzRGVmU3RhdGVtZW50XCI6IDI0LCBcIkNMQVNTREVGXCI6IDI1LCBcInN0YXJ0XCI6IDI2LCBcImVvbFwiOiAyNywgXCJRVUFEUkFOVFwiOiAyOCwgXCJkb2N1bWVudFwiOiAyOSwgXCJsaW5lXCI6IDMwLCBcInN0YXRlbWVudFwiOiAzMSwgXCJheGlzRGV0YWlsc1wiOiAzMiwgXCJxdWFkcmFudERldGFpbHNcIjogMzMsIFwicG9pbnRzXCI6IDM0LCBcInRpdGxlXCI6IDM1LCBcInRpdGxlX3ZhbHVlXCI6IDM2LCBcImFjY190aXRsZVwiOiAzNywgXCJhY2NfdGl0bGVfdmFsdWVcIjogMzgsIFwiYWNjX2Rlc2NyXCI6IDM5LCBcImFjY19kZXNjcl92YWx1ZVwiOiA0MCwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDQxLCBcInNlY3Rpb25cIjogNDIsIFwidGV4dFwiOiA0MywgXCJwb2ludF9zdGFydFwiOiA0NCwgXCJwb2ludF94XCI6IDQ1LCBcInBvaW50X3lcIjogNDYsIFwiY2xhc3NfbmFtZVwiOiA0NywgXCJYLUFYSVNcIjogNDgsIFwiQVhJUy1URVhULURFTElNSVRFUlwiOiA0OSwgXCJZLUFYSVNcIjogNTAsIFwiUVVBRFJBTlRfMVwiOiA1MSwgXCJRVUFEUkFOVF8yXCI6IDUyLCBcIlFVQURSQU5UXzNcIjogNTMsIFwiUVVBRFJBTlRfNFwiOiA1NCwgXCJORVdMSU5FXCI6IDU1LCBcIlNFTUlcIjogNTYsIFwiRU9GXCI6IDU3LCBcImFscGhhTnVtVG9rZW5cIjogNTgsIFwidGV4dE5vVGFnc1Rva2VuXCI6IDU5LCBcIlNUUlwiOiA2MCwgXCJNRF9TVFJcIjogNjEsIFwiYWxwaGFOdW1cIjogNjIsIFwiUFVOQ1RVQVRJT05cIjogNjMsIFwiUExVU1wiOiA2NCwgXCJFUVVBTFNcIjogNjUsIFwiRE9UXCI6IDY2LCBcIlVOREVSU0NPUkVcIjogNjcsIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA0OiBcIkFMUEhBXCIsIDU6IFwiTlVNXCIsIDY6IFwiTk9ERV9TVFJJTkdcIiwgNzogXCJET1dOXCIsIDg6IFwiTUlOVVNcIiwgOTogXCJERUZBVUxUXCIsIDEwOiBcIkNPTU1BXCIsIDExOiBcIkNPTE9OXCIsIDEyOiBcIkFNUFwiLCAxMzogXCJCUktUXCIsIDE0OiBcIk1VTFRcIiwgMTU6IFwiVU5JQ09ERV9URVhUXCIsIDE3OiBcIlVOSVRcIiwgMTg6IFwiU1BBQ0VcIiwgMTk6IFwiU1RZTEVcIiwgMjA6IFwiUENUXCIsIDI1OiBcIkNMQVNTREVGXCIsIDI4OiBcIlFVQURSQU5UXCIsIDM1OiBcInRpdGxlXCIsIDM2OiBcInRpdGxlX3ZhbHVlXCIsIDM3OiBcImFjY190aXRsZVwiLCAzODogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMzk6IFwiYWNjX2Rlc2NyXCIsIDQwOiBcImFjY19kZXNjcl92YWx1ZVwiLCA0MTogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDQyOiBcInNlY3Rpb25cIiwgNDQ6IFwicG9pbnRfc3RhcnRcIiwgNDU6IFwicG9pbnRfeFwiLCA0NjogXCJwb2ludF95XCIsIDQ3OiBcImNsYXNzX25hbWVcIiwgNDg6IFwiWC1BWElTXCIsIDQ5OiBcIkFYSVMtVEVYVC1ERUxJTUlURVJcIiwgNTA6IFwiWS1BWElTXCIsIDUxOiBcIlFVQURSQU5UXzFcIiwgNTI6IFwiUVVBRFJBTlRfMlwiLCA1MzogXCJRVUFEUkFOVF8zXCIsIDU0OiBcIlFVQURSQU5UXzRcIiwgNTU6IFwiTkVXTElORVwiLCA1NjogXCJTRU1JXCIsIDU3OiBcIkVPRlwiLCA2MDogXCJTVFJcIiwgNjE6IFwiTURfU1RSXCIsIDYzOiBcIlBVTkNUVUFUSU9OXCIsIDY0OiBcIlBMVVNcIiwgNjU6IFwiRVFVQUxTXCIsIDY2OiBcIkRPVFwiLCA2NzogXCJVTkRFUlNDT1JFXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMTYsIDFdLCBbMjEsIDFdLCBbMjEsIDJdLCBbMjIsIDFdLCBbMjIsIDJdLCBbMjMsIDFdLCBbMjMsIDNdLCBbMjQsIDVdLCBbMjYsIDJdLCBbMjYsIDJdLCBbMjYsIDJdLCBbMjksIDBdLCBbMjksIDJdLCBbMzAsIDJdLCBbMzEsIDBdLCBbMzEsIDFdLCBbMzEsIDJdLCBbMzEsIDFdLCBbMzEsIDFdLCBbMzEsIDFdLCBbMzEsIDJdLCBbMzEsIDJdLCBbMzEsIDJdLCBbMzEsIDFdLCBbMzEsIDFdLCBbMzQsIDRdLCBbMzQsIDVdLCBbMzQsIDVdLCBbMzQsIDZdLCBbMzIsIDRdLCBbMzIsIDNdLCBbMzIsIDJdLCBbMzIsIDRdLCBbMzIsIDNdLCBbMzIsIDJdLCBbMzMsIDJdLCBbMzMsIDJdLCBbMzMsIDJdLCBbMzMsIDJdLCBbMjcsIDFdLCBbMjcsIDFdLCBbMjcsIDFdLCBbNDMsIDFdLCBbNDMsIDJdLCBbNDMsIDFdLCBbNDMsIDFdLCBbNjIsIDFdLCBbNjIsIDJdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTgsIDFdLCBbNTksIDFdLCBbNTksIDFdLCBbNTksIDFdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdLnRyaW0oKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgJCRbJDAgLSAyXS5wdXNoKCQkWyQwXS50cmltKCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5hZGRDbGFzcygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSAzXSwgXCJcIiwgJCRbJDAgLSAxXSwgJCRbJDBdLCBbXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSA0XSwgJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCBbXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgeXkuYWRkUG9pbnQoJCRbJDAgLSA0XSwgXCJcIiwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICB5eS5hZGRQb2ludCgkJFskMCAtIDVdLCAkJFskMCAtIDRdLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHl5LnNldFhBeGlzTGVmdFRleHQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0WEF4aXNSaWdodFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAkJFskMCAtIDFdLnRleHQgKz0gXCIgXFx1MjdGNiBcIjtcbiAgICAgICAgICB5eS5zZXRYQXhpc0xlZnRUZXh0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgIHl5LnNldFhBeGlzTGVmdFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICB5eS5zZXRZQXhpc0JvdHRvbVRleHQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgeXkuc2V0WUF4aXNUb3BUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTU6XG4gICAgICAgICAgJCRbJDAgLSAxXS50ZXh0ICs9IFwiIFxcdTI3RjYgXCI7XG4gICAgICAgICAgeXkuc2V0WUF4aXNCb3R0b21UZXh0KCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHl5LnNldFlBeGlzQm90dG9tVGV4dCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHl5LnNldFF1YWRyYW50MVRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICB5eS5zZXRRdWFkcmFudDJUZXh0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgeXkuc2V0UXVhZHJhbnQzVGV4dCgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgIHl5LnNldFF1YWRyYW50NFRleHQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwIC0gMV0udGV4dCArIFwiXCIgKyAkJFskMF0sIHR5cGU6ICQkWyQwIC0gMV0udHlwZSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcInRleHRcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdGV4dDogJCRbJDBdLCB0eXBlOiBcIm1hcmtkb3duXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiXCIgKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDE4OiAkVjAsIDI2OiAxLCAyNzogMiwgMjg6ICRWMSwgNTU6ICRWMiwgNTY6ICRWMywgNTc6ICRWNCB9LCB7IDE6IFszXSB9LCB7IDE4OiAkVjAsIDI2OiA4LCAyNzogMiwgMjg6ICRWMSwgNTU6ICRWMiwgNTY6ICRWMywgNTc6ICRWNCB9LCB7IDE4OiAkVjAsIDI2OiA5LCAyNzogMiwgMjg6ICRWMSwgNTU6ICRWMiwgNTY6ICRWMywgNTc6ICRWNCB9LCBvKCRWNSwgWzIsIDMzXSwgeyAyOTogMTAgfSksIG8oJFY2LCBbMiwgNjFdKSwgbygkVjYsIFsyLCA2Ml0pLCBvKCRWNiwgWzIsIDYzXSksIHsgMTogWzIsIDMwXSB9LCB7IDE6IFsyLCAzMV0gfSwgbygkVjcsICRWOCwgeyAzMDogMTEsIDMxOiAxMiwgMjQ6IDEzLCAzMjogMTUsIDMzOiAxNiwgMzQ6IDE3LCA0MzogMzAsIDU4OiAzMSwgMTogWzIsIDMyXSwgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVmYsIDI1OiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQyOiAkVmwsIDQ4OiAkVm0sIDUwOiAkVm4sIDUxOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY1LCBbMiwgMzRdKSwgeyAyNzogNDUsIDU1OiAkVjIsIDU2OiAkVjMsIDU3OiAkVjQgfSwgbygkVjcsIFsyLCAzN10pLCBvKCRWNywgJFY4LCB7IDI0OiAxMywgMzI6IDE1LCAzMzogMTYsIDM0OiAxNywgNDM6IDMwLCA1ODogMzEsIDMxOiA0NiwgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVmYsIDI1OiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQyOiAkVmwsIDQ4OiAkVm0sIDUwOiAkVm4sIDUxOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDYwOiAkVnMsIDYxOiAkVnQsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY3LCBbMiwgMzldKSwgbygkVjcsIFsyLCA0MF0pLCBvKCRWNywgWzIsIDQxXSksIHsgMzY6IFsxLCA0N10gfSwgeyAzODogWzEsIDQ4XSB9LCB7IDQwOiBbMSwgNDldIH0sIG8oJFY3LCBbMiwgNDVdKSwgbygkVjcsIFsyLCA0Nl0pLCB7IDE4OiBbMSwgNTBdIH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1MSwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1MiwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1MywgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1NCwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1NSwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDQzOiA1NiwgNTg6IDMxLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0sIHsgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNDQ6IFsxLCA1N10sIDQ3OiBbMSwgNThdLCA1ODogNjAsIDU5OiA1OSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9LCBvKCRWQiwgWzIsIDY0XSksIG8oJFZCLCBbMiwgNjZdKSwgbygkVkIsIFsyLCA2N10pLCBvKCRWQiwgWzIsIDcwXSksIG8oJFZCLCBbMiwgNzFdKSwgbygkVkIsIFsyLCA3Ml0pLCBvKCRWQiwgWzIsIDczXSksIG8oJFZCLCBbMiwgNzRdKSwgbygkVkIsIFsyLCA3NV0pLCBvKCRWQiwgWzIsIDc2XSksIG8oJFZCLCBbMiwgNzddKSwgbygkVkIsIFsyLCA3OF0pLCBvKCRWQiwgWzIsIDc5XSksIG8oJFZCLCBbMiwgODBdKSwgbygkVjUsIFsyLCAzNV0pLCBvKCRWNywgWzIsIDM4XSksIG8oJFY3LCBbMiwgNDJdKSwgbygkVjcsIFsyLCA0M10pLCBvKCRWNywgWzIsIDQ0XSksIHsgMzogNjQsIDQ6ICRWQywgNTogJFZELCA2OiAkVkUsIDc6ICRWRiwgODogJFZHLCA5OiAkVkgsIDEwOiAkVkksIDExOiAkVkosIDEyOiAkVkssIDEzOiAkVkwsIDE0OiAkVk0sIDE1OiAkVk4sIDIxOiA2MyB9LCBvKCRWNywgWzIsIDUzXSwgeyA1OTogNTksIDU4OiA2MCwgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNDk6IFsxLCA3N10sIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY3LCBbMiwgNTZdLCB7IDU5OiA1OSwgNTg6IDYwLCA0OiAkVjksIDU6ICRWYSwgODogJFZ6LCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCAxODogJFZBLCA0OTogWzEsIDc4XSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9KSwgbygkVjcsIFsyLCA1N10sIHsgNTk6IDU5LCA1ODogNjAsIDQ6ICRWOSwgNTogJFZhLCA4OiAkVnosIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVkEsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIG8oJFY3LCBbMiwgNThdLCB7IDU5OiA1OSwgNTg6IDYwLCA0OiAkVjksIDU6ICRWYSwgODogJFZ6LCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCAxODogJFZBLCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0pLCBvKCRWNywgWzIsIDU5XSwgeyA1OTogNTksIDU4OiA2MCwgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9KSwgbygkVjcsIFsyLCA2MF0sIHsgNTk6IDU5LCA1ODogNjAsIDQ6ICRWOSwgNTogJFZhLCA4OiAkVnosIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDE4OiAkVkEsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIHsgNDU6IFsxLCA3OV0gfSwgeyA0NDogWzEsIDgwXSB9LCBvKCRWQiwgWzIsIDY1XSksIG8oJFZCLCBbMiwgODFdKSwgbygkVkIsIFsyLCA4Ml0pLCBvKCRWQiwgWzIsIDgzXSksIHsgMzogODIsIDQ6ICRWQywgNTogJFZELCA2OiAkVkUsIDc6ICRWRiwgODogJFZHLCA5OiAkVkgsIDEwOiAkVkksIDExOiAkVkosIDEyOiAkVkssIDEzOiAkVkwsIDE0OiAkVk0sIDE1OiAkVk4sIDE4OiBbMSwgODFdIH0sIG8oJFZPLCBbMiwgMjNdKSwgbygkVk8sIFsyLCAxXSksIG8oJFZPLCBbMiwgMl0pLCBvKCRWTywgWzIsIDNdKSwgbygkVk8sIFsyLCA0XSksIG8oJFZPLCBbMiwgNV0pLCBvKCRWTywgWzIsIDZdKSwgbygkVk8sIFsyLCA3XSksIG8oJFZPLCBbMiwgOF0pLCBvKCRWTywgWzIsIDldKSwgbygkVk8sIFsyLCAxMF0pLCBvKCRWTywgWzIsIDExXSksIG8oJFZPLCBbMiwgMTJdKSwgbygkVjcsIFsyLCA1Ml0sIHsgNTg6IDMxLCA0MzogODMsIDQ6ICRWOSwgNTogJFZhLCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCA2MDogJFZzLCA2MTogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0pLCBvKCRWNywgWzIsIDU1XSwgeyA1ODogMzEsIDQzOiA4NCwgNDogJFY5LCA1OiAkVmEsIDEwOiAkVmIsIDEyOiAkVmMsIDEzOiAkVmQsIDE0OiAkVmUsIDYwOiAkVnMsIDYxOiAkVnQsIDYzOiAkVnUsIDY0OiAkVnYsIDY1OiAkVncsIDY2OiAkVngsIDY3OiAkVnkgfSksIHsgNDY6IFsxLCA4NV0gfSwgeyA0NTogWzEsIDg2XSB9LCB7IDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTY6IDg5LCAxNzogJFZWLCAxODogJFZXLCAxOTogJFZYLCAyMDogJFZZLCAyMjogODgsIDIzOiA4NyB9LCBvKCRWTywgWzIsIDI0XSksIG8oJFY3LCBbMiwgNTFdLCB7IDU5OiA1OSwgNTg6IDYwLCA0OiAkVjksIDU6ICRWYSwgODogJFZ6LCAxMDogJFZiLCAxMjogJFZjLCAxMzogJFZkLCAxNDogJFZlLCAxODogJFZBLCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3LCA2NjogJFZ4LCA2NzogJFZ5IH0pLCBvKCRWNywgWzIsIDU0XSwgeyA1OTogNTksIDU4OiA2MCwgNDogJFY5LCA1OiAkVmEsIDg6ICRWeiwgMTA6ICRWYiwgMTI6ICRWYywgMTM6ICRWZCwgMTQ6ICRWZSwgMTg6ICRWQSwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdywgNjY6ICRWeCwgNjc6ICRWeSB9KSwgbygkVjcsIFsyLCA0N10sIHsgMjI6IDg4LCAxNjogODksIDIzOiAxMDAsIDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSB9KSwgeyA0NjogWzEsIDEwMV0gfSwgbygkVjcsIFsyLCAyOV0sIHsgMTA6ICRWWiB9KSwgbygkVl8sIFsyLCAyN10sIHsgMTY6IDEwMywgNDogJFZQLCA1OiAkVlEsIDY6ICRWUiwgODogJFZTLCAxMTogJFZULCAxMzogJFZVLCAxNzogJFZWLCAxODogJFZXLCAxOTogJFZYLCAyMDogJFZZIH0pLCBvKCRWJCwgWzIsIDI1XSksIG8oJFYkLCBbMiwgMTNdKSwgbygkViQsIFsyLCAxNF0pLCBvKCRWJCwgWzIsIDE1XSksIG8oJFYkLCBbMiwgMTZdKSwgbygkViQsIFsyLCAxN10pLCBvKCRWJCwgWzIsIDE4XSksIG8oJFYkLCBbMiwgMTldKSwgbygkViQsIFsyLCAyMF0pLCBvKCRWJCwgWzIsIDIxXSksIG8oJFYkLCBbMiwgMjJdKSwgbygkVjcsIFsyLCA0OV0sIHsgMTA6ICRWWiB9KSwgbygkVjcsIFsyLCA0OF0sIHsgMjI6IDg4LCAxNjogODksIDIzOiAxMDQsIDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSB9KSwgeyA0OiAkVlAsIDU6ICRWUSwgNjogJFZSLCA4OiAkVlMsIDExOiAkVlQsIDEzOiAkVlUsIDE2OiA4OSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSwgMjI6IDEwNSB9LCBvKCRWJCwgWzIsIDI2XSksIG8oJFY3LCBbMiwgNTBdLCB7IDEwOiAkVlogfSksIG8oJFZfLCBbMiwgMjhdLCB7IDE2OiAxMDMsIDQ6ICRWUCwgNTogJFZRLCA2OiAkVlIsIDg6ICRWUywgMTE6ICRWVCwgMTM6ICRWVSwgMTc6ICRWViwgMTg6ICRWVywgMTk6ICRWWCwgMjA6ICRWWSB9KV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgODogWzIsIDMwXSwgOTogWzIsIDMxXSB9LFxuICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShwb3BTdGFjaywgXCJwb3BTdGFja1wiKTtcbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgX19uYW1lKGxleCwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwicGFyc2VcIilcbiAgfTtcbiAgdmFyIGxleGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwic2V0SW5wdXRcIiksXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LCBcImlucHV0XCIpLFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJ1bnB1dFwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcIm1vcmVcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJyZWplY3RcIiksXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LCBcImxlc3NcIiksXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwicGFzdElucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJ1cGNvbWluZ0lucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSwgXCJzaG93UG9zaXRpb25cIiksXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sIFwidGVzdF9tYXRjaFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibmV4dFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibGV4XCIpLFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sIFwiYmVnaW5cIiksXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwb3BTdGF0ZVwiKSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiX2N1cnJlbnRSdWxlc1wiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sIFwidG9wU3RhdGVcIiksXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSwgXCJwdXNoU3RhdGVcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sIFwic3RhdGVTdGFja1NpemVcIiksXG4gICAgICBvcHRpb25zOiB7IFwiY2FzZS1pbnNlbnNpdGl2ZVwiOiB0cnVlIH0sXG4gICAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICB2YXIgWVlTVEFURSA9IFlZX1NUQVJUO1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwidGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJ0aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgcmV0dXJuIDUxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICByZXR1cm4gNTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwibWRfc3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiBcIk1EX1NUUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gXCJTVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2xhc3NfbmFtZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcInBvaW50X3N0YXJ0XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJwb2ludF94XCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwicG9pbnRfeVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHJldHVybiAxMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICByZXR1cm4gNjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiAxMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICByZXR1cm4gNjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgcmV0dXJuIDY2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICByZXR1cm4gNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICByZXR1cm4gNTc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86JSUoPyFcXHspW15cXG5dKikvaSwgL14oPzpbXlxcfV0lJVteXFxuXSopL2ksIC9eKD86W1xcblxccl0rKS9pLCAvXig/OiUlW15cXG5dKikvaSwgL14oPzp0aXRsZVxcYikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86ICp4LWF4aXMgKikvaSwgL14oPzogKnktYXhpcyAqKS9pLCAvXig/OiAqLS0rPiAqKS9pLCAvXig/OiAqcXVhZHJhbnQtMSAqKS9pLCAvXig/OiAqcXVhZHJhbnQtMiAqKS9pLCAvXig/OiAqcXVhZHJhbnQtMyAqKS9pLCAvXig/OiAqcXVhZHJhbnQtNCAqKS9pLCAvXig/OmNsYXNzRGVmXFxiKS9pLCAvXig/OltcIl1bYF0pL2ksIC9eKD86W15gXCJdKykvaSwgL14oPzpbYF1bXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86Ojo6KS9pLCAvXig/Ol5cXHcrKS9pLCAvXig/Olxccyo6XFxzKlxcW1xccyopL2ksIC9eKD86KDEpfCgwKC5cXGQrKT8pKS9pLCAvXig/OlxccypcXF0gKikvaSwgL14oPzpcXHMqLFxccyopL2ksIC9eKD86KDEpfCgwKC5cXGQrKT8pKS9pLCAvXig/OiAqcXVhZHJhbnRDaGFydCAqKS9pLCAvXig/OltBLVphLXpdKykvaSwgL14oPzo6KS9pLCAvXig/OlxcKykvaSwgL14oPzosKS9pLCAvXig/Oj0pL2ksIC9eKD86PSkvaSwgL14oPzpcXCopL2ksIC9eKD86IykvaSwgL14oPzpbXFxfXSkvaSwgL14oPzpcXC4pL2ksIC9eKD86JikvaSwgL14oPzotKS9pLCAvXig/OlswLTldKykvaSwgL14oPzpcXHMpL2ksIC9eKD86OykvaSwgL14oPzpbIVwiIyQlJicqKywtLmA/XFxcXF8vXSkvaSwgL14oPzokKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJjbGFzc19uYW1lXCI6IHsgXCJydWxlc1wiOiBbMjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInBvaW50X3lcIjogeyBcInJ1bGVzXCI6IFszM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwicG9pbnRfeFwiOiB7IFwicnVsZXNcIjogWzMyXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJwb2ludF9zdGFydFwiOiB7IFwicnVsZXNcIjogWzMwLCAzMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzExLCAxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbOV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidGl0bGVcIjogeyBcInJ1bGVzXCI6IFs1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJtZF9zdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyMiwgMjNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInN0cmluZ1wiOiB7IFwicnVsZXNcIjogWzI1LCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDYsIDgsIDEwLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyNCwgMjcsIDI5LCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxXSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9IH1cbiAgICB9O1xuICAgIHJldHVybiBsZXhlcjI7XG4gIH0oKTtcbiAgcGFyc2VyMi5sZXhlciA9IGxleGVyO1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgdGhpcy55eSA9IHt9O1xuICB9XG4gIF9fbmFtZShQYXJzZXIsIFwiUGFyc2VyXCIpO1xuICBQYXJzZXIucHJvdG90eXBlID0gcGFyc2VyMjtcbiAgcGFyc2VyMi5QYXJzZXIgPSBQYXJzZXI7XG4gIHJldHVybiBuZXcgUGFyc2VyKCk7XG59KCk7XG5wYXJzZXIucGFyc2VyID0gcGFyc2VyO1xudmFyIHF1YWRyYW50X2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9xdWFkcmFudC1jaGFydC9xdWFkcmFudEJ1aWxkZXIudHNcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzXCI7XG52YXIgZGVmYXVsdFRoZW1lVmFyaWFibGVzID0gZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbnZhciBRdWFkcmFudEJ1aWxkZXIgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xhc3NlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRDb25maWcoKTtcbiAgICB0aGlzLnRoZW1lQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmdldERlZmF1bHREYXRhKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJRdWFkcmFudEJ1aWxkZXJcIik7XG4gIH1cbiAgZ2V0RGVmYXVsdERhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlVGV4dDogXCJcIixcbiAgICAgIHF1YWRyYW50MVRleHQ6IFwiXCIsXG4gICAgICBxdWFkcmFudDJUZXh0OiBcIlwiLFxuICAgICAgcXVhZHJhbnQzVGV4dDogXCJcIixcbiAgICAgIHF1YWRyYW50NFRleHQ6IFwiXCIsXG4gICAgICB4QXhpc0xlZnRUZXh0OiBcIlwiLFxuICAgICAgeEF4aXNSaWdodFRleHQ6IFwiXCIsXG4gICAgICB5QXhpc0JvdHRvbVRleHQ6IFwiXCIsXG4gICAgICB5QXhpc1RvcFRleHQ6IFwiXCIsXG4gICAgICBwb2ludHM6IFtdXG4gICAgfTtcbiAgfVxuICBnZXREZWZhdWx0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93WEF4aXM6IHRydWUsXG4gICAgICBzaG93WUF4aXM6IHRydWUsXG4gICAgICBzaG93VGl0bGU6IHRydWUsXG4gICAgICBjaGFydEhlaWdodDogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGggfHwgNTAwLFxuICAgICAgY2hhcnRXaWR0aDogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0IHx8IDUwMCxcbiAgICAgIHRpdGxlUGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnRpdGxlUGFkZGluZyB8fCAxMCxcbiAgICAgIHRpdGxlRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py50aXRsZUZvbnRTaXplIHx8IDIwLFxuICAgICAgcXVhZHJhbnRQYWRkaW5nOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRQYWRkaW5nIHx8IDUsXG4gICAgICB4QXhpc0xhYmVsUGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnhBeGlzTGFiZWxQYWRkaW5nIHx8IDUsXG4gICAgICB5QXhpc0xhYmVsUGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnlBeGlzTGFiZWxQYWRkaW5nIHx8IDUsXG4gICAgICB4QXhpc0xhYmVsRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsRm9udFNpemUgfHwgMTYsXG4gICAgICB5QXhpc0xhYmVsRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsRm9udFNpemUgfHwgMTYsXG4gICAgICBxdWFkcmFudExhYmVsRm9udFNpemU6IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py5xdWFkcmFudExhYmVsRm9udFNpemUgfHwgMTYsXG4gICAgICBxdWFkcmFudFRleHRUb3BQYWRkaW5nOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRUZXh0VG9wUGFkZGluZyB8fCA1LFxuICAgICAgcG9pbnRUZXh0UGFkZGluZzogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnBvaW50VGV4dFBhZGRpbmcgfHwgNSxcbiAgICAgIHBvaW50TGFiZWxGb250U2l6ZTogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnBvaW50TGFiZWxGb250U2l6ZSB8fCAxMixcbiAgICAgIHBvaW50UmFkaXVzOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucG9pbnRSYWRpdXMgfHwgNSxcbiAgICAgIHhBeGlzUG9zaXRpb246IGRlZmF1bHRDb25maWdfZGVmYXVsdC5xdWFkcmFudENoYXJ0Py54QXhpc1Bvc2l0aW9uIHx8IFwidG9wXCIsXG4gICAgICB5QXhpc1Bvc2l0aW9uOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ueUF4aXNQb3NpdGlvbiB8fCBcImxlZnRcIixcbiAgICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDogZGVmYXVsdENvbmZpZ19kZWZhdWx0LnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCB8fCAxLFxuICAgICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOiBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoIHx8IDJcbiAgICB9O1xuICB9XG4gIGdldERlZmF1bHRUaGVtZUNvbmZpZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVhZHJhbnQxRmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50MUZpbGwsXG4gICAgICBxdWFkcmFudDJGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQyRmlsbCxcbiAgICAgIHF1YWRyYW50M0ZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudDNGaWxsLFxuICAgICAgcXVhZHJhbnQ0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50NEZpbGwsXG4gICAgICBxdWFkcmFudDFUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50MVRleHRGaWxsLFxuICAgICAgcXVhZHJhbnQyVGV4dEZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudDJUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50M1RleHRGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnQzVGV4dEZpbGwsXG4gICAgICBxdWFkcmFudDRUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50NFRleHRGaWxsLFxuICAgICAgcXVhZHJhbnRQb2ludEZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudFBvaW50RmlsbCxcbiAgICAgIHF1YWRyYW50UG9pbnRUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50WEF4aXNUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50WUF4aXNUZXh0RmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgIHF1YWRyYW50VGl0bGVGaWxsOiBkZWZhdWx0VGhlbWVWYXJpYWJsZXMucXVhZHJhbnRUaXRsZUZpbGwsXG4gICAgICBxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDogZGVmYXVsdFRoZW1lVmFyaWFibGVzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6IGRlZmF1bHRUaGVtZVZhcmlhYmxlcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbFxuICAgIH07XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRDb25maWcoKTtcbiAgICB0aGlzLnRoZW1lQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmdldERlZmF1bHREYXRhKCk7XG4gICAgdGhpcy5jbGFzc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBsb2cuaW5mbyhcImNsZWFyIGNhbGxlZFwiKTtcbiAgfVxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSB7IC4uLnRoaXMuZGF0YSwgLi4uZGF0YSB9O1xuICB9XG4gIGFkZFBvaW50cyhwb2ludHMpIHtcbiAgICB0aGlzLmRhdGEucG9pbnRzID0gWy4uLnBvaW50cywgLi4udGhpcy5kYXRhLnBvaW50c107XG4gIH1cbiAgYWRkQ2xhc3MoY2xhc3NOYW1lLCBzdHlsZXMpIHtcbiAgICB0aGlzLmNsYXNzZXMuc2V0KGNsYXNzTmFtZSwgc3R5bGVzKTtcbiAgfVxuICBzZXRDb25maWcoY29uZmlnMikge1xuICAgIGxvZy50cmFjZShcInNldENvbmZpZyBjYWxsZWQgd2l0aDogXCIsIGNvbmZpZzIpO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4uY29uZmlnMiB9O1xuICB9XG4gIHNldFRoZW1lQ29uZmlnKHRoZW1lQ29uZmlnKSB7XG4gICAgbG9nLnRyYWNlKFwic2V0VGhlbWVDb25maWcgY2FsbGVkIHdpdGg6IFwiLCB0aGVtZUNvbmZpZyk7XG4gICAgdGhpcy50aGVtZUNvbmZpZyA9IHsgLi4udGhpcy50aGVtZUNvbmZpZywgLi4udGhlbWVDb25maWcgfTtcbiAgfVxuICBjYWxjdWxhdGVTcGFjZSh4QXhpc1Bvc2l0aW9uLCBzaG93WEF4aXMsIHNob3dZQXhpcywgc2hvd1RpdGxlKSB7XG4gICAgY29uc3QgeEF4aXNTcGFjZUNhbGN1bGF0aW9uID0gdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKiAyICsgdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplO1xuICAgIGNvbnN0IHhBeGlzU3BhY2UgPSB7XG4gICAgICB0b3A6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgJiYgc2hvd1hBeGlzID8geEF4aXNTcGFjZUNhbGN1bGF0aW9uIDogMCxcbiAgICAgIGJvdHRvbTogeEF4aXNQb3NpdGlvbiA9PT0gXCJib3R0b21cIiAmJiBzaG93WEF4aXMgPyB4QXhpc1NwYWNlQ2FsY3VsYXRpb24gOiAwXG4gICAgfTtcbiAgICBjb25zdCB5QXhpc1NwYWNlQ2FsY3VsYXRpb24gPSB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyAqIDIgKyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemU7XG4gICAgY29uc3QgeUF4aXNTcGFjZSA9IHtcbiAgICAgIGxlZnQ6IHRoaXMuY29uZmlnLnlBeGlzUG9zaXRpb24gPT09IFwibGVmdFwiICYmIHNob3dZQXhpcyA/IHlBeGlzU3BhY2VDYWxjdWxhdGlvbiA6IDAsXG4gICAgICByaWdodDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJyaWdodFwiICYmIHNob3dZQXhpcyA/IHlBeGlzU3BhY2VDYWxjdWxhdGlvbiA6IDBcbiAgICB9O1xuICAgIGNvbnN0IHRpdGxlU3BhY2VDYWxjdWxhdGlvbiA9IHRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUgKyB0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcgKiAyO1xuICAgIGNvbnN0IHRpdGxlU3BhY2UgPSB7XG4gICAgICB0b3A6IHNob3dUaXRsZSA/IHRpdGxlU3BhY2VDYWxjdWxhdGlvbiA6IDBcbiAgICB9O1xuICAgIGNvbnN0IHF1YWRyYW50TGVmdCA9IHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyArIHlBeGlzU3BhY2UubGVmdDtcbiAgICBjb25zdCBxdWFkcmFudFRvcCA9IHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyArIHhBeGlzU3BhY2UudG9wICsgdGl0bGVTcGFjZS50b3A7XG4gICAgY29uc3QgcXVhZHJhbnRXaWR0aCA9IHRoaXMuY29uZmlnLmNoYXJ0V2lkdGggLSB0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcgKiAyIC0geUF4aXNTcGFjZS5sZWZ0IC0geUF4aXNTcGFjZS5yaWdodDtcbiAgICBjb25zdCBxdWFkcmFudEhlaWdodCA9IHRoaXMuY29uZmlnLmNoYXJ0SGVpZ2h0IC0gdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nICogMiAtIHhBeGlzU3BhY2UudG9wIC0geEF4aXNTcGFjZS5ib3R0b20gLSB0aXRsZVNwYWNlLnRvcDtcbiAgICBjb25zdCBxdWFkcmFudEhhbGZXaWR0aCA9IHF1YWRyYW50V2lkdGggLyAyO1xuICAgIGNvbnN0IHF1YWRyYW50SGFsZkhlaWdodCA9IHF1YWRyYW50SGVpZ2h0IC8gMjtcbiAgICBjb25zdCBxdWFkcmFudFNwYWNlID0ge1xuICAgICAgcXVhZHJhbnRMZWZ0LFxuICAgICAgcXVhZHJhbnRUb3AsXG4gICAgICBxdWFkcmFudFdpZHRoLFxuICAgICAgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICBxdWFkcmFudEhlaWdodCxcbiAgICAgIHF1YWRyYW50SGFsZkhlaWdodFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHhBeGlzU3BhY2UsXG4gICAgICB5QXhpc1NwYWNlLFxuICAgICAgdGl0bGVTcGFjZSxcbiAgICAgIHF1YWRyYW50U3BhY2VcbiAgICB9O1xuICB9XG4gIGdldEF4aXNMYWJlbHMoeEF4aXNQb3NpdGlvbiwgc2hvd1hBeGlzLCBzaG93WUF4aXMsIHNwYWNlRGF0YSkge1xuICAgIGNvbnN0IHsgcXVhZHJhbnRTcGFjZSwgdGl0bGVTcGFjZSB9ID0gc3BhY2VEYXRhO1xuICAgIGNvbnN0IHtcbiAgICAgIHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgIHF1YWRyYW50SGVpZ2h0LFxuICAgICAgcXVhZHJhbnRMZWZ0LFxuICAgICAgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICBxdWFkcmFudFRvcCxcbiAgICAgIHF1YWRyYW50V2lkdGhcbiAgICB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCBkcmF3WEF4aXNMYWJlbHNJbk1pZGRsZSA9IEJvb2xlYW4odGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KTtcbiAgICBjb25zdCBkcmF3WUF4aXNMYWJlbHNJbk1pZGRsZSA9IEJvb2xlYW4odGhpcy5kYXRhLnlBeGlzVG9wVGV4dCk7XG4gICAgY29uc3QgYXhpc0xhYmVscyA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCAmJiBzaG93WEF4aXMpIHtcbiAgICAgIGF4aXNMYWJlbHMucHVzaCh7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgKGRyYXdYQXhpc0xhYmVsc0luTWlkZGxlID8gcXVhZHJhbnRIYWxmV2lkdGggLyAyIDogMCksXG4gICAgICAgIHk6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgPyB0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZyArIHRpdGxlU3BhY2UudG9wIDogdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKyBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0ICsgdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd1hBeGlzTGFiZWxzSW5NaWRkbGUgPyBcImNlbnRlclwiIDogXCJsZWZ0XCIsXG4gICAgICAgIGhvcml6b250YWxQb3M6IFwidG9wXCIsXG4gICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCAmJiBzaG93WEF4aXMpIHtcbiAgICAgIGF4aXNMYWJlbHMucHVzaCh7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwsXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50SGFsZldpZHRoICsgKGRyYXdYQXhpc0xhYmVsc0luTWlkZGxlID8gcXVhZHJhbnRIYWxmV2lkdGggLyAyIDogMCksXG4gICAgICAgIHk6IHhBeGlzUG9zaXRpb24gPT09IFwidG9wXCIgPyB0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZyArIHRpdGxlU3BhY2UudG9wIDogdGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcgKyBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0ICsgdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbFBvczogZHJhd1hBeGlzTGFiZWxzSW5NaWRkbGUgPyBcImNlbnRlclwiIDogXCJsZWZ0XCIsXG4gICAgICAgIGhvcml6b250YWxQb3M6IFwidG9wXCIsXG4gICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQgJiYgc2hvd1lBeGlzKSB7XG4gICAgICBheGlzTGFiZWxzLnB1c2goe1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyA6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nICsgcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIChkcmF3WUF4aXNMYWJlbHNJbk1pZGRsZSA/IHF1YWRyYW50SGFsZkhlaWdodCAvIDIgOiAwKSxcbiAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSxcbiAgICAgICAgdmVydGljYWxQb3M6IGRyYXdZQXhpc0xhYmVsc0luTWlkZGxlID8gXCJjZW50ZXJcIiA6IFwibGVmdFwiLFxuICAgICAgICBob3Jpem9udGFsUG9zOiBcInRvcFwiLFxuICAgICAgICByb3RhdGlvbjogLTkwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS55QXhpc1RvcFRleHQgJiYgc2hvd1lBeGlzKSB7XG4gICAgICBheGlzTGFiZWxzLnB1c2goe1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEueUF4aXNUb3BUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxcbiAgICAgICAgeDogdGhpcy5jb25maWcueUF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyB0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZyA6IHRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nICsgcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIHRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHQgLSAoZHJhd1lBeGlzTGFiZWxzSW5NaWRkbGUgPyBxdWFkcmFudEhhbGZIZWlnaHQgLyAyIDogMCksXG4gICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsXG4gICAgICAgIHZlcnRpY2FsUG9zOiBkcmF3WUF4aXNMYWJlbHNJbk1pZGRsZSA/IFwiY2VudGVyXCIgOiBcImxlZnRcIixcbiAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgcm90YXRpb246IC05MFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBheGlzTGFiZWxzO1xuICB9XG4gIGdldFF1YWRyYW50cyhzcGFjZURhdGEpIHtcbiAgICBjb25zdCB7IHF1YWRyYW50U3BhY2UgfSA9IHNwYWNlRGF0YTtcbiAgICBjb25zdCB7IHF1YWRyYW50SGFsZkhlaWdodCwgcXVhZHJhbnRMZWZ0LCBxdWFkcmFudEhhbGZXaWR0aCwgcXVhZHJhbnRUb3AgfSA9IHF1YWRyYW50U3BhY2U7XG4gICAgY29uc3QgcXVhZHJhbnRzID0gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogdGhpcy5kYXRhLnF1YWRyYW50MVRleHQsXG4gICAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDFUZXh0RmlsbCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJjZW50ZXJcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCArIHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICB5OiBxdWFkcmFudFRvcCxcbiAgICAgICAgd2lkdGg6IHF1YWRyYW50SGFsZldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDFGaWxsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogdGhpcy5kYXRhLnF1YWRyYW50MlRleHQsXG4gICAgICAgICAgZmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJjZW50ZXJcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHg6IHF1YWRyYW50TGVmdCxcbiAgICAgICAgeTogcXVhZHJhbnRUb3AsXG4gICAgICAgIHdpZHRoOiBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBxdWFkcmFudEhhbGZIZWlnaHQsXG4gICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDoge1xuICAgICAgICAgIHRleHQ6IHRoaXMuZGF0YS5xdWFkcmFudDNUZXh0LFxuICAgICAgICAgIGZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJtaWRkbGVcIixcbiAgICAgICAgICByb3RhdGlvbjogMFxuICAgICAgICB9LFxuICAgICAgICB4OiBxdWFkcmFudExlZnQsXG4gICAgICAgIHk6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICB3aWR0aDogcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIGhlaWdodDogcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLmRhdGEucXVhZHJhbnQ0VGV4dCxcbiAgICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwibWlkZGxlXCIsXG4gICAgICAgICAgcm90YXRpb246IDBcbiAgICAgICAgfSxcbiAgICAgICAgeDogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIHk6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICB3aWR0aDogcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICAgIGhlaWdodDogcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGxcbiAgICAgIH1cbiAgICBdO1xuICAgIGZvciAoY29uc3QgcXVhZHJhbnQgb2YgcXVhZHJhbnRzKSB7XG4gICAgICBxdWFkcmFudC50ZXh0LnggPSBxdWFkcmFudC54ICsgcXVhZHJhbnQud2lkdGggLyAyO1xuICAgICAgaWYgKHRoaXMuZGF0YS5wb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHF1YWRyYW50LnRleHQueSA9IHF1YWRyYW50LnkgKyBxdWFkcmFudC5oZWlnaHQgLyAyO1xuICAgICAgICBxdWFkcmFudC50ZXh0Lmhvcml6b250YWxQb3MgPSBcIm1pZGRsZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVhZHJhbnQudGV4dC55ID0gcXVhZHJhbnQueSArIHRoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmc7XG4gICAgICAgIHF1YWRyYW50LnRleHQuaG9yaXpvbnRhbFBvcyA9IFwidG9wXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWFkcmFudHM7XG4gIH1cbiAgZ2V0UXVhZHJhbnRQb2ludHMoc3BhY2VEYXRhKSB7XG4gICAgY29uc3QgeyBxdWFkcmFudFNwYWNlIH0gPSBzcGFjZURhdGE7XG4gICAgY29uc3QgeyBxdWFkcmFudEhlaWdodCwgcXVhZHJhbnRMZWZ0LCBxdWFkcmFudFRvcCwgcXVhZHJhbnRXaWR0aCB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCB4QXhpcyA9IHNjYWxlTGluZWFyKCkuZG9tYWluKFswLCAxXSkucmFuZ2UoW3F1YWRyYW50TGVmdCwgcXVhZHJhbnRXaWR0aCArIHF1YWRyYW50TGVmdF0pO1xuICAgIGNvbnN0IHlBeGlzID0gc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIDFdKS5yYW5nZShbcXVhZHJhbnRIZWlnaHQgKyBxdWFkcmFudFRvcCwgcXVhZHJhbnRUb3BdKTtcbiAgICBjb25zdCBwb2ludHMgPSB0aGlzLmRhdGEucG9pbnRzLm1hcCgocG9pbnQpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzU3R5bGVzID0gdGhpcy5jbGFzc2VzLmdldChwb2ludC5jbGFzc05hbWUpO1xuICAgICAgaWYgKGNsYXNzU3R5bGVzKSB7XG4gICAgICAgIHBvaW50ID0geyAuLi5jbGFzc1N0eWxlcywgLi4ucG9pbnQgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICB4OiB4QXhpcyhwb2ludC54KSxcbiAgICAgICAgeTogeUF4aXMocG9pbnQueSksXG4gICAgICAgIGZpbGw6IHBvaW50LmNvbG9yID8/IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwsXG4gICAgICAgIHJhZGl1czogcG9pbnQucmFkaXVzID8/IHRoaXMuY29uZmlnLnBvaW50UmFkaXVzLFxuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgdGV4dDogcG9pbnQudGV4dCxcbiAgICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxcbiAgICAgICAgICB4OiB4QXhpcyhwb2ludC54KSxcbiAgICAgICAgICB5OiB5QXhpcyhwb2ludC55KSArIHRoaXMuY29uZmlnLnBvaW50VGV4dFBhZGRpbmcsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcucG9pbnRMYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHJvdGF0aW9uOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHN0cm9rZUNvbG9yOiBwb2ludC5zdHJva2VDb2xvciA/PyB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogcG9pbnQuc3Ryb2tlV2lkdGggPz8gXCIwcHhcIlxuICAgICAgfTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9KTtcbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG4gIGdldEJvcmRlcnMoc3BhY2VEYXRhKSB7XG4gICAgY29uc3QgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGggPSB0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGggLyAyO1xuICAgIGNvbnN0IHsgcXVhZHJhbnRTcGFjZSB9ID0gc3BhY2VEYXRhO1xuICAgIGNvbnN0IHtcbiAgICAgIHF1YWRyYW50SGFsZkhlaWdodCxcbiAgICAgIHF1YWRyYW50SGVpZ2h0LFxuICAgICAgcXVhZHJhbnRMZWZ0LFxuICAgICAgcXVhZHJhbnRIYWxmV2lkdGgsXG4gICAgICBxdWFkcmFudFRvcCxcbiAgICAgIHF1YWRyYW50V2lkdGhcbiAgICB9ID0gcXVhZHJhbnRTcGFjZTtcbiAgICBjb25zdCBib3JkZXJMaW5lcyA9IFtcbiAgICAgIC8vIHRvcCBib3JkZXJcbiAgICAgIHtcbiAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCxcbiAgICAgICAgeDE6IHF1YWRyYW50TGVmdCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MTogcXVhZHJhbnRUb3AsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkyOiBxdWFkcmFudFRvcFxuICAgICAgfSxcbiAgICAgIC8vIHJpZ2h0IGJvcmRlclxuICAgICAge1xuICAgICAgICBzdHJva2VGaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLFxuICAgICAgICB4MTogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudFdpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoXG4gICAgICB9LFxuICAgICAgLy8gYm90dG9tIGJvcmRlclxuICAgICAge1xuICAgICAgICBzdHJva2VGaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLFxuICAgICAgICB4MTogcXVhZHJhbnRMZWZ0IC0gaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHkxOiBxdWFkcmFudFRvcCArIHF1YWRyYW50SGVpZ2h0LFxuICAgICAgICB4MjogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCArIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodFxuICAgICAgfSxcbiAgICAgIC8vIGxlZnQgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQsXG4gICAgICAgIHkxOiBxdWFkcmFudFRvcCArIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB4MjogcXVhZHJhbnRMZWZ0LFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhlaWdodCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoXG4gICAgICB9LFxuICAgICAgLy8gdmVydGljYWwgaW5uZXIgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgaGFsZkV4dGVybmFsQm9yZGVyV2lkdGgsXG4gICAgICAgIHgyOiBxdWFkcmFudExlZnQgKyBxdWFkcmFudEhhbGZXaWR0aCxcbiAgICAgICAgeTI6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIZWlnaHQgLSBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aFxuICAgICAgfSxcbiAgICAgIC8vIGhvcml6b250YWwgaW5uZXIgYm9yZGVyXG4gICAgICB7XG4gICAgICAgIHN0cm9rZUZpbGw6IHRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgsXG4gICAgICAgIHgxOiBxdWFkcmFudExlZnQgKyBoYWxmRXh0ZXJuYWxCb3JkZXJXaWR0aCxcbiAgICAgICAgeTE6IHF1YWRyYW50VG9wICsgcXVhZHJhbnRIYWxmSGVpZ2h0LFxuICAgICAgICB4MjogcXVhZHJhbnRMZWZ0ICsgcXVhZHJhbnRXaWR0aCAtIGhhbGZFeHRlcm5hbEJvcmRlcldpZHRoLFxuICAgICAgICB5MjogcXVhZHJhbnRUb3AgKyBxdWFkcmFudEhhbGZIZWlnaHRcbiAgICAgIH1cbiAgICBdO1xuICAgIHJldHVybiBib3JkZXJMaW5lcztcbiAgfVxuICBnZXRUaXRsZShzaG93VGl0bGUpIHtcbiAgICBpZiAoc2hvd1RpdGxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiB0aGlzLmRhdGEudGl0bGVUZXh0LFxuICAgICAgICBmaWxsOiB0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50VGl0bGVGaWxsLFxuICAgICAgICBmb250U2l6ZTogdGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxcbiAgICAgICAgaG9yaXpvbnRhbFBvczogXCJ0b3BcIixcbiAgICAgICAgdmVydGljYWxQb3M6IFwiY2VudGVyXCIsXG4gICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICB5OiB0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcsXG4gICAgICAgIHg6IHRoaXMuY29uZmlnLmNoYXJ0V2lkdGggLyAyXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgYnVpbGQoKSB7XG4gICAgY29uc3Qgc2hvd1hBeGlzID0gdGhpcy5jb25maWcuc2hvd1hBeGlzICYmICEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0IHx8IHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCk7XG4gICAgY29uc3Qgc2hvd1lBeGlzID0gdGhpcy5jb25maWcuc2hvd1lBeGlzICYmICEhKHRoaXMuZGF0YS55QXhpc1RvcFRleHQgfHwgdGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCk7XG4gICAgY29uc3Qgc2hvd1RpdGxlID0gdGhpcy5jb25maWcuc2hvd1RpdGxlICYmICEhdGhpcy5kYXRhLnRpdGxlVGV4dDtcbiAgICBjb25zdCB4QXhpc1Bvc2l0aW9uID0gdGhpcy5kYXRhLnBvaW50cy5sZW5ndGggPiAwID8gXCJib3R0b21cIiA6IHRoaXMuY29uZmlnLnhBeGlzUG9zaXRpb247XG4gICAgY29uc3QgY2FsY3VsYXRlZFNwYWNlID0gdGhpcy5jYWxjdWxhdGVTcGFjZSh4QXhpc1Bvc2l0aW9uLCBzaG93WEF4aXMsIHNob3dZQXhpcywgc2hvd1RpdGxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnRzOiB0aGlzLmdldFF1YWRyYW50UG9pbnRzKGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICBxdWFkcmFudHM6IHRoaXMuZ2V0UXVhZHJhbnRzKGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICBheGlzTGFiZWxzOiB0aGlzLmdldEF4aXNMYWJlbHMoeEF4aXNQb3NpdGlvbiwgc2hvd1hBeGlzLCBzaG93WUF4aXMsIGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICBib3JkZXJMaW5lczogdGhpcy5nZXRCb3JkZXJzKGNhbGN1bGF0ZWRTcGFjZSksXG4gICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShzaG93VGl0bGUpXG4gICAgfTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3F1YWRyYW50LWNoYXJ0L3V0aWxzLnRzXG52YXIgSW52YWxpZFN0eWxlRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJJbnZhbGlkU3R5bGVFcnJvclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihzdHlsZSwgdmFsdWUsIHR5cGUpIHtcbiAgICBzdXBlcihgdmFsdWUgZm9yICR7c3R5bGV9ICR7dmFsdWV9IGlzIGludmFsaWQsIHBsZWFzZSB1c2UgYSB2YWxpZCAke3R5cGV9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkU3R5bGVFcnJvclwiO1xuICB9XG59O1xuZnVuY3Rpb24gdmFsaWRhdGVIZXhDb2RlKHZhbHVlKSB7XG4gIHJldHVybiAhL14jPyhbXFxkQS1GYS1mXXs2fXxbXFxkQS1GYS1mXXszfSkkLy50ZXN0KHZhbHVlKTtcbn1cbl9fbmFtZSh2YWxpZGF0ZUhleENvZGUsIFwidmFsaWRhdGVIZXhDb2RlXCIpO1xuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuICEvXlxcZCskLy50ZXN0KHZhbHVlKTtcbn1cbl9fbmFtZSh2YWxpZGF0ZU51bWJlciwgXCJ2YWxpZGF0ZU51bWJlclwiKTtcbmZ1bmN0aW9uIHZhbGlkYXRlU2l6ZUluUGl4ZWxzKHZhbHVlKSB7XG4gIHJldHVybiAhL15cXGQrcHgkLy50ZXN0KHZhbHVlKTtcbn1cbl9fbmFtZSh2YWxpZGF0ZVNpemVJblBpeGVscywgXCJ2YWxpZGF0ZVNpemVJblBpeGVsc1wiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3F1YWRyYW50LWNoYXJ0L3F1YWRyYW50RGIudHNcbnZhciBjb25maWcgPSBnZXRDb25maWcoKTtcbmZ1bmN0aW9uIHRleHRTYW5pdGl6ZXIodGV4dCkge1xuICByZXR1cm4gc2FuaXRpemVUZXh0KHRleHQudHJpbSgpLCBjb25maWcpO1xufVxuX19uYW1lKHRleHRTYW5pdGl6ZXIsIFwidGV4dFNhbml0aXplclwiKTtcbnZhciBxdWFkcmFudEJ1aWxkZXIgPSBuZXcgUXVhZHJhbnRCdWlsZGVyKCk7XG5mdW5jdGlvbiBzZXRRdWFkcmFudDFUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyBxdWFkcmFudDFUZXh0OiB0ZXh0U2FuaXRpemVyKHRleHRPYmoudGV4dCkgfSk7XG59XG5fX25hbWUoc2V0UXVhZHJhbnQxVGV4dCwgXCJzZXRRdWFkcmFudDFUZXh0XCIpO1xuZnVuY3Rpb24gc2V0UXVhZHJhbnQyVGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgcXVhZHJhbnQyVGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuX19uYW1lKHNldFF1YWRyYW50MlRleHQsIFwic2V0UXVhZHJhbnQyVGV4dFwiKTtcbmZ1bmN0aW9uIHNldFF1YWRyYW50M1RleHQodGV4dE9iaikge1xuICBxdWFkcmFudEJ1aWxkZXIuc2V0RGF0YSh7IHF1YWRyYW50M1RleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbl9fbmFtZShzZXRRdWFkcmFudDNUZXh0LCBcInNldFF1YWRyYW50M1RleHRcIik7XG5mdW5jdGlvbiBzZXRRdWFkcmFudDRUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyBxdWFkcmFudDRUZXh0OiB0ZXh0U2FuaXRpemVyKHRleHRPYmoudGV4dCkgfSk7XG59XG5fX25hbWUoc2V0UXVhZHJhbnQ0VGV4dCwgXCJzZXRRdWFkcmFudDRUZXh0XCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNMZWZ0VGV4dCh0ZXh0T2JqKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgeEF4aXNMZWZ0VGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuX19uYW1lKHNldFhBeGlzTGVmdFRleHQsIFwic2V0WEF4aXNMZWZ0VGV4dFwiKTtcbmZ1bmN0aW9uIHNldFhBeGlzUmlnaHRUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB4QXhpc1JpZ2h0VGV4dDogdGV4dFNhbml0aXplcih0ZXh0T2JqLnRleHQpIH0pO1xufVxuX19uYW1lKHNldFhBeGlzUmlnaHRUZXh0LCBcInNldFhBeGlzUmlnaHRUZXh0XCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNUb3BUZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB5QXhpc1RvcFRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbl9fbmFtZShzZXRZQXhpc1RvcFRleHQsIFwic2V0WUF4aXNUb3BUZXh0XCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNCb3R0b21UZXh0KHRleHRPYmopIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldERhdGEoeyB5QXhpc0JvdHRvbVRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSB9KTtcbn1cbl9fbmFtZShzZXRZQXhpc0JvdHRvbVRleHQsIFwic2V0WUF4aXNCb3R0b21UZXh0XCIpO1xuZnVuY3Rpb24gcGFyc2VTdHlsZXMoc3R5bGVzKSB7XG4gIGNvbnN0IHN0eWxlc09iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0eWxlIG9mIHN0eWxlcykge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHN0eWxlLnRyaW0oKS5zcGxpdCgvXFxzKjpcXHMqLyk7XG4gICAgaWYgKGtleSA9PT0gXCJyYWRpdXNcIikge1xuICAgICAgaWYgKHZhbGlkYXRlTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFN0eWxlRXJyb3Ioa2V5LCB2YWx1ZSwgXCJudW1iZXJcIik7XG4gICAgICB9XG4gICAgICBzdHlsZXNPYmplY3QucmFkaXVzID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImNvbG9yXCIpIHtcbiAgICAgIGlmICh2YWxpZGF0ZUhleENvZGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkU3R5bGVFcnJvcihrZXksIHZhbHVlLCBcImhleCBjb2RlXCIpO1xuICAgICAgfVxuICAgICAgc3R5bGVzT2JqZWN0LmNvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3Ryb2tlLWNvbG9yXCIpIHtcbiAgICAgIGlmICh2YWxpZGF0ZUhleENvZGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkU3R5bGVFcnJvcihrZXksIHZhbHVlLCBcImhleCBjb2RlXCIpO1xuICAgICAgfVxuICAgICAgc3R5bGVzT2JqZWN0LnN0cm9rZUNvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwic3Ryb2tlLXdpZHRoXCIpIHtcbiAgICAgIGlmICh2YWxpZGF0ZVNpemVJblBpeGVscyh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRTdHlsZUVycm9yKGtleSwgdmFsdWUsIFwibnVtYmVyIG9mIHBpeGVscyAoZWcuIDEwcHgpXCIpO1xuICAgICAgfVxuICAgICAgc3R5bGVzT2JqZWN0LnN0cm9rZVdpZHRoID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc3R5bGUgbmFtZWQgJHtrZXl9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZXNPYmplY3Q7XG59XG5fX25hbWUocGFyc2VTdHlsZXMsIFwicGFyc2VTdHlsZXNcIik7XG5mdW5jdGlvbiBhZGRQb2ludCh0ZXh0T2JqLCBjbGFzc05hbWUsIHgsIHksIHN0eWxlcykge1xuICBjb25zdCBzdHlsZXNPYmplY3QgPSBwYXJzZVN0eWxlcyhzdHlsZXMpO1xuICBxdWFkcmFudEJ1aWxkZXIuYWRkUG9pbnRzKFtcbiAgICB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHRleHQ6IHRleHRTYW5pdGl6ZXIodGV4dE9iai50ZXh0KSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIC4uLnN0eWxlc09iamVjdFxuICAgIH1cbiAgXSk7XG59XG5fX25hbWUoYWRkUG9pbnQsIFwiYWRkUG9pbnRcIik7XG5mdW5jdGlvbiBhZGRDbGFzcyhjbGFzc05hbWUsIHN0eWxlcykge1xuICBxdWFkcmFudEJ1aWxkZXIuYWRkQ2xhc3MoY2xhc3NOYW1lLCBwYXJzZVN0eWxlcyhzdHlsZXMpKTtcbn1cbl9fbmFtZShhZGRDbGFzcywgXCJhZGRDbGFzc1wiKTtcbmZ1bmN0aW9uIHNldFdpZHRoKHdpZHRoKSB7XG4gIHF1YWRyYW50QnVpbGRlci5zZXRDb25maWcoeyBjaGFydFdpZHRoOiB3aWR0aCB9KTtcbn1cbl9fbmFtZShzZXRXaWR0aCwgXCJzZXRXaWR0aFwiKTtcbmZ1bmN0aW9uIHNldEhlaWdodChoZWlnaHQpIHtcbiAgcXVhZHJhbnRCdWlsZGVyLnNldENvbmZpZyh7IGNoYXJ0SGVpZ2h0OiBoZWlnaHQgfSk7XG59XG5fX25hbWUoc2V0SGVpZ2h0LCBcInNldEhlaWdodFwiKTtcbmZ1bmN0aW9uIGdldFF1YWRyYW50RGF0YSgpIHtcbiAgY29uc3QgY29uZmlnMiA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IHRoZW1lVmFyaWFibGVzLCBxdWFkcmFudENoYXJ0OiBxdWFkcmFudENoYXJ0Q29uZmlnIH0gPSBjb25maWcyO1xuICBpZiAocXVhZHJhbnRDaGFydENvbmZpZykge1xuICAgIHF1YWRyYW50QnVpbGRlci5zZXRDb25maWcocXVhZHJhbnRDaGFydENvbmZpZyk7XG4gIH1cbiAgcXVhZHJhbnRCdWlsZGVyLnNldFRoZW1lQ29uZmlnKHtcbiAgICBxdWFkcmFudDFGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDFGaWxsLFxuICAgIHF1YWRyYW50MkZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50MkZpbGwsXG4gICAgcXVhZHJhbnQzRmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnQzRmlsbCxcbiAgICBxdWFkcmFudDRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDRGaWxsLFxuICAgIHF1YWRyYW50MVRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDFUZXh0RmlsbCxcbiAgICBxdWFkcmFudDJUZXh0RmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnQyVGV4dEZpbGwsXG4gICAgcXVhZHJhbnQzVGV4dEZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50M1RleHRGaWxsLFxuICAgIHF1YWRyYW50NFRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudDRUZXh0RmlsbCxcbiAgICBxdWFkcmFudFBvaW50RmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnRQb2ludEZpbGwsXG4gICAgcXVhZHJhbnRQb2ludFRleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFBvaW50VGV4dEZpbGwsXG4gICAgcXVhZHJhbnRYQXhpc1RleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFhBeGlzVGV4dEZpbGwsXG4gICAgcXVhZHJhbnRZQXhpc1RleHRGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudFlBeGlzVGV4dEZpbGwsXG4gICAgcXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6IHRoZW1lVmFyaWFibGVzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLFxuICAgIHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOiB0aGVtZVZhcmlhYmxlcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxcbiAgICBxdWFkcmFudFRpdGxlRmlsbDogdGhlbWVWYXJpYWJsZXMucXVhZHJhbnRUaXRsZUZpbGxcbiAgfSk7XG4gIHF1YWRyYW50QnVpbGRlci5zZXREYXRhKHsgdGl0bGVUZXh0OiBnZXREaWFncmFtVGl0bGUoKSB9KTtcbiAgcmV0dXJuIHF1YWRyYW50QnVpbGRlci5idWlsZCgpO1xufVxuX19uYW1lKGdldFF1YWRyYW50RGF0YSwgXCJnZXRRdWFkcmFudERhdGFcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcXVhZHJhbnRCdWlsZGVyLmNsZWFyKCk7XG4gIGNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIHF1YWRyYW50RGJfZGVmYXVsdCA9IHtcbiAgc2V0V2lkdGgsXG4gIHNldEhlaWdodCxcbiAgc2V0UXVhZHJhbnQxVGV4dCxcbiAgc2V0UXVhZHJhbnQyVGV4dCxcbiAgc2V0UXVhZHJhbnQzVGV4dCxcbiAgc2V0UXVhZHJhbnQ0VGV4dCxcbiAgc2V0WEF4aXNMZWZ0VGV4dCxcbiAgc2V0WEF4aXNSaWdodFRleHQsXG4gIHNldFlBeGlzVG9wVGV4dCxcbiAgc2V0WUF4aXNCb3R0b21UZXh0LFxuICBwYXJzZVN0eWxlcyxcbiAgYWRkUG9pbnQsXG4gIGFkZENsYXNzLFxuICBnZXRRdWFkcmFudERhdGEsXG4gIGNsZWFyOiBjbGVhcjIsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NEZXNjcmlwdGlvblxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3F1YWRyYW50LWNoYXJ0L3F1YWRyYW50UmVuZGVyZXIudHNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikgPT4ge1xuICBmdW5jdGlvbiBnZXREb21pbmFudEJhc2VMaW5lKGhvcml6b250YWxQb3MpIHtcbiAgICByZXR1cm4gaG9yaXpvbnRhbFBvcyA9PT0gXCJ0b3BcIiA/IFwiaGFuZ2luZ1wiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBfX25hbWUoZ2V0RG9taW5hbnRCYXNlTGluZSwgXCJnZXREb21pbmFudEJhc2VMaW5lXCIpO1xuICBmdW5jdGlvbiBnZXRUZXh0QW5jaG9yKHZlcnRpY2FsUG9zKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsUG9zID09PSBcImxlZnRcIiA/IFwic3RhcnRcIiA6IFwibWlkZGxlXCI7XG4gIH1cbiAgX19uYW1lKGdldFRleHRBbmNob3IsIFwiZ2V0VGV4dEFuY2hvclwiKTtcbiAgZnVuY3Rpb24gZ2V0VHJhbnNmb3JtYXRpb24oZGF0YSkge1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZGF0YS54fSwgJHtkYXRhLnl9KSByb3RhdGUoJHtkYXRhLnJvdGF0aW9uIHx8IDB9KWA7XG4gIH1cbiAgX19uYW1lKGdldFRyYW5zZm9ybWF0aW9uLCBcImdldFRyYW5zZm9ybWF0aW9uXCIpO1xuICBjb25zdCBjb25mID0gZ2V0Q29uZmlnKCk7XG4gIGxvZy5kZWJ1ZyhcIlJlbmRlcmluZyBxdWFkcmFudCBjaGFydFxcblwiICsgdHh0KTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGNvbmYuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGdyb3VwID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWFpblwiKTtcbiAgY29uc3Qgd2lkdGggPSBjb25mLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGggPz8gNTAwO1xuICBjb25zdCBoZWlnaHQgPSBjb25mLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0ID8/IDUwMDtcbiAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgd2lkdGgsIGNvbmYucXVhZHJhbnRDaGFydD8udXNlTWF4V2lkdGggPz8gdHJ1ZSk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBcIjAgMCBcIiArIHdpZHRoICsgXCIgXCIgKyBoZWlnaHQpO1xuICBkaWFnT2JqLmRiLnNldEhlaWdodChoZWlnaHQpO1xuICBkaWFnT2JqLmRiLnNldFdpZHRoKHdpZHRoKTtcbiAgY29uc3QgcXVhZHJhbnREYXRhID0gZGlhZ09iai5kYi5nZXRRdWFkcmFudERhdGEoKTtcbiAgY29uc3QgcXVhZHJhbnRzR3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInF1YWRyYW50c1wiKTtcbiAgY29uc3QgYm9yZGVyR3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImJvcmRlclwiKTtcbiAgY29uc3QgZGF0YVBvaW50R3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImRhdGEtcG9pbnRzXCIpO1xuICBjb25zdCBsYWJlbEdyb3VwID0gZ3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJsYWJlbHNcIik7XG4gIGNvbnN0IHRpdGxlR3JvdXAgPSBncm91cC5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlXCIpO1xuICBpZiAocXVhZHJhbnREYXRhLnRpdGxlKSB7XG4gICAgdGl0bGVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJmaWxsXCIsIHF1YWRyYW50RGF0YS50aXRsZS5maWxsKS5hdHRyKFwiZm9udC1zaXplXCIsIHF1YWRyYW50RGF0YS50aXRsZS5mb250U2l6ZSkuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIGdldERvbWluYW50QmFzZUxpbmUocXVhZHJhbnREYXRhLnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgZ2V0VGV4dEFuY2hvcihxdWFkcmFudERhdGEudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKFwidHJhbnNmb3JtXCIsIGdldFRyYW5zZm9ybWF0aW9uKHF1YWRyYW50RGF0YS50aXRsZSkpLnRleHQocXVhZHJhbnREYXRhLnRpdGxlLnRleHQpO1xuICB9XG4gIGlmIChxdWFkcmFudERhdGEuYm9yZGVyTGluZXMpIHtcbiAgICBib3JkZXJHcm91cC5zZWxlY3RBbGwoXCJsaW5lXCIpLmRhdGEocXVhZHJhbnREYXRhLmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIChkYXRhKSA9PiBkYXRhLngxKS5hdHRyKFwieTFcIiwgKGRhdGEpID0+IGRhdGEueTEpLmF0dHIoXCJ4MlwiLCAoZGF0YSkgPT4gZGF0YS54MikuYXR0cihcInkyXCIsIChkYXRhKSA9PiBkYXRhLnkyKS5zdHlsZShcInN0cm9rZVwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VGaWxsKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VXaWR0aCk7XG4gIH1cbiAgY29uc3QgcXVhZHJhbnRzID0gcXVhZHJhbnRzR3JvdXAuc2VsZWN0QWxsKFwiZy5xdWFkcmFudFwiKS5kYXRhKHF1YWRyYW50RGF0YS5xdWFkcmFudHMpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJxdWFkcmFudFwiKTtcbiAgcXVhZHJhbnRzLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgKGRhdGEpID0+IGRhdGEueCkuYXR0cihcInlcIiwgKGRhdGEpID0+IGRhdGEueSkuYXR0cihcIndpZHRoXCIsIChkYXRhKSA9PiBkYXRhLndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIChkYXRhKSA9PiBkYXRhLmhlaWdodCkuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEuZmlsbCk7XG4gIHF1YWRyYW50cy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLnRleHQuZmlsbCkuYXR0cihcImZvbnQtc2l6ZVwiLCAoZGF0YSkgPT4gZGF0YS50ZXh0LmZvbnRTaXplKS5hdHRyKFxuICAgIFwiZG9taW5hbnQtYmFzZWxpbmVcIixcbiAgICAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLnRleHQuaG9yaXpvbnRhbFBvcylcbiAgKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGRhdGEpID0+IGdldFRleHRBbmNob3IoZGF0YS50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cihcInRyYW5zZm9ybVwiLCAoZGF0YSkgPT4gZ2V0VHJhbnNmb3JtYXRpb24oZGF0YS50ZXh0KSkudGV4dCgoZGF0YSkgPT4gZGF0YS50ZXh0LnRleHQpO1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbEdyb3VwLnNlbGVjdEFsbChcImcubGFiZWxcIikuZGF0YShxdWFkcmFudERhdGEuYXhpc0xhYmVscykuZW50ZXIoKS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsYWJlbHMuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS50ZXh0KChkYXRhKSA9PiBkYXRhLnRleHQpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpLmF0dHIoXCJmb250LXNpemVcIiwgKGRhdGEpID0+IGRhdGEuZm9udFNpemUpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLmhvcml6b250YWxQb3MpKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGRhdGEpID0+IGdldFRleHRBbmNob3IoZGF0YS52ZXJ0aWNhbFBvcykpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGRhdGEpID0+IGdldFRyYW5zZm9ybWF0aW9uKGRhdGEpKTtcbiAgY29uc3QgZGF0YVBvaW50cyA9IGRhdGFQb2ludEdyb3VwLnNlbGVjdEFsbChcImcuZGF0YS1wb2ludFwiKS5kYXRhKHF1YWRyYW50RGF0YS5wb2ludHMpLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJkYXRhLXBvaW50XCIpO1xuICBkYXRhUG9pbnRzLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgKGRhdGEpID0+IGRhdGEueCkuYXR0cihcImN5XCIsIChkYXRhKSA9PiBkYXRhLnkpLmF0dHIoXCJyXCIsIChkYXRhKSA9PiBkYXRhLnJhZGl1cykuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEuZmlsbCkuYXR0cihcInN0cm9rZVwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VDb2xvcikuYXR0cihcInN0cm9rZS13aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VXaWR0aCk7XG4gIGRhdGFQb2ludHMuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKS50ZXh0KChkYXRhKSA9PiBkYXRhLnRleHQudGV4dCkuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEudGV4dC5maWxsKS5hdHRyKFwiZm9udC1zaXplXCIsIChkYXRhKSA9PiBkYXRhLnRleHQuZm9udFNpemUpLmF0dHIoXG4gICAgXCJkb21pbmFudC1iYXNlbGluZVwiLFxuICAgIChkYXRhKSA9PiBnZXREb21pbmFudEJhc2VMaW5lKGRhdGEudGV4dC5ob3Jpem9udGFsUG9zKVxuICApLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCAoZGF0YSkgPT4gZ2V0VGV4dEFuY2hvcihkYXRhLnRleHQudmVydGljYWxQb3MpKS5hdHRyKFwidHJhbnNmb3JtXCIsIChkYXRhKSA9PiBnZXRUcmFuc2Zvcm1hdGlvbihkYXRhLnRleHQpKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBxdWFkcmFudFJlbmRlcmVyX2RlZmF1bHQgPSB7XG4gIGRyYXdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9xdWFkcmFudC1jaGFydC9xdWFkcmFudERpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHF1YWRyYW50X2RlZmF1bHQsXG4gIGRiOiBxdWFkcmFudERiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBxdWFkcmFudFJlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlwiLCBcInN0eWxlc1wiKVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIGNvbXB1dGVEaW1lbnNpb25PZlRleHRcbn0gZnJvbSBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhbkFuZE1lcmdlXG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVuay1GMlhGTjNCWS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgZ2V0VGhlbWVWYXJpYWJsZXMsXG4gIGxvZyxcbiAgc2FuaXRpemVUZXh0LFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvcGFyc2VyL3h5Y2hhcnQuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCAxMCwgMTIsIDE0LCAxNiwgMTgsIDE5LCAyMSwgMjNdLCAkVjEgPSBbMiwgNl0sICRWMiA9IFsxLCAzXSwgJFYzID0gWzEsIDVdLCAkVjQgPSBbMSwgNl0sICRWNSA9IFsxLCA3XSwgJFY2ID0gWzEsIDUsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMTksIDIxLCAyMywgMzQsIDM1LCAzNl0sICRWNyA9IFsxLCAyNV0sICRWOCA9IFsxLCAyNl0sICRWOSA9IFsxLCAyOF0sICRWYSA9IFsxLCAyOV0sICRWYiA9IFsxLCAzMF0sICRWYyA9IFsxLCAzMV0sICRWZCA9IFsxLCAzMl0sICRWZSA9IFsxLCAzM10sICRWZiA9IFsxLCAzNF0sICRWZyA9IFsxLCAzNV0sICRWaCA9IFsxLCAzNl0sICRWaSA9IFsxLCAzN10sICRWaiA9IFsxLCA0M10sICRWayA9IFsxLCA0Ml0sICRWbCA9IFsxLCA0N10sICRWbSA9IFsxLCA1MF0sICRWbiA9IFsxLCAxMCwgMTIsIDE0LCAxNiwgMTgsIDE5LCAyMSwgMjMsIDM0LCAzNSwgMzZdLCAkVm8gPSBbMSwgMTAsIDEyLCAxNCwgMTYsIDE4LCAxOSwgMjEsIDIzLCAyNCwgMjYsIDI3LCAyOCwgMzQsIDM1LCAzNl0sICRWcCA9IFsxLCAxMCwgMTIsIDE0LCAxNiwgMTgsIDE5LCAyMSwgMjMsIDI0LCAyNiwgMjcsIDI4LCAzNCwgMzUsIDM2LCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MF0sICRWcSA9IFsxLCA2NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImVvbFwiOiA0LCBcIlhZQ0hBUlRcIjogNSwgXCJjaGFydENvbmZpZ1wiOiA2LCBcImRvY3VtZW50XCI6IDcsIFwiQ0hBUlRfT1JJRU5UQVRJT05cIjogOCwgXCJzdGF0ZW1lbnRcIjogOSwgXCJ0aXRsZVwiOiAxMCwgXCJ0ZXh0XCI6IDExLCBcIlhfQVhJU1wiOiAxMiwgXCJwYXJzZVhBeGlzXCI6IDEzLCBcIllfQVhJU1wiOiAxNCwgXCJwYXJzZVlBeGlzXCI6IDE1LCBcIkxJTkVcIjogMTYsIFwicGxvdERhdGFcIjogMTcsIFwiQkFSXCI6IDE4LCBcImFjY190aXRsZVwiOiAxOSwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMjAsIFwiYWNjX2Rlc2NyXCI6IDIxLCBcImFjY19kZXNjcl92YWx1ZVwiOiAyMiwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDIzLCBcIlNRVUFSRV9CUkFDRVNfU1RBUlRcIjogMjQsIFwiY29tbWFTZXBhcmF0ZWROdW1iZXJzXCI6IDI1LCBcIlNRVUFSRV9CUkFDRVNfRU5EXCI6IDI2LCBcIk5VTUJFUl9XSVRIX0RFQ0lNQUxcIjogMjcsIFwiQ09NTUFcIjogMjgsIFwieEF4aXNEYXRhXCI6IDI5LCBcImJhbmREYXRhXCI6IDMwLCBcIkFSUk9XX0RFTElNSVRFUlwiOiAzMSwgXCJjb21tYVNlcGFyYXRlZFRleHRzXCI6IDMyLCBcInlBeGlzRGF0YVwiOiAzMywgXCJORVdMSU5FXCI6IDM0LCBcIlNFTUlcIjogMzUsIFwiRU9GXCI6IDM2LCBcImFscGhhTnVtXCI6IDM3LCBcIlNUUlwiOiAzOCwgXCJNRF9TVFJcIjogMzksIFwiYWxwaGFOdW1Ub2tlblwiOiA0MCwgXCJBTVBcIjogNDEsIFwiTlVNXCI6IDQyLCBcIkFMUEhBXCI6IDQzLCBcIlBMVVNcIjogNDQsIFwiRVFVQUxTXCI6IDQ1LCBcIk1VTFRcIjogNDYsIFwiRE9UXCI6IDQ3LCBcIkJSS1RcIjogNDgsIFwiTUlOVVNcIjogNDksIFwiVU5ERVJTQ09SRVwiOiA1MCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDU6IFwiWFlDSEFSVFwiLCA4OiBcIkNIQVJUX09SSUVOVEFUSU9OXCIsIDEwOiBcInRpdGxlXCIsIDEyOiBcIlhfQVhJU1wiLCAxNDogXCJZX0FYSVNcIiwgMTY6IFwiTElORVwiLCAxODogXCJCQVJcIiwgMTk6IFwiYWNjX3RpdGxlXCIsIDIwOiBcImFjY190aXRsZV92YWx1ZVwiLCAyMTogXCJhY2NfZGVzY3JcIiwgMjI6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDIzOiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMjQ6IFwiU1FVQVJFX0JSQUNFU19TVEFSVFwiLCAyNjogXCJTUVVBUkVfQlJBQ0VTX0VORFwiLCAyNzogXCJOVU1CRVJfV0lUSF9ERUNJTUFMXCIsIDI4OiBcIkNPTU1BXCIsIDMxOiBcIkFSUk9XX0RFTElNSVRFUlwiLCAzNDogXCJORVdMSU5FXCIsIDM1OiBcIlNFTUlcIiwgMzY6IFwiRU9GXCIsIDM4OiBcIlNUUlwiLCAzOTogXCJNRF9TVFJcIiwgNDE6IFwiQU1QXCIsIDQyOiBcIk5VTVwiLCA0MzogXCJBTFBIQVwiLCA0NDogXCJQTFVTXCIsIDQ1OiBcIkVRVUFMU1wiLCA0NjogXCJNVUxUXCIsIDQ3OiBcIkRPVFwiLCA0ODogXCJCUktUXCIsIDQ5OiBcIk1JTlVTXCIsIDUwOiBcIlVOREVSU0NPUkVcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDNdLCBbMywgMl0sIFszLCAxXSwgWzYsIDFdLCBbNywgMF0sIFs3LCAyXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAzXSwgWzksIDJdLCBbOSwgM10sIFs5LCAyXSwgWzksIDJdLCBbOSwgMV0sIFsxNywgM10sIFsyNSwgM10sIFsyNSwgMV0sIFsxMywgMV0sIFsxMywgMl0sIFsxMywgMV0sIFsyOSwgMV0sIFsyOSwgM10sIFszMCwgM10sIFszMiwgM10sIFszMiwgMV0sIFsxNSwgMV0sIFsxNSwgMl0sIFsxNSwgMV0sIFszMywgM10sIFs0LCAxXSwgWzQsIDFdLCBbNCwgMV0sIFsxMSwgMV0sIFsxMSwgMV0sIFsxMSwgMV0sIFszNywgMV0sIFszNywgMl0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV0sIFs0MCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgeXkuc2V0T3JpZW50YXRpb24oJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHl5LnNldERpYWdyYW1UaXRsZSgkJFskMF0udGV4dC50cmltKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHl5LnNldExpbmVEYXRhKHsgdGV4dDogXCJcIiwgdHlwZTogXCJ0ZXh0XCIgfSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB5eS5zZXRMaW5lRGF0YSgkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHl5LnNldEJhckRhdGEoeyB0ZXh0OiBcIlwiLCB0eXBlOiBcInRleHRcIiB9LCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHl5LnNldEJhckRhdGEoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgdGhpcy4kID0gW051bWJlcigkJFskMCAtIDJdKSwgLi4uJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSBbTnVtYmVyKCQkWyQwXSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHl5LnNldFhBeGlzVGl0bGUoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB5eS5zZXRYQXhpc1RpdGxlKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHl5LnNldFhBeGlzVGl0bGUoeyB0eXBlOiBcInRleHRcIiwgdGV4dDogXCJcIiB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICB5eS5zZXRYQXhpc0JhbmQoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB5eS5zZXRYQXhpc1JhbmdlRGF0YShOdW1iZXIoJCRbJDAgLSAyXSksIE51bWJlcigkJFskMF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDJdLCAuLi4kJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMF1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIHl5LnNldFlBeGlzVGl0bGUoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB5eS5zZXRZQXhpc1RpdGxlKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHl5LnNldFlBeGlzVGl0bGUoeyB0eXBlOiBcInRleHRcIiwgdGV4dDogXCJcIiB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoJCRbJDAgLSAyXSksIE51bWJlcigkJFskMF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJ0ZXh0XCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHRleHQ6ICQkWyQwXSwgdHlwZTogXCJtYXJrZG93blwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyBcIlwiICsgJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgIHRhYmxlOiBbbygkVjAsICRWMSwgeyAzOiAxLCA0OiAyLCA3OiA0LCA1OiAkVjIsIDM0OiAkVjMsIDM1OiAkVjQsIDM2OiAkVjUgfSksIHsgMTogWzNdIH0sIG8oJFYwLCAkVjEsIHsgNDogMiwgNzogNCwgMzogOCwgNTogJFYyLCAzNDogJFYzLCAzNTogJFY0LCAzNjogJFY1IH0pLCBvKCRWMCwgJFYxLCB7IDQ6IDIsIDc6IDQsIDY6IDksIDM6IDEwLCA1OiAkVjIsIDg6IFsxLCAxMV0sIDM0OiAkVjMsIDM1OiAkVjQsIDM2OiAkVjUgfSksIHsgMTogWzIsIDRdLCA5OiAxMiwgMTA6IFsxLCAxM10sIDEyOiBbMSwgMTRdLCAxNDogWzEsIDE1XSwgMTY6IFsxLCAxNl0sIDE4OiBbMSwgMTddLCAxOTogWzEsIDE4XSwgMjE6IFsxLCAxOV0sIDIzOiBbMSwgMjBdIH0sIG8oJFY2LCBbMiwgMzRdKSwgbygkVjYsIFsyLCAzNV0pLCBvKCRWNiwgWzIsIDM2XSksIHsgMTogWzIsIDFdIH0sIG8oJFYwLCAkVjEsIHsgNDogMiwgNzogNCwgMzogMjEsIDU6ICRWMiwgMzQ6ICRWMywgMzU6ICRWNCwgMzY6ICRWNSB9KSwgeyAxOiBbMiwgM10gfSwgbygkVjYsIFsyLCA1XSksIG8oJFYwLCBbMiwgN10sIHsgNDogMjIsIDM0OiAkVjMsIDM1OiAkVjQsIDM2OiAkVjUgfSksIHsgMTE6IDIzLCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDExOiAzOSwgMTM6IDM4LCAyNDogJFZqLCAyNzogJFZrLCAyOTogNDAsIDMwOiA0MSwgMzc6IDI0LCAzODogJFY3LCAzOTogJFY4LCA0MDogMjcsIDQxOiAkVjksIDQyOiAkVmEsIDQzOiAkVmIsIDQ0OiAkVmMsIDQ1OiAkVmQsIDQ2OiAkVmUsIDQ3OiAkVmYsIDQ4OiAkVmcsIDQ5OiAkVmgsIDUwOiAkVmkgfSwgeyAxMTogNDUsIDE1OiA0NCwgMjc6ICRWbCwgMzM6IDQ2LCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDExOiA0OSwgMTc6IDQ4LCAyNDogJFZtLCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDExOiA1MiwgMTc6IDUxLCAyNDogJFZtLCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCB7IDIwOiBbMSwgNTNdIH0sIHsgMjI6IFsxLCA1NF0gfSwgbygkVm4sIFsyLCAxOF0pLCB7IDE6IFsyLCAyXSB9LCBvKCRWbiwgWzIsIDhdKSwgbygkVm4sIFsyLCA5XSksIG8oJFZvLCBbMiwgMzddLCB7IDQwOiA1NSwgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9KSwgbygkVm8sIFsyLCAzOF0pLCBvKCRWbywgWzIsIDM5XSksIG8oJFZwLCBbMiwgNDBdKSwgbygkVnAsIFsyLCA0Ml0pLCBvKCRWcCwgWzIsIDQzXSksIG8oJFZwLCBbMiwgNDRdKSwgbygkVnAsIFsyLCA0NV0pLCBvKCRWcCwgWzIsIDQ2XSksIG8oJFZwLCBbMiwgNDddKSwgbygkVnAsIFsyLCA0OF0pLCBvKCRWcCwgWzIsIDQ5XSksIG8oJFZwLCBbMiwgNTBdKSwgbygkVnAsIFsyLCA1MV0pLCBvKCRWbiwgWzIsIDEwXSksIG8oJFZuLCBbMiwgMjJdLCB7IDMwOiA0MSwgMjk6IDU2LCAyNDogJFZqLCAyNzogJFZrIH0pLCBvKCRWbiwgWzIsIDI0XSksIG8oJFZuLCBbMiwgMjVdKSwgeyAzMTogWzEsIDU3XSB9LCB7IDExOiA1OSwgMzI6IDU4LCAzNzogMjQsIDM4OiAkVjcsIDM5OiAkVjgsIDQwOiAyNywgNDE6ICRWOSwgNDI6ICRWYSwgNDM6ICRWYiwgNDQ6ICRWYywgNDU6ICRWZCwgNDY6ICRWZSwgNDc6ICRWZiwgNDg6ICRWZywgNDk6ICRWaCwgNTA6ICRWaSB9LCBvKCRWbiwgWzIsIDExXSksIG8oJFZuLCBbMiwgMzBdLCB7IDMzOiA2MCwgMjc6ICRWbCB9KSwgbygkVm4sIFsyLCAzMl0pLCB7IDMxOiBbMSwgNjFdIH0sIG8oJFZuLCBbMiwgMTJdKSwgeyAxNzogNjIsIDI0OiAkVm0gfSwgeyAyNTogNjMsIDI3OiAkVnEgfSwgbygkVm4sIFsyLCAxNF0pLCB7IDE3OiA2NSwgMjQ6ICRWbSB9LCBvKCRWbiwgWzIsIDE2XSksIG8oJFZuLCBbMiwgMTddKSwgbygkVnAsIFsyLCA0MV0pLCBvKCRWbiwgWzIsIDIzXSksIHsgMjc6IFsxLCA2Nl0gfSwgeyAyNjogWzEsIDY3XSB9LCB7IDI2OiBbMiwgMjldLCAyODogWzEsIDY4XSB9LCBvKCRWbiwgWzIsIDMxXSksIHsgMjc6IFsxLCA2OV0gfSwgbygkVm4sIFsyLCAxM10pLCB7IDI2OiBbMSwgNzBdIH0sIHsgMjY6IFsyLCAyMV0sIDI4OiBbMSwgNzFdIH0sIG8oJFZuLCBbMiwgMTVdKSwgbygkVm4sIFsyLCAyNl0pLCBvKCRWbiwgWzIsIDI3XSksIHsgMTE6IDU5LCAzMjogNzIsIDM3OiAyNCwgMzg6ICRWNywgMzk6ICRWOCwgNDA6IDI3LCA0MTogJFY5LCA0MjogJFZhLCA0MzogJFZiLCA0NDogJFZjLCA0NTogJFZkLCA0NjogJFZlLCA0NzogJFZmLCA0ODogJFZnLCA0OTogJFZoLCA1MDogJFZpIH0sIG8oJFZuLCBbMiwgMzNdKSwgbygkVm4sIFsyLCAxOV0pLCB7IDI1OiA3MywgMjc6ICRWcSB9LCB7IDI2OiBbMiwgMjhdIH0sIHsgMjY6IFsyLCAyMF0gfV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgODogWzIsIDFdLCAxMDogWzIsIDNdLCAyMTogWzIsIDJdLCA3MjogWzIsIDI4XSwgNzM6IFsyLCAyMF0gfSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYXhpc19kYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiWF9BWElTXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJheGlzX2RhdGFcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJZX0FYSVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImF4aXNfYmFuZF9kYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImRhdGFcIik7XG4gICAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJkYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiZGF0YV9pbm5lclwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgcmV0dXJuIFwiQ09MT05cIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICByZXR1cm4gNDc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgcmV0dXJuIDQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86JSUoPyFcXHspW15cXG5dKikvaSwgL14oPzpbXlxcfV0lJVteXFxuXSopL2ksIC9eKD86KFxccj9cXG4pKS9pLCAvXig/OihcXHI/XFxuKSkvaSwgL14oPzpbXFxuXFxyXSspL2ksIC9eKD86JSVbXlxcbl0qKS9pLCAvXig/OnRpdGxlXFxiKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86XFx7KS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86eHljaGFydC1iZXRhXFxiKS9pLCAvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLCAvXig/OngtYXhpc1xcYikvaSwgL14oPzp5LWF4aXNcXGIpL2ksIC9eKD86XFxbKS9pLCAvXig/Oi0tPikvaSwgL14oPzpsaW5lXFxiKS9pLCAvXig/OmJhclxcYikvaSwgL14oPzpcXFspL2ksIC9eKD86WystXT8oPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKS9pLCAvXig/OlxcXSkvaSwgL14oPzooPzpgXFwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFx7IHRoaXNcXC5wdXNoU3RhdGVcXChtZF9zdHJpbmdcXCk7IFxcfVxcbjxtZF9zdHJpbmc+XFwoXFw/OlxcKFxcPyFgXCJcXClcXC5cXClcXCsgICAgICAgICAgICAgICAgICBcXHsgcmV0dXJuIE1EX1NUUjsgXFx9XFxuPG1kX3N0cmluZz5cXChcXD86YCkpL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXCJdKS9pLCAvXig/OlteXCJdKikvaSwgL14oPzpcXFspL2ksIC9eKD86XFxdKS9pLCAvXig/OltBLVphLXpdKykvaSwgL14oPzo6KS9pLCAvXig/OlxcKykvaSwgL14oPzosKS9pLCAvXig/Oj0pL2ksIC9eKD86XFwqKS9pLCAvXig/OiMpL2ksIC9eKD86W1xcX10pL2ksIC9eKD86XFwuKS9pLCAvXig/OiYpL2ksIC9eKD86LSkvaSwgL14oPzpbMC05XSspL2ksIC9eKD86XFxzKykvaSwgL14oPzo7KS9pLCAvXig/OiQpL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImRhdGFfaW5uZXJcIjogeyBcInJ1bGVzXCI6IFswLCAxLCA0LCA1LCA2LCA3LCA5LCAxMSwgMTQsIDE1LCAxNiwgMTcsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSwgXCJkYXRhXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMywgNCwgNSwgNiwgNywgOSwgMTEsIDE0LCAxNSwgMTYsIDE3LCAyMCwgMjEsIDIyLCAyNSwgMjYsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSwgXCJheGlzX2JhbmRfZGF0YVwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDQsIDUsIDYsIDcsIDksIDExLCAxNCwgMTUsIDE2LCAxNywgMjAsIDIxLCAyNCwgMjUsIDI2LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDVdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0sIFwiYXhpc19kYXRhXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMiwgNCwgNSwgNiwgNywgOSwgMTEsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjMsIDI1LCAyNiwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1XSwgXCJpbmNsdXNpdmVcIjogdHJ1ZSB9LCBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFsxMiwgMTNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzEwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs4XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0aXRsZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwibWRfc3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyNywgMjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCA0LCA1LCA2LCA3LCA5LCAxMSwgMTQsIDE1LCAxNiwgMTcsIDIwLCAyMSwgMjUsIDI2LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDVdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgeHljaGFydF9kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC9jaGFydEJ1aWxkZXIvaW50ZXJmYWNlcy50c1xuZnVuY3Rpb24gaXNCYXJQbG90KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEudHlwZSA9PT0gXCJiYXJcIjtcbn1cbl9fbmFtZShpc0JhclBsb3QsIFwiaXNCYXJQbG90XCIpO1xuZnVuY3Rpb24gaXNCYW5kQXhpc0RhdGEoZGF0YSkge1xuICByZXR1cm4gZGF0YS50eXBlID09PSBcImJhbmRcIjtcbn1cbl9fbmFtZShpc0JhbmRBeGlzRGF0YSwgXCJpc0JhbmRBeGlzRGF0YVwiKTtcbmZ1bmN0aW9uIGlzTGluZWFyQXhpc0RhdGEoZGF0YSkge1xuICByZXR1cm4gZGF0YS50eXBlID09PSBcImxpbmVhclwiO1xufVxuX19uYW1lKGlzTGluZWFyQXhpc0RhdGEsIFwiaXNMaW5lYXJBeGlzRGF0YVwiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL3RleHREaW1lbnNpb25DYWxjdWxhdG9yLnRzXG52YXIgVGV4dERpbWVuc2lvbkNhbGN1bGF0b3JXaXRoRm9udCA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IocGFyZW50R3JvdXApIHtcbiAgICB0aGlzLnBhcmVudEdyb3VwID0gcGFyZW50R3JvdXA7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250XCIpO1xuICB9XG4gIGdldE1heERpbWVuc2lvbih0ZXh0cywgZm9udFNpemUpIHtcbiAgICBpZiAoIXRoaXMucGFyZW50R3JvdXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0ZXh0cy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBNYXRoLm1heChjdXIubGVuZ3RoLCBhY2MpLCAwKSAqIGZvbnRTaXplLFxuICAgICAgICBoZWlnaHQ6IGZvbnRTaXplXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgY29uc3QgZWxlbSA9IHRoaXMucGFyZW50R3JvdXAuYXBwZW5kKFwiZ1wiKS5hdHRyKFwidmlzaWJpbGl0eVwiLCBcImhpZGRlblwiKS5hdHRyKFwiZm9udC1zaXplXCIsIGZvbnRTaXplKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgdGV4dHMpIHtcbiAgICAgIGNvbnN0IGJib3ggPSBjb21wdXRlRGltZW5zaW9uT2ZUZXh0KGVsZW0sIDEsIHQpO1xuICAgICAgY29uc3Qgd2lkdGggPSBiYm94ID8gYmJveC53aWR0aCA6IHQubGVuZ3RoICogZm9udFNpemU7XG4gICAgICBjb25zdCBoZWlnaHQgPSBiYm94ID8gYmJveC5oZWlnaHQgOiBmb250U2l6ZTtcbiAgICAgIGRpbWVuc2lvbi53aWR0aCA9IE1hdGgubWF4KGRpbWVuc2lvbi53aWR0aCwgd2lkdGgpO1xuICAgICAgZGltZW5zaW9uLmhlaWdodCA9IE1hdGgubWF4KGRpbWVuc2lvbi5oZWlnaHQsIGhlaWdodCk7XG4gICAgfVxuICAgIGVsZW0ucmVtb3ZlKCk7XG4gICAgcmV0dXJuIGRpbWVuc2lvbjtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvYXhpcy9iYW5kQXhpcy50c1xuaW1wb3J0IHsgc2NhbGVCYW5kIH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9jb21wb25lbnRzL2F4aXMvYmFzZUF4aXMudHNcbnZhciBCQVJfV0lEVEhfVE9fVElDS19XSURUSF9SQVRJTyA9IDAuNztcbnZhciBNQVhfT1VURVJfUEFERElOR19QRVJDRU5UX0ZPUl9XUlRfTEFCRUwgPSAwLjI7XG52YXIgQmFzZUF4aXMgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGF4aXNDb25maWcsIHRpdGxlLCB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciwgYXhpc1RoZW1lQ29uZmlnKSB7XG4gICAgdGhpcy5heGlzQ29uZmlnID0gYXhpc0NvbmZpZztcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IHRleHREaW1lbnNpb25DYWxjdWxhdG9yO1xuICAgIHRoaXMuYXhpc1RoZW1lQ29uZmlnID0gYXhpc1RoZW1lQ29uZmlnO1xuICAgIHRoaXMuYm91bmRpbmdSZWN0ID0geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgdGhpcy5heGlzUG9zaXRpb24gPSBcImxlZnRcIjtcbiAgICB0aGlzLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0xhYmVsID0gZmFsc2U7XG4gICAgdGhpcy5zaG93VGljayA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0F4aXNMaW5lID0gZmFsc2U7XG4gICAgdGhpcy5vdXRlclBhZGRpbmcgPSAwO1xuICAgIHRoaXMudGl0bGVUZXh0SGVpZ2h0ID0gMDtcbiAgICB0aGlzLmxhYmVsVGV4dEhlaWdodCA9IDA7XG4gICAgdGhpcy5yYW5nZSA9IFswLCAxMF07XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QgPSB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICB0aGlzLmF4aXNQb3NpdGlvbiA9IFwibGVmdFwiO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQmFzZUF4aXNcIik7XG4gIH1cbiAgc2V0UmFuZ2UocmFuZ2UpIHtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgaWYgKHRoaXMuYXhpc1Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQgPSByYW5nZVsxXSAtIHJhbmdlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCA9IHJhbmdlWzFdIC0gcmFuZ2VbMF07XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpO1xuICB9XG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBbdGhpcy5yYW5nZVswXSArIHRoaXMub3V0ZXJQYWRkaW5nLCB0aGlzLnJhbmdlWzFdIC0gdGhpcy5vdXRlclBhZGRpbmddO1xuICB9XG4gIHNldEF4aXNQb3NpdGlvbihheGlzUG9zaXRpb24pIHtcbiAgICB0aGlzLmF4aXNQb3NpdGlvbiA9IGF4aXNQb3NpdGlvbjtcbiAgICB0aGlzLnNldFJhbmdlKHRoaXMucmFuZ2UpO1xuICB9XG4gIGdldFRpY2tEaXN0YW5jZSgpIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICByZXR1cm4gTWF0aC5hYnMocmFuZ2VbMF0gLSByYW5nZVsxXSkgLyB0aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGg7XG4gIH1cbiAgZ2V0QXhpc091dGVyUGFkZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRlclBhZGRpbmc7XG4gIH1cbiAgZ2V0TGFiZWxEaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFxuICAgICAgdGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKCh0aWNrKSA9PiB0aWNrLnRvU3RyaW5nKCkpLFxuICAgICAgdGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemVcbiAgICApO1xuICB9XG4gIHJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCkge1xuICAgIGlmIChCQVJfV0lEVEhfVE9fVElDS19XSURUSF9SQVRJTyAqIHRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkgPiB0aGlzLm91dGVyUGFkZGluZyAqIDIpIHtcbiAgICAgIHRoaXMub3V0ZXJQYWRkaW5nID0gTWF0aC5mbG9vcihCQVJfV0lEVEhfVE9fVElDS19XSURUSF9SQVRJTyAqIHRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkgLyAyKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCk7XG4gIH1cbiAgY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IGF2YWlsYWJsZVNwYWNlLmhlaWdodDtcbiAgICBpZiAodGhpcy5heGlzQ29uZmlnLnNob3dBeGlzTGluZSAmJiBhdmFpbGFibGVIZWlnaHQgPiB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCkge1xuICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoO1xuICAgICAgdGhpcy5zaG93QXhpc0xpbmUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCkge1xuICAgICAgY29uc3Qgc3BhY2VSZXF1aXJlZCA9IHRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKTtcbiAgICAgIGNvbnN0IG1heFBhZGRpbmcgPSBNQVhfT1VURVJfUEFERElOR19QRVJDRU5UX0ZPUl9XUlRfTEFCRUwgKiBhdmFpbGFibGVTcGFjZS53aWR0aDtcbiAgICAgIHRoaXMub3V0ZXJQYWRkaW5nID0gTWF0aC5taW4oc3BhY2VSZXF1aXJlZC53aWR0aCAvIDIsIG1heFBhZGRpbmcpO1xuICAgICAgY29uc3QgaGVpZ2h0UmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodCArIHRoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcgKiAyO1xuICAgICAgdGhpcy5sYWJlbFRleHRIZWlnaHQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodDtcbiAgICAgIGlmIChoZWlnaHRSZXF1aXJlZCA8PSBhdmFpbGFibGVIZWlnaHQpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IGhlaWdodFJlcXVpcmVkO1xuICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd1RpY2sgJiYgYXZhaWxhYmxlSGVpZ2h0ID49IHRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNob3dUaWNrID0gdHJ1ZTtcbiAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSB0aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUgJiYgdGhpcy50aXRsZSkge1xuICAgICAgY29uc3Qgc3BhY2VSZXF1aXJlZCA9IHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFxuICAgICAgICBbdGhpcy50aXRsZV0sXG4gICAgICAgIHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplXG4gICAgICApO1xuICAgICAgY29uc3QgaGVpZ2h0UmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodCArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcgKiAyO1xuICAgICAgdGhpcy50aXRsZVRleHRIZWlnaHQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodDtcbiAgICAgIGlmIChoZWlnaHRSZXF1aXJlZCA8PSBhdmFpbGFibGVIZWlnaHQpIHtcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IGhlaWdodFJlcXVpcmVkO1xuICAgICAgICB0aGlzLnNob3dUaXRsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoID0gYXZhaWxhYmxlU3BhY2Uud2lkdGg7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYXZhaWxhYmxlU3BhY2UuaGVpZ2h0IC0gYXZhaWxhYmxlSGVpZ2h0O1xuICB9XG4gIGNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgbGV0IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2Uud2lkdGg7XG4gICAgaWYgKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUgJiYgYXZhaWxhYmxlV2lkdGggPiB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCkge1xuICAgICAgYXZhaWxhYmxlV2lkdGggLT0gdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg7XG4gICAgICB0aGlzLnNob3dBeGlzTGluZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd0xhYmVsKSB7XG4gICAgICBjb25zdCBzcGFjZVJlcXVpcmVkID0gdGhpcy5nZXRMYWJlbERpbWVuc2lvbigpO1xuICAgICAgY29uc3QgbWF4UGFkZGluZyA9IE1BWF9PVVRFUl9QQURESU5HX1BFUkNFTlRfRk9SX1dSVF9MQUJFTCAqIGF2YWlsYWJsZVNwYWNlLmhlaWdodDtcbiAgICAgIHRoaXMub3V0ZXJQYWRkaW5nID0gTWF0aC5taW4oc3BhY2VSZXF1aXJlZC5oZWlnaHQgLyAyLCBtYXhQYWRkaW5nKTtcbiAgICAgIGNvbnN0IHdpZHRoUmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLndpZHRoICsgdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyAqIDI7XG4gICAgICBpZiAod2lkdGhSZXF1aXJlZCA8PSBhdmFpbGFibGVXaWR0aCkge1xuICAgICAgICBhdmFpbGFibGVXaWR0aCAtPSB3aWR0aFJlcXVpcmVkO1xuICAgICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd1RpY2sgJiYgYXZhaWxhYmxlV2lkdGggPj0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hvd1RpY2sgPSB0cnVlO1xuICAgICAgYXZhaWxhYmxlV2lkdGggLT0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlICYmIHRoaXMudGl0bGUpIHtcbiAgICAgIGNvbnN0IHNwYWNlUmVxdWlyZWQgPSB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihcbiAgICAgICAgW3RoaXMudGl0bGVdLFxuICAgICAgICB0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdpZHRoUmVxdWlyZWQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodCArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcgKiAyO1xuICAgICAgdGhpcy50aXRsZVRleHRIZWlnaHQgPSBzcGFjZVJlcXVpcmVkLmhlaWdodDtcbiAgICAgIGlmICh3aWR0aFJlcXVpcmVkIDw9IGF2YWlsYWJsZVdpZHRoKSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoIC09IHdpZHRoUmVxdWlyZWQ7XG4gICAgICAgIHRoaXMuc2hvd1RpdGxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGggPSBhdmFpbGFibGVTcGFjZS53aWR0aCAtIGF2YWlsYWJsZVdpZHRoO1xuICAgIHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCA9IGF2YWlsYWJsZVNwYWNlLmhlaWdodDtcbiAgfVxuICBjYWxjdWxhdGVTcGFjZShhdmFpbGFibGVTcGFjZSkge1xuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5heGlzUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgdGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25WZXJ0aWNhbChhdmFpbGFibGVTcGFjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGF2YWlsYWJsZVNwYWNlKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgfTtcbiAgfVxuICBzZXRCb3VuZGluZ0JveFhZKHBvaW50KSB7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueCA9IHBvaW50Lng7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueSA9IHBvaW50Lnk7XG4gIH1cbiAgZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCkge1xuICAgIGNvbnN0IGRyYXdhYmxlRWxlbWVudCA9IFtdO1xuICAgIGlmICh0aGlzLnNob3dBeGlzTGluZSkge1xuICAgICAgY29uc3QgeCA9IHRoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCAtIHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIC8gMjtcbiAgICAgIGRyYXdhYmxlRWxlbWVudC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJwYXRoXCIsXG4gICAgICAgIGdyb3VwVGV4dHM6IFtcImxlZnQtYXhpc1wiLCBcImF4aXNsLWxpbmVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgTSAke3h9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3h9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSArIHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH0gYCxcbiAgICAgICAgICAgIHN0cm9rZUZpbGw6IHRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGhcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93TGFiZWwpIHtcbiAgICAgIGRyYXdhYmxlRWxlbWVudC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGdyb3VwVGV4dHM6IFtcImxlZnQtYXhpc1wiLCBcImxhYmVsXCJdLFxuICAgICAgICBkYXRhOiB0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoKHRpY2spID0+ICh7XG4gICAgICAgICAgdGV4dDogdGljay50b1N0cmluZygpLFxuICAgICAgICAgIHg6IHRoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCAtICh0aGlzLnNob3dMYWJlbCA/IHRoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcgOiAwKSAtICh0aGlzLnNob3dUaWNrID8gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGggOiAwKSAtICh0aGlzLnNob3dBeGlzTGluZSA/IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIDogMCksXG4gICAgICAgICAgeTogdGhpcy5nZXRTY2FsZVZhbHVlKHRpY2spLFxuICAgICAgICAgIGZpbGw6IHRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsXG4gICAgICAgICAgZm9udFNpemU6IHRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLFxuICAgICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICAgIHZlcnRpY2FsUG9zOiBcIm1pZGRsZVwiLFxuICAgICAgICAgIGhvcml6b250YWxQb3M6IFwicmlnaHRcIlxuICAgICAgICB9KSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93VGljaykge1xuICAgICAgY29uc3QgeCA9IHRoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCAtICh0aGlzLnNob3dBeGlzTGluZSA/IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIDogMCk7XG4gICAgICBkcmF3YWJsZUVsZW1lbnQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICBncm91cFRleHRzOiBbXCJsZWZ0LWF4aXNcIiwgXCJ0aWNrc1wiXSxcbiAgICAgICAgZGF0YTogdGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKCh0aWNrKSA9PiAoe1xuICAgICAgICAgIHBhdGg6IGBNICR7eH0sJHt0aGlzLmdldFNjYWxlVmFsdWUodGljayl9IEwgJHt4IC0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKHRpY2spfWAsXG4gICAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmF4aXNDb25maWcudGlja1dpZHRoXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wibGVmdC1heGlzXCIsIFwidGl0bGVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlLFxuICAgICAgICAgICAgeDogdGhpcy5ib3VuZGluZ1JlY3QueCArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsXG4gICAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC8gMixcbiAgICAgICAgICAgIGZpbGw6IHRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsXG4gICAgICAgICAgICBmb250U2l6ZTogdGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUsXG4gICAgICAgICAgICByb3RhdGlvbjogMjcwLFxuICAgICAgICAgICAgdmVydGljYWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRyYXdhYmxlRWxlbWVudDtcbiAgfVxuICBnZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpIHtcbiAgICBjb25zdCBkcmF3YWJsZUVsZW1lbnQgPSBbXTtcbiAgICBpZiAodGhpcy5zaG93QXhpc0xpbmUpIHtcbiAgICAgIGNvbnN0IHkgPSB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGggLyAyO1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGhcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiYm90dG9tLWF4aXNcIiwgXCJheGlzLWxpbmVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7eX0gTCAke3RoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt5fWAsXG4gICAgICAgICAgICBzdHJva2VGaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0xhYmVsKSB7XG4gICAgICBkcmF3YWJsZUVsZW1lbnQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBncm91cFRleHRzOiBbXCJib3R0b20tYXhpc1wiLCBcImxhYmVsXCJdLFxuICAgICAgICBkYXRhOiB0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoKHRpY2spID0+ICh7XG4gICAgICAgICAgdGV4dDogdGljay50b1N0cmluZygpLFxuICAgICAgICAgIHg6IHRoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKSxcbiAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyArICh0aGlzLnNob3dUaWNrID8gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGggOiAwKSArICh0aGlzLnNob3dBeGlzTGluZSA/IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoIDogMCksXG4gICAgICAgICAgZmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixcbiAgICAgICAgICBmb250U2l6ZTogdGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUsXG4gICAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgICAgdmVydGljYWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgaG9yaXpvbnRhbFBvczogXCJjZW50ZXJcIlxuICAgICAgICB9KSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93VGljaykge1xuICAgICAgY29uc3QgeSA9IHRoaXMuYm91bmRpbmdSZWN0LnkgKyAodGhpcy5zaG93QXhpc0xpbmUgPyB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCA6IDApO1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGhcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiYm90dG9tLWF4aXNcIiwgXCJ0aWNrc1wiXSxcbiAgICAgICAgZGF0YTogdGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKCh0aWNrKSA9PiAoe1xuICAgICAgICAgIHBhdGg6IGBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKHRpY2spfSwke3l9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUodGljayl9LCR7eSArIHRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofWAsXG4gICAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmF4aXNDb25maWcudGlja1dpZHRoXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiYm90dG9tLWF4aXNcIiwgXCJ0aXRsZVwiXSxcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICB4OiB0aGlzLnJhbmdlWzBdICsgKHRoaXMucmFuZ2VbMV0gLSB0aGlzLnJhbmdlWzBdKSAvIDIsXG4gICAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyAtIHRoaXMudGl0bGVUZXh0SGVpZ2h0LFxuICAgICAgICAgICAgZmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixcbiAgICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxcbiAgICAgICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgdmVydGljYWxQb3M6IFwidG9wXCIsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRyYXdhYmxlRWxlbWVudDtcbiAgfVxuICBnZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpIHtcbiAgICBjb25zdCBkcmF3YWJsZUVsZW1lbnQgPSBbXTtcbiAgICBpZiAodGhpcy5zaG93QXhpc0xpbmUpIHtcbiAgICAgIGNvbnN0IHkgPSB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGggLyAyO1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGhcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1widG9wLWF4aXNcIiwgXCJheGlzLWxpbmVcIl0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7eX0gTCAke3RoaXMuYm91bmRpbmdSZWN0LnggKyB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt5fWAsXG4gICAgICAgICAgICBzdHJva2VGaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0xhYmVsKSB7XG4gICAgICBkcmF3YWJsZUVsZW1lbnQucHVzaCh7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBncm91cFRleHRzOiBbXCJ0b3AtYXhpc1wiLCBcImxhYmVsXCJdLFxuICAgICAgICBkYXRhOiB0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoKHRpY2spID0+ICh7XG4gICAgICAgICAgdGV4dDogdGljay50b1N0cmluZygpLFxuICAgICAgICAgIHg6IHRoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKSxcbiAgICAgICAgICB5OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgKHRoaXMuc2hvd1RpdGxlID8gdGhpcy50aXRsZVRleHRIZWlnaHQgKyB0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nICogMiA6IDApICsgdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxcbiAgICAgICAgICBmaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLFxuICAgICAgICAgIGZvbnRTaXplOiB0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxcbiAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJ0b3BcIixcbiAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaWNrKSB7XG4gICAgICBjb25zdCB5ID0gdGhpcy5ib3VuZGluZ1JlY3QueTtcbiAgICAgIGRyYXdhYmxlRWxlbWVudC5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJwYXRoXCIsXG4gICAgICAgIGdyb3VwVGV4dHM6IFtcInRvcC1heGlzXCIsIFwidGlja3NcIl0sXG4gICAgICAgIGRhdGE6IHRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcCgodGljaykgPT4gKHtcbiAgICAgICAgICBwYXRoOiBgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKX0sJHt5ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gKHRoaXMuc2hvd0F4aXNMaW5lID8gdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGggOiAwKX0gTCAke3RoaXMuZ2V0U2NhbGVWYWx1ZSh0aWNrKX0sJHt5ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGggLSAodGhpcy5zaG93QXhpc0xpbmUgPyB0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCA6IDApfWAsXG4gICAgICAgICAgc3Ryb2tlRmlsbDogdGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLmF4aXNDb25maWcudGlja1dpZHRoXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgZHJhd2FibGVFbGVtZW50LnB1c2goe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZ3JvdXBUZXh0czogW1widG9wLWF4aXNcIiwgXCJ0aXRsZVwiXSxcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICB4OiB0aGlzLmJvdW5kaW5nUmVjdC54ICsgdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGggLyAyLFxuICAgICAgICAgICAgeTogdGhpcy5ib3VuZGluZ1JlY3QueSArIHRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsXG4gICAgICAgICAgICBmaWxsOiB0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLFxuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLFxuICAgICAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBvczogXCJ0b3BcIixcbiAgICAgICAgICAgIGhvcml6b250YWxQb3M6IFwiY2VudGVyXCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZHJhd2FibGVFbGVtZW50O1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudHMoKSB7XG4gICAgaWYgKHRoaXMuYXhpc1Bvc2l0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkRyYXdpbmcgb2YgcmlnaHQgYXhpcyBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXhpc1Bvc2l0aW9uID09PSBcInRvcFwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9jb21wb25lbnRzL2F4aXMvYmFuZEF4aXMudHNcbnZhciBCYW5kQXhpcyA9IGNsYXNzIGV4dGVuZHMgQmFzZUF4aXMge1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkJhbmRBeGlzXCIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKGF4aXNDb25maWcsIGF4aXNUaGVtZUNvbmZpZywgY2F0ZWdvcmllcywgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yKSB7XG4gICAgc3VwZXIoYXhpc0NvbmZpZywgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yLCBheGlzVGhlbWVDb25maWcpO1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXM7XG4gICAgdGhpcy5zY2FsZSA9IHNjYWxlQmFuZCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSk7XG4gIH1cbiAgc2V0UmFuZ2UocmFuZ2UpIHtcbiAgICBzdXBlci5zZXRSYW5nZShyYW5nZSk7XG4gIH1cbiAgcmVjYWxjdWxhdGVTY2FsZSgpIHtcbiAgICB0aGlzLnNjYWxlID0gc2NhbGVCYW5kKCkuZG9tYWluKHRoaXMuY2F0ZWdvcmllcykucmFuZ2UodGhpcy5nZXRSYW5nZSgpKS5wYWRkaW5nSW5uZXIoMSkucGFkZGluZ091dGVyKDApLmFsaWduKDAuNSk7XG4gICAgbG9nLnRyYWNlKFwiQmFuZEF4aXMgYXhpcyBmaW5hbCBjYXRlZ29yaWVzLCByYW5nZTogXCIsIHRoaXMuY2F0ZWdvcmllcywgdGhpcy5nZXRSYW5nZSgpKTtcbiAgfVxuICBnZXRUaWNrVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXM7XG4gIH1cbiAgZ2V0U2NhbGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlKHZhbHVlKSA/PyB0aGlzLmdldFJhbmdlKClbMF07XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9jb21wb25lbnRzL2F4aXMvbGluZWFyQXhpcy50c1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tIFwiZDNcIjtcbnZhciBMaW5lYXJBeGlzID0gY2xhc3MgZXh0ZW5kcyBCYXNlQXhpcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiTGluZWFyQXhpc1wiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihheGlzQ29uZmlnLCBheGlzVGhlbWVDb25maWcsIGRvbWFpbiwgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yKSB7XG4gICAgc3VwZXIoYXhpc0NvbmZpZywgdGl0bGUsIHRleHREaW1lbnNpb25DYWxjdWxhdG9yLCBheGlzVGhlbWVDb25maWcpO1xuICAgIHRoaXMuZG9tYWluID0gZG9tYWluO1xuICAgIHRoaXMuc2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbih0aGlzLmRvbWFpbikucmFuZ2UodGhpcy5nZXRSYW5nZSgpKTtcbiAgfVxuICBnZXRUaWNrVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlLnRpY2tzKCk7XG4gIH1cbiAgcmVjYWxjdWxhdGVTY2FsZSgpIHtcbiAgICBjb25zdCBkb21haW4gPSBbLi4udGhpcy5kb21haW5dO1xuICAgIGlmICh0aGlzLmF4aXNQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIGRvbWFpbi5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NhbGUgPSBzY2FsZUxpbmVhcigpLmRvbWFpbihkb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSk7XG4gIH1cbiAgZ2V0U2NhbGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNjYWxlKHZhbHVlKTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvYXhpcy9pbmRleC50c1xuZnVuY3Rpb24gZ2V0QXhpcyhkYXRhLCBheGlzQ29uZmlnLCBheGlzVGhlbWVDb25maWcsIHRtcFNWR0dyb3VwMikge1xuICBjb25zdCB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IG5ldyBUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250KHRtcFNWR0dyb3VwMik7XG4gIGlmIChpc0JhbmRBeGlzRGF0YShkYXRhKSkge1xuICAgIHJldHVybiBuZXcgQmFuZEF4aXMoXG4gICAgICBheGlzQ29uZmlnLFxuICAgICAgYXhpc1RoZW1lQ29uZmlnLFxuICAgICAgZGF0YS5jYXRlZ29yaWVzLFxuICAgICAgZGF0YS50aXRsZSxcbiAgICAgIHRleHREaW1lbnNpb25DYWxjdWxhdG9yXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3IExpbmVhckF4aXMoXG4gICAgYXhpc0NvbmZpZyxcbiAgICBheGlzVGhlbWVDb25maWcsXG4gICAgW2RhdGEubWluLCBkYXRhLm1heF0sXG4gICAgZGF0YS50aXRsZSxcbiAgICB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvclxuICApO1xufVxuX19uYW1lKGdldEF4aXMsIFwiZ2V0QXhpc1wiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvY2hhcnRUaXRsZS50c1xudmFyIENoYXJ0VGl0bGUgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHRleHREaW1lbnNpb25DYWxjdWxhdG9yLCBjaGFydENvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnKSB7XG4gICAgdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IHRleHREaW1lbnNpb25DYWxjdWxhdG9yO1xuICAgIHRoaXMuY2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICB0aGlzLmNoYXJ0RGF0YSA9IGNoYXJ0RGF0YTtcbiAgICB0aGlzLmNoYXJ0VGhlbWVDb25maWcgPSBjaGFydFRoZW1lQ29uZmlnO1xuICAgIHRoaXMuYm91bmRpbmdSZWN0ID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdGhpcy5zaG93Q2hhcnRUaXRsZSA9IGZhbHNlO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQ2hhcnRUaXRsZVwiKTtcbiAgfVxuICBzZXRCb3VuZGluZ0JveFhZKHBvaW50KSB7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueCA9IHBvaW50Lng7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QueSA9IHBvaW50Lnk7XG4gIH1cbiAgY2FsY3VsYXRlU3BhY2UoYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCB0aXRsZURpbWVuc2lvbiA9IHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFxuICAgICAgW3RoaXMuY2hhcnREYXRhLnRpdGxlXSxcbiAgICAgIHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZVxuICAgICk7XG4gICAgY29uc3Qgd2lkdGhSZXF1aXJlZCA9IE1hdGgubWF4KHRpdGxlRGltZW5zaW9uLndpZHRoLCBhdmFpbGFibGVTcGFjZS53aWR0aCk7XG4gICAgY29uc3QgaGVpZ2h0UmVxdWlyZWQgPSB0aXRsZURpbWVuc2lvbi5oZWlnaHQgKyAyICogdGhpcy5jaGFydENvbmZpZy50aXRsZVBhZGRpbmc7XG4gICAgaWYgKHRpdGxlRGltZW5zaW9uLndpZHRoIDw9IHdpZHRoUmVxdWlyZWQgJiYgdGl0bGVEaW1lbnNpb24uaGVpZ2h0IDw9IGhlaWdodFJlcXVpcmVkICYmIHRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlICYmIHRoaXMuY2hhcnREYXRhLnRpdGxlKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCA9IHdpZHRoUmVxdWlyZWQ7XG4gICAgICB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQgPSBoZWlnaHRSZXF1aXJlZDtcbiAgICAgIHRoaXMuc2hvd0NoYXJ0VGl0bGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMuYm91bmRpbmdSZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHRcbiAgICB9O1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudHMoKSB7XG4gICAgY29uc3QgZHJhd2FibGVFbGVtID0gW107XG4gICAgaWYgKHRoaXMuc2hvd0NoYXJ0VGl0bGUpIHtcbiAgICAgIGRyYXdhYmxlRWxlbS5wdXNoKHtcbiAgICAgICAgZ3JvdXBUZXh0czogW1wiY2hhcnQtdGl0bGVcIl0sXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBkYXRhOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9udFNpemU6IHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuY2hhcnREYXRhLnRpdGxlLFxuICAgICAgICAgICAgdmVydGljYWxQb3M6IFwibWlkZGxlXCIsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgeDogdGhpcy5ib3VuZGluZ1JlY3QueCArIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoIC8gMixcbiAgICAgICAgICAgIHk6IHRoaXMuYm91bmRpbmdSZWN0LnkgKyB0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQgLyAyLFxuICAgICAgICAgICAgZmlsbDogdGhpcy5jaGFydFRoZW1lQ29uZmlnLnRpdGxlQ29sb3IsXG4gICAgICAgICAgICByb3RhdGlvbjogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkcmF3YWJsZUVsZW07XG4gIH1cbn07XG5mdW5jdGlvbiBnZXRDaGFydFRpdGxlQ29tcG9uZW50KGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcsIHRtcFNWR0dyb3VwMikge1xuICBjb25zdCB0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciA9IG5ldyBUZXh0RGltZW5zaW9uQ2FsY3VsYXRvcldpdGhGb250KHRtcFNWR0dyb3VwMik7XG4gIHJldHVybiBuZXcgQ2hhcnRUaXRsZSh0ZXh0RGltZW5zaW9uQ2FsY3VsYXRvciwgY2hhcnRDb25maWcsIGNoYXJ0RGF0YSwgY2hhcnRUaGVtZUNvbmZpZyk7XG59XG5fX25hbWUoZ2V0Q2hhcnRUaXRsZUNvbXBvbmVudCwgXCJnZXRDaGFydFRpdGxlQ29tcG9uZW50XCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC9jaGFydEJ1aWxkZXIvY29tcG9uZW50cy9wbG90L2xpbmVQbG90LnRzXG5pbXBvcnQgeyBsaW5lIH0gZnJvbSBcImQzXCI7XG52YXIgTGluZVBsb3QgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHBsb3REYXRhLCB4QXhpcywgeUF4aXMsIG9yaWVudGF0aW9uLCBwbG90SW5kZXgyKSB7XG4gICAgdGhpcy5wbG90RGF0YSA9IHBsb3REYXRhO1xuICAgIHRoaXMueEF4aXMgPSB4QXhpcztcbiAgICB0aGlzLnlBeGlzID0geUF4aXM7XG4gICAgdGhpcy5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIHRoaXMucGxvdEluZGV4ID0gcGxvdEluZGV4MjtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkxpbmVQbG90XCIpO1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudCgpIHtcbiAgICBjb25zdCBmaW5hbERhdGEgPSB0aGlzLnBsb3REYXRhLmRhdGEubWFwKChkKSA9PiBbXG4gICAgICB0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoZFswXSksXG4gICAgICB0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoZFsxXSlcbiAgICBdKTtcbiAgICBsZXQgcGF0aDtcbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgIHBhdGggPSBsaW5lKCkueSgoZCkgPT4gZFswXSkueCgoZCkgPT4gZFsxXSkoZmluYWxEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGxpbmUoKS54KChkKSA9PiBkWzBdKS55KChkKSA9PiBkWzFdKShmaW5hbERhdGEpO1xuICAgIH1cbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZ3JvdXBUZXh0czogW1wicGxvdFwiLCBgbGluZS1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sXG4gICAgICAgIHR5cGU6IFwicGF0aFwiLFxuICAgICAgICBkYXRhOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHN0cm9rZUZpbGw6IHRoaXMucGxvdERhdGEuc3Ryb2tlRmlsbCxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiB0aGlzLnBsb3REYXRhLnN0cm9rZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2NvbXBvbmVudHMvcGxvdC9iYXJQbG90LnRzXG52YXIgQmFyUGxvdCA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoYmFyRGF0YSwgYm91bmRpbmdSZWN0LCB4QXhpcywgeUF4aXMsIG9yaWVudGF0aW9uLCBwbG90SW5kZXgyKSB7XG4gICAgdGhpcy5iYXJEYXRhID0gYmFyRGF0YTtcbiAgICB0aGlzLmJvdW5kaW5nUmVjdCA9IGJvdW5kaW5nUmVjdDtcbiAgICB0aGlzLnhBeGlzID0geEF4aXM7XG4gICAgdGhpcy55QXhpcyA9IHlBeGlzO1xuICAgIHRoaXMub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICB0aGlzLnBsb3RJbmRleCA9IHBsb3RJbmRleDI7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJCYXJQbG90XCIpO1xuICB9XG4gIGdldERyYXdhYmxlRWxlbWVudCgpIHtcbiAgICBjb25zdCBmaW5hbERhdGEgPSB0aGlzLmJhckRhdGEuZGF0YS5tYXAoKGQpID0+IFtcbiAgICAgIHRoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShkWzBdKSxcbiAgICAgIHRoaXMueUF4aXMuZ2V0U2NhbGVWYWx1ZShkWzFdKVxuICAgIF0pO1xuICAgIGNvbnN0IGJhclBhZGRpbmdQZXJjZW50ID0gMC4wNTtcbiAgICBjb25zdCBiYXJXaWR0aCA9IE1hdGgubWluKHRoaXMueEF4aXMuZ2V0QXhpc091dGVyUGFkZGluZygpICogMiwgdGhpcy54QXhpcy5nZXRUaWNrRGlzdGFuY2UoKSkgKiAoMSAtIGJhclBhZGRpbmdQZXJjZW50KTtcbiAgICBjb25zdCBiYXJXaWR0aEhhbGYgPSBiYXJXaWR0aCAvIDI7XG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXBUZXh0czogW1wicGxvdFwiLCBgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSxcbiAgICAgICAgICB0eXBlOiBcInJlY3RcIixcbiAgICAgICAgICBkYXRhOiBmaW5hbERhdGEubWFwKChkYXRhKSA9PiAoe1xuICAgICAgICAgICAgeDogdGhpcy5ib3VuZGluZ1JlY3QueCxcbiAgICAgICAgICAgIHk6IGRhdGFbMF0gLSBiYXJXaWR0aEhhbGYsXG4gICAgICAgICAgICBoZWlnaHQ6IGJhcldpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IGRhdGFbMV0gLSB0aGlzLmJvdW5kaW5nUmVjdC54LFxuICAgICAgICAgICAgZmlsbDogdGhpcy5iYXJEYXRhLmZpbGwsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgIHN0cm9rZUZpbGw6IHRoaXMuYmFyRGF0YS5maWxsXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGdyb3VwVGV4dHM6IFtcInBsb3RcIiwgYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sXG4gICAgICAgIHR5cGU6IFwicmVjdFwiLFxuICAgICAgICBkYXRhOiBmaW5hbERhdGEubWFwKChkYXRhKSA9PiAoe1xuICAgICAgICAgIHg6IGRhdGFbMF0gLSBiYXJXaWR0aEhhbGYsXG4gICAgICAgICAgeTogZGF0YVsxXSxcbiAgICAgICAgICB3aWR0aDogYmFyV2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmJvdW5kaW5nUmVjdC55ICsgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0IC0gZGF0YVsxXSxcbiAgICAgICAgICBmaWxsOiB0aGlzLmJhckRhdGEuZmlsbCxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgICBzdHJva2VGaWxsOiB0aGlzLmJhckRhdGEuZmlsbFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICBdO1xuICB9XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC9jaGFydEJ1aWxkZXIvY29tcG9uZW50cy9wbG90L2luZGV4LnRzXG52YXIgQmFzZVBsb3QgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcpIHtcbiAgICB0aGlzLmNoYXJ0Q29uZmlnID0gY2hhcnRDb25maWc7XG4gICAgdGhpcy5jaGFydERhdGEgPSBjaGFydERhdGE7XG4gICAgdGhpcy5jaGFydFRoZW1lQ29uZmlnID0gY2hhcnRUaGVtZUNvbmZpZztcbiAgICB0aGlzLmJvdW5kaW5nUmVjdCA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQmFzZVBsb3RcIik7XG4gIH1cbiAgc2V0QXhlcyh4QXhpcywgeUF4aXMpIHtcbiAgICB0aGlzLnhBeGlzID0geEF4aXM7XG4gICAgdGhpcy55QXhpcyA9IHlBeGlzO1xuICB9XG4gIHNldEJvdW5kaW5nQm94WFkocG9pbnQpIHtcbiAgICB0aGlzLmJvdW5kaW5nUmVjdC54ID0gcG9pbnQueDtcbiAgICB0aGlzLmJvdW5kaW5nUmVjdC55ID0gcG9pbnQueTtcbiAgfVxuICBjYWxjdWxhdGVTcGFjZShhdmFpbGFibGVTcGFjZSkge1xuICAgIHRoaXMuYm91bmRpbmdSZWN0LndpZHRoID0gYXZhaWxhYmxlU3BhY2Uud2lkdGg7XG4gICAgdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0ID0gYXZhaWxhYmxlU3BhY2UuaGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodFxuICAgIH07XG4gIH1cbiAgZ2V0RHJhd2FibGVFbGVtZW50cygpIHtcbiAgICBpZiAoISh0aGlzLnhBeGlzICYmIHRoaXMueUF4aXMpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkF4ZXMgbXVzdCBiZSBwYXNzZWQgdG8gcmVuZGVyIFBsb3RzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkcmF3YWJsZUVsZW0gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtpLCBwbG90XSBvZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpIHtcbiAgICAgIHN3aXRjaCAocGxvdC50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgbGluZVBsb3QgPSBuZXcgTGluZVBsb3QoXG4gICAgICAgICAgICAgIHBsb3QsXG4gICAgICAgICAgICAgIHRoaXMueEF4aXMsXG4gICAgICAgICAgICAgIHRoaXMueUF4aXMsXG4gICAgICAgICAgICAgIHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRyYXdhYmxlRWxlbS5wdXNoKC4uLmxpbmVQbG90LmdldERyYXdhYmxlRWxlbWVudCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBiYXJQbG90ID0gbmV3IEJhclBsb3QoXG4gICAgICAgICAgICAgIHBsb3QsXG4gICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdSZWN0LFxuICAgICAgICAgICAgICB0aGlzLnhBeGlzLFxuICAgICAgICAgICAgICB0aGlzLnlBeGlzLFxuICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24sXG4gICAgICAgICAgICAgIGlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkcmF3YWJsZUVsZW0ucHVzaCguLi5iYXJQbG90LmdldERyYXdhYmxlRWxlbWVudCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkcmF3YWJsZUVsZW07XG4gIH1cbn07XG5mdW5jdGlvbiBnZXRQbG90Q29tcG9uZW50KGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcpIHtcbiAgcmV0dXJuIG5ldyBCYXNlUGxvdChjaGFydENvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnKTtcbn1cbl9fbmFtZShnZXRQbG90Q29tcG9uZW50LCBcImdldFBsb3RDb21wb25lbnRcIik7XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L2NoYXJ0QnVpbGRlci9vcmNoZXN0cmF0b3IudHNcbnZhciBPcmNoZXN0cmF0b3IgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGNoYXJ0Q29uZmlnLCBjaGFydERhdGEsIGNoYXJ0VGhlbWVDb25maWcsIHRtcFNWR0dyb3VwMikge1xuICAgIHRoaXMuY2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICB0aGlzLmNoYXJ0RGF0YSA9IGNoYXJ0RGF0YTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlID0ge1xuICAgICAgdGl0bGU6IGdldENoYXJ0VGl0bGVDb21wb25lbnQoY2hhcnRDb25maWcsIGNoYXJ0RGF0YSwgY2hhcnRUaGVtZUNvbmZpZywgdG1wU1ZHR3JvdXAyKSxcbiAgICAgIHBsb3Q6IGdldFBsb3RDb21wb25lbnQoY2hhcnRDb25maWcsIGNoYXJ0RGF0YSwgY2hhcnRUaGVtZUNvbmZpZyksXG4gICAgICB4QXhpczogZ2V0QXhpcyhcbiAgICAgICAgY2hhcnREYXRhLnhBeGlzLFxuICAgICAgICBjaGFydENvbmZpZy54QXhpcyxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlQ29sb3I6IGNoYXJ0VGhlbWVDb25maWcueEF4aXNUaXRsZUNvbG9yLFxuICAgICAgICAgIGxhYmVsQ29sb3I6IGNoYXJ0VGhlbWVDb25maWcueEF4aXNMYWJlbENvbG9yLFxuICAgICAgICAgIHRpY2tDb2xvcjogY2hhcnRUaGVtZUNvbmZpZy54QXhpc1RpY2tDb2xvcixcbiAgICAgICAgICBheGlzTGluZUNvbG9yOiBjaGFydFRoZW1lQ29uZmlnLnhBeGlzTGluZUNvbG9yXG4gICAgICAgIH0sXG4gICAgICAgIHRtcFNWR0dyb3VwMlxuICAgICAgKSxcbiAgICAgIHlBeGlzOiBnZXRBeGlzKFxuICAgICAgICBjaGFydERhdGEueUF4aXMsXG4gICAgICAgIGNoYXJ0Q29uZmlnLnlBeGlzLFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGVDb2xvcjogY2hhcnRUaGVtZUNvbmZpZy55QXhpc1RpdGxlQ29sb3IsXG4gICAgICAgICAgbGFiZWxDb2xvcjogY2hhcnRUaGVtZUNvbmZpZy55QXhpc0xhYmVsQ29sb3IsXG4gICAgICAgICAgdGlja0NvbG9yOiBjaGFydFRoZW1lQ29uZmlnLnlBeGlzVGlja0NvbG9yLFxuICAgICAgICAgIGF4aXNMaW5lQ29sb3I6IGNoYXJ0VGhlbWVDb25maWcueUF4aXNMaW5lQ29sb3JcbiAgICAgICAgfSxcbiAgICAgICAgdG1wU1ZHR3JvdXAyXG4gICAgICApXG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIk9yY2hlc3RyYXRvclwiKTtcbiAgfVxuICBjYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCkge1xuICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuY2hhcnRDb25maWcud2lkdGg7XG4gICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMuY2hhcnRDb25maWcuaGVpZ2h0O1xuICAgIGxldCBwbG90WCA9IDA7XG4gICAgbGV0IHBsb3RZID0gMDtcbiAgICBsZXQgY2hhcnRXaWR0aCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggKiB0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudCAvIDEwMCk7XG4gICAgbGV0IGNoYXJ0SGVpZ2h0ID0gTWF0aC5mbG9vcihcbiAgICAgIGF2YWlsYWJsZUhlaWdodCAqIHRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50IC8gMTAwXG4gICAgKTtcbiAgICBsZXQgc3BhY2VVc2VkID0gdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBjaGFydFdpZHRoLFxuICAgICAgaGVpZ2h0OiBjaGFydEhlaWdodFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZVdpZHRoIC09IHNwYWNlVXNlZC53aWR0aDtcbiAgICBhdmFpbGFibGVIZWlnaHQgLT0gc3BhY2VVc2VkLmhlaWdodDtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiB0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLFxuICAgICAgaGVpZ2h0OiBhdmFpbGFibGVIZWlnaHRcbiAgICB9KTtcbiAgICBwbG90WSA9IHNwYWNlVXNlZC5oZWlnaHQ7XG4gICAgYXZhaWxhYmxlSGVpZ2h0IC09IHNwYWNlVXNlZC5oZWlnaHQ7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oXCJib3R0b21cIik7XG4gICAgc3BhY2VVc2VkID0gdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7XG4gICAgICB3aWR0aDogYXZhaWxhYmxlV2lkdGgsXG4gICAgICBoZWlnaHQ6IGF2YWlsYWJsZUhlaWdodFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZUhlaWdodCAtPSBzcGFjZVVzZWQuaGVpZ2h0O1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKFwibGVmdFwiKTtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBhdmFpbGFibGVXaWR0aCxcbiAgICAgIGhlaWdodDogYXZhaWxhYmxlSGVpZ2h0XG4gICAgfSk7XG4gICAgcGxvdFggPSBzcGFjZVVzZWQud2lkdGg7XG4gICAgYXZhaWxhYmxlV2lkdGggLT0gc3BhY2VVc2VkLndpZHRoO1xuICAgIGlmIChhdmFpbGFibGVXaWR0aCA+IDApIHtcbiAgICAgIGNoYXJ0V2lkdGggKz0gYXZhaWxhYmxlV2lkdGg7XG4gICAgICBhdmFpbGFibGVXaWR0aCA9IDA7XG4gICAgfVxuICAgIGlmIChhdmFpbGFibGVIZWlnaHQgPiAwKSB7XG4gICAgICBjaGFydEhlaWdodCArPSBhdmFpbGFibGVIZWlnaHQ7XG4gICAgICBhdmFpbGFibGVIZWlnaHQgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe1xuICAgICAgd2lkdGg6IGNoYXJ0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGNoYXJ0SGVpZ2h0XG4gICAgfSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoeyB4OiBwbG90WCwgeTogcGxvdFkgfSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRSYW5nZShbcGxvdFgsIHBsb3RYICsgY2hhcnRXaWR0aF0pO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7IHg6IHBsb3RYLCB5OiBwbG90WSArIGNoYXJ0SGVpZ2h0IH0pO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0UmFuZ2UoW3Bsb3RZLCBwbG90WSArIGNoYXJ0SGVpZ2h0XSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHsgeDogMCwgeTogcGxvdFkgfSk7XG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoKHApID0+IGlzQmFyUGxvdChwKSkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMucmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKTtcbiAgICB9XG4gIH1cbiAgY2FsY3VsYXRlSG9yaXpvbnRhbFNwYWNlKCkge1xuICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuY2hhcnRDb25maWcud2lkdGg7XG4gICAgbGV0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMuY2hhcnRDb25maWcuaGVpZ2h0O1xuICAgIGxldCB0aXRsZVlFbmQgPSAwO1xuICAgIGxldCBwbG90WCA9IDA7XG4gICAgbGV0IHBsb3RZID0gMDtcbiAgICBsZXQgY2hhcnRXaWR0aCA9IE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggKiB0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudCAvIDEwMCk7XG4gICAgbGV0IGNoYXJ0SGVpZ2h0ID0gTWF0aC5mbG9vcihcbiAgICAgIGF2YWlsYWJsZUhlaWdodCAqIHRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50IC8gMTAwXG4gICAgKTtcbiAgICBsZXQgc3BhY2VVc2VkID0gdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBjaGFydFdpZHRoLFxuICAgICAgaGVpZ2h0OiBjaGFydEhlaWdodFxuICAgIH0pO1xuICAgIGF2YWlsYWJsZVdpZHRoIC09IHNwYWNlVXNlZC53aWR0aDtcbiAgICBhdmFpbGFibGVIZWlnaHQgLT0gc3BhY2VVc2VkLmhlaWdodDtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiB0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLFxuICAgICAgaGVpZ2h0OiBhdmFpbGFibGVIZWlnaHRcbiAgICB9KTtcbiAgICB0aXRsZVlFbmQgPSBzcGFjZVVzZWQuaGVpZ2h0O1xuICAgIGF2YWlsYWJsZUhlaWdodCAtPSBzcGFjZVVzZWQuaGVpZ2h0O1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKFwibGVmdFwiKTtcbiAgICBzcGFjZVVzZWQgPSB0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLmNhbGN1bGF0ZVNwYWNlKHtcbiAgICAgIHdpZHRoOiBhdmFpbGFibGVXaWR0aCxcbiAgICAgIGhlaWdodDogYXZhaWxhYmxlSGVpZ2h0XG4gICAgfSk7XG4gICAgYXZhaWxhYmxlV2lkdGggLT0gc3BhY2VVc2VkLndpZHRoO1xuICAgIHBsb3RYID0gc3BhY2VVc2VkLndpZHRoO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKFwidG9wXCIpO1xuICAgIHNwYWNlVXNlZCA9IHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuY2FsY3VsYXRlU3BhY2Uoe1xuICAgICAgd2lkdGg6IGF2YWlsYWJsZVdpZHRoLFxuICAgICAgaGVpZ2h0OiBhdmFpbGFibGVIZWlnaHRcbiAgICB9KTtcbiAgICBhdmFpbGFibGVIZWlnaHQgLT0gc3BhY2VVc2VkLmhlaWdodDtcbiAgICBwbG90WSA9IHRpdGxlWUVuZCArIHNwYWNlVXNlZC5oZWlnaHQ7XG4gICAgaWYgKGF2YWlsYWJsZVdpZHRoID4gMCkge1xuICAgICAgY2hhcnRXaWR0aCArPSBhdmFpbGFibGVXaWR0aDtcbiAgICAgIGF2YWlsYWJsZVdpZHRoID0gMDtcbiAgICB9XG4gICAgaWYgKGF2YWlsYWJsZUhlaWdodCA+IDApIHtcbiAgICAgIGNoYXJ0SGVpZ2h0ICs9IGF2YWlsYWJsZUhlaWdodDtcbiAgICAgIGF2YWlsYWJsZUhlaWdodCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7XG4gICAgICB3aWR0aDogY2hhcnRXaWR0aCxcbiAgICAgIGhlaWdodDogY2hhcnRIZWlnaHRcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7IHg6IHBsb3RYLCB5OiBwbG90WSB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwbG90WCwgcGxvdFggKyBjaGFydFdpZHRoXSk7XG4gICAgdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHsgeDogcGxvdFgsIHk6IHRpdGxlWUVuZCB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFtwbG90WSwgcGxvdFkgKyBjaGFydEhlaWdodF0pO1xuICAgIHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7IHg6IDAsIHk6IHBsb3RZIH0pO1xuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKChwKSA9PiBpc0JhclBsb3QocCkpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCk7XG4gICAgfVxuICB9XG4gIGNhbGN1bGF0ZVNwYWNlKCkge1xuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKTtcbiAgICB9XG4gIH1cbiAgZ2V0RHJhd2FibGVFbGVtZW50KCkge1xuICAgIHRoaXMuY2FsY3VsYXRlU3BhY2UoKTtcbiAgICBjb25zdCBkcmF3YWJsZUVsZW0gPSBbXTtcbiAgICB0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLCB0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzKTtcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50U3RvcmUpKSB7XG4gICAgICBkcmF3YWJsZUVsZW0ucHVzaCguLi5jb21wb25lbnQuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGRyYXdhYmxlRWxlbTtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQvY2hhcnRCdWlsZGVyL2luZGV4LnRzXG52YXIgWFlDaGFydEJ1aWxkZXIgPSBjbGFzcyB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiWFlDaGFydEJ1aWxkZXJcIik7XG4gIH1cbiAgc3RhdGljIGJ1aWxkKGNvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnLCB0bXBTVkdHcm91cDIpIHtcbiAgICBjb25zdCBvcmNoZXN0cmF0b3IgPSBuZXcgT3JjaGVzdHJhdG9yKGNvbmZpZywgY2hhcnREYXRhLCBjaGFydFRoZW1lQ29uZmlnLCB0bXBTVkdHcm91cDIpO1xuICAgIHJldHVybiBvcmNoZXN0cmF0b3IuZ2V0RHJhd2FibGVFbGVtZW50KCk7XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy94eWNoYXJ0L3h5Y2hhcnREYi50c1xudmFyIHBsb3RJbmRleCA9IDA7XG52YXIgdG1wU1ZHR3JvdXA7XG52YXIgeHlDaGFydENvbmZpZyA9IGdldENoYXJ0RGVmYXVsdENvbmZpZygpO1xudmFyIHh5Q2hhcnRUaGVtZUNvbmZpZyA9IGdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnKCk7XG52YXIgeHlDaGFydERhdGEgPSBnZXRDaGFydERlZmF1bHREYXRhKCk7XG52YXIgcGxvdENvbG9yUGFsZXR0ZSA9IHh5Q2hhcnRUaGVtZUNvbmZpZy5wbG90Q29sb3JQYWxldHRlLnNwbGl0KFwiLFwiKS5tYXAoKGNvbG9yKSA9PiBjb2xvci50cmltKCkpO1xudmFyIGhhc1NldFhBeGlzID0gZmFsc2U7XG52YXIgaGFzU2V0WUF4aXMgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnKCkge1xuICBjb25zdCBkZWZhdWx0VGhlbWVWYXJpYWJsZXMgPSBnZXRUaGVtZVZhcmlhYmxlcygpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgcmV0dXJuIGNsZWFuQW5kTWVyZ2UoZGVmYXVsdFRoZW1lVmFyaWFibGVzLnh5Q2hhcnQsIGNvbmZpZy50aGVtZVZhcmlhYmxlcy54eUNoYXJ0KTtcbn1cbl9fbmFtZShnZXRDaGFydERlZmF1bHRUaGVtZUNvbmZpZywgXCJnZXRDaGFydERlZmF1bHRUaGVtZUNvbmZpZ1wiKTtcbmZ1bmN0aW9uIGdldENoYXJ0RGVmYXVsdENvbmZpZygpIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIHJldHVybiBjbGVhbkFuZE1lcmdlKFxuICAgIGRlZmF1bHRDb25maWdfZGVmYXVsdC54eUNoYXJ0LFxuICAgIGNvbmZpZy54eUNoYXJ0XG4gICk7XG59XG5fX25hbWUoZ2V0Q2hhcnREZWZhdWx0Q29uZmlnLCBcImdldENoYXJ0RGVmYXVsdENvbmZpZ1wiKTtcbmZ1bmN0aW9uIGdldENoYXJ0RGVmYXVsdERhdGEoKSB7XG4gIHJldHVybiB7XG4gICAgeUF4aXM6IHtcbiAgICAgIHR5cGU6IFwibGluZWFyXCIsXG4gICAgICB0aXRsZTogXCJcIixcbiAgICAgIG1pbjogSW5maW5pdHksXG4gICAgICBtYXg6IC1JbmZpbml0eVxuICAgIH0sXG4gICAgeEF4aXM6IHtcbiAgICAgIHR5cGU6IFwiYmFuZFwiLFxuICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICBjYXRlZ29yaWVzOiBbXVxuICAgIH0sXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgcGxvdHM6IFtdXG4gIH07XG59XG5fX25hbWUoZ2V0Q2hhcnREZWZhdWx0RGF0YSwgXCJnZXRDaGFydERlZmF1bHREYXRhXCIpO1xuZnVuY3Rpb24gdGV4dFNhbml0aXplcih0ZXh0KSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICByZXR1cm4gc2FuaXRpemVUZXh0KHRleHQudHJpbSgpLCBjb25maWcpO1xufVxuX19uYW1lKHRleHRTYW5pdGl6ZXIsIFwidGV4dFNhbml0aXplclwiKTtcbmZ1bmN0aW9uIHNldFRtcFNWR0coU1ZHRykge1xuICB0bXBTVkdHcm91cCA9IFNWR0c7XG59XG5fX25hbWUoc2V0VG1wU1ZHRywgXCJzZXRUbXBTVkdHXCIpO1xuZnVuY3Rpb24gc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pIHtcbiAgaWYgKG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgIHh5Q2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICB9IGVsc2Uge1xuICAgIHh5Q2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcbiAgfVxufVxuX19uYW1lKHNldE9yaWVudGF0aW9uLCBcInNldE9yaWVudGF0aW9uXCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNUaXRsZSh0aXRsZSkge1xuICB4eUNoYXJ0RGF0YS54QXhpcy50aXRsZSA9IHRleHRTYW5pdGl6ZXIodGl0bGUudGV4dCk7XG59XG5fX25hbWUoc2V0WEF4aXNUaXRsZSwgXCJzZXRYQXhpc1RpdGxlXCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNSYW5nZURhdGEobWluLCBtYXgpIHtcbiAgeHlDaGFydERhdGEueEF4aXMgPSB7IHR5cGU6IFwibGluZWFyXCIsIHRpdGxlOiB4eUNoYXJ0RGF0YS54QXhpcy50aXRsZSwgbWluLCBtYXggfTtcbiAgaGFzU2V0WEF4aXMgPSB0cnVlO1xufVxuX19uYW1lKHNldFhBeGlzUmFuZ2VEYXRhLCBcInNldFhBeGlzUmFuZ2VEYXRhXCIpO1xuZnVuY3Rpb24gc2V0WEF4aXNCYW5kKGNhdGVnb3JpZXMpIHtcbiAgeHlDaGFydERhdGEueEF4aXMgPSB7XG4gICAgdHlwZTogXCJiYW5kXCIsXG4gICAgdGl0bGU6IHh5Q2hhcnREYXRhLnhBeGlzLnRpdGxlLFxuICAgIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMubWFwKChjKSA9PiB0ZXh0U2FuaXRpemVyKGMudGV4dCkpXG4gIH07XG4gIGhhc1NldFhBeGlzID0gdHJ1ZTtcbn1cbl9fbmFtZShzZXRYQXhpc0JhbmQsIFwic2V0WEF4aXNCYW5kXCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNUaXRsZSh0aXRsZSkge1xuICB4eUNoYXJ0RGF0YS55QXhpcy50aXRsZSA9IHRleHRTYW5pdGl6ZXIodGl0bGUudGV4dCk7XG59XG5fX25hbWUoc2V0WUF4aXNUaXRsZSwgXCJzZXRZQXhpc1RpdGxlXCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNSYW5nZURhdGEobWluLCBtYXgpIHtcbiAgeHlDaGFydERhdGEueUF4aXMgPSB7IHR5cGU6IFwibGluZWFyXCIsIHRpdGxlOiB4eUNoYXJ0RGF0YS55QXhpcy50aXRsZSwgbWluLCBtYXggfTtcbiAgaGFzU2V0WUF4aXMgPSB0cnVlO1xufVxuX19uYW1lKHNldFlBeGlzUmFuZ2VEYXRhLCBcInNldFlBeGlzUmFuZ2VEYXRhXCIpO1xuZnVuY3Rpb24gc2V0WUF4aXNSYW5nZUZyb21QbG90RGF0YShkYXRhKSB7XG4gIGNvbnN0IG1pblZhbHVlID0gTWF0aC5taW4oLi4uZGF0YSk7XG4gIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uZGF0YSk7XG4gIGNvbnN0IHByZXZNaW5WYWx1ZSA9IGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueUF4aXMpID8geHlDaGFydERhdGEueUF4aXMubWluIDogSW5maW5pdHk7XG4gIGNvbnN0IHByZXZNYXhWYWx1ZSA9IGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueUF4aXMpID8geHlDaGFydERhdGEueUF4aXMubWF4IDogLUluZmluaXR5O1xuICB4eUNoYXJ0RGF0YS55QXhpcyA9IHtcbiAgICB0eXBlOiBcImxpbmVhclwiLFxuICAgIHRpdGxlOiB4eUNoYXJ0RGF0YS55QXhpcy50aXRsZSxcbiAgICBtaW46IE1hdGgubWluKHByZXZNaW5WYWx1ZSwgbWluVmFsdWUpLFxuICAgIG1heDogTWF0aC5tYXgocHJldk1heFZhbHVlLCBtYXhWYWx1ZSlcbiAgfTtcbn1cbl9fbmFtZShzZXRZQXhpc1JhbmdlRnJvbVBsb3REYXRhLCBcInNldFlBeGlzUmFuZ2VGcm9tUGxvdERhdGFcIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5KGRhdGEpIHtcbiAgbGV0IHJldERhdGEgPSBbXTtcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHJldERhdGE7XG4gIH1cbiAgaWYgKCFoYXNTZXRYQXhpcykge1xuICAgIGNvbnN0IHByZXZNaW5WYWx1ZSA9IGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueEF4aXMpID8geHlDaGFydERhdGEueEF4aXMubWluIDogSW5maW5pdHk7XG4gICAgY29uc3QgcHJldk1heFZhbHVlID0gaXNMaW5lYXJBeGlzRGF0YSh4eUNoYXJ0RGF0YS54QXhpcykgPyB4eUNoYXJ0RGF0YS54QXhpcy5tYXggOiAtSW5maW5pdHk7XG4gICAgc2V0WEF4aXNSYW5nZURhdGEoTWF0aC5taW4ocHJldk1pblZhbHVlLCAxKSwgTWF0aC5tYXgocHJldk1heFZhbHVlLCBkYXRhLmxlbmd0aCkpO1xuICB9XG4gIGlmICghaGFzU2V0WUF4aXMpIHtcbiAgICBzZXRZQXhpc1JhbmdlRnJvbVBsb3REYXRhKGRhdGEpO1xuICB9XG4gIGlmIChpc0JhbmRBeGlzRGF0YSh4eUNoYXJ0RGF0YS54QXhpcykpIHtcbiAgICByZXREYXRhID0geHlDaGFydERhdGEueEF4aXMuY2F0ZWdvcmllcy5tYXAoKGMsIGkpID0+IFtjLCBkYXRhW2ldXSk7XG4gIH1cbiAgaWYgKGlzTGluZWFyQXhpc0RhdGEoeHlDaGFydERhdGEueEF4aXMpKSB7XG4gICAgY29uc3QgbWluID0geHlDaGFydERhdGEueEF4aXMubWluO1xuICAgIGNvbnN0IG1heCA9IHh5Q2hhcnREYXRhLnhBeGlzLm1heDtcbiAgICBjb25zdCBzdGVwID0gKG1heCAtIG1pbikgLyAoZGF0YS5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IG1pbjsgaSA8PSBtYXg7IGkgKz0gc3RlcCkge1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKGAke2l9YCk7XG4gICAgfVxuICAgIHJldERhdGEgPSBjYXRlZ29yaWVzLm1hcCgoYywgaSkgPT4gW2MsIGRhdGFbaV1dKTtcbiAgfVxuICByZXR1cm4gcmV0RGF0YTtcbn1cbl9fbmFtZSh0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5LCBcInRyYW5zZm9ybURhdGFXaXRob3V0Q2F0ZWdvcnlcIik7XG5mdW5jdGlvbiBnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZShwbG90SW5kZXgyKSB7XG4gIHJldHVybiBwbG90Q29sb3JQYWxldHRlW3Bsb3RJbmRleDIgPT09IDAgPyAwIDogcGxvdEluZGV4MiAlIHBsb3RDb2xvclBhbGV0dGUubGVuZ3RoXTtcbn1cbl9fbmFtZShnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZSwgXCJnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZVwiKTtcbmZ1bmN0aW9uIHNldExpbmVEYXRhKHRpdGxlLCBkYXRhKSB7XG4gIGNvbnN0IHBsb3REYXRhID0gdHJhbnNmb3JtRGF0YVdpdGhvdXRDYXRlZ29yeShkYXRhKTtcbiAgeHlDaGFydERhdGEucGxvdHMucHVzaCh7XG4gICAgdHlwZTogXCJsaW5lXCIsXG4gICAgc3Ryb2tlRmlsbDogZ2V0UGxvdENvbG9yRnJvbVBhbGV0dGUocGxvdEluZGV4KSxcbiAgICBzdHJva2VXaWR0aDogMixcbiAgICBkYXRhOiBwbG90RGF0YVxuICB9KTtcbiAgcGxvdEluZGV4Kys7XG59XG5fX25hbWUoc2V0TGluZURhdGEsIFwic2V0TGluZURhdGFcIik7XG5mdW5jdGlvbiBzZXRCYXJEYXRhKHRpdGxlLCBkYXRhKSB7XG4gIGNvbnN0IHBsb3REYXRhID0gdHJhbnNmb3JtRGF0YVdpdGhvdXRDYXRlZ29yeShkYXRhKTtcbiAgeHlDaGFydERhdGEucGxvdHMucHVzaCh7XG4gICAgdHlwZTogXCJiYXJcIixcbiAgICBmaWxsOiBnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZShwbG90SW5kZXgpLFxuICAgIGRhdGE6IHBsb3REYXRhXG4gIH0pO1xuICBwbG90SW5kZXgrKztcbn1cbl9fbmFtZShzZXRCYXJEYXRhLCBcInNldEJhckRhdGFcIik7XG5mdW5jdGlvbiBnZXREcmF3YWJsZUVsZW0oKSB7XG4gIGlmICh4eUNoYXJ0RGF0YS5wbG90cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBFcnJvcihcIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGFcIik7XG4gIH1cbiAgeHlDaGFydERhdGEudGl0bGUgPSBnZXREaWFncmFtVGl0bGUoKTtcbiAgcmV0dXJuIFhZQ2hhcnRCdWlsZGVyLmJ1aWxkKHh5Q2hhcnRDb25maWcsIHh5Q2hhcnREYXRhLCB4eUNoYXJ0VGhlbWVDb25maWcsIHRtcFNWR0dyb3VwKTtcbn1cbl9fbmFtZShnZXREcmF3YWJsZUVsZW0sIFwiZ2V0RHJhd2FibGVFbGVtXCIpO1xuZnVuY3Rpb24gZ2V0Q2hhcnRUaGVtZUNvbmZpZygpIHtcbiAgcmV0dXJuIHh5Q2hhcnRUaGVtZUNvbmZpZztcbn1cbl9fbmFtZShnZXRDaGFydFRoZW1lQ29uZmlnLCBcImdldENoYXJ0VGhlbWVDb25maWdcIik7XG5mdW5jdGlvbiBnZXRDaGFydENvbmZpZygpIHtcbiAgcmV0dXJuIHh5Q2hhcnRDb25maWc7XG59XG5fX25hbWUoZ2V0Q2hhcnRDb25maWcsIFwiZ2V0Q2hhcnRDb25maWdcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY2xlYXIoKTtcbiAgcGxvdEluZGV4ID0gMDtcbiAgeHlDaGFydENvbmZpZyA9IGdldENoYXJ0RGVmYXVsdENvbmZpZygpO1xuICB4eUNoYXJ0RGF0YSA9IGdldENoYXJ0RGVmYXVsdERhdGEoKTtcbiAgeHlDaGFydFRoZW1lQ29uZmlnID0gZ2V0Q2hhcnREZWZhdWx0VGhlbWVDb25maWcoKTtcbiAgcGxvdENvbG9yUGFsZXR0ZSA9IHh5Q2hhcnRUaGVtZUNvbmZpZy5wbG90Q29sb3JQYWxldHRlLnNwbGl0KFwiLFwiKS5tYXAoKGNvbG9yKSA9PiBjb2xvci50cmltKCkpO1xuICBoYXNTZXRYQXhpcyA9IGZhbHNlO1xuICBoYXNTZXRZQXhpcyA9IGZhbHNlO1xufSwgXCJjbGVhclwiKTtcbnZhciB4eWNoYXJ0RGJfZGVmYXVsdCA9IHtcbiAgZ2V0RHJhd2FibGVFbGVtLFxuICBjbGVhcjogY2xlYXIyLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldE9yaWVudGF0aW9uLFxuICBzZXRYQXhpc1RpdGxlLFxuICBzZXRYQXhpc1JhbmdlRGF0YSxcbiAgc2V0WEF4aXNCYW5kLFxuICBzZXRZQXhpc1RpdGxlLFxuICBzZXRZQXhpc1JhbmdlRGF0YSxcbiAgc2V0TGluZURhdGEsXG4gIHNldEJhckRhdGEsXG4gIHNldFRtcFNWR0csXG4gIGdldENoYXJ0VGhlbWVDb25maWcsXG4gIGdldENoYXJ0Q29uZmlnXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMveHljaGFydC94eWNoYXJ0UmVuZGVyZXIudHNcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopID0+IHtcbiAgY29uc3QgZGIgPSBkaWFnT2JqLmRiO1xuICBjb25zdCB0aGVtZUNvbmZpZyA9IGRiLmdldENoYXJ0VGhlbWVDb25maWcoKTtcbiAgY29uc3QgY2hhcnRDb25maWcgPSBkYi5nZXRDaGFydENvbmZpZygpO1xuICBmdW5jdGlvbiBnZXREb21pbmFudEJhc2VMaW5lKGhvcml6b250YWxQb3MpIHtcbiAgICByZXR1cm4gaG9yaXpvbnRhbFBvcyA9PT0gXCJ0b3BcIiA/IFwidGV4dC1iZWZvcmUtZWRnZVwiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBfX25hbWUoZ2V0RG9taW5hbnRCYXNlTGluZSwgXCJnZXREb21pbmFudEJhc2VMaW5lXCIpO1xuICBmdW5jdGlvbiBnZXRUZXh0QW5jaG9yKHZlcnRpY2FsUG9zKSB7XG4gICAgcmV0dXJuIHZlcnRpY2FsUG9zID09PSBcImxlZnRcIiA/IFwic3RhcnRcIiA6IHZlcnRpY2FsUG9zID09PSBcInJpZ2h0XCIgPyBcImVuZFwiIDogXCJtaWRkbGVcIjtcbiAgfVxuICBfX25hbWUoZ2V0VGV4dEFuY2hvciwgXCJnZXRUZXh0QW5jaG9yXCIpO1xuICBmdW5jdGlvbiBnZXRUZXh0VHJhbnNmb3JtYXRpb24oZGF0YSkge1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZGF0YS54fSwgJHtkYXRhLnl9KSByb3RhdGUoJHtkYXRhLnJvdGF0aW9uIHx8IDB9KWA7XG4gIH1cbiAgX19uYW1lKGdldFRleHRUcmFuc2Zvcm1hdGlvbiwgXCJnZXRUZXh0VHJhbnNmb3JtYXRpb25cIik7XG4gIGxvZy5kZWJ1ZyhcIlJlbmRlcmluZyB4eWNoYXJ0IGNoYXJ0XFxuXCIgKyB0eHQpO1xuICBjb25zdCBzdmcgPSBzZWxlY3RTdmdFbGVtZW50KGlkKTtcbiAgY29uc3QgZ3JvdXAgPSBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYWluXCIpO1xuICBjb25zdCBiYWNrZ3JvdW5kID0gZ3JvdXAuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwid2lkdGhcIiwgY2hhcnRDb25maWcud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgY2hhcnRDb25maWcuaGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJiYWNrZ3JvdW5kXCIpO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgY2hhcnRDb25maWcuaGVpZ2h0LCBjaGFydENvbmZpZy53aWR0aCwgdHJ1ZSk7XG4gIHN2Zy5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7Y2hhcnRDb25maWcud2lkdGh9ICR7Y2hhcnRDb25maWcuaGVpZ2h0fWApO1xuICBiYWNrZ3JvdW5kLmF0dHIoXCJmaWxsXCIsIHRoZW1lQ29uZmlnLmJhY2tncm91bmRDb2xvcik7XG4gIGRiLnNldFRtcFNWR0coc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibWVybWFpZC10bXAtZ3JvdXBcIikpO1xuICBjb25zdCBzaGFwZXMgPSBkYi5nZXREcmF3YWJsZUVsZW0oKTtcbiAgY29uc3QgZ3JvdXBzID0ge307XG4gIGZ1bmN0aW9uIGdldEdyb3VwKGdMaXN0KSB7XG4gICAgbGV0IGVsZW0gPSBncm91cDtcbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IFtpXSBvZiBnTGlzdC5lbnRyaWVzKCkpIHtcbiAgICAgIGxldCBwYXJlbnQgPSBncm91cDtcbiAgICAgIGlmIChpID4gMCAmJiBncm91cHNbcHJlZml4XSkge1xuICAgICAgICBwYXJlbnQgPSBncm91cHNbcHJlZml4XTtcbiAgICAgIH1cbiAgICAgIHByZWZpeCArPSBnTGlzdFtpXTtcbiAgICAgIGVsZW0gPSBncm91cHNbcHJlZml4XTtcbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBlbGVtID0gZ3JvdXBzW3ByZWZpeF0gPSBwYXJlbnQuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgZ0xpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbTtcbiAgfVxuICBfX25hbWUoZ2V0R3JvdXAsIFwiZ2V0R3JvdXBcIik7XG4gIGZvciAoY29uc3Qgc2hhcGUgb2Ygc2hhcGVzKSB7XG4gICAgaWYgKHNoYXBlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2hhcGVHcm91cCA9IGdldEdyb3VwKHNoYXBlLmdyb3VwVGV4dHMpO1xuICAgIHN3aXRjaCAoc2hhcGUudHlwZSkge1xuICAgICAgY2FzZSBcInJlY3RcIjpcbiAgICAgICAgc2hhcGVHcm91cC5zZWxlY3RBbGwoXCJyZWN0XCIpLmRhdGEoc2hhcGUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIChkYXRhKSA9PiBkYXRhLngpLmF0dHIoXCJ5XCIsIChkYXRhKSA9PiBkYXRhLnkpLmF0dHIoXCJ3aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS53aWR0aCkuYXR0cihcImhlaWdodFwiLCAoZGF0YSkgPT4gZGF0YS5oZWlnaHQpLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpLmF0dHIoXCJzdHJva2VcIiwgKGRhdGEpID0+IGRhdGEuc3Ryb2tlRmlsbCkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAoZGF0YSkgPT4gZGF0YS5zdHJva2VXaWR0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgc2hhcGVHcm91cC5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEoc2hhcGUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJmaWxsXCIsIChkYXRhKSA9PiBkYXRhLmZpbGwpLmF0dHIoXCJmb250LXNpemVcIiwgKGRhdGEpID0+IGRhdGEuZm9udFNpemUpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCAoZGF0YSkgPT4gZ2V0RG9taW5hbnRCYXNlTGluZShkYXRhLnZlcnRpY2FsUG9zKSkuYXR0cihcInRleHQtYW5jaG9yXCIsIChkYXRhKSA9PiBnZXRUZXh0QW5jaG9yKGRhdGEuaG9yaXpvbnRhbFBvcykpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGRhdGEpID0+IGdldFRleHRUcmFuc2Zvcm1hdGlvbihkYXRhKSkudGV4dCgoZGF0YSkgPT4gZGF0YS50ZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICBzaGFwZUdyb3VwLnNlbGVjdEFsbChcInBhdGhcIikuZGF0YShzaGFwZS5kYXRhKS5lbnRlcigpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgKGRhdGEpID0+IGRhdGEucGF0aCkuYXR0cihcImZpbGxcIiwgKGRhdGEpID0+IGRhdGEuZmlsbCA/IGRhdGEuZmlsbCA6IFwibm9uZVwiKS5hdHRyKFwic3Ryb2tlXCIsIChkYXRhKSA9PiBkYXRhLnN0cm9rZUZpbGwpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgKGRhdGEpID0+IGRhdGEuc3Ryb2tlV2lkdGgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn0sIFwiZHJhd1wiKTtcbnZhciB4eWNoYXJ0UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQveHljaGFydERpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHh5Y2hhcnRfZGVmYXVsdCxcbiAgZGI6IHh5Y2hhcnREYl9kZWZhdWx0LFxuICByZW5kZXJlcjogeHljaGFydFJlbmRlcmVyX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb21tb25fZGVmYXVsdCxcbiAgY29uZmlndXJlU3ZnU2l6ZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgbG9nLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9yZXF1aXJlbWVudC9wYXJzZXIvcmVxdWlyZW1lbnREaWFncmFtLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgM10sICRWMSA9IFsxLCA0XSwgJFYyID0gWzEsIDVdLCAkVjMgPSBbMSwgNl0sICRWNCA9IFs1LCA2LCA4LCA5LCAxMSwgMTMsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDQ0LCA2MiwgNjNdLCAkVjUgPSBbMSwgMThdLCAkVjYgPSBbMiwgN10sICRWNyA9IFsxLCAyMl0sICRWOCA9IFsxLCAyM10sICRWOSA9IFsxLCAyNF0sICRWYSA9IFsxLCAyNV0sICRWYiA9IFsxLCAyNl0sICRWYyA9IFsxLCAyN10sICRWZCA9IFsxLCAyMF0sICRWZSA9IFsxLCAyOF0sICRWZiA9IFsxLCAyOV0sICRWZyA9IFs2MiwgNjNdLCAkVmggPSBbNSwgOCwgOSwgMTEsIDEzLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCA0NCwgNTEsIDUzLCA2MiwgNjNdLCAkVmkgPSBbMSwgNDddLCAkVmogPSBbMSwgNDhdLCAkVmsgPSBbMSwgNDldLCAkVmwgPSBbMSwgNTBdLCAkVm0gPSBbMSwgNTFdLCAkVm4gPSBbMSwgNTJdLCAkVm8gPSBbMSwgNTNdLCAkVnAgPSBbNTMsIDU0XSwgJFZxID0gWzEsIDY0XSwgJFZyID0gWzEsIDYwXSwgJFZzID0gWzEsIDYxXSwgJFZ0ID0gWzEsIDYyXSwgJFZ1ID0gWzEsIDYzXSwgJFZ2ID0gWzEsIDY1XSwgJFZ3ID0gWzEsIDY5XSwgJFZ4ID0gWzEsIDcwXSwgJFZ5ID0gWzEsIDY3XSwgJFZ6ID0gWzEsIDY4XSwgJFZBID0gWzUsIDgsIDksIDExLCAxMywgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgNDQsIDYyLCA2M107XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcImRpcmVjdGl2ZVwiOiA0LCBcIk5FV0xJTkVcIjogNSwgXCJSRFwiOiA2LCBcImRpYWdyYW1cIjogNywgXCJFT0ZcIjogOCwgXCJhY2NfdGl0bGVcIjogOSwgXCJhY2NfdGl0bGVfdmFsdWVcIjogMTAsIFwiYWNjX2Rlc2NyXCI6IDExLCBcImFjY19kZXNjcl92YWx1ZVwiOiAxMiwgXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI6IDEzLCBcInJlcXVpcmVtZW50RGVmXCI6IDE0LCBcImVsZW1lbnREZWZcIjogMTUsIFwicmVsYXRpb25zaGlwRGVmXCI6IDE2LCBcInJlcXVpcmVtZW50VHlwZVwiOiAxNywgXCJyZXF1aXJlbWVudE5hbWVcIjogMTgsIFwiU1RSVUNUX1NUQVJUXCI6IDE5LCBcInJlcXVpcmVtZW50Qm9keVwiOiAyMCwgXCJJRFwiOiAyMSwgXCJDT0xPTlNFUFwiOiAyMiwgXCJpZFwiOiAyMywgXCJURVhUXCI6IDI0LCBcInRleHRcIjogMjUsIFwiUklTS1wiOiAyNiwgXCJyaXNrTGV2ZWxcIjogMjcsIFwiVkVSSUZZTVRIRFwiOiAyOCwgXCJ2ZXJpZnlUeXBlXCI6IDI5LCBcIlNUUlVDVF9TVE9QXCI6IDMwLCBcIlJFUVVJUkVNRU5UXCI6IDMxLCBcIkZVTkNUSU9OQUxfUkVRVUlSRU1FTlRcIjogMzIsIFwiSU5URVJGQUNFX1JFUVVJUkVNRU5UXCI6IDMzLCBcIlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UXCI6IDM0LCBcIlBIWVNJQ0FMX1JFUVVJUkVNRU5UXCI6IDM1LCBcIkRFU0lHTl9DT05TVFJBSU5UXCI6IDM2LCBcIkxPV19SSVNLXCI6IDM3LCBcIk1FRF9SSVNLXCI6IDM4LCBcIkhJR0hfUklTS1wiOiAzOSwgXCJWRVJJRllfQU5BTFlTSVNcIjogNDAsIFwiVkVSSUZZX0RFTU9OU1RSQVRJT05cIjogNDEsIFwiVkVSSUZZX0lOU1BFQ1RJT05cIjogNDIsIFwiVkVSSUZZX1RFU1RcIjogNDMsIFwiRUxFTUVOVFwiOiA0NCwgXCJlbGVtZW50TmFtZVwiOiA0NSwgXCJlbGVtZW50Qm9keVwiOiA0NiwgXCJUWVBFXCI6IDQ3LCBcInR5cGVcIjogNDgsIFwiRE9DUkVGXCI6IDQ5LCBcInJlZlwiOiA1MCwgXCJFTkRfQVJST1dfTFwiOiA1MSwgXCJyZWxhdGlvbnNoaXBcIjogNTIsIFwiTElORVwiOiA1MywgXCJFTkRfQVJST1dfUlwiOiA1NCwgXCJDT05UQUlOU1wiOiA1NSwgXCJDT1BJRVNcIjogNTYsIFwiREVSSVZFU1wiOiA1NywgXCJTQVRJU0ZJRVNcIjogNTgsIFwiVkVSSUZJRVNcIjogNTksIFwiUkVGSU5FU1wiOiA2MCwgXCJUUkFDRVNcIjogNjEsIFwidW5xU3RyaW5nXCI6IDYyLCBcInFTdHJpbmdcIjogNjMsIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA1OiBcIk5FV0xJTkVcIiwgNjogXCJSRFwiLCA4OiBcIkVPRlwiLCA5OiBcImFjY190aXRsZVwiLCAxMDogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMTE6IFwiYWNjX2Rlc2NyXCIsIDEyOiBcImFjY19kZXNjcl92YWx1ZVwiLCAxMzogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDE5OiBcIlNUUlVDVF9TVEFSVFwiLCAyMTogXCJJRFwiLCAyMjogXCJDT0xPTlNFUFwiLCAyNDogXCJURVhUXCIsIDI2OiBcIlJJU0tcIiwgMjg6IFwiVkVSSUZZTVRIRFwiLCAzMDogXCJTVFJVQ1RfU1RPUFwiLCAzMTogXCJSRVFVSVJFTUVOVFwiLCAzMjogXCJGVU5DVElPTkFMX1JFUVVJUkVNRU5UXCIsIDMzOiBcIklOVEVSRkFDRV9SRVFVSVJFTUVOVFwiLCAzNDogXCJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVFwiLCAzNTogXCJQSFlTSUNBTF9SRVFVSVJFTUVOVFwiLCAzNjogXCJERVNJR05fQ09OU1RSQUlOVFwiLCAzNzogXCJMT1dfUklTS1wiLCAzODogXCJNRURfUklTS1wiLCAzOTogXCJISUdIX1JJU0tcIiwgNDA6IFwiVkVSSUZZX0FOQUxZU0lTXCIsIDQxOiBcIlZFUklGWV9ERU1PTlNUUkFUSU9OXCIsIDQyOiBcIlZFUklGWV9JTlNQRUNUSU9OXCIsIDQzOiBcIlZFUklGWV9URVNUXCIsIDQ0OiBcIkVMRU1FTlRcIiwgNDc6IFwiVFlQRVwiLCA0OTogXCJET0NSRUZcIiwgNTE6IFwiRU5EX0FSUk9XX0xcIiwgNTM6IFwiTElORVwiLCA1NDogXCJFTkRfQVJST1dfUlwiLCA1NTogXCJDT05UQUlOU1wiLCA1NjogXCJDT1BJRVNcIiwgNTc6IFwiREVSSVZFU1wiLCA1ODogXCJTQVRJU0ZJRVNcIiwgNTk6IFwiVkVSSUZJRVNcIiwgNjA6IFwiUkVGSU5FU1wiLCA2MTogXCJUUkFDRVNcIiwgNjI6IFwidW5xU3RyaW5nXCIsIDYzOiBcInFTdHJpbmdcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAzXSwgWzMsIDJdLCBbMywgNF0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMV0sIFs3LCAwXSwgWzcsIDJdLCBbNywgMl0sIFs3LCAyXSwgWzcsIDJdLCBbNywgMl0sIFsxNCwgNV0sIFsyMCwgNV0sIFsyMCwgNV0sIFsyMCwgNV0sIFsyMCwgNV0sIFsyMCwgMl0sIFsyMCwgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsxNywgMV0sIFsyNywgMV0sIFsyNywgMV0sIFsyNywgMV0sIFsyOSwgMV0sIFsyOSwgMV0sIFsyOSwgMV0sIFsyOSwgMV0sIFsxNSwgNV0sIFs0NiwgNV0sIFs0NiwgNV0sIFs0NiwgMl0sIFs0NiwgMV0sIFsxNiwgNV0sIFsxNiwgNV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFs1MiwgMV0sIFsxOCwgMV0sIFsxOCwgMV0sIFsyMywgMV0sIFsyMywgMV0sIFsyNSwgMV0sIFsyNSwgMV0sIFs0NSwgMV0sIFs0NSwgMV0sIFs0OCwgMV0sIFs0OCwgMV0sIFs1MCwgMV0sIFs1MCwgMV1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB5eS5hZGRSZXF1aXJlbWVudCgkJFskMCAtIDNdLCAkJFskMCAtIDRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICB5eS5zZXROZXdSZXFJZCgkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5zZXROZXdSZXFUZXh0KCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LnNldE5ld1JlcVJpc2soJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgeXkuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlJpc2tMZXZlbC5MT1dfUklTSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SaXNrTGV2ZWwuTUVEX1JJU0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmlza0xldmVsLkhJR0hfUklTSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgdGhpcy4kID0geXkuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB5eS5hZGRFbGVtZW50KCQkWyQwIC0gM10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHl5LnNldE5ld0VsZW1lbnRUeXBlKCQkWyQwIC0gMl0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIHl5LnNldE5ld0VsZW1lbnREb2NSZWYoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gMl0sICQkWyQwXSwgJCRbJDAgLSA0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb25zaGlwKCQkWyQwIC0gMl0sICQkWyQwIC0gNF0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5DT05UQUlOUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLkNPUElFUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLkRFUklWRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5WRVJJRklFUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5SZWxhdGlvbnNoaXBzLlJFRklORVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgdGhpcy4kID0geXkuUmVsYXRpb25zaGlwcy5UUkFDRVM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDY6ICRWMCwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzIH0sIHsgMTogWzNdIH0sIHsgMzogOCwgNDogMiwgNTogWzEsIDddLCA2OiAkVjAsIDk6ICRWMSwgMTE6ICRWMiwgMTM6ICRWMyB9LCB7IDU6IFsxLCA5XSB9LCB7IDEwOiBbMSwgMTBdIH0sIHsgMTI6IFsxLCAxMV0gfSwgbygkVjQsIFsyLCA2XSksIHsgMzogMTIsIDQ6IDIsIDY6ICRWMCwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzIH0sIHsgMTogWzIsIDJdIH0sIHsgNDogMTcsIDU6ICRWNSwgNzogMTMsIDg6ICRWNiwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzLCAxNDogMTQsIDE1OiAxNSwgMTY6IDE2LCAxNzogMTksIDIzOiAyMSwgMzE6ICRWNywgMzI6ICRWOCwgMzM6ICRWOSwgMzQ6ICRWYSwgMzU6ICRWYiwgMzY6ICRWYywgNDQ6ICRWZCwgNjI6ICRWZSwgNjM6ICRWZiB9LCBvKCRWNCwgWzIsIDRdKSwgbygkVjQsIFsyLCA1XSksIHsgMTogWzIsIDFdIH0sIHsgODogWzEsIDMwXSB9LCB7IDQ6IDE3LCA1OiAkVjUsIDc6IDMxLCA4OiAkVjYsIDk6ICRWMSwgMTE6ICRWMiwgMTM6ICRWMywgMTQ6IDE0LCAxNTogMTUsIDE2OiAxNiwgMTc6IDE5LCAyMzogMjEsIDMxOiAkVjcsIDMyOiAkVjgsIDMzOiAkVjksIDM0OiAkVmEsIDM1OiAkVmIsIDM2OiAkVmMsIDQ0OiAkVmQsIDYyOiAkVmUsIDYzOiAkVmYgfSwgeyA0OiAxNywgNTogJFY1LCA3OiAzMiwgODogJFY2LCA5OiAkVjEsIDExOiAkVjIsIDEzOiAkVjMsIDE0OiAxNCwgMTU6IDE1LCAxNjogMTYsIDE3OiAxOSwgMjM6IDIxLCAzMTogJFY3LCAzMjogJFY4LCAzMzogJFY5LCAzNDogJFZhLCAzNTogJFZiLCAzNjogJFZjLCA0NDogJFZkLCA2MjogJFZlLCA2MzogJFZmIH0sIHsgNDogMTcsIDU6ICRWNSwgNzogMzMsIDg6ICRWNiwgOTogJFYxLCAxMTogJFYyLCAxMzogJFYzLCAxNDogMTQsIDE1OiAxNSwgMTY6IDE2LCAxNzogMTksIDIzOiAyMSwgMzE6ICRWNywgMzI6ICRWOCwgMzM6ICRWOSwgMzQ6ICRWYSwgMzU6ICRWYiwgMzY6ICRWYywgNDQ6ICRWZCwgNjI6ICRWZSwgNjM6ICRWZiB9LCB7IDQ6IDE3LCA1OiAkVjUsIDc6IDM0LCA4OiAkVjYsIDk6ICRWMSwgMTE6ICRWMiwgMTM6ICRWMywgMTQ6IDE0LCAxNTogMTUsIDE2OiAxNiwgMTc6IDE5LCAyMzogMjEsIDMxOiAkVjcsIDMyOiAkVjgsIDMzOiAkVjksIDM0OiAkVmEsIDM1OiAkVmIsIDM2OiAkVmMsIDQ0OiAkVmQsIDYyOiAkVmUsIDYzOiAkVmYgfSwgeyA0OiAxNywgNTogJFY1LCA3OiAzNSwgODogJFY2LCA5OiAkVjEsIDExOiAkVjIsIDEzOiAkVjMsIDE0OiAxNCwgMTU6IDE1LCAxNjogMTYsIDE3OiAxOSwgMjM6IDIxLCAzMTogJFY3LCAzMjogJFY4LCAzMzogJFY5LCAzNDogJFZhLCAzNTogJFZiLCAzNjogJFZjLCA0NDogJFZkLCA2MjogJFZlLCA2MzogJFZmIH0sIHsgMTg6IDM2LCA2MjogWzEsIDM3XSwgNjM6IFsxLCAzOF0gfSwgeyA0NTogMzksIDYyOiBbMSwgNDBdLCA2MzogWzEsIDQxXSB9LCB7IDUxOiBbMSwgNDJdLCA1MzogWzEsIDQzXSB9LCBvKCRWZywgWzIsIDIwXSksIG8oJFZnLCBbMiwgMjFdKSwgbygkVmcsIFsyLCAyMl0pLCBvKCRWZywgWzIsIDIzXSksIG8oJFZnLCBbMiwgMjRdKSwgbygkVmcsIFsyLCAyNV0pLCBvKCRWaCwgWzIsIDQ5XSksIG8oJFZoLCBbMiwgNTBdKSwgeyAxOiBbMiwgM10gfSwgeyA4OiBbMiwgOF0gfSwgeyA4OiBbMiwgOV0gfSwgeyA4OiBbMiwgMTBdIH0sIHsgODogWzIsIDExXSB9LCB7IDg6IFsyLCAxMl0gfSwgeyAxOTogWzEsIDQ0XSB9LCB7IDE5OiBbMiwgNDddIH0sIHsgMTk6IFsyLCA0OF0gfSwgeyAxOTogWzEsIDQ1XSB9LCB7IDE5OiBbMiwgNTNdIH0sIHsgMTk6IFsyLCA1NF0gfSwgeyA1MjogNDYsIDU1OiAkVmksIDU2OiAkVmosIDU3OiAkVmssIDU4OiAkVmwsIDU5OiAkVm0sIDYwOiAkVm4sIDYxOiAkVm8gfSwgeyA1MjogNTQsIDU1OiAkVmksIDU2OiAkVmosIDU3OiAkVmssIDU4OiAkVmwsIDU5OiAkVm0sIDYwOiAkVm4sIDYxOiAkVm8gfSwgeyA1OiBbMSwgNTVdIH0sIHsgNTogWzEsIDU2XSB9LCB7IDUzOiBbMSwgNTddIH0sIG8oJFZwLCBbMiwgNDBdKSwgbygkVnAsIFsyLCA0MV0pLCBvKCRWcCwgWzIsIDQyXSksIG8oJFZwLCBbMiwgNDNdKSwgbygkVnAsIFsyLCA0NF0pLCBvKCRWcCwgWzIsIDQ1XSksIG8oJFZwLCBbMiwgNDZdKSwgeyA1NDogWzEsIDU4XSB9LCB7IDU6ICRWcSwgMjA6IDU5LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZ3LCAzMDogJFZ4LCA0NjogNjYsIDQ3OiAkVnksIDQ5OiAkVnogfSwgeyAyMzogNzEsIDYyOiAkVmUsIDYzOiAkVmYgfSwgeyAyMzogNzIsIDYyOiAkVmUsIDYzOiAkVmYgfSwgbygkVkEsIFsyLCAxM10pLCB7IDIyOiBbMSwgNzNdIH0sIHsgMjI6IFsxLCA3NF0gfSwgeyAyMjogWzEsIDc1XSB9LCB7IDIyOiBbMSwgNzZdIH0sIHsgNTogJFZxLCAyMDogNzcsIDIxOiAkVnIsIDI0OiAkVnMsIDI2OiAkVnQsIDI4OiAkVnUsIDMwOiAkVnYgfSwgbygkVkEsIFsyLCAxOV0pLCBvKCRWQSwgWzIsIDMzXSksIHsgMjI6IFsxLCA3OF0gfSwgeyAyMjogWzEsIDc5XSB9LCB7IDU6ICRWdywgMzA6ICRWeCwgNDY6IDgwLCA0NzogJFZ5LCA0OTogJFZ6IH0sIG8oJFZBLCBbMiwgMzddKSwgbygkVkEsIFsyLCAzOF0pLCBvKCRWQSwgWzIsIDM5XSksIHsgMjM6IDgxLCA2MjogJFZlLCA2MzogJFZmIH0sIHsgMjU6IDgyLCA2MjogWzEsIDgzXSwgNjM6IFsxLCA4NF0gfSwgeyAyNzogODUsIDM3OiBbMSwgODZdLCAzODogWzEsIDg3XSwgMzk6IFsxLCA4OF0gfSwgeyAyOTogODksIDQwOiBbMSwgOTBdLCA0MTogWzEsIDkxXSwgNDI6IFsxLCA5Ml0sIDQzOiBbMSwgOTNdIH0sIG8oJFZBLCBbMiwgMThdKSwgeyA0ODogOTQsIDYyOiBbMSwgOTVdLCA2MzogWzEsIDk2XSB9LCB7IDUwOiA5NywgNjI6IFsxLCA5OF0sIDYzOiBbMSwgOTldIH0sIG8oJFZBLCBbMiwgMzZdKSwgeyA1OiBbMSwgMTAwXSB9LCB7IDU6IFsxLCAxMDFdIH0sIHsgNTogWzIsIDUxXSB9LCB7IDU6IFsyLCA1Ml0gfSwgeyA1OiBbMSwgMTAyXSB9LCB7IDU6IFsyLCAyNl0gfSwgeyA1OiBbMiwgMjddIH0sIHsgNTogWzIsIDI4XSB9LCB7IDU6IFsxLCAxMDNdIH0sIHsgNTogWzIsIDI5XSB9LCB7IDU6IFsyLCAzMF0gfSwgeyA1OiBbMiwgMzFdIH0sIHsgNTogWzIsIDMyXSB9LCB7IDU6IFsxLCAxMDRdIH0sIHsgNTogWzIsIDU1XSB9LCB7IDU6IFsyLCA1Nl0gfSwgeyA1OiBbMSwgMTA1XSB9LCB7IDU6IFsyLCA1N10gfSwgeyA1OiBbMiwgNThdIH0sIHsgNTogJFZxLCAyMDogMTA2LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZxLCAyMDogMTA3LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZxLCAyMDogMTA4LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZxLCAyMDogMTA5LCAyMTogJFZyLCAyNDogJFZzLCAyNjogJFZ0LCAyODogJFZ1LCAzMDogJFZ2IH0sIHsgNTogJFZ3LCAzMDogJFZ4LCA0NjogMTEwLCA0NzogJFZ5LCA0OTogJFZ6IH0sIHsgNTogJFZ3LCAzMDogJFZ4LCA0NjogMTExLCA0NzogJFZ5LCA0OTogJFZ6IH0sIG8oJFZBLCBbMiwgMTRdKSwgbygkVkEsIFsyLCAxNV0pLCBvKCRWQSwgWzIsIDE2XSksIG8oJFZBLCBbMiwgMTddKSwgbygkVkEsIFsyLCAzNF0pLCBvKCRWQSwgWzIsIDM1XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDg6IFsyLCAyXSwgMTI6IFsyLCAxXSwgMzA6IFsyLCAzXSwgMzE6IFsyLCA4XSwgMzI6IFsyLCA5XSwgMzM6IFsyLCAxMF0sIDM0OiBbMiwgMTFdLCAzNTogWzIsIDEyXSwgMzc6IFsyLCA0N10sIDM4OiBbMiwgNDhdLCA0MDogWzIsIDUzXSwgNDE6IFsyLCA1NF0sIDgzOiBbMiwgNTFdLCA4NDogWzIsIDUyXSwgODY6IFsyLCAyNl0sIDg3OiBbMiwgMjddLCA4ODogWzIsIDI4XSwgOTA6IFsyLCAyOV0sIDkxOiBbMiwgMzBdLCA5MjogWzIsIDMxXSwgOTM6IFsyLCAzMl0sIDk1OiBbMiwgNTVdLCA5NjogWzIsIDU2XSwgOTg6IFsyLCA1N10sIDk5OiBbMiwgNThdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBcInRpdGxlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfdGl0bGVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gMjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAyNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDM3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gNTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gNTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICByZXR1cm4gNjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgcmV0dXJuIDQ3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gNTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIHJldHVybiA1MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gXCJxU3RyaW5nXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/OnRpdGxlXFxzW14jXFxuO10rKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzooXFxyP1xcbikrKS9pLCAvXig/OlxccyspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JVteXFxuXSopL2ksIC9eKD86JCkvaSwgL14oPzpyZXF1aXJlbWVudERpYWdyYW1cXGIpL2ksIC9eKD86XFx7KS9pLCAvXig/OlxcfSkvaSwgL14oPzo6KS9pLCAvXig/OmlkXFxiKS9pLCAvXig/OnRleHRcXGIpL2ksIC9eKD86cmlza1xcYikvaSwgL14oPzp2ZXJpZnlNZXRob2RcXGIpL2ksIC9eKD86cmVxdWlyZW1lbnRcXGIpL2ksIC9eKD86ZnVuY3Rpb25hbFJlcXVpcmVtZW50XFxiKS9pLCAvXig/OmludGVyZmFjZVJlcXVpcmVtZW50XFxiKS9pLCAvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcXGIpL2ksIC9eKD86cGh5c2ljYWxSZXF1aXJlbWVudFxcYikvaSwgL14oPzpkZXNpZ25Db25zdHJhaW50XFxiKS9pLCAvXig/Omxvd1xcYikvaSwgL14oPzptZWRpdW1cXGIpL2ksIC9eKD86aGlnaFxcYikvaSwgL14oPzphbmFseXNpc1xcYikvaSwgL14oPzpkZW1vbnN0cmF0aW9uXFxiKS9pLCAvXig/Omluc3BlY3Rpb25cXGIpL2ksIC9eKD86dGVzdFxcYikvaSwgL14oPzplbGVtZW50XFxiKS9pLCAvXig/OmNvbnRhaW5zXFxiKS9pLCAvXig/OmNvcGllc1xcYikvaSwgL14oPzpkZXJpdmVzXFxiKS9pLCAvXig/OnNhdGlzZmllc1xcYikvaSwgL14oPzp2ZXJpZmllc1xcYikvaSwgL14oPzpyZWZpbmVzXFxiKS9pLCAvXig/OnRyYWNlc1xcYikvaSwgL14oPzp0eXBlXFxiKS9pLCAvXig/OmRvY3JlZlxcYikvaSwgL14oPzo8LSkvaSwgL14oPzotPikvaSwgL14oPzotKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86W1xcd11bXlxcclxcblxce1xcPFxcPlxcLVxcPV0qKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbNiwgN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwidW5xU3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJ0b2tlblwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbNDgsIDQ5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJJTklUSUFMXCI6IHsgXCJydWxlc1wiOiBbMCwgMSwgMywgNSwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA1MF0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciByZXF1aXJlbWVudERpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL3JlcXVpcmVtZW50L3JlcXVpcmVtZW50RGIuanNcbnZhciByZWxhdGlvbnMgPSBbXTtcbnZhciBsYXRlc3RSZXF1aXJlbWVudCA9IHt9O1xudmFyIHJlcXVpcmVtZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgbGF0ZXN0RWxlbWVudCA9IHt9O1xudmFyIGVsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBSZXF1aXJlbWVudFR5cGUgPSB7XG4gIFJFUVVJUkVNRU5UOiBcIlJlcXVpcmVtZW50XCIsXG4gIEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IFwiRnVuY3Rpb25hbCBSZXF1aXJlbWVudFwiLFxuICBJTlRFUkZBQ0VfUkVRVUlSRU1FTlQ6IFwiSW50ZXJmYWNlIFJlcXVpcmVtZW50XCIsXG4gIFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOiBcIlBlcmZvcm1hbmNlIFJlcXVpcmVtZW50XCIsXG4gIFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiBcIlBoeXNpY2FsIFJlcXVpcmVtZW50XCIsXG4gIERFU0lHTl9DT05TVFJBSU5UOiBcIkRlc2lnbiBDb25zdHJhaW50XCJcbn07XG52YXIgUmlza0xldmVsID0ge1xuICBMT1dfUklTSzogXCJMb3dcIixcbiAgTUVEX1JJU0s6IFwiTWVkaXVtXCIsXG4gIEhJR0hfUklTSzogXCJIaWdoXCJcbn07XG52YXIgVmVyaWZ5VHlwZSA9IHtcbiAgVkVSSUZZX0FOQUxZU0lTOiBcIkFuYWx5c2lzXCIsXG4gIFZFUklGWV9ERU1PTlNUUkFUSU9OOiBcIkRlbW9uc3RyYXRpb25cIixcbiAgVkVSSUZZX0lOU1BFQ1RJT046IFwiSW5zcGVjdGlvblwiLFxuICBWRVJJRllfVEVTVDogXCJUZXN0XCJcbn07XG52YXIgUmVsYXRpb25zaGlwcyA9IHtcbiAgQ09OVEFJTlM6IFwiY29udGFpbnNcIixcbiAgQ09QSUVTOiBcImNvcGllc1wiLFxuICBERVJJVkVTOiBcImRlcml2ZXNcIixcbiAgU0FUSVNGSUVTOiBcInNhdGlzZmllc1wiLFxuICBWRVJJRklFUzogXCJ2ZXJpZmllc1wiLFxuICBSRUZJTkVTOiBcInJlZmluZXNcIixcbiAgVFJBQ0VTOiBcInRyYWNlc1wiXG59O1xudmFyIGFkZFJlcXVpcmVtZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobmFtZSwgdHlwZSkgPT4ge1xuICBpZiAoIXJlcXVpcmVtZW50cy5oYXMobmFtZSkpIHtcbiAgICByZXF1aXJlbWVudHMuc2V0KG5hbWUsIHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgaWQ6IGxhdGVzdFJlcXVpcmVtZW50LmlkLFxuICAgICAgdGV4dDogbGF0ZXN0UmVxdWlyZW1lbnQudGV4dCxcbiAgICAgIHJpc2s6IGxhdGVzdFJlcXVpcmVtZW50LnJpc2ssXG4gICAgICB2ZXJpZnlNZXRob2Q6IGxhdGVzdFJlcXVpcmVtZW50LnZlcmlmeU1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGxhdGVzdFJlcXVpcmVtZW50ID0ge307XG4gIHJldHVybiByZXF1aXJlbWVudHMuZ2V0KG5hbWUpO1xufSwgXCJhZGRSZXF1aXJlbWVudFwiKTtcbnZhciBnZXRSZXF1aXJlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHJlcXVpcmVtZW50cywgXCJnZXRSZXF1aXJlbWVudHNcIik7XG52YXIgc2V0TmV3UmVxSWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4ge1xuICBpZiAobGF0ZXN0UmVxdWlyZW1lbnQgIT09IHZvaWQgMCkge1xuICAgIGxhdGVzdFJlcXVpcmVtZW50LmlkID0gaWQ7XG4gIH1cbn0sIFwic2V0TmV3UmVxSWRcIik7XG52YXIgc2V0TmV3UmVxVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC50ZXh0ID0gdGV4dDtcbiAgfVxufSwgXCJzZXROZXdSZXFUZXh0XCIpO1xudmFyIHNldE5ld1JlcVJpc2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChyaXNrKSA9PiB7XG4gIGlmIChsYXRlc3RSZXF1aXJlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgbGF0ZXN0UmVxdWlyZW1lbnQucmlzayA9IHJpc2s7XG4gIH1cbn0sIFwic2V0TmV3UmVxUmlza1wiKTtcbnZhciBzZXROZXdSZXFWZXJpZnlNZXRob2QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2ZXJpZnlNZXRob2QpID0+IHtcbiAgaWYgKGxhdGVzdFJlcXVpcmVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RSZXF1aXJlbWVudC52ZXJpZnlNZXRob2QgPSB2ZXJpZnlNZXRob2Q7XG4gIH1cbn0sIFwic2V0TmV3UmVxVmVyaWZ5TWV0aG9kXCIpO1xudmFyIGFkZEVsZW1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChuYW1lKSA9PiB7XG4gIGlmICghZWxlbWVudHMuaGFzKG5hbWUpKSB7XG4gICAgZWxlbWVudHMuc2V0KG5hbWUsIHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiBsYXRlc3RFbGVtZW50LnR5cGUsXG4gICAgICBkb2NSZWY6IGxhdGVzdEVsZW1lbnQuZG9jUmVmXG4gICAgfSk7XG4gICAgbG9nLmluZm8oXCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6IFwiLCBuYW1lKTtcbiAgfVxuICBsYXRlc3RFbGVtZW50ID0ge307XG4gIHJldHVybiBlbGVtZW50cy5nZXQobmFtZSk7XG59LCBcImFkZEVsZW1lbnRcIik7XG52YXIgZ2V0RWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGVsZW1lbnRzLCBcImdldEVsZW1lbnRzXCIpO1xudmFyIHNldE5ld0VsZW1lbnRUeXBlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHlwZSkgPT4ge1xuICBpZiAobGF0ZXN0RWxlbWVudCAhPT0gdm9pZCAwKSB7XG4gICAgbGF0ZXN0RWxlbWVudC50eXBlID0gdHlwZTtcbiAgfVxufSwgXCJzZXROZXdFbGVtZW50VHlwZVwiKTtcbnZhciBzZXROZXdFbGVtZW50RG9jUmVmID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZG9jUmVmKSA9PiB7XG4gIGlmIChsYXRlc3RFbGVtZW50ICE9PSB2b2lkIDApIHtcbiAgICBsYXRlc3RFbGVtZW50LmRvY1JlZiA9IGRvY1JlZjtcbiAgfVxufSwgXCJzZXROZXdFbGVtZW50RG9jUmVmXCIpO1xudmFyIGFkZFJlbGF0aW9uc2hpcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR5cGUsIHNyYywgZHN0KSA9PiB7XG4gIHJlbGF0aW9ucy5wdXNoKHtcbiAgICB0eXBlLFxuICAgIHNyYyxcbiAgICBkc3RcbiAgfSk7XG59LCBcImFkZFJlbGF0aW9uc2hpcFwiKTtcbnZhciBnZXRSZWxhdGlvbnNoaXBzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiByZWxhdGlvbnMsIFwiZ2V0UmVsYXRpb25zaGlwc1wiKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmVsYXRpb25zID0gW107XG4gIGxhdGVzdFJlcXVpcmVtZW50ID0ge307XG4gIHJlcXVpcmVtZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGxhdGVzdEVsZW1lbnQgPSB7fTtcbiAgZWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBjbGVhcigpO1xufSwgXCJjbGVhclwiKTtcbnZhciByZXF1aXJlbWVudERiX2RlZmF1bHQgPSB7XG4gIFJlcXVpcmVtZW50VHlwZSxcbiAgUmlza0xldmVsLFxuICBWZXJpZnlUeXBlLFxuICBSZWxhdGlvbnNoaXBzLFxuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkucmVxLCBcImdldENvbmZpZ1wiKSxcbiAgYWRkUmVxdWlyZW1lbnQsXG4gIGdldFJlcXVpcmVtZW50cyxcbiAgc2V0TmV3UmVxSWQsXG4gIHNldE5ld1JlcVRleHQsXG4gIHNldE5ld1JlcVJpc2ssXG4gIHNldE5ld1JlcVZlcmlmeU1ldGhvZCxcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGFkZEVsZW1lbnQsXG4gIGdldEVsZW1lbnRzLFxuICBzZXROZXdFbGVtZW50VHlwZSxcbiAgc2V0TmV3RWxlbWVudERvY1JlZixcbiAgYWRkUmVsYXRpb25zaGlwLFxuICBnZXRSZWxhdGlvbnNoaXBzLFxuICBjbGVhcjogY2xlYXIyXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcmVxdWlyZW1lbnQvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuXG4gIG1hcmtlciB7XG4gICAgZmlsbDogJHtvcHRpb25zLnJlbGF0aW9uQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnJlbGF0aW9uQ29sb3J9O1xuICB9XG5cbiAgbWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHtvcHRpb25zLmZvbnRTaXplfTtcbiAgfVxuXG4gIC5yZXFCb3gge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5yZXF1aXJlbWVudEJhY2tncm91bmR9O1xuICAgIGZpbGwtb3BhY2l0eTogMS4wO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9O1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07XG4gIH1cbiAgXG4gIC5yZXFUaXRsZSwgLnJlcUxhYmVse1xuICAgIGZpbGw6ICAke29wdGlvbnMucmVxdWlyZW1lbnRUZXh0Q29sb3J9O1xuICB9XG4gIC5yZXFMYWJlbEJveCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTtcbiAgICBmaWxsLW9wYWNpdHk6IDEuMDtcbiAgfVxuXG4gIC5yZXEtdGl0bGUtbGluZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAke29wdGlvbnMucmVxdWlyZW1lbnRCb3JkZXJTaXplfTtcbiAgfVxuICAucmVsYXRpb25zaGlwTGluZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMucmVsYXRpb25Db2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAxO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMYWJlbCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnJlbGF0aW9uTGFiZWxDb2xvcn07XG4gIH1cblxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9yZXF1aXJlbWVudC9yZXF1aXJlbWVudFJlbmRlcmVyLmpzXG5pbXBvcnQgeyBsaW5lLCBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IGxheW91dCBhcyBkYWdyZUxheW91dCB9IGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZGFncmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3JlcXVpcmVtZW50L3JlcXVpcmVtZW50TWFya2Vycy5qc1xudmFyIFJlcU1hcmtlcnMgPSB7XG4gIENPTlRBSU5TOiBcImNvbnRhaW5zXCIsXG4gIEFSUk9XOiBcImFycm93XCJcbn07XG52YXIgaW5zZXJ0TGluZUVuZGluZ3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnROb2RlLCBjb25mMikgPT4ge1xuICBsZXQgY29udGFpbnNOb2RlID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgUmVxTWFya2Vycy5DT05UQUlOUyArIFwiX2xpbmVfZW5kaW5nXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcIm1hcmtlcldpZHRoXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJnXCIpO1xuICBjb250YWluc05vZGUuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjeFwiLCBjb25mMi5saW5lX2hlaWdodCAvIDIpLmF0dHIoXCJjeVwiLCBjb25mMi5saW5lX2hlaWdodCAvIDIpLmF0dHIoXCJyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0IC8gMikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpO1xuICBjb250YWluc05vZGUuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgMCkuYXR0cihcIngyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwieTFcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwieTJcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuICBjb250YWluc05vZGUuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieTFcIiwgMCkuYXR0cihcInkyXCIsIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwieDFcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwieDJcIiwgY29uZjIubGluZV9oZWlnaHQgLyAyKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuICBwYXJlbnROb2RlLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBSZXFNYXJrZXJzLkFSUk9XICsgXCJfbGluZV9lbmRpbmdcIikuYXR0cihcInJlZlhcIiwgY29uZjIubGluZV9oZWlnaHQpLmF0dHIoXCJyZWZZXCIsIDAuNSAqIGNvbmYyLmxpbmVfaGVpZ2h0KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgY29uZjIubGluZV9oZWlnaHQpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgY29uZjIubGluZV9oZWlnaHQpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAsMFxuICAgICAgTCR7Y29uZjIubGluZV9oZWlnaHR9LCR7Y29uZjIubGluZV9oZWlnaHQgLyAyfVxuICAgICAgTSR7Y29uZjIubGluZV9oZWlnaHR9LCR7Y29uZjIubGluZV9oZWlnaHQgLyAyfVxuICAgICAgTDAsJHtjb25mMi5saW5lX2hlaWdodH1gXG4gICkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcbn0sIFwiaW5zZXJ0TGluZUVuZGluZ3NcIik7XG52YXIgcmVxdWlyZW1lbnRNYXJrZXJzX2RlZmF1bHQgPSB7XG4gIFJlcU1hcmtlcnMsXG4gIGluc2VydExpbmVFbmRpbmdzXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcmVxdWlyZW1lbnQvcmVxdWlyZW1lbnRSZW5kZXJlci5qc1xudmFyIGNvbmYgPSB7fTtcbnZhciByZWxDbnQgPSAwO1xudmFyIG5ld1JlY3ROb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50Tm9kZSwgaWQpID0+IHtcbiAgcmV0dXJuIHBhcmVudE5vZGUuaW5zZXJ0KFwicmVjdFwiLCBcIiNcIiArIGlkKS5hdHRyKFwiY2xhc3NcIiwgXCJyZXEgcmVxQm94XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJ3aWR0aFwiLCBjb25mLnJlY3RfbWluX3dpZHRoICsgXCJweFwiKS5hdHRyKFwiaGVpZ2h0XCIsIGNvbmYucmVjdF9taW5faGVpZ2h0ICsgXCJweFwiKTtcbn0sIFwibmV3UmVjdE5vZGVcIik7XG52YXIgbmV3VGl0bGVOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50Tm9kZSwgaWQsIHR4dHMpID0+IHtcbiAgbGV0IHggPSBjb25mLnJlY3RfbWluX3dpZHRoIC8gMjtcbiAgbGV0IHRpdGxlID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZXFMYWJlbCByZXFUaXRsZVwiKS5hdHRyKFwiaWRcIiwgaWQpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIGNvbmYucmVjdF9wYWRkaW5nKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJoYW5naW5nXCIpO1xuICBsZXQgaSA9IDA7XG4gIHR4dHMuZm9yRWFjaCgodGV4dFN0cikgPT4ge1xuICAgIGlmIChpID09IDApIHtcbiAgICAgIHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwieFwiLCBjb25mLnJlY3RfbWluX3dpZHRoIC8gMikuYXR0cihcImR5XCIsIDApLnRleHQodGV4dFN0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwieFwiLCBjb25mLnJlY3RfbWluX3dpZHRoIC8gMikuYXR0cihcImR5XCIsIGNvbmYubGluZV9oZWlnaHQgKiAwLjc1KS50ZXh0KHRleHRTdHIpO1xuICAgIH1cbiAgICBpKys7XG4gIH0pO1xuICBsZXQgeVBhZGRpbmcgPSAxLjUgKiBjb25mLnJlY3RfcGFkZGluZztcbiAgbGV0IGxpbmVQYWRkaW5nID0gaSAqIGNvbmYubGluZV9oZWlnaHQgKiAwLjc1O1xuICBsZXQgdG90YWxZID0geVBhZGRpbmcgKyBsaW5lUGFkZGluZztcbiAgcGFyZW50Tm9kZS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcS10aXRsZS1saW5lXCIpLmF0dHIoXCJ4MVwiLCBcIjBcIikuYXR0cihcIngyXCIsIGNvbmYucmVjdF9taW5fd2lkdGgpLmF0dHIoXCJ5MVwiLCB0b3RhbFkpLmF0dHIoXCJ5MlwiLCB0b3RhbFkpO1xuICByZXR1cm4ge1xuICAgIHRpdGxlTm9kZTogdGl0bGUsXG4gICAgeTogdG90YWxZXG4gIH07XG59LCBcIm5ld1RpdGxlTm9kZVwiKTtcbnZhciBuZXdCb2R5Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudE5vZGUsIGlkLCB0eHRzLCB5U3RhcnQpID0+IHtcbiAgbGV0IGJvZHkgPSBwYXJlbnROb2RlLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIFwicmVxIHJlcUxhYmVsXCIpLmF0dHIoXCJpZFwiLCBpZCkuYXR0cihcInhcIiwgY29uZi5yZWN0X3BhZGRpbmcpLmF0dHIoXCJ5XCIsIHlTdGFydCkuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiaGFuZ2luZ1wiKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSAwO1xuICBjb25zdCBjaGFyTGltaXQgPSAzMDtcbiAgbGV0IHdyYXBwZWRUeHRzID0gW107XG4gIHR4dHMuZm9yRWFjaCgodGV4dFN0cikgPT4ge1xuICAgIGxldCBjdXJyZW50VGV4dExlbiA9IHRleHRTdHIubGVuZ3RoO1xuICAgIHdoaWxlIChjdXJyZW50VGV4dExlbiA+IGNoYXJMaW1pdCAmJiBjdXJyZW50Um93IDwgMykge1xuICAgICAgbGV0IGZpcnN0UGFydCA9IHRleHRTdHIuc3Vic3RyaW5nKDAsIGNoYXJMaW1pdCk7XG4gICAgICB0ZXh0U3RyID0gdGV4dFN0ci5zdWJzdHJpbmcoY2hhckxpbWl0LCB0ZXh0U3RyLmxlbmd0aCk7XG4gICAgICBjdXJyZW50VGV4dExlbiA9IHRleHRTdHIubGVuZ3RoO1xuICAgICAgd3JhcHBlZFR4dHNbd3JhcHBlZFR4dHMubGVuZ3RoXSA9IGZpcnN0UGFydDtcbiAgICAgIGN1cnJlbnRSb3crKztcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRSb3cgPT0gMykge1xuICAgICAgbGV0IGxhc3RTdHIgPSB3cmFwcGVkVHh0c1t3cmFwcGVkVHh0cy5sZW5ndGggLSAxXTtcbiAgICAgIHdyYXBwZWRUeHRzW3dyYXBwZWRUeHRzLmxlbmd0aCAtIDFdID0gbGFzdFN0ci5zdWJzdHJpbmcoMCwgbGFzdFN0ci5sZW5ndGggLSA0KSArIFwiLi4uXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdyYXBwZWRUeHRzW3dyYXBwZWRUeHRzLmxlbmd0aF0gPSB0ZXh0U3RyO1xuICAgIH1cbiAgICBjdXJyZW50Um93ID0gMDtcbiAgfSk7XG4gIHdyYXBwZWRUeHRzLmZvckVhY2goKHRleHRTdHIpID0+IHtcbiAgICBib2R5LmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIGNvbmYucmVjdF9wYWRkaW5nKS5hdHRyKFwiZHlcIiwgY29uZi5saW5lX2hlaWdodCkudGV4dCh0ZXh0U3RyKTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufSwgXCJuZXdCb2R5Tm9kZVwiKTtcbnZhciBhZGRFZGdlTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnROb2RlLCBzdmdQYXRoLCBjb25mMiwgdHh0KSA9PiB7XG4gIGNvbnN0IGxlbiA9IHN2Z1BhdGgubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCk7XG4gIGNvbnN0IGxhYmVsUG9pbnQgPSBzdmdQYXRoLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGxlbiAqIDAuNSk7XG4gIGNvbnN0IGxhYmVsSWQgPSBcInJlbFwiICsgcmVsQ250O1xuICByZWxDbnQrKztcbiAgY29uc3QgbGFiZWxOb2RlID0gcGFyZW50Tm9kZS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcInJlcSByZWxhdGlvbnNoaXBMYWJlbFwiKS5hdHRyKFwiaWRcIiwgbGFiZWxJZCkuYXR0cihcInhcIiwgbGFiZWxQb2ludC54KS5hdHRyKFwieVwiLCBsYWJlbFBvaW50LnkpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikudGV4dCh0eHQpO1xuICBjb25zdCBsYWJlbEJCb3ggPSBsYWJlbE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgcGFyZW50Tm9kZS5pbnNlcnQoXCJyZWN0XCIsIFwiI1wiICsgbGFiZWxJZCkuYXR0cihcImNsYXNzXCIsIFwicmVxIHJlcUxhYmVsQm94XCIpLmF0dHIoXCJ4XCIsIGxhYmVsUG9pbnQueCAtIGxhYmVsQkJveC53aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIGxhYmVsUG9pbnQueSAtIGxhYmVsQkJveC5oZWlnaHQgLyAyKS5hdHRyKFwid2lkdGhcIiwgbGFiZWxCQm94LndpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGxhYmVsQkJveC5oZWlnaHQpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImZpbGwtb3BhY2l0eVwiLCBcIjg1JVwiKTtcbn0sIFwiYWRkRWRnZUxhYmVsXCIpO1xudmFyIGRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdmcsIHJlbCwgZywgaW5zZXJ0LCBkaWFnT2JqKSB7XG4gIGNvbnN0IGVkZ2UgPSBnLmVkZ2UoZWxlbWVudFN0cmluZyhyZWwuc3JjKSwgZWxlbWVudFN0cmluZyhyZWwuZHN0KSk7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KTtcbiAgY29uc3Qgc3ZnUGF0aCA9IHN2Zy5pbnNlcnQoXCJwYXRoXCIsIFwiI1wiICsgaW5zZXJ0KS5hdHRyKFwiY2xhc3NcIiwgXCJlciByZWxhdGlvbnNoaXBMaW5lXCIpLmF0dHIoXCJkXCIsIGxpbmVGdW5jdGlvbihlZGdlLnBvaW50cykpLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgaWYgKHJlbC50eXBlID09IGRpYWdPYmouZGIuUmVsYXRpb25zaGlwcy5DT05UQUlOUykge1xuICAgIHN2Z1BhdGguYXR0cihcbiAgICAgIFwibWFya2VyLXN0YXJ0XCIsXG4gICAgICBcInVybChcIiArIGNvbW1vbl9kZWZhdWx0LmdldFVybChjb25mLmFycm93TWFya2VyQWJzb2x1dGUpICsgXCIjXCIgKyByZWwudHlwZSArIFwiX2xpbmVfZW5kaW5nKVwiXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBzdmdQYXRoLmF0dHIoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMTAsN1wiKTtcbiAgICBzdmdQYXRoLmF0dHIoXG4gICAgICBcIm1hcmtlci1lbmRcIixcbiAgICAgIFwidXJsKFwiICsgY29tbW9uX2RlZmF1bHQuZ2V0VXJsKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkgKyBcIiNcIiArIHJlcXVpcmVtZW50TWFya2Vyc19kZWZhdWx0LlJlcU1hcmtlcnMuQVJST1cgKyBcIl9saW5lX2VuZGluZylcIlxuICAgICk7XG4gIH1cbiAgYWRkRWRnZUxhYmVsKHN2Zywgc3ZnUGF0aCwgY29uZiwgYDw8JHtyZWwudHlwZX0+PmApO1xuICByZXR1cm47XG59LCBcImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0XCIpO1xudmFyIGRyYXdSZXFzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocmVxcywgZ3JhcGgsIHN2Z05vZGUpID0+IHtcbiAgcmVxcy5mb3JFYWNoKChyZXEsIHJlcU5hbWUpID0+IHtcbiAgICByZXFOYW1lID0gZWxlbWVudFN0cmluZyhyZXFOYW1lKTtcbiAgICBsb2cuaW5mbyhcIkFkZGVkIG5ldyByZXF1aXJlbWVudDogXCIsIHJlcU5hbWUpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgcmVxTmFtZSk7XG4gICAgY29uc3QgdGV4dElkID0gXCJyZXEtXCIgKyByZXFOYW1lO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gbmV3UmVjdE5vZGUoZ3JvdXBOb2RlLCB0ZXh0SWQpO1xuICAgIGxldCBub2RlcyA9IFtdO1xuICAgIGxldCB0aXRsZU5vZGVJbmZvID0gbmV3VGl0bGVOb2RlKGdyb3VwTm9kZSwgcmVxTmFtZSArIFwiX3RpdGxlXCIsIFtcbiAgICAgIGA8PCR7cmVxLnR5cGV9Pj5gLFxuICAgICAgYCR7cmVxLm5hbWV9YFxuICAgIF0pO1xuICAgIG5vZGVzLnB1c2godGl0bGVOb2RlSW5mby50aXRsZU5vZGUpO1xuICAgIGxldCBib2R5Tm9kZSA9IG5ld0JvZHlOb2RlKFxuICAgICAgZ3JvdXBOb2RlLFxuICAgICAgcmVxTmFtZSArIFwiX2JvZHlcIixcbiAgICAgIFtcbiAgICAgICAgYElkOiAke3JlcS5pZH1gLFxuICAgICAgICBgVGV4dDogJHtyZXEudGV4dH1gLFxuICAgICAgICBgUmlzazogJHtyZXEucmlza31gLFxuICAgICAgICBgVmVyaWZpY2F0aW9uOiAke3JlcS52ZXJpZnlNZXRob2R9YFxuICAgICAgXSxcbiAgICAgIHRpdGxlTm9kZUluZm8ueVxuICAgICk7XG4gICAgbm9kZXMucHVzaChib2R5Tm9kZSk7XG4gICAgY29uc3QgcmVjdEJCb3ggPSByZWN0Tm9kZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGdyYXBoLnNldE5vZGUocmVxTmFtZSwge1xuICAgICAgd2lkdGg6IHJlY3RCQm94LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWN0QkJveC5oZWlnaHQsXG4gICAgICBzaGFwZTogXCJyZWN0XCIsXG4gICAgICBpZDogcmVxTmFtZVxuICAgIH0pO1xuICB9KTtcbn0sIFwiZHJhd1JlcXNcIik7XG52YXIgZHJhd0VsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxzLCBncmFwaCwgc3ZnTm9kZSkgPT4ge1xuICBlbHMuZm9yRWFjaCgoZWwsIGVsTmFtZSkgPT4ge1xuICAgIGNvbnN0IGlkID0gZWxlbWVudFN0cmluZyhlbE5hbWUpO1xuICAgIGNvbnN0IGdyb3VwTm9kZSA9IHN2Z05vZGUuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgaWQpO1xuICAgIGNvbnN0IHRleHRJZCA9IFwiZWxlbWVudC1cIiArIGlkO1xuICAgIGNvbnN0IHJlY3ROb2RlID0gbmV3UmVjdE5vZGUoZ3JvdXBOb2RlLCB0ZXh0SWQpO1xuICAgIGxldCBub2RlcyA9IFtdO1xuICAgIGxldCB0aXRsZU5vZGVJbmZvID0gbmV3VGl0bGVOb2RlKGdyb3VwTm9kZSwgdGV4dElkICsgXCJfdGl0bGVcIiwgW2A8PEVsZW1lbnQ+PmAsIGAke2VsTmFtZX1gXSk7XG4gICAgbm9kZXMucHVzaCh0aXRsZU5vZGVJbmZvLnRpdGxlTm9kZSk7XG4gICAgbGV0IGJvZHlOb2RlID0gbmV3Qm9keU5vZGUoXG4gICAgICBncm91cE5vZGUsXG4gICAgICB0ZXh0SWQgKyBcIl9ib2R5XCIsXG4gICAgICBbYFR5cGU6ICR7ZWwudHlwZSB8fCBcIk5vdCBTcGVjaWZpZWRcIn1gLCBgRG9jIFJlZjogJHtlbC5kb2NSZWYgfHwgXCJOb25lXCJ9YF0sXG4gICAgICB0aXRsZU5vZGVJbmZvLnlcbiAgICApO1xuICAgIG5vZGVzLnB1c2goYm9keU5vZGUpO1xuICAgIGNvbnN0IHJlY3RCQm94ID0gcmVjdE5vZGUubm9kZSgpLmdldEJCb3goKTtcbiAgICBncmFwaC5zZXROb2RlKGlkLCB7XG4gICAgICB3aWR0aDogcmVjdEJCb3gud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3RCQm94LmhlaWdodCxcbiAgICAgIHNoYXBlOiBcInJlY3RcIixcbiAgICAgIGlkXG4gICAgfSk7XG4gIH0pO1xufSwgXCJkcmF3RWxlbWVudHNcIik7XG52YXIgYWRkUmVsYXRpb25zaGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHJlbGF0aW9uc2hpcHMsIGcpID0+IHtcbiAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICBsZXQgc3JjID0gZWxlbWVudFN0cmluZyhyLnNyYyk7XG4gICAgbGV0IGRzdCA9IGVsZW1lbnRTdHJpbmcoci5kc3QpO1xuICAgIGcuc2V0RWRnZShzcmMsIGRzdCwgeyByZWxhdGlvbnNoaXA6IHIgfSk7XG4gIH0pO1xuICByZXR1cm4gcmVsYXRpb25zaGlwcztcbn0sIFwiYWRkUmVsYXRpb25zaGlwc1wiKTtcbnZhciBhZGp1c3RFbnRpdGllcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3ZnTm9kZSwgZ3JhcGgpIHtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAodiAhPT0gdm9pZCAwICYmIGdyYXBoLm5vZGUodikgIT09IHZvaWQgMCkge1xuICAgICAgc3ZnTm9kZS5zZWxlY3QoXCIjXCIgKyB2KTtcbiAgICAgIHN2Z05vZGUuc2VsZWN0KFwiI1wiICsgdikuYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoZ3JhcGgubm9kZSh2KS54IC0gZ3JhcGgubm9kZSh2KS53aWR0aCAvIDIpICsgXCIsXCIgKyAoZ3JhcGgubm9kZSh2KS55IC0gZ3JhcGgubm9kZSh2KS5oZWlnaHQgLyAyKSArIFwiIClcIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm47XG59LCBcImFkanVzdEVudGl0aWVzXCIpO1xudmFyIGVsZW1lbnRTdHJpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdHIpID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMvZywgXCJcIikucmVwbGFjZSgvXFwuL2csIFwiX1wiKTtcbn0sIFwiZWxlbWVudFN0cmluZ1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIGNvbmYgPSBnZXRDb25maWcoKS5yZXF1aXJlbWVudDtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGNvbmYuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICByZXF1aXJlbWVudE1hcmtlcnNfZGVmYXVsdC5pbnNlcnRMaW5lRW5kaW5ncyhzdmcsIGNvbmYpO1xuICBjb25zdCBnID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiBmYWxzZSxcbiAgICBjb21wb3VuZDogZmFsc2UsXG4gICAgZGlyZWN0ZWQ6IHRydWVcbiAgfSkuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IGNvbmYubGF5b3V0RGlyZWN0aW9uLFxuICAgIG1hcmdpbng6IDIwLFxuICAgIG1hcmdpbnk6IDIwLFxuICAgIG5vZGVzZXA6IDEwMCxcbiAgICBlZGdlc2VwOiAxMDAsXG4gICAgcmFua3NlcDogMTAwXG4gIH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgbGV0IHJlcXVpcmVtZW50czIgPSBkaWFnT2JqLmRiLmdldFJlcXVpcmVtZW50cygpO1xuICBsZXQgZWxlbWVudHMyID0gZGlhZ09iai5kYi5nZXRFbGVtZW50cygpO1xuICBsZXQgcmVsYXRpb25zaGlwcyA9IGRpYWdPYmouZGIuZ2V0UmVsYXRpb25zaGlwcygpO1xuICBkcmF3UmVxcyhyZXF1aXJlbWVudHMyLCBnLCBzdmcpO1xuICBkcmF3RWxlbWVudHMoZWxlbWVudHMyLCBnLCBzdmcpO1xuICBhZGRSZWxhdGlvbnNoaXBzKHJlbGF0aW9uc2hpcHMsIGcpO1xuICBkYWdyZUxheW91dChnKTtcbiAgYWRqdXN0RW50aXRpZXMoc3ZnLCBnKTtcbiAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHJlbCkge1xuICAgIGRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0KHN2ZywgcmVsLCBnLCBpZCwgZGlhZ09iaik7XG4gIH0pO1xuICBjb25zdCBwYWRkaW5nID0gY29uZi5yZWN0X3BhZGRpbmc7XG4gIGNvbnN0IHN2Z0JvdW5kcyA9IHN2Zy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IHN2Z0JvdW5kcy53aWR0aCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBzdmdCb3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gIGNvbmZpZ3VyZVN2Z1NpemUoc3ZnLCBoZWlnaHQsIHdpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xufSwgXCJkcmF3XCIpO1xudmFyIHJlcXVpcmVtZW50UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3JlcXVpcmVtZW50L3JlcXVpcmVtZW50RGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogcmVxdWlyZW1lbnREaWFncmFtX2RlZmF1bHQsXG4gIGRiOiByZXF1aXJlbWVudERiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiByZXF1aXJlbWVudFJlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBkcmF3QmFja2dyb3VuZFJlY3QsXG4gIGRyYXdFbWJlZGRlZEltYWdlLFxuICBkcmF3SW1hZ2UsXG4gIGRyYXdSZWN0LFxuICBnZXROb3RlUmVjdCxcbiAgZ2V0VGV4dE9ialxufSBmcm9tIFwiLi9jaHVuay1YVk9ZT00yQy5tanNcIjtcbmltcG9ydCB7XG4gIEltcGVyYXRpdmVTdGF0ZVxufSBmcm9tIFwiLi9jaHVuay0yUllRM1FUQi5tanNcIjtcbmltcG9ydCB7XG4gIFpFUk9fV0lEVEhfU1BBQ0UsXG4gIHBhcnNlRm9udFNpemUsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0LFxuICBjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnLFxuICBnZXRDb25maWcyLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGhhc0thdGV4LFxuICBsb2csXG4gIHJlbmRlckthdGV4LFxuICBzYW5pdGl6ZVRleHQsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2VxdWVuY2UvcGFyc2VyL3NlcXVlbmNlRGlhZ3JhbS5qaXNvblxudmFyIHBhcnNlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaywgdiwgbzIsIGwpIHtcbiAgICBmb3IgKG8yID0gbzIgfHwge30sIGwgPSBrLmxlbmd0aDsgbC0tOyBvMltrW2xdXSA9IHYpIDtcbiAgICByZXR1cm4gbzI7XG4gIH0sIFwib1wiKSwgJFYwID0gWzEsIDJdLCAkVjEgPSBbMSwgM10sICRWMiA9IFsxLCA0XSwgJFYzID0gWzIsIDRdLCAkVjQgPSBbMSwgOV0sICRWNSA9IFsxLCAxMV0sICRWNiA9IFsxLCAxM10sICRWNyA9IFsxLCAxNF0sICRWOCA9IFsxLCAxNl0sICRWOSA9IFsxLCAxN10sICRWYSA9IFsxLCAxOF0sICRWYiA9IFsxLCAyNF0sICRWYyA9IFsxLCAyNV0sICRWZCA9IFsxLCAyNl0sICRWZSA9IFsxLCAyN10sICRWZiA9IFsxLCAyOF0sICRWZyA9IFsxLCAyOV0sICRWaCA9IFsxLCAzMF0sICRWaSA9IFsxLCAzMV0sICRWaiA9IFsxLCAzMl0sICRWayA9IFsxLCAzM10sICRWbCA9IFsxLCAzNF0sICRWbSA9IFsxLCAzNV0sICRWbiA9IFsxLCAzNl0sICRWbyA9IFsxLCAzN10sICRWcCA9IFsxLCAzOF0sICRWcSA9IFsxLCAzOV0sICRWciA9IFsxLCA0MV0sICRWcyA9IFsxLCA0Ml0sICRWdCA9IFsxLCA0M10sICRWdSA9IFsxLCA0NF0sICRWdiA9IFsxLCA0NV0sICRWdyA9IFsxLCA0Nl0sICRWeCA9IFsxLCA0LCA1LCAxMywgMTQsIDE2LCAxOCwgMjEsIDIzLCAyOSwgMzAsIDMxLCAzMywgMzUsIDM2LCAzNywgMzgsIDM5LCA0MSwgNDMsIDQ0LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU5LCA2MCwgNjEsIDYyLCA3MF0sICRWeSA9IFs0LCA1LCAxNiwgNTAsIDUyLCA1M10sICRWeiA9IFs0LCA1LCAxMywgMTQsIDE2LCAxOCwgMjEsIDIzLCAyOSwgMzAsIDMxLCAzMywgMzUsIDM2LCAzNywgMzgsIDM5LCA0MSwgNDMsIDQ0LCA0NiwgNTAsIDUyLCA1MywgNTQsIDU5LCA2MCwgNjEsIDYyLCA3MF0sICRWQSA9IFs0LCA1LCAxMywgMTQsIDE2LCAxOCwgMjEsIDIzLCAyOSwgMzAsIDMxLCAzMywgMzUsIDM2LCAzNywgMzgsIDM5LCA0MSwgNDMsIDQ0LCA0NiwgNDksIDUwLCA1MiwgNTMsIDU0LCA1OSwgNjAsIDYxLCA2MiwgNzBdLCAkVkIgPSBbNCwgNSwgMTMsIDE0LCAxNiwgMTgsIDIxLCAyMywgMjksIDMwLCAzMSwgMzMsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDEsIDQzLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDUzLCA1NCwgNTksIDYwLCA2MSwgNjIsIDcwXSwgJFZDID0gWzQsIDUsIDEzLCAxNCwgMTYsIDE4LCAyMSwgMjMsIDI5LCAzMCwgMzEsIDMzLCAzNSwgMzYsIDM3LCAzOCwgMzksIDQxLCA0MywgNDQsIDQ2LCA0NywgNTAsIDUyLCA1MywgNTQsIDU5LCA2MCwgNjEsIDYyLCA3MF0sICRWRCA9IFs2OCwgNjksIDcwXSwgJFZFID0gWzEsIDEyMl07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIlNQQUNFXCI6IDQsIFwiTkVXTElORVwiOiA1LCBcIlNEXCI6IDYsIFwiZG9jdW1lbnRcIjogNywgXCJsaW5lXCI6IDgsIFwic3RhdGVtZW50XCI6IDksIFwiYm94X3NlY3Rpb25cIjogMTAsIFwiYm94X2xpbmVcIjogMTEsIFwicGFydGljaXBhbnRfc3RhdGVtZW50XCI6IDEyLCBcImNyZWF0ZVwiOiAxMywgXCJib3hcIjogMTQsIFwicmVzdE9mTGluZVwiOiAxNSwgXCJlbmRcIjogMTYsIFwic2lnbmFsXCI6IDE3LCBcImF1dG9udW1iZXJcIjogMTgsIFwiTlVNXCI6IDE5LCBcIm9mZlwiOiAyMCwgXCJhY3RpdmF0ZVwiOiAyMSwgXCJhY3RvclwiOiAyMiwgXCJkZWFjdGl2YXRlXCI6IDIzLCBcIm5vdGVfc3RhdGVtZW50XCI6IDI0LCBcImxpbmtzX3N0YXRlbWVudFwiOiAyNSwgXCJsaW5rX3N0YXRlbWVudFwiOiAyNiwgXCJwcm9wZXJ0aWVzX3N0YXRlbWVudFwiOiAyNywgXCJkZXRhaWxzX3N0YXRlbWVudFwiOiAyOCwgXCJ0aXRsZVwiOiAyOSwgXCJsZWdhY3lfdGl0bGVcIjogMzAsIFwiYWNjX3RpdGxlXCI6IDMxLCBcImFjY190aXRsZV92YWx1ZVwiOiAzMiwgXCJhY2NfZGVzY3JcIjogMzMsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDM0LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMzUsIFwibG9vcFwiOiAzNiwgXCJyZWN0XCI6IDM3LCBcIm9wdFwiOiAzOCwgXCJhbHRcIjogMzksIFwiZWxzZV9zZWN0aW9uc1wiOiA0MCwgXCJwYXJcIjogNDEsIFwicGFyX3NlY3Rpb25zXCI6IDQyLCBcInBhcl9vdmVyXCI6IDQzLCBcImNyaXRpY2FsXCI6IDQ0LCBcIm9wdGlvbl9zZWN0aW9uc1wiOiA0NSwgXCJicmVha1wiOiA0NiwgXCJvcHRpb25cIjogNDcsIFwiYW5kXCI6IDQ4LCBcImVsc2VcIjogNDksIFwicGFydGljaXBhbnRcIjogNTAsIFwiQVNcIjogNTEsIFwicGFydGljaXBhbnRfYWN0b3JcIjogNTIsIFwiZGVzdHJveVwiOiA1MywgXCJub3RlXCI6IDU0LCBcInBsYWNlbWVudFwiOiA1NSwgXCJ0ZXh0MlwiOiA1NiwgXCJvdmVyXCI6IDU3LCBcImFjdG9yX3BhaXJcIjogNTgsIFwibGlua3NcIjogNTksIFwibGlua1wiOiA2MCwgXCJwcm9wZXJ0aWVzXCI6IDYxLCBcImRldGFpbHNcIjogNjIsIFwic3BhY2VMaXN0XCI6IDYzLCBcIixcIjogNjQsIFwibGVmdF9vZlwiOiA2NSwgXCJyaWdodF9vZlwiOiA2NiwgXCJzaWduYWx0eXBlXCI6IDY3LCBcIitcIjogNjgsIFwiLVwiOiA2OSwgXCJBQ1RPUlwiOiA3MCwgXCJTT0xJRF9PUEVOX0FSUk9XXCI6IDcxLCBcIkRPVFRFRF9PUEVOX0FSUk9XXCI6IDcyLCBcIlNPTElEX0FSUk9XXCI6IDczLCBcIkJJRElSRUNUSU9OQUxfU09MSURfQVJST1dcIjogNzQsIFwiRE9UVEVEX0FSUk9XXCI6IDc1LCBcIkJJRElSRUNUSU9OQUxfRE9UVEVEX0FSUk9XXCI6IDc2LCBcIlNPTElEX0NST1NTXCI6IDc3LCBcIkRPVFRFRF9DUk9TU1wiOiA3OCwgXCJTT0xJRF9QT0lOVFwiOiA3OSwgXCJET1RURURfUE9JTlRcIjogODAsIFwiVFhUXCI6IDgxLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJTUEFDRVwiLCA1OiBcIk5FV0xJTkVcIiwgNjogXCJTRFwiLCAxMzogXCJjcmVhdGVcIiwgMTQ6IFwiYm94XCIsIDE1OiBcInJlc3RPZkxpbmVcIiwgMTY6IFwiZW5kXCIsIDE4OiBcImF1dG9udW1iZXJcIiwgMTk6IFwiTlVNXCIsIDIwOiBcIm9mZlwiLCAyMTogXCJhY3RpdmF0ZVwiLCAyMzogXCJkZWFjdGl2YXRlXCIsIDI5OiBcInRpdGxlXCIsIDMwOiBcImxlZ2FjeV90aXRsZVwiLCAzMTogXCJhY2NfdGl0bGVcIiwgMzI6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDMzOiBcImFjY19kZXNjclwiLCAzNDogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMzU6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAzNjogXCJsb29wXCIsIDM3OiBcInJlY3RcIiwgMzg6IFwib3B0XCIsIDM5OiBcImFsdFwiLCA0MTogXCJwYXJcIiwgNDM6IFwicGFyX292ZXJcIiwgNDQ6IFwiY3JpdGljYWxcIiwgNDY6IFwiYnJlYWtcIiwgNDc6IFwib3B0aW9uXCIsIDQ4OiBcImFuZFwiLCA0OTogXCJlbHNlXCIsIDUwOiBcInBhcnRpY2lwYW50XCIsIDUxOiBcIkFTXCIsIDUyOiBcInBhcnRpY2lwYW50X2FjdG9yXCIsIDUzOiBcImRlc3Ryb3lcIiwgNTQ6IFwibm90ZVwiLCA1NzogXCJvdmVyXCIsIDU5OiBcImxpbmtzXCIsIDYwOiBcImxpbmtcIiwgNjE6IFwicHJvcGVydGllc1wiLCA2MjogXCJkZXRhaWxzXCIsIDY0OiBcIixcIiwgNjU6IFwibGVmdF9vZlwiLCA2NjogXCJyaWdodF9vZlwiLCA2ODogXCIrXCIsIDY5OiBcIi1cIiwgNzA6IFwiQUNUT1JcIiwgNzE6IFwiU09MSURfT1BFTl9BUlJPV1wiLCA3MjogXCJET1RURURfT1BFTl9BUlJPV1wiLCA3MzogXCJTT0xJRF9BUlJPV1wiLCA3NDogXCJCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XXCIsIDc1OiBcIkRPVFRFRF9BUlJPV1wiLCA3NjogXCJCSURJUkVDVElPTkFMX0RPVFRFRF9BUlJPV1wiLCA3NzogXCJTT0xJRF9DUk9TU1wiLCA3ODogXCJET1RURURfQ1JPU1NcIiwgNzk6IFwiU09MSURfUE9JTlRcIiwgODA6IFwiRE9UVEVEX1BPSU5UXCIsIDgxOiBcIlRYVFwiIH0sXG4gICAgcHJvZHVjdGlvbnNfOiBbMCwgWzMsIDJdLCBbMywgMl0sIFszLCAyXSwgWzcsIDBdLCBbNywgMl0sIFs4LCAyXSwgWzgsIDFdLCBbOCwgMV0sIFsxMCwgMF0sIFsxMCwgMl0sIFsxMSwgMl0sIFsxMSwgMV0sIFsxMSwgMV0sIFs5LCAxXSwgWzksIDJdLCBbOSwgNF0sIFs5LCAyXSwgWzksIDRdLCBbOSwgM10sIFs5LCAzXSwgWzksIDJdLCBbOSwgM10sIFs5LCAzXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMl0sIFs5LCAyXSwgWzksIDFdLCBbOSwgNF0sIFs5LCA0XSwgWzksIDRdLCBbOSwgNF0sIFs5LCA0XSwgWzksIDRdLCBbOSwgNF0sIFs5LCA0XSwgWzQ1LCAxXSwgWzQ1LCA0XSwgWzQyLCAxXSwgWzQyLCA0XSwgWzQwLCAxXSwgWzQwLCA0XSwgWzEyLCA1XSwgWzEyLCAzXSwgWzEyLCA1XSwgWzEyLCAzXSwgWzEyLCAzXSwgWzI0LCA0XSwgWzI0LCA0XSwgWzI1LCAzXSwgWzI2LCAzXSwgWzI3LCAzXSwgWzI4LCAzXSwgWzYzLCAyXSwgWzYzLCAxXSwgWzU4LCAzXSwgWzU4LCAxXSwgWzU1LCAxXSwgWzU1LCAxXSwgWzE3LCA1XSwgWzE3LCA1XSwgWzE3LCA0XSwgWzIyLCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzY3LCAxXSwgWzU2LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB5eS5hcHBseSgkJFskMF0pO1xuICAgICAgICAgIHJldHVybiAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgJCRbJDBdLnR5cGUgPSBcImNyZWF0ZVBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwiYm94U3RhcnRcIiwgYm94RGF0YTogeXkucGFyc2VCb3hEYXRhKCQkWyQwIC0gMl0pIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYm94RW5kXCIsIGJveFRleHQ6ICQkWyQwIC0gMl0gfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwic2VxdWVuY2VJbmRleFwiLCBzZXF1ZW5jZUluZGV4OiBOdW1iZXIoJCRbJDAgLSAyXSksIHNlcXVlbmNlSW5kZXhTdGVwOiBOdW1iZXIoJCRbJDAgLSAxXSksIHNlcXVlbmNlVmlzaWJsZTogdHJ1ZSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQVVUT05VTUJFUiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJzZXF1ZW5jZUluZGV4XCIsIHNlcXVlbmNlSW5kZXg6IE51bWJlcigkJFskMCAtIDFdKSwgc2VxdWVuY2VJbmRleFN0ZXA6IDEsIHNlcXVlbmNlVmlzaWJsZTogdHJ1ZSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQVVUT05VTUJFUiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJzZXF1ZW5jZUluZGV4XCIsIHNlcXVlbmNlVmlzaWJsZTogZmFsc2UsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFVVE9OVU1CRVIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwic2VxdWVuY2VJbmRleFwiLCBzZXF1ZW5jZVZpc2libGU6IHRydWUsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFVVE9OVU1CRVIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYWN0aXZlU3RhcnRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX1NUQVJULCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJhY3RpdmVFbmRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX0VORCwgYWN0b3I6ICQkWyQwIC0gMV0uYWN0b3IgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cmluZyg2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cmluZyg2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cmluZyg3KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cmluZyg3KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY1RpdGxlKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwibG9vcFN0YXJ0XCIsIGxvb3BUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkxPT1BfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJsb29wRW5kXCIsIGxvb3BUZXh0OiAkJFskMCAtIDJdLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5MT09QX0VORCB9KTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwicmVjdFN0YXJ0XCIsIGNvbG9yOiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJyZWN0RW5kXCIsIGNvbG9yOiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlJFQ1RfRU5EIH0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgJCRbJDAgLSAxXS51bnNoaWZ0KHsgdHlwZTogXCJvcHRTdGFydFwiLCBvcHRUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLk9QVF9TVEFSVCB9KTtcbiAgICAgICAgICAkJFskMCAtIDFdLnB1c2goeyB0eXBlOiBcIm9wdEVuZFwiLCBvcHRUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLk9QVF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcImFsdFN0YXJ0XCIsIGFsdFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUxUX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYWx0RW5kXCIsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkFMVF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcInBhclN0YXJ0XCIsIHBhclRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwicGFyRW5kXCIsIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlBBUl9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcInBhclN0YXJ0XCIsIHBhclRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX09WRVJfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJwYXJFbmRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuUEFSX0VORCB9KTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICQkWyQwIC0gMV0udW5zaGlmdCh7IHR5cGU6IFwiY3JpdGljYWxTdGFydFwiLCBjcml0aWNhbFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDJdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQgfSk7XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKHsgdHlwZTogXCJjcml0aWNhbEVuZFwiLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5DUklUSUNBTF9FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAkJFskMCAtIDFdLnVuc2hpZnQoeyB0eXBlOiBcImJyZWFrU3RhcnRcIiwgYnJlYWtUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAyXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkJSRUFLX1NUQVJUIH0pO1xuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCh7IHR5cGU6IFwiYnJlYWtFbmRcIiwgb3B0VGV4dDogeXkucGFyc2VNZXNzYWdlKCQkWyQwIC0gMl0pLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5CUkVBS19FTkQgfSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdLmNvbmNhdChbeyB0eXBlOiBcIm9wdGlvblwiLCBvcHRpb25UZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTiB9LCAkJFskMF1dKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdLmNvbmNhdChbeyB0eXBlOiBcImFuZFwiLCBwYXJUZXh0OiB5eS5wYXJzZU1lc3NhZ2UoJCRbJDAgLSAxXSksIHNpZ25hbFR5cGU6IHl5LkxJTkVUWVBFLlBBUl9BTkQgfSwgJCRbJDBdXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAzXS5jb25jYXQoW3sgdHlwZTogXCJlbHNlXCIsIGFsdFRleHQ6IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDFdKSwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUxUX0VMU0UgfSwgJCRbJDBdXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgJCRbJDAgLSAzXS5kcmF3ID0gXCJwYXJ0aWNpcGFudFwiO1xuICAgICAgICAgICQkWyQwIC0gM10udHlwZSA9IFwiYWRkUGFydGljaXBhbnRcIjtcbiAgICAgICAgICAkJFskMCAtIDNdLmRlc2NyaXB0aW9uID0geXkucGFyc2VNZXNzYWdlKCQkWyQwIC0gMV0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgJCRbJDAgLSAxXS5kcmF3ID0gXCJwYXJ0aWNpcGFudFwiO1xuICAgICAgICAgICQkWyQwIC0gMV0udHlwZSA9IFwiYWRkUGFydGljaXBhbnRcIjtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICQkWyQwIC0gM10uZHJhdyA9IFwiYWN0b3JcIjtcbiAgICAgICAgICAkJFskMCAtIDNdLnR5cGUgPSBcImFkZFBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgJCRbJDAgLSAzXS5kZXNjcmlwdGlvbiA9IHl5LnBhcnNlTWVzc2FnZSgkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICQkWyQwIC0gMV0uZHJhdyA9IFwiYWN0b3JcIjtcbiAgICAgICAgICAkJFskMCAtIDFdLnR5cGUgPSBcImFkZFBhcnRpY2lwYW50XCI7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAkJFskMCAtIDFdLnR5cGUgPSBcImRlc3Ryb3lQYXJ0aWNpcGFudFwiO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGROb3RlXCIsIHBsYWNlbWVudDogJCRbJDAgLSAyXSwgYWN0b3I6ICQkWyQwIC0gMV0uYWN0b3IsIHRleHQ6ICQkWyQwXSB9XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAkJFskMCAtIDJdID0gW10uY29uY2F0KCQkWyQwIC0gMV0sICQkWyQwIC0gMV0pLnNsaWNlKDAsIDIpO1xuICAgICAgICAgICQkWyQwIC0gMl1bMF0gPSAkJFskMCAtIDJdWzBdLmFjdG9yO1xuICAgICAgICAgICQkWyQwIC0gMl1bMV0gPSAkJFskMCAtIDJdWzFdLmFjdG9yO1xuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkTm90ZVwiLCBwbGFjZW1lbnQ6IHl5LlBMQUNFTUVOVC5PVkVSLCBhY3RvcjogJCRbJDAgLSAyXS5zbGljZSgwLCAyKSwgdGV4dDogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIHRoaXMuJCA9IFskJFskMCAtIDFdLCB7IHR5cGU6IFwiYWRkTGlua3NcIiwgYWN0b3I6ICQkWyQwIC0gMV0uYWN0b3IsIHRleHQ6ICQkWyQwXSB9XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZEFMaW5rXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTc6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGRQcm9wZXJ0aWVzXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMV0sIHsgdHlwZTogXCJhZGREZXRhaWxzXCIsIGFjdG9yOiAkJFskMCAtIDFdLmFjdG9yLCB0ZXh0OiAkJFskMF0gfV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwIC0gMl0sICQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LlBMQUNFTUVOVC5MRUZUT0Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgdGhpcy4kID0geXkuUExBQ0VNRU5ULlJJR0hUT0Y7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgdGhpcy4kID0gW1xuICAgICAgICAgICAgJCRbJDAgLSA0XSxcbiAgICAgICAgICAgICQkWyQwIC0gMV0sXG4gICAgICAgICAgICB7IHR5cGU6IFwiYWRkTWVzc2FnZVwiLCBmcm9tOiAkJFskMCAtIDRdLmFjdG9yLCB0bzogJCRbJDAgLSAxXS5hY3Rvciwgc2lnbmFsVHlwZTogJCRbJDAgLSAzXSwgbXNnOiAkJFskMF0sIGFjdGl2YXRlOiB0cnVlIH0sXG4gICAgICAgICAgICB7IHR5cGU6IFwiYWN0aXZlU3RhcnRcIiwgc2lnbmFsVHlwZTogeXkuTElORVRZUEUuQUNUSVZFX1NUQVJULCBhY3RvcjogJCRbJDAgLSAxXS5hY3RvciB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSBbXG4gICAgICAgICAgICAkJFskMCAtIDRdLFxuICAgICAgICAgICAgJCRbJDAgLSAxXSxcbiAgICAgICAgICAgIHsgdHlwZTogXCJhZGRNZXNzYWdlXCIsIGZyb206ICQkWyQwIC0gNF0uYWN0b3IsIHRvOiAkJFskMCAtIDFdLmFjdG9yLCBzaWduYWxUeXBlOiAkJFskMCAtIDNdLCBtc2c6ICQkWyQwXSB9LFxuICAgICAgICAgICAgeyB0eXBlOiBcImFjdGl2ZUVuZFwiLCBzaWduYWxUeXBlOiB5eS5MSU5FVFlQRS5BQ1RJVkVfRU5ELCBhY3RvcjogJCRbJDAgLSA0XS5hY3RvciB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSwgeyB0eXBlOiBcImFkZE1lc3NhZ2VcIiwgZnJvbTogJCRbJDAgLSAzXS5hY3RvciwgdG86ICQkWyQwIC0gMV0uYWN0b3IsIHNpZ25hbFR5cGU6ICQkWyQwIC0gMl0sIG1zZzogJCRbJDBdIH1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogXCJhZGRQYXJ0aWNpcGFudFwiLCBhY3RvcjogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjk6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuU09MSURfT1BFTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5ET1RURURfT1BFTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5TT0xJRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LkxJTkVUWVBFLkRPVFRFRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5TT0xJRF9DUk9TUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5MSU5FVFlQRS5ET1RURURfQ1JPU1M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuU09MSURfUE9JTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzg6XG4gICAgICAgICAgdGhpcy4kID0geXkuTElORVRZUEUuRE9UVEVEX1BPSU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnBhcnNlTWVzc2FnZSgkJFskMF0udHJpbSgpLnN1YnN0cmluZygxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6ICRWMCwgNTogJFYxLCA2OiAkVjIgfSwgeyAxOiBbM10gfSwgeyAzOiA1LCA0OiAkVjAsIDU6ICRWMSwgNjogJFYyIH0sIHsgMzogNiwgNDogJFYwLCA1OiAkVjEsIDY6ICRWMiB9LCBvKFsxLCA0LCA1LCAxMywgMTQsIDE4LCAyMSwgMjMsIDI5LCAzMCwgMzEsIDMzLCAzNSwgMzYsIDM3LCAzOCwgMzksIDQxLCA0MywgNDQsIDQ2LCA1MCwgNTIsIDUzLCA1NCwgNTksIDYwLCA2MSwgNjIsIDcwXSwgJFYzLCB7IDc6IDcgfSksIHsgMTogWzIsIDFdIH0sIHsgMTogWzIsIDJdIH0sIHsgMTogWzIsIDNdLCA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTc6IDE1LCAxODogJFY4LCAyMTogJFY5LCAyMjogNDAsIDIzOiAkVmEsIDI0OiAxOSwgMjU6IDIwLCAyNjogMjEsIDI3OiAyMiwgMjg6IDIzLCAyOTogJFZiLCAzMDogJFZjLCAzMTogJFZkLCAzMzogJFZlLCAzNTogJFZmLCAzNjogJFZnLCAzNzogJFZoLCAzODogJFZpLCAzOTogJFZqLCA0MTogJFZrLCA0MzogJFZsLCA0NDogJFZtLCA0NjogJFZuLCA1MDogJFZvLCA1MjogJFZwLCA1MzogJFZxLCA1NDogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA3MDogJFZ3IH0sIG8oJFZ4LCBbMiwgNV0pLCB7IDk6IDQ3LCAxMjogMTIsIDEzOiAkVjYsIDE0OiAkVjcsIDE3OiAxNSwgMTg6ICRWOCwgMjE6ICRWOSwgMjI6IDQwLCAyMzogJFZhLCAyNDogMTksIDI1OiAyMCwgMjY6IDIxLCAyNzogMjIsIDI4OiAyMywgMjk6ICRWYiwgMzA6ICRWYywgMzE6ICRWZCwgMzM6ICRWZSwgMzU6ICRWZiwgMzY6ICRWZywgMzc6ICRWaCwgMzg6ICRWaSwgMzk6ICRWaiwgNDE6ICRWaywgNDM6ICRWbCwgNDQ6ICRWbSwgNDY6ICRWbiwgNTA6ICRWbywgNTI6ICRWcCwgNTM6ICRWcSwgNTQ6ICRWciwgNTk6ICRWcywgNjA6ICRWdCwgNjE6ICRWdSwgNjI6ICRWdiwgNzA6ICRWdyB9LCBvKCRWeCwgWzIsIDddKSwgbygkVngsIFsyLCA4XSksIG8oJFZ4LCBbMiwgMTRdKSwgeyAxMjogNDgsIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEgfSwgeyAxNTogWzEsIDQ5XSB9LCB7IDU6IFsxLCA1MF0gfSwgeyA1OiBbMSwgNTNdLCAxOTogWzEsIDUxXSwgMjA6IFsxLCA1Ml0gfSwgeyAyMjogNTQsIDcwOiAkVncgfSwgeyAyMjogNTUsIDcwOiAkVncgfSwgeyA1OiBbMSwgNTZdIH0sIHsgNTogWzEsIDU3XSB9LCB7IDU6IFsxLCA1OF0gfSwgeyA1OiBbMSwgNTldIH0sIHsgNTogWzEsIDYwXSB9LCBvKCRWeCwgWzIsIDI5XSksIG8oJFZ4LCBbMiwgMzBdKSwgeyAzMjogWzEsIDYxXSB9LCB7IDM0OiBbMSwgNjJdIH0sIG8oJFZ4LCBbMiwgMzNdKSwgeyAxNTogWzEsIDYzXSB9LCB7IDE1OiBbMSwgNjRdIH0sIHsgMTU6IFsxLCA2NV0gfSwgeyAxNTogWzEsIDY2XSB9LCB7IDE1OiBbMSwgNjddIH0sIHsgMTU6IFsxLCA2OF0gfSwgeyAxNTogWzEsIDY5XSB9LCB7IDE1OiBbMSwgNzBdIH0sIHsgMjI6IDcxLCA3MDogJFZ3IH0sIHsgMjI6IDcyLCA3MDogJFZ3IH0sIHsgMjI6IDczLCA3MDogJFZ3IH0sIHsgNjc6IDc0LCA3MTogWzEsIDc1XSwgNzI6IFsxLCA3Nl0sIDczOiBbMSwgNzddLCA3NDogWzEsIDc4XSwgNzU6IFsxLCA3OV0sIDc2OiBbMSwgODBdLCA3NzogWzEsIDgxXSwgNzg6IFsxLCA4Ml0sIDc5OiBbMSwgODNdLCA4MDogWzEsIDg0XSB9LCB7IDU1OiA4NSwgNTc6IFsxLCA4Nl0sIDY1OiBbMSwgODddLCA2NjogWzEsIDg4XSB9LCB7IDIyOiA4OSwgNzA6ICRWdyB9LCB7IDIyOiA5MCwgNzA6ICRWdyB9LCB7IDIyOiA5MSwgNzA6ICRWdyB9LCB7IDIyOiA5MiwgNzA6ICRWdyB9LCBvKFs1LCA1MSwgNjQsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MV0sIFsyLCA2OF0pLCBvKCRWeCwgWzIsIDZdKSwgbygkVngsIFsyLCAxNV0pLCBvKCRWeSwgWzIsIDldLCB7IDEwOiA5MyB9KSwgbygkVngsIFsyLCAxN10pLCB7IDU6IFsxLCA5NV0sIDE5OiBbMSwgOTRdIH0sIHsgNTogWzEsIDk2XSB9LCBvKCRWeCwgWzIsIDIxXSksIHsgNTogWzEsIDk3XSB9LCB7IDU6IFsxLCA5OF0gfSwgbygkVngsIFsyLCAyNF0pLCBvKCRWeCwgWzIsIDI1XSksIG8oJFZ4LCBbMiwgMjZdKSwgbygkVngsIFsyLCAyN10pLCBvKCRWeCwgWzIsIDI4XSksIG8oJFZ4LCBbMiwgMzFdKSwgbygkVngsIFsyLCAzMl0pLCBvKCRWeiwgJFYzLCB7IDc6IDk5IH0pLCBvKCRWeiwgJFYzLCB7IDc6IDEwMCB9KSwgbygkVnosICRWMywgeyA3OiAxMDEgfSksIG8oJFZBLCAkVjMsIHsgNDA6IDEwMiwgNzogMTAzIH0pLCBvKCRWQiwgJFYzLCB7IDQyOiAxMDQsIDc6IDEwNSB9KSwgbygkVkIsICRWMywgeyA3OiAxMDUsIDQyOiAxMDYgfSksIG8oJFZDLCAkVjMsIHsgNDU6IDEwNywgNzogMTA4IH0pLCBvKCRWeiwgJFYzLCB7IDc6IDEwOSB9KSwgeyA1OiBbMSwgMTExXSwgNTE6IFsxLCAxMTBdIH0sIHsgNTogWzEsIDExM10sIDUxOiBbMSwgMTEyXSB9LCB7IDU6IFsxLCAxMTRdIH0sIHsgMjI6IDExNywgNjg6IFsxLCAxMTVdLCA2OTogWzEsIDExNl0sIDcwOiAkVncgfSwgbygkVkQsIFsyLCA2OV0pLCBvKCRWRCwgWzIsIDcwXSksIG8oJFZELCBbMiwgNzFdKSwgbygkVkQsIFsyLCA3Ml0pLCBvKCRWRCwgWzIsIDczXSksIG8oJFZELCBbMiwgNzRdKSwgbygkVkQsIFsyLCA3NV0pLCBvKCRWRCwgWzIsIDc2XSksIG8oJFZELCBbMiwgNzddKSwgbygkVkQsIFsyLCA3OF0pLCB7IDIyOiAxMTgsIDcwOiAkVncgfSwgeyAyMjogMTIwLCA1ODogMTE5LCA3MDogJFZ3IH0sIHsgNzA6IFsyLCA2M10gfSwgeyA3MDogWzIsIDY0XSB9LCB7IDU2OiAxMjEsIDgxOiAkVkUgfSwgeyA1NjogMTIzLCA4MTogJFZFIH0sIHsgNTY6IDEyNCwgODE6ICRWRSB9LCB7IDU2OiAxMjUsIDgxOiAkVkUgfSwgeyA0OiBbMSwgMTI4XSwgNTogWzEsIDEzMF0sIDExOiAxMjcsIDEyOiAxMjksIDE2OiBbMSwgMTI2XSwgNTA6ICRWbywgNTI6ICRWcCwgNTM6ICRWcSB9LCB7IDU6IFsxLCAxMzFdIH0sIG8oJFZ4LCBbMiwgMTldKSwgbygkVngsIFsyLCAyMF0pLCBvKCRWeCwgWzIsIDIyXSksIG8oJFZ4LCBbMiwgMjNdKSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxMzJdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxMzNdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxMzRdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyAxNjogWzEsIDEzNV0gfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsyLCA0Nl0sIDE3OiAxNSwgMTg6ICRWOCwgMjE6ICRWOSwgMjI6IDQwLCAyMzogJFZhLCAyNDogMTksIDI1OiAyMCwgMjY6IDIxLCAyNzogMjIsIDI4OiAyMywgMjk6ICRWYiwgMzA6ICRWYywgMzE6ICRWZCwgMzM6ICRWZSwgMzU6ICRWZiwgMzY6ICRWZywgMzc6ICRWaCwgMzg6ICRWaSwgMzk6ICRWaiwgNDE6ICRWaywgNDM6ICRWbCwgNDQ6ICRWbSwgNDY6ICRWbiwgNDk6IFsxLCAxMzZdLCA1MDogJFZvLCA1MjogJFZwLCA1MzogJFZxLCA1NDogJFZyLCA1OTogJFZzLCA2MDogJFZ0LCA2MTogJFZ1LCA2MjogJFZ2LCA3MDogJFZ3IH0sIHsgMTY6IFsxLCAxMzddIH0sIHsgNDogJFY0LCA1OiAkVjUsIDg6IDgsIDk6IDEwLCAxMjogMTIsIDEzOiAkVjYsIDE0OiAkVjcsIDE2OiBbMiwgNDRdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDQ4OiBbMSwgMTM4XSwgNTA6ICRWbywgNTI6ICRWcCwgNTM6ICRWcSwgNTQ6ICRWciwgNTk6ICRWcywgNjA6ICRWdCwgNjE6ICRWdSwgNjI6ICRWdiwgNzA6ICRWdyB9LCB7IDE2OiBbMSwgMTM5XSB9LCB7IDE2OiBbMSwgMTQwXSB9LCB7IDQ6ICRWNCwgNTogJFY1LCA4OiA4LCA5OiAxMCwgMTI6IDEyLCAxMzogJFY2LCAxNDogJFY3LCAxNjogWzIsIDQyXSwgMTc6IDE1LCAxODogJFY4LCAyMTogJFY5LCAyMjogNDAsIDIzOiAkVmEsIDI0OiAxOSwgMjU6IDIwLCAyNjogMjEsIDI3OiAyMiwgMjg6IDIzLCAyOTogJFZiLCAzMDogJFZjLCAzMTogJFZkLCAzMzogJFZlLCAzNTogJFZmLCAzNjogJFZnLCAzNzogJFZoLCAzODogJFZpLCAzOTogJFZqLCA0MTogJFZrLCA0MzogJFZsLCA0NDogJFZtLCA0NjogJFZuLCA0NzogWzEsIDE0MV0sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyA0OiAkVjQsIDU6ICRWNSwgODogOCwgOTogMTAsIDEyOiAxMiwgMTM6ICRWNiwgMTQ6ICRWNywgMTY6IFsxLCAxNDJdLCAxNzogMTUsIDE4OiAkVjgsIDIxOiAkVjksIDIyOiA0MCwgMjM6ICRWYSwgMjQ6IDE5LCAyNTogMjAsIDI2OiAyMSwgMjc6IDIyLCAyODogMjMsIDI5OiAkVmIsIDMwOiAkVmMsIDMxOiAkVmQsIDMzOiAkVmUsIDM1OiAkVmYsIDM2OiAkVmcsIDM3OiAkVmgsIDM4OiAkVmksIDM5OiAkVmosIDQxOiAkVmssIDQzOiAkVmwsIDQ0OiAkVm0sIDQ2OiAkVm4sIDUwOiAkVm8sIDUyOiAkVnAsIDUzOiAkVnEsIDU0OiAkVnIsIDU5OiAkVnMsIDYwOiAkVnQsIDYxOiAkVnUsIDYyOiAkVnYsIDcwOiAkVncgfSwgeyAxNTogWzEsIDE0M10gfSwgbygkVngsIFsyLCA0OV0pLCB7IDE1OiBbMSwgMTQ0XSB9LCBvKCRWeCwgWzIsIDUxXSksIG8oJFZ4LCBbMiwgNTJdKSwgeyAyMjogMTQ1LCA3MDogJFZ3IH0sIHsgMjI6IDE0NiwgNzA6ICRWdyB9LCB7IDU2OiAxNDcsIDgxOiAkVkUgfSwgeyA1NjogMTQ4LCA4MTogJFZFIH0sIHsgNTY6IDE0OSwgODE6ICRWRSB9LCB7IDY0OiBbMSwgMTUwXSwgODE6IFsyLCA2Ml0gfSwgeyA1OiBbMiwgNTVdIH0sIHsgNTogWzIsIDc5XSB9LCB7IDU6IFsyLCA1Nl0gfSwgeyA1OiBbMiwgNTddIH0sIHsgNTogWzIsIDU4XSB9LCBvKCRWeCwgWzIsIDE2XSksIG8oJFZ5LCBbMiwgMTBdKSwgeyAxMjogMTUxLCA1MDogJFZvLCA1MjogJFZwLCA1MzogJFZxIH0sIG8oJFZ5LCBbMiwgMTJdKSwgbygkVnksIFsyLCAxM10pLCBvKCRWeCwgWzIsIDE4XSksIG8oJFZ4LCBbMiwgMzRdKSwgbygkVngsIFsyLCAzNV0pLCBvKCRWeCwgWzIsIDM2XSksIG8oJFZ4LCBbMiwgMzddKSwgeyAxNTogWzEsIDE1Ml0gfSwgbygkVngsIFsyLCAzOF0pLCB7IDE1OiBbMSwgMTUzXSB9LCBvKCRWeCwgWzIsIDM5XSksIG8oJFZ4LCBbMiwgNDBdKSwgeyAxNTogWzEsIDE1NF0gfSwgbygkVngsIFsyLCA0MV0pLCB7IDU6IFsxLCAxNTVdIH0sIHsgNTogWzEsIDE1Nl0gfSwgeyA1NjogMTU3LCA4MTogJFZFIH0sIHsgNTY6IDE1OCwgODE6ICRWRSB9LCB7IDU6IFsyLCA2N10gfSwgeyA1OiBbMiwgNTNdIH0sIHsgNTogWzIsIDU0XSB9LCB7IDIyOiAxNTksIDcwOiAkVncgfSwgbygkVnksIFsyLCAxMV0pLCBvKCRWQSwgJFYzLCB7IDc6IDEwMywgNDA6IDE2MCB9KSwgbygkVkIsICRWMywgeyA3OiAxMDUsIDQyOiAxNjEgfSksIG8oJFZDLCAkVjMsIHsgNzogMTA4LCA0NTogMTYyIH0pLCBvKCRWeCwgWzIsIDQ4XSksIG8oJFZ4LCBbMiwgNTBdKSwgeyA1OiBbMiwgNjVdIH0sIHsgNTogWzIsIDY2XSB9LCB7IDgxOiBbMiwgNjFdIH0sIHsgMTY6IFsyLCA0N10gfSwgeyAxNjogWzIsIDQ1XSB9LCB7IDE2OiBbMiwgNDNdIH1dLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDU6IFsyLCAxXSwgNjogWzIsIDJdLCA4NzogWzIsIDYzXSwgODg6IFsyLCA2NF0sIDEyMTogWzIsIDU1XSwgMTIyOiBbMiwgNzldLCAxMjM6IFsyLCA1Nl0sIDEyNDogWzIsIDU3XSwgMTI1OiBbMiwgNThdLCAxNDc6IFsyLCA2N10sIDE0ODogWzIsIDUzXSwgMTQ5OiBbMiwgNTRdLCAxNTc6IFsyLCA2NV0sIDE1ODogWzIsIDY2XSwgMTU5OiBbMiwgNjFdLCAxNjA6IFsyLCA0N10sIDE2MTogWzIsIDQ1XSwgMTYyOiBbMiwgNDNdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZTIsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZTIgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGUyXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGUyXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlMl0gJiYgdGFibGVbc3RhdGUyXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZTJdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZTIgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gMTM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJBTElBU1wiKTtcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTElORVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICByZXR1cm4gNjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICByZXR1cm4gNjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICByZXR1cm4gNTQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgcmV0dXJuIDMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUwOlxuICAgICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgcmV0dXJuIDc0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA3NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICByZXR1cm4gNzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgcmV0dXJuIDcxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiA3MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICByZXR1cm4gNzc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgcmV0dXJuIDc4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHJldHVybiA3OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICByZXR1cm4gODA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIDgxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICByZXR1cm4gNjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgICAgcmV0dXJuIFwiSU5WQUxJRFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OigoPyFcXG4pXFxzKSspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbMC05XSsoPz1bIFxcbl0rKSkvaSwgL14oPzpib3hcXGIpL2ksIC9eKD86cGFydGljaXBhbnRcXGIpL2ksIC9eKD86YWN0b3JcXGIpL2ksIC9eKD86Y3JlYXRlXFxiKS9pLCAvXig/OmRlc3Ryb3lcXGIpL2ksIC9eKD86W15cXDwtPlxcLT46XFxuLDtdKz8oW1xcLV0qW15cXDwtPlxcLT46XFxuLDtdKz8pKj8oPz0oKD8hXFxuKVxccykrYXMoPyFcXG4pXFxzfFsjXFxuO118JCkpL2ksIC9eKD86YXNcXGIpL2ksIC9eKD86KD86KSkvaSwgL14oPzpsb29wXFxiKS9pLCAvXig/OnJlY3RcXGIpL2ksIC9eKD86b3B0XFxiKS9pLCAvXig/OmFsdFxcYikvaSwgL14oPzplbHNlXFxiKS9pLCAvXig/OnBhclxcYikvaSwgL14oPzpwYXJfb3ZlclxcYikvaSwgL14oPzphbmRcXGIpL2ksIC9eKD86Y3JpdGljYWxcXGIpL2ksIC9eKD86b3B0aW9uXFxiKS9pLCAvXig/OmJyZWFrXFxiKS9pLCAvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXFxuO10qKS9pLCAvXig/OmVuZFxcYikvaSwgL14oPzpsZWZ0IG9mXFxiKS9pLCAvXig/OnJpZ2h0IG9mXFxiKS9pLCAvXig/OmxpbmtzXFxiKS9pLCAvXig/OmxpbmtcXGIpL2ksIC9eKD86cHJvcGVydGllc1xcYikvaSwgL14oPzpkZXRhaWxzXFxiKS9pLCAvXig/Om92ZXJcXGIpL2ksIC9eKD86bm90ZVxcYikvaSwgL14oPzphY3RpdmF0ZVxcYikvaSwgL14oPzpkZWFjdGl2YXRlXFxiKS9pLCAvXig/OnRpdGxlXFxzW14jXFxuO10rKS9pLCAvXig/OnRpdGxlOlxcc1teI1xcbjtdKykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86c2VxdWVuY2VEaWFncmFtXFxiKS9pLCAvXig/OmF1dG9udW1iZXJcXGIpL2ksIC9eKD86b2ZmXFxiKS9pLCAvXig/OiwpL2ksIC9eKD86OykvaSwgL14oPzpbXlxcK1xcPC0+XFwtPjpcXG4sO10rKCg/ISgteHwtLXh8LVxcKXwtLVxcKSkpW1xcLV0qW15cXCtcXDwtPlxcLT46XFxuLDtdKykqKS9pLCAvXig/Oi0+PikvaSwgL14oPzo8PC0+PikvaSwgL14oPzotLT4+KS9pLCAvXig/Ojw8LS0+PikvaSwgL14oPzotPikvaSwgL14oPzotLT4pL2ksIC9eKD86LVt4XSkvaSwgL14oPzotLVt4XSkvaSwgL14oPzotW1xcKV0pL2ksIC9eKD86LS1bXFwpXSkvaSwgL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xcbjtdKykvaSwgL14oPzpcXCspL2ksIC9eKD86LSkvaSwgL14oPzokKS9pLCAvXig/Oi4pL2ldLFxuICAgICAgY29uZGl0aW9uczogeyBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFs0NSwgNDZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzQzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFs0MV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSURcIjogeyBcInJ1bGVzXCI6IFsyLCAzLCAxMl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQUxJQVNcIjogeyBcInJ1bGVzXCI6IFsyLCAzLCAxMywgMTRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkxJTkVcIjogeyBcInJ1bGVzXCI6IFsyLCAzLCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQyLCA0NCwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2N10sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBzZXF1ZW5jZURpYWdyYW1fZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL3NlcXVlbmNlL3NlcXVlbmNlRGIudHNcbnZhciBzdGF0ZSA9IG5ldyBJbXBlcmF0aXZlU3RhdGUoKCkgPT4gKHtcbiAgcHJldkFjdG9yOiB2b2lkIDAsXG4gIGFjdG9yczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgY3JlYXRlZEFjdG9yczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgZGVzdHJveWVkQWN0b3JzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLFxuICBib3hlczogW10sXG4gIG1lc3NhZ2VzOiBbXSxcbiAgbm90ZXM6IFtdLFxuICBzZXF1ZW5jZU51bWJlcnNFbmFibGVkOiBmYWxzZSxcbiAgd3JhcEVuYWJsZWQ6IHZvaWQgMCxcbiAgY3VycmVudEJveDogdm9pZCAwLFxuICBsYXN0Q3JlYXRlZDogdm9pZCAwLFxuICBsYXN0RGVzdHJveWVkOiB2b2lkIDBcbn0pKTtcbnZhciBhZGRCb3ggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRhdGEpIHtcbiAgc3RhdGUucmVjb3Jkcy5ib3hlcy5wdXNoKHtcbiAgICBuYW1lOiBkYXRhLnRleHQsXG4gICAgd3JhcDogZGF0YS53cmFwID8/IGF1dG9XcmFwKCksXG4gICAgZmlsbDogZGF0YS5jb2xvcixcbiAgICBhY3RvcktleXM6IFtdXG4gIH0pO1xuICBzdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3ggPSBzdGF0ZS5yZWNvcmRzLmJveGVzLnNsaWNlKC0xKVswXTtcbn0sIFwiYWRkQm94XCIpO1xudmFyIGFkZEFjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCwgbmFtZSwgZGVzY3JpcHRpb24sIHR5cGUpIHtcbiAgbGV0IGFzc2lnbmVkQm94ID0gc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94O1xuICBjb25zdCBvbGQgPSBzdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoaWQpO1xuICBpZiAob2xkKSB7XG4gICAgaWYgKHN0YXRlLnJlY29yZHMuY3VycmVudEJveCAmJiBvbGQuYm94ICYmIHN0YXRlLnJlY29yZHMuY3VycmVudEJveCAhPT0gb2xkLmJveCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogJHtvbGQubmFtZX0gY2FuJ3QgYmUgaW4gJyR7b2xkLmJveC5uYW1lfScgYW5kIGluICcke3N0YXRlLnJlY29yZHMuY3VycmVudEJveC5uYW1lfScgYXQgdGhlIHNhbWUgdGltZS5gXG4gICAgICApO1xuICAgIH1cbiAgICBhc3NpZ25lZEJveCA9IG9sZC5ib3ggPyBvbGQuYm94IDogc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94O1xuICAgIG9sZC5ib3ggPSBhc3NpZ25lZEJveDtcbiAgICBpZiAob2xkICYmIG5hbWUgPT09IG9sZC5uYW1lICYmIGRlc2NyaXB0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyaXB0aW9uPy50ZXh0ID09IG51bGwpIHtcbiAgICBkZXNjcmlwdGlvbiA9IHsgdGV4dDogbmFtZSwgdHlwZSB9O1xuICB9XG4gIGlmICh0eXBlID09IG51bGwgfHwgZGVzY3JpcHRpb24udGV4dCA9PSBudWxsKSB7XG4gICAgZGVzY3JpcHRpb24gPSB7IHRleHQ6IG5hbWUsIHR5cGUgfTtcbiAgfVxuICBzdGF0ZS5yZWNvcmRzLmFjdG9ycy5zZXQoaWQsIHtcbiAgICBib3g6IGFzc2lnbmVkQm94LFxuICAgIG5hbWUsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnRleHQsXG4gICAgd3JhcDogZGVzY3JpcHRpb24ud3JhcCA/PyBhdXRvV3JhcCgpLFxuICAgIHByZXZBY3Rvcjogc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IsXG4gICAgbGlua3M6IHt9LFxuICAgIHByb3BlcnRpZXM6IHt9LFxuICAgIGFjdG9yQ250OiBudWxsLFxuICAgIHJlY3REYXRhOiBudWxsLFxuICAgIHR5cGU6IHR5cGUgPz8gXCJwYXJ0aWNpcGFudFwiXG4gIH0pO1xuICBpZiAoc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IpIHtcbiAgICBjb25zdCBwcmV2QWN0b3JJblJlY29yZHMgPSBzdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IpO1xuICAgIGlmIChwcmV2QWN0b3JJblJlY29yZHMpIHtcbiAgICAgIHByZXZBY3RvckluUmVjb3Jkcy5uZXh0QWN0b3IgPSBpZDtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXRlLnJlY29yZHMuY3VycmVudEJveCkge1xuICAgIHN0YXRlLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChpZCk7XG4gIH1cbiAgc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IgPSBpZDtcbn0sIFwiYWRkQWN0b3JcIik7XG52YXIgYWN0aXZhdGlvbkNvdW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFydCkgPT4ge1xuICBsZXQgaTtcbiAgbGV0IGNvdW50ID0gMDtcbiAgaWYgKCFwYXJ0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IHN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tpXS50eXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfU1RBUlQgJiYgc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tpXS5mcm9tID09PSBwYXJ0KSB7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tpXS50eXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfRU5EICYmIHN0YXRlLnJlY29yZHMubWVzc2FnZXNbaV0uZnJvbSA9PT0gcGFydCkge1xuICAgICAgY291bnQtLTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufSwgXCJhY3RpdmF0aW9uQ291bnRcIik7XG52YXIgYWRkTWVzc2FnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRGcm9tLCBpZFRvLCBtZXNzYWdlLCBhbnN3ZXIpIHtcbiAgc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBpZEZyb20sXG4gICAgdG86IGlkVG8sXG4gICAgbWVzc2FnZTogbWVzc2FnZS50ZXh0LFxuICAgIHdyYXA6IG1lc3NhZ2Uud3JhcCA/PyBhdXRvV3JhcCgpLFxuICAgIGFuc3dlclxuICB9KTtcbn0sIFwiYWRkTWVzc2FnZVwiKTtcbnZhciBhZGRTaWduYWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkRnJvbSwgaWRUbywgbWVzc2FnZSwgbWVzc2FnZVR5cGUsIGFjdGl2YXRlID0gZmFsc2UpIHtcbiAgaWYgKG1lc3NhZ2VUeXBlID09PSBMSU5FVFlQRS5BQ1RJVkVfRU5EKSB7XG4gICAgY29uc3QgY250ID0gYWN0aXZhdGlvbkNvdW50KGlkRnJvbSA/PyBcIlwiKTtcbiAgICBpZiAoY250IDwgMSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJUcnlpbmcgdG8gaW5hY3RpdmF0ZSBhbiBpbmFjdGl2ZSBwYXJ0aWNpcGFudCAoXCIgKyBpZEZyb20gKyBcIilcIik7XG4gICAgICBlcnJvci5oYXNoID0ge1xuICAgICAgICB0ZXh0OiBcIi0+Pi1cIixcbiAgICAgICAgdG9rZW46IFwiLT4+LVwiLFxuICAgICAgICBsaW5lOiBcIjFcIixcbiAgICAgICAgbG9jOiB7IGZpcnN0X2xpbmU6IDEsIGxhc3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAxLCBsYXN0X2NvbHVtbjogMSB9LFxuICAgICAgICBleHBlY3RlZDogW1wiJ0FDVElWRV9QQVJUSUNJUEFOVCdcIl1cbiAgICAgIH07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtcbiAgICBmcm9tOiBpZEZyb20sXG4gICAgdG86IGlkVG8sXG4gICAgbWVzc2FnZTogbWVzc2FnZT8udGV4dCA/PyBcIlwiLFxuICAgIHdyYXA6IG1lc3NhZ2U/LndyYXAgPz8gYXV0b1dyYXAoKSxcbiAgICB0eXBlOiBtZXNzYWdlVHlwZSxcbiAgICBhY3RpdmF0ZVxuICB9KTtcbiAgcmV0dXJuIHRydWU7XG59LCBcImFkZFNpZ25hbFwiKTtcbnZhciBoYXNBdExlYXN0T25lQm94ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuYm94ZXMubGVuZ3RoID4gMDtcbn0sIFwiaGFzQXRMZWFzdE9uZUJveFwiKTtcbnZhciBoYXNBdExlYXN0T25lQm94V2l0aFRpdGxlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuYm94ZXMuc29tZSgoYikgPT4gYi5uYW1lKTtcbn0sIFwiaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZVwiKTtcbnZhciBnZXRNZXNzYWdlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzO1xufSwgXCJnZXRNZXNzYWdlc1wiKTtcbnZhciBnZXRCb3hlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLmJveGVzO1xufSwgXCJnZXRCb3hlc1wiKTtcbnZhciBnZXRBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5hY3RvcnM7XG59LCBcImdldEFjdG9yc1wiKTtcbnZhciBnZXRDcmVhdGVkQWN0b3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuY3JlYXRlZEFjdG9ycztcbn0sIFwiZ2V0Q3JlYXRlZEFjdG9yc1wiKTtcbnZhciBnZXREZXN0cm95ZWRBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc3RhdGUucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnM7XG59LCBcImdldERlc3Ryb3llZEFjdG9yc1wiKTtcbnZhciBnZXRBY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIHN0YXRlLnJlY29yZHMuYWN0b3JzLmdldChpZCk7XG59LCBcImdldEFjdG9yXCIpO1xudmFyIGdldEFjdG9yS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBbLi4uc3RhdGUucmVjb3Jkcy5hY3RvcnMua2V5cygpXTtcbn0sIFwiZ2V0QWN0b3JLZXlzXCIpO1xudmFyIGVuYWJsZVNlcXVlbmNlTnVtYmVycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHN0YXRlLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZCA9IHRydWU7XG59LCBcImVuYWJsZVNlcXVlbmNlTnVtYmVyc1wiKTtcbnZhciBkaXNhYmxlU2VxdWVuY2VOdW1iZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc3RhdGUucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkID0gZmFsc2U7XG59LCBcImRpc2FibGVTZXF1ZW5jZU51bWJlcnNcIik7XG52YXIgc2hvd1NlcXVlbmNlTnVtYmVycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gc3RhdGUucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkLCBcInNob3dTZXF1ZW5jZU51bWJlcnNcIik7XG52YXIgc2V0V3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24od3JhcFNldHRpbmcpIHtcbiAgc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZCA9IHdyYXBTZXR0aW5nO1xufSwgXCJzZXRXcmFwXCIpO1xudmFyIGV4dHJhY3RXcmFwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCkgPT4ge1xuICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKTtcbiAgY29uc3Qgd3JhcCA9IC9eOj93cmFwOi8uZXhlYyh0ZXh0KSAhPT0gbnVsbCA/IHRydWUgOiAvXjo/bm93cmFwOi8uZXhlYyh0ZXh0KSAhPT0gbnVsbCA/IGZhbHNlIDogdm9pZCAwO1xuICBjb25zdCBjbGVhbmVkVGV4dCA9ICh3cmFwID09PSB2b2lkIDAgPyB0ZXh0IDogdGV4dC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCBcIlwiKSkudHJpbSgpO1xuICByZXR1cm4geyBjbGVhbmVkVGV4dCwgd3JhcCB9O1xufSwgXCJleHRyYWN0V3JhcFwiKTtcbnZhciBhdXRvV3JhcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBpZiAoc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlLnJlY29yZHMud3JhcEVuYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGdldENvbmZpZzIoKS5zZXF1ZW5jZT8ud3JhcCA/PyBmYWxzZTtcbn0sIFwiYXV0b1dyYXBcIik7XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgc3RhdGUucmVzZXQoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgcGFyc2VNZXNzYWdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdHIpIHtcbiAgY29uc3QgdHJpbW1lZFN0ciA9IHN0ci50cmltKCk7XG4gIGNvbnN0IHsgd3JhcCwgY2xlYW5lZFRleHQgfSA9IGV4dHJhY3RXcmFwKHRyaW1tZWRTdHIpO1xuICBjb25zdCBtZXNzYWdlID0ge1xuICAgIHRleHQ6IGNsZWFuZWRUZXh0LFxuICAgIHdyYXBcbiAgfTtcbiAgbG9nLmRlYnVnKGBwYXJzZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl9YCk7XG4gIHJldHVybiBtZXNzYWdlO1xufSwgXCJwYXJzZU1lc3NhZ2VcIik7XG52YXIgcGFyc2VCb3hEYXRhID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdHIpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXigoPzpyZ2JhP3xoc2xhPylcXHMqXFwoLipcXCl8XFx3KikoLiopJC8uZXhlYyhzdHIpO1xuICBsZXQgY29sb3IgPSBtYXRjaD8uWzFdID8gbWF0Y2hbMV0udHJpbSgpIDogXCJ0cmFuc3BhcmVudFwiO1xuICBsZXQgdGl0bGUgPSBtYXRjaD8uWzJdID8gbWF0Y2hbMl0udHJpbSgpIDogdm9pZCAwO1xuICBpZiAod2luZG93Py5DU1MpIHtcbiAgICBpZiAoIXdpbmRvdy5DU1Muc3VwcG9ydHMoXCJjb2xvclwiLCBjb2xvcikpIHtcbiAgICAgIGNvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgdGl0bGUgPSBzdHIudHJpbSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdHlsZSA9IG5ldyBPcHRpb24oKS5zdHlsZTtcbiAgICBzdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgIGlmIChzdHlsZS5jb2xvciAhPT0gY29sb3IpIHtcbiAgICAgIGNvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgdGl0bGUgPSBzdHIudHJpbSgpO1xuICAgIH1cbiAgfVxuICBjb25zdCB7IHdyYXAsIGNsZWFuZWRUZXh0IH0gPSBleHRyYWN0V3JhcCh0aXRsZSk7XG4gIHJldHVybiB7XG4gICAgdGV4dDogY2xlYW5lZFRleHQgPyBzYW5pdGl6ZVRleHQoY2xlYW5lZFRleHQsIGdldENvbmZpZzIoKSkgOiB2b2lkIDAsXG4gICAgY29sb3IsXG4gICAgd3JhcFxuICB9O1xufSwgXCJwYXJzZUJveERhdGFcIik7XG52YXIgTElORVRZUEUgPSB7XG4gIFNPTElEOiAwLFxuICBET1RURUQ6IDEsXG4gIE5PVEU6IDIsXG4gIFNPTElEX0NST1NTOiAzLFxuICBET1RURURfQ1JPU1M6IDQsXG4gIFNPTElEX09QRU46IDUsXG4gIERPVFRFRF9PUEVOOiA2LFxuICBMT09QX1NUQVJUOiAxMCxcbiAgTE9PUF9FTkQ6IDExLFxuICBBTFRfU1RBUlQ6IDEyLFxuICBBTFRfRUxTRTogMTMsXG4gIEFMVF9FTkQ6IDE0LFxuICBPUFRfU1RBUlQ6IDE1LFxuICBPUFRfRU5EOiAxNixcbiAgQUNUSVZFX1NUQVJUOiAxNyxcbiAgQUNUSVZFX0VORDogMTgsXG4gIFBBUl9TVEFSVDogMTksXG4gIFBBUl9BTkQ6IDIwLFxuICBQQVJfRU5EOiAyMSxcbiAgUkVDVF9TVEFSVDogMjIsXG4gIFJFQ1RfRU5EOiAyMyxcbiAgU09MSURfUE9JTlQ6IDI0LFxuICBET1RURURfUE9JTlQ6IDI1LFxuICBBVVRPTlVNQkVSOiAyNixcbiAgQ1JJVElDQUxfU1RBUlQ6IDI3LFxuICBDUklUSUNBTF9PUFRJT046IDI4LFxuICBDUklUSUNBTF9FTkQ6IDI5LFxuICBCUkVBS19TVEFSVDogMzAsXG4gIEJSRUFLX0VORDogMzEsXG4gIFBBUl9PVkVSX1NUQVJUOiAzMixcbiAgQklESVJFQ1RJT05BTF9TT0xJRDogMzMsXG4gIEJJRElSRUNUSU9OQUxfRE9UVEVEOiAzNFxufTtcbnZhciBBUlJPV1RZUEUgPSB7XG4gIEZJTExFRDogMCxcbiAgT1BFTjogMVxufTtcbnZhciBQTEFDRU1FTlQgPSB7XG4gIExFRlRPRjogMCxcbiAgUklHSFRPRjogMSxcbiAgT1ZFUjogMlxufTtcbnZhciBhZGROb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3RvciwgcGxhY2VtZW50LCBtZXNzYWdlKSB7XG4gIGNvbnN0IG5vdGUgPSB7XG4gICAgYWN0b3IsXG4gICAgcGxhY2VtZW50LFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UudGV4dCxcbiAgICB3cmFwOiBtZXNzYWdlLndyYXAgPz8gYXV0b1dyYXAoKVxuICB9O1xuICBjb25zdCBhY3RvcnMgPSBbXS5jb25jYXQoYWN0b3IsIGFjdG9yKTtcbiAgc3RhdGUucmVjb3Jkcy5ub3Rlcy5wdXNoKG5vdGUpO1xuICBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe1xuICAgIGZyb206IGFjdG9yc1swXSxcbiAgICB0bzogYWN0b3JzWzFdLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UudGV4dCxcbiAgICB3cmFwOiBtZXNzYWdlLndyYXAgPz8gYXV0b1dyYXAoKSxcbiAgICB0eXBlOiBMSU5FVFlQRS5OT1RFLFxuICAgIHBsYWNlbWVudFxuICB9KTtcbn0sIFwiYWRkTm90ZVwiKTtcbnZhciBhZGRMaW5rcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWN0b3JJZCwgdGV4dCkge1xuICBjb25zdCBhY3RvciA9IGdldEFjdG9yKGFjdG9ySWQpO1xuICB0cnkge1xuICAgIGxldCBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVUZXh0KHRleHQudGV4dCwgZ2V0Q29uZmlnMigpKTtcbiAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC5yZXBsYWNlKC8mYW1wOy9nLCBcIiZcIik7XG4gICAgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplZFRleHQucmVwbGFjZSgvJmVxdWFsczsvZywgXCI9XCIpO1xuICAgIGNvbnN0IGxpbmtzID0gSlNPTi5wYXJzZShzYW5pdGl6ZWRUZXh0KTtcbiAgICBpbnNlcnRMaW5rcyhhY3RvciwgbGlua3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHRcIiwgZSk7XG4gIH1cbn0sIFwiYWRkTGlua3NcIik7XG52YXIgYWRkQUxpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGFjdG9ySWQsIHRleHQpIHtcbiAgY29uc3QgYWN0b3IgPSBnZXRBY3RvcihhY3RvcklkKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaW5rcyA9IHt9O1xuICAgIGxldCBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVUZXh0KHRleHQudGV4dCwgZ2V0Q29uZmlnMigpKTtcbiAgICBjb25zdCBzZXAgPSBzYW5pdGl6ZWRUZXh0LmluZGV4T2YoXCJAXCIpO1xuICAgIHNhbml0aXplZFRleHQgPSBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UoLyZhbXA7L2csIFwiJlwiKTtcbiAgICBzYW5pdGl6ZWRUZXh0ID0gc2FuaXRpemVkVGV4dC5yZXBsYWNlKC8mZXF1YWxzOy9nLCBcIj1cIik7XG4gICAgY29uc3QgbGFiZWwgPSBzYW5pdGl6ZWRUZXh0LnNsaWNlKDAsIHNlcCAtIDEpLnRyaW0oKTtcbiAgICBjb25zdCBsaW5rID0gc2FuaXRpemVkVGV4dC5zbGljZShzZXAgKyAxKS50cmltKCk7XG4gICAgbGlua3NbbGFiZWxdID0gbGluaztcbiAgICBpbnNlcnRMaW5rcyhhY3RvciwgbGlua3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmVycm9yKFwiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHRcIiwgZSk7XG4gIH1cbn0sIFwiYWRkQUxpbmtcIik7XG5mdW5jdGlvbiBpbnNlcnRMaW5rcyhhY3RvciwgbGlua3MpIHtcbiAgaWYgKGFjdG9yLmxpbmtzID09IG51bGwpIHtcbiAgICBhY3Rvci5saW5rcyA9IGxpbmtzO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGxpbmtzKSB7XG4gICAgICBhY3Rvci5saW5rc1trZXldID0gbGlua3Nba2V5XTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShpbnNlcnRMaW5rcywgXCJpbnNlcnRMaW5rc1wiKTtcbnZhciBhZGRQcm9wZXJ0aWVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3RvcklkLCB0ZXh0KSB7XG4gIGNvbnN0IGFjdG9yID0gZ2V0QWN0b3IoYWN0b3JJZCk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IHNhbml0aXplVGV4dCh0ZXh0LnRleHQsIGdldENvbmZpZzIoKSk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IEpTT04ucGFyc2Uoc2FuaXRpemVkVGV4dCk7XG4gICAgaW5zZXJ0UHJvcGVydGllcyhhY3RvciwgcHJvcGVydGllcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3IoXCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIHByb3BlcnRpZXMgdGV4dFwiLCBlKTtcbiAgfVxufSwgXCJhZGRQcm9wZXJ0aWVzXCIpO1xuZnVuY3Rpb24gaW5zZXJ0UHJvcGVydGllcyhhY3RvciwgcHJvcGVydGllcykge1xuICBpZiAoYWN0b3IucHJvcGVydGllcyA9PSBudWxsKSB7XG4gICAgYWN0b3IucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgYWN0b3IucHJvcGVydGllc1trZXldID0gcHJvcGVydGllc1trZXldO1xuICAgIH1cbiAgfVxufVxuX19uYW1lKGluc2VydFByb3BlcnRpZXMsIFwiaW5zZXJ0UHJvcGVydGllc1wiKTtcbmZ1bmN0aW9uIGJveEVuZCgpIHtcbiAgc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94ID0gdm9pZCAwO1xufVxuX19uYW1lKGJveEVuZCwgXCJib3hFbmRcIik7XG52YXIgYWRkRGV0YWlscyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWN0b3JJZCwgdGV4dCkge1xuICBjb25zdCBhY3RvciA9IGdldEFjdG9yKGFjdG9ySWQpO1xuICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGV4dC50ZXh0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ZXh0MiA9IGVsZW0uaW5uZXJIVE1MO1xuICAgIGNvbnN0IGRldGFpbHMgPSBKU09OLnBhcnNlKHRleHQyKTtcbiAgICBpZiAoZGV0YWlscy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpbnNlcnRQcm9wZXJ0aWVzKGFjdG9yLCBkZXRhaWxzLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBpZiAoZGV0YWlscy5saW5rcykge1xuICAgICAgaW5zZXJ0TGlua3MoYWN0b3IsIGRldGFpbHMubGlua3MpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5lcnJvcihcImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0XCIsIGUpO1xuICB9XG59LCBcImFkZERldGFpbHNcIik7XG52YXIgZ2V0QWN0b3JQcm9wZXJ0eSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYWN0b3IsIGtleSkge1xuICBpZiAoYWN0b3I/LnByb3BlcnRpZXMgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBhY3Rvci5wcm9wZXJ0aWVzW2tleV07XG4gIH1cbiAgcmV0dXJuIHZvaWQgMDtcbn0sIFwiZ2V0QWN0b3JQcm9wZXJ0eVwiKTtcbnZhciBhcHBseSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFyYW0pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgcGFyYW0uZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBhcHBseShpdGVtKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJzZXF1ZW5jZUluZGV4XCI6XG4gICAgICAgIHN0YXRlLnJlY29yZHMubWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgZnJvbTogdm9pZCAwLFxuICAgICAgICAgIHRvOiB2b2lkIDAsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgc3RhcnQ6IHBhcmFtLnNlcXVlbmNlSW5kZXgsXG4gICAgICAgICAgICBzdGVwOiBwYXJhbS5zZXF1ZW5jZUluZGV4U3RlcCxcbiAgICAgICAgICAgIHZpc2libGU6IHBhcmFtLnNlcXVlbmNlVmlzaWJsZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgd3JhcDogZmFsc2UsXG4gICAgICAgICAgdHlwZTogcGFyYW0uc2lnbmFsVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkUGFydGljaXBhbnRcIjpcbiAgICAgICAgYWRkQWN0b3IocGFyYW0uYWN0b3IsIHBhcmFtLmFjdG9yLCBwYXJhbS5kZXNjcmlwdGlvbiwgcGFyYW0uZHJhdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImNyZWF0ZVBhcnRpY2lwYW50XCI6XG4gICAgICAgIGlmIChzdGF0ZS5yZWNvcmRzLmFjdG9ycy5oYXMocGFyYW0uYWN0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvclwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkID0gcGFyYW0uYWN0b3I7XG4gICAgICAgIGFkZEFjdG9yKHBhcmFtLmFjdG9yLCBwYXJhbS5hY3RvciwgcGFyYW0uZGVzY3JpcHRpb24sIHBhcmFtLmRyYXcpO1xuICAgICAgICBzdGF0ZS5yZWNvcmRzLmNyZWF0ZWRBY3RvcnMuc2V0KHBhcmFtLmFjdG9yLCBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRlc3Ryb3lQYXJ0aWNpcGFudFwiOlxuICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQgPSBwYXJhbS5hY3RvcjtcbiAgICAgICAgc3RhdGUucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnMuc2V0KHBhcmFtLmFjdG9yLCBzdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFjdGl2ZVN0YXJ0XCI6XG4gICAgICAgIGFkZFNpZ25hbChwYXJhbS5hY3Rvciwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhY3RpdmVFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHBhcmFtLmFjdG9yLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZE5vdGVcIjpcbiAgICAgICAgYWRkTm90ZShwYXJhbS5hY3RvciwgcGFyYW0ucGxhY2VtZW50LCBwYXJhbS50ZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkTGlua3NcIjpcbiAgICAgICAgYWRkTGlua3MocGFyYW0uYWN0b3IsIHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRBTGlua1wiOlxuICAgICAgICBhZGRBTGluayhwYXJhbS5hY3RvciwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZFByb3BlcnRpZXNcIjpcbiAgICAgICAgYWRkUHJvcGVydGllcyhwYXJhbS5hY3RvciwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZERldGFpbHNcIjpcbiAgICAgICAgYWRkRGV0YWlscyhwYXJhbS5hY3RvciwgcGFyYW0udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZE1lc3NhZ2VcIjpcbiAgICAgICAgaWYgKHN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQpIHtcbiAgICAgICAgICBpZiAocGFyYW0udG8gIT09IHN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudCBcIiArIHN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQubmFtZSArIFwiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBjcmVhdGluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkID0gdm9pZCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpIHtcbiAgICAgICAgICBpZiAocGFyYW0udG8gIT09IHN0YXRlLnJlY29yZHMubGFzdERlc3Ryb3llZCAmJiBwYXJhbS5mcm9tICE9PSBzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50IFwiICsgc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkLm5hbWUgKyBcIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFkZFNpZ25hbChwYXJhbS5mcm9tLCBwYXJhbS50bywgcGFyYW0ubXNnLCBwYXJhbS5zaWduYWxUeXBlLCBwYXJhbS5hY3RpdmF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJveFN0YXJ0XCI6XG4gICAgICAgIGFkZEJveChwYXJhbS5ib3hEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm94RW5kXCI6XG4gICAgICAgIGJveEVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsb29wU3RhcnRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5sb29wVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxvb3BFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWN0U3RhcnRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5jb2xvciwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlY3RFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJvcHRTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLm9wdFRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJvcHRFbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhbHRTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmFsdFRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlbHNlXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgcGFyYW0uYWx0VGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFsdEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNldEFjY1RpdGxlXCI6XG4gICAgICAgIHNldEFjY1RpdGxlKHBhcmFtLnRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwYXJTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLnBhclRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5wYXJUZXh0LCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicGFyRW5kXCI6XG4gICAgICAgIGFkZFNpZ25hbCh2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5zaWduYWxUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiY3JpdGljYWxTdGFydFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLmNyaXRpY2FsVGV4dCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHBhcmFtLm9wdGlvblRleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjcml0aWNhbEVuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyZWFrU3RhcnRcIjpcbiAgICAgICAgYWRkU2lnbmFsKHZvaWQgMCwgdm9pZCAwLCBwYXJhbS5icmVha1RleHQsIHBhcmFtLnNpZ25hbFR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJicmVha0VuZFwiOlxuICAgICAgICBhZGRTaWduYWwodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgcGFyYW0uc2lnbmFsVHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufSwgXCJhcHBseVwiKTtcbnZhciBzZXF1ZW5jZURiX2RlZmF1bHQgPSB7XG4gIGFkZEFjdG9yLFxuICBhZGRNZXNzYWdlLFxuICBhZGRTaWduYWwsXG4gIGFkZExpbmtzLFxuICBhZGREZXRhaWxzLFxuICBhZGRQcm9wZXJ0aWVzLFxuICBhdXRvV3JhcCxcbiAgc2V0V3JhcCxcbiAgZW5hYmxlU2VxdWVuY2VOdW1iZXJzLFxuICBkaXNhYmxlU2VxdWVuY2VOdW1iZXJzLFxuICBzaG93U2VxdWVuY2VOdW1iZXJzLFxuICBnZXRNZXNzYWdlcyxcbiAgZ2V0QWN0b3JzLFxuICBnZXRDcmVhdGVkQWN0b3JzLFxuICBnZXREZXN0cm95ZWRBY3RvcnMsXG4gIGdldEFjdG9yLFxuICBnZXRBY3RvcktleXMsXG4gIGdldEFjdG9yUHJvcGVydHksXG4gIGdldEFjY1RpdGxlLFxuICBnZXRCb3hlcyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldENvbmZpZzogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBnZXRDb25maWcyKCkuc2VxdWVuY2UsIFwiZ2V0Q29uZmlnXCIpLFxuICBjbGVhcjogY2xlYXIyLFxuICBwYXJzZU1lc3NhZ2UsXG4gIHBhcnNlQm94RGF0YSxcbiAgTElORVRZUEUsXG4gIEFSUk9XVFlQRSxcbiAgUExBQ0VNRU5ULFxuICBhZGROb3RlLFxuICBzZXRBY2NUaXRsZSxcbiAgYXBwbHksXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgaGFzQXRMZWFzdE9uZUJveCxcbiAgaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NlcXVlbmNlL3N0eWxlcy5qc1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGAuYWN0b3Ige1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdG9yQm9yZGVyfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JCa2d9O1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5hY3RvckxpbmVDb2xvcn07XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNlcXVlbmNlTnVtYmVyQ29sb3J9O1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAke29wdGlvbnMuc2lnbmFsQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnNpZ25hbENvbG9yfTtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnNpZ25hbFRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxhYmVsQm94IHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5sYWJlbEJveEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubGFiZWxCb3hCa2dDb2xvcn07XG4gIH1cblxuICAubGFiZWxUZXh0LCAubGFiZWxUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5sYWJlbFRleHRDb2xvcn07XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7XG4gICAgZmlsbDogJHtvcHRpb25zLmxvb3BUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wTGluZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5sYWJlbEJveEJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubGFiZWxCb3hCb3JkZXJDb2xvcn07XG4gIH1cblxuICAubm90ZSB7XG4gICAgLy9zdHJva2U6ICNkZWNjOTM7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubm90ZUJvcmRlckNvbG9yfTtcbiAgICBmaWxsOiAke29wdGlvbnMubm90ZUJrZ0NvbG9yfTtcbiAgfVxuXG4gIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5ub3RlVGV4dENvbG9yfTtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAuYWN0aXZhdGlvbjAge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZhdGlvbjEge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0aXZhdGlvbjIge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hY3RpdmF0aW9uQmtnQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07XG4gIH1cblxuICAuYWN0b3JQb3B1cE1lbnUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5hY3RvclBvcHVwTWVudVBhbmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdG9yQmtnfTtcbiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDNweCA1cHggMnB4IHJnYigwIDAgMCAvIDAuNCkpO1xufVxuICAuYWN0b3ItbWFuIGxpbmUge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFjdG9yQm9yZGVyfTtcbiAgICBmaWxsOiAke29wdGlvbnMuYWN0b3JCa2d9O1xuICB9XG4gIC5hY3Rvci1tYW4gY2lyY2xlLCBsaW5lIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5hY3RvckJvcmRlcn07XG4gICAgZmlsbDogJHtvcHRpb25zLmFjdG9yQmtnfTtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9zZXF1ZW5jZS9zZXF1ZW5jZVJlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3NlcXVlbmNlL3N2Z0RyYXcuanNcbmltcG9ydCB7IHNhbml0aXplVXJsIH0gZnJvbSBcIkBicmFpbnRyZWUvc2FuaXRpemUtdXJsXCI7XG52YXIgQUNUT1JfVFlQRV9XSURUSCA9IDE4ICogMjtcbnZhciBUT1BfQUNUT1JfQ0xBU1MgPSBcImFjdG9yLXRvcFwiO1xudmFyIEJPVFRPTV9BQ1RPUl9DTEFTUyA9IFwiYWN0b3ItYm90dG9tXCI7XG52YXIgQUNUT1JfQk9YX0NMQVNTID0gXCJhY3Rvci1ib3hcIjtcbnZhciBBQ1RPUl9NQU5fRklHVVJFX0NMQVNTID0gXCJhY3Rvci1tYW5cIjtcbnZhciBkcmF3UmVjdDIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHJlY3REYXRhKSB7XG4gIHJldHVybiBkcmF3UmVjdChlbGVtLCByZWN0RGF0YSk7XG59LCBcImRyYXdSZWN0XCIpO1xudmFyIGRyYXdQb3B1cCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYWN0b3IsIG1pbk1lbnVXaWR0aCwgdGV4dEF0dHJzLCBmb3JjZU1lbnVzKSB7XG4gIGlmIChhY3Rvci5saW5rcyA9PT0gdm9pZCAwIHx8IGFjdG9yLmxpbmtzID09PSBudWxsIHx8IE9iamVjdC5rZXlzKGFjdG9yLmxpbmtzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBoZWlnaHQ6IDAsIHdpZHRoOiAwIH07XG4gIH1cbiAgY29uc3QgbGlua3MgPSBhY3Rvci5saW5rcztcbiAgY29uc3QgYWN0b3JDbnQyID0gYWN0b3IuYWN0b3JDbnQ7XG4gIGNvbnN0IHJlY3REYXRhID0gYWN0b3IucmVjdERhdGE7XG4gIHZhciBkaXNwbGF5VmFsdWUgPSBcIm5vbmVcIjtcbiAgaWYgKGZvcmNlTWVudXMpIHtcbiAgICBkaXNwbGF5VmFsdWUgPSBcImJsb2NrICFpbXBvcnRhbnRcIjtcbiAgfVxuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBnLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudDIgKyBcIl9wb3B1cFwiKTtcbiAgZy5hdHRyKFwiY2xhc3NcIiwgXCJhY3RvclBvcHVwTWVudVwiKTtcbiAgZy5hdHRyKFwiZGlzcGxheVwiLCBkaXNwbGF5VmFsdWUpO1xuICB2YXIgYWN0b3JDbGFzcyA9IFwiXCI7XG4gIGlmIChyZWN0RGF0YS5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgYWN0b3JDbGFzcyA9IFwiIFwiICsgcmVjdERhdGEuY2xhc3M7XG4gIH1cbiAgbGV0IG1lbnVXaWR0aCA9IHJlY3REYXRhLndpZHRoID4gbWluTWVudVdpZHRoID8gcmVjdERhdGEud2lkdGggOiBtaW5NZW51V2lkdGg7XG4gIGNvbnN0IHJlY3RFbGVtID0gZy5hcHBlbmQoXCJyZWN0XCIpO1xuICByZWN0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhY3RvclBvcHVwTWVudVBhbmVsXCIgKyBhY3RvckNsYXNzKTtcbiAgcmVjdEVsZW0uYXR0cihcInhcIiwgcmVjdERhdGEueCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJ5XCIsIHJlY3REYXRhLmhlaWdodCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJmaWxsXCIsIHJlY3REYXRhLmZpbGwpO1xuICByZWN0RWxlbS5hdHRyKFwic3Ryb2tlXCIsIHJlY3REYXRhLnN0cm9rZSk7XG4gIHJlY3RFbGVtLmF0dHIoXCJ3aWR0aFwiLCBtZW51V2lkdGgpO1xuICByZWN0RWxlbS5hdHRyKFwiaGVpZ2h0XCIsIHJlY3REYXRhLmhlaWdodCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJyeFwiLCByZWN0RGF0YS5yeCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJyeVwiLCByZWN0RGF0YS5yeSk7XG4gIGlmIChsaW5rcyAhPSBudWxsKSB7XG4gICAgdmFyIGxpbmtZID0gMjA7XG4gICAgZm9yIChsZXQga2V5IGluIGxpbmtzKSB7XG4gICAgICB2YXIgbGlua0VsZW0gPSBnLmFwcGVuZChcImFcIik7XG4gICAgICB2YXIgc2FuaXRpemVkTGluayA9IHNhbml0aXplVXJsKGxpbmtzW2tleV0pO1xuICAgICAgbGlua0VsZW0uYXR0cihcInhsaW5rOmhyZWZcIiwgc2FuaXRpemVkTGluayk7XG4gICAgICBsaW5rRWxlbS5hdHRyKFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuICAgICAgX2RyYXdNZW51SXRlbVRleHRDYW5kaWRhdGVGdW5jKHRleHRBdHRycykoXG4gICAgICAgIGtleSxcbiAgICAgICAgbGlua0VsZW0sXG4gICAgICAgIHJlY3REYXRhLnggKyAxMCxcbiAgICAgICAgcmVjdERhdGEuaGVpZ2h0ICsgbGlua1ksXG4gICAgICAgIG1lbnVXaWR0aCxcbiAgICAgICAgMjAsXG4gICAgICAgIHsgY2xhc3M6IFwiYWN0b3JcIiB9LFxuICAgICAgICB0ZXh0QXR0cnNcbiAgICAgICk7XG4gICAgICBsaW5rWSArPSAzMDtcbiAgICB9XG4gIH1cbiAgcmVjdEVsZW0uYXR0cihcImhlaWdodFwiLCBsaW5rWSk7XG4gIHJldHVybiB7IGhlaWdodDogcmVjdERhdGEuaGVpZ2h0ICsgbGlua1ksIHdpZHRoOiBtZW51V2lkdGggfTtcbn0sIFwiZHJhd1BvcHVwXCIpO1xudmFyIHBvcHVwTWVudVRvZ2dsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocG9wSWQpIHtcbiAgcmV0dXJuIFwidmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1wiICsgcG9wSWQgKyBcIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gcHUuc3R5bGUuZGlzcGxheSA9PSAnYmxvY2snID8gJ25vbmUnIDogJ2Jsb2NrJzsgfVwiO1xufSwgXCJwb3B1cE1lbnVUb2dnbGVcIik7XG52YXIgZHJhd0thdGV4ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihlbGVtLCB0ZXh0RGF0YSwgbXNnTW9kZWwgPSBudWxsKSB7XG4gIGxldCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKTtcbiAgY29uc3QgbGluZXMgPSBhd2FpdCByZW5kZXJLYXRleCh0ZXh0RGF0YS50ZXh0LCBnZXRDb25maWcoKSk7XG4gIGNvbnN0IGRpdkVsZW0gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuYXR0cihcInN0eWxlXCIsIFwid2lkdGg6IGZpdC1jb250ZW50O1wiKS5hdHRyKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLmh0bWwobGluZXMpO1xuICBjb25zdCBkaW0gPSBkaXZFbGVtLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdGV4dEVsZW0uYXR0cihcImhlaWdodFwiLCBNYXRoLnJvdW5kKGRpbS5oZWlnaHQpKS5hdHRyKFwid2lkdGhcIiwgTWF0aC5yb3VuZChkaW0ud2lkdGgpKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzID09PSBcIm5vdGVUZXh0XCIpIHtcbiAgICBjb25zdCByZWN0RWxlbSA9IGVsZW0ubm9kZSgpLmZpcnN0Q2hpbGQ7XG4gICAgcmVjdEVsZW0uc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGRpbS5oZWlnaHQgKyAyICogdGV4dERhdGEudGV4dE1hcmdpbik7XG4gICAgY29uc3QgcmVjdERpbSA9IHJlY3RFbGVtLmdldEJCb3goKTtcbiAgICB0ZXh0RWxlbS5hdHRyKFwieFwiLCBNYXRoLnJvdW5kKHJlY3REaW0ueCArIHJlY3REaW0ud2lkdGggLyAyIC0gZGltLndpZHRoIC8gMikpLmF0dHIoXCJ5XCIsIE1hdGgucm91bmQocmVjdERpbS55ICsgcmVjdERpbS5oZWlnaHQgLyAyIC0gZGltLmhlaWdodCAvIDIpKTtcbiAgfSBlbHNlIGlmIChtc2dNb2RlbCkge1xuICAgIGxldCB7IHN0YXJ0eCwgc3RvcHgsIHN0YXJ0eSB9ID0gbXNnTW9kZWw7XG4gICAgaWYgKHN0YXJ0eCA+IHN0b3B4KSB7XG4gICAgICBjb25zdCB0ZW1wID0gc3RhcnR4O1xuICAgICAgc3RhcnR4ID0gc3RvcHg7XG4gICAgICBzdG9weCA9IHRlbXA7XG4gICAgfVxuICAgIHRleHRFbGVtLmF0dHIoXCJ4XCIsIE1hdGgucm91bmQoc3RhcnR4ICsgTWF0aC5hYnMoc3RhcnR4IC0gc3RvcHgpIC8gMiAtIGRpbS53aWR0aCAvIDIpKTtcbiAgICBpZiAodGV4dERhdGEuY2xhc3MgPT09IFwibG9vcFRleHRcIikge1xuICAgICAgdGV4dEVsZW0uYXR0cihcInlcIiwgTWF0aC5yb3VuZChzdGFydHkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dEVsZW0uYXR0cihcInlcIiwgTWF0aC5yb3VuZChzdGFydHkgLSBkaW0uaGVpZ2h0KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbdGV4dEVsZW1dO1xufSwgXCJkcmF3S2F0ZXhcIik7XG52YXIgZHJhd1RleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIGxldCBwcmV2VGV4dEhlaWdodCA9IDA7XG4gIGxldCB0ZXh0SGVpZ2h0ID0gMDtcbiAgY29uc3QgbGluZXMgPSB0ZXh0RGF0YS50ZXh0LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgY29uc3QgW190ZXh0Rm9udFNpemUsIF90ZXh0Rm9udFNpemVQeF0gPSBwYXJzZUZvbnRTaXplKHRleHREYXRhLmZvbnRTaXplKTtcbiAgbGV0IHRleHRFbGVtcyA9IFtdO1xuICBsZXQgZHkgPSAwO1xuICBsZXQgeWZ1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHRleHREYXRhLnksIFwieWZ1bmNcIik7XG4gIGlmICh0ZXh0RGF0YS52YWxpZ24gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luICE9PSB2b2lkIDAgJiYgdGV4dERhdGEudGV4dE1hcmdpbiA+IDApIHtcbiAgICBzd2l0Y2ggKHRleHREYXRhLnZhbGlnbikge1xuICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgIHlmdW5jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLnJvdW5kKHRleHREYXRhLnkgKyB0ZXh0RGF0YS50ZXh0TWFyZ2luKSwgXCJ5ZnVuY1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWlkZGxlXCI6XG4gICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgIHlmdW5jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLnJvdW5kKHRleHREYXRhLnkgKyAocHJldlRleHRIZWlnaHQgKyB0ZXh0SGVpZ2h0ICsgdGV4dERhdGEudGV4dE1hcmdpbikgLyAyKSwgXCJ5ZnVuY1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgIHlmdW5jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBNYXRoLnJvdW5kKFxuICAgICAgICAgIHRleHREYXRhLnkgKyAocHJldlRleHRIZWlnaHQgKyB0ZXh0SGVpZ2h0ICsgMiAqIHRleHREYXRhLnRleHRNYXJnaW4pIC0gdGV4dERhdGEudGV4dE1hcmdpblxuICAgICAgICApLCBcInlmdW5jXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHRleHREYXRhLmFuY2hvciAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS53aWR0aCAhPT0gdm9pZCAwKSB7XG4gICAgc3dpdGNoICh0ZXh0RGF0YS5hbmNob3IpIHtcbiAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgdGV4dERhdGEueCA9IE1hdGgucm91bmQodGV4dERhdGEueCArIHRleHREYXRhLnRleHRNYXJnaW4pO1xuICAgICAgICB0ZXh0RGF0YS5hbmNob3IgPSBcInN0YXJ0XCI7XG4gICAgICAgIHRleHREYXRhLmRvbWluYW50QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICB0ZXh0RGF0YS5hbGlnbm1lbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICB0ZXh0RGF0YS54ID0gTWF0aC5yb3VuZCh0ZXh0RGF0YS54ICsgdGV4dERhdGEud2lkdGggLyAyKTtcbiAgICAgICAgdGV4dERhdGEuYW5jaG9yID0gXCJtaWRkbGVcIjtcbiAgICAgICAgdGV4dERhdGEuZG9taW5hbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIHRleHREYXRhLmFsaWdubWVudEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgdGV4dERhdGEueCA9IE1hdGgucm91bmQodGV4dERhdGEueCArIHRleHREYXRhLndpZHRoIC0gdGV4dERhdGEudGV4dE1hcmdpbik7XG4gICAgICAgIHRleHREYXRhLmFuY2hvciA9IFwiZW5kXCI7XG4gICAgICAgIHRleHREYXRhLmRvbWluYW50QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICB0ZXh0RGF0YS5hbGlnbm1lbnRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBbaSwgbGluZV0gb2YgbGluZXMuZW50cmllcygpKSB7XG4gICAgaWYgKHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luID09PSAwICYmIF90ZXh0Rm9udFNpemUgIT09IHZvaWQgMCkge1xuICAgICAgZHkgPSBpICogX3RleHRGb250U2l6ZTtcbiAgICB9XG4gICAgY29uc3QgdGV4dEVsZW0gPSBlbGVtLmFwcGVuZChcInRleHRcIik7XG4gICAgdGV4dEVsZW0uYXR0cihcInhcIiwgdGV4dERhdGEueCk7XG4gICAgdGV4dEVsZW0uYXR0cihcInlcIiwgeWZ1bmMoKSk7XG4gICAgaWYgKHRleHREYXRhLmFuY2hvciAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgdGV4dERhdGEuZG9taW5hbnRCYXNlbGluZSkuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCB0ZXh0RGF0YS5hbGlnbm1lbnRCYXNlbGluZSk7XG4gICAgfVxuICAgIGlmICh0ZXh0RGF0YS5mb250RmFtaWx5ICE9PSB2b2lkIDApIHtcbiAgICAgIHRleHRFbGVtLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgdGV4dERhdGEuZm9udEZhbWlseSk7XG4gICAgfVxuICAgIGlmIChfdGV4dEZvbnRTaXplUHggIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXNpemVcIiwgX3RleHRGb250U2l6ZVB4KTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLmZvbnRXZWlnaHQgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uc3R5bGUoXCJmb250LXdlaWdodFwiLCB0ZXh0RGF0YS5mb250V2VpZ2h0KTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLmZpbGwgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uYXR0cihcImZpbGxcIiwgdGV4dERhdGEuZmlsbCk7XG4gICAgfVxuICAgIGlmICh0ZXh0RGF0YS5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICAgIH1cbiAgICBpZiAodGV4dERhdGEuZHkgIT09IHZvaWQgMCkge1xuICAgICAgdGV4dEVsZW0uYXR0cihcImR5XCIsIHRleHREYXRhLmR5KTtcbiAgICB9IGVsc2UgaWYgKGR5ICE9PSAwKSB7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFwiZHlcIiwgZHkpO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gbGluZSB8fCBaRVJPX1dJRFRIX1NQQUNFO1xuICAgIGlmICh0ZXh0RGF0YS50c3Bhbikge1xuICAgICAgY29uc3Qgc3BhbiA9IHRleHRFbGVtLmFwcGVuZChcInRzcGFuXCIpO1xuICAgICAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54KTtcbiAgICAgIGlmICh0ZXh0RGF0YS5maWxsICE9PSB2b2lkIDApIHtcbiAgICAgICAgc3Bhbi5hdHRyKFwiZmlsbFwiLCB0ZXh0RGF0YS5maWxsKTtcbiAgICAgIH1cbiAgICAgIHNwYW4udGV4dCh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dEVsZW0udGV4dCh0ZXh0KTtcbiAgICB9XG4gICAgaWYgKHRleHREYXRhLnZhbGlnbiAhPT0gdm9pZCAwICYmIHRleHREYXRhLnRleHRNYXJnaW4gIT09IHZvaWQgMCAmJiB0ZXh0RGF0YS50ZXh0TWFyZ2luID4gMCkge1xuICAgICAgdGV4dEhlaWdodCArPSAodGV4dEVsZW0uX2dyb3VwcyB8fCB0ZXh0RWxlbSlbMF1bMF0uZ2V0QkJveCgpLmhlaWdodDtcbiAgICAgIHByZXZUZXh0SGVpZ2h0ID0gdGV4dEhlaWdodDtcbiAgICB9XG4gICAgdGV4dEVsZW1zLnB1c2godGV4dEVsZW0pO1xuICB9XG4gIHJldHVybiB0ZXh0RWxlbXM7XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBfX25hbWUoZ2VuUG9pbnRzLCBcImdlblBvaW50c1wiKTtcbiAgY29uc3QgcG9seWdvbiA9IGVsZW0uYXBwZW5kKFwicG9seWdvblwiKTtcbiAgcG9seWdvbi5hdHRyKFwicG9pbnRzXCIsIGdlblBvaW50cyh0eHRPYmplY3QueCwgdHh0T2JqZWN0LnksIHR4dE9iamVjdC53aWR0aCwgdHh0T2JqZWN0LmhlaWdodCwgNykpO1xuICBwb2x5Z29uLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsQm94XCIpO1xuICB0eHRPYmplY3QueSA9IHR4dE9iamVjdC55ICsgdHh0T2JqZWN0LmhlaWdodCAvIDI7XG4gIGRyYXdUZXh0KGVsZW0sIHR4dE9iamVjdCk7XG4gIHJldHVybiBwb2x5Z29uO1xufSwgXCJkcmF3TGFiZWxcIik7XG52YXIgYWN0b3JDbnQgPSAtMTtcbnZhciBmaXhMaWZlTGluZUhlaWdodHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkaWFncmFtMiwgYWN0b3JzLCBhY3RvcktleXMsIGNvbmYyKSA9PiB7XG4gIGlmICghZGlhZ3JhbTIuc2VsZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdG9yS2V5cy5mb3JFYWNoKChhY3RvcktleSkgPT4ge1xuICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzLmdldChhY3RvcktleSk7XG4gICAgY29uc3QgYWN0b3JET00gPSBkaWFncmFtMi5zZWxlY3QoXCIjYWN0b3JcIiArIGFjdG9yLmFjdG9yQ250KTtcbiAgICBpZiAoIWNvbmYyLm1pcnJvckFjdG9ycyAmJiBhY3Rvci5zdG9weSkge1xuICAgICAgYWN0b3JET00uYXR0cihcInkyXCIsIGFjdG9yLnN0b3B5ICsgYWN0b3IuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIGlmIChjb25mMi5taXJyb3JBY3RvcnMpIHtcbiAgICAgIGFjdG9yRE9NLmF0dHIoXCJ5MlwiLCBhY3Rvci5zdG9weSk7XG4gICAgfVxuICB9KTtcbn0sIFwiZml4TGlmZUxpbmVIZWlnaHRzXCIpO1xudmFyIGRyYXdBY3RvclR5cGVQYXJ0aWNpcGFudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBjb25zdCBhY3RvclkgPSBpc0Zvb3RlciA/IGFjdG9yLnN0b3B5IDogYWN0b3Iuc3RhcnR5O1xuICBjb25zdCBjZW50ZXIgPSBhY3Rvci54ICsgYWN0b3Iud2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJZID0gYWN0b3JZICsgNTtcbiAgY29uc3QgYm94cGx1c0xpbmVHcm91cCA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5sb3dlcigpO1xuICB2YXIgZyA9IGJveHBsdXNMaW5lR3JvdXA7XG4gIGlmICghaXNGb290ZXIpIHtcbiAgICBhY3RvckNudCsrO1xuICAgIGlmIChPYmplY3Qua2V5cyhhY3Rvci5saW5rcyB8fCB7fSkubGVuZ3RoICYmICFjb25mMi5mb3JjZU1lbnVzKSB7XG4gICAgICBnLmF0dHIoXCJvbmNsaWNrXCIsIHBvcHVwTWVudVRvZ2dsZShgYWN0b3Ike2FjdG9yQ250fV9wb3B1cGApKS5hdHRyKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcbiAgICB9XG4gICAgZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGNlbnRlclkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCAyZTMpLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yLWxpbmUgMjAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzk5OVwiKS5hdHRyKFwibmFtZVwiLCBhY3Rvci5uYW1lKTtcbiAgICBnID0gYm94cGx1c0xpbmVHcm91cC5hcHBlbmQoXCJnXCIpO1xuICAgIGFjdG9yLmFjdG9yQ250ID0gYWN0b3JDbnQ7XG4gICAgaWYgKGFjdG9yLmxpbmtzICE9IG51bGwpIHtcbiAgICAgIGcuYXR0cihcImlkXCIsIFwicm9vdC1cIiArIGFjdG9yQ250KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldE5vdGVSZWN0KCk7XG4gIHZhciBjc3NjbGFzcyA9IFwiYWN0b3JcIjtcbiAgaWYgKGFjdG9yLnByb3BlcnRpZXM/LmNsYXNzKSB7XG4gICAgY3NzY2xhc3MgPSBhY3Rvci5wcm9wZXJ0aWVzLmNsYXNzO1xuICB9IGVsc2Uge1xuICAgIHJlY3QuZmlsbCA9IFwiI2VhZWFlYVwiO1xuICB9XG4gIGlmIChpc0Zvb3Rlcikge1xuICAgIGNzc2NsYXNzICs9IGAgJHtCT1RUT01fQUNUT1JfQ0xBU1N9YDtcbiAgfSBlbHNlIHtcbiAgICBjc3NjbGFzcyArPSBgICR7VE9QX0FDVE9SX0NMQVNTfWA7XG4gIH1cbiAgcmVjdC54ID0gYWN0b3IueDtcbiAgcmVjdC55ID0gYWN0b3JZO1xuICByZWN0LndpZHRoID0gYWN0b3Iud2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gYWN0b3IuaGVpZ2h0O1xuICByZWN0LmNsYXNzID0gY3NzY2xhc3M7XG4gIHJlY3QucnggPSAzO1xuICByZWN0LnJ5ID0gMztcbiAgcmVjdC5uYW1lID0gYWN0b3IubmFtZTtcbiAgY29uc3QgcmVjdEVsZW0gPSBkcmF3UmVjdDIoZywgcmVjdCk7XG4gIGFjdG9yLnJlY3REYXRhID0gcmVjdDtcbiAgaWYgKGFjdG9yLnByb3BlcnRpZXM/Lmljb24pIHtcbiAgICBjb25zdCBpY29uU3JjID0gYWN0b3IucHJvcGVydGllcy5pY29uLnRyaW0oKTtcbiAgICBpZiAoaWNvblNyYy5jaGFyQXQoMCkgPT09IFwiQFwiKSB7XG4gICAgICBkcmF3RW1iZWRkZWRJbWFnZShnLCByZWN0LnggKyByZWN0LndpZHRoIC0gMjAsIHJlY3QueSArIDEwLCBpY29uU3JjLnN1YnN0cigxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXdJbWFnZShnLCByZWN0LnggKyByZWN0LndpZHRoIC0gMjAsIHJlY3QueSArIDEwLCBpY29uU3JjKTtcbiAgICB9XG4gIH1cbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mMiwgaGFzS2F0ZXgoYWN0b3IuZGVzY3JpcHRpb24pKShcbiAgICBhY3Rvci5kZXNjcmlwdGlvbixcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBgYWN0b3IgJHtBQ1RPUl9CT1hfQ0xBU1N9YCB9LFxuICAgIGNvbmYyXG4gICk7XG4gIGxldCBoZWlnaHQgPSBhY3Rvci5oZWlnaHQ7XG4gIGlmIChyZWN0RWxlbS5ub2RlKSB7XG4gICAgY29uc3QgYm91bmRzMiA9IHJlY3RFbGVtLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgYWN0b3IuaGVpZ2h0ID0gYm91bmRzMi5oZWlnaHQ7XG4gICAgaGVpZ2h0ID0gYm91bmRzMi5oZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIGhlaWdodDtcbn0sIFwiZHJhd0FjdG9yVHlwZVBhcnRpY2lwYW50XCIpO1xudmFyIGRyYXdBY3RvclR5cGVBY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBjb25zdCBhY3RvclkgPSBpc0Zvb3RlciA/IGFjdG9yLnN0b3B5IDogYWN0b3Iuc3RhcnR5O1xuICBjb25zdCBjZW50ZXIgPSBhY3Rvci54ICsgYWN0b3Iud2lkdGggLyAyO1xuICBjb25zdCBjZW50ZXJZID0gYWN0b3JZICsgODA7XG4gIGNvbnN0IGxpbmUgPSBlbGVtLmFwcGVuZChcImdcIikubG93ZXIoKTtcbiAgaWYgKCFpc0Zvb3Rlcikge1xuICAgIGFjdG9yQ250Kys7XG4gICAgbGluZS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcImFjdG9yXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGNlbnRlclkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCAyZTMpLmF0dHIoXCJjbGFzc1wiLCBcImFjdG9yLWxpbmUgMjAwXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIwLjVweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzk5OVwiKS5hdHRyKFwibmFtZVwiLCBhY3Rvci5uYW1lKTtcbiAgICBhY3Rvci5hY3RvckNudCA9IGFjdG9yQ250O1xuICB9XG4gIGNvbnN0IGFjdEVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGxldCBjc3NDbGFzcyA9IEFDVE9SX01BTl9GSUdVUkVfQ0xBU1M7XG4gIGlmIChpc0Zvb3Rlcikge1xuICAgIGNzc0NsYXNzICs9IGAgJHtCT1RUT01fQUNUT1JfQ0xBU1N9YDtcbiAgfSBlbHNlIHtcbiAgICBjc3NDbGFzcyArPSBgICR7VE9QX0FDVE9SX0NMQVNTfWA7XG4gIH1cbiAgYWN0RWxlbS5hdHRyKFwiY2xhc3NcIiwgY3NzQ2xhc3MpO1xuICBhY3RFbGVtLmF0dHIoXCJuYW1lXCIsIGFjdG9yLm5hbWUpO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gYWN0b3IueDtcbiAgcmVjdC55ID0gYWN0b3JZO1xuICByZWN0LmZpbGwgPSBcIiNlYWVhZWFcIjtcbiAgcmVjdC53aWR0aCA9IGFjdG9yLndpZHRoO1xuICByZWN0LmhlaWdodCA9IGFjdG9yLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwiYWN0b3JcIjtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcImlkXCIsIFwiYWN0b3ItbWFuLXRvcnNvXCIgKyBhY3RvckNudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIGFjdG9yWSArIDI1KS5hdHRyKFwieDJcIiwgY2VudGVyKS5hdHRyKFwieTJcIiwgYWN0b3JZICsgNDUpO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcImlkXCIsIFwiYWN0b3ItbWFuLWFybXNcIiArIGFjdG9yQ250KS5hdHRyKFwieDFcIiwgY2VudGVyIC0gQUNUT1JfVFlQRV9XSURUSCAvIDIpLmF0dHIoXCJ5MVwiLCBhY3RvclkgKyAzMykuYXR0cihcIngyXCIsIGNlbnRlciArIEFDVE9SX1RZUEVfV0lEVEggLyAyKS5hdHRyKFwieTJcIiwgYWN0b3JZICsgMzMpO1xuICBhY3RFbGVtLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIGNlbnRlciAtIEFDVE9SX1RZUEVfV0lEVEggLyAyKS5hdHRyKFwieTFcIiwgYWN0b3JZICsgNjApLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCBhY3RvclkgKyA0NSk7XG4gIGFjdEVsZW0uYXBwZW5kKFwibGluZVwiKS5hdHRyKFwieDFcIiwgY2VudGVyKS5hdHRyKFwieTFcIiwgYWN0b3JZICsgNDUpLmF0dHIoXCJ4MlwiLCBjZW50ZXIgKyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiAtIDIpLmF0dHIoXCJ5MlwiLCBhY3RvclkgKyA2MCk7XG4gIGNvbnN0IGNpcmNsZSA9IGFjdEVsZW0uYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGUuYXR0cihcImN4XCIsIGFjdG9yLnggKyBhY3Rvci53aWR0aCAvIDIpO1xuICBjaXJjbGUuYXR0cihcImN5XCIsIGFjdG9yWSArIDEwKTtcbiAgY2lyY2xlLmF0dHIoXCJyXCIsIDE1KTtcbiAgY2lyY2xlLmF0dHIoXCJ3aWR0aFwiLCBhY3Rvci53aWR0aCk7XG4gIGNpcmNsZS5hdHRyKFwiaGVpZ2h0XCIsIGFjdG9yLmhlaWdodCk7XG4gIGNvbnN0IGJvdW5kczIgPSBhY3RFbGVtLm5vZGUoKS5nZXRCQm94KCk7XG4gIGFjdG9yLmhlaWdodCA9IGJvdW5kczIuaGVpZ2h0O1xuICBfZHJhd1RleHRDYW5kaWRhdGVGdW5jKGNvbmYyLCBoYXNLYXRleChhY3Rvci5kZXNjcmlwdGlvbikpKFxuICAgIGFjdG9yLmRlc2NyaXB0aW9uLFxuICAgIGFjdEVsZW0sXG4gICAgcmVjdC54LFxuICAgIHJlY3QueSArIDM1LFxuICAgIHJlY3Qud2lkdGgsXG4gICAgcmVjdC5oZWlnaHQsXG4gICAgeyBjbGFzczogYGFjdG9yICR7QUNUT1JfTUFOX0ZJR1VSRV9DTEFTU31gIH0sXG4gICAgY29uZjJcbiAgKTtcbiAgcmV0dXJuIGFjdG9yLmhlaWdodDtcbn0sIFwiZHJhd0FjdG9yVHlwZUFjdG9yXCIpO1xudmFyIGRyYXdBY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcikge1xuICBzd2l0Y2ggKGFjdG9yLnR5cGUpIHtcbiAgICBjYXNlIFwiYWN0b3JcIjpcbiAgICAgIHJldHVybiBhd2FpdCBkcmF3QWN0b3JUeXBlQWN0b3IoZWxlbSwgYWN0b3IsIGNvbmYyLCBpc0Zvb3Rlcik7XG4gICAgY2FzZSBcInBhcnRpY2lwYW50XCI6XG4gICAgICByZXR1cm4gYXdhaXQgZHJhd0FjdG9yVHlwZVBhcnRpY2lwYW50KGVsZW0sIGFjdG9yLCBjb25mMiwgaXNGb290ZXIpO1xuICB9XG59LCBcImRyYXdBY3RvclwiKTtcbnZhciBkcmF3Qm94ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBib3gsIGNvbmYyKSB7XG4gIGNvbnN0IGJveHBsdXNUZXh0R3JvdXAgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IGcgPSBib3hwbHVzVGV4dEdyb3VwO1xuICBkcmF3QmFja2dyb3VuZFJlY3QyKGcsIGJveCk7XG4gIGlmIChib3gubmFtZSkge1xuICAgIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgICAgYm94Lm5hbWUsXG4gICAgICBnLFxuICAgICAgYm94LngsXG4gICAgICBib3gueSArIChib3gudGV4dE1heEhlaWdodCB8fCAwKSAvIDIsXG4gICAgICBib3gud2lkdGgsXG4gICAgICAwLFxuICAgICAgeyBjbGFzczogXCJ0ZXh0XCIgfSxcbiAgICAgIGNvbmYyXG4gICAgKTtcbiAgfVxuICBnLmxvd2VyKCk7XG59LCBcImRyYXdCb3hcIik7XG52YXIgYW5jaG9yRWxlbWVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSkge1xuICByZXR1cm4gZWxlbS5hcHBlbmQoXCJnXCIpO1xufSwgXCJhbmNob3JFbGVtZW50XCIpO1xudmFyIGRyYXdBY3RpdmF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBib3VuZHMyLCB2ZXJ0aWNhbFBvcywgY29uZjIsIGFjdG9yQWN0aXZhdGlvbnMyKSB7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICBjb25zdCBnID0gYm91bmRzMi5hbmNob3JlZDtcbiAgcmVjdC54ID0gYm91bmRzMi5zdGFydHg7XG4gIHJlY3QueSA9IGJvdW5kczIuc3RhcnR5O1xuICByZWN0LmNsYXNzID0gXCJhY3RpdmF0aW9uXCIgKyBhY3RvckFjdGl2YXRpb25zMiAlIDM7XG4gIHJlY3Qud2lkdGggPSBib3VuZHMyLnN0b3B4IC0gYm91bmRzMi5zdGFydHg7XG4gIHJlY3QuaGVpZ2h0ID0gdmVydGljYWxQb3MgLSBib3VuZHMyLnN0YXJ0eTtcbiAgZHJhd1JlY3QyKGcsIHJlY3QpO1xufSwgXCJkcmF3QWN0aXZhdGlvblwiKTtcbnZhciBkcmF3TG9vcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZWxlbSwgbG9vcE1vZGVsLCBsYWJlbFRleHQsIGNvbmYyKSB7XG4gIGNvbnN0IHtcbiAgICBib3hNYXJnaW4sXG4gICAgYm94VGV4dE1hcmdpbixcbiAgICBsYWJlbEJveEhlaWdodCxcbiAgICBsYWJlbEJveFdpZHRoLFxuICAgIG1lc3NhZ2VGb250RmFtaWx5OiBmb250RmFtaWx5LFxuICAgIG1lc3NhZ2VGb250U2l6ZTogZm9udFNpemUsXG4gICAgbWVzc2FnZUZvbnRXZWlnaHQ6IGZvbnRXZWlnaHRcbiAgfSA9IGNvbmYyO1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCBkcmF3TG9vcExpbmUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICByZXR1cm4gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBzdGFydHgpLmF0dHIoXCJ5MVwiLCBzdGFydHkpLmF0dHIoXCJ4MlwiLCBzdG9weCkuYXR0cihcInkyXCIsIHN0b3B5KS5hdHRyKFwiY2xhc3NcIiwgXCJsb29wTGluZVwiKTtcbiAgfSwgXCJkcmF3TG9vcExpbmVcIik7XG4gIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RhcnR4LCBsb29wTW9kZWwuc3RhcnR5LCBsb29wTW9kZWwuc3RvcHgsIGxvb3BNb2RlbC5zdGFydHkpO1xuICBkcmF3TG9vcExpbmUobG9vcE1vZGVsLnN0b3B4LCBsb29wTW9kZWwuc3RhcnR5LCBsb29wTW9kZWwuc3RvcHgsIGxvb3BNb2RlbC5zdG9weSk7XG4gIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RhcnR4LCBsb29wTW9kZWwuc3RvcHksIGxvb3BNb2RlbC5zdG9weCwgbG9vcE1vZGVsLnN0b3B5KTtcbiAgZHJhd0xvb3BMaW5lKGxvb3BNb2RlbC5zdGFydHgsIGxvb3BNb2RlbC5zdGFydHksIGxvb3BNb2RlbC5zdGFydHgsIGxvb3BNb2RlbC5zdG9weSk7XG4gIGlmIChsb29wTW9kZWwuc2VjdGlvbnMgIT09IHZvaWQgMCkge1xuICAgIGxvb3BNb2RlbC5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGRyYXdMb29wTGluZShsb29wTW9kZWwuc3RhcnR4LCBpdGVtLnksIGxvb3BNb2RlbC5zdG9weCwgaXRlbS55KS5zdHlsZShcbiAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCIsXG4gICAgICAgIFwiMywgM1wiXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGxldCB0eHQgPSBnZXRUZXh0T2JqKCk7XG4gIHR4dC50ZXh0ID0gbGFiZWxUZXh0O1xuICB0eHQueCA9IGxvb3BNb2RlbC5zdGFydHg7XG4gIHR4dC55ID0gbG9vcE1vZGVsLnN0YXJ0eTtcbiAgdHh0LmZvbnRGYW1pbHkgPSBmb250RmFtaWx5O1xuICB0eHQuZm9udFNpemUgPSBmb250U2l6ZTtcbiAgdHh0LmZvbnRXZWlnaHQgPSBmb250V2VpZ2h0O1xuICB0eHQuYW5jaG9yID0gXCJtaWRkbGVcIjtcbiAgdHh0LnZhbGlnbiA9IFwibWlkZGxlXCI7XG4gIHR4dC50c3BhbiA9IGZhbHNlO1xuICB0eHQud2lkdGggPSBsYWJlbEJveFdpZHRoIHx8IDUwO1xuICB0eHQuaGVpZ2h0ID0gbGFiZWxCb3hIZWlnaHQgfHwgMjA7XG4gIHR4dC50ZXh0TWFyZ2luID0gYm94VGV4dE1hcmdpbjtcbiAgdHh0LmNsYXNzID0gXCJsYWJlbFRleHRcIjtcbiAgZHJhd0xhYmVsKGcsIHR4dCk7XG4gIHR4dCA9IGdldFRleHRPYmoyKCk7XG4gIHR4dC50ZXh0ID0gbG9vcE1vZGVsLnRpdGxlO1xuICB0eHQueCA9IGxvb3BNb2RlbC5zdGFydHggKyBsYWJlbEJveFdpZHRoIC8gMiArIChsb29wTW9kZWwuc3RvcHggLSBsb29wTW9kZWwuc3RhcnR4KSAvIDI7XG4gIHR4dC55ID0gbG9vcE1vZGVsLnN0YXJ0eSArIGJveE1hcmdpbiArIGJveFRleHRNYXJnaW47XG4gIHR4dC5hbmNob3IgPSBcIm1pZGRsZVwiO1xuICB0eHQudmFsaWduID0gXCJtaWRkbGVcIjtcbiAgdHh0LnRleHRNYXJnaW4gPSBib3hUZXh0TWFyZ2luO1xuICB0eHQuY2xhc3MgPSBcImxvb3BUZXh0XCI7XG4gIHR4dC5mb250RmFtaWx5ID0gZm9udEZhbWlseTtcbiAgdHh0LmZvbnRTaXplID0gZm9udFNpemU7XG4gIHR4dC5mb250V2VpZ2h0ID0gZm9udFdlaWdodDtcbiAgdHh0LndyYXAgPSB0cnVlO1xuICBsZXQgdGV4dEVsZW0gPSBoYXNLYXRleCh0eHQudGV4dCkgPyBhd2FpdCBkcmF3S2F0ZXgoZywgdHh0LCBsb29wTW9kZWwpIDogZHJhd1RleHQoZywgdHh0KTtcbiAgaWYgKGxvb3BNb2RlbC5zZWN0aW9uVGl0bGVzICE9PSB2b2lkIDApIHtcbiAgICBmb3IgKGNvbnN0IFtpZHgsIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKGxvb3BNb2RlbC5zZWN0aW9uVGl0bGVzKSkge1xuICAgICAgaWYgKGl0ZW0ubWVzc2FnZSkge1xuICAgICAgICB0eHQudGV4dCA9IGl0ZW0ubWVzc2FnZTtcbiAgICAgICAgdHh0LnggPSBsb29wTW9kZWwuc3RhcnR4ICsgKGxvb3BNb2RlbC5zdG9weCAtIGxvb3BNb2RlbC5zdGFydHgpIC8gMjtcbiAgICAgICAgdHh0LnkgPSBsb29wTW9kZWwuc2VjdGlvbnNbaWR4XS55ICsgYm94TWFyZ2luICsgYm94VGV4dE1hcmdpbjtcbiAgICAgICAgdHh0LmNsYXNzID0gXCJsb29wVGV4dFwiO1xuICAgICAgICB0eHQuYW5jaG9yID0gXCJtaWRkbGVcIjtcbiAgICAgICAgdHh0LnZhbGlnbiA9IFwibWlkZGxlXCI7XG4gICAgICAgIHR4dC50c3BhbiA9IGZhbHNlO1xuICAgICAgICB0eHQuZm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICAgIHR4dC5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICB0eHQuZm9udFdlaWdodCA9IGZvbnRXZWlnaHQ7XG4gICAgICAgIHR4dC53cmFwID0gbG9vcE1vZGVsLndyYXA7XG4gICAgICAgIGlmIChoYXNLYXRleCh0eHQudGV4dCkpIHtcbiAgICAgICAgICBsb29wTW9kZWwuc3RhcnR5ID0gbG9vcE1vZGVsLnNlY3Rpb25zW2lkeF0ueTtcbiAgICAgICAgICBhd2FpdCBkcmF3S2F0ZXgoZywgdHh0LCBsb29wTW9kZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRyYXdUZXh0KGcsIHR4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlY3Rpb25IZWlnaHQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIHRleHRFbGVtLm1hcCgodGUpID0+ICh0ZS5fZ3JvdXBzIHx8IHRlKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3VycilcbiAgICAgICAgKTtcbiAgICAgICAgbG9vcE1vZGVsLnNlY3Rpb25zW2lkeF0uaGVpZ2h0ICs9IHNlY3Rpb25IZWlnaHQgLSAoYm94TWFyZ2luICsgYm94VGV4dE1hcmdpbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvb3BNb2RlbC5oZWlnaHQgPSBNYXRoLnJvdW5kKGxvb3BNb2RlbC5zdG9weSAtIGxvb3BNb2RlbC5zdGFydHkpO1xuICByZXR1cm4gZztcbn0sIFwiZHJhd0xvb3BcIik7XG52YXIgZHJhd0JhY2tncm91bmRSZWN0MiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYm91bmRzMikge1xuICBkcmF3QmFja2dyb3VuZFJlY3QoZWxlbSwgYm91bmRzMik7XG59LCBcImRyYXdCYWNrZ3JvdW5kUmVjdFwiKTtcbnZhciBpbnNlcnREYXRhYmFzZUljb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0pIHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcInN5bWJvbFwiKS5hdHRyKFwiaWRcIiwgXCJkYXRhYmFzZVwiKS5hdHRyKFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKS5hdHRyKFwiY2xpcC1ydWxlXCIsIFwiZXZlbm9kZFwiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJzY2FsZSguNSlcIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXpcIlxuICApO1xufSwgXCJpbnNlcnREYXRhYmFzZUljb25cIik7XG52YXIgaW5zZXJ0Q29tcHV0ZXJJY29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiY29tcHV0ZXJcIikuYXR0cihcIndpZHRoXCIsIFwiMjRcIikuYXR0cihcImhlaWdodFwiLCBcIjI0XCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3pcIlxuICApO1xufSwgXCJpbnNlcnRDb21wdXRlckljb25cIik7XG52YXIgaW5zZXJ0Q2xvY2tJY29uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJzeW1ib2xcIikuYXR0cihcImlkXCIsIFwiY2xvY2tcIikuYXR0cihcIndpZHRoXCIsIFwiMjRcIikuYXR0cihcImhlaWdodFwiLCBcIjI0XCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcInRyYW5zZm9ybVwiLCBcInNjYWxlKC41KVwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXpcIlxuICApO1xufSwgXCJpbnNlcnRDbG9ja0ljb25cIik7XG52YXIgaW5zZXJ0QXJyb3dIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYXJyb3doZWFkXCIpLmF0dHIoXCJyZWZYXCIsIDcuOSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0by1zdGFydC1yZXZlcnNlXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6XCIpO1xufSwgXCJpbnNlcnRBcnJvd0hlYWRcIik7XG52YXIgaW5zZXJ0QXJyb3dGaWxsZWRIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZmlsbGVkLWhlYWRcIikuYXR0cihcInJlZlhcIiwgMTUuNSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0QXJyb3dGaWxsZWRIZWFkXCIpO1xudmFyIGluc2VydFNlcXVlbmNlTnVtYmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwic2VxdWVuY2VudW1iZXJcIikuYXR0cihcInJlZlhcIiwgMTUpLmF0dHIoXCJyZWZZXCIsIDE1KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgNjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgMTUpLmF0dHIoXCJjeVwiLCAxNSkuYXR0cihcInJcIiwgNik7XG59LCBcImluc2VydFNlcXVlbmNlTnVtYmVyXCIpO1xudmFyIGluc2VydEFycm93Q3Jvc3NIZWFkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGNvbnN0IGRlZnMgPSBlbGVtLmFwcGVuZChcImRlZnNcIik7XG4gIGNvbnN0IG1hcmtlciA9IGRlZnMuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImNyb3NzaGVhZFwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTUpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXR0cihcInJlZlhcIiwgNCkuYXR0cihcInJlZllcIiwgNC41KTtcbiAgbWFya2VyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjMDAwMDAwXCIpLnN0eWxlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBcIjAsIDBcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFwdFwiKS5hdHRyKFwiZFwiLCBcIk0gMSwyIEwgNiw3IE0gNiwyIEwgMSw3XCIpO1xufSwgXCJpbnNlcnRBcnJvd0Nyb3NzSGVhZFwiKTtcbnZhciBnZXRUZXh0T2JqMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IHZvaWQgMCxcbiAgICBhbmNob3I6IHZvaWQgMCxcbiAgICBzdHlsZTogXCIjNjY2XCIsXG4gICAgd2lkdGg6IHZvaWQgMCxcbiAgICBoZWlnaHQ6IHZvaWQgMCxcbiAgICB0ZXh0TWFyZ2luOiAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwLFxuICAgIHRzcGFuOiB0cnVlLFxuICAgIHZhbGlnbjogdm9pZCAwXG4gIH07XG59LCBcImdldFRleHRPYmpcIik7XG52YXIgZ2V0Tm90ZVJlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgZmlsbDogXCIjRURGMkFFXCIsXG4gICAgc3Ryb2tlOiBcIiM2NjZcIixcbiAgICB3aWR0aDogMTAwLFxuICAgIGFuY2hvcjogXCJzdGFydFwiLFxuICAgIGhlaWdodDogMTAwLFxuICAgIHJ4OiAwLFxuICAgIHJ5OiAwXG4gIH07XG59LCBcImdldE5vdGVSZWN0XCIpO1xudmFyIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ5VGV4dChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyICsgNSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlUZXh0LCBcImJ5VGV4dFwiKTtcbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBhY3RvckZvbnRTaXplLCBhY3RvckZvbnRGYW1pbHksIGFjdG9yRm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgW19hY3RvckZvbnRTaXplLCBfYWN0b3JGb250U2l6ZVB4XSA9IHBhcnNlRm9udFNpemUoYWN0b3JGb250U2l6ZSk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkeSA9IGkgKiBfYWN0b3JGb250U2l6ZSAtIF9hY3RvckZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBfYWN0b3JGb250U2l6ZVB4KS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIGFjdG9yRm9udFdlaWdodCkuc3R5bGUoXCJmb250LWZhbWlseVwiLCBhY3RvckZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGJ5VHNwYW4sIFwiYnlUc3BhblwiKTtcbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgcyA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBzLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlXCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZS1jZWxsXCIpLnN0eWxlKFwidGV4dC1hbGlnblwiLCBcImNlbnRlclwiKS5zdHlsZShcInZlcnRpY2FsLWFsaWduXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5Rm8sIFwiYnlGb1wiKTtcbiAgYXN5bmMgZnVuY3Rpb24gYnlLYXRleChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgZGltID0gYXdhaXQgY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9ucyhjb250ZW50LCBnZXRDb25maWcoKSk7XG4gICAgY29uc3QgcyA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBzLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMiAtIGRpbS53aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyIC0gZGltLmhlaWdodCAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBkaW0ud2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgZGltLmhlaWdodCk7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5zdHlsZShcInRleHQtYWxpZ25cIiwgXCJjZW50ZXJcIikuc3R5bGUoXCJ2ZXJ0aWNhbC1hbGlnblwiLCBcIm1pZGRsZVwiKS5odG1sKGF3YWl0IHJlbmRlckthdGV4KGNvbnRlbnQsIGdldENvbmZpZygpKSk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5S2F0ZXgsIFwiYnlLYXRleFwiKTtcbiAgZnVuY3Rpb24gX3NldFRleHRBdHRycyh0b1RleHQsIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgIGlmIChmcm9tVGV4dEF0dHJzRGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHRvVGV4dC5hdHRyKGtleSwgZnJvbVRleHRBdHRyc0RpY3Rba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9fbmFtZShfc2V0VGV4dEF0dHJzLCBcIl9zZXRUZXh0QXR0cnNcIik7XG4gIHJldHVybiBmdW5jdGlvbihjb25mMiwgaGFzS2F0ZXgyID0gZmFsc2UpIHtcbiAgICBpZiAoaGFzS2F0ZXgyKSB7XG4gICAgICByZXR1cm4gYnlLYXRleDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwiZm9cIiA/IGJ5Rm8gOiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcIm9sZFwiID8gYnlUZXh0IDogYnlUc3BhbjtcbiAgfTtcbn0oKTtcbnZhciBfZHJhd01lbnVJdGVtVGV4dENhbmRpZGF0ZUZ1bmMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGJ5VGV4dChjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMpIHtcbiAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKS50ZXh0KGNvbnRlbnQpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlUZXh0LCBcImJ5VGV4dFwiKTtcbiAgZnVuY3Rpb24gYnlUc3Bhbihjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgeyBhY3RvckZvbnRTaXplLCBhY3RvckZvbnRGYW1pbHksIGFjdG9yRm9udFdlaWdodCB9ID0gY29uZjI7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KGNvbW1vbl9kZWZhdWx0LmxpbmVCcmVha1JlZ2V4KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkeSA9IGkgKiBhY3RvckZvbnRTaXplIC0gYWN0b3JGb250U2l6ZSAqIChsaW5lcy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCBhY3RvckZvbnRTaXplKS5zdHlsZShcImZvbnQtd2VpZ2h0XCIsIGFjdG9yRm9udFdlaWdodCkuc3R5bGUoXCJmb250LWZhbWlseVwiLCBhY3RvckZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGJ5VHNwYW4sIFwiYnlUc3BhblwiKTtcbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKSB7XG4gICAgY29uc3QgcyA9IGcuYXBwZW5kKFwic3dpdGNoXCIpO1xuICAgIGNvbnN0IGYgPSBzLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcInhcIiwgeCkuYXR0cihcInlcIiwgeSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCk7XG4gICAgY29uc3QgdGV4dCA9IGYuYXBwZW5kKFwieGh0bWw6ZGl2XCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlXCIpLnN0eWxlKFwiaGVpZ2h0XCIsIFwiMTAwJVwiKS5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0ZXh0LmFwcGVuZChcImRpdlwiKS5zdHlsZShcImRpc3BsYXlcIiwgXCJ0YWJsZS1jZWxsXCIpLnN0eWxlKFwidGV4dC1hbGlnblwiLCBcImNlbnRlclwiKS5zdHlsZShcInZlcnRpY2FsLWFsaWduXCIsIFwibWlkZGxlXCIpLnRleHQoY29udGVudCk7XG4gICAgYnlUc3Bhbihjb250ZW50LCBzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYyKTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5Rm8sIFwiYnlGb1wiKTtcbiAgZnVuY3Rpb24gX3NldFRleHRBdHRycyh0b1RleHQsIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICAgIGlmIChmcm9tVGV4dEF0dHJzRGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHRvVGV4dC5hdHRyKGtleSwgZnJvbVRleHRBdHRyc0RpY3Rba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9fbmFtZShfc2V0VGV4dEF0dHJzLCBcIl9zZXRUZXh0QXR0cnNcIik7XG4gIHJldHVybiBmdW5jdGlvbihjb25mMikge1xuICAgIHJldHVybiBjb25mMi50ZXh0UGxhY2VtZW50ID09PSBcImZvXCIgPyBieUZvIDogY29uZjIudGV4dFBsYWNlbWVudCA9PT0gXCJvbGRcIiA/IGJ5VGV4dCA6IGJ5VHNwYW47XG4gIH07XG59KCk7XG52YXIgc3ZnRHJhd19kZWZhdWx0ID0ge1xuICBkcmF3UmVjdDogZHJhd1JlY3QyLFxuICBkcmF3VGV4dCxcbiAgZHJhd0xhYmVsLFxuICBkcmF3QWN0b3IsXG4gIGRyYXdCb3gsXG4gIGRyYXdQb3B1cCxcbiAgYW5jaG9yRWxlbWVudCxcbiAgZHJhd0FjdGl2YXRpb24sXG4gIGRyYXdMb29wLFxuICBkcmF3QmFja2dyb3VuZFJlY3Q6IGRyYXdCYWNrZ3JvdW5kUmVjdDIsXG4gIGluc2VydEFycm93SGVhZCxcbiAgaW5zZXJ0QXJyb3dGaWxsZWRIZWFkLFxuICBpbnNlcnRTZXF1ZW5jZU51bWJlcixcbiAgaW5zZXJ0QXJyb3dDcm9zc0hlYWQsXG4gIGluc2VydERhdGFiYXNlSWNvbixcbiAgaW5zZXJ0Q29tcHV0ZXJJY29uLFxuICBpbnNlcnRDbG9ja0ljb24sXG4gIGdldFRleHRPYmo6IGdldFRleHRPYmoyLFxuICBnZXROb3RlUmVjdDogZ2V0Tm90ZVJlY3QyLFxuICBmaXhMaWZlTGluZUhlaWdodHMsXG4gIHNhbml0aXplVXJsXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2VxdWVuY2Uvc2VxdWVuY2VSZW5kZXJlci50c1xudmFyIGNvbmYgPSB7fTtcbnZhciBib3VuZHMgPSB7XG4gIGRhdGE6IHtcbiAgICBzdGFydHg6IHZvaWQgMCxcbiAgICBzdG9weDogdm9pZCAwLFxuICAgIHN0YXJ0eTogdm9pZCAwLFxuICAgIHN0b3B5OiB2b2lkIDBcbiAgfSxcbiAgdmVydGljYWxQb3M6IDAsXG4gIHNlcXVlbmNlSXRlbXM6IFtdLFxuICBhY3RpdmF0aW9uczogW10sXG4gIG1vZGVsczoge1xuICAgIGdldEhlaWdodDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5hY3RvcnMubGVuZ3RoID09PSAwID8gWzBdIDogdGhpcy5hY3RvcnMubWFwKChhY3RvcikgPT4gYWN0b3IuaGVpZ2h0IHx8IDApXG4gICAgICApICsgKHRoaXMubG9vcHMubGVuZ3RoID09PSAwID8gMCA6IHRoaXMubG9vcHMubWFwKChpdCkgPT4gaXQuaGVpZ2h0IHx8IDApLnJlZHVjZSgoYWNjLCBoKSA9PiBhY2MgKyBoKSkgKyAodGhpcy5tZXNzYWdlcy5sZW5ndGggPT09IDAgPyAwIDogdGhpcy5tZXNzYWdlcy5tYXAoKGl0KSA9PiBpdC5oZWlnaHQgfHwgMCkucmVkdWNlKChhY2MsIGgpID0+IGFjYyArIGgpKSArICh0aGlzLm5vdGVzLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLm5vdGVzLm1hcCgoaXQpID0+IGl0LmhlaWdodCB8fCAwKS5yZWR1Y2UoKGFjYywgaCkgPT4gYWNjICsgaCkpO1xuICAgIH0sIFwiZ2V0SGVpZ2h0XCIpLFxuICAgIGNsZWFyOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgIHRoaXMuYm94ZXMgPSBbXTtcbiAgICAgIHRoaXMubG9vcHMgPSBbXTtcbiAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgICAgIHRoaXMubm90ZXMgPSBbXTtcbiAgICB9LCBcImNsZWFyXCIpLFxuICAgIGFkZEJveDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihib3hNb2RlbCkge1xuICAgICAgdGhpcy5ib3hlcy5wdXNoKGJveE1vZGVsKTtcbiAgICB9LCBcImFkZEJveFwiKSxcbiAgICBhZGRBY3RvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3Rvck1vZGVsKSB7XG4gICAgICB0aGlzLmFjdG9ycy5wdXNoKGFjdG9yTW9kZWwpO1xuICAgIH0sIFwiYWRkQWN0b3JcIiksXG4gICAgYWRkTG9vcDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihsb29wTW9kZWwpIHtcbiAgICAgIHRoaXMubG9vcHMucHVzaChsb29wTW9kZWwpO1xuICAgIH0sIFwiYWRkTG9vcFwiKSxcbiAgICBhZGRNZXNzYWdlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1zZ01vZGVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnTW9kZWwpO1xuICAgIH0sIFwiYWRkTWVzc2FnZVwiKSxcbiAgICBhZGROb3RlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG5vdGVNb2RlbCkge1xuICAgICAgdGhpcy5ub3Rlcy5wdXNoKG5vdGVNb2RlbCk7XG4gICAgfSwgXCJhZGROb3RlXCIpLFxuICAgIGxhc3RBY3RvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdG9yc1t0aGlzLmFjdG9ycy5sZW5ndGggLSAxXTtcbiAgICB9LCBcImxhc3RBY3RvclwiKSxcbiAgICBsYXN0TG9vcDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoIC0gMV07XG4gICAgfSwgXCJsYXN0TG9vcFwiKSxcbiAgICBsYXN0TWVzc2FnZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgfSwgXCJsYXN0TWVzc2FnZVwiKSxcbiAgICBsYXN0Tm90ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGVzW3RoaXMubm90ZXMubGVuZ3RoIC0gMV07XG4gICAgfSwgXCJsYXN0Tm90ZVwiKSxcbiAgICBhY3RvcnM6IFtdLFxuICAgIGJveGVzOiBbXSxcbiAgICBsb29wczogW10sXG4gICAgbWVzc2FnZXM6IFtdLFxuICAgIG5vdGVzOiBbXVxuICB9LFxuICBpbml0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcyA9IFtdO1xuICAgIHRoaXMuYWN0aXZhdGlvbnMgPSBbXTtcbiAgICB0aGlzLm1vZGVscy5jbGVhcigpO1xuICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgIHN0YXJ0eDogdm9pZCAwLFxuICAgICAgc3RvcHg6IHZvaWQgMCxcbiAgICAgIHN0YXJ0eTogdm9pZCAwLFxuICAgICAgc3RvcHk6IHZvaWQgMFxuICAgIH07XG4gICAgdGhpcy52ZXJ0aWNhbFBvcyA9IDA7XG4gICAgc2V0Q29uZihnZXRDb25maWcyKCkpO1xuICB9LCBcImluaXRcIiksXG4gIHVwZGF0ZVZhbDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihvYmosIGtleSwgdmFsLCBmdW4pIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrZXldID0gZnVuKHZhbCwgb2JqW2tleV0pO1xuICAgIH1cbiAgfSwgXCJ1cGRhdGVWYWxcIiksXG4gIHVwZGF0ZUJvdW5kczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzdGFydHgsIHN0YXJ0eSwgc3RvcHgsIHN0b3B5KSB7XG4gICAgY29uc3QgX3NlbGYgPSB0aGlzO1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZUZuKHR5cGUpIHtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHVwZGF0ZUl0ZW1Cb3VuZHMoaXRlbSkge1xuICAgICAgICBjbnQrKztcbiAgICAgICAgY29uc3QgbiA9IF9zZWxmLnNlcXVlbmNlSXRlbXMubGVuZ3RoIC0gY250ICsgMTtcbiAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR5XCIsIHN0YXJ0eSAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weVwiLCBzdG9weSArIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5tYXgpO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHhcIiwgc3RvcHggKyBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgaWYgKCEodHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICAgIF9zZWxmLnVwZGF0ZVZhbChpdGVtLCBcInN0b3B4XCIsIHN0b3B4ICsgbiAqIGNvbmYuYm94TWFyZ2luLCBNYXRoLm1heCk7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eVwiLCBzdGFydHkgLSBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgc3RvcHkgKyBuICogY29uZi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ1cGRhdGVJdGVtQm91bmRzXCIpO1xuICAgIH1cbiAgICBfX25hbWUodXBkYXRlRm4sIFwidXBkYXRlRm5cIik7XG4gICAgdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2godXBkYXRlRm4oKSk7XG4gICAgdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKHVwZGF0ZUZuKFwiYWN0aXZhdGlvblwiKSk7XG4gIH0sIFwidXBkYXRlQm91bmRzXCIpLFxuICBpbnNlcnQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3RhcnR4LCBzdGFydHksIHN0b3B4LCBzdG9weSkge1xuICAgIGNvbnN0IF9zdGFydHggPSBjb21tb25fZGVmYXVsdC5nZXRNaW4oc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0b3B4ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KHN0YXJ0eCwgc3RvcHgpO1xuICAgIGNvbnN0IF9zdGFydHkgPSBjb21tb25fZGVmYXVsdC5nZXRNaW4oc3RhcnR5LCBzdG9weSk7XG4gICAgY29uc3QgX3N0b3B5ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KHN0YXJ0eSwgc3RvcHkpO1xuICAgIHRoaXMudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBfc3RhcnR4LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weVwiLCBfc3RvcHksIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZUJvdW5kcyhfc3RhcnR4LCBfc3RhcnR5LCBfc3RvcHgsIF9zdG9weSk7XG4gIH0sIFwiaW5zZXJ0XCIpLFxuICBuZXdBY3RpdmF0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1lc3NhZ2UsIGRpYWdyYW0yLCBhY3RvcnMpIHtcbiAgICBjb25zdCBhY3RvclJlY3QgPSBhY3RvcnMuZ2V0KG1lc3NhZ2UuZnJvbSk7XG4gICAgY29uc3Qgc3RhY2tlZFNpemUgPSBhY3RvckFjdGl2YXRpb25zKG1lc3NhZ2UuZnJvbSkubGVuZ3RoIHx8IDA7XG4gICAgY29uc3QgeCA9IGFjdG9yUmVjdC54ICsgYWN0b3JSZWN0LndpZHRoIC8gMiArIChzdGFja2VkU2l6ZSAtIDEpICogY29uZi5hY3RpdmF0aW9uV2lkdGggLyAyO1xuICAgIHRoaXMuYWN0aXZhdGlvbnMucHVzaCh7XG4gICAgICBzdGFydHg6IHgsXG4gICAgICBzdGFydHk6IHRoaXMudmVydGljYWxQb3MgKyAyLFxuICAgICAgc3RvcHg6IHggKyBjb25mLmFjdGl2YXRpb25XaWR0aCxcbiAgICAgIHN0b3B5OiB2b2lkIDAsXG4gICAgICBhY3RvcjogbWVzc2FnZS5mcm9tLFxuICAgICAgYW5jaG9yZWQ6IHN2Z0RyYXdfZGVmYXVsdC5hbmNob3JFbGVtZW50KGRpYWdyYW0yKVxuICAgIH0pO1xuICB9LCBcIm5ld0FjdGl2YXRpb25cIiksXG4gIGVuZEFjdGl2YXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obWVzc2FnZSkge1xuICAgIGNvbnN0IGxhc3RBY3RvckFjdGl2YXRpb25JZHggPSB0aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihhY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gYWN0aXZhdGlvbi5hY3RvcjtcbiAgICB9KS5sYXN0SW5kZXhPZihtZXNzYWdlLmZyb20pO1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShsYXN0QWN0b3JBY3RpdmF0aW9uSWR4LCAxKVswXTtcbiAgfSwgXCJlbmRBY3RpdmF0aW9uXCIpLFxuICBjcmVhdGVMb29wOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRpdGxlID0geyBtZXNzYWdlOiB2b2lkIDAsIHdyYXA6IGZhbHNlLCB3aWR0aDogdm9pZCAwIH0sIGZpbGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdGFydHk6IHRoaXMudmVydGljYWxQb3MsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RvcHk6IHZvaWQgMCxcbiAgICAgIHRpdGxlOiB0aXRsZS5tZXNzYWdlLFxuICAgICAgd3JhcDogdGl0bGUud3JhcCxcbiAgICAgIHdpZHRoOiB0aXRsZS53aWR0aCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGZpbGxcbiAgICB9O1xuICB9LCBcImNyZWF0ZUxvb3BcIiksXG4gIG5ld0xvb3A6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGl0bGUgPSB7IG1lc3NhZ2U6IHZvaWQgMCwgd3JhcDogZmFsc2UsIHdpZHRoOiB2b2lkIDAgfSwgZmlsbCkge1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0aXRsZSwgZmlsbCkpO1xuICB9LCBcIm5ld0xvb3BcIiksXG4gIGVuZExvb3A6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtcbiAgfSwgXCJlbmRMb29wXCIpLFxuICBpc0xvb3BPdmVybGFwOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMubGVuZ3RoID8gdGhpcy5zZXF1ZW5jZUl0ZW1zW3RoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGggLSAxXS5vdmVybGFwIDogZmFsc2U7XG4gIH0sIFwiaXNMb29wT3ZlcmxhcFwiKSxcbiAgYWRkU2VjdGlvblRvTG9vcDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgY29uc3QgbG9vcCA9IHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtcbiAgICBsb29wLnNlY3Rpb25zID0gbG9vcC5zZWN0aW9ucyB8fCBbXTtcbiAgICBsb29wLnNlY3Rpb25UaXRsZXMgPSBsb29wLnNlY3Rpb25UaXRsZXMgfHwgW107XG4gICAgbG9vcC5zZWN0aW9ucy5wdXNoKHsgeTogYm91bmRzLmdldFZlcnRpY2FsUG9zKCksIGhlaWdodDogMCB9KTtcbiAgICBsb29wLnNlY3Rpb25UaXRsZXMucHVzaChtZXNzYWdlKTtcbiAgICB0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChsb29wKTtcbiAgfSwgXCJhZGRTZWN0aW9uVG9Mb29wXCIpLFxuICBzYXZlVmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNMb29wT3ZlcmxhcCgpKSB7XG4gICAgICB0aGlzLnNhdmVkVmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zO1xuICAgIH1cbiAgfSwgXCJzYXZlVmVydGljYWxQb3NcIiksXG4gIHJlc2V0VmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNMb29wT3ZlcmxhcCgpKSB7XG4gICAgICB0aGlzLnZlcnRpY2FsUG9zID0gdGhpcy5zYXZlZFZlcnRpY2FsUG9zO1xuICAgIH1cbiAgfSwgXCJyZXNldFZlcnRpY2FsUG9zXCIpLFxuICBidW1wVmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYnVtcCkge1xuICAgIHRoaXMudmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zICsgYnVtcDtcbiAgICB0aGlzLmRhdGEuc3RvcHkgPSBjb21tb25fZGVmYXVsdC5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LCB0aGlzLnZlcnRpY2FsUG9zKTtcbiAgfSwgXCJidW1wVmVydGljYWxQb3NcIiksXG4gIGdldFZlcnRpY2FsUG9zOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsUG9zO1xuICB9LCBcImdldFZlcnRpY2FsUG9zXCIpLFxuICBnZXRCb3VuZHM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgYm91bmRzOiB0aGlzLmRhdGEsIG1vZGVsczogdGhpcy5tb2RlbHMgfTtcbiAgfSwgXCJnZXRCb3VuZHNcIilcbn07XG52YXIgZHJhd05vdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGVsZW0sIG5vdGVNb2RlbCkge1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGNvbmYuYm94TWFyZ2luKTtcbiAgbm90ZU1vZGVsLmhlaWdodCA9IGNvbmYuYm94TWFyZ2luO1xuICBub3RlTW9kZWwuc3RhcnR5ID0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCk7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICByZWN0LnggPSBub3RlTW9kZWwuc3RhcnR4O1xuICByZWN0LnkgPSBub3RlTW9kZWwuc3RhcnR5O1xuICByZWN0LndpZHRoID0gbm90ZU1vZGVsLndpZHRoIHx8IGNvbmYud2lkdGg7XG4gIHJlY3QuY2xhc3MgPSBcIm5vdGVcIjtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgcmVjdEVsZW0gPSBzdmdEcmF3X2RlZmF1bHQuZHJhd1JlY3QoZywgcmVjdCk7XG4gIGNvbnN0IHRleHRPYmogPSBnZXRUZXh0T2JqKCk7XG4gIHRleHRPYmoueCA9IG5vdGVNb2RlbC5zdGFydHg7XG4gIHRleHRPYmoueSA9IG5vdGVNb2RlbC5zdGFydHk7XG4gIHRleHRPYmoud2lkdGggPSByZWN0LndpZHRoO1xuICB0ZXh0T2JqLmR5ID0gXCIxZW1cIjtcbiAgdGV4dE9iai50ZXh0ID0gbm90ZU1vZGVsLm1lc3NhZ2U7XG4gIHRleHRPYmouY2xhc3MgPSBcIm5vdGVUZXh0XCI7XG4gIHRleHRPYmouZm9udEZhbWlseSA9IGNvbmYubm90ZUZvbnRGYW1pbHk7XG4gIHRleHRPYmouZm9udFNpemUgPSBjb25mLm5vdGVGb250U2l6ZTtcbiAgdGV4dE9iai5mb250V2VpZ2h0ID0gY29uZi5ub3RlRm9udFdlaWdodDtcbiAgdGV4dE9iai5hbmNob3IgPSBjb25mLm5vdGVBbGlnbjtcbiAgdGV4dE9iai50ZXh0TWFyZ2luID0gY29uZi5ub3RlTWFyZ2luO1xuICB0ZXh0T2JqLnZhbGlnbiA9IFwiY2VudGVyXCI7XG4gIGNvbnN0IHRleHRFbGVtID0gaGFzS2F0ZXgodGV4dE9iai50ZXh0KSA/IGF3YWl0IGRyYXdLYXRleChnLCB0ZXh0T2JqKSA6IGRyYXdUZXh0KGcsIHRleHRPYmopO1xuICBjb25zdCB0ZXh0SGVpZ2h0ID0gTWF0aC5yb3VuZChcbiAgICB0ZXh0RWxlbS5tYXAoKHRlKSA9PiAodGUuX2dyb3VwcyB8fCB0ZSlbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCkucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIpXG4gICk7XG4gIHJlY3RFbGVtLmF0dHIoXCJoZWlnaHRcIiwgdGV4dEhlaWdodCArIDIgKiBjb25mLm5vdGVNYXJnaW4pO1xuICBub3RlTW9kZWwuaGVpZ2h0ICs9IHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luO1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luKTtcbiAgbm90ZU1vZGVsLnN0b3B5ID0gbm90ZU1vZGVsLnN0YXJ0eSArIHRleHRIZWlnaHQgKyAyICogY29uZi5ub3RlTWFyZ2luO1xuICBub3RlTW9kZWwuc3RvcHggPSBub3RlTW9kZWwuc3RhcnR4ICsgcmVjdC53aWR0aDtcbiAgYm91bmRzLmluc2VydChub3RlTW9kZWwuc3RhcnR4LCBub3RlTW9kZWwuc3RhcnR5LCBub3RlTW9kZWwuc3RvcHgsIG5vdGVNb2RlbC5zdG9weSk7XG4gIGJvdW5kcy5tb2RlbHMuYWRkTm90ZShub3RlTW9kZWwpO1xufSwgXCJkcmF3Tm90ZVwiKTtcbnZhciBtZXNzYWdlRm9udCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5tZXNzYWdlRm9udEZhbWlseSxcbiAgICBmb250U2l6ZTogY25mLm1lc3NhZ2VGb250U2l6ZSxcbiAgICBmb250V2VpZ2h0OiBjbmYubWVzc2FnZUZvbnRXZWlnaHRcbiAgfTtcbn0sIFwibWVzc2FnZUZvbnRcIik7XG52YXIgbm90ZUZvbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbmYpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb250RmFtaWx5OiBjbmYubm90ZUZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5ub3RlRm9udFNpemUsXG4gICAgZm9udFdlaWdodDogY25mLm5vdGVGb250V2VpZ2h0XG4gIH07XG59LCBcIm5vdGVGb250XCIpO1xudmFyIGFjdG9yRm9udCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IGNuZi5hY3RvckZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGNuZi5hY3RvckZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHQ6IGNuZi5hY3RvckZvbnRXZWlnaHRcbiAgfTtcbn0sIFwiYWN0b3JGb250XCIpO1xuYXN5bmMgZnVuY3Rpb24gYm91bmRNZXNzYWdlKF9kaWFncmFtLCBtc2dNb2RlbCkge1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKDEwKTtcbiAgY29uc3QgeyBzdGFydHgsIHN0b3B4LCBtZXNzYWdlIH0gPSBtc2dNb2RlbDtcbiAgY29uc3QgbGluZXMgPSBjb21tb25fZGVmYXVsdC5zcGxpdEJyZWFrcyhtZXNzYWdlKS5sZW5ndGg7XG4gIGNvbnN0IGlzS2F0ZXhNc2cgPSBoYXNLYXRleChtZXNzYWdlKTtcbiAgY29uc3QgdGV4dERpbXMgPSBpc0thdGV4TXNnID8gYXdhaXQgY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9ucyhtZXNzYWdlLCBnZXRDb25maWcyKCkpIDogdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtZXNzYWdlLCBtZXNzYWdlRm9udChjb25mKSk7XG4gIGlmICghaXNLYXRleE1zZykge1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0ZXh0RGltcy5oZWlnaHQgLyBsaW5lcztcbiAgICBtc2dNb2RlbC5oZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxpbmVIZWlnaHQpO1xuICB9XG4gIGxldCBsaW5lU3RhcnRZO1xuICBsZXQgdG90YWxPZmZzZXQgPSB0ZXh0RGltcy5oZWlnaHQgLSAxMDtcbiAgY29uc3QgdGV4dFdpZHRoID0gdGV4dERpbXMud2lkdGg7XG4gIGlmIChzdGFydHggPT09IHN0b3B4KSB7XG4gICAgbGluZVN0YXJ0WSA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpICsgdG90YWxPZmZzZXQ7XG4gICAgaWYgKCFjb25mLnJpZ2h0QW5nbGVzKSB7XG4gICAgICB0b3RhbE9mZnNldCArPSBjb25mLmJveE1hcmdpbjtcbiAgICAgIGxpbmVTdGFydFkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKSArIHRvdGFsT2Zmc2V0O1xuICAgIH1cbiAgICB0b3RhbE9mZnNldCArPSAzMDtcbiAgICBjb25zdCBkeCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heCh0ZXh0V2lkdGggLyAyLCBjb25mLndpZHRoIC8gMik7XG4gICAgYm91bmRzLmluc2VydChcbiAgICAgIHN0YXJ0eCAtIGR4LFxuICAgICAgYm91bmRzLmdldFZlcnRpY2FsUG9zKCkgLSAxMCArIHRvdGFsT2Zmc2V0LFxuICAgICAgc3RvcHggKyBkeCxcbiAgICAgIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpICsgMzAgKyB0b3RhbE9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdG90YWxPZmZzZXQgKz0gY29uZi5ib3hNYXJnaW47XG4gICAgbGluZVN0YXJ0WSA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpICsgdG90YWxPZmZzZXQ7XG4gICAgYm91bmRzLmluc2VydChzdGFydHgsIGxpbmVTdGFydFkgLSAxMCwgc3RvcHgsIGxpbmVTdGFydFkpO1xuICB9XG4gIGJvdW5kcy5idW1wVmVydGljYWxQb3ModG90YWxPZmZzZXQpO1xuICBtc2dNb2RlbC5oZWlnaHQgKz0gdG90YWxPZmZzZXQ7XG4gIG1zZ01vZGVsLnN0b3B5ID0gbXNnTW9kZWwuc3RhcnR5ICsgbXNnTW9kZWwuaGVpZ2h0O1xuICBib3VuZHMuaW5zZXJ0KG1zZ01vZGVsLmZyb21Cb3VuZHMsIG1zZ01vZGVsLnN0YXJ0eSwgbXNnTW9kZWwudG9Cb3VuZHMsIG1zZ01vZGVsLnN0b3B5KTtcbiAgcmV0dXJuIGxpbmVTdGFydFk7XG59XG5fX25hbWUoYm91bmRNZXNzYWdlLCBcImJvdW5kTWVzc2FnZVwiKTtcbnZhciBkcmF3TWVzc2FnZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZGlhZ3JhbTIsIG1zZ01vZGVsLCBsaW5lU3RhcnRZLCBkaWFnT2JqKSB7XG4gIGNvbnN0IHsgc3RhcnR4LCBzdG9weCwgc3RhcnR5LCBtZXNzYWdlLCB0eXBlLCBzZXF1ZW5jZUluZGV4LCBzZXF1ZW5jZVZpc2libGUgfSA9IG1zZ01vZGVsO1xuICBjb25zdCB0ZXh0RGltcyA9IHV0aWxzX2RlZmF1bHQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobWVzc2FnZSwgbWVzc2FnZUZvbnQoY29uZikpO1xuICBjb25zdCB0ZXh0T2JqID0gZ2V0VGV4dE9iaigpO1xuICB0ZXh0T2JqLnggPSBzdGFydHg7XG4gIHRleHRPYmoueSA9IHN0YXJ0eSArIDEwO1xuICB0ZXh0T2JqLndpZHRoID0gc3RvcHggLSBzdGFydHg7XG4gIHRleHRPYmouY2xhc3MgPSBcIm1lc3NhZ2VUZXh0XCI7XG4gIHRleHRPYmouZHkgPSBcIjFlbVwiO1xuICB0ZXh0T2JqLnRleHQgPSBtZXNzYWdlO1xuICB0ZXh0T2JqLmZvbnRGYW1pbHkgPSBjb25mLm1lc3NhZ2VGb250RmFtaWx5O1xuICB0ZXh0T2JqLmZvbnRTaXplID0gY29uZi5tZXNzYWdlRm9udFNpemU7XG4gIHRleHRPYmouZm9udFdlaWdodCA9IGNvbmYubWVzc2FnZUZvbnRXZWlnaHQ7XG4gIHRleHRPYmouYW5jaG9yID0gY29uZi5tZXNzYWdlQWxpZ247XG4gIHRleHRPYmoudmFsaWduID0gXCJjZW50ZXJcIjtcbiAgdGV4dE9iai50ZXh0TWFyZ2luID0gY29uZi53cmFwUGFkZGluZztcbiAgdGV4dE9iai50c3BhbiA9IGZhbHNlO1xuICBpZiAoaGFzS2F0ZXgodGV4dE9iai50ZXh0KSkge1xuICAgIGF3YWl0IGRyYXdLYXRleChkaWFncmFtMiwgdGV4dE9iaiwgeyBzdGFydHgsIHN0b3B4LCBzdGFydHk6IGxpbmVTdGFydFkgfSk7XG4gIH0gZWxzZSB7XG4gICAgZHJhd1RleHQoZGlhZ3JhbTIsIHRleHRPYmopO1xuICB9XG4gIGNvbnN0IHRleHRXaWR0aCA9IHRleHREaW1zLndpZHRoO1xuICBsZXQgbGluZTtcbiAgaWYgKHN0YXJ0eCA9PT0gc3RvcHgpIHtcbiAgICBpZiAoY29uZi5yaWdodEFuZ2xlcykge1xuICAgICAgbGluZSA9IGRpYWdyYW0yLmFwcGVuZChcInBhdGhcIikuYXR0cihcbiAgICAgICAgXCJkXCIsXG4gICAgICAgIGBNICAke3N0YXJ0eH0sJHtsaW5lU3RhcnRZfSBIICR7c3RhcnR4ICsgY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGggLyAyLCB0ZXh0V2lkdGggLyAyKX0gViAke2xpbmVTdGFydFkgKyAyNX0gSCAke3N0YXJ0eH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lID0gZGlhZ3JhbTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgXCJNIFwiICsgc3RhcnR4ICsgXCIsXCIgKyBsaW5lU3RhcnRZICsgXCIgQyBcIiArIChzdGFydHggKyA2MCkgKyBcIixcIiArIChsaW5lU3RhcnRZIC0gMTApICsgXCIgXCIgKyAoc3RhcnR4ICsgNjApICsgXCIsXCIgKyAobGluZVN0YXJ0WSArIDMwKSArIFwiIFwiICsgc3RhcnR4ICsgXCIsXCIgKyAobGluZVN0YXJ0WSArIDIwKVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGluZSA9IGRpYWdyYW0yLmFwcGVuZChcImxpbmVcIik7XG4gICAgbGluZS5hdHRyKFwieDFcIiwgc3RhcnR4KTtcbiAgICBsaW5lLmF0dHIoXCJ5MVwiLCBsaW5lU3RhcnRZKTtcbiAgICBsaW5lLmF0dHIoXCJ4MlwiLCBzdG9weCk7XG4gICAgbGluZS5hdHRyKFwieTJcIiwgbGluZVN0YXJ0WSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX09QRU4gfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRCkge1xuICAgIGxpbmUuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMywgM1wiKTtcbiAgICBsaW5lLmF0dHIoXCJjbGFzc1wiLCBcIm1lc3NhZ2VMaW5lMVwiKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lLmF0dHIoXCJjbGFzc1wiLCBcIm1lc3NhZ2VMaW5lMFwiKTtcbiAgfVxuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIGxpbmUuYXR0cihcInN0cm9rZS13aWR0aFwiLCAyKTtcbiAgbGluZS5hdHRyKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcbiAgbGluZS5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpO1xuICBpZiAodHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRCB8fCB0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRCkge1xuICAgIGxpbmUuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNhcnJvd2hlYWQpXCIpO1xuICB9XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQgfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRCkge1xuICAgIGxpbmUuYXR0cihcIm1hcmtlci1zdGFydFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Fycm93aGVhZClcIik7XG4gIH1cbiAgaWYgKHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfUE9JTlQgfHwgdHlwZSA9PT0gZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpIHtcbiAgICBsaW5lLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKFwiICsgdXJsICsgXCIjZmlsbGVkLWhlYWQpXCIpO1xuICB9XG4gIGlmICh0eXBlID09PSBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTIHx8IHR5cGUgPT09IGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX0NST1NTKSB7XG4gICAgbGluZS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybChcIiArIHVybCArIFwiI2Nyb3NzaGVhZClcIik7XG4gIH1cbiAgaWYgKHNlcXVlbmNlVmlzaWJsZSB8fCBjb25mLnNob3dTZXF1ZW5jZU51bWJlcnMpIHtcbiAgICBsaW5lLmF0dHIoXCJtYXJrZXItc3RhcnRcIiwgXCJ1cmwoXCIgKyB1cmwgKyBcIiNzZXF1ZW5jZW51bWJlcilcIik7XG4gICAgZGlhZ3JhbTIuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBzdGFydHgpLmF0dHIoXCJ5XCIsIGxpbmVTdGFydFkgKyA0KS5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpLmF0dHIoXCJmb250LXNpemVcIiwgXCIxMnB4XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJzZXF1ZW5jZU51bWJlclwiKS50ZXh0KHNlcXVlbmNlSW5kZXgpO1xuICB9XG59LCBcImRyYXdNZXNzYWdlXCIpO1xudmFyIGFkZEFjdG9yUmVuZGVyaW5nRGF0YSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlhZ3JhbTIsIGFjdG9ycywgY3JlYXRlZEFjdG9ycywgYWN0b3JLZXlzLCB2ZXJ0aWNhbFBvcywgbWVzc2FnZXMsIGlzRm9vdGVyKSB7XG4gIGxldCBwcmV2V2lkdGggPSAwO1xuICBsZXQgcHJldk1hcmdpbiA9IDA7XG4gIGxldCBwcmV2Qm94ID0gdm9pZCAwO1xuICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgZm9yIChjb25zdCBhY3RvcktleSBvZiBhY3RvcktleXMpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQoYWN0b3JLZXkpO1xuICAgIGNvbnN0IGJveCA9IGFjdG9yLmJveDtcbiAgICBpZiAocHJldkJveCAmJiBwcmV2Qm94ICE9IGJveCkge1xuICAgICAgaWYgKCFpc0Zvb3Rlcikge1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZEJveChwcmV2Qm94KTtcbiAgICAgIH1cbiAgICAgIHByZXZNYXJnaW4gKz0gY29uZi5ib3hNYXJnaW4gKyBwcmV2Qm94Lm1hcmdpbjtcbiAgICB9XG4gICAgaWYgKGJveCAmJiBib3ggIT0gcHJldkJveCkge1xuICAgICAgaWYgKCFpc0Zvb3Rlcikge1xuICAgICAgICBib3gueCA9IHByZXZXaWR0aCArIHByZXZNYXJnaW47XG4gICAgICAgIGJveC55ID0gdmVydGljYWxQb3M7XG4gICAgICB9XG4gICAgICBwcmV2TWFyZ2luICs9IGJveC5tYXJnaW47XG4gICAgfVxuICAgIGFjdG9yLndpZHRoID0gYWN0b3Iud2lkdGggfHwgY29uZi53aWR0aDtcbiAgICBhY3Rvci5oZWlnaHQgPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoYWN0b3IuaGVpZ2h0IHx8IGNvbmYuaGVpZ2h0LCBjb25mLmhlaWdodCk7XG4gICAgYWN0b3IubWFyZ2luID0gYWN0b3IubWFyZ2luIHx8IGNvbmYuYWN0b3JNYXJnaW47XG4gICAgbWF4SGVpZ2h0ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KG1heEhlaWdodCwgYWN0b3IuaGVpZ2h0KTtcbiAgICBpZiAoY3JlYXRlZEFjdG9ycy5nZXQoYWN0b3IubmFtZSkpIHtcbiAgICAgIHByZXZNYXJnaW4gKz0gYWN0b3Iud2lkdGggLyAyO1xuICAgIH1cbiAgICBhY3Rvci54ID0gcHJldldpZHRoICsgcHJldk1hcmdpbjtcbiAgICBhY3Rvci5zdGFydHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgICBib3VuZHMuaW5zZXJ0KGFjdG9yLngsIHZlcnRpY2FsUG9zLCBhY3Rvci54ICsgYWN0b3Iud2lkdGgsIGFjdG9yLmhlaWdodCk7XG4gICAgcHJldldpZHRoICs9IGFjdG9yLndpZHRoICsgcHJldk1hcmdpbjtcbiAgICBpZiAoYWN0b3IuYm94KSB7XG4gICAgICBhY3Rvci5ib3gud2lkdGggPSBwcmV2V2lkdGggKyBib3gubWFyZ2luIC0gYWN0b3IuYm94Lng7XG4gICAgfVxuICAgIHByZXZNYXJnaW4gPSBhY3Rvci5tYXJnaW47XG4gICAgcHJldkJveCA9IGFjdG9yLmJveDtcbiAgICBib3VuZHMubW9kZWxzLmFkZEFjdG9yKGFjdG9yKTtcbiAgfVxuICBpZiAocHJldkJveCAmJiAhaXNGb290ZXIpIHtcbiAgICBib3VuZHMubW9kZWxzLmFkZEJveChwcmV2Qm94KTtcbiAgfVxuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKG1heEhlaWdodCk7XG59LCBcImFkZEFjdG9yUmVuZGVyaW5nRGF0YVwiKTtcbnZhciBkcmF3QWN0b3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihkaWFncmFtMiwgYWN0b3JzLCBhY3RvcktleXMsIGlzRm9vdGVyKSB7XG4gIGlmICghaXNGb290ZXIpIHtcbiAgICBmb3IgKGNvbnN0IGFjdG9yS2V5IG9mIGFjdG9yS2V5cykge1xuICAgICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KGFjdG9yS2V5KTtcbiAgICAgIGF3YWl0IHN2Z0RyYXdfZGVmYXVsdC5kcmF3QWN0b3IoZGlhZ3JhbTIsIGFjdG9yLCBjb25mLCBmYWxzZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBtYXhIZWlnaHQgPSAwO1xuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoY29uZi5ib3hNYXJnaW4gKiAyKTtcbiAgICBmb3IgKGNvbnN0IGFjdG9yS2V5IG9mIGFjdG9yS2V5cykge1xuICAgICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KGFjdG9yS2V5KTtcbiAgICAgIGlmICghYWN0b3Iuc3RvcHkpIHtcbiAgICAgICAgYWN0b3Iuc3RvcHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlaWdodCA9IGF3YWl0IHN2Z0RyYXdfZGVmYXVsdC5kcmF3QWN0b3IoZGlhZ3JhbTIsIGFjdG9yLCBjb25mLCB0cnVlKTtcbiAgICAgIG1heEhlaWdodCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChtYXhIZWlnaHQsIGhlaWdodCk7XG4gICAgfVxuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobWF4SGVpZ2h0ICsgY29uZi5ib3hNYXJnaW4pO1xuICB9XG59LCBcImRyYXdBY3RvcnNcIik7XG52YXIgZHJhd0FjdG9yc1BvcHVwID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkaWFncmFtMiwgYWN0b3JzLCBhY3RvcktleXMsIGRvYykge1xuICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgbGV0IG1heFdpZHRoID0gMDtcbiAgZm9yIChjb25zdCBhY3RvcktleSBvZiBhY3RvcktleXMpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQoYWN0b3JLZXkpO1xuICAgIGNvbnN0IG1pbk1lbnVXaWR0aCA9IGdldFJlcXVpcmVkUG9wdXBXaWR0aChhY3Rvcik7XG4gICAgY29uc3QgbWVudURpbWVuc2lvbnMgPSBzdmdEcmF3X2RlZmF1bHQuZHJhd1BvcHVwKFxuICAgICAgZGlhZ3JhbTIsXG4gICAgICBhY3RvcixcbiAgICAgIG1pbk1lbnVXaWR0aCxcbiAgICAgIGNvbmYsXG4gICAgICBjb25mLmZvcmNlTWVudXMsXG4gICAgICBkb2NcbiAgICApO1xuICAgIGlmIChtZW51RGltZW5zaW9ucy5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIG1heEhlaWdodCA9IG1lbnVEaW1lbnNpb25zLmhlaWdodDtcbiAgICB9XG4gICAgaWYgKG1lbnVEaW1lbnNpb25zLndpZHRoICsgYWN0b3IueCA+IG1heFdpZHRoKSB7XG4gICAgICBtYXhXaWR0aCA9IG1lbnVEaW1lbnNpb25zLndpZHRoICsgYWN0b3IueDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWF4SGVpZ2h0LCBtYXhXaWR0aCB9O1xufSwgXCJkcmF3QWN0b3JzUG9wdXBcIik7XG52YXIgc2V0Q29uZiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY25mKSB7XG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0KGNvbmYsIGNuZik7XG4gIGlmIChjbmYuZm9udEZhbWlseSkge1xuICAgIGNvbmYuYWN0b3JGb250RmFtaWx5ID0gY29uZi5ub3RlRm9udEZhbWlseSA9IGNvbmYubWVzc2FnZUZvbnRGYW1pbHkgPSBjbmYuZm9udEZhbWlseTtcbiAgfVxuICBpZiAoY25mLmZvbnRTaXplKSB7XG4gICAgY29uZi5hY3RvckZvbnRTaXplID0gY29uZi5ub3RlRm9udFNpemUgPSBjb25mLm1lc3NhZ2VGb250U2l6ZSA9IGNuZi5mb250U2l6ZTtcbiAgfVxuICBpZiAoY25mLmZvbnRXZWlnaHQpIHtcbiAgICBjb25mLmFjdG9yRm9udFdlaWdodCA9IGNvbmYubm90ZUZvbnRXZWlnaHQgPSBjb25mLm1lc3NhZ2VGb250V2VpZ2h0ID0gY25mLmZvbnRXZWlnaHQ7XG4gIH1cbn0sIFwic2V0Q29uZlwiKTtcbnZhciBhY3RvckFjdGl2YXRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3Rvcikge1xuICByZXR1cm4gYm91bmRzLmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihhY3RpdmF0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGl2YXRpb24uYWN0b3IgPT09IGFjdG9yO1xuICB9KTtcbn0sIFwiYWN0b3JBY3RpdmF0aW9uc1wiKTtcbnZhciBhY3RpdmF0aW9uQm91bmRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhY3RvciwgYWN0b3JzKSB7XG4gIGNvbnN0IGFjdG9yT2JqID0gYWN0b3JzLmdldChhY3Rvcik7XG4gIGNvbnN0IGFjdGl2YXRpb25zID0gYWN0b3JBY3RpdmF0aW9ucyhhY3Rvcik7XG4gIGNvbnN0IGxlZnQgPSBhY3RpdmF0aW9ucy5yZWR1Y2UoXG4gICAgZnVuY3Rpb24oYWNjLCBhY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gY29tbW9uX2RlZmF1bHQuZ2V0TWluKGFjYywgYWN0aXZhdGlvbi5zdGFydHgpO1xuICAgIH0sXG4gICAgYWN0b3JPYmoueCArIGFjdG9yT2JqLndpZHRoIC8gMiAtIDFcbiAgKTtcbiAgY29uc3QgcmlnaHQgPSBhY3RpdmF0aW9ucy5yZWR1Y2UoXG4gICAgZnVuY3Rpb24oYWNjLCBhY3RpdmF0aW9uKSB7XG4gICAgICByZXR1cm4gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGFjYywgYWN0aXZhdGlvbi5zdG9weCk7XG4gICAgfSxcbiAgICBhY3Rvck9iai54ICsgYWN0b3JPYmoud2lkdGggLyAyICsgMVxuICApO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XTtcbn0sIFwiYWN0aXZhdGlvbkJvdW5kc1wiKTtcbmZ1bmN0aW9uIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKGxvb3BXaWR0aHMsIG1zZywgcHJlTWFyZ2luLCBwb3N0TWFyZ2luLCBhZGRMb29wRm4pIHtcbiAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhwcmVNYXJnaW4pO1xuICBsZXQgaGVpZ2h0QWRqdXN0ID0gcG9zdE1hcmdpbjtcbiAgaWYgKG1zZy5pZCAmJiBtc2cubWVzc2FnZSAmJiBsb29wV2lkdGhzW21zZy5pZF0pIHtcbiAgICBjb25zdCBsb29wV2lkdGggPSBsb29wV2lkdGhzW21zZy5pZF0ud2lkdGg7XG4gICAgY29uc3QgdGV4dENvbmYgPSBtZXNzYWdlRm9udChjb25mKTtcbiAgICBtc2cubWVzc2FnZSA9IHV0aWxzX2RlZmF1bHQud3JhcExhYmVsKGBbJHttc2cubWVzc2FnZX1dYCwgbG9vcFdpZHRoIC0gMiAqIGNvbmYud3JhcFBhZGRpbmcsIHRleHRDb25mKTtcbiAgICBtc2cud2lkdGggPSBsb29wV2lkdGg7XG4gICAgbXNnLndyYXAgPSB0cnVlO1xuICAgIGNvbnN0IHRleHREaW1zID0gdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhtc2cubWVzc2FnZSwgdGV4dENvbmYpO1xuICAgIGNvbnN0IHRvdGFsT2Zmc2V0ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KHRleHREaW1zLmhlaWdodCwgY29uZi5sYWJlbEJveEhlaWdodCk7XG4gICAgaGVpZ2h0QWRqdXN0ID0gcG9zdE1hcmdpbiArIHRvdGFsT2Zmc2V0O1xuICAgIGxvZy5kZWJ1ZyhgJHt0b3RhbE9mZnNldH0gLSAke21zZy5tZXNzYWdlfWApO1xuICB9XG4gIGFkZExvb3BGbihtc2cpO1xuICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGhlaWdodEFkanVzdCk7XG59XG5fX25hbWUoYWRqdXN0TG9vcEhlaWdodEZvcldyYXAsIFwiYWRqdXN0TG9vcEhlaWdodEZvcldyYXBcIik7XG5mdW5jdGlvbiBhZGp1c3RDcmVhdGVkRGVzdHJveWVkRGF0YShtc2csIG1zZ01vZGVsLCBsaW5lU3RhcnRZLCBpbmRleCwgYWN0b3JzLCBjcmVhdGVkQWN0b3JzLCBkZXN0cm95ZWRBY3RvcnMpIHtcbiAgZnVuY3Rpb24gcmVjZWl2ZXJBZGp1c3RtZW50KGFjdG9yLCBhZGp1c3RtZW50KSB7XG4gICAgaWYgKGFjdG9yLnggPCBhY3RvcnMuZ2V0KG1zZy5mcm9tKS54KSB7XG4gICAgICBib3VuZHMuaW5zZXJ0KFxuICAgICAgICBtc2dNb2RlbC5zdG9weCAtIGFkanVzdG1lbnQsXG4gICAgICAgIG1zZ01vZGVsLnN0YXJ0eSxcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4LFxuICAgICAgICBtc2dNb2RlbC5zdG9weSArIGFjdG9yLmhlaWdodCAvIDIgKyBjb25mLm5vdGVNYXJnaW5cbiAgICAgICk7XG4gICAgICBtc2dNb2RlbC5zdG9weCA9IG1zZ01vZGVsLnN0b3B4ICsgYWRqdXN0bWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRzLmluc2VydChcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4LFxuICAgICAgICBtc2dNb2RlbC5zdGFydHksXG4gICAgICAgIG1zZ01vZGVsLnN0b3B4ICsgYWRqdXN0bWVudCxcbiAgICAgICAgbXNnTW9kZWwuc3RvcHkgKyBhY3Rvci5oZWlnaHQgLyAyICsgY29uZi5ub3RlTWFyZ2luXG4gICAgICApO1xuICAgICAgbXNnTW9kZWwuc3RvcHggPSBtc2dNb2RlbC5zdG9weCAtIGFkanVzdG1lbnQ7XG4gICAgfVxuICB9XG4gIF9fbmFtZShyZWNlaXZlckFkanVzdG1lbnQsIFwicmVjZWl2ZXJBZGp1c3RtZW50XCIpO1xuICBmdW5jdGlvbiBzZW5kZXJBZGp1c3RtZW50KGFjdG9yLCBhZGp1c3RtZW50KSB7XG4gICAgaWYgKGFjdG9yLnggPCBhY3RvcnMuZ2V0KG1zZy50bykueCkge1xuICAgICAgYm91bmRzLmluc2VydChcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4IC0gYWRqdXN0bWVudCxcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR5LFxuICAgICAgICBtc2dNb2RlbC5zdG9weCxcbiAgICAgICAgbXNnTW9kZWwuc3RvcHkgKyBhY3Rvci5oZWlnaHQgLyAyICsgY29uZi5ub3RlTWFyZ2luXG4gICAgICApO1xuICAgICAgbXNnTW9kZWwuc3RhcnR4ID0gbXNnTW9kZWwuc3RhcnR4ICsgYWRqdXN0bWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRzLmluc2VydChcbiAgICAgICAgbXNnTW9kZWwuc3RvcHgsXG4gICAgICAgIG1zZ01vZGVsLnN0YXJ0eSxcbiAgICAgICAgbXNnTW9kZWwuc3RhcnR4ICsgYWRqdXN0bWVudCxcbiAgICAgICAgbXNnTW9kZWwuc3RvcHkgKyBhY3Rvci5oZWlnaHQgLyAyICsgY29uZi5ub3RlTWFyZ2luXG4gICAgICApO1xuICAgICAgbXNnTW9kZWwuc3RhcnR4ID0gbXNnTW9kZWwuc3RhcnR4IC0gYWRqdXN0bWVudDtcbiAgICB9XG4gIH1cbiAgX19uYW1lKHNlbmRlckFkanVzdG1lbnQsIFwic2VuZGVyQWRqdXN0bWVudFwiKTtcbiAgaWYgKGNyZWF0ZWRBY3RvcnMuZ2V0KG1zZy50bykgPT0gaW5kZXgpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQobXNnLnRvKTtcbiAgICBjb25zdCBhZGp1c3RtZW50ID0gYWN0b3IudHlwZSA9PSBcImFjdG9yXCIgPyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiArIDMgOiBhY3Rvci53aWR0aCAvIDIgKyAzO1xuICAgIHJlY2VpdmVyQWRqdXN0bWVudChhY3RvciwgYWRqdXN0bWVudCk7XG4gICAgYWN0b3Iuc3RhcnR5ID0gbGluZVN0YXJ0WSAtIGFjdG9yLmhlaWdodCAvIDI7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhhY3Rvci5oZWlnaHQgLyAyKTtcbiAgfSBlbHNlIGlmIChkZXN0cm95ZWRBY3RvcnMuZ2V0KG1zZy5mcm9tKSA9PSBpbmRleCkge1xuICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzLmdldChtc2cuZnJvbSk7XG4gICAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgICBjb25zdCBhZGp1c3RtZW50ID0gYWN0b3IudHlwZSA9PSBcImFjdG9yXCIgPyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiA6IGFjdG9yLndpZHRoIC8gMjtcbiAgICAgIHNlbmRlckFkanVzdG1lbnQoYWN0b3IsIGFkanVzdG1lbnQpO1xuICAgIH1cbiAgICBhY3Rvci5zdG9weSA9IGxpbmVTdGFydFkgLSBhY3Rvci5oZWlnaHQgLyAyO1xuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoYWN0b3IuaGVpZ2h0IC8gMik7XG4gIH0gZWxzZSBpZiAoZGVzdHJveWVkQWN0b3JzLmdldChtc2cudG8pID09IGluZGV4KSB7XG4gICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KG1zZy50byk7XG4gICAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgICBjb25zdCBhZGp1c3RtZW50ID0gYWN0b3IudHlwZSA9PSBcImFjdG9yXCIgPyBBQ1RPUl9UWVBFX1dJRFRIIC8gMiArIDMgOiBhY3Rvci53aWR0aCAvIDIgKyAzO1xuICAgICAgcmVjZWl2ZXJBZGp1c3RtZW50KGFjdG9yLCBhZGp1c3RtZW50KTtcbiAgICB9XG4gICAgYWN0b3Iuc3RvcHkgPSBsaW5lU3RhcnRZIC0gYWN0b3IuaGVpZ2h0IC8gMjtcbiAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGFjdG9yLmhlaWdodCAvIDIpO1xuICB9XG59XG5fX25hbWUoYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGEsIFwiYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGFcIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oX3RleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIHNlcXVlbmNlIH0gPSBnZXRDb25maWcyKCk7XG4gIGNvbmYgPSBzZXF1ZW5jZTtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICBib3VuZHMuaW5pdCgpO1xuICBsb2cuZGVidWcoZGlhZ09iai5kYik7XG4gIGNvbnN0IGRpYWdyYW0yID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKSA6IHNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgY29uc3QgYWN0b3JzID0gZGlhZ09iai5kYi5nZXRBY3RvcnMoKTtcbiAgY29uc3QgY3JlYXRlZEFjdG9ycyA9IGRpYWdPYmouZGIuZ2V0Q3JlYXRlZEFjdG9ycygpO1xuICBjb25zdCBkZXN0cm95ZWRBY3RvcnMgPSBkaWFnT2JqLmRiLmdldERlc3Ryb3llZEFjdG9ycygpO1xuICBjb25zdCBib3hlcyA9IGRpYWdPYmouZGIuZ2V0Qm94ZXMoKTtcbiAgbGV0IGFjdG9yS2V5cyA9IGRpYWdPYmouZGIuZ2V0QWN0b3JLZXlzKCk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZGlhZ09iai5kYi5nZXRNZXNzYWdlcygpO1xuICBjb25zdCB0aXRsZSA9IGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGNvbnN0IGhhc0JveGVzID0gZGlhZ09iai5kYi5oYXNBdExlYXN0T25lQm94KCk7XG4gIGNvbnN0IGhhc0JveFRpdGxlcyA9IGRpYWdPYmouZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpO1xuICBjb25zdCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciA9IGF3YWl0IGdldE1heE1lc3NhZ2VXaWR0aFBlckFjdG9yKGFjdG9ycywgbWVzc2FnZXMsIGRpYWdPYmopO1xuICBjb25mLmhlaWdodCA9IGF3YWl0IGNhbGN1bGF0ZUFjdG9yTWFyZ2lucyhhY3RvcnMsIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yLCBib3hlcyk7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRDb21wdXRlckljb24oZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0RGF0YWJhc2VJY29uKGRpYWdyYW0yKTtcbiAgc3ZnRHJhd19kZWZhdWx0Lmluc2VydENsb2NrSWNvbihkaWFncmFtMik7XG4gIGlmIChoYXNCb3hlcykge1xuICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoY29uZi5ib3hNYXJnaW4pO1xuICAgIGlmIChoYXNCb3hUaXRsZXMpIHtcbiAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MoYm94ZXNbMF0udGV4dE1heEhlaWdodCk7XG4gICAgfVxuICB9XG4gIGlmIChjb25mLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHMgPT09IHRydWUpIHtcbiAgICBjb25zdCBuZXdBY3RvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgIG5ld0FjdG9ycy5hZGQobWVzc2FnZS5mcm9tKTtcbiAgICAgIG5ld0FjdG9ycy5hZGQobWVzc2FnZS50byk7XG4gICAgfSk7XG4gICAgYWN0b3JLZXlzID0gYWN0b3JLZXlzLmZpbHRlcigoYWN0b3JLZXkpID0+IG5ld0FjdG9ycy5oYXMoYWN0b3JLZXkpKTtcbiAgfVxuICBhZGRBY3RvclJlbmRlcmluZ0RhdGEoZGlhZ3JhbTIsIGFjdG9ycywgY3JlYXRlZEFjdG9ycywgYWN0b3JLZXlzLCAwLCBtZXNzYWdlcywgZmFsc2UpO1xuICBjb25zdCBsb29wV2lkdGhzID0gYXdhaXQgY2FsY3VsYXRlTG9vcEJvdW5kcyhtZXNzYWdlcywgYWN0b3JzLCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciwgZGlhZ09iaik7XG4gIHN2Z0RyYXdfZGVmYXVsdC5pbnNlcnRBcnJvd0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoZGlhZ3JhbTIpO1xuICBzdmdEcmF3X2RlZmF1bHQuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGRpYWdyYW0yKTtcbiAgc3ZnRHJhd19kZWZhdWx0Lmluc2VydFNlcXVlbmNlTnVtYmVyKGRpYWdyYW0yKTtcbiAgZnVuY3Rpb24gYWN0aXZlRW5kKG1zZywgdmVydGljYWxQb3MpIHtcbiAgICBjb25zdCBhY3RpdmF0aW9uRGF0YSA9IGJvdW5kcy5lbmRBY3RpdmF0aW9uKG1zZyk7XG4gICAgaWYgKGFjdGl2YXRpb25EYXRhLnN0YXJ0eSArIDE4ID4gdmVydGljYWxQb3MpIHtcbiAgICAgIGFjdGl2YXRpb25EYXRhLnN0YXJ0eSA9IHZlcnRpY2FsUG9zIC0gNjtcbiAgICAgIHZlcnRpY2FsUG9zICs9IDEyO1xuICAgIH1cbiAgICBzdmdEcmF3X2RlZmF1bHQuZHJhd0FjdGl2YXRpb24oXG4gICAgICBkaWFncmFtMixcbiAgICAgIGFjdGl2YXRpb25EYXRhLFxuICAgICAgdmVydGljYWxQb3MsXG4gICAgICBjb25mLFxuICAgICAgYWN0b3JBY3RpdmF0aW9ucyhtc2cuZnJvbSkubGVuZ3RoXG4gICAgKTtcbiAgICBib3VuZHMuaW5zZXJ0KGFjdGl2YXRpb25EYXRhLnN0YXJ0eCwgdmVydGljYWxQb3MgLSAxMCwgYWN0aXZhdGlvbkRhdGEuc3RvcHgsIHZlcnRpY2FsUG9zKTtcbiAgfVxuICBfX25hbWUoYWN0aXZlRW5kLCBcImFjdGl2ZUVuZFwiKTtcbiAgbGV0IHNlcXVlbmNlSW5kZXggPSAxO1xuICBsZXQgc2VxdWVuY2VJbmRleFN0ZXAgPSAxO1xuICBjb25zdCBtZXNzYWdlc1RvRHJhdyA9IFtdO1xuICBjb25zdCBiYWNrZ3JvdW5kcyA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIGxldCBsb29wTW9kZWwsIG5vdGVNb2RlbCwgbXNnTW9kZWw7XG4gICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLk5PVEU6XG4gICAgICAgIGJvdW5kcy5yZXNldFZlcnRpY2FsUG9zKCk7XG4gICAgICAgIG5vdGVNb2RlbCA9IG1zZy5ub3RlTW9kZWw7XG4gICAgICAgIGF3YWl0IGRyYXdOb3RlKGRpYWdyYW0yLCBub3RlTW9kZWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6XG4gICAgICAgIGJvdW5kcy5uZXdBY3RpdmF0aW9uKG1zZywgZGlhZ3JhbTIsIGFjdG9ycyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6XG4gICAgICAgIGFjdGl2ZUVuZChtc2csIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuTE9PUF9TVEFSVDpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5uZXdMb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkxPT1BfRU5EOlxuICAgICAgICBsb29wTW9kZWwgPSBib3VuZHMuZW5kTG9vcCgpO1xuICAgICAgICBhd2FpdCBzdmdEcmF3X2RlZmF1bHQuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJsb29wXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcCh2b2lkIDAsIG1lc3NhZ2UubWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUkVDVF9FTkQ6XG4gICAgICAgIGxvb3BNb2RlbCA9IGJvdW5kcy5lbmRMb29wKCk7XG4gICAgICAgIGJhY2tncm91bmRzLnB1c2gobG9vcE1vZGVsKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5PUFRfRU5EOlxuICAgICAgICBsb29wTW9kZWwgPSBib3VuZHMuZW5kTG9vcCgpO1xuICAgICAgICBhd2FpdCBzdmdEcmF3X2RlZmF1bHQuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJvcHRcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX1NUQVJUOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLm5ld0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX0VMU0U6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMuYWRkU2VjdGlvblRvTG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfRU5EOlxuICAgICAgICBsb29wTW9kZWwgPSBib3VuZHMuZW5kTG9vcCgpO1xuICAgICAgICBhd2FpdCBzdmdEcmF3X2RlZmF1bHQuZHJhd0xvb3AoZGlhZ3JhbTIsIGxvb3BNb2RlbCwgXCJhbHRcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX1NUQVJUOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLm5ld0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYm91bmRzLnNhdmVWZXJ0aWNhbFBvcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5QQVJfQU5EOlxuICAgICAgICBhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcChcbiAgICAgICAgICBsb29wV2lkdGhzLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgICBjb25mLmJveE1hcmdpbiArIGNvbmYuYm94VGV4dE1hcmdpbixcbiAgICAgICAgICBjb25mLmJveE1hcmdpbixcbiAgICAgICAgICAobWVzc2FnZSkgPT4gYm91bmRzLmFkZFNlY3Rpb25Ub0xvb3AobWVzc2FnZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgYXdhaXQgc3ZnRHJhd19kZWZhdWx0LmRyYXdMb29wKGRpYWdyYW0yLCBsb29wTW9kZWwsIFwicGFyXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6XG4gICAgICAgIHNlcXVlbmNlSW5kZXggPSBtc2cubWVzc2FnZS5zdGFydCB8fCBzZXF1ZW5jZUluZGV4O1xuICAgICAgICBzZXF1ZW5jZUluZGV4U3RlcCA9IG1zZy5tZXNzYWdlLnN0ZXAgfHwgc2VxdWVuY2VJbmRleFN0ZXA7XG4gICAgICAgIGlmIChtc2cubWVzc2FnZS52aXNpYmxlKSB7XG4gICAgICAgICAgZGlhZ09iai5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaWFnT2JqLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5uZXdMb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjpcbiAgICAgICAgYWRqdXN0TG9vcEhlaWdodEZvcldyYXAoXG4gICAgICAgICAgbG9vcFdpZHRocyxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4gKyBjb25mLmJveFRleHRNYXJnaW4sXG4gICAgICAgICAgY29uZi5ib3hNYXJnaW4sXG4gICAgICAgICAgKG1lc3NhZ2UpID0+IGJvdW5kcy5hZGRTZWN0aW9uVG9Mb29wKG1lc3NhZ2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpcbiAgICAgICAgbG9vcE1vZGVsID0gYm91bmRzLmVuZExvb3AoKTtcbiAgICAgICAgYXdhaXQgc3ZnRHJhd19kZWZhdWx0LmRyYXdMb29wKGRpYWdyYW0yLCBsb29wTW9kZWwsIFwiY3JpdGljYWxcIiwgY29uZik7XG4gICAgICAgIGJvdW5kcy5idW1wVmVydGljYWxQb3MobG9vcE1vZGVsLnN0b3B5IC0gYm91bmRzLmdldFZlcnRpY2FsUG9zKCkpO1xuICAgICAgICBib3VuZHMubW9kZWxzLmFkZExvb3AobG9vcE1vZGVsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6XG4gICAgICAgIGFkanVzdExvb3BIZWlnaHRGb3JXcmFwKFxuICAgICAgICAgIGxvb3BXaWR0aHMsXG4gICAgICAgICAgbXNnLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luLFxuICAgICAgICAgIGNvbmYuYm94TWFyZ2luICsgY29uZi5ib3hUZXh0TWFyZ2luLFxuICAgICAgICAgIChtZXNzYWdlKSA9PiBib3VuZHMubmV3TG9vcChtZXNzYWdlKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6XG4gICAgICAgIGxvb3BNb2RlbCA9IGJvdW5kcy5lbmRMb29wKCk7XG4gICAgICAgIGF3YWl0IHN2Z0RyYXdfZGVmYXVsdC5kcmF3TG9vcChkaWFncmFtMiwgbG9vcE1vZGVsLCBcImJyZWFrXCIsIGNvbmYpO1xuICAgICAgICBib3VuZHMuYnVtcFZlcnRpY2FsUG9zKGxvb3BNb2RlbC5zdG9weSAtIGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpKTtcbiAgICAgICAgYm91bmRzLm1vZGVscy5hZGRMb29wKGxvb3BNb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtc2dNb2RlbCA9IG1zZy5tc2dNb2RlbDtcbiAgICAgICAgICBtc2dNb2RlbC5zdGFydHkgPSBib3VuZHMuZ2V0VmVydGljYWxQb3MoKTtcbiAgICAgICAgICBtc2dNb2RlbC5zZXF1ZW5jZUluZGV4ID0gc2VxdWVuY2VJbmRleDtcbiAgICAgICAgICBtc2dNb2RlbC5zZXF1ZW5jZVZpc2libGUgPSBkaWFnT2JqLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtcbiAgICAgICAgICBjb25zdCBsaW5lU3RhcnRZID0gYXdhaXQgYm91bmRNZXNzYWdlKGRpYWdyYW0yLCBtc2dNb2RlbCk7XG4gICAgICAgICAgYWRqdXN0Q3JlYXRlZERlc3Ryb3llZERhdGEoXG4gICAgICAgICAgICBtc2csXG4gICAgICAgICAgICBtc2dNb2RlbCxcbiAgICAgICAgICAgIGxpbmVTdGFydFksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGFjdG9ycyxcbiAgICAgICAgICAgIGNyZWF0ZWRBY3RvcnMsXG4gICAgICAgICAgICBkZXN0cm95ZWRBY3RvcnNcbiAgICAgICAgICApO1xuICAgICAgICAgIG1lc3NhZ2VzVG9EcmF3LnB1c2goeyBtZXNzYWdlTW9kZWw6IG1zZ01vZGVsLCBsaW5lU3RhcnRZIH0pO1xuICAgICAgICAgIGJvdW5kcy5tb2RlbHMuYWRkTWVzc2FnZShtc2dNb2RlbCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2VcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFtcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfT1BFTixcbiAgICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX09QRU4sXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElELFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURUQsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULFxuICAgICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsXG4gICAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXG4gICAgXS5pbmNsdWRlcyhtc2cudHlwZSkpIHtcbiAgICAgIHNlcXVlbmNlSW5kZXggPSBzZXF1ZW5jZUluZGV4ICsgc2VxdWVuY2VJbmRleFN0ZXA7XG4gICAgfVxuICAgIGluZGV4Kys7XG4gIH1cbiAgbG9nLmRlYnVnKFwiY3JlYXRlZEFjdG9yc1wiLCBjcmVhdGVkQWN0b3JzKTtcbiAgbG9nLmRlYnVnKFwiZGVzdHJveWVkQWN0b3JzXCIsIGRlc3Ryb3llZEFjdG9ycyk7XG4gIGF3YWl0IGRyYXdBY3RvcnMoZGlhZ3JhbTIsIGFjdG9ycywgYWN0b3JLZXlzLCBmYWxzZSk7XG4gIGZvciAoY29uc3QgZSBvZiBtZXNzYWdlc1RvRHJhdykge1xuICAgIGF3YWl0IGRyYXdNZXNzYWdlKGRpYWdyYW0yLCBlLm1lc3NhZ2VNb2RlbCwgZS5saW5lU3RhcnRZLCBkaWFnT2JqKTtcbiAgfVxuICBpZiAoY29uZi5taXJyb3JBY3RvcnMpIHtcbiAgICBhd2FpdCBkcmF3QWN0b3JzKGRpYWdyYW0yLCBhY3RvcnMsIGFjdG9yS2V5cywgdHJ1ZSk7XG4gIH1cbiAgYmFja2dyb3VuZHMuZm9yRWFjaCgoZSkgPT4gc3ZnRHJhd19kZWZhdWx0LmRyYXdCYWNrZ3JvdW5kUmVjdChkaWFncmFtMiwgZSkpO1xuICBmaXhMaWZlTGluZUhlaWdodHMoZGlhZ3JhbTIsIGFjdG9ycywgYWN0b3JLZXlzLCBjb25mKTtcbiAgZm9yIChjb25zdCBib3gyIG9mIGJvdW5kcy5tb2RlbHMuYm94ZXMpIHtcbiAgICBib3gyLmhlaWdodCA9IGJvdW5kcy5nZXRWZXJ0aWNhbFBvcygpIC0gYm94Mi55O1xuICAgIGJvdW5kcy5pbnNlcnQoYm94Mi54LCBib3gyLnksIGJveDIueCArIGJveDIud2lkdGgsIGJveDIuaGVpZ2h0KTtcbiAgICBib3gyLnN0YXJ0eCA9IGJveDIueDtcbiAgICBib3gyLnN0YXJ0eSA9IGJveDIueTtcbiAgICBib3gyLnN0b3B4ID0gYm94Mi5zdGFydHggKyBib3gyLndpZHRoO1xuICAgIGJveDIuc3RvcHkgPSBib3gyLnN0YXJ0eSArIGJveDIuaGVpZ2h0O1xuICAgIGJveDIuc3Ryb2tlID0gXCJyZ2IoMCwwLDAsIDAuNSlcIjtcbiAgICBzdmdEcmF3X2RlZmF1bHQuZHJhd0JveChkaWFncmFtMiwgYm94MiwgY29uZik7XG4gIH1cbiAgaWYgKGhhc0JveGVzKSB7XG4gICAgYm91bmRzLmJ1bXBWZXJ0aWNhbFBvcyhjb25mLmJveE1hcmdpbik7XG4gIH1cbiAgY29uc3QgcmVxdWlyZWRCb3hTaXplID0gZHJhd0FjdG9yc1BvcHVwKGRpYWdyYW0yLCBhY3RvcnMsIGFjdG9yS2V5cywgZG9jKTtcbiAgY29uc3QgeyBib3VuZHM6IGJveCB9ID0gYm91bmRzLmdldEJvdW5kcygpO1xuICBpZiAoYm94LnN0YXJ0eCA9PT0gdm9pZCAwKSB7XG4gICAgYm94LnN0YXJ0eCA9IDA7XG4gIH1cbiAgaWYgKGJveC5zdGFydHkgPT09IHZvaWQgMCkge1xuICAgIGJveC5zdGFydHkgPSAwO1xuICB9XG4gIGlmIChib3guc3RvcHggPT09IHZvaWQgMCkge1xuICAgIGJveC5zdG9weCA9IDA7XG4gIH1cbiAgaWYgKGJveC5zdG9weSA9PT0gdm9pZCAwKSB7XG4gICAgYm94LnN0b3B5ID0gMDtcbiAgfVxuICBsZXQgYm94SGVpZ2h0ID0gYm94LnN0b3B5IC0gYm94LnN0YXJ0eTtcbiAgaWYgKGJveEhlaWdodCA8IHJlcXVpcmVkQm94U2l6ZS5tYXhIZWlnaHQpIHtcbiAgICBib3hIZWlnaHQgPSByZXF1aXJlZEJveFNpemUubWF4SGVpZ2h0O1xuICB9XG4gIGxldCBoZWlnaHQgPSBib3hIZWlnaHQgKyAyICogY29uZi5kaWFncmFtTWFyZ2luWTtcbiAgaWYgKGNvbmYubWlycm9yQWN0b3JzKSB7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IC0gY29uZi5ib3hNYXJnaW4gKyBjb25mLmJvdHRvbU1hcmdpbkFkajtcbiAgfVxuICBsZXQgYm94V2lkdGggPSBib3guc3RvcHggLSBib3guc3RhcnR4O1xuICBpZiAoYm94V2lkdGggPCByZXF1aXJlZEJveFNpemUubWF4V2lkdGgpIHtcbiAgICBib3hXaWR0aCA9IHJlcXVpcmVkQm94U2l6ZS5tYXhXaWR0aDtcbiAgfVxuICBjb25zdCB3aWR0aCA9IGJveFdpZHRoICsgMiAqIGNvbmYuZGlhZ3JhbU1hcmdpblg7XG4gIGlmICh0aXRsZSkge1xuICAgIGRpYWdyYW0yLmFwcGVuZChcInRleHRcIikudGV4dCh0aXRsZSkuYXR0cihcInhcIiwgKGJveC5zdG9weCAtIGJveC5zdGFydHgpIC8gMiAtIDIgKiBjb25mLmRpYWdyYW1NYXJnaW5YKS5hdHRyKFwieVwiLCAtMjUpO1xuICB9XG4gIGNvbmZpZ3VyZVN2Z1NpemUoZGlhZ3JhbTIsIGhlaWdodCwgd2lkdGgsIGNvbmYudXNlTWF4V2lkdGgpO1xuICBjb25zdCBleHRyYVZlcnRGb3JUaXRsZSA9IHRpdGxlID8gNDAgOiAwO1xuICBkaWFncmFtMi5hdHRyKFxuICAgIFwidmlld0JveFwiLFxuICAgIGJveC5zdGFydHggLSBjb25mLmRpYWdyYW1NYXJnaW5YICsgXCIgLVwiICsgKGNvbmYuZGlhZ3JhbU1hcmdpblkgKyBleHRyYVZlcnRGb3JUaXRsZSkgKyBcIiBcIiArIHdpZHRoICsgXCIgXCIgKyAoaGVpZ2h0ICsgZXh0cmFWZXJ0Rm9yVGl0bGUpXG4gICk7XG4gIGxvZy5kZWJ1ZyhgbW9kZWxzOmAsIGJvdW5kcy5tb2RlbHMpO1xufSwgXCJkcmF3XCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IoYWN0b3JzLCBtZXNzYWdlcywgZGlhZ09iaikge1xuICBjb25zdCBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvciA9IHt9O1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIGlmIChhY3RvcnMuZ2V0KG1zZy50bykgJiYgYWN0b3JzLmdldChtc2cuZnJvbSkpIHtcbiAgICAgIGNvbnN0IGFjdG9yID0gYWN0b3JzLmdldChtc2cudG8pO1xuICAgICAgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULkxFRlRPRiAmJiAhYWN0b3IucHJldkFjdG9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULlJJR0hUT0YgJiYgIWFjdG9yLm5leHRBY3Rvcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTm90ZSA9IG1zZy5wbGFjZW1lbnQgIT09IHZvaWQgMDtcbiAgICAgIGNvbnN0IGlzTWVzc2FnZSA9ICFpc05vdGU7XG4gICAgICBjb25zdCB0ZXh0Rm9udCA9IGlzTm90ZSA/IG5vdGVGb250KGNvbmYpIDogbWVzc2FnZUZvbnQoY29uZik7XG4gICAgICBjb25zdCB3cmFwcGVkTWVzc2FnZSA9IG1zZy53cmFwID8gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwobXNnLm1lc3NhZ2UsIGNvbmYud2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dEZvbnQpIDogbXNnLm1lc3NhZ2U7XG4gICAgICBjb25zdCBtZXNzYWdlRGltZW5zaW9ucyA9IGhhc0thdGV4KHdyYXBwZWRNZXNzYWdlKSA/IGF3YWl0IGNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIGdldENvbmZpZzIoKSkgOiB1dGlsc19kZWZhdWx0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHdyYXBwZWRNZXNzYWdlLCB0ZXh0Rm9udCk7XG4gICAgICBjb25zdCBtZXNzYWdlV2lkdGggPSBtZXNzYWdlRGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nO1xuICAgICAgaWYgKGlzTWVzc2FnZSAmJiBtc2cuZnJvbSA9PT0gYWN0b3IubmV4dEFjdG9yKSB7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLnRvXSB8fCAwLFxuICAgICAgICAgIG1lc3NhZ2VXaWR0aFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChpc01lc3NhZ2UgJiYgbXNnLmZyb20gPT09IGFjdG9yLnByZXZBY3Rvcikge1xuICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dIHx8IDAsXG4gICAgICAgICAgbWVzc2FnZVdpZHRoXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWVzc2FnZSAmJiBtc2cuZnJvbSA9PT0gbXNnLnRvKSB7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy5mcm9tXSA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGggLyAyXG4gICAgICAgICk7XG4gICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW21zZy50b10gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLnRvXSB8fCAwLFxuICAgICAgICAgIG1lc3NhZ2VXaWR0aCAvIDJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuUklHSFRPRikge1xuICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbbXNnLmZyb21dIHx8IDAsXG4gICAgICAgICAgbWVzc2FnZVdpZHRoXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG1zZy5wbGFjZW1lbnQgPT09IGRpYWdPYmouZGIuUExBQ0VNRU5ULkxFRlRPRikge1xuICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3RvclthY3Rvci5wcmV2QWN0b3JdID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW2FjdG9yLnByZXZBY3Rvcl0gfHwgMCxcbiAgICAgICAgICBtZXNzYWdlV2lkdGhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuT1ZFUikge1xuICAgICAgICBpZiAoYWN0b3IucHJldkFjdG9yKSB7XG4gICAgICAgICAgbWF4TWVzc2FnZVdpZHRoUGVyQWN0b3JbYWN0b3IucHJldkFjdG9yXSA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChcbiAgICAgICAgICAgIG1heE1lc3NhZ2VXaWR0aFBlckFjdG9yW2FjdG9yLnByZXZBY3Rvcl0gfHwgMCxcbiAgICAgICAgICAgIG1lc3NhZ2VXaWR0aCAvIDJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rvci5uZXh0QWN0b3IpIHtcbiAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICAgICAgICBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvclttc2cuZnJvbV0gfHwgMCxcbiAgICAgICAgICAgIG1lc3NhZ2VXaWR0aCAvIDJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhcIm1heE1lc3NhZ2VXaWR0aFBlckFjdG9yOlwiLCBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvcik7XG4gIHJldHVybiBtYXhNZXNzYWdlV2lkdGhQZXJBY3Rvcjtcbn1cbl9fbmFtZShnZXRNYXhNZXNzYWdlV2lkdGhQZXJBY3RvciwgXCJnZXRNYXhNZXNzYWdlV2lkdGhQZXJBY3RvclwiKTtcbnZhciBnZXRSZXF1aXJlZFBvcHVwV2lkdGggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGFjdG9yKSB7XG4gIGxldCByZXF1aXJlZFBvcHVwV2lkdGggPSAwO1xuICBjb25zdCB0ZXh0Rm9udCA9IGFjdG9yRm9udChjb25mKTtcbiAgZm9yIChjb25zdCBrZXkgaW4gYWN0b3IubGlua3MpIHtcbiAgICBjb25zdCBsYWJlbERpbWVuc2lvbnMgPSB1dGlsc19kZWZhdWx0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGtleSwgdGV4dEZvbnQpO1xuICAgIGNvbnN0IGxhYmVsV2lkdGggPSBsYWJlbERpbWVuc2lvbnMud2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZyArIDIgKiBjb25mLmJveE1hcmdpbjtcbiAgICBpZiAocmVxdWlyZWRQb3B1cFdpZHRoIDwgbGFiZWxXaWR0aCkge1xuICAgICAgcmVxdWlyZWRQb3B1cFdpZHRoID0gbGFiZWxXaWR0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcXVpcmVkUG9wdXBXaWR0aDtcbn0sIFwiZ2V0UmVxdWlyZWRQb3B1cFdpZHRoXCIpO1xuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlQWN0b3JNYXJnaW5zKGFjdG9ycywgYWN0b3JUb01lc3NhZ2VXaWR0aCwgYm94ZXMpIHtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBhY3RvcnMua2V5cygpKSB7XG4gICAgY29uc3QgYWN0b3IgPSBhY3RvcnMuZ2V0KHByb3ApO1xuICAgIGlmIChhY3Rvci53cmFwKSB7XG4gICAgICBhY3Rvci5kZXNjcmlwdGlvbiA9IHV0aWxzX2RlZmF1bHQud3JhcExhYmVsKFxuICAgICAgICBhY3Rvci5kZXNjcmlwdGlvbixcbiAgICAgICAgY29uZi53aWR0aCAtIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgICBhY3RvckZvbnQoY29uZilcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFjdERpbXMgPSBoYXNLYXRleChhY3Rvci5kZXNjcmlwdGlvbikgPyBhd2FpdCBjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zKGFjdG9yLmRlc2NyaXB0aW9uLCBnZXRDb25maWcyKCkpIDogdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhY3Rvci5kZXNjcmlwdGlvbiwgYWN0b3JGb250KGNvbmYpKTtcbiAgICBhY3Rvci53aWR0aCA9IGFjdG9yLndyYXAgPyBjb25mLndpZHRoIDogY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGgsIGFjdERpbXMud2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZyk7XG4gICAgYWN0b3IuaGVpZ2h0ID0gYWN0b3Iud3JhcCA/IGNvbW1vbl9kZWZhdWx0LmdldE1heChhY3REaW1zLmhlaWdodCwgY29uZi5oZWlnaHQpIDogY29uZi5oZWlnaHQ7XG4gICAgbWF4SGVpZ2h0ID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KG1heEhlaWdodCwgYWN0b3IuaGVpZ2h0KTtcbiAgfVxuICBmb3IgKGNvbnN0IGFjdG9yS2V5IGluIGFjdG9yVG9NZXNzYWdlV2lkdGgpIHtcbiAgICBjb25zdCBhY3RvciA9IGFjdG9ycy5nZXQoYWN0b3JLZXkpO1xuICAgIGlmICghYWN0b3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuZXh0QWN0b3IgPSBhY3RvcnMuZ2V0KGFjdG9yLm5leHRBY3Rvcik7XG4gICAgaWYgKCFuZXh0QWN0b3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaWR0aDIgPSBhY3RvclRvTWVzc2FnZVdpZHRoW2FjdG9yS2V5XTtcbiAgICAgIGNvbnN0IGFjdG9yV2lkdGgyID0gbWVzc2FnZVdpZHRoMiArIGNvbmYuYWN0b3JNYXJnaW4gLSBhY3Rvci53aWR0aCAvIDI7XG4gICAgICBhY3Rvci5tYXJnaW4gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoYWN0b3JXaWR0aDIsIGNvbmYuYWN0b3JNYXJnaW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VXaWR0aCA9IGFjdG9yVG9NZXNzYWdlV2lkdGhbYWN0b3JLZXldO1xuICAgIGNvbnN0IGFjdG9yV2lkdGggPSBtZXNzYWdlV2lkdGggKyBjb25mLmFjdG9yTWFyZ2luIC0gYWN0b3Iud2lkdGggLyAyIC0gbmV4dEFjdG9yLndpZHRoIC8gMjtcbiAgICBhY3Rvci5tYXJnaW4gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgoYWN0b3JXaWR0aCwgY29uZi5hY3Rvck1hcmdpbik7XG4gIH1cbiAgbGV0IG1heEJveEhlaWdodCA9IDA7XG4gIGJveGVzLmZvckVhY2goKGJveCkgPT4ge1xuICAgIGNvbnN0IHRleHRGb250ID0gbWVzc2FnZUZvbnQoY29uZik7XG4gICAgbGV0IHRvdGFsV2lkdGggPSBib3guYWN0b3JLZXlzLnJlZHVjZSgodG90YWwsIGFLZXkpID0+IHtcbiAgICAgIHJldHVybiB0b3RhbCArPSBhY3RvcnMuZ2V0KGFLZXkpLndpZHRoICsgKGFjdG9ycy5nZXQoYUtleSkubWFyZ2luIHx8IDApO1xuICAgIH0sIDApO1xuICAgIHRvdGFsV2lkdGggLT0gMiAqIGNvbmYuYm94VGV4dE1hcmdpbjtcbiAgICBpZiAoYm94LndyYXApIHtcbiAgICAgIGJveC5uYW1lID0gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwoYm94Lm5hbWUsIHRvdGFsV2lkdGggLSAyICogY29uZi53cmFwUGFkZGluZywgdGV4dEZvbnQpO1xuICAgIH1cbiAgICBjb25zdCBib3hNc2dEaW1lbnNpb25zID0gdXRpbHNfZGVmYXVsdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhib3gubmFtZSwgdGV4dEZvbnQpO1xuICAgIG1heEJveEhlaWdodCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChib3hNc2dEaW1lbnNpb25zLmhlaWdodCwgbWF4Qm94SGVpZ2h0KTtcbiAgICBjb25zdCBtaW5XaWR0aCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heCh0b3RhbFdpZHRoLCBib3hNc2dEaW1lbnNpb25zLndpZHRoICsgMiAqIGNvbmYud3JhcFBhZGRpbmcpO1xuICAgIGJveC5tYXJnaW4gPSBjb25mLmJveFRleHRNYXJnaW47XG4gICAgaWYgKHRvdGFsV2lkdGggPCBtaW5XaWR0aCkge1xuICAgICAgY29uc3QgbWlzc2luZyA9IChtaW5XaWR0aCAtIHRvdGFsV2lkdGgpIC8gMjtcbiAgICAgIGJveC5tYXJnaW4gKz0gbWlzc2luZztcbiAgICB9XG4gIH0pO1xuICBib3hlcy5mb3JFYWNoKChib3gpID0+IGJveC50ZXh0TWF4SGVpZ2h0ID0gbWF4Qm94SGVpZ2h0KTtcbiAgcmV0dXJuIGNvbW1vbl9kZWZhdWx0LmdldE1heChtYXhIZWlnaHQsIGNvbmYuaGVpZ2h0KTtcbn1cbl9fbmFtZShjYWxjdWxhdGVBY3Rvck1hcmdpbnMsIFwiY2FsY3VsYXRlQWN0b3JNYXJnaW5zXCIpO1xudmFyIGJ1aWxkTm90ZU1vZGVsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihtc2csIGFjdG9ycywgZGlhZ09iaikge1xuICBjb25zdCBmcm9tQWN0b3IgPSBhY3RvcnMuZ2V0KG1zZy5mcm9tKTtcbiAgY29uc3QgdG9BY3RvciA9IGFjdG9ycy5nZXQobXNnLnRvKTtcbiAgY29uc3Qgc3RhcnR4ID0gZnJvbUFjdG9yLng7XG4gIGNvbnN0IHN0b3B4ID0gdG9BY3Rvci54O1xuICBjb25zdCBzaG91bGRXcmFwID0gbXNnLndyYXAgJiYgbXNnLm1lc3NhZ2U7XG4gIGxldCB0ZXh0RGltZW5zaW9ucyA9IGhhc0thdGV4KG1zZy5tZXNzYWdlKSA/IGF3YWl0IGNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIGdldENvbmZpZzIoKSkgOiB1dGlsc19kZWZhdWx0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKFxuICAgIHNob3VsZFdyYXAgPyB1dGlsc19kZWZhdWx0LndyYXBMYWJlbChtc2cubWVzc2FnZSwgY29uZi53aWR0aCwgbm90ZUZvbnQoY29uZikpIDogbXNnLm1lc3NhZ2UsXG4gICAgbm90ZUZvbnQoY29uZilcbiAgKTtcbiAgY29uc3Qgbm90ZU1vZGVsID0ge1xuICAgIHdpZHRoOiBzaG91bGRXcmFwID8gY29uZi53aWR0aCA6IGNvbW1vbl9kZWZhdWx0LmdldE1heChjb25mLndpZHRoLCB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW4pLFxuICAgIGhlaWdodDogMCxcbiAgICBzdGFydHg6IGZyb21BY3Rvci54LFxuICAgIHN0b3B4OiAwLFxuICAgIHN0YXJ0eTogMCxcbiAgICBzdG9weTogMCxcbiAgICBtZXNzYWdlOiBtc2cubWVzc2FnZVxuICB9O1xuICBpZiAobXNnLnBsYWNlbWVudCA9PT0gZGlhZ09iai5kYi5QTEFDRU1FTlQuUklHSFRPRikge1xuICAgIG5vdGVNb2RlbC53aWR0aCA9IHNob3VsZFdyYXAgPyBjb21tb25fZGVmYXVsdC5nZXRNYXgoY29uZi53aWR0aCwgdGV4dERpbWVuc2lvbnMud2lkdGgpIDogY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgZnJvbUFjdG9yLndpZHRoIC8gMiArIHRvQWN0b3Iud2lkdGggLyAyLFxuICAgICAgdGV4dERpbWVuc2lvbnMud2lkdGggKyAyICogY29uZi5ub3RlTWFyZ2luXG4gICAgKTtcbiAgICBub3RlTW9kZWwuc3RhcnR4ID0gc3RhcnR4ICsgKGZyb21BY3Rvci53aWR0aCArIGNvbmYuYWN0b3JNYXJnaW4pIC8gMjtcbiAgfSBlbHNlIGlmIChtc2cucGxhY2VtZW50ID09PSBkaWFnT2JqLmRiLlBMQUNFTUVOVC5MRUZUT0YpIHtcbiAgICBub3RlTW9kZWwud2lkdGggPSBzaG91bGRXcmFwID8gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGgsIHRleHREaW1lbnNpb25zLndpZHRoICsgMiAqIGNvbmYubm90ZU1hcmdpbikgOiBjb21tb25fZGVmYXVsdC5nZXRNYXgoXG4gICAgICBmcm9tQWN0b3Iud2lkdGggLyAyICsgdG9BY3Rvci53aWR0aCAvIDIsXG4gICAgICB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW5cbiAgICApO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggLSBub3RlTW9kZWwud2lkdGggKyAoZnJvbUFjdG9yLndpZHRoIC0gY29uZi5hY3Rvck1hcmdpbikgLyAyO1xuICB9IGVsc2UgaWYgKG1zZy50byA9PT0gbXNnLmZyb20pIHtcbiAgICB0ZXh0RGltZW5zaW9ucyA9IHV0aWxzX2RlZmF1bHQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoXG4gICAgICBzaG91bGRXcmFwID8gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwobXNnLm1lc3NhZ2UsIGNvbW1vbl9kZWZhdWx0LmdldE1heChjb25mLndpZHRoLCBmcm9tQWN0b3Iud2lkdGgpLCBub3RlRm9udChjb25mKSkgOiBtc2cubWVzc2FnZSxcbiAgICAgIG5vdGVGb250KGNvbmYpXG4gICAgKTtcbiAgICBub3RlTW9kZWwud2lkdGggPSBzaG91bGRXcmFwID8gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGNvbmYud2lkdGgsIGZyb21BY3Rvci53aWR0aCkgOiBjb21tb25fZGVmYXVsdC5nZXRNYXgoZnJvbUFjdG9yLndpZHRoLCBjb25mLndpZHRoLCB0ZXh0RGltZW5zaW9ucy53aWR0aCArIDIgKiBjb25mLm5vdGVNYXJnaW4pO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggKyAoZnJvbUFjdG9yLndpZHRoIC0gbm90ZU1vZGVsLndpZHRoKSAvIDI7XG4gIH0gZWxzZSB7XG4gICAgbm90ZU1vZGVsLndpZHRoID0gTWF0aC5hYnMoc3RhcnR4ICsgZnJvbUFjdG9yLndpZHRoIC8gMiAtIChzdG9weCArIHRvQWN0b3Iud2lkdGggLyAyKSkgKyBjb25mLmFjdG9yTWFyZ2luO1xuICAgIG5vdGVNb2RlbC5zdGFydHggPSBzdGFydHggPCBzdG9weCA/IHN0YXJ0eCArIGZyb21BY3Rvci53aWR0aCAvIDIgLSBjb25mLmFjdG9yTWFyZ2luIC8gMiA6IHN0b3B4ICsgdG9BY3Rvci53aWR0aCAvIDIgLSBjb25mLmFjdG9yTWFyZ2luIC8gMjtcbiAgfVxuICBpZiAoc2hvdWxkV3JhcCkge1xuICAgIG5vdGVNb2RlbC5tZXNzYWdlID0gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwoXG4gICAgICBtc2cubWVzc2FnZSxcbiAgICAgIG5vdGVNb2RlbC53aWR0aCAtIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgbm90ZUZvbnQoY29uZilcbiAgICApO1xuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBgTk06WyR7bm90ZU1vZGVsLnN0YXJ0eH0sJHtub3RlTW9kZWwuc3RvcHh9LCR7bm90ZU1vZGVsLnN0YXJ0eX0sJHtub3RlTW9kZWwuc3RvcHl9OiR7bm90ZU1vZGVsLndpZHRofSwke25vdGVNb2RlbC5oZWlnaHR9PSR7bXNnLm1lc3NhZ2V9XWBcbiAgKTtcbiAgcmV0dXJuIG5vdGVNb2RlbDtcbn0sIFwiYnVpbGROb3RlTW9kZWxcIik7XG52YXIgYnVpbGRNZXNzYWdlTW9kZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1zZywgYWN0b3JzLCBkaWFnT2JqKSB7XG4gIGlmICghW1xuICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSURfT1BFTixcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOLFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuU09MSUQsXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURUQsXG4gICAgZGlhZ09iai5kYi5MSU5FVFlQRS5TT0xJRF9DUk9TUyxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUyxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5ULFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuRE9UVEVEX1BPSU5ULFxuICAgIGRpYWdPYmouZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRCxcbiAgICBkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXG4gIF0uaW5jbHVkZXMobXNnLnR5cGUpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IFtmcm9tTGVmdCwgZnJvbVJpZ2h0XSA9IGFjdGl2YXRpb25Cb3VuZHMobXNnLmZyb20sIGFjdG9ycyk7XG4gIGNvbnN0IFt0b0xlZnQsIHRvUmlnaHRdID0gYWN0aXZhdGlvbkJvdW5kcyhtc2cudG8sIGFjdG9ycyk7XG4gIGNvbnN0IGlzQXJyb3dUb1JpZ2h0ID0gZnJvbUxlZnQgPD0gdG9MZWZ0O1xuICBsZXQgc3RhcnR4ID0gaXNBcnJvd1RvUmlnaHQgPyBmcm9tUmlnaHQgOiBmcm9tTGVmdDtcbiAgbGV0IHN0b3B4ID0gaXNBcnJvd1RvUmlnaHQgPyB0b0xlZnQgOiB0b1JpZ2h0O1xuICBjb25zdCBpc0Fycm93VG9BY3RpdmF0aW9uID0gTWF0aC5hYnModG9MZWZ0IC0gdG9SaWdodCkgPiAyO1xuICBjb25zdCBhZGp1c3RWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIGlzQXJyb3dUb1JpZ2h0ID8gLXZhbHVlIDogdmFsdWU7XG4gIH0sIFwiYWRqdXN0VmFsdWVcIik7XG4gIGlmIChtc2cuZnJvbSA9PT0gbXNnLnRvKSB7XG4gICAgc3RvcHggPSBzdGFydHg7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG1zZy5hY3RpdmF0ZSAmJiAhaXNBcnJvd1RvQWN0aXZhdGlvbikge1xuICAgICAgc3RvcHggKz0gYWRqdXN0VmFsdWUoY29uZi5hY3RpdmF0aW9uV2lkdGggLyAyIC0gMSk7XG4gICAgfVxuICAgIGlmICghW2RpYWdPYmouZGIuTElORVRZUEUuU09MSURfT1BFTiwgZGlhZ09iai5kYi5MSU5FVFlQRS5ET1RURURfT1BFTl0uaW5jbHVkZXMobXNnLnR5cGUpKSB7XG4gICAgICBzdG9weCArPSBhZGp1c3RWYWx1ZSgzKTtcbiAgICB9XG4gICAgaWYgKFtkaWFnT2JqLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsIGRpYWdPYmouZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKFxuICAgICAgbXNnLnR5cGVcbiAgICApKSB7XG4gICAgICBzdGFydHggLT0gYWRqdXN0VmFsdWUoMyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGFsbEJvdW5kcyA9IFtmcm9tTGVmdCwgZnJvbVJpZ2h0LCB0b0xlZnQsIHRvUmlnaHRdO1xuICBjb25zdCBib3VuZGVkV2lkdGggPSBNYXRoLmFicyhzdGFydHggLSBzdG9weCk7XG4gIGlmIChtc2cud3JhcCAmJiBtc2cubWVzc2FnZSkge1xuICAgIG1zZy5tZXNzYWdlID0gdXRpbHNfZGVmYXVsdC53cmFwTGFiZWwoXG4gICAgICBtc2cubWVzc2FnZSxcbiAgICAgIGNvbW1vbl9kZWZhdWx0LmdldE1heChib3VuZGVkV2lkdGggKyAyICogY29uZi53cmFwUGFkZGluZywgY29uZi53aWR0aCksXG4gICAgICBtZXNzYWdlRm9udChjb25mKVxuICAgICk7XG4gIH1cbiAgY29uc3QgbXNnRGltcyA9IHV0aWxzX2RlZmF1bHQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobXNnLm1lc3NhZ2UsIG1lc3NhZ2VGb250KGNvbmYpKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgbXNnLndyYXAgPyAwIDogbXNnRGltcy53aWR0aCArIDIgKiBjb25mLndyYXBQYWRkaW5nLFxuICAgICAgYm91bmRlZFdpZHRoICsgMiAqIGNvbmYud3JhcFBhZGRpbmcsXG4gICAgICBjb25mLndpZHRoXG4gICAgKSxcbiAgICBoZWlnaHQ6IDAsXG4gICAgc3RhcnR4LFxuICAgIHN0b3B4LFxuICAgIHN0YXJ0eTogMCxcbiAgICBzdG9weTogMCxcbiAgICBtZXNzYWdlOiBtc2cubWVzc2FnZSxcbiAgICB0eXBlOiBtc2cudHlwZSxcbiAgICB3cmFwOiBtc2cud3JhcCxcbiAgICBmcm9tQm91bmRzOiBNYXRoLm1pbi5hcHBseShudWxsLCBhbGxCb3VuZHMpLFxuICAgIHRvQm91bmRzOiBNYXRoLm1heC5hcHBseShudWxsLCBhbGxCb3VuZHMpXG4gIH07XG59LCBcImJ1aWxkTWVzc2FnZU1vZGVsXCIpO1xudmFyIGNhbGN1bGF0ZUxvb3BCb3VuZHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKG1lc3NhZ2VzLCBhY3RvcnMsIF9tYXhXaWR0aFBlckFjdG9yLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGxvb3BzID0ge307XG4gIGNvbnN0IHN0YWNrID0gW107XG4gIGxldCBjdXJyZW50LCBub3RlTW9kZWwsIG1zZ01vZGVsO1xuICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xuICAgIG1zZy5pZCA9IHV0aWxzX2RlZmF1bHQucmFuZG9tKHsgbGVuZ3RoOiAxMCB9KTtcbiAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuTE9PUF9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuT1BUX1NUQVJUOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDpcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgaWQ6IG1zZy5pZCxcbiAgICAgICAgICBtc2c6IG1zZy5tZXNzYWdlLFxuICAgICAgICAgIGZyb206IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgIHRvOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICB3aWR0aDogMFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUxUX0VMU0U6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0FORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046XG4gICAgICAgIGlmIChtc2cubWVzc2FnZSkge1xuICAgICAgICAgIGN1cnJlbnQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBsb29wc1tjdXJyZW50LmlkXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgbG9vcHNbbXNnLmlkXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgc3RhY2sucHVzaChjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5MT09QX0VORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5BTFRfRU5EOlxuICAgICAgY2FzZSBkaWFnT2JqLmRiLkxJTkVUWVBFLk9QVF9FTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuUEFSX0VORDpcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQlJFQUtfRU5EOlxuICAgICAgICBjdXJyZW50ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGxvb3BzW2N1cnJlbnQuaWRdID0gY3VycmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUNUSVZFX1NUQVJUOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgYWN0b3JSZWN0ID0gYWN0b3JzLmdldChtc2cuZnJvbSA/IG1zZy5mcm9tIDogbXNnLnRvLmFjdG9yKTtcbiAgICAgICAgICBjb25zdCBzdGFja2VkU2l6ZSA9IGFjdG9yQWN0aXZhdGlvbnMobXNnLmZyb20gPyBtc2cuZnJvbSA6IG1zZy50by5hY3RvcikubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IHggPSBhY3RvclJlY3QueCArIGFjdG9yUmVjdC53aWR0aCAvIDIgKyAoc3RhY2tlZFNpemUgLSAxKSAqIGNvbmYuYWN0aXZhdGlvbldpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB0b0FkZCA9IHtcbiAgICAgICAgICAgIHN0YXJ0eDogeCxcbiAgICAgICAgICAgIHN0b3B4OiB4ICsgY29uZi5hY3RpdmF0aW9uV2lkdGgsXG4gICAgICAgICAgICBhY3RvcjogbXNnLmZyb20sXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBib3VuZHMuYWN0aXZhdGlvbnMucHVzaCh0b0FkZCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGRpYWdPYmouZGIuTElORVRZUEUuQUNUSVZFX0VORDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxhc3RBY3RvckFjdGl2YXRpb25JZHggPSBib3VuZHMuYWN0aXZhdGlvbnMubWFwKChhKSA9PiBhLmFjdG9yKS5sYXN0SW5kZXhPZihtc2cuZnJvbSk7XG4gICAgICAgICAgYm91bmRzLmFjdGl2YXRpb25zLnNwbGljZShsYXN0QWN0b3JBY3RpdmF0aW9uSWR4LCAxKS5zcGxpY2UoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGlzTm90ZSA9IG1zZy5wbGFjZW1lbnQgIT09IHZvaWQgMDtcbiAgICBpZiAoaXNOb3RlKSB7XG4gICAgICBub3RlTW9kZWwgPSBhd2FpdCBidWlsZE5vdGVNb2RlbChtc2csIGFjdG9ycywgZGlhZ09iaik7XG4gICAgICBtc2cubm90ZU1vZGVsID0gbm90ZU1vZGVsO1xuICAgICAgc3RhY2suZm9yRWFjaCgoc3RrKSA9PiB7XG4gICAgICAgIGN1cnJlbnQgPSBzdGs7XG4gICAgICAgIGN1cnJlbnQuZnJvbSA9IGNvbW1vbl9kZWZhdWx0LmdldE1pbihjdXJyZW50LmZyb20sIG5vdGVNb2RlbC5zdGFydHgpO1xuICAgICAgICBjdXJyZW50LnRvID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGN1cnJlbnQudG8sIG5vdGVNb2RlbC5zdGFydHggKyBub3RlTW9kZWwud2lkdGgpO1xuICAgICAgICBjdXJyZW50LndpZHRoID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGN1cnJlbnQud2lkdGgsIE1hdGguYWJzKGN1cnJlbnQuZnJvbSAtIGN1cnJlbnQudG8pKSAtIGNvbmYubGFiZWxCb3hXaWR0aDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2dNb2RlbCA9IGJ1aWxkTWVzc2FnZU1vZGVsKG1zZywgYWN0b3JzLCBkaWFnT2JqKTtcbiAgICAgIG1zZy5tc2dNb2RlbCA9IG1zZ01vZGVsO1xuICAgICAgaWYgKG1zZ01vZGVsLnN0YXJ0eCAmJiBtc2dNb2RlbC5zdG9weCAmJiBzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YWNrLmZvckVhY2goKHN0aykgPT4ge1xuICAgICAgICAgIGN1cnJlbnQgPSBzdGs7XG4gICAgICAgICAgaWYgKG1zZ01vZGVsLnN0YXJ0eCA9PT0gbXNnTW9kZWwuc3RvcHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSBhY3RvcnMuZ2V0KG1zZy5mcm9tKTtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gYWN0b3JzLmdldChtc2cudG8pO1xuICAgICAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uX2RlZmF1bHQuZ2V0TWluKFxuICAgICAgICAgICAgICBmcm9tLnggLSBtc2dNb2RlbC53aWR0aCAvIDIsXG4gICAgICAgICAgICAgIGZyb20ueCAtIGZyb20ud2lkdGggLyAyLFxuICAgICAgICAgICAgICBjdXJyZW50LmZyb21cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50LnRvID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KFxuICAgICAgICAgICAgICB0by54ICsgbXNnTW9kZWwud2lkdGggLyAyLFxuICAgICAgICAgICAgICB0by54ICsgZnJvbS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgIGN1cnJlbnQudG9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50LndpZHRoID0gY29tbW9uX2RlZmF1bHQuZ2V0TWF4KGN1cnJlbnQud2lkdGgsIE1hdGguYWJzKGN1cnJlbnQudG8gLSBjdXJyZW50LmZyb20pKSAtIGNvbmYubGFiZWxCb3hXaWR0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudC5mcm9tID0gY29tbW9uX2RlZmF1bHQuZ2V0TWluKG1zZ01vZGVsLnN0YXJ0eCwgY3VycmVudC5mcm9tKTtcbiAgICAgICAgICAgIGN1cnJlbnQudG8gPSBjb21tb25fZGVmYXVsdC5nZXRNYXgobXNnTW9kZWwuc3RvcHgsIGN1cnJlbnQudG8pO1xuICAgICAgICAgICAgY3VycmVudC53aWR0aCA9IGNvbW1vbl9kZWZhdWx0LmdldE1heChjdXJyZW50LndpZHRoLCBtc2dNb2RlbC53aWR0aCkgLSBjb25mLmxhYmVsQm94V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYm91bmRzLmFjdGl2YXRpb25zID0gW107XG4gIGxvZy5kZWJ1ZyhcIkxvb3AgdHlwZSB3aWR0aHM6XCIsIGxvb3BzKTtcbiAgcmV0dXJuIGxvb3BzO1xufSwgXCJjYWxjdWxhdGVMb29wQm91bmRzXCIpO1xudmFyIHNlcXVlbmNlUmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgYm91bmRzLFxuICBkcmF3QWN0b3JzLFxuICBkcmF3QWN0b3JzUG9wdXAsXG4gIHNldENvbmYsXG4gIGRyYXdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9zZXF1ZW5jZS9zZXF1ZW5jZURpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHNlcXVlbmNlRGlhZ3JhbV9kZWZhdWx0LFxuICBkYjogc2VxdWVuY2VEYl9kZWZhdWx0LFxuICByZW5kZXJlcjogc2VxdWVuY2VSZW5kZXJlcl9kZWZhdWx0LFxuICBzdHlsZXM6IHN0eWxlc19kZWZhdWx0LFxuICBpbml0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IHdyYXAgfSkgPT4ge1xuICAgIHNlcXVlbmNlRGJfZGVmYXVsdC5zZXRXcmFwKHdyYXApO1xuICB9LCBcImluaXRcIilcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgbG9nLFxuICBwYXJzZUdlbmVyaWNUeXBlcyxcbiAgc2FuaXRpemVUZXh0LFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL3BhcnNlci9jbGFzc0RpYWdyYW0uamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCAxN10sICRWMSA9IFsxLCAxOF0sICRWMiA9IFsxLCAxOV0sICRWMyA9IFsxLCAzOV0sICRWNCA9IFsxLCA0MF0sICRWNSA9IFsxLCAyNV0sICRWNiA9IFsxLCAyM10sICRWNyA9IFsxLCAyNF0sICRWOCA9IFsxLCAzMV0sICRWOSA9IFsxLCAzMl0sICRWYSA9IFsxLCAzM10sICRWYiA9IFsxLCAzNF0sICRWYyA9IFsxLCAzNV0sICRWZCA9IFsxLCAzNl0sICRWZSA9IFsxLCAyNl0sICRWZiA9IFsxLCAyN10sICRWZyA9IFsxLCAyOF0sICRWaCA9IFsxLCAyOV0sICRWaSA9IFsxLCA0M10sICRWaiA9IFsxLCAzMF0sICRWayA9IFsxLCA0Ml0sICRWbCA9IFsxLCA0NF0sICRWbSA9IFsxLCA0MV0sICRWbiA9IFsxLCA0NV0sICRWbyA9IFsxLCA5XSwgJFZwID0gWzEsIDgsIDldLCAkVnEgPSBbMSwgNTZdLCAkVnIgPSBbMSwgNTddLCAkVnMgPSBbMSwgNThdLCAkVnQgPSBbMSwgNTldLCAkVnUgPSBbMSwgNjBdLCAkVnYgPSBbMSwgNjFdLCAkVncgPSBbMSwgNjJdLCAkVnggPSBbMSwgOCwgOSwgMzldLCAkVnkgPSBbMSwgNzRdLCAkVnogPSBbMSwgOCwgOSwgMTIsIDEzLCAyMSwgMzcsIDM5LCA0MiwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDcwLCA3Ml0sICRWQSA9IFsxLCA4LCA5LCAxMiwgMTMsIDE5LCAyMSwgMzcsIDM5LCA0MiwgNDYsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA3MCwgNzIsIDc0LCA4MCwgOTUsIDk3LCA5OF0sICRWQiA9IFsxMywgNzQsIDgwLCA5NSwgOTcsIDk4XSwgJFZDID0gWzEzLCA2NCwgNjUsIDc0LCA4MCwgOTUsIDk3LCA5OF0sICRWRCA9IFsxMywgNTksIDYwLCA2MSwgNjIsIDYzLCA3NCwgODAsIDk1LCA5NywgOThdLCAkVkUgPSBbMSwgOTNdLCAkVkYgPSBbMSwgMTEwXSwgJFZHID0gWzEsIDEwOF0sICRWSCA9IFsxLCAxMDJdLCAkVkkgPSBbMSwgMTAzXSwgJFZKID0gWzEsIDEwNF0sICRWSyA9IFsxLCAxMDVdLCAkVkwgPSBbMSwgMTA2XSwgJFZNID0gWzEsIDEwN10sICRWTiA9IFsxLCAxMDldLCAkVk8gPSBbMSwgOCwgOSwgMzcsIDM5LCA0Ml0sICRWUCA9IFsxLCA4LCA5LCAyMV0sICRWUSA9IFsxLCA4LCA5LCA3OF0sICRWUiA9IFsxLCA4LCA5LCAyMSwgNzMsIDc0LCA3OCwgODAsIDgxLCA4MiwgODMsIDg0LCA4NV07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIm1lcm1haWREb2NcIjogNCwgXCJzdGF0ZW1lbnRzXCI6IDUsIFwiZ3JhcGhDb25maWdcIjogNiwgXCJDTEFTU19ESUFHUkFNXCI6IDcsIFwiTkVXTElORVwiOiA4LCBcIkVPRlwiOiA5LCBcInN0YXRlbWVudFwiOiAxMCwgXCJjbGFzc0xhYmVsXCI6IDExLCBcIlNRU1wiOiAxMiwgXCJTVFJcIjogMTMsIFwiU1FFXCI6IDE0LCBcIm5hbWVzcGFjZU5hbWVcIjogMTUsIFwiYWxwaGFOdW1Ub2tlblwiOiAxNiwgXCJjbGFzc05hbWVcIjogMTcsIFwiY2xhc3NMaXRlcmFsTmFtZVwiOiAxOCwgXCJHRU5FUklDVFlQRVwiOiAxOSwgXCJyZWxhdGlvblN0YXRlbWVudFwiOiAyMCwgXCJMQUJFTFwiOiAyMSwgXCJuYW1lc3BhY2VTdGF0ZW1lbnRcIjogMjIsIFwiY2xhc3NTdGF0ZW1lbnRcIjogMjMsIFwibWVtYmVyU3RhdGVtZW50XCI6IDI0LCBcImFubm90YXRpb25TdGF0ZW1lbnRcIjogMjUsIFwiY2xpY2tTdGF0ZW1lbnRcIjogMjYsIFwic3R5bGVTdGF0ZW1lbnRcIjogMjcsIFwiY3NzQ2xhc3NTdGF0ZW1lbnRcIjogMjgsIFwibm90ZVN0YXRlbWVudFwiOiAyOSwgXCJkaXJlY3Rpb25cIjogMzAsIFwiYWNjX3RpdGxlXCI6IDMxLCBcImFjY190aXRsZV92YWx1ZVwiOiAzMiwgXCJhY2NfZGVzY3JcIjogMzMsIFwiYWNjX2Rlc2NyX3ZhbHVlXCI6IDM0LCBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjogMzUsIFwibmFtZXNwYWNlSWRlbnRpZmllclwiOiAzNiwgXCJTVFJVQ1RfU1RBUlRcIjogMzcsIFwiY2xhc3NTdGF0ZW1lbnRzXCI6IDM4LCBcIlNUUlVDVF9TVE9QXCI6IDM5LCBcIk5BTUVTUEFDRVwiOiA0MCwgXCJjbGFzc0lkZW50aWZpZXJcIjogNDEsIFwiU1RZTEVfU0VQQVJBVE9SXCI6IDQyLCBcIm1lbWJlcnNcIjogNDMsIFwiQ0xBU1NcIjogNDQsIFwiQU5OT1RBVElPTl9TVEFSVFwiOiA0NSwgXCJBTk5PVEFUSU9OX0VORFwiOiA0NiwgXCJNRU1CRVJcIjogNDcsIFwiU0VQQVJBVE9SXCI6IDQ4LCBcInJlbGF0aW9uXCI6IDQ5LCBcIk5PVEVfRk9SXCI6IDUwLCBcIm5vdGVUZXh0XCI6IDUxLCBcIk5PVEVcIjogNTIsIFwiZGlyZWN0aW9uX3RiXCI6IDUzLCBcImRpcmVjdGlvbl9idFwiOiA1NCwgXCJkaXJlY3Rpb25fcmxcIjogNTUsIFwiZGlyZWN0aW9uX2xyXCI6IDU2LCBcInJlbGF0aW9uVHlwZVwiOiA1NywgXCJsaW5lVHlwZVwiOiA1OCwgXCJBR0dSRUdBVElPTlwiOiA1OSwgXCJFWFRFTlNJT05cIjogNjAsIFwiQ09NUE9TSVRJT05cIjogNjEsIFwiREVQRU5ERU5DWVwiOiA2MiwgXCJMT0xMSVBPUFwiOiA2MywgXCJMSU5FXCI6IDY0LCBcIkRPVFRFRF9MSU5FXCI6IDY1LCBcIkNBTExCQUNLXCI6IDY2LCBcIkxJTktcIjogNjcsIFwiTElOS19UQVJHRVRcIjogNjgsIFwiQ0xJQ0tcIjogNjksIFwiQ0FMTEJBQ0tfTkFNRVwiOiA3MCwgXCJDQUxMQkFDS19BUkdTXCI6IDcxLCBcIkhSRUZcIjogNzIsIFwiU1RZTEVcIjogNzMsIFwiQUxQSEFcIjogNzQsIFwic3R5bGVzT3B0XCI6IDc1LCBcIkNTU0NMQVNTXCI6IDc2LCBcInN0eWxlXCI6IDc3LCBcIkNPTU1BXCI6IDc4LCBcInN0eWxlQ29tcG9uZW50XCI6IDc5LCBcIk5VTVwiOiA4MCwgXCJDT0xPTlwiOiA4MSwgXCJVTklUXCI6IDgyLCBcIlNQQUNFXCI6IDgzLCBcIkJSS1RcIjogODQsIFwiUENUXCI6IDg1LCBcImNvbW1lbnRUb2tlblwiOiA4NiwgXCJ0ZXh0VG9rZW5cIjogODcsIFwiZ3JhcGhDb2RlVG9rZW5zXCI6IDg4LCBcInRleHROb1RhZ3NUb2tlblwiOiA4OSwgXCJUQUdTVEFSVFwiOiA5MCwgXCJUQUdFTkRcIjogOTEsIFwiPT1cIjogOTIsIFwiLS1cIjogOTMsIFwiREVGQVVMVFwiOiA5NCwgXCJNSU5VU1wiOiA5NSwgXCJrZXl3b3Jkc1wiOiA5NiwgXCJVTklDT0RFX1RFWFRcIjogOTcsIFwiQlFVT1RFX1NUUlwiOiA5OCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDc6IFwiQ0xBU1NfRElBR1JBTVwiLCA4OiBcIk5FV0xJTkVcIiwgOTogXCJFT0ZcIiwgMTI6IFwiU1FTXCIsIDEzOiBcIlNUUlwiLCAxNDogXCJTUUVcIiwgMTk6IFwiR0VORVJJQ1RZUEVcIiwgMjE6IFwiTEFCRUxcIiwgMzE6IFwiYWNjX3RpdGxlXCIsIDMyOiBcImFjY190aXRsZV92YWx1ZVwiLCAzMzogXCJhY2NfZGVzY3JcIiwgMzQ6IFwiYWNjX2Rlc2NyX3ZhbHVlXCIsIDM1OiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIiwgMzc6IFwiU1RSVUNUX1NUQVJUXCIsIDM5OiBcIlNUUlVDVF9TVE9QXCIsIDQwOiBcIk5BTUVTUEFDRVwiLCA0MjogXCJTVFlMRV9TRVBBUkFUT1JcIiwgNDQ6IFwiQ0xBU1NcIiwgNDU6IFwiQU5OT1RBVElPTl9TVEFSVFwiLCA0NjogXCJBTk5PVEFUSU9OX0VORFwiLCA0NzogXCJNRU1CRVJcIiwgNDg6IFwiU0VQQVJBVE9SXCIsIDUwOiBcIk5PVEVfRk9SXCIsIDUyOiBcIk5PVEVcIiwgNTM6IFwiZGlyZWN0aW9uX3RiXCIsIDU0OiBcImRpcmVjdGlvbl9idFwiLCA1NTogXCJkaXJlY3Rpb25fcmxcIiwgNTY6IFwiZGlyZWN0aW9uX2xyXCIsIDU5OiBcIkFHR1JFR0FUSU9OXCIsIDYwOiBcIkVYVEVOU0lPTlwiLCA2MTogXCJDT01QT1NJVElPTlwiLCA2MjogXCJERVBFTkRFTkNZXCIsIDYzOiBcIkxPTExJUE9QXCIsIDY0OiBcIkxJTkVcIiwgNjU6IFwiRE9UVEVEX0xJTkVcIiwgNjY6IFwiQ0FMTEJBQ0tcIiwgNjc6IFwiTElOS1wiLCA2ODogXCJMSU5LX1RBUkdFVFwiLCA2OTogXCJDTElDS1wiLCA3MDogXCJDQUxMQkFDS19OQU1FXCIsIDcxOiBcIkNBTExCQUNLX0FSR1NcIiwgNzI6IFwiSFJFRlwiLCA3MzogXCJTVFlMRVwiLCA3NDogXCJBTFBIQVwiLCA3NjogXCJDU1NDTEFTU1wiLCA3ODogXCJDT01NQVwiLCA4MDogXCJOVU1cIiwgODE6IFwiQ09MT05cIiwgODI6IFwiVU5JVFwiLCA4MzogXCJTUEFDRVwiLCA4NDogXCJCUktUXCIsIDg1OiBcIlBDVFwiLCA4ODogXCJncmFwaENvZGVUb2tlbnNcIiwgOTA6IFwiVEFHU1RBUlRcIiwgOTE6IFwiVEFHRU5EXCIsIDkyOiBcIj09XCIsIDkzOiBcIi0tXCIsIDk0OiBcIkRFRkFVTFRcIiwgOTU6IFwiTUlOVVNcIiwgOTY6IFwia2V5d29yZHNcIiwgOTc6IFwiVU5JQ09ERV9URVhUXCIsIDk4OiBcIkJRVU9URV9TVFJcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDFdLCBbNCwgMV0sIFs2LCA0XSwgWzUsIDFdLCBbNSwgMl0sIFs1LCAzXSwgWzExLCAzXSwgWzE1LCAxXSwgWzE1LCAyXSwgWzE3LCAxXSwgWzE3LCAxXSwgWzE3LCAyXSwgWzE3LCAyXSwgWzE3LCAyXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzEwLCAxXSwgWzIyLCA0XSwgWzIyLCA1XSwgWzM2LCAyXSwgWzM4LCAxXSwgWzM4LCAyXSwgWzM4LCAzXSwgWzIzLCAxXSwgWzIzLCAzXSwgWzIzLCA0XSwgWzIzLCA2XSwgWzQxLCAyXSwgWzQxLCAzXSwgWzI1LCA0XSwgWzQzLCAxXSwgWzQzLCAyXSwgWzI0LCAxXSwgWzI0LCAyXSwgWzI0LCAxXSwgWzI0LCAxXSwgWzIwLCAzXSwgWzIwLCA0XSwgWzIwLCA0XSwgWzIwLCA1XSwgWzI5LCAzXSwgWzI5LCAyXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzMwLCAxXSwgWzQ5LCAzXSwgWzQ5LCAyXSwgWzQ5LCAyXSwgWzQ5LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU3LCAxXSwgWzU4LCAxXSwgWzU4LCAxXSwgWzI2LCAzXSwgWzI2LCA0XSwgWzI2LCAzXSwgWzI2LCA0XSwgWzI2LCA0XSwgWzI2LCA1XSwgWzI2LCAzXSwgWzI2LCA0XSwgWzI2LCA0XSwgWzI2LCA1XSwgWzI2LCA0XSwgWzI2LCA1XSwgWzI2LCA1XSwgWzI2LCA2XSwgWzI3LCAzXSwgWzI4LCAzXSwgWzc1LCAxXSwgWzc1LCAzXSwgWzc3LCAxXSwgWzc3LCAyXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzc5LCAxXSwgWzg2LCAxXSwgWzg2LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg3LCAxXSwgWzg5LCAxXSwgWzg5LCAxXSwgWzg5LCAxXSwgWzg5LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE2LCAxXSwgWzE4LCAxXSwgWzUxLCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXSArIFwiflwiICsgJCRbJDBdICsgXCJ+XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb24oJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAkJFskMCAtIDFdLnRpdGxlID0geXkuY2xlYW51cExhYmVsKCQkWyQwXSk7XG4gICAgICAgICAgeXkuYWRkUmVsYXRpb24oJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnRyaW0oKTtcbiAgICAgICAgICB5eS5zZXRBY2NUaXRsZSh0aGlzLiQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI4OlxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB5eS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoJCRbJDAgLSAzXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgeXkuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKCQkWyQwIC0gNF0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICB5eS5hZGROYW1lc3BhY2UoJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgJCRbJDBdLnVuc2hpZnQoJCRbJDAgLSAyXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIHl5LnNldENzc0NsYXNzKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgeXkuYWRkTWVtYmVycygkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB5eS5zZXRDc3NDbGFzcygkJFskMCAtIDVdLCAkJFskMCAtIDNdKTtcbiAgICAgICAgICB5eS5hZGRNZW1iZXJzKCQkWyQwIC0gNV0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICB5eS5hZGRDbGFzcygkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgeXkuYWRkQ2xhc3MoJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0Q2xhc3NMYWJlbCgkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIHl5LmFkZEFubm90YXRpb24oJCRbJDBdLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAkJFskMF0ucHVzaCgkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgeXkuYWRkTWVtYmVyKCQkWyQwIC0gMV0sIHl5LmNsZWFudXBMYWJlbCgkJFskMF0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICB0aGlzLiQgPSB7IFwiaWQxXCI6ICQkWyQwIC0gMl0sIFwiaWQyXCI6ICQkWyQwXSwgcmVsYXRpb246ICQkWyQwIC0gMV0sIHJlbGF0aW9uVGl0bGUxOiBcIm5vbmVcIiwgcmVsYXRpb25UaXRsZTI6IFwibm9uZVwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgdGhpcy4kID0geyBpZDE6ICQkWyQwIC0gM10sIGlkMjogJCRbJDBdLCByZWxhdGlvbjogJCRbJDAgLSAxXSwgcmVsYXRpb25UaXRsZTE6ICQkWyQwIC0gMl0sIHJlbGF0aW9uVGl0bGUyOiBcIm5vbmVcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIHRoaXMuJCA9IHsgaWQxOiAkJFskMCAtIDNdLCBpZDI6ICQkWyQwXSwgcmVsYXRpb246ICQkWyQwIC0gMl0sIHJlbGF0aW9uVGl0bGUxOiBcIm5vbmVcIiwgcmVsYXRpb25UaXRsZTI6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkMTogJCRbJDAgLSA0XSwgaWQyOiAkJFskMF0sIHJlbGF0aW9uOiAkJFskMCAtIDJdLCByZWxhdGlvblRpdGxlMTogJCRbJDAgLSAzXSwgcmVsYXRpb25UaXRsZTI6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICB5eS5hZGROb3RlKCQkWyQwXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTQ6XG4gICAgICAgICAgeXkuYWRkTm90ZSgkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlRCXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU2OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIkJUXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIlJMXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgIHl5LnNldERpcmVjdGlvbihcIkxSXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTE6ICQkWyQwIC0gMl0sIHR5cGUyOiAkJFskMF0sIGxpbmVUeXBlOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogXCJub25lXCIsIHR5cGUyOiAkJFskMF0sIGxpbmVUeXBlOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogJCRbJDAgLSAxXSwgdHlwZTI6IFwibm9uZVwiLCBsaW5lVHlwZTogJCRbJDBdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgdGhpcy4kID0geyB0eXBlMTogXCJub25lXCIsIHR5cGUyOiBcIm5vbmVcIiwgbGluZVR5cGU6ICQkWyQwXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5yZWxhdGlvblR5cGUuRVhURU5TSU9OO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIHRoaXMuJCA9IHl5LnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5yZWxhdGlvblR5cGUuTE9MTElQT1A7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgdGhpcy4kID0geXkubGluZVR5cGUuTElORTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICB0aGlzLiQgPSB5eS5saW5lVHlwZS5ET1RURURfTElORTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMl07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDczOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDJdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA0XTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDNdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDRdO1xuICAgICAgICAgIHl5LnNldENsaWNrRXZlbnQoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDNdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgwOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gM107XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDJdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgxOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gNF07XG4gICAgICAgICAgeXkuc2V0TGluaygkJFskMCAtIDNdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB5eS5zZXRUb29sdGlwKCQkWyQwIC0gM10sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSA1XTtcbiAgICAgICAgICB5eS5zZXRMaW5rKCQkWyQwIC0gNF0sICQkWyQwIC0gMl0sICQkWyQwXSk7XG4gICAgICAgICAgeXkuc2V0VG9vbHRpcCgkJFskMCAtIDRdLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIHl5LnNldENzc1N0eWxlKCQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgeXkuc2V0Q3NzQ2xhc3MoJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDBdXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICAkJFskMCAtIDJdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV0gKyAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IDIsIDU6IDMsIDY6IDQsIDc6IFsxLCA2XSwgMTA6IDUsIDE2OiAzNywgMTc6IDIwLCAxODogMzgsIDIwOiA3LCAyMjogOCwgMjM6IDksIDI0OiAxMCwgMjU6IDExLCAyNjogMTIsIDI3OiAxMywgMjg6IDE0LCAyOTogMTUsIDMwOiAxNiwgMzE6ICRWMCwgMzM6ICRWMSwgMzU6ICRWMiwgMzY6IDIxLCA0MDogJFYzLCA0MTogMjIsIDQ0OiAkVjQsIDQ1OiAkVjUsIDQ3OiAkVjYsIDQ4OiAkVjcsIDUwOiAkVjgsIDUyOiAkVjksIDUzOiAkVmEsIDU0OiAkVmIsIDU1OiAkVmMsIDU2OiAkVmQsIDY2OiAkVmUsIDY3OiAkVmYsIDY5OiAkVmcsIDczOiAkVmgsIDc0OiAkVmksIDc2OiAkVmosIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgM10gfSwgbygkVm8sIFsyLCA1XSwgeyA4OiBbMSwgNDZdIH0pLCB7IDg6IFsxLCA0N10gfSwgbygkVnAsIFsyLCAxNl0sIHsgMjE6IFsxLCA0OF0gfSksIG8oJFZwLCBbMiwgMThdKSwgbygkVnAsIFsyLCAxOV0pLCBvKCRWcCwgWzIsIDIwXSksIG8oJFZwLCBbMiwgMjFdKSwgbygkVnAsIFsyLCAyMl0pLCBvKCRWcCwgWzIsIDIzXSksIG8oJFZwLCBbMiwgMjRdKSwgbygkVnAsIFsyLCAyNV0pLCBvKCRWcCwgWzIsIDI2XSksIHsgMzI6IFsxLCA0OV0gfSwgeyAzNDogWzEsIDUwXSB9LCBvKCRWcCwgWzIsIDI5XSksIG8oJFZwLCBbMiwgNDVdLCB7IDQ5OiA1MSwgNTc6IDU0LCA1ODogNTUsIDEzOiBbMSwgNTJdLCAyMTogWzEsIDUzXSwgNTk6ICRWcSwgNjA6ICRWciwgNjE6ICRWcywgNjI6ICRWdCwgNjM6ICRWdSwgNjQ6ICRWdiwgNjU6ICRWdyB9KSwgeyAzNzogWzEsIDYzXSB9LCBvKCRWeCwgWzIsIDM2XSwgeyAzNzogWzEsIDY1XSwgNDI6IFsxLCA2NF0gfSksIG8oJFZwLCBbMiwgNDddKSwgbygkVnAsIFsyLCA0OF0pLCB7IDE2OiA2NiwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSB9LCB7IDE2OiAzNywgMTc6IDY3LCAxODogMzgsIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgeyAxNjogMzcsIDE3OiA2OCwgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMTY6IDM3LCAxNzogNjksIDE4OiAzOCwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCB7IDc0OiBbMSwgNzBdIH0sIHsgMTM6IFsxLCA3MV0gfSwgeyAxNjogMzcsIDE3OiA3MiwgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMTM6ICRWeSwgNTE6IDczIH0sIG8oJFZwLCBbMiwgNTVdKSwgbygkVnAsIFsyLCA1Nl0pLCBvKCRWcCwgWzIsIDU3XSksIG8oJFZwLCBbMiwgNThdKSwgbygkVnosIFsyLCAxMV0sIHsgMTY6IDM3LCAxODogMzgsIDE3OiA3NSwgMTk6IFsxLCA3Nl0sIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSksIG8oJFZ6LCBbMiwgMTJdLCB7IDE5OiBbMSwgNzddIH0pLCB7IDE1OiA3OCwgMTY6IDc5LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtIH0sIHsgMTY6IDM3LCAxNzogODAsIDE4OiAzOCwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCBvKCRWQSwgWzIsIDExMl0pLCBvKCRWQSwgWzIsIDExM10pLCBvKCRWQSwgWzIsIDExNF0pLCBvKCRWQSwgWzIsIDExNV0pLCBvKFsxLCA4LCA5LCAxMiwgMTMsIDE5LCAyMSwgMzcsIDM5LCA0MiwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDcwLCA3Ml0sIFsyLCAxMTZdKSwgbygkVm8sIFsyLCA2XSwgeyAxMDogNSwgMjA6IDcsIDIyOiA4LCAyMzogOSwgMjQ6IDEwLCAyNTogMTEsIDI2OiAxMiwgMjc6IDEzLCAyODogMTQsIDI5OiAxNSwgMzA6IDE2LCAxNzogMjAsIDM2OiAyMSwgNDE6IDIyLCAxNjogMzcsIDE4OiAzOCwgNTogODEsIDMxOiAkVjAsIDMzOiAkVjEsIDM1OiAkVjIsIDQwOiAkVjMsIDQ0OiAkVjQsIDQ1OiAkVjUsIDQ3OiAkVjYsIDQ4OiAkVjcsIDUwOiAkVjgsIDUyOiAkVjksIDUzOiAkVmEsIDU0OiAkVmIsIDU1OiAkVmMsIDU2OiAkVmQsIDY2OiAkVmUsIDY3OiAkVmYsIDY5OiAkVmcsIDczOiAkVmgsIDc0OiAkVmksIDc2OiAkVmosIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSksIHsgNTogODIsIDEwOiA1LCAxNjogMzcsIDE3OiAyMCwgMTg6IDM4LCAyMDogNywgMjI6IDgsIDIzOiA5LCAyNDogMTAsIDI1OiAxMSwgMjY6IDEyLCAyNzogMTMsIDI4OiAxNCwgMjk6IDE1LCAzMDogMTYsIDMxOiAkVjAsIDMzOiAkVjEsIDM1OiAkVjIsIDM2OiAyMSwgNDA6ICRWMywgNDE6IDIyLCA0NDogJFY0LCA0NTogJFY1LCA0NzogJFY2LCA0ODogJFY3LCA1MDogJFY4LCA1MjogJFY5LCA1MzogJFZhLCA1NDogJFZiLCA1NTogJFZjLCA1NjogJFZkLCA2NjogJFZlLCA2NzogJFZmLCA2OTogJFZnLCA3MzogJFZoLCA3NDogJFZpLCA3NjogJFZqLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIG8oJFZwLCBbMiwgMTddKSwgbygkVnAsIFsyLCAyN10pLCBvKCRWcCwgWzIsIDI4XSksIHsgMTM6IFsxLCA4NF0sIDE2OiAzNywgMTc6IDgzLCAxODogMzgsIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgeyA0OTogODUsIDU3OiA1NCwgNTg6IDU1LCA1OTogJFZxLCA2MDogJFZyLCA2MTogJFZzLCA2MjogJFZ0LCA2MzogJFZ1LCA2NDogJFZ2LCA2NTogJFZ3IH0sIG8oJFZwLCBbMiwgNDZdKSwgeyA1ODogODYsIDY0OiAkVnYsIDY1OiAkVncgfSwgbygkVkIsIFsyLCA2Ml0sIHsgNTc6IDg3LCA1OTogJFZxLCA2MDogJFZyLCA2MTogJFZzLCA2MjogJFZ0LCA2MzogJFZ1IH0pLCBvKCRWQywgWzIsIDYzXSksIG8oJFZDLCBbMiwgNjRdKSwgbygkVkMsIFsyLCA2NV0pLCBvKCRWQywgWzIsIDY2XSksIG8oJFZDLCBbMiwgNjddKSwgbygkVkQsIFsyLCA2OF0pLCBvKCRWRCwgWzIsIDY5XSksIHsgODogWzEsIDg5XSwgMjM6IDkwLCAzODogODgsIDQxOiAyMiwgNDQ6ICRWNCB9LCB7IDE2OiA5MSwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSB9LCB7IDQzOiA5MiwgNDc6ICRWRSB9LCB7IDQ2OiBbMSwgOTRdIH0sIHsgMTM6IFsxLCA5NV0gfSwgeyAxMzogWzEsIDk2XSB9LCB7IDcwOiBbMSwgOTddLCA3MjogWzEsIDk4XSB9LCB7IDIxOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc1OiA5OSwgNzc6IDEwMCwgNzk6IDEwMSwgODA6ICRWSSwgODE6ICRWSiwgODI6ICRWSywgODM6ICRWTCwgODQ6ICRWTSwgODU6ICRWTiB9LCB7IDc0OiBbMSwgMTExXSB9LCB7IDEzOiAkVnksIDUxOiAxMTIgfSwgbygkVnAsIFsyLCA1NF0pLCBvKCRWcCwgWzIsIDExN10pLCBvKCRWeiwgWzIsIDEzXSksIG8oJFZ6LCBbMiwgMTRdKSwgbygkVnosIFsyLCAxNV0pLCB7IDM3OiBbMiwgMzJdIH0sIHsgMTU6IDExMywgMTY6IDc5LCAzNzogWzIsIDldLCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtIH0sIG8oJFZPLCBbMiwgNDBdLCB7IDExOiAxMTQsIDEyOiBbMSwgMTE1XSB9KSwgbygkVm8sIFsyLCA3XSksIHsgOTogWzEsIDExNl0gfSwgbygkVlAsIFsyLCA0OV0pLCB7IDE2OiAzNywgMTc6IDExNywgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIHsgMTM6IFsxLCAxMTldLCAxNjogMzcsIDE3OiAxMTgsIDE4OiAzOCwgNzQ6ICRWaSwgODA6ICRWaywgOTU6ICRWbCwgOTc6ICRWbSwgOTg6ICRWbiB9LCBvKCRWQiwgWzIsIDYxXSwgeyA1NzogMTIwLCA1OTogJFZxLCA2MDogJFZyLCA2MTogJFZzLCA2MjogJFZ0LCA2MzogJFZ1IH0pLCBvKCRWQiwgWzIsIDYwXSksIHsgMzk6IFsxLCAxMjFdIH0sIHsgMjM6IDkwLCAzODogMTIyLCA0MTogMjIsIDQ0OiAkVjQgfSwgeyA4OiBbMSwgMTIzXSwgMzk6IFsyLCAzM10gfSwgbygkVngsIFsyLCAzN10sIHsgMzc6IFsxLCAxMjRdIH0pLCB7IDM5OiBbMSwgMTI1XSB9LCB7IDM5OiBbMiwgNDNdLCA0MzogMTI2LCA0NzogJFZFIH0sIHsgMTY6IDM3LCAxNzogMTI3LCAxODogMzgsIDc0OiAkVmksIDgwOiAkVmssIDk1OiAkVmwsIDk3OiAkVm0sIDk4OiAkVm4gfSwgbygkVnAsIFsyLCA3MF0sIHsgMTM6IFsxLCAxMjhdIH0pLCBvKCRWcCwgWzIsIDcyXSwgeyAxMzogWzEsIDEzMF0sIDY4OiBbMSwgMTI5XSB9KSwgbygkVnAsIFsyLCA3Nl0sIHsgMTM6IFsxLCAxMzFdLCA3MTogWzEsIDEzMl0gfSksIHsgMTM6IFsxLCAxMzNdIH0sIG8oJFZwLCBbMiwgODRdLCB7IDc4OiBbMSwgMTM0XSB9KSwgbygkVlEsIFsyLCA4Nl0sIHsgNzk6IDEzNSwgMjE6ICRWRiwgNzM6ICRWRywgNzQ6ICRWSCwgODA6ICRWSSwgODE6ICRWSiwgODI6ICRWSywgODM6ICRWTCwgODQ6ICRWTSwgODU6ICRWTiB9KSwgbygkVlIsIFsyLCA4OF0pLCBvKCRWUiwgWzIsIDkwXSksIG8oJFZSLCBbMiwgOTFdKSwgbygkVlIsIFsyLCA5Ml0pLCBvKCRWUiwgWzIsIDkzXSksIG8oJFZSLCBbMiwgOTRdKSwgbygkVlIsIFsyLCA5NV0pLCBvKCRWUiwgWzIsIDk2XSksIG8oJFZSLCBbMiwgOTddKSwgbygkVlIsIFsyLCA5OF0pLCBvKCRWcCwgWzIsIDg1XSksIG8oJFZwLCBbMiwgNTNdKSwgeyAzNzogWzIsIDEwXSB9LCBvKCRWTywgWzIsIDQxXSksIHsgMTM6IFsxLCAxMzZdIH0sIHsgMTogWzIsIDRdIH0sIG8oJFZQLCBbMiwgNTFdKSwgbygkVlAsIFsyLCA1MF0pLCB7IDE2OiAzNywgMTc6IDEzNywgMTg6IDM4LCA3NDogJFZpLCA4MDogJFZrLCA5NTogJFZsLCA5NzogJFZtLCA5ODogJFZuIH0sIG8oJFZCLCBbMiwgNTldKSwgbygkVnAsIFsyLCAzMF0pLCB7IDM5OiBbMSwgMTM4XSB9LCB7IDIzOiA5MCwgMzg6IDEzOSwgMzk6IFsyLCAzNF0sIDQxOiAyMiwgNDQ6ICRWNCB9LCB7IDQzOiAxNDAsIDQ3OiAkVkUgfSwgbygkVngsIFsyLCAzOF0pLCB7IDM5OiBbMiwgNDRdIH0sIG8oJFZwLCBbMiwgNDJdKSwgbygkVnAsIFsyLCA3MV0pLCBvKCRWcCwgWzIsIDczXSksIG8oJFZwLCBbMiwgNzRdLCB7IDY4OiBbMSwgMTQxXSB9KSwgbygkVnAsIFsyLCA3N10pLCBvKCRWcCwgWzIsIDc4XSwgeyAxMzogWzEsIDE0Ml0gfSksIG8oJFZwLCBbMiwgODBdLCB7IDEzOiBbMSwgMTQ0XSwgNjg6IFsxLCAxNDNdIH0pLCB7IDIxOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDc3OiAxNDUsIDc5OiAxMDEsIDgwOiAkVkksIDgxOiAkVkosIDgyOiAkVkssIDgzOiAkVkwsIDg0OiAkVk0sIDg1OiAkVk4gfSwgbygkVlIsIFsyLCA4OV0pLCB7IDE0OiBbMSwgMTQ2XSB9LCBvKCRWUCwgWzIsIDUyXSksIG8oJFZwLCBbMiwgMzFdKSwgeyAzOTogWzIsIDM1XSB9LCB7IDM5OiBbMSwgMTQ3XSB9LCBvKCRWcCwgWzIsIDc1XSksIG8oJFZwLCBbMiwgNzldKSwgbygkVnAsIFsyLCA4MV0pLCBvKCRWcCwgWzIsIDgyXSwgeyA2ODogWzEsIDE0OF0gfSksIG8oJFZRLCBbMiwgODddLCB7IDc5OiAxMzUsIDIxOiAkVkYsIDczOiAkVkcsIDc0OiAkVkgsIDgwOiAkVkksIDgxOiAkVkosIDgyOiAkVkssIDgzOiAkVkwsIDg0OiAkVk0sIDg1OiAkVk4gfSksIG8oJFZPLCBbMiwgOF0pLCBvKCRWeCwgWzIsIDM5XSksIG8oJFZwLCBbMiwgODNdKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMjogWzIsIDFdLCAzOiBbMiwgMl0sIDQ6IFsyLCAzXSwgNzg6IFsyLCAzMl0sIDExMzogWzIsIDEwXSwgMTE2OiBbMiwgNF0sIDEyNjogWzIsIDQ0XSwgMTM5OiBbMiwgMzVdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDUzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDU0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiBcIkVER0VfU1RBVEVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiY2FsbGJhY2tfbmFtZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNhbGxiYWNrX2FyZ3NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIDcwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICByZXR1cm4gNzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICAgIHJldHVybiBcIlNUUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcmV0dXJuIDczO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJuYW1lc3BhY2VcIik7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJuYW1lc3BhY2UtYm9keVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgICAgcmV0dXJuIFwiRU9GX0lOX1NUUlVDVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICByZXR1cm4gXCJFREdFX1NUQVRFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsYXNzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMzk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImNsYXNzLWJvZHlcIik7XG4gICAgICAgICAgICByZXR1cm4gMzc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDM5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgIHJldHVybiBcIkVPRl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICByZXR1cm4gXCJFREdFX1NUQVRFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgcmV0dXJuIFwiT1BFTl9JTl9TVFJVQ1RcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgcmV0dXJuIFwiTUVNQkVSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ4OlxuICAgICAgICAgICAgcmV0dXJuIDc2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHJldHVybiA2NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gNjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICAgcmV0dXJuIDY5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICByZXR1cm4gNTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgcmV0dXJuIDQ1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHJldHVybiA0NjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICByZXR1cm4gNzI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgIHJldHVybiBcIkdFTkVSSUNUWVBFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImdlbmVyaWNcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHJldHVybiBcIkJRVU9URV9TVFJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYnFzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHJldHVybiA2ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgICAgcmV0dXJuIDY4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHJldHVybiA2MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgICAgcmV0dXJuIDYyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgIHJldHVybiA2MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICByZXR1cm4gNjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgICAgcmV0dXJuIDU5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICAgIHJldHVybiA2MztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc1OlxuICAgICAgICAgICAgcmV0dXJuIDY1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgICByZXR1cm4gNDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgICAgcmV0dXJuIDk1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICAgIHJldHVybiBcIkRPVFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgIHJldHVybiBcIlBMVVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICByZXR1cm4gODE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgICAgcmV0dXJuIDc4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MzpcbiAgICAgICAgICAgIHJldHVybiA4NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODQ6XG4gICAgICAgICAgICByZXR1cm4gODQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg1OlxuICAgICAgICAgICAgcmV0dXJuIDg1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICAgIHJldHVybiBcIkVRVUFMU1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICAgIHJldHVybiBcIkVRVUFMU1wiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4ODpcbiAgICAgICAgICAgIHJldHVybiA3NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODk6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgIHJldHVybiBcIlBVTkNUVUFUSU9OXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgcmV0dXJuIDgwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MzpcbiAgICAgICAgICAgIHJldHVybiA5NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgICByZXR1cm4gODM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgcmV0dXJuIDgzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICAgIHJldHVybiA5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1JMW15cXG5dKikvLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvLCAvXig/OiUlKD8hXFx7KSpbXlxcbl0qKFxccj9cXG4/KSspLywgL14oPzolJVteXFxuXSooXFxyP1xcbikqKS8sIC9eKD86YWNjVGl0bGVcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS8sIC9eKD86KD8hXFxufHwpKlteXFxuXSopLywgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS8sIC9eKD86W1xcfV0pLywgL14oPzpbXlxcfV0qKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86Y2xhc3NEaWFncmFtLXYyXFxiKS8sIC9eKD86Y2xhc3NEaWFncmFtXFxiKS8sIC9eKD86XFxbXFwqXFxdKS8sIC9eKD86Y2FsbFtcXHNdKykvLCAvXig/OlxcKFtcXHNdKlxcKSkvLCAvXig/OlxcKCkvLCAvXig/OlteKF0qKS8sIC9eKD86XFwpKS8sIC9eKD86W14pXSopLywgL14oPzpbXCJdKS8sIC9eKD86W15cIl0qKS8sIC9eKD86W1wiXSkvLCAvXig/OnN0eWxlXFxiKS8sIC9eKD86bmFtZXNwYWNlXFxiKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86W3tdKS8sIC9eKD86W31dKS8sIC9eKD86JCkvLCAvXig/OlxccyooXFxyP1xcbikrKS8sIC9eKD86XFxzKykvLCAvXig/OlxcW1xcKlxcXSkvLCAvXig/OmNsYXNzXFxiKS8sIC9eKD86XFxzKihcXHI/XFxuKSspLywgL14oPzpcXHMrKS8sIC9eKD86W31dKS8sIC9eKD86W3tdKS8sIC9eKD86W31dKS8sIC9eKD86JCkvLCAvXig/OlxcW1xcKlxcXSkvLCAvXig/Olt7XSkvLCAvXig/OltcXG5dKS8sIC9eKD86W157fVxcbl0qKS8sIC9eKD86Y3NzQ2xhc3NcXGIpLywgL14oPzpjYWxsYmFja1xcYikvLCAvXig/OmxpbmtcXGIpLywgL14oPzpjbGlja1xcYikvLCAvXig/Om5vdGUgZm9yXFxiKS8sIC9eKD86bm90ZVxcYikvLCAvXig/Ojw8KS8sIC9eKD86Pj4pLywgL14oPzpocmVmXFxiKS8sIC9eKD86W35dKS8sIC9eKD86W15+XSopLywgL14oPzp+KS8sIC9eKD86W2BdKS8sIC9eKD86W15gXSspLywgL14oPzpbYF0pLywgL14oPzpfc2VsZlxcYikvLCAvXig/Ol9ibGFua1xcYikvLCAvXig/Ol9wYXJlbnRcXGIpLywgL14oPzpfdG9wXFxiKS8sIC9eKD86XFxzKjxcXHwpLywgL14oPzpcXHMqXFx8PikvLCAvXig/Olxccyo+KS8sIC9eKD86XFxzKjwpLywgL14oPzpcXHMqXFwqKS8sIC9eKD86XFxzKm9cXGIpLywgL14oPzpcXHMqXFwoXFwpKS8sIC9eKD86LS0pLywgL14oPzpcXC5cXC4pLywgL14oPzo6ezF9W146XFxuO10rKS8sIC9eKD86OnszfSkvLCAvXig/Oi0pLywgL14oPzpcXC4pLywgL14oPzpcXCspLywgL14oPzo6KS8sIC9eKD86LCkvLCAvXig/OiMpLywgL14oPzojKS8sIC9eKD86JSkvLCAvXig/Oj0pLywgL14oPzo9KS8sIC9eKD86XFx3KykvLCAvXig/OlxcWykvLCAvXig/OlxcXSkvLCAvXig/OlshXCIjJCUmJyorLC0uYD9cXFxcL10pLywgL14oPzpbMC05XSspLywgL14oPzpbXFx1MDBBQVxcdTAwQjVcXHUwMEJBXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XXxbXFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N118W1xcdTAzN0EtXFx1MDM3RFxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XXxbXFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTI3XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQV18W1xcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRV18W1xcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFdfFtcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwXXxbXFx1MDhBMi1cXHUwOEFDXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5NzddfFtcXHUwOTc5LVxcdTA5N0ZcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJdfFtcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFdfFtcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOV18W1xcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThdfFtcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENdfFtcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNdfFtcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XXxbXFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMF18W1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0RdfFtcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXXxbXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXXxbXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMV18W1xcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFdfFtcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNdfFtcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNl18W1xcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFdfFtcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXXxbXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXXxbXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMF18W1xcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBdfFtcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNdfFtcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFdfFtcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XXxbXFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNdfFtcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZdfFtcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZdfFtcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNdfFtcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRF18W1xcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RF18W1xcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNdfFtcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3Rl18W1xcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOF18W1xcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NF18W1xcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXXxbXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XXxbXFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXXxbXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NdfFtcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRdfFtcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NdfFtcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQl18W1xcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5N1xcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OF18W1xcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgwMVxcdUE4MDMtXFx1QTgwNV18W1xcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJdfFtcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QUEwMC1cXHVBQTI4XXxbXFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBODAtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XXxbXFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XXxbXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXXxbXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXXxbXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNl18W1xcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXXxbXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXXxbXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXXxbXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXSkvLCAvXig/OlxccykvLCAvXig/OlxccykvLCAvXig/OiQpL10sXG4gICAgICBjb25kaXRpb25zOiB7IFwibmFtZXNwYWNlLWJvZHlcIjogeyBcInJ1bGVzXCI6IFsyNiwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm5hbWVzcGFjZVwiOiB7IFwicnVsZXNcIjogWzI2LCAyOCwgMjksIDMwLCAzMSwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsYXNzLWJvZHlcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNsYXNzXCI6IHsgXCJydWxlc1wiOiBbMjYsIDM4LCAzOSwgNDAsIDQxLCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1OSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzExLCAxMiwgMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFs5LCAyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzcsIDI2LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1OSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiY2FsbGJhY2tfYXJnc1wiOiB7IFwicnVsZXNcIjogWzIyLCAyMywgMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJjYWxsYmFja19uYW1lXCI6IHsgXCJydWxlc1wiOiBbMTksIDIwLCAyMSwgMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJocmVmXCI6IHsgXCJydWxlc1wiOiBbMjYsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJ1Y3RcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImdlbmVyaWNcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYnFzdHJpbmdcIjogeyBcInJ1bGVzXCI6IFsyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5Nl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbMjQsIDI1LCAyNiwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTksIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMjYsIDI3LCAyOCwgMzcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU5LCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTZdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgY2xhc3NEaWFncmFtX2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc0RiLnRzXG5pbXBvcnQgeyBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzVHlwZXMudHNcbnZhciB2aXNpYmlsaXR5VmFsdWVzID0gW1wiI1wiLCBcIitcIiwgXCJ+XCIsIFwiLVwiLCBcIlwiXTtcbnZhciBDbGFzc01lbWJlciA9IGNsYXNzIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJDbGFzc01lbWJlclwiKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihpbnB1dCwgbWVtYmVyVHlwZSkge1xuICAgIHRoaXMubWVtYmVyVHlwZSA9IG1lbWJlclR5cGU7XG4gICAgdGhpcy52aXNpYmlsaXR5ID0gXCJcIjtcbiAgICB0aGlzLmNsYXNzaWZpZXIgPSBcIlwiO1xuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVUZXh0KGlucHV0LCBnZXRDb25maWcoKSk7XG4gICAgdGhpcy5wYXJzZU1lbWJlcihzYW5pdGl6ZWRJbnB1dCk7XG4gIH1cbiAgZ2V0RGlzcGxheURldGFpbHMoKSB7XG4gICAgbGV0IGRpc3BsYXlUZXh0ID0gdGhpcy52aXNpYmlsaXR5ICsgcGFyc2VHZW5lcmljVHlwZXModGhpcy5pZCk7XG4gICAgaWYgKHRoaXMubWVtYmVyVHlwZSA9PT0gXCJtZXRob2RcIikge1xuICAgICAgZGlzcGxheVRleHQgKz0gYCgke3BhcnNlR2VuZXJpY1R5cGVzKHRoaXMucGFyYW1ldGVycy50cmltKCkpfSlgO1xuICAgICAgaWYgKHRoaXMucmV0dXJuVHlwZSkge1xuICAgICAgICBkaXNwbGF5VGV4dCArPSBcIiA6IFwiICsgcGFyc2VHZW5lcmljVHlwZXModGhpcy5yZXR1cm5UeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dC50cmltKCk7XG4gICAgY29uc3QgY3NzU3R5bGUgPSB0aGlzLnBhcnNlQ2xhc3NpZmllcigpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5VGV4dCxcbiAgICAgIGNzc1N0eWxlXG4gICAgfTtcbiAgfVxuICBwYXJzZU1lbWJlcihpbnB1dCkge1xuICAgIGxldCBwb3RlbnRpYWxDbGFzc2lmaWVyID0gXCJcIjtcbiAgICBpZiAodGhpcy5tZW1iZXJUeXBlID09PSBcIm1ldGhvZFwiKSB7XG4gICAgICBjb25zdCBtZXRob2RSZWdFeCA9IC8oWyMrfi1dKT8oLispXFwoKC4qKVxcKShbXFxzJCpdKT8oLiopKFskKl0pPy87XG4gICAgICBjb25zdCBtYXRjaCA9IG1ldGhvZFJlZ0V4LmV4ZWMoaW5wdXQpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkVmlzaWJpbGl0eSA9IG1hdGNoWzFdID8gbWF0Y2hbMV0udHJpbSgpIDogXCJcIjtcbiAgICAgICAgaWYgKHZpc2liaWxpdHlWYWx1ZXMuaW5jbHVkZXMoZGV0ZWN0ZWRWaXNpYmlsaXR5KSkge1xuICAgICAgICAgIHRoaXMudmlzaWJpbGl0eSA9IGRldGVjdGVkVmlzaWJpbGl0eTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlkID0gbWF0Y2hbMl0udHJpbSgpO1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSBtYXRjaFszXSA/IG1hdGNoWzNdLnRyaW0oKSA6IFwiXCI7XG4gICAgICAgIHBvdGVudGlhbENsYXNzaWZpZXIgPSBtYXRjaFs0XSA/IG1hdGNoWzRdLnRyaW0oKSA6IFwiXCI7XG4gICAgICAgIHRoaXMucmV0dXJuVHlwZSA9IG1hdGNoWzVdID8gbWF0Y2hbNV0udHJpbSgpIDogXCJcIjtcbiAgICAgICAgaWYgKHBvdGVudGlhbENsYXNzaWZpZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICBjb25zdCBsYXN0Q2hhciA9IHRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIGlmICgvWyQqXS8uZXhlYyhsYXN0Q2hhcikpIHtcbiAgICAgICAgICAgIHBvdGVudGlhbENsYXNzaWZpZXIgPSBsYXN0Q2hhcjtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVHlwZSA9IHRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcoMCwgdGhpcy5yZXR1cm5UeXBlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBpbnB1dC5zdWJzdHJpbmcoMCwgMSk7XG4gICAgICBjb25zdCBsYXN0Q2hhciA9IGlucHV0LnN1YnN0cmluZyhsZW5ndGggLSAxKTtcbiAgICAgIGlmICh2aXNpYmlsaXR5VmFsdWVzLmluY2x1ZGVzKGZpcnN0Q2hhcikpIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gZmlyc3RDaGFyO1xuICAgICAgfVxuICAgICAgaWYgKC9bJCpdLy5leGVjKGxhc3RDaGFyKSkge1xuICAgICAgICBwb3RlbnRpYWxDbGFzc2lmaWVyID0gbGFzdENoYXI7XG4gICAgICB9XG4gICAgICB0aGlzLmlkID0gaW5wdXQuc3Vic3RyaW5nKFxuICAgICAgICB0aGlzLnZpc2liaWxpdHkgPT09IFwiXCIgPyAwIDogMSxcbiAgICAgICAgcG90ZW50aWFsQ2xhc3NpZmllciA9PT0gXCJcIiA/IGxlbmd0aCA6IGxlbmd0aCAtIDFcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NpZmllciA9IHBvdGVudGlhbENsYXNzaWZpZXI7XG4gIH1cbiAgcGFyc2VDbGFzc2lmaWVyKCkge1xuICAgIHN3aXRjaCAodGhpcy5jbGFzc2lmaWVyKSB7XG4gICAgICBjYXNlIFwiKlwiOlxuICAgICAgICByZXR1cm4gXCJmb250LXN0eWxlOml0YWxpYztcIjtcbiAgICAgIGNhc2UgXCIkXCI6XG4gICAgICAgIHJldHVybiBcInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc0RiLnRzXG52YXIgTUVSTUFJRF9ET01fSURfUFJFRklYID0gXCJjbGFzc0lkLVwiO1xudmFyIHJlbGF0aW9ucyA9IFtdO1xudmFyIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIG5vdGVzID0gW107XG52YXIgY2xhc3NDb3VudGVyID0gMDtcbnZhciBuYW1lc3BhY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBuYW1lc3BhY2VDb3VudGVyID0gMDtcbnZhciBmdW5jdGlvbnMgPSBbXTtcbnZhciBzYW5pdGl6ZVRleHQyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIHNwbGl0Q2xhc3NOYW1lQW5kVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX2lkKSB7XG4gIGNvbnN0IGlkID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KF9pZCwgZ2V0Q29uZmlnKCkpO1xuICBsZXQgZ2VuZXJpY1R5cGUgPSBcIlwiO1xuICBsZXQgY2xhc3NOYW1lID0gaWQ7XG4gIGlmIChpZC5pbmRleE9mKFwiflwiKSA+IDApIHtcbiAgICBjb25zdCBzcGxpdCA9IGlkLnNwbGl0KFwiflwiKTtcbiAgICBjbGFzc05hbWUgPSBzYW5pdGl6ZVRleHQyKHNwbGl0WzBdKTtcbiAgICBnZW5lcmljVHlwZSA9IHNhbml0aXplVGV4dDIoc3BsaXRbMV0pO1xuICB9XG4gIHJldHVybiB7IGNsYXNzTmFtZSwgdHlwZTogZ2VuZXJpY1R5cGUgfTtcbn0sIFwic3BsaXRDbGFzc05hbWVBbmRUeXBlXCIpO1xudmFyIHNldENsYXNzTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF9pZCwgbGFiZWwpIHtcbiAgY29uc3QgaWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2lkLCBnZXRDb25maWcoKSk7XG4gIGlmIChsYWJlbCkge1xuICAgIGxhYmVsID0gc2FuaXRpemVUZXh0MihsYWJlbCk7XG4gIH1cbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShpZCk7XG4gIGNsYXNzZXMuZ2V0KGNsYXNzTmFtZSkubGFiZWwgPSBsYWJlbDtcbn0sIFwic2V0Q2xhc3NMYWJlbFwiKTtcbnZhciBhZGRDbGFzcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX2lkKSB7XG4gIGNvbnN0IGlkID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KF9pZCwgZ2V0Q29uZmlnKCkpO1xuICBjb25zdCB7IGNsYXNzTmFtZSwgdHlwZSB9ID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKGlkKTtcbiAgaWYgKGNsYXNzZXMuaGFzKGNsYXNzTmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZSA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChjbGFzc05hbWUsIGdldENvbmZpZygpKTtcbiAgY2xhc3Nlcy5zZXQobmFtZSwge1xuICAgIGlkOiBuYW1lLFxuICAgIHR5cGUsXG4gICAgbGFiZWw6IG5hbWUsXG4gICAgY3NzQ2xhc3NlczogW10sXG4gICAgbWV0aG9kczogW10sXG4gICAgbWVtYmVyczogW10sXG4gICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgIHN0eWxlczogW10sXG4gICAgZG9tSWQ6IE1FUk1BSURfRE9NX0lEX1BSRUZJWCArIG5hbWUgKyBcIi1cIiArIGNsYXNzQ291bnRlclxuICB9KTtcbiAgY2xhc3NDb3VudGVyKys7XG59LCBcImFkZENsYXNzXCIpO1xudmFyIGxvb2tVcERvbUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihfaWQpIHtcbiAgY29uc3QgaWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2lkLCBnZXRDb25maWcoKSk7XG4gIGlmIChjbGFzc2VzLmhhcyhpZCkpIHtcbiAgICByZXR1cm4gY2xhc3Nlcy5nZXQoaWQpLmRvbUlkO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNsYXNzIG5vdCBmb3VuZDogXCIgKyBpZCk7XG59LCBcImxvb2tVcERvbUlkXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJlbGF0aW9ucyA9IFtdO1xuICBjbGFzc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgbm90ZXMgPSBbXTtcbiAgZnVuY3Rpb25zID0gW107XG4gIGZ1bmN0aW9ucy5wdXNoKHNldHVwVG9vbFRpcHMpO1xuICBuYW1lc3BhY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgbmFtZXNwYWNlQ291bnRlciA9IDA7XG4gIGRpcmVjdGlvbiA9IFwiVEJcIjtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZ2V0Q2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBjbGFzc2VzLmdldChpZCk7XG59LCBcImdldENsYXNzXCIpO1xudmFyIGdldENsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY2xhc3Nlcztcbn0sIFwiZ2V0Q2xhc3Nlc1wiKTtcbnZhciBnZXRSZWxhdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcmVsYXRpb25zO1xufSwgXCJnZXRSZWxhdGlvbnNcIik7XG52YXIgZ2V0Tm90ZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbm90ZXM7XG59LCBcImdldE5vdGVzXCIpO1xudmFyIGFkZFJlbGF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihyZWxhdGlvbikge1xuICBsb2cuZGVidWcoXCJBZGRpbmcgcmVsYXRpb246IFwiICsgSlNPTi5zdHJpbmdpZnkocmVsYXRpb24pKTtcbiAgYWRkQ2xhc3MocmVsYXRpb24uaWQxKTtcbiAgYWRkQ2xhc3MocmVsYXRpb24uaWQyKTtcbiAgcmVsYXRpb24uaWQxID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKHJlbGF0aW9uLmlkMSkuY2xhc3NOYW1lO1xuICByZWxhdGlvbi5pZDIgPSBzcGxpdENsYXNzTmFtZUFuZFR5cGUocmVsYXRpb24uaWQyKS5jbGFzc05hbWU7XG4gIHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSwgZ2V0Q29uZmlnKCkpO1xuICByZWxhdGlvbi5yZWxhdGlvblRpdGxlMiA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChyZWxhdGlvbi5yZWxhdGlvblRpdGxlMi50cmltKCksIGdldENvbmZpZygpKTtcbiAgcmVsYXRpb25zLnB1c2gocmVsYXRpb24pO1xufSwgXCJhZGRSZWxhdGlvblwiKTtcbnZhciBhZGRBbm5vdGF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc05hbWUsIGFubm90YXRpb24pIHtcbiAgY29uc3QgdmFsaWRhdGVkQ2xhc3NOYW1lID0gc3BsaXRDbGFzc05hbWVBbmRUeXBlKGNsYXNzTmFtZSkuY2xhc3NOYW1lO1xuICBjbGFzc2VzLmdldCh2YWxpZGF0ZWRDbGFzc05hbWUpLmFubm90YXRpb25zLnB1c2goYW5ub3RhdGlvbik7XG59LCBcImFkZEFubm90YXRpb25cIik7XG52YXIgYWRkTWVtYmVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc05hbWUsIG1lbWJlcikge1xuICBhZGRDbGFzcyhjbGFzc05hbWUpO1xuICBjb25zdCB2YWxpZGF0ZWRDbGFzc05hbWUgPSBzcGxpdENsYXNzTmFtZUFuZFR5cGUoY2xhc3NOYW1lKS5jbGFzc05hbWU7XG4gIGNvbnN0IHRoZUNsYXNzID0gY2xhc3Nlcy5nZXQodmFsaWRhdGVkQ2xhc3NOYW1lKTtcbiAgaWYgKHR5cGVvZiBtZW1iZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjb25zdCBtZW1iZXJTdHJpbmcgPSBtZW1iZXIudHJpbSgpO1xuICAgIGlmIChtZW1iZXJTdHJpbmcuc3RhcnRzV2l0aChcIjw8XCIpICYmIG1lbWJlclN0cmluZy5lbmRzV2l0aChcIj4+XCIpKSB7XG4gICAgICB0aGVDbGFzcy5hbm5vdGF0aW9ucy5wdXNoKHNhbml0aXplVGV4dDIobWVtYmVyU3RyaW5nLnN1YnN0cmluZygyLCBtZW1iZXJTdHJpbmcubGVuZ3RoIC0gMikpKTtcbiAgICB9IGVsc2UgaWYgKG1lbWJlclN0cmluZy5pbmRleE9mKFwiKVwiKSA+IDApIHtcbiAgICAgIHRoZUNsYXNzLm1ldGhvZHMucHVzaChuZXcgQ2xhc3NNZW1iZXIobWVtYmVyU3RyaW5nLCBcIm1ldGhvZFwiKSk7XG4gICAgfSBlbHNlIGlmIChtZW1iZXJTdHJpbmcpIHtcbiAgICAgIHRoZUNsYXNzLm1lbWJlcnMucHVzaChuZXcgQ2xhc3NNZW1iZXIobWVtYmVyU3RyaW5nLCBcImF0dHJpYnV0ZVwiKSk7XG4gICAgfVxuICB9XG59LCBcImFkZE1lbWJlclwiKTtcbnZhciBhZGRNZW1iZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc05hbWUsIG1lbWJlcnMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWVtYmVycykpIHtcbiAgICBtZW1iZXJzLnJldmVyc2UoKTtcbiAgICBtZW1iZXJzLmZvckVhY2goKG1lbWJlcikgPT4gYWRkTWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyKSk7XG4gIH1cbn0sIFwiYWRkTWVtYmVyc1wiKTtcbnZhciBhZGROb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBjbGFzc05hbWUpIHtcbiAgY29uc3Qgbm90ZSA9IHtcbiAgICBpZDogYG5vdGUke25vdGVzLmxlbmd0aH1gLFxuICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgdGV4dFxuICB9O1xuICBub3Rlcy5wdXNoKG5vdGUpO1xufSwgXCJhZGROb3RlXCIpO1xudmFyIGNsZWFudXBMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obGFiZWwpIHtcbiAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoXCI6XCIpKSB7XG4gICAgbGFiZWwgPSBsYWJlbC5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIHNhbml0aXplVGV4dDIobGFiZWwudHJpbSgpKTtcbn0sIFwiY2xlYW51cExhYmVsXCIpO1xudmFyIHNldENzc0NsYXNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIGNsYXNzTmFtZSkge1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oX2lkKSB7XG4gICAgbGV0IGlkID0gX2lkO1xuICAgIGlmICgvXFxkLy5leGVjKF9pZFswXSkpIHtcbiAgICAgIGlkID0gTUVSTUFJRF9ET01fSURfUFJFRklYICsgaWQ7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzTm9kZSA9IGNsYXNzZXMuZ2V0KGlkKTtcbiAgICBpZiAoY2xhc3NOb2RlKSB7XG4gICAgICBjbGFzc05vZGUuY3NzQ2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0Q3NzQ2xhc3NcIik7XG52YXIgc2V0VG9vbHRpcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWRzLCB0b29sdGlwKSB7XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGlmICh0b29sdGlwICE9PSB2b2lkIDApIHtcbiAgICAgIGNsYXNzZXMuZ2V0KGlkKS50b29sdGlwID0gc2FuaXRpemVUZXh0Mih0b29sdGlwKTtcbiAgICB9XG4gIH0pO1xufSwgXCJzZXRUb29sdGlwXCIpO1xudmFyIGdldFRvb2x0aXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBuYW1lc3BhY2UpIHtcbiAgaWYgKG5hbWVzcGFjZSAmJiBuYW1lc3BhY2VzLmhhcyhuYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuIG5hbWVzcGFjZXMuZ2V0KG5hbWVzcGFjZSkuY2xhc3Nlcy5nZXQoaWQpLnRvb2x0aXA7XG4gIH1cbiAgcmV0dXJuIGNsYXNzZXMuZ2V0KGlkKS50b29sdGlwO1xufSwgXCJnZXRUb29sdGlwXCIpO1xudmFyIHNldExpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkcywgbGlua1N0ciwgdGFyZ2V0KSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBpZHMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24oX2lkKSB7XG4gICAgbGV0IGlkID0gX2lkO1xuICAgIGlmICgvXFxkLy5leGVjKF9pZFswXSkpIHtcbiAgICAgIGlkID0gTUVSTUFJRF9ET01fSURfUFJFRklYICsgaWQ7XG4gICAgfVxuICAgIGNvbnN0IHRoZUNsYXNzID0gY2xhc3Nlcy5nZXQoaWQpO1xuICAgIGlmICh0aGVDbGFzcykge1xuICAgICAgdGhlQ2xhc3MubGluayA9IHV0aWxzX2RlZmF1bHQuZm9ybWF0VXJsKGxpbmtTdHIsIGNvbmZpZyk7XG4gICAgICBpZiAoY29uZmlnLnNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICAgIHRoZUNsYXNzLmxpbmtUYXJnZXQgPSBcIl90b3BcIjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGVDbGFzcy5saW5rVGFyZ2V0ID0gc2FuaXRpemVUZXh0Mih0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhlQ2xhc3MubGlua1RhcmdldCA9IFwiX2JsYW5rXCI7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgc2V0Q3NzQ2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0TGlua1wiKTtcbnZhciBzZXRDbGlja0V2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZHMsIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25BcmdzKSB7XG4gIGlkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIHNldENsaWNrRnVuYyhpZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpO1xuICAgIGNsYXNzZXMuZ2V0KGlkKS5oYXZlQ2FsbGJhY2sgPSB0cnVlO1xuICB9KTtcbiAgc2V0Q3NzQ2xhc3MoaWRzLCBcImNsaWNrYWJsZVwiKTtcbn0sIFwic2V0Q2xpY2tFdmVudFwiKTtcbnZhciBzZXRDbGlja0Z1bmMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKF9kb21JZCwgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MpIHtcbiAgY29uc3QgZG9tSWQgPSBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2RvbUlkLCBnZXRDb25maWcoKSk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBpZiAoY29uZmlnLnNlY3VyaXR5TGV2ZWwgIT09IFwibG9vc2VcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25OYW1lID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaWQgPSBkb21JZDtcbiAgaWYgKGNsYXNzZXMuaGFzKGlkKSkge1xuICAgIGNvbnN0IGVsZW1JZCA9IGxvb2tVcERvbUlkKGlkKTtcbiAgICBsZXQgYXJnTGlzdCA9IFtdO1xuICAgIGlmICh0eXBlb2YgZnVuY3Rpb25BcmdzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhcmdMaXN0ID0gZnVuY3Rpb25BcmdzLnNwbGl0KC8sKD89KD86KD86W15cIl0qXCIpezJ9KSpbXlwiXSokKS8pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtID0gYXJnTGlzdFtpXS50cmltKCk7XG4gICAgICAgIGlmIChpdGVtLnN0YXJ0c1dpdGgoJ1wiJykgJiYgaXRlbS5lbmRzV2l0aCgnXCInKSkge1xuICAgICAgICAgIGl0ZW0gPSBpdGVtLnN1YnN0cigxLCBpdGVtLmxlbmd0aCAtIDIpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ0xpc3RbaV0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXJnTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIGFyZ0xpc3QucHVzaChlbGVtSWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbnMucHVzaChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2VsZW1JZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtICE9PSBudWxsKSB7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1dGlsc19kZWZhdWx0LnJ1bkZ1bmMoZnVuY3Rpb25OYW1lLCAuLi5hcmdMaXN0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0sIFwic2V0Q2xpY2tGdW5jXCIpO1xudmFyIGJpbmRGdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgZnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oZnVuKSB7XG4gICAgZnVuKGVsZW1lbnQpO1xuICB9KTtcbn0sIFwiYmluZEZ1bmN0aW9uc1wiKTtcbnZhciBsaW5lVHlwZSA9IHtcbiAgTElORTogMCxcbiAgRE9UVEVEX0xJTkU6IDFcbn07XG52YXIgcmVsYXRpb25UeXBlID0ge1xuICBBR0dSRUdBVElPTjogMCxcbiAgRVhURU5TSU9OOiAxLFxuICBDT01QT1NJVElPTjogMixcbiAgREVQRU5ERU5DWTogMyxcbiAgTE9MTElQT1A6IDRcbn07XG52YXIgc2V0dXBUb29sVGlwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCkge1xuICBsZXQgdG9vbHRpcEVsZW0gPSBzZWxlY3QoXCIubWVybWFpZFRvb2x0aXBcIik7XG4gIGlmICgodG9vbHRpcEVsZW0uX2dyb3VwcyB8fCB0b29sdGlwRWxlbSlbMF1bMF0gPT09IG51bGwpIHtcbiAgICB0b29sdGlwRWxlbSA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1lcm1haWRUb29sdGlwXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgfVxuICBjb25zdCBzdmcgPSBzZWxlY3QoZWxlbWVudCkuc2VsZWN0KFwic3ZnXCIpO1xuICBjb25zdCBub2RlcyA9IHN2Zy5zZWxlY3RBbGwoXCJnLm5vZGVcIik7XG4gIG5vZGVzLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGVsID0gc2VsZWN0KHRoaXMpO1xuICAgIGNvbnN0IHRpdGxlID0gZWwuYXR0cihcInRpdGxlXCIpO1xuICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0b29sdGlwRWxlbS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZShcIm9wYWNpdHlcIiwgXCIuOVwiKTtcbiAgICB0b29sdGlwRWxlbS50ZXh0KGVsLmF0dHIoXCJ0aXRsZVwiKSkuc3R5bGUoXCJsZWZ0XCIsIHdpbmRvdy5zY3JvbGxYICsgcmVjdC5sZWZ0ICsgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMiArIFwicHhcIikuc3R5bGUoXCJ0b3BcIiwgd2luZG93LnNjcm9sbFkgKyByZWN0LnRvcCAtIDE0ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgKyBcInB4XCIpO1xuICAgIHRvb2x0aXBFbGVtLmh0bWwodG9vbHRpcEVsZW0uaHRtbCgpLnJlcGxhY2UoLyZsdDticlxcLyZndDsvZywgXCI8YnIvPlwiKSk7XG4gICAgZWwuY2xhc3NlZChcImhvdmVyXCIsIHRydWUpO1xuICB9KS5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKCkge1xuICAgIHRvb2x0aXBFbGVtLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICBjb25zdCBlbCA9IHNlbGVjdCh0aGlzKTtcbiAgICBlbC5jbGFzc2VkKFwiaG92ZXJcIiwgZmFsc2UpO1xuICB9KTtcbn0sIFwic2V0dXBUb29sVGlwc1wiKTtcbmZ1bmN0aW9ucy5wdXNoKHNldHVwVG9vbFRpcHMpO1xudmFyIGRpcmVjdGlvbiA9IFwiVEJcIjtcbnZhciBnZXREaXJlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGRpcmVjdGlvbiwgXCJnZXREaXJlY3Rpb25cIik7XG52YXIgc2V0RGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGlyKSA9PiB7XG4gIGRpcmVjdGlvbiA9IGRpcjtcbn0sIFwic2V0RGlyZWN0aW9uXCIpO1xudmFyIGFkZE5hbWVzcGFjZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgaWYgKG5hbWVzcGFjZXMuaGFzKGlkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBuYW1lc3BhY2VzLnNldChpZCwge1xuICAgIGlkLFxuICAgIGNsYXNzZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgY2hpbGRyZW46IHt9LFxuICAgIGRvbUlkOiBNRVJNQUlEX0RPTV9JRF9QUkVGSVggKyBpZCArIFwiLVwiICsgbmFtZXNwYWNlQ291bnRlclxuICB9KTtcbiAgbmFtZXNwYWNlQ291bnRlcisrO1xufSwgXCJhZGROYW1lc3BhY2VcIik7XG52YXIgZ2V0TmFtZXNwYWNlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiBuYW1lc3BhY2VzLmdldChuYW1lKTtcbn0sIFwiZ2V0TmFtZXNwYWNlXCIpO1xudmFyIGdldE5hbWVzcGFjZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmFtZXNwYWNlcztcbn0sIFwiZ2V0TmFtZXNwYWNlc1wiKTtcbnZhciBhZGRDbGFzc2VzVG9OYW1lc3BhY2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBjbGFzc05hbWVzKSB7XG4gIGlmICghbmFtZXNwYWNlcy5oYXMoaWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3QgbmFtZSBvZiBjbGFzc05hbWVzKSB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHNwbGl0Q2xhc3NOYW1lQW5kVHlwZShuYW1lKTtcbiAgICBjbGFzc2VzLmdldChjbGFzc05hbWUpLnBhcmVudCA9IGlkO1xuICAgIG5hbWVzcGFjZXMuZ2V0KGlkKS5jbGFzc2VzLnNldChjbGFzc05hbWUsIGNsYXNzZXMuZ2V0KGNsYXNzTmFtZSkpO1xuICB9XG59LCBcImFkZENsYXNzZXNUb05hbWVzcGFjZVwiKTtcbnZhciBzZXRDc3NTdHlsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQsIHN0eWxlcykge1xuICBjb25zdCB0aGlzQ2xhc3MgPSBjbGFzc2VzLmdldChpZCk7XG4gIGlmICghc3R5bGVzIHx8ICF0aGlzQ2xhc3MpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBzIG9mIHN0eWxlcykge1xuICAgIGlmIChzLmluY2x1ZGVzKFwiLFwiKSkge1xuICAgICAgdGhpc0NsYXNzLnN0eWxlcy5wdXNoKC4uLnMuc3BsaXQoXCIsXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc0NsYXNzLnN0eWxlcy5wdXNoKHMpO1xuICAgIH1cbiAgfVxufSwgXCJzZXRDc3NTdHlsZVwiKTtcbnZhciBjbGFzc0RiX2RlZmF1bHQgPSB7XG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkuY2xhc3MsIFwiZ2V0Q29uZmlnXCIpLFxuICBhZGRDbGFzcyxcbiAgYmluZEZ1bmN0aW9ucyxcbiAgY2xlYXI6IGNsZWFyMixcbiAgZ2V0Q2xhc3MsXG4gIGdldENsYXNzZXMsXG4gIGdldE5vdGVzLFxuICBhZGRBbm5vdGF0aW9uLFxuICBhZGROb3RlLFxuICBnZXRSZWxhdGlvbnMsXG4gIGFkZFJlbGF0aW9uLFxuICBnZXREaXJlY3Rpb24sXG4gIHNldERpcmVjdGlvbixcbiAgYWRkTWVtYmVyLFxuICBhZGRNZW1iZXJzLFxuICBjbGVhbnVwTGFiZWwsXG4gIGxpbmVUeXBlLFxuICByZWxhdGlvblR5cGUsXG4gIHNldENsaWNrRXZlbnQsXG4gIHNldENzc0NsYXNzLFxuICBzZXRMaW5rLFxuICBnZXRUb29sdGlwLFxuICBzZXRUb29sdGlwLFxuICBsb29rVXBEb21JZCxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldENsYXNzTGFiZWwsXG4gIGFkZE5hbWVzcGFjZSxcbiAgYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlLFxuICBnZXROYW1lc3BhY2UsXG4gIGdldE5hbWVzcGFjZXMsXG4gIHNldENzc1N0eWxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvY2xhc3Mvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYGcuY2xhc3NHcm91cCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vZGVCb3JkZXIgfHwgb3B0aW9ucy5jbGFzc1RleHR9O1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiAke29wdGlvbnMuZm9udEZhbWlseX07XG4gIGZvbnQtc2l6ZTogMTBweDtcblxuICAudGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxufVxuXG4ubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy5jbGFzc1RleHR9O1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbn1cbi5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLmNsYXNzVGV4dH07XG59XG4uZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHtcbiAgYmFja2dyb3VuZDogJHtvcHRpb25zLm1haW5Ca2d9O1xufVxuXG4uY2xhc3NUaXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG4ubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG5cbi5kaXZpZGVyIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuZy5jbGlja2FibGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmcuY2xhc3NHcm91cCByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbn1cblxuZy5jbGFzc0dyb3VwIGxpbmUge1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uY2xhc3NMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfTtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uY2xhc3NMYWJlbCAubGFiZWwge1xuICBmaWxsOiAke29wdGlvbnMubm9kZUJvcmRlcn07XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuLnJlbGF0aW9uIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xuICBmaWxsOiBub25lO1xufVxuXG4uZGFzaGVkLWxpbmV7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDM7XG59XG5cbi5kb3R0ZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn0gIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5tYWluQmtnfSAhaW1wb3J0YW50O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2xvbGxpcG9wRW5kLCAubG9sbGlwb3Age1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ30gIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfSAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5lZGdlVGVybWluYWxzIHtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBsaW5lLWhlaWdodDogaW5pdGlhbDtcbn1cblxuLmNsYXNzVGl0bGVUZXh0IHtcbiAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbn1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG5leHBvcnQge1xuICBjbGFzc0RpYWdyYW1fZGVmYXVsdCxcbiAgY2xhc3NEYl9kZWZhdWx0LFxuICBzdHlsZXNfZGVmYXVsdFxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgY2xhc3NEYl9kZWZhdWx0LFxuICBjbGFzc0RpYWdyYW1fZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstQkFWT0dLRlcubWpzXCI7XG5pbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjb25maWd1cmVTdmdTaXplLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgbG9nLFxuICBwYXJzZUdlbmVyaWNUeXBlc1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzUmVuZGVyZXIuanNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgbGF5b3V0IGFzIGRhZ3JlTGF5b3V0IH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvY2xhc3Mvc3ZnRHJhdy5qc1xuaW1wb3J0IHsgbGluZSwgY3VydmVCYXNpcyB9IGZyb20gXCJkM1wiO1xudmFyIGVkZ2VDb3VudCA9IDA7XG52YXIgZHJhd0VkZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHBhdGgsIHJlbGF0aW9uLCBjb25mLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGdldFJlbGF0aW9uVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBkaWFnT2JqLmRiLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpcbiAgICAgICAgcmV0dXJuIFwiYWdncmVnYXRpb25cIjtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuRVhURU5TSU9OOlxuICAgICAgICByZXR1cm4gXCJleHRlbnNpb25cIjtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046XG4gICAgICAgIHJldHVybiBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBjYXNlIGRpYWdPYmouZGIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6XG4gICAgICAgIHJldHVybiBcImRlcGVuZGVuY3lcIjtcbiAgICAgIGNhc2UgZGlhZ09iai5kYi5yZWxhdGlvblR5cGUuTE9MTElQT1A6XG4gICAgICAgIHJldHVybiBcImxvbGxpcG9wXCI7XG4gICAgfVxuICB9LCBcImdldFJlbGF0aW9uVHlwZVwiKTtcbiAgcGF0aC5wb2ludHMgPSBwYXRoLnBvaW50cy5maWx0ZXIoKHApID0+ICFOdW1iZXIuaXNOYU4ocC55KSk7XG4gIGNvbnN0IGxpbmVEYXRhID0gcGF0aC5wb2ludHM7XG4gIGNvbnN0IGxpbmVGdW5jdGlvbiA9IGxpbmUoKS54KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC54O1xuICB9KS55KGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gZC55O1xuICB9KS5jdXJ2ZShjdXJ2ZUJhc2lzKTtcbiAgY29uc3Qgc3ZnUGF0aCA9IGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBsaW5lRnVuY3Rpb24obGluZURhdGEpKS5hdHRyKFwiaWRcIiwgXCJlZGdlXCIgKyBlZGdlQ291bnQpLmF0dHIoXCJjbGFzc1wiLCBcInJlbGF0aW9uXCIpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGNvbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSkge1xuICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFwoL2csIFwiXFxcXChcIik7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKS9nLCBcIlxcXFwpXCIpO1xuICB9XG4gIGlmIChyZWxhdGlvbi5yZWxhdGlvbi5saW5lVHlwZSA9PSAxKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFwiY2xhc3NcIiwgXCJyZWxhdGlvbiBkYXNoZWQtbGluZVwiKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb24ubGluZVR5cGUgPT0gMTApIHtcbiAgICBzdmdQYXRoLmF0dHIoXCJjbGFzc1wiLCBcInJlbGF0aW9uIGRvdHRlZC1saW5lXCIpO1xuICB9XG4gIGlmIChyZWxhdGlvbi5yZWxhdGlvbi50eXBlMSAhPT0gXCJub25lXCIpIHtcbiAgICBzdmdQYXRoLmF0dHIoXG4gICAgICBcIm1hcmtlci1zdGFydFwiLFxuICAgICAgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGdldFJlbGF0aW9uVHlwZShyZWxhdGlvbi5yZWxhdGlvbi50eXBlMSkgKyBcIlN0YXJ0KVwiXG4gICAgKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb24udHlwZTIgIT09IFwibm9uZVwiKSB7XG4gICAgc3ZnUGF0aC5hdHRyKFxuICAgICAgXCJtYXJrZXItZW5kXCIsXG4gICAgICBcInVybChcIiArIHVybCArIFwiI1wiICsgZ2V0UmVsYXRpb25UeXBlKHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUyKSArIFwiRW5kKVwiXG4gICAgKTtcbiAgfVxuICBsZXQgeCwgeTtcbiAgY29uc3QgbCA9IHBhdGgucG9pbnRzLmxlbmd0aDtcbiAgbGV0IGxhYmVsUG9zaXRpb24gPSB1dGlsc19kZWZhdWx0LmNhbGNMYWJlbFBvc2l0aW9uKHBhdGgucG9pbnRzKTtcbiAgeCA9IGxhYmVsUG9zaXRpb24ueDtcbiAgeSA9IGxhYmVsUG9zaXRpb24ueTtcbiAgbGV0IHAxX2NhcmRfeCwgcDFfY2FyZF95O1xuICBsZXQgcDJfY2FyZF94LCBwMl9jYXJkX3k7XG4gIGlmIChsICUgMiAhPT0gMCAmJiBsID4gMSkge1xuICAgIGxldCBjYXJkaW5hbGl0eV8xX3BvaW50ID0gdXRpbHNfZGVmYXVsdC5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihcbiAgICAgIHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUxICE9PSBcIm5vbmVcIixcbiAgICAgIHBhdGgucG9pbnRzLFxuICAgICAgcGF0aC5wb2ludHNbMF1cbiAgICApO1xuICAgIGxldCBjYXJkaW5hbGl0eV8yX3BvaW50ID0gdXRpbHNfZGVmYXVsdC5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbihcbiAgICAgIHJlbGF0aW9uLnJlbGF0aW9uLnR5cGUyICE9PSBcIm5vbmVcIixcbiAgICAgIHBhdGgucG9pbnRzLFxuICAgICAgcGF0aC5wb2ludHNbbCAtIDFdXG4gICAgKTtcbiAgICBsb2cuZGVidWcoXCJjYXJkaW5hbGl0eV8xX3BvaW50IFwiICsgSlNPTi5zdHJpbmdpZnkoY2FyZGluYWxpdHlfMV9wb2ludCkpO1xuICAgIGxvZy5kZWJ1ZyhcImNhcmRpbmFsaXR5XzJfcG9pbnQgXCIgKyBKU09OLnN0cmluZ2lmeShjYXJkaW5hbGl0eV8yX3BvaW50KSk7XG4gICAgcDFfY2FyZF94ID0gY2FyZGluYWxpdHlfMV9wb2ludC54O1xuICAgIHAxX2NhcmRfeSA9IGNhcmRpbmFsaXR5XzFfcG9pbnQueTtcbiAgICBwMl9jYXJkX3ggPSBjYXJkaW5hbGl0eV8yX3BvaW50Lng7XG4gICAgcDJfY2FyZF95ID0gY2FyZGluYWxpdHlfMl9wb2ludC55O1xuICB9XG4gIGlmIChyZWxhdGlvbi50aXRsZSAhPT0gdm9pZCAwKSB7XG4gICAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbGFzc0xhYmVsXCIpO1xuICAgIGNvbnN0IGxhYmVsID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJmaWxsXCIsIFwicmVkXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KHJlbGF0aW9uLnRpdGxlKTtcbiAgICB3aW5kb3cubGFiZWwgPSBsYWJlbDtcbiAgICBjb25zdCBib3VuZHMgPSBsYWJlbC5ub2RlKCkuZ2V0QkJveCgpO1xuICAgIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJib3hcIikuYXR0cihcInhcIiwgYm91bmRzLnggLSBjb25mLnBhZGRpbmcgLyAyKS5hdHRyKFwieVwiLCBib3VuZHMueSAtIGNvbmYucGFkZGluZyAvIDIpLmF0dHIoXCJ3aWR0aFwiLCBib3VuZHMud2lkdGggKyBjb25mLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgYm91bmRzLmhlaWdodCArIGNvbmYucGFkZGluZyk7XG4gIH1cbiAgbG9nLmluZm8oXCJSZW5kZXJpbmcgcmVsYXRpb24gXCIgKyBKU09OLnN0cmluZ2lmeShyZWxhdGlvbikpO1xuICBpZiAocmVsYXRpb24ucmVsYXRpb25UaXRsZTEgIT09IHZvaWQgMCAmJiByZWxhdGlvbi5yZWxhdGlvblRpdGxlMSAhPT0gXCJub25lXCIpIHtcbiAgICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNhcmRpbmFsaXR5XCIpO1xuICAgIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0eXBlMVwiKS5hdHRyKFwieFwiLCBwMV9jYXJkX3gpLmF0dHIoXCJ5XCIsIHAxX2NhcmRfeSkuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiNlwiKS50ZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUxKTtcbiAgfVxuICBpZiAocmVsYXRpb24ucmVsYXRpb25UaXRsZTIgIT09IHZvaWQgMCAmJiByZWxhdGlvbi5yZWxhdGlvblRpdGxlMiAhPT0gXCJub25lXCIpIHtcbiAgICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNhcmRpbmFsaXR5XCIpO1xuICAgIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0eXBlMlwiKS5hdHRyKFwieFwiLCBwMl9jYXJkX3gpLmF0dHIoXCJ5XCIsIHAyX2NhcmRfeSkuYXR0cihcImZpbGxcIiwgXCJibGFja1wiKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiNlwiKS50ZXh0KHJlbGF0aW9uLnJlbGF0aW9uVGl0bGUyKTtcbiAgfVxuICBlZGdlQ291bnQrKztcbn0sIFwiZHJhd0VkZ2VcIik7XG52YXIgZHJhd0NsYXNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBjbGFzc0RlZiwgY29uZiwgZGlhZ09iaikge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgY2xhc3MgXCIsIGNsYXNzRGVmLCBjb25mKTtcbiAgY29uc3QgaWQgPSBjbGFzc0RlZi5pZDtcbiAgY29uc3QgY2xhc3NJbmZvID0ge1xuICAgIGlkLFxuICAgIGxhYmVsOiBjbGFzc0RlZi5pZCxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfTtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiaWRcIiwgZGlhZ09iai5kYi5sb29rVXBEb21JZChpZCkpLmF0dHIoXCJjbGFzc1wiLCBcImNsYXNzR3JvdXBcIik7XG4gIGxldCB0aXRsZTtcbiAgaWYgKGNsYXNzRGVmLmxpbmspIHtcbiAgICB0aXRsZSA9IGcuYXBwZW5kKFwic3ZnOmFcIikuYXR0cihcInhsaW5rOmhyZWZcIiwgY2xhc3NEZWYubGluaykuYXR0cihcInRhcmdldFwiLCBjbGFzc0RlZi5saW5rVGFyZ2V0KS5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ5XCIsIGNvbmYudGV4dEhlaWdodCArIGNvbmYucGFkZGluZykuYXR0cihcInhcIiwgMCk7XG4gIH0gZWxzZSB7XG4gICAgdGl0bGUgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nKS5hdHRyKFwieFwiLCAwKTtcbiAgfVxuICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gIGNsYXNzRGVmLmFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24obWVtYmVyKSB7XG4gICAgY29uc3QgdGl0bGVUZXh0MiA9IHRpdGxlLmFwcGVuZChcInRzcGFuXCIpLnRleHQoXCJcXHhBQlwiICsgbWVtYmVyICsgXCJcXHhCQlwiKTtcbiAgICBpZiAoIWlzRmlyc3QpIHtcbiAgICAgIHRpdGxlVGV4dDIuYXR0cihcImR5XCIsIGNvbmYudGV4dEhlaWdodCk7XG4gICAgfVxuICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgfSk7XG4gIGxldCBjbGFzc1RpdGxlU3RyaW5nID0gZ2V0Q2xhc3NUaXRsZVN0cmluZyhjbGFzc0RlZik7XG4gIGNvbnN0IGNsYXNzVGl0bGUgPSB0aXRsZS5hcHBlbmQoXCJ0c3BhblwiKS50ZXh0KGNsYXNzVGl0bGVTdHJpbmcpLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlXCIpO1xuICBpZiAoIWlzRmlyc3QpIHtcbiAgICBjbGFzc1RpdGxlLmF0dHIoXCJkeVwiLCBjb25mLnRleHRIZWlnaHQpO1xuICB9XG4gIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGl0bGUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7XG4gIGxldCBtZW1iZXJzTGluZTtcbiAgbGV0IG1lbWJlcnNCb3g7XG4gIGxldCBtZXRob2RzTGluZTtcbiAgaWYgKGNsYXNzRGVmLm1lbWJlcnMubGVuZ3RoID4gMCkge1xuICAgIG1lbWJlcnNMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gLyAyKS5hdHRyKFwieTJcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gLyAyKTtcbiAgICBjb25zdCBtZW1iZXJzID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIGNvbmYucGFkZGluZykuYXR0cihcInlcIiwgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gKyBjb25mLnRleHRIZWlnaHQpLmF0dHIoXCJmaWxsXCIsIFwid2hpdGVcIikuYXR0cihcImNsYXNzXCIsIFwiY2xhc3NUZXh0XCIpO1xuICAgIGlzRmlyc3QgPSB0cnVlO1xuICAgIGNsYXNzRGVmLm1lbWJlcnMuZm9yRWFjaChmdW5jdGlvbihtZW1iZXIpIHtcbiAgICAgIGFkZFRzcGFuKG1lbWJlcnMsIG1lbWJlciwgaXNGaXJzdCwgY29uZik7XG4gICAgICBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgfSk7XG4gICAgbWVtYmVyc0JveCA9IG1lbWJlcnMubm9kZSgpLmdldEJCb3goKTtcbiAgfVxuICBpZiAoY2xhc3NEZWYubWV0aG9kcy5sZW5ndGggPiAwKSB7XG4gICAgbWV0aG9kc0xpbmUgPSBnLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIDApLmF0dHIoXCJ5MVwiLCBjb25mLnBhZGRpbmcgKyB0aXRsZUhlaWdodCArIGNvbmYuZGl2aWRlck1hcmdpbiArIG1lbWJlcnNCb3guaGVpZ2h0KS5hdHRyKFwieTJcIiwgY29uZi5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBjb25mLmRpdmlkZXJNYXJnaW4gKyBtZW1iZXJzQm94LmhlaWdodCk7XG4gICAgY29uc3QgbWV0aG9kcyA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBjb25mLnBhZGRpbmcpLmF0dHIoXCJ5XCIsIHRpdGxlSGVpZ2h0ICsgMiAqIGNvbmYuZGl2aWRlck1hcmdpbiArIG1lbWJlcnNCb3guaGVpZ2h0ICsgY29uZi50ZXh0SGVpZ2h0KS5hdHRyKFwiZmlsbFwiLCBcIndoaXRlXCIpLmF0dHIoXCJjbGFzc1wiLCBcImNsYXNzVGV4dFwiKTtcbiAgICBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICBjbGFzc0RlZi5tZXRob2RzLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBhZGRUc3BhbihtZXRob2RzLCBtZXRob2QsIGlzRmlyc3QsIGNvbmYpO1xuICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGNsYXNzQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICB2YXIgY3NzQ2xhc3NTdHIgPSBcIiBcIjtcbiAgaWYgKGNsYXNzRGVmLmNzc0NsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgIGNzc0NsYXNzU3RyID0gY3NzQ2xhc3NTdHIgKyBjbGFzc0RlZi5jc3NDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCkuYXR0cihcIndpZHRoXCIsIGNsYXNzQm94LndpZHRoICsgMiAqIGNvbmYucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBjbGFzc0JveC5oZWlnaHQgKyBjb25mLnBhZGRpbmcgKyAwLjUgKiBjb25mLmRpdmlkZXJNYXJnaW4pLmF0dHIoXCJjbGFzc1wiLCBjc3NDbGFzc1N0cik7XG4gIGNvbnN0IHJlY3RXaWR0aCA9IHJlY3Qubm9kZSgpLmdldEJCb3goKS53aWR0aDtcbiAgdGl0bGUubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih4KSB7XG4gICAgeC5zZXRBdHRyaWJ1dGUoXCJ4XCIsIChyZWN0V2lkdGggLSB4LmdldEJCb3goKS53aWR0aCkgLyAyKTtcbiAgfSk7XG4gIGlmIChjbGFzc0RlZi50b29sdGlwKSB7XG4gICAgdGl0bGUuaW5zZXJ0KFwidGl0bGVcIikudGV4dChjbGFzc0RlZi50b29sdGlwKTtcbiAgfVxuICBpZiAobWVtYmVyc0xpbmUpIHtcbiAgICBtZW1iZXJzTGluZS5hdHRyKFwieDJcIiwgcmVjdFdpZHRoKTtcbiAgfVxuICBpZiAobWV0aG9kc0xpbmUpIHtcbiAgICBtZXRob2RzTGluZS5hdHRyKFwieDJcIiwgcmVjdFdpZHRoKTtcbiAgfVxuICBjbGFzc0luZm8ud2lkdGggPSByZWN0V2lkdGg7XG4gIGNsYXNzSW5mby5oZWlnaHQgPSBjbGFzc0JveC5oZWlnaHQgKyBjb25mLnBhZGRpbmcgKyAwLjUgKiBjb25mLmRpdmlkZXJNYXJnaW47XG4gIHJldHVybiBjbGFzc0luZm87XG59LCBcImRyYXdDbGFzc1wiKTtcbnZhciBnZXRDbGFzc1RpdGxlU3RyaW5nID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjbGFzc0RlZikge1xuICBsZXQgY2xhc3NUaXRsZVN0cmluZyA9IGNsYXNzRGVmLmlkO1xuICBpZiAoY2xhc3NEZWYudHlwZSkge1xuICAgIGNsYXNzVGl0bGVTdHJpbmcgKz0gXCI8XCIgKyBwYXJzZUdlbmVyaWNUeXBlcyhjbGFzc0RlZi50eXBlKSArIFwiPlwiO1xuICB9XG4gIHJldHVybiBjbGFzc1RpdGxlU3RyaW5nO1xufSwgXCJnZXRDbGFzc1RpdGxlU3RyaW5nXCIpO1xudmFyIGRyYXdOb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBub3RlLCBjb25mLCBfZGlhZ09iaikge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgbm90ZSBcIiwgbm90ZSwgY29uZik7XG4gIGNvbnN0IGlkID0gbm90ZS5pZDtcbiAgY29uc3Qgbm90ZUluZm8gPSB7XG4gICAgaWQsXG4gICAgdGV4dDogbm90ZS50ZXh0LFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9O1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJpZFwiLCBpZCkuYXR0cihcImNsYXNzXCIsIFwiY2xhc3NHcm91cFwiKTtcbiAgbGV0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInlcIiwgY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nKS5hdHRyKFwieFwiLCAwKTtcbiAgY29uc3QgbGluZXMgPSBKU09OLnBhcnNlKGBcIiR7bm90ZS50ZXh0fVwiYCkuc3BsaXQoXCJcXG5cIik7XG4gIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZTIpIHtcbiAgICBsb2cuZGVidWcoYEFkZGluZyBsaW5lOiAke2xpbmUyfWApO1xuICAgIHRleHQuYXBwZW5kKFwidHNwYW5cIikudGV4dChsaW5lMikuYXR0cihcImNsYXNzXCIsIFwidGl0bGVcIikuYXR0cihcImR5XCIsIGNvbmYudGV4dEhlaWdodCk7XG4gIH0pO1xuICBjb25zdCBub3RlQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCByZWN0ID0gZy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApLmF0dHIoXCJ3aWR0aFwiLCBub3RlQm94LndpZHRoICsgMiAqIGNvbmYucGFkZGluZykuYXR0cihcbiAgICBcImhlaWdodFwiLFxuICAgIG5vdGVCb3guaGVpZ2h0ICsgbGluZXMubGVuZ3RoICogY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nICsgMC41ICogY29uZi5kaXZpZGVyTWFyZ2luXG4gICk7XG4gIGNvbnN0IHJlY3RXaWR0aCA9IHJlY3Qubm9kZSgpLmdldEJCb3goKS53aWR0aDtcbiAgdGV4dC5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcbiAgICB4LnNldEF0dHJpYnV0ZShcInhcIiwgKHJlY3RXaWR0aCAtIHguZ2V0QkJveCgpLndpZHRoKSAvIDIpO1xuICB9KTtcbiAgbm90ZUluZm8ud2lkdGggPSByZWN0V2lkdGg7XG4gIG5vdGVJbmZvLmhlaWdodCA9IG5vdGVCb3guaGVpZ2h0ICsgbGluZXMubGVuZ3RoICogY29uZi50ZXh0SGVpZ2h0ICsgY29uZi5wYWRkaW5nICsgMC41ICogY29uZi5kaXZpZGVyTWFyZ2luO1xuICByZXR1cm4gbm90ZUluZm87XG59LCBcImRyYXdOb3RlXCIpO1xudmFyIGFkZFRzcGFuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0RWwsIG1lbWJlciwgaXNGaXJzdCwgY29uZikge1xuICBjb25zdCB7IGRpc3BsYXlUZXh0LCBjc3NTdHlsZSB9ID0gbWVtYmVyLmdldERpc3BsYXlEZXRhaWxzKCk7XG4gIGNvbnN0IHRTcGFuID0gdGV4dEVsLmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIGNvbmYucGFkZGluZykudGV4dChkaXNwbGF5VGV4dCk7XG4gIGlmIChjc3NTdHlsZSAhPT0gXCJcIikge1xuICAgIHRTcGFuLmF0dHIoXCJzdHlsZVwiLCBtZW1iZXIuY3NzU3R5bGUpO1xuICB9XG4gIGlmICghaXNGaXJzdCkge1xuICAgIHRTcGFuLmF0dHIoXCJkeVwiLCBjb25mLnRleHRIZWlnaHQpO1xuICB9XG59LCBcImFkZFRzcGFuXCIpO1xudmFyIHN2Z0RyYXdfZGVmYXVsdCA9IHtcbiAgZ2V0Q2xhc3NUaXRsZVN0cmluZyxcbiAgZHJhd0NsYXNzLFxuICBkcmF3RWRnZSxcbiAgZHJhd05vdGVcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc1JlbmRlcmVyLmpzXG52YXIgaWRDYWNoZSA9IHt9O1xudmFyIHBhZGRpbmcgPSAyMDtcbnZhciBnZXRHcmFwaElkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihsYWJlbCkge1xuICBjb25zdCBmb3VuZEVudHJ5ID0gT2JqZWN0LmVudHJpZXMoaWRDYWNoZSkuZmluZCgoZW50cnkpID0+IGVudHJ5WzFdLmxhYmVsID09PSBsYWJlbCk7XG4gIGlmIChmb3VuZEVudHJ5KSB7XG4gICAgcmV0dXJuIGZvdW5kRW50cnlbMF07XG4gIH1cbn0sIFwiZ2V0R3JhcGhJZFwiKTtcbnZhciBpbnNlcnRNYXJrZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZXh0ZW5zaW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwiZXh0ZW5zaW9uXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImV4dGVuc2lvbkVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwiZXh0ZW5zaW9uXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBcImNvbXBvc2l0aW9uRW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjgpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYWdncmVnYXRpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJleHRlbnNpb25cIikuYXR0cihcInJlZlhcIiwgMCkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYWdncmVnYXRpb25FbmRcIikuYXR0cihcInJlZlhcIiwgMTkpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJkZXBlbmRlbmN5U3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwiZXh0ZW5zaW9uXCIpLmF0dHIoXCJyZWZYXCIsIDApLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFpcIik7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZGVwZW5kZW5jeUVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZiA9IGdldENvbmZpZygpLmNsYXNzO1xuICBpZENhY2hlID0ge307XG4gIGxvZy5pbmZvKFwiUmVuZGVyaW5nIGRpYWdyYW0gXCIgKyB0ZXh0KTtcbiAgY29uc3Qgc2VjdXJpdHlMZXZlbCA9IGdldENvbmZpZygpLnNlY3VyaXR5TGV2ZWw7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBzZWxlY3QoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IGRpYWdyYW0yID0gcm9vdC5zZWxlY3QoYFtpZD0nJHtpZH0nXWApO1xuICBpbnNlcnRNYXJrZXJzKGRpYWdyYW0yKTtcbiAgY29uc3QgZyA9IG5ldyBncmFwaGxpYi5HcmFwaCh7XG4gICAgbXVsdGlncmFwaDogdHJ1ZVxuICB9KTtcbiAgZy5zZXRHcmFwaCh7XG4gICAgaXNNdWx0aUdyYXBoOiB0cnVlXG4gIH0pO1xuICBnLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xuICBjb25zdCBrZXlzID0gWy4uLmNsYXNzZXMua2V5cygpXTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGNsYXNzRGVmID0gY2xhc3Nlcy5nZXQoa2V5KTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhd19kZWZhdWx0LmRyYXdDbGFzcyhkaWFncmFtMiwgY2xhc3NEZWYsIGNvbmYsIGRpYWdPYmopO1xuICAgIGlkQ2FjaGVbbm9kZS5pZF0gPSBub2RlO1xuICAgIGcuc2V0Tm9kZShub2RlLmlkLCBub2RlKTtcbiAgICBsb2cuaW5mbyhcIk9yZyBoZWlnaHQ6IFwiICsgbm9kZS5oZWlnaHQpO1xuICB9XG4gIGNvbnN0IHJlbGF0aW9ucyA9IGRpYWdPYmouZGIuZ2V0UmVsYXRpb25zKCk7XG4gIHJlbGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uKSB7XG4gICAgbG9nLmluZm8oXG4gICAgICAvLyBjc3BlbGw6aWdub3JlIHRqb2hvXG4gICAgICBcInRqb2hvXCIgKyBnZXRHcmFwaElkKHJlbGF0aW9uLmlkMSkgKyBnZXRHcmFwaElkKHJlbGF0aW9uLmlkMikgKyBKU09OLnN0cmluZ2lmeShyZWxhdGlvbilcbiAgICApO1xuICAgIGcuc2V0RWRnZShcbiAgICAgIGdldEdyYXBoSWQocmVsYXRpb24uaWQxKSxcbiAgICAgIGdldEdyYXBoSWQocmVsYXRpb24uaWQyKSxcbiAgICAgIHtcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0sXG4gICAgICByZWxhdGlvbi50aXRsZSB8fCBcIkRFRkFVTFRcIlxuICAgICk7XG4gIH0pO1xuICBjb25zdCBub3RlcyA9IGRpYWdPYmouZGIuZ2V0Tm90ZXMoKTtcbiAgbm90ZXMuZm9yRWFjaChmdW5jdGlvbihub3RlKSB7XG4gICAgbG9nLmRlYnVnKGBBZGRpbmcgbm90ZTogJHtKU09OLnN0cmluZ2lmeShub3RlKX1gKTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhd19kZWZhdWx0LmRyYXdOb3RlKGRpYWdyYW0yLCBub3RlLCBjb25mLCBkaWFnT2JqKTtcbiAgICBpZENhY2hlW25vZGUuaWRdID0gbm9kZTtcbiAgICBnLnNldE5vZGUobm9kZS5pZCwgbm9kZSk7XG4gICAgaWYgKG5vdGUuY2xhc3MgJiYgY2xhc3Nlcy5oYXMobm90ZS5jbGFzcykpIHtcbiAgICAgIGcuc2V0RWRnZShcbiAgICAgICAgbm90ZS5pZCxcbiAgICAgICAgZ2V0R3JhcGhJZChub3RlLmNsYXNzKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGF0aW9uOiB7XG4gICAgICAgICAgICBpZDE6IG5vdGUuaWQsXG4gICAgICAgICAgICBpZDI6IG5vdGUuY2xhc3MsXG4gICAgICAgICAgICByZWxhdGlvbjoge1xuICAgICAgICAgICAgICB0eXBlMTogXCJub25lXCIsXG4gICAgICAgICAgICAgIHR5cGUyOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgbGluZVR5cGU6IDEwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkRFRkFVTFRcIlxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuICBkYWdyZUxheW91dChnKTtcbiAgZy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odikge1xuICAgIGlmICh2ICE9PSB2b2lkIDAgJiYgZy5ub2RlKHYpICE9PSB2b2lkIDApIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vZGUgXCIgKyB2ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZy5ub2RlKHYpKSk7XG4gICAgICByb290LnNlbGVjdChcIiNcIiArIChkaWFnT2JqLmRiLmxvb2tVcERvbUlkKHYpIHx8IHYpKS5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArIChnLm5vZGUodikueCAtIGcubm9kZSh2KS53aWR0aCAvIDIpICsgXCIsXCIgKyAoZy5ub2RlKHYpLnkgLSBnLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbiAgZy5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGlmIChlICE9PSB2b2lkIDAgJiYgZy5lZGdlKGUpICE9PSB2b2lkIDApIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkVkZ2UgXCIgKyBlLnYgKyBcIiAtPiBcIiArIGUudyArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGcuZWRnZShlKSkpO1xuICAgICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdFZGdlKGRpYWdyYW0yLCBnLmVkZ2UoZSksIGcuZWRnZShlKS5yZWxhdGlvbiwgY29uZiwgZGlhZ09iaik7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3ZnQm91bmRzID0gZGlhZ3JhbTIubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgd2lkdGggPSBzdmdCb3VuZHMud2lkdGggKyBwYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gc3ZnQm91bmRzLmhlaWdodCArIHBhZGRpbmcgKiAyO1xuICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHdpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgY29uc3QgdkJveCA9IGAke3N2Z0JvdW5kcy54IC0gcGFkZGluZ30gJHtzdmdCb3VuZHMueSAtIHBhZGRpbmd9ICR7d2lkdGh9ICR7aGVpZ2h0fWA7XG4gIGxvZy5kZWJ1Zyhgdmlld0JveCAke3ZCb3h9YCk7XG4gIGRpYWdyYW0yLmF0dHIoXCJ2aWV3Qm94XCIsIHZCb3gpO1xufSwgXCJkcmF3XCIpO1xudmFyIGNsYXNzUmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzRGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogY2xhc3NEaWFncmFtX2RlZmF1bHQsXG4gIGRiOiBjbGFzc0RiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBjbGFzc1JlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHQsXG4gIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICAgIGlmICghY25mLmNsYXNzKSB7XG4gICAgICBjbmYuY2xhc3MgPSB7fTtcbiAgICB9XG4gICAgY25mLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGUgPSBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbiAgICBjbGFzc0RiX2RlZmF1bHQuY2xlYXIoKTtcbiAgfSwgXCJpbml0XCIpXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgY3JlYXRlTGFiZWxfZGVmYXVsdFxufSBmcm9tIFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCB7XG4gIGdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0LFxuICBnZXRTdWJHcmFwaFRpdGxlTWFyZ2luc1xufSBmcm9tIFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZVRleHRcbn0gZnJvbSBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBldmFsdWF0ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvbWFya2Vycy5qc1xudmFyIGluc2VydE1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCBtYXJrZXJBcnJheSwgdHlwZSwgaWQpID0+IHtcbiAgbWFya2VyQXJyYXkuZm9yRWFjaCgobWFya2VyTmFtZSkgPT4ge1xuICAgIG1hcmtlcnNbbWFya2VyTmFtZV0oZWxlbSwgdHlwZSwgaWQpO1xuICB9KTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBleHRlbnNpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBsb2cudHJhY2UoXCJNYWtpbmcgbWFya2VycyBmb3IgXCIsIGlkKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1leHRlbnNpb25TdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDcgTDE4LDEzIFYgMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWV4dGVuc2lvbkVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgZXh0ZW5zaW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgViAxMyBMMTgsNyBaXCIpO1xufSwgXCJleHRlbnNpb25cIik7XG52YXIgY29tcG9zaXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNvbXBvc2l0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNvbXBvc2l0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBjb21wb3NpdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiY29tcG9zaXRpb25cIik7XG52YXIgYWdncmVnYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGFnZ3JlZ2F0aW9uIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTgpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaXCIpO1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWFnZ3JlZ2F0aW9uRW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBhZ2dyZWdhdGlvbiBcIiArIHR5cGUpLmF0dHIoXCJyZWZYXCIsIDEpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbn0sIFwiYWdncmVnYXRpb25cIik7XG52YXIgZGVwZW5kZW5jeSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItZGVwZW5kZW5jeVN0YXJ0XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgNikuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDE5MCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyNDApLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWlwiKTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1kZXBlbmRlbmN5RW5kXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1hcmtlciBkZXBlbmRlbmN5IFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAyMCkuYXR0cihcIm1hcmtlckhlaWdodFwiLCAyOCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFpcIik7XG59LCBcImRlcGVuZGVuY3lcIik7XG52YXIgbG9sbGlwb3AgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcImRlZnNcIikuYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWxvbGxpcG9wU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGxvbGxpcG9wIFwiICsgdHlwZSkuYXR0cihcInJlZlhcIiwgMTMpLmF0dHIoXCJyZWZZXCIsIDcpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCAxOTApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMjQwKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIikuYXR0cihcImN4XCIsIDcpLmF0dHIoXCJjeVwiLCA3KS5hdHRyKFwiclwiLCA2KTtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1sb2xsaXBvcEVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgbG9sbGlwb3AgXCIgKyB0eXBlKS5hdHRyKFwicmVmWFwiLCAxKS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTkwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI0MCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpLmF0dHIoXCJjeFwiLCA3KS5hdHRyKFwiY3lcIiwgNykuYXR0cihcInJcIiwgNik7XG59LCBcImxvbGxpcG9wXCIpO1xudmFyIHBvaW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIGlkICsgXCJfXCIgKyB0eXBlICsgXCItcG9pbnRFbmRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgNikuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDEyKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDEyKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLXBvaW50U3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTAgMTBcIikuYXR0cihcInJlZlhcIiwgNC41KS5hdHRyKFwicmVmWVwiLCA1KS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTIpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAxKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG59LCBcInBvaW50XCIpO1xudmFyIGNpcmNsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIHR5cGUsIGlkKSA9PiB7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNpcmNsZUVuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMCAxMFwiKS5hdHRyKFwicmVmWFwiLCAxMSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIFwiNVwiKS5hdHRyKFwiY3lcIiwgXCI1XCIpLmF0dHIoXCJyXCIsIFwiNVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1jaXJjbGVTdGFydFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMCAxMFwiKS5hdHRyKFwicmVmWFwiLCAtMSkuYXR0cihcInJlZllcIiwgNSkuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIFwiNVwiKS5hdHRyKFwiY3lcIiwgXCI1XCIpLmF0dHIoXCJyXCIsIFwiNVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMSkuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xufSwgXCJjaXJjbGVcIik7XG52YXIgY3Jvc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlbGVtLCB0eXBlLCBpZCkgPT4ge1xuICBlbGVtLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1jcm9zc0VuZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtYXJrZXIgY3Jvc3MgXCIgKyB0eXBlKS5hdHRyKFwidmlld0JveFwiLCBcIjAgMCAxMSAxMVwiKS5hdHRyKFwicmVmWFwiLCAxMikuYXR0cihcInJlZllcIiwgNS4yKS5hdHRyKFwibWFya2VyVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMTEpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTEpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5XCIpLmF0dHIoXCJjbGFzc1wiLCBcImFycm93TWFya2VyUGF0aFwiKS5zdHlsZShcInN0cm9rZS13aWR0aFwiLCAyKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIxLDBcIik7XG4gIGVsZW0uYXBwZW5kKFwibWFya2VyXCIpLmF0dHIoXCJpZFwiLCBpZCArIFwiX1wiICsgdHlwZSArIFwiLWNyb3NzU3RhcnRcIikuYXR0cihcImNsYXNzXCIsIFwibWFya2VyIGNyb3NzIFwiICsgdHlwZSkuYXR0cihcInZpZXdCb3hcIiwgXCIwIDAgMTEgMTFcIikuYXR0cihcInJlZlhcIiwgLTEpLmF0dHIoXCJyZWZZXCIsIDUuMikuYXR0cihcIm1hcmtlclVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDExKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDExKS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJhcnJvd01hcmtlclBhdGhcIikuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMikuc3R5bGUoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiMSwwXCIpO1xufSwgXCJjcm9zc1wiKTtcbnZhciBiYXJiID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgdHlwZSwgaWQpID0+IHtcbiAgZWxlbS5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgaWQgKyBcIl9cIiArIHR5cGUgKyBcIi1iYXJiRW5kXCIpLmF0dHIoXCJyZWZYXCIsIDE5KS5hdHRyKFwicmVmWVwiLCA3KS5hdHRyKFwibWFya2VyV2lkdGhcIiwgMjApLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgMTQpLmF0dHIoXCJtYXJrZXJVbml0c1wiLCBcInN0cm9rZVdpZHRoXCIpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaXCIpO1xufSwgXCJiYXJiXCIpO1xudmFyIG1hcmtlcnMgPSB7XG4gIGV4dGVuc2lvbixcbiAgY29tcG9zaXRpb24sXG4gIGFnZ3JlZ2F0aW9uLFxuICBkZXBlbmRlbmN5LFxuICBsb2xsaXBvcCxcbiAgcG9pbnQsXG4gIGNpcmNsZSxcbiAgY3Jvc3MsXG4gIGJhcmJcbn07XG52YXIgbWFya2Vyc19kZWZhdWx0ID0gaW5zZXJ0TWFya2VycztcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvZWRnZXMuanNcbmltcG9ydCB7IGxpbmUsIGN1cnZlQmFzaXMsIHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9lZGdlTWFya2VyLnRzXG52YXIgYWRkRWRnZU1hcmtlcnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSkgPT4ge1xuICBpZiAoZWRnZS5hcnJvd1R5cGVTdGFydCkge1xuICAgIGFkZEVkZ2VNYXJrZXIoc3ZnUGF0aCwgXCJzdGFydFwiLCBlZGdlLmFycm93VHlwZVN0YXJ0LCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIH1cbiAgaWYgKGVkZ2UuYXJyb3dUeXBlRW5kKSB7XG4gICAgYWRkRWRnZU1hcmtlcihzdmdQYXRoLCBcImVuZFwiLCBlZGdlLmFycm93VHlwZUVuZCwgdXJsLCBpZCwgZGlhZ3JhbVR5cGUpO1xuICB9XG59LCBcImFkZEVkZ2VNYXJrZXJzXCIpO1xudmFyIGFycm93VHlwZXNNYXAgPSB7XG4gIGFycm93X2Nyb3NzOiBcImNyb3NzXCIsXG4gIGFycm93X3BvaW50OiBcInBvaW50XCIsXG4gIGFycm93X2JhcmI6IFwiYmFyYlwiLFxuICBhcnJvd19jaXJjbGU6IFwiY2lyY2xlXCIsXG4gIGFnZ3JlZ2F0aW9uOiBcImFnZ3JlZ2F0aW9uXCIsXG4gIGV4dGVuc2lvbjogXCJleHRlbnNpb25cIixcbiAgY29tcG9zaXRpb246IFwiY29tcG9zaXRpb25cIixcbiAgZGVwZW5kZW5jeTogXCJkZXBlbmRlbmN5XCIsXG4gIGxvbGxpcG9wOiBcImxvbGxpcG9wXCJcbn07XG52YXIgYWRkRWRnZU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Z1BhdGgsIHBvc2l0aW9uLCBhcnJvd1R5cGUsIHVybCwgaWQsIGRpYWdyYW1UeXBlKSA9PiB7XG4gIGNvbnN0IGVuZE1hcmtlclR5cGUgPSBhcnJvd1R5cGVzTWFwW2Fycm93VHlwZV07XG4gIGlmICghZW5kTWFya2VyVHlwZSkge1xuICAgIGxvZy53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7YXJyb3dUeXBlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdWZmaXggPSBwb3NpdGlvbiA9PT0gXCJzdGFydFwiID8gXCJTdGFydFwiIDogXCJFbmRcIjtcbiAgc3ZnUGF0aC5hdHRyKGBtYXJrZXItJHtwb3NpdGlvbn1gLCBgdXJsKCR7dXJsfSMke2lkfV8ke2RpYWdyYW1UeXBlfS0ke2VuZE1hcmtlclR5cGV9JHtzdWZmaXh9KWApO1xufSwgXCJhZGRFZGdlTWFya2VyXCIpO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9lZGdlcy5qc1xudmFyIGVkZ2VMYWJlbHMgPSB7fTtcbnZhciB0ZXJtaW5hbExhYmVscyA9IHt9O1xudmFyIGNsZWFyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGVkZ2VMYWJlbHMgPSB7fTtcbiAgdGVybWluYWxMYWJlbHMgPSB7fTtcbn0sIFwiY2xlYXJcIik7XG52YXIgaW5zZXJ0RWRnZUxhYmVsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWxlbSwgZWRnZSkgPT4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IGV2YWx1YXRlKGNvbmZpZy5mbG93Y2hhcnQuaHRtbExhYmVscyk7XG4gIGNvbnN0IGxhYmVsRWxlbWVudCA9IGVkZ2UubGFiZWxUeXBlID09PSBcIm1hcmtkb3duXCIgPyBjcmVhdGVUZXh0KFxuICAgIGVsZW0sXG4gICAgZWRnZS5sYWJlbCxcbiAgICB7XG4gICAgICBzdHlsZTogZWRnZS5sYWJlbFN0eWxlLFxuICAgICAgdXNlSHRtbExhYmVscyxcbiAgICAgIGFkZFN2Z0JhY2tncm91bmQ6IHRydWVcbiAgICB9LFxuICAgIGNvbmZpZ1xuICApIDogY3JlYXRlTGFiZWxfZGVmYXVsdChlZGdlLmxhYmVsLCBlZGdlLmxhYmVsU3R5bGUpO1xuICBjb25zdCBlZGdlTGFiZWwgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZUxhYmVsXCIpO1xuICBjb25zdCBsYWJlbCA9IGVkZ2VMYWJlbC5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpO1xuICBsYWJlbC5ub2RlKCkuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTtcbiAgbGV0IGJib3ggPSBsYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICBpZiAodXNlSHRtbExhYmVscykge1xuICAgIGNvbnN0IGRpdiA9IGxhYmVsRWxlbWVudC5jaGlsZHJlblswXTtcbiAgICBjb25zdCBkdiA9IHNlbGVjdChsYWJlbEVsZW1lbnQpO1xuICAgIGJib3ggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgZHYuYXR0cihcIndpZHRoXCIsIGJib3gud2lkdGgpO1xuICAgIGR2LmF0dHIoXCJoZWlnaHRcIiwgYmJveC5oZWlnaHQpO1xuICB9XG4gIGxhYmVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtYmJveC53aWR0aCAvIDIgKyBcIiwgXCIgKyAtYmJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICBlZGdlTGFiZWxzW2VkZ2UuaWRdID0gZWRnZUxhYmVsO1xuICBlZGdlLndpZHRoID0gYmJveC53aWR0aDtcbiAgZWRnZS5oZWlnaHQgPSBiYm94LmhlaWdodDtcbiAgbGV0IGZvO1xuICBpZiAoZWRnZS5zdGFydExhYmVsTGVmdCkge1xuICAgIGNvbnN0IHN0YXJ0TGFiZWxFbGVtZW50ID0gY3JlYXRlTGFiZWxfZGVmYXVsdChlZGdlLnN0YXJ0TGFiZWxMZWZ0LCBlZGdlLmxhYmVsU3R5bGUpO1xuICAgIGNvbnN0IHN0YXJ0RWRnZUxhYmVsTGVmdCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gc3RhcnRFZGdlTGFiZWxMZWZ0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBpbm5lci5ub2RlKCkuYXBwZW5kQ2hpbGQoc3RhcnRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gc3RhcnRMYWJlbEVsZW1lbnQuZ2V0QkJveCgpO1xuICAgIGlubmVyLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyAtc2xCb3gud2lkdGggLyAyICsgXCIsIFwiICsgLXNsQm94LmhlaWdodCAvIDIgKyBcIilcIik7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVsc1tlZGdlLmlkXSkge1xuICAgICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0gPSB7fTtcbiAgICB9XG4gICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uc3RhcnRMZWZ0ID0gc3RhcnRFZGdlTGFiZWxMZWZ0O1xuICAgIHNldFRlcm1pbmFsV2lkdGgoZm8sIGVkZ2Uuc3RhcnRMYWJlbExlZnQpO1xuICB9XG4gIGlmIChlZGdlLnN0YXJ0TGFiZWxSaWdodCkge1xuICAgIGNvbnN0IHN0YXJ0TGFiZWxFbGVtZW50ID0gY3JlYXRlTGFiZWxfZGVmYXVsdChlZGdlLnN0YXJ0TGFiZWxSaWdodCwgZWRnZS5sYWJlbFN0eWxlKTtcbiAgICBjb25zdCBzdGFydEVkZ2VMYWJlbFJpZ2h0ID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VUZXJtaW5hbHNcIik7XG4gICAgY29uc3QgaW5uZXIgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiaW5uZXJcIik7XG4gICAgZm8gPSBzdGFydEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChzdGFydExhYmVsRWxlbWVudCk7XG4gICAgaW5uZXIubm9kZSgpLmFwcGVuZENoaWxkKHN0YXJ0TGFiZWxFbGVtZW50KTtcbiAgICBjb25zdCBzbEJveCA9IHN0YXJ0TGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHNbZWRnZS5pZF0pIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdID0ge307XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0UmlnaHQgPSBzdGFydEVkZ2VMYWJlbFJpZ2h0O1xuICAgIHNldFRlcm1pbmFsV2lkdGgoZm8sIGVkZ2Uuc3RhcnRMYWJlbFJpZ2h0KTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbmRMYWJlbEVsZW1lbnQgPSBjcmVhdGVMYWJlbF9kZWZhdWx0KGVkZ2UuZW5kTGFiZWxMZWZ0LCBlZGdlLmxhYmVsU3R5bGUpO1xuICAgIGNvbnN0IGVuZEVkZ2VMYWJlbExlZnQgPSBlbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiZWRnZVRlcm1pbmFsc1wiKTtcbiAgICBjb25zdCBpbm5lciA9IGVuZEVkZ2VMYWJlbExlZnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbExlZnQubm9kZSgpLmFwcGVuZENoaWxkKGVuZExhYmVsRWxlbWVudCk7XG4gICAgaWYgKCF0ZXJtaW5hbExhYmVsc1tlZGdlLmlkXSkge1xuICAgICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0gPSB7fTtcbiAgICB9XG4gICAgdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uZW5kTGVmdCA9IGVuZEVkZ2VMYWJlbExlZnQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5lbmRMYWJlbExlZnQpO1xuICB9XG4gIGlmIChlZGdlLmVuZExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbmRMYWJlbEVsZW1lbnQgPSBjcmVhdGVMYWJlbF9kZWZhdWx0KGVkZ2UuZW5kTGFiZWxSaWdodCwgZWRnZS5sYWJlbFN0eWxlKTtcbiAgICBjb25zdCBlbmRFZGdlTGFiZWxSaWdodCA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlVGVybWluYWxzXCIpO1xuICAgIGNvbnN0IGlubmVyID0gZW5kRWRnZUxhYmVsUmlnaHQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJpbm5lclwiKTtcbiAgICBmbyA9IGlubmVyLm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGNvbnN0IHNsQm94ID0gZW5kTGFiZWxFbGVtZW50LmdldEJCb3goKTtcbiAgICBpbm5lci5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgLXNsQm94LndpZHRoIC8gMiArIFwiLCBcIiArIC1zbEJveC5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgIGVuZEVkZ2VMYWJlbFJpZ2h0Lm5vZGUoKS5hcHBlbmRDaGlsZChlbmRMYWJlbEVsZW1lbnQpO1xuICAgIGlmICghdGVybWluYWxMYWJlbHNbZWRnZS5pZF0pIHtcbiAgICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdID0ge307XG4gICAgfVxuICAgIHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLmVuZFJpZ2h0ID0gZW5kRWRnZUxhYmVsUmlnaHQ7XG4gICAgc2V0VGVybWluYWxXaWR0aChmbywgZWRnZS5lbmRMYWJlbFJpZ2h0KTtcbiAgfVxuICByZXR1cm4gbGFiZWxFbGVtZW50O1xufSwgXCJpbnNlcnRFZGdlTGFiZWxcIik7XG5mdW5jdGlvbiBzZXRUZXJtaW5hbFdpZHRoKGZvLCB2YWx1ZSkge1xuICBpZiAoZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMgJiYgZm8pIHtcbiAgICBmby5zdHlsZS53aWR0aCA9IHZhbHVlLmxlbmd0aCAqIDkgKyBcInB4XCI7XG4gICAgZm8uc3R5bGUuaGVpZ2h0ID0gXCIxMnB4XCI7XG4gIH1cbn1cbl9fbmFtZShzZXRUZXJtaW5hbFdpZHRoLCBcInNldFRlcm1pbmFsV2lkdGhcIik7XG52YXIgcG9zaXRpb25FZGdlTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlZGdlLCBwYXRocykgPT4ge1xuICBsb2cuZGVidWcoXCJNb3ZpbmcgbGFiZWwgYWJjODggXCIsIGVkZ2UuaWQsIGVkZ2UubGFiZWwsIGVkZ2VMYWJlbHNbZWRnZS5pZF0sIHBhdGhzKTtcbiAgbGV0IHBhdGggPSBwYXRocy51cGRhdGVkUGF0aCA/IHBhdGhzLnVwZGF0ZWRQYXRoIDogcGF0aHMub3JpZ2luYWxQYXRoO1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHsgc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgaWYgKGVkZ2UubGFiZWwpIHtcbiAgICBjb25zdCBlbCA9IGVkZ2VMYWJlbHNbZWRnZS5pZF07XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY0xhYmVsUG9zaXRpb24ocGF0aCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIFwiTW92aW5nIGxhYmVsIFwiICsgZWRnZS5sYWJlbCArIFwiIGZyb20gKFwiLFxuICAgICAgICB4LFxuICAgICAgICBcIixcIixcbiAgICAgICAgeSxcbiAgICAgICAgXCIpIHRvIChcIixcbiAgICAgICAgcG9zLngsXG4gICAgICAgIFwiLFwiLFxuICAgICAgICBwb3MueSxcbiAgICAgICAgXCIpIGFiYzg4XCJcbiAgICAgICk7XG4gICAgICBpZiAocGF0aHMudXBkYXRlZFBhdGgpIHtcbiAgICAgICAgeCA9IHBvcy54O1xuICAgICAgICB5ID0gcG9zLnk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3kgKyBzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW4gLyAyfSlgKTtcbiAgfVxuICBpZiAoZWRnZS5zdGFydExhYmVsTGVmdCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uc3RhcnRMZWZ0O1xuICAgIGxldCB4ID0gZWRnZS54O1xuICAgIGxldCB5ID0gZWRnZS55O1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBjb25zdCBwb3MgPSB1dGlsc19kZWZhdWx0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oZWRnZS5hcnJvd1R5cGVTdGFydCA/IDEwIDogMCwgXCJzdGFydF9sZWZ0XCIsIHBhdGgpO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSlgKTtcbiAgfVxuICBpZiAoZWRnZS5zdGFydExhYmVsUmlnaHQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLnN0YXJ0UmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihcbiAgICAgICAgZWRnZS5hcnJvd1R5cGVTdGFydCA/IDEwIDogMCxcbiAgICAgICAgXCJzdGFydF9yaWdodFwiLFxuICAgICAgICBwYXRoXG4gICAgICApO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgIH1cbiAgICBlbC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSlgKTtcbiAgfVxuICBpZiAoZWRnZS5lbmRMYWJlbExlZnQpIHtcbiAgICBjb25zdCBlbCA9IHRlcm1pbmFsTGFiZWxzW2VkZ2UuaWRdLmVuZExlZnQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZUVuZCA/IDEwIDogMCwgXCJlbmRfbGVmdFwiLCBwYXRoKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICB9XG4gICAgZWwuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7eH0sICR7eX0pYCk7XG4gIH1cbiAgaWYgKGVkZ2UuZW5kTGFiZWxSaWdodCkge1xuICAgIGNvbnN0IGVsID0gdGVybWluYWxMYWJlbHNbZWRnZS5pZF0uZW5kUmlnaHQ7XG4gICAgbGV0IHggPSBlZGdlLng7XG4gICAgbGV0IHkgPSBlZGdlLnk7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHBvcyA9IHV0aWxzX2RlZmF1bHQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihlZGdlLmFycm93VHlwZUVuZCA/IDEwIDogMCwgXCJlbmRfcmlnaHRcIiwgcGF0aCk7XG4gICAgICB4ID0gcG9zLng7XG4gICAgICB5ID0gcG9zLnk7XG4gICAgfVxuICAgIGVsLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApO1xuICB9XG59LCBcInBvc2l0aW9uRWRnZUxhYmVsXCIpO1xudmFyIG91dHNpZGVOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobm9kZSwgcG9pbnQyKSA9PiB7XG4gIGNvbnN0IHggPSBub2RlLng7XG4gIGNvbnN0IHkgPSBub2RlLnk7XG4gIGNvbnN0IGR4ID0gTWF0aC5hYnMocG9pbnQyLnggLSB4KTtcbiAgY29uc3QgZHkgPSBNYXRoLmFicyhwb2ludDIueSAtIHkpO1xuICBjb25zdCB3ID0gbm9kZS53aWR0aCAvIDI7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodCAvIDI7XG4gIGlmIChkeCA+PSB3IHx8IGR5ID49IGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcIm91dHNpZGVOb2RlXCIpO1xudmFyIGludGVyc2VjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG5vZGUsIG91dHNpZGVQb2ludCwgaW5zaWRlUG9pbnQpID0+IHtcbiAgbG9nLmRlYnVnKGBpbnRlcnNlY3Rpb24gY2FsYyBhYmM4OTpcbiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KG91dHNpZGVQb2ludCl9XG4gIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShpbnNpZGVQb2ludCl9XG4gIG5vZGUgICAgICAgIDogeDoke25vZGUueH0geToke25vZGUueX0gdzoke25vZGUud2lkdGh9IGg6JHtub2RlLmhlaWdodH1gKTtcbiAgY29uc3QgeCA9IG5vZGUueDtcbiAgY29uc3QgeSA9IG5vZGUueTtcbiAgY29uc3QgZHggPSBNYXRoLmFicyh4IC0gaW5zaWRlUG9pbnQueCk7XG4gIGNvbnN0IHcgPSBub2RlLndpZHRoIC8gMjtcbiAgbGV0IHIgPSBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyB3IC0gZHggOiB3ICsgZHg7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodCAvIDI7XG4gIGNvbnN0IFEgPSBNYXRoLmFicyhvdXRzaWRlUG9pbnQueSAtIGluc2lkZVBvaW50LnkpO1xuICBjb25zdCBSID0gTWF0aC5hYnMob3V0c2lkZVBvaW50LnggLSBpbnNpZGVQb2ludC54KTtcbiAgaWYgKE1hdGguYWJzKHkgLSBvdXRzaWRlUG9pbnQueSkgKiB3ID4gTWF0aC5hYnMoeCAtIG91dHNpZGVQb2ludC54KSAqIGgpIHtcbiAgICBsZXQgcSA9IGluc2lkZVBvaW50LnkgPCBvdXRzaWRlUG9pbnQueSA/IG91dHNpZGVQb2ludC55IC0gaCAtIHkgOiB5IC0gaCAtIG91dHNpZGVQb2ludC55O1xuICAgIHIgPSBSICogcSAvIFE7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgeDogaW5zaWRlUG9pbnQueCA8IG91dHNpZGVQb2ludC54ID8gaW5zaWRlUG9pbnQueCArIHIgOiBpbnNpZGVQb2ludC54IC0gUiArIHIsXG4gICAgICB5OiBpbnNpZGVQb2ludC55IDwgb3V0c2lkZVBvaW50LnkgPyBpbnNpZGVQb2ludC55ICsgUSAtIHEgOiBpbnNpZGVQb2ludC55IC0gUSArIHFcbiAgICB9O1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICByZXMueCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgcmVzLnkgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIHJlcy54ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICByZXMueSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICBsb2cuZGVidWcoYGFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICR7UX0sIHEgJHtxfSwgUiAke1J9LCByICR7cn1gLCByZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluc2lkZVBvaW50LnggPCBvdXRzaWRlUG9pbnQueCkge1xuICAgICAgciA9IG91dHNpZGVQb2ludC54IC0gdyAtIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSB4IC0gdyAtIG91dHNpZGVQb2ludC54O1xuICAgIH1cbiAgICBsZXQgcSA9IFEgKiByIC8gUjtcbiAgICBsZXQgX3ggPSBpbnNpZGVQb2ludC54IDwgb3V0c2lkZVBvaW50LnggPyBpbnNpZGVQb2ludC54ICsgUiAtIHIgOiBpbnNpZGVQb2ludC54IC0gUiArIHI7XG4gICAgbGV0IF95ID0gaW5zaWRlUG9pbnQueSA8IG91dHNpZGVQb2ludC55ID8gaW5zaWRlUG9pbnQueSArIHEgOiBpbnNpZGVQb2ludC55IC0gcTtcbiAgICBsb2cuZGVidWcoYHNpZGVzIGNhbGMgYWJjODksIFEgJHtRfSwgcSAke3F9LCBSICR7Un0sIHIgJHtyfWAsIHsgX3gsIF95IH0pO1xuICAgIGlmIChyID09PSAwKSB7XG4gICAgICBfeCA9IG91dHNpZGVQb2ludC54O1xuICAgICAgX3kgPSBvdXRzaWRlUG9pbnQueTtcbiAgICB9XG4gICAgaWYgKFIgPT09IDApIHtcbiAgICAgIF94ID0gb3V0c2lkZVBvaW50Lng7XG4gICAgfVxuICAgIGlmIChRID09PSAwKSB7XG4gICAgICBfeSA9IG91dHNpZGVQb2ludC55O1xuICAgIH1cbiAgICByZXR1cm4geyB4OiBfeCwgeTogX3kgfTtcbiAgfVxufSwgXCJpbnRlcnNlY3Rpb25cIik7XG52YXIgY3V0UGF0aEF0SW50ZXJzZWN0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3BvaW50cywgYm91bmRhcnlOb2RlKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdFwiLCBfcG9pbnRzLCBib3VuZGFyeU5vZGUpO1xuICBsZXQgcG9pbnRzID0gW107XG4gIGxldCBsYXN0UG9pbnRPdXRzaWRlID0gX3BvaW50c1swXTtcbiAgbGV0IGlzSW5zaWRlID0gZmFsc2U7XG4gIF9wb2ludHMuZm9yRWFjaCgocG9pbnQyKSA9PiB7XG4gICAgaWYgKCFvdXRzaWRlTm9kZShib3VuZGFyeU5vZGUsIHBvaW50MikgJiYgIWlzSW5zaWRlKSB7XG4gICAgICBjb25zdCBpbnRlciA9IGludGVyc2VjdGlvbihib3VuZGFyeU5vZGUsIGxhc3RQb2ludE91dHNpZGUsIHBvaW50Mik7XG4gICAgICBsZXQgcG9pbnRQcmVzZW50ID0gZmFsc2U7XG4gICAgICBwb2ludHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICBwb2ludFByZXNlbnQgPSBwb2ludFByZXNlbnQgfHwgcC54ID09PSBpbnRlci54ICYmIHAueSA9PT0gaW50ZXIueTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFwb2ludHMuc29tZSgoZSkgPT4gZS54ID09PSBpbnRlci54ICYmIGUueSA9PT0gaW50ZXIueSkpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goaW50ZXIpO1xuICAgICAgfVxuICAgICAgaXNJbnNpZGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0UG9pbnRPdXRzaWRlID0gcG9pbnQyO1xuICAgICAgaWYgKCFpc0luc2lkZSkge1xuICAgICAgICBwb2ludHMucHVzaChwb2ludDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwb2ludHM7XG59LCBcImN1dFBhdGhBdEludGVyc2VjdFwiKTtcbnZhciBpbnNlcnRFZGdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBlLCBlZGdlLCBjbHVzdGVyRGIsIGRpYWdyYW1UeXBlLCBncmFwaCwgaWQpIHtcbiAgbGV0IHBvaW50cyA9IGVkZ2UucG9pbnRzO1xuICBsb2cuZGVidWcoXCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPVwiLCBlZGdlLCBcImU9XCIsIGUpO1xuICBsZXQgcG9pbnRzSGFzQ2hhbmdlZCA9IGZhbHNlO1xuICBjb25zdCB0YWlsID0gZ3JhcGgubm9kZShlLnYpO1xuICB2YXIgaGVhZCA9IGdyYXBoLm5vZGUoZS53KTtcbiAgaWYgKGhlYWQ/LmludGVyc2VjdCAmJiB0YWlsPy5pbnRlcnNlY3QpIHtcbiAgICBwb2ludHMgPSBwb2ludHMuc2xpY2UoMSwgZWRnZS5wb2ludHMubGVuZ3RoIC0gMSk7XG4gICAgcG9pbnRzLnVuc2hpZnQodGFpbC5pbnRlcnNlY3QocG9pbnRzWzBdKSk7XG4gICAgcG9pbnRzLnB1c2goaGVhZC5pbnRlcnNlY3QocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSkpO1xuICB9XG4gIGlmIChlZGdlLnRvQ2x1c3Rlcikge1xuICAgIGxvZy5kZWJ1ZyhcInRvIGNsdXN0ZXIgYWJjODhcIiwgY2x1c3RlckRiW2VkZ2UudG9DbHVzdGVyXSk7XG4gICAgcG9pbnRzID0gY3V0UGF0aEF0SW50ZXJzZWN0KGVkZ2UucG9pbnRzLCBjbHVzdGVyRGJbZWRnZS50b0NsdXN0ZXJdLm5vZGUpO1xuICAgIHBvaW50c0hhc0NoYW5nZWQgPSB0cnVlO1xuICB9XG4gIGlmIChlZGdlLmZyb21DbHVzdGVyKSB7XG4gICAgbG9nLmRlYnVnKFwiZnJvbSBjbHVzdGVyIGFiYzg4XCIsIGNsdXN0ZXJEYltlZGdlLmZyb21DbHVzdGVyXSk7XG4gICAgcG9pbnRzID0gY3V0UGF0aEF0SW50ZXJzZWN0KHBvaW50cy5yZXZlcnNlKCksIGNsdXN0ZXJEYltlZGdlLmZyb21DbHVzdGVyXS5ub2RlKS5yZXZlcnNlKCk7XG4gICAgcG9pbnRzSGFzQ2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgY29uc3QgbGluZURhdGEgPSBwb2ludHMuZmlsdGVyKChwKSA9PiAhTnVtYmVyLmlzTmFOKHAueSkpO1xuICBsZXQgY3VydmUgPSBjdXJ2ZUJhc2lzO1xuICBpZiAoZWRnZS5jdXJ2ZSAmJiAoZGlhZ3JhbVR5cGUgPT09IFwiZ3JhcGhcIiB8fCBkaWFncmFtVHlwZSA9PT0gXCJmbG93Y2hhcnRcIikpIHtcbiAgICBjdXJ2ZSA9IGVkZ2UuY3VydmU7XG4gIH1cbiAgY29uc3QgeyB4LCB5IH0gPSBnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldChlZGdlKTtcbiAgY29uc3QgbGluZUZ1bmN0aW9uID0gbGluZSgpLngoeCkueSh5KS5jdXJ2ZShjdXJ2ZSk7XG4gIGxldCBzdHJva2VDbGFzc2VzO1xuICBzd2l0Y2ggKGVkZ2UudGhpY2tuZXNzKSB7XG4gICAgY2FzZSBcIm5vcm1hbFwiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyA9IFwiZWRnZS10aGlja25lc3Mtbm9ybWFsXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGhpY2tcIjpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcImVkZ2UtdGhpY2tuZXNzLXRoaWNrXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaW52aXNpYmxlXCI6XG4gICAgICBzdHJva2VDbGFzc2VzID0gXCJlZGdlLXRoaWNrbmVzcy10aGlja1wiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0cm9rZUNsYXNzZXMgPSBcIlwiO1xuICB9XG4gIHN3aXRjaCAoZWRnZS5wYXR0ZXJuKSB7XG4gICAgY2FzZSBcInNvbGlkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1zb2xpZFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRvdHRlZFwiOlxuICAgICAgc3Ryb2tlQ2xhc3NlcyArPSBcIiBlZGdlLXBhdHRlcm4tZG90dGVkXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGFzaGVkXCI6XG4gICAgICBzdHJva2VDbGFzc2VzICs9IFwiIGVkZ2UtcGF0dGVybi1kYXNoZWRcIjtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGNvbnN0IHN2Z1BhdGggPSBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgbGluZUZ1bmN0aW9uKGxpbmVEYXRhKSkuYXR0cihcImlkXCIsIGVkZ2UuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIiBcIiArIHN0cm9rZUNsYXNzZXMgKyAoZWRnZS5jbGFzc2VzID8gXCIgXCIgKyBlZGdlLmNsYXNzZXMgOiBcIlwiKSkuYXR0cihcInN0eWxlXCIsIGVkZ2Uuc3R5bGUpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGdldENvbmZpZygpLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlIHx8IGdldENvbmZpZygpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUpIHtcbiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKC9nLCBcIlxcXFwoXCIpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCkvZywgXCJcXFxcKVwiKTtcbiAgfVxuICBhZGRFZGdlTWFya2VycyhzdmdQYXRoLCBlZGdlLCB1cmwsIGlkLCBkaWFncmFtVHlwZSk7XG4gIGxldCBwYXRocyA9IHt9O1xuICBpZiAocG9pbnRzSGFzQ2hhbmdlZCkge1xuICAgIHBhdGhzLnVwZGF0ZWRQYXRoID0gcG9pbnRzO1xuICB9XG4gIHBhdGhzLm9yaWdpbmFsUGF0aCA9IGVkZ2UucG9pbnRzO1xuICByZXR1cm4gcGF0aHM7XG59LCBcImluc2VydEVkZ2VcIik7XG5cbmV4cG9ydCB7XG4gIG1hcmtlcnNfZGVmYXVsdCxcbiAgY2xlYXIsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgcG9zaXRpb25FZGdlTGFiZWwsXG4gIGluc2VydEVkZ2Vcbn07XG4iLAogICAgImltcG9ydCB7XG4gIGNsZWFyIGFzIGNsZWFyMixcbiAgaW5zZXJ0RWRnZSxcbiAgaW5zZXJ0RWRnZUxhYmVsLFxuICBtYXJrZXJzX2RlZmF1bHQsXG4gIHBvc2l0aW9uRWRnZUxhYmVsXG59IGZyb20gXCIuL2NodW5rLU1LQUlGS1c1Lm1qc1wiO1xuaW1wb3J0IHtcbiAgY2xhc3NEYl9kZWZhdWx0LFxuICBjbGFzc0RpYWdyYW1fZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstQkFWT0dLRlcubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhcixcbiAgY3JlYXRlTGFiZWxfZGVmYXVsdCxcbiAgaW5zZXJ0Tm9kZSxcbiAgaW50ZXJzZWN0X3JlY3RfZGVmYXVsdCxcbiAgcG9zaXRpb25Ob2RlLFxuICBzZXROb2RlRWxlbSxcbiAgdXBkYXRlTm9kZUJvdW5kc1xufSBmcm9tIFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCB7XG4gIGdldFN1YkdyYXBoVGl0bGVNYXJnaW5zXG59IGZyb20gXCIuL2NodW5rLTIzQVRNWlhWLm1qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVGV4dFxufSBmcm9tIFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCB7XG4gIGdldEVkZ2VJZCxcbiAgZ2V0U3R5bGVzRnJvbUFycmF5LFxuICBpbnRlcnBvbGF0ZVRvQ3VydmUsXG4gIHV0aWxzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNvbW1vbl9kZWZhdWx0LFxuICBldmFsdWF0ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGxvZyxcbiAgc2V0dXBHcmFwaFZpZXdib3hcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc1JlbmRlcmVyLXYyLnRzXG5pbXBvcnQgeyBzZWxlY3QgYXMgc2VsZWN0MiwgY3VydmVMaW5lYXIgfSBmcm9tIFwiZDNcIjtcbmltcG9ydCAqIGFzIGdyYXBobGliMiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG5cbi8vIHNyYy9kYWdyZS13cmFwcGVyL2luZGV4LmpzXG5pbXBvcnQgeyBsYXlvdXQgYXMgZGFncmVMYXlvdXQgfSBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2RhZ3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24yIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvanNvbi5qc1wiO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9tZXJtYWlkLWdyYXBobGliLmpzXG5pbXBvcnQgKiBhcyBncmFwaGxpYkpzb24gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9qc29uLmpzXCI7XG5pbXBvcnQgKiBhcyBncmFwaGxpYiBmcm9tIFwiZGFncmUtZDMtZXMvc3JjL2dyYXBobGliL2luZGV4LmpzXCI7XG52YXIgY2x1c3RlckRiID0ge307XG52YXIgZGVzY2VuZGFudHMgPSB7fTtcbnZhciBwYXJlbnRzID0ge307XG52YXIgY2xlYXIzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRlc2NlbmRhbnRzID0ge307XG4gIHBhcmVudHMgPSB7fTtcbiAgY2x1c3RlckRiID0ge307XG59LCBcImNsZWFyXCIpO1xudmFyIGlzRGVzY2VuZGFudCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkLCBhbmNlc3RvcklkKSA9PiB7XG4gIGxvZy50cmFjZShcIkluIGlzRGVzY2VuZGFudFwiLCBhbmNlc3RvcklkLCBcIiBcIiwgaWQsIFwiID0gXCIsIGRlc2NlbmRhbnRzW2FuY2VzdG9ySWRdLmluY2x1ZGVzKGlkKSk7XG4gIGlmIChkZXNjZW5kYW50c1thbmNlc3RvcklkXS5pbmNsdWRlcyhpZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcImlzRGVzY2VuZGFudFwiKTtcbnZhciBlZGdlSW5DbHVzdGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZWRnZSwgY2x1c3RlcklkKSA9PiB7XG4gIGxvZy5pbmZvKFwiRGVzY2VuZGFudHMgb2YgXCIsIGNsdXN0ZXJJZCwgXCIgaXMgXCIsIGRlc2NlbmRhbnRzW2NsdXN0ZXJJZF0pO1xuICBsb2cuaW5mbyhcIkVkZ2UgaXMgXCIsIGVkZ2UpO1xuICBpZiAoZWRnZS52ID09PSBjbHVzdGVySWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGVkZ2UudyA9PT0gY2x1c3RlcklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghZGVzY2VuZGFudHNbY2x1c3RlcklkXSkge1xuICAgIGxvZy5kZWJ1ZyhcIlRpbHQsIFwiLCBjbHVzdGVySWQsIFwiLG5vdCBpbiBkZXNjZW5kYW50c1wiKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRlc2NlbmRhbnRzW2NsdXN0ZXJJZF0uaW5jbHVkZXMoZWRnZS52KSB8fCBpc0Rlc2NlbmRhbnQoZWRnZS52LCBjbHVzdGVySWQpIHx8IGlzRGVzY2VuZGFudChlZGdlLncsIGNsdXN0ZXJJZCkgfHwgZGVzY2VuZGFudHNbY2x1c3RlcklkXS5pbmNsdWRlcyhlZGdlLncpO1xufSwgXCJlZGdlSW5DbHVzdGVyXCIpO1xudmFyIGNvcHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbHVzdGVySWQsIGdyYXBoLCBuZXdHcmFwaCwgcm9vdElkKSA9PiB7XG4gIGxvZy53YXJuKFxuICAgIFwiQ29weWluZyBjaGlsZHJlbiBvZiBcIixcbiAgICBjbHVzdGVySWQsXG4gICAgXCJyb290XCIsXG4gICAgcm9vdElkLFxuICAgIFwiZGF0YVwiLFxuICAgIGdyYXBoLm5vZGUoY2x1c3RlcklkKSxcbiAgICByb290SWRcbiAgKTtcbiAgY29uc3Qgbm9kZXMgPSBncmFwaC5jaGlsZHJlbihjbHVzdGVySWQpIHx8IFtdO1xuICBpZiAoY2x1c3RlcklkICE9PSByb290SWQpIHtcbiAgICBub2Rlcy5wdXNoKGNsdXN0ZXJJZCk7XG4gIH1cbiAgbG9nLndhcm4oXCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkXCIsIGNsdXN0ZXJJZCwgXCJub2Rlc1wiLCBub2Rlcyk7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBpZiAoZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgY29weShub2RlLCBncmFwaCwgbmV3R3JhcGgsIHJvb3RJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBncmFwaC5ub2RlKG5vZGUpO1xuICAgICAgbG9nLmluZm8oXCJjcCBcIiwgbm9kZSwgXCIgdG8gXCIsIHJvb3RJZCwgXCIgd2l0aCBwYXJlbnQgXCIsIGNsdXN0ZXJJZCk7XG4gICAgICBuZXdHcmFwaC5zZXROb2RlKG5vZGUsIGRhdGEpO1xuICAgICAgaWYgKHJvb3RJZCAhPT0gZ3JhcGgucGFyZW50KG5vZGUpKSB7XG4gICAgICAgIGxvZy53YXJuKFwiU2V0dGluZyBwYXJlbnRcIiwgbm9kZSwgZ3JhcGgucGFyZW50KG5vZGUpKTtcbiAgICAgICAgbmV3R3JhcGguc2V0UGFyZW50KG5vZGUsIGdyYXBoLnBhcmVudChub2RlKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2x1c3RlcklkICE9PSByb290SWQgJiYgbm9kZSAhPT0gY2x1c3RlcklkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlNldHRpbmcgcGFyZW50XCIsIG5vZGUsIGNsdXN0ZXJJZCk7XG4gICAgICAgIG5ld0dyYXBoLnNldFBhcmVudChub2RlLCBjbHVzdGVySWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oXCJJbiBjb3B5IFwiLCBjbHVzdGVySWQsIFwicm9vdFwiLCByb290SWQsIFwiZGF0YVwiLCBncmFwaC5ub2RlKGNsdXN0ZXJJZCksIHJvb3RJZCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBcIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT1cIixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIFwiY2x1c3RlciE9PXJvb3RJZFwiLFxuICAgICAgICAgIGNsdXN0ZXJJZCAhPT0gcm9vdElkLFxuICAgICAgICAgIFwibm9kZSE9PWNsdXN0ZXJJZFwiLFxuICAgICAgICAgIG5vZGUgIT09IGNsdXN0ZXJJZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZWRnZXMgPSBncmFwaC5lZGdlcyhub2RlKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNvcHlpbmcgRWRnZXNcIiwgZWRnZXMpO1xuICAgICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhcIkVkZ2VcIiwgZWRnZSk7XG4gICAgICAgIGNvbnN0IGRhdGEyID0gZ3JhcGguZWRnZShlZGdlLnYsIGVkZ2UudywgZWRnZS5uYW1lKTtcbiAgICAgICAgbG9nLmluZm8oXCJFZGdlIGRhdGFcIiwgZGF0YTIsIHJvb3RJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGVkZ2VJbkNsdXN0ZXIoZWRnZSwgcm9vdElkKSkge1xuICAgICAgICAgICAgbG9nLmluZm8oXCJDb3B5aW5nIGFzIFwiLCBlZGdlLnYsIGVkZ2UudywgZGF0YTIsIGVkZ2UubmFtZSk7XG4gICAgICAgICAgICBuZXdHcmFwaC5zZXRFZGdlKGVkZ2UudiwgZWRnZS53LCBkYXRhMiwgZWRnZS5uYW1lKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwibmV3R3JhcGggZWRnZXMgXCIsIG5ld0dyYXBoLmVkZ2VzKCksIG5ld0dyYXBoLmVkZ2UobmV3R3JhcGguZWRnZXMoKVswXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgICAgXCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgXCIsXG4gICAgICAgICAgICAgIGVkZ2UudixcbiAgICAgICAgICAgICAgXCItLT5cIixcbiAgICAgICAgICAgICAgZWRnZS53LFxuICAgICAgICAgICAgICBcIiByb290SWQ6IFwiLFxuICAgICAgICAgICAgICByb290SWQsXG4gICAgICAgICAgICAgIFwiIGNsdXN0ZXJJZDpcIixcbiAgICAgICAgICAgICAgY2x1c3RlcklkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcIlJlbW92aW5nIG5vZGVcIiwgbm9kZSk7XG4gICAgZ3JhcGgucmVtb3ZlTm9kZShub2RlKTtcbiAgfSk7XG59LCBcImNvcHlcIik7XG52YXIgZXh0cmFjdERlc2NlbmRhbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQsIGdyYXBoKSA9PiB7XG4gIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICBsZXQgcmVzID0gWy4uLmNoaWxkcmVuXTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHBhcmVudHNbY2hpbGRdID0gaWQ7XG4gICAgcmVzID0gWy4uLnJlcywgLi4uZXh0cmFjdERlc2NlbmRhbnRzKGNoaWxkLCBncmFwaCldO1xuICB9XG4gIHJldHVybiByZXM7XG59LCBcImV4dHJhY3REZXNjZW5kYW50c1wiKTtcbnZhciBmaW5kTm9uQ2x1c3RlckNoaWxkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQsIGdyYXBoKSA9PiB7XG4gIGxvZy50cmFjZShcIlNlYXJjaGluZ1wiLCBpZCk7XG4gIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICBsb2cudHJhY2UoXCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgXCIsIGlkLCBjaGlsZHJlbik7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPCAxKSB7XG4gICAgbG9nLnRyYWNlKFwiVGhpcyBpcyBhIHZhbGlkIG5vZGVcIiwgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgY29uc3QgX2lkID0gZmluZE5vbkNsdXN0ZXJDaGlsZChjaGlsZCwgZ3JhcGgpO1xuICAgIGlmIChfaWQpIHtcbiAgICAgIGxvZy50cmFjZShcIkZvdW5kIHJlcGxhY2VtZW50IGZvclwiLCBpZCwgXCIgPT4gXCIsIF9pZCk7XG4gICAgICByZXR1cm4gX2lkO1xuICAgIH1cbiAgfVxufSwgXCJmaW5kTm9uQ2x1c3RlckNoaWxkXCIpO1xudmFyIGdldEFuY2hvcklkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQpID0+IHtcbiAgaWYgKCFjbHVzdGVyRGJbaWRdKSB7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGlmICghY2x1c3RlckRiW2lkXS5leHRlcm5hbENvbm5lY3Rpb25zKSB7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGlmIChjbHVzdGVyRGJbaWRdKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJEYltpZF0uaWQ7XG4gIH1cbiAgcmV0dXJuIGlkO1xufSwgXCJnZXRBbmNob3JJZFwiKTtcbnZhciBhZGp1c3RDbHVzdGVyc0FuZEVkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIGRlcHRoKSA9PiB7XG4gIGlmICghZ3JhcGggfHwgZGVwdGggPiAxMCkge1xuICAgIGxvZy5kZWJ1ZyhcIk9wdGluZyBvdXQsIG5vIGdyYXBoIFwiKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKFwiT3B0aW5nIGluLCBncmFwaCBcIik7XG4gIH1cbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihpZCk7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBcIkNsdXN0ZXIgaWRlbnRpZmllZFwiLFxuICAgICAgICBpZCxcbiAgICAgICAgXCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6IFwiLFxuICAgICAgICBmaW5kTm9uQ2x1c3RlckNoaWxkKGlkLCBncmFwaClcbiAgICAgICk7XG4gICAgICBkZXNjZW5kYW50c1tpZF0gPSBleHRyYWN0RGVzY2VuZGFudHMoaWQsIGdyYXBoKTtcbiAgICAgIGNsdXN0ZXJEYltpZF0gPSB7IGlkOiBmaW5kTm9uQ2x1c3RlckNoaWxkKGlkLCBncmFwaCksIGNsdXN0ZXJEYXRhOiBncmFwaC5ub2RlKGlkKSB9O1xuICAgIH1cbiAgfSk7XG4gIGdyYXBoLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihpZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ3JhcGguY2hpbGRyZW4oaWQpO1xuICAgIGNvbnN0IGVkZ2VzID0gZ3JhcGguZWRnZXMoKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLmRlYnVnKFwiQ2x1c3RlciBpZGVudGlmaWVkXCIsIGlkLCBkZXNjZW5kYW50cyk7XG4gICAgICBlZGdlcy5mb3JFYWNoKChlZGdlKSA9PiB7XG4gICAgICAgIGlmIChlZGdlLnYgIT09IGlkICYmIGVkZ2UudyAhPT0gaWQpIHtcbiAgICAgICAgICBjb25zdCBkMSA9IGlzRGVzY2VuZGFudChlZGdlLnYsIGlkKTtcbiAgICAgICAgICBjb25zdCBkMiA9IGlzRGVzY2VuZGFudChlZGdlLncsIGlkKTtcbiAgICAgICAgICBpZiAoZDEgXiBkMikge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJFZGdlOiBcIiwgZWRnZSwgXCIgbGVhdmVzIGNsdXN0ZXIgXCIsIGlkKTtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRGVzY2VuZGFudHMgb2YgWFhYIFwiLCBpZCwgXCI6IFwiLCBkZXNjZW5kYW50c1tpZF0pO1xuICAgICAgICAgICAgY2x1c3RlckRiW2lkXS5leHRlcm5hbENvbm5lY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZGVidWcoXCJOb3QgYSBjbHVzdGVyIFwiLCBpZCwgZGVzY2VuZGFudHMpO1xuICAgIH1cbiAgfSk7XG4gIGZvciAobGV0IGlkIG9mIE9iamVjdC5rZXlzKGNsdXN0ZXJEYikpIHtcbiAgICBjb25zdCBub25DbHVzdGVyQ2hpbGQgPSBjbHVzdGVyRGJbaWRdLmlkO1xuICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudChub25DbHVzdGVyQ2hpbGQpO1xuICAgIGlmIChwYXJlbnQgIT09IGlkICYmIGNsdXN0ZXJEYltwYXJlbnRdICYmICFjbHVzdGVyRGJbcGFyZW50XS5leHRlcm5hbENvbm5lY3Rpb25zKSB7XG4gICAgICBjbHVzdGVyRGJbaWRdLmlkID0gcGFyZW50O1xuICAgIH1cbiAgfVxuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgIGxvZy53YXJuKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGguZWRnZShlKSkpO1xuICAgIGxldCB2ID0gZS52O1xuICAgIGxldCB3ID0gZS53O1xuICAgIGxvZy53YXJuKFxuICAgICAgXCJGaXggWFhYXCIsXG4gICAgICBjbHVzdGVyRGIsXG4gICAgICBcImlkczpcIixcbiAgICAgIGUudixcbiAgICAgIGUudyxcbiAgICAgIFwiVHJhbnNsYXRpbmc6IFwiLFxuICAgICAgY2x1c3RlckRiW2Uudl0sXG4gICAgICBcIiAtLS0gXCIsXG4gICAgICBjbHVzdGVyRGJbZS53XVxuICAgICk7XG4gICAgaWYgKGNsdXN0ZXJEYltlLnZdICYmIGNsdXN0ZXJEYltlLnddICYmIGNsdXN0ZXJEYltlLnZdID09PSBjbHVzdGVyRGJbZS53XSkge1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYXCIsIGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgbG9nLndhcm4oXCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFhcIiwgZS52LCBlLncsIGUubmFtZSk7XG4gICAgICB2ID0gZ2V0QW5jaG9ySWQoZS52KTtcbiAgICAgIHcgPSBnZXRBbmNob3JJZChlLncpO1xuICAgICAgZ3JhcGgucmVtb3ZlRWRnZShlLnYsIGUudywgZS5uYW1lKTtcbiAgICAgIGNvbnN0IHNwZWNpYWxJZCA9IGUudyArIFwiLS0tXCIgKyBlLnY7XG4gICAgICBncmFwaC5zZXROb2RlKHNwZWNpYWxJZCwge1xuICAgICAgICBkb21JZDogc3BlY2lhbElkLFxuICAgICAgICBpZDogc3BlY2lhbElkLFxuICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICBsYWJlbFRleHQ6IGVkZ2UubGFiZWwsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHNoYXBlOiBcImxhYmVsUmVjdFwiLFxuICAgICAgICBzdHlsZTogXCJcIlxuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGdlMSA9IHN0cnVjdHVyZWRDbG9uZShlZGdlKTtcbiAgICAgIGNvbnN0IGVkZ2UyID0gc3RydWN0dXJlZENsb25lKGVkZ2UpO1xuICAgICAgZWRnZTEubGFiZWwgPSBcIlwiO1xuICAgICAgZWRnZTEuYXJyb3dUeXBlRW5kID0gXCJub25lXCI7XG4gICAgICBlZGdlMi5sYWJlbCA9IFwiXCI7XG4gICAgICBlZGdlMS5mcm9tQ2x1c3RlciA9IGUudjtcbiAgICAgIGVkZ2UyLnRvQ2x1c3RlciA9IGUudjtcbiAgICAgIGdyYXBoLnNldEVkZ2Uodiwgc3BlY2lhbElkLCBlZGdlMSwgZS5uYW1lICsgXCItY3ljbGljLXNwZWNpYWxcIik7XG4gICAgICBncmFwaC5zZXRFZGdlKHNwZWNpYWxJZCwgdywgZWRnZTIsIGUubmFtZSArIFwiLWN5Y2xpYy1zcGVjaWFsXCIpO1xuICAgIH0gZWxzZSBpZiAoY2x1c3RlckRiW2Uudl0gfHwgY2x1c3RlckRiW2Uud10pIHtcbiAgICAgIGxvZy53YXJuKFwiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYXCIsIGUudiwgZS53LCBlLm5hbWUpO1xuICAgICAgdiA9IGdldEFuY2hvcklkKGUudik7XG4gICAgICB3ID0gZ2V0QW5jaG9ySWQoZS53KTtcbiAgICAgIGdyYXBoLnJlbW92ZUVkZ2UoZS52LCBlLncsIGUubmFtZSk7XG4gICAgICBpZiAodiAhPT0gZS52KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudCh2KTtcbiAgICAgICAgY2x1c3RlckRiW3BhcmVudF0uZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIGVkZ2UuZnJvbUNsdXN0ZXIgPSBlLnY7XG4gICAgICB9XG4gICAgICBpZiAodyAhPT0gZS53KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdyYXBoLnBhcmVudCh3KTtcbiAgICAgICAgY2x1c3RlckRiW3BhcmVudF0uZXh0ZXJuYWxDb25uZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIGVkZ2UudG9DbHVzdGVyID0gZS53O1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oXCJGaXggUmVwbGFjaW5nIHdpdGggWFhYXCIsIHYsIHcsIGUubmFtZSk7XG4gICAgICBncmFwaC5zZXRFZGdlKHYsIHcsIGVkZ2UsIGUubmFtZSk7XG4gICAgfVxuICB9KTtcbiAgbG9nLndhcm4oXCJBZGp1c3RlZCBHcmFwaFwiLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpKTtcbiAgZXh0cmFjdG9yKGdyYXBoLCAwKTtcbiAgbG9nLnRyYWNlKGNsdXN0ZXJEYik7XG59LCBcImFkanVzdENsdXN0ZXJzQW5kRWRnZXNcIik7XG52YXIgZXh0cmFjdG9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZ3JhcGgsIGRlcHRoKSA9PiB7XG4gIGxvZy53YXJuKFwiZXh0cmFjdG9yIC0gXCIsIGRlcHRoLCBncmFwaGxpYkpzb24ud3JpdGUoZ3JhcGgpLCBncmFwaC5jaGlsZHJlbihcIkRcIikpO1xuICBpZiAoZGVwdGggPiAxMCkge1xuICAgIGxvZy5lcnJvcihcIkJhaWxpbmcgb3V0XCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbm9kZXMgPSBncmFwaC5ub2RlcygpO1xuICBsZXQgaGFzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBncmFwaC5jaGlsZHJlbihub2RlKTtcbiAgICBoYXNDaGlsZHJlbiA9IGhhc0NoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gIH1cbiAgaWYgKCFoYXNDaGlsZHJlbikge1xuICAgIGxvZy5kZWJ1ZyhcIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuXCIsIGdyYXBoLm5vZGVzKCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2cuZGVidWcoXCJOb2RlcyA9IFwiLCBub2RlcywgZGVwdGgpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcIkV4dHJhY3Rpbmcgbm9kZVwiLFxuICAgICAgbm9kZSxcbiAgICAgIGNsdXN0ZXJEYixcbiAgICAgIGNsdXN0ZXJEYltub2RlXSAmJiAhY2x1c3RlckRiW25vZGVdLmV4dGVybmFsQ29ubmVjdGlvbnMsXG4gICAgICAhZ3JhcGgucGFyZW50KG5vZGUpLFxuICAgICAgZ3JhcGgubm9kZShub2RlKSxcbiAgICAgIGdyYXBoLmNoaWxkcmVuKFwiRFwiKSxcbiAgICAgIFwiIERlcHRoIFwiLFxuICAgICAgZGVwdGhcbiAgICApO1xuICAgIGlmICghY2x1c3RlckRiW25vZGVdKSB7XG4gICAgICBsb2cuZGVidWcoXCJOb3QgYSBjbHVzdGVyXCIsIG5vZGUsIGRlcHRoKTtcbiAgICB9IGVsc2UgaWYgKCFjbHVzdGVyRGJbbm9kZV0uZXh0ZXJuYWxDb25uZWN0aW9ucyAmJiAvLyAhZ3JhcGgucGFyZW50KG5vZGUpICYmXG4gICAgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIFwiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuXCIsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGRlcHRoXG4gICAgICApO1xuICAgICAgY29uc3QgZ3JhcGhTZXR0aW5ncyA9IGdyYXBoLmdyYXBoKCk7XG4gICAgICBsZXQgZGlyID0gZ3JhcGhTZXR0aW5ncy5yYW5rZGlyID09PSBcIlRCXCIgPyBcIkxSXCIgOiBcIlRCXCI7XG4gICAgICBpZiAoY2x1c3RlckRiW25vZGVdPy5jbHVzdGVyRGF0YT8uZGlyKSB7XG4gICAgICAgIGRpciA9IGNsdXN0ZXJEYltub2RlXS5jbHVzdGVyRGF0YS5kaXI7XG4gICAgICAgIGxvZy53YXJuKFwiRml4aW5nIGRpclwiLCBjbHVzdGVyRGJbbm9kZV0uY2x1c3RlckRhdGEuZGlyLCBkaXIpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2x1c3RlckdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgICAgY29tcG91bmQ6IHRydWVcbiAgICAgIH0pLnNldEdyYXBoKHtcbiAgICAgICAgcmFua2RpcjogZGlyLFxuICAgICAgICAvLyBUb2RvOiBzZXQgcHJvcGVyIHNwYWNpbmdcbiAgICAgICAgbm9kZXNlcDogNTAsXG4gICAgICAgIHJhbmtzZXA6IDUwLFxuICAgICAgICBtYXJnaW54OiA4LFxuICAgICAgICBtYXJnaW55OiA4XG4gICAgICB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcbiAgICAgIGxvZy53YXJuKFwiT2xkIGdyYXBoIGJlZm9yZSBjb3B5XCIsIGdyYXBobGliSnNvbi53cml0ZShncmFwaCkpO1xuICAgICAgY29weShub2RlLCBncmFwaCwgY2x1c3RlckdyYXBoLCBub2RlKTtcbiAgICAgIGdyYXBoLnNldE5vZGUobm9kZSwge1xuICAgICAgICBjbHVzdGVyTm9kZTogdHJ1ZSxcbiAgICAgICAgaWQ6IG5vZGUsXG4gICAgICAgIGNsdXN0ZXJEYXRhOiBjbHVzdGVyRGJbbm9kZV0uY2x1c3RlckRhdGEsXG4gICAgICAgIGxhYmVsVGV4dDogY2x1c3RlckRiW25vZGVdLmxhYmVsVGV4dCxcbiAgICAgICAgZ3JhcGg6IGNsdXN0ZXJHcmFwaFxuICAgICAgfSk7XG4gICAgICBsb2cud2FybihcIk5ldyBncmFwaCBhZnRlciBjb3B5IG5vZGU6IChcIiwgbm9kZSwgXCIpXCIsIGdyYXBobGliSnNvbi53cml0ZShjbHVzdGVyR3JhcGgpKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIk9sZCBncmFwaCBhZnRlciBjb3B5XCIsIGdyYXBobGliSnNvbi53cml0ZShncmFwaCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgXCJDbHVzdGVyICoqIFwiLFxuICAgICAgICBub2RlLFxuICAgICAgICBcIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczpcIixcbiAgICAgICAgIWNsdXN0ZXJEYltub2RlXS5leHRlcm5hbENvbm5lY3Rpb25zLFxuICAgICAgICBcIiBubyBwYXJlbnQ6IFwiLFxuICAgICAgICAhZ3JhcGgucGFyZW50KG5vZGUpLFxuICAgICAgICBcIiBjaGlsZHJlbiBcIixcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4obm9kZSkgJiYgZ3JhcGguY2hpbGRyZW4obm9kZSkubGVuZ3RoID4gMCxcbiAgICAgICAgZ3JhcGguY2hpbGRyZW4oXCJEXCIpLFxuICAgICAgICBkZXB0aFxuICAgICAgKTtcbiAgICAgIGxvZy5kZWJ1ZyhjbHVzdGVyRGIpO1xuICAgIH1cbiAgfVxuICBub2RlcyA9IGdyYXBoLm5vZGVzKCk7XG4gIGxvZy53YXJuKFwiTmV3IGxpc3Qgb2Ygbm9kZXNcIiwgbm9kZXMpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBkYXRhID0gZ3JhcGgubm9kZShub2RlKTtcbiAgICBsb2cud2FybihcIiBOb3cgbmV4dCBsZXZlbFwiLCBub2RlLCBkYXRhKTtcbiAgICBpZiAoZGF0YS5jbHVzdGVyTm9kZSkge1xuICAgICAgZXh0cmFjdG9yKGRhdGEuZ3JhcGgsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9XG59LCBcImV4dHJhY3RvclwiKTtcbnZhciBzb3J0ZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChncmFwaCwgbm9kZXMpID0+IHtcbiAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbihub2Rlcyk7XG4gIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdyYXBoLmNoaWxkcmVuKG5vZGUpO1xuICAgIGNvbnN0IHNvcnRlZCA9IHNvcnRlcihncmFwaCwgY2hpbGRyZW4pO1xuICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIC4uLnNvcnRlZF07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSwgXCJzb3J0ZXJcIik7XG52YXIgc29ydE5vZGVzQnlIaWVyYXJjaHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChncmFwaCkgPT4gc29ydGVyKGdyYXBoLCBncmFwaC5jaGlsZHJlbigpKSwgXCJzb3J0Tm9kZXNCeUhpZXJhcmNoeVwiKTtcblxuLy8gc3JjL2RhZ3JlLXdyYXBwZXIvY2x1c3RlcnMuanNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xudmFyIHJlY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgbG9nLmluZm8oXCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciBcIiwgbm9kZS5pZCwgbm9kZSk7XG4gIGNvbnN0IHNpdGVDb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyXCIgKyAobm9kZS5jbGFzcyA/IFwiIFwiICsgbm9kZS5jbGFzcyA6IFwiXCIpKS5hdHRyKFwiaWRcIiwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgdXNlSHRtbExhYmVscyA9IGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpO1xuICBjb25zdCBsYWJlbCA9IHNoYXBlU3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiY2x1c3Rlci1sYWJlbFwiKTtcbiAgY29uc3QgdGV4dCA9IG5vZGUubGFiZWxUeXBlID09PSBcIm1hcmtkb3duXCIgPyBjcmVhdGVUZXh0KGxhYmVsLCBub2RlLmxhYmVsVGV4dCwgeyBzdHlsZTogbm9kZS5sYWJlbFN0eWxlLCB1c2VIdG1sTGFiZWxzIH0sIHNpdGVDb25maWcpIDogbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsX2RlZmF1bHQobm9kZS5sYWJlbFRleHQsIG5vZGUubGFiZWxTdHlsZSwgdm9pZCAwLCB0cnVlKSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QodGV4dCk7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgY29uc3QgcGFkZGluZyA9IDAgKiBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gcGFkZGluZyAvIDI7XG4gIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCA8PSBiYm94LndpZHRoICsgcGFkZGluZyA/IGJib3gud2lkdGggKyBwYWRkaW5nIDogbm9kZS53aWR0aDtcbiAgaWYgKG5vZGUud2lkdGggPD0gYmJveC53aWR0aCArIHBhZGRpbmcpIHtcbiAgICBub2RlLmRpZmYgPSAoYmJveC53aWR0aCAtIG5vZGUud2lkdGgpIC8gMiAtIG5vZGUucGFkZGluZyAvIDI7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5kaWZmID0gLW5vZGUucGFkZGluZyAvIDI7XG4gIH1cbiAgbG9nLnRyYWNlKFwiRGF0YSBcIiwgbm9kZSwgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICByZWN0Mi5hdHRyKFwic3R5bGVcIiwgbm9kZS5zdHlsZSkuYXR0cihcInJ4XCIsIG5vZGUucngpLmF0dHIoXCJyeVwiLCBub2RlLnJ5KS5hdHRyKFwieFwiLCBub2RlLnggLSB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKTtcbiAgY29uc3QgeyBzdWJHcmFwaFRpdGxlVG9wTWFyZ2luIH0gPSBnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyhzaXRlQ29uZmlnKTtcbiAgaWYgKHVzZUh0bWxMYWJlbHMpIHtcbiAgICBsYWJlbC5hdHRyKFxuICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgIC8vIFRoaXMgcHV0cyB0aGUgbGFiZWwgb24gdG9wIG9mIHRoZSBib3ggaW5zdGVhZCBvZiBpbnNpZGUgaXRcbiAgICAgIGB0cmFuc2xhdGUoJHtub2RlLnggLSBiYm94LndpZHRoIC8gMn0sICR7bm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyICsgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbn0pYFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbGFiZWwuYXR0cihcbiAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAvLyBUaGlzIHB1dHMgdGhlIGxhYmVsIG9uIHRvcCBvZiB0aGUgYm94IGluc3RlYWQgb2YgaW5zaWRlIGl0XG4gICAgICBgdHJhbnNsYXRlKCR7bm9kZS54fSwgJHtub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgKyBzdWJHcmFwaFRpdGxlVG9wTWFyZ2lufSlgXG4gICAgKTtcbiAgfVxuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS53aWR0aCA9IHJlY3RCb3gud2lkdGg7XG4gIG5vZGUuaGVpZ2h0ID0gcmVjdEJveC5oZWlnaHQ7XG4gIG5vZGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0X3JlY3RfZGVmYXVsdChub2RlLCBwb2ludCk7XG4gIH07XG4gIHJldHVybiBzaGFwZVN2Zztcbn0sIFwicmVjdFwiKTtcbnZhciBub3RlR3JvdXAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub3RlLWNsdXN0ZXJcIikuYXR0cihcImlkXCIsIG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IHBhZGRpbmcgPSAwICogbm9kZS5wYWRkaW5nO1xuICBjb25zdCBoYWxmUGFkZGluZyA9IHBhZGRpbmcgLyAyO1xuICByZWN0Mi5hdHRyKFwicnhcIiwgbm9kZS5yeCkuYXR0cihcInJ5XCIsIG5vZGUucnkpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIG5vZGUud2lkdGggLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ5XCIsIG5vZGUueSAtIG5vZGUuaGVpZ2h0IC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgbm9kZS53aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKS5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gIGNvbnN0IHJlY3RCb3ggPSByZWN0Mi5ub2RlKCkuZ2V0QkJveCgpO1xuICBub2RlLndpZHRoID0gcmVjdEJveC53aWR0aDtcbiAgbm9kZS5oZWlnaHQgPSByZWN0Qm94LmhlaWdodDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJub3RlR3JvdXBcIik7XG52YXIgcm91bmRlZFdpdGhUaXRsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcmVudCwgbm9kZSkgPT4ge1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IHNoYXBlU3ZnID0gcGFyZW50Lmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIG5vZGUuY2xhc3NlcykuYXR0cihcImlkXCIsIG5vZGUuaWQpO1xuICBjb25zdCByZWN0MiA9IHNoYXBlU3ZnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIik7XG4gIGNvbnN0IGxhYmVsID0gc2hhcGVTdmcuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyLWxhYmVsXCIpO1xuICBjb25zdCBpbm5lclJlY3QgPSBzaGFwZVN2Zy5hcHBlbmQoXCJyZWN0XCIpO1xuICBjb25zdCB0ZXh0ID0gbGFiZWwubm9kZSgpLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsX2RlZmF1bHQobm9kZS5sYWJlbFRleHQsIG5vZGUubGFiZWxTdHlsZSwgdm9pZCAwLCB0cnVlKSk7XG4gIGxldCBiYm94ID0gdGV4dC5nZXRCQm94KCk7XG4gIGlmIChldmFsdWF0ZShzaXRlQ29uZmlnLmZsb3djaGFydC5odG1sTGFiZWxzKSkge1xuICAgIGNvbnN0IGRpdiA9IHRleHQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZHYgPSBzZWxlY3QodGV4dCk7XG4gICAgYmJveCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBkdi5hdHRyKFwid2lkdGhcIiwgYmJveC53aWR0aCk7XG4gICAgZHYuYXR0cihcImhlaWdodFwiLCBiYm94LmhlaWdodCk7XG4gIH1cbiAgYmJveCA9IHRleHQuZ2V0QkJveCgpO1xuICBjb25zdCBwYWRkaW5nID0gMCAqIG5vZGUucGFkZGluZztcbiAgY29uc3QgaGFsZlBhZGRpbmcgPSBwYWRkaW5nIC8gMjtcbiAgY29uc3Qgd2lkdGggPSBub2RlLndpZHRoIDw9IGJib3gud2lkdGggKyBub2RlLnBhZGRpbmcgPyBiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nIDogbm9kZS53aWR0aDtcbiAgaWYgKG5vZGUud2lkdGggPD0gYmJveC53aWR0aCArIG5vZGUucGFkZGluZykge1xuICAgIG5vZGUuZGlmZiA9IChiYm94LndpZHRoICsgbm9kZS5wYWRkaW5nICogMCAtIG5vZGUud2lkdGgpIC8gMjtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nIC8gMjtcbiAgfVxuICByZWN0Mi5hdHRyKFwiY2xhc3NcIiwgXCJvdXRlclwiKS5hdHRyKFwieFwiLCBub2RlLnggLSB3aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyIC0gaGFsZlBhZGRpbmcpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKTtcbiAgaW5uZXJSZWN0LmF0dHIoXCJjbGFzc1wiLCBcImlubmVyXCIpLmF0dHIoXCJ4XCIsIG5vZGUueCAtIHdpZHRoIC8gMiAtIGhhbGZQYWRkaW5nKS5hdHRyKFwieVwiLCBub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBoYWxmUGFkZGluZyArIGJib3guaGVpZ2h0IC0gMSkuYXR0cihcIndpZHRoXCIsIHdpZHRoICsgcGFkZGluZykuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCArIHBhZGRpbmcgLSBiYm94LmhlaWdodCAtIDMpO1xuICBjb25zdCB7IHN1YkdyYXBoVGl0bGVUb3BNYXJnaW4gfSA9IGdldFN1YkdyYXBoVGl0bGVNYXJnaW5zKHNpdGVDb25maWcpO1xuICBsYWJlbC5hdHRyKFxuICAgIFwidHJhbnNmb3JtXCIsXG4gICAgYHRyYW5zbGF0ZSgke25vZGUueCAtIGJib3gud2lkdGggLyAyfSwgJHtub2RlLnkgLSBub2RlLmhlaWdodCAvIDIgLSBub2RlLnBhZGRpbmcgLyAzICsgKGV2YWx1YXRlKHNpdGVDb25maWcuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpID8gNSA6IDMpICsgc3ViR3JhcGhUaXRsZVRvcE1hcmdpbn0pYFxuICApO1xuICBjb25zdCByZWN0Qm94ID0gcmVjdDIubm9kZSgpLmdldEJCb3goKTtcbiAgbm9kZS5oZWlnaHQgPSByZWN0Qm94LmhlaWdodDtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJyb3VuZGVkV2l0aFRpdGxlXCIpO1xudmFyIGRpdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUpID0+IHtcbiAgY29uc3Qgc2hhcGVTdmcgPSBwYXJlbnQuaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgbm9kZS5jbGFzc2VzKS5hdHRyKFwiaWRcIiwgbm9kZS5pZCk7XG4gIGNvbnN0IHJlY3QyID0gc2hhcGVTdmcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKTtcbiAgY29uc3QgcGFkZGluZyA9IDAgKiBub2RlLnBhZGRpbmc7XG4gIGNvbnN0IGhhbGZQYWRkaW5nID0gcGFkZGluZyAvIDI7XG4gIHJlY3QyLmF0dHIoXCJjbGFzc1wiLCBcImRpdmlkZXJcIikuYXR0cihcInhcIiwgbm9kZS54IC0gbm9kZS53aWR0aCAvIDIgLSBoYWxmUGFkZGluZykuYXR0cihcInlcIiwgbm9kZS55IC0gbm9kZS5oZWlnaHQgLyAyKS5hdHRyKFwid2lkdGhcIiwgbm9kZS53aWR0aCArIHBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgbm9kZS5oZWlnaHQgKyBwYWRkaW5nKTtcbiAgY29uc3QgcmVjdEJveCA9IHJlY3QyLm5vZGUoKS5nZXRCQm94KCk7XG4gIG5vZGUud2lkdGggPSByZWN0Qm94LndpZHRoO1xuICBub2RlLmhlaWdodCA9IHJlY3RCb3guaGVpZ2h0O1xuICBub2RlLmRpZmYgPSAtbm9kZS5wYWRkaW5nIC8gMjtcbiAgbm9kZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBpbnRlcnNlY3RfcmVjdF9kZWZhdWx0KG5vZGUsIHBvaW50KTtcbiAgfTtcbiAgcmV0dXJuIHNoYXBlU3ZnO1xufSwgXCJkaXZpZGVyXCIpO1xudmFyIHNoYXBlcyA9IHsgcmVjdCwgcm91bmRlZFdpdGhUaXRsZSwgbm90ZUdyb3VwLCBkaXZpZGVyIH07XG52YXIgY2x1c3RlckVsZW1zID0ge307XG52YXIgaW5zZXJ0Q2x1c3RlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGVsZW0sIG5vZGUpID0+IHtcbiAgbG9nLnRyYWNlKFwiSW5zZXJ0aW5nIGNsdXN0ZXJcIik7XG4gIGNvbnN0IHNoYXBlID0gbm9kZS5zaGFwZSB8fCBcInJlY3RcIjtcbiAgY2x1c3RlckVsZW1zW25vZGUuaWRdID0gc2hhcGVzW3NoYXBlXShlbGVtLCBub2RlKTtcbn0sIFwiaW5zZXJ0Q2x1c3RlclwiKTtcbnZhciBjbGVhcjQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY2x1c3RlckVsZW1zID0ge307XG59LCBcImNsZWFyXCIpO1xuXG4vLyBzcmMvZGFncmUtd3JhcHBlci9pbmRleC5qc1xudmFyIHJlY3Vyc2l2ZVJlbmRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKF9lbGVtLCBncmFwaCwgZGlhZ3JhbVR5cGUsIGlkLCBwYXJlbnRDbHVzdGVyLCBzaXRlQ29uZmlnKSA9PiB7XG4gIGxvZy5pbmZvKFwiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjogWFhYXCIsIGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpLCBwYXJlbnRDbHVzdGVyKTtcbiAgY29uc3QgZGlyID0gZ3JhcGguZ3JhcGgoKS5yYW5rZGlyO1xuICBsb2cudHJhY2UoXCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjpcIiwgZGlyKTtcbiAgY29uc3QgZWxlbSA9IF9lbGVtLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwicm9vdFwiKTtcbiAgaWYgKCFncmFwaC5ub2RlcygpKSB7XG4gICAgbG9nLmluZm8oXCJObyBub2RlcyBmb3VuZCBmb3JcIiwgZ3JhcGgpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFwiUmVjdXJzaXZlIHJlbmRlciBYWFhcIiwgZ3JhcGgubm9kZXMoKSk7XG4gIH1cbiAgaWYgKGdyYXBoLmVkZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgIGxvZy50cmFjZShcIlJlY3Vyc2l2ZSBlZGdlc1wiLCBncmFwaC5lZGdlKGdyYXBoLmVkZ2VzKClbMF0pKTtcbiAgfVxuICBjb25zdCBjbHVzdGVycyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJjbHVzdGVyc1wiKTtcbiAgY29uc3QgZWRnZVBhdGhzID0gZWxlbS5pbnNlcnQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVkZ2VQYXRoc1wiKTtcbiAgY29uc3QgZWRnZUxhYmVscyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlTGFiZWxzXCIpO1xuICBjb25zdCBub2RlcyA9IGVsZW0uaW5zZXJ0KFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2Rlc1wiKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZ3JhcGgubm9kZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24odikge1xuICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLm5vZGUodik7XG4gICAgICBpZiAocGFyZW50Q2x1c3RlciAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBhcmVudENsdXN0ZXIuY2x1c3RlckRhdGEpKTtcbiAgICAgICAgbG9nLmluZm8oXCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYIChcIiwgdiwgXCIpIFwiLCBkYXRhLCBwYXJlbnRDbHVzdGVyKTtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShwYXJlbnRDbHVzdGVyLmlkLCBkYXRhKTtcbiAgICAgICAgaWYgKCFncmFwaC5wYXJlbnQodikpIHtcbiAgICAgICAgICBsb2cudHJhY2UoXCJTZXR0aW5nIHBhcmVudFwiLCB2LCBwYXJlbnRDbHVzdGVyLmlkKTtcbiAgICAgICAgICBncmFwaC5zZXRQYXJlbnQodiwgcGFyZW50Q2x1c3Rlci5pZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKFwiKEluc2VydCkgTm9kZSBYWFhcIiArIHYgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5ub2RlKHYpKSk7XG4gICAgICBpZiAobm9kZT8uY2x1c3Rlck5vZGUpIHtcbiAgICAgICAgbG9nLmluZm8oXCJDbHVzdGVyIGlkZW50aWZpZWRcIiwgdiwgbm9kZS53aWR0aCwgZ3JhcGgubm9kZSh2KSk7XG4gICAgICAgIGNvbnN0IHsgcmFua3NlcCwgbm9kZXNlcCB9ID0gZ3JhcGguZ3JhcGgoKTtcbiAgICAgICAgbm9kZS5ncmFwaC5zZXRHcmFwaCh7XG4gICAgICAgICAgLi4ubm9kZS5ncmFwaC5ncmFwaCgpLFxuICAgICAgICAgIHJhbmtzZXAsXG4gICAgICAgICAgbm9kZXNlcFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbyA9IGF3YWl0IHJlY3Vyc2l2ZVJlbmRlcihcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBub2RlLmdyYXBoLFxuICAgICAgICAgIGRpYWdyYW1UeXBlLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGdyYXBoLm5vZGUodiksXG4gICAgICAgICAgc2l0ZUNvbmZpZ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdFbCA9IG8uZWxlbTtcbiAgICAgICAgdXBkYXRlTm9kZUJvdW5kcyhub2RlLCBuZXdFbCk7XG4gICAgICAgIG5vZGUuZGlmZiA9IG8uZGlmZiB8fCAwO1xuICAgICAgICBsb2cuaW5mbyhcIk5vZGUgYm91bmRzIChhYmMxMjMpXCIsIHYsIG5vZGUsIG5vZGUud2lkdGgsIG5vZGUueCwgbm9kZS55KTtcbiAgICAgICAgc2V0Tm9kZUVsZW0obmV3RWwsIG5vZGUpO1xuICAgICAgICBsb2cud2FybihcIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUgXCIsIG5ld0VsLCBub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChncmFwaC5jaGlsZHJlbih2KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oXCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFhcIiwgdiwgbm9kZS5pZCwgbm9kZSwgZ3JhcGgpO1xuICAgICAgICAgIGxvZy5pbmZvKGZpbmROb25DbHVzdGVyQ2hpbGQobm9kZS5pZCwgZ3JhcGgpKTtcbiAgICAgICAgICBjbHVzdGVyRGJbbm9kZS5pZF0gPSB7IGlkOiBmaW5kTm9uQ2x1c3RlckNoaWxkKG5vZGUuaWQsIGdyYXBoKSwgbm9kZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5pbmZvKFwiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGhcIiwgdiwgbm9kZS5pZCwgbm9kZSk7XG4gICAgICAgICAgYXdhaXQgaW5zZXJ0Tm9kZShub2RlcywgZ3JhcGgubm9kZSh2KSwgZGlyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG4gIGdyYXBoLmVkZ2VzKCkuZm9yRWFjaChhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgZWRnZSA9IGdyYXBoLmVkZ2UoZS52LCBlLncsIGUubmFtZSk7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIsIGUsIFwiIFwiLCBKU09OLnN0cmluZ2lmeShncmFwaC5lZGdlKGUpKSk7XG4gICAgbG9nLmluZm8oXCJGaXhcIiwgY2x1c3RlckRiLCBcImlkczpcIiwgZS52LCBlLncsIFwiVHJhbnNsYXRpbmc6IFwiLCBjbHVzdGVyRGJbZS52XSwgY2x1c3RlckRiW2Uud10pO1xuICAgIGF3YWl0IGluc2VydEVkZ2VMYWJlbChlZGdlTGFiZWxzLCBlZGdlKTtcbiAgfSk7XG4gIGdyYXBoLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgbG9nLmluZm8oXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShlKSk7XG4gIH0pO1xuICBsb2cuaW5mbyhcIkdyYXBoIGJlZm9yZSBsYXlvdXQ6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGxvZy5pbmZvKFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCIpO1xuICBsb2cuaW5mbyhcIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjI1wiKTtcbiAgbG9nLmluZm8oXCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcIik7XG4gIGxvZy5pbmZvKGdyYXBoKTtcbiAgZGFncmVMYXlvdXQoZ3JhcGgpO1xuICBsb2cuaW5mbyhcIkdyYXBoIGFmdGVyIGxheW91dDpcIiwgSlNPTi5zdHJpbmdpZnkoZ3JhcGhsaWJKc29uMi53cml0ZShncmFwaCkpKTtcbiAgbGV0IGRpZmYgPSAwO1xuICBjb25zdCB7IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiB9ID0gZ2V0U3ViR3JhcGhUaXRsZU1hcmdpbnMoc2l0ZUNvbmZpZyk7XG4gIHNvcnROb2Rlc0J5SGllcmFyY2h5KGdyYXBoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBub2RlID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyhcIlBvc2l0aW9uIFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLm5vZGUodikpKTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIFwiUG9zaXRpb24gXCIgKyB2ICsgXCI6IChcIiArIG5vZGUueCxcbiAgICAgIFwiLFwiICsgbm9kZS55LFxuICAgICAgXCIpIHdpZHRoOiBcIixcbiAgICAgIG5vZGUud2lkdGgsXG4gICAgICBcIiBoZWlnaHQ6IFwiLFxuICAgICAgbm9kZS5oZWlnaHRcbiAgICApO1xuICAgIGlmIChub2RlPy5jbHVzdGVyTm9kZSkge1xuICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjtcbiAgICAgIHBvc2l0aW9uTm9kZShub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGdyYXBoLmNoaWxkcmVuKHYpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9kZS5oZWlnaHQgKz0gc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luO1xuICAgICAgICBpbnNlcnRDbHVzdGVyKGNsdXN0ZXJzLCBub2RlKTtcbiAgICAgICAgY2x1c3RlckRiW25vZGUuaWRdLm5vZGUgPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiAvIDI7XG4gICAgICAgIHBvc2l0aW9uTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IGVkZ2UgPSBncmFwaC5lZGdlKGUpO1xuICAgIGxvZy5pbmZvKFwiRWRnZSBcIiArIGUudiArIFwiIC0+IFwiICsgZS53ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZWRnZSksIGVkZ2UpO1xuICAgIGVkZ2UucG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiBwb2ludC55ICs9IHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbiAvIDIpO1xuICAgIGNvbnN0IHBhdGhzID0gaW5zZXJ0RWRnZShlZGdlUGF0aHMsIGUsIGVkZ2UsIGNsdXN0ZXJEYiwgZGlhZ3JhbVR5cGUsIGdyYXBoLCBpZCk7XG4gICAgcG9zaXRpb25FZGdlTGFiZWwoZWRnZSwgcGF0aHMpO1xuICB9KTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBjb25zdCBuID0gZ3JhcGgubm9kZSh2KTtcbiAgICBsb2cuaW5mbyh2LCBuLnR5cGUsIG4uZGlmZik7XG4gICAgaWYgKG4udHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICBkaWZmID0gbi5kaWZmO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7IGVsZW0sIGRpZmYgfTtcbn0sIFwicmVjdXJzaXZlUmVuZGVyXCIpO1xudmFyIHJlbmRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGVsZW0sIGdyYXBoLCBtYXJrZXJzLCBkaWFncmFtVHlwZSwgaWQpID0+IHtcbiAgbWFya2Vyc19kZWZhdWx0KGVsZW0sIG1hcmtlcnMsIGRpYWdyYW1UeXBlLCBpZCk7XG4gIGNsZWFyKCk7XG4gIGNsZWFyMigpO1xuICBjbGVhcjQoKTtcbiAgY2xlYXIzKCk7XG4gIGxvZy53YXJuKFwiR3JhcGggYXQgZmlyc3Q6XCIsIEpTT04uc3RyaW5naWZ5KGdyYXBobGliSnNvbjIud3JpdGUoZ3JhcGgpKSk7XG4gIGFkanVzdENsdXN0ZXJzQW5kRWRnZXMoZ3JhcGgpO1xuICBsb2cud2FybihcIkdyYXBoIGFmdGVyOlwiLCBKU09OLnN0cmluZ2lmeShncmFwaGxpYkpzb24yLndyaXRlKGdyYXBoKSkpO1xuICBjb25zdCBzaXRlQ29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGF3YWl0IHJlY3Vyc2l2ZVJlbmRlcihlbGVtLCBncmFwaCwgZGlhZ3JhbVR5cGUsIGlkLCB2b2lkIDAsIHNpdGVDb25maWcpO1xufSwgXCJyZW5kZXJcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc1JlbmRlcmVyLXYyLnRzXG52YXIgc2FuaXRpemVUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQodHh0LCBnZXRDb25maWcoKSksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIGNvbmYgPSB7XG4gIGRpdmlkZXJNYXJnaW46IDEwLFxuICBwYWRkaW5nOiA1LFxuICB0ZXh0SGVpZ2h0OiAxMCxcbiAgY3VydmU6IHZvaWQgMFxufTtcbnZhciBhZGROYW1lc3BhY2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuYW1lc3BhY2VzLCBnLCBfaWQsIGRpYWdPYmopIHtcbiAgbG9nLmluZm8oXCJrZXlzOlwiLCBbLi4ubmFtZXNwYWNlcy5rZXlzKCldKTtcbiAgbG9nLmluZm8obmFtZXNwYWNlcyk7XG4gIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbih2ZXJ0ZXgpIHtcbiAgICBjb25zdCBzaGFwZSA9IFwicmVjdFwiO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBzaGFwZSxcbiAgICAgIGlkOiB2ZXJ0ZXguaWQsXG4gICAgICBkb21JZDogdmVydGV4LmRvbUlkLFxuICAgICAgbGFiZWxUZXh0OiBzYW5pdGl6ZVRleHQodmVydGV4LmlkKSxcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBzdHlsZTogXCJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrXCIsXG4gICAgICAvLyBUT0RPIFYxMDogRmxvd2NoYXJ0ID8gS2VlcGluZyBmbG93Y2hhcnQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBSZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICBwYWRkaW5nOiBnZXRDb25maWcoKS5mbG93Y2hhcnQ/LnBhZGRpbmcgPz8gZ2V0Q29uZmlnKCkuY2xhc3M/LnBhZGRpbmdcbiAgICB9O1xuICAgIGcuc2V0Tm9kZSh2ZXJ0ZXguaWQsIG5vZGUpO1xuICAgIGFkZENsYXNzZXModmVydGV4LmNsYXNzZXMsIGcsIF9pZCwgZGlhZ09iaiwgdmVydGV4LmlkKTtcbiAgICBsb2cuaW5mbyhcInNldE5vZGVcIiwgbm9kZSk7XG4gIH0pO1xufSwgXCJhZGROYW1lc3BhY2VzXCIpO1xudmFyIGFkZENsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNsYXNzZXMsIGcsIF9pZCwgZGlhZ09iaiwgcGFyZW50KSB7XG4gIGxvZy5pbmZvKFwia2V5czpcIiwgWy4uLmNsYXNzZXMua2V5cygpXSk7XG4gIGxvZy5pbmZvKGNsYXNzZXMpO1xuICBbLi4uY2xhc3Nlcy52YWx1ZXMoKV0uZmlsdGVyKCh2ZXJ0ZXgpID0+IHZlcnRleC5wYXJlbnQgPT09IHBhcmVudCkuZm9yRWFjaChmdW5jdGlvbih2ZXJ0ZXgpIHtcbiAgICBjb25zdCBjc3NDbGFzc1N0ciA9IHZlcnRleC5jc3NDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgIGNvbnN0IHN0eWxlcyA9IGdldFN0eWxlc0Zyb21BcnJheSh2ZXJ0ZXguc3R5bGVzKTtcbiAgICBjb25zdCB2ZXJ0ZXhUZXh0ID0gdmVydGV4LmxhYmVsID8/IHZlcnRleC5pZDtcbiAgICBjb25zdCByYWRpdXMgPSAwO1xuICAgIGNvbnN0IHNoYXBlID0gXCJjbGFzc19ib3hcIjtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgbGFiZWxTdHlsZTogc3R5bGVzLmxhYmVsU3R5bGUsXG4gICAgICBzaGFwZSxcbiAgICAgIGxhYmVsVGV4dDogc2FuaXRpemVUZXh0KHZlcnRleFRleHQpLFxuICAgICAgY2xhc3NEYXRhOiB2ZXJ0ZXgsXG4gICAgICByeDogcmFkaXVzLFxuICAgICAgcnk6IHJhZGl1cyxcbiAgICAgIGNsYXNzOiBjc3NDbGFzc1N0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgZG9tSWQ6IHZlcnRleC5kb21JZCxcbiAgICAgIHRvb2x0aXA6IGRpYWdPYmouZGIuZ2V0VG9vbHRpcCh2ZXJ0ZXguaWQsIHBhcmVudCkgfHwgXCJcIixcbiAgICAgIGhhdmVDYWxsYmFjazogdmVydGV4LmhhdmVDYWxsYmFjayxcbiAgICAgIGxpbms6IHZlcnRleC5saW5rLFxuICAgICAgd2lkdGg6IHZlcnRleC50eXBlID09PSBcImdyb3VwXCIgPyA1MDAgOiB2b2lkIDAsXG4gICAgICB0eXBlOiB2ZXJ0ZXgudHlwZSxcbiAgICAgIC8vIFRPRE8gVjEwOiBGbG93Y2hhcnQgPyBLZWVwaW5nIGZsb3djaGFydCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgIHBhZGRpbmc6IGdldENvbmZpZygpLmZsb3djaGFydD8ucGFkZGluZyA/PyBnZXRDb25maWcoKS5jbGFzcz8ucGFkZGluZ1xuICAgIH07XG4gICAgZy5zZXROb2RlKHZlcnRleC5pZCwgbm9kZSk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgZy5zZXRQYXJlbnQodmVydGV4LmlkLCBwYXJlbnQpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhcInNldE5vZGVcIiwgbm9kZSk7XG4gIH0pO1xufSwgXCJhZGRDbGFzc2VzXCIpO1xudmFyIGFkZE5vdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihub3RlcywgZywgc3RhcnRFZGdlSWQsIGNsYXNzZXMpIHtcbiAgbG9nLmluZm8obm90ZXMpO1xuICBub3Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vdGUsIGkpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSBub3RlO1xuICAgIGNvbnN0IGNzc05vdGVTdHIgPSBcIlwiO1xuICAgIGNvbnN0IHN0eWxlcyA9IHsgbGFiZWxTdHlsZTogXCJcIiwgc3R5bGU6IFwiXCIgfTtcbiAgICBjb25zdCB2ZXJ0ZXhUZXh0ID0gdmVydGV4LnRleHQ7XG4gICAgY29uc3QgcmFkaXVzID0gMDtcbiAgICBjb25zdCBzaGFwZSA9IFwibm90ZVwiO1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBsYWJlbFN0eWxlOiBzdHlsZXMubGFiZWxTdHlsZSxcbiAgICAgIHNoYXBlLFxuICAgICAgbGFiZWxUZXh0OiBzYW5pdGl6ZVRleHQodmVydGV4VGV4dCksXG4gICAgICBub3RlRGF0YTogdmVydGV4LFxuICAgICAgcng6IHJhZGl1cyxcbiAgICAgIHJ5OiByYWRpdXMsXG4gICAgICBjbGFzczogY3NzTm90ZVN0cixcbiAgICAgIHN0eWxlOiBzdHlsZXMuc3R5bGUsXG4gICAgICBpZDogdmVydGV4LmlkLFxuICAgICAgZG9tSWQ6IHZlcnRleC5pZCxcbiAgICAgIHRvb2x0aXA6IFwiXCIsXG4gICAgICB0eXBlOiBcIm5vdGVcIixcbiAgICAgIC8vIFRPRE8gVjEwOiBGbG93Y2hhcnQgPyBLZWVwaW5nIGZsb3djaGFydCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgIHBhZGRpbmc6IGdldENvbmZpZygpLmZsb3djaGFydD8ucGFkZGluZyA/PyBnZXRDb25maWcoKS5jbGFzcz8ucGFkZGluZ1xuICAgIH07XG4gICAgZy5zZXROb2RlKHZlcnRleC5pZCwgbm9kZSk7XG4gICAgbG9nLmluZm8oXCJzZXROb2RlXCIsIG5vZGUpO1xuICAgIGlmICghdmVydGV4LmNsYXNzIHx8ICFjbGFzc2VzLmhhcyh2ZXJ0ZXguY2xhc3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVkZ2VJZCA9IHN0YXJ0RWRnZUlkICsgaTtcbiAgICBjb25zdCBlZGdlRGF0YSA9IHtcbiAgICAgIGlkOiBgZWRnZU5vdGUke2VkZ2VJZH1gLFxuICAgICAgLy9TZXQgcmVsYXRpb25zaGlwIHN0eWxlIGFuZCBsaW5lIHR5cGVcbiAgICAgIGNsYXNzZXM6IFwicmVsYXRpb25cIixcbiAgICAgIHBhdHRlcm46IFwiZG90dGVkXCIsXG4gICAgICAvLyBTZXQgbGluayB0eXBlIGZvciByZW5kZXJpbmdcbiAgICAgIGFycm93aGVhZDogXCJub25lXCIsXG4gICAgICAvL1NldCBlZGdlIGV4dHJhIGxhYmVsc1xuICAgICAgc3RhcnRMYWJlbFJpZ2h0OiBcIlwiLFxuICAgICAgZW5kTGFiZWxMZWZ0OiBcIlwiLFxuICAgICAgLy9TZXQgcmVsYXRpb24gYXJyb3cgdHlwZXNcbiAgICAgIGFycm93VHlwZVN0YXJ0OiBcIm5vbmVcIixcbiAgICAgIGFycm93VHlwZUVuZDogXCJub25lXCIsXG4gICAgICBzdHlsZTogXCJmaWxsOm5vbmVcIixcbiAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICBjdXJ2ZTogaW50ZXJwb2xhdGVUb0N1cnZlKGNvbmYuY3VydmUsIGN1cnZlTGluZWFyKVxuICAgIH07XG4gICAgZy5zZXRFZGdlKHZlcnRleC5pZCwgdmVydGV4LmNsYXNzLCBlZGdlRGF0YSwgZWRnZUlkKTtcbiAgfSk7XG59LCBcImFkZE5vdGVzXCIpO1xudmFyIGFkZFJlbGF0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocmVsYXRpb25zLCBnKSB7XG4gIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0O1xuICBsZXQgY250ID0gMDtcbiAgcmVsYXRpb25zLmZvckVhY2goZnVuY3Rpb24oZWRnZSkge1xuICAgIGNudCsrO1xuICAgIGNvbnN0IGVkZ2VEYXRhID0ge1xuICAgICAgLy9TZXQgcmVsYXRpb25zaGlwIHN0eWxlIGFuZCBsaW5lIHR5cGVcbiAgICAgIGNsYXNzZXM6IFwicmVsYXRpb25cIixcbiAgICAgIHBhdHRlcm46IGVkZ2UucmVsYXRpb24ubGluZVR5cGUgPT0gMSA/IFwiZGFzaGVkXCIgOiBcInNvbGlkXCIsXG4gICAgICBpZDogZ2V0RWRnZUlkKGVkZ2UuaWQxLCBlZGdlLmlkMiwge1xuICAgICAgICBwcmVmaXg6IFwiaWRcIixcbiAgICAgICAgY291bnRlcjogY250XG4gICAgICB9KSxcbiAgICAgIC8vIFNldCBsaW5rIHR5cGUgZm9yIHJlbmRlcmluZ1xuICAgICAgYXJyb3doZWFkOiBlZGdlLnR5cGUgPT09IFwiYXJyb3dfb3BlblwiID8gXCJub25lXCIgOiBcIm5vcm1hbFwiLFxuICAgICAgLy9TZXQgZWRnZSBleHRyYSBsYWJlbHNcbiAgICAgIHN0YXJ0TGFiZWxSaWdodDogZWRnZS5yZWxhdGlvblRpdGxlMSA9PT0gXCJub25lXCIgPyBcIlwiIDogZWRnZS5yZWxhdGlvblRpdGxlMSxcbiAgICAgIGVuZExhYmVsTGVmdDogZWRnZS5yZWxhdGlvblRpdGxlMiA9PT0gXCJub25lXCIgPyBcIlwiIDogZWRnZS5yZWxhdGlvblRpdGxlMixcbiAgICAgIC8vU2V0IHJlbGF0aW9uIGFycm93IHR5cGVzXG4gICAgICBhcnJvd1R5cGVTdGFydDogZ2V0QXJyb3dNYXJrZXIoZWRnZS5yZWxhdGlvbi50eXBlMSksXG4gICAgICBhcnJvd1R5cGVFbmQ6IGdldEFycm93TWFya2VyKGVkZ2UucmVsYXRpb24udHlwZTIpLFxuICAgICAgc3R5bGU6IFwiZmlsbDpub25lXCIsXG4gICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgY3VydmU6IGludGVycG9sYXRlVG9DdXJ2ZShjb25mMj8uY3VydmUsIGN1cnZlTGluZWFyKVxuICAgIH07XG4gICAgbG9nLmluZm8oZWRnZURhdGEsIGVkZ2UpO1xuICAgIGlmIChlZGdlLnN0eWxlICE9PSB2b2lkIDApIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IGdldFN0eWxlc0Zyb21BcnJheShlZGdlLnN0eWxlKTtcbiAgICAgIGVkZ2VEYXRhLnN0eWxlID0gc3R5bGVzLnN0eWxlO1xuICAgICAgZWRnZURhdGEubGFiZWxTdHlsZSA9IHN0eWxlcy5sYWJlbFN0eWxlO1xuICAgIH1cbiAgICBlZGdlLnRleHQgPSBlZGdlLnRpdGxlO1xuICAgIGlmIChlZGdlLnRleHQgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKGVkZ2Uuc3R5bGUgIT09IHZvaWQgMCkge1xuICAgICAgICBlZGdlRGF0YS5hcnJvd2hlYWRTdHlsZSA9IFwiZmlsbDogIzMzM1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlRGF0YS5hcnJvd2hlYWRTdHlsZSA9IFwiZmlsbDogIzMzM1wiO1xuICAgICAgZWRnZURhdGEubGFiZWxwb3MgPSBcImNcIjtcbiAgICAgIGlmIChnZXRDb25maWcoKS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMgPz8gZ2V0Q29uZmlnKCkuaHRtbExhYmVscykge1xuICAgICAgICBlZGdlRGF0YS5sYWJlbFR5cGUgPSBcImh0bWxcIjtcbiAgICAgICAgZWRnZURhdGEubGFiZWwgPSAnPHNwYW4gY2xhc3M9XCJlZGdlTGFiZWxcIj4nICsgZWRnZS50ZXh0ICsgXCI8L3NwYW4+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlRGF0YS5sYWJlbFR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgZWRnZURhdGEubGFiZWwgPSBlZGdlLnRleHQucmVwbGFjZShjb21tb25fZGVmYXVsdC5saW5lQnJlYWtSZWdleCwgXCJcXG5cIik7XG4gICAgICAgIGlmIChlZGdlLnN0eWxlID09PSB2b2lkIDApIHtcbiAgICAgICAgICBlZGdlRGF0YS5zdHlsZSA9IGVkZ2VEYXRhLnN0eWxlIHx8IFwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZVwiO1xuICAgICAgICB9XG4gICAgICAgIGVkZ2VEYXRhLmxhYmVsU3R5bGUgPSBlZGdlRGF0YS5sYWJlbFN0eWxlLnJlcGxhY2UoXCJjb2xvcjpcIiwgXCJmaWxsOlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZy5zZXRFZGdlKGVkZ2UuaWQxLCBlZGdlLmlkMiwgZWRnZURhdGEsIGNudCk7XG4gIH0pO1xufSwgXCJhZGRSZWxhdGlvbnNcIik7XG52YXIgc2V0Q29uZiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY25mKSB7XG4gIGNvbmYgPSB7XG4gICAgLi4uY29uZixcbiAgICAuLi5jbmZcbiAgfTtcbn0sIFwic2V0Q29uZlwiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgbG9nLmluZm8oXCJEcmF3aW5nIGNsYXNzIC0gXCIsIGlkKTtcbiAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5mbG93Y2hhcnQgPz8gZ2V0Q29uZmlnKCkuY2xhc3M7XG4gIGNvbnN0IHNlY3VyaXR5TGV2ZWwgPSBnZXRDb25maWcoKS5zZWN1cml0eUxldmVsO1xuICBsb2cuaW5mbyhcImNvbmZpZzpcIiwgY29uZjIpO1xuICBjb25zdCBub2RlU3BhY2luZyA9IGNvbmYyPy5ub2RlU3BhY2luZyA/PyA1MDtcbiAgY29uc3QgcmFua1NwYWNpbmcgPSBjb25mMj8ucmFua1NwYWNpbmcgPz8gNTA7XG4gIGNvbnN0IGcgPSBuZXcgZ3JhcGhsaWIyLkdyYXBoKHtcbiAgICBtdWx0aWdyYXBoOiB0cnVlLFxuICAgIGNvbXBvdW5kOiB0cnVlXG4gIH0pLnNldEdyYXBoKHtcbiAgICByYW5rZGlyOiBkaWFnT2JqLmRiLmdldERpcmVjdGlvbigpLFxuICAgIG5vZGVzZXA6IG5vZGVTcGFjaW5nLFxuICAgIHJhbmtzZXA6IHJhbmtTcGFjaW5nLFxuICAgIG1hcmdpbng6IDgsXG4gICAgbWFyZ2lueTogOFxuICB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBkaWFnT2JqLmRiLmdldE5hbWVzcGFjZXMoKTtcbiAgY29uc3QgY2xhc3NlcyA9IGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xuICBjb25zdCByZWxhdGlvbnMgPSBkaWFnT2JqLmRiLmdldFJlbGF0aW9ucygpO1xuICBjb25zdCBub3RlcyA9IGRpYWdPYmouZGIuZ2V0Tm90ZXMoKTtcbiAgbG9nLmluZm8ocmVsYXRpb25zKTtcbiAgYWRkTmFtZXNwYWNlcyhuYW1lc3BhY2VzLCBnLCBpZCwgZGlhZ09iaik7XG4gIGFkZENsYXNzZXMoY2xhc3NlcywgZywgaWQsIGRpYWdPYmopO1xuICBhZGRSZWxhdGlvbnMocmVsYXRpb25zLCBnKTtcbiAgYWRkTm90ZXMobm90ZXMsIGcsIHJlbGF0aW9ucy5sZW5ndGggKyAxLCBjbGFzc2VzKTtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdDIoXCIjaVwiICsgaWQpO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIiA/IHNlbGVjdDIoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBzZWxlY3QyKFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCk7XG4gIGNvbnN0IGVsZW1lbnQgPSByb290LnNlbGVjdChcIiNcIiArIGlkICsgXCIgZ1wiKTtcbiAgYXdhaXQgcmVuZGVyKFxuICAgIGVsZW1lbnQsXG4gICAgZyxcbiAgICBbXCJhZ2dyZWdhdGlvblwiLCBcImV4dGVuc2lvblwiLCBcImNvbXBvc2l0aW9uXCIsIFwiZGVwZW5kZW5jeVwiLCBcImxvbGxpcG9wXCJdLFxuICAgIFwiY2xhc3NEaWFncmFtXCIsXG4gICAgaWRcbiAgKTtcbiAgdXRpbHNfZGVmYXVsdC5pbnNlcnRUaXRsZShzdmcsIFwiY2xhc3NUaXRsZVRleHRcIiwgY29uZjI/LnRpdGxlVG9wTWFyZ2luID8/IDUsIGRpYWdPYmouZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO1xuICBzZXR1cEdyYXBoVmlld2JveChnLCBzdmcsIGNvbmYyPy5kaWFncmFtUGFkZGluZywgY29uZjI/LnVzZU1heFdpZHRoKTtcbiAgaWYgKCFjb25mMj8uaHRtbExhYmVscykge1xuICAgIGNvbnN0IGRvYyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQgOiBkb2N1bWVudDtcbiAgICBjb25zdCBsYWJlbHMgPSBkb2MucXVlcnlTZWxlY3RvckFsbCgnW2lkPVwiJyArIGlkICsgJ1wiXSAuZWRnZUxhYmVsIC5sYWJlbCcpO1xuICAgIGZvciAoY29uc3QgbGFiZWwgb2YgbGFiZWxzKSB7XG4gICAgICBjb25zdCBkaW0gPSBsYWJlbC5nZXRCQm94KCk7XG4gICAgICBjb25zdCByZWN0MiA9IGRvYy5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInJlY3RcIik7XG4gICAgICByZWN0Mi5zZXRBdHRyaWJ1dGUoXCJyeFwiLCAwKTtcbiAgICAgIHJlY3QyLnNldEF0dHJpYnV0ZShcInJ5XCIsIDApO1xuICAgICAgcmVjdDIuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgZGltLndpZHRoKTtcbiAgICAgIHJlY3QyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBkaW0uaGVpZ2h0KTtcbiAgICAgIGxhYmVsLmluc2VydEJlZm9yZShyZWN0MiwgbGFiZWwuZmlyc3RDaGlsZCk7XG4gICAgfVxuICB9XG59LCBcImRyYXdcIik7XG5mdW5jdGlvbiBnZXRBcnJvd01hcmtlcih0eXBlKSB7XG4gIGxldCBtYXJrZXI7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgMDpcbiAgICAgIG1hcmtlciA9IFwiYWdncmVnYXRpb25cIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIG1hcmtlciA9IFwiZXh0ZW5zaW9uXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBtYXJrZXIgPSBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBtYXJrZXIgPSBcImRlcGVuZGVuY3lcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIG1hcmtlciA9IFwibG9sbGlwb3BcIjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBtYXJrZXIgPSBcIm5vbmVcIjtcbiAgfVxuICByZXR1cm4gbWFya2VyO1xufVxuX19uYW1lKGdldEFycm93TWFya2VyLCBcImdldEFycm93TWFya2VyXCIpO1xudmFyIGNsYXNzUmVuZGVyZXJfdjJfZGVmYXVsdCA9IHtcbiAgc2V0Q29uZixcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzRGlhZ3JhbS12Mi50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogY2xhc3NEaWFncmFtX2RlZmF1bHQsXG4gIGRiOiBjbGFzc0RiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBjbGFzc1JlbmRlcmVyX3YyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHQsXG4gIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNuZikgPT4ge1xuICAgIGlmICghY25mLmNsYXNzKSB7XG4gICAgICBjbmYuY2xhc3MgPSB7fTtcbiAgICB9XG4gICAgY25mLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGUgPSBjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZTtcbiAgICBjbGFzc0RiX2RlZmF1bHQuY2xlYXIoKTtcbiAgfSwgXCJpbml0XCIpXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgZ2V0RGlhZ3JhbUVsZW1lbnQsXG4gIHNldHVwVmlld1BvcnRGb3JTVkdcbn0gZnJvbSBcIi4vY2h1bmstV1pCSUFUU0subWpzXCI7XG5pbXBvcnQge1xuICByZW5kZXJcbn0gZnJvbSBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQge1xuICBnZW5lcmF0ZUlkLFxuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgbG9nLFxuICBzZXRBY2NEZXNjcmlwdGlvbixcbiAgc2V0QWNjVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZVxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3BhcnNlci9zdGF0ZURpYWdyYW0uamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCAyXSwgJFYxID0gWzEsIDNdLCAkVjIgPSBbMSwgNF0sICRWMyA9IFsyLCA0XSwgJFY0ID0gWzEsIDldLCAkVjUgPSBbMSwgMTFdLCAkVjYgPSBbMSwgMTZdLCAkVjcgPSBbMSwgMTddLCAkVjggPSBbMSwgMThdLCAkVjkgPSBbMSwgMTldLCAkVmEgPSBbMSwgMzJdLCAkVmIgPSBbMSwgMjBdLCAkVmMgPSBbMSwgMjFdLCAkVmQgPSBbMSwgMjJdLCAkVmUgPSBbMSwgMjNdLCAkVmYgPSBbMSwgMjRdLCAkVmcgPSBbMSwgMjZdLCAkVmggPSBbMSwgMjddLCAkVmkgPSBbMSwgMjhdLCAkVmogPSBbMSwgMjldLCAkVmsgPSBbMSwgMzBdLCAkVmwgPSBbMSwgMzFdLCAkVm0gPSBbMSwgMzRdLCAkVm4gPSBbMSwgMzVdLCAkVm8gPSBbMSwgMzZdLCAkVnAgPSBbMSwgMzddLCAkVnEgPSBbMSwgMzNdLCAkVnIgPSBbMSwgNCwgNSwgMTYsIDE3LCAxOSwgMjEsIDIyLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMywgMzUsIDM3LCAzOCwgNDIsIDQ1LCA0OCwgNDksIDUwLCA1MSwgNTRdLCAkVnMgPSBbMSwgNCwgNSwgMTQsIDE1LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNDUsIDQ4LCA0OSwgNTAsIDUxLCA1NF0sICRWdCA9IFs0LCA1LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMzLCAzNSwgMzcsIDM4LCA0MiwgNDUsIDQ4LCA0OSwgNTAsIDUxLCA1NF07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIlNQQUNFXCI6IDQsIFwiTkxcIjogNSwgXCJTRFwiOiA2LCBcImRvY3VtZW50XCI6IDcsIFwibGluZVwiOiA4LCBcInN0YXRlbWVudFwiOiA5LCBcImNsYXNzRGVmU3RhdGVtZW50XCI6IDEwLCBcInN0eWxlU3RhdGVtZW50XCI6IDExLCBcImNzc0NsYXNzU3RhdGVtZW50XCI6IDEyLCBcImlkU3RhdGVtZW50XCI6IDEzLCBcIkRFU0NSXCI6IDE0LCBcIi0tPlwiOiAxNSwgXCJISURFX0VNUFRZXCI6IDE2LCBcInNjYWxlXCI6IDE3LCBcIldJRFRIXCI6IDE4LCBcIkNPTVBPU0lUX1NUQVRFXCI6IDE5LCBcIlNUUlVDVF9TVEFSVFwiOiAyMCwgXCJTVFJVQ1RfU1RPUFwiOiAyMSwgXCJTVEFURV9ERVNDUlwiOiAyMiwgXCJBU1wiOiAyMywgXCJJRFwiOiAyNCwgXCJGT1JLXCI6IDI1LCBcIkpPSU5cIjogMjYsIFwiQ0hPSUNFXCI6IDI3LCBcIkNPTkNVUlJFTlRcIjogMjgsIFwibm90ZVwiOiAyOSwgXCJub3RlUG9zaXRpb25cIjogMzAsIFwiTk9URV9URVhUXCI6IDMxLCBcImRpcmVjdGlvblwiOiAzMiwgXCJhY2NfdGl0bGVcIjogMzMsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDM0LCBcImFjY19kZXNjclwiOiAzNSwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMzYsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAzNywgXCJjbGFzc0RlZlwiOiAzOCwgXCJDTEFTU0RFRl9JRFwiOiAzOSwgXCJDTEFTU0RFRl9TVFlMRU9QVFNcIjogNDAsIFwiREVGQVVMVFwiOiA0MSwgXCJzdHlsZVwiOiA0MiwgXCJTVFlMRV9JRFNcIjogNDMsIFwiU1RZTEVERUZfU1RZTEVPUFRTXCI6IDQ0LCBcImNsYXNzXCI6IDQ1LCBcIkNMQVNTRU5USVRZX0lEU1wiOiA0NiwgXCJTVFlMRUNMQVNTXCI6IDQ3LCBcImRpcmVjdGlvbl90YlwiOiA0OCwgXCJkaXJlY3Rpb25fYnRcIjogNDksIFwiZGlyZWN0aW9uX3JsXCI6IDUwLCBcImRpcmVjdGlvbl9sclwiOiA1MSwgXCJlb2xcIjogNTIsIFwiO1wiOiA1MywgXCJFREdFX1NUQVRFXCI6IDU0LCBcIlNUWUxFX1NFUEFSQVRPUlwiOiA1NSwgXCJsZWZ0X29mXCI6IDU2LCBcInJpZ2h0X29mXCI6IDU3LCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJTUEFDRVwiLCA1OiBcIk5MXCIsIDY6IFwiU0RcIiwgMTQ6IFwiREVTQ1JcIiwgMTU6IFwiLS0+XCIsIDE2OiBcIkhJREVfRU1QVFlcIiwgMTc6IFwic2NhbGVcIiwgMTg6IFwiV0lEVEhcIiwgMTk6IFwiQ09NUE9TSVRfU1RBVEVcIiwgMjA6IFwiU1RSVUNUX1NUQVJUXCIsIDIxOiBcIlNUUlVDVF9TVE9QXCIsIDIyOiBcIlNUQVRFX0RFU0NSXCIsIDIzOiBcIkFTXCIsIDI0OiBcIklEXCIsIDI1OiBcIkZPUktcIiwgMjY6IFwiSk9JTlwiLCAyNzogXCJDSE9JQ0VcIiwgMjg6IFwiQ09OQ1VSUkVOVFwiLCAyOTogXCJub3RlXCIsIDMxOiBcIk5PVEVfVEVYVFwiLCAzMzogXCJhY2NfdGl0bGVcIiwgMzQ6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDM1OiBcImFjY19kZXNjclwiLCAzNjogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMzc6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAzODogXCJjbGFzc0RlZlwiLCAzOTogXCJDTEFTU0RFRl9JRFwiLCA0MDogXCJDTEFTU0RFRl9TVFlMRU9QVFNcIiwgNDE6IFwiREVGQVVMVFwiLCA0MjogXCJzdHlsZVwiLCA0MzogXCJTVFlMRV9JRFNcIiwgNDQ6IFwiU1RZTEVERUZfU1RZTEVPUFRTXCIsIDQ1OiBcImNsYXNzXCIsIDQ2OiBcIkNMQVNTRU5USVRZX0lEU1wiLCA0NzogXCJTVFlMRUNMQVNTXCIsIDQ4OiBcImRpcmVjdGlvbl90YlwiLCA0OTogXCJkaXJlY3Rpb25fYnRcIiwgNTA6IFwiZGlyZWN0aW9uX3JsXCIsIDUxOiBcImRpcmVjdGlvbl9sclwiLCA1MzogXCI7XCIsIDU0OiBcIkVER0VfU1RBVEVcIiwgNTU6IFwiU1RZTEVfU0VQQVJBVE9SXCIsIDU2OiBcImxlZnRfb2ZcIiwgNTc6IFwicmlnaHRfb2ZcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAyXSwgWzMsIDJdLCBbMywgMl0sIFs3LCAwXSwgWzcsIDJdLCBbOCwgMl0sIFs4LCAxXSwgWzgsIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAyXSwgWzksIDNdLCBbOSwgNF0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMV0sIFs5LCA0XSwgWzksIDNdLCBbOSwgNl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzksIDRdLCBbOSwgNF0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzEwLCAzXSwgWzEwLCAzXSwgWzExLCAzXSwgWzEyLCAzXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzMyLCAxXSwgWzUyLCAxXSwgWzUyLCAxXSwgWzEzLCAxXSwgWzEzLCAxXSwgWzEzLCAzXSwgWzEzLCAzXSwgWzMwLCAxXSwgWzMwLCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB5eS5zZXRSb290RG9jKCQkWyQwXSk7XG4gICAgICAgICAgcmV0dXJuICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKCQkWyQwXSAhPSBcIm5sXCIpIHtcbiAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHRoaXMuJCA9IFwibmxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgY29uc3Qgc3RhdGVTdG10ID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBzdGF0ZVN0bXQuZGVzY3JpcHRpb24gPSB5eS50cmltQ29sb24oJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSBzdGF0ZVN0bXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInJlbGF0aW9uXCIsIHN0YXRlMTogJCRbJDAgLSAyXSwgc3RhdGUyOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjb25zdCByZWxEZXNjcmlwdGlvbiA9IHl5LnRyaW1Db2xvbigkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJyZWxhdGlvblwiLCBzdGF0ZTE6ICQkWyQwIC0gM10sIHN0YXRlMjogJCRbJDAgLSAxXSwgZGVzY3JpcHRpb246IHJlbERlc2NyaXB0aW9uIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDNdLCB0eXBlOiBcImRlZmF1bHRcIiwgZGVzY3JpcHRpb246IFwiXCIsIGRvYzogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHZhciBpZCA9ICQkWyQwXTtcbiAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSAkJFskMCAtIDJdLnRyaW0oKTtcbiAgICAgICAgICBpZiAoJCRbJDBdLm1hdGNoKFwiOlwiKSkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gJCRbJDBdLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgIGlkID0gcGFydHNbMF07XG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFtkZXNjcmlwdGlvbiwgcGFydHNbMV1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQsIHR5cGU6IFwiZGVmYXVsdFwiLCBkZXNjcmlwdGlvbiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAzXSwgdHlwZTogXCJkZWZhdWx0XCIsIGRlc2NyaXB0aW9uOiAkJFskMCAtIDVdLCBkb2M6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXSwgdHlwZTogXCJmb3JrXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXSwgdHlwZTogXCJqb2luXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXSwgdHlwZTogXCJjaG9pY2VcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogeXkuZ2V0RGl2aWRlcklkKCksIHR5cGU6IFwiZGl2aWRlclwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDFdLnRyaW0oKSwgbm90ZTogeyBwb3NpdGlvbjogJCRbJDAgLSAyXS50cmltKCksIHRleHQ6ICQkWyQwXS50cmltKCkgfSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcImNsYXNzRGVmXCIsIGlkOiAkJFskMCAtIDFdLnRyaW0oKSwgY2xhc3NlczogJCRbJDBdLnRyaW0oKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdHlsZVwiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiYXBwbHlDbGFzc1wiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJUQlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlRCXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJCVFwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkJUXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJSTFwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIlJMXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICB5eS5zZXREaXJlY3Rpb24oXCJMUlwiKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwiZGlyXCIsIHZhbHVlOiBcIkxSXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHN0bXQ6IFwic3RhdGVcIiwgaWQ6ICQkWyQwXS50cmltKCksIHR5cGU6IFwiZGVmYXVsdFwiLCBkZXNjcmlwdGlvbjogXCJcIiB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIHRoaXMuJCA9IHsgc3RtdDogXCJzdGF0ZVwiLCBpZDogJCRbJDAgLSAyXS50cmltKCksIGNsYXNzZXM6IFskJFskMF0udHJpbSgpXSwgdHlwZTogXCJkZWZhdWx0XCIsIGRlc2NyaXB0aW9uOiBcIlwiIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgdGhpcy4kID0geyBzdG10OiBcInN0YXRlXCIsIGlkOiAkJFskMCAtIDJdLnRyaW0oKSwgY2xhc3NlczogWyQkWyQwXS50cmltKCldLCB0eXBlOiBcImRlZmF1bHRcIiwgZGVzY3JpcHRpb246IFwiXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogJFYwLCA1OiAkVjEsIDY6ICRWMiB9LCB7IDE6IFszXSB9LCB7IDM6IDUsIDQ6ICRWMCwgNTogJFYxLCA2OiAkVjIgfSwgeyAzOiA2LCA0OiAkVjAsIDU6ICRWMSwgNjogJFYyIH0sIG8oWzEsIDQsIDUsIDE2LCAxNywgMTksIDIyLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMywgMzUsIDM3LCAzOCwgNDIsIDQ1LCA0OCwgNDksIDUwLCA1MSwgNTRdLCAkVjMsIHsgNzogNyB9KSwgeyAxOiBbMiwgMV0gfSwgeyAxOiBbMiwgMl0gfSwgeyAxOiBbMiwgM10sIDQ6ICRWNCwgNTogJFY1LCA4OiA4LCA5OiAxMCwgMTA6IDEyLCAxMTogMTMsIDEyOiAxNCwgMTM6IDE1LCAxNjogJFY2LCAxNzogJFY3LCAxOTogJFY4LCAyMjogJFY5LCAyNDogJFZhLCAyNTogJFZiLCAyNjogJFZjLCAyNzogJFZkLCAyODogJFZlLCAyOTogJFZmLCAzMjogMjUsIDMzOiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM4OiAkVmosIDQyOiAkVmssIDQ1OiAkVmwsIDQ4OiAkVm0sIDQ5OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDU0OiAkVnEgfSwgbygkVnIsIFsyLCA1XSksIHsgOTogMzgsIDEwOiAxMiwgMTE6IDEzLCAxMjogMTQsIDEzOiAxNSwgMTY6ICRWNiwgMTc6ICRWNywgMTk6ICRWOCwgMjI6ICRWOSwgMjQ6ICRWYSwgMjU6ICRWYiwgMjY6ICRWYywgMjc6ICRWZCwgMjg6ICRWZSwgMjk6ICRWZiwgMzI6IDI1LCAzMzogJFZnLCAzNTogJFZoLCAzNzogJFZpLCAzODogJFZqLCA0MjogJFZrLCA0NTogJFZsLCA0ODogJFZtLCA0OTogJFZuLCA1MDogJFZvLCA1MTogJFZwLCA1NDogJFZxIH0sIG8oJFZyLCBbMiwgN10pLCBvKCRWciwgWzIsIDhdKSwgbygkVnIsIFsyLCA5XSksIG8oJFZyLCBbMiwgMTBdKSwgbygkVnIsIFsyLCAxMV0pLCBvKCRWciwgWzIsIDEyXSwgeyAxNDogWzEsIDM5XSwgMTU6IFsxLCA0MF0gfSksIG8oJFZyLCBbMiwgMTZdKSwgeyAxODogWzEsIDQxXSB9LCBvKCRWciwgWzIsIDE4XSwgeyAyMDogWzEsIDQyXSB9KSwgeyAyMzogWzEsIDQzXSB9LCBvKCRWciwgWzIsIDIyXSksIG8oJFZyLCBbMiwgMjNdKSwgbygkVnIsIFsyLCAyNF0pLCBvKCRWciwgWzIsIDI1XSksIHsgMzA6IDQ0LCAzMTogWzEsIDQ1XSwgNTY6IFsxLCA0Nl0sIDU3OiBbMSwgNDddIH0sIG8oJFZyLCBbMiwgMjhdKSwgeyAzNDogWzEsIDQ4XSB9LCB7IDM2OiBbMSwgNDldIH0sIG8oJFZyLCBbMiwgMzFdKSwgeyAzOTogWzEsIDUwXSwgNDE6IFsxLCA1MV0gfSwgeyA0MzogWzEsIDUyXSB9LCB7IDQ2OiBbMSwgNTNdIH0sIG8oJFZzLCBbMiwgNDJdLCB7IDU1OiBbMSwgNTRdIH0pLCBvKCRWcywgWzIsIDQzXSwgeyA1NTogWzEsIDU1XSB9KSwgbygkVnIsIFsyLCAzNl0pLCBvKCRWciwgWzIsIDM3XSksIG8oJFZyLCBbMiwgMzhdKSwgbygkVnIsIFsyLCAzOV0pLCBvKCRWciwgWzIsIDZdKSwgbygkVnIsIFsyLCAxM10pLCB7IDEzOiA1NiwgMjQ6ICRWYSwgNTQ6ICRWcSB9LCBvKCRWciwgWzIsIDE3XSksIG8oJFZ0LCAkVjMsIHsgNzogNTcgfSksIHsgMjQ6IFsxLCA1OF0gfSwgeyAyNDogWzEsIDU5XSB9LCB7IDIzOiBbMSwgNjBdIH0sIHsgMjQ6IFsyLCA0Nl0gfSwgeyAyNDogWzIsIDQ3XSB9LCBvKCRWciwgWzIsIDI5XSksIG8oJFZyLCBbMiwgMzBdKSwgeyA0MDogWzEsIDYxXSB9LCB7IDQwOiBbMSwgNjJdIH0sIHsgNDQ6IFsxLCA2M10gfSwgeyA0NzogWzEsIDY0XSB9LCB7IDI0OiBbMSwgNjVdIH0sIHsgMjQ6IFsxLCA2Nl0gfSwgbygkVnIsIFsyLCAxNF0sIHsgMTQ6IFsxLCA2N10gfSksIHsgNDogJFY0LCA1OiAkVjUsIDg6IDgsIDk6IDEwLCAxMDogMTIsIDExOiAxMywgMTI6IDE0LCAxMzogMTUsIDE2OiAkVjYsIDE3OiAkVjcsIDE5OiAkVjgsIDIxOiBbMSwgNjhdLCAyMjogJFY5LCAyNDogJFZhLCAyNTogJFZiLCAyNjogJFZjLCAyNzogJFZkLCAyODogJFZlLCAyOTogJFZmLCAzMjogMjUsIDMzOiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM4OiAkVmosIDQyOiAkVmssIDQ1OiAkVmwsIDQ4OiAkVm0sIDQ5OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDU0OiAkVnEgfSwgbygkVnIsIFsyLCAyMF0sIHsgMjA6IFsxLCA2OV0gfSksIHsgMzE6IFsxLCA3MF0gfSwgeyAyNDogWzEsIDcxXSB9LCBvKCRWciwgWzIsIDMyXSksIG8oJFZyLCBbMiwgMzNdKSwgbygkVnIsIFsyLCAzNF0pLCBvKCRWciwgWzIsIDM1XSksIG8oJFZzLCBbMiwgNDRdKSwgbygkVnMsIFsyLCA0NV0pLCBvKCRWciwgWzIsIDE1XSksIG8oJFZyLCBbMiwgMTldKSwgbygkVnQsICRWMywgeyA3OiA3MiB9KSwgbygkVnIsIFsyLCAyNl0pLCBvKCRWciwgWzIsIDI3XSksIHsgNDogJFY0LCA1OiAkVjUsIDg6IDgsIDk6IDEwLCAxMDogMTIsIDExOiAxMywgMTI6IDE0LCAxMzogMTUsIDE2OiAkVjYsIDE3OiAkVjcsIDE5OiAkVjgsIDIxOiBbMSwgNzNdLCAyMjogJFY5LCAyNDogJFZhLCAyNTogJFZiLCAyNjogJFZjLCAyNzogJFZkLCAyODogJFZlLCAyOTogJFZmLCAzMjogMjUsIDMzOiAkVmcsIDM1OiAkVmgsIDM3OiAkVmksIDM4OiAkVmosIDQyOiAkVmssIDQ1OiAkVmwsIDQ4OiAkVm0sIDQ5OiAkVm4sIDUwOiAkVm8sIDUxOiAkVnAsIDU0OiAkVnEgfSwgbygkVnIsIFsyLCAyMV0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyA1OiBbMiwgMV0sIDY6IFsyLCAyXSwgNDY6IFsyLCA0Nl0sIDQ3OiBbMiwgNDddIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiA0MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiA0OTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTQ0FMRVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfdGl0bGVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZcIik7XG4gICAgICAgICAgICByZXR1cm4gMzg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJDTEFTU0RFRklEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiREVGQVVMVF9DTEFTU0RFRl9JRFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJDTEFTU1wiKTtcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTX1NUWUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQ2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUWUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiU1RZTEVERUZfU1RZTEVTXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiA0NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNDQUxFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTVEFURVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgwLCAtOCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC04KS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTEwKS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMjc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc2xpY2UoMCwgLTgpLnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiAyNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgwLCAtOCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC0xMCkudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDI3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIHJldHVybiA0ODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICByZXR1cm4gNDk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgcmV0dXJuIDUwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICAgIHJldHVybiA1MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUQVRFX1NUUklOR1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUQVRFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJJRFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICByZXR1cm4gXCJTVEFURV9ERVNDUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDUzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJ1Y3RcIik7XG4gICAgICAgICAgICByZXR1cm4gMjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PVEVcIik7XG4gICAgICAgICAgICByZXR1cm4gMjk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT1RFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDU2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9URV9JRFwiKTtcbiAgICAgICAgICAgIHJldHVybiA1NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkZMT0FUSU5HX05PVEVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJGTE9BVElOR19OT1RFX0lEXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiQVNcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgcmV0dXJuIFwiTk9URV9URVhUXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PVEVfVEVYVFwiKTtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDMxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnNsaWNlKDAsIC04KS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcwOlxuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MTpcbiAgICAgICAgICAgIHJldHVybiA1NDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgICByZXR1cm4gMjQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDczOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICAgIHJldHVybiA1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzpkZWZhdWx0XFxiKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK1RCW15cXG5dKikvaSwgL14oPzouKmRpcmVjdGlvblxccytCVFteXFxuXSopL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrUkxbXlxcbl0qKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0xSW15cXG5dKikvaSwgL14oPzolJSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlteXFx9XSUlW15cXG5dKikvaSwgL14oPzpbXFxuXSspL2ksIC9eKD86W1xcc10rKS9pLCAvXig/OigoPyFcXG4pXFxzKSspL2ksIC9eKD86I1teXFxuXSopL2ksIC9eKD86JVteXFxuXSopL2ksIC9eKD86c2NhbGVcXHMrKS9pLCAvXig/OlxcZCspL2ksIC9eKD86XFxzK3dpZHRoXFxiKS9pLCAvXig/OmFjY1RpdGxlXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKjpcXHMqKS9pLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS9pLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopL2ksIC9eKD86W1xcfV0pL2ksIC9eKD86W15cXH1dKikvaSwgL14oPzpjbGFzc0RlZlxccyspL2ksIC9eKD86REVGQVVMVFxccyspL2ksIC9eKD86XFx3K1xccyspL2ksIC9eKD86W15cXG5dKikvaSwgL14oPzpjbGFzc1xccyspL2ksIC9eKD86KFxcdyspKygoLFxccypcXHcrKSopKS9pLCAvXig/OlteXFxuXSopL2ksIC9eKD86c3R5bGVcXHMrKS9pLCAvXig/OltcXHcsXStcXHMrKS9pLCAvXig/OlteXFxuXSopL2ksIC9eKD86c2NhbGVcXHMrKS9pLCAvXig/OlxcZCspL2ksIC9eKD86XFxzK3dpZHRoXFxiKS9pLCAvXig/OnN0YXRlXFxzKykvaSwgL14oPzouKjw8Zm9yaz4+KS9pLCAvXig/Oi4qPDxqb2luPj4pL2ksIC9eKD86Lio8PGNob2ljZT4+KS9pLCAvXig/Oi4qXFxbXFxbZm9ya1xcXVxcXSkvaSwgL14oPzouKlxcW1xcW2pvaW5cXF1cXF0pL2ksIC9eKD86LipcXFtcXFtjaG9pY2VcXF1cXF0pL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrVEJbXlxcbl0qKS9pLCAvXig/Oi4qZGlyZWN0aW9uXFxzK0JUW15cXG5dKikvaSwgL14oPzouKmRpcmVjdGlvblxccytSTFteXFxuXSopL2ksIC9eKD86LipkaXJlY3Rpb25cXHMrTFJbXlxcbl0qKS9pLCAvXig/OltcIl0pL2ksIC9eKD86XFxzKmFzXFxzKykvaSwgL14oPzpbXlxcblxce10qKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0qKS9pLCAvXig/OlteXFxuXFxzXFx7XSspL2ksIC9eKD86XFxuKS9pLCAvXig/OlxceykvaSwgL14oPzolJSg/IVxceylbXlxcbl0qKS9pLCAvXig/OlxcfSkvaSwgL14oPzpbXFxuXSkvaSwgL14oPzpub3RlXFxzKykvaSwgL14oPzpsZWZ0IG9mXFxiKS9pLCAvXig/OnJpZ2h0IG9mXFxiKS9pLCAvXig/OlwiKS9pLCAvXig/Olxccyphc1xccyopL2ksIC9eKD86W1wiXSkvaSwgL14oPzpbXlwiXSopL2ksIC9eKD86W15cXG5dKikvaSwgL14oPzpcXHMqW146XFxuXFxzXFwtXSspL2ksIC9eKD86XFxzKjpbXjpcXG47XSspL2ksIC9eKD86W1xcc1xcU10qP2VuZCBub3RlXFxiKS9pLCAvXig/OnN0YXRlRGlhZ3JhbVxccyspL2ksIC9eKD86c3RhdGVEaWFncmFtLXYyXFxzKykvaSwgL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXFxiKS9pLCAvXig/OlxcW1xcKlxcXSkvaSwgL14oPzpbXjpcXG5cXHNcXC1cXHtdKykvaSwgL14oPzpcXHMqOlteOlxcbjtdKykvaSwgL14oPzotLT4pL2ksIC9eKD86LS0pL2ksIC9eKD86Ojo6KS9pLCAvXig/OiQpL2ksIC9eKD86LikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiTElORVwiOiB7IFwicnVsZXNcIjogWzksIDEwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzdHJ1Y3RcIjogeyBcInJ1bGVzXCI6IFs5LCAxMCwgMjIsIDI2LCAyOSwgMzUsIDQyLCA0MywgNDQsIDQ1LCA1NCwgNTUsIDU2LCA1NywgNzEsIDcyLCA3MywgNzQsIDc1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJGTE9BVElOR19OT1RFX0lEXCI6IHsgXCJydWxlc1wiOiBbNjRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkZMT0FUSU5HX05PVEVcIjogeyBcInJ1bGVzXCI6IFs2MSwgNjIsIDYzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOT1RFX1RFWFRcIjogeyBcInJ1bGVzXCI6IFs2NiwgNjddLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIk5PVEVfSURcIjogeyBcInJ1bGVzXCI6IFs2NV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTk9URVwiOiB7IFwicnVsZXNcIjogWzU4LCA1OSwgNjBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUWUxFREVGX1NUWUxFT1BUU1wiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RZTEVERUZfU1RZTEVTXCI6IHsgXCJydWxlc1wiOiBbMzFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUWUxFX0lEU1wiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RZTEVcIjogeyBcInJ1bGVzXCI6IFszMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NfU1RZTEVcIjogeyBcInJ1bGVzXCI6IFsyOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NcIjogeyBcInJ1bGVzXCI6IFsyN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NERUZJRFwiOiB7IFwicnVsZXNcIjogWzI1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJDTEFTU0RFRlwiOiB7IFwicnVsZXNcIjogWzIzLCAyNF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzIwLCAyMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMThdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzE2XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJTQ0FMRVwiOiB7IFwicnVsZXNcIjogWzEzLCAxNCwgMzMsIDM0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJBTElBU1wiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RBVEVfSURcIjogeyBcInJ1bGVzXCI6IFs0OF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiU1RBVEVfU1RSSU5HXCI6IHsgXCJydWxlc1wiOiBbNDksIDUwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJGT1JLX1NUQVRFXCI6IHsgXCJydWxlc1wiOiBbXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJTVEFURVwiOiB7IFwicnVsZXNcIjogWzksIDEwLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0NiwgNDcsIDUxLCA1MiwgNTNdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklEXCI6IHsgXCJydWxlc1wiOiBbOSwgMTBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCAxMCwgMTEsIDEyLCAxNSwgMTcsIDE5LCAyMiwgMjYsIDI5LCAzMiwgMzUsIDUzLCA1NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc2LCA3NywgNzhdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc3RhdGVEaWFncmFtX2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9zdGF0ZS9zdGF0ZUNvbW1vbi50c1xudmFyIERFRkFVTFRfRElBR1JBTV9ESVJFQ1RJT04gPSBcIkxSXCI7XG52YXIgREVGQVVMVF9ORVNURURfRE9DX0RJUiA9IFwiVEJcIjtcbnZhciBTVE1UX1NUQVRFID0gXCJzdGF0ZVwiO1xudmFyIFNUTVRfUkVMQVRJT04gPSBcInJlbGF0aW9uXCI7XG52YXIgU1RNVF9DTEFTU0RFRiA9IFwiY2xhc3NEZWZcIjtcbnZhciBTVE1UX1NUWUxFREVGID0gXCJzdHlsZVwiO1xudmFyIFNUTVRfQVBQTFlDTEFTUyA9IFwiYXBwbHlDbGFzc1wiO1xudmFyIERFRkFVTFRfU1RBVEVfVFlQRSA9IFwiZGVmYXVsdFwiO1xudmFyIERJVklERVJfVFlQRSA9IFwiZGl2aWRlclwiO1xudmFyIEdfRURHRV9TVFlMRSA9IFwiZmlsbDpub25lXCI7XG52YXIgR19FREdFX0FSUk9XSEVBRFNUWUxFID0gXCJmaWxsOiAjMzMzXCI7XG52YXIgR19FREdFX0xBQkVMUE9TID0gXCJjXCI7XG52YXIgR19FREdFX0xBQkVMVFlQRSA9IFwidGV4dFwiO1xudmFyIEdfRURHRV9USElDS05FU1MgPSBcIm5vcm1hbFwiO1xudmFyIFNIQVBFX1NUQVRFID0gXCJyZWN0XCI7XG52YXIgU0hBUEVfU1RBVEVfV0lUSF9ERVNDID0gXCJyZWN0V2l0aFRpdGxlXCI7XG52YXIgU0hBUEVfU1RBUlQgPSBcInN0YXRlU3RhcnRcIjtcbnZhciBTSEFQRV9FTkQgPSBcInN0YXRlRW5kXCI7XG52YXIgU0hBUEVfRElWSURFUiA9IFwiZGl2aWRlclwiO1xudmFyIFNIQVBFX0dST1VQID0gXCJyb3VuZGVkV2l0aFRpdGxlXCI7XG52YXIgU0hBUEVfTk9URSA9IFwibm90ZVwiO1xudmFyIFNIQVBFX05PVEVHUk9VUCA9IFwibm90ZUdyb3VwXCI7XG52YXIgQ1NTX0RJQUdSQU0gPSBcInN0YXRlZGlhZ3JhbVwiO1xudmFyIENTU19TVEFURSA9IFwic3RhdGVcIjtcbnZhciBDU1NfRElBR1JBTV9TVEFURSA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19TVEFURX1gO1xudmFyIENTU19FREdFID0gXCJ0cmFuc2l0aW9uXCI7XG52YXIgQ1NTX05PVEUgPSBcIm5vdGVcIjtcbnZhciBDU1NfTk9URV9FREdFID0gXCJub3RlLWVkZ2VcIjtcbnZhciBDU1NfRURHRV9OT1RFX0VER0UgPSBgJHtDU1NfRURHRX0gJHtDU1NfTk9URV9FREdFfWA7XG52YXIgQ1NTX0RJQUdSQU1fTk9URSA9IGAke0NTU19ESUFHUkFNfS0ke0NTU19OT1RFfWA7XG52YXIgQ1NTX0NMVVNURVIgPSBcImNsdXN0ZXJcIjtcbnZhciBDU1NfRElBR1JBTV9DTFVTVEVSID0gYCR7Q1NTX0RJQUdSQU19LSR7Q1NTX0NMVVNURVJ9YDtcbnZhciBDU1NfQ0xVU1RFUl9BTFQgPSBcImNsdXN0ZXItYWx0XCI7XG52YXIgQ1NTX0RJQUdSQU1fQ0xVU1RFUl9BTFQgPSBgJHtDU1NfRElBR1JBTX0tJHtDU1NfQ0xVU1RFUl9BTFR9YDtcbnZhciBQQVJFTlQgPSBcInBhcmVudFwiO1xudmFyIE5PVEUgPSBcIm5vdGVcIjtcbnZhciBET01JRF9TVEFURSA9IFwic3RhdGVcIjtcbnZhciBET01JRF9UWVBFX1NQQUNFUiA9IFwiLS0tLVwiO1xudmFyIE5PVEVfSUQgPSBgJHtET01JRF9UWVBFX1NQQUNFUn0ke05PVEV9YDtcbnZhciBQQVJFTlRfSUQgPSBgJHtET01JRF9UWVBFX1NQQUNFUn0ke1BBUkVOVH1gO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVSZW5kZXJlci12My11bmlmaWVkLnRzXG52YXIgZ2V0RGlyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyc2VkSXRlbSwgZGVmYXVsdERpciA9IERFRkFVTFRfTkVTVEVEX0RPQ19ESVIpID0+IHtcbiAgaWYgKCFwYXJzZWRJdGVtLmRvYykge1xuICAgIHJldHVybiBkZWZhdWx0RGlyO1xuICB9XG4gIGxldCBkaXIgPSBkZWZhdWx0RGlyO1xuICBmb3IgKGNvbnN0IHBhcnNlZEl0ZW1Eb2Mgb2YgcGFyc2VkSXRlbS5kb2MpIHtcbiAgICBpZiAocGFyc2VkSXRlbURvYy5zdG10ID09PSBcImRpclwiKSB7XG4gICAgICBkaXIgPSBwYXJzZWRJdGVtRG9jLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGlyO1xufSwgXCJnZXREaXJcIik7XG52YXIgZ2V0Q2xhc3NlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgZGlhZ3JhbU9iaikge1xuICBkaWFncmFtT2JqLmRiLmV4dHJhY3QoZGlhZ3JhbU9iai5kYi5nZXRSb290RG9jVjIoKSk7XG4gIHJldHVybiBkaWFncmFtT2JqLmRiLmdldENsYXNzZXMoKTtcbn0sIFwiZ2V0Q2xhc3Nlc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWcpIHtcbiAgbG9nLmluZm8oXCJSRUYwOlwiKTtcbiAgbG9nLmluZm8oXCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKVwiLCBpZCk7XG4gIGNvbnN0IHsgc2VjdXJpdHlMZXZlbCwgc3RhdGU6IGNvbmYsIGxheW91dCB9ID0gZ2V0Q29uZmlnKCk7XG4gIGRpYWcuZGIuZXh0cmFjdChkaWFnLmRiLmdldFJvb3REb2NWMigpKTtcbiAgY29uc3QgZGF0YTRMYXlvdXQgPSBkaWFnLmRiLmdldERhdGEoKTtcbiAgY29uc3Qgc3ZnID0gZ2V0RGlhZ3JhbUVsZW1lbnQoaWQsIHNlY3VyaXR5TGV2ZWwpO1xuICBkYXRhNExheW91dC50eXBlID0gZGlhZy50eXBlO1xuICBkYXRhNExheW91dC5sYXlvdXRBbGdvcml0aG0gPSBsYXlvdXQ7XG4gIGRhdGE0TGF5b3V0Lm5vZGVTcGFjaW5nID0gY29uZj8ubm9kZVNwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0LnJhbmtTcGFjaW5nID0gY29uZj8ucmFua1NwYWNpbmcgfHwgNTA7XG4gIGRhdGE0TGF5b3V0Lm1hcmtlcnMgPSBbXCJiYXJiXCJdO1xuICBkYXRhNExheW91dC5kaWFncmFtSWQgPSBpZDtcbiAgYXdhaXQgcmVuZGVyKGRhdGE0TGF5b3V0LCBzdmcpO1xuICBjb25zdCBwYWRkaW5nID0gODtcbiAgdXRpbHNfZGVmYXVsdC5pbnNlcnRUaXRsZShcbiAgICBzdmcsXG4gICAgXCJzdGF0ZWRpYWdyYW1UaXRsZVRleHRcIixcbiAgICBjb25mPy50aXRsZVRvcE1hcmdpbiA/PyAyNSxcbiAgICBkaWFnLmRiLmdldERpYWdyYW1UaXRsZSgpXG4gICk7XG4gIHNldHVwVmlld1BvcnRGb3JTVkcoc3ZnLCBwYWRkaW5nLCBDU1NfRElBR1JBTSwgY29uZj8udXNlTWF4V2lkdGggPz8gdHJ1ZSk7XG59LCBcImRyYXdcIik7XG52YXIgc3RhdGVSZW5kZXJlcl92M191bmlmaWVkX2RlZmF1bHQgPSB7XG4gIGdldENsYXNzZXMsXG4gIGRyYXcsXG4gIGdldERpclxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL2RhdGFGZXRjaGVyLmpzXG52YXIgbm9kZURiID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBncmFwaEl0ZW1Db3VudCA9IDA7XG5mdW5jdGlvbiBzdGF0ZURvbUlkKGl0ZW1JZCA9IFwiXCIsIGNvdW50ZXIgPSAwLCB0eXBlID0gXCJcIiwgdHlwZVNwYWNlciA9IERPTUlEX1RZUEVfU1BBQ0VSKSB7XG4gIGNvbnN0IHR5cGVTdHIgPSB0eXBlICE9PSBudWxsICYmIHR5cGUubGVuZ3RoID4gMCA/IGAke3R5cGVTcGFjZXJ9JHt0eXBlfWAgOiBcIlwiO1xuICByZXR1cm4gYCR7RE9NSURfU1RBVEV9LSR7aXRlbUlkfSR7dHlwZVN0cn0tJHtjb3VudGVyfWA7XG59XG5fX25hbWUoc3RhdGVEb21JZCwgXCJzdGF0ZURvbUlkXCIpO1xudmFyIHNldHVwRG9jID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50UGFyc2VkSXRlbSwgZG9jLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpID0+IHtcbiAgbG9nLnRyYWNlKFwiaXRlbXNcIiwgZG9jKTtcbiAgZG9jLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0uc3RtdCkge1xuICAgICAgY2FzZSBTVE1UX1NUQVRFOlxuICAgICAgICBkYXRhRmV0Y2hlcihwYXJlbnRQYXJzZWRJdGVtLCBpdGVtLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgREVGQVVMVF9TVEFURV9UWVBFOlxuICAgICAgICBkYXRhRmV0Y2hlcihwYXJlbnRQYXJzZWRJdGVtLCBpdGVtLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RNVF9SRUxBVElPTjpcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFGZXRjaGVyKFxuICAgICAgICAgICAgcGFyZW50UGFyc2VkSXRlbSxcbiAgICAgICAgICAgIGl0ZW0uc3RhdGUxLFxuICAgICAgICAgICAgZGlhZ3JhbVN0YXRlcyxcbiAgICAgICAgICAgIG5vZGVzMixcbiAgICAgICAgICAgIGVkZ2VzMixcbiAgICAgICAgICAgIGFsdEZsYWcsXG4gICAgICAgICAgICBsb29rLFxuICAgICAgICAgICAgY2xhc3NlczJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRhdGFGZXRjaGVyKFxuICAgICAgICAgICAgcGFyZW50UGFyc2VkSXRlbSxcbiAgICAgICAgICAgIGl0ZW0uc3RhdGUyLFxuICAgICAgICAgICAgZGlhZ3JhbVN0YXRlcyxcbiAgICAgICAgICAgIG5vZGVzMixcbiAgICAgICAgICAgIGVkZ2VzMixcbiAgICAgICAgICAgIGFsdEZsYWcsXG4gICAgICAgICAgICBsb29rLFxuICAgICAgICAgICAgY2xhc3NlczJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0ge1xuICAgICAgICAgICAgaWQ6IFwiZWRnZVwiICsgZ3JhcGhJdGVtQ291bnQsXG4gICAgICAgICAgICBzdGFydDogaXRlbS5zdGF0ZTEuaWQsXG4gICAgICAgICAgICBlbmQ6IGl0ZW0uc3RhdGUyLmlkLFxuICAgICAgICAgICAgYXJyb3doZWFkOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgYXJyb3dUeXBlRW5kOiBcImFycm93X2JhcmJcIixcbiAgICAgICAgICAgIHN0eWxlOiBHX0VER0VfU1RZTEUsXG4gICAgICAgICAgICBsYWJlbFN0eWxlOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dChpdGVtLmRlc2NyaXB0aW9uLCBnZXRDb25maWcoKSksXG4gICAgICAgICAgICBhcnJvd2hlYWRTdHlsZTogR19FREdFX0FSUk9XSEVBRFNUWUxFLFxuICAgICAgICAgICAgbGFiZWxwb3M6IEdfRURHRV9MQUJFTFBPUyxcbiAgICAgICAgICAgIGxhYmVsVHlwZTogR19FREdFX0xBQkVMVFlQRSxcbiAgICAgICAgICAgIHRoaWNrbmVzczogR19FREdFX1RISUNLTkVTUyxcbiAgICAgICAgICAgIGNsYXNzZXM6IENTU19FREdFLFxuICAgICAgICAgICAgbG9va1xuICAgICAgICAgIH07XG4gICAgICAgICAgZWRnZXMyLnB1c2goZWRnZURhdGEpO1xuICAgICAgICAgIGdyYXBoSXRlbUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9KTtcbn0sIFwic2V0dXBEb2NcIik7XG52YXIgZ2V0RGlyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBhcnNlZEl0ZW0sIGRlZmF1bHREaXIgPSBERUZBVUxUX05FU1RFRF9ET0NfRElSKSA9PiB7XG4gIGxldCBkaXIgPSBkZWZhdWx0RGlyO1xuICBpZiAocGFyc2VkSXRlbS5kb2MpIHtcbiAgICBmb3IgKGNvbnN0IHBhcnNlZEl0ZW1Eb2Mgb2YgcGFyc2VkSXRlbS5kb2MpIHtcbiAgICAgIGlmIChwYXJzZWRJdGVtRG9jLnN0bXQgPT09IFwiZGlyXCIpIHtcbiAgICAgICAgZGlyID0gcGFyc2VkSXRlbURvYy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRpcjtcbn0sIFwiZ2V0RGlyXCIpO1xuZnVuY3Rpb24gaW5zZXJ0T3JVcGRhdGVOb2RlKG5vZGVzMiwgbm9kZURhdGEsIGNsYXNzZXMyKSB7XG4gIGlmICghbm9kZURhdGEuaWQgfHwgbm9kZURhdGEuaWQgPT09IFwiPC9qb2luPjwvZm9yaz5cIiB8fCBub2RlRGF0YS5pZCA9PT0gXCI8L2Nob2ljZT5cIikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobm9kZURhdGEuY3NzQ2xhc3Nlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShub2RlRGF0YS5jc3NDb21waWxlZFN0eWxlcykpIHtcbiAgICAgIG5vZGVEYXRhLmNzc0NvbXBpbGVkU3R5bGVzID0gW107XG4gICAgfVxuICAgIG5vZGVEYXRhLmNzc0NsYXNzZXMuc3BsaXQoXCIgXCIpLmZvckVhY2goKGNzc0NsYXNzKSA9PiB7XG4gICAgICBpZiAoY2xhc3NlczIuZ2V0KGNzc0NsYXNzKSkge1xuICAgICAgICBjb25zdCBjbGFzc0RlZiA9IGNsYXNzZXMyLmdldChjc3NDbGFzcyk7XG4gICAgICAgIG5vZGVEYXRhLmNzc0NvbXBpbGVkU3R5bGVzID0gWy4uLm5vZGVEYXRhLmNzc0NvbXBpbGVkU3R5bGVzLCAuLi5jbGFzc0RlZi5zdHlsZXNdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nTm9kZURhdGEgPSBub2RlczIuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gbm9kZURhdGEuaWQpO1xuICBpZiAoZXhpc3RpbmdOb2RlRGF0YSkge1xuICAgIE9iamVjdC5hc3NpZ24oZXhpc3RpbmdOb2RlRGF0YSwgbm9kZURhdGEpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzMi5wdXNoKG5vZGVEYXRhKTtcbiAgfVxufVxuX19uYW1lKGluc2VydE9yVXBkYXRlTm9kZSwgXCJpbnNlcnRPclVwZGF0ZU5vZGVcIik7XG5mdW5jdGlvbiBnZXRDbGFzc2VzRnJvbURiSW5mbyhkYkluZm9JdGVtKSB7XG4gIHJldHVybiBkYkluZm9JdGVtPy5jbGFzc2VzPy5qb2luKFwiIFwiKSA/PyBcIlwiO1xufVxuX19uYW1lKGdldENsYXNzZXNGcm9tRGJJbmZvLCBcImdldENsYXNzZXNGcm9tRGJJbmZvXCIpO1xuZnVuY3Rpb24gZ2V0U3R5bGVzRnJvbURiSW5mbyhkYkluZm9JdGVtKSB7XG4gIHJldHVybiBkYkluZm9JdGVtPy5zdHlsZXMgPz8gW107XG59XG5fX25hbWUoZ2V0U3R5bGVzRnJvbURiSW5mbywgXCJnZXRTdHlsZXNGcm9tRGJJbmZvXCIpO1xudmFyIGRhdGFGZXRjaGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgocGFyZW50LCBwYXJzZWRJdGVtLCBkaWFncmFtU3RhdGVzLCBub2RlczIsIGVkZ2VzMiwgYWx0RmxhZywgbG9vaywgY2xhc3NlczIpID0+IHtcbiAgY29uc3QgaXRlbUlkID0gcGFyc2VkSXRlbS5pZDtcbiAgY29uc3QgZGJTdGF0ZSA9IGRpYWdyYW1TdGF0ZXMuZ2V0KGl0ZW1JZCk7XG4gIGNvbnN0IGNsYXNzU3RyID0gZ2V0Q2xhc3Nlc0Zyb21EYkluZm8oZGJTdGF0ZSk7XG4gIGNvbnN0IHN0eWxlID0gZ2V0U3R5bGVzRnJvbURiSW5mbyhkYlN0YXRlKTtcbiAgbG9nLmluZm8oXCJkYXRhRmV0Y2hlciBwYXJzZWRJdGVtXCIsIHBhcnNlZEl0ZW0sIGRiU3RhdGUsIHN0eWxlKTtcbiAgaWYgKGl0ZW1JZCAhPT0gXCJyb290XCIpIHtcbiAgICBsZXQgc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICBpZiAocGFyc2VkSXRlbS5zdGFydCA9PT0gdHJ1ZSkge1xuICAgICAgc2hhcGUgPSBTSEFQRV9TVEFSVDtcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEl0ZW0uc3RhcnQgPT09IGZhbHNlKSB7XG4gICAgICBzaGFwZSA9IFNIQVBFX0VORDtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEl0ZW0udHlwZSAhPT0gREVGQVVMVF9TVEFURV9UWVBFKSB7XG4gICAgICBzaGFwZSA9IHBhcnNlZEl0ZW0udHlwZTtcbiAgICB9XG4gICAgaWYgKCFub2RlRGIuZ2V0KGl0ZW1JZCkpIHtcbiAgICAgIG5vZGVEYi5zZXQoaXRlbUlkLCB7XG4gICAgICAgIGlkOiBpdGVtSWQsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBkZXNjcmlwdGlvbjogY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KGl0ZW1JZCwgZ2V0Q29uZmlnKCkpLFxuICAgICAgICBjc3NDbGFzc2VzOiBgJHtjbGFzc1N0cn0gJHtDU1NfRElBR1JBTV9TVEFURX1gLFxuICAgICAgICBjc3NTdHlsZXM6IHN0eWxlXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbmV3Tm9kZSA9IG5vZGVEYi5nZXQoaXRlbUlkKTtcbiAgICBpZiAocGFyc2VkSXRlbS5kZXNjcmlwdGlvbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3Tm9kZS5kZXNjcmlwdGlvbikpIHtcbiAgICAgICAgbmV3Tm9kZS5zaGFwZSA9IFNIQVBFX1NUQVRFX1dJVEhfREVTQztcbiAgICAgICAgbmV3Tm9kZS5kZXNjcmlwdGlvbi5wdXNoKHBhcnNlZEl0ZW0uZGVzY3JpcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld05vZGUuZGVzY3JpcHRpb24/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBuZXdOb2RlLnNoYXBlID0gU0hBUEVfU1RBVEVfV0lUSF9ERVNDO1xuICAgICAgICAgIGlmIChuZXdOb2RlLmRlc2NyaXB0aW9uID09PSBpdGVtSWQpIHtcbiAgICAgICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24gPSBbcGFyc2VkSXRlbS5kZXNjcmlwdGlvbl07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld05vZGUuZGVzY3JpcHRpb24gPSBbbmV3Tm9kZS5kZXNjcmlwdGlvbiwgcGFyc2VkSXRlbS5kZXNjcmlwdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICAgICAgICBuZXdOb2RlLmRlc2NyaXB0aW9uID0gcGFyc2VkSXRlbS5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3Tm9kZS5kZXNjcmlwdGlvbiA9IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dE9yQXJyYXkobmV3Tm9kZS5kZXNjcmlwdGlvbiwgZ2V0Q29uZmlnKCkpO1xuICAgIH1cbiAgICBpZiAobmV3Tm9kZS5kZXNjcmlwdGlvbj8ubGVuZ3RoID09PSAxICYmIG5ld05vZGUuc2hhcGUgPT09IFNIQVBFX1NUQVRFX1dJVEhfREVTQykge1xuICAgICAgaWYgKG5ld05vZGUudHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9HUk9VUDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld05vZGUuc2hhcGUgPSBTSEFQRV9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFuZXdOb2RlLnR5cGUgJiYgcGFyc2VkSXRlbS5kb2MpIHtcbiAgICAgIGxvZy5pbmZvKFwiU2V0dGluZyBjbHVzdGVyIGZvciBYQ1hcIiwgaXRlbUlkLCBnZXREaXIyKHBhcnNlZEl0ZW0pKTtcbiAgICAgIG5ld05vZGUudHlwZSA9IFwiZ3JvdXBcIjtcbiAgICAgIG5ld05vZGUuaXNHcm91cCA9IHRydWU7XG4gICAgICBuZXdOb2RlLmRpciA9IGdldERpcjIocGFyc2VkSXRlbSk7XG4gICAgICBuZXdOb2RlLnNoYXBlID0gcGFyc2VkSXRlbS50eXBlID09PSBESVZJREVSX1RZUEUgPyBTSEFQRV9ESVZJREVSIDogU0hBUEVfR1JPVVA7XG4gICAgICBuZXdOb2RlLmNzc0NsYXNzZXMgPSBgJHtuZXdOb2RlLmNzc0NsYXNzZXN9ICR7Q1NTX0RJQUdSQU1fQ0xVU1RFUn0gJHthbHRGbGFnID8gQ1NTX0RJQUdSQU1fQ0xVU1RFUl9BTFQgOiBcIlwifWA7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVEYXRhID0ge1xuICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgIHNoYXBlOiBuZXdOb2RlLnNoYXBlLFxuICAgICAgbGFiZWw6IG5ld05vZGUuZGVzY3JpcHRpb24sXG4gICAgICBjc3NDbGFzc2VzOiBuZXdOb2RlLmNzc0NsYXNzZXMsXG4gICAgICBjc3NDb21waWxlZFN0eWxlczogW10sXG4gICAgICBjc3NTdHlsZXM6IG5ld05vZGUuY3NzU3R5bGVzLFxuICAgICAgaWQ6IGl0ZW1JZCxcbiAgICAgIGRpcjogbmV3Tm9kZS5kaXIsXG4gICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50KSxcbiAgICAgIHR5cGU6IG5ld05vZGUudHlwZSxcbiAgICAgIGlzR3JvdXA6IG5ld05vZGUudHlwZSA9PT0gXCJncm91cFwiLFxuICAgICAgcGFkZGluZzogOCxcbiAgICAgIHJ4OiAxMCxcbiAgICAgIHJ5OiAxMCxcbiAgICAgIGxvb2tcbiAgICB9O1xuICAgIGlmIChub2RlRGF0YS5zaGFwZSA9PT0gU0hBUEVfRElWSURFUikge1xuICAgICAgbm9kZURhdGEubGFiZWwgPSBcIlwiO1xuICAgIH1cbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pZCAhPT0gXCJyb290XCIpIHtcbiAgICAgIGxvZy50cmFjZShcIlNldHRpbmcgbm9kZSBcIiwgaXRlbUlkLCBcIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50IFwiLCBwYXJlbnQuaWQpO1xuICAgICAgbm9kZURhdGEucGFyZW50SWQgPSBwYXJlbnQuaWQ7XG4gICAgfVxuICAgIG5vZGVEYXRhLmNlbnRlckxhYmVsID0gdHJ1ZTtcbiAgICBpZiAocGFyc2VkSXRlbS5ub3RlKSB7XG4gICAgICBjb25zdCBub3RlRGF0YSA9IHtcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgc2hhcGU6IFNIQVBFX05PVEUsXG4gICAgICAgIGxhYmVsOiBwYXJzZWRJdGVtLm5vdGUudGV4dCxcbiAgICAgICAgY3NzQ2xhc3NlczogQ1NTX0RJQUdSQU1fTk9URSxcbiAgICAgICAgLy8gdXNlSHRtbExhYmVsczogZmFsc2UsXG4gICAgICAgIGNzc1N0eWxlczogW10sXG4gICAgICAgIGNzc0NvbXBpbGVzU3R5bGVzOiBbXSxcbiAgICAgICAgaWQ6IGl0ZW1JZCArIE5PVEVfSUQgKyBcIi1cIiArIGdyYXBoSXRlbUNvdW50LFxuICAgICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50LCBOT1RFKSxcbiAgICAgICAgdHlwZTogbmV3Tm9kZS50eXBlLFxuICAgICAgICBpc0dyb3VwOiBuZXdOb2RlLnR5cGUgPT09IFwiZ3JvdXBcIixcbiAgICAgICAgcGFkZGluZzogZ2V0Q29uZmlnKCkuZmxvd2NoYXJ0LnBhZGRpbmcsXG4gICAgICAgIGxvb2ssXG4gICAgICAgIHBvc2l0aW9uOiBwYXJzZWRJdGVtLm5vdGUucG9zaXRpb25cbiAgICAgIH07XG4gICAgICBjb25zdCBwYXJlbnROb2RlSWQgPSBpdGVtSWQgKyBQQVJFTlRfSUQ7XG4gICAgICBjb25zdCBncm91cERhdGEgPSB7XG4gICAgICAgIGxhYmVsU3R5bGU6IFwiXCIsXG4gICAgICAgIHNoYXBlOiBTSEFQRV9OT1RFR1JPVVAsXG4gICAgICAgIGxhYmVsOiBwYXJzZWRJdGVtLm5vdGUudGV4dCxcbiAgICAgICAgY3NzQ2xhc3NlczogbmV3Tm9kZS5jc3NDbGFzc2VzLFxuICAgICAgICBjc3NTdHlsZXM6IFtdLFxuICAgICAgICBpZDogaXRlbUlkICsgUEFSRU5UX0lELFxuICAgICAgICBkb21JZDogc3RhdGVEb21JZChpdGVtSWQsIGdyYXBoSXRlbUNvdW50LCBQQVJFTlQpLFxuICAgICAgICB0eXBlOiBcImdyb3VwXCIsXG4gICAgICAgIGlzR3JvdXA6IHRydWUsXG4gICAgICAgIHBhZGRpbmc6IDE2LFxuICAgICAgICAvL2dldENvbmZpZygpLmZsb3djaGFydC5wYWRkaW5nXG4gICAgICAgIGxvb2ssXG4gICAgICAgIHBvc2l0aW9uOiBwYXJzZWRJdGVtLm5vdGUucG9zaXRpb25cbiAgICAgIH07XG4gICAgICBncmFwaEl0ZW1Db3VudCsrO1xuICAgICAgZ3JvdXBEYXRhLmlkID0gcGFyZW50Tm9kZUlkO1xuICAgICAgbm90ZURhdGEucGFyZW50SWQgPSBwYXJlbnROb2RlSWQ7XG4gICAgICBpbnNlcnRPclVwZGF0ZU5vZGUobm9kZXMyLCBncm91cERhdGEsIGNsYXNzZXMyKTtcbiAgICAgIGluc2VydE9yVXBkYXRlTm9kZShub2RlczIsIG5vdGVEYXRhLCBjbGFzc2VzMik7XG4gICAgICBpbnNlcnRPclVwZGF0ZU5vZGUobm9kZXMyLCBub2RlRGF0YSwgY2xhc3NlczIpO1xuICAgICAgbGV0IGZyb20gPSBpdGVtSWQ7XG4gICAgICBsZXQgdG8gPSBub3RlRGF0YS5pZDtcbiAgICAgIGlmIChwYXJzZWRJdGVtLm5vdGUucG9zaXRpb24gPT09IFwibGVmdCBvZlwiKSB7XG4gICAgICAgIGZyb20gPSBub3RlRGF0YS5pZDtcbiAgICAgICAgdG8gPSBpdGVtSWQ7XG4gICAgICB9XG4gICAgICBlZGdlczIucHVzaCh7XG4gICAgICAgIGlkOiBmcm9tICsgXCItXCIgKyB0byxcbiAgICAgICAgc3RhcnQ6IGZyb20sXG4gICAgICAgIGVuZDogdG8sXG4gICAgICAgIGFycm93aGVhZDogXCJub25lXCIsXG4gICAgICAgIGFycm93VHlwZUVuZDogXCJcIixcbiAgICAgICAgc3R5bGU6IEdfRURHRV9TVFlMRSxcbiAgICAgICAgbGFiZWxTdHlsZTogXCJcIixcbiAgICAgICAgY2xhc3NlczogQ1NTX0VER0VfTk9URV9FREdFLFxuICAgICAgICBhcnJvd2hlYWRTdHlsZTogR19FREdFX0FSUk9XSEVBRFNUWUxFLFxuICAgICAgICBsYWJlbHBvczogR19FREdFX0xBQkVMUE9TLFxuICAgICAgICBsYWJlbFR5cGU6IEdfRURHRV9MQUJFTFRZUEUsXG4gICAgICAgIHRoaWNrbmVzczogR19FREdFX1RISUNLTkVTUyxcbiAgICAgICAgbG9va1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydE9yVXBkYXRlTm9kZShub2RlczIsIG5vZGVEYXRhLCBjbGFzc2VzMik7XG4gICAgfVxuICB9XG4gIGlmIChwYXJzZWRJdGVtLmRvYykge1xuICAgIGxvZy50cmFjZShcIkFkZGluZyBub2RlcyBjaGlsZHJlbiBcIik7XG4gICAgc2V0dXBEb2MocGFyc2VkSXRlbSwgcGFyc2VkSXRlbS5kb2MsIGRpYWdyYW1TdGF0ZXMsIG5vZGVzMiwgZWRnZXMyLCAhYWx0RmxhZywgbG9vaywgY2xhc3NlczIpO1xuICB9XG59LCBcImRhdGFGZXRjaGVyXCIpO1xudmFyIHJlc2V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIG5vZGVEYi5jbGVhcigpO1xuICBncmFwaEl0ZW1Db3VudCA9IDA7XG59LCBcInJlc2V0XCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEYi5qc1xudmFyIFNUQVJUX05PREUgPSBcIlsqXVwiO1xudmFyIFNUQVJUX1RZUEUgPSBcInN0YXJ0XCI7XG52YXIgRU5EX05PREUgPSBTVEFSVF9OT0RFO1xudmFyIEVORF9UWVBFID0gXCJlbmRcIjtcbnZhciBDT0xPUl9LRVlXT1JEID0gXCJjb2xvclwiO1xudmFyIEZJTExfS0VZV09SRCA9IFwiZmlsbFwiO1xudmFyIEJHX0ZJTEwgPSBcImJnRmlsbFwiO1xudmFyIFNUWUxFQ0xBU1NfU0VQID0gXCIsXCI7XG5mdW5jdGlvbiBuZXdDbGFzc2VzTGlzdCgpIHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG59XG5fX25hbWUobmV3Q2xhc3Nlc0xpc3QsIFwibmV3Q2xhc3Nlc0xpc3RcIik7XG52YXIgbm9kZXMgPSBbXTtcbnZhciBlZGdlcyA9IFtdO1xudmFyIGRpcmVjdGlvbiA9IERFRkFVTFRfRElBR1JBTV9ESVJFQ1RJT047XG52YXIgcm9vdERvYyA9IFtdO1xudmFyIGNsYXNzZXMgPSBuZXdDbGFzc2VzTGlzdCgpO1xudmFyIG5ld0RvYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIC8qKiBAdHlwZSB7eyBpZDE6IHN0cmluZywgaWQyOiBzdHJpbmcsIHJlbGF0aW9uVGl0bGU6IHN0cmluZyB9W119ICovXG4gICAgcmVsYXRpb25zOiBbXSxcbiAgICBzdGF0ZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgZG9jdW1lbnRzOiB7fVxuICB9O1xufSwgXCJuZXdEb2NcIik7XG52YXIgZG9jdW1lbnRzID0ge1xuICByb290OiBuZXdEb2MoKVxufTtcbnZhciBjdXJyZW50RG9jdW1lbnQgPSBkb2N1bWVudHMucm9vdDtcbnZhciBzdGFydEVuZENvdW50ID0gMDtcbnZhciBkaXZpZGVyQ250ID0gMDtcbnZhciBsaW5lVHlwZSA9IHtcbiAgTElORTogMCxcbiAgRE9UVEVEX0xJTkU6IDFcbn07XG52YXIgcmVsYXRpb25UeXBlID0ge1xuICBBR0dSRUdBVElPTjogMCxcbiAgRVhURU5TSU9OOiAxLFxuICBDT01QT1NJVElPTjogMixcbiAgREVQRU5ERU5DWTogM1xufTtcbnZhciBjbG9uZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG8pID0+IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpLCBcImNsb25lXCIpO1xudmFyIHNldFJvb3REb2MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvKSA9PiB7XG4gIGxvZy5pbmZvKFwiU2V0dGluZyByb290IGRvY1wiLCBvKTtcbiAgcm9vdERvYyA9IG87XG59LCBcInNldFJvb3REb2NcIik7XG52YXIgZ2V0Um9vdERvYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gcm9vdERvYywgXCJnZXRSb290RG9jXCIpO1xudmFyIGRvY1RyYW5zbGF0b3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnQsIG5vZGUsIGZpcnN0KSA9PiB7XG4gIGlmIChub2RlLnN0bXQgPT09IFNUTVRfUkVMQVRJT04pIHtcbiAgICBkb2NUcmFuc2xhdG9yKHBhcmVudCwgbm9kZS5zdGF0ZTEsIHRydWUpO1xuICAgIGRvY1RyYW5zbGF0b3IocGFyZW50LCBub2RlLnN0YXRlMiwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIGlmIChub2RlLnN0bXQgPT09IFNUTVRfU1RBVEUpIHtcbiAgICAgIGlmIChub2RlLmlkID09PSBcIlsqXVwiKSB7XG4gICAgICAgIG5vZGUuaWQgPSBmaXJzdCA/IHBhcmVudC5pZCArIFwiX3N0YXJ0XCIgOiBwYXJlbnQuaWQgKyBcIl9lbmRcIjtcbiAgICAgICAgbm9kZS5zdGFydCA9IGZpcnN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5pZCA9IG5vZGUuaWQudHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZS5kb2MpIHtcbiAgICAgIGNvbnN0IGRvYyA9IFtdO1xuICAgICAgbGV0IGN1cnJlbnREb2MgPSBbXTtcbiAgICAgIGxldCBpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGUuZG9jLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChub2RlLmRvY1tpXS50eXBlID09PSBESVZJREVSX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBuZXdOb2RlID0gY2xvbmUobm9kZS5kb2NbaV0pO1xuICAgICAgICAgIG5ld05vZGUuZG9jID0gY2xvbmUoY3VycmVudERvYyk7XG4gICAgICAgICAgZG9jLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgICAgY3VycmVudERvYyA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnREb2MucHVzaChub2RlLmRvY1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkb2MubGVuZ3RoID4gMCAmJiBjdXJyZW50RG9jLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHtcbiAgICAgICAgICBzdG10OiBTVE1UX1NUQVRFLFxuICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgdHlwZTogXCJkaXZpZGVyXCIsXG4gICAgICAgICAgZG9jOiBjbG9uZShjdXJyZW50RG9jKVxuICAgICAgICB9O1xuICAgICAgICBkb2MucHVzaChjbG9uZShuZXdOb2RlKSk7XG4gICAgICAgIG5vZGUuZG9jID0gZG9jO1xuICAgICAgfVxuICAgICAgbm9kZS5kb2MuZm9yRWFjaCgoZG9jTm9kZSkgPT4gZG9jVHJhbnNsYXRvcihub2RlLCBkb2NOb2RlLCB0cnVlKSk7XG4gICAgfVxuICB9XG59LCBcImRvY1RyYW5zbGF0b3JcIik7XG52YXIgZ2V0Um9vdERvY1YyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRvY1RyYW5zbGF0b3IoeyBpZDogXCJyb290XCIgfSwgeyBpZDogXCJyb290XCIsIGRvYzogcm9vdERvYyB9LCB0cnVlKTtcbiAgcmV0dXJuIHsgaWQ6IFwicm9vdFwiLCBkb2M6IHJvb3REb2MgfTtcbn0sIFwiZ2V0Um9vdERvY1YyXCIpO1xudmFyIGV4dHJhY3QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChfZG9jKSA9PiB7XG4gIGxldCBkb2M7XG4gIGlmIChfZG9jLmRvYykge1xuICAgIGRvYyA9IF9kb2MuZG9jO1xuICB9IGVsc2Uge1xuICAgIGRvYyA9IF9kb2M7XG4gIH1cbiAgbG9nLmluZm8oZG9jKTtcbiAgY2xlYXIyKHRydWUpO1xuICBsb2cuaW5mbyhcIkV4dHJhY3QgaW5pdGlhbCBkb2N1bWVudDpcIiwgZG9jKTtcbiAgZG9jLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBsb2cud2FybihcIlN0YXRlbWVudFwiLCBpdGVtLnN0bXQpO1xuICAgIHN3aXRjaCAoaXRlbS5zdG10KSB7XG4gICAgICBjYXNlIFNUTVRfU1RBVEU6XG4gICAgICAgIGFkZFN0YXRlKFxuICAgICAgICAgIGl0ZW0uaWQudHJpbSgpLFxuICAgICAgICAgIGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtLmRvYyxcbiAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGl0ZW0ubm90ZSxcbiAgICAgICAgICBpdGVtLmNsYXNzZXMsXG4gICAgICAgICAgaXRlbS5zdHlsZXMsXG4gICAgICAgICAgaXRlbS50ZXh0U3R5bGVzXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTVE1UX1JFTEFUSU9OOlxuICAgICAgICBhZGRSZWxhdGlvbihpdGVtLnN0YXRlMSwgaXRlbS5zdGF0ZTIsIGl0ZW0uZGVzY3JpcHRpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU1RNVF9DTEFTU0RFRjpcbiAgICAgICAgYWRkU3R5bGVDbGFzcyhpdGVtLmlkLnRyaW0oKSwgaXRlbS5jbGFzc2VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUTVRfU1RZTEVERUY6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBpZHMgPSBpdGVtLmlkLnRyaW0oKS5zcGxpdChcIixcIik7XG4gICAgICAgICAgY29uc3Qgc3R5bGVzID0gaXRlbS5zdHlsZUNsYXNzLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICBpZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZFN0YXRlID0gZ2V0U3RhdGUoaWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkSWQgPSBpZC50cmltKCk7XG4gICAgICAgICAgICAgIGFkZFN0YXRlKHRyaW1tZWRJZCk7XG4gICAgICAgICAgICAgIGZvdW5kU3RhdGUgPSBnZXRTdGF0ZSh0cmltbWVkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm91bmRTdGF0ZS5zdHlsZXMgPSBzdHlsZXMubWFwKChzKSA9PiBzLnJlcGxhY2UoLzsvZywgXCJcIik/LnRyaW0oKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUTVRfQVBQTFlDTEFTUzpcbiAgICAgICAgc2V0Q3NzQ2xhc3MoaXRlbS5pZC50cmltKCksIGl0ZW0uc3R5bGVDbGFzcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGRpYWdyYW1TdGF0ZXMgPSBnZXRTdGF0ZXMoKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IGxvb2sgPSBjb25maWcubG9vaztcbiAgcmVzZXQoKTtcbiAgZGF0YUZldGNoZXIodm9pZCAwLCBnZXRSb290RG9jVjIoKSwgZGlhZ3JhbVN0YXRlcywgbm9kZXMsIGVkZ2VzLCB0cnVlLCBsb29rLCBjbGFzc2VzKTtcbiAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUubGFiZWwpKSB7XG4gICAgICBub2RlLmRlc2NyaXB0aW9uID0gbm9kZS5sYWJlbC5zbGljZSgxKTtcbiAgICAgIGlmIChub2RlLmlzR3JvdXAgJiYgbm9kZS5kZXNjcmlwdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkdyb3VwIG5vZGVzIGNhbiBvbmx5IGhhdmUgbGFiZWwuIFJlbW92ZSB0aGUgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBmb3Igbm9kZSBbXCIgKyBub2RlLmlkICsgXCJdXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGUubGFiZWwgPSBub2RlLmxhYmVsWzBdO1xuICAgIH1cbiAgfSk7XG59LCBcImV4dHJhY3RcIik7XG52YXIgYWRkU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCB0eXBlID0gREVGQVVMVF9TVEFURV9UWVBFLCBkb2MgPSBudWxsLCBkZXNjciA9IG51bGwsIG5vdGUgPSBudWxsLCBjbGFzc2VzMiA9IG51bGwsIHN0eWxlcyA9IG51bGwsIHRleHRTdHlsZXMgPSBudWxsKSB7XG4gIGNvbnN0IHRyaW1tZWRJZCA9IGlkPy50cmltKCk7XG4gIGlmICghY3VycmVudERvY3VtZW50LnN0YXRlcy5oYXModHJpbW1lZElkKSkge1xuICAgIGxvZy5pbmZvKFwiQWRkaW5nIHN0YXRlIFwiLCB0cmltbWVkSWQsIGRlc2NyKTtcbiAgICBjdXJyZW50RG9jdW1lbnQuc3RhdGVzLnNldCh0cmltbWVkSWQsIHtcbiAgICAgIGlkOiB0cmltbWVkSWQsXG4gICAgICBkZXNjcmlwdGlvbnM6IFtdLFxuICAgICAgdHlwZSxcbiAgICAgIGRvYyxcbiAgICAgIG5vdGUsXG4gICAgICBjbGFzc2VzOiBbXSxcbiAgICAgIHN0eWxlczogW10sXG4gICAgICB0ZXh0U3R5bGVzOiBbXVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICghY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQodHJpbW1lZElkKS5kb2MpIHtcbiAgICAgIGN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KHRyaW1tZWRJZCkuZG9jID0gZG9jO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KHRyaW1tZWRJZCkudHlwZSkge1xuICAgICAgY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQodHJpbW1lZElkKS50eXBlID0gdHlwZTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlc2NyKSB7XG4gICAgbG9nLmluZm8oXCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uXCIsIHRyaW1tZWRJZCwgZGVzY3IpO1xuICAgIGlmICh0eXBlb2YgZGVzY3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFkZERlc2NyaXB0aW9uKHRyaW1tZWRJZCwgZGVzY3IudHJpbSgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZXNjciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZGVzY3IuZm9yRWFjaCgoZGVzKSA9PiBhZGREZXNjcmlwdGlvbih0cmltbWVkSWQsIGRlcy50cmltKCkpKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vdGUpIHtcbiAgICBjb25zdCBkb2MyID0gY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQodHJpbW1lZElkKTtcbiAgICBkb2MyLm5vdGUgPSBub3RlO1xuICAgIGRvYzIubm90ZS50ZXh0ID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KGRvYzIubm90ZS50ZXh0LCBnZXRDb25maWcoKSk7XG4gIH1cbiAgaWYgKGNsYXNzZXMyKSB7XG4gICAgbG9nLmluZm8oXCJTZXR0aW5nIHN0YXRlIGNsYXNzZXNcIiwgdHJpbW1lZElkLCBjbGFzc2VzMik7XG4gICAgY29uc3QgY2xhc3Nlc0xpc3QgPSB0eXBlb2YgY2xhc3NlczIgPT09IFwic3RyaW5nXCIgPyBbY2xhc3NlczJdIDogY2xhc3NlczI7XG4gICAgY2xhc3Nlc0xpc3QuZm9yRWFjaCgoY3NzQ2xhc3MpID0+IHNldENzc0NsYXNzKHRyaW1tZWRJZCwgY3NzQ2xhc3MudHJpbSgpKSk7XG4gIH1cbiAgaWYgKHN0eWxlcykge1xuICAgIGxvZy5pbmZvKFwiU2V0dGluZyBzdGF0ZSBzdHlsZXNcIiwgdHJpbW1lZElkLCBzdHlsZXMpO1xuICAgIGNvbnN0IHN0eWxlc0xpc3QgPSB0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiID8gW3N0eWxlc10gOiBzdHlsZXM7XG4gICAgc3R5bGVzTGlzdC5mb3JFYWNoKChzdHlsZSkgPT4gc2V0U3R5bGUodHJpbW1lZElkLCBzdHlsZS50cmltKCkpKTtcbiAgfVxuICBpZiAodGV4dFN0eWxlcykge1xuICAgIGxvZy5pbmZvKFwiU2V0dGluZyBzdGF0ZSBzdHlsZXNcIiwgdHJpbW1lZElkLCBzdHlsZXMpO1xuICAgIGNvbnN0IHRleHRTdHlsZXNMaXN0ID0gdHlwZW9mIHRleHRTdHlsZXMgPT09IFwic3RyaW5nXCIgPyBbdGV4dFN0eWxlc10gOiB0ZXh0U3R5bGVzO1xuICAgIHRleHRTdHlsZXNMaXN0LmZvckVhY2goKHRleHRTdHlsZSkgPT4gc2V0VGV4dFN0eWxlKHRyaW1tZWRJZCwgdGV4dFN0eWxlLnRyaW0oKSkpO1xuICB9XG59LCBcImFkZFN0YXRlXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc2F2ZUNvbW1vbikge1xuICBub2RlcyA9IFtdO1xuICBlZGdlcyA9IFtdO1xuICBkb2N1bWVudHMgPSB7XG4gICAgcm9vdDogbmV3RG9jKClcbiAgfTtcbiAgY3VycmVudERvY3VtZW50ID0gZG9jdW1lbnRzLnJvb3Q7XG4gIHN0YXJ0RW5kQ291bnQgPSAwO1xuICBjbGFzc2VzID0gbmV3Q2xhc3Nlc0xpc3QoKTtcbiAgaWYgKCFzYXZlQ29tbW9uKSB7XG4gICAgY2xlYXIoKTtcbiAgfVxufSwgXCJjbGVhclwiKTtcbnZhciBnZXRTdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIGN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGlkKTtcbn0sIFwiZ2V0U3RhdGVcIik7XG52YXIgZ2V0U3RhdGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGN1cnJlbnREb2N1bWVudC5zdGF0ZXM7XG59LCBcImdldFN0YXRlc1wiKTtcbnZhciBsb2dEb2N1bWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBsb2cuaW5mbyhcIkRvY3VtZW50cyA9IFwiLCBkb2N1bWVudHMpO1xufSwgXCJsb2dEb2N1bWVudHNcIik7XG52YXIgZ2V0UmVsYXRpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnM7XG59LCBcImdldFJlbGF0aW9uc1wiKTtcbmZ1bmN0aW9uIHN0YXJ0SWRJZk5lZWRlZChpZCA9IFwiXCIpIHtcbiAgbGV0IGZpeGVkSWQgPSBpZDtcbiAgaWYgKGlkID09PSBTVEFSVF9OT0RFKSB7XG4gICAgc3RhcnRFbmRDb3VudCsrO1xuICAgIGZpeGVkSWQgPSBgJHtTVEFSVF9UWVBFfSR7c3RhcnRFbmRDb3VudH1gO1xuICB9XG4gIHJldHVybiBmaXhlZElkO1xufVxuX19uYW1lKHN0YXJ0SWRJZk5lZWRlZCwgXCJzdGFydElkSWZOZWVkZWRcIik7XG5mdW5jdGlvbiBzdGFydFR5cGVJZk5lZWRlZChpZCA9IFwiXCIsIHR5cGUgPSBERUZBVUxUX1NUQVRFX1RZUEUpIHtcbiAgcmV0dXJuIGlkID09PSBTVEFSVF9OT0RFID8gU1RBUlRfVFlQRSA6IHR5cGU7XG59XG5fX25hbWUoc3RhcnRUeXBlSWZOZWVkZWQsIFwic3RhcnRUeXBlSWZOZWVkZWRcIik7XG5mdW5jdGlvbiBlbmRJZElmTmVlZGVkKGlkID0gXCJcIikge1xuICBsZXQgZml4ZWRJZCA9IGlkO1xuICBpZiAoaWQgPT09IEVORF9OT0RFKSB7XG4gICAgc3RhcnRFbmRDb3VudCsrO1xuICAgIGZpeGVkSWQgPSBgJHtFTkRfVFlQRX0ke3N0YXJ0RW5kQ291bnR9YDtcbiAgfVxuICByZXR1cm4gZml4ZWRJZDtcbn1cbl9fbmFtZShlbmRJZElmTmVlZGVkLCBcImVuZElkSWZOZWVkZWRcIik7XG5mdW5jdGlvbiBlbmRUeXBlSWZOZWVkZWQoaWQgPSBcIlwiLCB0eXBlID0gREVGQVVMVF9TVEFURV9UWVBFKSB7XG4gIHJldHVybiBpZCA9PT0gRU5EX05PREUgPyBFTkRfVFlQRSA6IHR5cGU7XG59XG5fX25hbWUoZW5kVHlwZUlmTmVlZGVkLCBcImVuZFR5cGVJZk5lZWRlZFwiKTtcbmZ1bmN0aW9uIGFkZFJlbGF0aW9uT2JqcyhpdGVtMSwgaXRlbTIsIHJlbGF0aW9uVGl0bGUpIHtcbiAgbGV0IGlkMSA9IHN0YXJ0SWRJZk5lZWRlZChpdGVtMS5pZC50cmltKCkpO1xuICBsZXQgdHlwZTEgPSBzdGFydFR5cGVJZk5lZWRlZChpdGVtMS5pZC50cmltKCksIGl0ZW0xLnR5cGUpO1xuICBsZXQgaWQyID0gc3RhcnRJZElmTmVlZGVkKGl0ZW0yLmlkLnRyaW0oKSk7XG4gIGxldCB0eXBlMiA9IHN0YXJ0VHlwZUlmTmVlZGVkKGl0ZW0yLmlkLnRyaW0oKSwgaXRlbTIudHlwZSk7XG4gIGFkZFN0YXRlKFxuICAgIGlkMSxcbiAgICB0eXBlMSxcbiAgICBpdGVtMS5kb2MsXG4gICAgaXRlbTEuZGVzY3JpcHRpb24sXG4gICAgaXRlbTEubm90ZSxcbiAgICBpdGVtMS5jbGFzc2VzLFxuICAgIGl0ZW0xLnN0eWxlcyxcbiAgICBpdGVtMS50ZXh0U3R5bGVzXG4gICk7XG4gIGFkZFN0YXRlKFxuICAgIGlkMixcbiAgICB0eXBlMixcbiAgICBpdGVtMi5kb2MsXG4gICAgaXRlbTIuZGVzY3JpcHRpb24sXG4gICAgaXRlbTIubm90ZSxcbiAgICBpdGVtMi5jbGFzc2VzLFxuICAgIGl0ZW0yLnN0eWxlcyxcbiAgICBpdGVtMi50ZXh0U3R5bGVzXG4gICk7XG4gIGN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7XG4gICAgaWQxLFxuICAgIGlkMixcbiAgICByZWxhdGlvblRpdGxlOiBjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQocmVsYXRpb25UaXRsZSwgZ2V0Q29uZmlnKCkpXG4gIH0pO1xufVxuX19uYW1lKGFkZFJlbGF0aW9uT2JqcywgXCJhZGRSZWxhdGlvbk9ianNcIik7XG52YXIgYWRkUmVsYXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW0xLCBpdGVtMiwgdGl0bGUpIHtcbiAgaWYgKHR5cGVvZiBpdGVtMSA9PT0gXCJvYmplY3RcIikge1xuICAgIGFkZFJlbGF0aW9uT2JqcyhpdGVtMSwgaXRlbTIsIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZDEgPSBzdGFydElkSWZOZWVkZWQoaXRlbTEudHJpbSgpKTtcbiAgICBjb25zdCB0eXBlMSA9IHN0YXJ0VHlwZUlmTmVlZGVkKGl0ZW0xKTtcbiAgICBjb25zdCBpZDIgPSBlbmRJZElmTmVlZGVkKGl0ZW0yLnRyaW0oKSk7XG4gICAgY29uc3QgdHlwZTIgPSBlbmRUeXBlSWZOZWVkZWQoaXRlbTIpO1xuICAgIGFkZFN0YXRlKGlkMSwgdHlwZTEpO1xuICAgIGFkZFN0YXRlKGlkMiwgdHlwZTIpO1xuICAgIGN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7XG4gICAgICBpZDEsXG4gICAgICBpZDIsXG4gICAgICB0aXRsZTogY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KHRpdGxlLCBnZXRDb25maWcoKSlcbiAgICB9KTtcbiAgfVxufSwgXCJhZGRSZWxhdGlvblwiKTtcbnZhciBhZGREZXNjcmlwdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaWQsIGRlc2NyKSB7XG4gIGNvbnN0IHRoZVN0YXRlID0gY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaWQpO1xuICBjb25zdCBfZGVzY3IgPSBkZXNjci5zdGFydHNXaXRoKFwiOlwiKSA/IGRlc2NyLnJlcGxhY2UoXCI6XCIsIFwiXCIpLnRyaW0oKSA6IGRlc2NyO1xuICB0aGVTdGF0ZS5kZXNjcmlwdGlvbnMucHVzaChjb21tb25fZGVmYXVsdC5zYW5pdGl6ZVRleHQoX2Rlc2NyLCBnZXRDb25maWcoKSkpO1xufSwgXCJhZGREZXNjcmlwdGlvblwiKTtcbnZhciBjbGVhbnVwTGFiZWwgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGxhYmVsKSB7XG4gIGlmIChsYWJlbC5zdWJzdHJpbmcoMCwgMSkgPT09IFwiOlwiKSB7XG4gICAgcmV0dXJuIGxhYmVsLnN1YnN0cigyKS50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhYmVsLnRyaW0oKTtcbiAgfVxufSwgXCJjbGVhbnVwTGFiZWxcIik7XG52YXIgZ2V0RGl2aWRlcklkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGRpdmlkZXJDbnQrKztcbiAgcmV0dXJuIFwiZGl2aWRlci1pZC1cIiArIGRpdmlkZXJDbnQ7XG59LCBcImdldERpdmlkZXJJZFwiKTtcbnZhciBhZGRTdHlsZUNsYXNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCwgc3R5bGVBdHRyaWJ1dGVzID0gXCJcIikge1xuICBpZiAoIWNsYXNzZXMuaGFzKGlkKSkge1xuICAgIGNsYXNzZXMuc2V0KGlkLCB7IGlkLCBzdHlsZXM6IFtdLCB0ZXh0U3R5bGVzOiBbXSB9KTtcbiAgfVxuICBjb25zdCBmb3VuZENsYXNzID0gY2xhc3Nlcy5nZXQoaWQpO1xuICBpZiAoc3R5bGVBdHRyaWJ1dGVzICE9PSB2b2lkIDAgJiYgc3R5bGVBdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgc3R5bGVBdHRyaWJ1dGVzLnNwbGl0KFNUWUxFQ0xBU1NfU0VQKS5mb3JFYWNoKChhdHRyaWIpID0+IHtcbiAgICAgIGNvbnN0IGZpeGVkQXR0cmliID0gYXR0cmliLnJlcGxhY2UoLyhbXjtdKik7LywgXCIkMVwiKS50cmltKCk7XG4gICAgICBpZiAoUmVnRXhwKENPTE9SX0tFWVdPUkQpLmV4ZWMoYXR0cmliKSkge1xuICAgICAgICBjb25zdCBuZXdTdHlsZTEgPSBmaXhlZEF0dHJpYi5yZXBsYWNlKEZJTExfS0VZV09SRCwgQkdfRklMTCk7XG4gICAgICAgIGNvbnN0IG5ld1N0eWxlMiA9IG5ld1N0eWxlMS5yZXBsYWNlKENPTE9SX0tFWVdPUkQsIEZJTExfS0VZV09SRCk7XG4gICAgICAgIGZvdW5kQ2xhc3MudGV4dFN0eWxlcy5wdXNoKG5ld1N0eWxlMik7XG4gICAgICB9XG4gICAgICBmb3VuZENsYXNzLnN0eWxlcy5wdXNoKGZpeGVkQXR0cmliKTtcbiAgICB9KTtcbiAgfVxufSwgXCJhZGRTdHlsZUNsYXNzXCIpO1xudmFyIGdldENsYXNzZXMyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNsYXNzZXM7XG59LCBcImdldENsYXNzZXNcIik7XG52YXIgc2V0Q3NzQ2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW1JZHMsIGNzc0NsYXNzTmFtZSkge1xuICBpdGVtSWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgbGV0IGZvdW5kU3RhdGUgPSBnZXRTdGF0ZShpZCk7XG4gICAgaWYgKGZvdW5kU3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgY29uc3QgdHJpbW1lZElkID0gaWQudHJpbSgpO1xuICAgICAgYWRkU3RhdGUodHJpbW1lZElkKTtcbiAgICAgIGZvdW5kU3RhdGUgPSBnZXRTdGF0ZSh0cmltbWVkSWQpO1xuICAgIH1cbiAgICBmb3VuZFN0YXRlLmNsYXNzZXMucHVzaChjc3NDbGFzc05hbWUpO1xuICB9KTtcbn0sIFwic2V0Q3NzQ2xhc3NcIik7XG52YXIgc2V0U3R5bGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW1JZCwgc3R5bGVUZXh0KSB7XG4gIGNvbnN0IGl0ZW0gPSBnZXRTdGF0ZShpdGVtSWQpO1xuICBpZiAoaXRlbSAhPT0gdm9pZCAwKSB7XG4gICAgaXRlbS5zdHlsZXMucHVzaChzdHlsZVRleHQpO1xuICB9XG59LCBcInNldFN0eWxlXCIpO1xudmFyIHNldFRleHRTdHlsZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaXRlbUlkLCBjc3NDbGFzc05hbWUpIHtcbiAgY29uc3QgaXRlbSA9IGdldFN0YXRlKGl0ZW1JZCk7XG4gIGlmIChpdGVtICE9PSB2b2lkIDApIHtcbiAgICBpdGVtLnRleHRTdHlsZXMucHVzaChjc3NDbGFzc05hbWUpO1xuICB9XG59LCBcInNldFRleHRTdHlsZVwiKTtcbnZhciBnZXREaXJlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGRpcmVjdGlvbiwgXCJnZXREaXJlY3Rpb25cIik7XG52YXIgc2V0RGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGlyKSA9PiB7XG4gIGRpcmVjdGlvbiA9IGRpcjtcbn0sIFwic2V0RGlyZWN0aW9uXCIpO1xudmFyIHRyaW1Db2xvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN0cikgPT4gc3RyICYmIHN0clswXSA9PT0gXCI6XCIgPyBzdHIuc3Vic3RyKDEpLnRyaW0oKSA6IHN0ci50cmltKCksIFwidHJpbUNvbG9uXCIpO1xudmFyIGdldERhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgb3RoZXI6IHt9LCBjb25maWcsIGRpcmVjdGlvbjogZ2V0RGlyKGdldFJvb3REb2NWMigpKSB9O1xufSwgXCJnZXREYXRhXCIpO1xudmFyIHN0YXRlRGJfZGVmYXVsdCA9IHtcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLnN0YXRlLCBcImdldENvbmZpZ1wiKSxcbiAgZ2V0RGF0YSxcbiAgYWRkU3RhdGUsXG4gIGNsZWFyOiBjbGVhcjIsXG4gIGdldFN0YXRlLFxuICBnZXRTdGF0ZXMsXG4gIGdldFJlbGF0aW9ucyxcbiAgZ2V0Q2xhc3NlczogZ2V0Q2xhc3NlczIsXG4gIGdldERpcmVjdGlvbixcbiAgYWRkUmVsYXRpb24sXG4gIGdldERpdmlkZXJJZCxcbiAgc2V0RGlyZWN0aW9uLFxuICBjbGVhbnVwTGFiZWwsXG4gIGxpbmVUeXBlLFxuICByZWxhdGlvblR5cGUsXG4gIGxvZ0RvY3VtZW50cyxcbiAgZ2V0Um9vdERvYyxcbiAgc2V0Um9vdERvYyxcbiAgZ2V0Um9vdERvY1YyLFxuICBleHRyYWN0LFxuICB0cmltQ29sb24sXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTdHlsZUNsYXNzLFxuICBzZXRDc3NDbGFzcyxcbiAgYWRkRGVzY3JpcHRpb24sXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYFxuZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50cmFuc2l0aW9uQ29sb3J9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLnRyYW5zaXRpb25Db2xvcn07XG4gIH1cbmcuc3RhdGVHcm91cCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cbmcuc3RhdGVHcm91cCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMHB4O1xuXG59XG5nLnN0YXRlR3JvdXAgLnN0YXRlLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgZmlsbDogJHtvcHRpb25zLnN0YXRlTGFiZWxDb2xvcn07XG59XG5cbmcuc3RhdGVHcm91cCByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub2RlQm9yZGVyfTtcbn1cblxuZy5zdGF0ZUdyb3VwIGxpbmUge1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi50cmFuc2l0aW9uIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMudHJhbnNpdGlvbkNvbG9yfTtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xuICBmaWxsOiBub25lO1xufVxuXG4uc3RhdGVHcm91cCAuY29tcG9zaXQge1xuICBmaWxsOiAke29wdGlvbnMuYmFja2dyb3VuZH07XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGVHcm91cCAuYWx0LWNvbXBvc2l0IHtcbiAgZmlsbDogI2UwZTBlMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZS1ub3RlIHtcbiAgc3Ryb2tlOiAke29wdGlvbnMubm90ZUJvcmRlckNvbG9yfTtcbiAgZmlsbDogJHtvcHRpb25zLm5vdGVCa2dDb2xvcn07XG5cbiAgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xuICAgIHN0cm9rZTogbm9uZTtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gIH1cbn1cblxuLnN0YXRlTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAke29wdGlvbnMubWFpbkJrZ307XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5sYWJlbEJhY2tncm91bmRDb2xvcn07XG4gIG9wYWNpdHk6IDAuNTtcbn1cbi5lZGdlTGFiZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gIHAge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgfVxuICByZWN0IHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIGZpbGw6ICR7b3B0aW9ucy5lZGdlTGFiZWxCYWNrZ3JvdW5kfTtcbiAgfVxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogJHtvcHRpb25zLnRyYW5zaXRpb25MYWJlbENvbG9yIHx8IG9wdGlvbnMudGVydGlhcnlUZXh0Q29sb3J9O1xufVxuLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy50cmFuc2l0aW9uTGFiZWxDb2xvciB8fCBvcHRpb25zLnRlcnRpYXJ5VGV4dENvbG9yfTtcbn1cblxuLnN0YXRlTGFiZWwgdGV4dCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5zdGF0ZUxhYmVsQ29sb3J9O1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQge1xuICBmaWxsOiAke29wdGlvbnMuc3BlY2lhbFN0YXRlQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5zcGVjaWFsU3RhdGVDb2xvcn07XG59XG5cbi5ub2RlIC5mb3JrLWpvaW4ge1xuICBmaWxsOiAke29wdGlvbnMuc3BlY2lhbFN0YXRlQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5zcGVjaWFsU3RhdGVDb2xvcn07XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQge1xuICBmaWxsOiAke29wdGlvbnMuaW5uZXJFbmRCYWNrZ3JvdW5kfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuYmFja2dyb3VuZH07XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG4uZW5kLXN0YXRlLWlubmVyIHtcbiAgZmlsbDogJHtvcHRpb25zLmNvbXBvc2l0ZUJhY2tncm91bmQgfHwgb3B0aW9ucy5iYWNrZ3JvdW5kfTtcbiAgLy8gc3Ryb2tlOiAke29wdGlvbnMuYmFja2dyb3VuZH07XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAke29wdGlvbnMuc3RhdGVCa2cgfHwgb3B0aW9ucy5tYWluQmtnfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3RhdGVCb3JkZXIgfHwgb3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4ubm9kZSBwb2x5Z29uIHtcbiAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5zdGF0ZUJvcmRlciB8fCBvcHRpb25zLm5vZGVCb3JkZXJ9OztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAke29wdGlvbnMubGluZUNvbG9yfTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAke29wdGlvbnMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTtcbiAgc3Ryb2tlOiAke29wdGlvbnMuc3RhdGVCb3JkZXIgfHwgb3B0aW9ucy5ub2RlQm9yZGVyfTtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG5cbi5jbHVzdGVyLWxhYmVsLCAubm9kZUxhYmVsIHtcbiAgY29sb3I6ICR7b3B0aW9ucy5zdGF0ZUxhYmVsQ29sb3J9O1xuICAvLyBsaW5lLWhlaWdodDogMTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogJHtvcHRpb25zLnN0YXRlQm9yZGVyIHx8IG9wdGlvbnMubm9kZUJvcmRlcn07XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLnRpdGxlLXN0YXRlIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIge1xuICBmaWxsOiAke29wdGlvbnMuY29tcG9zaXRlQmFja2dyb3VuZCB8fCBvcHRpb25zLmJhY2tncm91bmR9O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIge1xuICBmaWxsOiAke29wdGlvbnMuYWx0QmFja2dyb3VuZCA/IG9wdGlvbnMuYWx0QmFja2dyb3VuZCA6IFwiI2VmZWZlZlwifTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAke29wdGlvbnMuYWx0QmFja2dyb3VuZCA/IG9wdGlvbnMuYWx0QmFja2dyb3VuZCA6IFwiI2VmZWZlZlwifTtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogJHtvcHRpb25zLm5vdGVCa2dDb2xvcn07XG4gIHN0cm9rZTogJHtvcHRpb25zLm5vdGVCb3JkZXJDb2xvcn07XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5ub3RlQmtnQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5ub3RlQm9yZGVyQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5ub3RlVGV4dENvbG9yfTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xufVxuLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHtcbiAgY29sb3I6IHJlZDsgLy8gJHtvcHRpb25zLm5vdGVUZXh0Q29sb3J9O1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5zdGF0ZWRpYWdyYW1UaXRsZVRleHQge1xuICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZpbGw6ICR7b3B0aW9ucy50ZXh0Q29sb3J9O1xufVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbmV4cG9ydCB7XG4gIHN0YXRlRGlhZ3JhbV9kZWZhdWx0LFxuICBzdGF0ZVJlbmRlcmVyX3YzX3VuaWZpZWRfZGVmYXVsdCxcbiAgc3RhdGVEYl9kZWZhdWx0LFxuICBzdHlsZXNfZGVmYXVsdFxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgc3RhdGVEYl9kZWZhdWx0LFxuICBzdGF0ZURpYWdyYW1fZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstTlFGN01KQU8ubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVdaQklBVFNLLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVJPS1lVVkNVLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICB1dGlsc19kZWZhdWx0XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjb21tb25fZGVmYXVsdCxcbiAgY29uZmlndXJlU3ZnU2l6ZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGxvZ1xufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3N0YXRlUmVuZGVyZXIuanNcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgbGF5b3V0IGFzIGRhZ3JlTGF5b3V0IH0gZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9kYWdyZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZ3JhcGhsaWIgZnJvbSBcImRhZ3JlLWQzLWVzL3NyYy9ncmFwaGxpYi9pbmRleC5qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc2hhcGVzLmpzXG5pbXBvcnQgeyBsaW5lLCBjdXJ2ZUJhc2lzIH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9zdGF0ZS9pZC1jYWNoZS5qc1xudmFyIGlkQ2FjaGUgPSB7fTtcbnZhciBzZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChrZXksIHZhbCkgPT4ge1xuICBpZENhY2hlW2tleV0gPSB2YWw7XG59LCBcInNldFwiKTtcbnZhciBnZXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChrKSA9PiBpZENhY2hlW2tdLCBcImdldFwiKTtcbnZhciBrZXlzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBPYmplY3Qua2V5cyhpZENhY2hlKSwgXCJrZXlzXCIpO1xudmFyIHNpemUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGtleXMoKS5sZW5ndGgsIFwic2l6ZVwiKTtcbnZhciBpZF9jYWNoZV9kZWZhdWx0ID0ge1xuICBnZXQsXG4gIHNldCxcbiAga2V5cyxcbiAgc2l6ZVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3NoYXBlcy5qc1xudmFyIGRyYXdTdGFydFN0YXRlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZykgPT4gZy5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImNsYXNzXCIsIFwic3RhcnQtc3RhdGVcIikuYXR0cihcInJcIiwgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLCBcImRyYXdTdGFydFN0YXRlXCIpO1xudmFyIGRyYXdEaXZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZykgPT4gZy5hcHBlbmQoXCJsaW5lXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwiZ3JleVwiKS5zdHlsZShcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCIzXCIpLmF0dHIoXCJ4MVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKFwiY2xhc3NcIiwgXCJkaXZpZGVyXCIpLmF0dHIoXCJ4MlwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICogMikuYXR0cihcInkxXCIsIDApLmF0dHIoXCJ5MlwiLCAwKSwgXCJkcmF3RGl2aWRlclwiKTtcbnZhciBkcmF3U2ltcGxlU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChnLCBzdGF0ZURlZikgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwiZm9udC1zaXplXCIsIGdldENvbmZpZygpLnN0YXRlLmZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS10aXRsZVwiKS50ZXh0KHN0YXRlRGVmLmlkKTtcbiAgY29uc3QgY2xhc3NCb3ggPSBzdGF0ZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcIndpZHRoXCIsIGNsYXNzQm94LndpZHRoICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJoZWlnaHRcIiwgY2xhc3NCb3guaGVpZ2h0ICsgMiAqIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJyeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5yYWRpdXMpO1xuICByZXR1cm4gc3RhdGU7XG59LCBcImRyYXdTaW1wbGVTdGF0ZVwiKTtcbnZhciBkcmF3RGVzY3JTdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGcsIHN0YXRlRGVmKSA9PiB7XG4gIGNvbnN0IGFkZFRzcGFuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0RWwsIHR4dCwgaXNGaXJzdDIpIHtcbiAgICBjb25zdCB0U3BhbiA9IHRleHRFbC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykudGV4dCh0eHQpO1xuICAgIGlmICghaXNGaXJzdDIpIHtcbiAgICAgIHRTcGFuLmF0dHIoXCJkeVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0KTtcbiAgICB9XG4gIH0sIFwiYWRkVHNwYW5cIik7XG4gIGNvbnN0IHRpdGxlID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICsgMS4zICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcImZvbnQtc2l6ZVwiLCBnZXRDb25maWcoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtdGl0bGVcIikudGV4dChzdGF0ZURlZi5kZXNjcmlwdGlvbnNbMF0pO1xuICBjb25zdCB0aXRsZUJveCA9IHRpdGxlLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IHRpdGxlSGVpZ2h0ID0gdGl0bGVCb3guaGVpZ2h0O1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFxuICAgIFwieVwiLFxuICAgIHRpdGxlSGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyAqIDAuNCArIGdldENvbmZpZygpLnN0YXRlLmRpdmlkZXJNYXJnaW4gKyBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0XG4gICkuYXR0cihcImNsYXNzXCIsIFwic3RhdGUtZGVzY3JpcHRpb25cIik7XG4gIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgbGV0IGlzU2Vjb25kID0gdHJ1ZTtcbiAgc3RhdGVEZWYuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24oZGVzY3IpIHtcbiAgICBpZiAoIWlzRmlyc3QpIHtcbiAgICAgIGFkZFRzcGFuKGRlc2NyaXB0aW9uLCBkZXNjciwgaXNTZWNvbmQpO1xuICAgICAgaXNTZWNvbmQgPSBmYWxzZTtcbiAgICB9XG4gICAgaXNGaXJzdCA9IGZhbHNlO1xuICB9KTtcbiAgY29uc3QgZGVzY3JMaW5lID0gZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieTFcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyArIHRpdGxlSGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUuZGl2aWRlck1hcmdpbiAvIDIpLmF0dHIoXCJ5MlwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgdGl0bGVIZWlnaHQgKyBnZXRDb25maWcoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luIC8gMikuYXR0cihcImNsYXNzXCIsIFwiZGVzY3ItZGl2aWRlclwiKTtcbiAgY29uc3QgZGVzY3JCb3ggPSBkZXNjcmlwdGlvbi5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGRlc2NyQm94LndpZHRoLCB0aXRsZUJveC53aWR0aCk7XG4gIGRlc2NyTGluZS5hdHRyKFwieDJcIiwgd2lkdGggKyAzICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG4gIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwid2lkdGhcIiwgd2lkdGggKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZykuYXR0cihcImhlaWdodFwiLCBkZXNjckJveC5oZWlnaHQgKyB0aXRsZUhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwicnhcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucmFkaXVzKTtcbiAgcmV0dXJuIGc7XG59LCBcImRyYXdEZXNjclN0YXRlXCIpO1xudmFyIGFkZFRpdGxlQW5kQm94ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZywgc3RhdGVEZWYsIGFsdEJrZykgPT4ge1xuICBjb25zdCBwYWQgPSBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nO1xuICBjb25zdCBkYmxQYWQgPSAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZztcbiAgY29uc3Qgb3JnQm94ID0gZy5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCBvcmdXaWR0aCA9IG9yZ0JveC53aWR0aDtcbiAgY29uc3Qgb3JnWCA9IG9yZ0JveC54O1xuICBjb25zdCB0aXRsZSA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCBnZXRDb25maWcoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKFwiZm9udC1zaXplXCIsIGdldENvbmZpZygpLnN0YXRlLmZvbnRTaXplKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZS10aXRsZVwiKS50ZXh0KHN0YXRlRGVmLmlkKTtcbiAgY29uc3QgdGl0bGVCb3ggPSB0aXRsZS5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB0aXRsZVdpZHRoID0gdGl0bGVCb3gud2lkdGggKyBkYmxQYWQ7XG4gIGxldCB3aWR0aCA9IE1hdGgubWF4KHRpdGxlV2lkdGgsIG9yZ1dpZHRoKTtcbiAgaWYgKHdpZHRoID09PSBvcmdXaWR0aCkge1xuICAgIHdpZHRoID0gd2lkdGggKyBkYmxQYWQ7XG4gIH1cbiAgbGV0IHN0YXJ0WDtcbiAgY29uc3QgZ3JhcGhCb3ggPSBnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGlmIChzdGF0ZURlZi5kb2MpIHtcbiAgfVxuICBzdGFydFggPSBvcmdYIC0gcGFkO1xuICBpZiAodGl0bGVXaWR0aCA+IG9yZ1dpZHRoKSB7XG4gICAgc3RhcnRYID0gKG9yZ1dpZHRoIC0gd2lkdGgpIC8gMiArIHBhZDtcbiAgfVxuICBpZiAoTWF0aC5hYnMob3JnWCAtIGdyYXBoQm94LngpIDwgcGFkICYmIHRpdGxlV2lkdGggPiBvcmdXaWR0aCkge1xuICAgIHN0YXJ0WCA9IG9yZ1ggLSAodGl0bGVXaWR0aCAtIG9yZ1dpZHRoKSAvIDI7XG4gIH1cbiAgY29uc3QgbGluZVkgPSAxIC0gZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodDtcbiAgZy5pbnNlcnQoXCJyZWN0XCIsIFwiOmZpcnN0LWNoaWxkXCIpLmF0dHIoXCJ4XCIsIHN0YXJ0WCkuYXR0cihcInlcIiwgbGluZVkpLmF0dHIoXCJjbGFzc1wiLCBhbHRCa2cgPyBcImFsdC1jb21wb3NpdFwiIDogXCJjb21wb3NpdFwiKS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXG4gICAgXCJoZWlnaHRcIixcbiAgICBncmFwaEJveC5oZWlnaHQgKyBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICsgZ2V0Q29uZmlnKCkuc3RhdGUudGl0bGVTaGlmdCArIDFcbiAgKS5hdHRyKFwicnhcIiwgXCIwXCIpO1xuICB0aXRsZS5hdHRyKFwieFwiLCBzdGFydFggKyBwYWQpO1xuICBpZiAodGl0bGVXaWR0aCA8PSBvcmdXaWR0aCkge1xuICAgIHRpdGxlLmF0dHIoXCJ4XCIsIG9yZ1ggKyAod2lkdGggLSBkYmxQYWQpIC8gMiAtIHRpdGxlV2lkdGggLyAyICsgcGFkKTtcbiAgfVxuICBnLmluc2VydChcInJlY3RcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcInhcIiwgc3RhcnRYKS5hdHRyKFxuICAgIFwieVwiLFxuICAgIGdldENvbmZpZygpLnN0YXRlLnRpdGxlU2hpZnQgLSBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0IC0gZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZ1xuICApLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBnZXRDb25maWcoKS5zdGF0ZS50ZXh0SGVpZ2h0ICogMykuYXR0cihcInJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnJhZGl1cyk7XG4gIGcuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwieFwiLCBzdGFydFgpLmF0dHIoXG4gICAgXCJ5XCIsXG4gICAgZ2V0Q29uZmlnKCkuc3RhdGUudGl0bGVTaGlmdCAtIGdldENvbmZpZygpLnN0YXRlLnRleHRIZWlnaHQgLSBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nXG4gICkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIGdyYXBoQm94LmhlaWdodCArIDMgKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cihcInJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnJhZGl1cyk7XG4gIHJldHVybiBnO1xufSwgXCJhZGRUaXRsZUFuZEJveFwiKTtcbnZhciBkcmF3RW5kU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChnKSA9PiB7XG4gIGcuYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVuZC1zdGF0ZS1vdXRlclwiKS5hdHRyKFwiclwiLCBnZXRDb25maWcoKS5zdGF0ZS5zaXplVW5pdCArIGdldENvbmZpZygpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKFxuICAgIFwiY3hcIixcbiAgICBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQgKyBnZXRDb25maWcoKS5zdGF0ZS5taW5pUGFkZGluZ1xuICApLmF0dHIoXG4gICAgXCJjeVwiLFxuICAgIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgKyBnZXRDb25maWcoKS5zdGF0ZS5zaXplVW5pdCArIGdldENvbmZpZygpLnN0YXRlLm1pbmlQYWRkaW5nXG4gICk7XG4gIHJldHVybiBnLmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlbmQtc3RhdGUtaW5uZXJcIikuYXR0cihcInJcIiwgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoXCJjeFwiLCBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nICsgZ2V0Q29uZmlnKCkuc3RhdGUuc2l6ZVVuaXQgKyAyKS5hdHRyKFwiY3lcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyArIGdldENvbmZpZygpLnN0YXRlLnNpemVVbml0ICsgMik7XG59LCBcImRyYXdFbmRTdGF0ZVwiKTtcbnZhciBkcmF3Rm9ya0pvaW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGcsIHN0YXRlRGVmKSA9PiB7XG4gIGxldCB3aWR0aCA9IGdldENvbmZpZygpLnN0YXRlLmZvcmtXaWR0aDtcbiAgbGV0IGhlaWdodCA9IGdldENvbmZpZygpLnN0YXRlLmZvcmtIZWlnaHQ7XG4gIGlmIChzdGF0ZURlZi5wYXJlbnRJZCkge1xuICAgIGxldCB0bXAgPSB3aWR0aDtcbiAgICB3aWR0aCA9IGhlaWdodDtcbiAgICBoZWlnaHQgPSB0bXA7XG4gIH1cbiAgcmV0dXJuIGcuYXBwZW5kKFwicmVjdFwiKS5zdHlsZShcInN0cm9rZVwiLCBcImJsYWNrXCIpLnN0eWxlKFwiZmlsbFwiLCBcImJsYWNrXCIpLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aCkuYXR0cihcImhlaWdodFwiLCBoZWlnaHQpLmF0dHIoXCJ4XCIsIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpLmF0dHIoXCJ5XCIsIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpO1xufSwgXCJkcmF3Rm9ya0pvaW5TdGF0ZVwiKTtcbnZhciBfZHJhd0xvbmdUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3RleHQsIHgsIHksIGcpID0+IHtcbiAgbGV0IHRleHRIZWlnaHQgPSAwO1xuICBjb25zdCB0ZXh0RWxlbSA9IGcuYXBwZW5kKFwidGV4dFwiKTtcbiAgdGV4dEVsZW0uc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpO1xuICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJub3RlVGV4dFwiKTtcbiAgbGV0IHRleHQgPSBfdGV4dC5yZXBsYWNlKC9cXHJcXG4vZywgXCI8YnIvPlwiKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxuL2csIFwiPGJyLz5cIik7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChjb21tb25fZGVmYXVsdC5saW5lQnJlYWtSZWdleCk7XG4gIGxldCB0SGVpZ2h0ID0gMS4yNSAqIGdldENvbmZpZygpLnN0YXRlLm5vdGVNYXJnaW47XG4gIGZvciAoY29uc3QgbGluZTIgb2YgbGluZXMpIHtcbiAgICBjb25zdCB0eHQgPSBsaW5lMi50cmltKCk7XG4gICAgaWYgKHR4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzcGFuID0gdGV4dEVsZW0uYXBwZW5kKFwidHNwYW5cIik7XG4gICAgICBzcGFuLnRleHQodHh0KTtcbiAgICAgIGlmICh0SGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHRleHRCb3VuZHMgPSBzcGFuLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIHRIZWlnaHQgKz0gdGV4dEJvdW5kcy5oZWlnaHQ7XG4gICAgICB9XG4gICAgICB0ZXh0SGVpZ2h0ICs9IHRIZWlnaHQ7XG4gICAgICBzcGFuLmF0dHIoXCJ4XCIsIHggKyBnZXRDb25maWcoKS5zdGF0ZS5ub3RlTWFyZ2luKTtcbiAgICAgIHNwYW4uYXR0cihcInlcIiwgeSArIHRleHRIZWlnaHQgKyAxLjI1ICogZ2V0Q29uZmlnKCkuc3RhdGUubm90ZU1hcmdpbik7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHRleHRXaWR0aDogdGV4dEVsZW0ubm9kZSgpLmdldEJCb3goKS53aWR0aCwgdGV4dEhlaWdodCB9O1xufSwgXCJfZHJhd0xvbmdUZXh0XCIpO1xudmFyIGRyYXdOb3RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCwgZykgPT4ge1xuICBnLmF0dHIoXCJjbGFzc1wiLCBcInN0YXRlLW5vdGVcIik7XG4gIGNvbnN0IG5vdGUgPSBnLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZyk7XG4gIGNvbnN0IHJlY3RFbGVtID0gZy5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dEhlaWdodCB9ID0gX2RyYXdMb25nVGV4dCh0ZXh0LCAwLCAwLCByZWN0RWxlbSk7XG4gIG5vdGUuYXR0cihcImhlaWdodFwiLCB0ZXh0SGVpZ2h0ICsgMiAqIGdldENvbmZpZygpLnN0YXRlLm5vdGVNYXJnaW4pO1xuICBub3RlLmF0dHIoXCJ3aWR0aFwiLCB0ZXh0V2lkdGggKyBnZXRDb25maWcoKS5zdGF0ZS5ub3RlTWFyZ2luICogMik7XG4gIHJldHVybiBub3RlO1xufSwgXCJkcmF3Tm90ZVwiKTtcbnZhciBkcmF3U3RhdGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHN0YXRlRGVmKSB7XG4gIGNvbnN0IGlkID0gc3RhdGVEZWYuaWQ7XG4gIGNvbnN0IHN0YXRlSW5mbyA9IHtcbiAgICBpZCxcbiAgICBsYWJlbDogc3RhdGVEZWYuaWQsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH07XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIikuYXR0cihcImlkXCIsIGlkKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZUdyb3VwXCIpO1xuICBpZiAoc3RhdGVEZWYudHlwZSA9PT0gXCJzdGFydFwiKSB7XG4gICAgZHJhd1N0YXJ0U3RhdGUoZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZW5kXCIpIHtcbiAgICBkcmF3RW5kU3RhdGUoZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZm9ya1wiIHx8IHN0YXRlRGVmLnR5cGUgPT09IFwiam9pblwiKSB7XG4gICAgZHJhd0ZvcmtKb2luU3RhdGUoZywgc3RhdGVEZWYpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcIm5vdGVcIikge1xuICAgIGRyYXdOb3RlKHN0YXRlRGVmLm5vdGUudGV4dCwgZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZGl2aWRlclwiKSB7XG4gICAgZHJhd0RpdmlkZXIoZyk7XG4gIH1cbiAgaWYgKHN0YXRlRGVmLnR5cGUgPT09IFwiZGVmYXVsdFwiICYmIHN0YXRlRGVmLmRlc2NyaXB0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBkcmF3U2ltcGxlU3RhdGUoZywgc3RhdGVEZWYpO1xuICB9XG4gIGlmIChzdGF0ZURlZi50eXBlID09PSBcImRlZmF1bHRcIiAmJiBzdGF0ZURlZi5kZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIGRyYXdEZXNjclN0YXRlKGcsIHN0YXRlRGVmKTtcbiAgfVxuICBjb25zdCBzdGF0ZUJveCA9IGcubm9kZSgpLmdldEJCb3goKTtcbiAgc3RhdGVJbmZvLndpZHRoID0gc3RhdGVCb3gud2lkdGggKyAyICogZ2V0Q29uZmlnKCkuc3RhdGUucGFkZGluZztcbiAgc3RhdGVJbmZvLmhlaWdodCA9IHN0YXRlQm94LmhlaWdodCArIDIgKiBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nO1xuICBpZF9jYWNoZV9kZWZhdWx0LnNldChpZCwgc3RhdGVJbmZvKTtcbiAgcmV0dXJuIHN0YXRlSW5mbztcbn0sIFwiZHJhd1N0YXRlXCIpO1xudmFyIGVkZ2VDb3VudCA9IDA7XG52YXIgZHJhd0VkZ2UgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHBhdGgsIHJlbGF0aW9uKSB7XG4gIGNvbnN0IGdldFJlbGF0aW9uVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBzdGF0ZURiX2RlZmF1bHQucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOlxuICAgICAgICByZXR1cm4gXCJhZ2dyZWdhdGlvblwiO1xuICAgICAgY2FzZSBzdGF0ZURiX2RlZmF1bHQucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpcbiAgICAgICAgcmV0dXJuIFwiZXh0ZW5zaW9uXCI7XG4gICAgICBjYXNlIHN0YXRlRGJfZGVmYXVsdC5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046XG4gICAgICAgIHJldHVybiBcImNvbXBvc2l0aW9uXCI7XG4gICAgICBjYXNlIHN0YXRlRGJfZGVmYXVsdC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpcbiAgICAgICAgcmV0dXJuIFwiZGVwZW5kZW5jeVwiO1xuICAgIH1cbiAgfSwgXCJnZXRSZWxhdGlvblR5cGVcIik7XG4gIHBhdGgucG9pbnRzID0gcGF0aC5wb2ludHMuZmlsdGVyKChwKSA9PiAhTnVtYmVyLmlzTmFOKHAueSkpO1xuICBjb25zdCBsaW5lRGF0YSA9IHBhdGgucG9pbnRzO1xuICBjb25zdCBsaW5lRnVuY3Rpb24gPSBsaW5lKCkueChmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIGQueDtcbiAgfSkueShmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIGQueTtcbiAgfSkuY3VydmUoY3VydmVCYXNpcyk7XG4gIGNvbnN0IHN2Z1BhdGggPSBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgbGluZUZ1bmN0aW9uKGxpbmVEYXRhKSkuYXR0cihcImlkXCIsIFwiZWRnZVwiICsgZWRnZUNvdW50KS5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFuc2l0aW9uXCIpO1xuICBsZXQgdXJsID0gXCJcIjtcbiAgaWYgKGdldENvbmZpZygpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUpIHtcbiAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcKC9nLCBcIlxcXFwoXCIpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXCkvZywgXCJcXFxcKVwiKTtcbiAgfVxuICBzdmdQYXRoLmF0dHIoXG4gICAgXCJtYXJrZXItZW5kXCIsXG4gICAgXCJ1cmwoXCIgKyB1cmwgKyBcIiNcIiArIGdldFJlbGF0aW9uVHlwZShzdGF0ZURiX2RlZmF1bHQucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpICsgXCJFbmQpXCJcbiAgKTtcbiAgaWYgKHJlbGF0aW9uLnRpdGxlICE9PSB2b2lkIDApIHtcbiAgICBjb25zdCBsYWJlbCA9IGVsZW0uYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJzdGF0ZUxhYmVsXCIpO1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gdXRpbHNfZGVmYXVsdC5jYWxjTGFiZWxQb3NpdGlvbihwYXRoLnBvaW50cyk7XG4gICAgY29uc3Qgcm93cyA9IGNvbW1vbl9kZWZhdWx0LmdldFJvd3MocmVsYXRpb24udGl0bGUpO1xuICAgIGxldCB0aXRsZUhlaWdodCA9IDA7XG4gICAgY29uc3QgdGl0bGVSb3dzID0gW107XG4gICAgbGV0IG1heFdpZHRoID0gMDtcbiAgICBsZXQgbWluWCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGl0bGUgPSBsYWJlbC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KHJvd3NbaV0pLmF0dHIoXCJ4XCIsIHgpLmF0dHIoXCJ5XCIsIHkgKyB0aXRsZUhlaWdodCk7XG4gICAgICBjb25zdCBib3VuZHNUbXAgPSB0aXRsZS5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgYm91bmRzVG1wLndpZHRoKTtcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBib3VuZHNUbXAueCk7XG4gICAgICBsb2cuaW5mbyhib3VuZHNUbXAueCwgeCwgeSArIHRpdGxlSGVpZ2h0KTtcbiAgICAgIGlmICh0aXRsZUhlaWdodCA9PT0gMCkge1xuICAgICAgICBjb25zdCB0aXRsZUJveCA9IHRpdGxlLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgICAgIHRpdGxlSGVpZ2h0ID0gdGl0bGVCb3guaGVpZ2h0O1xuICAgICAgICBsb2cuaW5mbyhcIlRpdGxlIGhlaWdodFwiLCB0aXRsZUhlaWdodCwgeSk7XG4gICAgICB9XG4gICAgICB0aXRsZVJvd3MucHVzaCh0aXRsZSk7XG4gICAgfVxuICAgIGxldCBib3hIZWlnaHQgPSB0aXRsZUhlaWdodCAqIHJvd3MubGVuZ3RoO1xuICAgIGlmIChyb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGhlaWdodEFkaiA9IChyb3dzLmxlbmd0aCAtIDEpICogdGl0bGVIZWlnaHQgKiAwLjU7XG4gICAgICB0aXRsZVJvd3MuZm9yRWFjaCgodGl0bGUsIGkpID0+IHRpdGxlLmF0dHIoXCJ5XCIsIHkgKyBpICogdGl0bGVIZWlnaHQgLSBoZWlnaHRBZGopKTtcbiAgICAgIGJveEhlaWdodCA9IHRpdGxlSGVpZ2h0ICogcm93cy5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kcyA9IGxhYmVsLm5vZGUoKS5nZXRCQm94KCk7XG4gICAgbGFiZWwuaW5zZXJ0KFwicmVjdFwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJib3hcIikuYXR0cihcInhcIiwgeCAtIG1heFdpZHRoIC8gMiAtIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgLyAyKS5hdHRyKFwieVwiLCB5IC0gYm94SGVpZ2h0IC8gMiAtIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcgLyAyIC0gMy41KS5hdHRyKFwid2lkdGhcIiwgbWF4V2lkdGggKyBnZXRDb25maWcoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKFwiaGVpZ2h0XCIsIGJveEhlaWdodCArIGdldENvbmZpZygpLnN0YXRlLnBhZGRpbmcpO1xuICAgIGxvZy5pbmZvKGJvdW5kcyk7XG4gIH1cbiAgZWRnZUNvdW50Kys7XG59LCBcImRyYXdFZGdlXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVSZW5kZXJlci5qc1xudmFyIGNvbmY7XG52YXIgdHJhbnNmb3JtYXRpb25Mb2cgPSB7fTtcbnZhciBzZXRDb25mID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbn0sIFwic2V0Q29uZlwiKTtcbnZhciBpbnNlcnRNYXJrZXJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtKSB7XG4gIGVsZW0uYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiZGVwZW5kZW5jeUVuZFwiKS5hdHRyKFwicmVmWFwiLCAxOSkuYXR0cihcInJlZllcIiwgNykuYXR0cihcIm1hcmtlcldpZHRoXCIsIDIwKS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDI4KS5hdHRyKFwib3JpZW50XCIsIFwiYXV0b1wiKS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJkXCIsIFwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWlwiKTtcbn0sIFwiaW5zZXJ0TWFya2Vyc1wiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uZiA9IGdldENvbmZpZygpLnN0YXRlO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgZG9jID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudCA6IGRvY3VtZW50O1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgZGlhZ3JhbSBcIiArIHRleHQpO1xuICBjb25zdCBkaWFncmFtMiA9IHJvb3Quc2VsZWN0KGBbaWQ9JyR7aWR9J11gKTtcbiAgaW5zZXJ0TWFya2VycyhkaWFncmFtMik7XG4gIGNvbnN0IHJvb3REb2MgPSBkaWFnT2JqLmRiLmdldFJvb3REb2MoKTtcbiAgcmVuZGVyRG9jKHJvb3REb2MsIGRpYWdyYW0yLCB2b2lkIDAsIGZhbHNlLCByb290LCBkb2MsIGRpYWdPYmopO1xuICBjb25zdCBwYWRkaW5nID0gY29uZi5wYWRkaW5nO1xuICBjb25zdCBib3VuZHMgPSBkaWFncmFtMi5ub2RlKCkuZ2V0QkJveCgpO1xuICBjb25zdCB3aWR0aCA9IGJvdW5kcy53aWR0aCArIHBhZGRpbmcgKiAyO1xuICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gIGNvbnN0IHN2Z1dpZHRoID0gd2lkdGggKiAxLjc1O1xuICBjb25maWd1cmVTdmdTaXplKGRpYWdyYW0yLCBoZWlnaHQsIHN2Z1dpZHRoLCBjb25mLnVzZU1heFdpZHRoKTtcbiAgZGlhZ3JhbTIuYXR0cihcbiAgICBcInZpZXdCb3hcIixcbiAgICBgJHtib3VuZHMueCAtIGNvbmYucGFkZGluZ30gICR7Ym91bmRzLnkgLSBjb25mLnBhZGRpbmd9IGAgKyB3aWR0aCArIFwiIFwiICsgaGVpZ2h0XG4gICk7XG59LCBcImRyYXdcIik7XG52YXIgZ2V0TGFiZWxXaWR0aCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgcmV0dXJuIHRleHQgPyB0ZXh0Lmxlbmd0aCAqIGNvbmYuZm9udFNpemVGYWN0b3IgOiAxO1xufSwgXCJnZXRMYWJlbFdpZHRoXCIpO1xudmFyIHJlbmRlckRvYyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGRvYywgZGlhZ3JhbTIsIHBhcmVudElkLCBhbHRCa2csIHJvb3QsIGRvbURvY3VtZW50LCBkaWFnT2JqKSA9PiB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IGdyYXBobGliLkdyYXBoKHtcbiAgICBjb21wb3VuZDogdHJ1ZSxcbiAgICBtdWx0aWdyYXBoOiB0cnVlXG4gIH0pO1xuICBsZXQgaTtcbiAgbGV0IGVkZ2VGcmVlRG9jID0gdHJ1ZTtcbiAgZm9yIChpID0gMDsgaSA8IGRvYy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2NbaV0uc3RtdCA9PT0gXCJyZWxhdGlvblwiKSB7XG4gICAgICBlZGdlRnJlZURvYyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwYXJlbnRJZCkge1xuICAgIGdyYXBoLnNldEdyYXBoKHtcbiAgICAgIHJhbmtkaXI6IFwiTFJcIixcbiAgICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgICBjb21wb3VuZDogdHJ1ZSxcbiAgICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgICByYW5rZXI6IFwidGlnaHQtdHJlZVwiLFxuICAgICAgcmFua3NlcDogZWRnZUZyZWVEb2MgPyAxIDogY29uZi5lZGdlTGVuZ3RoRmFjdG9yLFxuICAgICAgbm9kZVNlcDogZWRnZUZyZWVEb2MgPyAxIDogNTAsXG4gICAgICBpc011bHRpR3JhcGg6IHRydWVcbiAgICAgIC8vIHJhbmtzZXA6IDUsXG4gICAgICAvLyBub2Rlc2VwOiAxXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZ3JhcGguc2V0R3JhcGgoe1xuICAgICAgcmFua2RpcjogXCJUQlwiLFxuICAgICAgbXVsdGlncmFwaDogdHJ1ZSxcbiAgICAgIGNvbXBvdW5kOiB0cnVlLFxuICAgICAgLy8gaXNDb21wb3VuZDogdHJ1ZSxcbiAgICAgIC8vIGFjeWNsaWNlcjogJ2dyZWVkeScsXG4gICAgICAvLyByYW5rZXI6ICdsb25nZXN0LXBhdGgnXG4gICAgICByYW5rc2VwOiBlZGdlRnJlZURvYyA/IDEgOiBjb25mLmVkZ2VMZW5ndGhGYWN0b3IsXG4gICAgICBub2RlU2VwOiBlZGdlRnJlZURvYyA/IDEgOiA1MCxcbiAgICAgIHJhbmtlcjogXCJ0aWdodC10cmVlXCIsXG4gICAgICAvLyByYW5rZXI6ICduZXR3b3JrLXNpbXBsZXgnXG4gICAgICBpc011bHRpR3JhcGg6IHRydWVcbiAgICB9KTtcbiAgfVxuICBncmFwaC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG4gIGRpYWdPYmouZGIuZXh0cmFjdChkb2MpO1xuICBjb25zdCBzdGF0ZXMgPSBkaWFnT2JqLmRiLmdldFN0YXRlcygpO1xuICBjb25zdCByZWxhdGlvbnMgPSBkaWFnT2JqLmRiLmdldFJlbGF0aW9ucygpO1xuICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKHN0YXRlcyk7XG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMyKSB7XG4gICAgY29uc3Qgc3RhdGVEZWYgPSBzdGF0ZXNba2V5XTtcbiAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgIHN0YXRlRGVmLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgfVxuICAgIGxldCBub2RlO1xuICAgIGlmIChzdGF0ZURlZi5kb2MpIHtcbiAgICAgIGxldCBzdWIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJpZFwiLCBzdGF0ZURlZi5pZCkuYXR0cihcImNsYXNzXCIsIFwic3RhdGVHcm91cFwiKTtcbiAgICAgIG5vZGUgPSByZW5kZXJEb2Moc3RhdGVEZWYuZG9jLCBzdWIsIHN0YXRlRGVmLmlkLCAhYWx0QmtnLCByb290LCBkb21Eb2N1bWVudCwgZGlhZ09iaik7XG4gICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgc3ViID0gYWRkVGl0bGVBbmRCb3goc3ViLCBzdGF0ZURlZiwgYWx0QmtnKTtcbiAgICAgICAgbGV0IGJveEJvdW5kcyA9IHN1Yi5ub2RlKCkuZ2V0QkJveCgpO1xuICAgICAgICBub2RlLndpZHRoID0gYm94Qm91bmRzLndpZHRoO1xuICAgICAgICBub2RlLmhlaWdodCA9IGJveEJvdW5kcy5oZWlnaHQgKyBjb25mLnBhZGRpbmcgLyAyO1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbkxvZ1tzdGF0ZURlZi5pZF0gPSB7IHk6IGNvbmYuY29tcG9zaXRUaXRsZVNpemUgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBib3hCb3VuZHMgPSBzdWIubm9kZSgpLmdldEJCb3goKTtcbiAgICAgICAgbm9kZS53aWR0aCA9IGJveEJvdW5kcy53aWR0aDtcbiAgICAgICAgbm9kZS5oZWlnaHQgPSBib3hCb3VuZHMuaGVpZ2h0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gZHJhd1N0YXRlKGRpYWdyYW0yLCBzdGF0ZURlZiwgZ3JhcGgpO1xuICAgIH1cbiAgICBpZiAoc3RhdGVEZWYubm90ZSkge1xuICAgICAgY29uc3Qgbm90ZURlZiA9IHtcbiAgICAgICAgZGVzY3JpcHRpb25zOiBbXSxcbiAgICAgICAgaWQ6IHN0YXRlRGVmLmlkICsgXCItbm90ZVwiLFxuICAgICAgICBub3RlOiBzdGF0ZURlZi5ub3RlLFxuICAgICAgICB0eXBlOiBcIm5vdGVcIlxuICAgICAgfTtcbiAgICAgIGNvbnN0IG5vdGUgPSBkcmF3U3RhdGUoZGlhZ3JhbTIsIG5vdGVEZWYsIGdyYXBoKTtcbiAgICAgIGlmIChzdGF0ZURlZi5ub3RlLnBvc2l0aW9uID09PSBcImxlZnQgb2ZcIikge1xuICAgICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQgKyBcIi1ub3RlXCIsIG5vdGUpO1xuICAgICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLmlkLCBub2RlKTtcbiAgICAgICAgZ3JhcGguc2V0Tm9kZShub2RlLmlkICsgXCItbm90ZVwiLCBub3RlKTtcbiAgICAgIH1cbiAgICAgIGdyYXBoLnNldFBhcmVudChub2RlLmlkLCBub2RlLmlkICsgXCItZ3JvdXBcIik7XG4gICAgICBncmFwaC5zZXRQYXJlbnQobm9kZS5pZCArIFwiLW5vdGVcIiwgbm9kZS5pZCArIFwiLWdyb3VwXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFwaC5zZXROb2RlKG5vZGUuaWQsIG5vZGUpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoXCJDb3VudD1cIiwgZ3JhcGgubm9kZUNvdW50KCksIGdyYXBoKTtcbiAgbGV0IGNudCA9IDA7XG4gIHJlbGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uKSB7XG4gICAgY250Kys7XG4gICAgbG9nLmRlYnVnKFwiU2V0dGluZyBlZGdlXCIsIHJlbGF0aW9uKTtcbiAgICBncmFwaC5zZXRFZGdlKFxuICAgICAgcmVsYXRpb24uaWQxLFxuICAgICAgcmVsYXRpb24uaWQyLFxuICAgICAge1xuICAgICAgICByZWxhdGlvbixcbiAgICAgICAgd2lkdGg6IGdldExhYmVsV2lkdGgocmVsYXRpb24udGl0bGUpLFxuICAgICAgICBoZWlnaHQ6IGNvbmYubGFiZWxIZWlnaHQgKiBjb21tb25fZGVmYXVsdC5nZXRSb3dzKHJlbGF0aW9uLnRpdGxlKS5sZW5ndGgsXG4gICAgICAgIGxhYmVscG9zOiBcImNcIlxuICAgICAgfSxcbiAgICAgIFwiaWRcIiArIGNudFxuICAgICk7XG4gIH0pO1xuICBkYWdyZUxheW91dChncmFwaCk7XG4gIGxvZy5kZWJ1ZyhcIkdyYXBoIGFmdGVyIGxheW91dFwiLCBncmFwaC5ub2RlcygpKTtcbiAgY29uc3Qgc3ZnRWxlbSA9IGRpYWdyYW0yLm5vZGUoKTtcbiAgZ3JhcGgubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAodiAhPT0gdm9pZCAwICYmIGdyYXBoLm5vZGUodikgIT09IHZvaWQgMCkge1xuICAgICAgbG9nLndhcm4oXCJOb2RlIFwiICsgdiArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGdyYXBoLm5vZGUodikpKTtcbiAgICAgIHJvb3Quc2VsZWN0KFwiI1wiICsgc3ZnRWxlbS5pZCArIFwiICNcIiArIHYpLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKSArIFwiLFwiICsgKGdyYXBoLm5vZGUodikueSArICh0cmFuc2Zvcm1hdGlvbkxvZ1t2XSA/IHRyYW5zZm9ybWF0aW9uTG9nW3ZdLnkgOiAwKSAtIGdyYXBoLm5vZGUodikuaGVpZ2h0IC8gMikgKyBcIiApXCJcbiAgICAgICk7XG4gICAgICByb290LnNlbGVjdChcIiNcIiArIHN2Z0VsZW0uaWQgKyBcIiAjXCIgKyB2KS5hdHRyKFwiZGF0YS14LXNoaWZ0XCIsIGdyYXBoLm5vZGUodikueCAtIGdyYXBoLm5vZGUodikud2lkdGggLyAyKTtcbiAgICAgIGNvbnN0IGRpdmlkZXJzID0gZG9tRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiNcIiArIHN2Z0VsZW0uaWQgKyBcIiAjXCIgKyB2ICsgXCIgLmRpdmlkZXJcIik7XG4gICAgICBkaXZpZGVycy5mb3JFYWNoKChkaXZpZGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRpdmlkZXIucGFyZW50RWxlbWVudDtcbiAgICAgICAgbGV0IHBXaWR0aCA9IDA7XG4gICAgICAgIGxldCBwU2hpZnQgPSAwO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBwV2lkdGggPSBwYXJlbnQucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBTaGlmdCA9IHBhcnNlSW50KHBhcmVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXgtc2hpZnRcIiksIDEwKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHBTaGlmdCkpIHtcbiAgICAgICAgICAgIHBTaGlmdCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpdmlkZXIuc2V0QXR0cmlidXRlKFwieDFcIiwgMCAtIHBTaGlmdCArIDgpO1xuICAgICAgICBkaXZpZGVyLnNldEF0dHJpYnV0ZShcIngyXCIsIHBXaWR0aCAtIHBTaGlmdCAtIDgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIk5vIE5vZGUgXCIgKyB2ICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZ3JhcGgubm9kZSh2KSkpO1xuICAgIH1cbiAgfSk7XG4gIGxldCBzdGF0ZUJveCA9IHN2Z0VsZW0uZ2V0QkJveCgpO1xuICBncmFwaC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgIGlmIChlICE9PSB2b2lkIDAgJiYgZ3JhcGguZWRnZShlKSAhPT0gdm9pZCAwKSB7XG4gICAgICBsb2cuZGVidWcoXCJFZGdlIFwiICsgZS52ICsgXCIgLT4gXCIgKyBlLncgKyBcIjogXCIgKyBKU09OLnN0cmluZ2lmeShncmFwaC5lZGdlKGUpKSk7XG4gICAgICBkcmF3RWRnZShkaWFncmFtMiwgZ3JhcGguZWRnZShlKSwgZ3JhcGguZWRnZShlKS5yZWxhdGlvbik7XG4gICAgfVxuICB9KTtcbiAgc3RhdGVCb3ggPSBzdmdFbGVtLmdldEJCb3goKTtcbiAgY29uc3Qgc3RhdGVJbmZvID0ge1xuICAgIGlkOiBwYXJlbnRJZCA/IHBhcmVudElkIDogXCJyb290XCIsXG4gICAgbGFiZWw6IHBhcmVudElkID8gcGFyZW50SWQgOiBcInJvb3RcIixcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfTtcbiAgc3RhdGVJbmZvLndpZHRoID0gc3RhdGVCb3gud2lkdGggKyAyICogY29uZi5wYWRkaW5nO1xuICBzdGF0ZUluZm8uaGVpZ2h0ID0gc3RhdGVCb3guaGVpZ2h0ICsgMiAqIGNvbmYucGFkZGluZztcbiAgbG9nLmRlYnVnKFwiRG9jIHJlbmRlcmVkXCIsIHN0YXRlSW5mbywgZ3JhcGgpO1xuICByZXR1cm4gc3RhdGVJbmZvO1xufSwgXCJyZW5kZXJEb2NcIik7XG52YXIgc3RhdGVSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBzZXRDb25mLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBzdGF0ZURpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IHN0YXRlRGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IHN0YXRlUmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gICAgaWYgKCFjbmYuc3RhdGUpIHtcbiAgICAgIGNuZi5zdGF0ZSA9IHt9O1xuICAgIH1cbiAgICBjbmYuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSA9IGNuZi5hcnJvd01hcmtlckFic29sdXRlO1xuICAgIHN0YXRlRGJfZGVmYXVsdC5jbGVhcigpO1xuICB9LCBcImluaXRcIilcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBzdGF0ZURiX2RlZmF1bHQsXG4gIHN0YXRlRGlhZ3JhbV9kZWZhdWx0LFxuICBzdGF0ZVJlbmRlcmVyX3YzX3VuaWZpZWRfZGVmYXVsdCxcbiAgc3R5bGVzX2RlZmF1bHRcbn0gZnJvbSBcIi4vY2h1bmstTlFGN01KQU8ubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVdaQklBVFNLLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVJPS1lVVkNVLm1qc1wiO1xuaW1wb3J0IFwiLi9jaHVuay0yM0FUTVpYVi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEaWFncmFtLXYyLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyOiBzdGF0ZURpYWdyYW1fZGVmYXVsdCxcbiAgZGI6IHN0YXRlRGJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IHN0YXRlUmVuZGVyZXJfdjNfdW5pZmllZF9kZWZhdWx0LFxuICBzdHlsZXM6IHN0eWxlc19kZWZhdWx0LFxuICBpbml0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjbmYpID0+IHtcbiAgICBpZiAoIWNuZi5zdGF0ZSkge1xuICAgICAgY25mLnN0YXRlID0ge307XG4gICAgfVxuICAgIGNuZi5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlID0gY25mLmFycm93TWFya2VyQWJzb2x1dGU7XG4gICAgc3RhdGVEYl9kZWZhdWx0LmNsZWFyKCk7XG4gIH0sIFwiaW5pdFwiKVxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZHJhd1JlY3QsXG4gIGRyYXdUZXh0LFxuICBnZXROb3RlUmVjdFxufSBmcm9tIFwiLi9jaHVuay1YVk9ZT00yQy5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvcGFyc2VyL2pvdXJuZXkuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFs2LCA4LCAxMCwgMTEsIDEyLCAxNCwgMTYsIDE3LCAxOF0sICRWMSA9IFsxLCA5XSwgJFYyID0gWzEsIDEwXSwgJFYzID0gWzEsIDExXSwgJFY0ID0gWzEsIDEyXSwgJFY1ID0gWzEsIDEzXSwgJFY2ID0gWzEsIDE0XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwiam91cm5leVwiOiA0LCBcImRvY3VtZW50XCI6IDUsIFwiRU9GXCI6IDYsIFwibGluZVwiOiA3LCBcIlNQQUNFXCI6IDgsIFwic3RhdGVtZW50XCI6IDksIFwiTkVXTElORVwiOiAxMCwgXCJ0aXRsZVwiOiAxMSwgXCJhY2NfdGl0bGVcIjogMTIsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDEzLCBcImFjY19kZXNjclwiOiAxNCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMTUsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAxNiwgXCJzZWN0aW9uXCI6IDE3LCBcInRhc2tOYW1lXCI6IDE4LCBcInRhc2tEYXRhXCI6IDE5LCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNDogXCJqb3VybmV5XCIsIDY6IFwiRU9GXCIsIDg6IFwiU1BBQ0VcIiwgMTA6IFwiTkVXTElORVwiLCAxMTogXCJ0aXRsZVwiLCAxMjogXCJhY2NfdGl0bGVcIiwgMTM6IFwiYWNjX3RpdGxlX3ZhbHVlXCIsIDE0OiBcImFjY19kZXNjclwiLCAxNTogXCJhY2NfZGVzY3JfdmFsdWVcIiwgMTY6IFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiLCAxNzogXCJzZWN0aW9uXCIsIDE4OiBcInRhc2tOYW1lXCIsIDE5OiBcInRhc2tEYXRhXCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFs1LCAwXSwgWzUsIDJdLCBbNywgMl0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMl1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwIC0gMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5zZXREaWFncmFtVGl0bGUoJCRbJDBdLnN1YnN0cig2KSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdLnN1YnN0cig2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS50cmltKCk7XG4gICAgICAgICAgeXkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuYWRkU2VjdGlvbigkJFskMF0uc3Vic3RyKDgpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0uc3Vic3RyKDgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHl5LmFkZFRhc2soJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSBcInRhc2tcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogWzEsIDJdIH0sIHsgMTogWzNdIH0sIG8oJFYwLCBbMiwgMl0sIHsgNTogMyB9KSwgeyA2OiBbMSwgNF0sIDc6IDUsIDg6IFsxLCA2XSwgOTogNywgMTA6IFsxLCA4XSwgMTE6ICRWMSwgMTI6ICRWMiwgMTQ6ICRWMywgMTY6ICRWNCwgMTc6ICRWNSwgMTg6ICRWNiB9LCBvKCRWMCwgWzIsIDddLCB7IDE6IFsyLCAxXSB9KSwgbygkVjAsIFsyLCAzXSksIHsgOTogMTUsIDExOiAkVjEsIDEyOiAkVjIsIDE0OiAkVjMsIDE2OiAkVjQsIDE3OiAkVjUsIDE4OiAkVjYgfSwgbygkVjAsIFsyLCA1XSksIG8oJFYwLCBbMiwgNl0pLCBvKCRWMCwgWzIsIDhdKSwgeyAxMzogWzEsIDE2XSB9LCB7IDE1OiBbMSwgMTddIH0sIG8oJFYwLCBbMiwgMTFdKSwgbygkVjAsIFsyLCAxMl0pLCB7IDE5OiBbMSwgMThdIH0sIG8oJFYwLCBbMiwgNF0pLCBvKCRWMCwgWzIsIDldKSwgbygkVjAsIFsyLCAxMF0pLCBvKCRWMCwgWzIsIDEzXSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7fSxcbiAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICBpZiAoaGFzaC5yZWNvdmVyYWJsZSkge1xuICAgICAgICB0aGlzLnRyYWNlKHN0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgZXJyb3IuaGFzaCA9IGhhc2g7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICBwYXJzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdHN0YWNrID0gW10sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0ZXh0ID0gXCJcIiwgeXlsaW5lbm8gPSAwLCB5eWxlbmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTtcbiAgICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBsZXhlcjIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgICAgdmFyIHNoYXJlZFN0YXRlID0geyB5eToge30gfTtcbiAgICAgIGZvciAodmFyIGsgaW4gdGhpcy55eSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksIGspKSB7XG4gICAgICAgICAgc2hhcmVkU3RhdGUueXlba10gPSB0aGlzLnl5W2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXhlcjIuc2V0SW5wdXQoaW5wdXQsIHNoYXJlZFN0YXRlLnl5KTtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXIyO1xuICAgICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgbGV4ZXIyLnl5bGxvYyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxleGVyMi55eWxsb2MgPSB7fTtcbiAgICAgIH1cbiAgICAgIHZhciB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgICB2YXIgcmFuZ2VzID0gbGV4ZXIyLm9wdGlvbnMgJiYgbGV4ZXIyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgaWYgKHR5cGVvZiBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICB9XG4gICAgICBfX25hbWUocG9wU3RhY2ssIFwicG9wU3RhY2tcIik7XG4gICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCkgfHwgbGV4ZXIyLmxleCgpIHx8IEVPRjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB0c3RhY2sgPSB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShsZXgsIFwibGV4XCIpO1xuICAgICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09IFwidW5kZWZpbmVkXCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkge1xuICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gVEVSUk9SKSB7XG4gICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goXCInXCIgKyB0aGlzLnRlcm1pbmFsc19bcF0gKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsZXhlcjIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgbGV4ZXIyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IEVPRiA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7XG4gICAgICAgICAgICB0ZXh0OiBsZXhlcjIubWF0Y2gsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLFxuICAgICAgICAgICAgbGluZTogbGV4ZXIyLnl5bGluZW5vLFxuICAgICAgICAgICAgbG9jOiB5eWxvYyxcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6IFwiICsgc3RhdGUgKyBcIiwgdG9rZW46IFwiICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKGxleGVyMi55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIyLnl5bGxvYyk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7XG4gICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkge1xuICAgICAgICAgICAgICB5eWxlbmcgPSBsZXhlcjIueXlsZW5nO1xuICAgICAgICAgICAgICB5eXRleHQgPSBsZXhlcjIueXl0ZXh0O1xuICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyMi55eWxpbmVubztcbiAgICAgICAgICAgICAgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgeXl0ZXh0LFxuICAgICAgICAgICAgICB5eWxlbmcsXG4gICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICBzaGFyZWRTdGF0ZS55eSxcbiAgICAgICAgICAgICAgYWN0aW9uWzFdLFxuICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgIGxzdGFja1xuICAgICAgICAgICAgXS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZhbC5fJCk7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH07XG4gIHZhciBsZXhlciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGV4ZXIyID0ge1xuICAgICAgRU9GOiAxLFxuICAgICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICAgIH0sIFwicGFyc2VFcnJvclwiKSxcbiAgICAgIC8vIHJlc2V0cyB0aGUgbGV4ZXIsIHNldHMgbmV3IGlucHV0XG4gICAgICBzZXRJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpbnB1dCwgeXkpIHtcbiAgICAgICAgdGhpcy55eSA9IHl5IHx8IHRoaXMueXkgfHwge307XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9iYWNrdHJhY2sgPSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFtcIklOSVRJQUxcIl07XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiAwLFxuICAgICAgICAgIGxhc3RfbGluZTogMSxcbiAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInNldElucHV0XCIpLFxuICAgICAgLy8gY29uc3VtZXMgYW5kIHJldHVybnMgb25lIGNoYXIgZnJvbSB0aGUgaW5wdXRcbiAgICAgIGlucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7XG4gICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgIHRoaXMub2Zmc2V0Kys7XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgICAgfSwgXCJpbnB1dFwiKSxcbiAgICAgIC8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbiAgICAgIHVucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwidW5wdXRcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxuICAgICAgbW9yZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJtb3JlXCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIHNpZ25hbHMgdGhlIGxleGVyIHRoYXQgdGhpcyBydWxlIGZhaWxzIHRvIG1hdGNoIHRoZSBpbnB1dCwgc28gdGhlIG5leHQgbWF0Y2hpbmcgcnVsZSAocmVnZXgpIHNob3VsZCBiZSB0ZXN0ZWQgaW5zdGVhZC5cbiAgICAgIHJlamVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwicmVqZWN0XCIpLFxuICAgICAgLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbiAgICAgIGxlc3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgICAgfSwgXCJsZXNzXCIpLFxuICAgICAgLy8gZGlzcGxheXMgYWxyZWFkeSBtYXRjaGVkIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgcGFzdElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInBhc3RJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHVwY29taW5nIGlucHV0LCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgdXBjb21pbmdJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwIC0gbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwgMjApICsgKG5leHQubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwidXBjb21pbmdJbnB1dFwiKSxcbiAgICAgIC8vIGRpc3BsYXlzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gd2hlcmUgdGhlIGxleGluZyBlcnJvciBvY2N1cnJlZCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHNob3dQb3NpdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICAgIH0sIFwic2hvd1Bvc2l0aW9uXCIpLFxuICAgICAgLy8gdGVzdCB0aGUgbGV4ZWQgdG9rZW46IHJldHVybiBGQUxTRSB3aGVuIG5vdCBhIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIHRva2VuXG4gICAgICB0ZXN0X21hdGNoOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG1hdGNoLCBpbmRleGVkX3J1bGUpIHtcbiAgICAgICAgdmFyIHRva2VuLCBsaW5lcywgYmFja3VwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIGJhY2t1cCA9IHtcbiAgICAgICAgICAgIHl5bGluZW5vOiB0aGlzLnl5bGluZW5vLFxuICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5eXRleHQ6IHRoaXMueXl0ZXh0LFxuICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICBtYXRjaGVzOiB0aGlzLm1hdGNoZXMsXG4gICAgICAgICAgICBtYXRjaGVkOiB0aGlzLm1hdGNoZWQsXG4gICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcbiAgICAgICAgICAgIF9tb3JlOiB0aGlzLl9tb3JlLFxuICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgIHl5OiB0aGlzLnl5LFxuICAgICAgICAgICAgY29uZGl0aW9uU3RhY2s6IHRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksXG4gICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICBiYWNrdXAueXlsbG9jLnJhbmdlID0gdGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBpbmRleGVkX3J1bGUsIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXNba10gPSBiYWNrdXBba107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LCBcInRlc3RfbWF0Y2hcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCBpbiBpbnB1dFxuICAgICAgbmV4dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG9rZW4sIG1hdGNoLCB0ZW1wTWF0Y2gsIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICB0aGlzLnl5dGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKHRlbXBNYXRjaCwgcnVsZXNbaV0pO1xuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoXCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgXCIgKyAodGhpcy55eWxpbmVubyArIDEpICsgXCIuIFVucmVjb2duaXplZCB0ZXh0LlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBcIm5leHRcIiksXG4gICAgICAvLyByZXR1cm4gbmV4dCBtYXRjaCB0aGF0IGhhcyBhIHRva2VuXG4gICAgICBsZXg6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAocikge1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgICB9LCBcImxleFwiKSxcbiAgICAgIC8vIGFjdGl2YXRlcyBhIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgKHB1c2hlcyB0aGUgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvbnRvIHRoZSBjb25kaXRpb24gc3RhY2spXG4gICAgICBiZWdpbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9LCBcImJlZ2luXCIpLFxuICAgICAgLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbiAgICAgIHBvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBvcFN0YXRlKCkge1xuICAgICAgICB2YXIgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbMF07XG4gICAgICAgIH1cbiAgICAgIH0sIFwicG9wU3RhdGVcIiksXG4gICAgICAvLyBwcm9kdWNlIHRoZSBsZXhlciBydWxlIHNldCB3aGljaCBpcyBhY3RpdmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZVxuICAgICAgX2N1cnJlbnRSdWxlczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbXCJJTklUSUFMXCJdLnJ1bGVzO1xuICAgICAgICB9XG4gICAgICB9LCBcIl9jdXJyZW50UnVsZXNcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlOyB3aGVuIGFuIGluZGV4IGFyZ3VtZW50IGlzIHByb3ZpZGVkIGl0IHByb2R1Y2VzIHRoZSBOLXRoIHByZXZpb3VzIGNvbmRpdGlvbiBzdGF0ZSwgaWYgYXZhaWxhYmxlXG4gICAgICB0b3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0b3BTdGF0ZShuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbbl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFwiSU5JVElBTFwiO1xuICAgICAgICB9XG4gICAgICB9LCBcInRvcFN0YXRlXCIpLFxuICAgICAgLy8gYWxpYXMgZm9yIGJlZ2luKGNvbmRpdGlvbilcbiAgICAgIHB1c2hTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwdXNoU3RhdGUoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgIH0sIFwicHVzaFN0YXRlXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3RhdGVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2tcbiAgICAgIHN0YXRlU3RhY2tTaXplOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHN0YXRlU3RhY2tTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGg7XG4gICAgICB9LCBcInN0YXRlU3RhY2tTaXplXCIpLFxuICAgICAgb3B0aW9uczogeyBcImNhc2UtaW5zZW5zaXRpdmVcIjogdHJ1ZSB9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgcmV0dXJuIDE3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgcmV0dXJuIFwiOlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzolKD8hXFx7KVteXFxuXSopL2ksIC9eKD86W15cXH1dJSVbXlxcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OmpvdXJuZXlcXGIpL2ksIC9eKD86dGl0bGVcXHNbXiNcXG47XSspL2ksIC9eKD86YWNjVGl0bGVcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqOlxccyopL2ksIC9eKD86KD8hXFxufHwpKlteXFxuXSopL2ksIC9eKD86YWNjRGVzY3JcXHMqXFx7XFxzKikvaSwgL14oPzpbXFx9XSkvaSwgL14oPzpbXlxcfV0qKS9pLCAvXig/OnNlY3Rpb25cXHNbXiM6XFxuO10rKS9pLCAvXig/OlteIzpcXG47XSspL2ksIC9eKD86OlteI1xcbjtdKykvaSwgL14oPzo6KS9pLCAvXig/OiQpL2ksIC9eKD86LikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiYWNjX2Rlc2NyX211bHRpbGluZVwiOiB7IFwicnVsZXNcIjogWzEyLCAxM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX2Rlc2NyXCI6IHsgXCJydWxlc1wiOiBbMTBdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY190aXRsZVwiOiB7IFwicnVsZXNcIjogWzhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA5LCAxMSwgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBqb3VybmV5X2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvam91cm5leURiLmpzXG52YXIgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xudmFyIHNlY3Rpb25zID0gW107XG52YXIgdGFza3MgPSBbXTtcbnZhciByYXdUYXNrcyA9IFtdO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHNlY3Rpb25zLmxlbmd0aCA9IDA7XG4gIHRhc2tzLmxlbmd0aCA9IDA7XG4gIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbiAgcmF3VGFza3MubGVuZ3RoID0gMDtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgYWRkU2VjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIGN1cnJlbnRTZWN0aW9uID0gdHh0O1xuICBzZWN0aW9ucy5wdXNoKHR4dCk7XG59LCBcImFkZFNlY3Rpb25cIik7XG52YXIgZ2V0U2VjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc2VjdGlvbnM7XG59LCBcImdldFNlY3Rpb25zXCIpO1xudmFyIGdldFRhc2tzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgbGV0IGFsbEl0ZW1zUHJvY2Vzc2VkID0gY29tcGlsZVRhc2tzKCk7XG4gIGNvbnN0IG1heERlcHRoID0gMTAwO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICB3aGlsZSAoIWFsbEl0ZW1zUHJvY2Vzc2VkICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4RGVwdGgpIHtcbiAgICBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gIH1cbiAgdGFza3MucHVzaCguLi5yYXdUYXNrcyk7XG4gIHJldHVybiB0YXNrcztcbn0sIFwiZ2V0VGFza3NcIik7XG52YXIgdXBkYXRlQWN0b3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgY29uc3QgdGVtcEFjdG9ycyA9IFtdO1xuICB0YXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7XG4gICAgaWYgKHRhc2sucGVvcGxlKSB7XG4gICAgICB0ZW1wQWN0b3JzLnB1c2goLi4udGFzay5wZW9wbGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHVuaXF1ZSA9IG5ldyBTZXQodGVtcEFjdG9ycyk7XG4gIHJldHVybiBbLi4udW5pcXVlXS5zb3J0KCk7XG59LCBcInVwZGF0ZUFjdG9yc1wiKTtcbnZhciBhZGRUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkZXNjciwgdGFza0RhdGEpIHtcbiAgY29uc3QgcGllY2VzID0gdGFza0RhdGEuc3Vic3RyKDEpLnNwbGl0KFwiOlwiKTtcbiAgbGV0IHNjb3JlID0gMDtcbiAgbGV0IHBlZXBzID0gW107XG4gIGlmIChwaWVjZXMubGVuZ3RoID09PSAxKSB7XG4gICAgc2NvcmUgPSBOdW1iZXIocGllY2VzWzBdKTtcbiAgICBwZWVwcyA9IFtdO1xuICB9IGVsc2Uge1xuICAgIHNjb3JlID0gTnVtYmVyKHBpZWNlc1swXSk7XG4gICAgcGVlcHMgPSBwaWVjZXNbMV0uc3BsaXQoXCIsXCIpO1xuICB9XG4gIGNvbnN0IHBlb3BsZUxpc3QgPSBwZWVwcy5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgY29uc3QgcmF3VGFzayA9IHtcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICBwZW9wbGU6IHBlb3BsZUxpc3QsXG4gICAgdGFzazogZGVzY3IsXG4gICAgc2NvcmVcbiAgfTtcbiAgcmF3VGFza3MucHVzaChyYXdUYXNrKTtcbn0sIFwiYWRkVGFza1wiKTtcbnZhciBhZGRUYXNrT3JnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkZXNjcikge1xuICBjb25zdCBuZXdUYXNrID0ge1xuICAgIHNlY3Rpb246IGN1cnJlbnRTZWN0aW9uLFxuICAgIHR5cGU6IGN1cnJlbnRTZWN0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcixcbiAgICB0YXNrOiBkZXNjcixcbiAgICBjbGFzc2VzOiBbXVxuICB9O1xuICB0YXNrcy5wdXNoKG5ld1Rhc2spO1xufSwgXCJhZGRUYXNrT3JnXCIpO1xudmFyIGNvbXBpbGVUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGNvbXBpbGVUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH0sIFwiY29tcGlsZVRhc2tcIik7XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn0sIFwiY29tcGlsZVRhc2tzXCIpO1xudmFyIGdldEFjdG9ycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB1cGRhdGVBY3RvcnMoKTtcbn0sIFwiZ2V0QWN0b3JzXCIpO1xudmFyIGpvdXJuZXlEYl9kZWZhdWx0ID0ge1xuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkuam91cm5leSwgXCJnZXRDb25maWdcIiksXG4gIGNsZWFyOiBjbGVhcjIsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjVGl0bGUsXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NEZXNjcmlwdGlvbixcbiAgYWRkU2VjdGlvbixcbiAgZ2V0U2VjdGlvbnMsXG4gIGdldFRhc2tzLFxuICBhZGRUYXNrLFxuICBhZGRUYXNrT3JnLFxuICBnZXRBY3RvcnNcbn07XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvc3R5bGVzLmpzXG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYC5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50ZXh0Q29sb3J9O1xuICB9XG4gIC5tb3V0aCB7XG4gICAgc3Ryb2tlOiAjNjY2O1xuICB9XG5cbiAgbGluZSB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMudGV4dENvbG9yfVxuICB9XG5cbiAgLmxlZ2VuZCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRleHRDb2xvcn07XG4gIH1cblxuICAubGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIzMzMztcbiAgfVxuICAubGFiZWwge1xuICAgIGNvbG9yOiAke29wdGlvbnMudGV4dENvbG9yfVxuICB9XG5cbiAgLmZhY2Uge1xuICAgICR7b3B0aW9ucy5mYWNlQ29sb3IgPyBgZmlsbDogJHtvcHRpb25zLmZhY2VDb2xvcn1gIDogXCJmaWxsOiAjRkZGOERDXCJ9O1xuICAgIHN0cm9rZTogIzk5OTtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLm5vZGUgLmxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm5vZGUuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuYXJyb3doZWFkUGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLmFycm93aGVhZENvbG9yfTtcbiAgfVxuXG4gIC5lZGdlUGF0aCAucGF0aCB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICB9XG5cbiAgLmZsb3djaGFydC1saW5rIHtcbiAgICBzdHJva2U6ICR7b3B0aW9ucy5saW5lQ29sb3J9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuZWRnZUxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke29wdGlvbnMuZWRnZUxhYmVsQmFja2dyb3VuZH07XG4gICAgcmVjdCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5jbHVzdGVyIHJlY3Qge1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgZGl2Lm1lcm1haWRUb29sdGlwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1heC13aWR0aDogMjAwcHg7XG4gICAgcGFkZGluZzogMnB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtvcHRpb25zLmJvcmRlcjJ9O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlMH1gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTF9YCA6IFwiXCJ9O1xuICB9XG4gIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGUyfWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlM31gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTR9YCA6IFwiXCJ9O1xuICB9XG4gIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7XG4gICAgJHtvcHRpb25zLmZpbGxUeXBlMCA/IGBmaWxsOiAke29wdGlvbnMuZmlsbFR5cGU1fWAgOiBcIlwifTtcbiAgfVxuICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAge1xuICAgICR7b3B0aW9ucy5maWxsVHlwZTAgPyBgZmlsbDogJHtvcHRpb25zLmZpbGxUeXBlNn1gIDogXCJcIn07XG4gIH1cbiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHtcbiAgICAke29wdGlvbnMuZmlsbFR5cGUwID8gYGZpbGw6ICR7b3B0aW9ucy5maWxsVHlwZTd9YCA6IFwiXCJ9O1xuICB9XG5cbiAgLmFjdG9yLTAge1xuICAgICR7b3B0aW9ucy5hY3RvcjAgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yMH1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTEge1xuICAgICR7b3B0aW9ucy5hY3RvcjEgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yMX1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTIge1xuICAgICR7b3B0aW9ucy5hY3RvcjIgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yMn1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTMge1xuICAgICR7b3B0aW9ucy5hY3RvcjMgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yM31gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTQge1xuICAgICR7b3B0aW9ucy5hY3RvcjQgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yNH1gIDogXCJcIn07XG4gIH1cbiAgLmFjdG9yLTUge1xuICAgICR7b3B0aW9ucy5hY3RvcjUgPyBgZmlsbDogJHtvcHRpb25zLmFjdG9yNX1gIDogXCJcIn07XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdXNlci1qb3VybmV5L2pvdXJuZXlSZW5kZXJlci50c1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvc3ZnRHJhdy5qc1xuaW1wb3J0IHsgYXJjIGFzIGQzYXJjIH0gZnJvbSBcImQzXCI7XG52YXIgZHJhd1JlY3QyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCByZWN0RGF0YSkge1xuICByZXR1cm4gZHJhd1JlY3QoZWxlbSwgcmVjdERhdGEpO1xufSwgXCJkcmF3UmVjdFwiKTtcbnZhciBkcmF3RmFjZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCwgZmFjZURhdGEpIHtcbiAgY29uc3QgcmFkaXVzID0gMTU7XG4gIGNvbnN0IGNpcmNsZUVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgZmFjZURhdGEuY3gpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSkuYXR0cihcImNsYXNzXCIsIFwiZmFjZVwiKS5hdHRyKFwiclwiLCByYWRpdXMpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMikuYXR0cihcIm92ZXJmbG93XCIsIFwidmlzaWJsZVwiKTtcbiAgY29uc3QgZmFjZSA9IGVsZW1lbnQuYXBwZW5kKFwiZ1wiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4IC0gcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4ICsgcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZnVuY3Rpb24gc21pbGUoZmFjZTIpIHtcbiAgICBjb25zdCBhcmMgPSBkM2FyYygpLnN0YXJ0QW5nbGUoTWF0aC5QSSAvIDIpLmVuZEFuZ2xlKDMgKiAoTWF0aC5QSSAvIDIpKS5pbm5lclJhZGl1cyhyYWRpdXMgLyAyKS5vdXRlclJhZGl1cyhyYWRpdXMgLyAyLjIpO1xuICAgIGZhY2UyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcImRcIiwgYXJjKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgZmFjZURhdGEuY3ggKyBcIixcIiArIChmYWNlRGF0YS5jeSArIDIpICsgXCIpXCIpO1xuICB9XG4gIF9fbmFtZShzbWlsZSwgXCJzbWlsZVwiKTtcbiAgZnVuY3Rpb24gc2FkKGZhY2UyKSB7XG4gICAgY29uc3QgYXJjID0gZDNhcmMoKS5zdGFydEFuZ2xlKDMgKiBNYXRoLlBJIC8gMikuZW5kQW5nbGUoNSAqIChNYXRoLlBJIC8gMikpLmlubmVyUmFkaXVzKHJhZGl1cyAvIDIpLm91dGVyUmFkaXVzKHJhZGl1cyAvIDIuMik7XG4gICAgZmFjZTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwiZFwiLCBhcmMpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBmYWNlRGF0YS5jeCArIFwiLFwiICsgKGZhY2VEYXRhLmN5ICsgNykgKyBcIilcIik7XG4gIH1cbiAgX19uYW1lKHNhZCwgXCJzYWRcIik7XG4gIGZ1bmN0aW9uIGFtYml2YWxlbnQoZmFjZTIpIHtcbiAgICBmYWNlMi5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1vdXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgMikuYXR0cihcIngxXCIsIGZhY2VEYXRhLmN4IC0gNSkuYXR0cihcInkxXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcIngyXCIsIGZhY2VEYXRhLmN4ICsgNSkuYXR0cihcInkyXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgfVxuICBfX25hbWUoYW1iaXZhbGVudCwgXCJhbWJpdmFsZW50XCIpO1xuICBpZiAoZmFjZURhdGEuc2NvcmUgPiAzKSB7XG4gICAgc21pbGUoZmFjZSk7XG4gIH0gZWxzZSBpZiAoZmFjZURhdGEuc2NvcmUgPCAzKSB7XG4gICAgc2FkKGZhY2UpO1xuICB9IGVsc2Uge1xuICAgIGFtYml2YWxlbnQoZmFjZSk7XG4gIH1cbiAgcmV0dXJuIGNpcmNsZUVsZW1lbnQ7XG59LCBcImRyYXdGYWNlXCIpO1xudmFyIGRyYXdDaXJjbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW1lbnQsIGNpcmNsZURhdGEpIHtcbiAgY29uc3QgY2lyY2xlRWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjeFwiLCBjaXJjbGVEYXRhLmN4KTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY3lcIiwgY2lyY2xlRGF0YS5jeSk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImNsYXNzXCIsIFwiYWN0b3ItXCIgKyBjaXJjbGVEYXRhLnBvcyk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImZpbGxcIiwgY2lyY2xlRGF0YS5maWxsKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwic3Ryb2tlXCIsIGNpcmNsZURhdGEuc3Ryb2tlKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiclwiLCBjaXJjbGVEYXRhLnIpO1xuICBpZiAoY2lyY2xlRWxlbWVudC5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgY2lyY2xlRWxlbWVudC5jbGFzcyk7XG4gIH1cbiAgaWYgKGNpcmNsZURhdGEudGl0bGUgIT09IHZvaWQgMCkge1xuICAgIGNpcmNsZUVsZW1lbnQuYXBwZW5kKFwidGl0bGVcIikudGV4dChjaXJjbGVEYXRhLnRpdGxlKTtcbiAgfVxuICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbn0sIFwiZHJhd0NpcmNsZVwiKTtcbnZhciBkcmF3VGV4dDIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHRleHREYXRhKSB7XG4gIHJldHVybiBkcmF3VGV4dChlbGVtLCB0ZXh0RGF0YSk7XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBfX25hbWUoZ2VuUG9pbnRzLCBcImdlblBvaW50c1wiKTtcbiAgY29uc3QgcG9seWdvbiA9IGVsZW0uYXBwZW5kKFwicG9seWdvblwiKTtcbiAgcG9seWdvbi5hdHRyKFwicG9pbnRzXCIsIGdlblBvaW50cyh0eHRPYmplY3QueCwgdHh0T2JqZWN0LnksIDUwLCAyMCwgNykpO1xuICBwb2x5Z29uLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsQm94XCIpO1xuICB0eHRPYmplY3QueSA9IHR4dE9iamVjdC55ICsgdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICB0eHRPYmplY3QueCA9IHR4dE9iamVjdC54ICsgMC41ICogdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICBkcmF3VGV4dDIoZWxlbSwgdHh0T2JqZWN0KTtcbn0sIFwiZHJhd0xhYmVsXCIpO1xudmFyIGRyYXdTZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCBzZWN0aW9uLCBjb25mMikge1xuICBjb25zdCBnID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gc2VjdGlvbi54O1xuICByZWN0LnkgPSBzZWN0aW9uLnk7XG4gIHJlY3QuZmlsbCA9IHNlY3Rpb24uZmlsbDtcbiAgcmVjdC53aWR0aCA9IGNvbmYyLndpZHRoICogc2VjdGlvbi50YXNrQ291bnQgKyAvLyB3aWR0aCBvZiB0aGUgdGFza3NcbiAgY29uZjIuZGlhZ3JhbU1hcmdpblggKiAoc2VjdGlvbi50YXNrQ291bnQgLSAxKTtcbiAgcmVjdC5oZWlnaHQgPSBjb25mMi5oZWlnaHQ7XG4gIHJlY3QuY2xhc3MgPSBcImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtXCIgKyBzZWN0aW9uLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdDIoZywgcmVjdCk7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIHNlY3Rpb24udGV4dCxcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtXCIgKyBzZWN0aW9uLm51bSB9LFxuICAgIGNvbmYyLFxuICAgIHNlY3Rpb24uY29sb3VyXG4gICk7XG59LCBcImRyYXdTZWN0aW9uXCIpO1xudmFyIHRhc2tDb3VudCA9IC0xO1xudmFyIGRyYXdUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihlbGVtLCB0YXNrLCBjb25mMikge1xuICBjb25zdCBjZW50ZXIgPSB0YXNrLnggKyBjb25mMi53aWR0aCAvIDI7XG4gIGNvbnN0IGcgPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIHRhc2tDb3VudCsrO1xuICBjb25zdCBtYXhIZWlnaHQgPSAzMDAgKyA1ICogMzA7XG4gIGcuYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiaWRcIiwgXCJ0YXNrXCIgKyB0YXNrQ291bnQpLmF0dHIoXCJ4MVwiLCBjZW50ZXIpLmF0dHIoXCJ5MVwiLCB0YXNrLnkpLmF0dHIoXCJ4MlwiLCBjZW50ZXIpLmF0dHIoXCJ5MlwiLCBtYXhIZWlnaHQpLmF0dHIoXCJjbGFzc1wiLCBcInRhc2stbGluZVwiKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIFwiMXB4XCIpLmF0dHIoXCJzdHJva2UtZGFzaGFycmF5XCIsIFwiNCAyXCIpLmF0dHIoXCJzdHJva2VcIiwgXCIjNjY2XCIpO1xuICBkcmF3RmFjZShnLCB7XG4gICAgY3g6IGNlbnRlcixcbiAgICBjeTogMzAwICsgKDUgLSB0YXNrLnNjb3JlKSAqIDMwLFxuICAgIHNjb3JlOiB0YXNrLnNjb3JlXG4gIH0pO1xuICBjb25zdCByZWN0ID0gZ2V0Tm90ZVJlY3QoKTtcbiAgcmVjdC54ID0gdGFzay54O1xuICByZWN0LnkgPSB0YXNrLnk7XG4gIHJlY3QuZmlsbCA9IHRhc2suZmlsbDtcbiAgcmVjdC53aWR0aCA9IGNvbmYyLndpZHRoO1xuICByZWN0LmhlaWdodCA9IGNvbmYyLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwidGFzayB0YXNrLXR5cGUtXCIgKyB0YXNrLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdDIoZywgcmVjdCk7XG4gIGxldCB4UG9zID0gdGFzay54ICsgMTQ7XG4gIHRhc2sucGVvcGxlLmZvckVhY2goKHBlcnNvbikgPT4ge1xuICAgIGNvbnN0IGNvbG91ciA9IHRhc2suYWN0b3JzW3BlcnNvbl0uY29sb3I7XG4gICAgY29uc3QgY2lyY2xlID0ge1xuICAgICAgY3g6IHhQb3MsXG4gICAgICBjeTogdGFzay55LFxuICAgICAgcjogNyxcbiAgICAgIGZpbGw6IGNvbG91cixcbiAgICAgIHN0cm9rZTogXCIjMDAwXCIsXG4gICAgICB0aXRsZTogcGVyc29uLFxuICAgICAgcG9zOiB0YXNrLmFjdG9yc1twZXJzb25dLnBvc2l0aW9uXG4gICAgfTtcbiAgICBkcmF3Q2lyY2xlKGcsIGNpcmNsZSk7XG4gICAgeFBvcyArPSAxMDtcbiAgfSk7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZjIpKFxuICAgIHRhc2sudGFzayxcbiAgICBnLFxuICAgIHJlY3QueCxcbiAgICByZWN0LnksXG4gICAgcmVjdC53aWR0aCxcbiAgICByZWN0LmhlaWdodCxcbiAgICB7IGNsYXNzOiBcInRhc2tcIiB9LFxuICAgIGNvbmYyLFxuICAgIHRhc2suY29sb3VyXG4gICk7XG59LCBcImRyYXdUYXNrXCIpO1xudmFyIGRyYXdCYWNrZ3JvdW5kUmVjdDIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIGJvdW5kczIpIHtcbiAgZHJhd0JhY2tncm91bmRSZWN0KGVsZW0sIGJvdW5kczIpO1xufSwgXCJkcmF3QmFja2dyb3VuZFJlY3RcIik7XG52YXIgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29sb3VyKSB7XG4gICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMiArIDUpLnN0eWxlKFwiZm9udC1jb2xvclwiLCBjb2xvdXIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5VGV4dCwgXCJieVRleHRcIik7XG4gIGZ1bmN0aW9uIGJ5VHNwYW4oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mMiwgY29sb3VyKSB7XG4gICAgY29uc3QgeyB0YXNrRm9udFNpemUsIHRhc2tGb250RmFtaWx5IH0gPSBjb25mMjtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoLzxiclxccypcXC8/Pi9naSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZHkgPSBpICogdGFza0ZvbnRTaXplIC0gdGFza0ZvbnRTaXplICogKGxpbmVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IHRleHQgPSBnLmFwcGVuZChcInRleHRcIikuYXR0cihcInhcIiwgeCArIHdpZHRoIC8gMikuYXR0cihcInlcIiwgeSkuYXR0cihcImZpbGxcIiwgY29sb3VyKS5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLnN0eWxlKFwiZm9udC1zaXplXCIsIHRhc2tGb250U2l6ZSkuc3R5bGUoXCJmb250LWZhbWlseVwiLCB0YXNrRm9udEZhbWlseSk7XG4gICAgICB0ZXh0LmFwcGVuZChcInRzcGFuXCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJkeVwiLCBkeSkudGV4dChsaW5lc1tpXSk7XG4gICAgICB0ZXh0LmF0dHIoXCJ5XCIsIHkgKyBoZWlnaHQgLyAyKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJjZW50cmFsXCIpO1xuICAgICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICAgIH1cbiAgfVxuICBfX25hbWUoYnlUc3BhbiwgXCJieVRzcGFuXCIpO1xuICBmdW5jdGlvbiBieUZvKGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpIHtcbiAgICBjb25zdCBib2R5ID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IGJvZHkuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KS5hdHRyKFwicG9zaXRpb25cIiwgXCJmaXhlZFwiKTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIGJvZHksIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZjIpO1xuICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgfVxuICBfX25hbWUoYnlGbywgXCJieUZvXCIpO1xuICBmdW5jdGlvbiBfc2V0VGV4dEF0dHJzKHRvVGV4dCwgZnJvbVRleHRBdHRyc0RpY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgaWYgKGtleSBpbiBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgICAgICB0b1RleHQuYXR0cihrZXksIGZyb21UZXh0QXR0cnNEaWN0W2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfX25hbWUoX3NldFRleHRBdHRycywgXCJfc2V0VGV4dEF0dHJzXCIpO1xuICByZXR1cm4gZnVuY3Rpb24oY29uZjIpIHtcbiAgICByZXR1cm4gY29uZjIudGV4dFBsYWNlbWVudCA9PT0gXCJmb1wiID8gYnlGbyA6IGNvbmYyLnRleHRQbGFjZW1lbnQgPT09IFwib2xkXCIgPyBieVRleHQgOiBieVRzcGFuO1xuICB9O1xufSgpO1xudmFyIGluaXRHcmFwaGljcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZ3JhcGhpY3MpIHtcbiAgZ3JhcGhpY3MuYXBwZW5kKFwiZGVmc1wiKS5hcHBlbmQoXCJtYXJrZXJcIikuYXR0cihcImlkXCIsIFwiYXJyb3doZWFkXCIpLmF0dHIoXCJyZWZYXCIsIDUpLmF0dHIoXCJyZWZZXCIsIDIpLmF0dHIoXCJtYXJrZXJXaWR0aFwiLCA2KS5hdHRyKFwibWFya2VySGVpZ2h0XCIsIDQpLmF0dHIoXCJvcmllbnRcIiwgXCJhdXRvXCIpLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgXCJNIDAsMCBWIDQgTDYsMiBaXCIpO1xufSwgXCJpbml0R3JhcGhpY3NcIik7XG52YXIgc3ZnRHJhd19kZWZhdWx0ID0ge1xuICBkcmF3UmVjdDogZHJhd1JlY3QyLFxuICBkcmF3Q2lyY2xlLFxuICBkcmF3U2VjdGlvbixcbiAgZHJhd1RleHQ6IGRyYXdUZXh0MixcbiAgZHJhd0xhYmVsLFxuICBkcmF3VGFzayxcbiAgZHJhd0JhY2tncm91bmRSZWN0OiBkcmF3QmFja2dyb3VuZFJlY3QyLFxuICBpbml0R3JhcGhpY3Ncbn07XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvam91cm5leVJlbmRlcmVyLnRzXG52YXIgc2V0Q29uZiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY25mKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjbmYpO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgY29uZltrZXldID0gY25mW2tleV07XG4gIH0pO1xufSwgXCJzZXRDb25mXCIpO1xudmFyIGFjdG9ycyA9IHt9O1xuZnVuY3Rpb24gZHJhd0FjdG9yTGVnZW5kKGRpYWdyYW0yKSB7XG4gIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuam91cm5leTtcbiAgbGV0IHlQb3MgPSA2MDtcbiAgT2JqZWN0LmtleXMoYWN0b3JzKS5mb3JFYWNoKChwZXJzb24pID0+IHtcbiAgICBjb25zdCBjb2xvdXIgPSBhY3RvcnNbcGVyc29uXS5jb2xvcjtcbiAgICBjb25zdCBjaXJjbGVEYXRhID0ge1xuICAgICAgY3g6IDIwLFxuICAgICAgY3k6IHlQb3MsXG4gICAgICByOiA3LFxuICAgICAgZmlsbDogY29sb3VyLFxuICAgICAgc3Ryb2tlOiBcIiMwMDBcIixcbiAgICAgIHBvczogYWN0b3JzW3BlcnNvbl0ucG9zaXRpb25cbiAgICB9O1xuICAgIHN2Z0RyYXdfZGVmYXVsdC5kcmF3Q2lyY2xlKGRpYWdyYW0yLCBjaXJjbGVEYXRhKTtcbiAgICBjb25zdCBsYWJlbERhdGEgPSB7XG4gICAgICB4OiA0MCxcbiAgICAgIHk6IHlQb3MgKyA3LFxuICAgICAgZmlsbDogXCIjNjY2XCIsXG4gICAgICB0ZXh0OiBwZXJzb24sXG4gICAgICB0ZXh0TWFyZ2luOiBjb25mMi5ib3hUZXh0TWFyZ2luIHwgNVxuICAgIH07XG4gICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdUZXh0KGRpYWdyYW0yLCBsYWJlbERhdGEpO1xuICAgIHlQb3MgKz0gMjA7XG4gIH0pO1xufVxuX19uYW1lKGRyYXdBY3RvckxlZ2VuZCwgXCJkcmF3QWN0b3JMZWdlbmRcIik7XG52YXIgY29uZiA9IGdldENvbmZpZygpLmpvdXJuZXk7XG52YXIgTEVGVF9NQVJHSU4gPSBjb25mLmxlZnRNYXJnaW47XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odGV4dCwgaWQsIHZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgY29uZjIgPSBnZXRDb25maWcoKS5qb3VybmV5O1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gZ2V0Q29uZmlnKCkuc2VjdXJpdHlMZXZlbDtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IHNlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0KHNhbmRib3hFbGVtZW50Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpIDogc2VsZWN0KFwiYm9keVwiKTtcbiAgYm91bmRzLmluaXQoKTtcbiAgY29uc3QgZGlhZ3JhbTIgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgc3ZnRHJhd19kZWZhdWx0LmluaXRHcmFwaGljcyhkaWFncmFtMik7XG4gIGNvbnN0IHRhc2tzMiA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgY29uc3QgdGl0bGUgPSBkaWFnT2JqLmRiLmdldERpYWdyYW1UaXRsZSgpO1xuICBjb25zdCBhY3Rvck5hbWVzID0gZGlhZ09iai5kYi5nZXRBY3RvcnMoKTtcbiAgZm9yIChjb25zdCBtZW1iZXIgaW4gYWN0b3JzKSB7XG4gICAgZGVsZXRlIGFjdG9yc1ttZW1iZXJdO1xuICB9XG4gIGxldCBhY3RvclBvcyA9IDA7XG4gIGFjdG9yTmFtZXMuZm9yRWFjaCgoYWN0b3JOYW1lKSA9PiB7XG4gICAgYWN0b3JzW2FjdG9yTmFtZV0gPSB7XG4gICAgICBjb2xvcjogY29uZjIuYWN0b3JDb2xvdXJzW2FjdG9yUG9zICUgY29uZjIuYWN0b3JDb2xvdXJzLmxlbmd0aF0sXG4gICAgICBwb3NpdGlvbjogYWN0b3JQb3NcbiAgICB9O1xuICAgIGFjdG9yUG9zKys7XG4gIH0pO1xuICBkcmF3QWN0b3JMZWdlbmQoZGlhZ3JhbTIpO1xuICBib3VuZHMuaW5zZXJ0KDAsIDAsIExFRlRfTUFSR0lOLCBPYmplY3Qua2V5cyhhY3RvcnMpLmxlbmd0aCAqIDUwKTtcbiAgZHJhd1Rhc2tzKGRpYWdyYW0yLCB0YXNrczIsIDApO1xuICBjb25zdCBib3ggPSBib3VuZHMuZ2V0Qm91bmRzKCk7XG4gIGlmICh0aXRsZSkge1xuICAgIGRpYWdyYW0yLmFwcGVuZChcInRleHRcIikudGV4dCh0aXRsZSkuYXR0cihcInhcIiwgTEVGVF9NQVJHSU4pLmF0dHIoXCJmb250LXNpemVcIiwgXCI0ZXhcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKS5hdHRyKFwieVwiLCAyNSk7XG4gIH1cbiAgY29uc3QgaGVpZ2h0ID0gYm94LnN0b3B5IC0gYm94LnN0YXJ0eSArIDIgKiBjb25mMi5kaWFncmFtTWFyZ2luWTtcbiAgY29uc3Qgd2lkdGggPSBMRUZUX01BUkdJTiArIGJveC5zdG9weCArIDIgKiBjb25mMi5kaWFncmFtTWFyZ2luWDtcbiAgY29uZmlndXJlU3ZnU2l6ZShkaWFncmFtMiwgaGVpZ2h0LCB3aWR0aCwgY29uZjIudXNlTWF4V2lkdGgpO1xuICBkaWFncmFtMi5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBMRUZUX01BUkdJTikuYXR0cihcInkxXCIsIGNvbmYyLmhlaWdodCAqIDQpLmF0dHIoXCJ4MlwiLCB3aWR0aCAtIExFRlRfTUFSR0lOIC0gNCkuYXR0cihcInkyXCIsIGNvbmYyLmhlaWdodCAqIDQpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgNCkuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpLmF0dHIoXCJtYXJrZXItZW5kXCIsIFwidXJsKCNhcnJvd2hlYWQpXCIpO1xuICBjb25zdCBleHRyYVZlcnRGb3JUaXRsZSA9IHRpdGxlID8gNzAgOiAwO1xuICBkaWFncmFtMi5hdHRyKFwidmlld0JveFwiLCBgJHtib3guc3RhcnR4fSAtMjUgJHt3aWR0aH0gJHtoZWlnaHQgKyBleHRyYVZlcnRGb3JUaXRsZX1gKTtcbiAgZGlhZ3JhbTIuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWluWU1pbiBtZWV0XCIpO1xuICBkaWFncmFtMi5hdHRyKFwiaGVpZ2h0XCIsIGhlaWdodCArIGV4dHJhVmVydEZvclRpdGxlICsgMjUpO1xufSwgXCJkcmF3XCIpO1xudmFyIGJvdW5kcyA9IHtcbiAgZGF0YToge1xuICAgIHN0YXJ0eDogdm9pZCAwLFxuICAgIHN0b3B4OiB2b2lkIDAsXG4gICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgc3RvcHk6IHZvaWQgMFxuICB9LFxuICB2ZXJ0aWNhbFBvczogMCxcbiAgc2VxdWVuY2VJdGVtczogW10sXG4gIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXF1ZW5jZUl0ZW1zID0gW107XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgc3RhcnR4OiB2b2lkIDAsXG4gICAgICBzdG9weDogdm9pZCAwLFxuICAgICAgc3RhcnR5OiB2b2lkIDAsXG4gICAgICBzdG9weTogdm9pZCAwXG4gICAgfTtcbiAgICB0aGlzLnZlcnRpY2FsUG9zID0gMDtcbiAgfSwgXCJpbml0XCIpLFxuICB1cGRhdGVWYWw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqLCBrZXksIHZhbCwgZnVuKSB7XG4gICAgaWYgKG9ialtrZXldID09PSB2b2lkIDApIHtcbiAgICAgIG9ialtrZXldID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba2V5XSA9IGZ1bih2YWwsIG9ialtrZXldKTtcbiAgICB9XG4gIH0sIFwidXBkYXRlVmFsXCIpLFxuICB1cGRhdGVCb3VuZHM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oc3RhcnR4LCBzdGFydHksIHN0b3B4LCBzdG9weSkge1xuICAgIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuam91cm5leTtcbiAgICBjb25zdCBfc2VsZiA9IHRoaXM7XG4gICAgbGV0IGNudCA9IDA7XG4gICAgZnVuY3Rpb24gdXBkYXRlRm4odHlwZSkge1xuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdXBkYXRlSXRlbUJvdW5kcyhpdGVtKSB7XG4gICAgICAgIGNudCsrO1xuICAgICAgICBjb25zdCBuID0gX3NlbGYuc2VxdWVuY2VJdGVtcy5sZW5ndGggLSBjbnQgKyAxO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdGFydHlcIiwgc3RhcnR5IC0gbiAqIGNvbmYyLmJveE1hcmdpbiwgTWF0aC5taW4pO1xuICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weVwiLCBzdG9weSArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgX3NlbGYudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBzdGFydHggLSBuICogY29uZjIuYm94TWFyZ2luLCBNYXRoLm1pbik7XG4gICAgICAgIF9zZWxmLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBzdG9weCArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgaWYgKCEodHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgX3NlbGYudXBkYXRlVmFsKGl0ZW0sIFwic3RhcnR4XCIsIHN0YXJ0eCAtIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoaXRlbSwgXCJzdG9weFwiLCBzdG9weCArIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWF4KTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIHN0YXJ0eSAtIG4gKiBjb25mMi5ib3hNYXJnaW4sIE1hdGgubWluKTtcbiAgICAgICAgICBfc2VsZi51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RvcHlcIiwgc3RvcHkgKyBuICogY29uZjIuYm94TWFyZ2luLCBNYXRoLm1heCk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwidXBkYXRlSXRlbUJvdW5kc1wiKTtcbiAgICB9XG4gICAgX19uYW1lKHVwZGF0ZUZuLCBcInVwZGF0ZUZuXCIpO1xuICAgIHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKHVwZGF0ZUZuKCkpO1xuICB9LCBcInVwZGF0ZUJvdW5kc1wiKSxcbiAgaW5zZXJ0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHN0YXJ0eCwgc3RhcnR5LCBzdG9weCwgc3RvcHkpIHtcbiAgICBjb25zdCBfc3RhcnR4ID0gTWF0aC5taW4oc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0b3B4ID0gTWF0aC5tYXgoc3RhcnR4LCBzdG9weCk7XG4gICAgY29uc3QgX3N0YXJ0eSA9IE1hdGgubWluKHN0YXJ0eSwgc3RvcHkpO1xuICAgIGNvbnN0IF9zdG9weSA9IE1hdGgubWF4KHN0YXJ0eSwgc3RvcHkpO1xuICAgIHRoaXMudXBkYXRlVmFsKGJvdW5kcy5kYXRhLCBcInN0YXJ0eFwiLCBfc3RhcnR4LCBNYXRoLm1pbik7XG4gICAgdGhpcy51cGRhdGVWYWwoYm91bmRzLmRhdGEsIFwic3RhcnR5XCIsIF9zdGFydHksIE1hdGgubWluKTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weFwiLCBfc3RvcHgsIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZVZhbChib3VuZHMuZGF0YSwgXCJzdG9weVwiLCBfc3RvcHksIE1hdGgubWF4KTtcbiAgICB0aGlzLnVwZGF0ZUJvdW5kcyhfc3RhcnR4LCBfc3RhcnR5LCBfc3RvcHgsIF9zdG9weSk7XG4gIH0sIFwiaW5zZXJ0XCIpLFxuICBidW1wVmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oYnVtcCkge1xuICAgIHRoaXMudmVydGljYWxQb3MgPSB0aGlzLnZlcnRpY2FsUG9zICsgYnVtcDtcbiAgICB0aGlzLmRhdGEuc3RvcHkgPSB0aGlzLnZlcnRpY2FsUG9zO1xuICB9LCBcImJ1bXBWZXJ0aWNhbFBvc1wiKSxcbiAgZ2V0VmVydGljYWxQb3M6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxQb3M7XG4gIH0sIFwiZ2V0VmVydGljYWxQb3NcIiksXG4gIGdldEJvdW5kczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9LCBcImdldEJvdW5kc1wiKVxufTtcbnZhciBmaWxscyA9IGNvbmYuc2VjdGlvbkZpbGxzO1xudmFyIHRleHRDb2xvdXJzID0gY29uZi5zZWN0aW9uQ29sb3VycztcbnZhciBkcmF3VGFza3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRpYWdyYW0yLCB0YXNrczIsIHZlcnRpY2FsUG9zKSB7XG4gIGNvbnN0IGNvbmYyID0gZ2V0Q29uZmlnKCkuam91cm5leTtcbiAgbGV0IGxhc3RTZWN0aW9uID0gXCJcIjtcbiAgY29uc3Qgc2VjdGlvblZIZWlnaHQgPSBjb25mMi5oZWlnaHQgKiAyICsgY29uZjIuZGlhZ3JhbU1hcmdpblk7XG4gIGNvbnN0IHRhc2tQb3MgPSB2ZXJ0aWNhbFBvcyArIHNlY3Rpb25WSGVpZ2h0O1xuICBsZXQgc2VjdGlvbk51bWJlciA9IDA7XG4gIGxldCBmaWxsID0gXCIjQ0NDXCI7XG4gIGxldCBjb2xvdXIgPSBcImJsYWNrXCI7XG4gIGxldCBudW0gPSAwO1xuICBmb3IgKGNvbnN0IFtpLCB0YXNrXSBvZiB0YXNrczIuZW50cmllcygpKSB7XG4gICAgaWYgKGxhc3RTZWN0aW9uICE9PSB0YXNrLnNlY3Rpb24pIHtcbiAgICAgIGZpbGwgPSBmaWxsc1tzZWN0aW9uTnVtYmVyICUgZmlsbHMubGVuZ3RoXTtcbiAgICAgIG51bSA9IHNlY3Rpb25OdW1iZXIgJSBmaWxscy5sZW5ndGg7XG4gICAgICBjb2xvdXIgPSB0ZXh0Q29sb3Vyc1tzZWN0aW9uTnVtYmVyICUgdGV4dENvbG91cnMubGVuZ3RoXTtcbiAgICAgIGxldCB0YXNrSW5TZWN0aW9uQ291bnQgPSAwO1xuICAgICAgY29uc3QgY3VycmVudFNlY3Rpb24yID0gdGFzay5zZWN0aW9uO1xuICAgICAgZm9yIChsZXQgdGFza0luZGV4ID0gaTsgdGFza0luZGV4IDwgdGFza3MyLmxlbmd0aDsgdGFza0luZGV4KyspIHtcbiAgICAgICAgaWYgKHRhc2tzMlt0YXNrSW5kZXhdLnNlY3Rpb24gPT0gY3VycmVudFNlY3Rpb24yKSB7XG4gICAgICAgICAgdGFza0luU2VjdGlvbkNvdW50ID0gdGFza0luU2VjdGlvbkNvdW50ICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VjdGlvbiA9IHtcbiAgICAgICAgeDogaSAqIGNvbmYyLnRhc2tNYXJnaW4gKyBpICogY29uZjIud2lkdGggKyBMRUZUX01BUkdJTixcbiAgICAgICAgeTogNTAsXG4gICAgICAgIHRleHQ6IHRhc2suc2VjdGlvbixcbiAgICAgICAgZmlsbCxcbiAgICAgICAgbnVtLFxuICAgICAgICBjb2xvdXIsXG4gICAgICAgIHRhc2tDb3VudDogdGFza0luU2VjdGlvbkNvdW50XG4gICAgICB9O1xuICAgICAgc3ZnRHJhd19kZWZhdWx0LmRyYXdTZWN0aW9uKGRpYWdyYW0yLCBzZWN0aW9uLCBjb25mMik7XG4gICAgICBsYXN0U2VjdGlvbiA9IHRhc2suc2VjdGlvbjtcbiAgICAgIHNlY3Rpb25OdW1iZXIrKztcbiAgICB9XG4gICAgY29uc3QgdGFza0FjdG9ycyA9IHRhc2sucGVvcGxlLnJlZHVjZSgoYWNjLCBhY3Rvck5hbWUpID0+IHtcbiAgICAgIGlmIChhY3RvcnNbYWN0b3JOYW1lXSkge1xuICAgICAgICBhY2NbYWN0b3JOYW1lXSA9IGFjdG9yc1thY3Rvck5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgdGFzay54ID0gaSAqIGNvbmYyLnRhc2tNYXJnaW4gKyBpICogY29uZjIud2lkdGggKyBMRUZUX01BUkdJTjtcbiAgICB0YXNrLnkgPSB0YXNrUG9zO1xuICAgIHRhc2sud2lkdGggPSBjb25mMi5kaWFncmFtTWFyZ2luWDtcbiAgICB0YXNrLmhlaWdodCA9IGNvbmYyLmRpYWdyYW1NYXJnaW5ZO1xuICAgIHRhc2suY29sb3VyID0gY29sb3VyO1xuICAgIHRhc2suZmlsbCA9IGZpbGw7XG4gICAgdGFzay5udW0gPSBudW07XG4gICAgdGFzay5hY3RvcnMgPSB0YXNrQWN0b3JzO1xuICAgIHN2Z0RyYXdfZGVmYXVsdC5kcmF3VGFzayhkaWFncmFtMiwgdGFzaywgY29uZjIpO1xuICAgIGJvdW5kcy5pbnNlcnQodGFzay54LCB0YXNrLnksIHRhc2sueCArIHRhc2sud2lkdGggKyBjb25mMi50YXNrTWFyZ2luLCAzMDAgKyA1ICogMzApO1xuICB9XG59LCBcImRyYXdUYXNrc1wiKTtcbnZhciBqb3VybmV5UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgc2V0Q29uZixcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3VzZXItam91cm5leS9qb3VybmV5RGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIHBhcnNlcjogam91cm5leV9kZWZhdWx0LFxuICBkYjogam91cm5leURiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBqb3VybmV5UmVuZGVyZXJfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdCxcbiAgaW5pdDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY25mKSA9PiB7XG4gICAgam91cm5leVJlbmRlcmVyX2RlZmF1bHQuc2V0Q29uZihjbmYuam91cm5leSk7XG4gICAgam91cm5leURiX2RlZmF1bHQuY2xlYXIoKTtcbiAgfSwgXCJpbml0XCIpXG59O1xuZXhwb3J0IHtcbiAgZGlhZ3JhbVxufTtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19leHBvcnQsXG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGNvbW1vbkRiX2V4cG9ydHMsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2csXG4gIHNldHVwR3JhcGhWaWV3Ym94XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvcGFyc2VyL3RpbWVsaW5lLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbNiwgOCwgMTAsIDExLCAxMiwgMTQsIDE2LCAxNywgMjAsIDIxXSwgJFYxID0gWzEsIDldLCAkVjIgPSBbMSwgMTBdLCAkVjMgPSBbMSwgMTFdLCAkVjQgPSBbMSwgMTJdLCAkVjUgPSBbMSwgMTNdLCAkVjYgPSBbMSwgMTZdLCAkVjcgPSBbMSwgMTddO1xuICB2YXIgcGFyc2VyMiA9IHtcbiAgICB0cmFjZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiB0cmFjZSgpIHtcbiAgICB9LCBcInRyYWNlXCIpLFxuICAgIHl5OiB7fSxcbiAgICBzeW1ib2xzXzogeyBcImVycm9yXCI6IDIsIFwic3RhcnRcIjogMywgXCJ0aW1lbGluZVwiOiA0LCBcImRvY3VtZW50XCI6IDUsIFwiRU9GXCI6IDYsIFwibGluZVwiOiA3LCBcIlNQQUNFXCI6IDgsIFwic3RhdGVtZW50XCI6IDksIFwiTkVXTElORVwiOiAxMCwgXCJ0aXRsZVwiOiAxMSwgXCJhY2NfdGl0bGVcIjogMTIsIFwiYWNjX3RpdGxlX3ZhbHVlXCI6IDEzLCBcImFjY19kZXNjclwiOiAxNCwgXCJhY2NfZGVzY3JfdmFsdWVcIjogMTUsIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiOiAxNiwgXCJzZWN0aW9uXCI6IDE3LCBcInBlcmlvZF9zdGF0ZW1lbnRcIjogMTgsIFwiZXZlbnRfc3RhdGVtZW50XCI6IDE5LCBcInBlcmlvZFwiOiAyMCwgXCJldmVudFwiOiAyMSwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwidGltZWxpbmVcIiwgNjogXCJFT0ZcIiwgODogXCJTUEFDRVwiLCAxMDogXCJORVdMSU5FXCIsIDExOiBcInRpdGxlXCIsIDEyOiBcImFjY190aXRsZVwiLCAxMzogXCJhY2NfdGl0bGVfdmFsdWVcIiwgMTQ6IFwiYWNjX2Rlc2NyXCIsIDE1OiBcImFjY19kZXNjcl92YWx1ZVwiLCAxNjogXCJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlXCIsIDE3OiBcInNlY3Rpb25cIiwgMjA6IFwicGVyaW9kXCIsIDIxOiBcImV2ZW50XCIgfSxcbiAgICBwcm9kdWN0aW9uc186IFswLCBbMywgM10sIFs1LCAwXSwgWzUsIDJdLCBbNywgMl0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs5LCAxXSwgWzksIDJdLCBbOSwgMl0sIFs5LCAxXSwgWzksIDFdLCBbOSwgMV0sIFs5LCAxXSwgWzE4LCAxXSwgWzE5LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDAgLSAxXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0RGlhZ3JhbVRpdGxlKCQkWyQwXS5zdWJzdHIoNikpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoNik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0QWNjVGl0bGUodGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF0udHJpbSgpO1xuICAgICAgICAgIHl5LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB5eS5hZGRTZWN0aW9uKCQkWyQwXS5zdWJzdHIoOCkpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXS5zdWJzdHIoOCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgeXkuYWRkVGFzaygkJFskMF0sIDAsIFwiXCIpO1xuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICB5eS5hZGRFdmVudCgkJFskMF0uc3Vic3RyKDIpKTtcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgdGFibGU6IFt7IDM6IDEsIDQ6IFsxLCAyXSB9LCB7IDE6IFszXSB9LCBvKCRWMCwgWzIsIDJdLCB7IDU6IDMgfSksIHsgNjogWzEsIDRdLCA3OiA1LCA4OiBbMSwgNl0sIDk6IDcsIDEwOiBbMSwgOF0sIDExOiAkVjEsIDEyOiAkVjIsIDE0OiAkVjMsIDE2OiAkVjQsIDE3OiAkVjUsIDE4OiAxNCwgMTk6IDE1LCAyMDogJFY2LCAyMTogJFY3IH0sIG8oJFYwLCBbMiwgN10sIHsgMTogWzIsIDFdIH0pLCBvKCRWMCwgWzIsIDNdKSwgeyA5OiAxOCwgMTE6ICRWMSwgMTI6ICRWMiwgMTQ6ICRWMywgMTY6ICRWNCwgMTc6ICRWNSwgMTg6IDE0LCAxOTogMTUsIDIwOiAkVjYsIDIxOiAkVjcgfSwgbygkVjAsIFsyLCA1XSksIG8oJFYwLCBbMiwgNl0pLCBvKCRWMCwgWzIsIDhdKSwgeyAxMzogWzEsIDE5XSB9LCB7IDE1OiBbMSwgMjBdIH0sIG8oJFYwLCBbMiwgMTFdKSwgbygkVjAsIFsyLCAxMl0pLCBvKCRWMCwgWzIsIDEzXSksIG8oJFYwLCBbMiwgMTRdKSwgbygkVjAsIFsyLCAxNV0pLCBvKCRWMCwgWzIsIDE2XSksIG8oJFYwLCBbMiwgNF0pLCBvKCRWMCwgWzIsIDldKSwgbygkVjAsIFsyLCAxMF0pXSxcbiAgICBkZWZhdWx0QWN0aW9uczoge30sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiAxMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIDExO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY190aXRsZVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBcImFjY190aXRsZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcImFjY19kZXNjclwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiYWNjX2Rlc2NyX211bHRpbGluZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgIHJldHVybiAxNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICByZXR1cm4gMjE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHJldHVybiBcIklOVkFMSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzolKD8hXFx7KVteXFxuXSopL2ksIC9eKD86W15cXH1dJSVbXlxcbl0qKS9pLCAvXig/OltcXG5dKykvaSwgL14oPzpcXHMrKS9pLCAvXig/OiNbXlxcbl0qKS9pLCAvXig/OnRpbWVsaW5lXFxiKS9pLCAvXig/OnRpdGxlXFxzW15cXG5dKykvaSwgL14oPzphY2NUaXRsZVxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccyo6XFxzKikvaSwgL14oPzooPyFcXG58fCkqW15cXG5dKikvaSwgL14oPzphY2NEZXNjclxccypcXHtcXHMqKS9pLCAvXig/OltcXH1dKS9pLCAvXig/OlteXFx9XSopL2ksIC9eKD86c2VjdGlvblxcc1teOlxcbl0rKS9pLCAvXig/OjpcXHNbXjpcXG5dKykvaSwgL14oPzpbXiM6XFxuXSspL2ksIC9eKD86JCkvaSwgL14oPzouKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJhY2NfZGVzY3JfbXVsdGlsaW5lXCI6IHsgXCJydWxlc1wiOiBbMTIsIDEzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfZGVzY3JcIjogeyBcInJ1bGVzXCI6IFsxMF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiYWNjX3RpdGxlXCI6IHsgXCJydWxlc1wiOiBbOF0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDksIDExLCAxNCwgMTUsIDE2LCAxNywgMThdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgdGltZWxpbmVfZGVmYXVsdCA9IHBhcnNlcjtcblxuLy8gc3JjL2RpYWdyYW1zL3RpbWVsaW5lL3RpbWVsaW5lRGIuanNcbnZhciB0aW1lbGluZURiX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHRpbWVsaW5lRGJfZXhwb3J0cywge1xuICBhZGRFdmVudDogKCkgPT4gYWRkRXZlbnQsXG4gIGFkZFNlY3Rpb246ICgpID0+IGFkZFNlY3Rpb24sXG4gIGFkZFRhc2s6ICgpID0+IGFkZFRhc2ssXG4gIGFkZFRhc2tPcmc6ICgpID0+IGFkZFRhc2tPcmcsXG4gIGNsZWFyOiAoKSA9PiBjbGVhcjIsXG4gIGRlZmF1bHQ6ICgpID0+IHRpbWVsaW5lRGJfZGVmYXVsdCxcbiAgZ2V0Q29tbW9uRGI6ICgpID0+IGdldENvbW1vbkRiLFxuICBnZXRTZWN0aW9uczogKCkgPT4gZ2V0U2VjdGlvbnMsXG4gIGdldFRhc2tzOiAoKSA9PiBnZXRUYXNrc1xufSk7XG52YXIgY3VycmVudFNlY3Rpb24gPSBcIlwiO1xudmFyIGN1cnJlbnRUYXNrSWQgPSAwO1xudmFyIHNlY3Rpb25zID0gW107XG52YXIgdGFza3MgPSBbXTtcbnZhciByYXdUYXNrcyA9IFtdO1xudmFyIGdldENvbW1vbkRiID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBjb21tb25EYl9leHBvcnRzLCBcImdldENvbW1vbkRiXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHNlY3Rpb25zLmxlbmd0aCA9IDA7XG4gIHRhc2tzLmxlbmd0aCA9IDA7XG4gIGN1cnJlbnRTZWN0aW9uID0gXCJcIjtcbiAgcmF3VGFza3MubGVuZ3RoID0gMDtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgYWRkU2VjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24odHh0KSB7XG4gIGN1cnJlbnRTZWN0aW9uID0gdHh0O1xuICBzZWN0aW9ucy5wdXNoKHR4dCk7XG59LCBcImFkZFNlY3Rpb25cIik7XG52YXIgZ2V0U2VjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gc2VjdGlvbnM7XG59LCBcImdldFNlY3Rpb25zXCIpO1xudmFyIGdldFRhc2tzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgbGV0IGFsbEl0ZW1zUHJvY2Vzc2VkID0gY29tcGlsZVRhc2tzKCk7XG4gIGNvbnN0IG1heERlcHRoID0gMTAwO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICB3aGlsZSAoIWFsbEl0ZW1zUHJvY2Vzc2VkICYmIGl0ZXJhdGlvbkNvdW50IDwgbWF4RGVwdGgpIHtcbiAgICBhbGxJdGVtc1Byb2Nlc3NlZCA9IGNvbXBpbGVUYXNrcygpO1xuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gIH1cbiAgdGFza3MucHVzaCguLi5yYXdUYXNrcyk7XG4gIHJldHVybiB0YXNrcztcbn0sIFwiZ2V0VGFza3NcIik7XG52YXIgYWRkVGFzayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGVyaW9kLCBsZW5ndGgsIGV2ZW50KSB7XG4gIGNvbnN0IHJhd1Rhc2sgPSB7XG4gICAgaWQ6IGN1cnJlbnRUYXNrSWQrKyxcbiAgICBzZWN0aW9uOiBjdXJyZW50U2VjdGlvbixcbiAgICB0eXBlOiBjdXJyZW50U2VjdGlvbixcbiAgICB0YXNrOiBwZXJpb2QsXG4gICAgc2NvcmU6IGxlbmd0aCA/IGxlbmd0aCA6IDAsXG4gICAgLy9pZiBldmVudCBpcyBkZWZpbmVkLCB0aGVuIGFkZCBpdCB0aGUgZXZlbnRzIGFycmF5XG4gICAgZXZlbnRzOiBldmVudCA/IFtldmVudF0gOiBbXVxuICB9O1xuICByYXdUYXNrcy5wdXNoKHJhd1Rhc2spO1xufSwgXCJhZGRUYXNrXCIpO1xudmFyIGFkZEV2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihldmVudCkge1xuICBjb25zdCBjdXJyZW50VGFzayA9IHJhd1Rhc2tzLmZpbmQoKHRhc2spID0+IHRhc2suaWQgPT09IGN1cnJlbnRUYXNrSWQgLSAxKTtcbiAgY3VycmVudFRhc2suZXZlbnRzLnB1c2goZXZlbnQpO1xufSwgXCJhZGRFdmVudFwiKTtcbnZhciBhZGRUYXNrT3JnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkZXNjcikge1xuICBjb25zdCBuZXdUYXNrID0ge1xuICAgIHNlY3Rpb246IGN1cnJlbnRTZWN0aW9uLFxuICAgIHR5cGU6IGN1cnJlbnRTZWN0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcixcbiAgICB0YXNrOiBkZXNjcixcbiAgICBjbGFzc2VzOiBbXVxuICB9O1xuICB0YXNrcy5wdXNoKG5ld1Rhc2spO1xufSwgXCJhZGRUYXNrT3JnXCIpO1xudmFyIGNvbXBpbGVUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIGNvbnN0IGNvbXBpbGVUYXNrID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihwb3MpIHtcbiAgICByZXR1cm4gcmF3VGFza3NbcG9zXS5wcm9jZXNzZWQ7XG4gIH0sIFwiY29tcGlsZVRhc2tcIik7XG4gIGxldCBhbGxQcm9jZXNzZWQgPSB0cnVlO1xuICBmb3IgKGNvbnN0IFtpLCByYXdUYXNrXSBvZiByYXdUYXNrcy5lbnRyaWVzKCkpIHtcbiAgICBjb21waWxlVGFzayhpKTtcbiAgICBhbGxQcm9jZXNzZWQgPSBhbGxQcm9jZXNzZWQgJiYgcmF3VGFzay5wcm9jZXNzZWQ7XG4gIH1cbiAgcmV0dXJuIGFsbFByb2Nlc3NlZDtcbn0sIFwiY29tcGlsZVRhc2tzXCIpO1xudmFyIHRpbWVsaW5lRGJfZGVmYXVsdCA9IHtcbiAgY2xlYXI6IGNsZWFyMixcbiAgZ2V0Q29tbW9uRGIsXG4gIGFkZFNlY3Rpb24sXG4gIGdldFNlY3Rpb25zLFxuICBnZXRUYXNrcyxcbiAgYWRkVGFzayxcbiAgYWRkVGFza09yZyxcbiAgYWRkRXZlbnRcbn07XG5cbi8vIHNyYy9kaWFncmFtcy90aW1lbGluZS90aW1lbGluZVJlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgYXMgc2VsZWN0MiB9IGZyb20gXCJkM1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvc3ZnRHJhdy5qc1xuaW1wb3J0IHsgYXJjIGFzIGQzYXJjLCBzZWxlY3QgfSBmcm9tIFwiZDNcIjtcbnZhciBNQVhfU0VDVElPTlMgPSAxMjtcbnZhciBkcmF3UmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgcmVjdERhdGEpIHtcbiAgY29uc3QgcmVjdEVsZW0gPSBlbGVtLmFwcGVuZChcInJlY3RcIik7XG4gIHJlY3RFbGVtLmF0dHIoXCJ4XCIsIHJlY3REYXRhLngpO1xuICByZWN0RWxlbS5hdHRyKFwieVwiLCByZWN0RGF0YS55KTtcbiAgcmVjdEVsZW0uYXR0cihcImZpbGxcIiwgcmVjdERhdGEuZmlsbCk7XG4gIHJlY3RFbGVtLmF0dHIoXCJzdHJva2VcIiwgcmVjdERhdGEuc3Ryb2tlKTtcbiAgcmVjdEVsZW0uYXR0cihcIndpZHRoXCIsIHJlY3REYXRhLndpZHRoKTtcbiAgcmVjdEVsZW0uYXR0cihcImhlaWdodFwiLCByZWN0RGF0YS5oZWlnaHQpO1xuICByZWN0RWxlbS5hdHRyKFwicnhcIiwgcmVjdERhdGEucngpO1xuICByZWN0RWxlbS5hdHRyKFwicnlcIiwgcmVjdERhdGEucnkpO1xuICBpZiAocmVjdERhdGEuY2xhc3MgIT09IHZvaWQgMCkge1xuICAgIHJlY3RFbGVtLmF0dHIoXCJjbGFzc1wiLCByZWN0RGF0YS5jbGFzcyk7XG4gIH1cbiAgcmV0dXJuIHJlY3RFbGVtO1xufSwgXCJkcmF3UmVjdFwiKTtcbnZhciBkcmF3RmFjZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbWVudCwgZmFjZURhdGEpIHtcbiAgY29uc3QgcmFkaXVzID0gMTU7XG4gIGNvbnN0IGNpcmNsZUVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZChcImNpcmNsZVwiKS5hdHRyKFwiY3hcIiwgZmFjZURhdGEuY3gpLmF0dHIoXCJjeVwiLCBmYWNlRGF0YS5jeSkuYXR0cihcImNsYXNzXCIsIFwiZmFjZVwiKS5hdHRyKFwiclwiLCByYWRpdXMpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMikuYXR0cihcIm92ZXJmbG93XCIsIFwidmlzaWJsZVwiKTtcbiAgY29uc3QgZmFjZSA9IGVsZW1lbnQuYXBwZW5kKFwiZ1wiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4IC0gcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZmFjZS5hcHBlbmQoXCJjaXJjbGVcIikuYXR0cihcImN4XCIsIGZhY2VEYXRhLmN4ICsgcmFkaXVzIC8gMykuYXR0cihcImN5XCIsIGZhY2VEYXRhLmN5IC0gcmFkaXVzIC8gMykuYXR0cihcInJcIiwgMS41KS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDIpLmF0dHIoXCJmaWxsXCIsIFwiIzY2NlwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgZnVuY3Rpb24gc21pbGUoZmFjZTIpIHtcbiAgICBjb25zdCBhcmMgPSBkM2FyYygpLnN0YXJ0QW5nbGUoTWF0aC5QSSAvIDIpLmVuZEFuZ2xlKDMgKiAoTWF0aC5QSSAvIDIpKS5pbm5lclJhZGl1cyhyYWRpdXMgLyAyKS5vdXRlclJhZGl1cyhyYWRpdXMgLyAyLjIpO1xuICAgIGZhY2UyLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcImRcIiwgYXJjKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgZmFjZURhdGEuY3ggKyBcIixcIiArIChmYWNlRGF0YS5jeSArIDIpICsgXCIpXCIpO1xuICB9XG4gIF9fbmFtZShzbWlsZSwgXCJzbWlsZVwiKTtcbiAgZnVuY3Rpb24gc2FkKGZhY2UyKSB7XG4gICAgY29uc3QgYXJjID0gZDNhcmMoKS5zdGFydEFuZ2xlKDMgKiBNYXRoLlBJIC8gMikuZW5kQW5nbGUoNSAqIChNYXRoLlBJIC8gMikpLmlubmVyUmFkaXVzKHJhZGl1cyAvIDIpLm91dGVyUmFkaXVzKHJhZGl1cyAvIDIuMik7XG4gICAgZmFjZTIuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJtb3V0aFwiKS5hdHRyKFwiZFwiLCBhcmMpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBmYWNlRGF0YS5jeCArIFwiLFwiICsgKGZhY2VEYXRhLmN5ICsgNykgKyBcIilcIik7XG4gIH1cbiAgX19uYW1lKHNhZCwgXCJzYWRcIik7XG4gIGZ1bmN0aW9uIGFtYml2YWxlbnQoZmFjZTIpIHtcbiAgICBmYWNlMi5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm1vdXRoXCIpLmF0dHIoXCJzdHJva2VcIiwgMikuYXR0cihcIngxXCIsIGZhY2VEYXRhLmN4IC0gNSkuYXR0cihcInkxXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcIngyXCIsIGZhY2VEYXRhLmN4ICsgNSkuYXR0cihcInkyXCIsIGZhY2VEYXRhLmN5ICsgNykuYXR0cihcImNsYXNzXCIsIFwibW91dGhcIikuYXR0cihcInN0cm9rZS13aWR0aFwiLCBcIjFweFwiKS5hdHRyKFwic3Ryb2tlXCIsIFwiIzY2NlwiKTtcbiAgfVxuICBfX25hbWUoYW1iaXZhbGVudCwgXCJhbWJpdmFsZW50XCIpO1xuICBpZiAoZmFjZURhdGEuc2NvcmUgPiAzKSB7XG4gICAgc21pbGUoZmFjZSk7XG4gIH0gZWxzZSBpZiAoZmFjZURhdGEuc2NvcmUgPCAzKSB7XG4gICAgc2FkKGZhY2UpO1xuICB9IGVsc2Uge1xuICAgIGFtYml2YWxlbnQoZmFjZSk7XG4gIH1cbiAgcmV0dXJuIGNpcmNsZUVsZW1lbnQ7XG59LCBcImRyYXdGYWNlXCIpO1xudmFyIGRyYXdDaXJjbGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW1lbnQsIGNpcmNsZURhdGEpIHtcbiAgY29uc3QgY2lyY2xlRWxlbWVudCA9IGVsZW1lbnQuYXBwZW5kKFwiY2lyY2xlXCIpO1xuICBjaXJjbGVFbGVtZW50LmF0dHIoXCJjeFwiLCBjaXJjbGVEYXRhLmN4KTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY3lcIiwgY2lyY2xlRGF0YS5jeSk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImNsYXNzXCIsIFwiYWN0b3ItXCIgKyBjaXJjbGVEYXRhLnBvcyk7XG4gIGNpcmNsZUVsZW1lbnQuYXR0cihcImZpbGxcIiwgY2lyY2xlRGF0YS5maWxsKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwic3Ryb2tlXCIsIGNpcmNsZURhdGEuc3Ryb2tlKTtcbiAgY2lyY2xlRWxlbWVudC5hdHRyKFwiclwiLCBjaXJjbGVEYXRhLnIpO1xuICBpZiAoY2lyY2xlRWxlbWVudC5jbGFzcyAhPT0gdm9pZCAwKSB7XG4gICAgY2lyY2xlRWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgY2lyY2xlRWxlbWVudC5jbGFzcyk7XG4gIH1cbiAgaWYgKGNpcmNsZURhdGEudGl0bGUgIT09IHZvaWQgMCkge1xuICAgIGNpcmNsZUVsZW1lbnQuYXBwZW5kKFwidGl0bGVcIikudGV4dChjaXJjbGVEYXRhLnRpdGxlKTtcbiAgfVxuICByZXR1cm4gY2lyY2xlRWxlbWVudDtcbn0sIFwiZHJhd0NpcmNsZVwiKTtcbnZhciBkcmF3VGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdGV4dERhdGEpIHtcbiAgY29uc3QgblRleHQgPSB0ZXh0RGF0YS50ZXh0LnJlcGxhY2UoLzxiclxccypcXC8/Pi9naSwgXCIgXCIpO1xuICBjb25zdCB0ZXh0RWxlbSA9IGVsZW0uYXBwZW5kKFwidGV4dFwiKTtcbiAgdGV4dEVsZW0uYXR0cihcInhcIiwgdGV4dERhdGEueCk7XG4gIHRleHRFbGVtLmF0dHIoXCJ5XCIsIHRleHREYXRhLnkpO1xuICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJsZWdlbmRcIik7XG4gIHRleHRFbGVtLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgdGV4dERhdGEuYW5jaG9yKTtcbiAgaWYgKHRleHREYXRhLmNsYXNzICE9PSB2b2lkIDApIHtcbiAgICB0ZXh0RWxlbS5hdHRyKFwiY2xhc3NcIiwgdGV4dERhdGEuY2xhc3MpO1xuICB9XG4gIGNvbnN0IHNwYW4gPSB0ZXh0RWxlbS5hcHBlbmQoXCJ0c3BhblwiKTtcbiAgc3Bhbi5hdHRyKFwieFwiLCB0ZXh0RGF0YS54ICsgdGV4dERhdGEudGV4dE1hcmdpbiAqIDIpO1xuICBzcGFuLnRleHQoblRleHQpO1xuICByZXR1cm4gdGV4dEVsZW07XG59LCBcImRyYXdUZXh0XCIpO1xudmFyIGRyYXdMYWJlbCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdHh0T2JqZWN0KSB7XG4gIGZ1bmN0aW9uIGdlblBvaW50cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjdXQpIHtcbiAgICByZXR1cm4geCArIFwiLFwiICsgeSArIFwiIFwiICsgKHggKyB3aWR0aCkgKyBcIixcIiArIHkgKyBcIiBcIiArICh4ICsgd2lkdGgpICsgXCIsXCIgKyAoeSArIGhlaWdodCAtIGN1dCkgKyBcIiBcIiArICh4ICsgd2lkdGggLSBjdXQgKiAxLjIpICsgXCIsXCIgKyAoeSArIGhlaWdodCkgKyBcIiBcIiArIHggKyBcIixcIiArICh5ICsgaGVpZ2h0KTtcbiAgfVxuICBfX25hbWUoZ2VuUG9pbnRzLCBcImdlblBvaW50c1wiKTtcbiAgY29uc3QgcG9seWdvbiA9IGVsZW0uYXBwZW5kKFwicG9seWdvblwiKTtcbiAgcG9seWdvbi5hdHRyKFwicG9pbnRzXCIsIGdlblBvaW50cyh0eHRPYmplY3QueCwgdHh0T2JqZWN0LnksIDUwLCAyMCwgNykpO1xuICBwb2x5Z29uLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsQm94XCIpO1xuICB0eHRPYmplY3QueSA9IHR4dE9iamVjdC55ICsgdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICB0eHRPYmplY3QueCA9IHR4dE9iamVjdC54ICsgMC41ICogdHh0T2JqZWN0LmxhYmVsTWFyZ2luO1xuICBkcmF3VGV4dChlbGVtLCB0eHRPYmplY3QpO1xufSwgXCJkcmF3TGFiZWxcIik7XG52YXIgZHJhd1NlY3Rpb24gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIHNlY3Rpb24sIGNvbmYpIHtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgcmVjdCA9IGdldE5vdGVSZWN0KCk7XG4gIHJlY3QueCA9IHNlY3Rpb24ueDtcbiAgcmVjdC55ID0gc2VjdGlvbi55O1xuICByZWN0LmZpbGwgPSBzZWN0aW9uLmZpbGw7XG4gIHJlY3Qud2lkdGggPSBjb25mLndpZHRoO1xuICByZWN0LmhlaWdodCA9IGNvbmYuaGVpZ2h0O1xuICByZWN0LmNsYXNzID0gXCJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLVwiICsgc2VjdGlvbi5udW07XG4gIHJlY3QucnggPSAzO1xuICByZWN0LnJ5ID0gMztcbiAgZHJhd1JlY3QoZywgcmVjdCk7XG4gIF9kcmF3VGV4dENhbmRpZGF0ZUZ1bmMoY29uZikoXG4gICAgc2VjdGlvbi50ZXh0LFxuICAgIGcsXG4gICAgcmVjdC54LFxuICAgIHJlY3QueSxcbiAgICByZWN0LndpZHRoLFxuICAgIHJlY3QuaGVpZ2h0LFxuICAgIHsgY2xhc3M6IFwiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS1cIiArIHNlY3Rpb24ubnVtIH0sXG4gICAgY29uZixcbiAgICBzZWN0aW9uLmNvbG91clxuICApO1xufSwgXCJkcmF3U2VjdGlvblwiKTtcbnZhciB0YXNrQ291bnQgPSAtMTtcbnZhciBkcmF3VGFzayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgdGFzaywgY29uZikge1xuICBjb25zdCBjZW50ZXIgPSB0YXNrLnggKyBjb25mLndpZHRoIC8gMjtcbiAgY29uc3QgZyA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgdGFza0NvdW50Kys7XG4gIGNvbnN0IG1heEhlaWdodCA9IDMwMCArIDUgKiAzMDtcbiAgZy5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJpZFwiLCBcInRhc2tcIiArIHRhc2tDb3VudCkuYXR0cihcIngxXCIsIGNlbnRlcikuYXR0cihcInkxXCIsIHRhc2sueSkuYXR0cihcIngyXCIsIGNlbnRlcikuYXR0cihcInkyXCIsIG1heEhlaWdodCkuYXR0cihcImNsYXNzXCIsIFwidGFzay1saW5lXCIpLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgXCIxcHhcIikuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCI0IDJcIikuYXR0cihcInN0cm9rZVwiLCBcIiM2NjZcIik7XG4gIGRyYXdGYWNlKGcsIHtcbiAgICBjeDogY2VudGVyLFxuICAgIGN5OiAzMDAgKyAoNSAtIHRhc2suc2NvcmUpICogMzAsXG4gICAgc2NvcmU6IHRhc2suc2NvcmVcbiAgfSk7XG4gIGNvbnN0IHJlY3QgPSBnZXROb3RlUmVjdCgpO1xuICByZWN0LnggPSB0YXNrLng7XG4gIHJlY3QueSA9IHRhc2sueTtcbiAgcmVjdC5maWxsID0gdGFzay5maWxsO1xuICByZWN0LndpZHRoID0gY29uZi53aWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBjb25mLmhlaWdodDtcbiAgcmVjdC5jbGFzcyA9IFwidGFzayB0YXNrLXR5cGUtXCIgKyB0YXNrLm51bTtcbiAgcmVjdC5yeCA9IDM7XG4gIHJlY3QucnkgPSAzO1xuICBkcmF3UmVjdChnLCByZWN0KTtcbiAgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyhjb25mKShcbiAgICB0YXNrLnRhc2ssXG4gICAgZyxcbiAgICByZWN0LngsXG4gICAgcmVjdC55LFxuICAgIHJlY3Qud2lkdGgsXG4gICAgcmVjdC5oZWlnaHQsXG4gICAgeyBjbGFzczogXCJ0YXNrXCIgfSxcbiAgICBjb25mLFxuICAgIHRhc2suY29sb3VyXG4gICk7XG59LCBcImRyYXdUYXNrXCIpO1xudmFyIGRyYXdCYWNrZ3JvdW5kUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZWxlbSwgYm91bmRzKSB7XG4gIGNvbnN0IHJlY3RFbGVtID0gZHJhd1JlY3QoZWxlbSwge1xuICAgIHg6IGJvdW5kcy5zdGFydHgsXG4gICAgeTogYm91bmRzLnN0YXJ0eSxcbiAgICB3aWR0aDogYm91bmRzLnN0b3B4IC0gYm91bmRzLnN0YXJ0eCxcbiAgICBoZWlnaHQ6IGJvdW5kcy5zdG9weSAtIGJvdW5kcy5zdGFydHksXG4gICAgZmlsbDogYm91bmRzLmZpbGwsXG4gICAgY2xhc3M6IFwicmVjdFwiXG4gIH0pO1xuICByZWN0RWxlbS5sb3dlcigpO1xufSwgXCJkcmF3QmFja2dyb3VuZFJlY3RcIik7XG52YXIgZ2V0VGV4dE9iaiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIGZpbGw6IHZvaWQgMCxcbiAgICBcInRleHQtYW5jaG9yXCI6IFwic3RhcnRcIixcbiAgICB3aWR0aDogMTAwLFxuICAgIGhlaWdodDogMTAwLFxuICAgIHRleHRNYXJnaW46IDAsXG4gICAgcng6IDAsXG4gICAgcnk6IDBcbiAgfTtcbn0sIFwiZ2V0VGV4dE9ialwiKTtcbnZhciBnZXROb3RlUmVjdCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHdpZHRoOiAxMDAsXG4gICAgYW5jaG9yOiBcInN0YXJ0XCIsXG4gICAgaGVpZ2h0OiAxMDAsXG4gICAgcng6IDAsXG4gICAgcnk6IDBcbiAgfTtcbn0sIFwiZ2V0Tm90ZVJlY3RcIik7XG52YXIgX2RyYXdUZXh0Q2FuZGlkYXRlRnVuYyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYnlUZXh0KGNvbnRlbnQsIGcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29sb3VyKSB7XG4gICAgY29uc3QgdGV4dCA9IGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMiArIDUpLnN0eWxlKFwiZm9udC1jb2xvclwiLCBjb2xvdXIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBfc2V0VGV4dEF0dHJzKHRleHQsIHRleHRBdHRycyk7XG4gIH1cbiAgX19uYW1lKGJ5VGV4dCwgXCJieVRleHRcIik7XG4gIGZ1bmN0aW9uIGJ5VHNwYW4oY29udGVudCwgZywgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dEF0dHJzLCBjb25mLCBjb2xvdXIpIHtcbiAgICBjb25zdCB7IHRhc2tGb250U2l6ZSwgdGFza0ZvbnRGYW1pbHkgfSA9IGNvbmY7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC88YnJcXHMqXFwvPz4vZ2kpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGR5ID0gaSAqIHRhc2tGb250U2l6ZSAtIHRhc2tGb250U2l6ZSAqIChsaW5lcy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICBjb25zdCB0ZXh0ID0gZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIHggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHkpLmF0dHIoXCJmaWxsXCIsIGNvbG91cikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5zdHlsZShcImZvbnQtc2l6ZVwiLCB0YXNrRm9udFNpemUpLnN0eWxlKFwiZm9udC1mYW1pbHlcIiwgdGFza0ZvbnRGYW1pbHkpO1xuICAgICAgdGV4dC5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCB4ICsgd2lkdGggLyAyKS5hdHRyKFwiZHlcIiwgZHkpLnRleHQobGluZXNbaV0pO1xuICAgICAgdGV4dC5hdHRyKFwieVwiLCB5ICsgaGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiY2VudHJhbFwiKTtcbiAgICAgIF9zZXRUZXh0QXR0cnModGV4dCwgdGV4dEF0dHJzKTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGJ5VHNwYW4sIFwiYnlUc3BhblwiKTtcbiAgZnVuY3Rpb24gYnlGbyhjb250ZW50LCBnLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXh0QXR0cnMsIGNvbmYpIHtcbiAgICBjb25zdCBib2R5ID0gZy5hcHBlbmQoXCJzd2l0Y2hcIik7XG4gICAgY29uc3QgZiA9IGJvZHkuYXBwZW5kKFwiZm9yZWlnbk9iamVjdFwiKS5hdHRyKFwieFwiLCB4KS5hdHRyKFwieVwiLCB5KS5hdHRyKFwid2lkdGhcIiwgd2lkdGgpLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KS5hdHRyKFwicG9zaXRpb25cIiwgXCJmaXhlZFwiKTtcbiAgICBjb25zdCB0ZXh0ID0gZi5hcHBlbmQoXCJ4aHRtbDpkaXZcIikuc3R5bGUoXCJkaXNwbGF5XCIsIFwidGFibGVcIikuc3R5bGUoXCJoZWlnaHRcIiwgXCIxMDAlXCIpLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHRleHQuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcImxhYmVsXCIpLnN0eWxlKFwiZGlzcGxheVwiLCBcInRhYmxlLWNlbGxcIikuc3R5bGUoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpLnN0eWxlKFwidmVydGljYWwtYWxpZ25cIiwgXCJtaWRkbGVcIikudGV4dChjb250ZW50KTtcbiAgICBieVRzcGFuKGNvbnRlbnQsIGJvZHksIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRBdHRycywgY29uZik7XG4gICAgX3NldFRleHRBdHRycyh0ZXh0LCB0ZXh0QXR0cnMpO1xuICB9XG4gIF9fbmFtZShieUZvLCBcImJ5Rm9cIik7XG4gIGZ1bmN0aW9uIF9zZXRUZXh0QXR0cnModG9UZXh0LCBmcm9tVGV4dEF0dHJzRGljdCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgICBpZiAoa2V5IGluIGZyb21UZXh0QXR0cnNEaWN0KSB7XG4gICAgICAgIHRvVGV4dC5hdHRyKGtleSwgZnJvbVRleHRBdHRyc0RpY3Rba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9fbmFtZShfc2V0VGV4dEF0dHJzLCBcIl9zZXRUZXh0QXR0cnNcIik7XG4gIHJldHVybiBmdW5jdGlvbihjb25mKSB7XG4gICAgcmV0dXJuIGNvbmYudGV4dFBsYWNlbWVudCA9PT0gXCJmb1wiID8gYnlGbyA6IGNvbmYudGV4dFBsYWNlbWVudCA9PT0gXCJvbGRcIiA/IGJ5VGV4dCA6IGJ5VHNwYW47XG4gIH07XG59KCk7XG52YXIgaW5pdEdyYXBoaWNzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihncmFwaGljcykge1xuICBncmFwaGljcy5hcHBlbmQoXCJkZWZzXCIpLmFwcGVuZChcIm1hcmtlclwiKS5hdHRyKFwiaWRcIiwgXCJhcnJvd2hlYWRcIikuYXR0cihcInJlZlhcIiwgNSkuYXR0cihcInJlZllcIiwgMikuYXR0cihcIm1hcmtlcldpZHRoXCIsIDYpLmF0dHIoXCJtYXJrZXJIZWlnaHRcIiwgNCkuYXR0cihcIm9yaWVudFwiLCBcImF1dG9cIikuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiZFwiLCBcIk0gMCwwIFYgNCBMNiwyIFpcIik7XG59LCBcImluaXRHcmFwaGljc1wiKTtcbmZ1bmN0aW9uIHdyYXAodGV4dCwgd2lkdGgpIHtcbiAgdGV4dC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ZXh0MiA9IHNlbGVjdCh0aGlzKSwgd29yZHMgPSB0ZXh0Mi50ZXh0KCkuc3BsaXQoLyhcXHMrfDxicj4pLykucmV2ZXJzZSgpLCB3b3JkLCBsaW5lID0gW10sIGxpbmVIZWlnaHQgPSAxLjEsIHkgPSB0ZXh0Mi5hdHRyKFwieVwiKSwgZHkgPSBwYXJzZUZsb2F0KHRleHQyLmF0dHIoXCJkeVwiKSksIHRzcGFuID0gdGV4dDIudGV4dChudWxsKS5hcHBlbmQoXCJ0c3BhblwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCB5KS5hdHRyKFwiZHlcIiwgZHkgKyBcImVtXCIpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgd29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHdvcmQgPSB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxIC0gal07XG4gICAgICBsaW5lLnB1c2god29yZCk7XG4gICAgICB0c3Bhbi50ZXh0KGxpbmUuam9pbihcIiBcIikudHJpbSgpKTtcbiAgICAgIGlmICh0c3Bhbi5ub2RlKCkuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgPiB3aWR0aCB8fCB3b3JkID09PSBcIjxicj5cIikge1xuICAgICAgICBsaW5lLnBvcCgpO1xuICAgICAgICB0c3Bhbi50ZXh0KGxpbmUuam9pbihcIiBcIikudHJpbSgpKTtcbiAgICAgICAgaWYgKHdvcmQgPT09IFwiPGJyPlwiKSB7XG4gICAgICAgICAgbGluZSA9IFtcIlwiXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lID0gW3dvcmRdO1xuICAgICAgICB9XG4gICAgICAgIHRzcGFuID0gdGV4dDIuYXBwZW5kKFwidHNwYW5cIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgeSkuYXR0cihcImR5XCIsIGxpbmVIZWlnaHQgKyBcImVtXCIpLnRleHQod29yZCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbl9fbmFtZSh3cmFwLCBcIndyYXBcIik7XG52YXIgZHJhd05vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIG5vZGUsIGZ1bGxTZWN0aW9uLCBjb25mKSB7XG4gIGNvbnN0IHNlY3Rpb24gPSBmdWxsU2VjdGlvbiAlIE1BWF9TRUNUSU9OUyAtIDE7XG4gIGNvbnN0IG5vZGVFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBub2RlLnNlY3Rpb24gPSBzZWN0aW9uO1xuICBub2RlRWxlbS5hdHRyKFxuICAgIFwiY2xhc3NcIixcbiAgICAobm9kZS5jbGFzcyA/IG5vZGUuY2xhc3MgKyBcIiBcIiA6IFwiXCIpICsgXCJ0aW1lbGluZS1ub2RlIFwiICsgKFwic2VjdGlvbi1cIiArIHNlY3Rpb24pXG4gICk7XG4gIGNvbnN0IGJrZ0VsZW0gPSBub2RlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB0ZXh0RWxlbSA9IG5vZGVFbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHR4dCA9IHRleHRFbGVtLmFwcGVuZChcInRleHRcIikudGV4dChub2RlLmRlc2NyKS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmNhbGwod3JhcCwgbm9kZS53aWR0aCk7XG4gIGNvbnN0IGJib3ggPSB0eHQubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3QgZm9udFNpemUgPSBjb25mLmZvbnRTaXplPy5yZXBsYWNlID8gY29uZi5mb250U2l6ZS5yZXBsYWNlKFwicHhcIiwgXCJcIikgOiBjb25mLmZvbnRTaXplO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0ICsgZm9udFNpemUgKiAxLjEgKiAwLjUgKyBub2RlLnBhZGRpbmc7XG4gIG5vZGUuaGVpZ2h0ID0gTWF0aC5tYXgobm9kZS5oZWlnaHQsIG5vZGUubWF4SGVpZ2h0KTtcbiAgbm9kZS53aWR0aCA9IG5vZGUud2lkdGggKyAyICogbm9kZS5wYWRkaW5nO1xuICB0ZXh0RWxlbS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbm9kZS53aWR0aCAvIDIgKyBcIiwgXCIgKyBub2RlLnBhZGRpbmcgLyAyICsgXCIpXCIpO1xuICBkZWZhdWx0QmtnKGJrZ0VsZW0sIG5vZGUsIHNlY3Rpb24sIGNvbmYpO1xuICByZXR1cm4gbm9kZTtcbn0sIFwiZHJhd05vZGVcIik7XG52YXIgZ2V0VmlydHVhbE5vZGVIZWlnaHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIG5vZGUsIGNvbmYpIHtcbiAgY29uc3QgdGV4dEVsZW0gPSBlbGVtLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHR4dCA9IHRleHRFbGVtLmFwcGVuZChcInRleHRcIikudGV4dChub2RlLmRlc2NyKS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpLmNhbGwod3JhcCwgbm9kZS53aWR0aCk7XG4gIGNvbnN0IGJib3ggPSB0eHQubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3QgZm9udFNpemUgPSBjb25mLmZvbnRTaXplPy5yZXBsYWNlID8gY29uZi5mb250U2l6ZS5yZXBsYWNlKFwicHhcIiwgXCJcIikgOiBjb25mLmZvbnRTaXplO1xuICB0ZXh0RWxlbS5yZW1vdmUoKTtcbiAgcmV0dXJuIGJib3guaGVpZ2h0ICsgZm9udFNpemUgKiAxLjEgKiAwLjUgKyBub2RlLnBhZGRpbmc7XG59LCBcImdldFZpcnR1YWxOb2RlSGVpZ2h0XCIpO1xudmFyIGRlZmF1bHRCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGVsZW0sIG5vZGUsIHNlY3Rpb24pIHtcbiAgY29uc3QgcmQgPSA1O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBub2RlLnR5cGUpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgYE0wICR7bm9kZS5oZWlnaHQgLSByZH0gdiR7LW5vZGUuaGVpZ2h0ICsgMiAqIHJkfSBxMCwtNSA1LC01IGgke25vZGUud2lkdGggLSAyICogcmR9IHE1LDAgNSw1IHYke25vZGUuaGVpZ2h0IC0gcmR9IEgwIFpgXG4gICk7XG4gIGVsZW0uYXBwZW5kKFwibGluZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWxpbmUtXCIgKyBzZWN0aW9uKS5hdHRyKFwieDFcIiwgMCkuYXR0cihcInkxXCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwieDJcIiwgbm9kZS53aWR0aCkuYXR0cihcInkyXCIsIG5vZGUuaGVpZ2h0KTtcbn0sIFwiZGVmYXVsdEJrZ1wiKTtcbnZhciBzdmdEcmF3X2RlZmF1bHQgPSB7XG4gIGRyYXdSZWN0LFxuICBkcmF3Q2lyY2xlLFxuICBkcmF3U2VjdGlvbixcbiAgZHJhd1RleHQsXG4gIGRyYXdMYWJlbCxcbiAgZHJhd1Rhc2ssXG4gIGRyYXdCYWNrZ3JvdW5kUmVjdCxcbiAgZ2V0VGV4dE9iaixcbiAgZ2V0Tm90ZVJlY3QsXG4gIGluaXRHcmFwaGljcyxcbiAgZHJhd05vZGUsXG4gIGdldFZpcnR1YWxOb2RlSGVpZ2h0XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvdGltZWxpbmVSZW5kZXJlci50c1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGlkLCB2ZXJzaW9uLCBkaWFnT2JqKSB7XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgTEVGVF9NQVJHSU4gPSBjb25mLmxlZnRNYXJnaW4gPz8gNTA7XG4gIGxvZy5kZWJ1ZyhcInRpbWVsaW5lXCIsIGRpYWdPYmouZGIpO1xuICBjb25zdCBzZWN1cml0eUxldmVsID0gY29uZi5zZWN1cml0eUxldmVsO1xuICBsZXQgc2FuZGJveEVsZW1lbnQ7XG4gIGlmIChzZWN1cml0eUxldmVsID09PSBcInNhbmRib3hcIikge1xuICAgIHNhbmRib3hFbGVtZW50ID0gc2VsZWN0MihcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gc2VsZWN0MihzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IHNlbGVjdDIoXCJib2R5XCIpO1xuICBjb25zdCBzdmcgPSByb290LnNlbGVjdChcIiNcIiArIGlkKTtcbiAgc3ZnLmFwcGVuZChcImdcIik7XG4gIGNvbnN0IHRhc2tzMiA9IGRpYWdPYmouZGIuZ2V0VGFza3MoKTtcbiAgY29uc3QgdGl0bGUgPSBkaWFnT2JqLmRiLmdldENvbW1vbkRiKCkuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGxvZy5kZWJ1ZyhcInRhc2tcIiwgdGFza3MyKTtcbiAgc3ZnRHJhd19kZWZhdWx0LmluaXRHcmFwaGljcyhzdmcpO1xuICBjb25zdCBzZWN0aW9uczIgPSBkaWFnT2JqLmRiLmdldFNlY3Rpb25zKCk7XG4gIGxvZy5kZWJ1ZyhcInNlY3Rpb25zXCIsIHNlY3Rpb25zMik7XG4gIGxldCBtYXhTZWN0aW9uSGVpZ2h0ID0gMDtcbiAgbGV0IG1heFRhc2tIZWlnaHQgPSAwO1xuICBsZXQgZGVwdGhZID0gMDtcbiAgbGV0IHNlY3Rpb25CZWdpblkgPSAwO1xuICBsZXQgbWFzdGVyWCA9IDUwICsgTEVGVF9NQVJHSU47XG4gIGxldCBtYXN0ZXJZID0gNTA7XG4gIHNlY3Rpb25CZWdpblkgPSA1MDtcbiAgbGV0IHNlY3Rpb25OdW1iZXIgPSAwO1xuICBsZXQgaGFzU2VjdGlvbnMgPSB0cnVlO1xuICBzZWN0aW9uczIuZm9yRWFjaChmdW5jdGlvbihzZWN0aW9uKSB7XG4gICAgY29uc3Qgc2VjdGlvbk5vZGUgPSB7XG4gICAgICBudW1iZXI6IHNlY3Rpb25OdW1iZXIsXG4gICAgICBkZXNjcjogc2VjdGlvbixcbiAgICAgIHNlY3Rpb246IHNlY3Rpb25OdW1iZXIsXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IG1heFNlY3Rpb25IZWlnaHRcbiAgICB9O1xuICAgIGNvbnN0IHNlY3Rpb25IZWlnaHQgPSBzdmdEcmF3X2RlZmF1bHQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCBzZWN0aW9uTm9kZSwgY29uZik7XG4gICAgbG9nLmRlYnVnKFwic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhd1wiLCBzZWN0aW9uSGVpZ2h0KTtcbiAgICBtYXhTZWN0aW9uSGVpZ2h0ID0gTWF0aC5tYXgobWF4U2VjdGlvbkhlaWdodCwgc2VjdGlvbkhlaWdodCArIDIwKTtcbiAgfSk7XG4gIGxldCBtYXhFdmVudENvdW50ID0gMDtcbiAgbGV0IG1heEV2ZW50TGluZUxlbmd0aCA9IDA7XG4gIGxvZy5kZWJ1ZyhcInRhc2tzLmxlbmd0aFwiLCB0YXNrczIubGVuZ3RoKTtcbiAgZm9yIChjb25zdCBbaSwgdGFza10gb2YgdGFza3MyLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHRhc2tOb2RlID0ge1xuICAgICAgbnVtYmVyOiBpLFxuICAgICAgZGVzY3I6IHRhc2ssXG4gICAgICBzZWN0aW9uOiB0YXNrLnNlY3Rpb24sXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IG1heFRhc2tIZWlnaHRcbiAgICB9O1xuICAgIGNvbnN0IHRhc2tIZWlnaHQgPSBzdmdEcmF3X2RlZmF1bHQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCB0YXNrTm9kZSwgY29uZik7XG4gICAgbG9nLmRlYnVnKFwidGFza0hlaWdodCBiZWZvcmUgZHJhd1wiLCB0YXNrSGVpZ2h0KTtcbiAgICBtYXhUYXNrSGVpZ2h0ID0gTWF0aC5tYXgobWF4VGFza0hlaWdodCwgdGFza0hlaWdodCArIDIwKTtcbiAgICBtYXhFdmVudENvdW50ID0gTWF0aC5tYXgobWF4RXZlbnRDb3VudCwgdGFzay5ldmVudHMubGVuZ3RoKTtcbiAgICBsZXQgbWF4RXZlbnRMaW5lTGVuZ3RoVGVtcCA9IDA7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiB0YXNrLmV2ZW50cykge1xuICAgICAgY29uc3QgZXZlbnROb2RlID0ge1xuICAgICAgICBkZXNjcjogZXZlbnQsXG4gICAgICAgIHNlY3Rpb246IHRhc2suc2VjdGlvbixcbiAgICAgICAgbnVtYmVyOiB0YXNrLnNlY3Rpb24sXG4gICAgICAgIHdpZHRoOiAxNTAsXG4gICAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgICBtYXhIZWlnaHQ6IDUwXG4gICAgICB9O1xuICAgICAgbWF4RXZlbnRMaW5lTGVuZ3RoVGVtcCArPSBzdmdEcmF3X2RlZmF1bHQuZ2V0VmlydHVhbE5vZGVIZWlnaHQoc3ZnLCBldmVudE5vZGUsIGNvbmYpO1xuICAgIH1cbiAgICBtYXhFdmVudExpbmVMZW5ndGggPSBNYXRoLm1heChtYXhFdmVudExpbmVMZW5ndGgsIG1heEV2ZW50TGluZUxlbmd0aFRlbXApO1xuICB9XG4gIGxvZy5kZWJ1ZyhcIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXdcIiwgbWF4U2VjdGlvbkhlaWdodCk7XG4gIGxvZy5kZWJ1ZyhcIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXdcIiwgbWF4VGFza0hlaWdodCk7XG4gIGlmIChzZWN0aW9uczIgJiYgc2VjdGlvbnMyLmxlbmd0aCA+IDApIHtcbiAgICBzZWN0aW9uczIuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgY29uc3QgdGFza3NGb3JTZWN0aW9uID0gdGFza3MyLmZpbHRlcigodGFzaykgPT4gdGFzay5zZWN0aW9uID09PSBzZWN0aW9uKTtcbiAgICAgIGNvbnN0IHNlY3Rpb25Ob2RlID0ge1xuICAgICAgICBudW1iZXI6IHNlY3Rpb25OdW1iZXIsXG4gICAgICAgIGRlc2NyOiBzZWN0aW9uLFxuICAgICAgICBzZWN0aW9uOiBzZWN0aW9uTnVtYmVyLFxuICAgICAgICB3aWR0aDogMjAwICogTWF0aC5tYXgodGFza3NGb3JTZWN0aW9uLmxlbmd0aCwgMSkgLSA1MCxcbiAgICAgICAgcGFkZGluZzogMjAsXG4gICAgICAgIG1heEhlaWdodDogbWF4U2VjdGlvbkhlaWdodFxuICAgICAgfTtcbiAgICAgIGxvZy5kZWJ1ZyhcInNlY3Rpb25Ob2RlXCIsIHNlY3Rpb25Ob2RlKTtcbiAgICAgIGNvbnN0IHNlY3Rpb25Ob2RlV3JhcHBlciA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICAgICAgY29uc3Qgbm9kZSA9IHN2Z0RyYXdfZGVmYXVsdC5kcmF3Tm9kZShzZWN0aW9uTm9kZVdyYXBwZXIsIHNlY3Rpb25Ob2RlLCBzZWN0aW9uTnVtYmVyLCBjb25mKTtcbiAgICAgIGxvZy5kZWJ1ZyhcInNlY3Rpb25Ob2RlIG91dHB1dFwiLCBub2RlKTtcbiAgICAgIHNlY3Rpb25Ob2RlV3JhcHBlci5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHttYXN0ZXJYfSwgJHtzZWN0aW9uQmVnaW5ZfSlgKTtcbiAgICAgIG1hc3RlclkgKz0gbWF4U2VjdGlvbkhlaWdodCArIDUwO1xuICAgICAgaWYgKHRhc2tzRm9yU2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRyYXdUYXNrcyhcbiAgICAgICAgICBzdmcsXG4gICAgICAgICAgdGFza3NGb3JTZWN0aW9uLFxuICAgICAgICAgIHNlY3Rpb25OdW1iZXIsXG4gICAgICAgICAgbWFzdGVyWCxcbiAgICAgICAgICBtYXN0ZXJZLFxuICAgICAgICAgIG1heFRhc2tIZWlnaHQsXG4gICAgICAgICAgY29uZixcbiAgICAgICAgICBtYXhFdmVudENvdW50LFxuICAgICAgICAgIG1heEV2ZW50TGluZUxlbmd0aCxcbiAgICAgICAgICBtYXhTZWN0aW9uSGVpZ2h0LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBtYXN0ZXJYICs9IDIwMCAqIE1hdGgubWF4KHRhc2tzRm9yU2VjdGlvbi5sZW5ndGgsIDEpO1xuICAgICAgbWFzdGVyWSA9IHNlY3Rpb25CZWdpblk7XG4gICAgICBzZWN0aW9uTnVtYmVyKys7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaGFzU2VjdGlvbnMgPSBmYWxzZTtcbiAgICBkcmF3VGFza3MoXG4gICAgICBzdmcsXG4gICAgICB0YXNrczIsXG4gICAgICBzZWN0aW9uTnVtYmVyLFxuICAgICAgbWFzdGVyWCxcbiAgICAgIG1hc3RlclksXG4gICAgICBtYXhUYXNrSGVpZ2h0LFxuICAgICAgY29uZixcbiAgICAgIG1heEV2ZW50Q291bnQsXG4gICAgICBtYXhFdmVudExpbmVMZW5ndGgsXG4gICAgICBtYXhTZWN0aW9uSGVpZ2h0LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cbiAgY29uc3QgYm94ID0gc3ZnLm5vZGUoKS5nZXRCQm94KCk7XG4gIGxvZy5kZWJ1ZyhcImJvdW5kc1wiLCBib3gpO1xuICBpZiAodGl0bGUpIHtcbiAgICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCBib3gud2lkdGggLyAyIC0gTEVGVF9NQVJHSU4pLmF0dHIoXCJmb250LXNpemVcIiwgXCI0ZXhcIikuYXR0cihcImZvbnQtd2VpZ2h0XCIsIFwiYm9sZFwiKS5hdHRyKFwieVwiLCAyMCk7XG4gIH1cbiAgZGVwdGhZID0gaGFzU2VjdGlvbnMgPyBtYXhTZWN0aW9uSGVpZ2h0ICsgbWF4VGFza0hlaWdodCArIDE1MCA6IG1heFRhc2tIZWlnaHQgKyAxMDA7XG4gIGNvbnN0IGxpbmVXcmFwcGVyID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGluZVdyYXBwZXJcIik7XG4gIGxpbmVXcmFwcGVyLmFwcGVuZChcImxpbmVcIikuYXR0cihcIngxXCIsIExFRlRfTUFSR0lOKS5hdHRyKFwieTFcIiwgZGVwdGhZKS5hdHRyKFwieDJcIiwgYm94LndpZHRoICsgMyAqIExFRlRfTUFSR0lOKS5hdHRyKFwieTJcIiwgZGVwdGhZKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDQpLmF0dHIoXCJzdHJva2VcIiwgXCJibGFja1wiKS5hdHRyKFwibWFya2VyLWVuZFwiLCBcInVybCgjYXJyb3doZWFkKVwiKTtcbiAgc2V0dXBHcmFwaFZpZXdib3goXG4gICAgdm9pZCAwLFxuICAgIHN2ZyxcbiAgICBjb25mLnRpbWVsaW5lPy5wYWRkaW5nID8/IDUwLFxuICAgIGNvbmYudGltZWxpbmU/LnVzZU1heFdpZHRoID8/IGZhbHNlXG4gICk7XG59LCBcImRyYXdcIik7XG52YXIgZHJhd1Rhc2tzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkaWFncmFtMiwgdGFza3MyLCBzZWN0aW9uQ29sb3IsIG1hc3RlclgsIG1hc3RlclksIG1heFRhc2tIZWlnaHQsIGNvbmYsIG1heEV2ZW50Q291bnQsIG1heEV2ZW50TGluZUxlbmd0aCwgbWF4U2VjdGlvbkhlaWdodCwgaXNXaXRob3V0U2VjdGlvbnMpIHtcbiAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzMikge1xuICAgIGNvbnN0IHRhc2tOb2RlID0ge1xuICAgICAgZGVzY3I6IHRhc2sudGFzayxcbiAgICAgIHNlY3Rpb246IHNlY3Rpb25Db2xvcixcbiAgICAgIG51bWJlcjogc2VjdGlvbkNvbG9yLFxuICAgICAgd2lkdGg6IDE1MCxcbiAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgbWF4SGVpZ2h0OiBtYXhUYXNrSGVpZ2h0XG4gICAgfTtcbiAgICBsb2cuZGVidWcoXCJ0YXNrTm9kZVwiLCB0YXNrTm9kZSk7XG4gICAgY29uc3QgdGFza1dyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcInRhc2tXcmFwcGVyXCIpO1xuICAgIGNvbnN0IG5vZGUgPSBzdmdEcmF3X2RlZmF1bHQuZHJhd05vZGUodGFza1dyYXBwZXIsIHRhc2tOb2RlLCBzZWN0aW9uQ29sb3IsIGNvbmYpO1xuICAgIGNvbnN0IHRhc2tIZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICBsb2cuZGVidWcoXCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXdcIiwgdGFza0hlaWdodCk7XG4gICAgdGFza1dyYXBwZXIuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFzdGVyWH0sICR7bWFzdGVyWX0pYCk7XG4gICAgbWF4VGFza0hlaWdodCA9IE1hdGgubWF4KG1heFRhc2tIZWlnaHQsIHRhc2tIZWlnaHQpO1xuICAgIGlmICh0YXNrLmV2ZW50cykge1xuICAgICAgY29uc3QgbGluZVdyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxpbmVXcmFwcGVyXCIpO1xuICAgICAgbGV0IGxpbmVMZW5ndGggPSBtYXhUYXNrSGVpZ2h0O1xuICAgICAgbWFzdGVyWSArPSAxMDA7XG4gICAgICBsaW5lTGVuZ3RoID0gbGluZUxlbmd0aCArIGRyYXdFdmVudHMoZGlhZ3JhbTIsIHRhc2suZXZlbnRzLCBzZWN0aW9uQ29sb3IsIG1hc3RlclgsIG1hc3RlclksIGNvbmYpO1xuICAgICAgbWFzdGVyWSAtPSAxMDA7XG4gICAgICBsaW5lV3JhcHBlci5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJ4MVwiLCBtYXN0ZXJYICsgMTkwIC8gMikuYXR0cihcInkxXCIsIG1hc3RlclkgKyBtYXhUYXNrSGVpZ2h0KS5hdHRyKFwieDJcIiwgbWFzdGVyWCArIDE5MCAvIDIpLmF0dHIoXG4gICAgICAgIFwieTJcIixcbiAgICAgICAgbWFzdGVyWSArIG1heFRhc2tIZWlnaHQgKyAoaXNXaXRob3V0U2VjdGlvbnMgPyBtYXhUYXNrSGVpZ2h0IDogbWF4U2VjdGlvbkhlaWdodCkgKyBtYXhFdmVudExpbmVMZW5ndGggKyAxMjBcbiAgICAgICkuYXR0cihcInN0cm9rZS13aWR0aFwiLCAyKS5hdHRyKFwic3Ryb2tlXCIsIFwiYmxhY2tcIikuYXR0cihcIm1hcmtlci1lbmRcIiwgXCJ1cmwoI2Fycm93aGVhZClcIikuYXR0cihcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCI1LDVcIik7XG4gICAgfVxuICAgIG1hc3RlclggPSBtYXN0ZXJYICsgMjAwO1xuICAgIGlmIChpc1dpdGhvdXRTZWN0aW9ucyAmJiAhY29uZi50aW1lbGluZT8uZGlzYWJsZU11bHRpY29sb3IpIHtcbiAgICAgIHNlY3Rpb25Db2xvcisrO1xuICAgIH1cbiAgfVxuICBtYXN0ZXJZID0gbWFzdGVyWSAtIDEwO1xufSwgXCJkcmF3VGFza3NcIik7XG52YXIgZHJhd0V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGlhZ3JhbTIsIGV2ZW50cywgc2VjdGlvbkNvbG9yLCBtYXN0ZXJYLCBtYXN0ZXJZLCBjb25mKSB7XG4gIGxldCBtYXhFdmVudEhlaWdodCA9IDA7XG4gIGNvbnN0IGV2ZW50QmVnaW5ZID0gbWFzdGVyWTtcbiAgbWFzdGVyWSA9IG1hc3RlclkgKyAxMDA7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgY29uc3QgZXZlbnROb2RlID0ge1xuICAgICAgZGVzY3I6IGV2ZW50LFxuICAgICAgc2VjdGlvbjogc2VjdGlvbkNvbG9yLFxuICAgICAgbnVtYmVyOiBzZWN0aW9uQ29sb3IsXG4gICAgICB3aWR0aDogMTUwLFxuICAgICAgcGFkZGluZzogMjAsXG4gICAgICBtYXhIZWlnaHQ6IDUwXG4gICAgfTtcbiAgICBsb2cuZGVidWcoXCJldmVudE5vZGVcIiwgZXZlbnROb2RlKTtcbiAgICBjb25zdCBldmVudFdyYXBwZXIgPSBkaWFncmFtMi5hcHBlbmQoXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImV2ZW50V3JhcHBlclwiKTtcbiAgICBjb25zdCBub2RlID0gc3ZnRHJhd19kZWZhdWx0LmRyYXdOb2RlKGV2ZW50V3JhcHBlciwgZXZlbnROb2RlLCBzZWN0aW9uQ29sb3IsIGNvbmYpO1xuICAgIGNvbnN0IGV2ZW50SGVpZ2h0ID0gbm9kZS5oZWlnaHQ7XG4gICAgbWF4RXZlbnRIZWlnaHQgPSBtYXhFdmVudEhlaWdodCArIGV2ZW50SGVpZ2h0O1xuICAgIGV2ZW50V3JhcHBlci5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHttYXN0ZXJYfSwgJHttYXN0ZXJZfSlgKTtcbiAgICBtYXN0ZXJZID0gbWFzdGVyWSArIDEwICsgZXZlbnRIZWlnaHQ7XG4gIH1cbiAgbWFzdGVyWSA9IGV2ZW50QmVnaW5ZO1xuICByZXR1cm4gbWF4RXZlbnRIZWlnaHQ7XG59LCBcImRyYXdFdmVudHNcIik7XG52YXIgdGltZWxpbmVSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBzZXRDb25mOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgfSwgXCJzZXRDb25mXCIpLFxuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvc3R5bGVzLmpzXG5pbXBvcnQgeyBkYXJrZW4sIGxpZ2h0ZW4sIGlzRGFyayB9IGZyb20gXCJraHJvbWFcIjtcbnZhciBnZW5TZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IHtcbiAgbGV0IHNlY3Rpb25zMiA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gPSBvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSB8fCBvcHRpb25zW1wiY1NjYWxlSW52XCIgKyBpXTtcbiAgICBpZiAoaXNEYXJrKG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldKSkge1xuICAgICAgb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gPSBsaWdodGVuKG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldLCAyMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gZGFya2VuKG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldLCAyMCk7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5USEVNRV9DT0xPUl9MSU1JVDsgaSsrKSB7XG4gICAgY29uc3Qgc3cgPSBcIlwiICsgKDE3IC0gMyAqIGkpO1xuICAgIHNlY3Rpb25zMiArPSBgXG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gcmVjdCwgLnNlY3Rpb24tJHtpIC0gMX0gcGF0aCwgLnNlY3Rpb24tJHtpIC0gMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2kgLSAxfSBwYXRoICB7XG4gICAgICBmaWxsOiAke29wdGlvbnNbXCJjU2NhbGVcIiArIGldfTtcbiAgICB9XG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gdGV4dCB7XG4gICAgIGZpbGw6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5ub2RlLWljb24tJHtpIC0gMX0ge1xuICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgY29sb3I6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5zZWN0aW9uLWVkZ2UtJHtpIC0gMX17XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZVwiICsgaV19O1xuICAgIH1cbiAgICAuZWRnZS1kZXB0aC0ke2kgLSAxfXtcbiAgICAgIHN0cm9rZS13aWR0aDogJHtzd307XG4gICAgfVxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IGxpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVJbnZcIiArIGldfSA7XG4gICAgICBzdHJva2Utd2lkdGg6IDM7XG4gICAgfVxuXG4gICAgLmxpbmVXcmFwcGVyIGxpbmV7XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX0gO1xuICAgIH1cblxuICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQge1xuICAgICAgZmlsbDogbGlnaHRncmF5O1xuICAgIH1cbiAgICAuZGlzYWJsZWQgdGV4dCB7XG4gICAgICBmaWxsOiAjZWZlZmVmO1xuICAgIH1cbiAgICBgO1xuICB9XG4gIHJldHVybiBzZWN0aW9uczI7XG59LCBcImdlblNlY3Rpb25zXCIpO1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGBcbiAgLmVkZ2Uge1xuICAgIHN0cm9rZS13aWR0aDogMztcbiAgfVxuICAke2dlblNlY3Rpb25zKG9wdGlvbnMpfVxuICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0MH07XG4gIH1cbiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0QnJhbmNoTGFiZWwwfTtcbiAgfVxuICAuaWNvbi1jb250YWluZXIge1xuICAgIGhlaWdodDoxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuZWRnZSB7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuICAuZXZlbnRXcmFwcGVyICB7XG4gICBmaWx0ZXI6IGJyaWdodG5lc3MoMTIwJSk7XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvdGltZWxpbmUtZGVmaW5pdGlvbi50c1xudmFyIGRpYWdyYW0gPSB7XG4gIGRiOiB0aW1lbGluZURiX2V4cG9ydHMsXG4gIHJlbmRlcmVyOiB0aW1lbGluZVJlbmRlcmVyX2RlZmF1bHQsXG4gIHBhcnNlcjogdGltZWxpbmVfZGVmYXVsdCxcbiAgc3R5bGVzOiBzdHlsZXNfZGVmYXVsdFxufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFRoZSBDeXRvc2NhcGUgQ29uc29ydGl1bS5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSDigJxTb2Z0d2FyZeKAnSksIHRvIGRlYWwgaW5cbiAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzXG4gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG9cbiAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIOKAnEFTIElT4oCdLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eSQxKG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG4gIHZhciBfcywgX2U7XG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2Fycjtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7XG4gIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAoIWl0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKGl0KSBvID0gaXQ7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgczogRixcbiAgICAgICAgbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IG9baSsrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSxcbiAgICAgICAgZjogRlxuICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG4gIHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSxcbiAgICBkaWRFcnIgPSBmYWxzZSxcbiAgICBlcnI7XG4gIHJldHVybiB7XG4gICAgczogZnVuY3Rpb24gKCkge1xuICAgICAgaXQgPSBpdC5jYWxsKG8pO1xuICAgIH0sXG4gICAgbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7XG4gICAgICBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lO1xuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfSxcbiAgICBlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlkRXJyID0gdHJ1ZTtcbiAgICAgIGVyciA9IGU7XG4gICAgfSxcbiAgICBmOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGRpZEVycikgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIF93aW5kb3cgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxudmFyIG5hdmlnYXRvciA9IF93aW5kb3cgPyBfd2luZG93Lm5hdmlnYXRvciA6IG51bGw7XG5fd2luZG93ID8gX3dpbmRvdy5kb2N1bWVudCA6IG51bGw7XG52YXIgdHlwZW9mc3RyID0gX3R5cGVvZignJyk7XG52YXIgdHlwZW9mb2JqID0gX3R5cGVvZih7fSk7XG52YXIgdHlwZW9mZm4gPSBfdHlwZW9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciB0eXBlb2ZodG1sZWxlID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoSFRNTEVsZW1lbnQpO1xudmFyIGluc3RhbmNlU3RyID0gZnVuY3Rpb24gaW5zdGFuY2VTdHIob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLmluc3RhbmNlU3RyaW5nICYmIGZuJDYob2JqLmluc3RhbmNlU3RyaW5nKSA/IG9iai5pbnN0YW5jZVN0cmluZygpIDogbnVsbDtcbn07XG5cbnZhciBzdHJpbmcgPSBmdW5jdGlvbiBzdHJpbmcob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT0gdHlwZW9mc3RyO1xufTtcbnZhciBmbiQ2ID0gZnVuY3Rpb24gZm4ob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZmZuO1xufTtcbnZhciBhcnJheSA9IGZ1bmN0aW9uIGFycmF5KG9iaikge1xuICByZXR1cm4gIWVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSAmJiAoQXJyYXkuaXNBcnJheSA/IEFycmF5LmlzQXJyYXkob2JqKSA6IG9iaiAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIEFycmF5KTtcbn07XG52YXIgcGxhaW5PYmplY3QgPSBmdW5jdGlvbiBwbGFpbk9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIF90eXBlb2Yob2JqKSA9PT0gdHlwZW9mb2JqICYmICFhcnJheShvYmopICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufTtcbnZhciBvYmplY3QgPSBmdW5jdGlvbiBvYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZm9iajtcbn07XG52YXIgbnVtYmVyJDEgPSBmdW5jdGlvbiBudW1iZXIob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IF90eXBlb2YoMSkgJiYgIWlzTmFOKG9iaik7XG59O1xudmFyIGludGVnZXIgPSBmdW5jdGlvbiBpbnRlZ2VyKG9iaikge1xuICByZXR1cm4gbnVtYmVyJDEob2JqKSAmJiBNYXRoLmZsb29yKG9iaikgPT09IG9iajtcbn07XG52YXIgaHRtbEVsZW1lbnQgPSBmdW5jdGlvbiBodG1sRWxlbWVudChvYmopIHtcbiAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2ZodG1sZWxlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbCAhPSBvYmogJiYgb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gIH1cbn07XG52YXIgZWxlbWVudE9yQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIGVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSB7XG4gIHJldHVybiBlbGVtZW50KG9iaikgfHwgY29sbGVjdGlvbihvYmopO1xufTtcbnZhciBlbGVtZW50ID0gZnVuY3Rpb24gZWxlbWVudChvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb2xsZWN0aW9uJyAmJiBvYmouX3ByaXZhdGUuc2luZ2xlO1xufTtcbnZhciBjb2xsZWN0aW9uID0gZnVuY3Rpb24gY29sbGVjdGlvbihvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb2xsZWN0aW9uJyAmJiAhb2JqLl9wcml2YXRlLnNpbmdsZTtcbn07XG52YXIgY29yZSA9IGZ1bmN0aW9uIGNvcmUob2JqKSB7XG4gIHJldHVybiBpbnN0YW5jZVN0cihvYmopID09PSAnY29yZSc7XG59O1xudmFyIHN0eWxlc2hlZXQgPSBmdW5jdGlvbiBzdHlsZXNoZWV0KG9iaikge1xuICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ3N0eWxlc2hlZXQnO1xufTtcbnZhciBldmVudCA9IGZ1bmN0aW9uIGV2ZW50KG9iaikge1xuICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ2V2ZW50Jztcbn07XG52YXIgZW1wdHlTdHJpbmcgPSBmdW5jdGlvbiBlbXB0eVN0cmluZyhvYmopIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIC8vIG51bGwgaXMgZW1wdHlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChvYmogPT09ICcnIHx8IG9iai5tYXRjaCgvXlxccyskLykpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gZW1wdHkgc3RyaW5nIGlzIGVtcHR5XG4gIH1cblxuICByZXR1cm4gZmFsc2U7IC8vIG90aGVyd2lzZSwgd2UgZG9uJ3Qga25vdyB3aGF0IHdlJ3ZlIGdvdFxufTtcbnZhciBkb21FbGVtZW50ID0gZnVuY3Rpb24gZG9tRWxlbWVudChvYmopIHtcbiAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIHdlJ3JlIG5vdCBpbiBhIGJyb3dzZXIgc28gaXQgZG9lc24ndCBtYXR0ZXJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gIH1cbn07XG52YXIgYm91bmRpbmdCb3ggPSBmdW5jdGlvbiBib3VuZGluZ0JveChvYmopIHtcbiAgcmV0dXJuIHBsYWluT2JqZWN0KG9iaikgJiYgbnVtYmVyJDEob2JqLngxKSAmJiBudW1iZXIkMShvYmoueDIpICYmIG51bWJlciQxKG9iai55MSkgJiYgbnVtYmVyJDEob2JqLnkyKTtcbn07XG52YXIgcHJvbWlzZSA9IGZ1bmN0aW9uIHByb21pc2Uob2JqKSB7XG4gIHJldHVybiBvYmplY3Qob2JqKSAmJiBmbiQ2KG9iai50aGVuKTtcbn07XG52YXIgbXMgPSBmdW5jdGlvbiBtcygpIHtcbiAgcmV0dXJuIG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9tc2llfHRyaWRlbnR8ZWRnZS9pKTtcbn07IC8vIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkZXRlY3QgdGhpcy4uLlxuXG52YXIgbWVtb2l6ZSQxID0gZnVuY3Rpb24gbWVtb2l6ZShmbiwga2V5Rm4pIHtcbiAgaWYgKCFrZXlGbikge1xuICAgIGtleUZuID0gZnVuY3Rpb24ga2V5Rm4oKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJyQnKTtcbiAgICB9O1xuICB9XG4gIHZhciBtZW1vaXplZEZuID0gZnVuY3Rpb24gbWVtb2l6ZWRGbigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHJldDtcbiAgICB2YXIgayA9IGtleUZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIHZhciBjYWNoZSA9IG1lbW9pemVkRm4uY2FjaGU7XG4gICAgaWYgKCEocmV0ID0gY2FjaGVba10pKSB7XG4gICAgICByZXQgPSBjYWNoZVtrXSA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICBtZW1vaXplZEZuLmNhY2hlID0ge307XG4gIHJldHVybiBtZW1vaXplZEZuO1xufTtcblxudmFyIGNhbWVsMmRhc2ggPSBtZW1vaXplJDEoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gJy0nICsgdi50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbn0pO1xudmFyIGRhc2gyY2FtZWwgPSBtZW1vaXplJDEoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLygtXFx3KS9nLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB2WzFdLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufSk7XG52YXIgcHJlcGVuZENhbWVsID0gbWVtb2l6ZSQxKGZ1bmN0aW9uIChwcmVmaXgsIHN0cikge1xuICByZXR1cm4gcHJlZml4ICsgc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufSwgZnVuY3Rpb24gKHByZWZpeCwgc3RyKSB7XG4gIHJldHVybiBwcmVmaXggKyAnJCcgKyBzdHI7XG59KTtcbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgaWYgKGVtcHR5U3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufTtcblxudmFyIG51bWJlciA9ICcoPzpbLStdPyg/Oig/OlxcXFxkK3xcXFxcZCpcXFxcLlxcXFxkKykoPzpbRWVdWystXT9cXFxcZCspPykpJztcbnZhciByZ2JhID0gJ3JnYlthXT9cXFxcKCgnICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciByZ2JhTm9CYWNrUmVmcyA9ICdyZ2JbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdPylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0/KSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoc2xhID0gJ2hzbFthXT9cXFxcKCgnICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIgKyAnWyVdKVxcXFxzKixcXFxccyooJyArIG51bWJlciArICdbJV0pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoc2xhTm9CYWNrUmVmcyA9ICdoc2xbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdKSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoZXgzID0gJ1xcXFwjWzAtOWEtZkEtRl17M30nO1xudmFyIGhleDYgPSAnXFxcXCNbMC05YS1mQS1GXXs2fSc7XG5cbnZhciBhc2NlbmRpbmcgPSBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSBpZiAoYSA+IGIpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcbnZhciBkZXNjZW5kaW5nID0gZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn07XG5cbnZhciBleHRlbmQgPSBPYmplY3QuYXNzaWduICE9IG51bGwgPyBPYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KSA6IGZ1bmN0aW9uICh0Z3QpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBvYmogPSBhcmdzW2ldO1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBrID0ga2V5c1tqXTtcbiAgICAgIHRndFtrXSA9IG9ialtrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRndDtcbn07XG5cbi8vIGdldCBbciwgZywgYl0gZnJvbSAjYWJjIG9yICNhYWJiY2NcbnZhciBoZXgydHVwbGUgPSBmdW5jdGlvbiBoZXgydHVwbGUoaGV4KSB7XG4gIGlmICghKGhleC5sZW5ndGggPT09IDQgfHwgaGV4Lmxlbmd0aCA9PT0gNykgfHwgaGV4WzBdICE9PSAnIycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHNob3J0SGV4ID0gaGV4Lmxlbmd0aCA9PT0gNDtcbiAgdmFyIHIsIGcsIGI7XG4gIHZhciBiYXNlID0gMTY7XG4gIGlmIChzaG9ydEhleCkge1xuICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIGJhc2UpO1xuICAgIGcgPSBwYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIGJhc2UpO1xuICAgIGIgPSBwYXJzZUludChoZXhbM10gKyBoZXhbM10sIGJhc2UpO1xuICB9IGVsc2Uge1xuICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMl0sIGJhc2UpO1xuICAgIGcgPSBwYXJzZUludChoZXhbM10gKyBoZXhbNF0sIGJhc2UpO1xuICAgIGIgPSBwYXJzZUludChoZXhbNV0gKyBoZXhbNl0sIGJhc2UpO1xuICB9XG4gIHJldHVybiBbciwgZywgYl07XG59O1xuXG4vLyBnZXQgW3IsIGcsIGIsIGFdIGZyb20gaHNsKDAsIDAsIDApIG9yIGhzbGEoMCwgMCwgMCwgMClcbnZhciBoc2wydHVwbGUgPSBmdW5jdGlvbiBoc2wydHVwbGUoaHNsKSB7XG4gIHZhciByZXQ7XG4gIHZhciBoLCBzLCBsLCBhLCByLCBnLCBiO1xuICBmdW5jdGlvbiBodWUycmdiKHAsIHEsIHQpIHtcbiAgICBpZiAodCA8IDApIHQgKz0gMTtcbiAgICBpZiAodCA+IDEpIHQgLT0gMTtcbiAgICBpZiAodCA8IDEgLyA2KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICBpZiAodCA8IDEgLyAyKSByZXR1cm4gcTtcbiAgICBpZiAodCA8IDIgLyAzKSByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgdmFyIG0gPSBuZXcgUmVnRXhwKCdeJyArIGhzbGEgKyAnJCcpLmV4ZWMoaHNsKTtcbiAgaWYgKG0pIHtcbiAgICAvLyBnZXQgaHVlXG4gICAgaCA9IHBhcnNlSW50KG1bMV0pO1xuICAgIGlmIChoIDwgMCkge1xuICAgICAgaCA9ICgzNjAgLSAtMSAqIGggJSAzNjApICUgMzYwO1xuICAgIH0gZWxzZSBpZiAoaCA+IDM2MCkge1xuICAgICAgaCA9IGggJSAzNjA7XG4gICAgfVxuICAgIGggLz0gMzYwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICBzID0gcGFyc2VGbG9hdChtWzJdKTtcbiAgICBpZiAocyA8IDAgfHwgcyA+IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F0dXJhdGlvbiBpcyBbMCwgMTAwXVxuICAgIHMgPSBzIC8gMTAwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICBsID0gcGFyc2VGbG9hdChtWzNdKTtcbiAgICBpZiAobCA8IDAgfHwgbCA+IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbGlnaHRuZXNzIGlzIFswLCAxMDBdXG4gICAgbCA9IGwgLyAxMDA7IC8vIG5vcm1hbGlzZSBvbiBbMCwgMV1cblxuICAgIGEgPSBtWzRdO1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGEgPSBwYXJzZUZsb2F0KGEpO1xuICAgICAgaWYgKGEgPCAwIHx8IGEgPiAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gYWxwaGEgaXMgWzAsIDFdXG4gICAgfVxuXG4gICAgLy8gbm93LCBjb252ZXJ0IHRvIHJnYlxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vbWppamFja3Nvbi5jb20vMjAwOC8wMi9yZ2ItdG8taHNsLWFuZC1yZ2ItdG8taHN2LWNvbG9yLW1vZGVsLWNvbnZlcnNpb24tYWxnb3JpdGhtcy1pbi1qYXZhc2NyaXB0XG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IE1hdGgucm91bmQobCAqIDI1NSk7IC8vIGFjaHJvbWF0aWNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgdmFyIHAgPSAyICogbCAtIHE7XG4gICAgICByID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggKyAxIC8gMykpO1xuICAgICAgZyA9IE1hdGgucm91bmQoMjU1ICogaHVlMnJnYihwLCBxLCBoKSk7XG4gICAgICBiID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggLSAxIC8gMykpO1xuICAgIH1cbiAgICByZXQgPSBbciwgZywgYiwgYV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGdldCBbciwgZywgYiwgYV0gZnJvbSByZ2IoMCwgMCwgMCkgb3IgcmdiYSgwLCAwLCAwLCAwKVxudmFyIHJnYjJ0dXBsZSA9IGZ1bmN0aW9uIHJnYjJ0dXBsZShyZ2IpIHtcbiAgdmFyIHJldDtcbiAgdmFyIG0gPSBuZXcgUmVnRXhwKCdeJyArIHJnYmEgKyAnJCcpLmV4ZWMocmdiKTtcbiAgaWYgKG0pIHtcbiAgICByZXQgPSBbXTtcbiAgICB2YXIgaXNQY3QgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgIHZhciBjaGFubmVsID0gbVtpXTtcbiAgICAgIGlmIChjaGFubmVsW2NoYW5uZWwubGVuZ3RoIC0gMV0gPT09ICclJykge1xuICAgICAgICBpc1BjdFtpXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjaGFubmVsID0gcGFyc2VGbG9hdChjaGFubmVsKTtcbiAgICAgIGlmIChpc1BjdFtpXSkge1xuICAgICAgICBjaGFubmVsID0gY2hhbm5lbCAvIDEwMCAqIDI1NTsgLy8gbm9ybWFsaXNlIHRvIFswLCAyNTVdXG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFubmVsIDwgMCB8fCBjaGFubmVsID4gMjU1KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gaW52YWxpZCBjaGFubmVsIHZhbHVlXG5cbiAgICAgIHJldC5wdXNoKE1hdGguZmxvb3IoY2hhbm5lbCkpO1xuICAgIH1cbiAgICB2YXIgYXRMZWFzdE9uZUlzUGN0ID0gaXNQY3RbMV0gfHwgaXNQY3RbMl0gfHwgaXNQY3RbM107XG4gICAgdmFyIGFsbEFyZVBjdCA9IGlzUGN0WzFdICYmIGlzUGN0WzJdICYmIGlzUGN0WzNdO1xuICAgIGlmIChhdExlYXN0T25lSXNQY3QgJiYgIWFsbEFyZVBjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbXVzdCBhbGwgYmUgcGVyY2VudCB2YWx1ZXMgaWYgb25lIGlzXG5cbiAgICB2YXIgYWxwaGEgPSBtWzRdO1xuICAgIGlmIChhbHBoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbHBoYSA9IHBhcnNlRmxvYXQoYWxwaGEpO1xuICAgICAgaWYgKGFscGhhIDwgMCB8fCBhbHBoYSA+IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpbnZhbGlkIGFscGhhIHZhbHVlXG5cbiAgICAgIHJldC5wdXNoKGFscGhhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG52YXIgY29sb3JuYW1lMnR1cGxlID0gZnVuY3Rpb24gY29sb3JuYW1lMnR1cGxlKGNvbG9yKSB7XG4gIHJldHVybiBjb2xvcnNbY29sb3IudG9Mb3dlckNhc2UoKV07XG59O1xudmFyIGNvbG9yMnR1cGxlID0gZnVuY3Rpb24gY29sb3IydHVwbGUoY29sb3IpIHtcbiAgcmV0dXJuIChhcnJheShjb2xvcikgPyBjb2xvciA6IG51bGwpIHx8IGNvbG9ybmFtZTJ0dXBsZShjb2xvcikgfHwgaGV4MnR1cGxlKGNvbG9yKSB8fCByZ2IydHVwbGUoY29sb3IpIHx8IGhzbDJ0dXBsZShjb2xvcik7XG59O1xudmFyIGNvbG9ycyA9IHtcbiAgLy8gc3BlY2lhbCBjb2xvdXIgbmFtZXNcbiAgdHJhbnNwYXJlbnQ6IFswLCAwLCAwLCAwXSxcbiAgLy8gTkIgYWxwaGEgPT09IDBcblxuICAvLyByZWd1bGFyIGNvbG91cnNcbiAgYWxpY2VibHVlOiBbMjQwLCAyNDgsIDI1NV0sXG4gIGFudGlxdWV3aGl0ZTogWzI1MCwgMjM1LCAyMTVdLFxuICBhcXVhOiBbMCwgMjU1LCAyNTVdLFxuICBhcXVhbWFyaW5lOiBbMTI3LCAyNTUsIDIxMl0sXG4gIGF6dXJlOiBbMjQwLCAyNTUsIDI1NV0sXG4gIGJlaWdlOiBbMjQ1LCAyNDUsIDIyMF0sXG4gIGJpc3F1ZTogWzI1NSwgMjI4LCAxOTZdLFxuICBibGFjazogWzAsIDAsIDBdLFxuICBibGFuY2hlZGFsbW9uZDogWzI1NSwgMjM1LCAyMDVdLFxuICBibHVlOiBbMCwgMCwgMjU1XSxcbiAgYmx1ZXZpb2xldDogWzEzOCwgNDMsIDIyNl0sXG4gIGJyb3duOiBbMTY1LCA0MiwgNDJdLFxuICBidXJseXdvb2Q6IFsyMjIsIDE4NCwgMTM1XSxcbiAgY2FkZXRibHVlOiBbOTUsIDE1OCwgMTYwXSxcbiAgY2hhcnRyZXVzZTogWzEyNywgMjU1LCAwXSxcbiAgY2hvY29sYXRlOiBbMjEwLCAxMDUsIDMwXSxcbiAgY29yYWw6IFsyNTUsIDEyNywgODBdLFxuICBjb3JuZmxvd2VyYmx1ZTogWzEwMCwgMTQ5LCAyMzddLFxuICBjb3Juc2lsazogWzI1NSwgMjQ4LCAyMjBdLFxuICBjcmltc29uOiBbMjIwLCAyMCwgNjBdLFxuICBjeWFuOiBbMCwgMjU1LCAyNTVdLFxuICBkYXJrYmx1ZTogWzAsIDAsIDEzOV0sXG4gIGRhcmtjeWFuOiBbMCwgMTM5LCAxMzldLFxuICBkYXJrZ29sZGVucm9kOiBbMTg0LCAxMzQsIDExXSxcbiAgZGFya2dyYXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgZGFya2dyZWVuOiBbMCwgMTAwLCAwXSxcbiAgZGFya2dyZXk6IFsxNjksIDE2OSwgMTY5XSxcbiAgZGFya2toYWtpOiBbMTg5LCAxODMsIDEwN10sXG4gIGRhcmttYWdlbnRhOiBbMTM5LCAwLCAxMzldLFxuICBkYXJrb2xpdmVncmVlbjogWzg1LCAxMDcsIDQ3XSxcbiAgZGFya29yYW5nZTogWzI1NSwgMTQwLCAwXSxcbiAgZGFya29yY2hpZDogWzE1MywgNTAsIDIwNF0sXG4gIGRhcmtyZWQ6IFsxMzksIDAsIDBdLFxuICBkYXJrc2FsbW9uOiBbMjMzLCAxNTAsIDEyMl0sXG4gIGRhcmtzZWFncmVlbjogWzE0MywgMTg4LCAxNDNdLFxuICBkYXJrc2xhdGVibHVlOiBbNzIsIDYxLCAxMzldLFxuICBkYXJrc2xhdGVncmF5OiBbNDcsIDc5LCA3OV0sXG4gIGRhcmtzbGF0ZWdyZXk6IFs0NywgNzksIDc5XSxcbiAgZGFya3R1cnF1b2lzZTogWzAsIDIwNiwgMjA5XSxcbiAgZGFya3Zpb2xldDogWzE0OCwgMCwgMjExXSxcbiAgZGVlcHBpbms6IFsyNTUsIDIwLCAxNDddLFxuICBkZWVwc2t5Ymx1ZTogWzAsIDE5MSwgMjU1XSxcbiAgZGltZ3JheTogWzEwNSwgMTA1LCAxMDVdLFxuICBkaW1ncmV5OiBbMTA1LCAxMDUsIDEwNV0sXG4gIGRvZGdlcmJsdWU6IFszMCwgMTQ0LCAyNTVdLFxuICBmaXJlYnJpY2s6IFsxNzgsIDM0LCAzNF0sXG4gIGZsb3JhbHdoaXRlOiBbMjU1LCAyNTAsIDI0MF0sXG4gIGZvcmVzdGdyZWVuOiBbMzQsIDEzOSwgMzRdLFxuICBmdWNoc2lhOiBbMjU1LCAwLCAyNTVdLFxuICBnYWluc2Jvcm86IFsyMjAsIDIyMCwgMjIwXSxcbiAgZ2hvc3R3aGl0ZTogWzI0OCwgMjQ4LCAyNTVdLFxuICBnb2xkOiBbMjU1LCAyMTUsIDBdLFxuICBnb2xkZW5yb2Q6IFsyMTgsIDE2NSwgMzJdLFxuICBncmF5OiBbMTI4LCAxMjgsIDEyOF0sXG4gIGdyZXk6IFsxMjgsIDEyOCwgMTI4XSxcbiAgZ3JlZW46IFswLCAxMjgsIDBdLFxuICBncmVlbnllbGxvdzogWzE3MywgMjU1LCA0N10sXG4gIGhvbmV5ZGV3OiBbMjQwLCAyNTUsIDI0MF0sXG4gIGhvdHBpbms6IFsyNTUsIDEwNSwgMTgwXSxcbiAgaW5kaWFucmVkOiBbMjA1LCA5MiwgOTJdLFxuICBpbmRpZ286IFs3NSwgMCwgMTMwXSxcbiAgaXZvcnk6IFsyNTUsIDI1NSwgMjQwXSxcbiAga2hha2k6IFsyNDAsIDIzMCwgMTQwXSxcbiAgbGF2ZW5kZXI6IFsyMzAsIDIzMCwgMjUwXSxcbiAgbGF2ZW5kZXJibHVzaDogWzI1NSwgMjQwLCAyNDVdLFxuICBsYXduZ3JlZW46IFsxMjQsIDI1MiwgMF0sXG4gIGxlbW9uY2hpZmZvbjogWzI1NSwgMjUwLCAyMDVdLFxuICBsaWdodGJsdWU6IFsxNzMsIDIxNiwgMjMwXSxcbiAgbGlnaHRjb3JhbDogWzI0MCwgMTI4LCAxMjhdLFxuICBsaWdodGN5YW46IFsyMjQsIDI1NSwgMjU1XSxcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsIDI1MCwgMjEwXSxcbiAgbGlnaHRncmF5OiBbMjExLCAyMTEsIDIxMV0sXG4gIGxpZ2h0Z3JlZW46IFsxNDQsIDIzOCwgMTQ0XSxcbiAgbGlnaHRncmV5OiBbMjExLCAyMTEsIDIxMV0sXG4gIGxpZ2h0cGluazogWzI1NSwgMTgyLCAxOTNdLFxuICBsaWdodHNhbG1vbjogWzI1NSwgMTYwLCAxMjJdLFxuICBsaWdodHNlYWdyZWVuOiBbMzIsIDE3OCwgMTcwXSxcbiAgbGlnaHRza3libHVlOiBbMTM1LCAyMDYsIDI1MF0sXG4gIGxpZ2h0c2xhdGVncmF5OiBbMTE5LCAxMzYsIDE1M10sXG4gIGxpZ2h0c2xhdGVncmV5OiBbMTE5LCAxMzYsIDE1M10sXG4gIGxpZ2h0c3RlZWxibHVlOiBbMTc2LCAxOTYsIDIyMl0sXG4gIGxpZ2h0eWVsbG93OiBbMjU1LCAyNTUsIDIyNF0sXG4gIGxpbWU6IFswLCAyNTUsIDBdLFxuICBsaW1lZ3JlZW46IFs1MCwgMjA1LCA1MF0sXG4gIGxpbmVuOiBbMjUwLCAyNDAsIDIzMF0sXG4gIG1hZ2VudGE6IFsyNTUsIDAsIDI1NV0sXG4gIG1hcm9vbjogWzEyOCwgMCwgMF0sXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFsxMDIsIDIwNSwgMTcwXSxcbiAgbWVkaXVtYmx1ZTogWzAsIDAsIDIwNV0sXG4gIG1lZGl1bW9yY2hpZDogWzE4NiwgODUsIDIxMV0sXG4gIG1lZGl1bXB1cnBsZTogWzE0NywgMTEyLCAyMTldLFxuICBtZWRpdW1zZWFncmVlbjogWzYwLCAxNzksIDExM10sXG4gIG1lZGl1bXNsYXRlYmx1ZTogWzEyMywgMTA0LCAyMzhdLFxuICBtZWRpdW1zcHJpbmdncmVlbjogWzAsIDI1MCwgMTU0XSxcbiAgbWVkaXVtdHVycXVvaXNlOiBbNzIsIDIwOSwgMjA0XSxcbiAgbWVkaXVtdmlvbGV0cmVkOiBbMTk5LCAyMSwgMTMzXSxcbiAgbWlkbmlnaHRibHVlOiBbMjUsIDI1LCAxMTJdLFxuICBtaW50Y3JlYW06IFsyNDUsIDI1NSwgMjUwXSxcbiAgbWlzdHlyb3NlOiBbMjU1LCAyMjgsIDIyNV0sXG4gIG1vY2Nhc2luOiBbMjU1LCAyMjgsIDE4MV0sXG4gIG5hdmFqb3doaXRlOiBbMjU1LCAyMjIsIDE3M10sXG4gIG5hdnk6IFswLCAwLCAxMjhdLFxuICBvbGRsYWNlOiBbMjUzLCAyNDUsIDIzMF0sXG4gIG9saXZlOiBbMTI4LCAxMjgsIDBdLFxuICBvbGl2ZWRyYWI6IFsxMDcsIDE0MiwgMzVdLFxuICBvcmFuZ2U6IFsyNTUsIDE2NSwgMF0sXG4gIG9yYW5nZXJlZDogWzI1NSwgNjksIDBdLFxuICBvcmNoaWQ6IFsyMTgsIDExMiwgMjE0XSxcbiAgcGFsZWdvbGRlbnJvZDogWzIzOCwgMjMyLCAxNzBdLFxuICBwYWxlZ3JlZW46IFsxNTIsIDI1MSwgMTUyXSxcbiAgcGFsZXR1cnF1b2lzZTogWzE3NSwgMjM4LCAyMzhdLFxuICBwYWxldmlvbGV0cmVkOiBbMjE5LCAxMTIsIDE0N10sXG4gIHBhcGF5YXdoaXA6IFsyNTUsIDIzOSwgMjEzXSxcbiAgcGVhY2hwdWZmOiBbMjU1LCAyMTgsIDE4NV0sXG4gIHBlcnU6IFsyMDUsIDEzMywgNjNdLFxuICBwaW5rOiBbMjU1LCAxOTIsIDIwM10sXG4gIHBsdW06IFsyMjEsIDE2MCwgMjIxXSxcbiAgcG93ZGVyYmx1ZTogWzE3NiwgMjI0LCAyMzBdLFxuICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXG4gIHJlZDogWzI1NSwgMCwgMF0sXG4gIHJvc3licm93bjogWzE4OCwgMTQzLCAxNDNdLFxuICByb3lhbGJsdWU6IFs2NSwgMTA1LCAyMjVdLFxuICBzYWRkbGVicm93bjogWzEzOSwgNjksIDE5XSxcbiAgc2FsbW9uOiBbMjUwLCAxMjgsIDExNF0sXG4gIHNhbmR5YnJvd246IFsyNDQsIDE2NCwgOTZdLFxuICBzZWFncmVlbjogWzQ2LCAxMzksIDg3XSxcbiAgc2Vhc2hlbGw6IFsyNTUsIDI0NSwgMjM4XSxcbiAgc2llbm5hOiBbMTYwLCA4MiwgNDVdLFxuICBzaWx2ZXI6IFsxOTIsIDE5MiwgMTkyXSxcbiAgc2t5Ymx1ZTogWzEzNSwgMjA2LCAyMzVdLFxuICBzbGF0ZWJsdWU6IFsxMDYsIDkwLCAyMDVdLFxuICBzbGF0ZWdyYXk6IFsxMTIsIDEyOCwgMTQ0XSxcbiAgc2xhdGVncmV5OiBbMTEyLCAxMjgsIDE0NF0sXG4gIHNub3c6IFsyNTUsIDI1MCwgMjUwXSxcbiAgc3ByaW5nZ3JlZW46IFswLCAyNTUsIDEyN10sXG4gIHN0ZWVsYmx1ZTogWzcwLCAxMzAsIDE4MF0sXG4gIHRhbjogWzIxMCwgMTgwLCAxNDBdLFxuICB0ZWFsOiBbMCwgMTI4LCAxMjhdLFxuICB0aGlzdGxlOiBbMjE2LCAxOTEsIDIxNl0sXG4gIHRvbWF0bzogWzI1NSwgOTksIDcxXSxcbiAgdHVycXVvaXNlOiBbNjQsIDIyNCwgMjA4XSxcbiAgdmlvbGV0OiBbMjM4LCAxMzAsIDIzOF0sXG4gIHdoZWF0OiBbMjQ1LCAyMjIsIDE3OV0sXG4gIHdoaXRlOiBbMjU1LCAyNTUsIDI1NV0sXG4gIHdoaXRlc21va2U6IFsyNDUsIDI0NSwgMjQ1XSxcbiAgeWVsbG93OiBbMjU1LCAyNTUsIDBdLFxuICB5ZWxsb3dncmVlbjogWzE1NCwgMjA1LCA1MF1cbn07XG5cbi8vIHNldHMgdGhlIHZhbHVlIGluIGEgbWFwIChtYXAgbWF5IG5vdCBiZSBidWlsdClcbnZhciBzZXRNYXAgPSBmdW5jdGlvbiBzZXRNYXAob3B0aW9ucykge1xuICB2YXIgb2JqID0gb3B0aW9ucy5tYXA7XG4gIHZhciBrZXlzID0gb3B0aW9ucy5rZXlzO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwbGFpbk9iamVjdChrZXkpKSB7XG4gICAgICB0aHJvdyBFcnJvcignVHJpZWQgdG8gc2V0IG1hcCB3aXRoIG9iamVjdCBrZXknKTtcbiAgICB9XG4gICAgaWYgKGkgPCBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGV4dGVuZCB0aGUgbWFwIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKG9ialtrZXldID09IG51bGwpIHtcbiAgICAgICAgb2JqW2tleV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZXQgdGhlIHZhbHVlXG4gICAgICBvYmpba2V5XSA9IG9wdGlvbnMudmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBnZXRzIHRoZSB2YWx1ZSBpbiBhIG1hcCBldmVuIGlmIGl0J3Mgbm90IGJ1aWx0IGluIHBsYWNlc1xudmFyIGdldE1hcCA9IGZ1bmN0aW9uIGdldE1hcChvcHRpb25zKSB7XG4gIHZhciBvYmogPSBvcHRpb25zLm1hcDtcbiAgdmFyIGtleXMgPSBvcHRpb25zLmtleXM7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKHBsYWluT2JqZWN0KGtleSkpIHtcbiAgICAgIHRocm93IEVycm9yKCdUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleScpO1xuICAgIH1cbiAgICBvYmogPSBvYmpba2V5XTtcbiAgICBpZiAob2JqID09IG51bGwpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxudmFyIGlzT2JqZWN0XzEgPSBpc09iamVjdDtcblxudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZuLCBtb2R1bGUpIHtcblx0cmV0dXJuIG1vZHVsZSA9IHsgZXhwb3J0czoge30gfSwgZm4obW9kdWxlLCBtb2R1bGUuZXhwb3J0cyksIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgY29tbW9uanNHbG9iYWwgPT0gJ29iamVjdCcgJiYgY29tbW9uanNHbG9iYWwgJiYgY29tbW9uanNHbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgY29tbW9uanNHbG9iYWw7XG5cbnZhciBfZnJlZUdsb2JhbCA9IGZyZWVHbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IF9mcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbnZhciBfcm9vdCA9IHJvb3Q7XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIF9yb290LkRhdGUubm93KCk7XG59O1xuXG52YXIgbm93XzEgPSBub3c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxudmFyIF90cmltbWVkRW5kSW5kZXggPSB0cmltbWVkRW5kSW5kZXg7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgX3RyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgOiBzdHJpbmc7XG59XG5cbnZhciBfYmFzZVRyaW0gPSBiYXNlVHJpbTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sJDEgPSBfcm9vdC5TeW1ib2w7XG5cbnZhciBfU3ltYm9sID0gU3ltYm9sJDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byQ1ID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkkNCA9IG9iamVjdFByb3RvJDUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyQxID0gb2JqZWN0UHJvdG8kNS50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWckMSA9IF9TeW1ib2wgPyBfU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eSQ0LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnJDEpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWckMV07XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZyQxXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZyQxLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnJDFdID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWckMV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBfZ2V0UmF3VGFnID0gZ2V0UmF3VGFnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8kNCA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvJDQudG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbnZhciBfb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RUb1N0cmluZztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gX1N5bWJvbCA/IF9TeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IF9nZXRSYXdUYWcodmFsdWUpXG4gICAgOiBfb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG52YXIgX2Jhc2VHZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxudmFyIGlzT2JqZWN0TGlrZV8xID0gaXNPYmplY3RMaWtlO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2VfMSh2YWx1ZSkgJiYgX2Jhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbnZhciBpc1N5bWJvbF8xID0gaXNTeW1ib2w7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE5BTiA9IDAgLyAwO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbF8xKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0XzEodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3RfMShvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSBfYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxudmFyIHRvTnVtYmVyXzEgPSB0b051bWJlcjtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCQxID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUJDEpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcl8xKHdhaXQpIHx8IDA7XG4gIGlmIChpc09iamVjdF8xKG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXJfMShvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93XzEoKTtcbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH1cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93XzEoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3dfMSgpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG52YXIgZGVib3VuY2VfMSA9IGRlYm91bmNlO1xuXG52YXIgcGVyZm9ybWFuY2UgPSBfd2luZG93ID8gX3dpbmRvdy5wZXJmb3JtYW5jZSA6IG51bGw7XG52YXIgcG5vdyA9IHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xudmFyIHJhZiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF93aW5kb3cpIHtcbiAgICBpZiAoX3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgX3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKF93aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIF93aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChfd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICBfd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoX3dpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICBfd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmbihwbm93KCkpO1xuICAgICAgfSwgMTAwMCAvIDYwKTtcbiAgICB9XG4gIH07XG59KCk7XG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKSB7XG4gIHJldHVybiByYWYoZm4pO1xufTtcbnZhciBwZXJmb3JtYW5jZU5vdyA9IHBub3c7XG5cbnZhciBERUZBVUxUX0hBU0hfU0VFRCA9IDkyNjE7XG52YXIgSyA9IDY1NTk5OyAvLyAzNyBhbHNvIHdvcmtzIHByZXR0eSB3ZWxsXG52YXIgREVGQVVMVF9IQVNIX1NFRURfQUxUID0gNTM4MTtcbnZhciBoYXNoSXRlcmFibGVJbnRzID0gZnVuY3Rpb24gaGFzaEl0ZXJhYmxlSW50cyhpdGVyYXRvcikge1xuICB2YXIgc2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9IQVNIX1NFRUQ7XG4gIC8vIHNkYm0vc3RyaW5nLWhhc2hcbiAgdmFyIGhhc2ggPSBzZWVkO1xuICB2YXIgZW50cnk7XG4gIGZvciAoOzspIHtcbiAgICBlbnRyeSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICBpZiAoZW50cnkuZG9uZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGhhc2ggPSBoYXNoICogSyArIGVudHJ5LnZhbHVlIHwgMDtcbiAgfVxuICByZXR1cm4gaGFzaDtcbn07XG52YXIgaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQobnVtKSB7XG4gIHZhciBzZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX0hBU0hfU0VFRDtcbiAgLy8gc2RibS9zdHJpbmctaGFzaFxuICByZXR1cm4gc2VlZCAqIEsgKyBudW0gfCAwO1xufTtcbnZhciBoYXNoSW50QWx0ID0gZnVuY3Rpb24gaGFzaEludEFsdChudW0pIHtcbiAgdmFyIHNlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfSEFTSF9TRUVEX0FMVDtcbiAgLy8gZGpiMi9zdHJpbmctaGFzaFxuICByZXR1cm4gKHNlZWQgPDwgNSkgKyBzZWVkICsgbnVtIHwgMDtcbn07XG52YXIgY29tYmluZUhhc2hlcyA9IGZ1bmN0aW9uIGNvbWJpbmVIYXNoZXMoaGFzaDEsIGhhc2gyKSB7XG4gIHJldHVybiBoYXNoMSAqIDB4MjAwMDAwICsgaGFzaDI7XG59O1xudmFyIGNvbWJpbmVIYXNoZXNBcnJheSA9IGZ1bmN0aW9uIGNvbWJpbmVIYXNoZXNBcnJheShoYXNoZXMpIHtcbiAgcmV0dXJuIGhhc2hlc1swXSAqIDB4MjAwMDAwICsgaGFzaGVzWzFdO1xufTtcbnZhciBoYXNoQXJyYXlzID0gZnVuY3Rpb24gaGFzaEFycmF5cyhoYXNoZXMxLCBoYXNoZXMyKSB7XG4gIHJldHVybiBbaGFzaEludChoYXNoZXMxWzBdLCBoYXNoZXMyWzBdKSwgaGFzaEludEFsdChoYXNoZXMxWzFdLCBoYXNoZXMyWzFdKV07XG59O1xudmFyIGhhc2hJbnRzQXJyYXkgPSBmdW5jdGlvbiBoYXNoSW50c0FycmF5KGludHMsIHNlZWQpIHtcbiAgdmFyIGVudHJ5ID0ge1xuICAgIHZhbHVlOiAwLFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG4gIHZhciBpID0gMDtcbiAgdmFyIGxlbmd0aCA9IGludHMubGVuZ3RoO1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gaW50c1tpKytdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50cnkuZG9uZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gaGFzaEl0ZXJhYmxlSW50cyhpdGVyYXRvciwgc2VlZCk7XG59O1xudmFyIGhhc2hTdHJpbmcgPSBmdW5jdGlvbiBoYXNoU3RyaW5nKHN0ciwgc2VlZCkge1xuICB2YXIgZW50cnkgPSB7XG4gICAgdmFsdWU6IDAsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAoaSA8IGxlbmd0aCkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyeS5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBoYXNoSXRlcmFibGVJbnRzKGl0ZXJhdG9yLCBzZWVkKTtcbn07XG52YXIgaGFzaFN0cmluZ3MgPSBmdW5jdGlvbiBoYXNoU3RyaW5ncygpIHtcbiAgcmV0dXJuIGhhc2hTdHJpbmdzQXJyYXkoYXJndW1lbnRzKTtcbn07XG52YXIgaGFzaFN0cmluZ3NBcnJheSA9IGZ1bmN0aW9uIGhhc2hTdHJpbmdzQXJyYXkoc3Rycykge1xuICB2YXIgaGFzaDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHN0ciA9IHN0cnNbaV07XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGhhc2ggPSBoYXNoU3RyaW5nKHN0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc2ggPSBoYXNoU3RyaW5nKHN0ciwgaGFzaCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBoYXNoO1xufTtcblxuLypnbG9iYWwgY29uc29sZSAqL1xudmFyIHdhcm5pbmdzRW5hYmxlZCA9IHRydWU7XG52YXIgd2FyblN1cHBvcnRlZCA9IGNvbnNvbGUud2FybiAhPSBudWxsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbnZhciB0cmFjZVN1cHBvcnRlZCA9IGNvbnNvbGUudHJhY2UgIT0gbnVsbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG5cbnZhciBNQVhfSU5UJDEgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCA5MDA3MTk5MjU0NzQwOTkxO1xudmFyIHRydWVpZnkgPSBmdW5jdGlvbiB0cnVlaWZ5KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZmFsc2lmeSA9IGZ1bmN0aW9uIGZhbHNpZnkoKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG52YXIgemVyb2lmeSA9IGZ1bmN0aW9uIHplcm9pZnkoKSB7XG4gIHJldHVybiAwO1xufTtcbnZhciBub29wJDEgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59O1xudmFyIHdhcm5pbmdzID0gZnVuY3Rpb24gd2FybmluZ3MoZW5hYmxlZCkge1xuICBpZiAoZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2FybmluZ3NFbmFibGVkID0gISFlbmFibGVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3YXJuaW5nc0VuYWJsZWQ7XG4gIH1cbn07XG52YXIgd2FybiA9IGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKCF3YXJuaW5ncygpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh3YXJuU3VwcG9ydGVkKSB7XG4gICAgY29uc29sZS53YXJuKG1zZyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2cobXNnKTtcbiAgICBpZiAodHJhY2VTdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICB9XG4gIH1cbn07IC8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIGNsb25lID0gZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gIHJldHVybiBleHRlbmQoe30sIG9iaik7XG59O1xuXG4vLyBnZXRzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBhcmd1bWVudFxudmFyIGNvcHkgPSBmdW5jdGlvbiBjb3B5KG9iaikge1xuICBpZiAob2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChhcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5zbGljZSgpO1xuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gY2xvbmUob2JqKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG59O1xudmFyIGNvcHlBcnJheSQxID0gZnVuY3Rpb24gY29weUFycmF5KGFycikge1xuICByZXR1cm4gYXJyLnNsaWNlKCk7XG59O1xudmFyIHV1aWQgPSBmdW5jdGlvbiB1dWlkKGEsIGIgLyogcGxhY2Vob2xkZXJzICovKSB7XG4gIGZvciAoXG4gIC8vIGxvb3AgOilcbiAgYiA9IGEgPSAnJztcbiAgLy8gYiAtIHJlc3VsdCAsIGEgLSBudW1lcmljIGxldGlhYmxlXG4gIGErKyA8IDM2O1xuICAvL1xuICBiICs9IGEgKiA1MSAmIDUyIC8vIGlmIFwiYVwiIGlzIG5vdCA5IG9yIDE0IG9yIDE5IG9yIDI0XG4gID9cbiAgLy8gIHJldHVybiBhIHJhbmRvbSBudW1iZXIgb3IgNFxuICAoYSBeIDE1IC8vIGlmIFwiYVwiIGlzIG5vdCAxNVxuICA/XG4gIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBmcm9tIDAgdG8gMTVcbiAgOCBeIE1hdGgucmFuZG9tKCkgKiAoYSBeIDIwID8gMTYgOiA0KSAvLyB1bmxlc3MgXCJhXCIgaXMgMjAsIGluIHdoaWNoIGNhc2UgYSByYW5kb20gbnVtYmVyIGZyb20gOCB0byAxMVxuICA6IDQgLy8gIG90aGVyd2lzZSA0XG4gICkudG9TdHJpbmcoMTYpIDogJy0nIC8vICBpbiBvdGhlciBjYXNlcyAoaWYgXCJhXCIgaXMgOSwxNCwxOSwyNCkgaW5zZXJ0IFwiLVwiXG4gICkge1xuICB9XG4gIHJldHVybiBiO1xufTtcbnZhciBfc3RhdGljRW1wdHlPYmplY3QgPSB7fTtcbnZhciBzdGF0aWNFbXB0eU9iamVjdCA9IGZ1bmN0aW9uIHN0YXRpY0VtcHR5T2JqZWN0KCkge1xuICByZXR1cm4gX3N0YXRpY0VtcHR5T2JqZWN0O1xufTtcbnZhciBkZWZhdWx0cyRnID0gZnVuY3Rpb24gZGVmYXVsdHMoX2RlZmF1bHRzKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoX2RlZmF1bHRzKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgdmFyIGZpbGxlZE9wdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIG9wdFZhbCA9IG9wdHMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9wdHNba2V5XTtcbiAgICAgIGZpbGxlZE9wdHNba2V5XSA9IG9wdFZhbCA9PT0gdW5kZWZpbmVkID8gX2RlZmF1bHRzW2tleV0gOiBvcHRWYWw7XG4gICAgfVxuICAgIHJldHVybiBmaWxsZWRPcHRzO1xuICB9O1xufTtcbnZhciByZW1vdmVGcm9tQXJyYXkgPSBmdW5jdGlvbiByZW1vdmVGcm9tQXJyYXkoYXJyLCBlbGUsIG9uZUNvcHkpIHtcbiAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChhcnJbaV0gPT09IGVsZSkge1xuICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgIGlmIChvbmVDb3B5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbnZhciBjbGVhckFycmF5ID0gZnVuY3Rpb24gY2xlYXJBcnJheShhcnIpIHtcbiAgYXJyLnNwbGljZSgwLCBhcnIubGVuZ3RoKTtcbn07XG52YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2goYXJyLCBvdGhlckFycikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG90aGVyQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0gb3RoZXJBcnJbaV07XG4gICAgYXJyLnB1c2goZWwpO1xuICB9XG59O1xudmFyIGdldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCkge1xuICBpZiAocHJlZml4KSB7XG4gICAgcHJvcE5hbWUgPSBwcmVwZW5kQ2FtZWwocHJlZml4LCBwcm9wTmFtZSk7IC8vIGUuZy4gKGxhYmVsV2lkdGgsIHNvdXJjZSkgPT4gc291cmNlTGFiZWxXaWR0aFxuICB9XG5cbiAgcmV0dXJuIG9ialtwcm9wTmFtZV07XG59O1xudmFyIHNldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBzZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpIHtcbiAgaWYgKHByZWZpeCkge1xuICAgIHByb3BOYW1lID0gcHJlcGVuZENhbWVsKHByZWZpeCwgcHJvcE5hbWUpOyAvLyBlLmcuIChsYWJlbFdpZHRoLCBzb3VyY2UpID0+IHNvdXJjZUxhYmVsV2lkdGhcbiAgfVxuXG4gIG9ialtwcm9wTmFtZV0gPSB2YWx1ZTtcbn07XG5cbi8qIGdsb2JhbCBNYXAgKi9cbnZhciBPYmplY3RNYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RNYXAoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE9iamVjdE1hcCk7XG4gICAgdGhpcy5fb2JqID0ge307XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKE9iamVjdE1hcCwgW3tcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChrZXksIHZhbCkge1xuICAgICAgdGhpcy5fb2JqW2tleV0gPSB2YWw7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICB0aGlzLl9vYmpba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuX29iaiA9IHt9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX29ialtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fb2JqW2tleV07XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBPYmplY3RNYXA7XG59KCk7XG52YXIgTWFwJDIgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyA/IE1hcCA6IE9iamVjdE1hcDtcblxuLyogZ2xvYmFsIFNldCAqL1xuXG52YXIgdW5kZWYgPSBcInVuZGVmaW5lZFwiIDtcbnZhciBPYmplY3RTZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RTZXQoYXJyYXlPck9iamVjdFNldCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPYmplY3RTZXQpO1xuICAgIHRoaXMuX29iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zaXplID0gMDtcbiAgICBpZiAoYXJyYXlPck9iamVjdFNldCAhPSBudWxsKSB7XG4gICAgICB2YXIgYXJyO1xuICAgICAgaWYgKGFycmF5T3JPYmplY3RTZXQuaW5zdGFuY2VTdHJpbmcgIT0gbnVsbCAmJiBhcnJheU9yT2JqZWN0U2V0Lmluc3RhbmNlU3RyaW5nKCkgPT09IHRoaXMuaW5zdGFuY2VTdHJpbmcoKSkge1xuICAgICAgICBhcnIgPSBhcnJheU9yT2JqZWN0U2V0LnRvQXJyYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyciA9IGFycmF5T3JPYmplY3RTZXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmFkZChhcnJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfY3JlYXRlQ2xhc3MoT2JqZWN0U2V0LCBbe1xuICAgIGtleTogXCJpbnN0YW5jZVN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnN0YW5jZVN0cmluZygpIHtcbiAgICAgIHJldHVybiAnc2V0JztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZCh2YWwpIHtcbiAgICAgIHZhciBvID0gdGhpcy5fb2JqO1xuICAgICAgaWYgKG9bdmFsXSAhPT0gMSkge1xuICAgICAgICBvW3ZhbF0gPSAxO1xuICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUodmFsKSB7XG4gICAgICB2YXIgbyA9IHRoaXMuX29iajtcbiAgICAgIGlmIChvW3ZhbF0gPT09IDEpIHtcbiAgICAgICAgb1t2YWxdID0gMDtcbiAgICAgICAgdGhpcy5zaXplLS07XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdGhpcy5fb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyh2YWwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmpbdmFsXSA9PT0gMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9BcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9vYmopLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYXMoa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb3JFYWNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnKTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIE9iamVjdFNldDtcbn0oKTtcbnZhciBTZXQkMSA9ICh0eXBlb2YgU2V0ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoU2V0KSkgIT09IHVuZGVmID8gU2V0IDogT2JqZWN0U2V0O1xuXG4vLyByZXByZXNlbnRzIGEgbm9kZSBvciBhbiBlZGdlXG52YXIgRWxlbWVudCA9IGZ1bmN0aW9uIEVsZW1lbnQoY3ksIHBhcmFtcykge1xuICB2YXIgcmVzdG9yZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgaWYgKGN5ID09PSB1bmRlZmluZWQgfHwgcGFyYW1zID09PSB1bmRlZmluZWQgfHwgIWNvcmUoY3kpKSB7XG4gICAgZXJyb3IoJ0FuIGVsZW1lbnQgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UgYW5kIHBhcmFtZXRlcnMgc2V0Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBncm91cCA9IHBhcmFtcy5ncm91cDtcblxuICAvLyB0cnkgdG8gYXV0b21hdGljYWxseSBpbmZlciB0aGUgZ3JvdXAgaWYgdW5zcGVjaWZpZWRcbiAgaWYgKGdyb3VwID09IG51bGwpIHtcbiAgICBpZiAocGFyYW1zLmRhdGEgJiYgcGFyYW1zLmRhdGEuc291cmNlICE9IG51bGwgJiYgcGFyYW1zLmRhdGEudGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgIGdyb3VwID0gJ2VkZ2VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXAgPSAnbm9kZXMnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGdyb3VwXG4gIGlmIChncm91cCAhPT0gJ25vZGVzJyAmJiBncm91cCAhPT0gJ2VkZ2VzJykge1xuICAgIGVycm9yKCdBbiBlbGVtZW50IG11c3QgYmUgb2YgdHlwZSBgbm9kZXNgIG9yIGBlZGdlc2A7IHlvdSBzcGVjaWZpZWQgYCcgKyBncm91cCArICdgJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbWFrZSB0aGUgZWxlbWVudCBhcnJheS1saWtlLCBqdXN0IGxpa2UgYSBjb2xsZWN0aW9uXG4gIHRoaXMubGVuZ3RoID0gMTtcbiAgdGhpc1swXSA9IHRoaXM7XG5cbiAgLy8gTk9URTogd2hlbiBzb21ldGhpbmcgaXMgYWRkZWQgaGVyZSwgYWRkIGFsc28gdG8gZWxlLmpzb24oKVxuICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0ge1xuICAgIGN5OiBjeSxcbiAgICBzaW5nbGU6IHRydWUsXG4gICAgLy8gaW5kaWNhdGVzIHRoaXMgaXMgYW4gZWxlbWVudFxuICAgIGRhdGE6IHBhcmFtcy5kYXRhIHx8IHt9LFxuICAgIC8vIGRhdGEgb2JqZWN0XG4gICAgcG9zaXRpb246IHBhcmFtcy5wb3NpdGlvbiB8fCB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgLy8gKHgsIHkpIHBvc2l0aW9uIHBhaXJcbiAgICBhdXRvV2lkdGg6IHVuZGVmaW5lZCxcbiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IG9mIG5vZGVzIGNhbGN1bGF0ZWQgYnkgdGhlIHJlbmRlcmVyIHdoZW4gc2V0IHRvIHNwZWNpYWwgJ2F1dG8nIHZhbHVlXG4gICAgYXV0b0hlaWdodDogdW5kZWZpbmVkLFxuICAgIGF1dG9QYWRkaW5nOiB1bmRlZmluZWQsXG4gICAgY29tcG91bmRCb3VuZHNDbGVhbjogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgY29tcG91bmQgZGltZW5zaW9ucyBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCB0aGUgbmV4dCB0aW1lIGRpbWVuc2lvbnMgYXJlIHJlYWRcbiAgICBsaXN0ZW5lcnM6IFtdLFxuICAgIC8vIGFycmF5IG9mIGJvdW5kIGxpc3RlbmVyc1xuICAgIGdyb3VwOiBncm91cCxcbiAgICAvLyBzdHJpbmc7ICdub2Rlcycgb3IgJ2VkZ2VzJ1xuICAgIHN0eWxlOiB7fSxcbiAgICAvLyBwcm9wZXJ0aWVzIGFzIHNldCBieSB0aGUgc3R5bGVcbiAgICByc3R5bGU6IHt9LFxuICAgIC8vIHByb3BlcnRpZXMgZm9yIHN0eWxlIHNlbnQgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGNvcmVcbiAgICBzdHlsZUN4dHM6IFtdLFxuICAgIC8vIGFwcGxpZWQgc3R5bGUgY29udGV4dHMgZnJvbSB0aGUgc3R5bGVyXG4gICAgc3R5bGVLZXlzOiB7fSxcbiAgICAvLyBwZXItZ3JvdXAga2V5cyBvZiBzdHlsZSBwcm9wZXJ0eSB2YWx1ZXNcbiAgICByZW1vdmVkOiB0cnVlLFxuICAgIC8vIHdoZXRoZXIgaXQncyBpbnNpZGUgdGhlIHZpczsgdHJ1ZSBpZiByZW1vdmVkIChzZXQgdHJ1ZSBoZXJlIHNpbmNlIHdlIGNhbGwgcmVzdG9yZSlcbiAgICBzZWxlY3RlZDogcGFyYW1zLnNlbGVjdGVkID8gdHJ1ZSA6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgaXQncyBzZWxlY3RlZFxuICAgIHNlbGVjdGFibGU6IHBhcmFtcy5zZWxlY3RhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcGFyYW1zLnNlbGVjdGFibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciBpdCdzIHNlbGVjdGFibGVcbiAgICBsb2NrZWQ6IHBhcmFtcy5sb2NrZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBsb2NrZWQgKGNhbm5vdCBiZSBtb3ZlZClcbiAgICBncmFiYmVkOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGdyYWJiZWQgYnkgdGhlIG1vdXNlOyByZW5kZXJlciBzZXRzIHRoaXMgcHJpdmF0ZWx5XG4gICAgZ3JhYmJhYmxlOiBwYXJhbXMuZ3JhYmJhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcGFyYW1zLmdyYWJiYWJsZSA/IHRydWUgOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBlbGVtZW50IGNhbiBiZSBncmFiYmVkXG4gICAgcGFubmFibGU6IHBhcmFtcy5wYW5uYWJsZSA9PT0gdW5kZWZpbmVkID8gZ3JvdXAgPT09ICdlZGdlcycgPyB0cnVlIDogZmFsc2UgOiBwYXJhbXMucGFubmFibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgcGFzc3Rocm91Z2ggcGFubmluZyBlbmFibGVkXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGFjdGl2ZSBmcm9tIHVzZXIgaW50ZXJhY3Rpb25cbiAgICBjbGFzc2VzOiBuZXcgU2V0JDEoKSxcbiAgICAvLyBtYXAgKCBjbGFzc05hbWUgPT4gdHJ1ZSApXG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAvLyBvYmplY3QgZm9yIGN1cnJlbnRseS1ydW5uaW5nIGFuaW1hdGlvbnNcbiAgICAgIGN1cnJlbnQ6IFtdLFxuICAgICAgcXVldWU6IFtdXG4gICAgfSxcbiAgICByc2NyYXRjaDoge30sXG4gICAgLy8gb2JqZWN0IGluIHdoaWNoIHRoZSByZW5kZXJlciBjYW4gc3RvcmUgaW5mb3JtYXRpb25cbiAgICBzY3JhdGNoOiBwYXJhbXMuc2NyYXRjaCB8fCB7fSxcbiAgICAvLyBzY3JhdGNoIG9iamVjdHNcbiAgICBlZGdlczogW10sXG4gICAgLy8gYXJyYXkgb2YgY29ubmVjdGVkIGVkZ2VzXG4gICAgY2hpbGRyZW46IFtdLFxuICAgIC8vIGFycmF5IG9mIGNoaWxkcmVuXG4gICAgcGFyZW50OiBwYXJhbXMucGFyZW50ICYmIHBhcmFtcy5wYXJlbnQuaXNOb2RlKCkgPyBwYXJhbXMucGFyZW50IDogbnVsbCxcbiAgICAvLyBwYXJlbnQgcmVmXG4gICAgdHJhdmVyc2FsQ2FjaGU6IHt9LFxuICAgIC8vIGNhY2hlIG9mIG91dHB1dCBvZiB0cmF2ZXJzYWwgZnVuY3Rpb25zXG4gICAgYmFja2dyb3VuZGluZzogZmFsc2UsXG4gICAgLy8gd2hldGhlciBiYWNrZ3JvdW5kIGltYWdlcyBhcmUgbG9hZGluZ1xuICAgIGJiQ2FjaGU6IG51bGwsXG4gICAgLy8gY2FjaGUgb2YgdGhlIGN1cnJlbnQgYm91bmRpbmcgYm94XG4gICAgYmJDYWNoZVNoaWZ0OiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgLy8gc2hpZnQgYXBwbGllZCB0byBjYWNoZWQgYmIgdG8gYmUgYXBwbGllZCBvbiBuZXh0IGdldFxuICAgIGJvZHlCb3VuZHM6IG51bGwsXG4gICAgLy8gYm91bmRzIGNhY2hlIG9mIGVsZW1lbnQgYm9keSwgdy9vIG92ZXJsYXlcbiAgICBvdmVybGF5Qm91bmRzOiBudWxsLFxuICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBlbGVtZW50IGJvZHksIGluY2x1ZGluZyBvdmVybGF5XG4gICAgbGFiZWxCb3VuZHM6IHtcbiAgICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBsYWJlbHNcbiAgICAgIGFsbDogbnVsbCxcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgIG1haW46IG51bGxcbiAgICB9LFxuICAgIGFycm93Qm91bmRzOiB7XG4gICAgICAvLyBib3VuZHMgY2FjaGUgb2YgZWRnZSBhcnJvd3NcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICdtaWQtc291cmNlJzogbnVsbCxcbiAgICAgICdtaWQtdGFyZ2V0JzogbnVsbFxuICAgIH1cbiAgfTtcbiAgaWYgKF9wLnBvc2l0aW9uLnggPT0gbnVsbCkge1xuICAgIF9wLnBvc2l0aW9uLnggPSAwO1xuICB9XG4gIGlmIChfcC5wb3NpdGlvbi55ID09IG51bGwpIHtcbiAgICBfcC5wb3NpdGlvbi55ID0gMDtcbiAgfVxuXG4gIC8vIHJlbmRlcmVkUG9zaXRpb24gb3ZlcnJpZGVzIGlmIHNwZWNpZmllZFxuICBpZiAocGFyYW1zLnJlbmRlcmVkUG9zaXRpb24pIHtcbiAgICB2YXIgcnBvcyA9IHBhcmFtcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICBfcC5wb3NpdGlvbiA9IHtcbiAgICAgIHg6IChycG9zLnggLSBwYW4ueCkgLyB6b29tLFxuICAgICAgeTogKHJwb3MueSAtIHBhbi55KSAvIHpvb21cbiAgICB9O1xuICB9XG4gIHZhciBjbGFzc2VzID0gW107XG4gIGlmIChhcnJheShwYXJhbXMuY2xhc3NlcykpIHtcbiAgICBjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXM7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHBhcmFtcy5jbGFzc2VzKSkge1xuICAgIGNsYXNzZXMgPSBwYXJhbXMuY2xhc3Nlcy5zcGxpdCgvXFxzKy8pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2xzID0gY2xhc3Nlc1tpXTtcbiAgICBpZiAoIWNscyB8fCBjbHMgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgX3AuY2xhc3Nlcy5hZGQoY2xzKTtcbiAgfVxuICB0aGlzLmNyZWF0ZUVtaXR0ZXIoKTtcbiAgdmFyIGJ5cGFzcyA9IHBhcmFtcy5zdHlsZSB8fCBwYXJhbXMuY3NzO1xuICBpZiAoYnlwYXNzKSB7XG4gICAgd2FybignU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLicpO1xuICAgIHRoaXMuc3R5bGUoYnlwYXNzKTtcbiAgfVxuICBpZiAocmVzdG9yZSA9PT0gdW5kZWZpbmVkIHx8IHJlc3RvcmUpIHtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgfVxufTtcblxudmFyIGRlZmluZVNlYXJjaCA9IGZ1bmN0aW9uIGRlZmluZVNlYXJjaChwYXJhbXMpIHtcbiAgcGFyYW1zID0ge1xuICAgIGJmczogcGFyYW1zLmJmcyB8fCAhcGFyYW1zLmRmcyxcbiAgICBkZnM6IHBhcmFtcy5kZnMgfHwgIXBhcmFtcy5iZnNcbiAgfTtcblxuICAvLyBmcm9tIHBzZXVkb2NvZGUgb24gd2lraXBlZGlhXG4gIHJldHVybiBmdW5jdGlvbiBzZWFyY2hGbihyb290cywgZm4sIGRpcmVjdGVkKSB7XG4gICAgdmFyIG9wdGlvbnM7XG4gICAgaWYgKHBsYWluT2JqZWN0KHJvb3RzKSAmJiAhZWxlbWVudE9yQ29sbGVjdGlvbihyb290cykpIHtcbiAgICAgIG9wdGlvbnMgPSByb290cztcbiAgICAgIHJvb3RzID0gb3B0aW9ucy5yb290cyB8fCBvcHRpb25zLnJvb3Q7XG4gICAgICBmbiA9IG9wdGlvbnMudmlzaXQ7XG4gICAgICBkaXJlY3RlZCA9IG9wdGlvbnMuZGlyZWN0ZWQ7XG4gICAgfVxuICAgIGRpcmVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAhZm4kNihmbikgPyBmbiA6IGRpcmVjdGVkO1xuICAgIGZuID0gZm4kNihmbikgPyBmbiA6IGZ1bmN0aW9uICgpIHt9O1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgdmFyIHYgPSByb290cyA9IHN0cmluZyhyb290cykgPyB0aGlzLmZpbHRlcihyb290cykgOiByb290cztcbiAgICB2YXIgUSA9IFtdO1xuICAgIHZhciBjb25uZWN0ZWROb2RlcyA9IFtdO1xuICAgIHZhciBjb25uZWN0ZWRCeSA9IHt9O1xuICAgIHZhciBpZDJkZXB0aCA9IHt9O1xuICAgIHZhciBWID0ge307XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBmb3VuZDtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuXG4gICAgLy8gZW5xdWV1ZSB2XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmkgPSB2W2ldO1xuICAgICAgdmFyIHZpSWQgPSB2aS5pZCgpO1xuICAgICAgaWYgKHZpLmlzTm9kZSgpKSB7XG4gICAgICAgIFEudW5zaGlmdCh2aSk7XG4gICAgICAgIGlmIChwYXJhbXMuYmZzKSB7XG4gICAgICAgICAgVlt2aUlkXSA9IHRydWU7XG4gICAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh2aSk7XG4gICAgICAgIH1cbiAgICAgICAgaWQyZGVwdGhbdmlJZF0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgIHZhciB2ID0gcGFyYW1zLmJmcyA/IFEuc2hpZnQoKSA6IFEucG9wKCk7XG4gICAgICB2YXIgdklkID0gdi5pZCgpO1xuICAgICAgaWYgKHBhcmFtcy5kZnMpIHtcbiAgICAgICAgaWYgKFZbdklkXSkge1xuICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgIH1cbiAgICAgICAgVlt2SWRdID0gdHJ1ZTtcbiAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh2KTtcbiAgICAgIH1cbiAgICAgIHZhciBkZXB0aCA9IGlkMmRlcHRoW3ZJZF07XG4gICAgICB2YXIgcHJldkVkZ2UgPSBjb25uZWN0ZWRCeVt2SWRdO1xuICAgICAgdmFyIHNyYyA9IHByZXZFZGdlICE9IG51bGwgPyBwcmV2RWRnZS5zb3VyY2UoKSA6IG51bGw7XG4gICAgICB2YXIgdGd0ID0gcHJldkVkZ2UgIT0gbnVsbCA/IHByZXZFZGdlLnRhcmdldCgpIDogbnVsbDtcbiAgICAgIHZhciBwcmV2Tm9kZSA9IHByZXZFZGdlID09IG51bGwgPyB1bmRlZmluZWQgOiB2LnNhbWUoc3JjKSA/IHRndFswXSA6IHNyY1swXTtcbiAgICAgIHZhciByZXQgPSB2b2lkIDA7XG4gICAgICByZXQgPSBmbih2LCBwcmV2RWRnZSwgcHJldk5vZGUsIGorKywgZGVwdGgpO1xuICAgICAgaWYgKHJldCA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZCA9IHY7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgICAgdmFyIHZ3RWRnZXMgPSB2LmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiAoIWRpcmVjdGVkIHx8IGUuc291cmNlKCkuc2FtZSh2KSkgJiYgZWRnZXMuaGFzKGUpO1xuICAgICAgfSk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCB2d0VkZ2VzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgdmFyIGUgPSB2d0VkZ2VzW19pMl07XG4gICAgICAgIHZhciB3ID0gZS5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgICAgIHJldHVybiAhbi5zYW1lKHYpICYmIG5vZGVzLmhhcyhuKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB3SWQgPSB3LmlkKCk7XG4gICAgICAgIGlmICh3Lmxlbmd0aCAhPT0gMCAmJiAhVlt3SWRdKSB7XG4gICAgICAgICAgdyA9IHdbMF07XG4gICAgICAgICAgUS5wdXNoKHcpO1xuICAgICAgICAgIGlmIChwYXJhbXMuYmZzKSB7XG4gICAgICAgICAgICBWW3dJZF0gPSB0cnVlO1xuICAgICAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh3KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29ubmVjdGVkQnlbd0lkXSA9IGU7XG4gICAgICAgICAgaWQyZGVwdGhbd0lkXSA9IGlkMmRlcHRoW3ZJZF0gKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoUS5sZW5ndGggIT09IDApIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoKTtcbiAgICAgIGlmIChfcmV0ID09PSBcImNvbnRpbnVlXCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICAgIHZhciBjb25uZWN0ZWRFbGVzID0gY3kuY29sbGVjdGlvbigpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb25uZWN0ZWROb2Rlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBub2RlID0gY29ubmVjdGVkTm9kZXNbX2ldO1xuICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRCeVtub2RlLmlkKCldO1xuICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xuICAgICAgICBjb25uZWN0ZWRFbGVzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgICBjb25uZWN0ZWRFbGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBjeS5jb2xsZWN0aW9uKGNvbm5lY3RlZEVsZXMpLFxuICAgICAgZm91bmQ6IGN5LmNvbGxlY3Rpb24oZm91bmQpXG4gICAgfTtcbiAgfTtcbn07XG5cbi8vIHNlYXJjaCwgc3Bhbm5pbmcgdHJlZXMsIGV0Y1xudmFyIGVsZXNmbiR2ID0ge1xuICBicmVhZHRoRmlyc3RTZWFyY2g6IGRlZmluZVNlYXJjaCh7XG4gICAgYmZzOiB0cnVlXG4gIH0pLFxuICBkZXB0aEZpcnN0U2VhcmNoOiBkZWZpbmVTZWFyY2goe1xuICAgIGRmczogdHJ1ZVxuICB9KVxufTtcblxuLy8gbmljZSwgc2hvcnQgbWF0aGVtYXRpY2FsIGFsaWFzXG5lbGVzZm4kdi5iZnMgPSBlbGVzZm4kdi5icmVhZHRoRmlyc3RTZWFyY2g7XG5lbGVzZm4kdi5kZnMgPSBlbGVzZm4kdi5kZXB0aEZpcnN0U2VhcmNoO1xuXG52YXIgaGVhcCQxID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjguMFxuKGZ1bmN0aW9uKCkge1xuICB2YXIgSGVhcCwgZGVmYXVsdENtcCwgZmxvb3IsIGhlYXBpZnksIGhlYXBwb3AsIGhlYXBwdXNoLCBoZWFwcHVzaHBvcCwgaGVhcHJlcGxhY2UsIGluc29ydCwgbWluLCBubGFyZ2VzdCwgbnNtYWxsZXN0LCB1cGRhdGVJdGVtLCBfc2lmdGRvd24sIF9zaWZ0dXA7XG5cbiAgZmxvb3IgPSBNYXRoLmZsb29yLCBtaW4gPSBNYXRoLm1pbjtcblxuXG4gIC8qXG4gIERlZmF1bHQgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSB1c2VkXG4gICAqL1xuXG4gIGRlZmF1bHRDbXAgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgaWYgKHggPCB5KSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICh4ID4geSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9O1xuXG5cbiAgLypcbiAgSW5zZXJ0IGl0ZW0geCBpbiBsaXN0IGEsIGFuZCBrZWVwIGl0IHNvcnRlZCBhc3N1bWluZyBhIGlzIHNvcnRlZC5cbiAgXG4gIElmIHggaXMgYWxyZWFkeSBpbiBhLCBpbnNlcnQgaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgeC5cbiAgXG4gIE9wdGlvbmFsIGFyZ3MgbG8gKGRlZmF1bHQgMCkgYW5kIGhpIChkZWZhdWx0IGEubGVuZ3RoKSBib3VuZCB0aGUgc2xpY2VcbiAgb2YgYSB0byBiZSBzZWFyY2hlZC5cbiAgICovXG5cbiAgaW5zb3J0ID0gZnVuY3Rpb24oYSwgeCwgbG8sIGhpLCBjbXApIHtcbiAgICB2YXIgbWlkO1xuICAgIGlmIChsbyA9PSBudWxsKSB7XG4gICAgICBsbyA9IDA7XG4gICAgfVxuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgaWYgKGxvIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsbyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgIH1cbiAgICBpZiAoaGkgPT0gbnVsbCkge1xuICAgICAgaGkgPSBhLmxlbmd0aDtcbiAgICB9XG4gICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgIG1pZCA9IGZsb29yKChsbyArIGhpKSAvIDIpO1xuICAgICAgaWYgKGNtcCh4LCBhW21pZF0pIDwgMCkge1xuICAgICAgICBoaSA9IG1pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvID0gbWlkICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChbXS5zcGxpY2UuYXBwbHkoYSwgW2xvLCBsbyAtIGxvXS5jb25jYXQoeCkpLCB4KTtcbiAgfTtcblxuXG4gIC8qXG4gIFB1c2ggaXRlbSBvbnRvIGhlYXAsIG1haW50YWluaW5nIHRoZSBoZWFwIGludmFyaWFudC5cbiAgICovXG5cbiAgaGVhcHB1c2ggPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICBhcnJheS5wdXNoKGl0ZW0pO1xuICAgIHJldHVybiBfc2lmdGRvd24oYXJyYXksIDAsIGFycmF5Lmxlbmd0aCAtIDEsIGNtcCk7XG4gIH07XG5cblxuICAvKlxuICBQb3AgdGhlIHNtYWxsZXN0IGl0ZW0gb2ZmIHRoZSBoZWFwLCBtYWludGFpbmluZyB0aGUgaGVhcCBpbnZhcmlhbnQuXG4gICAqL1xuXG4gIGhlYXBwb3AgPSBmdW5jdGlvbihhcnJheSwgY21wKSB7XG4gICAgdmFyIGxhc3RlbHQsIHJldHVybml0ZW07XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICBsYXN0ZWx0ID0gYXJyYXkucG9wKCk7XG4gICAgaWYgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuaXRlbSA9IGFycmF5WzBdO1xuICAgICAgYXJyYXlbMF0gPSBsYXN0ZWx0O1xuICAgICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuaXRlbSA9IGxhc3RlbHQ7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5pdGVtO1xuICB9O1xuXG5cbiAgLypcbiAgUG9wIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgc21hbGxlc3QgdmFsdWUsIGFuZCBhZGQgdGhlIG5ldyBpdGVtLlxuICBcbiAgVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGhlYXBwb3AoKSBmb2xsb3dlZCBieSBoZWFwcHVzaCgpLCBhbmQgY2FuIGJlXG4gIG1vcmUgYXBwcm9wcmlhdGUgd2hlbiB1c2luZyBhIGZpeGVkIHNpemUgaGVhcC4gTm90ZSB0aGF0IHRoZSB2YWx1ZVxuICByZXR1cm5lZCBtYXkgYmUgbGFyZ2VyIHRoYW4gaXRlbSEgVGhhdCBjb25zdHJhaW5zIHJlYXNvbmFibGUgdXNlIG9mXG4gIHRoaXMgcm91dGluZSB1bmxlc3Mgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgcmVwbGFjZW1lbnQ6XG4gICAgICBpZiBpdGVtID4gYXJyYXlbMF1cbiAgICAgICAgaXRlbSA9IGhlYXByZXBsYWNlKGFycmF5LCBpdGVtKVxuICAgKi9cblxuICBoZWFwcmVwbGFjZSA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjbXApIHtcbiAgICB2YXIgcmV0dXJuaXRlbTtcbiAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgfVxuICAgIHJldHVybml0ZW0gPSBhcnJheVswXTtcbiAgICBhcnJheVswXSA9IGl0ZW07XG4gICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcbiAgICByZXR1cm4gcmV0dXJuaXRlbTtcbiAgfTtcblxuXG4gIC8qXG4gIEZhc3QgdmVyc2lvbiBvZiBhIGhlYXBwdXNoIGZvbGxvd2VkIGJ5IGEgaGVhcHBvcC5cbiAgICovXG5cbiAgaGVhcHB1c2hwb3AgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG4gICAgdmFyIF9yZWY7XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICBpZiAoYXJyYXkubGVuZ3RoICYmIGNtcChhcnJheVswXSwgaXRlbSkgPCAwKSB7XG4gICAgICBfcmVmID0gW2FycmF5WzBdLCBpdGVtXSwgaXRlbSA9IF9yZWZbMF0sIGFycmF5WzBdID0gX3JlZlsxXTtcbiAgICAgIF9zaWZ0dXAoYXJyYXksIDAsIGNtcCk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9O1xuXG5cbiAgLypcbiAgVHJhbnNmb3JtIGxpc3QgaW50byBhIGhlYXAsIGluLXBsYWNlLCBpbiBPKGFycmF5Lmxlbmd0aCkgdGltZS5cbiAgICovXG5cbiAgaGVhcGlmeSA9IGZ1bmN0aW9uKGFycmF5LCBjbXApIHtcbiAgICB2YXIgaSwgX2ksIF9sZW4sIF9yZWYxLCBfcmVzdWx0cywgX3Jlc3VsdHMxO1xuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgX3JlZjEgPSAoZnVuY3Rpb24oKSB7XG4gICAgICBfcmVzdWx0czEgPSBbXTtcbiAgICAgIGZvciAodmFyIF9qID0gMCwgX3JlZiA9IGZsb29yKGFycmF5Lmxlbmd0aCAvIDIpOyAwIDw9IF9yZWYgPyBfaiA8IF9yZWYgOiBfaiA+IF9yZWY7IDAgPD0gX3JlZiA/IF9qKysgOiBfai0tKXsgX3Jlc3VsdHMxLnB1c2goX2opOyB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHMxO1xuICAgIH0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKTtcbiAgICBfcmVzdWx0cyA9IFtdO1xuICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGkgPSBfcmVmMVtfaV07XG4gICAgICBfcmVzdWx0cy5wdXNoKF9zaWZ0dXAoYXJyYXksIGksIGNtcCkpO1xuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHM7XG4gIH07XG5cblxuICAvKlxuICBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBnaXZlbiBpdGVtIGluIHRoZSBoZWFwLlxuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgaXRlbSBpcyBiZWluZyBtb2RpZmllZC5cbiAgICovXG5cbiAgdXBkYXRlSXRlbSA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjbXApIHtcbiAgICB2YXIgcG9zO1xuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgcG9zID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfc2lmdGRvd24oYXJyYXksIDAsIHBvcywgY21wKTtcbiAgICByZXR1cm4gX3NpZnR1cChhcnJheSwgcG9zLCBjbXApO1xuICB9O1xuXG5cbiAgLypcbiAgRmluZCB0aGUgbiBsYXJnZXN0IGVsZW1lbnRzIGluIGEgZGF0YXNldC5cbiAgICovXG5cbiAgbmxhcmdlc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgY21wKSB7XG4gICAgdmFyIGVsZW0sIHJlc3VsdCwgX2ksIF9sZW4sIF9yZWY7XG4gICAgaWYgKGNtcCA9PSBudWxsKSB7XG4gICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuICAgIH1cbiAgICByZXN1bHQgPSBhcnJheS5zbGljZSgwLCBuKTtcbiAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGhlYXBpZnkocmVzdWx0LCBjbXApO1xuICAgIF9yZWYgPSBhcnJheS5zbGljZShuKTtcbiAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGVsZW0gPSBfcmVmW19pXTtcbiAgICAgIGhlYXBwdXNocG9wKHJlc3VsdCwgZWxlbSwgY21wKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KGNtcCkucmV2ZXJzZSgpO1xuICB9O1xuXG5cbiAgLypcbiAgRmluZCB0aGUgbiBzbWFsbGVzdCBlbGVtZW50cyBpbiBhIGRhdGFzZXQuXG4gICAqL1xuXG4gIG5zbWFsbGVzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBjbXApIHtcbiAgICB2YXIgZWxlbSwgbG9zLCByZXN1bHQsIF9pLCBfaiwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuICAgIGlmIChjbXAgPT0gbnVsbCkge1xuICAgICAgY21wID0gZGVmYXVsdENtcDtcbiAgICB9XG4gICAgaWYgKG4gKiAxMCA8PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IGFycmF5LnNsaWNlKDAsIG4pLnNvcnQoY21wKTtcbiAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgbG9zID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIF9yZWYgPSBhcnJheS5zbGljZShuKTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBlbGVtID0gX3JlZltfaV07XG4gICAgICAgIGlmIChjbXAoZWxlbSwgbG9zKSA8IDApIHtcbiAgICAgICAgICBpbnNvcnQocmVzdWx0LCBlbGVtLCAwLCBudWxsLCBjbXApO1xuICAgICAgICAgIHJlc3VsdC5wb3AoKTtcbiAgICAgICAgICBsb3MgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBoZWFwaWZ5KGFycmF5LCBjbXApO1xuICAgIF9yZXN1bHRzID0gW107XG4gICAgZm9yIChfaiA9IDAsIF9yZWYxID0gbWluKG4sIGFycmF5Lmxlbmd0aCk7IDAgPD0gX3JlZjEgPyBfaiA8IF9yZWYxIDogX2ogPiBfcmVmMTsgMCA8PSBfcmVmMSA/ICsrX2ogOiAtLV9qKSB7XG4gICAgICBfcmVzdWx0cy5wdXNoKGhlYXBwb3AoYXJyYXksIGNtcCkpO1xuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHM7XG4gIH07XG5cbiAgX3NpZnRkb3duID0gZnVuY3Rpb24oYXJyYXksIHN0YXJ0cG9zLCBwb3MsIGNtcCkge1xuICAgIHZhciBuZXdpdGVtLCBwYXJlbnQsIHBhcmVudHBvcztcbiAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgfVxuICAgIG5ld2l0ZW0gPSBhcnJheVtwb3NdO1xuICAgIHdoaWxlIChwb3MgPiBzdGFydHBvcykge1xuICAgICAgcGFyZW50cG9zID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICBwYXJlbnQgPSBhcnJheVtwYXJlbnRwb3NdO1xuICAgICAgaWYgKGNtcChuZXdpdGVtLCBwYXJlbnQpIDwgMCkge1xuICAgICAgICBhcnJheVtwb3NdID0gcGFyZW50O1xuICAgICAgICBwb3MgPSBwYXJlbnRwb3M7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBhcnJheVtwb3NdID0gbmV3aXRlbTtcbiAgfTtcblxuICBfc2lmdHVwID0gZnVuY3Rpb24oYXJyYXksIHBvcywgY21wKSB7XG4gICAgdmFyIGNoaWxkcG9zLCBlbmRwb3MsIG5ld2l0ZW0sIHJpZ2h0cG9zLCBzdGFydHBvcztcbiAgICBpZiAoY21wID09IG51bGwpIHtcbiAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG4gICAgfVxuICAgIGVuZHBvcyA9IGFycmF5Lmxlbmd0aDtcbiAgICBzdGFydHBvcyA9IHBvcztcbiAgICBuZXdpdGVtID0gYXJyYXlbcG9zXTtcbiAgICBjaGlsZHBvcyA9IDIgKiBwb3MgKyAxO1xuICAgIHdoaWxlIChjaGlsZHBvcyA8IGVuZHBvcykge1xuICAgICAgcmlnaHRwb3MgPSBjaGlsZHBvcyArIDE7XG4gICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MgJiYgIShjbXAoYXJyYXlbY2hpbGRwb3NdLCBhcnJheVtyaWdodHBvc10pIDwgMCkpIHtcbiAgICAgICAgY2hpbGRwb3MgPSByaWdodHBvcztcbiAgICAgIH1cbiAgICAgIGFycmF5W3Bvc10gPSBhcnJheVtjaGlsZHBvc107XG4gICAgICBwb3MgPSBjaGlsZHBvcztcbiAgICAgIGNoaWxkcG9zID0gMiAqIHBvcyArIDE7XG4gICAgfVxuICAgIGFycmF5W3Bvc10gPSBuZXdpdGVtO1xuICAgIHJldHVybiBfc2lmdGRvd24oYXJyYXksIHN0YXJ0cG9zLCBwb3MsIGNtcCk7XG4gIH07XG5cbiAgSGVhcCA9IChmdW5jdGlvbigpIHtcbiAgICBIZWFwLnB1c2ggPSBoZWFwcHVzaDtcblxuICAgIEhlYXAucG9wID0gaGVhcHBvcDtcblxuICAgIEhlYXAucmVwbGFjZSA9IGhlYXByZXBsYWNlO1xuXG4gICAgSGVhcC5wdXNocG9wID0gaGVhcHB1c2hwb3A7XG5cbiAgICBIZWFwLmhlYXBpZnkgPSBoZWFwaWZ5O1xuXG4gICAgSGVhcC51cGRhdGVJdGVtID0gdXBkYXRlSXRlbTtcblxuICAgIEhlYXAubmxhcmdlc3QgPSBubGFyZ2VzdDtcblxuICAgIEhlYXAubnNtYWxsZXN0ID0gbnNtYWxsZXN0O1xuXG4gICAgZnVuY3Rpb24gSGVhcChjbXApIHtcbiAgICAgIHRoaXMuY21wID0gY21wICE9IG51bGwgPyBjbXAgOiBkZWZhdWx0Q21wO1xuICAgICAgdGhpcy5ub2RlcyA9IFtdO1xuICAgIH1cblxuICAgIEhlYXAucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gaGVhcHB1c2godGhpcy5ub2RlcywgeCwgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBoZWFwcG9wKHRoaXMubm9kZXMsIHRoaXMuY21wKTtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXNbMF07XG4gICAgfTtcblxuICAgIEhlYXAucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZih4KSAhPT0gLTE7XG4gICAgfTtcblxuICAgIEhlYXAucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gaGVhcHJlcGxhY2UodGhpcy5ub2RlcywgeCwgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5wdXNocG9wID0gZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIGhlYXBwdXNocG9wKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUuaGVhcGlmeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGhlYXBpZnkodGhpcy5ub2RlcywgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS51cGRhdGVJdGVtID0gZnVuY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUl0ZW0odGhpcy5ub2RlcywgeCwgdGhpcy5jbXApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMgPSBbXTtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICB9O1xuXG4gICAgSGVhcC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhlYXA7XG4gICAgICBoZWFwID0gbmV3IEhlYXAoKTtcbiAgICAgIGhlYXAubm9kZXMgPSB0aGlzLm5vZGVzLnNsaWNlKDApO1xuICAgICAgcmV0dXJuIGhlYXA7XG4gICAgfTtcblxuICAgIEhlYXAucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApO1xuICAgIH07XG5cbiAgICBIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBIZWFwLnByb3RvdHlwZS5wdXNoO1xuXG4gICAgSGVhcC5wcm90b3R5cGUudG9wID0gSGVhcC5wcm90b3R5cGUucGVlaztcblxuICAgIEhlYXAucHJvdG90eXBlLmZyb250ID0gSGVhcC5wcm90b3R5cGUucGVlaztcblxuICAgIEhlYXAucHJvdG90eXBlLmhhcyA9IEhlYXAucHJvdG90eXBlLmNvbnRhaW5zO1xuXG4gICAgSGVhcC5wcm90b3R5cGUuY29weSA9IEhlYXAucHJvdG90eXBlLmNsb25lO1xuXG4gICAgcmV0dXJuIEhlYXA7XG5cbiAgfSkoKTtcblxuICAoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIHtcbiAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9XG4gIH0pKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBIZWFwO1xuICB9KTtcblxufSkuY2FsbChjb21tb25qc0dsb2JhbCk7XG59KTtcblxudmFyIGhlYXAgPSBoZWFwJDE7XG5cbnZhciBkaWprc3RyYURlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHJvb3Q6IG51bGwsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZGlyZWN0ZWQ6IGZhbHNlXG59KTtcbnZhciBlbGVzZm4kdSA9IHtcbiAgZGlqa3N0cmE6IGZ1bmN0aW9uIGRpamtzdHJhKG9wdGlvbnMpIHtcbiAgICBpZiAoIXBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHJvb3Q6IGFyZ3NbMF0sXG4gICAgICAgIHdlaWdodDogYXJnc1sxXSxcbiAgICAgICAgZGlyZWN0ZWQ6IGFyZ3NbMl1cbiAgICAgIH07XG4gICAgfVxuICAgIHZhciBfZGlqa3N0cmFEZWZhdWx0cyA9IGRpamtzdHJhRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICByb290ID0gX2RpamtzdHJhRGVmYXVsdHMucm9vdCxcbiAgICAgIHdlaWdodCA9IF9kaWprc3RyYURlZmF1bHRzLndlaWdodCxcbiAgICAgIGRpcmVjdGVkID0gX2RpamtzdHJhRGVmYXVsdHMuZGlyZWN0ZWQ7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciB3ZWlnaHRGbiA9IHdlaWdodDtcbiAgICB2YXIgc291cmNlID0gc3RyaW5nKHJvb3QpID8gdGhpcy5maWx0ZXIocm9vdClbMF0gOiByb290WzBdO1xuICAgIHZhciBkaXN0ID0ge307XG4gICAgdmFyIHByZXYgPSB7fTtcbiAgICB2YXIga25vd25EaXN0ID0ge307XG4gICAgdmFyIF90aGlzJGJ5R3JvdXAgPSB0aGlzLmJ5R3JvdXAoKSxcbiAgICAgIG5vZGVzID0gX3RoaXMkYnlHcm91cC5ub2RlcyxcbiAgICAgIGVkZ2VzID0gX3RoaXMkYnlHcm91cC5lZGdlcztcbiAgICBlZGdlcy51bm1lcmdlQnkoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0xvb3AoKTtcbiAgICB9KTtcbiAgICB2YXIgZ2V0RGlzdCA9IGZ1bmN0aW9uIGdldERpc3Qobm9kZSkge1xuICAgICAgcmV0dXJuIGRpc3Rbbm9kZS5pZCgpXTtcbiAgICB9O1xuICAgIHZhciBzZXREaXN0ID0gZnVuY3Rpb24gc2V0RGlzdChub2RlLCBkKSB7XG4gICAgICBkaXN0W25vZGUuaWQoKV0gPSBkO1xuICAgICAgUS51cGRhdGVJdGVtKG5vZGUpO1xuICAgIH07XG4gICAgdmFyIFEgPSBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGdldERpc3QoYSkgLSBnZXREaXN0KGIpO1xuICAgIH0pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICBkaXN0W25vZGUuaWQoKV0gPSBub2RlLnNhbWUoc291cmNlKSA/IDAgOiBJbmZpbml0eTtcbiAgICAgIFEucHVzaChub2RlKTtcbiAgICB9XG4gICAgdmFyIGRpc3RCZXR3ZWVuID0gZnVuY3Rpb24gZGlzdEJldHdlZW4odSwgdikge1xuICAgICAgdmFyIHV2cyA9IChkaXJlY3RlZCA/IHUuZWRnZXNUbyh2KSA6IHUuZWRnZXNXaXRoKHYpKS5pbnRlcnNlY3QoZWRnZXMpO1xuICAgICAgdmFyIHNtYWxsZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgIHZhciBzbWFsbGVzdEVkZ2U7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdXZzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZWRnZSA9IHV2c1tfaV07XG4gICAgICAgIHZhciBfd2VpZ2h0ID0gd2VpZ2h0Rm4oZWRnZSk7XG4gICAgICAgIGlmIChfd2VpZ2h0IDwgc21hbGxlc3REaXN0YW5jZSB8fCAhc21hbGxlc3RFZGdlKSB7XG4gICAgICAgICAgc21hbGxlc3REaXN0YW5jZSA9IF93ZWlnaHQ7XG4gICAgICAgICAgc21hbGxlc3RFZGdlID0gZWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRnZTogc21hbGxlc3RFZGdlLFxuICAgICAgICBkaXN0OiBzbWFsbGVzdERpc3RhbmNlXG4gICAgICB9O1xuICAgIH07XG4gICAgd2hpbGUgKFEuc2l6ZSgpID4gMCkge1xuICAgICAgdmFyIHUgPSBRLnBvcCgpO1xuICAgICAgdmFyIHNtYWxsZXRzRGlzdCA9IGdldERpc3QodSk7XG4gICAgICB2YXIgdWlkID0gdS5pZCgpO1xuICAgICAga25vd25EaXN0W3VpZF0gPSBzbWFsbGV0c0Rpc3Q7XG4gICAgICBpZiAoc21hbGxldHNEaXN0ID09PSBJbmZpbml0eSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBuZWlnaGJvcnMgPSB1Lm5laWdoYm9yaG9vZCgpLmludGVyc2VjdChub2Rlcyk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBuZWlnaGJvcnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgdiA9IG5laWdoYm9yc1tfaTJdO1xuICAgICAgICB2YXIgdmlkID0gdi5pZCgpO1xuICAgICAgICB2YXIgdkRpc3QgPSBkaXN0QmV0d2Vlbih1LCB2KTtcbiAgICAgICAgdmFyIGFsdCA9IHNtYWxsZXRzRGlzdCArIHZEaXN0LmRpc3Q7XG4gICAgICAgIGlmIChhbHQgPCBnZXREaXN0KHYpKSB7XG4gICAgICAgICAgc2V0RGlzdCh2LCBhbHQpO1xuICAgICAgICAgIHByZXZbdmlkXSA9IHtcbiAgICAgICAgICAgIG5vZGU6IHUsXG4gICAgICAgICAgICBlZGdlOiB2RGlzdC5lZGdlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBmb3JcbiAgICB9IC8vIHdoaWxlXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzdGFuY2VUbzogZnVuY3Rpb24gZGlzdGFuY2VUbyhub2RlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBzdHJpbmcobm9kZSkgPyBub2Rlcy5maWx0ZXIobm9kZSlbMF0gOiBub2RlWzBdO1xuICAgICAgICByZXR1cm4ga25vd25EaXN0W3RhcmdldC5pZCgpXTtcbiAgICAgIH0sXG4gICAgICBwYXRoVG86IGZ1bmN0aW9uIHBhdGhUbyhub2RlKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBzdHJpbmcobm9kZSkgPyBub2Rlcy5maWx0ZXIobm9kZSlbMF0gOiBub2RlWzBdO1xuICAgICAgICB2YXIgUyA9IFtdO1xuICAgICAgICB2YXIgdSA9IHRhcmdldDtcbiAgICAgICAgdmFyIHVpZCA9IHUuaWQoKTtcbiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgUy51bnNoaWZ0KHRhcmdldCk7XG4gICAgICAgICAgd2hpbGUgKHByZXZbdWlkXSkge1xuICAgICAgICAgICAgdmFyIHAgPSBwcmV2W3VpZF07XG4gICAgICAgICAgICBTLnVuc2hpZnQocC5lZGdlKTtcbiAgICAgICAgICAgIFMudW5zaGlmdChwLm5vZGUpO1xuICAgICAgICAgICAgdSA9IHAubm9kZTtcbiAgICAgICAgICAgIHVpZCA9IHUuaWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZXMuc3Bhd24oUyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIGVsZXNmbiR0ID0ge1xuICAvLyBrcnVza2FsJ3MgYWxnb3JpdGhtIChmaW5kcyBtaW4gc3Bhbm5pbmcgdHJlZSwgYXNzdW1pbmcgdW5kaXJlY3RlZCBncmFwaClcbiAgLy8gaW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gIGtydXNrYWw6IGZ1bmN0aW9uIGtydXNrYWwod2VpZ2h0Rm4pIHtcbiAgICB3ZWlnaHRGbiA9IHdlaWdodEZuIHx8IGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9O1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgdmFyIG51bU5vZGVzID0gbm9kZXMubGVuZ3RoO1xuICAgIHZhciBmb3Jlc3QgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciBBID0gbm9kZXM7IC8vIGFzc3VtZXMgYnlHcm91cCgpIGNyZWF0ZXMgbmV3IGNvbGxlY3Rpb25zIHRoYXQgY2FuIGJlIHNhZmVseSBtdXRhdGVkXG5cbiAgICB2YXIgZmluZFNldEluZGV4ID0gZnVuY3Rpb24gZmluZFNldEluZGV4KGVsZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZXMgPSBmb3Jlc3RbaV07XG4gICAgICAgIGlmIChlbGVzLmhhcyhlbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gc3RhcnQgd2l0aCBvbmUgZm9yZXN0IHBlciBub2RlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Ob2RlczsgaSsrKSB7XG4gICAgICBmb3Jlc3RbaV0gPSB0aGlzLnNwYXduKG5vZGVzW2ldKTtcbiAgICB9XG4gICAgdmFyIFMgPSBlZGdlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gd2VpZ2h0Rm4oYSkgLSB3ZWlnaHRGbihiKTtcbiAgICB9KTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgUy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBlZGdlID0gU1tfaV07XG4gICAgICB2YXIgdSA9IGVkZ2Uuc291cmNlKClbMF07XG4gICAgICB2YXIgdiA9IGVkZ2UudGFyZ2V0KClbMF07XG4gICAgICB2YXIgc2V0VUluZGV4ID0gZmluZFNldEluZGV4KHUpO1xuICAgICAgdmFyIHNldFZJbmRleCA9IGZpbmRTZXRJbmRleCh2KTtcbiAgICAgIHZhciBzZXRVID0gZm9yZXN0W3NldFVJbmRleF07XG4gICAgICB2YXIgc2V0ViA9IGZvcmVzdFtzZXRWSW5kZXhdO1xuICAgICAgaWYgKHNldFVJbmRleCAhPT0gc2V0VkluZGV4KSB7XG4gICAgICAgIEEubWVyZ2UoZWRnZSk7XG5cbiAgICAgICAgLy8gY29tYmluZSBmb3Jlc3RzIGZvciB1IGFuZCB2XG4gICAgICAgIHNldFUubWVyZ2Uoc2V0Vik7XG4gICAgICAgIGZvcmVzdC5zcGxpY2Uoc2V0VkluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEE7XG4gIH1cbn07XG5cbnZhciBhU3RhckRlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHJvb3Q6IG51bGwsXG4gIGdvYWw6IG51bGwsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgaGV1cmlzdGljOiBmdW5jdGlvbiBoZXVyaXN0aWMoZWRnZSkge1xuICAgIHJldHVybiAwO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRzID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgYVN0YXI6IGZ1bmN0aW9uIGFTdGFyKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIF9hU3RhckRlZmF1bHRzID0gYVN0YXJEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgIHJvb3QgPSBfYVN0YXJEZWZhdWx0cy5yb290LFxuICAgICAgZ29hbCA9IF9hU3RhckRlZmF1bHRzLmdvYWwsXG4gICAgICBoZXVyaXN0aWMgPSBfYVN0YXJEZWZhdWx0cy5oZXVyaXN0aWMsXG4gICAgICBkaXJlY3RlZCA9IF9hU3RhckRlZmF1bHRzLmRpcmVjdGVkLFxuICAgICAgd2VpZ2h0ID0gX2FTdGFyRGVmYXVsdHMud2VpZ2h0O1xuICAgIHJvb3QgPSBjeS5jb2xsZWN0aW9uKHJvb3QpWzBdO1xuICAgIGdvYWwgPSBjeS5jb2xsZWN0aW9uKGdvYWwpWzBdO1xuICAgIHZhciBzaWQgPSByb290LmlkKCk7XG4gICAgdmFyIHRpZCA9IGdvYWwuaWQoKTtcbiAgICB2YXIgZ1Njb3JlID0ge307XG4gICAgdmFyIGZTY29yZSA9IHt9O1xuICAgIHZhciBjbG9zZWRTZXRJZHMgPSB7fTtcbiAgICB2YXIgb3BlblNldCA9IG5ldyBoZWFwKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZlNjb3JlW2EuaWQoKV0gLSBmU2NvcmVbYi5pZCgpXTtcbiAgICB9KTtcbiAgICB2YXIgb3BlblNldElkcyA9IG5ldyBTZXQkMSgpO1xuICAgIHZhciBjYW1lRnJvbSA9IHt9O1xuICAgIHZhciBjYW1lRnJvbUVkZ2UgPSB7fTtcbiAgICB2YXIgYWRkVG9PcGVuU2V0ID0gZnVuY3Rpb24gYWRkVG9PcGVuU2V0KGVsZSwgaWQpIHtcbiAgICAgIG9wZW5TZXQucHVzaChlbGUpO1xuICAgICAgb3BlblNldElkcy5hZGQoaWQpO1xuICAgIH07XG4gICAgdmFyIGNNaW4sIGNNaW5JZDtcbiAgICB2YXIgcG9wRnJvbU9wZW5TZXQgPSBmdW5jdGlvbiBwb3BGcm9tT3BlblNldCgpIHtcbiAgICAgIGNNaW4gPSBvcGVuU2V0LnBvcCgpO1xuICAgICAgY01pbklkID0gY01pbi5pZCgpO1xuICAgICAgb3BlblNldElkc1tcImRlbGV0ZVwiXShjTWluSWQpO1xuICAgIH07XG4gICAgdmFyIGlzSW5PcGVuU2V0ID0gZnVuY3Rpb24gaXNJbk9wZW5TZXQoaWQpIHtcbiAgICAgIHJldHVybiBvcGVuU2V0SWRzLmhhcyhpZCk7XG4gICAgfTtcbiAgICBhZGRUb09wZW5TZXQocm9vdCwgc2lkKTtcbiAgICBnU2NvcmVbc2lkXSA9IDA7XG4gICAgZlNjb3JlW3NpZF0gPSBoZXVyaXN0aWMocm9vdCk7XG5cbiAgICAvLyBDb3VudGVyXG4gICAgdmFyIHN0ZXBzID0gMDtcblxuICAgIC8vIE1haW4gbG9vcFxuICAgIHdoaWxlIChvcGVuU2V0LnNpemUoKSA+IDApIHtcbiAgICAgIHBvcEZyb21PcGVuU2V0KCk7XG4gICAgICBzdGVwcysrO1xuXG4gICAgICAvLyBJZiB3ZSd2ZSBmb3VuZCBvdXIgZ29hbCwgdGhlbiB3ZSBhcmUgZG9uZVxuICAgICAgaWYgKGNNaW5JZCA9PT0gdGlkKSB7XG4gICAgICAgIHZhciBwYXRoID0gW107XG4gICAgICAgIHZhciBwYXRoTm9kZSA9IGdvYWw7XG4gICAgICAgIHZhciBwYXRoTm9kZUlkID0gdGlkO1xuICAgICAgICB2YXIgcGF0aEVkZ2UgPSBjYW1lRnJvbUVkZ2VbcGF0aE5vZGVJZF07XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICBwYXRoLnVuc2hpZnQocGF0aE5vZGUpO1xuICAgICAgICAgIGlmIChwYXRoRWRnZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBwYXRoLnVuc2hpZnQocGF0aEVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoTm9kZSA9IGNhbWVGcm9tW3BhdGhOb2RlSWRdO1xuICAgICAgICAgIGlmIChwYXRoTm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0aE5vZGVJZCA9IHBhdGhOb2RlLmlkKCk7XG4gICAgICAgICAgcGF0aEVkZ2UgPSBjYW1lRnJvbUVkZ2VbcGF0aE5vZGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmb3VuZDogdHJ1ZSxcbiAgICAgICAgICBkaXN0YW5jZTogZ1Njb3JlW2NNaW5JZF0sXG4gICAgICAgICAgcGF0aDogdGhpcy5zcGF3bihwYXRoKSxcbiAgICAgICAgICBzdGVwczogc3RlcHNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGNNaW4gdG8gcHJvY2Vzc2VkIG5vZGVzXG4gICAgICBjbG9zZWRTZXRJZHNbY01pbklkXSA9IHRydWU7XG5cbiAgICAgIC8vIFVwZGF0ZSBzY29yZXMgZm9yIG5laWdoYm9ycyBvZiBjTWluXG4gICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBpZiBncmFwaCBpcyBkaXJlY3RlZCBvciBub3RcbiAgICAgIHZhciB2d0VkZ2VzID0gY01pbi5fcHJpdmF0ZS5lZGdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdndFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZSA9IHZ3RWRnZXNbaV07XG5cbiAgICAgICAgLy8gZWRnZSBtdXN0IGJlIGluIHNldCBvZiBjYWxsaW5nIGVsZXNcbiAgICAgICAgaWYgKCF0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZS5pZCgpKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY01pbiBtdXN0IGJlIHRoZSBzb3VyY2Ugb2YgZWRnZSBpZiBkaXJlY3RlZFxuICAgICAgICBpZiAoZGlyZWN0ZWQgJiYgZS5kYXRhKCdzb3VyY2UnKSAhPT0gY01pbklkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdTcmMgPSBlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgd1RndCA9IGUudGFyZ2V0KCk7XG4gICAgICAgIHZhciB3ID0gd1NyYy5pZCgpICE9PSBjTWluSWQgPyB3U3JjIDogd1RndDtcbiAgICAgICAgdmFyIHdpZCA9IHcuaWQoKTtcblxuICAgICAgICAvLyBub2RlIG11c3QgYmUgaW4gc2V0IG9mIGNhbGxpbmcgZWxlc1xuICAgICAgICBpZiAoIXRoaXMuaGFzRWxlbWVudFdpdGhJZCh3aWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBub2RlIGlzIGluIGNsb3NlZFNldCwgaWdub3JlIGl0XG4gICAgICAgIGlmIChjbG9zZWRTZXRJZHNbd2lkXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmV3IHRlbnRhdGl2ZSBzY29yZSBmb3Igbm9kZSB3XG4gICAgICAgIHZhciB0ZW1wU2NvcmUgPSBnU2NvcmVbY01pbklkXSArIHdlaWdodChlKTtcblxuICAgICAgICAvLyBVcGRhdGUgZ1Njb3JlIGZvciBub2RlIHcgaWY6XG4gICAgICAgIC8vICAgdyBub3QgcHJlc2VudCBpbiBvcGVuU2V0XG4gICAgICAgIC8vIE9SXG4gICAgICAgIC8vICAgdGVudGF0aXZlIGdTY29yZSBpcyBsZXNzIHRoYW4gcHJldmlvdXMgdmFsdWVcblxuICAgICAgICAvLyB3IG5vdCBpbiBvcGVuU2V0XG4gICAgICAgIGlmICghaXNJbk9wZW5TZXQod2lkKSkge1xuICAgICAgICAgIGdTY29yZVt3aWRdID0gdGVtcFNjb3JlO1xuICAgICAgICAgIGZTY29yZVt3aWRdID0gdGVtcFNjb3JlICsgaGV1cmlzdGljKHcpO1xuICAgICAgICAgIGFkZFRvT3BlblNldCh3LCB3aWQpO1xuICAgICAgICAgIGNhbWVGcm9tW3dpZF0gPSBjTWluO1xuICAgICAgICAgIGNhbWVGcm9tRWRnZVt3aWRdID0gZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHcgYWxyZWFkeSBpbiBvcGVuU2V0LCBidXQgd2l0aCBncmVhdGVyIGdTY29yZVxuICAgICAgICBpZiAodGVtcFNjb3JlIDwgZ1Njb3JlW3dpZF0pIHtcbiAgICAgICAgICBnU2NvcmVbd2lkXSA9IHRlbXBTY29yZTtcbiAgICAgICAgICBmU2NvcmVbd2lkXSA9IHRlbXBTY29yZSArIGhldXJpc3RpYyh3KTtcbiAgICAgICAgICBjYW1lRnJvbVt3aWRdID0gY01pbjtcbiAgICAgICAgICBjYW1lRnJvbUVkZ2Vbd2lkXSA9IGU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gRW5kIG9mIG5laWdoYm9ycyB1cGRhdGVcbiAgICB9IC8vIEVuZCBvZiBtYWluIGxvb3BcblxuICAgIC8vIElmIHdlJ3ZlIHJlYWNoZWQgaGVyZSwgdGhlbiB3ZSd2ZSBub3QgcmVhY2hlZCBvdXIgZ29hbFxuICAgIHJldHVybiB7XG4gICAgICBmb3VuZDogZmFsc2UsXG4gICAgICBkaXN0YW5jZTogdW5kZWZpbmVkLFxuICAgICAgcGF0aDogdW5kZWZpbmVkLFxuICAgICAgc3RlcHM6IHN0ZXBzXG4gICAgfTtcbiAgfVxufTsgLy8gZWxlc2ZuXG5cbnZhciBmbG95ZFdhcnNoYWxsRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRyID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgZmxveWRXYXJzaGFsbDogZnVuY3Rpb24gZmxveWRXYXJzaGFsbChvcHRpb25zKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBfZmxveWRXYXJzaGFsbERlZmF1bHQgPSBmbG95ZFdhcnNoYWxsRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICB3ZWlnaHQgPSBfZmxveWRXYXJzaGFsbERlZmF1bHQud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZmxveWRXYXJzaGFsbERlZmF1bHQuZGlyZWN0ZWQ7XG4gICAgdmFyIHdlaWdodEZuID0gd2VpZ2h0O1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgdmFyIE4gPSBub2Rlcy5sZW5ndGg7XG4gICAgdmFyIE5zcSA9IE4gKiBOO1xuICAgIHZhciBpbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICB9O1xuICAgIHZhciBhdEluZGV4ID0gZnVuY3Rpb24gYXRJbmRleChpKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgZGlzdGFuY2UgbWF0cml4XG4gICAgdmFyIGRpc3QgPSBuZXcgQXJyYXkoTnNxKTtcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IE5zcTsgbisrKSB7XG4gICAgICB2YXIgaiA9IG4gJSBOO1xuICAgICAgdmFyIGkgPSAobiAtIGopIC8gTjtcbiAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgIGRpc3Rbbl0gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzdFtuXSA9IEluZmluaXR5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbWF0cml4IHVzZWQgZm9yIHBhdGggcmVjb25zdHJ1Y3Rpb25cbiAgICAvLyBJbml0aWFsaXplIGRpc3RhbmNlIG1hdHJpeFxuICAgIHZhciBuZXh0ID0gbmV3IEFycmF5KE5zcSk7XG4gICAgdmFyIGVkZ2VOZXh0ID0gbmV3IEFycmF5KE5zcSk7XG5cbiAgICAvLyBQcm9jZXNzIGVkZ2VzXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVkZ2VzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tfaV07XG4gICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKVswXTtcbiAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpWzBdO1xuICAgICAgaWYgKHNyYyA9PT0gdGd0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBleGNsdWRlIGxvb3BzXG5cbiAgICAgIHZhciBzID0gaW5kZXhPZihzcmMpO1xuICAgICAgdmFyIHQgPSBpbmRleE9mKHRndCk7XG4gICAgICB2YXIgc3QgPSBzICogTiArIHQ7IC8vIHNvdXJjZSB0byB0YXJnZXQgaW5kZXhcbiAgICAgIHZhciBfd2VpZ2h0ID0gd2VpZ2h0Rm4oZWRnZSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgcHJvY2VzcyBhbm90aGVyIGVkZ2UgYmV0d2VlbiBzYW1lIDIgbm9kZXNcbiAgICAgIGlmIChkaXN0W3N0XSA+IF93ZWlnaHQpIHtcbiAgICAgICAgZGlzdFtzdF0gPSBfd2VpZ2h0O1xuICAgICAgICBuZXh0W3N0XSA9IHQ7XG4gICAgICAgIGVkZ2VOZXh0W3N0XSA9IGVkZ2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVuZGlyZWN0ZWQgZ3JhcGgsIHByb2Nlc3MgJ3JldmVyc2VkJyBlZGdlXG4gICAgICBpZiAoIWRpcmVjdGVkKSB7XG4gICAgICAgIHZhciB0cyA9IHQgKiBOICsgczsgLy8gdGFyZ2V0IHRvIHNvdXJjZSBpbmRleFxuXG4gICAgICAgIGlmICghZGlyZWN0ZWQgJiYgZGlzdFt0c10gPiBfd2VpZ2h0KSB7XG4gICAgICAgICAgZGlzdFt0c10gPSBfd2VpZ2h0O1xuICAgICAgICAgIG5leHRbdHNdID0gcztcbiAgICAgICAgICBlZGdlTmV4dFt0c10gPSBlZGdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFpbiBsb29wXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHtcbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICAgIHZhciBpayA9IF9pMiAqIE4gKyBrO1xuICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgTjsgX2orKykge1xuICAgICAgICAgIHZhciBpaiA9IF9pMiAqIE4gKyBfajtcbiAgICAgICAgICB2YXIga2ogPSBrICogTiArIF9qO1xuICAgICAgICAgIGlmIChkaXN0W2lrXSArIGRpc3Rba2pdIDwgZGlzdFtpal0pIHtcbiAgICAgICAgICAgIGRpc3RbaWpdID0gZGlzdFtpa10gKyBkaXN0W2tqXTtcbiAgICAgICAgICAgIG5leHRbaWpdID0gbmV4dFtpa107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBnZXRBcmdFbGUgPSBmdW5jdGlvbiBnZXRBcmdFbGUoZWxlKSB7XG4gICAgICByZXR1cm4gKHN0cmluZyhlbGUpID8gY3kuZmlsdGVyKGVsZSkgOiBlbGUpWzBdO1xuICAgIH07XG4gICAgdmFyIGluZGV4T2ZBcmdFbGUgPSBmdW5jdGlvbiBpbmRleE9mQXJnRWxlKGVsZSkge1xuICAgICAgcmV0dXJuIGluZGV4T2YoZ2V0QXJnRWxlKGVsZSkpO1xuICAgIH07XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGRpc3RhbmNlOiBmdW5jdGlvbiBkaXN0YW5jZShmcm9tLCB0bykge1xuICAgICAgICB2YXIgaSA9IGluZGV4T2ZBcmdFbGUoZnJvbSk7XG4gICAgICAgIHZhciBqID0gaW5kZXhPZkFyZ0VsZSh0byk7XG4gICAgICAgIHJldHVybiBkaXN0W2kgKiBOICsgal07XG4gICAgICB9LFxuICAgICAgcGF0aDogZnVuY3Rpb24gcGF0aChmcm9tLCB0bykge1xuICAgICAgICB2YXIgaSA9IGluZGV4T2ZBcmdFbGUoZnJvbSk7XG4gICAgICAgIHZhciBqID0gaW5kZXhPZkFyZ0VsZSh0byk7XG4gICAgICAgIHZhciBmcm9tTm9kZSA9IGF0SW5kZXgoaSk7XG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21Ob2RlLmNvbGxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV4dFtpICogTiArIGpdID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXRoID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICB2YXIgcHJldiA9IGk7XG4gICAgICAgIHZhciBlZGdlO1xuICAgICAgICBwYXRoLm1lcmdlKGZyb21Ob2RlKTtcbiAgICAgICAgd2hpbGUgKGkgIT09IGopIHtcbiAgICAgICAgICBwcmV2ID0gaTtcbiAgICAgICAgICBpID0gbmV4dFtpICogTiArIGpdO1xuICAgICAgICAgIGVkZ2UgPSBlZGdlTmV4dFtwcmV2ICogTiArIGldO1xuICAgICAgICAgIHBhdGgubWVyZ2UoZWRnZSk7XG4gICAgICAgICAgcGF0aC5tZXJnZShhdEluZGV4KGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiByZXM7XG4gIH0gLy8gZmxveWRXYXJzaGFsbFxufTsgLy8gZWxlc2ZuXG5cbnZhciBiZWxsbWFuRm9yZERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZGlyZWN0ZWQ6IGZhbHNlLFxuICByb290OiBudWxsXG59KTtcbnZhciBlbGVzZm4kcSA9IHtcbiAgLy8gSW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gIGJlbGxtYW5Gb3JkOiBmdW5jdGlvbiBiZWxsbWFuRm9yZChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2JlbGxtYW5Gb3JkRGVmYXVsdHMgPSBiZWxsbWFuRm9yZERlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgd2VpZ2h0ID0gX2JlbGxtYW5Gb3JkRGVmYXVsdHMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfYmVsbG1hbkZvcmREZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgIHJvb3QgPSBfYmVsbG1hbkZvcmREZWZhdWx0cy5yb290O1xuICAgIHZhciB3ZWlnaHRGbiA9IHdlaWdodDtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXMsXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXM7XG4gICAgdmFyIG51bU5vZGVzID0gbm9kZXMubGVuZ3RoO1xuICAgIHZhciBpbmZvTWFwID0gbmV3IE1hcCQyKCk7XG4gICAgdmFyIGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGUgPSBmYWxzZTtcbiAgICB2YXIgbmVnYXRpdmVXZWlnaHRDeWNsZXMgPSBbXTtcbiAgICByb290ID0gY3kuY29sbGVjdGlvbihyb290KVswXTsgLy8gaW4gY2FzZSBzZWxlY3RvciBwYXNzZWRcblxuICAgIGVkZ2VzLnVubWVyZ2VCeShmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgcmV0dXJuIGVkZ2UuaXNMb29wKCk7XG4gICAgfSk7XG4gICAgdmFyIG51bUVkZ2VzID0gZWRnZXMubGVuZ3RoO1xuICAgIHZhciBnZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbyhub2RlKSB7XG4gICAgICB2YXIgb2JqID0gaW5mb01hcC5nZXQobm9kZS5pZCgpKTtcbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIG9iaiA9IHt9O1xuICAgICAgICBpbmZvTWFwLnNldChub2RlLmlkKCksIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgdmFyIGdldE5vZGVGcm9tVG8gPSBmdW5jdGlvbiBnZXROb2RlRnJvbVRvKHRvKSB7XG4gICAgICByZXR1cm4gKHN0cmluZyh0bykgPyBjeS4kKHRvKSA6IHRvKVswXTtcbiAgICB9O1xuICAgIHZhciBkaXN0YW5jZVRvID0gZnVuY3Rpb24gZGlzdGFuY2VUbyh0bykge1xuICAgICAgcmV0dXJuIGdldEluZm8oZ2V0Tm9kZUZyb21Ubyh0bykpLmRpc3Q7XG4gICAgfTtcbiAgICB2YXIgcGF0aFRvID0gZnVuY3Rpb24gcGF0aFRvKHRvKSB7XG4gICAgICB2YXIgdGhpc1N0YXJ0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiByb290O1xuICAgICAgdmFyIGVuZCA9IGdldE5vZGVGcm9tVG8odG8pO1xuICAgICAgdmFyIHBhdGggPSBbXTtcbiAgICAgIHZhciBub2RlID0gZW5kO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnNwYXduKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9nZXRJbmZvID0gZ2V0SW5mbyhub2RlKSxcbiAgICAgICAgICBlZGdlID0gX2dldEluZm8uZWRnZSxcbiAgICAgICAgICBwcmVkID0gX2dldEluZm8ucHJlZDtcbiAgICAgICAgcGF0aC51bnNoaWZ0KG5vZGVbMF0pO1xuICAgICAgICBpZiAobm9kZS5zYW1lKHRoaXNTdGFydCkgJiYgcGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xuICAgICAgICAgIHBhdGgudW5zaGlmdChlZGdlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcHJlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVzLnNwYXduKHBhdGgpO1xuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXphdGlvbnMgeyBkaXN0LCBwcmVkLCBlZGdlIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5vZGVzOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICB2YXIgaW5mbyA9IGdldEluZm8obm9kZSk7XG4gICAgICBpZiAobm9kZS5zYW1lKHJvb3QpKSB7XG4gICAgICAgIGluZm8uZGlzdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvLmRpc3QgPSBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGluZm8ucHJlZCA9IG51bGw7XG4gICAgICBpbmZvLmVkZ2UgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEVkZ2VzIHJlbGF4YXRpb25cbiAgICB2YXIgcmVwbGFjZWRFZGdlID0gZmFsc2U7XG4gICAgdmFyIGNoZWNrRm9yRWRnZVJlcGxhY2VtZW50ID0gZnVuY3Rpb24gY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQobm9kZTEsIG5vZGUyLCBlZGdlLCBpbmZvMSwgaW5mbzIsIHdlaWdodCkge1xuICAgICAgdmFyIGRpc3QgPSBpbmZvMS5kaXN0ICsgd2VpZ2h0O1xuICAgICAgaWYgKGRpc3QgPCBpbmZvMi5kaXN0ICYmICFlZGdlLnNhbWUoaW5mbzEuZWRnZSkpIHtcbiAgICAgICAgaW5mbzIuZGlzdCA9IGRpc3Q7XG4gICAgICAgIGluZm8yLnByZWQgPSBub2RlMTtcbiAgICAgICAgaW5mbzIuZWRnZSA9IGVkZ2U7XG4gICAgICAgIHJlcGxhY2VkRWRnZSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgbnVtTm9kZXM7IF9pKyspIHtcbiAgICAgIHJlcGxhY2VkRWRnZSA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCBudW1FZGdlczsgZSsrKSB7XG4gICAgICAgIHZhciBlZGdlID0gZWRnZXNbZV07XG4gICAgICAgIHZhciBzcmMgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcbiAgICAgICAgdmFyIF93ZWlnaHQgPSB3ZWlnaHRGbihlZGdlKTtcbiAgICAgICAgdmFyIHNyY0luZm8gPSBnZXRJbmZvKHNyYyk7XG4gICAgICAgIHZhciB0Z3RJbmZvID0gZ2V0SW5mbyh0Z3QpO1xuICAgICAgICBjaGVja0ZvckVkZ2VSZXBsYWNlbWVudChzcmMsIHRndCwgZWRnZSwgc3JjSW5mbywgdGd0SW5mbywgX3dlaWdodCk7XG5cbiAgICAgICAgLy8gSWYgdW5kaXJlY3RlZCBncmFwaCwgd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgJ3JldmVyc2UnIGVkZ2VcbiAgICAgICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgICAgIGNoZWNrRm9yRWRnZVJlcGxhY2VtZW50KHRndCwgc3JjLCBlZGdlLCB0Z3RJbmZvLCBzcmNJbmZvLCBfd2VpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFyZXBsYWNlZEVkZ2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXBsYWNlZEVkZ2UpIHtcbiAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGVzXG4gICAgICB2YXIgbmVnYXRpdmVXZWlnaHRDeWNsZUlkcyA9IFtdO1xuICAgICAgZm9yICh2YXIgX2UgPSAwOyBfZSA8IG51bUVkZ2VzOyBfZSsrKSB7XG4gICAgICAgIHZhciBfZWRnZSA9IGVkZ2VzW19lXTtcbiAgICAgICAgdmFyIF9zcmMgPSBfZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIF90Z3QgPSBfZWRnZS50YXJnZXQoKTtcbiAgICAgICAgdmFyIF93ZWlnaHQyID0gd2VpZ2h0Rm4oX2VkZ2UpO1xuICAgICAgICB2YXIgc3JjRGlzdCA9IGdldEluZm8oX3NyYykuZGlzdDtcbiAgICAgICAgdmFyIHRndERpc3QgPSBnZXRJbmZvKF90Z3QpLmRpc3Q7XG4gICAgICAgIGlmIChzcmNEaXN0ICsgX3dlaWdodDIgPCB0Z3REaXN0IHx8ICFkaXJlY3RlZCAmJiB0Z3REaXN0ICsgX3dlaWdodDIgPCBzcmNEaXN0KSB7XG4gICAgICAgICAgaWYgKCFoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlKSB7XG4gICAgICAgICAgICB3YXJuKCdHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkJyk7XG4gICAgICAgICAgICBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyIG5lZ2F0aXZlTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChzcmNEaXN0ICsgX3dlaWdodDIgPCB0Z3REaXN0KSB7XG4gICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZXMucHVzaChfc3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlyZWN0ZWQgJiYgdGd0RGlzdCArIF93ZWlnaHQyIDwgc3JjRGlzdCkge1xuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGVzLnB1c2goX3RndCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbnVtTmVnYXRpdmVOb2RlcyA9IG5lZ2F0aXZlTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBudW1OZWdhdGl2ZU5vZGVzOyBuKyspIHtcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmVnYXRpdmVOb2Rlc1tuXTtcbiAgICAgICAgICAgICAgdmFyIGN5Y2xlID0gW3N0YXJ0XTtcbiAgICAgICAgICAgICAgY3ljbGUucHVzaChnZXRJbmZvKHN0YXJ0KS5lZGdlKTtcbiAgICAgICAgICAgICAgdmFyIF9ub2RlID0gZ2V0SW5mbyhzdGFydCkucHJlZDtcbiAgICAgICAgICAgICAgd2hpbGUgKGN5Y2xlLmluZGV4T2YoX25vZGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGN5Y2xlLnB1c2goX25vZGUpO1xuICAgICAgICAgICAgICAgIGN5Y2xlLnB1c2goZ2V0SW5mbyhfbm9kZSkuZWRnZSk7XG4gICAgICAgICAgICAgICAgX25vZGUgPSBnZXRJbmZvKF9ub2RlKS5wcmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN5Y2xlID0gY3ljbGUuc2xpY2UoY3ljbGUuaW5kZXhPZihfbm9kZSkpO1xuICAgICAgICAgICAgICB2YXIgc21hbGxlc3RJZCA9IGN5Y2xlWzBdLmlkKCk7XG4gICAgICAgICAgICAgIHZhciBzbWFsbGVzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDI7IGMgPCBjeWNsZS5sZW5ndGg7IGMgKz0gMikge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZVtjXS5pZCgpIDwgc21hbGxlc3RJZCkge1xuICAgICAgICAgICAgICAgICAgc21hbGxlc3RJZCA9IGN5Y2xlW2NdLmlkKCk7XG4gICAgICAgICAgICAgICAgICBzbWFsbGVzdEluZGV4ID0gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3ljbGUgPSBjeWNsZS5zbGljZShzbWFsbGVzdEluZGV4KS5jb25jYXQoY3ljbGUuc2xpY2UoMCwgc21hbGxlc3RJbmRleCkpO1xuICAgICAgICAgICAgICBjeWNsZS5wdXNoKGN5Y2xlWzBdKTtcbiAgICAgICAgICAgICAgdmFyIGN5Y2xlSWQgPSBjeWNsZS5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmlkKCk7XG4gICAgICAgICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICBpZiAobmVnYXRpdmVXZWlnaHRDeWNsZUlkcy5pbmRleE9mKGN5Y2xlSWQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzLnB1c2goZWxlcy5zcGF3bihjeWNsZSkpO1xuICAgICAgICAgICAgICAgIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVJZHMucHVzaChjeWNsZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3RhbmNlVG86IGRpc3RhbmNlVG8sXG4gICAgICBwYXRoVG86IHBhdGhUbyxcbiAgICAgIGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGU6IGhhc05lZ2F0aXZlV2VpZ2h0Q3ljbGUsXG4gICAgICBuZWdhdGl2ZVdlaWdodEN5Y2xlczogbmVnYXRpdmVXZWlnaHRDeWNsZXNcbiAgICB9O1xuICB9IC8vIGJlbGxtYW5Gb3JkXG59OyAvLyBlbGVzZm5cblxudmFyIHNxcnQyID0gTWF0aC5zcXJ0KDIpO1xuXG4vLyBGdW5jdGlvbiB3aGljaCBjb2xhcHNlcyAyIChtZXRhKSBub2RlcyBpbnRvIG9uZVxuLy8gVXBkYXRlcyB0aGUgcmVtYWluaW5nIGVkZ2UgbGlzdHNcbi8vIFJlY2VpdmVzIGFzIGEgcGFyYW1hdGVyIHRoZSBlZGdlIHdoaWNoIGNhdXNlcyB0aGUgY29sbGFwc2VcbnZhciBjb2xsYXBzZSA9IGZ1bmN0aW9uIGNvbGxhcHNlKGVkZ2VJbmRleCwgbm9kZU1hcCwgcmVtYWluaW5nRWRnZXMpIHtcbiAgaWYgKHJlbWFpbmluZ0VkZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGVycm9yKFwiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGhcIik7XG4gIH1cbiAgdmFyIGVkZ2VJbmZvID0gcmVtYWluaW5nRWRnZXNbZWRnZUluZGV4XTtcbiAgdmFyIHNvdXJjZUluID0gZWRnZUluZm9bMV07XG4gIHZhciB0YXJnZXRJbiA9IGVkZ2VJbmZvWzJdO1xuICB2YXIgcGFydGl0aW9uMSA9IG5vZGVNYXBbc291cmNlSW5dO1xuICB2YXIgcGFydGl0aW9uMiA9IG5vZGVNYXBbdGFyZ2V0SW5dO1xuICB2YXIgbmV3RWRnZXMgPSByZW1haW5pbmdFZGdlczsgLy8gcmUtdXNlIGFycmF5XG5cbiAgLy8gRGVsZXRlIGFsbCBlZGdlcyBiZXR3ZWVuIHBhcnRpdGlvbjEgYW5kIHBhcnRpdGlvbjJcbiAgZm9yICh2YXIgaSA9IG5ld0VkZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGVkZ2UgPSBuZXdFZGdlc1tpXTtcbiAgICB2YXIgc3JjID0gZWRnZVsxXTtcbiAgICB2YXIgdGd0ID0gZWRnZVsyXTtcbiAgICBpZiAobm9kZU1hcFtzcmNdID09PSBwYXJ0aXRpb24xICYmIG5vZGVNYXBbdGd0XSA9PT0gcGFydGl0aW9uMiB8fCBub2RlTWFwW3NyY10gPT09IHBhcnRpdGlvbjIgJiYgbm9kZU1hcFt0Z3RdID09PSBwYXJ0aXRpb24xKSB7XG4gICAgICBuZXdFZGdlcy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxsIGVkZ2VzIHBvaW50aW5nIHRvIHBhcnRpdGlvbjIgc2hvdWxkIG5vdyBwb2ludCB0byBwYXJ0aXRpb24xXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBuZXdFZGdlcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgX2VkZ2UgPSBuZXdFZGdlc1tfaV07XG4gICAgaWYgKF9lZGdlWzFdID09PSBwYXJ0aXRpb24yKSB7XG4gICAgICAvLyBDaGVjayBzb3VyY2VcbiAgICAgIG5ld0VkZ2VzW19pXSA9IF9lZGdlLnNsaWNlKCk7IC8vIGNvcHlcbiAgICAgIG5ld0VkZ2VzW19pXVsxXSA9IHBhcnRpdGlvbjE7XG4gICAgfSBlbHNlIGlmIChfZWRnZVsyXSA9PT0gcGFydGl0aW9uMikge1xuICAgICAgLy8gQ2hlY2sgdGFyZ2V0XG4gICAgICBuZXdFZGdlc1tfaV0gPSBfZWRnZS5zbGljZSgpOyAvLyBjb3B5XG4gICAgICBuZXdFZGdlc1tfaV1bMl0gPSBwYXJ0aXRpb24xO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdmUgYWxsIG5vZGVzIGZyb20gcGFydGl0aW9uMiB0byBwYXJ0aXRpb24xXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVNYXAubGVuZ3RoOyBfaTIrKykge1xuICAgIGlmIChub2RlTWFwW19pMl0gPT09IHBhcnRpdGlvbjIpIHtcbiAgICAgIG5vZGVNYXBbX2kyXSA9IHBhcnRpdGlvbjE7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdFZGdlcztcbn07XG5cbi8vIENvbnRyYWN0cyBhIGdyYXBoIHVudGlsIHdlIHJlYWNoIGEgY2VydGFpbiBudW1iZXIgb2YgbWV0YSBub2Rlc1xudmFyIGNvbnRyYWN0VW50aWwgPSBmdW5jdGlvbiBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwLCByZW1haW5pbmdFZGdlcywgc2l6ZSwgc2l6ZUxpbWl0KSB7XG4gIHdoaWxlIChzaXplID4gc2l6ZUxpbWl0KSB7XG4gICAgLy8gQ2hvb3NlIGFuIGVkZ2UgcmFuZG9tbHlcbiAgICB2YXIgZWRnZUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmVtYWluaW5nRWRnZXMubGVuZ3RoKTtcblxuICAgIC8vIENvbGxhcHNlIGdyYXBoIGJhc2VkIG9uIGVkZ2VcbiAgICByZW1haW5pbmdFZGdlcyA9IGNvbGxhcHNlKGVkZ2VJbmRleCwgbWV0YU5vZGVNYXAsIHJlbWFpbmluZ0VkZ2VzKTtcbiAgICBzaXplLS07XG4gIH1cbiAgcmV0dXJuIHJlbWFpbmluZ0VkZ2VzO1xufTtcbnZhciBlbGVzZm4kcCA9IHtcbiAgLy8gQ29tcHV0ZXMgdGhlIG1pbmltdW0gY3V0IG9mIGFuIHVuZGlyZWN0ZWQgZ3JhcGhcbiAgLy8gUmV0dXJucyB0aGUgY29ycmVjdCBhbnN3ZXIgd2l0aCBoaWdoIHByb2JhYmlsaXR5XG4gIGthcmdlclN0ZWluOiBmdW5jdGlvbiBrYXJnZXJTdGVpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgZWRnZXMudW5tZXJnZUJ5KGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICByZXR1cm4gZWRnZS5pc0xvb3AoKTtcbiAgICB9KTtcbiAgICB2YXIgbnVtTm9kZXMgPSBub2Rlcy5sZW5ndGg7XG4gICAgdmFyIG51bUVkZ2VzID0gZWRnZXMubGVuZ3RoO1xuICAgIHZhciBudW1JdGVyID0gTWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKG51bU5vZGVzKSAvIE1hdGguTE4yLCAyKSk7XG4gICAgdmFyIHN0b3BTaXplID0gTWF0aC5mbG9vcihudW1Ob2RlcyAvIHNxcnQyKTtcbiAgICBpZiAobnVtTm9kZXMgPCAyKSB7XG4gICAgICBlcnJvcignQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0nKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTm93IHN0b3JlIGVkZ2UgZGVzdGluYXRpb24gYXMgaW5kZXhlc1xuICAgIC8vIEZvcm1hdCBmb3IgZWFjaCBlZGdlIChlZGdlIGluZGV4LCBzb3VyY2Ugbm9kZSBpbmRleCwgdGFyZ2V0IG5vZGUgaW5kZXgpXG4gICAgdmFyIGVkZ2VJbmRleGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FZGdlczsgaSsrKSB7XG4gICAgICB2YXIgZSA9IGVkZ2VzW2ldO1xuICAgICAgZWRnZUluZGV4ZXMucHVzaChbaSwgbm9kZXMuaW5kZXhPZihlLnNvdXJjZSgpKSwgbm9kZXMuaW5kZXhPZihlLnRhcmdldCgpKV0pO1xuICAgIH1cblxuICAgIC8vIFdlIHdpbGwgc3RvcmUgdGhlIGJlc3QgY3V0IGZvdW5kIGhlcmVcbiAgICB2YXIgbWluQ3V0U2l6ZSA9IEluZmluaXR5O1xuICAgIHZhciBtaW5DdXRFZGdlSW5kZXhlcyA9IFtdO1xuICAgIHZhciBtaW5DdXROb2RlTWFwID0gbmV3IEFycmF5KG51bU5vZGVzKTtcblxuICAgIC8vIEluaXRpYWwgbWV0YSBub2RlIHBhcnRpdGlvblxuICAgIHZhciBtZXRhTm9kZU1hcCA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG4gICAgdmFyIG1ldGFOb2RlTWFwMiA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG4gICAgdmFyIGNvcHlOb2Rlc01hcCA9IGZ1bmN0aW9uIGNvcHlOb2Rlc01hcChmcm9tLCB0bykge1xuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbnVtTm9kZXM7IF9pMysrKSB7XG4gICAgICAgIHRvW19pM10gPSBmcm9tW19pM107XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIE1haW4gbG9vcFxuICAgIGZvciAodmFyIGl0ZXIgPSAwOyBpdGVyIDw9IG51bUl0ZXI7IGl0ZXIrKykge1xuICAgICAgLy8gUmVzZXQgbWV0YSBub2RlIHBhcnRpdGlvblxuICAgICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbnVtTm9kZXM7IF9pNCsrKSB7XG4gICAgICAgIG1ldGFOb2RlTWFwW19pNF0gPSBfaTQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRyYWN0IHVudGlsIHN0b3AgcG9pbnQgKHN0b3BTaXplIG5vZGVzKVxuICAgICAgdmFyIGVkZ2VzU3RhdGUgPSBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwLCBlZGdlSW5kZXhlcy5zbGljZSgpLCBudW1Ob2Rlcywgc3RvcFNpemUpO1xuICAgICAgdmFyIGVkZ2VzU3RhdGUyID0gZWRnZXNTdGF0ZS5zbGljZSgpOyAvLyBjb3B5XG5cbiAgICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGNvbGFwc2VkIG5vZGVzIHN0YXRlXG4gICAgICBjb3B5Tm9kZXNNYXAobWV0YU5vZGVNYXAsIG1ldGFOb2RlTWFwMik7XG5cbiAgICAgIC8vIFJ1biAyIGl0ZXJhdGlvbnMgc3RhcnRpbmcgaW4gdGhlIHN0b3Agc3RhdGVcbiAgICAgIHZhciByZXMxID0gY29udHJhY3RVbnRpbChtZXRhTm9kZU1hcCwgZWRnZXNTdGF0ZSwgc3RvcFNpemUsIDIpO1xuICAgICAgdmFyIHJlczIgPSBjb250cmFjdFVudGlsKG1ldGFOb2RlTWFwMiwgZWRnZXNTdGF0ZTIsIHN0b3BTaXplLCAyKTtcblxuICAgICAgLy8gSXMgYW55IG9mIHRoZSAyIHJlc3VsdHMgdGhlIGJlc3QgY3V0IHNvIGZhcj9cbiAgICAgIGlmIChyZXMxLmxlbmd0aCA8PSByZXMyLmxlbmd0aCAmJiByZXMxLmxlbmd0aCA8IG1pbkN1dFNpemUpIHtcbiAgICAgICAgbWluQ3V0U2l6ZSA9IHJlczEubGVuZ3RoO1xuICAgICAgICBtaW5DdXRFZGdlSW5kZXhlcyA9IHJlczE7XG4gICAgICAgIGNvcHlOb2Rlc01hcChtZXRhTm9kZU1hcCwgbWluQ3V0Tm9kZU1hcCk7XG4gICAgICB9IGVsc2UgaWYgKHJlczIubGVuZ3RoIDw9IHJlczEubGVuZ3RoICYmIHJlczIubGVuZ3RoIDwgbWluQ3V0U2l6ZSkge1xuICAgICAgICBtaW5DdXRTaXplID0gcmVzMi5sZW5ndGg7XG4gICAgICAgIG1pbkN1dEVkZ2VJbmRleGVzID0gcmVzMjtcbiAgICAgICAgY29weU5vZGVzTWFwKG1ldGFOb2RlTWFwMiwgbWluQ3V0Tm9kZU1hcCk7XG4gICAgICB9XG4gICAgfSAvLyBlbmQgb2YgbWFpbiBsb29wXG5cbiAgICAvLyBDb25zdHJ1Y3QgcmVzdWx0XG4gICAgdmFyIGN1dCA9IHRoaXMuc3Bhd24obWluQ3V0RWRnZUluZGV4ZXMubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZWRnZXNbZVswXV07XG4gICAgfSkpO1xuICAgIHZhciBwYXJ0aXRpb24xID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBwYXJ0aXRpb24yID0gdGhpcy5zcGF3bigpO1xuXG4gICAgLy8gdHJhdmVyc2UgbWV0YU5vZGVNYXAgZm9yIGJlc3QgY3V0XG4gICAgdmFyIHdpdG5lc3NOb2RlUGFydGl0aW9uID0gbWluQ3V0Tm9kZU1hcFswXTtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBtaW5DdXROb2RlTWFwLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgIHZhciBwYXJ0aXRpb25JZCA9IG1pbkN1dE5vZGVNYXBbX2k1XTtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbX2k1XTtcbiAgICAgIGlmIChwYXJ0aXRpb25JZCA9PT0gd2l0bmVzc05vZGVQYXJ0aXRpb24pIHtcbiAgICAgICAgcGFydGl0aW9uMS5tZXJnZShub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRpdGlvbjIubWVyZ2Uobm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGNvbXBvbmVudHMgY29ycmVzcG9uZGluZyB0byBlYWNoIGRpc2pvaW50IHN1YnNldCBvZiBub2Rlc1xuICAgIHZhciBjb25zdHJ1Y3RDb21wb25lbnQgPSBmdW5jdGlvbiBjb25zdHJ1Y3RDb21wb25lbnQoc3Vic2V0KSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gX3RoaXMuc3Bhd24oKTtcbiAgICAgIHN1YnNldC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGNvbXBvbmVudC5tZXJnZShub2RlKTtcbiAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAvLyBlbnN1cmUgZWRnZSBpcyB3aXRoaW4gY2FsbGluZyBjb2xsZWN0aW9uIGFuZCBlZGdlIGlzIG5vdCBpbiBjdXRcbiAgICAgICAgICBpZiAoX3RoaXMuY29udGFpbnMoZWRnZSkgJiYgIWN1dC5jb250YWlucyhlZGdlKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1lcmdlKGVkZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50cyA9IFtjb25zdHJ1Y3RDb21wb25lbnQocGFydGl0aW9uMSksIGNvbnN0cnVjdENvbXBvbmVudChwYXJ0aXRpb24yKV07XG4gICAgdmFyIHJldCA9IHtcbiAgICAgIGN1dDogY3V0LFxuICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgIC8vIG4uYi4gcGFydGl0aW9ucyBhcmUgaW5jbHVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgYXBpIHNwZWNcbiAgICAgIC8vIChjb3VsZCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24pXG4gICAgICBwYXJ0aXRpb24xOiBwYXJ0aXRpb24xLFxuICAgICAgcGFydGl0aW9uMjogcGFydGl0aW9uMlxuICAgIH07XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsgLy8gZWxlc2ZuXG5cbnZhciBjb3B5UG9zaXRpb24gPSBmdW5jdGlvbiBjb3B5UG9zaXRpb24ocCkge1xuICByZXR1cm4ge1xuICAgIHg6IHAueCxcbiAgICB5OiBwLnlcbiAgfTtcbn07XG52YXIgbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwLCB6b29tLCBwYW4pIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBwLnggKiB6b29tICsgcGFuLngsXG4gICAgeTogcC55ICogem9vbSArIHBhbi55XG4gIH07XG59O1xudmFyIHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uID0gZnVuY3Rpb24gcmVuZGVyZWRUb01vZGVsUG9zaXRpb24ocCwgem9vbSwgcGFuKSB7XG4gIHJldHVybiB7XG4gICAgeDogKHAueCAtIHBhbi54KSAvIHpvb20sXG4gICAgeTogKHAueSAtIHBhbi55KSAvIHpvb21cbiAgfTtcbn07XG52YXIgYXJyYXkycG9pbnQgPSBmdW5jdGlvbiBhcnJheTJwb2ludChhcnIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBhcnJbMF0sXG4gICAgeTogYXJyWzFdXG4gIH07XG59O1xudmFyIG1pbiA9IGZ1bmN0aW9uIG1pbihhcnIpIHtcbiAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICB2YXIgbWluID0gSW5maW5pdHk7XG4gIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIHZhbCA9IGFycltpXTtcbiAgICBpZiAoaXNGaW5pdGUodmFsKSkge1xuICAgICAgbWluID0gTWF0aC5taW4odmFsLCBtaW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluO1xufTtcbnZhciBtYXggPSBmdW5jdGlvbiBtYXgoYXJyKSB7XG4gIHZhciBiZWdpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyLmxlbmd0aDtcbiAgdmFyIG1heCA9IC1JbmZpbml0eTtcbiAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICBtYXggPSBNYXRoLm1heCh2YWwsIG1heCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59O1xudmFyIG1lYW4gPSBmdW5jdGlvbiBtZWFuKGFycikge1xuICB2YXIgYmVnaW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGFyci5sZW5ndGg7XG4gIHZhciB0b3RhbCA9IDA7XG4gIHZhciBuID0gMDtcbiAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICB0b3RhbCArPSB2YWw7XG4gICAgICBuKys7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b3RhbCAvIG47XG59O1xudmFyIG1lZGlhbiA9IGZ1bmN0aW9uIG1lZGlhbihhcnIpIHtcbiAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICB2YXIgY29weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcbiAgdmFyIHNvcnQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBpbmNsdWRlSG9sZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gIGlmIChjb3B5KSB7XG4gICAgYXJyID0gYXJyLnNsaWNlKGJlZ2luLCBlbmQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChlbmQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICBhcnIuc3BsaWNlKGVuZCwgYXJyLmxlbmd0aCAtIGVuZCk7XG4gICAgfVxuICAgIGlmIChiZWdpbiA+IDApIHtcbiAgICAgIGFyci5zcGxpY2UoMCwgYmVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFsbCBub24gZmluaXRlIChlLmcuIEluZmluaXR5LCBOYU4pIGVsZW1lbnRzIG11c3QgYmUgLUluZmluaXR5IHNvIHRoZXkgZ28gdG8gdGhlIHN0YXJ0XG4gIHZhciBvZmYgPSAwOyAvLyBvZmZzZXQgZnJvbSBub24tZmluaXRlIHZhbHVlc1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIHYgPSBhcnJbaV07XG4gICAgaWYgKGluY2x1ZGVIb2xlcykge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh2KSkge1xuICAgICAgICBhcnJbaV0gPSAtSW5maW5pdHk7XG4gICAgICAgIG9mZisrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqdXN0IHJlbW92ZSBpdCBpZiB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIGhvbGVzXG4gICAgICBhcnIuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuICBpZiAoc29ydCkge1xuICAgIGFyci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7IC8vIHJlcXVpcmVzIGNvcHkgPSB0cnVlIGlmIHlvdSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgb3JpZ1xuICB9XG5cbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKGxlbiAvIDIpO1xuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHJldHVybiBhcnJbbWlkICsgMSArIG9mZl07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChhcnJbbWlkIC0gMSArIG9mZl0gKyBhcnJbbWlkICsgb2ZmXSkgLyAyO1xuICB9XG59O1xudmFyIGRlZzJyYWQgPSBmdW5jdGlvbiBkZWcycmFkKGRlZykge1xuICByZXR1cm4gTWF0aC5QSSAqIGRlZyAvIDE4MDtcbn07XG52YXIgZ2V0QW5nbGVGcm9tRGlzcCA9IGZ1bmN0aW9uIGdldEFuZ2xlRnJvbURpc3AoZGlzcFgsIGRpc3BZKSB7XG4gIHJldHVybiBNYXRoLmF0YW4yKGRpc3BZLCBkaXNwWCkgLSBNYXRoLlBJIC8gMjtcbn07XG52YXIgbG9nMiA9IE1hdGgubG9nMiB8fCBmdW5jdGlvbiAobikge1xuICByZXR1cm4gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTtcbn07XG52YXIgc2lnbnVtID0gZnVuY3Rpb24gc2lnbnVtKHgpIHtcbiAgaWYgKHggPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoeCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG52YXIgZGlzdCA9IGZ1bmN0aW9uIGRpc3QocDEsIHAyKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoc3FkaXN0KHAxLCBwMikpO1xufTtcbnZhciBzcWRpc3QgPSBmdW5jdGlvbiBzcWRpc3QocDEsIHAyKSB7XG4gIHZhciBkeCA9IHAyLnggLSBwMS54O1xuICB2YXIgZHkgPSBwMi55IC0gcDEueTtcbiAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufTtcbnZhciBpblBsYWNlU3VtTm9ybWFsaXplID0gZnVuY3Rpb24gaW5QbGFjZVN1bU5vcm1hbGl6ZSh2KSB7XG4gIHZhciBsZW5ndGggPSB2Lmxlbmd0aDtcblxuICAvLyBGaXJzdCwgZ2V0IHN1bSBvZiBhbGwgZWxlbWVudHNcbiAgdmFyIHRvdGFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRvdGFsICs9IHZbaV07XG4gIH1cblxuICAvLyBOb3csIGRpdmlkZSBlYWNoIGJ5IHRoZSBzdW0gb2YgYWxsIGVsZW1lbnRzXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBsZW5ndGg7IF9pKyspIHtcbiAgICB2W19pXSA9IHZbX2ldIC8gdG90YWw7XG4gIH1cbiAgcmV0dXJuIHY7XG59O1xuXG4vLyBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQsOpemllcl9jdXJ2ZSNRdWFkcmF0aWNfY3VydmVzXG52YXIgcWJlemllckF0ID0gZnVuY3Rpb24gcWJlemllckF0KHAwLCBwMSwgcDIsIHQpIHtcbiAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpICogcDAgKyAyICogKDEgLSB0KSAqIHQgKiBwMSArIHQgKiB0ICogcDI7XG59O1xudmFyIHFiZXppZXJQdEF0ID0gZnVuY3Rpb24gcWJlemllclB0QXQocDAsIHAxLCBwMiwgdCkge1xuICByZXR1cm4ge1xuICAgIHg6IHFiZXppZXJBdChwMC54LCBwMS54LCBwMi54LCB0KSxcbiAgICB5OiBxYmV6aWVyQXQocDAueSwgcDEueSwgcDIueSwgdClcbiAgfTtcbn07XG52YXIgbGluZUF0ID0gZnVuY3Rpb24gbGluZUF0KHAwLCBwMSwgdCwgZCkge1xuICB2YXIgdmVjID0ge1xuICAgIHg6IHAxLnggLSBwMC54LFxuICAgIHk6IHAxLnkgLSBwMC55XG4gIH07XG4gIHZhciB2ZWNEaXN0ID0gZGlzdChwMCwgcDEpO1xuICB2YXIgbm9ybVZlYyA9IHtcbiAgICB4OiB2ZWMueCAvIHZlY0Rpc3QsXG4gICAgeTogdmVjLnkgLyB2ZWNEaXN0XG4gIH07XG4gIHQgPSB0ID09IG51bGwgPyAwIDogdDtcbiAgZCA9IGQgIT0gbnVsbCA/IGQgOiB0ICogdmVjRGlzdDtcbiAgcmV0dXJuIHtcbiAgICB4OiBwMC54ICsgbm9ybVZlYy54ICogZCxcbiAgICB5OiBwMC55ICsgbm9ybVZlYy55ICogZFxuICB9O1xufTtcbnZhciBib3VuZCA9IGZ1bmN0aW9uIGJvdW5kKG1pbiwgdmFsLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWwpKTtcbn07XG5cbi8vIG1ha2VzIGEgZnVsbCBiYiAoeDEsIHkxLCB4MiwgeTIsIHcsIGgpIGZyb20gaW1wbGljaXQgcGFyYW1zXG52YXIgbWFrZUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gbWFrZUJvdW5kaW5nQm94KGJiKSB7XG4gIGlmIChiYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgxOiBJbmZpbml0eSxcbiAgICAgIHkxOiBJbmZpbml0eSxcbiAgICAgIHgyOiAtSW5maW5pdHksXG4gICAgICB5MjogLUluZmluaXR5LFxuICAgICAgdzogMCxcbiAgICAgIGg6IDBcbiAgICB9O1xuICB9IGVsc2UgaWYgKGJiLngxICE9IG51bGwgJiYgYmIueTEgIT0gbnVsbCkge1xuICAgIGlmIChiYi54MiAhPSBudWxsICYmIGJiLnkyICE9IG51bGwgJiYgYmIueDIgPj0gYmIueDEgJiYgYmIueTIgPj0gYmIueTEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgxOiBiYi54MSxcbiAgICAgICAgeTE6IGJiLnkxLFxuICAgICAgICB4MjogYmIueDIsXG4gICAgICAgIHkyOiBiYi55MixcbiAgICAgICAgdzogYmIueDIgLSBiYi54MSxcbiAgICAgICAgaDogYmIueTIgLSBiYi55MVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGJiLncgIT0gbnVsbCAmJiBiYi5oICE9IG51bGwgJiYgYmIudyA+PSAwICYmIGJiLmggPj0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDE6IGJiLngxLFxuICAgICAgICB5MTogYmIueTEsXG4gICAgICAgIHgyOiBiYi54MSArIGJiLncsXG4gICAgICAgIHkyOiBiYi55MSArIGJiLmgsXG4gICAgICAgIHc6IGJiLncsXG4gICAgICAgIGg6IGJiLmhcbiAgICAgIH07XG4gICAgfVxuICB9XG59O1xudmFyIGNvcHlCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGNvcHlCb3VuZGluZ0JveChiYikge1xuICByZXR1cm4ge1xuICAgIHgxOiBiYi54MSxcbiAgICB4MjogYmIueDIsXG4gICAgdzogYmIudyxcbiAgICB5MTogYmIueTEsXG4gICAgeTI6IGJiLnkyLFxuICAgIGg6IGJiLmhcbiAgfTtcbn07XG52YXIgY2xlYXJCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGNsZWFyQm91bmRpbmdCb3goYmIpIHtcbiAgYmIueDEgPSBJbmZpbml0eTtcbiAgYmIueTEgPSBJbmZpbml0eTtcbiAgYmIueDIgPSAtSW5maW5pdHk7XG4gIGJiLnkyID0gLUluZmluaXR5O1xuICBiYi53ID0gMDtcbiAgYmIuaCA9IDA7XG59O1xudmFyIHNoaWZ0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiBzaGlmdEJvdW5kaW5nQm94KGJiLCBkeCwgZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4MTogYmIueDEgKyBkeCxcbiAgICB4MjogYmIueDIgKyBkeCxcbiAgICB5MTogYmIueTEgKyBkeSxcbiAgICB5MjogYmIueTIgKyBkeSxcbiAgICB3OiBiYi53LFxuICAgIGg6IGJiLmhcbiAgfTtcbn07XG52YXIgdXBkYXRlQm91bmRpbmdCb3ggPSBmdW5jdGlvbiB1cGRhdGVCb3VuZGluZ0JveChiYjEsIGJiMikge1xuICAvLyB1cGRhdGUgYmIxIHdpdGggYmIyIGJvdW5kc1xuXG4gIGJiMS54MSA9IE1hdGgubWluKGJiMS54MSwgYmIyLngxKTtcbiAgYmIxLngyID0gTWF0aC5tYXgoYmIxLngyLCBiYjIueDIpO1xuICBiYjEudyA9IGJiMS54MiAtIGJiMS54MTtcbiAgYmIxLnkxID0gTWF0aC5taW4oYmIxLnkxLCBiYjIueTEpO1xuICBiYjEueTIgPSBNYXRoLm1heChiYjEueTIsIGJiMi55Mik7XG4gIGJiMS5oID0gYmIxLnkyIC0gYmIxLnkxO1xufTtcbnZhciBleHBhbmRCb3VuZGluZ0JveEJ5UG9pbnQgPSBmdW5jdGlvbiBleHBhbmRCb3VuZGluZ0JveEJ5UG9pbnQoYmIsIHgsIHkpIHtcbiAgYmIueDEgPSBNYXRoLm1pbihiYi54MSwgeCk7XG4gIGJiLngyID0gTWF0aC5tYXgoYmIueDIsIHgpO1xuICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgYmIueTEgPSBNYXRoLm1pbihiYi55MSwgeSk7XG4gIGJiLnkyID0gTWF0aC5tYXgoYmIueTIsIHkpO1xuICBiYi5oID0gYmIueTIgLSBiYi55MTtcbn07XG52YXIgZXhwYW5kQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBleHBhbmRCb3VuZGluZ0JveChiYikge1xuICB2YXIgcGFkZGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgYmIueDEgLT0gcGFkZGluZztcbiAgYmIueDIgKz0gcGFkZGluZztcbiAgYmIueTEgLT0gcGFkZGluZztcbiAgYmIueTIgKz0gcGFkZGluZztcbiAgYmIudyA9IGJiLngyIC0gYmIueDE7XG4gIGJiLmggPSBiYi55MiAtIGJiLnkxO1xuICByZXR1cm4gYmI7XG59O1xudmFyIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMgPSBmdW5jdGlvbiBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJiKSB7XG4gIHZhciBwYWRkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbMF07XG4gIHZhciB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7XG4gIGlmIChwYWRkaW5nLmxlbmd0aCA9PT0gMSkge1xuICAgIHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gbGVmdCA9IHBhZGRpbmdbMF07XG4gIH0gZWxzZSBpZiAocGFkZGluZy5sZW5ndGggPT09IDIpIHtcbiAgICB0b3AgPSBib3R0b20gPSBwYWRkaW5nWzBdO1xuICAgIGxlZnQgPSByaWdodCA9IHBhZGRpbmdbMV07XG4gIH0gZWxzZSBpZiAocGFkZGluZy5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgX3BhZGRpbmcgPSBfc2xpY2VkVG9BcnJheShwYWRkaW5nLCA0KTtcbiAgICB0b3AgPSBfcGFkZGluZ1swXTtcbiAgICByaWdodCA9IF9wYWRkaW5nWzFdO1xuICAgIGJvdHRvbSA9IF9wYWRkaW5nWzJdO1xuICAgIGxlZnQgPSBfcGFkZGluZ1szXTtcbiAgfVxuICBiYi54MSAtPSBsZWZ0O1xuICBiYi54MiArPSByaWdodDtcbiAgYmIueTEgLT0gdG9wO1xuICBiYi55MiArPSBib3R0b207XG4gIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgcmV0dXJuIGJiO1xufTtcblxuLy8gYXNzaWduIHRoZSB2YWx1ZXMgb2YgYmIyIGludG8gYmIxXG52YXIgYXNzaWduQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBhc3NpZ25Cb3VuZGluZ0JveChiYjEsIGJiMikge1xuICBiYjEueDEgPSBiYjIueDE7XG4gIGJiMS55MSA9IGJiMi55MTtcbiAgYmIxLngyID0gYmIyLngyO1xuICBiYjEueTIgPSBiYjIueTI7XG4gIGJiMS53ID0gYmIxLngyIC0gYmIxLngxO1xuICBiYjEuaCA9IGJiMS55MiAtIGJiMS55MTtcbn07XG52YXIgYm91bmRpbmdCb3hlc0ludGVyc2VjdCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYmIxLCBiYjIpIHtcbiAgLy8gY2FzZTogb25lIGJiIHRvIHJpZ2h0IG9mIG90aGVyXG4gIGlmIChiYjEueDEgPiBiYjIueDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGJiMi54MSA+IGJiMS54Mikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGNhc2U6IG9uZSBiYiB0byBsZWZ0IG9mIG90aGVyXG4gIGlmIChiYjEueDIgPCBiYjIueDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGJiMi54MiA8IGJiMS54MSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGNhc2U6IG9uZSBiYiBhYm92ZSBvdGhlclxuICBpZiAoYmIxLnkyIDwgYmIyLnkxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChiYjIueTIgPCBiYjEueTEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjYXNlOiBvbmUgYmIgYmVsb3cgb3RoZXJcbiAgaWYgKGJiMS55MSA+IGJiMi55Mikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYmIyLnkxID4gYmIxLnkyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlLCBtdXN0IGhhdmUgc29tZSBvdmVybGFwXG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBpbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gaW5Cb3VuZGluZ0JveChiYiwgeCwgeSkge1xuICByZXR1cm4gYmIueDEgPD0geCAmJiB4IDw9IGJiLngyICYmIGJiLnkxIDw9IHkgJiYgeSA8PSBiYi55Mjtcbn07XG52YXIgcG9pbnRJbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gcG9pbnRJbkJvdW5kaW5nQm94KGJiLCBwdCkge1xuICByZXR1cm4gaW5Cb3VuZGluZ0JveChiYiwgcHQueCwgcHQueSk7XG59O1xudmFyIGJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChiYjEsIGJiMikge1xuICByZXR1cm4gaW5Cb3VuZGluZ0JveChiYjEsIGJiMi54MSwgYmIyLnkxKSAmJiBpbkJvdW5kaW5nQm94KGJiMSwgYmIyLngyLCBiYjIueTIpO1xufTtcbnZhciByb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUgPSBmdW5jdGlvbiByb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUoeCwgeSwgbm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSB7XG4gIHZhciByYWRpdXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNyAmJiBhcmd1bWVudHNbN10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s3XSA6ICdhdXRvJztcbiAgdmFyIGNvcm5lclJhZGl1cyA9IHJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMod2lkdGgsIGhlaWdodCkgOiByYWRpdXM7XG4gIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgY29ybmVyUmFkaXVzID0gTWF0aC5taW4oY29ybmVyUmFkaXVzLCBoYWxmV2lkdGgsIGhhbGZIZWlnaHQpO1xuICB2YXIgZG9XaWR0aCA9IGNvcm5lclJhZGl1cyAhPT0gaGFsZldpZHRoLFxuICAgIGRvSGVpZ2h0ID0gY29ybmVyUmFkaXVzICE9PSBoYWxmSGVpZ2h0O1xuXG4gIC8vIENoZWNrIGludGVyc2VjdGlvbnMgd2l0aCBzdHJhaWdodCBsaW5lIHNlZ21lbnRzXG4gIHZhciBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuXG4gIC8vIFRvcCBzZWdtZW50LCBsZWZ0IHRvIHJpZ2h0XG4gIGlmIChkb1dpZHRoKSB7XG4gICAgdmFyIHRvcFN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICB2YXIgdG9wRW5kWSA9IHRvcFN0YXJ0WTtcbiAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCB0b3BTdGFydFgsIHRvcFN0YXJ0WSwgdG9wRW5kWCwgdG9wRW5kWSwgZmFsc2UpO1xuICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJpZ2h0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgaWYgKGRvSGVpZ2h0KSB7XG4gICAgdmFyIHJpZ2h0U3RhcnRYID0gbm9kZVggKyBoYWxmV2lkdGggKyBwYWRkaW5nO1xuICAgIHZhciByaWdodFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgdmFyIHJpZ2h0RW5kWCA9IHJpZ2h0U3RhcnRYO1xuICAgIHZhciByaWdodEVuZFkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIHJpZ2h0U3RhcnRYLCByaWdodFN0YXJ0WSwgcmlnaHRFbmRYLCByaWdodEVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBCb3R0b20gc2VnbWVudCwgbGVmdCB0byByaWdodFxuICBpZiAoZG9XaWR0aCkge1xuICAgIHZhciBib3R0b21TdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgdmFyIGJvdHRvbVN0YXJ0WSA9IG5vZGVZICsgaGFsZkhlaWdodCArIHBhZGRpbmc7XG4gICAgdmFyIGJvdHRvbUVuZFggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgdmFyIGJvdHRvbUVuZFkgPSBib3R0b21TdGFydFk7XG4gICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIG5vZGVYLCBub2RlWSwgYm90dG9tU3RhcnRYLCBib3R0b21TdGFydFksIGJvdHRvbUVuZFgsIGJvdHRvbUVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBMZWZ0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgaWYgKGRvSGVpZ2h0KSB7XG4gICAgdmFyIGxlZnRTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgdmFyIGxlZnRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgIHZhciBsZWZ0RW5kWCA9IGxlZnRTdGFydFg7XG4gICAgdmFyIGxlZnRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCBsZWZ0U3RhcnRYLCBsZWZ0U3RhcnRZLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggYXJjIHNlZ21lbnRzXG4gIHZhciBhcmNJbnRlcnNlY3Rpb25zO1xuXG4gIC8vIFRvcCBMZWZ0XG4gIHtcbiAgICB2YXIgdG9wTGVmdENlbnRlclggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cztcbiAgICB2YXIgdG9wTGVmdENlbnRlclkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXM7XG4gICAgYXJjSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgbm9kZVgsIG5vZGVZLCB0b3BMZWZ0Q2VudGVyWCwgdG9wTGVmdENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG4gICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMCAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdIDw9IHRvcExlZnRDZW50ZXJYICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPD0gdG9wTGVmdENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG5cbiAgLy8gVG9wIFJpZ2h0XG4gIHtcbiAgICB2YXIgdG9wUmlnaHRDZW50ZXJYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXM7XG4gICAgdmFyIHRvcFJpZ2h0Q2VudGVyWSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cztcbiAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIHRvcFJpZ2h0Q2VudGVyWCwgdG9wUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSB0b3BSaWdodENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA8PSB0b3BSaWdodENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG5cbiAgLy8gQm90dG9tIFJpZ2h0XG4gIHtcbiAgICB2YXIgYm90dG9tUmlnaHRDZW50ZXJYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXM7XG4gICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cztcbiAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbVJpZ2h0Q2VudGVyWCwgYm90dG9tUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSBib3R0b21SaWdodENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA+PSBib3R0b21SaWdodENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG5cbiAgLy8gQm90dG9tIExlZnRcbiAge1xuICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzO1xuICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cztcbiAgICBhcmNJbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbUxlZnRDZW50ZXJYLCBib3R0b21MZWZ0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPD0gYm90dG9tTGVmdENlbnRlclggJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA+PSBib3R0b21MZWZ0Q2VudGVyWSkge1xuICAgICAgcmV0dXJuIFthcmNJbnRlcnNlY3Rpb25zWzBdLCBhcmNJbnRlcnNlY3Rpb25zWzFdXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdOyAvLyBpZiBub3RoaW5nXG59O1xuXG52YXIgaW5MaW5lVmljaW5pdHkgPSBmdW5jdGlvbiBpbkxpbmVWaWNpbml0eSh4LCB5LCBseDEsIGx5MSwgbHgyLCBseTIsIHRvbGVyYW5jZSkge1xuICB2YXIgdCA9IHRvbGVyYW5jZTtcbiAgdmFyIHgxID0gTWF0aC5taW4obHgxLCBseDIpO1xuICB2YXIgeDIgPSBNYXRoLm1heChseDEsIGx4Mik7XG4gIHZhciB5MSA9IE1hdGgubWluKGx5MSwgbHkyKTtcbiAgdmFyIHkyID0gTWF0aC5tYXgobHkxLCBseTIpO1xuICByZXR1cm4geDEgLSB0IDw9IHggJiYgeCA8PSB4MiArIHQgJiYgeTEgLSB0IDw9IHkgJiYgeSA8PSB5MiArIHQ7XG59O1xudmFyIGluQmV6aWVyVmljaW5pdHkgPSBmdW5jdGlvbiBpbkJlemllclZpY2luaXR5KHgsIHksIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHRvbGVyYW5jZSkge1xuICB2YXIgYmIgPSB7XG4gICAgeDE6IE1hdGgubWluKHgxLCB4MywgeDIpIC0gdG9sZXJhbmNlLFxuICAgIHgyOiBNYXRoLm1heCh4MSwgeDMsIHgyKSArIHRvbGVyYW5jZSxcbiAgICB5MTogTWF0aC5taW4oeTEsIHkzLCB5MikgLSB0b2xlcmFuY2UsXG4gICAgeTI6IE1hdGgubWF4KHkxLCB5MywgeTIpICsgdG9sZXJhbmNlXG4gIH07XG5cbiAgLy8gaWYgb3V0c2lkZSB0aGUgcm91Z2ggYm91bmRpbmcgYm94IGZvciB0aGUgYmV6aWVyLCB0aGVuIGl0IGNhbid0IGJlIGEgaGl0XG4gIGlmICh4IDwgYmIueDEgfHwgeCA+IGJiLngyIHx8IHkgPCBiYi55MSB8fCB5ID4gYmIueTIpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnYmV6aWVyIG91dCBvZiByb3VnaCBiYicpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIC8vIGNvbnNvbGUubG9nKCdkbyBtb3JlIGV4cGVuc2l2ZSBjaGVjaycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xudmFyIHNvbHZlUXVhZHJhdGljID0gZnVuY3Rpb24gc29sdmVRdWFkcmF0aWMoYSwgYiwgYywgdmFsKSB7XG4gIGMgLT0gdmFsO1xuICB2YXIgciA9IGIgKiBiIC0gNCAqIGEgKiBjO1xuICBpZiAociA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIHNxcnRSID0gTWF0aC5zcXJ0KHIpO1xuICB2YXIgZGVub20gPSAyICogYTtcbiAgdmFyIHJvb3QxID0gKC1iICsgc3FydFIpIC8gZGVub207XG4gIHZhciByb290MiA9ICgtYiAtIHNxcnRSKSAvIGRlbm9tO1xuICByZXR1cm4gW3Jvb3QxLCByb290Ml07XG59O1xudmFyIHNvbHZlQ3ViaWMgPSBmdW5jdGlvbiBzb2x2ZUN1YmljKGEsIGIsIGMsIGQsIHJlc3VsdCkge1xuICAvLyBTb2x2ZXMgYSBjdWJpYyBmdW5jdGlvbiwgcmV0dXJucyByb290IGluIGZvcm0gW3IxLCBpMSwgcjIsIGkyLCByMywgaTNdLCB3aGVyZVxuICAvLyByIGlzIHRoZSByZWFsIGNvbXBvbmVudCwgaSBpcyB0aGUgaW1hZ2luYXJ5IGNvbXBvbmVudFxuXG4gIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYXJkYW5vIG1ldGhvZCBmcm9tIHRoZSB5ZWFyIDE1NDVcbiAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19mdW5jdGlvbiNUaGVfbmF0dXJlX29mX3RoZV9yb290c1xuXG4gIHZhciBlcHNpbG9uID0gMC4wMDAwMTtcblxuICAvLyBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvIHdoaWxlIGtlZXBpbmcgdGhlIG92ZXJhbGwgZXhwcmVzc2lvbiBjbG9zZSBpbiB2YWx1ZVxuICBpZiAoYSA9PT0gMCkge1xuICAgIGEgPSBlcHNpbG9uO1xuICB9XG4gIGIgLz0gYTtcbiAgYyAvPSBhO1xuICBkIC89IGE7XG4gIHZhciBkaXNjcmltaW5hbnQsIHEsIHIsIGR1bTEsIHMsIHQsIHRlcm0xLCByMTM7XG4gIHEgPSAoMy4wICogYyAtIGIgKiBiKSAvIDkuMDtcbiAgciA9IC0oMjcuMCAqIGQpICsgYiAqICg5LjAgKiBjIC0gMi4wICogKGIgKiBiKSk7XG4gIHIgLz0gNTQuMDtcbiAgZGlzY3JpbWluYW50ID0gcSAqIHEgKiBxICsgciAqIHI7XG4gIHJlc3VsdFsxXSA9IDA7XG4gIHRlcm0xID0gYiAvIDMuMDtcbiAgaWYgKGRpc2NyaW1pbmFudCA+IDApIHtcbiAgICBzID0gciArIE1hdGguc3FydChkaXNjcmltaW5hbnQpO1xuICAgIHMgPSBzIDwgMCA/IC1NYXRoLnBvdygtcywgMS4wIC8gMy4wKSA6IE1hdGgucG93KHMsIDEuMCAvIDMuMCk7XG4gICAgdCA9IHIgLSBNYXRoLnNxcnQoZGlzY3JpbWluYW50KTtcbiAgICB0ID0gdCA8IDAgPyAtTWF0aC5wb3coLXQsIDEuMCAvIDMuMCkgOiBNYXRoLnBvdyh0LCAxLjAgLyAzLjApO1xuICAgIHJlc3VsdFswXSA9IC10ZXJtMSArIHMgKyB0O1xuICAgIHRlcm0xICs9IChzICsgdCkgLyAyLjA7XG4gICAgcmVzdWx0WzRdID0gcmVzdWx0WzJdID0gLXRlcm0xO1xuICAgIHRlcm0xID0gTWF0aC5zcXJ0KDMuMCkgKiAoLXQgKyBzKSAvIDI7XG4gICAgcmVzdWx0WzNdID0gdGVybTE7XG4gICAgcmVzdWx0WzVdID0gLXRlcm0xO1xuICAgIHJldHVybjtcbiAgfVxuICByZXN1bHRbNV0gPSByZXN1bHRbM10gPSAwO1xuICBpZiAoZGlzY3JpbWluYW50ID09PSAwKSB7XG4gICAgcjEzID0gciA8IDAgPyAtTWF0aC5wb3coLXIsIDEuMCAvIDMuMCkgOiBNYXRoLnBvdyhyLCAxLjAgLyAzLjApO1xuICAgIHJlc3VsdFswXSA9IC10ZXJtMSArIDIuMCAqIHIxMztcbiAgICByZXN1bHRbNF0gPSByZXN1bHRbMl0gPSAtKHIxMyArIHRlcm0xKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcSA9IC1xO1xuICBkdW0xID0gcSAqIHEgKiBxO1xuICBkdW0xID0gTWF0aC5hY29zKHIgLyBNYXRoLnNxcnQoZHVtMSkpO1xuICByMTMgPSAyLjAgKiBNYXRoLnNxcnQocSk7XG4gIHJlc3VsdFswXSA9IC10ZXJtMSArIHIxMyAqIE1hdGguY29zKGR1bTEgLyAzLjApO1xuICByZXN1bHRbMl0gPSAtdGVybTEgKyByMTMgKiBNYXRoLmNvcygoZHVtMSArIDIuMCAqIE1hdGguUEkpIC8gMy4wKTtcbiAgcmVzdWx0WzRdID0gLXRlcm0xICsgcjEzICogTWF0aC5jb3MoKGR1bTEgKyA0LjAgKiBNYXRoLlBJKSAvIDMuMCk7XG4gIHJldHVybjtcbn07XG52YXIgc3FkaXN0VG9RdWFkcmF0aWNCZXppZXIgPSBmdW5jdGlvbiBzcWRpc3RUb1F1YWRyYXRpY0Jlemllcih4LCB5LCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gIC8vIEZpbmQgbWluaW11bSBkaXN0YW5jZSBieSB1c2luZyB0aGUgbWluaW11bSBvZiB0aGUgZGlzdGFuY2VcbiAgLy8gZnVuY3Rpb24gYmV0d2VlbiB0aGUgZ2l2ZW4gcG9pbnQgYW5kIHRoZSBjdXJ2ZVxuXG4gIC8vIFRoaXMgZ2l2ZXMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcmVzdWx0aW5nIGN1YmljIGVxdWF0aW9uXG4gIC8vIHdob3NlIHJvb3RzIHRlbGwgdXMgd2hlcmUgYSBwb3NzaWJsZSBtaW5pbXVtIGlzXG4gIC8vIChDb2VmZmljaWVudHMgYXJlIGRpdmlkZWQgYnkgNClcblxuICB2YXIgYSA9IDEuMCAqIHgxICogeDEgLSA0ICogeDEgKiB4MiArIDIgKiB4MSAqIHgzICsgNCAqIHgyICogeDIgLSA0ICogeDIgKiB4MyArIHgzICogeDMgKyB5MSAqIHkxIC0gNCAqIHkxICogeTIgKyAyICogeTEgKiB5MyArIDQgKiB5MiAqIHkyIC0gNCAqIHkyICogeTMgKyB5MyAqIHkzO1xuICB2YXIgYiA9IDEuMCAqIDkgKiB4MSAqIHgyIC0gMyAqIHgxICogeDEgLSAzICogeDEgKiB4MyAtIDYgKiB4MiAqIHgyICsgMyAqIHgyICogeDMgKyA5ICogeTEgKiB5MiAtIDMgKiB5MSAqIHkxIC0gMyAqIHkxICogeTMgLSA2ICogeTIgKiB5MiArIDMgKiB5MiAqIHkzO1xuICB2YXIgYyA9IDEuMCAqIDMgKiB4MSAqIHgxIC0gNiAqIHgxICogeDIgKyB4MSAqIHgzIC0geDEgKiB4ICsgMiAqIHgyICogeDIgKyAyICogeDIgKiB4IC0geDMgKiB4ICsgMyAqIHkxICogeTEgLSA2ICogeTEgKiB5MiArIHkxICogeTMgLSB5MSAqIHkgKyAyICogeTIgKiB5MiArIDIgKiB5MiAqIHkgLSB5MyAqIHk7XG4gIHZhciBkID0gMS4wICogeDEgKiB4MiAtIHgxICogeDEgKyB4MSAqIHggLSB4MiAqIHggKyB5MSAqIHkyIC0geTEgKiB5MSArIHkxICogeSAtIHkyICogeTtcblxuICAvLyBkZWJ1ZyhcImNvZWZmaWNpZW50czogXCIgKyBhIC8gYSArIFwiLCBcIiArIGIgLyBhICsgXCIsIFwiICsgYyAvIGEgKyBcIiwgXCIgKyBkIC8gYSk7XG5cbiAgdmFyIHJvb3RzID0gW107XG5cbiAgLy8gVXNlIHRoZSBjdWJpYyBzb2x2aW5nIGFsZ29yaXRobVxuICBzb2x2ZUN1YmljKGEsIGIsIGMsIGQsIHJvb3RzKTtcbiAgdmFyIHplcm9UaHJlc2hvbGQgPSAwLjAwMDAwMDE7XG4gIHZhciBwYXJhbXMgPSBbXTtcbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IDY7IGluZGV4ICs9IDIpIHtcbiAgICBpZiAoTWF0aC5hYnMocm9vdHNbaW5kZXggKyAxXSkgPCB6ZXJvVGhyZXNob2xkICYmIHJvb3RzW2luZGV4XSA+PSAwICYmIHJvb3RzW2luZGV4XSA8PSAxLjApIHtcbiAgICAgIHBhcmFtcy5wdXNoKHJvb3RzW2luZGV4XSk7XG4gICAgfVxuICB9XG4gIHBhcmFtcy5wdXNoKDEuMCk7XG4gIHBhcmFtcy5wdXNoKDAuMCk7XG4gIHZhciBtaW5EaXN0YW5jZVNxdWFyZWQgPSAtMTtcbiAgdmFyIGN1clgsIGN1clksIGRpc3RTcXVhcmVkO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgIGN1clggPSBNYXRoLnBvdygxLjAgLSBwYXJhbXNbaV0sIDIuMCkgKiB4MSArIDIuMCAqICgxIC0gcGFyYW1zW2ldKSAqIHBhcmFtc1tpXSAqIHgyICsgcGFyYW1zW2ldICogcGFyYW1zW2ldICogeDM7XG4gICAgY3VyWSA9IE1hdGgucG93KDEgLSBwYXJhbXNbaV0sIDIuMCkgKiB5MSArIDIgKiAoMS4wIC0gcGFyYW1zW2ldKSAqIHBhcmFtc1tpXSAqIHkyICsgcGFyYW1zW2ldICogcGFyYW1zW2ldICogeTM7XG4gICAgZGlzdFNxdWFyZWQgPSBNYXRoLnBvdyhjdXJYIC0geCwgMikgKyBNYXRoLnBvdyhjdXJZIC0geSwgMik7XG4gICAgLy8gZGVidWcoJ2Rpc3RhbmNlIGZvciBwYXJhbSAnICsgcGFyYW1zW2ldICsgXCI6IFwiICsgTWF0aC5zcXJ0KGRpc3RTcXVhcmVkKSk7XG4gICAgaWYgKG1pbkRpc3RhbmNlU3F1YXJlZCA+PSAwKSB7XG4gICAgICBpZiAoZGlzdFNxdWFyZWQgPCBtaW5EaXN0YW5jZVNxdWFyZWQpIHtcbiAgICAgICAgbWluRGlzdGFuY2VTcXVhcmVkID0gZGlzdFNxdWFyZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbkRpc3RhbmNlU3F1YXJlZCA9IGRpc3RTcXVhcmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluRGlzdGFuY2VTcXVhcmVkO1xufTtcbnZhciBzcWRpc3RUb0Zpbml0ZUxpbmUgPSBmdW5jdGlvbiBzcWRpc3RUb0Zpbml0ZUxpbmUoeCwgeSwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIG9mZnNldCA9IFt4IC0geDEsIHkgLSB5MV07XG4gIHZhciBsaW5lID0gW3gyIC0geDEsIHkyIC0geTFdO1xuICB2YXIgbGluZVNxID0gbGluZVswXSAqIGxpbmVbMF0gKyBsaW5lWzFdICogbGluZVsxXTtcbiAgdmFyIGh5cFNxID0gb2Zmc2V0WzBdICogb2Zmc2V0WzBdICsgb2Zmc2V0WzFdICogb2Zmc2V0WzFdO1xuICB2YXIgZG90UHJvZHVjdCA9IG9mZnNldFswXSAqIGxpbmVbMF0gKyBvZmZzZXRbMV0gKiBsaW5lWzFdO1xuICB2YXIgYWRqU3EgPSBkb3RQcm9kdWN0ICogZG90UHJvZHVjdCAvIGxpbmVTcTtcbiAgaWYgKGRvdFByb2R1Y3QgPCAwKSB7XG4gICAgcmV0dXJuIGh5cFNxO1xuICB9XG4gIGlmIChhZGpTcSA+IGxpbmVTcSkge1xuICAgIHJldHVybiAoeCAtIHgyKSAqICh4IC0geDIpICsgKHkgLSB5MikgKiAoeSAtIHkyKTtcbiAgfVxuICByZXR1cm4gaHlwU3EgLSBhZGpTcTtcbn07XG52YXIgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzID0gZnVuY3Rpb24gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHBvaW50cykge1xuICB2YXIgeDEsIHkxLCB4MiwgeTI7XG4gIHZhciB5MztcblxuICAvLyBJbnRlcnNlY3Qgd2l0aCB2ZXJ0aWNhbCBsaW5lIHRocm91Z2ggKHgsIHkpXG4gIHZhciB1cCA9IDA7XG4gIC8vIGxldCBkb3duID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgeDEgPSBwb2ludHNbaSAqIDJdO1xuICAgIHkxID0gcG9pbnRzW2kgKiAyICsgMV07XG4gICAgaWYgKGkgKyAxIDwgcG9pbnRzLmxlbmd0aCAvIDIpIHtcbiAgICAgIHgyID0gcG9pbnRzWyhpICsgMSkgKiAyXTtcbiAgICAgIHkyID0gcG9pbnRzWyhpICsgMSkgKiAyICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHgyID0gcG9pbnRzWyhpICsgMSAtIHBvaW50cy5sZW5ndGggLyAyKSAqIDJdO1xuICAgICAgeTIgPSBwb2ludHNbKGkgKyAxIC0gcG9pbnRzLmxlbmd0aCAvIDIpICogMiArIDFdO1xuICAgIH1cbiAgICBpZiAoeDEgPT0geCAmJiB4MiA9PSB4KSA7IGVsc2UgaWYgKHgxID49IHggJiYgeCA+PSB4MiB8fCB4MSA8PSB4ICYmIHggPD0geDIpIHtcbiAgICAgIHkzID0gKHggLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTtcbiAgICAgIGlmICh5MyA+IHkpIHtcbiAgICAgICAgdXArKztcbiAgICAgIH1cblxuICAgICAgLy8gaWYoIHkzIDwgeSApe1xuICAgICAgLy8gZG93bisrO1xuICAgICAgLy8gfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHVwICUgMiA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbnZhciBwb2ludEluc2lkZVBvbHlnb24gPSBmdW5jdGlvbiBwb2ludEluc2lkZVBvbHlnb24oeCwgeSwgYmFzZVBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgZGlyZWN0aW9uLCBwYWRkaW5nKSB7XG4gIHZhciB0cmFuc2Zvcm1lZFBvaW50cyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCk7XG5cbiAgLy8gR2l2ZXMgbmVnYXRpdmUgYW5nbGVcbiAgdmFyIGFuZ2xlO1xuICBpZiAoZGlyZWN0aW9uWzBdICE9IG51bGwpIHtcbiAgICBhbmdsZSA9IE1hdGguYXRhbihkaXJlY3Rpb25bMV0gLyBkaXJlY3Rpb25bMF0pO1xuICAgIGlmIChkaXJlY3Rpb25bMF0gPCAwKSB7XG4gICAgICBhbmdsZSA9IGFuZ2xlICsgTWF0aC5QSSAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuZ2xlID0gLWFuZ2xlIC0gTWF0aC5QSSAvIDI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFuZ2xlID0gZGlyZWN0aW9uO1xuICB9XG4gIHZhciBjb3MgPSBNYXRoLmNvcygtYW5nbGUpO1xuICB2YXIgc2luID0gTWF0aC5zaW4oLWFuZ2xlKTtcblxuICAvLyAgICBjb25zb2xlLmxvZyhcImJhc2U6IFwiICsgYmFzZVBvaW50cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3JtZWRQb2ludHMubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdID0gd2lkdGggLyAyICogKGJhc2VQb2ludHNbaSAqIDJdICogY29zIC0gYmFzZVBvaW50c1tpICogMiArIDFdICogc2luKTtcbiAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMiArIDFdID0gaGVpZ2h0IC8gMiAqIChiYXNlUG9pbnRzW2kgKiAyICsgMV0gKiBjb3MgKyBiYXNlUG9pbnRzW2kgKiAyXSAqIHNpbik7XG4gICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdICs9IGNlbnRlclg7XG4gICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDIgKyAxXSArPSBjZW50ZXJZO1xuICB9XG4gIHZhciBwb2ludHM7XG4gIGlmIChwYWRkaW5nID4gMCkge1xuICAgIHZhciBleHBhbmRlZExpbmVTZXQgPSBleHBhbmRQb2x5Z29uKHRyYW5zZm9ybWVkUG9pbnRzLCAtcGFkZGluZyk7XG4gICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZGVkTGluZVNldCk7XG4gIH0gZWxzZSB7XG4gICAgcG9pbnRzID0gdHJhbnNmb3JtZWRQb2ludHM7XG4gIH1cbiAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpO1xufTtcbnZhciBwb2ludEluc2lkZVJvdW5kUG9seWdvbiA9IGZ1bmN0aW9uIHBvaW50SW5zaWRlUm91bmRQb2x5Z29uKHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lcnMpIHtcbiAgdmFyIGN1dFBvbHlnb25Qb2ludHMgPSBuZXcgQXJyYXkoYmFzZVBvaW50cy5sZW5ndGggKiAyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3JuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvcm5lciA9IGNvcm5lcnNbaV07XG4gICAgY3V0UG9seWdvblBvaW50c1tpICogNCArIDBdID0gY29ybmVyLnN0YXJ0WDtcbiAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0ICsgMV0gPSBjb3JuZXIuc3RhcnRZO1xuICAgIGN1dFBvbHlnb25Qb2ludHNbaSAqIDQgKyAyXSA9IGNvcm5lci5zdG9wWDtcbiAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0ICsgM10gPSBjb3JuZXIuc3RvcFk7XG4gICAgdmFyIHNxdWFyZWREaXN0YW5jZSA9IE1hdGgucG93KGNvcm5lci5jeCAtIHgsIDIpICsgTWF0aC5wb3coY29ybmVyLmN5IC0geSwgMik7XG4gICAgaWYgKHNxdWFyZWREaXN0YW5jZSA8PSBNYXRoLnBvdyhjb3JuZXIucmFkaXVzLCAyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0UG9seWdvblBvaW50cyk7XG59O1xudmFyIGpvaW5MaW5lcyA9IGZ1bmN0aW9uIGpvaW5MaW5lcyhsaW5lU2V0KSB7XG4gIHZhciB2ZXJ0aWNlcyA9IG5ldyBBcnJheShsaW5lU2V0Lmxlbmd0aCAvIDIpO1xuICB2YXIgY3VycmVudExpbmVTdGFydFgsIGN1cnJlbnRMaW5lU3RhcnRZLCBjdXJyZW50TGluZUVuZFgsIGN1cnJlbnRMaW5lRW5kWTtcbiAgdmFyIG5leHRMaW5lU3RhcnRYLCBuZXh0TGluZVN0YXJ0WSwgbmV4dExpbmVFbmRYLCBuZXh0TGluZUVuZFk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVNldC5sZW5ndGggLyA0OyBpKyspIHtcbiAgICBjdXJyZW50TGluZVN0YXJ0WCA9IGxpbmVTZXRbaSAqIDRdO1xuICAgIGN1cnJlbnRMaW5lU3RhcnRZID0gbGluZVNldFtpICogNCArIDFdO1xuICAgIGN1cnJlbnRMaW5lRW5kWCA9IGxpbmVTZXRbaSAqIDQgKyAyXTtcbiAgICBjdXJyZW50TGluZUVuZFkgPSBsaW5lU2V0W2kgKiA0ICsgM107XG4gICAgaWYgKGkgPCBsaW5lU2V0Lmxlbmd0aCAvIDQgLSAxKSB7XG4gICAgICBuZXh0TGluZVN0YXJ0WCA9IGxpbmVTZXRbKGkgKyAxKSAqIDRdO1xuICAgICAgbmV4dExpbmVTdGFydFkgPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgMV07XG4gICAgICBuZXh0TGluZUVuZFggPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgMl07XG4gICAgICBuZXh0TGluZUVuZFkgPSBsaW5lU2V0WyhpICsgMSkgKiA0ICsgM107XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRMaW5lU3RhcnRYID0gbGluZVNldFswXTtcbiAgICAgIG5leHRMaW5lU3RhcnRZID0gbGluZVNldFsxXTtcbiAgICAgIG5leHRMaW5lRW5kWCA9IGxpbmVTZXRbMl07XG4gICAgICBuZXh0TGluZUVuZFkgPSBsaW5lU2V0WzNdO1xuICAgIH1cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gZmluaXRlTGluZXNJbnRlcnNlY3QoY3VycmVudExpbmVTdGFydFgsIGN1cnJlbnRMaW5lU3RhcnRZLCBjdXJyZW50TGluZUVuZFgsIGN1cnJlbnRMaW5lRW5kWSwgbmV4dExpbmVTdGFydFgsIG5leHRMaW5lU3RhcnRZLCBuZXh0TGluZUVuZFgsIG5leHRMaW5lRW5kWSwgdHJ1ZSk7XG4gICAgdmVydGljZXNbaSAqIDJdID0gaW50ZXJzZWN0aW9uWzBdO1xuICAgIHZlcnRpY2VzW2kgKiAyICsgMV0gPSBpbnRlcnNlY3Rpb25bMV07XG4gIH1cbiAgcmV0dXJuIHZlcnRpY2VzO1xufTtcbnZhciBleHBhbmRQb2x5Z29uID0gZnVuY3Rpb24gZXhwYW5kUG9seWdvbihwb2ludHMsIHBhZCkge1xuICB2YXIgZXhwYW5kZWRMaW5lU2V0ID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGggKiAyKTtcbiAgdmFyIGN1cnJlbnRQb2ludFgsIGN1cnJlbnRQb2ludFksIG5leHRQb2ludFgsIG5leHRQb2ludFk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgIGN1cnJlbnRQb2ludFggPSBwb2ludHNbaSAqIDJdO1xuICAgIGN1cnJlbnRQb2ludFkgPSBwb2ludHNbaSAqIDIgKyAxXTtcbiAgICBpZiAoaSA8IHBvaW50cy5sZW5ndGggLyAyIC0gMSkge1xuICAgICAgbmV4dFBvaW50WCA9IHBvaW50c1soaSArIDEpICogMl07XG4gICAgICBuZXh0UG9pbnRZID0gcG9pbnRzWyhpICsgMSkgKiAyICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRQb2ludFggPSBwb2ludHNbMF07XG4gICAgICBuZXh0UG9pbnRZID0gcG9pbnRzWzFdO1xuICAgIH1cblxuICAgIC8vIEN1cnJlbnQgbGluZTogW2N1cnJlbnRQb2ludFgsIGN1cnJlbnRQb2ludFldIHRvIFtuZXh0UG9pbnRYLCBuZXh0UG9pbnRZXVxuXG4gICAgLy8gQXNzdW1lIENDVyBwb2x5Z29uIHdpbmRpbmdcblxuICAgIHZhciBvZmZzZXRYID0gbmV4dFBvaW50WSAtIGN1cnJlbnRQb2ludFk7XG4gICAgdmFyIG9mZnNldFkgPSAtKG5leHRQb2ludFggLSBjdXJyZW50UG9pbnRYKTtcblxuICAgIC8vIE5vcm1hbGl6ZVxuICAgIHZhciBvZmZzZXRMZW5ndGggPSBNYXRoLnNxcnQob2Zmc2V0WCAqIG9mZnNldFggKyBvZmZzZXRZICogb2Zmc2V0WSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRPZmZzZXRYID0gb2Zmc2V0WCAvIG9mZnNldExlbmd0aDtcbiAgICB2YXIgbm9ybWFsaXplZE9mZnNldFkgPSBvZmZzZXRZIC8gb2Zmc2V0TGVuZ3RoO1xuICAgIGV4cGFuZGVkTGluZVNldFtpICogNF0gPSBjdXJyZW50UG9pbnRYICsgbm9ybWFsaXplZE9mZnNldFggKiBwYWQ7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgMV0gPSBjdXJyZW50UG9pbnRZICsgbm9ybWFsaXplZE9mZnNldFkgKiBwYWQ7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgMl0gPSBuZXh0UG9pbnRYICsgbm9ybWFsaXplZE9mZnNldFggKiBwYWQ7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0ICsgM10gPSBuZXh0UG9pbnRZICsgbm9ybWFsaXplZE9mZnNldFkgKiBwYWQ7XG4gIH1cbiAgcmV0dXJuIGV4cGFuZGVkTGluZVNldDtcbn07XG52YXIgaW50ZXJzZWN0TGluZUVsbGlwc2UgPSBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lRWxsaXBzZSh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCBlbGxpcHNlV3JhZGl1cywgZWxsaXBzZUhyYWRpdXMpIHtcbiAgdmFyIGRpc3BYID0gY2VudGVyWCAtIHg7XG4gIHZhciBkaXNwWSA9IGNlbnRlclkgLSB5O1xuICBkaXNwWCAvPSBlbGxpcHNlV3JhZGl1cztcbiAgZGlzcFkgLz0gZWxsaXBzZUhyYWRpdXM7XG4gIHZhciBsZW4gPSBNYXRoLnNxcnQoZGlzcFggKiBkaXNwWCArIGRpc3BZICogZGlzcFkpO1xuICB2YXIgbmV3TGVuZ3RoID0gbGVuIC0gMTtcbiAgaWYgKG5ld0xlbmd0aCA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlblByb3BvcnRpb24gPSBuZXdMZW5ndGggLyBsZW47XG4gIHJldHVybiBbKGNlbnRlclggLSB4KSAqIGxlblByb3BvcnRpb24gKyB4LCAoY2VudGVyWSAtIHkpICogbGVuUHJvcG9ydGlvbiArIHldO1xufTtcbnZhciBjaGVja0luRWxsaXBzZSA9IGZ1bmN0aW9uIGNoZWNrSW5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHBhZGRpbmcpIHtcbiAgeCAtPSBjZW50ZXJYO1xuICB5IC09IGNlbnRlclk7XG4gIHggLz0gd2lkdGggLyAyICsgcGFkZGluZztcbiAgeSAvPSBoZWlnaHQgLyAyICsgcGFkZGluZztcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgPD0gMTtcbn07XG5cbi8vIFJldHVybnMgaW50ZXJzZWN0aW9ucyBvZiBpbmNyZWFzaW5nIGRpc3RhbmNlIGZyb20gbGluZSdzIHN0YXJ0IHBvaW50XG52YXIgaW50ZXJzZWN0TGluZUNpcmNsZSA9IGZ1bmN0aW9uIGludGVyc2VjdExpbmVDaXJjbGUoeDEsIHkxLCB4MiwgeTIsIGNlbnRlclgsIGNlbnRlclksIHJhZGl1cykge1xuICAvLyBDYWxjdWxhdGUgZCwgZGlyZWN0aW9uIHZlY3RvciBvZiBsaW5lXG4gIHZhciBkID0gW3gyIC0geDEsIHkyIC0geTFdOyAvLyBEaXJlY3Rpb24gdmVjdG9yIG9mIGxpbmVcbiAgdmFyIGYgPSBbeDEgLSBjZW50ZXJYLCB5MSAtIGNlbnRlclldO1xuICB2YXIgYSA9IGRbMF0gKiBkWzBdICsgZFsxXSAqIGRbMV07XG4gIHZhciBiID0gMiAqIChmWzBdICogZFswXSArIGZbMV0gKiBkWzFdKTtcbiAgdmFyIGMgPSBmWzBdICogZlswXSArIGZbMV0gKiBmWzFdIC0gcmFkaXVzICogcmFkaXVzO1xuICB2YXIgZGlzY3JpbWluYW50ID0gYiAqIGIgLSA0ICogYSAqIGM7XG4gIGlmIChkaXNjcmltaW5hbnQgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciB0MSA9ICgtYiArIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG4gIHZhciB0MiA9ICgtYiAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG4gIHZhciB0TWluID0gTWF0aC5taW4odDEsIHQyKTtcbiAgdmFyIHRNYXggPSBNYXRoLm1heCh0MSwgdDIpO1xuICB2YXIgaW5SYW5nZVBhcmFtcyA9IFtdO1xuICBpZiAodE1pbiA+PSAwICYmIHRNaW4gPD0gMSkge1xuICAgIGluUmFuZ2VQYXJhbXMucHVzaCh0TWluKTtcbiAgfVxuICBpZiAodE1heCA+PSAwICYmIHRNYXggPD0gMSkge1xuICAgIGluUmFuZ2VQYXJhbXMucHVzaCh0TWF4KTtcbiAgfVxuICBpZiAoaW5SYW5nZVBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIG5lYXJJbnRlcnNlY3Rpb25YID0gaW5SYW5nZVBhcmFtc1swXSAqIGRbMF0gKyB4MTtcbiAgdmFyIG5lYXJJbnRlcnNlY3Rpb25ZID0gaW5SYW5nZVBhcmFtc1swXSAqIGRbMV0gKyB5MTtcbiAgaWYgKGluUmFuZ2VQYXJhbXMubGVuZ3RoID4gMSkge1xuICAgIGlmIChpblJhbmdlUGFyYW1zWzBdID09IGluUmFuZ2VQYXJhbXNbMV0pIHtcbiAgICAgIHJldHVybiBbbmVhckludGVyc2VjdGlvblgsIG5lYXJJbnRlcnNlY3Rpb25ZXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZhckludGVyc2VjdGlvblggPSBpblJhbmdlUGFyYW1zWzFdICogZFswXSArIHgxO1xuICAgICAgdmFyIGZhckludGVyc2VjdGlvblkgPSBpblJhbmdlUGFyYW1zWzFdICogZFsxXSArIHkxO1xuICAgICAgcmV0dXJuIFtuZWFySW50ZXJzZWN0aW9uWCwgbmVhckludGVyc2VjdGlvblksIGZhckludGVyc2VjdGlvblgsIGZhckludGVyc2VjdGlvblldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW25lYXJJbnRlcnNlY3Rpb25YLCBuZWFySW50ZXJzZWN0aW9uWV07XG4gIH1cbn07XG52YXIgbWlkT2ZUaHJlZSA9IGZ1bmN0aW9uIG1pZE9mVGhyZWUoYSwgYiwgYykge1xuICBpZiAoYiA8PSBhICYmIGEgPD0gYyB8fCBjIDw9IGEgJiYgYSA8PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0gZWxzZSBpZiAoYSA8PSBiICYmIGIgPD0gYyB8fCBjIDw9IGIgJiYgYiA8PSBhKSB7XG4gICAgcmV0dXJuIGI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGM7XG4gIH1cbn07XG5cbi8vICh4MSx5MSk9Pih4Mix5MikgaW50ZXJzZWN0IHdpdGggKHgzLHkzKT0+KHg0LHk0KVxudmFyIGZpbml0ZUxpbmVzSW50ZXJzZWN0ID0gZnVuY3Rpb24gZmluaXRlTGluZXNJbnRlcnNlY3QoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBpbmZpbml0ZUxpbmVzKSB7XG4gIHZhciBkeDEzID0geDEgLSB4MztcbiAgdmFyIGR4MjEgPSB4MiAtIHgxO1xuICB2YXIgZHg0MyA9IHg0IC0geDM7XG4gIHZhciBkeTEzID0geTEgLSB5MztcbiAgdmFyIGR5MjEgPSB5MiAtIHkxO1xuICB2YXIgZHk0MyA9IHk0IC0geTM7XG4gIHZhciB1YV90ID0gZHg0MyAqIGR5MTMgLSBkeTQzICogZHgxMztcbiAgdmFyIHViX3QgPSBkeDIxICogZHkxMyAtIGR5MjEgKiBkeDEzO1xuICB2YXIgdV9iID0gZHk0MyAqIGR4MjEgLSBkeDQzICogZHkyMTtcbiAgaWYgKHVfYiAhPT0gMCkge1xuICAgIHZhciB1YSA9IHVhX3QgLyB1X2I7XG4gICAgdmFyIHViID0gdWJfdCAvIHVfYjtcbiAgICB2YXIgZmxwdFRocmVzaG9sZCA9IDAuMDAxO1xuICAgIHZhciBfbWluID0gMCAtIGZscHRUaHJlc2hvbGQ7XG4gICAgdmFyIF9tYXggPSAxICsgZmxwdFRocmVzaG9sZDtcbiAgICBpZiAoX21pbiA8PSB1YSAmJiB1YSA8PSBfbWF4ICYmIF9taW4gPD0gdWIgJiYgdWIgPD0gX21heCkge1xuICAgICAgcmV0dXJuIFt4MSArIHVhICogZHgyMSwgeTEgKyB1YSAqIGR5MjFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWluZmluaXRlTGluZXMpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt4MSArIHVhICogZHgyMSwgeTEgKyB1YSAqIGR5MjFdO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodWFfdCA9PT0gMCB8fCB1Yl90ID09PSAwKSB7XG4gICAgICAvLyBQYXJhbGxlbCwgY29pbmNpZGVudCBsaW5lcy4gQ2hlY2sgaWYgb3ZlcmxhcFxuXG4gICAgICAvLyBDaGVjayBlbmRwb2ludCBvZiBzZWNvbmQgbGluZVxuICAgICAgaWYgKG1pZE9mVGhyZWUoeDEsIHgyLCB4NCkgPT09IHg0KSB7XG4gICAgICAgIHJldHVybiBbeDQsIHk0XTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgc3RhcnQgcG9pbnQgb2Ygc2Vjb25kIGxpbmVcbiAgICAgIGlmIChtaWRPZlRocmVlKHgxLCB4MiwgeDMpID09PSB4Mykge1xuICAgICAgICByZXR1cm4gW3gzLCB5M107XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZHBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICAgIGlmIChtaWRPZlRocmVlKHgzLCB4NCwgeDIpID09PSB4Mikge1xuICAgICAgICByZXR1cm4gW3gyLCB5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcmFsbGVsLCBub24tY29pbmNpZGVudFxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufTtcblxuLy8gbWF0aC5wb2x5Z29uSW50ZXJzZWN0TGluZSggeCwgeSwgYmFzZVBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZyApXG4vLyBpbnRlcnNlY3QgYSBub2RlIHBvbHlnb24gKHB0cyB0cmFuc2Zvcm1lZClcbi8vXG4vLyBtYXRoLnBvbHlnb25JbnRlcnNlY3RMaW5lKCB4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZIClcbi8vIGludGVyc2VjdCB0aGUgcG9pbnRzIChubyB0cmFuc2Zvcm0pXG52YXIgcG9seWdvbkludGVyc2VjdExpbmUgPSBmdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSB7XG4gIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG4gIHZhciBpbnRlcnNlY3Rpb247XG4gIHZhciB0cmFuc2Zvcm1lZFBvaW50cyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCk7XG4gIHZhciBkb1RyYW5zZm9ybSA9IHRydWU7XG4gIGlmICh3aWR0aCA9PSBudWxsKSB7XG4gICAgZG9UcmFuc2Zvcm0gPSBmYWxzZTtcbiAgfVxuICB2YXIgcG9pbnRzO1xuICBpZiAoZG9UcmFuc2Zvcm0pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybWVkUG9pbnRzLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgdHJhbnNmb3JtZWRQb2ludHNbaSAqIDJdID0gYmFzZVBvaW50c1tpICogMl0gKiB3aWR0aCArIGNlbnRlclg7XG4gICAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMiArIDFdID0gYmFzZVBvaW50c1tpICogMiArIDFdICogaGVpZ2h0ICsgY2VudGVyWTtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgICB2YXIgZXhwYW5kZWRMaW5lU2V0ID0gZXhwYW5kUG9seWdvbih0cmFuc2Zvcm1lZFBvaW50cywgLXBhZGRpbmcpO1xuICAgICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZGVkTGluZVNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50cyA9IHRyYW5zZm9ybWVkUG9pbnRzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSBiYXNlUG9pbnRzO1xuICB9XG4gIHZhciBjdXJyZW50WCwgY3VycmVudFksIG5leHRYLCBuZXh0WTtcbiAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcG9pbnRzLmxlbmd0aCAvIDI7IF9pMisrKSB7XG4gICAgY3VycmVudFggPSBwb2ludHNbX2kyICogMl07XG4gICAgY3VycmVudFkgPSBwb2ludHNbX2kyICogMiArIDFdO1xuICAgIGlmIChfaTIgPCBwb2ludHMubGVuZ3RoIC8gMiAtIDEpIHtcbiAgICAgIG5leHRYID0gcG9pbnRzWyhfaTIgKyAxKSAqIDJdO1xuICAgICAgbmV4dFkgPSBwb2ludHNbKF9pMiArIDEpICogMiArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0WCA9IHBvaW50c1swXTtcbiAgICAgIG5leHRZID0gcG9pbnRzWzFdO1xuICAgIH1cbiAgICBpbnRlcnNlY3Rpb24gPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCBjdXJyZW50WCwgY3VycmVudFksIG5leHRYLCBuZXh0WSk7XG4gICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgIGludGVyc2VjdGlvbnMucHVzaChpbnRlcnNlY3Rpb25bMF0sIGludGVyc2VjdGlvblsxXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnRlcnNlY3Rpb25zO1xufTtcbnZhciByb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lID0gZnVuY3Rpb24gcm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCBjb3JuZXJzKSB7XG4gIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG4gIHZhciBpbnRlcnNlY3Rpb247XG4gIHZhciBsaW5lcyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCAqIDIpO1xuICBjb3JuZXJzLmZvckVhY2goZnVuY3Rpb24gKGNvcm5lciwgaSkge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAyXSA9IGNvcm5lci5zdGFydFg7XG4gICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9IGNvcm5lci5zdGFydFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzW2kgKiA0IC0gMl0gPSBjb3JuZXIuc3RhcnRYO1xuICAgICAgbGluZXNbaSAqIDQgLSAxXSA9IGNvcm5lci5zdGFydFk7XG4gICAgfVxuICAgIGxpbmVzW2kgKiA0XSA9IGNvcm5lci5zdG9wWDtcbiAgICBsaW5lc1tpICogNCArIDFdID0gY29ybmVyLnN0b3BZO1xuICAgIGludGVyc2VjdGlvbiA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgY29ybmVyLmN4LCBjb3JuZXIuY3ksIGNvcm5lci5yYWRpdXMpO1xuICAgIGlmIChpbnRlcnNlY3Rpb24ubGVuZ3RoICE9PSAwKSB7XG4gICAgICBpbnRlcnNlY3Rpb25zLnB1c2goaW50ZXJzZWN0aW9uWzBdLCBpbnRlcnNlY3Rpb25bMV0pO1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoIC8gNDsgaSsrKSB7XG4gICAgaW50ZXJzZWN0aW9uID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgbGluZXNbaSAqIDRdLCBsaW5lc1tpICogNCArIDFdLCBsaW5lc1tpICogNCArIDJdLCBsaW5lc1tpICogNCArIDNdLCBmYWxzZSk7XG4gICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgIGludGVyc2VjdGlvbnMucHVzaChpbnRlcnNlY3Rpb25bMF0sIGludGVyc2VjdGlvblsxXSk7XG4gICAgfVxuICB9XG4gIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDIpIHtcbiAgICB2YXIgbG93ZXN0SW50ZXJzZWN0aW9uID0gW2ludGVyc2VjdGlvbnNbMF0sIGludGVyc2VjdGlvbnNbMV1dO1xuICAgIHZhciBsb3dlc3RTcXVhcmVkRGlzdGFuY2UgPSBNYXRoLnBvdyhsb3dlc3RJbnRlcnNlY3Rpb25bMF0gLSB4LCAyKSArIE1hdGgucG93KGxvd2VzdEludGVyc2VjdGlvblsxXSAtIHksIDIpO1xuICAgIGZvciAodmFyIF9pMyA9IDE7IF9pMyA8IGludGVyc2VjdGlvbnMubGVuZ3RoIC8gMjsgX2kzKyspIHtcbiAgICAgIHZhciBzcXVhcmVkRGlzdGFuY2UgPSBNYXRoLnBvdyhpbnRlcnNlY3Rpb25zW19pMyAqIDJdIC0geCwgMikgKyBNYXRoLnBvdyhpbnRlcnNlY3Rpb25zW19pMyAqIDIgKyAxXSAtIHksIDIpO1xuICAgICAgaWYgKHNxdWFyZWREaXN0YW5jZSA8PSBsb3dlc3RTcXVhcmVkRGlzdGFuY2UpIHtcbiAgICAgICAgbG93ZXN0SW50ZXJzZWN0aW9uWzBdID0gaW50ZXJzZWN0aW9uc1tfaTMgKiAyXTtcbiAgICAgICAgbG93ZXN0SW50ZXJzZWN0aW9uWzFdID0gaW50ZXJzZWN0aW9uc1tfaTMgKiAyICsgMV07XG4gICAgICAgIGxvd2VzdFNxdWFyZWREaXN0YW5jZSA9IHNxdWFyZWREaXN0YW5jZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvd2VzdEludGVyc2VjdGlvbjtcbiAgfVxuICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbn07XG52YXIgc2hvcnRlbkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0aW9uLCBvZmZzZXQsIGFtb3VudCkge1xuICB2YXIgZGlzcCA9IFtpbnRlcnNlY3Rpb25bMF0gLSBvZmZzZXRbMF0sIGludGVyc2VjdGlvblsxXSAtIG9mZnNldFsxXV07XG4gIHZhciBsZW5ndGggPSBNYXRoLnNxcnQoZGlzcFswXSAqIGRpc3BbMF0gKyBkaXNwWzFdICogZGlzcFsxXSk7XG4gIHZhciBsZW5SYXRpbyA9IChsZW5ndGggLSBhbW91bnQpIC8gbGVuZ3RoO1xuICBpZiAobGVuUmF0aW8gPCAwKSB7XG4gICAgbGVuUmF0aW8gPSAwLjAwMDAxO1xuICB9XG4gIHJldHVybiBbb2Zmc2V0WzBdICsgbGVuUmF0aW8gKiBkaXNwWzBdLCBvZmZzZXRbMV0gKyBsZW5SYXRpbyAqIGRpc3BbMV1dO1xufTtcbnZhciBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUgPSBmdW5jdGlvbiBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoc2lkZXMsIHJvdGF0aW9uUmFkaWFucykge1xuICB2YXIgcG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyhzaWRlcywgcm90YXRpb25SYWRpYW5zKTtcbiAgcG9pbnRzID0gZml0UG9seWdvblRvU3F1YXJlKHBvaW50cyk7XG4gIHJldHVybiBwb2ludHM7XG59O1xudmFyIGZpdFBvbHlnb25Ub1NxdWFyZSA9IGZ1bmN0aW9uIGZpdFBvbHlnb25Ub1NxdWFyZShwb2ludHMpIHtcbiAgdmFyIHgsIHk7XG4gIHZhciBzaWRlcyA9IHBvaW50cy5sZW5ndGggLyAyO1xuICB2YXIgbWluWCA9IEluZmluaXR5LFxuICAgIG1pblkgPSBJbmZpbml0eSxcbiAgICBtYXhYID0gLUluZmluaXR5LFxuICAgIG1heFkgPSAtSW5maW5pdHk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2lkZXM7IGkrKykge1xuICAgIHggPSBwb2ludHNbMiAqIGldO1xuICAgIHkgPSBwb2ludHNbMiAqIGkgKyAxXTtcbiAgICBtaW5YID0gTWF0aC5taW4obWluWCwgeCk7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHgpO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcbiAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgeSk7XG4gIH1cblxuICAvLyBzdHJldGNoIGZhY3RvcnNcbiAgdmFyIHN4ID0gMiAvIChtYXhYIC0gbWluWCk7XG4gIHZhciBzeSA9IDIgLyAobWF4WSAtIG1pblkpO1xuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBzaWRlczsgX2k0KyspIHtcbiAgICB4ID0gcG9pbnRzWzIgKiBfaTRdID0gcG9pbnRzWzIgKiBfaTRdICogc3g7XG4gICAgeSA9IHBvaW50c1syICogX2k0ICsgMV0gPSBwb2ludHNbMiAqIF9pNCArIDFdICogc3k7XG4gICAgbWluWCA9IE1hdGgubWluKG1pblgsIHgpO1xuICAgIG1heFggPSBNYXRoLm1heChtYXhYLCB4KTtcbiAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7XG4gICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkpO1xuICB9XG4gIGlmIChtaW5ZIDwgLTEpIHtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBzaWRlczsgX2k1KyspIHtcbiAgICAgIHkgPSBwb2ludHNbMiAqIF9pNSArIDFdID0gcG9pbnRzWzIgKiBfaTUgKyAxXSArICgtMSAtIG1pblkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcG9pbnRzO1xufTtcbnZhciBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVVbml0TmdvblBvaW50cyhzaWRlcywgcm90YXRpb25SYWRpYW5zKSB7XG4gIHZhciBpbmNyZW1lbnQgPSAxLjAgLyBzaWRlcyAqIDIgKiBNYXRoLlBJO1xuICB2YXIgc3RhcnRBbmdsZSA9IHNpZGVzICUgMiA9PT0gMCA/IE1hdGguUEkgLyAyLjAgKyBpbmNyZW1lbnQgLyAyLjAgOiBNYXRoLlBJIC8gMi4wO1xuICBzdGFydEFuZ2xlICs9IHJvdGF0aW9uUmFkaWFucztcbiAgdmFyIHBvaW50cyA9IG5ldyBBcnJheShzaWRlcyAqIDIpO1xuICB2YXIgY3VycmVudEFuZ2xlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICBjdXJyZW50QW5nbGUgPSBpICogaW5jcmVtZW50ICsgc3RhcnRBbmdsZTtcbiAgICBwb2ludHNbMiAqIGldID0gTWF0aC5jb3MoY3VycmVudEFuZ2xlKTsgLy8geFxuICAgIHBvaW50c1syICogaSArIDFdID0gTWF0aC5zaW4oLWN1cnJlbnRBbmdsZSk7IC8vIHlcbiAgfVxuXG4gIHJldHVybiBwb2ludHM7XG59O1xuXG4vLyBTZXQgdGhlIGRlZmF1bHQgcmFkaXVzLCB1bmxlc3MgaGFsZiBvZiB3aWR0aCBvciBoZWlnaHQgaXMgc21hbGxlciB0aGFuIGRlZmF1bHRcbnZhciBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyA9IGZ1bmN0aW9uIGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIE1hdGgubWluKHdpZHRoIC8gNCwgaGVpZ2h0IC8gNCwgOCk7XG59O1xuXG4vLyBTZXQgdGhlIGRlZmF1bHQgcmFkaXVzXG52YXIgZ2V0Um91bmRQb2x5Z29uUmFkaXVzID0gZnVuY3Rpb24gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIE1hdGgubWluKHdpZHRoIC8gMTAsIGhlaWdodCAvIDEwLCA4KTtcbn07XG52YXIgZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkge1xuICByZXR1cm4gODtcbn07XG52YXIgYmV6aWVyUHRzVG9RdWFkQ29lZmYgPSBmdW5jdGlvbiBiZXppZXJQdHNUb1F1YWRDb2VmZihwMCwgcDEsIHAyKSB7XG4gIHJldHVybiBbcDAgLSAyICogcDEgKyBwMiwgMiAqIChwMSAtIHAwKSwgcDBdO1xufTtcblxuLy8gZ2V0IGN1cnZlIHdpZHRoLCBoZWlnaHQsIGFuZCBjb250cm9sIHBvaW50IHBvc2l0aW9uIG9mZnNldHMgYXMgYSBwZXJjZW50YWdlIG9mIG5vZGUgaGVpZ2h0IC8gd2lkdGhcbnZhciBnZXRCYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGZ1bmN0aW9uIGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHRPZmZzZXQ6IE1hdGgubWluKDE1LCAwLjA1ICogaGVpZ2h0KSxcbiAgICB3aWR0aE9mZnNldDogTWF0aC5taW4oMTAwLCAwLjI1ICogd2lkdGgpLFxuICAgIGN0cmxQdE9mZnNldFBjdDogMC4wNVxuICB9O1xufTtcblxudmFyIHBhZ2VSYW5rRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgZGFtcGluZ0ZhY3RvcjogMC44LFxuICBwcmVjaXNpb246IDAuMDAwMDAxLFxuICBpdGVyYXRpb25zOiAyMDAsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufSk7XG52YXIgZWxlc2ZuJG8gPSB7XG4gIHBhZ2VSYW5rOiBmdW5jdGlvbiBwYWdlUmFuayhvcHRpb25zKSB7XG4gICAgdmFyIF9wYWdlUmFua0RlZmF1bHRzID0gcGFnZVJhbmtEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgIGRhbXBpbmdGYWN0b3IgPSBfcGFnZVJhbmtEZWZhdWx0cy5kYW1waW5nRmFjdG9yLFxuICAgICAgcHJlY2lzaW9uID0gX3BhZ2VSYW5rRGVmYXVsdHMucHJlY2lzaW9uLFxuICAgICAgaXRlcmF0aW9ucyA9IF9wYWdlUmFua0RlZmF1bHRzLml0ZXJhdGlvbnMsXG4gICAgICB3ZWlnaHQgPSBfcGFnZVJhbmtEZWZhdWx0cy53ZWlnaHQ7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICB2YXIgbnVtTm9kZXNTcWQgPSBudW1Ob2RlcyAqIG51bU5vZGVzO1xuICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDtcblxuICAgIC8vIENvbnN0cnVjdCB0cmFuc3Bvc2VkIGFkamFjZW5jeSBtYXRyaXhcbiAgICAvLyBGaXJzdCBsZXRzIGhhdmUgYSB6ZXJvZWQgbWF0cml4IG9mIHRoZSByaWdodCBzaXplXG4gICAgLy8gV2UnbGwgYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBzdW0gb2YgZWFjaCBjb2x1bW5cbiAgICB2YXIgbWF0cml4ID0gbmV3IEFycmF5KG51bU5vZGVzU3FkKTtcbiAgICB2YXIgY29sdW1uU3VtID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgYWRkaXRpb25hbFByb2IgPSAoMSAtIGRhbXBpbmdGYWN0b3IpIC8gbnVtTm9kZXM7XG5cbiAgICAvLyBDcmVhdGUgbnVsbCBtYXRyaXhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5vZGVzOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtTm9kZXM7IGorKykge1xuICAgICAgICB2YXIgbiA9IGkgKiBudW1Ob2RlcyArIGo7XG4gICAgICAgIG1hdHJpeFtuXSA9IDA7XG4gICAgICB9XG4gICAgICBjb2x1bW5TdW1baV0gPSAwO1xuICAgIH1cblxuICAgIC8vIE5vdywgcHJvY2VzcyBlZGdlc1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBudW1FZGdlczsgX2krKykge1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tfaV07XG4gICAgICB2YXIgc3JjSWQgPSBlZGdlLmRhdGEoJ3NvdXJjZScpO1xuICAgICAgdmFyIHRndElkID0gZWRnZS5kYXRhKCd0YXJnZXQnKTtcblxuICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBsb29wcyBpbiB0aGUgbWF0cml4XG4gICAgICBpZiAoc3JjSWQgPT09IHRndElkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHMgPSBub2Rlcy5pbmRleE9mSWQoc3JjSWQpO1xuICAgICAgdmFyIHQgPSBub2Rlcy5pbmRleE9mSWQodGd0SWQpO1xuICAgICAgdmFyIHcgPSB3ZWlnaHQoZWRnZSk7XG4gICAgICB2YXIgX24gPSB0ICogbnVtTm9kZXMgKyBzO1xuXG4gICAgICAvLyBVcGRhdGUgbWF0cml4XG4gICAgICBtYXRyaXhbX25dICs9IHc7XG5cbiAgICAgIC8vIFVwZGF0ZSBjb2x1bW4gc3VtXG4gICAgICBjb2x1bW5TdW1bc10gKz0gdztcbiAgICB9XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBwcm9iYWJpbGl0eSBiYXNlZCBvbiBkYW1waW5nIGZhY3RvclxuICAgIC8vIEFsc28sIHRha2UgaW50byBhY2NvdW50IGNvbHVtbnMgdGhhdCBoYXZlIHN1bSA9IDBcbiAgICB2YXIgcCA9IDEuMCAvIG51bU5vZGVzICsgYWRkaXRpb25hbFByb2I7IC8vIFNob3J0aGFuZFxuXG4gICAgLy8gVHJhdmVyc2UgbWF0cml4LCBjb2x1bW4gYnkgY29sdW1uXG4gICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG51bU5vZGVzOyBfaisrKSB7XG4gICAgICBpZiAoY29sdW1uU3VtW19qXSA9PT0gMCkge1xuICAgICAgICAvLyBObyAnbGlua3MnIG91dCBmcm9tIG5vZGUganRoLCBhc3N1bWUgZXF1YWwgcHJvYmFiaWxpdHkgZm9yIGVhY2ggcG9zc2libGUgbm9kZVxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBudW1Ob2RlczsgX2kyKyspIHtcbiAgICAgICAgICB2YXIgX24yID0gX2kyICogbnVtTm9kZXMgKyBfajtcbiAgICAgICAgICBtYXRyaXhbX24yXSA9IHA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vZGUganRoIGhhcyBvdXRnb2luZyBsaW5rLCBjb21wdXRlIG5vcm1hbGl6ZWQgcHJvYmFiaWxpdGllc1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBudW1Ob2RlczsgX2kzKyspIHtcbiAgICAgICAgICB2YXIgX24zID0gX2kzICogbnVtTm9kZXMgKyBfajtcbiAgICAgICAgICBtYXRyaXhbX24zXSA9IG1hdHJpeFtfbjNdIC8gY29sdW1uU3VtW19qXSArIGFkZGl0aW9uYWxQcm9iO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBkb21pbmFudCBlaWdlbnZlY3RvciB1c2luZyBwb3dlciBtZXRob2RcbiAgICB2YXIgZWlnZW52ZWN0b3IgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciB0ZW1wID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgcHJldmlvdXM7XG5cbiAgICAvLyBTdGFydCB3aXRoIGEgdmVjdG9yIG9mIGFsbCAxJ3NcbiAgICAvLyBBbHNvLCBpbml0aWFsaXplIGEgbnVsbCB2ZWN0b3Igd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHNob3J0aGFuZFxuICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG51bU5vZGVzOyBfaTQrKykge1xuICAgICAgZWlnZW52ZWN0b3JbX2k0XSA9IDE7XG4gICAgfVxuICAgIGZvciAodmFyIGl0ZXIgPSAwOyBpdGVyIDwgaXRlcmF0aW9uczsgaXRlcisrKSB7XG4gICAgICAvLyBUZW1wIGFycmF5IHdpdGggYWxsIDAnc1xuICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbnVtTm9kZXM7IF9pNSsrKSB7XG4gICAgICAgIHRlbXBbX2k1XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIE11bHRpcGx5IG1hdHJpeCB3aXRoIHByZXZpb3VzIHJlc3VsdFxuICAgICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbnVtTm9kZXM7IF9pNisrKSB7XG4gICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IG51bU5vZGVzOyBfajIrKykge1xuICAgICAgICAgIHZhciBfbjQgPSBfaTYgKiBudW1Ob2RlcyArIF9qMjtcbiAgICAgICAgICB0ZW1wW19pNl0gKz0gbWF0cml4W19uNF0gKiBlaWdlbnZlY3RvcltfajJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpblBsYWNlU3VtTm9ybWFsaXplKHRlbXApO1xuICAgICAgcHJldmlvdXMgPSBlaWdlbnZlY3RvcjtcbiAgICAgIGVpZ2VudmVjdG9yID0gdGVtcDtcbiAgICAgIHRlbXAgPSBwcmV2aW91cztcbiAgICAgIHZhciBkaWZmID0gMDtcbiAgICAgIC8vIENvbXB1dGUgZGlmZmVyZW5jZSAoc3F1YXJlZCBtb2R1bGUpIG9mIGJvdGggdmVjdG9yc1xuICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgbnVtTm9kZXM7IF9pNysrKSB7XG4gICAgICAgIHZhciBkZWx0YSA9IHByZXZpb3VzW19pN10gLSBlaWdlbnZlY3RvcltfaTddO1xuICAgICAgICBkaWZmICs9IGRlbHRhICogZGVsdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuIHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgc3RvcCBpdGVyYXRpbmdcbiAgICAgIGlmIChkaWZmIDwgcHJlY2lzaW9uKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCByZXN1bHRcbiAgICB2YXIgcmVzID0ge1xuICAgICAgcmFuazogZnVuY3Rpb24gcmFuayhub2RlKSB7XG4gICAgICAgIG5vZGUgPSBjeS5jb2xsZWN0aW9uKG5vZGUpWzBdO1xuICAgICAgICByZXR1cm4gZWlnZW52ZWN0b3Jbbm9kZXMuaW5kZXhPZihub2RlKV07XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gcmVzO1xuICB9IC8vIHBhZ2VSYW5rXG59OyAvLyBlbGVzZm5cblxudmFyIGRlZmF1bHRzJGYgPSBkZWZhdWx0cyRnKHtcbiAgcm9vdDogbnVsbCxcbiAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2UsXG4gIGFscGhhOiAwXG59KTtcbnZhciBlbGVzZm4kbiA9IHtcbiAgZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6IGZ1bmN0aW9uIGRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHMkZihvcHRpb25zKTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICBpZiAoIW9wdGlvbnMuZGlyZWN0ZWQpIHtcbiAgICAgIHZhciBkZWdyZWVzID0ge307XG4gICAgICB2YXIgbWF4RGVncmVlID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuICAgICAgICBvcHRpb25zLnJvb3QgPSBub2RlO1xuICAgICAgICB2YXIgY3VyckRlZ3JlZSA9IHRoaXMuZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKTtcbiAgICAgICAgaWYgKG1heERlZ3JlZSA8IGN1cnJEZWdyZWUuZGVncmVlKSB7XG4gICAgICAgICAgbWF4RGVncmVlID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICAgIH1cbiAgICAgICAgZGVncmVlc1tub2RlLmlkKCldID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWdyZWU6IGZ1bmN0aW9uIGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgaWYgKG1heERlZ3JlZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkZWdyZWVzW25vZGUuaWQoKV0gLyBtYXhEZWdyZWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRlZ3JlZXMgPSB7fTtcbiAgICAgIHZhciBvdXRkZWdyZWVzID0ge307XG4gICAgICB2YXIgbWF4SW5kZWdyZWUgPSAwO1xuICAgICAgdmFyIG1heE91dGRlZ3JlZSA9IDA7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbnVtTm9kZXM7IF9pKyspIHtcbiAgICAgICAgdmFyIF9ub2RlID0gbm9kZXNbX2ldO1xuICAgICAgICB2YXIgaWQgPSBfbm9kZS5pZCgpO1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuICAgICAgICBvcHRpb25zLnJvb3QgPSBfbm9kZTtcbiAgICAgICAgdmFyIF9jdXJyRGVncmVlID0gdGhpcy5kZWdyZWVDZW50cmFsaXR5KG9wdGlvbnMpO1xuICAgICAgICBpZiAobWF4SW5kZWdyZWUgPCBfY3VyckRlZ3JlZS5pbmRlZ3JlZSkgbWF4SW5kZWdyZWUgPSBfY3VyckRlZ3JlZS5pbmRlZ3JlZTtcbiAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA8IF9jdXJyRGVncmVlLm91dGRlZ3JlZSkgbWF4T3V0ZGVncmVlID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgICBpbmRlZ3JlZXNbaWRdID0gX2N1cnJEZWdyZWUuaW5kZWdyZWU7XG4gICAgICAgIG91dGRlZ3JlZXNbaWRdID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZWdyZWU6IGZ1bmN0aW9uIGluZGVncmVlKG5vZGUpIHtcbiAgICAgICAgICBpZiAobWF4SW5kZWdyZWUgPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbmRlZ3JlZXNbbm9kZS5pZCgpXSAvIG1heEluZGVncmVlO1xuICAgICAgICB9LFxuICAgICAgICBvdXRkZWdyZWU6IGZ1bmN0aW9uIG91dGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXRkZWdyZWVzW25vZGUuaWQoKV0gLyBtYXhPdXRkZWdyZWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICAvLyBkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZFxuXG4gIC8vIEltcGxlbWVudGVkIGZyb20gdGhlIGFsZ29yaXRobSBpbiBPcHNhaGwncyBwYXBlclxuICAvLyBcIk5vZGUgY2VudHJhbGl0eSBpbiB3ZWlnaHRlZCBuZXR3b3JrczogR2VuZXJhbGl6aW5nIGRlZ3JlZSBhbmQgc2hvcnRlc3QgcGF0aHNcIlxuICAvLyBjaGVjayB0aGUgaGVhZGluZyAyIFwiRGVncmVlXCJcbiAgZGVncmVlQ2VudHJhbGl0eTogZnVuY3Rpb24gZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRzJGYob3B0aW9ucyk7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBjYWxsaW5nRWxlcyA9IHRoaXM7XG4gICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHJvb3QgPSBfb3B0aW9ucy5yb290LFxuICAgICAgd2VpZ2h0ID0gX29wdGlvbnMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfb3B0aW9ucy5kaXJlY3RlZCxcbiAgICAgIGFscGhhID0gX29wdGlvbnMuYWxwaGE7XG4gICAgcm9vdCA9IGN5LmNvbGxlY3Rpb24ocm9vdClbMF07XG4gICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgdmFyIGNvbm5FZGdlcyA9IHJvb3QuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oY2FsbGluZ0VsZXMpO1xuICAgICAgdmFyIGsgPSBjb25uRWRnZXMubGVuZ3RoO1xuICAgICAgdmFyIHMgPSAwO1xuXG4gICAgICAvLyBOb3csIHN1bSBlZGdlIHdlaWdodHNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29ubkVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHMgKz0gd2VpZ2h0KGNvbm5FZGdlc1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWdyZWU6IE1hdGgucG93KGssIDEgLSBhbHBoYSkgKiBNYXRoLnBvdyhzLCBhbHBoYSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlZGdlcyA9IHJvb3QuY29ubmVjdGVkRWRnZXMoKTtcbiAgICAgIHZhciBpbmNvbWluZyA9IGVkZ2VzLmZpbHRlcihmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICByZXR1cm4gZWRnZS50YXJnZXQoKS5zYW1lKHJvb3QpICYmIGNhbGxpbmdFbGVzLmhhcyhlZGdlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG91dGdvaW5nID0gZWRnZXMuZmlsdGVyKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLnNvdXJjZSgpLnNhbWUocm9vdCkgJiYgY2FsbGluZ0VsZXMuaGFzKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgICB2YXIga19pbiA9IGluY29taW5nLmxlbmd0aDtcbiAgICAgIHZhciBrX291dCA9IG91dGdvaW5nLmxlbmd0aDtcbiAgICAgIHZhciBzX2luID0gMDtcbiAgICAgIHZhciBzX291dCA9IDA7XG5cbiAgICAgIC8vIE5vdywgc3VtIGluY29taW5nIGVkZ2Ugd2VpZ2h0c1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgaW5jb21pbmcubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICBzX2luICs9IHdlaWdodChpbmNvbWluZ1tfaTJdKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm93LCBzdW0gb3V0Z29pbmcgZWRnZSB3ZWlnaHRzXG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBvdXRnb2luZy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgIHNfb3V0ICs9IHdlaWdodChvdXRnb2luZ1tfaTNdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluZGVncmVlOiBNYXRoLnBvdyhrX2luLCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19pbiwgYWxwaGEpLFxuICAgICAgICBvdXRkZWdyZWU6IE1hdGgucG93KGtfb3V0LCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19vdXQsIGFscGhhKVxuICAgICAgfTtcbiAgICB9XG4gIH0gLy8gZGVncmVlQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJG4uZGMgPSBlbGVzZm4kbi5kZWdyZWVDZW50cmFsaXR5O1xuZWxlc2ZuJG4uZGNuID0gZWxlc2ZuJG4uZGVncmVlQ2VudHJhbGl0eU5vcm1hbGlzZWQgPSBlbGVzZm4kbi5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDtcblxudmFyIGRlZmF1bHRzJGUgPSBkZWZhdWx0cyRnKHtcbiAgaGFybW9uaWM6IHRydWUsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KCkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2UsXG4gIHJvb3Q6IG51bGxcbn0pO1xudmFyIGVsZXNmbiRtID0ge1xuICBjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQob3B0aW9ucykge1xuICAgIHZhciBfZGVmYXVsdHMgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMuaGFybW9uaWMsXG4gICAgICB3ZWlnaHQgPSBfZGVmYXVsdHMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMuZGlyZWN0ZWQ7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBjbG9zZW5lc3NlcyA9IHt9O1xuICAgIHZhciBtYXhDbG9zZW5lc3MgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgZncgPSB0aGlzLmZsb3lkV2Fyc2hhbGwoe1xuICAgICAgd2VpZ2h0OiB3ZWlnaHQsXG4gICAgICBkaXJlY3RlZDogZGlyZWN0ZWRcbiAgICB9KTtcblxuICAgIC8vIENvbXB1dGUgY2xvc2VuZXNzIGZvciBldmVyeSBub2RlIGFuZCBmaW5kIHRoZSBtYXhpbXVtIGNsb3NlbmVzc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXJyQ2xvc2VuZXNzID0gMDtcbiAgICAgIHZhciBub2RlX2kgPSBub2Rlc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGkgIT09IGopIHtcbiAgICAgICAgICB2YXIgZCA9IGZ3LmRpc3RhbmNlKG5vZGVfaSwgbm9kZXNbal0pO1xuICAgICAgICAgIGlmIChoYXJtb25pYykge1xuICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSAxIC8gZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSBkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFoYXJtb25pYykge1xuICAgICAgICBjdXJyQ2xvc2VuZXNzID0gMSAvIGN1cnJDbG9zZW5lc3M7XG4gICAgICB9XG4gICAgICBpZiAobWF4Q2xvc2VuZXNzIDwgY3VyckNsb3NlbmVzcykge1xuICAgICAgICBtYXhDbG9zZW5lc3MgPSBjdXJyQ2xvc2VuZXNzO1xuICAgICAgfVxuICAgICAgY2xvc2VuZXNzZXNbbm9kZV9pLmlkKCldID0gY3VyckNsb3NlbmVzcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3NlbmVzczogZnVuY3Rpb24gY2xvc2VuZXNzKG5vZGUpIHtcbiAgICAgICAgaWYgKG1heENsb3NlbmVzcyA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmluZyhub2RlKSkge1xuICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICBub2RlID0gY3kuZmlsdGVyKG5vZGUpWzBdLmlkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZnJvbSBpcyBhIG5vZGVcbiAgICAgICAgICBub2RlID0gbm9kZS5pZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZW5lc3Nlc1tub2RlXSAvIG1heENsb3NlbmVzcztcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgY2xvc2VuZXNzQ2VudHJhbGl0eTogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgdmFyIF9kZWZhdWx0czIgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgcm9vdCA9IF9kZWZhdWx0czIucm9vdCxcbiAgICAgIHdlaWdodCA9IF9kZWZhdWx0czIud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMyLmRpcmVjdGVkLFxuICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMyLmhhcm1vbmljO1xuICAgIHJvb3QgPSB0aGlzLmZpbHRlcihyb290KVswXTtcblxuICAgIC8vIHdlIG5lZWQgZGlzdGFuY2UgZnJvbSB0aGlzIG5vZGUgdG8gZXZlcnkgb3RoZXIgbm9kZVxuICAgIHZhciBkaWprc3RyYSA9IHRoaXMuZGlqa3N0cmEoe1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHdlaWdodDogd2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQ6IGRpcmVjdGVkXG4gICAgfSk7XG4gICAgdmFyIHRvdGFsRGlzdGFuY2UgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbiA9IG5vZGVzW2ldO1xuICAgICAgaWYgKCFuLnNhbWUocm9vdCkpIHtcbiAgICAgICAgdmFyIGQgPSBkaWprc3RyYS5kaXN0YW5jZVRvKG4pO1xuICAgICAgICBpZiAoaGFybW9uaWMpIHtcbiAgICAgICAgICB0b3RhbERpc3RhbmNlICs9IDEgLyBkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFybW9uaWMgPyB0b3RhbERpc3RhbmNlIDogMSAvIHRvdGFsRGlzdGFuY2U7XG4gIH0gLy8gY2xvc2VuZXNzQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJG0uY2MgPSBlbGVzZm4kbS5jbG9zZW5lc3NDZW50cmFsaXR5O1xuZWxlc2ZuJG0uY2NuID0gZWxlc2ZuJG0uY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQgPSBlbGVzZm4kbS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDtcblxudmFyIGRlZmF1bHRzJGQgPSBkZWZhdWx0cyRnKHtcbiAgd2VpZ2h0OiBudWxsLFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRsID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHRoZSBhbGdvcml0aG0gaW4gdGhlIHBhcGVyIFwiT24gVmFyaWFudHMgb2YgU2hvcnRlc3QtUGF0aCBCZXR3ZWVubmVzcyBDZW50cmFsaXR5IGFuZCB0aGVpciBHZW5lcmljIENvbXB1dGF0aW9uXCIgYnkgVWxyaWsgQnJhbmRlc1xuICBiZXR3ZWVubmVzc0NlbnRyYWxpdHk6IGZ1bmN0aW9uIGJldHdlZW5uZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgdmFyIF9kZWZhdWx0cyA9IGRlZmF1bHRzJGQob3B0aW9ucyksXG4gICAgICBkaXJlY3RlZCA9IF9kZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgIHdlaWdodCA9IF9kZWZhdWx0cy53ZWlnaHQ7XG4gICAgdmFyIHdlaWdodGVkID0gd2VpZ2h0ICE9IG51bGw7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgLy8gc3RhcnRpbmdcbiAgICB2YXIgViA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgQSA9IHt9O1xuICAgIHZhciBfQyA9IHt9O1xuICAgIHZhciBtYXggPSAwO1xuICAgIHZhciBDID0ge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgX0Nba2V5XSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA+IG1heCkge1xuICAgICAgICAgIG1heCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gX0Nba2V5XTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQSBjb250YWlucyB0aGUgbmVpZ2hib3Job29kcyBvZiBldmVyeSBub2RlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBWLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdiA9IFZbaV07XG4gICAgICB2YXIgdmlkID0gdi5pZCgpO1xuICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgIEFbdmlkXSA9IHYub3V0Z29lcnMoKS5ub2RlcygpOyAvLyBnZXQgb3V0Z29lcnMgb2YgZXZlcnkgbm9kZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQVt2aWRdID0gdi5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKTsgLy8gZ2V0IG5laWdoYm9ycyBvZiBldmVyeSBub2RlXG4gICAgICB9XG5cbiAgICAgIEMuc2V0KHZpZCwgMCk7XG4gICAgfVxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKHMpIHtcbiAgICAgIHZhciBzaWQgPSBWW3NdLmlkKCk7XG4gICAgICB2YXIgUyA9IFtdOyAvLyBzdGFja1xuICAgICAgdmFyIFAgPSB7fTtcbiAgICAgIHZhciBnID0ge307XG4gICAgICB2YXIgZCA9IHt9O1xuICAgICAgdmFyIFEgPSBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gZFthXSAtIGRbYl07XG4gICAgICB9KTsgLy8gcXVldWVcblxuICAgICAgLy8gaW5pdCBkaWN0aW9uYXJpZXNcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBWLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgX3ZpZCA9IFZbX2ldLmlkKCk7XG4gICAgICAgIFBbX3ZpZF0gPSBbXTtcbiAgICAgICAgZ1tfdmlkXSA9IDA7XG4gICAgICAgIGRbX3ZpZF0gPSBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGdbc2lkXSA9IDE7IC8vIHNpZ21hXG4gICAgICBkW3NpZF0gPSAwOyAvLyBkaXN0YW5jZSB0byBzXG5cbiAgICAgIFEucHVzaChzaWQpO1xuICAgICAgd2hpbGUgKCFRLmVtcHR5KCkpIHtcbiAgICAgICAgdmFyIF92ID0gUS5wb3AoKTtcbiAgICAgICAgUy5wdXNoKF92KTtcbiAgICAgICAgaWYgKHdlaWdodGVkKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBBW192XS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHcgPSBBW192XVtqXTtcbiAgICAgICAgICAgIHZhciB2RWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoX3YpO1xuICAgICAgICAgICAgdmFyIGVkZ2UgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAodkVsZS5lZGdlc1RvKHcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZWRnZSA9IHZFbGUuZWRnZXNUbyh3KVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVkZ2UgPSB3LmVkZ2VzVG8odkVsZSlbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZWRnZVdlaWdodCA9IHdlaWdodChlZGdlKTtcbiAgICAgICAgICAgIHcgPSB3LmlkKCk7XG4gICAgICAgICAgICBpZiAoZFt3XSA+IGRbX3ZdICsgZWRnZVdlaWdodCkge1xuICAgICAgICAgICAgICBkW3ddID0gZFtfdl0gKyBlZGdlV2VpZ2h0O1xuICAgICAgICAgICAgICBpZiAoUS5ub2Rlcy5pbmRleE9mKHcpIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vaWYgdyBpcyBub3QgaW4gUVxuICAgICAgICAgICAgICAgIFEucHVzaCh3KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9zaXRpb24gaWYgdyBpcyBpbiBRXG4gICAgICAgICAgICAgICAgUS51cGRhdGVJdGVtKHcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGdbd10gPSAwO1xuICAgICAgICAgICAgICBQW3ddID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZFt3XSA9PSBkW192XSArIGVkZ2VXZWlnaHQpIHtcbiAgICAgICAgICAgICAgZ1t3XSA9IGdbd10gKyBnW192XTtcbiAgICAgICAgICAgICAgUFt3XS5wdXNoKF92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IEFbX3ZdLmxlbmd0aDsgX2orKykge1xuICAgICAgICAgICAgdmFyIF93ID0gQVtfdl1bX2pdLmlkKCk7XG4gICAgICAgICAgICBpZiAoZFtfd10gPT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgUS5wdXNoKF93KTtcbiAgICAgICAgICAgICAgZFtfd10gPSBkW192XSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZFtfd10gPT0gZFtfdl0gKyAxKSB7XG4gICAgICAgICAgICAgIGdbX3ddID0gZ1tfd10gKyBnW192XTtcbiAgICAgICAgICAgICAgUFtfd10ucHVzaChfdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZSA9IHt9O1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgVi5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIGVbVltfaTJdLmlkKCldID0gMDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChTLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIF93MiA9IFMucG9wKCk7XG4gICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IFBbX3cyXS5sZW5ndGg7IF9qMisrKSB7XG4gICAgICAgICAgdmFyIF92MiA9IFBbX3cyXVtfajJdO1xuICAgICAgICAgIGVbX3YyXSA9IGVbX3YyXSArIGdbX3YyXSAvIGdbX3cyXSAqICgxICsgZVtfdzJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3cyICE9IFZbc10uaWQoKSkge1xuICAgICAgICAgIEMuc2V0KF93MiwgQy5nZXQoX3cyKSArIGVbX3cyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDwgVi5sZW5ndGg7IHMrKykge1xuICAgICAgX2xvb3Aocyk7XG4gICAgfVxuICAgIHZhciByZXQgPSB7XG4gICAgICBiZXR3ZWVubmVzczogZnVuY3Rpb24gYmV0d2Vlbm5lc3Mobm9kZSkge1xuICAgICAgICB2YXIgaWQgPSBjeS5jb2xsZWN0aW9uKG5vZGUpLmlkKCk7XG4gICAgICAgIHJldHVybiBDLmdldChpZCk7XG4gICAgICB9LFxuICAgICAgYmV0d2Vlbm5lc3NOb3JtYWxpemVkOiBmdW5jdGlvbiBiZXR3ZWVubmVzc05vcm1hbGl6ZWQobm9kZSkge1xuICAgICAgICBpZiAobWF4ID09IDApIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWQgPSBjeS5jb2xsZWN0aW9uKG5vZGUpLmlkKCk7XG4gICAgICAgIHJldHVybiBDLmdldChpZCkgLyBtYXg7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGFsaWFzXG4gICAgcmV0LmJldHdlZW5uZXNzTm9ybWFsaXNlZCA9IHJldC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQ7XG4gICAgcmV0dXJuIHJldDtcbiAgfSAvLyBiZXR3ZWVubmVzc0NlbnRyYWxpdHlcbn07IC8vIGVsZXNmblxuXG4vLyBuaWNlLCBzaG9ydCBtYXRoZW1hdGljYWwgYWxpYXNcbmVsZXNmbiRsLmJjID0gZWxlc2ZuJGwuYmV0d2Vlbm5lc3NDZW50cmFsaXR5O1xuXG4vLyBJbXBsZW1lbnRlZCBieSBab2UgWGkgQHpvZXhpIGZvciBHU09DIDIwMTZcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBkZWZhdWx0cyRjID0gZGVmYXVsdHMkZyh7XG4gIGV4cGFuZEZhY3RvcjogMixcbiAgLy8gYWZmZWN0cyB0aW1lIG9mIGNvbXB1dGF0aW9uIGFuZCBjbHVzdGVyIGdyYW51bGFyaXR5IHRvIHNvbWUgZXh0ZW50OiBNICogTVxuICBpbmZsYXRlRmFjdG9yOiAyLFxuICAvLyBhZmZlY3RzIGNsdXN0ZXIgZ3JhbnVsYXJpdHkgKHRoZSBncmVhdGVyIHRoZSB2YWx1ZSwgdGhlIG1vcmUgY2x1c3RlcnMpOiBNKGksaikgLyBFKGopXG4gIG11bHRGYWN0b3I6IDEsXG4gIC8vIG9wdGlvbmFsIHNlbGYgbG9vcHMgZm9yIGVhY2ggbm9kZS4gVXNlIGEgbmV1dHJhbCB2YWx1ZSB0byBpbXByb3ZlIGNsdXN0ZXIgY29tcHV0YXRpb25zLlxuICBtYXhJdGVyYXRpb25zOiAyMCxcbiAgLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgTUNMIGFsZ29yaXRobSBpbiBhIHNpbmdsZSBydW5cbiAgYXR0cmlidXRlczogW1xuICAvLyBhdHRyaWJ1dGVzL2ZlYXR1cmVzIHVzZWQgdG8gZ3JvdXAgbm9kZXMsIGllLiBzaW1pbGFyaXR5IHZhbHVlcyBiZXR3ZWVuIG5vZGVzXG4gIGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1dXG59KTtcbi8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIHNldE9wdGlvbnMkMyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4gZGVmYXVsdHMkYyhvcHRpb25zKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnZhciBnZXRTaW1pbGFyaXR5JDEgPSBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5KGVkZ2UsIGF0dHJpYnV0ZXMpIHtcbiAgdmFyIHRvdGFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdG90YWwgKz0gYXR0cmlidXRlc1tpXShlZGdlKTtcbiAgfVxuICByZXR1cm4gdG90YWw7XG59O1xudmFyIGFkZExvb3BzID0gZnVuY3Rpb24gYWRkTG9vcHMoTSwgbiwgdmFsKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgTVtpICogbiArIGldID0gdmFsO1xuICB9XG59O1xudmFyIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShNLCBuKSB7XG4gIHZhciBzdW07XG4gIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG47IGNvbCsrKSB7XG4gICAgc3VtID0gMDtcbiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBuOyByb3crKykge1xuICAgICAgc3VtICs9IE1bcm93ICogbiArIGNvbF07XG4gICAgfVxuICAgIGZvciAodmFyIF9yb3cgPSAwOyBfcm93IDwgbjsgX3JvdysrKSB7XG4gICAgICBNW19yb3cgKiBuICsgY29sXSA9IE1bX3JvdyAqIG4gKyBjb2xdIC8gc3VtO1xuICAgIH1cbiAgfVxufTtcblxuLy8gVE9ETzogYmxvY2tlZCBtYXRyaXggbXVsdGlwbGljYXRpb24/XG52YXIgbW11bHQgPSBmdW5jdGlvbiBtbXVsdChBLCBCLCBuKSB7XG4gIHZhciBDID0gbmV3IEFycmF5KG4gKiBuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgQ1tpICogbiArIGpdID0gMDtcbiAgICB9XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBuOyBfaisrKSB7XG4gICAgICAgIENbaSAqIG4gKyBfal0gKz0gQVtpICogbiArIGtdICogQltrICogbiArIF9qXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEM7XG59O1xudmFyIGV4cGFuZCA9IGZ1bmN0aW9uIGV4cGFuZChNLCBuLCBleHBhbmRGYWN0b3IgLyoqIHBvd2VyICoqLykge1xuICB2YXIgX00gPSBNLnNsaWNlKDApO1xuICBmb3IgKHZhciBwID0gMTsgcCA8IGV4cGFuZEZhY3RvcjsgcCsrKSB7XG4gICAgTSA9IG1tdWx0KE0sIF9NLCBuKTtcbiAgfVxuICByZXR1cm4gTTtcbn07XG52YXIgaW5mbGF0ZSA9IGZ1bmN0aW9uIGluZmxhdGUoTSwgbiwgaW5mbGF0ZUZhY3RvciAvKiogciAqKi8pIHtcbiAgdmFyIF9NID0gbmV3IEFycmF5KG4gKiBuKTtcblxuICAvLyBNKGksaikgXiBpbmZsYXRlUG93ZXJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuICogbjsgaSsrKSB7XG4gICAgX01baV0gPSBNYXRoLnBvdyhNW2ldLCBpbmZsYXRlRmFjdG9yKTtcbiAgfVxuICBub3JtYWxpemUoX00sIG4pO1xuICByZXR1cm4gX007XG59O1xudmFyIGhhc0NvbnZlcmdlZCA9IGZ1bmN0aW9uIGhhc0NvbnZlcmdlZChNLCBfTSwgbjIsIHJvdW5kRmFjdG9yKSB7XG4gIC8vIENoZWNrIHRoYXQgYm90aCBtYXRyaWNlcyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIChpLGopXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjI7IGkrKykge1xuICAgIHZhciB2MSA9IE1hdGgucm91bmQoTVtpXSAqIE1hdGgucG93KDEwLCByb3VuZEZhY3RvcikpIC8gTWF0aC5wb3coMTAsIHJvdW5kRmFjdG9yKTsgLy8gdHJ1bmNhdGUgdG8gJ3JvdW5kRmFjdG9yJyBkZWNpbWFsIHBsYWNlc1xuICAgIHZhciB2MiA9IE1hdGgucm91bmQoX01baV0gKiBNYXRoLnBvdygxMCwgcm91bmRGYWN0b3IpKSAvIE1hdGgucG93KDEwLCByb3VuZEZhY3Rvcik7XG4gICAgaWYgKHYxICE9PSB2Mikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgYXNzaWduJDIgPSBmdW5jdGlvbiBhc3NpZ24oTSwgbiwgbm9kZXMsIGN5KSB7XG4gIHZhciBjbHVzdGVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIHZhciBjbHVzdGVyID0gW107XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgIC8vIFJvdy13aXNlIGF0dHJhY3RvcnMgYW5kIGVsZW1lbnRzIHRoYXQgdGhleSBhdHRyYWN0IGJlbG9uZyBpbiBzYW1lIGNsdXN0ZXJcbiAgICAgIGlmIChNYXRoLnJvdW5kKE1baSAqIG4gKyBqXSAqIDEwMDApIC8gMTAwMCA+IDApIHtcbiAgICAgICAgY2x1c3Rlci5wdXNoKG5vZGVzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNsdXN0ZXIubGVuZ3RoICE9PSAwKSB7XG4gICAgICBjbHVzdGVycy5wdXNoKGN5LmNvbGxlY3Rpb24oY2x1c3RlcikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIGlzRHVwbGljYXRlID0gZnVuY3Rpb24gaXNEdXBsaWNhdGUoYzEsIGMyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYzEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWMyW2ldIHx8IGMxW2ldLmlkKCkgIT09IGMyW2ldLmlkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIHJlbW92ZUR1cGxpY2F0ZXMgPSBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzKGNsdXN0ZXJzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsdXN0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoaSAhPSBqICYmIGlzRHVwbGljYXRlKGNsdXN0ZXJzW2ldLCBjbHVzdGVyc1tqXSkpIHtcbiAgICAgICAgY2x1c3RlcnMuc3BsaWNlKGosIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIG1hcmtvdkNsdXN0ZXJpbmcgPSBmdW5jdGlvbiBtYXJrb3ZDbHVzdGVyaW5nKG9wdGlvbnMpIHtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgZWRnZXMgPSB0aGlzLmVkZ2VzKCk7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAvLyBTZXQgcGFyYW1ldGVycyBvZiBhbGdvcml0aG06XG4gIHZhciBvcHRzID0gc2V0T3B0aW9ucyQzKG9wdGlvbnMpO1xuXG4gIC8vIE1hcCBlYWNoIG5vZGUgdG8gaXRzIHBvc2l0aW9uIGluIG5vZGUgYXJyYXlcbiAgdmFyIGlkMnBvc2l0aW9uID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZDJwb3NpdGlvbltub2Rlc1tpXS5pZCgpXSA9IGk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBzdG9jaGFzdGljIG1hdHJpeCBNIGZyb20gaW5wdXQgZ3JhcGggRyAoc2hvdWxkIGJlIHN5bW1ldHJpYy91bmRpcmVjdGVkKVxuICB2YXIgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICBuMiA9IG4gKiBuO1xuICB2YXIgTSA9IG5ldyBBcnJheShuMiksXG4gICAgX007XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBuMjsgX2krKykge1xuICAgIE1bX2ldID0gMDtcbiAgfVxuICBmb3IgKHZhciBlID0gMDsgZSA8IGVkZ2VzLmxlbmd0aDsgZSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tlXTtcbiAgICB2YXIgX2kyID0gaWQycG9zaXRpb25bZWRnZS5zb3VyY2UoKS5pZCgpXTtcbiAgICB2YXIgaiA9IGlkMnBvc2l0aW9uW2VkZ2UudGFyZ2V0KCkuaWQoKV07XG4gICAgdmFyIHNpbSA9IGdldFNpbWlsYXJpdHkkMShlZGdlLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgIE1bX2kyICogbiArIGpdICs9IHNpbTsgLy8gRyBzaG91bGQgYmUgc3ltbWV0cmljIGFuZCB1bmRpcmVjdGVkXG4gICAgTVtqICogbiArIF9pMl0gKz0gc2ltO1xuICB9XG5cbiAgLy8gQmVnaW4gTWFya292IGNsdXN0ZXIgYWxnb3JpdGhtXG5cbiAgLy8gU3RlcCAxOiBBZGQgc2VsZiBsb29wcyB0byBlYWNoIG5vZGUsIGllLiBhZGQgbXVsdEZhY3RvciB0byBtYXRyaXggZGlhZ29uYWxcbiAgYWRkTG9vcHMoTSwgbiwgb3B0cy5tdWx0RmFjdG9yKTtcblxuICAvLyBTdGVwIDI6IE0gPSBub3JtYWxpemUoIE0gKTtcbiAgbm9ybWFsaXplKE0sIG4pO1xuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8vIFN0ZXAgMzpcbiAgICBfTSA9IGV4cGFuZChNLCBuLCBvcHRzLmV4cGFuZEZhY3Rvcik7XG5cbiAgICAvLyBTdGVwIDQ6XG4gICAgTSA9IGluZmxhdGUoX00sIG4sIG9wdHMuaW5mbGF0ZUZhY3Rvcik7XG5cbiAgICAvLyBTdGVwIDU6IGNoZWNrIHRvIHNlZSBpZiB+c3RlYWR5IHN0YXRlIGhhcyBiZWVuIHJlYWNoZWRcbiAgICBpZiAoIWhhc0NvbnZlcmdlZChNLCBfTSwgbjIsIDQpKSB7XG4gICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgaXRlcmF0aW9ucysrO1xuICB9XG5cbiAgLy8gQnVpbGQgY2x1c3RlcnMgZnJvbSBtYXRyaXhcbiAgdmFyIGNsdXN0ZXJzID0gYXNzaWduJDIoTSwgbiwgbm9kZXMsIGN5KTtcblxuICAvLyBSZW1vdmUgZHVwbGljYXRlIGNsdXN0ZXJzIGR1ZSB0byBzeW1tZXRyeSBvZiBncmFwaCBhbmQgTSBtYXRyaXhcbiAgY2x1c3RlcnMgPSByZW1vdmVEdXBsaWNhdGVzKGNsdXN0ZXJzKTtcbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciBtYXJrb3ZDbHVzdGVyaW5nJDEgPSB7XG4gIG1hcmtvdkNsdXN0ZXJpbmc6IG1hcmtvdkNsdXN0ZXJpbmcsXG4gIG1jbDogbWFya292Q2x1c3RlcmluZ1xufTtcblxuLy8gQ29tbW9uIGRpc3RhbmNlIG1ldHJpY3MgZm9yIGNsdXN0ZXJpbmcgYWxnb3JpdGhtc1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn07XG52YXIgYWJzRGlmZiA9IGZ1bmN0aW9uIGFic0RpZmYocCwgcSkge1xuICByZXR1cm4gTWF0aC5hYnMocSAtIHApO1xufTtcbnZhciBhZGRBYnNEaWZmID0gZnVuY3Rpb24gYWRkQWJzRGlmZih0b3RhbCwgcCwgcSkge1xuICByZXR1cm4gdG90YWwgKyBhYnNEaWZmKHAsIHEpO1xufTtcbnZhciBhZGRTcXVhcmVkRGlmZiA9IGZ1bmN0aW9uIGFkZFNxdWFyZWREaWZmKHRvdGFsLCBwLCBxKSB7XG4gIHJldHVybiB0b3RhbCArIE1hdGgucG93KHEgLSBwLCAyKTtcbn07XG52YXIgc3FydCA9IGZ1bmN0aW9uIHNxcnQoeCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KHgpO1xufTtcbnZhciBtYXhBYnNEaWZmID0gZnVuY3Rpb24gbWF4QWJzRGlmZihjdXJyZW50TWF4LCBwLCBxKSB7XG4gIHJldHVybiBNYXRoLm1heChjdXJyZW50TWF4LCBhYnNEaWZmKHAsIHEpKTtcbn07XG52YXIgZ2V0RGlzdGFuY2UgPSBmdW5jdGlvbiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIGluaXQsIHZpc2l0KSB7XG4gIHZhciBwb3N0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiBpZGVudGl0eTtcbiAgdmFyIHJldCA9IGluaXQ7XG4gIHZhciBwLCBxO1xuICBmb3IgKHZhciBkaW0gPSAwOyBkaW0gPCBsZW5ndGg7IGRpbSsrKSB7XG4gICAgcCA9IGdldFAoZGltKTtcbiAgICBxID0gZ2V0UShkaW0pO1xuICAgIHJldCA9IHZpc2l0KHJldCwgcCwgcSk7XG4gIH1cbiAgcmV0dXJuIHBvc3QocmV0KTtcbn07XG52YXIgZGlzdGFuY2VzID0ge1xuICBldWNsaWRlYW46IGZ1bmN0aW9uIGV1Y2xpZGVhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICBpZiAobGVuZ3RoID49IDIpIHtcbiAgICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZFNxdWFyZWREaWZmLCBzcXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIHNpbmdsZSBhdHRyIGNhc2UsIG1vcmUgZWZmaWNpZW50IHRvIGF2b2lkIHNxcnRcbiAgICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZEFic0RpZmYpO1xuICAgIH1cbiAgfSxcbiAgc3F1YXJlZEV1Y2xpZGVhbjogZnVuY3Rpb24gc3F1YXJlZEV1Y2xpZGVhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRTcXVhcmVkRGlmZik7XG4gIH0sXG4gIG1hbmhhdHRhbjogZnVuY3Rpb24gbWFuaGF0dGFuKGxlbmd0aCwgZ2V0UCwgZ2V0USkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZShsZW5ndGgsIGdldFAsIGdldFEsIDAsIGFkZEFic0RpZmYpO1xuICB9LFxuICBtYXg6IGZ1bmN0aW9uIG1heChsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAtSW5maW5pdHksIG1heEFic0RpZmYpO1xuICB9XG59O1xuXG4vLyBpbiBjYXNlIHRoZSB1c2VyIGFjY2lkZW50YWxseSBkb2Vzbid0IHVzZSBjYW1lbCBjYXNlXG5kaXN0YW5jZXNbJ3NxdWFyZWQtZXVjbGlkZWFuJ10gPSBkaXN0YW5jZXNbJ3NxdWFyZWRFdWNsaWRlYW4nXTtcbmRpc3RhbmNlc1snc3F1YXJlZGV1Y2xpZGVhbiddID0gZGlzdGFuY2VzWydzcXVhcmVkRXVjbGlkZWFuJ107XG5mdW5jdGlvbiBjbHVzdGVyaW5nRGlzdGFuY2UgKG1ldGhvZCwgbGVuZ3RoLCBnZXRQLCBnZXRRLCBub2RlUCwgbm9kZVEpIHtcbiAgdmFyIGltcGw7XG4gIGlmIChmbiQ2KG1ldGhvZCkpIHtcbiAgICBpbXBsID0gbWV0aG9kO1xuICB9IGVsc2Uge1xuICAgIGltcGwgPSBkaXN0YW5jZXNbbWV0aG9kXSB8fCBkaXN0YW5jZXMuZXVjbGlkZWFuO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDAgJiYgZm4kNihtZXRob2QpKSB7XG4gICAgcmV0dXJuIGltcGwobm9kZVAsIG5vZGVRKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaW1wbChsZW5ndGgsIGdldFAsIGdldFEsIG5vZGVQLCBub2RlUSk7XG4gIH1cbn1cblxudmFyIGRlZmF1bHRzJGIgPSBkZWZhdWx0cyRnKHtcbiAgazogMixcbiAgbTogMixcbiAgc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6IDAuMDAwMSxcbiAgZGlzdGFuY2U6ICdldWNsaWRlYW4nLFxuICBtYXhJdGVyYXRpb25zOiAxMCxcbiAgYXR0cmlidXRlczogW10sXG4gIHRlc3RNb2RlOiBmYWxzZSxcbiAgdGVzdENlbnRyb2lkczogbnVsbFxufSk7XG52YXIgc2V0T3B0aW9ucyQyID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHJldHVybiBkZWZhdWx0cyRiKG9wdGlvbnMpO1xufTtcblxudmFyIGdldERpc3QgPSBmdW5jdGlvbiBnZXREaXN0KHR5cGUsIG5vZGUsIGNlbnRyb2lkLCBhdHRyaWJ1dGVzLCBtb2RlKSB7XG4gIHZhciBub05vZGVQID0gbW9kZSAhPT0gJ2tNZWRvaWRzJztcbiAgdmFyIGdldFAgPSBub05vZGVQID8gZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gY2VudHJvaWRbaV07XG4gIH0gOiBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzW2ldKGNlbnRyb2lkKTtcbiAgfTtcbiAgdmFyIGdldFEgPSBmdW5jdGlvbiBnZXRRKGkpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlc1tpXShub2RlKTtcbiAgfTtcbiAgdmFyIG5vZGVQID0gY2VudHJvaWQ7XG4gIHZhciBub2RlUSA9IG5vZGU7XG4gIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2UodHlwZSwgYXR0cmlidXRlcy5sZW5ndGgsIGdldFAsIGdldFEsIG5vZGVQLCBub2RlUSk7XG59O1xudmFyIHJhbmRvbUNlbnRyb2lkcyA9IGZ1bmN0aW9uIHJhbmRvbUNlbnRyb2lkcyhub2RlcywgaywgYXR0cmlidXRlcykge1xuICB2YXIgbmRpbSA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICB2YXIgbWluID0gbmV3IEFycmF5KG5kaW0pO1xuICB2YXIgbWF4ID0gbmV3IEFycmF5KG5kaW0pO1xuICB2YXIgY2VudHJvaWRzID0gbmV3IEFycmF5KGspO1xuICB2YXIgY2VudHJvaWQgPSBudWxsO1xuXG4gIC8vIEZpbmQgbWluLCBtYXggdmFsdWVzIGZvciBlYWNoIGF0dHJpYnV0ZSBkaW1lbnNpb25cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZGltOyBpKyspIHtcbiAgICBtaW5baV0gPSBub2Rlcy5taW4oYXR0cmlidXRlc1tpXSkudmFsdWU7XG4gICAgbWF4W2ldID0gbm9kZXMubWF4KGF0dHJpYnV0ZXNbaV0pLnZhbHVlO1xuICB9XG5cbiAgLy8gQnVpbGQgayBjZW50cm9pZHMsIGVhY2ggcmVwcmVzZW50ZWQgYXMgYW4gbi1kaW0gZmVhdHVyZSB2ZWN0b3JcbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICBjZW50cm9pZCA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBuZGltOyBfaSsrKSB7XG4gICAgICBjZW50cm9pZFtfaV0gPSBNYXRoLnJhbmRvbSgpICogKG1heFtfaV0gLSBtaW5bX2ldKSArIG1pbltfaV07IC8vIHJhbmRvbSBpbml0aWFsIHZhbHVlXG4gICAgfVxuXG4gICAgY2VudHJvaWRzW2NdID0gY2VudHJvaWQ7XG4gIH1cbiAgcmV0dXJuIGNlbnRyb2lkcztcbn07XG52YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiBjbGFzc2lmeShub2RlLCBjZW50cm9pZHMsIGRpc3RhbmNlLCBhdHRyaWJ1dGVzLCB0eXBlKSB7XG4gIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZW50cm9pZHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGlzdCA9IGdldERpc3QoZGlzdGFuY2UsIG5vZGUsIGNlbnRyb2lkc1tpXSwgYXR0cmlidXRlcywgdHlwZSk7XG4gICAgaWYgKGRpc3QgPCBtaW4pIHtcbiAgICAgIG1pbiA9IGRpc3Q7XG4gICAgICBpbmRleCA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmRleDtcbn07XG52YXIgYnVpbGRDbHVzdGVyID0gZnVuY3Rpb24gYnVpbGRDbHVzdGVyKGNlbnRyb2lkLCBub2RlcywgYXNzaWdubWVudCkge1xuICB2YXIgY2x1c3RlciA9IFtdO1xuICB2YXIgbm9kZSA9IG51bGw7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICBub2RlID0gbm9kZXNbbl07XG4gICAgaWYgKGFzc2lnbm1lbnRbbm9kZS5pZCgpXSA9PT0gY2VudHJvaWQpIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJOb2RlIFwiICsgbm9kZS5pZCgpICsgXCIgaXMgYXNzb2NpYXRlZCB3aXRoIG1lZG9pZCAjOiBcIiArIG0pO1xuICAgICAgY2x1c3Rlci5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2x1c3Rlcjtcbn07XG52YXIgaGF2ZVZhbHVlc0NvbnZlcmdlZCA9IGZ1bmN0aW9uIGhhdmVWYWx1ZXNDb252ZXJnZWQodjEsIHYyLCBzZW5zaXRpdml0eVRocmVzaG9sZCkge1xuICByZXR1cm4gTWF0aC5hYnModjIgLSB2MSkgPD0gc2Vuc2l0aXZpdHlUaHJlc2hvbGQ7XG59O1xudmFyIGhhdmVNYXRyaWNlc0NvbnZlcmdlZCA9IGZ1bmN0aW9uIGhhdmVNYXRyaWNlc0NvbnZlcmdlZCh2MSwgdjIsIHNlbnNpdGl2aXR5VGhyZXNob2xkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdjEubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHYxW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHYxW2ldW2pdIC0gdjJbaV1bal0pO1xuICAgICAgaWYgKGRpZmYgPiBzZW5zaXRpdml0eVRocmVzaG9sZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBzZWVuQmVmb3JlID0gZnVuY3Rpb24gc2VlbkJlZm9yZShub2RlLCBtZWRvaWRzLCBuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgaWYgKG5vZGUgPT09IG1lZG9pZHNbaV0pIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG52YXIgcmFuZG9tTWVkb2lkcyA9IGZ1bmN0aW9uIHJhbmRvbU1lZG9pZHMobm9kZXMsIGspIHtcbiAgdmFyIG1lZG9pZHMgPSBuZXcgQXJyYXkoayk7XG5cbiAgLy8gRm9yIHNtYWxsIGRhdGEgc2V0cywgdGhlIHByb2JhYmlsaXR5IG9mIG1lZG9pZCBjb25mbGljdCBpcyBncmVhdGVyLFxuICAvLyBzbyB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gb3IgY2hvc2UgdGhpcyBub2RlIGJlZm9yZS5cbiAgaWYgKG5vZGVzLmxlbmd0aCA8IDUwKSB7XG4gICAgLy8gUmFuZG9tbHkgc2VsZWN0IGsgbWVkb2lkcyBmcm9tIHRoZSBuIG5vZGVzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm9kZXMubGVuZ3RoKV07XG5cbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgY2hvc2VuIHRoaXMgbm9kZSB0byBiZSBhIG1lZG9pZCwgZG9uJ3QgY2hvb3NlIGl0IGFnYWluIChmb3Igc21hbGwgZGF0YSBzZXRzKS5cbiAgICAgIC8vIEluc3RlYWQgY2hvb3NlIGEgZGlmZmVyZW50IHJhbmRvbSBub2RlLlxuICAgICAgd2hpbGUgKHNlZW5CZWZvcmUobm9kZSwgbWVkb2lkcywgaSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVzLmxlbmd0aCldO1xuICAgICAgfVxuICAgICAgbWVkb2lkc1tpXSA9IG5vZGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlbGF0aXZlbHkgbGFyZ2UgZGF0YSBzZXQsIHNvIHByZXR0eSBzYWZlIHRvIG5vdCBjaGVjayBhbmQganVzdCBzZWxlY3QgcmFuZG9tIG5vZGVzXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgazsgX2kyKyspIHtcbiAgICAgIG1lZG9pZHNbX2kyXSA9IG5vZGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVzLmxlbmd0aCldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVkb2lkcztcbn07XG52YXIgZmluZENvc3QgPSBmdW5jdGlvbiBmaW5kQ29zdChwb3RlbnRpYWxOZXdNZWRvaWQsIGNsdXN0ZXIsIGF0dHJpYnV0ZXMpIHtcbiAgdmFyIGNvc3QgPSAwO1xuICBmb3IgKHZhciBuID0gMDsgbiA8IGNsdXN0ZXIubGVuZ3RoOyBuKyspIHtcbiAgICBjb3N0ICs9IGdldERpc3QoJ21hbmhhdHRhbicsIGNsdXN0ZXJbbl0sIHBvdGVudGlhbE5ld01lZG9pZCwgYXR0cmlidXRlcywgJ2tNZWRvaWRzJyk7XG4gIH1cbiAgcmV0dXJuIGNvc3Q7XG59O1xudmFyIGtNZWFucyA9IGZ1bmN0aW9uIGtNZWFucyhvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgbm9kZSA9IG51bGw7XG5cbiAgLy8gU2V0IHBhcmFtZXRlcnMgb2YgYWxnb3JpdGhtOiAjIG9mIGNsdXN0ZXJzLCBkaXN0YW5jZSBtZXRyaWMsIGV0Yy5cbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDIob3B0aW9ucyk7XG5cbiAgLy8gQmVnaW4gay1tZWFucyBhbGdvcml0aG1cbiAgdmFyIGNsdXN0ZXJzID0gbmV3IEFycmF5KG9wdHMuayk7XG4gIHZhciBhc3NpZ25tZW50ID0ge307XG4gIHZhciBjZW50cm9pZHM7XG5cbiAgLy8gU3RlcCAxOiBJbml0aWFsaXplIGNlbnRyb2lkIHBvc2l0aW9uc1xuICBpZiAob3B0cy50ZXN0TW9kZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cy50ZXN0Q2VudHJvaWRzID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGEgc2VlZGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICAgICAgb3B0cy50ZXN0Q2VudHJvaWRzO1xuICAgICAgY2VudHJvaWRzID0gcmFuZG9tQ2VudHJvaWRzKG5vZGVzLCBvcHRzLmssIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgfSBlbHNlIGlmIChfdHlwZW9mKG9wdHMudGVzdENlbnRyb2lkcykgPT09ICdvYmplY3QnKSB7XG4gICAgICBjZW50cm9pZHMgPSBvcHRzLnRlc3RDZW50cm9pZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNlbnRyb2lkcyA9IHJhbmRvbUNlbnRyb2lkcyhub2Rlcywgb3B0cy5rLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjZW50cm9pZHMgPSByYW5kb21DZW50cm9pZHMobm9kZXMsIG9wdHMuaywgb3B0cy5hdHRyaWJ1dGVzKTtcbiAgfVxuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIC8vIFN0ZXAgMjogQXNzaWduIG5vZGVzIHRvIHRoZSBuZWFyZXN0IGNlbnRyb2lkXG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgICAgbm9kZSA9IG5vZGVzW25dO1xuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNsdXN0ZXIgdGhpcyBub2RlIGJlbG9uZ3MgdG86IG5vZGUgaWQgPT4gY2x1c3RlciAjXG4gICAgICBhc3NpZ25tZW50W25vZGUuaWQoKV0gPSBjbGFzc2lmeShub2RlLCBjZW50cm9pZHMsIG9wdHMuZGlzdGFuY2UsIG9wdHMuYXR0cmlidXRlcywgJ2tNZWFucycpO1xuICAgIH1cblxuICAgIC8vIFN0ZXAgMzogRm9yIGVhY2ggb2YgdGhlIGsgY2x1c3RlcnMsIHVwZGF0ZSBpdHMgY2VudHJvaWRcbiAgICBpc1N0aWxsTW92aW5nID0gZmFsc2U7XG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBvcHRzLms7IGMrKykge1xuICAgICAgLy8gR2V0IGFsbCBub2RlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGNsdXN0ZXJcbiAgICAgIHZhciBjbHVzdGVyID0gYnVpbGRDbHVzdGVyKGMsIG5vZGVzLCBhc3NpZ25tZW50KTtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBJZiBjbHVzdGVyIGlzIGVtcHR5LCBicmVhayBvdXQgZWFybHkgJiBtb3ZlIHRvIG5leHQgY2x1c3RlclxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNlbnRyb2lkcyBieSBjYWxjdWxhdGluZyBhdmcgb2YgYWxsIG5vZGVzIHdpdGhpbiB0aGUgY2x1c3Rlci5cbiAgICAgIHZhciBuZGltID0gb3B0cy5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgIHZhciBjZW50cm9pZCA9IGNlbnRyb2lkc1tjXTsgLy8gWyBkaW1fMSwgZGltXzIsIGRpbV8zLCAuLi4gLCBkaW1fbiBdXG4gICAgICB2YXIgbmV3Q2VudHJvaWQgPSBuZXcgQXJyYXkobmRpbSk7XG4gICAgICB2YXIgc3VtID0gbmV3IEFycmF5KG5kaW0pO1xuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuZGltOyBkKyspIHtcbiAgICAgICAgc3VtW2RdID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsdXN0ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2RlID0gY2x1c3RlcltpXTtcbiAgICAgICAgICBzdW1bZF0gKz0gb3B0cy5hdHRyaWJ1dGVzW2RdKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0NlbnRyb2lkW2RdID0gc3VtW2RdIC8gY2x1c3Rlci5sZW5ndGg7XG5cbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFsZ29yaXRobSBoYXMgY29udmVyZ2VkLCBpLmUuIHdoZW4gY2VudHJvaWRzIG5vIGxvbmdlciBjaGFuZ2VcbiAgICAgICAgaWYgKCFoYXZlVmFsdWVzQ29udmVyZ2VkKG5ld0NlbnRyb2lkW2RdLCBjZW50cm9pZFtkXSwgb3B0cy5zZW5zaXRpdml0eVRocmVzaG9sZCkpIHtcbiAgICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2VudHJvaWRzW2NdID0gbmV3Q2VudHJvaWQ7XG4gICAgICBjbHVzdGVyc1tjXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlcik7XG4gICAgfVxuICAgIGl0ZXJhdGlvbnMrKztcbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIGtNZWRvaWRzID0gZnVuY3Rpb24ga01lZG9pZHMob3B0aW9ucykge1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIG5vZGUgPSBudWxsO1xuICB2YXIgb3B0cyA9IHNldE9wdGlvbnMkMihvcHRpb25zKTtcblxuICAvLyBCZWdpbiBrLW1lZG9pZHMgYWxnb3JpdGhtXG4gIHZhciBjbHVzdGVycyA9IG5ldyBBcnJheShvcHRzLmspO1xuICB2YXIgbWVkb2lkcztcbiAgdmFyIGFzc2lnbm1lbnQgPSB7fTtcbiAgdmFyIGN1ckNvc3Q7XG4gIHZhciBtaW5Db3N0cyA9IG5ldyBBcnJheShvcHRzLmspOyAvLyBtaW5pbXVtIGNvc3QgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBjbHVzdGVyXG5cbiAgLy8gU3RlcCAxOiBJbml0aWFsaXplIGsgbWVkb2lkc1xuICBpZiAob3B0cy50ZXN0TW9kZSkge1xuICAgIGlmICh0eXBlb2Ygb3B0cy50ZXN0Q2VudHJvaWRzID09PSAnbnVtYmVyJykgOyBlbHNlIGlmIChfdHlwZW9mKG9wdHMudGVzdENlbnRyb2lkcykgPT09ICdvYmplY3QnKSB7XG4gICAgICBtZWRvaWRzID0gb3B0cy50ZXN0Q2VudHJvaWRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZWRvaWRzID0gcmFuZG9tTWVkb2lkcyhub2Rlcywgb3B0cy5rKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWVkb2lkcyA9IHJhbmRvbU1lZG9pZHMobm9kZXMsIG9wdHMuayk7XG4gIH1cbiAgdmFyIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gIHdoaWxlIChpc1N0aWxsTW92aW5nICYmIGl0ZXJhdGlvbnMgPCBvcHRzLm1heEl0ZXJhdGlvbnMpIHtcbiAgICAvLyBTdGVwIDI6IEFzc2lnbiBub2RlcyB0byB0aGUgbmVhcmVzdCBtZWRvaWRcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbl07XG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGlzIG5vZGUgYmVsb25ncyB0bzogbm9kZSBpZCA9PiBjbHVzdGVyICNcbiAgICAgIGFzc2lnbm1lbnRbbm9kZS5pZCgpXSA9IGNsYXNzaWZ5KG5vZGUsIG1lZG9pZHMsIG9wdHMuZGlzdGFuY2UsIG9wdHMuYXR0cmlidXRlcywgJ2tNZWRvaWRzJyk7XG4gICAgfVxuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcbiAgICAvLyBTdGVwIDM6IEZvciBlYWNoIG1lZG9pZCBtLCBhbmQgZm9yIGVhY2ggbm9kZSBhc3NvY2lhdGVkIHdpdGggbWVkaW9kIG0sXG4gICAgLy8gc2VsZWN0IHRoZSBub2RlIHdpdGggdGhlIGxvd2VzdCBjb25maWd1cmF0aW9uIGNvc3QgYXMgbmV3IG1lZG9pZC5cbiAgICBmb3IgKHZhciBtID0gMDsgbSA8IG1lZG9pZHMubGVuZ3RoOyBtKyspIHtcbiAgICAgIC8vIEdldCBhbGwgbm9kZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBtZWRvaWRcbiAgICAgIHZhciBjbHVzdGVyID0gYnVpbGRDbHVzdGVyKG0sIG5vZGVzLCBhc3NpZ25tZW50KTtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBJZiBjbHVzdGVyIGlzIGVtcHR5LCBicmVhayBvdXQgZWFybHkgJiBtb3ZlIHRvIG5leHQgY2x1c3RlclxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1pbkNvc3RzW21dID0gZmluZENvc3QobWVkb2lkc1ttXSwgY2x1c3Rlciwgb3B0cy5hdHRyaWJ1dGVzKTsgLy8gb3JpZ2luYWwgY29zdFxuXG4gICAgICAvLyBTZWxlY3QgZGlmZmVyZW50IG1lZG9pZCBpZiBpdHMgY29uZmlndXJhdGlvbiBoYXMgdGhlIGxvd2VzdCBjb3N0XG4gICAgICBmb3IgKHZhciBfbiA9IDA7IF9uIDwgY2x1c3Rlci5sZW5ndGg7IF9uKyspIHtcbiAgICAgICAgY3VyQ29zdCA9IGZpbmRDb3N0KGNsdXN0ZXJbX25dLCBjbHVzdGVyLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoY3VyQ29zdCA8IG1pbkNvc3RzW21dKSB7XG4gICAgICAgICAgbWluQ29zdHNbbV0gPSBjdXJDb3N0O1xuICAgICAgICAgIG1lZG9pZHNbbV0gPSBjbHVzdGVyW19uXTtcbiAgICAgICAgICBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2x1c3RlcnNbbV0gPSBjeS5jb2xsZWN0aW9uKGNsdXN0ZXIpO1xuICAgIH1cbiAgICBpdGVyYXRpb25zKys7XG4gIH1cbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciB1cGRhdGVDZW50cm9pZHMgPSBmdW5jdGlvbiB1cGRhdGVDZW50cm9pZHMoY2VudHJvaWRzLCBub2RlcywgVSwgd2VpZ2h0LCBvcHRzKSB7XG4gIHZhciBudW1lcmF0b3IsIGRlbm9taW5hdG9yO1xuICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjZW50cm9pZHMubGVuZ3RoOyBjKyspIHtcbiAgICAgIHdlaWdodFtuXVtjXSA9IE1hdGgucG93KFVbbl1bY10sIG9wdHMubSk7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIF9jID0gMDsgX2MgPCBjZW50cm9pZHMubGVuZ3RoOyBfYysrKSB7XG4gICAgZm9yICh2YXIgZGltID0gMDsgZGltIDwgb3B0cy5hdHRyaWJ1dGVzLmxlbmd0aDsgZGltKyspIHtcbiAgICAgIG51bWVyYXRvciA9IDA7XG4gICAgICBkZW5vbWluYXRvciA9IDA7XG4gICAgICBmb3IgKHZhciBfbjIgPSAwOyBfbjIgPCBub2Rlcy5sZW5ndGg7IF9uMisrKSB7XG4gICAgICAgIG51bWVyYXRvciArPSB3ZWlnaHRbX24yXVtfY10gKiBvcHRzLmF0dHJpYnV0ZXNbZGltXShub2Rlc1tfbjJdKTtcbiAgICAgICAgZGVub21pbmF0b3IgKz0gd2VpZ2h0W19uMl1bX2NdO1xuICAgICAgfVxuICAgICAgY2VudHJvaWRzW19jXVtkaW1dID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gICAgfVxuICB9XG59O1xudmFyIHVwZGF0ZU1lbWJlcnNoaXAgPSBmdW5jdGlvbiB1cGRhdGVNZW1iZXJzaGlwKFUsIF9VLCBjZW50cm9pZHMsIG5vZGVzLCBvcHRzKSB7XG4gIC8vIFNhdmUgcHJldmlvdXMgc3RlcFxuICBmb3IgKHZhciBpID0gMDsgaSA8IFUubGVuZ3RoOyBpKyspIHtcbiAgICBfVVtpXSA9IFVbaV0uc2xpY2UoKTtcbiAgfVxuICB2YXIgc3VtLCBudW1lcmF0b3IsIGRlbm9taW5hdG9yO1xuICB2YXIgcG93ID0gMiAvIChvcHRzLm0gLSAxKTtcbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBjZW50cm9pZHMubGVuZ3RoOyBjKyspIHtcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgICBzdW0gPSAwO1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjZW50cm9pZHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgLy8gYWdhaW5zdCBhbGwgb3RoZXIgY2VudHJvaWRzXG4gICAgICAgIG51bWVyYXRvciA9IGdldERpc3Qob3B0cy5kaXN0YW5jZSwgbm9kZXNbbl0sIGNlbnRyb2lkc1tjXSwgb3B0cy5hdHRyaWJ1dGVzLCAnY21lYW5zJyk7XG4gICAgICAgIGRlbm9taW5hdG9yID0gZ2V0RGlzdChvcHRzLmRpc3RhbmNlLCBub2Rlc1tuXSwgY2VudHJvaWRzW2tdLCBvcHRzLmF0dHJpYnV0ZXMsICdjbWVhbnMnKTtcbiAgICAgICAgc3VtICs9IE1hdGgucG93KG51bWVyYXRvciAvIGRlbm9taW5hdG9yLCBwb3cpO1xuICAgICAgfVxuICAgICAgVVtuXVtjXSA9IDEgLyBzdW07XG4gICAgfVxuICB9XG59O1xudmFyIGFzc2lnbiQxID0gZnVuY3Rpb24gYXNzaWduKG5vZGVzLCBVLCBvcHRzLCBjeSkge1xuICB2YXIgY2x1c3RlcnMgPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgZm9yICh2YXIgYyA9IDA7IGMgPCBjbHVzdGVycy5sZW5ndGg7IGMrKykge1xuICAgIGNsdXN0ZXJzW2NdID0gW107XG4gIH1cbiAgdmFyIG1heDtcbiAgdmFyIGluZGV4O1xuICBmb3IgKHZhciBuID0gMDsgbiA8IFUubGVuZ3RoOyBuKyspIHtcbiAgICAvLyBmb3IgZWFjaCBub2RlIChVIGlzIE4geCBDIG1hdHJpeClcbiAgICBtYXggPSAtSW5maW5pdHk7XG4gICAgaW5kZXggPSAtMTtcbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGUgbm9kZSBpcyBtb3N0IGxpa2VseSB0byBiZWxvbmcgaW5cbiAgICBmb3IgKHZhciBfYzIgPSAwOyBfYzIgPCBVWzBdLmxlbmd0aDsgX2MyKyspIHtcbiAgICAgIGlmIChVW25dW19jMl0gPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gVVtuXVtfYzJdO1xuICAgICAgICBpbmRleCA9IF9jMjtcbiAgICAgIH1cbiAgICB9XG4gICAgY2x1c3RlcnNbaW5kZXhdLnB1c2gobm9kZXNbbl0pO1xuICB9XG5cbiAgLy8gVHVybiBldmVyeSBhcnJheSBpbnRvIGEgY29sbGVjdGlvbiBvZiBub2Rlc1xuICBmb3IgKHZhciBfYzMgPSAwOyBfYzMgPCBjbHVzdGVycy5sZW5ndGg7IF9jMysrKSB7XG4gICAgY2x1c3RlcnNbX2MzXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3RlcnNbX2MzXSk7XG4gIH1cbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciBmdXp6eUNNZWFucyA9IGZ1bmN0aW9uIGZ1enp5Q01lYW5zKG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gIHZhciBvcHRzID0gc2V0T3B0aW9ucyQyKG9wdGlvbnMpO1xuXG4gIC8vIEJlZ2luIGZ1enp5IGMtbWVhbnMgYWxnb3JpdGhtXG4gIHZhciBjbHVzdGVycztcbiAgdmFyIGNlbnRyb2lkcztcbiAgdmFyIFU7XG4gIHZhciBfVTtcbiAgdmFyIHdlaWdodDtcblxuICAvLyBTdGVwIDE6IEluaXRpYWxpemUgbGV0aWFibGVzLlxuICBfVSA9IG5ldyBBcnJheShub2Rlcy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gTiB4IEMgbWF0cml4XG4gICAgX1VbaV0gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgfVxuICBVID0gbmV3IEFycmF5KG5vZGVzLmxlbmd0aCk7XG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IG5vZGVzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAvLyBOIHggQyBtYXRyaXhcbiAgICBVW19pM10gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgfVxuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBub2Rlcy5sZW5ndGg7IF9pNCsrKSB7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9wdHMuazsgaisrKSB7XG4gICAgICBVW19pNF1bal0gPSBNYXRoLnJhbmRvbSgpO1xuICAgICAgdG90YWwgKz0gVVtfaTRdW2pdO1xuICAgIH1cbiAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgb3B0cy5rOyBfaisrKSB7XG4gICAgICBVW19pNF1bX2pdID0gVVtfaTRdW19qXSAvIHRvdGFsO1xuICAgIH1cbiAgfVxuICBjZW50cm9pZHMgPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgb3B0cy5rOyBfaTUrKykge1xuICAgIGNlbnRyb2lkc1tfaTVdID0gbmV3IEFycmF5KG9wdHMuYXR0cmlidXRlcy5sZW5ndGgpO1xuICB9XG4gIHdlaWdodCA9IG5ldyBBcnJheShub2Rlcy5sZW5ndGgpO1xuICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBub2Rlcy5sZW5ndGg7IF9pNisrKSB7XG4gICAgLy8gTiB4IEMgbWF0cml4XG4gICAgd2VpZ2h0W19pNl0gPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgfVxuICAvLyBlbmQgaW5pdCBGQ01cblxuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8vIFN0ZXAgMjogQ2FsY3VsYXRlIHRoZSBjZW50cm9pZHMgZm9yIGVhY2ggc3RlcC5cbiAgICB1cGRhdGVDZW50cm9pZHMoY2VudHJvaWRzLCBub2RlcywgVSwgd2VpZ2h0LCBvcHRzKTtcblxuICAgIC8vIFN0ZXAgMzogVXBkYXRlIHRoZSBwYXJ0aXRpb24gbWF0cml4IFUuXG4gICAgdXBkYXRlTWVtYmVyc2hpcChVLCBfVSwgY2VudHJvaWRzLCBub2Rlcywgb3B0cyk7XG5cbiAgICAvLyBTdGVwIDQ6IENoZWNrIGZvciBjb252ZXJnZW5jZS5cbiAgICBpZiAoIWhhdmVNYXRyaWNlc0NvbnZlcmdlZChVLCBfVSwgb3B0cy5zZW5zaXRpdml0eVRocmVzaG9sZCkpIHtcbiAgICAgIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpdGVyYXRpb25zKys7XG4gIH1cblxuICAvLyBBc3NpZ24gbm9kZXMgdG8gY2x1c3RlcnMgd2l0aCBoaWdoZXN0IHByb2JhYmlsaXR5LlxuICBjbHVzdGVycyA9IGFzc2lnbiQxKG5vZGVzLCBVLCBvcHRzLCBjeSk7XG4gIHJldHVybiB7XG4gICAgY2x1c3RlcnM6IGNsdXN0ZXJzLFxuICAgIGRlZ3JlZU9mTWVtYmVyc2hpcDogVVxuICB9O1xufTtcbnZhciBrQ2x1c3RlcmluZyA9IHtcbiAga01lYW5zOiBrTWVhbnMsXG4gIGtNZWRvaWRzOiBrTWVkb2lkcyxcbiAgZnV6enlDTWVhbnM6IGZ1enp5Q01lYW5zLFxuICBmY206IGZ1enp5Q01lYW5zXG59O1xuXG4vLyBJbXBsZW1lbnRlZCBieSBab2UgWGkgQHpvZXhpIGZvciBHU09DIDIwMTZcbnZhciBkZWZhdWx0cyRhID0gZGVmYXVsdHMkZyh7XG4gIGRpc3RhbmNlOiAnZXVjbGlkZWFuJyxcbiAgLy8gZGlzdGFuY2UgbWV0cmljIHRvIGNvbXBhcmUgbm9kZXNcbiAgbGlua2FnZTogJ21pbicsXG4gIC8vIGxpbmthZ2UgY3JpdGVyaW9uIDogaG93IHRvIGRldGVybWluZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBjbHVzdGVycyBvZiBub2Rlc1xuICBtb2RlOiAndGhyZXNob2xkJyxcbiAgLy8gbW9kZTondGhyZXNob2xkJyA9PiBjbHVzdGVycyBtdXN0IGJlIHRocmVzaG9sZCBkaXN0YW5jZSBhcGFydFxuICB0aHJlc2hvbGQ6IEluZmluaXR5LFxuICAvLyB0aGUgZGlzdGFuY2UgdGhyZXNob2xkXG4gIC8vIG1vZGU6J2RlbmRyb2dyYW0nID0+IHRoZSBub2RlcyBhcmUgb3JnYW5pc2VkIGFzIGxlYXZlcyBpbiBhIHRyZWUgKHNpYmxpbmdzIGFyZSBjbG9zZSksIG1lcmdpbmcgbWFrZXMgY2x1c3RlcnNcbiAgYWRkRGVuZHJvZ3JhbTogZmFsc2UsXG4gIC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBkZW5kcm9ncmFtIHRvIHRoZSBncmFwaCBmb3Igdml6XG4gIGRlbmRyb2dyYW1EZXB0aDogMCxcbiAgLy8gZGVwdGggYXQgd2hpY2ggZGVuZHJvZ3JhbSBicmFuY2hlcyBhcmUgbWVyZ2VkIGludG8gdGhlIHJldHVybmVkIGNsdXN0ZXJzXG4gIGF0dHJpYnV0ZXM6IFtdIC8vIGFycmF5IG9mIGF0dHIgZnVuY3Rpb25zXG59KTtcblxudmFyIGxpbmthZ2VBbGlhc2VzID0ge1xuICAnc2luZ2xlJzogJ21pbicsXG4gICdjb21wbGV0ZSc6ICdtYXgnXG59O1xudmFyIHNldE9wdGlvbnMkMSA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICB2YXIgb3B0cyA9IGRlZmF1bHRzJGEob3B0aW9ucyk7XG4gIHZhciBwcmVmZXJyZWRBbGlhcyA9IGxpbmthZ2VBbGlhc2VzW29wdHMubGlua2FnZV07XG4gIGlmIChwcmVmZXJyZWRBbGlhcyAhPSBudWxsKSB7XG4gICAgb3B0cy5saW5rYWdlID0gcHJlZmVycmVkQWxpYXM7XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59O1xudmFyIG1lcmdlQ2xvc2VzdCA9IGZ1bmN0aW9uIG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKSB7XG4gIC8vIEZpbmQgdHdvIGNsb3Nlc3QgY2x1c3RlcnMgZnJvbSBjYWNoZWQgbWluc1xuICB2YXIgbWluS2V5ID0gMDtcbiAgdmFyIG1pbiA9IEluZmluaXR5O1xuICB2YXIgZGlzdDtcbiAgdmFyIGF0dHJzID0gb3B0cy5hdHRyaWJ1dGVzO1xuICB2YXIgZ2V0RGlzdCA9IGZ1bmN0aW9uIGdldERpc3QobjEsIG4yKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJpbmdEaXN0YW5jZShvcHRzLmRpc3RhbmNlLCBhdHRycy5sZW5ndGgsIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cnNbaV0objEpO1xuICAgIH0sIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cnNbaV0objIpO1xuICAgIH0sIG4xLCBuMik7XG4gIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gY2x1c3RlcnNbaV0ua2V5O1xuICAgIHZhciBfZGlzdCA9IGRpc3RzW2tleV1bbWluc1trZXldXTtcbiAgICBpZiAoX2Rpc3QgPCBtaW4pIHtcbiAgICAgIG1pbktleSA9IGtleTtcbiAgICAgIG1pbiA9IF9kaXN0O1xuICAgIH1cbiAgfVxuICBpZiAob3B0cy5tb2RlID09PSAndGhyZXNob2xkJyAmJiBtaW4gPj0gb3B0cy50aHJlc2hvbGQgfHwgb3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScgJiYgY2x1c3RlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBjMSA9IGluZGV4W21pbktleV07XG4gIHZhciBjMiA9IGluZGV4W21pbnNbbWluS2V5XV07XG4gIHZhciBtZXJnZWQ7XG5cbiAgLy8gTWVyZ2UgdHdvIGNsb3Nlc3QgY2x1c3RlcnNcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nKSB7XG4gICAgbWVyZ2VkID0ge1xuICAgICAgbGVmdDogYzEsXG4gICAgICByaWdodDogYzIsXG4gICAgICBrZXk6IGMxLmtleVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbWVyZ2VkID0ge1xuICAgICAgdmFsdWU6IGMxLnZhbHVlLmNvbmNhdChjMi52YWx1ZSksXG4gICAgICBrZXk6IGMxLmtleVxuICAgIH07XG4gIH1cbiAgY2x1c3RlcnNbYzEuaW5kZXhdID0gbWVyZ2VkO1xuICBjbHVzdGVycy5zcGxpY2UoYzIuaW5kZXgsIDEpO1xuICBpbmRleFtjMS5rZXldID0gbWVyZ2VkO1xuXG4gIC8vIFVwZGF0ZSBkaXN0YW5jZXMgd2l0aCBuZXcgbWVyZ2VkIGNsdXN0ZXJcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGNsdXN0ZXJzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBjdXIgPSBjbHVzdGVyc1tfaV07XG4gICAgaWYgKGMxLmtleSA9PT0gY3VyLmtleSkge1xuICAgICAgZGlzdCA9IEluZmluaXR5O1xuICAgIH0gZWxzZSBpZiAob3B0cy5saW5rYWdlID09PSAnbWluJykge1xuICAgICAgZGlzdCA9IGRpc3RzW2MxLmtleV1bY3VyLmtleV07XG4gICAgICBpZiAoZGlzdHNbYzEua2V5XVtjdXIua2V5XSA+IGRpc3RzW2MyLmtleV1bY3VyLmtleV0pIHtcbiAgICAgICAgZGlzdCA9IGRpc3RzW2MyLmtleV1bY3VyLmtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRzLmxpbmthZ2UgPT09ICdtYXgnKSB7XG4gICAgICBkaXN0ID0gZGlzdHNbYzEua2V5XVtjdXIua2V5XTtcbiAgICAgIGlmIChkaXN0c1tjMS5rZXldW2N1ci5rZXldIDwgZGlzdHNbYzIua2V5XVtjdXIua2V5XSkge1xuICAgICAgICBkaXN0ID0gZGlzdHNbYzIua2V5XVtjdXIua2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdHMubGlua2FnZSA9PT0gJ21lYW4nKSB7XG4gICAgICBkaXN0ID0gKGRpc3RzW2MxLmtleV1bY3VyLmtleV0gKiBjMS5zaXplICsgZGlzdHNbYzIua2V5XVtjdXIua2V5XSAqIGMyLnNpemUpIC8gKGMxLnNpemUgKyBjMi5zaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nKSBkaXN0ID0gZ2V0RGlzdChjdXIudmFsdWUsIGMxLnZhbHVlKTtlbHNlIGRpc3QgPSBnZXREaXN0KGN1ci52YWx1ZVswXSwgYzEudmFsdWVbMF0pO1xuICAgIH1cbiAgICBkaXN0c1tjMS5rZXldW2N1ci5rZXldID0gZGlzdHNbY3VyLmtleV1bYzEua2V5XSA9IGRpc3Q7IC8vIGRpc3RhbmNlIG1hdHJpeCBpcyBzeW1tZXRyaWNcbiAgfVxuXG4gIC8vIFVwZGF0ZSBjYWNoZWQgbWluc1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjbHVzdGVycy5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIGtleTEgPSBjbHVzdGVyc1tfaTJdLmtleTtcbiAgICBpZiAobWluc1trZXkxXSA9PT0gYzEua2V5IHx8IG1pbnNba2V5MV0gPT09IGMyLmtleSkge1xuICAgICAgdmFyIF9taW4gPSBrZXkxO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbHVzdGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIga2V5MiA9IGNsdXN0ZXJzW2pdLmtleTtcbiAgICAgICAgaWYgKGRpc3RzW2tleTFdW2tleTJdIDwgZGlzdHNba2V5MV1bX21pbl0pIHtcbiAgICAgICAgICBfbWluID0ga2V5MjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWluc1trZXkxXSA9IF9taW47XG4gICAgfVxuICAgIGNsdXN0ZXJzW19pMl0uaW5kZXggPSBfaTI7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBtZXRhIGRhdGEgdXNlZCBmb3IgY2x1c3RlcmluZ1xuICBjMS5rZXkgPSBjMi5rZXkgPSBjMS5pbmRleCA9IGMyLmluZGV4ID0gbnVsbDtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIGdldEFsbENoaWxkcmVuID0gZnVuY3Rpb24gZ2V0QWxsQ2hpbGRyZW4ocm9vdCwgYXJyLCBjeSkge1xuICBpZiAoIXJvb3QpIHJldHVybjtcbiAgaWYgKHJvb3QudmFsdWUpIHtcbiAgICBhcnIucHVzaChyb290LnZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocm9vdC5sZWZ0KSBnZXRBbGxDaGlsZHJlbihyb290LmxlZnQsIGFycik7XG4gICAgaWYgKHJvb3QucmlnaHQpIGdldEFsbENoaWxkcmVuKHJvb3QucmlnaHQsIGFycik7XG4gIH1cbn07XG52YXIgYnVpbGREZW5kcm9ncmFtID0gZnVuY3Rpb24gYnVpbGREZW5kcm9ncmFtKHJvb3QsIGN5KSB7XG4gIGlmICghcm9vdCkgcmV0dXJuICcnO1xuICBpZiAocm9vdC5sZWZ0ICYmIHJvb3QucmlnaHQpIHtcbiAgICB2YXIgbGVmdFN0ciA9IGJ1aWxkRGVuZHJvZ3JhbShyb290LmxlZnQsIGN5KTtcbiAgICB2YXIgcmlnaHRTdHIgPSBidWlsZERlbmRyb2dyYW0ocm9vdC5yaWdodCwgY3kpO1xuICAgIHZhciBub2RlID0gY3kuYWRkKHtcbiAgICAgIGdyb3VwOiAnbm9kZXMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBpZDogbGVmdFN0ciArICcsJyArIHJpZ2h0U3RyXG4gICAgICB9XG4gICAgfSk7XG4gICAgY3kuYWRkKHtcbiAgICAgIGdyb3VwOiAnZWRnZXMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzb3VyY2U6IGxlZnRTdHIsXG4gICAgICAgIHRhcmdldDogbm9kZS5pZCgpXG4gICAgICB9XG4gICAgfSk7XG4gICAgY3kuYWRkKHtcbiAgICAgIGdyb3VwOiAnZWRnZXMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzb3VyY2U6IHJpZ2h0U3RyLFxuICAgICAgICB0YXJnZXQ6IG5vZGUuaWQoKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBub2RlLmlkKCk7XG4gIH0gZWxzZSBpZiAocm9vdC52YWx1ZSkge1xuICAgIHJldHVybiByb290LnZhbHVlLmlkKCk7XG4gIH1cbn07XG52YXIgYnVpbGRDbHVzdGVyc0Zyb21UcmVlID0gZnVuY3Rpb24gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QsIGssIGN5KSB7XG4gIGlmICghcm9vdCkgcmV0dXJuIFtdO1xuICB2YXIgbGVmdCA9IFtdLFxuICAgIHJpZ2h0ID0gW10sXG4gICAgbGVhdmVzID0gW107XG4gIGlmIChrID09PSAwKSB7XG4gICAgLy8gZG9uJ3QgY3V0IHRyZWUsIHNpbXBseSByZXR1cm4gYWxsIG5vZGVzIGFzIDEgc2luZ2xlIGNsdXN0ZXJcbiAgICBpZiAocm9vdC5sZWZ0KSBnZXRBbGxDaGlsZHJlbihyb290LmxlZnQsIGxlZnQpO1xuICAgIGlmIChyb290LnJpZ2h0KSBnZXRBbGxDaGlsZHJlbihyb290LnJpZ2h0LCByaWdodCk7XG4gICAgbGVhdmVzID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgIHJldHVybiBbY3kuY29sbGVjdGlvbihsZWF2ZXMpXTtcbiAgfSBlbHNlIGlmIChrID09PSAxKSB7XG4gICAgLy8gY3V0IGF0IHJvb3RcblxuICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICAvLyBsZWFmIG5vZGVcbiAgICAgIHJldHVybiBbY3kuY29sbGVjdGlvbihyb290LnZhbHVlKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyb290LmxlZnQpIGdldEFsbENoaWxkcmVuKHJvb3QubGVmdCwgbGVmdCk7XG4gICAgICBpZiAocm9vdC5yaWdodCkgZ2V0QWxsQ2hpbGRyZW4ocm9vdC5yaWdodCwgcmlnaHQpO1xuICAgICAgcmV0dXJuIFtjeS5jb2xsZWN0aW9uKGxlZnQpLCBjeS5jb2xsZWN0aW9uKHJpZ2h0KV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICByZXR1cm4gW2N5LmNvbGxlY3Rpb24ocm9vdC52YWx1ZSldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocm9vdC5sZWZ0KSBsZWZ0ID0gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QubGVmdCwgayAtIDEsIGN5KTtcbiAgICAgIGlmIChyb290LnJpZ2h0KSByaWdodCA9IGJ1aWxkQ2x1c3RlcnNGcm9tVHJlZShyb290LnJpZ2h0LCBrIC0gMSwgY3kpO1xuICAgICAgcmV0dXJuIGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBoaWVyYXJjaGljYWxDbHVzdGVyaW5nID0gZnVuY3Rpb24gaGllcmFyY2hpY2FsQ2x1c3RlcmluZyhvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuXG4gIC8vIFNldCBwYXJhbWV0ZXJzIG9mIGFsZ29yaXRobTogbGlua2FnZSB0eXBlLCBkaXN0YW5jZSBtZXRyaWMsIGV0Yy5cbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDEob3B0aW9ucyk7XG4gIHZhciBhdHRycyA9IG9wdHMuYXR0cmlidXRlcztcbiAgdmFyIGdldERpc3QgPSBmdW5jdGlvbiBnZXREaXN0KG4xLCBuMikge1xuICAgIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2Uob3B0cy5kaXN0YW5jZSwgYXR0cnMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGF0dHJzW2ldKG4xKTtcbiAgICB9LCBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGF0dHJzW2ldKG4yKTtcbiAgICB9LCBuMSwgbjIpO1xuICB9O1xuXG4gIC8vIEJlZ2luIGhpZXJhcmNoaWNhbCBhbGdvcml0aG1cbiAgdmFyIGNsdXN0ZXJzID0gW107XG4gIHZhciBkaXN0cyA9IFtdOyAvLyBkaXN0YW5jZXMgYmV0d2VlbiBlYWNoIHBhaXIgb2YgY2x1c3RlcnNcbiAgdmFyIG1pbnMgPSBbXTsgLy8gY2xvc2VzdCBjbHVzdGVyIGZvciBlYWNoIGNsdXN0ZXJcbiAgdmFyIGluZGV4ID0gW107IC8vIGhhc2ggb2YgYWxsIGNsdXN0ZXJzIGJ5IGtleVxuXG4gIC8vIEluIGFnZ2xvbWVyYXRpdmUgKGJvdHRvbS11cCkgY2x1c3RlcmluZywgZWFjaCBub2RlIHN0YXJ0cyBhcyBpdHMgb3duIGNsdXN0ZXJcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgIHZhciBjbHVzdGVyID0ge1xuICAgICAgdmFsdWU6IG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nID8gbm9kZXNbbl0gOiBbbm9kZXNbbl1dLFxuICAgICAga2V5OiBuLFxuICAgICAgaW5kZXg6IG5cbiAgICB9O1xuICAgIGNsdXN0ZXJzW25dID0gY2x1c3RlcjtcbiAgICBpbmRleFtuXSA9IGNsdXN0ZXI7XG4gICAgZGlzdHNbbl0gPSBbXTtcbiAgICBtaW5zW25dID0gMDtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIHBhaXIgb2YgY2x1c3RlcnNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IGk7IGorKykge1xuICAgICAgdmFyIGRpc3QgPSB2b2lkIDA7XG4gICAgICBpZiAob3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScpIHtcbiAgICAgICAgLy8gbW9kZXMgc3RvcmUgY2x1c3RlciB2YWx1ZXMgZGlmZmVyZW50bHlcbiAgICAgICAgZGlzdCA9IGkgPT09IGogPyBJbmZpbml0eSA6IGdldERpc3QoY2x1c3RlcnNbaV0udmFsdWUsIGNsdXN0ZXJzW2pdLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3QgPSBpID09PSBqID8gSW5maW5pdHkgOiBnZXREaXN0KGNsdXN0ZXJzW2ldLnZhbHVlWzBdLCBjbHVzdGVyc1tqXS52YWx1ZVswXSk7XG4gICAgICB9XG4gICAgICBkaXN0c1tpXVtqXSA9IGRpc3Q7XG4gICAgICBkaXN0c1tqXVtpXSA9IGRpc3Q7XG4gICAgICBpZiAoZGlzdCA8IGRpc3RzW2ldW21pbnNbaV1dKSB7XG4gICAgICAgIG1pbnNbaV0gPSBqOyAvLyBDYWNoZSBtaW5zOiBjbG9zZXN0IGNsdXN0ZXIgdG8gY2x1c3RlciBpIGlzIGNsdXN0ZXIgalxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgdGhlIGNsb3Nlc3QgcGFpciBvZiBjbHVzdGVycyBhbmQgbWVyZ2UgdGhlbSBpbnRvIGEgc2luZ2xlIGNsdXN0ZXIuXG4gIC8vIFVwZGF0ZSBkaXN0YW5jZXMgYmV0d2VlbiBuZXcgY2x1c3RlciBhbmQgZWFjaCBvZiB0aGUgb2xkIGNsdXN0ZXJzLCBhbmQgbG9vcCB1bnRpbCB0aHJlc2hvbGQgcmVhY2hlZC5cbiAgdmFyIG1lcmdlZCA9IG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKTtcbiAgd2hpbGUgKG1lcmdlZCkge1xuICAgIG1lcmdlZCA9IG1lcmdlQ2xvc2VzdChjbHVzdGVycywgaW5kZXgsIGRpc3RzLCBtaW5zLCBvcHRzKTtcbiAgfVxuICB2YXIgcmV0Q2x1c3RlcnM7XG5cbiAgLy8gRGVuZHJvZ3JhbSBtb2RlIGJ1aWxkcyB0aGUgaGllcmFyY2h5IGFuZCBhZGRzIGludGVybWVkaWFyeSBub2RlcyArIGVkZ2VzXG4gIC8vIGluIGFkZGl0aW9uIHRvIHJldHVybmluZyB0aGUgY2x1c3RlcnMuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykge1xuICAgIHJldENsdXN0ZXJzID0gYnVpbGRDbHVzdGVyc0Zyb21UcmVlKGNsdXN0ZXJzWzBdLCBvcHRzLmRlbmRyb2dyYW1EZXB0aCwgY3kpO1xuICAgIGlmIChvcHRzLmFkZERlbmRyb2dyYW0pIGJ1aWxkRGVuZHJvZ3JhbShjbHVzdGVyc1swXSwgY3kpO1xuICB9IGVsc2Uge1xuICAgIC8vIFJlZ3VsYXIgbW9kZSBzaW1wbHkgcmV0dXJucyB0aGUgY2x1c3RlcnNcblxuICAgIHJldENsdXN0ZXJzID0gbmV3IEFycmF5KGNsdXN0ZXJzLmxlbmd0aCk7XG4gICAgY2x1c3RlcnMuZm9yRWFjaChmdW5jdGlvbiAoY2x1c3RlciwgaSkge1xuICAgICAgLy8gQ2xlYW4gdXAgbWV0YSBkYXRhIHVzZWQgZm9yIGNsdXN0ZXJpbmdcbiAgICAgIGNsdXN0ZXIua2V5ID0gY2x1c3Rlci5pbmRleCA9IG51bGw7XG4gICAgICByZXRDbHVzdGVyc1tpXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlci52YWx1ZSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJldENsdXN0ZXJzO1xufTtcbnZhciBoaWVyYXJjaGljYWxDbHVzdGVyaW5nJDEgPSB7XG4gIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmc6IGhpZXJhcmNoaWNhbENsdXN0ZXJpbmcsXG4gIGhjYTogaGllcmFyY2hpY2FsQ2x1c3RlcmluZ1xufTtcblxuLy8gSW1wbGVtZW50ZWQgYnkgWm9lIFhpIEB6b2V4aSBmb3IgR1NPQyAyMDE2XG52YXIgZGVmYXVsdHMkOSA9IGRlZmF1bHRzJGcoe1xuICBkaXN0YW5jZTogJ2V1Y2xpZGVhbicsXG4gIC8vIGRpc3RhbmNlIG1ldHJpYyB0byBjb21wYXJlIGF0dHJpYnV0ZXMgYmV0d2VlbiB0d28gbm9kZXNcbiAgcHJlZmVyZW5jZTogJ21lZGlhbicsXG4gIC8vIHN1aXRhYmlsaXR5IG9mIGEgZGF0YSBwb2ludCB0byBzZXJ2ZSBhcyBhbiBleGVtcGxhclxuICBkYW1waW5nOiAwLjgsXG4gIC8vIGRhbXBpbmcgZmFjdG9yIGJldHdlZW4gWzAuNSwgMSlcbiAgbWF4SXRlcmF0aW9uczogMTAwMCxcbiAgLy8gbWF4IG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHJ1blxuICBtaW5JdGVyYXRpb25zOiAxMDAsXG4gIC8vIG1pbiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBydW4gaW4gb3JkZXIgZm9yIGNsdXN0ZXJpbmcgdG8gc3RvcFxuICBhdHRyaWJ1dGVzOiBbLy8gZnVuY3Rpb25zIHRvIHF1YW50aWZ5IHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYW55IHR3byBwb2ludHNcbiAgICAvLyBlLmcuIG5vZGUgPT4gbm9kZS5kYXRhKCd3ZWlnaHQnKVxuICBdXG59KTtcbnZhciBzZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHZhciBkbXAgPSBvcHRpb25zLmRhbXBpbmc7XG4gIHZhciBwcmVmID0gb3B0aW9ucy5wcmVmZXJlbmNlO1xuICBpZiAoISgwLjUgPD0gZG1wICYmIGRtcCA8IDEpKSB7XG4gICAgZXJyb3IoXCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6IFwiLmNvbmNhdChkbXApKTtcbiAgfVxuICB2YXIgdmFsaWRQcmVmcyA9IFsnbWVkaWFuJywgJ21lYW4nLCAnbWluJywgJ21heCddO1xuICBpZiAoISh2YWxpZFByZWZzLnNvbWUoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gcHJlZjtcbiAgfSkgfHwgbnVtYmVyJDEocHJlZikpKSB7XG4gICAgZXJyb3IoXCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFtcIi5jb25jYXQodmFsaWRQcmVmcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBcIidcIi5jb25jYXQocCwgXCInXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiXSBvciBhIG51bWJlci4gIEdvdDogXCIpLmNvbmNhdChwcmVmKSk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRzJDkob3B0aW9ucyk7XG59O1xuXG52YXIgZ2V0U2ltaWxhcml0eSA9IGZ1bmN0aW9uIGdldFNpbWlsYXJpdHkodHlwZSwgbjEsIG4yLCBhdHRyaWJ1dGVzKSB7XG4gIHZhciBhdHRyID0gZnVuY3Rpb24gYXR0cihuLCBpKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNbaV0obik7XG4gIH07XG5cbiAgLy8gbmIgbmVnYXRpdmUgYmVjYXVzZSBzaW1pbGFyaXR5IHNob3VsZCBoYXZlIGFuIGludmVyc2UgcmVsYXRpb25zaGlwIHRvIGRpc3RhbmNlXG4gIHJldHVybiAtY2x1c3RlcmluZ0Rpc3RhbmNlKHR5cGUsIGF0dHJpYnV0ZXMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBhdHRyKG4xLCBpKTtcbiAgfSwgZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gYXR0cihuMiwgaSk7XG4gIH0sIG4xLCBuMik7XG59O1xudmFyIGdldFByZWZlcmVuY2UgPSBmdW5jdGlvbiBnZXRQcmVmZXJlbmNlKFMsIHByZWZlcmVuY2UpIHtcbiAgLy8gbGFyZ2VyIHByZWZlcmVuY2UgPSBncmVhdGVyICMgb2YgY2x1c3RlcnNcbiAgdmFyIHAgPSBudWxsO1xuICBpZiAocHJlZmVyZW5jZSA9PT0gJ21lZGlhbicpIHtcbiAgICBwID0gbWVkaWFuKFMpO1xuICB9IGVsc2UgaWYgKHByZWZlcmVuY2UgPT09ICdtZWFuJykge1xuICAgIHAgPSBtZWFuKFMpO1xuICB9IGVsc2UgaWYgKHByZWZlcmVuY2UgPT09ICdtaW4nKSB7XG4gICAgcCA9IG1pbihTKTtcbiAgfSBlbHNlIGlmIChwcmVmZXJlbmNlID09PSAnbWF4Jykge1xuICAgIHAgPSBtYXgoUyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ3VzdG9tIHByZWZlcmVuY2UgbnVtYmVyLCBhcyBzZXQgYnkgdXNlclxuICAgIHAgPSBwcmVmZXJlbmNlO1xuICB9XG4gIHJldHVybiBwO1xufTtcbnZhciBmaW5kRXhlbXBsYXJzID0gZnVuY3Rpb24gZmluZEV4ZW1wbGFycyhuLCBSLCBBKSB7XG4gIHZhciBpbmRpY2VzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgaWYgKFJbaSAqIG4gKyBpXSArIEFbaSAqIG4gKyBpXSA+IDApIHtcbiAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZGljZXM7XG59O1xudmFyIGFzc2lnbkNsdXN0ZXJzID0gZnVuY3Rpb24gYXNzaWduQ2x1c3RlcnMobiwgUywgZXhlbXBsYXJzKSB7XG4gIHZhciBjbHVzdGVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIHZhciBtYXggPSAtSW5maW5pdHk7XG4gICAgZm9yICh2YXIgZWkgPSAwOyBlaSA8IGV4ZW1wbGFycy5sZW5ndGg7IGVpKyspIHtcbiAgICAgIHZhciBlID0gZXhlbXBsYXJzW2VpXTtcbiAgICAgIGlmIChTW2kgKiBuICsgZV0gPiBtYXgpIHtcbiAgICAgICAgaW5kZXggPSBlO1xuICAgICAgICBtYXggPSBTW2kgKiBuICsgZV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBfZWkgPSAwOyBfZWkgPCBleGVtcGxhcnMubGVuZ3RoOyBfZWkrKykge1xuICAgIGNsdXN0ZXJzW2V4ZW1wbGFyc1tfZWldXSA9IGV4ZW1wbGFyc1tfZWldO1xuICB9XG4gIHJldHVybiBjbHVzdGVycztcbn07XG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKG4sIFMsIGV4ZW1wbGFycykge1xuICB2YXIgY2x1c3RlcnMgPSBhc3NpZ25DbHVzdGVycyhuLCBTLCBleGVtcGxhcnMpO1xuICBmb3IgKHZhciBlaSA9IDA7IGVpIDwgZXhlbXBsYXJzLmxlbmd0aDsgZWkrKykge1xuICAgIHZhciBpaSA9IFtdO1xuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2x1c3RlcnMubGVuZ3RoOyBjKyspIHtcbiAgICAgIGlmIChjbHVzdGVyc1tjXSA9PT0gZXhlbXBsYXJzW2VpXSkge1xuICAgICAgICBpaS5wdXNoKGMpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbWF4SSA9IC0xO1xuICAgIHZhciBtYXhTdW0gPSAtSW5maW5pdHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpaS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGlpLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHN1bSArPSBTW2lpW2pdICogbiArIGlpW2ldXTtcbiAgICAgIH1cbiAgICAgIGlmIChzdW0gPiBtYXhTdW0pIHtcbiAgICAgICAgbWF4SSA9IGk7XG4gICAgICAgIG1heFN1bSA9IHN1bTtcbiAgICAgIH1cbiAgICB9XG4gICAgZXhlbXBsYXJzW2VpXSA9IGlpW21heEldO1xuICB9XG4gIGNsdXN0ZXJzID0gYXNzaWduQ2x1c3RlcnMobiwgUywgZXhlbXBsYXJzKTtcbiAgcmV0dXJuIGNsdXN0ZXJzO1xufTtcbnZhciBhZmZpbml0eVByb3BhZ2F0aW9uID0gZnVuY3Rpb24gYWZmaW5pdHlQcm9wYWdhdGlvbihvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgb3B0cyA9IHNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gTWFwIGVhY2ggbm9kZSB0byBpdHMgcG9zaXRpb24gaW4gbm9kZSBhcnJheVxuICB2YXIgaWQycG9zaXRpb24gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlkMnBvc2l0aW9uW25vZGVzW2ldLmlkKCldID0gaTtcbiAgfVxuXG4gIC8vIEJlZ2luIGFmZmluaXR5IHByb3BhZ2F0aW9uIGFsZ29yaXRobVxuXG4gIHZhciBuOyAvLyBudW1iZXIgb2YgZGF0YSBwb2ludHNcbiAgdmFyIG4yOyAvLyBzaXplIG9mIG1hdHJpY2VzXG4gIHZhciBTOyAvLyBzaW1pbGFyaXR5IG1hdHJpeCAoMUQgYXJyYXkpXG4gIHZhciBwOyAvLyBwcmVmZXJlbmNlL3N1aXRhYmlsaXR5IG9mIGEgZGF0YSBwb2ludCB0byBzZXJ2ZSBhcyBhbiBleGVtcGxhclxuICB2YXIgUjsgLy8gcmVzcG9uc2liaWxpdHkgbWF0cml4ICgxRCBhcnJheSlcbiAgdmFyIEE7IC8vIGF2YWlsYWJpbGl0eSBtYXRyaXggKDFEIGFycmF5KVxuXG4gIG4gPSBub2Rlcy5sZW5ndGg7XG4gIG4yID0gbiAqIG47XG5cbiAgLy8gSW5pdGlhbGl6ZSBhbmQgYnVpbGQgUyBzaW1pbGFyaXR5IG1hdHJpeFxuICBTID0gbmV3IEFycmF5KG4yKTtcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG4yOyBfaSsrKSB7XG4gICAgU1tfaV0gPSAtSW5maW5pdHk7IC8vIGZvciBjYXNlcyB3aGVyZSB0d28gZGF0YSBwb2ludHMgc2hvdWxkbid0IGJlIGxpbmtlZCB0b2dldGhlclxuICB9XG5cbiAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbjsgX2kyKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgaWYgKF9pMiAhPT0gaikge1xuICAgICAgICBTW19pMiAqIG4gKyBqXSA9IGdldFNpbWlsYXJpdHkob3B0cy5kaXN0YW5jZSwgbm9kZXNbX2kyXSwgbm9kZXNbal0sIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGxhY2UgcHJlZmVyZW5jZXMgb24gdGhlIGRpYWdvbmFsIG9mIFNcbiAgcCA9IGdldFByZWZlcmVuY2UoUywgb3B0cy5wcmVmZXJlbmNlKTtcbiAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbjsgX2kzKyspIHtcbiAgICBTW19pMyAqIG4gKyBfaTNdID0gcDtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgUiByZXNwb25zaWJpbGl0eSBtYXRyaXhcbiAgUiA9IG5ldyBBcnJheShuMik7XG4gIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG4yOyBfaTQrKykge1xuICAgIFJbX2k0XSA9IDAuMDtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgQSBhdmFpbGFiaWxpdHkgbWF0cml4XG4gIEEgPSBuZXcgQXJyYXkobjIpO1xuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBuMjsgX2k1KyspIHtcbiAgICBBW19pNV0gPSAwLjA7XG4gIH1cbiAgdmFyIG9sZCA9IG5ldyBBcnJheShuKTtcbiAgdmFyIFJwID0gbmV3IEFycmF5KG4pO1xuICB2YXIgc2UgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IG47IF9pNisrKSB7XG4gICAgb2xkW19pNl0gPSAwLjA7XG4gICAgUnBbX2k2XSA9IDAuMDtcbiAgICBzZVtfaTZdID0gMDtcbiAgfVxuICB2YXIgZSA9IG5ldyBBcnJheShuICogb3B0cy5taW5JdGVyYXRpb25zKTtcbiAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgZS5sZW5ndGg7IF9pNysrKSB7XG4gICAgZVtfaTddID0gMDtcbiAgfVxuICB2YXIgaXRlcjtcbiAgZm9yIChpdGVyID0gMDsgaXRlciA8IG9wdHMubWF4SXRlcmF0aW9uczsgaXRlcisrKSB7XG4gICAgLy8gbWFpbiBhbGdvcml0aG1pYyBsb29wXG5cbiAgICAvLyBVcGRhdGUgUiByZXNwb25zaWJpbGl0eSBtYXRyaXhcbiAgICBmb3IgKHZhciBfaTggPSAwOyBfaTggPCBuOyBfaTgrKykge1xuICAgICAgdmFyIG1heCA9IC1JbmZpbml0eSxcbiAgICAgICAgbWF4MiA9IC1JbmZpbml0eSxcbiAgICAgICAgbWF4SSA9IC0xLFxuICAgICAgICBBUyA9IDAuMDtcbiAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBuOyBfaisrKSB7XG4gICAgICAgIG9sZFtfal0gPSBSW19pOCAqIG4gKyBfal07XG4gICAgICAgIEFTID0gQVtfaTggKiBuICsgX2pdICsgU1tfaTggKiBuICsgX2pdO1xuICAgICAgICBpZiAoQVMgPj0gbWF4KSB7XG4gICAgICAgICAgbWF4MiA9IG1heDtcbiAgICAgICAgICBtYXggPSBBUztcbiAgICAgICAgICBtYXhJID0gX2o7XG4gICAgICAgIH0gZWxzZSBpZiAoQVMgPiBtYXgyKSB7XG4gICAgICAgICAgbWF4MiA9IEFTO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBfajIgPSAwOyBfajIgPCBuOyBfajIrKykge1xuICAgICAgICBSW19pOCAqIG4gKyBfajJdID0gKDEgLSBvcHRzLmRhbXBpbmcpICogKFNbX2k4ICogbiArIF9qMl0gLSBtYXgpICsgb3B0cy5kYW1waW5nICogb2xkW19qMl07XG4gICAgICB9XG4gICAgICBSW19pOCAqIG4gKyBtYXhJXSA9ICgxIC0gb3B0cy5kYW1waW5nKSAqIChTW19pOCAqIG4gKyBtYXhJXSAtIG1heDIpICsgb3B0cy5kYW1waW5nICogb2xkW21heEldO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBBIGF2YWlsYWJpbGl0eSBtYXRyaXhcbiAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCBuOyBfaTkrKykge1xuICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICBmb3IgKHZhciBfajMgPSAwOyBfajMgPCBuOyBfajMrKykge1xuICAgICAgICBvbGRbX2ozXSA9IEFbX2ozICogbiArIF9pOV07XG4gICAgICAgIFJwW19qM10gPSBNYXRoLm1heCgwLCBSW19qMyAqIG4gKyBfaTldKTtcbiAgICAgICAgc3VtICs9IFJwW19qM107XG4gICAgICB9XG4gICAgICBzdW0gLT0gUnBbX2k5XTtcbiAgICAgIFJwW19pOV0gPSBSW19pOSAqIG4gKyBfaTldO1xuICAgICAgc3VtICs9IFJwW19pOV07XG4gICAgICBmb3IgKHZhciBfajQgPSAwOyBfajQgPCBuOyBfajQrKykge1xuICAgICAgICBBW19qNCAqIG4gKyBfaTldID0gKDEgLSBvcHRzLmRhbXBpbmcpICogTWF0aC5taW4oMCwgc3VtIC0gUnBbX2o0XSkgKyBvcHRzLmRhbXBpbmcgKiBvbGRbX2o0XTtcbiAgICAgIH1cbiAgICAgIEFbX2k5ICogbiArIF9pOV0gPSAoMSAtIG9wdHMuZGFtcGluZykgKiAoc3VtIC0gUnBbX2k5XSkgKyBvcHRzLmRhbXBpbmcgKiBvbGRbX2k5XTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgY29udmVyZ2VuY2VcbiAgICB2YXIgSyA9IDA7XG4gICAgZm9yICh2YXIgX2kxMCA9IDA7IF9pMTAgPCBuOyBfaTEwKyspIHtcbiAgICAgIHZhciBFID0gQVtfaTEwICogbiArIF9pMTBdICsgUltfaTEwICogbiArIF9pMTBdID4gMCA/IDEgOiAwO1xuICAgICAgZVtpdGVyICUgb3B0cy5taW5JdGVyYXRpb25zICogbiArIF9pMTBdID0gRTtcbiAgICAgIEsgKz0gRTtcbiAgICB9XG4gICAgaWYgKEsgPiAwICYmIChpdGVyID49IG9wdHMubWluSXRlcmF0aW9ucyAtIDEgfHwgaXRlciA9PSBvcHRzLm1heEl0ZXJhdGlvbnMgLSAxKSkge1xuICAgICAgdmFyIF9zdW0gPSAwO1xuICAgICAgZm9yICh2YXIgX2kxMSA9IDA7IF9pMTEgPCBuOyBfaTExKyspIHtcbiAgICAgICAgc2VbX2kxMV0gPSAwO1xuICAgICAgICBmb3IgKHZhciBfajUgPSAwOyBfajUgPCBvcHRzLm1pbkl0ZXJhdGlvbnM7IF9qNSsrKSB7XG4gICAgICAgICAgc2VbX2kxMV0gKz0gZVtfajUgKiBuICsgX2kxMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlW19pMTFdID09PSAwIHx8IHNlW19pMTFdID09PSBvcHRzLm1pbkl0ZXJhdGlvbnMpIHtcbiAgICAgICAgICBfc3VtKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChfc3VtID09PSBuKSB7XG4gICAgICAgIC8vIHRoZW4gd2UgaGF2ZSBjb252ZXJnZW5jZVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZGVudGlmeSBleGVtcGxhcnMgKGNsdXN0ZXIgY2VudGVycylcbiAgdmFyIGV4ZW1wbGFyc0luZGljZXMgPSBmaW5kRXhlbXBsYXJzKG4sIFIsIEEpO1xuXG4gIC8vIEFzc2lnbiBub2RlcyB0byBjbHVzdGVyc1xuICB2YXIgY2x1c3RlckluZGljZXMgPSBhc3NpZ24obiwgUywgZXhlbXBsYXJzSW5kaWNlcyk7XG4gIHZhciBjbHVzdGVycyA9IHt9O1xuICBmb3IgKHZhciBjID0gMDsgYyA8IGV4ZW1wbGFyc0luZGljZXMubGVuZ3RoOyBjKyspIHtcbiAgICBjbHVzdGVyc1tleGVtcGxhcnNJbmRpY2VzW2NdXSA9IFtdO1xuICB9XG4gIGZvciAodmFyIF9pMTIgPSAwOyBfaTEyIDwgbm9kZXMubGVuZ3RoOyBfaTEyKyspIHtcbiAgICB2YXIgcG9zID0gaWQycG9zaXRpb25bbm9kZXNbX2kxMl0uaWQoKV07XG4gICAgdmFyIGNsdXN0ZXJJbmRleCA9IGNsdXN0ZXJJbmRpY2VzW3Bvc107XG4gICAgaWYgKGNsdXN0ZXJJbmRleCAhPSBudWxsKSB7XG4gICAgICAvLyB0aGUgbm9kZSBtYXkgaGF2ZSBub3QgYmVlbiBhc3NpZ25lZCBhIGNsdXN0ZXIgaWYgbm8gdmFsaWQgYXR0cmlidXRlcyB3ZXJlIHNwZWNpZmllZFxuICAgICAgY2x1c3RlcnNbY2x1c3RlckluZGV4XS5wdXNoKG5vZGVzW19pMTJdKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJldENsdXN0ZXJzID0gbmV3IEFycmF5KGV4ZW1wbGFyc0luZGljZXMubGVuZ3RoKTtcbiAgZm9yICh2YXIgX2MgPSAwOyBfYyA8IGV4ZW1wbGFyc0luZGljZXMubGVuZ3RoOyBfYysrKSB7XG4gICAgcmV0Q2x1c3RlcnNbX2NdID0gY3kuY29sbGVjdGlvbihjbHVzdGVyc1tleGVtcGxhcnNJbmRpY2VzW19jXV0pO1xuICB9XG4gIHJldHVybiByZXRDbHVzdGVycztcbn07XG52YXIgYWZmaW5pdHlQcm9wYWdhdGlvbiQxID0ge1xuICBhZmZpbml0eVByb3BhZ2F0aW9uOiBhZmZpbml0eVByb3BhZ2F0aW9uLFxuICBhcDogYWZmaW5pdHlQcm9wYWdhdGlvblxufTtcblxudmFyIGhpZXJob2x6ZXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICByb290OiB1bmRlZmluZWQsXG4gIGRpcmVjdGVkOiBmYWxzZVxufSk7XG52YXIgZWxlc2ZuJGsgPSB7XG4gIGhpZXJob2x6ZXI6IGZ1bmN0aW9uIGhpZXJob2x6ZXIob3B0aW9ucykge1xuICAgIGlmICghcGxhaW5PYmplY3Qob3B0aW9ucykpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgcm9vdDogYXJnc1swXSxcbiAgICAgICAgZGlyZWN0ZWQ6IGFyZ3NbMV1cbiAgICAgIH07XG4gICAgfVxuICAgIHZhciBfaGllcmhvbHplckRlZmF1bHRzID0gaGllcmhvbHplckRlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgcm9vdCA9IF9oaWVyaG9semVyRGVmYXVsdHMucm9vdCxcbiAgICAgIGRpcmVjdGVkID0gX2hpZXJob2x6ZXJEZWZhdWx0cy5kaXJlY3RlZDtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGRmbGFnID0gZmFsc2U7XG4gICAgdmFyIG9kZEluO1xuICAgIHZhciBvZGRPdXQ7XG4gICAgdmFyIHN0YXJ0VmVydGV4O1xuICAgIGlmIChyb290KSBzdGFydFZlcnRleCA9IHN0cmluZyhyb290KSA/IHRoaXMuZmlsdGVyKHJvb3QpWzBdLmlkKCkgOiByb290WzBdLmlkKCk7XG4gICAgdmFyIG5vZGVzID0ge307XG4gICAgdmFyIGVkZ2VzID0ge307XG4gICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgIHZhciBpbmQgPSBlbGUuaW5kZWdyZWUodHJ1ZSk7XG4gICAgICAgICAgdmFyIG91dGQgPSBlbGUub3V0ZGVncmVlKHRydWUpO1xuICAgICAgICAgIHZhciBkMSA9IGluZCAtIG91dGQ7XG4gICAgICAgICAgdmFyIGQyID0gb3V0ZCAtIGluZDtcbiAgICAgICAgICBpZiAoZDEgPT0gMSkge1xuICAgICAgICAgICAgaWYgKG9kZEluKSBkZmxhZyA9IHRydWU7ZWxzZSBvZGRJbiA9IGlkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZDIgPT0gMSkge1xuICAgICAgICAgICAgaWYgKG9kZE91dCkgZGZsYWcgPSB0cnVlO2Vsc2Ugb2RkT3V0ID0gaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChkMiA+IDEgfHwgZDEgPiAxKSB7XG4gICAgICAgICAgICBkZmxhZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGVzW2lkXSA9IFtdO1xuICAgICAgICAgIGVsZS5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmlzRWRnZSgpKSBub2Rlc1tpZF0ucHVzaChlLmlkKCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkZ2VzW2lkXSA9IFt1bmRlZmluZWQsIGVsZS50YXJnZXQoKS5pZCgpXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgICAgdmFyIGQgPSBlbGUuZGVncmVlKHRydWUpO1xuICAgICAgICAgIGlmIChkICUgMikge1xuICAgICAgICAgICAgaWYgKCFvZGRJbikgb2RkSW4gPSBpZDtlbHNlIGlmICghb2RkT3V0KSBvZGRPdXQgPSBpZDtlbHNlIGRmbGFnID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZXNbaWRdID0gW107XG4gICAgICAgICAgZWxlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzW2lkXS5wdXNoKGUuaWQoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRnZXNbaWRdID0gW2VsZS5zb3VyY2UoKS5pZCgpLCBlbGUudGFyZ2V0KCkuaWQoKV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgdHJhaWw6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgaWYgKGRmbGFnKSByZXR1cm4gcmVzdWx0O2Vsc2UgaWYgKG9kZE91dCAmJiBvZGRJbikge1xuICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgIGlmIChzdGFydFZlcnRleCAmJiBvZGRPdXQgIT0gc3RhcnRWZXJ0ZXgpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0VmVydGV4ID0gb2RkT3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXJ0VmVydGV4ICYmIG9kZE91dCAhPSBzdGFydFZlcnRleCAmJiBvZGRJbiAhPSBzdGFydFZlcnRleCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0YXJ0VmVydGV4KSB7XG4gICAgICAgICAgc3RhcnRWZXJ0ZXggPSBvZGRPdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzdGFydFZlcnRleCkgc3RhcnRWZXJ0ZXggPSBlbGVzWzBdLmlkKCk7XG4gICAgfVxuICAgIHZhciB3YWxrID0gZnVuY3Rpb24gd2Fsayh2KSB7XG4gICAgICB2YXIgY3VycmVudE5vZGUgPSB2O1xuICAgICAgdmFyIHN1YnRvdXIgPSBbdl07XG4gICAgICB2YXIgYWRqLCBhZGpUYWlsLCBhZGpIZWFkO1xuICAgICAgd2hpbGUgKG5vZGVzW2N1cnJlbnROb2RlXS5sZW5ndGgpIHtcbiAgICAgICAgYWRqID0gbm9kZXNbY3VycmVudE5vZGVdLnNoaWZ0KCk7XG4gICAgICAgIGFkalRhaWwgPSBlZGdlc1thZGpdWzBdO1xuICAgICAgICBhZGpIZWFkID0gZWRnZXNbYWRqXVsxXTtcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGFkakhlYWQpIHtcbiAgICAgICAgICBub2Rlc1thZGpIZWFkXSA9IG5vZGVzW2FkakhlYWRdLmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUgIT0gYWRqO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN1cnJlbnROb2RlID0gYWRqSGVhZDtcbiAgICAgICAgfSBlbHNlIGlmICghZGlyZWN0ZWQgJiYgY3VycmVudE5vZGUgIT0gYWRqVGFpbCkge1xuICAgICAgICAgIG5vZGVzW2FkalRhaWxdID0gbm9kZXNbYWRqVGFpbF0uZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSAhPSBhZGo7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSBhZGpUYWlsO1xuICAgICAgICB9XG4gICAgICAgIHN1YnRvdXIudW5zaGlmdChhZGopO1xuICAgICAgICBzdWJ0b3VyLnVuc2hpZnQoY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnRvdXI7XG4gICAgfTtcbiAgICB2YXIgdHJhaWwgPSBbXTtcbiAgICB2YXIgc3VidG91ciA9IFtdO1xuICAgIHN1YnRvdXIgPSB3YWxrKHN0YXJ0VmVydGV4KTtcbiAgICB3aGlsZSAoc3VidG91ci5sZW5ndGggIT0gMSkge1xuICAgICAgaWYgKG5vZGVzW3N1YnRvdXJbMF1dLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRyYWlsLnVuc2hpZnQoZWxlcy5nZXRFbGVtZW50QnlJZChzdWJ0b3VyLnNoaWZ0KCkpKTtcbiAgICAgICAgdHJhaWwudW5zaGlmdChlbGVzLmdldEVsZW1lbnRCeUlkKHN1YnRvdXIuc2hpZnQoKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VidG91ciA9IHdhbGsoc3VidG91ci5zaGlmdCgpKS5jb25jYXQoc3VidG91cik7XG4gICAgICB9XG4gICAgfVxuICAgIHRyYWlsLnVuc2hpZnQoZWxlcy5nZXRFbGVtZW50QnlJZChzdWJ0b3VyLnNoaWZ0KCkpKTsgLy8gZmluYWwgbm9kZVxuXG4gICAgZm9yICh2YXIgZCBpbiBub2Rlcykge1xuICAgICAgaWYgKG5vZGVzW2RdLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZm91bmQgPSB0cnVlO1xuICAgIHJlc3VsdC50cmFpbCA9IHRoaXMuc3Bhd24odHJhaWwsIHRydWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbnZhciBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkID0gZnVuY3Rpb24gaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCgpIHtcbiAgdmFyIGVsZXMgPSB0aGlzO1xuICB2YXIgbm9kZXMgPSB7fTtcbiAgdmFyIGlkID0gMDtcbiAgdmFyIGVkZ2VDb3VudCA9IDA7XG4gIHZhciBjb21wb25lbnRzID0gW107XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgdmlzaXRlZEVkZ2VzID0ge307XG4gIHZhciBidWlsZENvbXBvbmVudCA9IGZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50KHgsIHkpIHtcbiAgICB2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgdmFyIGN1dHNldCA9IFtdO1xuICAgIHZhciBjb21wb25lbnQgPSBlbGVzLnNwYXduKCk7XG4gICAgd2hpbGUgKHN0YWNrW2ldLnggIT0geCB8fCBzdGFja1tpXS55ICE9IHkpIHtcbiAgICAgIGN1dHNldC5wdXNoKHN0YWNrLnBvcCgpLmVkZ2UpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBjdXRzZXQucHVzaChzdGFjay5wb3AoKS5lZGdlKTtcbiAgICBjdXRzZXQuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgdmFyIGNvbm5lY3RlZE5vZGVzID0gZWRnZS5jb25uZWN0ZWROb2RlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICAgIGNvbXBvbmVudC5tZXJnZShlZGdlKTtcbiAgICAgIGNvbm5lY3RlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGUuaWQoKTtcbiAgICAgICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICAgICAgY29tcG9uZW50Lm1lcmdlKG5vZGUpO1xuICAgICAgICBpZiAoIW5vZGVzW25vZGVJZF0uY3V0VmVydGV4KSB7XG4gICAgICAgICAgY29tcG9uZW50Lm1lcmdlKGNvbm5lY3RlZEVkZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wb25lbnQubWVyZ2UoY29ubmVjdGVkRWRnZXMuZmlsdGVyKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWRnZS5pc0xvb3AoKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICB9O1xuICB2YXIgYmljb25uZWN0ZWRTZWFyY2ggPSBmdW5jdGlvbiBiaWNvbm5lY3RlZFNlYXJjaChyb290LCBjdXJyZW50Tm9kZSwgcGFyZW50KSB7XG4gICAgaWYgKHJvb3QgPT09IHBhcmVudCkgZWRnZUNvdW50ICs9IDE7XG4gICAgbm9kZXNbY3VycmVudE5vZGVdID0ge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbG93OiBpZCsrLFxuICAgICAgY3V0VmVydGV4OiBmYWxzZVxuICAgIH07XG4gICAgdmFyIGVkZ2VzID0gZWxlcy5nZXRFbGVtZW50QnlJZChjdXJyZW50Tm9kZSkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZWxlcyk7XG4gICAgaWYgKGVkZ2VzLnNpemUoKSA9PT0gMCkge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGVsZXMuc3Bhd24oZWxlcy5nZXRFbGVtZW50QnlJZChjdXJyZW50Tm9kZSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNvdXJjZUlkLCB0YXJnZXRJZCwgb3RoZXJOb2RlSWQsIGVkZ2VJZDtcbiAgICAgIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgc291cmNlSWQgPSBlZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICAgIHRhcmdldElkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgICBvdGhlck5vZGVJZCA9IHNvdXJjZUlkID09PSBjdXJyZW50Tm9kZSA/IHRhcmdldElkIDogc291cmNlSWQ7XG4gICAgICAgIGlmIChvdGhlck5vZGVJZCAhPT0gcGFyZW50KSB7XG4gICAgICAgICAgZWRnZUlkID0gZWRnZS5pZCgpO1xuICAgICAgICAgIGlmICghdmlzaXRlZEVkZ2VzW2VkZ2VJZF0pIHtcbiAgICAgICAgICAgIHZpc2l0ZWRFZGdlc1tlZGdlSWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICB4OiBjdXJyZW50Tm9kZSxcbiAgICAgICAgICAgICAgeTogb3RoZXJOb2RlSWQsXG4gICAgICAgICAgICAgIGVkZ2U6IGVkZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShvdGhlck5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICAgIGJpY29ubmVjdGVkU2VhcmNoKHJvb3QsIG90aGVyTm9kZUlkLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBub2Rlc1tjdXJyZW50Tm9kZV0ubG93ID0gTWF0aC5taW4obm9kZXNbY3VycmVudE5vZGVdLmxvdywgbm9kZXNbb3RoZXJOb2RlSWRdLmxvdyk7XG4gICAgICAgICAgICBpZiAobm9kZXNbY3VycmVudE5vZGVdLmlkIDw9IG5vZGVzW290aGVyTm9kZUlkXS5sb3cpIHtcbiAgICAgICAgICAgICAgbm9kZXNbY3VycmVudE5vZGVdLmN1dFZlcnRleCA9IHRydWU7XG4gICAgICAgICAgICAgIGJ1aWxkQ29tcG9uZW50KGN1cnJlbnROb2RlLCBvdGhlck5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzW2N1cnJlbnROb2RlXS5sb3cgPSBNYXRoLm1pbihub2Rlc1tjdXJyZW50Tm9kZV0ubG93LCBub2Rlc1tvdGhlck5vZGVJZF0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgIHZhciBub2RlSWQgPSBlbGUuaWQoKTtcbiAgICAgIGlmICghKG5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgZWRnZUNvdW50ID0gMDtcbiAgICAgICAgYmljb25uZWN0ZWRTZWFyY2gobm9kZUlkLCBub2RlSWQpO1xuICAgICAgICBub2Rlc1tub2RlSWRdLmN1dFZlcnRleCA9IGVkZ2VDb3VudCA+IDE7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIGN1dFZlcnRpY2VzID0gT2JqZWN0LmtleXMobm9kZXMpLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gbm9kZXNbaWRdLmN1dFZlcnRleDtcbiAgfSkubWFwKGZ1bmN0aW9uIChpZCkge1xuICAgIHJldHVybiBlbGVzLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY3V0OiBlbGVzLnNwYXduKGN1dFZlcnRpY2VzKSxcbiAgICBjb21wb25lbnRzOiBjb21wb25lbnRzXG4gIH07XG59O1xudmFyIGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQkMSA9IHtcbiAgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZDogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCxcbiAgaHRiYzogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCxcbiAgaHRiOiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkLFxuICBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkQ29tcG9uZW50czogaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZFxufTtcblxudmFyIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkID0gZnVuY3Rpb24gdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQoKSB7XG4gIHZhciBlbGVzID0gdGhpcztcbiAgdmFyIG5vZGVzID0ge307XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBjb21wb25lbnRzID0gW107XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgY3V0ID0gZWxlcy5zcGF3bihlbGVzKTtcbiAgdmFyIHN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoID0gZnVuY3Rpb24gc3Ryb25nbHlDb25uZWN0ZWRTZWFyY2goc291cmNlTm9kZUlkKSB7XG4gICAgc3RhY2sucHVzaChzb3VyY2VOb2RlSWQpO1xuICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0gPSB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBsb3c6IGluZGV4KyssXG4gICAgICBleHBsb3JlZDogZmFsc2VcbiAgICB9O1xuICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IGVsZXMuZ2V0RWxlbWVudEJ5SWQoc291cmNlTm9kZUlkKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICBjb25uZWN0ZWRFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICB2YXIgdGFyZ2V0Tm9kZUlkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgaWYgKHRhcmdldE5vZGVJZCAhPT0gc291cmNlTm9kZUlkKSB7XG4gICAgICAgIGlmICghKHRhcmdldE5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICBzdHJvbmdseUNvbm5lY3RlZFNlYXJjaCh0YXJnZXROb2RlSWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbm9kZXNbdGFyZ2V0Tm9kZUlkXS5leHBsb3JlZCkge1xuICAgICAgICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0ubG93ID0gTWF0aC5taW4obm9kZXNbc291cmNlTm9kZUlkXS5sb3csIG5vZGVzW3RhcmdldE5vZGVJZF0ubG93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChub2Rlc1tzb3VyY2VOb2RlSWRdLmluZGV4ID09PSBub2Rlc1tzb3VyY2VOb2RlSWRdLmxvdykge1xuICAgICAgdmFyIGNvbXBvbmVudE5vZGVzID0gZWxlcy5zcGF3bigpO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICB2YXIgbm9kZUlkID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbXBvbmVudE5vZGVzLm1lcmdlKGVsZXMuZ2V0RWxlbWVudEJ5SWQobm9kZUlkKSk7XG4gICAgICAgIG5vZGVzW25vZGVJZF0ubG93ID0gbm9kZXNbc291cmNlTm9kZUlkXS5pbmRleDtcbiAgICAgICAgbm9kZXNbbm9kZUlkXS5leHBsb3JlZCA9IHRydWU7XG4gICAgICAgIGlmIChub2RlSWQgPT09IHNvdXJjZU5vZGVJZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY29tcG9uZW50RWRnZXMgPSBjb21wb25lbnROb2Rlcy5lZGdlc1dpdGgoY29tcG9uZW50Tm9kZXMpO1xuICAgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudE5vZGVzLm1lcmdlKGNvbXBvbmVudEVkZ2VzKTtcbiAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgY3V0ID0gY3V0LmRpZmZlcmVuY2UoY29tcG9uZW50KTtcbiAgICB9XG4gIH07XG4gIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgdmFyIG5vZGVJZCA9IGVsZS5pZCgpO1xuICAgICAgaWYgKCEobm9kZUlkIGluIG5vZGVzKSkge1xuICAgICAgICBzdHJvbmdseUNvbm5lY3RlZFNlYXJjaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY3V0OiBjdXQsXG4gICAgY29tcG9uZW50czogY29tcG9uZW50c1xuICB9O1xufTtcbnZhciB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCQxID0ge1xuICB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZDogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQsXG4gIHRzYzogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQsXG4gIHRzY2M6IHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkLFxuICB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHM6IHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkXG59O1xuXG52YXIgZWxlc2ZuJGogPSB7fTtcbltlbGVzZm4kdiwgZWxlc2ZuJHUsIGVsZXNmbiR0LCBlbGVzZm4kcywgZWxlc2ZuJHIsIGVsZXNmbiRxLCBlbGVzZm4kcCwgZWxlc2ZuJG8sIGVsZXNmbiRuLCBlbGVzZm4kbSwgZWxlc2ZuJGwsIG1hcmtvdkNsdXN0ZXJpbmckMSwga0NsdXN0ZXJpbmcsIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmckMSwgYWZmaW5pdHlQcm9wYWdhdGlvbiQxLCBlbGVzZm4kaywgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCQxLCB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoZWxlc2ZuJGosIHByb3BzKTtcbn0pO1xuXG4vKiFcbkVtYmVkZGFibGUgTWluaW11bSBTdHJpY3RseS1Db21wbGlhbnQgUHJvbWlzZXMvQSsgMS4xLjEgVGhlbmFibGVcbkNvcHlyaWdodCAoYykgMjAxMy0yMDE0IFJhbGYgUy4gRW5nZWxzY2hhbGwgKGh0dHA6Ly9lbmdlbHNjaGFsbC5jb20pXG5MaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpXG4qL1xuXG4vKiAgcHJvbWlzZSBzdGF0ZXMgW1Byb21pc2VzL0ErIDIuMV0gICovXG52YXIgU1RBVEVfUEVORElORyA9IDA7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjFdICAqL1xudmFyIFNUQVRFX0ZVTEZJTExFRCA9IDE7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjJdICAqL1xudmFyIFNUQVRFX1JFSkVDVEVEID0gMjsgLyogIFtQcm9taXNlcy9BKyAyLjEuM10gICovXG5cbi8qICBwcm9taXNlIG9iamVjdCBjb25zdHJ1Y3RvciAgKi9cbnZhciBhcGkgPSBmdW5jdGlvbiBhcGkoZXhlY3V0b3IpIHtcbiAgLyogIG9wdGlvbmFsbHkgc3VwcG9ydCBub24tY29uc3RydWN0b3IvcGxhaW4tZnVuY3Rpb24gY2FsbCAgKi9cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGFwaSkpIHJldHVybiBuZXcgYXBpKGV4ZWN1dG9yKTtcblxuICAvKiAgaW5pdGlhbGl6ZSBvYmplY3QgICovXG4gIHRoaXMuaWQgPSAnVGhlbmFibGUvMS4wLjcnO1xuICB0aGlzLnN0YXRlID0gU1RBVEVfUEVORElORzsgLyogIGluaXRpYWwgc3RhdGUgICovXG4gIHRoaXMuZnVsZmlsbFZhbHVlID0gdW5kZWZpbmVkOyAvKiAgaW5pdGlhbCB2YWx1ZSAgKi8gLyogIFtQcm9taXNlcy9BKyAxLjMsIDIuMS4yLjJdICAqL1xuICB0aGlzLnJlamVjdFJlYXNvbiA9IHVuZGVmaW5lZDsgLyogIGluaXRpYWwgcmVhc29uICovIC8qICBbUHJvbWlzZXMvQSsgMS41LCAyLjEuMy4yXSAgKi9cbiAgdGhpcy5vbkZ1bGZpbGxlZCA9IFtdOyAvKiAgaW5pdGlhbCBoYW5kbGVycyAgKi9cbiAgdGhpcy5vblJlamVjdGVkID0gW107IC8qICBpbml0aWFsIGhhbmRsZXJzICAqL1xuXG4gIC8qICBwcm92aWRlIG9wdGlvbmFsIGluZm9ybWF0aW9uLWhpZGluZyBwcm94eSAgKi9cbiAgdGhpcy5wcm94eSA9IHtcbiAgICB0aGVuOiB0aGlzLnRoZW4uYmluZCh0aGlzKVxuICB9O1xuXG4gIC8qICBzdXBwb3J0IG9wdGlvbmFsIGV4ZWN1dG9yIGZ1bmN0aW9uICAqL1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yID09PSAnZnVuY3Rpb24nKSBleGVjdXRvci5jYWxsKHRoaXMsIHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLCB0aGlzLnJlamVjdC5iaW5kKHRoaXMpKTtcbn07XG5cbi8qICBwcm9taXNlIEFQSSBtZXRob2RzICAqL1xuYXBpLnByb3RvdHlwZSA9IHtcbiAgLyogIHByb21pc2UgcmVzb2x2aW5nIG1ldGhvZHMgICovXG4gIGZ1bGZpbGw6IGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHtcbiAgICByZXR1cm4gZGVsaXZlcih0aGlzLCBTVEFURV9GVUxGSUxMRUQsICdmdWxmaWxsVmFsdWUnLCB2YWx1ZSk7XG4gIH0sXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXIodGhpcywgU1RBVEVfUkVKRUNURUQsICdyZWplY3RSZWFzb24nLCB2YWx1ZSk7XG4gIH0sXG4gIC8qICBcIlRoZSB0aGVuIE1ldGhvZFwiIFtQcm9taXNlcy9BKyAxLjEsIDEuMiwgMi4yXSAgKi9cbiAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBjdXJyID0gdGhpcztcbiAgICB2YXIgbmV4dCA9IG5ldyBhcGkoKTsgLyogIFtQcm9taXNlcy9BKyAyLjIuN10gICovXG4gICAgY3Vyci5vbkZ1bGZpbGxlZC5wdXNoKHJlc29sdmVyKG9uRnVsZmlsbGVkLCBuZXh0LCAnZnVsZmlsbCcpKTsgLyogIFtQcm9taXNlcy9BKyAyLjIuMi8yLjIuNl0gICovXG4gICAgY3Vyci5vblJlamVjdGVkLnB1c2gocmVzb2x2ZXIob25SZWplY3RlZCwgbmV4dCwgJ3JlamVjdCcpKTsgLyogIFtQcm9taXNlcy9BKyAyLjIuMy8yLjIuNl0gICovXG4gICAgZXhlY3V0ZShjdXJyKTtcbiAgICByZXR1cm4gbmV4dC5wcm94eTsgLyogIFtQcm9taXNlcy9BKyAyLjIuNywgMy4zXSAgKi9cbiAgfVxufTtcblxuLyogIGRlbGl2ZXIgYW4gYWN0aW9uICAqL1xudmFyIGRlbGl2ZXIgPSBmdW5jdGlvbiBkZWxpdmVyKGN1cnIsIHN0YXRlLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAoY3Vyci5zdGF0ZSA9PT0gU1RBVEVfUEVORElORykge1xuICAgIGN1cnIuc3RhdGUgPSBzdGF0ZTsgLyogIFtQcm9taXNlcy9BKyAyLjEuMi4xLCAyLjEuMy4xXSAgKi9cbiAgICBjdXJyW25hbWVdID0gdmFsdWU7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjIuMiwgMi4xLjMuMl0gICovXG4gICAgZXhlY3V0ZShjdXJyKTtcbiAgfVxuICByZXR1cm4gY3Vycjtcbn07XG5cbi8qICBleGVjdXRlIGFsbCBoYW5kbGVycyAgKi9cbnZhciBleGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZShjdXJyKSB7XG4gIGlmIChjdXJyLnN0YXRlID09PSBTVEFURV9GVUxGSUxMRUQpIGV4ZWN1dGVfaGFuZGxlcnMoY3VyciwgJ29uRnVsZmlsbGVkJywgY3Vyci5mdWxmaWxsVmFsdWUpO2Vsc2UgaWYgKGN1cnIuc3RhdGUgPT09IFNUQVRFX1JFSkVDVEVEKSBleGVjdXRlX2hhbmRsZXJzKGN1cnIsICdvblJlamVjdGVkJywgY3Vyci5yZWplY3RSZWFzb24pO1xufTtcblxuLyogIGV4ZWN1dGUgcGFydGljdWxhciBzZXQgb2YgaGFuZGxlcnMgICovXG52YXIgZXhlY3V0ZV9oYW5kbGVycyA9IGZ1bmN0aW9uIGV4ZWN1dGVfaGFuZGxlcnMoY3VyciwgbmFtZSwgdmFsdWUpIHtcbiAgLyogZ2xvYmFsIHNldEltbWVkaWF0ZTogdHJ1ZSAqL1xuICAvKiBnbG9iYWwgc2V0VGltZW91dDogdHJ1ZSAqL1xuXG4gIC8qICBzaG9ydC1jaXJjdWl0IHByb2Nlc3NpbmcgICovXG4gIGlmIChjdXJyW25hbWVdLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIC8qICBpdGVyYXRlIG92ZXIgYWxsIGhhbmRsZXJzLCBleGFjdGx5IG9uY2UgICovXG4gIHZhciBoYW5kbGVycyA9IGN1cnJbbmFtZV07XG4gIGN1cnJbbmFtZV0gPSBbXTsgLyogIFtQcm9taXNlcy9BKyAyLjIuMi4zLCAyLjIuMy4zXSAgKi9cbiAgdmFyIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXJzW2ldKHZhbHVlKTtcbiAgICB9IC8qICBbUHJvbWlzZXMvQSsgMi4yLjVdICAqL1xuICB9O1xuXG4gIC8qICBleGVjdXRlIHByb2NlZHVyZSBhc3luY2hyb25vdXNseSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjIuNCwgMy4xXSAgKi9cbiAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHNldEltbWVkaWF0ZShmdW5jKTtlbHNlIHNldFRpbWVvdXQoZnVuYywgMCk7XG59O1xuXG4vKiAgZ2VuZXJhdGUgYSByZXNvbHZlciBmdW5jdGlvbiAgKi9cbnZhciByZXNvbHZlciA9IGZ1bmN0aW9uIHJlc29sdmVyKGNiLCBuZXh0LCBtZXRob2QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIC8qICBbUHJvbWlzZXMvQSsgMi4yLjEsIDIuMi43LjMsIDIuMi43LjRdICAqL1xuICAgICAgbmV4dFttZXRob2RdLmNhbGwobmV4dCwgdmFsdWUpOyAvKiAgW1Byb21pc2VzL0ErIDIuMi43LjMsIDIuMi43LjRdICAqL2Vsc2Uge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNiKHZhbHVlKTtcbiAgICAgIH0gLyogIFtQcm9taXNlcy9BKyAyLjIuMi4xLCAyLjIuMy4xLCAyLjIuNSwgMy4yXSAgKi8gY2F0Y2ggKGUpIHtcbiAgICAgICAgbmV4dC5yZWplY3QoZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjcuMl0gICovXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobmV4dCwgcmVzdWx0KTsgLyogIFtQcm9taXNlcy9BKyAyLjIuNy4xXSAgKi9cbiAgICB9XG4gIH07XG59O1xuXG4vKiAgXCJQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlXCIgICovIC8qICBbUHJvbWlzZXMvQSsgMi4zXSAgKi9cbnZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShwcm9taXNlLCB4KSB7XG4gIC8qICBzYW5pdHkgY2hlY2sgYXJndW1lbnRzICAqLyAvKiAgW1Byb21pc2VzL0ErIDIuMy4xXSAgKi9cbiAgaWYgKHByb21pc2UgPT09IHggfHwgcHJvbWlzZS5wcm94eSA9PT0geCkge1xuICAgIHByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGYnKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyogIHN1cmdpY2FsbHkgY2hlY2sgZm9yIGEgXCJ0aGVuXCIgbWV0aG9kXG4gICAgKG1haW5seSB0byBqdXN0IGNhbGwgdGhlIFwiZ2V0dGVyXCIgb2YgXCJ0aGVuXCIgb25seSBvbmNlKSAgKi9cbiAgdmFyIHRoZW47XG4gIGlmIChfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoZW4gPSB4LnRoZW47XG4gICAgfSAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjEsIDMuNV0gICovIGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnJlamVjdChlKTsgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4yXSAgKi9cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiAgaGFuZGxlIG93biBUaGVuYWJsZXMgICAgW1Byb21pc2VzL0ErIDIuMy4yXVxuICAgIGFuZCBzaW1pbGFyIFwidGhlbmFibGVzXCIgW1Byb21pc2VzL0ErIDIuMy4zXSAgKi9cbiAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc29sdmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIC8qICBjYWxsIHJldHJpZXZlZCBcInRoZW5cIiBtZXRob2QgKi8gLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zXSAgKi9cbiAgICAgIHRoZW4uY2FsbCh4LCAvKiAgcmVzb2x2ZVByb21pc2UgICovIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4xXSAgKi9cbiAgICAgIGZ1bmN0aW9uICh5KSB7XG4gICAgICAgIGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICByZXNvbHZlZCA9IHRydWU7IC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cbiAgICAgICAgaWYgKHkgPT09IHgpIC8qICBbUHJvbWlzZXMvQSsgMy42XSAgKi9cbiAgICAgICAgICBwcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdjaXJjdWxhciB0aGVuYWJsZSBjaGFpbicpKTtlbHNlIHJlc29sdmUocHJvbWlzZSwgeSk7XG4gICAgICB9LCAvKiAgcmVqZWN0UHJvbWlzZSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjJdICAqL1xuICAgICAgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm47XG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZTsgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjNdICAqL1xuICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghcmVzb2x2ZWQpIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cbiAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy40XSAgKi9cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvKiAgaGFuZGxlIG90aGVyIHZhbHVlcyAgKi9cbiAgcHJvbWlzZS5mdWxmaWxsKHgpOyAvKiAgW1Byb21pc2VzL0ErIDIuMy40LCAyLjMuMy40XSAgKi9cbn07XG5cbi8vIHNvIHdlIGFsd2F5cyBoYXZlIFByb21pc2UuYWxsKClcbmFwaS5hbGwgPSBmdW5jdGlvbiAocHMpIHtcbiAgcmV0dXJuIG5ldyBhcGkoZnVuY3Rpb24gKHJlc29sdmVBbGwsIHJlamVjdEFsbCkge1xuICAgIHZhciB2YWxzID0gbmV3IEFycmF5KHBzLmxlbmd0aCk7XG4gICAgdmFyIGRvbmVDb3VudCA9IDA7XG4gICAgdmFyIGZ1bGZpbGwgPSBmdW5jdGlvbiBmdWxmaWxsKGksIHZhbCkge1xuICAgICAgdmFsc1tpXSA9IHZhbDtcbiAgICAgIGRvbmVDb3VudCsrO1xuICAgICAgaWYgKGRvbmVDb3VudCA9PT0gcHMubGVuZ3RoKSB7XG4gICAgICAgIHJlc29sdmVBbGwodmFscyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIHAgPSBwc1tpXTtcbiAgICAgICAgdmFyIGlzUHJvbWlzZSA9IHAgIT0gbnVsbCAmJiBwLnRoZW4gIT0gbnVsbDtcbiAgICAgICAgaWYgKGlzUHJvbWlzZSkge1xuICAgICAgICAgIHAudGhlbihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBmdWxmaWxsKGksIHZhbCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmVqZWN0QWxsKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHA7XG4gICAgICAgICAgZnVsZmlsbChpLCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KShpKTtcbiAgICB9XG4gIH0pO1xufTtcbmFwaS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gbmV3IGFwaShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzb2x2ZSh2YWwpO1xuICB9KTtcbn07XG5hcGkucmVqZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gbmV3IGFwaShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVqZWN0KHZhbCk7XG4gIH0pO1xufTtcbnZhciBQcm9taXNlJDEgPSB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgPyBQcm9taXNlIDogYXBpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbnZhciBBbmltYXRpb24gPSBmdW5jdGlvbiBBbmltYXRpb24odGFyZ2V0LCBvcHRzLCBvcHRzMikge1xuICB2YXIgaXNDb3JlID0gY29yZSh0YXJnZXQpO1xuICB2YXIgaXNFbGUgPSAhaXNDb3JlO1xuICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0gZXh0ZW5kKHtcbiAgICBkdXJhdGlvbjogMTAwMFxuICB9LCBvcHRzLCBvcHRzMik7XG4gIF9wLnRhcmdldCA9IHRhcmdldDtcbiAgX3Auc3R5bGUgPSBfcC5zdHlsZSB8fCBfcC5jc3M7XG4gIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgX3AucGxheWluZyA9IGZhbHNlO1xuICBfcC5ob29rZWQgPSBmYWxzZTtcbiAgX3AuYXBwbHlpbmcgPSBmYWxzZTtcbiAgX3AucHJvZ3Jlc3MgPSAwO1xuICBfcC5jb21wbGV0ZXMgPSBbXTtcbiAgX3AuZnJhbWVzID0gW107XG4gIGlmIChfcC5jb21wbGV0ZSAmJiBmbiQ2KF9wLmNvbXBsZXRlKSkge1xuICAgIF9wLmNvbXBsZXRlcy5wdXNoKF9wLmNvbXBsZXRlKTtcbiAgfVxuICBpZiAoaXNFbGUpIHtcbiAgICB2YXIgcG9zID0gdGFyZ2V0LnBvc2l0aW9uKCk7XG4gICAgX3Auc3RhcnRQb3NpdGlvbiA9IF9wLnN0YXJ0UG9zaXRpb24gfHwge1xuICAgICAgeDogcG9zLngsXG4gICAgICB5OiBwb3MueVxuICAgIH07XG4gICAgX3Auc3RhcnRTdHlsZSA9IF9wLnN0YXJ0U3R5bGUgfHwgdGFyZ2V0LmN5KCkuc3R5bGUoKS5nZXRBbmltYXRpb25TdGFydFN0eWxlKHRhcmdldCwgX3Auc3R5bGUpO1xuICB9XG4gIGlmIChpc0NvcmUpIHtcbiAgICB2YXIgcGFuID0gdGFyZ2V0LnBhbigpO1xuICAgIF9wLnN0YXJ0UGFuID0ge1xuICAgICAgeDogcGFuLngsXG4gICAgICB5OiBwYW4ueVxuICAgIH07XG4gICAgX3Auc3RhcnRab29tID0gdGFyZ2V0Lnpvb20oKTtcbiAgfVxuXG4gIC8vIGZvciBmdXR1cmUgdGltZWxpbmUvYW5pbWF0aW9ucyBpbXBsXG4gIHRoaXMubGVuZ3RoID0gMTtcbiAgdGhpc1swXSA9IHRoaXM7XG59O1xudmFyIGFuaWZuID0gQW5pbWF0aW9uLnByb3RvdHlwZTtcbmV4dGVuZChhbmlmbiwge1xuICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgcmV0dXJuICdhbmltYXRpb24nO1xuICB9LFxuICBob29rOiBmdW5jdGlvbiBob29rKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5ob29rZWQpIHtcbiAgICAgIC8vIGFkZCB0byB0YXJnZXQncyBhbmltYXRpb24gcXVldWVcbiAgICAgIHZhciBxO1xuICAgICAgdmFyIHRBbmkgPSBfcC50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO1xuICAgICAgaWYgKF9wLnF1ZXVlKSB7XG4gICAgICAgIHEgPSB0QW5pLnF1ZXVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcSA9IHRBbmkuY3VycmVudDtcbiAgICAgIH1cbiAgICAgIHEucHVzaCh0aGlzKTtcblxuICAgICAgLy8gYWRkIHRvIHRoZSBhbmltYXRpb24gbG9vcCBwb29sXG4gICAgICBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihfcC50YXJnZXQpKSB7XG4gICAgICAgIF9wLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChfcC50YXJnZXQpO1xuICAgICAgfVxuICAgICAgX3AuaG9va2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBsYXk6IGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcblxuICAgIC8vIGF1dG9yZXdpbmRcbiAgICBpZiAoX3AucHJvZ3Jlc3MgPT09IDEpIHtcbiAgICAgIF9wLnByb2dyZXNzID0gMDtcbiAgICB9XG4gICAgX3AucGxheWluZyA9IHRydWU7XG4gICAgX3Auc3RhcnRlZCA9IGZhbHNlOyAvLyBuZWVkcyB0byBiZSBzdGFydGVkIGJ5IGFuaW1hdGlvbiBsb29wXG4gICAgX3Auc3RvcHBlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG9vaygpO1xuXG4gICAgLy8gdGhlIGFuaW1hdGlvbiBsb29wIHdpbGwgc3RhcnQgdGhlIGFuaW1hdGlvbi4uLlxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBsYXlpbmc6IGZ1bmN0aW9uIHBsYXlpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZztcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgX3AuYXBwbHlpbmcgPSB0cnVlO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTsgLy8gbmVlZHMgdG8gYmUgc3RhcnRlZCBieSBhbmltYXRpb24gbG9vcFxuICAgIF9wLnN0b3BwZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvb2soKTtcblxuICAgIC8vIHRoZSBhbmltYXRpb24gbG9vcCB3aWxsIGFwcGx5IHRoZSBhbmltYXRpb24gYXQgdGhpcyBwcm9ncmVzc1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGFwcGx5aW5nOiBmdW5jdGlvbiBhcHBseWluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZztcbiAgfSxcbiAgcGF1c2U6IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgX3AucGxheWluZyA9IGZhbHNlO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIF9wLnBsYXlpbmcgPSBmYWxzZTtcbiAgICBfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgX3Auc3RvcHBlZCA9IHRydWU7IC8vIHRvIGJlIHJlbW92ZWQgZnJvbSBhbmltYXRpb24gcXVldWVzXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmV3aW5kOiBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCk7XG4gIH0sXG4gIGZhc3Rmb3J3YXJkOiBmdW5jdGlvbiBmYXN0Zm9yd2FyZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzcygxKTtcbiAgfSxcbiAgdGltZTogZnVuY3Rpb24gdGltZSh0KSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gX3AucHJvZ3Jlc3MgKiBfcC5kdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3ModCAvIF9wLmR1cmF0aW9uKTtcbiAgICB9XG4gIH0sXG4gIHByb2dyZXNzOiBmdW5jdGlvbiBwcm9ncmVzcyhwKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgd2FzUGxheWluZyA9IF9wLnBsYXlpbmc7XG4gICAgaWYgKHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIF9wLnByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAod2FzUGxheWluZykge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgICBfcC5wcm9ncmVzcyA9IHA7XG4gICAgICBfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICBpZiAod2FzUGxheWluZykge1xuICAgICAgICB0aGlzLnBsYXkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvbXBsZXRlZDogZnVuY3Rpb24gY29tcGxldGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnByb2dyZXNzID09PSAxO1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIHdhc1BsYXlpbmcgPSBfcC5wbGF5aW5nO1xuICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICAgIF9wLnByb2dyZXNzID0gMSAtIF9wLnByb2dyZXNzO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB2YXIgc3dhcCA9IGZ1bmN0aW9uIHN3YXAoYSwgYikge1xuICAgICAgdmFyIF9wYSA9IF9wW2FdO1xuICAgICAgaWYgKF9wYSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9wW2FdID0gX3BbYl07XG4gICAgICBfcFtiXSA9IF9wYTtcbiAgICB9O1xuICAgIHN3YXAoJ3pvb20nLCAnc3RhcnRab29tJyk7XG4gICAgc3dhcCgncGFuJywgJ3N0YXJ0UGFuJyk7XG4gICAgc3dhcCgncG9zaXRpb24nLCAnc3RhcnRQb3NpdGlvbicpO1xuXG4gICAgLy8gc3dhcCBzdHlsZXNcbiAgICBpZiAoX3Auc3R5bGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3Auc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBfcC5zdHlsZVtpXTtcbiAgICAgICAgdmFyIG5hbWUgPSBwcm9wLm5hbWU7XG4gICAgICAgIHZhciBzdGFydFN0eWxlUHJvcCA9IF9wLnN0YXJ0U3R5bGVbbmFtZV07XG4gICAgICAgIF9wLnN0YXJ0U3R5bGVbbmFtZV0gPSBwcm9wO1xuICAgICAgICBfcC5zdHlsZVtpXSA9IHN0YXJ0U3R5bGVQcm9wO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAod2FzUGxheWluZykge1xuICAgICAgdGhpcy5wbGF5KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBwcm9taXNlOiBmdW5jdGlvbiBwcm9taXNlKHR5cGUpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBhcnI7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICAgIGFyciA9IF9wLmZyYW1lcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgYXJyID0gX3AuY29tcGxldGVzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhcnIucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcbmFuaWZuLmNvbXBsZXRlID0gYW5pZm4uY29tcGxldGVkO1xuYW5pZm4ucnVuID0gYW5pZm4ucGxheTtcbmFuaWZuLnJ1bm5pbmcgPSBhbmlmbi5wbGF5aW5nO1xuXG52YXIgZGVmaW5lJDMgPSB7XG4gIGFuaW1hdGVkOiBmdW5jdGlvbiBhbmltYXRlZCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYW5pbWF0ZWRJbXBsKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBlbGUgPSBhbGxbMF07XG4gICAgICBpZiAoZWxlKSB7XG4gICAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICAvLyBhbmltYXRlZFxuXG4gIGNsZWFyUXVldWU6IGZ1bmN0aW9uIGNsZWFyUXVldWUoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFyUXVldWVJbXBsKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGFsbFtpXTtcbiAgICAgICAgZWxlLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfSxcbiAgLy8gY2xlYXJRdWV1ZVxuXG4gIGRlbGF5OiBmdW5jdGlvbiBkZWxheSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVsYXlJbXBsKHRpbWUsIGNvbXBsZXRlKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSh7XG4gICAgICAgIGRlbGF5OiB0aW1lLFxuICAgICAgICBkdXJhdGlvbjogdGltZSxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlXG4gICAgICB9KTtcbiAgICB9O1xuICB9LFxuICAvLyBkZWxheVxuXG4gIGRlbGF5QW5pbWF0aW9uOiBmdW5jdGlvbiBkZWxheUFuaW1hdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVsYXlBbmltYXRpb25JbXBsKHRpbWUsIGNvbXBsZXRlKSB7XG4gICAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5IHx8IHRoaXM7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0aW9uKHtcbiAgICAgICAgZGVsYXk6IHRpbWUsXG4gICAgICAgIGR1cmF0aW9uOiB0aW1lLFxuICAgICAgICBjb21wbGV0ZTogY29tcGxldGVcbiAgICAgIH0pO1xuICAgIH07XG4gIH0sXG4gIC8vIGRlbGF5XG5cbiAgYW5pbWF0aW9uOiBmdW5jdGlvbiBhbmltYXRpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGFuaW1hdGlvbkltcGwocHJvcGVydGllcywgcGFyYW1zKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIHZhciBpc0NvcmUgPSAhc2VsZklzQXJyYXlMaWtlO1xuICAgICAgdmFyIGlzRWxlcyA9ICFpc0NvcmU7XG4gICAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgICAgIHByb3BlcnRpZXMgPSBleHRlbmQoe30sIHByb3BlcnRpZXMsIHBhcmFtcyk7XG4gICAgICB2YXIgcHJvcGVydGllc0VtcHR5ID0gT2JqZWN0LmtleXMocHJvcGVydGllcykubGVuZ3RoID09PSAwO1xuICAgICAgaWYgKHByb3BlcnRpZXNFbXB0eSkge1xuICAgICAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihhbGxbMF0sIHByb3BlcnRpZXMpOyAvLyBub3RoaW5nIHRvIGFuaW1hdGVcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnRpZXMuZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wZXJ0aWVzLmR1cmF0aW9uID0gNDAwO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwcm9wZXJ0aWVzLmR1cmF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3Nsb3cnOlxuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSA2MDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zhc3QnOlxuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSAyMDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVzKSB7XG4gICAgICAgIHByb3BlcnRpZXMuc3R5bGUgPSBzdHlsZS5nZXRQcm9wc0xpc3QocHJvcGVydGllcy5zdHlsZSB8fCBwcm9wZXJ0aWVzLmNzcyk7XG4gICAgICAgIHByb3BlcnRpZXMuY3NzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlcyAmJiBwcm9wZXJ0aWVzLnJlbmRlcmVkUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICB2YXIgcnBvcyA9IHByb3BlcnRpZXMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICAgICAgcHJvcGVydGllcy5wb3NpdGlvbiA9IHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uKHJwb3MsIHpvb20sIHBhbik7XG4gICAgICB9XG5cbiAgICAgIC8vIG92ZXJyaWRlIHBhbiB3LyBwYW5CeSBpZiBzZXRcbiAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5wYW5CeSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBwYW5CeSA9IHByb3BlcnRpZXMucGFuQnk7XG4gICAgICAgIHZhciBjeVBhbiA9IGN5LnBhbigpO1xuICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IHtcbiAgICAgICAgICB4OiBjeVBhbi54ICsgcGFuQnkueCxcbiAgICAgICAgICB5OiBjeVBhbi55ICsgcGFuQnkueVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBvdmVycmlkZSBwYW4gdy8gY2VudGVyIGlmIHNldFxuICAgICAgdmFyIGNlbnRlciA9IHByb3BlcnRpZXMuY2VudGVyIHx8IHByb3BlcnRpZXMuY2VudHJlO1xuICAgICAgaWYgKGlzQ29yZSAmJiBjZW50ZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY2VudGVyUGFuID0gY3kuZ2V0Q2VudGVyUGFuKGNlbnRlci5lbGVzLCBwcm9wZXJ0aWVzLnpvb20pO1xuICAgICAgICBpZiAoY2VudGVyUGFuICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IGNlbnRlclBhbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBvdmVycmlkZSBwYW4gJiB6b29tIHcvIGZpdCBpZiBzZXRcbiAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5maXQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgZml0ID0gcHJvcGVydGllcy5maXQ7XG4gICAgICAgIHZhciBmaXRWcCA9IGN5LmdldEZpdFZpZXdwb3J0KGZpdC5lbGVzIHx8IGZpdC5ib3VuZGluZ0JveCwgZml0LnBhZGRpbmcpO1xuICAgICAgICBpZiAoZml0VnAgIT0gbnVsbCkge1xuICAgICAgICAgIHByb3BlcnRpZXMucGFuID0gZml0VnAucGFuO1xuICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IGZpdFZwLnpvb207XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gb3ZlcnJpZGUgem9vbSAoJiBwb3RlbnRpYWxseSBwYW4pIHcvIHpvb20gb2JqIGlmIHNldFxuICAgICAgaWYgKGlzQ29yZSAmJiBwbGFpbk9iamVjdChwcm9wZXJ0aWVzLnpvb20pKSB7XG4gICAgICAgIHZhciB2cCA9IGN5LmdldFpvb21lZFZpZXdwb3J0KHByb3BlcnRpZXMuem9vbSk7XG4gICAgICAgIGlmICh2cCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHZwLnpvb21lZCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy56b29tID0gdnAuem9vbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZwLnBhbm5lZCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5wYW4gPSB2cC5wYW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IG51bGw7IC8vIGFuIGluYXZhbGlkIHpvb20gKGUuZy4gbm8gZGVsdGEpIGdldHMgYXV0b21hdGljYWxseSBkZXN0cm95ZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEFuaW1hdGlvbihhbGxbMF0sIHByb3BlcnRpZXMpO1xuICAgIH07XG4gIH0sXG4gIC8vIGFuaW1hdGVcblxuICBhbmltYXRlOiBmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBhbmltYXRlSW1wbChwcm9wZXJ0aWVzLCBwYXJhbXMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeSB8fCB0aGlzO1xuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IGV4dGVuZCh7fSwgcHJvcGVydGllcywgcGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgLy8gbWFudWFsbHkgaG9vayBhbmQgcnVuIHRoZSBhbmltYXRpb25cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBhbGxbaV07XG4gICAgICAgIHZhciBxdWV1ZSA9IGVsZS5hbmltYXRlZCgpICYmIChwcm9wZXJ0aWVzLnF1ZXVlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydGllcy5xdWV1ZSk7XG4gICAgICAgIHZhciBhbmkgPSBlbGUuYW5pbWF0aW9uKHByb3BlcnRpZXMsIHF1ZXVlID8ge1xuICAgICAgICAgIHF1ZXVlOiB0cnVlXG4gICAgICAgIH0gOiB1bmRlZmluZWQpO1xuICAgICAgICBhbmkucGxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfTtcbiAgfSxcblxuICAvLyBhbmltYXRlXG5cbiAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc3RvcEltcGwoY2xlYXJRdWV1ZSwganVtcFRvRW5kKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICAgIHZhciBhbmlzID0gX3AuYW5pbWF0aW9uLmN1cnJlbnQ7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYW5pcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciBhbmkgPSBhbmlzW2pdO1xuICAgICAgICAgIHZhciBhbmlfcCA9IGFuaS5fcHJpdmF0ZTtcbiAgICAgICAgICBpZiAoanVtcFRvRW5kKSB7XG4gICAgICAgICAgICAvLyBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGxvb3AsIHRoZSBhbmltYXRpb25cbiAgICAgICAgICAgIC8vIHdpbGwgZ28gc3RyYWlnaHQgdG8gdGhlIGVuZCBhbmQgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgYW5pX3AuZHVyYXRpb24gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBxdWV1ZSBvZiBmdXR1cmUgYW5pbWF0aW9uc1xuICAgICAgICBpZiAoY2xlYXJRdWV1ZSkge1xuICAgICAgICAgIF9wLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanVtcFRvRW5kKSB7XG4gICAgICAgICAgX3AuYW5pbWF0aW9uLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3ZSBoYXZlIHRvIG5vdGlmeSAodGhlIGFuaW1hdGlvbiBsb29wIGRvZXNuJ3QgZG8gaXQgZm9yIHVzIG9uIGBzdG9wYClcbiAgICAgIGN5Lm5vdGlmeSgnZHJhdycpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfSAvLyBzdG9wXG59OyAvLyBkZWZpbmVcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBpc0FycmF5XzEgPSBpc0FycmF5O1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheV8xKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbF8xKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG52YXIgX2lzS2V5ID0gaXNLZXk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdF8xKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBfYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbnZhciBpc0Z1bmN0aW9uXzEgPSBpc0Z1bmN0aW9uO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IF9yb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxudmFyIF9jb3JlSnNEYXRhID0gY29yZUpzRGF0YTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhfY29yZUpzRGF0YSAmJiBfY29yZUpzRGF0YS5rZXlzICYmIF9jb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxudmFyIF9pc01hc2tlZCA9IGlzTWFza2VkO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvJDEgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmckMSA9IGZ1bmNQcm90byQxLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmckMS5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxudmFyIF90b1NvdXJjZSA9IHRvU291cmNlO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byQzID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkkMyA9IG9iamVjdFByb3RvJDMuaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSQzKS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdF8xKHZhbHVlKSB8fCBfaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbl8xKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoX3RvU291cmNlKHZhbHVlKSk7XG59XG5cbnZhciBfYmFzZUlzTmF0aXZlID0gYmFzZUlzTmF0aXZlO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZSQxKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG52YXIgX2dldFZhbHVlID0gZ2V0VmFsdWUkMTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IF9nZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBfYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG52YXIgX2dldE5hdGl2ZSA9IGdldE5hdGl2ZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IF9nZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbnZhciBfbmF0aXZlQ3JlYXRlID0gbmF0aXZlQ3JlYXRlO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBfbmF0aXZlQ3JlYXRlID8gX25hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG52YXIgX2hhc2hDbGVhciA9IGhhc2hDbGVhcjtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIF9oYXNoRGVsZXRlID0gaGFzaERlbGV0ZTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEJDEgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byQyID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IG9iamVjdFByb3RvJDIuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChfbmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCQxID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSQyLmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxudmFyIF9oYXNoR2V0ID0gaGFzaEdldDtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvJDEgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gb2JqZWN0UHJvdG8kMS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBfbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5JDEuY2FsbChkYXRhLCBrZXkpO1xufVxuXG52YXIgX2hhc2hIYXMgPSBoYXNoSGFzO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChfbmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbnZhciBfaGFzaFNldCA9IGhhc2hTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBfaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX2hhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IF9oYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gX2hhc2hTZXQ7XG5cbnZhciBfSGFzaCA9IEhhc2g7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxudmFyIF9saXN0Q2FjaGVDbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuXG4vKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxudmFyIGVxXzEgPSBlcTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxXzEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG52YXIgX2Fzc29jSW5kZXhPZiA9IGFzc29jSW5kZXhPZjtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gX2Fzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxudmFyIF9saXN0Q2FjaGVEZWxldGUgPSBsaXN0Q2FjaGVEZWxldGU7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBfYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG52YXIgX2xpc3RDYWNoZUdldCA9IGxpc3RDYWNoZUdldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIF9hc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG52YXIgX2xpc3RDYWNoZUhhcyA9IGxpc3RDYWNoZUhhcztcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IF9hc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxudmFyIF9saXN0Q2FjaGVTZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gX2xpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBfbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBfbGlzdENhY2hlU2V0O1xuXG52YXIgX0xpc3RDYWNoZSA9IExpc3RDYWNoZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCQxID0gX2dldE5hdGl2ZShfcm9vdCwgJ01hcCcpO1xuXG52YXIgX01hcCA9IE1hcCQxO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IF9IYXNoLFxuICAgICdtYXAnOiBuZXcgKF9NYXAgfHwgX0xpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBfSGFzaFxuICB9O1xufVxuXG52YXIgX21hcENhY2hlQ2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbnZhciBfaXNLZXlhYmxlID0gaXNLZXlhYmxlO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gX2lzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG52YXIgX2dldE1hcERhdGEgPSBnZXRNYXBEYXRhO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBfZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBfbWFwQ2FjaGVEZWxldGUgPSBtYXBDYWNoZURlbGV0ZTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gX2dldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxudmFyIF9tYXBDYWNoZUdldCA9IG1hcENhY2hlR2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gX2dldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxudmFyIF9tYXBDYWNoZUhhcyA9IG1hcENhY2hlSGFzO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBfZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG52YXIgX21hcENhY2hlU2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX21hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IF9tYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfbWFwQ2FjaGVTZXQ7XG5cbnZhciBfTWFwQ2FjaGUgPSBNYXBDYWNoZTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgX01hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBfTWFwQ2FjaGU7XG5cbnZhciBtZW1vaXplXzEgPSBtZW1vaXplO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplXzEoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIF9tZW1vaXplQ2FwcGVkID0gbWVtb2l6ZUNhcHBlZDtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBfbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxudmFyIF9zdHJpbmdUb1BhdGggPSBzdHJpbmdUb1BhdGg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnZhciBfYXJyYXlNYXAgPSBhcnJheU1hcDtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkkMSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IF9TeW1ib2wgPyBfU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlfMSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBfYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2xfMSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkkMSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG52YXIgX2Jhc2VUb1N0cmluZyA9IGJhc2VUb1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nJDEodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IF9iYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG52YXIgdG9TdHJpbmdfMSA9IHRvU3RyaW5nJDE7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5XzEodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBfaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogX3N0cmluZ1RvUGF0aCh0b1N0cmluZ18xKHZhbHVlKSk7XG59XG5cbnZhciBfY2FzdFBhdGggPSBjYXN0UGF0aDtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sXzEodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxudmFyIF90b0tleSA9IHRvS2V5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IF9jYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbX3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbnZhciBfYmFzZUdldCA9IGJhc2VHZXQ7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBfYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbnZhciBnZXRfMSA9IGdldDtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gX2dldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX2RlZmluZVByb3BlcnR5KSB7XG4gICAgX2RlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxudmFyIF9iYXNlQXNzaWduVmFsdWUgPSBiYXNlQXNzaWduVmFsdWU7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxXzEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgX2Jhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBfYXNzaWduVmFsdWUgPSBhc3NpZ25WYWx1ZTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG52YXIgX2lzSW5kZXggPSBpc0luZGV4O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICBpZiAoIWlzT2JqZWN0XzEob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cbiAgcGF0aCA9IF9jYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgbmVzdGVkID0gb2JqZWN0O1xuXG4gIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IF90b0tleShwYXRoW2luZGV4XSksXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICB2YXIgb2JqVmFsdWUgPSBuZXN0ZWRba2V5XTtcbiAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXNPYmplY3RfMShvYmpWYWx1ZSlcbiAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgOiAoX2lzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgfVxuICAgIH1cbiAgICBfYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG52YXIgX2Jhc2VTZXQgPSBiYXNlU2V0O1xuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICogaXQncyBjcmVhdGVkLiBBcnJheXMgYXJlIGNyZWF0ZWQgZm9yIG1pc3NpbmcgaW5kZXggcHJvcGVydGllcyB3aGlsZSBvYmplY3RzXG4gKiBhcmUgY3JlYXRlZCBmb3IgYWxsIG90aGVyIG1pc3NpbmcgcHJvcGVydGllcy4gVXNlIGBfLnNldFdpdGhgIHRvIGN1c3RvbWl6ZVxuICogYHBhdGhgIGNyZWF0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLnNldChvYmplY3QsICdhWzBdLmIuYycsIDQpO1xuICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnNldChvYmplY3QsIFsneCcsICcwJywgJ3knLCAneiddLCA1KTtcbiAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IF9iYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xufVxuXG52YXIgc2V0XzEgPSBzZXQ7XG5cbi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG52YXIgX2NvcHlBcnJheSA9IGNvcHlBcnJheTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9QYXRoKCdhLmIuYycpO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gKlxuICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICovXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXlfMSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gX2FycmF5TWFwKHZhbHVlLCBfdG9LZXkpO1xuICB9XG4gIHJldHVybiBpc1N5bWJvbF8xKHZhbHVlKSA/IFt2YWx1ZV0gOiBfY29weUFycmF5KF9zdHJpbmdUb1BhdGgodG9TdHJpbmdfMSh2YWx1ZSkpKTtcbn1cblxudmFyIHRvUGF0aF8xID0gdG9QYXRoO1xuXG52YXIgZGVmaW5lJDIgPSB7XG4gIC8vIGFjY2VzcyBkYXRhIGZpZWxkXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEocGFyYW1zKSB7XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgZmllbGQ6ICdkYXRhJyxcbiAgICAgIGJpbmRpbmdFdmVudDogJ2RhdGEnLFxuICAgICAgYWxsb3dCaW5kaW5nOiBmYWxzZSxcbiAgICAgIGFsbG93U2V0dGluZzogZmFsc2UsXG4gICAgICBhbGxvd0dldHRpbmc6IGZhbHNlLFxuICAgICAgc2V0dGluZ0V2ZW50OiAnZGF0YScsXG4gICAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogZmFsc2UsXG4gICAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgICBpbW11dGFibGVLZXlzOiB7fSxcbiAgICAgIC8vIGtleSA9PiB0cnVlIGlmIGltbXV0YWJsZVxuICAgICAgdXBkYXRlU3R5bGU6IGZhbHNlLFxuICAgICAgYmVmb3JlR2V0OiBmdW5jdGlvbiBiZWZvcmVHZXQoc2VsZikge30sXG4gICAgICBiZWZvcmVTZXQ6IGZ1bmN0aW9uIGJlZm9yZVNldChzZWxmLCBvYmopIHt9LFxuICAgICAgb25TZXQ6IGZ1bmN0aW9uIG9uU2V0KHNlbGYpIHt9LFxuICAgICAgY2FuU2V0OiBmdW5jdGlvbiBjYW5TZXQoc2VsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRhdGFJbXBsKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgcCA9IHBhcmFtcztcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuICAgICAgdmFyIHNpbmdsZSA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGZbMF0gOiBzZWxmO1xuXG4gICAgICAvLyAuZGF0YSgnZm9vJywgLi4uKVxuICAgICAgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgICAgICAvLyBzZXQgb3IgZ2V0IHByb3BlcnR5XG4gICAgICAgIHZhciBpc1BhdGhMaWtlID0gbmFtZS5pbmRleE9mKCcuJykgIT09IC0xOyAvLyB0aGVyZSBtaWdodCBiZSBhIG5vcm1hbCBmaWVsZCB3aXRoIGEgZG90IFxuICAgICAgICB2YXIgcGF0aCA9IGlzUGF0aExpa2UgJiYgdG9QYXRoXzEobmFtZSk7XG5cbiAgICAgICAgLy8gLmRhdGEoJ2ZvbycpXG4gICAgICAgIGlmIChwLmFsbG93R2V0dGluZyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gZ2V0XG5cbiAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICAgIHAuYmVmb3JlR2V0KHNpbmdsZSk7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgcGF0aCBhbmQgYSBmaWVsZCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgaWYgKHBhdGggJiYgc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdW25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0ID0gZ2V0XzEoc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdLCBwYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldCA9IHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXVtuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldDtcblxuICAgICAgICAgIC8vIC5kYXRhKCdmb28nLCAnYmFyJylcbiAgICAgICAgfSBlbHNlIGlmIChwLmFsbG93U2V0dGluZyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gc2V0XG4gICAgICAgICAgdmFyIHZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1tuYW1lXTtcbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBfZGVmaW5lUHJvcGVydHkkMSh7fSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcC5iZWZvcmVTZXQoc2VsZiwgY2hhbmdlKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYWxsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICAgICAgICBpZiAocC5jYW5TZXQoZWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXRoICYmIHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBzZXRfMShlbGUuX3ByaXZhdGVbcC5maWVsZF0sIHBhdGgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWxlLl9wcml2YXRlW3AuZmllbGRdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSBtYXBwZXJzIGlmIGFza2VkXG4gICAgICAgICAgICBpZiAocC51cGRhdGVTdHlsZSkge1xuICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVN0eWxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhbGwgb25TZXQgY2FsbGJhY2tcbiAgICAgICAgICAgIHAub25TZXQoc2VsZik7XG4gICAgICAgICAgICBpZiAocC5zZXR0aW5nVHJpZ2dlcnNFdmVudCkge1xuICAgICAgICAgICAgICBzZWxmW3AudHJpZ2dlckZuTmFtZV0ocC5zZXR0aW5nRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kYXRhKHsgJ2Zvbyc6ICdiYXInIH0pXG4gICAgICB9IGVsc2UgaWYgKHAuYWxsb3dTZXR0aW5nICYmIHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgICAgIC8vIGV4dGVuZFxuICAgICAgICB2YXIgb2JqID0gbmFtZTtcbiAgICAgICAgdmFyIGssIHY7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgcC5iZWZvcmVTZXQoc2VsZiwgb2JqKTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgayA9IGtleXNbX2ldO1xuICAgICAgICAgIHYgPSBvYmpba107XG4gICAgICAgICAgdmFyIF92YWxpZCA9ICFwLmltbXV0YWJsZUtleXNba107XG4gICAgICAgICAgaWYgKF92YWxpZCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbGwubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIF9lbGUgPSBhbGxbal07XG4gICAgICAgICAgICAgIGlmIChwLmNhblNldChfZWxlKSkge1xuICAgICAgICAgICAgICAgIF9lbGUuX3ByaXZhdGVbcC5maWVsZF1ba10gPSB2O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIG1hcHBlcnMgaWYgYXNrZWRcbiAgICAgICAgaWYgKHAudXBkYXRlU3R5bGUpIHtcbiAgICAgICAgICBzZWxmLnVwZGF0ZVN0eWxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjYWxsIG9uU2V0IGNhbGxiYWNrXG4gICAgICAgIHAub25TZXQoc2VsZik7XG4gICAgICAgIGlmIChwLnNldHRpbmdUcmlnZ2Vyc0V2ZW50KSB7XG4gICAgICAgICAgc2VsZltwLnRyaWdnZXJGbk5hbWVdKHAuc2V0dGluZ0V2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kYXRhKGZ1bmN0aW9uKCl7IC4uLiB9KVxuICAgICAgfSBlbHNlIGlmIChwLmFsbG93QmluZGluZyAmJiBmbiQ2KG5hbWUpKSB7XG4gICAgICAgIC8vIGJpbmQgdG8gZXZlbnRcbiAgICAgICAgdmFyIGZuID0gbmFtZTtcbiAgICAgICAgc2VsZi5vbihwLmJpbmRpbmdFdmVudCwgZm4pO1xuXG4gICAgICAgIC8vIC5kYXRhKClcbiAgICAgIH0gZWxzZSBpZiAocC5hbGxvd0dldHRpbmcgJiYgbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGdldCB3aG9sZSBvYmplY3RcbiAgICAgICAgdmFyIF9yZXQ7XG4gICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICBwLmJlZm9yZUdldChzaW5nbGUpO1xuICAgICAgICAgIF9yZXQgPSBzaW5nbGUuX3ByaXZhdGVbcC5maWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZjsgLy8gbWFpbnRhaW4gY2hhaW5hYmlsaXR5XG4gICAgfTsgLy8gZnVuY3Rpb25cbiAgfSxcblxuICAvLyBkYXRhXG5cbiAgLy8gcmVtb3ZlIGRhdGEgZmllbGRcbiAgcmVtb3ZlRGF0YTogZnVuY3Rpb24gcmVtb3ZlRGF0YShwYXJhbXMpIHtcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICBmaWVsZDogJ2RhdGEnLFxuICAgICAgZXZlbnQ6ICdkYXRhJyxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIHRyaWdnZXJFdmVudDogZmFsc2UsXG4gICAgICBpbW11dGFibGVLZXlzOiB7fSAvLyBrZXkgPT4gdHJ1ZSBpZiBpbW11dGFibGVcbiAgICB9O1xuXG4gICAgcGFyYW1zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgcGFyYW1zKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVtb3ZlRGF0YUltcGwobmFtZXMpIHtcbiAgICAgIHZhciBwID0gcGFyYW1zO1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG5cbiAgICAgIC8vIC5yZW1vdmVEYXRhKCdmb28gYmFyJylcbiAgICAgIGlmIChzdHJpbmcobmFtZXMpKSB7XG4gICAgICAgIC8vIHRoZW4gZ2V0IHRoZSBsaXN0IG9mIGtleXMsIGFuZCBkZWxldGUgdGhlbVxuICAgICAgICB2YXIga2V5cyA9IG5hbWVzLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgLy8gZGVsZXRlIGVhY2ggbm9uLWVtcHR5IGtleVxuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChlbXB0eVN0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1trZXldOyAvLyBub3QgdmFsaWQgaWYgaW1tdXRhYmxlXG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpX2EgPSAwLCBsX2EgPSBhbGwubGVuZ3RoOyBpX2EgPCBsX2E7IGlfYSsrKSB7XG4gICAgICAgICAgICAgIGFsbFtpX2FdLl9wcml2YXRlW3AuZmllbGRdW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwLnRyaWdnZXJFdmVudCkge1xuICAgICAgICAgIHNlbGZbcC50cmlnZ2VyRm5OYW1lXShwLmV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5yZW1vdmVEYXRhKClcbiAgICAgIH0gZWxzZSBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB0aGVuIGRlbGV0ZSBhbGwga2V5c1xuXG4gICAgICAgIGZvciAodmFyIF9pX2EgPSAwLCBfbF9hID0gYWxsLmxlbmd0aDsgX2lfYSA8IF9sX2E7IF9pX2ErKykge1xuICAgICAgICAgIHZhciBfcHJpdmF0ZUZpZWxkcyA9IGFsbFtfaV9hXS5fcHJpdmF0ZVtwLmZpZWxkXTtcbiAgICAgICAgICB2YXIgX2tleXMgPSBPYmplY3Qua2V5cyhfcHJpdmF0ZUZpZWxkcyk7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgX2tleXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgICAgdmFyIF9rZXkgPSBfa2V5c1tfaTJdO1xuICAgICAgICAgICAgdmFyIHZhbGlkS2V5VG9EZWxldGUgPSAhcC5pbW11dGFibGVLZXlzW19rZXldO1xuICAgICAgICAgICAgaWYgKHZhbGlkS2V5VG9EZWxldGUpIHtcbiAgICAgICAgICAgICAgX3ByaXZhdGVGaWVsZHNbX2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwLnRyaWdnZXJFdmVudCkge1xuICAgICAgICAgIHNlbGZbcC50cmlnZ2VyRm5OYW1lXShwLmV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGY7IC8vIG1haW50YWluIGNoYWluaW5nXG4gICAgfTsgLy8gZnVuY3Rpb25cbiAgfSAvLyByZW1vdmVEYXRhXG59OyAvLyBkZWZpbmVcblxudmFyIGRlZmluZSQxID0ge1xuICBldmVudEFsaWFzZXNPbjogZnVuY3Rpb24gZXZlbnRBbGlhc2VzT24ocHJvdG8pIHtcbiAgICB2YXIgcCA9IHByb3RvO1xuICAgIHAuYWRkTGlzdGVuZXIgPSBwLmxpc3RlbiA9IHAuYmluZCA9IHAub247XG4gICAgcC51bmxpc3RlbiA9IHAudW5iaW5kID0gcC5vZmYgPSBwLnJlbW92ZUxpc3RlbmVyO1xuICAgIHAudHJpZ2dlciA9IHAuZW1pdDtcblxuICAgIC8vIHRoaXMgaXMganVzdCBhIHdyYXBwZXIgYWxpYXMgb2YgLm9uKClcbiAgICBwLnBvbiA9IHAucHJvbWlzZU9uID0gZnVuY3Rpb24gKGV2ZW50cywgc2VsZWN0b3IpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soZSkge1xuICAgICAgICAgIHNlbGYub2ZmLmFwcGx5KHNlbGYsIG9mZkFyZ3MpO1xuICAgICAgICAgIHJlc29sdmUoZSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbkFyZ3MgPSBhcmdzLmNvbmNhdChbY2FsbGJhY2tdKTtcbiAgICAgICAgdmFyIG9mZkFyZ3MgPSBvbkFyZ3MuY29uY2F0KFtdKTtcbiAgICAgICAgc2VsZi5vbi5hcHBseShzZWxmLCBvbkFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufTsgLy8gZGVmaW5lXG5cbi8vIHVzZSB0aGlzIG1vZHVsZSB0byBjaGVycnkgcGljayBmdW5jdGlvbnMgaW50byB5b3VyIHByb3RvdHlwZVxudmFyIGRlZmluZSA9IHt9O1xuW2RlZmluZSQzLCBkZWZpbmUkMiwgZGVmaW5lJDFdLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgZXh0ZW5kKGRlZmluZSwgbSk7XG59KTtcblxudmFyIGVsZXNmbiRpID0ge1xuICBhbmltYXRlOiBkZWZpbmUuYW5pbWF0ZSgpLFxuICBhbmltYXRpb246IGRlZmluZS5hbmltYXRpb24oKSxcbiAgYW5pbWF0ZWQ6IGRlZmluZS5hbmltYXRlZCgpLFxuICBjbGVhclF1ZXVlOiBkZWZpbmUuY2xlYXJRdWV1ZSgpLFxuICBkZWxheTogZGVmaW5lLmRlbGF5KCksXG4gIGRlbGF5QW5pbWF0aW9uOiBkZWZpbmUuZGVsYXlBbmltYXRpb24oKSxcbiAgc3RvcDogZGVmaW5lLnN0b3AoKVxufTtcblxudmFyIGVsZXNmbiRoID0ge1xuICBjbGFzc2VzOiBmdW5jdGlvbiBjbGFzc2VzKF9jbGFzc2VzKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChfY2xhc3NlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmV0ID0gW107XG4gICAgICBzZWxmWzBdLl9wcml2YXRlLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7XG4gICAgICAgIHJldHVybiByZXQucHVzaChjbHMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSBpZiAoIWFycmF5KF9jbGFzc2VzKSkge1xuICAgICAgLy8gZXh0cmFjdCBjbGFzc2VzIGZyb20gc3RyaW5nXG4gICAgICBfY2xhc3NlcyA9IChfY2xhc3NlcyB8fCAnJykubWF0Y2goL1xcUysvZykgfHwgW107XG4gICAgfVxuICAgIHZhciBjaGFuZ2VkID0gW107XG4gICAgdmFyIGNsYXNzZXNTZXQgPSBuZXcgU2V0JDEoX2NsYXNzZXMpO1xuXG4gICAgLy8gY2hlY2sgYW5kIHVwZGF0ZSBlYWNoIGVsZVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VsZi5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGVsZSA9IHNlbGZbal07XG4gICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICB2YXIgZWxlQ2xhc3NlcyA9IF9wLmNsYXNzZXM7XG4gICAgICB2YXIgY2hhbmdlZEVsZSA9IGZhbHNlO1xuXG4gICAgICAvLyBjaGVjayBpZiBlbGUgaGFzIGFsbCBvZiB0aGUgcGFzc2VkIGNsYXNzZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNscyA9IF9jbGFzc2VzW2ldO1xuICAgICAgICB2YXIgZWxlSGFzQ2xhc3MgPSBlbGVDbGFzc2VzLmhhcyhjbHMpO1xuICAgICAgICBpZiAoIWVsZUhhc0NsYXNzKSB7XG4gICAgICAgICAgY2hhbmdlZEVsZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgaWYgZWxlIGhhcyBjbGFzc2VzIG91dHNpZGUgb2YgdGhvc2UgcGFzc2VkXG4gICAgICBpZiAoIWNoYW5nZWRFbGUpIHtcbiAgICAgICAgY2hhbmdlZEVsZSA9IGVsZUNsYXNzZXMuc2l6ZSAhPT0gX2NsYXNzZXMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZWRFbGUpIHtcbiAgICAgICAgX3AuY2xhc3NlcyA9IGNsYXNzZXNTZXQ7XG4gICAgICAgIGNoYW5nZWQucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyaWdnZXIgdXBkYXRlIHN0eWxlIG9uIHRob3NlIGVsZXMgdGhhdCBoYWQgY2xhc3MgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3Bhd24oY2hhbmdlZCkudXBkYXRlU3R5bGUoKS5lbWl0KCdjbGFzcycpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgYWRkQ2xhc3M6IGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzZXMpIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhjbGFzc2VzLCB0cnVlKTtcbiAgfSxcbiAgaGFzQ2xhc3M6IGZ1bmN0aW9uIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHJldHVybiBlbGUgIT0gbnVsbCAmJiBlbGUuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoY2xhc3NOYW1lKTtcbiAgfSxcbiAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGNsYXNzZXMsIHRvZ2dsZSkge1xuICAgIGlmICghYXJyYXkoY2xhc3NlcykpIHtcbiAgICAgIC8vIGV4dHJhY3QgY2xhc3NlcyBmcm9tIHN0cmluZ1xuICAgICAgY2xhc3NlcyA9IGNsYXNzZXMubWF0Y2goL1xcUysvZykgfHwgW107XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgdG9nZ2xlVW5kZWZkID0gdG9nZ2xlID09PSB1bmRlZmluZWQ7XG4gICAgdmFyIGNoYW5nZWQgPSBbXTsgLy8gZWxlcyB3aG8gaGFkIGNsYXNzZXMgY2hhbmdlZFxuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gc2VsZi5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gc2VsZltpXTtcbiAgICAgIHZhciBlbGVDbGFzc2VzID0gZWxlLl9wcml2YXRlLmNsYXNzZXM7XG4gICAgICB2YXIgY2hhbmdlZEVsZSA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFzc2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBjbHMgPSBjbGFzc2VzW2pdO1xuICAgICAgICB2YXIgaGFzQ2xhc3MgPSBlbGVDbGFzc2VzLmhhcyhjbHMpO1xuICAgICAgICB2YXIgY2hhbmdlZE5vdyA9IGZhbHNlO1xuICAgICAgICBpZiAodG9nZ2xlIHx8IHRvZ2dsZVVuZGVmZCAmJiAhaGFzQ2xhc3MpIHtcbiAgICAgICAgICBlbGVDbGFzc2VzLmFkZChjbHMpO1xuICAgICAgICAgIGNoYW5nZWROb3cgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCF0b2dnbGUgfHwgdG9nZ2xlVW5kZWZkICYmIGhhc0NsYXNzKSB7XG4gICAgICAgICAgZWxlQ2xhc3Nlc1tcImRlbGV0ZVwiXShjbHMpO1xuICAgICAgICAgIGNoYW5nZWROb3cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hhbmdlZEVsZSAmJiBjaGFuZ2VkTm93KSB7XG4gICAgICAgICAgY2hhbmdlZC5wdXNoKGVsZSk7XG4gICAgICAgICAgY2hhbmdlZEVsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yIGogY2xhc3Nlc1xuICAgIH0gLy8gZm9yIGkgZWxlc1xuXG4gICAgLy8gdHJpZ2dlciB1cGRhdGUgc3R5bGUgb24gdGhvc2UgZWxlcyB0aGF0IGhhZCBjbGFzcyBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zcGF3bihjaGFuZ2VkKS51cGRhdGVTdHlsZSgpLmVtaXQoJ2NsYXNzJyk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICByZW1vdmVDbGFzczogZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoY2xhc3Nlcykge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzZXMsIGZhbHNlKTtcbiAgfSxcbiAgZmxhc2hDbGFzczogZnVuY3Rpb24gZmxhc2hDbGFzcyhjbGFzc2VzLCBkdXJhdGlvbikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgZHVyYXRpb24gPSAyNTA7XG4gICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIHNlbGY7IC8vIG5vdGhpbmcgdG8gZG8gcmVhbGx5XG4gICAgfVxuXG4gICAgc2VsZi5hZGRDbGFzcyhjbGFzc2VzKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYucmVtb3ZlQ2xhc3MoY2xhc3Nlcyk7XG4gICAgfSwgZHVyYXRpb24pO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG59O1xuZWxlc2ZuJGguY2xhc3NOYW1lID0gZWxlc2ZuJGguY2xhc3NOYW1lcyA9IGVsZXNmbiRoLmNsYXNzZXM7XG5cbi8vIHRva2VucyBpbiB0aGUgcXVlcnkgbGFuZ3VhZ2VcbnZhciB0b2tlbnMgPSB7XG4gIG1ldGFDaGFyOiAnW1xcXFwhXFxcXFwiXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwuXFxcXC9cXFxcOlxcXFw7XFxcXDxcXFxcPVxcXFw+XFxcXD9cXFxcQFxcXFxbXFxcXF1cXFxcXlxcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dJyxcbiAgLy8gY2hhcnMgd2UgbmVlZCB0byBlc2NhcGUgaW4gbGV0IG5hbWVzLCBldGNcbiAgY29tcGFyYXRvck9wOiAnPXxcXFxcIT18Pnw+PXw8fDw9fFxcXFwkPXxcXFxcXj18XFxcXCo9JyxcbiAgLy8gYmluYXJ5IGNvbXBhcmlzb24gb3AgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpXG4gIGJvb2xPcDogJ1xcXFw/fFxcXFwhfFxcXFxeJyxcbiAgLy8gYm9vbGVhbiAodW5hcnkpIG9wZXJhdG9ycyAodXNlZCBpbiBkYXRhIHNlbGVjdG9ycylcbiAgc3RyaW5nOiAnXCIoPzpcXFxcXFxcXFwifFteXCJdKSpcIicgKyAnfCcgKyBcIicoPzpcXFxcXFxcXCd8W14nXSkqJ1wiLFxuICAvLyBzdHJpbmcgbGl0ZXJhbHMgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tIGRvdWJsZXF1b3RlcyB8IHNpbmdsZXF1b3Rlc1xuICBudW1iZXI6IG51bWJlcixcbiAgLy8gbnVtYmVyIGxpdGVyYWwgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tLSBlLmcuIDAuMTIzNCwgMTIzNCwgMTJlMTIzXG4gIG1ldGE6ICdkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlJyxcbiAgLy8gYWxsb3dlZCBtZXRhZGF0YSBmaWVsZHMgKGkuZS4gYWxsb3dlZCBmdW5jdGlvbnMgdG8gdXNlIGZyb20gQ29sbGVjdGlvbilcbiAgc2VwYXJhdG9yOiAnXFxcXHMqLFxcXFxzKicsXG4gIC8vIHF1ZXJpZXMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGUuZy4gZWRnZVtmb28gPSAnYmFyJ10sIG5vZGUuc29tZUNsYXNzXG4gIGRlc2NlbmRhbnQ6ICdcXFxccysnLFxuICBjaGlsZDogJ1xcXFxzKz5cXFxccysnLFxuICBzdWJqZWN0OiAnXFxcXCQnLFxuICBncm91cDogJ25vZGV8ZWRnZXxcXFxcKicsXG4gIGRpcmVjdGVkRWRnZTogJ1xcXFxzKy0+XFxcXHMrJyxcbiAgdW5kaXJlY3RlZEVkZ2U6ICdcXFxccys8LT5cXFxccysnXG59O1xudG9rZW5zLnZhcmlhYmxlID0gJyg/OltcXFxcdy0uXXwoPzpcXFxcXFxcXCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKSkrJzsgLy8gYSB2YXJpYWJsZSBuYW1lIGNhbiBoYXZlIGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcywgYW5kIHBlcmlvZHNcbnRva2Vucy5jbGFzc05hbWUgPSAnKD86W1xcXFx3LV18KD86XFxcXFxcXFwnICsgdG9rZW5zLm1ldGFDaGFyICsgJykpKyc7IC8vIGEgY2xhc3MgbmFtZSBoYXMgdGhlIHNhbWUgcnVsZXMgYXMgYSB2YXJpYWJsZSBleGNlcHQgaXQgY2FuJ3QgaGF2ZSBhICcuJyBpbiB0aGUgbmFtZVxudG9rZW5zLnZhbHVlID0gdG9rZW5zLnN0cmluZyArICd8JyArIHRva2Vucy5udW1iZXI7IC8vIGEgdmFsdWUgbGl0ZXJhbCwgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlclxudG9rZW5zLmlkID0gdG9rZW5zLnZhcmlhYmxlOyAvLyBhbiBlbGVtZW50IGlkIChmb2xsb3dzIHZhcmlhYmxlIGNvbnZlbnRpb25zKVxuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgb3BzLCBvcCwgaTtcblxuICAvLyBhZGQgQCB2YXJpYW50cyB0byBjb21wYXJhdG9yT3BcbiAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3AgPSBvcHNbaV07XG4gICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfEAnICsgb3A7XG4gIH1cblxuICAvLyBhZGQgISB2YXJpYW50cyB0byBjb21wYXJhdG9yT3BcbiAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3AgPSBvcHNbaV07XG4gICAgaWYgKG9wLmluZGV4T2YoJyEnKSA+PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIHNraXAgb3BzIHRoYXQgZXhwbGljaXRseSBjb250YWluICFcbiAgICBpZiAob3AgPT09ICc9Jykge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBza2lwID0gYi9jICE9IGlzIGV4cGxpY2l0bHkgZGVmaW5lZFxuXG4gICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfFxcXFwhJyArIG9wO1xuICB9XG59KSgpO1xuXG4vKipcbiAqIE1ha2UgYSBuZXcgcXVlcnkgb2JqZWN0XG4gKlxuICogQHByb3AgdHlwZSB7VHlwZX0gVGhlIHR5cGUgZW51bSAoaW50KSBvZiB0aGUgcXVlcnlcbiAqIEBwcm9wIGNoZWNrcyBMaXN0IG9mIGNoZWNrcyB0byBtYWtlIGFnYWluc3QgYW4gZWxlIHRvIHRlc3QgZm9yIGEgbWF0Y2hcbiAqL1xudmFyIG5ld1F1ZXJ5ID0gZnVuY3Rpb24gbmV3UXVlcnkoKSB7XG4gIHJldHVybiB7XG4gICAgY2hlY2tzOiBbXVxuICB9O1xufTtcblxuLyoqXG4gKiBBIGNoZWNrIHR5cGUgZW51bS1saWtlIG9iamVjdC4gIFVzZXMgaW50ZWdlciB2YWx1ZXMgZm9yIGZhc3QgbWF0Y2goKSBsb29rdXAuXG4gKiBUaGUgb3JkZXJpbmcgZG9lcyBub3QgbWF0dGVyIGFzIGxvbmcgYXMgdGhlIGludHMgYXJlIHVuaXF1ZS5cbiAqL1xudmFyIFR5cGUgPSB7XG4gIC8qKiBFLmcuIG5vZGUgKi9cbiAgR1JPVVA6IDAsXG4gIC8qKiBBIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgKi9cbiAgQ09MTEVDVElPTjogMSxcbiAgLyoqIEEgZmlsdGVyKGVsZSkgZnVuY3Rpb24gKi9cbiAgRklMVEVSOiAyLFxuICAvKiogRS5nLiBbZm9vID4gMV0gKi9cbiAgREFUQV9DT01QQVJFOiAzLFxuICAvKiogRS5nLiBbZm9vXSAqL1xuICBEQVRBX0VYSVNUOiA0LFxuICAvKiogRS5nLiBbP2Zvb10gKi9cbiAgREFUQV9CT09MOiA1LFxuICAvKiogRS5nLiBbW2RlZ3JlZSA+IDJdXSAqL1xuICBNRVRBX0NPTVBBUkU6IDYsXG4gIC8qKiBFLmcuIDpzZWxlY3RlZCAqL1xuICBTVEFURTogNyxcbiAgLyoqIEUuZy4gI2ZvbyAqL1xuICBJRDogOCxcbiAgLyoqIEUuZy4gLmZvbyAqL1xuICBDTEFTUzogOSxcbiAgLyoqIEUuZy4gI2ZvbyA8LT4gI2JhciAqL1xuICBVTkRJUkVDVEVEX0VER0U6IDEwLFxuICAvKiogRS5nLiAjZm9vIC0+ICNiYXIgKi9cbiAgRElSRUNURURfRURHRTogMTEsXG4gIC8qKiBFLmcuICQjZm9vIC0+ICNiYXIgKi9cbiAgTk9ERV9TT1VSQ0U6IDEyLFxuICAvKiogRS5nLiAjZm9vIC0+ICQjYmFyICovXG4gIE5PREVfVEFSR0VUOiAxMyxcbiAgLyoqIEUuZy4gJCNmb28gPC0+ICNiYXIgKi9cbiAgTk9ERV9ORUlHSEJPUjogMTQsXG4gIC8qKiBFLmcuICNmb28gPiAjYmFyICovXG4gIENISUxEOiAxNSxcbiAgLyoqIEUuZy4gI2ZvbyAjYmFyICovXG4gIERFU0NFTkRBTlQ6IDE2LFxuICAvKiogRS5nLiAkI2ZvbyA+ICNiYXIgKi9cbiAgUEFSRU5UOiAxNyxcbiAgLyoqIEUuZy4gJCNmb28gI2JhciAqL1xuICBBTkNFU1RPUjogMTgsXG4gIC8qKiBFLmcuICNmb28gPiAkYmFyID4gI2JheiAqL1xuICBDT01QT1VORF9TUExJVDogMTksXG4gIC8qKiBBbHdheXMgbWF0Y2hlcywgdXNlZnVsIHBsYWNlaG9sZGVyIGZvciBzdWJqZWN0IGluIGBDT01QT1VORF9TUExJVGAgKi9cbiAgVFJVRTogMjBcbn07XG5cbnZhciBzdGF0ZVNlbGVjdG9ycyA9IFt7XG4gIHNlbGVjdG9yOiAnOnNlbGVjdGVkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnNlbGVjdGVkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6dW5zZWxlY3RlZCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuc2VsZWN0ZWQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpzZWxlY3RhYmxlJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bnNlbGVjdGFibGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLnNlbGVjdGFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpsb2NrZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUubG9ja2VkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6dW5sb2NrZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmxvY2tlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnZpc2libGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUudmlzaWJsZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmhpZGRlbicsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUudmlzaWJsZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnRyYW5zcGFyZW50JyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnRyYW5zcGFyZW50KCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6Z3JhYmJlZCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5ncmFiYmVkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6ZnJlZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuZ3JhYmJlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnJlbW92ZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUucmVtb3ZlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmluc2lkZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUucmVtb3ZlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmdyYWJiYWJsZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5ncmFiYmFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bmdyYWJiYWJsZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuZ3JhYmJhYmxlKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6YW5pbWF0ZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYW5pbWF0ZWQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bmFuaW1hdGVkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5hbmltYXRlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnBhcmVudCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc1BhcmVudCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNoaWxkbGVzcycsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc0NoaWxkbGVzcygpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNoaWxkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpvcnBoYW4nLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNPcnBoYW4oKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpub25vcnBoYW4nLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNDaGlsZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNvbXBvdW5kJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICByZXR1cm4gZWxlLmlzUGFyZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGUuc291cmNlKCkuaXNQYXJlbnQoKSB8fCBlbGUudGFyZ2V0KCkuaXNQYXJlbnQoKTtcbiAgICB9XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6bG9vcCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc0xvb3AoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpzaW1wbGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNTaW1wbGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzphY3RpdmUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYWN0aXZlKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6aW5hY3RpdmUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmFjdGl2ZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmJhY2tncm91bmRpbmcnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYmFja2dyb3VuZGluZygpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOm5vbmJhY2tncm91bmRpbmcnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmJhY2tncm91bmRpbmcoKTtcbiAgfVxufV0uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAvLyBuLmIuIHNlbGVjdG9ycyB0aGF0IGFyZSBzdGFydGluZyBzdWJzdHJpbmdzIG9mIG90aGVycyBtdXN0IGhhdmUgdGhlIGxvbmdlciBvbmVzIGZpcnN0XG4gIHJldHVybiBkZXNjZW5kaW5nKGEuc2VsZWN0b3IsIGIuc2VsZWN0b3IpO1xufSk7XG52YXIgbG9va3VwID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsVG9GbiA9IHt9O1xuICB2YXIgcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZVNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgIHMgPSBzdGF0ZVNlbGVjdG9yc1tpXTtcbiAgICBzZWxUb0ZuW3Muc2VsZWN0b3JdID0gcy5tYXRjaGVzO1xuICB9XG4gIHJldHVybiBzZWxUb0ZuO1xufSgpO1xudmFyIHN0YXRlU2VsZWN0b3JNYXRjaGVzID0gZnVuY3Rpb24gc3RhdGVTZWxlY3Rvck1hdGNoZXMoc2VsLCBlbGUpIHtcbiAgcmV0dXJuIGxvb2t1cFtzZWxdKGVsZSk7XG59O1xudmFyIHN0YXRlU2VsZWN0b3JSZWdleCA9ICcoJyArIHN0YXRlU2VsZWN0b3JzLm1hcChmdW5jdGlvbiAocykge1xuICByZXR1cm4gcy5zZWxlY3Rvcjtcbn0pLmpvaW4oJ3wnKSArICcpJztcblxuLy8gd2hlbiBhIHRva2VuIGxpa2UgYSB2YXJpYWJsZSBoYXMgZXNjYXBlZCBtZXRhIGNoYXJhY3RlcnMsIHdlIG5lZWQgdG8gY2xlYW4gdGhlIGJhY2tzbGFzaGVzIG91dFxuLy8gc28gdGhhdCB2YWx1ZXMgZ2V0IGNvbXBhcmVkIHByb3Blcmx5IGluIFNlbGVjdG9yLmZpbHRlcigpXG52YXIgY2xlYW5NZXRhQ2hhcnMgPSBmdW5jdGlvbiBjbGVhbk1ldGFDaGFycyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxcXFxcKCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKScsICdnJyksIGZ1bmN0aW9uIChtYXRjaCwgJDEpIHtcbiAgICByZXR1cm4gJDE7XG4gIH0pO1xufTtcbnZhciByZXBsYWNlTGFzdFF1ZXJ5ID0gZnVuY3Rpb24gcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgZXhhbWluaW5nUXVlcnksIHJlcGxhY2VtZW50UXVlcnkpIHtcbiAgc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV0gPSByZXBsYWNlbWVudFF1ZXJ5O1xufTtcblxuLy8gTk9URTogYWRkIG5ldyBleHByZXNzaW9uIHN5bnRheCBoZXJlIHRvIGhhdmUgaXQgcmVjb2duaXNlZCBieSB0aGUgcGFyc2VyO1xuLy8gLSBhIHF1ZXJ5IGNvbnRhaW5zIGFsbCBhZGphY2VudCAoaS5lLiBubyBzZXBhcmF0b3IgaW4gYmV0d2VlbikgZXhwcmVzc2lvbnM7XG4vLyAtIHRoZSBjdXJyZW50IHF1ZXJ5IGlzIHN0b3JlZCBpbiBzZWxlY3RvcltpXVxuLy8gLSB5b3UgbmVlZCB0byBjaGVjayB0aGUgcXVlcnkgb2JqZWN0cyBpbiBtYXRjaCgpIGZvciBpdCBhY3R1YWxseSBmaWx0ZXIgcHJvcGVybHksIGJ1dCB0aGF0J3MgcHJldHR5IHN0cmFpZ2h0IGZvcndhcmRcbnZhciBleHBycyA9IFt7XG4gIG5hbWU6ICdncm91cCcsXG4gIC8vIGp1c3QgdXNlZCBmb3IgaWRlbnRpZnlpbmcgd2hlbiBkZWJ1Z2dpbmdcbiAgcXVlcnk6IHRydWUsXG4gIHJlZ2V4OiAnKCcgKyB0b2tlbnMuZ3JvdXAgKyAnKScsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGdyb3VwID0gX3JlZjJbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5HUk9VUCxcbiAgICAgIHZhbHVlOiBncm91cCA9PT0gJyonID8gZ3JvdXAgOiBncm91cCArICdzJ1xuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdzdGF0ZScsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogc3RhdGVTZWxlY3RvclJlZ2V4LFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAxKSxcbiAgICAgIHN0YXRlID0gX3JlZjRbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5TVEFURSxcbiAgICAgIHZhbHVlOiBzdGF0ZVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdpZCcsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFwjKCcgKyB0b2tlbnMuaWQgKyAnKScsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWY1KSB7XG4gICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDEpLFxuICAgICAgaWQgPSBfcmVmNlswXTtcbiAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICB0eXBlOiBUeXBlLklELFxuICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGlkKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdjbGFzc05hbWUnLFxuICBxdWVyeTogdHJ1ZSxcbiAgcmVnZXg6ICdcXFxcLignICsgdG9rZW5zLmNsYXNzTmFtZSArICcpJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjcpIHtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMSksXG4gICAgICBjbGFzc05hbWUgPSBfcmVmOFswXTtcbiAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICB0eXBlOiBUeXBlLkNMQVNTLFxuICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGNsYXNzTmFtZSlcbiAgICB9KTtcbiAgfVxufSwge1xuICBuYW1lOiAnZGF0YUV4aXN0cycsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjkpIHtcbiAgICB2YXIgX3JlZjEwID0gX3NsaWNlZFRvQXJyYXkoX3JlZjksIDEpLFxuICAgICAgdmFyaWFibGUgPSBfcmVmMTBbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5EQVRBX0VYSVNULFxuICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKHZhcmlhYmxlKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdkYXRhQ29tcGFyZScsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKignICsgdG9rZW5zLmNvbXBhcmF0b3JPcCArICcpXFxcXHMqKCcgKyB0b2tlbnMudmFsdWUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjExKSB7XG4gICAgdmFyIF9yZWYxMiA9IF9zbGljZWRUb0FycmF5KF9yZWYxMSwgMyksXG4gICAgICB2YXJpYWJsZSA9IF9yZWYxMlswXSxcbiAgICAgIGNvbXBhcmF0b3JPcCA9IF9yZWYxMlsxXSxcbiAgICAgIHZhbHVlID0gX3JlZjEyWzJdO1xuICAgIHZhciB2YWx1ZUlzU3RyaW5nID0gbmV3IFJlZ0V4cCgnXicgKyB0b2tlbnMuc3RyaW5nICsgJyQnKS5leGVjKHZhbHVlKSAhPSBudWxsO1xuICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5EQVRBX0NPTVBBUkUsXG4gICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnModmFyaWFibGUpLFxuICAgICAgb3BlcmF0b3I6IGNvbXBhcmF0b3JPcCxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdkYXRhQm9vbCcsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMuYm9vbE9wICsgJylcXFxccyooJyArIHRva2Vucy52YXJpYWJsZSArICcpXFxcXHMqXFxcXF0nLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTMpIHtcbiAgICB2YXIgX3JlZjE0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEzLCAyKSxcbiAgICAgIGJvb2xPcCA9IF9yZWYxNFswXSxcbiAgICAgIHZhcmlhYmxlID0gX3JlZjE0WzFdO1xuICAgIHF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgIHR5cGU6IFR5cGUuREFUQV9CT09MLFxuICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKHZhcmlhYmxlKSxcbiAgICAgIG9wZXJhdG9yOiBib29sT3BcbiAgICB9KTtcbiAgfVxufSwge1xuICBuYW1lOiAnbWV0YUNvbXBhcmUnLFxuICBxdWVyeTogdHJ1ZSxcbiAgcmVnZXg6ICdcXFxcW1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMubWV0YSArICcpXFxcXHMqKCcgKyB0b2tlbnMuY29tcGFyYXRvck9wICsgJylcXFxccyooJyArIHRva2Vucy5udW1iZXIgKyAnKVxcXFxzKlxcXFxdXFxcXF0nLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAzKSxcbiAgICAgIG1ldGEgPSBfcmVmMTZbMF0sXG4gICAgICBjb21wYXJhdG9yT3AgPSBfcmVmMTZbMV0sXG4gICAgICBudW1iZXIgPSBfcmVmMTZbMl07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5NRVRBX0NPTVBBUkUsXG4gICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnMobWV0YSksXG4gICAgICBvcGVyYXRvcjogY29tcGFyYXRvck9wLFxuICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICduZXh0UXVlcnknLFxuICBzZXBhcmF0b3I6IHRydWUsXG4gIHJlZ2V4OiB0b2tlbnMuc2VwYXJhdG9yLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgdmFyIGN1cnJlbnRTdWJqZWN0ID0gc2VsZWN0b3IuY3VycmVudFN1YmplY3Q7XG4gICAgdmFyIGVkZ2VDb3VudCA9IHNlbGVjdG9yLmVkZ2VDb3VudDtcbiAgICB2YXIgY29tcG91bmRDb3VudCA9IHNlbGVjdG9yLmNvbXBvdW5kQ291bnQ7XG4gICAgdmFyIGxhc3RRID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgaWYgKGN1cnJlbnRTdWJqZWN0ICE9IG51bGwpIHtcbiAgICAgIGxhc3RRLnN1YmplY3QgPSBjdXJyZW50U3ViamVjdDtcbiAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gbnVsbDtcbiAgICB9XG4gICAgbGFzdFEuZWRnZUNvdW50ID0gZWRnZUNvdW50O1xuICAgIGxhc3RRLmNvbXBvdW5kQ291bnQgPSBjb21wb3VuZENvdW50O1xuICAgIHNlbGVjdG9yLmVkZ2VDb3VudCA9IDA7XG4gICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCA9IDA7XG5cbiAgICAvLyBnbyBvbiB0byBuZXh0IHF1ZXJ5XG4gICAgdmFyIG5leHRRdWVyeSA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCsrXSA9IG5ld1F1ZXJ5KCk7XG4gICAgcmV0dXJuIG5leHRRdWVyeTsgLy8gdGhpcyBpcyB0aGUgbmV3IHF1ZXJ5IHRvIGJlIGZpbGxlZCBieSB0aGUgZm9sbG93aW5nIGV4cHJzXG4gIH1cbn0sIHtcbiAgbmFtZTogJ2RpcmVjdGVkRWRnZScsXG4gIHNlcGFyYXRvcjogdHJ1ZSxcbiAgcmVnZXg6IHRva2Vucy5kaXJlY3RlZEVkZ2UsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgLy8gdW5kaXJlY3RlZCBlZGdlXG4gICAgICB2YXIgZWRnZVF1ZXJ5ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBzb3VyY2UgPSBxdWVyeTtcbiAgICAgIHZhciB0YXJnZXQgPSBuZXdRdWVyeSgpO1xuICAgICAgZWRnZVF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5ESVJFQ1RFRF9FREdFLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgZWRnZSByYXRoZXIgdGhhbiB0aGUgc291cmNlXG4gICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBxdWVyeSwgZWRnZVF1ZXJ5KTtcbiAgICAgIHNlbGVjdG9yLmVkZ2VDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgdGFyZ2V0IHF1ZXJ5IHdpdGggZXhwcmVzc2lvbnMgdGhhdCBmb2xsb3dcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNvdXJjZS90YXJnZXRcbiAgICAgIHZhciBzcmNUZ3RRID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfc291cmNlID0gcXVlcnk7XG4gICAgICB2YXIgX3RhcmdldCA9IG5ld1F1ZXJ5KCk7XG4gICAgICBzcmNUZ3RRLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5OT0RFX1NPVVJDRSxcbiAgICAgICAgc291cmNlOiBfc291cmNlLFxuICAgICAgICB0YXJnZXQ6IF90YXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgbmVpZ2hib3VyaG9vZCByYXRoZXIgdGhhbiB0aGUgbm9kZVxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIHNyY1RndFEpO1xuICAgICAgc2VsZWN0b3IuZWRnZUNvdW50Kys7XG4gICAgICByZXR1cm4gX3RhcmdldDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHRhcmdldCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogJ3VuZGlyZWN0ZWRFZGdlJyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLnVuZGlyZWN0ZWRFZGdlLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIHVuZGlyZWN0ZWQgZWRnZVxuICAgICAgdmFyIGVkZ2VRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgc291cmNlID0gcXVlcnk7XG4gICAgICB2YXIgdGFyZ2V0ID0gbmV3UXVlcnkoKTtcbiAgICAgIGVkZ2VRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuVU5ESVJFQ1RFRF9FREdFLFxuICAgICAgICBub2RlczogW3NvdXJjZSwgdGFyZ2V0XVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoZSBxdWVyeSBpbiB0aGUgc2VsZWN0b3Igc2hvdWxkIGJlIHRoZSBlZGdlIHJhdGhlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBlZGdlUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuZWRnZUNvdW50Kys7XG5cbiAgICAgIC8vIHdlJ3JlIG5vdyBwb3B1bGF0aW5nIHRoZSB0YXJnZXQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbmVpZ2hib3VyaG9vZFxuICAgICAgdmFyIG5ob29kUSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgbm9kZSA9IHF1ZXJ5O1xuICAgICAgdmFyIG5laWdoYm9yID0gbmV3UXVlcnkoKTtcbiAgICAgIG5ob29kUS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuTk9ERV9ORUlHSEJPUixcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgbmVpZ2hib3I6IG5laWdoYm9yXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhlIHF1ZXJ5IGluIHRoZSBzZWxlY3RvciBzaG91bGQgYmUgdGhlIG5laWdoYm91cmhvb2QgcmF0aGVyIHRoYW4gdGhlIG5vZGVcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBuaG9vZFEpO1xuICAgICAgcmV0dXJuIG5laWdoYm9yOyAvLyBub3cgcG9wdWxhdGluZyB0aGUgbmVpZ2hib3Igd2l0aCBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogJ2NoaWxkJyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLmNoaWxkLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIGRlZmF1bHQ6IGNoaWxkIHF1ZXJ5XG4gICAgICB2YXIgcGFyZW50Q2hpbGRRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgY2hpbGQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIHBhcmVudCA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgcGFyZW50Q2hpbGRRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ0hJTEQsXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBjaGlsZDogY2hpbGRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIHBhcmVudENoaWxkUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgY2hpbGQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT09IHF1ZXJ5KSB7XG4gICAgICAvLyBjb21wb3VuZCBzcGxpdCBxdWVyeVxuICAgICAgdmFyIGNvbXBvdW5kID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBsZWZ0ID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgcmlnaHQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIHN1YmplY3QgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIF9jaGlsZCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX3BhcmVudCA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgIC8vIHNldCB1cCB0aGUgcm9vdCBjb21wb3VuZCBxXG4gICAgICBjb21wb3VuZC5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ09NUE9VTkRfU1BMSVQsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvcHVsYXRlIHRoZSBzdWJqZWN0IGFuZCByZXBsYWNlIHRoZSBxIGF0IHRoZSBvbGQgc3BvdCAod2l0aGluIGxlZnQpIHdpdGggVFJVRVxuICAgICAgc3ViamVjdC5jaGVja3MgPSBxdWVyeS5jaGVja3M7IC8vIHRha2UgdGhlIGNoZWNrcyBmcm9tIHRoZSBsZWZ0XG4gICAgICBxdWVyeS5jaGVja3MgPSBbe1xuICAgICAgICB0eXBlOiBUeXBlLlRSVUVcbiAgICAgIH1dOyAvLyBjaGVja3MgdW5kZXIgbGVmdCByZWZzIHRoZSBzdWJqZWN0IGltcGxpY2l0bHlcblxuICAgICAgLy8gc2V0IHVwIHRoZSByaWdodCBxXG4gICAgICBfcGFyZW50LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5UUlVFXG4gICAgICB9KTsgLy8gcGFyZW50IGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLlBBUkVOVCxcbiAgICAgICAgLy8gdHlwZSBpcyBzd2FwcGVkIG9uIHJpZ2h0IHNpZGUgcXVlcmllc1xuICAgICAgICBwYXJlbnQ6IF9wYXJlbnQsXG4gICAgICAgIGNoaWxkOiBfY2hpbGQgLy8gZW1wdHkgZm9yIG5vd1xuICAgICAgfSk7XG5cbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIGxlZnQsIGNvbXBvdW5kKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSByZWYgc2luY2Ugd2UgbW92ZWQgdGhpbmdzIGFyb3VuZCBmb3IgYHF1ZXJ5YFxuICAgICAgc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPSBzdWJqZWN0O1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuICAgICAgcmV0dXJuIF9jaGlsZDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHJpZ2h0IHNpZGUncyBjaGlsZFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwYXJlbnQgcXVlcnlcbiAgICAgIC8vIGluZm8gZm9yIHBhcmVudCBxdWVyeVxuICAgICAgdmFyIF9wYXJlbnQyID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfY2hpbGQyID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBwY1FDaGVja3MgPSBbe1xuICAgICAgICB0eXBlOiBUeXBlLlBBUkVOVCxcbiAgICAgICAgcGFyZW50OiBfcGFyZW50MixcbiAgICAgICAgY2hpbGQ6IF9jaGlsZDJcbiAgICAgIH1dO1xuXG4gICAgICAvLyB0aGUgcGFyZW50LWNoaWxkIHF1ZXJ5IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgcXVlcnkgcHJldmlvdXNseSBiZWluZyBwb3B1bGF0ZWRcbiAgICAgIF9wYXJlbnQyLmNoZWNrcyA9IHF1ZXJ5LmNoZWNrczsgLy8gdGhlIHByZXZpb3VzIHF1ZXJ5IGNvbnRhaW5zIHRoZSBjaGVja3MgZm9yIHRoZSBwYXJlbnRcbiAgICAgIHF1ZXJ5LmNoZWNrcyA9IHBjUUNoZWNrczsgLy8gcGMgcXVlcnkgdGFrZXMgb3ZlclxuXG4gICAgICBzZWxlY3Rvci5jb21wb3VuZENvdW50Kys7XG4gICAgICByZXR1cm4gX2NoaWxkMjsgLy8gd2UncmUgbm93IHBvcHVsYXRpbmcgdGhlIGNoaWxkXG4gICAgfVxuICB9XG59LCB7XG4gIG5hbWU6ICdkZXNjZW5kYW50JyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLmRlc2NlbmRhbnQsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgLy8gZGVmYXVsdDogZGVzY2VuZGFudCBxdWVyeVxuICAgICAgdmFyIGFuY0NoUXVlcnkgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGRlc2NlbmRhbnQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGFuY2VzdG9yID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICBhbmNDaFF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5ERVNDRU5EQU5ULFxuICAgICAgICBhbmNlc3RvcjogYW5jZXN0b3IsXG4gICAgICAgIGRlc2NlbmRhbnQ6IGRlc2NlbmRhbnRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIGFuY0NoUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgZGVzY2VuZGFudCBxdWVyeSB3aXRoIGV4cHJlc3Npb25zIHRoYXQgZm9sbG93XG4gICAgICByZXR1cm4gZGVzY2VuZGFudDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09PSBxdWVyeSkge1xuICAgICAgLy8gY29tcG91bmQgc3BsaXQgcXVlcnlcbiAgICAgIHZhciBjb21wb3VuZCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgbGVmdCA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHJpZ2h0ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBzdWJqZWN0ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfZGVzY2VuZGFudCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX2FuY2VzdG9yID0gbmV3UXVlcnkoKTtcblxuICAgICAgLy8gc2V0IHVwIHRoZSByb290IGNvbXBvdW5kIHFcbiAgICAgIGNvbXBvdW5kLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5DT01QT1VORF9TUExJVCxcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICB9KTtcblxuICAgICAgLy8gcG9wdWxhdGUgdGhlIHN1YmplY3QgYW5kIHJlcGxhY2UgdGhlIHEgYXQgdGhlIG9sZCBzcG90ICh3aXRoaW4gbGVmdCkgd2l0aCBUUlVFXG4gICAgICBzdWJqZWN0LmNoZWNrcyA9IHF1ZXJ5LmNoZWNrczsgLy8gdGFrZSB0aGUgY2hlY2tzIGZyb20gdGhlIGxlZnRcbiAgICAgIHF1ZXJ5LmNoZWNrcyA9IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuVFJVRVxuICAgICAgfV07IC8vIGNoZWNrcyB1bmRlciBsZWZ0IHJlZnMgdGhlIHN1YmplY3QgaW1wbGljaXRseVxuXG4gICAgICAvLyBzZXQgdXAgdGhlIHJpZ2h0IHFcbiAgICAgIF9hbmNlc3Rvci5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuVFJVRVxuICAgICAgfSk7IC8vIGFuY2VzdG9yIGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLkFOQ0VTVE9SLFxuICAgICAgICAvLyB0eXBlIGlzIHN3YXBwZWQgb24gcmlnaHQgc2lkZSBxdWVyaWVzXG4gICAgICAgIGFuY2VzdG9yOiBfYW5jZXN0b3IsXG4gICAgICAgIGRlc2NlbmRhbnQ6IF9kZXNjZW5kYW50IC8vIGVtcHR5IGZvciBub3dcbiAgICAgIH0pO1xuXG4gICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBsZWZ0LCBjb21wb3VuZCk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgcmVmIHNpbmNlIHdlIG1vdmVkIHRoaW5ncyBhcm91bmQgZm9yIGBxdWVyeWBcbiAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gc3ViamVjdDtcbiAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgIHJldHVybiBfZGVzY2VuZGFudDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHJpZ2h0IHNpZGUncyBkZXNjZW5kYW50XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFuY2VzdG9yIHF1ZXJ5XG4gICAgICAvLyBpbmZvIGZvciBwYXJlbnQgcXVlcnlcbiAgICAgIHZhciBfYW5jZXN0b3IyID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfZGVzY2VuZGFudDIgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGFkUUNoZWNrcyA9IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuQU5DRVNUT1IsXG4gICAgICAgIGFuY2VzdG9yOiBfYW5jZXN0b3IyLFxuICAgICAgICBkZXNjZW5kYW50OiBfZGVzY2VuZGFudDJcbiAgICAgIH1dO1xuXG4gICAgICAvLyB0aGUgcGFyZW50LWNoaWxkIHF1ZXJ5IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgcXVlcnkgcHJldmlvdXNseSBiZWluZyBwb3B1bGF0ZWRcbiAgICAgIF9hbmNlc3RvcjIuY2hlY2tzID0gcXVlcnkuY2hlY2tzOyAvLyB0aGUgcHJldmlvdXMgcXVlcnkgY29udGFpbnMgdGhlIGNoZWNrcyBmb3IgdGhlIHBhcmVudFxuICAgICAgcXVlcnkuY2hlY2tzID0gYWRRQ2hlY2tzOyAvLyBwYyBxdWVyeSB0YWtlcyBvdmVyXG5cbiAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgIHJldHVybiBfZGVzY2VuZGFudDI7IC8vIHdlJ3JlIG5vdyBwb3B1bGF0aW5nIHRoZSBjaGlsZFxuICAgIH1cbiAgfVxufSwge1xuICBuYW1lOiAnc3ViamVjdCcsXG4gIG1vZGlmaWVyOiB0cnVlLFxuICByZWdleDogdG9rZW5zLnN1YmplY3QsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgIT0gbnVsbCAmJiBzZWxlY3Rvci5jdXJyZW50U3ViamVjdCAhPT0gcXVlcnkpIHtcbiAgICAgIHdhcm4oJ1JlZGVmaW5pdGlvbiBvZiBzdWJqZWN0IGluIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IudG9TdHJpbmcoKSArICdgJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gcXVlcnk7XG4gICAgdmFyIHRvcFEgPSBzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGggLSAxXTtcbiAgICB2YXIgdG9wQ2hrID0gdG9wUS5jaGVja3NbMF07XG4gICAgdmFyIHRvcFR5cGUgPSB0b3BDaGsgPT0gbnVsbCA/IG51bGwgOiB0b3BDaGsudHlwZTtcbiAgICBpZiAodG9wVHlwZSA9PT0gVHlwZS5ESVJFQ1RFRF9FREdFKSB7XG4gICAgICAvLyBkaXJlY3RlZCBlZGdlIHdpdGggc3ViamVjdCBvbiB0aGUgdGFyZ2V0XG5cbiAgICAgIC8vIGNoYW5nZSB0byB0YXJnZXQgbm9kZSBjaGVja1xuICAgICAgdG9wQ2hrLnR5cGUgPSBUeXBlLk5PREVfVEFSR0VUO1xuICAgIH0gZWxzZSBpZiAodG9wVHlwZSA9PT0gVHlwZS5VTkRJUkVDVEVEX0VER0UpIHtcbiAgICAgIC8vIHVuZGlyZWN0ZWQgZWRnZSB3aXRoIHN1YmplY3Qgb24gdGhlIHNlY29uZCBub2RlXG5cbiAgICAgIC8vIGNoYW5nZSB0byBuZWlnaGJvciBjaGVja1xuICAgICAgdG9wQ2hrLnR5cGUgPSBUeXBlLk5PREVfTkVJR0hCT1I7XG4gICAgICB0b3BDaGsubm9kZSA9IHRvcENoay5ub2Rlc1sxXTsgLy8gc2Vjb25kIG5vZGUgaXMgc3ViamVjdFxuICAgICAgdG9wQ2hrLm5laWdoYm9yID0gdG9wQ2hrLm5vZGVzWzBdO1xuXG4gICAgICAvLyBjbGVhbiB1cCB1bnVzZWQgZmllbGRzIGZvciBuZXcgdHlwZVxuICAgICAgdG9wQ2hrLm5vZGVzID0gbnVsbDtcbiAgICB9XG4gIH1cbn1dO1xuZXhwcnMuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICByZXR1cm4gZS5yZWdleE9iaiA9IG5ldyBSZWdFeHAoJ14nICsgZS5yZWdleCk7XG59KTtcblxuLyoqXG4gKiBPZiBhbGwgdGhlIGV4cHJlc3Npb25zLCBmaW5kIHRoZSBmaXJzdCBtYXRjaCBpbiB0aGUgcmVtYWluaW5nIHRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtYWluaW5nIFRoZSByZW1haW5pbmcgdGV4dCB0byBwYXJzZVxuICogQHJldHVybnMgVGhlIG1hdGNoZWQgZXhwcmVzc2lvbiBhbmQgdGhlIG5ld2x5IHJlbWFpbmluZyB0ZXh0IGB7IGV4cHIsIG1hdGNoLCBuYW1lLCByZW1haW5pbmcgfWBcbiAqL1xudmFyIGNvbnN1bWVFeHByID0gZnVuY3Rpb24gY29uc3VtZUV4cHIocmVtYWluaW5nKSB7XG4gIHZhciBleHByO1xuICB2YXIgbWF0Y2g7XG4gIHZhciBuYW1lO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGV4cHJzLmxlbmd0aDsgaisrKSB7XG4gICAgdmFyIGUgPSBleHByc1tqXTtcbiAgICB2YXIgbiA9IGUubmFtZTtcbiAgICB2YXIgbSA9IHJlbWFpbmluZy5tYXRjaChlLnJlZ2V4T2JqKTtcbiAgICBpZiAobSAhPSBudWxsKSB7XG4gICAgICBtYXRjaCA9IG07XG4gICAgICBleHByID0gZTtcbiAgICAgIG5hbWUgPSBuO1xuICAgICAgdmFyIGNvbnN1bWVkID0gbVswXTtcbiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoY29uc3VtZWQubGVuZ3RoKTtcbiAgICAgIGJyZWFrOyAvLyB3ZSd2ZSBjb25zdW1lZCBvbmUgZXhwciwgc28gd2UgY2FuIHJldHVybiBub3dcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cHI6IGV4cHIsXG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcmVtYWluaW5nOiByZW1haW5pbmdcbiAgfTtcbn07XG5cbi8qKlxuICogQ29uc3VtZSBhbGwgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbWFpbmluZyBUaGUgdGV4dCB0byBjb25zdW1lXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZFxuICovXG52YXIgY29uc3VtZVdoaXRlc3BhY2UgPSBmdW5jdGlvbiBjb25zdW1lV2hpdGVzcGFjZShyZW1haW5pbmcpIHtcbiAgdmFyIG1hdGNoID0gcmVtYWluaW5nLm1hdGNoKC9eXFxzKy8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgY29uc3VtZWQgPSBtYXRjaFswXTtcbiAgICByZW1haW5pbmcgPSByZW1haW5pbmcuc3Vic3RyaW5nKGNvbnN1bWVkLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHJlbWFpbmluZztcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIHN0cmluZyBhbmQgc3RvcmUgdGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBpbiB0aGUgU2VsZWN0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgVGhlIHNlbGVjdG9yIHN0cmluZ1xuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3RvciB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xudmFyIHBhcnNlID0gZnVuY3Rpb24gcGFyc2Uoc2VsZWN0b3IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcmVtYWluaW5nID0gc2VsZi5pbnB1dFRleHQgPSBzZWxlY3RvcjtcbiAgdmFyIGN1cnJlbnRRdWVyeSA9IHNlbGZbMF0gPSBuZXdRdWVyeSgpO1xuICBzZWxmLmxlbmd0aCA9IDE7XG4gIHJlbWFpbmluZyA9IGNvbnN1bWVXaGl0ZXNwYWNlKHJlbWFpbmluZyk7IC8vIGdldCByaWQgb2YgbGVhZGluZyB3aGl0ZXNwYWNlXG5cbiAgZm9yICg7Oykge1xuICAgIHZhciBleHBySW5mbyA9IGNvbnN1bWVFeHByKHJlbWFpbmluZyk7XG4gICAgaWYgKGV4cHJJbmZvLmV4cHIgPT0gbnVsbCkge1xuICAgICAgd2FybignVGhlIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IgKyAnYGlzIGludmFsaWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBleHBySW5mby5tYXRjaC5zbGljZSgxKTtcblxuICAgICAgLy8gbGV0IHRoZSB0b2tlbiBwb3B1bGF0ZSB0aGUgc2VsZWN0b3Igb2JqZWN0IGluIGN1cnJlbnRRdWVyeVxuICAgICAgdmFyIHJldCA9IGV4cHJJbmZvLmV4cHIucG9wdWxhdGUoc2VsZiwgY3VycmVudFF1ZXJ5LCBhcmdzKTtcbiAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXhpdCBpZiBwb3B1bGF0aW9uIGZhaWxlZFxuICAgICAgfSBlbHNlIGlmIChyZXQgIT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50UXVlcnkgPSByZXQ7IC8vIGNoYW5nZSB0aGUgY3VycmVudCBxdWVyeSB0byBiZSBmaWxsZWQgaWYgdGhlIGV4cHIgc3BlY2lmaWVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVtYWluaW5nID0gZXhwckluZm8ucmVtYWluaW5nO1xuXG4gICAgLy8gd2UncmUgZG9uZSB3aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIHBhcnNlXG4gICAgaWYgKHJlbWFpbmluZy5tYXRjaCgvXlxccyokLykpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgbGFzdFEgPSBzZWxmW3NlbGYubGVuZ3RoIC0gMV07XG4gIGlmIChzZWxmLmN1cnJlbnRTdWJqZWN0ICE9IG51bGwpIHtcbiAgICBsYXN0US5zdWJqZWN0ID0gc2VsZi5jdXJyZW50U3ViamVjdDtcbiAgfVxuICBsYXN0US5lZGdlQ291bnQgPSBzZWxmLmVkZ2VDb3VudDtcbiAgbGFzdFEuY29tcG91bmRDb3VudCA9IHNlbGYuY29tcG91bmRDb3VudDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHEgPSBzZWxmW2ldO1xuXG4gICAgLy8gaW4gZnV0dXJlLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGJlIGFsbG93ZWQgaWYgdGhlcmUgd2VyZSBvcGVyYXRvciBwcmVjZWRlbmNlIGFuZCBkZXRlY3Rpb24gb2YgaW52YWxpZCBjb21iaW5hdGlvbnNcbiAgICBpZiAocS5jb21wb3VuZENvdW50ID4gMCAmJiBxLmVkZ2VDb3VudCA+IDApIHtcbiAgICAgIHdhcm4oJ1RoZSBzZWxlY3RvciBgJyArIHNlbGVjdG9yICsgJ2AgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChxLmVkZ2VDb3VudCA+IDEpIHtcbiAgICAgIHdhcm4oJ1RoZSBzZWxlY3RvciBgJyArIHNlbGVjdG9yICsgJ2AgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHEuZWRnZUNvdW50ID09PSAxKSB7XG4gICAgICB3YXJuKCdUaGUgc2VsZWN0b3IgYCcgKyBzZWxlY3RvciArICdgIGlzIGRlcHJlY2F0ZWQuICBFZGdlIHNlbGVjdG9ycyBkbyBub3QgdGFrZSBlZmZlY3Qgb24gY2hhbmdlcyB0byBzb3VyY2UgYW5kIHRhcmdldCBub2RlcyBhZnRlciBhbiBlZGdlIGlzIGFkZGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIFVzZSBhIGNsYXNzIG9yIGRhdGEgc2VsZWN0b3Igb24gZWRnZXMgaW5zdGVhZCwgdXBkYXRpbmcgdGhlIGNsYXNzIG9yIGRhdGEgb2YgYW4gZWRnZSB3aGVuIHlvdXIgYXBwIGRldGVjdHMgYSBjaGFuZ2UgaW4gc291cmNlIG9yIHRhcmdldCBub2Rlcy4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7IC8vIHN1Y2Nlc3Ncbn07XG5cbi8qKlxuICogR2V0IHRoZSBzZWxlY3RvciByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4gIFRoaXMgdmFsdWUgdXNlcyBkZWZhdWx0IGZvcm1hdHRpbmcsXG4gKiBzbyB0aGluZ3MgbGlrZSBzcGFjaW5nIG1heSBkaWZmZXIgZnJvbSB0aGUgaW5wdXQgdGV4dCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHNlbGVjdG9yIHN0cmluZ1xuICovXG52YXIgdG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgaWYgKHRoaXMudG9TdHJpbmdDYWNoZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmdDYWNoZTtcbiAgfVxuICB2YXIgY2xlYW4gPSBmdW5jdGlvbiBjbGVhbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG4gIHZhciBjbGVhblZhbCA9IGZ1bmN0aW9uIGNsZWFuVmFsKHZhbCkge1xuICAgIGlmIChzdHJpbmcodmFsKSkge1xuICAgICAgcmV0dXJuICdcIicgKyB2YWwgKyAnXCInO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2xlYW4odmFsKTtcbiAgICB9XG4gIH07XG4gIHZhciBzcGFjZSA9IGZ1bmN0aW9uIHNwYWNlKHZhbCkge1xuICAgIHJldHVybiAnICcgKyB2YWwgKyAnICc7XG4gIH07XG4gIHZhciBjaGVja1RvU3RyaW5nID0gZnVuY3Rpb24gY2hlY2tUb1N0cmluZyhjaGVjaywgc3ViamVjdCkge1xuICAgIHZhciB0eXBlID0gY2hlY2sudHlwZSxcbiAgICAgIHZhbHVlID0gY2hlY2sudmFsdWU7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFR5cGUuR1JPVVA6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZ3JvdXAgPSBjbGVhbih2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGdyb3VwLnN1YnN0cmluZygwLCBncm91cC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLkRBVEFfQ09NUEFSRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGNoZWNrLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcjtcbiAgICAgICAgICByZXR1cm4gJ1snICsgZmllbGQgKyBzcGFjZShjbGVhbihvcGVyYXRvcikpICsgY2xlYW5WYWwodmFsdWUpICsgJ10nO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuREFUQV9CT09MOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9vcGVyYXRvciA9IGNoZWNrLm9wZXJhdG9yLFxuICAgICAgICAgICAgX2ZpZWxkID0gY2hlY2suZmllbGQ7XG4gICAgICAgICAgcmV0dXJuICdbJyArIGNsZWFuKF9vcGVyYXRvcikgKyBfZmllbGQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5EQVRBX0VYSVNUOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9maWVsZDIgPSBjaGVjay5maWVsZDtcbiAgICAgICAgICByZXR1cm4gJ1snICsgX2ZpZWxkMiArICddJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLk1FVEFfQ09NUEFSRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfb3BlcmF0b3IyID0gY2hlY2sub3BlcmF0b3IsXG4gICAgICAgICAgICBfZmllbGQzID0gY2hlY2suZmllbGQ7XG4gICAgICAgICAgcmV0dXJuICdbWycgKyBfZmllbGQzICsgc3BhY2UoY2xlYW4oX29wZXJhdG9yMikpICsgY2xlYW5WYWwodmFsdWUpICsgJ11dJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLlNUQVRFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuSUQ6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gJyMnICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5DTEFTUzpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiAnLicgKyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLlBBUkVOVDpcbiAgICAgIGNhc2UgVHlwZS5DSElMRDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBxdWVyeVRvU3RyaW5nKGNoZWNrLnBhcmVudCwgc3ViamVjdCkgKyBzcGFjZSgnPicpICsgcXVlcnlUb1N0cmluZyhjaGVjay5jaGlsZCwgc3ViamVjdCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5BTkNFU1RPUjpcbiAgICAgIGNhc2UgVHlwZS5ERVNDRU5EQU5UOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHF1ZXJ5VG9TdHJpbmcoY2hlY2suYW5jZXN0b3IsIHN1YmplY3QpICsgJyAnICsgcXVlcnlUb1N0cmluZyhjaGVjay5kZXNjZW5kYW50LCBzdWJqZWN0KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLkNPTVBPVU5EX1NQTElUOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxocyA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2subGVmdCwgc3ViamVjdCk7XG4gICAgICAgICAgdmFyIHN1YiA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2suc3ViamVjdCwgc3ViamVjdCk7XG4gICAgICAgICAgdmFyIHJocyA9IHF1ZXJ5VG9TdHJpbmcoY2hlY2sucmlnaHQsIHN1YmplY3QpO1xuICAgICAgICAgIHJldHVybiBsaHMgKyAobGhzLmxlbmd0aCA+IDAgPyAnICcgOiAnJykgKyBzdWIgKyByaHM7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5UUlVFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgcXVlcnlUb1N0cmluZyA9IGZ1bmN0aW9uIHF1ZXJ5VG9TdHJpbmcocXVlcnksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gcXVlcnkuY2hlY2tzLnJlZHVjZShmdW5jdGlvbiAoc3RyLCBjaGssIGkpIHtcbiAgICAgIHJldHVybiBzdHIgKyAoc3ViamVjdCA9PT0gcXVlcnkgJiYgaSA9PT0gMCA/ICckJyA6ICcnKSArIGNoZWNrVG9TdHJpbmcoY2hrLCBzdWJqZWN0KTtcbiAgICB9LCAnJyk7XG4gIH07XG4gIHZhciBzdHIgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpc1tpXTtcbiAgICBzdHIgKz0gcXVlcnlUb1N0cmluZyhxdWVyeSwgcXVlcnkuc3ViamVjdCk7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSAmJiBpIDwgdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICBzdHIgKz0gJywgJztcbiAgICB9XG4gIH1cbiAgdGhpcy50b1N0cmluZ0NhY2hlID0gc3RyO1xuICByZXR1cm4gc3RyO1xufTtcbnZhciBwYXJzZSQxID0ge1xuICBwYXJzZTogcGFyc2UsXG4gIHRvU3RyaW5nOiB0b1N0cmluZ1xufTtcblxudmFyIHZhbENtcCA9IGZ1bmN0aW9uIHZhbENtcChmaWVsZFZhbCwgb3BlcmF0b3IsIHZhbHVlKSB7XG4gIHZhciBtYXRjaGVzO1xuICB2YXIgaXNGaWVsZFN0ciA9IHN0cmluZyhmaWVsZFZhbCk7XG4gIHZhciBpc0ZpZWxkTnVtID0gbnVtYmVyJDEoZmllbGRWYWwpO1xuICB2YXIgaXNWYWxTdHIgPSBzdHJpbmcodmFsdWUpO1xuICB2YXIgZmllbGRTdHIsIHZhbFN0cjtcbiAgdmFyIGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlO1xuICB2YXIgbm90RXhwciA9IGZhbHNlO1xuICB2YXIgaXNJbmVxQ21wID0gZmFsc2U7XG4gIGlmIChvcGVyYXRvci5pbmRleE9mKCchJykgPj0gMCkge1xuICAgIG9wZXJhdG9yID0gb3BlcmF0b3IucmVwbGFjZSgnIScsICcnKTtcbiAgICBub3RFeHByID0gdHJ1ZTtcbiAgfVxuICBpZiAob3BlcmF0b3IuaW5kZXhPZignQCcpID49IDApIHtcbiAgICBvcGVyYXRvciA9IG9wZXJhdG9yLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgY2FzZUluc2Vuc2l0aXZlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNGaWVsZFN0ciB8fCBpc1ZhbFN0ciB8fCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBmaWVsZFN0ciA9ICFpc0ZpZWxkU3RyICYmICFpc0ZpZWxkTnVtID8gJycgOiAnJyArIGZpZWxkVmFsO1xuICAgIHZhbFN0ciA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBpZiB3ZSdyZSBkb2luZyBhIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiwgdGhlbiB3ZSdyZSB1c2luZyBhIFNUUklORyBjb21wYXJpc29uXG4gIC8vIGV2ZW4gaWYgd2UncmUgY29tcGFyaW5nIG51bWJlcnNcbiAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgIGZpZWxkVmFsID0gZmllbGRTdHIgPSBmaWVsZFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbHVlID0gdmFsU3RyID0gdmFsU3RyLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgIGNhc2UgJyo9JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0cikgPj0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJyQ9JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0ciwgZmllbGRTdHIubGVuZ3RoIC0gdmFsU3RyLmxlbmd0aCkgPj0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ149JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFN0ci5pbmRleE9mKHZhbFN0cikgPT09IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc9JzpcbiAgICAgIG1hdGNoZXMgPSBmaWVsZFZhbCA9PT0gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc+JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPiB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJz49JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPj0gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc8JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPCB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJzw9JzpcbiAgICAgIGlzSW5lcUNtcCA9IHRydWU7XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPD0gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbWF0Y2hlcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBhcHBseSB0aGUgbm90IG9wLCBidXQgbnVsbCB2YWxzIGZvciBpbmVxdWFsaXRpZXMgc2hvdWxkIGFsd2F5cyBzdGF5IG5vbi1tYXRjaGluZ1xuICBpZiAobm90RXhwciAmJiAoZmllbGRWYWwgIT0gbnVsbCB8fCAhaXNJbmVxQ21wKSkge1xuICAgIG1hdGNoZXMgPSAhbWF0Y2hlcztcbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn07XG52YXIgYm9vbENtcCA9IGZ1bmN0aW9uIGJvb2xDbXAoZmllbGRWYWwsIG9wZXJhdG9yKSB7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlICc/JzpcbiAgICAgIHJldHVybiBmaWVsZFZhbCA/IHRydWUgOiBmYWxzZTtcbiAgICBjYXNlICchJzpcbiAgICAgIHJldHVybiBmaWVsZFZhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICBjYXNlICdeJzpcbiAgICAgIHJldHVybiBmaWVsZFZhbCA9PT0gdW5kZWZpbmVkO1xuICB9XG59O1xudmFyIGV4aXN0Q21wID0gZnVuY3Rpb24gZXhpc3RDbXAoZmllbGRWYWwpIHtcbiAgcmV0dXJuIGZpZWxkVmFsICE9PSB1bmRlZmluZWQ7XG59O1xudmFyIGRhdGEkMSA9IGZ1bmN0aW9uIGRhdGEoZWxlLCBmaWVsZCkge1xuICByZXR1cm4gZWxlLmRhdGEoZmllbGQpO1xufTtcbnZhciBtZXRhID0gZnVuY3Rpb24gbWV0YShlbGUsIGZpZWxkKSB7XG4gIHJldHVybiBlbGVbZmllbGRdKCk7XG59O1xuXG4vKiogQSBsb29rdXAgb2YgYG1hdGNoKGNoZWNrLCBlbGUpYCBmdW5jdGlvbnMgYnkgYFR5cGVgIGludCAqL1xudmFyIG1hdGNoID0gW107XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBxdWVyeSBtYXRjaGVzIGZvciB0aGUgZWxlbWVudFxuICogQHBhcmFtIHF1ZXJ5IFRoZSBgeyB0eXBlLCB2YWx1ZSwgLi4uIH1gIHF1ZXJ5IG9iamVjdFxuICogQHBhcmFtIGVsZSBUaGUgZWxlbWVudCB0byBjb21wYXJlIGFnYWluc3RcbiovXG52YXIgbWF0Y2hlcyQxID0gZnVuY3Rpb24gbWF0Y2hlcyhxdWVyeSwgZWxlKSB7XG4gIHJldHVybiBxdWVyeS5jaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoaykge1xuICAgIHJldHVybiBtYXRjaFtjaGsudHlwZV0oY2hrLCBlbGUpO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkdST1VQXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBncm91cCA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gZ3JvdXAgPT09ICcqJyB8fCBncm91cCA9PT0gZWxlLmdyb3VwKCk7XG59O1xubWF0Y2hbVHlwZS5TVEFURV0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgc3RhdGVTZWxlY3RvciA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gc3RhdGVTZWxlY3Rvck1hdGNoZXMoc3RhdGVTZWxlY3RvciwgZWxlKTtcbn07XG5tYXRjaFtUeXBlLklEXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBpZCA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gZWxlLmlkKCkgPT09IGlkO1xufTtcbm1hdGNoW1R5cGUuQ0xBU1NdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGNscyA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gZWxlLmhhc0NsYXNzKGNscyk7XG59O1xubWF0Y2hbVHlwZS5NRVRBX0NPTVBBUkVdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcixcbiAgICB2YWx1ZSA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gdmFsQ21wKG1ldGEoZWxlLCBmaWVsZCksIG9wZXJhdG9yLCB2YWx1ZSk7XG59O1xubWF0Y2hbVHlwZS5EQVRBX0NPTVBBUkVdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcixcbiAgICB2YWx1ZSA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gdmFsQ21wKGRhdGEkMShlbGUsIGZpZWxkKSwgb3BlcmF0b3IsIHZhbHVlKTtcbn07XG5tYXRjaFtUeXBlLkRBVEFfQk9PTF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgZmllbGQgPSBjaGVjay5maWVsZCxcbiAgICBvcGVyYXRvciA9IGNoZWNrLm9wZXJhdG9yO1xuICByZXR1cm4gYm9vbENtcChkYXRhJDEoZWxlLCBmaWVsZCksIG9wZXJhdG9yKTtcbn07XG5tYXRjaFtUeXBlLkRBVEFfRVhJU1RdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQ7XG4gICAgY2hlY2sub3BlcmF0b3I7XG4gIHJldHVybiBleGlzdENtcChkYXRhJDEoZWxlLCBmaWVsZCkpO1xufTtcbm1hdGNoW1R5cGUuVU5ESVJFQ1RFRF9FREdFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBxQSA9IGNoZWNrLm5vZGVzWzBdO1xuICB2YXIgcUIgPSBjaGVjay5ub2Rlc1sxXTtcbiAgdmFyIHNyYyA9IGVsZS5zb3VyY2UoKTtcbiAgdmFyIHRndCA9IGVsZS50YXJnZXQoKTtcbiAgcmV0dXJuIG1hdGNoZXMkMShxQSwgc3JjKSAmJiBtYXRjaGVzJDEocUIsIHRndCkgfHwgbWF0Y2hlcyQxKHFCLCBzcmMpICYmIG1hdGNoZXMkMShxQSwgdGd0KTtcbn07XG5tYXRjaFtUeXBlLk5PREVfTkVJR0hCT1JdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5ub2RlLCBlbGUpICYmIGVsZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4uaXNOb2RlKCkgJiYgbWF0Y2hlcyQxKGNoZWNrLm5laWdoYm9yLCBuKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5ESVJFQ1RFRF9FREdFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2suc291cmNlLCBlbGUuc291cmNlKCkpICYmIG1hdGNoZXMkMShjaGVjay50YXJnZXQsIGVsZS50YXJnZXQoKSk7XG59O1xubWF0Y2hbVHlwZS5OT0RFX1NPVVJDRV0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnNvdXJjZSwgZWxlKSAmJiBlbGUub3V0Z29lcnMoKS5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIG4uaXNOb2RlKCkgJiYgbWF0Y2hlcyQxKGNoZWNrLnRhcmdldCwgbik7XG4gIH0pO1xufTtcbm1hdGNoW1R5cGUuTk9ERV9UQVJHRVRdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay50YXJnZXQsIGVsZSkgJiYgZWxlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbiAobikge1xuICAgIHJldHVybiBuLmlzTm9kZSgpICYmIG1hdGNoZXMkMShjaGVjay5zb3VyY2UsIG4pO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkNISUxEXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2suY2hpbGQsIGVsZSkgJiYgbWF0Y2hlcyQxKGNoZWNrLnBhcmVudCwgZWxlLnBhcmVudCgpKTtcbn07XG5tYXRjaFtUeXBlLlBBUkVOVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnBhcmVudCwgZWxlKSAmJiBlbGUuY2hpbGRyZW4oKS5zb21lKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5jaGlsZCwgYyk7XG4gIH0pO1xufTtcbm1hdGNoW1R5cGUuREVTQ0VOREFOVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmRlc2NlbmRhbnQsIGVsZSkgJiYgZWxlLmFuY2VzdG9ycygpLnNvbWUoZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmFuY2VzdG9yLCBhKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5BTkNFU1RPUl0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmFuY2VzdG9yLCBlbGUpICYmIGVsZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24gKGQpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmRlc2NlbmRhbnQsIGQpO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkNPTVBPVU5EX1NQTElUXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2suc3ViamVjdCwgZWxlKSAmJiBtYXRjaGVzJDEoY2hlY2subGVmdCwgZWxlKSAmJiBtYXRjaGVzJDEoY2hlY2sucmlnaHQsIGVsZSk7XG59O1xubWF0Y2hbVHlwZS5UUlVFXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xubWF0Y2hbVHlwZS5DT0xMRUNUSU9OXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBjb2xsZWN0aW9uID0gY2hlY2sudmFsdWU7XG4gIHJldHVybiBjb2xsZWN0aW9uLmhhcyhlbGUpO1xufTtcbm1hdGNoW1R5cGUuRklMVEVSXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBmaWx0ZXIgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIGZpbHRlcihlbGUpO1xufTtcblxuLy8gZmlsdGVyIGFuIGV4aXN0aW5nIGNvbGxlY3Rpb25cbnZhciBmaWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gZm9yIDEgaWQgI2ZvbyBxdWVyaWVzLCBqdXN0IGdldCB0aGUgZWxlbWVudFxuICBpZiAoc2VsZi5sZW5ndGggPT09IDEgJiYgc2VsZlswXS5jaGVja3MubGVuZ3RoID09PSAxICYmIHNlbGZbMF0uY2hlY2tzWzBdLnR5cGUgPT09IFR5cGUuSUQpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5nZXRFbGVtZW50QnlJZChzZWxmWzBdLmNoZWNrc1swXS52YWx1ZSkuY29sbGVjdGlvbigpO1xuICB9XG4gIHZhciBzZWxlY3RvckZ1bmN0aW9uID0gZnVuY3Rpb24gc2VsZWN0b3JGdW5jdGlvbihlbGVtZW50KSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgcXVlcnkgPSBzZWxmW2pdO1xuICAgICAgaWYgKG1hdGNoZXMkMShxdWVyeSwgZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgaWYgKHNlbGYudGV4dCgpID09IG51bGwpIHtcbiAgICBzZWxlY3RvckZ1bmN0aW9uID0gZnVuY3Rpb24gc2VsZWN0b3JGdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGNvbGxlY3Rpb24uZmlsdGVyKHNlbGVjdG9yRnVuY3Rpb24pO1xufTsgLy8gZmlsdGVyXG5cbi8vIGRvZXMgc2VsZWN0b3IgbWF0Y2ggYSBzaW5nbGUgZWxlbWVudD9cbnZhciBtYXRjaGVzID0gZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGYubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgcXVlcnkgPSBzZWxmW2pdO1xuICAgIGlmIChtYXRjaGVzJDEocXVlcnksIGVsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59OyAvLyBtYXRjaGVzXG5cbnZhciBtYXRjaGluZyA9IHtcbiAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgZmlsdGVyOiBmaWx0ZXJcbn07XG5cbnZhciBTZWxlY3RvciA9IGZ1bmN0aW9uIFNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gIHRoaXMuaW5wdXRUZXh0ID0gc2VsZWN0b3I7XG4gIHRoaXMuY3VycmVudFN1YmplY3QgPSBudWxsO1xuICB0aGlzLmNvbXBvdW5kQ291bnQgPSAwO1xuICB0aGlzLmVkZ2VDb3VudCA9IDA7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgaWYgKHNlbGVjdG9yID09IG51bGwgfHwgc3RyaW5nKHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5tYXRjaCgvXlxccyokLykpIDsgZWxzZSBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihzZWxlY3RvcikpIHtcbiAgICB0aGlzLmFkZFF1ZXJ5KHtcbiAgICAgIGNoZWNrczogW3tcbiAgICAgICAgdHlwZTogVHlwZS5DT0xMRUNUSU9OLFxuICAgICAgICB2YWx1ZTogc2VsZWN0b3IuY29sbGVjdGlvbigpXG4gICAgICB9XVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGZuJDYoc2VsZWN0b3IpKSB7XG4gICAgdGhpcy5hZGRRdWVyeSh7XG4gICAgICBjaGVja3M6IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuRklMVEVSLFxuICAgICAgICB2YWx1ZTogc2VsZWN0b3JcbiAgICAgIH1dXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHNlbGVjdG9yKSkge1xuICAgIGlmICghdGhpcy5wYXJzZShzZWxlY3RvcikpIHtcbiAgICAgIHRoaXMuaW52YWxpZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVycm9yKCdBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAnKTtcbiAgfVxufTtcbnZhciBzZWxmbiA9IFNlbGVjdG9yLnByb3RvdHlwZTtcbltwYXJzZSQxLCBtYXRjaGluZ10uZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICByZXR1cm4gZXh0ZW5kKHNlbGZuLCBwKTtcbn0pO1xuc2VsZm4udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0O1xufTtcbnNlbGZuLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5zZWxmbi5lcSA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiB0aGlzW2ldO1xufTtcbnNlbGZuLnNhbWVUZXh0ID0gZnVuY3Rpb24gKG90aGVyU2VsKSB7XG4gIHJldHVybiAhdGhpcy5pbnZhbGlkICYmICFvdGhlclNlbC5pbnZhbGlkICYmIHRoaXMudGV4dCgpID09PSBvdGhlclNlbC50ZXh0KCk7XG59O1xuc2VsZm4uYWRkUXVlcnkgPSBmdW5jdGlvbiAocSkge1xuICB0aGlzW3RoaXMubGVuZ3RoKytdID0gcTtcbn07XG5zZWxmbi5zZWxlY3RvciA9IHNlbGZuLnRvU3RyaW5nO1xuXG52YXIgZWxlc2ZuJGcgPSB7XG4gIGFsbEFyZTogZnVuY3Rpb24gYWxsQXJlKHNlbGVjdG9yKSB7XG4gICAgdmFyIHNlbE9iaiA9IG5ldyBTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIHNlbE9iai5tYXRjaGVzKGVsZSk7XG4gICAgfSk7XG4gIH0sXG4gIGlzOiBmdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICAgIHZhciBzZWxPYmogPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIHNlbE9iai5tYXRjaGVzKGVsZSk7XG4gICAgfSk7XG4gIH0sXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoZm4sIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXQgPSAhdGhpc0FyZyA/IGZuKHRoaXNbaV0sIGksIHRoaXMpIDogZm4uYXBwbHkodGhpc0FyZywgW3RoaXNbaV0sIGksIHRoaXNdKTtcbiAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGZuLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmV0ID0gIXRoaXNBcmcgPyBmbih0aGlzW2ldLCBpLCB0aGlzKSA6IGZuLmFwcGx5KHRoaXNBcmcsIFt0aGlzW2ldLCBpLCB0aGlzXSk7XG4gICAgICBpZiAoIXJldCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBzYW1lOiBmdW5jdGlvbiBzYW1lKGNvbGxlY3Rpb24pIHtcbiAgICAvLyBjaGVhcCBjb2xsZWN0aW9uIHJlZiBjaGVja1xuICAgIGlmICh0aGlzID09PSBjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29sbGVjdGlvbiA9IHRoaXMuY3koKS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIHZhciB0aGlzTGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIGNvbGxlY3Rpb25MZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblxuICAgIC8vIGNoZWFwIGxlbmd0aCBjaGVja1xuICAgIGlmICh0aGlzTGVuZ3RoICE9PSBjb2xsZWN0aW9uTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gY2hlYXAgZWxlbWVudCByZWYgY2hlY2tcbiAgICBpZiAodGhpc0xlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXNbMF0gPT09IGNvbGxlY3Rpb25bMF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uLmhhc0VsZW1lbnRXaXRoSWQoZWxlLmlkKCkpO1xuICAgIH0pO1xuICB9LFxuICBhbnlTYW1lOiBmdW5jdGlvbiBhbnlTYW1lKGNvbGxlY3Rpb24pIHtcbiAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbi5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICB9KTtcbiAgfSxcbiAgYWxsQXJlTmVpZ2hib3JzOiBmdW5jdGlvbiBhbGxBcmVOZWlnaGJvcnMoY29sbGVjdGlvbikge1xuICAgIGNvbGxlY3Rpb24gPSB0aGlzLmN5KCkuY29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICB2YXIgbmhvb2QgPSB0aGlzLm5laWdoYm9yaG9vZCgpO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBuaG9vZC5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICB9KTtcbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uIGNvbnRhaW5zKGNvbGxlY3Rpb24pIHtcbiAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBzZWxmLmhhc0VsZW1lbnRXaXRoSWQoZWxlLmlkKCkpO1xuICAgIH0pO1xuICB9XG59O1xuZWxlc2ZuJGcuYWxsQXJlTmVpZ2hib3VycyA9IGVsZXNmbiRnLmFsbEFyZU5laWdoYm9ycztcbmVsZXNmbiRnLmhhcyA9IGVsZXNmbiRnLmNvbnRhaW5zO1xuZWxlc2ZuJGcuZXF1YWwgPSBlbGVzZm4kZy5lcXVhbHMgPSBlbGVzZm4kZy5zYW1lO1xuXG52YXIgY2FjaGUgPSBmdW5jdGlvbiBjYWNoZShmbiwgbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJhdmVyc2FsQ2FjaGUoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgIHZhciBzZWxlY3Rvck9yRWxlcyA9IGFyZzE7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciBrZXk7XG4gICAgaWYgKHNlbGVjdG9yT3JFbGVzID09IG51bGwpIHtcbiAgICAgIGtleSA9ICcnO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihzZWxlY3Rvck9yRWxlcykgJiYgc2VsZWN0b3JPckVsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBrZXkgPSBzZWxlY3Rvck9yRWxlcy5pZCgpO1xuICAgIH1cbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDEgJiYga2V5KSB7XG4gICAgICB2YXIgX3AgPSBlbGVzWzBdLl9wcml2YXRlO1xuICAgICAgdmFyIHRjaCA9IF9wLnRyYXZlcnNhbENhY2hlID0gX3AudHJhdmVyc2FsQ2FjaGUgfHwge307XG4gICAgICB2YXIgY2ggPSB0Y2hbbmFtZV0gPSB0Y2hbbmFtZV0gfHwgW107XG4gICAgICB2YXIgaGFzaCA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgICAgIHZhciBjYWNoZUhpdCA9IGNoW2hhc2hdO1xuICAgICAgaWYgKGNhY2hlSGl0KSB7XG4gICAgICAgIHJldHVybiBjYWNoZUhpdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaFtoYXNoXSA9IGZuLmNhbGwoZWxlcywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKGVsZXMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBlbGVzZm4kZiA9IHtcbiAgcGFyZW50OiBmdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdO1xuXG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBzaW5nbGUgZWxlIGNhbGxcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzWzBdLl9wcml2YXRlLnBhcmVudDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBfcGFyZW50ID0gZWxlLl9wcml2YXRlLnBhcmVudDtcbiAgICAgIGlmIChfcGFyZW50KSB7XG4gICAgICAgIHBhcmVudHMucHVzaChfcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocGFyZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgcGFyZW50czogZnVuY3Rpb24gcGFyZW50cyhzZWxlY3Rvcikge1xuICAgIHZhciBwYXJlbnRzID0gW107XG4gICAgdmFyIGVsZXMgPSB0aGlzLnBhcmVudCgpO1xuICAgIHdoaWxlIChlbGVzLm5vbmVtcHR5KCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgcGFyZW50cy5wdXNoKGVsZSk7XG4gICAgICB9XG4gICAgICBlbGVzID0gZWxlcy5wYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocGFyZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgY29tbW9uQW5jZXN0b3JzOiBmdW5jdGlvbiBjb21tb25BbmNlc3RvcnMoc2VsZWN0b3IpIHtcbiAgICB2YXIgYW5jZXN0b3JzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgcGFyZW50cyA9IGVsZS5wYXJlbnRzKCk7XG4gICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMgfHwgcGFyZW50cztcbiAgICAgIGFuY2VzdG9ycyA9IGFuY2VzdG9ycy5pbnRlcnNlY3QocGFyZW50cyk7IC8vIGN1cnJlbnQgbGlzdCBtdXN0IGJlIGNvbW1vbiB3aXRoIGN1cnJlbnQgZWxlIHBhcmVudHMgc2V0XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ycy5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LFxuICBvcnBoYW5zOiBmdW5jdGlvbiBvcnBoYW5zKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNPcnBoYW4oKTtcbiAgICB9KS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LFxuICBub25vcnBoYW5zOiBmdW5jdGlvbiBub25vcnBoYW5zKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNDaGlsZCgpO1xuICAgIH0pLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIGNoaWxkcmVuOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgdmFyIGVsZUNoaWxkcmVuID0gZWxlLl9wcml2YXRlLmNoaWxkcmVuO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZUNoaWxkcmVuW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oY2hpbGRyZW4sIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICdjaGlsZHJlbicpLFxuICBzaWJsaW5nczogZnVuY3Rpb24gc2libGluZ3Moc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LFxuICBpc1BhcmVudDogZnVuY3Rpb24gaXNQYXJlbnQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoICE9PSAwO1xuICAgIH1cbiAgfSxcbiAgaXNDaGlsZGxlc3M6IGZ1bmN0aW9uIGlzQ2hpbGRsZXNzKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCkgJiYgZWxlLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gIH0sXG4gIGlzQ2hpbGQ6IGZ1bmN0aW9uIGlzQ2hpbGQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUucGFyZW50ICE9IG51bGw7XG4gICAgfVxuICB9LFxuICBpc09ycGhhbjogZnVuY3Rpb24gaXNPcnBoYW4oKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUucGFyZW50ID09IG51bGw7XG4gICAgfVxuICB9LFxuICBkZXNjZW5kYW50czogZnVuY3Rpb24gZGVzY2VuZGFudHMoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICBmdW5jdGlvbiBhZGQoZWxlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICBlbGVtZW50cy5wdXNoKGVsZSk7XG4gICAgICAgIGlmIChlbGUuY2hpbGRyZW4oKS5ub25lbXB0eSgpKSB7XG4gICAgICAgICAgYWRkKGVsZS5jaGlsZHJlbigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhZGQodGhpcy5jaGlsZHJlbigpKTtcbiAgICByZXR1cm4gdGhpcy5zcGF3bihlbGVtZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGZvckVhY2hDb21wb3VuZChlbGVzLCBmbiwgaW5jbHVkZVNlbGYsIHJlY3Vyc2l2ZVN0ZXApIHtcbiAgdmFyIHEgPSBbXTtcbiAgdmFyIGRpZCA9IG5ldyBTZXQkMSgpO1xuICB2YXIgY3kgPSBlbGVzLmN5KCk7XG4gIHZhciBoYXNDb21wb3VuZHMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIGlmIChpbmNsdWRlU2VsZikge1xuICAgICAgcS5wdXNoKGVsZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgIHJlY3Vyc2l2ZVN0ZXAocSwgZGlkLCBlbGUpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAocS5sZW5ndGggPiAwKSB7XG4gICAgdmFyIF9lbGUgPSBxLnNoaWZ0KCk7XG4gICAgZm4oX2VsZSk7XG4gICAgZGlkLmFkZChfZWxlLmlkKCkpO1xuICAgIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgIHJlY3Vyc2l2ZVN0ZXAocSwgZGlkLCBfZWxlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZXM7XG59XG5mdW5jdGlvbiBhZGRDaGlsZHJlbihxLCBkaWQsIGVsZSkge1xuICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBlbGUuX3ByaXZhdGUuY2hpbGRyZW47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoIWRpZC5oYXMoY2hpbGQuaWQoKSkpIHtcbiAgICAgICAgcS5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gdmVyeSBlZmZpY2llbnQgdmVyc2lvbiBvZiBlbGVzLmFkZCggZWxlcy5kZXNjZW5kYW50cygpICkuZm9yRWFjaCgpXG4vLyBmb3IgaW50ZXJuYWwgdXNlXG5lbGVzZm4kZi5mb3JFYWNoRG93biA9IGZ1bmN0aW9uIChmbikge1xuICB2YXIgaW5jbHVkZVNlbGYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHJldHVybiBmb3JFYWNoQ29tcG91bmQodGhpcywgZm4sIGluY2x1ZGVTZWxmLCBhZGRDaGlsZHJlbik7XG59O1xuZnVuY3Rpb24gYWRkUGFyZW50KHEsIGRpZCwgZWxlKSB7XG4gIGlmIChlbGUuaXNDaGlsZCgpKSB7XG4gICAgdmFyIHBhcmVudCA9IGVsZS5fcHJpdmF0ZS5wYXJlbnQ7XG4gICAgaWYgKCFkaWQuaGFzKHBhcmVudC5pZCgpKSkge1xuICAgICAgcS5wdXNoKHBhcmVudCk7XG4gICAgfVxuICB9XG59XG5lbGVzZm4kZi5mb3JFYWNoVXAgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdmFyIGluY2x1ZGVTZWxmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICByZXR1cm4gZm9yRWFjaENvbXBvdW5kKHRoaXMsIGZuLCBpbmNsdWRlU2VsZiwgYWRkUGFyZW50KTtcbn07XG5mdW5jdGlvbiBhZGRQYXJlbnRBbmRDaGlsZHJlbihxLCBkaWQsIGVsZSkge1xuICBhZGRQYXJlbnQocSwgZGlkLCBlbGUpO1xuICBhZGRDaGlsZHJlbihxLCBkaWQsIGVsZSk7XG59XG5lbGVzZm4kZi5mb3JFYWNoVXBBbmREb3duID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBpbmNsdWRlU2VsZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgcmV0dXJuIGZvckVhY2hDb21wb3VuZCh0aGlzLCBmbiwgaW5jbHVkZVNlbGYsIGFkZFBhcmVudEFuZENoaWxkcmVuKTtcbn07XG5cbi8vIGFsaWFzZXNcbmVsZXNmbiRmLmFuY2VzdG9ycyA9IGVsZXNmbiRmLnBhcmVudHM7XG5cbnZhciBmbiQ1LCBlbGVzZm4kZTtcbmZuJDUgPSBlbGVzZm4kZSA9IHtcbiAgZGF0YTogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAnZGF0YScsXG4gICAgYmluZGluZ0V2ZW50OiAnZGF0YScsXG4gICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nRXZlbnQ6ICdkYXRhJyxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgIGltbXV0YWJsZUtleXM6IHtcbiAgICAgICdpZCc6IHRydWUsXG4gICAgICAnc291cmNlJzogdHJ1ZSxcbiAgICAgICd0YXJnZXQnOiB0cnVlLFxuICAgICAgJ3BhcmVudCc6IHRydWVcbiAgICB9LFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByZW1vdmVEYXRhOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdkYXRhJyxcbiAgICBldmVudDogJ2RhdGEnLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgaW1tdXRhYmxlS2V5czoge1xuICAgICAgJ2lkJzogdHJ1ZSxcbiAgICAgICdzb3VyY2UnOiB0cnVlLFxuICAgICAgJ3RhcmdldCc6IHRydWUsXG4gICAgICAncGFyZW50JzogdHJ1ZVxuICAgIH0sXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHNjcmF0Y2g6IGRlZmluZS5kYXRhKHtcbiAgICBmaWVsZDogJ3NjcmF0Y2gnLFxuICAgIGJpbmRpbmdFdmVudDogJ3NjcmF0Y2gnLFxuICAgIGFsbG93QmluZGluZzogdHJ1ZSxcbiAgICBhbGxvd1NldHRpbmc6IHRydWUsXG4gICAgc2V0dGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IHRydWUsXG4gICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgIGFsbG93R2V0dGluZzogdHJ1ZSxcbiAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICB9KSxcbiAgcmVtb3ZlU2NyYXRjaDogZGVmaW5lLnJlbW92ZURhdGEoe1xuICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgZXZlbnQ6ICdzY3JhdGNoJyxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgdHJpZ2dlckV2ZW50OiB0cnVlLFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAncnNjcmF0Y2gnLFxuICAgIGFsbG93QmluZGluZzogZmFsc2UsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiBmYWxzZSxcbiAgICBhbGxvd0dldHRpbmc6IHRydWVcbiAgfSksXG4gIHJlbW92ZVJzY3JhdGNoOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdyc2NyYXRjaCcsXG4gICAgdHJpZ2dlckV2ZW50OiBmYWxzZVxuICB9KSxcbiAgaWQ6IGZ1bmN0aW9uIGlkKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFsaWFzZXNcbmZuJDUuYXR0ciA9IGZuJDUuZGF0YTtcbmZuJDUucmVtb3ZlQXR0ciA9IGZuJDUucmVtb3ZlRGF0YTtcbnZhciBkYXRhID0gZWxlc2ZuJGU7XG5cbnZhciBlbGVzZm4kZCA9IHt9O1xuZnVuY3Rpb24gZGVmaW5lRGVncmVlRnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmNsdWRlTG9vcHMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKGluY2x1ZGVMb29wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmNsdWRlTG9vcHMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNlbGYuaXNOb2RlKCkgJiYgIXNlbGYucmVtb3ZlZCgpKSB7XG4gICAgICB2YXIgZGVncmVlID0gMDtcbiAgICAgIHZhciBub2RlID0gc2VsZlswXTtcbiAgICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IG5vZGUuX3ByaXZhdGUuZWRnZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbm5lY3RlZEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlZGdlID0gY29ubmVjdGVkRWRnZXNbaV07XG4gICAgICAgIGlmICghaW5jbHVkZUxvb3BzICYmIGVkZ2UuaXNMb29wKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBkZWdyZWUgKz0gY2FsbGJhY2sobm9kZSwgZWRnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVncmVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xufVxuZXh0ZW5kKGVsZXNmbiRkLCB7XG4gIGRlZ3JlZTogZGVmaW5lRGVncmVlRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGVkZ2UpIHtcbiAgICBpZiAoZWRnZS5zb3VyY2UoKS5zYW1lKGVkZ2UudGFyZ2V0KCkpKSB7XG4gICAgICByZXR1cm4gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9KSxcbiAgaW5kZWdyZWU6IGRlZmluZURlZ3JlZUZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBlZGdlKSB7XG4gICAgaWYgKGVkZ2UudGFyZ2V0KCkuc2FtZShub2RlKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSksXG4gIG91dGRlZ3JlZTogZGVmaW5lRGVncmVlRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGVkZ2UpIHtcbiAgICBpZiAoZWRnZS5zb3VyY2UoKS5zYW1lKG5vZGUpKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KVxufSk7XG5mdW5jdGlvbiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbihkZWdyZWVGbiwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmNsdWRlTG9vcHMpIHtcbiAgICB2YXIgcmV0O1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gbm9kZXNbaV07XG4gICAgICB2YXIgZGVncmVlID0gZWxlW2RlZ3JlZUZuXShpbmNsdWRlTG9vcHMpO1xuICAgICAgaWYgKGRlZ3JlZSAhPT0gdW5kZWZpbmVkICYmIChyZXQgPT09IHVuZGVmaW5lZCB8fCBjYWxsYmFjayhkZWdyZWUsIHJldCkpKSB7XG4gICAgICAgIHJldCA9IGRlZ3JlZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn1cbmV4dGVuZChlbGVzZm4kZCwge1xuICBtaW5EZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtaW4pIHtcbiAgICByZXR1cm4gZGVncmVlIDwgbWluO1xuICB9KSxcbiAgbWF4RGVncmVlOiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbignZGVncmVlJywgZnVuY3Rpb24gKGRlZ3JlZSwgbWF4KSB7XG4gICAgcmV0dXJuIGRlZ3JlZSA+IG1heDtcbiAgfSksXG4gIG1pbkluZGVncmVlOiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbignaW5kZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtaW4pIHtcbiAgICByZXR1cm4gZGVncmVlIDwgbWluO1xuICB9KSxcbiAgbWF4SW5kZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdpbmRlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1heCkge1xuICAgIHJldHVybiBkZWdyZWUgPiBtYXg7XG4gIH0pLFxuICBtaW5PdXRkZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdvdXRkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtaW4pIHtcbiAgICByZXR1cm4gZGVncmVlIDwgbWluO1xuICB9KSxcbiAgbWF4T3V0ZGVncmVlOiBkZWZpbmVEZWdyZWVCb3VuZHNGdW5jdGlvbignb3V0ZGVncmVlJywgZnVuY3Rpb24gKGRlZ3JlZSwgbWF4KSB7XG4gICAgcmV0dXJuIGRlZ3JlZSA+IG1heDtcbiAgfSlcbn0pO1xuZXh0ZW5kKGVsZXNmbiRkLCB7XG4gIHRvdGFsRGVncmVlOiBmdW5jdGlvbiB0b3RhbERlZ3JlZShpbmNsdWRlTG9vcHMpIHtcbiAgICB2YXIgdG90YWwgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbCArPSBub2Rlc1tpXS5kZWdyZWUoaW5jbHVkZUxvb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG59KTtcblxudmFyIGZuJDQsIGVsZXNmbiRjO1xudmFyIGJlZm9yZVBvc2l0aW9uU2V0ID0gZnVuY3Rpb24gYmVmb3JlUG9zaXRpb25TZXQoZWxlcywgbmV3UG9zLCBzaWxlbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgaWYgKCFlbGUubG9ja2VkKCkpIHtcbiAgICAgIHZhciBvbGRQb3MgPSBlbGUuX3ByaXZhdGUucG9zaXRpb247XG4gICAgICB2YXIgZGVsdGEgPSB7XG4gICAgICAgIHg6IG5ld1Bvcy54ICE9IG51bGwgPyBuZXdQb3MueCAtIG9sZFBvcy54IDogMCxcbiAgICAgICAgeTogbmV3UG9zLnkgIT0gbnVsbCA/IG5ld1Bvcy55IC0gb2xkUG9zLnkgOiAwXG4gICAgICB9O1xuICAgICAgaWYgKGVsZS5pc1BhcmVudCgpICYmICEoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSkge1xuICAgICAgICBlbGUuY2hpbGRyZW4oKS5zaGlmdChkZWx0YSwgc2lsZW50KTtcbiAgICAgIH1cbiAgICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICB9XG4gIH1cbn07XG52YXIgcG9zaXRpb25EZWYgPSB7XG4gIGZpZWxkOiAncG9zaXRpb24nLFxuICBiaW5kaW5nRXZlbnQ6ICdwb3NpdGlvbicsXG4gIGFsbG93QmluZGluZzogdHJ1ZSxcbiAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICBzZXR0aW5nRXZlbnQ6ICdwb3NpdGlvbicsXG4gIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICB0cmlnZ2VyRm5OYW1lOiAnZW1pdEFuZE5vdGlmeScsXG4gIGFsbG93R2V0dGluZzogdHJ1ZSxcbiAgdmFsaWRLZXlzOiBbJ3gnLCAneSddLFxuICBiZWZvcmVHZXQ6IGZ1bmN0aW9uIGJlZm9yZUdldChlbGUpIHtcbiAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgfSxcbiAgYmVmb3JlU2V0OiBmdW5jdGlvbiBiZWZvcmVTZXQoZWxlcywgbmV3UG9zKSB7XG4gICAgYmVmb3JlUG9zaXRpb25TZXQoZWxlcywgbmV3UG9zLCBmYWxzZSk7XG4gIH0sXG4gIG9uU2V0OiBmdW5jdGlvbiBvblNldChlbGVzKSB7XG4gICAgZWxlcy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgfSxcbiAgY2FuU2V0OiBmdW5jdGlvbiBjYW5TZXQoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUubG9ja2VkKCk7XG4gIH1cbn07XG5mbiQ0ID0gZWxlc2ZuJGMgPSB7XG4gIHBvc2l0aW9uOiBkZWZpbmUuZGF0YShwb3NpdGlvbkRlZiksXG4gIC8vIHBvc2l0aW9uIGJ1dCBubyBub3RpZmljYXRpb24gdG8gcmVuZGVyZXJcbiAgc2lsZW50UG9zaXRpb246IGRlZmluZS5kYXRhKGV4dGVuZCh7fSwgcG9zaXRpb25EZWYsIHtcbiAgICBhbGxvd0JpbmRpbmc6IGZhbHNlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogZmFsc2UsXG4gICAgYWxsb3dHZXR0aW5nOiBmYWxzZSxcbiAgICBiZWZvcmVTZXQ6IGZ1bmN0aW9uIGJlZm9yZVNldChlbGVzLCBuZXdQb3MpIHtcbiAgICAgIGJlZm9yZVBvc2l0aW9uU2V0KGVsZXMsIG5ld1BvcywgdHJ1ZSk7XG4gICAgfSxcbiAgICBvblNldDogZnVuY3Rpb24gb25TZXQoZWxlcykge1xuICAgICAgZWxlcy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICB9XG4gIH0pKSxcbiAgcG9zaXRpb25zOiBmdW5jdGlvbiBwb3NpdGlvbnMocG9zLCBzaWxlbnQpIHtcbiAgICBpZiAocGxhaW5PYmplY3QocG9zKSkge1xuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICB0aGlzLnNpbGVudFBvc2l0aW9uKHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aW9uKHBvcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmbiQ2KHBvcykpIHtcbiAgICAgIHZhciBfZm4gPSBwb3M7XG4gICAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICAgIHZhciBfcG9zID0gdm9pZCAwO1xuICAgICAgICBpZiAoX3BvcyA9IF9mbihlbGUsIGkpKSB7XG4gICAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgICAgZWxlLnNpbGVudFBvc2l0aW9uKF9wb3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGUucG9zaXRpb24oX3Bvcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBzaWxlbnRQb3NpdGlvbnM6IGZ1bmN0aW9uIHNpbGVudFBvc2l0aW9ucyhwb3MpIHtcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbnMocG9zLCB0cnVlKTtcbiAgfSxcbiAgc2hpZnQ6IGZ1bmN0aW9uIHNoaWZ0KGRpbSwgdmFsLCBzaWxlbnQpIHtcbiAgICB2YXIgZGVsdGE7XG4gICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICB4OiBudW1iZXIkMShkaW0ueCkgPyBkaW0ueCA6IDAsXG4gICAgICAgIHk6IG51bWJlciQxKGRpbS55KSA/IGRpbS55IDogMFxuICAgICAgfTtcbiAgICAgIHNpbGVudCA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyhkaW0pICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9O1xuICAgICAgZGVsdGFbZGltXSA9IHZhbDtcbiAgICB9XG4gICAgaWYgKGRlbHRhICE9IG51bGwpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcblxuICAgICAgICAvLyBleGNsdWRlIGFueSBub2RlIHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjYWxsaW5nIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSAmJiBlbGUuaXNDaGlsZCgpICYmIGVsZS5hbmNlc3RvcnMoKS5hbnlTYW1lKHRoaXMpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICB2YXIgbmV3UG9zID0ge1xuICAgICAgICAgIHg6IHBvcy54ICsgZGVsdGEueCxcbiAgICAgICAgICB5OiBwb3MueSArIGRlbHRhLnlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIGVsZS5zaWxlbnRQb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZS5wb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgc2lsZW50U2hpZnQ6IGZ1bmN0aW9uIHNpbGVudFNoaWZ0KGRpbSwgdmFsKSB7XG4gICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgIHRoaXMuc2hpZnQoZGltLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyhkaW0pICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgIHRoaXMuc2hpZnQoZGltLCB2YWwsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgLy8gZ2V0L3NldCB0aGUgcmVuZGVyZWQgKGkuZS4gb24gc2NyZWVuKSBwb3NpdG9uIG9mIHRoZSBlbGVtZW50XG4gIHJlbmRlcmVkUG9zaXRpb246IGZ1bmN0aW9uIHJlbmRlcmVkUG9zaXRpb24oZGltLCB2YWwpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgIHZhciBycG9zID0gcGxhaW5PYmplY3QoZGltKSA/IGRpbSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgc2V0dGluZyA9IHJwb3MgIT09IHVuZGVmaW5lZCB8fCB2YWwgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmcoZGltKTtcbiAgICBpZiAoZWxlICYmIGVsZS5pc05vZGUoKSkge1xuICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbGUgPSB0aGlzW2ldO1xuICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc2V0IG9uZSBkaW1lbnNpb25cbiAgICAgICAgICAgIF9lbGUucG9zaXRpb24oZGltLCAodmFsIC0gcGFuW2RpbV0pIC8gem9vbSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChycG9zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldCB3aG9sZSBwb3NpdGlvblxuICAgICAgICAgICAgX2VsZS5wb3NpdGlvbihyZW5kZXJlZFRvTW9kZWxQb3NpdGlvbihycG9zLCB6b29tLCBwYW4pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldHRpbmdcbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICBycG9zID0gbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24ocG9zLCB6b29tLCBwYW4pO1xuICAgICAgICBpZiAoZGltID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgd2hvbGUgcmVuZGVyZWQgcG9zaXRpb25cbiAgICAgICAgICByZXR1cm4gcnBvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvblxuICAgICAgICAgIHJldHVybiBycG9zW2RpbV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5nKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBmb3IgZW1wdHkgY29sbGVjdGlvbiBjYXNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgLy8gZ2V0L3NldCB0aGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICByZWxhdGl2ZVBvc2l0aW9uOiBmdW5jdGlvbiByZWxhdGl2ZVBvc2l0aW9uKGRpbSwgdmFsKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBwcG9zID0gcGxhaW5PYmplY3QoZGltKSA/IGRpbSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgc2V0dGluZyA9IHBwb3MgIT09IHVuZGVmaW5lZCB8fCB2YWwgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmcoZGltKTtcbiAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgICBpZiAoZWxlICYmIGVsZS5pc05vZGUoKSkge1xuICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbGUyID0gdGhpc1tpXTtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gaGFzQ29tcG91bmROb2RlcyA/IF9lbGUyLnBhcmVudCgpIDogbnVsbDtcbiAgICAgICAgICB2YXIgaGFzUGFyZW50ID0gcGFyZW50ICYmIHBhcmVudC5sZW5ndGggPiAwO1xuICAgICAgICAgIHZhciByZWxhdGl2ZVRvUGFyZW50ID0gaGFzUGFyZW50O1xuICAgICAgICAgIGlmIChoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFswXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9yaWdpbiA9IHJlbGF0aXZlVG9QYXJlbnQgPyBwYXJlbnQucG9zaXRpb24oKSA6IHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldCBvbmUgZGltZW5zaW9uXG4gICAgICAgICAgICBfZWxlMi5wb3NpdGlvbihkaW0sIHZhbCArIG9yaWdpbltkaW1dKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBwb3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc2V0IHdob2xlIHBvc2l0aW9uXG4gICAgICAgICAgICBfZWxlMi5wb3NpdGlvbih7XG4gICAgICAgICAgICAgIHg6IHBwb3MueCArIG9yaWdpbi54LFxuICAgICAgICAgICAgICB5OiBwcG9zLnkgKyBvcmlnaW4ueVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXR0aW5nXG4gICAgICAgIHZhciBwb3MgPSBlbGUucG9zaXRpb24oKTtcbiAgICAgICAgdmFyIF9wYXJlbnQgPSBoYXNDb21wb3VuZE5vZGVzID8gZWxlLnBhcmVudCgpIDogbnVsbDtcbiAgICAgICAgdmFyIF9oYXNQYXJlbnQgPSBfcGFyZW50ICYmIF9wYXJlbnQubGVuZ3RoID4gMDtcbiAgICAgICAgdmFyIF9yZWxhdGl2ZVRvUGFyZW50ID0gX2hhc1BhcmVudDtcbiAgICAgICAgaWYgKF9oYXNQYXJlbnQpIHtcbiAgICAgICAgICBfcGFyZW50ID0gX3BhcmVudFswXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX29yaWdpbiA9IF9yZWxhdGl2ZVRvUGFyZW50ID8gX3BhcmVudC5wb3NpdGlvbigpIDoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9O1xuICAgICAgICBwcG9zID0ge1xuICAgICAgICAgIHg6IHBvcy54IC0gX29yaWdpbi54LFxuICAgICAgICAgIHk6IHBvcy55IC0gX29yaWdpbi55XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkaW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSB3aG9sZSByZW5kZXJlZCBwb3NpdGlvblxuICAgICAgICAgIHJldHVybiBwcG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uXG4gICAgICAgICAgcmV0dXJuIHBwb3NbZGltXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNldHRpbmcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGZvciBlbXB0eSBjb2xsZWN0aW9uIGNhc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuZm4kNC5tb2RlbFBvc2l0aW9uID0gZm4kNC5wb2ludCA9IGZuJDQucG9zaXRpb247XG5mbiQ0Lm1vZGVsUG9zaXRpb25zID0gZm4kNC5wb2ludHMgPSBmbiQ0LnBvc2l0aW9ucztcbmZuJDQucmVuZGVyZWRQb2ludCA9IGZuJDQucmVuZGVyZWRQb3NpdGlvbjtcbmZuJDQucmVsYXRpdmVQb2ludCA9IGZuJDQucmVsYXRpdmVQb3NpdGlvbjtcbnZhciBwb3NpdGlvbiA9IGVsZXNmbiRjO1xuXG52YXIgZm4kMywgZWxlc2ZuJGI7XG5mbiQzID0gZWxlc2ZuJGIgPSB7fTtcbmVsZXNmbiRiLnJlbmRlcmVkQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYmIgPSB0aGlzLmJvdW5kaW5nQm94KG9wdGlvbnMpO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIHZhciB6b29tID0gY3kuem9vbSgpO1xuICB2YXIgcGFuID0gY3kucGFuKCk7XG4gIHZhciB4MSA9IGJiLngxICogem9vbSArIHBhbi54O1xuICB2YXIgeDIgPSBiYi54MiAqIHpvb20gKyBwYW4ueDtcbiAgdmFyIHkxID0gYmIueTEgKiB6b29tICsgcGFuLnk7XG4gIHZhciB5MiA9IGJiLnkyICogem9vbSArIHBhbi55O1xuICByZXR1cm4ge1xuICAgIHgxOiB4MSxcbiAgICB4MjogeDIsXG4gICAgeTE6IHkxLFxuICAgIHkyOiB5MixcbiAgICB3OiB4MiAtIHgxLFxuICAgIGg6IHkyIC0geTFcbiAgfTtcbn07XG5lbGVzZm4kYi5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzaWxlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIGlmICghY3kuc3R5bGVFbmFibGVkKCkgfHwgIWN5Lmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uIChlbGUpIHtcbiAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIF9wLmNvbXBvdW5kQm91bmRzQ2xlYW4gPSBmYWxzZTtcbiAgICAgIF9wLmJiQ2FjaGUgPSBudWxsO1xuICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgZWxlLmVtaXRBbmROb3RpZnkoJ2JvdW5kcycpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufTtcbmVsZXNmbiRiLnVwZGF0ZUNvbXBvdW5kQm91bmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG5cbiAgLy8gbm90IHBvc3NpYmxlIHRvIGRvIG9uIG5vbi1jb21wb3VuZCBncmFwaHMgb3Igd2l0aCB0aGUgc3R5bGUgZGlzYWJsZWRcbiAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSB8fCAhY3kuaGFzQ29tcG91bmROb2RlcygpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzYXZlIGN5Y2xlcyB3aGVuIGJhdGNoaW5nIC0tIGJ1dCBib3VuZHMgd2lsbCBiZSBzdGFsZSAob3Igbm90IGV4aXN0IHlldClcbiAgaWYgKCFmb3JjZSAmJiBjeS5iYXRjaGluZygpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmlzUGFyZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIF9wID0gcGFyZW50Ll9wcml2YXRlO1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbigpO1xuICAgIHZhciBpbmNsdWRlTGFiZWxzID0gcGFyZW50LnBzdHlsZSgnY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMnKS52YWx1ZSA9PT0gJ2luY2x1ZGUnO1xuICAgIHZhciBtaW4gPSB7XG4gICAgICB3aWR0aDoge1xuICAgICAgICB2YWw6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aCcpLnBmVmFsdWUsXG4gICAgICAgIGxlZnQ6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aC1iaWFzLWxlZnQnKSxcbiAgICAgICAgcmlnaHQ6IHBhcmVudC5wc3R5bGUoJ21pbi13aWR0aC1iaWFzLXJpZ2h0JylcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgdmFsOiBwYXJlbnQucHN0eWxlKCdtaW4taGVpZ2h0JykucGZWYWx1ZSxcbiAgICAgICAgdG9wOiBwYXJlbnQucHN0eWxlKCdtaW4taGVpZ2h0LWJpYXMtdG9wJyksXG4gICAgICAgIGJvdHRvbTogcGFyZW50LnBzdHlsZSgnbWluLWhlaWdodC1iaWFzLWJvdHRvbScpXG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgYmIgPSBjaGlsZHJlbi5ib3VuZGluZ0JveCh7XG4gICAgICBpbmNsdWRlTGFiZWxzOiBpbmNsdWRlTGFiZWxzLFxuICAgICAgaW5jbHVkZU92ZXJsYXlzOiBmYWxzZSxcbiAgICAgIC8vIHVwZGF0aW5nIHRoZSBjb21wb3VuZCBib3VuZHMgaGFwcGVucyBvdXRzaWRlIG9mIHRoZSByZWd1bGFyXG4gICAgICAvLyBjYWNoZSBjeWNsZSAoaS5lLiBiZWZvcmUgZmlyZWQgZXZlbnRzKVxuICAgICAgdXNlQ2FjaGU6IGZhbHNlXG4gICAgfSk7XG4gICAgdmFyIHBvcyA9IF9wLnBvc2l0aW9uO1xuXG4gICAgLy8gaWYgY2hpbGRyZW4gdGFrZSB1cCB6ZXJvIGFyZWEgdGhlbiBrZWVwIHBvc2l0aW9uIGFuZCBmYWxsIGJhY2sgb24gc3R5bGVzaGVldCB3L2hcbiAgICBpZiAoYmIudyA9PT0gMCB8fCBiYi5oID09PSAwKSB7XG4gICAgICBiYiA9IHtcbiAgICAgICAgdzogcGFyZW50LnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlLFxuICAgICAgICBoOiBwYXJlbnQucHN0eWxlKCdoZWlnaHQnKS5wZlZhbHVlXG4gICAgICB9O1xuICAgICAgYmIueDEgPSBwb3MueCAtIGJiLncgLyAyO1xuICAgICAgYmIueDIgPSBwb3MueCArIGJiLncgLyAyO1xuICAgICAgYmIueTEgPSBwb3MueSAtIGJiLmggLyAyO1xuICAgICAgYmIueTIgPSBwb3MueSArIGJiLmggLyAyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlQmlhc1ZhbHVlcyhwcm9wRGlmZiwgcHJvcEJpYXMsIHByb3BCaWFzQ29tcGxlbWVudCkge1xuICAgICAgdmFyIGJpYXNEaWZmID0gMDtcbiAgICAgIHZhciBiaWFzQ29tcGxlbWVudERpZmYgPSAwO1xuICAgICAgdmFyIGJpYXNUb3RhbCA9IHByb3BCaWFzICsgcHJvcEJpYXNDb21wbGVtZW50O1xuICAgICAgaWYgKHByb3BEaWZmID4gMCAmJiBiaWFzVG90YWwgPiAwKSB7XG4gICAgICAgIGJpYXNEaWZmID0gcHJvcEJpYXMgLyBiaWFzVG90YWwgKiBwcm9wRGlmZjtcbiAgICAgICAgYmlhc0NvbXBsZW1lbnREaWZmID0gcHJvcEJpYXNDb21wbGVtZW50IC8gYmlhc1RvdGFsICogcHJvcERpZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiaWFzRGlmZjogYmlhc0RpZmYsXG4gICAgICAgIGJpYXNDb21wbGVtZW50RGlmZjogYmlhc0NvbXBsZW1lbnREaWZmXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlUGFkZGluZ1ZhbHVlcyh3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nT2JqZWN0LCByZWxhdGl2ZVRvKSB7XG4gICAgICAvLyBBc3N1bWluZyBwZXJjZW50YWdlIGlzIG51bWJlciBmcm9tIDAgdG8gMVxuICAgICAgaWYgKHBhZGRpbmdPYmplY3QudW5pdHMgPT09ICclJykge1xuICAgICAgICBzd2l0Y2ggKHJlbGF0aXZlVG8pIHtcbiAgICAgICAgICBjYXNlICd3aWR0aCc6XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiAwO1xuICAgICAgICAgIGNhc2UgJ2hlaWdodCc6XG4gICAgICAgICAgICByZXR1cm4gaGVpZ2h0ID4gMCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqIGhlaWdodCA6IDA7XG4gICAgICAgICAgY2FzZSAnYXZlcmFnZSc6XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiAod2lkdGggKyBoZWlnaHQpIC8gMiA6IDA7XG4gICAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHdpZHRoID4gaGVpZ2h0ID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiAwO1xuICAgICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggPiAwICYmIGhlaWdodCA+IDAgPyB3aWR0aCA+IGhlaWdodCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqIHdpZHRoIDogcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogMDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFkZGluZ09iamVjdC51bml0cyA9PT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4gcGFkZGluZ09iamVjdC5wZlZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBsZWZ0VmFsID0gbWluLndpZHRoLmxlZnQudmFsdWU7XG4gICAgaWYgKG1pbi53aWR0aC5sZWZ0LnVuaXRzID09PSAncHgnICYmIG1pbi53aWR0aC52YWwgPiAwKSB7XG4gICAgICBsZWZ0VmFsID0gbGVmdFZhbCAqIDEwMCAvIG1pbi53aWR0aC52YWw7XG4gICAgfVxuICAgIHZhciByaWdodFZhbCA9IG1pbi53aWR0aC5yaWdodC52YWx1ZTtcbiAgICBpZiAobWluLndpZHRoLnJpZ2h0LnVuaXRzID09PSAncHgnICYmIG1pbi53aWR0aC52YWwgPiAwKSB7XG4gICAgICByaWdodFZhbCA9IHJpZ2h0VmFsICogMTAwIC8gbWluLndpZHRoLnZhbDtcbiAgICB9XG4gICAgdmFyIHRvcFZhbCA9IG1pbi5oZWlnaHQudG9wLnZhbHVlO1xuICAgIGlmIChtaW4uaGVpZ2h0LnRvcC51bml0cyA9PT0gJ3B4JyAmJiBtaW4uaGVpZ2h0LnZhbCA+IDApIHtcbiAgICAgIHRvcFZhbCA9IHRvcFZhbCAqIDEwMCAvIG1pbi5oZWlnaHQudmFsO1xuICAgIH1cbiAgICB2YXIgYm90dG9tVmFsID0gbWluLmhlaWdodC5ib3R0b20udmFsdWU7XG4gICAgaWYgKG1pbi5oZWlnaHQuYm90dG9tLnVuaXRzID09PSAncHgnICYmIG1pbi5oZWlnaHQudmFsID4gMCkge1xuICAgICAgYm90dG9tVmFsID0gYm90dG9tVmFsICogMTAwIC8gbWluLmhlaWdodC52YWw7XG4gICAgfVxuICAgIHZhciB3aWR0aEJpYXNEaWZmcyA9IGNvbXB1dGVCaWFzVmFsdWVzKG1pbi53aWR0aC52YWwgLSBiYi53LCBsZWZ0VmFsLCByaWdodFZhbCk7XG4gICAgdmFyIGRpZmZMZWZ0ID0gd2lkdGhCaWFzRGlmZnMuYmlhc0RpZmY7XG4gICAgdmFyIGRpZmZSaWdodCA9IHdpZHRoQmlhc0RpZmZzLmJpYXNDb21wbGVtZW50RGlmZjtcbiAgICB2YXIgaGVpZ2h0Qmlhc0RpZmZzID0gY29tcHV0ZUJpYXNWYWx1ZXMobWluLmhlaWdodC52YWwgLSBiYi5oLCB0b3BWYWwsIGJvdHRvbVZhbCk7XG4gICAgdmFyIGRpZmZUb3AgPSBoZWlnaHRCaWFzRGlmZnMuYmlhc0RpZmY7XG4gICAgdmFyIGRpZmZCb3R0b20gPSBoZWlnaHRCaWFzRGlmZnMuYmlhc0NvbXBsZW1lbnREaWZmO1xuICAgIF9wLmF1dG9QYWRkaW5nID0gY29tcHV0ZVBhZGRpbmdWYWx1ZXMoYmIudywgYmIuaCwgcGFyZW50LnBzdHlsZSgncGFkZGluZycpLCBwYXJlbnQucHN0eWxlKCdwYWRkaW5nLXJlbGF0aXZlLXRvJykudmFsdWUpO1xuICAgIF9wLmF1dG9XaWR0aCA9IE1hdGgubWF4KGJiLncsIG1pbi53aWR0aC52YWwpO1xuICAgIHBvcy54ID0gKC1kaWZmTGVmdCArIGJiLngxICsgYmIueDIgKyBkaWZmUmlnaHQpIC8gMjtcbiAgICBfcC5hdXRvSGVpZ2h0ID0gTWF0aC5tYXgoYmIuaCwgbWluLmhlaWdodC52YWwpO1xuICAgIHBvcy55ID0gKC1kaWZmVG9wICsgYmIueTEgKyBiYi55MiArIGRpZmZCb3R0b20pIC8gMjtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5jb21wb3VuZEJvdW5kc0NsZWFuIHx8IGZvcmNlKSB7XG4gICAgICB1cGRhdGUoZWxlKTtcbiAgICAgIGlmICghY3kuYmF0Y2hpbmcoKSkge1xuICAgICAgICBfcC5jb21wb3VuZEJvdW5kc0NsZWFuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xudmFyIG5vbmluZiA9IGZ1bmN0aW9uIG5vbmluZih4KSB7XG4gIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4geDtcbn07XG52YXIgdXBkYXRlQm91bmRzID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzKGIsIHgxLCB5MSwgeDIsIHkyKSB7XG4gIC8vIGRvbid0IHVwZGF0ZSB3aXRoIHplcm8gYXJlYSBib3hlc1xuICBpZiAoeDIgLSB4MSA9PT0gMCB8fCB5MiAtIHkxID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZG9uJ3QgdXBkYXRlIHdpdGggbnVsbCBkaW1cbiAgaWYgKHgxID09IG51bGwgfHwgeTEgPT0gbnVsbCB8fCB4MiA9PSBudWxsIHx8IHkyID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYi54MSA9IHgxIDwgYi54MSA/IHgxIDogYi54MTtcbiAgYi54MiA9IHgyID4gYi54MiA/IHgyIDogYi54MjtcbiAgYi55MSA9IHkxIDwgYi55MSA/IHkxIDogYi55MTtcbiAgYi55MiA9IHkyID4gYi55MiA/IHkyIDogYi55MjtcbiAgYi53ID0gYi54MiAtIGIueDE7XG4gIGIuaCA9IGIueTIgLSBiLnkxO1xufTtcbnZhciB1cGRhdGVCb3VuZHNGcm9tQm94ID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbUJveChiLCBiMikge1xuICBpZiAoYjIgPT0gbnVsbCkge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHJldHVybiB1cGRhdGVCb3VuZHMoYiwgYjIueDEsIGIyLnkxLCBiMi54MiwgYjIueTIpO1xufTtcbnZhciBwcmVmaXhlZFByb3BlcnR5ID0gZnVuY3Rpb24gcHJlZml4ZWRQcm9wZXJ0eShvYmosIGZpZWxkLCBwcmVmaXgpIHtcbiAgcmV0dXJuIGdldFByZWZpeGVkUHJvcGVydHkob2JqLCBmaWVsZCwgcHJlZml4KTtcbn07XG52YXIgdXBkYXRlQm91bmRzRnJvbUFycm93ID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCBwcmVmaXgpIHtcbiAgaWYgKGVsZS5jeSgpLmhlYWRsZXNzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICB2YXIgaGFsZkFyVyA9IHJzdHlsZS5hcnJvd1dpZHRoIC8gMjtcbiAgdmFyIGFycm93VHlwZSA9IGVsZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1zaGFwZScpLnZhbHVlO1xuICB2YXIgeDtcbiAgdmFyIHk7XG4gIGlmIChhcnJvd1R5cGUgIT09ICdub25lJykge1xuICAgIGlmIChwcmVmaXggPT09ICdzb3VyY2UnKSB7XG4gICAgICB4ID0gcnN0eWxlLnNyY1g7XG4gICAgICB5ID0gcnN0eWxlLnNyY1k7XG4gICAgfSBlbHNlIGlmIChwcmVmaXggPT09ICd0YXJnZXQnKSB7XG4gICAgICB4ID0gcnN0eWxlLnRndFg7XG4gICAgICB5ID0gcnN0eWxlLnRndFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSByc3R5bGUubWlkWDtcbiAgICAgIHkgPSByc3R5bGUubWlkWTtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgc3RvcmUgdGhlIGluZGl2aWR1YWwgYXJyb3cgYm91bmRzXG4gICAgdmFyIGJicyA9IF9wLmFycm93Qm91bmRzID0gX3AuYXJyb3dCb3VuZHMgfHwge307XG4gICAgdmFyIGJiID0gYmJzW3ByZWZpeF0gPSBiYnNbcHJlZml4XSB8fCB7fTtcbiAgICBiYi54MSA9IHggLSBoYWxmQXJXO1xuICAgIGJiLnkxID0geSAtIGhhbGZBclc7XG4gICAgYmIueDIgPSB4ICsgaGFsZkFyVztcbiAgICBiYi55MiA9IHkgKyBoYWxmQXJXO1xuICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgIGJiLmggPSBiYi55MiAtIGJiLnkxO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJiLCAxKTtcbiAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBiYi54MSwgYmIueTEsIGJiLngyLCBiYi55Mik7XG4gIH1cbn07XG52YXIgdXBkYXRlQm91bmRzRnJvbUxhYmVsID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbUxhYmVsKGJvdW5kcywgZWxlLCBwcmVmaXgpIHtcbiAgaWYgKGVsZS5jeSgpLmhlYWRsZXNzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHByZWZpeERhc2g7XG4gIGlmIChwcmVmaXgpIHtcbiAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICB9IGVsc2Uge1xuICAgIHByZWZpeERhc2ggPSAnJztcbiAgfVxuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciByc3R5bGUgPSBfcC5yc3R5bGU7XG4gIHZhciBsYWJlbCA9IGVsZS5wc3R5bGUocHJlZml4RGFzaCArICdsYWJlbCcpLnN0clZhbHVlO1xuICBpZiAobGFiZWwpIHtcbiAgICB2YXIgaGFsaWduID0gZWxlLnBzdHlsZSgndGV4dC1oYWxpZ24nKTtcbiAgICB2YXIgdmFsaWduID0gZWxlLnBzdHlsZSgndGV4dC12YWxpZ24nKTtcbiAgICB2YXIgbGFiZWxXaWR0aCA9IHByZWZpeGVkUHJvcGVydHkocnN0eWxlLCAnbGFiZWxXaWR0aCcsIHByZWZpeCk7XG4gICAgdmFyIGxhYmVsSGVpZ2h0ID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbEhlaWdodCcsIHByZWZpeCk7XG4gICAgdmFyIGxhYmVsWCA9IHByZWZpeGVkUHJvcGVydHkocnN0eWxlLCAnbGFiZWxYJywgcHJlZml4KTtcbiAgICB2YXIgbGFiZWxZID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbFknLCBwcmVmaXgpO1xuICAgIHZhciBtYXJnaW5YID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ3RleHQtbWFyZ2luLXgnKS5wZlZhbHVlO1xuICAgIHZhciBtYXJnaW5ZID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ3RleHQtbWFyZ2luLXknKS5wZlZhbHVlO1xuICAgIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gICAgdmFyIHJvdGF0aW9uID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ3RleHQtcm90YXRpb24nKTtcbiAgICB2YXIgb3V0bGluZVdpZHRoID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgYm9yZGVyV2lkdGggPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci13aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIGhhbGZCb3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoIC8gMjtcbiAgICB2YXIgcGFkZGluZyA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1wYWRkaW5nJykucGZWYWx1ZTtcbiAgICB2YXIgbWFyZ2luT2ZFcnJvciA9IDI7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcblxuICAgIHZhciBsaCA9IGxhYmVsSGVpZ2h0O1xuICAgIHZhciBsdyA9IGxhYmVsV2lkdGg7XG4gICAgdmFyIGx3XzIgPSBsdyAvIDI7XG4gICAgdmFyIGxoXzIgPSBsaCAvIDI7XG4gICAgdmFyIGx4MSwgbHgyLCBseTEsIGx5MjtcbiAgICBpZiAoaXNFZGdlKSB7XG4gICAgICBseDEgPSBsYWJlbFggLSBsd18yO1xuICAgICAgbHgyID0gbGFiZWxYICsgbHdfMjtcbiAgICAgIGx5MSA9IGxhYmVsWSAtIGxoXzI7XG4gICAgICBseTIgPSBsYWJlbFkgKyBsaF8yO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKGhhbGlnbi52YWx1ZSkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBseDEgPSBsYWJlbFggLSBsdztcbiAgICAgICAgICBseDIgPSBsYWJlbFg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgbHgxID0gbGFiZWxYIC0gbHdfMjtcbiAgICAgICAgICBseDIgPSBsYWJlbFggKyBsd18yO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbHgxID0gbGFiZWxYO1xuICAgICAgICAgIGx4MiA9IGxhYmVsWCArIGx3O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh2YWxpZ24udmFsdWUpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICBseTEgPSBsYWJlbFkgLSBsaDtcbiAgICAgICAgICBseTIgPSBsYWJlbFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgbHkxID0gbGFiZWxZIC0gbGhfMjtcbiAgICAgICAgICBseTIgPSBsYWJlbFkgKyBsaF8yO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGx5MSA9IGxhYmVsWTtcbiAgICAgICAgICBseTIgPSBsYWJlbFkgKyBsaDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzaGlmdCBieSBtYXJnaW4gYW5kIGV4cGFuZCBieSBvdXRsaW5lIGFuZCBib3JkZXJcbiAgICBseDEgKz0gbWFyZ2luWCAtIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSAtIHBhZGRpbmcgLSBtYXJnaW5PZkVycm9yO1xuICAgIGx4MiArPSBtYXJnaW5YICsgTWF0aC5tYXgob3V0bGluZVdpZHRoLCBoYWxmQm9yZGVyV2lkdGgpICsgcGFkZGluZyArIG1hcmdpbk9mRXJyb3I7XG4gICAgbHkxICs9IG1hcmdpblkgLSBNYXRoLm1heChvdXRsaW5lV2lkdGgsIGhhbGZCb3JkZXJXaWR0aCkgLSBwYWRkaW5nIC0gbWFyZ2luT2ZFcnJvcjtcbiAgICBseTIgKz0gbWFyZ2luWSArIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSArIHBhZGRpbmcgKyBtYXJnaW5PZkVycm9yO1xuXG4gICAgLy8gYWx3YXlzIHN0b3JlIHRoZSB1bnJvdGF0ZWQgbGFiZWwgYm91bmRzIHNlcGFyYXRlbHlcbiAgICB2YXIgYmJQcmVmaXggPSBwcmVmaXggfHwgJ21haW4nO1xuICAgIHZhciBiYnMgPSBfcC5sYWJlbEJvdW5kcztcbiAgICB2YXIgYmIgPSBiYnNbYmJQcmVmaXhdID0gYmJzW2JiUHJlZml4XSB8fCB7fTtcbiAgICBiYi54MSA9IGx4MTtcbiAgICBiYi55MSA9IGx5MTtcbiAgICBiYi54MiA9IGx4MjtcbiAgICBiYi55MiA9IGx5MjtcbiAgICBiYi53ID0gbHgyIC0gbHgxO1xuICAgIGJiLmggPSBseTIgLSBseTE7XG4gICAgdmFyIGlzQXV0b3JvdGF0ZSA9IGlzRWRnZSAmJiByb3RhdGlvbi5zdHJWYWx1ZSA9PT0gJ2F1dG9yb3RhdGUnO1xuICAgIHZhciBpc1BmVmFsdWUgPSByb3RhdGlvbi5wZlZhbHVlICE9IG51bGwgJiYgcm90YXRpb24ucGZWYWx1ZSAhPT0gMDtcbiAgICBpZiAoaXNBdXRvcm90YXRlIHx8IGlzUGZWYWx1ZSkge1xuICAgICAgdmFyIHRoZXRhID0gaXNBdXRvcm90YXRlID8gcHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbEFuZ2xlJywgcHJlZml4KSA6IHJvdGF0aW9uLnBmVmFsdWU7XG4gICAgICB2YXIgY29zID0gTWF0aC5jb3ModGhldGEpO1xuICAgICAgdmFyIHNpbiA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgICAgLy8gcm90YXRpb24gcG9pbnQgKGRlZmF1bHQgdmFsdWUgZm9yIGNlbnRlci1jZW50ZXIpXG4gICAgICB2YXIgeG8gPSAobHgxICsgbHgyKSAvIDI7XG4gICAgICB2YXIgeW8gPSAobHkxICsgbHkyKSAvIDI7XG4gICAgICBpZiAoIWlzRWRnZSkge1xuICAgICAgICBzd2l0Y2ggKGhhbGlnbi52YWx1ZSkge1xuICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgeG8gPSBseDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICB4byA9IGx4MTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodmFsaWduLnZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHlvID0gbHkyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHlvID0gbHkxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciByb3RhdGUgPSBmdW5jdGlvbiByb3RhdGUoeCwgeSkge1xuICAgICAgICB4ID0geCAtIHhvO1xuICAgICAgICB5ID0geSAtIHlvO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHggKiBjb3MgLSB5ICogc2luICsgeG8sXG4gICAgICAgICAgeTogeCAqIHNpbiArIHkgKiBjb3MgKyB5b1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHZhciBweDF5MSA9IHJvdGF0ZShseDEsIGx5MSk7XG4gICAgICB2YXIgcHgxeTIgPSByb3RhdGUobHgxLCBseTIpO1xuICAgICAgdmFyIHB4MnkxID0gcm90YXRlKGx4MiwgbHkxKTtcbiAgICAgIHZhciBweDJ5MiA9IHJvdGF0ZShseDIsIGx5Mik7XG4gICAgICBseDEgPSBNYXRoLm1pbihweDF5MS54LCBweDF5Mi54LCBweDJ5MS54LCBweDJ5Mi54KTtcbiAgICAgIGx4MiA9IE1hdGgubWF4KHB4MXkxLngsIHB4MXkyLngsIHB4MnkxLngsIHB4MnkyLngpO1xuICAgICAgbHkxID0gTWF0aC5taW4ocHgxeTEueSwgcHgxeTIueSwgcHgyeTEueSwgcHgyeTIueSk7XG4gICAgICBseTIgPSBNYXRoLm1heChweDF5MS55LCBweDF5Mi55LCBweDJ5MS55LCBweDJ5Mi55KTtcbiAgICB9XG4gICAgdmFyIGJiUHJlZml4Um90ID0gYmJQcmVmaXggKyAnUm90JztcbiAgICB2YXIgYmJSb3QgPSBiYnNbYmJQcmVmaXhSb3RdID0gYmJzW2JiUHJlZml4Um90XSB8fCB7fTtcbiAgICBiYlJvdC54MSA9IGx4MTtcbiAgICBiYlJvdC55MSA9IGx5MTtcbiAgICBiYlJvdC54MiA9IGx4MjtcbiAgICBiYlJvdC55MiA9IGx5MjtcbiAgICBiYlJvdC53ID0gbHgyIC0gbHgxO1xuICAgIGJiUm90LmggPSBseTIgLSBseTE7XG4gICAgdXBkYXRlQm91bmRzKGJvdW5kcywgbHgxLCBseTEsIGx4MiwgbHkyKTtcbiAgICB1cGRhdGVCb3VuZHMoX3AubGFiZWxCb3VuZHMuYWxsLCBseDEsIGx5MSwgbHgyLCBseTIpO1xuICB9XG4gIHJldHVybiBib3VuZHM7XG59O1xudmFyIHVwZGF0ZUJvdW5kc0Zyb21PdXRsaW5lID0gZnVuY3Rpb24gdXBkYXRlQm91bmRzRnJvbU91dGxpbmUoYm91bmRzLCBlbGUpIHtcbiAgaWYgKGVsZS5jeSgpLmhlYWRsZXNzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG91dGxpbmVPcGFjaXR5ID0gZWxlLnBzdHlsZSgnb3V0bGluZS1vcGFjaXR5JykudmFsdWU7XG4gIHZhciBvdXRsaW5lV2lkdGggPSBlbGUucHN0eWxlKCdvdXRsaW5lLXdpZHRoJykudmFsdWU7XG4gIGlmIChvdXRsaW5lT3BhY2l0eSA+IDAgJiYgb3V0bGluZVdpZHRoID4gMCkge1xuICAgIHZhciBvdXRsaW5lT2Zmc2V0ID0gZWxlLnBzdHlsZSgnb3V0bGluZS1vZmZzZXQnKS52YWx1ZTtcbiAgICB2YXIgbm9kZVNoYXBlID0gZWxlLnBzdHlsZSgnc2hhcGUnKS52YWx1ZTtcbiAgICB2YXIgb3V0bGluZVNpemUgPSBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0O1xuICAgIHZhciBzY2FsZVggPSAoYm91bmRzLncgKyBvdXRsaW5lU2l6ZSAqIDIpIC8gYm91bmRzLnc7XG4gICAgdmFyIHNjYWxlWSA9IChib3VuZHMuaCArIG91dGxpbmVTaXplICogMikgLyBib3VuZHMuaDtcbiAgICB2YXIgeE9mZnNldCA9IDA7XG4gICAgdmFyIHlPZmZzZXQgPSAwO1xuICAgIGlmIChbXCJkaWFtb25kXCIsIFwicGVudGFnb25cIiwgXCJyb3VuZC10cmlhbmdsZVwiXS5pbmNsdWRlcyhub2RlU2hhcGUpKSB7XG4gICAgICBzY2FsZVggPSAoYm91bmRzLncgKyBvdXRsaW5lU2l6ZSAqIDIuNCkgLyBib3VuZHMudztcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgLyAzLjY7XG4gICAgfSBlbHNlIGlmIChbXCJjb25jYXZlLWhleGFnb25cIiwgXCJyaG9tYm9pZFwiLCBcInJpZ2h0LXJob21ib2lkXCJdLmluY2x1ZGVzKG5vZGVTaGFwZSkpIHtcbiAgICAgIHNjYWxlWCA9IChib3VuZHMudyArIG91dGxpbmVTaXplICogMi40KSAvIGJvdW5kcy53O1xuICAgIH0gZWxzZSBpZiAobm9kZVNoYXBlID09PSBcInN0YXJcIikge1xuICAgICAgc2NhbGVYID0gKGJvdW5kcy53ICsgb3V0bGluZVNpemUgKiAyLjgpIC8gYm91bmRzLnc7XG4gICAgICBzY2FsZVkgPSAoYm91bmRzLmggKyBvdXRsaW5lU2l6ZSAqIDIuNikgLyBib3VuZHMuaDtcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgLyAzLjg7XG4gICAgfSBlbHNlIGlmIChub2RlU2hhcGUgPT09IFwidHJpYW5nbGVcIikge1xuICAgICAgc2NhbGVYID0gKGJvdW5kcy53ICsgb3V0bGluZVNpemUgKiAyLjgpIC8gYm91bmRzLnc7XG4gICAgICBzY2FsZVkgPSAoYm91bmRzLmggKyBvdXRsaW5lU2l6ZSAqIDIuNCkgLyBib3VuZHMuaDtcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgLyAxLjQ7XG4gICAgfSBlbHNlIGlmIChub2RlU2hhcGUgPT09IFwidmVlXCIpIHtcbiAgICAgIHNjYWxlWCA9IChib3VuZHMudyArIG91dGxpbmVTaXplICogNC40KSAvIGJvdW5kcy53O1xuICAgICAgc2NhbGVZID0gKGJvdW5kcy5oICsgb3V0bGluZVNpemUgKiAzLjgpIC8gYm91bmRzLmg7XG4gICAgICB5T2Zmc2V0ID0gLW91dGxpbmVTaXplICogLjU7XG4gICAgfVxuICAgIHZhciBoRGVsdGEgPSBib3VuZHMuaCAqIHNjYWxlWSAtIGJvdW5kcy5oO1xuICAgIHZhciB3RGVsdGEgPSBib3VuZHMudyAqIHNjYWxlWCAtIGJvdW5kcy53O1xuICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYm91bmRzLCBbTWF0aC5jZWlsKGhEZWx0YSAvIDIpLCBNYXRoLmNlaWwod0RlbHRhIC8gMildKTtcbiAgICBpZiAoeE9mZnNldCAhPSAwIHx8IHlPZmZzZXQgIT09IDApIHtcbiAgICAgIHZhciBvQm91bmRzID0gc2hpZnRCb3VuZGluZ0JveChib3VuZHMsIHhPZmZzZXQsIHlPZmZzZXQpO1xuICAgICAgdXBkYXRlQm91bmRpbmdCb3goYm91bmRzLCBvQm91bmRzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGdldCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBlbGVtZW50cyAoaW4gcmF3IG1vZGVsIHBvc2l0aW9uKVxudmFyIGJvdW5kaW5nQm94SW1wbCA9IGZ1bmN0aW9uIGJvdW5kaW5nQm94SW1wbChlbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gZWxlLl9wcml2YXRlLmN5O1xuICB2YXIgc3R5bGVFbmFibGVkID0gY3kuc3R5bGVFbmFibGVkKCk7XG4gIHZhciBoZWFkbGVzcyA9IGN5LmhlYWRsZXNzKCk7XG4gIHZhciBib3VuZHMgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgaXNOb2RlID0gZWxlLmlzTm9kZSgpO1xuICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICB2YXIgZXgxLCBleDIsIGV5MSwgZXkyOyAvLyBleHRyZW1hIG9mIGJvZHkgLyBsaW5lc1xuICB2YXIgeCwgeTsgLy8gbm9kZSBwb3NcbiAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgdmFyIG1hbnVhbEV4cGFuc2lvbiA9IGlzTm9kZSAmJiBzdHlsZUVuYWJsZWQgPyBlbGUucHN0eWxlKCdib3VuZHMtZXhwYW5zaW9uJykucGZWYWx1ZSA6IFswXTtcblxuICAvLyBtdXN0IHVzZSBgZGlzcGxheWAgcHJvcCBvbmx5LCBhcyByZWFkaW5nIGBjb21wb3VuZC53aWR0aCgpYCBjYXVzZXMgcmVjdXJzaW9uXG4gIC8vIChvdGhlciBmYWN0b3JzIGxpa2Ugd2lkdGggdmFsdWVzIHdpbGwgYmUgY29uc2lkZXJlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGFueXdheSlcbiAgdmFyIGlzRGlzcGxheWVkID0gZnVuY3Rpb24gaXNEaXNwbGF5ZWQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5wc3R5bGUoJ2Rpc3BsYXknKS52YWx1ZSAhPT0gJ25vbmUnO1xuICB9O1xuICB2YXIgZGlzcGxheWVkID0gIXN0eWxlRW5hYmxlZCB8fCBpc0Rpc3BsYXllZChlbGUpXG5cbiAgLy8gbXVzdCB0YWtlIGludG8gYWNjb3VudCBjb25uZWN0ZWQgbm9kZXMgYi9jIG9mIGltcGxpY2l0IGVkZ2UgaGlkaW5nIG9uIGRpc3BsYXk6bm9uZSBub2RlXG4gICYmICghaXNFZGdlIHx8IGlzRGlzcGxheWVkKGVsZS5zb3VyY2UoKSkgJiYgaXNEaXNwbGF5ZWQoZWxlLnRhcmdldCgpKSk7XG4gIGlmIChkaXNwbGF5ZWQpIHtcbiAgICAvLyBkaXNwbGF5ZWQgc3VmZmljZXMsIHNpbmNlIHdlIHdpbGwgZmluZCB6ZXJvIGFyZWEgZWxlcyBhbnl3YXlcbiAgICB2YXIgb3ZlcmxheU9wYWNpdHkgPSAwO1xuICAgIHZhciBvdmVybGF5UGFkZGluZyA9IDA7XG4gICAgaWYgKHN0eWxlRW5hYmxlZCAmJiBvcHRpb25zLmluY2x1ZGVPdmVybGF5cykge1xuICAgICAgb3ZlcmxheU9wYWNpdHkgPSBlbGUucHN0eWxlKCdvdmVybGF5LW9wYWNpdHknKS52YWx1ZTtcbiAgICAgIGlmIChvdmVybGF5T3BhY2l0eSAhPT0gMCkge1xuICAgICAgICBvdmVybGF5UGFkZGluZyA9IGVsZS5wc3R5bGUoJ292ZXJsYXktcGFkZGluZycpLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgdW5kZXJsYXlPcGFjaXR5ID0gMDtcbiAgICB2YXIgdW5kZXJsYXlQYWRkaW5nID0gMDtcbiAgICBpZiAoc3R5bGVFbmFibGVkICYmIG9wdGlvbnMuaW5jbHVkZVVuZGVybGF5cykge1xuICAgICAgdW5kZXJsYXlPcGFjaXR5ID0gZWxlLnBzdHlsZSgndW5kZXJsYXktb3BhY2l0eScpLnZhbHVlO1xuICAgICAgaWYgKHVuZGVybGF5T3BhY2l0eSAhPT0gMCkge1xuICAgICAgICB1bmRlcmxheVBhZGRpbmcgPSBlbGUucHN0eWxlKCd1bmRlcmxheS1wYWRkaW5nJykudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBwYWRkaW5nID0gTWF0aC5tYXgob3ZlcmxheVBhZGRpbmcsIHVuZGVybGF5UGFkZGluZyk7XG4gICAgdmFyIHcgPSAwO1xuICAgIHZhciB3SGFsZiA9IDA7XG4gICAgaWYgKHN0eWxlRW5hYmxlZCkge1xuICAgICAgdyA9IGVsZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICAgIHdIYWxmID0gdyAvIDI7XG4gICAgfVxuICAgIGlmIChpc05vZGUgJiYgb3B0aW9ucy5pbmNsdWRlTm9kZXMpIHtcbiAgICAgIHZhciBwb3MgPSBlbGUucG9zaXRpb24oKTtcbiAgICAgIHggPSBwb3MueDtcbiAgICAgIHkgPSBwb3MueTtcbiAgICAgIHZhciBfdyA9IGVsZS5vdXRlcldpZHRoKCk7XG4gICAgICB2YXIgaGFsZlcgPSBfdyAvIDI7XG4gICAgICB2YXIgaCA9IGVsZS5vdXRlckhlaWdodCgpO1xuICAgICAgdmFyIGhhbGZIID0gaCAvIDI7XG5cbiAgICAgIC8vIGhhbmRsZSBub2RlIGRpbWVuc2lvbnNcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgZXgxID0geCAtIGhhbGZXO1xuICAgICAgZXgyID0geCArIGhhbGZXO1xuICAgICAgZXkxID0geSAtIGhhbGZIO1xuICAgICAgZXkyID0geSArIGhhbGZIO1xuICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgZXgxLCBleTEsIGV4MiwgZXkyKTtcbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlT3V0bGluZXMpIHtcbiAgICAgICAgdXBkYXRlQm91bmRzRnJvbU91dGxpbmUoYm91bmRzLCBlbGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFZGdlICYmIG9wdGlvbnMuaW5jbHVkZUVkZ2VzKSB7XG4gICAgICBpZiAoc3R5bGVFbmFibGVkICYmICFoZWFkbGVzcykge1xuICAgICAgICB2YXIgY3VydmVTdHlsZSA9IGVsZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykuc3RyVmFsdWU7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVkZ2UgZGltZW5zaW9ucyAocm91Z2ggYm94IGVzdGltYXRlKVxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgZXgxID0gTWF0aC5taW4ocnN0eWxlLnNyY1gsIHJzdHlsZS5taWRYLCByc3R5bGUudGd0WCk7XG4gICAgICAgIGV4MiA9IE1hdGgubWF4KHJzdHlsZS5zcmNYLCByc3R5bGUubWlkWCwgcnN0eWxlLnRndFgpO1xuICAgICAgICBleTEgPSBNYXRoLm1pbihyc3R5bGUuc3JjWSwgcnN0eWxlLm1pZFksIHJzdHlsZS50Z3RZKTtcbiAgICAgICAgZXkyID0gTWF0aC5tYXgocnN0eWxlLnNyY1ksIHJzdHlsZS5taWRZLCByc3R5bGUudGd0WSk7XG5cbiAgICAgICAgLy8gdGFrZSBpbnRvIGFjY291bnQgZWRnZSB3aWR0aFxuICAgICAgICBleDEgLT0gd0hhbGY7XG4gICAgICAgIGV4MiArPSB3SGFsZjtcbiAgICAgICAgZXkxIC09IHdIYWxmO1xuICAgICAgICBleTIgKz0gd0hhbGY7XG4gICAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSwgZXkxLCBleDIsIGV5Mik7XG5cbiAgICAgICAgLy8gcHJlY2lzZSBlZGdlc1xuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgaWYgKGN1cnZlU3R5bGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgICAgICB2YXIgaHB0cyA9IHJzdHlsZS5oYXlzdGFja1B0cztcbiAgICAgICAgICBpZiAoaHB0cyAmJiBocHRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZXgxID0gaHB0c1swXS54O1xuICAgICAgICAgICAgZXkxID0gaHB0c1swXS55O1xuICAgICAgICAgICAgZXgyID0gaHB0c1sxXS54O1xuICAgICAgICAgICAgZXkyID0gaHB0c1sxXS55O1xuICAgICAgICAgICAgaWYgKGV4MSA+IGV4Mikge1xuICAgICAgICAgICAgICB2YXIgdGVtcCA9IGV4MTtcbiAgICAgICAgICAgICAgZXgxID0gZXgyO1xuICAgICAgICAgICAgICBleDIgPSB0ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV5MSA+IGV5Mikge1xuICAgICAgICAgICAgICB2YXIgX3RlbXAgPSBleTE7XG4gICAgICAgICAgICAgIGV5MSA9IGV5MjtcbiAgICAgICAgICAgICAgZXkyID0gX3RlbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEgLSB3SGFsZiwgZXkxIC0gd0hhbGYsIGV4MiArIHdIYWxmLCBleTIgKyB3SGFsZik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGN1cnZlU3R5bGUgPT09ICdiZXppZXInIHx8IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCdzZWdtZW50cycpIHx8IGN1cnZlU3R5bGUuZW5kc1dpdGgoJ3RheGknKSkge1xuICAgICAgICAgIHZhciBwdHM7XG4gICAgICAgICAgc3dpdGNoIChjdXJ2ZVN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdiZXppZXInOlxuICAgICAgICAgICAgY2FzZSAndW5idW5kbGVkLWJlemllcic6XG4gICAgICAgICAgICAgIHB0cyA9IHJzdHlsZS5iZXppZXJQdHM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VnbWVudHMnOlxuICAgICAgICAgICAgY2FzZSAndGF4aSc6XG4gICAgICAgICAgICBjYXNlICdyb3VuZC1zZWdtZW50cyc6XG4gICAgICAgICAgICBjYXNlICdyb3VuZC10YXhpJzpcbiAgICAgICAgICAgICAgcHRzID0gcnN0eWxlLmxpbmVQdHM7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHRzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIHZhciBwdCA9IHB0c1tqXTtcbiAgICAgICAgICAgICAgZXgxID0gcHQueCAtIHdIYWxmO1xuICAgICAgICAgICAgICBleDIgPSBwdC54ICsgd0hhbGY7XG4gICAgICAgICAgICAgIGV5MSA9IHB0LnkgLSB3SGFsZjtcbiAgICAgICAgICAgICAgZXkyID0gcHQueSArIHdIYWxmO1xuICAgICAgICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEsIGV5MSwgZXgyLCBleTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBiZXppZXItbGlrZSBvciBzZWdtZW50LWxpa2UgZWRnZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaGVhZGxlc3Mgb3Igc3R5bGUgZGlzYWJsZWRcblxuICAgICAgICAvLyBmYWxsYmFjayBvbiBzb3VyY2UgYW5kIHRhcmdldCBwb3NpdGlvbnNcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgdmFyIG4xID0gZWxlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgbjFwb3MgPSBuMS5wb3NpdGlvbigpO1xuICAgICAgICB2YXIgbjIgPSBlbGUudGFyZ2V0KCk7XG4gICAgICAgIHZhciBuMnBvcyA9IG4yLnBvc2l0aW9uKCk7XG4gICAgICAgIGV4MSA9IG4xcG9zLng7XG4gICAgICAgIGV4MiA9IG4ycG9zLng7XG4gICAgICAgIGV5MSA9IG4xcG9zLnk7XG4gICAgICAgIGV5MiA9IG4ycG9zLnk7XG4gICAgICAgIGlmIChleDEgPiBleDIpIHtcbiAgICAgICAgICB2YXIgX3RlbXAyID0gZXgxO1xuICAgICAgICAgIGV4MSA9IGV4MjtcbiAgICAgICAgICBleDIgPSBfdGVtcDI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV5MSA+IGV5Mikge1xuICAgICAgICAgIHZhciBfdGVtcDMgPSBleTE7XG4gICAgICAgICAgZXkxID0gZXkyO1xuICAgICAgICAgIGV5MiA9IF90ZW1wMztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRha2UgaW50byBhY2NvdW50IGVkZ2Ugd2lkdGhcbiAgICAgICAgZXgxIC09IHdIYWxmO1xuICAgICAgICBleDIgKz0gd0hhbGY7XG4gICAgICAgIGV5MSAtPSB3SGFsZjtcbiAgICAgICAgZXkyICs9IHdIYWxmO1xuICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEsIGV5MSwgZXgyLCBleTIpO1xuICAgICAgfSAvLyBoZWFkbGVzcyBvciBzdHlsZSBkaXNhYmxlZFxuICAgIH0gLy8gZWRnZXNcblxuICAgIC8vIGhhbmRsZSBlZGdlIGFycm93IHNpemVcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoc3R5bGVFbmFibGVkICYmIG9wdGlvbnMuaW5jbHVkZUVkZ2VzICYmIGlzRWRnZSkge1xuICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnbWlkLXNvdXJjZScpO1xuICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnbWlkLXRhcmdldCcpO1xuICAgICAgdXBkYXRlQm91bmRzRnJvbUFycm93KGJvdW5kcywgZWxlLCAnc291cmNlJyk7XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsICd0YXJnZXQnKTtcbiAgICB9XG5cbiAgICAvLyBnaG9zdFxuICAgIC8vLy8vLy8vXG5cbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICB2YXIgZ2hvc3QgPSBlbGUucHN0eWxlKCdnaG9zdCcpLnZhbHVlID09PSAneWVzJztcbiAgICAgIGlmIChnaG9zdCkge1xuICAgICAgICB2YXIgZ3ggPSBlbGUucHN0eWxlKCdnaG9zdC1vZmZzZXQteCcpLnBmVmFsdWU7XG4gICAgICAgIHZhciBneSA9IGVsZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgYm91bmRzLngxICsgZ3gsIGJvdW5kcy55MSArIGd5LCBib3VuZHMueDIgKyBneCwgYm91bmRzLnkyICsgZ3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsd2F5cyBzdG9yZSB0aGUgYm9keSBib3VuZHMgc2VwYXJhdGVseSBmcm9tIHRoZSBsYWJlbHNcbiAgICB2YXIgYmJCb2R5ID0gX3AuYm9keUJvdW5kcyA9IF9wLmJvZHlCb3VuZHMgfHwge307XG4gICAgYXNzaWduQm91bmRpbmdCb3goYmJCb2R5LCBib3VuZHMpO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYmJCb2R5LCBtYW51YWxFeHBhbnNpb24pO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJiQm9keSwgMSk7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcblxuICAgIC8vIG92ZXJsYXlcbiAgICAvLy8vLy8vLy8vXG5cbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICBleDEgPSBib3VuZHMueDE7XG4gICAgICBleDIgPSBib3VuZHMueDI7XG4gICAgICBleTEgPSBib3VuZHMueTE7XG4gICAgICBleTIgPSBib3VuZHMueTI7XG4gICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEgLSBwYWRkaW5nLCBleTEgLSBwYWRkaW5nLCBleDIgKyBwYWRkaW5nLCBleTIgKyBwYWRkaW5nKTtcbiAgICB9XG5cbiAgICAvLyBhbHdheXMgc3RvcmUgdGhlIGJvZHkgYm91bmRzIHNlcGFyYXRlbHkgZnJvbSB0aGUgbGFiZWxzXG4gICAgdmFyIGJiT3ZlcmxheSA9IF9wLm92ZXJsYXlCb3VuZHMgPSBfcC5vdmVybGF5Qm91bmRzIHx8IHt9O1xuICAgIGFzc2lnbkJvdW5kaW5nQm94KGJiT3ZlcmxheSwgYm91bmRzKTtcbiAgICBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJiT3ZlcmxheSwgbWFudWFsRXhwYW5zaW9uKTtcbiAgICBleHBhbmRCb3VuZGluZ0JveChiYk92ZXJsYXksIDEpOyAvLyBleHBhbmQgdG8gd29yayBhcm91bmQgYnJvd3NlciBkaW1lbnNpb24gaW5hY2N1cmFjaWVzXG5cbiAgICAvLyBoYW5kbGUgbGFiZWwgZGltZW5zaW9uc1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICB2YXIgYmJMYWJlbHMgPSBfcC5sYWJlbEJvdW5kcyA9IF9wLmxhYmVsQm91bmRzIHx8IHt9O1xuICAgIGlmIChiYkxhYmVscy5hbGwgIT0gbnVsbCkge1xuICAgICAgY2xlYXJCb3VuZGluZ0JveChiYkxhYmVscy5hbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYkxhYmVscy5hbGwgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICB9XG4gICAgaWYgKHN0eWxlRW5hYmxlZCAmJiBvcHRpb25zLmluY2x1ZGVMYWJlbHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVNYWluTGFiZWxzKSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21MYWJlbChib3VuZHMsIGVsZSwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNFZGdlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVTb3VyY2VMYWJlbHMpIHtcbiAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsICdzb3VyY2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUxhYmVsKGJvdW5kcywgZWxlLCAndGFyZ2V0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHN0eWxlIGVuYWJsZWQgZm9yIGxhYmVsc1xuICB9IC8vIGlmIGRpc3BsYXllZFxuXG4gIGJvdW5kcy54MSA9IG5vbmluZihib3VuZHMueDEpO1xuICBib3VuZHMueTEgPSBub25pbmYoYm91bmRzLnkxKTtcbiAgYm91bmRzLngyID0gbm9uaW5mKGJvdW5kcy54Mik7XG4gIGJvdW5kcy55MiA9IG5vbmluZihib3VuZHMueTIpO1xuICBib3VuZHMudyA9IG5vbmluZihib3VuZHMueDIgLSBib3VuZHMueDEpO1xuICBib3VuZHMuaCA9IG5vbmluZihib3VuZHMueTIgLSBib3VuZHMueTEpO1xuICBpZiAoYm91bmRzLncgPiAwICYmIGJvdW5kcy5oID4gMCAmJiBkaXNwbGF5ZWQpIHtcbiAgICBleHBhbmRCb3VuZGluZ0JveFNpZGVzKGJvdW5kcywgbWFudWFsRXhwYW5zaW9uKTtcblxuICAgIC8vIGV4cGFuZCBib3VuZHMgYnkgMSBiZWNhdXNlIGFudGlhbGlhc2luZyBjYW4gaW5jcmVhc2UgdGhlIHZpc3VhbC9lZmZlY3RpdmUgc2l6ZSBieSAxIG9uIGFsbCBzaWRlc1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJvdW5kcywgMSk7XG4gIH1cbiAgcmV0dXJuIGJvdW5kcztcbn07XG52YXIgZ2V0S2V5ID0gZnVuY3Rpb24gZ2V0S2V5KG9wdHMpIHtcbiAgdmFyIGkgPSAwO1xuICB2YXIgdGYgPSBmdW5jdGlvbiB0Zih2YWwpIHtcbiAgICByZXR1cm4gKHZhbCA/IDEgOiAwKSA8PCBpKys7XG4gIH07XG4gIHZhciBrZXkgPSAwO1xuICBrZXkgKz0gdGYob3B0cy5pbmN1ZGVOb2Rlcyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVFZGdlcyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVMYWJlbHMpO1xuICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlTWFpbkxhYmVscyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMpO1xuICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZU92ZXJsYXlzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZU91dGxpbmVzKTtcbiAgcmV0dXJuIGtleTtcbn07XG52YXIgZ2V0Qm91bmRpbmdCb3hQb3NLZXkgPSBmdW5jdGlvbiBnZXRCb3VuZGluZ0JveFBvc0tleShlbGUpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgIHZhciBwMSA9IGVsZS5zb3VyY2UoKS5wb3NpdGlvbigpO1xuICAgIHZhciBwMiA9IGVsZS50YXJnZXQoKS5wb3NpdGlvbigpO1xuICAgIHZhciByID0gZnVuY3Rpb24gcih4KSB7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZCh4KTtcbiAgICB9O1xuICAgIHJldHVybiBoYXNoSW50c0FycmF5KFtyKHAxLngpLCByKHAxLnkpLCByKHAyLngpLCByKHAyLnkpXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG52YXIgY2FjaGVkQm91bmRpbmdCb3hJbXBsID0gZnVuY3Rpb24gY2FjaGVkQm91bmRpbmdCb3hJbXBsKGVsZSwgb3B0cykge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBiYjtcbiAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgdmFyIGtleSA9IG9wdHMgPT0gbnVsbCA/IGRlZkJiT3B0c0tleSA6IGdldEtleShvcHRzKTtcbiAgdmFyIHVzaW5nRGVmT3B0cyA9IGtleSA9PT0gZGVmQmJPcHRzS2V5O1xuICB2YXIgY3VyclBvc0tleSA9IGdldEJvdW5kaW5nQm94UG9zS2V5KGVsZSk7XG4gIHZhciBpc1Bvc0tleVNhbWUgPSBfcC5iYkNhY2hlUG9zS2V5ID09PSBjdXJyUG9zS2V5O1xuICB2YXIgdXNlQ2FjaGUgPSBvcHRzLnVzZUNhY2hlICYmIGlzUG9zS2V5U2FtZTtcbiAgdmFyIGlzRGlydHkgPSBmdW5jdGlvbiBpc0RpcnR5KGVsZSkge1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYmJDYWNoZSA9PSBudWxsIHx8IGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5O1xuICB9O1xuICB2YXIgbmVlZFJlY2FsYyA9ICF1c2VDYWNoZSB8fCBpc0RpcnR5KGVsZSkgfHwgaXNFZGdlICYmIGlzRGlydHkoZWxlLnNvdXJjZSgpKSB8fCBpc0RpcnR5KGVsZS50YXJnZXQoKSk7XG4gIGlmIChuZWVkUmVjYWxjKSB7XG4gICAgaWYgKCFpc1Bvc0tleVNhbWUpIHtcbiAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodXNlQ2FjaGUpO1xuICAgIH1cbiAgICBiYiA9IGJvdW5kaW5nQm94SW1wbChlbGUsIGRlZkJiT3B0cyk7XG4gICAgX3AuYmJDYWNoZSA9IGJiO1xuICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBjdXJyUG9zS2V5O1xuICB9IGVsc2Uge1xuICAgIGJiID0gX3AuYmJDYWNoZTtcbiAgfVxuXG4gIC8vIG5vdCB1c2luZyBkZWYgb3B0cyA9PiBuZWVkIHRvIGJ1aWxkIHVwIGJiIGZyb20gY29tYmluYXRpb24gb2Ygc3ViIGJic1xuICBpZiAoIXVzaW5nRGVmT3B0cykge1xuICAgIHZhciBpc05vZGUgPSBlbGUuaXNOb2RlKCk7XG4gICAgYmIgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICBpZiAob3B0cy5pbmNsdWRlTm9kZXMgJiYgaXNOb2RlIHx8IG9wdHMuaW5jbHVkZUVkZ2VzICYmICFpc05vZGUpIHtcbiAgICAgIGlmIChvcHRzLmluY2x1ZGVPdmVybGF5cykge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5vdmVybGF5Qm91bmRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21Cb3goYmIsIF9wLmJvZHlCb3VuZHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0cy5pbmNsdWRlTGFiZWxzKSB7XG4gICAgICBpZiAob3B0cy5pbmNsdWRlTWFpbkxhYmVscyAmJiAoIWlzRWRnZSB8fCBvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMgJiYgb3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSkge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5sYWJlbEJvdW5kcy5hbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wdHMuaW5jbHVkZU1haW5MYWJlbHMpIHtcbiAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5sYWJlbEJvdW5kcy5tYWluUm90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pbmNsdWRlU291cmNlTGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMuc291cmNlUm90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgfVxuICByZXR1cm4gYmI7XG59O1xudmFyIGRlZkJiT3B0cyA9IHtcbiAgaW5jbHVkZU5vZGVzOiB0cnVlLFxuICBpbmNsdWRlRWRnZXM6IHRydWUsXG4gIGluY2x1ZGVMYWJlbHM6IHRydWUsXG4gIGluY2x1ZGVNYWluTGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlU291cmNlTGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlVGFyZ2V0TGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlT3ZlcmxheXM6IHRydWUsXG4gIGluY2x1ZGVVbmRlcmxheXM6IHRydWUsXG4gIGluY2x1ZGVPdXRsaW5lczogdHJ1ZSxcbiAgdXNlQ2FjaGU6IHRydWVcbn07XG52YXIgZGVmQmJPcHRzS2V5ID0gZ2V0S2V5KGRlZkJiT3B0cyk7XG52YXIgZmlsbGVkQmJPcHRzID0gZGVmYXVsdHMkZyhkZWZCYk9wdHMpO1xuZWxlc2ZuJGIuYm91bmRpbmdCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYm91bmRzO1xuXG4gIC8vIHRoZSBtYWluIHVzZWNhc2UgaXMgZWxlLmJvdW5kaW5nQm94KCkgZm9yIGEgc2luZ2xlIGVsZW1lbnQgd2l0aCBuby9kZWYgb3B0aW9uc1xuICAvLyBzcGVjaWZpZWQgcy50LiB0aGUgY2FjaGUgaXMgdXNlZCwgc28gY2hlY2sgZm9yIHRoaXMgY2FzZSB0byBtYWtlIGl0IGZhc3RlciBieVxuICAvLyBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUgIT0gbnVsbCAmJiAhdGhpc1swXS5fcHJpdmF0ZS5zdHlsZURpcnR5ICYmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy51c2VDYWNoZSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMudXNlQ2FjaGUgPT09IHRydWUpKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucyA9IGRlZkJiT3B0cztcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgYm91bmRzID0gY2FjaGVkQm91bmRpbmdCb3hJbXBsKHRoaXNbMF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kcyA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IGRlZkJiT3B0cztcbiAgICB2YXIgb3B0cyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGN5ID0gZWxlcy5jeSgpO1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5zdHlsZUVuYWJsZWQoKTtcbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIGN1cnJQb3NLZXkgPSBnZXRCb3VuZGluZ0JveFBvc0tleShlbGUpO1xuICAgICAgICB2YXIgaXNQb3NLZXlTYW1lID0gX3AuYmJDYWNoZVBvc0tleSA9PT0gY3VyclBvc0tleTtcbiAgICAgICAgdmFyIHVzZUNhY2hlID0gb3B0cy51c2VDYWNoZSAmJiBpc1Bvc0tleVNhbWUgJiYgIV9wLnN0eWxlRGlydHk7XG4gICAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodXNlQ2FjaGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCFvcHRpb25zLnVzZUNhY2hlKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZWxlID0gZWxlc1tfaV07XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJvdW5kcywgY2FjaGVkQm91bmRpbmdCb3hJbXBsKF9lbGUsIG9wdHMpKTtcbiAgICB9XG4gIH1cbiAgYm91bmRzLngxID0gbm9uaW5mKGJvdW5kcy54MSk7XG4gIGJvdW5kcy55MSA9IG5vbmluZihib3VuZHMueTEpO1xuICBib3VuZHMueDIgPSBub25pbmYoYm91bmRzLngyKTtcbiAgYm91bmRzLnkyID0gbm9uaW5mKGJvdW5kcy55Mik7XG4gIGJvdW5kcy53ID0gbm9uaW5mKGJvdW5kcy54MiAtIGJvdW5kcy54MSk7XG4gIGJvdW5kcy5oID0gbm9uaW5mKGJvdW5kcy55MiAtIGJvdW5kcy55MSk7XG4gIHJldHVybiBib3VuZHM7XG59O1xuZWxlc2ZuJGIuZGlydHlCb3VuZGluZ0JveENhY2hlID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3AgPSB0aGlzW2ldLl9wcml2YXRlO1xuICAgIF9wLmJiQ2FjaGUgPSBudWxsO1xuICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBudWxsO1xuICAgIF9wLmJvZHlCb3VuZHMgPSBudWxsO1xuICAgIF9wLm92ZXJsYXlCb3VuZHMgPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLmFsbCA9IG51bGw7XG4gICAgX3AubGFiZWxCb3VuZHMuc291cmNlID0gbnVsbDtcbiAgICBfcC5sYWJlbEJvdW5kcy50YXJnZXQgPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLm1haW4gPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLnNvdXJjZVJvdCA9IG51bGw7XG4gICAgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90ID0gbnVsbDtcbiAgICBfcC5sYWJlbEJvdW5kcy5tYWluUm90ID0gbnVsbDtcbiAgICBfcC5hcnJvd0JvdW5kcy5zb3VyY2UgPSBudWxsO1xuICAgIF9wLmFycm93Qm91bmRzLnRhcmdldCA9IG51bGw7XG4gICAgX3AuYXJyb3dCb3VuZHNbJ21pZC1zb3VyY2UnXSA9IG51bGw7XG4gICAgX3AuYXJyb3dCb3VuZHNbJ21pZC10YXJnZXQnXSA9IG51bGw7XG4gIH1cbiAgdGhpcy5lbWl0QW5kTm90aWZ5KCdib3VuZHMnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBwcml2YXRlIGhlbHBlciB0byBnZXQgYm91bmRpbmcgYm94IGZvciBjdXN0b20gbm9kZSBwb3NpdGlvbnNcbi8vIC0gZ29vZCBmb3IgcGVyZiBpbiBjZXJ0YWluIGNhc2VzIGJ1dCBjdXJyZW50bHkgcmVxdWlyZXMgZGlydHlpbmcgdGhlIHJlbmRlcmVkIHN0eWxlXG4vLyAtIHdvdWxkIGJlIGJldHRlciB0byBub3QgbW9kaWZ5IHRoZSBub2RlcyBidXQgdGhlIG5vZGVzIGFyZSByZWFkIGRpcmVjdGx5IGV2ZXJ5d2hlcmUgaW4gdGhlIHJlbmRlcmVyLi4uXG4vLyAtIHRyeSB0byB1c2UgZm9yIG9ubHkgdGhpbmdzIGxpa2UgZGlzY3JldGUgbGF5b3V0cyB3aGVyZSB0aGUgbm9kZSBwb3NpdGlvbiB3b3VsZCBjaGFuZ2UgYW55d2F5XG5lbGVzZm4kYi5ib3VuZGluZ0JveEF0ID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIHBhcmVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gIGlmIChoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgcGFyZW50cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaXNQYXJlbnQoKTtcbiAgICB9KTtcbiAgICBub2RlcyA9IG5vZGVzLm5vdChwYXJlbnRzKTtcbiAgfVxuICBpZiAocGxhaW5PYmplY3QoZm4pKSB7XG4gICAgdmFyIG9iaiA9IGZuO1xuICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH1cbiAgdmFyIHN0b3JlT2xkUG9zID0gZnVuY3Rpb24gc3RvcmVPbGRQb3Mobm9kZSwgaSkge1xuICAgIHJldHVybiBub2RlLl9wcml2YXRlLmJiQXRPbGRQb3MgPSBmbihub2RlLCBpKTtcbiAgfTtcbiAgdmFyIGdldE9sZFBvcyA9IGZ1bmN0aW9uIGdldE9sZFBvcyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuX3ByaXZhdGUuYmJBdE9sZFBvcztcbiAgfTtcbiAgY3kuc3RhcnRCYXRjaCgpO1xuICBub2Rlcy5mb3JFYWNoKHN0b3JlT2xkUG9zKS5zaWxlbnRQb3NpdGlvbnMoZm4pO1xuICBpZiAoaGFzQ29tcG91bmROb2Rlcykge1xuICAgIHBhcmVudHMuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgcGFyZW50cy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBwYXJlbnRzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKHRydWUpOyAvLyBmb3JjZSB1cGRhdGUgYi9jIHdlJ3JlIGluc2lkZSBhIGJhdGNoIGN5Y2xlXG4gIH1cblxuICB2YXIgYmIgPSBjb3B5Qm91bmRpbmdCb3godGhpcy5ib3VuZGluZ0JveCh7XG4gICAgdXNlQ2FjaGU6IGZhbHNlXG4gIH0pKTtcbiAgbm9kZXMuc2lsZW50UG9zaXRpb25zKGdldE9sZFBvcyk7XG4gIGlmIChoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgcGFyZW50cy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICBwYXJlbnRzLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgIHBhcmVudHMudXBkYXRlQ29tcG91bmRCb3VuZHModHJ1ZSk7IC8vIGZvcmNlIHVwZGF0ZSBiL2Mgd2UncmUgaW5zaWRlIGEgYmF0Y2ggY3ljbGVcbiAgfVxuXG4gIGN5LmVuZEJhdGNoKCk7XG4gIHJldHVybiBiYjtcbn07XG5mbiQzLmJvdW5kaW5nYm94ID0gZm4kMy5iYiA9IGZuJDMuYm91bmRpbmdCb3g7XG5mbiQzLnJlbmRlcmVkQm91bmRpbmdib3ggPSBmbiQzLnJlbmRlcmVkQm91bmRpbmdCb3g7XG52YXIgYm91bmRzID0gZWxlc2ZuJGI7XG5cbnZhciBmbiQyLCBlbGVzZm4kYTtcbmZuJDIgPSBlbGVzZm4kYSA9IHt9O1xudmFyIGRlZmluZURpbUZucyA9IGZ1bmN0aW9uIGRlZmluZURpbUZucyhvcHRzKSB7XG4gIG9wdHMudXBwZXJjYXNlTmFtZSA9IGNhcGl0YWxpemUob3B0cy5uYW1lKTtcbiAgb3B0cy5hdXRvTmFtZSA9ICdhdXRvJyArIG9wdHMudXBwZXJjYXNlTmFtZTtcbiAgb3B0cy5sYWJlbE5hbWUgPSAnbGFiZWwnICsgb3B0cy51cHBlcmNhc2VOYW1lO1xuICBvcHRzLm91dGVyTmFtZSA9ICdvdXRlcicgKyBvcHRzLnVwcGVyY2FzZU5hbWU7XG4gIG9wdHMudXBwZXJjYXNlT3V0ZXJOYW1lID0gY2FwaXRhbGl6ZShvcHRzLm91dGVyTmFtZSk7XG4gIGZuJDJbb3B0cy5uYW1lXSA9IGZ1bmN0aW9uIGRpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciBjeSA9IF9wLmN5O1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7XG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKHN0eWxlRW5hYmxlZCkge1xuICAgICAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgICAgICAgICByZXR1cm4gX3Bbb3B0cy5hdXRvTmFtZV0gfHwgMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZCA9IGVsZS5wc3R5bGUob3B0cy5uYW1lKTtcbiAgICAgICAgc3dpdGNoIChkLnN0clZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbGFiZWwnOlxuICAgICAgICAgICAgZWxlLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIF9wLnJzdHlsZVtvcHRzLmxhYmVsTmFtZV0gfHwgMDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGQucGZWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBmbiQyWydvdXRlcicgKyBvcHRzLnVwcGVyY2FzZU5hbWVdID0gZnVuY3Rpb24gb3V0ZXJEaW1JbXBsKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgY3kgPSBfcC5jeTtcbiAgICB2YXIgc3R5bGVFbmFibGVkID0gY3kuX3ByaXZhdGUuc3R5bGVFbmFibGVkO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIGlmIChzdHlsZUVuYWJsZWQpIHtcbiAgICAgICAgdmFyIGRpbSA9IGVsZVtvcHRzLm5hbWVdKCk7XG4gICAgICAgIHZhciBib3JkZXIgPSBlbGUucHN0eWxlKCdib3JkZXItd2lkdGgnKS5wZlZhbHVlOyAvLyBuLmIuIDEvMiBlYWNoIHNpZGVcbiAgICAgICAgdmFyIHBhZGRpbmcgPSAyICogZWxlLnBhZGRpbmcoKTtcbiAgICAgICAgcmV0dXJuIGRpbSArIGJvcmRlciArIHBhZGRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGZuJDJbJ3JlbmRlcmVkJyArIG9wdHMudXBwZXJjYXNlTmFtZV0gPSBmdW5jdGlvbiByZW5kZXJlZERpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIGQgPSBlbGVbb3B0cy5uYW1lXSgpO1xuICAgICAgcmV0dXJuIGQgKiB0aGlzLmN5KCkuem9vbSgpO1xuICAgIH1cbiAgfTtcbiAgZm4kMlsncmVuZGVyZWQnICsgb3B0cy51cHBlcmNhc2VPdXRlck5hbWVdID0gZnVuY3Rpb24gcmVuZGVyZWRPdXRlckRpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIG9kID0gZWxlW29wdHMub3V0ZXJOYW1lXSgpO1xuICAgICAgcmV0dXJuIG9kICogdGhpcy5jeSgpLnpvb20oKTtcbiAgICB9XG4gIH07XG59O1xuZGVmaW5lRGltRm5zKHtcbiAgbmFtZTogJ3dpZHRoJ1xufSk7XG5kZWZpbmVEaW1GbnMoe1xuICBuYW1lOiAnaGVpZ2h0J1xufSk7XG5lbGVzZm4kYS5wYWRkaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlID0gdGhpc1swXTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICBlbGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgICBpZiAoX3AuYXV0b1BhZGRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIF9wLmF1dG9QYWRkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlLnBzdHlsZSgncGFkZGluZycpLnBmVmFsdWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbGUucHN0eWxlKCdwYWRkaW5nJykucGZWYWx1ZTtcbiAgfVxufTtcbmVsZXNmbiRhLnBhZGRlZEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUuaGVpZ2h0KCkgKyAyICogZWxlLnBhZGRpbmcoKTtcbn07XG5lbGVzZm4kYS5wYWRkZWRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUud2lkdGgoKSArIDIgKiBlbGUucGFkZGluZygpO1xufTtcbnZhciB3aWR0aEhlaWdodCA9IGVsZXNmbiRhO1xuXG52YXIgaWZFZGdlID0gZnVuY3Rpb24gaWZFZGdlKGVsZSwgZ2V0VmFsdWUpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgIHJldHVybiBnZXRWYWx1ZShlbGUpO1xuICB9XG59O1xudmFyIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9uKGVsZSwgZ2V0UG9pbnQpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgIHZhciBjeSA9IGVsZS5jeSgpO1xuICAgIHJldHVybiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihnZXRQb2ludChlbGUpLCBjeS56b29tKCksIGN5LnBhbigpKTtcbiAgfVxufTtcbnZhciBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyA9IGZ1bmN0aW9uIGlmRWRnZVJlbmRlcmVkUG9zaXRpb25zKGVsZSwgZ2V0UG9pbnRzKSB7XG4gIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICB2YXIgY3kgPSBlbGUuY3koKTtcbiAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgcmV0dXJuIGdldFBvaW50cyhlbGUpLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgcmV0dXJuIG1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uKHAsIHpvb20sIHBhbik7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgY29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoZWxlKSB7XG4gIHJldHVybiBlbGUucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKGVsZSk7XG59O1xudmFyIHNlZ21lbnRQb2ludHMgPSBmdW5jdGlvbiBzZWdtZW50UG9pbnRzKGVsZSkge1xuICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U2VnbWVudFBvaW50cyhlbGUpO1xufTtcbnZhciBzb3VyY2VFbmRwb2ludCA9IGZ1bmN0aW9uIHNvdXJjZUVuZHBvaW50KGVsZSkge1xuICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZWxlKTtcbn07XG52YXIgdGFyZ2V0RW5kcG9pbnQgPSBmdW5jdGlvbiB0YXJnZXRFbmRwb2ludChlbGUpIHtcbiAgcmV0dXJuIGVsZS5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGVsZSk7XG59O1xudmFyIG1pZHBvaW50ID0gZnVuY3Rpb24gbWlkcG9pbnQoZWxlKSB7XG4gIHJldHVybiBlbGUucmVuZGVyZXIoKS5nZXRFZGdlTWlkcG9pbnQoZWxlKTtcbn07XG52YXIgcHRzID0ge1xuICBjb250cm9sUG9pbnRzOiB7XG4gICAgZ2V0OiBjb250cm9sUG9pbnRzLFxuICAgIG11bHQ6IHRydWVcbiAgfSxcbiAgc2VnbWVudFBvaW50czoge1xuICAgIGdldDogc2VnbWVudFBvaW50cyxcbiAgICBtdWx0OiB0cnVlXG4gIH0sXG4gIHNvdXJjZUVuZHBvaW50OiB7XG4gICAgZ2V0OiBzb3VyY2VFbmRwb2ludFxuICB9LFxuICB0YXJnZXRFbmRwb2ludDoge1xuICAgIGdldDogdGFyZ2V0RW5kcG9pbnRcbiAgfSxcbiAgbWlkcG9pbnQ6IHtcbiAgICBnZXQ6IG1pZHBvaW50XG4gIH1cbn07XG52YXIgcmVuZGVyZWROYW1lID0gZnVuY3Rpb24gcmVuZGVyZWROYW1lKG5hbWUpIHtcbiAgcmV0dXJuICdyZW5kZXJlZCcgKyBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cigxKTtcbn07XG52YXIgZWRnZVBvaW50cyA9IE9iamVjdC5rZXlzKHB0cykucmVkdWNlKGZ1bmN0aW9uIChvYmosIG5hbWUpIHtcbiAgdmFyIHNwZWMgPSBwdHNbbmFtZV07XG4gIHZhciByTmFtZSA9IHJlbmRlcmVkTmFtZShuYW1lKTtcbiAgb2JqW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpZkVkZ2UodGhpcywgc3BlYy5nZXQpO1xuICB9O1xuICBpZiAoc3BlYy5tdWx0KSB7XG4gICAgb2JqW3JOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyh0aGlzLCBzcGVjLmdldCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvYmpbck5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24odGhpcywgc3BlYy5nZXQpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0sIHt9KTtcblxudmFyIGRpbWVuc2lvbnMgPSBleHRlbmQoe30sIHBvc2l0aW9uLCBib3VuZHMsIHdpZHRoSGVpZ2h0LCBlZGdlUG9pbnRzKTtcblxuLyohXG5FdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2VcblxuaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvXG5odHRwczovL3RsZHJsZWdhbC5jb20vbGljZW5zZS9taXQtbGljZW5zZVxuaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvc3JjL2V2ZW50LmpzXG4qL1xuXG52YXIgRXZlbnQgPSBmdW5jdGlvbiBFdmVudChzcmMsIHByb3BzKSB7XG4gIHRoaXMucmVjeWNsZShzcmMsIHByb3BzKTtcbn07XG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxuRXZlbnQucHJvdG90eXBlID0ge1xuICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgcmV0dXJuICdldmVudCc7XG4gIH0sXG4gIHJlY3ljbGU6IGZ1bmN0aW9uIHJlY3ljbGUoc3JjLCBwcm9wcykge1xuICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5GYWxzZTtcbiAgICBpZiAoc3JjICE9IG51bGwgJiYgc3JjLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAvLyBCcm93c2VyIEV2ZW50IG9iamVjdFxuICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7XG5cbiAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG4gICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7XG4gICAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMudHlwZSkge1xuICAgICAgLy8gUGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGV2ZW50IGRldGFpbHNcbiAgICAgIHByb3BzID0gc3JjO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVudCBzdHJpbmdcbiAgICAgIHRoaXMudHlwZSA9IHNyYztcbiAgICB9XG5cbiAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuICAgIGlmIChwcm9wcyAhPSBudWxsKSB7XG4gICAgICAvLyBtb3JlIGVmZmljaWVudCB0byBtYW51YWxseSBjb3B5IGZpZWxkcyB3ZSB1c2VcbiAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHByb3BzLm9yaWdpbmFsRXZlbnQ7XG4gICAgICB0aGlzLnR5cGUgPSBwcm9wcy50eXBlICE9IG51bGwgPyBwcm9wcy50eXBlIDogdGhpcy50eXBlO1xuICAgICAgdGhpcy5jeSA9IHByb3BzLmN5O1xuICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gcHJvcHMucG9zaXRpb247XG4gICAgICB0aGlzLnJlbmRlcmVkUG9zaXRpb24gPSBwcm9wcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2U7XG4gICAgICB0aGlzLmxheW91dCA9IHByb3BzLmxheW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3kgIT0gbnVsbCAmJiB0aGlzLnBvc2l0aW9uICE9IG51bGwgJiYgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIGNyZWF0ZSBhIHJlbmRlcmVkIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBwYXNzZWQgcG9zaXRpb25cbiAgICAgIHZhciBwb3MgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgdmFyIHpvb20gPSB0aGlzLmN5Lnpvb20oKTtcbiAgICAgIHZhciBwYW4gPSB0aGlzLmN5LnBhbigpO1xuICAgICAgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID0ge1xuICAgICAgICB4OiBwb3MueCAqIHpvb20gKyBwYW4ueCxcbiAgICAgICAgeTogcG9zLnkgKiB6b29tICsgcGFuLnlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcbiAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG4gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnRcbiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcbiAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSxcbiAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSxcbiAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcbiAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2Vcbn07XG5cbnZhciBldmVudFJlZ2V4ID0gL14oW14uXSspKFxcLig/OlteLl0rKSk/JC87IC8vIHJlZ2V4IGZvciBtYXRjaGluZyBldmVudCBzdHJpbmdzIChlLmcuIFwiY2xpY2submFtZXNwYWNlXCIpXG52YXIgdW5pdmVyc2FsTmFtZXNwYWNlID0gJy4qJzsgLy8gbWF0Y2hlcyBhcyBpZiBubyBuYW1lc3BhY2Ugc3BlY2lmaWVkIGFuZCBwcmV2ZW50cyB1c2VycyBmcm9tIHVuYmluZGluZyBhY2NpZGVudGFsbHlcblxudmFyIGRlZmF1bHRzJDggPSB7XG4gIHF1YWxpZmllckNvbXBhcmU6IGZ1bmN0aW9uIHF1YWxpZmllckNvbXBhcmUocTEsIHEyKSB7XG4gICAgcmV0dXJuIHExID09PSBxMjtcbiAgfSxcbiAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoIC8qY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKi9cbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyggLypjb250ZXh0LCBldnQqL1xuICApIHt9LFxuICBjYWxsYmFja0NvbnRleHQ6IGZ1bmN0aW9uIGNhbGxiYWNrQ29udGV4dChjb250ZXh0IC8qLCBsaXN0ZW5lciwgZXZlbnRPYmoqLykge1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9LFxuICBiZWZvcmVFbWl0OiBmdW5jdGlvbiBiZWZvcmVFbWl0KCAvKiBjb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmogKi9cbiAgKSB7fSxcbiAgYWZ0ZXJFbWl0OiBmdW5jdGlvbiBhZnRlckVtaXQoIC8qIGNvbnRleHQsIGxpc3RlbmVyLCBldmVudE9iaiAqL1xuICApIHt9LFxuICBidWJibGU6IGZ1bmN0aW9uIGJ1YmJsZSggLypjb250ZXh0Ki9cbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBwYXJlbnQ6IGZ1bmN0aW9uIHBhcmVudCggLypjb250ZXh0Ki9cbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGNvbnRleHQ6IG51bGxcbn07XG52YXIgZGVmYXVsdHNLZXlzID0gT2JqZWN0LmtleXMoZGVmYXVsdHMkOCk7XG52YXIgZW1wdHlPcHRzID0ge307XG5mdW5jdGlvbiBFbWl0dGVyKCkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHlPcHRzO1xuICB2YXIgY29udGV4dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAvLyBtaWNyby1vcHRpbWlzYXRpb24gdnMgT2JqZWN0LmFzc2lnbigpIC0tIHJlZHVjZXMgRWxlbWVudCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZhdWx0c0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gZGVmYXVsdHNLZXlzW2ldO1xuICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XSB8fCBkZWZhdWx0cyQ4W2tleV07XG4gIH1cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLmNvbnRleHQ7XG4gIHRoaXMubGlzdGVuZXJzID0gW107XG4gIHRoaXMuZW1pdHRpbmcgPSAwO1xufVxudmFyIHAgPSBFbWl0dGVyLnByb3RvdHlwZTtcbnZhciBmb3JFYWNoRXZlbnQgPSBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoc2VsZiwgaGFuZGxlciwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKSB7XG4gIGlmIChmbiQ2KHF1YWxpZmllcikpIHtcbiAgICBjYWxsYmFjayA9IHF1YWxpZmllcjtcbiAgICBxdWFsaWZpZXIgPSBudWxsO1xuICB9XG4gIGlmIChjb25mT3ZlcnJpZGVzKSB7XG4gICAgaWYgKGNvbmYgPT0gbnVsbCkge1xuICAgICAgY29uZiA9IGNvbmZPdmVycmlkZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmYgPSBleHRlbmQoe30sIGNvbmYsIGNvbmZPdmVycmlkZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG4gICAgaWYgKGVtcHR5U3RyaW5nKGV2dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgIHZhciByZXQgPSBoYW5kbGVyKHNlbGYsIGV2dCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKTtcbiAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBhbGxvdyBleGl0aW5nIGVhcmx5XG4gICAgfVxuICB9XG59O1xuXG52YXIgbWFrZUV2ZW50T2JqID0gZnVuY3Rpb24gbWFrZUV2ZW50T2JqKHNlbGYsIG9iaikge1xuICBzZWxmLmFkZEV2ZW50RmllbGRzKHNlbGYuY29udGV4dCwgb2JqKTtcbiAgcmV0dXJuIG5ldyBFdmVudChvYmoudHlwZSwgb2JqKTtcbn07XG52YXIgZm9yRWFjaEV2ZW50T2JqID0gZnVuY3Rpb24gZm9yRWFjaEV2ZW50T2JqKHNlbGYsIGhhbmRsZXIsIGV2ZW50cykge1xuICBpZiAoZXZlbnQoZXZlbnRzKSkge1xuICAgIGhhbmRsZXIoc2VsZiwgZXZlbnRzKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAocGxhaW5PYmplY3QoZXZlbnRzKSkge1xuICAgIGhhbmRsZXIoc2VsZiwgbWFrZUV2ZW50T2JqKHNlbGYsIGV2ZW50cykpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG4gICAgaWYgKGVtcHR5U3RyaW5nKGV2dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgIHZhciBldmVudE9iaiA9IG1ha2VFdmVudE9iaihzZWxmLCB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB0YXJnZXQ6IHNlbGYuY29udGV4dFxuICAgICAgfSk7XG4gICAgICBoYW5kbGVyKHNlbGYsIGV2ZW50T2JqKTtcbiAgICB9XG4gIH1cbn07XG5wLm9uID0gcC5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudHMsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYsIGNvbmZPdmVycmlkZXMpIHtcbiAgZm9yRWFjaEV2ZW50KHRoaXMsIGZ1bmN0aW9uIChzZWxmLCBldmVudCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gICAgaWYgKGZuJDYoY2FsbGJhY2spKSB7XG4gICAgICBzZWxmLmxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAvLyBmdWxsIGV2ZW50IHN0cmluZ1xuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIC8vIGNhbGxiYWNrIHRvIHJ1blxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAvLyB0aGUgZXZlbnQgdHlwZSAoZS5nLiAnY2xpY2snKVxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgLy8gdGhlIGV2ZW50IG5hbWVzcGFjZSAoZS5nLiBcIi5mb29cIilcbiAgICAgICAgcXVhbGlmaWVyOiBxdWFsaWZpZXIsXG4gICAgICAgIC8vIGEgcmVzdHJpY3Rpb24gb24gd2hldGhlciB0byBtYXRjaCB0aGlzIGVtaXR0ZXJcbiAgICAgICAgY29uZjogY29uZiAvLyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xucC5vbmUgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gIHJldHVybiB0aGlzLm9uKGV2ZW50cywgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZiwge1xuICAgIG9uZTogdHJ1ZVxuICB9KTtcbn07XG5wLnJlbW92ZUxpc3RlbmVyID0gcC5vZmYgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIGlmICh0aGlzLmVtaXR0aW5nICE9PSAwKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBjb3B5QXJyYXkkMSh0aGlzLmxpc3RlbmVycyk7XG4gIH1cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzO1xuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgIGZvckVhY2hFdmVudChfdGhpcywgZnVuY3Rpb24gKHNlbGYsIGV2ZW50LCB0eXBlLCBuYW1lc3BhY2UsIHF1YWxpZmllciwgY2FsbGJhY2sgLyosIGNvbmYqLykge1xuICAgICAgaWYgKChsaXN0ZW5lci50eXBlID09PSB0eXBlIHx8IGV2ZW50cyA9PT0gJyonKSAmJiAoIW5hbWVzcGFjZSAmJiBsaXN0ZW5lci5uYW1lc3BhY2UgIT09ICcuKicgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSBuYW1lc3BhY2UpICYmICghcXVhbGlmaWVyIHx8IHNlbGYucXVhbGlmaWVyQ29tcGFyZShsaXN0ZW5lci5xdWFsaWZpZXIsIHF1YWxpZmllcikpICYmICghY2FsbGJhY2sgfHwgbGlzdGVuZXIuY2FsbGJhY2sgPT09IGNhbGxiYWNrKSkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKTtcbiAgfTtcbiAgZm9yICh2YXIgaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIF9sb29wKGkpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcbnAucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcignKicpO1xufTtcbnAuZW1pdCA9IHAudHJpZ2dlciA9IGZ1bmN0aW9uIChldmVudHMsIGV4dHJhUGFyYW1zLCBtYW51YWxDYWxsYmFjaykge1xuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnM7XG4gIHZhciBudW1MaXN0ZW5lcnNCZWZvcmVFbWl0ID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgdGhpcy5lbWl0dGluZysrO1xuICBpZiAoIWFycmF5KGV4dHJhUGFyYW1zKSkge1xuICAgIGV4dHJhUGFyYW1zID0gW2V4dHJhUGFyYW1zXTtcbiAgfVxuICBmb3JFYWNoRXZlbnRPYmoodGhpcywgZnVuY3Rpb24gKHNlbGYsIGV2ZW50T2JqKSB7XG4gICAgaWYgKG1hbnVhbENhbGxiYWNrICE9IG51bGwpIHtcbiAgICAgIGxpc3RlbmVycyA9IFt7XG4gICAgICAgIGV2ZW50OiBldmVudE9iai5ldmVudCxcbiAgICAgICAgdHlwZTogZXZlbnRPYmoudHlwZSxcbiAgICAgICAgbmFtZXNwYWNlOiBldmVudE9iai5uYW1lc3BhY2UsXG4gICAgICAgIGNhbGxiYWNrOiBtYW51YWxDYWxsYmFja1xuICAgICAgfV07XG4gICAgICBudW1MaXN0ZW5lcnNCZWZvcmVFbWl0ID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICB9XG4gICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMihpKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBpZiAobGlzdGVuZXIudHlwZSA9PT0gZXZlbnRPYmoudHlwZSAmJiAoIWxpc3RlbmVyLm5hbWVzcGFjZSB8fCBsaXN0ZW5lci5uYW1lc3BhY2UgPT09IGV2ZW50T2JqLm5hbWVzcGFjZSB8fCBsaXN0ZW5lci5uYW1lc3BhY2UgPT09IHVuaXZlcnNhbE5hbWVzcGFjZSkgJiYgc2VsZi5ldmVudE1hdGNoZXMoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopKSB7XG4gICAgICAgIHZhciBhcmdzID0gW2V2ZW50T2JqXTtcbiAgICAgICAgaWYgKGV4dHJhUGFyYW1zICE9IG51bGwpIHtcbiAgICAgICAgICBwdXNoKGFyZ3MsIGV4dHJhUGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmJlZm9yZUVtaXQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuICAgICAgICBpZiAobGlzdGVuZXIuY29uZiAmJiBsaXN0ZW5lci5jb25mLm9uZSkge1xuICAgICAgICAgIHNlbGYubGlzdGVuZXJzID0gc2VsZi5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gbCAhPT0gbGlzdGVuZXI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbnRleHQgPSBzZWxmLmNhbGxiYWNrQ29udGV4dChzZWxmLmNvbnRleHQsIGxpc3RlbmVyLCBldmVudE9iaik7XG4gICAgICAgIHZhciByZXQgPSBsaXN0ZW5lci5jYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgc2VsZi5hZnRlckVtaXQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgIGV2ZW50T2JqLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50T2JqLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaWYgbGlzdGVuZXIgbWF0Y2hlc1xuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1MaXN0ZW5lcnNCZWZvcmVFbWl0OyBpKyspIHtcbiAgICAgIF9sb29wMihpKTtcbiAgICB9IC8vIGZvciBsaXN0ZW5lclxuXG4gICAgaWYgKHNlbGYuYnViYmxlKHNlbGYuY29udGV4dCkgJiYgIWV2ZW50T2JqLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgIHNlbGYucGFyZW50KHNlbGYuY29udGV4dCkuZW1pdChldmVudE9iaiwgZXh0cmFQYXJhbXMpO1xuICAgIH1cbiAgfSwgZXZlbnRzKTtcbiAgdGhpcy5lbWl0dGluZy0tO1xuICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBlbWl0dGVyT3B0aW9ucyQxID0ge1xuICBxdWFsaWZpZXJDb21wYXJlOiBmdW5jdGlvbiBxdWFsaWZpZXJDb21wYXJlKHNlbGVjdG9yMSwgc2VsZWN0b3IyKSB7XG4gICAgaWYgKHNlbGVjdG9yMSA9PSBudWxsIHx8IHNlbGVjdG9yMiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3IxID09IG51bGwgJiYgc2VsZWN0b3IyID09IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzZWxlY3RvcjEuc2FtZVRleHQoc2VsZWN0b3IyKTtcbiAgICB9XG4gIH0sXG4gIGV2ZW50TWF0Y2hlczogZnVuY3Rpb24gZXZlbnRNYXRjaGVzKGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgdmFyIHNlbGVjdG9yID0gbGlzdGVuZXIucXVhbGlmaWVyO1xuICAgIGlmIChzZWxlY3RvciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlICE9PSBldmVudE9iai50YXJnZXQgJiYgZWxlbWVudChldmVudE9iai50YXJnZXQpICYmIHNlbGVjdG9yLm1hdGNoZXMoZXZlbnRPYmoudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhlbGUsIGV2dCkge1xuICAgIGV2dC5jeSA9IGVsZS5jeSgpO1xuICAgIGV2dC50YXJnZXQgPSBlbGU7XG4gIH0sXG4gIGNhbGxiYWNrQ29udGV4dDogZnVuY3Rpb24gY2FsbGJhY2tDb250ZXh0KGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnF1YWxpZmllciAhPSBudWxsID8gZXZlbnRPYmoudGFyZ2V0IDogZWxlO1xuICB9LFxuICBiZWZvcmVFbWl0OiBmdW5jdGlvbiBiZWZvcmVFbWl0KGNvbnRleHQsIGxpc3RlbmVyIC8qLCBldmVudE9iaiovKSB7XG4gICAgaWYgKGxpc3RlbmVyLmNvbmYgJiYgbGlzdGVuZXIuY29uZi5vbmNlKSB7XG4gICAgICBsaXN0ZW5lci5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyLmV2ZW50LCBsaXN0ZW5lci5xdWFsaWZpZXIsIGxpc3RlbmVyLmNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG4gIGJ1YmJsZTogZnVuY3Rpb24gYnViYmxlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBwYXJlbnQ6IGZ1bmN0aW9uIHBhcmVudChlbGUpIHtcbiAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKSA/IGVsZS5wYXJlbnQoKSA6IGVsZS5jeSgpO1xuICB9XG59O1xudmFyIGFyZ1NlbGVjdG9yJDEgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgaWYgKHN0cmluZyhhcmcpKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvcihhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcmc7XG4gIH1cbn07XG52YXIgZWxlc2ZuJDkgPSB7XG4gIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIGNyZWF0ZUVtaXR0ZXIoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIGlmICghX3AuZW1pdHRlcikge1xuICAgICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMkMSwgZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGVtaXR0ZXI6IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcjtcbiAgfSxcbiAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGVsZS5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBhcmdTZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZUFsbExpc3RlbmVyczogZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGVsZS5lbWl0dGVyKCkub25lKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBvbmNlOiBmdW5jdGlvbiBvbmNlKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjaywge1xuICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICBvbmNlQ29sbGVjdGlvbjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgZWxlLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZW1pdEFuZE5vdGlmeTogZnVuY3Rpb24gZW1pdEFuZE5vdGlmeShldmVudCwgZXh0cmFQYXJhbXMpIHtcbiAgICAvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHlcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGVtcHR5IGNvbGxlY3Rpb25zIGRvbid0IG5lZWQgdG8gbm90aWZ5IGFueXRoaW5nXG5cbiAgICAvLyBub3RpZnkgcmVuZGVyZXJcbiAgICB0aGlzLmN5KCkubm90aWZ5KGV2ZW50LCB0aGlzKTtcbiAgICB0aGlzLmVtaXQoZXZlbnQsIGV4dHJhUGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcbmRlZmluZS5ldmVudEFsaWFzZXNPbihlbGVzZm4kOSk7XG5cbnZhciBlbGVzZm4kOCA9IHtcbiAgbm9kZXM6IGZ1bmN0aW9uIG5vZGVzKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgZWRnZXM6IGZ1bmN0aW9uIGVkZ2VzKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNFZGdlKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgLy8gaW50ZXJuYWwgaGVscGVyIHRvIGdldCBub2RlcyBhbmQgZWRnZXMgYXMgc2VwYXJhdGUgY29sbGVjdGlvbnMgd2l0aCBzaW5nbGUgaXRlcmF0aW9uIG92ZXIgZWxlbWVudHNcbiAgYnlHcm91cDogZnVuY3Rpb24gYnlHcm91cCgpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5zcGF3bigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgIGVkZ2VzOiBlZGdlc1xuICAgIH07XG4gIH0sXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKF9maWx0ZXIsIHRoaXNBcmcpIHtcbiAgICBpZiAoX2ZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjaGVjayB0aGlzIGZpcnN0IGIvYyBpdCdzIHRoZSBtb3N0IGNvbW1vbi9wZXJmb3JtYW50IGNhc2VcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nKF9maWx0ZXIpIHx8IGVsZW1lbnRPckNvbGxlY3Rpb24oX2ZpbHRlcikpIHtcbiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoX2ZpbHRlcikuZmlsdGVyKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoZm4kNihfZmlsdGVyKSkge1xuICAgICAgdmFyIGZpbHRlckVsZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBpbmNsdWRlID0gdGhpc0FyZyA/IF9maWx0ZXIuYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogX2ZpbHRlcihlbGUsIGksIGVsZXMpO1xuICAgICAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgICAgIGZpbHRlckVsZXMucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyRWxlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oKTsgLy8gaWYgbm90IGhhbmRsZWQgYnkgYWJvdmUsIGdpdmUgJ2VtIGFuIGVtcHR5IGNvbGxlY3Rpb25cbiAgfSxcblxuICBub3Q6IGZ1bmN0aW9uIG5vdCh0b1JlbW92ZSkge1xuICAgIGlmICghdG9SZW1vdmUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RyaW5nKHRvUmVtb3ZlKSkge1xuICAgICAgICB0b1JlbW92ZSA9IHRoaXMuZmlsdGVyKHRvUmVtb3ZlKTtcbiAgICAgIH1cbiAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuc3Bhd24oKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07XG4gICAgICAgIHZhciByZW1vdmUgPSB0b1JlbW92ZS5oYXMoZWxlbWVudCk7XG4gICAgICAgIGlmICghcmVtb3ZlKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cbiAgfSxcbiAgYWJzb2x1dGVDb21wbGVtZW50OiBmdW5jdGlvbiBhYnNvbHV0ZUNvbXBsZW1lbnQoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHJldHVybiBjeS5tdXRhYmxlRWxlbWVudHMoKS5ub3QodGhpcyk7XG4gIH0sXG4gIGludGVyc2VjdDogZnVuY3Rpb24gaW50ZXJzZWN0KG90aGVyKSB7XG4gICAgLy8gaWYgYSBzZWxlY3RvciBpcyBzcGVjaWZpZWQsIHRoZW4gZmlsdGVyIGJ5IGl0IGluc3RlYWRcbiAgICBpZiAoc3RyaW5nKG90aGVyKSkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gb3RoZXI7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGNvbDEgPSB0aGlzO1xuICAgIHZhciBjb2wyID0gb3RoZXI7XG4gICAgdmFyIGNvbDFTbWFsbGVyID0gdGhpcy5sZW5ndGggPCBvdGhlci5sZW5ndGg7XG4gICAgdmFyIGNvbFMgPSBjb2wxU21hbGxlciA/IGNvbDEgOiBjb2wyO1xuICAgIHZhciBjb2xMID0gY29sMVNtYWxsZXIgPyBjb2wyIDogY29sMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbFMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBjb2xTW2ldO1xuICAgICAgaWYgKGNvbEwuaGFzKGVsZSkpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sXG4gIHhvcjogZnVuY3Rpb24geG9yKG90aGVyKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoc3RyaW5nKG90aGVyKSkge1xuICAgICAgb3RoZXIgPSBjeS4kKG90aGVyKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBjb2wxID0gdGhpcztcbiAgICB2YXIgY29sMiA9IG90aGVyO1xuICAgIHZhciBhZGQgPSBmdW5jdGlvbiBhZGQoY29sLCBvdGhlcikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGNvbFtpXTtcbiAgICAgICAgdmFyIGlkID0gZWxlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICAgIHZhciBpbk90aGVyID0gb3RoZXIuaGFzRWxlbWVudFdpdGhJZChpZCk7XG4gICAgICAgIGlmICghaW5PdGhlcikge1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgYWRkKGNvbDEsIGNvbDIpO1xuICAgIGFkZChjb2wyLCBjb2wxKTtcbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sXG4gIGRpZmY6IGZ1bmN0aW9uIGRpZmYob3RoZXIpIHtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIGlmIChzdHJpbmcob3RoZXIpKSB7XG4gICAgICBvdGhlciA9IGN5LiQob3RoZXIpO1xuICAgIH1cbiAgICB2YXIgbGVmdCA9IHRoaXMuc3Bhd24oKTtcbiAgICB2YXIgcmlnaHQgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGJvdGggPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGNvbDEgPSB0aGlzO1xuICAgIHZhciBjb2wyID0gb3RoZXI7XG4gICAgdmFyIGFkZCA9IGZ1bmN0aW9uIGFkZChjb2wsIG90aGVyLCByZXRFbGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gY29sW2ldO1xuICAgICAgICB2YXIgaWQgPSBlbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICAgICAgdmFyIGluT3RoZXIgPSBvdGhlci5oYXNFbGVtZW50V2l0aElkKGlkKTtcbiAgICAgICAgaWYgKGluT3RoZXIpIHtcbiAgICAgICAgICBib3RoLm1lcmdlKGVsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0RWxlcy5wdXNoKGVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGFkZChjb2wxLCBjb2wyLCBsZWZ0KTtcbiAgICBhZGQoY29sMiwgY29sMSwgcmlnaHQpO1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgYm90aDogYm90aFxuICAgIH07XG4gIH0sXG4gIGFkZDogZnVuY3Rpb24gYWRkKHRvQWRkKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoIXRvQWRkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHN0cmluZyh0b0FkZCkpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHRvQWRkO1xuICAgICAgdG9BZGQgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnNwYXduU2VsZigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9BZGQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0b0FkZFtpXTtcbiAgICAgIHZhciBhZGQgPSAhdGhpcy5oYXMoZWxlKTtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH0sXG4gIC8vIGluIHBsYWNlIG1lcmdlIG9uIGNhbGxpbmcgY29sbGVjdGlvblxuICBtZXJnZTogZnVuY3Rpb24gbWVyZ2UodG9BZGQpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBjeSA9IF9wLmN5O1xuICAgIGlmICghdG9BZGQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodG9BZGQgJiYgc3RyaW5nKHRvQWRkKSkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gdG9BZGQ7XG4gICAgICB0b0FkZCA9IGN5Lm11dGFibGVFbGVtZW50cygpLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfVxuICAgIHZhciBtYXAgPSBfcC5tYXA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0FkZC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRvQWRkRWxlID0gdG9BZGRbaV07XG4gICAgICB2YXIgaWQgPSB0b0FkZEVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgdmFyIGFkZCA9ICFtYXAuaGFzKGlkKTtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sZW5ndGgrKztcbiAgICAgICAgdGhpc1tpbmRleF0gPSB0b0FkZEVsZTtcbiAgICAgICAgbWFwLnNldChpZCwge1xuICAgICAgICAgIGVsZTogdG9BZGRFbGUsXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1bm1lcmdlQXQ6IGZ1bmN0aW9uIHVubWVyZ2VBdChpKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgbWFwID0gX3AubWFwO1xuXG4gICAgLy8gcmVtb3ZlIGVsZVxuICAgIHRoaXNbaV0gPSB1bmRlZmluZWQ7XG4gICAgbWFwW1wiZGVsZXRlXCJdKGlkKTtcbiAgICB2YXIgdW5tZXJnZWRMYXN0RWxlID0gaSA9PT0gdGhpcy5sZW5ndGggLSAxO1xuXG4gICAgLy8gcmVwbGFjZSBlbXB0eSBzcG90IHdpdGggbGFzdCBlbGUgaW4gY29sbGVjdGlvblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEgJiYgIXVubWVyZ2VkTGFzdEVsZSkge1xuICAgICAgdmFyIGxhc3RFbGVJID0gdGhpcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3RFbGUgPSB0aGlzW2xhc3RFbGVJXTtcbiAgICAgIHZhciBsYXN0RWxlSWQgPSBsYXN0RWxlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICB0aGlzW2xhc3RFbGVJXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXNbaV0gPSBsYXN0RWxlO1xuICAgICAgbWFwLnNldChsYXN0RWxlSWQsIHtcbiAgICAgICAgZWxlOiBsYXN0RWxlLFxuICAgICAgICBpbmRleDogaVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGNvbGxlY3Rpb24gaXMgbm93IDEgZWxlIHNtYWxsZXJcbiAgICB0aGlzLmxlbmd0aC0tO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICAvLyByZW1vdmUgc2luZ2xlIGVsZSBpbiBwbGFjZSBpbiBjYWxsaW5nIGNvbGxlY3Rpb25cbiAgdW5tZXJnZU9uZTogZnVuY3Rpb24gdW5tZXJnZU9uZShlbGUpIHtcbiAgICBlbGUgPSBlbGVbMF07XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgaWQgPSBlbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICB2YXIgbWFwID0gX3AubWFwO1xuICAgIHZhciBlbnRyeSA9IG1hcC5nZXQoaWQpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBubyBuZWVkIHRvIHJlbW92ZVxuICAgIH1cblxuICAgIHZhciBpID0gZW50cnkuaW5kZXg7XG4gICAgdGhpcy51bm1lcmdlQXQoaSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIHJlbW92ZSBlbGVzIGluIHBsYWNlIG9uIGNhbGxpbmcgY29sbGVjdGlvblxuICB1bm1lcmdlOiBmdW5jdGlvbiB1bm1lcmdlKHRvUmVtb3ZlKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoIXRvUmVtb3ZlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRvUmVtb3ZlICYmIHN0cmluZyh0b1JlbW92ZSkpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHRvUmVtb3ZlO1xuICAgICAgdG9SZW1vdmUgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVubWVyZ2VPbmUodG9SZW1vdmVbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1bm1lcmdlQnk6IGZ1bmN0aW9uIHVubWVyZ2VCeSh0b1JtRm4pIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBpZiAodG9SbUZuKGVsZSkpIHtcbiAgICAgICAgdGhpcy51bm1lcmdlQXQoaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBGbiwgdGhpc0FyZykge1xuICAgIHZhciBhcnIgPSBbXTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIHZhciByZXQgPSB0aGlzQXJnID8gbWFwRm4uYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogbWFwRm4oZWxlLCBpLCBlbGVzKTtcbiAgICAgIGFyci5wdXNoKHJldCk7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG4gIH0sXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGZuLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgdmFsID0gaW5pdGlhbFZhbHVlO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbCA9IGZuKHZhbCwgZWxlc1tpXSwgaSwgZWxlcyk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH0sXG4gIG1heDogZnVuY3Rpb24gbWF4KHZhbEZuLCB0aGlzQXJnKSB7XG4gICAgdmFyIG1heCA9IC1JbmZpbml0eTtcbiAgICB2YXIgbWF4RWxlO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgdmFyIHZhbCA9IHRoaXNBcmcgPyB2YWxGbi5hcHBseSh0aGlzQXJnLCBbZWxlLCBpLCBlbGVzXSkgOiB2YWxGbihlbGUsIGksIGVsZXMpO1xuICAgICAgaWYgKHZhbCA+IG1heCkge1xuICAgICAgICBtYXggPSB2YWw7XG4gICAgICAgIG1heEVsZSA9IGVsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBtYXgsXG4gICAgICBlbGU6IG1heEVsZVxuICAgIH07XG4gIH0sXG4gIG1pbjogZnVuY3Rpb24gbWluKHZhbEZuLCB0aGlzQXJnKSB7XG4gICAgdmFyIG1pbiA9IEluZmluaXR5O1xuICAgIHZhciBtaW5FbGU7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpc0FyZyA/IHZhbEZuLmFwcGx5KHRoaXNBcmcsIFtlbGUsIGksIGVsZXNdKSA6IHZhbEZuKGVsZSwgaSwgZWxlcyk7XG4gICAgICBpZiAodmFsIDwgbWluKSB7XG4gICAgICAgIG1pbiA9IHZhbDtcbiAgICAgICAgbWluRWxlID0gZWxlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG1pbixcbiAgICAgIGVsZTogbWluRWxlXG4gICAgfTtcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xudmFyIGZuJDEgPSBlbGVzZm4kODtcbmZuJDFbJ3UnXSA9IGZuJDFbJ3wnXSA9IGZuJDFbJysnXSA9IGZuJDEudW5pb24gPSBmbiQxLm9yID0gZm4kMS5hZGQ7XG5mbiQxWydcXFxcJ10gPSBmbiQxWychJ10gPSBmbiQxWyctJ10gPSBmbiQxLmRpZmZlcmVuY2UgPSBmbiQxLnJlbGF0aXZlQ29tcGxlbWVudCA9IGZuJDEuc3VidHJhY3QgPSBmbiQxLm5vdDtcbmZuJDFbJ24nXSA9IGZuJDFbJyYnXSA9IGZuJDFbJy4nXSA9IGZuJDEuYW5kID0gZm4kMS5pbnRlcnNlY3Rpb24gPSBmbiQxLmludGVyc2VjdDtcbmZuJDFbJ14nXSA9IGZuJDFbJygrKSddID0gZm4kMVsnKC0pJ10gPSBmbiQxLnN5bW1ldHJpY0RpZmZlcmVuY2UgPSBmbiQxLnN5bWRpZmYgPSBmbiQxLnhvcjtcbmZuJDEuZm5GaWx0ZXIgPSBmbiQxLmZpbHRlckZuID0gZm4kMS5zdGRGaWx0ZXIgPSBmbiQxLmZpbHRlcjtcbmZuJDEuY29tcGxlbWVudCA9IGZuJDEuYWJzY29tcCA9IGZuJDEuYWJzb2x1dGVDb21wbGVtZW50O1xuXG52YXIgZWxlc2ZuJDcgPSB7XG4gIGlzTm9kZTogZnVuY3Rpb24gaXNOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwKCkgPT09ICdub2Rlcyc7XG4gIH0sXG4gIGlzRWRnZTogZnVuY3Rpb24gaXNFZGdlKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwKCkgPT09ICdlZGdlcyc7XG4gIH0sXG4gIGlzTG9vcDogZnVuY3Rpb24gaXNMb29wKCkge1xuICAgIHJldHVybiB0aGlzLmlzRWRnZSgpICYmIHRoaXMuc291cmNlKClbMF0gPT09IHRoaXMudGFyZ2V0KClbMF07XG4gIH0sXG4gIGlzU2ltcGxlOiBmdW5jdGlvbiBpc1NpbXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkZ2UoKSAmJiB0aGlzLnNvdXJjZSgpWzBdICE9PSB0aGlzLnRhcmdldCgpWzBdO1xuICB9LFxuICBncm91cDogZnVuY3Rpb24gZ3JvdXAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5ncm91cDtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogIEVsZW1lbnRzIGFyZSBkcmF3biBpbiBhIHNwZWNpZmljIG9yZGVyIGJhc2VkIG9uIGNvbXBvdW5kIGRlcHRoIChsb3cgdG8gaGlnaCksIHRoZSBlbGVtZW50IHR5cGUgKG5vZGVzIGFib3ZlIGVkZ2VzKSxcbiAqICBhbmQgei1pbmRleCAobG93IHRvIGhpZ2gpLiAgVGhlc2Ugc3R5bGVzIGFmZmVjdCBob3cgdGhpcyBhcHBsaWVzOlxuICpcbiAqICB6LWNvbXBvdW5kLWRlcHRoOiBNYXkgYmUgYGJvdHRvbSB8IG9ycGhhbiB8IGF1dG8gfCB0b3BgLiAgVGhlIGZpcnN0IGRyYXduIGlzIGBib3R0b21gLCB0aGVuIGBvcnBoYW5gIHdoaWNoIGlzIHRoZVxuICogICAgICBzYW1lIGRlcHRoIGFzIHRoZSByb290IG9mIHRoZSBjb21wb3VuZCBncmFwaCwgZm9sbG93ZWQgYnkgdGhlIGRlZmF1bHQgdmFsdWUgYGF1dG9gIHdoaWNoIGRyYXdzIGluIG9yZGVyIGZyb21cbiAqICAgICAgcm9vdCB0byBsZWF2ZXMgb2YgdGhlIGNvbXBvdW5kIGdyYXBoLiAgVGhlIGxhc3QgZHJhd24gaXMgYHRvcGAuXG4gKiAgei1pbmRleC1jb21wYXJlOiBNYXkgYmUgYGF1dG8gfCBtYW51YWxgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGF1dG9gIHdoaWNoIGFsd2F5cyBkcmF3cyBlZGdlcyB1bmRlciBub2Rlcy5cbiAqICAgICAgYG1hbnVhbGAgaWdub3JlcyB0aGlzIGNvbnZlbnRpb24gYW5kIGRyYXdzIGJhc2VkIG9uIHRoZSBgei1pbmRleGAgdmFsdWUgc2V0dGluZy5cbiAqICB6LWluZGV4OiBBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgYWZmZWN0cyB0aGUgcmVsYXRpdmUgZHJhdyBvcmRlciBvZiBlbGVtZW50cy4gIEluIGdlbmVyYWwsIGFuIGVsZW1lbnQgd2l0aCBhIGhpZ2hlclxuICogICAgICBgei1pbmRleGAgd2lsbCBiZSBkcmF3biBvbiB0b3Agb2YgYW4gZWxlbWVudCB3aXRoIGEgbG93ZXIgYHotaW5kZXhgLlxuICovXG52YXIgekluZGV4U29ydCA9IGZ1bmN0aW9uIHpJbmRleFNvcnQoYSwgYikge1xuICB2YXIgY3kgPSBhLmN5KCk7XG4gIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICBmdW5jdGlvbiBnZXREZXB0aChlbGUpIHtcbiAgICB2YXIgc3R5bGUgPSBlbGUucHN0eWxlKCd6LWNvbXBvdW5kLWRlcHRoJyk7XG4gICAgaWYgKHN0eWxlLnZhbHVlID09PSAnYXV0bycpIHtcbiAgICAgIHJldHVybiBoYXNDb21wb3VuZE5vZGVzID8gZWxlLnpEZXB0aCgpIDogMDtcbiAgICB9IGVsc2UgaWYgKHN0eWxlLnZhbHVlID09PSAnYm90dG9tJykge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoc3R5bGUudmFsdWUgPT09ICd0b3AnKSB7XG4gICAgICByZXR1cm4gTUFYX0lOVCQxO1xuICAgIH1cbiAgICAvLyAnb3JwaGFuJ1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBkZXB0aERpZmYgPSBnZXREZXB0aChhKSAtIGdldERlcHRoKGIpO1xuICBpZiAoZGVwdGhEaWZmICE9PSAwKSB7XG4gICAgcmV0dXJuIGRlcHRoRGlmZjtcbiAgfVxuICBmdW5jdGlvbiBnZXRFbGVEZXB0aChlbGUpIHtcbiAgICB2YXIgc3R5bGUgPSBlbGUucHN0eWxlKCd6LWluZGV4LWNvbXBhcmUnKTtcbiAgICBpZiAoc3R5bGUudmFsdWUgPT09ICdhdXRvJykge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSA/IDEgOiAwO1xuICAgIH1cbiAgICAvLyAnbWFudWFsJ1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBlbGVEaWZmID0gZ2V0RWxlRGVwdGgoYSkgLSBnZXRFbGVEZXB0aChiKTtcbiAgaWYgKGVsZURpZmYgIT09IDApIHtcbiAgICByZXR1cm4gZWxlRGlmZjtcbiAgfVxuICB2YXIgekRpZmYgPSBhLnBzdHlsZSgnei1pbmRleCcpLnZhbHVlIC0gYi5wc3R5bGUoJ3otaW5kZXgnKS52YWx1ZTtcbiAgaWYgKHpEaWZmICE9PSAwKSB7XG4gICAgcmV0dXJuIHpEaWZmO1xuICB9XG4gIC8vIGNvbXBhcmUgaW5kaWNlcyBpbiB0aGUgY29yZSAob3JkZXIgYWRkZWQgdG8gZ3JhcGggdy8gbGFzdCBvbiB0b3ApXG4gIHJldHVybiBhLnBvb2xJbmRleCgpIC0gYi5wb29sSW5kZXgoKTtcbn07XG5cbnZhciBlbGVzZm4kNiA9IHtcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbiwgdGhpc0FyZykge1xuICAgIGlmIChmbiQ2KGZuKSkge1xuICAgICAgdmFyIE4gPSB0aGlzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICB2YXIgcmV0ID0gdGhpc0FyZyA/IGZuLmFwcGx5KHRoaXNBcmcsIFtlbGUsIGksIHRoaXNdKSA6IGZuKGVsZSwgaSwgdGhpcyk7XG4gICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gZXhpdCBlYWNoIGVhcmx5IG9uIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICB0b0FycmF5OiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyYXkucHVzaCh0aGlzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9LFxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB0aGlzU2l6ZSA9IHRoaXMubGVuZ3RoO1xuICAgIGlmIChlbmQgPT0gbnVsbCkge1xuICAgICAgZW5kID0gdGhpc1NpemU7XG4gICAgfVxuICAgIGlmIChzdGFydCA9PSBudWxsKSB7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gdGhpc1NpemUgKyBzdGFydDtcbiAgICB9XG4gICAgaWYgKGVuZCA8IDApIHtcbiAgICAgIGVuZCA9IHRoaXNTaXplICsgZW5kO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPj0gMCAmJiBpIDwgZW5kICYmIGkgPCB0aGlzU2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKHRoaXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihhcnJheSk7XG4gIH0sXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xuICB9LFxuICBlcTogZnVuY3Rpb24gZXEoaSkge1xuICAgIHJldHVybiB0aGlzW2ldIHx8IHRoaXMuc3Bhd24oKTtcbiAgfSxcbiAgZmlyc3Q6IGZ1bmN0aW9uIGZpcnN0KCkge1xuICAgIHJldHVybiB0aGlzWzBdIHx8IHRoaXMuc3Bhd24oKTtcbiAgfSxcbiAgbGFzdDogZnVuY3Rpb24gbGFzdCgpIHtcbiAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdIHx8IHRoaXMuc3Bhd24oKTtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgfSxcbiAgbm9uZW1wdHk6IGZ1bmN0aW9uIG5vbmVtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5lbXB0eSgpO1xuICB9LFxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KHNvcnRGbikge1xuICAgIGlmICghZm4kNihzb3J0Rm4pKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHNvcnRlZCA9IHRoaXMudG9BcnJheSgpLnNvcnQoc29ydEZuKTtcbiAgICByZXR1cm4gdGhpcy5zcGF3bihzb3J0ZWQpO1xuICB9LFxuICBzb3J0QnlaSW5kZXg6IGZ1bmN0aW9uIHNvcnRCeVpJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0KHpJbmRleFNvcnQpO1xuICB9LFxuICB6RGVwdGg6IGZ1bmN0aW9uIHpEZXB0aCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoIWVsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBsZXQgY3kgPSBlbGUuY3koKTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIGdyb3VwID0gX3AuZ3JvdXA7XG4gICAgaWYgKGdyb3VwID09PSAnbm9kZXMnKSB7XG4gICAgICB2YXIgZGVwdGggPSBfcC5kYXRhLnBhcmVudCA/IGVsZS5wYXJlbnRzKCkuc2l6ZSgpIDogMDtcbiAgICAgIGlmICghZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuIE1BWF9JTlQkMSAtIDE7IC8vIGNoaWxkbGVzcyBub2RlcyBhbHdheXMgb24gdG9wXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXB0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgICB2YXIgc3JjRGVwdGggPSBzcmMuekRlcHRoKCk7XG4gICAgICB2YXIgdGd0RGVwdGggPSB0Z3QuekRlcHRoKCk7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoc3JjRGVwdGgsIHRndERlcHRoLCAwKTsgLy8gZGVwdGggb2YgZGVlcGVzdCBwYXJlbnRcbiAgICB9XG4gIH1cbn07XG5cbmVsZXNmbiQ2LmVhY2ggPSBlbGVzZm4kNi5mb3JFYWNoO1xudmFyIGRlZmluZVN5bWJvbEl0ZXJhdG9yID0gZnVuY3Rpb24gZGVmaW5lU3ltYm9sSXRlcmF0b3IoKSB7XG4gIHZhciB0eXBlb2ZVbmRlZiA9IFwidW5kZWZpbmVkXCIgO1xuICB2YXIgaXNJdGVyYXRvclN1cHBvcnRlZCA9ICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoU3ltYm9sKSkgIT0gdHlwZW9mVW5kZWYgJiYgX3R5cGVvZihTeW1ib2wuaXRlcmF0b3IpICE9IHR5cGVvZlVuZGVmOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgaWYgKGlzSXRlcmF0b3JTdXBwb3J0ZWQpIHtcbiAgICBlbGVzZm4kNltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5JDEoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIGlmIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IF90aGlzW2krK107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZW50cnkuZG9uZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgfSwgU3ltYm9sLml0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59O1xuZGVmaW5lU3ltYm9sSXRlcmF0b3IoKTtcblxudmFyIGdldExheW91dERpbWVuc2lvbk9wdGlvbnMgPSBkZWZhdWx0cyRnKHtcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZVxufSk7XG52YXIgZWxlc2ZuJDUgPSB7XG4gIC8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgbm9kZSBkaW1lbnNpb25zIHsgeCwgeSB9IGJhc2VkIG9uIG9wdGlvbnMgZ2l2ZW5cbiAgbGF5b3V0RGltZW5zaW9uczogZnVuY3Rpb24gbGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IGdldExheW91dERpbWVuc2lvbk9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIGRpbXM7XG4gICAgaWYgKCF0aGlzLnRha2VzVXBTcGFjZSgpKSB7XG4gICAgICBkaW1zID0ge1xuICAgICAgICB3OiAwLFxuICAgICAgICBoOiAwXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpIHtcbiAgICAgIHZhciBiYkRpbSA9IHRoaXMuYm91bmRpbmdCb3goKTtcbiAgICAgIGRpbXMgPSB7XG4gICAgICAgIHc6IGJiRGltLncsXG4gICAgICAgIGg6IGJiRGltLmhcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpbXMgPSB7XG4gICAgICAgIHc6IHRoaXMub3V0ZXJXaWR0aCgpLFxuICAgICAgICBoOiB0aGlzLm91dGVySGVpZ2h0KClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc2FuaXRpc2UgdGhlIGRpbWVuc2lvbnMgZm9yIGV4dGVybmFsIGxheW91dHMgKGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8pXG4gICAgaWYgKGRpbXMudyA9PT0gMCB8fCBkaW1zLmggPT09IDApIHtcbiAgICAgIGRpbXMudyA9IGRpbXMuaCA9IDE7XG4gICAgfVxuICAgIHJldHVybiBkaW1zO1xuICB9LFxuICAvLyB1c2luZyBzdGFuZGFyZCBsYXlvdXQgb3B0aW9ucywgYXBwbHkgcG9zaXRpb24gZnVuY3Rpb24gKHcvIG9yIHcvbyBhbmltYXRpb24pXG4gIGxheW91dFBvc2l0aW9uczogZnVuY3Rpb24gbGF5b3V0UG9zaXRpb25zKGxheW91dCwgb3B0aW9ucywgZm4pIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gIW4uaXNQYXJlbnQoKTtcbiAgICB9KTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIGxheW91dEVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIG5vZGVzICYgZWRnZXNcbiAgICB2YXIgZ2V0TWVtb2l6ZUtleSA9IGZ1bmN0aW9uIGdldE1lbW9pemVLZXkobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaWQoKTtcbiAgICB9O1xuICAgIHZhciBmbk1lbSA9IG1lbW9pemUkMShmbiwgZ2V0TWVtb2l6ZUtleSk7IC8vIG1lbW9pemVkIHZlcnNpb24gb2YgcG9zaXRpb24gZnVuY3Rpb25cblxuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRzdGFydCcsXG4gICAgICBsYXlvdXQ6IGxheW91dFxuICAgIH0pO1xuICAgIGxheW91dC5hbmltYXRpb25zID0gW107XG4gICAgdmFyIGNhbGN1bGF0ZVNwYWNpbmcgPSBmdW5jdGlvbiBjYWxjdWxhdGVTcGFjaW5nKHNwYWNpbmcsIG5vZGVzQmIsIHBvcykge1xuICAgICAgdmFyIGNlbnRlciA9IHtcbiAgICAgICAgeDogbm9kZXNCYi54MSArIG5vZGVzQmIudyAvIDIsXG4gICAgICAgIHk6IG5vZGVzQmIueTEgKyBub2Rlc0JiLmggLyAyXG4gICAgICB9O1xuICAgICAgdmFyIHNwYWNpbmdWZWN0b3IgPSB7XG4gICAgICAgIC8vIHNjYWxlIGZyb20gY2VudGVyIG9mIGJvdW5kaW5nIGJveCAobm90IG5lY2Vzc2FyaWx5IDAsMClcbiAgICAgICAgeDogKHBvcy54IC0gY2VudGVyLngpICogc3BhY2luZyxcbiAgICAgICAgeTogKHBvcy55IC0gY2VudGVyLnkpICogc3BhY2luZ1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgc3BhY2luZ1ZlY3Rvci54LFxuICAgICAgICB5OiBjZW50ZXIueSArIHNwYWNpbmdWZWN0b3IueVxuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciB1c2VTcGFjaW5nRmFjdG9yID0gb3B0aW9ucy5zcGFjaW5nRmFjdG9yICYmIG9wdGlvbnMuc3BhY2luZ0ZhY3RvciAhPT0gMTtcbiAgICB2YXIgc3BhY2luZ0JiID0gZnVuY3Rpb24gc3BhY2luZ0JiKCkge1xuICAgICAgaWYgKCF1c2VTcGFjaW5nRmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBwb3MgPSBmbk1lbShub2RlLCBpKTtcbiAgICAgICAgZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50KGJiLCBwb3MueCwgcG9zLnkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJiO1xuICAgIH07XG4gICAgdmFyIGJiID0gc3BhY2luZ0JiKCk7XG4gICAgdmFyIGdldEZpbmFsUG9zID0gbWVtb2l6ZSQxKGZ1bmN0aW9uIChub2RlLCBpKSB7XG4gICAgICB2YXIgbmV3UG9zID0gZm5NZW0obm9kZSwgaSk7XG4gICAgICBpZiAodXNlU3BhY2luZ0ZhY3Rvcikge1xuICAgICAgICB2YXIgc3BhY2luZyA9IE1hdGguYWJzKG9wdGlvbnMuc3BhY2luZ0ZhY3Rvcik7XG4gICAgICAgIG5ld1BvcyA9IGNhbGN1bGF0ZVNwYWNpbmcoc3BhY2luZywgYmIsIG5ld1Bvcyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm0gIT0gbnVsbCkge1xuICAgICAgICBuZXdQb3MgPSBvcHRpb25zLnRyYW5zZm9ybShub2RlLCBuZXdQb3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1BvcztcbiAgICB9LCBnZXRNZW1vaXplS2V5KTtcbiAgICBpZiAob3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBuZXdQb3MgPSBnZXRGaW5hbFBvcyhub2RlLCBpKTtcbiAgICAgICAgdmFyIGFuaW1hdGVOb2RlID0gb3B0aW9ucy5hbmltYXRlRmlsdGVyID09IG51bGwgfHwgb3B0aW9ucy5hbmltYXRlRmlsdGVyKG5vZGUsIGkpO1xuICAgICAgICBpZiAoYW5pbWF0ZU5vZGUpIHtcbiAgICAgICAgICB2YXIgYW5pID0gbm9kZS5hbmltYXRpb24oe1xuICAgICAgICAgICAgcG9zaXRpb246IG5ld1BvcyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgICAgZWFzaW5nOiBvcHRpb25zLmFuaW1hdGlvbkVhc2luZ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goYW5pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnBvc2l0aW9uKG5ld1Bvcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgICB2YXIgZml0QW5pID0gY3kuYW5pbWF0aW9uKHtcbiAgICAgICAgICBmaXQ6IHtcbiAgICAgICAgICAgIGJvdW5kaW5nQm94OiBsYXlvdXRFbGVzLmJvdW5kaW5nQm94QXQoZ2V0RmluYWxQb3MpLFxuICAgICAgICAgICAgcGFkZGluZzogb3B0aW9ucy5wYWRkaW5nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgICBlYXNpbmc6IG9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nXG4gICAgICAgIH0pO1xuICAgICAgICBsYXlvdXQuYW5pbWF0aW9ucy5wdXNoKGZpdEFuaSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuem9vbSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucGFuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIHpvb21QYW5BbmkgPSBjeS5hbmltYXRpb24oe1xuICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICBwYW46IG9wdGlvbnMucGFuLFxuICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZzogb3B0aW9ucy5hbmltYXRpb25FYXNpbmdcbiAgICAgICAgfSk7XG4gICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goem9vbVBhbkFuaSk7XG4gICAgICB9XG4gICAgICBsYXlvdXQuYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmkpIHtcbiAgICAgICAgcmV0dXJuIGFuaS5wbGF5KCk7XG4gICAgICB9KTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICAgIFByb21pc2UkMS5hbGwobGF5b3V0LmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uIChhbmkpIHtcbiAgICAgICAgcmV0dXJuIGFuaS5wcm9taXNlKCk7XG4gICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2xheW91dHN0b3AnLFxuICAgICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnBvc2l0aW9ucyhnZXRGaW5hbFBvcyk7XG4gICAgICBpZiAob3B0aW9ucy5maXQpIHtcbiAgICAgICAgY3kuZml0KG9wdGlvbnMuZWxlcywgb3B0aW9ucy5wYWRkaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnpvb20gIT0gbnVsbCkge1xuICAgICAgICBjeS56b29tKG9wdGlvbnMuem9vbSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5wYW4pIHtcbiAgICAgICAgY3kucGFuKG9wdGlvbnMucGFuKTtcbiAgICAgIH1cbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RvcCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgbGF5b3V0OiBmdW5jdGlvbiBsYXlvdXQob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICByZXR1cm4gY3kubWFrZUxheW91dChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGVsZXM6IHRoaXNcbiAgICB9KSk7XG4gIH1cbn07XG5cbi8vIGFsaWFzZXM6XG5lbGVzZm4kNS5jcmVhdGVMYXlvdXQgPSBlbGVzZm4kNS5tYWtlTGF5b3V0ID0gZWxlc2ZuJDUubGF5b3V0O1xuXG5mdW5jdGlvbiBzdHlsZUNhY2hlKGtleSwgZm4sIGVsZSkge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBjYWNoZSA9IF9wLnN0eWxlQ2FjaGUgPSBfcC5zdHlsZUNhY2hlIHx8IFtdO1xuICB2YXIgdmFsO1xuICBpZiAoKHZhbCA9IGNhY2hlW2tleV0pICE9IG51bGwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9IGVsc2Uge1xuICAgIHZhbCA9IGNhY2hlW2tleV0gPSBmbihlbGUpO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhY2hlU3R5bGVGdW5jdGlvbihrZXksIGZuKSB7XG4gIGtleSA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZFN0eWxlRnVuY3Rpb24oZWxlKSB7XG4gICAgcmV0dXJuIHN0eWxlQ2FjaGUoa2V5LCBmbiwgZWxlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNhY2hlUHJvdG90eXBlU3R5bGVGdW5jdGlvbihrZXksIGZuKSB7XG4gIGtleSA9IGhhc2hTdHJpbmcoa2V5KTtcbiAgdmFyIHNlbGZGbiA9IGZ1bmN0aW9uIHNlbGZGbihlbGUpIHtcbiAgICByZXR1cm4gZm4uY2FsbChlbGUpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gY2FjaGVkUHJvdG90eXBlU3R5bGVGdW5jdGlvbigpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGVDYWNoZShrZXksIHNlbGZGbiwgZWxlKTtcbiAgICB9XG4gIH07XG59XG52YXIgZWxlc2ZuJDQgPSB7XG4gIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogZnVuY3Rpb24gcmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHVzZUNhY2hlKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciByZW5kZXJlciA9IGN5LnJlbmRlcmVyKCk7XG4gICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5LnN0eWxlRW5hYmxlZCgpO1xuICAgIGlmIChyZW5kZXJlciAmJiBzdHlsZUVuYWJsZWQpIHtcbiAgICAgIHJlbmRlcmVyLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLCB1c2VDYWNoZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXJ0eVN0eWxlQ2FjaGU6IGZ1bmN0aW9uIGRpcnR5U3R5bGVDYWNoZSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIGRpcnR5ID0gZnVuY3Rpb24gZGlydHkoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnN0eWxlQ2FjaGUgPSBudWxsO1xuICAgIH07XG4gICAgaWYgKGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgdmFyIGVsZXM7XG4gICAgICBlbGVzID0gdGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKTtcbiAgICAgIGVsZXMubWVyZ2UoZWxlcy5jb25uZWN0ZWRFZGdlcygpKTtcbiAgICAgIGVsZXMuZm9yRWFjaChkaXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIGRpcnR5KGVsZSk7XG4gICAgICAgIGVsZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZGlydHkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICAvLyBmdWxseSB1cGRhdGVzIChyZWNhbGN1bGF0ZXMpIHRoZSBzdHlsZSBmb3IgdGhlIGVsZW1lbnRzXG4gIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZShub3RpZnlSZW5kZXJlcikge1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmIChjeS5iYXRjaGluZygpKSB7XG4gICAgICB2YXIgYkVsZXMgPSBjeS5fcHJpdmF0ZS5iYXRjaFN0eWxlRWxlcztcbiAgICAgIGJFbGVzLm1lcmdlKHRoaXMpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nIGFuZCBleGl0IGVhcmx5IHdoZW4gYmF0Y2hpbmdcbiAgICB9XG5cbiAgICB2YXIgaGFzQ29tcG91bmRzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciB1cGRhdGVkRWxlcyA9IHRoaXM7XG4gICAgbm90aWZ5UmVuZGVyZXIgPSBub3RpZnlSZW5kZXJlciB8fCBub3RpZnlSZW5kZXJlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChoYXNDb21wb3VuZHMpIHtcbiAgICAgIC8vIHRoZW4gYWRkIGV2ZXJ5dGhpbmcgdXAgYW5kIGRvd24gZm9yIGNvbXBvdW5kIHNlbGVjdG9yIGNoZWNrc1xuICAgICAgdXBkYXRlZEVsZXMgPSB0aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpO1xuICAgIH1cblxuICAgIC8vIGxldCBjaGFuZ2VkRWxlcyA9IHN0eWxlLmFwcGx5KCB1cGRhdGVkRWxlcyApO1xuICAgIHZhciBjaGFuZ2VkRWxlcyA9IHVwZGF0ZWRFbGVzO1xuICAgIGlmIChub3RpZnlSZW5kZXJlcikge1xuICAgICAgY2hhbmdlZEVsZXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHJlbmRlcmVyIGtub3cgd2UgY2hhbmdlZCBzdHlsZVxuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VkRWxlcy5lbWl0KCdzdHlsZScpOyAvLyBqdXN0IGZpcmUgdGhlIGV2ZW50XG4gICAgfVxuXG4gICAgdXBkYXRlZEVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnN0eWxlRGlydHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIC8vIHByaXZhdGU6IGNsZWFycyBkaXJ0eSBmbGFnIGFuZCByZWNhbGN1bGF0ZXMgc3R5bGVcbiAgY2xlYW5TdHlsZTogZnVuY3Rpb24gY2xlYW5TdHlsZSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgaWYgKGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5KSB7XG4gICAgICAgIC8vIG4uYi4gdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYmVmb3JlIGFwcGx5KCkgdG8gYXZvaWQgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvblxuICAgICAgICBlbGUuX3ByaXZhdGUuc3R5bGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICBjeS5zdHlsZSgpLmFwcGx5KGVsZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvLyBnZXQgdGhlIGludGVybmFsIHBhcnNlZCBzdHlsZSBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHlcbiAgcGFyc2VkU3R5bGU6IGZ1bmN0aW9uIHBhcnNlZFN0eWxlKHByb3BlcnR5KSB7XG4gICAgdmFyIGluY2x1ZGVOb25EZWZhdWx0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBjeSA9IGVsZS5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgdGhpcy5jbGVhblN0eWxlKCk7XG4gICAgICB2YXIgb3ZlcnJpZGRlblN0eWxlID0gZWxlLl9wcml2YXRlLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIGlmIChvdmVycmlkZGVuU3R5bGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGRlblN0eWxlO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlTm9uRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBudW1lcmljU3R5bGU6IGZ1bmN0aW9uIG51bWVyaWNTdHlsZShwcm9wZXJ0eSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIHBzdHlsZSA9IGVsZS5wc3R5bGUocHJvcGVydHkpO1xuICAgICAgcmV0dXJuIHBzdHlsZS5wZlZhbHVlICE9PSB1bmRlZmluZWQgPyBwc3R5bGUucGZWYWx1ZSA6IHBzdHlsZS52YWx1ZTtcbiAgICB9XG4gIH0sXG4gIG51bWVyaWNTdHlsZVVuaXRzOiBmdW5jdGlvbiBudW1lcmljU3R5bGVVbml0cyhwcm9wZXJ0eSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5wc3R5bGUocHJvcGVydHkpLnVuaXRzO1xuICAgIH1cbiAgfSxcbiAgLy8gZ2V0IHRoZSBzcGVjaWZpZWQgY3NzIHByb3BlcnR5IGFzIGEgcmVuZGVyZWQgdmFsdWUgKGkuZS4gb24tc2NyZWVuIHZhbHVlKVxuICAvLyBvciBnZXQgdGhlIHdob2xlIHJlbmRlcmVkIHN0eWxlIGlmIG5vIHByb3BlcnR5IHNwZWNpZmllZCAoTkIgZG9lc24ndCBhbGxvdyBzZXR0aW5nKVxuICByZW5kZXJlZFN0eWxlOiBmdW5jdGlvbiByZW5kZXJlZFN0eWxlKHByb3BlcnR5KSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXRSZW5kZXJlZFN0eWxlKGVsZSwgcHJvcGVydHkpO1xuICAgIH1cbiAgfSxcbiAgLy8gcmVhZCB0aGUgY2FsY3VsYXRlZCBjc3Mgc3R5bGUgb2YgdGhlIGVsZW1lbnQgb3Igb3ZlcnJpZGUgdGhlIHN0eWxlICh2aWEgYSBieXBhc3MpXG4gIHN0eWxlOiBmdW5jdGlvbiBzdHlsZShuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHVwZGF0ZVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgICBpZiAocGxhaW5PYmplY3QobmFtZSkpIHtcbiAgICAgIC8vIHRoZW4gZXh0ZW5kIHRoZSBieXBhc3NcbiAgICAgIHZhciBwcm9wcyA9IG5hbWU7XG4gICAgICBzdHlsZS5hcHBseUJ5cGFzcyh0aGlzLCBwcm9wcywgdXBkYXRlVHJhbnNpdGlvbnMpO1xuICAgICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyBsZXQgdGhlIHJlbmRlcmVyIGtub3cgd2UndmUgdXBkYXRlZCBzdHlsZVxuICAgIH0gZWxzZSBpZiAoc3RyaW5nKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB0aGVuIGdldCB0aGUgcHJvcGVydHkgZnJvbSB0aGUgc3R5bGVcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICByZXR1cm4gc3R5bGUuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKGVsZSwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZW1wdHkgY29sbGVjdGlvbiA9PiBjYW4ndCBnZXQgYW55IHZhbHVlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVuIHNldCB0aGUgYnlwYXNzIHdpdGggdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICAgIHN0eWxlLmFwcGx5QnlwYXNzKHRoaXMsIG5hbWUsIHZhbHVlLCB1cGRhdGVUcmFuc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHRoZSByZW5kZXJlciBrbm93IHdlJ3ZlIHVwZGF0ZWQgc3R5bGVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9lbGUgPSB0aGlzWzBdO1xuICAgICAgaWYgKF9lbGUpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlLmdldFJhd1N0eWxlKF9lbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW1wdHkgY29sbGVjdGlvbiA9PiBjYW4ndCBnZXQgYW55IHZhbHVlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgcmVtb3ZlU3R5bGU6IGZ1bmN0aW9uIHJlbW92ZVN0eWxlKG5hbWVzKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgdXBkYXRlVHJhbnNpdGlvbnMgPSBmYWxzZTtcbiAgICB2YXIgc3R5bGUgPSBjeS5zdHlsZSgpO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBpZiAobmFtZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgICBzdHlsZS5yZW1vdmVBbGxCeXBhc3NlcyhlbGUsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXMgPSBuYW1lcy5zcGxpdCgvXFxzKy8pO1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBfZWxlMiA9IGVsZXNbX2ldO1xuICAgICAgICBzdHlsZS5yZW1vdmVCeXBhc3NlcyhfZWxlMiwgbmFtZXMsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyBsZXQgdGhlIHJlbmRlcmVyIGtub3cgd2UndmUgdXBkYXRlZCBzdHlsZVxuXG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgc2hvdzogZnVuY3Rpb24gc2hvdygpIHtcbiAgICB0aGlzLmNzcygnZGlzcGxheScsICdlbGVtZW50Jyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB0aGlzLmNzcygnZGlzcGxheScsICdub25lJyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgZWZmZWN0aXZlT3BhY2l0eTogZnVuY3Rpb24gZWZmZWN0aXZlT3BhY2l0eSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBwYXJlbnRPcGFjaXR5ID0gZWxlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICAgICAgaWYgKCFoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRPcGFjaXR5O1xuICAgICAgfVxuICAgICAgdmFyIHBhcmVudHMgPSAhX3AuZGF0YS5wYXJlbnQgPyBudWxsIDogZWxlLnBhcmVudHMoKTtcbiAgICAgIGlmIChwYXJlbnRzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2ldO1xuICAgICAgICAgIHZhciBvcGFjaXR5ID0gcGFyZW50LnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICAgICAgICAgIHBhcmVudE9wYWNpdHkgPSBvcGFjaXR5ICogcGFyZW50T3BhY2l0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudE9wYWNpdHk7XG4gICAgfVxuICB9LFxuICB0cmFuc3BhcmVudDogZnVuY3Rpb24gdHJhbnNwYXJlbnQoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBlbGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKCFoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICAgIHJldHVybiBlbGUucHN0eWxlKCdvcGFjaXR5JykudmFsdWUgPT09IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSA9PT0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGJhY2tncm91bmRpbmc6IGZ1bmN0aW9uIGJhY2tncm91bmRpbmcoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG59O1xuZnVuY3Rpb24gY2hlY2tDb21wb3VuZChlbGUsIHBhcmVudE9rKSB7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHBhcmVudHMgPSBfcC5kYXRhLnBhcmVudCA/IGVsZS5wYXJlbnRzKCkgOiBudWxsO1xuICBpZiAocGFyZW50cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcmVudCA9IHBhcmVudHNbaV07XG4gICAgICBpZiAoIXBhcmVudE9rKHBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRlZmluZURlcml2ZWRTdGF0ZUZ1bmN0aW9uKHNwZWNzKSB7XG4gIHZhciBvayA9IHNwZWNzLm9rO1xuICB2YXIgZWRnZU9rVmlhTm9kZSA9IHNwZWNzLmVkZ2VPa1ZpYU5vZGUgfHwgc3BlY3Mub2s7XG4gIHZhciBwYXJlbnRPayA9IHNwZWNzLnBhcmVudE9rIHx8IHNwZWNzLm9rO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgaWYgKCFvayhlbGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgcmV0dXJuICFoYXNDb21wb3VuZE5vZGVzIHx8IGNoZWNrQ29tcG91bmQoZWxlLCBwYXJlbnRPayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgICAgICB2YXIgdGd0ID0gX3AudGFyZ2V0O1xuICAgICAgICByZXR1cm4gZWRnZU9rVmlhTm9kZShzcmMpICYmICghaGFzQ29tcG91bmROb2RlcyB8fCBjaGVja0NvbXBvdW5kKHNyYywgZWRnZU9rVmlhTm9kZSkpICYmIChzcmMgPT09IHRndCB8fCBlZGdlT2tWaWFOb2RlKHRndCkgJiYgKCFoYXNDb21wb3VuZE5vZGVzIHx8IGNoZWNrQ29tcG91bmQodGd0LCBlZGdlT2tWaWFOb2RlKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbnZhciBlbGVUYWtlc1VwU3BhY2UgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ2VsZVRha2VzVXBTcGFjZScsIGZ1bmN0aW9uIChlbGUpIHtcbiAgcmV0dXJuIGVsZS5wc3R5bGUoJ2Rpc3BsYXknKS52YWx1ZSA9PT0gJ2VsZW1lbnQnICYmIGVsZS53aWR0aCgpICE9PSAwICYmIChlbGUuaXNOb2RlKCkgPyBlbGUuaGVpZ2h0KCkgIT09IDAgOiB0cnVlKTtcbn0pO1xuZWxlc2ZuJDQudGFrZXNVcFNwYWNlID0gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKCd0YWtlc1VwU3BhY2UnLCBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbih7XG4gIG9rOiBlbGVUYWtlc1VwU3BhY2Vcbn0pKTtcbnZhciBlbGVJbnRlcmFjdGl2ZSA9IGNhY2hlU3R5bGVGdW5jdGlvbignZWxlSW50ZXJhY3RpdmUnLCBmdW5jdGlvbiAoZWxlKSB7XG4gIHJldHVybiBlbGUucHN0eWxlKCdldmVudHMnKS52YWx1ZSA9PT0gJ3llcycgJiYgZWxlLnBzdHlsZSgndmlzaWJpbGl0eScpLnZhbHVlID09PSAndmlzaWJsZScgJiYgZWxlVGFrZXNVcFNwYWNlKGVsZSk7XG59KTtcbnZhciBwYXJlbnRJbnRlcmFjdGl2ZSA9IGNhY2hlU3R5bGVGdW5jdGlvbigncGFyZW50SW50ZXJhY3RpdmUnLCBmdW5jdGlvbiAocGFyZW50KSB7XG4gIHJldHVybiBwYXJlbnQucHN0eWxlKCd2aXNpYmlsaXR5JykudmFsdWUgPT09ICd2aXNpYmxlJyAmJiBlbGVUYWtlc1VwU3BhY2UocGFyZW50KTtcbn0pO1xuZWxlc2ZuJDQuaW50ZXJhY3RpdmUgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ2ludGVyYWN0aXZlJywgZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24oe1xuICBvazogZWxlSW50ZXJhY3RpdmUsXG4gIHBhcmVudE9rOiBwYXJlbnRJbnRlcmFjdGl2ZSxcbiAgZWRnZU9rVmlhTm9kZTogZWxlVGFrZXNVcFNwYWNlXG59KSk7XG5lbGVzZm4kNC5ub25pbnRlcmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5pbnRlcmFjdGl2ZSgpO1xuICB9XG59O1xudmFyIGVsZVZpc2libGUgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ2VsZVZpc2libGUnLCBmdW5jdGlvbiAoZWxlKSB7XG4gIHJldHVybiBlbGUucHN0eWxlKCd2aXNpYmlsaXR5JykudmFsdWUgPT09ICd2aXNpYmxlJyAmJiBlbGUucHN0eWxlKCdvcGFjaXR5JykucGZWYWx1ZSAhPT0gMCAmJiBlbGVUYWtlc1VwU3BhY2UoZWxlKTtcbn0pO1xudmFyIGVkZ2VWaXNpYmxlVmlhTm9kZSA9IGVsZVRha2VzVXBTcGFjZTtcbmVsZXNmbiQ0LnZpc2libGUgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ3Zpc2libGUnLCBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbih7XG4gIG9rOiBlbGVWaXNpYmxlLFxuICBlZGdlT2tWaWFOb2RlOiBlZGdlVmlzaWJsZVZpYU5vZGVcbn0pKTtcbmVsZXNmbiQ0LmhpZGRlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gIWVsZS52aXNpYmxlKCk7XG4gIH1cbn07XG5lbGVzZm4kNC5pc0J1bmRsZWRCZXppZXIgPSBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oJ2lzQnVuZGxlZEJlemllcicsIGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICF0aGlzLnJlbW92ZWQoKSAmJiB0aGlzLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZSA9PT0gJ2JlemllcicgJiYgdGhpcy50YWtlc1VwU3BhY2UoKTtcbn0pO1xuZWxlc2ZuJDQuYnlwYXNzID0gZWxlc2ZuJDQuY3NzID0gZWxlc2ZuJDQuc3R5bGU7XG5lbGVzZm4kNC5yZW5kZXJlZENzcyA9IGVsZXNmbiQ0LnJlbmRlcmVkU3R5bGU7XG5lbGVzZm4kNC5yZW1vdmVCeXBhc3MgPSBlbGVzZm4kNC5yZW1vdmVDc3MgPSBlbGVzZm4kNC5yZW1vdmVTdHlsZTtcbmVsZXNmbiQ0LnBzdHlsZSA9IGVsZXNmbiQ0LnBhcnNlZFN0eWxlO1xuXG52YXIgZWxlc2ZuJDMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZVN3aXRjaEZ1bmN0aW9uKHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBjaGFuZ2VkRWxlcyA9IFtdO1xuXG4gICAgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCggZGF0YSwgaGFuZGxlciApXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgZGF0YSA9IGFyZ3NbMF07XG4gICAgICB2YXIgaGFuZGxlciA9IGFyZ3NbMV07XG4gICAgICB0aGlzLm9uKHBhcmFtcy5ldmVudCwgZGF0YSwgaGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCggaGFuZGxlciApXG4gICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgZm4kNihhcmdzWzBdKSkge1xuICAgICAgdmFyIF9oYW5kbGVyID0gYXJnc1swXTtcbiAgICAgIHRoaXMub24ocGFyYW1zLmV2ZW50LCBfaGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gZS5nLiBjeS5ub2RlcygpLnNlbGVjdCgpXG4gICAgLy8gZS5nLiAocHJpdmF0ZSkgY3kubm9kZXMoKS5zZWxlY3QoWyd0YXBzZWxlY3QnXSlcbiAgICBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMCB8fCBhcmdzLmxlbmd0aCA9PT0gMSAmJiBhcnJheShhcmdzWzBdKSkge1xuICAgICAgdmFyIGFkZGxFdmVudHMgPSBhcmdzLmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgICB2YXIgYWJsZSA9ICFwYXJhbXMuYWJsZUZpZWxkIHx8IGVsZS5fcHJpdmF0ZVtwYXJhbXMuYWJsZUZpZWxkXTtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBlbGUuX3ByaXZhdGVbcGFyYW1zLmZpZWxkXSAhPSBwYXJhbXMudmFsdWU7XG4gICAgICAgIGlmIChwYXJhbXMub3ZlcnJpZGVBYmxlKSB7XG4gICAgICAgICAgdmFyIG92ZXJyaWRlQWJsZSA9IHBhcmFtcy5vdmVycmlkZUFibGUoZWxlKTtcbiAgICAgICAgICBpZiAob3ZlcnJpZGVBYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFibGUgPSBvdmVycmlkZUFibGU7XG4gICAgICAgICAgICBpZiAoIW92ZXJyaWRlQWJsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gLy8gdG8gc2F2ZSBjeWNsZXMgYXNzdW1lIG5vdCBhYmxlIGZvciBhbGwgb24gb3ZlcnJpZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJsZSkge1xuICAgICAgICAgIGVsZS5fcHJpdmF0ZVtwYXJhbXMuZmllbGRdID0gcGFyYW1zLnZhbHVlO1xuICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICBjaGFuZ2VkRWxlcy5wdXNoKGVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hhbmdlZENvbGwgPSB0aGlzLnNwYXduKGNoYW5nZWRFbGVzKTtcbiAgICAgIGNoYW5nZWRDb2xsLnVwZGF0ZVN0eWxlKCk7IC8vIGNoYW5nZSBvZiBzdGF0ZSA9PiBwb3NzaWJsZSBjaGFuZ2Ugb2Ygc3R5bGVcbiAgICAgIGNoYW5nZWRDb2xsLmVtaXQocGFyYW1zLmV2ZW50KTtcbiAgICAgIGlmIChhZGRsRXZlbnRzKSB7XG4gICAgICAgIGNoYW5nZWRDb2xsLmVtaXQoYWRkbEV2ZW50cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gZGVmaW5lU3dpdGNoU2V0KHBhcmFtcykge1xuICBlbGVzZm4kM1twYXJhbXMuZmllbGRdID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIGlmIChwYXJhbXMub3ZlcnJpZGVGaWVsZCkge1xuICAgICAgICB2YXIgdmFsID0gcGFyYW1zLm92ZXJyaWRlRmllbGQoZWxlKTtcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZVtwYXJhbXMuZmllbGRdO1xuICAgIH1cbiAgfTtcbiAgZWxlc2ZuJDNbcGFyYW1zLm9uXSA9IGRlZmluZVN3aXRjaEZ1bmN0aW9uKHtcbiAgICBldmVudDogcGFyYW1zLm9uLFxuICAgIGZpZWxkOiBwYXJhbXMuZmllbGQsXG4gICAgYWJsZUZpZWxkOiBwYXJhbXMuYWJsZUZpZWxkLFxuICAgIG92ZXJyaWRlQWJsZTogcGFyYW1zLm92ZXJyaWRlQWJsZSxcbiAgICB2YWx1ZTogdHJ1ZVxuICB9KTtcbiAgZWxlc2ZuJDNbcGFyYW1zLm9mZl0gPSBkZWZpbmVTd2l0Y2hGdW5jdGlvbih7XG4gICAgZXZlbnQ6IHBhcmFtcy5vZmYsXG4gICAgZmllbGQ6IHBhcmFtcy5maWVsZCxcbiAgICBhYmxlRmllbGQ6IHBhcmFtcy5hYmxlRmllbGQsXG4gICAgb3ZlcnJpZGVBYmxlOiBwYXJhbXMub3ZlcnJpZGVBYmxlLFxuICAgIHZhbHVlOiBmYWxzZVxuICB9KTtcbn1cbmRlZmluZVN3aXRjaFNldCh7XG4gIGZpZWxkOiAnbG9ja2VkJyxcbiAgb3ZlcnJpZGVGaWVsZDogZnVuY3Rpb24gb3ZlcnJpZGVGaWVsZChlbGUpIHtcbiAgICByZXR1cm4gZWxlLmN5KCkuYXV0b2xvY2soKSA/IHRydWUgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG9uOiAnbG9jaycsXG4gIG9mZjogJ3VubG9jaydcbn0pO1xuZGVmaW5lU3dpdGNoU2V0KHtcbiAgZmllbGQ6ICdncmFiYmFibGUnLFxuICBvdmVycmlkZUZpZWxkOiBmdW5jdGlvbiBvdmVycmlkZUZpZWxkKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvdW5ncmFiaWZ5KCkgfHwgZWxlLnBhbm5hYmxlKCkgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgb246ICdncmFiaWZ5JyxcbiAgb2ZmOiAndW5ncmFiaWZ5J1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ3NlbGVjdGVkJyxcbiAgYWJsZUZpZWxkOiAnc2VsZWN0YWJsZScsXG4gIG92ZXJyaWRlQWJsZTogZnVuY3Rpb24gb3ZlcnJpZGVBYmxlKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKSA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICB9LFxuICBvbjogJ3NlbGVjdCcsXG4gIG9mZjogJ3Vuc2VsZWN0J1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ3NlbGVjdGFibGUnLFxuICBvdmVycmlkZUZpZWxkOiBmdW5jdGlvbiBvdmVycmlkZUZpZWxkKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKSA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICB9LFxuICBvbjogJ3NlbGVjdGlmeScsXG4gIG9mZjogJ3Vuc2VsZWN0aWZ5J1xufSk7XG5lbGVzZm4kMy5kZXNlbGVjdCA9IGVsZXNmbiQzLnVuc2VsZWN0O1xuZWxlc2ZuJDMuZ3JhYmJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gZWxlLl9wcml2YXRlLmdyYWJiZWQ7XG4gIH1cbn07XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ2FjdGl2ZScsXG4gIG9uOiAnYWN0aXZhdGUnLFxuICBvZmY6ICd1bmFjdGl2YXRlJ1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ3Bhbm5hYmxlJyxcbiAgb246ICdwYW5pZnknLFxuICBvZmY6ICd1bnBhbmlmeSdcbn0pO1xuZWxlc2ZuJDMuaW5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICBpZiAoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuX3ByaXZhdGUuYWN0aXZlO1xuICB9XG59O1xuXG52YXIgZWxlc2ZuJDIgPSB7fTtcblxuLy8gREFHIGZ1bmN0aW9uc1xuLy8vLy8vLy8vLy8vLy8vL1xuXG52YXIgZGVmaW5lRGFnRXh0cmVtaXR5ID0gZnVuY3Rpb24gZGVmaW5lRGFnRXh0cmVtaXR5KHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gZGFnRXh0cmVtaXR5SW1wbChzZWxlY3Rvcikge1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIgcmV0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIGlmICghZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRpc3F1YWxpZmllZCA9IGZhbHNlO1xuICAgICAgdmFyIGVkZ2VzID0gZWxlLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlZGdlID0gZWRnZXNbal07XG4gICAgICAgIHZhciBzcmMgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcbiAgICAgICAgaWYgKHBhcmFtcy5ub0luY29taW5nRWRnZXMgJiYgdGd0ID09PSBlbGUgJiYgc3JjICE9PSBlbGUgfHwgcGFyYW1zLm5vT3V0Z29pbmdFZGdlcyAmJiBzcmMgPT09IGVsZSAmJiB0Z3QgIT09IGVsZSkge1xuICAgICAgICAgIGRpc3F1YWxpZmllZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZGlzcXVhbGlmaWVkKSB7XG4gICAgICAgIHJldC5wdXNoKGVsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHJldCwgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn07XG52YXIgZGVmaW5lRGFnT25lSG9wID0gZnVuY3Rpb24gZGVmaW5lRGFnT25lSG9wKHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciBvRWxlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICBpZiAoIWVsZS5pc05vZGUoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlZGdlcyA9IGVsZS5jb25uZWN0ZWRFZGdlcygpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2pdO1xuICAgICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIHRndCA9IGVkZ2UudGFyZ2V0KCk7XG4gICAgICAgIGlmIChwYXJhbXMub3V0Z29pbmcgJiYgc3JjID09PSBlbGUpIHtcbiAgICAgICAgICBvRWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgICAgIG9FbGVzLnB1c2godGd0KTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMuaW5jb21pbmcgJiYgdGd0ID09PSBlbGUpIHtcbiAgICAgICAgICBvRWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgICAgIG9FbGVzLnB1c2goc3JjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihvRWxlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn07XG52YXIgZGVmaW5lRGFnQWxsSG9wcyA9IGZ1bmN0aW9uIGRlZmluZURhZ0FsbEhvcHMocGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIHNFbGVzID0gW107XG4gICAgdmFyIHNFbGVzSWRzID0ge307XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG5leHQgPSBwYXJhbXMub3V0Z29pbmcgPyBlbGVzLm91dGdvZXJzKCkgOiBlbGVzLmluY29tZXJzKCk7XG4gICAgICBpZiAobmV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIGRvbmUgaWYgbm9uZSBsZWZ0XG5cbiAgICAgIHZhciBuZXdOZXh0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG4gPSBuZXh0W2ldO1xuICAgICAgICB2YXIgbmlkID0gbi5pZCgpO1xuICAgICAgICBpZiAoIXNFbGVzSWRzW25pZF0pIHtcbiAgICAgICAgICBzRWxlc0lkc1tuaWRdID0gdHJ1ZTtcbiAgICAgICAgICBzRWxlcy5wdXNoKG4pO1xuICAgICAgICAgIG5ld05leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW5ld05leHQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIGRvbmUgaWYgdG91Y2hlZCBhbGwgb3V0Z29lcnMgYWxyZWFkeVxuXG4gICAgICBlbGVzID0gbmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oc0VsZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH07XG59O1xuZWxlc2ZuJDIuY2xlYXJUcmF2ZXJzYWxDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpc1tpXS5fcHJpdmF0ZS50cmF2ZXJzYWxDYWNoZSA9IG51bGw7XG4gIH1cbn07XG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgLy8gZ2V0IHRoZSByb290IG5vZGVzIGluIHRoZSBEQUdcbiAgcm9vdHM6IGRlZmluZURhZ0V4dHJlbWl0eSh7XG4gICAgbm9JbmNvbWluZ0VkZ2VzOiB0cnVlXG4gIH0pLFxuICAvLyBnZXQgdGhlIGxlYWYgbm9kZXMgaW4gdGhlIERBR1xuICBsZWF2ZXM6IGRlZmluZURhZ0V4dHJlbWl0eSh7XG4gICAgbm9PdXRnb2luZ0VkZ2VzOiB0cnVlXG4gIH0pLFxuICAvLyBub3JtYWxseSBjYWxsZWQgY2hpbGRyZW4gaW4gZ3JhcGggdGhlb3J5XG4gIC8vIHRoZXNlIG5vZGVzID1lZGdlcz0+IG91dGdvaW5nIG5vZGVzXG4gIG91dGdvZXJzOiBjYWNoZShkZWZpbmVEYWdPbmVIb3Aoe1xuICAgIG91dGdvaW5nOiB0cnVlXG4gIH0pLCAnb3V0Z29lcnMnKSxcbiAgLy8gYWthIERBRyBkZXNjZW5kYW50c1xuICBzdWNjZXNzb3JzOiBkZWZpbmVEYWdBbGxIb3BzKHtcbiAgICBvdXRnb2luZzogdHJ1ZVxuICB9KSxcbiAgLy8gbm9ybWFsbHkgY2FsbGVkIHBhcmVudHMgaW4gZ3JhcGggdGhlb3J5XG4gIC8vIHRoZXNlIG5vZGVzIDw9ZWRnZXM9IGluY29taW5nIG5vZGVzXG4gIGluY29tZXJzOiBjYWNoZShkZWZpbmVEYWdPbmVIb3Aoe1xuICAgIGluY29taW5nOiB0cnVlXG4gIH0pLCAnaW5jb21lcnMnKSxcbiAgLy8gYWthIERBRyBhbmNlc3RvcnNcbiAgcHJlZGVjZXNzb3JzOiBkZWZpbmVEYWdBbGxIb3BzKHtcbiAgICBpbmNvbWluZzogdHJ1ZVxuICB9KVxufSk7XG5cbi8vIE5laWdoYm91cmhvb2QgZnVuY3Rpb25zXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgbmVpZ2hib3Job29kOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gZm9yIGFsbCBub2Rlc1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKTtcblxuICAgICAgLy8gZm9yIGVhY2ggY29ubmVjdGVkIGVkZ2UsIGFkZCB0aGUgZWRnZSBhbmQgdGhlIG90aGVyIG5vZGVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tqXTtcbiAgICAgICAgdmFyIHNyYyA9IGVkZ2Uuc291cmNlKCk7XG4gICAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpO1xuICAgICAgICB2YXIgb3RoZXJOb2RlID0gbm9kZSA9PT0gc3JjID8gdGd0IDogc3JjO1xuXG4gICAgICAgIC8vIG5lZWQgY2hlY2sgaW4gY2FzZSBvZiBsb29wXG4gICAgICAgIGlmIChvdGhlck5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2gob3RoZXJOb2RlWzBdKTsgLy8gYWRkIG5vZGUgMSBob3AgYXdheVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGNvbm5lY3RlZCBlZGdlXG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWRnZVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9LCAnbmVpZ2hib3Job29kJyksXG4gIGNsb3NlZE5laWdoYm9yaG9vZDogZnVuY3Rpb24gY2xvc2VkTmVpZ2hib3Job29kKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMubmVpZ2hib3Job29kKCkuYWRkKHRoaXMpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIG9wZW5OZWlnaGJvcmhvb2Q6IGZ1bmN0aW9uIG9wZW5OZWlnaGJvcmhvb2Qoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2Qoc2VsZWN0b3IpO1xuICB9XG59KTtcblxuLy8gYWxpYXNlc1xuZWxlc2ZuJDIubmVpZ2hib3VyaG9vZCA9IGVsZXNmbiQyLm5laWdoYm9yaG9vZDtcbmVsZXNmbiQyLmNsb3NlZE5laWdoYm91cmhvb2QgPSBlbGVzZm4kMi5jbG9zZWROZWlnaGJvcmhvb2Q7XG5lbGVzZm4kMi5vcGVuTmVpZ2hib3VyaG9vZCA9IGVsZXNmbiQyLm9wZW5OZWlnaGJvcmhvb2Q7XG5cbi8vIEVkZ2UgZnVuY3Rpb25zXG4vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgc291cmNlOiBjYWNoZShmdW5jdGlvbiBzb3VyY2VJbXBsKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIHNyYztcbiAgICBpZiAoZWxlKSB7XG4gICAgICBzcmMgPSBlbGUuX3ByaXZhdGUuc291cmNlIHx8IGVsZS5jeSgpLmNvbGxlY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHNyYyAmJiBzZWxlY3RvciA/IHNyYy5maWx0ZXIoc2VsZWN0b3IpIDogc3JjO1xuICB9LCAnc291cmNlJyksXG4gIHRhcmdldDogY2FjaGUoZnVuY3Rpb24gdGFyZ2V0SW1wbChzZWxlY3Rvcikge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciB0Z3Q7XG4gICAgaWYgKGVsZSkge1xuICAgICAgdGd0ID0gZWxlLl9wcml2YXRlLnRhcmdldCB8fCBlbGUuY3koKS5jb2xsZWN0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0Z3QgJiYgc2VsZWN0b3IgPyB0Z3QuZmlsdGVyKHNlbGVjdG9yKSA6IHRndDtcbiAgfSwgJ3RhcmdldCcpLFxuICBzb3VyY2VzOiBkZWZpbmVTb3VyY2VGdW5jdGlvbih7XG4gICAgYXR0cjogJ3NvdXJjZSdcbiAgfSksXG4gIHRhcmdldHM6IGRlZmluZVNvdXJjZUZ1bmN0aW9uKHtcbiAgICBhdHRyOiAndGFyZ2V0J1xuICB9KVxufSk7XG5mdW5jdGlvbiBkZWZpbmVTb3VyY2VGdW5jdGlvbihwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNvdXJjZUltcGwoc2VsZWN0b3IpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgc3JjID0gZWxlLl9wcml2YXRlW3BhcmFtcy5hdHRyXTtcbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHNyYyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHNvdXJjZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH07XG59XG5leHRlbmQoZWxlc2ZuJDIsIHtcbiAgZWRnZXNXaXRoOiBjYWNoZShkZWZpbmVFZGdlc1dpdGhGdW5jdGlvbigpLCAnZWRnZXNXaXRoJyksXG4gIGVkZ2VzVG86IGNhY2hlKGRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uKHtcbiAgICB0aGlzSXNTcmM6IHRydWVcbiAgfSksICdlZGdlc1RvJylcbn0pO1xuZnVuY3Rpb24gZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24ocGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBlZGdlc1dpdGhJbXBsKG90aGVyTm9kZXMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIHZhciBwID0gcGFyYW1zIHx8IHt9O1xuXG4gICAgLy8gZ2V0IGVsZW1lbnRzIGlmIGEgc2VsZWN0b3IgaXMgc3BlY2lmaWVkXG4gICAgaWYgKHN0cmluZyhvdGhlck5vZGVzKSkge1xuICAgICAgb3RoZXJOb2RlcyA9IGN5LiQob3RoZXJOb2Rlcyk7XG4gICAgfVxuICAgIGZvciAodmFyIGggPSAwOyBoIDwgb3RoZXJOb2Rlcy5sZW5ndGg7IGgrKykge1xuICAgICAgdmFyIGVkZ2VzID0gb3RoZXJOb2Rlc1toXS5fcHJpdmF0ZS5lZGdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICAgICAgdmFyIGVkZ2VEYXRhID0gZWRnZS5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICB2YXIgdGhpc1RvT3RoZXIgPSB0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZWRnZURhdGEuc291cmNlKSAmJiBvdGhlck5vZGVzLmhhc0VsZW1lbnRXaXRoSWQoZWRnZURhdGEudGFyZ2V0KTtcbiAgICAgICAgdmFyIG90aGVyVG9UaGlzID0gb3RoZXJOb2Rlcy5oYXNFbGVtZW50V2l0aElkKGVkZ2VEYXRhLnNvdXJjZSkgJiYgdGhpcy5oYXNFbGVtZW50V2l0aElkKGVkZ2VEYXRhLnRhcmdldCk7XG4gICAgICAgIHZhciBlZGdlQ29ubmVjdHNUaGlzQW5kT3RoZXIgPSB0aGlzVG9PdGhlciB8fCBvdGhlclRvVGhpcztcbiAgICAgICAgaWYgKCFlZGdlQ29ubmVjdHNUaGlzQW5kT3RoZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocC50aGlzSXNTcmMgfHwgcC50aGlzSXNUZ3QpIHtcbiAgICAgICAgICBpZiAocC50aGlzSXNTcmMgJiYgIXRoaXNUb090aGVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHAudGhpc0lzVGd0ICYmICFvdGhlclRvVGhpcykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKTtcbiAgfTtcbn1cbmV4dGVuZChlbGVzZm4kMiwge1xuICBjb25uZWN0ZWRFZGdlczogY2FjaGUoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgdmFyIHJldEVsZXMgPSBbXTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGVsZXNbaV07XG4gICAgICBpZiAoIW5vZGUuaXNOb2RlKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2pdO1xuICAgICAgICByZXRFbGVzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHJldEVsZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICdjb25uZWN0ZWRFZGdlcycpLFxuICBjb25uZWN0ZWROb2RlczogY2FjaGUoZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgdmFyIHJldEVsZXMgPSBbXTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWRnZSA9IGVsZXNbaV07XG4gICAgICBpZiAoIWVkZ2UuaXNFZGdlKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXRFbGVzLnB1c2goZWRnZS5zb3VyY2UoKVswXSk7XG4gICAgICByZXRFbGVzLnB1c2goZWRnZS50YXJnZXQoKVswXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHJldEVsZXMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICdjb25uZWN0ZWROb2RlcycpLFxuICBwYXJhbGxlbEVkZ2VzOiBjYWNoZShkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24oKSwgJ3BhcmFsbGVsRWRnZXMnKSxcbiAgY29kaXJlY3RlZEVkZ2VzOiBjYWNoZShkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24oe1xuICAgIGNvZGlyZWN0ZWQ6IHRydWVcbiAgfSksICdjb2RpcmVjdGVkRWRnZXMnKVxufSk7XG5mdW5jdGlvbiBkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24ocGFyYW1zKSB7XG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBjb2RpcmVjdGVkOiBmYWxzZVxuICB9O1xuICBwYXJhbXMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBwYXJhbXMpO1xuICByZXR1cm4gZnVuY3Rpb24gcGFyYWxsZWxFZGdlc0ltcGwoc2VsZWN0b3IpIHtcbiAgICAvLyBtaWNyby1vcHRpbWlzZWQgZm9yIHJlbmRlcmVyXG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5lZGdlcygpO1xuICAgIHZhciBwID0gcGFyYW1zO1xuXG4gICAgLy8gbG9vayBhdCBhbGwgdGhlIGVkZ2VzIGluIHRoZSBjb2xsZWN0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVkZ2UxID0gZWRnZXNbaV07XG4gICAgICB2YXIgZWRnZTFfcCA9IGVkZ2UxLl9wcml2YXRlO1xuICAgICAgdmFyIHNyYzEgPSBlZGdlMV9wLnNvdXJjZTtcbiAgICAgIHZhciBzcmNpZDEgPSBzcmMxLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICB2YXIgdGd0aWQxID0gZWRnZTFfcC5kYXRhLnRhcmdldDtcbiAgICAgIHZhciBzcmNFZGdlczEgPSBzcmMxLl9wcml2YXRlLmVkZ2VzO1xuXG4gICAgICAvLyBsb29rIGF0IGVkZ2VzIGNvbm5lY3RlZCB0byB0aGUgc3JjIG5vZGUgb2YgdGhpcyBlZGdlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNyY0VkZ2VzMS5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZTIgPSBzcmNFZGdlczFbal07XG4gICAgICAgIHZhciBlZGdlMmRhdGEgPSBlZGdlMi5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICB2YXIgdGd0aWQyID0gZWRnZTJkYXRhLnRhcmdldDtcbiAgICAgICAgdmFyIHNyY2lkMiA9IGVkZ2UyZGF0YS5zb3VyY2U7XG4gICAgICAgIHZhciBjb2RpcmVjdGVkID0gdGd0aWQyID09PSB0Z3RpZDEgJiYgc3JjaWQyID09PSBzcmNpZDE7XG4gICAgICAgIHZhciBvcHBkaXJlY3RlZCA9IHNyY2lkMSA9PT0gdGd0aWQyICYmIHRndGlkMSA9PT0gc3JjaWQyO1xuICAgICAgICBpZiAocC5jb2RpcmVjdGVkICYmIGNvZGlyZWN0ZWQgfHwgIXAuY29kaXJlY3RlZCAmJiAoY29kaXJlY3RlZCB8fCBvcHBkaXJlY3RlZCkpIHtcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKGVkZ2UyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihlbGVtZW50cywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuLy8gTWlzYyBmdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4dGVuZChlbGVzZm4kMiwge1xuICBjb21wb25lbnRzOiBmdW5jdGlvbiBjb21wb25lbnRzKHJvb3QpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN5ID0gc2VsZi5jeSgpO1xuICAgIHZhciB2aXNpdGVkID0gY3kuY29sbGVjdGlvbigpO1xuICAgIHZhciB1bnZpc2l0ZWQgPSByb290ID09IG51bGwgPyBzZWxmLm5vZGVzKCkgOiByb290Lm5vZGVzKCk7XG4gICAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgICBpZiAocm9vdCAhPSBudWxsICYmIHVudmlzaXRlZC5lbXB0eSgpKSB7XG4gICAgICAvLyByb290IG1heSBjb250YWluIG9ubHkgZWRnZXNcbiAgICAgIHVudmlzaXRlZCA9IHJvb3Quc291cmNlcygpOyAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBub2RlIHRvIHVzZSAodW5kaXJlY3RlZCksIHNvIGp1c3QgdXNlIHRoZSBzb3VyY2Ugc2lkZXNcbiAgICB9XG5cbiAgICB2YXIgdmlzaXRJbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHZpc2l0SW5Db21wb25lbnQobm9kZSwgY29tcG9uZW50KSB7XG4gICAgICB2aXNpdGVkLm1lcmdlKG5vZGUpO1xuICAgICAgdW52aXNpdGVkLnVubWVyZ2Uobm9kZSk7XG4gICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgfTtcbiAgICBpZiAodW52aXNpdGVkLmVtcHR5KCkpIHtcbiAgICAgIHJldHVybiBzZWxmLnNwYXduKCk7XG4gICAgfVxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gZWFjaCBpdGVyYXRpb24geWllbGRzIGEgY29tcG9uZW50XG4gICAgICB2YXIgY21wdCA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgIGNvbXBvbmVudHMucHVzaChjbXB0KTtcbiAgICAgIHZhciByb290ID0gdW52aXNpdGVkWzBdO1xuICAgICAgdmlzaXRJbkNvbXBvbmVudChyb290LCBjbXB0KTtcbiAgICAgIHNlbGYuYmZzKHtcbiAgICAgICAgZGlyZWN0ZWQ6IGZhbHNlLFxuICAgICAgICByb290czogcm9vdCxcbiAgICAgICAgdmlzaXQ6IGZ1bmN0aW9uIHZpc2l0KHYpIHtcbiAgICAgICAgICByZXR1cm4gdmlzaXRJbkNvbXBvbmVudCh2LCBjbXB0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjbXB0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAvLyBjb25uZWN0ZWRFZGdlcygpIHVzdWFsbHkgY2FjaGVkXG4gICAgICAgICAgaWYgKHNlbGYuaGFzKGUpICYmIGNtcHQuaGFzKGUuc291cmNlKCkpICYmIGNtcHQuaGFzKGUudGFyZ2V0KCkpKSB7XG4gICAgICAgICAgICAvLyBoYXMoKSBpcyBjaGVhcFxuICAgICAgICAgICAgY21wdC5tZXJnZShlKTsgLy8gZm9yRWFjaCgpIG9ubHkgY29uc2lkZXJzIG5vZGVzIC0tIHNldHMgTiBhdCBjYWxsIHRpbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBfbG9vcCgpO1xuICAgIH0gd2hpbGUgKHVudmlzaXRlZC5sZW5ndGggPiAwKTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbiAgfSxcbiAgY29tcG9uZW50OiBmdW5jdGlvbiBjb21wb25lbnQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZWxlKVswXTtcbiAgfVxufSk7XG5lbGVzZm4kMi5jb21wb25lbnRzT2YgPSBlbGVzZm4kMi5jb21wb25lbnRzO1xuXG4vLyByZXByZXNlbnRzIGEgc2V0IG9mIG5vZGVzLCBlZGdlcywgb3IgYm90aCB0b2dldGhlclxudmFyIENvbGxlY3Rpb24gPSBmdW5jdGlvbiBDb2xsZWN0aW9uKGN5LCBlbGVtZW50cykge1xuICB2YXIgdW5pcXVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIHJlbW92ZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICBpZiAoY3kgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yKCdBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXAgPSBuZXcgTWFwJDIoKTtcbiAgdmFyIGNyZWF0ZWRFbGVtZW50cyA9IGZhbHNlO1xuICBpZiAoIWVsZW1lbnRzKSB7XG4gICAgZWxlbWVudHMgPSBbXTtcbiAgfSBlbHNlIGlmIChlbGVtZW50cy5sZW5ndGggPiAwICYmIHBsYWluT2JqZWN0KGVsZW1lbnRzWzBdKSAmJiAhZWxlbWVudChlbGVtZW50c1swXSkpIHtcbiAgICBjcmVhdGVkRWxlbWVudHMgPSB0cnVlO1xuXG4gICAgLy8gbWFrZSBlbGVtZW50cyBmcm9tIGpzb24gYW5kIHJlc3RvcmUgYWxsIGF0IG9uY2UgbGF0ZXJcbiAgICB2YXIgZWxlcyA9IFtdO1xuICAgIHZhciBlbGVzSWRzID0gbmV3IFNldCQxKCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBqc29uID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoanNvbi5kYXRhID09IG51bGwpIHtcbiAgICAgICAganNvbi5kYXRhID0ge307XG4gICAgICB9XG4gICAgICB2YXIgX2RhdGEgPSBqc29uLmRhdGE7XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRzIGhhdmUgdmFsaWQgaWRzXG4gICAgICBpZiAoX2RhdGEuaWQgPT0gbnVsbCkge1xuICAgICAgICBfZGF0YS5pZCA9IHV1aWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoY3kuaGFzRWxlbWVudFdpdGhJZChfZGF0YS5pZCkgfHwgZWxlc0lkcy5oYXMoX2RhdGEuaWQpKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBwcmlvciBpZCBhbHJlYWR5IGV4aXN0c1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlID0gbmV3IEVsZW1lbnQoY3ksIGpzb24sIGZhbHNlKTtcbiAgICAgIGVsZXMucHVzaChlbGUpO1xuICAgICAgZWxlc0lkcy5hZGQoX2RhdGEuaWQpO1xuICAgIH1cbiAgICBlbGVtZW50cyA9IGVsZXM7XG4gIH1cbiAgdGhpcy5sZW5ndGggPSAwO1xuICBmb3IgKHZhciBfaSA9IDAsIF9sID0gZWxlbWVudHMubGVuZ3RoOyBfaSA8IF9sOyBfaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQkMSA9IGVsZW1lbnRzW19pXVswXTsgLy8gWzBdIGluIGNhc2UgZWxlbWVudHMgaXMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMsIHJhdGhlciB0aGFuIGFycmF5IG9mIGVsZW1lbnRzXG4gICAgaWYgKGVsZW1lbnQkMSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlkID0gZWxlbWVudCQxLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgaWYgKCF1bmlxdWUgfHwgIW1hcC5oYXMoaWQpKSB7XG4gICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgIG1hcC5zZXQoaWQsIHtcbiAgICAgICAgICBpbmRleDogdGhpcy5sZW5ndGgsXG4gICAgICAgICAgZWxlOiBlbGVtZW50JDFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzW3RoaXMubGVuZ3RoXSA9IGVsZW1lbnQkMTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICB9XG4gIHRoaXMuX3ByaXZhdGUgPSB7XG4gICAgZWxlczogdGhpcyxcbiAgICBjeTogY3ksXG4gICAgZ2V0IG1hcCgpIHtcbiAgICAgIGlmICh0aGlzLmxhenlNYXAgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJlYnVpbGRNYXAoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxhenlNYXA7XG4gICAgfSxcbiAgICBzZXQgbWFwKG0pIHtcbiAgICAgIHRoaXMubGF6eU1hcCA9IG07XG4gICAgfSxcbiAgICByZWJ1aWxkTWFwOiBmdW5jdGlvbiByZWJ1aWxkTWFwKCkge1xuICAgICAgdmFyIG0gPSB0aGlzLmxhenlNYXAgPSBuZXcgTWFwJDIoKTtcbiAgICAgIHZhciBlbGVzID0gdGhpcy5lbGVzO1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgZWxlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIHZhciBfZWxlID0gZWxlc1tfaTJdO1xuICAgICAgICBtLnNldChfZWxlLmlkKCksIHtcbiAgICAgICAgICBpbmRleDogX2kyLFxuICAgICAgICAgIGVsZTogX2VsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGlmICh1bmlxdWUpIHtcbiAgICB0aGlzLl9wcml2YXRlLm1hcCA9IG1hcDtcbiAgfVxuXG4gIC8vIHJlc3RvcmUgdGhlIGVsZW1lbnRzIGlmIHdlIGNyZWF0ZWQgdGhlbSBmcm9tIGpzb25cbiAgaWYgKGNyZWF0ZWRFbGVtZW50cyAmJiAhcmVtb3ZlZCkge1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG59O1xuXG4vLyBGdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy8ga2VlcCB0aGUgcHJvdG90eXBlcyBpbiBzeW5jIChhbiBlbGVtZW50IGhhcyB0aGUgc2FtZSBmdW5jdGlvbnMgYXMgYSBjb2xsZWN0aW9uKVxuLy8gYW5kIHVzZSBlbGVmbiBhbmQgZWxlc2ZuIGFzIHNob3J0aGFuZHMgdG8gdGhlIHByb3RvdHlwZXNcbnZhciBlbGVzZm4kMSA9IEVsZW1lbnQucHJvdG90eXBlID0gQ29sbGVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7XG5lbGVzZm4kMS5pbnN0YW5jZVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdjb2xsZWN0aW9uJztcbn07XG5lbGVzZm4kMS5zcGF3biA9IGZ1bmN0aW9uIChlbGVzLCB1bmlxdWUpIHtcbiAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMuY3koKSwgZWxlcywgdW5pcXVlKTtcbn07XG5lbGVzZm4kMS5zcGF3blNlbGYgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNwYXduKHRoaXMpO1xufTtcbmVsZXNmbiQxLmN5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeTtcbn07XG5lbGVzZm4kMS5yZW5kZXJlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKTtcbn07XG5lbGVzZm4kMS5lbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpc1swXTtcbn07XG5lbGVzZm4kMS5jb2xsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICBpZiAoY29sbGVjdGlvbih0aGlzKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2Uge1xuICAgIC8vIGFuIGVsZW1lbnRcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcy5fcHJpdmF0ZS5jeSwgW3RoaXNdKTtcbiAgfVxufTtcbmVsZXNmbiQxLnVuaXF1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMuX3ByaXZhdGUuY3ksIHRoaXMsIHRydWUpO1xufTtcbmVsZXNmbiQxLmhhc0VsZW1lbnRXaXRoSWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWQgPSAnJyArIGlkOyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuXG4gIHJldHVybiB0aGlzLl9wcml2YXRlLm1hcC5oYXMoaWQpO1xufTtcbmVsZXNmbiQxLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlkID0gJycgKyBpZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZW50cnkgPSB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpO1xuICByZXR1cm4gZW50cnkgPyBlbnRyeS5lbGUgOiBuZXcgQ29sbGVjdGlvbihjeSk7IC8vIGdldCBlbGUgb3IgZW1wdHkgY29sbGVjdGlvblxufTtcblxuZWxlc2ZuJDEuJGlkID0gZWxlc2ZuJDEuZ2V0RWxlbWVudEJ5SWQ7XG5lbGVzZm4kMS5wb29sSW5kZXggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gIHZhciBlbGVzID0gY3kuX3ByaXZhdGUuZWxlbWVudHM7XG4gIHZhciBpZCA9IHRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtcbiAgcmV0dXJuIGVsZXMuX3ByaXZhdGUubWFwLmdldChpZCkuaW5kZXg7XG59O1xuZWxlc2ZuJDEuaW5kZXhPZiA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIGlkID0gZWxlWzBdLl9wcml2YXRlLmRhdGEuaWQ7XG4gIHJldHVybiB0aGlzLl9wcml2YXRlLm1hcC5nZXQoaWQpLmluZGV4O1xufTtcbmVsZXNmbiQxLmluZGV4T2ZJZCA9IGZ1bmN0aW9uIChpZCkge1xuICBpZCA9ICcnICsgaWQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG5cbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChpZCkuaW5kZXg7XG59O1xuZWxlc2ZuJDEuanNvbiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGVsZSA9IHRoaXMuZWxlbWVudCgpO1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIGlmIChlbGUgPT0gbnVsbCAmJiBvYmopIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSAvLyBjYW4ndCBzZXQgdG8gbm8gZWxlc1xuXG4gIGlmIChlbGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gLy8gY2FuJ3QgZ2V0IGZyb20gbm8gZWxlc1xuXG4gIHZhciBwID0gZWxlLl9wcml2YXRlO1xuICBpZiAocGxhaW5PYmplY3Qob2JqKSkge1xuICAgIC8vIHNldFxuXG4gICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgIGlmIChvYmouZGF0YSkge1xuICAgICAgZWxlLmRhdGEob2JqLmRhdGEpO1xuICAgICAgdmFyIF9kYXRhMiA9IHAuZGF0YTtcbiAgICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgICAgLy8gc291cmNlIGFuZCB0YXJnZXQgYXJlIGltbXV0YWJsZSB2aWEgZGF0YSgpXG4gICAgICAgIHZhciBtb3ZlID0gZmFsc2U7XG4gICAgICAgIHZhciBzcGVjID0ge307XG4gICAgICAgIHZhciBzcmMgPSBvYmouZGF0YS5zb3VyY2U7XG4gICAgICAgIHZhciB0Z3QgPSBvYmouZGF0YS50YXJnZXQ7XG4gICAgICAgIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMgIT0gX2RhdGEyLnNvdXJjZSkge1xuICAgICAgICAgIHNwZWMuc291cmNlID0gJycgKyBzcmM7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG4gICAgICAgICAgbW92ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRndCAhPSBudWxsICYmIHRndCAhPSBfZGF0YTIudGFyZ2V0KSB7XG4gICAgICAgICAgc3BlYy50YXJnZXQgPSAnJyArIHRndDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcbiAgICAgICAgICBtb3ZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW92ZSkge1xuICAgICAgICAgIGVsZSA9IGVsZS5tb3ZlKHNwZWMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgaXMgaW1tdXRhYmxlIHZpYSBkYXRhKClcbiAgICAgICAgdmFyIG5ld1BhcmVudFZhbFNwZWNkID0gKCdwYXJlbnQnIGluIG9iai5kYXRhKTtcbiAgICAgICAgdmFyIHBhcmVudCA9IG9iai5kYXRhLnBhcmVudDtcbiAgICAgICAgaWYgKG5ld1BhcmVudFZhbFNwZWNkICYmIChwYXJlbnQgIT0gbnVsbCB8fCBfZGF0YTIucGFyZW50ICE9IG51bGwpICYmIHBhcmVudCAhPSBfZGF0YTIucGFyZW50KSB7XG4gICAgICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBjYW4ndCBzZXQgdW5kZWZpbmVkIGltcGVyYXRpdmVseSwgc28gdXNlIG51bGxcbiAgICAgICAgICAgIHBhcmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyZW50ID0gJycgKyBwYXJlbnQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlID0gZWxlLm1vdmUoe1xuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2JqLnBvc2l0aW9uKSB7XG4gICAgICBlbGUucG9zaXRpb24ob2JqLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgZ3JvdXAgLS0gaW1tdXRhYmxlXG5cbiAgICB2YXIgY2hlY2tTd2l0Y2ggPSBmdW5jdGlvbiBjaGVja1N3aXRjaChrLCB0cnVlRm5OYW1lLCBmYWxzZUZuTmFtZSkge1xuICAgICAgdmFyIG9ial9rID0gb2JqW2tdO1xuICAgICAgaWYgKG9ial9rICE9IG51bGwgJiYgb2JqX2sgIT09IHBba10pIHtcbiAgICAgICAgaWYgKG9ial9rKSB7XG4gICAgICAgICAgZWxlW3RydWVGbk5hbWVdKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlW2ZhbHNlRm5OYW1lXSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjaGVja1N3aXRjaCgncmVtb3ZlZCcsICdyZW1vdmUnLCAncmVzdG9yZScpO1xuICAgIGNoZWNrU3dpdGNoKCdzZWxlY3RlZCcsICdzZWxlY3QnLCAndW5zZWxlY3QnKTtcbiAgICBjaGVja1N3aXRjaCgnc2VsZWN0YWJsZScsICdzZWxlY3RpZnknLCAndW5zZWxlY3RpZnknKTtcbiAgICBjaGVja1N3aXRjaCgnbG9ja2VkJywgJ2xvY2snLCAndW5sb2NrJyk7XG4gICAgY2hlY2tTd2l0Y2goJ2dyYWJiYWJsZScsICdncmFiaWZ5JywgJ3VuZ3JhYmlmeScpO1xuICAgIGNoZWNrU3dpdGNoKCdwYW5uYWJsZScsICdwYW5pZnknLCAndW5wYW5pZnknKTtcbiAgICBpZiAob2JqLmNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgZWxlLmNsYXNzZXMob2JqLmNsYXNzZXMpO1xuICAgIH1cbiAgICBjeS5lbmRCYXRjaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9IGVsc2UgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZ2V0XG5cbiAgICB2YXIganNvbiA9IHtcbiAgICAgIGRhdGE6IGNvcHkocC5kYXRhKSxcbiAgICAgIHBvc2l0aW9uOiBjb3B5KHAucG9zaXRpb24pLFxuICAgICAgZ3JvdXA6IHAuZ3JvdXAsXG4gICAgICByZW1vdmVkOiBwLnJlbW92ZWQsXG4gICAgICBzZWxlY3RlZDogcC5zZWxlY3RlZCxcbiAgICAgIHNlbGVjdGFibGU6IHAuc2VsZWN0YWJsZSxcbiAgICAgIGxvY2tlZDogcC5sb2NrZWQsXG4gICAgICBncmFiYmFibGU6IHAuZ3JhYmJhYmxlLFxuICAgICAgcGFubmFibGU6IHAucGFubmFibGUsXG4gICAgICBjbGFzc2VzOiBudWxsXG4gICAgfTtcbiAgICBqc29uLmNsYXNzZXMgPSAnJztcbiAgICB2YXIgaSA9IDA7XG4gICAgcC5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgcmV0dXJuIGpzb24uY2xhc3NlcyArPSBpKysgPT09IDAgPyBjbHMgOiAnICcgKyBjbHM7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn07XG5lbGVzZm4kMS5qc29ucyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGpzb25zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgIHZhciBqc29uID0gZWxlLmpzb24oKTtcbiAgICBqc29ucy5wdXNoKGpzb24pO1xuICB9XG4gIHJldHVybiBqc29ucztcbn07XG5lbGVzZm4kMS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgZWxlc0FyciA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICB2YXIganNvbiA9IGVsZS5qc29uKCk7XG4gICAgdmFyIGNsb25lID0gbmV3IEVsZW1lbnQoY3ksIGpzb24sIGZhbHNlKTsgLy8gTkIgbm8gcmVzdG9yZVxuXG4gICAgZWxlc0Fyci5wdXNoKGNsb25lKTtcbiAgfVxuICByZXR1cm4gbmV3IENvbGxlY3Rpb24oY3ksIGVsZXNBcnIpO1xufTtcbmVsZXNmbiQxLmNvcHkgPSBlbGVzZm4kMS5jbG9uZTtcbmVsZXNmbiQxLnJlc3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub3RpZnlSZW5kZXJlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgdmFyIGFkZFRvUG9vbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY3kgPSBzZWxmLmN5KCk7XG4gIHZhciBjeV9wID0gY3kuX3ByaXZhdGU7XG5cbiAgLy8gY3JlYXRlIGFycmF5cyBvZiBub2RlcyBhbmQgZWRnZXMsIHNpbmNlIHdlIG5lZWQgdG9cbiAgLy8gcmVzdG9yZSB0aGUgbm9kZXMgZmlyc3RcbiAgdmFyIG5vZGVzID0gW107XG4gIHZhciBlZGdlcyA9IFtdO1xuICB2YXIgZWxlbWVudHM7XG4gIGZvciAodmFyIF9pMyA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgX2kzIDwgbDsgX2kzKyspIHtcbiAgICB2YXIgZWxlID0gc2VsZltfaTNdO1xuICAgIGlmIChhZGRUb1Bvb2wgJiYgIWVsZS5yZW1vdmVkKCkpIHtcbiAgICAgIC8vIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoaXMgZWxlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIG5vZGVzIGZpcnN0IGluIHRoZSBhcnJheSBhbmQgZWRnZXMgYWZ0ZXJcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAvLyBwdXQgdG8gZnJvbnQgb2YgYXJyYXkgaWYgbm9kZVxuICAgICAgbm9kZXMucHVzaChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwdXQgdG8gZW5kIG9mIGFycmF5IGlmIGVkZ2VcbiAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICB9XG4gIH1cbiAgZWxlbWVudHMgPSBub2Rlcy5jb25jYXQoZWRnZXMpO1xuICB2YXIgaTtcbiAgdmFyIHJlbW92ZUZyb21FbGVtZW50cyA9IGZ1bmN0aW9uIHJlbW92ZUZyb21FbGVtZW50cygpIHtcbiAgICBlbGVtZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgaS0tO1xuICB9O1xuXG4gIC8vIG5vdywgcmVzdG9yZSBlYWNoIGVsZW1lbnRcbiAgZm9yIChpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9lbGUyID0gZWxlbWVudHNbaV07XG4gICAgdmFyIF9wcml2YXRlID0gX2VsZTIuX3ByaXZhdGU7XG4gICAgdmFyIF9kYXRhMyA9IF9wcml2YXRlLmRhdGE7XG5cbiAgICAvLyB0aGUgdHJhdmVyc2FsIGNhY2hlIHNob3VsZCBzdGFydCBmcmVzaCB3aGVuIGVsZSBpcyBhZGRlZFxuICAgIF9lbGUyLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcblxuICAgIC8vIHNldCBpZCBhbmQgdmFsaWRhdGVcbiAgICBpZiAoIWFkZFRvUG9vbCAmJiAhX3ByaXZhdGUucmVtb3ZlZCkgOyBlbHNlIGlmIChfZGF0YTMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX2RhdGEzLmlkID0gdXVpZCgpO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyJDEoX2RhdGEzLmlkKSkge1xuICAgICAgX2RhdGEzLmlkID0gJycgKyBfZGF0YTMuaWQ7IC8vIG5vdyBpdCdzIGEgc3RyaW5nXG4gICAgfSBlbHNlIGlmIChlbXB0eVN0cmluZyhfZGF0YTMuaWQpIHx8ICFzdHJpbmcoX2RhdGEzLmlkKSkge1xuICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIGVsZW1lbnQgd2l0aCBpbnZhbGlkIHN0cmluZyBJRCBgJyArIF9kYXRhMy5pZCArICdgJyk7XG5cbiAgICAgIC8vIGNhbid0IGNyZWF0ZSBlbGVtZW50IGlmIGl0IGhhcyBlbXB0eSBzdHJpbmcgYXMgaWQgb3Igbm9uLXN0cmluZyBpZFxuICAgICAgcmVtb3ZlRnJvbUVsZW1lbnRzKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKGN5Lmhhc0VsZW1lbnRXaXRoSWQoX2RhdGEzLmlkKSkge1xuICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCcgKyBfZGF0YTMuaWQgKyAnYCcpO1xuXG4gICAgICAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBvbmUgYWxyZWFkeSBoYXMgdGhhdCBpZFxuICAgICAgcmVtb3ZlRnJvbUVsZW1lbnRzKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlkID0gX2RhdGEzLmlkOyAvLyBpZCBpcyBmaW5hbGlzZWQsIG5vdyBsZXQncyBrZWVwIGEgcmVmXG5cbiAgICBpZiAoX2VsZTIuaXNOb2RlKCkpIHtcbiAgICAgIC8vIGV4dHJhIGNoZWNrcyBmb3Igbm9kZXNcbiAgICAgIHZhciBwb3MgPSBfcHJpdmF0ZS5wb3NpdGlvbjtcblxuICAgICAgLy8gbWFrZSBzdXJlIHRoZSBub2RlcyBoYXZlIGEgZGVmaW5lZCBwb3NpdGlvblxuXG4gICAgICBpZiAocG9zLnggPT0gbnVsbCkge1xuICAgICAgICBwb3MueCA9IDA7XG4gICAgICB9XG4gICAgICBpZiAocG9zLnkgPT0gbnVsbCkge1xuICAgICAgICBwb3MueSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChfZWxlMi5pc0VkZ2UoKSkge1xuICAgICAgLy8gZXh0cmEgY2hlY2tzIGZvciBlZGdlc1xuXG4gICAgICB2YXIgZWRnZSA9IF9lbGUyO1xuICAgICAgdmFyIGZpZWxkcyA9IFsnc291cmNlJywgJ3RhcmdldCddO1xuICAgICAgdmFyIGZpZWxkc0xlbmd0aCA9IGZpZWxkcy5sZW5ndGg7XG4gICAgICB2YXIgYmFkU291cmNlT3JUYXJnZXQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmllbGRzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2pdO1xuICAgICAgICB2YXIgdmFsID0gX2RhdGEzW2ZpZWxkXTtcbiAgICAgICAgaWYgKG51bWJlciQxKHZhbCkpIHtcbiAgICAgICAgICB2YWwgPSBfZGF0YTNbZmllbGRdID0gJycgKyBfZGF0YTNbZmllbGRdOyAvLyBub3cgc3RyaW5nXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSAnJykge1xuICAgICAgICAgIC8vIGNhbid0IGNyZWF0ZSBpZiBzb3VyY2Ugb3IgdGFyZ2V0IGlzIG5vdCBkZWZpbmVkIHByb3Blcmx5XG4gICAgICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIGVkZ2UgYCcgKyBpZCArICdgIHdpdGggdW5zcGVjaWZpZWQgJyArIGZpZWxkKTtcbiAgICAgICAgICBiYWRTb3VyY2VPclRhcmdldCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIWN5Lmhhc0VsZW1lbnRXaXRoSWQodmFsKSkge1xuICAgICAgICAgIC8vIGNhbid0IGNyZWF0ZSBlZGdlIGlmIG9uZSBvZiBpdHMgbm9kZXMgZG9lc24ndCBleGlzdFxuICAgICAgICAgIGVycm9yKCdDYW4gbm90IGNyZWF0ZSBlZGdlIGAnICsgaWQgKyAnYCB3aXRoIG5vbmV4aXN0YW50ICcgKyBmaWVsZCArICcgYCcgKyB2YWwgKyAnYCcpO1xuICAgICAgICAgIGJhZFNvdXJjZU9yVGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJhZFNvdXJjZU9yVGFyZ2V0KSB7XG4gICAgICAgIHJlbW92ZUZyb21FbGVtZW50cygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2FuJ3QgY3JlYXRlIHRoaXNcblxuICAgICAgdmFyIHNyYyA9IGN5LmdldEVsZW1lbnRCeUlkKF9kYXRhMy5zb3VyY2UpO1xuICAgICAgdmFyIHRndCA9IGN5LmdldEVsZW1lbnRCeUlkKF9kYXRhMy50YXJnZXQpO1xuXG4gICAgICAvLyBvbmx5IG9uZSBlZGdlIGluIG5vZGUgaWYgbG9vcFxuICAgICAgaWYgKHNyYy5zYW1lKHRndCkpIHtcbiAgICAgICAgc3JjLl9wcml2YXRlLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcmMuX3ByaXZhdGUuZWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgdGd0Ll9wcml2YXRlLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgICBlZGdlLl9wcml2YXRlLnNvdXJjZSA9IHNyYztcbiAgICAgIGVkZ2UuX3ByaXZhdGUudGFyZ2V0ID0gdGd0O1xuICAgIH0gLy8gaWYgaXMgZWRnZVxuXG4gICAgLy8gY3JlYXRlIG1vY2sgaWRzIC8gaW5kZXhlcyBtYXBzIGZvciBlbGVtZW50IHNvIGl0IGNhbiBiZSB1c2VkIGxpa2UgY29sbGVjdGlvbnNcbiAgICBfcHJpdmF0ZS5tYXAgPSBuZXcgTWFwJDIoKTtcbiAgICBfcHJpdmF0ZS5tYXAuc2V0KGlkLCB7XG4gICAgICBlbGU6IF9lbGUyLFxuICAgICAgaW5kZXg6IDBcbiAgICB9KTtcbiAgICBfcHJpdmF0ZS5yZW1vdmVkID0gZmFsc2U7XG4gICAgaWYgKGFkZFRvUG9vbCkge1xuICAgICAgY3kuYWRkVG9Qb29sKF9lbGUyKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVhY2ggZWxlbWVudFxuXG4gIC8vIGRvIGNvbXBvdW5kIG5vZGUgc2FuaXR5IGNoZWNrc1xuICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBub2Rlcy5sZW5ndGg7IF9pNCsrKSB7XG4gICAgLy8gZWFjaCBub2RlXG4gICAgdmFyIG5vZGUgPSBub2Rlc1tfaTRdO1xuICAgIHZhciBfZGF0YTQgPSBub2RlLl9wcml2YXRlLmRhdGE7XG4gICAgaWYgKG51bWJlciQxKF9kYXRhNC5wYXJlbnQpKSB7XG4gICAgICAvLyB0aGVuIGF1dG9tYWtlIHN0cmluZ1xuICAgICAgX2RhdGE0LnBhcmVudCA9ICcnICsgX2RhdGE0LnBhcmVudDtcbiAgICB9XG4gICAgdmFyIHBhcmVudElkID0gX2RhdGE0LnBhcmVudDtcbiAgICB2YXIgc3BlY2lmaWVkUGFyZW50ID0gcGFyZW50SWQgIT0gbnVsbDtcbiAgICBpZiAoc3BlY2lmaWVkUGFyZW50IHx8IG5vZGUuX3ByaXZhdGUucGFyZW50KSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPyBjeS5jb2xsZWN0aW9uKCkubWVyZ2Uobm9kZS5fcHJpdmF0ZS5wYXJlbnQpIDogY3kuZ2V0RWxlbWVudEJ5SWQocGFyZW50SWQpO1xuICAgICAgaWYgKHBhcmVudC5lbXB0eSgpKSB7XG4gICAgICAgIC8vIG5vbi1leGlzdGFudCBwYXJlbnQ7IGp1c3QgcmVtb3ZlIGl0XG4gICAgICAgIF9kYXRhNC5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKHBhcmVudFswXS5yZW1vdmVkKCkpIHtcbiAgICAgICAgd2FybignTm9kZSBhZGRlZCB3aXRoIG1pc3NpbmcgcGFyZW50LCByZWZlcmVuY2UgdG8gcGFyZW50IHJlbW92ZWQnKTtcbiAgICAgICAgX2RhdGE0LnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNlbGZBc1BhcmVudCA9IGZhbHNlO1xuICAgICAgICB2YXIgYW5jZXN0b3IgPSBwYXJlbnQ7XG4gICAgICAgIHdoaWxlICghYW5jZXN0b3IuZW1wdHkoKSkge1xuICAgICAgICAgIGlmIChub2RlLnNhbWUoYW5jZXN0b3IpKSB7XG4gICAgICAgICAgICAvLyBtYXJrIHNlbGYgYXMgcGFyZW50IGFuZCByZW1vdmUgZnJvbSBkYXRhXG4gICAgICAgICAgICBzZWxmQXNQYXJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgX2RhdGE0LnBhcmVudCA9IHVuZGVmaW5lZDsgLy8gcmVtb3ZlIHBhcmVudCByZWZlcmVuY2VcblxuICAgICAgICAgICAgLy8gZXhpdCBvciB3ZSBsb29wIGZvcmV2ZXJcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZkFzUGFyZW50KSB7XG4gICAgICAgICAgLy8gY29ubmVjdCB3aXRoIGNoaWxkcmVuXG4gICAgICAgICAgcGFyZW50WzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgICAgbm9kZS5fcHJpdmF0ZS5wYXJlbnQgPSBwYXJlbnRbMF07XG5cbiAgICAgICAgICAvLyBsZXQgdGhlIGNvcmUga25vdyB3ZSBoYXZlIGEgY29tcG91bmQgZ3JhcGhcbiAgICAgICAgICBjeV9wLmhhc0NvbXBvdW5kTm9kZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIGVsc2VcbiAgICB9IC8vIGlmIHNwZWNpZmllZCBwYXJlbnRcbiAgfSAvLyBmb3IgZWFjaCBub2RlXG5cbiAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgcmVzdG9yZWQgPSBlbGVtZW50cy5sZW5ndGggPT09IHNlbGYubGVuZ3RoID8gc2VsZiA6IG5ldyBDb2xsZWN0aW9uKGN5LCBlbGVtZW50cyk7XG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgcmVzdG9yZWQubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdmFyIF9lbGUzID0gcmVzdG9yZWRbX2k1XTtcbiAgICAgIGlmIChfZWxlMy5pc05vZGUoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkaW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZXMgZm9yIHRoZSBwYXJhbGxlbCBlZGdlc1xuICAgICAgX2VsZTMucGFyYWxsZWxFZGdlcygpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcblxuICAgICAgLy8gYWRkaW5nIGFuIGVkZ2UgaW52YWxpZGF0ZXMgdGhlIHRyYXZlcnNhbCBjYWNoZSBmb3IgdGhlIGNvbm5lY3RlZCBub2Rlc1xuICAgICAgX2VsZTMuc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuICAgICAgX2VsZTMudGFyZ2V0KCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuICAgIH1cbiAgICB2YXIgdG9VcGRhdGVTdHlsZTtcbiAgICBpZiAoY3lfcC5oYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgICB0b1VwZGF0ZVN0eWxlID0gY3kuY29sbGVjdGlvbigpLm1lcmdlKHJlc3RvcmVkKS5tZXJnZShyZXN0b3JlZC5jb25uZWN0ZWROb2RlcygpKS5tZXJnZShyZXN0b3JlZC5wYXJlbnQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvVXBkYXRlU3R5bGUgPSByZXN0b3JlZDtcbiAgICB9XG4gICAgdG9VcGRhdGVTdHlsZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKS51cGRhdGVTdHlsZShub3RpZnlSZW5kZXJlcik7XG4gICAgaWYgKG5vdGlmeVJlbmRlcmVyKSB7XG4gICAgICByZXN0b3JlZC5lbWl0QW5kTm90aWZ5KCdhZGQnKTtcbiAgICB9IGVsc2UgaWYgKGFkZFRvUG9vbCkge1xuICAgICAgcmVzdG9yZWQuZW1pdCgnYWRkJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWxmOyAvLyBjaGFpbmFiaWxpdHlcbn07XG5cbmVsZXNmbiQxLnJlbW92ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICByZXR1cm4gZWxlICYmIGVsZS5fcHJpdmF0ZS5yZW1vdmVkO1xufTtcbmVsZXNmbiQxLmluc2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUgJiYgIWVsZS5fcHJpdmF0ZS5yZW1vdmVkO1xufTtcbmVsZXNmbiQxLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vdGlmeVJlbmRlcmVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICB2YXIgcmVtb3ZlRnJvbVBvb2wgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGVsZXNUb1JlbW92ZSA9IFtdO1xuICB2YXIgZWxlc1RvUmVtb3ZlSWRzID0ge307XG4gIHZhciBjeSA9IHNlbGYuX3ByaXZhdGUuY3k7XG5cbiAgLy8gYWRkIGNvbm5lY3RlZCBlZGdlc1xuICBmdW5jdGlvbiBhZGRDb25uZWN0ZWRFZGdlcyhub2RlKSB7XG4gICAgdmFyIGVkZ2VzID0gbm9kZS5fcHJpdmF0ZS5lZGdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhZGQoZWRnZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBkZXNjZW5kYW50IG5vZGVzXG4gIGZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLl9wcml2YXRlLmNoaWxkcmVuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFkZChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFkZChlbGUpIHtcbiAgICB2YXIgYWxyZWFkeUFkZGVkID0gZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXTtcbiAgICBpZiAocmVtb3ZlRnJvbVBvb2wgJiYgZWxlLnJlbW92ZWQoKSB8fCBhbHJlYWR5QWRkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgIGVsZXNUb1JlbW92ZS5wdXNoKGVsZSk7IC8vIG5vZGVzIGFyZSByZW1vdmVkIGxhc3RcblxuICAgICAgYWRkQ29ubmVjdGVkRWRnZXMoZWxlKTtcbiAgICAgIGFkZENoaWxkcmVuKGVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZXNUb1JlbW92ZS51bnNoaWZ0KGVsZSk7IC8vIGVkZ2VzIGFyZSByZW1vdmVkIGZpcnN0XG4gICAgfVxuICB9XG5cbiAgLy8gbWFrZSB0aGUgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmVcbiAgLy8gKG1heSBiZSByZW1vdmluZyBtb3JlIHRoYW4gc3BlY2lmaWVkIGR1ZSB0byBjb25uZWN0ZWQgZWRnZXMgZXRjKVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgZWxlID0gc2VsZltpXTtcbiAgICBhZGQoZWxlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVFZGdlUmVmKG5vZGUsIGVkZ2UpIHtcbiAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuICAgIHJlbW92ZUZyb21BcnJheShjb25uZWN0ZWRFZGdlcywgZWRnZSk7XG5cbiAgICAvLyByZW1vdmluZyBhbiBlZGdlcyBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlIGZvciBpdHMgbm9kZXNcbiAgICBub2RlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVQYXJhbGxlbFJlZihwbGxFZGdlKSB7XG4gICAgLy8gcmVtb3ZpbmcgYW4gZWRnZSBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlcyBmb3IgdGhlIHBhcmFsbGVsIGVkZ2VzXG4gICAgcGxsRWRnZS5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG4gIH1cbiAgdmFyIGFsdGVyZWRQYXJlbnRzID0gW107XG4gIGFsdGVyZWRQYXJlbnRzLmlkcyA9IHt9O1xuICBmdW5jdGlvbiByZW1vdmVDaGlsZFJlZihwYXJlbnQsIGVsZSkge1xuICAgIGVsZSA9IGVsZVswXTtcbiAgICBwYXJlbnQgPSBwYXJlbnRbMF07XG4gICAgdmFyIGNoaWxkcmVuID0gcGFyZW50Ll9wcml2YXRlLmNoaWxkcmVuO1xuICAgIHZhciBwaWQgPSBwYXJlbnQuaWQoKTtcbiAgICByZW1vdmVGcm9tQXJyYXkoY2hpbGRyZW4sIGVsZSk7IC8vIHJlbW92ZSBwYXJlbnQgPT4gY2hpbGQgcmVmXG5cbiAgICBlbGUuX3ByaXZhdGUucGFyZW50ID0gbnVsbDsgLy8gcmVtb3ZlIGNoaWxkID0+IHBhcmVudCByZWZcblxuICAgIGlmICghYWx0ZXJlZFBhcmVudHMuaWRzW3BpZF0pIHtcbiAgICAgIGFsdGVyZWRQYXJlbnRzLmlkc1twaWRdID0gdHJ1ZTtcbiAgICAgIGFsdGVyZWRQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gIH1cbiAgc2VsZi5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgY3kucmVtb3ZlRnJvbVBvb2woZWxlc1RvUmVtb3ZlKTsgLy8gcmVtb3ZlIGZyb20gY29yZSBwb29sXG4gIH1cblxuICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBlbGVzVG9SZW1vdmUubGVuZ3RoOyBfaTYrKykge1xuICAgIHZhciBfZWxlNCA9IGVsZXNUb1JlbW92ZVtfaTZdO1xuICAgIGlmIChfZWxlNC5pc0VkZ2UoKSkge1xuICAgICAgLy8gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhpcyBlZGdlIGluIGl0cyBjb25uZWN0ZWQgbm9kZXNcbiAgICAgIHZhciBzcmMgPSBfZWxlNC5zb3VyY2UoKVswXTtcbiAgICAgIHZhciB0Z3QgPSBfZWxlNC50YXJnZXQoKVswXTtcbiAgICAgIHJlbW92ZUVkZ2VSZWYoc3JjLCBfZWxlNCk7XG4gICAgICByZW1vdmVFZGdlUmVmKHRndCwgX2VsZTQpO1xuICAgICAgdmFyIHBsbEVkZ2VzID0gX2VsZTQucGFyYWxsZWxFZGdlcygpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwbGxFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcGxsRWRnZSA9IHBsbEVkZ2VzW2pdO1xuICAgICAgICByZW1vdmVQYXJhbGxlbFJlZihwbGxFZGdlKTtcbiAgICAgICAgaWYgKHBsbEVkZ2UuaXNCdW5kbGVkQmV6aWVyKCkpIHtcbiAgICAgICAgICBwbGxFZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gcGFyZW50XG4gICAgICB2YXIgcGFyZW50ID0gX2VsZTQucGFyZW50KCk7XG4gICAgICBpZiAocGFyZW50Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZW1vdmVDaGlsZFJlZihwYXJlbnQsIF9lbGU0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgICAvLyBtYXJrIGFzIHJlbW92ZWRcbiAgICAgIF9lbGU0Ll9wcml2YXRlLnJlbW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgY29tcG91bmQgZ3JhcGggb3Igbm90XG4gIHZhciBlbGVzU3RpbGxJbnNpZGUgPSBjeS5fcHJpdmF0ZS5lbGVtZW50cztcbiAgY3kuX3ByaXZhdGUuaGFzQ29tcG91bmROb2RlcyA9IGZhbHNlO1xuICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCBlbGVzU3RpbGxJbnNpZGUubGVuZ3RoOyBfaTcrKykge1xuICAgIHZhciBfZWxlNSA9IGVsZXNTdGlsbEluc2lkZVtfaTddO1xuICAgIGlmIChfZWxlNS5pc1BhcmVudCgpKSB7XG4gICAgICBjeS5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgcmVtb3ZlZEVsZW1lbnRzID0gbmV3IENvbGxlY3Rpb24odGhpcy5jeSgpLCBlbGVzVG9SZW1vdmUpO1xuICBpZiAocmVtb3ZlZEVsZW1lbnRzLnNpemUoKSA+IDApIHtcbiAgICAvLyBtdXN0IG1hbnVhbGx5IG5vdGlmeSBzaW5jZSB0cmlnZ2VyIHdvbid0IGRvIHRoaXMgYXV0b21hdGljYWxseSBvbmNlIHJlbW92ZWRcblxuICAgIGlmIChub3RpZnlSZW5kZXJlcikge1xuICAgICAgcmVtb3ZlZEVsZW1lbnRzLmVtaXRBbmROb3RpZnkoJ3JlbW92ZScpO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVBvb2wpIHtcbiAgICAgIHJlbW92ZWRFbGVtZW50cy5lbWl0KCdyZW1vdmUnKTtcbiAgICB9XG4gIH1cblxuICAvLyB0aGUgcGFyZW50cyB3aG8gd2VyZSBtb2RpZmllZCBieSB0aGUgcmVtb3ZhbCBuZWVkIHRoZWlyIHN0eWxlIHVwZGF0ZWRcbiAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgYWx0ZXJlZFBhcmVudHMubGVuZ3RoOyBfaTgrKykge1xuICAgIHZhciBfZWxlNiA9IGFsdGVyZWRQYXJlbnRzW19pOF07XG4gICAgaWYgKCFyZW1vdmVGcm9tUG9vbCB8fCAhX2VsZTYucmVtb3ZlZCgpKSB7XG4gICAgICBfZWxlNi51cGRhdGVTdHlsZSgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVtb3ZlZEVsZW1lbnRzO1xufTtcbmVsZXNmbiQxLm1vdmUgPSBmdW5jdGlvbiAoc3RydWN0KSB7XG4gIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gIHZhciBlbGVzID0gdGhpcztcblxuICAvLyBqdXN0IGNsZWFuIHVwIHJlZnMsIGNhY2hlcywgZXRjLiBpbiB0aGUgc2FtZSB3YXkgYXMgd2hlbiByZW1vdmluZyBhbmQgdGhlbiByZXN0b3JpbmdcbiAgLy8gKG91ciBjYWxscyB0byByZW1vdmUvcmVzdG9yZSBkbyBub3QgcmVtb3ZlIGZyb20gdGhlIGdyYXBoIG9yIG1ha2UgZXZlbnRzKVxuICB2YXIgbm90aWZ5UmVuZGVyZXIgPSBmYWxzZTtcbiAgdmFyIG1vZGlmeVBvb2wgPSBmYWxzZTtcbiAgdmFyIHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoaWQpIHtcbiAgICByZXR1cm4gaWQgPT0gbnVsbCA/IGlkIDogJycgKyBpZDtcbiAgfTsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICBpZiAoc3RydWN0LnNvdXJjZSAhPT0gdW5kZWZpbmVkIHx8IHN0cnVjdC50YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBzcmNJZCA9IHRvU3RyaW5nKHN0cnVjdC5zb3VyY2UpO1xuICAgIHZhciB0Z3RJZCA9IHRvU3RyaW5nKHN0cnVjdC50YXJnZXQpO1xuICAgIHZhciBzcmNFeGlzdHMgPSBzcmNJZCAhPSBudWxsICYmIGN5Lmhhc0VsZW1lbnRXaXRoSWQoc3JjSWQpO1xuICAgIHZhciB0Z3RFeGlzdHMgPSB0Z3RJZCAhPSBudWxsICYmIGN5Lmhhc0VsZW1lbnRXaXRoSWQodGd0SWQpO1xuICAgIGlmIChzcmNFeGlzdHMgfHwgdGd0RXhpc3RzKSB7XG4gICAgICBjeS5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGF2b2lkIGR1cGxpY2F0ZSBzdHlsZSB1cGRhdGVzXG4gICAgICAgIGVsZXMucmVtb3ZlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gY2xlYW4gdXAgcmVmcyBldGMuXG4gICAgICAgIGVsZXMuZW1pdEFuZE5vdGlmeSgnbW92ZW91dCcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgICB2YXIgX2RhdGE1ID0gZWxlLl9wcml2YXRlLmRhdGE7XG4gICAgICAgICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgICAgICAgaWYgKHNyY0V4aXN0cykge1xuICAgICAgICAgICAgICBfZGF0YTUuc291cmNlID0gc3JjSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGd0RXhpc3RzKSB7XG4gICAgICAgICAgICAgIF9kYXRhNS50YXJnZXQgPSB0Z3RJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxlcy5yZXN0b3JlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gbWFrZSBuZXcgcmVmcywgc3R5bGUsIGV0Yy5cbiAgICAgIH0pO1xuXG4gICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmUnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RydWN0LnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gbW92ZSBub2RlIHRvIG5ldyBwYXJlbnRcbiAgICB2YXIgcGFyZW50SWQgPSB0b1N0cmluZyhzdHJ1Y3QucGFyZW50KTtcbiAgICB2YXIgcGFyZW50RXhpc3RzID0gcGFyZW50SWQgPT09IG51bGwgfHwgY3kuaGFzRWxlbWVudFdpdGhJZChwYXJlbnRJZCk7XG4gICAgaWYgKHBhcmVudEV4aXN0cykge1xuICAgICAgdmFyIHBpZFRvQXNzaWduID0gcGFyZW50SWQgPT09IG51bGwgPyB1bmRlZmluZWQgOiBwYXJlbnRJZDtcbiAgICAgIGN5LmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYXZvaWQgZHVwbGljYXRlIHN0eWxlIHVwZGF0ZXNcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBlbGVzLnJlbW92ZShub3RpZnlSZW5kZXJlciwgbW9kaWZ5UG9vbCk7IC8vIGNsZWFuIHVwIHJlZnMgZXRjLlxuICAgICAgICB1cGRhdGVkLmVtaXRBbmROb3RpZnkoJ21vdmVvdXQnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAgdmFyIF9kYXRhNiA9IGVsZS5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgICAgIF9kYXRhNi5wYXJlbnQgPSBwaWRUb0Fzc2lnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlZC5yZXN0b3JlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gbWFrZSBuZXcgcmVmcywgc3R5bGUsIGV0Yy5cbiAgICAgIH0pO1xuXG4gICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmUnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuW2VsZXNmbiRqLCBlbGVzZm4kaSwgZWxlc2ZuJGgsIGVsZXNmbiRnLCBlbGVzZm4kZiwgZGF0YSwgZWxlc2ZuJGQsIGRpbWVuc2lvbnMsIGVsZXNmbiQ5LCBlbGVzZm4kOCwgZWxlc2ZuJDcsIGVsZXNmbiQ2LCBlbGVzZm4kNSwgZWxlc2ZuJDQsIGVsZXNmbiQzLCBlbGVzZm4kMl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKGVsZXNmbiQxLCBwcm9wcyk7XG59KTtcblxudmFyIGNvcmVmbiQ5ID0ge1xuICBhZGQ6IGZ1bmN0aW9uIGFkZChvcHRzKSB7XG4gICAgdmFyIGVsZW1lbnRzO1xuICAgIHZhciBjeSA9IHRoaXM7XG5cbiAgICAvLyBhZGQgdGhlIGVsZW1lbnRzXG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24ob3B0cykpIHtcbiAgICAgIHZhciBlbGVzID0gb3B0cztcbiAgICAgIGlmIChlbGVzLl9wcml2YXRlLmN5ID09PSBjeSkge1xuICAgICAgICAvLyBzYW1lIGluc3RhbmNlID0+IGp1c3QgcmVzdG9yZVxuICAgICAgICBlbGVtZW50cyA9IGVsZXMucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBjb3B5IGZyb20ganNvblxuICAgICAgICB2YXIganNvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAganNvbnMucHVzaChlbGUuanNvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBqc29ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3BlY2lmeSBhbiBhcnJheSBvZiBvcHRpb25zXG4gICAgZWxzZSBpZiAoYXJyYXkob3B0cykpIHtcbiAgICAgIHZhciBfanNvbnMgPSBvcHRzO1xuICAgICAgZWxlbWVudHMgPSBuZXcgQ29sbGVjdGlvbihjeSwgX2pzb25zKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWZ5IHZpYSBvcHRzLm5vZGVzIGFuZCBvcHRzLmVkZ2VzXG4gICAgZWxzZSBpZiAocGxhaW5PYmplY3Qob3B0cykgJiYgKGFycmF5KG9wdHMubm9kZXMpIHx8IGFycmF5KG9wdHMuZWRnZXMpKSkge1xuICAgICAgdmFyIGVsZXNCeUdyb3VwID0gb3B0cztcbiAgICAgIHZhciBfanNvbnMyID0gW107XG4gICAgICB2YXIgZ3JzID0gWydub2RlcycsICdlZGdlcyddO1xuICAgICAgZm9yICh2YXIgX2kgPSAwLCBpbCA9IGdycy5sZW5ndGg7IF9pIDwgaWw7IF9pKyspIHtcbiAgICAgICAgdmFyIGdyb3VwID0gZ3JzW19pXTtcbiAgICAgICAgdmFyIGVsZXNBcnJheSA9IGVsZXNCeUdyb3VwW2dyb3VwXTtcbiAgICAgICAgaWYgKGFycmF5KGVsZXNBcnJheSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamwgPSBlbGVzQXJyYXkubGVuZ3RoOyBqIDwgamw7IGorKykge1xuICAgICAgICAgICAgdmFyIGpzb24gPSBleHRlbmQoe1xuICAgICAgICAgICAgICBncm91cDogZ3JvdXBcbiAgICAgICAgICAgIH0sIGVsZXNBcnJheVtqXSk7XG4gICAgICAgICAgICBfanNvbnMyLnB1c2goanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBfanNvbnMyKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWZ5IG9wdGlvbnMgZm9yIG9uZSBlbGVtZW50XG4gICAgZWxzZSB7XG4gICAgICB2YXIgX2pzb24gPSBvcHRzO1xuICAgICAgZWxlbWVudHMgPSBuZXcgRWxlbWVudChjeSwgX2pzb24pLmNvbGxlY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShjb2xsZWN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oY29sbGVjdGlvbikpIDsgZWxzZSBpZiAoc3RyaW5nKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBjb2xsZWN0aW9uO1xuICAgICAgY29sbGVjdGlvbiA9IHRoaXMuJChzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbW92ZSgpO1xuICB9XG59O1xuXG4vKiBnbG9iYWwgRmxvYXQzMkFycmF5ICovXG5cbi8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQ3ViaWNCZXppZXIobVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gIHZhciBORVdUT05fSVRFUkFUSU9OUyA9IDQsXG4gICAgTkVXVE9OX01JTl9TTE9QRSA9IDAuMDAxLFxuICAgIFNVQkRJVklTSU9OX1BSRUNJU0lPTiA9IDAuMDAwMDAwMSxcbiAgICBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyA9IDEwLFxuICAgIGtTcGxpbmVUYWJsZVNpemUgPSAxMSxcbiAgICBrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCksXG4gICAgZmxvYXQzMkFycmF5U3VwcG9ydGVkID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgLyogTXVzdCBjb250YWluIGZvdXIgYXJndW1lbnRzLiAqL1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIEFyZ3VtZW50cyBtdXN0IGJlIG51bWJlcnMuICovXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oYXJndW1lbnRzW2ldKSB8fCAhaXNGaW5pdGUoYXJndW1lbnRzW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qIFggdmFsdWVzIG11c3QgYmUgaW4gdGhlIFswLCAxXSByYW5nZS4gKi9cbiAgbVgxID0gTWF0aC5taW4obVgxLCAxKTtcbiAgbVgyID0gTWF0aC5taW4obVgyLCAxKTtcbiAgbVgxID0gTWF0aC5tYXgobVgxLCAwKTtcbiAgbVgyID0gTWF0aC5tYXgobVgyLCAwKTtcbiAgdmFyIG1TYW1wbGVWYWx1ZXMgPSBmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPyBuZXcgRmxvYXQzMkFycmF5KGtTcGxpbmVUYWJsZVNpemUpIDogbmV3IEFycmF5KGtTcGxpbmVUYWJsZVNpemUpO1xuICBmdW5jdGlvbiBBKGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDEuMCAtIDMuMCAqIGFBMiArIDMuMCAqIGFBMTtcbiAgfVxuICBmdW5jdGlvbiBCKGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDMuMCAqIGFBMiAtIDYuMCAqIGFBMTtcbiAgfVxuICBmdW5jdGlvbiBDKGFBMSkge1xuICAgIHJldHVybiAzLjAgKiBhQTE7XG4gIH1cbiAgZnVuY3Rpb24gY2FsY0JlemllcihhVCwgYUExLCBhQTIpIHtcbiAgICByZXR1cm4gKChBKGFBMSwgYUEyKSAqIGFUICsgQihhQTEsIGFBMikpICogYVQgKyBDKGFBMSkpICogYVQ7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U2xvcGUoYVQsIGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDMuMCAqIEEoYUExLCBhQTIpICogYVQgKiBhVCArIDIuMCAqIEIoYUExLCBhQTIpICogYVQgKyBDKGFBMSk7XG4gIH1cbiAgZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGFHdWVzc1QpIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgTkVXVE9OX0lURVJBVElPTlM7ICsrX2kpIHtcbiAgICAgIHZhciBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XG4gICAgICBpZiAoY3VycmVudFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgcmV0dXJuIGFHdWVzc1Q7XG4gICAgICB9XG4gICAgICB2YXIgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgYUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcbiAgICB9XG4gICAgcmV0dXJuIGFHdWVzc1Q7XG4gIH1cbiAgZnVuY3Rpb24gY2FsY1NhbXBsZVZhbHVlcygpIHtcbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrU3BsaW5lVGFibGVTaXplOyArK19pMikge1xuICAgICAgbVNhbXBsZVZhbHVlc1tfaTJdID0gY2FsY0JlemllcihfaTIgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYmluYXJ5U3ViZGl2aWRlKGFYLCBhQSwgYUIpIHtcbiAgICB2YXIgY3VycmVudFgsXG4gICAgICBjdXJyZW50VCxcbiAgICAgIGkgPSAwO1xuICAgIGRvIHtcbiAgICAgIGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XG4gICAgICBjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgaWYgKGN1cnJlbnRYID4gMC4wKSB7XG4gICAgICAgIGFCID0gY3VycmVudFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhQSA9IGN1cnJlbnRUO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJiArK2kgPCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUO1xuICB9XG4gIGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XG4gICAgdmFyIGludGVydmFsU3RhcnQgPSAwLjAsXG4gICAgICBjdXJyZW50U2FtcGxlID0gMSxcbiAgICAgIGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcbiAgICBmb3IgKDsgY3VycmVudFNhbXBsZSAhPT0gbGFzdFNhbXBsZSAmJiBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdIDw9IGFYOyArK2N1cnJlbnRTYW1wbGUpIHtcbiAgICAgIGludGVydmFsU3RhcnQgKz0ga1NhbXBsZVN0ZXBTaXplO1xuICAgIH1cbiAgICAtLWN1cnJlbnRTYW1wbGU7XG4gICAgdmFyIGRpc3QgPSAoYVggLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvIChtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pLFxuICAgICAgZ3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemUsXG4gICAgICBpbml0aWFsU2xvcGUgPSBnZXRTbG9wZShndWVzc0ZvclQsIG1YMSwgbVgyKTtcbiAgICBpZiAoaW5pdGlhbFNsb3BlID49IE5FV1RPTl9NSU5fU0xPUEUpIHtcbiAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JUKTtcbiAgICB9IGVsc2UgaWYgKGluaXRpYWxTbG9wZSA9PT0gMC4wKSB7XG4gICAgICByZXR1cm4gZ3Vlc3NGb3JUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplKTtcbiAgICB9XG4gIH1cbiAgdmFyIF9wcmVjb21wdXRlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBwcmVjb21wdXRlKCkge1xuICAgIF9wcmVjb21wdXRlZCA9IHRydWU7XG4gICAgaWYgKG1YMSAhPT0gbVkxIHx8IG1YMiAhPT0gbVkyKSB7XG4gICAgICBjYWxjU2FtcGxlVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIHZhciBmID0gZnVuY3Rpb24gZihhWCkge1xuICAgIGlmICghX3ByZWNvbXB1dGVkKSB7XG4gICAgICBwcmVjb21wdXRlKCk7XG4gICAgfVxuICAgIGlmIChtWDEgPT09IG1ZMSAmJiBtWDIgPT09IG1ZMikge1xuICAgICAgcmV0dXJuIGFYO1xuICAgIH1cbiAgICBpZiAoYVggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoYVggPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gY2FsY0JlemllcihnZXRURm9yWChhWCksIG1ZMSwgbVkyKTtcbiAgfTtcbiAgZi5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbe1xuICAgICAgeDogbVgxLFxuICAgICAgeTogbVkxXG4gICAgfSwge1xuICAgICAgeDogbVgyLFxuICAgICAgeTogbVkyXG4gICAgfV07XG4gIH07XG4gIHZhciBzdHIgPSBcImdlbmVyYXRlQmV6aWVyKFwiICsgW21YMSwgbVkxLCBtWDIsIG1ZMl0gKyBcIilcIjtcbiAgZi50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICByZXR1cm4gZjtcbn1cblxuLyohIFJ1bmdlLUt1dHRhIHNwcmluZyBwaHlzaWNzIGZ1bmN0aW9uIGdlbmVyYXRvci4gQWRhcHRlZCBmcm9tIEZyYW1lci5qcywgY29weXJpZ2h0IEtvZW4gQm9rLiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xuLyogR2l2ZW4gYSB0ZW5zaW9uLCBmcmljdGlvbiwgYW5kIGR1cmF0aW9uLCBhIHNpbXVsYXRpb24gYXQgNjBGUFMgd2lsbCBmaXJzdCBydW4gd2l0aG91dCBhIGRlZmluZWQgZHVyYXRpb24gaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBmdWxsIHBhdGguIEEgc2Vjb25kIHBhc3NcbiAgIHRoZW4gYWRqdXN0cyB0aGUgdGltZSBkZWx0YSAtLSB1c2luZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBhY3R1YWwgdGltZSBhbmQgZHVyYXRpb24gLS0gdG8gY2FsY3VsYXRlIHRoZSBwYXRoIGZvciB0aGUgZHVyYXRpb24tY29uc3RyYWluZWQgYW5pbWF0aW9uLiAqL1xudmFyIGdlbmVyYXRlU3ByaW5nUks0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSkge1xuICAgIHJldHVybiAtc3RhdGUudGVuc2lvbiAqIHN0YXRlLnggLSBzdGF0ZS5mcmljdGlvbiAqIHN0YXRlLnY7XG4gIH1cbiAgZnVuY3Rpb24gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKGluaXRpYWxTdGF0ZSwgZHQsIGRlcml2YXRpdmUpIHtcbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICB4OiBpbml0aWFsU3RhdGUueCArIGRlcml2YXRpdmUuZHggKiBkdCxcbiAgICAgIHY6IGluaXRpYWxTdGF0ZS52ICsgZGVyaXZhdGl2ZS5kdiAqIGR0LFxuICAgICAgdGVuc2lvbjogaW5pdGlhbFN0YXRlLnRlbnNpb24sXG4gICAgICBmcmljdGlvbjogaW5pdGlhbFN0YXRlLmZyaWN0aW9uXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgZHg6IHN0YXRlLnYsXG4gICAgICBkdjogc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShzdGF0ZSwgZHQpIHtcbiAgICB2YXIgYSA9IHtcbiAgICAgICAgZHg6IHN0YXRlLnYsXG4gICAgICAgIGR2OiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSlcbiAgICAgIH0sXG4gICAgICBiID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYSksXG4gICAgICBjID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYiksXG4gICAgICBkID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCwgYyksXG4gICAgICBkeGR0ID0gMS4wIC8gNi4wICogKGEuZHggKyAyLjAgKiAoYi5keCArIGMuZHgpICsgZC5keCksXG4gICAgICBkdmR0ID0gMS4wIC8gNi4wICogKGEuZHYgKyAyLjAgKiAoYi5kdiArIGMuZHYpICsgZC5kdik7XG4gICAgc3RhdGUueCA9IHN0YXRlLnggKyBkeGR0ICogZHQ7XG4gICAgc3RhdGUudiA9IHN0YXRlLnYgKyBkdmR0ICogZHQ7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xuICAgIHZhciBpbml0U3RhdGUgPSB7XG4gICAgICAgIHg6IC0xLFxuICAgICAgICB2OiAwLFxuICAgICAgICB0ZW5zaW9uOiBudWxsLFxuICAgICAgICBmcmljdGlvbjogbnVsbFxuICAgICAgfSxcbiAgICAgIHBhdGggPSBbMF0sXG4gICAgICB0aW1lX2xhcHNlZCA9IDAsXG4gICAgICB0b2xlcmFuY2UgPSAxIC8gMTAwMDAsXG4gICAgICBEVCA9IDE2IC8gMTAwMCxcbiAgICAgIGhhdmVfZHVyYXRpb24sXG4gICAgICBkdCxcbiAgICAgIGxhc3Rfc3RhdGU7XG4gICAgdGVuc2lvbiA9IHBhcnNlRmxvYXQodGVuc2lvbikgfHwgNTAwO1xuICAgIGZyaWN0aW9uID0gcGFyc2VGbG9hdChmcmljdGlvbikgfHwgMjA7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiB8fCBudWxsO1xuICAgIGluaXRTdGF0ZS50ZW5zaW9uID0gdGVuc2lvbjtcbiAgICBpbml0U3RhdGUuZnJpY3Rpb24gPSBmcmljdGlvbjtcbiAgICBoYXZlX2R1cmF0aW9uID0gZHVyYXRpb24gIT09IG51bGw7XG5cbiAgICAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCB0aW1lIGl0IHRha2VzIGZvciB0aGlzIGFuaW1hdGlvbiB0byBjb21wbGV0ZSB3aXRoIHRoZSBwcm92aWRlZCBjb25kaXRpb25zLiAqL1xuICAgIGlmIChoYXZlX2R1cmF0aW9uKSB7XG4gICAgICAvKiBSdW4gdGhlIHNpbXVsYXRpb24gd2l0aG91dCBhIGR1cmF0aW9uLiAqL1xuICAgICAgdGltZV9sYXBzZWQgPSBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uKTtcbiAgICAgIC8qIENvbXB1dGUgdGhlIGFkanVzdGVkIHRpbWUgZGVsdGEuICovXG4gICAgICBkdCA9IHRpbWVfbGFwc2VkIC8gZHVyYXRpb24gKiBEVDtcbiAgICB9IGVsc2Uge1xuICAgICAgZHQgPSBEVDtcbiAgICB9XG4gICAgZm9yICg7Oykge1xuICAgICAgLyogTmV4dC9zdGVwIGZ1bmN0aW9uIC4qL1xuICAgICAgbGFzdF9zdGF0ZSA9IHNwcmluZ0ludGVncmF0ZVN0YXRlKGxhc3Rfc3RhdGUgfHwgaW5pdFN0YXRlLCBkdCk7XG4gICAgICAvKiBTdG9yZSB0aGUgcG9zaXRpb24uICovXG4gICAgICBwYXRoLnB1c2goMSArIGxhc3Rfc3RhdGUueCk7XG4gICAgICB0aW1lX2xhcHNlZCArPSAxNjtcbiAgICAgIC8qIElmIHRoZSBjaGFuZ2UgdGhyZXNob2xkIGlzIHJlYWNoZWQsIGJyZWFrLiAqL1xuICAgICAgaWYgKCEoTWF0aC5hYnMobGFzdF9zdGF0ZS54KSA+IHRvbGVyYW5jZSAmJiBNYXRoLmFicyhsYXN0X3N0YXRlLnYpID4gdG9sZXJhbmNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJZiBkdXJhdGlvbiBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIHRoZSBhY3R1YWwgdGltZSByZXF1aXJlZCBmb3IgY29tcGxldGluZyB0aGlzIGFuaW1hdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBjbG9zdXJlIHRoYXQgaG9sZHMgdGhlXG4gICAgICAgY29tcHV0ZWQgcGF0aCBhbmQgcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwZXJjZW50Q29tcGxldGUuICovXG4gICAgcmV0dXJuICFoYXZlX2R1cmF0aW9uID8gdGltZV9sYXBzZWQgOiBmdW5jdGlvbiAocGVyY2VudENvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gcGF0aFtwZXJjZW50Q29tcGxldGUgKiAocGF0aC5sZW5ndGggLSAxKSB8IDBdO1xuICAgIH07XG4gIH07XG59KCk7XG5cbnZhciBjdWJpY0JlemllciA9IGZ1bmN0aW9uIGN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKSB7XG4gIHZhciBiZXppZXIgPSBnZW5lcmF0ZUN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIGJlemllcihwZXJjZW50KTtcbiAgfTtcbn07XG52YXIgZWFzaW5ncyA9IHtcbiAgJ2xpbmVhcic6IGZ1bmN0aW9uIGxpbmVhcihzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHBlcmNlbnQ7XG4gIH0sXG4gIC8vIGRlZmF1bHQgZWFzaW5nc1xuICAnZWFzZSc6IGN1YmljQmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSksXG4gICdlYXNlLWluJzogY3ViaWNCZXppZXIoMC40MiwgMCwgMSwgMSksXG4gICdlYXNlLW91dCc6IGN1YmljQmV6aWVyKDAsIDAsIDAuNTgsIDEpLFxuICAnZWFzZS1pbi1vdXQnOiBjdWJpY0JlemllcigwLjQyLCAwLCAwLjU4LCAxKSxcbiAgLy8gc2luZVxuICAnZWFzZS1pbi1zaW5lJzogY3ViaWNCZXppZXIoMC40NywgMCwgMC43NDUsIDAuNzE1KSxcbiAgJ2Vhc2Utb3V0LXNpbmUnOiBjdWJpY0JlemllcigwLjM5LCAwLjU3NSwgMC41NjUsIDEpLFxuICAnZWFzZS1pbi1vdXQtc2luZSc6IGN1YmljQmV6aWVyKDAuNDQ1LCAwLjA1LCAwLjU1LCAwLjk1KSxcbiAgLy8gcXVhZFxuICAnZWFzZS1pbi1xdWFkJzogY3ViaWNCZXppZXIoMC41NSwgMC4wODUsIDAuNjgsIDAuNTMpLFxuICAnZWFzZS1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpLFxuICAnZWFzZS1pbi1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuNDU1LCAwLjAzLCAwLjUxNSwgMC45NTUpLFxuICAvLyBjdWJpY1xuICAnZWFzZS1pbi1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNTUsIDAuMDU1LCAwLjY3NSwgMC4xOSksXG4gICdlYXNlLW91dC1jdWJpYyc6IGN1YmljQmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksXG4gICdlYXNlLWluLW91dC1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNjQ1LCAwLjA0NSwgMC4zNTUsIDEpLFxuICAvLyBxdWFydFxuICAnZWFzZS1pbi1xdWFydCc6IGN1YmljQmV6aWVyKDAuODk1LCAwLjAzLCAwLjY4NSwgMC4yMiksXG4gICdlYXNlLW91dC1xdWFydCc6IGN1YmljQmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LXF1YXJ0JzogY3ViaWNCZXppZXIoMC43NywgMCwgMC4xNzUsIDEpLFxuICAvLyBxdWludFxuICAnZWFzZS1pbi1xdWludCc6IGN1YmljQmV6aWVyKDAuNzU1LCAwLjA1LCAwLjg1NSwgMC4wNiksXG4gICdlYXNlLW91dC1xdWludCc6IGN1YmljQmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLFxuICAnZWFzZS1pbi1vdXQtcXVpbnQnOiBjdWJpY0JlemllcigwLjg2LCAwLCAwLjA3LCAxKSxcbiAgLy8gZXhwb1xuICAnZWFzZS1pbi1leHBvJzogY3ViaWNCZXppZXIoMC45NSwgMC4wNSwgMC43OTUsIDAuMDM1KSxcbiAgJ2Vhc2Utb3V0LWV4cG8nOiBjdWJpY0JlemllcigwLjE5LCAxLCAwLjIyLCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LWV4cG8nOiBjdWJpY0JlemllcigxLCAwLCAwLCAxKSxcbiAgLy8gY2lyY1xuICAnZWFzZS1pbi1jaXJjJzogY3ViaWNCZXppZXIoMC42LCAwLjA0LCAwLjk4LCAwLjMzNSksXG4gICdlYXNlLW91dC1jaXJjJzogY3ViaWNCZXppZXIoMC4wNzUsIDAuODIsIDAuMTY1LCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LWNpcmMnOiBjdWJpY0JlemllcigwLjc4NSwgMC4xMzUsIDAuMTUsIDAuODYpLFxuICAvLyB1c2VyIHBhcmFtIGVhc2luZ3MuLi5cblxuICAnc3ByaW5nJzogZnVuY3Rpb24gc3ByaW5nKHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gY2FuJ3QgZ2V0IGEgc3ByaW5nIHcvIGR1cmF0aW9uIDBcbiAgICAgIHJldHVybiBlYXNpbmdzLmxpbmVhcjsgLy8gZHVyYXRpb24gMCA9PiBqdW1wIHRvIGVuZCBzbyBpbXBsIGRvZXNuJ3QgbWF0dGVyXG4gICAgfVxuXG4gICAgdmFyIHNwcmluZyA9IGdlbmVyYXRlU3ByaW5nUks0KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgICByZXR1cm4gc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogc3ByaW5nKHBlcmNlbnQpO1xuICAgIH07XG4gIH0sXG4gICdjdWJpYy1iZXppZXInOiBjdWJpY0JlemllclxufTtcblxuZnVuY3Rpb24gZ2V0RWFzZWRWYWx1ZSh0eXBlLCBzdGFydCwgZW5kLCBwZXJjZW50LCBlYXNpbmdGbikge1xuICBpZiAocGVyY2VudCA9PT0gMSkge1xuICAgIHJldHVybiBlbmQ7XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICByZXR1cm4gZW5kO1xuICB9XG4gIHZhciB2YWwgPSBlYXNpbmdGbihzdGFydCwgZW5kLCBwZXJjZW50KTtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgaWYgKHR5cGUucm91bmRWYWx1ZSB8fCB0eXBlLmNvbG9yKSB7XG4gICAgdmFsID0gTWF0aC5yb3VuZCh2YWwpO1xuICB9XG4gIGlmICh0eXBlLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsID0gTWF0aC5tYXgodmFsLCB0eXBlLm1pbik7XG4gIH1cbiAgaWYgKHR5cGUubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWwgPSBNYXRoLm1pbih2YWwsIHR5cGUubWF4KTtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUocHJvcCwgc3BlYykge1xuICBpZiAocHJvcC5wZlZhbHVlICE9IG51bGwgfHwgcHJvcC52YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHByb3AucGZWYWx1ZSAhPSBudWxsICYmIChzcGVjID09IG51bGwgfHwgc3BlYy50eXBlLnVuaXRzICE9PSAnJScpKSB7XG4gICAgICByZXR1cm4gcHJvcC5wZlZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvcC52YWx1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByb3A7XG4gIH1cbn1cbmZ1bmN0aW9uIGVhc2Uoc3RhcnRQcm9wLCBlbmRQcm9wLCBwZXJjZW50LCBlYXNpbmdGbiwgcHJvcFNwZWMpIHtcbiAgdmFyIHR5cGUgPSBwcm9wU3BlYyAhPSBudWxsID8gcHJvcFNwZWMudHlwZSA6IG51bGw7XG4gIGlmIChwZXJjZW50IDwgMCkge1xuICAgIHBlcmNlbnQgPSAwO1xuICB9IGVsc2UgaWYgKHBlcmNlbnQgPiAxKSB7XG4gICAgcGVyY2VudCA9IDE7XG4gIH1cbiAgdmFyIHN0YXJ0ID0gZ2V0VmFsdWUoc3RhcnRQcm9wLCBwcm9wU3BlYyk7XG4gIHZhciBlbmQgPSBnZXRWYWx1ZShlbmRQcm9wLCBwcm9wU3BlYyk7XG4gIGlmIChudW1iZXIkMShzdGFydCkgJiYgbnVtYmVyJDEoZW5kKSkge1xuICAgIHJldHVybiBnZXRFYXNlZFZhbHVlKHR5cGUsIHN0YXJ0LCBlbmQsIHBlcmNlbnQsIGVhc2luZ0ZuKTtcbiAgfSBlbHNlIGlmIChhcnJheShzdGFydCkgJiYgYXJyYXkoZW5kKSkge1xuICAgIHZhciBlYXNlZEFyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2kgPSBzdGFydFtpXTtcbiAgICAgIHZhciBlaSA9IGVuZFtpXTtcbiAgICAgIGlmIChzaSAhPSBudWxsICYmIGVpICE9IG51bGwpIHtcbiAgICAgICAgdmFyIHZhbCA9IGdldEVhc2VkVmFsdWUodHlwZSwgc2ksIGVpLCBwZXJjZW50LCBlYXNpbmdGbik7XG4gICAgICAgIGVhc2VkQXJyLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVhc2VkQXJyLnB1c2goZWkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWFzZWRBcnI7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RlcCQxKHNlbGYsIGFuaSwgbm93LCBpc0NvcmUpIHtcbiAgdmFyIGlzRWxlcyA9ICFpc0NvcmU7XG4gIHZhciBfcCA9IHNlbGYuX3ByaXZhdGU7XG4gIHZhciBhbmlfcCA9IGFuaS5fcHJpdmF0ZTtcbiAgdmFyIHBFYXNpbmcgPSBhbmlfcC5lYXNpbmc7XG4gIHZhciBzdGFydFRpbWUgPSBhbmlfcC5zdGFydFRpbWU7XG4gIHZhciBjeSA9IGlzQ29yZSA/IHNlbGYgOiBzZWxmLmN5KCk7XG4gIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG4gIGlmICghYW5pX3AuZWFzaW5nSW1wbCkge1xuICAgIGlmIChwRWFzaW5nID09IG51bGwpIHtcbiAgICAgIC8vIHVzZSBkZWZhdWx0XG4gICAgICBhbmlfcC5lYXNpbmdJbXBsID0gZWFzaW5nc1snbGluZWFyJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZW4gZGVmaW5lIHcvIG5hbWVcbiAgICAgIHZhciBlYXNpbmdWYWxzO1xuICAgICAgaWYgKHN0cmluZyhwRWFzaW5nKSkge1xuICAgICAgICB2YXIgZWFzaW5nUHJvcCA9IHN0eWxlLnBhcnNlKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIHBFYXNpbmcpO1xuICAgICAgICBlYXNpbmdWYWxzID0gZWFzaW5nUHJvcC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZW4gYXNzdW1lIHByZXBhcnNlZCBhcnJheVxuICAgICAgICBlYXNpbmdWYWxzID0gcEVhc2luZztcbiAgICAgIH1cbiAgICAgIHZhciBuYW1lLCBhcmdzO1xuICAgICAgaWYgKHN0cmluZyhlYXNpbmdWYWxzKSkge1xuICAgICAgICBuYW1lID0gZWFzaW5nVmFscztcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IGVhc2luZ1ZhbHNbMV07XG4gICAgICAgIGFyZ3MgPSBlYXNpbmdWYWxzLnNsaWNlKDIpLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICAgIHJldHVybiArbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGNyZWF0ZSB3aXRoIGFyZ3NcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzcHJpbmcnKSB7XG4gICAgICAgICAgYXJncy5wdXNoKGFuaV9wLmR1cmF0aW9uKTsgLy8gbmVlZCBkdXJhdGlvbiB0byBnZW5lcmF0ZSBzcHJpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGFuaV9wLmVhc2luZ0ltcGwgPSBlYXNpbmdzW25hbWVdLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3RhdGljIGltcGwgYnkgbmFtZVxuICAgICAgICBhbmlfcC5lYXNpbmdJbXBsID0gZWFzaW5nc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIGVhc2luZyA9IGFuaV9wLmVhc2luZ0ltcGw7XG4gIHZhciBwZXJjZW50O1xuICBpZiAoYW5pX3AuZHVyYXRpb24gPT09IDApIHtcbiAgICBwZXJjZW50ID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwZXJjZW50ID0gKG5vdyAtIHN0YXJ0VGltZSkgLyBhbmlfcC5kdXJhdGlvbjtcbiAgfVxuICBpZiAoYW5pX3AuYXBwbHlpbmcpIHtcbiAgICBwZXJjZW50ID0gYW5pX3AucHJvZ3Jlc3M7XG4gIH1cbiAgaWYgKHBlcmNlbnQgPCAwKSB7XG4gICAgcGVyY2VudCA9IDA7XG4gIH0gZWxzZSBpZiAocGVyY2VudCA+IDEpIHtcbiAgICBwZXJjZW50ID0gMTtcbiAgfVxuICBpZiAoYW5pX3AuZGVsYXkgPT0gbnVsbCkge1xuICAgIC8vIHRoZW4gdXBkYXRlXG5cbiAgICB2YXIgc3RhcnRQb3MgPSBhbmlfcC5zdGFydFBvc2l0aW9uO1xuICAgIHZhciBlbmRQb3MgPSBhbmlfcC5wb3NpdGlvbjtcbiAgICBpZiAoZW5kUG9zICYmIGlzRWxlcyAmJiAhc2VsZi5sb2NrZWQoKSkge1xuICAgICAgdmFyIG5ld1BvcyA9IHt9O1xuICAgICAgaWYgKHZhbGlkKHN0YXJ0UG9zLngsIGVuZFBvcy54KSkge1xuICAgICAgICBuZXdQb3MueCA9IGVhc2Uoc3RhcnRQb3MueCwgZW5kUG9zLngsIHBlcmNlbnQsIGVhc2luZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWQoc3RhcnRQb3MueSwgZW5kUG9zLnkpKSB7XG4gICAgICAgIG5ld1Bvcy55ID0gZWFzZShzdGFydFBvcy55LCBlbmRQb3MueSwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgIH1cbiAgICAgIHNlbGYucG9zaXRpb24obmV3UG9zKTtcbiAgICB9XG4gICAgdmFyIHN0YXJ0UGFuID0gYW5pX3Auc3RhcnRQYW47XG4gICAgdmFyIGVuZFBhbiA9IGFuaV9wLnBhbjtcbiAgICB2YXIgcGFuID0gX3AucGFuO1xuICAgIHZhciBhbmltYXRpbmdQYW4gPSBlbmRQYW4gIT0gbnVsbCAmJiBpc0NvcmU7XG4gICAgaWYgKGFuaW1hdGluZ1Bhbikge1xuICAgICAgaWYgKHZhbGlkKHN0YXJ0UGFuLngsIGVuZFBhbi54KSkge1xuICAgICAgICBwYW4ueCA9IGVhc2Uoc3RhcnRQYW4ueCwgZW5kUGFuLngsIHBlcmNlbnQsIGVhc2luZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWQoc3RhcnRQYW4ueSwgZW5kUGFuLnkpKSB7XG4gICAgICAgIHBhbi55ID0gZWFzZShzdGFydFBhbi55LCBlbmRQYW4ueSwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgncGFuJyk7XG4gICAgfVxuICAgIHZhciBzdGFydFpvb20gPSBhbmlfcC5zdGFydFpvb207XG4gICAgdmFyIGVuZFpvb20gPSBhbmlfcC56b29tO1xuICAgIHZhciBhbmltYXRpbmdab29tID0gZW5kWm9vbSAhPSBudWxsICYmIGlzQ29yZTtcbiAgICBpZiAoYW5pbWF0aW5nWm9vbSkge1xuICAgICAgaWYgKHZhbGlkKHN0YXJ0Wm9vbSwgZW5kWm9vbSkpIHtcbiAgICAgICAgX3Auem9vbSA9IGJvdW5kKF9wLm1pblpvb20sIGVhc2Uoc3RhcnRab29tLCBlbmRab29tLCBwZXJjZW50LCBlYXNpbmcpLCBfcC5tYXhab29tKTtcbiAgICAgIH1cbiAgICAgIHNlbGYuZW1pdCgnem9vbScpO1xuICAgIH1cbiAgICBpZiAoYW5pbWF0aW5nUGFuIHx8IGFuaW1hdGluZ1pvb20pIHtcbiAgICAgIHNlbGYuZW1pdCgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgdmFyIHByb3BzID0gYW5pX3Auc3R5bGU7XG4gICAgaWYgKHByb3BzICYmIHByb3BzLmxlbmd0aCA+IDAgJiYgaXNFbGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07XG4gICAgICAgIHZhciBfbmFtZSA9IHByb3AubmFtZTtcbiAgICAgICAgdmFyIGVuZCA9IHByb3A7XG4gICAgICAgIHZhciBzdGFydCA9IGFuaV9wLnN0YXJ0U3R5bGVbX25hbWVdO1xuICAgICAgICB2YXIgcHJvcFNwZWMgPSBzdHlsZS5wcm9wZXJ0aWVzW3N0YXJ0Lm5hbWVdO1xuICAgICAgICB2YXIgZWFzZWRWYWwgPSBlYXNlKHN0YXJ0LCBlbmQsIHBlcmNlbnQsIGVhc2luZywgcHJvcFNwZWMpO1xuICAgICAgICBzdHlsZS5vdmVycmlkZUJ5cGFzcyhzZWxmLCBfbmFtZSwgZWFzZWRWYWwpO1xuICAgICAgfSAvLyBmb3IgcHJvcHNcblxuICAgICAgc2VsZi5lbWl0KCdzdHlsZScpO1xuICAgIH0gLy8gaWZcbiAgfVxuXG4gIGFuaV9wLnByb2dyZXNzID0gcGVyY2VudDtcbiAgcmV0dXJuIHBlcmNlbnQ7XG59XG5mdW5jdGlvbiB2YWxpZChzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PSBudWxsIHx8IGVuZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChudW1iZXIkMShzdGFydCkgJiYgbnVtYmVyJDEoZW5kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRBbmltYXRpb24oc2VsZiwgYW5pLCBub3csIGlzQ29yZSkge1xuICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gIGFuaV9wLnN0YXJ0ZWQgPSB0cnVlO1xuICBhbmlfcC5zdGFydFRpbWUgPSBub3cgLSBhbmlfcC5wcm9ncmVzcyAqIGFuaV9wLmR1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBzdGVwQWxsKG5vdywgY3kpIHtcbiAgdmFyIGVsZXMgPSBjeS5fcHJpdmF0ZS5hbmlFbGVzO1xuICB2YXIgZG9uZUVsZXMgPSBbXTtcbiAgZnVuY3Rpb24gc3RlcE9uZShlbGUsIGlzQ29yZSkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgY3VycmVudCA9IF9wLmFuaW1hdGlvbi5jdXJyZW50O1xuICAgIHZhciBxdWV1ZSA9IF9wLmFuaW1hdGlvbi5xdWV1ZTtcbiAgICB2YXIgcmFuQW5pcyA9IGZhbHNlO1xuXG4gICAgLy8gaWYgbm90aGluZyBjdXJyZW50bHkgYW5pbWF0aW5nLCBnZXQgc29tZXRoaW5nIGZyb20gdGhlIHF1ZXVlXG4gICAgaWYgKGN1cnJlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgbmV4dCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsYmFja3MgPSBmdW5jdGlvbiBjYWxsYmFja3MoX2NhbGxiYWNrcykge1xuICAgICAgZm9yICh2YXIgaiA9IF9jYWxsYmFja3MubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGNiID0gX2NhbGxiYWNrc1tqXTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgICAgIF9jYWxsYmFja3Muc3BsaWNlKDAsIF9jYWxsYmFja3MubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgLy8gc3RlcCBhbmQgcmVtb3ZlIGlmIGRvbmVcbiAgICBmb3IgKHZhciBpID0gY3VycmVudC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGFuaSA9IGN1cnJlbnRbaV07XG4gICAgICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gICAgICBpZiAoYW5pX3Auc3RvcHBlZCkge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpLCAxKTtcbiAgICAgICAgYW5pX3AuaG9va2VkID0gZmFsc2U7XG4gICAgICAgIGFuaV9wLnBsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgYW5pX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBjYWxsYmFja3MoYW5pX3AuZnJhbWVzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWFuaV9wLnBsYXlpbmcgJiYgIWFuaV9wLmFwcGx5aW5nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbiBhcHBseSgpIHdoaWxlIHBsYXlpbmcgc2hvdWxkbid0IGRvIGFueXRoaW5nXG4gICAgICBpZiAoYW5pX3AucGxheWluZyAmJiBhbmlfcC5hcHBseWluZykge1xuICAgICAgICBhbmlfcC5hcHBseWluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFhbmlfcC5zdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0QW5pbWF0aW9uKGVsZSwgYW5pLCBub3cpO1xuICAgICAgfVxuICAgICAgc3RlcCQxKGVsZSwgYW5pLCBub3csIGlzQ29yZSk7XG4gICAgICBpZiAoYW5pX3AuYXBwbHlpbmcpIHtcbiAgICAgICAgYW5pX3AuYXBwbHlpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcyhhbmlfcC5mcmFtZXMpO1xuICAgICAgaWYgKGFuaV9wLnN0ZXAgIT0gbnVsbCkge1xuICAgICAgICBhbmlfcC5zdGVwKG5vdyk7XG4gICAgICB9XG4gICAgICBpZiAoYW5pLmNvbXBsZXRlZCgpKSB7XG4gICAgICAgIGN1cnJlbnQuc3BsaWNlKGksIDEpO1xuICAgICAgICBhbmlfcC5ob29rZWQgPSBmYWxzZTtcbiAgICAgICAgYW5pX3AucGxheWluZyA9IGZhbHNlO1xuICAgICAgICBhbmlfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIGNhbGxiYWNrcyhhbmlfcC5jb21wbGV0ZXMpO1xuICAgICAgfVxuICAgICAgcmFuQW5pcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaXNDb3JlICYmIGN1cnJlbnQubGVuZ3RoID09PSAwICYmIHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZG9uZUVsZXMucHVzaChlbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuQW5pcztcbiAgfSAvLyBzdGVwRWxlbWVudFxuXG4gIC8vIGhhbmRsZSBhbGwgZWxlc1xuICB2YXIgcmFuRWxlQW5pID0gZmFsc2U7XG4gIGZvciAodmFyIGUgPSAwOyBlIDwgZWxlcy5sZW5ndGg7IGUrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2VdO1xuICAgIHZhciBoYW5kbGVkVGhpc0VsZSA9IHN0ZXBPbmUoZWxlKTtcbiAgICByYW5FbGVBbmkgPSByYW5FbGVBbmkgfHwgaGFuZGxlZFRoaXNFbGU7XG4gIH0gLy8gZWFjaCBlbGVtZW50XG5cbiAgdmFyIHJhbkNvcmVBbmkgPSBzdGVwT25lKGN5LCB0cnVlKTtcblxuICAvLyBub3RpZnkgcmVuZGVyZXJcbiAgaWYgKHJhbkVsZUFuaSB8fCByYW5Db3JlQW5pKSB7XG4gICAgaWYgKGVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY3kubm90aWZ5KCdkcmF3JywgZWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN5Lm5vdGlmeSgnZHJhdycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBlbGVtZW50cyBmcm9tIGxpc3Qgb2YgY3VycmVudGx5IGFuaW1hdGluZyBpZiBpdHMgcXVldWVzIGFyZSBlbXB0eVxuICBlbGVzLnVubWVyZ2UoZG9uZUVsZXMpO1xuICBjeS5lbWl0KCdzdGVwJyk7XG59IC8vIHN0ZXBBbGxcblxudmFyIGNvcmVmbiQ4ID0ge1xuICAvLyBwdWxsIGluIGFuaW1hdGlvbiBmdW5jdGlvbnNcbiAgYW5pbWF0ZTogZGVmaW5lLmFuaW1hdGUoKSxcbiAgYW5pbWF0aW9uOiBkZWZpbmUuYW5pbWF0aW9uKCksXG4gIGFuaW1hdGVkOiBkZWZpbmUuYW5pbWF0ZWQoKSxcbiAgY2xlYXJRdWV1ZTogZGVmaW5lLmNsZWFyUXVldWUoKSxcbiAgZGVsYXk6IGRlZmluZS5kZWxheSgpLFxuICBkZWxheUFuaW1hdGlvbjogZGVmaW5lLmRlbGF5QW5pbWF0aW9uKCksXG4gIHN0b3A6IGRlZmluZS5zdG9wKCksXG4gIGFkZFRvQW5pbWF0aW9uUG9vbDogZnVuY3Rpb24gYWRkVG9BbmltYXRpb25Qb29sKGVsZXMpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHNhdmUgY3ljbGVzIHdoZW4gbm8gc3R5bGUgdXNlZFxuXG4gICAgY3kuX3ByaXZhdGUuYW5pRWxlcy5tZXJnZShlbGVzKTtcbiAgfSxcbiAgc3RvcEFuaW1hdGlvbkxvb3A6IGZ1bmN0aW9uIHN0b3BBbmltYXRpb25Mb29wKCkge1xuICAgIHRoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcgPSBmYWxzZTtcbiAgfSxcbiAgc3RhcnRBbmltYXRpb25Mb29wOiBmdW5jdGlvbiBzdGFydEFuaW1hdGlvbkxvb3AoKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICBjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyA9IHRydWU7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F2ZSBjeWNsZXMgd2hlbiBubyBzdHlsZSB1c2VkXG5cbiAgICAvLyBOQiB0aGUgYW5pbWF0aW9uIGxvb3Agd2lsbCBleGVjIGluIGhlYWRsZXNzIGVudmlyb25tZW50cyBpZiBzdHlsZSBlbmFibGVkXG4gICAgLy8gYW5kIGV4cGxpY2l0IGN5LmRlc3Ryb3koKSBpcyBuZWNlc3NhcnkgdG8gc3RvcCB0aGUgbG9vcFxuXG4gICAgZnVuY3Rpb24gaGVhZGxlc3NTdGVwKCkge1xuICAgICAgaWYgKCFjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uU3RlcChub3cpIHtcbiAgICAgICAgc3RlcEFsbChub3csIGN5KTtcbiAgICAgICAgaGVhZGxlc3NTdGVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHJlbmRlcmVyID0gY3kucmVuZGVyZXIoKTtcbiAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuYmVmb3JlUmVuZGVyKSB7XG4gICAgICAvLyBsZXQgdGhlIHJlbmRlcmVyIHNjaGVkdWxlIGFuaW1hdGlvbnNcbiAgICAgIHJlbmRlcmVyLmJlZm9yZVJlbmRlcihmdW5jdGlvbiByZW5kZXJlckFuaW1hdGlvblN0ZXAod2lsbERyYXcsIG5vdykge1xuICAgICAgICBzdGVwQWxsKG5vdywgY3kpO1xuICAgICAgfSwgcmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbWFuYWdlIHRoZSBhbmltYXRpb24gbG9vcCBvdXJzZWx2ZXNcbiAgICAgIGhlYWRsZXNzU3RlcCgpOyAvLyBmaXJzdCBjYWxsXG4gICAgfVxuICB9XG59O1xuXG52YXIgZW1pdHRlck9wdGlvbnMgPSB7XG4gIHF1YWxpZmllckNvbXBhcmU6IGZ1bmN0aW9uIHF1YWxpZmllckNvbXBhcmUoc2VsZWN0b3IxLCBzZWxlY3RvcjIpIHtcbiAgICBpZiAoc2VsZWN0b3IxID09IG51bGwgfHwgc2VsZWN0b3IyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBzZWxlY3RvcjEgPT0gbnVsbCAmJiBzZWxlY3RvcjIgPT0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yMS5zYW1lVGV4dChzZWxlY3RvcjIpO1xuICAgIH1cbiAgfSxcbiAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoY3ksIGxpc3RlbmVyLCBldmVudE9iaikge1xuICAgIHZhciBzZWxlY3RvciA9IGxpc3RlbmVyLnF1YWxpZmllcjtcbiAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGN5ICE9PSBldmVudE9iai50YXJnZXQgJiYgZWxlbWVudChldmVudE9iai50YXJnZXQpICYmIHNlbGVjdG9yLm1hdGNoZXMoZXZlbnRPYmoudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhjeSwgZXZ0KSB7XG4gICAgZXZ0LmN5ID0gY3k7XG4gICAgZXZ0LnRhcmdldCA9IGN5O1xuICB9LFxuICBjYWxsYmFja0NvbnRleHQ6IGZ1bmN0aW9uIGNhbGxiYWNrQ29udGV4dChjeSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnF1YWxpZmllciAhPSBudWxsID8gZXZlbnRPYmoudGFyZ2V0IDogY3k7XG4gIH1cbn07XG52YXIgYXJnU2VsZWN0b3IgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgaWYgKHN0cmluZyhhcmcpKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvcihhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcmc7XG4gIH1cbn07XG52YXIgZWxlc2ZuID0ge1xuICBjcmVhdGVFbWl0dGVyOiBmdW5jdGlvbiBjcmVhdGVFbWl0dGVyKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5lbWl0dGVyKSB7XG4gICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMsIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZW1pdHRlcjogZnVuY3Rpb24gZW1pdHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyO1xuICB9LFxuICBvbjogZnVuY3Rpb24gb24oZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5vbihldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycygpIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5vbmUoZXZlbnRzLCBhcmdTZWxlY3RvcihzZWxlY3RvciksIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25jZTogZnVuY3Rpb24gb25jZShldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZW1pdHRlcigpLm9uZShldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbWl0QW5kTm90aWZ5OiBmdW5jdGlvbiBlbWl0QW5kTm90aWZ5KGV2ZW50LCBlbGVzKSB7XG4gICAgdGhpcy5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLm5vdGlmeShldmVudCwgZWxlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5kZWZpbmUuZXZlbnRBbGlhc2VzT24oZWxlc2ZuKTtcblxudmFyIGNvcmVmbiQ3ID0ge1xuICBwbmc6IGZ1bmN0aW9uIHBuZyhvcHRpb25zKSB7XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gcmVuZGVyZXIucG5nKG9wdGlvbnMpO1xuICB9LFxuICBqcGc6IGZ1bmN0aW9uIGpwZyhvcHRpb25zKSB7XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmJnID0gb3B0aW9ucy5iZyB8fCAnI2ZmZic7XG4gICAgcmV0dXJuIHJlbmRlcmVyLmpwZyhvcHRpb25zKTtcbiAgfVxufTtcbmNvcmVmbiQ3LmpwZWcgPSBjb3JlZm4kNy5qcGc7XG5cbnZhciBjb3JlZm4kNiA9IHtcbiAgbGF5b3V0OiBmdW5jdGlvbiBsYXlvdXQob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0xheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PSBudWxsKSB7XG4gICAgICBlcnJvcignQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB2YXIgTGF5b3V0ID0gY3kuZXh0ZW5zaW9uKCdsYXlvdXQnLCBuYW1lKTtcbiAgICBpZiAoTGF5b3V0ID09IG51bGwpIHtcbiAgICAgIGVycm9yKCdObyBzdWNoIGxheW91dCBgJyArIG5hbWUgKyAnYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlbGVzO1xuICAgIGlmIChzdHJpbmcob3B0aW9ucy5lbGVzKSkge1xuICAgICAgZWxlcyA9IGN5LiQob3B0aW9ucy5lbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlcyA9IG9wdGlvbnMuZWxlcyAhPSBudWxsID8gb3B0aW9ucy5lbGVzIDogY3kuJCgpO1xuICAgIH1cbiAgICB2YXIgbGF5b3V0ID0gbmV3IExheW91dChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGN5OiBjeSxcbiAgICAgIGVsZXM6IGVsZXNcbiAgICB9KSk7XG4gICAgcmV0dXJuIGxheW91dDtcbiAgfVxufTtcbmNvcmVmbiQ2LmNyZWF0ZUxheW91dCA9IGNvcmVmbiQ2Lm1ha2VMYXlvdXQgPSBjb3JlZm4kNi5sYXlvdXQ7XG5cbnZhciBjb3JlZm4kNSA9IHtcbiAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoZXZlbnROYW1lLCBldmVudEVsZXMpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmICh0aGlzLmJhdGNoaW5nKCkpIHtcbiAgICAgIF9wLmJhdGNoTm90aWZpY2F0aW9ucyA9IF9wLmJhdGNoTm90aWZpY2F0aW9ucyB8fCB7fTtcbiAgICAgIHZhciBlbGVzID0gX3AuYmF0Y2hOb3RpZmljYXRpb25zW2V2ZW50TmFtZV0gPSBfcC5iYXRjaE5vdGlmaWNhdGlvbnNbZXZlbnROYW1lXSB8fCB0aGlzLmNvbGxlY3Rpb24oKTtcbiAgICAgIGlmIChldmVudEVsZXMgIT0gbnVsbCkge1xuICAgICAgICBlbGVzLm1lcmdlKGV2ZW50RWxlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm47IC8vIG5vdGlmaWNhdGlvbnMgYXJlIGRpc2FibGVkIGR1cmluZyBiYXRjaGluZ1xuICAgIH1cblxuICAgIGlmICghX3Aubm90aWZpY2F0aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGV4aXQgb24gZGlzYWJsZWRcblxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXIoKTtcblxuICAgIC8vIGV4aXQgaWYgZGVzdHJveSgpIGNhbGxlZCBvbiBjb3JlIG9yIHJlbmRlcmVyIGluIGJldHdlZW4gZnJhbWVzICMxNDk5ICMxNTI4XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKCkgfHwgIXJlbmRlcmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlbmRlcmVyLm5vdGlmeShldmVudE5hbWUsIGV2ZW50RWxlcyk7XG4gIH0sXG4gIG5vdGlmaWNhdGlvbnM6IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbnMoYm9vbCkge1xuICAgIHZhciBwID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoYm9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcC5ub3RpZmljYXRpb25zRW5hYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcC5ub3RpZmljYXRpb25zRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBub05vdGlmaWNhdGlvbnM6IGZ1bmN0aW9uIG5vTm90aWZpY2F0aW9ucyhjYWxsYmFjaykge1xuICAgIHRoaXMubm90aWZpY2F0aW9ucyhmYWxzZSk7XG4gICAgY2FsbGJhY2soKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnModHJ1ZSk7XG4gIH0sXG4gIGJhdGNoaW5nOiBmdW5jdGlvbiBiYXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5iYXRjaENvdW50ID4gMDtcbiAgfSxcbiAgc3RhcnRCYXRjaDogZnVuY3Rpb24gc3RhcnRCYXRjaCgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChfcC5iYXRjaENvdW50ID09IG51bGwpIHtcbiAgICAgIF9wLmJhdGNoQ291bnQgPSAwO1xuICAgIH1cbiAgICBpZiAoX3AuYmF0Y2hDb3VudCA9PT0gMCkge1xuICAgICAgX3AuYmF0Y2hTdHlsZUVsZXMgPSB0aGlzLmNvbGxlY3Rpb24oKTtcbiAgICAgIF9wLmJhdGNoTm90aWZpY2F0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBfcC5iYXRjaENvdW50Kys7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGVuZEJhdGNoOiBmdW5jdGlvbiBlbmRCYXRjaCgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX3AuYmF0Y2hDb3VudC0tO1xuICAgIGlmIChfcC5iYXRjaENvdW50ID09PSAwKSB7XG4gICAgICAvLyB1cGRhdGUgc3R5bGUgZm9yIGRpcnR5IGVsZXNcbiAgICAgIF9wLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7XG4gICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyKCk7XG5cbiAgICAgIC8vIG5vdGlmeSB0aGUgcmVuZGVyZXIgb2YgcXVldWVkIGVsZXMgYW5kIGV2ZW50IHR5cGVzXG4gICAgICBPYmplY3Qua2V5cyhfcC5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICB2YXIgZWxlcyA9IF9wLmJhdGNoTm90aWZpY2F0aW9uc1tldmVudE5hbWVdO1xuICAgICAgICBpZiAoZWxlcy5lbXB0eSgpKSB7XG4gICAgICAgICAgcmVuZGVyZXIubm90aWZ5KGV2ZW50TmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVuZGVyZXIubm90aWZ5KGV2ZW50TmFtZSwgZWxlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYmF0Y2g6IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5zdGFydEJhdGNoKCk7XG4gICAgY2FsbGJhY2soKTtcbiAgICB0aGlzLmVuZEJhdGNoKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBiYXRjaERhdGE6IGZ1bmN0aW9uIGJhdGNoRGF0YShtYXApIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIHJldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpZHMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGlkID0gaWRzW2ldO1xuICAgICAgICB2YXIgZGF0YSA9IG1hcFtpZF07XG4gICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGVsZS5kYXRhKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgcmVuZGVyZXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICBoaWRlRWRnZXNPblZpZXdwb3J0OiBmYWxzZSxcbiAgdGV4dHVyZU9uVmlld3BvcnQ6IGZhbHNlLFxuICBtb3Rpb25CbHVyOiBmYWxzZSxcbiAgbW90aW9uQmx1ck9wYWNpdHk6IDAuMDUsXG4gIHBpeGVsUmF0aW86IHVuZGVmaW5lZCxcbiAgZGVza3RvcFRhcFRocmVzaG9sZDogNCxcbiAgdG91Y2hUYXBUaHJlc2hvbGQ6IDgsXG4gIHdoZWVsU2Vuc2l0aXZpdHk6IDEsXG4gIGRlYnVnOiBmYWxzZSxcbiAgc2hvd0ZwczogZmFsc2Vcbn0pO1xudmFyIGNvcmVmbiQ0ID0ge1xuICByZW5kZXJUbzogZnVuY3Rpb24gcmVuZGVyVG8oY29udGV4dCwgem9vbSwgcGFuLCBweFJhdGlvKSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wcml2YXRlLnJlbmRlcmVyO1xuICAgIHIucmVuZGVyVG8oY29udGV4dCwgem9vbSwgcGFuLCBweFJhdGlvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVuZGVyZXI6IGZ1bmN0aW9uIHJlbmRlcmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyO1xuICB9LFxuICBmb3JjZVJlbmRlcjogZnVuY3Rpb24gZm9yY2VSZW5kZXIoKSB7XG4gICAgdGhpcy5ub3RpZnkoJ2RyYXcnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoKSB7XG4gICAgdGhpcy5pbnZhbGlkYXRlU2l6ZSgpO1xuICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgncmVzaXplJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGluaXRSZW5kZXJlcjogZnVuY3Rpb24gaW5pdFJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIHZhciBSZW5kZXJlclByb3RvID0gY3kuZXh0ZW5zaW9uKCdyZW5kZXJlcicsIG9wdGlvbnMubmFtZSk7XG4gICAgaWYgKFJlbmRlcmVyUHJvdG8gPT0gbnVsbCkge1xuICAgICAgZXJyb3IoXCJDYW4gbm90IGluaXRpYWxpc2U6IE5vIHN1Y2ggcmVuZGVyZXIgYFwiLmNvbmNhdChvcHRpb25zLm5hbWUsIFwiYCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD9cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdhcm4oXCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS5cIik7XG4gICAgfVxuICAgIHZhciByT3B0cyA9IHJlbmRlcmVyRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgck9wdHMuY3kgPSBjeTtcbiAgICBjeS5fcHJpdmF0ZS5yZW5kZXJlciA9IG5ldyBSZW5kZXJlclByb3RvKHJPcHRzKTtcbiAgICB0aGlzLm5vdGlmeSgnaW5pdCcpO1xuICB9LFxuICBkZXN0cm95UmVuZGVyZXI6IGZ1bmN0aW9uIGRlc3Ryb3lSZW5kZXJlcigpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIGN5Lm5vdGlmeSgnZGVzdHJveScpOyAvLyBkZXN0cm95IHRoZSByZW5kZXJlclxuXG4gICAgdmFyIGRvbUVsZSA9IGN5LmNvbnRhaW5lcigpO1xuICAgIGlmIChkb21FbGUpIHtcbiAgICAgIGRvbUVsZS5fY3lyZWcgPSBudWxsO1xuICAgICAgd2hpbGUgKGRvbUVsZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZG9tRWxlLnJlbW92ZUNoaWxkKGRvbUVsZS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3kuX3ByaXZhdGUucmVuZGVyZXIgPSBudWxsOyAvLyB0byBiZSBleHRyYSBzYWZlLCByZW1vdmUgdGhlIHJlZlxuICAgIGN5Lm11dGFibGVFbGVtZW50cygpLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgX3AucnNjcmF0Y2ggPSB7fTtcbiAgICAgIF9wLnJzdHlsZSA9IHt9O1xuICAgICAgX3AuYW5pbWF0aW9uLmN1cnJlbnQgPSBbXTtcbiAgICAgIF9wLmFuaW1hdGlvbi5xdWV1ZSA9IFtdO1xuICAgIH0pO1xuICB9LFxuICBvblJlbmRlcjogZnVuY3Rpb24gb25SZW5kZXIoZm4pIHtcbiAgICByZXR1cm4gdGhpcy5vbigncmVuZGVyJywgZm4pO1xuICB9LFxuICBvZmZSZW5kZXI6IGZ1bmN0aW9uIG9mZlJlbmRlcihmbikge1xuICAgIHJldHVybiB0aGlzLm9mZigncmVuZGVyJywgZm4pO1xuICB9XG59O1xuY29yZWZuJDQuaW52YWxpZGF0ZURpbWVuc2lvbnMgPSBjb3JlZm4kNC5yZXNpemU7XG5cbnZhciBjb3JlZm4kMyA9IHtcbiAgLy8gZ2V0IGEgY29sbGVjdGlvblxuICAvLyAtIGVtcHR5IGNvbGxlY3Rpb24gb24gbm8gYXJnc1xuICAvLyAtIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgaW4gdGhlIGdyYXBoIG9uIHNlbGVjdG9yIGFyZ1xuICAvLyAtIGd1YXJhbnRlZSBhIHJldHVybmVkIGNvbGxlY3Rpb24gd2hlbiBlbGVtZW50cyBvciBjb2xsZWN0aW9uIHNwZWNpZmllZFxuICBjb2xsZWN0aW9uOiBmdW5jdGlvbiBjb2xsZWN0aW9uKGVsZXMsIG9wdHMpIHtcbiAgICBpZiAoc3RyaW5nKGVsZXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy4kKGVsZXMpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudE9yQ29sbGVjdGlvbihlbGVzKSkge1xuICAgICAgcmV0dXJuIGVsZXMuY29sbGVjdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoYXJyYXkoZWxlcykpIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcywgZWxlcywgb3B0cy51bmlxdWUsIG9wdHMucmVtb3ZlZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzKTtcbiAgfSxcbiAgbm9kZXM6IGZ1bmN0aW9uIG5vZGVzKHNlbGVjdG9yKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy4kKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCk7XG4gICAgfSk7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9LFxuICBlZGdlczogZnVuY3Rpb24gZWRnZXMoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWRnZXMgPSB0aGlzLiQoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0VkZ2UoKTtcbiAgICB9KTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBlZGdlcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZXM7XG4gIH0sXG4gIC8vIHNlYXJjaCB0aGUgZ3JhcGggbGlrZSBqUXVlcnlcbiAgJDogZnVuY3Rpb24gJChzZWxlY3Rvcikge1xuICAgIHZhciBlbGVzID0gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cztcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBlbGVzLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVzLnNwYXduU2VsZigpO1xuICAgIH1cbiAgfSxcbiAgbXV0YWJsZUVsZW1lbnRzOiBmdW5jdGlvbiBtdXRhYmxlRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHM7XG4gIH1cbn07XG5cbi8vIGFsaWFzZXNcbmNvcmVmbiQzLmVsZW1lbnRzID0gY29yZWZuJDMuZmlsdGVyID0gY29yZWZuJDMuJDtcblxudmFyIHN0eWZuJDggPSB7fTtcblxuLy8ga2V5cyBmb3Igc3R5bGUgYmxvY2tzLCBlLmcuIHR0ZmZ0dFxudmFyIFRSVUUgPSAndCc7XG52YXIgRkFMU0UgPSAnZic7XG5cbi8vIChwb3RlbnRpYWxseSBleHBlbnNpdmUgY2FsY3VsYXRpb24pXG4vLyBhcHBseSB0aGUgc3R5bGUgdG8gdGhlIGVsZW1lbnQgYmFzZWQgb25cbi8vIC0gaXRzIGJ5cGFzc1xuLy8gLSB3aGF0IHNlbGVjdG9ycyBtYXRjaCBpdFxuc3R5Zm4kOC5hcHBseSA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIF9wID0gc2VsZi5fcHJpdmF0ZTtcbiAgdmFyIGN5ID0gX3AuY3k7XG4gIHZhciB1cGRhdGVkRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgZm9yICh2YXIgaWUgPSAwOyBpZSA8IGVsZXMubGVuZ3RoOyBpZSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbaWVdO1xuICAgIHZhciBjeHRNZXRhID0gc2VsZi5nZXRDb250ZXh0TWV0YShlbGUpO1xuICAgIGlmIChjeHRNZXRhLmVtcHR5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGN4dFN0eWxlID0gc2VsZi5nZXRDb250ZXh0U3R5bGUoY3h0TWV0YSk7XG4gICAgdmFyIGFwcCA9IHNlbGYuYXBwbHlDb250ZXh0U3R5bGUoY3h0TWV0YSwgY3h0U3R5bGUsIGVsZSk7XG4gICAgaWYgKGVsZS5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlKSB7XG4gICAgICBzZWxmLnVwZGF0ZVRyYW5zaXRpb25zKGVsZSwgYXBwLmRpZmZQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZS5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGhpbnRzRGlmZiA9IHNlbGYudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIGlmIChoaW50c0RpZmYpIHtcbiAgICAgIHVwZGF0ZWRFbGVzLnB1c2goZWxlKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVsZW1lbnRzXG5cbiAgcmV0dXJuIHVwZGF0ZWRFbGVzO1xufTtcbnN0eWZuJDguZ2V0UHJvcGVydGllc0RpZmYgPSBmdW5jdGlvbiAob2xkQ3h0S2V5LCBuZXdDeHRLZXkpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY2FjaGUgPSBzZWxmLl9wcml2YXRlLnByb3BEaWZmcyA9IHNlbGYuX3ByaXZhdGUucHJvcERpZmZzIHx8IHt9O1xuICB2YXIgZHVhbEN4dEtleSA9IG9sZEN4dEtleSArICctJyArIG5ld0N4dEtleTtcbiAgdmFyIGNhY2hlZFZhbCA9IGNhY2hlW2R1YWxDeHRLZXldO1xuICBpZiAoY2FjaGVkVmFsKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZhbDtcbiAgfVxuICB2YXIgZGlmZlByb3BzID0gW107XG4gIHZhciBhZGRlZFByb3AgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN4dCA9IHNlbGZbaV07XG4gICAgdmFyIG9sZEhhc0N4dCA9IG9sZEN4dEtleVtpXSA9PT0gVFJVRTtcbiAgICB2YXIgbmV3SGFzQ3h0ID0gbmV3Q3h0S2V5W2ldID09PSBUUlVFO1xuICAgIHZhciBjeHRIYXNEaWZmZWQgPSBvbGRIYXNDeHQgIT09IG5ld0hhc0N4dDtcbiAgICB2YXIgY3h0SGFzTWFwcGVkUHJvcHMgPSBjeHQubWFwcGVkUHJvcGVydGllcy5sZW5ndGggPiAwO1xuICAgIGlmIChjeHRIYXNEaWZmZWQgfHwgbmV3SGFzQ3h0ICYmIGN4dEhhc01hcHBlZFByb3BzKSB7XG4gICAgICB2YXIgcHJvcHMgPSB2b2lkIDA7XG4gICAgICBpZiAoY3h0SGFzRGlmZmVkICYmIGN4dEhhc01hcHBlZFByb3BzKSB7XG4gICAgICAgIHByb3BzID0gY3h0LnByb3BlcnRpZXM7IC8vIHN1ZmZpY2VzIGIvYyBtYXBwZWRQcm9wZXJ0aWVzIGlzIGEgc3Vic2V0IG9mIHByb3BlcnRpZXNcbiAgICAgIH0gZWxzZSBpZiAoY3h0SGFzRGlmZmVkKSB7XG4gICAgICAgIHByb3BzID0gY3h0LnByb3BlcnRpZXM7IC8vIG5lZWQgdG8gY2hlY2sgdGhlbSBhbGxcbiAgICAgIH0gZWxzZSBpZiAoY3h0SGFzTWFwcGVkUHJvcHMpIHtcbiAgICAgICAgcHJvcHMgPSBjeHQubWFwcGVkUHJvcGVydGllczsgLy8gb25seSBuZWVkIHRvIGNoZWNrIG1hcHBlZFxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICAgIHZhciBuYW1lID0gcHJvcC5uYW1lO1xuXG4gICAgICAgIC8vIGlmIGEgbGF0ZXIgY29udGV4dCBvdmVycmlkZXMgdGhpcyBwcm9wZXJ0eSwgdGhlbiB0aGUgZmFjdCB0aGF0IHRoaXMgY29udGV4dCBoYXMgc3dpdGNoZWQvZGlmZmVkIGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgIC8vIChzZW1pIGV4cGVuc2l2ZSBjaGVjayBzaW5jZSBpdCBtYWtlcyB0aGlzIGZ1bmN0aW9uIE8obl4yKSBvbiBjb250ZXh0IGxlbmd0aCwgYnV0IHdvcnRoIGl0IHNpbmNlIG92ZXJhbGwgcmVzdWx0XG4gICAgICAgIC8vIGlzIGNhY2hlZClcbiAgICAgICAgdmFyIGxhdGVyQ3h0T3ZlcnJpZGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGsgPSBpICsgMTsgayA8IHNlbGYubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB2YXIgbGF0ZXJDeHQgPSBzZWxmW2tdO1xuICAgICAgICAgIHZhciBoYXNMYXRlckN4dCA9IG5ld0N4dEtleVtrXSA9PT0gVFJVRTtcbiAgICAgICAgICBpZiAoIWhhc0xhdGVyQ3h0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGNhbid0IG92ZXJyaWRlIHVubGVzcyB0aGUgY29udGV4dCBpcyBhY3RpdmVcblxuICAgICAgICAgIGxhdGVyQ3h0T3ZlcnJpZGVzID0gbGF0ZXJDeHQucHJvcGVydGllc1twcm9wLm5hbWVdICE9IG51bGw7XG4gICAgICAgICAgaWYgKGxhdGVyQ3h0T3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIGV4aXQgZWFybHkgYXMgbG9uZyBhcyBvbmUgbGF0ZXIgY29udGV4dCBvdmVycmlkZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWRkZWRQcm9wW25hbWVdICYmICFsYXRlckN4dE92ZXJyaWRlcykge1xuICAgICAgICAgIGFkZGVkUHJvcFtuYW1lXSA9IHRydWU7XG4gICAgICAgICAgZGlmZlByb3BzLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yIHByb3BzXG4gICAgfSAvLyBpZlxuICB9IC8vIGZvciBjb250ZXh0c1xuXG4gIGNhY2hlW2R1YWxDeHRLZXldID0gZGlmZlByb3BzO1xuICByZXR1cm4gZGlmZlByb3BzO1xufTtcbnN0eWZuJDguZ2V0Q29udGV4dE1ldGEgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGN4dEtleSA9ICcnO1xuICB2YXIgZGlmZlByb3BzO1xuICB2YXIgcHJldktleSA9IGVsZS5fcHJpdmF0ZS5zdHlsZUN4dEtleSB8fCAnJztcblxuICAvLyBnZXQgdGhlIGN4dCBrZXlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbnRleHQgPSBzZWxmW2ldO1xuICAgIHZhciBjb250ZXh0U2VsZWN0b3JNYXRjaGVzID0gY29udGV4dC5zZWxlY3RvciAmJiBjb250ZXh0LnNlbGVjdG9yLm1hdGNoZXMoZWxlKTsgLy8gTkI6IGNvbnRleHQuc2VsZWN0b3IgbWF5IGJlIG51bGwgZm9yICdjb3JlJ1xuXG4gICAgaWYgKGNvbnRleHRTZWxlY3Rvck1hdGNoZXMpIHtcbiAgICAgIGN4dEtleSArPSBUUlVFO1xuICAgIH0gZWxzZSB7XG4gICAgICBjeHRLZXkgKz0gRkFMU0U7XG4gICAgfVxuICB9IC8vIGZvciBjb250ZXh0XG5cbiAgZGlmZlByb3BzID0gc2VsZi5nZXRQcm9wZXJ0aWVzRGlmZihwcmV2S2V5LCBjeHRLZXkpO1xuICBlbGUuX3ByaXZhdGUuc3R5bGVDeHRLZXkgPSBjeHRLZXk7XG4gIHJldHVybiB7XG4gICAga2V5OiBjeHRLZXksXG4gICAgZGlmZlByb3BOYW1lczogZGlmZlByb3BzLFxuICAgIGVtcHR5OiBkaWZmUHJvcHMubGVuZ3RoID09PSAwXG4gIH07XG59O1xuXG4vLyBnZXRzIGEgY29tcHV0ZWQgZWxlIHN0eWxlIG9iamVjdCBiYXNlZCBvbiBtYXRjaGVkIGNvbnRleHRzXG5zdHlmbiQ4LmdldENvbnRleHRTdHlsZSA9IGZ1bmN0aW9uIChjeHRNZXRhKSB7XG4gIHZhciBjeHRLZXkgPSBjeHRNZXRhLmtleTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgY3h0U3R5bGVzID0gdGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzID0gdGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzIHx8IHt9O1xuXG4gIC8vIGlmIGFscmVhZHkgY29tcHV0ZWQgc3R5bGUsIHJldHVybmVkIGNhY2hlZCBjb3B5XG4gIGlmIChjeHRTdHlsZXNbY3h0S2V5XSkge1xuICAgIHJldHVybiBjeHRTdHlsZXNbY3h0S2V5XTtcbiAgfVxuICB2YXIgc3R5bGUgPSB7XG4gICAgX3ByaXZhdGU6IHtcbiAgICAgIGtleTogY3h0S2V5XG4gICAgfVxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3h0ID0gc2VsZltpXTtcbiAgICB2YXIgaGFzQ3h0ID0gY3h0S2V5W2ldID09PSBUUlVFO1xuICAgIGlmICghaGFzQ3h0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjeHQucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHByb3AgPSBjeHQucHJvcGVydGllc1tqXTtcbiAgICAgIHN0eWxlW3Byb3AubmFtZV0gPSBwcm9wO1xuICAgIH1cbiAgfVxuICBjeHRTdHlsZXNbY3h0S2V5XSA9IHN0eWxlO1xuICByZXR1cm4gc3R5bGU7XG59O1xuc3R5Zm4kOC5hcHBseUNvbnRleHRTdHlsZSA9IGZ1bmN0aW9uIChjeHRNZXRhLCBjeHRTdHlsZSwgZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGRpZmZQcm9wcyA9IGN4dE1ldGEuZGlmZlByb3BOYW1lcztcbiAgdmFyIHJldERpZmZQcm9wcyA9IHt9O1xuICB2YXIgdHlwZXMgPSBzZWxmLnR5cGVzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmZQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkaWZmUHJvcE5hbWUgPSBkaWZmUHJvcHNbaV07XG4gICAgdmFyIGN4dFByb3AgPSBjeHRTdHlsZVtkaWZmUHJvcE5hbWVdO1xuICAgIHZhciBlbGVQcm9wID0gZWxlLnBzdHlsZShkaWZmUHJvcE5hbWUpO1xuICAgIGlmICghY3h0UHJvcCkge1xuICAgICAgLy8gbm8gY29udGV4dCBwcm9wIG1lYW5zIGRlbGV0ZVxuICAgICAgaWYgKCFlbGVQcm9wKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBubyBleGlzdGluZyBwcm9wIG1lYW5zIG5vdGhpbmcgbmVlZHMgdG8gYmUgcmVtb3ZlZFxuICAgICAgICAvLyBuYiBhZmZlY3RzIGluaXRpYWwgYXBwbGljYXRpb24gb24gbWFwcGVkIHZhbHVlcyBsaWtlIGNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzXG4gICAgICB9IGVsc2UgaWYgKGVsZVByb3AuYnlwYXNzKSB7XG4gICAgICAgIGN4dFByb3AgPSB7XG4gICAgICAgICAgbmFtZTogZGlmZlByb3BOYW1lLFxuICAgICAgICAgIGRlbGV0ZUJ5cGFzc2VkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjeHRQcm9wID0ge1xuICAgICAgICAgIG5hbWU6IGRpZmZQcm9wTmFtZSxcbiAgICAgICAgICBcImRlbGV0ZVwiOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2F2ZSBjeWNsZXMgd2hlbiB0aGUgY29udGV4dCBwcm9wIGRvZXNuJ3QgbmVlZCB0byBiZSBhcHBsaWVkXG4gICAgaWYgKGVsZVByb3AgPT09IGN4dFByb3ApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNhdmUgY3ljbGVzIHdoZW4gYSBtYXBwZWQgY29udGV4dCBwcm9wIGRvZXNuJ3QgbmVlZCB0byBiZSBhcHBsaWVkXG4gICAgaWYgKGN4dFByb3AubWFwcGVkID09PSB0eXBlcy5mbiAvLyBjb250ZXh0IHByb3AgaXMgZnVuY3Rpb24gbWFwcGVyXG4gICAgJiYgZWxlUHJvcCAhPSBudWxsIC8vIHNvbWUgcHJvcHMgY2FuIGJlIG51bGwgZXZlbiBieSBkZWZhdWx0IChlLmcuIGEgcHJvcCB0aGF0IG92ZXJyaWRlcyBhbm90aGVyIG9uZSlcbiAgICAmJiBlbGVQcm9wLm1hcHBpbmcgIT0gbnVsbCAvLyBlbGUgcHJvcCBpcyBhIGNvbmNyZXRlIHZhbHVlIGZyb20gZnJvbSBhIG1hcHBlclxuICAgICYmIGVsZVByb3AubWFwcGluZy52YWx1ZSA9PT0gY3h0UHJvcC52YWx1ZSAvLyB0aGUgY3VycmVudCBwcm9wIG9uIHRoZSBlbGUgaXMgYSBmbGF0IHByb3AgdmFsdWUgZm9yIHRoZSBmdW5jdGlvbiBtYXBwZXJcbiAgICApIHtcbiAgICAgIC8vIE5CIGRvbid0IHdyaXRlIHRvIGN4dFByb3AsIGFzIGl0J3Mgc2hhcmVkIGFtb25nIGVsZXMgKHN0b3JlZCBpbiBzdHlsZXNoZWV0KVxuICAgICAgdmFyIG1hcHBpbmcgPSBlbGVQcm9wLm1hcHBpbmc7IC8vIGNhbiB3cml0ZSB0byBtYXBwaW5nLCBhcyBpdCdzIGEgcGVyLWVsZSBjb3B5XG4gICAgICB2YXIgZm5WYWx1ZSA9IG1hcHBpbmcuZm5WYWx1ZSA9IGN4dFByb3AudmFsdWUoZWxlKTsgLy8gdGVtcG9yYXJpbHkgY2FjaGUgdGhlIHZhbHVlIGluIGNhc2Ugb2YgYSBtaXNzXG5cbiAgICAgIGlmIChmblZhbHVlID09PSBtYXBwaW5nLnByZXZGblZhbHVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmV0RGlmZlByb3AgPSByZXREaWZmUHJvcHNbZGlmZlByb3BOYW1lXSA9IHtcbiAgICAgIHByZXY6IGVsZVByb3BcbiAgICB9O1xuICAgIHNlbGYuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIGN4dFByb3ApO1xuICAgIHJldERpZmZQcm9wLm5leHQgPSBlbGUucHN0eWxlKGRpZmZQcm9wTmFtZSk7XG4gICAgaWYgKHJldERpZmZQcm9wLm5leHQgJiYgcmV0RGlmZlByb3AubmV4dC5ieXBhc3MpIHtcbiAgICAgIHJldERpZmZQcm9wLm5leHQgPSByZXREaWZmUHJvcC5uZXh0LmJ5cGFzc2VkO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGRpZmZQcm9wczogcmV0RGlmZlByb3BzXG4gIH07XG59O1xuc3R5Zm4kOC51cGRhdGVTdHlsZUhpbnRzID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3BOYW1lcyA9IHNlbGYucHJvcGVydHlHcm91cE5hbWVzO1xuICB2YXIgcHJvcEdyS2V5cyA9IHNlbGYucHJvcGVydHlHcm91cEtleXM7XG4gIHZhciBwcm9wSGFzaCA9IGZ1bmN0aW9uIHByb3BIYXNoKGVsZSwgcHJvcE5hbWVzLCBzZWVkS2V5KSB7XG4gICAgcmV0dXJuIHNlbGYuZ2V0UHJvcGVydGllc0hhc2goZWxlLCBwcm9wTmFtZXMsIHNlZWRLZXkpO1xuICB9O1xuICB2YXIgb2xkU3R5bGVLZXkgPSBfcC5zdHlsZUtleTtcbiAgaWYgKGVsZS5yZW1vdmVkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGlzTm9kZSA9IF9wLmdyb3VwID09PSAnbm9kZXMnO1xuXG4gIC8vIGdldCB0aGUgc3R5bGUga2V5IGhhc2hlcyBwZXIgcHJvcCBncm91cFxuICAvLyBidXQgbGF6aWx5IC0tIG9ubHkgdXNlIG5vbi1kZWZhdWx0IHByb3AgdmFsdWVzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGhhc2hlc1xuICAvL1xuXG4gIHZhciBvdmVycmlkZGVuU3R5bGVzID0gZWxlLl9wcml2YXRlLnN0eWxlO1xuICBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZGVuU3R5bGVzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wR3JLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyS2V5ID0gcHJvcEdyS2V5c1tpXTtcbiAgICBfcC5zdHlsZUtleXNbZ3JLZXldID0gW0RFRkFVTFRfSEFTSF9TRUVELCBERUZBVUxUX0hBU0hfU0VFRF9BTFRdO1xuICB9XG4gIHZhciB1cGRhdGVHcktleTEgPSBmdW5jdGlvbiB1cGRhdGVHcktleTEodmFsLCBncktleSkge1xuICAgIHJldHVybiBfcC5zdHlsZUtleXNbZ3JLZXldWzBdID0gaGFzaEludCh2YWwsIF9wLnN0eWxlS2V5c1tncktleV1bMF0pO1xuICB9O1xuICB2YXIgdXBkYXRlR3JLZXkyID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkyKHZhbCwgZ3JLZXkpIHtcbiAgICByZXR1cm4gX3Auc3R5bGVLZXlzW2dyS2V5XVsxXSA9IGhhc2hJbnRBbHQodmFsLCBfcC5zdHlsZUtleXNbZ3JLZXldWzFdKTtcbiAgfTtcbiAgdmFyIHVwZGF0ZUdyS2V5ID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkodmFsLCBncktleSkge1xuICAgIHVwZGF0ZUdyS2V5MSh2YWwsIGdyS2V5KTtcbiAgICB1cGRhdGVHcktleTIodmFsLCBncktleSk7XG4gIH07XG4gIHZhciB1cGRhdGVHcktleVdTdHIgPSBmdW5jdGlvbiB1cGRhdGVHcktleVdTdHIoc3RyVmFsLCBncktleSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RyVmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgY2ggPSBzdHJWYWwuY2hhckNvZGVBdChqKTtcbiAgICAgIHVwZGF0ZUdyS2V5MShjaCwgZ3JLZXkpO1xuICAgICAgdXBkYXRlR3JLZXkyKGNoLCBncktleSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIC0gaGFzaGluZyB3b3JrcyBvbiAzMiBiaXQgaW50cyBiL2Mgd2UgdXNlIGJpdHdpc2Ugb3BzXG4gIC8vIC0gc21hbGwgbnVtYmVycyBnZXQgY3V0IG9mZiAoZS5nLiAwLjEyMyBpcyBzZWVuIGFzIDAgYnkgdGhlIGhhc2hpbmcgZnVuY3Rpb24pXG4gIC8vIC0gcmFpc2UgdXAgc21hbGwgbnVtYmVycyBzbyBtb3JlIHNpZ25pZmljYW50IGRpZ2l0cyBhcmUgc2VlbiBieSBoYXNoaW5nXG4gIC8vIC0gbWFrZSBzbWFsbCBudW1iZXJzIGxhcmdlciB0aGFuIGEgbm9ybWFsIHZhbHVlIHRvIGF2b2lkIGNvbGxpc2lvbnNcbiAgLy8gLSB3b3JrcyBpbiBwcmFjdGljZSBhbmQgaXQncyByZWxhdGl2ZWx5IGNoZWFwXG4gIHZhciBOID0gMjAwMDAwMDAwMDtcbiAgdmFyIGNsZWFuTnVtID0gZnVuY3Rpb24gY2xlYW5OdW0odmFsKSB7XG4gICAgcmV0dXJuIC0xMjggPCB2YWwgJiYgdmFsIDwgMTI4ICYmIE1hdGguZmxvb3IodmFsKSAhPT0gdmFsID8gTiAtICh2YWwgKiAxMDI0IHwgMCkgOiB2YWw7XG4gIH07XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBwcm9wTmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIG5hbWUgPSBwcm9wTmFtZXNbX2ldO1xuICAgIHZhciBwYXJzZWRQcm9wID0gb3ZlcnJpZGRlblN0eWxlc1tuYW1lXTtcbiAgICBpZiAocGFyc2VkUHJvcCA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIHByb3BJbmZvID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgIHZhciB0eXBlID0gcHJvcEluZm8udHlwZTtcbiAgICB2YXIgX2dyS2V5ID0gcHJvcEluZm8uZ3JvdXBLZXk7XG4gICAgdmFyIG5vcm1hbGl6ZWROdW1iZXJWYWwgPSB2b2lkIDA7XG4gICAgaWYgKHByb3BJbmZvLmhhc2hPdmVycmlkZSAhPSBudWxsKSB7XG4gICAgICBub3JtYWxpemVkTnVtYmVyVmFsID0gcHJvcEluZm8uaGFzaE92ZXJyaWRlKGVsZSwgcGFyc2VkUHJvcCk7XG4gICAgfSBlbHNlIGlmIChwYXJzZWRQcm9wLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgbm9ybWFsaXplZE51bWJlclZhbCA9IHBhcnNlZFByb3AucGZWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBtaWdodCBub3QgYmUgYSBudW1iZXIgaWYgaXQgYWxsb3dzIGVudW1zXG4gICAgdmFyIG51bWJlclZhbCA9IHByb3BJbmZvLmVudW1zID09IG51bGwgPyBwYXJzZWRQcm9wLnZhbHVlIDogbnVsbDtcbiAgICB2YXIgaGF2ZU5vcm1OdW0gPSBub3JtYWxpemVkTnVtYmVyVmFsICE9IG51bGw7XG4gICAgdmFyIGhhdmVVbml0ZWROdW0gPSBudW1iZXJWYWwgIT0gbnVsbDtcbiAgICB2YXIgaGF2ZU51bSA9IGhhdmVOb3JtTnVtIHx8IGhhdmVVbml0ZWROdW07XG4gICAgdmFyIHVuaXRzID0gcGFyc2VkUHJvcC51bml0cztcblxuICAgIC8vIG51bWJlcnMgYXJlIGNoZWFwZXIgdG8gaGFzaCB0aGFuIHN0cmluZ3NcbiAgICAvLyAxIGhhc2ggb3AgdnMgbiBoYXNoIG9wcyAoZm9yIGxlbmd0aCBuIHN0cmluZylcbiAgICBpZiAodHlwZS5udW1iZXIgJiYgaGF2ZU51bSAmJiAhdHlwZS5tdWx0aXBsZSkge1xuICAgICAgdmFyIHYgPSBoYXZlTm9ybU51bSA/IG5vcm1hbGl6ZWROdW1iZXJWYWwgOiBudW1iZXJWYWw7XG4gICAgICB1cGRhdGVHcktleShjbGVhbk51bSh2KSwgX2dyS2V5KTtcbiAgICAgIGlmICghaGF2ZU5vcm1OdW0gJiYgdW5pdHMgIT0gbnVsbCkge1xuICAgICAgICB1cGRhdGVHcktleVdTdHIodW5pdHMsIF9ncktleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZUdyS2V5V1N0cihwYXJzZWRQcm9wLnN0clZhbHVlLCBfZ3JLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG92ZXJhbGwgc3R5bGUga2V5XG4gIC8vXG5cbiAgdmFyIGhhc2ggPSBbREVGQVVMVF9IQVNIX1NFRUQsIERFRkFVTFRfSEFTSF9TRUVEX0FMVF07XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHByb3BHcktleXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBfZ3JLZXkyID0gcHJvcEdyS2V5c1tfaTJdO1xuICAgIHZhciBnckhhc2ggPSBfcC5zdHlsZUtleXNbX2dyS2V5Ml07XG4gICAgaGFzaFswXSA9IGhhc2hJbnQoZ3JIYXNoWzBdLCBoYXNoWzBdKTtcbiAgICBoYXNoWzFdID0gaGFzaEludEFsdChnckhhc2hbMV0sIGhhc2hbMV0pO1xuICB9XG4gIF9wLnN0eWxlS2V5ID0gY29tYmluZUhhc2hlcyhoYXNoWzBdLCBoYXNoWzFdKTtcblxuICAvLyBsYWJlbCBkaW1zXG4gIC8vXG5cbiAgdmFyIHNrID0gX3Auc3R5bGVLZXlzO1xuICBfcC5sYWJlbERpbXNLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkoc2subGFiZWxEaW1lbnNpb25zKTtcbiAgdmFyIGxhYmVsS2V5cyA9IHByb3BIYXNoKGVsZSwgWydsYWJlbCddLCBzay5sYWJlbERpbWVuc2lvbnMpO1xuICBfcC5sYWJlbEtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShsYWJlbEtleXMpO1xuICBfcC5sYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIGxhYmVsS2V5cykpO1xuICBpZiAoIWlzTm9kZSkge1xuICAgIHZhciBzb3VyY2VMYWJlbEtleXMgPSBwcm9wSGFzaChlbGUsIFsnc291cmNlLWxhYmVsJ10sIHNrLmxhYmVsRGltZW5zaW9ucyk7XG4gICAgX3Auc291cmNlTGFiZWxLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkoc291cmNlTGFiZWxLZXlzKTtcbiAgICBfcC5zb3VyY2VMYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIHNvdXJjZUxhYmVsS2V5cykpO1xuICAgIHZhciB0YXJnZXRMYWJlbEtleXMgPSBwcm9wSGFzaChlbGUsIFsndGFyZ2V0LWxhYmVsJ10sIHNrLmxhYmVsRGltZW5zaW9ucyk7XG4gICAgX3AudGFyZ2V0TGFiZWxLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkodGFyZ2V0TGFiZWxLZXlzKTtcbiAgICBfcC50YXJnZXRMYWJlbFN0eWxlS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KGhhc2hBcnJheXMoc2suY29tbW9uTGFiZWwsIHRhcmdldExhYmVsS2V5cykpO1xuICB9XG5cbiAgLy8gbm9kZVxuICAvL1xuXG4gIGlmIChpc05vZGUpIHtcbiAgICB2YXIgX3Akc3R5bGVLZXlzID0gX3Auc3R5bGVLZXlzLFxuICAgICAgbm9kZUJvZHkgPSBfcCRzdHlsZUtleXMubm9kZUJvZHksXG4gICAgICBub2RlQm9yZGVyID0gX3Akc3R5bGVLZXlzLm5vZGVCb3JkZXIsXG4gICAgICBub2RlT3V0bGluZSA9IF9wJHN0eWxlS2V5cy5ub2RlT3V0bGluZSxcbiAgICAgIGJhY2tncm91bmRJbWFnZSA9IF9wJHN0eWxlS2V5cy5iYWNrZ3JvdW5kSW1hZ2UsXG4gICAgICBjb21wb3VuZCA9IF9wJHN0eWxlS2V5cy5jb21wb3VuZCxcbiAgICAgIHBpZSA9IF9wJHN0eWxlS2V5cy5waWU7XG4gICAgdmFyIG5vZGVLZXlzID0gW25vZGVCb2R5LCBub2RlQm9yZGVyLCBub2RlT3V0bGluZSwgYmFja2dyb3VuZEltYWdlLCBjb21wb3VuZCwgcGllXS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiBrICE9IG51bGw7XG4gICAgfSkucmVkdWNlKGhhc2hBcnJheXMsIFtERUZBVUxUX0hBU0hfU0VFRCwgREVGQVVMVF9IQVNIX1NFRURfQUxUXSk7XG4gICAgX3Aubm9kZUtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShub2RlS2V5cyk7XG4gICAgX3AuaGFzUGllID0gcGllICE9IG51bGwgJiYgcGllWzBdICE9PSBERUZBVUxUX0hBU0hfU0VFRCAmJiBwaWVbMV0gIT09IERFRkFVTFRfSEFTSF9TRUVEX0FMVDtcbiAgfVxuICByZXR1cm4gb2xkU3R5bGVLZXkgIT09IF9wLnN0eWxlS2V5O1xufTtcbnN0eWZuJDguY2xlYXJTdHlsZUhpbnRzID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIF9wLnN0eWxlQ3h0S2V5ID0gJyc7XG4gIF9wLnN0eWxlS2V5cyA9IHt9O1xuICBfcC5zdHlsZUtleSA9IG51bGw7XG4gIF9wLmxhYmVsS2V5ID0gbnVsbDtcbiAgX3AubGFiZWxTdHlsZUtleSA9IG51bGw7XG4gIF9wLnNvdXJjZUxhYmVsS2V5ID0gbnVsbDtcbiAgX3Auc291cmNlTGFiZWxTdHlsZUtleSA9IG51bGw7XG4gIF9wLnRhcmdldExhYmVsS2V5ID0gbnVsbDtcbiAgX3AudGFyZ2V0TGFiZWxTdHlsZUtleSA9IG51bGw7XG4gIF9wLm5vZGVLZXkgPSBudWxsO1xuICBfcC5oYXNQaWUgPSBudWxsO1xufTtcblxuLy8gYXBwbHkgYSBwcm9wZXJ0eSB0byB0aGUgc3R5bGUgKGZvciBpbnRlcm5hbCB1c2UpXG4vLyByZXR1cm5zIHdoZXRoZXIgYXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWxcbi8vXG4vLyBub3csIHRoaXMgZnVuY3Rpb24gZmxhdHRlbnMgdGhlIHByb3BlcnR5LCBhbmQgaGVyZSdzIGhvdzpcbi8vXG4vLyBmb3IgcGFyc2VkUHJvcDp7IGJ5cGFzczogdHJ1ZSwgZGVsZXRlQnlwYXNzOiB0cnVlIH1cbi8vIG5vIHByb3BlcnR5IGlzIGdlbmVyYXRlZCwgaW5zdGVhZCB0aGUgYnlwYXNzIHByb3BlcnR5IGluIHRoZVxuLy8gZWxlbWVudCdzIHN0eWxlIGlzIHJlcGxhY2VkIGJ5IHdoYXQncyBwb2ludGVkIHRvIGJ5IHRoZSBgYnlwYXNzZWRgXG4vLyBmaWVsZCBpbiB0aGUgYnlwYXNzIHByb3BlcnR5IChpLmUuIHJlc3RvcmluZyB0aGUgcHJvcGVydHkgdGhlXG4vLyBieXBhc3Mgd2FzIG92ZXJyaWRpbmcpXG4vL1xuLy8gZm9yIHBhcnNlZFByb3A6eyBtYXBwZWQ6IHRydXRoeSB9XG4vLyB0aGUgZ2VuZXJhdGVkIGZsYXR0ZW5lZFByb3A6eyBtYXBwaW5nOiBwcm9wIH1cbi8vXG4vLyBmb3IgcGFyc2VkUHJvcDp7IGJ5cGFzczogdHJ1ZSB9XG4vLyB0aGUgZ2VuZXJhdGVkIGZsYXR0ZW5lZFByb3A6eyBieXBhc3NlZDogcGFyc2VkUHJvcCB9XG5zdHlmbiQ4LmFwcGx5UGFyc2VkUHJvcGVydHkgPSBmdW5jdGlvbiAoZWxlLCBwYXJzZWRQcm9wKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3AgPSBwYXJzZWRQcm9wO1xuICB2YXIgc3R5bGUgPSBlbGUuX3ByaXZhdGUuc3R5bGU7XG4gIHZhciBmbGF0UHJvcDtcbiAgdmFyIHR5cGVzID0gc2VsZi50eXBlcztcbiAgdmFyIHR5cGUgPSBzZWxmLnByb3BlcnRpZXNbcHJvcC5uYW1lXS50eXBlO1xuICB2YXIgcHJvcElzQnlwYXNzID0gcHJvcC5ieXBhc3M7XG4gIHZhciBvcmlnUHJvcCA9IHN0eWxlW3Byb3AubmFtZV07XG4gIHZhciBvcmlnUHJvcElzQnlwYXNzID0gb3JpZ1Byb3AgJiYgb3JpZ1Byb3AuYnlwYXNzO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBmbGF0UHJvcE1hcHBpbmcgPSAnbWFwcGluZyc7XG4gIHZhciBnZXRWYWwgPSBmdW5jdGlvbiBnZXRWYWwocCkge1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwLnBmVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwLnZhbHVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiBjaGVja1RyaWdnZXJzKCkge1xuICAgIHZhciBmcm9tVmFsID0gZ2V0VmFsKG9yaWdQcm9wKTtcbiAgICB2YXIgdG9WYWwgPSBnZXRWYWwocHJvcCk7XG4gICAgc2VsZi5jaGVja1RyaWdnZXJzKGVsZSwgcHJvcC5uYW1lLCBmcm9tVmFsLCB0b1ZhbCk7XG4gIH07XG5cbiAgLy8gZWRnZSBzYW5pdHkgY2hlY2tzIHRvIHByZXZlbnQgdGhlIGNsaWVudCBmcm9tIG1ha2luZyBzZXJpb3VzIG1pc3Rha2VzXG4gIGlmIChwYXJzZWRQcm9wLm5hbWUgPT09ICdjdXJ2ZS1zdHlsZScgJiYgZWxlLmlzRWRnZSgpICYmIChcbiAgLy8gbG9vcHMgbXVzdCBiZSBidW5kbGVkIGJlemllcnNcbiAgcGFyc2VkUHJvcC52YWx1ZSAhPT0gJ2JlemllcicgJiYgZWxlLmlzTG9vcCgpIHx8XG4gIC8vIGVkZ2VzIGNvbm5lY3RlZCB0byBjb21wb3VuZCBub2RlcyBjYW4gbm90IGJlIGhheXN0YWNrc1xuICBwYXJzZWRQcm9wLnZhbHVlID09PSAnaGF5c3RhY2snICYmIChlbGUuc291cmNlKCkuaXNQYXJlbnQoKSB8fCBlbGUudGFyZ2V0KCkuaXNQYXJlbnQoKSkpKSB7XG4gICAgcHJvcCA9IHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKHBhcnNlZFByb3AubmFtZSwgJ2JlemllcicsIHByb3BJc0J5cGFzcyk7XG4gIH1cbiAgaWYgKHByb3BbXCJkZWxldGVcIl0pIHtcbiAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5IGFuZCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb24gZmFsc2V5IHZhbHVlXG4gICAgc3R5bGVbcHJvcC5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHByb3AuZGVsZXRlQnlwYXNzZWQpIHtcbiAgICAvLyBkZWxldGUgdGhlIHByb3BlcnR5IHRoYXQgdGhlXG4gICAgaWYgKCFvcmlnUHJvcCkge1xuICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGNhbid0IGRlbGV0ZSBpZiBubyBwcm9wXG4gICAgfSBlbHNlIGlmIChvcmlnUHJvcC5ieXBhc3MpIHtcbiAgICAgIC8vIGRlbGV0ZSBieXBhc3NlZFxuICAgICAgb3JpZ1Byb3AuYnlwYXNzZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyB3ZSdyZSB1bnN1Y2Nlc3NmdWwgZGVsZXRpbmcgdGhlIGJ5cGFzc2VkXG4gICAgfVxuICB9XG5cbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBkZWxldGUgdGhlIGN1cnJlbnQgYnlwYXNzXG4gIGlmIChwcm9wLmRlbGV0ZUJ5cGFzcykge1xuICAgIC8vIHRoZW4gdGhpcyBwcm9wZXJ0eSBpcyBqdXN0IGhlcmUgdG8gaW5kaWNhdGUgd2UgbmVlZCB0byBkZWxldGVcbiAgICBpZiAoIW9yaWdQcm9wKSB7XG4gICAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gcHJvcGVydHkgaXMgYWxyZWFkeSBub3QgZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAob3JpZ1Byb3AuYnlwYXNzKSB7XG4gICAgICAvLyB0aGVuIHJlcGxhY2UgdGhlIGJ5cGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gYmVjYXVzZSB0aGUgYnlwYXNzZWQgcHJvcGVydHkgd2FzIGFscmVhZHkgYXBwbGllZCAoYW5kIHRoZXJlZm9yZSBwYXJzZWQpLCB3ZSBjYW4ganVzdCByZXBsYWNlIGl0IChubyByZWFwcGx5aW5nIG5lY2Vzc2FyeSlcbiAgICAgIHN0eWxlW3Byb3AubmFtZV0gPSBvcmlnUHJvcC5ieXBhc3NlZDtcbiAgICAgIGNoZWNrVHJpZ2dlcnMoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIHdlJ3JlIHVuc3VjY2Vzc2Z1bCBkZWxldGluZyB0aGUgYnlwYXNzXG4gICAgfVxuICB9XG5cbiAgdmFyIHByaW50TWFwcGluZ0VyciA9IGZ1bmN0aW9uIHByaW50TWFwcGluZ0VycigpIHtcbiAgICB3YXJuKCdEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgJyArIGVsZS5pZCgpICsgJ2AgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAnICsgcHJvcC5uYW1lICsgJ2Agd2l0aCBkYXRhIGZpZWxkIGAnICsgcHJvcC5maWVsZCArICdgKTsgdHJ5IGEgYFsnICsgcHJvcC5maWVsZCArICddYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAnICsgcHJvcC5maWVsZCArICdgIGRlZmluZWQnKTtcbiAgfTtcblxuICAvLyBwdXQgdGhlIHByb3BlcnR5IGluIHRoZSBzdHlsZSBvYmplY3RzXG4gIHN3aXRjaCAocHJvcC5tYXBwZWQpIHtcbiAgICAvLyBmbGF0dGVuIHRoZSBwcm9wZXJ0eSBpZiBtYXBwZWRcbiAgICBjYXNlIHR5cGVzLm1hcERhdGE6XG4gICAgICB7XG4gICAgICAgIC8vIGZsYXR0ZW4gdGhlIGZpZWxkIChlLmcuIGRhdGEuZm9vLmJhcilcbiAgICAgICAgdmFyIGZpZWxkcyA9IHByb3AuZmllbGQuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIGZpZWxkVmFsID0gX3AuZGF0YTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoICYmIGZpZWxkVmFsOyBpKyspIHtcbiAgICAgICAgICB2YXIgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgZmllbGRWYWwgPSBmaWVsZFZhbFtmaWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkVmFsID09IG51bGwpIHtcbiAgICAgICAgICBwcmludE1hcHBpbmdFcnIoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBlcmNlbnQ7XG4gICAgICAgIGlmICghbnVtYmVyJDEoZmllbGRWYWwpKSB7XG4gICAgICAgICAgLy8gdGhlbiBkb24ndCBhcHBseSBhbmQgZmFsbCBiYWNrIG9uIHRoZSBleGlzdGluZyBzdHlsZVxuICAgICAgICAgIHdhcm4oJ0RvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCcgKyBwcm9wLmZpZWxkICsgJzogJyArIGZpZWxkVmFsICsgJ2AgZm9yIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBub24tbnVtZXJpYyknKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGZpZWxkV2lkdGggPSBwcm9wLmZpZWxkTWF4IC0gcHJvcC5maWVsZE1pbjtcbiAgICAgICAgICBpZiAoZmllbGRXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc2FmZXR5IGNoZWNrIC0tIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYXMgbm8gcHJvcHMgb2YgemVybyByYW5nZSBzaG91bGQgYmUgcGFzc2VkIGhlcmVcbiAgICAgICAgICAgIHBlcmNlbnQgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZXJjZW50ID0gKGZpZWxkVmFsIC0gcHJvcC5maWVsZE1pbikgLyBmaWVsZFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBib3VuZCBwZXJjZW50IHZhbHVlXG4gICAgICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgICAgIHBlcmNlbnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPiAxKSB7XG4gICAgICAgICAgcGVyY2VudCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUuY29sb3IpIHtcbiAgICAgICAgICB2YXIgcjEgPSBwcm9wLnZhbHVlTWluWzBdO1xuICAgICAgICAgIHZhciByMiA9IHByb3AudmFsdWVNYXhbMF07XG4gICAgICAgICAgdmFyIGcxID0gcHJvcC52YWx1ZU1pblsxXTtcbiAgICAgICAgICB2YXIgZzIgPSBwcm9wLnZhbHVlTWF4WzFdO1xuICAgICAgICAgIHZhciBiMSA9IHByb3AudmFsdWVNaW5bMl07XG4gICAgICAgICAgdmFyIGIyID0gcHJvcC52YWx1ZU1heFsyXTtcbiAgICAgICAgICB2YXIgYTEgPSBwcm9wLnZhbHVlTWluWzNdID09IG51bGwgPyAxIDogcHJvcC52YWx1ZU1pblszXTtcbiAgICAgICAgICB2YXIgYTIgPSBwcm9wLnZhbHVlTWF4WzNdID09IG51bGwgPyAxIDogcHJvcC52YWx1ZU1heFszXTtcbiAgICAgICAgICB2YXIgY2xyID0gW01hdGgucm91bmQocjEgKyAocjIgLSByMSkgKiBwZXJjZW50KSwgTWF0aC5yb3VuZChnMSArIChnMiAtIGcxKSAqIHBlcmNlbnQpLCBNYXRoLnJvdW5kKGIxICsgKGIyIC0gYjEpICogcGVyY2VudCksIE1hdGgucm91bmQoYTEgKyAoYTIgLSBhMSkgKiBwZXJjZW50KV07XG4gICAgICAgICAgZmxhdFByb3AgPSB7XG4gICAgICAgICAgICAvLyBjb2xvdXJzIGFyZSBzaW1wbGUsIHNvIGp1c3QgY3JlYXRlIHRoZSBmbGF0IHByb3BlcnR5IGluc3RlYWQgb2YgZXhwZW5zaXZlIHN0cmluZyBwYXJzaW5nXG4gICAgICAgICAgICBieXBhc3M6IHByb3AuYnlwYXNzLFxuICAgICAgICAgICAgLy8gd2UncmUgYSBieXBhc3MgaWYgdGhlIG1hcHBpbmcgcHJvcGVydHkgaXMgYSBieXBhc3NcbiAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBjbHIsXG4gICAgICAgICAgICBzdHJWYWx1ZTogJ3JnYignICsgY2xyWzBdICsgJywgJyArIGNsclsxXSArICcsICcgKyBjbHJbMl0gKyAnKSdcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgdmFyIGNhbGNWYWx1ZSA9IHByb3AudmFsdWVNaW4gKyAocHJvcC52YWx1ZU1heCAtIHByb3AudmFsdWVNaW4pICogcGVyY2VudDtcbiAgICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBjYWxjVmFsdWUsIHByb3AuYnlwYXNzLCBmbGF0UHJvcE1hcHBpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2FuIG9ubHkgbWFwIHRvIGNvbG91cnMgYW5kIG51bWJlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmbGF0dGVuIHRoZSBwcm9wZXJ0eSwgdGhlbiBkb24ndCBhcHBseSB0aGUgcHJvcGVydHkgYW5kIGZhbGwgYmFjayBvbiB0aGUgZXhpc3Rpbmcgc3R5bGVcbiAgICAgICAgICBwcmludE1hcHBpbmdFcnIoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmxhdFByb3AubWFwcGluZyA9IHByb3A7IC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1hcHBpbmdcbiAgICAgICAgcHJvcCA9IGZsYXRQcm9wOyAvLyB0aGUgZmxhdHRlbmVkIChtYXBwZWQpIHByb3BlcnR5IGlzIHRoZSBvbmUgd2Ugd2FudFxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZGlyZWN0IG1hcHBpbmdcbiAgICBjYXNlIHR5cGVzLmRhdGE6XG4gICAgICB7XG4gICAgICAgIC8vIGZsYXR0ZW4gdGhlIGZpZWxkIChlLmcuIGRhdGEuZm9vLmJhcilcbiAgICAgICAgdmFyIF9maWVsZHMgPSBwcm9wLmZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBfZmllbGRWYWwgPSBfcC5kYXRhO1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBfZmllbGRzLmxlbmd0aCAmJiBfZmllbGRWYWw7IF9pMysrKSB7XG4gICAgICAgICAgdmFyIF9maWVsZCA9IF9maWVsZHNbX2kzXTtcbiAgICAgICAgICBfZmllbGRWYWwgPSBfZmllbGRWYWxbX2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2ZpZWxkVmFsICE9IG51bGwpIHtcbiAgICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBfZmllbGRWYWwsIHByb3AuYnlwYXNzLCBmbGF0UHJvcE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmbGF0dGVuIHRoZSBwcm9wZXJ0eSwgdGhlbiBkb24ndCBhcHBseSBhbmQgZmFsbCBiYWNrIG9uIHRoZSBleGlzdGluZyBzdHlsZVxuICAgICAgICAgIHByaW50TWFwcGluZ0VycigpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcC5tYXBwaW5nID0gcHJvcDsgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGluZ1xuICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSB0eXBlcy5mbjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZuID0gcHJvcC52YWx1ZTtcbiAgICAgICAgdmFyIGZuUmV0VmFsID0gcHJvcC5mblZhbHVlICE9IG51bGwgPyBwcm9wLmZuVmFsdWUgOiBmbihlbGUpOyAvLyBjaGVjayBmb3IgY2FjaGVkIHZhbHVlIGJlZm9yZSBjYWxsaW5nIGZ1bmN0aW9uXG5cbiAgICAgICAgcHJvcC5wcmV2Rm5WYWx1ZSA9IGZuUmV0VmFsO1xuICAgICAgICBpZiAoZm5SZXRWYWwgPT0gbnVsbCkge1xuICAgICAgICAgIHdhcm4oJ0N1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBudWxsKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBmblJldFZhbCwgcHJvcC5ieXBhc3MsIGZsYXRQcm9wTWFwcGluZyk7XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICB3YXJuKCdDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBpbnZhbGlkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHR5cGUgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBpbnZhbGlkKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcC5tYXBwaW5nID0gY29weShwcm9wKTsgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGluZ1xuICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBicmVhaztcbiAgICAvLyBqdXN0IHNldCB0aGUgcHJvcGVydHlcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gbm90IGEgdmFsaWQgbWFwcGluZ1xuICB9XG5cbiAgLy8gaWYgdGhlIHByb3BlcnR5IGlzIGEgYnlwYXNzIHByb3BlcnR5LCB0aGVuIGxpbmsgdGhlIHJlc3VsdGFudCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgb25lXG4gIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICBpZiAob3JpZ1Byb3BJc0J5cGFzcykge1xuICAgICAgLy8gdGhlbiB0aGlzIGJ5cGFzcyBvdmVycmlkZXMgdGhlIGV4aXN0aW5nIG9uZVxuICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wLmJ5cGFzc2VkOyAvLyBzdGVhbCBieXBhc3NlZCBwcm9wIGZyb20gb2xkIGJ5cGFzc1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGxpbmsgdGhlIG9yaWcgcHJvcCB0byB0aGUgbmV3IGJ5cGFzc1xuICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wO1xuICAgIH1cbiAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDsgLy8gYW5kIHNldFxuICB9IGVsc2Uge1xuICAgIC8vIHByb3AgaXMgbm90IGJ5cGFzc1xuICAgIGlmIChvcmlnUHJvcElzQnlwYXNzKSB7XG4gICAgICAvLyB0aGVuIGtlZXAgdGhlIG9yaWcgcHJvcCAoc2luY2UgaXQncyBhIGJ5cGFzcykgYW5kIGxpbmsgdG8gdGhlIG5ldyBwcm9wXG4gICAgICBvcmlnUHJvcC5ieXBhc3NlZCA9IHByb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZW4ganVzdCByZXBsYWNlIHRoZSBvbGQgcHJvcCB3aXRoIHRoZSBuZXcgb25lXG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDtcbiAgICB9XG4gIH1cbiAgY2hlY2tUcmlnZ2VycygpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5zdHlmbiQ4LmNsZWFuRWxlbWVudHMgPSBmdW5jdGlvbiAoZWxlcywga2VlcEJ5cGFzc2VzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHRoaXMuY2xlYXJTdHlsZUhpbnRzKGVsZSk7XG4gICAgZWxlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBpZiAoIWtlZXBCeXBhc3Nlcykge1xuICAgICAgZWxlLl9wcml2YXRlLnN0eWxlID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdHlsZSA9IGVsZS5fcHJpdmF0ZS5zdHlsZTtcbiAgICAgIHZhciBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BOYW1lcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTmFtZXNbal07XG4gICAgICAgIHZhciBlbGVQcm9wID0gc3R5bGVbcHJvcE5hbWVdO1xuICAgICAgICBpZiAoZWxlUHJvcCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGVsZVByb3AuYnlwYXNzKSB7XG4gICAgICAgICAgICBlbGVQcm9wLmJ5cGFzc2VkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVbcHJvcE5hbWVdID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8vIHVwZGF0ZXMgdGhlIHZpc3VhbCBzdHlsZSBmb3IgYWxsIGVsZW1lbnRzICh1c2VmdWwgZm9yIG1hbnVhbCBzdHlsZSBtb2RpZmljYXRpb24gYWZ0ZXIgaW5pdClcbnN0eWZuJDgudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICBlbGVzLnVwZGF0ZVN0eWxlKCk7XG59O1xuXG4vLyBkaWZmUHJvcHMgOiB7IG5hbWUgPT4geyBwcmV2LCBuZXh0IH0gfVxuc3R5Zm4kOC51cGRhdGVUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uIChlbGUsIGRpZmZQcm9wcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHByb3BzID0gZWxlLnBzdHlsZSgndHJhbnNpdGlvbi1wcm9wZXJ0eScpLnZhbHVlO1xuICB2YXIgZHVyYXRpb24gPSBlbGUucHN0eWxlKCd0cmFuc2l0aW9uLWR1cmF0aW9uJykucGZWYWx1ZTtcbiAgdmFyIGRlbGF5ID0gZWxlLnBzdHlsZSgndHJhbnNpdGlvbi1kZWxheScpLnBmVmFsdWU7XG4gIGlmIChwcm9wcy5sZW5ndGggPiAwICYmIGR1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdHlsZSA9IHt9O1xuXG4gICAgLy8gYnVpbGQgdXAgdGhlIHN0eWxlIHRvIGFuaW1hdGUgdG93YXJkc1xuICAgIHZhciBhbnlQcmV2ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIHZhciBzdHlQcm9wID0gZWxlLnBzdHlsZShwcm9wKTtcbiAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wXTtcbiAgICAgIGlmICghZGlmZlByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJldlByb3AgPSBkaWZmUHJvcC5wcmV2O1xuICAgICAgdmFyIGZyb21Qcm9wID0gcHJldlByb3A7XG4gICAgICB2YXIgdG9Qcm9wID0gZGlmZlByb3AubmV4dCAhPSBudWxsID8gZGlmZlByb3AubmV4dCA6IHN0eVByb3A7XG4gICAgICB2YXIgZGlmZiA9IGZhbHNlO1xuICAgICAgdmFyIGluaXRWYWwgPSB2b2lkIDA7XG4gICAgICB2YXIgaW5pdER0ID0gMC4wMDAwMDE7IC8vIGRlbHRhIHRpbWUgJSB2YWx1ZSBmb3IgaW5pdFZhbCAoYWxsb3dzIGFuaW1hdGluZyBvdXQgb2YgaW5pdCB6ZXJvIG9wYWNpdHkpXG5cbiAgICAgIGlmICghZnJvbVByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNpZGVyIHB4IHZhbHVlc1xuICAgICAgaWYgKG51bWJlciQxKGZyb21Qcm9wLnBmVmFsdWUpICYmIG51bWJlciQxKHRvUHJvcC5wZlZhbHVlKSkge1xuICAgICAgICBkaWZmID0gdG9Qcm9wLnBmVmFsdWUgLSBmcm9tUHJvcC5wZlZhbHVlOyAvLyBub256ZXJvIGlzIHRydXRoeVxuICAgICAgICBpbml0VmFsID0gZnJvbVByb3AucGZWYWx1ZSArIGluaXREdCAqIGRpZmY7XG5cbiAgICAgICAgLy8gY29uc2lkZXIgbnVtZXJpY2FsIHZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChudW1iZXIkMShmcm9tUHJvcC52YWx1ZSkgJiYgbnVtYmVyJDEodG9Qcm9wLnZhbHVlKSkge1xuICAgICAgICBkaWZmID0gdG9Qcm9wLnZhbHVlIC0gZnJvbVByb3AudmFsdWU7IC8vIG5vbnplcm8gaXMgdHJ1dGh5XG4gICAgICAgIGluaXRWYWwgPSBmcm9tUHJvcC52YWx1ZSArIGluaXREdCAqIGRpZmY7XG5cbiAgICAgICAgLy8gY29uc2lkZXIgY29sb3VyIHZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChhcnJheShmcm9tUHJvcC52YWx1ZSkgJiYgYXJyYXkodG9Qcm9wLnZhbHVlKSkge1xuICAgICAgICBkaWZmID0gZnJvbVByb3AudmFsdWVbMF0gIT09IHRvUHJvcC52YWx1ZVswXSB8fCBmcm9tUHJvcC52YWx1ZVsxXSAhPT0gdG9Qcm9wLnZhbHVlWzFdIHx8IGZyb21Qcm9wLnZhbHVlWzJdICE9PSB0b1Byb3AudmFsdWVbMl07XG4gICAgICAgIGluaXRWYWwgPSBmcm9tUHJvcC5zdHJWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhlIHByZXZpb3VzIHZhbHVlIGlzIGdvb2QgZm9yIGFuIGFuaW1hdGlvbiBvbmx5IGlmIGl0J3MgZGlmZmVyZW50XG4gICAgICBpZiAoZGlmZikge1xuICAgICAgICBzdHlsZVtwcm9wXSA9IHRvUHJvcC5zdHJWYWx1ZTsgLy8gdG8gdmFsXG4gICAgICAgIHRoaXMuYXBwbHlCeXBhc3MoZWxlLCBwcm9wLCBpbml0VmFsKTsgLy8gZnJvbSB2YWxcbiAgICAgICAgYW55UHJldiA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBlbmQgaWYgcHJvcHMgYWxsb3cgYW5pXG5cbiAgICAvLyBjYW4ndCB0cmFuc2l0aW9uIGlmIHRoZXJlJ3Mgbm90aGluZyBwcmV2aW91cyB0byB0cmFuc2l0aW9uIGZyb21cbiAgICBpZiAoIWFueVByZXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX3AudHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgICBlbGUuZGVsYXlBbmltYXRpb24oZGVsYXkpLnBsYXkoKS5wcm9taXNlKCkudGhlbihyZXNvbHZlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBlbGUuYW5pbWF0aW9uKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgIGVhc2luZzogZWxlLnBzdHlsZSgndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nKS52YWx1ZSxcbiAgICAgICAgcXVldWU6IGZhbHNlXG4gICAgICB9KS5wbGF5KCkucHJvbWlzZSgpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWYoICFpc0J5cGFzcyApe1xuICAgICAgc2VsZi5yZW1vdmVCeXBhc3NlcyhlbGUsIHByb3BzKTtcbiAgICAgIGVsZS5lbWl0QW5kTm90aWZ5KCdzdHlsZScpO1xuICAgICAgLy8gfVxuXG4gICAgICBfcC50cmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoX3AudHJhbnNpdGlvbmluZykge1xuICAgIHRoaXMucmVtb3ZlQnlwYXNzZXMoZWxlLCBwcm9wcyk7XG4gICAgZWxlLmVtaXRBbmROb3RpZnkoJ3N0eWxlJyk7XG4gICAgX3AudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICB9XG59O1xuc3R5Zm4kOC5jaGVja1RyaWdnZXIgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUsIGdldFRyaWdnZXIsIG9uVHJpZ2dlcikge1xuICB2YXIgcHJvcCA9IHRoaXMucHJvcGVydGllc1tuYW1lXTtcbiAgdmFyIHRyaWdnZXJDaGVjayA9IGdldFRyaWdnZXIocHJvcCk7XG4gIGlmICh0cmlnZ2VyQ2hlY2sgIT0gbnVsbCAmJiB0cmlnZ2VyQ2hlY2soZnJvbVZhbHVlLCB0b1ZhbHVlKSkge1xuICAgIG9uVHJpZ2dlcihwcm9wKTtcbiAgfVxufTtcbnN0eWZuJDguY2hlY2taT3JkZXJUcmlnZ2VyID0gZnVuY3Rpb24gKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHRoaXMuY2hlY2tUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlLCBmdW5jdGlvbiAocHJvcCkge1xuICAgIHJldHVybiBwcm9wLnRyaWdnZXJzWk9yZGVyO1xuICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgX3RoaXMuX3ByaXZhdGUuY3kubm90aWZ5KCd6b3JkZXInLCBlbGUpO1xuICB9KTtcbn07XG5zdHlmbiQ4LmNoZWNrQm91bmRzVHJpZ2dlciA9IGZ1bmN0aW9uIChlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSkge1xuICB0aGlzLmNoZWNrVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gcHJvcC50cmlnZ2Vyc0JvdW5kcztcbiAgfSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICBlbGUuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgZWxlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuXG4gICAgLy8gaWYgdGhlIHByb3AgY2hhbmdlIG1ha2VzIHRoZSBiYiBvZiBwbGwgYmV6aWVyIGVkZ2VzIGludmFsaWQsXG4gICAgLy8gdGhlbiBkaXJ0eSB0aGUgcGxsIGVkZ2UgYmIgY2FjaGUgYXMgd2VsbFxuICAgIGlmIChcbiAgICAvLyBvbmx5IGZvciBiZXppZXJzIC0tIHNvIHBlcmZvcm1hbmNlIG9mIG90aGVyIGVkZ2VzIGlzbid0IGFmZmVjdGVkXG4gICAgcHJvcC50cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzICYmIG5hbWUgPT09ICdjdXJ2ZS1zdHlsZScgJiYgKGZyb21WYWx1ZSA9PT0gJ2JlemllcicgfHwgdG9WYWx1ZSA9PT0gJ2JlemllcicpKSB7XG4gICAgICBlbGUucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKHBsbEVkZ2UpIHtcbiAgICAgICAgaWYgKHBsbEVkZ2UuaXNCdW5kbGVkQmV6aWVyKCkpIHtcbiAgICAgICAgICBwbGxFZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByb3AudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzICYmIG5hbWUgPT09ICdkaXNwbGF5JyAmJiAoZnJvbVZhbHVlID09PSAnbm9uZScgfHwgdG9WYWx1ZSA9PT0gJ25vbmUnKSkge1xuICAgICAgZWxlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICBlZGdlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5zdHlmbiQ4LmNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUpIHtcbiAgZWxlLmRpcnR5U3R5bGVDYWNoZSgpO1xuICB0aGlzLmNoZWNrWk9yZGVyVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSk7XG4gIHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbn07XG5cbnZhciBzdHlmbiQ3ID0ge307XG5cbi8vIGJ5cGFzc2VzIGFyZSBhcHBsaWVkIHRvIGFuIGV4aXN0aW5nIHN0eWxlIG9uIGFuIGVsZW1lbnQsIGFuZCBqdXN0IHRhY2tlZCBvbiB0ZW1wb3JhcmlseVxuLy8gcmV0dXJucyB0cnVlIGlmZiBhcHBsaWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBmb3IgYXQgbGVhc3QgMSBzcGVjaWZpZWQgcHJvcGVydHlcbnN0eWZuJDcuYXBwbHlCeXBhc3MgPSBmdW5jdGlvbiAoZWxlcywgbmFtZSwgdmFsdWUsIHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3BzID0gW107XG4gIHZhciBpc0J5cGFzcyA9IHRydWU7XG5cbiAgLy8gcHV0IGFsbCB0aGUgcHJvcGVydGllcyAoY2FuIHNwZWNpZnkgb25lIG9yIG1hbnkpIGluIGFuIGFycmF5IGFmdGVyIHBhcnNpbmcgdGhlbVxuICBpZiAobmFtZSA9PT0gJyonIHx8IG5hbWUgPT09ICcqKicpIHtcbiAgICAvLyBhcHBseSB0byBhbGwgcHJvcGVydHkgbmFtZXNcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IHNlbGYucHJvcGVydGllc1tpXTtcbiAgICAgICAgdmFyIF9uYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICB2YXIgcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UoX25hbWUsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKHBhcnNlZFByb3ApIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKHBhcnNlZFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgIC8vIHRoZW4gcGFyc2UgdGhlIHNpbmdsZSBwcm9wZXJ0eVxuICAgIHZhciBfcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgdmFsdWUsIHRydWUpO1xuICAgIGlmIChfcGFyc2VkUHJvcCkge1xuICAgICAgcHJvcHMucHVzaChfcGFyc2VkUHJvcCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgLy8gdGhlbiBwYXJzZSBlYWNoIHByb3BlcnR5XG4gICAgdmFyIHNwZWNpZmllZFByb3BzID0gbmFtZTtcbiAgICB1cGRhdGVUcmFuc2l0aW9ucyA9IHZhbHVlO1xuICAgIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHNwZWNpZmllZFByb3BzKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25hbWUyID0gbmFtZXNbX2ldO1xuICAgICAgdmFyIF92YWx1ZSA9IHNwZWNpZmllZFByb3BzW19uYW1lMl07XG4gICAgICBpZiAoX3ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdHJ5IGNhbWVsIGNhc2UgbmFtZSB0b29cbiAgICAgICAgX3ZhbHVlID0gc3BlY2lmaWVkUHJvcHNbZGFzaDJjYW1lbChfbmFtZTIpXTtcbiAgICAgIH1cbiAgICAgIGlmIChfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgX3BhcnNlZFByb3AyID0gdGhpcy5wYXJzZShfbmFtZTIsIF92YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChfcGFyc2VkUHJvcDIpIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKF9wYXJzZWRQcm9wMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCB3ZWxsIGRlZmluZWQgcHJvcGVydGllc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHdlJ3ZlIGZhaWxlZCBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgcHJvcGVydGllc1xuICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gbm93LCBhcHBseSB0aGUgYnlwYXNzIHByb3BlcnRpZXMgb24gdGhlIGVsZW1lbnRzXG4gIHZhciByZXQgPSBmYWxzZTsgLy8gcmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIHN1Y2Nlc2Z1bCBieXBhc3MgYXBwbGllZFxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBlbGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAvLyBmb3IgZWFjaCBlbGVcbiAgICB2YXIgZWxlID0gZWxlc1tfaTJdO1xuICAgIHZhciBkaWZmUHJvcHMgPSB7fTtcbiAgICB2YXIgZGlmZlByb3AgPSB2b2lkIDA7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgLy8gZm9yIGVhY2ggcHJvcFxuICAgICAgdmFyIF9wcm9wID0gcHJvcHNbal07XG4gICAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShfcHJvcC5uYW1lKTtcbiAgICAgICAgZGlmZlByb3AgPSBkaWZmUHJvcHNbX3Byb3AubmFtZV0gPSB7XG4gICAgICAgICAgcHJldjogcHJldlByb3BcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldCA9IHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIGNvcHkoX3Byb3ApKSB8fCByZXQ7XG4gICAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUoX3Byb3AubmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBmb3IgcHJvcHNcblxuICAgIGlmIChyZXQpIHtcbiAgICAgIHRoaXMudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlVHJhbnNpdGlvbnMoZWxlLCBkaWZmUHJvcHMsIGlzQnlwYXNzKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVsZXNcblxuICByZXR1cm4gcmV0O1xufTtcblxuLy8gb25seSB1c2VmdWwgaW4gc3BlY2lmaWMgY2FzZXMgbGlrZSBhbmltYXRpb25cbnN0eWZuJDcub3ZlcnJpZGVCeXBhc3MgPSBmdW5jdGlvbiAoZWxlcywgbmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IGNhbWVsMmRhc2gobmFtZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBwcm9wID0gZWxlLl9wcml2YXRlLnN0eWxlW25hbWVdO1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdLnR5cGU7XG4gICAgdmFyIGlzQ29sb3IgPSB0eXBlLmNvbG9yO1xuICAgIHZhciBpc011bHRpID0gdHlwZS5tdXRpcGxlO1xuICAgIHZhciBvbGRWYWx1ZSA9ICFwcm9wID8gbnVsbCA6IHByb3AucGZWYWx1ZSAhPSBudWxsID8gcHJvcC5wZlZhbHVlIDogcHJvcC52YWx1ZTtcbiAgICBpZiAoIXByb3AgfHwgIXByb3AuYnlwYXNzKSB7XG4gICAgICAvLyBuZWVkIGEgYnlwYXNzIGlmIG9uZSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLmFwcGx5QnlwYXNzKGVsZSwgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAocHJvcC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcHJvcC5wZlZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNDb2xvcikge1xuICAgICAgICBwcm9wLnN0clZhbHVlID0gJ3JnYignICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgfSBlbHNlIGlmIChpc011bHRpKSB7XG4gICAgICAgIHByb3Auc3RyVmFsdWUgPSB2YWx1ZS5qb2luKCcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wLnN0clZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnMoZWxlLCBuYW1lLCBvbGRWYWx1ZSwgdmFsdWUpO1xuICB9XG59O1xuc3R5Zm4kNy5yZW1vdmVBbGxCeXBhc3NlcyA9IGZ1bmN0aW9uIChlbGVzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICByZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3NlcyhlbGVzLCB0aGlzLnByb3BlcnR5TmFtZXMsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbn07XG5zdHlmbiQ3LnJlbW92ZUJ5cGFzc2VzID0gZnVuY3Rpb24gKGVsZXMsIHByb3BzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICB2YXIgaXNCeXBhc3MgPSB0cnVlO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tqXTtcbiAgICB2YXIgZGlmZlByb3BzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBwcm9wc1tpXTtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShwcm9wLm5hbWUpO1xuICAgICAgaWYgKCFwcmV2UHJvcCB8fCAhcHJldlByb3AuYnlwYXNzKSB7XG4gICAgICAgIC8vIGlmIGEgYnlwYXNzIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBwcm9wLCBub3RoaW5nIG5lZWRzIHRvIGJlIHJlbW92ZWRcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSAnJzsgLy8gZW1wdHkgPT4gcmVtb3ZlIGJ5cGFzc1xuICAgICAgdmFyIHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKG5hbWUsIHZhbHVlLCB0cnVlKTtcbiAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wLm5hbWVdID0ge1xuICAgICAgICBwcmV2OiBwcmV2UHJvcFxuICAgICAgfTtcbiAgICAgIHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIHBhcnNlZFByb3ApO1xuICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUocHJvcC5uYW1lKTtcbiAgICB9IC8vIGZvciBwcm9wc1xuXG4gICAgdGhpcy51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG4gICAgaWYgKHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGVsZSwgZGlmZlByb3BzLCBpc0J5cGFzcyk7XG4gICAgfVxuICB9IC8vIGZvciBlbGVzXG59O1xuXG52YXIgc3R5Zm4kNiA9IHt9O1xuXG4vLyBnZXRzIHdoYXQgYW4gZW0gc2l6ZSBjb3JyZXNwb25kcyB0byBpbiBwaXhlbHMgcmVsYXRpdmUgdG8gYSBkb20gZWxlbWVudFxuc3R5Zm4kNi5nZXRFbVNpemVJblBpeGVscyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHB4ID0gdGhpcy5jb250YWluZXJDc3MoJ2ZvbnQtc2l6ZScpO1xuICBpZiAocHggIT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHB4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTsgLy8gZm9yIGhlYWRsZXNzXG4gIH1cbn07XG5cbi8vIGdldHMgY3NzIHByb3BlcnR5IGZyb20gdGhlIGNvcmUgY29udGFpbmVyXG5zdHlmbiQ2LmNvbnRhaW5lckNzcyA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZG9tRWxlbWVudCA9IGN5LmNvbnRhaW5lcigpO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gY3kud2luZG93KCk7XG4gIGlmIChjb250YWluZXJXaW5kb3cgJiYgZG9tRWxlbWVudCAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgIHJldHVybiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb21FbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BOYW1lKTtcbiAgfVxufTtcblxudmFyIHN0eWZuJDUgPSB7fTtcblxuLy8gZ2V0cyB0aGUgcmVuZGVyZWQgc3R5bGUgZm9yIGFuIGVsZW1lbnRcbnN0eWZuJDUuZ2V0UmVuZGVyZWRTdHlsZSA9IGZ1bmN0aW9uIChlbGUsIHByb3ApIHtcbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUoZWxlLCBwcm9wLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSYXdTdHlsZShlbGUsIHRydWUpO1xuICB9XG59O1xuXG4vLyBnZXRzIHRoZSByYXcgc3R5bGUgZm9yIGFuIGVsZW1lbnRcbnN0eWZuJDUuZ2V0UmF3U3R5bGUgPSBmdW5jdGlvbiAoZWxlLCBpc1JlbmRlcmVkVmFsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZWxlID0gZWxlWzBdOyAvLyBpbnN1cmUgaXQncyBhbiBlbGVtZW50XG5cbiAgaWYgKGVsZSkge1xuICAgIHZhciByc3R5bGUgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbaV07XG4gICAgICB2YXIgdmFsID0gc2VsZi5nZXRTdHlsZVByb3BlcnR5VmFsdWUoZWxlLCBwcm9wLm5hbWUsIGlzUmVuZGVyZWRWYWwpO1xuICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgIHJzdHlsZVtwcm9wLm5hbWVdID0gdmFsO1xuICAgICAgICByc3R5bGVbZGFzaDJjYW1lbChwcm9wLm5hbWUpXSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJzdHlsZTtcbiAgfVxufTtcbnN0eWZuJDUuZ2V0SW5kZXhlZFN0eWxlID0gZnVuY3Rpb24gKGVsZSwgcHJvcGVydHksIHN1YnByb3BlcnR5LCBpbmRleCkge1xuICB2YXIgcHN0eWxlID0gZWxlLnBzdHlsZShwcm9wZXJ0eSlbc3VicHJvcGVydHldW2luZGV4XTtcbiAgcmV0dXJuIHBzdHlsZSAhPSBudWxsID8gcHN0eWxlIDogZWxlLmN5KCkuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpW3N1YnByb3BlcnR5XVswXTtcbn07XG5zdHlmbiQ1LmdldFN0eWxlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChlbGUsIHByb3BOYW1lLCBpc1JlbmRlcmVkVmFsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZWxlID0gZWxlWzBdOyAvLyBpbnN1cmUgaXQncyBhbiBlbGVtZW50XG5cbiAgaWYgKGVsZSkge1xuICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICBpZiAocHJvcC5hbGlhcykge1xuICAgICAgcHJvcCA9IHByb3AucG9pbnRzVG87XG4gICAgfVxuICAgIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICAgIHZhciBzdHlsZVByb3AgPSBlbGUucHN0eWxlKHByb3AubmFtZSk7XG4gICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgdmFyIHZhbHVlID0gc3R5bGVQcm9wLnZhbHVlLFxuICAgICAgICB1bml0cyA9IHN0eWxlUHJvcC51bml0cyxcbiAgICAgICAgc3RyVmFsdWUgPSBzdHlsZVByb3Auc3RyVmFsdWU7XG4gICAgICBpZiAoaXNSZW5kZXJlZFZhbCAmJiB0eXBlLm51bWJlciAmJiB2YWx1ZSAhPSBudWxsICYmIG51bWJlciQxKHZhbHVlKSkge1xuICAgICAgICB2YXIgem9vbSA9IGVsZS5jeSgpLnpvb20oKTtcbiAgICAgICAgdmFyIGdldFJlbmRlcmVkVmFsdWUgPSBmdW5jdGlvbiBnZXRSZW5kZXJlZFZhbHVlKHZhbCkge1xuICAgICAgICAgIHJldHVybiB2YWwgKiB6b29tO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0VmFsdWVTdHJpbmdXaXRoVW5pdHMgPSBmdW5jdGlvbiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWwsIHVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJlbmRlcmVkVmFsdWUodmFsKSArIHVuaXRzO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaXNBcnJheVZhbHVlID0gYXJyYXkodmFsdWUpO1xuICAgICAgICB2YXIgaGF2ZVVuaXRzID0gaXNBcnJheVZhbHVlID8gdW5pdHMuZXZlcnkoZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICByZXR1cm4gdSAhPSBudWxsO1xuICAgICAgICB9KSA6IHVuaXRzICE9IG51bGw7XG4gICAgICAgIGlmIChoYXZlVW5pdHMpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2LCB1bml0c1tpXSk7XG4gICAgICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWx1ZSwgdW5pdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBzdHJpbmcodikgPyB2IDogJycgKyBnZXRSZW5kZXJlZFZhbHVlKHYpO1xuICAgICAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJycgKyBnZXRSZW5kZXJlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuc3R5Zm4kNS5nZXRBbmltYXRpb25TdGFydFN0eWxlID0gZnVuY3Rpb24gKGVsZSwgYW5pUHJvcHMpIHtcbiAgdmFyIHJzdHlsZSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFuaVByb3AgPSBhbmlQcm9wc1tpXTtcbiAgICB2YXIgbmFtZSA9IGFuaVByb3AubmFtZTtcbiAgICB2YXIgc3R5bGVQcm9wID0gZWxlLnBzdHlsZShuYW1lKTtcbiAgICBpZiAoc3R5bGVQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRoZW4gbWFrZSBhIHByb3Agb2YgaXRcbiAgICAgIGlmIChwbGFpbk9iamVjdChzdHlsZVByb3ApKSB7XG4gICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wLnN0clZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgcnN0eWxlW25hbWVdID0gc3R5bGVQcm9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnN0eWxlO1xufTtcbnN0eWZuJDUuZ2V0UHJvcHNMaXN0ID0gZnVuY3Rpb24gKHByb3BzT2JqKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHJzdHlsZSA9IFtdO1xuICB2YXIgc3R5bGUgPSBwcm9wc09iajtcbiAgdmFyIHByb3BzID0gc2VsZi5wcm9wZXJ0aWVzO1xuICBpZiAoc3R5bGUpIHtcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgIHZhciB2YWwgPSBzdHlsZVtuYW1lXTtcbiAgICAgIHZhciBwcm9wID0gcHJvcHNbbmFtZV0gfHwgcHJvcHNbY2FtZWwyZGFzaChuYW1lKV07XG4gICAgICB2YXIgc3R5bGVQcm9wID0gdGhpcy5wYXJzZShwcm9wLm5hbWUsIHZhbCk7XG4gICAgICBpZiAoc3R5bGVQcm9wKSB7XG4gICAgICAgIHJzdHlsZS5wdXNoKHN0eWxlUHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByc3R5bGU7XG59O1xuc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2ggPSBmdW5jdGlvbiAoZWxlLCBwcm9wTmFtZXMsIHNlZWQpIHtcbiAgdmFyIGhhc2ggPSBzZWVkLnNsaWNlKCk7XG4gIHZhciBuYW1lLCB2YWwsIHN0clZhbCwgY2hWYWw7XG4gIHZhciBpLCBqO1xuICBmb3IgKGkgPSAwOyBpIDwgcHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbmFtZSA9IHByb3BOYW1lc1tpXTtcbiAgICB2YWwgPSBlbGUucHN0eWxlKG5hbWUsIGZhbHNlKTtcbiAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAodmFsLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgaGFzaFswXSA9IGhhc2hJbnQoY2hWYWwsIGhhc2hbMF0pO1xuICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoY2hWYWwsIGhhc2hbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJWYWwgPSB2YWwuc3RyVmFsdWU7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgc3RyVmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoVmFsID0gc3RyVmFsLmNoYXJDb2RlQXQoaik7XG4gICAgICAgIGhhc2hbMF0gPSBoYXNoSW50KGNoVmFsLCBoYXNoWzBdKTtcbiAgICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoY2hWYWwsIGhhc2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzaDtcbn07XG5zdHlmbiQ1LmdldFByb3BlcnRpZXNIYXNoID0gc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7XG5cbnZhciBzdHlmbiQ0ID0ge307XG5zdHlmbiQ0LmFwcGVuZEZyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgdmFyIHN0eWxlID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbnRleHQgPSBqc29uW2ldO1xuICAgIHZhciBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7XG4gICAgdmFyIHByb3BzID0gY29udGV4dC5zdHlsZSB8fCBjb250ZXh0LmNzcztcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gICAgc3R5bGUuc2VsZWN0b3Ioc2VsZWN0b3IpOyAvLyBhcHBseSBzZWxlY3RvclxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBuYW1lcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tqXTtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgICAgc3R5bGUuY3NzKG5hbWUsIHZhbHVlKTsgLy8gYXBwbHkgcHJvcGVydHlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG4vLyBhY2Nlc3NpYmxlIGN5LnN0eWxlKCkgZnVuY3Rpb25cbnN0eWZuJDQuZnJvbUpzb24gPSBmdW5jdGlvbiAoanNvbikge1xuICB2YXIgc3R5bGUgPSB0aGlzO1xuICBzdHlsZS5yZXNldFRvRGVmYXVsdCgpO1xuICBzdHlsZS5hcHBlbmRGcm9tSnNvbihqc29uKTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcblxuLy8gZ2V0IGpzb24gZnJvbSBjeS5zdHlsZSgpIGFwaVxuc3R5Zm4kNC5qc29uID0gZnVuY3Rpb24gKCkge1xuICB2YXIganNvbiA9IFtdO1xuICBmb3IgKHZhciBpID0gdGhpcy5kZWZhdWx0TGVuZ3RoOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjeHQgPSB0aGlzW2ldO1xuICAgIHZhciBzZWxlY3RvciA9IGN4dC5zZWxlY3RvcjtcbiAgICB2YXIgcHJvcHMgPSBjeHQucHJvcGVydGllcztcbiAgICB2YXIgY3NzID0ge307XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wc1tqXTtcbiAgICAgIGNzc1twcm9wLm5hbWVdID0gcHJvcC5zdHJWYWx1ZTtcbiAgICB9XG4gICAganNvbi5wdXNoKHtcbiAgICAgIHNlbGVjdG9yOiAhc2VsZWN0b3IgPyAnY29yZScgOiBzZWxlY3Rvci50b1N0cmluZygpLFxuICAgICAgc3R5bGU6IGNzc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBqc29uO1xufTtcblxudmFyIHN0eWZuJDMgPSB7fTtcbnN0eWZuJDMuYXBwZW5kRnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgc3R5bGUgPSB0aGlzO1xuICB2YXIgcmVtYWluaW5nID0gJycgKyBzdHJpbmc7XG4gIHZhciBzZWxBbmRCbG9ja1N0cjtcbiAgdmFyIGJsb2NrUmVtO1xuICB2YXIgcHJvcEFuZFZhbFN0cjtcblxuICAvLyByZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgc3R5bGUgc3RyaW5nXG4gIHJlbWFpbmluZyA9IHJlbWFpbmluZy5yZXBsYWNlKC9bL11bKl0oXFxzfC4pKz9bKl1bL10vZywgJycpO1xuICBmdW5jdGlvbiByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKSB7XG4gICAgLy8gcmVtb3ZlIHRoZSBwYXJzZWQgc2VsZWN0b3IgYW5kIGJsb2NrIGZyb20gdGhlIHJlbWFpbmluZyB0ZXh0IHRvIHBhcnNlXG4gICAgaWYgKHJlbWFpbmluZy5sZW5ndGggPiBzZWxBbmRCbG9ja1N0ci5sZW5ndGgpIHtcbiAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHIoc2VsQW5kQmxvY2tTdHIubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtYWluaW5nID0gJyc7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlbW92ZVByb3BBbmRWYWxGcm9tUmVtKCkge1xuICAgIC8vIHJlbW92ZSB0aGUgcGFyc2VkIHByb3BlcnR5IGFuZCB2YWx1ZSBmcm9tIHRoZSByZW1haW5pbmcgYmxvY2sgdGV4dCB0byBwYXJzZVxuICAgIGlmIChibG9ja1JlbS5sZW5ndGggPiBwcm9wQW5kVmFsU3RyLmxlbmd0aCkge1xuICAgICAgYmxvY2tSZW0gPSBibG9ja1JlbS5zdWJzdHIocHJvcEFuZFZhbFN0ci5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBibG9ja1JlbSA9ICcnO1xuICAgIH1cbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgdmFyIG5vdGhpbmdMZWZ0VG9QYXJzZSA9IHJlbWFpbmluZy5tYXRjaCgvXlxccyokLyk7XG4gICAgaWYgKG5vdGhpbmdMZWZ0VG9QYXJzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBzZWxBbmRCbG9jayA9IHJlbWFpbmluZy5tYXRjaCgvXlxccyooKD86LnxcXHMpKz8pXFxzKlxceygoPzoufFxccykrPylcXH0vKTtcbiAgICBpZiAoIXNlbEFuZEJsb2NrKSB7XG4gICAgICB3YXJuKCdIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAnICsgcmVtYWluaW5nKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzZWxBbmRCbG9ja1N0ciA9IHNlbEFuZEJsb2NrWzBdO1xuXG4gICAgLy8gcGFyc2UgdGhlIHNlbGVjdG9yXG4gICAgdmFyIHNlbGVjdG9yU3RyID0gc2VsQW5kQmxvY2tbMV07XG4gICAgaWYgKHNlbGVjdG9yU3RyICE9PSAnY29yZScpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihzZWxlY3RvclN0cik7XG4gICAgICBpZiAoc2VsZWN0b3IuaW52YWxpZCkge1xuICAgICAgICB3YXJuKCdTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIHNlbGVjdG9yIGZvdW5kIGluIHN0cmluZyBzdHlsZXNoZWV0OiAnICsgc2VsZWN0b3JTdHIpO1xuXG4gICAgICAgIC8vIHNraXAgdGhpcyBzZWxlY3RvciBhbmQgYmxvY2tcbiAgICAgICAgcmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBhcnNlIHRoZSBibG9jayBvZiBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXNcbiAgICB2YXIgYmxvY2tTdHIgPSBzZWxBbmRCbG9ja1syXTtcbiAgICB2YXIgaW52YWxpZEJsb2NrID0gZmFsc2U7XG4gICAgYmxvY2tSZW0gPSBibG9ja1N0cjtcbiAgICB2YXIgcHJvcHMgPSBbXTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgX25vdGhpbmdMZWZ0VG9QYXJzZSA9IGJsb2NrUmVtLm1hdGNoKC9eXFxzKiQvKTtcbiAgICAgIGlmIChfbm90aGluZ0xlZnRUb1BhcnNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BBbmRWYWwgPSBibG9ja1JlbS5tYXRjaCgvXlxccyooLis/KVxccyo6XFxzKiguKz8pKD86XFxzKjt8XFxzKiQpLyk7XG4gICAgICBpZiAoIXByb3BBbmRWYWwpIHtcbiAgICAgICAgd2FybignU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBmb3JtYXR0aW5nIG9mIHN0eWxlIHByb3BlcnR5IGFuZCB2YWx1ZSBkZWZpbml0aW9ucyBmb3VuZCBpbjonICsgYmxvY2tTdHIpO1xuICAgICAgICBpbnZhbGlkQmxvY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByb3BBbmRWYWxTdHIgPSBwcm9wQW5kVmFsWzBdO1xuICAgICAgdmFyIHByb3BTdHIgPSBwcm9wQW5kVmFsWzFdO1xuICAgICAgdmFyIHZhbFN0ciA9IHByb3BBbmRWYWxbMl07XG4gICAgICB2YXIgcHJvcCA9IHNlbGYucHJvcGVydGllc1twcm9wU3RyXTtcbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICB3YXJuKCdTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiAnICsgcHJvcEFuZFZhbFN0cik7XG5cbiAgICAgICAgLy8gc2tpcCB0aGlzIHByb3BlcnR5IGluIHRoZSBibG9ja1xuICAgICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJzZWRQcm9wID0gc3R5bGUucGFyc2UocHJvcFN0ciwgdmFsU3RyKTtcbiAgICAgIGlmICghcGFyc2VkUHJvcCkge1xuICAgICAgICB3YXJuKCdTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAnICsgcHJvcEFuZFZhbFN0cik7XG5cbiAgICAgICAgLy8gc2tpcCB0aGlzIHByb3BlcnR5IGluIHRoZSBibG9ja1xuICAgICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByb3BzLnB1c2goe1xuICAgICAgICBuYW1lOiBwcm9wU3RyLFxuICAgICAgICB2YWw6IHZhbFN0clxuICAgICAgfSk7XG4gICAgICByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpO1xuICAgIH1cbiAgICBpZiAoaW52YWxpZEJsb2NrKSB7XG4gICAgICByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHB1dCB0aGUgcGFyc2VkIGJsb2NrIGluIHRoZSBzdHlsZVxuICAgIHN0eWxlLnNlbGVjdG9yKHNlbGVjdG9yU3RyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgX3Byb3AgPSBwcm9wc1tpXTtcbiAgICAgIHN0eWxlLmNzcyhfcHJvcC5uYW1lLCBfcHJvcC52YWwpO1xuICAgIH1cbiAgICByZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmcoKTtcbiAgfVxuICByZXR1cm4gc3R5bGU7XG59O1xuc3R5Zm4kMy5mcm9tU3RyaW5nID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgc3R5bGUgPSB0aGlzO1xuICBzdHlsZS5yZXNldFRvRGVmYXVsdCgpO1xuICBzdHlsZS5hcHBlbmRGcm9tU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciBzdHlmbiQyID0ge307XG4oZnVuY3Rpb24gKCkge1xuICB2YXIgbnVtYmVyJDEgPSBudW1iZXI7XG4gIHZhciByZ2JhID0gcmdiYU5vQmFja1JlZnM7XG4gIHZhciBoc2xhID0gaHNsYU5vQmFja1JlZnM7XG4gIHZhciBoZXgzJDEgPSBoZXgzO1xuICB2YXIgaGV4NiQxID0gaGV4NjtcbiAgdmFyIGRhdGEgPSBmdW5jdGlvbiBkYXRhKHByZWZpeCkge1xuICAgIHJldHVybiAnXicgKyBwcmVmaXggKyAnXFxcXHMqXFxcXChcXFxccyooW1xcXFx3XFxcXC5dKylcXFxccypcXFxcKSQnO1xuICB9O1xuICB2YXIgbWFwRGF0YSA9IGZ1bmN0aW9uIG1hcERhdGEocHJlZml4KSB7XG4gICAgdmFyIG1hcEFyZyA9IG51bWJlciQxICsgJ3xcXFxcdyt8JyArIHJnYmEgKyAnfCcgKyBoc2xhICsgJ3wnICsgaGV4MyQxICsgJ3wnICsgaGV4NiQxO1xuICAgIHJldHVybiAnXicgKyBwcmVmaXggKyAnXFxcXHMqXFxcXCgoW1xcXFx3XFxcXC5dKylcXFxccypcXFxcLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKlxcXFwsXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqLFxcXFxzKignICsgbWFwQXJnICsgJylcXFxccypcXFxcLFxcXFxzKignICsgbWFwQXJnICsgJylcXFxcKSQnO1xuICB9O1xuICB2YXIgdXJsUmVnZXhlcyA9IFsnXnVybFxcXFxzKlxcXFwoXFxcXHMqW1xcJ1wiXT8oLis/KVtcXCdcIl0/XFxcXHMqXFxcXCkkJywgJ14obm9uZSkkJywgJ14oLispJCddO1xuXG4gIC8vIGVhY2ggdmlzdWFsIHN0eWxlIHByb3BlcnR5IGhhcyBhIHR5cGUgYW5kIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gaXRcbiAgc3R5Zm4kMi50eXBlcyA9IHtcbiAgICB0aW1lOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICB1bml0czogJ3N8bXMnLFxuICAgICAgaW1wbGljaXRVbml0czogJ21zJ1xuICAgIH0sXG4gICAgcGVyY2VudDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMDAsXG4gICAgICB1bml0czogJyUnLFxuICAgICAgaW1wbGljaXRVbml0czogJyUnXG4gICAgfSxcbiAgICBwZXJjZW50YWdlczoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMDAsXG4gICAgICB1bml0czogJyUnLFxuICAgICAgaW1wbGljaXRVbml0czogJyUnLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIHplcm9PbmVOdW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIG1heDogMSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICB6ZXJvT25lTnVtYmVyczoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxLFxuICAgICAgdW5pdGxlc3M6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgbk9uZU9uZU51bWJlcjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAtMSxcbiAgICAgIG1heDogMSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBub25OZWdhdGl2ZUludDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgaW50ZWdlcjogdHJ1ZSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBub25OZWdhdGl2ZU51bWJlcjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgdW5pdGxlc3M6IHRydWVcbiAgICB9LFxuICAgIHBvc2l0aW9uOiB7XG4gICAgICBlbnVtczogWydwYXJlbnQnLCAnb3JpZ2luJ11cbiAgICB9LFxuICAgIG5vZGVTaXplOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBlbnVtczogWydsYWJlbCddXG4gICAgfSxcbiAgICBudW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBudW1iZXJzOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0bGVzczogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBwb3NpdGl2ZU51bWJlcjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgdW5pdGxlc3M6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBzdHJpY3RNaW46IHRydWVcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMFxuICAgIH0sXG4gICAgYmlkaXJlY3Rpb25hbFNpemU6IHtcbiAgICAgIG51bWJlcjogdHJ1ZVxuICAgIH0sXG4gICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIGFsbG93UGVyY2VudDogdHJ1ZVxuICAgIH0sXG4gICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgYmlkaXJlY3Rpb25hbFNpemVzOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgLy8gYWxsb3dzIG5lZ2F0aXZlXG4gICAgc2l6ZU1heWJlUGVyY2VudDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgYWxsb3dQZXJjZW50OiB0cnVlXG4gICAgfSxcbiAgICBheGlzRGlyZWN0aW9uOiB7XG4gICAgICBlbnVtczogWydob3Jpem9udGFsJywgJ2xlZnR3YXJkJywgJ3JpZ2h0d2FyZCcsICd2ZXJ0aWNhbCcsICd1cHdhcmQnLCAnZG93bndhcmQnLCAnYXV0byddXG4gICAgfSxcbiAgICBwYWRkaW5nUmVsYXRpdmVUbzoge1xuICAgICAgZW51bXM6IFsnd2lkdGgnLCAnaGVpZ2h0JywgJ2F2ZXJhZ2UnLCAnbWluJywgJ21heCddXG4gICAgfSxcbiAgICBiZ1dIOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBhbGxvd1BlcmNlbnQ6IHRydWUsXG4gICAgICBlbnVtczogWydhdXRvJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdQb3M6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIGFsbG93UGVyY2VudDogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBiZ1JlbGF0aXZlVG86IHtcbiAgICAgIGVudW1zOiBbJ2lubmVyJywgJ2luY2x1ZGUtcGFkZGluZyddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnUmVwZWF0OiB7XG4gICAgICBlbnVtczogWydyZXBlYXQnLCAncmVwZWF0LXgnLCAncmVwZWF0LXknLCAnbm8tcmVwZWF0J10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdGaXQ6IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAnY29udGFpbicsICdjb3ZlciddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnQ3Jvc3NPcmlnaW46IHtcbiAgICAgIGVudW1zOiBbJ2Fub255bW91cycsICd1c2UtY3JlZGVudGlhbHMnLCAnbnVsbCddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnQ2xpcDoge1xuICAgICAgZW51bXM6IFsnbm9uZScsICdub2RlJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdDb250YWlubWVudDoge1xuICAgICAgZW51bXM6IFsnaW5zaWRlJywgJ292ZXInXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgY29sb3I6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yczoge1xuICAgICAgY29sb3I6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgZmlsbDoge1xuICAgICAgZW51bXM6IFsnc29saWQnLCAnbGluZWFyLWdyYWRpZW50JywgJ3JhZGlhbC1ncmFkaWVudCddXG4gICAgfSxcbiAgICBib29sOiB7XG4gICAgICBlbnVtczogWyd5ZXMnLCAnbm8nXVxuICAgIH0sXG4gICAgYm9vbHM6IHtcbiAgICAgIGVudW1zOiBbJ3llcycsICdubyddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGxpbmVTdHlsZToge1xuICAgICAgZW51bXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCddXG4gICAgfSxcbiAgICBsaW5lQ2FwOiB7XG4gICAgICBlbnVtczogWydidXR0JywgJ3JvdW5kJywgJ3NxdWFyZSddXG4gICAgfSxcbiAgICBsaW5lUG9zaXRpb246IHtcbiAgICAgIGVudW1zOiBbJ2NlbnRlcicsICdpbnNpZGUnLCAnb3V0c2lkZSddXG4gICAgfSxcbiAgICBsaW5lSm9pbjoge1xuICAgICAgZW51bXM6IFsncm91bmQnLCAnYmV2ZWwnLCAnbWl0ZXInXVxuICAgIH0sXG4gICAgYm9yZGVyU3R5bGU6IHtcbiAgICAgIGVudW1zOiBbJ3NvbGlkJywgJ2RvdHRlZCcsICdkYXNoZWQnLCAnZG91YmxlJ11cbiAgICB9LFxuICAgIGN1cnZlU3R5bGU6IHtcbiAgICAgIGVudW1zOiBbJ2JlemllcicsICd1bmJ1bmRsZWQtYmV6aWVyJywgJ2hheXN0YWNrJywgJ3NlZ21lbnRzJywgJ3N0cmFpZ2h0JywgJ3N0cmFpZ2h0LXRyaWFuZ2xlJywgJ3RheGknLCAncm91bmQtc2VnbWVudHMnLCAncm91bmQtdGF4aSddXG4gICAgfSxcbiAgICByYWRpdXNUeXBlOiB7XG4gICAgICBlbnVtczogWydhcmMtcmFkaXVzJywgJ2luZmx1ZW5jZS1yYWRpdXMnXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBmb250RmFtaWx5OiB7XG4gICAgICByZWdleDogJ14oW1xcXFx3LSBcXFxcXCJdKyg/OlxcXFxzKixcXFxccypbXFxcXHctIFxcXFxcIl0rKSopJCdcbiAgICB9LFxuICAgIGZvbnRTdHlsZToge1xuICAgICAgZW51bXM6IFsnaXRhbGljJywgJ25vcm1hbCcsICdvYmxpcXVlJ11cbiAgICB9LFxuICAgIGZvbnRXZWlnaHQ6IHtcbiAgICAgIGVudW1zOiBbJ25vcm1hbCcsICdib2xkJywgJ2JvbGRlcicsICdsaWdodGVyJywgJzEwMCcsICcyMDAnLCAnMzAwJywgJzQwMCcsICc1MDAnLCAnNjAwJywgJzgwMCcsICc5MDAnLCAxMDAsIDIwMCwgMzAwLCA0MDAsIDUwMCwgNjAwLCA3MDAsIDgwMCwgOTAwXVxuICAgIH0sXG4gICAgdGV4dERlY29yYXRpb246IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAndW5kZXJsaW5lJywgJ292ZXJsaW5lJywgJ2xpbmUtdGhyb3VnaCddXG4gICAgfSxcbiAgICB0ZXh0VHJhbnNmb3JtOiB7XG4gICAgICBlbnVtczogWydub25lJywgJ3VwcGVyY2FzZScsICdsb3dlcmNhc2UnXVxuICAgIH0sXG4gICAgdGV4dFdyYXA6IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAnd3JhcCcsICdlbGxpcHNpcyddXG4gICAgfSxcbiAgICB0ZXh0T3ZlcmZsb3dXcmFwOiB7XG4gICAgICBlbnVtczogWyd3aGl0ZXNwYWNlJywgJ2FueXdoZXJlJ11cbiAgICB9LFxuICAgIHRleHRCYWNrZ3JvdW5kU2hhcGU6IHtcbiAgICAgIGVudW1zOiBbJ3JlY3RhbmdsZScsICdyb3VuZHJlY3RhbmdsZScsICdyb3VuZC1yZWN0YW5nbGUnXVxuICAgIH0sXG4gICAgbm9kZVNoYXBlOiB7XG4gICAgICBlbnVtczogWydyZWN0YW5nbGUnLCAncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJywgJ2N1dHJlY3RhbmdsZScsICdjdXQtcmVjdGFuZ2xlJywgJ2JvdHRvbXJvdW5kcmVjdGFuZ2xlJywgJ2JvdHRvbS1yb3VuZC1yZWN0YW5nbGUnLCAnYmFycmVsJywgJ2VsbGlwc2UnLCAndHJpYW5nbGUnLCAncm91bmQtdHJpYW5nbGUnLCAnc3F1YXJlJywgJ3BlbnRhZ29uJywgJ3JvdW5kLXBlbnRhZ29uJywgJ2hleGFnb24nLCAncm91bmQtaGV4YWdvbicsICdjb25jYXZlaGV4YWdvbicsICdjb25jYXZlLWhleGFnb24nLCAnaGVwdGFnb24nLCAncm91bmQtaGVwdGFnb24nLCAnb2N0YWdvbicsICdyb3VuZC1vY3RhZ29uJywgJ3RhZycsICdyb3VuZC10YWcnLCAnc3RhcicsICdkaWFtb25kJywgJ3JvdW5kLWRpYW1vbmQnLCAndmVlJywgJ3Job21ib2lkJywgJ3JpZ2h0LXJob21ib2lkJywgJ3BvbHlnb24nXVxuICAgIH0sXG4gICAgb3ZlcmxheVNoYXBlOiB7XG4gICAgICBlbnVtczogWydyb3VuZHJlY3RhbmdsZScsICdyb3VuZC1yZWN0YW5nbGUnLCAnZWxsaXBzZSddXG4gICAgfSxcbiAgICBjb3JuZXJSYWRpdXM6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIHVuaXRzOiAncHh8ZW0nLFxuICAgICAgaW1wbGljaXRVbml0czogJ3B4JyxcbiAgICAgIGVudW1zOiBbJ2F1dG8nXVxuICAgIH0sXG4gICAgY29tcG91bmRJbmNsdWRlTGFiZWxzOiB7XG4gICAgICBlbnVtczogWydpbmNsdWRlJywgJ2V4Y2x1ZGUnXVxuICAgIH0sXG4gICAgYXJyb3dTaGFwZToge1xuICAgICAgZW51bXM6IFsndGVlJywgJ3RyaWFuZ2xlJywgJ3RyaWFuZ2xlLXRlZScsICdjaXJjbGUtdHJpYW5nbGUnLCAndHJpYW5nbGUtY3Jvc3MnLCAndHJpYW5nbGUtYmFja2N1cnZlJywgJ3ZlZScsICdzcXVhcmUnLCAnY2lyY2xlJywgJ2RpYW1vbmQnLCAnY2hldnJvbicsICdub25lJ11cbiAgICB9LFxuICAgIGFycm93RmlsbDoge1xuICAgICAgZW51bXM6IFsnZmlsbGVkJywgJ2hvbGxvdyddXG4gICAgfSxcbiAgICBhcnJvd1dpZHRoOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0czogJyV8cHh8ZW0nLFxuICAgICAgaW1wbGljaXRVbml0czogJ3B4JyxcbiAgICAgIGVudW1zOiBbJ21hdGNoLWxpbmUnXVxuICAgIH0sXG4gICAgZGlzcGxheToge1xuICAgICAgZW51bXM6IFsnZWxlbWVudCcsICdub25lJ11cbiAgICB9LFxuICAgIHZpc2liaWxpdHk6IHtcbiAgICAgIGVudW1zOiBbJ2hpZGRlbicsICd2aXNpYmxlJ11cbiAgICB9LFxuICAgIHpDb21wb3VuZERlcHRoOiB7XG4gICAgICBlbnVtczogWydib3R0b20nLCAnb3JwaGFuJywgJ2F1dG8nLCAndG9wJ11cbiAgICB9LFxuICAgIHpJbmRleENvbXBhcmU6IHtcbiAgICAgIGVudW1zOiBbJ2F1dG8nLCAnbWFudWFsJ11cbiAgICB9LFxuICAgIHZhbGlnbjoge1xuICAgICAgZW51bXM6IFsndG9wJywgJ2NlbnRlcicsICdib3R0b20nXVxuICAgIH0sXG4gICAgaGFsaWduOiB7XG4gICAgICBlbnVtczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddXG4gICAgfSxcbiAgICBqdXN0aWZpY2F0aW9uOiB7XG4gICAgICBlbnVtczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCcsICdhdXRvJ11cbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIHN0cmluZzogdHJ1ZVxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4OiBkYXRhKCdkYXRhJylcbiAgICB9LFxuICAgIGxheW91dERhdGE6IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICByZWdleDogZGF0YSgnbGF5b3V0RGF0YScpXG4gICAgfSxcbiAgICBzY3JhdGNoOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgcmVnZXg6IGRhdGEoJ3NjcmF0Y2gnKVxuICAgIH0sXG4gICAgbWFwRGF0YToge1xuICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4OiBtYXBEYXRhKCdtYXBEYXRhJylcbiAgICB9LFxuICAgIG1hcExheW91dERhdGE6IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICByZWdleDogbWFwRGF0YSgnbWFwTGF5b3V0RGF0YScpXG4gICAgfSxcbiAgICBtYXBTY3JhdGNoOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgcmVnZXg6IG1hcERhdGEoJ21hcFNjcmF0Y2gnKVxuICAgIH0sXG4gICAgZm46IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICBmbjogdHJ1ZVxuICAgIH0sXG4gICAgdXJsOiB7XG4gICAgICByZWdleGVzOiB1cmxSZWdleGVzLFxuICAgICAgc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICB1cmxzOiB7XG4gICAgICByZWdleGVzOiB1cmxSZWdleGVzLFxuICAgICAgc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIHByb3BMaXN0OiB7XG4gICAgICBwcm9wTGlzdDogdHJ1ZVxuICAgIH0sXG4gICAgYW5nbGU6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIHVuaXRzOiAnZGVnfHJhZCcsXG4gICAgICBpbXBsaWNpdFVuaXRzOiAncmFkJ1xuICAgIH0sXG4gICAgdGV4dFJvdGF0aW9uOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0czogJ2RlZ3xyYWQnLFxuICAgICAgaW1wbGljaXRVbml0czogJ3JhZCcsXG4gICAgICBlbnVtczogWydub25lJywgJ2F1dG9yb3RhdGUnXVxuICAgIH0sXG4gICAgcG9seWdvblBvaW50TGlzdDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBldmVuTXVsdGlwbGU6IHRydWUsXG4gICAgICBtaW46IC0xLFxuICAgICAgbWF4OiAxLFxuICAgICAgdW5pdGxlc3M6IHRydWVcbiAgICB9LFxuICAgIGVkZ2VEaXN0YW5jZXM6IHtcbiAgICAgIGVudW1zOiBbJ2ludGVyc2VjdGlvbicsICdub2RlLXBvc2l0aW9uJywgJ2VuZHBvaW50cyddXG4gICAgfSxcbiAgICBlZGdlRW5kcG9pbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgdW5pdHM6ICclfHB4fGVtfGRlZ3xyYWQnLFxuICAgICAgaW1wbGljaXRVbml0czogJ3B4JyxcbiAgICAgIGVudW1zOiBbJ2luc2lkZS10by1ub2RlJywgJ291dHNpZGUtdG8tbm9kZScsICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnLCAnb3V0c2lkZS10by1saW5lJywgJ291dHNpZGUtdG8tbGluZS1vci1sYWJlbCddLFxuICAgICAgc2luZ2xlRW51bTogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh2YWxBcnIsIHVuaXRzQXJyKSB7XG4gICAgICAgIHN3aXRjaCAodmFsQXJyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIC8vIGNhbiBiZSAlIG9yIHB4IG9ubHlcbiAgICAgICAgICAgIHJldHVybiB1bml0c0FyclswXSAhPT0gJ2RlZycgJiYgdW5pdHNBcnJbMF0gIT09ICdyYWQnICYmIHVuaXRzQXJyWzFdICE9PSAnZGVnJyAmJiB1bml0c0FyclsxXSAhPT0gJ3JhZCc7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgLy8gY2FuIGJlIGVudW0sIGRlZywgb3IgcmFkIG9ubHlcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcodmFsQXJyWzBdKSB8fCB1bml0c0FyclswXSA9PT0gJ2RlZycgfHwgdW5pdHNBcnJbMF0gPT09ICdyYWQnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGVhc2luZzoge1xuICAgICAgcmVnZXhlczogWydeKHNwcmluZylcXFxccypcXFxcKFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccypcXFxcKSQnLCAnXihjdWJpYy1iZXppZXIpXFxcXHMqXFxcXChcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccypcXFxcKSQnXSxcbiAgICAgIGVudW1zOiBbJ2xpbmVhcicsICdlYXNlJywgJ2Vhc2UtaW4nLCAnZWFzZS1vdXQnLCAnZWFzZS1pbi1vdXQnLCAnZWFzZS1pbi1zaW5lJywgJ2Vhc2Utb3V0LXNpbmUnLCAnZWFzZS1pbi1vdXQtc2luZScsICdlYXNlLWluLXF1YWQnLCAnZWFzZS1vdXQtcXVhZCcsICdlYXNlLWluLW91dC1xdWFkJywgJ2Vhc2UtaW4tY3ViaWMnLCAnZWFzZS1vdXQtY3ViaWMnLCAnZWFzZS1pbi1vdXQtY3ViaWMnLCAnZWFzZS1pbi1xdWFydCcsICdlYXNlLW91dC1xdWFydCcsICdlYXNlLWluLW91dC1xdWFydCcsICdlYXNlLWluLXF1aW50JywgJ2Vhc2Utb3V0LXF1aW50JywgJ2Vhc2UtaW4tb3V0LXF1aW50JywgJ2Vhc2UtaW4tZXhwbycsICdlYXNlLW91dC1leHBvJywgJ2Vhc2UtaW4tb3V0LWV4cG8nLCAnZWFzZS1pbi1jaXJjJywgJ2Vhc2Utb3V0LWNpcmMnLCAnZWFzZS1pbi1vdXQtY2lyYyddXG4gICAgfSxcbiAgICBncmFkaWVudERpcmVjdGlvbjoge1xuICAgICAgZW51bXM6IFsndG8tYm90dG9tJywgJ3RvLXRvcCcsICd0by1sZWZ0JywgJ3RvLXJpZ2h0JywgJ3RvLWJvdHRvbS1yaWdodCcsICd0by1ib3R0b20tbGVmdCcsICd0by10b3AtcmlnaHQnLCAndG8tdG9wLWxlZnQnLCAndG8tcmlnaHQtYm90dG9tJywgJ3RvLWxlZnQtYm90dG9tJywgJ3RvLXJpZ2h0LXRvcCcsICd0by1sZWZ0LXRvcCcgLy8gZGlmZmVyZW50IG9yZGVyXG4gICAgICBdXG4gICAgfSxcblxuICAgIGJvdW5kc0V4cGFuc2lvbjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUodmFsQXJyKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSB2YWxBcnIubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbGVuZ3RoID09PSAxIHx8IGxlbmd0aCA9PT0gMiB8fCBsZW5ndGggPT09IDQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZGlmZiA9IHtcbiAgICB6ZXJvTm9uWmVybzogZnVuY3Rpb24gemVyb05vblplcm8odmFsMSwgdmFsMikge1xuICAgICAgaWYgKCh2YWwxID09IG51bGwgfHwgdmFsMiA9PSBudWxsKSAmJiB2YWwxICE9PSB2YWwyKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBudWxsIGNhc2VzIGNvdWxkIHJlcHJlc2VudCBhbnkgdmFsdWVcbiAgICAgIH1cbiAgICAgIGlmICh2YWwxID09IDAgJiYgdmFsMiAhPSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh2YWwxICE9IDAgJiYgdmFsMiA9PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkodmFsMSwgdmFsMikge1xuICAgICAgcmV0dXJuIHZhbDEgIT0gdmFsMjtcbiAgICB9LFxuICAgIGVtcHR5Tm9uRW1wdHk6IGZ1bmN0aW9uIGVtcHR5Tm9uRW1wdHkoc3RyMSwgc3RyMikge1xuICAgICAgdmFyIGVtcHR5MSA9IGVtcHR5U3RyaW5nKHN0cjEpO1xuICAgICAgdmFyIGVtcHR5MiA9IGVtcHR5U3RyaW5nKHN0cjIpO1xuICAgICAgcmV0dXJuIGVtcHR5MSAmJiAhZW1wdHkyIHx8ICFlbXB0eTEgJiYgZW1wdHkyO1xuICAgIH1cbiAgfTtcblxuICAvLyBkZWZpbmUgdmlzdWFsIHN0eWxlIHByb3BlcnRpZXNcbiAgLy9cbiAgLy8gLSBuLmIuIGFkZGluZyBhIG5ldyBncm91cCBvZiBwcm9wcyBtYXkgcmVxdWlyZSB1cGRhdGVzIHRvIHVwZGF0ZVN0eWxlSGludHMoKVxuICAvLyAtIGFkZGluZyBuZXcgcHJvcHMgdG8gYW4gZXhpc3RpbmcgZ3JvdXAgZ2V0cyBoYW5kbGVkIGF1dG9tYXRpY2FsbHlcblxuICB2YXIgdCA9IHN0eWZuJDIudHlwZXM7XG4gIHZhciBtYWluTGFiZWwgPSBbe1xuICAgIG5hbWU6ICdsYWJlbCcsXG4gICAgdHlwZTogdC50ZXh0LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5lbXB0eU5vbkVtcHR5XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1yb3RhdGlvbicsXG4gICAgdHlwZTogdC50ZXh0Um90YXRpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1tYXJnaW4teCcsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW1hcmdpbi15JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIHNvdXJjZUxhYmVsID0gW3tcbiAgICBuYW1lOiAnc291cmNlLWxhYmVsJyxcbiAgICB0eXBlOiB0LnRleHQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLXRleHQtcm90YXRpb24nLFxuICAgIHR5cGU6IHQudGV4dFJvdGF0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NvdXJjZS10ZXh0LW1hcmdpbi14JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NvdXJjZS10ZXh0LW1hcmdpbi15JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NvdXJjZS10ZXh0LW9mZnNldCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIHRhcmdldExhYmVsID0gW3tcbiAgICBuYW1lOiAndGFyZ2V0LWxhYmVsJyxcbiAgICB0eXBlOiB0LnRleHQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LXRleHQtcm90YXRpb24nLFxuICAgIHR5cGU6IHQudGV4dFJvdGF0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RhcmdldC10ZXh0LW1hcmdpbi14JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RhcmdldC10ZXh0LW1hcmdpbi15JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RhcmdldC10ZXh0LW9mZnNldCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGxhYmVsRGltZW5zaW9ucyA9IFt7XG4gICAgbmFtZTogJ2ZvbnQtZmFtaWx5JyxcbiAgICB0eXBlOiB0LmZvbnRGYW1pbHksXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnZm9udC1zdHlsZScsXG4gICAgdHlwZTogdC5mb250U3R5bGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnZm9udC13ZWlnaHQnLFxuICAgIHR5cGU6IHQuZm9udFdlaWdodCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdmb250LXNpemUnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LXRyYW5zZm9ybScsXG4gICAgdHlwZTogdC50ZXh0VHJhbnNmb3JtLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtd3JhcCcsXG4gICAgdHlwZTogdC50ZXh0V3JhcCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW92ZXJmbG93LXdyYXAnLFxuICAgIHR5cGU6IHQudGV4dE92ZXJmbG93V3JhcCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW1heC13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3V0bGluZS13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtaGVpZ2h0JyxcbiAgICB0eXBlOiB0LnBvc2l0aXZlTnVtYmVyLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGNvbW1vbkxhYmVsID0gW3tcbiAgICBuYW1lOiAndGV4dC12YWxpZ24nLFxuICAgIHR5cGU6IHQudmFsaWduLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtaGFsaWduJyxcbiAgICB0eXBlOiB0LmhhbGlnbixcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdjb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3V0bGluZS1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3V0bGluZS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmcnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJvcmRlci1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJvcmRlci1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtYm9yZGVyLXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1ib3JkZXItc3R5bGUnLFxuICAgIHR5cGU6IHQuYm9yZGVyU3R5bGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1iYWNrZ3JvdW5kLXNoYXBlJyxcbiAgICB0eXBlOiB0LnRleHRCYWNrZ3JvdW5kU2hhcGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1qdXN0aWZpY2F0aW9uJyxcbiAgICB0eXBlOiB0Lmp1c3RpZmljYXRpb25cbiAgfV07XG4gIHZhciBiZWhhdmlvciA9IFt7XG4gICAgbmFtZTogJ2V2ZW50cycsXG4gICAgdHlwZTogdC5ib29sLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtZXZlbnRzJyxcbiAgICB0eXBlOiB0LmJvb2wsXG4gICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuYW55XG4gIH1dO1xuICB2YXIgdmlzaWJpbGl0eSA9IFt7XG4gICAgbmFtZTogJ2Rpc3BsYXknLFxuICAgIHR5cGU6IHQuZGlzcGxheSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5hbnksXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55LFxuICAgIHRyaWdnZXJzQm91bmRzT2ZDb25uZWN0ZWRFZGdlczogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogJ3Zpc2liaWxpdHknLFxuICAgIHR5cGU6IHQudmlzaWJpbGl0eSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ21pbi16b29tZWQtZm9udC1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICd6LWNvbXBvdW5kLWRlcHRoJyxcbiAgICB0eXBlOiB0LnpDb21wb3VuZERlcHRoLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3otaW5kZXgtY29tcGFyZScsXG4gICAgdHlwZTogdC56SW5kZXhDb21wYXJlLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3otaW5kZXgnLFxuICAgIHR5cGU6IHQubnVtYmVyLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIG92ZXJsYXkgPSBbe1xuICAgIG5hbWU6ICdvdmVybGF5LXBhZGRpbmcnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnb3ZlcmxheS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LXNoYXBlJyxcbiAgICB0eXBlOiB0Lm92ZXJsYXlTaGFwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LWNvcm5lci1yYWRpdXMnLFxuICAgIHR5cGU6IHQuY29ybmVyUmFkaXVzXG4gIH1dO1xuICB2YXIgdW5kZXJsYXkgPSBbe1xuICAgIG5hbWU6ICd1bmRlcmxheS1wYWRkaW5nJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kZXJsYXktY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlcmxheS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlcmxheS1zaGFwZScsXG4gICAgdHlwZTogdC5vdmVybGF5U2hhcGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kZXJsYXktY29ybmVyLXJhZGl1cycsXG4gICAgdHlwZTogdC5jb3JuZXJSYWRpdXNcbiAgfV07XG4gIHZhciB0cmFuc2l0aW9uID0gW3tcbiAgICBuYW1lOiAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICAgdHlwZTogdC5wcm9wTGlzdFxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAgIHR5cGU6IHQudGltZVxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tZGVsYXknLFxuICAgIHR5cGU6IHQudGltZVxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgICB0eXBlOiB0LmVhc2luZ1xuICB9XTtcbiAgdmFyIG5vZGVTaXplSGFzaE92ZXJyaWRlID0gZnVuY3Rpb24gbm9kZVNpemVIYXNoT3ZlcnJpZGUoZWxlLCBwYXJzZWRQcm9wKSB7XG4gICAgaWYgKHBhcnNlZFByb3AudmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybiAtZWxlLnBvb2xJbmRleCgpOyAvLyBubyBoYXNoIGtleSBoaXRzIGlzIHVzaW5nIGxhYmVsIHNpemUgKGhpdHJhdGUgZm9yIHBlcmYgcHJvYmFibHkgbG93IGFueXdheSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnNlZFByb3AucGZWYWx1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBub2RlQm9keSA9IFt7XG4gICAgbmFtZTogJ2hlaWdodCcsXG4gICAgdHlwZTogdC5ub2RlU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnksXG4gICAgaGFzaE92ZXJyaWRlOiBub2RlU2l6ZUhhc2hPdmVycmlkZVxuICB9LCB7XG4gICAgbmFtZTogJ3dpZHRoJyxcbiAgICB0eXBlOiB0Lm5vZGVTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICBoYXNoT3ZlcnJpZGU6IG5vZGVTaXplSGFzaE92ZXJyaWRlXG4gIH0sIHtcbiAgICBuYW1lOiAnc2hhcGUnLFxuICAgIHR5cGU6IHQubm9kZVNoYXBlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NoYXBlLXBvbHlnb24tcG9pbnRzJyxcbiAgICB0eXBlOiB0LnBvbHlnb25Qb2ludExpc3QsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnY29ybmVyLXJhZGl1cycsXG4gICAgdHlwZTogdC5jb3JuZXJSYWRpdXNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1maWxsJyxcbiAgICB0eXBlOiB0LmZpbGxcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtYmxhY2tlbicsXG4gICAgdHlwZTogdC5uT25lT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycycsXG4gICAgdHlwZTogdC5jb2xvcnNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zJyxcbiAgICB0eXBlOiB0LnBlcmNlbnRhZ2VzXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24nLFxuICAgIHR5cGU6IHQuZ3JhZGllbnREaXJlY3Rpb25cbiAgfSwge1xuICAgIG5hbWU6ICdwYWRkaW5nJyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1yZWxhdGl2ZS10bycsXG4gICAgdHlwZTogdC5wYWRkaW5nUmVsYXRpdmVUbyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdib3VuZHMtZXhwYW5zaW9uJyxcbiAgICB0eXBlOiB0LmJvdW5kc0V4cGFuc2lvbixcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBub2RlQm9yZGVyID0gW3tcbiAgICBuYW1lOiAnYm9yZGVyLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1zdHlsZScsXG4gICAgdHlwZTogdC5ib3JkZXJTdHlsZVxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1jYXAnLFxuICAgIHR5cGU6IHQubGluZUNhcFxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1qb2luJyxcbiAgICB0eXBlOiB0LmxpbmVKb2luXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLWRhc2gtcGF0dGVybicsXG4gICAgdHlwZTogdC5udW1iZXJzXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLWRhc2gtb2Zmc2V0JyxcbiAgICB0eXBlOiB0Lm51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1wb3NpdGlvbicsXG4gICAgdHlwZTogdC5saW5lUG9zaXRpb25cbiAgfV07XG4gIHZhciBub2RlT3V0bGluZSA9IFt7XG4gICAgbmFtZTogJ291dGxpbmUtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRsaW5lLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ291dGxpbmUtd2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRsaW5lLXN0eWxlJyxcbiAgICB0eXBlOiB0LmJvcmRlclN0eWxlXG4gIH0sIHtcbiAgICBuYW1lOiAnb3V0bGluZS1vZmZzZXQnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBiYWNrZ3JvdW5kSW1hZ2UgPSBbe1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICB0eXBlOiB0LnVybHNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luJyxcbiAgICB0eXBlOiB0LmJnQ3Jvc3NPcmlnaW5cbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlcnNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50JyxcbiAgICB0eXBlOiB0LmJnQ29udGFpbm1lbnRcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZycsXG4gICAgdHlwZTogdC5ib29sc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teCcsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teScsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLFxuICAgIHR5cGU6IHQuYmdSZWxhdGl2ZVRvXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nLFxuICAgIHR5cGU6IHQuYmdSZWxhdGl2ZVRvXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAgIHR5cGU6IHQuYmdSZXBlYXRcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWZpdCcsXG4gICAgdHlwZTogdC5iZ0ZpdFxuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtY2xpcCcsXG4gICAgdHlwZTogdC5iZ0NsaXBcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLXdpZHRoJyxcbiAgICB0eXBlOiB0LmJnV0hcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWhlaWdodCcsXG4gICAgdHlwZTogdC5iZ1dIXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1vZmZzZXQteCcsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtb2Zmc2V0LXknLFxuICAgIHR5cGU6IHQuYmdQb3NcbiAgfV07XG4gIHZhciBjb21wb3VuZCA9IFt7XG4gICAgbmFtZTogJ3Bvc2l0aW9uJyxcbiAgICB0eXBlOiB0LnBvc2l0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJyxcbiAgICB0eXBlOiB0LmNvbXBvdW5kSW5jbHVkZUxhYmVscyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4td2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4td2lkdGgtYmlhcy1sZWZ0JyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbWluLXdpZHRoLWJpYXMtcmlnaHQnLFxuICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4taGVpZ2h0JyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbWluLWhlaWdodC1iaWFzLXRvcCcsXG4gICAgdHlwZTogdC5zaXplTWF5YmVQZXJjZW50LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nLFxuICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBlZGdlTGluZSA9IFt7XG4gICAgbmFtZTogJ2xpbmUtc3R5bGUnLFxuICAgIHR5cGU6IHQubGluZVN0eWxlXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZmlsbCcsXG4gICAgdHlwZTogdC5maWxsXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1jYXAnLFxuICAgIHR5cGU6IHQubGluZUNhcFxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1kYXNoLXBhdHRlcm4nLFxuICAgIHR5cGU6IHQubnVtYmVyc1xuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZGFzaC1vZmZzZXQnLFxuICAgIHR5cGU6IHQubnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1vdXRsaW5lLXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICdsaW5lLW91dGxpbmUtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzJyxcbiAgICB0eXBlOiB0LmNvbG9yc1xuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnLFxuICAgIHR5cGU6IHQucGVyY2VudGFnZXNcbiAgfSwge1xuICAgIG5hbWU6ICdjdXJ2ZS1zdHlsZScsXG4gICAgdHlwZTogdC5jdXJ2ZVN0eWxlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiAnaGF5c3RhY2stcmFkaXVzJyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLWVuZHBvaW50JyxcbiAgICB0eXBlOiB0LmVkZ2VFbmRwb2ludCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXJnZXQtZW5kcG9pbnQnLFxuICAgIHR5cGU6IHQuZWRnZUVuZHBvaW50LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemVzLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtd2VpZ2h0cycsXG4gICAgdHlwZTogdC5udW1iZXJzLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtZGlzdGFuY2VzJyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplcyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzZWdtZW50LXdlaWdodHMnLFxuICAgIHR5cGU6IHQubnVtYmVycyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzZWdtZW50LXJhZGlpJyxcbiAgICB0eXBlOiB0Lm51bWJlcnMsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAncmFkaXVzLXR5cGUnLFxuICAgIHR5cGU6IHQucmFkaXVzVHlwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXhpLXR1cm4nLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGF4aS10dXJuLW1pbi1kaXN0YW5jZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RheGktZGlyZWN0aW9uJyxcbiAgICB0eXBlOiB0LmF4aXNEaXJlY3Rpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGF4aS1yYWRpdXMnLFxuICAgIHR5cGU6IHQubnVtYmVyLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2VkZ2UtZGlzdGFuY2VzJyxcbiAgICB0eXBlOiB0LmVkZ2VEaXN0YW5jZXMsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctc2NhbGUnLFxuICAgIHR5cGU6IHQucG9zaXRpdmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbG9vcC1kaXJlY3Rpb24nLFxuICAgIHR5cGU6IHQuYW5nbGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbG9vcC1zd2VlcCcsXG4gICAgdHlwZTogdC5hbmdsZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGdob3N0ID0gW3tcbiAgICBuYW1lOiAnZ2hvc3QnLFxuICAgIHR5cGU6IHQuYm9vbCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vZmZzZXQteCcsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vZmZzZXQteScsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfV07XG4gIHZhciBjb3JlID0gW3tcbiAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplXG4gIH0sIHtcbiAgICBuYW1lOiAnYWN0aXZlLWJnLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYWN0aXZlLWJnLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2FjdGl2ZS1iZy1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH1dO1xuXG4gIC8vIHBpZSBiYWNrZ3JvdW5kcyBmb3Igbm9kZXNcbiAgdmFyIHBpZSA9IFtdO1xuICBzdHlmbiQyLnBpZUJhY2tncm91bmROID0gMTY7IC8vIGJlY2F1c2UgdGhlIHBpZSBwcm9wZXJ0aWVzIGFyZSBudW1iZXJlZCwgZ2l2ZSBhY2Nlc3MgdG8gYSBjb25zdGFudCBOIChmb3IgcmVuZGVyZXIgdXNlKVxuICBwaWUucHVzaCh7XG4gICAgbmFtZTogJ3BpZS1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnRcbiAgfSk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0eWZuJDIucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0pO1xuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtc2l6ZScsXG4gICAgICB0eXBlOiB0LnBlcmNlbnRcbiAgICB9KTtcbiAgICBwaWUucHVzaCh7XG4gICAgICBuYW1lOiAncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gICAgfSk7XG4gIH1cblxuICAvLyBlZGdlIGFycm93c1xuICB2YXIgZWRnZUFycm93ID0gW107XG4gIHZhciBhcnJvd1ByZWZpeGVzID0gc3R5Zm4kMi5hcnJvd1ByZWZpeGVzID0gWydzb3VyY2UnLCAnbWlkLXNvdXJjZScsICd0YXJnZXQnLCAnbWlkLXRhcmdldCddO1xuICBbe1xuICAgIG5hbWU6ICdhcnJvdy1zaGFwZScsXG4gICAgdHlwZTogdC5hcnJvd1NoYXBlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctZmlsbCcsXG4gICAgdHlwZTogdC5hcnJvd0ZpbGxcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy13aWR0aCcsXG4gICAgdHlwZTogdC5hcnJvd1dpZHRoXG4gIH1dLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICBhcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgdmFyIG5hbWUgPSBwcmVmaXggKyAnLScgKyBwcm9wLm5hbWU7XG4gICAgICB2YXIgdHlwZSA9IHByb3AudHlwZSxcbiAgICAgICAgdHJpZ2dlcnNCb3VuZHMgPSBwcm9wLnRyaWdnZXJzQm91bmRzO1xuICAgICAgZWRnZUFycm93LnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB0cmlnZ2Vyc0JvdW5kczogdHJpZ2dlcnNCb3VuZHNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB7fSk7XG4gIHZhciBwcm9wcyA9IHN0eWZuJDIucHJvcGVydGllcyA9IFtdLmNvbmNhdChiZWhhdmlvciwgdHJhbnNpdGlvbiwgdmlzaWJpbGl0eSwgb3ZlcmxheSwgdW5kZXJsYXksIGdob3N0LCBjb21tb25MYWJlbCwgbGFiZWxEaW1lbnNpb25zLCBtYWluTGFiZWwsIHNvdXJjZUxhYmVsLCB0YXJnZXRMYWJlbCwgbm9kZUJvZHksIG5vZGVCb3JkZXIsIG5vZGVPdXRsaW5lLCBiYWNrZ3JvdW5kSW1hZ2UsIHBpZSwgY29tcG91bmQsIGVkZ2VMaW5lLCBlZGdlQXJyb3csIGNvcmUpO1xuICB2YXIgcHJvcEdyb3VwcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cHMgPSB7XG4gICAgLy8gY29tbW9uIHRvIGFsbCBlbGVzXG4gICAgYmVoYXZpb3I6IGJlaGF2aW9yLFxuICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24sXG4gICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eSxcbiAgICBvdmVybGF5OiBvdmVybGF5LFxuICAgIHVuZGVybGF5OiB1bmRlcmxheSxcbiAgICBnaG9zdDogZ2hvc3QsXG4gICAgLy8gbGFiZWxzXG4gICAgY29tbW9uTGFiZWw6IGNvbW1vbkxhYmVsLFxuICAgIGxhYmVsRGltZW5zaW9uczogbGFiZWxEaW1lbnNpb25zLFxuICAgIG1haW5MYWJlbDogbWFpbkxhYmVsLFxuICAgIHNvdXJjZUxhYmVsOiBzb3VyY2VMYWJlbCxcbiAgICB0YXJnZXRMYWJlbDogdGFyZ2V0TGFiZWwsXG4gICAgLy8gbm9kZSBwcm9wc1xuICAgIG5vZGVCb2R5OiBub2RlQm9keSxcbiAgICBub2RlQm9yZGVyOiBub2RlQm9yZGVyLFxuICAgIG5vZGVPdXRsaW5lOiBub2RlT3V0bGluZSxcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGJhY2tncm91bmRJbWFnZSxcbiAgICBwaWU6IHBpZSxcbiAgICBjb21wb3VuZDogY29tcG91bmQsXG4gICAgLy8gZWRnZSBwcm9wc1xuICAgIGVkZ2VMaW5lOiBlZGdlTGluZSxcbiAgICBlZGdlQXJyb3c6IGVkZ2VBcnJvdyxcbiAgICBjb3JlOiBjb3JlXG4gIH07XG4gIHZhciBwcm9wR3JvdXBOYW1lcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cE5hbWVzID0ge307XG4gIHZhciBwcm9wR3JvdXBLZXlzID0gc3R5Zm4kMi5wcm9wZXJ0eUdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKHByb3BHcm91cHMpO1xuICBwcm9wR3JvdXBLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHByb3BHcm91cE5hbWVzW2tleV0gPSBwcm9wR3JvdXBzW2tleV0ubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcC5uYW1lO1xuICAgIH0pO1xuICAgIHByb3BHcm91cHNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcC5ncm91cEtleSA9IGtleTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gZGVmaW5lIGFsaWFzZXNcbiAgdmFyIGFsaWFzZXMgPSBzdHlmbiQyLmFsaWFzZXMgPSBbe1xuICAgIG5hbWU6ICdjb250ZW50JyxcbiAgICBwb2ludHNUbzogJ2xhYmVsJ1xuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2UnLFxuICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnXG4gIH0sIHtcbiAgICBuYW1lOiAnY29udHJvbC1wb2ludC13ZWlnaHQnLFxuICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC13ZWlnaHRzJ1xuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtZGlzdGFuY2UnLFxuICAgIHBvaW50c1RvOiAnc2VnbWVudC1kaXN0YW5jZXMnXG4gIH0sIHtcbiAgICBuYW1lOiAnc2VnbWVudC13ZWlnaHQnLFxuICAgIHBvaW50c1RvOiAnc2VnbWVudC13ZWlnaHRzJ1xuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtcmFkaXVzJyxcbiAgICBwb2ludHNUbzogJ3NlZ21lbnQtcmFkaWknXG4gIH0sIHtcbiAgICBuYW1lOiAnZWRnZS10ZXh0LXJvdGF0aW9uJyxcbiAgICBwb2ludHNUbzogJ3RleHQtcm90YXRpb24nXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1sZWZ0JyxcbiAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1yaWdodCcsXG4gICAgcG9pbnRzVG86ICdwYWRkaW5nJ1xuICB9LCB7XG4gICAgbmFtZTogJ3BhZGRpbmctdG9wJyxcbiAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1ib3R0b20nLFxuICAgIHBvaW50c1RvOiAncGFkZGluZydcbiAgfV07XG5cbiAgLy8gbGlzdCBvZiBwcm9wZXJ0eSBuYW1lc1xuICBzdHlmbiQyLnByb3BlcnR5TmFtZXMgPSBwcm9wcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcC5uYW1lO1xuICB9KTtcblxuICAvLyBhbGxvdyBhY2Nlc3Mgb2YgcHJvcGVydGllcyBieSBuYW1lICggZS5nLiBzdHlsZS5wcm9wZXJ0aWVzLmhlaWdodCApXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBwcm9wcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcHJvcCA9IHByb3BzW19pXTtcbiAgICBwcm9wc1twcm9wLm5hbWVdID0gcHJvcDsgLy8gYWxsb3cgbG9va3VwIGJ5IG5hbWVcbiAgfVxuXG4gIC8vIG1hcCBhbGlhc2VzXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGFsaWFzZXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBhbGlhcyA9IGFsaWFzZXNbX2kyXTtcbiAgICB2YXIgcG9pbnRzVG9Qcm9wID0gcHJvcHNbYWxpYXMucG9pbnRzVG9dO1xuICAgIHZhciBhbGlhc1Byb3AgPSB7XG4gICAgICBuYW1lOiBhbGlhcy5uYW1lLFxuICAgICAgYWxpYXM6IHRydWUsXG4gICAgICBwb2ludHNUbzogcG9pbnRzVG9Qcm9wXG4gICAgfTtcblxuICAgIC8vIGFkZCBhbGlhcyBwcm9wIGZvciBwYXJzaW5nXG4gICAgcHJvcHMucHVzaChhbGlhc1Byb3ApO1xuICAgIHByb3BzW2FsaWFzLm5hbWVdID0gYWxpYXNQcm9wOyAvLyBhbGxvdyBsb29rdXAgYnkgbmFtZVxuICB9XG59KSgpO1xuXG5zdHlmbiQyLmdldERlZmF1bHRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKClbbmFtZV07XG59O1xuc3R5Zm4kMi5nZXREZWZhdWx0UHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgaWYgKF9wLmRlZmF1bHRQcm9wZXJ0aWVzICE9IG51bGwpIHtcbiAgICByZXR1cm4gX3AuZGVmYXVsdFByb3BlcnRpZXM7XG4gIH1cbiAgdmFyIHJhd1Byb3BzID0gZXh0ZW5kKHtcbiAgICAvLyBjb3JlIHByb3BzXG4gICAgJ3NlbGVjdGlvbi1ib3gtY29sb3InOiAnI2RkZCcsXG4gICAgJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eSc6IDAuNjUsXG4gICAgJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJzogJyNhYWEnLFxuICAgICdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCc6IDEsXG4gICAgJ2FjdGl2ZS1iZy1jb2xvcic6ICdibGFjaycsXG4gICAgJ2FjdGl2ZS1iZy1vcGFjaXR5JzogMC4xNSxcbiAgICAnYWN0aXZlLWJnLXNpemUnOiAzMCxcbiAgICAnb3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yJzogJyMwMDAnLFxuICAgICdvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSc6IDAuMTI1LFxuICAgIC8vIGNvbW1vbiBub2RlL2VkZ2UgcHJvcHNcbiAgICAnZXZlbnRzJzogJ3llcycsXG4gICAgJ3RleHQtZXZlbnRzJzogJ25vJyxcbiAgICAndGV4dC12YWxpZ24nOiAndG9wJyxcbiAgICAndGV4dC1oYWxpZ24nOiAnY2VudGVyJyxcbiAgICAndGV4dC1qdXN0aWZpY2F0aW9uJzogJ2F1dG8nLFxuICAgICdsaW5lLWhlaWdodCc6IDEsXG4gICAgJ2NvbG9yJzogJyMwMDAnLFxuICAgICd0ZXh0LW91dGxpbmUtY29sb3InOiAnIzAwMCcsXG4gICAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDAsXG4gICAgJ3RleHQtb3V0bGluZS1vcGFjaXR5JzogMSxcbiAgICAndGV4dC1vcGFjaXR5JzogMSxcbiAgICAndGV4dC1kZWNvcmF0aW9uJzogJ25vbmUnLFxuICAgICd0ZXh0LXRyYW5zZm9ybSc6ICdub25lJyxcbiAgICAndGV4dC13cmFwJzogJ25vbmUnLFxuICAgICd0ZXh0LW92ZXJmbG93LXdyYXAnOiAnd2hpdGVzcGFjZScsXG4gICAgJ3RleHQtbWF4LXdpZHRoJzogOTk5OSxcbiAgICAndGV4dC1iYWNrZ3JvdW5kLWNvbG9yJzogJyMwMDAnLFxuICAgICd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSc6IDAsXG4gICAgJ3RleHQtYmFja2dyb3VuZC1zaGFwZSc6ICdyZWN0YW5nbGUnLFxuICAgICd0ZXh0LWJhY2tncm91bmQtcGFkZGluZyc6IDAsXG4gICAgJ3RleHQtYm9yZGVyLW9wYWNpdHknOiAwLFxuICAgICd0ZXh0LWJvcmRlci13aWR0aCc6IDAsXG4gICAgJ3RleHQtYm9yZGVyLXN0eWxlJzogJ3NvbGlkJyxcbiAgICAndGV4dC1ib3JkZXItY29sb3InOiAnIzAwMCcsXG4gICAgJ2ZvbnQtZmFtaWx5JzogJ0hlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYnLFxuICAgICdmb250LXN0eWxlJzogJ25vcm1hbCcsXG4gICAgJ2ZvbnQtd2VpZ2h0JzogJ25vcm1hbCcsXG4gICAgJ2ZvbnQtc2l6ZSc6IDE2LFxuICAgICdtaW4tem9vbWVkLWZvbnQtc2l6ZSc6IDAsXG4gICAgJ3RleHQtcm90YXRpb24nOiAnbm9uZScsXG4gICAgJ3NvdXJjZS10ZXh0LXJvdGF0aW9uJzogJ25vbmUnLFxuICAgICd0YXJnZXQtdGV4dC1yb3RhdGlvbic6ICdub25lJyxcbiAgICAndmlzaWJpbGl0eSc6ICd2aXNpYmxlJyxcbiAgICAnZGlzcGxheSc6ICdlbGVtZW50JyxcbiAgICAnb3BhY2l0eSc6IDEsXG4gICAgJ3otY29tcG91bmQtZGVwdGgnOiAnYXV0bycsXG4gICAgJ3otaW5kZXgtY29tcGFyZSc6ICdhdXRvJyxcbiAgICAnei1pbmRleCc6IDAsXG4gICAgJ2xhYmVsJzogJycsXG4gICAgJ3RleHQtbWFyZ2luLXgnOiAwLFxuICAgICd0ZXh0LW1hcmdpbi15JzogMCxcbiAgICAnc291cmNlLWxhYmVsJzogJycsXG4gICAgJ3NvdXJjZS10ZXh0LW9mZnNldCc6IDAsXG4gICAgJ3NvdXJjZS10ZXh0LW1hcmdpbi14JzogMCxcbiAgICAnc291cmNlLXRleHQtbWFyZ2luLXknOiAwLFxuICAgICd0YXJnZXQtbGFiZWwnOiAnJyxcbiAgICAndGFyZ2V0LXRleHQtb2Zmc2V0JzogMCxcbiAgICAndGFyZ2V0LXRleHQtbWFyZ2luLXgnOiAwLFxuICAgICd0YXJnZXQtdGV4dC1tYXJnaW4teSc6IDAsXG4gICAgJ292ZXJsYXktb3BhY2l0eSc6IDAsXG4gICAgJ292ZXJsYXktY29sb3InOiAnIzAwMCcsXG4gICAgJ292ZXJsYXktcGFkZGluZyc6IDEwLFxuICAgICdvdmVybGF5LXNoYXBlJzogJ3JvdW5kLXJlY3RhbmdsZScsXG4gICAgJ292ZXJsYXktY29ybmVyLXJhZGl1cyc6ICdhdXRvJyxcbiAgICAndW5kZXJsYXktb3BhY2l0eSc6IDAsXG4gICAgJ3VuZGVybGF5LWNvbG9yJzogJyMwMDAnLFxuICAgICd1bmRlcmxheS1wYWRkaW5nJzogMTAsXG4gICAgJ3VuZGVybGF5LXNoYXBlJzogJ3JvdW5kLXJlY3RhbmdsZScsXG4gICAgJ3VuZGVybGF5LWNvcm5lci1yYWRpdXMnOiAnYXV0bycsXG4gICAgJ3RyYW5zaXRpb24tcHJvcGVydHknOiAnbm9uZScsXG4gICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nOiAwLFxuICAgICd0cmFuc2l0aW9uLWRlbGF5JzogMCxcbiAgICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nOiAnbGluZWFyJyxcbiAgICAvLyBub2RlIHByb3BzXG4gICAgJ2JhY2tncm91bmQtYmxhY2tlbic6IDAsXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzk5OScsXG4gICAgJ2JhY2tncm91bmQtZmlsbCc6ICdzb2xpZCcsXG4gICAgJ2JhY2tncm91bmQtb3BhY2l0eSc6IDEsXG4gICAgJ2JhY2tncm91bmQtaW1hZ2UnOiAnbm9uZScsXG4gICAgJ2JhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4nOiAnYW5vbnltb3VzJyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JzogMSxcbiAgICAnYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCc6ICdpbnNpZGUnLFxuICAgICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyc6ICd5ZXMnLFxuICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOiAnNTAlJyxcbiAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi15JzogJzUwJScsXG4gICAgJ2JhY2tncm91bmQtb2Zmc2V0LXgnOiAwLFxuICAgICdiYWNrZ3JvdW5kLW9mZnNldC15JzogMCxcbiAgICAnYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byc6ICdpbmNsdWRlLXBhZGRpbmcnLFxuICAgICdiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byc6ICdpbmNsdWRlLXBhZGRpbmcnLFxuICAgICdiYWNrZ3JvdW5kLXJlcGVhdCc6ICduby1yZXBlYXQnLFxuICAgICdiYWNrZ3JvdW5kLWZpdCc6ICdub25lJyxcbiAgICAnYmFja2dyb3VuZC1jbGlwJzogJ25vZGUnLFxuICAgICdiYWNrZ3JvdW5kLXdpZHRoJzogJ2F1dG8nLFxuICAgICdiYWNrZ3JvdW5kLWhlaWdodCc6ICdhdXRvJyxcbiAgICAnYm9yZGVyLWNvbG9yJzogJyMwMDAnLFxuICAgICdib3JkZXItb3BhY2l0eSc6IDEsXG4gICAgJ2JvcmRlci13aWR0aCc6IDAsXG4gICAgJ2JvcmRlci1zdHlsZSc6ICdzb2xpZCcsXG4gICAgJ2JvcmRlci1kYXNoLXBhdHRlcm4nOiBbNCwgMl0sXG4gICAgJ2JvcmRlci1kYXNoLW9mZnNldCc6IDAsXG4gICAgJ2JvcmRlci1jYXAnOiAnYnV0dCcsXG4gICAgJ2JvcmRlci1qb2luJzogJ21pdGVyJyxcbiAgICAnYm9yZGVyLXBvc2l0aW9uJzogJ2NlbnRlcicsXG4gICAgJ291dGxpbmUtY29sb3InOiAnIzk5OScsXG4gICAgJ291dGxpbmUtb3BhY2l0eSc6IDEsXG4gICAgJ291dGxpbmUtd2lkdGgnOiAwLFxuICAgICdvdXRsaW5lLW9mZnNldCc6IDAsXG4gICAgJ291dGxpbmUtc3R5bGUnOiAnc29saWQnLFxuICAgICdoZWlnaHQnOiAzMCxcbiAgICAnd2lkdGgnOiAzMCxcbiAgICAnc2hhcGUnOiAnZWxsaXBzZScsXG4gICAgJ3NoYXBlLXBvbHlnb24tcG9pbnRzJzogJy0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxJyxcbiAgICAnY29ybmVyLXJhZGl1cyc6ICdhdXRvJyxcbiAgICAnYm91bmRzLWV4cGFuc2lvbic6IDAsXG4gICAgLy8gbm9kZSBncmFkaWVudFxuICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbic6ICd0by1ib3R0b20nLFxuICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzJzogJyM5OTknLFxuICAgICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zJzogJzAlJyxcbiAgICAvLyBnaG9zdCBwcm9wc1xuICAgICdnaG9zdCc6ICdubycsXG4gICAgJ2dob3N0LW9mZnNldC15JzogMCxcbiAgICAnZ2hvc3Qtb2Zmc2V0LXgnOiAwLFxuICAgICdnaG9zdC1vcGFjaXR5JzogMCxcbiAgICAvLyBjb21wb3VuZCBwcm9wc1xuICAgICdwYWRkaW5nJzogMCxcbiAgICAncGFkZGluZy1yZWxhdGl2ZS10byc6ICd3aWR0aCcsXG4gICAgJ3Bvc2l0aW9uJzogJ29yaWdpbicsXG4gICAgJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJzogJ2luY2x1ZGUnLFxuICAgICdtaW4td2lkdGgnOiAwLFxuICAgICdtaW4td2lkdGgtYmlhcy1sZWZ0JzogMCxcbiAgICAnbWluLXdpZHRoLWJpYXMtcmlnaHQnOiAwLFxuICAgICdtaW4taGVpZ2h0JzogMCxcbiAgICAnbWluLWhlaWdodC1iaWFzLXRvcCc6IDAsXG4gICAgJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nOiAwXG4gIH0sIHtcbiAgICAvLyBub2RlIHBpZSBiZ1xuICAgICdwaWUtc2l6ZSc6ICcxMDAlJ1xuICB9LCBbe1xuICAgIG5hbWU6ICdwaWUte3tpfX0tYmFja2dyb3VuZC1jb2xvcicsXG4gICAgdmFsdWU6ICdibGFjaydcbiAgfSwge1xuICAgIG5hbWU6ICdwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplJyxcbiAgICB2YWx1ZTogJzAlJ1xuICB9LCB7XG4gICAgbmFtZTogJ3BpZS17e2l9fS1iYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgIHZhbHVlOiAxXG4gIH1dLnJlZHVjZShmdW5jdGlvbiAoY3NzLCBwcm9wKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc3R5Zm4kMi5waWVCYWNrZ3JvdW5kTjsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHByb3AubmFtZS5yZXBsYWNlKCd7e2l9fScsIGkpO1xuICAgICAgdmFyIHZhbCA9IHByb3AudmFsdWU7XG4gICAgICBjc3NbbmFtZV0gPSB2YWw7XG4gICAgfVxuICAgIHJldHVybiBjc3M7XG4gIH0sIHt9KSwge1xuICAgIC8vIGVkZ2UgcHJvcHNcbiAgICAnbGluZS1zdHlsZSc6ICdzb2xpZCcsXG4gICAgJ2xpbmUtY29sb3InOiAnIzk5OScsXG4gICAgJ2xpbmUtZmlsbCc6ICdzb2xpZCcsXG4gICAgJ2xpbmUtY2FwJzogJ2J1dHQnLFxuICAgICdsaW5lLW9wYWNpdHknOiAxLFxuICAgICdsaW5lLW91dGxpbmUtd2lkdGgnOiAwLFxuICAgICdsaW5lLW91dGxpbmUtY29sb3InOiAnIzAwMCcsXG4gICAgJ2xpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMnOiAnIzk5OScsXG4gICAgJ2xpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnOiAnMCUnLFxuICAgICdjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSc6IDQwLFxuICAgICdjb250cm9sLXBvaW50LXdlaWdodHMnOiAwLjUsXG4gICAgJ3NlZ21lbnQtd2VpZ2h0cyc6IDAuNSxcbiAgICAnc2VnbWVudC1kaXN0YW5jZXMnOiAyMCxcbiAgICAnc2VnbWVudC1yYWRpaSc6IDE1LFxuICAgICdyYWRpdXMtdHlwZSc6ICdhcmMtcmFkaXVzJyxcbiAgICAndGF4aS10dXJuJzogJzUwJScsXG4gICAgJ3RheGktcmFkaXVzJzogMTUsXG4gICAgJ3RheGktdHVybi1taW4tZGlzdGFuY2UnOiAxMCxcbiAgICAndGF4aS1kaXJlY3Rpb24nOiAnYXV0bycsXG4gICAgJ2VkZ2UtZGlzdGFuY2VzJzogJ2ludGVyc2VjdGlvbicsXG4gICAgJ2N1cnZlLXN0eWxlJzogJ2hheXN0YWNrJyxcbiAgICAnaGF5c3RhY2stcmFkaXVzJzogMCxcbiAgICAnYXJyb3ctc2NhbGUnOiAxLFxuICAgICdsb29wLWRpcmVjdGlvbic6ICctNDVkZWcnLFxuICAgICdsb29wLXN3ZWVwJzogJy05MGRlZycsXG4gICAgJ3NvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUnOiAwLFxuICAgICd0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlJzogMCxcbiAgICAnc291cmNlLWVuZHBvaW50JzogJ291dHNpZGUtdG8tbm9kZScsXG4gICAgJ3RhcmdldC1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLW5vZGUnLFxuICAgICdsaW5lLWRhc2gtcGF0dGVybic6IFs2LCAzXSxcbiAgICAnbGluZS1kYXNoLW9mZnNldCc6IDBcbiAgfSwgW3tcbiAgICBuYW1lOiAnYXJyb3ctc2hhcGUnLFxuICAgIHZhbHVlOiAnbm9uZSdcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy1jb2xvcicsXG4gICAgdmFsdWU6ICcjOTk5J1xuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LWZpbGwnLFxuICAgIHZhbHVlOiAnZmlsbGVkJ1xuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LXdpZHRoJyxcbiAgICB2YWx1ZTogMVxuICB9XS5yZWR1Y2UoZnVuY3Rpb24gKGNzcywgcHJvcCkge1xuICAgIHN0eWZuJDIuYXJyb3dQcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICAgIHZhciBuYW1lID0gcHJlZml4ICsgJy0nICsgcHJvcC5uYW1lO1xuICAgICAgdmFyIHZhbCA9IHByb3AudmFsdWU7XG4gICAgICBjc3NbbmFtZV0gPSB2YWw7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzcztcbiAgfSwge30pKTtcbiAgdmFyIHBhcnNlZFByb3BzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSB0aGlzLnByb3BlcnRpZXNbaV07XG4gICAgaWYgKHByb3AucG9pbnRzVG8pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IHByb3AubmFtZTtcbiAgICB2YXIgdmFsID0gcmF3UHJvcHNbbmFtZV07XG4gICAgdmFyIHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKG5hbWUsIHZhbCk7XG4gICAgcGFyc2VkUHJvcHNbbmFtZV0gPSBwYXJzZWRQcm9wO1xuICB9XG4gIF9wLmRlZmF1bHRQcm9wZXJ0aWVzID0gcGFyc2VkUHJvcHM7XG4gIHJldHVybiBfcC5kZWZhdWx0UHJvcGVydGllcztcbn07XG5zdHlmbiQyLmFkZERlZmF1bHRTdHlsZXNoZWV0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlbGVjdG9yKCc6cGFyZW50JykuY3NzKHtcbiAgICAnc2hhcGUnOiAncmVjdGFuZ2xlJyxcbiAgICAncGFkZGluZyc6IDEwLFxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNlZWUnLFxuICAgICdib3JkZXItY29sb3InOiAnI2NjYycsXG4gICAgJ2JvcmRlci13aWR0aCc6IDFcbiAgfSkuc2VsZWN0b3IoJ2VkZ2UnKS5jc3Moe1xuICAgICd3aWR0aCc6IDNcbiAgfSkuc2VsZWN0b3IoJzpsb29wJykuY3NzKHtcbiAgICAnY3VydmUtc3R5bGUnOiAnYmV6aWVyJ1xuICB9KS5zZWxlY3RvcignZWRnZTpjb21wb3VuZCcpLmNzcyh7XG4gICAgJ2N1cnZlLXN0eWxlJzogJ2JlemllcicsXG4gICAgJ3NvdXJjZS1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLWxpbmUnLFxuICAgICd0YXJnZXQtZW5kcG9pbnQnOiAnb3V0c2lkZS10by1saW5lJ1xuICB9KS5zZWxlY3RvcignOnNlbGVjdGVkJykuY3NzKHtcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjMDE2OUQ5JyxcbiAgICAnbGluZS1jb2xvcic6ICcjMDE2OUQ5JyxcbiAgICAnc291cmNlLWFycm93LWNvbG9yJzogJyMwMTY5RDknLFxuICAgICd0YXJnZXQtYXJyb3ctY29sb3InOiAnIzAxNjlEOScsXG4gICAgJ21pZC1zb3VyY2UtYXJyb3ctY29sb3InOiAnIzAxNjlEOScsXG4gICAgJ21pZC10YXJnZXQtYXJyb3ctY29sb3InOiAnIzAxNjlEOSdcbiAgfSkuc2VsZWN0b3IoJzpwYXJlbnQ6c2VsZWN0ZWQnKS5jc3Moe1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNDQ0UxRjknLFxuICAgICdib3JkZXItY29sb3InOiAnI2FlYzhlNSdcbiAgfSkuc2VsZWN0b3IoJzphY3RpdmUnKS5jc3Moe1xuICAgICdvdmVybGF5LWNvbG9yJzogJ2JsYWNrJyxcbiAgICAnb3ZlcmxheS1wYWRkaW5nJzogMTAsXG4gICAgJ292ZXJsYXktb3BhY2l0eSc6IDAuMjVcbiAgfSk7XG4gIHRoaXMuZGVmYXVsdExlbmd0aCA9IHRoaXMubGVuZ3RoO1xufTtcblxudmFyIHN0eWZuJDEgPSB7fTtcblxuLy8gYSBjYWNoaW5nIGxheWVyIGZvciBwcm9wZXJ0eSBwYXJzaW5nXG5zdHlmbiQxLnBhcnNlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGZ1bmN0aW9uIHZhbHVlcyBjYW4ndCBiZSBjYWNoZWQgaW4gYWxsIGNhc2VzLCBhbmQgdGhlcmUgaXNuJ3QgbXVjaCBiZW5lZml0IG9mIGNhY2hpbmcgdGhlbSBhbnl3YXlcbiAgaWYgKGZuJDYodmFsdWUpKSB7XG4gICAgcmV0dXJuIHNlbGYucGFyc2VJbXBsV2FybihuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KTtcbiAgfVxuICB2YXIgZmxhdEtleSA9IHByb3BJc0ZsYXQgPT09ICdtYXBwaW5nJyB8fCBwcm9wSXNGbGF0ID09PSB0cnVlIHx8IHByb3BJc0ZsYXQgPT09IGZhbHNlIHx8IHByb3BJc0ZsYXQgPT0gbnVsbCA/ICdkb250Y2FyZScgOiBwcm9wSXNGbGF0O1xuICB2YXIgYnlwYXNzS2V5ID0gcHJvcElzQnlwYXNzID8gJ3QnIDogJ2YnO1xuICB2YXIgdmFsdWVLZXkgPSAnJyArIHZhbHVlO1xuICB2YXIgYXJnSGFzaCA9IGhhc2hTdHJpbmdzKG5hbWUsIHZhbHVlS2V5LCBieXBhc3NLZXksIGZsYXRLZXkpO1xuICB2YXIgcHJvcENhY2hlID0gc2VsZi5wcm9wQ2FjaGUgPSBzZWxmLnByb3BDYWNoZSB8fCBbXTtcbiAgdmFyIHJldDtcbiAgaWYgKCEocmV0ID0gcHJvcENhY2hlW2FyZ0hhc2hdKSkge1xuICAgIHJldCA9IHByb3BDYWNoZVthcmdIYXNoXSA9IHNlbGYucGFyc2VJbXBsV2FybihuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KTtcbiAgfVxuXG4gIC8vIC0gYnlwYXNzZXMgY2FuJ3QgYmUgc2hhcmVkIGIvYyB0aGUgdmFsdWUgY2FuIGJlIGNoYW5nZWQgYnkgYW5pbWF0aW9ucyBvciBvdGhlcndpc2Ugb3ZlcnJpZGRlblxuICAvLyAtIG1hcHBpbmdzIGNhbid0IGJlIHNoYXJlZCBiL2MgbWFwcGluZ3MgYXJlIHBlci1lbGVtZW50XG4gIGlmIChwcm9wSXNCeXBhc3MgfHwgcHJvcElzRmxhdCA9PT0gJ21hcHBpbmcnKSB7XG4gICAgLy8gbmVlZCBhIGNvcHkgc2luY2UgcHJvcHMgYXJlIG11dGF0ZWQgbGF0ZXIgaW4gdGhlaXIgbGlmZWN5Y2xlc1xuICAgIHJldCA9IGNvcHkocmV0KTtcbiAgICBpZiAocmV0KSB7XG4gICAgICByZXQudmFsdWUgPSBjb3B5KHJldC52YWx1ZSk7IC8vIGJlY2F1c2UgaXQgY291bGQgYmUgYW4gYXJyYXksIGUuZy4gY29sb3VyXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5zdHlmbiQxLnBhcnNlSW1wbFdhcm4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCkge1xuICB2YXIgcHJvcCA9IHRoaXMucGFyc2VJbXBsKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpO1xuICBpZiAoIXByb3AgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIHdhcm4oXCJUaGUgc3R5bGUgcHJvcGVydHkgYFwiLmNvbmNhdChuYW1lLCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCJgIGlzIGludmFsaWRcIikpO1xuICB9XG4gIGlmIChwcm9wICYmIChwcm9wLm5hbWUgPT09ICd3aWR0aCcgfHwgcHJvcC5uYW1lID09PSAnaGVpZ2h0JykgJiYgdmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICB3YXJuKCdUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgJyArIHByb3AubmFtZSArICdgJyk7XG4gIH1cbiAgcmV0dXJuIHByb3A7XG59O1xuXG4vLyBwYXJzZSBhIHByb3BlcnR5OyByZXR1cm4gbnVsbCBvbiBpbnZhbGlkOyByZXR1cm4gcGFyc2VkIHByb3BlcnR5IG90aGVyd2lzZVxuLy8gZmllbGRzIDpcbi8vIC0gbmFtZSA6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eVxuLy8gLSB2YWx1ZSA6IHRoZSBwYXJzZWQsIG5hdGl2ZS10eXBlZCB2YWx1ZSBvZiB0aGUgcHJvcGVydHlcbi8vIC0gc3RyVmFsdWUgOiBhIHN0cmluZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHByb3BlcnR5IHZhbHVlIGluIHZhbGlkIGNzc1xuLy8gLSBieXBhc3MgOiB0cnVlIGlmZiB0aGUgcHJvcGVydHkgaXMgYSBieXBhc3MgcHJvcGVydHlcbnN0eWZuJDEucGFyc2VJbXBsID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwcm9wSXNCeXBhc3MsIHByb3BJc0ZsYXQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBuYW1lID0gY2FtZWwyZGFzaChuYW1lKTsgLy8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGluIGRhc2ggZm9ybSAoZS5nLiAncHJvcGVydHktbmFtZScgbm90ICdwcm9wZXJ0eU5hbWUnKVxuXG4gIHZhciBwcm9wZXJ0eSA9IHNlbGYucHJvcGVydGllc1tuYW1lXTtcbiAgdmFyIHBhc3NlZFZhbHVlID0gdmFsdWU7XG4gIHZhciB0eXBlcyA9IHNlbGYudHlwZXM7XG4gIGlmICghcHJvcGVydHkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyByZXR1cm4gbnVsbCBvbiBwcm9wZXJ0eSBvZiB1bmtub3duIG5hbWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBjYW4ndCBhc3NpZ24gdW5kZWZpbmVkXG5cbiAgLy8gdGhlIHByb3BlcnR5IG1heSBiZSBhbiBhbGlhc1xuICBpZiAocHJvcGVydHkuYWxpYXMpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5LnBvaW50c1RvO1xuICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuICB9XG4gIHZhciB2YWx1ZUlzU3RyaW5nID0gc3RyaW5nKHZhbHVlKTtcbiAgaWYgKHZhbHVlSXNTdHJpbmcpIHtcbiAgICAvLyB0cmltIHRoZSB2YWx1ZSB0byBtYWtlIHBhcnNpbmcgZWFzaWVyXG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wZXJ0eS50eXBlO1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBubyB0eXBlLCBubyBsdWNrXG5cbiAgLy8gY2hlY2sgaWYgYnlwYXNzIGlzIG51bGwgb3IgZW1wdHkgc3RyaW5nIChpLmUuIGluZGljYXRpb24gdG8gZGVsZXRlIGJ5cGFzcyBwcm9wZXJ0eSlcbiAgaWYgKHByb3BJc0J5cGFzcyAmJiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsKSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgYnlwYXNzOiB0cnVlLFxuICAgICAgZGVsZXRlQnlwYXNzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIC8vIGNoZWNrIGlmIHZhbHVlIGlzIGEgZnVuY3Rpb24gdXNlZCBhcyBhIG1hcHBlclxuICBpZiAoZm4kNih2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHN0clZhbHVlOiAnZm4nLFxuICAgICAgbWFwcGVkOiB0eXBlcy5mbixcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcbiAgfVxuXG4gIC8vIGNoZWNrIGlmIHZhbHVlIGlzIG1hcHBlZFxuICB2YXIgZGF0YSwgbWFwRGF0YTtcbiAgaWYgKCF2YWx1ZUlzU3RyaW5nIHx8IHByb3BJc0ZsYXQgfHwgdmFsdWUubGVuZ3RoIDwgNyB8fCB2YWx1ZVsxXSAhPT0gJ2EnKSA7IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+PSA3ICYmIHZhbHVlWzBdID09PSAnZCcgJiYgKGRhdGEgPSBuZXcgUmVnRXhwKHR5cGVzLmRhdGEucmVnZXgpLmV4ZWModmFsdWUpKSkge1xuICAgIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIG1hcHBlcnMgbm90IGFsbG93ZWQgaW4gYnlwYXNzXG5cbiAgICB2YXIgbWFwcGVkID0gdHlwZXMuZGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgc3RyVmFsdWU6ICcnICsgdmFsdWUsXG4gICAgICBtYXBwZWQ6IG1hcHBlZCxcbiAgICAgIGZpZWxkOiBkYXRhWzFdLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+PSAxMCAmJiB2YWx1ZVswXSA9PT0gJ20nICYmIChtYXBEYXRhID0gbmV3IFJlZ0V4cCh0eXBlcy5tYXBEYXRhLnJlZ2V4KS5leGVjKHZhbHVlKSkpIHtcbiAgICBpZiAocHJvcElzQnlwYXNzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBtYXBwZXJzIG5vdCBhbGxvd2VkIGluIGJ5cGFzc1xuICAgIGlmICh0eXBlLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBpbXBvc3NpYmxlIHRvIG1hcCB0byBudW1cblxuICAgIHZhciBfbWFwcGVkID0gdHlwZXMubWFwRGF0YTtcblxuICAgIC8vIHdlIGNhbiBtYXAgb25seSBpZiB0aGUgdHlwZSBpcyBhIGNvbG91ciBvciBhIG51bWJlclxuICAgIGlmICghKHR5cGUuY29sb3IgfHwgdHlwZS5udW1iZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB2YWx1ZU1pbiA9IHRoaXMucGFyc2UobmFtZSwgbWFwRGF0YVs0XSk7IC8vIHBhcnNlIHRvIHZhbGlkYXRlXG4gICAgaWYgKCF2YWx1ZU1pbiB8fCB2YWx1ZU1pbi5tYXBwZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGNhbid0IGJlIGludmFsaWQgb3IgbWFwcGVkXG5cbiAgICB2YXIgdmFsdWVNYXggPSB0aGlzLnBhcnNlKG5hbWUsIG1hcERhdGFbNV0pOyAvLyBwYXJzZSB0byB2YWxpZGF0ZVxuICAgIGlmICghdmFsdWVNYXggfHwgdmFsdWVNYXgubWFwcGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBjYW4ndCBiZSBpbnZhbGlkIG9yIG1hcHBlZFxuXG4gICAgLy8gY2hlY2sgaWYgdmFsdWVNaW4gYW5kIHZhbHVlTWF4IGFyZSB0aGUgc2FtZVxuICAgIGlmICh2YWx1ZU1pbi5wZlZhbHVlID09PSB2YWx1ZU1heC5wZlZhbHVlIHx8IHZhbHVlTWluLnN0clZhbHVlID09PSB2YWx1ZU1heC5zdHJWYWx1ZSkge1xuICAgICAgd2FybignYCcgKyBuYW1lICsgJzogJyArIHZhbHVlICsgJ2AgaXMgbm90IGEgdmFsaWQgbWFwcGVyIGJlY2F1c2UgdGhlIG91dHB1dCByYW5nZSBpcyB6ZXJvOyBjb252ZXJ0aW5nIHRvIGAnICsgbmFtZSArICc6ICcgKyB2YWx1ZU1pbi5zdHJWYWx1ZSArICdgJyk7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZShuYW1lLCB2YWx1ZU1pbi5zdHJWYWx1ZSk7IC8vIGNhbid0IG1ha2UgbXVjaCBvZiBhIG1hcHBlciB3aXRob3V0IGEgcmFuZ2VcbiAgICB9IGVsc2UgaWYgKHR5cGUuY29sb3IpIHtcbiAgICAgIHZhciBjMSA9IHZhbHVlTWluLnZhbHVlO1xuICAgICAgdmFyIGMyID0gdmFsdWVNYXgudmFsdWU7XG4gICAgICB2YXIgc2FtZSA9IGMxWzBdID09PSBjMlswXSAvLyByZWRcbiAgICAgICYmIGMxWzFdID09PSBjMlsxXSAvLyBncmVlblxuICAgICAgJiYgYzFbMl0gPT09IGMyWzJdIC8vIGJsdWVcbiAgICAgICYmIChcbiAgICAgIC8vIG9wdGlvbmFsIGFscGhhXG4gICAgICBjMVszXSA9PT0gYzJbM10gLy8gc2FtZSBhbHBoYSBvdXRyaWdodFxuICAgICAgfHwgKGMxWzNdID09IG51bGwgfHwgYzFbM10gPT09IDEgLy8gZnVsbCBvcGFjaXR5IGZvciBjb2xvdXIgMT9cbiAgICAgICkgJiYgKGMyWzNdID09IG51bGwgfHwgYzJbM10gPT09IDEpIC8vIGZ1bGwgb3BhY2l0eSBmb3IgY29sb3VyIDI/XG4gICAgICApO1xuXG4gICAgICBpZiAoc2FtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGNhbid0IG1ha2UgYSBtYXBwZXIgd2l0aG91dCBhIHJhbmdlXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbWFwRGF0YSxcbiAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgbWFwcGVkOiBfbWFwcGVkLFxuICAgICAgZmllbGQ6IG1hcERhdGFbMV0sXG4gICAgICBmaWVsZE1pbjogcGFyc2VGbG9hdChtYXBEYXRhWzJdKSxcbiAgICAgIC8vIG1pbiAmIG1heCBhcmUgbnVtZXJpY1xuICAgICAgZmllbGRNYXg6IHBhcnNlRmxvYXQobWFwRGF0YVszXSksXG4gICAgICB2YWx1ZU1pbjogdmFsdWVNaW4udmFsdWUsXG4gICAgICB2YWx1ZU1heDogdmFsdWVNYXgudmFsdWUsXG4gICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUubXVsdGlwbGUgJiYgcHJvcElzRmxhdCAhPT0gJ211bHRpcGxlJykge1xuICAgIHZhciB2YWxzO1xuICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICB2YWxzID0gdmFsdWUuc3BsaXQoL1xccysvKTtcbiAgICB9IGVsc2UgaWYgKGFycmF5KHZhbHVlKSkge1xuICAgICAgdmFscyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxzID0gW3ZhbHVlXTtcbiAgICB9XG4gICAgaWYgKHR5cGUuZXZlbk11bHRpcGxlICYmIHZhbHMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciB2YWxBcnIgPSBbXTtcbiAgICB2YXIgdW5pdHNBcnIgPSBbXTtcbiAgICB2YXIgcGZWYWxBcnIgPSBbXTtcbiAgICB2YXIgc3RyVmFsID0gJyc7XG4gICAgdmFyIGhhc0VudW0gPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwID0gc2VsZi5wYXJzZShuYW1lLCB2YWxzW2ldLCBwcm9wSXNCeXBhc3MsICdtdWx0aXBsZScpO1xuICAgICAgaGFzRW51bSA9IGhhc0VudW0gfHwgc3RyaW5nKHAudmFsdWUpO1xuICAgICAgdmFsQXJyLnB1c2gocC52YWx1ZSk7XG4gICAgICBwZlZhbEFyci5wdXNoKHAucGZWYWx1ZSAhPSBudWxsID8gcC5wZlZhbHVlIDogcC52YWx1ZSk7XG4gICAgICB1bml0c0Fyci5wdXNoKHAudW5pdHMpO1xuICAgICAgc3RyVmFsICs9IChpID4gMCA/ICcgJyA6ICcnKSArIHAuc3RyVmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlLnZhbGlkYXRlICYmICF0eXBlLnZhbGlkYXRlKHZhbEFyciwgdW5pdHNBcnIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGUuc2luZ2xlRW51bSAmJiBoYXNFbnVtKSB7XG4gICAgICBpZiAodmFsQXJyLmxlbmd0aCA9PT0gMSAmJiBzdHJpbmcodmFsQXJyWzBdKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHZhbEFyclswXSxcbiAgICAgICAgICBzdHJWYWx1ZTogdmFsQXJyWzBdLFxuICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsQXJyLFxuICAgICAgcGZWYWx1ZTogcGZWYWxBcnIsXG4gICAgICBzdHJWYWx1ZTogc3RyVmFsLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3MsXG4gICAgICB1bml0czogdW5pdHNBcnJcbiAgICB9O1xuICB9XG5cbiAgLy8gc2V2ZXJhbCB0eXBlcyBhbHNvIGFsbG93IGVudW1zXG4gIHZhciBjaGVja0VudW1zID0gZnVuY3Rpb24gY2hlY2tFbnVtcygpIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdHlwZS5lbnVtcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBlbiA9IHR5cGUuZW51bXNbX2ldO1xuICAgICAgaWYgKGVuID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8vIGNoZWNrIHRoZSB0eXBlIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG9iamVjdFxuICBpZiAodHlwZS5udW1iZXIpIHtcbiAgICB2YXIgdW5pdHM7XG4gICAgdmFyIGltcGxpY2l0VW5pdHMgPSAncHgnOyAvLyBub3Qgc2V0ID0+IHB4XG5cbiAgICBpZiAodHlwZS51bml0cykge1xuICAgICAgLy8gdXNlIHNwZWNpZmllZCB1bml0cyBpZiBzZXRcbiAgICAgIHVuaXRzID0gdHlwZS51bml0cztcbiAgICB9XG4gICAgaWYgKHR5cGUuaW1wbGljaXRVbml0cykge1xuICAgICAgaW1wbGljaXRVbml0cyA9IHR5cGUuaW1wbGljaXRVbml0cztcbiAgICB9XG4gICAgaWYgKCF0eXBlLnVuaXRsZXNzKSB7XG4gICAgICBpZiAodmFsdWVJc1N0cmluZykge1xuICAgICAgICB2YXIgdW5pdHNSZWdleCA9ICdweHxlbScgKyAodHlwZS5hbGxvd1BlcmNlbnQgPyAnfFxcXFwlJyA6ICcnKTtcbiAgICAgICAgaWYgKHVuaXRzKSB7XG4gICAgICAgICAgdW5pdHNSZWdleCA9IHVuaXRzO1xuICAgICAgICB9IC8vIG9ubHkgYWxsb3cgZXhwbGljaXQgdW5pdHMgaWYgc28gc2V0XG4gICAgICAgIHZhciBtYXRjaCA9IHZhbHVlLm1hdGNoKCdeKCcgKyBudW1iZXIgKyAnKSgnICsgdW5pdHNSZWdleCArICcpPycgKyAnJCcpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1hdGNoWzFdO1xuICAgICAgICAgIHVuaXRzID0gbWF0Y2hbMl0gfHwgaW1wbGljaXRVbml0cztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdW5pdHMgfHwgdHlwZS5pbXBsaWNpdFVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gaW1wbGljaXRVbml0czsgLy8gaW1wbGljaXRseSBweCBpZiB1bnNwZWNpZmllZFxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cbiAgICAvLyBpZiBub3QgYSBudW1iZXIgYW5kIGVudW1zIG5vdCBhbGxvd2VkLCB0aGVuIHRoZSB2YWx1ZSBpcyBpbnZhbGlkXG4gICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlLmVudW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoaXMgbnVtYmVyIHR5cGUgYWxzbyBhY2NlcHRzIHNwZWNpYWwga2V5d29yZHMgaW4gcGxhY2Ugb2YgbnVtYmVyc1xuICAgIC8vIChpLmUuIGBsZWZ0YCwgYGF1dG9gLCBldGMpXG4gICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlLmVudW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlID0gcGFzc2VkVmFsdWU7XG4gICAgICByZXR1cm4gY2hlY2tFbnVtcygpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlclxuICAgIGlmICh0eXBlLmludGVnZXIgJiYgIWludGVnZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB2YWx1ZSBpcyB3aXRoaW4gcmFuZ2VcbiAgICBpZiAodHlwZS5taW4gIT09IHVuZGVmaW5lZCAmJiAodmFsdWUgPCB0eXBlLm1pbiB8fCB0eXBlLnN0cmljdE1pbiAmJiB2YWx1ZSA9PT0gdHlwZS5taW4pIHx8IHR5cGUubWF4ICE9PSB1bmRlZmluZWQgJiYgKHZhbHVlID4gdHlwZS5tYXggfHwgdHlwZS5zdHJpY3RNYXggJiYgdmFsdWUgPT09IHR5cGUubWF4KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciByZXQgPSB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgc3RyVmFsdWU6ICcnICsgdmFsdWUgKyAodW5pdHMgPyB1bml0cyA6ICcnKSxcbiAgICAgIHVuaXRzOiB1bml0cyxcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcblxuICAgIC8vIG5vcm1hbGlzZSB2YWx1ZSBpbiBwaXhlbHNcbiAgICBpZiAodHlwZS51bml0bGVzcyB8fCB1bml0cyAhPT0gJ3B4JyAmJiB1bml0cyAhPT0gJ2VtJykge1xuICAgICAgcmV0LnBmVmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnBmVmFsdWUgPSB1bml0cyA9PT0gJ3B4JyB8fCAhdW5pdHMgPyB2YWx1ZSA6IHRoaXMuZ2V0RW1TaXplSW5QaXhlbHMoKSAqIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGlzZSB2YWx1ZSBpbiBtc1xuICAgIGlmICh1bml0cyA9PT0gJ21zJyB8fCB1bml0cyA9PT0gJ3MnKSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAnbXMnID8gdmFsdWUgOiAxMDAwICogdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXNlIHZhbHVlIGluIHJhZFxuICAgIGlmICh1bml0cyA9PT0gJ2RlZycgfHwgdW5pdHMgPT09ICdyYWQnKSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAncmFkJyA/IHZhbHVlIDogZGVnMnJhZCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIHZhbHVlIGluICVcbiAgICBpZiAodW5pdHMgPT09ICclJykge1xuICAgICAgcmV0LnBmVmFsdWUgPSB2YWx1ZSAvIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlLnByb3BMaXN0KSB7XG4gICAgdmFyIHByb3BzID0gW107XG4gICAgdmFyIHByb3BzU3RyID0gJycgKyB2YWx1ZTtcbiAgICBpZiAocHJvcHNTdHIgPT09ICdub25lJykgOyBlbHNlIHtcbiAgICAgIC8vIGdvIG92ZXIgZWFjaCBwcm9wXG5cbiAgICAgIHZhciBwcm9wc1NwbGl0ID0gcHJvcHNTdHIuc3BsaXQoL1xccyosXFxzKnxcXHMrLyk7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwcm9wc1NwbGl0Lmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcHNTcGxpdFtfaTJdLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlbGYucHJvcGVydGllc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKHByb3BOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuKCdgJyArIHByb3BOYW1lICsgJ2AgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgbmFtZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBwcm9wcyxcbiAgICAgIHN0clZhbHVlOiBwcm9wcy5sZW5ndGggPT09IDAgPyAnbm9uZScgOiBwcm9wcy5qb2luKCcgJyksXG4gICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZS5jb2xvcikge1xuICAgIHZhciB0dXBsZSA9IGNvbG9yMnR1cGxlKHZhbHVlKTtcbiAgICBpZiAoIXR1cGxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdHVwbGUsXG4gICAgICBwZlZhbHVlOiB0dXBsZSxcbiAgICAgIHN0clZhbHVlOiAncmdiKCcgKyB0dXBsZVswXSArICcsJyArIHR1cGxlWzFdICsgJywnICsgdHVwbGVbMl0gKyAnKScsXG4gICAgICAvLyBuLmIuIG5vIHNwYWNlcyBiL2Mgb2YgbXVsdGlwbGUgc3VwcG9ydFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUucmVnZXggfHwgdHlwZS5yZWdleGVzKSB7XG4gICAgLy8gZmlyc3QgY2hlY2sgZW51bXNcbiAgICBpZiAodHlwZS5lbnVtcykge1xuICAgICAgdmFyIGVudW1Qcm9wID0gY2hlY2tFbnVtcygpO1xuICAgICAgaWYgKGVudW1Qcm9wKSB7XG4gICAgICAgIHJldHVybiBlbnVtUHJvcDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlZ2V4ZXMgPSB0eXBlLnJlZ2V4ZXMgPyB0eXBlLnJlZ2V4ZXMgOiBbdHlwZS5yZWdleF07XG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgcmVnZXhlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4ZXNbX2kzXSk7IC8vIG1ha2UgYSByZWdleCBmcm9tIHRoZSB0eXBlIHN0cmluZ1xuICAgICAgdmFyIG0gPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIC8vIHJlZ2V4IG1hdGNoZXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB0eXBlLnNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZSA/IG1bMV0gOiBtLFxuICAgICAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBkaWRuJ3QgbWF0Y2ggYW55XG4gIH0gZWxzZSBpZiAodHlwZS5zdHJpbmcpIHtcbiAgICAvLyBqdXN0IHJldHVyblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6ICcnICsgdmFsdWUsXG4gICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlLmVudW1zKSB7XG4gICAgLy8gY2hlY2sgZW51bXMgbGFzdCBiZWNhdXNlIGl0J3MgYSBjb21ibyB0eXBlIGluIG90aGVyc1xuICAgIHJldHVybiBjaGVja0VudW1zKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIG5vdCBhIHR5cGUgd2UgY2FuIGhhbmRsZVxuICB9XG59O1xuXG52YXIgU3R5bGUgPSBmdW5jdGlvbiBTdHlsZShjeSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3R5bGUpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHlsZShjeSk7XG4gIH1cbiAgaWYgKCFjb3JlKGN5KSkge1xuICAgIGVycm9yKCdBIHN0eWxlIG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuX3ByaXZhdGUgPSB7XG4gICAgY3k6IGN5LFxuICAgIGNvcmVTdHlsZToge31cbiAgfTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnJlc2V0VG9EZWZhdWx0KCk7XG59O1xudmFyIHN0eWZuID0gU3R5bGUucHJvdG90eXBlO1xuc3R5Zm4uaW5zdGFuY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnc3R5bGUnO1xufTtcblxuLy8gcmVtb3ZlIGFsbCBjb250ZXh0c1xuc3R5Zm4uY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gIHZhciBjeSA9IF9wLmN5O1xuICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHRoaXNbaV0gPSB1bmRlZmluZWQ7XG4gIH1cbiAgdGhpcy5sZW5ndGggPSAwO1xuICBfcC5jb250ZXh0U3R5bGVzID0ge307XG4gIF9wLnByb3BEaWZmcyA9IHt9O1xuICB0aGlzLmNsZWFuRWxlbWVudHMoZWxlcywgdHJ1ZSk7XG4gIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIGVsZV9wID0gZWxlWzBdLl9wcml2YXRlO1xuICAgIGVsZV9wLnN0eWxlRGlydHkgPSB0cnVlO1xuICAgIGVsZV9wLmFwcGxpZWRJbml0U3R5bGUgPSBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuc3R5Zm4ucmVzZXRUb0RlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2xlYXIoKTtcbiAgdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGJ1aWxkcyBhIHN0eWxlIG9iamVjdCBmb3IgdGhlICdjb3JlJyBzZWxlY3Rvclxuc3R5Zm4uY29yZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb3JlU3R5bGVbcHJvcE5hbWVdIHx8IHRoaXMuZ2V0RGVmYXVsdFByb3BlcnR5KHByb3BOYW1lKTtcbn07XG5cbi8vIGNyZWF0ZSBhIG5ldyBjb250ZXh0IGZyb20gdGhlIHNwZWNpZmllZCBzZWxlY3RvciBzdHJpbmcgYW5kIHN3aXRjaCB0byB0aGF0IGNvbnRleHRcbnN0eWZuLnNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yU3RyKSB7XG4gIC8vICdjb3JlJyBpcyBhIHNwZWNpYWwgY2FzZSBhbmQgZG9lcyBub3QgbmVlZCBhIHNlbGVjdG9yXG4gIHZhciBzZWxlY3RvciA9IHNlbGVjdG9yU3RyID09PSAnY29yZScgPyBudWxsIDogbmV3IFNlbGVjdG9yKHNlbGVjdG9yU3RyKTtcbiAgdmFyIGkgPSB0aGlzLmxlbmd0aCsrOyAvLyBuZXcgY29udGV4dCBtZWFucyBuZXcgaW5kZXhcbiAgdGhpc1tpXSA9IHtcbiAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgcHJvcGVydGllczogW10sXG4gICAgbWFwcGVkUHJvcGVydGllczogW10sXG4gICAgaW5kZXg6IGlcbiAgfTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vLyBhZGQgb25lIG9yIG1hbnkgY3NzIHJ1bGVzIHRvIHRoZSBjdXJyZW50IGNvbnRleHRcbnN0eWZuLmNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgdmFyIG1hcCA9IGFyZ3NbMF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW2ldO1xuICAgICAgdmFyIG1hcFZhbCA9IG1hcFtwcm9wLm5hbWVdO1xuICAgICAgaWYgKG1hcFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hcFZhbCA9IG1hcFtkYXNoMmNhbWVsKHByb3AubmFtZSldO1xuICAgICAgfVxuICAgICAgaWYgKG1hcFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3NzUnVsZShwcm9wLm5hbWUsIG1hcFZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgdGhpcy5jc3NSdWxlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICB9XG5cbiAgLy8gZG8gbm90aGluZyBpZiBhcmdzIGFyZSBpbnZhbGlkXG5cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG5zdHlmbi5zdHlsZSA9IHN0eWZuLmNzcztcblxuLy8gYWRkIGEgc2luZ2xlIGNzcyBydWxlIHRvIHRoZSBjdXJyZW50IGNvbnRleHRcbnN0eWZuLmNzc1J1bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgLy8gbmFtZS12YWx1ZSBwYWlyXG4gIHZhciBwcm9wZXJ0eSA9IHRoaXMucGFyc2UobmFtZSwgdmFsdWUpO1xuXG4gIC8vIGFkZCBwcm9wZXJ0eSB0byBjdXJyZW50IGNvbnRleHQgaWYgdmFsaWRcbiAgaWYgKHByb3BlcnR5KSB7XG4gICAgdmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7XG4gICAgdGhpc1tpXS5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgIHRoaXNbaV0ucHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHByb3BlcnR5OyAvLyBhbGxvdyBhY2Nlc3MgYnkgbmFtZSBhcyB3ZWxsXG5cbiAgICBpZiAocHJvcGVydHkubmFtZS5tYXRjaCgvcGllLShcXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSAmJiBwcm9wZXJ0eS52YWx1ZSkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5oYXNQaWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocHJvcGVydHkubWFwcGVkKSB7XG4gICAgICB0aGlzW2ldLm1hcHBlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHRvIGNvcmUgc3R5bGUgaWYgbmVjZXNzYXJ5XG4gICAgdmFyIGN1cnJlbnRTZWxlY3RvcklzQ29yZSA9ICF0aGlzW2ldLnNlbGVjdG9yO1xuICAgIGlmIChjdXJyZW50U2VsZWN0b3JJc0NvcmUpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3Byb3BlcnR5Lm5hbWVdID0gcHJvcGVydHk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuc3R5Zm4uYXBwZW5kID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gIGlmIChzdHlsZXNoZWV0KHN0eWxlKSkge1xuICAgIHN0eWxlLmFwcGVuZFRvU3R5bGUodGhpcyk7XG4gIH0gZWxzZSBpZiAoYXJyYXkoc3R5bGUpKSB7XG4gICAgdGhpcy5hcHBlbmRGcm9tSnNvbihzdHlsZSk7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHN0eWxlKSkge1xuICAgIHRoaXMuYXBwZW5kRnJvbVN0cmluZyhzdHlsZSk7XG4gIH0gLy8geW91IHByb2JhYmx5IHdvdWxkbid0IHdhbnQgdG8gYXBwZW5kIGEgU3R5bGUsIHNpbmNlIHlvdSdkIGR1cGxpY2F0ZSB0aGUgZGVmYXVsdCBwYXJ0c1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc3RhdGljIGZ1bmN0aW9uXG5TdHlsZS5mcm9tSnNvbiA9IGZ1bmN0aW9uIChjeSwganNvbikge1xuICB2YXIgc3R5bGUgPSBuZXcgU3R5bGUoY3kpO1xuICBzdHlsZS5mcm9tSnNvbihqc29uKTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcblN0eWxlLmZyb21TdHJpbmcgPSBmdW5jdGlvbiAoY3ksIHN0cmluZykge1xuICByZXR1cm4gbmV3IFN0eWxlKGN5KS5mcm9tU3RyaW5nKHN0cmluZyk7XG59O1xuW3N0eWZuJDgsIHN0eWZuJDcsIHN0eWZuJDYsIHN0eWZuJDUsIHN0eWZuJDQsIHN0eWZuJDMsIHN0eWZuJDIsIHN0eWZuJDFdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gIGV4dGVuZChzdHlmbiwgcHJvcHMpO1xufSk7XG5TdHlsZS50eXBlcyA9IHN0eWZuLnR5cGVzO1xuU3R5bGUucHJvcGVydGllcyA9IHN0eWZuLnByb3BlcnRpZXM7XG5TdHlsZS5wcm9wZXJ0eUdyb3VwcyA9IHN0eWZuLnByb3BlcnR5R3JvdXBzO1xuU3R5bGUucHJvcGVydHlHcm91cE5hbWVzID0gc3R5Zm4ucHJvcGVydHlHcm91cE5hbWVzO1xuU3R5bGUucHJvcGVydHlHcm91cEtleXMgPSBzdHlmbi5wcm9wZXJ0eUdyb3VwS2V5cztcblxudmFyIGNvcmVmbiQyID0ge1xuICBzdHlsZTogZnVuY3Rpb24gc3R5bGUobmV3U3R5bGUpIHtcbiAgICBpZiAobmV3U3R5bGUpIHtcbiAgICAgIHZhciBzID0gdGhpcy5zZXRTdHlsZShuZXdTdHlsZSk7XG4gICAgICBzLnVwZGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZTtcbiAgfSxcbiAgc2V0U3R5bGU6IGZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoc3R5bGVzaGVldChzdHlsZSkpIHtcbiAgICAgIF9wLnN0eWxlID0gc3R5bGUuZ2VuZXJhdGVTdHlsZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGFycmF5KHN0eWxlKSkge1xuICAgICAgX3Auc3R5bGUgPSBTdHlsZS5mcm9tSnNvbih0aGlzLCBzdHlsZSk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcoc3R5bGUpKSB7XG4gICAgICBfcC5zdHlsZSA9IFN0eWxlLmZyb21TdHJpbmcodGhpcywgc3R5bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfcC5zdHlsZSA9IFN0eWxlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gX3Auc3R5bGU7XG4gIH0sXG4gIC8vIGUuZy4gY3kuZGF0YSgpIGNoYW5nZWQgPT4gcmVjYWxjIGVsZSBtYXBwZXJzXG4gIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZSgpIHtcbiAgICB0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCk7IC8vIGp1c3Qgc2VuZCB0byBhbGwgZWxlc1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFNlbGVjdGlvblR5cGUgPSAnc2luZ2xlJztcbnZhciBjb3JlZm4kMSA9IHtcbiAgYXV0b2xvY2s6IGZ1bmN0aW9uIGF1dG9sb2NrKGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmF1dG9sb2NrID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGF1dG91bmdyYWJpZnk6IGZ1bmN0aW9uIGF1dG91bmdyYWJpZnkoYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeSA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGF1dG91bnNlbGVjdGlmeTogZnVuY3Rpb24gYXV0b3Vuc2VsZWN0aWZ5KGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeSA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgc2VsZWN0aW9uVHlwZTogZnVuY3Rpb24gc2VsZWN0aW9uVHlwZShzZWxUeXBlKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoX3Auc2VsZWN0aW9uVHlwZSA9PSBudWxsKSB7XG4gICAgICBfcC5zZWxlY3Rpb25UeXBlID0gZGVmYXVsdFNlbGVjdGlvblR5cGU7XG4gICAgfVxuICAgIGlmIChzZWxUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzZWxUeXBlID09PSAnYWRkaXRpdmUnIHx8IHNlbFR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIF9wLnNlbGVjdGlvblR5cGUgPSBzZWxUeXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX3Auc2VsZWN0aW9uVHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBhbm5pbmdFbmFibGVkOiBmdW5jdGlvbiBwYW5uaW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1c2VyUGFubmluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHVzZXJQYW5uaW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIHpvb21pbmdFbmFibGVkOiBmdW5jdGlvbiB6b29taW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICB1c2VyWm9vbWluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHVzZXJab29taW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGJveFNlbGVjdGlvbkVuYWJsZWQ6IGZ1bmN0aW9uIGJveFNlbGVjdGlvbkVuYWJsZWQoYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIHBhbjogZnVuY3Rpb24gcGFuKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICB2YXIgZGltLCB2YWwsIGRpbXMsIHgsIHk7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAucGFuKClcbiAgICAgICAgcmV0dXJuIHBhbjtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKHN0cmluZyhhcmdzWzBdKSkge1xuICAgICAgICAgIC8vIC5wYW4oJ3gnKVxuICAgICAgICAgIGRpbSA9IGFyZ3NbMF07XG4gICAgICAgICAgcmV0dXJuIHBhbltkaW1dO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgLy8gLnBhbih7IHg6IDAsIHk6IDEwMCB9KVxuICAgICAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpbXMgPSBhcmdzWzBdO1xuICAgICAgICAgIHggPSBkaW1zLng7XG4gICAgICAgICAgeSA9IGRpbXMueTtcbiAgICAgICAgICBpZiAobnVtYmVyJDEoeCkpIHtcbiAgICAgICAgICAgIHBhbi54ID0geDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bWJlciQxKHkpKSB7XG4gICAgICAgICAgICBwYW4ueSA9IHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIC5wYW4oJ3gnLCAxMDApXG4gICAgICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGRpbSA9IGFyZ3NbMF07XG4gICAgICAgIHZhbCA9IGFyZ3NbMV07XG4gICAgICAgIGlmICgoZGltID09PSAneCcgfHwgZGltID09PSAneScpICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgICAgICBwYW5bZGltXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGludmFsaWRcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBwYW5CeTogZnVuY3Rpb24gcGFuQnkoYXJnMCwgYXJnMSkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBwYW4gPSB0aGlzLl9wcml2YXRlLnBhbjtcbiAgICB2YXIgZGltLCB2YWwsIGRpbXMsIHgsIHk7XG4gICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAocGxhaW5PYmplY3QoYXJnMCkpIHtcbiAgICAgICAgICAvLyAucGFuQnkoeyB4OiAwLCB5OiAxMDAgfSlcbiAgICAgICAgICBkaW1zID0gYXJnc1swXTtcbiAgICAgICAgICB4ID0gZGltcy54O1xuICAgICAgICAgIHkgPSBkaW1zLnk7XG4gICAgICAgICAgaWYgKG51bWJlciQxKHgpKSB7XG4gICAgICAgICAgICBwYW4ueCArPSB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobnVtYmVyJDEoeSkpIHtcbiAgICAgICAgICAgIHBhbi55ICs9IHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIC5wYW5CeSgneCcsIDEwMClcbiAgICAgICAgZGltID0gYXJnMDtcbiAgICAgICAgdmFsID0gYXJnMTtcbiAgICAgICAgaWYgKChkaW0gPT09ICd4JyB8fCBkaW0gPT09ICd5JykgJiYgbnVtYmVyJDEodmFsKSkge1xuICAgICAgICAgIHBhbltkaW1dICs9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGludmFsaWRcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBmaXQ6IGZ1bmN0aW9uIGZpdChlbGVtZW50cywgcGFkZGluZykge1xuICAgIHZhciB2aWV3cG9ydFN0YXRlID0gdGhpcy5nZXRGaXRWaWV3cG9ydChlbGVtZW50cywgcGFkZGluZyk7XG4gICAgaWYgKHZpZXdwb3J0U3RhdGUpIHtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgICBfcC56b29tID0gdmlld3BvcnRTdGF0ZS56b29tO1xuICAgICAgX3AucGFuID0gdmlld3BvcnRTdGF0ZS5wYW47XG4gICAgICB0aGlzLmVtaXQoJ3BhbiB6b29tIHZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgZ2V0Rml0Vmlld3BvcnQ6IGZ1bmN0aW9uIGdldEZpdFZpZXdwb3J0KGVsZW1lbnRzLCBwYWRkaW5nKSB7XG4gICAgaWYgKG51bWJlciQxKGVsZW1lbnRzKSAmJiBwYWRkaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVsZW1lbnRzIGlzIG9wdGlvbmFsXG4gICAgICBwYWRkaW5nID0gZWxlbWVudHM7XG4gICAgICBlbGVtZW50cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkIHx8ICF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBiYjtcbiAgICBpZiAoc3RyaW5nKGVsZW1lbnRzKSkge1xuICAgICAgdmFyIHNlbCA9IGVsZW1lbnRzO1xuICAgICAgZWxlbWVudHMgPSB0aGlzLiQoc2VsKTtcbiAgICB9IGVsc2UgaWYgKGJvdW5kaW5nQm94KGVsZW1lbnRzKSkge1xuICAgICAgLy8gYXNzdW1lIGJiXG4gICAgICB2YXIgYmJlID0gZWxlbWVudHM7XG4gICAgICBiYiA9IHtcbiAgICAgICAgeDE6IGJiZS54MSxcbiAgICAgICAgeTE6IGJiZS55MSxcbiAgICAgICAgeDI6IGJiZS54MixcbiAgICAgICAgeTI6IGJiZS55MlxuICAgICAgfTtcbiAgICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gICAgfSBlbHNlIGlmICghZWxlbWVudE9yQ29sbGVjdGlvbihlbGVtZW50cykpIHtcbiAgICAgIGVsZW1lbnRzID0gdGhpcy5tdXRhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oZWxlbWVudHMpICYmIGVsZW1lbnRzLmVtcHR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNhbid0IGZpdCB0byBub3RoaW5nXG5cbiAgICBiYiA9IGJiIHx8IGVsZW1lbnRzLmJvdW5kaW5nQm94KCk7XG4gICAgdmFyIHcgPSB0aGlzLndpZHRoKCk7XG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCgpO1xuICAgIHZhciB6b29tO1xuICAgIHBhZGRpbmcgPSBudW1iZXIkMShwYWRkaW5nKSA/IHBhZGRpbmcgOiAwO1xuICAgIGlmICghaXNOYU4odykgJiYgIWlzTmFOKGgpICYmIHcgPiAwICYmIGggPiAwICYmICFpc05hTihiYi53KSAmJiAhaXNOYU4oYmIuaCkgJiYgYmIudyA+IDAgJiYgYmIuaCA+IDApIHtcbiAgICAgIHpvb20gPSBNYXRoLm1pbigodyAtIDIgKiBwYWRkaW5nKSAvIGJiLncsIChoIC0gMiAqIHBhZGRpbmcpIC8gYmIuaCk7XG5cbiAgICAgIC8vIGNyb3Agem9vbVxuICAgICAgem9vbSA9IHpvb20gPiB0aGlzLl9wcml2YXRlLm1heFpvb20gPyB0aGlzLl9wcml2YXRlLm1heFpvb20gOiB6b29tO1xuICAgICAgem9vbSA9IHpvb20gPCB0aGlzLl9wcml2YXRlLm1pblpvb20gPyB0aGlzLl9wcml2YXRlLm1pblpvb20gOiB6b29tO1xuICAgICAgdmFyIHBhbiA9IHtcbiAgICAgICAgLy8gbm93IHBhbiB0byBtaWRkbGVcbiAgICAgICAgeDogKHcgLSB6b29tICogKGJiLngxICsgYmIueDIpKSAvIDIsXG4gICAgICAgIHk6IChoIC0gem9vbSAqIChiYi55MSArIGJiLnkyKSkgLyAyXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgICAgcGFuOiBwYW5cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSxcbiAgem9vbVJhbmdlOiBmdW5jdGlvbiB6b29tUmFuZ2UobWluLCBtYXgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgdmFyIG9wdHMgPSBtaW47XG4gICAgICBtaW4gPSBvcHRzLm1pbjtcbiAgICAgIG1heCA9IG9wdHMubWF4O1xuICAgIH1cbiAgICBpZiAobnVtYmVyJDEobWluKSAmJiBudW1iZXIkMShtYXgpICYmIG1pbiA8PSBtYXgpIHtcbiAgICAgIF9wLm1pblpvb20gPSBtaW47XG4gICAgICBfcC5tYXhab29tID0gbWF4O1xuICAgIH0gZWxzZSBpZiAobnVtYmVyJDEobWluKSAmJiBtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPD0gX3AubWF4Wm9vbSkge1xuICAgICAgX3AubWluWm9vbSA9IG1pbjtcbiAgICB9IGVsc2UgaWYgKG51bWJlciQxKG1heCkgJiYgbWluID09PSB1bmRlZmluZWQgJiYgbWF4ID49IF9wLm1pblpvb20pIHtcbiAgICAgIF9wLm1heFpvb20gPSBtYXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBtaW5ab29tOiBmdW5jdGlvbiBtaW5ab29tKHpvb20pIHtcbiAgICBpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5taW5ab29tO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy56b29tUmFuZ2Uoe1xuICAgICAgICBtaW46IHpvb21cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbWF4Wm9vbTogZnVuY3Rpb24gbWF4Wm9vbSh6b29tKSB7XG4gICAgaWYgKHpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUubWF4Wm9vbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuem9vbVJhbmdlKHtcbiAgICAgICAgbWF4OiB6b29tXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGdldFpvb21lZFZpZXdwb3J0OiBmdW5jdGlvbiBnZXRab29tZWRWaWV3cG9ydChwYXJhbXMpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBjdXJyZW50UGFuID0gX3AucGFuO1xuICAgIHZhciBjdXJyZW50Wm9vbSA9IF9wLnpvb207XG4gICAgdmFyIHBvczsgLy8gaW4gcmVuZGVyZWQgcHhcbiAgICB2YXIgem9vbTtcbiAgICB2YXIgYmFpbCA9IGZhbHNlO1xuICAgIGlmICghX3Auem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgIC8vIHpvb21pbmcgZGlzYWJsZWRcbiAgICAgIGJhaWwgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobnVtYmVyJDEocGFyYW1zKSkge1xuICAgICAgLy8gdGhlbiBzZXQgdGhlIHpvb21cbiAgICAgIHpvb20gPSBwYXJhbXM7XG4gICAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChwYXJhbXMpKSB7XG4gICAgICAvLyB0aGVuIHpvb20gYWJvdXQgYSBwb2ludFxuICAgICAgem9vbSA9IHBhcmFtcy5sZXZlbDtcbiAgICAgIGlmIChwYXJhbXMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3MgPSBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwYXJhbXMucG9zaXRpb24sIGN1cnJlbnRab29tLCBjdXJyZW50UGFuKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlbmRlcmVkUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3MgPSBwYXJhbXMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChwb3MgIT0gbnVsbCAmJiAhX3AucGFubmluZ0VuYWJsZWQpIHtcbiAgICAgICAgLy8gcGFubmluZyBkaXNhYmxlZFxuICAgICAgICBiYWlsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjcm9wIHpvb21cbiAgICB6b29tID0gem9vbSA+IF9wLm1heFpvb20gPyBfcC5tYXhab29tIDogem9vbTtcbiAgICB6b29tID0gem9vbSA8IF9wLm1pblpvb20gPyBfcC5taW5ab29tIDogem9vbTtcblxuICAgIC8vIGNhbid0IHpvb20gd2l0aCBpbnZhbGlkIHBhcmFtc1xuICAgIGlmIChiYWlsIHx8ICFudW1iZXIkMSh6b29tKSB8fCB6b29tID09PSBjdXJyZW50Wm9vbSB8fCBwb3MgIT0gbnVsbCAmJiAoIW51bWJlciQxKHBvcy54KSB8fCAhbnVtYmVyJDEocG9zLnkpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwb3MgIT0gbnVsbCkge1xuICAgICAgLy8gc2V0IHpvb20gYWJvdXQgcG9zaXRpb25cbiAgICAgIHZhciBwYW4xID0gY3VycmVudFBhbjtcbiAgICAgIHZhciB6b29tMSA9IGN1cnJlbnRab29tO1xuICAgICAgdmFyIHpvb20yID0gem9vbTtcbiAgICAgIHZhciBwYW4yID0ge1xuICAgICAgICB4OiAtem9vbTIgLyB6b29tMSAqIChwb3MueCAtIHBhbjEueCkgKyBwb3MueCxcbiAgICAgICAgeTogLXpvb20yIC8gem9vbTEgKiAocG9zLnkgLSBwYW4xLnkpICsgcG9zLnlcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB6b29tZWQ6IHRydWUsXG4gICAgICAgIHBhbm5lZDogdHJ1ZSxcbiAgICAgICAgem9vbTogem9vbTIsXG4gICAgICAgIHBhbjogcGFuMlxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8ganVzdCBzZXQgdGhlIHpvb21cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHpvb21lZDogdHJ1ZSxcbiAgICAgICAgcGFubmVkOiBmYWxzZSxcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgICAgcGFuOiBjdXJyZW50UGFuXG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgem9vbTogZnVuY3Rpb24gem9vbShwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGdldFxuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2V0XG4gICAgICB2YXIgdnAgPSB0aGlzLmdldFpvb21lZFZpZXdwb3J0KHBhcmFtcyk7XG4gICAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgICAgaWYgKHZwID09IG51bGwgfHwgIXZwLnpvb21lZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIF9wLnpvb20gPSB2cC56b29tO1xuICAgICAgaWYgKHZwLnBhbm5lZCkge1xuICAgICAgICBfcC5wYW4ueCA9IHZwLnBhbi54O1xuICAgICAgICBfcC5wYW4ueSA9IHZwLnBhbi55O1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0KCd6b29tJyArICh2cC5wYW5uZWQgPyAnIHBhbicgOiAnJykgKyAnIHZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH1cbiAgfSxcblxuICB2aWV3cG9ydDogZnVuY3Rpb24gdmlld3BvcnQob3B0cykge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIHpvb21EZWZkID0gdHJ1ZTtcbiAgICB2YXIgcGFuRGVmZCA9IHRydWU7XG4gICAgdmFyIGV2ZW50cyA9IFtdOyAvLyB0byB0cmlnZ2VyXG4gICAgdmFyIHpvb21GYWlsZWQgPSBmYWxzZTtcbiAgICB2YXIgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKCFudW1iZXIkMShvcHRzLnpvb20pKSB7XG4gICAgICB6b29tRGVmZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXBsYWluT2JqZWN0KG9wdHMucGFuKSkge1xuICAgICAgcGFuRGVmZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXpvb21EZWZkICYmICFwYW5EZWZkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHpvb21EZWZkKSB7XG4gICAgICB2YXIgeiA9IG9wdHMuem9vbTtcbiAgICAgIGlmICh6IDwgX3AubWluWm9vbSB8fCB6ID4gX3AubWF4Wm9vbSB8fCAhX3Auem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgICAgem9vbUZhaWxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcC56b29tID0gejtcbiAgICAgICAgZXZlbnRzLnB1c2goJ3pvb20nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhbkRlZmQgJiYgKCF6b29tRmFpbGVkIHx8ICFvcHRzLmNhbmNlbE9uRmFpbGVkWm9vbSkgJiYgX3AucGFubmluZ0VuYWJsZWQpIHtcbiAgICAgIHZhciBwID0gb3B0cy5wYW47XG4gICAgICBpZiAobnVtYmVyJDEocC54KSkge1xuICAgICAgICBfcC5wYW4ueCA9IHAueDtcbiAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyJDEocC55KSkge1xuICAgICAgICBfcC5wYW4ueSA9IHAueTtcbiAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXBhbkZhaWxlZCkge1xuICAgICAgICBldmVudHMucHVzaCgncGFuJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnRzLnB1c2goJ3ZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLmVtaXQoZXZlbnRzLmpvaW4oJyAnKSk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG5cbiAgY2VudGVyOiBmdW5jdGlvbiBjZW50ZXIoZWxlbWVudHMpIHtcbiAgICB2YXIgcGFuID0gdGhpcy5nZXRDZW50ZXJQYW4oZWxlbWVudHMpO1xuICAgIGlmIChwYW4pIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUucGFuID0gcGFuO1xuICAgICAgdGhpcy5lbWl0KCdwYW4gdmlld3BvcnQnKTtcbiAgICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICBnZXRDZW50ZXJQYW46IGZ1bmN0aW9uIGdldENlbnRlclBhbihlbGVtZW50cywgem9vbSkge1xuICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RyaW5nKGVsZW1lbnRzKSkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudHM7XG4gICAgICBlbGVtZW50cyA9IHRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9IGVsc2UgaWYgKCFlbGVtZW50T3JDb2xsZWN0aW9uKGVsZW1lbnRzKSkge1xuICAgICAgZWxlbWVudHMgPSB0aGlzLm11dGFibGVFbGVtZW50cygpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjYW4ndCBjZW50cmUgcGFuIHRvIG5vdGhpbmdcblxuICAgIHZhciBiYiA9IGVsZW1lbnRzLmJvdW5kaW5nQm94KCk7XG4gICAgdmFyIHcgPSB0aGlzLndpZHRoKCk7XG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCgpO1xuICAgIHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl9wcml2YXRlLnpvb20gOiB6b29tO1xuICAgIHZhciBwYW4gPSB7XG4gICAgICAvLyBtaWRkbGVcbiAgICAgIHg6ICh3IC0gem9vbSAqIChiYi54MSArIGJiLngyKSkgLyAyLFxuICAgICAgeTogKGggLSB6b29tICogKGJiLnkxICsgYmIueTIpKSAvIDJcbiAgICB9O1xuICAgIHJldHVybiBwYW47XG4gIH0sXG4gIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBpZiAoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQgfHwgIXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnZpZXdwb3J0KHtcbiAgICAgIHBhbjoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgem9vbTogMVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuXG4gIGludmFsaWRhdGVTaXplOiBmdW5jdGlvbiBpbnZhbGlkYXRlU2l6ZSgpIHtcbiAgICB0aGlzLl9wcml2YXRlLnNpemVDYWNoZSA9IG51bGw7XG4gIH0sXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgY29udGFpbmVyID0gX3AuY29udGFpbmVyO1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgcmV0dXJuIF9wLnNpemVDYWNoZSA9IF9wLnNpemVDYWNoZSB8fCAoY29udGFpbmVyID8gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0eWxlID0gY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgdmFyIHZhbCA9IGZ1bmN0aW9uIHZhbChuYW1lKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGggLSB2YWwoJ3BhZGRpbmctbGVmdCcpIC0gdmFsKCdwYWRkaW5nLXJpZ2h0JyksXG4gICAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIHZhbCgncGFkZGluZy10b3AnKSAtIHZhbCgncGFkZGluZy1ib3R0b20nKVxuICAgICAgfTtcbiAgICB9KCkgOiB7XG4gICAgICAvLyBmYWxsYmFjayBpZiBubyBjb250YWluZXIgKG5vdCAwIGIvYyBjYW4gYmUgdXNlZCBmb3IgZGl2aWRpbmcgZXRjKVxuICAgICAgd2lkdGg6IDEsXG4gICAgICBoZWlnaHQ6IDFcbiAgICB9KTtcbiAgfSxcbiAgd2lkdGg6IGZ1bmN0aW9uIHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnNpemUoKS53aWR0aDtcbiAgfSxcbiAgaGVpZ2h0OiBmdW5jdGlvbiBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodDtcbiAgfSxcbiAgZXh0ZW50OiBmdW5jdGlvbiBleHRlbnQoKSB7XG4gICAgdmFyIHBhbiA9IHRoaXMuX3ByaXZhdGUucGFuO1xuICAgIHZhciB6b29tID0gdGhpcy5fcHJpdmF0ZS56b29tO1xuICAgIHZhciByYiA9IHRoaXMucmVuZGVyZWRFeHRlbnQoKTtcbiAgICB2YXIgYiA9IHtcbiAgICAgIHgxOiAocmIueDEgLSBwYW4ueCkgLyB6b29tLFxuICAgICAgeDI6IChyYi54MiAtIHBhbi54KSAvIHpvb20sXG4gICAgICB5MTogKHJiLnkxIC0gcGFuLnkpIC8gem9vbSxcbiAgICAgIHkyOiAocmIueTIgLSBwYW4ueSkgLyB6b29tXG4gICAgfTtcbiAgICBiLncgPSBiLngyIC0gYi54MTtcbiAgICBiLmggPSBiLnkyIC0gYi55MTtcbiAgICByZXR1cm4gYjtcbiAgfSxcbiAgcmVuZGVyZWRFeHRlbnQ6IGZ1bmN0aW9uIHJlbmRlcmVkRXh0ZW50KCkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKTtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHgyOiB3aWR0aCxcbiAgICAgIHkyOiBoZWlnaHQsXG4gICAgICB3OiB3aWR0aCxcbiAgICAgIGg6IGhlaWdodFxuICAgIH07XG4gIH0sXG4gIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6IGZ1bmN0aW9uIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoX2ludCkge1xuICAgIGlmIChfaW50KSB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUgPSBfaW50O2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuY29yZWZuJDEuY2VudHJlID0gY29yZWZuJDEuY2VudGVyO1xuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29yZWZuJDEuYXV0b2xvY2tOb2RlcyA9IGNvcmVmbiQxLmF1dG9sb2NrO1xuY29yZWZuJDEuYXV0b3VuZ3JhYmlmeU5vZGVzID0gY29yZWZuJDEuYXV0b3VuZ3JhYmlmeTtcblxudmFyIGZuID0ge1xuICBkYXRhOiBkZWZpbmUuZGF0YSh7XG4gICAgZmllbGQ6ICdkYXRhJyxcbiAgICBiaW5kaW5nRXZlbnQ6ICdkYXRhJyxcbiAgICBhbGxvd0JpbmRpbmc6IHRydWUsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdFdmVudDogJ2RhdGEnLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICBhbGxvd0dldHRpbmc6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHJlbW92ZURhdGE6IGRlZmluZS5yZW1vdmVEYXRhKHtcbiAgICBmaWVsZDogJ2RhdGEnLFxuICAgIGV2ZW50OiAnZGF0YScsXG4gICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgIHRyaWdnZXJFdmVudDogdHJ1ZSxcbiAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICB9KSxcbiAgc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgYmluZGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nRXZlbnQ6ICdzY3JhdGNoJyxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByZW1vdmVTY3JhdGNoOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdzY3JhdGNoJyxcbiAgICBldmVudDogJ3NjcmF0Y2gnLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSlcbn07XG5cbi8vIGFsaWFzZXNcbmZuLmF0dHIgPSBmbi5kYXRhO1xuZm4ucmVtb3ZlQXR0ciA9IGZuLnJlbW92ZURhdGE7XG5cbnZhciBDb3JlID0gZnVuY3Rpb24gQ29yZShvcHRzKSB7XG4gIHZhciBjeSA9IHRoaXM7XG4gIG9wdHMgPSBleHRlbmQoe30sIG9wdHMpO1xuICB2YXIgY29udGFpbmVyID0gb3B0cy5jb250YWluZXI7XG5cbiAgLy8gYWxsb3cgZm9yIHBhc3NpbmcgYSB3cmFwcGVkIGpxdWVyeSBvYmplY3RcbiAgLy8gZS5nLiBjeXRvc2NhcGUoeyBjb250YWluZXI6ICQoJyNjeScpIH0pXG4gIGlmIChjb250YWluZXIgJiYgIWh0bWxFbGVtZW50KGNvbnRhaW5lcikgJiYgaHRtbEVsZW1lbnQoY29udGFpbmVyWzBdKSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclswXTtcbiAgfVxuICB2YXIgcmVnID0gY29udGFpbmVyID8gY29udGFpbmVyLl9jeXJlZyA6IG51bGw7IC8vIGUuZy4gYWxyZWFkeSByZWdpc3RlcmVkIHNvbWUgaW5mbyAoZS5nLiByZWFkaWVzKSB2aWEganF1ZXJ5XG4gIHJlZyA9IHJlZyB8fCB7fTtcbiAgaWYgKHJlZyAmJiByZWcuY3kpIHtcbiAgICByZWcuY3kuZGVzdHJveSgpO1xuICAgIHJlZyA9IHt9OyAvLyBvbGQgaW5zdGFuY2UgPT4gcmVwbGFjZSByZWcgY29tcGxldGVseVxuICB9XG5cbiAgdmFyIHJlYWRpZXMgPSByZWcucmVhZGllcyA9IHJlZy5yZWFkaWVzIHx8IFtdO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgY29udGFpbmVyLl9jeXJlZyA9IHJlZztcbiAgfSAvLyBtYWtlIHN1cmUgY29udGFpbmVyIGFzc29jJ2QgcmVnIHBvaW50cyB0byB0aGlzIGN5XG4gIHJlZy5jeSA9IGN5O1xuICB2YXIgaGVhZCA9IF93aW5kb3cgIT09IHVuZGVmaW5lZCAmJiBjb250YWluZXIgIT09IHVuZGVmaW5lZCAmJiAhb3B0cy5oZWFkbGVzcztcbiAgdmFyIG9wdGlvbnMgPSBvcHRzO1xuICBvcHRpb25zLmxheW91dCA9IGV4dGVuZCh7XG4gICAgbmFtZTogaGVhZCA/ICdncmlkJyA6ICdudWxsJ1xuICB9LCBvcHRpb25zLmxheW91dCk7XG4gIG9wdGlvbnMucmVuZGVyZXIgPSBleHRlbmQoe1xuICAgIG5hbWU6IGhlYWQgPyAnY2FudmFzJyA6ICdudWxsJ1xuICB9LCBvcHRpb25zLnJlbmRlcmVyKTtcbiAgdmFyIGRlZlZhbCA9IGZ1bmN0aW9uIGRlZlZhbChkZWYsIHZhbCwgYWx0VmFsKSB7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0gZWxzZSBpZiAoYWx0VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhbHRWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWY7XG4gICAgfVxuICB9O1xuICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlID0ge1xuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIC8vIGh0bWwgZG9tIGVsZSBjb250YWluZXJcbiAgICByZWFkeTogZmFsc2UsXG4gICAgLy8gd2hldGhlciByZWFkeSBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIC8vIGNhY2hlZCBvcHRpb25zXG4gICAgZWxlbWVudHM6IG5ldyBDb2xsZWN0aW9uKHRoaXMpLFxuICAgIC8vIGVsZW1lbnRzIGluIHRoZSBncmFwaFxuICAgIGxpc3RlbmVyczogW10sXG4gICAgLy8gbGlzdCBvZiBsaXN0ZW5lcnNcbiAgICBhbmlFbGVzOiBuZXcgQ29sbGVjdGlvbih0aGlzKSxcbiAgICAvLyBlbGVtZW50cyBiZWluZyBhbmltYXRlZFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSB8fCB7fSxcbiAgICAvLyBkYXRhIGZvciB0aGUgY29yZVxuICAgIHNjcmF0Y2g6IHt9LFxuICAgIC8vIHNjcmF0Y2ggb2JqZWN0IGZvciBjb3JlXG4gICAgbGF5b3V0OiBudWxsLFxuICAgIHJlbmRlcmVyOiBudWxsLFxuICAgIGRlc3Ryb3llZDogZmFsc2UsXG4gICAgLy8gd2hldGhlciBkZXN0cm95IHdhcyBjYWxsZWRcbiAgICBub3RpZmljYXRpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHJlbmRlcmVyXG4gICAgbWluWm9vbTogMWUtNTAsXG4gICAgbWF4Wm9vbTogMWU1MCxcbiAgICB6b29taW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMuem9vbWluZ0VuYWJsZWQpLFxuICAgIHVzZXJab29taW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMudXNlclpvb21pbmdFbmFibGVkKSxcbiAgICBwYW5uaW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMucGFubmluZ0VuYWJsZWQpLFxuICAgIHVzZXJQYW5uaW5nRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMudXNlclBhbm5pbmdFbmFibGVkKSxcbiAgICBib3hTZWxlY3Rpb25FbmFibGVkOiBkZWZWYWwodHJ1ZSwgb3B0aW9ucy5ib3hTZWxlY3Rpb25FbmFibGVkKSxcbiAgICBhdXRvbG9jazogZGVmVmFsKGZhbHNlLCBvcHRpb25zLmF1dG9sb2NrLCBvcHRpb25zLmF1dG9sb2NrTm9kZXMpLFxuICAgIGF1dG91bmdyYWJpZnk6IGRlZlZhbChmYWxzZSwgb3B0aW9ucy5hdXRvdW5ncmFiaWZ5LCBvcHRpb25zLmF1dG91bmdyYWJpZnlOb2RlcyksXG4gICAgYXV0b3Vuc2VsZWN0aWZ5OiBkZWZWYWwoZmFsc2UsIG9wdGlvbnMuYXV0b3Vuc2VsZWN0aWZ5KSxcbiAgICBzdHlsZUVuYWJsZWQ6IG9wdGlvbnMuc3R5bGVFbmFibGVkID09PSB1bmRlZmluZWQgPyBoZWFkIDogb3B0aW9ucy5zdHlsZUVuYWJsZWQsXG4gICAgem9vbTogbnVtYmVyJDEob3B0aW9ucy56b29tKSA/IG9wdGlvbnMuem9vbSA6IDEsXG4gICAgcGFuOiB7XG4gICAgICB4OiBwbGFpbk9iamVjdChvcHRpb25zLnBhbikgJiYgbnVtYmVyJDEob3B0aW9ucy5wYW4ueCkgPyBvcHRpb25zLnBhbi54IDogMCxcbiAgICAgIHk6IHBsYWluT2JqZWN0KG9wdGlvbnMucGFuKSAmJiBudW1iZXIkMShvcHRpb25zLnBhbi55KSA/IG9wdGlvbnMucGFuLnkgOiAwXG4gICAgfSxcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC8vIG9iamVjdCBmb3IgY3VycmVudGx5LXJ1bm5pbmcgYW5pbWF0aW9uc1xuICAgICAgY3VycmVudDogW10sXG4gICAgICBxdWV1ZTogW11cbiAgICB9LFxuICAgIGhhc0NvbXBvdW5kTm9kZXM6IGZhbHNlLFxuICAgIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6IGRlZlZhbCgyNTAsIG9wdGlvbnMubXVsdGlDbGlja0RlYm91bmNlVGltZSlcbiAgfTtcbiAgdGhpcy5jcmVhdGVFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHNlbGVjdGlvbiB0eXBlXG4gIHRoaXMuc2VsZWN0aW9uVHlwZShvcHRpb25zLnNlbGVjdGlvblR5cGUpO1xuXG4gIC8vIGluaXQgem9vbSBib3VuZHNcbiAgdGhpcy56b29tUmFuZ2Uoe1xuICAgIG1pbjogb3B0aW9ucy5taW5ab29tLFxuICAgIG1heDogb3B0aW9ucy5tYXhab29tXG4gIH0pO1xuICB2YXIgbG9hZEV4dERhdGEgPSBmdW5jdGlvbiBsb2FkRXh0RGF0YShleHREYXRhLCBuZXh0KSB7XG4gICAgdmFyIGFueUlzUHJvbWlzZSA9IGV4dERhdGEuc29tZShwcm9taXNlKTtcbiAgICBpZiAoYW55SXNQcm9taXNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZSQxLmFsbChleHREYXRhKS50aGVuKG5leHQpOyAvLyBsb2FkIGFsbCBkYXRhIGFzeW5jaHJvbm91c2x5LCB0aGVuIGV4ZWMgcmVzdCBvZiBpbml0XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQoZXh0RGF0YSk7IC8vIGV4ZWMgc3luY2hyb25vdXNseSBmb3IgY29udmVuaWVuY2VcbiAgICB9XG4gIH07XG5cbiAgLy8gc3RhcnQgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZXNoZWV0IHNvIHdlIGhhdmUgc29tZXRoaW5nIGJlZm9yZSBsb2FkaW5nIGFuIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgaWYgKF9wLnN0eWxlRW5hYmxlZCkge1xuICAgIGN5LnNldFN0eWxlKFtdKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgcmVuZGVyZXJcbiAgdmFyIHJlbmRlcmVyT3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucywgb3B0aW9ucy5yZW5kZXJlcik7IC8vIGFsbG93IHJlbmRlcmluZyBoaW50cyBpbiB0b3AgbGV2ZWwgb3B0aW9uc1xuICBjeS5pbml0UmVuZGVyZXIocmVuZGVyZXJPcHRpb25zKTtcbiAgdmFyIHNldEVsZXNBbmRMYXlvdXQgPSBmdW5jdGlvbiBzZXRFbGVzQW5kTGF5b3V0KGVsZW1lbnRzLCBvbmxvYWQsIG9uZG9uZSkge1xuICAgIGN5Lm5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuXG4gICAgLy8gcmVtb3ZlIG9sZCBlbGVtZW50c1xuICAgIHZhciBvbGRFbGVzID0gY3kubXV0YWJsZUVsZW1lbnRzKCk7XG4gICAgaWYgKG9sZEVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgb2xkRWxlcy5yZW1vdmUoKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHtcbiAgICAgIGlmIChwbGFpbk9iamVjdChlbGVtZW50cykgfHwgYXJyYXkoZWxlbWVudHMpKSB7XG4gICAgICAgIGN5LmFkZChlbGVtZW50cyk7XG4gICAgICB9XG4gICAgfVxuICAgIGN5Lm9uZSgnbGF5b3V0cmVhZHknLCBmdW5jdGlvbiAoZSkge1xuICAgICAgY3kubm90aWZpY2F0aW9ucyh0cnVlKTtcbiAgICAgIGN5LmVtaXQoZSk7IC8vIHdlIG1pc3NlZCB0aGlzIGV2ZW50IGJ5IHR1cm5pbmcgbm90aWZpY2F0aW9ucyBvZmYsIHNvIHBhc3MgaXQgb25cblxuICAgICAgY3kub25lKCdsb2FkJywgb25sb2FkKTtcbiAgICAgIGN5LmVtaXRBbmROb3RpZnkoJ2xvYWQnKTtcbiAgICB9KS5vbmUoJ2xheW91dHN0b3AnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjeS5vbmUoJ2RvbmUnLCBvbmRvbmUpO1xuICAgICAgY3kuZW1pdCgnZG9uZScpO1xuICAgIH0pO1xuICAgIHZhciBsYXlvdXRPcHRzID0gZXh0ZW5kKHt9LCBjeS5fcHJpdmF0ZS5vcHRpb25zLmxheW91dCk7XG4gICAgbGF5b3V0T3B0cy5lbGVzID0gY3kuZWxlbWVudHMoKTtcbiAgICBjeS5sYXlvdXQobGF5b3V0T3B0cykucnVuKCk7XG4gIH07XG4gIGxvYWRFeHREYXRhKFtvcHRpb25zLnN0eWxlLCBvcHRpb25zLmVsZW1lbnRzXSwgZnVuY3Rpb24gKHRoZW5zKSB7XG4gICAgdmFyIGluaXRTdHlsZSA9IHRoZW5zWzBdO1xuICAgIHZhciBpbml0RWxlcyA9IHRoZW5zWzFdO1xuXG4gICAgLy8gaW5pdCBzdHlsZVxuICAgIGlmIChfcC5zdHlsZUVuYWJsZWQpIHtcbiAgICAgIGN5LnN0eWxlKCkuYXBwZW5kKGluaXRTdHlsZSk7XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbCBsb2FkXG4gICAgc2V0RWxlc0FuZExheW91dChpbml0RWxlcywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gb25yZWFkeVxuICAgICAgY3kuc3RhcnRBbmltYXRpb25Mb29wKCk7XG4gICAgICBfcC5yZWFkeSA9IHRydWU7XG5cbiAgICAgIC8vIGlmIGEgcmVhZHkgY2FsbGJhY2sgaXMgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiwgdGhlIGJpbmQgaXRcbiAgICAgIGlmIChmbiQ2KG9wdGlvbnMucmVhZHkpKSB7XG4gICAgICAgIGN5Lm9uKCdyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgICAgfVxuXG4gICAgICAvLyBiaW5kIGFsbCB0aGUgcmVhZHkgaGFuZGxlcnMgcmVnaXN0ZXJlZCBiZWZvcmUgY3JlYXRpbmcgdGhpcyBpbnN0YW5jZVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFkaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IHJlYWRpZXNbaV07XG4gICAgICAgIGN5Lm9uKCdyZWFkeScsIGZuKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWcpIHtcbiAgICAgICAgcmVnLnJlYWRpZXMgPSBbXTtcbiAgICAgIH0gLy8gY2xlYXIgYi9jIHdlJ3ZlIGJvdW5kIHRoZW0gYWxsIGFuZCBkb24ndCB3YW50IHRvIGtlZXAgaXQgYXJvdW5kIGluIGNhc2UgYSBuZXcgY29yZSB1c2VzIHRoZSBzYW1lIGRpdiBldGNcblxuICAgICAgY3kuZW1pdCgncmVhZHknKTtcbiAgICB9LCBvcHRpb25zLmRvbmUpO1xuICB9KTtcbn07XG52YXIgY29yZWZuID0gQ29yZS5wcm90b3R5cGU7IC8vIHNob3J0IGFsaWFzXG5cbmV4dGVuZChjb3JlZm4sIHtcbiAgaW5zdGFuY2VTdHJpbmc6IGZ1bmN0aW9uIGluc3RhbmNlU3RyaW5nKCkge1xuICAgIHJldHVybiAnY29yZSc7XG4gIH0sXG4gIGlzUmVhZHk6IGZ1bmN0aW9uIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucmVhZHk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgcmVhZHk6IGZ1bmN0aW9uIHJlYWR5KGZuKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkeSgpKSB7XG4gICAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KCdyZWFkeScsIFtdLCBmbik7IC8vIGp1c3QgY2FsbHMgZm4gYXMgdGhvdWdoIHRyaWdnZXJlZCB2aWEgcmVhZHkgZXZlbnRcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbigncmVhZHknLCBmbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgaWYgKGN5LmRlc3Ryb3llZCgpKSByZXR1cm47XG4gICAgY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICB0aGlzLmVtaXQoJ2Rlc3Ryb3knKTtcbiAgICBjeS5fcHJpdmF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHJldHVybiBjeTtcbiAgfSxcbiAgaGFzRWxlbWVudFdpdGhJZDogZnVuY3Rpb24gaGFzRWxlbWVudFdpdGhJZChpZCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoaWQpO1xuICB9LFxuICBnZXRFbGVtZW50QnlJZDogZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChpZCk7XG4gIH0sXG4gIGhhc0NvbXBvdW5kTm9kZXM6IGZ1bmN0aW9uIGhhc0NvbXBvdW5kTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2RlcztcbiAgfSxcbiAgaGVhZGxlc3M6IGZ1bmN0aW9uIGhlYWRsZXNzKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyLmlzSGVhZGxlc3MoKTtcbiAgfSxcbiAgc3R5bGVFbmFibGVkOiBmdW5jdGlvbiBzdHlsZUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkO1xuICB9LFxuICBhZGRUb1Bvb2w6IGZ1bmN0aW9uIGFkZFRvUG9vbChlbGVzKSB7XG4gICAgdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShlbGVzKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcblxuICByZW1vdmVGcm9tUG9vbDogZnVuY3Rpb24gcmVtb3ZlRnJvbVBvb2woZWxlcykge1xuICAgIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMudW5tZXJnZShlbGVzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29udGFpbmVyOiBmdW5jdGlvbiBjb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY29udGFpbmVyIHx8IG51bGw7XG4gIH0sXG4gIHdpbmRvdzogZnVuY3Rpb24gd2luZG93KCkge1xuICAgIHZhciBjb250YWluZXIgPSB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcjtcbiAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHJldHVybiBfd2luZG93O1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gdGhpcy5fcHJpdmF0ZS5jb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgICBpZiAob3duZXJEb2N1bWVudCA9PT0gdW5kZWZpbmVkIHx8IG93bmVyRG9jdW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIF93aW5kb3c7XG4gICAgfVxuICAgIHJldHVybiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IF93aW5kb3c7XG4gIH0sXG4gIG1vdW50OiBmdW5jdGlvbiBtb3VudChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICB2YXIgX3AgPSBjeS5fcHJpdmF0ZTtcbiAgICB2YXIgb3B0aW9ucyA9IF9wLm9wdGlvbnM7XG4gICAgaWYgKCFodG1sRWxlbWVudChjb250YWluZXIpICYmIGh0bWxFbGVtZW50KGNvbnRhaW5lclswXSkpIHtcbiAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclswXTtcbiAgICB9XG4gICAgY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICBfcC5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgX3Auc3R5bGVFbmFibGVkID0gdHJ1ZTtcbiAgICBjeS5pbnZhbGlkYXRlU2l6ZSgpO1xuICAgIGN5LmluaXRSZW5kZXJlcihleHRlbmQoe30sIG9wdGlvbnMsIG9wdGlvbnMucmVuZGVyZXIsIHtcbiAgICAgIC8vIGFsbG93IGN1c3RvbSByZW5kZXJlciBuYW1lIHRvIGJlIHJlLXVzZWQsIG90aGVyd2lzZSB1c2UgY2FudmFzXG4gICAgICBuYW1lOiBvcHRpb25zLnJlbmRlcmVyLm5hbWUgPT09ICdudWxsJyA/ICdjYW52YXMnIDogb3B0aW9ucy5yZW5kZXJlci5uYW1lXG4gICAgfSkpO1xuICAgIGN5LnN0YXJ0QW5pbWF0aW9uTG9vcCgpO1xuICAgIGN5LnN0eWxlKG9wdGlvbnMuc3R5bGUpO1xuICAgIGN5LmVtaXQoJ21vdW50Jyk7XG4gICAgcmV0dXJuIGN5O1xuICB9LFxuICB1bm1vdW50OiBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgICBjeS5kZXN0cm95UmVuZGVyZXIoKTtcbiAgICBjeS5pbml0UmVuZGVyZXIoe1xuICAgICAgbmFtZTogJ251bGwnXG4gICAgfSk7XG4gICAgY3kuZW1pdCgndW5tb3VudCcpO1xuICAgIHJldHVybiBjeTtcbiAgfSxcbiAgb3B0aW9uczogZnVuY3Rpb24gb3B0aW9ucygpIHtcbiAgICByZXR1cm4gY29weSh0aGlzLl9wcml2YXRlLm9wdGlvbnMpO1xuICB9LFxuICBqc29uOiBmdW5jdGlvbiBqc29uKG9iaikge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgdmFyIF9wID0gY3kuX3ByaXZhdGU7XG4gICAgdmFyIGVsZXMgPSBjeS5tdXRhYmxlRWxlbWVudHMoKTtcbiAgICB2YXIgZ2V0RnJlc2hSZWYgPSBmdW5jdGlvbiBnZXRGcmVzaFJlZihlbGUpIHtcbiAgICAgIHJldHVybiBjeS5nZXRFbGVtZW50QnlJZChlbGUuaWQoKSk7XG4gICAgfTtcbiAgICBpZiAocGxhaW5PYmplY3Qob2JqKSkge1xuICAgICAgLy8gc2V0XG5cbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGlmIChvYmouZWxlbWVudHMpIHtcbiAgICAgICAgdmFyIGlkSW5Kc29uID0ge307XG4gICAgICAgIHZhciB1cGRhdGVFbGVzID0gZnVuY3Rpb24gdXBkYXRlRWxlcyhqc29ucywgZ3IpIHtcbiAgICAgICAgICB2YXIgdG9BZGQgPSBbXTtcbiAgICAgICAgICB2YXIgdG9Nb2QgPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIganNvbiA9IGpzb25zW2ldO1xuICAgICAgICAgICAgaWYgKCFqc29uLmRhdGEuaWQpIHtcbiAgICAgICAgICAgICAgd2FybignY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUnKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWQgPSAnJyArIGpzb24uZGF0YS5pZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcbiAgICAgICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgICAgICBpZEluSnNvbltpZF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVsZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgZWxlbWVudCBzaG91bGQgYmUgdXBkYXRlZFxuICAgICAgICAgICAgICB0b01vZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGU6IGVsZSxcbiAgICAgICAgICAgICAgICBqc29uOiBqc29uXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNob3VsZCBiZSBhZGRlZFxuICAgICAgICAgICAgICBpZiAoZ3IpIHtcbiAgICAgICAgICAgICAgICBqc29uLmdyb3VwID0gZ3I7XG4gICAgICAgICAgICAgICAgdG9BZGQucHVzaChqc29uKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKGpzb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGN5LmFkZCh0b0FkZCk7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRvTW9kLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIF90b01vZCRfaSA9IHRvTW9kW19pXSxcbiAgICAgICAgICAgICAgX2VsZSA9IF90b01vZCRfaS5lbGUsXG4gICAgICAgICAgICAgIF9qc29uID0gX3RvTW9kJF9pLmpzb247XG4gICAgICAgICAgICBfZWxlLmpzb24oX2pzb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFycmF5KG9iai5lbGVtZW50cykpIHtcbiAgICAgICAgICAvLyBlbGVtZW50czogW11cbiAgICAgICAgICB1cGRhdGVFbGVzKG9iai5lbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZWxlbWVudHM6IHsgbm9kZXM6IFtdLCBlZGdlczogW10gfVxuICAgICAgICAgIHZhciBncnMgPSBbJ25vZGVzJywgJ2VkZ2VzJ107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBnciA9IGdyc1tpXTtcbiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IG9iai5lbGVtZW50c1tncl07XG4gICAgICAgICAgICBpZiAoYXJyYXkoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVsZXMoZWxlbWVudHMsIGdyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudHNUb1JlbW92ZSA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiAhaWRJbkpzb25bZWxlLmlkKCldO1xuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICBpZiAoZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgICAgIHBhcmVudHNUb1JlbW92ZS5tZXJnZShlbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzbyB0aGF0IGNoaWxkcmVuIGFyZSBub3QgcmVtb3ZlZCB3L3BhcmVudFxuICAgICAgICBwYXJlbnRzVG9SZW1vdmUuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5jaGlsZHJlbigpLm1vdmUoe1xuICAgICAgICAgICAgcGFyZW50OiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBwYXJlbnRzIG1heSBiZSBtb3ZlZCBieSBwcmlvciBsaW5lLCBzbyBtYWtlIHN1cmUgd2UgcmVtb3ZlIGJ5IGZyZXNoIHJlZnNcbiAgICAgICAgcGFyZW50c1RvUmVtb3ZlLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiBnZXRGcmVzaFJlZihlbGUpLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvYmouc3R5bGUpIHtcbiAgICAgICAgY3kuc3R5bGUob2JqLnN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChvYmouem9vbSAhPSBudWxsICYmIG9iai56b29tICE9PSBfcC56b29tKSB7XG4gICAgICAgIGN5Lnpvb20ob2JqLnpvb20pO1xuICAgICAgfVxuICAgICAgaWYgKG9iai5wYW4pIHtcbiAgICAgICAgaWYgKG9iai5wYW4ueCAhPT0gX3AucGFuLnggfHwgb2JqLnBhbi55ICE9PSBfcC5wYW4ueSkge1xuICAgICAgICAgIGN5LnBhbihvYmoucGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9iai5kYXRhKSB7XG4gICAgICAgIGN5LmRhdGEob2JqLmRhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIGZpZWxkcyA9IFsnbWluWm9vbScsICdtYXhab29tJywgJ3pvb21pbmdFbmFibGVkJywgJ3VzZXJab29taW5nRW5hYmxlZCcsICdwYW5uaW5nRW5hYmxlZCcsICd1c2VyUGFubmluZ0VuYWJsZWQnLCAnYm94U2VsZWN0aW9uRW5hYmxlZCcsICdhdXRvbG9jaycsICdhdXRvdW5ncmFiaWZ5JywgJ2F1dG91bnNlbGVjdGlmeScsICdtdWx0aUNsaWNrRGVib3VuY2VUaW1lJ107XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBmaWVsZHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgZiA9IGZpZWxkc1tfaTJdO1xuICAgICAgICBpZiAob2JqW2ZdICE9IG51bGwpIHtcbiAgICAgICAgICBjeVtmXShvYmpbZl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldFxuICAgICAgdmFyIGZsYXQgPSAhIW9iajtcbiAgICAgIHZhciBqc29uID0ge307XG4gICAgICBpZiAoZmxhdCkge1xuICAgICAgICBqc29uLmVsZW1lbnRzID0gdGhpcy5lbGVtZW50cygpLm1hcChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5qc29uKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAganNvbi5lbGVtZW50cyA9IHt9O1xuICAgICAgICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHZhciBncm91cCA9IGVsZS5ncm91cCgpO1xuICAgICAgICAgIGlmICghanNvbi5lbGVtZW50c1tncm91cF0pIHtcbiAgICAgICAgICAgIGpzb24uZWxlbWVudHNbZ3JvdXBdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGpzb24uZWxlbWVudHNbZ3JvdXBdLnB1c2goZWxlLmpzb24oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIGpzb24uc3R5bGUgPSBjeS5zdHlsZSgpLmpzb24oKTtcbiAgICAgIH1cbiAgICAgIGpzb24uZGF0YSA9IGNvcHkoY3kuZGF0YSgpKTtcbiAgICAgIHZhciBvcHRpb25zID0gX3Aub3B0aW9ucztcbiAgICAgIGpzb24uem9vbWluZ0VuYWJsZWQgPSBfcC56b29taW5nRW5hYmxlZDtcbiAgICAgIGpzb24udXNlclpvb21pbmdFbmFibGVkID0gX3AudXNlclpvb21pbmdFbmFibGVkO1xuICAgICAganNvbi56b29tID0gX3Auem9vbTtcbiAgICAgIGpzb24ubWluWm9vbSA9IF9wLm1pblpvb207XG4gICAgICBqc29uLm1heFpvb20gPSBfcC5tYXhab29tO1xuICAgICAganNvbi5wYW5uaW5nRW5hYmxlZCA9IF9wLnBhbm5pbmdFbmFibGVkO1xuICAgICAganNvbi51c2VyUGFubmluZ0VuYWJsZWQgPSBfcC51c2VyUGFubmluZ0VuYWJsZWQ7XG4gICAgICBqc29uLnBhbiA9IGNvcHkoX3AucGFuKTtcbiAgICAgIGpzb24uYm94U2VsZWN0aW9uRW5hYmxlZCA9IF9wLmJveFNlbGVjdGlvbkVuYWJsZWQ7XG4gICAgICBqc29uLnJlbmRlcmVyID0gY29weShvcHRpb25zLnJlbmRlcmVyKTtcbiAgICAgIGpzb24uaGlkZUVkZ2VzT25WaWV3cG9ydCA9IG9wdGlvbnMuaGlkZUVkZ2VzT25WaWV3cG9ydDtcbiAgICAgIGpzb24udGV4dHVyZU9uVmlld3BvcnQgPSBvcHRpb25zLnRleHR1cmVPblZpZXdwb3J0O1xuICAgICAganNvbi53aGVlbFNlbnNpdGl2aXR5ID0gb3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5O1xuICAgICAganNvbi5tb3Rpb25CbHVyID0gb3B0aW9ucy5tb3Rpb25CbHVyO1xuICAgICAganNvbi5tdWx0aUNsaWNrRGVib3VuY2VUaW1lID0gb3B0aW9ucy5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO1xuICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICB9XG59KTtcbmNvcmVmbi4kaWQgPSBjb3JlZm4uZ2V0RWxlbWVudEJ5SWQ7XG5bY29yZWZuJDksIGNvcmVmbiQ4LCBlbGVzZm4sIGNvcmVmbiQ3LCBjb3JlZm4kNiwgY29yZWZuJDUsIGNvcmVmbiQ0LCBjb3JlZm4kMywgY29yZWZuJDIsIGNvcmVmbiQxLCBmbl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKGNvcmVmbiwgcHJvcHMpO1xufSk7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZGVmYXVsdHMkNyA9IHtcbiAgZml0OiB0cnVlLFxuICAvLyB3aGV0aGVyIHRvIGZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIGdyYXBoXG4gIGRpcmVjdGVkOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0aGUgdHJlZSBpcyBkaXJlY3RlZCBkb3dud2FyZHMgKG9yIGVkZ2VzIGNhbiBwb2ludCBpbiBhbnkgZGlyZWN0aW9uIGlmIGZhbHNlKVxuICBwYWRkaW5nOiAzMCxcbiAgLy8gcGFkZGluZyBvbiBmaXRcbiAgY2lyY2xlOiBmYWxzZSxcbiAgLy8gcHV0IGRlcHRocyBpbiBjb25jZW50cmljIGNpcmNsZXMgaWYgdHJ1ZSwgcHV0IGRlcHRocyB0b3AgZG93biBpZiBmYWxzZVxuICBncmlkOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBjcmVhdGUgYW4gZXZlbiBncmlkIGludG8gd2hpY2ggdGhlIERBRyBpcyBwbGFjZWQgKGNpcmNsZTpmYWxzZSBvbmx5KVxuICBzcGFjaW5nRmFjdG9yOiAxLjc1LFxuICAvLyBwb3NpdGl2ZSBzcGFjaW5nIGZhY3RvciwgbGFyZ2VyID0+IG1vcmUgc3BhY2UgYmV0d2VlbiBub2RlcyAoTi5CLiBuL2EgaWYgY2F1c2VzIG92ZXJsYXApXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gIC8vIHByZXZlbnRzIG5vZGUgb3ZlcmxhcCwgbWF5IG92ZXJmbG93IGJvdW5kaW5nQm94IGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgcm9vdHM6IHVuZGVmaW5lZCxcbiAgLy8gdGhlIHJvb3RzIG9mIHRoZSB0cmVlc1xuICBkZXB0aFNvcnQ6IHVuZGVmaW5lZCxcbiAgLy8gYSBzb3J0aW5nIGZ1bmN0aW9uIHRvIG9yZGVyIG5vZGVzIGF0IGVxdWFsIGRlcHRoLiBlLmcuIGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYS5kYXRhKCd3ZWlnaHQnKSAtIGIuZGF0YSgnd2VpZ2h0JykgfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkLFxuICBhbmltYXRlRmlsdGVyOiBmdW5jdGlvbiBhbmltYXRlRmlsdGVyKG5vZGUsIGkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgLy8gYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWQuICBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWQuICBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICByZWFkeTogdW5kZWZpbmVkLFxuICAvLyBjYWxsYmFjayBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHN0b3BcbiAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH0gLy8gdHJhbnNmb3JtIGEgZ2l2ZW4gbm9kZSBwb3NpdGlvbi4gVXNlZnVsIGZvciBjaGFuZ2luZyBmbG93IGRpcmVjdGlvbiBpbiBkaXNjcmV0ZSBsYXlvdXRzXG59O1xuXG52YXIgZGVwcmVjYXRlZE9wdGlvbkRlZmF1bHRzID0ge1xuICBtYXhpbWFsOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBzaGlmdCBub2RlcyBkb3duIHRoZWlyIG5hdHVyYWwgQkZTIGRlcHRocyBpbiBvcmRlciB0byBhdm9pZCB1cHdhcmRzIGVkZ2VzIChEQUdTIG9ubHkpOyBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZSBhbHNvXG4gIGFjeWNsaWM6IGZhbHNlIC8vIHdoZXRoZXIgdGhlIHRyZWUgaXMgYWN5Y2xpYyBhbmQgdGh1cyBhIG5vZGUgY291bGQgYmUgc2hpZnRlZCAoZHVlIHRvIHRoZSBtYXhpbWFsIG9wdGlvbikgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3A7IHNldHRpbmcgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZSBhbHNvOyBpZiB5b3UgYXJlIHVuY2VydGFpbiB3aGV0aGVyIGEgdHJlZSBpcyBhY3ljbGljLCBzZXQgdG8gZmFsc2UgdG8gYXZvaWQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzXG59O1xuXG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnZhciBnZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbyhlbGUpIHtcbiAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnKTtcbn07XG52YXIgc2V0SW5mbyA9IGZ1bmN0aW9uIHNldEluZm8oZWxlLCBvYmopIHtcbiAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnLCBvYmopO1xufTtcbmZ1bmN0aW9uIEJyZWFkdGhGaXJzdExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkNywgZGVwcmVjYXRlZE9wdGlvbkRlZmF1bHRzLCBvcHRpb25zKTtcbn1cbkJyZWFkdGhGaXJzdExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgb3B0aW9ucyA9IHBhcmFtcztcbiAgdmFyIGN5ID0gcGFyYW1zLmN5O1xuICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgIHJldHVybiAhbi5pc1BhcmVudCgpO1xuICB9KTtcbiAgdmFyIGdyYXBoID0gZWxlcztcbiAgdmFyIGRpcmVjdGVkID0gb3B0aW9ucy5kaXJlY3RlZDtcbiAgdmFyIG1heGltYWwgPSBvcHRpb25zLmFjeWNsaWMgfHwgb3B0aW9ucy5tYXhpbWFsIHx8IG9wdGlvbnMubWF4aW1hbEFkanVzdG1lbnRzID4gMDsgLy8gbWF4aW1hbEFkanVzdG1lbnRzIGZvciBjb21wYXQuIHcvIG9sZCBjb2RlOyBhbHNvLCBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZVxuXG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgcm9vdHM7XG4gIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKG9wdGlvbnMucm9vdHMpKSB7XG4gICAgcm9vdHMgPSBvcHRpb25zLnJvb3RzO1xuICB9IGVsc2UgaWYgKGFycmF5KG9wdGlvbnMucm9vdHMpKSB7XG4gICAgdmFyIHJvb3RzQXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucm9vdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZCA9IG9wdGlvbnMucm9vdHNbaV07XG4gICAgICB2YXIgZWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgcm9vdHNBcnJheS5wdXNoKGVsZSk7XG4gICAgfVxuICAgIHJvb3RzID0gY3kuY29sbGVjdGlvbihyb290c0FycmF5KTtcbiAgfSBlbHNlIGlmIChzdHJpbmcob3B0aW9ucy5yb290cykpIHtcbiAgICByb290cyA9IGN5LiQob3B0aW9ucy5yb290cyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICByb290cyA9IG5vZGVzLnJvb3RzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb21wb25lbnRzID0gZWxlcy5jb21wb25lbnRzKCk7XG4gICAgICByb290cyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICAgIHZhciBjb21wID0gY29tcG9uZW50c1tfaV07XG4gICAgICAgIHZhciBtYXhEZWdyZWUgPSBjb21wLm1heERlZ3JlZShmYWxzZSk7XG4gICAgICAgIHZhciBjb21wUm9vdHMgPSBjb21wLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5kZWdyZWUoZmFsc2UpID09PSBtYXhEZWdyZWU7XG4gICAgICAgIH0pO1xuICAgICAgICByb290cyA9IHJvb3RzLmFkZChjb21wUm9vdHMpO1xuICAgICAgfTtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb21wb25lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBfbG9vcChfaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBkZXB0aHMgPSBbXTtcbiAgdmFyIGZvdW5kQnlCZnMgPSB7fTtcbiAgdmFyIGFkZFRvRGVwdGggPSBmdW5jdGlvbiBhZGRUb0RlcHRoKGVsZSwgZCkge1xuICAgIGlmIChkZXB0aHNbZF0gPT0gbnVsbCkge1xuICAgICAgZGVwdGhzW2RdID0gW107XG4gICAgfVxuICAgIHZhciBpID0gZGVwdGhzW2RdLmxlbmd0aDtcbiAgICBkZXB0aHNbZF0ucHVzaChlbGUpO1xuICAgIHNldEluZm8oZWxlLCB7XG4gICAgICBpbmRleDogaSxcbiAgICAgIGRlcHRoOiBkXG4gICAgfSk7XG4gIH07XG4gIHZhciBjaGFuZ2VEZXB0aCA9IGZ1bmN0aW9uIGNoYW5nZURlcHRoKGVsZSwgbmV3RGVwdGgpIHtcbiAgICB2YXIgX2dldEluZm8gPSBnZXRJbmZvKGVsZSksXG4gICAgICBkZXB0aCA9IF9nZXRJbmZvLmRlcHRoLFxuICAgICAgaW5kZXggPSBfZ2V0SW5mby5pbmRleDtcbiAgICBkZXB0aHNbZGVwdGhdW2luZGV4XSA9IG51bGw7XG4gICAgYWRkVG9EZXB0aChlbGUsIG5ld0RlcHRoKTtcbiAgfTtcblxuICAvLyBmaW5kIHRoZSBkZXB0aHMgb2YgdGhlIG5vZGVzXG4gIGdyYXBoLmJmcyh7XG4gICAgcm9vdHM6IHJvb3RzLFxuICAgIGRpcmVjdGVkOiBvcHRpb25zLmRpcmVjdGVkLFxuICAgIHZpc2l0OiBmdW5jdGlvbiB2aXNpdChub2RlLCBlZGdlLCBwTm9kZSwgaSwgZGVwdGgpIHtcbiAgICAgIHZhciBlbGUgPSBub2RlWzBdO1xuICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICBhZGRUb0RlcHRoKGVsZSwgZGVwdGgpO1xuICAgICAgZm91bmRCeUJmc1tpZF0gPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY2hlY2sgZm9yIG5vZGVzIG5vdCBmb3VuZCBieSBiZnNcbiAgdmFyIG9ycGhhbk5vZGVzID0gW107XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2VsZSA9IG5vZGVzW19pMl07XG4gICAgaWYgKGZvdW5kQnlCZnNbX2VsZS5pZCgpXSkge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ycGhhbk5vZGVzLnB1c2goX2VsZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXNzaWduIHRoZSBub2RlcyBhIGRlcHRoIGFuZCBpbmRleFxuXG4gIHZhciBhc3NpZ25EZXB0aHNBdCA9IGZ1bmN0aW9uIGFzc2lnbkRlcHRoc0F0KGkpIHtcbiAgICB2YXIgZWxlcyA9IGRlcHRoc1tpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBfZWxlMiA9IGVsZXNbal07XG4gICAgICBpZiAoX2VsZTIgPT0gbnVsbCkge1xuICAgICAgICBlbGVzLnNwbGljZShqLCAxKTtcbiAgICAgICAgai0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNldEluZm8oX2VsZTIsIHtcbiAgICAgICAgZGVwdGg6IGksXG4gICAgICAgIGluZGV4OiBqXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBhc3NpZ25EZXB0aHMgPSBmdW5jdGlvbiBhc3NpZ25EZXB0aHMoKSB7XG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgZGVwdGhzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIGFzc2lnbkRlcHRoc0F0KF9pMyk7XG4gICAgfVxuICB9O1xuICB2YXIgYWRqdXN0TWF4aW1hbGx5ID0gZnVuY3Rpb24gYWRqdXN0TWF4aW1hbGx5KGVsZSwgc2hpZnRlZCkge1xuICAgIHZhciBlSW5mbyA9IGdldEluZm8oZWxlKTtcbiAgICB2YXIgaW5jb21lcnMgPSBlbGUuaW5jb21lcnMoKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwuaXNOb2RlKCkgJiYgZWxlcy5oYXMoZWwpO1xuICAgIH0pO1xuICAgIHZhciBtYXhEZXB0aCA9IC0xO1xuICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaW5jb21lcnMubGVuZ3RoOyBrKyspIHtcbiAgICAgIHZhciBpbmNtciA9IGluY29tZXJzW2tdO1xuICAgICAgdmFyIGlJbmZvID0gZ2V0SW5mbyhpbmNtcik7XG4gICAgICBtYXhEZXB0aCA9IE1hdGgubWF4KG1heERlcHRoLCBpSW5mby5kZXB0aCk7XG4gICAgfVxuICAgIGlmIChlSW5mby5kZXB0aCA8PSBtYXhEZXB0aCkge1xuICAgICAgaWYgKCFvcHRpb25zLmFjeWNsaWMgJiYgc2hpZnRlZFtpZF0pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgbmV3RGVwdGggPSBtYXhEZXB0aCArIDE7XG4gICAgICBjaGFuZ2VEZXB0aChlbGUsIG5ld0RlcHRoKTtcbiAgICAgIHNoaWZ0ZWRbaWRdID0gbmV3RGVwdGg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIGZvciB0aGUgZGlyZWN0ZWQgY2FzZSwgdHJ5IHRvIG1ha2UgdGhlIGVkZ2VzIGFsbCBnbyBkb3duIChpLmUuIGRlcHRoIGkgPT4gZGVwdGggaSArIDEpXG4gIGlmIChkaXJlY3RlZCAmJiBtYXhpbWFsKSB7XG4gICAgdmFyIFEgPSBbXTtcbiAgICB2YXIgc2hpZnRlZCA9IHt9O1xuICAgIHZhciBlbnF1ZXVlID0gZnVuY3Rpb24gZW5xdWV1ZShuKSB7XG4gICAgICByZXR1cm4gUS5wdXNoKG4pO1xuICAgIH07XG4gICAgdmFyIGRlcXVldWUgPSBmdW5jdGlvbiBkZXF1ZXVlKCkge1xuICAgICAgcmV0dXJuIFEuc2hpZnQoKTtcbiAgICB9O1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBRLnB1c2gobik7XG4gICAgfSk7XG4gICAgd2hpbGUgKFEubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIF9lbGUzID0gZGVxdWV1ZSgpO1xuICAgICAgdmFyIGRpZFNoaWZ0ID0gYWRqdXN0TWF4aW1hbGx5KF9lbGUzLCBzaGlmdGVkKTtcbiAgICAgIGlmIChkaWRTaGlmdCkge1xuICAgICAgICBfZWxlMy5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICByZXR1cm4gZWwuaXNOb2RlKCkgJiYgZWxlcy5oYXMoZWwpO1xuICAgICAgICB9KS5mb3JFYWNoKGVucXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChkaWRTaGlmdCA9PT0gbnVsbCkge1xuICAgICAgICB3YXJuKCdEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgJyArIF9lbGUzLmlkKCkgKyAnYC4gIEJhaWxpbmcgbWF4aW1hbCBhZGp1c3RtZW50IGR1ZSB0byBjeWNsZS4gIFVzZSBgb3B0aW9ucy5tYXhpbWFsOiB0cnVlYCBvbmx5IG9uIERBR3MuJyk7XG4gICAgICAgIGJyZWFrOyAvLyBleGl0IG9uIGZhaWx1cmVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3NpZ25EZXB0aHMoKTsgLy8gY2xlYXIgaG9sZXNcblxuICAvLyBmaW5kIG1pbiBkaXN0YW5jZSB3ZSBuZWVkIHRvIGxlYXZlIGJldHdlZW4gbm9kZXNcbiAgdmFyIG1pbkRpc3RhbmNlID0gMDtcbiAgaWYgKG9wdGlvbnMuYXZvaWRPdmVybGFwKSB7XG4gICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbm9kZXMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgdmFyIG4gPSBub2Rlc1tfaTRdO1xuICAgICAgdmFyIG5iYiA9IG4ubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICAgIHZhciB3ID0gbmJiLnc7XG4gICAgICB2YXIgaCA9IG5iYi5oO1xuICAgICAgbWluRGlzdGFuY2UgPSBNYXRoLm1heChtaW5EaXN0YW5jZSwgdywgaCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZ2V0IHRoZSB3ZWlnaHRlZCBwZXJjZW50IGZvciBhbiBlbGVtZW50IGJhc2VkIG9uIGl0cyBjb25uZWN0aXZpdHkgdG8gb3RoZXIgbGV2ZWxzXG4gIHZhciBjYWNoZWRXZWlnaHRlZFBlcmNlbnQgPSB7fTtcbiAgdmFyIGdldFdlaWdodGVkUGVyY2VudCA9IGZ1bmN0aW9uIGdldFdlaWdodGVkUGVyY2VudChlbGUpIHtcbiAgICBpZiAoY2FjaGVkV2VpZ2h0ZWRQZXJjZW50W2VsZS5pZCgpXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV07XG4gICAgfVxuICAgIHZhciBlbGVEZXB0aCA9IGdldEluZm8oZWxlKS5kZXB0aDtcbiAgICB2YXIgbmVpZ2hib3JzID0gZWxlLm5laWdoYm9yaG9vZCgpO1xuICAgIHZhciBwZXJjZW50ID0gMDtcbiAgICB2YXIgc2FtcGxlcyA9IDA7XG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbmVpZ2hib3JzLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgIHZhciBuZWlnaGJvciA9IG5laWdoYm9yc1tfaTVdO1xuICAgICAgaWYgKG5laWdoYm9yLmlzRWRnZSgpIHx8IG5laWdoYm9yLmlzUGFyZW50KCkgfHwgIW5vZGVzLmhhcyhuZWlnaGJvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgYmYgPSBnZXRJbmZvKG5laWdoYm9yKTtcbiAgICAgIGlmIChiZiA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gYmYuaW5kZXg7XG4gICAgICB2YXIgZGVwdGggPSBiZi5kZXB0aDtcblxuICAgICAgLy8gdW5hc3NpZ25lZCBuZWlnaGJvdXJzIHNob3VsZG4ndCBhZmZlY3QgdGhlIG9yZGVyaW5nXG4gICAgICBpZiAoaW5kZXggPT0gbnVsbCB8fCBkZXB0aCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIG5EZXB0aCA9IGRlcHRoc1tkZXB0aF0ubGVuZ3RoO1xuICAgICAgaWYgKGRlcHRoIDwgZWxlRGVwdGgpIHtcbiAgICAgICAgLy8gb25seSBnZXQgaW5mbHVlbmNlZCBieSBlbGVtZW50cyBhYm92ZVxuICAgICAgICBwZXJjZW50ICs9IGluZGV4IC8gbkRlcHRoO1xuICAgICAgICBzYW1wbGVzKys7XG4gICAgICB9XG4gICAgfVxuICAgIHNhbXBsZXMgPSBNYXRoLm1heCgxLCBzYW1wbGVzKTtcbiAgICBwZXJjZW50ID0gcGVyY2VudCAvIHNhbXBsZXM7XG4gICAgaWYgKHNhbXBsZXMgPT09IDApIHtcbiAgICAgIC8vIHB1dCBsb25lIG5vZGVzIGF0IHRoZSBzdGFydFxuICAgICAgcGVyY2VudCA9IDA7XG4gICAgfVxuICAgIGNhY2hlZFdlaWdodGVkUGVyY2VudFtlbGUuaWQoKV0gPSBwZXJjZW50O1xuICAgIHJldHVybiBwZXJjZW50O1xuICB9O1xuXG4gIC8vIHJlYXJyYW5nZSB0aGUgaW5kaWNlcyBpbiBlYWNoIGRlcHRoIGxldmVsIGJhc2VkIG9uIGNvbm5lY3Rpdml0eVxuXG4gIHZhciBzb3J0Rm4gPSBmdW5jdGlvbiBzb3J0Rm4oYSwgYikge1xuICAgIHZhciBhcGN0ID0gZ2V0V2VpZ2h0ZWRQZXJjZW50KGEpO1xuICAgIHZhciBicGN0ID0gZ2V0V2VpZ2h0ZWRQZXJjZW50KGIpO1xuICAgIHZhciBkaWZmID0gYXBjdCAtIGJwY3Q7XG4gICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgIHJldHVybiBhc2NlbmRpbmcoYS5pZCgpLCBiLmlkKCkpOyAvLyBtYWtlIHN1cmUgc29ydCBkb2Vzbid0IGhhdmUgZG9uJ3QtY2FyZSBjb21wYXJpc29uc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH07XG4gIGlmIChvcHRpb25zLmRlcHRoU29ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc29ydEZuID0gb3B0aW9ucy5kZXB0aFNvcnQ7XG4gIH1cblxuICAvLyBzb3J0IGVhY2ggbGV2ZWwgdG8gbWFrZSBjb25uZWN0ZWQgbm9kZXMgY2xvc2VyXG4gIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IGRlcHRocy5sZW5ndGg7IF9pNisrKSB7XG4gICAgZGVwdGhzW19pNl0uc29ydChzb3J0Rm4pO1xuICAgIGFzc2lnbkRlcHRoc0F0KF9pNik7XG4gIH1cblxuICAvLyBhc3NpZ24gb3JwaGFuIG5vZGVzIHRvIGEgbmV3IHRvcC1sZXZlbCBkZXB0aFxuICB2YXIgb3JwaGFuRGVwdGggPSBbXTtcbiAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgb3JwaGFuTm9kZXMubGVuZ3RoOyBfaTcrKykge1xuICAgIG9ycGhhbkRlcHRoLnB1c2gob3JwaGFuTm9kZXNbX2k3XSk7XG4gIH1cbiAgZGVwdGhzLnVuc2hpZnQob3JwaGFuRGVwdGgpO1xuICBhc3NpZ25EZXB0aHMoKTtcbiAgdmFyIGJpZ2dlc3REZXB0aFNpemUgPSAwO1xuICBmb3IgKHZhciBfaTggPSAwOyBfaTggPCBkZXB0aHMubGVuZ3RoOyBfaTgrKykge1xuICAgIGJpZ2dlc3REZXB0aFNpemUgPSBNYXRoLm1heChkZXB0aHNbX2k4XS5sZW5ndGgsIGJpZ2dlc3REZXB0aFNpemUpO1xuICB9XG4gIHZhciBjZW50ZXIgPSB7XG4gICAgeDogYmIueDEgKyBiYi53IC8gMixcbiAgICB5OiBiYi54MSArIGJiLmggLyAyXG4gIH07XG4gIHZhciBtYXhEZXB0aFNpemUgPSBkZXB0aHMucmVkdWNlKGZ1bmN0aW9uIChtYXgsIGVsZXMpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBlbGVzLmxlbmd0aCk7XG4gIH0sIDApO1xuICB2YXIgZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQb3NpdGlvbihlbGUpIHtcbiAgICB2YXIgX2dldEluZm8yID0gZ2V0SW5mbyhlbGUpLFxuICAgICAgZGVwdGggPSBfZ2V0SW5mbzIuZGVwdGgsXG4gICAgICBpbmRleCA9IF9nZXRJbmZvMi5pbmRleDtcbiAgICB2YXIgZGVwdGhTaXplID0gZGVwdGhzW2RlcHRoXS5sZW5ndGg7XG4gICAgdmFyIGRpc3RhbmNlWCA9IE1hdGgubWF4KGJiLncgLyAoKG9wdGlvbnMuZ3JpZCA/IG1heERlcHRoU2l6ZSA6IGRlcHRoU2l6ZSkgKyAxKSwgbWluRGlzdGFuY2UpO1xuICAgIHZhciBkaXN0YW5jZVkgPSBNYXRoLm1heChiYi5oIC8gKGRlcHRocy5sZW5ndGggKyAxKSwgbWluRGlzdGFuY2UpO1xuICAgIHZhciByYWRpdXNTdGVwU2l6ZSA9IE1hdGgubWluKGJiLncgLyAyIC8gZGVwdGhzLmxlbmd0aCwgYmIuaCAvIDIgLyBkZXB0aHMubGVuZ3RoKTtcbiAgICByYWRpdXNTdGVwU2l6ZSA9IE1hdGgubWF4KHJhZGl1c1N0ZXBTaXplLCBtaW5EaXN0YW5jZSk7XG4gICAgaWYgKCFvcHRpb25zLmNpcmNsZSkge1xuICAgICAgdmFyIGVwb3MgPSB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgKGluZGV4ICsgMSAtIChkZXB0aFNpemUgKyAxKSAvIDIpICogZGlzdGFuY2VYLFxuICAgICAgICB5OiAoZGVwdGggKyAxKSAqIGRpc3RhbmNlWVxuICAgICAgfTtcbiAgICAgIHJldHVybiBlcG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmFkaXVzID0gcmFkaXVzU3RlcFNpemUgKiBkZXB0aCArIHJhZGl1c1N0ZXBTaXplIC0gKGRlcHRocy5sZW5ndGggPiAwICYmIGRlcHRoc1swXS5sZW5ndGggPD0gMyA/IHJhZGl1c1N0ZXBTaXplIC8gMiA6IDApO1xuICAgICAgdmFyIHRoZXRhID0gMiAqIE1hdGguUEkgLyBkZXB0aHNbZGVwdGhdLmxlbmd0aCAqIGluZGV4O1xuICAgICAgaWYgKGRlcHRoID09PSAwICYmIGRlcHRoc1swXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmFkaXVzID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgcmFkaXVzICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiBjZW50ZXIueSArIHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZ2V0UG9zaXRpb24pO1xuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbnZhciBkZWZhdWx0cyQ2ID0ge1xuICBmaXQ6IHRydWUsXG4gIC8vIHdoZXRoZXIgdG8gZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgZ3JhcGhcbiAgcGFkZGluZzogMzAsXG4gIC8vIHRoZSBwYWRkaW5nIG9uIGZpdFxuICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYXZvaWRPdmVybGFwOiB0cnVlLFxuICAvLyBwcmV2ZW50cyBub2RlIG92ZXJsYXAsIG1heSBvdmVyZmxvdyBib3VuZGluZ0JveCBhbmQgcmFkaXVzIGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICByYWRpdXM6IHVuZGVmaW5lZCxcbiAgLy8gdGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlXG4gIHN0YXJ0QW5nbGU6IDMgLyAyICogTWF0aC5QSSxcbiAgLy8gd2hlcmUgbm9kZXMgc3RhcnQgaW4gcmFkaWFuc1xuICBzd2VlcDogdW5kZWZpbmVkLFxuICAvLyBob3cgbWFueSByYWRpYW5zIHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIChkZWZhdWx0cyB0byBmdWxsIGNpcmNsZSlcbiAgY2xvY2t3aXNlOiB0cnVlLFxuICAvLyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGdvIGNsb2Nrd2lzZSAodHJ1ZSkgb3IgY291bnRlcmNsb2Nrd2lzZS9hbnRpY2xvY2t3aXNlIChmYWxzZSlcbiAgc29ydDogdW5kZWZpbmVkLFxuICAvLyBhIHNvcnRpbmcgZnVuY3Rpb24gdG8gb3JkZXIgdGhlIG5vZGVzOyBlLmcuIGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYS5kYXRhKCd3ZWlnaHQnKSAtIGIuZGF0YSgnd2VpZ2h0JykgfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG59O1xuXG5mdW5jdGlvbiBDaXJjbGVMYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDYsIG9wdGlvbnMpO1xufVxuQ2lyY2xlTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwYXJhbXMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBvcHRpb25zID0gcGFyYW1zO1xuICB2YXIgY3kgPSBwYXJhbXMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgY2xvY2t3aXNlID0gb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlICE9PSB1bmRlZmluZWQgPyAhb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlIDogb3B0aW9ucy5jbG9ja3dpc2U7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcbiAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICB9XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgY2VudGVyID0ge1xuICAgIHg6IGJiLngxICsgYmIudyAvIDIsXG4gICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICB9O1xuICB2YXIgc3dlZXAgPSBvcHRpb25zLnN3ZWVwID09PSB1bmRlZmluZWQgPyAyICogTWF0aC5QSSAtIDIgKiBNYXRoLlBJIC8gbm9kZXMubGVuZ3RoIDogb3B0aW9ucy5zd2VlcDtcbiAgdmFyIGRUaGV0YSA9IHN3ZWVwIC8gTWF0aC5tYXgoMSwgbm9kZXMubGVuZ3RoIC0gMSk7XG4gIHZhciByO1xuICB2YXIgbWluRGlzdGFuY2UgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG4gPSBub2Rlc1tpXTtcbiAgICB2YXIgbmJiID0gbi5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuICAgIHZhciB3ID0gbmJiLnc7XG4gICAgdmFyIGggPSBuYmIuaDtcbiAgICBtaW5EaXN0YW5jZSA9IE1hdGgubWF4KG1pbkRpc3RhbmNlLCB3LCBoKTtcbiAgfVxuICBpZiAobnVtYmVyJDEob3B0aW9ucy5yYWRpdXMpKSB7XG4gICAgciA9IG9wdGlvbnMucmFkaXVzO1xuICB9IGVsc2UgaWYgKG5vZGVzLmxlbmd0aCA8PSAxKSB7XG4gICAgciA9IDA7XG4gIH0gZWxzZSB7XG4gICAgciA9IE1hdGgubWluKGJiLmgsIGJiLncpIC8gMiAtIG1pbkRpc3RhbmNlO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSByYWRpdXNcbiAgaWYgKG5vZGVzLmxlbmd0aCA+IDEgJiYgb3B0aW9ucy5hdm9pZE92ZXJsYXApIHtcbiAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgbWluRGlzdGFuY2UgKj0gMS43NTsgLy8ganVzdCB0byBoYXZlIHNvbWUgbmljZSBzcGFjaW5nXG5cbiAgICB2YXIgZGNvcyA9IE1hdGguY29zKGRUaGV0YSkgLSBNYXRoLmNvcygwKTtcbiAgICB2YXIgZHNpbiA9IE1hdGguc2luKGRUaGV0YSkgLSBNYXRoLnNpbigwKTtcbiAgICB2YXIgck1pbiA9IE1hdGguc3FydChtaW5EaXN0YW5jZSAqIG1pbkRpc3RhbmNlIC8gKGRjb3MgKiBkY29zICsgZHNpbiAqIGRzaW4pKTsgLy8gcy50LiBubyBub2RlcyBvdmVybGFwcGluZ1xuICAgIHIgPSBNYXRoLm1heChyTWluLCByKTtcbiAgfVxuICB2YXIgZ2V0UG9zID0gZnVuY3Rpb24gZ2V0UG9zKGVsZSwgaSkge1xuICAgIHZhciB0aGV0YSA9IG9wdGlvbnMuc3RhcnRBbmdsZSArIGkgKiBkVGhldGEgKiAoY2xvY2t3aXNlID8gMSA6IC0xKTtcbiAgICB2YXIgcnggPSByICogTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciByeSA9IHIgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIHBvcyA9IHtcbiAgICAgIHg6IGNlbnRlci54ICsgcngsXG4gICAgICB5OiBjZW50ZXIueSArIHJ5XG4gICAgfTtcbiAgICByZXR1cm4gcG9zO1xuICB9O1xuICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGRlZmF1bHRzJDUgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBncmFwaFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gdGhlIHBhZGRpbmcgb24gZml0XG4gIHN0YXJ0QW5nbGU6IDMgLyAyICogTWF0aC5QSSxcbiAgLy8gd2hlcmUgbm9kZXMgc3RhcnQgaW4gcmFkaWFuc1xuICBzd2VlcDogdW5kZWZpbmVkLFxuICAvLyBob3cgbWFueSByYWRpYW5zIHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIChkZWZhdWx0cyB0byBmdWxsIGNpcmNsZSlcbiAgY2xvY2t3aXNlOiB0cnVlLFxuICAvLyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGdvIGNsb2Nrd2lzZSAodHJ1ZSkgb3IgY291bnRlcmNsb2Nrd2lzZS9hbnRpY2xvY2t3aXNlIChmYWxzZSlcbiAgZXF1aWRpc3RhbnQ6IGZhbHNlLFxuICAvLyB3aGV0aGVyIGxldmVscyBoYXZlIGFuIGVxdWFsIHJhZGlhbCBkaXN0YW5jZSBiZXR3ZW4gdGhlbSwgbWF5IGNhdXNlIGJvdW5kaW5nIGJveCBvdmVyZmxvd1xuICBtaW5Ob2RlU3BhY2luZzogMTAsXG4gIC8vIG1pbiBzcGFjaW5nIGJldHdlZW4gb3V0c2lkZSBvZiBub2RlcyAodXNlZCBmb3IgcmFkaXVzIGFkanVzdG1lbnQpXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gIC8vIHByZXZlbnRzIG5vZGUgb3ZlcmxhcCwgbWF5IG92ZXJmbG93IGJvdW5kaW5nQm94IGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gIC8vIGhlaWdodCBvZiBsYXlvdXQgYXJlYSAob3ZlcnJpZGVzIGNvbnRhaW5lciBoZWlnaHQpXG4gIHdpZHRoOiB1bmRlZmluZWQsXG4gIC8vIHdpZHRoIG9mIGxheW91dCBhcmVhIChvdmVycmlkZXMgY29udGFpbmVyIHdpZHRoKVxuICBzcGFjaW5nRmFjdG9yOiB1bmRlZmluZWQsXG4gIC8vIEFwcGxpZXMgYSBtdWx0aXBsaWNhdGl2ZSBmYWN0b3IgKD4wKSB0byBleHBhbmQgb3IgY29tcHJlc3MgdGhlIG92ZXJhbGwgYXJlYSB0aGF0IHRoZSBub2RlcyB0YWtlIHVwXG4gIGNvbmNlbnRyaWM6IGZ1bmN0aW9uIGNvbmNlbnRyaWMobm9kZSkge1xuICAgIC8vIHJldHVybnMgbnVtZXJpYyB2YWx1ZSBmb3IgZWFjaCBub2RlLCBwbGFjaW5nIGhpZ2hlciBub2RlcyBpbiBsZXZlbHMgdG93YXJkcyB0aGUgY2VudHJlXG4gICAgcmV0dXJuIG5vZGUuZGVncmVlKCk7XG4gIH0sXG4gIGxldmVsV2lkdGg6IGZ1bmN0aW9uIGxldmVsV2lkdGgobm9kZXMpIHtcbiAgICAvLyB0aGUgdmFyaWF0aW9uIG9mIGNvbmNlbnRyaWMgdmFsdWVzIGluIGVhY2ggbGV2ZWxcbiAgICByZXR1cm4gbm9kZXMubWF4RGVncmVlKCkgLyA0O1xuICB9LFxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG5cbmZ1bmN0aW9uIENvbmNlbnRyaWNMYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDUsIG9wdGlvbnMpO1xufVxuQ29uY2VudHJpY0xheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgb3B0aW9ucyA9IHBhcmFtcztcbiAgdmFyIGNsb2Nrd2lzZSA9IG9wdGlvbnMuY291bnRlcmNsb2Nrd2lzZSAhPT0gdW5kZWZpbmVkID8gIW9wdGlvbnMuY291bnRlcmNsb2Nrd2lzZSA6IG9wdGlvbnMuY2xvY2t3aXNlO1xuICB2YXIgY3kgPSBwYXJhbXMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCkubm90KCc6cGFyZW50Jyk7XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgY2VudGVyID0ge1xuICAgIHg6IGJiLngxICsgYmIudyAvIDIsXG4gICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICB9O1xuICB2YXIgbm9kZVZhbHVlcyA9IFtdOyAvLyB7IG5vZGUsIHZhbHVlIH1cbiAgdmFyIG1heE5vZGVTaXplID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgdmFyIHZhbHVlID0gdm9pZCAwO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBub2RlIHZhbHVlXG4gICAgdmFsdWUgPSBvcHRpb25zLmNvbmNlbnRyaWMobm9kZSk7XG4gICAgbm9kZVZhbHVlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG5vZGU6IG5vZGVcbiAgICB9KTtcblxuICAgIC8vIGZvciBzdHlsZSBtYXBwaW5nXG4gICAgbm9kZS5fcHJpdmF0ZS5zY3JhdGNoLmNvbmNlbnRyaWMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIGluIGNhc2Ugd2UgdXNlZCB0aGUgYGNvbmNlbnRyaWNgIGluIHN0eWxlXG4gIG5vZGVzLnVwZGF0ZVN0eWxlKCk7XG5cbiAgLy8gY2FsY3VsYXRlIG1heCBzaXplIG5vdyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1cGRhdGVkIG1hcHBlcnNcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG5vZGVzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBfbm9kZSA9IG5vZGVzW19pXTtcbiAgICB2YXIgbmJiID0gX25vZGUubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICBtYXhOb2RlU2l6ZSA9IE1hdGgubWF4KG1heE5vZGVTaXplLCBuYmIudywgbmJiLmgpO1xuICB9XG5cbiAgLy8gc29ydCBub2RlIHZhbHVlcyBpbiBkZXNjcmVhc2luZyBvcmRlclxuICBub2RlVmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYi52YWx1ZSAtIGEudmFsdWU7XG4gIH0pO1xuICB2YXIgbGV2ZWxXaWR0aCA9IG9wdGlvbnMubGV2ZWxXaWR0aChub2Rlcyk7XG5cbiAgLy8gcHV0IHRoZSB2YWx1ZXMgaW50byBsZXZlbHNcbiAgdmFyIGxldmVscyA9IFtbXV07XG4gIHZhciBjdXJyZW50TGV2ZWwgPSBsZXZlbHNbMF07XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVWYWx1ZXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciB2YWwgPSBub2RlVmFsdWVzW19pMl07XG4gICAgaWYgKGN1cnJlbnRMZXZlbC5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRMZXZlbFswXS52YWx1ZSAtIHZhbC52YWx1ZSk7XG4gICAgICBpZiAoZGlmZiA+PSBsZXZlbFdpZHRoKSB7XG4gICAgICAgIGN1cnJlbnRMZXZlbCA9IFtdO1xuICAgICAgICBsZXZlbHMucHVzaChjdXJyZW50TGV2ZWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50TGV2ZWwucHVzaCh2YWwpO1xuICB9XG5cbiAgLy8gY3JlYXRlIHBvc2l0aW9ucyBmcm9tIGxldmVsc1xuXG4gIHZhciBtaW5EaXN0ID0gbWF4Tm9kZVNpemUgKyBvcHRpb25zLm1pbk5vZGVTcGFjaW5nOyAvLyBtaW4gZGlzdCBiZXR3ZWVuIG5vZGVzXG5cbiAgaWYgKCFvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgIC8vIHRoZW4gc3RyaWN0bHkgY29uc3RyYWluIHRvIGJiXG4gICAgdmFyIGZpcnN0THZsSGFzTXVsdGkgPSBsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbHNbMF0ubGVuZ3RoID4gMTtcbiAgICB2YXIgbWF4UiA9IE1hdGgubWluKGJiLncsIGJiLmgpIC8gMiAtIG1pbkRpc3Q7XG4gICAgdmFyIHJTdGVwID0gbWF4UiAvIChsZXZlbHMubGVuZ3RoICsgZmlyc3RMdmxIYXNNdWx0aSA/IDEgOiAwKTtcbiAgICBtaW5EaXN0ID0gTWF0aC5taW4obWluRGlzdCwgclN0ZXApO1xuICB9XG5cbiAgLy8gZmluZCB0aGUgbWV0cmljcyBmb3IgZWFjaCBsZXZlbFxuICB2YXIgciA9IDA7XG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGxldmVscy5sZW5ndGg7IF9pMysrKSB7XG4gICAgdmFyIGxldmVsID0gbGV2ZWxzW19pM107XG4gICAgdmFyIHN3ZWVwID0gb3B0aW9ucy5zd2VlcCA9PT0gdW5kZWZpbmVkID8gMiAqIE1hdGguUEkgLSAyICogTWF0aC5QSSAvIGxldmVsLmxlbmd0aCA6IG9wdGlvbnMuc3dlZXA7XG4gICAgdmFyIGRUaGV0YSA9IGxldmVsLmRUaGV0YSA9IHN3ZWVwIC8gTWF0aC5tYXgoMSwgbGV2ZWwubGVuZ3RoIC0gMSk7XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIHJhZGl1c1xuICAgIGlmIChsZXZlbC5sZW5ndGggPiAxICYmIG9wdGlvbnMuYXZvaWRPdmVybGFwKSB7XG4gICAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgICB2YXIgZGNvcyA9IE1hdGguY29zKGRUaGV0YSkgLSBNYXRoLmNvcygwKTtcbiAgICAgIHZhciBkc2luID0gTWF0aC5zaW4oZFRoZXRhKSAtIE1hdGguc2luKDApO1xuICAgICAgdmFyIHJNaW4gPSBNYXRoLnNxcnQobWluRGlzdCAqIG1pbkRpc3QgLyAoZGNvcyAqIGRjb3MgKyBkc2luICogZHNpbikpOyAvLyBzLnQuIG5vIG5vZGVzIG92ZXJsYXBwaW5nXG5cbiAgICAgIHIgPSBNYXRoLm1heChyTWluLCByKTtcbiAgICB9XG4gICAgbGV2ZWwuciA9IHI7XG4gICAgciArPSBtaW5EaXN0O1xuICB9XG4gIGlmIChvcHRpb25zLmVxdWlkaXN0YW50KSB7XG4gICAgdmFyIHJEZWx0YU1heCA9IDA7XG4gICAgdmFyIF9yID0gMDtcbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBsZXZlbHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgdmFyIF9sZXZlbCA9IGxldmVsc1tfaTRdO1xuICAgICAgdmFyIHJEZWx0YSA9IF9sZXZlbC5yIC0gX3I7XG4gICAgICByRGVsdGFNYXggPSBNYXRoLm1heChyRGVsdGFNYXgsIHJEZWx0YSk7XG4gICAgfVxuICAgIF9yID0gMDtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBsZXZlbHMubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdmFyIF9sZXZlbDIgPSBsZXZlbHNbX2k1XTtcbiAgICAgIGlmIChfaTUgPT09IDApIHtcbiAgICAgICAgX3IgPSBfbGV2ZWwyLnI7XG4gICAgICB9XG4gICAgICBfbGV2ZWwyLnIgPSBfcjtcbiAgICAgIF9yICs9IHJEZWx0YU1heDtcbiAgICB9XG4gIH1cblxuICAvLyBjYWxjdWxhdGUgdGhlIG5vZGUgcG9zaXRpb25zXG4gIHZhciBwb3MgPSB7fTsgLy8gaWQgPT4gcG9zaXRpb25cbiAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbGV2ZWxzLmxlbmd0aDsgX2k2KyspIHtcbiAgICB2YXIgX2xldmVsMyA9IGxldmVsc1tfaTZdO1xuICAgIHZhciBfZFRoZXRhID0gX2xldmVsMy5kVGhldGE7XG4gICAgdmFyIF9yMiA9IF9sZXZlbDMucjtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9sZXZlbDMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBfdmFsID0gX2xldmVsM1tqXTtcbiAgICAgIHZhciB0aGV0YSA9IG9wdGlvbnMuc3RhcnRBbmdsZSArIChjbG9ja3dpc2UgPyAxIDogLTEpICogX2RUaGV0YSAqIGo7XG4gICAgICB2YXIgcCA9IHtcbiAgICAgICAgeDogY2VudGVyLnggKyBfcjIgKiBNYXRoLmNvcyh0aGV0YSksXG4gICAgICAgIHk6IGNlbnRlci55ICsgX3IyICogTWF0aC5zaW4odGhldGEpXG4gICAgICB9O1xuICAgICAgcG9zW192YWwubm9kZS5pZCgpXSA9IHA7XG4gICAgfVxuICB9XG5cbiAgLy8gcG9zaXRpb24gdGhlIG5vZGVzXG4gIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgIHJldHVybiBwb3NbaWRdO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vKlxuVGhlIENvU0UgbGF5b3V0IHdhcyB3cml0dGVuIGJ5IEdlcmFyZG8gSHVjay5cbmh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9nZXJhcmRvaHVjay9cblxuQmFzZWQgb24gdGhlIGZvbGxvd2luZyBhcnRpY2xlOlxuaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTE0OTgwNDdcblxuTW9kaWZpY2F0aW9ucyB0cmFja2VkIG9uIEdpdGh1Yi5cbiovXG52YXIgREVCVUc7XG5cbi8qKlxuICogQGJyaWVmIDogIGRlZmF1bHQgbGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIGRlZmF1bHRzJDQgPSB7XG4gIC8vIENhbGxlZCBvbiBgbGF5b3V0cmVhZHlgXG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAvLyBDYWxsZWQgb24gYGxheW91dHN0b3BgXG4gIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7fSxcbiAgLy8gV2hldGhlciB0byBhbmltYXRlIHdoaWxlIHJ1bm5pbmcgdGhlIGxheW91dFxuICAvLyB0cnVlIDogQW5pbWF0ZSBjb250aW51b3VzbHkgYXMgdGhlIGxheW91dCBpcyBydW5uaW5nXG4gIC8vIGZhbHNlIDogSnVzdCBzaG93IHRoZSBlbmQgcmVzdWx0XG4gIC8vICdlbmQnIDogQW5pbWF0ZSB3aXRoIHRoZSBlbmQgcmVzdWx0LCBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9ucyB0byB0aGUgZW5kIHBvc2l0aW9uc1xuICBhbmltYXRlOiB0cnVlLFxuICAvLyBFYXNpbmcgb2YgdGhlIGFuaW1hdGlvbiBmb3IgYW5pbWF0ZTonZW5kJ1xuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIGFuaW1hdGU6J2VuZCdcbiAgYW5pbWF0aW9uRHVyYXRpb246IHVuZGVmaW5lZCxcbiAgLy8gQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWRcbiAgLy8gQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkXG4gIC8vIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBUaGUgbGF5b3V0IGFuaW1hdGVzIG9ubHkgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcyBmb3IgYW5pbWF0ZTp0cnVlXG4gIC8vIChwcmV2ZW50cyBmbGFzaGluZyBvbiBmYXN0IHJ1bnMpXG4gIGFuaW1hdGlvblRocmVzaG9sZDogMjUwLFxuICAvLyBOdW1iZXIgb2YgaXRlcmF0aW9ucyBiZXR3ZWVuIGNvbnNlY3V0aXZlIHNjcmVlbiBwb3NpdGlvbnMgdXBkYXRlXG4gIHJlZnJlc2g6IDIwLFxuICAvLyBXaGV0aGVyIHRvIGZpdCB0aGUgbmV0d29yayB2aWV3IGFmdGVyIHdoZW4gZG9uZVxuICBmaXQ6IHRydWUsXG4gIC8vIFBhZGRpbmcgb24gZml0XG4gIHBhZGRpbmc6IDMwLFxuICAvLyBDb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gUmFuZG9taXplIHRoZSBpbml0aWFsIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgKHRydWUpIG9yIHVzZSBleGlzdGluZyBwb3NpdGlvbnMgKGZhbHNlKVxuICByYW5kb21pemU6IGZhbHNlLFxuICAvLyBFeHRyYSBzcGFjaW5nIGJldHdlZW4gY29tcG9uZW50cyBpbiBub24tY29tcG91bmQgZ3JhcGhzXG4gIGNvbXBvbmVudFNwYWNpbmc6IDQwLFxuICAvLyBOb2RlIHJlcHVsc2lvbiAobm9uIG92ZXJsYXBwaW5nKSBtdWx0aXBsaWVyXG4gIG5vZGVSZXB1bHNpb246IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZSkge1xuICAgIHJldHVybiAyMDQ4O1xuICB9LFxuICAvLyBOb2RlIHJlcHVsc2lvbiAob3ZlcmxhcHBpbmcpIG11bHRpcGxpZXJcbiAgbm9kZU92ZXJsYXA6IDQsXG4gIC8vIElkZWFsIGVkZ2UgKG5vbiBuZXN0ZWQpIGxlbmd0aFxuICBpZGVhbEVkZ2VMZW5ndGg6IGZ1bmN0aW9uIGlkZWFsRWRnZUxlbmd0aChlZGdlKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9LFxuICAvLyBEaXZpc29yIHRvIGNvbXB1dGUgZWRnZSBmb3JjZXNcbiAgZWRnZUVsYXN0aWNpdHk6IGZ1bmN0aW9uIGVkZ2VFbGFzdGljaXR5KGVkZ2UpIHtcbiAgICByZXR1cm4gMzI7XG4gIH0sXG4gIC8vIE5lc3RpbmcgZmFjdG9yIChtdWx0aXBsaWVyKSB0byBjb21wdXRlIGlkZWFsIGVkZ2UgbGVuZ3RoIGZvciBuZXN0ZWQgZWRnZXNcbiAgbmVzdGluZ0ZhY3RvcjogMS4yLFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudClcbiAgZ3Jhdml0eTogMSxcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtXG4gIG51bUl0ZXI6IDEwMDAsXG4gIC8vIEluaXRpYWwgdGVtcGVyYXR1cmUgKG1heGltdW0gbm9kZSBkaXNwbGFjZW1lbnQpXG4gIGluaXRpYWxUZW1wOiAxMDAwLFxuICAvLyBDb29saW5nIGZhY3RvciAoaG93IHRoZSB0ZW1wZXJhdHVyZSBpcyByZWR1Y2VkIGJldHdlZW4gY29uc2VjdXRpdmUgaXRlcmF0aW9uc1xuICBjb29saW5nRmFjdG9yOiAwLjk5LFxuICAvLyBMb3dlciB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQgKGJlbG93IHRoaXMgcG9pbnQgdGhlIGxheW91dCB3aWxsIGVuZClcbiAgbWluVGVtcDogMS4wXG59O1xuXG4vKipcbiAqIEBicmllZiAgICAgICA6IGNvbnN0cnVjdG9yXG4gKiBAYXJnIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBDb3NlTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQ0LCBvcHRpb25zKTtcbiAgdGhpcy5vcHRpb25zLmxheW91dCA9IHRoaXM7XG5cbiAgLy8gRXhjbHVkZSBhbnkgZWRnZSB0aGF0IGhhcyBhIHNvdXJjZSBvciB0YXJnZXQgbm9kZSB0aGF0IGlzIG5vdCBpbiB0aGUgc2V0IG9mIHBhc3NlZC1pbiBub2Rlc1xuICB2YXIgbm9kZXMgPSB0aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpO1xuICB2YXIgZWRnZXMgPSB0aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO1xuICB2YXIgbm90RWRnZXMgPSBlZGdlcy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc291cmNlSWQgPSBlLnNvdXJjZSgpLmRhdGEoJ2lkJyk7XG4gICAgdmFyIHRhcmdldElkID0gZS50YXJnZXQoKS5kYXRhKCdpZCcpO1xuICAgIHZhciBoYXNTb3VyY2UgPSBub2Rlcy5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbi5kYXRhKCdpZCcpID09PSBzb3VyY2VJZDtcbiAgICB9KTtcbiAgICB2YXIgaGFzVGFyZ2V0ID0gbm9kZXMuc29tZShmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4uZGF0YSgnaWQnKSA9PT0gdGFyZ2V0SWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuICFoYXNTb3VyY2UgfHwgIWhhc1RhcmdldDtcbiAgfSk7XG4gIHRoaXMub3B0aW9ucy5lbGVzID0gdGhpcy5vcHRpb25zLmVsZXMubm90KG5vdEVkZ2VzKTtcbn1cblxuLyoqXG4gKiBAYnJpZWYgOiBydW5zIHRoZSBsYXlvdXRcbiAqL1xuQ29zZUxheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGxheW91dCA9IHRoaXM7XG4gIGxheW91dC5zdG9wcGVkID0gZmFsc2U7XG4gIGlmIChvcHRpb25zLmFuaW1hdGUgPT09IHRydWUgfHwgb3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSkge1xuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRzdGFydCcsXG4gICAgICBsYXlvdXQ6IGxheW91dFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU2V0IERFQlVHIC0gR2xvYmFsIHZhcmlhYmxlXG4gIGlmICh0cnVlID09PSBvcHRpb25zLmRlYnVnKSB7XG4gICAgREVCVUcgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIERFQlVHID0gZmFsc2U7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIGxheW91dCBpbmZvXG4gIHZhciBsYXlvdXRJbmZvID0gY3JlYXRlTGF5b3V0SW5mbyhjeSwgbGF5b3V0LCBvcHRpb25zKTtcblxuICAvLyBTaG93IExheW91dEluZm8gY29udGVudHMgaWYgZGVidWdnaW5nXG4gIGlmIChERUJVRykge1xuICAgIHByaW50TGF5b3V0SW5mbyhsYXlvdXRJbmZvKTtcbiAgfVxuXG4gIC8vIElmIHJlcXVpcmVkLCByYW5kb21pemUgbm9kZSBwb3NpdGlvbnNcbiAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgcmFuZG9taXplUG9zaXRpb25zKGxheW91dEluZm8pO1xuICB9XG4gIHZhciBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICB2YXIgcmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgcmVmcmVzaFBvc2l0aW9ucyhsYXlvdXRJbmZvLCBjeSwgb3B0aW9ucyk7XG5cbiAgICAvLyBGaXQgdGhlIGdyYXBoIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0cnVlID09PSBvcHRpb25zLmZpdCkge1xuICAgICAgY3kuZml0KG9wdGlvbnMucGFkZGluZyk7XG4gICAgfVxuICB9O1xuICB2YXIgbWFpbkxvb3AgPSBmdW5jdGlvbiBtYWluTG9vcChpKSB7XG4gICAgaWYgKGxheW91dC5zdG9wcGVkIHx8IGkgPj0gb3B0aW9ucy5udW1JdGVyKSB7XG4gICAgICAvLyBsb2dEZWJ1ZyhcIkxheW91dCBtYW51YWxseSBzdG9wcGVkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRG8gb25lIHN0ZXAgaW4gdGhlIHBoaXNpY2FsIHNpbXVsYXRpb25cbiAgICBzdGVwKGxheW91dEluZm8sIG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIHRlbXBlcmF0dXJlXG4gICAgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSA9IGxheW91dEluZm8udGVtcGVyYXR1cmUgKiBvcHRpb25zLmNvb2xpbmdGYWN0b3I7XG4gICAgLy8gbG9nRGVidWcoXCJOZXcgdGVtcGVyYXR1cmU6IFwiICsgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSk7XG5cbiAgICBpZiAobGF5b3V0SW5mby50ZW1wZXJhdHVyZSA8IG9wdGlvbnMubWluVGVtcCkge1xuICAgICAgLy8gbG9nRGVidWcoXCJUZW1wZXJhdHVyZSBkcm9wIGJlbG93IG1pbmltdW0gdGhyZXNob2xkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSB8fCBvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlKSB7XG4gICAgICByZWZyZXNoKCk7XG5cbiAgICAgIC8vIExheW91dCBoYXMgZmluaXNoZWRcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RvcCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGVzID0gb3B0aW9ucy5lbGVzLm5vZGVzKCk7XG4gICAgICB2YXIgZ2V0U2NhbGVkUG9zID0gZ2V0U2NhbGVJbkJvdW5kc0ZuKGxheW91dEluZm8sIG9wdGlvbnMsIG5vZGVzKTtcbiAgICAgIG5vZGVzLmxheW91dFBvc2l0aW9ucyhsYXlvdXQsIG9wdGlvbnMsIGdldFNjYWxlZFBvcyk7XG4gICAgfVxuICB9O1xuICB2YXIgaSA9IDA7XG4gIHZhciBsb29wUmV0ID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSkge1xuICAgIHZhciBmcmFtZSA9IGZ1bmN0aW9uIGZyYW1lKCkge1xuICAgICAgdmFyIGYgPSAwO1xuICAgICAgd2hpbGUgKGxvb3BSZXQgJiYgZiA8IG9wdGlvbnMucmVmcmVzaCkge1xuICAgICAgICBsb29wUmV0ID0gbWFpbkxvb3AoaSk7XG4gICAgICAgIGkrKztcbiAgICAgICAgZisrO1xuICAgICAgfVxuICAgICAgaWYgKCFsb29wUmV0KSB7XG4gICAgICAgIC8vIGl0J3MgZG9uZVxuICAgICAgICBzZXBhcmF0ZUNvbXBvbmVudHMobGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub3cgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBpZiAobm93IC0gc3RhcnRUaW1lID49IG9wdGlvbnMuYW5pbWF0aW9uVGhyZXNob2xkKSB7XG4gICAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmcmFtZSgpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChsb29wUmV0KSB7XG4gICAgICBsb29wUmV0ID0gbWFpbkxvb3AoaSk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHNlcGFyYXRlQ29tcG9uZW50cyhsYXlvdXRJbmZvLCBvcHRpb25zKTtcbiAgICBkb25lKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vKipcbiAqIEBicmllZiA6IGNhbGxlZCBvbiBjb250aW51b3VzIGxheW91dHMgdG8gc3RvcCB0aGVtIGJlZm9yZSB0aGV5IGZpbmlzaFxuICovXG5Db3NlTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICBpZiAodGhpcy50aHJlYWQpIHtcbiAgICB0aGlzLnRocmVhZC5zdG9wKCk7XG4gIH1cbiAgdGhpcy5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuQ29zZUxheW91dC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMudGhyZWFkKSB7XG4gICAgdGhpcy50aHJlYWQuc3RvcCgpO1xuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLyoqXG4gKiBAYnJpZWYgICAgIDogQ3JlYXRlcyBhbiBvYmplY3Qgd2hpY2ggaXMgY29udGFpbnMgYWxsIHRoZSBkYXRhXG4gKiAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3NcbiAqIEBhcmcgY3kgICAgOiBjeXRvc2NhcGUuanMgb2JqZWN0XG4gKiBAcmV0dXJuICAgIDogbGF5b3V0SW5mbyBvYmplY3QgaW5pdGlhbGl6ZWRcbiAqL1xudmFyIGNyZWF0ZUxheW91dEluZm8gPSBmdW5jdGlvbiBjcmVhdGVMYXlvdXRJbmZvKGN5LCBsYXlvdXQsIG9wdGlvbnMpIHtcbiAgLy8gU2hvcnRjdXRcbiAgdmFyIGVkZ2VzID0gb3B0aW9ucy5lbGVzLmVkZ2VzKCk7XG4gIHZhciBub2RlcyA9IG9wdGlvbnMuZWxlcy5ub2RlcygpO1xuICB2YXIgYmIgPSBtYWtlQm91bmRpbmdCb3gob3B0aW9ucy5ib3VuZGluZ0JveCA/IG9wdGlvbnMuYm91bmRpbmdCb3ggOiB7XG4gICAgeDE6IDAsXG4gICAgeTE6IDAsXG4gICAgdzogY3kud2lkdGgoKSxcbiAgICBoOiBjeS5oZWlnaHQoKVxuICB9KTtcbiAgdmFyIGxheW91dEluZm8gPSB7XG4gICAgaXNDb21wb3VuZDogY3kuaGFzQ29tcG91bmROb2RlcygpLFxuICAgIGxheW91dE5vZGVzOiBbXSxcbiAgICBpZFRvSW5kZXg6IHt9LFxuICAgIG5vZGVTaXplOiBub2Rlcy5zaXplKCksXG4gICAgZ3JhcGhTZXQ6IFtdLFxuICAgIGluZGV4VG9HcmFwaDogW10sXG4gICAgbGF5b3V0RWRnZXM6IFtdLFxuICAgIGVkZ2VTaXplOiBlZGdlcy5zaXplKCksXG4gICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMuaW5pdGlhbFRlbXAsXG4gICAgY2xpZW50V2lkdGg6IGJiLncsXG4gICAgY2xpZW50SGVpZ2h0OiBiYi5oLFxuICAgIGJvdW5kaW5nQm94OiBiYlxuICB9O1xuICB2YXIgY29tcG9uZW50cyA9IG9wdGlvbnMuZWxlcy5jb21wb25lbnRzKCk7XG4gIHZhciBpZDJjbXB0SWQgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb21wb25lbnQubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBub2RlID0gY29tcG9uZW50W2pdO1xuICAgICAgaWQyY21wdElkW25vZGUuaWQoKV0gPSBpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBhbGwgbm9kZXMsIGNyZWF0aW5nIGxheW91dCBub2Rlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbm9kZXNbaV07XG4gICAgdmFyIG5iYiA9IG4ubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICB2YXIgdGVtcE5vZGUgPSB7fTtcbiAgICB0ZW1wTm9kZS5pc0xvY2tlZCA9IG4ubG9ja2VkKCk7XG4gICAgdGVtcE5vZGUuaWQgPSBuLmRhdGEoJ2lkJyk7XG4gICAgdGVtcE5vZGUucGFyZW50SWQgPSBuLmRhdGEoJ3BhcmVudCcpO1xuICAgIHRlbXBOb2RlLmNtcHRJZCA9IGlkMmNtcHRJZFtuLmlkKCldO1xuICAgIHRlbXBOb2RlLmNoaWxkcmVuID0gW107XG4gICAgdGVtcE5vZGUucG9zaXRpb25YID0gbi5wb3NpdGlvbigneCcpO1xuICAgIHRlbXBOb2RlLnBvc2l0aW9uWSA9IG4ucG9zaXRpb24oJ3knKTtcbiAgICB0ZW1wTm9kZS5vZmZzZXRYID0gMDtcbiAgICB0ZW1wTm9kZS5vZmZzZXRZID0gMDtcbiAgICB0ZW1wTm9kZS5oZWlnaHQgPSBuYmIudztcbiAgICB0ZW1wTm9kZS53aWR0aCA9IG5iYi5oO1xuICAgIHRlbXBOb2RlLm1heFggPSB0ZW1wTm9kZS5wb3NpdGlvblggKyB0ZW1wTm9kZS53aWR0aCAvIDI7XG4gICAgdGVtcE5vZGUubWluWCA9IHRlbXBOb2RlLnBvc2l0aW9uWCAtIHRlbXBOb2RlLndpZHRoIC8gMjtcbiAgICB0ZW1wTm9kZS5tYXhZID0gdGVtcE5vZGUucG9zaXRpb25ZICsgdGVtcE5vZGUuaGVpZ2h0IC8gMjtcbiAgICB0ZW1wTm9kZS5taW5ZID0gdGVtcE5vZGUucG9zaXRpb25ZIC0gdGVtcE5vZGUuaGVpZ2h0IC8gMjtcbiAgICB0ZW1wTm9kZS5wYWRMZWZ0ID0gcGFyc2VGbG9hdChuLnN0eWxlKCdwYWRkaW5nJykpO1xuICAgIHRlbXBOb2RlLnBhZFJpZ2h0ID0gcGFyc2VGbG9hdChuLnN0eWxlKCdwYWRkaW5nJykpO1xuICAgIHRlbXBOb2RlLnBhZFRvcCA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTtcbiAgICB0ZW1wTm9kZS5wYWRCb3R0b20gPSBwYXJzZUZsb2F0KG4uc3R5bGUoJ3BhZGRpbmcnKSk7XG5cbiAgICAvLyBmb3JjZXNcbiAgICB0ZW1wTm9kZS5ub2RlUmVwdWxzaW9uID0gZm4kNihvcHRpb25zLm5vZGVSZXB1bHNpb24pID8gb3B0aW9ucy5ub2RlUmVwdWxzaW9uKG4pIDogb3B0aW9ucy5ub2RlUmVwdWxzaW9uO1xuXG4gICAgLy8gQWRkIG5ldyBub2RlXG4gICAgbGF5b3V0SW5mby5sYXlvdXROb2Rlcy5wdXNoKHRlbXBOb2RlKTtcbiAgICAvLyBBZGQgZW50cnkgdG8gaWQtaW5kZXggbWFwXG4gICAgbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUuaWRdID0gaTtcbiAgfVxuXG4gIC8vIElubGluZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHF1ZXVlLCB1c2VkIGZvciB0cmF2ZXJzaW5nIHRoZSBncmFwaCBpbiBCRlMgb3JkZXJcbiAgdmFyIHF1ZXVlID0gW107XG4gIHZhciBzdGFydCA9IDA7IC8vIFBvaW50cyB0byB0aGUgc3RhcnQgdGhlIHF1ZXVlXG4gIHZhciBlbmQgPSAtMTsgLy8gUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG5cbiAgdmFyIHRlbXBHcmFwaCA9IFtdO1xuXG4gIC8vIFNlY29uZCBwYXNzIHRvIGFkZCBjaGlsZCBpbmZvcm1hdGlvbiBhbmRcbiAgLy8gaW5pdGlhbGl6ZSBxdWV1ZSBmb3IgaGllcmFyY2hpY2FsIHRyYXZlcnNhbFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcbiAgICB2YXIgcF9pZCA9IG4ucGFyZW50SWQ7XG4gICAgLy8gQ2hlY2sgaWYgbm9kZSBuIGhhcyBhIHBhcmVudCBub2RlXG4gICAgaWYgKG51bGwgIT0gcF9pZCkge1xuICAgICAgLy8gQWRkIG5vZGUgSWQgdG8gcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlblxuICAgICAgbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtwX2lkXV0uY2hpbGRyZW4ucHVzaChuLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgYSBub2RlIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgdGhlbiBpdCdzIGluIHRoZSByb290IGdyYXBoXG4gICAgICBxdWV1ZVsrK2VuZF0gPSBuLmlkO1xuICAgICAgdGVtcEdyYXBoLnB1c2gobi5pZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHJvb3QgZ3JhcGggdG8gZ3JhcGhTZXRcbiAgbGF5b3V0SW5mby5ncmFwaFNldC5wdXNoKHRlbXBHcmFwaCk7XG5cbiAgLy8gVHJhdmVyc2UgdGhlIGdyYXBoLCBsZXZlbCBieSBsZXZlbCxcbiAgd2hpbGUgKHN0YXJ0IDw9IGVuZCkge1xuICAgIC8vIEdldCB0aGUgbm9kZSB0byB2aXNpdCBhbmQgcmVtb3ZlIGl0IGZyb20gcXVldWVcbiAgICB2YXIgbm9kZV9pZCA9IHF1ZXVlW3N0YXJ0KytdO1xuICAgIHZhciBub2RlX2l4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbbm9kZV9pZF07XG4gICAgdmFyIG5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW25vZGVfaXhdO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFkZCBjaGlsZHJlbiBub2RlcyBhcyBhIG5ldyBncmFwaCB0byBncmFwaCBzZXRcbiAgICAgIGxheW91dEluZm8uZ3JhcGhTZXQucHVzaChjaGlsZHJlbik7XG4gICAgICAvLyBBZGQgY2hpbGRyZW4gdG8gcXVlIHF1ZXVlIHRvIGJlIHZpc2l0ZWRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVldWVbKytlbmRdID0gY2hpbGRyZW5baV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIGluZGV4VG9HcmFwaCBtYXBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmdyYXBoU2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyYXBoLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgaW5kZXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtqXV07XG4gICAgICBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtpbmRleF0gPSBpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBhbGwgZWRnZXMsIGNyZWF0aW5nIExheW91dCBFZGdlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8uZWRnZVNpemU7IGkrKykge1xuICAgIHZhciBlID0gZWRnZXNbaV07XG4gICAgdmFyIHRlbXBFZGdlID0ge307XG4gICAgdGVtcEVkZ2UuaWQgPSBlLmRhdGEoJ2lkJyk7XG4gICAgdGVtcEVkZ2Uuc291cmNlSWQgPSBlLmRhdGEoJ3NvdXJjZScpO1xuICAgIHRlbXBFZGdlLnRhcmdldElkID0gZS5kYXRhKCd0YXJnZXQnKTtcblxuICAgIC8vIENvbXB1dGUgaWRlYWwgbGVuZ3RoXG4gICAgdmFyIGlkZWFsTGVuZ3RoID0gZm4kNihvcHRpb25zLmlkZWFsRWRnZUxlbmd0aCkgPyBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aChlKSA6IG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoO1xuICAgIHZhciBlbGFzdGljaXR5ID0gZm4kNihvcHRpb25zLmVkZ2VFbGFzdGljaXR5KSA/IG9wdGlvbnMuZWRnZUVsYXN0aWNpdHkoZSkgOiBvcHRpb25zLmVkZ2VFbGFzdGljaXR5O1xuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhbiBpbnRlciBncmFwaCBlZGdlXG4gICAgdmFyIHNvdXJjZUl4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcEVkZ2Uuc291cmNlSWRdO1xuICAgIHZhciB0YXJnZXRJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W3RlbXBFZGdlLnRhcmdldElkXTtcbiAgICB2YXIgc291cmNlR3JhcGggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtzb3VyY2VJeF07XG4gICAgdmFyIHRhcmdldEdyYXBoID0gbGF5b3V0SW5mby5pbmRleFRvR3JhcGhbdGFyZ2V0SXhdO1xuICAgIGlmIChzb3VyY2VHcmFwaCAhPSB0YXJnZXRHcmFwaCkge1xuICAgICAgLy8gRmluZCBsb3dlc3QgY29tbW9uIGdyYXBoIGFuY2VzdG9yXG4gICAgICB2YXIgbGNhID0gZmluZExDQSh0ZW1wRWRnZS5zb3VyY2VJZCwgdGVtcEVkZ2UudGFyZ2V0SWQsIGxheW91dEluZm8pO1xuXG4gICAgICAvLyBDb21wdXRlIHN1bSBvZiBub2RlIGRlcHRocywgcmVsYXRpdmUgdG8gbGNhIGdyYXBoXG4gICAgICB2YXIgbGNhR3JhcGggPSBsYXlvdXRJbmZvLmdyYXBoU2V0W2xjYV07XG4gICAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgICAvLyBTb3VyY2UgZGVwdGhcbiAgICAgIHZhciB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbc291cmNlSXhdO1xuICAgICAgd2hpbGUgKC0xID09PSBsY2FHcmFwaC5pbmRleE9mKHRlbXBOb2RlLmlkKSkge1xuICAgICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUucGFyZW50SWRdXTtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cblxuICAgICAgLy8gVGFyZ2V0IGRlcHRoXG4gICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbdGFyZ2V0SXhdO1xuICAgICAgd2hpbGUgKC0xID09PSBsY2FHcmFwaC5pbmRleE9mKHRlbXBOb2RlLmlkKSkge1xuICAgICAgICB0ZW1wTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcE5vZGUucGFyZW50SWRdXTtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cblxuICAgICAgLy8gbG9nRGVidWcoJ0xDQSBvZiBub2RlcyAnICsgdGVtcEVkZ2Uuc291cmNlSWQgKyAnIGFuZCAnICsgdGVtcEVkZ2UudGFyZ2V0SWQgK1xuICAgICAgLy8gIFwiLiBJbmRleDogXCIgKyBsY2EgKyBcIiBDb250ZW50czogXCIgKyBsY2FHcmFwaC50b1N0cmluZygpICtcbiAgICAgIC8vICBcIi4gRGVwdGg6IFwiICsgZGVwdGgpO1xuXG4gICAgICAvLyBVcGRhdGUgaWRlYWxMZW5ndGhcbiAgICAgIGlkZWFsTGVuZ3RoICo9IGRlcHRoICogb3B0aW9ucy5uZXN0aW5nRmFjdG9yO1xuICAgIH1cbiAgICB0ZW1wRWRnZS5pZGVhbExlbmd0aCA9IGlkZWFsTGVuZ3RoO1xuICAgIHRlbXBFZGdlLmVsYXN0aWNpdHkgPSBlbGFzdGljaXR5O1xuICAgIGxheW91dEluZm8ubGF5b3V0RWRnZXMucHVzaCh0ZW1wRWRnZSk7XG4gIH1cblxuICAvLyBGaW5hbGx5LCByZXR1cm4gbGF5b3V0SW5mbyBvYmplY3RcbiAgcmV0dXJuIGxheW91dEluZm87XG59O1xuXG4vKipcbiAqIEBicmllZiA6IFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGluZGV4IG9mIHRoZSBsb3dlc3QgY29tbW9uXG4gKiAgICAgICAgICBncmFwaCBhbmNlc3RvciBiZXR3ZWVuIDIgbm9kZXMgaW4gdGhlIHN1YnRyZWVcbiAqICAgICAgICAgIChmcm9tIHRoZSBncmFwaCBoaWVyYXJjaHkgaW5kdWNlZCB0cmVlKSB3aG9zZVxuICogICAgICAgICAgcm9vdCBpcyBncmFwaEl4XG4gKlxuICogQGFyZyBub2RlMTogbm9kZTEncyBJRFxuICogQGFyZyBub2RlMjogbm9kZTIncyBJRFxuICogQGFyZyBsYXlvdXRJbmZvOiBsYXlvdXRJbmZvIG9iamVjdFxuICpcbiAqL1xudmFyIGZpbmRMQ0EgPSBmdW5jdGlvbiBmaW5kTENBKG5vZGUxLCBub2RlMiwgbGF5b3V0SW5mbykge1xuICAvLyBGaW5kIHRoZWlyIGNvbW1vbiBhbmNlc3Rlciwgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCBncmFwaFxuICB2YXIgcmVzID0gZmluZExDQV9hdXgobm9kZTEsIG5vZGUyLCAwLCBsYXlvdXRJbmZvKTtcbiAgaWYgKDIgPiByZXMuY291bnQpIHtcbiAgICAvLyBJZiBhdXggZnVuY3Rpb24gY291bGRuJ3QgZmluZCB0aGUgY29tbW9uIGFuY2VzdGVyLFxuICAgIC8vIHRoZW4gaXQgaXMgdGhlIHJvb3QgZ3JhcGhcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzLmdyYXBoO1xuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiAgICAgICAgICA6IEF1eGlsaWFyeSBmdW5jdGlvbiB1c2VkIGZvciBMQ0EgY29tcHV0YXRpb25cbiAqXG4gKiBAYXJnIG5vZGUxICAgICAgOiBub2RlMSdzIElEXG4gKiBAYXJnIG5vZGUyICAgICAgOiBub2RlMidzIElEXG4gKiBAYXJnIGdyYXBoSXggICAgOiBzdWJncmFwaCBpbmRleFxuICogQGFyZyBsYXlvdXRJbmZvIDogbGF5b3V0SW5mbyBvYmplY3RcbiAqXG4gKiBAcmV0dXJuICAgICAgICAgOiBvYmplY3Qgb2YgdGhlIGZvcm0ge2NvdW50OiBYLCBncmFwaDogWX0sIHdoZXJlOlxuICogICAgICAgICAgICAgICAgICAgWCBpcyB0aGUgbnVtYmVyIG9mIGFuY2VzdG9ycyAobWF4OiAyKSBmb3VuZCBpblxuICogICAgICAgICAgICAgICAgICAgZ3JhcGhJeCAoYW5kIGl0J3Mgc3ViZ3JhcGhzKSxcbiAqICAgICAgICAgICAgICAgICAgIFkgaXMgdGhlIGdyYXBoIGluZGV4IG9mIHRoZSBsb3dlc3QgZ3JhcGggY29udGFpbmluZ1xuICogICAgICAgICAgICAgICAgICAgYWxsIFggbm9kZXNcbiAqL1xudmFyIGZpbmRMQ0FfYXV4ID0gZnVuY3Rpb24gZmluZExDQV9hdXgobm9kZTEsIG5vZGUyLCBncmFwaEl4LCBsYXlvdXRJbmZvKSB7XG4gIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbZ3JhcGhJeF07XG4gIC8vIElmIGJvdGggbm9kZXMgYmVsb25ncyB0byBncmFwaEl4XG4gIGlmICgtMSA8IGdyYXBoLmluZGV4T2Yobm9kZTEpICYmIC0xIDwgZ3JhcGguaW5kZXhPZihub2RlMikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnQ6IDIsXG4gICAgICBncmFwaDogZ3JhcGhJeFxuICAgIH07XG4gIH1cblxuICAvLyBNYWtlIHJlY3Vyc2l2ZSBjYWxscyBmb3IgYWxsIHN1YmdyYXBoc1xuICB2YXIgYyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZUlkID0gZ3JhcGhbaV07XG4gICAgdmFyIG5vZGVJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W25vZGVJZF07XG4gICAgdmFyIGNoaWxkcmVuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlSXhdLmNoaWxkcmVuO1xuXG4gICAgLy8gSWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkLCBza2lwIGl0XG4gICAgaWYgKDAgPT09IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBjaGlsZEdyYXBoSXggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtsYXlvdXRJbmZvLmlkVG9JbmRleFtjaGlsZHJlblswXV1dO1xuICAgIHZhciByZXN1bHQgPSBmaW5kTENBX2F1eChub2RlMSwgbm9kZTIsIGNoaWxkR3JhcGhJeCwgbGF5b3V0SW5mbyk7XG4gICAgaWYgKDAgPT09IHJlc3VsdC5jb3VudCkge1xuICAgICAgLy8gTmVpdGhlciBub2RlMSBub3Igbm9kZTIgYXJlIHByZXNlbnQgaW4gdGhpcyBzdWJncmFwaFxuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmICgxID09PSByZXN1bHQuY291bnQpIHtcbiAgICAgIC8vIE9uZSBvZiAobm9kZTEsIG5vZGUyKSBpcyBwcmVzZW50IGluIHRoaXMgc3ViZ3JhcGhcbiAgICAgIGMrKztcbiAgICAgIGlmICgyID09PSBjKSB7XG4gICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZm91bmQgYm90aCBub2Rlcywgbm8gbmVlZCB0byBrZWVwIHNlYXJjaGluZ1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQm90aCBub2RlcyBhcmUgcHJlc2VudCBpbiB0aGlzIHN1YmdyYXBoXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNvdW50OiBjLFxuICAgIGdyYXBoOiBncmFwaEl4XG4gIH07XG59O1xuXG4vKipcbiAqIEBicmllZjogcHJpbnRzTGF5b3V0SW5mbyBpbnRvIGpzIGNvbnNvbGVcbiAqICAgICAgICAgT25seSB1c2VkIGZvciBkZWJidWdpbmdcbiAqL1xudmFyIHByaW50TGF5b3V0SW5mbzsgXG5cbi8qKlxuICogQGJyaWVmIDogUmFuZG9taXplcyB0aGUgcG9zaXRpb24gb2YgYWxsIG5vZGVzXG4gKi9cbnZhciByYW5kb21pemVQb3NpdGlvbnMgPSBmdW5jdGlvbiByYW5kb21pemVQb3NpdGlvbnMobGF5b3V0SW5mbywgY3kpIHtcbiAgdmFyIHdpZHRoID0gbGF5b3V0SW5mby5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGxheW91dEluZm8uY2xpZW50SGVpZ2h0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcblxuICAgIC8vIE5vIG5lZWQgdG8gcmFuZG9taXplIGNvbXBvdW5kIG5vZGVzIG9yIGxvY2tlZCBub2Rlc1xuICAgIGlmICgwID09PSBuLmNoaWxkcmVuLmxlbmd0aCAmJiAhbi5pc0xvY2tlZCkge1xuICAgICAgbi5wb3NpdGlvblggPSBNYXRoLnJhbmRvbSgpICogd2lkdGg7XG4gICAgICBuLnBvc2l0aW9uWSA9IE1hdGgucmFuZG9tKCkgKiBoZWlnaHQ7XG4gICAgfVxuICB9XG59O1xudmFyIGdldFNjYWxlSW5Cb3VuZHNGbiA9IGZ1bmN0aW9uIGdldFNjYWxlSW5Cb3VuZHNGbihsYXlvdXRJbmZvLCBvcHRpb25zLCBub2Rlcykge1xuICB2YXIgYmIgPSBsYXlvdXRJbmZvLmJvdW5kaW5nQm94O1xuICB2YXIgY29zZUJCID0ge1xuICAgIHgxOiBJbmZpbml0eSxcbiAgICB4MjogLUluZmluaXR5LFxuICAgIHkxOiBJbmZpbml0eSxcbiAgICB5MjogLUluZmluaXR5XG4gIH07XG4gIGlmIChvcHRpb25zLmJvdW5kaW5nQm94KSB7XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGxub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlLmRhdGEoJ2lkJyldXTtcbiAgICAgIGNvc2VCQi54MSA9IE1hdGgubWluKGNvc2VCQi54MSwgbG5vZGUucG9zaXRpb25YKTtcbiAgICAgIGNvc2VCQi54MiA9IE1hdGgubWF4KGNvc2VCQi54MiwgbG5vZGUucG9zaXRpb25YKTtcbiAgICAgIGNvc2VCQi55MSA9IE1hdGgubWluKGNvc2VCQi55MSwgbG5vZGUucG9zaXRpb25ZKTtcbiAgICAgIGNvc2VCQi55MiA9IE1hdGgubWF4KGNvc2VCQi55MiwgbG5vZGUucG9zaXRpb25ZKTtcbiAgICB9KTtcbiAgICBjb3NlQkIudyA9IGNvc2VCQi54MiAtIGNvc2VCQi54MTtcbiAgICBjb3NlQkIuaCA9IGNvc2VCQi55MiAtIGNvc2VCQi55MTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGVsZSwgaSkge1xuICAgIHZhciBsbm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZWxlLmRhdGEoJ2lkJyldXTtcbiAgICBpZiAob3B0aW9ucy5ib3VuZGluZ0JveCkge1xuICAgICAgLy8gdGhlbiBhZGQgZXh0cmEgYm91bmRpbmcgYm94IGNvbnN0cmFpbnRcbiAgICAgIHZhciBwY3RYID0gKGxub2RlLnBvc2l0aW9uWCAtIGNvc2VCQi54MSkgLyBjb3NlQkIudztcbiAgICAgIHZhciBwY3RZID0gKGxub2RlLnBvc2l0aW9uWSAtIGNvc2VCQi55MSkgLyBjb3NlQkIuaDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGJiLngxICsgcGN0WCAqIGJiLncsXG4gICAgICAgIHk6IGJiLnkxICsgcGN0WSAqIGJiLmhcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGxub2RlLnBvc2l0aW9uWCxcbiAgICAgICAgeTogbG5vZGUucG9zaXRpb25ZXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogVXBkYXRlcyB0aGUgcG9zaXRpb25zIG9mIG5vZGVzIGluIHRoZSBuZXR3b3JrXG4gKiBAYXJnIGxheW91dEluZm8gOiBMYXlvdXRJbmZvIG9iamVjdFxuICogQGFyZyBjeSAgICAgICAgIDogQ3l0b3NjYXBlIG9iamVjdFxuICogQGFyZyBvcHRpb25zICAgIDogTGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIHJlZnJlc2hQb3NpdGlvbnMgPSBmdW5jdGlvbiByZWZyZXNoUG9zaXRpb25zKGxheW91dEluZm8sIGN5LCBvcHRpb25zKSB7XG4gIC8vIHZhciBzID0gJ1JlZnJlc2hpbmcgcG9zaXRpb25zJztcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgdmFyIGxheW91dCA9IG9wdGlvbnMubGF5b3V0O1xuICB2YXIgbm9kZXMgPSBvcHRpb25zLmVsZXMubm9kZXMoKTtcbiAgdmFyIGdldFNjYWxlZFBvcyA9IGdldFNjYWxlSW5Cb3VuZHNGbihsYXlvdXRJbmZvLCBvcHRpb25zLCBub2Rlcyk7XG4gIG5vZGVzLnBvc2l0aW9ucyhnZXRTY2FsZWRQb3MpO1xuXG4gIC8vIFRyaWdnZXIgbGF5b3V0UmVhZHkgb25seSBvbiBmaXJzdCBjYWxsXG4gIGlmICh0cnVlICE9PSBsYXlvdXRJbmZvLnJlYWR5KSB7XG4gICAgLy8gcyA9ICdUcmlnZ2VyaW5nIGxheW91dHJlYWR5JztcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICBsYXlvdXRJbmZvLnJlYWR5ID0gdHJ1ZTtcbiAgICBsYXlvdXQub25lKCdsYXlvdXRyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICBsYXlvdXQ6IHRoaXNcbiAgICB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBMb2dzIGEgZGVidWcgbWVzc2FnZSBpbiBKUyBjb25zb2xlLCBpZiBERUJVRyBpcyBPTlxuICovXG4vLyB2YXIgbG9nRGVidWcgPSBmdW5jdGlvbih0ZXh0KSB7XG4vLyAgIGlmIChERUJVRykge1xuLy8gICAgIGNvbnNvbGUuZGVidWcodGV4dCk7XG4vLyAgIH1cbi8vIH07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogUGVyZm9ybXMgb25lIGl0ZXJhdGlvbiBvZiB0aGUgcGh5c2ljYWwgc2ltdWxhdGlvblxuICogQGFyZyBsYXlvdXRJbmZvIDogTGF5b3V0SW5mbyBvYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZFxuICogQGFyZyBjeSAgICAgICAgIDogQ3l0b3NjYXBlIG9iamVjdFxuICogQGFyZyBvcHRpb25zICAgIDogTGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIHN0ZXAgPSBmdW5jdGlvbiBzdGVwKGxheW91dEluZm8sIG9wdGlvbnMsIF9zdGVwKSB7XG4gIC8vIHZhciBzID0gXCJcXG5cXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCI7XG4gIC8vIHMgKz0gXCJcXG5TVEVQOiBcIiArIHN0ZXA7XG4gIC8vIHMgKz0gXCJcXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXFxuXCI7XG4gIC8vIGxvZ0RlYnVnKHMpO1xuXG4gIC8vIENhbGN1bGF0ZSBub2RlIHJlcHVsc2lvbnNcbiAgY2FsY3VsYXRlTm9kZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKTtcbiAgLy8gQ2FsY3VsYXRlIGVkZ2UgZm9yY2VzXG4gIGNhbGN1bGF0ZUVkZ2VGb3JjZXMobGF5b3V0SW5mbyk7XG4gIC8vIENhbGN1bGF0ZSBncmF2aXR5IGZvcmNlc1xuICBjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpO1xuICAvLyBQcm9wYWdhdGUgZm9yY2VzIGZyb20gcGFyZW50IHRvIGNoaWxkXG4gIHByb3BhZ2F0ZUZvcmNlcyhsYXlvdXRJbmZvKTtcbiAgLy8gVXBkYXRlIHBvc2l0aW9ucyBiYXNlZCBvbiBjYWxjdWxhdGVkIGZvcmNlc1xuICB1cGRhdGVQb3NpdGlvbnMobGF5b3V0SW5mbyk7XG59O1xuXG4vKipcbiAqIEBicmllZiA6IENvbXB1dGVzIHRoZSBub2RlIHJlcHVsc2lvbiBmb3JjZXNcbiAqL1xudmFyIGNhbGN1bGF0ZU5vZGVGb3JjZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVOb2RlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gR28gdGhyb3VnaCBlYWNoIG9mIHRoZSBncmFwaHMgaW4gZ3JhcGhTZXRcbiAgLy8gTm9kZXMgb25seSByZXBlbCBlYWNoIG90aGVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIGdyYXBoXG4gIC8vIHZhciBzID0gJ2NhbGN1bGF0ZU5vZGVGb3JjZXMnO1xuICAvLyBsb2dEZWJ1ZyhzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmdyYXBoU2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICB2YXIgbnVtTm9kZXMgPSBncmFwaC5sZW5ndGg7XG5cbiAgICAvLyBzID0gXCJTZXQ6IFwiICsgZ3JhcGgudG9TdHJpbmcoKTtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAgIC8vIE5vdyBnZXQgYWxsIHRoZSBwYWlycyBvZiBub2Rlc1xuICAgIC8vIE9ubHkgZ2V0IGVhY2ggcGFpciBvbmNlLCAoQSwgQikgPSAoQiwgQSlcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bU5vZGVzOyBqKyspIHtcbiAgICAgIHZhciBub2RlMSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbal1dXTtcbiAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IG51bU5vZGVzOyBrKyspIHtcbiAgICAgICAgdmFyIG5vZGUyID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtrXV1dO1xuICAgICAgICBub2RlUmVwdWxzaW9uKG5vZGUxLCBub2RlMiwgbGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xudmFyIHJhbmRvbURpc3RhbmNlID0gZnVuY3Rpb24gcmFuZG9tRGlzdGFuY2UobWF4KSB7XG4gIHJldHVybiAtbWF4ICsgMiAqIG1heCAqIE1hdGgucmFuZG9tKCk7XG59O1xuXG4vKipcbiAqIEBicmllZiA6IENvbXB1dGUgdGhlIG5vZGUgcmVwdWxzaW9uIGZvcmNlcyBiZXR3ZWVuIGEgcGFpciBvZiBub2Rlc1xuICovXG52YXIgbm9kZVJlcHVsc2lvbiA9IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZTEsIG5vZGUyLCBsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIHZhciBzID0gXCJOb2RlIHJlcHVsc2lvbi4gTm9kZTE6IFwiICsgbm9kZTEuaWQgKyBcIiBOb2RlMjogXCIgKyBub2RlMi5pZDtcblxuICB2YXIgY21wdElkMSA9IG5vZGUxLmNtcHRJZDtcbiAgdmFyIGNtcHRJZDIgPSBub2RlMi5jbXB0SWQ7XG4gIGlmIChjbXB0SWQxICE9PSBjbXB0SWQyICYmICFsYXlvdXRJbmZvLmlzQ29tcG91bmQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgZGlyZWN0aW9uIG9mIGxpbmUgY29ubmVjdGluZyBib3RoIG5vZGUgY2VudGVyc1xuICB2YXIgZGlyZWN0aW9uWCA9IG5vZGUyLnBvc2l0aW9uWCAtIG5vZGUxLnBvc2l0aW9uWDtcbiAgdmFyIGRpcmVjdGlvblkgPSBub2RlMi5wb3NpdGlvblkgLSBub2RlMS5wb3NpdGlvblk7XG4gIHZhciBtYXhSYW5kRGlzdCA9IDE7XG4gIC8vIHMgKz0gXCJcXG5kaXJlY3Rpb25YOiBcIiArIGRpcmVjdGlvblggKyBcIiwgZGlyZWN0aW9uWTogXCIgKyBkaXJlY3Rpb25ZO1xuXG4gIC8vIElmIGJvdGggY2VudGVycyBhcmUgdGhlIHNhbWUsIGFwcGx5IGEgcmFuZG9tIGZvcmNlXG4gIGlmICgwID09PSBkaXJlY3Rpb25YICYmIDAgPT09IGRpcmVjdGlvblkpIHtcbiAgICBkaXJlY3Rpb25YID0gcmFuZG9tRGlzdGFuY2UobWF4UmFuZERpc3QpO1xuICAgIGRpcmVjdGlvblkgPSByYW5kb21EaXN0YW5jZShtYXhSYW5kRGlzdCk7XG4gIH1cbiAgdmFyIG92ZXJsYXAgPSBub2Rlc092ZXJsYXAobm9kZTEsIG5vZGUyLCBkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTtcbiAgaWYgKG92ZXJsYXAgPiAwKSB7XG4gICAgLy8gcyArPSBcIlxcbk5vZGVzIERPIG92ZXJsYXAuXCI7XG4gICAgLy8gcyArPSBcIlxcbk92ZXJsYXA6IFwiICsgb3ZlcmxhcDtcbiAgICAvLyBJZiBub2RlcyBvdmVybGFwLCByZXB1bHNpb24gZm9yY2UgaXMgcHJvcG9ydGlvbmFsXG4gICAgLy8gdG8gdGhlIG92ZXJsYXBcbiAgICB2YXIgZm9yY2UgPSBvcHRpb25zLm5vZGVPdmVybGFwICogb3ZlcmxhcDtcblxuICAgIC8vIENvbXB1dGUgdGhlIG1vZHVsZSBhbmQgY29tcG9uZW50cyBvZiB0aGUgZm9yY2UgdmVjdG9yXG4gICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpcmVjdGlvblggKiBkaXJlY3Rpb25YICsgZGlyZWN0aW9uWSAqIGRpcmVjdGlvblkpO1xuICAgIC8vIHMgKz0gXCJcXG5EaXN0YW5jZTogXCIgKyBkaXN0YW5jZTtcbiAgICB2YXIgZm9yY2VYID0gZm9yY2UgKiBkaXJlY3Rpb25YIC8gZGlzdGFuY2U7XG4gICAgdmFyIGZvcmNlWSA9IGZvcmNlICogZGlyZWN0aW9uWSAvIGRpc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIC8vIHMgKz0gXCJcXG5Ob2RlcyBkbyBOT1Qgb3ZlcmxhcC5cIjtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG92ZXJsYXAsIGZvcmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWxcbiAgICAvLyB0byBzcXVhcmVkIGRpc3RhbmNlXG5cbiAgICAvLyBHZXQgY2xpcHBpbmcgcG9pbnRzIGZvciBib3RoIG5vZGVzXG4gICAgdmFyIHBvaW50MSA9IGZpbmRDbGlwcGluZ1BvaW50KG5vZGUxLCBkaXJlY3Rpb25YLCBkaXJlY3Rpb25ZKTtcbiAgICB2YXIgcG9pbnQyID0gZmluZENsaXBwaW5nUG9pbnQobm9kZTIsIC0xICogZGlyZWN0aW9uWCwgLTEgKiBkaXJlY3Rpb25ZKTtcblxuICAgIC8vIFVzZSBjbGlwcGluZyBwb2ludHMgdG8gY29tcHV0ZSBkaXN0YW5jZVxuICAgIHZhciBkaXN0YW5jZVggPSBwb2ludDIueCAtIHBvaW50MS54O1xuICAgIHZhciBkaXN0YW5jZVkgPSBwb2ludDIueSAtIHBvaW50MS55O1xuICAgIHZhciBkaXN0YW5jZVNxciA9IGRpc3RhbmNlWCAqIGRpc3RhbmNlWCArIGRpc3RhbmNlWSAqIGRpc3RhbmNlWTtcbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZGlzdGFuY2VTcXIpO1xuICAgIC8vIHMgKz0gXCJcXG5EaXN0YW5jZTogXCIgKyBkaXN0YW5jZTtcblxuICAgIC8vIENvbXB1dGUgdGhlIG1vZHVsZSBhbmQgY29tcG9uZW50cyBvZiB0aGUgZm9yY2UgdmVjdG9yXG4gICAgdmFyIGZvcmNlID0gKG5vZGUxLm5vZGVSZXB1bHNpb24gKyBub2RlMi5ub2RlUmVwdWxzaW9uKSAvIGRpc3RhbmNlU3FyO1xuICAgIHZhciBmb3JjZVggPSBmb3JjZSAqIGRpc3RhbmNlWCAvIGRpc3RhbmNlO1xuICAgIHZhciBmb3JjZVkgPSBmb3JjZSAqIGRpc3RhbmNlWSAvIGRpc3RhbmNlO1xuICB9XG5cbiAgLy8gQXBwbHkgZm9yY2VcbiAgaWYgKCFub2RlMS5pc0xvY2tlZCkge1xuICAgIG5vZGUxLm9mZnNldFggLT0gZm9yY2VYO1xuICAgIG5vZGUxLm9mZnNldFkgLT0gZm9yY2VZO1xuICB9XG4gIGlmICghbm9kZTIuaXNMb2NrZWQpIHtcbiAgICBub2RlMi5vZmZzZXRYICs9IGZvcmNlWDtcbiAgICBub2RlMi5vZmZzZXRZICs9IGZvcmNlWTtcbiAgfVxuXG4gIC8vIHMgKz0gXCJcXG5Gb3JjZVg6IFwiICsgZm9yY2VYICsgXCIgRm9yY2VZOiBcIiArIGZvcmNlWTtcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgcmV0dXJuO1xufTtcblxuLyoqXG4gKiBAYnJpZWYgIDogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBub2RlcyBvdmVybGFwIG9yIG5vdFxuICogQHJldHVybiA6IEFtb3VudCBvZiBvdmVybGFwcGluZyAoMCA9PiBubyBvdmVybGFwKVxuICovXG52YXIgbm9kZXNPdmVybGFwID0gZnVuY3Rpb24gbm9kZXNPdmVybGFwKG5vZGUxLCBub2RlMiwgZFgsIGRZKSB7XG4gIGlmIChkWCA+IDApIHtcbiAgICB2YXIgb3ZlcmxhcFggPSBub2RlMS5tYXhYIC0gbm9kZTIubWluWDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgb3ZlcmxhcFggPSBub2RlMi5tYXhYIC0gbm9kZTEubWluWDtcbiAgfVxuICBpZiAoZFkgPiAwKSB7XG4gICAgdmFyIG92ZXJsYXBZID0gbm9kZTEubWF4WSAtIG5vZGUyLm1pblk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG92ZXJsYXBZID0gbm9kZTIubWF4WSAtIG5vZGUxLm1pblk7XG4gIH1cbiAgaWYgKG92ZXJsYXBYID49IDAgJiYgb3ZlcmxhcFkgPj0gMCkge1xuICAgIHJldHVybiBNYXRoLnNxcnQob3ZlcmxhcFggKiBvdmVybGFwWCArIG92ZXJsYXBZICogb3ZlcmxhcFkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IEZpbmRzIHRoZSBwb2ludCBpbiB3aGljaCBhbiBlZGdlIChkaXJlY3Rpb24gZFgsIGRZKSBpbnRlcnNlY3RzXG4gKiAgICAgICAgICB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IG9mIGl0J3Mgc291cmNlL3RhcmdldCBub2RlXG4gKi9cbnZhciBmaW5kQ2xpcHBpbmdQb2ludCA9IGZ1bmN0aW9uIGZpbmRDbGlwcGluZ1BvaW50KG5vZGUsIGRYLCBkWSkge1xuICAvLyBTaG9yY3V0c1xuICB2YXIgWCA9IG5vZGUucG9zaXRpb25YO1xuICB2YXIgWSA9IG5vZGUucG9zaXRpb25ZO1xuICB2YXIgSCA9IG5vZGUuaGVpZ2h0IHx8IDE7XG4gIHZhciBXID0gbm9kZS53aWR0aCB8fCAxO1xuICB2YXIgZGlyU2xvcGUgPSBkWSAvIGRYO1xuICB2YXIgbm9kZVNsb3BlID0gSCAvIFc7XG5cbiAgLy8gdmFyIHMgPSAnQ29tcHV0aW5nIGNsaXBwaW5nIHBvaW50IG9mIG5vZGUgJyArIG5vZGUuaWQgK1xuICAvLyAgIFwiIC4gSGVpZ2h0OiAgXCIgKyBIICsgXCIsIFdpZHRoOiBcIiArIFcgK1xuICAvLyAgIFwiXFxuRGlyZWN0aW9uIFwiICsgZFggKyBcIiwgXCIgKyBkWTtcbiAgLy9cbiAgLy8gQ29tcHV0ZSBpbnRlcnNlY3Rpb25cbiAgdmFyIHJlcyA9IHt9O1xuXG4gIC8vIENhc2U6IFZlcnRpY2FsIGRpcmVjdGlvbiAodXApXG4gIGlmICgwID09PSBkWCAmJiAwIDwgZFkpIHtcbiAgICByZXMueCA9IFg7XG4gICAgLy8gcyArPSBcIlxcblVwIGRpcmVjdGlvblwiO1xuICAgIHJlcy55ID0gWSArIEggLyAyO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBDYXNlOiBWZXJ0aWNhbCBkaXJlY3Rpb24gKGRvd24pXG4gIGlmICgwID09PSBkWCAmJiAwID4gZFkpIHtcbiAgICByZXMueCA9IFg7XG4gICAgcmVzLnkgPSBZICsgSCAvIDI7XG4gICAgLy8gcyArPSBcIlxcbkRvd24gZGlyZWN0aW9uXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgcmlnaHQgYm9yZGVyXG4gIGlmICgwIDwgZFggJiYgLTEgKiBub2RlU2xvcGUgPD0gZGlyU2xvcGUgJiYgZGlyU2xvcGUgPD0gbm9kZVNsb3BlKSB7XG4gICAgcmVzLnggPSBYICsgVyAvIDI7XG4gICAgcmVzLnkgPSBZICsgVyAqIGRZIC8gMiAvIGRYO1xuICAgIC8vIHMgKz0gXCJcXG5SaWdodGJvcmRlclwiO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8vIENhc2U6IEludGVyc2VjdHMgdGhlIGxlZnQgYm9yZGVyXG4gIGlmICgwID4gZFggJiYgLTEgKiBub2RlU2xvcGUgPD0gZGlyU2xvcGUgJiYgZGlyU2xvcGUgPD0gbm9kZVNsb3BlKSB7XG4gICAgcmVzLnggPSBYIC0gVyAvIDI7XG4gICAgcmVzLnkgPSBZIC0gVyAqIGRZIC8gMiAvIGRYO1xuICAgIC8vIHMgKz0gXCJcXG5MZWZ0Ym9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgdG9wIGJvcmRlclxuICBpZiAoMCA8IGRZICYmIChkaXJTbG9wZSA8PSAtMSAqIG5vZGVTbG9wZSB8fCBkaXJTbG9wZSA+PSBub2RlU2xvcGUpKSB7XG4gICAgcmVzLnggPSBYICsgSCAqIGRYIC8gMiAvIGRZO1xuICAgIHJlcy55ID0gWSArIEggLyAyO1xuICAgIC8vIHMgKz0gXCJcXG5Ub3AgYm9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgYm90dG9tIGJvcmRlclxuICBpZiAoMCA+IGRZICYmIChkaXJTbG9wZSA8PSAtMSAqIG5vZGVTbG9wZSB8fCBkaXJTbG9wZSA+PSBub2RlU2xvcGUpKSB7XG4gICAgcmVzLnggPSBYIC0gSCAqIGRYIC8gMiAvIGRZO1xuICAgIHJlcy55ID0gWSAtIEggLyAyO1xuICAgIC8vIHMgKz0gXCJcXG5Cb3R0b20gYm9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gcyArPSBcIlxcbkNsaXBwaW5nIHBvaW50IGZvdW5kIGF0IFwiICsgcmVzLnggKyBcIiwgXCIgKyByZXMueTtcbiAgLy8gbG9nRGVidWcocyk7XG4gIHJldHVybiByZXM7XG59O1xuXG4vKipcbiAqIEBicmllZiA6IENhbGN1bGF0ZXMgYWxsIGVkZ2UgZm9yY2VzXG4gKi9cbnZhciBjYWxjdWxhdGVFZGdlRm9yY2VzID0gZnVuY3Rpb24gY2FsY3VsYXRlRWRnZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIEl0ZXJhdGUgb3ZlciBhbGwgZWRnZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmVkZ2VTaXplOyBpKyspIHtcbiAgICAvLyBHZXQgZWRnZSwgc291cmNlICYgdGFyZ2V0IG5vZGVzXG4gICAgdmFyIGVkZ2UgPSBsYXlvdXRJbmZvLmxheW91dEVkZ2VzW2ldO1xuICAgIHZhciBzb3VyY2VJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W2VkZ2Uuc291cmNlSWRdO1xuICAgIHZhciBzb3VyY2UgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW3NvdXJjZUl4XTtcbiAgICB2YXIgdGFyZ2V0SXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtlZGdlLnRhcmdldElkXTtcbiAgICB2YXIgdGFyZ2V0ID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1t0YXJnZXRJeF07XG5cbiAgICAvLyBHZXQgZGlyZWN0aW9uIG9mIGxpbmUgY29ubmVjdGluZyBib3RoIG5vZGUgY2VudGVyc1xuICAgIHZhciBkaXJlY3Rpb25YID0gdGFyZ2V0LnBvc2l0aW9uWCAtIHNvdXJjZS5wb3NpdGlvblg7XG4gICAgdmFyIGRpcmVjdGlvblkgPSB0YXJnZXQucG9zaXRpb25ZIC0gc291cmNlLnBvc2l0aW9uWTtcblxuICAgIC8vIElmIGJvdGggY2VudGVycyBhcmUgdGhlIHNhbWUsIGRvIG5vdGhpbmcuXG4gICAgLy8gQSByYW5kb20gZm9yY2UgaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkIGFzIG5vZGUgcmVwdWxzaW9uXG4gICAgaWYgKDAgPT09IGRpcmVjdGlvblggJiYgMCA9PT0gZGlyZWN0aW9uWSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNsaXBwaW5nIHBvaW50cyBmb3IgYm90aCBub2Rlc1xuICAgIHZhciBwb2ludDEgPSBmaW5kQ2xpcHBpbmdQb2ludChzb3VyY2UsIGRpcmVjdGlvblgsIGRpcmVjdGlvblkpO1xuICAgIHZhciBwb2ludDIgPSBmaW5kQ2xpcHBpbmdQb2ludCh0YXJnZXQsIC0xICogZGlyZWN0aW9uWCwgLTEgKiBkaXJlY3Rpb25ZKTtcbiAgICB2YXIgbHggPSBwb2ludDIueCAtIHBvaW50MS54O1xuICAgIHZhciBseSA9IHBvaW50Mi55IC0gcG9pbnQxLnk7XG4gICAgdmFyIGwgPSBNYXRoLnNxcnQobHggKiBseCArIGx5ICogbHkpO1xuICAgIHZhciBmb3JjZSA9IE1hdGgucG93KGVkZ2UuaWRlYWxMZW5ndGggLSBsLCAyKSAvIGVkZ2UuZWxhc3RpY2l0eTtcbiAgICBpZiAoMCAhPT0gbCkge1xuICAgICAgdmFyIGZvcmNlWCA9IGZvcmNlICogbHggLyBsO1xuICAgICAgdmFyIGZvcmNlWSA9IGZvcmNlICogbHkgLyBsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZm9yY2VYID0gMDtcbiAgICAgIHZhciBmb3JjZVkgPSAwO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGlzIGZvcmNlIHRvIHRhcmdldCBhbmQgc291cmNlIG5vZGVzXG4gICAgaWYgKCFzb3VyY2UuaXNMb2NrZWQpIHtcbiAgICAgIHNvdXJjZS5vZmZzZXRYICs9IGZvcmNlWDtcbiAgICAgIHNvdXJjZS5vZmZzZXRZICs9IGZvcmNlWTtcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQuaXNMb2NrZWQpIHtcbiAgICAgIHRhcmdldC5vZmZzZXRYIC09IGZvcmNlWDtcbiAgICAgIHRhcmdldC5vZmZzZXRZIC09IGZvcmNlWTtcbiAgICB9XG5cbiAgICAvLyB2YXIgcyA9ICdFZGdlIGZvcmNlIGJldHdlZW4gbm9kZXMgJyArIHNvdXJjZS5pZCArICcgYW5kICcgKyB0YXJnZXQuaWQ7XG4gICAgLy8gcyArPSBcIlxcbkRpc3RhbmNlOiBcIiArIGwgKyBcIiBGb3JjZTogKFwiICsgZm9yY2VYICsgXCIsIFwiICsgZm9yY2VZICsgXCIpXCI7XG4gICAgLy8gbG9nRGVidWcocyk7XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmIDogQ29tcHV0ZXMgZ3Jhdml0eSBmb3JjZXMgZm9yIGFsbCBub2Rlc1xuICovXG52YXIgY2FsY3VsYXRlR3Jhdml0eUZvcmNlcyA9IGZ1bmN0aW9uIGNhbGN1bGF0ZUdyYXZpdHlGb3JjZXMobGF5b3V0SW5mbywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5ncmF2aXR5ID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBkaXN0VGhyZXNob2xkID0gMTtcblxuICAvLyB2YXIgcyA9ICdjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzJztcbiAgLy8gbG9nRGVidWcocyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ncmFwaFNldC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbaV07XG4gICAgdmFyIG51bU5vZGVzID0gZ3JhcGgubGVuZ3RoO1xuXG4gICAgLy8gcyA9IFwiU2V0OiBcIiArIGdyYXBoLnRvU3RyaW5nKCk7XG4gICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAvLyBDb21wdXRlIGdyYXBoIGNlbnRlclxuICAgIGlmICgwID09PSBpKSB7XG4gICAgICB2YXIgY2VudGVyWCA9IGxheW91dEluZm8uY2xpZW50SGVpZ2h0IC8gMjtcbiAgICAgIHZhciBjZW50ZXJZID0gbGF5b3V0SW5mby5jbGllbnRXaWR0aCAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBQYXJlbnQgbm9kZSBmb3IgdGhpcyBncmFwaCwgYW5kIHVzZSBpdHMgcG9zaXRpb24gYXMgY2VudGVyXG4gICAgICB2YXIgdGVtcCA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbMF1dXTtcbiAgICAgIHZhciBwYXJlbnQgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3RlbXAucGFyZW50SWRdXTtcbiAgICAgIHZhciBjZW50ZXJYID0gcGFyZW50LnBvc2l0aW9uWDtcbiAgICAgIHZhciBjZW50ZXJZID0gcGFyZW50LnBvc2l0aW9uWTtcbiAgICB9XG4gICAgLy8gcyA9IFwiQ2VudGVyIGZvdW5kIGF0OiBcIiArIGNlbnRlclggKyBcIiwgXCIgKyBjZW50ZXJZO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuXG4gICAgLy8gQXBwbHkgZm9yY2UgdG8gYWxsIG5vZGVzIGluIGdyYXBoXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1Ob2RlczsgaisrKSB7XG4gICAgICB2YXIgbm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbal1dXTtcbiAgICAgIC8vIHMgPSBcIk5vZGU6IFwiICsgbm9kZS5pZDtcblxuICAgICAgaWYgKG5vZGUuaXNMb2NrZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZHggPSBjZW50ZXJYIC0gbm9kZS5wb3NpdGlvblg7XG4gICAgICB2YXIgZHkgPSBjZW50ZXJZIC0gbm9kZS5wb3NpdGlvblk7XG4gICAgICB2YXIgZCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICBpZiAoZCA+IGRpc3RUaHJlc2hvbGQpIHtcbiAgICAgICAgdmFyIGZ4ID0gb3B0aW9ucy5ncmF2aXR5ICogZHggLyBkO1xuICAgICAgICB2YXIgZnkgPSBvcHRpb25zLmdyYXZpdHkgKiBkeSAvIGQ7XG4gICAgICAgIG5vZGUub2Zmc2V0WCArPSBmeDtcbiAgICAgICAgbm9kZS5vZmZzZXRZICs9IGZ5O1xuICAgICAgICAvLyBzICs9IFwiOiBBcHBsaWVkIGZvcmNlOiBcIiArIGZ4ICsgXCIsIFwiICsgZnk7XG4gICAgICB9XG4gICAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogVGhpcyBmdW5jdGlvbiBwcm9wYWdhdGVzIHRoZSBleGlzdGluZyBvZmZzZXRzIGZyb21cbiAqICAgICAgICAgICAgICAgICAgIHBhcmVudCBub2RlcyB0byBpdHMgZGVzY2VuZGVudHMuXG4gKiBAYXJnIGxheW91dEluZm8gOiBsYXlvdXRJbmZvIE9iamVjdFxuICogQGFyZyBjeSAgICAgICAgIDogY3l0b3NjYXBlIE9iamVjdFxuICogQGFyZyBvcHRpb25zICAgIDogTGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIHByb3BhZ2F0ZUZvcmNlcyA9IGZ1bmN0aW9uIHByb3BhZ2F0ZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIElubGluZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHF1ZXVlLCB1c2VkIGZvciB0cmF2ZXJzaW5nIHRoZSBncmFwaCBpbiBCRlMgb3JkZXJcbiAgdmFyIHF1ZXVlID0gW107XG4gIHZhciBzdGFydCA9IDA7IC8vIFBvaW50cyB0byB0aGUgc3RhcnQgdGhlIHF1ZXVlXG4gIHZhciBlbmQgPSAtMTsgLy8gUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG5cbiAgLy8gbG9nRGVidWcoJ3Byb3BhZ2F0ZUZvcmNlcycpO1xuXG4gIC8vIFN0YXJ0IGJ5IHZpc2l0aW5nIHRoZSBub2RlcyBpbiB0aGUgcm9vdCBncmFwaFxuICBxdWV1ZS5wdXNoLmFwcGx5KHF1ZXVlLCBsYXlvdXRJbmZvLmdyYXBoU2V0WzBdKTtcbiAgZW5kICs9IGxheW91dEluZm8uZ3JhcGhTZXRbMF0ubGVuZ3RoO1xuXG4gIC8vIFRyYXZlcnNlIHRoZSBncmFwaCwgbGV2ZWwgYnkgbGV2ZWwsXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICAvLyBHZXQgdGhlIG5vZGUgdG8gdmlzaXQgYW5kIHJlbW92ZSBpdCBmcm9tIHF1ZXVlXG4gICAgdmFyIG5vZGVJZCA9IHF1ZXVlW3N0YXJ0KytdO1xuICAgIHZhciBub2RlSW5kZXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFtub2RlSWRdO1xuICAgIHZhciBub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlSW5kZXhdO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyB0aGUgbm9kZSBpZiBpdCdzIGNvbXBvdW5kXG4gICAgaWYgKDAgPCBjaGlsZHJlbi5sZW5ndGggJiYgIW5vZGUuaXNMb2NrZWQpIHtcbiAgICAgIHZhciBvZmZYID0gbm9kZS5vZmZzZXRYO1xuICAgICAgdmFyIG9mZlkgPSBub2RlLm9mZnNldFk7XG5cbiAgICAgIC8vIHZhciBzID0gXCJQcm9wYWdhdGluZyBvZmZzZXQgZnJvbSBwYXJlbnQgbm9kZSA6IFwiICsgbm9kZS5pZCArXG4gICAgICAvLyAgIFwiLiBPZmZzZXRYOiBcIiArIG9mZlggKyBcIi4gT2Zmc2V0WTogXCIgKyBvZmZZO1xuICAgICAgLy8gcyArPSBcIlxcbiBDaGlsZHJlbjogXCIgKyBjaGlsZHJlbi50b1N0cmluZygpO1xuICAgICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbY2hpbGRyZW5baV1dXTtcbiAgICAgICAgLy8gUHJvcGFnYXRlIG9mZnNldFxuICAgICAgICBjaGlsZE5vZGUub2Zmc2V0WCArPSBvZmZYO1xuICAgICAgICBjaGlsZE5vZGUub2Zmc2V0WSArPSBvZmZZO1xuICAgICAgICAvLyBBZGQgY2hpbGRyZW4gdG8gcXVldWUgdG8gYmUgdmlzaXRlZFxuICAgICAgICBxdWV1ZVsrK2VuZF0gPSBjaGlsZHJlbltpXTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgcGFyZW50IG9mZnNldHNcbiAgICAgIG5vZGUub2Zmc2V0WCA9IDA7XG4gICAgICBub2RlLm9mZnNldFkgPSAwO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBVcGRhdGVzIHRoZSBsYXlvdXQgbW9kZWwgcG9zaXRpb25zLCBiYXNlZCBvblxuICogICAgICAgICAgdGhlIGFjY3VtdWxhdGVkIGZvcmNlc1xuICovXG52YXIgdXBkYXRlUG9zaXRpb25zID0gZnVuY3Rpb24gdXBkYXRlUG9zaXRpb25zKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gdmFyIHMgPSAnVXBkYXRpbmcgcG9zaXRpb25zJztcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgLy8gUmVzZXQgYm91bmRhcmllcyBmb3IgY29tcG91bmQgbm9kZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICB2YXIgbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbaV07XG4gICAgaWYgKDAgPCBuLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gbG9nRGVidWcoXCJSZXNldHRpbmcgYm91bmRhcmllcyBvZiBjb21wb3VuZCBub2RlOiBcIiArIG4uaWQpO1xuICAgICAgbi5tYXhYID0gdW5kZWZpbmVkO1xuICAgICAgbi5taW5YID0gdW5kZWZpbmVkO1xuICAgICAgbi5tYXhZID0gdW5kZWZpbmVkO1xuICAgICAgbi5taW5ZID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcbiAgICBpZiAoMCA8IG4uY2hpbGRyZW4ubGVuZ3RoIHx8IG4uaXNMb2NrZWQpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IGNvbXBvdW5kIG9yIGxvY2tlZCBub2RlIHBvc2l0aW9uXG4gICAgICAvLyBsb2dEZWJ1ZyhcIlNraXBwaW5nIHBvc2l0aW9uIHVwZGF0ZSBvZiBub2RlOiBcIiArIG4uaWQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIHMgPSBcIk5vZGU6IFwiICsgbi5pZCArIFwiIFByZXZpb3VzIHBvc2l0aW9uOiAoXCIgK1xuICAgIC8vIG4ucG9zaXRpb25YICsgXCIsIFwiICsgbi5wb3NpdGlvblkgKyBcIikuXCI7XG5cbiAgICAvLyBMaW1pdCBkaXNwbGFjZW1lbnQgaW4gb3JkZXIgdG8gaW1wcm92ZSBzdGFiaWxpdHlcbiAgICB2YXIgdGVtcEZvcmNlID0gbGltaXRGb3JjZShuLm9mZnNldFgsIG4ub2Zmc2V0WSwgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSk7XG4gICAgbi5wb3NpdGlvblggKz0gdGVtcEZvcmNlLng7XG4gICAgbi5wb3NpdGlvblkgKz0gdGVtcEZvcmNlLnk7XG4gICAgbi5vZmZzZXRYID0gMDtcbiAgICBuLm9mZnNldFkgPSAwO1xuICAgIG4ubWluWCA9IG4ucG9zaXRpb25YIC0gbi53aWR0aDtcbiAgICBuLm1heFggPSBuLnBvc2l0aW9uWCArIG4ud2lkdGg7XG4gICAgbi5taW5ZID0gbi5wb3NpdGlvblkgLSBuLmhlaWdodDtcbiAgICBuLm1heFkgPSBuLnBvc2l0aW9uWSArIG4uaGVpZ2h0O1xuICAgIC8vIHMgKz0gXCIgTmV3IFBvc2l0aW9uOiAoXCIgKyBuLnBvc2l0aW9uWCArIFwiLCBcIiArIG4ucG9zaXRpb25ZICsgXCIpLlwiO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuXG4gICAgLy8gVXBkYXRlIGFuY2VzdHJ5IGJvdWRhcmllc1xuICAgIHVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyhuLCBsYXlvdXRJbmZvKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBzaXplLCBwb3NpdGlvbiBvZiBjb21wdW5kIG5vZGVzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ub2RlU2l6ZTsgaSsrKSB7XG4gICAgdmFyIG4gPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2ldO1xuICAgIGlmICgwIDwgbi5jaGlsZHJlbi5sZW5ndGggJiYgIW4uaXNMb2NrZWQpIHtcbiAgICAgIG4ucG9zaXRpb25YID0gKG4ubWF4WCArIG4ubWluWCkgLyAyO1xuICAgICAgbi5wb3NpdGlvblkgPSAobi5tYXhZICsgbi5taW5ZKSAvIDI7XG4gICAgICBuLndpZHRoID0gbi5tYXhYIC0gbi5taW5YO1xuICAgICAgbi5oZWlnaHQgPSBuLm1heFkgLSBuLm1pblk7XG4gICAgICAvLyBzID0gXCJVcGRhdGluZyBwb3NpdGlvbiwgc2l6ZSBvZiBjb21wb3VuZCBub2RlIFwiICsgbi5pZDtcbiAgICAgIC8vIHMgKz0gXCJcXG5Qb3NpdGlvblg6IFwiICsgbi5wb3NpdGlvblggKyBcIiwgUG9zaXRpb25ZOiBcIiArIG4ucG9zaXRpb25ZO1xuICAgICAgLy8gcyArPSBcIlxcbldpZHRoOiBcIiArIG4ud2lkdGggKyBcIiwgSGVpZ2h0OiBcIiArIG4uaGVpZ2h0O1xuICAgICAgLy8gbG9nRGVidWcocyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IExpbWl0cyBhIGZvcmNlIChmb3JjZVgsIGZvcmNlWSkgdG8gYmUgbm90XG4gKiAgICAgICAgICBncmVhdGVyIChpbiBtb2R1bG8pIHRoYW4gbWF4LlxuIDggICAgICAgICAgUHJlc2VydmVzIGZvcmNlIGRpcmVjdGlvbi5cbiAgKi9cbnZhciBsaW1pdEZvcmNlID0gZnVuY3Rpb24gbGltaXRGb3JjZShmb3JjZVgsIGZvcmNlWSwgbWF4KSB7XG4gIC8vIHZhciBzID0gXCJMaW1pdGluZyBmb3JjZTogKFwiICsgZm9yY2VYICsgXCIsIFwiICsgZm9yY2VZICsgXCIpLiBNYXg6IFwiICsgbWF4O1xuICB2YXIgZm9yY2UgPSBNYXRoLnNxcnQoZm9yY2VYICogZm9yY2VYICsgZm9yY2VZICogZm9yY2VZKTtcbiAgaWYgKGZvcmNlID4gbWF4KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHg6IG1heCAqIGZvcmNlWCAvIGZvcmNlLFxuICAgICAgeTogbWF4ICogZm9yY2VZIC8gZm9yY2VcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciByZXMgPSB7XG4gICAgICB4OiBmb3JjZVgsXG4gICAgICB5OiBmb3JjZVlcbiAgICB9O1xuICB9XG5cbiAgLy8gcyArPSBcIi5cXG5SZXN1bHQ6IChcIiArIHJlcy54ICsgXCIsIFwiICsgcmVzLnkgKyBcIilcIjtcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogQGJyaWVmIDogRnVuY3Rpb24gdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBjb21wb3VuZCBub2RlXG4gKiAgICAgICAgICBzaXplcywgc2luY2UgdGhleSBzaG91bGQgYm91bmQgYWxsIHRoZWlyIHN1Ym5vZGVzLlxuICovXG52YXIgdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzID0gZnVuY3Rpb24gdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzKG5vZGUsIGxheW91dEluZm8pIHtcbiAgLy8gdmFyIHMgPSBcIlByb3BhZ2F0aW5nIG5ldyBwb3NpdGlvbi9zaXplIG9mIG5vZGUgXCIgKyBub2RlLmlkO1xuICB2YXIgcGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICBpZiAobnVsbCA9PSBwYXJlbnRJZCkge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSBhcmUgZG9uZVxuICAgIC8vIHMgKz0gXCIuIE5vIHBhcmVudCBub2RlLlwiO1xuICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEdldCBQYXJlbnQgTm9kZVxuICB2YXIgcCA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbcGFyZW50SWRdXTtcbiAgdmFyIGZsYWcgPSBmYWxzZTtcblxuICAvLyBNYXhYXG4gIGlmIChudWxsID09IHAubWF4WCB8fCBub2RlLm1heFggKyBwLnBhZFJpZ2h0ID4gcC5tYXhYKSB7XG4gICAgcC5tYXhYID0gbm9kZS5tYXhYICsgcC5wYWRSaWdodDtcbiAgICBmbGFnID0gdHJ1ZTtcbiAgICAvLyBzICs9IFwiXFxuTmV3IG1heFggZm9yIHBhcmVudCBub2RlIFwiICsgcC5pZCArIFwiOiBcIiArIHAubWF4WDtcbiAgfVxuXG4gIC8vIE1pblhcbiAgaWYgKG51bGwgPT0gcC5taW5YIHx8IG5vZGUubWluWCAtIHAucGFkTGVmdCA8IHAubWluWCkge1xuICAgIHAubWluWCA9IG5vZGUubWluWCAtIHAucGFkTGVmdDtcbiAgICBmbGFnID0gdHJ1ZTtcbiAgICAvLyBzICs9IFwiXFxuTmV3IG1pblggZm9yIHBhcmVudCBub2RlIFwiICsgcC5pZCArIFwiOiBcIiArIHAubWluWDtcbiAgfVxuXG4gIC8vIE1heFlcbiAgaWYgKG51bGwgPT0gcC5tYXhZIHx8IG5vZGUubWF4WSArIHAucGFkQm90dG9tID4gcC5tYXhZKSB7XG4gICAgcC5tYXhZID0gbm9kZS5tYXhZICsgcC5wYWRCb3R0b207XG4gICAgZmxhZyA9IHRydWU7XG4gICAgLy8gcyArPSBcIlxcbk5ldyBtYXhZIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1heFk7XG4gIH1cblxuICAvLyBNaW5ZXG4gIGlmIChudWxsID09IHAubWluWSB8fCBub2RlLm1pblkgLSBwLnBhZFRvcCA8IHAubWluWSkge1xuICAgIHAubWluWSA9IG5vZGUubWluWSAtIHAucGFkVG9wO1xuICAgIGZsYWcgPSB0cnVlO1xuICAgIC8vIHMgKz0gXCJcXG5OZXcgbWluWSBmb3IgcGFyZW50IG5vZGUgXCIgKyBwLmlkICsgXCI6IFwiICsgcC5taW5ZO1xuICB9XG5cbiAgLy8gSWYgdXBkYXRlZCBib3VuZGFyaWVzLCBwcm9wYWdhdGUgY2hhbmdlcyB1cHdhcmRcbiAgaWYgKGZsYWcpIHtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICByZXR1cm4gdXBkYXRlQW5jZXN0cnlCb3VuZGFyaWVzKHAsIGxheW91dEluZm8pO1xuICB9XG5cbiAgLy8gcyArPSBcIi4gTm8gY2hhbmdlcyBpbiBib3VuZGFyaWVzL3Bvc2l0aW9uIG9mIHBhcmVudCBub2RlIFwiICsgcC5pZDtcbiAgLy8gbG9nRGVidWcocyk7XG4gIHJldHVybjtcbn07XG52YXIgc2VwYXJhdGVDb21wb25lbnRzID0gZnVuY3Rpb24gc2VwYXJhdGVDb21wb25lbnRzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGVzID0gbGF5b3V0SW5mby5sYXlvdXROb2RlcztcbiAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgdmFyIGNpZCA9IG5vZGUuY21wdElkO1xuICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzW2NpZF0gPSBjb21wb25lbnRzW2NpZF0gfHwgW107XG4gICAgY29tcG9uZW50LnB1c2gobm9kZSk7XG4gIH1cbiAgdmFyIHRvdGFsQSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gY29tcG9uZW50c1tpXTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjLngxID0gSW5maW5pdHk7XG4gICAgYy54MiA9IC1JbmZpbml0eTtcbiAgICBjLnkxID0gSW5maW5pdHk7XG4gICAgYy55MiA9IC1JbmZpbml0eTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBuID0gY1tqXTtcbiAgICAgIGMueDEgPSBNYXRoLm1pbihjLngxLCBuLnBvc2l0aW9uWCAtIG4ud2lkdGggLyAyKTtcbiAgICAgIGMueDIgPSBNYXRoLm1heChjLngyLCBuLnBvc2l0aW9uWCArIG4ud2lkdGggLyAyKTtcbiAgICAgIGMueTEgPSBNYXRoLm1pbihjLnkxLCBuLnBvc2l0aW9uWSAtIG4uaGVpZ2h0IC8gMik7XG4gICAgICBjLnkyID0gTWF0aC5tYXgoYy55Miwgbi5wb3NpdGlvblkgKyBuLmhlaWdodCAvIDIpO1xuICAgIH1cbiAgICBjLncgPSBjLngyIC0gYy54MTtcbiAgICBjLmggPSBjLnkyIC0gYy55MTtcbiAgICB0b3RhbEEgKz0gYy53ICogYy5oO1xuICB9XG4gIGNvbXBvbmVudHMuc29ydChmdW5jdGlvbiAoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLncgKiBjMi5oIC0gYzEudyAqIGMxLmg7XG4gIH0pO1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIHVzZWRXID0gMDtcbiAgdmFyIHJvd0ggPSAwO1xuICB2YXIgbWF4Um93VyA9IE1hdGguc3FydCh0b3RhbEEpICogbGF5b3V0SW5mby5jbGllbnRXaWR0aCAvIGxheW91dEluZm8uY2xpZW50SGVpZ2h0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGNvbXBvbmVudHNbaV07XG4gICAgaWYgKCFjKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbiA9IGNbal07XG4gICAgICBpZiAoIW4uaXNMb2NrZWQpIHtcbiAgICAgICAgbi5wb3NpdGlvblggKz0geCAtIGMueDE7XG4gICAgICAgIG4ucG9zaXRpb25ZICs9IHkgLSBjLnkxO1xuICAgICAgfVxuICAgIH1cbiAgICB4ICs9IGMudyArIG9wdGlvbnMuY29tcG9uZW50U3BhY2luZztcbiAgICB1c2VkVyArPSBjLncgKyBvcHRpb25zLmNvbXBvbmVudFNwYWNpbmc7XG4gICAgcm93SCA9IE1hdGgubWF4KHJvd0gsIGMuaCk7XG4gICAgaWYgKHVzZWRXID4gbWF4Um93Vykge1xuICAgICAgeSArPSByb3dIICsgb3B0aW9ucy5jb21wb25lbnRTcGFjaW5nO1xuICAgICAgeCA9IDA7XG4gICAgICB1c2VkVyA9IDA7XG4gICAgICByb3dIID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0cyQzID0ge1xuICBmaXQ6IHRydWUsXG4gIC8vIHdoZXRoZXIgdG8gZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgZ3JhcGhcbiAgcGFkZGluZzogMzAsXG4gIC8vIHBhZGRpbmcgdXNlZCBvbiBmaXRcbiAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgLy8gY29uc3RyYWluIGxheW91dCBib3VuZHM7IHsgeDEsIHkxLCB4MiwgeTIgfSBvciB7IHgxLCB5MSwgdywgaCB9XG4gIGF2b2lkT3ZlcmxhcDogdHJ1ZSxcbiAgLy8gcHJldmVudHMgbm9kZSBvdmVybGFwLCBtYXkgb3ZlcmZsb3cgYm91bmRpbmdCb3ggaWYgbm90IGVub3VnaCBzcGFjZVxuICBhdm9pZE92ZXJsYXBQYWRkaW5nOiAxMCxcbiAgLy8gZXh0cmEgc3BhY2luZyBhcm91bmQgbm9kZXMgd2hlbiBhdm9pZE92ZXJsYXA6IHRydWVcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICBjb25kZW5zZTogZmFsc2UsXG4gIC8vIHVzZXMgYWxsIGF2YWlsYWJsZSBzcGFjZSBvbiBmYWxzZSwgdXNlcyBtaW5pbWFsIHNwYWNlIG9uIHRydWVcbiAgcm93czogdW5kZWZpbmVkLFxuICAvLyBmb3JjZSBudW0gb2Ygcm93cyBpbiB0aGUgZ3JpZFxuICBjb2xzOiB1bmRlZmluZWQsXG4gIC8vIGZvcmNlIG51bSBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4gIHBvc2l0aW9uOiBmdW5jdGlvbiBwb3NpdGlvbihub2RlKSB7fSxcbiAgLy8gcmV0dXJucyB7IHJvdywgY29sIH0gZm9yIGVsZW1lbnRcbiAgc29ydDogdW5kZWZpbmVkLFxuICAvLyBhIHNvcnRpbmcgZnVuY3Rpb24gdG8gb3JkZXIgdGhlIG5vZGVzOyBlLmcuIGZ1bmN0aW9uKGEsIGIpeyByZXR1cm4gYS5kYXRhKCd3ZWlnaHQnKSAtIGIuZGF0YSgnd2VpZ2h0JykgfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG59O1xuXG5mdW5jdGlvbiBHcmlkTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQzLCBvcHRpb25zKTtcbn1cbkdyaWRMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhcmFtcyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIG9wdGlvbnMgPSBwYXJhbXM7XG4gIHZhciBjeSA9IHBhcmFtcy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcbiAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICB9XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICBpZiAoYmIuaCA9PT0gMCB8fCBiYi53ID09PSAwKSB7XG4gICAgZWxlcy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBiYi54MSxcbiAgICAgICAgeTogYmIueTFcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2lkdGgvaGVpZ2h0ICogc3BsaXRzXjIgPSBjZWxscyB3aGVyZSBzcGxpdHMgaXMgbnVtYmVyIG9mIHRpbWVzIHRvIHNwbGl0IHdpZHRoXG4gICAgdmFyIGNlbGxzID0gbm9kZXMuc2l6ZSgpO1xuICAgIHZhciBzcGxpdHMgPSBNYXRoLnNxcnQoY2VsbHMgKiBiYi5oIC8gYmIudyk7XG4gICAgdmFyIHJvd3MgPSBNYXRoLnJvdW5kKHNwbGl0cyk7XG4gICAgdmFyIGNvbHMgPSBNYXRoLnJvdW5kKGJiLncgLyBiYi5oICogc3BsaXRzKTtcbiAgICB2YXIgc21hbGwgPSBmdW5jdGlvbiBzbWFsbCh2YWwpIHtcbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4ocm93cywgY29scyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ocm93cywgY29scyk7XG4gICAgICAgIGlmIChtaW4gPT0gcm93cykge1xuICAgICAgICAgIHJvd3MgPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29scyA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGxhcmdlID0gZnVuY3Rpb24gbGFyZ2UodmFsKSB7XG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuICAgICAgICBpZiAobWF4ID09IHJvd3MpIHtcbiAgICAgICAgICByb3dzID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHMgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvUm93cyA9IG9wdGlvbnMucm93cztcbiAgICB2YXIgb0NvbHMgPSBvcHRpb25zLmNvbHMgIT0gbnVsbCA/IG9wdGlvbnMuY29scyA6IG9wdGlvbnMuY29sdW1ucztcblxuICAgIC8vIGlmIHJvd3Mgb3IgY29sdW1ucyB3ZXJlIHNldCBpbiBvcHRpb25zLCB1c2UgdGhvc2UgdmFsdWVzXG4gICAgaWYgKG9Sb3dzICE9IG51bGwgJiYgb0NvbHMgIT0gbnVsbCkge1xuICAgICAgcm93cyA9IG9Sb3dzO1xuICAgICAgY29scyA9IG9Db2xzO1xuICAgIH0gZWxzZSBpZiAob1Jvd3MgIT0gbnVsbCAmJiBvQ29scyA9PSBudWxsKSB7XG4gICAgICByb3dzID0gb1Jvd3M7XG4gICAgICBjb2xzID0gTWF0aC5jZWlsKGNlbGxzIC8gcm93cyk7XG4gICAgfSBlbHNlIGlmIChvUm93cyA9PSBudWxsICYmIG9Db2xzICE9IG51bGwpIHtcbiAgICAgIGNvbHMgPSBvQ29scztcbiAgICAgIHJvd3MgPSBNYXRoLmNlaWwoY2VsbHMgLyBjb2xzKTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgdXNlIHRoZSBhdXRvbWF0aWMgdmFsdWVzIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcblxuICAgIC8vIGlmIHJvdW5kaW5nIHdhcyB1cCwgc2VlIGlmIHdlIGNhbiByZWR1Y2Ugcm93cyBvciBjb2x1bW5zXG4gICAgZWxzZSBpZiAoY29scyAqIHJvd3MgPiBjZWxscykge1xuICAgICAgdmFyIHNtID0gc21hbGwoKTtcbiAgICAgIHZhciBsZyA9IGxhcmdlKCk7XG5cbiAgICAgIC8vIHJlZHVjaW5nIHRoZSBzbWFsbCBzaWRlIHRha2VzIGF3YXkgdGhlIG1vc3QgY2VsbHMsIHNvIHRyeSBpdCBmaXJzdFxuICAgICAgaWYgKChzbSAtIDEpICogbGcgPj0gY2VsbHMpIHtcbiAgICAgICAgc21hbGwoc20gLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAoKGxnIC0gMSkgKiBzbSA+PSBjZWxscykge1xuICAgICAgICBsYXJnZShsZyAtIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiByb3VuZGluZyB3YXMgdG9vIGxvdywgYWRkIHJvd3Mgb3IgY29sdW1uc1xuICAgICAgd2hpbGUgKGNvbHMgKiByb3dzIDwgY2VsbHMpIHtcbiAgICAgICAgdmFyIF9zbSA9IHNtYWxsKCk7XG4gICAgICAgIHZhciBfbGcgPSBsYXJnZSgpO1xuXG4gICAgICAgIC8vIHRyeSB0byBhZGQgdG8gbGFyZ2VyIHNpZGUgZmlyc3QgKGFkZHMgbGVzcyBpbiBtdWx0aXBsaWNhdGlvbilcbiAgICAgICAgaWYgKChfbGcgKyAxKSAqIF9zbSA+PSBjZWxscykge1xuICAgICAgICAgIGxhcmdlKF9sZyArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYWxsKF9zbSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjZWxsV2lkdGggPSBiYi53IC8gY29scztcbiAgICB2YXIgY2VsbEhlaWdodCA9IGJiLmggLyByb3dzO1xuICAgIGlmIChvcHRpb25zLmNvbmRlbnNlKSB7XG4gICAgICBjZWxsV2lkdGggPSAwO1xuICAgICAgY2VsbEhlaWdodCA9IDA7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgcG9zID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvcy54ID09IG51bGwgfHwgcG9zLnkgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIGZvciBiYlxuICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICBwb3MueSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5iYiA9IG5vZGUubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIHAgPSBvcHRpb25zLmF2b2lkT3ZlcmxhcFBhZGRpbmc7XG4gICAgICAgIHZhciB3ID0gbmJiLncgKyBwO1xuICAgICAgICB2YXIgaCA9IG5iYi5oICsgcDtcbiAgICAgICAgY2VsbFdpZHRoID0gTWF0aC5tYXgoY2VsbFdpZHRoLCB3KTtcbiAgICAgICAgY2VsbEhlaWdodCA9IE1hdGgubWF4KGNlbGxIZWlnaHQsIGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2VsbFVzZWQgPSB7fTsgLy8gZS5nLiAnYy0wLTInID0+IHRydWVcblxuICAgIHZhciB1c2VkID0gZnVuY3Rpb24gdXNlZChyb3csIGNvbCkge1xuICAgICAgcmV0dXJuIGNlbGxVc2VkWydjLScgKyByb3cgKyAnLScgKyBjb2xdID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH07XG4gICAgdmFyIHVzZSA9IGZ1bmN0aW9uIHVzZShyb3csIGNvbCkge1xuICAgICAgY2VsbFVzZWRbJ2MtJyArIHJvdyArICctJyArIGNvbF0gPSB0cnVlO1xuICAgIH07XG5cbiAgICAvLyB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgY2VsbCBwb3NpdGlvblxuICAgIHZhciByb3cgPSAwO1xuICAgIHZhciBjb2wgPSAwO1xuICAgIHZhciBtb3ZlVG9OZXh0Q2VsbCA9IGZ1bmN0aW9uIG1vdmVUb05leHRDZWxsKCkge1xuICAgICAgY29sKys7XG4gICAgICBpZiAoY29sID49IGNvbHMpIHtcbiAgICAgICAgY29sID0gMDtcbiAgICAgICAgcm93Kys7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGdldCBhIGNhY2hlIG9mIGFsbCB0aGUgbWFudWFsIHBvc2l0aW9uc1xuICAgIHZhciBpZDJtYW5Qb3MgPSB7fTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25vZGUgPSBub2Rlc1tfaV07XG4gICAgICB2YXIgcmNQb3MgPSBvcHRpb25zLnBvc2l0aW9uKF9ub2RlKTtcbiAgICAgIGlmIChyY1BvcyAmJiAocmNQb3Mucm93ICE9PSB1bmRlZmluZWQgfHwgcmNQb3MuY29sICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIC8vIG11c3QgaGF2ZSBhdCBsZWFzdCByb3cgb3IgY29sIGRlZidkXG4gICAgICAgIHZhciBfcG9zID0ge1xuICAgICAgICAgIHJvdzogcmNQb3Mucm93LFxuICAgICAgICAgIGNvbDogcmNQb3MuY29sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChfcG9zLmNvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gZmluZCB1bnVzZWQgY29sXG4gICAgICAgICAgX3Bvcy5jb2wgPSAwO1xuICAgICAgICAgIHdoaWxlICh1c2VkKF9wb3Mucm93LCBfcG9zLmNvbCkpIHtcbiAgICAgICAgICAgIF9wb3MuY29sKys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF9wb3Mucm93ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBmaW5kIHVudXNlZCByb3dcbiAgICAgICAgICBfcG9zLnJvdyA9IDA7XG4gICAgICAgICAgd2hpbGUgKHVzZWQoX3Bvcy5yb3csIF9wb3MuY29sKSkge1xuICAgICAgICAgICAgX3Bvcy5yb3crKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWQybWFuUG9zW19ub2RlLmlkKCldID0gX3BvcztcbiAgICAgICAgdXNlKF9wb3Mucm93LCBfcG9zLmNvbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBnZXRQb3MgPSBmdW5jdGlvbiBnZXRQb3MoZWxlbWVudCwgaSkge1xuICAgICAgdmFyIHgsIHk7XG4gICAgICBpZiAoZWxlbWVudC5sb2NrZWQoKSB8fCBlbGVtZW50LmlzUGFyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWUgaWYgd2UgaGF2ZSBhIG1hbnVhbCBwb3NpdGlvbiBzZXRcbiAgICAgIHZhciByY1BvcyA9IGlkMm1hblBvc1tlbGVtZW50LmlkKCldO1xuICAgICAgaWYgKHJjUG9zKSB7XG4gICAgICAgIHggPSByY1Bvcy5jb2wgKiBjZWxsV2lkdGggKyBjZWxsV2lkdGggLyAyICsgYmIueDE7XG4gICAgICAgIHkgPSByY1Bvcy5yb3cgKiBjZWxsSGVpZ2h0ICsgY2VsbEhlaWdodCAvIDIgKyBiYi55MTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBzZXQgYXV0b21hdGljYWxseVxuXG4gICAgICAgIHdoaWxlICh1c2VkKHJvdywgY29sKSkge1xuICAgICAgICAgIG1vdmVUb05leHRDZWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgeCA9IGNvbCAqIGNlbGxXaWR0aCArIGNlbGxXaWR0aCAvIDIgKyBiYi54MTtcbiAgICAgICAgeSA9IHJvdyAqIGNlbGxIZWlnaHQgKyBjZWxsSGVpZ2h0IC8gMiArIGJiLnkxO1xuICAgICAgICB1c2Uocm93LCBjb2wpO1xuICAgICAgICBtb3ZlVG9OZXh0Q2VsbCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCxcbiAgICAgICAgeTogeVxuICAgICAgfTtcbiAgICB9O1xuICAgIG5vZGVzLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBnZXRQb3MpO1xuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gZGVmYXVsdCBsYXlvdXQgb3B0aW9uc1xudmFyIGRlZmF1bHRzJDIgPSB7XG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAvLyBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30gLy8gb24gbGF5b3V0c3RvcFxufTtcblxuLy8gY29uc3RydWN0b3Jcbi8vIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuZnVuY3Rpb24gTnVsbExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkMiwgb3B0aW9ucyk7XG59XG5cbi8vIHJ1bnMgdGhlIGxheW91dFxuTnVsbExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIGVsZW1lbnRzIHRvIGNvbnNpZGVyIGluIHRoZSBsYXlvdXRcbiAgdmFyIGxheW91dCA9IHRoaXM7XG5cbiAgLy8gY3kgaXMgYXV0b21hdGljYWxseSBwb3B1bGF0ZWQgZm9yIHVzIGluIHRoZSBjb25zdHJ1Y3RvclxuICAvLyAoZGlzYWJsZSBlc2xpbnQgZm9yIG5leHQgbGluZSBhcyB0aGlzIHNlcnZlcyBhcyBleGFtcGxlIGxheW91dCBjb2RlIHRvIGV4dGVybmFsIGRldmVsb3BlcnMpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBvcHRpb25zLmN5O1xuICBsYXlvdXQuZW1pdCgnbGF5b3V0c3RhcnQnKTtcblxuICAvLyBwdXRzIGFsbCBub2RlcyBhdCAoMCwgMClcbiAgLy8gbi5iLiBtb3N0IGxheW91dHMgd291bGQgdXNlIGxheW91dFBvc2l0aW9ucygpLCBpbnN0ZWFkIG9mIHBvc2l0aW9ucygpIGFuZCBtYW51YWwgZXZlbnRzXG4gIGVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHRyaWdnZXIgbGF5b3V0cmVhZHkgd2hlbiBlYWNoIG5vZGUgaGFzIGhhZCBpdHMgcG9zaXRpb24gc2V0IGF0IGxlYXN0IG9uY2VcbiAgbGF5b3V0Lm9uZSgnbGF5b3V0cmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgbGF5b3V0LmVtaXQoJ2xheW91dHJlYWR5Jyk7XG5cbiAgLy8gdHJpZ2dlciBsYXlvdXRzdG9wIHdoZW4gdGhlIGxheW91dCBzdG9wcyAoZS5nLiBmaW5pc2hlcylcbiAgbGF5b3V0Lm9uZSgnbGF5b3V0c3RvcCcsIG9wdGlvbnMuc3RvcCk7XG4gIGxheW91dC5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gY2FsbGVkIG9uIGNvbnRpbnVvdXMgbGF5b3V0cyB0byBzdG9wIHRoZW0gYmVmb3JlIHRoZXkgZmluaXNoXG5OdWxsTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbnZhciBkZWZhdWx0cyQxID0ge1xuICBwb3NpdGlvbnM6IHVuZGVmaW5lZCxcbiAgLy8gbWFwIG9mIChub2RlIGlkKSA9PiAocG9zaXRpb24gb2JqKTsgb3IgZnVuY3Rpb24obm9kZSl7IHJldHVybiBzb21Qb3M7IH1cbiAgem9vbTogdW5kZWZpbmVkLFxuICAvLyB0aGUgem9vbSBsZXZlbCB0byBzZXQgKHByb2Igd2FudCBmaXQgPSBmYWxzZSBpZiBzZXQpXG4gIHBhbjogdW5kZWZpbmVkLFxuICAvLyB0aGUgcGFuIGxldmVsIHRvIHNldCAocHJvYiB3YW50IGZpdCA9IGZhbHNlIGlmIHNldClcbiAgZml0OiB0cnVlLFxuICAvLyB3aGV0aGVyIHRvIGZpdCB0byB2aWV3cG9ydFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gcGFkZGluZyBvbiBmaXRcbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG5cbmZ1bmN0aW9uIFByZXNldExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkMSwgb3B0aW9ucyk7XG59XG5QcmVzZXRMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCk7XG4gIHZhciBwb3NJc0ZuID0gZm4kNihvcHRpb25zLnBvc2l0aW9ucyk7XG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICBpZiAob3B0aW9ucy5wb3NpdGlvbnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvcHlQb3NpdGlvbihub2RlLnBvc2l0aW9uKCkpO1xuICAgIH1cbiAgICBpZiAocG9zSXNGbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucG9zaXRpb25zKG5vZGUpO1xuICAgIH1cbiAgICB2YXIgcG9zID0gb3B0aW9ucy5wb3NpdGlvbnNbbm9kZS5fcHJpdmF0ZS5kYXRhLmlkXTtcbiAgICBpZiAocG9zID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcG9zO1xuICB9XG4gIG5vZGVzLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBmdW5jdGlvbiAobm9kZSwgaSkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFBvc2l0aW9uKG5vZGUpO1xuICAgIGlmIChub2RlLmxvY2tlZCgpIHx8IHBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdG8gdmlld3BvcnRcbiAgcGFkZGluZzogMzAsXG4gIC8vIGZpdCBwYWRkaW5nXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHMgXG59O1xuXG5mdW5jdGlvbiBSYW5kb21MYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblJhbmRvbUxheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgZ2V0UG9zID0gZnVuY3Rpb24gZ2V0UG9zKG5vZGUsIGkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogYmIueDEgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiBiYi53KSxcbiAgICAgIHk6IGJiLnkxICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogYmIuaClcbiAgICB9O1xuICB9O1xuICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGxheW91dCA9IFt7XG4gIG5hbWU6ICdicmVhZHRoZmlyc3QnLFxuICBpbXBsOiBCcmVhZHRoRmlyc3RMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ2NpcmNsZScsXG4gIGltcGw6IENpcmNsZUxheW91dFxufSwge1xuICBuYW1lOiAnY29uY2VudHJpYycsXG4gIGltcGw6IENvbmNlbnRyaWNMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ2Nvc2UnLFxuICBpbXBsOiBDb3NlTGF5b3V0XG59LCB7XG4gIG5hbWU6ICdncmlkJyxcbiAgaW1wbDogR3JpZExheW91dFxufSwge1xuICBuYW1lOiAnbnVsbCcsXG4gIGltcGw6IE51bGxMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ3ByZXNldCcsXG4gIGltcGw6IFByZXNldExheW91dFxufSwge1xuICBuYW1lOiAncmFuZG9tJyxcbiAgaW1wbDogUmFuZG9tTGF5b3V0XG59XTtcblxuZnVuY3Rpb24gTnVsbFJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5ub3RpZmljYXRpb25zID0gMDsgLy8gZm9yIHRlc3Rpbmdcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgdGhyb3dJbWdFcnIgPSBmdW5jdGlvbiB0aHJvd0ltZ0VycigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcycpO1xufTtcbk51bGxSZW5kZXJlci5wcm90b3R5cGUgPSB7XG4gIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogbm9vcCxcbiAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zKys7XG4gIH0sXG4gIGluaXQ6IG5vb3AsXG4gIGlzSGVhZGxlc3M6IGZ1bmN0aW9uIGlzSGVhZGxlc3MoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIHBuZzogdGhyb3dJbWdFcnIsXG4gIGpwZzogdGhyb3dJbWdFcnJcbn07XG5cbnZhciBCUnAkZiA9IHt9O1xuQlJwJGYuYXJyb3dTaGFwZVdpZHRoID0gMC4zO1xuQlJwJGYucmVnaXN0ZXJBcnJvd1NoYXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycm93U2hhcGVzID0gdGhpcy5hcnJvd1NoYXBlcyA9IHt9O1xuICB2YXIgcmVuZGVyZXIgPSB0aGlzO1xuXG4gIC8vIENvbnRyYWN0IGZvciBhcnJvdyBzaGFwZXM6XG4gIC8vIDAsIDAgaXMgYXJyb3cgdGlwXG4gIC8vICgwLCAxKSBpcyBkaXJlY3Rpb24gdG93YXJkcyBub2RlXG4gIC8vICgxLCAwKSBpcyByaWdodFxuICAvL1xuICAvLyBmdW5jdGlvbmFsIGFwaTpcbiAgLy8gY29sbGlkZTogY2hlY2sgeCwgeSBpbiBzaGFwZVxuICAvLyByb3VnaENvbGxpZGU6IGNhbGxlZCBiZWZvcmUgY29sbGlkZSwgbm8gZmFsc2UgbmVnYXRpdmVzXG4gIC8vIGRyYXc6IGRyYXdcbiAgLy8gc3BhY2luZzogZGlzdChhcnJvd1RpcCwgbm9kZUJvdW5kYXJ5KVxuICAvLyBnYXA6IGRpc3QoZWRnZVRpcCwgbm9kZUJvdW5kYXJ5KSwgZWRnZVRpcCBtYXkgIT0gYXJyb3dUaXBcblxuICB2YXIgYmJDb2xsaWRlID0gZnVuY3Rpb24gYmJDb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgdmFyIHgxID0gdHJhbnNsYXRpb24ueCAtIHNpemUgLyAyIC0gcGFkZGluZztcbiAgICB2YXIgeDIgPSB0cmFuc2xhdGlvbi54ICsgc2l6ZSAvIDIgKyBwYWRkaW5nO1xuICAgIHZhciB5MSA9IHRyYW5zbGF0aW9uLnkgLSBzaXplIC8gMiAtIHBhZGRpbmc7XG4gICAgdmFyIHkyID0gdHJhbnNsYXRpb24ueSArIHNpemUgLyAyICsgcGFkZGluZztcbiAgICB2YXIgaW5zaWRlID0geDEgPD0geCAmJiB4IDw9IHgyICYmIHkxIDw9IHkgJiYgeSA8PSB5MjtcbiAgICByZXR1cm4gaW5zaWRlO1xuICB9O1xuICB2YXIgdHJhbnNmb3JtID0gZnVuY3Rpb24gdHJhbnNmb3JtKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgIHZhciB4Um90YXRlZCA9IHggKiBNYXRoLmNvcyhhbmdsZSkgLSB5ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgIHZhciB5Um90YXRlZCA9IHggKiBNYXRoLnNpbihhbmdsZSkgKyB5ICogTWF0aC5jb3MoYW5nbGUpO1xuICAgIHZhciB4U2NhbGVkID0geFJvdGF0ZWQgKiBzaXplO1xuICAgIHZhciB5U2NhbGVkID0geVJvdGF0ZWQgKiBzaXplO1xuICAgIHZhciB4VHJhbnNsYXRlZCA9IHhTY2FsZWQgKyB0cmFuc2xhdGlvbi54O1xuICAgIHZhciB5VHJhbnNsYXRlZCA9IHlTY2FsZWQgKyB0cmFuc2xhdGlvbi55O1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4VHJhbnNsYXRlZCxcbiAgICAgIHk6IHlUcmFuc2xhdGVkXG4gICAgfTtcbiAgfTtcbiAgdmFyIHRyYW5zZm9ybVBvaW50cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50cyhwdHMsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgIHZhciByZXRQdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgdmFyIHggPSBwdHNbaV07XG4gICAgICB2YXIgeSA9IHB0c1tpICsgMV07XG4gICAgICByZXRQdHMucHVzaCh0cmFuc2Zvcm0oeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiByZXRQdHM7XG4gIH07XG4gIHZhciBwb2ludHNUb0FyciA9IGZ1bmN0aW9uIHBvaW50c1RvQXJyKHB0cykge1xuICAgIHZhciByZXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHAgPSBwdHNbaV07XG4gICAgICByZXQucHVzaChwLngsIHAueSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIHZhciBzdGFuZGFyZEdhcCA9IGZ1bmN0aW9uIHN0YW5kYXJkR2FwKGVkZ2UpIHtcbiAgICByZXR1cm4gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnBmVmFsdWUgKiAyO1xuICB9O1xuICB2YXIgZGVmaW5lQXJyb3dTaGFwZSA9IGZ1bmN0aW9uIGRlZmluZUFycm93U2hhcGUobmFtZSwgZGVmbikge1xuICAgIGlmIChzdHJpbmcoZGVmbikpIHtcbiAgICAgIGRlZm4gPSBhcnJvd1NoYXBlc1tkZWZuXTtcbiAgICB9XG4gICAgYXJyb3dTaGFwZXNbbmFtZV0gPSBleHRlbmQoe1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHBvaW50czogWy0wLjE1LCAtMC4zLCAwLjE1LCAtMC4zLCAwLjE1LCAwLjMsIC0wLjE1LCAwLjNdLFxuICAgICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIHBhZGRpbmcpIHtcbiAgICAgICAgdmFyIHBvaW50cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgICAgdmFyIGluc2lkZSA9IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpO1xuICAgICAgICByZXR1cm4gaW5zaWRlO1xuICAgICAgfSxcbiAgICAgIHJvdWdoQ29sbGlkZTogYmJDb2xsaWRlLFxuICAgICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pIHtcbiAgICAgICAgdmFyIHBvaW50cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwoJ3BvbHlnb24nKShjb250ZXh0LCBwb2ludHMpO1xuICAgICAgfSxcbiAgICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0sXG4gICAgICBnYXA6IHN0YW5kYXJkR2FwXG4gICAgfSwgZGVmbik7XG4gIH07XG4gIGRlZmluZUFycm93U2hhcGUoJ25vbmUnLCB7XG4gICAgY29sbGlkZTogZmFsc2lmeSxcbiAgICByb3VnaENvbGxpZGU6IGZhbHNpZnksXG4gICAgZHJhdzogbm9vcCQxLFxuICAgIHNwYWNpbmc6IHplcm9pZnksXG4gICAgZ2FwOiB6ZXJvaWZ5XG4gIH0pO1xuICBkZWZpbmVBcnJvd1NoYXBlKCd0cmlhbmdsZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuM11cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2Fycm93JywgJ3RyaWFuZ2xlJyk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWJhY2tjdXJ2ZScsIHtcbiAgICBwb2ludHM6IGFycm93U2hhcGVzWyd0cmlhbmdsZSddLnBvaW50cyxcbiAgICBjb250cm9sUG9pbnQ6IFswLCAtMC4xNV0sXG4gICAgcm91Z2hDb2xsaWRlOiBiYkNvbGxpZGUsXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHB0c1RyYW5zID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgdmFyIGN0cmxQdCA9IHRoaXMuY29udHJvbFBvaW50O1xuICAgICAgdmFyIGN0cmxQdFRyYW5zID0gdHJhbnNmb3JtKGN0cmxQdFswXSwgY3RybFB0WzFdLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCBwdHNUcmFucywgY3RybFB0VHJhbnMpO1xuICAgIH0sXG4gICAgZ2FwOiBmdW5jdGlvbiBnYXAoZWRnZSkge1xuICAgICAgcmV0dXJuIHN0YW5kYXJkR2FwKGVkZ2UpICogMC44O1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLXRlZScsIHtcbiAgICBwb2ludHM6IFswLCAwLCAwLjE1LCAtMC4zLCAtMC4xNSwgLTAuMywgMCwgMF0sXG4gICAgcG9pbnRzVGVlOiBbLTAuMTUsIC0wLjQsIC0wLjE1LCAtMC41LCAwLjE1LCAtMC41LCAwLjE1LCAtMC40XSxcbiAgICBjb2xsaWRlOiBmdW5jdGlvbiBjb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgICB2YXIgdHJpUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplICsgMiAqIHBhZGRpbmcsIGFuZ2xlLCB0cmFuc2xhdGlvbikpO1xuICAgICAgdmFyIHRlZVB0cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RlZSwgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgIHZhciBpbnNpZGUgPSBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgdHJpUHRzKSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgdGVlUHRzKTtcbiAgICAgIHJldHVybiBpbnNpZGU7XG4gICAgfSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoKSB7XG4gICAgICB2YXIgdHJpUHRzID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgdmFyIHRlZVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RlZSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJpUHRzLCB0ZWVQdHMpO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2NpcmNsZS10cmlhbmdsZScsIHtcbiAgICByYWRpdXM6IDAuMTUsXG4gICAgcG9pbnRzVHI6IFswLCAtMC4xNSwgMC4xNSwgLTAuNDUsIC0wLjE1LCAtMC40NSwgMCwgLTAuMTVdLFxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgsIHBhZGRpbmcpIHtcbiAgICAgIHZhciB0ID0gdHJhbnNsYXRpb247XG4gICAgICB2YXIgY2lyY2xlSW5zaWRlID0gTWF0aC5wb3codC54IC0geCwgMikgKyBNYXRoLnBvdyh0LnkgLSB5LCAyKSA8PSBNYXRoLnBvdygoc2l6ZSArIDIgKiBwYWRkaW5nKSAqIHRoaXMucmFkaXVzLCAyKTtcbiAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICByZXR1cm4gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgY2lyY2xlSW5zaWRlO1xuICAgIH0sXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RyLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCB0cmlQdHMsIHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnksIHRoaXMucmFkaXVzICogc2l6ZSk7XG4gICAgfSxcbiAgICBzcGFjaW5nOiBmdW5jdGlvbiBzcGFjaW5nKGVkZ2UpIHtcbiAgICAgIHJldHVybiByZW5kZXJlci5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMucmFkaXVzO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWNyb3NzJywge1xuICAgIHBvaW50czogWzAsIDAsIDAuMTUsIC0wLjMsIC0wLjE1LCAtMC4zLCAwLCAwXSxcbiAgICBiYXNlQ3Jvc3NMaW5lUHRzOiBbLTAuMTUsIC0wLjQsXG4gICAgLy8gZmlyc3QgaGFsZiBvZiB0aGUgcmVjdGFuZ2xlXG4gICAgLTAuMTUsIC0wLjQsIDAuMTUsIC0wLjQsXG4gICAgLy8gc2Vjb25kIGhhbGYgb2YgdGhlIHJlY3RhbmdsZVxuICAgIDAuMTUsIC0wLjRdLFxuICAgIGNyb3NzTGluZVB0czogZnVuY3Rpb24gY3Jvc3NMaW5lUHRzKHNpemUsIGVkZ2VXaWR0aCkge1xuICAgICAgLy8gc2hpZnQgcG9pbnRzIHNvIHRoYXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNyb3NzIHBvaW50cyBtYXRjaGVzIGVkZ2Ugd2lkdGhcbiAgICAgIHZhciBwID0gdGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCk7XG4gICAgICB2YXIgc2hpZnRGYWN0b3IgPSBlZGdlV2lkdGggLyBzaXplO1xuICAgICAgdmFyIHkwID0gMztcbiAgICAgIHZhciB5MSA9IDU7XG4gICAgICBwW3kwXSA9IHBbeTBdIC0gc2hpZnRGYWN0b3I7XG4gICAgICBwW3kxXSA9IHBbeTFdIC0gc2hpZnRGYWN0b3I7XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgsIHBhZGRpbmcpIHtcbiAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB2YXIgdGVlUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMuY3Jvc3NMaW5lUHRzKHNpemUsIGVkZ2VXaWR0aCksIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB2YXIgaW5zaWRlID0gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRlZVB0cyk7XG4gICAgICByZXR1cm4gaW5zaWRlO1xuICAgIH0sXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHZhciBjcm9zc0xpbmVQdHMgPSB0cmFuc2Zvcm1Qb2ludHModGhpcy5jcm9zc0xpbmVQdHMoc2l6ZSwgZWRnZVdpZHRoKSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJpUHRzLCBjcm9zc0xpbmVQdHMpO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3ZlZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuMywgMCwgLTAuMTVdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZEdhcChlZGdlKSAqIDAuNTI1O1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2NpcmNsZScsIHtcbiAgICByYWRpdXM6IDAuMTUsXG4gICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCwgcGFkZGluZykge1xuICAgICAgdmFyIHQgPSB0cmFuc2xhdGlvbjtcbiAgICAgIHZhciBpbnNpZGUgPSBNYXRoLnBvdyh0LnggLSB4LCAyKSArIE1hdGgucG93KHQueSAtIHksIDIpIDw9IE1hdGgucG93KChzaXplICsgMiAqIHBhZGRpbmcpICogdGhpcy5yYWRpdXMsIDIpO1xuICAgICAgcmV0dXJuIGluc2lkZTtcbiAgICB9LFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpIHtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJhbnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSwgdGhpcy5yYWRpdXMgKiBzaXplKTtcbiAgICB9LFxuICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEFycm93V2lkdGgoZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSwgZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWUpICogdGhpcy5yYWRpdXM7XG4gICAgfVxuICB9KTtcbiAgZGVmaW5lQXJyb3dTaGFwZSgndGVlJywge1xuICAgIHBvaW50czogWy0wLjE1LCAwLCAtMC4xNSwgLTAuMSwgMC4xNSwgLTAuMSwgMC4xNSwgMF0sXG4gICAgc3BhY2luZzogZnVuY3Rpb24gc3BhY2luZyhlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3NxdWFyZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgMC4wMCwgMC4xNSwgMC4wMCwgMC4xNSwgLTAuMywgLTAuMTUsIC0wLjNdXG4gIH0pO1xuICBkZWZpbmVBcnJvd1NoYXBlKCdkaWFtb25kJywge1xuICAgIHBvaW50czogWy0wLjE1LCAtMC4xNSwgMCwgLTAuMywgMC4xNSwgLTAuMTUsIDAsIDBdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlICogZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgfVxuICB9KTtcbiAgZGVmaW5lQXJyb3dTaGFwZSgnY2hldnJvbicsIHtcbiAgICBwb2ludHM6IFswLCAwLCAtMC4xNSwgLTAuMTUsIC0wLjEsIC0wLjIsIDAsIC0wLjEsIDAuMSwgLTAuMiwgMC4xNSwgLTAuMTVdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiAwLjk1ICogZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgQlJwJGUgPSB7fTtcblxuLy8gUHJvamVjdCBtb3VzZVxuQlJwJGUucHJvamVjdEludG9WaWV3cG9ydCA9IGZ1bmN0aW9uIChjbGllbnRYLCBjbGllbnRZKSB7XG4gIHZhciBjeSA9IHRoaXMuY3k7XG4gIHZhciBvZmZzZXRzID0gdGhpcy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gIHZhciBvZmZzZXRMZWZ0ID0gb2Zmc2V0c1swXTtcbiAgdmFyIG9mZnNldFRvcCA9IG9mZnNldHNbMV07XG4gIHZhciBzY2FsZSA9IG9mZnNldHNbNF07XG4gIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciB4ID0gKChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgLyBzY2FsZSAtIHBhbi54KSAvIHpvb207XG4gIHZhciB5ID0gKChjbGllbnRZIC0gb2Zmc2V0VG9wKSAvIHNjYWxlIC0gcGFuLnkpIC8gem9vbTtcbiAgcmV0dXJuIFt4LCB5XTtcbn07XG5CUnAkZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jb250YWluZXJCQikge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckJCO1xuICB9XG4gIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjtcbiAgdmFyIHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzdHlsZSA9IHRoaXMuY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICB2YXIgc3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHN0eWxlVmFsdWUobmFtZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICB9O1xuICB2YXIgcGFkZGluZyA9IHtcbiAgICBsZWZ0OiBzdHlsZVZhbHVlKCdwYWRkaW5nLWxlZnQnKSxcbiAgICByaWdodDogc3R5bGVWYWx1ZSgncGFkZGluZy1yaWdodCcpLFxuICAgIHRvcDogc3R5bGVWYWx1ZSgncGFkZGluZy10b3AnKSxcbiAgICBib3R0b206IHN0eWxlVmFsdWUoJ3BhZGRpbmctYm90dG9tJylcbiAgfTtcbiAgdmFyIGJvcmRlciA9IHtcbiAgICBsZWZ0OiBzdHlsZVZhbHVlKCdib3JkZXItbGVmdC13aWR0aCcpLFxuICAgIHJpZ2h0OiBzdHlsZVZhbHVlKCdib3JkZXItcmlnaHQtd2lkdGgnKSxcbiAgICB0b3A6IHN0eWxlVmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSxcbiAgICBib3R0b206IHN0eWxlVmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKVxuICB9O1xuICB2YXIgY2xpZW50V2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gIHZhciBjbGllbnRIZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICB2YXIgcGFkZGluZ0hvciA9IHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7XG4gIHZhciBwYWRkaW5nVmVyID0gcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcbiAgdmFyIGJvcmRlckhvciA9IGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0O1xuICB2YXIgc2NhbGUgPSByZWN0LndpZHRoIC8gKGNsaWVudFdpZHRoICsgYm9yZGVySG9yKTtcbiAgdmFyIHVuc2NhbGVkVyA9IGNsaWVudFdpZHRoIC0gcGFkZGluZ0hvcjtcbiAgdmFyIHVuc2NhbGVkSCA9IGNsaWVudEhlaWdodCAtIHBhZGRpbmdWZXI7XG4gIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgcGFkZGluZy5sZWZ0ICsgYm9yZGVyLmxlZnQ7XG4gIHZhciB0b3AgPSByZWN0LnRvcCArIHBhZGRpbmcudG9wICsgYm9yZGVyLnRvcDtcbiAgcmV0dXJuIHRoaXMuY29udGFpbmVyQkIgPSBbbGVmdCwgdG9wLCB1bnNjYWxlZFcsIHVuc2NhbGVkSCwgc2NhbGVdO1xufTtcbkJScCRlLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jb250YWluZXJCQiA9IG51bGw7XG59O1xuQlJwJGUuZmluZE5lYXJlc3RFbGVtZW50ID0gZnVuY3Rpb24gKHgsIHksIGludGVyYWN0aXZlRWxlbWVudHNPbmx5LCBpc1RvdWNoKSB7XG4gIHJldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpWzBdO1xufTtcbkJScCRlLmZpbmROZWFyZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICB2YXIgbmVhciA9IFtdOyAvLyAxIG5vZGUgbWF4LCAxIGVkZ2UgbWF4XG4gIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gIHZhciBoYXNDb21wb3VuZHMgPSByLmN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIGVkZ2VUaHJlc2hvbGQgPSAoaXNUb3VjaCA/IDI0IDogOCkgLyB6b29tO1xuICB2YXIgbm9kZVRocmVzaG9sZCA9IChpc1RvdWNoID8gOCA6IDIpIC8gem9vbTtcbiAgdmFyIGxhYmVsVGhyZXNob2xkID0gKGlzVG91Y2ggPyA4IDogMikgLyB6b29tO1xuICB2YXIgbWluU3FEaXN0ID0gSW5maW5pdHk7XG4gIHZhciBuZWFyRWRnZTtcbiAgdmFyIG5lYXJOb2RlO1xuICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50c09ubHkpIHtcbiAgICBlbGVzID0gZWxlcy5pbnRlcmFjdGl2ZTtcbiAgfVxuICBmdW5jdGlvbiBhZGRFbGUoZWxlLCBzcURpc3QpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBpZiAobmVhck5vZGUpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBjYW4ndCByZXBsYWNlIG5vZGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5lYXJOb2RlID0gZWxlO1xuICAgICAgICBuZWFyLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSAmJiAoc3FEaXN0ID09IG51bGwgfHwgc3FEaXN0IDwgbWluU3FEaXN0KSkge1xuICAgICAgaWYgKG5lYXJFZGdlKSB7XG4gICAgICAgIC8vIHRoZW4gcmVwbGFjZSBleGlzdGluZyBlZGdlXG4gICAgICAgIC8vIGNhbiByZXBsYWNlIG9ubHkgaWYgc2FtZSB6LWluZGV4XG4gICAgICAgIGlmIChuZWFyRWRnZS5wc3R5bGUoJ3otY29tcG91bmQtZGVwdGgnKS52YWx1ZSA9PT0gZWxlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlICYmIG5lYXJFZGdlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlID09PSBlbGUucHN0eWxlKCd6LWNvbXBvdW5kLWRlcHRoJykudmFsdWUpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lYXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChuZWFyW2ldLmlzRWRnZSgpKSB7XG4gICAgICAgICAgICAgIG5lYXJbaV0gPSBlbGU7XG4gICAgICAgICAgICAgIG5lYXJFZGdlID0gZWxlO1xuICAgICAgICAgICAgICBtaW5TcURpc3QgPSBzcURpc3QgIT0gbnVsbCA/IHNxRGlzdCA6IG1pblNxRGlzdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZWFyLnB1c2goZWxlKTtcbiAgICAgICAgbmVhckVkZ2UgPSBlbGU7XG4gICAgICAgIG1pblNxRGlzdCA9IHNxRGlzdCAhPSBudWxsID8gc3FEaXN0IDogbWluU3FEaXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjaGVja05vZGUobm9kZSkge1xuICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpICsgMiAqIG5vZGVUaHJlc2hvbGQ7XG4gICAgdmFyIGhlaWdodCA9IG5vZGUub3V0ZXJIZWlnaHQoKSArIDIgKiBub2RlVGhyZXNob2xkO1xuICAgIHZhciBodyA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgIHZhciBwb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gICAgdmFyIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWUgPT09ICdhdXRvJyA/ICdhdXRvJyA6IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgICB2YXIgcnMgPSBub2RlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIGlmIChwb3MueCAtIGh3IDw9IHggJiYgeCA8PSBwb3MueCArIGh3IC8vIGJiIGNoZWNrIHhcbiAgICAmJiBwb3MueSAtIGhoIDw9IHkgJiYgeSA8PSBwb3MueSArIGhoIC8vIGJiIGNoZWNrIHlcbiAgICApIHtcbiAgICAgIHZhciBzaGFwZSA9IHIubm9kZVNoYXBlc1tzZWxmLmdldE5vZGVTaGFwZShub2RlKV07XG4gICAgICBpZiAoc2hhcGUuY2hlY2tQb2ludCh4LCB5LCAwLCB3aWR0aCwgaGVpZ2h0LCBwb3MueCwgcG9zLnksIGNvcm5lclJhZGl1cywgcnMpKSB7XG4gICAgICAgIGFkZEVsZShub2RlLCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNoZWNrRWRnZShlZGdlKSB7XG4gICAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgc3R5bGVXaWR0aCA9IGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIHNjYWxlID0gZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgdmFyIHdpZHRoID0gc3R5bGVXaWR0aCAvIDIgKyBlZGdlVGhyZXNob2xkOyAvLyBtb3JlIGxpa2UgYSBkaXN0YW5jZSByYWRpdXMgZnJvbSBjZW50cmVcbiAgICB2YXIgd2lkdGhTcSA9IHdpZHRoICogd2lkdGg7XG4gICAgdmFyIHdpZHRoMiA9IHdpZHRoICogMjtcbiAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgdmFyIHNxRGlzdDtcbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcgfHwgcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSArIDMgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgaWYgKGluTGluZVZpY2luaXR5KHgsIHksIHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSwgd2lkdGgyKSAmJiB3aWR0aFNxID4gKHNxRGlzdCA9IHNxZGlzdFRvRmluaXRlTGluZSh4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10pKSkge1xuICAgICAgICAgIGFkZEVsZShlZGdlLCBzcURpc3QpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpICsgNSA8IHJzLmFsbHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBpZiAoaW5CZXppZXJWaWNpbml0eSh4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10sIHB0c1tpICsgNF0sIHB0c1tpICsgNV0sIHdpZHRoMikgJiYgd2lkdGhTcSA+IChzcURpc3QgPSBzcWRpc3RUb1F1YWRyYXRpY0Jlemllcih4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10sIHB0c1tpICsgNF0sIHB0c1tpICsgNV0pKSkge1xuICAgICAgICAgIGFkZEVsZShlZGdlLCBzcURpc3QpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgY2xvc2UgdG8gdGhlIGVkZ2UgYnV0IGRpZG4ndCBoaXQgaXQsIG1heWJlIHdlIGhpdCBpdHMgYXJyb3dzXG5cbiAgICB2YXIgc3JjID0gc3JjIHx8IF9wLnNvdXJjZTtcbiAgICB2YXIgdGd0ID0gdGd0IHx8IF9wLnRhcmdldDtcbiAgICB2YXIgYXJTaXplID0gc2VsZi5nZXRBcnJvd1dpZHRoKHN0eWxlV2lkdGgsIHNjYWxlKTtcbiAgICB2YXIgYXJyb3dzID0gW3tcbiAgICAgIG5hbWU6ICdzb3VyY2UnLFxuICAgICAgeDogcnMuYXJyb3dTdGFydFgsXG4gICAgICB5OiBycy5hcnJvd1N0YXJ0WSxcbiAgICAgIGFuZ2xlOiBycy5zcmNBcnJvd0FuZ2xlXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RhcmdldCcsXG4gICAgICB4OiBycy5hcnJvd0VuZFgsXG4gICAgICB5OiBycy5hcnJvd0VuZFksXG4gICAgICBhbmdsZTogcnMudGd0QXJyb3dBbmdsZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaWQtc291cmNlJyxcbiAgICAgIHg6IHJzLm1pZFgsXG4gICAgICB5OiBycy5taWRZLFxuICAgICAgYW5nbGU6IHJzLm1pZHNyY0Fycm93QW5nbGVcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbWlkLXRhcmdldCcsXG4gICAgICB4OiBycy5taWRYLFxuICAgICAgeTogcnMubWlkWSxcbiAgICAgIGFuZ2xlOiBycy5taWR0Z3RBcnJvd0FuZ2xlXG4gICAgfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBhciA9IGFycm93c1tpXTtcbiAgICAgIHZhciBzaGFwZSA9IHIuYXJyb3dTaGFwZXNbZWRnZS5wc3R5bGUoYXIubmFtZSArICctYXJyb3ctc2hhcGUnKS52YWx1ZV07XG4gICAgICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICAgIGlmIChzaGFwZS5yb3VnaENvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICB4OiBhci54LFxuICAgICAgICB5OiBhci55XG4gICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpICYmIHNoYXBlLmNvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICB4OiBhci54LFxuICAgICAgICB5OiBhci55XG4gICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpKSB7XG4gICAgICAgIGFkZEVsZShlZGdlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9yIGNvbXBvdW5kIGdyYXBocywgaGl0dGluZyBlZGdlIG1heSBhY3R1YWxseSB3YW50IGEgY29ubmVjdGVkIG5vZGUgaW5zdGVhZCAoYi9jIGVkZ2UgbWF5IGhhdmUgZ3JlYXRlciB6LWluZGV4IHByZWNlZGVuY2UpXG4gICAgaWYgKGhhc0NvbXBvdW5kcyAmJiBuZWFyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrTm9kZShzcmMpO1xuICAgICAgY2hlY2tOb2RlKHRndCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByZXByb3Aob2JqLCBuYW1lLCBwcmUpIHtcbiAgICByZXR1cm4gZ2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIG5hbWUsIHByZSk7XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tMYWJlbChlbGUsIHByZWZpeCkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgdGggPSBsYWJlbFRocmVzaG9sZDtcbiAgICB2YXIgcHJlZml4RGFzaDtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhEYXNoID0gJyc7XG4gICAgfVxuICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgIHZhciBiYiA9IF9wLmxhYmVsQm91bmRzW3ByZWZpeCB8fCAnbWFpbiddO1xuICAgIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ2xhYmVsJykudmFsdWU7XG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSBlbGUucHN0eWxlKCd0ZXh0LWV2ZW50cycpLnN0clZhbHVlID09PSAneWVzJztcbiAgICBpZiAoIWV2ZW50c0VuYWJsZWQgfHwgIXRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGx4ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWCcsIHByZWZpeCk7XG4gICAgdmFyIGx5ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWScsIHByZWZpeCk7XG4gICAgdmFyIHRoZXRhID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsQW5nbGUnLCBwcmVmaXgpO1xuICAgIHZhciBveCA9IGVsZS5wc3R5bGUocHJlZml4RGFzaCArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZTtcbiAgICB2YXIgb3kgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGx4MSA9IGJiLngxIC0gdGggLSBveDsgLy8gKC1veCwgLW95KSBhcyBiYiBhbHJlYWR5IGluY2x1ZGVzIG1hcmdpblxuICAgIHZhciBseDIgPSBiYi54MiArIHRoIC0gb3g7IC8vIGFuZCByb3RhdGlvbiBpcyBhYm91dCAobHgsIGx5KVxuICAgIHZhciBseTEgPSBiYi55MSAtIHRoIC0gb3k7XG4gICAgdmFyIGx5MiA9IGJiLnkyICsgdGggLSBveTtcbiAgICBpZiAodGhldGEpIHtcbiAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICB2YXIgc2luID0gTWF0aC5zaW4odGhldGEpO1xuICAgICAgdmFyIHJvdGF0ZSA9IGZ1bmN0aW9uIHJvdGF0ZSh4LCB5KSB7XG4gICAgICAgIHggPSB4IC0gbHg7XG4gICAgICAgIHkgPSB5IC0gbHk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeCAqIGNvcyAtIHkgKiBzaW4gKyBseCxcbiAgICAgICAgICB5OiB4ICogc2luICsgeSAqIGNvcyArIGx5XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgdmFyIHB4MXkxID0gcm90YXRlKGx4MSwgbHkxKTtcbiAgICAgIHZhciBweDF5MiA9IHJvdGF0ZShseDEsIGx5Mik7XG4gICAgICB2YXIgcHgyeTEgPSByb3RhdGUobHgyLCBseTEpO1xuICAgICAgdmFyIHB4MnkyID0gcm90YXRlKGx4MiwgbHkyKTtcbiAgICAgIHZhciBwb2ludHMgPSBbXG4gICAgICAvLyB3aXRoIHRoZSBtYXJnaW4gYWRkZWQgYWZ0ZXIgdGhlIHJvdGF0aW9uIGlzIGFwcGxpZWRcbiAgICAgIHB4MXkxLnggKyBveCwgcHgxeTEueSArIG95LCBweDJ5MS54ICsgb3gsIHB4MnkxLnkgKyBveSwgcHgyeTIueCArIG94LCBweDJ5Mi55ICsgb3ksIHB4MXkyLnggKyBveCwgcHgxeTIueSArIG95XTtcbiAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKSkge1xuICAgICAgICBhZGRFbGUoZWxlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIGEgY2hlYXBlciBiYiBjaGVja1xuICAgICAgaWYgKGluQm91bmRpbmdCb3goYmIsIHgsIHkpKSB7XG4gICAgICAgIGFkZEVsZShlbGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgaSA9IGVsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyByZXZlcnNlIG9yZGVyIGZvciBwcmVjZWRlbmNlXG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgY2hlY2tOb2RlKGVsZSkgfHwgY2hlY2tMYWJlbChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGVkZ2VcbiAgICAgIGNoZWNrRWRnZShlbGUpIHx8IGNoZWNrTGFiZWwoZWxlKSB8fCBjaGVja0xhYmVsKGVsZSwgJ3NvdXJjZScpIHx8IGNoZWNrTGFiZWwoZWxlLCAndGFyZ2V0Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWFyO1xufTtcblxuLy8gJ0dpdmUgbWUgZXZlcnl0aGluZyBmcm9tIHRoaXMgYm94J1xuQlJwJGUuZ2V0QWxsSW5Cb3ggPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIGVsZXMgPSB0aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmU7XG4gIHZhciBib3ggPSBbXTtcbiAgdmFyIHgxYyA9IE1hdGgubWluKHgxLCB4Mik7XG4gIHZhciB4MmMgPSBNYXRoLm1heCh4MSwgeDIpO1xuICB2YXIgeTFjID0gTWF0aC5taW4oeTEsIHkyKTtcbiAgdmFyIHkyYyA9IE1hdGgubWF4KHkxLCB5Mik7XG4gIHgxID0geDFjO1xuICB4MiA9IHgyYztcbiAgeTEgPSB5MWM7XG4gIHkyID0geTJjO1xuICB2YXIgYm94QmIgPSBtYWtlQm91bmRpbmdCb3goe1xuICAgIHgxOiB4MSxcbiAgICB5MTogeTEsXG4gICAgeDI6IHgyLFxuICAgIHkyOiB5MlxuICB9KTtcbiAgZm9yICh2YXIgZSA9IDA7IGUgPCBlbGVzLmxlbmd0aDsgZSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbZV07XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgdmFyIG5vZGUgPSBlbGU7XG4gICAgICB2YXIgbm9kZUJiID0gbm9kZS5ib3VuZGluZ0JveCh7XG4gICAgICAgIGluY2x1ZGVOb2RlczogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZUVkZ2VzOiBmYWxzZSxcbiAgICAgICAgaW5jbHVkZUxhYmVsczogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgaWYgKGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYm94QmIsIG5vZGVCYikgJiYgIWJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChub2RlQmIsIGJveEJiKSkge1xuICAgICAgICBib3gucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVkZ2UgPSBlbGU7XG4gICAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgICBpZiAocnMuc3RhcnRYICE9IG51bGwgJiYgcnMuc3RhcnRZICE9IG51bGwgJiYgIWluQm91bmRpbmdCb3goYm94QmIsIHJzLnN0YXJ0WCwgcnMuc3RhcnRZKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChycy5lbmRYICE9IG51bGwgJiYgcnMuZW5kWSAhPSBudWxsICYmICFpbkJvdW5kaW5nQm94KGJveEJiLCBycy5lbmRYLCBycy5lbmRZKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJyB8fCBycy5lZGdlVHlwZSA9PT0gJ3NlZ21lbnRzJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJykge1xuICAgICAgICB2YXIgcHRzID0gX3AucnN0eWxlLmJlemllclB0cyB8fCBfcC5yc3R5bGUubGluZVB0cyB8fCBfcC5yc3R5bGUuaGF5c3RhY2tQdHM7XG4gICAgICAgIHZhciBhbGxJbnNpZGUgPSB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghcG9pbnRJbkJvdW5kaW5nQm94KGJveEJiLCBwdHNbaV0pKSB7XG4gICAgICAgICAgICBhbGxJbnNpZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsSW5zaWRlKSB7XG4gICAgICAgICAgYm94LnB1c2goZWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcpIHtcbiAgICAgICAgYm94LnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBib3g7XG59O1xuXG52YXIgQlJwJGQgPSB7fTtcbkJScCRkLmNhbGN1bGF0ZUFycm93QW5nbGVzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGlzSGF5c3RhY2sgPSBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJztcbiAgdmFyIGlzQmV6aWVyID0gcnMuZWRnZVR5cGUgPT09ICdiZXppZXInO1xuICB2YXIgaXNNdWx0aWJlemllciA9IHJzLmVkZ2VUeXBlID09PSAnbXVsdGliZXppZXInO1xuICB2YXIgaXNTZWdtZW50cyA9IHJzLmVkZ2VUeXBlID09PSAnc2VnbWVudHMnO1xuICB2YXIgaXNDb21wb3VuZCA9IHJzLmVkZ2VUeXBlID09PSAnY29tcG91bmQnO1xuICB2YXIgaXNTZWxmID0gcnMuZWRnZVR5cGUgPT09ICdzZWxmJztcblxuICAvLyBEaXNwbGFjZW1lbnQgZ2l2ZXMgZGlyZWN0aW9uIGZvciBhcnJvd2hlYWQgb3JpZW50YXRpb25cbiAgdmFyIGRpc3BYLCBkaXNwWTtcbiAgdmFyIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBtaWRYLCBtaWRZO1xuICBpZiAoaXNIYXlzdGFjaykge1xuICAgIHN0YXJ0WCA9IHJzLmhheXN0YWNrUHRzWzBdO1xuICAgIHN0YXJ0WSA9IHJzLmhheXN0YWNrUHRzWzFdO1xuICAgIGVuZFggPSBycy5oYXlzdGFja1B0c1syXTtcbiAgICBlbmRZID0gcnMuaGF5c3RhY2tQdHNbM107XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRYID0gcnMuYXJyb3dTdGFydFg7XG4gICAgc3RhcnRZID0gcnMuYXJyb3dTdGFydFk7XG4gICAgZW5kWCA9IHJzLmFycm93RW5kWDtcbiAgICBlbmRZID0gcnMuYXJyb3dFbmRZO1xuICB9XG4gIG1pZFggPSBycy5taWRYO1xuICBtaWRZID0gcnMubWlkWTtcblxuICAvLyBzb3VyY2VcbiAgLy9cblxuICBpZiAoaXNTZWdtZW50cykge1xuICAgIGRpc3BYID0gc3RhcnRYIC0gcnMuc2VncHRzWzBdO1xuICAgIGRpc3BZID0gc3RhcnRZIC0gcnMuc2VncHRzWzFdO1xuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBiWCA9IHFiZXppZXJBdChwdHNbMF0sIHB0c1syXSwgcHRzWzRdLCAwLjEpO1xuICAgIHZhciBiWSA9IHFiZXppZXJBdChwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCAwLjEpO1xuICAgIGRpc3BYID0gc3RhcnRYIC0gYlg7XG4gICAgZGlzcFkgPSBzdGFydFkgLSBiWTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwWCA9IHN0YXJ0WCAtIG1pZFg7XG4gICAgZGlzcFkgPSBzdGFydFkgLSBtaWRZO1xuICB9XG4gIHJzLnNyY0Fycm93QW5nbGUgPSBnZXRBbmdsZUZyb21EaXNwKGRpc3BYLCBkaXNwWSk7XG5cbiAgLy8gbWlkIHRhcmdldFxuICAvL1xuXG4gIHZhciBtaWRYID0gcnMubWlkWDtcbiAgdmFyIG1pZFkgPSBycy5taWRZO1xuICBpZiAoaXNIYXlzdGFjaykge1xuICAgIG1pZFggPSAoc3RhcnRYICsgZW5kWCkgLyAyO1xuICAgIG1pZFkgPSAoc3RhcnRZICsgZW5kWSkgLyAyO1xuICB9XG4gIGRpc3BYID0gZW5kWCAtIHN0YXJ0WDtcbiAgZGlzcFkgPSBlbmRZIC0gc3RhcnRZO1xuICBpZiAoaXNTZWdtZW50cykge1xuICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgaWYgKHB0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgdmFyIGkyID0gcHRzLmxlbmd0aCAvIDI7XG4gICAgICB2YXIgaTEgPSBpMiAtIDI7XG4gICAgICBkaXNwWCA9IHB0c1tpMl0gLSBwdHNbaTFdO1xuICAgICAgZGlzcFkgPSBwdHNbaTIgKyAxXSAtIHB0c1tpMSArIDFdO1xuICAgIH0gZWxzZSBpZiAocnMuaXNSb3VuZCkge1xuICAgICAgZGlzcFggPSBycy5taWRWZWN0b3JbMV07XG4gICAgICBkaXNwWSA9IC1ycy5taWRWZWN0b3JbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpMiA9IHB0cy5sZW5ndGggLyAyIC0gMTtcbiAgICAgIHZhciBpMSA9IGkyIC0gMjtcbiAgICAgIGRpc3BYID0gcHRzW2kyXSAtIHB0c1tpMV07XG4gICAgICBkaXNwWSA9IHB0c1tpMiArIDFdIC0gcHRzW2kxICsgMV07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBjcHRzID0gcnMuY3RybHB0cztcbiAgICB2YXIgYnAweCwgYnAweTtcbiAgICB2YXIgYnAxeCwgYnAxeTtcbiAgICBpZiAoY3B0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgdmFyIHAwID0gcHRzLmxlbmd0aCAvIDIgLSAxOyAvLyBzdGFydHB0XG4gICAgICB2YXIgaWMgPSBwMCArIDI7XG4gICAgICB2YXIgcDEgPSBpYyArIDI7XG4gICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMCk7XG4gICAgICBicDB5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMCk7XG4gICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMDAwMSk7XG4gICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMDAwMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpYyA9IHB0cy5sZW5ndGggLyAyIC0gMTsgLy8gY3RycHRcbiAgICAgIHZhciBwMCA9IGljIC0gMjsgLy8gc3RhcnRwdFxuICAgICAgdmFyIHAxID0gaWMgKyAyOyAvLyBlbmRwdFxuXG4gICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNDk5OSk7XG4gICAgICBicDB5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuNDk5OSk7XG4gICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNSk7XG4gICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuNSk7XG4gICAgfVxuICAgIGRpc3BYID0gYnAxeCAtIGJwMHg7XG4gICAgZGlzcFkgPSBicDF5IC0gYnAweTtcbiAgfVxuICBycy5taWR0Z3RBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuICBycy5taWREaXNwWCA9IGRpc3BYO1xuICBycy5taWREaXNwWSA9IGRpc3BZO1xuXG4gIC8vIG1pZCBzb3VyY2VcbiAgLy9cblxuICBkaXNwWCAqPSAtMTtcbiAgZGlzcFkgKj0gLTE7XG4gIGlmIChpc1NlZ21lbnRzKSB7XG4gICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICBpZiAocHRzLmxlbmd0aCAvIDIgJSAyID09PSAwKSA7IGVsc2UgaWYgKCFycy5pc1JvdW5kKSB7XG4gICAgICB2YXIgaTIgPSBwdHMubGVuZ3RoIC8gMiAtIDE7XG4gICAgICB2YXIgaTMgPSBpMiArIDI7XG4gICAgICBkaXNwWCA9IC0ocHRzW2kzXSAtIHB0c1tpMl0pO1xuICAgICAgZGlzcFkgPSAtKHB0c1tpMyArIDFdIC0gcHRzW2kyICsgMV0pO1xuICAgIH1cbiAgfVxuICBycy5taWRzcmNBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuXG4gIC8vIHRhcmdldFxuICAvL1xuXG4gIGlmIChpc1NlZ21lbnRzKSB7XG4gICAgZGlzcFggPSBlbmRYIC0gcnMuc2VncHRzW3JzLnNlZ3B0cy5sZW5ndGggLSAyXTtcbiAgICBkaXNwWSA9IGVuZFkgLSBycy5zZWdwdHNbcnMuc2VncHRzLmxlbmd0aCAtIDFdO1xuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBsID0gcHRzLmxlbmd0aDtcbiAgICB2YXIgYlggPSBxYmV6aWVyQXQocHRzW2wgLSA2XSwgcHRzW2wgLSA0XSwgcHRzW2wgLSAyXSwgMC45KTtcbiAgICB2YXIgYlkgPSBxYmV6aWVyQXQocHRzW2wgLSA1XSwgcHRzW2wgLSAzXSwgcHRzW2wgLSAxXSwgMC45KTtcbiAgICBkaXNwWCA9IGVuZFggLSBiWDtcbiAgICBkaXNwWSA9IGVuZFkgLSBiWTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwWCA9IGVuZFggLSBtaWRYO1xuICAgIGRpc3BZID0gZW5kWSAtIG1pZFk7XG4gIH1cbiAgcnMudGd0QXJyb3dBbmdsZSA9IGdldEFuZ2xlRnJvbURpc3AoZGlzcFgsIGRpc3BZKTtcbn07XG5CUnAkZC5nZXRBcnJvd1dpZHRoID0gQlJwJGQuZ2V0QXJyb3dIZWlnaHQgPSBmdW5jdGlvbiAoZWRnZVdpZHRoLCBzY2FsZSkge1xuICB2YXIgY2FjaGUgPSB0aGlzLmFycm93V2lkdGhDYWNoZSA9IHRoaXMuYXJyb3dXaWR0aENhY2hlIHx8IHt9O1xuICB2YXIgY2FjaGVkVmFsID0gY2FjaGVbZWRnZVdpZHRoICsgJywgJyArIHNjYWxlXTtcbiAgaWYgKGNhY2hlZFZhbCkge1xuICAgIHJldHVybiBjYWNoZWRWYWw7XG4gIH1cbiAgY2FjaGVkVmFsID0gTWF0aC5tYXgoTWF0aC5wb3coZWRnZVdpZHRoICogMTMuMzcsIDAuOSksIDI5KSAqIHNjYWxlO1xuICBjYWNoZVtlZGdlV2lkdGggKyAnLCAnICsgc2NhbGVdID0gY2FjaGVkVmFsO1xuICByZXR1cm4gY2FjaGVkVmFsO1xufTtcblxuLyoqXG4gKiBFeHBsYWluZWQgYnkgQmxpbmRtYW42NyBhdCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQ4NTY5MjUvMTEwMjg4MjhcbiAqL1xuXG4vLyBEZWNsYXJlIHJldXNlZCB2YXJpYWJsZSB0byBhdm9pZCByZWFsbG9jYXRpbmcgdmFyaWFibGVzIGV2ZXJ5IHRpbWUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxudmFyIHgsXG4gIHksXG4gIHYxID0ge30sXG4gIHYyID0ge30sXG4gIHNpbkEsXG4gIHNpbkE5MCxcbiAgcmFkRGlyZWN0aW9uLFxuICBkcmF3RGlyZWN0aW9uLFxuICBhbmdsZSxcbiAgaGFsZkFuZ2xlLFxuICBjUmFkaXVzLFxuICBsZW5PdXQsXG4gIHJhZGl1cyxcbiAgbGltaXQ7XG52YXIgc3RhcnRYLCBzdGFydFksIHN0b3BYLCBzdG9wWTtcbnZhciBsYXN0UG9pbnQ7XG5cbi8vIGNvbnZlcnQgMiBwb2ludHMgaW50byB2ZWN0b3IgZm9ybSwgcG9sYXIgZm9ybSwgYW5kIG5vcm1hbGlzZWRcbnZhciBhc1ZlYyA9IGZ1bmN0aW9uIGFzVmVjKHAsIHBwLCB2KSB7XG4gIHYueCA9IHBwLnggLSBwLng7XG4gIHYueSA9IHBwLnkgLSBwLnk7XG4gIHYubGVuID0gTWF0aC5zcXJ0KHYueCAqIHYueCArIHYueSAqIHYueSk7XG4gIHYubnggPSB2LnggLyB2LmxlbjtcbiAgdi5ueSA9IHYueSAvIHYubGVuO1xuICB2LmFuZyA9IE1hdGguYXRhbjIodi5ueSwgdi5ueCk7XG59O1xudmFyIGludmVydFZlYyA9IGZ1bmN0aW9uIGludmVydFZlYyhvcmlnaW5hbFYsIGludmVydGVkVikge1xuICBpbnZlcnRlZFYueCA9IG9yaWdpbmFsVi54ICogLTE7XG4gIGludmVydGVkVi55ID0gb3JpZ2luYWxWLnkgKiAtMTtcbiAgaW52ZXJ0ZWRWLm54ID0gb3JpZ2luYWxWLm54ICogLTE7XG4gIGludmVydGVkVi5ueSA9IG9yaWdpbmFsVi5ueSAqIC0xO1xuICBpbnZlcnRlZFYuYW5nID0gb3JpZ2luYWxWLmFuZyA+IDAgPyAtKE1hdGguUEkgLSBvcmlnaW5hbFYuYW5nKSA6IE1hdGguUEkgKyBvcmlnaW5hbFYuYW5nO1xufTtcbnZhciBjYWxjQ29ybmVyQXJjID0gZnVuY3Rpb24gY2FsY0Nvcm5lckFyYyhwcmV2aW91c1BvaW50LCBjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgcmFkaXVzTWF4LCBpc0FyY1JhZGl1cykge1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBhcnQgMVxuICBwcmV2aW91c1BvaW50ICE9PSBsYXN0UG9pbnQgPyBhc1ZlYyhjdXJyZW50UG9pbnQsIHByZXZpb3VzUG9pbnQsIHYxKSA6IGludmVydFZlYyh2MiwgdjEpOyAvLyBBdm9pZCByZWNhbGN1bGF0aW5nIHZlYyBpZiBpdCBpcyB0aGUgaW52ZXJ0IG9mIHRoZSBsYXN0IG9uZSBjYWxjdWxhdGVkXG4gIGFzVmVjKGN1cnJlbnRQb2ludCwgbmV4dFBvaW50LCB2Mik7XG4gIHNpbkEgPSB2MS5ueCAqIHYyLm55IC0gdjEubnkgKiB2Mi5ueDtcbiAgc2luQTkwID0gdjEubnggKiB2Mi5ueCAtIHYxLm55ICogLXYyLm55O1xuICBhbmdsZSA9IE1hdGguYXNpbihNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgc2luQSkpKTtcbiAgaWYgKE1hdGguYWJzKGFuZ2xlKSA8IDFlLTYpIHtcbiAgICB4ID0gY3VycmVudFBvaW50Lng7XG4gICAgeSA9IGN1cnJlbnRQb2ludC55O1xuICAgIGNSYWRpdXMgPSByYWRpdXMgPSAwO1xuICAgIHJldHVybjtcbiAgfVxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHJhZERpcmVjdGlvbiA9IDE7XG4gIGRyYXdEaXJlY3Rpb24gPSBmYWxzZTtcbiAgaWYgKHNpbkE5MCA8IDApIHtcbiAgICBpZiAoYW5nbGUgPCAwKSB7XG4gICAgICBhbmdsZSA9IE1hdGguUEkgKyBhbmdsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5nbGUgPSBNYXRoLlBJIC0gYW5nbGU7XG4gICAgICByYWREaXJlY3Rpb24gPSAtMTtcbiAgICAgIGRyYXdEaXJlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYW5nbGUgPiAwKSB7XG4gICAgICByYWREaXJlY3Rpb24gPSAtMTtcbiAgICAgIGRyYXdEaXJlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoY3VycmVudFBvaW50LnJhZGl1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmFkaXVzID0gY3VycmVudFBvaW50LnJhZGl1cztcbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSByYWRpdXNNYXg7XG4gIH1cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQYXJ0IDJcbiAgaGFsZkFuZ2xlID0gYW5nbGUgLyAyO1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbGltaXQgPSBNYXRoLm1pbih2MS5sZW4gLyAyLCB2Mi5sZW4gLyAyKTtcbiAgaWYgKGlzQXJjUmFkaXVzKSB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFBhcnQgM1xuICAgIGxlbk91dCA9IE1hdGguYWJzKE1hdGguY29zKGhhbGZBbmdsZSkgKiByYWRpdXMgLyBNYXRoLnNpbihoYWxmQW5nbGUpKTtcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTcGVjaWFsIHBhcnQgQVxuICAgIGlmIChsZW5PdXQgPiBsaW1pdCkge1xuICAgICAgbGVuT3V0ID0gbGltaXQ7XG4gICAgICBjUmFkaXVzID0gTWF0aC5hYnMobGVuT3V0ICogTWF0aC5zaW4oaGFsZkFuZ2xlKSAvIE1hdGguY29zKGhhbGZBbmdsZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjUmFkaXVzID0gcmFkaXVzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5PdXQgPSBNYXRoLm1pbihsaW1pdCwgcmFkaXVzKTtcbiAgICBjUmFkaXVzID0gTWF0aC5hYnMobGVuT3V0ICogTWF0aC5zaW4oaGFsZkFuZ2xlKSAvIE1hdGguY29zKGhhbGZBbmdsZSkpO1xuICB9XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBhcnQgNFxuICBzdG9wWCA9IGN1cnJlbnRQb2ludC54ICsgdjIubnggKiBsZW5PdXQ7XG4gIHN0b3BZID0gY3VycmVudFBvaW50LnkgKyB2Mi5ueSAqIGxlbk91dDtcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQYXJ0IDVcbiAgeCA9IHN0b3BYIC0gdjIubnkgKiBjUmFkaXVzICogcmFkRGlyZWN0aW9uO1xuICB5ID0gc3RvcFkgKyB2Mi5ueCAqIGNSYWRpdXMgKiByYWREaXJlY3Rpb247XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQWRkaXRpb25hbCBQYXJ0IDogY2FsY3VsYXRlIHN0YXJ0IHBvaW50IEVcbiAgc3RhcnRYID0gY3VycmVudFBvaW50LnggKyB2MS5ueCAqIGxlbk91dDtcbiAgc3RhcnRZID0gY3VycmVudFBvaW50LnkgKyB2MS5ueSAqIGxlbk91dDtcblxuICAvLyBTYXZlIGxhc3QgcG9pbnQgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyB2ZWN0b3Igd2hlbiBub3QgbmVlZGVkXG4gIGxhc3RQb2ludCA9IGN1cnJlbnRQb2ludDtcbn07XG5cbi8qKlxuICogRHJhdyBjb3JuZXIgcHJvdmlkZWQgYnkge0BsaW5rIGdldFJvdW5kQ29ybmVyfVxuICpcbiAqIEBwYXJhbSBjdHggOkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICogQHBhcmFtIHJvdW5kQ29ybmVyIHt7Y3g6bnVtYmVyLCBjeTpudW1iZXIsIHJhZGl1czpudW1iZXIsIGVuZEFuZ2xlOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgY291bnRlckNsb2Nrd2lzZTogYm9vbGVhbn19XG4gKi9cbmZ1bmN0aW9uIGRyYXdQcmVwYXJlZFJvdW5kQ29ybmVyKGN0eCwgcm91bmRDb3JuZXIpIHtcbiAgaWYgKHJvdW5kQ29ybmVyLnJhZGl1cyA9PT0gMCkgY3R4LmxpbmVUbyhyb3VuZENvcm5lci5jeCwgcm91bmRDb3JuZXIuY3kpO2Vsc2UgY3R4LmFyYyhyb3VuZENvcm5lci5jeCwgcm91bmRDb3JuZXIuY3ksIHJvdW5kQ29ybmVyLnJhZGl1cywgcm91bmRDb3JuZXIuc3RhcnRBbmdsZSwgcm91bmRDb3JuZXIuZW5kQW5nbGUsIHJvdW5kQ29ybmVyLmNvdW50ZXJDbG9ja3dpc2UpO1xufVxuXG4vKipcbiAqIEdldCByb3VuZCBjb3JuZXIgZnJvbSBhIHBvaW50IGFuZCBpdHMgcHJldmlvdXMgYW5kIG5leHQgbmVpZ2hib3VycyBpbiBhIHBhdGhcbiAqXG4gKiBAcGFyYW0gcHJldmlvdXNQb2ludCB7e3g6IG51bWJlciwgeTpudW1iZXIsIHJhZGl1czogbnVtYmVyP319XG4gKiBAcGFyYW0gY3VycmVudFBvaW50IHt7eDogbnVtYmVyLCB5Om51bWJlciwgcmFkaXVzOiBudW1iZXI/fX1cbiAqIEBwYXJhbSBuZXh0UG9pbnQge3t4OiBudW1iZXIsIHk6bnVtYmVyLCByYWRpdXM6IG51bWJlcj99fVxuICogQHBhcmFtIHJhZGl1c01heCA6bnVtYmVyXG4gKiBAcGFyYW0gaXNBcmNSYWRpdXMgOmJvb2xlYW5cbiAqIEByZXR1cm4ge3tcbiAqIGN4Om51bWJlciwgY3k6bnVtYmVyLCByYWRpdXM6bnVtYmVyLFxuICogc3RhcnRYOm51bWJlciwgc3RhcnRZOm51bWJlcixcbiAqIHN0b3BYOm51bWJlciwgc3RvcFk6IG51bWJlcixcbiAqIGVuZEFuZ2xlOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgY291bnRlckNsb2Nrd2lzZTogYm9vbGVhblxuICogfX1cbiAqL1xuZnVuY3Rpb24gZ2V0Um91bmRDb3JuZXIocHJldmlvdXNQb2ludCwgY3VycmVudFBvaW50LCBuZXh0UG9pbnQsIHJhZGl1c01heCkge1xuICB2YXIgaXNBcmNSYWRpdXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIGlmIChyYWRpdXNNYXggPT09IDAgfHwgY3VycmVudFBvaW50LnJhZGl1cyA9PT0gMCkgcmV0dXJuIHtcbiAgICBjeDogY3VycmVudFBvaW50LngsXG4gICAgY3k6IGN1cnJlbnRQb2ludC55LFxuICAgIHJhZGl1czogMCxcbiAgICBzdGFydFg6IGN1cnJlbnRQb2ludC54LFxuICAgIHN0YXJ0WTogY3VycmVudFBvaW50LnksXG4gICAgc3RvcFg6IGN1cnJlbnRQb2ludC54LFxuICAgIHN0b3BZOiBjdXJyZW50UG9pbnQueSxcbiAgICBzdGFydEFuZ2xlOiB1bmRlZmluZWQsXG4gICAgZW5kQW5nbGU6IHVuZGVmaW5lZCxcbiAgICBjb3VudGVyQ2xvY2t3aXNlOiB1bmRlZmluZWRcbiAgfTtcbiAgY2FsY0Nvcm5lckFyYyhwcmV2aW91c1BvaW50LCBjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgcmFkaXVzTWF4LCBpc0FyY1JhZGl1cyk7XG4gIHJldHVybiB7XG4gICAgY3g6IHgsXG4gICAgY3k6IHksXG4gICAgcmFkaXVzOiBjUmFkaXVzLFxuICAgIHN0YXJ0WDogc3RhcnRYLFxuICAgIHN0YXJ0WTogc3RhcnRZLFxuICAgIHN0b3BYOiBzdG9wWCxcbiAgICBzdG9wWTogc3RvcFksXG4gICAgc3RhcnRBbmdsZTogdjEuYW5nICsgTWF0aC5QSSAvIDIgKiByYWREaXJlY3Rpb24sXG4gICAgZW5kQW5nbGU6IHYyLmFuZyAtIE1hdGguUEkgLyAyICogcmFkRGlyZWN0aW9uLFxuICAgIGNvdW50ZXJDbG9ja3dpc2U6IGRyYXdEaXJlY3Rpb25cbiAgfTtcbn1cblxudmFyIEJScCRjID0ge307XG5CUnAkYy5maW5kTWlkcHRQdHNFdGMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8pIHtcbiAgdmFyIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyxcbiAgICBpbnRlcnNlY3Rpb25QdHMgPSBwYWlySW5mby5pbnRlcnNlY3Rpb25QdHMsXG4gICAgdmVjdG9yTm9ybUludmVyc2UgPSBwYWlySW5mby52ZWN0b3JOb3JtSW52ZXJzZTtcbiAgdmFyIG1pZHB0UHRzO1xuXG4gIC8vIG4uYi4gYXNzdW1lcyBhbGwgZWRnZXMgaW4gYmV6aWVyIGJ1bmRsZSBoYXZlIHNhbWUgZW5kcG9pbnRzIHNwZWNpZmllZFxuICB2YXIgc3JjTWFuRW5kcHQgPSBlZGdlLnBzdHlsZSgnc291cmNlLWVuZHBvaW50Jyk7XG4gIHZhciB0Z3RNYW5FbmRwdCA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtZW5kcG9pbnQnKTtcbiAgdmFyIGhhdmVNYW51YWxFbmRQdHMgPSBzcmNNYW5FbmRwdC51bml0cyAhPSBudWxsICYmIHRndE1hbkVuZHB0LnVuaXRzICE9IG51bGw7XG4gIHZhciByZWNhbGNWZWN0b3JOb3JtSW52ZXJzZSA9IGZ1bmN0aW9uIHJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlKHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdmFyIGR5ID0geTIgLSB5MTtcbiAgICB2YXIgZHggPSB4MiAtIHgxO1xuICAgIHZhciBsID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLWR5IC8gbCxcbiAgICAgIHk6IGR4IC8gbFxuICAgIH07XG4gIH07XG4gIHZhciBlZGdlRGlzdGFuY2VzID0gZWRnZS5wc3R5bGUoJ2VkZ2UtZGlzdGFuY2VzJykudmFsdWU7XG4gIHN3aXRjaCAoZWRnZURpc3RhbmNlcykge1xuICAgIGNhc2UgJ25vZGUtcG9zaXRpb24nOlxuICAgICAgbWlkcHRQdHMgPSBwb3NQdHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbnRlcnNlY3Rpb24nOlxuICAgICAgbWlkcHRQdHMgPSBpbnRlcnNlY3Rpb25QdHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmRwb2ludHMnOlxuICAgICAge1xuICAgICAgICBpZiAoaGF2ZU1hbnVhbEVuZFB0cykge1xuICAgICAgICAgIHZhciBfdGhpcyRtYW51YWxFbmRwdFRvUHggPSB0aGlzLm1hbnVhbEVuZHB0VG9QeChlZGdlLnNvdXJjZSgpWzBdLCBzcmNNYW5FbmRwdCksXG4gICAgICAgICAgICBfdGhpcyRtYW51YWxFbmRwdFRvUHgyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkbWFudWFsRW5kcHRUb1B4LCAyKSxcbiAgICAgICAgICAgIHgxID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4MlswXSxcbiAgICAgICAgICAgIHkxID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4MlsxXTtcbiAgICAgICAgICB2YXIgX3RoaXMkbWFudWFsRW5kcHRUb1B4MyA9IHRoaXMubWFudWFsRW5kcHRUb1B4KGVkZ2UudGFyZ2V0KClbMF0sIHRndE1hbkVuZHB0KSxcbiAgICAgICAgICAgIF90aGlzJG1hbnVhbEVuZHB0VG9QeDQgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRtYW51YWxFbmRwdFRvUHgzLCAyKSxcbiAgICAgICAgICAgIHgyID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4NFswXSxcbiAgICAgICAgICAgIHkyID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4NFsxXTtcbiAgICAgICAgICB2YXIgZW5kUHRzID0ge1xuICAgICAgICAgICAgeDE6IHgxLFxuICAgICAgICAgICAgeTE6IHkxLFxuICAgICAgICAgICAgeDI6IHgyLFxuICAgICAgICAgICAgeTI6IHkyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2ZWN0b3JOb3JtSW52ZXJzZSA9IHJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlKHgxLCB5MSwgeDIsIHkyKTtcbiAgICAgICAgICBtaWRwdFB0cyA9IGVuZFB0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuKFwiRWRnZSBcIi5jb25jYXQoZWRnZS5pZCgpLCBcIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLlwiKSk7XG4gICAgICAgICAgbWlkcHRQdHMgPSBpbnRlcnNlY3Rpb25QdHM7IC8vIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtaWRwdFB0czogbWlkcHRQdHMsXG4gICAgdmVjdG9yTm9ybUludmVyc2U6IHZlY3Rvck5vcm1JbnZlcnNlXG4gIH07XG59O1xuQlJwJGMuZmluZEhheXN0YWNrUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2VzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgIHZhciBfcCA9IGVkZ2UuX3ByaXZhdGU7XG4gICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgaWYgKCFycy5oYXlzdGFjaykge1xuICAgICAgdmFyIGFuZ2xlID0gTWF0aC5yYW5kb20oKSAqIDIgKiBNYXRoLlBJO1xuICAgICAgcnMuc291cmNlID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgIHk6IE1hdGguc2luKGFuZ2xlKVxuICAgICAgfTtcbiAgICAgIGFuZ2xlID0gTWF0aC5yYW5kb20oKSAqIDIgKiBNYXRoLlBJO1xuICAgICAgcnMudGFyZ2V0ID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgIHk6IE1hdGguc2luKGFuZ2xlKVxuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICB2YXIgdGd0ID0gX3AudGFyZ2V0O1xuICAgIHZhciBzcmNQb3MgPSBzcmMucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0UG9zID0gdGd0LnBvc2l0aW9uKCk7XG4gICAgdmFyIHNyY1cgPSBzcmMud2lkdGgoKTtcbiAgICB2YXIgdGd0VyA9IHRndC53aWR0aCgpO1xuICAgIHZhciBzcmNIID0gc3JjLmhlaWdodCgpO1xuICAgIHZhciB0Z3RIID0gdGd0LmhlaWdodCgpO1xuICAgIHZhciByYWRpdXMgPSBlZGdlLnBzdHlsZSgnaGF5c3RhY2stcmFkaXVzJykudmFsdWU7XG4gICAgdmFyIGhhbGZSYWRpdXMgPSByYWRpdXMgLyAyOyAvLyBiL2MgaGF2ZSB0byBoYWxmIHdpZHRoL2hlaWdodFxuXG4gICAgcnMuaGF5c3RhY2tQdHMgPSBycy5hbGxwdHMgPSBbcnMuc291cmNlLnggKiBzcmNXICogaGFsZlJhZGl1cyArIHNyY1Bvcy54LCBycy5zb3VyY2UueSAqIHNyY0ggKiBoYWxmUmFkaXVzICsgc3JjUG9zLnksIHJzLnRhcmdldC54ICogdGd0VyAqIGhhbGZSYWRpdXMgKyB0Z3RQb3MueCwgcnMudGFyZ2V0LnkgKiB0Z3RIICogaGFsZlJhZGl1cyArIHRndFBvcy55XTtcbiAgICBycy5taWRYID0gKHJzLmFsbHB0c1swXSArIHJzLmFsbHB0c1syXSkgLyAyO1xuICAgIHJzLm1pZFkgPSAocnMuYWxscHRzWzFdICsgcnMuYWxscHRzWzNdKSAvIDI7XG5cbiAgICAvLyBhbHdheXMgb3ZlcnJpZGUgYXMgaGF5c3RhY2sgaW4gY2FzZSBzZXQgdG8gZGlmZmVyZW50IHR5cGUgcHJldmlvdXNseVxuICAgIHJzLmVkZ2VUeXBlID0gJ2hheXN0YWNrJztcbiAgICBycy5oYXlzdGFjayA9IHRydWU7XG4gICAgdGhpcy5zdG9yZUVkZ2VQcm9qZWN0aW9ucyhlZGdlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKGVkZ2UpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhlZGdlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKGVkZ2UpO1xuICB9XG59O1xuQlJwJGMuZmluZFNlZ21lbnRzUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvKSB7XG4gIC8vIFNlZ21lbnRzIChtdWx0aXBsZSBzdHJhaWdodCBsaW5lcylcblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgc2VnbWVudFdzID0gZWRnZS5wc3R5bGUoJ3NlZ21lbnQtd2VpZ2h0cycpO1xuICB2YXIgc2VnbWVudERzID0gZWRnZS5wc3R5bGUoJ3NlZ21lbnQtZGlzdGFuY2VzJyk7XG4gIHZhciBzZWdtZW50UnMgPSBlZGdlLnBzdHlsZSgnc2VnbWVudC1yYWRpaScpO1xuICB2YXIgc2VnbWVudFRzID0gZWRnZS5wc3R5bGUoJ3JhZGl1cy10eXBlJyk7XG4gIHZhciBzZWdtZW50c04gPSBNYXRoLm1pbihzZWdtZW50V3MucGZWYWx1ZS5sZW5ndGgsIHNlZ21lbnREcy5wZlZhbHVlLmxlbmd0aCk7XG4gIHZhciBsYXN0UmFkaXVzID0gc2VnbWVudFJzLnBmVmFsdWVbc2VnbWVudFJzLnBmVmFsdWUubGVuZ3RoIC0gMV07XG4gIHZhciBsYXN0UmFkaXVzVHlwZSA9IHNlZ21lbnRUcy5wZlZhbHVlW3NlZ21lbnRUcy5wZlZhbHVlLmxlbmd0aCAtIDFdO1xuICBycy5lZGdlVHlwZSA9ICdzZWdtZW50cyc7XG4gIHJzLnNlZ3B0cyA9IFtdO1xuICBycy5yYWRpaSA9IFtdO1xuICBycy5pc0FyY1JhZGl1cyA9IFtdO1xuICBmb3IgKHZhciBzID0gMDsgcyA8IHNlZ21lbnRzTjsgcysrKSB7XG4gICAgdmFyIHcgPSBzZWdtZW50V3MucGZWYWx1ZVtzXTtcbiAgICB2YXIgZCA9IHNlZ21lbnREcy5wZlZhbHVlW3NdO1xuICAgIHZhciB3MSA9IDEgLSB3O1xuICAgIHZhciB3MiA9IHc7XG4gICAgdmFyIF90aGlzJGZpbmRNaWRwdFB0c0V0YyA9IHRoaXMuZmluZE1pZHB0UHRzRXRjKGVkZ2UsIHBhaXJJbmZvKSxcbiAgICAgIG1pZHB0UHRzID0gX3RoaXMkZmluZE1pZHB0UHRzRXRjLm1pZHB0UHRzLFxuICAgICAgdmVjdG9yTm9ybUludmVyc2UgPSBfdGhpcyRmaW5kTWlkcHRQdHNFdGMudmVjdG9yTm9ybUludmVyc2U7XG4gICAgdmFyIGFkanVzdGVkTWlkcHQgPSB7XG4gICAgICB4OiBtaWRwdFB0cy54MSAqIHcxICsgbWlkcHRQdHMueDIgKiB3MixcbiAgICAgIHk6IG1pZHB0UHRzLnkxICogdzEgKyBtaWRwdFB0cy55MiAqIHcyXG4gICAgfTtcbiAgICBycy5zZWdwdHMucHVzaChhZGp1c3RlZE1pZHB0LnggKyB2ZWN0b3JOb3JtSW52ZXJzZS54ICogZCwgYWRqdXN0ZWRNaWRwdC55ICsgdmVjdG9yTm9ybUludmVyc2UueSAqIGQpO1xuICAgIHJzLnJhZGlpLnB1c2goc2VnbWVudFJzLnBmVmFsdWVbc10gIT09IHVuZGVmaW5lZCA/IHNlZ21lbnRScy5wZlZhbHVlW3NdIDogbGFzdFJhZGl1cyk7XG4gICAgcnMuaXNBcmNSYWRpdXMucHVzaCgoc2VnbWVudFRzLnBmVmFsdWVbc10gIT09IHVuZGVmaW5lZCA/IHNlZ21lbnRUcy5wZlZhbHVlW3NdIDogbGFzdFJhZGl1c1R5cGUpID09PSAnYXJjLXJhZGl1cycpO1xuICB9XG59O1xuQlJwJGMuZmluZExvb3BQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCkge1xuICAvLyBTZWxmLWVkZ2VcblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgZGlyQ291bnRzID0gcGFpckluZm8uZGlyQ291bnRzLFxuICAgIHNyY1BvcyA9IHBhaXJJbmZvLnNyY1BvcztcbiAgdmFyIGN0cmxwdERpc3RzID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2VzJyk7XG4gIHZhciBjdHJscHREaXN0ID0gY3RybHB0RGlzdHMgPyBjdHJscHREaXN0cy5wZlZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgbG9vcERpciA9IGVkZ2UucHN0eWxlKCdsb29wLWRpcmVjdGlvbicpLnBmVmFsdWU7XG4gIHZhciBsb29wU3dwID0gZWRnZS5wc3R5bGUoJ2xvb3Atc3dlZXAnKS5wZlZhbHVlO1xuICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICBycy5lZGdlVHlwZSA9ICdzZWxmJztcbiAgdmFyIGogPSBpO1xuICB2YXIgbG9vcERpc3QgPSBzdGVwU2l6ZTtcbiAgaWYgKGVkZ2VJc1VuYnVuZGxlZCkge1xuICAgIGogPSAwO1xuICAgIGxvb3BEaXN0ID0gY3RybHB0RGlzdDtcbiAgfVxuICB2YXIgbG9vcEFuZ2xlID0gbG9vcERpciAtIE1hdGguUEkgLyAyO1xuICB2YXIgb3V0QW5nbGUgPSBsb29wQW5nbGUgLSBsb29wU3dwIC8gMjtcbiAgdmFyIGluQW5nbGUgPSBsb29wQW5nbGUgKyBsb29wU3dwIC8gMjtcblxuICAvLyBpbmNyZWFzZSBieSBzdGVwIHNpemUgZm9yIG92ZXJsYXBwaW5nIGxvb3BzLCBrZXllZCBvbiBkaXJlY3Rpb24gYW5kIHN3ZWVwIHZhbHVlc1xuICB2YXIgZGMgPSBTdHJpbmcobG9vcERpciArICdfJyArIGxvb3BTd3ApO1xuICBqID0gZGlyQ291bnRzW2RjXSA9PT0gdW5kZWZpbmVkID8gZGlyQ291bnRzW2RjXSA9IDAgOiArK2RpckNvdW50c1tkY107XG4gIHJzLmN0cmxwdHMgPSBbc3JjUG9zLnggKyBNYXRoLmNvcyhvdXRBbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueSArIE1hdGguc2luKG91dEFuZ2xlKSAqIDEuNCAqIGxvb3BEaXN0ICogKGogLyAzICsgMSksIHNyY1Bvcy54ICsgTWF0aC5jb3MoaW5BbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueSArIE1hdGguc2luKGluQW5nbGUpICogMS40ICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKV07XG59O1xuQlJwJGMuZmluZENvbXBvdW5kTG9vcFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbywgaSwgZWRnZUlzVW5idW5kbGVkKSB7XG4gIC8vIENvbXBvdW5kIGVkZ2VcblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBycy5lZGdlVHlwZSA9ICdjb21wb3VuZCc7XG4gIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MsXG4gICAgdGd0UG9zID0gcGFpckluZm8udGd0UG9zLFxuICAgIHNyY1cgPSBwYWlySW5mby5zcmNXLFxuICAgIHNyY0ggPSBwYWlySW5mby5zcmNILFxuICAgIHRndFcgPSBwYWlySW5mby50Z3RXLFxuICAgIHRndEggPSBwYWlySW5mby50Z3RIO1xuICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICB2YXIgY3RybHB0RGlzdHMgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnKTtcbiAgdmFyIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciBqID0gaTtcbiAgdmFyIGxvb3BEaXN0ID0gc3RlcFNpemU7XG4gIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICBqID0gMDtcbiAgICBsb29wRGlzdCA9IGN0cmxwdERpc3Q7XG4gIH1cbiAgdmFyIGxvb3BXID0gNTA7XG4gIHZhciBsb29wYVBvcyA9IHtcbiAgICB4OiBzcmNQb3MueCAtIHNyY1cgLyAyLFxuICAgIHk6IHNyY1Bvcy55IC0gc3JjSCAvIDJcbiAgfTtcbiAgdmFyIGxvb3BiUG9zID0ge1xuICAgIHg6IHRndFBvcy54IC0gdGd0VyAvIDIsXG4gICAgeTogdGd0UG9zLnkgLSB0Z3RIIC8gMlxuICB9O1xuICB2YXIgbG9vcFBvcyA9IHtcbiAgICB4OiBNYXRoLm1pbihsb29wYVBvcy54LCBsb29wYlBvcy54KSxcbiAgICB5OiBNYXRoLm1pbihsb29wYVBvcy55LCBsb29wYlBvcy55KVxuICB9O1xuXG4gIC8vIGF2b2lkcyBjYXNlcyB3aXRoIGltcG9zc2libGUgYmV6aWVyc1xuICB2YXIgbWluQ29tcG91bmRTdHJldGNoID0gMC41O1xuICB2YXIgY29tcG91bmRTdHJldGNoQSA9IE1hdGgubWF4KG1pbkNvbXBvdW5kU3RyZXRjaCwgTWF0aC5sb2coc3JjVyAqIDAuMDEpKTtcbiAgdmFyIGNvbXBvdW5kU3RyZXRjaEIgPSBNYXRoLm1heChtaW5Db21wb3VuZFN0cmV0Y2gsIE1hdGgubG9nKHRndFcgKiAwLjAxKSk7XG4gIHJzLmN0cmxwdHMgPSBbbG9vcFBvcy54LCBsb29wUG9zLnkgLSAoMSArIE1hdGgucG93KGxvb3BXLCAxLjEyKSAvIDEwMCkgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpICogY29tcG91bmRTdHJldGNoQSwgbG9vcFBvcy54IC0gKDEgKyBNYXRoLnBvdyhsb29wVywgMS4xMikgLyAxMDApICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKSAqIGNvbXBvdW5kU3RyZXRjaEIsIGxvb3BQb3MueV07XG59O1xuQlJwJGMuZmluZFN0cmFpZ2h0RWRnZVBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIC8vIFN0cmFpZ2h0IGVkZ2Ugd2l0aGluIGJ1bmRsZVxuXG4gIGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGUgPSAnc3RyYWlnaHQnO1xufTtcbkJScCRjLmZpbmRCZXppZXJQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCwgZWRnZUlzU3dhcHBlZCkge1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgc3RlcFNpemUgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1zdGVwLXNpemUnKS5wZlZhbHVlO1xuICB2YXIgY3RybHB0RGlzdHMgPSBlZGdlLnBzdHlsZSgnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnKTtcbiAgdmFyIGN0cmxwdFdzID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtd2VpZ2h0cycpO1xuICB2YXIgYmV6aWVyTiA9IGN0cmxwdERpc3RzICYmIGN0cmxwdFdzID8gTWF0aC5taW4oY3RybHB0RGlzdHMudmFsdWUubGVuZ3RoLCBjdHJscHRXcy52YWx1ZS5sZW5ndGgpIDogMTtcbiAgdmFyIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciBjdHJscHRXZWlnaHQgPSBjdHJscHRXcy52YWx1ZVswXTtcblxuICAvLyAoTXVsdGkpYmV6aWVyXG5cbiAgdmFyIG11bHRpID0gZWRnZUlzVW5idW5kbGVkO1xuICBycy5lZGdlVHlwZSA9IG11bHRpID8gJ211bHRpYmV6aWVyJyA6ICdiZXppZXInO1xuICBycy5jdHJscHRzID0gW107XG4gIGZvciAodmFyIGIgPSAwOyBiIDwgYmV6aWVyTjsgYisrKSB7XG4gICAgdmFyIG5vcm1jdHJscHREaXN0ID0gKDAuNSAtIHBhaXJJbmZvLmVsZXMubGVuZ3RoIC8gMiArIGkpICogc3RlcFNpemUgKiAoZWRnZUlzU3dhcHBlZCA/IC0xIDogMSk7XG4gICAgdmFyIG1hbmN0cmxwdERpc3QgPSB2b2lkIDA7XG4gICAgdmFyIHNpZ24gPSBzaWdudW0obm9ybWN0cmxwdERpc3QpO1xuICAgIGlmIChtdWx0aSkge1xuICAgICAgY3RybHB0RGlzdCA9IGN0cmxwdERpc3RzID8gY3RybHB0RGlzdHMucGZWYWx1ZVtiXSA6IHN0ZXBTaXplOyAvLyBmYWxsIGJhY2sgb24gc3RlcCBzaXplXG4gICAgICBjdHJscHRXZWlnaHQgPSBjdHJscHRXcy52YWx1ZVtiXTtcbiAgICB9XG4gICAgaWYgKGVkZ2VJc1VuYnVuZGxlZCkge1xuICAgICAgLy8gbXVsdGkgb3Igc2luZ2xlIHVuYnVuZGxlZFxuICAgICAgbWFuY3RybHB0RGlzdCA9IGN0cmxwdERpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmN0cmxwdERpc3QgPSBjdHJscHREaXN0ICE9PSB1bmRlZmluZWQgPyBzaWduICogY3RybHB0RGlzdCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGRpc3RhbmNlRnJvbU1pZHBvaW50ID0gbWFuY3RybHB0RGlzdCAhPT0gdW5kZWZpbmVkID8gbWFuY3RybHB0RGlzdCA6IG5vcm1jdHJscHREaXN0O1xuICAgIHZhciB3MSA9IDEgLSBjdHJscHRXZWlnaHQ7XG4gICAgdmFyIHcyID0gY3RybHB0V2VpZ2h0O1xuICAgIHZhciBfdGhpcyRmaW5kTWlkcHRQdHNFdGMyID0gdGhpcy5maW5kTWlkcHRQdHNFdGMoZWRnZSwgcGFpckluZm8pLFxuICAgICAgbWlkcHRQdHMgPSBfdGhpcyRmaW5kTWlkcHRQdHNFdGMyLm1pZHB0UHRzLFxuICAgICAgdmVjdG9yTm9ybUludmVyc2UgPSBfdGhpcyRmaW5kTWlkcHRQdHNFdGMyLnZlY3Rvck5vcm1JbnZlcnNlO1xuICAgIHZhciBhZGp1c3RlZE1pZHB0ID0ge1xuICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXG4gICAgICB5OiBtaWRwdFB0cy55MSAqIHcxICsgbWlkcHRQdHMueTIgKiB3MlxuICAgIH07XG4gICAgcnMuY3RybHB0cy5wdXNoKGFkanVzdGVkTWlkcHQueCArIHZlY3Rvck5vcm1JbnZlcnNlLnggKiBkaXN0YW5jZUZyb21NaWRwb2ludCwgYWRqdXN0ZWRNaWRwdC55ICsgdmVjdG9yTm9ybUludmVyc2UueSAqIGRpc3RhbmNlRnJvbU1pZHBvaW50KTtcbiAgfVxufTtcbkJScCRjLmZpbmRUYXhpUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvKSB7XG4gIC8vIFRheGljYWIgZ2VvbWV0cnkgd2l0aCB0d28gdHVybnMgbWF4aW11bVxuXG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHJzLmVkZ2VUeXBlID0gJ3NlZ21lbnRzJztcbiAgdmFyIFZFUlRJQ0FMID0gJ3ZlcnRpY2FsJztcbiAgdmFyIEhPUklaT05UQUwgPSAnaG9yaXpvbnRhbCc7XG4gIHZhciBMRUZUV0FSRCA9ICdsZWZ0d2FyZCc7XG4gIHZhciBSSUdIVFdBUkQgPSAncmlnaHR3YXJkJztcbiAgdmFyIERPV05XQVJEID0gJ2Rvd253YXJkJztcbiAgdmFyIFVQV0FSRCA9ICd1cHdhcmQnO1xuICB2YXIgQVVUTyA9ICdhdXRvJztcbiAgdmFyIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyxcbiAgICBzcmNXID0gcGFpckluZm8uc3JjVyxcbiAgICBzcmNIID0gcGFpckluZm8uc3JjSCxcbiAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICB0Z3RIID0gcGFpckluZm8udGd0SDtcbiAgdmFyIGVkZ2VEaXN0YW5jZXMgPSBlZGdlLnBzdHlsZSgnZWRnZS1kaXN0YW5jZXMnKS52YWx1ZTtcbiAgdmFyIGRJbmNsdWRlc05vZGVCb2R5ID0gZWRnZURpc3RhbmNlcyAhPT0gJ25vZGUtcG9zaXRpb24nO1xuICB2YXIgdGF4aURpciA9IGVkZ2UucHN0eWxlKCd0YXhpLWRpcmVjdGlvbicpLnZhbHVlO1xuICB2YXIgcmF3VGF4aURpciA9IHRheGlEaXI7IC8vIHVucHJvY2Vzc2VkIHZhbHVlXG4gIHZhciB0YXhpVHVybiA9IGVkZ2UucHN0eWxlKCd0YXhpLXR1cm4nKTtcbiAgdmFyIHR1cm5Jc1BlcmNlbnQgPSB0YXhpVHVybi51bml0cyA9PT0gJyUnO1xuICB2YXIgdGF4aVR1cm5QZlZhbCA9IHRheGlUdXJuLnBmVmFsdWU7XG4gIHZhciB0dXJuSXNOZWdhdGl2ZSA9IHRheGlUdXJuUGZWYWwgPCAwOyAvLyBpLmUuIGZyb20gdGFyZ2V0IHNpZGVcbiAgdmFyIG1pbkQgPSBlZGdlLnBzdHlsZSgndGF4aS10dXJuLW1pbi1kaXN0YW5jZScpLnBmVmFsdWU7XG4gIHZhciBkdyA9IGRJbmNsdWRlc05vZGVCb2R5ID8gKHNyY1cgKyB0Z3RXKSAvIDIgOiAwO1xuICB2YXIgZGggPSBkSW5jbHVkZXNOb2RlQm9keSA/IChzcmNIICsgdGd0SCkgLyAyIDogMDtcbiAgdmFyIHBkeCA9IHBvc1B0cy54MiAtIHBvc1B0cy54MTtcbiAgdmFyIHBkeSA9IHBvc1B0cy55MiAtIHBvc1B0cy55MTtcblxuICAvLyB0YWtlIGF3YXkgdGhlIGVmZmVjdGl2ZSB3L2ggZnJvbSB0aGUgbWFnbml0dWRlIG9mIHRoZSBkZWx0YSB2YWx1ZVxuICB2YXIgc3ViRFdIID0gZnVuY3Rpb24gc3ViRFdIKGR4eSwgZHdoKSB7XG4gICAgaWYgKGR4eSA+IDApIHtcbiAgICAgIHJldHVybiBNYXRoLm1heChkeHkgLSBkd2gsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oZHh5ICsgZHdoLCAwKTtcbiAgICB9XG4gIH07XG4gIHZhciBkeCA9IHN1YkRXSChwZHgsIGR3KTtcbiAgdmFyIGR5ID0gc3ViRFdIKHBkeSwgZGgpO1xuICB2YXIgaXNFeHBsaWNpdERpciA9IGZhbHNlO1xuICBpZiAocmF3VGF4aURpciA9PT0gQVVUTykge1xuICAgIHRheGlEaXIgPSBNYXRoLmFicyhkeCkgPiBNYXRoLmFicyhkeSkgPyBIT1JJWk9OVEFMIDogVkVSVElDQUw7XG4gIH0gZWxzZSBpZiAocmF3VGF4aURpciA9PT0gVVBXQVJEIHx8IHJhd1RheGlEaXIgPT09IERPV05XQVJEKSB7XG4gICAgdGF4aURpciA9IFZFUlRJQ0FMO1xuICAgIGlzRXhwbGljaXREaXIgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHJhd1RheGlEaXIgPT09IExFRlRXQVJEIHx8IHJhd1RheGlEaXIgPT09IFJJR0hUV0FSRCkge1xuICAgIHRheGlEaXIgPSBIT1JJWk9OVEFMO1xuICAgIGlzRXhwbGljaXREaXIgPSB0cnVlO1xuICB9XG4gIHZhciBpc1ZlcnQgPSB0YXhpRGlyID09PSBWRVJUSUNBTDtcbiAgdmFyIGwgPSBpc1ZlcnQgPyBkeSA6IGR4O1xuICB2YXIgcGwgPSBpc1ZlcnQgPyBwZHkgOiBwZHg7XG4gIHZhciBzZ25MID0gc2lnbnVtKHBsKTtcbiAgdmFyIGZvcmNlZERpciA9IGZhbHNlO1xuICBpZiAoIShpc0V4cGxpY2l0RGlyICYmICh0dXJuSXNQZXJjZW50IHx8IHR1cm5Jc05lZ2F0aXZlKSkgLy8gZm9yY2luZyBpbiB0aGlzIGNhc2Ugd291bGQgY2F1c2Ugd2VpcmQgZ3Jvd2luZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uXG4gICYmIChyYXdUYXhpRGlyID09PSBET1dOV0FSRCAmJiBwbCA8IDAgfHwgcmF3VGF4aURpciA9PT0gVVBXQVJEICYmIHBsID4gMCB8fCByYXdUYXhpRGlyID09PSBMRUZUV0FSRCAmJiBwbCA+IDAgfHwgcmF3VGF4aURpciA9PT0gUklHSFRXQVJEICYmIHBsIDwgMCkpIHtcbiAgICBzZ25MICo9IC0xO1xuICAgIGwgPSBzZ25MICogTWF0aC5hYnMobCk7XG4gICAgZm9yY2VkRGlyID0gdHJ1ZTtcbiAgfVxuICB2YXIgZDtcbiAgaWYgKHR1cm5Jc1BlcmNlbnQpIHtcbiAgICB2YXIgcCA9IHRheGlUdXJuUGZWYWwgPCAwID8gMSArIHRheGlUdXJuUGZWYWwgOiB0YXhpVHVyblBmVmFsO1xuICAgIGQgPSBwICogbDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgayA9IHRheGlUdXJuUGZWYWwgPCAwID8gbCA6IDA7XG4gICAgZCA9IGsgKyB0YXhpVHVyblBmVmFsICogc2duTDtcbiAgfVxuICB2YXIgZ2V0SXNUb29DbG9zZSA9IGZ1bmN0aW9uIGdldElzVG9vQ2xvc2UoZCkge1xuICAgIHJldHVybiBNYXRoLmFicyhkKSA8IG1pbkQgfHwgTWF0aC5hYnMoZCkgPj0gTWF0aC5hYnMobCk7XG4gIH07XG4gIHZhciBpc1Rvb0Nsb3NlU3JjID0gZ2V0SXNUb29DbG9zZShkKTtcbiAgdmFyIGlzVG9vQ2xvc2VUZ3QgPSBnZXRJc1Rvb0Nsb3NlKE1hdGguYWJzKGwpIC0gTWF0aC5hYnMoZCkpO1xuICB2YXIgaXNUb29DbG9zZSA9IGlzVG9vQ2xvc2VTcmMgfHwgaXNUb29DbG9zZVRndDtcbiAgaWYgKGlzVG9vQ2xvc2UgJiYgIWZvcmNlZERpcikge1xuICAgIC8vIG5vbi1pZGVhbCByb3V0aW5nXG4gICAgaWYgKGlzVmVydCkge1xuICAgICAgLy8gdmVydGljYWwgZmFsbGJhY2tzXG4gICAgICB2YXIgbFNoYXBlSW5zaWRlU3JjID0gTWF0aC5hYnMocGwpIDw9IHNyY0ggLyAyO1xuICAgICAgdmFyIGxTaGFwZUluc2lkZVRndCA9IE1hdGguYWJzKHBkeCkgPD0gdGd0VyAvIDI7XG4gICAgICBpZiAobFNoYXBlSW5zaWRlU3JjKSB7XG4gICAgICAgIC8vIGhvcml6b250YWwgWi1zaGFwZSAoZGlyZWN0aW9uIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciB4ID0gKHBvc1B0cy54MSArIHBvc1B0cy54MikgLyAyO1xuICAgICAgICB2YXIgeTEgPSBwb3NQdHMueTEsXG4gICAgICAgICAgeTIgPSBwb3NQdHMueTI7XG4gICAgICAgIHJzLnNlZ3B0cyA9IFt4LCB5MSwgeCwgeTJdO1xuICAgICAgfSBlbHNlIGlmIChsU2hhcGVJbnNpZGVUZ3QpIHtcbiAgICAgICAgLy8gdmVydGljYWwgWi1zaGFwZSAoZGlzdGFuY2Ugbm90IHJlc3BlY3RlZClcbiAgICAgICAgdmFyIHkgPSAocG9zUHRzLnkxICsgcG9zUHRzLnkyKSAvIDI7XG4gICAgICAgIHZhciB4MSA9IHBvc1B0cy54MSxcbiAgICAgICAgICB4MiA9IHBvc1B0cy54MjtcbiAgICAgICAgcnMuc2VncHRzID0gW3gxLCB5LCB4MiwgeV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMLXNoYXBlIGZhbGxiYWNrICh0dXJuIGRpc3RhbmNlIG5vdCByZXNwZWN0ZWQsIGJ1dCB3b3JrcyB3ZWxsIHdpdGggdHJlZSBzaWJsaW5ncylcbiAgICAgICAgcnMuc2VncHRzID0gW3Bvc1B0cy54MSwgcG9zUHRzLnkyXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9yaXpvbnRhbCBmYWxsYmFja3NcbiAgICAgIHZhciBfbFNoYXBlSW5zaWRlU3JjID0gTWF0aC5hYnMocGwpIDw9IHNyY1cgLyAyO1xuICAgICAgdmFyIF9sU2hhcGVJbnNpZGVUZ3QgPSBNYXRoLmFicyhwZHkpIDw9IHRndEggLyAyO1xuICAgICAgaWYgKF9sU2hhcGVJbnNpZGVTcmMpIHtcbiAgICAgICAgLy8gdmVydGljYWwgWi1zaGFwZSAoZGlyZWN0aW9uIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciBfeSA9IChwb3NQdHMueTEgKyBwb3NQdHMueTIpIC8gMjtcbiAgICAgICAgdmFyIF94ID0gcG9zUHRzLngxLFxuICAgICAgICAgIF94MiA9IHBvc1B0cy54MjtcbiAgICAgICAgcnMuc2VncHRzID0gW194LCBfeSwgX3gyLCBfeV07XG4gICAgICB9IGVsc2UgaWYgKF9sU2hhcGVJbnNpZGVUZ3QpIHtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCBaLXNoYXBlICh0dXJuIGRpc3RhbmNlIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciBfeDMgPSAocG9zUHRzLngxICsgcG9zUHRzLngyKSAvIDI7XG4gICAgICAgIHZhciBfeTIgPSBwb3NQdHMueTEsXG4gICAgICAgICAgX3kzID0gcG9zUHRzLnkyO1xuICAgICAgICBycy5zZWdwdHMgPSBbX3gzLCBfeTIsIF94MywgX3kzXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEwtc2hhcGUgKHR1cm4gZGlzdGFuY2Ugbm90IHJlc3BlY3RlZCwgYnV0IHdvcmtzIHdlbGwgZm9yIHRyZWUgc2libGluZ3MpXG4gICAgICAgIHJzLnNlZ3B0cyA9IFtwb3NQdHMueDIsIHBvc1B0cy55MV07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlkZWFsIHJvdXRpbmdcbiAgICBpZiAoaXNWZXJ0KSB7XG4gICAgICB2YXIgX3k0ID0gcG9zUHRzLnkxICsgZCArIChkSW5jbHVkZXNOb2RlQm9keSA/IHNyY0ggLyAyICogc2duTCA6IDApO1xuICAgICAgdmFyIF94NCA9IHBvc1B0cy54MSxcbiAgICAgICAgX3g1ID0gcG9zUHRzLngyO1xuICAgICAgcnMuc2VncHRzID0gW194NCwgX3k0LCBfeDUsIF95NF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvcml6b250YWxcbiAgICAgIHZhciBfeDYgPSBwb3NQdHMueDEgKyBkICsgKGRJbmNsdWRlc05vZGVCb2R5ID8gc3JjVyAvIDIgKiBzZ25MIDogMCk7XG4gICAgICB2YXIgX3k1ID0gcG9zUHRzLnkxLFxuICAgICAgICBfeTYgPSBwb3NQdHMueTI7XG4gICAgICBycy5zZWdwdHMgPSBbX3g2LCBfeTUsIF94NiwgX3k2XTtcbiAgICB9XG4gIH1cbiAgaWYgKHJzLmlzUm91bmQpIHtcbiAgICB2YXIgcmFkaXVzID0gZWRnZS5wc3R5bGUoJ3RheGktcmFkaXVzJykudmFsdWU7XG4gICAgdmFyIGlzQXJjUmFkaXVzID0gZWRnZS5wc3R5bGUoJ3JhZGl1cy10eXBlJykudmFsdWVbMF0gPT09ICdhcmMtcmFkaXVzJztcbiAgICBycy5yYWRpaSA9IG5ldyBBcnJheShycy5zZWdwdHMubGVuZ3RoIC8gMikuZmlsbChyYWRpdXMpO1xuICAgIHJzLmlzQXJjUmFkaXVzID0gbmV3IEFycmF5KHJzLnNlZ3B0cy5sZW5ndGggLyAyKS5maWxsKGlzQXJjUmFkaXVzKTtcbiAgfVxufTtcbkJScCRjLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8pIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcblxuICAvLyBjYW4gb25seSBjb3JyZWN0IGJlemllcnMgZm9yIG5vdy4uLlxuICBpZiAocnMuZWRnZVR5cGUgPT09ICdiZXppZXInKSB7XG4gICAgdmFyIHNyY1BvcyA9IHBhaXJJbmZvLnNyY1BvcyxcbiAgICAgIHRndFBvcyA9IHBhaXJJbmZvLnRndFBvcyxcbiAgICAgIHNyY1cgPSBwYWlySW5mby5zcmNXLFxuICAgICAgc3JjSCA9IHBhaXJJbmZvLnNyY0gsXG4gICAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICAgIHRndEggPSBwYWlySW5mby50Z3RILFxuICAgICAgc3JjU2hhcGUgPSBwYWlySW5mby5zcmNTaGFwZSxcbiAgICAgIHRndFNoYXBlID0gcGFpckluZm8udGd0U2hhcGUsXG4gICAgICBzcmNDb3JuZXJSYWRpdXMgPSBwYWlySW5mby5zcmNDb3JuZXJSYWRpdXMsXG4gICAgICB0Z3RDb3JuZXJSYWRpdXMgPSBwYWlySW5mby50Z3RDb3JuZXJSYWRpdXMsXG4gICAgICBzcmNScyA9IHBhaXJJbmZvLnNyY1JzLFxuICAgICAgdGd0UnMgPSBwYWlySW5mby50Z3RScztcbiAgICB2YXIgYmFkU3RhcnQgPSAhbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKTtcbiAgICB2YXIgYmFkQVN0YXJ0ID0gIW51bWJlciQxKHJzLmFycm93U3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuYXJyb3dTdGFydFkpO1xuICAgIHZhciBiYWRFbmQgPSAhbnVtYmVyJDEocnMuZW5kWCkgfHwgIW51bWJlciQxKHJzLmVuZFkpO1xuICAgIHZhciBiYWRBRW5kID0gIW51bWJlciQxKHJzLmFycm93RW5kWCkgfHwgIW51bWJlciQxKHJzLmFycm93RW5kWSk7XG4gICAgdmFyIG1pbkNwQURpc3RGYWN0b3IgPSAzO1xuICAgIHZhciBhcnJvd1cgPSB0aGlzLmdldEFycm93V2lkdGgoZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSwgZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWUpICogdGhpcy5hcnJvd1NoYXBlV2lkdGg7XG4gICAgdmFyIG1pbkNwQURpc3QgPSBtaW5DcEFEaXN0RmFjdG9yICogYXJyb3dXO1xuICAgIHZhciBzdGFydEFDcERpc3QgPSBkaXN0KHtcbiAgICAgIHg6IHJzLmN0cmxwdHNbMF0sXG4gICAgICB5OiBycy5jdHJscHRzWzFdXG4gICAgfSwge1xuICAgICAgeDogcnMuc3RhcnRYLFxuICAgICAgeTogcnMuc3RhcnRZXG4gICAgfSk7XG4gICAgdmFyIGNsb3NlU3RhcnRBQ3AgPSBzdGFydEFDcERpc3QgPCBtaW5DcEFEaXN0O1xuICAgIHZhciBlbmRBQ3BEaXN0ID0gZGlzdCh7XG4gICAgICB4OiBycy5jdHJscHRzWzBdLFxuICAgICAgeTogcnMuY3RybHB0c1sxXVxuICAgIH0sIHtcbiAgICAgIHg6IHJzLmVuZFgsXG4gICAgICB5OiBycy5lbmRZXG4gICAgfSk7XG4gICAgdmFyIGNsb3NlRW5kQUNwID0gZW5kQUNwRGlzdCA8IG1pbkNwQURpc3Q7XG4gICAgdmFyIG92ZXJsYXBwaW5nID0gZmFsc2U7XG4gICAgaWYgKGJhZFN0YXJ0IHx8IGJhZEFTdGFydCB8fCBjbG9zZVN0YXJ0QUNwKSB7XG4gICAgICBvdmVybGFwcGluZyA9IHRydWU7XG5cbiAgICAgIC8vIHByb2plY3QgY29udHJvbCBwb2ludCBhbG9uZyBsaW5lIGZyb20gc3JjIGNlbnRyZSB0byBvdXRzaWRlIHRoZSBzcmMgc2hhcGVcbiAgICAgIC8vIChvdGhlcndpc2UgaW50ZXJzZWN0aW9uIHdpbGwgeWllbGQgbm90aGluZylcbiAgICAgIHZhciBjcEQgPSB7XG4gICAgICAgIC8vIGRlbHRhXG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gLSBzcmNQb3MueCxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSAtIHNyY1Bvcy55XG4gICAgICB9O1xuICAgICAgdmFyIGNwTCA9IE1hdGguc3FydChjcEQueCAqIGNwRC54ICsgY3BELnkgKiBjcEQueSk7IC8vIGxlbmd0aCBvZiBsaW5lXG4gICAgICB2YXIgY3BNID0ge1xuICAgICAgICAvLyBub3JtYWxpc2VkIGRlbHRhXG4gICAgICAgIHg6IGNwRC54IC8gY3BMLFxuICAgICAgICB5OiBjcEQueSAvIGNwTFxuICAgICAgfTtcbiAgICAgIHZhciByYWRpdXMgPSBNYXRoLm1heChzcmNXLCBzcmNIKTtcbiAgICAgIHZhciBjcFByb2ogPSB7XG4gICAgICAgIC8vICoyIHJhZGl1cyBndWFyYW50ZWVzIG91dHNpZGUgc2hhcGVcbiAgICAgICAgeDogcnMuY3RybHB0c1swXSArIGNwTS54ICogMiAqIHJhZGl1cyxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSArIGNwTS55ICogMiAqIHJhZGl1c1xuICAgICAgfTtcbiAgICAgIHZhciBzcmNDdHJsUHRJbnRuID0gc3JjU2hhcGUuaW50ZXJzZWN0TGluZShzcmNQb3MueCwgc3JjUG9zLnksIHNyY1csIHNyY0gsIGNwUHJvai54LCBjcFByb2oueSwgMCwgc3JjQ29ybmVyUmFkaXVzLCBzcmNScyk7XG4gICAgICBpZiAoY2xvc2VTdGFydEFDcCkge1xuICAgICAgICBycy5jdHJscHRzWzBdID0gcnMuY3RybHB0c1swXSArIGNwTS54ICogKG1pbkNwQURpc3QgLSBzdGFydEFDcERpc3QpO1xuICAgICAgICBycy5jdHJscHRzWzFdID0gcnMuY3RybHB0c1sxXSArIGNwTS55ICogKG1pbkNwQURpc3QgLSBzdGFydEFDcERpc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnMuY3RybHB0c1swXSA9IHNyY0N0cmxQdEludG5bMF0gKyBjcE0ueCAqIG1pbkNwQURpc3Q7XG4gICAgICAgIHJzLmN0cmxwdHNbMV0gPSBzcmNDdHJsUHRJbnRuWzFdICsgY3BNLnkgKiBtaW5DcEFEaXN0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYmFkRW5kIHx8IGJhZEFFbmQgfHwgY2xvc2VFbmRBQ3ApIHtcbiAgICAgIG92ZXJsYXBwaW5nID0gdHJ1ZTtcblxuICAgICAgLy8gcHJvamVjdCBjb250cm9sIHBvaW50IGFsb25nIGxpbmUgZnJvbSB0Z3QgY2VudHJlIHRvIG91dHNpZGUgdGhlIHRndCBzaGFwZVxuICAgICAgLy8gKG90aGVyd2lzZSBpbnRlcnNlY3Rpb24gd2lsbCB5aWVsZCBub3RoaW5nKVxuICAgICAgdmFyIF9jcEQgPSB7XG4gICAgICAgIC8vIGRlbHRhXG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gLSB0Z3RQb3MueCxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSAtIHRndFBvcy55XG4gICAgICB9O1xuICAgICAgdmFyIF9jcEwgPSBNYXRoLnNxcnQoX2NwRC54ICogX2NwRC54ICsgX2NwRC55ICogX2NwRC55KTsgLy8gbGVuZ3RoIG9mIGxpbmVcbiAgICAgIHZhciBfY3BNID0ge1xuICAgICAgICAvLyBub3JtYWxpc2VkIGRlbHRhXG4gICAgICAgIHg6IF9jcEQueCAvIF9jcEwsXG4gICAgICAgIHk6IF9jcEQueSAvIF9jcExcbiAgICAgIH07XG4gICAgICB2YXIgX3JhZGl1cyA9IE1hdGgubWF4KHNyY1csIHNyY0gpO1xuICAgICAgdmFyIF9jcFByb2ogPSB7XG4gICAgICAgIC8vICoyIHJhZGl1cyBndWFyYW50ZWVzIG91dHNpZGUgc2hhcGVcbiAgICAgICAgeDogcnMuY3RybHB0c1swXSArIF9jcE0ueCAqIDIgKiBfcmFkaXVzLFxuICAgICAgICB5OiBycy5jdHJscHRzWzFdICsgX2NwTS55ICogMiAqIF9yYWRpdXNcbiAgICAgIH07XG4gICAgICB2YXIgdGd0Q3RybFB0SW50biA9IHRndFNoYXBlLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0Z3RXLCB0Z3RILCBfY3BQcm9qLngsIF9jcFByb2oueSwgMCwgdGd0Q29ybmVyUmFkaXVzLCB0Z3RScyk7XG4gICAgICBpZiAoY2xvc2VFbmRBQ3ApIHtcbiAgICAgICAgcnMuY3RybHB0c1swXSA9IHJzLmN0cmxwdHNbMF0gKyBfY3BNLnggKiAobWluQ3BBRGlzdCAtIGVuZEFDcERpc3QpO1xuICAgICAgICBycy5jdHJscHRzWzFdID0gcnMuY3RybHB0c1sxXSArIF9jcE0ueSAqIChtaW5DcEFEaXN0IC0gZW5kQUNwRGlzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBycy5jdHJscHRzWzBdID0gdGd0Q3RybFB0SW50blswXSArIF9jcE0ueCAqIG1pbkNwQURpc3Q7XG4gICAgICAgIHJzLmN0cmxwdHNbMV0gPSB0Z3RDdHJsUHRJbnRuWzFdICsgX2NwTS55ICogbWluQ3BBRGlzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJsYXBwaW5nKSB7XG4gICAgICAvLyByZWNhbGMgZW5kcHRzXG4gICAgICB0aGlzLmZpbmRFbmRwb2ludHMoZWRnZSk7XG4gICAgfVxuICB9XG59O1xuQlJwJGMuc3RvcmVBbGxwdHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAocnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdiZXppZXInIHx8IHJzLmVkZ2VUeXBlID09PSAnc2VsZicgfHwgcnMuZWRnZVR5cGUgPT09ICdjb21wb3VuZCcpIHtcbiAgICBycy5hbGxwdHMgPSBbXTtcbiAgICBycy5hbGxwdHMucHVzaChycy5zdGFydFgsIHJzLnN0YXJ0WSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgKyAxIDwgcnMuY3RybHB0cy5sZW5ndGg7IGIgKz0gMikge1xuICAgICAgLy8gY3RybCBwdCBpdHNlbGZcbiAgICAgIHJzLmFsbHB0cy5wdXNoKHJzLmN0cmxwdHNbYl0sIHJzLmN0cmxwdHNbYiArIDFdKTtcblxuICAgICAgLy8gdGhlIG1pZHB0IGJldHdlZW4gY3RybHB0cyBhcyBpbnRlcm1lZGlhdGUgZGVzdGluYXRpb24gcHRzXG4gICAgICBpZiAoYiArIDMgPCBycy5jdHJscHRzLmxlbmd0aCkge1xuICAgICAgICBycy5hbGxwdHMucHVzaCgocnMuY3RybHB0c1tiXSArIHJzLmN0cmxwdHNbYiArIDJdKSAvIDIsIChycy5jdHJscHRzW2IgKyAxXSArIHJzLmN0cmxwdHNbYiArIDNdKSAvIDIpO1xuICAgICAgfVxuICAgIH1cbiAgICBycy5hbGxwdHMucHVzaChycy5lbmRYLCBycy5lbmRZKTtcbiAgICB2YXIgbSwgbXQ7XG4gICAgaWYgKHJzLmN0cmxwdHMubGVuZ3RoIC8gMiAlIDIgPT09IDApIHtcbiAgICAgIG0gPSBycy5hbGxwdHMubGVuZ3RoIC8gMiAtIDE7XG4gICAgICBycy5taWRYID0gcnMuYWxscHRzW21dO1xuICAgICAgcnMubWlkWSA9IHJzLmFsbHB0c1ttICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBycy5hbGxwdHMubGVuZ3RoIC8gMiAtIDM7XG4gICAgICBtdCA9IDAuNTtcbiAgICAgIHJzLm1pZFggPSBxYmV6aWVyQXQocnMuYWxscHRzW21dLCBycy5hbGxwdHNbbSArIDJdLCBycy5hbGxwdHNbbSArIDRdLCBtdCk7XG4gICAgICBycy5taWRZID0gcWJlemllckF0KHJzLmFsbHB0c1ttICsgMV0sIHJzLmFsbHB0c1ttICsgM10sIHJzLmFsbHB0c1ttICsgNV0sIG10KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcpIHtcbiAgICAvLyBuZWVkIHRvIGNhbGMgdGhlc2UgYWZ0ZXIgZW5kcHRzXG4gICAgcnMuYWxscHRzID0gW3JzLnN0YXJ0WCwgcnMuc3RhcnRZLCBycy5lbmRYLCBycy5lbmRZXTtcblxuICAgIC8vIGRlZmF1bHQgbWlkcHQgZm9yIGxhYmVscyBldGNcbiAgICBycy5taWRYID0gKHJzLnN0YXJ0WCArIHJzLmVuZFggKyBycy5hcnJvd1N0YXJ0WCArIHJzLmFycm93RW5kWCkgLyA0O1xuICAgIHJzLm1pZFkgPSAocnMuc3RhcnRZICsgcnMuZW5kWSArIHJzLmFycm93U3RhcnRZICsgcnMuYXJyb3dFbmRZKSAvIDQ7XG4gIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycpIHtcbiAgICBycy5hbGxwdHMgPSBbXTtcbiAgICBycy5hbGxwdHMucHVzaChycy5zdGFydFgsIHJzLnN0YXJ0WSk7XG4gICAgcnMuYWxscHRzLnB1c2guYXBwbHkocnMuYWxscHRzLCBycy5zZWdwdHMpO1xuICAgIHJzLmFsbHB0cy5wdXNoKHJzLmVuZFgsIHJzLmVuZFkpO1xuICAgIGlmIChycy5pc1JvdW5kKSB7XG4gICAgICBycy5yb3VuZENvcm5lcnMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAyOyBpICsgMyA8IHJzLmFsbHB0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgcmFkaXVzID0gcnMucmFkaWlbaSAvIDIgLSAxXTtcbiAgICAgICAgdmFyIGlzQXJjUmFkaXVzID0gcnMuaXNBcmNSYWRpdXNbaSAvIDIgLSAxXTtcbiAgICAgICAgcnMucm91bmRDb3JuZXJzLnB1c2goZ2V0Um91bmRDb3JuZXIoe1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpIC0gMl0sXG4gICAgICAgICAgeTogcnMuYWxscHRzW2kgLSAxXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcnMuYWxscHRzW2ldLFxuICAgICAgICAgIHk6IHJzLmFsbHB0c1tpICsgMV0sXG4gICAgICAgICAgcmFkaXVzOiByYWRpdXNcbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpICsgMl0sXG4gICAgICAgICAgeTogcnMuYWxscHRzW2kgKyAzXVxuICAgICAgICB9LCByYWRpdXMsIGlzQXJjUmFkaXVzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChycy5zZWdwdHMubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgICAgdmFyIGkyID0gcnMuc2VncHRzLmxlbmd0aCAvIDI7XG4gICAgICB2YXIgaTEgPSBpMiAtIDI7XG4gICAgICBycy5taWRYID0gKHJzLnNlZ3B0c1tpMV0gKyBycy5zZWdwdHNbaTJdKSAvIDI7XG4gICAgICBycy5taWRZID0gKHJzLnNlZ3B0c1tpMSArIDFdICsgcnMuc2VncHRzW2kyICsgMV0pIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9pID0gcnMuc2VncHRzLmxlbmd0aCAvIDIgLSAxO1xuICAgICAgaWYgKCFycy5pc1JvdW5kKSB7XG4gICAgICAgIHJzLm1pZFggPSBycy5zZWdwdHNbX2ldO1xuICAgICAgICBycy5taWRZID0gcnMuc2VncHRzW19pICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcG9pbnQgPSB7XG4gICAgICAgICAgeDogcnMuc2VncHRzW19pXSxcbiAgICAgICAgICB5OiBycy5zZWdwdHNbX2kgKyAxXVxuICAgICAgICB9O1xuICAgICAgICB2YXIgY29ybmVyID0gcnMucm91bmRDb3JuZXJzW19pIC8gMl07XG4gICAgICAgIHZhciB2ID0gW3BvaW50LnggLSBjb3JuZXIuY3gsIHBvaW50LnkgLSBjb3JuZXIuY3ldO1xuICAgICAgICB2YXIgZmFjdG9yID0gY29ybmVyLnJhZGl1cyAvIE1hdGguc3FydChNYXRoLnBvdyh2WzBdLCAyKSArIE1hdGgucG93KHZbMV0sIDIpKTtcbiAgICAgICAgdiA9IHYubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgcmV0dXJuIGMgKiBmYWN0b3I7XG4gICAgICAgIH0pO1xuICAgICAgICBycy5taWRYID0gY29ybmVyLmN4ICsgdlswXTtcbiAgICAgICAgcnMubWlkWSA9IGNvcm5lci5jeSArIHZbMV07XG4gICAgICAgIHJzLm1pZFZlY3RvciA9IHY7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuQlJwJGMuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcnMgPSBlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAocnMubm9kZXNPdmVybGFwIHx8IG51bWJlciQxKHJzLnN0YXJ0WCkgJiYgbnVtYmVyJDEocnMuc3RhcnRZKSAmJiBudW1iZXIkMShycy5lbmRYKSAmJiBudW1iZXIkMShycy5lbmRZKSkge1xuICAgIHJzLmxvZ2dlZEVyciA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGlmICghcnMubG9nZ2VkRXJyKSB7XG4gICAgICBycy5sb2dnZWRFcnIgPSB0cnVlO1xuICAgICAgd2FybignRWRnZSBgJyArIGVkZ2UuaWQoKSArICdgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4nKTtcbiAgICB9XG4gIH1cbn07XG5CUnAkYy5maW5kRWRnZUNvbnRyb2xQb2ludHMgPSBmdW5jdGlvbiAoZWRnZXMpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgaWYgKCFlZGdlcyB8fCBlZGdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY3kgPSByLmN5O1xuICB2YXIgaGFzQ29tcG91bmRzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICB2YXIgaGFzaFRhYmxlID0ge1xuICAgIG1hcDogbmV3IE1hcCQyKCksXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQocGFpcklkKSB7XG4gICAgICB2YXIgbWFwMiA9IHRoaXMubWFwLmdldChwYWlySWRbMF0pO1xuICAgICAgaWYgKG1hcDIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWFwMi5nZXQocGFpcklkWzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQocGFpcklkLCB2YWwpIHtcbiAgICAgIHZhciBtYXAyID0gdGhpcy5tYXAuZ2V0KHBhaXJJZFswXSk7XG4gICAgICBpZiAobWFwMiA9PSBudWxsKSB7XG4gICAgICAgIG1hcDIgPSBuZXcgTWFwJDIoKTtcbiAgICAgICAgdGhpcy5tYXAuc2V0KHBhaXJJZFswXSwgbWFwMik7XG4gICAgICB9XG4gICAgICBtYXAyLnNldChwYWlySWRbMV0sIHZhbCk7XG4gICAgfVxuICB9O1xuICB2YXIgcGFpcklkcyA9IFtdO1xuICB2YXIgaGF5c3RhY2tFZGdlcyA9IFtdO1xuXG4gIC8vIGNyZWF0ZSBhIHRhYmxlIG9mIGVkZ2UgKHNyYywgdGd0KSA9PiBsaXN0IG9mIGVkZ2VzIGJldHdlZW4gdGhlbVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgIHZhciBjdXJ2ZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWU7XG5cbiAgICAvLyBpZ25vcmUgZWRnZXMgd2hvIGFyZSBub3QgdG8gYmUgZGlzcGxheWVkXG4gICAgLy8gdGhleSBzaG91bGRuJ3QgdGFrZSB1cCBzcGFjZVxuICAgIGlmIChlZGdlLnJlbW92ZWQoKSB8fCAhZWRnZS50YWtlc1VwU3BhY2UoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnaGF5c3RhY2snKSB7XG4gICAgICBoYXlzdGFja0VkZ2VzLnB1c2goZWRnZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGVkZ2VJc1VuYnVuZGxlZCA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCdzZWdtZW50cycpIHx8IGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodCcgfHwgY3VydmVTdHlsZSA9PT0gJ3N0cmFpZ2h0LXRyaWFuZ2xlJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCd0YXhpJyk7XG4gICAgdmFyIGVkZ2VJc0JlemllciA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlID09PSAnYmV6aWVyJztcbiAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgdmFyIHNyY0luZGV4ID0gc3JjLnBvb2xJbmRleCgpO1xuICAgIHZhciB0Z3RJbmRleCA9IHRndC5wb29sSW5kZXgoKTtcbiAgICB2YXIgcGFpcklkID0gW3NyY0luZGV4LCB0Z3RJbmRleF0uc29ydCgpO1xuICAgIHZhciB0YWJsZUVudHJ5ID0gaGFzaFRhYmxlLmdldChwYWlySWQpO1xuICAgIGlmICh0YWJsZUVudHJ5ID09IG51bGwpIHtcbiAgICAgIHRhYmxlRW50cnkgPSB7XG4gICAgICAgIGVsZXM6IFtdXG4gICAgICB9O1xuICAgICAgaGFzaFRhYmxlLnNldChwYWlySWQsIHRhYmxlRW50cnkpO1xuICAgICAgcGFpcklkcy5wdXNoKHBhaXJJZCk7XG4gICAgfVxuICAgIHRhYmxlRW50cnkuZWxlcy5wdXNoKGVkZ2UpO1xuICAgIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICAgIHRhYmxlRW50cnkuaGFzVW5idW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVkZ2VJc0Jlemllcikge1xuICAgICAgdGFibGVFbnRyeS5oYXNCZXppZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBlYWNoIHBhaXIgKHNyYywgdGd0KSwgY3JlYXRlIHRoZSBjdHJsIHB0c1xuICAvLyBOZXN0ZWQgZm9yIGxvb3AgaXMgT0s7IHRvdGFsIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBib3RoIGxvb3BzID0gZWRnZUNvdW50XG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKHApIHtcbiAgICB2YXIgcGFpcklkID0gcGFpcklkc1twXTtcbiAgICB2YXIgcGFpckluZm8gPSBoYXNoVGFibGUuZ2V0KHBhaXJJZCk7XG4gICAgdmFyIHN3YXBwZWRwYWlySW5mbyA9IHZvaWQgMDtcbiAgICBpZiAoIXBhaXJJbmZvLmhhc1VuYnVuZGxlZCkge1xuICAgICAgdmFyIHBsbEVkZ2VzID0gcGFpckluZm8uZWxlc1swXS5wYXJhbGxlbEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLmlzQnVuZGxlZEJlemllcigpO1xuICAgICAgfSk7XG4gICAgICBjbGVhckFycmF5KHBhaXJJbmZvLmVsZXMpO1xuICAgICAgcGxsRWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICByZXR1cm4gcGFpckluZm8uZWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGZvciBlYWNoIHBhaXIgaWQsIHRoZSBlZGdlcyBzaG91bGQgYmUgc29ydGVkIGJ5IGluZGV4XG4gICAgICBwYWlySW5mby5lbGVzLnNvcnQoZnVuY3Rpb24gKGVkZ2UxLCBlZGdlMikge1xuICAgICAgICByZXR1cm4gZWRnZTEucG9vbEluZGV4KCkgLSBlZGdlMi5wb29sSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgZmlyc3RFZGdlID0gcGFpckluZm8uZWxlc1swXTtcbiAgICB2YXIgc3JjID0gZmlyc3RFZGdlLnNvdXJjZSgpO1xuICAgIHZhciB0Z3QgPSBmaXJzdEVkZ2UudGFyZ2V0KCk7XG5cbiAgICAvLyBtYWtlIHN1cmUgc3JjL3RndCBkaXN0aW5jdGlvbiBpcyBjb25zaXN0ZW50IHcuci50LiBwYWlySWRcbiAgICBpZiAoc3JjLnBvb2xJbmRleCgpID4gdGd0LnBvb2xJbmRleCgpKSB7XG4gICAgICB2YXIgdGVtcCA9IHNyYztcbiAgICAgIHNyYyA9IHRndDtcbiAgICAgIHRndCA9IHRlbXA7XG4gICAgfVxuICAgIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MgPSBzcmMucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0UG9zID0gcGFpckluZm8udGd0UG9zID0gdGd0LnBvc2l0aW9uKCk7XG4gICAgdmFyIHNyY1cgPSBwYWlySW5mby5zcmNXID0gc3JjLm91dGVyV2lkdGgoKTtcbiAgICB2YXIgc3JjSCA9IHBhaXJJbmZvLnNyY0ggPSBzcmMub3V0ZXJIZWlnaHQoKTtcbiAgICB2YXIgdGd0VyA9IHBhaXJJbmZvLnRndFcgPSB0Z3Qub3V0ZXJXaWR0aCgpO1xuICAgIHZhciB0Z3RIID0gcGFpckluZm8udGd0SCA9IHRndC5vdXRlckhlaWdodCgpO1xuICAgIHZhciBzcmNTaGFwZSA9IHBhaXJJbmZvLnNyY1NoYXBlID0gci5ub2RlU2hhcGVzW190aGlzLmdldE5vZGVTaGFwZShzcmMpXTtcbiAgICB2YXIgdGd0U2hhcGUgPSBwYWlySW5mby50Z3RTaGFwZSA9IHIubm9kZVNoYXBlc1tfdGhpcy5nZXROb2RlU2hhcGUodGd0KV07XG4gICAgdmFyIHNyY0Nvcm5lclJhZGl1cyA9IHBhaXJJbmZvLnNyY0Nvcm5lclJhZGl1cyA9IHNyYy5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogc3JjLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnBmVmFsdWU7XG4gICAgdmFyIHRndENvcm5lclJhZGl1cyA9IHBhaXJJbmZvLnRndENvcm5lclJhZGl1cyA9IHRndC5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogdGd0LnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnBmVmFsdWU7XG4gICAgdmFyIHRndFJzID0gcGFpckluZm8udGd0UnMgPSB0Z3QuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIHNyY1JzID0gcGFpckluZm8uc3JjUnMgPSBzcmMuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcGFpckluZm8uZGlyQ291bnRzID0ge1xuICAgICAgJ25vcnRoJzogMCxcbiAgICAgICd3ZXN0JzogMCxcbiAgICAgICdzb3V0aCc6IDAsXG4gICAgICAnZWFzdCc6IDAsXG4gICAgICAnbm9ydGh3ZXN0JzogMCxcbiAgICAgICdzb3V0aHdlc3QnOiAwLFxuICAgICAgJ25vcnRoZWFzdCc6IDAsXG4gICAgICAnc291dGhlYXN0JzogMFxuICAgIH07XG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcGFpckluZm8uZWxlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgX2VkZ2UgPSBwYWlySW5mby5lbGVzW19pMl07XG4gICAgICB2YXIgcnMgPSBfZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBfY3VydmVTdHlsZSA9IF9lZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgICAgIHZhciBfZWRnZUlzVW5idW5kbGVkID0gX2N1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBfY3VydmVTdHlsZS5lbmRzV2l0aCgnc2VnbWVudHMnKSB8fCBfY3VydmVTdHlsZS5lbmRzV2l0aCgndGF4aScpO1xuXG4gICAgICAvLyB3aGV0aGVyIHRoZSBub3JtYWxpc2VkIHBhaXIgb3JkZXIgaXMgdGhlIHJldmVyc2Ugb2YgdGhlIGVkZ2UncyBzcmMtdGd0IG9yZGVyXG4gICAgICB2YXIgZWRnZUlzU3dhcHBlZCA9ICFzcmMuc2FtZShfZWRnZS5zb3VyY2UoKSk7XG4gICAgICBpZiAoIXBhaXJJbmZvLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24gJiYgc3JjICE9PSB0Z3QgJiYgKHBhaXJJbmZvLmhhc0JlemllciB8fCBwYWlySW5mby5oYXNVbmJ1bmRsZWQpKSB7XG4gICAgICAgIHBhaXJJbmZvLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24gPSB0cnVlO1xuXG4gICAgICAgIC8vIHB0IG91dHNpZGUgc3JjIHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuICAgICAgICB2YXIgc3JjT3V0c2lkZSA9IHNyY1NoYXBlLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNXLCBzcmNILCB0Z3RQb3MueCwgdGd0UG9zLnksIDAsIHNyY0Nvcm5lclJhZGl1cywgc3JjUnMpO1xuICAgICAgICB2YXIgc3JjSW50biA9IHBhaXJJbmZvLnNyY0ludG4gPSBzcmNPdXRzaWRlO1xuXG4gICAgICAgIC8vIHB0IG91dHNpZGUgdGd0IHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuICAgICAgICB2YXIgdGd0T3V0c2lkZSA9IHRndFNoYXBlLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0Z3RXLCB0Z3RILCBzcmNQb3MueCwgc3JjUG9zLnksIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgICAgICB2YXIgdGd0SW50biA9IHBhaXJJbmZvLnRndEludG4gPSB0Z3RPdXRzaWRlO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uUHRzID0gcGFpckluZm8uaW50ZXJzZWN0aW9uUHRzID0ge1xuICAgICAgICAgIHgxOiBzcmNPdXRzaWRlWzBdLFxuICAgICAgICAgIHgyOiB0Z3RPdXRzaWRlWzBdLFxuICAgICAgICAgIHkxOiBzcmNPdXRzaWRlWzFdLFxuICAgICAgICAgIHkyOiB0Z3RPdXRzaWRlWzFdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBwb3NQdHMgPSBwYWlySW5mby5wb3NQdHMgPSB7XG4gICAgICAgICAgeDE6IHNyY1Bvcy54LFxuICAgICAgICAgIHgyOiB0Z3RQb3MueCxcbiAgICAgICAgICB5MTogc3JjUG9zLnksXG4gICAgICAgICAgeTI6IHRndFBvcy55XG4gICAgICAgIH07XG4gICAgICAgIHZhciBkeSA9IHRndE91dHNpZGVbMV0gLSBzcmNPdXRzaWRlWzFdO1xuICAgICAgICB2YXIgZHggPSB0Z3RPdXRzaWRlWzBdIC0gc3JjT3V0c2lkZVswXTtcbiAgICAgICAgdmFyIGwgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICB2YXIgdmVjdG9yID0gcGFpckluZm8udmVjdG9yID0ge1xuICAgICAgICAgIHg6IGR4LFxuICAgICAgICAgIHk6IGR5XG4gICAgICAgIH07XG4gICAgICAgIHZhciB2ZWN0b3JOb3JtID0gcGFpckluZm8udmVjdG9yTm9ybSA9IHtcbiAgICAgICAgICB4OiB2ZWN0b3IueCAvIGwsXG4gICAgICAgICAgeTogdmVjdG9yLnkgLyBsXG4gICAgICAgIH07XG4gICAgICAgIHZhciB2ZWN0b3JOb3JtSW52ZXJzZSA9IHtcbiAgICAgICAgICB4OiAtdmVjdG9yTm9ybS55LFxuICAgICAgICAgIHk6IHZlY3Rvck5vcm0ueFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIG5vZGUgc2hhcGVzIG92ZXJsYXAsIHRoZW4gbm8gY3RybCBwdHMgdG8gZHJhd1xuICAgICAgICBwYWlySW5mby5ub2Rlc092ZXJsYXAgPSAhbnVtYmVyJDEobCkgfHwgdGd0U2hhcGUuY2hlY2tQb2ludChzcmNPdXRzaWRlWzBdLCBzcmNPdXRzaWRlWzFdLCAwLCB0Z3RXLCB0Z3RILCB0Z3RQb3MueCwgdGd0UG9zLnksIHRndENvcm5lclJhZGl1cywgdGd0UnMpIHx8IHNyY1NoYXBlLmNoZWNrUG9pbnQodGd0T3V0c2lkZVswXSwgdGd0T3V0c2lkZVsxXSwgMCwgc3JjVywgc3JjSCwgc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNDb3JuZXJSYWRpdXMsIHNyY1JzKTtcbiAgICAgICAgcGFpckluZm8udmVjdG9yTm9ybUludmVyc2UgPSB2ZWN0b3JOb3JtSW52ZXJzZTtcbiAgICAgICAgc3dhcHBlZHBhaXJJbmZvID0ge1xuICAgICAgICAgIG5vZGVzT3ZlcmxhcDogcGFpckluZm8ubm9kZXNPdmVybGFwLFxuICAgICAgICAgIGRpckNvdW50czogcGFpckluZm8uZGlyQ291bnRzLFxuICAgICAgICAgIGNhbGN1bGF0ZWRJbnRlcnNlY3Rpb246IHRydWUsXG4gICAgICAgICAgaGFzQmV6aWVyOiBwYWlySW5mby5oYXNCZXppZXIsXG4gICAgICAgICAgaGFzVW5idW5kbGVkOiBwYWlySW5mby5oYXNVbmJ1bmRsZWQsXG4gICAgICAgICAgZWxlczogcGFpckluZm8uZWxlcyxcbiAgICAgICAgICBzcmNQb3M6IHRndFBvcyxcbiAgICAgICAgICB0Z3RQb3M6IHNyY1BvcyxcbiAgICAgICAgICBzcmNXOiB0Z3RXLFxuICAgICAgICAgIHNyY0g6IHRndEgsXG4gICAgICAgICAgdGd0Vzogc3JjVyxcbiAgICAgICAgICB0Z3RIOiBzcmNILFxuICAgICAgICAgIHNyY0ludG46IHRndEludG4sXG4gICAgICAgICAgdGd0SW50bjogc3JjSW50bixcbiAgICAgICAgICBzcmNTaGFwZTogdGd0U2hhcGUsXG4gICAgICAgICAgdGd0U2hhcGU6IHNyY1NoYXBlLFxuICAgICAgICAgIHBvc1B0czoge1xuICAgICAgICAgICAgeDE6IHBvc1B0cy54MixcbiAgICAgICAgICAgIHkxOiBwb3NQdHMueTIsXG4gICAgICAgICAgICB4MjogcG9zUHRzLngxLFxuICAgICAgICAgICAgeTI6IHBvc1B0cy55MVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJzZWN0aW9uUHRzOiB7XG4gICAgICAgICAgICB4MTogaW50ZXJzZWN0aW9uUHRzLngyLFxuICAgICAgICAgICAgeTE6IGludGVyc2VjdGlvblB0cy55MixcbiAgICAgICAgICAgIHgyOiBpbnRlcnNlY3Rpb25QdHMueDEsXG4gICAgICAgICAgICB5MjogaW50ZXJzZWN0aW9uUHRzLnkxXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZWN0b3I6IHtcbiAgICAgICAgICAgIHg6IC12ZWN0b3IueCxcbiAgICAgICAgICAgIHk6IC12ZWN0b3IueVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmVjdG9yTm9ybToge1xuICAgICAgICAgICAgeDogLXZlY3Rvck5vcm0ueCxcbiAgICAgICAgICAgIHk6IC12ZWN0b3JOb3JtLnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZlY3Rvck5vcm1JbnZlcnNlOiB7XG4gICAgICAgICAgICB4OiAtdmVjdG9yTm9ybUludmVyc2UueCxcbiAgICAgICAgICAgIHk6IC12ZWN0b3JOb3JtSW52ZXJzZS55XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHBhc3NlZFBhaXJJbmZvID0gZWRnZUlzU3dhcHBlZCA/IHN3YXBwZWRwYWlySW5mbyA6IHBhaXJJbmZvO1xuICAgICAgcnMubm9kZXNPdmVybGFwID0gcGFzc2VkUGFpckluZm8ubm9kZXNPdmVybGFwO1xuICAgICAgcnMuc3JjSW50biA9IHBhc3NlZFBhaXJJbmZvLnNyY0ludG47XG4gICAgICBycy50Z3RJbnRuID0gcGFzc2VkUGFpckluZm8udGd0SW50bjtcbiAgICAgIHJzLmlzUm91bmQgPSBfY3VydmVTdHlsZS5zdGFydHNXaXRoKCdyb3VuZCcpO1xuICAgICAgaWYgKGhhc0NvbXBvdW5kcyAmJiAoc3JjLmlzUGFyZW50KCkgfHwgc3JjLmlzQ2hpbGQoKSB8fCB0Z3QuaXNQYXJlbnQoKSB8fCB0Z3QuaXNDaGlsZCgpKSAmJiAoc3JjLnBhcmVudHMoKS5hbnlTYW1lKHRndCkgfHwgdGd0LnBhcmVudHMoKS5hbnlTYW1lKHNyYykgfHwgc3JjLnNhbWUodGd0KSAmJiBzcmMuaXNQYXJlbnQoKSkpIHtcbiAgICAgICAgX3RoaXMuZmluZENvbXBvdW5kTG9vcFBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8sIF9pMiwgX2VkZ2VJc1VuYnVuZGxlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNyYyA9PT0gdGd0KSB7XG4gICAgICAgIF90aGlzLmZpbmRMb29wUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbywgX2kyLCBfZWRnZUlzVW5idW5kbGVkKTtcbiAgICAgIH0gZWxzZSBpZiAoX2N1cnZlU3R5bGUuZW5kc1dpdGgoJ3NlZ21lbnRzJykpIHtcbiAgICAgICAgX3RoaXMuZmluZFNlZ21lbnRzUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbyk7XG4gICAgICB9IGVsc2UgaWYgKF9jdXJ2ZVN0eWxlLmVuZHNXaXRoKCd0YXhpJykpIHtcbiAgICAgICAgX3RoaXMuZmluZFRheGlQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoX2N1cnZlU3R5bGUgPT09ICdzdHJhaWdodCcgfHwgIV9lZGdlSXNVbmJ1bmRsZWQgJiYgcGFpckluZm8uZWxlcy5sZW5ndGggJSAyID09PSAxICYmIF9pMiA9PT0gTWF0aC5mbG9vcihwYWlySW5mby5lbGVzLmxlbmd0aCAvIDIpKSB7XG4gICAgICAgIF90aGlzLmZpbmRTdHJhaWdodEVkZ2VQb2ludHMoX2VkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuZmluZEJlemllclBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8sIF9pMiwgX2VkZ2VJc1VuYnVuZGxlZCwgZWRnZUlzU3dhcHBlZCk7XG4gICAgICB9XG4gICAgICBfdGhpcy5maW5kRW5kcG9pbnRzKF9lZGdlKTtcbiAgICAgIF90aGlzLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvKTtcbiAgICAgIF90aGlzLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKF9lZGdlKTtcbiAgICAgIF90aGlzLnN0b3JlQWxscHRzKF9lZGdlKTtcbiAgICAgIF90aGlzLnN0b3JlRWRnZVByb2plY3Rpb25zKF9lZGdlKTtcbiAgICAgIF90aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKF9lZGdlKTtcbiAgICAgIF90aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoX2VkZ2UpO1xuICAgICAgX3RoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMoX2VkZ2UpO1xuICAgIH0gLy8gZm9yIHBhaXIgZWRnZXNcbiAgfTtcbiAgZm9yICh2YXIgcCA9IDA7IHAgPCBwYWlySWRzLmxlbmd0aDsgcCsrKSB7XG4gICAgX2xvb3AocCk7XG4gIH0gLy8gZm9yIHBhaXIgaWRzXG5cbiAgLy8gaGF5c3RhY2tzIGF2b2lkIHRoZSBleHBlbnNlIG9mIHBhaXJJbmZvIHN0dWZmIChpbnRlcnNlY3Rpb25zIGV0Yy4pXG4gIHRoaXMuZmluZEhheXN0YWNrUG9pbnRzKGhheXN0YWNrRWRnZXMpO1xufTtcbmZ1bmN0aW9uIGdldFB0cyhwdHMpIHtcbiAgdmFyIHJldFB0cyA9IFtdO1xuICBpZiAocHRzID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgeCA9IHB0c1tpXTtcbiAgICB2YXIgeSA9IHB0c1tpICsgMV07XG4gICAgcmV0UHRzLnB1c2goe1xuICAgICAgeDogeCxcbiAgICAgIHk6IHlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmV0UHRzO1xufVxuQlJwJGMuZ2V0U2VnbWVudFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciB0eXBlID0gcnMuZWRnZVR5cGU7XG4gIGlmICh0eXBlID09PSAnc2VnbWVudHMnKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gICAgcmV0dXJuIGdldFB0cyhycy5zZWdwdHMpO1xuICB9XG59O1xuQlJwJGMuZ2V0Q29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciB0eXBlID0gcnMuZWRnZVR5cGU7XG4gIGlmICh0eXBlID09PSAnYmV6aWVyJyB8fCB0eXBlID09PSAnbXVsdGliZXppZXInIHx8IHR5cGUgPT09ICdzZWxmJyB8fCB0eXBlID09PSAnY29tcG91bmQnKSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gICAgcmV0dXJuIGdldFB0cyhycy5jdHJscHRzKTtcbiAgfVxufTtcbkJScCRjLmdldEVkZ2VNaWRwb2ludCA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVkZ2UpO1xuICByZXR1cm4ge1xuICAgIHg6IHJzLm1pZFgsXG4gICAgeTogcnMubWlkWVxuICB9O1xufTtcblxudmFyIEJScCRiID0ge307XG5CUnAkYi5tYW51YWxFbmRwdFRvUHggPSBmdW5jdGlvbiAobm9kZSwgcHJvcCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBucG9zID0gbm9kZS5wb3NpdGlvbigpO1xuICB2YXIgdyA9IG5vZGUub3V0ZXJXaWR0aCgpO1xuICB2YXIgaCA9IG5vZGUub3V0ZXJIZWlnaHQoKTtcbiAgdmFyIHJzID0gbm9kZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgaWYgKHByb3AudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIHAgPSBbcHJvcC5wZlZhbHVlWzBdLCBwcm9wLnBmVmFsdWVbMV1dO1xuICAgIGlmIChwcm9wLnVuaXRzWzBdID09PSAnJScpIHtcbiAgICAgIHBbMF0gPSBwWzBdICogdztcbiAgICB9XG4gICAgaWYgKHByb3AudW5pdHNbMV0gPT09ICclJykge1xuICAgICAgcFsxXSA9IHBbMV0gKiBoO1xuICAgIH1cbiAgICBwWzBdICs9IG5wb3MueDtcbiAgICBwWzFdICs9IG5wb3MueTtcbiAgICByZXR1cm4gcDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYW5nbGUgPSBwcm9wLnBmVmFsdWVbMF07XG4gICAgYW5nbGUgPSAtTWF0aC5QSSAvIDIgKyBhbmdsZTsgLy8gc3RhcnQgYXQgMTIgbydjbG9ja1xuXG4gICAgdmFyIGwgPSAyICogTWF0aC5tYXgodywgaCk7XG4gICAgdmFyIF9wID0gW25wb3MueCArIE1hdGguY29zKGFuZ2xlKSAqIGwsIG5wb3MueSArIE1hdGguc2luKGFuZ2xlKSAqIGxdO1xuICAgIHJldHVybiByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUobm9kZSldLmludGVyc2VjdExpbmUobnBvcy54LCBucG9zLnksIHcsIGgsIF9wWzBdLCBfcFsxXSwgMCwgbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlLCBycyk7XG4gIH1cbn07XG5CUnAkYi5maW5kRW5kcG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaW50ZXJzZWN0O1xuICB2YXIgc291cmNlID0gZWRnZS5zb3VyY2UoKVswXTtcbiAgdmFyIHRhcmdldCA9IGVkZ2UudGFyZ2V0KClbMF07XG4gIHZhciBzcmNQb3MgPSBzb3VyY2UucG9zaXRpb24oKTtcbiAgdmFyIHRndFBvcyA9IHRhcmdldC5wb3NpdGlvbigpO1xuICB2YXIgdGd0QXJTaGFwZSA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgdmFyIHNyY0FyU2hhcGUgPSBlZGdlLnBzdHlsZSgnc291cmNlLWFycm93LXNoYXBlJykudmFsdWU7XG4gIHZhciB0Z3REaXN0ID0gZWRnZS5wc3R5bGUoJ3RhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUnKS5wZlZhbHVlO1xuICB2YXIgc3JjRGlzdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJykucGZWYWx1ZTtcbiAgdmFyIHNyY1JzID0gc291cmNlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgdGd0UnMgPSB0YXJnZXQuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBjdXJ2ZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWU7XG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBldCA9IHJzLmVkZ2VUeXBlO1xuICB2YXIgdGF4aSA9IGN1cnZlU3R5bGUgPT09ICd0YXhpJztcbiAgdmFyIHNlbGYgPSBldCA9PT0gJ3NlbGYnIHx8IGV0ID09PSAnY29tcG91bmQnO1xuICB2YXIgYmV6aWVyID0gZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnbXVsdGliZXppZXInIHx8IHNlbGY7XG4gIHZhciBtdWx0aSA9IGV0ICE9PSAnYmV6aWVyJztcbiAgdmFyIGxpbmVzID0gZXQgPT09ICdzdHJhaWdodCcgfHwgZXQgPT09ICdzZWdtZW50cyc7XG4gIHZhciBzZWdtZW50cyA9IGV0ID09PSAnc2VnbWVudHMnO1xuICB2YXIgaGFzRW5kcHRzID0gYmV6aWVyIHx8IG11bHRpIHx8IGxpbmVzO1xuICB2YXIgb3ZlcnJpZGVFbmRwdHMgPSBzZWxmIHx8IHRheGk7XG4gIHZhciBzcmNNYW5FbmRwdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZW5kcG9pbnQnKTtcbiAgdmFyIHNyY01hbkVuZHB0VmFsID0gb3ZlcnJpZGVFbmRwdHMgPyAnb3V0c2lkZS10by1ub2RlJyA6IHNyY01hbkVuZHB0LnZhbHVlO1xuICB2YXIgc3JjQ29ybmVyUmFkaXVzID0gc291cmNlLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnZhbHVlID09PSAnYXV0bycgPyAnYXV0bycgOiBzb3VyY2UucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgdmFyIHRndE1hbkVuZHB0ID0gZWRnZS5wc3R5bGUoJ3RhcmdldC1lbmRwb2ludCcpO1xuICB2YXIgdGd0TWFuRW5kcHRWYWwgPSBvdmVycmlkZUVuZHB0cyA/ICdvdXRzaWRlLXRvLW5vZGUnIDogdGd0TWFuRW5kcHQudmFsdWU7XG4gIHZhciB0Z3RDb3JuZXJSYWRpdXMgPSB0YXJnZXQucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWUgPT09ICdhdXRvJyA/ICdhdXRvJyA6IHRhcmdldC5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlO1xuICBycy5zcmNNYW5FbmRwdCA9IHNyY01hbkVuZHB0O1xuICBycy50Z3RNYW5FbmRwdCA9IHRndE1hbkVuZHB0O1xuICB2YXIgcDE7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiB0YXJnZXQgc2lkZVxuICB2YXIgcDI7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiBzb3VyY2Ugc2lkZVxuXG4gIHZhciBwMV9pOyAvLyBwb2ludCB0byBpbnRlcnNlY3Qgd2l0aCB0YXJnZXQgc2hhcGVcbiAgdmFyIHAyX2k7IC8vIHBvaW50IHRvIGludGVyc2VjdCB3aXRoIHNvdXJjZSBzaGFwZVxuXG4gIGlmIChiZXppZXIpIHtcbiAgICB2YXIgY3BTdGFydCA9IFtycy5jdHJscHRzWzBdLCBycy5jdHJscHRzWzFdXTtcbiAgICB2YXIgY3BFbmQgPSBtdWx0aSA/IFtycy5jdHJscHRzW3JzLmN0cmxwdHMubGVuZ3RoIC0gMl0sIHJzLmN0cmxwdHNbcnMuY3RybHB0cy5sZW5ndGggLSAxXV0gOiBjcFN0YXJ0O1xuICAgIHAxID0gY3BFbmQ7XG4gICAgcDIgPSBjcFN0YXJ0O1xuICB9IGVsc2UgaWYgKGxpbmVzKSB7XG4gICAgdmFyIHNyY0Fycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3RndFBvcy54LCB0Z3RQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UoMCwgMik7XG4gICAgdmFyIHRndEFycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3NyY1Bvcy54LCBzcmNQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UocnMuc2VncHRzLmxlbmd0aCAtIDIpO1xuICAgIHAxID0gdGd0QXJyb3dGcm9tUHQ7XG4gICAgcDIgPSBzcmNBcnJvd0Zyb21QdDtcbiAgfVxuICBpZiAodGd0TWFuRW5kcHRWYWwgPT09ICdpbnNpZGUtdG8tbm9kZScpIHtcbiAgICBpbnRlcnNlY3QgPSBbdGd0UG9zLngsIHRndFBvcy55XTtcbiAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdC51bml0cykge1xuICAgIGludGVyc2VjdCA9IHRoaXMubWFudWFsRW5kcHRUb1B4KHRhcmdldCwgdGd0TWFuRW5kcHQpO1xuICB9IGVsc2UgaWYgKHRndE1hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lJykge1xuICAgIGludGVyc2VjdCA9IHJzLnRndEludG47IC8vIHVzZSBjYWNoZWQgdmFsdWUgZnJvbSBjdHJscHQgY2FsY1xuICB9IGVsc2Uge1xuICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnKSB7XG4gICAgICBwMV9pID0gcDE7XG4gICAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICBwMV9pID0gW3NyY1Bvcy54LCBzcmNQb3MueV07XG4gICAgfVxuICAgIGludGVyc2VjdCA9IHIubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZSh0YXJnZXQpXS5pbnRlcnNlY3RMaW5lKHRndFBvcy54LCB0Z3RQb3MueSwgdGFyZ2V0Lm91dGVyV2lkdGgoKSwgdGFyZ2V0Lm91dGVySGVpZ2h0KCksIHAxX2lbMF0sIHAxX2lbMV0sIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICB2YXIgdHJzID0gdGFyZ2V0Ll9wcml2YXRlLnJzY3JhdGNoO1xuICAgICAgdmFyIGx3ID0gdHJzLmxhYmVsV2lkdGg7XG4gICAgICB2YXIgbGggPSB0cnMubGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgbHggPSB0cnMubGFiZWxYO1xuICAgICAgdmFyIGx5ID0gdHJzLmxhYmVsWTtcbiAgICAgIHZhciBsdzIgPSBsdyAvIDI7XG4gICAgICB2YXIgbGgyID0gbGggLyAyO1xuICAgICAgdmFyIHZhID0gdGFyZ2V0LnBzdHlsZSgndGV4dC12YWxpZ24nKS52YWx1ZTtcbiAgICAgIGlmICh2YSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgbHkgLT0gbGgyO1xuICAgICAgfSBlbHNlIGlmICh2YSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgbHkgKz0gbGgyO1xuICAgICAgfVxuICAgICAgdmFyIGhhID0gdGFyZ2V0LnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcbiAgICAgIGlmIChoYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGx4IC09IGx3MjtcbiAgICAgIH0gZWxzZSBpZiAoaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgbHggKz0gbHcyO1xuICAgICAgfVxuICAgICAgdmFyIGxhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDFfaVswXSwgcDFfaVsxXSwgW2x4IC0gbHcyLCBseSAtIGxoMiwgbHggKyBsdzIsIGx5IC0gbGgyLCBseCArIGx3MiwgbHkgKyBsaDIsIGx4IC0gbHcyLCBseSArIGxoMl0sIHRndFBvcy54LCB0Z3RQb3MueSk7XG4gICAgICBpZiAobGFiZWxJbnRlcnNlY3QubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgcmVmUHQgPSBzcmNQb3M7XG4gICAgICAgIHZhciBpbnRTcWRpc3QgPSBzcWRpc3QocmVmUHQsIGFycmF5MnBvaW50KGludGVyc2VjdCkpO1xuICAgICAgICB2YXIgbGFiSW50U3FkaXN0ID0gc3FkaXN0KHJlZlB0LCBhcnJheTJwb2ludChsYWJlbEludGVyc2VjdCkpO1xuICAgICAgICB2YXIgbWluU3FEaXN0ID0gaW50U3FkaXN0O1xuICAgICAgICBpZiAobGFiSW50U3FkaXN0IDwgaW50U3FkaXN0KSB7XG4gICAgICAgICAgaW50ZXJzZWN0ID0gbGFiZWxJbnRlcnNlY3Q7XG4gICAgICAgICAgbWluU3FEaXN0ID0gbGFiSW50U3FkaXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbEludGVyc2VjdC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgdmFyIGxhYkludDJTcURpc3QgPSBzcWRpc3QocmVmUHQsIHtcbiAgICAgICAgICAgIHg6IGxhYmVsSW50ZXJzZWN0WzJdLFxuICAgICAgICAgICAgeTogbGFiZWxJbnRlcnNlY3RbM11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobGFiSW50MlNxRGlzdCA8IG1pblNxRGlzdCkge1xuICAgICAgICAgICAgaW50ZXJzZWN0ID0gW2xhYmVsSW50ZXJzZWN0WzJdLCBsYWJlbEludGVyc2VjdFszXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBhcnJvd0VuZCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMSwgci5hcnJvd1NoYXBlc1t0Z3RBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgdGd0RGlzdCk7XG4gIHZhciBlZGdlRW5kID0gc2hvcnRlbkludGVyc2VjdGlvbihpbnRlcnNlY3QsIHAxLCByLmFycm93U2hhcGVzW3RndEFyU2hhcGVdLmdhcChlZGdlKSArIHRndERpc3QpO1xuICBycy5lbmRYID0gZWRnZUVuZFswXTtcbiAgcnMuZW5kWSA9IGVkZ2VFbmRbMV07XG4gIHJzLmFycm93RW5kWCA9IGFycm93RW5kWzBdO1xuICBycy5hcnJvd0VuZFkgPSBhcnJvd0VuZFsxXTtcbiAgaWYgKHNyY01hbkVuZHB0VmFsID09PSAnaW5zaWRlLXRvLW5vZGUnKSB7XG4gICAgaW50ZXJzZWN0ID0gW3NyY1Bvcy54LCBzcmNQb3MueV07XG4gIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHQudW5pdHMpIHtcbiAgICBpbnRlcnNlY3QgPSB0aGlzLm1hbnVhbEVuZHB0VG9QeChzb3VyY2UsIHNyY01hbkVuZHB0KTtcbiAgfSBlbHNlIGlmIChzcmNNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScpIHtcbiAgICBpbnRlcnNlY3QgPSBycy5zcmNJbnRuOyAvLyB1c2UgY2FjaGVkIHZhbHVlIGZyb20gY3RybHB0IGNhbGNcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1ub2RlLW9yLWxhYmVsJykge1xuICAgICAgcDJfaSA9IHAyO1xuICAgIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lLW9yLWxhYmVsJykge1xuICAgICAgcDJfaSA9IFt0Z3RQb3MueCwgdGd0UG9zLnldO1xuICAgIH1cbiAgICBpbnRlcnNlY3QgPSByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoc291cmNlKV0uaW50ZXJzZWN0TGluZShzcmNQb3MueCwgc3JjUG9zLnksIHNvdXJjZS5vdXRlcldpZHRoKCksIHNvdXJjZS5vdXRlckhlaWdodCgpLCBwMl9pWzBdLCBwMl9pWzFdLCAwLCBzcmNDb3JuZXJSYWRpdXMsIHNyY1JzKTtcbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lLW9yLWxhYmVsJykge1xuICAgICAgdmFyIHNycyA9IHNvdXJjZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBfbHcgPSBzcnMubGFiZWxXaWR0aDtcbiAgICAgIHZhciBfbGggPSBzcnMubGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgX2x4ID0gc3JzLmxhYmVsWDtcbiAgICAgIHZhciBfbHkgPSBzcnMubGFiZWxZO1xuICAgICAgdmFyIF9sdzIgPSBfbHcgLyAyO1xuICAgICAgdmFyIF9saDIgPSBfbGggLyAyO1xuICAgICAgdmFyIF92YSA9IHNvdXJjZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWU7XG4gICAgICBpZiAoX3ZhID09PSAndG9wJykge1xuICAgICAgICBfbHkgLT0gX2xoMjtcbiAgICAgIH0gZWxzZSBpZiAoX3ZhID09PSAnYm90dG9tJykge1xuICAgICAgICBfbHkgKz0gX2xoMjtcbiAgICAgIH1cbiAgICAgIHZhciBfaGEgPSBzb3VyY2UucHN0eWxlKCd0ZXh0LWhhbGlnbicpLnZhbHVlO1xuICAgICAgaWYgKF9oYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIF9seCAtPSBfbHcyO1xuICAgICAgfSBlbHNlIGlmIChfaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgX2x4ICs9IF9sdzI7XG4gICAgICB9XG4gICAgICB2YXIgX2xhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDJfaVswXSwgcDJfaVsxXSwgW19seCAtIF9sdzIsIF9seSAtIF9saDIsIF9seCArIF9sdzIsIF9seSAtIF9saDIsIF9seCArIF9sdzIsIF9seSArIF9saDIsIF9seCAtIF9sdzIsIF9seSArIF9saDJdLCBzcmNQb3MueCwgc3JjUG9zLnkpO1xuICAgICAgaWYgKF9sYWJlbEludGVyc2VjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBfcmVmUHQgPSB0Z3RQb3M7XG4gICAgICAgIHZhciBfaW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoaW50ZXJzZWN0KSk7XG4gICAgICAgIHZhciBfbGFiSW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoX2xhYmVsSW50ZXJzZWN0KSk7XG4gICAgICAgIHZhciBfbWluU3FEaXN0ID0gX2ludFNxZGlzdDtcbiAgICAgICAgaWYgKF9sYWJJbnRTcWRpc3QgPCBfaW50U3FkaXN0KSB7XG4gICAgICAgICAgaW50ZXJzZWN0ID0gW19sYWJlbEludGVyc2VjdFswXSwgX2xhYmVsSW50ZXJzZWN0WzFdXTtcbiAgICAgICAgICBfbWluU3FEaXN0ID0gX2xhYkludFNxZGlzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2xhYmVsSW50ZXJzZWN0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICB2YXIgX2xhYkludDJTcURpc3QgPSBzcWRpc3QoX3JlZlB0LCB7XG4gICAgICAgICAgICB4OiBfbGFiZWxJbnRlcnNlY3RbMl0sXG4gICAgICAgICAgICB5OiBfbGFiZWxJbnRlcnNlY3RbM11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoX2xhYkludDJTcURpc3QgPCBfbWluU3FEaXN0KSB7XG4gICAgICAgICAgICBpbnRlcnNlY3QgPSBbX2xhYmVsSW50ZXJzZWN0WzJdLCBfbGFiZWxJbnRlcnNlY3RbM11dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgYXJyb3dTdGFydCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMiwgci5hcnJvd1NoYXBlc1tzcmNBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgc3JjRGlzdCk7XG4gIHZhciBlZGdlU3RhcnQgPSBzaG9ydGVuSW50ZXJzZWN0aW9uKGludGVyc2VjdCwgcDIsIHIuYXJyb3dTaGFwZXNbc3JjQXJTaGFwZV0uZ2FwKGVkZ2UpICsgc3JjRGlzdCk7XG4gIHJzLnN0YXJ0WCA9IGVkZ2VTdGFydFswXTtcbiAgcnMuc3RhcnRZID0gZWRnZVN0YXJ0WzFdO1xuICBycy5hcnJvd1N0YXJ0WCA9IGFycm93U3RhcnRbMF07XG4gIHJzLmFycm93U3RhcnRZID0gYXJyb3dTdGFydFsxXTtcbiAgaWYgKGhhc0VuZHB0cykge1xuICAgIGlmICghbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKSB8fCAhbnVtYmVyJDEocnMuZW5kWCkgfHwgIW51bWJlciQxKHJzLmVuZFkpKSB7XG4gICAgICBycy5iYWRMaW5lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnMuYmFkTGluZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcbkJScCRiLmdldFNvdXJjZUVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBycy5oYXlzdGFja1B0c1swXSxcbiAgICAgICAgeTogcnMuaGF5c3RhY2tQdHNbMV1cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJzLmFycm93U3RhcnRYLFxuICAgICAgICB5OiBycy5hcnJvd1N0YXJ0WVxuICAgICAgfTtcbiAgfVxufTtcbkJScCRiLmdldFRhcmdldEVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBycy5oYXlzdGFja1B0c1syXSxcbiAgICAgICAgeTogcnMuaGF5c3RhY2tQdHNbM11cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJzLmFycm93RW5kWCxcbiAgICAgICAgeTogcnMuYXJyb3dFbmRZXG4gICAgICB9O1xuICB9XG59O1xuXG52YXIgQlJwJGEgPSB7fTtcbmZ1bmN0aW9uIHB1c2hCZXppZXJQdHMociwgZWRnZSwgcHRzKSB7XG4gIHZhciBxYmV6aWVyQXQkMSA9IGZ1bmN0aW9uIHFiZXppZXJBdCQxKHAxLCBwMiwgcDMsIHQpIHtcbiAgICByZXR1cm4gcWJlemllckF0KHAxLCBwMiwgcDMsIHQpO1xuICB9O1xuICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICB2YXIgYnB0cyA9IF9wLnJzdHlsZS5iZXppZXJQdHM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgci5iZXppZXJQcm9qUGN0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gci5iZXppZXJQcm9qUGN0c1tpXTtcbiAgICBicHRzLnB1c2goe1xuICAgICAgeDogcWJlemllckF0JDEocHRzWzBdLCBwdHNbMl0sIHB0c1s0XSwgcCksXG4gICAgICB5OiBxYmV6aWVyQXQkMShwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCBwKVxuICAgIH0pO1xuICB9XG59XG5CUnAkYS5zdG9yZUVkZ2VQcm9qZWN0aW9ucyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBfcCA9IGVkZ2UuX3ByaXZhdGU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICB2YXIgZXQgPSBycy5lZGdlVHlwZTtcblxuICAvLyBjbGVhciB0aGUgY2FjaGVkIHBvaW50cyBzdGF0ZVxuICBfcC5yc3R5bGUuYmV6aWVyUHRzID0gbnVsbDtcbiAgX3AucnN0eWxlLmxpbmVQdHMgPSBudWxsO1xuICBfcC5yc3R5bGUuaGF5c3RhY2tQdHMgPSBudWxsO1xuICBpZiAoZXQgPT09ICdtdWx0aWJlemllcicgfHwgZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnc2VsZicgfHwgZXQgPT09ICdjb21wb3VuZCcpIHtcbiAgICBfcC5yc3R5bGUuYmV6aWVyUHRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBwdXNoQmV6aWVyUHRzKHRoaXMsIGVkZ2UsIHJzLmFsbHB0cy5zbGljZShpLCBpICsgNikpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChldCA9PT0gJ3NlZ21lbnRzJykge1xuICAgIHZhciBscHRzID0gX3AucnN0eWxlLmxpbmVQdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSArIDEgPCBycy5hbGxwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGxwdHMucHVzaCh7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV0ID09PSAnaGF5c3RhY2snKSB7XG4gICAgdmFyIGhwdHMgPSBycy5oYXlzdGFja1B0cztcbiAgICBfcC5yc3R5bGUuaGF5c3RhY2tQdHMgPSBbe1xuICAgICAgeDogaHB0c1swXSxcbiAgICAgIHk6IGhwdHNbMV1cbiAgICB9LCB7XG4gICAgICB4OiBocHRzWzJdLFxuICAgICAgeTogaHB0c1szXVxuICAgIH1dO1xuICB9XG4gIF9wLnJzdHlsZS5hcnJvd1dpZHRoID0gdGhpcy5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMuYXJyb3dTaGFwZVdpZHRoO1xufTtcbkJScCRhLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zID0gZnVuY3Rpb24gKGVkZ2VzKSB7XG4gIHRoaXMuZmluZEVkZ2VDb250cm9sUG9pbnRzKGVkZ2VzKTtcbn07XG5cbnZhciBCUnAkOSA9IHt9O1xuQlJwJDkucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGNvbnRlbnQgPSBub2RlLnBzdHlsZSgnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgaWYgKGVtcHR5U3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB0ZXh0WCwgdGV4dFk7XG4gIHZhciBfcCA9IG5vZGUuX3ByaXZhdGU7XG4gIHZhciBub2RlV2lkdGggPSBub2RlLndpZHRoKCk7XG4gIHZhciBub2RlSGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgdmFyIG5vZGVQb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gIHZhciB0ZXh0SGFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtaGFsaWduJykuc3RyVmFsdWU7XG4gIHZhciB0ZXh0VmFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtdmFsaWduJykuc3RyVmFsdWU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICBzd2l0Y2ggKHRleHRIYWxpZ24pIHtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHRleHRYID0gbm9kZVBvcy54IC0gbm9kZVdpZHRoIC8gMiAtIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICB0ZXh0WCA9IG5vZGVQb3MueCArIG5vZGVXaWR0aCAvIDIgKyBwYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGUuZy4gY2VudGVyXG4gICAgICB0ZXh0WCA9IG5vZGVQb3MueDtcbiAgfVxuICBzd2l0Y2ggKHRleHRWYWxpZ24pIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgdGV4dFkgPSBub2RlUG9zLnkgLSBub2RlSGVpZ2h0IC8gMiAtIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgdGV4dFkgPSBub2RlUG9zLnkgKyBub2RlSGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZS5nLiBtaWRkbGVcbiAgICAgIHRleHRZID0gbm9kZVBvcy55O1xuICB9XG4gIHJzLmxhYmVsWCA9IHRleHRYO1xuICBycy5sYWJlbFkgPSB0ZXh0WTtcbiAgcnN0eWxlLmxhYmVsWCA9IHRleHRYO1xuICByc3R5bGUubGFiZWxZID0gdGV4dFk7XG4gIHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMobm9kZSk7XG4gIHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMobm9kZSk7XG59O1xudmFyIGxpbmVBbmdsZUZyb21EZWx0YSA9IGZ1bmN0aW9uIGxpbmVBbmdsZUZyb21EZWx0YShkeCwgZHkpIHtcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKGR5IC8gZHgpO1xuICBpZiAoZHggPT09IDAgJiYgYW5nbGUgPCAwKSB7XG4gICAgYW5nbGUgPSBhbmdsZSAqIC0xO1xuICB9XG4gIHJldHVybiBhbmdsZTtcbn07XG52YXIgbGluZUFuZ2xlID0gZnVuY3Rpb24gbGluZUFuZ2xlKHAwLCBwMSkge1xuICB2YXIgZHggPSBwMS54IC0gcDAueDtcbiAgdmFyIGR5ID0gcDEueSAtIHAwLnk7XG4gIHJldHVybiBsaW5lQW5nbGVGcm9tRGVsdGEoZHgsIGR5KTtcbn07XG52YXIgYmV6aWVyQW5nbGUgPSBmdW5jdGlvbiBiZXppZXJBbmdsZShwMCwgcDEsIHAyLCB0KSB7XG4gIHZhciB0MCA9IGJvdW5kKDAsIHQgLSAwLjAwMSwgMSk7XG4gIHZhciB0MSA9IGJvdW5kKDAsIHQgKyAwLjAwMSwgMSk7XG4gIHZhciBscDAgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MCk7XG4gIHZhciBscDEgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MSk7XG4gIHJldHVybiBsaW5lQW5nbGUobHAwLCBscDEpO1xufTtcbkJScCQ5LnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcDtcbiAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgbWlkOiBlZGdlLnBzdHlsZSgnbGFiZWwnKS5zdHJWYWx1ZSxcbiAgICBzb3VyY2U6IGVkZ2UucHN0eWxlKCdzb3VyY2UtbGFiZWwnKS5zdHJWYWx1ZSxcbiAgICB0YXJnZXQ6IGVkZ2UucHN0eWxlKCd0YXJnZXQtbGFiZWwnKS5zdHJWYWx1ZVxuICB9O1xuICBpZiAoY29udGVudC5taWQgfHwgY29udGVudC5zb3VyY2UgfHwgY29udGVudC50YXJnZXQpIDsgZWxzZSB7XG4gICAgcmV0dXJuOyAvLyBubyBsYWJlbHMgPT4gbm8gY2FsY3NcbiAgfVxuXG4gIC8vIGFkZCBjZW50ZXIgcG9pbnQgdG8gc3R5bGUgc28gYm91bmRpbmcgYm94IGNhbGN1bGF0aW9ucyBjYW4gdXNlIGl0XG4gIC8vXG4gIHAgPSB7XG4gICAgeDogcnMubWlkWCxcbiAgICB5OiBycy5taWRZXG4gIH07XG4gIHZhciBzZXRScyA9IGZ1bmN0aW9uIHNldFJzKHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKSB7XG4gICAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgcHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpO1xuICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCBwcm9wTmFtZSwgcHJlZml4LCB2YWx1ZSk7XG4gIH07XG4gIHNldFJzKCdsYWJlbFgnLCBudWxsLCBwLngpO1xuICBzZXRScygnbGFiZWxZJywgbnVsbCwgcC55KTtcbiAgdmFyIG1pZEFuZ2xlID0gbGluZUFuZ2xlRnJvbURlbHRhKHJzLm1pZERpc3BYLCBycy5taWREaXNwWSk7XG4gIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIG51bGwsIG1pZEFuZ2xlKTtcbiAgdmFyIGNyZWF0ZUNvbnRyb2xQb2ludEluZm8gPSBmdW5jdGlvbiBjcmVhdGVDb250cm9sUG9pbnRJbmZvKCkge1xuICAgIGlmIChjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29udHJvbFBvaW50SW5mby5jYWNoZTtcbiAgICB9IC8vIHVzZSBjYWNoZSBzbyBvbmx5IDF4IHBlciBlZGdlXG5cbiAgICB2YXIgY3RybHB0cyA9IFtdO1xuXG4gICAgLy8gc3RvcmUgZWFjaCBjdHJscHQgaW5mbyBpbml0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICB2YXIgcDAgPSB7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgfTtcbiAgICAgIHZhciBwMSA9IHtcbiAgICAgICAgeDogcnMuYWxscHRzW2kgKyAyXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAzXVxuICAgICAgfTsgLy8gY3RybHB0XG4gICAgICB2YXIgcDIgPSB7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpICsgNF0sXG4gICAgICAgIHk6IHJzLmFsbHB0c1tpICsgNV1cbiAgICAgIH07XG4gICAgICBjdHJscHRzLnB1c2goe1xuICAgICAgICBwMDogcDAsXG4gICAgICAgIHAxOiBwMSxcbiAgICAgICAgcDI6IHAyLFxuICAgICAgICBzdGFydERpc3Q6IDAsXG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgc2VnbWVudHM6IFtdXG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGJwdHMgPSBfcC5yc3R5bGUuYmV6aWVyUHRzO1xuICAgIHZhciBuUHJvanMgPSByLmJlemllclByb2pQY3RzLmxlbmd0aDtcbiAgICBmdW5jdGlvbiBhZGRTZWdtZW50KGNwLCBwMCwgcDEsIHQwLCB0MSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGRpc3QocDAsIHAxKTtcbiAgICAgIHZhciBwcmV2U2VnbWVudCA9IGNwLnNlZ21lbnRzW2NwLnNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHNlZ21lbnQgPSB7XG4gICAgICAgIHAwOiBwMCxcbiAgICAgICAgcDE6IHAxLFxuICAgICAgICB0MDogdDAsXG4gICAgICAgIHQxOiB0MSxcbiAgICAgICAgc3RhcnREaXN0OiBwcmV2U2VnbWVudCA/IHByZXZTZWdtZW50LnN0YXJ0RGlzdCArIHByZXZTZWdtZW50Lmxlbmd0aCA6IDAsXG4gICAgICAgIGxlbmd0aDogbGVuZ3RoXG4gICAgICB9O1xuICAgICAgY3Auc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgIGNwLmxlbmd0aCArPSBsZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGVhY2ggY3RybHB0IHdpdGggc2VnbWVudCBpbmZvXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGN0cmxwdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgY3AgPSBjdHJscHRzW19pXTtcbiAgICAgIHZhciBwcmV2Q3AgPSBjdHJscHRzW19pIC0gMV07XG4gICAgICBpZiAocHJldkNwKSB7XG4gICAgICAgIGNwLnN0YXJ0RGlzdCA9IHByZXZDcC5zdGFydERpc3QgKyBwcmV2Q3AubGVuZ3RoO1xuICAgICAgfVxuICAgICAgYWRkU2VnbWVudChjcCwgY3AucDAsIGJwdHNbX2kgKiBuUHJvanNdLCAwLCByLmJlemllclByb2pQY3RzWzBdKTsgLy8gZmlyc3RcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuUHJvanMgLSAxOyBqKyspIHtcbiAgICAgICAgYWRkU2VnbWVudChjcCwgYnB0c1tfaSAqIG5Qcm9qcyArIGpdLCBicHRzW19pICogblByb2pzICsgaiArIDFdLCByLmJlemllclByb2pQY3RzW2pdLCByLmJlemllclByb2pQY3RzW2ogKyAxXSk7XG4gICAgICB9XG4gICAgICBhZGRTZWdtZW50KGNwLCBicHRzW19pICogblByb2pzICsgblByb2pzIC0gMV0sIGNwLnAyLCByLmJlemllclByb2pQY3RzW25Qcm9qcyAtIDFdLCAxKTsgLy8gbGFzdFxuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDb250cm9sUG9pbnRJbmZvLmNhY2hlID0gY3RybHB0cztcbiAgfTtcbiAgdmFyIGNhbGN1bGF0ZUVuZFByb2plY3Rpb24gPSBmdW5jdGlvbiBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKHByZWZpeCkge1xuICAgIHZhciBhbmdsZTtcbiAgICB2YXIgaXNTcmMgPSBwcmVmaXggPT09ICdzb3VyY2UnO1xuICAgIGlmICghY29udGVudFtwcmVmaXhdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLXRleHQtb2Zmc2V0JykucGZWYWx1ZTtcbiAgICBzd2l0Y2ggKHJzLmVkZ2VUeXBlKSB7XG4gICAgICBjYXNlICdzZWxmJzpcbiAgICAgIGNhc2UgJ2NvbXBvdW5kJzpcbiAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICBjYXNlICdtdWx0aWJlemllcic6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgY3BzID0gY3JlYXRlQ29udHJvbFBvaW50SW5mbygpO1xuICAgICAgICAgIHZhciBzZWxlY3RlZDtcbiAgICAgICAgICB2YXIgc3RhcnREaXN0ID0gMDtcbiAgICAgICAgICB2YXIgdG90YWxEaXN0ID0gMDtcblxuICAgICAgICAgIC8vIGZpbmQgdGhlIHNlZ21lbnQgd2UncmUgb25cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9jcCA9IGNwc1tpc1NyYyA/IGkgOiBjcHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfY3Auc2VnbWVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIF9zZWcgPSBfY3Auc2VnbWVudHNbaXNTcmMgPyBqIDogX2NwLnNlZ21lbnRzLmxlbmd0aCAtIDEgLSBqXTtcbiAgICAgICAgICAgICAgdmFyIGxhc3RTZWcgPSBpID09PSBjcHMubGVuZ3RoIC0gMSAmJiBqID09PSBfY3Auc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgc3RhcnREaXN0ID0gdG90YWxEaXN0O1xuICAgICAgICAgICAgICB0b3RhbERpc3QgKz0gX3NlZy5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmICh0b3RhbERpc3QgPj0gb2Zmc2V0IHx8IGxhc3RTZWcpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHtcbiAgICAgICAgICAgICAgICAgIGNwOiBfY3AsXG4gICAgICAgICAgICAgICAgICBzZWdtZW50OiBfc2VnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY3AgPSBzZWxlY3RlZC5jcDtcbiAgICAgICAgICB2YXIgc2VnID0gc2VsZWN0ZWQuc2VnbWVudDtcbiAgICAgICAgICB2YXIgdFNlZ21lbnQgPSAob2Zmc2V0IC0gc3RhcnREaXN0KSAvIHNlZy5sZW5ndGg7XG4gICAgICAgICAgdmFyIHNlZ0R0ID0gc2VnLnQxIC0gc2VnLnQwO1xuICAgICAgICAgIHZhciB0ID0gaXNTcmMgPyBzZWcudDAgKyBzZWdEdCAqIHRTZWdtZW50IDogc2VnLnQxIC0gc2VnRHQgKiB0U2VnbWVudDtcbiAgICAgICAgICB0ID0gYm91bmQoMCwgdCwgMSk7XG4gICAgICAgICAgcCA9IHFiZXppZXJQdEF0KGNwLnAwLCBjcC5wMSwgY3AucDIsIHQpO1xuICAgICAgICAgIGFuZ2xlID0gYmV6aWVyQW5nbGUoY3AucDAsIGNwLnAxLCBjcC5wMiwgdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgIGNhc2UgJ3NlZ21lbnRzJzpcbiAgICAgIGNhc2UgJ2hheXN0YWNrJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBkID0gMCxcbiAgICAgICAgICAgIGRpLFxuICAgICAgICAgICAgZDA7XG4gICAgICAgICAgdmFyIHAwLCBwMTtcbiAgICAgICAgICB2YXIgbCA9IHJzLmFsbHB0cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyICsgMyA8IGw7IF9pMiArPSAyKSB7XG4gICAgICAgICAgICBpZiAoaXNTcmMpIHtcbiAgICAgICAgICAgICAgcDAgPSB7XG4gICAgICAgICAgICAgICAgeDogcnMuYWxscHRzW19pMl0sXG4gICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW19pMiArIDFdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHAxID0ge1xuICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tfaTIgKyAyXSxcbiAgICAgICAgICAgICAgICB5OiBycy5hbGxwdHNbX2kyICsgM11cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHAwID0ge1xuICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tsIC0gMiAtIF9pMl0sXG4gICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW2wgLSAxIC0gX2kyXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBwMSA9IHtcbiAgICAgICAgICAgICAgICB4OiBycy5hbGxwdHNbbCAtIDQgLSBfaTJdLFxuICAgICAgICAgICAgICAgIHk6IHJzLmFsbHB0c1tsIC0gMyAtIF9pMl1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpID0gZGlzdChwMCwgcDEpO1xuICAgICAgICAgICAgZDAgPSBkO1xuICAgICAgICAgICAgZCArPSBkaTtcbiAgICAgICAgICAgIGlmIChkID49IG9mZnNldCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHBEID0gb2Zmc2V0IC0gZDA7XG4gICAgICAgICAgdmFyIF90ID0gcEQgLyBkaTtcbiAgICAgICAgICBfdCA9IGJvdW5kKDAsIF90LCAxKTtcbiAgICAgICAgICBwID0gbGluZUF0KHAwLCBwMSwgX3QpO1xuICAgICAgICAgIGFuZ2xlID0gbGluZUFuZ2xlKHAwLCBwMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UnMoJ2xhYmVsWCcsIHByZWZpeCwgcC54KTtcbiAgICBzZXRScygnbGFiZWxZJywgcHJlZml4LCBwLnkpO1xuICAgIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIHByZWZpeCwgYW5nbGUpO1xuICB9O1xuICBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKCdzb3VyY2UnKTtcbiAgY2FsY3VsYXRlRW5kUHJvamVjdGlvbigndGFyZ2V0Jyk7XG4gIHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoZWRnZSk7XG59O1xuQlJwJDkuYXBwbHlMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUpO1xuICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgdGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKGVsZSwgJ3NvdXJjZScpO1xuICAgIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUsICd0YXJnZXQnKTtcbiAgfVxufTtcbkJScCQ5LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgdGV4dCA9IHRoaXMuZ2V0TGFiZWxUZXh0KGVsZSwgcHJlZml4KTtcbiAgdmFyIGxhYmVsRGltcyA9IHRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGVsZSwgdGV4dCk7XG4gIHZhciBsaW5lSGVpZ2h0ID0gZWxlLnBzdHlsZSgnbGluZS1oZWlnaHQnKS5wZlZhbHVlO1xuICB2YXIgdGV4dFdyYXAgPSBlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS5zdHJWYWx1ZTtcbiAgdmFyIGxpbmVzID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgcHJlZml4KSB8fCBbXTtcbiAgdmFyIG51bUxpbmVzID0gdGV4dFdyYXAgIT09ICd3cmFwJyA/IDEgOiBNYXRoLm1heChsaW5lcy5sZW5ndGgsIDEpO1xuICB2YXIgbm9ybVBlckxpbmVIZWlnaHQgPSBsYWJlbERpbXMuaGVpZ2h0IC8gbnVtTGluZXM7XG4gIHZhciBsYWJlbExpbmVIZWlnaHQgPSBub3JtUGVyTGluZUhlaWdodCAqIGxpbmVIZWlnaHQ7XG4gIHZhciB3aWR0aCA9IGxhYmVsRGltcy53aWR0aDtcbiAgdmFyIGhlaWdodCA9IGxhYmVsRGltcy5oZWlnaHQgKyAobnVtTGluZXMgLSAxKSAqIChsaW5lSGVpZ2h0IC0gMSkgKiBub3JtUGVyTGluZUhlaWdodDtcbiAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgsIGhlaWdodCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbEhlaWdodCcsIHByZWZpeCwgaGVpZ2h0KTtcbiAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCwgbGFiZWxMaW5lSGVpZ2h0KTtcbn07XG5CUnAkOS5nZXRMYWJlbFRleHQgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcGZkID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwZmQgKyAnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgdmFyIHRleHRUcmFuc2Zvcm0gPSBlbGUucHN0eWxlKCd0ZXh0LXRyYW5zZm9ybScpLnZhbHVlO1xuICB2YXIgcnNjcmF0Y2ggPSBmdW5jdGlvbiByc2NyYXRjaChwcm9wTmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBmb3IgZW1wdHkgdGV4dCwgc2tpcCBhbGwgcHJvY2Vzc2luZ1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ25vbmUnKSA7IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ3VwcGVyY2FzZScpIHtcbiAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ2xvd2VyY2FzZScpIHtcbiAgICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHZhciB3cmFwU3R5bGUgPSBlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS52YWx1ZTtcbiAgaWYgKHdyYXBTdHlsZSA9PT0gJ3dyYXAnKSB7XG4gICAgdmFyIGxhYmVsS2V5ID0gcnNjcmF0Y2goJ2xhYmVsS2V5Jyk7XG5cbiAgICAvLyBzYXZlIHJlY2FsYyBpZiB0aGUgbGFiZWwgaXMgdGhlIHNhbWUgYXMgYmVmb3JlXG4gICAgaWYgKGxhYmVsS2V5ICE9IG51bGwgJiYgcnNjcmF0Y2goJ2xhYmVsV3JhcEtleScpID09PSBsYWJlbEtleSkge1xuICAgICAgcmV0dXJuIHJzY3JhdGNoKCdsYWJlbFdyYXBDYWNoZWRUZXh0Jyk7XG4gICAgfVxuICAgIHZhciB6d3NwID0gXCJcXHUyMDBCXCI7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIG1heFcgPSBlbGUucHN0eWxlKCd0ZXh0LW1heC13aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIG92ZXJmbG93ID0gZWxlLnBzdHlsZSgndGV4dC1vdmVyZmxvdy13cmFwJykudmFsdWU7XG4gICAgdmFyIG92ZXJmbG93QW55ID0gb3ZlcmZsb3cgPT09ICdhbnl3aGVyZSc7XG4gICAgdmFyIHdyYXBwZWRMaW5lcyA9IFtdO1xuICAgIHZhciBzZXBhcmF0b3JSZWdleCA9IC9bXFxzXFx1MjAwYl0rfCQvZzsgLy8gSW5jbHVkZSBlbmQgb2Ygc3RyaW5nIHRvIGFkZCBsYXN0IHdvcmRcblxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIHZhciBsaW5lID0gbGluZXNbbF07XG4gICAgICB2YXIgbGluZURpbXMgPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGxpbmUpO1xuICAgICAgdmFyIGxpbmVXID0gbGluZURpbXMud2lkdGg7XG4gICAgICBpZiAob3ZlcmZsb3dBbnkpIHtcbiAgICAgICAgdmFyIHByb2Nlc3NlZExpbmUgPSBsaW5lLnNwbGl0KCcnKS5qb2luKHp3c3ApO1xuICAgICAgICBsaW5lID0gcHJvY2Vzc2VkTGluZTtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lVyA+IG1heFcpIHtcbiAgICAgICAgLy8gbGluZSBpcyB0b28gbG9uZ1xuICAgICAgICB2YXIgc2VwYXJhdG9yTWF0Y2hlcyA9IGxpbmUubWF0Y2hBbGwoc2VwYXJhdG9yUmVnZXgpO1xuICAgICAgICB2YXIgc3VibGluZSA9ICcnO1xuICAgICAgICB2YXIgcHJldmlvdXNJbmRleCA9IDA7XG4gICAgICAgIC8vIEFkZCBmYWtlIG1hdGNoXG4gICAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzZXBhcmF0b3JNYXRjaGVzKSxcbiAgICAgICAgICBfc3RlcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRvck1hdGNoID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICB2YXIgd29yZFNlcGFyYXRvciA9IHNlcGFyYXRvck1hdGNoWzBdO1xuICAgICAgICAgICAgdmFyIHdvcmQgPSBsaW5lLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBzZXBhcmF0b3JNYXRjaC5pbmRleCk7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gc2VwYXJhdG9yTWF0Y2guaW5kZXggKyB3b3JkU2VwYXJhdG9yLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB0ZXN0TGluZSA9IHN1YmxpbmUubGVuZ3RoID09PSAwID8gd29yZCA6IHN1YmxpbmUgKyB3b3JkICsgd29yZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIHZhciB0ZXN0RGltcyA9IHRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGVsZSwgdGVzdExpbmUpO1xuICAgICAgICAgICAgdmFyIHRlc3RXID0gdGVzdERpbXMud2lkdGg7XG4gICAgICAgICAgICBpZiAodGVzdFcgPD0gbWF4Vykge1xuICAgICAgICAgICAgICAvLyB3b3JkIGZpdHMgb24gY3VycmVudCBsaW5lXG4gICAgICAgICAgICAgIHN1YmxpbmUgKz0gd29yZCArIHdvcmRTZXBhcmF0b3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB3b3JkIHN0YXJ0cyBuZXcgbGluZVxuICAgICAgICAgICAgICBpZiAoc3VibGluZSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1YmxpbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN1YmxpbmUgPSB3b3JkICsgd29yZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiB0aGVyZSdzIHJlbWFpbmluZyB0ZXh0LCBwdXQgaXQgaW4gYSB3cmFwcGVkIGxpbmVcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VibGluZS5tYXRjaCgvXltcXHNcXHUyMDBiXSskLykpIHtcbiAgICAgICAgICB3cmFwcGVkTGluZXMucHVzaChzdWJsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGluZSBpcyBhbHJlYWR5IHNob3J0IGVub3VnaFxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICB9IC8vIGZvclxuXG4gICAgcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgd3JhcHBlZExpbmVzKTtcbiAgICB0ZXh0ID0gcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZFRleHQnLCB3cmFwcGVkTGluZXMuam9pbignXFxuJykpO1xuICAgIHJzY3JhdGNoKCdsYWJlbFdyYXBLZXknLCBsYWJlbEtleSk7XG4gIH0gZWxzZSBpZiAod3JhcFN0eWxlID09PSAnZWxsaXBzaXMnKSB7XG4gICAgdmFyIF9tYXhXID0gZWxlLnBzdHlsZSgndGV4dC1tYXgtd2lkdGgnKS5wZlZhbHVlO1xuICAgIHZhciBlbGxpcHNpemVkID0gJyc7XG4gICAgdmFyIGVsbGlwc2lzID0gXCJcXHUyMDI2XCI7XG4gICAgdmFyIGluY0xhc3RDaCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIHRleHQpLndpZHRoIDwgX21heFcpIHtcbiAgICAgIC8vIHRoZSBsYWJlbCBhbHJlYWR5IGZpdHNcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3aWR0aFdpdGhOZXh0Q2ggPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGVsbGlwc2l6ZWQgKyB0ZXh0W2ldICsgZWxsaXBzaXMpLndpZHRoO1xuICAgICAgaWYgKHdpZHRoV2l0aE5leHRDaCA+IF9tYXhXKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZWxsaXBzaXplZCArPSB0ZXh0W2ldO1xuICAgICAgaWYgKGkgPT09IHRleHQubGVuZ3RoIC0gMSkge1xuICAgICAgICBpbmNMYXN0Q2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWluY0xhc3RDaCkge1xuICAgICAgZWxsaXBzaXplZCArPSBlbGxpcHNpcztcbiAgICB9XG4gICAgcmV0dXJuIGVsbGlwc2l6ZWQ7XG4gIH0gLy8gaWYgZWxsaXBzaXplXG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuQlJwJDkuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIganVzdGlmaWNhdGlvbiA9IGVsZS5wc3R5bGUoJ3RleHQtanVzdGlmaWNhdGlvbicpLnN0clZhbHVlO1xuICB2YXIgdGV4dEhhbGlnbiA9IGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykuc3RyVmFsdWU7XG4gIGlmIChqdXN0aWZpY2F0aW9uID09PSAnYXV0bycpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBzd2l0Y2ggKHRleHRIYWxpZ24pIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ganVzdGlmaWNhdGlvbjtcbiAgfVxufTtcbkJScCQ5LmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyA9IGZ1bmN0aW9uIChlbGUsIHRleHQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcbiAgdmFyIGRvY3VtZW50ID0gY29udGFpbmVyV2luZG93LmRvY3VtZW50O1xuICB2YXIgY2FjaGVLZXkgPSBoYXNoU3RyaW5nKHRleHQsIGVsZS5fcHJpdmF0ZS5sYWJlbERpbXNLZXkpO1xuICB2YXIgY2FjaGUgPSByLmxhYmVsRGltQ2FjaGUgfHwgKHIubGFiZWxEaW1DYWNoZSA9IFtdKTtcbiAgdmFyIGV4aXN0aW5nVmFsID0gY2FjaGVbY2FjaGVLZXldO1xuICBpZiAoZXhpc3RpbmdWYWwgIT0gbnVsbCkge1xuICAgIHJldHVybiBleGlzdGluZ1ZhbDtcbiAgfVxuICB2YXIgcGFkZGluZyA9IDA7IC8vIGFkZCBwYWRkaW5nIGFyb3VuZCB0ZXh0IGRpbXMsIGFzIHRoZSBtZWFzdXJlbWVudCBpc24ndCB0aGF0IGFjY3VyYXRlXG4gIHZhciBmU3R5bGUgPSBlbGUucHN0eWxlKCdmb250LXN0eWxlJykuc3RyVmFsdWU7XG4gIHZhciBzaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZTtcbiAgdmFyIGZhbWlseSA9IGVsZS5wc3R5bGUoJ2ZvbnQtZmFtaWx5Jykuc3RyVmFsdWU7XG4gIHZhciB3ZWlnaHQgPSBlbGUucHN0eWxlKCdmb250LXdlaWdodCcpLnN0clZhbHVlO1xuICB2YXIgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXM7XG4gIHZhciBjMmQgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7XG4gIGlmICghY2FudmFzKSB7XG4gICAgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjMmQgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB2YXIgZHMgPSBjYW52YXMuc3R5bGU7XG4gICAgZHMucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRzLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgZHMudG9wID0gJy05OTk5cHgnO1xuICAgIGRzLnpJbmRleCA9ICctMSc7XG4gICAgZHMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIGRzLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gIH1cbiAgYzJkLmZvbnQgPSBcIlwiLmNvbmNhdChmU3R5bGUsIFwiIFwiKS5jb25jYXQod2VpZ2h0LCBcIiBcIikuY29uY2F0KHNpemUsIFwicHggXCIpLmNvbmNhdChmYW1pbHkpO1xuICB2YXIgd2lkdGggPSAwO1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGluZSA9IGxpbmVzW2ldO1xuICAgIHZhciBtZXRyaWNzID0gYzJkLm1lYXN1cmVUZXh0KGxpbmUpO1xuICAgIHZhciB3ID0gTWF0aC5jZWlsKG1ldHJpY3Mud2lkdGgpO1xuICAgIHZhciBoID0gc2l6ZTtcbiAgICB3aWR0aCA9IE1hdGgubWF4KHcsIHdpZHRoKTtcbiAgICBoZWlnaHQgKz0gaDtcbiAgfVxuICB3aWR0aCArPSBwYWRkaW5nO1xuICBoZWlnaHQgKz0gcGFkZGluZztcbiAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5CUnAkOS5jYWxjdWxhdGVMYWJlbEFuZ2xlID0gZnVuY3Rpb24gKGVsZSwgcHJlZml4KSB7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gIHZhciBwcmVmaXhEYXNoID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gIHZhciByb3QgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1yb3RhdGlvbicpO1xuICB2YXIgcm90U3RyID0gcm90LnN0clZhbHVlO1xuICBpZiAocm90U3RyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChpc0VkZ2UgJiYgcm90U3RyID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICByZXR1cm4gcnMubGFiZWxBdXRvQW5nbGU7XG4gIH0gZWxzZSBpZiAocm90U3RyID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcm90LnBmVmFsdWU7XG4gIH1cbn07XG5CUnAkOS5jYWxjdWxhdGVMYWJlbEFuZ2xlcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICBycy5sYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSk7XG4gIGlmIChpc0VkZ2UpIHtcbiAgICBycy5zb3VyY2VMYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSwgJ3NvdXJjZScpO1xuICAgIHJzLnRhcmdldExhYmVsQW5nbGUgPSByLmNhbGN1bGF0ZUxhYmVsQW5nbGUoZWxlLCAndGFyZ2V0Jyk7XG4gIH1cbn07XG5cbnZhciBCUnAkOCA9IHt9O1xudmFyIFRPT19TTUFMTF9DVVRfUkVDVCA9IDI4O1xudmFyIHdhcm5lZEN1dFJlY3QgPSBmYWxzZTtcbkJScCQ4LmdldE5vZGVTaGFwZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIHNoYXBlID0gbm9kZS5wc3R5bGUoJ3NoYXBlJykudmFsdWU7XG4gIGlmIChzaGFwZSA9PT0gJ2N1dHJlY3RhbmdsZScgJiYgKG5vZGUud2lkdGgoKSA8IFRPT19TTUFMTF9DVVRfUkVDVCB8fCBub2RlLmhlaWdodCgpIDwgVE9PX1NNQUxMX0NVVF9SRUNUKSkge1xuICAgIGlmICghd2FybmVkQ3V0UmVjdCkge1xuICAgICAgd2FybignVGhlIGBjdXRyZWN0YW5nbGVgIG5vZGUgc2hhcGUgY2FuIG5vdCBiZSB1c2VkIGF0IHNtYWxsIHNpemVzIHNvIGByZWN0YW5nbGVgIGlzIHVzZWQgaW5zdGVhZCcpO1xuICAgICAgd2FybmVkQ3V0UmVjdCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgfVxuICBpZiAobm9kZS5pc1BhcmVudCgpKSB7XG4gICAgaWYgKHNoYXBlID09PSAncmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ3JvdW5kcmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ3JvdW5kLXJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdjdXRyZWN0YW5nbGUnIHx8IHNoYXBlID09PSAnY3V0LXJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdiYXJyZWwnKSB7XG4gICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgICB9XG4gIH1cbiAgaWYgKHNoYXBlID09PSAncG9seWdvbicpIHtcbiAgICB2YXIgcG9pbnRzID0gbm9kZS5wc3R5bGUoJ3NoYXBlLXBvbHlnb24tcG9pbnRzJykudmFsdWU7XG4gICAgcmV0dXJuIHIubm9kZVNoYXBlcy5tYWtlUG9seWdvbihwb2ludHMpLm5hbWU7XG4gIH1cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxudmFyIEJScCQ3ID0ge307XG5CUnAkNy5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3kgPSB0aGlzLmN5O1xuICB2YXIgZWxlc1RvVXBkYXRlID0gY3kuY29sbGVjdGlvbigpO1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBlbnF1ZXVlID0gZnVuY3Rpb24gZW5xdWV1ZShlbGVzKSB7XG4gICAgdmFyIGRpcnR5U3R5bGVDYWNoZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgZWxlc1RvVXBkYXRlLm1lcmdlKGVsZXMpO1xuICAgIGlmIChkaXJ0eVN0eWxlQ2FjaGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgICAgICAgcnN0eWxlLmNsZWFuID0gZmFsc2U7XG4gICAgICAgIHJzdHlsZS5jbGVhbkNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgci5iaW5kZXIoY3kpLm9uKCdib3VuZHMuKiBkaXJ0eS4qJywgZnVuY3Rpb24gb25EaXJ0eUJvdW5kcyhlKSB7XG4gICAgdmFyIGVsZSA9IGUudGFyZ2V0O1xuICAgIGVucXVldWUoZWxlKTtcbiAgfSkub24oJ3N0eWxlLiogYmFja2dyb3VuZC4qJywgZnVuY3Rpb24gb25EaXJ0eVN0eWxlKGUpIHtcbiAgICB2YXIgZWxlID0gZS50YXJnZXQ7XG4gICAgZW5xdWV1ZShlbGUsIGZhbHNlKTtcbiAgfSk7XG4gIHZhciB1cGRhdGVFbGVDYWxjcyA9IGZ1bmN0aW9uIHVwZGF0ZUVsZUNhbGNzKHdpbGxEcmF3KSB7XG4gICAgaWYgKHdpbGxEcmF3KSB7XG4gICAgICB2YXIgZm5zID0gci5vblVwZGF0ZUVsZUNhbGNzRm5zO1xuXG4gICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gaGF2ZSB1cC10by1kYXRlIHN0eWxlIChlLmcuIHN0eWxlc2hlZXQgbWFwcGVycylcbiAgICAgIC8vIGJlZm9yZSBjYWxjdWxhdGluZyByZW5kZXJlZCBzdHlsZSAoYW5kIHBzdHlsZSBtaWdodCBub3QgYmUgY2FsbGVkIHlldClcbiAgICAgIGVsZXNUb1VwZGF0ZS5jbGVhblN0eWxlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXNUb1VwZGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1RvVXBkYXRlW2ldO1xuICAgICAgICB2YXIgcnN0eWxlID0gZWxlLl9wcml2YXRlLnJzdHlsZTtcbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSAmJiAhcnN0eWxlLmNsZWFuQ29ubmVjdGVkKSB7XG4gICAgICAgICAgZW5xdWV1ZShlbGUuY29ubmVjdGVkRWRnZXMoKSk7XG4gICAgICAgICAgcnN0eWxlLmNsZWFuQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZucykge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZm5zLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIHZhciBmbiA9IGZuc1tfaV07XG4gICAgICAgICAgZm4od2lsbERyYXcsIGVsZXNUb1VwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVsZXNUb1VwZGF0ZSk7XG4gICAgICBlbGVzVG9VcGRhdGUgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9O1xuICByLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgIHVwZGF0ZUVsZUNhbGNzKHRydWUpO1xuICB9O1xuICByLmJlZm9yZVJlbmRlcih1cGRhdGVFbGVDYWxjcywgci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKTtcbn07XG5CUnAkNy5vblVwZGF0ZUVsZUNhbGNzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBmbnMgPSB0aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnMgPSB0aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnMgfHwgW107XG4gIGZucy5wdXNoKGZuKTtcbn07XG5CUnAkNy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUgPSBmdW5jdGlvbiAoZWxlcywgdXNlQ2FjaGUpIHtcbiAgdmFyIGlzQ2xlYW5Db25uZWN0ZWQgPSBmdW5jdGlvbiBpc0NsZWFuQ29ubmVjdGVkKGVsZSkge1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkO1xuICB9O1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgdmFyIG5vZGVzID0gW107XG5cbiAgLy8gdGhlIHJlbmRlcmVyIGNhbid0IGJlIHVzZWQgZm9yIGNhbGNzIHdoZW4gZGVzdHJveWVkLCBlLmcuIGVsZS5ib3VuZGluZ0JveCgpXG4gIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVzZSBjYWNoZSBieSBkZWZhdWx0IGZvciBwZXJmXG4gIGlmICh1c2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdXNlQ2FjaGUgPSB0cnVlO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuXG4gICAgLy8gYW4gZWRnZSBtYXkgYmUgaW1wbGljaXRseSBkaXJ0eSBiL2Mgb2Ygb25lIG9mIGl0cyBjb25uZWN0ZWQgbm9kZXNcbiAgICAvLyAoYW5kIGEgcmVxdWVzdCBmb3IgcmVjYWxjIG1heSBjb21lIGluIGJldHdlZW4gZnJhbWVzKVxuICAgIGlmIChlbGUuaXNFZGdlKCkgJiYgKCFpc0NsZWFuQ29ubmVjdGVkKGVsZS5zb3VyY2UoKSkgfHwgIWlzQ2xlYW5Db25uZWN0ZWQoZWxlLnRhcmdldCgpKSkpIHtcbiAgICAgIHJzdHlsZS5jbGVhbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG9ubHkgdXBkYXRlIGlmIGRpcnR5IGFuZCBpbiBncmFwaFxuICAgIGlmICh1c2VDYWNoZSAmJiByc3R5bGUuY2xlYW4gfHwgZWxlLnJlbW92ZWQoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gb25seSB1cGRhdGUgaWYgbm90IGRpc3BsYXk6IG5vbmVcbiAgICBpZiAoZWxlLnBzdHlsZSgnZGlzcGxheScpLnZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoX3AuZ3JvdXAgPT09ICdub2RlcycpIHtcbiAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZWRnZXNcbiAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICB9XG4gICAgcnN0eWxlLmNsZWFuID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBub2RlIGRhdGEgZnJvbSBwcm9qZWN0aW9uc1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2Rlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9lbGUgPSBub2Rlc1tfaTJdO1xuICAgIHZhciBfcDIgPSBfZWxlLl9wcml2YXRlO1xuICAgIHZhciBfcnN0eWxlID0gX3AyLnJzdHlsZTtcbiAgICB2YXIgcG9zID0gX2VsZS5wb3NpdGlvbigpO1xuICAgIHRoaXMucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uKF9lbGUpO1xuICAgIF9yc3R5bGUubm9kZVggPSBwb3MueDtcbiAgICBfcnN0eWxlLm5vZGVZID0gcG9zLnk7XG4gICAgX3JzdHlsZS5ub2RlVyA9IF9lbGUucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gICAgX3JzdHlsZS5ub2RlSCA9IF9lbGUucHN0eWxlKCdoZWlnaHQnKS5wZlZhbHVlO1xuICB9XG4gIHRoaXMucmVjYWxjdWxhdGVFZGdlUHJvamVjdGlvbnMoZWRnZXMpO1xuXG4gIC8vIHVwZGF0ZSBlZGdlIGRhdGEgZnJvbSBwcm9qZWN0aW9uc1xuICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBlZGdlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgdmFyIF9lbGUyID0gZWRnZXNbX2kzXTtcbiAgICB2YXIgX3AzID0gX2VsZTIuX3ByaXZhdGU7XG4gICAgdmFyIF9yc3R5bGUyID0gX3AzLnJzdHlsZTtcbiAgICB2YXIgcnMgPSBfcDMucnNjcmF0Y2g7XG5cbiAgICAvLyB1cGRhdGUgcnN0eWxlIHBvc2l0aW9uc1xuICAgIF9yc3R5bGUyLnNyY1ggPSBycy5hcnJvd1N0YXJ0WDtcbiAgICBfcnN0eWxlMi5zcmNZID0gcnMuYXJyb3dTdGFydFk7XG4gICAgX3JzdHlsZTIudGd0WCA9IHJzLmFycm93RW5kWDtcbiAgICBfcnN0eWxlMi50Z3RZID0gcnMuYXJyb3dFbmRZO1xuICAgIF9yc3R5bGUyLm1pZFggPSBycy5taWRYO1xuICAgIF9yc3R5bGUyLm1pZFkgPSBycy5taWRZO1xuICAgIF9yc3R5bGUyLmxhYmVsQW5nbGUgPSBycy5sYWJlbEFuZ2xlO1xuICAgIF9yc3R5bGUyLnNvdXJjZUxhYmVsQW5nbGUgPSBycy5zb3VyY2VMYWJlbEFuZ2xlO1xuICAgIF9yc3R5bGUyLnRhcmdldExhYmVsQW5nbGUgPSBycy50YXJnZXRMYWJlbEFuZ2xlO1xuICB9XG59O1xuXG52YXIgQlJwJDYgPSB7fTtcbkJScCQ2LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlcyA9IHRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7XG4gIGlmICghZWxlcykge1xuICAgIC8vIGp1c3QgbGV0IHRoaXMgYmUgcmVjYWxjdWxhdGVkIG9uIHRoZSBuZXh0IHogc29ydCB0aWNrXG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZXMuZHJhZyA9IFtdO1xuICBlbGVzLm5vbmRyYWcgPSBbXTtcbiAgdmFyIGdyYWJUYXJnZXRzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICBpZiAoZWxlLmdyYWJiZWQoKSAmJiAhZWxlLmlzUGFyZW50KCkpIHtcbiAgICAgIGdyYWJUYXJnZXRzLnB1c2goZWxlKTtcbiAgICB9IGVsc2UgaWYgKHJzLmluRHJhZ0xheWVyKSB7XG4gICAgICBlbGVzLmRyYWcucHVzaChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVzLm5vbmRyYWcucHVzaChlbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHB1dCB0aGUgZ3JhYiB0YXJnZXQgbm9kZXMgbGFzdCBzbyBpdCdzIG9uIHRvcCBvZiBpdHMgbmVpZ2hib3VyaG9vZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYWJUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IGdyYWJUYXJnZXRzW2ldO1xuICAgIGVsZXMuZHJhZy5wdXNoKGVsZSk7XG4gIH1cbn07XG5CUnAkNi5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2FjaGVkWlNvcnRlZEVsZXMgPSBudWxsO1xufTtcbkJScCQ2LmdldENhY2hlZFpTb3J0ZWRFbGVzID0gZnVuY3Rpb24gKGZvcmNlUmVjYWxjKSB7XG4gIGlmIChmb3JjZVJlY2FsYyB8fCAhdGhpcy5jYWNoZWRaU29ydGVkRWxlcykge1xuICAgIHZhciBlbGVzID0gdGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7XG4gICAgZWxlcy5zb3J0KHpJbmRleFNvcnQpO1xuICAgIGVsZXMuaW50ZXJhY3RpdmUgPSBlbGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmludGVyYWN0aXZlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5jYWNoZWRaU29ydGVkRWxlcyA9IGVsZXM7XG4gICAgdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpO1xuICB9IGVsc2Uge1xuICAgIGVsZXMgPSB0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO1xuICB9XG4gIHJldHVybiBlbGVzO1xufTtcblxudmFyIEJScCQ1ID0ge307XG5bQlJwJGUsIEJScCRkLCBCUnAkYywgQlJwJGIsIEJScCRhLCBCUnAkOSwgQlJwJDgsIEJScCQ3LCBCUnAkNl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKEJScCQ1LCBwcm9wcyk7XG59KTtcblxudmFyIEJScCQ0ID0ge307XG5CUnAkNC5nZXRDYWNoZWRJbWFnZSA9IGZ1bmN0aW9uICh1cmwsIGNyb3NzT3JpZ2luLCBvbkxvYWQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaW1hZ2VDYWNoZSA9IHIuaW1hZ2VDYWNoZSA9IHIuaW1hZ2VDYWNoZSB8fCB7fTtcbiAgdmFyIGNhY2hlID0gaW1hZ2VDYWNoZVt1cmxdO1xuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoIWNhY2hlLmltYWdlLmNvbXBsZXRlKSB7XG4gICAgICBjYWNoZS5pbWFnZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25Mb2FkKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlLmltYWdlO1xuICB9IGVsc2Uge1xuICAgIGNhY2hlID0gaW1hZ2VDYWNoZVt1cmxdID0gaW1hZ2VDYWNoZVt1cmxdIHx8IHt9O1xuICAgIHZhciBpbWFnZSA9IGNhY2hlLmltYWdlID0gbmV3IEltYWdlKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgaW1hZ2UuZXJyb3IgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgLy8gIzE1ODIgc2FmYXJpIGRvZXNuJ3QgbG9hZCBkYXRhIHVyaXMgd2l0aCBjcm9zc09yaWdpbiBwcm9wZXJseVxuICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM5NzhcbiAgICB2YXIgZGF0YVVyaVByZWZpeCA9ICdkYXRhOic7XG4gICAgdmFyIGlzRGF0YVVyaSA9IHVybC5zdWJzdHJpbmcoMCwgZGF0YVVyaVByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGRhdGFVcmlQcmVmaXg7XG4gICAgaWYgKCFpc0RhdGFVcmkpIHtcbiAgICAgIC8vIGlmIGNyb3Nzb3JpZ2luIGlzICdudWxsJyhzdHJpbmdpZmllZCksIHRoZW4gbWFudWFsbHkgc2V0IGl0IHRvIG51bGwgXG4gICAgICBjcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luID09PSAnbnVsbCcgPyBudWxsIDogY3Jvc3NPcmlnaW47XG4gICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luOyAvLyBwcmV2ZW50IHRhaW50ZWQgY2FudmFzXG4gICAgfVxuXG4gICAgaW1hZ2Uuc3JjID0gdXJsO1xuICAgIHJldHVybiBpbWFnZTtcbiAgfVxufTtcblxudmFyIEJScCQzID0ge307XG5cbi8qIGdsb2JhbCBkb2N1bWVudCwgUmVzaXplT2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXIgKi9cblxuQlJwJDMucmVnaXN0ZXJCaW5kaW5nID0gZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMsIFsxXSk7IC8vIGNvcHlcbiAgdmFyIGIgPSB0aGlzLmJpbmRlcih0YXJnZXQpO1xuICByZXR1cm4gYi5vbi5hcHBseShiLCBhcmdzKTtcbn07XG5CUnAkMy5iaW5kZXIgPSBmdW5jdGlvbiAodGd0KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRhaW5lcldpbmRvdyA9IHIuY3kud2luZG93KCk7XG4gIHZhciB0Z3RJc0RvbSA9IHRndCA9PT0gY29udGFpbmVyV2luZG93IHx8IHRndCA9PT0gY29udGFpbmVyV2luZG93LmRvY3VtZW50IHx8IHRndCA9PT0gY29udGFpbmVyV2luZG93LmRvY3VtZW50LmJvZHkgfHwgZG9tRWxlbWVudCh0Z3QpO1xuICBpZiAoci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMgPT0gbnVsbCkge1xuICAgIC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvRXZlbnRMaXN0ZW5lck9wdGlvbnMvYmxvYi9naC1wYWdlcy9leHBsYWluZXIubWQjZmVhdHVyZS1kZXRlY3Rpb25cbiAgICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG51bGwsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZFxuICAgIH1cbiAgICByLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cyA9IHN1cHBvcnRzUGFzc2l2ZTtcbiAgfVxuICB2YXIgb24gPSBmdW5jdGlvbiBvbihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBpZiAodGd0SXNEb20gJiYgci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMpIHtcbiAgICAgIC8vIHJlcGxhY2UgdXNlQ2FwdHVyZSB3LyBvcHRzIG9ialxuICAgICAgYXJnc1syXSA9IHtcbiAgICAgICAgY2FwdHVyZTogdXNlQ2FwdHVyZSAhPSBudWxsID8gdXNlQ2FwdHVyZSA6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgb25jZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIHIuYmluZGluZ3MucHVzaCh7XG4gICAgICB0YXJnZXQ6IHRndCxcbiAgICAgIGFyZ3M6IGFyZ3NcbiAgICB9KTtcbiAgICAodGd0LmFkZEV2ZW50TGlzdGVuZXIgfHwgdGd0Lm9uKS5hcHBseSh0Z3QsIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4ge1xuICAgIG9uOiBvbixcbiAgICBhZGRFdmVudExpc3RlbmVyOiBvbixcbiAgICBhZGRMaXN0ZW5lcjogb24sXG4gICAgYmluZDogb25cbiAgfTtcbn07XG5CUnAkMy5ub2RlSXNEcmFnZ2FibGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLmlzTm9kZSgpICYmICFub2RlLmxvY2tlZCgpICYmIG5vZGUuZ3JhYmJhYmxlKCk7XG59O1xuQlJwJDMubm9kZUlzR3JhYmJhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIHRoaXMubm9kZUlzRHJhZ2dhYmxlKG5vZGUpICYmIG5vZGUuaW50ZXJhY3RpdmUoKTtcbn07XG5CUnAkMy5sb2FkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSByLmN5LndpbmRvdygpO1xuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uIGlzU2VsZWN0ZWQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5zZWxlY3RlZCgpO1xuICB9O1xuICB2YXIgdHJpZ2dlckV2ZW50cyA9IGZ1bmN0aW9uIHRyaWdnZXJFdmVudHModGFyZ2V0LCBuYW1lcywgZSwgcG9zaXRpb24pIHtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgIHRhcmdldCA9IHIuY3k7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgICB0YXJnZXQuZW1pdCh7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6IG5hbWUsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICB2YXIgaXNNdWx0U2VsS2V5RG93biA9IGZ1bmN0aW9uIGlzTXVsdFNlbEtleURvd24oZSkge1xuICAgIHJldHVybiBlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSB8fCBlLmN0cmxLZXk7IC8vIG1heWJlIGUuYWx0S2V5XG4gIH07XG5cbiAgdmFyIGFsbG93UGFubmluZ1Bhc3N0aHJvdWdoID0gZnVuY3Rpb24gYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2goZG93biwgZG93bnMpIHtcbiAgICB2YXIgYWxsb3dQYXNzdGhyb3VnaCA9IHRydWU7XG4gICAgaWYgKHIuY3kuaGFzQ29tcG91bmROb2RlcygpICYmIGRvd24gJiYgZG93bi5wYW5uYWJsZSgpKSB7XG4gICAgICAvLyBhIGdyYWJiYWJsZSBjb21wb3VuZCBub2RlIGJlbG93IHRoZSBlbGUgPT4gbm8gcGFzc3Rocm91Z2ggcGFubmluZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGRvd25zICYmIGkgPCBkb3ducy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZG93biA9IGRvd25zW2ldO1xuXG4gICAgICAgIC8vaWYgYW55IHBhcmVudCBub2RlIGluIGV2ZW50IGhpZXJhcmNoeSBpc24ndCBwYW5uYWJsZSwgcmVqZWN0IHBhc3N0aHJvdWdoXG4gICAgICAgIGlmIChkb3duLmlzTm9kZSgpICYmIGRvd24uaXNQYXJlbnQoKSAmJiAhZG93bi5wYW5uYWJsZSgpKSB7XG4gICAgICAgICAgYWxsb3dQYXNzdGhyb3VnaCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbG93UGFzc3Rocm91Z2ggPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYWxsb3dQYXNzdGhyb3VnaDtcbiAgfTtcbiAgdmFyIHNldEdyYWJiZWQgPSBmdW5jdGlvbiBzZXRHcmFiYmVkKGVsZSkge1xuICAgIGVsZVswXS5fcHJpdmF0ZS5ncmFiYmVkID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIHNldEZyZWVkID0gZnVuY3Rpb24gc2V0RnJlZWQoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLmdyYWJiZWQgPSBmYWxzZTtcbiAgfTtcbiAgdmFyIHNldEluRHJhZ0xheWVyID0gZnVuY3Rpb24gc2V0SW5EcmFnTGF5ZXIoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyID0gdHJ1ZTtcbiAgfTtcbiAgdmFyIHNldE91dERyYWdMYXllciA9IGZ1bmN0aW9uIHNldE91dERyYWdMYXllcihlbGUpIHtcbiAgICBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXIgPSBmYWxzZTtcbiAgfTtcbiAgdmFyIHNldEdyYWJUYXJnZXQgPSBmdW5jdGlvbiBzZXRHcmFiVGFyZ2V0KGVsZSkge1xuICAgIGVsZVswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQgPSB0cnVlO1xuICB9O1xuICB2YXIgcmVtb3ZlR3JhYlRhcmdldCA9IGZ1bmN0aW9uIHJlbW92ZUdyYWJUYXJnZXQoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldCA9IGZhbHNlO1xuICB9O1xuICB2YXIgYWRkVG9EcmFnTGlzdCA9IGZ1bmN0aW9uIGFkZFRvRHJhZ0xpc3QoZWxlLCBvcHRzKSB7XG4gICAgdmFyIGxpc3QgPSBvcHRzLmFkZFRvTGlzdDtcbiAgICB2YXIgbGlzdEhhc0VsZSA9IGxpc3QuaGFzKGVsZSk7XG4gICAgaWYgKCFsaXN0SGFzRWxlICYmIGVsZS5ncmFiYmFibGUoKSAmJiAhZWxlLmxvY2tlZCgpKSB7XG4gICAgICBsaXN0Lm1lcmdlKGVsZSk7XG4gICAgICBzZXRHcmFiYmVkKGVsZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggY2hpbGQgbm9kZXMgYW5kIGlubmVyIGVkZ2VzXG4gIC8vIG9mIGEgY29tcG91bmQgbm9kZSB0byBiZSBkcmFnZ2VkIGFzIHdlbGwgYXMgdGhlIGdyYWJiZWQgYW5kIHNlbGVjdGVkIG5vZGVzXG4gIHZhciBhZGREZXNjZW5kYW50c1RvRHJhZyA9IGZ1bmN0aW9uIGFkZERlc2NlbmRhbnRzVG9EcmFnKG5vZGUsIG9wdHMpIHtcbiAgICBpZiAoIW5vZGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdHMuaW5EcmFnTGF5ZXIgPT0gbnVsbCAmJiBvcHRzLmFkZFRvTGlzdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBub3RoaW5nIHRvIGRvXG5cbiAgICB2YXIgaW5uZXJOb2RlcyA9IG5vZGUuZGVzY2VuZGFudHMoKTtcbiAgICBpZiAob3B0cy5pbkRyYWdMYXllcikge1xuICAgICAgaW5uZXJOb2Rlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIGlubmVyTm9kZXMuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICB9XG4gICAgaWYgKG9wdHMuYWRkVG9MaXN0KSB7XG4gICAgICBhZGRUb0RyYWdMaXN0KGlubmVyTm9kZXMsIG9wdHMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhZGRzIHRoZSBnaXZlbiBub2RlcyBhbmQgaXRzIG5laWdoYm91cmhvb2QgdG8gdGhlIGRyYWcgbGF5ZXJcbiAgdmFyIGFkZE5vZGVzVG9EcmFnID0gZnVuY3Rpb24gYWRkTm9kZXNUb0RyYWcobm9kZXMsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IG5vZGVzLmN5KCkuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICBub2Rlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIG5vZGVzLm5laWdoYm9yaG9vZCgpLnN0ZEZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHJldHVybiAhaGFzQ29tcG91bmROb2RlcyB8fCBlbGUuaXNFZGdlKCk7XG4gICAgICB9KS5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICB9XG4gICAgaWYgKG9wdHMuYWRkVG9MaXN0KSB7XG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgYWRkVG9EcmFnTGlzdChlbGUsIG9wdHMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGFkZERlc2NlbmRhbnRzVG9EcmFnKG5vZGVzLCBvcHRzKTsgLy8gYWx3YXlzIGFkZCB0byBkcmFnXG5cbiAgICAvLyBhbHNvIGFkZCBub2RlcyBhbmQgZWRnZXMgcmVsYXRlZCB0byB0aGUgdG9wbW9zdCBhbmNlc3RvclxuICAgIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyKG5vZGVzLCB7XG4gICAgICBpbkRyYWdMYXllcjogb3B0cy5pbkRyYWdMYXllclxuICAgIH0pO1xuICAgIHIudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKTtcbiAgfTtcbiAgdmFyIGFkZE5vZGVUb0RyYWcgPSBhZGROb2Rlc1RvRHJhZztcbiAgdmFyIGZyZWVEcmFnZ2VkRWxlbWVudHMgPSBmdW5jdGlvbiBmcmVlRHJhZ2dlZEVsZW1lbnRzKGdyYWJiZWRFbGVzKSB7XG4gICAgaWYgKCFncmFiYmVkRWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGp1c3QgZ28gb3ZlciBhbGwgZWxlbWVudHMgcmF0aGVyIHRoYW4gZG9pbmcgYSBidW5jaCBvZiAocG9zc2libHkgZXhwZW5zaXZlKSB0cmF2ZXJzYWxzXG4gICAgci5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgc2V0RnJlZWQoZWxlKTtcbiAgICAgIHNldE91dERyYWdMYXllcihlbGUpO1xuICAgICAgcmVtb3ZlR3JhYlRhcmdldChlbGUpO1xuICAgIH0pO1xuICAgIHIudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKTtcbiAgfTtcblxuICAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGFuY2VzdG9yIG5vZGVzIGFuZCBlZGdlcyBzaG91bGQgZ29cbiAgLy8gdG8gdGhlIGRyYWcgbGF5ZXIgKG9yIHNob3VsZCBiZSByZW1vdmVkIGZyb20gZHJhZyBsYXllcikuXG4gIHZhciB1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciA9IGZ1bmN0aW9uIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyKG5vZGUsIG9wdHMpIHtcbiAgICBpZiAob3B0cy5pbkRyYWdMYXllciA9PSBudWxsICYmIG9wdHMuYWRkVG9MaXN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIG5vdGhpbmcgdG8gZG9cblxuICAgIGlmICghbm9kZS5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpbmQgdG9wLWxldmVsIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSBub2RlLmFuY2VzdG9ycygpLm9ycGhhbnMoKTtcblxuICAgIC8vIG5vIHBhcmVudCBub2RlOiBubyBub2RlcyB0byBhZGQgdG8gdGhlIGRyYWcgbGF5ZXJcbiAgICBpZiAocGFyZW50LnNhbWUobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5vZGVzID0gcGFyZW50LmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UocGFyZW50KS51bm1lcmdlKG5vZGUpLnVubWVyZ2Uobm9kZS5kZXNjZW5kYW50cygpKTtcbiAgICB2YXIgZWRnZXMgPSBub2Rlcy5jb25uZWN0ZWRFZGdlcygpO1xuICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICBlZGdlcy5mb3JFYWNoKHNldEluRHJhZ0xheWVyKTtcbiAgICAgIG5vZGVzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5hZGRUb0xpc3QpIHtcbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICBhZGRUb0RyYWdMaXN0KGVsZSwgb3B0cyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBibHVyQWN0aXZlRG9tRWxlbWVudCA9IGZ1bmN0aW9uIGJsdXJBY3RpdmVEb21FbGVtZW50KCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IG51bGwgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyICE9IG51bGwpIHtcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGhhdmVNdXRhdGlvbnNBcGkgPSB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBoYXZlUmVzaXplT2JzZXJ2ZXJBcGkgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8vIHdhdGNoIGZvciB3aGVuIHRoZSBjeSBjb250YWluZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb21cbiAgaWYgKGhhdmVNdXRhdGlvbnNBcGkpIHtcbiAgICByLnJlbW92ZU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dG5zKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dG5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBtdXRuID0gbXV0bnNbaV07XG4gICAgICAgIHZhciByTm9kZXMgPSBtdXRuLnJlbW92ZWROb2RlcztcbiAgICAgICAgaWYgKHJOb2Rlcykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgck5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgck5vZGUgPSByTm9kZXNbal07XG4gICAgICAgICAgICBpZiAock5vZGUgPT09IHIuY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgIHIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoci5jb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgci5yZW1vdmVPYnNlcnZlci5vYnNlcnZlKHIuY29udGFpbmVyLnBhcmVudE5vZGUsIHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdET01Ob2RlUmVtb3ZlZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxuICB2YXIgb25SZXNpemUgPSBkZWJvdW5jZV8xKGZ1bmN0aW9uICgpIHtcbiAgICByLmN5LnJlc2l6ZSgpO1xuICB9LCAxMDApO1xuICBpZiAoaGF2ZU11dGF0aW9uc0FwaSkge1xuICAgIHIuc3R5bGVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgci5zdHlsZU9ic2VydmVyLm9ic2VydmUoci5jb250YWluZXIsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGF1dG8gcmVzaXplXG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Jlc2l6ZScsIG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIGlmIChoYXZlUmVzaXplT2JzZXJ2ZXJBcGkpIHtcbiAgICByLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgci5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHIuY29udGFpbmVyKTtcbiAgfVxuICB2YXIgZm9yRWFjaFVwID0gZnVuY3Rpb24gZm9yRWFjaFVwKGRvbUVsZSwgZm4pIHtcbiAgICB3aGlsZSAoZG9tRWxlICE9IG51bGwpIHtcbiAgICAgIGZuKGRvbUVsZSk7XG4gICAgICBkb21FbGUgPSBkb21FbGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH07XG4gIHZhciBpbnZhbGlkYXRlQ29vcmRzID0gZnVuY3Rpb24gaW52YWxpZGF0ZUNvb3JkcygpIHtcbiAgICByLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpO1xuICB9O1xuICBmb3JFYWNoVXAoci5jb250YWluZXIsIGZ1bmN0aW9uIChkb21FbGUpIHtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhkb21FbGUsICd0cmFuc2l0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoZG9tRWxlLCAnYW5pbWF0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoZG9tRWxlLCAnc2Nyb2xsJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gIH0pO1xuXG4gIC8vIHN0b3AgcmlnaHQgY2xpY2sgbWVudSBmcm9tIGFwcGVhcmluZyBvbiBjeVxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xuICB2YXIgaW5Cb3hTZWxlY3Rpb24gPSBmdW5jdGlvbiBpbkJveFNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gci5zZWxlY3Rpb25bNF0gIT09IDA7XG4gIH07XG4gIHZhciBldmVudEluQ29udGFpbmVyID0gZnVuY3Rpb24gZXZlbnRJbkNvbnRhaW5lcihlKSB7XG4gICAgLy8gc2F2ZSBjeWNsZXMgaWYgbW91c2UgZXZlbnRzIGFyZW4ndCB0byBiZSBjYXB0dXJlZFxuICAgIHZhciBjb250YWluZXJQYWdlQ29vcmRzID0gci5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gICAgdmFyIHggPSBjb250YWluZXJQYWdlQ29vcmRzWzBdO1xuICAgIHZhciB5ID0gY29udGFpbmVyUGFnZUNvb3Jkc1sxXTtcbiAgICB2YXIgd2lkdGggPSBjb250YWluZXJQYWdlQ29vcmRzWzJdO1xuICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJQYWdlQ29vcmRzWzNdO1xuICAgIHZhciBwb3NpdGlvbnMgPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXMgOiBbZV07XG4gICAgdmFyIGF0TGVhc3RPbmVQb3NJbnNpZGUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHAgPSBwb3NpdGlvbnNbaV07XG4gICAgICBpZiAoeCA8PSBwLmNsaWVudFggJiYgcC5jbGllbnRYIDw9IHggKyB3aWR0aCAmJiB5IDw9IHAuY2xpZW50WSAmJiBwLmNsaWVudFkgPD0geSArIGhlaWdodCkge1xuICAgICAgICBhdExlYXN0T25lUG9zSW5zaWRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghYXRMZWFzdE9uZVBvc0luc2lkZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29udGFpbmVyID0gci5jb250YWluZXI7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgIHZhciB0UGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgdmFyIGNvbnRhaW5lcklzVGFyZ2V0ID0gZmFsc2U7XG4gICAgd2hpbGUgKHRQYXJlbnQpIHtcbiAgICAgIGlmICh0UGFyZW50ID09PSBjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVySXNUYXJnZXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRQYXJlbnQgPSB0UGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIGlmICghY29udGFpbmVySXNUYXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGlmIHRhcmdldCBpcyBvdXRpc2RlIGN5IGNvbnRhaW5lciwgdGhlbiB0aGlzIGV2ZW50IGlzIG5vdCBmb3IgdXNcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFByaW1hcnkga2V5XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gbW91c2Vkb3duSGFuZGxlcihlKSB7XG4gICAgaWYgKCFldmVudEluQ29udGFpbmVyKGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZHVyaW5nIGxlZnQgbW91c2UgYnV0dG9uIGdlc3R1cmVzLCBpZ25vcmUgb3RoZXIgYnV0dG9uc1xuICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMSAmJiBlLndoaWNoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBibHVyQWN0aXZlRG9tRWxlbWVudCgpO1xuICAgIHIuaG92ZXJEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgIHIuaG92ZXJEYXRhLndoaWNoID0gZS53aGljaDtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBncG9zID0gW2UuY2xpZW50WCwgZS5jbGllbnRZXTtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGdwb3NbMF0sIGdwb3NbMV0pO1xuICAgIHZhciBzZWxlY3QgPSByLnNlbGVjdGlvbjtcbiAgICB2YXIgbmVhcnMgPSByLmZpbmROZWFyZXN0RWxlbWVudHMocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICB2YXIgbmVhciA9IG5lYXJzWzBdO1xuICAgIHZhciBkcmFnZ2VkRWxlbWVudHMgPSByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gcG9zO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duR1BvcyA9IGdwb3M7XG4gICAgdmFyIGNoZWNrRm9yVGFwaG9sZCA9IGZ1bmN0aW9uIGNoZWNrRm9yVGFwaG9sZCgpIHtcbiAgICAgIHIuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgIGNsZWFyVGltZW91dChyLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCk7XG4gICAgICByLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZWxlID0gci5ob3ZlckRhdGEuZG93bjtcbiAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICBlbGUuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICd0YXBob2xkJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcGhvbGQnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCByLnRhcGhvbGREdXJhdGlvbik7XG4gICAgfTtcblxuICAgIC8vIFJpZ2h0IGNsaWNrIGJ1dHRvblxuICAgIGlmIChlLndoaWNoID09IDMpIHtcbiAgICAgIHIuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAobmVhcikge1xuICAgICAgICBuZWFyLmFjdGl2YXRlKCk7XG4gICAgICAgIG5lYXIuZW1pdChjeHRFdnQpO1xuICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH1cbiAgICAgIHIuaG92ZXJEYXRhLmRvd25UaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICByLmhvdmVyRGF0YS5jeHREcmFnZ2VkID0gZmFsc2U7XG5cbiAgICAgIC8vIFByaW1hcnkgYnV0dG9uXG4gICAgfSBlbHNlIGlmIChlLndoaWNoID09IDEpIHtcbiAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgIG5lYXIuYWN0aXZhdGUoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRWxlbWVudCBkcmFnZ2luZ1xuICAgICAge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgaXMgdW5kZXIgdGhlIGN1cnNvciBhbmQgaXQgaXMgZHJhZ2dhYmxlLCBwcmVwYXJlIHRvIGdyYWIgaXRcbiAgICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyLm5vZGVJc0dyYWJiYWJsZShuZWFyKSkge1xuICAgICAgICAgICAgdmFyIG1ha2VFdmVudCA9IGZ1bmN0aW9uIG1ha2VFdmVudCh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRyaWdnZXJHcmFiID0gZnVuY3Rpb24gdHJpZ2dlckdyYWIoZWxlKSB7XG4gICAgICAgICAgICAgIGVsZS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRHcmFiVGFyZ2V0KG5lYXIpO1xuICAgICAgICAgICAgaWYgKCFuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgYWRkTm9kZVRvRHJhZyhuZWFyLCB7XG4gICAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlbWVudHNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5lYXIuZW1pdChtYWtlRXZlbnQoJ2dyYWJvbicpKS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cyA9IHIuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGVzID0gY3kuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuc2VsZWN0ZWQoKSAmJiByLm5vZGVJc0dyYWJiYWJsZShlbGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoc2VsZWN0ZWROb2Rlcywge1xuICAgICAgICAgICAgICAgIGFkZFRvTGlzdDogZHJhZ2dlZEVsZW1lbnRzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFib24nKSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMuZm9yRWFjaCh0cmlnZ2VyR3JhYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgICAgci5ob3ZlckRhdGEuZG93bnMgPSBuZWFycztcbiAgICAgICAgci5ob3ZlckRhdGEuZG93blRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZWRvd24nLCAndGFwc3RhcnQnLCAndm1vdXNlZG93biddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcbiAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgc2VsZWN0WzRdID0gMTtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0ge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH0gZWxzZSBpZiAobmVhci5wYW5uYWJsZSgpKSB7XG4gICAgICAgIHNlbGVjdFs0XSA9IDE7IC8vIGZvciBmdXR1cmUgcGFuXG4gICAgICB9XG5cbiAgICAgIGNoZWNrRm9yVGFwaG9sZCgpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uIGJveCBjb29yZGluYXRlc1xuICAgIHNlbGVjdFswXSA9IHNlbGVjdFsyXSA9IHBvc1swXTtcbiAgICBzZWxlY3RbMV0gPSBzZWxlY3RbM10gPSBwb3NbMV07XG4gIH0sIGZhbHNlKTtcbiAgci5yZWdpc3RlckJpbmRpbmcoY29udGFpbmVyV2luZG93LCAnbW91c2Vtb3ZlJywgZnVuY3Rpb24gbW91c2Vtb3ZlSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcbiAgICBpZiAoIWNhcHR1cmUgJiYgIWV2ZW50SW5Db250YWluZXIoZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICB2YXIgZ3BvcyA9IFtlLmNsaWVudFgsIGUuY2xpZW50WV07XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChncG9zWzBdLCBncG9zWzFdKTtcbiAgICB2YXIgbWRvd25Qb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICB2YXIgbWRvd25HUG9zID0gci5ob3ZlckRhdGEubWRvd25HUG9zO1xuICAgIHZhciBzZWxlY3QgPSByLnNlbGVjdGlvbjtcbiAgICB2YXIgbmVhciA9IG51bGw7XG4gICAgaWYgKCFyLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgJiYgIXIuaG92ZXJEYXRhLmRyYWdnaW5nICYmICFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChwb3NbMF0sIHBvc1sxXSwgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cbiAgICB2YXIgbGFzdCA9IHIuaG92ZXJEYXRhLmxhc3Q7XG4gICAgdmFyIGRvd24gPSByLmhvdmVyRGF0YS5kb3duO1xuICAgIHZhciBkaXNwID0gW3Bvc1swXSAtIHNlbGVjdFsyXSwgcG9zWzFdIC0gc2VsZWN0WzNdXTtcbiAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICB2YXIgaXNPdmVyVGhyZXNob2xkRHJhZztcbiAgICBpZiAobWRvd25HUG9zKSB7XG4gICAgICB2YXIgZHggPSBncG9zWzBdIC0gbWRvd25HUG9zWzBdO1xuICAgICAgdmFyIGR4MiA9IGR4ICogZHg7XG4gICAgICB2YXIgZHkgPSBncG9zWzFdIC0gbWRvd25HUG9zWzFdO1xuICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICByLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnID0gaXNPdmVyVGhyZXNob2xkRHJhZyA9IGRpc3QyID49IHIuZGVza3RvcFRhcFRocmVzaG9sZDI7XG4gICAgfVxuICAgIHZhciBtdWx0U2VsS2V5RG93biA9IGlzTXVsdFNlbEtleURvd24oZSk7XG4gICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgIHIuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgdXBkYXRlRHJhZ0RlbHRhID0gZnVuY3Rpb24gdXBkYXRlRHJhZ0RlbHRhKCkge1xuICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSB8fCBbXTtcbiAgICAgIGlmIChkcmFnRGVsdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICBkcmFnRGVsdGEucHVzaChkaXNwWzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICBkcmFnRGVsdGFbMV0gKz0gZGlzcFsxXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICB0cmlnZ2VyRXZlbnRzKG5lYXIsIFsnbW91c2Vtb3ZlJywgJ3Ztb3VzZW1vdmUnLCAndGFwZHJhZyddLCBlLCB7XG4gICAgICB4OiBwb3NbMF0sXG4gICAgICB5OiBwb3NbMV1cbiAgICB9KTtcbiAgICB2YXIgZ29JbnRvQm94TW9kZSA9IGZ1bmN0aW9uIGdvSW50b0JveE1vZGUoKSB7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdib3hzdGFydCcsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWxlY3RbNF0gPSAxO1xuICAgICAgci5ob3ZlckRhdGEuc2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuICAgIH07XG5cbiAgICAvLyB0cmlnZ2VyIGNvbnRleHQgZHJhZyBpZiBybW91c2UgZG93blxuICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMykge1xuICAgICAgLy8gYnV0IG9ubHkgaWYgb3ZlciB0aHJlc2hvbGRcbiAgICAgIGlmIChpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiAnY3h0ZHJhZycsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRvd24pIHtcbiAgICAgICAgICBkb3duLmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN4dEV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IHRydWU7XG4gICAgICAgIGlmICghci5ob3ZlckRhdGEuY3h0T3ZlciB8fCBuZWFyICE9PSByLmhvdmVyRGF0YS5jeHRPdmVyKSB7XG4gICAgICAgICAgaWYgKHIuaG92ZXJEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmN4dE92ZXIuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByLmhvdmVyRGF0YS5jeHRPdmVyID0gbmVhcjtcbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2N4dGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZHJhZyBwYW5uaW5nIHRoZSBlbnRpcmUgZ3JhcGhcbiAgICB9IGVsc2UgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoY3kucGFubmluZ0VuYWJsZWQoKSAmJiBjeS51c2VyUGFubmluZ0VuYWJsZWQoKSkge1xuICAgICAgICB2YXIgZGVsdGFQO1xuICAgICAgICBpZiAoci5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4pIHtcbiAgICAgICAgICB2YXIgbWRQb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICAgICAgICBkZWx0YVAgPSB7XG4gICAgICAgICAgICB4OiAocG9zWzBdIC0gbWRQb3NbMF0pICogem9vbSxcbiAgICAgICAgICAgIHk6IChwb3NbMV0gLSBtZFBvc1sxXSkgKiB6b29tXG4gICAgICAgICAgfTtcbiAgICAgICAgICByLmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhUCA9IHtcbiAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgeTogZGlzcFsxXSAqIHpvb21cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGN5LnBhbkJ5KGRlbHRhUCk7XG4gICAgICAgIGN5LmVtaXQoJ2RyYWdwYW4nKTtcbiAgICAgICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE5lZWRzIHJlcHJvamVjdCBkdWUgdG8gcGFuIGNoYW5naW5nIHZpZXdwb3J0XG4gICAgICBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuXG4gICAgICAvLyBDaGVja3MgcHJpbWFyeSBidXR0b24gZG93biAmIG91dCBvZiB0aW1lICYgbW91c2Ugbm90IG1vdmVkIG11Y2hcbiAgICB9IGVsc2UgaWYgKHNlbGVjdFs0XSA9PSAxICYmIChkb3duID09IG51bGwgfHwgZG93bi5wYW5uYWJsZSgpKSkge1xuICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgaWYgKCFyLmhvdmVyRGF0YS5kcmFnZ2luZyAmJiBjeS5ib3hTZWxlY3Rpb25FbmFibGVkKCkgJiYgKG11bHRTZWxLZXlEb3duIHx8ICFjeS5wYW5uaW5nRW5hYmxlZCgpIHx8ICFjeS51c2VyUGFubmluZ0VuYWJsZWQoKSkpIHtcbiAgICAgICAgICBnb0ludG9Cb3hNb2RlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgdmFyIGFsbG93UGFzc3Rocm91Z2ggPSBhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaChkb3duLCByLmhvdmVyRGF0YS5kb3ducyk7XG4gICAgICAgICAgaWYgKGFsbG93UGFzc3Rocm91Z2gpIHtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSBhcnJheTJwb2ludChtZG93blBvcyk7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvd24gJiYgZG93bi5wYW5uYWJsZSgpICYmIGRvd24uYWN0aXZlKCkpIHtcbiAgICAgICAgICBkb3duLnVuYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG93biAmJiBkb3duLnBhbm5hYmxlKCkgJiYgZG93bi5hY3RpdmUoKSkge1xuICAgICAgICBkb3duLnVuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgoIWRvd24gfHwgIWRvd24uZ3JhYmJlZCgpKSAmJiBuZWFyICE9IGxhc3QpIHtcbiAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKGxhc3QsIFsnbW91c2VvdXQnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZW92ZXInLCAndGFwZHJhZ292ZXInXSwgZSwge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgci5ob3ZlckRhdGEubGFzdCA9IG5lYXI7XG4gICAgICB9XG4gICAgICBpZiAoZG93bikge1xuICAgICAgICBpZiAoaXNPdmVyVGhyZXNob2xkRHJhZykge1xuICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHRha2UgYWN0aW9uXG5cbiAgICAgICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpICYmIG11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICAvLyB0aGVuIHNlbGVjdGlvbiBvdmVycmlkZXNcbiAgICAgICAgICAgIGlmIChkb3duICYmIGRvd24uZ3JhYmJlZCgpKSB7XG4gICAgICAgICAgICAgIGZyZWVEcmFnZ2VkRWxlbWVudHMoZHJhZ2dlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgZG93bi5lbWl0KCdmcmVlb24nKTtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLmVtaXQoJ2ZyZWUnKTtcbiAgICAgICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgICAgIGRvd24uZW1pdCgnZHJhZ2ZyZWVvbicpO1xuICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdkcmFnZnJlZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnb0ludG9Cb3hNb2RlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkb3duICYmIGRvd24uZ3JhYmJlZCgpICYmIHIubm9kZUlzRHJhZ2dhYmxlKGRvd24pKSB7XG4gICAgICAgICAgICAvLyBkcmFnIG5vZGVcbiAgICAgICAgICAgIHZhciBqdXN0U3RhcnRlZERyYWcgPSAhci5kcmFnRGF0YS5kaWREcmFnO1xuICAgICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIuZHJhZ0RhdGEuZGlkRHJhZyA9IHRydWU7IC8vIGluZGljYXRlIHRoYXQgd2UgYWN0dWFsbHkgZGlkIGRyYWcgdGhlIG5vZGVcblxuICAgICAgICAgICAgLy8gbm93LCBhZGQgdGhlIGVsZW1lbnRzIHRvIHRoZSBkcmFnIGxheWVyIGlmIG5vdCBkb25lIGFscmVhZHlcbiAgICAgICAgICAgIGlmICghci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzKSB7XG4gICAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKGRyYWdnZWRFbGVtZW50cywge1xuICAgICAgICAgICAgICAgIGluRHJhZ0xheWVyOiB0cnVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRvdGFsU2hpZnQgPSB7XG4gICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobnVtYmVyJDEoZGlzcFswXSkgJiYgbnVtYmVyJDEoZGlzcFsxXSkpIHtcbiAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkaXNwWzFdO1xuICAgICAgICAgICAgICBpZiAoanVzdFN0YXJ0ZWREcmFnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YTtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ0RlbHRhICYmIG51bWJlciQxKGRyYWdEZWx0YVswXSkgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzFdKSkge1xuICAgICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkcmFnRGVsdGFbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgPSB0cnVlO1xuICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLnNpbGVudFNoaWZ0KHRvdGFsU2hpZnQpLmVtaXQoJ3Bvc2l0aW9uIGRyYWcnKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNhdmUgZHJhZyBkZWx0YSBmb3Igd2hlbiB3ZSBhY3R1YWxseSBzdGFydCBkcmFnZ2luZyBzbyB0aGUgcmVsYXRpdmUgZ3JhYiBwb3MgaXMgY29uc3RhbnRcbiAgICAgICAgICB1cGRhdGVEcmFnRGVsdGEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IHRoZSBkcmFnZ2luZyBmcm9tIHRyaWdnZXJpbmcgdGV4dCBzZWxlY3Rpb24gb24gdGhlIHBhZ2VcbiAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICB9XG4gICAgc2VsZWN0WzJdID0gcG9zWzBdO1xuICAgIHNlbGVjdFszXSA9IHBvc1sxXTtcbiAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIHZhciBjbGlja1RpbWVvdXQsIGRpZERvdWJsZUNsaWNrLCBwcmV2Q2xpY2tUaW1lU3RhbXA7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ21vdXNldXAnLCBmdW5jdGlvbiBtb3VzZXVwSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIC8vIGR1cmluZyBsZWZ0IG1vdXNlIGJ1dHRvbiBnZXN0dXJlcywgaWdub3JlIG90aGVyIGJ1dHRvbnNcbiAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDEgJiYgZS53aGljaCAhPT0gMSAmJiByLmhvdmVyRGF0YS5jYXB0dXJlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcbiAgICBpZiAoIWNhcHR1cmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgci5ob3ZlckRhdGEuY2FwdHVyZSA9IGZhbHNlO1xuICAgIHZhciBjeSA9IHIuY3k7XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICB2YXIgZG93biA9IHIuaG92ZXJEYXRhLmRvd247XG4gICAgdmFyIG11bHRTZWxLZXlEb3duID0gaXNNdWx0U2VsS2V5RG93bihlKTtcbiAgICBpZiAoci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG4gICAgci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCA9IHRydWU7XG4gICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkOyAvLyBub3QgYWN0aXZlIGJnIG5vd1xuXG4gICAgaWYgKGRvd24pIHtcbiAgICAgIGRvd24udW5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDMpIHtcbiAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChkb3duKSB7XG4gICAgICAgIGRvd24uZW1pdChjeHRFdnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3kuZW1pdChjeHRFdnQpO1xuICAgICAgfVxuICAgICAgaWYgKCFyLmhvdmVyRGF0YS5jeHREcmFnZ2VkKSB7XG4gICAgICAgIHZhciBjeHRUYXAgPSB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiAnY3h0dGFwJyxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoZG93bikge1xuICAgICAgICAgIGRvd24uZW1pdChjeHRUYXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3h0VGFwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEud2hpY2ggPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDEpIHtcbiAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZXVwJywgJ3RhcGVuZCcsICd2bW91c2V1cCddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcbiAgICAgIGlmICghci5kcmFnRGF0YS5kaWREcmFnICYmXG4gICAgICAvLyBkaWRuJ3QgbW92ZSBhIG5vZGUgYXJvdW5kXG4gICAgICAhci5ob3ZlckRhdGEuZHJhZ2dlZCAmJlxuICAgICAgLy8gZGlkbid0IHBhblxuICAgICAgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJlxuICAgICAgLy8gbm90IGJveCBzZWxlY3Rpb25cbiAgICAgICFyLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnIC8vIGRpZG4ndCBtb3ZlIHRvbyBtdWNoXG4gICAgICApIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50cyhkb3duLCBbXCJjbGlja1wiLCBcInRhcFwiLCBcInZjbGlja1wiXSwgZSwge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpZERvdWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgIGlmIChlLnRpbWVTdGFtcCAtIHByZXZDbGlja1RpbWVTdGFtcCA8PSBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpIHtcbiAgICAgICAgICBjbGlja1RpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KGNsaWNrVGltZW91dCk7XG4gICAgICAgICAgZGlkRG91YmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgIHByZXZDbGlja1RpbWVTdGFtcCA9IG51bGw7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhkb3duLCBbXCJkYmxjbGlja1wiLCBcImRibHRhcFwiLCBcInZkYmxjbGlja1wiXSwgZSwge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpY2tUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZGlkRG91YmxlQ2xpY2spIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudHMoZG93biwgW1wib25lY2xpY2tcIiwgXCJvbmV0YXBcIiwgXCJ2b25lY2xpY2tcIl0sIGUsIHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIGN5Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSk7XG4gICAgICAgICAgcHJldkNsaWNrVGltZVN0YW1wID0gZS50aW1lU3RhbXA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGVzZWxlY3QgYWxsIGVsZW1lbnRzIGlmIG5vdGhpbmcgaXMgY3VycmVudGx5IHVuZGVyIHRoZSBtb3VzZSBjdXJzb3IgYW5kIHdlIGFyZW4ndCBkcmFnZ2luZyBzb21ldGhpbmdcbiAgICAgIGlmIChkb3duID09IG51bGwgLy8gbm90IG1vdXNlZG93biBvbiBub2RlXG4gICAgICAmJiAhci5kcmFnRGF0YS5kaWREcmFnIC8vIGRpZG4ndCBtb3ZlIHRoZSBub2RlIGFyb3VuZFxuICAgICAgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAvLyBub3QgYm94IHNlbGVjdGlvblxuICAgICAgJiYgIXIuaG92ZXJEYXRhLmRyYWdnZWQgLy8gZGlkbid0IHBhblxuICAgICAgJiYgIWlzTXVsdFNlbEtleURvd24oZSkpIHtcbiAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzID0gZHJhZ2dlZEVsZW1lbnRzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW5nbGUgc2VsZWN0aW9uXG4gICAgICBpZiAobmVhciA9PSBkb3duICYmICFyLmRyYWdEYXRhLmRpZERyYWcgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBpZiAobmVhciAhPSBudWxsICYmIG5lYXIuX3ByaXZhdGUuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykgOyBlbHNlIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdhZGRpdGl2ZScgfHwgbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgIGlmIChuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgbmVhci51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmVhci5zZWxlY3QoWyd0YXBzZWxlY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bm1lcmdlKG5lYXIpLnVuc2VsZWN0KFsndGFwdW5zZWxlY3QnXSk7XG4gICAgICAgICAgICAgIG5lYXIuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICB2YXIgYm94ID0gY3kuY29sbGVjdGlvbihyLmdldEFsbEluQm94KHNlbGVjdFswXSwgc2VsZWN0WzFdLCBzZWxlY3RbMl0sIHNlbGVjdFszXSkpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICBpZiAoYm94Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICB0eXBlOiAnYm94ZW5kJyxcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuc2VsZWN0YWJsZSgpICYmICFlbGUuc2VsZWN0ZWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN5LnNlbGVjdGlvblR5cGUoKSA9PT0gJ2FkZGl0aXZlJykge1xuICAgICAgICAgIGJveC5lbWl0KCdib3gnKS5zdGRGaWx0ZXIoZWxlV291bGRCZVNlbGVjdGVkKS5zZWxlY3QoKS5lbWl0KCdib3hzZWxlY3QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICBjeS4kKGlzU2VsZWN0ZWQpLnVubWVyZ2UoYm94KS51bnNlbGVjdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBib3guZW1pdCgnYm94Jykuc3RkRmlsdGVyKGVsZVdvdWxkQmVTZWxlY3RlZCkuc2VsZWN0KCkuZW1pdCgnYm94c2VsZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHdheXMgbmVlZCByZWRyYXcgaW4gY2FzZSBlbGVzIHVuc2VsZWN0YWJsZVxuICAgICAgICByLnJlZHJhdygpO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgZHJhZyBwYW5cbiAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykge1xuICAgICAgICByLmhvdmVyRGF0YS5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZWN0WzRdKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgdmFyIGRvd25XYXNHcmFiYmVkID0gZG93biAmJiBkb3duLmdyYWJiZWQoKTtcbiAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlbWVudHMpO1xuICAgICAgICBpZiAoZG93bldhc0dyYWJiZWQpIHtcbiAgICAgICAgICBkb3duLmVtaXQoJ2ZyZWVvbicpO1xuICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdmcmVlJyk7XG4gICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgZG93bi5lbWl0KCdkcmFnZnJlZW9uJyk7XG4gICAgICAgICAgICBkcmFnZ2VkRWxlbWVudHMuZW1pdCgnZHJhZ2ZyZWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGVsc2Ugbm90IHJpZ2h0IG1vdXNlXG5cbiAgICBzZWxlY3RbNF0gPSAwO1xuICAgIHIuaG92ZXJEYXRhLmRvd24gPSBudWxsO1xuICAgIHIuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnID0gZmFsc2U7XG4gICAgci5kcmFnRGF0YS5kaWREcmFnID0gZmFsc2U7XG4gICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IGZhbHNlO1xuICAgIHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IFtdO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gbnVsbDtcbiAgICByLmhvdmVyRGF0YS5tZG93bkdQb3MgPSBudWxsO1xuICAgIHIuaG92ZXJEYXRhLndoaWNoID0gbnVsbDtcbiAgfSwgZmFsc2UpO1xuICB2YXIgd2hlZWxIYW5kbGVyID0gZnVuY3Rpb24gd2hlZWxIYW5kbGVyKGUpIHtcbiAgICBpZiAoci5zY3JvbGxpbmdQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB3aGlsZSBzY3JvbGxpbmcsIGlnbm9yZSB3aGVlbC10by16b29tXG5cbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICB2YXIgcnBvcyA9IFtwb3NbMF0gKiB6b29tICsgcGFuLngsIHBvc1sxXSAqIHpvb20gKyBwYW4ueV07XG4gICAgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZyB8fCByLmhvdmVyRGF0YS5jeHRTdGFydGVkIHx8IGluQm94U2VsZWN0aW9uKCkpIHtcbiAgICAgIC8vIGlmIHBhbiBkcmFnZ2luZyBvciBjeHQgZHJhZ2dpbmcsIHdoZWVsIG1vdmVtZW50cyBtYWtlIG5vIHpvb21cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN5LnBhbm5pbmdFbmFibGVkKCkgJiYgY3kudXNlclBhbm5pbmdFbmFibGVkKCkgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS51c2VyWm9vbWluZ0VuYWJsZWQoKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgci5kYXRhLndoZWVsWm9vbWluZyA9IHRydWU7XG4gICAgICBjbGVhclRpbWVvdXQoci5kYXRhLndoZWVsVGltZW91dCk7XG4gICAgICByLmRhdGEud2hlZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHIuZGF0YS53aGVlbFpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9LCAxNTApO1xuICAgICAgdmFyIGRpZmY7XG4gICAgICBpZiAoZS5kZWx0YVkgIT0gbnVsbCkge1xuICAgICAgICBkaWZmID0gZS5kZWx0YVkgLyAtMjUwO1xuICAgICAgfSBlbHNlIGlmIChlLndoZWVsRGVsdGFZICE9IG51bGwpIHtcbiAgICAgICAgZGlmZiA9IGUud2hlZWxEZWx0YVkgLyAxMDAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlmZiA9IGUud2hlZWxEZWx0YSAvIDEwMDA7XG4gICAgICB9XG4gICAgICBkaWZmID0gZGlmZiAqIHIud2hlZWxTZW5zaXRpdml0eTtcbiAgICAgIHZhciBuZWVkc1doZWVsRml4ID0gZS5kZWx0YU1vZGUgPT09IDE7XG4gICAgICBpZiAobmVlZHNXaGVlbEZpeCkge1xuICAgICAgICAvLyBmaXhlcyBzbG93IHdoZWVsIGV2ZW50cyBvbiBmZi9saW51eCBhbmQgZmYvd2luZG93c1xuICAgICAgICBkaWZmICo9IDMzO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1pvb20gPSBjeS56b29tKCkgKiBNYXRoLnBvdygxMCwgZGlmZik7XG4gICAgICBpZiAoZS50eXBlID09PSAnZ2VzdHVyZWNoYW5nZScpIHtcbiAgICAgICAgbmV3Wm9vbSA9IHIuZ2VzdHVyZVN0YXJ0Wm9vbSAqIGUuc2NhbGU7XG4gICAgICB9XG4gICAgICBjeS56b29tKHtcbiAgICAgICAgbGV2ZWw6IG5ld1pvb20sXG4gICAgICAgIHJlbmRlcmVkUG9zaXRpb246IHtcbiAgICAgICAgICB4OiBycG9zWzBdLFxuICAgICAgICAgIHk6IHJwb3NbMV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjeS5lbWl0KGUudHlwZSA9PT0gJ2dlc3R1cmVjaGFuZ2UnID8gJ3BpbmNoem9vbScgOiAnc2Nyb2xsem9vbScpO1xuICAgIH1cbiAgfTtcblxuICAvLyBGdW5jdGlvbnMgdG8gaGVscCB3aXRoIHdoZXRoZXIgbW91c2Ugd2hlZWwgc2hvdWxkIHRyaWdnZXIgem9vbWluZ1xuICAvLyAtLVxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3doZWVsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTtcblxuICAvLyBkaXNhYmxlIG5vbnN0YW5kYXJkIHdoZWVsIGV2ZW50c1xuICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNld2hlZWwnLCB3aGVlbEhhbmRsZXIsIHRydWUpO1xuICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ0RPTU1vdXNlU2Nyb2xsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTtcbiAgLy8gci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdNb3pNb3VzZVBpeGVsU2Nyb2xsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTsgLy8gb2xkZXIgZmlyZWZveFxuXG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Njcm9sbCcsIGZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByLnNjcm9sbGluZ1BhZ2UgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dChyLnNjcm9sbGluZ1BhZ2VUaW1lb3V0KTtcbiAgICByLnNjcm9sbGluZ1BhZ2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByLnNjcm9sbGluZ1BhZ2UgPSBmYWxzZTtcbiAgICB9LCAyNTApO1xuICB9LCB0cnVlKTtcblxuICAvLyBkZXNrdG9wIHNhZmFyaSBwaW5jaCB0byB6b29tIHN0YXJ0XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnZ2VzdHVyZXN0YXJ0JywgZnVuY3Rpb24gZ2VzdHVyZVN0YXJ0SGFuZGxlcihlKSB7XG4gICAgci5nZXN0dXJlU3RhcnRab29tID0gci5jeS56b29tKCk7XG4gICAgaWYgKCFyLmhhc1RvdWNoU3RhcnRlZCkge1xuICAgICAgLy8gZG9uJ3QgYWZmZWN0IHRvdWNoIGRldmljZXMgbGlrZSBpcGhvbmVcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2dlc3R1cmVjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghci5oYXNUb3VjaFN0YXJ0ZWQpIHtcbiAgICAgIC8vIGRvbid0IGFmZmVjdCB0b3VjaCBkZXZpY2VzIGxpa2UgaXBob25lXG4gICAgICB3aGVlbEhhbmRsZXIoZSk7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICAvLyBGdW5jdGlvbnMgdG8gaGVscCB3aXRoIGhhbmRsaW5nIG1vdXNlb3V0L21vdXNlb3ZlciBvbiB0aGUgQ3l0b3NjYXBlIGNvbnRhaW5lclxuICAvLyBIYW5kbGUgbW91c2VvdXQgb24gQ3l0b3NjYXBlIGNvbnRhaW5lclxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNlb3V0JywgZnVuY3Rpb24gbW91c2VPdXRIYW5kbGVyKGUpIHtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICByLmN5LmVtaXQoe1xuICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgIHR5cGU6ICdtb3VzZW91dCcsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgIHk6IHBvc1sxXVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBmYWxzZSk7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnbW91c2VvdmVyJywgZnVuY3Rpb24gbW91c2VPdmVySGFuZGxlcihlKSB7XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgci5jeS5lbWl0KHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICB0eXBlOiAnbW91c2VvdmVyJyxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9XG4gICAgfSk7XG4gIH0sIGZhbHNlKTtcbiAgdmFyIGYxeDEsIGYxeTEsIGYyeDEsIGYyeTE7IC8vIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuICB2YXIgZGlzdGFuY2UxLCBkaXN0YW5jZTFTcTsgLy8gaW5pdGlhbCBkaXN0YW5jZSBiZXR3ZWVuIGZpbmdlciAxIGFuZCBmaW5nZXIgMiBmb3IgcGluY2gtdG8tem9vbVxuICB2YXIgY2VudGVyMSwgbW9kZWxDZW50ZXIxOyAvLyBjZW50ZXIgcG9pbnQgb24gc3RhcnQgcGluY2ggdG8gem9vbVxuICB2YXIgb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wO1xuICB2YXIgY29udGFpbmVyV2lkdGgsIGNvbnRhaW5lckhlaWdodDtcbiAgdmFyIHR3b0ZpbmdlcnNTdGFydEluc2lkZTtcbiAgdmFyIGRpc3RhbmNlID0gZnVuY3Rpb24gZGlzdGFuY2UoeDEsIHkxLCB4MiwgeTIpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KCh4MiAtIHgxKSAqICh4MiAtIHgxKSArICh5MiAtIHkxKSAqICh5MiAtIHkxKSk7XG4gIH07XG4gIHZhciBkaXN0YW5jZVNxID0gZnVuY3Rpb24gZGlzdGFuY2VTcSh4MSwgeTEsIHgyLCB5Mikge1xuICAgIHJldHVybiAoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSk7XG4gIH07XG4gIHZhciB0b3VjaHN0YXJ0SGFuZGxlcjtcbiAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdG91Y2hzdGFydEhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaHN0YXJ0SGFuZGxlcihlKSB7XG4gICAgci5oYXNUb3VjaFN0YXJ0ZWQgPSB0cnVlO1xuICAgIGlmICghZXZlbnRJbkNvbnRhaW5lcihlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibHVyQWN0aXZlRG9tRWxlbWVudCgpO1xuICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBub3cgPSByLnRvdWNoRGF0YS5ub3c7XG4gICAgdmFyIGVhcmxpZXIgPSByLnRvdWNoRGF0YS5lYXJsaWVyO1xuICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgIG5vd1swXSA9IHBvc1swXTtcbiAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1sxXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgbm93WzJdID0gcG9zWzBdO1xuICAgICAgbm93WzNdID0gcG9zWzFdO1xuICAgIH1cbiAgICBpZiAoZS50b3VjaGVzWzJdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1syXS5jbGllbnRYLCBlLnRvdWNoZXNbMl0uY2xpZW50WSk7XG4gICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICBub3dbNV0gPSBwb3NbMV07XG4gICAgfVxuXG4gICAgLy8gcmVjb3JkIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhyLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMpO1xuICAgICAgdmFyIG9mZnNldHMgPSByLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgICAgIG9mZnNldExlZnQgPSBvZmZzZXRzWzBdO1xuICAgICAgb2Zmc2V0VG9wID0gb2Zmc2V0c1sxXTtcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gb2Zmc2V0c1syXTtcbiAgICAgIGNvbnRhaW5lckhlaWdodCA9IG9mZnNldHNbM107XG4gICAgICBmMXgxID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBvZmZzZXRMZWZ0O1xuICAgICAgZjF5MSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgZjJ4MSA9IGUudG91Y2hlc1sxXS5jbGllbnRYIC0gb2Zmc2V0TGVmdDtcbiAgICAgIGYyeTEgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIHR3b0ZpbmdlcnNTdGFydEluc2lkZSA9IDAgPD0gZjF4MSAmJiBmMXgxIDw9IGNvbnRhaW5lcldpZHRoICYmIDAgPD0gZjJ4MSAmJiBmMngxIDw9IGNvbnRhaW5lcldpZHRoICYmIDAgPD0gZjF5MSAmJiBmMXkxIDw9IGNvbnRhaW5lckhlaWdodCAmJiAwIDw9IGYyeTEgJiYgZjJ5MSA8PSBjb250YWluZXJIZWlnaHQ7XG4gICAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICAgIGRpc3RhbmNlMSA9IGRpc3RhbmNlKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgZGlzdGFuY2UxU3EgPSBkaXN0YW5jZVNxKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgY2VudGVyMSA9IFsoZjF4MSArIGYyeDEpIC8gMiwgKGYxeTEgKyBmMnkxKSAvIDJdO1xuICAgICAgbW9kZWxDZW50ZXIxID0gWyhjZW50ZXIxWzBdIC0gcGFuLngpIC8gem9vbSwgKGNlbnRlcjFbMV0gLSBwYW4ueSkgLyB6b29tXTtcblxuICAgICAgLy8gY29uc2lkZXIgY29udGV4dCB0YXBcbiAgICAgIHZhciBjeHREaXN0VGhyZXNob2xkID0gMjAwO1xuICAgICAgdmFyIGN4dERpc3RUaHJlc2hvbGRTcSA9IGN4dERpc3RUaHJlc2hvbGQgKiBjeHREaXN0VGhyZXNob2xkO1xuICAgICAgaWYgKGRpc3RhbmNlMVNxIDwgY3h0RGlzdFRocmVzaG9sZFNxICYmICFlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgdmFyIG5lYXIxID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgICB2YXIgbmVhcjIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMl0sIG5vd1szXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChuZWFyMSAmJiBuZWFyMS5pc05vZGUoKSkge1xuICAgICAgICAgIG5lYXIxLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMTtcbiAgICAgICAgfSBlbHNlIGlmIChuZWFyMiAmJiBuZWFyMi5pc05vZGUoKSkge1xuICAgICAgICAgIG5lYXIyLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnY3h0dGFwc3RhcnQnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoci50b3VjaERhdGEuc3RhcnQpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgci50b3VjaERhdGEuY3h0ID0gdHJ1ZTtcbiAgICAgICAgci50b3VjaERhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgLy8gaWdub3JlXG5cbiAgICAgIC8vIHNhZmFyaSBvbiBpb3MgcGFucyB0aGUgcGFnZSBvdGhlcndpc2UgKG5vcm1hbGx5IHlvdSBzaG91bGQgYmUgYWJsZSB0byBwcmV2ZW50ZGVmYXVsdCBvbiB0b3VjaG1vdmUuLi4pXG4gICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1sxXSkgOyBlbHNlIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgIHZhciBuZWFycyA9IHIuZmluZE5lYXJlc3RFbGVtZW50cyhub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB2YXIgbmVhciA9IG5lYXJzWzBdO1xuICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICBuZWFyLmFjdGl2YXRlKCk7XG4gICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbmVhcjtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRzID0gbmVhcnM7XG4gICAgICAgIGlmIChyLm5vZGVJc0dyYWJiYWJsZShuZWFyKSkge1xuICAgICAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWROb2RlcyA9IG51bGw7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgICAgaWYgKG5lYXIuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgLy8gcmVzZXQgZHJhZyBlbGVtZW50cywgc2luY2UgbmVhciB3aWxsIGJlIGFkZGVkIGFnYWluXG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSBjeS4kKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsZS5zZWxlY3RlZCgpICYmIHIubm9kZUlzR3JhYmJhYmxlKGVsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKHNlbGVjdGVkTm9kZXMsIHtcbiAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZE5vZGVUb0RyYWcobmVhciwge1xuICAgICAgICAgICAgICBhZGRUb0xpc3Q6IGRyYWdnZWRFbGVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0R3JhYlRhcmdldChuZWFyKTtcbiAgICAgICAgICB2YXIgbWFrZUV2ZW50ID0gZnVuY3Rpb24gbWFrZUV2ZW50KHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgbmVhci5lbWl0KG1ha2VFdmVudCgnZ3JhYm9uJykpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgICAgbi5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFiJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJpZ2dlckV2ZW50cyhuZWFyLCBbJ3RvdWNoc3RhcnQnLCAndGFwc3RhcnQnLCAndm1vdXNlZG93biddLCBlLCB7XG4gICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgeTogbm93WzFdXG4gICAgICB9KTtcbiAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0ge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFwLCB0YXBob2xkXG4gICAgICAvLyAtLS0tLVxuXG4gICAgICByLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkID0gZmFsc2U7XG4gICAgICByLnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZSA9ICtuZXcgRGF0ZSgpO1xuICAgICAgY2xlYXJUaW1lb3V0KHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KTtcbiAgICAgIHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkID09PSBmYWxzZSAmJiAhci5waW5jaGluZyAvLyBpZiBwaW5jaGluZywgdGhlbiB0YXBob2xkIHVuc2VsZWN0IHNob3VsZG4ndCB0YWtlIGVmZmVjdFxuICAgICAgICAmJiAhci50b3VjaERhdGEuc2VsZWN0aW5nIC8vIGJveCBzZWxlY3Rpb24gc2hvdWxkbid0IGFsbG93IHRhcGhvbGQgdGhyb3VnaFxuICAgICAgICApIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHIudG91Y2hEYXRhLnN0YXJ0LCBbJ3RhcGhvbGQnXSwgZSwge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHIudGFwaG9sZER1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPj0gMSkge1xuICAgICAgdmFyIHNQb3MgPSByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uID0gW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc1Bvc1tpXSA9IGVhcmxpZXJbaV0gPSBub3dbaV07XG4gICAgICB9XG4gICAgICB2YXIgdG91Y2gwID0gZS50b3VjaGVzWzBdO1xuICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbdG91Y2gwLmNsaWVudFgsIHRvdWNoMC5jbGllbnRZXTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgdmFyIHRvdWNobW92ZUhhbmRsZXI7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3RvdWNobW92ZScsIHRvdWNobW92ZUhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaG1vdmVIYW5kbGVyKGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuICAgIGlmICghY2FwdHVyZSAmJiAhZXZlbnRJbkNvbnRhaW5lcihlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgfVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgIH1cbiAgICB2YXIgc3RhcnRHUG9zID0gci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb247XG4gICAgdmFyIGlzT3ZlclRocmVzaG9sZERyYWc7XG4gICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzWzBdICYmIHN0YXJ0R1Bvcykge1xuICAgICAgdmFyIGRpc3AgPSBbXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRpc3Bbal0gPSBub3dbal0gLSBlYXJsaWVyW2pdO1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBzdGFydEdQb3NbMF07XG4gICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgIHZhciBkeSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gc3RhcnRHUG9zWzFdO1xuICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICBpc092ZXJUaHJlc2hvbGREcmFnID0gZGlzdDIgPj0gci50b3VjaFRhcFRocmVzaG9sZDI7XG4gICAgfVxuXG4gICAgLy8gY29udGV4dCBzd2lwZSBjYW5jZWxsaW5nXG4gICAgaWYgKGNhcHR1cmUgJiYgci50b3VjaERhdGEuY3h0KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgZjF4MiA9IGUudG91Y2hlc1swXS5jbGllbnRYIC0gb2Zmc2V0TGVmdCxcbiAgICAgICAgZjF5MiA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgdmFyIGYyeDIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WCAtIG9mZnNldExlZnQsXG4gICAgICAgIGYyeTIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIC8vIHZhciBkaXN0YW5jZTIgPSBkaXN0YW5jZSggZjF4MiwgZjF5MiwgZjJ4MiwgZjJ5MiApO1xuICAgICAgdmFyIGRpc3RhbmNlMlNxID0gZGlzdGFuY2VTcShmMXgyLCBmMXkyLCBmMngyLCBmMnkyKTtcbiAgICAgIHZhciBmYWN0b3JTcSA9IGRpc3RhbmNlMlNxIC8gZGlzdGFuY2UxU3E7XG4gICAgICB2YXIgZGlzdFRocmVzaG9sZCA9IDE1MDtcbiAgICAgIHZhciBkaXN0VGhyZXNob2xkU3EgPSBkaXN0VGhyZXNob2xkICogZGlzdFRocmVzaG9sZDtcbiAgICAgIHZhciBmYWN0b3JUaHJlc2hvbGQgPSAxLjU7XG4gICAgICB2YXIgZmFjdG9yVGhyZXNob2xkU3EgPSBmYWN0b3JUaHJlc2hvbGQgKiBmYWN0b3JUaHJlc2hvbGQ7XG5cbiAgICAgIC8vIGNhbmNlbCBjdHggZ2VzdHVyZXMgaWYgdGhlIGRpc3RhbmNlIGIvdCB0aGUgZmluZ2VycyBpbmNyZWFzZXNcbiAgICAgIGlmIChmYWN0b3JTcSA+PSBmYWN0b3JUaHJlc2hvbGRTcSB8fCBkaXN0YW5jZTJTcSA+PSBkaXN0VGhyZXNob2xkU3EpIHtcbiAgICAgICAgci50b3VjaERhdGEuY3h0ID0gZmFsc2U7XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KGN4dEV2dCk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnRleHQgc3dpcGVcbiAgICBpZiAoY2FwdHVyZSAmJiByLnRvdWNoRGF0YS5jeHQpIHtcbiAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHRkcmFnJyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgeTogbm93WzFdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgaWYgKHIudG91Y2hEYXRhLnN0YXJ0KSB7XG4gICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByLnRvdWNoRGF0YS5jeHREcmFnZ2VkID0gdHJ1ZTtcbiAgICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgaWYgKCFyLnRvdWNoRGF0YS5jeHRPdmVyIHx8IG5lYXIgIT09IHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgaWYgKHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5jeHRPdmVyLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgci50b3VjaERhdGEuY3h0T3ZlciA9IG5lYXI7XG4gICAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnY3h0ZHJhZ292ZXInLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBib3ggc2VsZWN0aW9uXG4gICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1syXSAmJiBjeS5ib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubGFzdFRocmVlVG91Y2ggPSArbmV3IERhdGUoKTtcbiAgICAgIGlmICghci50b3VjaERhdGEuc2VsZWN0aW5nKSB7XG4gICAgICAgIGN5LmVtaXQoe1xuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgdHlwZTogJ2JveHN0YXJ0JyxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHIudG91Y2hEYXRhLnNlbGVjdGluZyA9IHRydWU7XG4gICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSB0cnVlO1xuICAgICAgc2VsZWN0WzRdID0gMTtcbiAgICAgIGlmICghc2VsZWN0IHx8IHNlbGVjdC5sZW5ndGggPT09IDAgfHwgc2VsZWN0WzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0WzBdID0gKG5vd1swXSArIG5vd1syXSArIG5vd1s0XSkgLyAzO1xuICAgICAgICBzZWxlY3RbMV0gPSAobm93WzFdICsgbm93WzNdICsgbm93WzVdKSAvIDM7XG4gICAgICAgIHNlbGVjdFsyXSA9IChub3dbMF0gKyBub3dbMl0gKyBub3dbNF0pIC8gMyArIDE7XG4gICAgICAgIHNlbGVjdFszXSA9IChub3dbMV0gKyBub3dbM10gKyBub3dbNV0pIC8gMyArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RbMl0gPSAobm93WzBdICsgbm93WzJdICsgbm93WzRdKSAvIDM7XG4gICAgICAgIHNlbGVjdFszXSA9IChub3dbMV0gKyBub3dbM10gKyBub3dbNV0pIC8gMztcbiAgICAgIH1cbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuXG4gICAgICAvLyBwaW5jaCB0byB6b29tXG4gICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1sxXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBwaW5jaC10by16b29tXG4gICAgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJab29taW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAvLyB0d28gZmluZ2VycyA9PiBwaW5jaCB0byB6b29tXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgdmFyIGRyYWdnZWRFbGVzID0gci5kcmFnRGF0YS50b3VjaERyYWdFbGVzO1xuICAgICAgaWYgKGRyYWdnZWRFbGVzKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYWdnZWRFbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGRlX3AgPSBkcmFnZ2VkRWxlc1tpXS5fcHJpdmF0ZTtcbiAgICAgICAgICBkZV9wLmdyYWJiZWQgPSBmYWxzZTtcbiAgICAgICAgICBkZV9wLnJzY3JhdGNoLmluRHJhZ0xheWVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfc3RhcnQgPSByLnRvdWNoRGF0YS5zdGFydDtcblxuICAgICAgLy8gKHgyLCB5MikgZm9yIGZpbmdlcnMgMSBhbmQgMlxuICAgICAgdmFyIGYxeDIgPSBlLnRvdWNoZXNbMF0uY2xpZW50WCAtIG9mZnNldExlZnQsXG4gICAgICAgIGYxeTIgPSBlLnRvdWNoZXNbMF0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIHZhciBmMngyID0gZS50b3VjaGVzWzFdLmNsaWVudFggLSBvZmZzZXRMZWZ0LFxuICAgICAgICBmMnkyID0gZS50b3VjaGVzWzFdLmNsaWVudFkgLSBvZmZzZXRUb3A7XG4gICAgICB2YXIgZGlzdGFuY2UyID0gZGlzdGFuY2UoZjF4MiwgZjF5MiwgZjJ4MiwgZjJ5Mik7XG4gICAgICAvLyB2YXIgZGlzdGFuY2UyU3EgPSBkaXN0YW5jZVNxKCBmMXgyLCBmMXkyLCBmMngyLCBmMnkyICk7XG4gICAgICAvLyB2YXIgZmFjdG9yID0gTWF0aC5zcXJ0KCBkaXN0YW5jZTJTcSApIC8gTWF0aC5zcXJ0KCBkaXN0YW5jZTFTcSApO1xuICAgICAgdmFyIGZhY3RvciA9IGRpc3RhbmNlMiAvIGRpc3RhbmNlMTtcbiAgICAgIGlmICh0d29GaW5nZXJzU3RhcnRJbnNpZGUpIHtcbiAgICAgICAgLy8gZGVsdGEgZmluZ2VyMVxuICAgICAgICB2YXIgZGYxeCA9IGYxeDIgLSBmMXgxO1xuICAgICAgICB2YXIgZGYxeSA9IGYxeTIgLSBmMXkxO1xuXG4gICAgICAgIC8vIGRlbHRhIGZpbmdlciAyXG4gICAgICAgIHZhciBkZjJ4ID0gZjJ4MiAtIGYyeDE7XG4gICAgICAgIHZhciBkZjJ5ID0gZjJ5MiAtIGYyeTE7XG5cbiAgICAgICAgLy8gdHJhbnNsYXRpb24gaXMgdGhlIG5vcm1hbGlzZWQgdmVjdG9yIG9mIHRoZSB0d28gZmluZ2VycyBtb3ZlbWVudFxuICAgICAgICAvLyBpLmUuIHNvIHBpbmNoaW5nIGNhbmNlbHMgb3V0IGFuZCBtb3ZpbmcgdG9nZXRoZXIgcGFuc1xuICAgICAgICB2YXIgdHggPSAoZGYxeCArIGRmMngpIC8gMjtcbiAgICAgICAgdmFyIHR5ID0gKGRmMXkgKyBkZjJ5KSAvIDI7XG5cbiAgICAgICAgLy8gbm93IGNhbGN1bGF0ZSB0aGUgem9vbVxuICAgICAgICB2YXIgem9vbTEgPSBjeS56b29tKCk7XG4gICAgICAgIHZhciB6b29tMiA9IHpvb20xICogZmFjdG9yO1xuICAgICAgICB2YXIgcGFuMSA9IGN5LnBhbigpO1xuXG4gICAgICAgIC8vIHRoZSBtb2RlbCBjZW50ZXIgcG9pbnQgY29udmVydGVkIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVkIHBvc1xuICAgICAgICB2YXIgY3RyeCA9IG1vZGVsQ2VudGVyMVswXSAqIHpvb20xICsgcGFuMS54O1xuICAgICAgICB2YXIgY3RyeSA9IG1vZGVsQ2VudGVyMVsxXSAqIHpvb20xICsgcGFuMS55O1xuICAgICAgICB2YXIgcGFuMiA9IHtcbiAgICAgICAgICB4OiAtem9vbTIgLyB6b29tMSAqIChjdHJ4IC0gcGFuMS54IC0gdHgpICsgY3RyeCxcbiAgICAgICAgICB5OiAtem9vbTIgLyB6b29tMSAqIChjdHJ5IC0gcGFuMS55IC0gdHkpICsgY3RyeVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJlbW92ZSBkcmFnZ2VkIGVsZXNcbiAgICAgICAgaWYgKF9zdGFydCAmJiBfc3RhcnQuYWN0aXZlKCkpIHtcbiAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlcyk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgX3N0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KCdmcmVlb24nKTtcbiAgICAgICAgICBkcmFnZ2VkRWxlcy5lbWl0KCdmcmVlJyk7XG4gICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgX3N0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN5LnZpZXdwb3J0KHtcbiAgICAgICAgICB6b29tOiB6b29tMixcbiAgICAgICAgICBwYW46IHBhbjIsXG4gICAgICAgICAgY2FuY2VsT25GYWlsZWRab29tOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjeS5lbWl0KCdwaW5jaHpvb20nKTtcbiAgICAgICAgZGlzdGFuY2UxID0gZGlzdGFuY2UyO1xuICAgICAgICBmMXgxID0gZjF4MjtcbiAgICAgICAgZjF5MSA9IGYxeTI7XG4gICAgICAgIGYyeDEgPSBmMngyO1xuICAgICAgICBmMnkxID0gZjJ5MjtcbiAgICAgICAgci5waW5jaGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlLXByb2plY3RcbiAgICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMF0uY2xpZW50WCwgZS50b3VjaGVzWzBdLmNsaWVudFkpO1xuICAgICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgICBub3dbMl0gPSBwb3NbMF07XG4gICAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1s1XSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1swXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBzaW5nbGUgZmluZ2VyIGV2ZW50cyBsaWtlIHBhbm5pbmdcbiAgICApIHtcbiAgICAgIHZhciBzdGFydCA9IHIudG91Y2hEYXRhLnN0YXJ0O1xuICAgICAgdmFyIGxhc3QgPSByLnRvdWNoRGF0YS5sYXN0O1xuICAgICAgdmFyIG5lYXI7XG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcpIHtcbiAgICAgICAgbmVhciA9IHIuZmluZE5lYXJlc3RFbGVtZW50KG5vd1swXSwgbm93WzFdLCB0cnVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlICYmIHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBkcmFnZ2luZyBub2Rlc1xuICAgICAgaWYgKGNhcHR1cmUgJiYgc3RhcnQgIT0gbnVsbCAmJiByLm5vZGVJc0RyYWdnYWJsZShzdGFydCkpIHtcbiAgICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAvLyB0aGVuIGRyYWdnaW5nIGNhbiBoYXBwZW5cbiAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgdmFyIGp1c3RTdGFydGVkRHJhZyA9ICFyLmRyYWdEYXRhLmRpZERyYWc7XG4gICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoZHJhZ2dlZEVsZXMsIHtcbiAgICAgICAgICAgICAgaW5EcmFnTGF5ZXI6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByLmRyYWdEYXRhLmRpZERyYWcgPSB0cnVlO1xuICAgICAgICAgIHZhciB0b3RhbFNoaWZ0ID0ge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChudW1iZXIkMShkaXNwWzBdKSAmJiBudW1iZXIkMShkaXNwWzFdKSkge1xuICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZGlzcFsxXTtcbiAgICAgICAgICAgIGlmIChqdXN0U3RhcnRlZERyYWcpIHtcbiAgICAgICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGE7XG4gICAgICAgICAgICAgIGlmIChkcmFnRGVsdGEgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzBdKSAmJiBudW1iZXIkMShkcmFnRGVsdGFbMV0pKSB7XG4gICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZHJhZ0RlbHRhWzFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyA9IHRydWU7XG4gICAgICAgICAgZHJhZ2dlZEVsZXMuc2lsZW50U2hpZnQodG90YWxTaGlmdCkuZW1pdCgncG9zaXRpb24gZHJhZycpO1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdID09IGVhcmxpZXJbMF0gJiYgci50b3VjaERhdGEuc3RhcnRQb3NpdGlvblsxXSA9PSBlYXJsaWVyWzFdKSB7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2Uga2VlcCB0cmFjayBvZiBkcmFnIGRlbHRhIGZvciBsYXRlclxuICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGEgfHwgW107XG4gICAgICAgICAgaWYgKGRyYWdEZWx0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICAgICAgZHJhZ0RlbHRhLnB1c2goZGlzcFsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICAgICAgZHJhZ0RlbHRhWzFdICs9IGRpc3BbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHRvdWNobW92ZVxuICAgICAge1xuICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0IHx8IG5lYXIsIFsndG91Y2htb3ZlJywgJ3RhcGRyYWcnLCAndm1vdXNlbW92ZSddLCBlLCB7XG4gICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCghc3RhcnQgfHwgIXN0YXJ0LmdyYWJiZWQoKSkgJiYgbmVhciAhPSBsYXN0KSB7XG4gICAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgIGxhc3QuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICd0YXBkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLnRvdWNoRGF0YS5sYXN0ID0gbmVhcjtcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgdG8gY2FuY2VsIHRhcGhvbGRcbiAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG5vd1tpXSAmJiByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW2ldICYmIGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYW5uaW5nXG4gICAgICBpZiAoY2FwdHVyZSAmJiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydC5wYW5uYWJsZSgpKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgIHZhciBhbGxvd1Bhc3N0aHJvdWdoID0gYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2goc3RhcnQsIHIudG91Y2hEYXRhLnN0YXJ0cyk7XG4gICAgICAgIGlmIChhbGxvd1Bhc3N0aHJvdWdoKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSBhcnJheTJwb2ludChyLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHIuc3dpcGVQYW5uaW5nKSB7XG4gICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgICB5OiBkaXNwWzFdICogem9vbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjeS5lbWl0KCdkcmFncGFuJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgICAgICByLnN3aXBlUGFubmluZyA9IHRydWU7XG4gICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgIHg6IGR4ICogem9vbSxcbiAgICAgICAgICAgICAgeTogZHkgKiB6b29tXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN5LmVtaXQoJ2RyYWdwYW4nKTtcbiAgICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICBzdGFydC51bmFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZS1wcm9qZWN0XG4gICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgICAgbm93WzBdID0gcG9zWzBdO1xuICAgICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICBlYXJsaWVyW2pdID0gbm93W2pdO1xuICAgIH1cblxuICAgIC8vIHRoZSBhY3RpdmUgYmcgaW5kaWNhdG9yIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gbWFraW5nIGEgc3dpcGUgdGhhdCBpcyBuZWl0aGVyIGZvciBkcmFnZ2luZyBub2RlcyBvciBwYW5uaW5nXG4gICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDAgJiYgIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcgJiYgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uICE9IG51bGwpIHtcbiAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICB2YXIgdG91Y2hjYW5jZWxIYW5kbGVyO1xuICByLnJlZ2lzdGVyQmluZGluZyhjb250YWluZXJXaW5kb3csICd0b3VjaGNhbmNlbCcsIHRvdWNoY2FuY2VsSGFuZGxlciA9IGZ1bmN0aW9uIHRvdWNoY2FuY2VsSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdGFydCA9IHIudG91Y2hEYXRhLnN0YXJ0O1xuICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSBmYWxzZTtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgdG91Y2hlbmRIYW5kbGVyLCBkaWREb3VibGVUb3VjaCwgdG91Y2hUaW1lb3V0LCBwcmV2VG91Y2hUaW1lU3RhbXA7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3RvdWNoZW5kJywgdG91Y2hlbmRIYW5kbGVyID0gZnVuY3Rpb24gdG91Y2hlbmRIYW5kbGVyKGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN0YXJ0ID0gci50b3VjaERhdGEuc3RhcnQ7XG4gICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByLnRvdWNoRGF0YS5jYXB0dXJlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgIHIuc3dpcGVQYW5uaW5nID0gZmFsc2U7XG4gICAgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzID0gZmFsc2U7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgfVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgIH1cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgdmFyIGN0eFRhcGVuZDtcbiAgICBpZiAoci50b3VjaERhdGEuY3h0KSB7XG4gICAgICBjdHhUYXBlbmQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChzdGFydCkge1xuICAgICAgICBzdGFydC5lbWl0KGN0eFRhcGVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjeS5lbWl0KGN0eFRhcGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoIXIudG91Y2hEYXRhLmN4dERyYWdnZWQpIHtcbiAgICAgICAgdmFyIGN0eFRhcCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXAnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgIHN0YXJ0LmVtaXQoY3R4VGFwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN0eFRhcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByLnRvdWNoRGF0YS5jeHQgPSBmYWxzZTtcbiAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgIHIucmVkcmF3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gbW9yZSBib3ggc2VsZWN0aW9uIGlmIHdlIGRvbid0IGhhdmUgdGhyZWUgZmluZ2Vyc1xuICAgIGlmICghZS50b3VjaGVzWzJdICYmIGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSAmJiByLnRvdWNoRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIHIudG91Y2hEYXRhLnNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgdmFyIGJveCA9IGN5LmNvbGxlY3Rpb24oci5nZXRBbGxJbkJveChzZWxlY3RbMF0sIHNlbGVjdFsxXSwgc2VsZWN0WzJdLCBzZWxlY3RbM10pKTtcbiAgICAgIHNlbGVjdFswXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFsxXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFsyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFszXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgY3kuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdib3hlbmQnLFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKSAmJiAhZWxlLnNlbGVjdGVkKCk7XG4gICAgICB9O1xuICAgICAgYm94LmVtaXQoJ2JveCcpLnN0ZEZpbHRlcihlbGVXb3VsZEJlU2VsZWN0ZWQpLnNlbGVjdCgpLmVtaXQoJ2JveHNlbGVjdCcpO1xuICAgICAgaWYgKGJveC5ub25lbXB0eSgpKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgfVxuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1sxXSkgOyBlbHNlIGlmIChlLnRvdWNoZXNbMF0pIDsgZWxzZSBpZiAoIWUudG91Y2hlc1swXSkge1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztcbiAgICAgIGlmIChzdGFydCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBzdGFydFdhc0dyYWJiZWQgPSBzdGFydC5fcHJpdmF0ZS5ncmFiYmVkO1xuICAgICAgICBmcmVlRHJhZ2dlZEVsZW1lbnRzKGRyYWdnZWRFbGVzKTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICBpZiAoc3RhcnRXYXNHcmFiYmVkKSB7XG4gICAgICAgICAgc3RhcnQuZW1pdCgnZnJlZW9uJyk7XG4gICAgICAgICAgZHJhZ2dlZEVsZXMuZW1pdCgnZnJlZScpO1xuICAgICAgICAgIGlmIChyLmRyYWdEYXRhLmRpZERyYWcpIHtcbiAgICAgICAgICAgIHN0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudHMoc3RhcnQsIFsndG91Y2hlbmQnLCAndGFwZW5kJywgJ3Ztb3VzZXVwJywgJ3RhcGRyYWdvdXQnXSwgZSwge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWyd0b3VjaGVuZCcsICd0YXBlbmQnLCAndm1vdXNldXAnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBkeCA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0gLSBub3dbMF07XG4gICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgIHZhciBkeSA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0gLSBub3dbMV07XG4gICAgICB2YXIgZHkyID0gZHkgKiBkeTtcbiAgICAgIHZhciBkaXN0MiA9IGR4MiArIGR5MjtcbiAgICAgIHZhciByZGlzdDIgPSBkaXN0MiAqIHpvb20gKiB6b29tO1xuXG4gICAgICAvLyBUYXAgZXZlbnQsIHJvdWdobHkgc2FtZSBhcyBtb3VzZSBjbGljayBldmVudCBmb3IgdG91Y2hcbiAgICAgIGlmICghci50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZCkge1xuICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgY3kuJCgnOnNlbGVjdGVkJykudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ3RhcCcsICd2Y2xpY2snXSwgZSwge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpZERvdWJsZVRvdWNoID0gZmFsc2U7XG4gICAgICAgIGlmIChlLnRpbWVTdGFtcCAtIHByZXZUb3VjaFRpbWVTdGFtcCA8PSBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpIHtcbiAgICAgICAgICB0b3VjaFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRvdWNoVGltZW91dCk7XG4gICAgICAgICAgZGlkRG91YmxlVG91Y2ggPSB0cnVlO1xuICAgICAgICAgIHByZXZUb3VjaFRpbWVTdGFtcCA9IG51bGw7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhzdGFydCwgWydkYmx0YXAnLCAndmRibGNsaWNrJ10sIGUsIHtcbiAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGRpZERvdWJsZVRvdWNoKSByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ29uZXRhcCcsICd2b25lY2xpY2snXSwgZSwge1xuICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgY3kubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKTtcbiAgICAgICAgICBwcmV2VG91Y2hUaW1lU3RhbXAgPSBlLnRpbWVTdGFtcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IHRvdWNoZWQgbm9kZSwgb25seSBpZiBpdCBoYXNuJ3QgYmVlbiBkcmFnZ2VkIHBhc3QgYSBjZXJ0YWluIGRpc3RhbmNlXG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCAmJiAhci5kcmFnRGF0YS5kaWREcmFnIC8vIGRpZG4ndCBkcmFnIG5vZGVzIGFyb3VuZFxuICAgICAgJiYgc3RhcnQuX3ByaXZhdGUuc2VsZWN0YWJsZSAmJiByZGlzdDIgPCByLnRvdWNoVGFwVGhyZXNob2xkMiAmJiAhci5waW5jaGluZyAvLyBwaW5jaCB0byB6b29tIHNob3VsZCBub3QgYWZmZWN0IHNlbGVjdGlvblxuICAgICAgKSB7XG4gICAgICAgIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bm1lcmdlKHN0YXJ0KS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgIHN0YXJ0LnNlbGVjdChbJ3RhcHNlbGVjdCddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RhcnQuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgc3RhcnQudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnQuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vdy5sZW5ndGg7IGorKykge1xuICAgICAgZWFybGllcltqXSA9IG5vd1tqXTtcbiAgICB9XG4gICAgci5kcmFnRGF0YS5kaWREcmFnID0gZmFsc2U7IC8vIHJlc2V0IGZvciBuZXh0IHRvdWNoc3RhcnRcblxuICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSBbXTtcbiAgICAgIHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24gPSBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICByLnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbiA9IG51bGw7XG4gICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyB0aGUgb2xkIHN0YXJ0IGdsb2JhbCBwb3MnbiBtYXkgbm90IGJlIHRoZSBzYW1lIGZpbmdlciB0aGF0IHJlbWFpbnNcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZXTtcbiAgICAgIH1cbiAgICAgIHIucGluY2hpbmcgPSBmYWxzZTtcbiAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG5cbiAgICAvL3IucmVkcmF3KCk7XG4gIH0sIGZhbHNlKTtcblxuICAvLyBmYWxsYmFjayBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBtcyBwb2ludGVyIGV2ZW50c1xuICBpZiAodHlwZW9mIFRvdWNoRXZlbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIHBvaW50ZXJzID0gW107XG4gICAgdmFyIG1ha2VUb3VjaCA9IGZ1bmN0aW9uIG1ha2VUb3VjaChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXG4gICAgICAgIGNsaWVudFk6IGUuY2xpZW50WSxcbiAgICAgICAgZm9yY2U6IDEsXG4gICAgICAgIGlkZW50aWZpZXI6IGUucG9pbnRlcklkLFxuICAgICAgICBwYWdlWDogZS5wYWdlWCxcbiAgICAgICAgcGFnZVk6IGUucGFnZVksXG4gICAgICAgIHJhZGl1c1g6IGUud2lkdGggLyAyLFxuICAgICAgICByYWRpdXNZOiBlLmhlaWdodCAvIDIsXG4gICAgICAgIHNjcmVlblg6IGUuc2NyZWVuWCxcbiAgICAgICAgc2NyZWVuWTogZS5zY3JlZW5ZLFxuICAgICAgICB0YXJnZXQ6IGUudGFyZ2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIG1ha2VQb2ludGVyID0gZnVuY3Rpb24gbWFrZVBvaW50ZXIoZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIHRvdWNoOiBtYWtlVG91Y2goZSlcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgYWRkUG9pbnRlciA9IGZ1bmN0aW9uIGFkZFBvaW50ZXIoZSkge1xuICAgICAgcG9pbnRlcnMucHVzaChtYWtlUG9pbnRlcihlKSk7XG4gICAgfTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZ1bmN0aW9uIHJlbW92ZVBvaW50ZXIoZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcCA9IHBvaW50ZXJzW2ldO1xuICAgICAgICBpZiAocC5ldmVudC5wb2ludGVySWQgPT09IGUucG9pbnRlcklkKSB7XG4gICAgICAgICAgcG9pbnRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHVwZGF0ZVBvaW50ZXIgPSBmdW5jdGlvbiB1cGRhdGVQb2ludGVyKGUpIHtcbiAgICAgIHZhciBwID0gcG9pbnRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBwLmV2ZW50LnBvaW50ZXJJZCA9PT0gZS5wb2ludGVySWQ7XG4gICAgICB9KVswXTtcbiAgICAgIHAuZXZlbnQgPSBlO1xuICAgICAgcC50b3VjaCA9IG1ha2VUb3VjaChlKTtcbiAgICB9O1xuICAgIHZhciBhZGRUb3VjaGVzVG9FdmVudCA9IGZ1bmN0aW9uIGFkZFRvdWNoZXNUb0V2ZW50KGUpIHtcbiAgICAgIGUudG91Y2hlcyA9IHBvaW50ZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gcC50b3VjaDtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIHBvaW50ZXJJc01vdXNlID0gZnVuY3Rpb24gcG9pbnRlcklzTW91c2UoZSkge1xuICAgICAgcmV0dXJuIGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScgfHwgZS5wb2ludGVyVHlwZSA9PT0gNDtcbiAgICB9O1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcmRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKHBvaW50ZXJJc01vdXNlKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gbW91c2UgYWxyZWFkeSBoYW5kbGVkXG5cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFkZFBvaW50ZXIoZSk7XG4gICAgICBhZGRUb3VjaGVzVG9FdmVudChlKTtcbiAgICAgIHRvdWNoc3RhcnRIYW5kbGVyKGUpO1xuICAgIH0pO1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcnVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChwb2ludGVySXNNb3VzZShlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG4gICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgYWRkVG91Y2hlc1RvRXZlbnQoZSk7XG4gICAgICB0b3VjaGVuZEhhbmRsZXIoZSk7XG4gICAgfSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVyY2FuY2VsJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChwb2ludGVySXNNb3VzZShlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG4gICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgYWRkVG91Y2hlc1RvRXZlbnQoZSk7XG4gICAgICB0b3VjaGNhbmNlbEhhbmRsZXIoZSk7XG4gICAgfSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVybW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAocG9pbnRlcklzTW91c2UoZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBtb3VzZSBhbHJlYWR5IGhhbmRsZWRcblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdXBkYXRlUG9pbnRlcihlKTtcbiAgICAgIGFkZFRvdWNoZXNUb0V2ZW50KGUpO1xuICAgICAgdG91Y2htb3ZlSGFuZGxlcihlKTtcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIEJScCQyID0ge307XG5CUnAkMi5nZW5lcmF0ZVBvbHlnb24gPSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzKSB7XG4gIHJldHVybiB0aGlzLm5vZGVTaGFwZXNbbmFtZV0gPSB7XG4gICAgcmVuZGVyZXI6IHRoaXMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwb2ludHM6IHBvaW50cyxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdwb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMpO1xuICAgIH0sXG4gICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcsIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHRoaXMucG9pbnRzLCBub2RlWCwgbm9kZVksIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgcGFkZGluZyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZyk7XG4gICAgfVxuICB9O1xufTtcbkJScCQyLmdlbmVyYXRlRWxsaXBzZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snZWxsaXBzZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdlbGxpcHNlJyxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICByZXR1cm4gaW50ZXJzZWN0TGluZUVsbGlwc2UoeCwgeSwgbm9kZVgsIG5vZGVZLCB3aWR0aCAvIDIgKyBwYWRkaW5nLCBoZWlnaHQgLyAyICsgcGFkZGluZyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIGNoZWNrSW5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHBhZGRpbmcpO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5nZW5lcmF0ZVJvdW5kUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBwb2ludHMpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1tuYW1lXSA9IHtcbiAgICByZW5kZXJlcjogdGhpcyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHBvaW50czogcG9pbnRzLFxuICAgIGdldE9yQ3JlYXRlQ29ybmVyczogZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsIGZpZWxkKSB7XG4gICAgICBpZiAocnNbZmllbGRdICE9PSB1bmRlZmluZWQgJiYgcnNbZmllbGQgKyAnLWN4J10gPT09IGNlbnRlclggJiYgcnNbZmllbGQgKyAnLWN5J10gPT09IGNlbnRlclkpIHtcbiAgICAgICAgcmV0dXJuIHJzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICAgIHJzW2ZpZWxkXSA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICByc1tmaWVsZCArICctY3gnXSA9IGNlbnRlclg7XG4gICAgICByc1tmaWVsZCArICctY3knXSA9IGNlbnRlclk7XG4gICAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgICB2YXIgaGFsZkggPSBoZWlnaHQgLyAyO1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFBvbHlnb25SYWRpdXMod2lkdGgsIGhlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgcCA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcG9pbnRzLmxlbmd0aCAvIDI7IF9pKyspIHtcbiAgICAgICAgcFtfaV0gPSB7XG4gICAgICAgICAgeDogY2VudGVyWCArIGhhbGZXICogcG9pbnRzW19pICogMl0sXG4gICAgICAgICAgeTogY2VudGVyWSArIGhhbGZIICogcG9pbnRzW19pICogMiArIDFdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaSxcbiAgICAgICAgcDEsXG4gICAgICAgIHAyLFxuICAgICAgICBwMyxcbiAgICAgICAgbGVuID0gcC5sZW5ndGg7XG4gICAgICBwMSA9IHBbbGVuIC0gMV07XG4gICAgICAvLyBmb3IgZWFjaCBwb2ludFxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHAyID0gcFtpICUgbGVuXTtcbiAgICAgICAgcDMgPSBwWyhpICsgMSkgJSBsZW5dO1xuICAgICAgICByc1tmaWVsZF1baV0gPSBnZXRSb3VuZENvcm5lcihwMSwgcDIsIHAzLCBjb3JuZXJSYWRpdXMpO1xuICAgICAgICBwMSA9IHAyO1xuICAgICAgICBwMiA9IHAzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJzW2ZpZWxkXTtcbiAgICB9LFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzLCBycykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdyb3VuZC1wb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdkcmF3Q29ybmVycycpKTtcbiAgICB9LFxuICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nLCBjb3JuZXJSYWRpdXMsIHJzKSB7XG4gICAgICByZXR1cm4gcm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCB0aGlzLnBvaW50cywgbm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCB0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdjb3JuZXJzJykpO1xuICAgIH0sXG4gICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMsIHJzKSB7XG4gICAgICByZXR1cm4gcG9pbnRJbnNpZGVSb3VuZFBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdjb3JuZXJzJykpO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydyb3VuZC1yZWN0YW5nbGUnXSA9IHRoaXMubm9kZVNoYXBlc1sncm91bmRyZWN0YW5nbGUnXSA9IHtcbiAgICByZW5kZXJlcjogdGhpcyxcbiAgICBuYW1lOiAncm91bmQtcmVjdGFuZ2xlJyxcbiAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICByZXR1cm4gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZywgY29ybmVyUmFkaXVzKTtcbiAgICB9LFxuICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKGhhbGZXaWR0aCwgaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgICAgIHZhciBkaWFtID0gY29ybmVyUmFkaXVzICogMjtcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIHRvcCBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cywgY2VudGVyWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0b3AgcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSByaWdodCBxdWFydGVyIGNpcmNsZVxuICAgICAgaWYgKGNoZWNrSW5FbGxpcHNlKHgsIHksIGRpYW0sIGRpYW0sIGNlbnRlclggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMsIGNlbnRlclkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzLCBwYWRkaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYm90dG9tIGxlZnQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufTtcbkJScCQyLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydjdXQtcmVjdGFuZ2xlJ10gPSB0aGlzLm5vZGVTaGFwZXNbJ2N1dHJlY3RhbmdsZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdjdXQtcmVjdGFuZ2xlJyxcbiAgICBjb3JuZXJMZW5ndGg6IGdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCgpLFxuICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBudWxsLCBjb3JuZXJSYWRpdXMpO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVDdXRUcmlhbmdsZVB0czogZnVuY3Rpb24gZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIHZhciBjbCA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gdGhpcy5jb3JuZXJMZW5ndGggOiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHhCZWdpbiA9IGNlbnRlclggLSBodztcbiAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgIHZhciB5RW5kID0gY2VudGVyWSArIGhoO1xuXG4gICAgICAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgdHJpYW5nbGUgcHQgb24gWzQsIDVdXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3BMZWZ0OiBbeEJlZ2luLCB5QmVnaW4gKyBjbCwgeEJlZ2luICsgY2wsIHlCZWdpbiwgeEJlZ2luICsgY2wsIHlCZWdpbiArIGNsXSxcbiAgICAgICAgdG9wUmlnaHQ6IFt4RW5kIC0gY2wsIHlCZWdpbiwgeEVuZCwgeUJlZ2luICsgY2wsIHhFbmQgLSBjbCwgeUJlZ2luICsgY2xdLFxuICAgICAgICBib3R0b21SaWdodDogW3hFbmQsIHlFbmQgLSBjbCwgeEVuZCAtIGNsLCB5RW5kLCB4RW5kIC0gY2wsIHlFbmQgLSBjbF0sXG4gICAgICAgIGJvdHRvbUxlZnQ6IFt4QmVnaW4gKyBjbCwgeUVuZCwgeEJlZ2luLCB5RW5kIC0gY2wsIHhCZWdpbiArIGNsLCB5RW5kIC0gY2xdXG4gICAgICB9O1xuICAgIH0sXG4gICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcsIGNvcm5lclJhZGl1cykge1xuICAgICAgdmFyIGNQdHMgPSB0aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMod2lkdGggKyAyICogcGFkZGluZywgaGVpZ2h0ICsgMiAqIHBhZGRpbmcsIG5vZGVYLCBub2RlWSwgY29ybmVyUmFkaXVzKTtcbiAgICAgIHZhciBwdHMgPSBbXS5jb25jYXQuYXBwbHkoW10sIFtjUHRzLnRvcExlZnQuc3BsaWNlKDAsIDQpLCBjUHRzLnRvcFJpZ2h0LnNwbGljZSgwLCA0KSwgY1B0cy5ib3R0b21SaWdodC5zcGxpY2UoMCwgNCksIGNQdHMuYm90dG9tTGVmdC5zcGxpY2UoMCwgNCldKTtcbiAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBwdHMsIG5vZGVYLCBub2RlWSk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgdmFyIGNsID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyB0aGlzLmNvcm5lckxlbmd0aCA6IGNvcm5lclJhZGl1cztcbiAgICAgIC8vIENoZWNrIGhCb3hcbiAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQgLSAyICogY2wsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIDIgKiBjbCwgaGVpZ2h0LCBbMCwgLTFdLCBwYWRkaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBjdXRUcmlhbmdsZVB0cyA9IHRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMudG9wTGVmdCkgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIGN1dFRyaWFuZ2xlUHRzLnRvcFJpZ2h0KSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMuYm90dG9tUmlnaHQpIHx8IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBjdXRUcmlhbmdsZVB0cy5ib3R0b21MZWZ0KTtcbiAgICB9XG4gIH07XG59O1xuQlJwJDIuZ2VuZXJhdGVCYXJyZWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVTaGFwZXNbJ2JhcnJlbCddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdiYXJyZWwnLFxuICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9LFxuICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIC8vIHVzZSB0d28gZml4ZWQgdCB2YWx1ZXMgZm9yIHRoZSBiZXppZXIgY3VydmUgYXBwcm94aW1hdGlvblxuXG4gICAgICB2YXIgdDAgPSAwLjE1O1xuICAgICAgdmFyIHQxID0gMC41O1xuICAgICAgdmFyIHQyID0gMC44NTtcbiAgICAgIHZhciBiUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCArIDIgKiBwYWRkaW5nLCBoZWlnaHQgKyAyICogcGFkZGluZywgbm9kZVgsIG5vZGVZKTtcbiAgICAgIHZhciBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzID0gZnVuY3Rpb24gYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhwdHMpIHtcbiAgICAgICAgLy8gYXBwcm94aW1hdGUgY3VydmUgcHRzIGJhc2VkIG9uIHRoZSB0d28gdCB2YWx1ZXNcbiAgICAgICAgdmFyIG0wID0gcWJlemllclB0QXQoe1xuICAgICAgICAgIHg6IHB0c1swXSxcbiAgICAgICAgICB5OiBwdHNbMV1cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHB0c1syXSxcbiAgICAgICAgICB5OiBwdHNbM11cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHB0c1s0XSxcbiAgICAgICAgICB5OiBwdHNbNV1cbiAgICAgICAgfSwgdDApO1xuICAgICAgICB2YXIgbTEgPSBxYmV6aWVyUHRBdCh7XG4gICAgICAgICAgeDogcHRzWzBdLFxuICAgICAgICAgIHk6IHB0c1sxXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcHRzWzJdLFxuICAgICAgICAgIHk6IHB0c1szXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcHRzWzRdLFxuICAgICAgICAgIHk6IHB0c1s1XVxuICAgICAgICB9LCB0MSk7XG4gICAgICAgIHZhciBtMiA9IHFiZXppZXJQdEF0KHtcbiAgICAgICAgICB4OiBwdHNbMF0sXG4gICAgICAgICAgeTogcHRzWzFdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBwdHNbMl0sXG4gICAgICAgICAgeTogcHRzWzNdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBwdHNbNF0sXG4gICAgICAgICAgeTogcHRzWzVdXG4gICAgICAgIH0sIHQyKTtcbiAgICAgICAgcmV0dXJuIFtwdHNbMF0sIHB0c1sxXSwgbTAueCwgbTAueSwgbTEueCwgbTEueSwgbTIueCwgbTIueSwgcHRzWzRdLCBwdHNbNV1dO1xuICAgICAgfTtcbiAgICAgIHZhciBwdHMgPSBbXS5jb25jYXQoYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhiUHRzLnRvcExlZnQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMudG9wUmlnaHQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMuYm90dG9tUmlnaHQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMuYm90dG9tTGVmdCkpO1xuICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHB0cywgbm9kZVgsIG5vZGVZKTtcbiAgICB9LFxuICAgIGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOiBmdW5jdGlvbiBnZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHhCZWdpbiA9IGNlbnRlclggLSBodztcbiAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgIHZhciB5RW5kID0gY2VudGVyWSArIGhoO1xuICAgICAgdmFyIGN1cnZlQ29uc3RhbnRzID0gZ2V0QmFycmVsQ3VydmVDb25zdGFudHMod2lkdGgsIGhlaWdodCk7XG4gICAgICB2YXIgaE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmhlaWdodE9mZnNldDtcbiAgICAgIHZhciB3T2Zmc2V0ID0gY3VydmVDb25zdGFudHMud2lkdGhPZmZzZXQ7XG4gICAgICB2YXIgY3RybFB0WE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmN0cmxQdE9mZnNldFBjdCAqIHdpZHRoO1xuXG4gICAgICAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgY29udHJvbCBwdCBvbiBbNCwgNV1cbiAgICAgIHZhciBwdHMgPSB7XG4gICAgICAgIHRvcExlZnQ6IFt4QmVnaW4sIHlCZWdpbiArIGhPZmZzZXQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEJlZ2luICsgd09mZnNldCwgeUJlZ2luXSxcbiAgICAgICAgdG9wUmlnaHQ6IFt4RW5kIC0gd09mZnNldCwgeUJlZ2luLCB4RW5kIC0gY3RybFB0WE9mZnNldCwgeUJlZ2luLCB4RW5kLCB5QmVnaW4gKyBoT2Zmc2V0XSxcbiAgICAgICAgYm90dG9tUmlnaHQ6IFt4RW5kLCB5RW5kIC0gaE9mZnNldCwgeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhFbmQgLSB3T2Zmc2V0LCB5RW5kXSxcbiAgICAgICAgYm90dG9tTGVmdDogW3hCZWdpbiArIHdPZmZzZXQsIHlFbmQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhCZWdpbiwgeUVuZCAtIGhPZmZzZXRdXG4gICAgICB9O1xuICAgICAgcHRzLnRvcExlZnQuaXNUb3AgPSB0cnVlO1xuICAgICAgcHRzLnRvcFJpZ2h0LmlzVG9wID0gdHJ1ZTtcbiAgICAgIHB0cy5ib3R0b21MZWZ0LmlzQm90dG9tID0gdHJ1ZTtcbiAgICAgIHB0cy5ib3R0b21SaWdodC5pc0JvdHRvbSA9IHRydWU7XG4gICAgICByZXR1cm4gcHRzO1xuICAgIH0sXG4gICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIHZhciBjdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgdmFyIGhPZmZzZXQgPSBjdXJ2ZUNvbnN0YW50cy5oZWlnaHRPZmZzZXQ7XG4gICAgICB2YXIgd09mZnNldCA9IGN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuXG4gICAgICAvLyBDaGVjayBoQm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0IC0gMiAqIGhPZmZzZXQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIDIgKiB3T2Zmc2V0LCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGJhcnJlbEN1cnZlUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIHZhciBnZXRDdXJ2ZVQgPSBmdW5jdGlvbiBnZXRDdXJ2ZVQoeCwgeSwgY3VydmVQdHMpIHtcbiAgICAgICAgdmFyIHgwID0gY3VydmVQdHNbNF07XG4gICAgICAgIHZhciB4MSA9IGN1cnZlUHRzWzJdO1xuICAgICAgICB2YXIgeDIgPSBjdXJ2ZVB0c1swXTtcbiAgICAgICAgdmFyIHkwID0gY3VydmVQdHNbNV07XG4gICAgICAgIC8vIHZhciB5MSA9IGN1cnZlUHRzWyAzIF07XG4gICAgICAgIHZhciB5MiA9IGN1cnZlUHRzWzFdO1xuICAgICAgICB2YXIgeE1pbiA9IE1hdGgubWluKHgwLCB4Mik7XG4gICAgICAgIHZhciB4TWF4ID0gTWF0aC5tYXgoeDAsIHgyKTtcbiAgICAgICAgdmFyIHlNaW4gPSBNYXRoLm1pbih5MCwgeTIpO1xuICAgICAgICB2YXIgeU1heCA9IE1hdGgubWF4KHkwLCB5Mik7XG4gICAgICAgIGlmICh4TWluIDw9IHggJiYgeCA8PSB4TWF4ICYmIHlNaW4gPD0geSAmJiB5IDw9IHlNYXgpIHtcbiAgICAgICAgICB2YXIgY29lZmYgPSBiZXppZXJQdHNUb1F1YWRDb2VmZih4MCwgeDEsIHgyKTtcbiAgICAgICAgICB2YXIgcm9vdHMgPSBzb2x2ZVF1YWRyYXRpYyhjb2VmZlswXSwgY29lZmZbMV0sIGNvZWZmWzJdLCB4KTtcbiAgICAgICAgICB2YXIgdmFsaWRSb290cyA9IHJvb3RzLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgcmV0dXJuIDAgPD0gciAmJiByIDw9IDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHZhbGlkUm9vdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkUm9vdHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIHZhciBjdXJ2ZVJlZ2lvbnMgPSBPYmplY3Qua2V5cyhiYXJyZWxDdXJ2ZVB0cyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnZlUmVnaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29ybmVyID0gY3VydmVSZWdpb25zW2ldO1xuICAgICAgICB2YXIgY29ybmVyUHRzID0gYmFycmVsQ3VydmVQdHNbY29ybmVyXTtcbiAgICAgICAgdmFyIHQgPSBnZXRDdXJ2ZVQoeCwgeSwgY29ybmVyUHRzKTtcbiAgICAgICAgaWYgKHQgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB5MCA9IGNvcm5lclB0c1s1XTtcbiAgICAgICAgdmFyIHkxID0gY29ybmVyUHRzWzNdO1xuICAgICAgICB2YXIgeTIgPSBjb3JuZXJQdHNbMV07XG4gICAgICAgIHZhciBiZXpZID0gcWJlemllckF0KHkwLCB5MSwgeTIsIHQpO1xuICAgICAgICBpZiAoY29ybmVyUHRzLmlzVG9wICYmIGJlelkgPD0geSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3JuZXJQdHMuaXNCb3R0b20gJiYgeSA8PSBiZXpZKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59O1xuQlJwJDIuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snYm90dG9tLXJvdW5kLXJlY3RhbmdsZSddID0gdGhpcy5ub2RlU2hhcGVzWydib3R0b21yb3VuZHJlY3RhbmdsZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdib3R0b20tcm91bmQtcmVjdGFuZ2xlJyxcbiAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSAod2lkdGggLyAyICsgcGFkZGluZyk7XG4gICAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSAoaGVpZ2h0IC8gMiArIHBhZGRpbmcpO1xuICAgICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG4gICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgKHdpZHRoIC8gMiArIHBhZGRpbmcpO1xuICAgICAgdmFyIHRvcEludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIHRvcFN0YXJ0WCwgdG9wU3RhcnRZLCB0b3BFbmRYLCB0b3BFbmRZLCBmYWxzZSk7XG4gICAgICBpZiAodG9wSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0b3BJbnRlcnNlY3Rpb25zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSh4LCB5LCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBkaWFtID0gMiAqIGNvcm5lclJhZGl1cztcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIG5vbi1yb3VuZGVkIHRvcCBzaWRlXG4gICAgICB2YXIgb3V0ZXJXaWR0aCA9IHdpZHRoIC8gMiArIDIgKiBwYWRkaW5nO1xuICAgICAgdmFyIG91dGVySGVpZ2h0ID0gaGVpZ2h0IC8gMiArIDIgKiBwYWRkaW5nO1xuICAgICAgdmFyIHBvaW50cyA9IFtjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSAtIG91dGVySGVpZ2h0LCBjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSwgY2VudGVyWCArIG91dGVyV2lkdGgsIGNlbnRlclksIGNlbnRlclggKyBvdXRlcldpZHRoLCBjZW50ZXJZIC0gb3V0ZXJIZWlnaHRdO1xuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBib3R0b20gcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cywgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5yZWdpc3Rlck5vZGVTaGFwZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlU2hhcGVzID0gdGhpcy5ub2RlU2hhcGVzID0ge307XG4gIHZhciByZW5kZXJlciA9IHRoaXM7XG4gIHRoaXMuZ2VuZXJhdGVFbGxpcHNlKCk7XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCd0cmlhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSgzLCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXRyaWFuZ2xlJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDMsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3JlY3RhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSk7XG4gIG5vZGVTaGFwZXNbJ3NxdWFyZSddID0gbm9kZVNoYXBlc1sncmVjdGFuZ2xlJ107XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpO1xuICB0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCk7XG4gIHRoaXMuZ2VuZXJhdGVCYXJyZWwoKTtcbiAgdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7XG4gIHtcbiAgICB2YXIgZGlhbW9uZFBvaW50cyA9IFswLCAxLCAxLCAwLCAwLCAtMSwgLTEsIDBdO1xuICAgIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdkaWFtb25kJywgZGlhbW9uZFBvaW50cyk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtZGlhbW9uZCcsIGRpYW1vbmRQb2ludHMpO1xuICB9XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdwZW50YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg1LCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXBlbnRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDUsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hleGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNiwgMCkpO1xuICB0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCdyb3VuZC1oZXhhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDYsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hlcHRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDcsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtaGVwdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNywgMCkpO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbignb2N0YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg4LCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLW9jdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoOCwgMCkpO1xuICB2YXIgc3RhcjVQb2ludHMgPSBuZXcgQXJyYXkoMjApO1xuICB7XG4gICAgdmFyIG91dGVyUG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyg1LCAwKTtcbiAgICB2YXIgaW5uZXJQb2ludHMgPSBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzKDUsIE1hdGguUEkgLyA1KTtcblxuICAgIC8vIE91dGVyIHJhZGl1cyBpcyAxOyBpbm5lciByYWRpdXMgb2Ygc3RhciBpcyBzbWFsbGVyXG4gICAgdmFyIGlubmVyUmFkaXVzID0gMC41ICogKDMgLSBNYXRoLnNxcnQoNSkpO1xuICAgIGlubmVyUmFkaXVzICo9IDEuNTc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lclBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgIGlubmVyUG9pbnRzW2kgKiAyXSAqPSBpbm5lclJhZGl1cztcbiAgICAgIGlubmVyUG9pbnRzW2kgKiAyICsgMV0gKj0gaW5uZXJSYWRpdXM7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAgLyA0OyBpKyspIHtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0XSA9IG91dGVyUG9pbnRzW2kgKiAyXTtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0ICsgMV0gPSBvdXRlclBvaW50c1tpICogMiArIDFdO1xuICAgICAgc3RhcjVQb2ludHNbaSAqIDQgKyAyXSA9IGlubmVyUG9pbnRzW2kgKiAyXTtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0ICsgM10gPSBpbm5lclBvaW50c1tpICogMiArIDFdO1xuICAgIH1cbiAgfVxuICBzdGFyNVBvaW50cyA9IGZpdFBvbHlnb25Ub1NxdWFyZShzdGFyNVBvaW50cyk7XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdzdGFyJywgc3RhcjVQb2ludHMpO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigndmVlJywgWy0xLCAtMSwgMCwgLTAuMzMzLCAxLCAtMSwgMCwgMV0pO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigncmhvbWJvaWQnLCBbLTEsIC0xLCAwLjMzMywgLTEsIDEsIDEsIC0wLjMzMywgMV0pO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigncmlnaHQtcmhvbWJvaWQnLCBbLTAuMzMzLCAtMSwgMSwgLTEsIDAuMzMzLCAxLCAtMSwgMV0pO1xuICB0aGlzLm5vZGVTaGFwZXNbJ2NvbmNhdmVoZXhhZ29uJ10gPSB0aGlzLmdlbmVyYXRlUG9seWdvbignY29uY2F2ZS1oZXhhZ29uJywgWy0xLCAtMC45NSwgLTAuNzUsIDAsIC0xLCAwLjk1LCAxLCAwLjk1LCAwLjc1LCAwLCAxLCAtMC45NV0pO1xuICB7XG4gICAgdmFyIHRhZ1BvaW50cyA9IFstMSwgLTEsIDAuMjUsIC0xLCAxLCAwLCAwLjI1LCAxLCAtMSwgMV07XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3RhZycsIHRhZ1BvaW50cyk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtdGFnJywgdGFnUG9pbnRzKTtcbiAgfVxuICBub2RlU2hhcGVzLm1ha2VQb2x5Z29uID0gZnVuY3Rpb24gKHBvaW50cykge1xuICAgIC8vIHVzZSBjYWNoaW5nIG9uIHVzZXItc3BlY2lmaWVkIHBvbHlnb25zIHNvIHRoZXkgYXJlIGFzIGZhc3QgYXMgbmF0aXZlIHNoYXBlc1xuXG4gICAgdmFyIGtleSA9IHBvaW50cy5qb2luKCckJyk7XG4gICAgdmFyIG5hbWUgPSAncG9seWdvbi0nICsga2V5O1xuICAgIHZhciBzaGFwZTtcbiAgICBpZiAoc2hhcGUgPSB0aGlzW25hbWVdKSB7XG4gICAgICAvLyBnb3QgY2FjaGVkIHNoYXBlXG4gICAgICByZXR1cm4gc2hhcGU7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGFuZCBjYWNoZSBuZXcgc2hhcGVcbiAgICByZXR1cm4gcmVuZGVyZXIuZ2VuZXJhdGVQb2x5Z29uKG5hbWUsIHBvaW50cyk7XG4gIH07XG59O1xuXG52YXIgQlJwJDEgPSB7fTtcbkJScCQxLnRpbWVUb1JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVkcmF3VG90YWxUaW1lIC8gdGhpcy5yZWRyYXdDb3VudDtcbn07XG5CUnAkMS5yZWRyYXcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCBzdGF0aWNFbXB0eU9iamVjdCgpO1xuICB2YXIgciA9IHRoaXM7XG4gIGlmIChyLmF2ZXJhZ2VSZWRyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByLmF2ZXJhZ2VSZWRyYXdUaW1lID0gMDtcbiAgfVxuICBpZiAoci5sYXN0UmVkcmF3VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgci5sYXN0UmVkcmF3VGltZSA9IDA7XG4gIH1cbiAgaWYgKHIubGFzdERyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByLmxhc3REcmF3VGltZSA9IDA7XG4gIH1cbiAgci5yZXF1ZXN0ZWRGcmFtZSA9IHRydWU7XG4gIHIucmVuZGVyT3B0aW9ucyA9IG9wdGlvbnM7XG59O1xuQlJwJDEuYmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZuLCBwcmlvcml0eSkge1xuICAvLyB0aGUgcmVuZGVyZXIgY2FuJ3QgYWRkIHRpY2sgY2FsbGJhY2tzIHdoZW4gZGVzdHJveWVkXG4gIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJpb3JpdHkgPT0gbnVsbCkge1xuICAgIGVycm9yKCdQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlcicpO1xuICB9XG4gIHZhciBjYnMgPSB0aGlzLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcbiAgY2JzLnB1c2goe1xuICAgIGZuOiBmbixcbiAgICBwcmlvcml0eTogcHJpb3JpdHlcbiAgfSk7XG5cbiAgLy8gaGlnaGVyIHByaW9yaXR5IGNhbGxiYWNrcyBleGVjdXRlZCBmaXJzdFxuICBjYnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eTtcbiAgfSk7XG59O1xudmFyIGJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IGZ1bmN0aW9uIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCB3aWxsRHJhdywgc3RhcnRUaW1lKSB7XG4gIHZhciBjYnMgPSByLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyBpKyspIHtcbiAgICBjYnNbaV0uZm4od2lsbERyYXcsIHN0YXJ0VGltZSk7XG4gIH1cbn07XG5CUnAkMS5zdGFydFJlbmRlckxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGN5ID0gci5jeTtcbiAgaWYgKHIucmVuZGVyTG9vcFN0YXJ0ZWQpIHtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgci5yZW5kZXJMb29wU3RhcnRlZCA9IHRydWU7XG4gIH1cbiAgdmFyIHJlbmRlckZuID0gZnVuY3Rpb24gcmVuZGVyRm4ocmVxdWVzdFRpbWUpIHtcbiAgICBpZiAoci5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN5LmJhdGNoaW5nKCkpIDsgZWxzZSBpZiAoci5yZXF1ZXN0ZWRGcmFtZSAmJiAhci5za2lwRnJhbWUpIHtcbiAgICAgIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCB0cnVlLCByZXF1ZXN0VGltZSk7XG4gICAgICB2YXIgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgIHIucmVuZGVyKHIucmVuZGVyT3B0aW9ucyk7XG4gICAgICB2YXIgZW5kVGltZSA9IHIubGFzdERyYXdUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgIGlmIChyLmF2ZXJhZ2VSZWRyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgci5hdmVyYWdlUmVkcmF3VGltZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICB9XG4gICAgICBpZiAoci5yZWRyYXdDb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHIucmVkcmF3Q291bnQgPSAwO1xuICAgICAgfVxuICAgICAgci5yZWRyYXdDb3VudCsrO1xuICAgICAgaWYgKHIucmVkcmF3VG90YWxUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgci5yZWRyYXdUb3RhbFRpbWUgPSAwO1xuICAgICAgfVxuICAgICAgdmFyIGR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICAgIHIucmVkcmF3VG90YWxUaW1lICs9IGR1cmF0aW9uO1xuICAgICAgci5sYXN0UmVkcmF3VGltZSA9IGR1cmF0aW9uO1xuXG4gICAgICAvLyB1c2UgYSB3ZWlnaHRlZCBhdmVyYWdlIHdpdGggYSBiaWFzIGZyb20gdGhlIHByZXZpb3VzIGF2ZXJhZ2Ugc28gd2UgZG9uJ3Qgc3Bpa2Ugc28gZWFzaWx5XG4gICAgICByLmF2ZXJhZ2VSZWRyYXdUaW1lID0gci5hdmVyYWdlUmVkcmF3VGltZSAvIDIgKyBkdXJhdGlvbiAvIDI7XG4gICAgICByLnJlcXVlc3RlZEZyYW1lID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCBmYWxzZSwgcmVxdWVzdFRpbWUpO1xuICAgIH1cbiAgICByLnNraXBGcmFtZSA9IGZhbHNlO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJGbik7XG4gIH07XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJGbik7XG59O1xuXG52YXIgQmFzZVJlbmRlcmVyID0gZnVuY3Rpb24gQmFzZVJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgdGhpcy5pbml0KG9wdGlvbnMpO1xufTtcbnZhciBCUiA9IEJhc2VSZW5kZXJlcjtcbnZhciBCUnAgPSBCUi5wcm90b3R5cGU7XG5CUnAuY2xpZW50RnVuY3Rpb25zID0gWydyZWRyYXdIaW50JywgJ3JlbmRlcicsICdyZW5kZXJUbycsICdtYXRjaENhbnZhc1NpemUnLCAnbm9kZVNoYXBlSW1wbCcsICdhcnJvd1NoYXBlSW1wbCddO1xuQlJwLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgciA9IHRoaXM7XG4gIHIub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHIuY3kgPSBvcHRpb25zLmN5O1xuICB2YXIgY3RyID0gci5jb250YWluZXIgPSBvcHRpb25zLmN5LmNvbnRhaW5lcigpO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcblxuICAvLyBwcmVwZW5kIGEgc3R5bGVzaGVldCBpbiB0aGUgaGVhZCBzdWNoIHRoYXRcbiAgaWYgKGNvbnRhaW5lcldpbmRvdykge1xuICAgIHZhciBkb2N1bWVudCA9IGNvbnRhaW5lcldpbmRvdy5kb2N1bWVudDtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQ7XG4gICAgdmFyIHN0eWxlc2hlZXRJZCA9ICdfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQnO1xuICAgIHZhciBjbGFzc05hbWUgPSAnX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXInO1xuICAgIHZhciBzdHlsZXNoZWV0QWxyZWFkeUV4aXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlc2hlZXRJZCkgIT0gbnVsbDtcbiAgICBpZiAoY3RyLmNsYXNzTmFtZS5pbmRleE9mKGNsYXNzTmFtZSkgPCAwKSB7XG4gICAgICBjdHIuY2xhc3NOYW1lID0gKGN0ci5jbGFzc05hbWUgfHwgJycpICsgJyAnICsgY2xhc3NOYW1lO1xuICAgIH1cbiAgICBpZiAoIXN0eWxlc2hlZXRBbHJlYWR5RXhpc3RzKSB7XG4gICAgICB2YXIgc3R5bGVzaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZXNoZWV0LmlkID0gc3R5bGVzaGVldElkO1xuICAgICAgc3R5bGVzaGVldC50ZXh0Q29udGVudCA9ICcuJyArIGNsYXNzTmFtZSArICcgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0nO1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVzaGVldCwgaGVhZC5jaGlsZHJlblswXSk7IC8vIGZpcnN0IHNvIGxvd2VzdCBwcmlvcml0eVxuICAgIH1cblxuICAgIHZhciBjb21wdXRlZFN0eWxlID0gY29udGFpbmVyV2luZG93LmdldENvbXB1dGVkU3R5bGUoY3RyKTtcbiAgICB2YXIgcG9zaXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJyk7XG4gICAgaWYgKHBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgd2FybignQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHknKTtcbiAgICB9XG4gIH1cbiAgci5zZWxlY3Rpb24gPSBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAwXTsgLy8gQ29vcmRpbmF0ZXMgZm9yIHNlbGVjdGlvbiBib3gsIHBsdXMgZW5hYmxlZCBmbGFnXG5cbiAgci5iZXppZXJQcm9qUGN0cyA9IFswLjA1LCAwLjIyNSwgMC40LCAwLjUsIDAuNiwgMC43NzUsIDAuOTVdO1xuXG4gIC8vLS1Qb2ludGVyLXJlbGF0ZWQgZGF0YVxuICByLmhvdmVyRGF0YSA9IHtcbiAgICBkb3duOiBudWxsLFxuICAgIGxhc3Q6IG51bGwsXG4gICAgZG93blRpbWU6IG51bGwsXG4gICAgdHJpZ2dlck1vZGU6IG51bGwsXG4gICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgIGluaXRpYWxQYW46IFtudWxsLCBudWxsXSxcbiAgICBjYXB0dXJlOiBmYWxzZVxuICB9O1xuICByLmRyYWdEYXRhID0ge1xuICAgIHBvc3NpYmxlRHJhZ0VsZW1lbnRzOiBbXVxuICB9O1xuICByLnRvdWNoRGF0YSA9IHtcbiAgICBzdGFydDogbnVsbCxcbiAgICBjYXB0dXJlOiBmYWxzZSxcbiAgICAvLyBUaGVzZSAzIGZpZWxkcyByZWxhdGVkIHRvIHRhcCwgdGFwaG9sZCBldmVudHNcbiAgICBzdGFydFBvc2l0aW9uOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXG4gICAgc2luZ2xlVG91Y2hTdGFydFRpbWU6IG51bGwsXG4gICAgc2luZ2xlVG91Y2hNb3ZlZDogdHJ1ZSxcbiAgICBub3c6IFtudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSxcbiAgICBlYXJsaWVyOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF1cbiAgfTtcbiAgci5yZWRyYXdzID0gMDtcbiAgci5zaG93RnBzID0gb3B0aW9ucy5zaG93RnBzO1xuICByLmRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcbiAgci5oaWRlRWRnZXNPblZpZXdwb3J0ID0gb3B0aW9ucy5oaWRlRWRnZXNPblZpZXdwb3J0O1xuICByLnRleHR1cmVPblZpZXdwb3J0ID0gb3B0aW9ucy50ZXh0dXJlT25WaWV3cG9ydDtcbiAgci53aGVlbFNlbnNpdGl2aXR5ID0gb3B0aW9ucy53aGVlbFNlbnNpdGl2aXR5O1xuICByLm1vdGlvbkJsdXJFbmFibGVkID0gb3B0aW9ucy5tb3Rpb25CbHVyOyAvLyBvbiBieSBkZWZhdWx0XG4gIHIuZm9yY2VkUGl4ZWxSYXRpbyA9IG51bWJlciQxKG9wdGlvbnMucGl4ZWxSYXRpbykgPyBvcHRpb25zLnBpeGVsUmF0aW8gOiBudWxsO1xuICByLm1vdGlvbkJsdXIgPSBvcHRpb25zLm1vdGlvbkJsdXI7IC8vIGZvciBpbml0aWFsIGtpY2sgb2ZmXG4gIHIubW90aW9uQmx1ck9wYWNpdHkgPSBvcHRpb25zLm1vdGlvbkJsdXJPcGFjaXR5O1xuICByLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kgPSAxIC0gci5tb3Rpb25CbHVyT3BhY2l0eTtcbiAgci5tb3Rpb25CbHVyUHhSYXRpbyA9IDE7XG4gIHIubWJQeFJCbHVycnkgPSAxOyAvLzAuODtcbiAgci5taW5NYkxvd1F1YWxGcmFtZXMgPSA0O1xuICByLmZ1bGxRdWFsaXR5TWIgPSBmYWxzZTtcbiAgci5jbGVhcmVkRm9yTW90aW9uQmx1ciA9IFtdO1xuICByLmRlc2t0b3BUYXBUaHJlc2hvbGQgPSBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQ7XG4gIHIuZGVza3RvcFRhcFRocmVzaG9sZDIgPSBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQgKiBvcHRpb25zLmRlc2t0b3BUYXBUaHJlc2hvbGQ7XG4gIHIudG91Y2hUYXBUaHJlc2hvbGQgPSBvcHRpb25zLnRvdWNoVGFwVGhyZXNob2xkO1xuICByLnRvdWNoVGFwVGhyZXNob2xkMiA9IG9wdGlvbnMudG91Y2hUYXBUaHJlc2hvbGQgKiBvcHRpb25zLnRvdWNoVGFwVGhyZXNob2xkO1xuICByLnRhcGhvbGREdXJhdGlvbiA9IDUwMDtcbiAgci5iaW5kaW5ncyA9IFtdO1xuICByLmJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IFtdO1xuICByLmJlZm9yZVJlbmRlclByaW9yaXRpZXMgPSB7XG4gICAgLy8gaGlnaGVyIHByaW9yaXR5IGV4ZWNzIGJlZm9yZSBsb3dlciBvbmVcbiAgICBhbmltYXRpb25zOiA0MDAsXG4gICAgZWxlQ2FsY3M6IDMwMCxcbiAgICBlbGVUeHJEZXE6IDIwMCxcbiAgICBseXJUeHJEZXE6IDE1MCxcbiAgICBseXJUeHJTa2lwOiAxMDBcbiAgfTtcbiAgci5yZWdpc3Rlck5vZGVTaGFwZXMoKTtcbiAgci5yZWdpc3RlckFycm93U2hhcGVzKCk7XG4gIHIucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpO1xufTtcbkJScC5ub3RpZnkgPSBmdW5jdGlvbiAoZXZlbnROYW1lLCBlbGVzKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGN5ID0gci5jeTtcblxuICAvLyB0aGUgcmVuZGVyZXIgY2FuJ3QgYmUgbm90aWZpZWQgYWZ0ZXIgaXQncyBkZXN0cm95ZWRcbiAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICdpbml0Jykge1xuICAgIHIubG9hZCgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZXZlbnROYW1lID09PSAnZGVzdHJveScpIHtcbiAgICByLmRlc3Ryb3koKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJ2FkZCcgfHwgZXZlbnROYW1lID09PSAncmVtb3ZlJyB8fCBldmVudE5hbWUgPT09ICdtb3ZlJyAmJiBjeS5oYXNDb21wb3VuZE5vZGVzKCkgfHwgZXZlbnROYW1lID09PSAnbG9hZCcgfHwgZXZlbnROYW1lID09PSAnem9yZGVyJyB8fCBldmVudE5hbWUgPT09ICdtb3VudCcpIHtcbiAgICByLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcygpO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICdsb2FkJyB8fCBldmVudE5hbWUgPT09ICdyZXNpemUnIHx8IGV2ZW50TmFtZSA9PT0gJ21vdW50Jykge1xuICAgIHIuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCk7XG4gICAgci5tYXRjaENhbnZhc1NpemUoci5jb250YWluZXIpO1xuICB9XG4gIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgdGhpcy5zdGFydFJlbmRlckxvb3AoKTtcbiAgdGhpcy5yZWRyYXcoKTtcbn07XG5CUnAuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICByLmRlc3Ryb3llZCA9IHRydWU7XG4gIHIuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByLmJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGJpbmRpbmcgPSByLmJpbmRpbmdzW2ldO1xuICAgIHZhciBiID0gYmluZGluZztcbiAgICB2YXIgdGd0ID0gYi50YXJnZXQ7XG4gICAgKHRndC5vZmYgfHwgdGd0LnJlbW92ZUV2ZW50TGlzdGVuZXIpLmFwcGx5KHRndCwgYi5hcmdzKTtcbiAgfVxuICByLmJpbmRpbmdzID0gW107XG4gIHIuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzID0gW107XG4gIHIub25VcGRhdGVFbGVDYWxjc0ZucyA9IFtdO1xuICBpZiAoci5yZW1vdmVPYnNlcnZlcikge1xuICAgIHIucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG4gIGlmIChyLnN0eWxlT2JzZXJ2ZXIpIHtcbiAgICByLnN0eWxlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG4gIGlmIChyLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgci5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cbiAgaWYgKHIubGFiZWxDYWxjRGl2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoci5sYWJlbENhbGNEaXYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWUxMCBpc3N1ZSAjMTAxNFxuICAgIH1cbiAgfVxufTtcbkJScC5pc0hlYWRsZXNzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuW0JScCRmLCBCUnAkNSwgQlJwJDQsIEJScCQzLCBCUnAkMiwgQlJwJDFdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gIGV4dGVuZChCUnAsIHByb3BzKTtcbn0pO1xuXG52YXIgZnVsbEZwc1RpbWUgPSAxMDAwIC8gNjA7IC8vIGFzc3VtZSA2MCBmcmFtZXMgcGVyIHNlY29uZFxuXG52YXIgZGVmcyA9IHtcbiAgc2V0dXBEZXF1ZXVlaW5nOiBmdW5jdGlvbiBzZXR1cERlcXVldWVpbmcob3B0cykge1xuICAgIHJldHVybiBmdW5jdGlvbiBzZXR1cERlcXVldWVpbmdJbXBsKCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICAgICAgaWYgKHNlbGYuZGVxdWV1ZWluZ1NldHVwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuZGVxdWV1ZWluZ1NldHVwID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBxdWV1ZVJlZHJhdyA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9LCBvcHRzLmRlcVJlZHJhd1RocmVzaG9sZCk7XG4gICAgICB2YXIgZGVxdWV1ZSA9IGZ1bmN0aW9uIGRlcXVldWUod2lsbERyYXcsIGZyYW1lU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICB2YXIgYXZnUmVuZGVyVGltZSA9IHIuYXZlcmFnZVJlZHJhd1RpbWU7XG4gICAgICAgIHZhciByZW5kZXJUaW1lID0gci5sYXN0UmVkcmF3VGltZTtcbiAgICAgICAgdmFyIGRlcWQgPSBbXTtcbiAgICAgICAgdmFyIGV4dGVudCA9IHIuY3kuZXh0ZW50KCk7XG4gICAgICAgIHZhciBwaXhlbFJhdGlvID0gci5nZXRQaXhlbFJhdGlvKCk7XG5cbiAgICAgICAgLy8gaWYgd2UgYXJlbid0IGluIGEgdGljayB0aGF0IGNhdXNlcyBhIGRyYXcsIHRoZW4gdGhlIHJlbmRlcmVkIHN0eWxlXG4gICAgICAgIC8vIHF1ZXVlIHdvbid0IGF1dG9tYXRpY2FsbHkgYmUgZmx1c2hlZCBiZWZvcmUgZGVxdWV1ZWluZyBzdGFydHNcbiAgICAgICAgaWYgKCF3aWxsRHJhdykge1xuICAgICAgICAgIHIuZmx1c2hSZW5kZXJlZFN0eWxlUXVldWUoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgICAgdmFyIG5vdyA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgICAgdmFyIGR1cmF0aW9uID0gbm93IC0gc3RhcnRUaW1lO1xuICAgICAgICAgIHZhciBmcmFtZUR1cmF0aW9uID0gbm93IC0gZnJhbWVTdGFydFRpbWU7XG4gICAgICAgICAgaWYgKHJlbmRlclRpbWUgPCBmdWxsRnBzVGltZSkge1xuICAgICAgICAgICAgLy8gaWYgd2UncmUgcmVuZGVyaW5nIGZhc3RlciB0aGFuIHRoZSBpZGVhbCBmcHMsIHRoZW4gZG8gZGVxdWV1ZWluZ1xuICAgICAgICAgICAgLy8gZHVyaW5nIGFsbCBvZiB0aGUgcmVtYWluaW5nIGZyYW1lIHRpbWVcblxuICAgICAgICAgICAgdmFyIHRpbWVBdmFpbGFibGUgPSBmdWxsRnBzVGltZSAtICh3aWxsRHJhdyA/IGF2Z1JlbmRlclRpbWUgOiAwKTtcbiAgICAgICAgICAgIGlmIChmcmFtZUR1cmF0aW9uID49IG9wdHMuZGVxRmFzdENvc3QgKiB0aW1lQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAod2lsbERyYXcpIHtcbiAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uID49IG9wdHMuZGVxQ29zdCAqIHJlbmRlclRpbWUgfHwgZHVyYXRpb24gPj0gb3B0cy5kZXFBdmdDb3N0ICogYXZnUmVuZGVyVGltZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZyYW1lRHVyYXRpb24gPj0gb3B0cy5kZXFOb0RyYXdDb3N0ICogZnVsbEZwc1RpbWUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB0aGlzRGVxZCA9IG9wdHMuZGVxKHNlbGYsIHBpeGVsUmF0aW8sIGV4dGVudCk7XG4gICAgICAgICAgaWYgKHRoaXNEZXFkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpc0RlcWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZGVxZC5wdXNoKHRoaXNEZXFkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2FsbGJhY2tzIG9uIGRlcXVldWVcbiAgICAgICAgaWYgKGRlcWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG9wdHMub25EZXFkKHNlbGYsIGRlcWQpO1xuICAgICAgICAgIGlmICghd2lsbERyYXcgJiYgb3B0cy5zaG91bGRSZWRyYXcoc2VsZiwgZGVxZCwgcGl4ZWxSYXRpbywgZXh0ZW50KSkge1xuICAgICAgICAgICAgcXVldWVSZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgcHJpb3JpdHkgPSBvcHRzLnByaW9yaXR5IHx8IG5vb3AkMTtcbiAgICAgIHIuYmVmb3JlUmVuZGVyKGRlcXVldWUsIHByaW9yaXR5KHNlbGYpKTtcbiAgICB9O1xuICB9XG59O1xuXG4vLyBBbGxvd3MgbG9va3VwcyBmb3IgKGVsZSwgbHZsKSA9PiBjYWNoZS5cbi8vIFVzZXMga2V5cyBzbyBlbGVtZW50cyBtYXkgc2hhcmUgdGhlIHNhbWUgY2FjaGUuXG52YXIgRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAoZ2V0S2V5KSB7XG4gICAgdmFyIGRvZXNFbGVJbnZhbGlkYXRlS2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzaWZ5O1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwKTtcbiAgICB0aGlzLmlkc0J5S2V5ID0gbmV3IE1hcCQyKCk7XG4gICAgdGhpcy5rZXlGb3JJZCA9IG5ldyBNYXAkMigpO1xuICAgIHRoaXMuY2FjaGVzQnlMdmwgPSBuZXcgTWFwJDIoKTtcbiAgICB0aGlzLmx2bHMgPSBbXTtcbiAgICB0aGlzLmdldEtleSA9IGdldEtleTtcbiAgICB0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5ID0gZG9lc0VsZUludmFsaWRhdGVLZXk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAsIFt7XG4gICAga2V5OiBcImdldElkc0ZvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJZHNGb3Ioa2V5KSB7XG4gICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoXCJDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleVwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBpZHNCeUtleSA9IHRoaXMuaWRzQnlLZXk7XG4gICAgICB2YXIgaWRzID0gdGhpcy5pZHNCeUtleS5nZXQoa2V5KTtcbiAgICAgIGlmICghaWRzKSB7XG4gICAgICAgIGlkcyA9IG5ldyBTZXQkMSgpO1xuICAgICAgICBpZHNCeUtleS5zZXQoa2V5LCBpZHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkSWRGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSkuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlSWRGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVsZXRlSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSlbXCJkZWxldGVcIl0oaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPZklkc0ZvcktleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1iZXJPZklkc0ZvcktleShrZXkpIHtcbiAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkc0ZvcihrZXkpLnNpemU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZUtleU1hcHBpbmdGb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlS2V5TWFwcGluZ0ZvcihlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgdmFyIHByZXZLZXkgPSB0aGlzLmtleUZvcklkLmdldChpZCk7XG4gICAgICB2YXIgY3VycktleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gICAgICB0aGlzLmRlbGV0ZUlkRm9yS2V5KHByZXZLZXksIGlkKTtcbiAgICAgIHRoaXMuYWRkSWRGb3JLZXkoY3VycktleSwgaWQpO1xuICAgICAgdGhpcy5rZXlGb3JJZC5zZXQoaWQsIGN1cnJLZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZWxldGVLZXlNYXBwaW5nRm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKSB7XG4gICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICAgIHZhciBwcmV2S2V5ID0gdGhpcy5rZXlGb3JJZC5nZXQoaWQpO1xuICAgICAgdGhpcy5kZWxldGVJZEZvcktleShwcmV2S2V5LCBpZCk7XG4gICAgICB0aGlzLmtleUZvcklkW1wiZGVsZXRlXCJdKGlkKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwia2V5SGFzQ2hhbmdlZEZvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBrZXlIYXNDaGFuZ2VkRm9yKGVsZSkge1xuICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICB2YXIgcHJldktleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTtcbiAgICAgIHZhciBuZXdLZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgcmV0dXJuIHByZXZLZXkgIT09IG5ld0tleTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNJbnZhbGlkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzSW52YWxpZChlbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleUhhc0NoYW5nZWRGb3IoZWxlKSB8fCB0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGVsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENhY2hlc0F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlc0F0KGx2bCkge1xuICAgICAgdmFyIGNhY2hlc0J5THZsID0gdGhpcy5jYWNoZXNCeUx2bCxcbiAgICAgICAgbHZscyA9IHRoaXMubHZscztcbiAgICAgIHZhciBjYWNoZXMgPSBjYWNoZXNCeUx2bC5nZXQobHZsKTtcbiAgICAgIGlmICghY2FjaGVzKSB7XG4gICAgICAgIGNhY2hlcyA9IG5ldyBNYXAkMigpO1xuICAgICAgICBjYWNoZXNCeUx2bC5zZXQobHZsLCBjYWNoZXMpO1xuICAgICAgICBsdmxzLnB1c2gobHZsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlKGtleSwgbHZsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChsdmwpLmdldChrZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KGVsZSwgbHZsKSB7XG4gICAgICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuXG4gICAgICAvLyBnZXR0aW5nIGZvciBhbiBlbGVtZW50IG1heSBuZWVkIHRvIGFkZCB0byB0aGUgaWQgbGlzdCBiL2MgZWxlcyBjYW4gc2hhcmUga2V5c1xuICAgICAgaWYgKGNhY2hlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKGVsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZvckNhY2hlZEtleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGb3JDYWNoZWRLZXkoZWxlLCBsdmwpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmtleUZvcklkLmdldChlbGUuaWQoKSk7IC8vIG4uYi4gdXNlIGNhY2hlZCBrZXksIG5vdCBuZXdseSBjb21wdXRlZCBrZXlcbiAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNDYWNoZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNDYWNoZShrZXksIGx2bCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobHZsKS5oYXMoa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhlbGUsIGx2bCkge1xuICAgICAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gICAgICByZXR1cm4gdGhpcy5oYXNDYWNoZShrZXksIGx2bCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldENhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldENhY2hlKGtleSwgbHZsLCBjYWNoZSkge1xuICAgICAgY2FjaGUua2V5ID0ga2V5O1xuICAgICAgdGhpcy5nZXRDYWNoZXNBdChsdmwpLnNldChrZXksIGNhY2hlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChlbGUsIGx2bCwgY2FjaGUpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgdGhpcy5zZXRDYWNoZShrZXksIGx2bCwgY2FjaGUpO1xuICAgICAgdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKGVsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZUNhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUNhY2hlKGtleSwgbHZsKSB7XG4gICAgICB0aGlzLmdldENhY2hlc0F0KGx2bClbXCJkZWxldGVcIl0oa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoZWxlLCBsdmwpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZUtleShrZXkpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICB0aGlzLmx2bHMuZm9yRWFjaChmdW5jdGlvbiAobHZsKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRydWUgaWYgbm8gb3RoZXIgZWxlcyByZWZlcmVuY2UgdGhlIGludmFsaWRhdGVkIGNhY2hlIChuLmIuIG90aGVyIGVsZXMgbWF5IG5lZWQgdGhlIGNhY2hlIHdpdGggdGhlIHNhbWUga2V5KVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZShlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgdmFyIGtleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTsgLy8gbi5iLiB1c2Ugc3RvcmVkIGtleSByYXRoZXIgdGhhbiBjdXJyZW50IChwb3RlbnRpYWwga2V5KVxuXG4gICAgICB0aGlzLmRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKTtcbiAgICAgIHZhciBlbnRpcmVLZXlJbnZhbGlkYXRlZCA9IHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoZWxlKTtcbiAgICAgIGlmIChlbnRpcmVLZXlJbnZhbGlkYXRlZCkge1xuICAgICAgICAvLyBjbGVhciBtYXBwaW5nIGZvciBjdXJyZW50IGtleVxuICAgICAgICB0aGlzLmludmFsaWRhdGVLZXkoa2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRpcmVLZXlJbnZhbGlkYXRlZCB8fCB0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KGtleSkgPT09IDA7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwO1xufSgpO1xuXG52YXIgbWluVHhySCA9IDI1OyAvLyB0aGUgc2l6ZSBvZiB0aGUgdGV4dHVyZSBjYWNoZSBmb3Igc21hbGwgaGVpZ2h0IGVsZXMgKHNwZWNpYWwgY2FzZSlcbnZhciB0eHJTdGVwSCA9IDUwOyAvLyB0aGUgbWluIHNpemUgb2YgdGhlIHJlZ3VsYXIgY2FjaGUsIGFuZCB0aGUgc2l6ZSBpdCBpbmNyZWFzZXMgd2l0aCBlYWNoIHN0ZXAgdXBcbnZhciBtaW5MdmwkMSA9IC00OyAvLyB3aGVuIHNjYWxpbmcgc21hbGxlciB0aGFuIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZS1yZW5kZXJcbnZhciBtYXhMdmwkMSA9IDM7IC8vIHdoZW4gbGFyZ2VyIHRoYW4gdGhpcyBzY2FsZSBqdXN0IHJlbmRlciBkaXJlY3RseSAoY2FjaGluZyBpcyBub3QgaGVscGZ1bClcbnZhciBtYXhab29tJDEgPSA3Ljk5OyAvLyBiZXlvbmQgdGhpcyB6b29tIGxldmVsLCBsYXllcmVkIHRleHR1cmVzIGFyZSBub3QgdXNlZFxudmFyIGVsZVR4clNwYWNpbmcgPSA4OyAvLyBzcGFjaW5nIGJldHdlZW4gZWxlbWVudHMgb24gdGV4dHVyZXMgdG8gYXZvaWQgYmxpdHRpbmcgb3ZlcmxhcHNcbnZhciBkZWZUeHJXaWR0aCA9IDEwMjQ7IC8vIGRlZmF1bHQvbWluaW11bSB0ZXh0dXJlIHdpZHRoXG52YXIgbWF4VHhyVyA9IDEwMjQ7IC8vIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGEgdGV4dHVyZVxudmFyIG1heFR4ckggPSAxMDI0OyAvLyB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYSB0ZXh0dXJlXG52YXIgbWluVXRpbGl0eSA9IDAuMjsgLy8gaWYgdXNhZ2Ugb2YgdGV4dHVyZSBpcyBsZXNzIHRoYW4gdGhpcywgaXQgaXMgcmV0aXJlZFxudmFyIG1heEZ1bGxuZXNzID0gMC44OyAvLyBmdWxsbmVzcyBvZiB0ZXh0dXJlIGFmdGVyIHdoaWNoIHF1ZXVlIHJlbW92YWwgaXMgY2hlY2tlZFxudmFyIG1heEZ1bGxuZXNzQ2hlY2tzID0gMTA7IC8vIGRlcXVldWVkIGFmdGVyIHRoaXMgbWFueSBjaGVja3NcbnZhciBkZXFDb3N0JDEgPSAwLjE1OyAvLyAlIG9mIGFkZCdsIHJlbmRlcmluZyBjb3N0IGFsbG93ZWQgZm9yIGRlcXVldWluZyBlbGUgY2FjaGVzIGVhY2ggZnJhbWVcbnZhciBkZXFBdmdDb3N0JDEgPSAwLjE7IC8vICUgb2YgYWRkJ2wgcmVuZGVyaW5nIGNvc3QgY29tcGFyZWQgdG8gYXZlcmFnZSBvdmVyYWxsIHJlZHJhdyB0aW1lXG52YXIgZGVxTm9EcmF3Q29zdCQxID0gMC45OyAvLyAlIG9mIGF2ZyBmcmFtZSB0aW1lIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlcXVldWVpbmcgd2hlbiBub3QgZHJhd2luZ1xudmFyIGRlcUZhc3RDb3N0JDEgPSAwLjk7IC8vICUgb2YgZnJhbWUgdGltZSB0byBiZSB1c2VkIHdoZW4gPjYwZnBzXG52YXIgZGVxUmVkcmF3VGhyZXNob2xkJDEgPSAxMDA7IC8vIHRpbWUgdG8gYmF0Y2ggcmVkcmF3cyB0b2dldGhlciBmcm9tIGRlcXVldWVpbmcgdG8gYWxsb3cgbW9yZSBkZXF1ZXVlaW5nIGNhbGNzIHRvIGhhcHBlbiBpbiB0aGUgbWVhbndoaWxlXG52YXIgbWF4RGVxU2l6ZSQxID0gMTsgLy8gbnVtYmVyIG9mIGVsZXMgdG8gZGVxdWV1ZSBhbmQgcmVuZGVyIGF0IGhpZ2hlciB0ZXh0dXJlIGluIGVhY2ggYmF0Y2hcblxudmFyIGdldFR4clJlYXNvbnMgPSB7XG4gIGRlcXVldWU6ICdkZXF1ZXVlJyxcbiAgZG93bnNjYWxlOiAnZG93bnNjYWxlJyxcbiAgaGlnaFF1YWxpdHk6ICdoaWdoUXVhbGl0eSdcbn07XG52YXIgaW5pdERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIGdldEtleTogbnVsbCxcbiAgZG9lc0VsZUludmFsaWRhdGVLZXk6IGZhbHNpZnksXG4gIGRyYXdFbGVtZW50OiBudWxsLFxuICBnZXRCb3VuZGluZ0JveDogbnVsbCxcbiAgZ2V0Um90YXRpb25Qb2ludDogbnVsbCxcbiAgZ2V0Um90YXRpb25PZmZzZXQ6IG51bGwsXG4gIGlzVmlzaWJsZTogdHJ1ZWlmeSxcbiAgYWxsb3dFZGdlVHhyQ2FjaGluZzogdHJ1ZSxcbiAgYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiB0cnVlXG59KTtcbnZhciBFbGVtZW50VGV4dHVyZUNhY2hlID0gZnVuY3Rpb24gRWxlbWVudFRleHR1cmVDYWNoZShyZW5kZXJlciwgaW5pdE9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gIHNlbGYub25EZXF1ZXVlcyA9IFtdO1xuICB2YXIgb3B0cyA9IGluaXREZWZhdWx0cyhpbml0T3B0aW9ucyk7XG4gIGV4dGVuZChzZWxmLCBvcHRzKTtcbiAgc2VsZi5sb29rdXAgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cChvcHRzLmdldEtleSwgb3B0cy5kb2VzRWxlSW52YWxpZGF0ZUtleSk7XG4gIHNlbGYuc2V0dXBEZXF1ZXVlaW5nKCk7XG59O1xudmFyIEVUQ3AgPSBFbGVtZW50VGV4dHVyZUNhY2hlLnByb3RvdHlwZTtcbkVUQ3AucmVhc29ucyA9IGdldFR4clJlYXNvbnM7XG5cbi8vIHRoZSBsaXN0IG9mIHRleHR1cmVzIGluIHdoaWNoIG5ldyBzdWJ0ZXh0dXJlcyBmb3IgZWxlbWVudHMgY2FuIGJlIHBsYWNlZFxuRVRDcC5nZXRUZXh0dXJlUXVldWUgPSBmdW5jdGlvbiAodHhySCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYuZWxlSW1nQ2FjaGVzID0gc2VsZi5lbGVJbWdDYWNoZXMgfHwge307XG4gIHJldHVybiBzZWxmLmVsZUltZ0NhY2hlc1t0eHJIXSA9IHNlbGYuZWxlSW1nQ2FjaGVzW3R4ckhdIHx8IFtdO1xufTtcblxuLy8gdGhlIGxpc3Qgb2YgdXN1c2VkIHRleHR1cmVzIHdoaWNoIGNhbiBiZSByZWN5Y2xlZCAoaW4gdXNlIGluIHRleHR1cmUgcXVldWUpXG5FVENwLmdldFJldGlyZWRUZXh0dXJlUXVldWUgPSBmdW5jdGlvbiAodHhySCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBydHh0clFzID0gc2VsZi5lbGVJbWdDYWNoZXMucmV0aXJlZCA9IHNlbGYuZWxlSW1nQ2FjaGVzLnJldGlyZWQgfHwge307XG4gIHZhciBydHh0clEgPSBydHh0clFzW3R4ckhdID0gcnR4dHJRc1t0eHJIXSB8fCBbXTtcbiAgcmV0dXJuIHJ0eHRyUTtcbn07XG5cbi8vIHF1ZXVlIG9mIGVsZW1lbnQgZHJhdyByZXF1ZXN0cyBhdCBkaWZmZXJlbnQgc2NhbGUgbGV2ZWxzXG5FVENwLmdldEVsZW1lbnRRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYuZWxlQ2FjaGVRdWV1ZSA9IHNlbGYuZWxlQ2FjaGVRdWV1ZSB8fCBuZXcgaGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLnJlcXMgLSBhLnJlcXM7XG4gIH0pO1xuICByZXR1cm4gcTtcbn07XG5cbi8vIHF1ZXVlIG9mIGVsZW1lbnQgZHJhdyByZXF1ZXN0cyBhdCBkaWZmZXJlbnQgc2NhbGUgbGV2ZWxzIChlbGVtZW50IGlkIGxvb2t1cClcbkVUQ3AuZ2V0RWxlbWVudEtleVRvUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGsycSA9IHNlbGYuZWxlS2V5VG9DYWNoZVF1ZXVlID0gc2VsZi5lbGVLZXlUb0NhY2hlUXVldWUgfHwge307XG4gIHJldHVybiBrMnE7XG59O1xuRVRDcC5nZXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZSwgYmIsIHB4UmF0aW8sIGx2bCwgcmVhc29uKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICB2YXIgem9vbSA9IHIuY3kuem9vbSgpO1xuICB2YXIgbG9va3VwID0gdGhpcy5sb29rdXA7XG4gIGlmICghYmIgfHwgYmIudyA9PT0gMCB8fCBiYi5oID09PSAwIHx8IGlzTmFOKGJiLncpIHx8IGlzTmFOKGJiLmgpIHx8ICFlbGUudmlzaWJsZSgpIHx8IGVsZS5yZW1vdmVkKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIXNlbGYuYWxsb3dFZGdlVHhyQ2FjaGluZyAmJiBlbGUuaXNFZGdlKCkgfHwgIXNlbGYuYWxsb3dQYXJlbnRUeHJDYWNoaW5nICYmIGVsZS5pc1BhcmVudCgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGx2bCA9PSBudWxsKSB7XG4gICAgbHZsID0gTWF0aC5jZWlsKGxvZzIoem9vbSAqIHB4UmF0aW8pKTtcbiAgfVxuICBpZiAobHZsIDwgbWluTHZsJDEpIHtcbiAgICBsdmwgPSBtaW5MdmwkMTtcbiAgfSBlbHNlIGlmICh6b29tID49IG1heFpvb20kMSB8fCBsdmwgPiBtYXhMdmwkMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBzY2FsZSA9IE1hdGgucG93KDIsIGx2bCk7XG4gIHZhciBlbGVTY2FsZWRIID0gYmIuaCAqIHNjYWxlO1xuICB2YXIgZWxlU2NhbGVkVyA9IGJiLncgKiBzY2FsZTtcbiAgdmFyIHNjYWxlZExhYmVsU2hvd24gPSByLmVsZVRleHRCaWdnZXJUaGFuTWluKGVsZSwgc2NhbGUpO1xuICBpZiAoIXRoaXMuaXNWaXNpYmxlKGVsZSwgc2NhbGVkTGFiZWxTaG93bikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgZWxlQ2FjaGUgPSBsb29rdXAuZ2V0KGVsZSwgbHZsKTtcblxuICAvLyBpZiB0aGlzIGdldCB3YXMgb24gYW4gdW51c2VkL2ludmFsaWRhdGVkIGNhY2hlLCB0aGVuIHJlc3RvcmUgdGhlIHRleHR1cmUgdXNhZ2UgbWV0cmljXG4gIGlmIChlbGVDYWNoZSAmJiBlbGVDYWNoZS5pbnZhbGlkYXRlZCkge1xuICAgIGVsZUNhY2hlLmludmFsaWRhdGVkID0gZmFsc2U7XG4gICAgZWxlQ2FjaGUudGV4dHVyZS5pbnZhbGlkYXRlZFdpZHRoIC09IGVsZUNhY2hlLndpZHRoO1xuICB9XG4gIGlmIChlbGVDYWNoZSkge1xuICAgIHJldHVybiBlbGVDYWNoZTtcbiAgfVxuICB2YXIgdHhySDsgLy8gd2hpY2ggdGV4dHVyZSBoZWlnaHQgdGhpcyBlbGUgYmVsb25ncyB0b1xuXG4gIGlmIChlbGVTY2FsZWRIIDw9IG1pblR4ckgpIHtcbiAgICB0eHJIID0gbWluVHhySDtcbiAgfSBlbHNlIGlmIChlbGVTY2FsZWRIIDw9IHR4clN0ZXBIKSB7XG4gICAgdHhySCA9IHR4clN0ZXBIO1xuICB9IGVsc2Uge1xuICAgIHR4ckggPSBNYXRoLmNlaWwoZWxlU2NhbGVkSCAvIHR4clN0ZXBIKSAqIHR4clN0ZXBIO1xuICB9XG4gIGlmIChlbGVTY2FsZWRIID4gbWF4VHhySCB8fCBlbGVTY2FsZWRXID4gbWF4VHhyVykge1xuICAgIHJldHVybiBudWxsOyAvLyBjYWNoaW5nIGxhcmdlIGVsZW1lbnRzIGlzIG5vdCBlZmZpY2llbnRcbiAgfVxuXG4gIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG5cbiAgLy8gZmlyc3QgdHJ5IHRoZSBzZWNvbmQgbGFzdCBvbmUgaW4gY2FzZSBpdCBoYXMgc3BhY2UgYXQgdGhlIGVuZFxuICB2YXIgdHhyID0gdHhyUVt0eHJRLmxlbmd0aCAtIDJdO1xuICB2YXIgYWRkTmV3VHhyID0gZnVuY3Rpb24gYWRkTmV3VHhyKCkge1xuICAgIHJldHVybiBzZWxmLnJlY3ljbGVUZXh0dXJlKHR4ckgsIGVsZVNjYWxlZFcpIHx8IHNlbGYuYWRkVGV4dHVyZSh0eHJILCBlbGVTY2FsZWRXKTtcbiAgfTtcblxuICAvLyB0cnkgdGhlIGxhc3Qgb25lIGlmIHRoZXJlIGlzIG5vIHNlY29uZCBsYXN0IG9uZVxuICBpZiAoIXR4cikge1xuICAgIHR4ciA9IHR4clFbdHhyUS5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8vIGlmIHRoZSBsYXN0IG9uZSBkb2Vzbid0IGV4aXN0LCB3ZSBuZWVkIGEgZmlyc3Qgb25lXG4gIGlmICghdHhyKSB7XG4gICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gIH1cblxuICAvLyBpZiB0aGVyZSdzIG5vIHJvb20gaW4gdGhlIGN1cnJlbnQgdGV4dHVyZSwgd2UgbmVlZCBhIG5ldyBvbmVcbiAgaWYgKHR4ci53aWR0aCAtIHR4ci51c2VkV2lkdGggPCBlbGVTY2FsZWRXKSB7XG4gICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gIH1cbiAgdmFyIHNjYWxhYmxlRnJvbSA9IGZ1bmN0aW9uIHNjYWxhYmxlRnJvbShvdGhlckNhY2hlKSB7XG4gICAgcmV0dXJuIG90aGVyQ2FjaGUgJiYgb3RoZXJDYWNoZS5zY2FsZWRMYWJlbFNob3duID09PSBzY2FsZWRMYWJlbFNob3duO1xuICB9O1xuICB2YXIgZGVxaW5nID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kZXF1ZXVlO1xuICB2YXIgaGlnaFF1YWxpdHlSZXEgPSByZWFzb24gJiYgcmVhc29uID09PSBnZXRUeHJSZWFzb25zLmhpZ2hRdWFsaXR5O1xuICB2YXIgZG93bnNjYWxlUmVxID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kb3duc2NhbGU7XG4gIHZhciBoaWdoZXJDYWNoZTsgLy8gdGhlIG5lYXJlc3QgY2FjaGUgd2l0aCBhIGhpZ2hlciBsZXZlbFxuICBmb3IgKHZhciBsID0gbHZsICsgMTsgbCA8PSBtYXhMdmwkMTsgbCsrKSB7XG4gICAgdmFyIGMgPSBsb29rdXAuZ2V0KGVsZSwgbCk7XG4gICAgaWYgKGMpIHtcbiAgICAgIGhpZ2hlckNhY2hlID0gYztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgb25lVXBDYWNoZSA9IGhpZ2hlckNhY2hlICYmIGhpZ2hlckNhY2hlLmxldmVsID09PSBsdmwgKyAxID8gaGlnaGVyQ2FjaGUgOiBudWxsO1xuICB2YXIgZG93bnNjYWxlID0gZnVuY3Rpb24gZG93bnNjYWxlKCkge1xuICAgIHR4ci5jb250ZXh0LmRyYXdJbWFnZShvbmVVcENhY2hlLnRleHR1cmUuY2FudmFzLCBvbmVVcENhY2hlLngsIDAsIG9uZVVwQ2FjaGUud2lkdGgsIG9uZVVwQ2FjaGUuaGVpZ2h0LCB0eHIudXNlZFdpZHRoLCAwLCBlbGVTY2FsZWRXLCBlbGVTY2FsZWRIKTtcbiAgfTtcblxuICAvLyByZXNldCBlbGUgYXJlYSBpbiB0ZXh0dXJlXG4gIHR4ci5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgdHhyLmNvbnRleHQuY2xlYXJSZWN0KHR4ci51c2VkV2lkdGgsIDAsIGVsZVNjYWxlZFcsIHR4ckgpO1xuICBpZiAoc2NhbGFibGVGcm9tKG9uZVVwQ2FjaGUpKSB7XG4gICAgLy8gdGhlbiB3ZSBjYW4gcmVsYXRpdmVseSBjaGVhcGx5IHJlc2NhbGUgdGhlIGV4aXN0aW5nIGltYWdlIHcvbyByZXJlbmRlcmluZ1xuICAgIGRvd25zY2FsZSgpO1xuICB9IGVsc2UgaWYgKHNjYWxhYmxlRnJvbShoaWdoZXJDYWNoZSkpIHtcbiAgICAvLyB0aGVuIHVzZSB0aGUgaGlnaGVyIGNhY2hlIGZvciBub3cgYW5kIHF1ZXVlIHRoZSBuZXh0IGxldmVsIGRvd25cbiAgICAvLyB0byBjaGVhcGx5IHNjYWxlIHRvd2FyZHMgdGhlIHNtYWxsZXIgbGV2ZWxcblxuICAgIGlmIChoaWdoUXVhbGl0eVJlcSkge1xuICAgICAgZm9yICh2YXIgX2wgPSBoaWdoZXJDYWNoZS5sZXZlbDsgX2wgPiBsdmw7IF9sLS0pIHtcbiAgICAgICAgb25lVXBDYWNoZSA9IHNlbGYuZ2V0RWxlbWVudChlbGUsIGJiLCBweFJhdGlvLCBfbCwgZ2V0VHhyUmVhc29ucy5kb3duc2NhbGUpO1xuICAgICAgfVxuICAgICAgZG93bnNjYWxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgaGlnaGVyQ2FjaGUubGV2ZWwgLSAxKTtcbiAgICAgIHJldHVybiBoaWdoZXJDYWNoZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxvd2VyQ2FjaGU7IC8vIHRoZSBuZWFyZXN0IGNhY2hlIHdpdGggYSBsb3dlciBsZXZlbFxuICAgIGlmICghZGVxaW5nICYmICFoaWdoUXVhbGl0eVJlcSAmJiAhZG93bnNjYWxlUmVxKSB7XG4gICAgICBmb3IgKHZhciBfbDIgPSBsdmwgLSAxOyBfbDIgPj0gbWluTHZsJDE7IF9sMi0tKSB7XG4gICAgICAgIHZhciBfYyA9IGxvb2t1cC5nZXQoZWxlLCBfbDIpO1xuICAgICAgICBpZiAoX2MpIHtcbiAgICAgICAgICBsb3dlckNhY2hlID0gX2M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjYWxhYmxlRnJvbShsb3dlckNhY2hlKSkge1xuICAgICAgLy8gdGhlbiB1c2UgdGhlIGxvd2VyIHF1YWxpdHkgY2FjaGUgZm9yIG5vdyBhbmQgcXVldWUgdGhlIGJldHRlciBvbmUgZm9yIGxhdGVyXG5cbiAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgbHZsKTtcbiAgICAgIHJldHVybiBsb3dlckNhY2hlO1xuICAgIH1cbiAgICB0eHIuY29udGV4dC50cmFuc2xhdGUodHhyLnVzZWRXaWR0aCwgMCk7XG4gICAgdHhyLmNvbnRleHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICB0aGlzLmRyYXdFbGVtZW50KHR4ci5jb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCBmYWxzZSk7XG4gICAgdHhyLmNvbnRleHQuc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpO1xuICAgIHR4ci5jb250ZXh0LnRyYW5zbGF0ZSgtdHhyLnVzZWRXaWR0aCwgMCk7XG4gIH1cbiAgZWxlQ2FjaGUgPSB7XG4gICAgeDogdHhyLnVzZWRXaWR0aCxcbiAgICB0ZXh0dXJlOiB0eHIsXG4gICAgbGV2ZWw6IGx2bCxcbiAgICBzY2FsZTogc2NhbGUsXG4gICAgd2lkdGg6IGVsZVNjYWxlZFcsXG4gICAgaGVpZ2h0OiBlbGVTY2FsZWRILFxuICAgIHNjYWxlZExhYmVsU2hvd246IHNjYWxlZExhYmVsU2hvd25cbiAgfTtcbiAgdHhyLnVzZWRXaWR0aCArPSBNYXRoLmNlaWwoZWxlU2NhbGVkVyArIGVsZVR4clNwYWNpbmcpO1xuICB0eHIuZWxlQ2FjaGVzLnB1c2goZWxlQ2FjaGUpO1xuICBsb29rdXAuc2V0KGVsZSwgbHZsLCBlbGVDYWNoZSk7XG4gIHNlbGYuY2hlY2tUZXh0dXJlRnVsbG5lc3ModHhyKTtcbiAgcmV0dXJuIGVsZUNhY2hlO1xufTtcbkVUQ3AuaW52YWxpZGF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5pbnZhbGlkYXRlRWxlbWVudChlbGVzW2ldKTtcbiAgfVxufTtcbkVUQ3AuaW52YWxpZGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxvb2t1cCA9IHNlbGYubG9va3VwO1xuICB2YXIgY2FjaGVzID0gW107XG4gIHZhciBpbnZhbGlkID0gbG9va3VwLmlzSW52YWxpZChlbGUpO1xuICBpZiAoIWludmFsaWQpIHtcbiAgICByZXR1cm47IC8vIG92ZXJyaWRlIHRoZSBpbnZhbGlkYXRpb24gcmVxdWVzdCBpZiB0aGUgZWxlbWVudCBrZXkgaGFzIG5vdCBjaGFuZ2VkXG4gIH1cblxuICBmb3IgKHZhciBsdmwgPSBtaW5MdmwkMTsgbHZsIDw9IG1heEx2bCQxOyBsdmwrKykge1xuICAgIHZhciBjYWNoZSA9IGxvb2t1cC5nZXRGb3JDYWNoZWRLZXkoZWxlLCBsdmwpO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgY2FjaGVzLnB1c2goY2FjaGUpO1xuICAgIH1cbiAgfVxuICB2YXIgbm9PdGhlckVsZXNVc2VDYWNoZSA9IGxvb2t1cC5pbnZhbGlkYXRlKGVsZSk7XG4gIGlmIChub090aGVyRWxlc1VzZUNhY2hlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBfY2FjaGUgPSBjYWNoZXNbaV07XG4gICAgICB2YXIgdHhyID0gX2NhY2hlLnRleHR1cmU7XG5cbiAgICAgIC8vIHJlbW92ZSBzcGFjZSBmcm9tIHRoZSB0ZXh0dXJlIGl0IGJlbG9uZ3MgdG9cbiAgICAgIHR4ci5pbnZhbGlkYXRlZFdpZHRoICs9IF9jYWNoZS53aWR0aDtcblxuICAgICAgLy8gbWFyayB0aGUgY2FjaGUgYXMgaW52YWxpZGF0ZWRcbiAgICAgIF9jYWNoZS5pbnZhbGlkYXRlZCA9IHRydWU7XG5cbiAgICAgIC8vIHJldGlyZSB0aGUgdGV4dHVyZSBpZiBpdHMgdXRpbGl0eSBpcyBsb3dcbiAgICAgIHNlbGYuY2hlY2tUZXh0dXJlVXRpbGl0eSh0eHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBmcm9tIHF1ZXVlIHNpbmNlIHRoZSBvbGQgcmVxIHdhcyBmb3IgdGhlIG9sZCBzdGF0ZVxuICBzZWxmLnJlbW92ZUZyb21RdWV1ZShlbGUpO1xufTtcbkVUQ3AuY2hlY2tUZXh0dXJlVXRpbGl0eSA9IGZ1bmN0aW9uICh0eHIpIHtcbiAgLy8gaW52YWxpZGF0ZSBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUgaWYgdGhlIGNhY2hlIHNpemUgaXMgc21hbGxcbiAgaWYgKHR4ci5pbnZhbGlkYXRlZFdpZHRoID49IG1pblV0aWxpdHkgKiB0eHIud2lkdGgpIHtcbiAgICB0aGlzLnJldGlyZVRleHR1cmUodHhyKTtcbiAgfVxufTtcbkVUQ3AuY2hlY2tUZXh0dXJlRnVsbG5lc3MgPSBmdW5jdGlvbiAodHhyKSB7XG4gIC8vIGlmIHRleHR1cmUgaGFzIGJlZW4gbW9zdGx5IGZpbGxlZCBhbmQgcGFzc2VkIG92ZXIgc2V2ZXJhbCB0aW1lcywgcmVtb3ZlXG4gIC8vIGl0IGZyb20gdGhlIHF1ZXVlIHNvIHdlIGRvbid0IG5lZWQgdG8gd2FzdGUgdGltZSBsb29raW5nIGF0IGl0IHRvIHB1dCBuZXcgdGhpbmdzXG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ci5oZWlnaHQpO1xuICBpZiAodHhyLnVzZWRXaWR0aCAvIHR4ci53aWR0aCA+IG1heEZ1bGxuZXNzICYmIHR4ci5mdWxsbmVzc0NoZWNrcyA+PSBtYXhGdWxsbmVzc0NoZWNrcykge1xuICAgIHJlbW92ZUZyb21BcnJheSh0eHJRLCB0eHIpO1xuICB9IGVsc2Uge1xuICAgIHR4ci5mdWxsbmVzc0NoZWNrcysrO1xuICB9XG59O1xuRVRDcC5yZXRpcmVUZXh0dXJlID0gZnVuY3Rpb24gKHR4cikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0eHJIID0gdHhyLmhlaWdodDtcbiAgdmFyIHR4clEgPSBzZWxmLmdldFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgdmFyIGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gIC8vIHJldGlyZSB0aGUgdGV4dHVyZSBmcm9tIHRoZSBhY3RpdmUgLyBzZWFyY2hhYmxlIHF1ZXVlOlxuXG4gIHJlbW92ZUZyb21BcnJheSh0eHJRLCB0eHIpO1xuICB0eHIucmV0aXJlZCA9IHRydWU7XG5cbiAgLy8gcmVtb3ZlIHRoZSByZWZzIGZyb20gdGhlIGVsZXMgdG8gdGhlIGNhY2hlczpcblxuICB2YXIgZWxlQ2FjaGVzID0gdHhyLmVsZUNhY2hlcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVDYWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlQ2FjaGUgPSBlbGVDYWNoZXNbaV07XG4gICAgbG9va3VwLmRlbGV0ZUNhY2hlKGVsZUNhY2hlLmtleSwgZWxlQ2FjaGUubGV2ZWwpO1xuICB9XG4gIGNsZWFyQXJyYXkoZWxlQ2FjaGVzKTtcblxuICAvLyBhZGQgdGhlIHRleHR1cmUgdG8gYSByZXRpcmVkIHF1ZXVlIHNvIGl0IGNhbiBiZSByZWN5Y2xlZCBpbiBmdXR1cmU6XG5cbiAgdmFyIHJ0eHRyUSA9IHNlbGYuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgcnR4dHJRLnB1c2godHhyKTtcbn07XG5FVENwLmFkZFRleHR1cmUgPSBmdW5jdGlvbiAodHhySCwgbWluVykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG4gIHZhciB0eHIgPSB7fTtcbiAgdHhyUS5wdXNoKHR4cik7XG4gIHR4ci5lbGVDYWNoZXMgPSBbXTtcbiAgdHhyLmhlaWdodCA9IHR4ckg7XG4gIHR4ci53aWR0aCA9IE1hdGgubWF4KGRlZlR4cldpZHRoLCBtaW5XKTtcbiAgdHhyLnVzZWRXaWR0aCA9IDA7XG4gIHR4ci5pbnZhbGlkYXRlZFdpZHRoID0gMDtcbiAgdHhyLmZ1bGxuZXNzQ2hlY2tzID0gMDtcbiAgdHhyLmNhbnZhcyA9IHNlbGYucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyh0eHIud2lkdGgsIHR4ci5oZWlnaHQpO1xuICB0eHIuY29udGV4dCA9IHR4ci5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgcmV0dXJuIHR4cjtcbn07XG5FVENwLnJlY3ljbGVUZXh0dXJlID0gZnVuY3Rpb24gKHR4ckgsIG1pblcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ckgpO1xuICB2YXIgcnR4dHJRID0gc2VsZi5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlKHR4ckgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ0eHRyUS5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0eHIgPSBydHh0clFbaV07XG4gICAgaWYgKHR4ci53aWR0aCA+PSBtaW5XKSB7XG4gICAgICB0eHIucmV0aXJlZCA9IGZhbHNlO1xuICAgICAgdHhyLnVzZWRXaWR0aCA9IDA7XG4gICAgICB0eHIuaW52YWxpZGF0ZWRXaWR0aCA9IDA7XG4gICAgICB0eHIuZnVsbG5lc3NDaGVja3MgPSAwO1xuICAgICAgY2xlYXJBcnJheSh0eHIuZWxlQ2FjaGVzKTtcbiAgICAgIHR4ci5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgIHR4ci5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0eHIud2lkdGgsIHR4ci5oZWlnaHQpO1xuICAgICAgcmVtb3ZlRnJvbUFycmF5KHJ0eHRyUSwgdHhyKTtcbiAgICAgIHR4clEucHVzaCh0eHIpO1xuICAgICAgcmV0dXJuIHR4cjtcbiAgICB9XG4gIH1cbn07XG5FVENwLnF1ZXVlRWxlbWVudCA9IGZ1bmN0aW9uIChlbGUsIGx2bCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBxID0gc2VsZi5nZXRFbGVtZW50UXVldWUoKTtcbiAgdmFyIGsycSA9IHNlbGYuZ2V0RWxlbWVudEtleVRvUXVldWUoKTtcbiAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gIHZhciBleGlzdGluZ1JlcSA9IGsycVtrZXldO1xuICBpZiAoZXhpc3RpbmdSZXEpIHtcbiAgICAvLyB1c2UgdGhlIG1heCBsdmwgYi9jIGluIGJldHdlZW4gbHZscyBhcmUgY2hlYXAgdG8gbWFrZVxuICAgIGV4aXN0aW5nUmVxLmxldmVsID0gTWF0aC5tYXgoZXhpc3RpbmdSZXEubGV2ZWwsIGx2bCk7XG4gICAgZXhpc3RpbmdSZXEuZWxlcy5tZXJnZShlbGUpO1xuICAgIGV4aXN0aW5nUmVxLnJlcXMrKztcbiAgICBxLnVwZGF0ZUl0ZW0oZXhpc3RpbmdSZXEpO1xuICB9IGVsc2Uge1xuICAgIHZhciByZXEgPSB7XG4gICAgICBlbGVzOiBlbGUuc3Bhd24oKS5tZXJnZShlbGUpLFxuICAgICAgbGV2ZWw6IGx2bCxcbiAgICAgIHJlcXM6IDEsXG4gICAgICBrZXk6IGtleVxuICAgIH07XG4gICAgcS5wdXNoKHJlcSk7XG4gICAgazJxW2tleV0gPSByZXE7XG4gIH1cbn07XG5FVENwLmRlcXVldWUgPSBmdW5jdGlvbiAocHhSYXRpbyAvKiwgZXh0ZW50Ki8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYuZ2V0RWxlbWVudFF1ZXVlKCk7XG4gIHZhciBrMnEgPSBzZWxmLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCk7XG4gIHZhciBkZXF1ZXVlZCA9IFtdO1xuICB2YXIgbG9va3VwID0gc2VsZi5sb29rdXA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4RGVxU2l6ZSQxOyBpKyspIHtcbiAgICBpZiAocS5zaXplKCkgPiAwKSB7XG4gICAgICB2YXIgcmVxID0gcS5wb3AoKTtcbiAgICAgIHZhciBrZXkgPSByZXEua2V5O1xuICAgICAgdmFyIGVsZSA9IHJlcS5lbGVzWzBdOyAvLyBhbGwgZWxlcyBoYXZlIHRoZSBzYW1lIGtleVxuICAgICAgdmFyIGNhY2hlRXhpc3RzID0gbG9va3VwLmhhc0NhY2hlKGVsZSwgcmVxLmxldmVsKTtcblxuICAgICAgLy8gY2xlYXIgb3V0IHRoZSBrZXkgdG8gcmVxIGxvb2t1cFxuICAgICAgazJxW2tleV0gPSBudWxsO1xuXG4gICAgICAvLyBkZXF1ZXVlaW5nIGlzbid0IG5lY2Vzc2FyeSB3aXRoIGFuIGV4aXN0aW5nIGNhY2hlXG4gICAgICBpZiAoY2FjaGVFeGlzdHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBkZXF1ZXVlZC5wdXNoKHJlcSk7XG4gICAgICB2YXIgYmIgPSBzZWxmLmdldEJvdW5kaW5nQm94KGVsZSk7XG4gICAgICBzZWxmLmdldEVsZW1lbnQoZWxlLCBiYiwgcHhSYXRpbywgcmVxLmxldmVsLCBnZXRUeHJSZWFzb25zLmRlcXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlcXVldWVkO1xufTtcbkVUQ3AucmVtb3ZlRnJvbVF1ZXVlID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBxID0gc2VsZi5nZXRFbGVtZW50UXVldWUoKTtcbiAgdmFyIGsycSA9IHNlbGYuZ2V0RWxlbWVudEtleVRvUXVldWUoKTtcbiAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gIHZhciByZXEgPSBrMnFba2V5XTtcbiAgaWYgKHJlcSAhPSBudWxsKSB7XG4gICAgaWYgKHJlcS5lbGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gcmVtb3ZlIGlmIGxhc3QgZWxlIGluIHRoZSByZXFcbiAgICAgIC8vIGJyaW5nIHRvIGZyb250IG9mIHF1ZXVlXG4gICAgICByZXEucmVxcyA9IE1BWF9JTlQkMTtcbiAgICAgIHEudXBkYXRlSXRlbShyZXEpO1xuICAgICAgcS5wb3AoKTsgLy8gcmVtb3ZlIGZyb20gcXVldWVcblxuICAgICAgazJxW2tleV0gPSBudWxsOyAvLyByZW1vdmUgZnJvbSBsb29rdXAgbWFwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlbW92ZSBlbGUgZnJvbSByZXFcbiAgICAgIHJlcS5lbGVzLnVubWVyZ2UoZWxlKTtcbiAgICB9XG4gIH1cbn07XG5FVENwLm9uRGVxdWV1ZSA9IGZ1bmN0aW9uIChmbikge1xuICB0aGlzLm9uRGVxdWV1ZXMucHVzaChmbik7XG59O1xuRVRDcC5vZmZEZXF1ZXVlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlbW92ZUZyb21BcnJheSh0aGlzLm9uRGVxdWV1ZXMsIGZuKTtcbn07XG5FVENwLnNldHVwRGVxdWV1ZWluZyA9IGRlZnMuc2V0dXBEZXF1ZXVlaW5nKHtcbiAgZGVxUmVkcmF3VGhyZXNob2xkOiBkZXFSZWRyYXdUaHJlc2hvbGQkMSxcbiAgZGVxQ29zdDogZGVxQ29zdCQxLFxuICBkZXFBdmdDb3N0OiBkZXFBdmdDb3N0JDEsXG4gIGRlcU5vRHJhd0Nvc3Q6IGRlcU5vRHJhd0Nvc3QkMSxcbiAgZGVxRmFzdENvc3Q6IGRlcUZhc3RDb3N0JDEsXG4gIGRlcTogZnVuY3Rpb24gZGVxKHNlbGYsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgIHJldHVybiBzZWxmLmRlcXVldWUocHhSYXRpbywgZXh0ZW50KTtcbiAgfSxcbiAgb25EZXFkOiBmdW5jdGlvbiBvbkRlcWQoc2VsZiwgZGVxZCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5vbkRlcXVldWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZm4gPSBzZWxmLm9uRGVxdWV1ZXNbaV07XG4gICAgICBmbihkZXFkKTtcbiAgICB9XG4gIH0sXG4gIHNob3VsZFJlZHJhdzogZnVuY3Rpb24gc2hvdWxkUmVkcmF3KHNlbGYsIGRlcWQsIHB4UmF0aW8sIGV4dGVudCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVxZC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZXMgPSBkZXFkW2ldLmVsZXM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGJiID0gZWxlc1tqXS5ib3VuZGluZ0JveCgpO1xuICAgICAgICBpZiAoYm91bmRpbmdCb3hlc0ludGVyc2VjdChiYiwgZXh0ZW50KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgcHJpb3JpdHk6IGZ1bmN0aW9uIHByaW9yaXR5KHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi5yZW5kZXJlci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZVR4ckRlcTtcbiAgfVxufSk7XG5cbnZhciBkZWZOdW1MYXllcnMgPSAxOyAvLyBkZWZhdWx0IG51bWJlciBvZiBsYXllcnMgdG8gdXNlXG52YXIgbWluTHZsID0gLTQ7IC8vIHdoZW4gc2NhbGluZyBzbWFsbGVyIHRoYW4gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlLXJlbmRlclxudmFyIG1heEx2bCA9IDI7IC8vIHdoZW4gbGFyZ2VyIHRoYW4gdGhpcyBzY2FsZSBqdXN0IHJlbmRlciBkaXJlY3RseSAoY2FjaGluZyBpcyBub3QgaGVscGZ1bClcbnZhciBtYXhab29tID0gMy45OTsgLy8gYmV5b25kIHRoaXMgem9vbSBsZXZlbCwgbGF5ZXJlZCB0ZXh0dXJlcyBhcmUgbm90IHVzZWRcbnZhciBkZXFSZWRyYXdUaHJlc2hvbGQgPSA1MDsgLy8gdGltZSB0byBiYXRjaCByZWRyYXdzIHRvZ2V0aGVyIGZyb20gZGVxdWV1ZWluZyB0byBhbGxvdyBtb3JlIGRlcXVldWVpbmcgY2FsY3MgdG8gaGFwcGVuIGluIHRoZSBtZWFud2hpbGVcbnZhciByZWZpbmVFbGVEZWJvdW5jZVRpbWUgPSA1MDsgLy8gdGltZSB0byBkZWJvdW5jZSBzaGFycGVyIGVsZSB0ZXh0dXJlIHVwZGF0ZXNcbnZhciBkZXFDb3N0ID0gMC4xNTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBhbGxvd2VkIGZvciBkZXF1ZXVpbmcgZWxlIGNhY2hlcyBlYWNoIGZyYW1lXG52YXIgZGVxQXZnQ29zdCA9IDAuMTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBjb21wYXJlZCB0byBhdmVyYWdlIG92ZXJhbGwgcmVkcmF3IHRpbWVcbnZhciBkZXFOb0RyYXdDb3N0ID0gMC45OyAvLyAlIG9mIGF2ZyBmcmFtZSB0aW1lIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRlcXVldWVpbmcgd2hlbiBub3QgZHJhd2luZ1xudmFyIGRlcUZhc3RDb3N0ID0gMC45OyAvLyAlIG9mIGZyYW1lIHRpbWUgdG8gYmUgdXNlZCB3aGVuID42MGZwc1xudmFyIG1heERlcVNpemUgPSAxOyAvLyBudW1iZXIgb2YgZWxlcyB0byBkZXF1ZXVlIGFuZCByZW5kZXIgYXQgaGlnaGVyIHRleHR1cmUgaW4gZWFjaCBiYXRjaFxudmFyIGludmFsaWRUaHJlc2hvbGQgPSAyNTA7IC8vIHRpbWUgdGhyZXNob2xkIGZvciBkaXNhYmxpbmcgYi9jIG9mIGludmFsaWRhdGlvbnNcbnZhciBtYXhMYXllckFyZWEgPSA0MDAwICogNDAwMDsgLy8gbGF5ZXJzIGNhbid0IGJlIGJpZ2dlciB0aGFuIHRoaXNcbnZhciB1c2VIaWdoUXVhbGl0eUVsZVR4clJlcXMgPSB0cnVlOyAvLyB3aGV0aGVyIHRvIHVzZSBoaWdoIHF1YWxpdHkgZWxlIHR4ciByZXF1ZXN0cyAoZ2VuZXJhbGx5IGZhc3RlciBhbmQgY2hlYXBlciBpbiB0aGUgbG9uZ3Rlcm0pXG5cbi8vIHZhciBsb2cgPSBmdW5jdGlvbigpeyBjb25zb2xlLmxvZy5hcHBseSggY29uc29sZSwgYXJndW1lbnRzICk7IH07XG5cbnZhciBMYXllcmVkVGV4dHVyZUNhY2hlID0gZnVuY3Rpb24gTGF5ZXJlZFRleHR1cmVDYWNoZShyZW5kZXJlcikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciByID0gc2VsZi5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICB2YXIgY3kgPSByLmN5O1xuICBzZWxmLmxheWVyc0J5TGV2ZWwgPSB7fTsgLy8gZS5nLiAyID0+IFsgbGF5ZXIxLCBsYXllcjIsIC4uLiwgbGF5ZXJOIF1cblxuICBzZWxmLmZpcnN0R2V0ID0gdHJ1ZTtcbiAgc2VsZi5sYXN0SW52YWxpZGF0aW9uVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSAyICogaW52YWxpZFRocmVzaG9sZDtcbiAgc2VsZi5za2lwcGluZyA9IGZhbHNlO1xuICBzZWxmLmVsZVR4ckRlcXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gIHNlbGYuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICAgIHNlbGYucmVmaW5lRWxlbWVudFRleHR1cmVzKHNlbGYuZWxlVHhyRGVxcyk7XG4gICAgc2VsZi5lbGVUeHJEZXFzLnVubWVyZ2Uoc2VsZi5lbGVUeHJEZXFzKTtcbiAgfSwgcmVmaW5lRWxlRGVib3VuY2VUaW1lKTtcbiAgci5iZWZvcmVSZW5kZXIoZnVuY3Rpb24gKHdpbGxEcmF3LCBub3cpIHtcbiAgICBpZiAobm93IC0gc2VsZi5sYXN0SW52YWxpZGF0aW9uVGltZSA8PSBpbnZhbGlkVGhyZXNob2xkKSB7XG4gICAgICBzZWxmLnNraXBwaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5za2lwcGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfSwgci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4clNraXApO1xuICB2YXIgcVNvcnQgPSBmdW5jdGlvbiBxU29ydChhLCBiKSB7XG4gICAgcmV0dXJuIGIucmVxcyAtIGEucmVxcztcbiAgfTtcbiAgc2VsZi5sYXllcnNRdWV1ZSA9IG5ldyBoZWFwKHFTb3J0KTtcbiAgc2VsZi5zZXR1cERlcXVldWVpbmcoKTtcbn07XG52YXIgTFRDcCA9IExheWVyZWRUZXh0dXJlQ2FjaGUucHJvdG90eXBlO1xudmFyIGxheWVySWRQb29sID0gMDtcbnZhciBNQVhfSU5UID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcbkxUQ3AubWFrZUxheWVyID0gZnVuY3Rpb24gKGJiLCBsdmwpIHtcbiAgdmFyIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgdmFyIHcgPSBNYXRoLmNlaWwoYmIudyAqIHNjYWxlKTtcbiAgdmFyIGggPSBNYXRoLmNlaWwoYmIuaCAqIHNjYWxlKTtcbiAgdmFyIGNhbnZhcyA9IHRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyh3LCBoKTtcbiAgdmFyIGxheWVyID0ge1xuICAgIGlkOiBsYXllcklkUG9vbCA9ICsrbGF5ZXJJZFBvb2wgJSBNQVhfSU5ULFxuICAgIGJiOiBiYixcbiAgICBsZXZlbDogbHZsLFxuICAgIHdpZHRoOiB3LFxuICAgIGhlaWdodDogaCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICBjb250ZXh0OiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSxcbiAgICBlbGVzOiBbXSxcbiAgICBlbGVzUXVldWU6IFtdLFxuICAgIHJlcXM6IDBcbiAgfTtcblxuICAvLyBsb2coJ21ha2UgbGF5ZXIgJXMgd2l0aCB3ICVzIGFuZCBoICVzIGFuZCBsdmwgJXMnLCBsYXllci5pZCwgbGF5ZXIud2lkdGgsIGxheWVyLmhlaWdodCwgbGF5ZXIubGV2ZWwpO1xuXG4gIHZhciBjeHQgPSBsYXllci5jb250ZXh0O1xuICB2YXIgZHggPSAtbGF5ZXIuYmIueDE7XG4gIHZhciBkeSA9IC1sYXllci5iYi55MTtcblxuICAvLyBkbyB0aGUgdHJhbnNmb3JtIG9uIGNyZWF0aW9uIHRvIHNhdmUgY3ljbGVzIChpdCdzIHRoZSBzYW1lIGZvciBhbGwgZWxlcylcbiAgY3h0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gIGN4dC50cmFuc2xhdGUoZHgsIGR5KTtcbiAgcmV0dXJuIGxheWVyO1xufTtcbkxUQ3AuZ2V0TGF5ZXJzID0gZnVuY3Rpb24gKGVsZXMsIHB4UmF0aW8sIGx2bCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciByID0gc2VsZi5yZW5kZXJlcjtcbiAgdmFyIGN5ID0gci5jeTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciBmaXJzdEdldCA9IHNlbGYuZmlyc3RHZXQ7XG4gIHNlbGYuZmlyc3RHZXQgPSBmYWxzZTtcblxuICAvLyBsb2coJy0tXFxuZ2V0IGxheWVycyB3aXRoICVzIGVsZXMnLCBlbGVzLmxlbmd0aCk7XG4gIC8vbG9nIGVsZXMubWFwKGZ1bmN0aW9uKGVsZSl7IHJldHVybiBlbGUuaWQoKSB9KSApO1xuXG4gIGlmIChsdmwgPT0gbnVsbCkge1xuICAgIGx2bCA9IE1hdGguY2VpbChsb2cyKHpvb20gKiBweFJhdGlvKSk7XG4gICAgaWYgKGx2bCA8IG1pbkx2bCkge1xuICAgICAgbHZsID0gbWluTHZsO1xuICAgIH0gZWxzZSBpZiAoem9vbSA+PSBtYXhab29tIHx8IGx2bCA+IG1heEx2bCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHNlbGYudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcobHZsLCBlbGVzKTtcbiAgdmFyIGxheWVyc0J5THZsID0gc2VsZi5sYXllcnNCeUxldmVsO1xuICB2YXIgc2NhbGUgPSBNYXRoLnBvdygyLCBsdmwpO1xuICB2YXIgbGF5ZXJzID0gbGF5ZXJzQnlMdmxbbHZsXSA9IGxheWVyc0J5THZsW2x2bF0gfHwgW107XG4gIHZhciBiYjtcbiAgdmFyIGx2bENvbXBsZXRlID0gc2VsZi5sZXZlbElzQ29tcGxldGUobHZsLCBlbGVzKTtcbiAgdmFyIHRtcExheWVycztcbiAgdmFyIGNoZWNrVGVtcExldmVscyA9IGZ1bmN0aW9uIGNoZWNrVGVtcExldmVscygpIHtcbiAgICB2YXIgY2FuVXNlQXNUbXBMdmwgPSBmdW5jdGlvbiBjYW5Vc2VBc1RtcEx2bChsKSB7XG4gICAgICBzZWxmLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nKGwsIGVsZXMpO1xuICAgICAgaWYgKHNlbGYubGV2ZWxJc0NvbXBsZXRlKGwsIGVsZXMpKSB7XG4gICAgICAgIHRtcExheWVycyA9IGxheWVyc0J5THZsW2xdO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjaGVja0x2bHMgPSBmdW5jdGlvbiBjaGVja0x2bHMoZGlyKSB7XG4gICAgICBpZiAodG1wTGF5ZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGwgPSBsdmwgKyBkaXI7IG1pbkx2bCA8PSBsICYmIGwgPD0gbWF4THZsOyBsICs9IGRpcikge1xuICAgICAgICBpZiAoY2FuVXNlQXNUbXBMdmwobCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY2hlY2tMdmxzKCsxKTtcbiAgICBjaGVja0x2bHMoLTEpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSBpbnZhbGlkIGxheWVyczsgdGhleSB3aWxsIGJlIHJlcGxhY2VkIGFzIG5lZWRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uXG4gICAgZm9yICh2YXIgaSA9IGxheWVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGxheWVyID0gbGF5ZXJzW2ldO1xuICAgICAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICAgICAgcmVtb3ZlRnJvbUFycmF5KGxheWVycywgbGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgaWYgKCFsdmxDb21wbGV0ZSkge1xuICAgIC8vIGlmIHRoZSBjdXJyZW50IGxldmVsIGlzIGluY29tcGxldGUsIHRoZW4gdXNlIHRoZSBjbG9zZXN0LCBiZXN0IHF1YWxpdHkgbGF5ZXJzZXQgdGVtcG9yYXJpbHlcbiAgICAvLyBhbmQgbGF0ZXIgcXVldWUgdGhlIGN1cnJlbnQgbGF5ZXJzZXQgc28gd2UgY2FuIGdldCB0aGUgcHJvcGVyIHF1YWxpdHkgbGV2ZWwgc29vblxuXG4gICAgY2hlY2tUZW1wTGV2ZWxzKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nKCdsZXZlbCBjb21wbGV0ZSwgdXNpbmcgZXhpc3RpbmcgbGF5ZXJzXFxuLS0nKTtcbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG4gIHZhciBnZXRCYiA9IGZ1bmN0aW9uIGdldEJiKCkge1xuICAgIGlmICghYmIpIHtcbiAgICAgIGJiID0gbWFrZUJvdW5kaW5nQm94KCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXBkYXRlQm91bmRpbmdCb3goYmIsIGVsZXNbaV0uYm91bmRpbmdCb3goKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYjtcbiAgfTtcbiAgdmFyIG1ha2VMYXllciA9IGZ1bmN0aW9uIG1ha2VMYXllcihvcHRzKSB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIGFmdGVyID0gb3B0cy5hZnRlcjtcbiAgICBnZXRCYigpO1xuICAgIHZhciBhcmVhID0gYmIudyAqIHNjYWxlICogKGJiLmggKiBzY2FsZSk7XG4gICAgaWYgKGFyZWEgPiBtYXhMYXllckFyZWEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbGF5ZXIgPSBzZWxmLm1ha2VMYXllcihiYiwgbHZsKTtcbiAgICBpZiAoYWZ0ZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIGluZGV4ID0gbGF5ZXJzLmluZGV4T2YoYWZ0ZXIpICsgMTtcbiAgICAgIGxheWVycy5zcGxpY2UoaW5kZXgsIDAsIGxheWVyKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMuaW5zZXJ0ID09PSB1bmRlZmluZWQgfHwgb3B0cy5pbnNlcnQpIHtcbiAgICAgIC8vIG5vIGFmdGVyIHNwZWNpZmllZCA9PiBmaXJzdCBsYXllciBtYWRlIHNvIHB1dCBhdCBzdGFydFxuICAgICAgbGF5ZXJzLnVuc2hpZnQobGF5ZXIpO1xuICAgIH1cblxuICAgIC8vIGlmKCB0bXBMYXllcnMgKXtcbiAgICAvL3NlbGYucXVldWVMYXllciggbGF5ZXIgKTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gbGF5ZXI7XG4gIH07XG4gIGlmIChzZWxmLnNraXBwaW5nICYmICFmaXJzdEdldCkge1xuICAgIC8vIGxvZygnc2tpcCBsYXllcnMnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGxvZygnZG8gbGF5ZXJzJyk7XG5cbiAgdmFyIGxheWVyID0gbnVsbDtcbiAgdmFyIG1heEVsZXNQZXJMYXllciA9IGVsZXMubGVuZ3RoIC8gZGVmTnVtTGF5ZXJzO1xuICB2YXIgYWxsb3dMYXp5UXVldWVpbmcgPSAhZmlyc3RHZXQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgY2FjaGVzID0gcnMuaW1nTGF5ZXJDYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyB8fCB7fTtcblxuICAgIC8vIGxvZygnbG9vayBhdCBlbGUnLCBlbGUuaWQoKSk7XG5cbiAgICB2YXIgZXhpc3RpbmdMYXllciA9IGNhY2hlc1tsdmxdO1xuICAgIGlmIChleGlzdGluZ0xheWVyKSB7XG4gICAgICAvLyByZXVzZSBsYXllciBmb3IgbGF0ZXIgZWxlc1xuICAgICAgLy8gbG9nKCdyZXVzZSBsYXllciBmb3InLCBlbGUuaWQoKSk7XG4gICAgICBsYXllciA9IGV4aXN0aW5nTGF5ZXI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFsYXllciB8fCBsYXllci5lbGVzLmxlbmd0aCA+PSBtYXhFbGVzUGVyTGF5ZXIgfHwgIWJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChsYXllci5iYiwgZWxlLmJvdW5kaW5nQm94KCkpKSB7XG4gICAgICAvLyBsb2coJ21ha2UgbmV3IGxheWVyIGZvciBlbGUgJXMnLCBlbGUuaWQoKSk7XG5cbiAgICAgIGxheWVyID0gbWFrZUxheWVyKHtcbiAgICAgICAgaW5zZXJ0OiB0cnVlLFxuICAgICAgICBhZnRlcjogbGF5ZXJcbiAgICAgIH0pO1xuXG4gICAgICAvLyBpZiBub3cgbGF5ZXIgY2FuIGJlIGJ1aWx0IHRoZW4gd2UgY2FuJ3QgdXNlIGxheWVycyBhdCB0aGlzIGxldmVsXG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2coJ25ldyBsYXllciB3aXRoIGlkICVzJywgbGF5ZXIuaWQpO1xuICAgIH1cblxuICAgIGlmICh0bXBMYXllcnMgfHwgYWxsb3dMYXp5UXVldWVpbmcpIHtcbiAgICAgIC8vIGxvZygncXVldWUgZWxlICVzIGluIGxheWVyICVzJywgZWxlLmlkKCksIGxheWVyLmlkKTtcbiAgICAgIHNlbGYucXVldWVMYXllcihsYXllciwgZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9nKCdkcmF3IGVsZSAlcyBpbiBsYXllciAlcycsIGVsZS5pZCgpLCBsYXllci5pZCk7XG4gICAgICBzZWxmLmRyYXdFbGVJbkxheWVyKGxheWVyLCBlbGUsIGx2bCwgcHhSYXRpbyk7XG4gICAgfVxuICAgIGxheWVyLmVsZXMucHVzaChlbGUpO1xuICAgIGNhY2hlc1tsdmxdID0gbGF5ZXI7XG4gIH1cblxuICAvLyBsb2coJy0tJyk7XG5cbiAgaWYgKHRtcExheWVycykge1xuICAgIC8vIHRoZW4gd2Ugb25seSBxdWV1ZWQgdGhlIGN1cnJlbnQgbGF5ZXJzZXQgYW5kIGNhbid0IGRyYXcgaXQgeWV0XG4gICAgcmV0dXJuIHRtcExheWVycztcbiAgfVxuICBpZiAoYWxsb3dMYXp5UXVldWVpbmcpIHtcbiAgICAvLyBsb2coJ2xhenkgcXVldWUgbGV2ZWwnLCBsdmwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBsYXllcnM7XG59O1xuXG4vLyBhIGxheWVyIG1heSB3YW50IHRvIHVzZSBhbiBlbGUgY2FjaGUgb2YgYSBoaWdoZXIgbGV2ZWwgdG8gYXZvaWQgYmx1cnJpbmVzc1xuLy8gc28gdGhlIGxheWVyIGxldmVsIG1pZ2h0IG5vdCBlcXVhbCB0aGUgZWxlIGxldmVsXG5MVENwLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbCA9IGZ1bmN0aW9uIChsdmwsIHB4UmF0aW8pIHtcbiAgcmV0dXJuIGx2bDtcbn07XG5MVENwLmRyYXdFbGVJbkxheWVyID0gZnVuY3Rpb24gKGxheWVyLCBlbGUsIGx2bCwgcHhSYXRpbykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciByID0gdGhpcy5yZW5kZXJlcjtcbiAgdmFyIGNvbnRleHQgPSBsYXllci5jb250ZXh0O1xuICB2YXIgYmIgPSBlbGUuYm91bmRpbmdCb3goKTtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCB8fCAhZWxlLnZpc2libGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsdmwgPSBzZWxmLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChsdmwsIHB4UmF0aW8pO1xuICB7XG4gICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgZmFsc2UpO1xuICB9XG4gIHtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgbnVsbCwgbnVsbCwgbHZsLCB1c2VIaWdoUXVhbGl0eUVsZVR4clJlcXMpO1xuICB9XG4gIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgfVxufTtcbkxUQ3AubGV2ZWxJc0NvbXBsZXRlID0gZnVuY3Rpb24gKGx2bCwgZWxlcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBsYXllcnMgPSBzZWxmLmxheWVyc0J5TGV2ZWxbbHZsXTtcbiAgaWYgKCFsYXllcnMgfHwgbGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbnVtRWxlc0luTGF5ZXJzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgYW55IGVsZXMgbmVlZGVkIHRvIGJlIGRyYXduIHlldCwgdGhlIGxldmVsIGlzIG5vdCBjb21wbGV0ZVxuICAgIGlmIChsYXllci5yZXFzID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBsYXllciBpcyBpbnZhbGlkLCB0aGUgbGV2ZWwgaXMgbm90IGNvbXBsZXRlXG4gICAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbnVtRWxlc0luTGF5ZXJzICs9IGxheWVyLmVsZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gd2Ugc2hvdWxkIGhhdmUgZXhhY3RseSB0aGUgbnVtYmVyIG9mIGVsZXMgcGFzc2VkIGluIHRvIGJlIGNvbXBsZXRlXG4gIGlmIChudW1FbGVzSW5MYXllcnMgIT09IGVsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbkxUQ3AudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcgPSBmdW5jdGlvbiAobHZsLCBlbGVzKSB7XG4gIHZhciBsYXllcnMgPSB0aGlzLmxheWVyc0J5TGV2ZWxbbHZsXTtcbiAgaWYgKCFsYXllcnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBpZiBpbiBhIGxheWVyIHRoZSBlbGVzIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIsIHRoZW4gdGhlIGxheWVyIGlzIGludmFsaWRcbiAgLy8gKGkuZS4gdGhlcmUgaXMgYW4gZWxlIGluIGJldHdlZW4gdGhlIGVsZXMgaW4gdGhlIGxheWVyKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxheWVyID0gbGF5ZXJzW2ldO1xuICAgIHZhciBvZmZzZXQgPSAtMTtcblxuICAgIC8vIGZpbmQgdGhlIG9mZnNldFxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgZWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGxheWVyLmVsZXNbMF0gPT09IGVsZXNbal0pIHtcbiAgICAgICAgb2Zmc2V0ID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAvLyB0aGVuIHRoZSBsYXllciBoYXMgbm9uZXhpc3RlbnQgZWxlbWVudHMgYW5kIGlzIGludmFsaWRcbiAgICAgIHRoaXMuaW52YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHRoZSBlbGVzIGluIHRoZSBsYXllciBtdXN0IGJlIGluIHRoZSBzYW1lIGNvbnRpbnVvdXMgb3JkZXIsIGVsc2UgdGhlIGxheWVyIGlzIGludmFsaWRcblxuICAgIHZhciBvID0gb2Zmc2V0O1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGF5ZXIuZWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGxheWVyLmVsZXNbal0gIT09IGVsZXNbbyArIGpdKSB7XG4gICAgICAgIC8vIGxvZygnaW52YWxpZGF0ZSBiYXNlZCBvbiBvcmRlcmluZycsIGxheWVyLmlkKTtcblxuICAgICAgICB0aGlzLmludmFsaWRhdGVMYXllcihsYXllcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbkxUQ3AudXBkYXRlRWxlbWVudHNJbkxheWVycyA9IGZ1bmN0aW9uIChlbGVzLCB1cGRhdGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaXNFbGVzID0gZWxlbWVudChlbGVzWzBdKTtcblxuICAvLyBjb2xsZWN0IHVkcGF0ZWQgZWxlbWVudHMgKGNhc2NhZGVkIGZyb20gdGhlIGxheWVycykgYW5kIHVwZGF0ZSBlYWNoXG4gIC8vIGxheWVyIGl0c2VsZiBhbG9uZyB0aGUgd2F5XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByZXEgPSBpc0VsZXMgPyBudWxsIDogZWxlc1tpXTtcbiAgICB2YXIgZWxlID0gaXNFbGVzID8gZWxlc1tpXSA6IGVsZXNbaV0uZWxlO1xuICAgIHZhciBycyA9IGVsZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgY2FjaGVzID0gcnMuaW1nTGF5ZXJDYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyB8fCB7fTtcbiAgICBmb3IgKHZhciBsID0gbWluTHZsOyBsIDw9IG1heEx2bDsgbCsrKSB7XG4gICAgICB2YXIgbGF5ZXIgPSBjYWNoZXNbbF07XG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB1cGRhdGUgaXMgYSByZXF1ZXN0IGZyb20gdGhlIGVsZSBjYWNoZSwgdGhlbiBpdCBhZmZlY3RzIG9ubHlcbiAgICAgIC8vIHRoZSBtYXRjaGluZyBsZXZlbFxuICAgICAgaWYgKHJlcSAmJiBzZWxmLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChsYXllci5sZXZlbCkgIT09IHJlcS5sZXZlbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZShsYXllciwgZWxlLCByZXEpO1xuICAgIH1cbiAgfVxufTtcbkxUQ3AuaGF2ZUxheWVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgaGF2ZUxheWVycyA9IGZhbHNlO1xuICBmb3IgKHZhciBsID0gbWluTHZsOyBsIDw9IG1heEx2bDsgbCsrKSB7XG4gICAgdmFyIGxheWVycyA9IHNlbGYubGF5ZXJzQnlMZXZlbFtsXTtcbiAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgICBoYXZlTGF5ZXJzID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGF2ZUxheWVycztcbn07XG5MVENwLmludmFsaWRhdGVFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKGVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNlbGYubGFzdEludmFsaWRhdGlvblRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuXG4gIC8vIGxvZygndXBkYXRlIGludmFsaWRhdGUgbGF5ZXIgdGltZSBmcm9tIGVsZXMnKTtcblxuICBpZiAoZWxlcy5sZW5ndGggPT09IDAgfHwgIXNlbGYuaGF2ZUxheWVycygpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNlbGYudXBkYXRlRWxlbWVudHNJbkxheWVycyhlbGVzLCBmdW5jdGlvbiBpbnZhbEFzc29jTGF5ZXJzKGxheWVyLCBlbGUsIHJlcSkge1xuICAgIHNlbGYuaW52YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgfSk7XG59O1xuTFRDcC5pbnZhbGlkYXRlTGF5ZXIgPSBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgLy8gbG9nKCd1cGRhdGUgaW52YWxpZGF0ZSBsYXllciB0aW1lJyk7XG5cbiAgdGhpcy5sYXN0SW52YWxpZGF0aW9uVGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG4gIGlmIChsYXllci5pbnZhbGlkKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIHNhdmUgY3ljbGVzXG5cbiAgdmFyIGx2bCA9IGxheWVyLmxldmVsO1xuICB2YXIgZWxlcyA9IGxheWVyLmVsZXM7XG4gIHZhciBsYXllcnMgPSB0aGlzLmxheWVyc0J5TGV2ZWxbbHZsXTtcblxuICAvLyBsb2coJ2ludmFsaWRhdGUgbGF5ZXInLCBsYXllci5pZCApO1xuXG4gIHJlbW92ZUZyb21BcnJheShsYXllcnMsIGxheWVyKTtcbiAgLy8gbGF5ZXIuZWxlcyA9IFtdO1xuXG4gIGxheWVyLmVsZXNRdWV1ZSA9IFtdO1xuICBsYXllci5pbnZhbGlkID0gdHJ1ZTtcbiAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgbGF5ZXIucmVwbGFjZW1lbnQuaW52YWxpZCA9IHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNhY2hlcyA9IGVsZXNbaV0uX3ByaXZhdGUucnNjcmF0Y2guaW1nTGF5ZXJDYWNoZXM7XG4gICAgaWYgKGNhY2hlcykge1xuICAgICAgY2FjaGVzW2x2bF0gPSBudWxsO1xuICAgIH1cbiAgfVxufTtcbkxUQ3AucmVmaW5lRWxlbWVudFRleHR1cmVzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGxvZygncmVmaW5lJywgZWxlcy5sZW5ndGgpO1xuXG4gIHNlbGYudXBkYXRlRWxlbWVudHNJbkxheWVycyhlbGVzLCBmdW5jdGlvbiByZWZpbmVFYWNoRWxlKGxheWVyLCBlbGUsIHJlcSkge1xuICAgIHZhciByTHlyID0gbGF5ZXIucmVwbGFjZW1lbnQ7XG4gICAgaWYgKCFyTHlyKSB7XG4gICAgICByTHlyID0gbGF5ZXIucmVwbGFjZW1lbnQgPSBzZWxmLm1ha2VMYXllcihsYXllci5iYiwgbGF5ZXIubGV2ZWwpO1xuICAgICAgckx5ci5yZXBsYWNlcyA9IGxheWVyO1xuICAgICAgckx5ci5lbGVzID0gbGF5ZXIuZWxlcztcblxuICAgICAgLy8gbG9nKCdtYWtlIHJlcGxhY2VtZW50IGxheWVyICVzIGZvciAlcyB3aXRoIGxldmVsICVzJywgckx5ci5pZCwgbGF5ZXIuaWQsIHJMeXIubGV2ZWwpO1xuICAgIH1cblxuICAgIGlmICghckx5ci5yZXFzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJMeXIuZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZWxmLnF1ZXVlTGF5ZXIockx5ciwgckx5ci5lbGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9nKCdxdWV1ZSByZXBsYWNlbWVudCBsYXllciByZWZpbmVtZW50Jywgckx5ci5pZCk7XG4gICAgfVxuICB9KTtcbn07XG5cbkxUQ3AuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50ID0gZnVuY3Rpb24gKGVsZSkge1xuICB0aGlzLmVsZVR4ckRlcXMubWVyZ2UoZWxlKTtcbiAgdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCk7XG59O1xuTFRDcC5xdWV1ZUxheWVyID0gZnVuY3Rpb24gKGxheWVyLCBlbGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYubGF5ZXJzUXVldWU7XG4gIHZhciBlbGVzUSA9IGxheWVyLmVsZXNRdWV1ZTtcbiAgdmFyIGhhc0lkID0gZWxlc1EuaGFzSWQgPSBlbGVzUS5oYXNJZCB8fCB7fTtcblxuICAvLyBpZiBhIGxheWVyIGlzIGdvaW5nIHRvIGJlIHJlcGxhY2VkLCBxdWV1aW5nIGlzIGEgd2FzdGUgb2YgdGltZVxuICBpZiAobGF5ZXIucmVwbGFjZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVsZSkge1xuICAgIGlmIChoYXNJZFtlbGUuaWQoKV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlc1EucHVzaChlbGUpO1xuICAgIGhhc0lkW2VsZS5pZCgpXSA9IHRydWU7XG4gIH1cbiAgaWYgKGxheWVyLnJlcXMpIHtcbiAgICBsYXllci5yZXFzKys7XG4gICAgcS51cGRhdGVJdGVtKGxheWVyKTtcbiAgfSBlbHNlIHtcbiAgICBsYXllci5yZXFzID0gMTtcbiAgICBxLnB1c2gobGF5ZXIpO1xuICB9XG59O1xuTFRDcC5kZXF1ZXVlID0gZnVuY3Rpb24gKHB4UmF0aW8pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYubGF5ZXJzUXVldWU7XG4gIHZhciBkZXFkID0gW107XG4gIHZhciBlbGVEZXFzID0gMDtcbiAgd2hpbGUgKGVsZURlcXMgPCBtYXhEZXFTaXplKSB7XG4gICAgaWYgKHEuc2l6ZSgpID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGxheWVyID0gcS5wZWVrKCk7XG5cbiAgICAvLyBpZiBhIGxheWVyIGhhcyBiZWVuIG9yIHdpbGwgYmUgcmVwbGFjZWQsIHRoZW4gZG9uJ3Qgd2FzdGUgdGltZSB3aXRoIGl0XG4gICAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgICAvLyBsb2coJ2xheWVyICVzIGluIHF1ZXVlIHNraXBwZWQgYi9jIGl0IGFscmVhZHkgaGFzIGEgcmVwbGFjZW1lbnQnLCBsYXllci5pZCk7XG4gICAgICBxLnBvcCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhIHJlcGxhY2VtZW50IGxheWVyIHRoYXQgaGFzIGJlZW4gc3VwZXJjZWRlZCwgdGhlbiBmb3JnZXQgaXRcbiAgICBpZiAobGF5ZXIucmVwbGFjZXMgJiYgbGF5ZXIgIT09IGxheWVyLnJlcGxhY2VzLnJlcGxhY2VtZW50KSB7XG4gICAgICAvLyBsb2coJ2xheWVyIGlzIG5vIGxvbmdlciB0aGUgbW9zdCB1cHRvZGF0ZSByZXBsYWNlbWVudDsgZGVxdWV1ZWQnLCBsYXllci5pZClcbiAgICAgIHEucG9wKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICAgIC8vIGxvZygncmVwbGFjZW1lbnQgbGF5ZXIgJXMgaXMgaW52YWxpZDsgZGVxdWV1ZWQnLCBsYXllci5pZCk7XG4gICAgICBxLnBvcCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBlbGUgPSBsYXllci5lbGVzUXVldWUuc2hpZnQoKTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICAvLyBsb2coJ2RlcXVldWUgbGF5ZXIgJXMnLCBsYXllci5pZCk7XG5cbiAgICAgIHNlbGYuZHJhd0VsZUluTGF5ZXIobGF5ZXIsIGVsZSwgbGF5ZXIubGV2ZWwsIHB4UmF0aW8pO1xuICAgICAgZWxlRGVxcysrO1xuICAgIH1cbiAgICBpZiAoZGVxZC5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHdlIG5lZWQgb25seSBvbmUgZW50cnkgaW4gZGVxZCB0byBxdWV1ZSByZWRyYXdpbmcgZXRjXG4gICAgICBkZXFkLnB1c2godHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGxheWVyIGhhcyBhbGwgaXRzIGVsZXMgZG9uZSwgdGhlbiByZW1vdmUgZnJvbSB0aGUgcXVldWVcbiAgICBpZiAobGF5ZXIuZWxlc1F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcS5wb3AoKTtcbiAgICAgIGxheWVyLnJlcXMgPSAwO1xuXG4gICAgICAvLyBsb2coJ2RlcXVldWUgb2YgbGF5ZXIgJXMgY29tcGxldGUnLCBsYXllci5pZCk7XG5cbiAgICAgIC8vIHdoZW4gYSByZXBsYWNlbWVudCBsYXllciBpcyBkZXF1ZXVlZCwgaXQgcmVwbGFjZXMgdGhlIG9sZCBsYXllciBpbiB0aGUgbGV2ZWxcbiAgICAgIGlmIChsYXllci5yZXBsYWNlcykge1xuICAgICAgICBzZWxmLmFwcGx5TGF5ZXJSZXBsYWNlbWVudChsYXllcik7XG4gICAgICB9XG4gICAgICBzZWxmLnJlcXVlc3RSZWRyYXcoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlcWQ7XG59O1xuTFRDcC5hcHBseUxheWVyUmVwbGFjZW1lbnQgPSBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgbGF5ZXJzSW5MZXZlbCA9IHNlbGYubGF5ZXJzQnlMZXZlbFtsYXllci5sZXZlbF07XG4gIHZhciByZXBsYWNlZCA9IGxheWVyLnJlcGxhY2VzO1xuICB2YXIgaW5kZXggPSBsYXllcnNJbkxldmVsLmluZGV4T2YocmVwbGFjZWQpO1xuXG4gIC8vIGlmIHRoZSByZXBsYWNlZCBsYXllciBpcyBub3QgaW4gdGhlIGFjdGl2ZSBsaXN0IGZvciB0aGUgbGV2ZWwsIHRoZW4gcmVwbGFjaW5nXG4gIC8vIHJlZnMgd291bGQgYmUgYSBtaXN0YWtlIChpLmUuIG92ZXJ3cml0aW5nIHRoZSB0cnVlIGFjdGl2ZSBsYXllcilcbiAgaWYgKGluZGV4IDwgMCB8fCByZXBsYWNlZC5pbnZhbGlkKSB7XG4gICAgLy8gbG9nKCdyZXBsYWNlbWVudCBsYXllciB3b3VsZCBoYXZlIG5vIGVmZmVjdCcsIGxheWVyLmlkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGF5ZXJzSW5MZXZlbFtpbmRleF0gPSBsYXllcjsgLy8gcmVwbGFjZSBsZXZlbCByZWZcblxuICAvLyByZXBsYWNlIHJlZnMgaW4gZWxlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVyLmVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3AgPSBsYXllci5lbGVzW2ldLl9wcml2YXRlO1xuICAgIHZhciBjYWNoZSA9IF9wLmltZ0xheWVyQ2FjaGVzID0gX3AuaW1nTGF5ZXJDYWNoZXMgfHwge307XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICBjYWNoZVtsYXllci5sZXZlbF0gPSBsYXllcjtcbiAgICB9XG4gIH1cblxuICAvLyBsb2coJ2FwcGx5IHJlcGxhY2VtZW50IGxheWVyICVzIG92ZXIgJXMnLCBsYXllci5pZCwgcmVwbGFjZWQuaWQpO1xuXG4gIHNlbGYucmVxdWVzdFJlZHJhdygpO1xufTtcbkxUQ3AucmVxdWVzdFJlZHJhdyA9IGRlYm91bmNlXzEoZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IHRoaXMucmVuZGVyZXI7XG4gIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgci5yZWRyYXcoKTtcbn0sIDEwMCk7XG5MVENwLnNldHVwRGVxdWV1ZWluZyA9IGRlZnMuc2V0dXBEZXF1ZXVlaW5nKHtcbiAgZGVxUmVkcmF3VGhyZXNob2xkOiBkZXFSZWRyYXdUaHJlc2hvbGQsXG4gIGRlcUNvc3Q6IGRlcUNvc3QsXG4gIGRlcUF2Z0Nvc3Q6IGRlcUF2Z0Nvc3QsXG4gIGRlcU5vRHJhd0Nvc3Q6IGRlcU5vRHJhd0Nvc3QsXG4gIGRlcUZhc3RDb3N0OiBkZXFGYXN0Q29zdCxcbiAgZGVxOiBmdW5jdGlvbiBkZXEoc2VsZiwgcHhSYXRpbykge1xuICAgIHJldHVybiBzZWxmLmRlcXVldWUocHhSYXRpbyk7XG4gIH0sXG4gIG9uRGVxZDogbm9vcCQxLFxuICBzaG91bGRSZWRyYXc6IHRydWVpZnksXG4gIHByaW9yaXR5OiBmdW5jdGlvbiBwcmlvcml0eShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXE7XG4gIH1cbn0pO1xuXG52YXIgQ1JwJGEgPSB7fTtcbnZhciBpbXBsO1xuZnVuY3Rpb24gcG9seWdvbihjb250ZXh0LCBwb2ludHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHQgPSBwb2ludHNbaV07XG4gICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHRyaWFuZ2xlQmFja2N1cnZlKGNvbnRleHQsIHBvaW50cywgY29udHJvbFBvaW50KSB7XG4gIHZhciBmaXJzdFB0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHBvaW50c1tpXTtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgZmlyc3RQdCA9IHB0O1xuICAgIH1cbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBmaXJzdFB0LngsIGZpcnN0UHQueSk7XG59XG5mdW5jdGlvbiB0cmlhbmdsZVRlZShjb250ZXh0LCB0cmlhbmdsZVBvaW50cywgdGVlUG9pbnRzKSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgdmFyIHRyaVB0cyA9IHRyaWFuZ2xlUG9pbnRzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaVB0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHRyaVB0c1tpXTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxuICB2YXIgdGVlUHRzID0gdGVlUG9pbnRzO1xuICB2YXIgZmlyc3RUZWVQdCA9IHRlZVBvaW50c1swXTtcbiAgY29udGV4dC5tb3ZlVG8oZmlyc3RUZWVQdC54LCBmaXJzdFRlZVB0LnkpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHRlZVB0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHRlZVB0c1tpXTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxuICBpZiAoY29udGV4dC5jbG9zZVBhdGgpIHtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59XG5mdW5jdGlvbiBjaXJjbGVUcmlhbmdsZShjb250ZXh0LCB0cmlhbmdsZVBvaW50cywgcngsIHJ5LCByKSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgY29udGV4dC5hcmMocngsIHJ5LCByLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xuICB2YXIgdHJpUHRzID0gdHJpYW5nbGVQb2ludHM7XG4gIHZhciBmaXJzdFRyUHQgPSB0cmlQdHNbMF07XG4gIGNvbnRleHQubW92ZVRvKGZpcnN0VHJQdC54LCBmaXJzdFRyUHQueSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpUHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHB0ID0gdHJpUHRzW2ldO1xuICAgIGNvbnRleHQubGluZVRvKHB0LngsIHB0LnkpO1xuICB9XG4gIGlmIChjb250ZXh0LmNsb3NlUGF0aCkge1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNpcmNsZShjb250ZXh0LCByeCwgcnksIHIpIHtcbiAgY29udGV4dC5hcmMocngsIHJ5LCByLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xufVxuQ1JwJGEuYXJyb3dTaGFwZUltcGwgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gKGltcGwgfHwgKGltcGwgPSB7XG4gICAgJ3BvbHlnb24nOiBwb2x5Z29uLFxuICAgICd0cmlhbmdsZS1iYWNrY3VydmUnOiB0cmlhbmdsZUJhY2tjdXJ2ZSxcbiAgICAndHJpYW5nbGUtdGVlJzogdHJpYW5nbGVUZWUsXG4gICAgJ2NpcmNsZS10cmlhbmdsZSc6IGNpcmNsZVRyaWFuZ2xlLFxuICAgICd0cmlhbmdsZS1jcm9zcyc6IHRyaWFuZ2xlVGVlLFxuICAgICdjaXJjbGUnOiBjaXJjbGVcbiAgfSkpW25hbWVdO1xufTtcblxudmFyIENScCQ5ID0ge307XG5DUnAkOS5kcmF3RWxlbWVudCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIHNob3dMYWJlbCwgc2hvd092ZXJsYXksIHNob3dPcGFjaXR5KSB7XG4gIHZhciByID0gdGhpcztcbiAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgIHIuZHJhd05vZGUoY29udGV4dCwgZWxlLCBzaGlmdFRvT3JpZ2luV2l0aEJiLCBzaG93TGFiZWwsIHNob3dPdmVybGF5LCBzaG93T3BhY2l0eSk7XG4gIH0gZWxzZSB7XG4gICAgci5kcmF3RWRnZShjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIHNob3dMYWJlbCwgc2hvd092ZXJsYXksIHNob3dPcGFjaXR5KTtcbiAgfVxufTtcbkNScCQ5LmRyYXdFbGVtZW50T3ZlcmxheSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgci5kcmF3Tm9kZU92ZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgfSBlbHNlIHtcbiAgICByLmRyYXdFZGdlT3ZlcmxheShjb250ZXh0LCBlbGUpO1xuICB9XG59O1xuQ1JwJDkuZHJhd0VsZW1lbnRVbmRlcmxheSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgci5kcmF3Tm9kZVVuZGVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH0gZWxzZSB7XG4gICAgci5kcmF3RWRnZVVuZGVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH1cbn07XG5DUnAkOS5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24gPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBlbGVUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldFJvdGF0aW9uLCBnZXRPcGFjaXR5KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGJiID0gZWxlVHhyQ2FjaGUuZ2V0Qm91bmRpbmdCb3goZWxlKTtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZ25vcmUgemVybyBzaXplIGNhc2VcblxuICB2YXIgZWxlQ2FjaGUgPSBlbGVUeHJDYWNoZS5nZXRFbGVtZW50KGVsZSwgYmIsIHB4UmF0aW8sIGx2bCwgcmVhc29uKTtcbiAgaWYgKGVsZUNhY2hlICE9IG51bGwpIHtcbiAgICB2YXIgb3BhY2l0eSA9IGdldE9wYWNpdHkociwgZWxlKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGhldGEgPSBnZXRSb3RhdGlvbihyLCBlbGUpO1xuICAgIHZhciB4MSA9IGJiLngxLFxuICAgICAgeTEgPSBiYi55MSxcbiAgICAgIHcgPSBiYi53LFxuICAgICAgaCA9IGJiLmg7XG4gICAgdmFyIHgsIHksIHN4LCBzeSwgc21vb3RoO1xuICAgIGlmICh0aGV0YSAhPT0gMCkge1xuICAgICAgdmFyIHJvdFB0ID0gZWxlVHhyQ2FjaGUuZ2V0Um90YXRpb25Qb2ludChlbGUpO1xuICAgICAgc3ggPSByb3RQdC54O1xuICAgICAgc3kgPSByb3RQdC55O1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoc3gsIHN5KTtcbiAgICAgIGNvbnRleHQucm90YXRlKHRoZXRhKTtcbiAgICAgIHNtb290aCA9IHIuZ2V0SW1nU21vb3RoaW5nKGNvbnRleHQpO1xuICAgICAgaWYgKCFzbW9vdGgpIHtcbiAgICAgICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgb2ZmID0gZWxlVHhyQ2FjaGUuZ2V0Um90YXRpb25PZmZzZXQoZWxlKTtcbiAgICAgIHggPSBvZmYueDtcbiAgICAgIHkgPSBvZmYueTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHgxO1xuICAgICAgeSA9IHkxO1xuICAgIH1cbiAgICB2YXIgb2xkR2xvYmFsQWxwaGE7XG4gICAgaWYgKG9wYWNpdHkgIT09IDEpIHtcbiAgICAgIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvbGRHbG9iYWxBbHBoYSAqIG9wYWNpdHk7XG4gICAgfVxuICAgIGNvbnRleHQuZHJhd0ltYWdlKGVsZUNhY2hlLnRleHR1cmUuY2FudmFzLCBlbGVDYWNoZS54LCAwLCBlbGVDYWNoZS53aWR0aCwgZWxlQ2FjaGUuaGVpZ2h0LCB4LCB5LCB3LCBoKTtcbiAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhO1xuICAgIH1cbiAgICBpZiAodGhldGEgIT09IDApIHtcbiAgICAgIGNvbnRleHQucm90YXRlKC10aGV0YSk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc3gsIC1zeSk7XG4gICAgICBpZiAoIXNtb290aCkge1xuICAgICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZVR4ckNhY2hlLmRyYXdFbGVtZW50KGNvbnRleHQsIGVsZSk7IC8vIGRpcmVjdCBkcmF3IGZhbGxiYWNrXG4gIH1cbn07XG5cbnZhciBnZXRaZXJvUm90YXRpb24gPSBmdW5jdGlvbiBnZXRaZXJvUm90YXRpb24oKSB7XG4gIHJldHVybiAwO1xufTtcbnZhciBnZXRMYWJlbFJvdGF0aW9uID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvbihyLCBlbGUpIHtcbiAgcmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGVsZSwgbnVsbCk7XG59O1xudmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICByZXR1cm4gci5nZXRUZXh0QW5nbGUoZWxlLCAnc291cmNlJyk7XG59O1xudmFyIGdldFRhcmdldExhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICByZXR1cm4gci5nZXRUZXh0QW5nbGUoZWxlLCAndGFyZ2V0Jyk7XG59O1xudmFyIGdldE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRPcGFjaXR5KHIsIGVsZSkge1xuICByZXR1cm4gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKTtcbn07XG52YXIgZ2V0VGV4dE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRUZXh0T3BhY2l0eShlLCBlbGUpIHtcbiAgcmV0dXJuIGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnBmVmFsdWUgKiBlbGUuZWZmZWN0aXZlT3BhY2l0eSgpO1xufTtcbkNScCQ5LmRyYXdDYWNoZWRFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50LCBsdmwsIHJlcXVlc3RIaWdoUXVhbGl0eSkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBfciRkYXRhID0gci5kYXRhLFxuICAgIGVsZVR4ckNhY2hlID0gX3IkZGF0YS5lbGVUeHJDYWNoZSxcbiAgICBsYmxUeHJDYWNoZSA9IF9yJGRhdGEubGJsVHhyQ2FjaGUsXG4gICAgc2xiVHhyQ2FjaGUgPSBfciRkYXRhLnNsYlR4ckNhY2hlLFxuICAgIHRsYlR4ckNhY2hlID0gX3IkZGF0YS50bGJUeHJDYWNoZTtcbiAgdmFyIGJiID0gZWxlLmJvdW5kaW5nQm94KCk7XG4gIHZhciByZWFzb24gPSByZXF1ZXN0SGlnaFF1YWxpdHkgPT09IHRydWUgPyBlbGVUeHJDYWNoZS5yZWFzb25zLmhpZ2hRdWFsaXR5IDogbnVsbDtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCB8fCAhZWxlLnZpc2libGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWV4dGVudCB8fCBib3VuZGluZ0JveGVzSW50ZXJzZWN0KGJiLCBleHRlbnQpKSB7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgYmFkTGluZSA9IGVsZS5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZTtcbiAgICByLmRyYXdFbGVtZW50VW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbihjb250ZXh0LCBlbGUsIGVsZVR4ckNhY2hlLCBweFJhdGlvLCBsdmwsIHJlYXNvbiwgZ2V0WmVyb1JvdGF0aW9uLCBnZXRPcGFjaXR5KTtcbiAgICBpZiAoIWlzRWRnZSB8fCAhYmFkTGluZSkge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oY29udGV4dCwgZWxlLCBsYmxUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldExhYmVsUm90YXRpb24sIGdldFRleHRPcGFjaXR5KTtcbiAgICB9XG4gICAgaWYgKGlzRWRnZSAmJiAhYmFkTGluZSkge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oY29udGV4dCwgZWxlLCBzbGJUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldFNvdXJjZUxhYmVsUm90YXRpb24sIGdldFRleHRPcGFjaXR5KTtcbiAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGNvbnRleHQsIGVsZSwgdGxiVHhyQ2FjaGUsIHB4UmF0aW8sIGx2bCwgcmVhc29uLCBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uLCBnZXRUZXh0T3BhY2l0eSk7XG4gICAgfVxuICAgIHIuZHJhd0VsZW1lbnRPdmVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH1cbn07XG5DUnAkOS5kcmF3RWxlbWVudHMgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlcykge1xuICB2YXIgciA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlKTtcbiAgfVxufTtcbkNScCQ5LmRyYXdDYWNoZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50KTtcbiAgfVxufTtcbkNScCQ5LmRyYXdDYWNoZWROb2RlcyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICBpZiAoIWVsZS5pc05vZGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnQoY29udGV4dCwgZWxlLCBweFJhdGlvLCBleHRlbnQpO1xuICB9XG59O1xuQ1JwJDkuZHJhd0xheWVyZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgbGF5ZXJzID0gci5kYXRhLmx5clR4ckNhY2hlLmdldExheWVycyhlbGVzLCBweFJhdGlvKTtcbiAgaWYgKGxheWVycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgICB2YXIgYmIgPSBsYXllci5iYjtcbiAgICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmRyYXdJbWFnZShsYXllci5jYW52YXMsIGJiLngxLCBiYi55MSwgYmIudywgYmIuaCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGZhbGwgYmFjayBvbiBwbGFpbiBjYWNoaW5nIGlmIG5vIGxheWVyc1xuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRzKGNvbnRleHQsIGVsZXMsIHB4UmF0aW8sIGV4dGVudCk7XG4gIH1cbn07XG5cbnZhciBDUnAkOCA9IHt9O1xuQ1JwJDguZHJhd0VkZ2UgPSBmdW5jdGlvbiAoY29udGV4dCwgZWRnZSwgc2hpZnRUb09yaWdpbldpdGhCYikge1xuICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgc2hvdWxkRHJhd092ZXJsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBzaG91bGREcmF3T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaWYgYmV6aWVyIGN0cmwgcHRzIGNhbiBub3QgYmUgY2FsY3VsYXRlZCwgdGhlbiBkaWVcbiAgaWYgKHJzLmJhZExpbmUgfHwgcnMuYWxscHRzID09IG51bGwgfHwgaXNOYU4ocnMuYWxscHRzWzBdKSkge1xuICAgIC8vIGlzTmFOIGluIGNhc2UgZWRnZSBpcyBpbXBvc3NpYmxlIGFuZCBicm93c2VyIGJ1Z3MgKGUuZy4gc2FmYXJpKVxuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuICB2YXIgb3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gZWRnZS5wc3R5bGUoJ29wYWNpdHknKS52YWx1ZSA6IDE7XG4gIHZhciBsaW5lT3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gZWRnZS5wc3R5bGUoJ2xpbmUtb3BhY2l0eScpLnZhbHVlIDogMTtcbiAgdmFyIGN1cnZlU3R5bGUgPSBlZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgdmFyIGxpbmVTdHlsZSA9IGVkZ2UucHN0eWxlKCdsaW5lLXN0eWxlJykudmFsdWU7XG4gIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICB2YXIgbGluZUNhcCA9IGVkZ2UucHN0eWxlKCdsaW5lLWNhcCcpLnZhbHVlO1xuICB2YXIgbGluZU91dGxpbmVXaWR0aCA9IGVkZ2UucHN0eWxlKCdsaW5lLW91dGxpbmUtd2lkdGgnKS52YWx1ZTtcbiAgdmFyIGxpbmVPdXRsaW5lQ29sb3IgPSBlZGdlLnBzdHlsZSgnbGluZS1vdXRsaW5lLWNvbG9yJykudmFsdWU7XG4gIHZhciBlZmZlY3RpdmVMaW5lT3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgLy8gc2VwYXJhdGUgYXJyb3cgb3BhY2l0eSB3b3VsZCByZXF1aXJlIGFycm93LW9wYWNpdHkgcHJvcGVydHlcbiAgdmFyIGVmZmVjdGl2ZUFycm93T3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgdmFyIGRyYXdMaW5lID0gZnVuY3Rpb24gZHJhd0xpbmUoKSB7XG4gICAgdmFyIHN0cm9rZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVmZmVjdGl2ZUxpbmVPcGFjaXR5O1xuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnc3RyYWlnaHQtdHJpYW5nbGUnKSB7XG4gICAgICByLmVsZVN0cm9rZVN0eWxlKGNvbnRleHQsIGVkZ2UsIHN0cm9rZU9wYWNpdHkpO1xuICAgICAgci5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlZGdlLCBjb250ZXh0LCBycy5hbGxwdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGVkZ2VXaWR0aDtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IGxpbmVDYXA7XG4gICAgICByLmVsZVN0cm9rZVN0eWxlKGNvbnRleHQsIGVkZ2UsIHN0cm9rZU9wYWNpdHkpO1xuICAgICAgci5kcmF3RWRnZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzLCBsaW5lU3R5bGUpO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRyYXdMaW5lT3V0bGluZSA9IGZ1bmN0aW9uIGRyYXdMaW5lT3V0bGluZSgpIHtcbiAgICB2YXIgc3Ryb2tlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZWZmZWN0aXZlTGluZU9wYWNpdHk7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSBlZGdlV2lkdGggKyBsaW5lT3V0bGluZVdpZHRoO1xuICAgIGNvbnRleHQubGluZUNhcCA9IGxpbmVDYXA7XG4gICAgaWYgKGxpbmVPdXRsaW5lV2lkdGggPiAwKSB7XG4gICAgICByLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgbGluZU91dGxpbmVDb2xvclswXSwgbGluZU91dGxpbmVDb2xvclsxXSwgbGluZU91dGxpbmVDb2xvclsyXSwgc3Ryb2tlT3BhY2l0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIG5vdCBkcmF3IGFueSBsaW5lT3V0bGluZVxuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodC10cmlhbmdsZScpIHtcbiAgICAgIHIuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5kcmF3RWRnZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzLCBsaW5lU3R5bGUpO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRyYXdPdmVybGF5ID0gZnVuY3Rpb24gZHJhd092ZXJsYXkoKSB7XG4gICAgaWYgKCFzaG91bGREcmF3T3ZlcmxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByLmRyYXdFZGdlT3ZlcmxheShjb250ZXh0LCBlZGdlKTtcbiAgfTtcbiAgdmFyIGRyYXdVbmRlcmxheSA9IGZ1bmN0aW9uIGRyYXdVbmRlcmxheSgpIHtcbiAgICBpZiAoIXNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHIuZHJhd0VkZ2VVbmRlcmxheShjb250ZXh0LCBlZGdlKTtcbiAgfTtcbiAgdmFyIGRyYXdBcnJvd3MgPSBmdW5jdGlvbiBkcmF3QXJyb3dzKCkge1xuICAgIHZhciBhcnJvd09wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVmZmVjdGl2ZUFycm93T3BhY2l0eTtcbiAgICByLmRyYXdBcnJvd2hlYWRzKGNvbnRleHQsIGVkZ2UsIGFycm93T3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3VGV4dCA9IGZ1bmN0aW9uIGRyYXdUZXh0KCkge1xuICAgIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVkZ2UsIG51bGwsIGRyYXdMYWJlbCk7XG4gIH07XG4gIGNvbnRleHQubGluZUpvaW4gPSAncm91bmQnO1xuICB2YXIgZ2hvc3QgPSBlZGdlLnBzdHlsZSgnZ2hvc3QnKS52YWx1ZSA9PT0gJ3llcyc7XG4gIGlmIChnaG9zdCkge1xuICAgIHZhciBneCA9IGVkZ2UucHN0eWxlKCdnaG9zdC1vZmZzZXQteCcpLnBmVmFsdWU7XG4gICAgdmFyIGd5ID0gZWRnZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICB2YXIgZ2hvc3RPcGFjaXR5ID0gZWRnZS5wc3R5bGUoJ2dob3N0LW9wYWNpdHknKS52YWx1ZTtcbiAgICB2YXIgZWZmZWN0aXZlR2hvc3RPcGFjaXR5ID0gZWZmZWN0aXZlTGluZU9wYWNpdHkgKiBnaG9zdE9wYWNpdHk7XG4gICAgY29udGV4dC50cmFuc2xhdGUoZ3gsIGd5KTtcbiAgICBkcmF3TGluZShlZmZlY3RpdmVHaG9zdE9wYWNpdHkpO1xuICAgIGRyYXdBcnJvd3MoZWZmZWN0aXZlR2hvc3RPcGFjaXR5KTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtZ3gsIC1neSk7XG4gIH0gZWxzZSB7XG4gICAgZHJhd0xpbmVPdXRsaW5lKCk7XG4gIH1cbiAgZHJhd1VuZGVybGF5KCk7XG4gIGRyYXdMaW5lKCk7XG4gIGRyYXdBcnJvd3MoKTtcbiAgZHJhd092ZXJsYXkoKTtcbiAgZHJhd1RleHQoKTtcbiAgaWYgKHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShiYi54MSwgYmIueTEpO1xuICB9XG59O1xudmFyIGRyYXdFZGdlT3ZlcmxheVVuZGVybGF5ID0gZnVuY3Rpb24gZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkob3ZlcmxheU9yVW5kZXJsYXkpIHtcbiAgaWYgKCFbJ292ZXJsYXknLCAndW5kZXJsYXknXS5pbmNsdWRlcyhvdmVybGF5T3JVbmRlcmxheSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUnKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRleHQsIGVkZ2UpIHtcbiAgICBpZiAoIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvcGFjaXR5ID0gZWRnZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLW9wYWNpdHlcIikpLnZhbHVlO1xuICAgIGlmIChvcGFjaXR5ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByID0gdGhpcztcbiAgICB2YXIgdXNlUGF0aHMgPSByLnVzZVBhdGhzKCk7XG4gICAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICB2YXIgcGFkZGluZyA9IGVkZ2UucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1wYWRkaW5nXCIpKS5wZlZhbHVlO1xuICAgIHZhciB3aWR0aCA9IDIgKiBwYWRkaW5nO1xuICAgIHZhciBjb2xvciA9IGVkZ2UucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1jb2xvclwiKSkudmFsdWU7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWxmJyAmJiAhdXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9ICdidXR0JztcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ3JvdW5kJztcbiAgICB9XG4gICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgIHIuZHJhd0VkZ2VQYXRoKGVkZ2UsIGNvbnRleHQsIHJzLmFsbHB0cywgJ3NvbGlkJyk7XG4gIH07XG59O1xuQ1JwJDguZHJhd0VkZ2VPdmVybGF5ID0gZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkoJ292ZXJsYXknKTtcbkNScCQ4LmRyYXdFZGdlVW5kZXJsYXkgPSBkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSgndW5kZXJsYXknKTtcbkNScCQ4LmRyYXdFZGdlUGF0aCA9IGZ1bmN0aW9uIChlZGdlLCBjb250ZXh0LCBwdHMsIHR5cGUpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGNhbnZhc0N4dCA9IGNvbnRleHQ7XG4gIHZhciBwYXRoO1xuICB2YXIgcGF0aENhY2hlSGl0ID0gZmFsc2U7XG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKTtcbiAgdmFyIGxpbmVEYXNoUGF0dGVybiA9IGVkZ2UucHN0eWxlKCdsaW5lLWRhc2gtcGF0dGVybicpLnBmVmFsdWU7XG4gIHZhciBsaW5lRGFzaE9mZnNldCA9IGVkZ2UucHN0eWxlKCdsaW5lLWRhc2gtb2Zmc2V0JykucGZWYWx1ZTtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgdmFyIHBhdGhDYWNoZUtleSA9IHB0cy5qb2luKCckJyk7XG4gICAgdmFyIGtleU1hdGNoZXMgPSBycy5wYXRoQ2FjaGVLZXkgJiYgcnMucGF0aENhY2hlS2V5ID09PSBwYXRoQ2FjaGVLZXk7XG4gICAgaWYgKGtleU1hdGNoZXMpIHtcbiAgICAgIHBhdGggPSBjb250ZXh0ID0gcnMucGF0aENhY2hlO1xuICAgICAgcGF0aENhY2hlSGl0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGNvbnRleHQgPSBuZXcgUGF0aDJEKCk7XG4gICAgICBycy5wYXRoQ2FjaGVLZXkgPSBwYXRoQ2FjaGVLZXk7XG4gICAgICBycy5wYXRoQ2FjaGUgPSBwYXRoO1xuICAgIH1cbiAgfVxuICBpZiAoY2FudmFzQ3h0LnNldExpbmVEYXNoKSB7XG4gICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICBjYW52YXNDeHQuc2V0TGluZURhc2goWzEsIDFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXNoZWQnOlxuICAgICAgICBjYW52YXNDeHQuc2V0TGluZURhc2gobGluZURhc2hQYXR0ZXJuKTtcbiAgICAgICAgY2FudmFzQ3h0LmxpbmVEYXNoT2Zmc2V0ID0gbGluZURhc2hPZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc29saWQnOlxuICAgICAgICBjYW52YXNDeHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFwYXRoQ2FjaGVIaXQgJiYgIXJzLmJhZExpbmUpIHtcbiAgICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgfVxuICAgIGNvbnRleHQubW92ZVRvKHB0c1swXSwgcHRzWzFdKTtcbiAgICBzd2l0Y2ggKHJzLmVkZ2VUeXBlKSB7XG4gICAgICBjYXNlICdiZXppZXInOlxuICAgICAgY2FzZSAnc2VsZic6XG4gICAgICBjYXNlICdjb21wb3VuZCc6XG4gICAgICBjYXNlICdtdWx0aWJlemllcic6XG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpICsgMyA8IHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RyYWlnaHQnOlxuICAgICAgY2FzZSAnaGF5c3RhY2snOlxuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pICsgMSA8IHB0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwdHNbX2ldLCBwdHNbX2kgKyAxXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWdtZW50cyc6XG4gICAgICAgIGlmIChycy5pc1JvdW5kKSB7XG4gICAgICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHJzLnJvdW5kQ29ybmVycyksXG4gICAgICAgICAgICBfc3RlcDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgdmFyIGNvcm5lciA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBkcmF3UHJlcGFyZWRSb3VuZENvcm5lcihjb250ZXh0LCBjb3JuZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGV4dC5saW5lVG8ocHRzW3B0cy5sZW5ndGggLSAyXSwgcHRzW3B0cy5sZW5ndGggLSAxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMjsgX2kyICsgMSA8IHB0cy5sZW5ndGg7IF9pMiArPSAyKSB7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwdHNbX2kyXSwgcHRzW19pMiArIDFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGNvbnRleHQgPSBjYW52YXNDeHQ7XG4gIGlmICh1c2VQYXRocykge1xuICAgIGNvbnRleHQuc3Ryb2tlKHBhdGgpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gIH1cblxuICAvLyByZXNldCBhbnkgbGluZSBkYXNoZXNcbiAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgfVxufTtcbkNScCQ4LmRyYXdFZGdlVHJpYW5nbGVQYXRoID0gZnVuY3Rpb24gKGVkZ2UsIGNvbnRleHQsIHB0cykge1xuICAvLyB1c2UgbGluZSBzdHJva2Ugc3R5bGUgZm9yIHRyaWFuZ2xlIGZpbGwgc3R5bGVcbiAgY29udGV4dC5maWxsU3R5bGUgPSBjb250ZXh0LnN0cm9rZVN0eWxlO1xuICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgKyAxIDwgcHRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHZlY3RvciA9IFtwdHNbaSArIDJdIC0gcHRzW2ldLCBwdHNbaSArIDNdIC0gcHRzW2kgKyAxXV07XG4gICAgdmFyIGxlbmd0aCA9IE1hdGguc3FydCh2ZWN0b3JbMF0gKiB2ZWN0b3JbMF0gKyB2ZWN0b3JbMV0gKiB2ZWN0b3JbMV0pO1xuICAgIHZhciBub3JtYWwgPSBbdmVjdG9yWzFdIC8gbGVuZ3RoLCAtdmVjdG9yWzBdIC8gbGVuZ3RoXTtcbiAgICB2YXIgdHJpYW5nbGVIZWFkID0gW25vcm1hbFswXSAqIGVkZ2VXaWR0aCAvIDIsIG5vcm1hbFsxXSAqIGVkZ2VXaWR0aCAvIDJdO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5tb3ZlVG8ocHRzW2ldIC0gdHJpYW5nbGVIZWFkWzBdLCBwdHNbaSArIDFdIC0gdHJpYW5nbGVIZWFkWzFdKTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdHNbaV0gKyB0cmlhbmdsZUhlYWRbMF0sIHB0c1tpICsgMV0gKyB0cmlhbmdsZUhlYWRbMV0pO1xuICAgIGNvbnRleHQubGluZVRvKHB0c1tpICsgMl0sIHB0c1tpICsgM10pO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH1cbn07XG5DUnAkOC5kcmF3QXJyb3doZWFkcyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlZGdlLCBvcGFjaXR5KSB7XG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBpc0hheXN0YWNrID0gcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjayc7XG4gIGlmICghaXNIYXlzdGFjaykge1xuICAgIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAnc291cmNlJywgcnMuYXJyb3dTdGFydFgsIHJzLmFycm93U3RhcnRZLCBycy5zcmNBcnJvd0FuZ2xlLCBvcGFjaXR5KTtcbiAgfVxuICB0aGlzLmRyYXdBcnJvd2hlYWQoY29udGV4dCwgZWRnZSwgJ21pZC10YXJnZXQnLCBycy5taWRYLCBycy5taWRZLCBycy5taWR0Z3RBcnJvd0FuZ2xlLCBvcGFjaXR5KTtcbiAgdGhpcy5kcmF3QXJyb3doZWFkKGNvbnRleHQsIGVkZ2UsICdtaWQtc291cmNlJywgcnMubWlkWCwgcnMubWlkWSwgcnMubWlkc3JjQXJyb3dBbmdsZSwgb3BhY2l0eSk7XG4gIGlmICghaXNIYXlzdGFjaykge1xuICAgIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAndGFyZ2V0JywgcnMuYXJyb3dFbmRYLCBycy5hcnJvd0VuZFksIHJzLnRndEFycm93QW5nbGUsIG9wYWNpdHkpO1xuICB9XG59O1xuQ1JwJDguZHJhd0Fycm93aGVhZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlZGdlLCBwcmVmaXgsIHgsIHksIGFuZ2xlLCBvcGFjaXR5KSB7XG4gIGlmIChpc05hTih4KSB8fCB4ID09IG51bGwgfHwgaXNOYU4oeSkgfHwgeSA9PSBudWxsIHx8IGlzTmFOKGFuZ2xlKSB8fCBhbmdsZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGFycm93U2hhcGUgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LXNoYXBlJykudmFsdWU7XG4gIGlmIChhcnJvd1NoYXBlID09PSAnbm9uZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGFycm93Q2xlYXJGaWxsID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1maWxsJykudmFsdWUgPT09ICdob2xsb3cnID8gJ2JvdGgnIDogJ2ZpbGxlZCc7XG4gIHZhciBhcnJvd0ZpbGwgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LWZpbGwnKS52YWx1ZTtcbiAgdmFyIGVkZ2VXaWR0aCA9IGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gIHZhciBwQXJyb3dXaWR0aCA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctYXJyb3ctd2lkdGgnKTtcbiAgdmFyIGFycm93V2lkdGggPSBwQXJyb3dXaWR0aC52YWx1ZSA9PT0gJ21hdGNoLWxpbmUnID8gZWRnZVdpZHRoIDogcEFycm93V2lkdGgucGZWYWx1ZTtcbiAgaWYgKHBBcnJvd1dpZHRoLnVuaXRzID09PSAnJScpIGFycm93V2lkdGggKj0gZWRnZVdpZHRoO1xuICB2YXIgZWRnZU9wYWNpdHkgPSBlZGdlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlO1xuICBpZiAob3BhY2l0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3BhY2l0eSA9IGVkZ2VPcGFjaXR5O1xuICB9XG4gIHZhciBnY28gPSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgaWYgKG9wYWNpdHkgIT09IDEgfHwgYXJyb3dGaWxsID09PSAnaG9sbG93Jykge1xuICAgIC8vIHRoZW4gZXh0cmEgY2xlYXIgaXMgbmVlZGVkXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcbiAgICBzZWxmLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIDEpO1xuICAgIHNlbGYuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCAyNTUsIDI1NSwgMjU1LCAxKTtcbiAgICBzZWxmLmRyYXdBcnJvd1NoYXBlKGVkZ2UsIGNvbnRleHQsIGFycm93Q2xlYXJGaWxsLCBlZGdlV2lkdGgsIGFycm93U2hhcGUsIGFycm93V2lkdGgsIHgsIHksIGFuZ2xlKTtcbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgfSAvLyBvdGhlcndpc2UsIHRoZSBvcGFxdWUgYXJyb3cgY2xlYXJzIGl0IGZvciBmcmVlIDopXG5cbiAgdmFyIGNvbG9yID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1jb2xvcicpLnZhbHVlO1xuICBzZWxmLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICBzZWxmLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgb3BhY2l0eSk7XG4gIHNlbGYuZHJhd0Fycm93U2hhcGUoZWRnZSwgY29udGV4dCwgYXJyb3dGaWxsLCBlZGdlV2lkdGgsIGFycm93U2hhcGUsIGFycm93V2lkdGgsIHgsIHksIGFuZ2xlKTtcbn07XG5DUnAkOC5kcmF3QXJyb3dTaGFwZSA9IGZ1bmN0aW9uIChlZGdlLCBjb250ZXh0LCBmaWxsLCBlZGdlV2lkdGgsIHNoYXBlLCBzaGFwZVdpZHRoLCB4LCB5LCBhbmdsZSkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKSAmJiBzaGFwZSAhPT0gJ3RyaWFuZ2xlLWNyb3NzJztcbiAgdmFyIHBhdGhDYWNoZUhpdCA9IGZhbHNlO1xuICB2YXIgcGF0aDtcbiAgdmFyIGNhbnZhc0NvbnRleHQgPSBjb250ZXh0O1xuICB2YXIgdHJhbnNsYXRpb24gPSB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG4gIHZhciBzY2FsZSA9IGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlO1xuICB2YXIgc2l6ZSA9IHRoaXMuZ2V0QXJyb3dXaWR0aChlZGdlV2lkdGgsIHNjYWxlKTtcbiAgdmFyIHNoYXBlSW1wbCA9IHIuYXJyb3dTaGFwZXNbc2hhcGVdO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICB2YXIgY2FjaGUgPSByLmFycm93UGF0aENhY2hlID0gci5hcnJvd1BhdGhDYWNoZSB8fCBbXTtcbiAgICB2YXIga2V5ID0gaGFzaFN0cmluZyhzaGFwZSk7XG4gICAgdmFyIGNhY2hlZFBhdGggPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWRQYXRoICE9IG51bGwpIHtcbiAgICAgIHBhdGggPSBjb250ZXh0ID0gY2FjaGVkUGF0aDtcbiAgICAgIHBhdGhDYWNoZUhpdCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSBjb250ZXh0ID0gbmV3IFBhdGgyRCgpO1xuICAgICAgY2FjaGVba2V5XSA9IHBhdGg7XG4gICAgfVxuICB9XG4gIGlmICghcGF0aENhY2hlSGl0KSB7XG4gICAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIH1cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIC8vIHN0b3JlIGluIHRoZSBwYXRoIGNhY2hlIHdpdGggdmFsdWVzIGVhc2lseSBtYW5pcHVsYXRlZCBsYXRlclxuICAgICAgc2hhcGVJbXBsLmRyYXcoY29udGV4dCwgMSwgMCwge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hhcGVJbXBsLmRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5jbG9zZVBhdGgpIHtcbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgfVxuICB9XG4gIGNvbnRleHQgPSBjYW52YXNDb250ZXh0O1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICAvLyBzZXQgdHJhbnNmb3JtIHRvIGFycm93IHBvc2l0aW9uL29yaWVudGF0aW9uXG4gICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSk7XG4gICAgY29udGV4dC5yb3RhdGUoYW5nbGUpO1xuICAgIGNvbnRleHQuc2NhbGUoc2l6ZSwgc2l6ZSk7XG4gIH1cbiAgaWYgKGZpbGwgPT09ICdmaWxsZWQnIHx8IGZpbGwgPT09ICdib3RoJykge1xuICAgIGlmICh1c2VQYXRocykge1xuICAgICAgY29udGV4dC5maWxsKHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cbiAgaWYgKGZpbGwgPT09ICdob2xsb3cnIHx8IGZpbGwgPT09ICdib3RoJykge1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gc2hhcGVXaWR0aCAvICh1c2VQYXRocyA/IHNpemUgOiAxKTtcbiAgICBjb250ZXh0LmxpbmVKb2luID0gJ21pdGVyJztcbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIH1cbiAgfVxuICBpZiAodXNlUGF0aHMpIHtcbiAgICAvLyByZXNldCB0cmFuc2Zvcm0gYnkgYXBwbHlpbmcgaW52ZXJzZVxuICAgIGNvbnRleHQuc2NhbGUoMSAvIHNpemUsIDEgLyBzaXplKTtcbiAgICBjb250ZXh0LnJvdGF0ZSgtYW5nbGUpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC14LCAteSk7XG4gIH1cbn07XG5cbnZhciBDUnAkNyA9IHt9O1xuQ1JwJDcuc2FmZURyYXdJbWFnZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBpbWcsIGl4LCBpeSwgaXcsIGloLCB4LCB5LCB3LCBoKSB7XG4gIC8vIGRldGVjdCBwcm9ibGVtYXRpYyBjYXNlcyBmb3Igb2xkIGJyb3dzZXJzIHdpdGggYmFkIGltYWdlcyAoY2hlYXBlciB0aGFuIHRyeS1jYXRjaClcbiAgaWYgKGl3IDw9IDAgfHwgaWggPD0gMCB8fCB3IDw9IDAgfHwgaCA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCBpeCwgaXksIGl3LCBpaCwgeCwgeSwgdywgaCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3YXJuKGUpO1xuICB9XG59O1xuQ1JwJDcuZHJhd0luc2NyaWJlZEltYWdlID0gZnVuY3Rpb24gKGNvbnRleHQsIGltZywgbm9kZSwgaW5kZXgsIG5vZGVPcGFjaXR5KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIHBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgdmFyIG5vZGVYID0gcG9zLng7XG4gIHZhciBub2RlWSA9IHBvcy55O1xuICB2YXIgc3R5bGVPYmogPSBub2RlLmN5KCkuc3R5bGUoKTtcbiAgdmFyIGdldEluZGV4ZWRTdHlsZSA9IHN0eWxlT2JqLmdldEluZGV4ZWRTdHlsZS5iaW5kKHN0eWxlT2JqKTtcbiAgdmFyIGZpdCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1maXQnLCAndmFsdWUnLCBpbmRleCk7XG4gIHZhciByZXBlYXQgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcmVwZWF0JywgJ3ZhbHVlJywgaW5kZXgpO1xuICB2YXIgbm9kZVcgPSBub2RlLndpZHRoKCk7XG4gIHZhciBub2RlSCA9IG5vZGUuaGVpZ2h0KCk7XG4gIHZhciBwYWRkaW5nWDIgPSBub2RlLnBhZGRpbmcoKSAqIDI7XG4gIHZhciBub2RlVFcgPSBub2RlVyArIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLCAndmFsdWUnLCBpbmRleCkgPT09ICdpbm5lcicgPyAwIDogcGFkZGluZ1gyKTtcbiAgdmFyIG5vZGVUSCA9IG5vZGVIICsgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nLCAndmFsdWUnLCBpbmRleCkgPT09ICdpbm5lcicgPyAwIDogcGFkZGluZ1gyKTtcbiAgdmFyIHJzID0gbm9kZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGNsaXAgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtY2xpcCcsICd2YWx1ZScsIGluZGV4KTtcbiAgdmFyIHNob3VsZENsaXAgPSBjbGlwID09PSAnbm9kZSc7XG4gIHZhciBpbWdPcGFjaXR5ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLCAndmFsdWUnLCBpbmRleCkgKiBub2RlT3BhY2l0eTtcbiAgdmFyIHNtb290aCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmcnLCAndmFsdWUnLCBpbmRleCk7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSBub2RlLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnZhbHVlO1xuICBpZiAoY29ybmVyUmFkaXVzICE9PSAnYXV0bycpIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgdmFyIGltZ1cgPSBpbWcud2lkdGggfHwgaW1nLmNhY2hlZFc7XG4gIHZhciBpbWdIID0gaW1nLmhlaWdodCB8fCBpbWcuY2FjaGVkSDtcblxuICAvLyB3b3JrYXJvdW5kIGZvciBicm9rZW4gYnJvd3NlcnMgbGlrZSBpZVxuICBpZiAobnVsbCA9PSBpbWdXIHx8IG51bGwgPT0gaW1nSCkge1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgaW1nVyA9IGltZy5jYWNoZWRXID0gaW1nLndpZHRoIHx8IGltZy5vZmZzZXRXaWR0aDtcbiAgICBpbWdIID0gaW1nLmNhY2hlZEggPSBpbWcuaGVpZ2h0IHx8IGltZy5vZmZzZXRIZWlnaHQ7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIH1cblxuICB2YXIgdyA9IGltZ1c7XG4gIHZhciBoID0gaW1nSDtcbiAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd2YWx1ZScsIGluZGV4KSAhPT0gJ2F1dG8nKSB7XG4gICAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd1bml0cycsIGluZGV4KSA9PT0gJyUnKSB7XG4gICAgICB3ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXdpZHRoJywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVFc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHcgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgICB9XG4gIH1cbiAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1oZWlnaHQnLCAndmFsdWUnLCBpbmRleCkgIT09ICdhdXRvJykge1xuICAgIGlmIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3VuaXRzJywgaW5kZXgpID09PSAnJScpIHtcbiAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVEg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gICAgfVxuICB9XG4gIGlmICh3ID09PSAwIHx8IGggPT09IDApIHtcbiAgICByZXR1cm47IC8vIG5vIHBvaW50IGluIGRyYXdpbmcgZW1wdHkgaW1hZ2UgKGFuZCBjaHJvbWUgaXMgYnJva2VuIGluIHRoaXMgY2FzZSlcbiAgfVxuXG4gIGlmIChmaXQgPT09ICdjb250YWluJykge1xuICAgIHZhciBzY2FsZSA9IE1hdGgubWluKG5vZGVUVyAvIHcsIG5vZGVUSCAvIGgpO1xuICAgIHcgKj0gc2NhbGU7XG4gICAgaCAqPSBzY2FsZTtcbiAgfSBlbHNlIGlmIChmaXQgPT09ICdjb3ZlcicpIHtcbiAgICB2YXIgc2NhbGUgPSBNYXRoLm1heChub2RlVFcgLyB3LCBub2RlVEggLyBoKTtcbiAgICB3ICo9IHNjYWxlO1xuICAgIGggKj0gc2NhbGU7XG4gIH1cbiAgdmFyIHggPSBub2RlWCAtIG5vZGVUVyAvIDI7IC8vIGxlZnRcbiAgdmFyIHBvc1hVbml0cyA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgJ3VuaXRzJywgaW5kZXgpO1xuICB2YXIgcG9zWFBmVmFsID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgaWYgKHBvc1hVbml0cyA9PT0gJyUnKSB7XG4gICAgeCArPSAobm9kZVRXIC0gdykgKiBwb3NYUGZWYWw7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBwb3NYUGZWYWw7XG4gIH1cbiAgdmFyIG9mZlhVbml0cyA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1vZmZzZXQteCcsICd1bml0cycsIGluZGV4KTtcbiAgdmFyIG9mZlhQZlZhbCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1vZmZzZXQteCcsICdwZlZhbHVlJywgaW5kZXgpO1xuICBpZiAob2ZmWFVuaXRzID09PSAnJScpIHtcbiAgICB4ICs9IChub2RlVFcgLSB3KSAqIG9mZlhQZlZhbDtcbiAgfSBlbHNlIHtcbiAgICB4ICs9IG9mZlhQZlZhbDtcbiAgfVxuICB2YXIgeSA9IG5vZGVZIC0gbm9kZVRIIC8gMjsgLy8gdG9wXG4gIHZhciBwb3NZVW5pdHMgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcG9zaXRpb24teScsICd1bml0cycsIGluZGV4KTtcbiAgdmFyIHBvc1lQZlZhbCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gIGlmIChwb3NZVW5pdHMgPT09ICclJykge1xuICAgIHkgKz0gKG5vZGVUSCAtIGgpICogcG9zWVBmVmFsO1xuICB9IGVsc2Uge1xuICAgIHkgKz0gcG9zWVBmVmFsO1xuICB9XG4gIHZhciBvZmZZVW5pdHMgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXknLCAndW5pdHMnLCBpbmRleCk7XG4gIHZhciBvZmZZUGZWYWwgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXknLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgaWYgKG9mZllVbml0cyA9PT0gJyUnKSB7XG4gICAgeSArPSAobm9kZVRIIC0gaCkgKiBvZmZZUGZWYWw7XG4gIH0gZWxzZSB7XG4gICAgeSArPSBvZmZZUGZWYWw7XG4gIH1cbiAgaWYgKHJzLnBhdGhDYWNoZSkge1xuICAgIHggLT0gbm9kZVg7XG4gICAgeSAtPSBub2RlWTtcbiAgICBub2RlWCA9IDA7XG4gICAgbm9kZVkgPSAwO1xuICB9XG4gIHZhciBnQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICBjb250ZXh0Lmdsb2JhbEFscGhhID0gaW1nT3BhY2l0eTtcbiAgdmFyIHNtb290aGluZ0VuYWJsZWQgPSByLmdldEltZ1Ntb290aGluZyhjb250ZXh0KTtcbiAgdmFyIGlzU21vb3RoaW5nU3dpdGNoZWQgPSBmYWxzZTtcbiAgaWYgKHNtb290aCA9PT0gJ25vJyAmJiBzbW9vdGhpbmdFbmFibGVkKSB7XG4gICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgZmFsc2UpO1xuICAgIGlzU21vb3RoaW5nU3dpdGNoZWQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHNtb290aCA9PT0gJ3llcycgJiYgIXNtb290aGluZ0VuYWJsZWQpIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgICBpc1Ntb290aGluZ1N3aXRjaGVkID0gdHJ1ZTtcbiAgfVxuICBpZiAocmVwZWF0ID09PSAnbm8tcmVwZWF0Jykge1xuICAgIGlmIChzaG91bGRDbGlwKSB7XG4gICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgIGlmIChycy5wYXRoQ2FjaGUpIHtcbiAgICAgICAgY29udGV4dC5jbGlwKHJzLnBhdGhDYWNoZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByLm5vZGVTaGFwZXNbci5nZXROb2RlU2hhcGUobm9kZSldLmRyYXcoY29udGV4dCwgbm9kZVgsIG5vZGVZLCBub2RlVFcsIG5vZGVUSCwgY29ybmVyUmFkaXVzLCBycyk7XG4gICAgICAgIGNvbnRleHQuY2xpcCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByLnNhZmVEcmF3SW1hZ2UoY29udGV4dCwgaW1nLCAwLCAwLCBpbWdXLCBpbWdILCB4LCB5LCB3LCBoKTtcbiAgICBpZiAoc2hvdWxkQ2xpcCkge1xuICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBwYXR0ZXJuID0gY29udGV4dC5jcmVhdGVQYXR0ZXJuKGltZywgcmVwZWF0KTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIG5vZGVYLCBub2RlWSwgbm9kZVRXLCBub2RlVEgsIGNvcm5lclJhZGl1cywgcnMpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC14LCAteSk7XG4gIH1cbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGdBbHBoYTtcbiAgaWYgKGlzU21vb3RoaW5nU3dpdGNoZWQpIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBzbW9vdGhpbmdFbmFibGVkKTtcbiAgfVxufTtcblxudmFyIENScCQ2ID0ge307XG5DUnAkNi5lbGVUZXh0QmlnZ2VyVGhhbk1pbiA9IGZ1bmN0aW9uIChlbGUsIHNjYWxlKSB7XG4gIGlmICghc2NhbGUpIHtcbiAgICB2YXIgem9vbSA9IGVsZS5jeSgpLnpvb20oKTtcbiAgICB2YXIgcHhSYXRpbyA9IHRoaXMuZ2V0UGl4ZWxSYXRpbygpO1xuICAgIHZhciBsdmwgPSBNYXRoLmNlaWwobG9nMih6b29tICogcHhSYXRpbykpOyAvLyB0aGUgZWZmZWN0aXZlIHRleHR1cmUgbGV2ZWxcblxuICAgIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgfVxuICB2YXIgY29tcHV0ZWRTaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZSAqIHNjYWxlO1xuICB2YXIgbWluU2l6ZSA9IGVsZS5wc3R5bGUoJ21pbi16b29tZWQtZm9udC1zaXplJykucGZWYWx1ZTtcbiAgaWYgKGNvbXB1dGVkU2l6ZSA8IG1pblNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuQ1JwJDYuZHJhd0VsZW1lbnRUZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgZm9yY2UsIHByZWZpeCkge1xuICB2YXIgdXNlRWxlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZm9yY2UgPT0gbnVsbCkge1xuICAgIGlmICh1c2VFbGVPcGFjaXR5ICYmICFyLmVsZVRleHRCaWdnZXJUaGFuTWluKGVsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZm9yY2UgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICB2YXIgbGFiZWwgPSBlbGUucHN0eWxlKCdsYWJlbCcpO1xuICAgIGlmICghbGFiZWwgfHwgIWxhYmVsLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBqdXN0aWZpY2F0aW9uID0gci5nZXRMYWJlbEp1c3RpZmljYXRpb24oZWxlKTtcbiAgICBjb250ZXh0LnRleHRBbGlnbiA9IGp1c3RpZmljYXRpb247XG4gICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmFkTGluZSA9IGVsZS5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZTtcbiAgICB2YXIgX2xhYmVsID0gZWxlLnBzdHlsZSgnbGFiZWwnKTtcbiAgICB2YXIgc3JjTGFiZWwgPSBlbGUucHN0eWxlKCdzb3VyY2UtbGFiZWwnKTtcbiAgICB2YXIgdGd0TGFiZWwgPSBlbGUucHN0eWxlKCd0YXJnZXQtbGFiZWwnKTtcbiAgICBpZiAoYmFkTGluZSB8fCAoIV9sYWJlbCB8fCAhX2xhYmVsLnZhbHVlKSAmJiAoIXNyY0xhYmVsIHx8ICFzcmNMYWJlbC52YWx1ZSkgJiYgKCF0Z3RMYWJlbCB8fCAhdGd0TGFiZWwudmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcbiAgfVxuICB2YXIgYXBwbHlSb3RhdGlvbiA9ICFzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuICBpZiAocHJlZml4ID09IG51bGwpIHtcbiAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgbnVsbCwgYXBwbHlSb3RhdGlvbiwgdXNlRWxlT3BhY2l0eSk7XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgci5kcmF3VGV4dChjb250ZXh0LCBlbGUsICdzb3VyY2UnLCBhcHBseVJvdGF0aW9uLCB1c2VFbGVPcGFjaXR5KTtcbiAgICAgIHIuZHJhd1RleHQoY29udGV4dCwgZWxlLCAndGFyZ2V0JywgYXBwbHlSb3RhdGlvbiwgdXNlRWxlT3BhY2l0eSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHIuZHJhd1RleHQoY29udGV4dCwgZWxlLCBwcmVmaXgsIGFwcGx5Um90YXRpb24sIHVzZUVsZU9wYWNpdHkpO1xuICB9XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgY29udGV4dC50cmFuc2xhdGUoYmIueDEsIGJiLnkxKTtcbiAgfVxufTtcbkNScCQ2LmdldEZvbnRDYWNoZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBjYWNoZTtcbiAgdGhpcy5mb250Q2FjaGVzID0gdGhpcy5mb250Q2FjaGVzIHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9udENhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGNhY2hlID0gdGhpcy5mb250Q2FjaGVzW2ldO1xuICAgIGlmIChjYWNoZS5jb250ZXh0ID09PSBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfVxuICB9XG4gIGNhY2hlID0ge1xuICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdGhpcy5mb250Q2FjaGVzLnB1c2goY2FjaGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG4vLyBzZXQgdXAgY2FudmFzIGNvbnRleHQgd2l0aCBmb250XG4vLyByZXR1cm5zIHRyYW5zZm9ybWVkIHRleHQgc3RyaW5nXG5DUnAkNi5zZXR1cFRleHRTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUpIHtcbiAgdmFyIHVzZUVsZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gIC8vIEZvbnQgc3R5bGVcbiAgdmFyIGxhYmVsU3R5bGUgPSBlbGUucHN0eWxlKCdmb250LXN0eWxlJykuc3RyVmFsdWU7XG4gIHZhciBsYWJlbFNpemUgPSBlbGUucHN0eWxlKCdmb250LXNpemUnKS5wZlZhbHVlICsgJ3B4JztcbiAgdmFyIGxhYmVsRmFtaWx5ID0gZWxlLnBzdHlsZSgnZm9udC1mYW1pbHknKS5zdHJWYWx1ZTtcbiAgdmFyIGxhYmVsV2VpZ2h0ID0gZWxlLnBzdHlsZSgnZm9udC13ZWlnaHQnKS5zdHJWYWx1ZTtcbiAgdmFyIG9wYWNpdHkgPSB1c2VFbGVPcGFjaXR5ID8gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSAqIGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnZhbHVlIDogMTtcbiAgdmFyIG91dGxpbmVPcGFjaXR5ID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLW9wYWNpdHknKS52YWx1ZSAqIG9wYWNpdHk7XG4gIHZhciBjb2xvciA9IGVsZS5wc3R5bGUoJ2NvbG9yJykudmFsdWU7XG4gIHZhciBvdXRsaW5lQ29sb3IgPSBlbGUucHN0eWxlKCd0ZXh0LW91dGxpbmUtY29sb3InKS52YWx1ZTtcbiAgY29udGV4dC5mb250ID0gbGFiZWxTdHlsZSArICcgJyArIGxhYmVsV2VpZ2h0ICsgJyAnICsgbGFiZWxTaXplICsgJyAnICsgbGFiZWxGYW1pbHk7XG4gIGNvbnRleHQubGluZUpvaW4gPSAncm91bmQnOyAvLyBzbyB0ZXh0IG91dGxpbmVzIGFyZW4ndCBqYWdnZWRcblxuICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICB0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgb3V0bGluZUNvbG9yWzBdLCBvdXRsaW5lQ29sb3JbMV0sIG91dGxpbmVDb2xvclsyXSwgb3V0bGluZU9wYWNpdHkpO1xufTtcblxuLy8gVE9ETyBlbnN1cmUgcmUtdXNlZFxuZnVuY3Rpb24gcm91bmRSZWN0KGN0eCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICB2YXIgcmFkaXVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiA1O1xuICB2YXIgc3Ryb2tlID0gYXJndW1lbnRzLmxlbmd0aCA+IDYgPyBhcmd1bWVudHNbNl0gOiB1bmRlZmluZWQ7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4ICsgcmFkaXVzLCB5KTtcbiAgY3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMsIHkpO1xuICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHksIHggKyB3aWR0aCwgeSArIHJhZGl1cyk7XG4gIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMsIHkgKyBoZWlnaHQpO1xuICBjdHgubGluZVRvKHggKyByYWRpdXMsIHkgKyBoZWlnaHQpO1xuICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgY3R4LmxpbmVUbyh4LCB5ICsgcmFkaXVzKTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSwgeCArIHJhZGl1cywgeSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgaWYgKHN0cm9rZSkgY3R4LnN0cm9rZSgpO2Vsc2UgY3R4LmZpbGwoKTtcbn1cbkNScCQ2LmdldFRleHRBbmdsZSA9IGZ1bmN0aW9uIChlbGUsIHByZWZpeCkge1xuICB2YXIgdGhldGE7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHJzY3JhdGNoID0gX3AucnNjcmF0Y2g7XG4gIHZhciBwZGFzaCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICB2YXIgcm90YXRpb24gPSBlbGUucHN0eWxlKHBkYXNoICsgJ3RleHQtcm90YXRpb24nKTtcbiAgdmFyIHRleHRBbmdsZSA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbEFuZ2xlJywgcHJlZml4KTtcbiAgaWYgKHJvdGF0aW9uLnN0clZhbHVlID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICB0aGV0YSA9IGVsZS5pc0VkZ2UoKSA/IHRleHRBbmdsZSA6IDA7XG4gIH0gZWxzZSBpZiAocm90YXRpb24uc3RyVmFsdWUgPT09ICdub25lJykge1xuICAgIHRoZXRhID0gMDtcbiAgfSBlbHNlIHtcbiAgICB0aGV0YSA9IHJvdGF0aW9uLnBmVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoZXRhO1xufTtcbkNScCQ2LmRyYXdUZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgcHJlZml4KSB7XG4gIHZhciBhcHBseVJvdGF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgdXNlRWxlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcnNjcmF0Y2ggPSBfcC5yc2NyYXRjaDtcbiAgdmFyIHBhcmVudE9wYWNpdHkgPSB1c2VFbGVPcGFjaXR5ID8gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSA6IDE7XG4gIGlmICh1c2VFbGVPcGFjaXR5ICYmIChwYXJlbnRPcGFjaXR5ID09PSAwIHx8IGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnZhbHVlID09PSAwKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVzZSAnbWFpbicgYXMgYW4gYWxpYXMgZm9yIHRoZSBtYWluIGxhYmVsIChpLmUuIG51bGwgcHJlZml4KVxuICBpZiAocHJlZml4ID09PSAnbWFpbicpIHtcbiAgICBwcmVmaXggPSBudWxsO1xuICB9XG4gIHZhciB0ZXh0WCA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFgnLCBwcmVmaXgpO1xuICB2YXIgdGV4dFkgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxZJywgcHJlZml4KTtcbiAgdmFyIG9yZ1RleHRYLCBvcmdUZXh0WTsgLy8gdXNlZCBmb3Igcm90YXRpb25cbiAgdmFyIHRleHQgPSB0aGlzLmdldExhYmVsVGV4dChlbGUsIHByZWZpeCk7XG4gIGlmICh0ZXh0ICE9IG51bGwgJiYgdGV4dCAhPT0gJycgJiYgIWlzTmFOKHRleHRYKSAmJiAhaXNOYU4odGV4dFkpKSB7XG4gICAgdGhpcy5zZXR1cFRleHRTdHlsZShjb250ZXh0LCBlbGUsIHVzZUVsZU9wYWNpdHkpO1xuICAgIHZhciBwZGFzaCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICAgIHZhciB0ZXh0VyA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4KTtcbiAgICB2YXIgdGV4dEggPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgpO1xuICAgIHZhciBtYXJnaW5YID0gZWxlLnBzdHlsZShwZGFzaCArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZTtcbiAgICB2YXIgbWFyZ2luWSA9IGVsZS5wc3R5bGUocGRhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgaGFsaWduID0gZWxlLnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcbiAgICB2YXIgdmFsaWduID0gZWxlLnBzdHlsZSgndGV4dC12YWxpZ24nKS52YWx1ZTtcbiAgICBpZiAoaXNFZGdlKSB7XG4gICAgICBoYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIHZhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgICB0ZXh0WCArPSBtYXJnaW5YO1xuICAgIHRleHRZICs9IG1hcmdpblk7XG4gICAgdmFyIHRoZXRhO1xuICAgIGlmICghYXBwbHlSb3RhdGlvbikge1xuICAgICAgdGhldGEgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGV0YSA9IHRoaXMuZ2V0VGV4dEFuZ2xlKGVsZSwgcHJlZml4KTtcbiAgICB9XG4gICAgaWYgKHRoZXRhICE9PSAwKSB7XG4gICAgICBvcmdUZXh0WCA9IHRleHRYO1xuICAgICAgb3JnVGV4dFkgPSB0ZXh0WTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9yZ1RleHRYLCBvcmdUZXh0WSk7XG4gICAgICBjb250ZXh0LnJvdGF0ZSh0aGV0YSk7XG4gICAgICB0ZXh0WCA9IDA7XG4gICAgICB0ZXh0WSA9IDA7XG4gICAgfVxuICAgIHN3aXRjaCAodmFsaWduKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHRleHRZICs9IHRleHRIIC8gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0ZXh0WSArPSB0ZXh0SDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBiYWNrZ3JvdW5kT3BhY2l0eSA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWU7XG4gICAgdmFyIGJvcmRlck9wYWNpdHkgPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci1vcGFjaXR5JykudmFsdWU7XG4gICAgdmFyIHRleHRCb3JkZXJXaWR0aCA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgYmFja2dyb3VuZFBhZGRpbmcgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtcGFkZGluZycpLnBmVmFsdWU7XG4gICAgdmFyIHN0eWxlU2hhcGUgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtc2hhcGUnKS5zdHJWYWx1ZTtcbiAgICB2YXIgcm91bmRlZCA9IHN0eWxlU2hhcGUuaW5kZXhPZigncm91bmQnKSA9PT0gMDtcbiAgICB2YXIgcm91bmRSYWRpdXMgPSAyO1xuICAgIGlmIChiYWNrZ3JvdW5kT3BhY2l0eSA+IDAgfHwgdGV4dEJvcmRlcldpZHRoID4gMCAmJiBib3JkZXJPcGFjaXR5ID4gMCkge1xuICAgICAgdmFyIGJnWCA9IHRleHRYIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICBzd2l0Y2ggKGhhbGlnbikge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBiZ1ggLT0gdGV4dFc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgYmdYIC09IHRleHRXIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBiZ1kgPSB0ZXh0WSAtIHRleHRIIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICB2YXIgYmdXID0gdGV4dFcgKyAyICogYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICB2YXIgYmdIID0gdGV4dEggKyAyICogYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICBpZiAoYmFja2dyb3VuZE9wYWNpdHkgPiAwKSB7XG4gICAgICAgIHZhciB0ZXh0RmlsbCA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICB2YXIgdGV4dEJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1jb2xvcicpLnZhbHVlO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0ZXh0QmFja2dyb3VuZENvbG9yWzBdICsgJywnICsgdGV4dEJhY2tncm91bmRDb2xvclsxXSArICcsJyArIHRleHRCYWNrZ3JvdW5kQ29sb3JbMl0gKyAnLCcgKyBiYWNrZ3JvdW5kT3BhY2l0eSAqIHBhcmVudE9wYWNpdHkgKyAnKSc7XG4gICAgICAgIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgcm91bmRSZWN0KGNvbnRleHQsIGJnWCwgYmdZLCBiZ1csIGJnSCwgcm91bmRSYWRpdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYmdYLCBiZ1ksIGJnVywgYmdIKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRleHRGaWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRleHRCb3JkZXJXaWR0aCA+IDAgJiYgYm9yZGVyT3BhY2l0eSA+IDApIHtcbiAgICAgICAgdmFyIHRleHRTdHJva2UgPSBjb250ZXh0LnN0cm9rZVN0eWxlO1xuICAgICAgICB2YXIgdGV4dExpbmVXaWR0aCA9IGNvbnRleHQubGluZVdpZHRoO1xuICAgICAgICB2YXIgdGV4dEJvcmRlckNvbG9yID0gZWxlLnBzdHlsZSgndGV4dC1ib3JkZXItY29sb3InKS52YWx1ZTtcbiAgICAgICAgdmFyIHRleHRCb3JkZXJTdHlsZSA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXN0eWxlJykudmFsdWU7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAncmdiYSgnICsgdGV4dEJvcmRlckNvbG9yWzBdICsgJywnICsgdGV4dEJvcmRlckNvbG9yWzFdICsgJywnICsgdGV4dEJvcmRlckNvbG9yWzJdICsgJywnICsgYm9yZGVyT3BhY2l0eSAqIHBhcmVudE9wYWNpdHkgKyAnKSc7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoO1xuICAgICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgICAgICAgIHN3aXRjaCAodGV4dEJvcmRlclN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxLCAxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbNCwgMl0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoIC8gNDsgLy8gNTAlIHJlc2VydmVkIGZvciB3aGl0ZSBiZXR3ZWVuIHRoZSB0d28gYm9yZGVyc1xuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzb2xpZCc6XG4gICAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdW5kZWQpIHtcbiAgICAgICAgICByb3VuZFJlY3QoY29udGV4dCwgYmdYLCBiZ1ksIGJnVywgYmdILCByb3VuZFJhZGl1cywgJ3N0cm9rZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChiZ1gsIGJnWSwgYmdXLCBiZ0gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0Qm9yZGVyU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgICAgdmFyIHdoaXRlV2lkdGggPSB0ZXh0Qm9yZGVyV2lkdGggLyAyO1xuICAgICAgICAgIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgICByb3VuZFJlY3QoY29udGV4dCwgYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyLCByb3VuZFJhZGl1cywgJ3N0cm9rZScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVJlY3QoYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRleHRMaW5lV2lkdGg7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0ZXh0U3Ryb2tlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbGluZVdpZHRoID0gMiAqIGVsZS5wc3R5bGUoJ3RleHQtb3V0bGluZS13aWR0aCcpLnBmVmFsdWU7IC8vICoyIGIvYyB0aGUgc3Ryb2tlIGlzIGRyYXduIGNlbnRyZWQgb24gdGhlIG1pZGRsZVxuXG4gICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgIH1cbiAgICBpZiAoZWxlLnBzdHlsZSgndGV4dC13cmFwJykudmFsdWUgPT09ICd3cmFwJykge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgcHJlZml4KTtcbiAgICAgIHZhciBsaW5lSGVpZ2h0ID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCk7XG4gICAgICB2YXIgaGFsZlRleHRXID0gdGV4dFcgLyAyO1xuICAgICAgdmFyIGp1c3RpZmljYXRpb24gPSB0aGlzLmdldExhYmVsSnVzdGlmaWNhdGlvbihlbGUpO1xuICAgICAgaWYgKGp1c3RpZmljYXRpb24gPT09ICdhdXRvJykgOyBlbHNlIGlmIChoYWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBhdXRvIGp1c3RpZmljYXRpb24gOiByaWdodFxuICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgdGV4dFggKz0gLXRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgdGV4dFggKz0gLWhhbGZUZXh0VztcbiAgICAgICAgfSAvLyBlbHNlIHNhbWUgYXMgYXV0b1xuICAgICAgfSBlbHNlIGlmIChoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIC8vIGF1dG8ganVzdGZpY2F0aW9uIDogY2VudGVyXG4gICAgICAgIGlmIChqdXN0aWZpY2F0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSAtaGFsZlRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSBoYWxmVGV4dFc7XG4gICAgICAgIH0gLy8gZWxzZSBzYW1lIGFzIGF1dG9cbiAgICAgIH0gZWxzZSBpZiAoaGFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIGF1dG8ganVzdGlmaWNhdGlvbiA6IGxlZnRcbiAgICAgICAgaWYgKGp1c3RpZmljYXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgdGV4dFggKz0gaGFsZlRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSB0ZXh0VztcbiAgICAgICAgfSAvLyBlbHNlIHNhbWUgYXMgYXV0b1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHZhbGlnbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRleHRZIC09IChsaW5lcy5sZW5ndGggLSAxKSAqIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdGV4dFkgLT0gKGxpbmVzLmxlbmd0aCAtIDEpICogbGluZUhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVRleHQobGluZXNbbF0sIHRleHRYLCB0ZXh0WSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5maWxsVGV4dChsaW5lc1tsXSwgdGV4dFgsIHRleHRZKTtcbiAgICAgICAgdGV4dFkgKz0gbGluZUhlaWdodDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgY29udGV4dC5zdHJva2VUZXh0KHRleHQsIHRleHRYLCB0ZXh0WSk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmZpbGxUZXh0KHRleHQsIHRleHRYLCB0ZXh0WSk7XG4gICAgfVxuICAgIGlmICh0aGV0YSAhPT0gMCkge1xuICAgICAgY29udGV4dC5yb3RhdGUoLXRoZXRhKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1vcmdUZXh0WCwgLW9yZ1RleHRZKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qIGdsb2JhbCBQYXRoMkQgKi9cbnZhciBDUnAkNSA9IHt9O1xuQ1JwJDUuZHJhd05vZGUgPSBmdW5jdGlvbiAoY29udGV4dCwgbm9kZSwgc2hpZnRUb09yaWdpbldpdGhCYikge1xuICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgc2hvdWxkRHJhd092ZXJsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBzaG91bGREcmF3T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgbm9kZVdpZHRoLCBub2RlSGVpZ2h0O1xuICB2YXIgX3AgPSBub2RlLl9wcml2YXRlO1xuICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgdmFyIHBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgaWYgKCFudW1iZXIkMShwb3MueCkgfHwgIW51bWJlciQxKHBvcy55KSkge1xuICAgIHJldHVybjsgLy8gY2FuJ3QgZHJhdyBub2RlIHdpdGggdW5kZWZpbmVkIHBvc2l0aW9uXG4gIH1cblxuICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIW5vZGUudmlzaWJsZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBlbGVPcGFjaXR5ID0gc2hvdWxkRHJhd09wYWNpdHkgPyBub2RlLmVmZmVjdGl2ZU9wYWNpdHkoKSA6IDE7XG4gIHZhciB1c2VQYXRocyA9IHIudXNlUGF0aHMoKTtcbiAgdmFyIHBhdGg7XG4gIHZhciBwYXRoQ2FjaGVIaXQgPSBmYWxzZTtcbiAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgbm9kZVdpZHRoID0gbm9kZS53aWR0aCgpICsgMiAqIHBhZGRpbmc7XG4gIG5vZGVIZWlnaHQgPSBub2RlLmhlaWdodCgpICsgMiAqIHBhZGRpbmc7XG5cbiAgLy9cbiAgLy8gc2V0dXAgc2hpZnRcblxuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuXG4gIC8vXG4gIC8vIGxvYWQgYmcgaW1hZ2VcblxuICB2YXIgYmdJbWdQcm9wID0gbm9kZS5wc3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnKTtcbiAgdmFyIHVybHMgPSBiZ0ltZ1Byb3AudmFsdWU7XG4gIHZhciB1cmxEZWZpbmVkID0gbmV3IEFycmF5KHVybHMubGVuZ3RoKTtcbiAgdmFyIGltYWdlID0gbmV3IEFycmF5KHVybHMubGVuZ3RoKTtcbiAgdmFyIG51bUltYWdlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB1cmwgPSB1cmxzW2ldO1xuICAgIHZhciBkZWZkID0gdXJsRGVmaW5lZFtpXSA9IHVybCAhPSBudWxsICYmIHVybCAhPT0gJ25vbmUnO1xuICAgIGlmIChkZWZkKSB7XG4gICAgICB2YXIgYmdJbWdDcm9zc09yaWdpbiA9IG5vZGUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbicsICd2YWx1ZScsIGkpO1xuICAgICAgbnVtSW1hZ2VzKys7XG5cbiAgICAgIC8vIGdldCBpbWFnZSwgYW5kIGlmIG5vdCBsb2FkZWQgdGhlbiBhc2sgdG8gcmVkcmF3IHdoZW4gbGF0ZXIgbG9hZGVkXG4gICAgICBpbWFnZVtpXSA9IHIuZ2V0Q2FjaGVkSW1hZ2UodXJsLCBiZ0ltZ0Nyb3NzT3JpZ2luLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9wLmJhY2tncm91bmRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICBub2RlLmVtaXRBbmROb3RpZnkoJ2JhY2tncm91bmQnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vXG4gIC8vIHNldHVwIHN0eWxlc1xuXG4gIHZhciBkYXJrbmVzcyA9IG5vZGUucHN0eWxlKCdiYWNrZ3JvdW5kLWJsYWNrZW4nKS52YWx1ZTtcbiAgdmFyIGJvcmRlcldpZHRoID0gbm9kZS5wc3R5bGUoJ2JvcmRlci13aWR0aCcpLnBmVmFsdWU7XG4gIHZhciBiZ09wYWNpdHkgPSBub2RlLnBzdHlsZSgnYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWUgKiBlbGVPcGFjaXR5O1xuICB2YXIgYm9yZGVyQ29sb3IgPSBub2RlLnBzdHlsZSgnYm9yZGVyLWNvbG9yJykudmFsdWU7XG4gIHZhciBib3JkZXJTdHlsZSA9IG5vZGUucHN0eWxlKCdib3JkZXItc3R5bGUnKS52YWx1ZTtcbiAgdmFyIGJvcmRlckpvaW4gPSBub2RlLnBzdHlsZSgnYm9yZGVyLWpvaW4nKS52YWx1ZTtcbiAgdmFyIGJvcmRlckNhcCA9IG5vZGUucHN0eWxlKCdib3JkZXItY2FwJykudmFsdWU7XG4gIHZhciBib3JkZXJQb3NpdGlvbiA9IG5vZGUucHN0eWxlKCdib3JkZXItcG9zaXRpb24nKS52YWx1ZTtcbiAgdmFyIGJvcmRlclBhdHRlcm4gPSBub2RlLnBzdHlsZSgnYm9yZGVyLWRhc2gtcGF0dGVybicpLnBmVmFsdWU7XG4gIHZhciBib3JkZXJPZmZzZXQgPSBub2RlLnBzdHlsZSgnYm9yZGVyLWRhc2gtb2Zmc2V0JykucGZWYWx1ZTtcbiAgdmFyIGJvcmRlck9wYWNpdHkgPSBub2RlLnBzdHlsZSgnYm9yZGVyLW9wYWNpdHknKS52YWx1ZSAqIGVsZU9wYWNpdHk7XG4gIHZhciBvdXRsaW5lV2lkdGggPSBub2RlLnBzdHlsZSgnb3V0bGluZS13aWR0aCcpLnBmVmFsdWU7XG4gIHZhciBvdXRsaW5lQ29sb3IgPSBub2RlLnBzdHlsZSgnb3V0bGluZS1jb2xvcicpLnZhbHVlO1xuICB2YXIgb3V0bGluZVN0eWxlID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtc3R5bGUnKS52YWx1ZTtcbiAgdmFyIG91dGxpbmVPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtb3BhY2l0eScpLnZhbHVlICogZWxlT3BhY2l0eTtcbiAgdmFyIG91dGxpbmVPZmZzZXQgPSBub2RlLnBzdHlsZSgnb3V0bGluZS1vZmZzZXQnKS52YWx1ZTtcbiAgdmFyIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWU7XG4gIGlmIChjb3JuZXJSYWRpdXMgIT09ICdhdXRvJykgY29ybmVyUmFkaXVzID0gbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlO1xuICB2YXIgc2V0dXBTaGFwZUNvbG9yID0gZnVuY3Rpb24gc2V0dXBTaGFwZUNvbG9yKCkge1xuICAgIHZhciBiZ09weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogYmdPcGFjaXR5O1xuICAgIHIuZWxlRmlsbFN0eWxlKGNvbnRleHQsIG5vZGUsIGJnT3B5KTtcbiAgfTtcbiAgdmFyIHNldHVwQm9yZGVyQ29sb3IgPSBmdW5jdGlvbiBzZXR1cEJvcmRlckNvbG9yKCkge1xuICAgIHZhciBiZHJPcHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGJvcmRlck9wYWNpdHk7XG4gICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGJvcmRlckNvbG9yWzBdLCBib3JkZXJDb2xvclsxXSwgYm9yZGVyQ29sb3JbMl0sIGJkck9weSk7XG4gIH07XG4gIHZhciBzZXR1cE91dGxpbmVDb2xvciA9IGZ1bmN0aW9uIHNldHVwT3V0bGluZUNvbG9yKCkge1xuICAgIHZhciBvdGxuT3B5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBvdXRsaW5lT3BhY2l0eTtcbiAgICByLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgb3V0bGluZUNvbG9yWzBdLCBvdXRsaW5lQ29sb3JbMV0sIG91dGxpbmVDb2xvclsyXSwgb3Rsbk9weSk7XG4gIH07XG5cbiAgLy9cbiAgLy8gc2V0dXAgc2hhcGVcblxuICB2YXIgZ2V0UGF0aCA9IGZ1bmN0aW9uIGdldFBhdGgod2lkdGgsIGhlaWdodCwgc2hhcGUsIHBvaW50cykge1xuICAgIHZhciBwYXRoQ2FjaGUgPSByLm5vZGVQYXRoQ2FjaGUgPSByLm5vZGVQYXRoQ2FjaGUgfHwgW107XG4gICAgdmFyIGtleSA9IGhhc2hTdHJpbmdzKHNoYXBlID09PSAncG9seWdvbicgPyBzaGFwZSArICcsJyArIHBvaW50cy5qb2luKCcsJykgOiBzaGFwZSwgJycgKyBoZWlnaHQsICcnICsgd2lkdGgsICcnICsgY29ybmVyUmFkaXVzKTtcbiAgICB2YXIgY2FjaGVkUGF0aCA9IHBhdGhDYWNoZVtrZXldO1xuICAgIHZhciBwYXRoO1xuICAgIHZhciBjYWNoZUhpdCA9IGZhbHNlO1xuICAgIGlmIChjYWNoZWRQYXRoICE9IG51bGwpIHtcbiAgICAgIHBhdGggPSBjYWNoZWRQYXRoO1xuICAgICAgY2FjaGVIaXQgPSB0cnVlO1xuICAgICAgcnMucGF0aENhY2hlID0gcGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IG5ldyBQYXRoMkQoKTtcbiAgICAgIHBhdGhDYWNoZVtrZXldID0gcnMucGF0aENhY2hlID0gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IHBhdGgsXG4gICAgICBjYWNoZUhpdDogY2FjaGVIaXRcbiAgICB9O1xuICB9O1xuICB2YXIgc3R5bGVTaGFwZSA9IG5vZGUucHN0eWxlKCdzaGFwZScpLnN0clZhbHVlO1xuICB2YXIgc2hhcGVQdHMgPSBub2RlLnBzdHlsZSgnc2hhcGUtcG9seWdvbi1wb2ludHMnKS5wZlZhbHVlO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShwb3MueCwgcG9zLnkpO1xuICAgIHZhciBzaGFwZVBhdGggPSBnZXRQYXRoKG5vZGVXaWR0aCwgbm9kZUhlaWdodCwgc3R5bGVTaGFwZSwgc2hhcGVQdHMpO1xuICAgIHBhdGggPSBzaGFwZVBhdGgucGF0aDtcbiAgICBwYXRoQ2FjaGVIaXQgPSBzaGFwZVBhdGguY2FjaGVIaXQ7XG4gIH1cbiAgdmFyIGRyYXdTaGFwZSA9IGZ1bmN0aW9uIGRyYXdTaGFwZSgpIHtcbiAgICBpZiAoIXBhdGhDYWNoZUhpdCkge1xuICAgICAgdmFyIG5wb3MgPSBwb3M7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgbnBvcyA9IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHIubm9kZVNoYXBlc1tyLmdldE5vZGVTaGFwZShub2RlKV0uZHJhdyhwYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBub2RlV2lkdGgsIG5vZGVIZWlnaHQsIGNvcm5lclJhZGl1cywgcnMpO1xuICAgIH1cbiAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgIGNvbnRleHQuZmlsbChwYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd0ltYWdlcyA9IGZ1bmN0aW9uIGRyYXdJbWFnZXMoKSB7XG4gICAgdmFyIG5vZGVPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbGVPcGFjaXR5O1xuICAgIHZhciBpbnNpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgdmFyIHByZXZCZ2luZyA9IF9wLmJhY2tncm91bmRpbmc7XG4gICAgdmFyIHRvdGFsQ29tcGxldGVkID0gMDtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW1hZ2UubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgYmdDb250YWlubWVudCA9IG5vZGUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCcsICd2YWx1ZScsIF9pKTtcbiAgICAgIGlmIChpbnNpZGUgJiYgYmdDb250YWlubWVudCA9PT0gJ292ZXInIHx8ICFpbnNpZGUgJiYgYmdDb250YWlubWVudCA9PT0gJ2luc2lkZScpIHtcbiAgICAgICAgdG90YWxDb21wbGV0ZWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodXJsRGVmaW5lZFtfaV0gJiYgaW1hZ2VbX2ldLmNvbXBsZXRlICYmICFpbWFnZVtfaV0uZXJyb3IpIHtcbiAgICAgICAgdG90YWxDb21wbGV0ZWQrKztcbiAgICAgICAgci5kcmF3SW5zY3JpYmVkSW1hZ2UoY29udGV4dCwgaW1hZ2VbX2ldLCBub2RlLCBfaSwgbm9kZU9wYWNpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBfcC5iYWNrZ3JvdW5kaW5nID0gISh0b3RhbENvbXBsZXRlZCA9PT0gbnVtSW1hZ2VzKTtcbiAgICBpZiAocHJldkJnaW5nICE9PSBfcC5iYWNrZ3JvdW5kaW5nKSB7XG4gICAgICAvLyB1cGRhdGUgc3R5bGUgYi9jIDpiYWNrZ3JvdW5kaW5nIHN0YXRlIGNoYW5nZWRcbiAgICAgIG5vZGUudXBkYXRlU3R5bGUoZmFsc2UpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdQaWUgPSBmdW5jdGlvbiBkcmF3UGllKCkge1xuICAgIHZhciByZWRyYXdTaGFwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgdmFyIHBpZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGVsZU9wYWNpdHk7XG4gICAgaWYgKHIuaGFzUGllKG5vZGUpKSB7XG4gICAgICByLmRyYXdQaWUoY29udGV4dCwgbm9kZSwgcGllT3BhY2l0eSk7XG5cbiAgICAgIC8vIHJlZHJhdy9yZXN0b3JlIHBhdGggaWYgc3RlcHMgYWZ0ZXIgcGllIG5lZWQgaXRcbiAgICAgIGlmIChyZWRyYXdTaGFwZSkge1xuICAgICAgICBpZiAoIXVzZVBhdGhzKSB7XG4gICAgICAgICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIHBvcy54LCBwb3MueSwgbm9kZVdpZHRoLCBub2RlSGVpZ2h0LCBjb3JuZXJSYWRpdXMsIHJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGRhcmtlbiA9IGZ1bmN0aW9uIGRhcmtlbigpIHtcbiAgICB2YXIgZGFya2VuT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZWxlT3BhY2l0eTtcbiAgICB2YXIgb3BhY2l0eSA9IChkYXJrbmVzcyA+IDAgPyBkYXJrbmVzcyA6IC1kYXJrbmVzcykgKiBkYXJrZW5PcGFjaXR5O1xuICAgIHZhciBjID0gZGFya25lc3MgPiAwID8gMCA6IDI1NTtcbiAgICBpZiAoZGFya25lc3MgIT09IDApIHtcbiAgICAgIHIuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgYywgYywgYywgb3BhY2l0eSk7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgY29udGV4dC5maWxsKHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd0JvcmRlciA9IGZ1bmN0aW9uIGRyYXdCb3JkZXIoKSB7XG4gICAgaWYgKGJvcmRlcldpZHRoID4gMCkge1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IGJvcmRlckNhcDtcbiAgICAgIGNvbnRleHQubGluZUpvaW4gPSBib3JkZXJKb2luO1xuICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIHN3aXRjaCAoYm9yZGVyU3R5bGUpIHtcbiAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbMSwgMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goYm9yZGVyUGF0dGVybik7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnc29saWQnOlxuICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYm9yZGVyUG9zaXRpb24gIT09ICdjZW50ZXInKSB7XG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCAqPSAyO1xuICAgICAgICBpZiAoYm9yZGVyUG9zaXRpb24gPT09ICdpbnNpZGUnKSB7XG4gICAgICAgICAgdXNlUGF0aHMgPyBjb250ZXh0LmNsaXAocGF0aCkgOiBjb250ZXh0LmNsaXAoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcmVnaW9uID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICAgIHJlZ2lvbi5yZWN0KC1ub2RlV2lkdGggLyAyIC0gYm9yZGVyV2lkdGgsIC1ub2RlSGVpZ2h0IC8gMiAtIGJvcmRlcldpZHRoLCBub2RlV2lkdGggKyAyICogYm9yZGVyV2lkdGgsIG5vZGVIZWlnaHQgKyAyICogYm9yZGVyV2lkdGgpO1xuICAgICAgICAgIHJlZ2lvbi5hZGRQYXRoKHBhdGgpO1xuICAgICAgICAgIGNvbnRleHQuY2xpcChyZWdpb24sICdldmVub2RkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdXNlUGF0aHMgPyBjb250ZXh0LnN0cm9rZShwYXRoKSA6IGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXNlUGF0aHMgPyBjb250ZXh0LnN0cm9rZShwYXRoKSA6IGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB9XG4gICAgICBpZiAoYm9yZGVyU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGggLyAzO1xuICAgICAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7XG4gICAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKHBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBnY287XG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2V0IGluIGNhc2Ugd2UgY2hhbmdlZCB0aGUgYm9yZGVyIHN0eWxlXG4gICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd091dGxpbmUgPSBmdW5jdGlvbiBkcmF3T3V0bGluZSgpIHtcbiAgICBpZiAob3V0bGluZVdpZHRoID4gMCkge1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBvdXRsaW5lV2lkdGg7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSAnYnV0dCc7XG4gICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgc3dpdGNoIChvdXRsaW5lU3R5bGUpIHtcbiAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbMSwgMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goWzQsIDJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3NvbGlkJzpcbiAgICAgICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG5wb3MgPSBwb3M7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgbnBvcyA9IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBzaGFwZSA9IHIuZ2V0Tm9kZVNoYXBlKG5vZGUpO1xuICAgICAgdmFyIGJXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgaWYgKGJvcmRlclBvc2l0aW9uID09PSAnaW5zaWRlJykgYldpZHRoID0gMDtcbiAgICAgIGlmIChib3JkZXJQb3NpdGlvbiA9PT0gJ291dHNpZGUnKSBiV2lkdGggKj0gMjtcbiAgICAgIHZhciBzY2FsZVggPSAobm9kZVdpZHRoICsgYldpZHRoICsgKG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpKSAvIG5vZGVXaWR0aDtcbiAgICAgIHZhciBzY2FsZVkgPSAobm9kZUhlaWdodCArIGJXaWR0aCArIChvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSkgLyBub2RlSGVpZ2h0O1xuICAgICAgdmFyIHNXaWR0aCA9IG5vZGVXaWR0aCAqIHNjYWxlWDtcbiAgICAgIHZhciBzSGVpZ2h0ID0gbm9kZUhlaWdodCAqIHNjYWxlWTtcbiAgICAgIHZhciBwb2ludHMgPSByLm5vZGVTaGFwZXNbc2hhcGVdLnBvaW50cztcbiAgICAgIHZhciBfcGF0aDtcbiAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICB2YXIgb3V0bGluZVBhdGggPSBnZXRQYXRoKHNXaWR0aCwgc0hlaWdodCwgc2hhcGUsIHBvaW50cyk7XG4gICAgICAgIF9wYXRoID0gb3V0bGluZVBhdGgucGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gZHJhdyB0aGUgb3V0bGluZSBwYXRoLCBlaXRoZXIgYnkgdXNpbmcgZXhwYW5kZWQgcG9pbnRzIG9yIGJ5IHNjYWxpbmcgXG4gICAgICAvLyB0aGUgZGltZW5zaW9ucywgZGVwZW5kaW5nIG9uIHNoYXBlXG4gICAgICBpZiAoc2hhcGUgPT09IFwiZWxsaXBzZVwiKSB7XG4gICAgICAgIHIuZHJhd0VsbGlwc2VQYXRoKF9wYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBzV2lkdGgsIHNIZWlnaHQpO1xuICAgICAgfSBlbHNlIGlmIChbJ3JvdW5kLWRpYW1vbmQnLCAncm91bmQtaGVwdGFnb24nLCAncm91bmQtaGV4YWdvbicsICdyb3VuZC1vY3RhZ29uJywgJ3JvdW5kLXBlbnRhZ29uJywgJ3JvdW5kLXBvbHlnb24nLCAncm91bmQtdHJpYW5nbGUnLCAncm91bmQtdGFnJ10uaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIHZhciBzTXVsdCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXRYID0gMDtcbiAgICAgICAgdmFyIG9mZnNldFkgPSAwO1xuICAgICAgICBpZiAoc2hhcGUgPT09ICdyb3VuZC1kaWFtb25kJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS40O1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAncm91bmQtaGVwdGFnb24nKSB7XG4gICAgICAgICAgc011bHQgPSAoYldpZHRoICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgKiAxLjA3NTtcbiAgICAgICAgICBvZmZzZXRZID0gLShiV2lkdGggLyAyICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgLyAzNTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLWhleGFnb24nKSB7XG4gICAgICAgICAgc011bHQgPSAoYldpZHRoICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgKiAxLjEyO1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAncm91bmQtcGVudGFnb24nKSB7XG4gICAgICAgICAgc011bHQgPSAoYldpZHRoICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgKiAxLjEzO1xuICAgICAgICAgIG9mZnNldFkgPSAtKGJXaWR0aCAvIDIgKyBvdXRsaW5lT2Zmc2V0ICsgb3V0bGluZVdpZHRoKSAvIDE1O1xuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAncm91bmQtdGFnJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS4xMjtcbiAgICAgICAgICBvZmZzZXRYID0gKGJXaWR0aCAvIDIgKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAqIC4wNztcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLXRyaWFuZ2xlJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogKE1hdGguUEkgLyAyKTtcbiAgICAgICAgICBvZmZzZXRZID0gLShiV2lkdGggKyBvdXRsaW5lT2Zmc2V0IC8gMiArIG91dGxpbmVXaWR0aCkgLyBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzTXVsdCAhPT0gMCkge1xuICAgICAgICAgIHNjYWxlWCA9IChub2RlV2lkdGggKyBzTXVsdCkgLyBub2RlV2lkdGg7XG4gICAgICAgICAgc1dpZHRoID0gbm9kZVdpZHRoICogc2NhbGVYO1xuICAgICAgICAgIGlmICghWydyb3VuZC1oZXhhZ29uJywgJ3JvdW5kLXRhZyddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICAgICAgc2NhbGVZID0gKG5vZGVIZWlnaHQgKyBzTXVsdCkgLyBub2RlSGVpZ2h0O1xuICAgICAgICAgICAgc0hlaWdodCA9IG5vZGVIZWlnaHQgKiBzY2FsZVk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHNXaWR0aCwgc0hlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHZhciBoYWxmVyA9IHNXaWR0aCAvIDI7XG4gICAgICAgIHZhciBoYWxmSCA9IHNIZWlnaHQgLyAyO1xuICAgICAgICB2YXIgcmFkaXVzID0gY29ybmVyUmFkaXVzICsgKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gMjtcbiAgICAgICAgdmFyIHAgPSBuZXcgQXJyYXkocG9pbnRzLmxlbmd0aCAvIDIpO1xuICAgICAgICB2YXIgY29ybmVycyA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHBvaW50cy5sZW5ndGggLyAyOyBfaTMrKykge1xuICAgICAgICAgIHBbX2kzXSA9IHtcbiAgICAgICAgICAgIHg6IG5wb3MueCArIG9mZnNldFggKyBoYWxmVyAqIHBvaW50c1tfaTMgKiAyXSxcbiAgICAgICAgICAgIHk6IG5wb3MueSArIG9mZnNldFkgKyBoYWxmSCAqIHBvaW50c1tfaTMgKiAyICsgMV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBfaTIsXG4gICAgICAgICAgcDEsXG4gICAgICAgICAgcDIsXG4gICAgICAgICAgcDMsXG4gICAgICAgICAgbGVuID0gcC5sZW5ndGg7XG4gICAgICAgIHAxID0gcFtsZW4gLSAxXTtcbiAgICAgICAgLy8gZm9yIGVhY2ggcG9pbnRcbiAgICAgICAgZm9yIChfaTIgPSAwOyBfaTIgPCBsZW47IF9pMisrKSB7XG4gICAgICAgICAgcDIgPSBwW19pMiAlIGxlbl07XG4gICAgICAgICAgcDMgPSBwWyhfaTIgKyAxKSAlIGxlbl07XG4gICAgICAgICAgY29ybmVyc1tfaTJdID0gZ2V0Um91bmRDb3JuZXIocDEsIHAyLCBwMywgcmFkaXVzKTtcbiAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgIHAyID0gcDM7XG4gICAgICAgIH1cbiAgICAgICAgci5kcmF3Um91bmRQb2x5Z29uUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLnggKyBvZmZzZXRYLCBucG9zLnkgKyBvZmZzZXRZLCBub2RlV2lkdGggKiBzY2FsZVgsIG5vZGVIZWlnaHQgKiBzY2FsZVksIHBvaW50cywgY29ybmVycyk7XG4gICAgICB9IGVsc2UgaWYgKFsncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJ10uaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMoc1dpZHRoLCBzSGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgICAgci5kcmF3Um91bmRSZWN0YW5nbGVQYXRoKF9wYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBzV2lkdGgsIHNIZWlnaHQsIGNvcm5lclJhZGl1cyArIChiV2lkdGggKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAvIDIpO1xuICAgICAgfSBlbHNlIGlmIChbJ2N1dHJlY3RhbmdsZScsICdjdXQtcmVjdGFuZ2xlJ10uaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHIuZHJhd0N1dFJlY3RhbmdsZVBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIHNXaWR0aCwgc0hlaWdodCwgbnVsbCwgY29ybmVyUmFkaXVzICsgKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gNCk7XG4gICAgICB9IGVsc2UgaWYgKFsnYm90dG9tcm91bmRyZWN0YW5nbGUnLCAnYm90dG9tLXJvdW5kLXJlY3RhbmdsZSddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICBjb3JuZXJSYWRpdXMgPSBjb3JuZXJSYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHNXaWR0aCwgc0hlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHIuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgc1dpZHRoLCBzSGVpZ2h0LCBjb3JuZXJSYWRpdXMgKyAoYldpZHRoICsgb3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkgLyAyKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwiYmFycmVsXCIpIHtcbiAgICAgICAgci5kcmF3QmFycmVsUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgc1dpZHRoLCBzSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUuc3RhcnRzV2l0aChcInBvbHlnb25cIikgfHwgWydyaG9tYm9pZCcsICdyaWdodC1yaG9tYm9pZCcsICdyb3VuZC10YWcnLCAndGFnJywgJ3ZlZSddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICB2YXIgcGFkID0gKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gbm9kZVdpZHRoO1xuICAgICAgICBwb2ludHMgPSBqb2luTGluZXMoZXhwYW5kUG9seWdvbihwb2ludHMsIHBhZCkpO1xuICAgICAgICByLmRyYXdQb2x5Z29uUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgbm9kZVdpZHRoLCBub2RlSGVpZ2h0LCBwb2ludHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9wYWQgPSAoYldpZHRoICsgb3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkgLyBub2RlV2lkdGg7XG4gICAgICAgIHBvaW50cyA9IGpvaW5MaW5lcyhleHBhbmRQb2x5Z29uKHBvaW50cywgLV9wYWQpKTtcbiAgICAgICAgci5kcmF3UG9seWdvblBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIG5vZGVXaWR0aCwgbm9kZUhlaWdodCwgcG9pbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICBjb250ZXh0LnN0cm9rZShfcGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgaWYgKG91dGxpbmVTdHlsZSA9PT0gJ2RvdWJsZScpIHtcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBiV2lkdGggLyAzO1xuICAgICAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7XG4gICAgICAgIGlmICh1c2VQYXRocykge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKF9wYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZ2NvO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBpbiBjYXNlIHdlIGNoYW5nZWQgdGhlIGJvcmRlciBzdHlsZVxuICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdPdmVybGF5ID0gZnVuY3Rpb24gZHJhd092ZXJsYXkoKSB7XG4gICAgaWYgKHNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICByLmRyYXdOb2RlT3ZlcmxheShjb250ZXh0LCBub2RlLCBwb3MsIG5vZGVXaWR0aCwgbm9kZUhlaWdodCk7XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd1VuZGVybGF5ID0gZnVuY3Rpb24gZHJhd1VuZGVybGF5KCkge1xuICAgIGlmIChzaG91bGREcmF3T3ZlcmxheSkge1xuICAgICAgci5kcmF3Tm9kZVVuZGVybGF5KGNvbnRleHQsIG5vZGUsIHBvcywgbm9kZVdpZHRoLCBub2RlSGVpZ2h0KTtcbiAgICB9XG4gIH07XG4gIHZhciBkcmF3VGV4dCA9IGZ1bmN0aW9uIGRyYXdUZXh0KCkge1xuICAgIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIG5vZGUsIG51bGwsIGRyYXdMYWJlbCk7XG4gIH07XG4gIHZhciBnaG9zdCA9IG5vZGUucHN0eWxlKCdnaG9zdCcpLnZhbHVlID09PSAneWVzJztcbiAgaWYgKGdob3N0KSB7XG4gICAgdmFyIGd4ID0gbm9kZS5wc3R5bGUoJ2dob3N0LW9mZnNldC14JykucGZWYWx1ZTtcbiAgICB2YXIgZ3kgPSBub2RlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXknKS5wZlZhbHVlO1xuICAgIHZhciBnaG9zdE9wYWNpdHkgPSBub2RlLnBzdHlsZSgnZ2hvc3Qtb3BhY2l0eScpLnZhbHVlO1xuICAgIHZhciBlZmZHaG9zdE9wYWNpdHkgPSBnaG9zdE9wYWNpdHkgKiBlbGVPcGFjaXR5O1xuICAgIGNvbnRleHQudHJhbnNsYXRlKGd4LCBneSk7XG4gICAgc2V0dXBPdXRsaW5lQ29sb3IoKTtcbiAgICBkcmF3T3V0bGluZSgpO1xuICAgIHNldHVwU2hhcGVDb2xvcihnaG9zdE9wYWNpdHkgKiBiZ09wYWNpdHkpO1xuICAgIGRyYXdTaGFwZSgpO1xuICAgIGRyYXdJbWFnZXMoZWZmR2hvc3RPcGFjaXR5LCB0cnVlKTtcbiAgICBzZXR1cEJvcmRlckNvbG9yKGdob3N0T3BhY2l0eSAqIGJvcmRlck9wYWNpdHkpO1xuICAgIGRyYXdCb3JkZXIoKTtcbiAgICBkcmF3UGllKGRhcmtuZXNzICE9PSAwIHx8IGJvcmRlcldpZHRoICE9PSAwKTtcbiAgICBkcmF3SW1hZ2VzKGVmZkdob3N0T3BhY2l0eSwgZmFsc2UpO1xuICAgIGRhcmtlbihlZmZHaG9zdE9wYWNpdHkpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1neCwgLWd5KTtcbiAgfVxuICBpZiAodXNlUGF0aHMpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtcG9zLngsIC1wb3MueSk7XG4gIH1cbiAgZHJhd1VuZGVybGF5KCk7XG4gIGlmICh1c2VQYXRocykge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKHBvcy54LCBwb3MueSk7XG4gIH1cbiAgc2V0dXBPdXRsaW5lQ29sb3IoKTtcbiAgZHJhd091dGxpbmUoKTtcbiAgc2V0dXBTaGFwZUNvbG9yKCk7XG4gIGRyYXdTaGFwZSgpO1xuICBkcmF3SW1hZ2VzKGVsZU9wYWNpdHksIHRydWUpO1xuICBzZXR1cEJvcmRlckNvbG9yKCk7XG4gIGRyYXdCb3JkZXIoKTtcbiAgZHJhd1BpZShkYXJrbmVzcyAhPT0gMCB8fCBib3JkZXJXaWR0aCAhPT0gMCk7XG4gIGRyYXdJbWFnZXMoZWxlT3BhY2l0eSwgZmFsc2UpO1xuICBkYXJrZW4oKTtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgY29udGV4dC50cmFuc2xhdGUoLXBvcy54LCAtcG9zLnkpO1xuICB9XG4gIGRyYXdUZXh0KCk7XG4gIGRyYXdPdmVybGF5KCk7XG5cbiAgLy9cbiAgLy8gY2xlYW4gdXAgc2hpZnRcblxuICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKGJiLngxLCBiYi55MSk7XG4gIH1cbn07XG52YXIgZHJhd05vZGVPdmVybGF5VW5kZXJsYXkgPSBmdW5jdGlvbiBkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheShvdmVybGF5T3JVbmRlcmxheSkge1xuICBpZiAoIVsnb3ZlcmxheScsICd1bmRlcmxheSddLmluY2x1ZGVzKG92ZXJsYXlPclVuZGVybGF5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZScpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoY29udGV4dCwgbm9kZSwgcG9zLCBub2RlV2lkdGgsIG5vZGVIZWlnaHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgaWYgKCFub2RlLnZpc2libGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcGFkZGluZyA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1wYWRkaW5nXCIpKS5wZlZhbHVlO1xuICAgIHZhciBvcGFjaXR5ID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLW9wYWNpdHlcIikpLnZhbHVlO1xuICAgIHZhciBjb2xvciA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1jb2xvclwiKSkudmFsdWU7XG4gICAgdmFyIHNoYXBlID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLXNoYXBlXCIpKS52YWx1ZTtcbiAgICB2YXIgcmFkaXVzID0gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLWNvcm5lci1yYWRpdXNcIikpLnZhbHVlO1xuICAgIGlmIChvcGFjaXR5ID4gMCkge1xuICAgICAgcG9zID0gcG9zIHx8IG5vZGUucG9zaXRpb24oKTtcbiAgICAgIGlmIChub2RlV2lkdGggPT0gbnVsbCB8fCBub2RlSGVpZ2h0ID09IG51bGwpIHtcbiAgICAgICAgdmFyIF9wYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gICAgICAgIG5vZGVXaWR0aCA9IG5vZGUud2lkdGgoKSArIDIgKiBfcGFkZGluZztcbiAgICAgICAgbm9kZUhlaWdodCA9IG5vZGUuaGVpZ2h0KCkgKyAyICogX3BhZGRpbmc7XG4gICAgICB9XG4gICAgICByLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgICAgci5ub2RlU2hhcGVzW3NoYXBlXS5kcmF3KGNvbnRleHQsIHBvcy54LCBwb3MueSwgbm9kZVdpZHRoICsgcGFkZGluZyAqIDIsIG5vZGVIZWlnaHQgKyBwYWRkaW5nICogMiwgcmFkaXVzKTtcbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIH1cbiAgfTtcbn07XG5DUnAkNS5kcmF3Tm9kZU92ZXJsYXkgPSBkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheSgnb3ZlcmxheScpO1xuQ1JwJDUuZHJhd05vZGVVbmRlcmxheSA9IGRyYXdOb2RlT3ZlcmxheVVuZGVybGF5KCd1bmRlcmxheScpO1xuXG4vLyBkb2VzIHRoZSBub2RlIGhhdmUgYXQgbGVhc3Qgb25lIHBpZSBwaWVjZT9cbkNScCQ1Lmhhc1BpZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIG5vZGUgPSBub2RlWzBdOyAvLyBlbnN1cmUgZWxlIHJlZlxuXG4gIHJldHVybiBub2RlLl9wcml2YXRlLmhhc1BpZTtcbn07XG5DUnAkNS5kcmF3UGllID0gZnVuY3Rpb24gKGNvbnRleHQsIG5vZGUsIG5vZGVPcGFjaXR5LCBwb3MpIHtcbiAgbm9kZSA9IG5vZGVbMF07IC8vIGVuc3VyZSBlbGUgcmVmXG4gIHBvcyA9IHBvcyB8fCBub2RlLnBvc2l0aW9uKCk7XG4gIHZhciBjeVN0eWxlID0gbm9kZS5jeSgpLnN0eWxlKCk7XG4gIHZhciBwaWVTaXplID0gbm9kZS5wc3R5bGUoJ3BpZS1zaXplJyk7XG4gIHZhciB4ID0gcG9zLng7XG4gIHZhciB5ID0gcG9zLnk7XG4gIHZhciBub2RlVyA9IG5vZGUud2lkdGgoKTtcbiAgdmFyIG5vZGVIID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHJhZGl1cyA9IE1hdGgubWluKG5vZGVXLCBub2RlSCkgLyAyOyAvLyBtdXN0IGZpdCBpbiBub2RlXG4gIHZhciBsYXN0UGVyY2VudCA9IDA7IC8vIHdoYXQgJSB0byBjb250aW51ZSBkcmF3aW5nIHBpZSBzbGljZXMgZnJvbSBvbiBbMCwgMV1cbiAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICB4ID0gMDtcbiAgICB5ID0gMDtcbiAgfVxuICBpZiAocGllU2l6ZS51bml0cyA9PT0gJyUnKSB7XG4gICAgcmFkaXVzID0gcmFkaXVzICogcGllU2l6ZS5wZlZhbHVlO1xuICB9IGVsc2UgaWYgKHBpZVNpemUucGZWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmFkaXVzID0gcGllU2l6ZS5wZlZhbHVlIC8gMjtcbiAgfVxuICBmb3IgKHZhciBpID0gMTsgaSA8PSBjeVN0eWxlLnBpZUJhY2tncm91bmROOyBpKyspIHtcbiAgICAvLyAxLi5OXG4gICAgdmFyIHNpemUgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLXNpemUnKS52YWx1ZTtcbiAgICB2YXIgY29sb3IgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLWNvbG9yJykudmFsdWU7XG4gICAgdmFyIG9wYWNpdHkgPSBub2RlLnBzdHlsZSgncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLW9wYWNpdHknKS52YWx1ZSAqIG5vZGVPcGFjaXR5O1xuICAgIHZhciBwZXJjZW50ID0gc2l6ZSAvIDEwMDsgLy8gbWFwIGludGVnZXIgcmFuZ2UgWzAsIDEwMF0gdG8gWzAsIDFdXG5cbiAgICAvLyBwZXJjZW50IGNhbid0IHB1c2ggYmV5b25kIDFcbiAgICBpZiAocGVyY2VudCArIGxhc3RQZXJjZW50ID4gMSkge1xuICAgICAgcGVyY2VudCA9IDEgLSBsYXN0UGVyY2VudDtcbiAgICB9XG4gICAgdmFyIGFuZ2xlU3RhcnQgPSAxLjUgKiBNYXRoLlBJICsgMiAqIE1hdGguUEkgKiBsYXN0UGVyY2VudDsgLy8gc3RhcnQgYXQgMTIgbydjbG9jayBhbmQgZ28gY2xvY2t3aXNlXG4gICAgdmFyIGFuZ2xlRGVsdGEgPSAyICogTWF0aC5QSSAqIHBlcmNlbnQ7XG4gICAgdmFyIGFuZ2xlRW5kID0gYW5nbGVTdGFydCArIGFuZ2xlRGVsdGE7XG5cbiAgICAvLyBpZ25vcmUgaWZcbiAgICAvLyAtIHplcm8gc2l6ZVxuICAgIC8vIC0gd2UncmUgYWxyZWFkeSBiZXlvbmQgdGhlIGZ1bGwgY2lyY2xlXG4gICAgLy8gLSBhZGRpbmcgdGhlIGN1cnJlbnQgc2xpY2Ugd291bGQgZ28gYmV5b25kIHRoZSBmdWxsIGNpcmNsZVxuICAgIGlmIChzaXplID09PSAwIHx8IGxhc3RQZXJjZW50ID49IDEgfHwgbGFzdFBlcmNlbnQgKyBwZXJjZW50ID4gMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgY29udGV4dC5hcmMoeCwgeSwgcmFkaXVzLCBhbmdsZVN0YXJ0LCBhbmdsZUVuZCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIG9wYWNpdHkpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIGxhc3RQZXJjZW50ICs9IHBlcmNlbnQ7XG4gIH1cbn07XG5cbnZhciBDUnAkNCA9IHt9O1xudmFyIG1vdGlvbkJsdXJEZWxheSA9IDEwMDtcblxuLy8gdmFyIGlzRmlyZWZveCA9IHR5cGVvZiBJbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCc7XG5cbkNScCQ0LmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb250ZXh0ID0gdGhpcy5kYXRhLmNvbnRleHRzWzBdO1xuICBpZiAodGhpcy5mb3JjZWRQaXhlbFJhdGlvICE9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO1xuICB9XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSB0aGlzLmN5LndpbmRvdygpO1xuICB2YXIgYmFja2luZ1N0b3JlID0gY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IGNvbnRleHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCBjb250ZXh0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCBjb250ZXh0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIChjb250YWluZXJXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvIGJhY2tpbmdTdG9yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxufTtcblxuQ1JwJDQucGFpbnRDYWNoZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBjYWNoZXMgPSB0aGlzLnBhaW50Q2FjaGVzID0gdGhpcy5wYWludENhY2hlcyB8fCBbXTtcbiAgdmFyIG5lZWRUb0NyZWF0ZUNhY2hlID0gdHJ1ZTtcbiAgdmFyIGNhY2hlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgIGNhY2hlID0gY2FjaGVzW2ldO1xuICAgIGlmIChjYWNoZS5jb250ZXh0ID09PSBjb250ZXh0KSB7XG4gICAgICBuZWVkVG9DcmVhdGVDYWNoZSA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChuZWVkVG9DcmVhdGVDYWNoZSkge1xuICAgIGNhY2hlID0ge1xuICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH07XG4gICAgY2FjaGVzLnB1c2goY2FjaGUpO1xuICB9XG4gIHJldHVybiBjYWNoZTtcbn07XG5DUnAkNC5jcmVhdGVHcmFkaWVudFN0eWxlRm9yID0gZnVuY3Rpb24gKGNvbnRleHQsIHNoYXBlU3R5bGVOYW1lLCBlbGUsIGZpbGwsIG9wYWNpdHkpIHtcbiAgdmFyIGdyYWRpZW50U3R5bGU7XG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKTtcbiAgdmFyIGNvbG9ycyA9IGVsZS5wc3R5bGUoc2hhcGVTdHlsZU5hbWUgKyAnLWdyYWRpZW50LXN0b3AtY29sb3JzJykudmFsdWUsXG4gICAgcG9zaXRpb25zID0gZWxlLnBzdHlsZShzaGFwZVN0eWxlTmFtZSArICctZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnKS5wZlZhbHVlO1xuICBpZiAoZmlsbCA9PT0gJ3JhZGlhbC1ncmFkaWVudCcpIHtcbiAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICB2YXIgc3RhcnQgPSBlbGUuc291cmNlRW5kcG9pbnQoKSxcbiAgICAgICAgZW5kID0gZWxlLnRhcmdldEVuZHBvaW50KCksXG4gICAgICAgIG1pZCA9IGVsZS5taWRwb2ludCgpO1xuICAgICAgdmFyIGQxID0gZGlzdChzdGFydCwgbWlkKTtcbiAgICAgIHZhciBkMiA9IGRpc3QoZW5kLCBtaWQpO1xuICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQobWlkLngsIG1pZC55LCAwLCBtaWQueCwgbWlkLnksIE1hdGgubWF4KGQxLCBkMikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcG9zID0gdXNlUGF0aHMgPyB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH0gOiBlbGUucG9zaXRpb24oKSxcbiAgICAgICAgd2lkdGggPSBlbGUucGFkZGVkV2lkdGgoKSxcbiAgICAgICAgaGVpZ2h0ID0gZWxlLnBhZGRlZEhlaWdodCgpO1xuICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQocG9zLngsIHBvcy55LCAwLCBwb3MueCwgcG9zLnksIE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgdmFyIF9zdGFydCA9IGVsZS5zb3VyY2VFbmRwb2ludCgpLFxuICAgICAgICBfZW5kID0gZWxlLnRhcmdldEVuZHBvaW50KCk7XG4gICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfc3RhcnQueCwgX3N0YXJ0LnksIF9lbmQueCwgX2VuZC55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9wb3MgPSB1c2VQYXRocyA/IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfSA6IGVsZS5wb3NpdGlvbigpLFxuICAgICAgICBfd2lkdGggPSBlbGUucGFkZGVkV2lkdGgoKSxcbiAgICAgICAgX2hlaWdodCA9IGVsZS5wYWRkZWRIZWlnaHQoKSxcbiAgICAgICAgaGFsZldpZHRoID0gX3dpZHRoIC8gMixcbiAgICAgICAgaGFsZkhlaWdodCA9IF9oZWlnaHQgLyAyO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uJykudmFsdWU7XG4gICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICd0by1ib3R0b20nOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54LCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tdG9wJzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLngsIF9wb3MueSArIGhhbGZIZWlnaHQsIF9wb3MueCwgX3Bvcy55IC0gaGFsZkhlaWdodCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLWxlZnQnOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLXJpZ2h0JzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSwgX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0by1ib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICd0by1yaWdodC1ib3R0b20nOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tdG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAndG8tcmlnaHQtdG9wJzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSArIGhhbGZIZWlnaHQsIF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLWJvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAndG8tbGVmdC1ib3R0b20nOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCArIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCwgX3Bvcy54IC0gaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tdG9wLWxlZnQnOlxuICAgICAgICBjYXNlICd0by1sZWZ0LXRvcCc6XG4gICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgKyBoYWxmSGVpZ2h0LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSAtIGhhbGZIZWlnaHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBpbnZhbGlkIGdyYWRpZW50IHN0eWxlXG5cbiAgdmFyIGhhc1Bvc2l0aW9ucyA9IHBvc2l0aW9ucy5sZW5ndGggPT09IGNvbG9ycy5sZW5ndGg7XG4gIHZhciBsZW5ndGggPSBjb2xvcnMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgZ3JhZGllbnRTdHlsZS5hZGRDb2xvclN0b3AoaGFzUG9zaXRpb25zID8gcG9zaXRpb25zW2ldIDogaSAvIChsZW5ndGggLSAxKSwgJ3JnYmEoJyArIGNvbG9yc1tpXVswXSArICcsJyArIGNvbG9yc1tpXVsxXSArICcsJyArIGNvbG9yc1tpXVsyXSArICcsJyArIG9wYWNpdHkgKyAnKScpO1xuICB9XG4gIHJldHVybiBncmFkaWVudFN0eWxlO1xufTtcbkNScCQ0LmdyYWRpZW50RmlsbFN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgZmlsbCwgb3BhY2l0eSkge1xuICB2YXIgZ3JhZGllbnRTdHlsZSA9IHRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcihjb250ZXh0LCAnYmFja2dyb3VuZCcsIGVsZSwgZmlsbCwgb3BhY2l0eSk7XG4gIGlmICghZ3JhZGllbnRTdHlsZSkgcmV0dXJuIG51bGw7IC8vIGVycm9yXG4gIGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnRTdHlsZTtcbn07XG5DUnAkNC5jb2xvckZpbGxTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCByLCBnLCBiLCBhKSB7XG4gIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHIgKyAnLCcgKyBnICsgJywnICsgYiArICcsJyArIGEgKyAnKSc7XG4gIC8vIHR1cm4gb2ZmIGZvciBub3csIHNlZW1zIGNvbnRleHQgZG9lcyBpdHMgb3duIGNhY2hpbmdcblxuICAvLyB2YXIgY2FjaGUgPSB0aGlzLnBhaW50Q2FjaGUoY29udGV4dCk7XG5cbiAgLy8gdmFyIGZpbGxTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuXG4gIC8vIGlmKCBjYWNoZS5maWxsU3R5bGUgIT09IGZpbGxTdHlsZSApe1xuICAvLyAgIGNvbnRleHQuZmlsbFN0eWxlID0gY2FjaGUuZmlsbFN0eWxlID0gZmlsbFN0eWxlO1xuICAvLyB9XG59O1xuXG5DUnAkNC5lbGVGaWxsU3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBvcGFjaXR5KSB7XG4gIHZhciBiYWNrZ3JvdW5kRmlsbCA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZmlsbCcpLnZhbHVlO1xuICBpZiAoYmFja2dyb3VuZEZpbGwgPT09ICdsaW5lYXItZ3JhZGllbnQnIHx8IGJhY2tncm91bmRGaWxsID09PSAncmFkaWFsLWdyYWRpZW50Jykge1xuICAgIHRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoY29udGV4dCwgZWxlLCBiYWNrZ3JvdW5kRmlsbCwgb3BhY2l0eSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtY29sb3InKS52YWx1ZTtcbiAgICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGJhY2tncm91bmRDb2xvclswXSwgYmFja2dyb3VuZENvbG9yWzFdLCBiYWNrZ3JvdW5kQ29sb3JbMl0sIG9wYWNpdHkpO1xuICB9XG59O1xuQ1JwJDQuZ3JhZGllbnRTdHJva2VTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIGZpbGwsIG9wYWNpdHkpIHtcbiAgdmFyIGdyYWRpZW50U3R5bGUgPSB0aGlzLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3IoY29udGV4dCwgJ2xpbmUnLCBlbGUsIGZpbGwsIG9wYWNpdHkpO1xuICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBlcnJvclxuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZ3JhZGllbnRTdHlsZTtcbn07XG5DUnAkNC5jb2xvclN0cm9rZVN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIHIsIGcsIGIsIGEpIHtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuICAvLyB0dXJuIG9mZiBmb3Igbm93LCBzZWVtcyBjb250ZXh0IGRvZXMgaXRzIG93biBjYWNoaW5nXG5cbiAgLy8gdmFyIGNhY2hlID0gdGhpcy5wYWludENhY2hlKGNvbnRleHQpO1xuXG4gIC8vIHZhciBzdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuXG4gIC8vIGlmKCBjYWNoZS5zdHJva2VTdHlsZSAhPT0gc3Ryb2tlU3R5bGUgKXtcbiAgLy8gICBjb250ZXh0LnN0cm9rZVN0eWxlID0gY2FjaGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTtcbiAgLy8gfVxufTtcblxuQ1JwJDQuZWxlU3Ryb2tlU3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBvcGFjaXR5KSB7XG4gIHZhciBsaW5lRmlsbCA9IGVsZS5wc3R5bGUoJ2xpbmUtZmlsbCcpLnZhbHVlO1xuICBpZiAobGluZUZpbGwgPT09ICdsaW5lYXItZ3JhZGllbnQnIHx8IGxpbmVGaWxsID09PSAncmFkaWFsLWdyYWRpZW50Jykge1xuICAgIHRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZShjb250ZXh0LCBlbGUsIGxpbmVGaWxsLCBvcGFjaXR5KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGluZUNvbG9yID0gZWxlLnBzdHlsZSgnbGluZS1jb2xvcicpLnZhbHVlO1xuICAgIHRoaXMuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCBsaW5lQ29sb3JbMF0sIGxpbmVDb2xvclsxXSwgbGluZUNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgfVxufTtcblxuLy8gUmVzaXplIGNhbnZhc1xuQ1JwJDQubWF0Y2hDYW52YXNTaXplID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBkYXRhID0gci5kYXRhO1xuICB2YXIgYmIgPSByLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgdmFyIHdpZHRoID0gYmJbMl07XG4gIHZhciBoZWlnaHQgPSBiYlszXTtcbiAgdmFyIHBpeGVsUmF0aW8gPSByLmdldFBpeGVsUmF0aW8oKTtcbiAgdmFyIG1iUHhSYXRpbyA9IHIubW90aW9uQmx1clB4UmF0aW87XG4gIGlmIChjb250YWluZXIgPT09IHIuZGF0YS5idWZmZXJDYW52YXNlc1tyLk1PVElPTkJMVVJfQlVGRkVSX05PREVdIHx8IGNvbnRhaW5lciA9PT0gci5kYXRhLmJ1ZmZlckNhbnZhc2VzW3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pIHtcbiAgICBwaXhlbFJhdGlvID0gbWJQeFJhdGlvO1xuICB9XG4gIHZhciBjYW52YXNXaWR0aCA9IHdpZHRoICogcGl4ZWxSYXRpbztcbiAgdmFyIGNhbnZhc0hlaWdodCA9IGhlaWdodCAqIHBpeGVsUmF0aW87XG4gIHZhciBjYW52YXM7XG4gIGlmIChjYW52YXNXaWR0aCA9PT0gci5jYW52YXNXaWR0aCAmJiBjYW52YXNIZWlnaHQgPT09IHIuY2FudmFzSGVpZ2h0KSB7XG4gICAgcmV0dXJuOyAvLyBzYXZlIGN5Y2xlcyBpZiBzYW1lXG4gIH1cblxuICByLmZvbnRDYWNoZXMgPSBudWxsOyAvLyByZXNpemluZyByZXNldHMgdGhlIHN0eWxlXG5cbiAgdmFyIGNhbnZhc0NvbnRhaW5lciA9IGRhdGEuY2FudmFzQ29udGFpbmVyO1xuICBjYW52YXNDb250YWluZXIuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gIGNhbnZhc0NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHIuQ0FOVkFTX0xBWUVSUzsgaSsrKSB7XG4gICAgY2FudmFzID0gZGF0YS5jYW52YXNlc1tpXTtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHIuQlVGRkVSX0NPVU5UOyBpKyspIHtcbiAgICBjYW52YXMgPSBkYXRhLmJ1ZmZlckNhbnZhc2VzW2ldO1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICB9XG4gIHIudGV4dHVyZU11bHQgPSAxO1xuICBpZiAocGl4ZWxSYXRpbyA8PSAxKSB7XG4gICAgY2FudmFzID0gZGF0YS5idWZmZXJDYW52YXNlc1tyLlRFWFRVUkVfQlVGRkVSXTtcbiAgICByLnRleHR1cmVNdWx0ID0gMjtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aCAqIHIudGV4dHVyZU11bHQ7XG4gICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHIudGV4dHVyZU11bHQ7XG4gIH1cbiAgci5jYW52YXNXaWR0aCA9IGNhbnZhc1dpZHRoO1xuICByLmNhbnZhc0hlaWdodCA9IGNhbnZhc0hlaWdodDtcbn07XG5DUnAkNC5yZW5kZXJUbyA9IGZ1bmN0aW9uIChjeHQsIHpvb20sIHBhbiwgcHhSYXRpbykge1xuICB0aGlzLnJlbmRlcih7XG4gICAgZm9yY2VkQ29udGV4dDogY3h0LFxuICAgIGZvcmNlZFpvb206IHpvb20sXG4gICAgZm9yY2VkUGFuOiBwYW4sXG4gICAgZHJhd0FsbExheWVyczogdHJ1ZSxcbiAgICBmb3JjZWRQeFJhdGlvOiBweFJhdGlvXG4gIH0pO1xufTtcbkNScCQ0LnJlbmRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHN0YXRpY0VtcHR5T2JqZWN0KCk7XG4gIHZhciBmb3JjZWRDb250ZXh0ID0gb3B0aW9ucy5mb3JjZWRDb250ZXh0O1xuICB2YXIgZHJhd0FsbExheWVycyA9IG9wdGlvbnMuZHJhd0FsbExheWVycztcbiAgdmFyIGRyYXdPbmx5Tm9kZUxheWVyID0gb3B0aW9ucy5kcmF3T25seU5vZGVMYXllcjtcbiAgdmFyIGZvcmNlZFpvb20gPSBvcHRpb25zLmZvcmNlZFpvb207XG4gIHZhciBmb3JjZWRQYW4gPSBvcHRpb25zLmZvcmNlZFBhbjtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgcGl4ZWxSYXRpbyA9IG9wdGlvbnMuZm9yY2VkUHhSYXRpbyA9PT0gdW5kZWZpbmVkID8gdGhpcy5nZXRQaXhlbFJhdGlvKCkgOiBvcHRpb25zLmZvcmNlZFB4UmF0aW87XG4gIHZhciBjeSA9IHIuY3k7XG4gIHZhciBkYXRhID0gci5kYXRhO1xuICB2YXIgbmVlZERyYXcgPSBkYXRhLmNhbnZhc05lZWRzUmVkcmF3O1xuICB2YXIgdGV4dHVyZURyYXcgPSByLnRleHR1cmVPblZpZXdwb3J0ICYmICFmb3JjZWRDb250ZXh0ICYmIChyLnBpbmNoaW5nIHx8IHIuaG92ZXJEYXRhLmRyYWdnaW5nIHx8IHIuc3dpcGVQYW5uaW5nIHx8IHIuZGF0YS53aGVlbFpvb21pbmcpO1xuICB2YXIgbW90aW9uQmx1ciA9IG9wdGlvbnMubW90aW9uQmx1ciAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tb3Rpb25CbHVyIDogci5tb3Rpb25CbHVyO1xuICB2YXIgbWJQeFJhdGlvID0gci5tb3Rpb25CbHVyUHhSYXRpbztcbiAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gIHZhciBpbk5vZGVEcmFnR2VzdHVyZSA9IHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcztcbiAgdmFyIGluQm94U2VsZWN0aW9uID0gci5ob3ZlckRhdGEuc2VsZWN0aW5nIHx8IHIudG91Y2hEYXRhLnNlbGVjdGluZyA/IHRydWUgOiBmYWxzZTtcbiAgbW90aW9uQmx1ciA9IG1vdGlvbkJsdXIgJiYgIWZvcmNlZENvbnRleHQgJiYgci5tb3Rpb25CbHVyRW5hYmxlZCAmJiAhaW5Cb3hTZWxlY3Rpb247XG4gIHZhciBtb3Rpb25CbHVyRmFkZUVmZmVjdCA9IG1vdGlvbkJsdXI7XG4gIGlmICghZm9yY2VkQ29udGV4dCkge1xuICAgIGlmIChyLnByZXZQeFJhdGlvICE9PSBwaXhlbFJhdGlvKSB7XG4gICAgICByLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpO1xuICAgICAgci5tYXRjaENhbnZhc1NpemUoci5jb250YWluZXIpO1xuICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICB9XG4gICAgci5wcmV2UHhSYXRpbyA9IHBpeGVsUmF0aW87XG4gIH1cbiAgaWYgKCFmb3JjZWRDb250ZXh0ICYmIHIubW90aW9uQmx1clRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQoci5tb3Rpb25CbHVyVGltZW91dCk7XG4gIH1cbiAgaWYgKG1vdGlvbkJsdXIpIHtcbiAgICBpZiAoci5tYkZyYW1lcyA9PSBudWxsKSB7XG4gICAgICByLm1iRnJhbWVzID0gMDtcbiAgICB9XG4gICAgci5tYkZyYW1lcysrO1xuICAgIGlmIChyLm1iRnJhbWVzIDwgMykge1xuICAgICAgLy8gbmVlZCBzZXZlcmFsIGZyYW1lcyBiZWZvcmUgZXZlbiBoaWdoIHF1YWxpdHkgbW90aW9uYmx1clxuICAgICAgbW90aW9uQmx1ckZhZGVFZmZlY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBnbyB0byBsb3dlciBxdWFsaXR5IGJsdXJyeSBmcmFtZXMgd2hlbiBzZXZlcmFsIG0vYiBmcmFtZXMgaGF2ZSBiZWVuIHJlbmRlcmVkIChhdm9pZHMgZmxhc2hpbmcpXG4gICAgaWYgKHIubWJGcmFtZXMgPiByLm1pbk1iTG93UXVhbEZyYW1lcykge1xuICAgICAgLy9yLmZ1bGxRdWFsaXR5TWIgPSBmYWxzZTtcbiAgICAgIHIubW90aW9uQmx1clB4UmF0aW8gPSByLm1iUHhSQmx1cnJ5O1xuICAgIH1cbiAgfVxuICBpZiAoci5jbGVhcmluZ01vdGlvbkJsdXIpIHtcbiAgICByLm1vdGlvbkJsdXJQeFJhdGlvID0gMTtcbiAgfVxuXG4gIC8vIGIvYyBkcmF3VG9Db250ZXh0KCkgbWF5IGJlIGFzeW5jIHcuci50LiByZWRyYXcoKSwga2VlcCB0cmFjayBvZiBsYXN0IHRleHR1cmUgZnJhbWVcbiAgLy8gYmVjYXVzZSBhIHJvZ3VlIGFzeW5jIHRleHR1cmUgZnJhbWUgd291bGQgY2xlYXIgbmVlZERyYXdcbiAgaWYgKHIudGV4dHVyZURyYXdMYXN0RnJhbWUgJiYgIXRleHR1cmVEcmF3KSB7XG4gICAgbmVlZERyYXdbci5OT0RFXSA9IHRydWU7XG4gICAgbmVlZERyYXdbci5TRUxFQ1RfQk9YXSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciBlZmZlY3RpdmVab29tID0gZm9yY2VkWm9vbSAhPT0gdW5kZWZpbmVkID8gZm9yY2VkWm9vbSA6IHpvb207XG4gIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgdmFyIGVmZmVjdGl2ZVBhbiA9IHtcbiAgICB4OiBwYW4ueCxcbiAgICB5OiBwYW4ueVxuICB9O1xuICB2YXIgdnAgPSB7XG4gICAgem9vbTogem9vbSxcbiAgICBwYW46IHtcbiAgICAgIHg6IHBhbi54LFxuICAgICAgeTogcGFuLnlcbiAgICB9XG4gIH07XG4gIHZhciBwcmV2VnAgPSByLnByZXZWaWV3cG9ydDtcbiAgdmFyIHZpZXdwb3J0SXNEaWZmID0gcHJldlZwID09PSB1bmRlZmluZWQgfHwgdnAuem9vbSAhPT0gcHJldlZwLnpvb20gfHwgdnAucGFuLnggIT09IHByZXZWcC5wYW4ueCB8fCB2cC5wYW4ueSAhPT0gcHJldlZwLnBhbi55O1xuXG4gIC8vIHdlIHdhbnQgdGhlIGxvdyBxdWFsaXR5IG1vdGlvbmJsdXIgb25seSB3aGVuIHRoZSB2aWV3cG9ydCBpcyBiZWluZyBtYW5pcHVsYXRlZCBldGMgKHdoZXJlIGl0J3Mgbm90IG5vdGljZWQpXG4gIGlmICghdmlld3BvcnRJc0RpZmYgJiYgIShpbk5vZGVEcmFnR2VzdHVyZSAmJiAhaGFzQ29tcG91bmROb2RlcykpIHtcbiAgICByLm1vdGlvbkJsdXJQeFJhdGlvID0gMTtcbiAgfVxuICBpZiAoZm9yY2VkUGFuKSB7XG4gICAgZWZmZWN0aXZlUGFuID0gZm9yY2VkUGFuO1xuICB9XG5cbiAgLy8gYXBwbHkgcGl4ZWwgcmF0aW9cblxuICBlZmZlY3RpdmVab29tICo9IHBpeGVsUmF0aW87XG4gIGVmZmVjdGl2ZVBhbi54ICo9IHBpeGVsUmF0aW87XG4gIGVmZmVjdGl2ZVBhbi55ICo9IHBpeGVsUmF0aW87XG4gIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICBmdW5jdGlvbiBtYmNsZWFyKGNvbnRleHQsIHgsIHksIHcsIGgpIHtcbiAgICB2YXIgZ2NvID0gY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcbiAgICByLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIHIubW90aW9uQmx1clRyYW5zcGFyZW5jeSk7XG4gICAgY29udGV4dC5maWxsUmVjdCh4LCB5LCB3LCBoKTtcbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgfVxuICBmdW5jdGlvbiBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIGNsZWFyKSB7XG4gICAgdmFyIGVQYW4sIGVab29tLCB3LCBoO1xuICAgIGlmICghci5jbGVhcmluZ01vdGlvbkJsdXIgJiYgKGNvbnRleHQgPT09IGRhdGEuYnVmZmVyQ29udGV4dHNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSB8fCBjb250ZXh0ID09PSBkYXRhLmJ1ZmZlckNvbnRleHRzW3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pKSB7XG4gICAgICBlUGFuID0ge1xuICAgICAgICB4OiBwYW4ueCAqIG1iUHhSYXRpbyxcbiAgICAgICAgeTogcGFuLnkgKiBtYlB4UmF0aW9cbiAgICAgIH07XG4gICAgICBlWm9vbSA9IHpvb20gKiBtYlB4UmF0aW87XG4gICAgICB3ID0gci5jYW52YXNXaWR0aCAqIG1iUHhSYXRpbztcbiAgICAgIGggPSByLmNhbnZhc0hlaWdodCAqIG1iUHhSYXRpbztcbiAgICB9IGVsc2Uge1xuICAgICAgZVBhbiA9IGVmZmVjdGl2ZVBhbjtcbiAgICAgIGVab29tID0gZWZmZWN0aXZlWm9vbTtcbiAgICAgIHcgPSByLmNhbnZhc1dpZHRoO1xuICAgICAgaCA9IHIuY2FudmFzSGVpZ2h0O1xuICAgIH1cbiAgICBjb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICBpZiAoY2xlYXIgPT09ICdtb3Rpb25CbHVyJykge1xuICAgICAgbWJjbGVhcihjb250ZXh0LCAwLCAwLCB3LCBoKTtcbiAgICB9IGVsc2UgaWYgKCFmb3JjZWRDb250ZXh0ICYmIChjbGVhciA9PT0gdW5kZWZpbmVkIHx8IGNsZWFyKSkge1xuICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgfVxuICAgIGlmICghZHJhd0FsbExheWVycykge1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoZVBhbi54LCBlUGFuLnkpO1xuICAgICAgY29udGV4dC5zY2FsZShlWm9vbSwgZVpvb20pO1xuICAgIH1cbiAgICBpZiAoZm9yY2VkUGFuKSB7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShmb3JjZWRQYW4ueCwgZm9yY2VkUGFuLnkpO1xuICAgIH1cbiAgICBpZiAoZm9yY2VkWm9vbSkge1xuICAgICAgY29udGV4dC5zY2FsZShmb3JjZWRab29tLCBmb3JjZWRab29tKTtcbiAgICB9XG4gIH1cbiAgaWYgKCF0ZXh0dXJlRHJhdykge1xuICAgIHIudGV4dHVyZURyYXdMYXN0RnJhbWUgPSBmYWxzZTtcbiAgfVxuICBpZiAodGV4dHVyZURyYXcpIHtcbiAgICByLnRleHR1cmVEcmF3TGFzdEZyYW1lID0gdHJ1ZTtcbiAgICBpZiAoIXIudGV4dHVyZUNhY2hlKSB7XG4gICAgICByLnRleHR1cmVDYWNoZSA9IHt9O1xuICAgICAgci50ZXh0dXJlQ2FjaGUuYmIgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpO1xuICAgICAgci50ZXh0dXJlQ2FjaGUudGV4dHVyZSA9IHIuZGF0YS5idWZmZXJDYW52YXNlc1tyLlRFWFRVUkVfQlVGRkVSXTtcbiAgICAgIHZhciBjeHQgPSByLmRhdGEuYnVmZmVyQ29udGV4dHNbci5URVhUVVJFX0JVRkZFUl07XG4gICAgICBjeHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgY3h0LmNsZWFyUmVjdCgwLCAwLCByLmNhbnZhc1dpZHRoICogci50ZXh0dXJlTXVsdCwgci5jYW52YXNIZWlnaHQgKiByLnRleHR1cmVNdWx0KTtcbiAgICAgIHIucmVuZGVyKHtcbiAgICAgICAgZm9yY2VkQ29udGV4dDogY3h0LFxuICAgICAgICBkcmF3T25seU5vZGVMYXllcjogdHJ1ZSxcbiAgICAgICAgZm9yY2VkUHhSYXRpbzogcGl4ZWxSYXRpbyAqIHIudGV4dHVyZU11bHRcbiAgICAgIH0pO1xuICAgICAgdmFyIHZwID0gci50ZXh0dXJlQ2FjaGUudmlld3BvcnQgPSB7XG4gICAgICAgIHpvb206IGN5Lnpvb20oKSxcbiAgICAgICAgcGFuOiBjeS5wYW4oKSxcbiAgICAgICAgd2lkdGg6IHIuY2FudmFzV2lkdGgsXG4gICAgICAgIGhlaWdodDogci5jYW52YXNIZWlnaHRcbiAgICAgIH07XG4gICAgICB2cC5tcGFuID0ge1xuICAgICAgICB4OiAoMCAtIHZwLnBhbi54KSAvIHZwLnpvb20sXG4gICAgICAgIHk6ICgwIC0gdnAucGFuLnkpIC8gdnAuem9vbVxuICAgICAgfTtcbiAgICB9XG4gICAgbmVlZERyYXdbci5EUkFHXSA9IGZhbHNlO1xuICAgIG5lZWREcmF3W3IuTk9ERV0gPSBmYWxzZTtcbiAgICB2YXIgY29udGV4dCA9IGRhdGEuY29udGV4dHNbci5OT0RFXTtcbiAgICB2YXIgdGV4dHVyZSA9IHIudGV4dHVyZUNhY2hlLnRleHR1cmU7XG4gICAgdmFyIHZwID0gci50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgaWYgKG1vdGlvbkJsdXIpIHtcbiAgICAgIG1iY2xlYXIoY29udGV4dCwgMCwgMCwgdnAud2lkdGgsIHZwLmhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgIH1cbiAgICB2YXIgb3V0c2lkZUJnQ29sb3IgPSBzdHlsZS5jb3JlKCdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InKS52YWx1ZTtcbiAgICB2YXIgb3V0c2lkZUJnT3BhY2l0eSA9IHN0eWxlLmNvcmUoJ291dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5JykudmFsdWU7XG4gICAgci5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBvdXRzaWRlQmdDb2xvclswXSwgb3V0c2lkZUJnQ29sb3JbMV0sIG91dHNpZGVCZ0NvbG9yWzJdLCBvdXRzaWRlQmdPcGFjaXR5KTtcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHNldENvbnRleHRUcmFuc2Zvcm0oY29udGV4dCwgZmFsc2UpO1xuICAgIGNvbnRleHQuY2xlYXJSZWN0KHZwLm1wYW4ueCwgdnAubXBhbi55LCB2cC53aWR0aCAvIHZwLnpvb20gLyBwaXhlbFJhdGlvLCB2cC5oZWlnaHQgLyB2cC56b29tIC8gcGl4ZWxSYXRpbyk7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UodGV4dHVyZSwgdnAubXBhbi54LCB2cC5tcGFuLnksIHZwLndpZHRoIC8gdnAuem9vbSAvIHBpeGVsUmF0aW8sIHZwLmhlaWdodCAvIHZwLnpvb20gLyBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIGlmIChyLnRleHR1cmVPblZpZXdwb3J0ICYmICFmb3JjZWRDb250ZXh0KSB7XG4gICAgLy8gY2xlYXIgdGhlIGNhY2hlIHNpbmNlIHdlIGRvbid0IG5lZWQgaXRcbiAgICByLnRleHR1cmVDYWNoZSA9IG51bGw7XG4gIH1cbiAgdmFyIGV4dGVudCA9IGN5LmV4dGVudCgpO1xuICB2YXIgdnBNYW5pcCA9IHIucGluY2hpbmcgfHwgci5ob3ZlckRhdGEuZHJhZ2dpbmcgfHwgci5zd2lwZVBhbm5pbmcgfHwgci5kYXRhLndoZWVsWm9vbWluZyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgfHwgci5jeS5hbmltYXRlZCgpO1xuICB2YXIgaGlkZUVkZ2VzID0gci5oaWRlRWRnZXNPblZpZXdwb3J0ICYmIHZwTWFuaXA7XG4gIHZhciBuZWVkTWJDbGVhciA9IFtdO1xuICBuZWVkTWJDbGVhcltyLk5PREVdID0gIW5lZWREcmF3W3IuTk9ERV0gJiYgbW90aW9uQmx1ciAmJiAhci5jbGVhcmVkRm9yTW90aW9uQmx1cltyLk5PREVdIHx8IHIuY2xlYXJpbmdNb3Rpb25CbHVyO1xuICBpZiAobmVlZE1iQ2xlYXJbci5OT0RFXSkge1xuICAgIHIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5OT0RFXSA9IHRydWU7XG4gIH1cbiAgbmVlZE1iQ2xlYXJbci5EUkFHXSA9ICFuZWVkRHJhd1tyLkRSQUddICYmIG1vdGlvbkJsdXIgJiYgIXIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5EUkFHXSB8fCByLmNsZWFyaW5nTW90aW9uQmx1cjtcbiAgaWYgKG5lZWRNYkNsZWFyW3IuRFJBR10pIHtcbiAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuRFJBR10gPSB0cnVlO1xuICB9XG4gIGlmIChuZWVkRHJhd1tyLk5PREVdIHx8IGRyYXdBbGxMYXllcnMgfHwgZHJhd09ubHlOb2RlTGF5ZXIgfHwgbmVlZE1iQ2xlYXJbci5OT0RFXSkge1xuICAgIHZhciB1c2VCdWZmZXIgPSBtb3Rpb25CbHVyICYmICFuZWVkTWJDbGVhcltyLk5PREVdICYmIG1iUHhSYXRpbyAhPT0gMTtcbiAgICB2YXIgY29udGV4dCA9IGZvcmNlZENvbnRleHQgfHwgKHVzZUJ1ZmZlciA/IHIuZGF0YS5idWZmZXJDb250ZXh0c1tyLk1PVElPTkJMVVJfQlVGRkVSX05PREVdIDogZGF0YS5jb250ZXh0c1tyLk5PREVdKTtcbiAgICB2YXIgY2xlYXIgPSBtb3Rpb25CbHVyICYmICF1c2VCdWZmZXIgPyAnbW90aW9uQmx1cicgOiB1bmRlZmluZWQ7XG4gICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0LCBjbGVhcik7XG4gICAgaWYgKGhpZGVFZGdlcykge1xuICAgICAgci5kcmF3Q2FjaGVkTm9kZXMoY29udGV4dCwgZWxlcy5ub25kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByLmRyYXdMYXllcmVkRWxlbWVudHMoY29udGV4dCwgZWxlcy5ub25kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH1cbiAgICBpZiAoci5kZWJ1Zykge1xuICAgICAgci5kcmF3RGVidWdQb2ludHMoY29udGV4dCwgZWxlcy5ub25kcmFnKTtcbiAgICB9XG4gICAgaWYgKCFkcmF3QWxsTGF5ZXJzICYmICFtb3Rpb25CbHVyKSB7XG4gICAgICBuZWVkRHJhd1tyLk5PREVdID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICghZHJhd09ubHlOb2RlTGF5ZXIgJiYgKG5lZWREcmF3W3IuRFJBR10gfHwgZHJhd0FsbExheWVycyB8fCBuZWVkTWJDbGVhcltyLkRSQUddKSkge1xuICAgIHZhciB1c2VCdWZmZXIgPSBtb3Rpb25CbHVyICYmICFuZWVkTWJDbGVhcltyLkRSQUddICYmIG1iUHhSYXRpbyAhPT0gMTtcbiAgICB2YXIgY29udGV4dCA9IGZvcmNlZENvbnRleHQgfHwgKHVzZUJ1ZmZlciA/IHIuZGF0YS5idWZmZXJDb250ZXh0c1tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddIDogZGF0YS5jb250ZXh0c1tyLkRSQUddKTtcbiAgICBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIG1vdGlvbkJsdXIgJiYgIXVzZUJ1ZmZlciA/ICdtb3Rpb25CbHVyJyA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKGhpZGVFZGdlcykge1xuICAgICAgci5kcmF3Q2FjaGVkTm9kZXMoY29udGV4dCwgZWxlcy5kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByLmRyYXdDYWNoZWRFbGVtZW50cyhjb250ZXh0LCBlbGVzLmRyYWcsIHBpeGVsUmF0aW8sIGV4dGVudCk7XG4gICAgfVxuICAgIGlmIChyLmRlYnVnKSB7XG4gICAgICByLmRyYXdEZWJ1Z1BvaW50cyhjb250ZXh0LCBlbGVzLmRyYWcpO1xuICAgIH1cbiAgICBpZiAoIWRyYXdBbGxMYXllcnMgJiYgIW1vdGlvbkJsdXIpIHtcbiAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKHIuc2hvd0ZwcyB8fCAhZHJhd09ubHlOb2RlTGF5ZXIgJiYgbmVlZERyYXdbci5TRUxFQ1RfQk9YXSAmJiAhZHJhd0FsbExheWVycykge1xuICAgIHZhciBjb250ZXh0ID0gZm9yY2VkQ29udGV4dCB8fCBkYXRhLmNvbnRleHRzW3IuU0VMRUNUX0JPWF07XG4gICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0KTtcbiAgICBpZiAoci5zZWxlY3Rpb25bNF0gPT0gMSAmJiAoci5ob3ZlckRhdGEuc2VsZWN0aW5nIHx8IHIudG91Y2hEYXRhLnNlbGVjdGluZykpIHtcbiAgICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgICB2YXIgYm9yZGVyV2lkdGggPSBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCcpLnZhbHVlIC8gem9vbTtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGg7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMF0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMV0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWNvbG9yJykudmFsdWVbMl0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LW9wYWNpdHknKS52YWx1ZSArICcpJztcbiAgICAgIGNvbnRleHQuZmlsbFJlY3Qoci5zZWxlY3Rpb25bMF0sIHIuc2VsZWN0aW9uWzFdLCByLnNlbGVjdGlvblsyXSAtIHIuc2VsZWN0aW9uWzBdLCByLnNlbGVjdGlvblszXSAtIHIuc2VsZWN0aW9uWzFdKTtcbiAgICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHtcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcicpLnZhbHVlWzBdICsgJywnICsgc3R5bGUuY29yZSgnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InKS52YWx1ZVsxXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJykudmFsdWVbMl0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LW9wYWNpdHknKS52YWx1ZSArICcpJztcbiAgICAgICAgY29udGV4dC5zdHJva2VSZWN0KHIuc2VsZWN0aW9uWzBdLCByLnNlbGVjdGlvblsxXSwgci5zZWxlY3Rpb25bMl0gLSByLnNlbGVjdGlvblswXSwgci5zZWxlY3Rpb25bM10gLSByLnNlbGVjdGlvblsxXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmJnQWN0aXZlUG9zaXN0aW9uICYmICFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gICAgICB2YXIgcG9zID0gZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbjtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1jb2xvcicpLnZhbHVlWzBdICsgJywnICsgc3R5bGUuY29yZSgnYWN0aXZlLWJnLWNvbG9yJykudmFsdWVbMV0gKyAnLCcgKyBzdHlsZS5jb3JlKCdhY3RpdmUtYmctY29sb3InKS52YWx1ZVsyXSArICcsJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1vcGFjaXR5JykudmFsdWUgKyAnKSc7XG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgY29udGV4dC5hcmMocG9zLngsIHBvcy55LCBzdHlsZS5jb3JlKCdhY3RpdmUtYmctc2l6ZScpLnBmVmFsdWUgLyB6b29tLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gICAgdmFyIHRpbWVUb1JlbmRlciA9IHIubGFzdFJlZHJhd1RpbWU7XG4gICAgaWYgKHIuc2hvd0ZwcyAmJiB0aW1lVG9SZW5kZXIpIHtcbiAgICAgIHRpbWVUb1JlbmRlciA9IE1hdGgucm91bmQodGltZVRvUmVuZGVyKTtcbiAgICAgIHZhciBmcHMgPSBNYXRoLnJvdW5kKDEwMDAgLyB0aW1lVG9SZW5kZXIpO1xuICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgICAgY29udGV4dC5maWxsVGV4dCgnMSBmcmFtZSA9ICcgKyB0aW1lVG9SZW5kZXIgKyAnIG1zID0gJyArIGZwcyArICcgZnBzJywgMCwgMjApO1xuICAgICAgdmFyIG1heEZwcyA9IDYwO1xuICAgICAgY29udGV4dC5zdHJva2VSZWN0KDAsIDMwLCAyNTAsIDIwKTtcbiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMzAsIDI1MCAqIE1hdGgubWluKGZwcyAvIG1heEZwcywgMSksIDIwKTtcbiAgICB9XG4gICAgaWYgKCFkcmF3QWxsTGF5ZXJzKSB7XG4gICAgICBuZWVkRHJhd1tyLlNFTEVDVF9CT1hdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gbW90aW9uYmx1cjogYmxpdCByZW5kZXJlZCBibHVycnkgZnJhbWVzXG4gIGlmIChtb3Rpb25CbHVyICYmIG1iUHhSYXRpbyAhPT0gMSkge1xuICAgIHZhciBjeHROb2RlID0gZGF0YS5jb250ZXh0c1tyLk5PREVdO1xuICAgIHZhciB0eHROb2RlID0gci5kYXRhLmJ1ZmZlckNhbnZhc2VzW3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV07XG4gICAgdmFyIGN4dERyYWcgPSBkYXRhLmNvbnRleHRzW3IuRFJBR107XG4gICAgdmFyIHR4dERyYWcgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTtcbiAgICB2YXIgZHJhd01vdGlvbkJsdXIgPSBmdW5jdGlvbiBkcmF3TW90aW9uQmx1cihjeHQsIHR4dCwgbmVlZENsZWFyKSB7XG4gICAgICBjeHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgaWYgKG5lZWRDbGVhciB8fCAhbW90aW9uQmx1ckZhZGVFZmZlY3QpIHtcbiAgICAgICAgY3h0LmNsZWFyUmVjdCgwLCAwLCByLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYmNsZWFyKGN4dCwgMCwgMCwgci5jYW52YXNXaWR0aCwgci5jYW52YXNIZWlnaHQpO1xuICAgICAgfVxuICAgICAgdmFyIHB4ciA9IG1iUHhSYXRpbztcbiAgICAgIGN4dC5kcmF3SW1hZ2UodHh0LFxuICAgICAgLy8gaW1nXG4gICAgICAwLCAwLFxuICAgICAgLy8gc3gsIHN5XG4gICAgICByLmNhbnZhc1dpZHRoICogcHhyLCByLmNhbnZhc0hlaWdodCAqIHB4cixcbiAgICAgIC8vIHN3LCBzaFxuICAgICAgMCwgMCxcbiAgICAgIC8vIHgsIHlcbiAgICAgIHIuY2FudmFzV2lkdGgsIHIuY2FudmFzSGVpZ2h0IC8vIHcsIGhcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlmIChuZWVkRHJhd1tyLk5PREVdIHx8IG5lZWRNYkNsZWFyW3IuTk9ERV0pIHtcbiAgICAgIGRyYXdNb3Rpb25CbHVyKGN4dE5vZGUsIHR4dE5vZGUsIG5lZWRNYkNsZWFyW3IuTk9ERV0pO1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmVlZERyYXdbci5EUkFHXSB8fCBuZWVkTWJDbGVhcltyLkRSQUddKSB7XG4gICAgICBkcmF3TW90aW9uQmx1cihjeHREcmFnLCB0eHREcmFnLCBuZWVkTWJDbGVhcltyLkRSQUddKTtcbiAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgci5wcmV2Vmlld3BvcnQgPSB2cDtcbiAgaWYgKHIuY2xlYXJpbmdNb3Rpb25CbHVyKSB7XG4gICAgci5jbGVhcmluZ01vdGlvbkJsdXIgPSBmYWxzZTtcbiAgICByLm1vdGlvbkJsdXJDbGVhcmVkID0gdHJ1ZTtcbiAgICByLm1vdGlvbkJsdXIgPSB0cnVlO1xuICB9XG4gIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgci5tb3Rpb25CbHVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgci5tb3Rpb25CbHVyVGltZW91dCA9IG51bGw7XG4gICAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuTk9ERV0gPSBmYWxzZTtcbiAgICAgIHIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5EUkFHXSA9IGZhbHNlO1xuICAgICAgci5tb3Rpb25CbHVyID0gZmFsc2U7XG4gICAgICByLmNsZWFyaW5nTW90aW9uQmx1ciA9ICF0ZXh0dXJlRHJhdztcbiAgICAgIHIubWJGcmFtZXMgPSAwO1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IHRydWU7XG4gICAgICBuZWVkRHJhd1tyLkRSQUddID0gdHJ1ZTtcbiAgICAgIHIucmVkcmF3KCk7XG4gICAgfSwgbW90aW9uQmx1ckRlbGF5KTtcbiAgfVxuICBpZiAoIWZvcmNlZENvbnRleHQpIHtcbiAgICBjeS5lbWl0KCdyZW5kZXInKTtcbiAgfVxufTtcblxudmFyIENScCQzID0ge307XG5cbi8vIEBPIFBvbHlnb24gZHJhd2luZ1xuQ1JwJDMuZHJhd1BvbHlnb25QYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cykge1xuICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gIHZhciBoYWxmSCA9IGhlaWdodCAvIDI7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgY29udGV4dC5tb3ZlVG8oeCArIGhhbGZXICogcG9pbnRzWzBdLCB5ICsgaGFsZkggKiBwb2ludHNbMV0pO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZlcgKiBwb2ludHNbaSAqIDJdLCB5ICsgaGFsZkggKiBwb2ludHNbaSAqIDIgKyAxXSk7XG4gIH1cbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Um91bmRQb2x5Z29uUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpIHtcbiAgY29ybmVycy5mb3JFYWNoKGZ1bmN0aW9uIChjb3JuZXIpIHtcbiAgICByZXR1cm4gZHJhd1ByZXBhcmVkUm91bmRDb3JuZXIoY29udGV4dCwgY29ybmVyKTtcbiAgfSk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vLyBSb3VuZCByZWN0YW5nbGUgZHJhd2luZ1xuQ1JwJDMuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgY29ybmVyUmFkaXVzID0gcmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IE1hdGgubWluKHJhZGl1cywgaGFsZkhlaWdodCwgaGFsZldpZHRoKTtcbiAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IGF0IHRvcCBtaWRkbGVcbiAgY29udGV4dC5tb3ZlVG8oeCwgeSAtIGhhbGZIZWlnaHQpO1xuICAvLyBBcmMgZnJvbSBtaWRkbGUgdG9wIHRvIHJpZ2h0IHNpZGVcbiAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCwgeCArIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgLy8gQXJjIGZyb20gcmlnaHQgc2lkZSB0byBib3R0b21cbiAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCwgeSArIGhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyk7XG4gIC8vIEFyYyBmcm9tIGJvdHRvbSB0byBsZWZ0IHNpZGVcbiAgY29udGV4dC5hcmNUbyh4IC0gaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCAtIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgLy8gQXJjIGZyb20gbGVmdCBzaWRlIHRvIHRvcEJvcmRlclxuICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0LCB4LCB5IC0gaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgLy8gSm9pbiBsaW5lXG4gIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSByYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIDogcmFkaXVzO1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG5cbiAgLy8gU3RhcnQgYXQgdG9wIG1pZGRsZVxuICBjb250ZXh0Lm1vdmVUbyh4LCB5IC0gaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCwgeSk7XG4gIGNvbnRleHQuYXJjVG8oeCArIGhhbGZXaWR0aCwgeSArIGhhbGZIZWlnaHQsIHgsIHkgKyBoYWxmSGVpZ2h0LCBjb3JuZXJSYWRpdXMpO1xuICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0LCB4IC0gaGFsZldpZHRoLCB5LCBjb3JuZXJSYWRpdXMpO1xuICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgY29ybmVyTGVuZ3RoID0gY29ybmVycyA9PT0gJ2F1dG8nID8gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkgOiBjb3JuZXJzO1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG4gIGNvbnRleHQubW92ZVRvKHggLSBoYWxmV2lkdGggKyBjb3JuZXJMZW5ndGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCAtIGNvcm5lckxlbmd0aCwgeSAtIGhhbGZIZWlnaHQpO1xuICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCArIGNvcm5lckxlbmd0aCk7XG4gIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCAtIGNvcm5lckxlbmd0aCwgeSArIGhhbGZIZWlnaHQpO1xuICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoICsgY29ybmVyTGVuZ3RoLCB5ICsgaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgY29udGV4dC5saW5lVG8oeCAtIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJMZW5ndGgpO1xuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcbkNScCQzLmRyYXdCYXJyZWxQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgeEJlZ2luID0geCAtIGhhbGZXaWR0aDtcbiAgdmFyIHhFbmQgPSB4ICsgaGFsZldpZHRoO1xuICB2YXIgeUJlZ2luID0geSAtIGhhbGZIZWlnaHQ7XG4gIHZhciB5RW5kID0geSArIGhhbGZIZWlnaHQ7XG4gIHZhciBiYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICB2YXIgd09mZnNldCA9IGJhcnJlbEN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuICB2YXIgaE9mZnNldCA9IGJhcnJlbEN1cnZlQ29uc3RhbnRzLmhlaWdodE9mZnNldDtcbiAgdmFyIGN0cmxQdFhPZmZzZXQgPSBiYXJyZWxDdXJ2ZUNvbnN0YW50cy5jdHJsUHRPZmZzZXRQY3QgKiB3T2Zmc2V0O1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG4gIGNvbnRleHQubW92ZVRvKHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gIGNvbnRleHQubGluZVRvKHhCZWdpbiwgeUVuZCAtIGhPZmZzZXQpO1xuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEJlZ2luICsgY3RybFB0WE9mZnNldCwgeUVuZCwgeEJlZ2luICsgd09mZnNldCwgeUVuZCk7XG4gIGNvbnRleHQubGluZVRvKHhFbmQgLSB3T2Zmc2V0LCB5RW5kKTtcbiAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHhFbmQgLSBjdHJsUHRYT2Zmc2V0LCB5RW5kLCB4RW5kLCB5RW5kIC0gaE9mZnNldCk7XG4gIGNvbnRleHQubGluZVRvKHhFbmQsIHlCZWdpbiArIGhPZmZzZXQpO1xuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEVuZCAtIHdPZmZzZXQsIHlCZWdpbik7XG4gIGNvbnRleHQubGluZVRvKHhCZWdpbiArIHdPZmZzZXQsIHlCZWdpbik7XG4gIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyh4QmVnaW4gKyBjdHJsUHRYT2Zmc2V0LCB5QmVnaW4sIHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xudmFyIHNpbjAgPSBNYXRoLnNpbigwKTtcbnZhciBjb3MwID0gTWF0aC5jb3MoMCk7XG52YXIgc2luID0ge307XG52YXIgY29zID0ge307XG52YXIgZWxsaXBzZVN0ZXBTaXplID0gTWF0aC5QSSAvIDQwO1xuZm9yICh2YXIgaSA9IDAgKiBNYXRoLlBJOyBpIDwgMiAqIE1hdGguUEk7IGkgKz0gZWxsaXBzZVN0ZXBTaXplKSB7XG4gIHNpbltpXSA9IE1hdGguc2luKGkpO1xuICBjb3NbaV0gPSBNYXRoLmNvcyhpKTtcbn1cbkNScCQzLmRyYXdFbGxpcHNlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgaWYgKGNvbnRleHQuZWxsaXBzZSkge1xuICAgIGNvbnRleHQuZWxsaXBzZShjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIsIDAsIDAsIDIgKiBNYXRoLlBJKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgeFBvcywgeVBvcztcbiAgICB2YXIgcncgPSB3aWR0aCAvIDI7XG4gICAgdmFyIHJoID0gaGVpZ2h0IC8gMjtcbiAgICBmb3IgKHZhciBpID0gMCAqIE1hdGguUEk7IGkgPCAyICogTWF0aC5QSTsgaSArPSBlbGxpcHNlU3RlcFNpemUpIHtcbiAgICAgIHhQb3MgPSBjZW50ZXJYIC0gcncgKiBzaW5baV0gKiBzaW4wICsgcncgKiBjb3NbaV0gKiBjb3MwO1xuICAgICAgeVBvcyA9IGNlbnRlclkgKyByaCAqIGNvc1tpXSAqIHNpbjAgKyByaCAqIHNpbltpXSAqIGNvczA7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4UG9zLCB5UG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyogZ2xvYmFsIGF0b2IsIEFycmF5QnVmZmVyLCBVaW50OEFycmF5LCBCbG9iICovXG52YXIgQ1JwJDIgPSB7fTtcbkNScCQyLmNyZWF0ZUJ1ZmZlciA9IGZ1bmN0aW9uICh3LCBoKSB7XG4gIHZhciBidWZmZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICBidWZmZXIud2lkdGggPSB3O1xuICBidWZmZXIuaGVpZ2h0ID0gaDtcbiAgcmV0dXJuIFtidWZmZXIsIGJ1ZmZlci5nZXRDb250ZXh0KCcyZCcpXTtcbn07XG5DUnAkMi5idWZmZXJDYW52YXNJbWFnZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3k7XG4gIHZhciBlbGVzID0gY3kubXV0YWJsZUVsZW1lbnRzKCk7XG4gIHZhciBiYiA9IGVsZXMuYm91bmRpbmdCb3goKTtcbiAgdmFyIGN0clJlY3QgPSB0aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgdmFyIHdpZHRoID0gb3B0aW9ucy5mdWxsID8gTWF0aC5jZWlsKGJiLncpIDogY3RyUmVjdFsyXTtcbiAgdmFyIGhlaWdodCA9IG9wdGlvbnMuZnVsbCA/IE1hdGguY2VpbChiYi5oKSA6IGN0clJlY3RbM107XG4gIHZhciBzcGVjZE1heERpbXMgPSBudW1iZXIkMShvcHRpb25zLm1heFdpZHRoKSB8fCBudW1iZXIkMShvcHRpb25zLm1heEhlaWdodCk7XG4gIHZhciBweFJhdGlvID0gdGhpcy5nZXRQaXhlbFJhdGlvKCk7XG4gIHZhciBzY2FsZSA9IDE7XG4gIGlmIChvcHRpb25zLnNjYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICB3aWR0aCAqPSBvcHRpb25zLnNjYWxlO1xuICAgIGhlaWdodCAqPSBvcHRpb25zLnNjYWxlO1xuICAgIHNjYWxlID0gb3B0aW9ucy5zY2FsZTtcbiAgfSBlbHNlIGlmIChzcGVjZE1heERpbXMpIHtcbiAgICB2YXIgbWF4U2NhbGVXID0gSW5maW5pdHk7XG4gICAgdmFyIG1heFNjYWxlSCA9IEluZmluaXR5O1xuICAgIGlmIChudW1iZXIkMShvcHRpb25zLm1heFdpZHRoKSkge1xuICAgICAgbWF4U2NhbGVXID0gc2NhbGUgKiBvcHRpb25zLm1heFdpZHRoIC8gd2lkdGg7XG4gICAgfVxuICAgIGlmIChudW1iZXIkMShvcHRpb25zLm1heEhlaWdodCkpIHtcbiAgICAgIG1heFNjYWxlSCA9IHNjYWxlICogb3B0aW9ucy5tYXhIZWlnaHQgLyBoZWlnaHQ7XG4gICAgfVxuICAgIHNjYWxlID0gTWF0aC5taW4obWF4U2NhbGVXLCBtYXhTY2FsZUgpO1xuICAgIHdpZHRoICo9IHNjYWxlO1xuICAgIGhlaWdodCAqPSBzY2FsZTtcbiAgfVxuICBpZiAoIXNwZWNkTWF4RGltcykge1xuICAgIHdpZHRoICo9IHB4UmF0aW87XG4gICAgaGVpZ2h0ICo9IHB4UmF0aW87XG4gICAgc2NhbGUgKj0gcHhSYXRpbztcbiAgfVxuICB2YXIgYnVmZkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgYnVmZkNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICBidWZmQ2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgYnVmZkNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgYnVmZkNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICB2YXIgYnVmZkN4dCA9IGJ1ZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAvLyBSYXN0ZXJpemUgdGhlIGxheWVycywgYnV0IG9ubHkgaWYgY29udGFpbmVyIGhhcyBub256ZXJvIHNpemVcbiAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7XG4gICAgYnVmZkN4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgYnVmZkN4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuICAgIHZhciB6c29ydGVkRWxlcyA9IHRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtcbiAgICBpZiAob3B0aW9ucy5mdWxsKSB7XG4gICAgICAvLyBkcmF3IHRoZSBmdWxsIGJvdW5kcyBvZiB0aGUgZ3JhcGhcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKC1iYi54MSAqIHNjYWxlLCAtYmIueTEgKiBzY2FsZSk7XG4gICAgICBidWZmQ3h0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICB0aGlzLmRyYXdFbGVtZW50cyhidWZmQ3h0LCB6c29ydGVkRWxlcyk7XG4gICAgICBidWZmQ3h0LnNjYWxlKDEgLyBzY2FsZSwgMSAvIHNjYWxlKTtcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKGJiLngxICogc2NhbGUsIGJiLnkxICogc2NhbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkcmF3IHRoZSBjdXJyZW50IHZpZXdcbiAgICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICAgIHZhciB0cmFuc2xhdGlvbiA9IHtcbiAgICAgICAgeDogcGFuLnggKiBzY2FsZSxcbiAgICAgICAgeTogcGFuLnkgKiBzY2FsZVxuICAgICAgfTtcbiAgICAgIHNjYWxlICo9IGN5Lnpvb20oKTtcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnkpO1xuICAgICAgYnVmZkN4dC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuICAgICAgdGhpcy5kcmF3RWxlbWVudHMoYnVmZkN4dCwgenNvcnRlZEVsZXMpO1xuICAgICAgYnVmZkN4dC5zY2FsZSgxIC8gc2NhbGUsIDEgLyBzY2FsZSk7XG4gICAgICBidWZmQ3h0LnRyYW5zbGF0ZSgtdHJhbnNsYXRpb24ueCwgLXRyYW5zbGF0aW9uLnkpO1xuICAgIH1cblxuICAgIC8vIG5lZWQgdG8gZmlsbCBiZyBhdCBlbmQgbGlrZSB0aGlzIGluIG9yZGVyIHRvIGZpbGwgY2xlYXJlZCB0cmFuc3BhcmVudCBwaXhlbHMgaW4ganBnc1xuICAgIGlmIChvcHRpb25zLmJnKSB7XG4gICAgICBidWZmQ3h0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdmVyJztcbiAgICAgIGJ1ZmZDeHQuZmlsbFN0eWxlID0gb3B0aW9ucy5iZztcbiAgICAgIGJ1ZmZDeHQucmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGJ1ZmZDeHQuZmlsbCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnVmZkNhbnZhcztcbn07XG5mdW5jdGlvbiBiNjRUb0Jsb2IoYjY0LCBtaW1lVHlwZSkge1xuICB2YXIgYnl0ZXMgPSBhdG9iKGI2NCk7XG4gIHZhciBidWZmID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzLmxlbmd0aCk7XG4gIHZhciBidWZmVWludDggPSBuZXcgVWludDhBcnJheShidWZmKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgIGJ1ZmZVaW50OFtpXSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBCbG9iKFtidWZmXSwge1xuICAgIHR5cGU6IG1pbWVUeXBlXG4gIH0pO1xufVxuZnVuY3Rpb24gYjY0VXJpVG9CNjQoYjY0dXJpKSB7XG4gIHZhciBpID0gYjY0dXJpLmluZGV4T2YoJywnKTtcbiAgcmV0dXJuIGI2NHVyaS5zdWJzdHIoaSArIDEpO1xufVxuZnVuY3Rpb24gb3V0cHV0KG9wdGlvbnMsIGNhbnZhcywgbWltZVR5cGUpIHtcbiAgdmFyIGdldEI2NFVyaSA9IGZ1bmN0aW9uIGdldEI2NFVyaSgpIHtcbiAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTChtaW1lVHlwZSwgb3B0aW9ucy5xdWFsaXR5KTtcbiAgfTtcbiAgc3dpdGNoIChvcHRpb25zLm91dHB1dCkge1xuICAgIGNhc2UgJ2Jsb2ItcHJvbWlzZSc6XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FudmFzLnRvQmxvYihmdW5jdGlvbiAoYmxvYikge1xuICAgICAgICAgICAgaWYgKGJsb2IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXNvbHZlKGJsb2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIG1pbWVUeXBlLCBvcHRpb25zLnF1YWxpdHkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgY2FzZSAnYmxvYic6XG4gICAgICByZXR1cm4gYjY0VG9CbG9iKGI2NFVyaVRvQjY0KGdldEI2NFVyaSgpKSwgbWltZVR5cGUpO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICByZXR1cm4gYjY0VXJpVG9CNjQoZ2V0QjY0VXJpKCkpO1xuICAgIGNhc2UgJ2Jhc2U2NHVyaSc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBnZXRCNjRVcmkoKTtcbiAgfVxufVxuQ1JwJDIucG5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG91dHB1dChvcHRpb25zLCB0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKG9wdGlvbnMpLCAnaW1hZ2UvcG5nJyk7XG59O1xuQ1JwJDIuanBnID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG91dHB1dChvcHRpb25zLCB0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKG9wdGlvbnMpLCAnaW1hZ2UvanBlZycpO1xufTtcblxudmFyIENScCQxID0ge307XG5DUnAkMS5ub2RlU2hhcGVJbXBsID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBvaW50cywgY29ybmVycykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdlbGxpcHNlJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdFbGxpcHNlUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMpO1xuICAgIGNhc2UgJ3JvdW5kLXBvbHlnb24nOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzLCBjb3JuZXJzKTtcbiAgICBjYXNlICdyb3VuZHJlY3RhbmdsZSc6XG4gICAgY2FzZSAncm91bmQtcmVjdGFuZ2xlJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVycyk7XG4gICAgY2FzZSAnY3V0cmVjdGFuZ2xlJzpcbiAgICBjYXNlICdjdXQtcmVjdGFuZ2xlJzpcbiAgICAgIHJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBvaW50cywgY29ybmVycyk7XG4gICAgY2FzZSAnYm90dG9tcm91bmRyZWN0YW5nbGUnOlxuICAgIGNhc2UgJ2JvdHRvbS1yb3VuZC1yZWN0YW5nbGUnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBjb3JuZXJzKTtcbiAgICBjYXNlICdiYXJyZWwnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd0JhcnJlbFBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gIH1cbn07XG5cbnZhciBDUiA9IENhbnZhc1JlbmRlcmVyO1xudmFyIENScCA9IENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZTtcbkNScC5DQU5WQVNfTEFZRVJTID0gMztcbi8vXG5DUnAuU0VMRUNUX0JPWCA9IDA7XG5DUnAuRFJBRyA9IDE7XG5DUnAuTk9ERSA9IDI7XG5DUnAuQlVGRkVSX0NPVU5UID0gMztcbi8vXG5DUnAuVEVYVFVSRV9CVUZGRVIgPSAwO1xuQ1JwLk1PVElPTkJMVVJfQlVGRkVSX05PREUgPSAxO1xuQ1JwLk1PVElPTkJMVVJfQlVGRkVSX0RSQUcgPSAyO1xuZnVuY3Rpb24gQ2FudmFzUmVuZGVyZXIob3B0aW9ucykge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSByLmN5LndpbmRvdygpO1xuICB2YXIgZG9jdW1lbnQgPSBjb250YWluZXJXaW5kb3cuZG9jdW1lbnQ7XG4gIHIuZGF0YSA9IHtcbiAgICBjYW52YXNlczogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICBjb250ZXh0czogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICBjYW52YXNOZWVkc1JlZHJhdzogbmV3IEFycmF5KENScC5DQU5WQVNfTEFZRVJTKSxcbiAgICBidWZmZXJDYW52YXNlczogbmV3IEFycmF5KENScC5CVUZGRVJfQ09VTlQpLFxuICAgIGJ1ZmZlckNvbnRleHRzOiBuZXcgQXJyYXkoQ1JwLkNBTlZBU19MQVlFUlMpXG4gIH07XG4gIHZhciB0YXBIbE9mZkF0dHIgPSAnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJztcbiAgdmFyIHRhcEhsT2ZmU3R5bGUgPSAncmdiYSgwLDAsMCwwKSc7XG4gIHIuZGF0YS5jYW52YXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICB2YXIgY29udGFpbmVyU3R5bGUgPSByLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlO1xuICByLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW3RhcEhsT2ZmQXR0cl0gPSB0YXBIbE9mZlN0eWxlO1xuICBjb250YWluZXJTdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gIGNvbnRhaW5lclN0eWxlLnpJbmRleCA9ICcwJztcbiAgY29udGFpbmVyU3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMuY3kuY29udGFpbmVyKCk7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChyLmRhdGEuY2FudmFzQ29udGFpbmVyKTtcbiAgY29udGFpbmVyLnN0eWxlW3RhcEhsT2ZmQXR0cl0gPSB0YXBIbE9mZlN0eWxlO1xuICB2YXIgc3R5bGVNYXAgPSB7XG4gICAgJy13ZWJraXQtdXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgJy1tb3otdXNlci1zZWxlY3QnOiAnLW1vei1ub25lJyxcbiAgICAndXNlci1zZWxlY3QnOiAnbm9uZScsXG4gICAgJy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcic6ICdyZ2JhKDAsMCwwLDApJyxcbiAgICAnb3V0bGluZS1zdHlsZSc6ICdub25lJ1xuICB9O1xuICBpZiAobXMoKSkge1xuICAgIHN0eWxlTWFwWyctbXMtdG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gICAgc3R5bGVNYXBbJ3RvdWNoLWFjdGlvbiddID0gJ25vbmUnO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQ1JwLkNBTlZBU19MQVlFUlM7IGkrKykge1xuICAgIHZhciBjYW52YXMgPSByLmRhdGEuY2FudmFzZXNbaV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIHIuZGF0YS5jb250ZXh0c1tpXSA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIE9iamVjdC5rZXlzKHN0eWxlTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBjYW52YXMuc3R5bGVba10gPSBzdHlsZU1hcFtrXTtcbiAgICB9KTtcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnbGF5ZXInICsgaSk7XG4gICAgY2FudmFzLnN0eWxlLnpJbmRleCA9IFN0cmluZyhDUnAuQ0FOVkFTX0xBWUVSUyAtIGkpO1xuICAgIHIuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbaV0gPSBmYWxzZTtcbiAgfVxuICByLmRhdGEudG9wQ2FudmFzID0gci5kYXRhLmNhbnZhc2VzWzBdO1xuICByLmRhdGEuY2FudmFzZXNbQ1JwLk5PREVdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuTk9ERSArICctbm9kZScpO1xuICByLmRhdGEuY2FudmFzZXNbQ1JwLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuU0VMRUNUX0JPWCArICctc2VsZWN0Ym94Jyk7XG4gIHIuZGF0YS5jYW52YXNlc1tDUnAuRFJBR10uc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgJ2xheWVyJyArIENScC5EUkFHICsgJy1kcmFnJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQ1JwLkJVRkZFUl9DT1VOVDsgaSsrKSB7XG4gICAgci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICByLmRhdGEuYnVmZmVyQ29udGV4dHNbaV0gPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnYnVmZmVyJyArIGkpO1xuICAgIHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5zdHlsZS56SW5kZXggPSBTdHJpbmcoLWkgLSAxKTtcbiAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIC8vci5kYXRhLmNhbnZhc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0pO1xuICB9XG5cbiAgci5wYXRoc0VuYWJsZWQgPSB0cnVlO1xuICB2YXIgZW1wdHlCYiA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICB2YXIgZ2V0Qm94Q2VudGVyID0gZnVuY3Rpb24gZ2V0Qm94Q2VudGVyKGJiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IChiYi54MSArIGJiLngyKSAvIDIsXG4gICAgICB5OiAoYmIueTEgKyBiYi55MikgLyAyXG4gICAgfTtcbiAgfTtcbiAgdmFyIGdldENlbnRlck9mZnNldCA9IGZ1bmN0aW9uIGdldENlbnRlck9mZnNldChiYikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAtYmIudyAvIDIsXG4gICAgICB5OiAtYmIuaCAvIDJcbiAgICB9O1xuICB9O1xuICB2YXIgYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQgPSBmdW5jdGlvbiBiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZChlbGUpIHtcbiAgICB2YXIgX3AgPSBlbGVbMF0uX3ByaXZhdGU7XG4gICAgdmFyIHNhbWUgPSBfcC5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wID09PSBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wO1xuICAgIHJldHVybiAhc2FtZTtcbiAgfTtcbiAgdmFyIGdldFN0eWxlS2V5ID0gZnVuY3Rpb24gZ2V0U3R5bGVLZXkoZWxlKSB7XG4gICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS5ub2RlS2V5O1xuICB9O1xuICB2YXIgZ2V0TGFiZWxLZXkgPSBmdW5jdGlvbiBnZXRMYWJlbEtleShlbGUpIHtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXk7XG4gIH07XG4gIHZhciBnZXRTb3VyY2VMYWJlbEtleSA9IGZ1bmN0aW9uIGdldFNvdXJjZUxhYmVsS2V5KGVsZSkge1xuICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleTtcbiAgfTtcbiAgdmFyIGdldFRhcmdldExhYmVsS2V5ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxLZXkoZWxlKSB7XG4gICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5O1xuICB9O1xuICB2YXIgZHJhd0VsZW1lbnQgPSBmdW5jdGlvbiBkcmF3RWxlbWVudChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgcmV0dXJuIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlLCBiYiwgZmFsc2UsIGZhbHNlLCB1c2VFbGVPcGFjaXR5KTtcbiAgfTtcbiAgdmFyIGRyYXdMYWJlbCA9IGZ1bmN0aW9uIGRyYXdMYWJlbChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgcmV0dXJuIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVsZSwgYmIsIHNjYWxlZExhYmVsU2hvd24sICdtYWluJywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3U291cmNlTGFiZWwgPSBmdW5jdGlvbiBkcmF3U291cmNlTGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgIHJldHVybiByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCAnc291cmNlJywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3VGFyZ2V0TGFiZWwgPSBmdW5jdGlvbiBkcmF3VGFyZ2V0TGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgIHJldHVybiByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCAndGFyZ2V0JywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBnZXRFbGVtZW50Qm94ID0gZnVuY3Rpb24gZ2V0RWxlbWVudEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmJvZHlCb3VuZHM7XG4gIH07XG4gIHZhciBnZXRMYWJlbEJveCA9IGZ1bmN0aW9uIGdldExhYmVsQm94KGVsZSkge1xuICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMubWFpbiB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgZ2V0U291cmNlTGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZSB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgZ2V0VGFyZ2V0TGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnRhcmdldCB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgaXNMYWJlbFZpc2libGVBdFNjYWxlID0gZnVuY3Rpb24gaXNMYWJlbFZpc2libGVBdFNjYWxlKGVsZSwgc2NhbGVkTGFiZWxTaG93bikge1xuICAgIHJldHVybiBzY2FsZWRMYWJlbFNob3duO1xuICB9O1xuICB2YXIgZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRFbGVtZW50Um90YXRpb25Qb2ludChlbGUpIHtcbiAgICByZXR1cm4gZ2V0Qm94Q2VudGVyKGdldEVsZW1lbnRCb3goZWxlKSk7XG4gIH07XG4gIHZhciBhZGRUZXh0TWFyZ2luID0gZnVuY3Rpb24gYWRkVGV4dE1hcmdpbihwcmVmaXgsIHB0LCBlbGUpIHtcbiAgICB2YXIgcHJlID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHB0LnggKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZSxcbiAgICAgIHk6IHB0LnkgKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi15JykucGZWYWx1ZVxuICAgIH07XG4gIH07XG4gIHZhciBnZXRSc1B0ID0gZnVuY3Rpb24gZ2V0UnNQdChlbGUsIHgsIHkpIHtcbiAgICB2YXIgcnMgPSBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJzW3hdLFxuICAgICAgeTogcnNbeV1cbiAgICB9O1xuICB9O1xuICB2YXIgZ2V0TGFiZWxSb3RhdGlvblBvaW50ID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvblBvaW50KGVsZSkge1xuICAgIHJldHVybiBhZGRUZXh0TWFyZ2luKCcnLCBnZXRSc1B0KGVsZSwgJ2xhYmVsWCcsICdsYWJlbFknKSwgZWxlKTtcbiAgfTtcbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCA9IGZ1bmN0aW9uIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludChlbGUpIHtcbiAgICByZXR1cm4gYWRkVGV4dE1hcmdpbignc291cmNlJywgZ2V0UnNQdChlbGUsICdzb3VyY2VMYWJlbFgnLCAnc291cmNlTGFiZWxZJyksIGVsZSk7XG4gIH07XG4gIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgcmV0dXJuIGFkZFRleHRNYXJnaW4oJ3RhcmdldCcsIGdldFJzUHQoZWxlLCAndGFyZ2V0TGFiZWxYJywgJ3RhcmdldExhYmVsWScpLCBlbGUpO1xuICB9O1xuICB2YXIgZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0KGVsZSkge1xuICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0RWxlbWVudEJveChlbGUpKTtcbiAgfTtcbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQgPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0KGVsZSkge1xuICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0U291cmNlTGFiZWxCb3goZWxlKSk7XG4gIH07XG4gIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldChlbGUpIHtcbiAgICByZXR1cm4gZ2V0Q2VudGVyT2Zmc2V0KGdldFRhcmdldExhYmVsQm94KGVsZSkpO1xuICB9O1xuICB2YXIgZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCA9IGZ1bmN0aW9uIGdldExhYmVsUm90YXRpb25PZmZzZXQoZWxlKSB7XG4gICAgdmFyIGJiID0gZ2V0TGFiZWxCb3goZWxlKTtcbiAgICB2YXIgcCA9IGdldENlbnRlck9mZnNldChnZXRMYWJlbEJveChlbGUpKTtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBzd2l0Y2ggKGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykudmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgcC54ID0gLWJiLnc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBwLnggPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlbGUucHN0eWxlKCd0ZXh0LXZhbGlnbicpLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgcC55ID0gLWJiLmg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgcC55ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH07XG4gIHZhciBlbGVUeHJDYWNoZSA9IHIuZGF0YS5lbGVUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICBnZXRLZXk6IGdldFN0eWxlS2V5LFxuICAgIGRvZXNFbGVJbnZhbGlkYXRlS2V5OiBiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZCxcbiAgICBkcmF3RWxlbWVudDogZHJhd0VsZW1lbnQsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGdldEVsZW1lbnRCb3gsXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldEVsZW1lbnRSb3RhdGlvbk9mZnNldCxcbiAgICBhbGxvd0VkZ2VUeHJDYWNoaW5nOiBmYWxzZSxcbiAgICBhbGxvd1BhcmVudFR4ckNhY2hpbmc6IGZhbHNlXG4gIH0pO1xuICB2YXIgbGJsVHhyQ2FjaGUgPSByLmRhdGEubGJsVHhyQ2FjaGUgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZShyLCB7XG4gICAgZ2V0S2V5OiBnZXRMYWJlbEtleSxcbiAgICBkcmF3RWxlbWVudDogZHJhd0xhYmVsLFxuICAgIGdldEJvdW5kaW5nQm94OiBnZXRMYWJlbEJveCxcbiAgICBnZXRSb3RhdGlvblBvaW50OiBnZXRMYWJlbFJvdGF0aW9uUG9pbnQsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldExhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgaXNWaXNpYmxlOiBpc0xhYmVsVmlzaWJsZUF0U2NhbGVcbiAgfSk7XG4gIHZhciBzbGJUeHJDYWNoZSA9IHIuZGF0YS5zbGJUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICBnZXRLZXk6IGdldFNvdXJjZUxhYmVsS2V5LFxuICAgIGRyYXdFbGVtZW50OiBkcmF3U291cmNlTGFiZWwsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGdldFNvdXJjZUxhYmVsQm94LFxuICAgIGdldFJvdGF0aW9uUG9pbnQ6IGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCxcbiAgICBnZXRSb3RhdGlvbk9mZnNldDogZ2V0U291cmNlTGFiZWxSb3RhdGlvbk9mZnNldCxcbiAgICBpc1Zpc2libGU6IGlzTGFiZWxWaXNpYmxlQXRTY2FsZVxuICB9KTtcbiAgdmFyIHRsYlR4ckNhY2hlID0gci5kYXRhLnRsYlR4ckNhY2hlID0gbmV3IEVsZW1lbnRUZXh0dXJlQ2FjaGUociwge1xuICAgIGdldEtleTogZ2V0VGFyZ2V0TGFiZWxLZXksXG4gICAgZHJhd0VsZW1lbnQ6IGRyYXdUYXJnZXRMYWJlbCxcbiAgICBnZXRCb3VuZGluZ0JveDogZ2V0VGFyZ2V0TGFiZWxCb3gsXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvblBvaW50LFxuICAgIGdldFJvdGF0aW9uT2Zmc2V0OiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LFxuICAgIGlzVmlzaWJsZTogaXNMYWJlbFZpc2libGVBdFNjYWxlXG4gIH0pO1xuICB2YXIgbHlyVHhyQ2FjaGUgPSByLmRhdGEubHlyVHhyQ2FjaGUgPSBuZXcgTGF5ZXJlZFRleHR1cmVDYWNoZShyKTtcbiAgci5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uIGludmFsaWRhdGVUZXh0dXJlQ2FjaGVzKHdpbGxEcmF3LCBlbGVzKSB7XG4gICAgLy8gZWFjaCBjYWNoZSBzaG91bGQgY2hlY2sgZm9yIHN1Yi1rZXkgZGlmZiB0byBzZWUgdGhhdCB0aGUgdXBkYXRlIGFmZmVjdHMgdGhhdCBjYWNoZSBwYXJ0aWN1bGFybHlcbiAgICBlbGVUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG4gICAgbGJsVHhyQ2FjaGUuaW52YWxpZGF0ZUVsZW1lbnRzKGVsZXMpO1xuICAgIHNsYlR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTtcbiAgICB0bGJUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG5cbiAgICAvLyBhbnkgY2hhbmdlIGludmFsaWRhdGVzIHRoZSBsYXllcnNcbiAgICBseXJUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG5cbiAgICAvLyB1cGRhdGUgdGhlIG9sZCBiZyB0aW1lc3RhbXAgc28gZGlmZnMgY2FuIGJlIGRvbmUgaW4gdGhlIGVsZSB0eHIgY2FjaGVzXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX3AgPSBlbGVzW19pXS5fcHJpdmF0ZTtcbiAgICAgIF9wLm9sZEJhY2tncm91bmRUaW1lc3RhbXAgPSBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wO1xuICAgIH1cbiAgfSk7XG4gIHZhciByZWZpbmVJbkxheWVycyA9IGZ1bmN0aW9uIHJlZmluZUluTGF5ZXJzKHJlcXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGx5clR4ckNhY2hlLmVucXVldWVFbGVtZW50UmVmaW5lbWVudChyZXFzW2ldLmVsZSk7XG4gICAgfVxuICB9O1xuICBlbGVUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICBsYmxUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICBzbGJUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xuICB0bGJUeHJDYWNoZS5vbkRlcXVldWUocmVmaW5lSW5MYXllcnMpO1xufVxuQ1JwLnJlZHJhd0hpbnQgPSBmdW5jdGlvbiAoZ3JvdXAsIGJvb2wpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBzd2l0Y2ggKGdyb3VwKSB7XG4gICAgY2FzZSAnZWxlcyc6XG4gICAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbQ1JwLk5PREVdID0gYm9vbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RyYWcnOlxuICAgICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0NScC5EUkFHXSA9IGJvb2w7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0NScC5TRUxFQ1RfQk9YXSA9IGJvb2w7XG4gICAgICBicmVhaztcbiAgfVxufTtcblxuLy8gd2hldGhlciB0byB1c2UgUGF0aDJEIGNhY2hpbmcgZm9yIGRyYXdpbmdcbnZhciBwYXRoc0ltcGxkID0gdHlwZW9mIFBhdGgyRCAhPT0gJ3VuZGVmaW5lZCc7XG5DUnAucGF0aDJkRW5hYmxlZCA9IGZ1bmN0aW9uIChvbikge1xuICBpZiAob24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0aGlzLnBhdGhzRW5hYmxlZDtcbiAgfVxuICB0aGlzLnBhdGhzRW5hYmxlZCA9IG9uID8gdHJ1ZSA6IGZhbHNlO1xufTtcbkNScC51c2VQYXRocyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBhdGhzSW1wbGQgJiYgdGhpcy5wYXRoc0VuYWJsZWQ7XG59O1xuQ1JwLnNldEltZ1Ntb290aGluZyA9IGZ1bmN0aW9uIChjb250ZXh0LCBib29sKSB7XG4gIGlmIChjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCAhPSBudWxsKSB7XG4gICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBib29sO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gYm9vbDtcbiAgICBjb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gICAgY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gIH1cbn07XG5DUnAuZ2V0SW1nU21vb3RoaW5nID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkICE9IG51bGwpIHtcbiAgICByZXR1cm4gY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIHx8IGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIHx8IGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ7XG4gIH1cbn07XG5DUnAubWFrZU9mZnNjcmVlbkNhbnZhcyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gIHZhciBjYW52YXM7XG4gIGlmICgodHlwZW9mIE9mZnNjcmVlbkNhbnZhcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKE9mZnNjcmVlbkNhbnZhcykpICE9PSAoXCJ1bmRlZmluZWRcIiApKSB7XG4gICAgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY29udGFpbmVyV2luZG93ID0gdGhpcy5jeS53aW5kb3coKTtcbiAgICB2YXIgZG9jdW1lbnQgPSBjb250YWluZXJXaW5kb3cuZG9jdW1lbnQ7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG4gIHJldHVybiBjYW52YXM7XG59O1xuW0NScCRhLCBDUnAkOSwgQ1JwJDgsIENScCQ3LCBDUnAkNiwgQ1JwJDUsIENScCQ0LCBDUnAkMywgQ1JwJDIsIENScCQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoQ1JwLCBwcm9wcyk7XG59KTtcblxudmFyIHJlbmRlcmVyID0gW3tcbiAgbmFtZTogJ251bGwnLFxuICBpbXBsOiBOdWxsUmVuZGVyZXJcbn0sIHtcbiAgbmFtZTogJ2Jhc2UnLFxuICBpbXBsOiBCUlxufSwge1xuICBuYW1lOiAnY2FudmFzJyxcbiAgaW1wbDogQ1Jcbn1dO1xuXG52YXIgaW5jRXh0cyA9IFt7XG4gIHR5cGU6ICdsYXlvdXQnLFxuICBleHRlbnNpb25zOiBsYXlvdXRcbn0sIHtcbiAgdHlwZTogJ3JlbmRlcmVyJyxcbiAgZXh0ZW5zaW9uczogcmVuZGVyZXJcbn1dO1xuXG4vLyByZWdpc3RlcmVkIGV4dGVuc2lvbnMgdG8gY3l0b3NjYXBlLCBpbmRleGVkIGJ5IG5hbWVcbnZhciBleHRlbnNpb25zID0ge307XG5cbi8vIHJlZ2lzdGVyZWQgbW9kdWxlcyBmb3IgZXh0ZW5zaW9ucywgaW5kZXhlZCBieSBuYW1lXG52YXIgbW9kdWxlcyA9IHt9O1xuZnVuY3Rpb24gc2V0RXh0ZW5zaW9uKHR5cGUsIG5hbWUsIHJlZ2lzdHJhbnQpIHtcbiAgdmFyIGV4dCA9IHJlZ2lzdHJhbnQ7XG4gIHZhciBvdmVycmlkZUVyciA9IGZ1bmN0aW9uIG92ZXJyaWRlRXJyKGZpZWxkKSB7XG4gICAgd2FybignQ2FuIG5vdCByZWdpc3RlciBgJyArIG5hbWUgKyAnYCBmb3IgYCcgKyB0eXBlICsgJ2Agc2luY2UgYCcgKyBmaWVsZCArICdgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbicpO1xuICB9O1xuICBpZiAodHlwZSA9PT0gJ2NvcmUnKSB7XG4gICAgaWYgKENvcmUucHJvdG90eXBlW25hbWVdKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVFcnIobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvcmUucHJvdG90eXBlW25hbWVdID0gcmVnaXN0cmFudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbGxlY3Rpb24nKSB7XG4gICAgaWYgKENvbGxlY3Rpb24ucHJvdG90eXBlW25hbWVdKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVFcnIobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvbGxlY3Rpb24ucHJvdG90eXBlW25hbWVdID0gcmVnaXN0cmFudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xheW91dCcpIHtcbiAgICAvLyBmaWxsIGluIG1pc3NpbmcgbGF5b3V0IGZ1bmN0aW9ucyBpbiB0aGUgcHJvdG90eXBlXG5cbiAgICB2YXIgTGF5b3V0ID0gZnVuY3Rpb24gTGF5b3V0KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZWdpc3RyYW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBsYXlvdXQgaGFzIF9wcml2YXRlIGZvciB1c2Ugdy8gc3RkIGFwaXMgbGlrZSAub24oKVxuICAgICAgaWYgKCFwbGFpbk9iamVjdCh0aGlzLl9wcml2YXRlKSkge1xuICAgICAgICB0aGlzLl9wcml2YXRlID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLl9wcml2YXRlLmN5ID0gb3B0aW9ucy5jeTtcbiAgICAgIHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzID0gW107XG4gICAgICB0aGlzLmNyZWF0ZUVtaXR0ZXIoKTtcbiAgICB9O1xuICAgIHZhciBsYXlvdXRQcm90byA9IExheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHJlZ2lzdHJhbnQucHJvdG90eXBlKTtcbiAgICB2YXIgb3B0TGF5b3V0Rm5zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRMYXlvdXRGbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBmbk5hbWUgPSBvcHRMYXlvdXRGbnNbaV07XG4gICAgICBsYXlvdXRQcm90b1tmbk5hbWVdID0gbGF5b3V0UHJvdG9bZm5OYW1lXSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBlaXRoZXIgLnN0YXJ0KCkgb3IgLnJ1bigpIGlzIGRlZmluZWQsIHNvIGF1dG9nZW4gdGhlIG90aGVyXG4gICAgaWYgKGxheW91dFByb3RvLnN0YXJ0ICYmICFsYXlvdXRQcm90by5ydW4pIHtcbiAgICAgIGxheW91dFByb3RvLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICghbGF5b3V0UHJvdG8uc3RhcnQgJiYgbGF5b3V0UHJvdG8ucnVuKSB7XG4gICAgICBsYXlvdXRQcm90by5zdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgcmVnU3RvcCA9IHJlZ2lzdHJhbnQucHJvdG90eXBlLnN0b3A7XG4gICAgbGF5b3V0UHJvdG8uc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdHMgJiYgb3B0cy5hbmltYXRlKSB7XG4gICAgICAgIHZhciBhbmlzID0gdGhpcy5hbmltYXRpb25zO1xuICAgICAgICBpZiAoYW5pcykge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhbmlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYW5pc1tfaV0uc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlZ1N0b3ApIHtcbiAgICAgICAgcmVnU3RvcC5jYWxsKHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIGlmICghbGF5b3V0UHJvdG8uZGVzdHJveSkge1xuICAgICAgbGF5b3V0UHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH1cbiAgICBsYXlvdXRQcm90by5jeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmN5O1xuICAgIH07XG4gICAgdmFyIGdldEN5ID0gZnVuY3Rpb24gZ2V0Q3kobGF5b3V0KSB7XG4gICAgICByZXR1cm4gbGF5b3V0Ll9wcml2YXRlLmN5O1xuICAgIH07XG4gICAgdmFyIGVtaXR0ZXJPcHRzID0ge1xuICAgICAgYWRkRXZlbnRGaWVsZHM6IGZ1bmN0aW9uIGFkZEV2ZW50RmllbGRzKGxheW91dCwgZXZ0KSB7XG4gICAgICAgIGV2dC5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIGV2dC5jeSA9IGdldEN5KGxheW91dCk7XG4gICAgICAgIGV2dC50YXJnZXQgPSBsYXlvdXQ7XG4gICAgICB9LFxuICAgICAgYnViYmxlOiBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIHBhcmVudDogZnVuY3Rpb24gcGFyZW50KGxheW91dCkge1xuICAgICAgICByZXR1cm4gZ2V0Q3kobGF5b3V0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4dGVuZChsYXlvdXRQcm90bywge1xuICAgICAgY3JlYXRlRW1pdHRlcjogZnVuY3Rpb24gY3JlYXRlRW1pdHRlcigpIHtcbiAgICAgICAgdGhpcy5fcHJpdmF0ZS5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdHMsIHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBlbWl0dGVyOiBmdW5jdGlvbiBlbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyO1xuICAgICAgfSxcbiAgICAgIG9uOiBmdW5jdGlvbiBvbihldnQsIGNiKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLm9uKGV2dCwgY2IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBvbmU6IGZ1bmN0aW9uIG9uZShldnQsIGNiKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLm9uZShldnQsIGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgb25jZTogZnVuY3Rpb24gb25jZShldnQsIGNiKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLm9uZShldnQsIGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2dCwgY2IpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZ0LCBjYik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUFsbExpc3RlbmVyczogZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xuICAgICAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgZW1pdDogZnVuY3Rpb24gZW1pdChldnQsIHBhcmFtcykge1xuICAgICAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KGV2dCwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVmaW5lLmV2ZW50QWxpYXNlc09uKGxheW91dFByb3RvKTtcbiAgICBleHQgPSBMYXlvdXQ7IC8vIHJlcGxhY2Ugd2l0aCBvdXIgd3JhcHBlZCBsYXlvdXRcbiAgfSBlbHNlIGlmICh0eXBlID09PSAncmVuZGVyZXInICYmIG5hbWUgIT09ICdudWxsJyAmJiBuYW1lICE9PSAnYmFzZScpIHtcbiAgICAvLyB1c2VyIHJlZ2lzdGVyZWQgcmVuZGVyZXJzIGluaGVyaXQgZnJvbSBiYXNlXG5cbiAgICB2YXIgQmFzZVJlbmRlcmVyID0gZ2V0RXh0ZW5zaW9uKCdyZW5kZXJlcicsICdiYXNlJyk7XG4gICAgdmFyIGJQcm90byA9IEJhc2VSZW5kZXJlci5wcm90b3R5cGU7XG4gICAgdmFyIFJlZ2lzdHJhbnRSZW5kZXJlciA9IHJlZ2lzdHJhbnQ7XG4gICAgdmFyIHJQcm90byA9IHJlZ2lzdHJhbnQucHJvdG90eXBlO1xuICAgIHZhciBSZW5kZXJlciA9IGZ1bmN0aW9uIFJlbmRlcmVyKCkge1xuICAgICAgQmFzZVJlbmRlcmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBSZWdpc3RyYW50UmVuZGVyZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIHZhciBwcm90byA9IFJlbmRlcmVyLnByb3RvdHlwZTtcbiAgICBmb3IgKHZhciBwTmFtZSBpbiBiUHJvdG8pIHtcbiAgICAgIHZhciBwVmFsID0gYlByb3RvW3BOYW1lXTtcbiAgICAgIHZhciBleGlzdHNJblIgPSByUHJvdG9bcE5hbWVdICE9IG51bGw7XG4gICAgICBpZiAoZXhpc3RzSW5SKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZUVycihwTmFtZSk7XG4gICAgICB9XG4gICAgICBwcm90b1twTmFtZV0gPSBwVmFsOyAvLyB0YWtlIGltcGwgZnJvbSBiYXNlXG4gICAgfVxuXG4gICAgZm9yICh2YXIgX3BOYW1lIGluIHJQcm90bykge1xuICAgICAgcHJvdG9bX3BOYW1lXSA9IHJQcm90b1tfcE5hbWVdOyAvLyB0YWtlIGltcGwgZnJvbSByZWdpc3RyYW50XG4gICAgfVxuXG4gICAgYlByb3RvLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBwcm90b1tuYW1lXSA9IHByb3RvW25hbWVdIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXJyb3IoJ1JlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuJyArIG5hbWUgKyAnKClgIG9uIGl0cyBwcm90b3R5cGUnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZXh0ID0gUmVuZGVyZXI7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ19fcHJvdG9fXycgfHwgdHlwZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0eXBlID09PSAncHJvdG90eXBlJykge1xuICAgIC8vIHRvIGF2b2lkIHBvdGVudGlhbCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgcmV0dXJuIGVycm9yKHR5cGUgKyAnIGlzIGFuIGlsbGVnYWwgdHlwZSB0byBiZSByZWdpc3RlcmVkLCBwb3NzaWJseSBsZWFkIHRvIHByb3RvdHlwZSBwb2xsdXRpb25zJyk7XG4gIH1cbiAgcmV0dXJuIHNldE1hcCh7XG4gICAgbWFwOiBleHRlbnNpb25zLFxuICAgIGtleXM6IFt0eXBlLCBuYW1lXSxcbiAgICB2YWx1ZTogZXh0XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHR5cGUsIG5hbWUpIHtcbiAgcmV0dXJuIGdldE1hcCh7XG4gICAgbWFwOiBleHRlbnNpb25zLFxuICAgIGtleXM6IFt0eXBlLCBuYW1lXVxuICB9KTtcbn1cbmZ1bmN0aW9uIHNldE1vZHVsZSh0eXBlLCBuYW1lLCBtb2R1bGVUeXBlLCBtb2R1bGVOYW1lLCByZWdpc3RyYW50KSB7XG4gIHJldHVybiBzZXRNYXAoe1xuICAgIG1hcDogbW9kdWxlcyxcbiAgICBrZXlzOiBbdHlwZSwgbmFtZSwgbW9kdWxlVHlwZSwgbW9kdWxlTmFtZV0sXG4gICAgdmFsdWU6IHJlZ2lzdHJhbnRcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRNb2R1bGUodHlwZSwgbmFtZSwgbW9kdWxlVHlwZSwgbW9kdWxlTmFtZSkge1xuICByZXR1cm4gZ2V0TWFwKHtcbiAgICBtYXA6IG1vZHVsZXMsXG4gICAga2V5czogW3R5cGUsIG5hbWUsIG1vZHVsZVR5cGUsIG1vZHVsZU5hbWVdXG4gIH0pO1xufVxudmFyIGV4dGVuc2lvbiA9IGZ1bmN0aW9uIGV4dGVuc2lvbigpIHtcbiAgLy8gZS5nLiBleHRlbnNpb24oJ3JlbmRlcmVyJywgJ3N2ZycpXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIGdldEV4dGVuc2lvbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLy8gZS5nLiBleHRlbnNpb24oJ3JlbmRlcmVyJywgJ3N2ZycsIHsgLi4uIH0pXG4gIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gc2V0RXh0ZW5zaW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cblxuICAvLyBlLmcuIGV4dGVuc2lvbigncmVuZGVyZXInLCAnc3ZnJywgJ25vZGVTaGFwZScsICdlbGxpcHNlJylcbiAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiBnZXRNb2R1bGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIC8vIGUuZy4gZXh0ZW5zaW9uKCdyZW5kZXJlcicsICdzdmcnLCAnbm9kZVNoYXBlJywgJ2VsbGlwc2UnLCB7IC4uLiB9KVxuICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1KSB7XG4gICAgcmV0dXJuIHNldE1vZHVsZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9IGVsc2Uge1xuICAgIGVycm9yKCdJbnZhbGlkIGV4dGVuc2lvbiBhY2Nlc3Mgc3ludGF4Jyk7XG4gIH1cbn07XG5cbi8vIGFsbG93cyBhIGNvcmUgaW5zdGFuY2UgdG8gYWNjZXNzIGV4dGVuc2lvbnMgaW50ZXJuYWxseVxuQ29yZS5wcm90b3R5cGUuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uO1xuXG4vLyBpbmNsdWRlZCBleHRlbnNpb25zXG5pbmNFeHRzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gIGdyb3VwLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoZXh0KSB7XG4gICAgc2V0RXh0ZW5zaW9uKGdyb3VwLnR5cGUsIGV4dC5uYW1lLCBleHQuaW1wbCk7XG4gIH0pO1xufSk7XG5cbi8vIGEgZHVtbXkgc3R5bGVzaGVldCBvYmplY3QgdGhhdCBkb2Vzbid0IG5lZWQgYSByZWZlcmVuY2UgdG8gdGhlIGNvcmVcbi8vICh1c2VmdWwgZm9yIGluaXQpXG52YXIgU3R5bGVzaGVldCA9IGZ1bmN0aW9uIFN0eWxlc2hlZXQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHlsZXNoZWV0KSkge1xuICAgIHJldHVybiBuZXcgU3R5bGVzaGVldCgpO1xuICB9XG4gIHRoaXMubGVuZ3RoID0gMDtcbn07XG52YXIgc2hlZXRmbiA9IFN0eWxlc2hlZXQucHJvdG90eXBlO1xuc2hlZXRmbi5pbnN0YW5jZVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdzdHlsZXNoZWV0Jztcbn07XG5cbi8vIGp1c3Qgc3RvcmUgdGhlIHNlbGVjdG9yIHRvIGJlIHBhcnNlZCBsYXRlclxuc2hlZXRmbi5zZWxlY3RvciA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICB2YXIgaSA9IHRoaXMubGVuZ3RoKys7XG4gIHRoaXNbaV0gPSB7XG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIHByb3BlcnRpZXM6IFtdXG4gIH07XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8ganVzdCBzdG9yZSB0aGUgcHJvcGVydHkgdG8gYmUgcGFyc2VkIGxhdGVyXG5zaGVldGZuLmNzcyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgIHRoaXNbaV0ucHJvcGVydGllcy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChuYW1lKSkge1xuICAgIHZhciBtYXAgPSBuYW1lO1xuICAgIHZhciBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcE5hbWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcE5hbWVzW2pdO1xuICAgICAgdmFyIG1hcFZhbCA9IG1hcFtrZXldO1xuICAgICAgaWYgKG1hcFZhbCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3AgPSBTdHlsZS5wcm9wZXJ0aWVzW2tleV0gfHwgU3R5bGUucHJvcGVydGllc1tkYXNoMmNhbWVsKGtleSldO1xuICAgICAgaWYgKHByb3AgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBfbmFtZSA9IHByb3AubmFtZTtcbiAgICAgIHZhciBfdmFsdWUgPSBtYXBWYWw7XG4gICAgICB0aGlzW2ldLnByb3BlcnRpZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IF9uYW1lLFxuICAgICAgICB2YWx1ZTogX3ZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG5zaGVldGZuLnN0eWxlID0gc2hlZXRmbi5jc3M7XG5cbi8vIGdlbmVyYXRlIGEgcmVhbCBzdHlsZSBvYmplY3QgZnJvbSB0aGUgZHVtbXkgc3R5bGVzaGVldFxuc2hlZXRmbi5nZW5lcmF0ZVN0eWxlID0gZnVuY3Rpb24gKGN5KSB7XG4gIHZhciBzdHlsZSA9IG5ldyBTdHlsZShjeSk7XG4gIHJldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUoc3R5bGUpO1xufTtcblxuLy8gYXBwZW5kIGEgZHVtbXkgc3R5bGVzaGVldCBvYmplY3Qgb24gYSByZWFsIHN0eWxlIG9iamVjdFxuc2hlZXRmbi5hcHBlbmRUb1N0eWxlID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb250ZXh0ID0gdGhpc1tpXTtcbiAgICB2YXIgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yO1xuICAgIHZhciBwcm9wcyA9IGNvbnRleHQucHJvcGVydGllcztcbiAgICBzdHlsZS5zZWxlY3RvcihzZWxlY3Rvcik7IC8vIGFwcGx5IHNlbGVjdG9yXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BzW2pdO1xuICAgICAgc3R5bGUuY3NzKHByb3AubmFtZSwgcHJvcC52YWx1ZSk7IC8vIGFwcGx5IHByb3BlcnR5XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufTtcblxudmFyIHZlcnNpb24gPSBcIjMuMzAuMlwiO1xuXG52YXIgY3l0b3NjYXBlID0gZnVuY3Rpb24gY3l0b3NjYXBlKG9wdGlvbnMpIHtcbiAgLy8gaWYgbm8gb3B0aW9ucyBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICAvLyBjcmVhdGUgaW5zdGFuY2VcbiAgaWYgKHBsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb3JlKG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gYWxsb3cgZm9yIHJlZ2lzdHJhdGlvbiBvZiBleHRlbnNpb25zXG4gIGVsc2UgaWYgKHN0cmluZyhvcHRpb25zKSkge1xuICAgIHJldHVybiBleHRlbnNpb24uYXBwbHkoZXh0ZW5zaW9uLCBhcmd1bWVudHMpO1xuICB9XG59O1xuXG4vLyBlLmcuIGN5dG9zY2FwZS51c2UoIHJlcXVpcmUoJ2N5dG9zY2FwZS1mb28nKSwgYmFyIClcbmN5dG9zY2FwZS51c2UgPSBmdW5jdGlvbiAoZXh0KSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gYXJncyB0byBwYXNzIHRvIGV4dFxuXG4gIGFyZ3MudW5zaGlmdChjeXRvc2NhcGUpOyAvLyBjeXRvc2NhcGUgaXMgZmlyc3QgYXJnIHRvIGV4dFxuXG4gIGV4dC5hcHBseShudWxsLCBhcmdzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuY3l0b3NjYXBlLndhcm5pbmdzID0gZnVuY3Rpb24gKGJvb2wpIHtcbiAgcmV0dXJuIHdhcm5pbmdzKGJvb2wpO1xufTtcblxuLy8gcmVwbGFjZWQgYnkgYnVpbGQgc3lzdGVtXG5jeXRvc2NhcGUudmVyc2lvbiA9IHZlcnNpb247XG5cbi8vIGV4cG9zZSBwdWJsaWMgYXBpcyAobW9zdGx5IGZvciBleHRlbnNpb25zKVxuY3l0b3NjYXBlLnN0eWxlc2hlZXQgPSBjeXRvc2NhcGUuU3R5bGVzaGVldCA9IFN0eWxlc2hlZXQ7XG5cbmV4cG9ydCB7IGN5dG9zY2FwZSBhcyBkZWZhdWx0IH07XG4iLAogICAgIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImxheW91dEJhc2VcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibGF5b3V0QmFzZVwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI2KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gTGF5b3V0Q29uc3RhbnRzKCkge31cblxuLyoqXHJcbiAqIExheW91dCBRdWFsaXR5OiAwOmRyYWZ0LCAxOmRlZmF1bHQsIDI6cHJvb2ZcclxuICovXG5MYXlvdXRDb25zdGFudHMuUVVBTElUWSA9IDE7XG5cbi8qKlxyXG4gKiBEZWZhdWx0IHBhcmFtZXRlcnNcclxuICovXG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEID0gZmFsc2U7XG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCA9IHRydWU7XG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCA9IDUwO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMgPSBmYWxzZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IEdlbmVyYWwgb3RoZXIgY29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLypcclxuICogTWFyZ2lucyBvZiBhIGdyYXBoIHRvIGJlIGFwcGxpZWQgb24gYm91ZGluZyByZWN0YW5nbGUgb2YgaXRzIGNvbnRlbnRzLiBXZVxyXG4gKiBhc3N1bWUgbWFyZ2lucyBvbiBhbGwgZm91ciBzaWRlcyB0byBiZSB1bmlmb3JtLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVBIX01BUkdJTiA9IDE1O1xuXG4vKlxyXG4gKiBXaGV0aGVyIHRvIGNvbnNpZGVyIGxhYmVscyBpbiBub2RlIGRpbWVuc2lvbnMgb3Igbm90XHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IGZhbHNlO1xuXG4vKlxyXG4gKiBEZWZhdWx0IGRpbWVuc2lvbiBvZiBhIG5vbi1jb21wb3VuZCBub2RlLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9TSVpFID0gNDA7XG5cbi8qXHJcbiAqIERlZmF1bHQgZGltZW5zaW9uIG9mIGEgbm9uLWNvbXBvdW5kIG5vZGUuXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLlNJTVBMRV9OT0RFX0hBTEZfU0laRSA9IExheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9TSVpFIC8gMjtcblxuLypcclxuICogRW1wdHkgY29tcG91bmQgbm9kZSBzaXplLiBXaGVuIGEgY29tcG91bmQgbm9kZSBpcyBlbXB0eSwgaXRzIGJvdGhcclxuICogZGltZW5zaW9ucyBzaG91bGQgYmUgb2YgdGhpcyB2YWx1ZS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFID0gNDA7XG5cbi8qXHJcbiAqIE1pbmltdW0gbGVuZ3RoIHRoYXQgYW4gZWRnZSBzaG91bGQgdGFrZSBkdXJpbmcgbGF5b3V0XHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLk1JTl9FREdFX0xFTkdUSCA9IDE7XG5cbi8qXHJcbiAqIFdvcmxkIGJvdW5kYXJpZXMgdGhhdCBsYXlvdXQgb3BlcmF0ZXMgb25cclxuICovXG5MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkgPSAxMDAwMDAwO1xuXG4vKlxyXG4gKiBXb3JsZCBib3VuZGFyaWVzIHRoYXQgcmFuZG9tIHBvc2l0aW9uaW5nIGNhbiBiZSBwZXJmb3JtZWQgd2l0aFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZID0gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZIC8gMTAwMDtcblxuLypcclxuICogQ29vcmRpbmF0ZXMgb2YgdGhlIHdvcmxkIGNlbnRlclxyXG4gKi9cbkxheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWCA9IDEyMDA7XG5MYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1kgPSA5MDA7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF5b3V0Q29uc3RhbnRzO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBJTWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cbmZ1bmN0aW9uIExFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBMR3JhcGhPYmplY3QuY2FsbCh0aGlzLCB2RWRnZSk7XG5cbiAgdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBmYWxzZTtcbiAgdGhpcy52R3JhcGhPYmplY3QgPSB2RWRnZTtcbiAgdGhpcy5iZW5kcG9pbnRzID0gW107XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbn1cblxuTEVkZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhPYmplY3QucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMR3JhcGhPYmplY3QpIHtcbiAgTEVkZ2VbcHJvcF0gPSBMR3JhcGhPYmplY3RbcHJvcF07XG59XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRhcmdldDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5pc0ludGVyR3JhcGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmlzSW50ZXJHcmFwaDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5iZW5kcG9pbnRzO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldExjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGNhO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldFNvdXJjZUluTGNhID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2VJbkxjYTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudGFyZ2V0SW5MY2E7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0T3RoZXJFbmQgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAodGhpcy5zb3VyY2UgPT09IG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gIH0gZWxzZSBpZiAodGhpcy50YXJnZXQgPT09IG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2U7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgXCJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZVwiO1xuICB9XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoID0gZnVuY3Rpb24gKG5vZGUsIGdyYXBoKSB7XG4gIHZhciBvdGhlckVuZCA9IHRoaXMuZ2V0T3RoZXJFbmQobm9kZSk7XG4gIHZhciByb290ID0gZ3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG90aGVyRW5kLmdldE93bmVyKCkgPT0gZ3JhcGgpIHtcbiAgICAgIHJldHVybiBvdGhlckVuZDtcbiAgICB9XG5cbiAgICBpZiAob3RoZXJFbmQuZ2V0T3duZXIoKSA9PSByb290KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBvdGhlckVuZCA9IG90aGVyRW5kLmdldE93bmVyKCkuZ2V0UGFyZW50KCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS51cGRhdGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjbGlwUG9pbnRDb29yZGluYXRlcyA9IG5ldyBBcnJheSg0KTtcblxuICB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldCA9IElHZW9tZXRyeS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLCB0aGlzLnNvdXJjZS5nZXRSZWN0KCksIGNsaXBQb2ludENvb3JkaW5hdGVzKTtcblxuICBpZiAoIXRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KSB7XG4gICAgdGhpcy5sZW5ndGhYID0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMF0gLSBjbGlwUG9pbnRDb29yZGluYXRlc1syXTtcbiAgICB0aGlzLmxlbmd0aFkgPSBjbGlwUG9pbnRDb29yZGluYXRlc1sxXSAtIGNsaXBQb2ludENvb3JkaW5hdGVzWzNdO1xuXG4gICAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWCkgPCAxLjApIHtcbiAgICAgIHRoaXMubGVuZ3RoWCA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhYKTtcbiAgICB9XG5cbiAgICBpZiAoTWF0aC5hYnModGhpcy5sZW5ndGhZKSA8IDEuMCkge1xuICAgICAgdGhpcy5sZW5ndGhZID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFkpO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCAqIHRoaXMubGVuZ3RoWCArIHRoaXMubGVuZ3RoWSAqIHRoaXMubGVuZ3RoWSk7XG4gIH1cbn07XG5cbkxFZGdlLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubGVuZ3RoWCA9IHRoaXMudGFyZ2V0LmdldENlbnRlclgoKSAtIHRoaXMuc291cmNlLmdldENlbnRlclgoKTtcbiAgdGhpcy5sZW5ndGhZID0gdGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpIC0gdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFgpIDwgMS4wKSB7XG4gICAgdGhpcy5sZW5ndGhYID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFgpO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWSkgPCAxLjApIHtcbiAgICB0aGlzLmxlbmd0aFkgPSBJTWF0aC5zaWduKHRoaXMubGVuZ3RoWSk7XG4gIH1cblxuICB0aGlzLmxlbmd0aCA9IE1hdGguc3FydCh0aGlzLmxlbmd0aFggKiB0aGlzLmxlbmd0aFggKyB0aGlzLmxlbmd0aFkgKiB0aGlzLmxlbmd0aFkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMRWRnZTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIExHcmFwaE9iamVjdCh2R3JhcGhPYmplY3QpIHtcbiAgdGhpcy52R3JhcGhPYmplY3QgPSB2R3JhcGhPYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoT2JqZWN0O1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIFJlY3RhbmdsZUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIFJhbmRvbVNlZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG5mdW5jdGlvbiBMTm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICAvL0FsdGVybmF0aXZlIGNvbnN0cnVjdG9yIDEgOiBMTm9kZShMR3JhcGhNYW5hZ2VyIGdtLCBQb2ludCBsb2MsIERpbWVuc2lvbiBzaXplLCBPYmplY3Qgdk5vZGUpXG4gIGlmIChzaXplID09IG51bGwgJiYgdk5vZGUgPT0gbnVsbCkge1xuICAgIHZOb2RlID0gbG9jO1xuICB9XG5cbiAgTEdyYXBoT2JqZWN0LmNhbGwodGhpcywgdk5vZGUpO1xuXG4gIC8vQWx0ZXJuYXRpdmUgY29uc3RydWN0b3IgMiA6IExOb2RlKExheW91dCBsYXlvdXQsIE9iamVjdCB2Tm9kZSlcbiAgaWYgKGdtLmdyYXBoTWFuYWdlciAhPSBudWxsKSBnbSA9IGdtLmdyYXBoTWFuYWdlcjtcblxuICB0aGlzLmVzdGltYXRlZFNpemUgPSBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgdGhpcy5pbmNsdXNpb25UcmVlRGVwdGggPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdGhpcy52R3JhcGhPYmplY3QgPSB2Tm9kZTtcbiAgdGhpcy5lZGdlcyA9IFtdO1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IGdtO1xuXG4gIGlmIChzaXplICE9IG51bGwgJiYgbG9jICE9IG51bGwpIHRoaXMucmVjdCA9IG5ldyBSZWN0YW5nbGVEKGxvYy54LCBsb2MueSwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO2Vsc2UgdGhpcy5yZWN0ID0gbmV3IFJlY3RhbmdsZUQoKTtcbn1cblxuTE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhPYmplY3QucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gTEdyYXBoT2JqZWN0KSB7XG4gIExOb2RlW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MTm9kZS5wcm90b3R5cGUuZ2V0RWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmVkZ2VzO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldENoaWxkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jaGlsZDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRPd25lciA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gIGlmICh0aGlzLm93bmVyICE9IG51bGwpIHtcbiAgLy8gICAgaWYgKCEodGhpcy5vd25lciA9PSBudWxsIHx8IHRoaXMub3duZXIuZ2V0Tm9kZXMoKS5pbmRleE9mKHRoaXMpID4gLTEpKSB7XG4gIC8vICAgICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIC8vICAgIH1cbiAgLy8gIH1cblxuICByZXR1cm4gdGhpcy5vd25lcjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC53aWR0aDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRXaWR0aCA9IGZ1bmN0aW9uICh3aWR0aCkge1xuICB0aGlzLnJlY3Qud2lkdGggPSB3aWR0aDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3QuaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIChoZWlnaHQpIHtcbiAgdGhpcy5yZWN0LmhlaWdodCA9IGhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXJYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGggLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldENlbnRlclkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3QueSArIHRoaXMucmVjdC5oZWlnaHQgLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldENlbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludEQodGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGggLyAyLCB0aGlzLnJlY3QueSArIHRoaXMucmVjdC5oZWlnaHQgLyAyKTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludEQodGhpcy5yZWN0LngsIHRoaXMucmVjdC55KTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRSZWN0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldERpYWdvbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCAqIHRoaXMucmVjdC53aWR0aCArIHRoaXMucmVjdC5oZWlnaHQgKiB0aGlzLnJlY3QuaGVpZ2h0KTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBoYWxmIHRoZSBkaWFnb25hbCBsZW5ndGggb2YgdGhpcyBub2RlLlxuICovXG5MTm9kZS5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQgKiB0aGlzLnJlY3QuaGVpZ2h0ICsgdGhpcy5yZWN0LndpZHRoICogdGhpcy5yZWN0LndpZHRoKSAvIDI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0UmVjdCA9IGZ1bmN0aW9uICh1cHBlckxlZnQsIGRpbWVuc2lvbikge1xuICB0aGlzLnJlY3QueCA9IHVwcGVyTGVmdC54O1xuICB0aGlzLnJlY3QueSA9IHVwcGVyTGVmdC55O1xuICB0aGlzLnJlY3Qud2lkdGggPSBkaW1lbnNpb24ud2lkdGg7XG4gIHRoaXMucmVjdC5oZWlnaHQgPSBkaW1lbnNpb24uaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldENlbnRlciA9IGZ1bmN0aW9uIChjeCwgY3kpIHtcbiAgdGhpcy5yZWN0LnggPSBjeCAtIHRoaXMucmVjdC53aWR0aCAvIDI7XG4gIHRoaXMucmVjdC55ID0gY3kgLSB0aGlzLnJlY3QuaGVpZ2h0IC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gIHRoaXMucmVjdC54ID0geDtcbiAgdGhpcy5yZWN0LnkgPSB5O1xufTtcblxuTE5vZGUucHJvdG90eXBlLm1vdmVCeSA9IGZ1bmN0aW9uIChkeCwgZHkpIHtcbiAgdGhpcy5yZWN0LnggKz0gZHg7XG4gIHRoaXMucmVjdC55ICs9IGR5O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlID0gZnVuY3Rpb24gKHRvKSB7XG4gIHZhciBlZGdlTGlzdCA9IFtdO1xuICB2YXIgZWRnZTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuXG4gICAgaWYgKGVkZ2UudGFyZ2V0ID09IHRvKSB7XG4gICAgICBpZiAoZWRnZS5zb3VyY2UgIT0gc2VsZikgdGhyb3cgXCJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhXCI7XG5cbiAgICAgIGVkZ2VMaXN0LnB1c2goZWRnZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWRnZUxpc3Q7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gIHZhciBlZGdlTGlzdCA9IFtdO1xuICB2YXIgZWRnZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuXG4gICAgaWYgKCEoZWRnZS5zb3VyY2UgPT0gc2VsZiB8fCBlZGdlLnRhcmdldCA9PSBzZWxmKSkgdGhyb3cgXCJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldFwiO1xuXG4gICAgaWYgKGVkZ2UudGFyZ2V0ID09IG90aGVyIHx8IGVkZ2Uuc291cmNlID09IG90aGVyKSB7XG4gICAgICBlZGdlTGlzdC5wdXNoKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBuZWlnaGJvcnMgPSBuZXcgU2V0KCk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmIChlZGdlLnNvdXJjZSA9PSBzZWxmKSB7XG4gICAgICBuZWlnaGJvcnMuYWRkKGVkZ2UudGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVkZ2UudGFyZ2V0ICE9IHNlbGYpIHtcbiAgICAgICAgdGhyb3cgXCJJbmNvcnJlY3QgaW5jaWRlbmN5IVwiO1xuICAgICAgfVxuXG4gICAgICBuZWlnaGJvcnMuYWRkKGVkZ2Uuc291cmNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZWlnaGJvcnM7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUud2l0aENoaWxkcmVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgd2l0aE5laWdoYm9yc0xpc3QgPSBuZXcgU2V0KCk7XG4gIHZhciBjaGlsZE5vZGU7XG4gIHZhciBjaGlsZHJlbjtcblxuICB3aXRoTmVpZ2hib3JzTGlzdC5hZGQodGhpcyk7XG5cbiAgaWYgKHRoaXMuY2hpbGQgIT0gbnVsbCkge1xuICAgIHZhciBub2RlcyA9IHRoaXMuY2hpbGQuZ2V0Tm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZE5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGROb2RlLndpdGhDaGlsZHJlbigpO1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB3aXRoTmVpZ2hib3JzTGlzdC5hZGQobm9kZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aE5laWdoYm9yc0xpc3Q7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbm9PZkNoaWxkcmVuID0gMDtcbiAgdmFyIGNoaWxkTm9kZTtcblxuICBpZiAodGhpcy5jaGlsZCA9PSBudWxsKSB7XG4gICAgbm9PZkNoaWxkcmVuID0gMTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmNoaWxkLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlID0gbm9kZXNbaV07XG5cbiAgICAgIG5vT2ZDaGlsZHJlbiArPSBjaGlsZE5vZGUuZ2V0Tm9PZkNoaWxkcmVuKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vT2ZDaGlsZHJlbiA9PSAwKSB7XG4gICAgbm9PZkNoaWxkcmVuID0gMTtcbiAgfVxuICByZXR1cm4gbm9PZkNoaWxkcmVuO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmVzdGltYXRlZFNpemUgPT0gSW50ZWdlci5NSU5fVkFMVUUpIHtcbiAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgfVxuICByZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplO1xufTtcblxuTE5vZGUucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jaGlsZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZSA9ICh0aGlzLnJlY3Qud2lkdGggKyB0aGlzLnJlY3QuaGVpZ2h0KSAvIDI7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lc3RpbWF0ZWRTaXplID0gdGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpO1xuICAgIHRoaXMucmVjdC53aWR0aCA9IHRoaXMuZXN0aW1hdGVkU2l6ZTtcbiAgICB0aGlzLnJlY3QuaGVpZ2h0ID0gdGhpcy5lc3RpbWF0ZWRTaXplO1xuXG4gICAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbiAgfVxufTtcblxuTE5vZGUucHJvdG90eXBlLnNjYXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByYW5kb21DZW50ZXJYO1xuICB2YXIgcmFuZG9tQ2VudGVyWTtcblxuICB2YXIgbWluWCA9IC1MYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtcbiAgdmFyIG1heFggPSBMYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtcbiAgcmFuZG9tQ2VudGVyWCA9IExheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWCArIFJhbmRvbVNlZWQubmV4dERvdWJsZSgpICogKG1heFggLSBtaW5YKSArIG1pblg7XG5cbiAgdmFyIG1pblkgPSAtTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHZhciBtYXhZID0gTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHJhbmRvbUNlbnRlclkgPSBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1kgKyBSYW5kb21TZWVkLm5leHREb3VibGUoKSAqIChtYXhZIC0gbWluWSkgKyBtaW5ZO1xuXG4gIHRoaXMucmVjdC54ID0gcmFuZG9tQ2VudGVyWDtcbiAgdGhpcy5yZWN0LnkgPSByYW5kb21DZW50ZXJZO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgaWYgKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCAhPSAwKSB7XG4gICAgLy8gd3JhcCB0aGUgY2hpbGRyZW4gbm9kZXMgYnkgcmUtYXJyYW5naW5nIHRoZSBib3VuZGFyaWVzXG4gICAgdmFyIGNoaWxkR3JhcGggPSB0aGlzLmdldENoaWxkKCk7XG4gICAgY2hpbGRHcmFwaC51cGRhdGVCb3VuZHModHJ1ZSk7XG5cbiAgICB0aGlzLnJlY3QueCA9IGNoaWxkR3JhcGguZ2V0TGVmdCgpO1xuICAgIHRoaXMucmVjdC55ID0gY2hpbGRHcmFwaC5nZXRUb3AoKTtcblxuICAgIHRoaXMuc2V0V2lkdGgoY2hpbGRHcmFwaC5nZXRSaWdodCgpIC0gY2hpbGRHcmFwaC5nZXRMZWZ0KCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0KGNoaWxkR3JhcGguZ2V0Qm90dG9tKCkgLSBjaGlsZEdyYXBoLmdldFRvcCgpKTtcblxuICAgIC8vIFVwZGF0ZSBjb21wb3VuZCBib3VuZHMgY29uc2lkZXJpbmcgaXRzIGxhYmVsIHByb3BlcnRpZXMgICAgXG4gICAgaWYgKExheW91dENvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpIHtcblxuICAgICAgdmFyIHdpZHRoID0gY2hpbGRHcmFwaC5nZXRSaWdodCgpIC0gY2hpbGRHcmFwaC5nZXRMZWZ0KCk7XG4gICAgICB2YXIgaGVpZ2h0ID0gY2hpbGRHcmFwaC5nZXRCb3R0b20oKSAtIGNoaWxkR3JhcGguZ2V0VG9wKCk7XG5cbiAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggPiB3aWR0aCkge1xuICAgICAgICB0aGlzLnJlY3QueCAtPSAodGhpcy5sYWJlbFdpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbFBvcyA9PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgdGhpcy5yZWN0LnkgLT0gKHRoaXMubGFiZWxIZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhYmVsUG9zID09IFwidG9wXCIpIHtcbiAgICAgICAgICB0aGlzLnJlY3QueSAtPSB0aGlzLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmFucykge1xuICB2YXIgbGVmdCA9IHRoaXMucmVjdC54O1xuXG4gIGlmIChsZWZ0ID4gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZKSB7XG4gICAgbGVmdCA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWTtcbiAgfSBlbHNlIGlmIChsZWZ0IDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIGxlZnQgPSAtTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZO1xuICB9XG5cbiAgdmFyIHRvcCA9IHRoaXMucmVjdC55O1xuXG4gIGlmICh0b3AgPiBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkpIHtcbiAgICB0b3AgPSBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH0gZWxzZSBpZiAodG9wIDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIHRvcCA9IC1MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH1cblxuICB2YXIgbGVmdFRvcCA9IG5ldyBQb2ludEQobGVmdCwgdG9wKTtcbiAgdmFyIHZMZWZ0VG9wID0gdHJhbnMuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGxlZnRUb3ApO1xuXG4gIHRoaXMuc2V0TG9jYXRpb24odkxlZnRUb3AueCwgdkxlZnRUb3AueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0Lnk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3duZXIgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXIuZ2V0UGFyZW50KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExOb2RlO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gUG9pbnREKHgsIHkpIHtcbiAgaWYgKHggPT0gbnVsbCAmJiB5ID09IG51bGwpIHtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG59XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueDtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueTtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuc2V0WCA9IGZ1bmN0aW9uICh4KSB7XG4gIHRoaXMueCA9IHg7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbiAoeSkge1xuICB0aGlzLnkgPSB5O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5nZXREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHB0KSB7XG4gIHJldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLnggLSBwdC54LCB0aGlzLnkgLSBwdC55KTtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuZ2V0Q29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludEQodGhpcy54LCB0aGlzLnkpO1xufTtcblxuUG9pbnRELnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoZGltKSB7XG4gIHRoaXMueCArPSBkaW0ud2lkdGg7XG4gIHRoaXMueSArPSBkaW0uaGVpZ2h0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9pbnREO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBSZWN0YW5nbGVEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgUG9pbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbmZ1bmN0aW9uIExHcmFwaChwYXJlbnQsIG9iajIsIHZHcmFwaCkge1xuICBMR3JhcGhPYmplY3QuY2FsbCh0aGlzLCB2R3JhcGgpO1xuICB0aGlzLmVzdGltYXRlZFNpemUgPSBJbnRlZ2VyLk1JTl9WQUxVRTtcbiAgdGhpcy5tYXJnaW4gPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFQSF9NQVJHSU47XG4gIHRoaXMuZWRnZXMgPSBbXTtcbiAgdGhpcy5ub2RlcyA9IFtdO1xuICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gIGlmIChvYmoyICE9IG51bGwgJiYgb2JqMiBpbnN0YW5jZW9mIExHcmFwaE1hbmFnZXIpIHtcbiAgICB0aGlzLmdyYXBoTWFuYWdlciA9IG9iajI7XG4gIH0gZWxzZSBpZiAob2JqMiAhPSBudWxsICYmIG9iajIgaW5zdGFuY2VvZiBMYXlvdXQpIHtcbiAgICB0aGlzLmdyYXBoTWFuYWdlciA9IG9iajIuZ3JhcGhNYW5hZ2VyO1xuICB9XG59XG5cbkxHcmFwaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExHcmFwaE9iamVjdC5wcm90b3R5cGUpO1xuZm9yICh2YXIgcHJvcCBpbiBMR3JhcGhPYmplY3QpIHtcbiAgTEdyYXBoW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MR3JhcGgucHJvdG90eXBlLmdldE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlcztcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0RWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmVkZ2VzO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlcjtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldExlZnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxlZnQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yaWdodDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy50b3A7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYm90dG9tO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5pc0Nvbm5lY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQ7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmoxLCBzb3VyY2VOb2RlLCB0YXJnZXROb2RlKSB7XG4gIGlmIChzb3VyY2VOb2RlID09IG51bGwgJiYgdGFyZ2V0Tm9kZSA9PSBudWxsKSB7XG4gICAgdmFyIG5ld05vZGUgPSBvYmoxO1xuICAgIGlmICh0aGlzLmdyYXBoTWFuYWdlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihuZXdOb2RlKSA+IC0xKSB7XG4gICAgICB0aHJvdyBcIk5vZGUgYWxyZWFkeSBpbiBncmFwaCFcIjtcbiAgICB9XG4gICAgbmV3Tm9kZS5vd25lciA9IHRoaXM7XG4gICAgdGhpcy5nZXROb2RlcygpLnB1c2gobmV3Tm9kZSk7XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV3RWRnZSA9IG9iajE7XG4gICAgaWYgKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2Yoc291cmNlTm9kZSkgPiAtMSAmJiB0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih0YXJnZXROb2RlKSA+IC0xKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCFcIjtcbiAgICB9XG5cbiAgICBpZiAoIShzb3VyY2VOb2RlLm93bmVyID09IHRhcmdldE5vZGUub3duZXIgJiYgc291cmNlTm9kZS5vd25lciA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghXCI7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZU5vZGUub3duZXIgIT0gdGFyZ2V0Tm9kZS5vd25lcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gc2V0IHNvdXJjZSBhbmQgdGFyZ2V0XG4gICAgbmV3RWRnZS5zb3VyY2UgPSBzb3VyY2VOb2RlO1xuICAgIG5ld0VkZ2UudGFyZ2V0ID0gdGFyZ2V0Tm9kZTtcblxuICAgIC8vIHNldCBhcyBpbnRyYS1ncmFwaCBlZGdlXG4gICAgbmV3RWRnZS5pc0ludGVyR3JhcGggPSBmYWxzZTtcblxuICAgIC8vIGFkZCB0byBncmFwaCBlZGdlIGxpc3RcbiAgICB0aGlzLmdldEVkZ2VzKCkucHVzaChuZXdFZGdlKTtcblxuICAgIC8vIGFkZCB0byBpbmNpZGVuY3kgbGlzdHNcbiAgICBzb3VyY2VOb2RlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG5cbiAgICBpZiAodGFyZ2V0Tm9kZSAhPSBzb3VyY2VOb2RlKSB7XG4gICAgICB0YXJnZXROb2RlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0VkZ2U7XG4gIH1cbn07XG5cbkxHcmFwaC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgbm9kZSA9IG9iajtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIExOb2RlKSB7XG4gICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJOb2RlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghKG5vZGUub3duZXIgIT0gbnVsbCAmJiBub2RlLm93bmVyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIk93bmVyIGdyYXBoIGlzIGludmFsaWQhXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyYXBoTWFuYWdlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIk93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCFcIjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIGluY2lkZW50IGVkZ2VzIGZpcnN0IChtYWtlIGEgY29weSB0byBkbyBpdCBzYWZlbHkpXG4gICAgdmFyIGVkZ2VzVG9CZVJlbW92ZWQgPSBub2RlLmVkZ2VzLnNsaWNlKCk7XG4gICAgdmFyIGVkZ2U7XG4gICAgdmFyIHMgPSBlZGdlc1RvQmVSZW1vdmVkLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzVG9CZVJlbW92ZWRbaV07XG5cbiAgICAgIGlmIChlZGdlLmlzSW50ZXJHcmFwaCkge1xuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoZWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGdlLnNvdXJjZS5vd25lci5yZW1vdmUoZWRnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm93IHRoZSBub2RlIGl0c2VsZlxuICAgIHZhciBpbmRleCA9IHRoaXMubm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgIHRocm93IFwiTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0IVwiO1xuICAgIH1cblxuICAgIHRoaXMubm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMRWRnZSkge1xuICAgIHZhciBlZGdlID0gb2JqO1xuICAgIGlmIChlZGdlID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiRWRnZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoIShlZGdlLnNvdXJjZSAhPSBudWxsICYmIGVkZ2UudGFyZ2V0ICE9IG51bGwpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghKGVkZ2Uuc291cmNlLm93bmVyICE9IG51bGwgJiYgZWRnZS50YXJnZXQub3duZXIgIT0gbnVsbCAmJiBlZGdlLnNvdXJjZS5vd25lciA9PSB0aGlzICYmIGVkZ2UudGFyZ2V0Lm93bmVyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhXCI7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZUluZGV4ID0gZWRnZS5zb3VyY2UuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICB2YXIgdGFyZ2V0SW5kZXggPSBlZGdlLnRhcmdldC5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGlmICghKHNvdXJjZUluZGV4ID4gLTEgJiYgdGFyZ2V0SW5kZXggPiAtMSkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSFcIjtcbiAgICB9XG5cbiAgICBlZGdlLnNvdXJjZS5lZGdlcy5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuXG4gICAgaWYgKGVkZ2UudGFyZ2V0ICE9IGVkZ2Uuc291cmNlKSB7XG4gICAgICBlZGdlLnRhcmdldC5lZGdlcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGVkZ2Uuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZihlZGdlKTtcbiAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgIHRocm93IFwiTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0IVwiO1xuICAgIH1cblxuICAgIGVkZ2Uuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuTEdyYXBoLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG9wID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBsZWZ0ID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBub2RlVG9wO1xuICB2YXIgbm9kZUxlZnQ7XG4gIHZhciBtYXJnaW47XG5cbiAgdmFyIG5vZGVzID0gdGhpcy5nZXROb2RlcygpO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuICAgIG5vZGVUb3AgPSBsTm9kZS5nZXRUb3AoKTtcbiAgICBub2RlTGVmdCA9IGxOb2RlLmdldExlZnQoKTtcblxuICAgIGlmICh0b3AgPiBub2RlVG9wKSB7XG4gICAgICB0b3AgPSBub2RlVG9wO1xuICAgIH1cblxuICAgIGlmIChsZWZ0ID4gbm9kZUxlZnQpIHtcbiAgICAgIGxlZnQgPSBub2RlTGVmdDtcbiAgICB9XG4gIH1cblxuICAvLyBEbyB3ZSBoYXZlIGFueSBub2RlcyBpbiB0aGlzIGdyYXBoP1xuICBpZiAodG9wID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAobm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgbWFyZ2luID0gbm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ7XG4gIH0gZWxzZSB7XG4gICAgbWFyZ2luID0gdGhpcy5tYXJnaW47XG4gIH1cblxuICB0aGlzLmxlZnQgPSBsZWZ0IC0gbWFyZ2luO1xuICB0aGlzLnRvcCA9IHRvcCAtIG1hcmdpbjtcblxuICAvLyBBcHBseSB0aGUgbWFyZ2lucyBhbmQgcmV0dXJuIHRoZSByZXN1bHRcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmxlZnQsIHRoaXMudG9wKTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuICAvLyBjYWxjdWxhdGUgYm91bmRzXG4gIHZhciBsZWZ0ID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciByaWdodCA9IC1JbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHRvcCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgYm90dG9tID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbm9kZUxlZnQ7XG4gIHZhciBub2RlUmlnaHQ7XG4gIHZhciBub2RlVG9wO1xuICB2YXIgbm9kZUJvdHRvbTtcbiAgdmFyIG1hcmdpbjtcblxuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbE5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChyZWN1cnNpdmUgJiYgbE5vZGUuY2hpbGQgIT0gbnVsbCkge1xuICAgICAgbE5vZGUudXBkYXRlQm91bmRzKCk7XG4gICAgfVxuICAgIG5vZGVMZWZ0ID0gbE5vZGUuZ2V0TGVmdCgpO1xuICAgIG5vZGVSaWdodCA9IGxOb2RlLmdldFJpZ2h0KCk7XG4gICAgbm9kZVRvcCA9IGxOb2RlLmdldFRvcCgpO1xuICAgIG5vZGVCb3R0b20gPSBsTm9kZS5nZXRCb3R0b20oKTtcblxuICAgIGlmIChsZWZ0ID4gbm9kZUxlZnQpIHtcbiAgICAgIGxlZnQgPSBub2RlTGVmdDtcbiAgICB9XG5cbiAgICBpZiAocmlnaHQgPCBub2RlUmlnaHQpIHtcbiAgICAgIHJpZ2h0ID0gbm9kZVJpZ2h0O1xuICAgIH1cblxuICAgIGlmICh0b3AgPiBub2RlVG9wKSB7XG4gICAgICB0b3AgPSBub2RlVG9wO1xuICAgIH1cblxuICAgIGlmIChib3R0b20gPCBub2RlQm90dG9tKSB7XG4gICAgICBib3R0b20gPSBub2RlQm90dG9tO1xuICAgIH1cbiAgfVxuXG4gIHZhciBib3VuZGluZ1JlY3QgPSBuZXcgUmVjdGFuZ2xlRChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTtcbiAgaWYgKGxlZnQgPT0gSW50ZWdlci5NQVhfVkFMVUUpIHtcbiAgICB0aGlzLmxlZnQgPSB0aGlzLnBhcmVudC5nZXRMZWZ0KCk7XG4gICAgdGhpcy5yaWdodCA9IHRoaXMucGFyZW50LmdldFJpZ2h0KCk7XG4gICAgdGhpcy50b3AgPSB0aGlzLnBhcmVudC5nZXRUb3AoKTtcbiAgICB0aGlzLmJvdHRvbSA9IHRoaXMucGFyZW50LmdldEJvdHRvbSgpO1xuICB9XG5cbiAgaWYgKG5vZGVzWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0ICE9IHVuZGVmaW5lZCkge1xuICAgIG1hcmdpbiA9IG5vZGVzWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0O1xuICB9IGVsc2Uge1xuICAgIG1hcmdpbiA9IHRoaXMubWFyZ2luO1xuICB9XG5cbiAgdGhpcy5sZWZ0ID0gYm91bmRpbmdSZWN0LnggLSBtYXJnaW47XG4gIHRoaXMucmlnaHQgPSBib3VuZGluZ1JlY3QueCArIGJvdW5kaW5nUmVjdC53aWR0aCArIG1hcmdpbjtcbiAgdGhpcy50b3AgPSBib3VuZGluZ1JlY3QueSAtIG1hcmdpbjtcbiAgdGhpcy5ib3R0b20gPSBib3VuZGluZ1JlY3QueSArIGJvdW5kaW5nUmVjdC5oZWlnaHQgKyBtYXJnaW47XG59O1xuXG5MR3JhcGguY2FsY3VsYXRlQm91bmRzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIHZhciBsZWZ0ID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciByaWdodCA9IC1JbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHRvcCA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgYm90dG9tID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbm9kZUxlZnQ7XG4gIHZhciBub2RlUmlnaHQ7XG4gIHZhciBub2RlVG9wO1xuICB2YXIgbm9kZUJvdHRvbTtcblxuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuICAgIG5vZGVMZWZ0ID0gbE5vZGUuZ2V0TGVmdCgpO1xuICAgIG5vZGVSaWdodCA9IGxOb2RlLmdldFJpZ2h0KCk7XG4gICAgbm9kZVRvcCA9IGxOb2RlLmdldFRvcCgpO1xuICAgIG5vZGVCb3R0b20gPSBsTm9kZS5nZXRCb3R0b20oKTtcblxuICAgIGlmIChsZWZ0ID4gbm9kZUxlZnQpIHtcbiAgICAgIGxlZnQgPSBub2RlTGVmdDtcbiAgICB9XG5cbiAgICBpZiAocmlnaHQgPCBub2RlUmlnaHQpIHtcbiAgICAgIHJpZ2h0ID0gbm9kZVJpZ2h0O1xuICAgIH1cblxuICAgIGlmICh0b3AgPiBub2RlVG9wKSB7XG4gICAgICB0b3AgPSBub2RlVG9wO1xuICAgIH1cblxuICAgIGlmIChib3R0b20gPCBub2RlQm90dG9tKSB7XG4gICAgICBib3R0b20gPSBub2RlQm90dG9tO1xuICAgIH1cbiAgfVxuXG4gIHZhciBib3VuZGluZ1JlY3QgPSBuZXcgUmVjdGFuZ2xlRChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTtcblxuICByZXR1cm4gYm91bmRpbmdSZWN0O1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzID09IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKTtcbiAgfVxufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5lc3RpbWF0ZWRTaXplID09IEludGVnZXIuTUlOX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcztcbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbE5vZGUgPSBub2Rlc1tpXTtcbiAgICBzaXplICs9IGxOb2RlLmNhbGNFc3RpbWF0ZWRTaXplKCk7XG4gIH1cblxuICBpZiAoc2l6ZSA9PSAwKSB7XG4gICAgdGhpcy5lc3RpbWF0ZWRTaXplID0gTGF5b3V0Q29uc3RhbnRzLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVzdGltYXRlZFNpemUgPSBzaXplIC8gTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemU7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPT0gMCkge1xuICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0KCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgY3VycmVudE5vZGUgPSB0aGlzLm5vZGVzWzBdO1xuICB2YXIgbmVpZ2hib3JFZGdlcztcbiAgdmFyIGN1cnJlbnROZWlnaGJvcjtcbiAgdmFyIGNoaWxkcmVuT2ZOb2RlID0gY3VycmVudE5vZGUud2l0aENoaWxkcmVuKCk7XG4gIGNoaWxkcmVuT2ZOb2RlLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBxdWV1ZS5wdXNoKG5vZGUpO1xuICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICB9KTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoICE9PSAwKSB7XG4gICAgY3VycmVudE5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuXG4gICAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgICBuZWlnaGJvckVkZ2VzID0gY3VycmVudE5vZGUuZ2V0RWRnZXMoKTtcbiAgICB2YXIgc2l6ZSA9IG5laWdoYm9yRWRnZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgbmVpZ2hib3JFZGdlID0gbmVpZ2hib3JFZGdlc1tpXTtcbiAgICAgIGN1cnJlbnROZWlnaGJvciA9IG5laWdoYm9yRWRnZS5nZXRPdGhlckVuZEluR3JhcGgoY3VycmVudE5vZGUsIHRoaXMpO1xuXG4gICAgICAvLyBBZGQgdW52aXNpdGVkIG5laWdoYm9ycyB0byB0aGUgbGlzdCB0byB2aXNpdFxuICAgICAgaWYgKGN1cnJlbnROZWlnaGJvciAhPSBudWxsICYmICF2aXNpdGVkLmhhcyhjdXJyZW50TmVpZ2hib3IpKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbk9mTmVpZ2hib3IgPSBjdXJyZW50TmVpZ2hib3Iud2l0aENoaWxkcmVuKCk7XG5cbiAgICAgICAgY2hpbGRyZW5PZk5laWdoYm9yLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBxdWV1ZS5wdXNoKG5vZGUpO1xuICAgICAgICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7XG5cbiAgaWYgKHZpc2l0ZWQuc2l6ZSA+PSB0aGlzLm5vZGVzLmxlbmd0aCkge1xuICAgIHZhciBub09mVmlzaXRlZEluVGhpc0dyYXBoID0gMDtcblxuICAgIHZpc2l0ZWQuZm9yRWFjaChmdW5jdGlvbiAodmlzaXRlZE5vZGUpIHtcbiAgICAgIGlmICh2aXNpdGVkTm9kZS5vd25lciA9PSBzZWxmKSB7XG4gICAgICAgIG5vT2ZWaXNpdGVkSW5UaGlzR3JhcGgrKztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChub09mVmlzaXRlZEluVGhpc0dyYXBoID09IHRoaXMubm9kZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExHcmFwaDtcbnZhciBMRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cbmZ1bmN0aW9uIExHcmFwaE1hbmFnZXIobGF5b3V0KSB7XG4gIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7IC8vIEl0IG1heSBiZSBiZXR0ZXIgdG8gaW5pdGlsaXplIHRoaXMgb3V0IG9mIHRoaXMgZnVuY3Rpb24gYnV0IGl0IGdpdmVzIGFuIGVycm9yIChSaWdodC1oYW5kIHNpZGUgb2YgJ2luc3RhbmNlb2YnIGlzIG5vdCBjYWxsYWJsZSkgbm93LlxuICB0aGlzLmxheW91dCA9IGxheW91dDtcblxuICB0aGlzLmdyYXBocyA9IFtdO1xuICB0aGlzLmVkZ2VzID0gW107XG59XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmFkZFJvb3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBuZ3JhcGggPSB0aGlzLmxheW91dC5uZXdHcmFwaCgpO1xuICB2YXIgbm5vZGUgPSB0aGlzLmxheW91dC5uZXdOb2RlKG51bGwpO1xuICB2YXIgcm9vdCA9IHRoaXMuYWRkKG5ncmFwaCwgbm5vZGUpO1xuICB0aGlzLnNldFJvb3RHcmFwaChyb290KTtcbiAgcmV0dXJuIHRoaXMucm9vdEdyYXBoO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5ld0dyYXBoLCBwYXJlbnROb2RlLCBuZXdFZGdlLCBzb3VyY2VOb2RlLCB0YXJnZXROb2RlKSB7XG4gIC8vdGhlcmUgYXJlIGp1c3QgMiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhlbiBpdCBhZGRzIGFuIExHcmFwaCBlbHNlIGl0IGFkZHMgYW4gTEVkZ2VcbiAgaWYgKG5ld0VkZ2UgPT0gbnVsbCAmJiBzb3VyY2VOb2RlID09IG51bGwgJiYgdGFyZ2V0Tm9kZSA9PSBudWxsKSB7XG4gICAgaWYgKG5ld0dyYXBoID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiR3JhcGggaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJQYXJlbnQgbm9kZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5ncmFwaHMuaW5kZXhPZihuZXdHcmFwaCkgPiAtMSkge1xuICAgICAgdGhyb3cgXCJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhzLnB1c2gobmV3R3JhcGgpO1xuXG4gICAgaWYgKG5ld0dyYXBoLnBhcmVudCAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkFscmVhZHkgaGFzIGEgcGFyZW50IVwiO1xuICAgIH1cbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZCAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBcIkFscmVhZHkgaGFzIGEgY2hpbGQhXCI7XG4gICAgfVxuXG4gICAgbmV3R3JhcGgucGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmNoaWxkID0gbmV3R3JhcGg7XG5cbiAgICByZXR1cm4gbmV3R3JhcGg7XG4gIH0gZWxzZSB7XG4gICAgLy9jaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzXG4gICAgdGFyZ2V0Tm9kZSA9IG5ld0VkZ2U7XG4gICAgc291cmNlTm9kZSA9IHBhcmVudE5vZGU7XG4gICAgbmV3RWRnZSA9IG5ld0dyYXBoO1xuICAgIHZhciBzb3VyY2VHcmFwaCA9IHNvdXJjZU5vZGUuZ2V0T3duZXIoKTtcbiAgICB2YXIgdGFyZ2V0R3JhcGggPSB0YXJnZXROb2RlLmdldE93bmVyKCk7XG5cbiAgICBpZiAoIShzb3VyY2VHcmFwaCAhPSBudWxsICYmIHNvdXJjZUdyYXBoLmdldEdyYXBoTWFuYWdlcigpID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBub3QgaW4gdGhpcyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuICAgIGlmICghKHRhcmdldEdyYXBoICE9IG51bGwgJiYgdGFyZ2V0R3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlR3JhcGggPT0gdGFyZ2V0R3JhcGgpIHtcbiAgICAgIG5ld0VkZ2UuaXNJbnRlckdyYXBoID0gZmFsc2U7XG4gICAgICByZXR1cm4gc291cmNlR3JhcGguYWRkKG5ld0VkZ2UsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFZGdlLmlzSW50ZXJHcmFwaCA9IHRydWU7XG5cbiAgICAgIC8vIHNldCBzb3VyY2UgYW5kIHRhcmdldFxuICAgICAgbmV3RWRnZS5zb3VyY2UgPSBzb3VyY2VOb2RlO1xuICAgICAgbmV3RWRnZS50YXJnZXQgPSB0YXJnZXROb2RlO1xuXG4gICAgICAvLyBhZGQgZWRnZSB0byBpbnRlci1ncmFwaCBlZGdlIGxpc3RcbiAgICAgIGlmICh0aGlzLmVkZ2VzLmluZGV4T2YobmV3RWRnZSkgPiAtMSkge1xuICAgICAgICB0aHJvdyBcIkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhXCI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWRnZXMucHVzaChuZXdFZGdlKTtcblxuICAgICAgLy8gYWRkIGVkZ2UgdG8gc291cmNlIGFuZCB0YXJnZXQgaW5jaWRlbmN5IGxpc3RzXG4gICAgICBpZiAoIShuZXdFZGdlLnNvdXJjZSAhPSBudWxsICYmIG5ld0VkZ2UudGFyZ2V0ICE9IG51bGwpKSB7XG4gICAgICAgIHRocm93IFwiRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsIVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShuZXdFZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKG5ld0VkZ2UpID09IC0xICYmIG5ld0VkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YobmV3RWRnZSkgPT0gLTEpKSB7XG4gICAgICAgIHRocm93IFwiRWRnZSBhbHJlYWR5IGluIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGluY2lkZW5jeSBsaXN0IVwiO1xuICAgICAgfVxuXG4gICAgICBuZXdFZGdlLnNvdXJjZS5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuICAgICAgbmV3RWRnZS50YXJnZXQuZWRnZXMucHVzaChuZXdFZGdlKTtcblxuICAgICAgcmV0dXJuIG5ld0VkZ2U7XG4gICAgfVxuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobE9iaikge1xuICBpZiAobE9iaiBpbnN0YW5jZW9mIExHcmFwaCkge1xuICAgIHZhciBncmFwaCA9IGxPYmo7XG4gICAgaWYgKGdyYXBoLmdldEdyYXBoTWFuYWdlcigpICE9IHRoaXMpIHtcbiAgICAgIHRocm93IFwiR3JhcGggbm90IGluIHRoaXMgZ3JhcGggbWdyXCI7XG4gICAgfVxuICAgIGlmICghKGdyYXBoID09IHRoaXMucm9vdEdyYXBoIHx8IGdyYXBoLnBhcmVudCAhPSBudWxsICYmIGdyYXBoLnBhcmVudC5ncmFwaE1hbmFnZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiSW52YWxpZCBwYXJlbnQgbm9kZSFcIjtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB0aGUgZWRnZXMgKG1ha2UgYSBjb3B5IHRvIGRvIGl0IHNhZmVseSlcbiAgICB2YXIgZWRnZXNUb0JlUmVtb3ZlZCA9IFtdO1xuXG4gICAgZWRnZXNUb0JlUmVtb3ZlZCA9IGVkZ2VzVG9CZVJlbW92ZWQuY29uY2F0KGdyYXBoLmdldEVkZ2VzKCkpO1xuXG4gICAgdmFyIGVkZ2U7XG4gICAgdmFyIHMgPSBlZGdlc1RvQmVSZW1vdmVkLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzVG9CZVJlbW92ZWRbaV07XG4gICAgICBncmFwaC5yZW1vdmUoZWRnZSk7XG4gICAgfVxuXG4gICAgLy8gdGhlbiB0aGUgbm9kZXMgKG1ha2UgYSBjb3B5IHRvIGRvIGl0IHNhZmVseSlcbiAgICB2YXIgbm9kZXNUb0JlUmVtb3ZlZCA9IFtdO1xuXG4gICAgbm9kZXNUb0JlUmVtb3ZlZCA9IG5vZGVzVG9CZVJlbW92ZWQuY29uY2F0KGdyYXBoLmdldE5vZGVzKCkpO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgcyA9IG5vZGVzVG9CZVJlbW92ZWQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNUb0JlUmVtb3ZlZFtpXTtcbiAgICAgIGdyYXBoLnJlbW92ZShub2RlKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBncmFwaCBpcyB0aGUgcm9vdFxuICAgIGlmIChncmFwaCA9PSB0aGlzLnJvb3RHcmFwaCkge1xuICAgICAgdGhpcy5zZXRSb290R3JhcGgobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gbm93IHJlbW92ZSB0aGUgZ3JhcGggaXRzZWxmXG4gICAgdmFyIGluZGV4ID0gdGhpcy5ncmFwaHMuaW5kZXhPZihncmFwaCk7XG4gICAgdGhpcy5ncmFwaHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIC8vIGFsc28gcmVzZXQgdGhlIHBhcmVudCBvZiB0aGUgZ3JhcGhcbiAgICBncmFwaC5wYXJlbnQgPSBudWxsO1xuICB9IGVsc2UgaWYgKGxPYmogaW5zdGFuY2VvZiBMRWRnZSkge1xuICAgIGVkZ2UgPSBsT2JqO1xuICAgIGlmIChlZGdlID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiRWRnZSBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoIWVkZ2UuaXNJbnRlckdyYXBoKSB7XG4gICAgICB0aHJvdyBcIk5vdCBhbiBpbnRlci1ncmFwaCBlZGdlIVwiO1xuICAgIH1cbiAgICBpZiAoIShlZGdlLnNvdXJjZSAhPSBudWxsICYmIGVkZ2UudGFyZ2V0ICE9IG51bGwpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhXCI7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGVkZ2UgZnJvbSBzb3VyY2UgYW5kIHRhcmdldCBub2RlcycgaW5jaWRlbmN5IGxpc3RzXG5cbiAgICBpZiAoIShlZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKGVkZ2UpICE9IC0xICYmIGVkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YoZWRnZSkgIT0gLTEpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhXCI7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gZWRnZS5zb3VyY2UuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBlZGdlLnNvdXJjZS5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0gZWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihlZGdlKTtcbiAgICBlZGdlLnRhcmdldC5lZGdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gcmVtb3ZlIGVkZ2UgZnJvbSBvd25lciBncmFwaCBtYW5hZ2VyJ3MgaW50ZXItZ3JhcGggZWRnZSBsaXN0XG5cbiAgICBpZiAoIShlZGdlLnNvdXJjZS5vd25lciAhPSBudWxsICYmIGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpICE9IG51bGwpKSB7XG4gICAgICB0aHJvdyBcIkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAoZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihlZGdlKSA9PSAtMSkge1xuICAgICAgdGhyb3cgXCJOb3QgaW4gb3duZXIgZ3JhcGggbWFuYWdlcidzIGVkZ2UgbGlzdCFcIjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBlZGdlLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKHRydWUpO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0R3JhcGhzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaHM7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYWxsTm9kZXMgPT0gbnVsbCkge1xuICAgIHZhciBub2RlTGlzdCA9IFtdO1xuICAgIHZhciBncmFwaHMgPSB0aGlzLmdldEdyYXBocygpO1xuICAgIHZhciBzID0gZ3JhcGhzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgbm9kZUxpc3QgPSBub2RlTGlzdC5jb25jYXQoZ3JhcGhzW2ldLmdldE5vZGVzKCkpO1xuICAgIH1cbiAgICB0aGlzLmFsbE5vZGVzID0gbm9kZUxpc3Q7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYWxsTm9kZXM7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFsbE5vZGVzID0gbnVsbDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlc2V0QWxsRWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWxsRWRnZXMgPSBudWxsO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IG51bGw7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbGxFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYWxsRWRnZXMgPT0gbnVsbCkge1xuICAgIHZhciBlZGdlTGlzdCA9IFtdO1xuICAgIHZhciBncmFwaHMgPSB0aGlzLmdldEdyYXBocygpO1xuICAgIHZhciBzID0gZ3JhcGhzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQoZ3JhcGhzW2ldLmdldEVkZ2VzKCkpO1xuICAgIH1cblxuICAgIGVkZ2VMaXN0ID0gZWRnZUxpc3QuY29uY2F0KHRoaXMuZWRnZXMpO1xuXG4gICAgdGhpcy5hbGxFZGdlcyA9IGVkZ2VMaXN0O1xuICB9XG4gIHJldHVybiB0aGlzLmFsbEVkZ2VzO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gPSBmdW5jdGlvbiAobm9kZUxpc3QpIHtcbiAgaWYgKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24gIT0gbnVsbCkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IG5vZGVMaXN0O1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0Um9vdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucm9vdEdyYXBoO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuc2V0Um9vdEdyYXBoID0gZnVuY3Rpb24gKGdyYXBoKSB7XG4gIGlmIChncmFwaC5nZXRHcmFwaE1hbmFnZXIoKSAhPSB0aGlzKSB7XG4gICAgdGhyb3cgXCJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgfVxuXG4gIHRoaXMucm9vdEdyYXBoID0gZ3JhcGg7XG4gIC8vIHJvb3QgZ3JhcGggbXVzdCBoYXZlIGEgcm9vdCBub2RlIGFzc29jaWF0ZWQgd2l0aCBpdCBmb3IgY29udmVuaWVuY2VcbiAgaWYgKGdyYXBoLnBhcmVudCA9PSBudWxsKSB7XG4gICAgZ3JhcGgucGFyZW50ID0gdGhpcy5sYXlvdXQubmV3Tm9kZShcIlJvb3Qgbm9kZVwiKTtcbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuZ2V0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sYXlvdXQ7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlciA9IGZ1bmN0aW9uIChmaXJzdE5vZGUsIHNlY29uZE5vZGUpIHtcbiAgaWYgKCEoZmlyc3ROb2RlICE9IG51bGwgJiYgc2Vjb25kTm9kZSAhPSBudWxsKSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgaWYgKGZpcnN0Tm9kZSA9PSBzZWNvbmROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gSXMgc2Vjb25kIG5vZGUgYW4gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IG9uZT9cbiAgdmFyIG93bmVyR3JhcGggPSBmaXJzdE5vZGUuZ2V0T3duZXIoKTtcbiAgdmFyIHBhcmVudE5vZGU7XG5cbiAgZG8ge1xuICAgIHBhcmVudE5vZGUgPSBvd25lckdyYXBoLmdldFBhcmVudCgpO1xuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gc2Vjb25kTm9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb3duZXJHcmFwaCA9IHBhcmVudE5vZGUuZ2V0T3duZXIoKTtcbiAgICBpZiAob3duZXJHcmFwaCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuICAvLyBJcyBmaXJzdCBub2RlIGFuIGFuY2VzdG9yIG9mIHRoZSBzZWNvbmQgb25lP1xuICBvd25lckdyYXBoID0gc2Vjb25kTm9kZS5nZXRPd25lcigpO1xuXG4gIGRvIHtcbiAgICBwYXJlbnROb2RlID0gb3duZXJHcmFwaC5nZXRQYXJlbnQoKTtcblxuICAgIGlmIChwYXJlbnROb2RlID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnROb2RlID09IGZpcnN0Tm9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb3duZXJHcmFwaCA9IHBhcmVudE5vZGUuZ2V0T3duZXIoKTtcbiAgICBpZiAob3duZXJHcmFwaCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlO1xuICB2YXIgc291cmNlTm9kZTtcbiAgdmFyIHRhcmdldE5vZGU7XG4gIHZhciBzb3VyY2VBbmNlc3RvckdyYXBoO1xuICB2YXIgdGFyZ2V0QW5jZXN0b3JHcmFwaDtcblxuICB2YXIgZWRnZXMgPSB0aGlzLmdldEFsbEVkZ2VzKCk7XG4gIHZhciBzID0gZWRnZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIGVkZ2UgPSBlZGdlc1tpXTtcblxuICAgIHNvdXJjZU5vZGUgPSBlZGdlLnNvdXJjZTtcbiAgICB0YXJnZXROb2RlID0gZWRnZS50YXJnZXQ7XG4gICAgZWRnZS5sY2EgPSBudWxsO1xuICAgIGVkZ2Uuc291cmNlSW5MY2EgPSBzb3VyY2VOb2RlO1xuICAgIGVkZ2UudGFyZ2V0SW5MY2EgPSB0YXJnZXROb2RlO1xuXG4gICAgaWYgKHNvdXJjZU5vZGUgPT0gdGFyZ2V0Tm9kZSkge1xuICAgICAgZWRnZS5sY2EgPSBzb3VyY2VOb2RlLmdldE93bmVyKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzb3VyY2VBbmNlc3RvckdyYXBoID0gc291cmNlTm9kZS5nZXRPd25lcigpO1xuXG4gICAgd2hpbGUgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgIGVkZ2UudGFyZ2V0SW5MY2EgPSB0YXJnZXROb2RlO1xuICAgICAgdGFyZ2V0QW5jZXN0b3JHcmFwaCA9IHRhcmdldE5vZGUuZ2V0T3duZXIoKTtcblxuICAgICAgd2hpbGUgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yR3JhcGggPT0gc291cmNlQW5jZXN0b3JHcmFwaCkge1xuICAgICAgICAgIGVkZ2UubGNhID0gdGFyZ2V0QW5jZXN0b3JHcmFwaDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRBbmNlc3RvckdyYXBoID09IHRoaXMucm9vdEdyYXBoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWRnZS5sY2EgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAgICAgICB9XG4gICAgICAgIGVkZ2UudGFyZ2V0SW5MY2EgPSB0YXJnZXRBbmNlc3RvckdyYXBoLmdldFBhcmVudCgpO1xuICAgICAgICB0YXJnZXRBbmNlc3RvckdyYXBoID0gZWRnZS50YXJnZXRJbkxjYS5nZXRPd25lcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc291cmNlQW5jZXN0b3JHcmFwaCA9PSB0aGlzLnJvb3RHcmFwaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgICAgZWRnZS5zb3VyY2VJbkxjYSA9IHNvdXJjZUFuY2VzdG9yR3JhcGguZ2V0UGFyZW50KCk7XG4gICAgICAgIHNvdXJjZUFuY2VzdG9yR3JhcGggPSBlZGdlLnNvdXJjZUluTGNhLmdldE93bmVyKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVkZ2UubGNhID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAgIH1cbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGZpcnN0Tm9kZSwgc2Vjb25kTm9kZSkge1xuICBpZiAoZmlyc3ROb2RlID09IHNlY29uZE5vZGUpIHtcbiAgICByZXR1cm4gZmlyc3ROb2RlLmdldE93bmVyKCk7XG4gIH1cbiAgdmFyIGZpcnN0T3duZXJHcmFwaCA9IGZpcnN0Tm9kZS5nZXRPd25lcigpO1xuXG4gIGRvIHtcbiAgICBpZiAoZmlyc3RPd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgc2Vjb25kT3duZXJHcmFwaCA9IHNlY29uZE5vZGUuZ2V0T3duZXIoKTtcblxuICAgIGRvIHtcbiAgICAgIGlmIChzZWNvbmRPd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRPd25lckdyYXBoID09IGZpcnN0T3duZXJHcmFwaCkge1xuICAgICAgICByZXR1cm4gc2Vjb25kT3duZXJHcmFwaDtcbiAgICAgIH1cbiAgICAgIHNlY29uZE93bmVyR3JhcGggPSBzZWNvbmRPd25lckdyYXBoLmdldFBhcmVudCgpLmdldE93bmVyKCk7XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBmaXJzdE93bmVyR3JhcGggPSBmaXJzdE93bmVyR3JhcGguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKTtcbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmV0dXJuIGZpcnN0T3duZXJHcmFwaDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzID0gZnVuY3Rpb24gKGdyYXBoLCBkZXB0aCkge1xuICBpZiAoZ3JhcGggPT0gbnVsbCAmJiBkZXB0aCA9PSBudWxsKSB7XG4gICAgZ3JhcGggPSB0aGlzLnJvb3RHcmFwaDtcbiAgICBkZXB0aCA9IDE7XG4gIH1cbiAgdmFyIG5vZGU7XG5cbiAgdmFyIG5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTtcbiAgdmFyIHMgPSBub2Rlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgIG5vZGUuaW5jbHVzaW9uVHJlZURlcHRoID0gZGVwdGg7XG5cbiAgICBpZiAobm9kZS5jaGlsZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKG5vZGUuY2hpbGQsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5pbmNsdWRlc0ludmFsaWRFZGdlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZTtcblxuICB2YXIgcyA9IHRoaXMuZWRnZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIGVkZ2UgPSB0aGlzLmVkZ2VzW2ldO1xuXG4gICAgaWYgKHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIoZWRnZS5zb3VyY2UsIGVkZ2UudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5mdW5jdGlvbiBGRExheW91dENvbnN0YW50cygpIHt9XG5cbi8vRkRMYXlvdXRDb25zdGFudHMgaW5oZXJpdHMgc3RhdGljIHByb3BzIGluIExheW91dENvbnN0YW50c1xuZm9yICh2YXIgcHJvcCBpbiBMYXlvdXRDb25zdGFudHMpIHtcbiAgRkRMYXlvdXRDb25zdGFudHNbcHJvcF0gPSBMYXlvdXRDb25zdGFudHNbcHJvcF07XG59XG5cbkZETGF5b3V0Q29uc3RhbnRzLk1BWF9JVEVSQVRJT05TID0gMjUwMDtcblxuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IDUwO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEggPSAwLjQ1O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEggPSA0NTAwLjA7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEggPSAwLjQ7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEggPSAxLjA7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SID0gMy44O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IDEuNTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OID0gdHJ1ZTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTiA9IHRydWU7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gMC4zO1xuRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiA9IDAuMzM7XG5GRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQgPSAxMDAwO1xuRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUID0gNTAwMDtcbkZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCA9IDEwMC4wO1xuRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UID0gRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMICogMztcbkZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLyAxMC4wO1xuRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EID0gMTAwO1xuRkRMYXlvdXRDb25zdGFudHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiA9IDAuMTtcbkZETGF5b3V0Q29uc3RhbnRzLk1JTl9FREdFX0xFTkdUSCA9IDE7XG5GRExheW91dENvbnN0YW50cy5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRCA9IDEwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZETGF5b3V0Q29uc3RhbnRzO1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG1haW50YWlucyBhIGxpc3Qgb2Ygc3RhdGljIGdlb21ldHJ5IHJlbGF0ZWQgdXRpbGl0eSBtZXRob2RzLlxuICpcbiAqXG4gKiBDb3B5cmlnaHQ6IGktVmlzIFJlc2VhcmNoIEdyb3VwLCBCaWxrZW50IFVuaXZlcnNpdHksIDIwMDcgLSBwcmVzZW50XG4gKi9cblxudmFyIFBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbmZ1bmN0aW9uIElHZW9tZXRyeSgpIHt9XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FsY3VsYXRlcyAqaGFsZiogdGhlIGFtb3VudCBpbiB4IGFuZCB5IGRpcmVjdGlvbnMgb2YgdGhlIHR3b1xuICogaW5wdXQgcmVjdGFuZ2xlcyBuZWVkZWQgdG8gc2VwYXJhdGUgdGhlbSBrZWVwaW5nIHRoZWlyIHJlc3BlY3RpdmVcbiAqIHBvc2l0aW9uaW5nLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGluIHRoZSBpbnB1dCBhcnJheS4gQW4gaW5wdXRcbiAqIHNlcGFyYXRpb24gYnVmZmVyIGFkZGVkIHRvIHRoZSBhbW91bnQgaW4gYm90aCBkaXJlY3Rpb25zLiBXZSBhc3N1bWUgdGhhdFxuICogdGhlIHR3byByZWN0YW5nbGVzIGRvIGludGVyc2VjdC5cbiAqL1xuSUdlb21ldHJ5LmNhbGNTZXBhcmF0aW9uQW1vdW50ID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0Qiwgb3ZlcmxhcEFtb3VudCwgc2VwYXJhdGlvbkJ1ZmZlcikge1xuICBpZiAoIXJlY3RBLmludGVyc2VjdHMocmVjdEIpKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cblxuICB2YXIgZGlyZWN0aW9ucyA9IG5ldyBBcnJheSgyKTtcblxuICB0aGlzLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzKHJlY3RBLCByZWN0QiwgZGlyZWN0aW9ucyk7XG5cbiAgb3ZlcmxhcEFtb3VudFswXSA9IE1hdGgubWluKHJlY3RBLmdldFJpZ2h0KCksIHJlY3RCLmdldFJpZ2h0KCkpIC0gTWF0aC5tYXgocmVjdEEueCwgcmVjdEIueCk7XG4gIG92ZXJsYXBBbW91bnRbMV0gPSBNYXRoLm1pbihyZWN0QS5nZXRCb3R0b20oKSwgcmVjdEIuZ2V0Qm90dG9tKCkpIC0gTWF0aC5tYXgocmVjdEEueSwgcmVjdEIueSk7XG5cbiAgLy8gdXBkYXRlIHRoZSBvdmVybGFwcGluZyBhbW91bnRzIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICBpZiAocmVjdEEuZ2V0WCgpIDw9IHJlY3RCLmdldFgoKSAmJiByZWN0QS5nZXRSaWdodCgpID49IHJlY3RCLmdldFJpZ2h0KCkpIHtcbiAgICAvKiBDYXNlIHguMTpcbiAgICAqXG4gICAgKiByZWN0QVxuICAgICogXHR8ICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgKiBcdHwgICAgICAgIF9fX19fX19fXyAgICAgIHxcbiAgICAqIFx0fCAgICAgICAgfCAgICAgICB8ICAgICAgfFxuICAgICogXHR8X19fX19fX198X19fX19fX3xfX19fX198XG4gICAgKiBcdFx0XHQgfCAgICAgICB8XG4gICAgKiAgICAgICAgICAgfCAgICAgICB8XG4gICAgKiAgICAgICAgcmVjdEJcbiAgICAqL1xuICAgIG92ZXJsYXBBbW91bnRbMF0gKz0gTWF0aC5taW4ocmVjdEIuZ2V0WCgpIC0gcmVjdEEuZ2V0WCgpLCByZWN0QS5nZXRSaWdodCgpIC0gcmVjdEIuZ2V0UmlnaHQoKSk7XG4gIH0gZWxzZSBpZiAocmVjdEIuZ2V0WCgpIDw9IHJlY3RBLmdldFgoKSAmJiByZWN0Qi5nZXRSaWdodCgpID49IHJlY3RBLmdldFJpZ2h0KCkpIHtcbiAgICAvKiBDYXNlIHguMjpcbiAgICAqXG4gICAgKiByZWN0QlxuICAgICogXHR8ICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgKiBcdHwgICAgICAgIF9fX19fX19fXyAgICAgIHxcbiAgICAqIFx0fCAgICAgICAgfCAgICAgICB8ICAgICAgfFxuICAgICogXHR8X19fX19fX198X19fX19fX3xfX19fX198XG4gICAgKiBcdFx0XHQgfCAgICAgICB8XG4gICAgKiAgICAgICAgICAgfCAgICAgICB8XG4gICAgKiAgICAgICAgcmVjdEFcbiAgICAqL1xuICAgIG92ZXJsYXBBbW91bnRbMF0gKz0gTWF0aC5taW4ocmVjdEEuZ2V0WCgpIC0gcmVjdEIuZ2V0WCgpLCByZWN0Qi5nZXRSaWdodCgpIC0gcmVjdEEuZ2V0UmlnaHQoKSk7XG4gIH1cbiAgaWYgKHJlY3RBLmdldFkoKSA8PSByZWN0Qi5nZXRZKCkgJiYgcmVjdEEuZ2V0Qm90dG9tKCkgPj0gcmVjdEIuZ2V0Qm90dG9tKCkpIHtcbiAgICAvKiBDYXNlIHkuMTpcbiAgICAgKiAgICAgICAgICBfX19fX19fXyByZWN0QVxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgX19fX19ffF9fX18gIHJlY3RCXG4gICAgICogICAgICAgICB8ICAgIHxcbiAgICAgKiAgICAgICAgIHwgICAgfFxuICAgICAqICAgX19fX19ffF9fX198XG4gICAgICogICAgICAgICB8XG4gICAgICogICAgICAgICB8XG4gICAgICogICAgICAgICB8X19fX19fX19cbiAgICAgKlxuICAgICAqL1xuICAgIG92ZXJsYXBBbW91bnRbMV0gKz0gTWF0aC5taW4ocmVjdEIuZ2V0WSgpIC0gcmVjdEEuZ2V0WSgpLCByZWN0QS5nZXRCb3R0b20oKSAtIHJlY3RCLmdldEJvdHRvbSgpKTtcbiAgfSBlbHNlIGlmIChyZWN0Qi5nZXRZKCkgPD0gcmVjdEEuZ2V0WSgpICYmIHJlY3RCLmdldEJvdHRvbSgpID49IHJlY3RBLmdldEJvdHRvbSgpKSB7XG4gICAgLyogQ2FzZSB5LjI6XG4gICAgKiAgICAgICAgICBfX19fX19fXyByZWN0QlxuICAgICogICAgICAgICB8XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgX19fX19ffF9fX18gIHJlY3RBXG4gICAgKiAgICAgICAgIHwgICAgfFxuICAgICogICAgICAgICB8ICAgIHxcbiAgICAqICAgX19fX19ffF9fX198XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgICAgICAgfFxuICAgICogICAgICAgICB8X19fX19fX19cbiAgICAqXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzFdICs9IE1hdGgubWluKHJlY3RBLmdldFkoKSAtIHJlY3RCLmdldFkoKSwgcmVjdEIuZ2V0Qm90dG9tKCkgLSByZWN0QS5nZXRCb3R0b20oKSk7XG4gIH1cblxuICAvLyBmaW5kIHNsb3BlIG9mIHRoZSBsaW5lIHBhc3NlcyB0d28gY2VudGVyc1xuICB2YXIgc2xvcGUgPSBNYXRoLmFicygocmVjdEIuZ2V0Q2VudGVyWSgpIC0gcmVjdEEuZ2V0Q2VudGVyWSgpKSAvIChyZWN0Qi5nZXRDZW50ZXJYKCkgLSByZWN0QS5nZXRDZW50ZXJYKCkpKTtcbiAgLy8gaWYgY2VudGVycyBhcmUgb3ZlcmxhcHBlZFxuICBpZiAocmVjdEIuZ2V0Q2VudGVyWSgpID09PSByZWN0QS5nZXRDZW50ZXJZKCkgJiYgcmVjdEIuZ2V0Q2VudGVyWCgpID09PSByZWN0QS5nZXRDZW50ZXJYKCkpIHtcbiAgICAvLyBhc3N1bWUgdGhlIHNsb3BlIGlzIDEgKDQ1IGRlZ3JlZSlcbiAgICBzbG9wZSA9IDEuMDtcbiAgfVxuXG4gIHZhciBtb3ZlQnlZID0gc2xvcGUgKiBvdmVybGFwQW1vdW50WzBdO1xuICB2YXIgbW92ZUJ5WCA9IG92ZXJsYXBBbW91bnRbMV0gLyBzbG9wZTtcbiAgaWYgKG92ZXJsYXBBbW91bnRbMF0gPCBtb3ZlQnlYKSB7XG4gICAgbW92ZUJ5WCA9IG92ZXJsYXBBbW91bnRbMF07XG4gIH0gZWxzZSB7XG4gICAgbW92ZUJ5WSA9IG92ZXJsYXBBbW91bnRbMV07XG4gIH1cbiAgLy8gcmV0dXJuIGhhbGYgdGhlIGFtb3VudCBzbyB0aGF0IGlmIGVhY2ggcmVjdGFuZ2xlIGlzIG1vdmVkIGJ5IHRoZXNlXG4gIC8vIGFtb3VudHMgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucywgb3ZlcmxhcCB3aWxsIGJlIHJlc29sdmVkXG4gIG92ZXJsYXBBbW91bnRbMF0gPSAtMSAqIGRpcmVjdGlvbnNbMF0gKiAobW92ZUJ5WCAvIDIgKyBzZXBhcmF0aW9uQnVmZmVyKTtcbiAgb3ZlcmxhcEFtb3VudFsxXSA9IC0xICogZGlyZWN0aW9uc1sxXSAqIChtb3ZlQnlZIC8gMiArIHNlcGFyYXRpb25CdWZmZXIpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBkZWNpZGVzIHRoZSBzZXBhcmF0aW9uIGRpcmVjdGlvbiBvZiBvdmVybGFwcGluZyBub2Rlc1xuICpcbiAqIGlmIGRpcmVjdGlvbnNbMF0gPSAtMSwgdGhlbiByZWN0QSBnb2VzIGxlZnRcbiAqIGlmIGRpcmVjdGlvbnNbMF0gPSAxLCAgdGhlbiByZWN0QSBnb2VzIHJpZ2h0XG4gKiBpZiBkaXJlY3Rpb25zWzFdID0gLTEsIHRoZW4gcmVjdEEgZ29lcyB1cFxuICogaWYgZGlyZWN0aW9uc1sxXSA9IDEsICB0aGVuIHJlY3RBIGdvZXMgZG93blxuICovXG5JR2VvbWV0cnkuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMgPSBmdW5jdGlvbiAocmVjdEEsIHJlY3RCLCBkaXJlY3Rpb25zKSB7XG4gIGlmIChyZWN0QS5nZXRDZW50ZXJYKCkgPCByZWN0Qi5nZXRDZW50ZXJYKCkpIHtcbiAgICBkaXJlY3Rpb25zWzBdID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgZGlyZWN0aW9uc1swXSA9IDE7XG4gIH1cblxuICBpZiAocmVjdEEuZ2V0Q2VudGVyWSgpIDwgcmVjdEIuZ2V0Q2VudGVyWSgpKSB7XG4gICAgZGlyZWN0aW9uc1sxXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIGRpcmVjdGlvbnNbMV0gPSAxO1xuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiAoY2xpcHBpbmcpIHBvaW50cyBvZiB0aGUgdHdvXG4gKiBpbnB1dCByZWN0YW5nbGVzIHdpdGggbGluZSBzZWdtZW50IGRlZmluZWQgYnkgdGhlIGNlbnRlcnMgb2YgdGhlc2UgdHdvXG4gKiByZWN0YW5nbGVzLiBUaGUgY2xpcHBpbmcgcG9pbnRzIGFyZSBzYXZlZCBpbiB0aGUgaW5wdXQgZG91YmxlIGFycmF5IGFuZFxuICogd2hldGhlciBvciBub3QgdGhlIHR3byByZWN0YW5nbGVzIG92ZXJsYXAgaXMgcmV0dXJuZWQuXG4gKi9cbklHZW9tZXRyeS5nZXRJbnRlcnNlY3Rpb24yID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0QiwgcmVzdWx0KSB7XG4gIC8vcmVzdWx0WzAtMV0gd2lsbCBjb250YWluIGNsaXBQb2ludCBvZiByZWN0QSwgcmVzdWx0WzItM10gd2lsbCBjb250YWluIGNsaXBQb2ludCBvZiByZWN0QlxuICB2YXIgcDF4ID0gcmVjdEEuZ2V0Q2VudGVyWCgpO1xuICB2YXIgcDF5ID0gcmVjdEEuZ2V0Q2VudGVyWSgpO1xuICB2YXIgcDJ4ID0gcmVjdEIuZ2V0Q2VudGVyWCgpO1xuICB2YXIgcDJ5ID0gcmVjdEIuZ2V0Q2VudGVyWSgpO1xuXG4gIC8vaWYgdHdvIHJlY3RhbmdsZXMgaW50ZXJzZWN0LCB0aGVuIGNsaXBwaW5nIHBvaW50cyBhcmUgY2VudGVyc1xuICBpZiAocmVjdEEuaW50ZXJzZWN0cyhyZWN0QikpIHtcbiAgICByZXN1bHRbMF0gPSBwMXg7XG4gICAgcmVzdWx0WzFdID0gcDF5O1xuICAgIHJlc3VsdFsyXSA9IHAyeDtcbiAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy92YXJpYWJsZXMgZm9yIHJlY3RBXG4gIHZhciB0b3BMZWZ0QXggPSByZWN0QS5nZXRYKCk7XG4gIHZhciB0b3BMZWZ0QXkgPSByZWN0QS5nZXRZKCk7XG4gIHZhciB0b3BSaWdodEF4ID0gcmVjdEEuZ2V0UmlnaHQoKTtcbiAgdmFyIGJvdHRvbUxlZnRBeCA9IHJlY3RBLmdldFgoKTtcbiAgdmFyIGJvdHRvbUxlZnRBeSA9IHJlY3RBLmdldEJvdHRvbSgpO1xuICB2YXIgYm90dG9tUmlnaHRBeCA9IHJlY3RBLmdldFJpZ2h0KCk7XG4gIHZhciBoYWxmV2lkdGhBID0gcmVjdEEuZ2V0V2lkdGhIYWxmKCk7XG4gIHZhciBoYWxmSGVpZ2h0QSA9IHJlY3RBLmdldEhlaWdodEhhbGYoKTtcbiAgLy92YXJpYWJsZXMgZm9yIHJlY3RCXG4gIHZhciB0b3BMZWZ0QnggPSByZWN0Qi5nZXRYKCk7XG4gIHZhciB0b3BMZWZ0QnkgPSByZWN0Qi5nZXRZKCk7XG4gIHZhciB0b3BSaWdodEJ4ID0gcmVjdEIuZ2V0UmlnaHQoKTtcbiAgdmFyIGJvdHRvbUxlZnRCeCA9IHJlY3RCLmdldFgoKTtcbiAgdmFyIGJvdHRvbUxlZnRCeSA9IHJlY3RCLmdldEJvdHRvbSgpO1xuICB2YXIgYm90dG9tUmlnaHRCeCA9IHJlY3RCLmdldFJpZ2h0KCk7XG4gIHZhciBoYWxmV2lkdGhCID0gcmVjdEIuZ2V0V2lkdGhIYWxmKCk7XG4gIHZhciBoYWxmSGVpZ2h0QiA9IHJlY3RCLmdldEhlaWdodEhhbGYoKTtcblxuICAvL2ZsYWcgd2hldGhlciBjbGlwcGluZyBwb2ludHMgYXJlIGZvdW5kXG4gIHZhciBjbGlwUG9pbnRBRm91bmQgPSBmYWxzZTtcbiAgdmFyIGNsaXBQb2ludEJGb3VuZCA9IGZhbHNlO1xuXG4gIC8vIGxpbmUgaXMgdmVydGljYWxcbiAgaWYgKHAxeCA9PT0gcDJ4KSB7XG4gICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgcmVzdWx0WzBdID0gcDF4O1xuICAgICAgcmVzdWx0WzFdID0gdG9wTGVmdEF5O1xuICAgICAgcmVzdWx0WzJdID0gcDJ4O1xuICAgICAgcmVzdWx0WzNdID0gYm90dG9tTGVmdEJ5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAocDF5IDwgcDJ5KSB7XG4gICAgICByZXN1bHRbMF0gPSBwMXg7XG4gICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICByZXN1bHRbMl0gPSBwMng7XG4gICAgICByZXN1bHRbM10gPSB0b3BMZWZ0Qnk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vbm90IGxpbmUsIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICAvLyBsaW5lIGlzIGhvcml6b250YWxcbiAgZWxzZSBpZiAocDF5ID09PSBwMnkpIHtcbiAgICAgIGlmIChwMXggPiBwMngpIHtcbiAgICAgICAgcmVzdWx0WzBdID0gdG9wTGVmdEF4O1xuICAgICAgICByZXN1bHRbMV0gPSBwMXk7XG4gICAgICAgIHJlc3VsdFsyXSA9IHRvcFJpZ2h0Qng7XG4gICAgICAgIHJlc3VsdFszXSA9IHAyeTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChwMXggPCBwMngpIHtcbiAgICAgICAgcmVzdWx0WzBdID0gdG9wUmlnaHRBeDtcbiAgICAgICAgcmVzdWx0WzFdID0gcDF5O1xuICAgICAgICByZXN1bHRbMl0gPSB0b3BMZWZ0Qng7XG4gICAgICAgIHJlc3VsdFszXSA9IHAyeTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9ub3QgdmFsaWQgbGluZSwgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vc2xvcGVzIG9mIHJlY3RBJ3MgYW5kIHJlY3RCJ3MgZGlhZ29uYWxzXG4gICAgICB2YXIgc2xvcGVBID0gcmVjdEEuaGVpZ2h0IC8gcmVjdEEud2lkdGg7XG4gICAgICB2YXIgc2xvcGVCID0gcmVjdEIuaGVpZ2h0IC8gcmVjdEIud2lkdGg7XG5cbiAgICAgIC8vc2xvcGUgb2YgbGluZSBiZXR3ZWVuIGNlbnRlciBvZiByZWN0QSBhbmQgY2VudGVyIG9mIHJlY3RCXG4gICAgICB2YXIgc2xvcGVQcmltZSA9IChwMnkgLSBwMXkpIC8gKHAyeCAtIHAxeCk7XG4gICAgICB2YXIgY2FyZGluYWxEaXJlY3Rpb25BID0gdm9pZCAwO1xuICAgICAgdmFyIGNhcmRpbmFsRGlyZWN0aW9uQiA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRBeCA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRBeSA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRCeCA9IHZvaWQgMDtcbiAgICAgIHZhciB0ZW1wUG9pbnRCeSA9IHZvaWQgMDtcblxuICAgICAgLy9kZXRlcm1pbmUgd2hldGhlciBjbGlwcGluZyBwb2ludCBpcyB0aGUgY29ybmVyIG9mIG5vZGVBXG4gICAgICBpZiAoLXNsb3BlQSA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gYm90dG9tTGVmdEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IGJvdHRvbUxlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFswXSA9IHRvcFJpZ2h0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gdG9wTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2xvcGVBID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMXggPiBwMngpIHtcbiAgICAgICAgICByZXN1bHRbMF0gPSB0b3BMZWZ0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gdG9wTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gYm90dG9tUmlnaHRBeDtcbiAgICAgICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgY2xpcFBvaW50QUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2RldGVybWluZSB3aGV0aGVyIGNsaXBwaW5nIHBvaW50IGlzIHRoZSBjb3JuZXIgb2Ygbm9kZUJcbiAgICAgIGlmICgtc2xvcGVCID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMnggPiBwMXgpIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSBib3R0b21MZWZ0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gYm90dG9tTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gdG9wUmlnaHRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSB0b3BMZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzbG9wZUIgPT09IHNsb3BlUHJpbWUpIHtcbiAgICAgICAgaWYgKHAyeCA+IHAxeCkge1xuICAgICAgICAgIHJlc3VsdFsyXSA9IHRvcExlZnRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSB0b3BMZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSBib3R0b21SaWdodEJ4O1xuICAgICAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICBjbGlwUG9pbnRCRm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vaWYgYm90aCBjbGlwcGluZyBwb2ludHMgYXJlIGNvcm5lcnNcbiAgICAgIGlmIChjbGlwUG9pbnRBRm91bmQgJiYgY2xpcFBvaW50QkZvdW5kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy9kZXRlcm1pbmUgQ2FyZGluYWwgRGlyZWN0aW9uIG9mIHJlY3RhbmdsZXNcbiAgICAgIGlmIChwMXggPiBwMngpIHtcbiAgICAgICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oc2xvcGVBLCBzbG9wZVByaW1lLCA0KTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQiwgc2xvcGVQcmltZSwgMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25BID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVBLCBzbG9wZVByaW1lLCAzKTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1zbG9wZUIsIHNsb3BlUHJpbWUsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocDF5ID4gcDJ5KSB7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25BID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVBLCBzbG9wZVByaW1lLCAxKTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1zbG9wZUIsIHNsb3BlUHJpbWUsIDMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oc2xvcGVBLCBzbG9wZVByaW1lLCAyKTtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkIgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQiwgc2xvcGVQcmltZSwgNCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vY2FsY3VsYXRlIGNsaXBwaW5nIFBvaW50IGlmIGl0IGlzIG5vdCBmb3VuZCBiZWZvcmVcbiAgICAgIGlmICghY2xpcFBvaW50QUZvdW5kKSB7XG4gICAgICAgIHN3aXRjaCAoY2FyZGluYWxEaXJlY3Rpb25BKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSB0b3BMZWZ0QXk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IHAxeCArIC1oYWxmSGVpZ2h0QSAvIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGVtcFBvaW50QXggPSBib3R0b21SaWdodEF4O1xuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBwMXkgKyBoYWxmV2lkdGhBICogc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFswXSA9IHRlbXBQb2ludEF4O1xuICAgICAgICAgICAgcmVzdWx0WzFdID0gdGVtcFBvaW50QXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeSA9IGJvdHRvbUxlZnRBeTtcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gcDF4ICsgaGFsZkhlaWdodEEgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gYm90dG9tTGVmdEF4O1xuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBwMXkgKyAtaGFsZldpZHRoQSAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2xpcFBvaW50QkZvdW5kKSB7XG4gICAgICAgIHN3aXRjaCAoY2FyZGluYWxEaXJlY3Rpb25CKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSB0b3BMZWZ0Qnk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IHAyeCArIC1oYWxmSGVpZ2h0QiAvIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGVtcFBvaW50QnggPSBib3R0b21SaWdodEJ4O1xuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBwMnkgKyBoYWxmV2lkdGhCICogc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFsyXSA9IHRlbXBQb2ludEJ4O1xuICAgICAgICAgICAgcmVzdWx0WzNdID0gdGVtcFBvaW50Qnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gcDJ4ICsgaGFsZkhlaWdodEIgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gYm90dG9tTGVmdEJ4O1xuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBwMnkgKyAtaGFsZldpZHRoQiAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBpbiB3aGljaCBjYXJkaW5hbCBkaXJlY3Rpb24gZG9lcyBpbnB1dCBwb2ludCBzdGF5c1xuICogMTogTm9ydGhcbiAqIDI6IEVhc3RcbiAqIDM6IFNvdXRoXG4gKiA0OiBXZXN0XG4gKi9cbklHZW9tZXRyeS5nZXRDYXJkaW5hbERpcmVjdGlvbiA9IGZ1bmN0aW9uIChzbG9wZSwgc2xvcGVQcmltZSwgbGluZSkge1xuICBpZiAoc2xvcGUgPiBzbG9wZVByaW1lKSB7XG4gICAgcmV0dXJuIGxpbmU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDEgKyBsaW5lICUgNDtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBsaW5lcyBkZWZpbmVkIGJ5XG4gKiBwb2ludCBwYWlycyAoczEsczIpIGFuZCAoZjEsZjIpLlxuICovXG5JR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHMxLCBzMiwgZjEsIGYyKSB7XG4gIGlmIChmMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihzMSwgczIsIGYxKTtcbiAgfVxuXG4gIHZhciB4MSA9IHMxLng7XG4gIHZhciB5MSA9IHMxLnk7XG4gIHZhciB4MiA9IHMyLng7XG4gIHZhciB5MiA9IHMyLnk7XG4gIHZhciB4MyA9IGYxLng7XG4gIHZhciB5MyA9IGYxLnk7XG4gIHZhciB4NCA9IGYyLng7XG4gIHZhciB5NCA9IGYyLnk7XG4gIHZhciB4ID0gdm9pZCAwLFxuICAgICAgeSA9IHZvaWQgMDsgLy8gaW50ZXJzZWN0aW9uIHBvaW50XG4gIHZhciBhMSA9IHZvaWQgMCxcbiAgICAgIGEyID0gdm9pZCAwLFxuICAgICAgYjEgPSB2b2lkIDAsXG4gICAgICBiMiA9IHZvaWQgMCxcbiAgICAgIGMxID0gdm9pZCAwLFxuICAgICAgYzIgPSB2b2lkIDA7IC8vIGNvZWZmaWNpZW50cyBvZiBsaW5lIGVxbnMuXG4gIHZhciBkZW5vbSA9IHZvaWQgMDtcblxuICBhMSA9IHkyIC0geTE7XG4gIGIxID0geDEgLSB4MjtcbiAgYzEgPSB4MiAqIHkxIC0geDEgKiB5MjsgLy8geyBhMSp4ICsgYjEqeSArIGMxID0gMCBpcyBsaW5lIDEgfVxuXG4gIGEyID0geTQgLSB5MztcbiAgYjIgPSB4MyAtIHg0O1xuICBjMiA9IHg0ICogeTMgLSB4MyAqIHk0OyAvLyB7IGEyKnggKyBiMip5ICsgYzIgPSAwIGlzIGxpbmUgMiB9XG5cbiAgZGVub20gPSBhMSAqIGIyIC0gYTIgKiBiMTtcblxuICBpZiAoZGVub20gPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHggPSAoYjEgKiBjMiAtIGIyICogYzEpIC8gZGVub207XG4gIHkgPSAoYTIgKiBjMSAtIGExICogYzIpIC8gZGVub207XG5cbiAgcmV0dXJuIG5ldyBQb2ludCh4LCB5KTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmluZHMgYW5kIHJldHVybnMgdGhlIGFuZ2xlIG9mIHRoZSB2ZWN0b3IgZnJvbSB0aGUgKyB4LWF4aXNcbiAqIGluIGNsb2Nrd2lzZSBkaXJlY3Rpb24gKGNvbXBhdGlibGUgdy8gSmF2YSBjb29yZGluYXRlIHN5c3RlbSEpLlxuICovXG5JR2VvbWV0cnkuYW5nbGVPZlZlY3RvciA9IGZ1bmN0aW9uIChDeCwgQ3ksIE54LCBOeSkge1xuICB2YXIgQ19hbmdsZSA9IHZvaWQgMDtcblxuICBpZiAoQ3ggIT09IE54KSB7XG4gICAgQ19hbmdsZSA9IE1hdGguYXRhbigoTnkgLSBDeSkgLyAoTnggLSBDeCkpO1xuXG4gICAgaWYgKE54IDwgQ3gpIHtcbiAgICAgIENfYW5nbGUgKz0gTWF0aC5QSTtcbiAgICB9IGVsc2UgaWYgKE55IDwgQ3kpIHtcbiAgICAgIENfYW5nbGUgKz0gdGhpcy5UV09fUEk7XG4gICAgfVxuICB9IGVsc2UgaWYgKE55IDwgQ3kpIHtcbiAgICBDX2FuZ2xlID0gdGhpcy5PTkVfQU5EX0hBTEZfUEk7IC8vIDI3MCBkZWdyZWVzXG4gIH0gZWxzZSB7XG4gICAgQ19hbmdsZSA9IHRoaXMuSEFMRl9QSTsgLy8gOTAgZGVncmVlc1xuICB9XG5cbiAgcmV0dXJuIENfYW5nbGU7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0d28gbGluZSBzZWdtZW50cyAob25lIHdpdGggcG9pbnRcbiAqIHAxIGFuZCBwMiwgdGhlIG90aGVyIHdpdGggcG9pbnQgcDMgYW5kIHA0KSBpbnRlcnNlY3QgYXQgYSBwb2ludCBvdGhlclxuICogdGhhbiB0aGVzZSBwb2ludHMuXG4gKi9cbklHZW9tZXRyeS5kb0ludGVyc2VjdCA9IGZ1bmN0aW9uIChwMSwgcDIsIHAzLCBwNCkge1xuICB2YXIgYSA9IHAxLng7XG4gIHZhciBiID0gcDEueTtcbiAgdmFyIGMgPSBwMi54O1xuICB2YXIgZCA9IHAyLnk7XG4gIHZhciBwID0gcDMueDtcbiAgdmFyIHEgPSBwMy55O1xuICB2YXIgciA9IHA0Lng7XG4gIHZhciBzID0gcDQueTtcbiAgdmFyIGRldCA9IChjIC0gYSkgKiAocyAtIHEpIC0gKHIgLSBwKSAqIChkIC0gYik7XG5cbiAgaWYgKGRldCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFtYmRhID0gKChzIC0gcSkgKiAociAtIGEpICsgKHAgLSByKSAqIChzIC0gYikpIC8gZGV0O1xuICAgIHZhciBnYW1tYSA9ICgoYiAtIGQpICogKHIgLSBhKSArIChjIC0gYSkgKiAocyAtIGIpKSAvIGRldDtcbiAgICByZXR1cm4gMCA8IGxhbWJkYSAmJiBsYW1iZGEgPCAxICYmIDAgPCBnYW1tYSAmJiBnYW1tYSA8IDE7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBDbGFzcyBDb25zdGFudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIFNvbWUgdXNlZnVsIHByZS1jYWxjdWxhdGVkIGNvbnN0YW50c1xuICovXG5JR2VvbWV0cnkuSEFMRl9QSSA9IDAuNSAqIE1hdGguUEk7XG5JR2VvbWV0cnkuT05FX0FORF9IQUxGX1BJID0gMS41ICogTWF0aC5QSTtcbklHZW9tZXRyeS5UV09fUEkgPSAyLjAgKiBNYXRoLlBJO1xuSUdlb21ldHJ5LlRIUkVFX1BJID0gMy4wICogTWF0aC5QSTtcblxubW9kdWxlLmV4cG9ydHMgPSBJR2VvbWV0cnk7XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBJTWF0aCgpIHt9XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgaW5wdXQgdmFsdWUuXG4gKi9cbklNYXRoLnNpZ24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlID4gMCkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuSU1hdGguZmxvb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGguY2VpbCh2YWx1ZSkgOiBNYXRoLmZsb29yKHZhbHVlKTtcbn07XG5cbklNYXRoLmNlaWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDwgMCA/IE1hdGguZmxvb3IodmFsdWUpIDogTWF0aC5jZWlsKHZhbHVlKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSU1hdGg7XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gSW50ZWdlcigpIHt9XG5cbkludGVnZXIuTUFYX1ZBTFVFID0gMjE0NzQ4MzY0NztcbkludGVnZXIuTUlOX1ZBTFVFID0gLTIxNDc0ODM2NDg7XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZWdlcjtcblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgbm9kZUZyb20gPSBmdW5jdGlvbiBub2RlRnJvbSh2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIG5leHQ6IG51bGwsIHByZXY6IG51bGwgfTtcbn07XG5cbnZhciBhZGQgPSBmdW5jdGlvbiBhZGQocHJldiwgbm9kZSwgbmV4dCwgbGlzdCkge1xuICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgIHByZXYubmV4dCA9IG5vZGU7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC5oZWFkID0gbm9kZTtcbiAgfVxuXG4gIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgbmV4dC5wcmV2ID0gbm9kZTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LnRhaWwgPSBub2RlO1xuICB9XG5cbiAgbm9kZS5wcmV2ID0gcHJldjtcbiAgbm9kZS5uZXh0ID0gbmV4dDtcblxuICBsaXN0Lmxlbmd0aCsrO1xuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIF9yZW1vdmUgPSBmdW5jdGlvbiBfcmVtb3ZlKG5vZGUsIGxpc3QpIHtcbiAgdmFyIHByZXYgPSBub2RlLnByZXYsXG4gICAgICBuZXh0ID0gbm9kZS5uZXh0O1xuXG5cbiAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICBwcmV2Lm5leHQgPSBuZXh0O1xuICB9IGVsc2Uge1xuICAgIGxpc3QuaGVhZCA9IG5leHQ7XG4gIH1cblxuICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgIG5leHQucHJldiA9IHByZXY7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC50YWlsID0gcHJldjtcbiAgfVxuXG4gIG5vZGUucHJldiA9IG5vZGUubmV4dCA9IG51bGw7XG5cbiAgbGlzdC5sZW5ndGgtLTtcblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBMaW5rZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMaW5rZWRMaXN0KHZhbHMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmtlZExpc3QpO1xuXG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcblxuICAgIGlmICh2YWxzICE9IG51bGwpIHtcbiAgICAgIHZhbHMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gX3RoaXMucHVzaCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMaW5rZWRMaXN0LCBbe1xuICAgIGtleTogXCJzaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydEJlZm9yZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnRCZWZvcmUodmFsLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLnByZXYsIG5vZGVGcm9tKHZhbCksIG90aGVyTm9kZSwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydEFmdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydEFmdGVyKHZhbCwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZSwgbm9kZUZyb20odmFsKSwgb3RoZXJOb2RlLm5leHQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNlcnROb2RlQmVmb3JlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydE5vZGVCZWZvcmUobmV3Tm9kZSwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZS5wcmV2LCBuZXdOb2RlLCBvdGhlck5vZGUsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnNlcnROb2RlQWZ0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0Tm9kZUFmdGVyKG5ld05vZGUsIG90aGVyTm9kZSkge1xuICAgICAgcmV0dXJuIGFkZChvdGhlck5vZGUsIG5ld05vZGUsIG90aGVyTm9kZS5uZXh0LCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHVzaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXNoKHZhbCkge1xuICAgICAgcmV0dXJuIGFkZCh0aGlzLnRhaWwsIG5vZGVGcm9tKHZhbCksIG51bGwsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVuc2hpZnQodmFsKSB7XG4gICAgICByZXR1cm4gYWRkKG51bGwsIG5vZGVGcm9tKHZhbCksIHRoaXMuaGVhZCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUobm9kZSkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUobm9kZSwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBvcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwb3AoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLnRhaWwsIHRoaXMpLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwb3BOb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBvcE5vZGUoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLnRhaWwsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMuaGVhZCwgdGhpcykudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0Tm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdE5vZGUoKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZSh0aGlzLmhlYWQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRfb2JqZWN0X2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldF9vYmplY3RfYXQoaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA8PSB0aGlzLmxlbmd0aCgpKSB7XG4gICAgICAgIHZhciBpID0gMTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmhlYWQ7XG4gICAgICAgIHdoaWxlIChpIDwgaW5kZXgpIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0X29iamVjdF9hdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRfb2JqZWN0X2F0KGluZGV4LCB2YWx1ZSkge1xuICAgICAgaWYgKGluZGV4IDw9IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuaGVhZDtcbiAgICAgICAgd2hpbGUgKGkgPCBpbmRleCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGlua2VkTGlzdDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRMaXN0O1xuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qXHJcbiAqVGhpcyBjbGFzcyBpcyB0aGUgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9pbnQuamF2YSBjbGFzcyBpbiBqZGtcclxuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5LCBwKSB7XG4gIHRoaXMueCA9IG51bGw7XG4gIHRoaXMueSA9IG51bGw7XG4gIGlmICh4ID09IG51bGwgJiYgeSA9PSBudWxsICYmIHAgPT0gbnVsbCkge1xuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PSAnbnVtYmVyJyAmJiB0eXBlb2YgeSA9PSAnbnVtYmVyJyAmJiBwID09IG51bGwpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH0gZWxzZSBpZiAoeC5jb25zdHJ1Y3Rvci5uYW1lID09ICdQb2ludCcgJiYgeSA9PSBudWxsICYmIHAgPT0gbnVsbCkge1xuICAgIHAgPSB4O1xuICAgIHRoaXMueCA9IHAueDtcbiAgICB0aGlzLnkgPSBwLnk7XG4gIH1cbn1cblxuUG9pbnQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLng7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgcCkge1xuICBpZiAoeC5jb25zdHJ1Y3Rvci5uYW1lID09ICdQb2ludCcgJiYgeSA9PSBudWxsICYmIHAgPT0gbnVsbCkge1xuICAgIHAgPSB4O1xuICAgIHRoaXMuc2V0TG9jYXRpb24ocC54LCBwLnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09ICdudW1iZXInICYmIHR5cGVvZiB5ID09ICdudW1iZXInICYmIHAgPT0gbnVsbCkge1xuICAgIC8vaWYgYm90aCBwYXJhbWV0ZXJzIGFyZSBpbnRlZ2VyIGp1c3QgbW92ZSAoeCx5KSBsb2NhdGlvblxuICAgIGlmIChwYXJzZUludCh4KSA9PSB4ICYmIHBhcnNlSW50KHkpID09IHkpIHtcbiAgICAgIHRoaXMubW92ZSh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy54ID0gTWF0aC5mbG9vcih4ICsgMC41KTtcbiAgICAgIHRoaXMueSA9IE1hdGguZmxvb3IoeSArIDAuNSk7XG4gICAgfVxuICB9XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKGR4LCBkeSkge1xuICB0aGlzLnggKz0gZHg7XG4gIHRoaXMueSArPSBkeTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGlmIChvYmouY29uc3RydWN0b3IubmFtZSA9PSBcIlBvaW50XCIpIHtcbiAgICB2YXIgcHQgPSBvYmo7XG4gICAgcmV0dXJuIHRoaXMueCA9PSBwdC54ICYmIHRoaXMueSA9PSBwdC55O1xuICB9XG4gIHJldHVybiB0aGlzID09IG9iajtcbn07XG5cblBvaW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCgpLmNvbnN0cnVjdG9yLm5hbWUgKyBcIlt4PVwiICsgdGhpcy54ICsgXCIseT1cIiArIHRoaXMueSArIFwiXVwiO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb2ludDtcblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBSZWN0YW5nbGVEKHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgdGhpcy54ID0gMDtcbiAgdGhpcy55ID0gMDtcbiAgdGhpcy53aWR0aCA9IDA7XG4gIHRoaXMuaGVpZ2h0ID0gMDtcblxuICBpZiAoeCAhPSBudWxsICYmIHkgIT0gbnVsbCAmJiB3aWR0aCAhPSBudWxsICYmIGhlaWdodCAhPSBudWxsKSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxufVxuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0WCA9IGZ1bmN0aW9uICh4KSB7XG4gIHRoaXMueCA9IHg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0WSA9IGZ1bmN0aW9uICh5KSB7XG4gIHRoaXMueSA9IHk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMud2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRXaWR0aCA9IGZ1bmN0aW9uICh3aWR0aCkge1xuICB0aGlzLndpZHRoID0gd2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIChoZWlnaHQpIHtcbiAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRSaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueCArIHRoaXMud2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRCb3R0b20gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnkgKyB0aGlzLmhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmludGVyc2VjdHMgPSBmdW5jdGlvbiAoYSkge1xuICBpZiAodGhpcy5nZXRSaWdodCgpIDwgYS54KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuZ2V0Qm90dG9tKCkgPCBhLnkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYS5nZXRSaWdodCgpIDwgdGhpcy54KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEuZ2V0Qm90dG9tKCkgPCB0aGlzLnkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldENlbnRlclggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnggKyB0aGlzLndpZHRoIC8gMjtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldE1pblggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldE1heFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKSArIHRoaXMud2lkdGg7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRDZW50ZXJZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55ICsgdGhpcy5oZWlnaHQgLyAyO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWluWSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WSgpO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWF4WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WSgpICsgdGhpcy5oZWlnaHQ7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRXaWR0aEhhbGYgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLndpZHRoIC8gMjtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldEhlaWdodEhhbGYgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhlaWdodCAvIDI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlY3RhbmdsZUQ7XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBVbmlxdWVJREdlbmVyZXRvcigpIHt9XG5cblVuaXF1ZUlER2VuZXJldG9yLmxhc3RJRCA9IDA7XG5cblVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEID0gZnVuY3Rpb24gKG9iaikge1xuICBpZiAoVW5pcXVlSURHZW5lcmV0b3IuaXNQcmltaXRpdmUob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgaWYgKG9iai51bmlxdWVJRCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIG9iai51bmlxdWVJRDtcbiAgfVxuICBvYmoudW5pcXVlSUQgPSBVbmlxdWVJREdlbmVyZXRvci5nZXRTdHJpbmcoKTtcbiAgVW5pcXVlSURHZW5lcmV0b3IubGFzdElEKys7XG4gIHJldHVybiBvYmoudW5pcXVlSUQ7XG59O1xuXG5VbmlxdWVJREdlbmVyZXRvci5nZXRTdHJpbmcgPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGlkID09IG51bGwpIGlkID0gVW5pcXVlSURHZW5lcmV0b3IubGFzdElEO1xuICByZXR1cm4gXCJPYmplY3QjXCIgKyBpZCArIFwiXCI7XG59O1xuXG5VbmlxdWVJREdlbmVyZXRvci5pc1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgYXJnID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoYXJnKTtcbiAgcmV0dXJuIGFyZyA9PSBudWxsIHx8IHR5cGUgIT0gXCJvYmplY3RcIiAmJiB0eXBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVW5pcXVlSURHZW5lcmV0b3I7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbnZhciBMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xudmFyIExHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIExOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBMRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIFRyYW5zZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIEVtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcblxuZnVuY3Rpb24gTGF5b3V0KGlzUmVtb3RlVXNlKSB7XG4gIEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAvL0xheW91dCBRdWFsaXR5OiAwOmRyYWZ0LCAxOmRlZmF1bHQsIDI6cHJvb2ZcbiAgdGhpcy5sYXlvdXRRdWFsaXR5ID0gTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFk7XG4gIC8vV2hldGhlciBsYXlvdXQgc2hvdWxkIGNyZWF0ZSBiZW5kcG9pbnRzIGFzIG5lZWRlZCBvciBub3RcbiAgdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtcbiAgLy9XaGV0aGVyIGxheW91dCBzaG91bGQgYmUgaW5jcmVtZW50YWwgb3Igbm90XG4gIHRoaXMuaW5jcmVtZW50YWwgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTDtcbiAgLy9XaGV0aGVyIHdlIGFuaW1hdGUgZnJvbSBiZWZvcmUgdG8gYWZ0ZXIgbGF5b3V0IG5vZGUgcG9zaXRpb25zXG4gIHRoaXMuYW5pbWF0aW9uT25MYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUO1xuICAvL1doZXRoZXIgd2UgYW5pbWF0ZSB0aGUgbGF5b3V0IHByb2Nlc3Mgb3Igbm90XG4gIHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ7XG4gIC8vTnVtYmVyIGl0ZXJhdGlvbnMgdGhhdCBzaG91bGQgYmUgZG9uZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGFuaW1hdGlvbnNcbiAgdGhpcy5hbmltYXRpb25QZXJpb2QgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fUEVSSU9EO1xuICAvKipcclxuICAgKiBXaGV0aGVyIG9yIG5vdCBsZWFmIG5vZGVzIChub24tY29tcG91bmQgbm9kZXMpIGFyZSBvZiB1bmlmb3JtIHNpemVzLiBXaGVuXHJcbiAgICogdGhleSBhcmUsIGJvdGggc3ByaW5nIGFuZCByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gdHdvIGxlYWYgbm9kZXMgY2FuIGJlXHJcbiAgICogY2FsY3VsYXRlZCB3aXRob3V0IHRoZSBleHBlbnNpdmUgY2xpcHBpbmcgcG9pbnQgY2FsY3VsYXRpb25zLCByZXN1bHRpbmdcclxuICAgKiBpbiBtYWpvciBzcGVlZC11cC5cclxuICAgKi9cbiAgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTO1xuICAvKipcclxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGNyZWF0aW9uIG9mIGJlbmRwb2ludHMgYnkgdXNpbmcgZHVtbXkgbm9kZXMgYW5kIGVkZ2VzLlxyXG4gICAqIE1hcHMgYW4gTEVkZ2UgdG8gaXRzIGR1bW15IGJlbmRwb2ludCBwYXRoLlxyXG4gICAqL1xuICB0aGlzLmVkZ2VUb0R1bW15Tm9kZXMgPSBuZXcgTWFwKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gbmV3IExHcmFwaE1hbmFnZXIodGhpcyk7XG4gIHRoaXMuaXNMYXlvdXRGaW5pc2hlZCA9IGZhbHNlO1xuICB0aGlzLmlzU3ViTGF5b3V0ID0gZmFsc2U7XG4gIHRoaXMuaXNSZW1vdGVVc2UgPSBmYWxzZTtcblxuICBpZiAoaXNSZW1vdGVVc2UgIT0gbnVsbCkge1xuICAgIHRoaXMuaXNSZW1vdGVVc2UgPSBpc1JlbW90ZVVzZTtcbiAgfVxufVxuXG5MYXlvdXQuUkFORE9NX1NFRUQgPSAxO1xuXG5MYXlvdXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFbWl0dGVyLnByb3RvdHlwZSk7XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLmdldEFsbE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0QWxsRWRnZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGdtID0gbmV3IExHcmFwaE1hbmFnZXIodGhpcyk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gZ207XG4gIHJldHVybiBnbTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3R3JhcGggPSBmdW5jdGlvbiAodkdyYXBoKSB7XG4gIHJldHVybiBuZXcgTEdyYXBoKG51bGwsIHRoaXMuZ3JhcGhNYW5hZ2VyLCB2R3JhcGgpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdOb2RlID0gZnVuY3Rpb24gKHZOb2RlKSB7XG4gIHJldHVybiBuZXcgTE5vZGUodGhpcy5ncmFwaE1hbmFnZXIsIHZOb2RlKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3RWRnZSA9IGZ1bmN0aW9uICh2RWRnZSkge1xuICByZXR1cm4gbmV3IExFZGdlKG51bGwsIG51bGwsIHZFZGdlKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuY2hlY2tMYXlvdXRTdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpID09IG51bGwgfHwgdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkubGVuZ3RoID09IDAgfHwgdGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5ydW5MYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaXNMYXlvdXRGaW5pc2hlZCA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLnRpbGluZ1ByZUxheW91dCkge1xuICAgIHRoaXMudGlsaW5nUHJlTGF5b3V0KCk7XG4gIH1cblxuICB0aGlzLmluaXRQYXJhbWV0ZXJzKCk7XG4gIHZhciBpc0xheW91dFN1Y2Nlc3NmdWxsO1xuXG4gIGlmICh0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpKSB7XG4gICAgaXNMYXlvdXRTdWNjZXNzZnVsbCA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGlzTGF5b3V0U3VjY2Vzc2Z1bGwgPSB0aGlzLmxheW91dCgpO1xuICB9XG5cbiAgaWYgKExheW91dENvbnN0YW50cy5BTklNQVRFID09PSAnZHVyaW5nJykge1xuICAgIC8vIElmIHRoaXMgaXMgYSAnZHVyaW5nJyBsYXlvdXQgYW5pbWF0aW9uLiBMYXlvdXQgaXMgbm90IGZpbmlzaGVkIHlldC4gXG4gICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZXNlIGluIGluZGV4LmpzIHdoZW4gbGF5b3V0IGlzIHJlYWxseSBmaW5pc2hlZC5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNMYXlvdXRTdWNjZXNzZnVsbCkge1xuICAgIGlmICghdGhpcy5pc1N1YkxheW91dCkge1xuICAgICAgdGhpcy5kb1Bvc3RMYXlvdXQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy50aWxpbmdQb3N0TGF5b3V0KSB7XG4gICAgdGhpcy50aWxpbmdQb3N0TGF5b3V0KCk7XG4gIH1cblxuICB0aGlzLmlzTGF5b3V0RmluaXNoZWQgPSB0cnVlO1xuXG4gIHJldHVybiBpc0xheW91dFN1Y2Nlc3NmdWxsO1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBvcGVyYXRpb25zIHJlcXVpcmVkIGFmdGVyIGxheW91dC5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmRvUG9zdExheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgLy9hc3NlcnQgIWlzU3ViTGF5b3V0IDogXCJTaG91bGQgbm90IGJlIGNhbGxlZCBvbiBzdWItbGF5b3V0IVwiO1xuICAvLyBQcm9wYWdhdGUgZ2VvbWV0cmljIGNoYW5nZXMgdG8gdi1sZXZlbCBvYmplY3RzXG4gIGlmICghdGhpcy5pbmNyZW1lbnRhbCkge1xuICAgIHRoaXMudHJhbnNmb3JtKCk7XG4gIH1cbiAgdGhpcy51cGRhdGUoKTtcbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBnZW9tZXRyeSBvZiB0aGUgdGFyZ2V0IGdyYXBoIGFjY29yZGluZyB0b1xyXG4gKiBjYWxjdWxhdGVkIGxheW91dC5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLnVwZGF0ZTIgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHVwZGF0ZSBiZW5kIHBvaW50c1xuICBpZiAodGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkKSB7XG4gICAgdGhpcy5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMoKTtcblxuICAgIC8vIHJlc2V0IGFsbCBlZGdlcywgc2luY2UgdGhlIHRvcG9sb2d5IGhhcyBjaGFuZ2VkXG4gICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpO1xuICB9XG5cbiAgLy8gcGVyZm9ybSBlZGdlLCBub2RlIGFuZCByb290IHVwZGF0ZXMgaWYgbGF5b3V0IGlzIG5vdCBjYWxsZWRcbiAgLy8gcmVtb3RlbHlcbiAgaWYgKCF0aGlzLmlzUmVtb3RlVXNlKSB7XG4gICAgLy8gdXBkYXRlIGFsbCBlZGdlc1xuICAgIHZhciBlZGdlO1xuICAgIHZhciBhbGxFZGdlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZSA9IGFsbEVkZ2VzW2ldO1xuICAgICAgLy8gICAgICB0aGlzLnVwZGF0ZShlZGdlKTtcbiAgICB9XG5cbiAgICAvLyByZWN1cnNpdmVseSB1cGRhdGUgbm9kZXNcbiAgICB2YXIgbm9kZTtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAvLyAgICAgIHRoaXMudXBkYXRlKG5vZGUpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSByb290IGdyYXBoXG4gICAgdGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKTtcbiAgfVxufTtcblxuTGF5b3V0LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHRoaXMudXBkYXRlMigpO1xuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExOb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBvYmo7XG4gICAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSAhPSBudWxsKSB7XG4gICAgICAvLyBzaW5jZSBub2RlIGlzIGNvbXBvdW5kLCByZWN1cnNpdmVseSB1cGRhdGUgY2hpbGQgbm9kZXNcbiAgICAgIHZhciBub2RlcyA9IG5vZGUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1cGRhdGUobm9kZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRoZSBsLWxldmVsIG5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdi1sZXZlbCBncmFwaCBvYmplY3QsXG4gICAgLy8gdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHYtbGV2ZWwgbm9kZSBpbXBsZW1lbnRzIHRoZVxuICAgIC8vIGludGVyZmFjZSBVcGRhdGFibGUuXG4gICAgaWYgKG5vZGUudkdyYXBoT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIC8vIGNhc3QgdG8gVXBkYXRhYmxlIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tcbiAgICAgIHZhciB2Tm9kZSA9IG5vZGUudkdyYXBoT2JqZWN0O1xuXG4gICAgICAvLyBjYWxsIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBpbnRlcmZhY2VcbiAgICAgIHZOb2RlLnVwZGF0ZShub2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTEVkZ2UpIHtcbiAgICB2YXIgZWRnZSA9IG9iajtcbiAgICAvLyBpZiB0aGUgbC1sZXZlbCBlZGdlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHYtbGV2ZWwgZ3JhcGggb2JqZWN0LFxuICAgIC8vIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB2LWxldmVsIGVkZ2UgaW1wbGVtZW50cyB0aGVcbiAgICAvLyBpbnRlcmZhY2UgVXBkYXRhYmxlLlxuXG4gICAgaWYgKGVkZ2UudkdyYXBoT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIC8vIGNhc3QgdG8gVXBkYXRhYmxlIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tcbiAgICAgIHZhciB2RWRnZSA9IGVkZ2UudkdyYXBoT2JqZWN0O1xuXG4gICAgICAvLyBjYWxsIHRoZSB1cGRhdGUgbWV0aG9kIG9mIHRoZSBpbnRlcmZhY2VcbiAgICAgIHZFZGdlLnVwZGF0ZShlZGdlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTEdyYXBoKSB7XG4gICAgdmFyIGdyYXBoID0gb2JqO1xuICAgIC8vIGlmIHRoZSBsLWxldmVsIGdyYXBoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHYtbGV2ZWwgZ3JhcGggb2JqZWN0LFxuICAgIC8vIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB2LWxldmVsIG9iamVjdCBpbXBsZW1lbnRzIHRoZVxuICAgIC8vIGludGVyZmFjZSBVcGRhdGFibGUuXG5cbiAgICBpZiAoZ3JhcGgudkdyYXBoT2JqZWN0ICE9IG51bGwpIHtcbiAgICAgIC8vIGNhc3QgdG8gVXBkYXRhYmxlIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tcbiAgICAgIHZhciB2R3JhcGggPSBncmFwaC52R3JhcGhPYmplY3Q7XG5cbiAgICAgIC8vIGNhbGwgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIGludGVyZmFjZVxuICAgICAgdkdyYXBoLnVwZGF0ZShncmFwaCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgYWxsIGxheW91dCBwYXJhbWV0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzXHJcbiAqIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5pc1N1YkxheW91dCkge1xuICAgIHRoaXMubGF5b3V0UXVhbGl0eSA9IExheW91dENvbnN0YW50cy5RVUFMSVRZO1xuICAgIHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ7XG4gICAgdGhpcy5hbmltYXRpb25QZXJpb2QgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fUEVSSU9EO1xuICAgIHRoaXMuYW5pbWF0aW9uT25MYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUO1xuICAgIHRoaXMuaW5jcmVtZW50YWwgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTDtcbiAgICB0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO1xuICAgIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUztcbiAgfVxuXG4gIGlmICh0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCkge1xuICAgIHRoaXMuYW5pbWF0aW9uT25MYXlvdXQgPSBmYWxzZTtcbiAgfVxufTtcblxuTGF5b3V0LnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAobmV3TGVmdFRvcCkge1xuICBpZiAobmV3TGVmdFRvcCA9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRyYW5zZm9ybShuZXcgUG9pbnREKDAsIDApKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYSB0cmFuc2Zvcm1hdGlvbiBvYmplY3QgKGZyb20gRWNsaXBzZSB0byBsYXlvdXQpLiBXaGVuIGFuXG4gICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm0gaXMgYXBwbGllZCwgd2UgZ2V0IHVwcGVyLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGVcbiAgICAvLyBkcmF3aW5nIG9yIHRoZSByb290IGdyYXBoIGF0IGdpdmVuIGlucHV0IGNvb3JkaW5hdGUgKHNvbWUgbWFyZ2luc1xuICAgIC8vIGFscmVhZHkgaW5jbHVkZWQgaW4gY2FsY3VsYXRpb24gb2YgbGVmdC10b3ApLlxuXG4gICAgdmFyIHRyYW5zID0gbmV3IFRyYW5zZm9ybSgpO1xuICAgIHZhciBsZWZ0VG9wID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtcblxuICAgIGlmIChsZWZ0VG9wICE9IG51bGwpIHtcbiAgICAgIHRyYW5zLnNldFdvcmxkT3JnWChuZXdMZWZ0VG9wLngpO1xuICAgICAgdHJhbnMuc2V0V29ybGRPcmdZKG5ld0xlZnRUb3AueSk7XG5cbiAgICAgIHRyYW5zLnNldERldmljZU9yZ1gobGVmdFRvcC54KTtcbiAgICAgIHRyYW5zLnNldERldmljZU9yZ1kobGVmdFRvcC55KTtcblxuICAgICAgdmFyIG5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICAgICAgdmFyIG5vZGU7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBub2RlLnRyYW5zZm9ybSh0cmFucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seSA9IGZ1bmN0aW9uIChncmFwaCkge1xuXG4gIGlmIChncmFwaCA9PSB1bmRlZmluZWQpIHtcbiAgICAvL2Fzc2VydCAhdGhpcy5pbmNyZW1lbnRhbDtcbiAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSk7XG4gICAgdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsTm9kZTtcbiAgICB2YXIgY2hpbGRHcmFwaDtcblxuICAgIHZhciBub2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbE5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGNoaWxkR3JhcGggPSBsTm9kZS5nZXRDaGlsZCgpO1xuXG4gICAgICBpZiAoY2hpbGRHcmFwaCA9PSBudWxsKSB7XG4gICAgICAgIGxOb2RlLnNjYXR0ZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRHcmFwaC5nZXROb2RlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGxOb2RlLnNjYXR0ZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KGNoaWxkR3JhcGgpO1xuICAgICAgICBsTm9kZS51cGRhdGVCb3VuZHMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0cmVlcyB3aGVyZSBlYWNoIHRyZWUgaXMgcmVwcmVzZW50ZWQgYXMgYVxyXG4gKiBsaXN0IG9mIGwtbm9kZXMuIFRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2Ygc2l6ZSAwIHdoZW46XHJcbiAqIC0gVGhlIGdyYXBoIGlzIG5vdCBmbGF0IG9yXHJcbiAqIC0gT25lIG9mIHRoZSBjb21wb25lbnQocykgb2YgdGhlIGdyYXBoIGlzIG5vdCBhIHRyZWUuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5nZXRGbGF0Rm9yZXN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZmxhdEZvcmVzdCA9IFtdO1xuICB2YXIgaXNGb3Jlc3QgPSB0cnVlO1xuXG4gIC8vIFF1aWNrIHJlZmVyZW5jZSBmb3IgYWxsIG5vZGVzIGluIHRoZSBncmFwaCBtYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aFxuICAvLyB0aGlzIGxheW91dC4gVGhlIGxpc3Qgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICB2YXIgYWxsTm9kZXMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKTtcblxuICAvLyBGaXJzdCBiZSBzdXJlIHRoYXQgdGhlIGdyYXBoIGlzIGZsYXRcbiAgdmFyIGlzRmxhdCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhbGxOb2Rlc1tpXS5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgIGlzRmxhdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBlbXB0eSBmb3Jlc3QgaWYgdGhlIGdyYXBoIGlzIG5vdCBmbGF0LlxuICBpZiAoIWlzRmxhdCkge1xuICAgIHJldHVybiBmbGF0Rm9yZXN0O1xuICB9XG5cbiAgLy8gUnVuIEJGUyBmb3IgZWFjaCBjb21wb25lbnQgb2YgdGhlIGdyYXBoLlxuXG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgdG9CZVZpc2l0ZWQgPSBbXTtcbiAgdmFyIHBhcmVudHMgPSBuZXcgTWFwKCk7XG4gIHZhciB1blByb2Nlc3NlZE5vZGVzID0gW107XG5cbiAgdW5Qcm9jZXNzZWROb2RlcyA9IHVuUHJvY2Vzc2VkTm9kZXMuY29uY2F0KGFsbE5vZGVzKTtcblxuICAvLyBFYWNoIGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3AgZmluZHMgYSBjb21wb25lbnQgb2YgdGhlIGdyYXBoIGFuZFxuICAvLyBkZWNpZGVzIHdoZXRoZXIgaXQgaXMgYSB0cmVlIG9yIG5vdC4gSWYgaXQgaXMgYSB0cmVlLCBhZGRzIGl0IHRvIHRoZVxuICAvLyBmb3Jlc3QgYW5kIGNvbnRpbnVlZCB3aXRoIHRoZSBuZXh0IGNvbXBvbmVudC5cblxuICB3aGlsZSAodW5Qcm9jZXNzZWROb2Rlcy5sZW5ndGggPiAwICYmIGlzRm9yZXN0KSB7XG4gICAgdG9CZVZpc2l0ZWQucHVzaCh1blByb2Nlc3NlZE5vZGVzWzBdKTtcblxuICAgIC8vIFN0YXJ0IHRoZSBCRlMuIEVhY2ggaXRlcmF0aW9uIG9mIHRoaXMgbG9vcCB2aXNpdHMgYSBub2RlIGluIGFcbiAgICAvLyBCRlMgbWFubmVyLlxuICAgIHdoaWxlICh0b0JlVmlzaXRlZC5sZW5ndGggPiAwICYmIGlzRm9yZXN0KSB7XG4gICAgICAvL3Bvb2wgb3BlcmF0aW9uXG4gICAgICB2YXIgY3VycmVudE5vZGUgPSB0b0JlVmlzaXRlZFswXTtcbiAgICAgIHRvQmVWaXNpdGVkLnNwbGljZSgwLCAxKTtcbiAgICAgIHZpc2l0ZWQuYWRkKGN1cnJlbnROb2RlKTtcblxuICAgICAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgICAgIHZhciBuZWlnaGJvckVkZ2VzID0gY3VycmVudE5vZGUuZ2V0RWRnZXMoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWlnaGJvckVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjdXJyZW50TmVpZ2hib3IgPSBuZWlnaGJvckVkZ2VzW2ldLmdldE90aGVyRW5kKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAvLyBJZiBCRlMgaXMgbm90IGdyb3dpbmcgZnJvbSB0aGlzIG5laWdoYm9yLlxuICAgICAgICBpZiAocGFyZW50cy5nZXQoY3VycmVudE5vZGUpICE9IGN1cnJlbnROZWlnaGJvcikge1xuICAgICAgICAgIC8vIFdlIGhhdmVuJ3QgcHJldmlvdXNseSB2aXNpdGVkIHRoaXMgbmVpZ2hib3IuXG4gICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhjdXJyZW50TmVpZ2hib3IpKSB7XG4gICAgICAgICAgICB0b0JlVmlzaXRlZC5wdXNoKGN1cnJlbnROZWlnaGJvcik7XG4gICAgICAgICAgICBwYXJlbnRzLnNldChjdXJyZW50TmVpZ2hib3IsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZSBwcmV2aW91c2x5IHZpc2l0ZWQgdGhpcyBuZWlnaGJvciBhbmRcbiAgICAgICAgICAvLyB0aGlzIG5laWdoYm9yIGlzIG5vdCBwYXJlbnQgb2YgY3VycmVudE5vZGUsIGdpdmVuXG4gICAgICAgICAgLy8gZ3JhcGggY29udGFpbnMgYSBjb21wb25lbnQgdGhhdCBpcyBub3QgdHJlZSwgaGVuY2VcbiAgICAgICAgICAvLyBpdCBpcyBub3QgYSBmb3Jlc3QuXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlzRm9yZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGdyYXBoIGNvbnRhaW5zIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IGEgdHJlZS4gRW1wdHlcbiAgICAvLyBwcmV2aW91c2x5IGZvdW5kIHRyZWVzLiBUaGUgbWV0aG9kIHdpbGwgZW5kLlxuICAgIGlmICghaXNGb3Jlc3QpIHtcbiAgICAgIGZsYXRGb3Jlc3QgPSBbXTtcbiAgICB9XG4gICAgLy8gU2F2ZSBjdXJyZW50bHkgdmlzaXRlZCBub2RlcyBhcyBhIHRyZWUgaW4gb3VyIGZvcmVzdC4gUmVzZXRcbiAgICAvLyB2aXNpdGVkIGFuZCBwYXJlbnRzIGxpc3RzLiBDb250aW51ZSB3aXRoIHRoZSBuZXh0IGNvbXBvbmVudCBvZlxuICAgIC8vIHRoZSBncmFwaCwgaWYgYW55LlxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgdGVtcCA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodmlzaXRlZCkpO1xuICAgICAgICBmbGF0Rm9yZXN0LnB1c2godGVtcCk7XG4gICAgICAgIC8vZmxhdEZvcmVzdCA9IGZsYXRGb3Jlc3QuY29uY2F0KHRlbXApO1xuICAgICAgICAvL3VuUHJvY2Vzc2VkTm9kZXMucmVtb3ZlQWxsKHZpc2l0ZWQpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB0ZW1wW2ldO1xuICAgICAgICAgIHZhciBpbmRleCA9IHVuUHJvY2Vzc2VkTm9kZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHVuUHJvY2Vzc2VkTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmbGF0Rm9yZXN0O1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgZHVtbXkgbm9kZXMgKGFuIGwtbGV2ZWwgbm9kZSB3aXRoIG1pbmltYWwgZGltZW5zaW9ucylcclxuICogZm9yIHRoZSBnaXZlbiBlZGdlIChvbmUgcGVyIGJlbmRwb2ludCkuIFRoZSBleGlzdGluZyBsLWxldmVsIHN0cnVjdHVyZVxyXG4gKiBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgZHVtbXlOb2RlcyA9IFtdO1xuICB2YXIgcHJldiA9IGVkZ2Uuc291cmNlO1xuXG4gIHZhciBncmFwaCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcihlZGdlLnNvdXJjZSwgZWRnZS50YXJnZXQpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZS5iZW5kcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gY3JlYXRlIG5ldyBkdW1teSBub2RlXG4gICAgdmFyIGR1bW15Tm9kZSA9IHRoaXMubmV3Tm9kZShudWxsKTtcbiAgICBkdW1teU5vZGUuc2V0UmVjdChuZXcgUG9pbnQoMCwgMCksIG5ldyBEaW1lbnNpb24oMSwgMSkpO1xuXG4gICAgZ3JhcGguYWRkKGR1bW15Tm9kZSk7XG5cbiAgICAvLyBjcmVhdGUgbmV3IGR1bW15IGVkZ2UgYmV0d2VlbiBwcmV2IGFuZCBkdW1teSBub2RlXG4gICAgdmFyIGR1bW15RWRnZSA9IHRoaXMubmV3RWRnZShudWxsKTtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5hZGQoZHVtbXlFZGdlLCBwcmV2LCBkdW1teU5vZGUpO1xuXG4gICAgZHVtbXlOb2Rlcy5hZGQoZHVtbXlOb2RlKTtcbiAgICBwcmV2ID0gZHVtbXlOb2RlO1xuICB9XG5cbiAgdmFyIGR1bW15RWRnZSA9IHRoaXMubmV3RWRnZShudWxsKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuYWRkKGR1bW15RWRnZSwgcHJldiwgZWRnZS50YXJnZXQpO1xuXG4gIHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoZWRnZSwgZHVtbXlOb2Rlcyk7XG5cbiAgLy8gcmVtb3ZlIHJlYWwgZWRnZSBmcm9tIGdyYXBoIG1hbmFnZXIgaWYgaXQgaXMgaW50ZXItZ3JhcGhcbiAgaWYgKGVkZ2UuaXNJbnRlckdyYXBoKCkpIHtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoZWRnZSk7XG4gIH1cbiAgLy8gZWxzZSwgcmVtb3ZlIHRoZSBlZGdlIGZyb20gdGhlIGN1cnJlbnQgZ3JhcGhcbiAgZWxzZSB7XG4gICAgICBncmFwaC5yZW1vdmUoZWRnZSk7XG4gICAgfVxuXG4gIHJldHVybiBkdW1teU5vZGVzO1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYmVuZHBvaW50cyBmb3IgZWRnZXMgZnJvbSB0aGUgZHVtbXkgbm9kZXNcclxuICogYXQgbC1sZXZlbC5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2VzID0gW107XG4gIGVkZ2VzID0gZWRnZXMuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO1xuICBlZGdlcyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChlZGdlcyk7XG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBlZGdlcy5sZW5ndGg7IGsrKykge1xuICAgIHZhciBsRWRnZSA9IGVkZ2VzW2tdO1xuXG4gICAgaWYgKGxFZGdlLmJlbmRwb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHBhdGggPSB0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KGxFZGdlKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkdW1teU5vZGUgPSBwYXRoW2ldO1xuICAgICAgICB2YXIgcCA9IG5ldyBQb2ludEQoZHVtbXlOb2RlLmdldENlbnRlclgoKSwgZHVtbXlOb2RlLmdldENlbnRlclkoKSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIGJlbmRwb2ludCdzIGxvY2F0aW9uIGFjY29yZGluZyB0byBkdW1teSBub2RlXG4gICAgICAgIHZhciBlYnAgPSBsRWRnZS5iZW5kcG9pbnRzLmdldChpKTtcbiAgICAgICAgZWJwLnggPSBwLng7XG4gICAgICAgIGVicC55ID0gcC55O1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgZHVtbXkgbm9kZSwgZHVtbXkgZWRnZXMgaW5jaWRlbnQgd2l0aCB0aGlzXG4gICAgICAgIC8vIGR1bW15IG5vZGUgaXMgYWxzbyByZW1vdmVkICh3aXRoaW4gdGhlIHJlbW92ZSBtZXRob2QpXG4gICAgICAgIGR1bW15Tm9kZS5nZXRPd25lcigpLnJlbW92ZShkdW1teU5vZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdGhlIHJlYWwgZWRnZSB0byBncmFwaFxuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIuYWRkKGxFZGdlLCBsRWRnZS5zb3VyY2UsIGxFZGdlLnRhcmdldCk7XG4gICAgfVxuICB9XG59O1xuXG5MYXlvdXQudHJhbnNmb3JtID0gZnVuY3Rpb24gKHNsaWRlclZhbHVlLCBkZWZhdWx0VmFsdWUsIG1pbkRpdiwgbWF4TXVsKSB7XG4gIGlmIChtaW5EaXYgIT0gdW5kZWZpbmVkICYmIG1heE11bCAhPSB1bmRlZmluZWQpIHtcbiAgICB2YXIgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoc2xpZGVyVmFsdWUgPD0gNTApIHtcbiAgICAgIHZhciBtaW5WYWx1ZSA9IGRlZmF1bHRWYWx1ZSAvIG1pbkRpdjtcbiAgICAgIHZhbHVlIC09IChkZWZhdWx0VmFsdWUgLSBtaW5WYWx1ZSkgLyA1MCAqICg1MCAtIHNsaWRlclZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1heFZhbHVlID0gZGVmYXVsdFZhbHVlICogbWF4TXVsO1xuICAgICAgdmFsdWUgKz0gKG1heFZhbHVlIC0gZGVmYXVsdFZhbHVlKSAvIDUwICogKHNsaWRlclZhbHVlIC0gNTApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYSwgYjtcblxuICAgIGlmIChzbGlkZXJWYWx1ZSA8PSA1MCkge1xuICAgICAgYSA9IDkuMCAqIGRlZmF1bHRWYWx1ZSAvIDUwMC4wO1xuICAgICAgYiA9IGRlZmF1bHRWYWx1ZSAvIDEwLjA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSA5LjAgKiBkZWZhdWx0VmFsdWUgLyA1MC4wO1xuICAgICAgYiA9IC04ICogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhICogc2xpZGVyVmFsdWUgKyBiO1xuICB9XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgZmluZHMgYW5kIHJldHVybnMgdGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gbm9kZXMsIGFzc3VtaW5nXHJcbiAqIHRoYXQgdGhlIGdpdmVuIG5vZGVzIGZvcm0gYSB0cmVlIGluIHRoZW1zZWx2ZXMuXHJcbiAqL1xuTGF5b3V0LmZpbmRDZW50ZXJPZlRyZWUgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgdmFyIGxpc3QgPSBbXTtcbiAgbGlzdCA9IGxpc3QuY29uY2F0KG5vZGVzKTtcblxuICB2YXIgcmVtb3ZlZE5vZGVzID0gW107XG4gIHZhciByZW1haW5pbmdEZWdyZWVzID0gbmV3IE1hcCgpO1xuICB2YXIgZm91bmRDZW50ZXIgPSBmYWxzZTtcbiAgdmFyIGNlbnRlck5vZGUgPSBudWxsO1xuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PSAxIHx8IGxpc3QubGVuZ3RoID09IDIpIHtcbiAgICBmb3VuZENlbnRlciA9IHRydWU7XG4gICAgY2VudGVyTm9kZSA9IGxpc3RbMF07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGxpc3RbaV07XG4gICAgdmFyIGRlZ3JlZSA9IG5vZGUuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7XG4gICAgcmVtYWluaW5nRGVncmVlcy5zZXQobm9kZSwgbm9kZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSk7XG5cbiAgICBpZiAoZGVncmVlID09IDEpIHtcbiAgICAgIHJlbW92ZWROb2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0ZW1wTGlzdCA9IFtdO1xuICB0ZW1wTGlzdCA9IHRlbXBMaXN0LmNvbmNhdChyZW1vdmVkTm9kZXMpO1xuXG4gIHdoaWxlICghZm91bmRDZW50ZXIpIHtcbiAgICB2YXIgdGVtcExpc3QyID0gW107XG4gICAgdGVtcExpc3QyID0gdGVtcExpc3QyLmNvbmNhdCh0ZW1wTGlzdCk7XG4gICAgdGVtcExpc3QgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBsaXN0W2ldO1xuXG4gICAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2Yobm9kZSk7XG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZWlnaGJvdXJzID0gbm9kZS5nZXROZWlnaGJvcnNMaXN0KCk7XG5cbiAgICAgIG5laWdoYm91cnMuZm9yRWFjaChmdW5jdGlvbiAobmVpZ2hib3VyKSB7XG4gICAgICAgIGlmIChyZW1vdmVkTm9kZXMuaW5kZXhPZihuZWlnaGJvdXIpIDwgMCkge1xuICAgICAgICAgIHZhciBvdGhlckRlZ3JlZSA9IHJlbWFpbmluZ0RlZ3JlZXMuZ2V0KG5laWdoYm91cik7XG4gICAgICAgICAgdmFyIG5ld0RlZ3JlZSA9IG90aGVyRGVncmVlIC0gMTtcblxuICAgICAgICAgIGlmIChuZXdEZWdyZWUgPT0gMSkge1xuICAgICAgICAgICAgdGVtcExpc3QucHVzaChuZWlnaGJvdXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlbWFpbmluZ0RlZ3JlZXMuc2V0KG5laWdoYm91ciwgbmV3RGVncmVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlZE5vZGVzID0gcmVtb3ZlZE5vZGVzLmNvbmNhdCh0ZW1wTGlzdCk7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT0gMSB8fCBsaXN0Lmxlbmd0aCA9PSAyKSB7XG4gICAgICBmb3VuZENlbnRlciA9IHRydWU7XG4gICAgICBjZW50ZXJOb2RlID0gbGlzdFswXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2VudGVyTm9kZTtcbn07XG5cbi8qKlxyXG4gKiBEdXJpbmcgdGhlIGNvYXJzZW5pbmcgcHJvY2VzcywgdGhpcyBsYXlvdXQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgdHdvIGdyYXBoIG1hbmFnZXJzXHJcbiAqIHRoaXMgc2V0dGVyIGZ1bmN0aW9uIGdyYW50cyBhY2Nlc3MgdG8gY2hhbmdlIHRoZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBncmFwaCBtYW5hZ2VyXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5zZXRHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoZ20pIHtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGF5b3V0O1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIFJhbmRvbVNlZWQoKSB7fVxuLy8gYWRhcHRlZCBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTkzMDM3MjVcblJhbmRvbVNlZWQuc2VlZCA9IDE7XG5SYW5kb21TZWVkLnggPSAwO1xuXG5SYW5kb21TZWVkLm5leHREb3VibGUgPSBmdW5jdGlvbiAoKSB7XG4gIFJhbmRvbVNlZWQueCA9IE1hdGguc2luKFJhbmRvbVNlZWQuc2VlZCsrKSAqIDEwMDAwO1xuICByZXR1cm4gUmFuZG9tU2VlZC54IC0gTWF0aC5mbG9vcihSYW5kb21TZWVkLngpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSYW5kb21TZWVkO1xuXG4vKioqLyB9KSxcbi8qIDE3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG5mdW5jdGlvbiBUcmFuc2Zvcm0oeCwgeSkge1xuICB0aGlzLmx3b3JsZE9yZ1ggPSAwLjA7XG4gIHRoaXMubHdvcmxkT3JnWSA9IDAuMDtcbiAgdGhpcy5sZGV2aWNlT3JnWCA9IDAuMDtcbiAgdGhpcy5sZGV2aWNlT3JnWSA9IDAuMDtcbiAgdGhpcy5sd29ybGRFeHRYID0gMS4wO1xuICB0aGlzLmx3b3JsZEV4dFkgPSAxLjA7XG4gIHRoaXMubGRldmljZUV4dFggPSAxLjA7XG4gIHRoaXMubGRldmljZUV4dFkgPSAxLjA7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRPcmdYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRPcmdYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1ggPSBmdW5jdGlvbiAod294KSB7XG4gIHRoaXMubHdvcmxkT3JnWCA9IHdveDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRPcmdZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1kgPSBmdW5jdGlvbiAod295KSB7XG4gIHRoaXMubHdvcmxkT3JnWSA9IHdveTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRFeHRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRFeHRYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZEV4dFggPSBmdW5jdGlvbiAod2V4KSB7XG4gIHRoaXMubHdvcmxkRXh0WCA9IHdleDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0V29ybGRFeHRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sd29ybGRFeHRZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXRXb3JsZEV4dFkgPSBmdW5jdGlvbiAod2V5KSB7XG4gIHRoaXMubHdvcmxkRXh0WSA9IHdleTtcbn07XG5cbi8qIERldmljZSByZWxhdGVkICovXG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZU9yZ1g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZU9yZ1ggPSBmdW5jdGlvbiAoZG94KSB7XG4gIHRoaXMubGRldmljZU9yZ1ggPSBkb3g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldERldmljZU9yZ1kgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxkZXZpY2VPcmdZO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZID0gZnVuY3Rpb24gKGRveSkge1xuICB0aGlzLmxkZXZpY2VPcmdZID0gZG95O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlRXh0WDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WCA9IGZ1bmN0aW9uIChkZXgpIHtcbiAgdGhpcy5sZGV2aWNlRXh0WCA9IGRleDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZUV4dFk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZUV4dFkgPSBmdW5jdGlvbiAoZGV5KSB7XG4gIHRoaXMubGRldmljZUV4dFkgPSBkZXk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnRyYW5zZm9ybVggPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgeERldmljZSA9IDAuMDtcbiAgdmFyIHdvcmxkRXh0WCA9IHRoaXMubHdvcmxkRXh0WDtcbiAgaWYgKHdvcmxkRXh0WCAhPSAwLjApIHtcbiAgICB4RGV2aWNlID0gdGhpcy5sZGV2aWNlT3JnWCArICh4IC0gdGhpcy5sd29ybGRPcmdYKSAqIHRoaXMubGRldmljZUV4dFggLyB3b3JsZEV4dFg7XG4gIH1cblxuICByZXR1cm4geERldmljZTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudHJhbnNmb3JtWSA9IGZ1bmN0aW9uICh5KSB7XG4gIHZhciB5RGV2aWNlID0gMC4wO1xuICB2YXIgd29ybGRFeHRZID0gdGhpcy5sd29ybGRFeHRZO1xuICBpZiAod29ybGRFeHRZICE9IDAuMCkge1xuICAgIHlEZXZpY2UgPSB0aGlzLmxkZXZpY2VPcmdZICsgKHkgLSB0aGlzLmx3b3JsZE9yZ1kpICogdGhpcy5sZGV2aWNlRXh0WSAvIHdvcmxkRXh0WTtcbiAgfVxuXG4gIHJldHVybiB5RGV2aWNlO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciB4V29ybGQgPSAwLjA7XG4gIHZhciBkZXZpY2VFeHRYID0gdGhpcy5sZGV2aWNlRXh0WDtcbiAgaWYgKGRldmljZUV4dFggIT0gMC4wKSB7XG4gICAgeFdvcmxkID0gdGhpcy5sd29ybGRPcmdYICsgKHggLSB0aGlzLmxkZXZpY2VPcmdYKSAqIHRoaXMubHdvcmxkRXh0WCAvIGRldmljZUV4dFg7XG4gIH1cblxuICByZXR1cm4geFdvcmxkO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWSA9IGZ1bmN0aW9uICh5KSB7XG4gIHZhciB5V29ybGQgPSAwLjA7XG4gIHZhciBkZXZpY2VFeHRZID0gdGhpcy5sZGV2aWNlRXh0WTtcbiAgaWYgKGRldmljZUV4dFkgIT0gMC4wKSB7XG4gICAgeVdvcmxkID0gdGhpcy5sd29ybGRPcmdZICsgKHkgLSB0aGlzLmxkZXZpY2VPcmdZKSAqIHRoaXMubHdvcmxkRXh0WSAvIGRldmljZUV4dFk7XG4gIH1cbiAgcmV0dXJuIHlXb3JsZDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50ID0gZnVuY3Rpb24gKGluUG9pbnQpIHtcbiAgdmFyIG91dFBvaW50ID0gbmV3IFBvaW50RCh0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGluUG9pbnQueCksIHRoaXMuaW52ZXJzZVRyYW5zZm9ybVkoaW5Qb2ludC55KSk7XG4gIHJldHVybiBvdXRQb2ludDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBJTWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0KCkge1xuICBMYXlvdXQuY2FsbCh0aGlzKTtcblxuICB0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24gPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTjtcbiAgdGhpcy5pZGVhbEVkZ2VMZW5ndGggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xuICB0aGlzLnNwcmluZ0NvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg7XG4gIHRoaXMucmVwdWxzaW9uQ29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSDtcbiAgdGhpcy5ncmF2aXR5Q29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg7XG4gIHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg7XG4gIHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I7XG4gIHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSA9IDMuMCAqIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLyAxMDA7XG4gIHRoaXMuY29vbGluZ0ZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw7XG4gIHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMO1xuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50ID0gMC4wO1xuICB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50ID0gMC4wO1xuICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBGRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUztcbn1cblxuRkRMYXlvdXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMYXlvdXQucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMYXlvdXQpIHtcbiAgRkRMYXlvdXRbcHJvcF0gPSBMYXlvdXRbcHJvcF07XG59XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgTGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgdGhpcy50b3RhbEl0ZXJhdGlvbnMgPSAwO1xuICB0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucyA9IDA7XG5cbiAgdGhpcy51c2VGUkdyaWRWYXJpYW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OO1xuXG4gIHRoaXMuZ3JpZCA9IFtdO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZTtcbiAgdmFyIGxjYURlcHRoO1xuICB2YXIgc291cmNlO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgc2l6ZU9mU291cmNlSW5MY2E7XG4gIHZhciBzaXplT2ZUYXJnZXRJbkxjYTtcblxuICB2YXIgYWxsRWRnZXMgPSB0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBlZGdlID0gYWxsRWRnZXNbaV07XG5cbiAgICBlZGdlLmlkZWFsTGVuZ3RoID0gdGhpcy5pZGVhbEVkZ2VMZW5ndGg7XG5cbiAgICBpZiAoZWRnZS5pc0ludGVyR3JhcGgpIHtcbiAgICAgIHNvdXJjZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gICAgICB0YXJnZXQgPSBlZGdlLmdldFRhcmdldCgpO1xuXG4gICAgICBzaXplT2ZTb3VyY2VJbkxjYSA9IGVkZ2UuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCk7XG4gICAgICBzaXplT2ZUYXJnZXRJbkxjYSA9IGVkZ2UuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCk7XG5cbiAgICAgIGlmICh0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgZWRnZS5pZGVhbExlbmd0aCArPSBzaXplT2ZTb3VyY2VJbkxjYSArIHNpemVPZlRhcmdldEluTGNhIC0gMiAqIExheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9TSVpFO1xuICAgICAgfVxuXG4gICAgICBsY2FEZXB0aCA9IGVkZ2UuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCk7XG5cbiAgICAgIGVkZ2UuaWRlYWxMZW5ndGggKz0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAqIEZETGF5b3V0Q29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgKiAoc291cmNlLmdldEluY2x1c2lvblRyZWVEZXB0aCgpICsgdGFyZ2V0LmdldEluY2x1c2lvblRyZWVEZXB0aCgpIC0gMiAqIGxjYURlcHRoKTtcbiAgICB9XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXIgPSBmdW5jdGlvbiAoKSB7XG5cbiAgdmFyIHMgPSB0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoO1xuICBpZiAodGhpcy5pbmNyZW1lbnRhbCkge1xuICAgIGlmIChzID4gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSB7XG4gICAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBNYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IgKiBGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLCB0aGlzLmNvb2xpbmdGYWN0b3IgLSAocyAtIEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkgLyAoRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAqIHRoaXMuY29vbGluZ0ZhY3RvciAqICgxIC0gRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpO1xuICAgIH1cbiAgICB0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQgPSBGRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHMgPiBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIHtcbiAgICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IE1hdGgubWF4KEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsIDEuMCAtIChzIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAvIChGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpICogKDEgLSBGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IDEuMDtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciA9IHRoaXMuY29vbGluZ0ZhY3RvcjtcbiAgICB0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQgPSBGRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ7XG4gIH1cblxuICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBNYXRoLm1heCh0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoICogNSwgdGhpcy5tYXhJdGVyYXRpb25zKTtcblxuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkID0gdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlICogdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDtcblxuICB0aGlzLnJlcHVsc2lvblJhbmdlID0gdGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKTtcbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbEVkZ2VzID0gdGhpcy5nZXRBbGxFZGdlcygpO1xuICB2YXIgZWRnZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIGVkZ2UgPSBsRWRnZXNbaV07XG5cbiAgICB0aGlzLmNhbGNTcHJpbmdGb3JjZShlZGdlLCBlZGdlLmlkZWFsTGVuZ3RoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBncmlkVXBkYXRlQWxsb3dlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgdmFyIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBpLCBqO1xuICB2YXIgbm9kZUEsIG5vZGVCO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgcHJvY2Vzc2VkTm9kZVNldDtcblxuICBpZiAodGhpcy51c2VGUkdyaWRWYXJpYW50KSB7XG4gICAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCkge1xuICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc2VkTm9kZVNldCA9IG5ldyBTZXQoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gZWFjaCBub2RlcyBhbmQgaXRzIHN1cnJvdW5kaW5nXG4gICAgZm9yIChpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZUEgPSBsTm9kZXNbaV07XG4gICAgICB0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShub2RlQSwgcHJvY2Vzc2VkTm9kZVNldCwgZ3JpZFVwZGF0ZUFsbG93ZWQsIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUpO1xuICAgICAgcHJvY2Vzc2VkTm9kZVNldC5hZGQobm9kZUEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlQSA9IGxOb2Rlc1tpXTtcblxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZUIgPSBsTm9kZXNbal07XG5cbiAgICAgICAgLy8gSWYgYm90aCBub2RlcyBhcmUgbm90IG1lbWJlcnMgb2YgdGhlIHNhbWUgZ3JhcGgsIHNraXAuXG4gICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKG5vZGVBLCBub2RlQik7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2Uobm9kZSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5tb3ZlTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsTm9kZXMgPSB0aGlzLmdldEFsbE5vZGVzKCk7XG4gIHZhciBub2RlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLm1vdmUoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZSA9IGZ1bmN0aW9uIChlZGdlLCBpZGVhbExlbmd0aCkge1xuICB2YXIgc291cmNlTm9kZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gIHZhciB0YXJnZXROb2RlID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICB2YXIgbGVuZ3RoO1xuICB2YXIgc3ByaW5nRm9yY2U7XG4gIHZhciBzcHJpbmdGb3JjZVg7XG4gIHZhciBzcHJpbmdGb3JjZVk7XG5cbiAgLy8gVXBkYXRlIGVkZ2UgbGVuZ3RoXG4gIGlmICh0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzICYmIHNvdXJjZU5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsICYmIHRhcmdldE5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgZWRnZS51cGRhdGVMZW5ndGhTaW1wbGUoKTtcbiAgfSBlbHNlIHtcbiAgICBlZGdlLnVwZGF0ZUxlbmd0aCgpO1xuXG4gICAgaWYgKGVkZ2UuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbGVuZ3RoID0gZWRnZS5nZXRMZW5ndGgoKTtcblxuICBpZiAobGVuZ3RoID09IDApIHJldHVybjtcblxuICAvLyBDYWxjdWxhdGUgc3ByaW5nIGZvcmNlc1xuICBzcHJpbmdGb3JjZSA9IHRoaXMuc3ByaW5nQ29uc3RhbnQgKiAobGVuZ3RoIC0gaWRlYWxMZW5ndGgpO1xuXG4gIC8vIFByb2plY3QgZm9yY2Ugb250byB4IGFuZCB5IGF4ZXNcbiAgc3ByaW5nRm9yY2VYID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhYIC8gbGVuZ3RoKTtcbiAgc3ByaW5nRm9yY2VZID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhZIC8gbGVuZ3RoKTtcblxuICAvLyBBcHBseSBmb3JjZXMgb24gdGhlIGVuZCBub2Rlc1xuICBzb3VyY2VOb2RlLnNwcmluZ0ZvcmNlWCArPSBzcHJpbmdGb3JjZVg7XG4gIHNvdXJjZU5vZGUuc3ByaW5nRm9yY2VZICs9IHNwcmluZ0ZvcmNlWTtcbiAgdGFyZ2V0Tm9kZS5zcHJpbmdGb3JjZVggLT0gc3ByaW5nRm9yY2VYO1xuICB0YXJnZXROb2RlLnNwcmluZ0ZvcmNlWSAtPSBzcHJpbmdGb3JjZVk7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICB2YXIgcmVjdEEgPSBub2RlQS5nZXRSZWN0KCk7XG4gIHZhciByZWN0QiA9IG5vZGVCLmdldFJlY3QoKTtcbiAgdmFyIG92ZXJsYXBBbW91bnQgPSBuZXcgQXJyYXkoMik7XG4gIHZhciBjbGlwUG9pbnRzID0gbmV3IEFycmF5KDQpO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgZGlzdGFuY2VTcXVhcmVkO1xuICB2YXIgZGlzdGFuY2U7XG4gIHZhciByZXB1bHNpb25Gb3JjZTtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWDtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWTtcblxuICBpZiAocmVjdEEuaW50ZXJzZWN0cyhyZWN0QikpIC8vIHR3byBub2RlcyBvdmVybGFwXG4gICAge1xuICAgICAgLy8gY2FsY3VsYXRlIHNlcGFyYXRpb24gYW1vdW50IGluIHggYW5kIHkgZGlyZWN0aW9uc1xuICAgICAgSUdlb21ldHJ5LmNhbGNTZXBhcmF0aW9uQW1vdW50KHJlY3RBLCByZWN0Qiwgb3ZlcmxhcEFtb3VudCwgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDIuMCk7XG5cbiAgICAgIHJlcHVsc2lvbkZvcmNlWCA9IDIgKiBvdmVybGFwQW1vdW50WzBdO1xuICAgICAgcmVwdWxzaW9uRm9yY2VZID0gMiAqIG92ZXJsYXBBbW91bnRbMV07XG5cbiAgICAgIHZhciBjaGlsZHJlbkNvbnN0YW50ID0gbm9kZUEubm9PZkNoaWxkcmVuICogbm9kZUIubm9PZkNoaWxkcmVuIC8gKG5vZGVBLm5vT2ZDaGlsZHJlbiArIG5vZGVCLm5vT2ZDaGlsZHJlbik7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzXG4gICAgICBub2RlQS5yZXB1bHNpb25Gb3JjZVggLT0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSBjaGlsZHJlbkNvbnN0YW50ICogcmVwdWxzaW9uRm9yY2VZO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VYICs9IGNoaWxkcmVuQ29uc3RhbnQgKiByZXB1bHNpb25Gb3JjZVg7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVkgKz0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9IGVsc2UgLy8gbm8gb3ZlcmxhcFxuICAgIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBkaXN0YW5jZVxuXG4gICAgICBpZiAodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyAmJiBub2RlQS5nZXRDaGlsZCgpID09IG51bGwgJiYgbm9kZUIuZ2V0Q2hpbGQoKSA9PSBudWxsKSAvLyBzaW1wbHkgYmFzZSByZXB1bHNpb24gb24gZGlzdGFuY2Ugb2Ygbm9kZSBjZW50ZXJzXG4gICAgICAgIHtcbiAgICAgICAgICBkaXN0YW5jZVggPSByZWN0Qi5nZXRDZW50ZXJYKCkgLSByZWN0QS5nZXRDZW50ZXJYKCk7XG4gICAgICAgICAgZGlzdGFuY2VZID0gcmVjdEIuZ2V0Q2VudGVyWSgpIC0gcmVjdEEuZ2V0Q2VudGVyWSgpO1xuICAgICAgICB9IGVsc2UgLy8gdXNlIGNsaXBwaW5nIHBvaW50c1xuICAgICAgICB7XG4gICAgICAgICAgSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbihyZWN0QSwgcmVjdEIsIGNsaXBQb2ludHMpO1xuXG4gICAgICAgICAgZGlzdGFuY2VYID0gY2xpcFBvaW50c1syXSAtIGNsaXBQb2ludHNbMF07XG4gICAgICAgICAgZGlzdGFuY2VZID0gY2xpcFBvaW50c1szXSAtIGNsaXBQb2ludHNbMV07XG4gICAgICAgIH1cblxuICAgICAgLy8gTm8gcmVwdWxzaW9uIHJhbmdlLiBGUiBncmlkIHZhcmlhbnQgc2hvdWxkIHRha2UgY2FyZSBvZiB0aGlzLlxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWCkgPCBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QpIHtcbiAgICAgICAgZGlzdGFuY2VYID0gSU1hdGguc2lnbihkaXN0YW5jZVgpICogRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VZKSA8IEZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVCkge1xuICAgICAgICBkaXN0YW5jZVkgPSBJTWF0aC5zaWduKGRpc3RhbmNlWSkgKiBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1Q7XG4gICAgICB9XG5cbiAgICAgIGRpc3RhbmNlU3F1YXJlZCA9IGRpc3RhbmNlWCAqIGRpc3RhbmNlWCArIGRpc3RhbmNlWSAqIGRpc3RhbmNlWTtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpc3RhbmNlU3F1YXJlZCk7XG5cbiAgICAgIHJlcHVsc2lvbkZvcmNlID0gdGhpcy5yZXB1bHNpb25Db25zdGFudCAqIG5vZGVBLm5vT2ZDaGlsZHJlbiAqIG5vZGVCLm5vT2ZDaGlsZHJlbiAvIGRpc3RhbmNlU3F1YXJlZDtcblxuICAgICAgLy8gUHJvamVjdCBmb3JjZSBvbnRvIHggYW5kIHkgYXhlc1xuICAgICAgcmVwdWxzaW9uRm9yY2VYID0gcmVwdWxzaW9uRm9yY2UgKiBkaXN0YW5jZVggLyBkaXN0YW5jZTtcbiAgICAgIHJlcHVsc2lvbkZvcmNlWSA9IHJlcHVsc2lvbkZvcmNlICogZGlzdGFuY2VZIC8gZGlzdGFuY2U7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzICAgIFxuICAgICAgbm9kZUEucmVwdWxzaW9uRm9yY2VYIC09IHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSByZXB1bHNpb25Gb3JjZVk7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVggKz0gcmVwdWxzaW9uRm9yY2VYO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VZICs9IHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBvd25lckdyYXBoO1xuICB2YXIgb3duZXJDZW50ZXJYO1xuICB2YXIgb3duZXJDZW50ZXJZO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgYWJzRGlzdGFuY2VYO1xuICB2YXIgYWJzRGlzdGFuY2VZO1xuICB2YXIgZXN0aW1hdGVkU2l6ZTtcbiAgb3duZXJHcmFwaCA9IG5vZGUuZ2V0T3duZXIoKTtcblxuICBvd25lckNlbnRlclggPSAob3duZXJHcmFwaC5nZXRSaWdodCgpICsgb3duZXJHcmFwaC5nZXRMZWZ0KCkpIC8gMjtcbiAgb3duZXJDZW50ZXJZID0gKG93bmVyR3JhcGguZ2V0VG9wKCkgKyBvd25lckdyYXBoLmdldEJvdHRvbSgpKSAvIDI7XG4gIGRpc3RhbmNlWCA9IG5vZGUuZ2V0Q2VudGVyWCgpIC0gb3duZXJDZW50ZXJYO1xuICBkaXN0YW5jZVkgPSBub2RlLmdldENlbnRlclkoKSAtIG93bmVyQ2VudGVyWTtcbiAgYWJzRGlzdGFuY2VYID0gTWF0aC5hYnMoZGlzdGFuY2VYKSArIG5vZGUuZ2V0V2lkdGgoKSAvIDI7XG4gIGFic0Rpc3RhbmNlWSA9IE1hdGguYWJzKGRpc3RhbmNlWSkgKyBub2RlLmdldEhlaWdodCgpIC8gMjtcblxuICBpZiAobm9kZS5nZXRPd25lcigpID09IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSkgLy8gaW4gdGhlIHJvb3QgZ3JhcGhcbiAgICB7XG4gICAgICBlc3RpbWF0ZWRTaXplID0gb3duZXJHcmFwaC5nZXRFc3RpbWF0ZWRTaXplKCkgKiB0aGlzLmdyYXZpdHlSYW5nZUZhY3RvcjtcblxuICAgICAgaWYgKGFic0Rpc3RhbmNlWCA+IGVzdGltYXRlZFNpemUgfHwgYWJzRGlzdGFuY2VZID4gZXN0aW1hdGVkU2l6ZSkge1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VYID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VYO1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VZID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VZO1xuICAgICAgfVxuICAgIH0gZWxzZSAvLyBpbnNpZGUgYSBjb21wb3VuZFxuICAgIHtcbiAgICAgIGVzdGltYXRlZFNpemUgPSBvd25lckdyYXBoLmdldEVzdGltYXRlZFNpemUoKSAqIHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I7XG5cbiAgICAgIGlmIChhYnNEaXN0YW5jZVggPiBlc3RpbWF0ZWRTaXplIHx8IGFic0Rpc3RhbmNlWSA+IGVzdGltYXRlZFNpemUpIHtcbiAgICAgICAgbm9kZS5ncmF2aXRhdGlvbkZvcmNlWCA9IC10aGlzLmdyYXZpdHlDb25zdGFudCAqIGRpc3RhbmNlWCAqIHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ7XG4gICAgICAgIG5vZGUuZ3Jhdml0YXRpb25Gb3JjZVkgPSAtdGhpcy5ncmF2aXR5Q29uc3RhbnQgKiBkaXN0YW5jZVkgKiB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50O1xuICAgICAgfVxuICAgIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pc0NvbnZlcmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNvbnZlcmdlZDtcbiAgdmFyIG9zY2lsYXRpbmcgPSBmYWxzZTtcblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgPiB0aGlzLm1heEl0ZXJhdGlvbnMgLyAzKSB7XG4gICAgb3NjaWxhdGluZyA9IE1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQgLSB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KSA8IDI7XG4gIH1cblxuICBjb252ZXJnZWQgPSB0aGlzLnRvdGFsRGlzcGxhY2VtZW50IDwgdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZDtcblxuICB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50ID0gdGhpcy50b3RhbERpc3BsYWNlbWVudDtcblxuICByZXR1cm4gY29udmVyZ2VkIHx8IG9zY2lsYXRpbmc7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ICYmICF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgaWYgKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID09IHRoaXMuYW5pbWF0aW9uUGVyaW9kKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrO1xuICAgIH1cbiAgfVxufTtcblxuLy9UaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gKHdlaWdodCkgZm9yIGFsbCBub2Rlc1xuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICBub2RlLm5vT2ZDaGlsZHJlbiA9IG5vZGUuZ2V0Tm9PZkNoaWxkcmVuKCk7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBGUi1HcmlkIFZhcmlhbnQgUmVwdWxzaW9uIEZvcmNlIENhbGN1bGF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyaWQgPSBmdW5jdGlvbiAoZ3JhcGgpIHtcblxuICB2YXIgc2l6ZVggPSAwO1xuICB2YXIgc2l6ZVkgPSAwO1xuXG4gIHNpemVYID0gcGFyc2VJbnQoTWF0aC5jZWlsKChncmFwaC5nZXRSaWdodCgpIC0gZ3JhcGguZ2V0TGVmdCgpKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc2l6ZVkgPSBwYXJzZUludChNYXRoLmNlaWwoKGdyYXBoLmdldEJvdHRvbSgpIC0gZ3JhcGguZ2V0VG9wKCkpIC8gdGhpcy5yZXB1bHNpb25SYW5nZSkpO1xuXG4gIHZhciBncmlkID0gbmV3IEFycmF5KHNpemVYKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemVYOyBpKyspIHtcbiAgICBncmlkW2ldID0gbmV3IEFycmF5KHNpemVZKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZVg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZVk7IGorKykge1xuICAgICAgZ3JpZFtpXVtqXSA9IG5ldyBBcnJheSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncmlkO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQgPSBmdW5jdGlvbiAodiwgbGVmdCwgdG9wKSB7XG5cbiAgdmFyIHN0YXJ0WCA9IDA7XG4gIHZhciBmaW5pc2hYID0gMDtcbiAgdmFyIHN0YXJ0WSA9IDA7XG4gIHZhciBmaW5pc2hZID0gMDtcblxuICBzdGFydFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS54IC0gbGVmdCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS53aWR0aCArIHYuZ2V0UmVjdCgpLnggLSBsZWZ0KSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc3RhcnRZID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkueSAtIHRvcCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFkgPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS5oZWlnaHQgKyB2LmdldFJlY3QoKS55IC0gdG9wKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcblxuICBmb3IgKHZhciBpID0gc3RhcnRYOyBpIDw9IGZpbmlzaFg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSBzdGFydFk7IGogPD0gZmluaXNoWTsgaisrKSB7XG4gICAgICB0aGlzLmdyaWRbaV1bal0ucHVzaCh2KTtcbiAgICAgIHYuc2V0R3JpZENvb3JkaW5hdGVzKHN0YXJ0WCwgZmluaXNoWCwgc3RhcnRZLCBmaW5pc2hZKTtcbiAgICB9XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS51cGRhdGVHcmlkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaTtcbiAgdmFyIG5vZGVBO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuXG4gIHRoaXMuZ3JpZCA9IHRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKTtcblxuICAvLyBwdXQgYWxsIG5vZGVzIHRvIHByb3BlciBncmlkIGNlbGxzXG4gIGZvciAoaSA9IDA7IGkgPCBsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlQSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmFkZE5vZGVUb0dyaWQobm9kZUEsIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUgPSBmdW5jdGlvbiAobm9kZUEsIHByb2Nlc3NlZE5vZGVTZXQsIGdyaWRVcGRhdGVBbGxvd2VkLCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCB8fCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG4gICAgdmFyIHN1cnJvdW5kaW5nID0gbmV3IFNldCgpO1xuICAgIG5vZGVBLnN1cnJvdW5kaW5nID0gbmV3IEFycmF5KCk7XG4gICAgdmFyIG5vZGVCO1xuICAgIHZhciBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgZm9yICh2YXIgaSA9IG5vZGVBLnN0YXJ0WCAtIDE7IGkgPCBub2RlQS5maW5pc2hYICsgMjsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gbm9kZUEuc3RhcnRZIC0gMTsgaiA8IG5vZGVBLmZpbmlzaFkgKyAyOyBqKyspIHtcbiAgICAgICAgaWYgKCEoaSA8IDAgfHwgaiA8IDAgfHwgaSA+PSBncmlkLmxlbmd0aCB8fCBqID49IGdyaWRbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZ3JpZFtpXVtqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbm9kZUIgPSBncmlkW2ldW2pdW2tdO1xuXG4gICAgICAgICAgICAvLyBJZiBib3RoIG5vZGVzIGFyZSBub3QgbWVtYmVycyBvZiB0aGUgc2FtZSBncmFwaCwgXG4gICAgICAgICAgICAvLyBvciBib3RoIG5vZGVzIGFyZSB0aGUgc2FtZSwgc2tpcC5cbiAgICAgICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkgfHwgbm9kZUEgPT0gbm9kZUIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZXB1bHNpb24gZm9yY2UgYmV0d2VlblxuICAgICAgICAgICAgLy8gbm9kZUEgYW5kIG5vZGVCIGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZFxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWROb2RlU2V0Lmhhcyhub2RlQikgJiYgIXN1cnJvdW5kaW5nLmhhcyhub2RlQikpIHtcbiAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlWCA9IE1hdGguYWJzKG5vZGVBLmdldENlbnRlclgoKSAtIG5vZGVCLmdldENlbnRlclgoKSkgLSAobm9kZUEuZ2V0V2lkdGgoKSAvIDIgKyBub2RlQi5nZXRXaWR0aCgpIC8gMik7XG4gICAgICAgICAgICAgIHZhciBkaXN0YW5jZVkgPSBNYXRoLmFicyhub2RlQS5nZXRDZW50ZXJZKCkgLSBub2RlQi5nZXRDZW50ZXJZKCkpIC0gKG5vZGVBLmdldEhlaWdodCgpIC8gMiArIG5vZGVCLmdldEhlaWdodCgpIC8gMik7XG5cbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCIFxuICAgICAgICAgICAgICAvLyBpcyBsZXNzIHRoZW4gY2FsY3VsYXRpb24gcmFuZ2VcbiAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlWCA8PSB0aGlzLnJlcHVsc2lvblJhbmdlICYmIGRpc3RhbmNlWSA8PSB0aGlzLnJlcHVsc2lvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy90aGVuIGFkZCBub2RlQiB0byBzdXJyb3VuZGluZyBvZiBub2RlQVxuICAgICAgICAgICAgICAgIHN1cnJvdW5kaW5nLmFkZChub2RlQik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlQS5zdXJyb3VuZGluZyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3Vycm91bmRpbmcpKTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgbm9kZUEuc3Vycm91bmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShub2RlQSwgbm9kZUEuc3Vycm91bmRpbmdbaV0pO1xuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gMC4wO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dDtcblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblxuZnVuY3Rpb24gRkRMYXlvdXRFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBMRWRnZS5jYWxsKHRoaXMsIHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSk7XG4gIHRoaXMuaWRlYWxMZW5ndGggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xufVxuXG5GRExheW91dEVkZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMRWRnZS5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExFZGdlKSB7XG4gIEZETGF5b3V0RWRnZVtwcm9wXSA9IExFZGdlW3Byb3BdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZETGF5b3V0RWRnZTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5mdW5jdGlvbiBGRExheW91dE5vZGUoZ20sIGxvYywgc2l6ZSwgdk5vZGUpIHtcbiAgLy8gYWx0ZXJuYXRpdmUgY29uc3RydWN0b3IgaXMgaGFuZGxlZCBpbnNpZGUgTE5vZGVcbiAgTE5vZGUuY2FsbCh0aGlzLCBnbSwgbG9jLCBzaXplLCB2Tm9kZSk7XG4gIC8vU3ByaW5nLCByZXB1bHNpb24gYW5kIGdyYXZpdGF0aW9uYWwgZm9yY2VzIGFjdGluZyBvbiB0aGlzIG5vZGVcbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIC8vQW1vdW50IGJ5IHdoaWNoIHRoaXMgbm9kZSBpcyB0byBiZSBtb3ZlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICB0aGlzLmRpc3BsYWNlbWVudFggPSAwO1xuICB0aGlzLmRpc3BsYWNlbWVudFkgPSAwO1xuXG4gIC8vU3RhcnQgYW5kIGZpbmlzaCBncmlkIGNvb3JkaW5hdGVzIHRoYXQgdGhpcyBub2RlIGlzIGZhbGxlbiBpbnRvXG4gIHRoaXMuc3RhcnRYID0gMDtcbiAgdGhpcy5maW5pc2hYID0gMDtcbiAgdGhpcy5zdGFydFkgPSAwO1xuICB0aGlzLmZpbmlzaFkgPSAwO1xuXG4gIC8vR2VvbWV0cmljIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgdGhpcy5zdXJyb3VuZGluZyA9IFtdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMTm9kZS5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExOb2RlKSB7XG4gIEZETGF5b3V0Tm9kZVtwcm9wXSA9IExOb2RlW3Byb3BdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcyA9IGZ1bmN0aW9uIChfc3RhcnRYLCBfZmluaXNoWCwgX3N0YXJ0WSwgX2ZpbmlzaFkpIHtcbiAgdGhpcy5zdGFydFggPSBfc3RhcnRYO1xuICB0aGlzLmZpbmlzaFggPSBfZmluaXNoWDtcbiAgdGhpcy5zdGFydFkgPSBfc3RhcnRZO1xuICB0aGlzLmZpbmlzaFkgPSBfZmluaXNoWTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXROb2RlO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIERpbWVuc2lvbkQod2lkdGgsIGhlaWdodCkge1xuICB0aGlzLndpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuICBpZiAod2lkdGggIT09IG51bGwgJiYgaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB9XG59XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKHdpZHRoKSB7XG4gIHRoaXMud2lkdGggPSB3aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xufTtcblxuRGltZW5zaW9uRC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24gKGhlaWdodCkge1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGltZW5zaW9uRDtcblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaE1hcCgpIHtcbiAgdGhpcy5tYXAgPSB7fTtcbiAgdGhpcy5rZXlzID0gW107XG59XG5cbkhhc2hNYXAucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHZhciB0aGVJZCA9IFVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEKGtleSk7XG4gIGlmICghdGhpcy5jb250YWlucyh0aGVJZCkpIHtcbiAgICB0aGlzLm1hcFt0aGVJZF0gPSB2YWx1ZTtcbiAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuICB9XG59O1xuXG5IYXNoTWFwLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW2tleV0gIT0gbnVsbDtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW3RoZUlkXTtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmtleVNldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMua2V5cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaE1hcDtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaFNldCgpIHtcbiAgdGhpcy5zZXQgPSB7fTtcbn1cbjtcblxuSGFzaFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgdGhlSWQgPSBVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopO1xuICBpZiAoIXRoaXMuY29udGFpbnModGhlSWQpKSB0aGlzLnNldFt0aGVJZF0gPSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGRlbGV0ZSB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXTtcbn07XG5cbkhhc2hTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNldCA9IHt9O1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXSA9PSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aDtcbn07XG5cbi8vY29uY2F0cyB0aGlzLnNldCB0byB0aGUgZ2l2ZW4gbGlzdFxuSGFzaFNldC5wcm90b3R5cGUuYWRkQWxsVG8gPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2V0KTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdC5wdXNoKHRoaXMuc2V0W2tleXNbaV1dKTtcbiAgfVxufTtcblxuSGFzaFNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGg7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIgcyA9IGxpc3QubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciB2ID0gbGlzdFtpXTtcbiAgICB0aGlzLmFkZCh2KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoU2V0O1xuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogQSBjbGFzc2ljIFF1aWNrc29ydCBhbGdvcml0aG0gd2l0aCBIb2FyZSdzIHBhcnRpdGlvblxuICogLSBXb3JrcyBhbHNvIG9uIExpbmtlZExpc3Qgb2JqZWN0c1xuICpcbiAqIENvcHlyaWdodDogaS1WaXMgUmVzZWFyY2ggR3JvdXAsIEJpbGtlbnQgVW5pdmVyc2l0eSwgMjAwNyAtIHByZXNlbnRcbiAqL1xuXG52YXIgTGlua2VkTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG52YXIgUXVpY2tzb3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFF1aWNrc29ydChBLCBjb21wYXJlRnVuY3Rpb24pIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFF1aWNrc29ydCk7XG5cbiAgICAgICAgaWYgKGNvbXBhcmVGdW5jdGlvbiAhPT0gbnVsbCB8fCBjb21wYXJlRnVuY3Rpb24gIT09IHVuZGVmaW5lZCkgdGhpcy5jb21wYXJlRnVuY3Rpb24gPSB0aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSB2b2lkIDA7XG4gICAgICAgIGlmIChBIGluc3RhbmNlb2YgTGlua2VkTGlzdCkgbGVuZ3RoID0gQS5zaXplKCk7ZWxzZSBsZW5ndGggPSBBLmxlbmd0aDtcblxuICAgICAgICB0aGlzLl9xdWlja3NvcnQoQSwgMCwgbGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKFF1aWNrc29ydCwgW3tcbiAgICAgICAga2V5OiAnX3F1aWNrc29ydCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcXVpY2tzb3J0KEEsIHAsIHIpIHtcbiAgICAgICAgICAgIGlmIChwIDwgcikge1xuICAgICAgICAgICAgICAgIHZhciBxID0gdGhpcy5fcGFydGl0aW9uKEEsIHAsIHIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3F1aWNrc29ydChBLCBwLCBxKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWlja3NvcnQoQSwgcSArIDEsIHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfcGFydGl0aW9uJyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wYXJ0aXRpb24oQSwgcCwgcikge1xuICAgICAgICAgICAgdmFyIHggPSB0aGlzLl9nZXQoQSwgcCk7XG4gICAgICAgICAgICB2YXIgaSA9IHA7XG4gICAgICAgICAgICB2YXIgaiA9IHI7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmNvbXBhcmVGdW5jdGlvbih4LCB0aGlzLl9nZXQoQSwgaikpKSB7XG4gICAgICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgICAgICB9d2hpbGUgKHRoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChBLCBpKSwgeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1pZiAoaSA8IGopIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3dhcChBLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfZ2V0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXQob2JqZWN0LCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExpbmtlZExpc3QpIHJldHVybiBvYmplY3QuZ2V0X29iamVjdF9hdChpbmRleCk7ZWxzZSByZXR1cm4gb2JqZWN0W2luZGV4XTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX3NldCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTGlua2VkTGlzdCkgb2JqZWN0LnNldF9vYmplY3RfYXQoaW5kZXgsIHZhbHVlKTtlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX3N3YXAnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3N3YXAoQSwgaSwgaikge1xuICAgICAgICAgICAgdmFyIHRlbXAgPSB0aGlzLl9nZXQoQSwgaSk7XG4gICAgICAgICAgICB0aGlzLl9zZXQoQSwgaSwgdGhpcy5fZ2V0KEEsIGopKTtcbiAgICAgICAgICAgIHRoaXMuX3NldChBLCBqLCB0ZW1wKTtcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAga2V5OiAnX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24nLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIgPiBhO1xuICAgICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIFF1aWNrc29ydDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWlja3NvcnQ7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiAgIE5lZWRsZW1hbi1XdW5zY2ggYWxnb3JpdGhtIGlzIGFuIHByb2NlZHVyZSB0byBjb21wdXRlIHRoZSBvcHRpbWFsIGdsb2JhbCBhbGlnbm1lbnQgb2YgdHdvIHN0cmluZ1xuICogICBzZXF1ZW5jZXMgYnkgUy5CLk5lZWRsZW1hbiBhbmQgQy5ELld1bnNjaCAoMTk3MCkuXG4gKlxuICogICBBc2lkZSBmcm9tIHRoZSBpbnB1dHMsIHlvdSBjYW4gYXNzaWduIHRoZSBzY29yZXMgZm9yLFxuICogICAtIE1hdGNoOiBUaGUgdHdvIGNoYXJhY3RlcnMgYXQgdGhlIGN1cnJlbnQgaW5kZXggYXJlIHNhbWUuXG4gKiAgIC0gTWlzbWF0Y2g6IFRoZSB0d28gY2hhcmFjdGVycyBhdCB0aGUgY3VycmVudCBpbmRleCBhcmUgZGlmZmVyZW50LlxuICogICAtIEluc2VydGlvbi9EZWxldGlvbihnYXBzKTogVGhlIGJlc3QgYWxpZ25tZW50IGludm9sdmVzIG9uZSBsZXR0ZXIgYWxpZ25pbmcgdG8gYSBnYXAgaW4gdGhlIG90aGVyIHN0cmluZy5cbiAqL1xuXG52YXIgTmVlZGxlbWFuV3Vuc2NoID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5lZWRsZW1hbld1bnNjaChzZXF1ZW5jZTEsIHNlcXVlbmNlMikge1xuICAgICAgICB2YXIgbWF0Y2hfc2NvcmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gICAgICAgIHZhciBtaXNtYXRjaF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAtMTtcbiAgICAgICAgdmFyIGdhcF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAtMTtcblxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmVlZGxlbWFuV3Vuc2NoKTtcblxuICAgICAgICB0aGlzLnNlcXVlbmNlMSA9IHNlcXVlbmNlMTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZTIgPSBzZXF1ZW5jZTI7XG4gICAgICAgIHRoaXMubWF0Y2hfc2NvcmUgPSBtYXRjaF9zY29yZTtcbiAgICAgICAgdGhpcy5taXNtYXRjaF9wZW5hbHR5ID0gbWlzbWF0Y2hfcGVuYWx0eTtcbiAgICAgICAgdGhpcy5nYXBfcGVuYWx0eSA9IGdhcF9wZW5hbHR5O1xuXG4gICAgICAgIC8vIEp1c3QgdGhlIHJlbW92ZSByZWR1bmRhbmN5XG4gICAgICAgIHRoaXMuaU1heCA9IHNlcXVlbmNlMS5sZW5ndGggKyAxO1xuICAgICAgICB0aGlzLmpNYXggPSBzZXF1ZW5jZTIubGVuZ3RoICsgMTtcblxuICAgICAgICAvLyBHcmlkIG1hdHJpeCBvZiBzY29yZXNcbiAgICAgICAgdGhpcy5ncmlkID0gbmV3IEFycmF5KHRoaXMuaU1heCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pTWF4OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFtpXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkW2ldW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNlYmFjayBtYXRyaXggKDJEIGFycmF5LCBlYWNoIGNlbGwgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgZm9yIFtgRGlhZ2AsIGBVcGAsIGBMZWZ0YF0gcG9zaXRpb25zKVxuICAgICAgICB0aGlzLnRyYWNlYmFja0dyaWQgPSBuZXcgQXJyYXkodGhpcy5pTWF4KTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMuaU1heDsgX2krKykge1xuICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgdGhpcy5qTWF4OyBfaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXVtfal0gPSBbbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgYWxpZ25lZCBzZXF1ZW5jZXMgKHJldHVybiBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzKVxuICAgICAgICB0aGlzLmFsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAvLyBGaW5hbCBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgdGhpcy5zY29yZSA9IC0xO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzY29yZXMgYW5kIHRyYWNlYmFja3NcbiAgICAgICAgdGhpcy5jb21wdXRlR3JpZHMoKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoTmVlZGxlbWFuV3Vuc2NoLCBbe1xuICAgICAgICBrZXk6IFwiZ2V0U2NvcmVcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNjb3JlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NvcmU7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJnZXRBbGlnbm1lbnRzXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbm1lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpZ25tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gZHluYW1pYyBwcm9ncmFtbWluZyBwcm9jZWR1cmVcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImNvbXB1dGVHcmlkc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcHV0ZUdyaWRzKCkge1xuICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgZmlyc3Qgcm93XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkWzBdW2pdID0gdGhpcy5ncmlkWzBdW2ogLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkWzBdW2pdID0gW2ZhbHNlLCBmYWxzZSwgdHJ1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGZpcnN0IGNvbHVtblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLmlNYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtpXVswXSA9IHRoaXMuZ3JpZFtpIC0gMV1bMF0gKyB0aGlzLmdhcF9wZW5hbHR5O1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtpXVswXSA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGaWxsIHRoZSByZXN0IG9mIHRoZSBncmlkXG4gICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAxOyBfaTIgPCB0aGlzLmlNYXg7IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2oyID0gMTsgX2oyIDwgdGhpcy5qTWF4OyBfajIrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBtYXggc2NvcmUocykgYW1vbmcgW2BEaWFnYCwgYFVwYCwgYExlZnRgXVxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlhZyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVuY2UxW19pMiAtIDFdID09PSB0aGlzLnNlcXVlbmNlMltfajIgLSAxXSkgZGlhZyA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajIgLSAxXSArIHRoaXMubWF0Y2hfc2NvcmU7ZWxzZSBkaWFnID0gdGhpcy5ncmlkW19pMiAtIDFdW19qMiAtIDFdICsgdGhpcy5taXNtYXRjaF9wZW5hbHR5O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cCA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajJdICsgdGhpcy5nYXBfcGVuYWx0eTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlzLmdyaWRbX2kyXVtfajIgLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIG11bHRpcGxlIG1heCB2YWx1ZXMsIGNhcHR1cmUgdGhlbSBmb3IgbXVsdGlwbGUgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heE9mID0gW2RpYWcsIHVwLCBsZWZ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhtYXhPZik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIEdyaWRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtfaTJdW19qMl0gPSBtYXhPZltpbmRpY2VzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pMl1bX2oyXSA9IFtpbmRpY2VzLmluY2x1ZGVzKDApLCBpbmRpY2VzLmluY2x1ZGVzKDEpLCBpbmRpY2VzLmluY2x1ZGVzKDIpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgICAgIHRoaXMuc2NvcmUgPSB0aGlzLmdyaWRbdGhpcy5pTWF4IC0gMV1bdGhpcy5qTWF4IC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXRzIGFsbCBwb3NzaWJsZSB2YWxpZCBzZXF1ZW5jZSBjb21iaW5hdGlvbnNcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFsaWdubWVudFRyYWNlYmFja1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWxpZ25tZW50VHJhY2ViYWNrKCkge1xuICAgICAgICAgICAgdmFyIGluUHJvY2Vzc0FsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLCB0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLFxuICAgICAgICAgICAgICAgIHNlcTE6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2VxMjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChpblByb2Nlc3NBbGlnbm1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBpblByb2Nlc3NBbGlnbm1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25zID0gdGhpcy50cmFjZWJhY2tHcmlkW2N1cnJlbnQucG9zWzBdXVtjdXJyZW50LnBvc1sxXV07XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSAtIDEsIGN1cnJlbnQucG9zWzFdIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogdGhpcy5zZXF1ZW5jZTJbY3VycmVudC5wb3NbMV0gLSAxXSArIGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbY3VycmVudC5wb3NbMF0gLSAxLCBjdXJyZW50LnBvc1sxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogJy0nICsgY3VycmVudC5zZXEyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1syXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSwgY3VycmVudC5wb3NbMV0gLSAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTE6ICctJyArIGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTI6IHRoaXMuc2VxdWVuY2UyW2N1cnJlbnQucG9zWzFdIC0gMV0gKyBjdXJyZW50LnNlcTJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucG9zWzBdID09PSAwICYmIGN1cnJlbnQucG9zWzFdID09PSAwKSB0aGlzLmFsaWdubWVudHMucHVzaCh7IHNlcXVlbmNlMTogY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTI6IGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGlnbm1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGVscGVyIEZ1bmN0aW9uc1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiZ2V0QWxsSW5kZXhlc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxsSW5kZXhlcyhhcnIsIHZhbCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICAgICAgICBpID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKGkgPSBhcnIuaW5kZXhPZih2YWwsIGkgKyAxKSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJhcnJheUFsbE1heEluZGV4ZXNcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFycmF5QWxsTWF4SW5kZXhlcyhhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyhhcnJheSwgTWF0aC5tYXguYXBwbHkobnVsbCwgYXJyYXkpKTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBOZWVkbGVtYW5XdW5zY2g7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTmVlZGxlbWFuV3Vuc2NoO1xuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBsYXlvdXRCYXNlID0gZnVuY3Rpb24gbGF5b3V0QmFzZSgpIHtcbiAgcmV0dXJuO1xufTtcblxubGF5b3V0QmFzZS5GRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5sYXlvdXRCYXNlLkZETGF5b3V0RWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xubGF5b3V0QmFzZS5GRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbmxheW91dEJhc2UuRGltZW5zaW9uRCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xubGF5b3V0QmFzZS5IYXNoTWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5sYXlvdXRCYXNlLkhhc2hTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbmxheW91dEJhc2UuSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbmxheW91dEJhc2UuSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xubGF5b3V0QmFzZS5JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5sYXlvdXRCYXNlLlBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5sYXlvdXRCYXNlLlBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5sYXlvdXRCYXNlLlJhbmRvbVNlZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbmxheW91dEJhc2UuUmVjdGFuZ2xlRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xubGF5b3V0QmFzZS5UcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbmxheW91dEJhc2UuVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbmxheW91dEJhc2UuUXVpY2tzb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG5sYXlvdXRCYXNlLkxpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbmxheW91dEJhc2UuTEdyYXBoT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbmxheW91dEJhc2UuTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbmxheW91dEJhc2UuTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xubGF5b3V0QmFzZS5MR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmxheW91dEJhc2UuTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xubGF5b3V0QmFzZS5MYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbmxheW91dEJhc2UuTmVlZGxlbWFuV3Vuc2NoID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbGF5b3V0QmFzZTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBFbWl0dGVyKCkge1xuICB0aGlzLmxpc3RlbmVycyA9IFtdO1xufVxuXG52YXIgcCA9IEVtaXR0ZXIucHJvdG90eXBlO1xuXG5wLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICB0aGlzLmxpc3RlbmVycy5wdXNoKHtcbiAgICBldmVudDogZXZlbnQsXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gIH0pO1xufTtcblxucC5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IHRoaXMubGlzdGVuZXJzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbCA9IHRoaXMubGlzdGVuZXJzW2ldO1xuXG4gICAgaWYgKGwuZXZlbnQgPT09IGV2ZW50ICYmIGwuY2FsbGJhY2sgPT09IGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59O1xuXG5wLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsID0gdGhpcy5saXN0ZW5lcnNbaV07XG5cbiAgICBpZiAoZXZlbnQgPT09IGwuZXZlbnQpIHtcbiAgICAgIGwuY2FsbGJhY2soZGF0YSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pOyIsCiAgICAiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibGF5b3V0LWJhc2VcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibGF5b3V0LWJhc2VcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiY29zZUJhc2VcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJsYXlvdXQtYmFzZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiY29zZUJhc2VcIl0gPSBmYWN0b3J5KHJvb3RbXCJsYXlvdXRCYXNlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNyk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX187XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0Q29uc3RhbnRzO1xuXG5mdW5jdGlvbiBDb1NFQ29uc3RhbnRzKCkge31cblxuLy9Db1NFQ29uc3RhbnRzIGluaGVyaXRzIHN0YXRpYyBwcm9wcyBpbiBGRExheW91dENvbnN0YW50c1xuZm9yICh2YXIgcHJvcCBpbiBGRExheW91dENvbnN0YW50cykge1xuICBDb1NFQ29uc3RhbnRzW3Byb3BdID0gRkRMYXlvdXRDb25zdGFudHNbcHJvcF07XG59XG5cbkNvU0VDb25zdGFudHMuREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORyA9IGZhbHNlO1xuQ29TRUNvbnN0YW50cy5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSDtcbkNvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTiA9IDYwO1xuQ29TRUNvbnN0YW50cy5USUxFID0gdHJ1ZTtcbkNvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUwgPSAxMDtcbkNvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCA9IDEwO1xuQ29TRUNvbnN0YW50cy5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCA9IGZhbHNlOyAvLyBtYWtlIHRoaXMgdHJ1ZSB3aGVuIGNvc2UgaXMgdXNlZCBpbmNyZW1lbnRhbGx5IGFzIGEgcGFydCBvZiBvdGhlciBub24taW5jcmVtZW50YWwgbGF5b3V0XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUNvbnN0YW50cztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBGRExheW91dEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0RWRnZTtcblxuZnVuY3Rpb24gQ29TRUVkZ2Uoc291cmNlLCB0YXJnZXQsIHZFZGdlKSB7XG4gIEZETGF5b3V0RWRnZS5jYWxsKHRoaXMsIHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSk7XG59XG5cbkNvU0VFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXRFZGdlLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0RWRnZSkge1xuICBDb1NFRWRnZVtwcm9wXSA9IEZETGF5b3V0RWRnZVtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFRWRnZTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxHcmFwaDtcblxuZnVuY3Rpb24gQ29TRUdyYXBoKHBhcmVudCwgZ3JhcGhNZ3IsIHZHcmFwaCkge1xuICBMR3JhcGguY2FsbCh0aGlzLCBwYXJlbnQsIGdyYXBoTWdyLCB2R3JhcGgpO1xufVxuXG5Db1NFR3JhcGgucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGgucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gTEdyYXBoKSB7XG4gIENvU0VHcmFwaFtwcm9wXSA9IExHcmFwaFtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFR3JhcGg7XG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuTEdyYXBoTWFuYWdlcjtcblxuZnVuY3Rpb24gQ29TRUdyYXBoTWFuYWdlcihsYXlvdXQpIHtcbiAgTEdyYXBoTWFuYWdlci5jYWxsKHRoaXMsIGxheW91dCk7XG59XG5cbkNvU0VHcmFwaE1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhNYW5hZ2VyLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE1hbmFnZXIpIHtcbiAgQ29TRUdyYXBoTWFuYWdlcltwcm9wXSA9IExHcmFwaE1hbmFnZXJbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBGRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0Tm9kZTtcbnZhciBJTWF0aCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuSU1hdGg7XG5cbmZ1bmN0aW9uIENvU0VOb2RlKGdtLCBsb2MsIHNpemUsIHZOb2RlKSB7XG4gIEZETGF5b3V0Tm9kZS5jYWxsKHRoaXMsIGdtLCBsb2MsIHNpemUsIHZOb2RlKTtcbn1cblxuQ29TRU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShGRExheW91dE5vZGUucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gRkRMYXlvdXROb2RlKSB7XG4gIENvU0VOb2RlW3Byb3BdID0gRkRMYXlvdXROb2RlW3Byb3BdO1xufVxuXG5Db1NFTm9kZS5wcm90b3R5cGUubW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxheW91dCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO1xuICB0aGlzLmRpc3BsYWNlbWVudFggPSBsYXlvdXQuY29vbGluZ0ZhY3RvciAqICh0aGlzLnNwcmluZ0ZvcmNlWCArIHRoaXMucmVwdWxzaW9uRm9yY2VYICsgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkgLyB0aGlzLm5vT2ZDaGlsZHJlbjtcbiAgdGhpcy5kaXNwbGFjZW1lbnRZID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiAodGhpcy5zcHJpbmdGb3JjZVkgKyB0aGlzLnJlcHVsc2lvbkZvcmNlWSArIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpIC8gdGhpcy5ub09mQ2hpbGRyZW47XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkgPiBsYXlvdXQuY29vbGluZ0ZhY3RvciAqIGxheW91dC5tYXhOb2RlRGlzcGxhY2VtZW50KSB7XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRYID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCAqIElNYXRoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpID4gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCkge1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WSA9IGxheW91dC5jb29saW5nRmFjdG9yICogbGF5b3V0Lm1heE5vZGVEaXNwbGFjZW1lbnQgKiBJTWF0aC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gIH1cblxuICAvLyBhIHNpbXBsZSBub2RlLCBqdXN0IG1vdmUgaXRcbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIHRoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCwgdGhpcy5kaXNwbGFjZW1lbnRZKTtcbiAgfVxuICAvLyBhbiBlbXB0eSBjb21wb3VuZCBub2RlLCBhZ2FpbiBqdXN0IG1vdmUgaXRcbiAgZWxzZSBpZiAodGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsIHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gICAgfVxuICAgIC8vIG5vbi1lbXB0eSBjb21wb3VuZCBub2RlLCBwcm9wb2dhdGUgbW92ZW1lbnQgdG8gY2hpbGRyZW4gYXMgd2VsbFxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuICAgICAgfVxuXG4gIGxheW91dC50b3RhbERpc3BsYWNlbWVudCArPSBNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpICsgTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKTtcblxuICB0aGlzLnNwcmluZ0ZvcmNlWCA9IDA7XG4gIHRoaXMuc3ByaW5nRm9yY2VZID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVggPSAwO1xuICB0aGlzLnJlcHVsc2lvbkZvcmNlWSA9IDA7XG4gIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVggPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VZID0gMDtcbiAgdGhpcy5kaXNwbGFjZW1lbnRYID0gMDtcbiAgdGhpcy5kaXNwbGFjZW1lbnRZID0gMDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuID0gZnVuY3Rpb24gKGRYLCBkWSkge1xuICB2YXIgbm9kZXMgPSB0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKTtcbiAgdmFyIG5vZGU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlID0gbm9kZXNbaV07XG4gICAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICBub2RlLm1vdmVCeShkWCwgZFkpO1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRYICs9IGRYO1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRZICs9IGRZO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4oZFgsIGRZKTtcbiAgICB9XG4gIH1cbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXRQcmVkMSA9IGZ1bmN0aW9uIChwcmVkMSkge1xuICB0aGlzLnByZWQxID0gcHJlZDE7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuZ2V0UHJlZDEgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcmVkMTtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5nZXRQcmVkMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHByZWQyO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLnNldE5leHQgPSBmdW5jdGlvbiAobmV4dCkge1xuICB0aGlzLm5leHQgPSBuZXh0O1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmdldE5leHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXh0O1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLnNldFByb2Nlc3NlZCA9IGZ1bmN0aW9uIChwcm9jZXNzZWQpIHtcbiAgdGhpcy5wcm9jZXNzZWQgPSBwcm9jZXNzZWQ7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuaXNQcm9jZXNzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcm9jZXNzZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VOb2RlO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIEZETGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5GRExheW91dDtcbnZhciBDb1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBDb1NFR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIENvU0VOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBDb1NFRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgQ29TRUNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuTGF5b3V0Q29uc3RhbnRzO1xudmFyIFBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Qb2ludDtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLlBvaW50RDtcbnZhciBMYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLkxheW91dDtcbnZhciBJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5JbnRlZ2VyO1xudmFyIElHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuSUdlb21ldHJ5O1xudmFyIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuTEdyYXBoO1xudmFyIFRyYW5zZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBDb1NFTGF5b3V0KCkge1xuICBGRExheW91dC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudG9CZVRpbGVkID0ge307IC8vIE1lbW9yaXplIGlmIGEgbm9kZSBpcyB0byBiZSB0aWxlZCBvciBpcyB0aWxlZFxufVxuXG5Db1NFTGF5b3V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXQucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBGRExheW91dCkge1xuICBDb1NFTGF5b3V0W3Byb3BdID0gRkRMYXlvdXRbcHJvcF07XG59XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGdtID0gbmV3IENvU0VHcmFwaE1hbmFnZXIodGhpcyk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyID0gZ207XG4gIHJldHVybiBnbTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld0dyYXBoID0gZnVuY3Rpb24gKHZHcmFwaCkge1xuICByZXR1cm4gbmV3IENvU0VHcmFwaChudWxsLCB0aGlzLmdyYXBoTWFuYWdlciwgdkdyYXBoKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLm5ld05vZGUgPSBmdW5jdGlvbiAodk5vZGUpIHtcbiAgcmV0dXJuIG5ldyBDb1NFTm9kZSh0aGlzLmdyYXBoTWFuYWdlciwgdk5vZGUpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3RWRnZSA9IGZ1bmN0aW9uICh2RWRnZSkge1xuICByZXR1cm4gbmV3IENvU0VFZGdlKG51bGwsIG51bGwsIHZFZGdlKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICBGRExheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoIXRoaXMuaXNTdWJMYXlvdXQpIHtcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIDwgMTApIHtcbiAgICAgIHRoaXMuaWRlYWxFZGdlTGVuZ3RoID0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaWRlYWxFZGdlTGVuZ3RoID0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xuICAgIH1cblxuICAgIHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiA9IENvU0VDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT047XG4gICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIO1xuICAgIHRoaXMucmVwdWxzaW9uQ29uc3RhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSDtcbiAgICB0aGlzLmdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSDtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIO1xuICAgIHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdHJlZSByZWR1Y3Rpb24gc3VwcG9ydFxuICAgIHRoaXMucHJ1bmVkTm9kZXNBbGwgPSBbXTtcbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgPSAwO1xuICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNHcm93dGhGaW5pc2hlZCA9IGZhbHNlO1xuXG4gICAgLy8gdmFyaWFibGVzIGZvciBjb29saW5nXG4gICAgdGhpcy5jb29saW5nQ3ljbGUgPSAwO1xuICAgIHRoaXMubWF4Q29vbGluZ0N5Y2xlID0gdGhpcy5tYXhJdGVyYXRpb25zIC8gRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EO1xuICAgIHRoaXMuZmluYWxUZW1wZXJhdHVyZSA9IEZETGF5b3V0Q29uc3RhbnRzLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCAvIHRoaXMubWF4SXRlcmF0aW9ucztcbiAgICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IDE7XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmxheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNyZWF0ZUJlbmRzQXNOZWVkZWQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO1xuICBpZiAoY3JlYXRlQmVuZHNBc05lZWRlZCkge1xuICAgIHRoaXMuY3JlYXRlQmVuZHBvaW50cygpO1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKTtcbiAgfVxuXG4gIHRoaXMubGV2ZWwgPSAwO1xuICByZXR1cm4gdGhpcy5jbGFzc2ljTGF5b3V0KCk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLm5vZGVzV2l0aEdyYXZpdHkgPSB0aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KTtcbiAgdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpO1xuXG4gIGlmICghdGhpcy5pbmNyZW1lbnRhbCkge1xuICAgIHZhciBmb3Jlc3QgPSB0aGlzLmdldEZsYXRGb3Jlc3QoKTtcblxuICAgIC8vIFRoZSBncmFwaCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXlvdXQgaXMgZmxhdCBhbmQgYSBmb3Jlc3RcbiAgICBpZiAoZm9yZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KGZvcmVzdCk7XG4gICAgfVxuICAgIC8vIFRoZSBncmFwaCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXlvdXQgaXMgbm90IGZsYXQgb3IgYSBmb3Jlc3RcbiAgICBlbHNlIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSB0cmVlcyB3aGVuIGluY3JlbWVudGFsIG1vZGUgaXMgbm90IGVuYWJsZWQgYW5kIGdyYXBoIGlzIG5vdCBhIGZvcmVzdCBcbiAgICAgICAgdGhpcy5yZWR1Y2VUcmVlcygpO1xuICAgICAgICAvLyBVcGRhdGUgbm9kZXMgdGhhdCBncmF2aXR5IHdpbGwgYmUgYXBwbGllZFxuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IHRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oaW50ZXJzZWN0aW9uKTtcblxuICAgICAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpO1xuICAgICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChDb1NFQ29uc3RhbnRzLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKSB7XG4gICAgICAvLyBSZWR1Y2UgdGhlIHRyZWVzIGluIGluY3JlbWVudGFsIG1vZGUgaWYgb25seSB0aGlzIGNvbnN0YW50IGlzIHNldCB0byB0cnVlIFxuICAgICAgdGhpcy5yZWR1Y2VUcmVlcygpO1xuICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTtcbiAgICAgIHZhciBhbGxOb2RlcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKTtcbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBhbGxOb2Rlcy5oYXMoeCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKTtcbiAgdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUudGljayA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy50b3RhbEl0ZXJhdGlvbnMrKztcblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgPT09IHRoaXMubWF4SXRlcmF0aW9ucyAmJiAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzVHJlZUdyb3dpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgJSBGRExheW91dENvbnN0YW50cy5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QgPT0gMCAmJiAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5pc0NvbnZlcmdlZCgpKSB7XG4gICAgICBpZiAodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvb2xpbmdDeWNsZSsrO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0UXVhbGl0eSA9PSAwKSB7XG4gICAgICAvLyBxdWFsaXR5IC0gXCJkcmFmdFwiXG4gICAgICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IHRoaXMuY29vbGluZ0N5Y2xlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYXlvdXRRdWFsaXR5ID09IDEpIHtcbiAgICAgIC8vIHF1YWxpdHkgLSBcImRlZmF1bHRcIlxuICAgICAgdGhpcy5jb29saW5nQWRqdXN0ZXIgPSB0aGlzLmNvb2xpbmdDeWNsZSAvIDM7XG4gICAgfVxuXG4gICAgLy8gY29vbGluZyBzY2hlZHVsZSBpcyBiYXNlZCBvbiBodHRwOi8vd3d3LmJ0bHVrZS5jb20vc2ltYW5mMS5odG1sIC0+IGNvb2xpbmcgc2NoZWR1bGUgM1xuICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IE1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgLSBNYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSwgTWF0aC5sb2coMTAwICogKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3IgLSB0aGlzLmZpbmFsVGVtcGVyYXR1cmUpKSAvIE1hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkgLyAxMDAgKiB0aGlzLmNvb2xpbmdBZGp1c3RlciwgdGhpcy5maW5hbFRlbXBlcmF0dXJlKTtcbiAgICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IE1hdGguY2VpbCh0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2QgKiBNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSk7XG4gIH1cbiAgLy8gT3BlcmF0aW9ucyB3aGlsZSB0cmVlIGlzIGdyb3dpbmcgYWdhaW4gXG4gIGlmICh0aGlzLmlzVHJlZUdyb3dpbmcpIHtcbiAgICBpZiAodGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgJSAxMCA9PSAwKSB7XG4gICAgICBpZiAodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcbiAgICAgICAgdGhpcy5ncm93VHJlZSh0aGlzLnBydW5lZE5vZGVzQWxsKTtcbiAgICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmhhcyh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG5cbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgICAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc1RyZWVHcm93aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHcm93dGhGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zKys7XG4gIH1cbiAgLy8gT3BlcmF0aW9ucyBhZnRlciBncm93dGggaXMgZmluaXNoZWRcbiAgaWYgKHRoaXMuaXNHcm93dGhGaW5pc2hlZCkge1xuICAgIGlmICh0aGlzLmlzQ29udmVyZ2VkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgJSAxMCA9PSAwKSB7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgIH1cbiAgICB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMICogKCgxMDAgLSB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykgLyAxMDApO1xuICAgIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKys7XG4gIH1cblxuICB2YXIgZ3JpZFVwZGF0ZUFsbG93ZWQgPSAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7XG4gIHZhciBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlID0gdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgJSAxMCA9PSAxICYmIHRoaXMuaXNUcmVlR3Jvd2luZyB8fCB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyAlIDEwID09IDEgJiYgdGhpcy5pc0dyb3d0aEZpbmlzaGVkO1xuXG4gIHRoaXMudG90YWxEaXNwbGFjZW1lbnQgPSAwO1xuICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCk7XG4gIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhncmlkVXBkYXRlQWxsb3dlZCwgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSk7XG4gIHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKTtcbiAgdGhpcy5tb3ZlTm9kZXMoKTtcbiAgdGhpcy5hbmltYXRlKCk7XG5cbiAgcmV0dXJuIGZhbHNlOyAvLyBMYXlvdXQgaXMgbm90IGVuZGVkIHlldCByZXR1cm4gZmFsc2Vcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gIHZhciBwRGF0YSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlY3QgPSBhbGxOb2Rlc1tpXS5yZWN0O1xuICAgIHZhciBpZCA9IGFsbE5vZGVzW2ldLmlkO1xuICAgIHBEYXRhW2lkXSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHg6IHJlY3QuZ2V0Q2VudGVyWCgpLFxuICAgICAgeTogcmVjdC5nZXRDZW50ZXJZKCksXG4gICAgICB3OiByZWN0LndpZHRoLFxuICAgICAgaDogcmVjdC5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHBEYXRhO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCA9IDI1O1xuICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDtcbiAgdmFyIGxheW91dEVuZGVkID0gZmFsc2U7XG5cbiAgLy8gSWYgYW1pbmF0ZSBvcHRpb24gaXMgJ2R1cmluZycgc2lnbmFsIHRoYXQgbGF5b3V0IGlzIHN1cHBvc2VkIHRvIHN0YXJ0IGl0ZXJhdGluZ1xuICBpZiAoRkRMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9PT0gJ2R1cmluZycpIHtcbiAgICB0aGlzLmVtaXQoJ2xheW91dHN0YXJ0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbWluYXRlIG9wdGlvbiBpcyAnZHVyaW5nJyB0aWNrKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24gaW5kZXguanNcbiAgICB3aGlsZSAoIWxheW91dEVuZGVkKSB7XG4gICAgICBsYXlvdXRFbmRlZCA9IHRoaXMudGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbm9kZUxpc3QgPSBbXTtcbiAgdmFyIGdyYXBoO1xuXG4gIHZhciBncmFwaHMgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKTtcbiAgdmFyIHNpemUgPSBncmFwaHMubGVuZ3RoO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGdyYXBoID0gZ3JhcGhzW2ldO1xuXG4gICAgZ3JhcGgudXBkYXRlQ29ubmVjdGVkKCk7XG5cbiAgICBpZiAoIWdyYXBoLmlzQ29ubmVjdGVkKSB7XG4gICAgICBub2RlTGlzdCA9IG5vZGVMaXN0LmNvbmNhdChncmFwaC5nZXROb2RlcygpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZUxpc3Q7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgZWRnZXMgPSBlZGdlcy5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcblxuICAgIGlmICghdmlzaXRlZC5oYXMoZWRnZSkpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlZGdlLmdldFNvdXJjZSgpO1xuICAgICAgdmFyIHRhcmdldCA9IGVkZ2UuZ2V0VGFyZ2V0KCk7XG5cbiAgICAgIGlmIChzb3VyY2UgPT0gdGFyZ2V0KSB7XG4gICAgICAgIGVkZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFBvaW50RCgpKTtcbiAgICAgICAgZWRnZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgUG9pbnREKCkpO1xuICAgICAgICB0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKGVkZ2UpO1xuICAgICAgICB2aXNpdGVkLmFkZChlZGdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlZGdlTGlzdCA9IFtdO1xuXG4gICAgICAgIGVkZ2VMaXN0ID0gZWRnZUxpc3QuY29uY2F0KHNvdXJjZS5nZXRFZGdlTGlzdFRvTm9kZSh0YXJnZXQpKTtcbiAgICAgICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQodGFyZ2V0LmdldEVkZ2VMaXN0VG9Ob2RlKHNvdXJjZSkpO1xuXG4gICAgICAgIGlmICghdmlzaXRlZC5oYXMoZWRnZUxpc3RbMF0pKSB7XG4gICAgICAgICAgaWYgKGVkZ2VMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGVkZ2VMaXN0Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIHZhciBtdWx0aUVkZ2UgPSBlZGdlTGlzdFtrXTtcbiAgICAgICAgICAgICAgbXVsdGlFZGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBQb2ludEQoKSk7XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMobXVsdGlFZGdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWRnZUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQoZWRnZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmlzaXRlZC5zaXplID09IGVkZ2VzLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHkgPSBmdW5jdGlvbiAoZm9yZXN0KSB7XG4gIC8vIFdlIHRpbGUgdGhlIHRyZWVzIHRvIGEgZ3JpZCByb3cgYnkgcm93OyBmaXJzdCB0cmVlIHN0YXJ0cyBhdCAoMCwwKVxuICB2YXIgY3VycmVudFN0YXJ0aW5nUG9pbnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gIHZhciBudW1iZXJPZkNvbHVtbnMgPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KGZvcmVzdC5sZW5ndGgpKTtcbiAgdmFyIGhlaWdodCA9IDA7XG4gIHZhciBjdXJyZW50WSA9IDA7XG4gIHZhciBjdXJyZW50WCA9IDA7XG4gIHZhciBwb2ludCA9IG5ldyBQb2ludEQoMCwgMCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jlc3QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSAlIG51bWJlck9mQ29sdW1ucyA9PSAwKSB7XG4gICAgICAvLyBTdGFydCBvZiBhIG5ldyByb3csIG1ha2UgdGhlIHggY29vcmRpbmF0ZSAwLCBpbmNyZW1lbnQgdGhlXG4gICAgICAvLyB5IGNvb3JkaW5hdGUgd2l0aCB0aGUgbWF4IGhlaWdodCBvZiB0aGUgcHJldmlvdXMgcm93XG4gICAgICBjdXJyZW50WCA9IDA7XG4gICAgICBjdXJyZW50WSA9IGhlaWdodDtcblxuICAgICAgaWYgKGkgIT0gMCkge1xuICAgICAgICBjdXJyZW50WSArPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT047XG4gICAgICB9XG5cbiAgICAgIGhlaWdodCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHRyZWUgPSBmb3Jlc3RbaV07XG5cbiAgICAvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHRyZWVcbiAgICB2YXIgY2VudGVyTm9kZSA9IExheW91dC5maW5kQ2VudGVyT2ZUcmVlKHRyZWUpO1xuXG4gICAgLy8gU2V0IHRoZSBzdGFyaW5nIHBvaW50IG9mIHRoZSBuZXh0IHRyZWVcbiAgICBjdXJyZW50U3RhcnRpbmdQb2ludC54ID0gY3VycmVudFg7XG4gICAgY3VycmVudFN0YXJ0aW5nUG9pbnQueSA9IGN1cnJlbnRZO1xuXG4gICAgLy8gRG8gYSByYWRpYWwgbGF5b3V0IHN0YXJ0aW5nIHdpdGggdGhlIGNlbnRlclxuICAgIHBvaW50ID0gQ29TRUxheW91dC5yYWRpYWxMYXlvdXQodHJlZSwgY2VudGVyTm9kZSwgY3VycmVudFN0YXJ0aW5nUG9pbnQpO1xuXG4gICAgaWYgKHBvaW50LnkgPiBoZWlnaHQpIHtcbiAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IocG9pbnQueSk7XG4gICAgfVxuXG4gICAgY3VycmVudFggPSBNYXRoLmZsb29yKHBvaW50LnggKyBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pO1xuICB9XG5cbiAgdGhpcy50cmFuc2Zvcm0obmV3IFBvaW50RChMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggLSBwb2ludC54IC8gMiwgTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZIC0gcG9pbnQueSAvIDIpKTtcbn07XG5cbkNvU0VMYXlvdXQucmFkaWFsTGF5b3V0ID0gZnVuY3Rpb24gKHRyZWUsIGNlbnRlck5vZGUsIHN0YXJ0aW5nUG9pbnQpIHtcbiAgdmFyIHJhZGlhbFNlcCA9IE1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUodHJlZSksIENvU0VDb25zdGFudHMuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7XG4gIENvU0VMYXlvdXQuYnJhbmNoUmFkaWFsTGF5b3V0KGNlbnRlck5vZGUsIG51bGwsIDAsIDM1OSwgMCwgcmFkaWFsU2VwKTtcbiAgdmFyIGJvdW5kcyA9IExHcmFwaC5jYWxjdWxhdGVCb3VuZHModHJlZSk7XG5cbiAgdmFyIHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oKTtcbiAgdHJhbnNmb3JtLnNldERldmljZU9yZ1goYm91bmRzLmdldE1pblgoKSk7XG4gIHRyYW5zZm9ybS5zZXREZXZpY2VPcmdZKGJvdW5kcy5nZXRNaW5ZKCkpO1xuICB0cmFuc2Zvcm0uc2V0V29ybGRPcmdYKHN0YXJ0aW5nUG9pbnQueCk7XG4gIHRyYW5zZm9ybS5zZXRXb3JsZE9yZ1koc3RhcnRpbmdQb2ludC55KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IHRyZWVbaV07XG4gICAgbm9kZS50cmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgfVxuXG4gIHZhciBib3R0b21SaWdodCA9IG5ldyBQb2ludEQoYm91bmRzLmdldE1heFgoKSwgYm91bmRzLmdldE1heFkoKSk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoYm90dG9tUmlnaHQpO1xufTtcblxuQ29TRUxheW91dC5icmFuY2hSYWRpYWxMYXlvdXQgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50T2ZOb2RlLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwgZGlzdGFuY2UsIHJhZGlhbFNlcGFyYXRpb24pIHtcbiAgLy8gRmlyc3QsIHBvc2l0aW9uIHRoaXMgbm9kZSBieSBmaW5kaW5nIGl0cyBhbmdsZS5cbiAgdmFyIGhhbGZJbnRlcnZhbCA9IChlbmRBbmdsZSAtIHN0YXJ0QW5nbGUgKyAxKSAvIDI7XG5cbiAgaWYgKGhhbGZJbnRlcnZhbCA8IDApIHtcbiAgICBoYWxmSW50ZXJ2YWwgKz0gMTgwO1xuICB9XG5cbiAgdmFyIG5vZGVBbmdsZSA9IChoYWxmSW50ZXJ2YWwgKyBzdGFydEFuZ2xlKSAlIDM2MDtcbiAgdmFyIHRldGEgPSBub2RlQW5nbGUgKiBJR2VvbWV0cnkuVFdPX1BJIC8gMzYwO1xuXG4gIC8vIE1ha2UgcG9sYXIgdG8gamF2YSBjb3JkaW5hdGUgY29udmVyc2lvbi5cbiAgdmFyIGNvc190ZXRhID0gTWF0aC5jb3ModGV0YSk7XG4gIHZhciB4XyA9IGRpc3RhbmNlICogTWF0aC5jb3ModGV0YSk7XG4gIHZhciB5XyA9IGRpc3RhbmNlICogTWF0aC5zaW4odGV0YSk7XG5cbiAgbm9kZS5zZXRDZW50ZXIoeF8sIHlfKTtcblxuICAvLyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoaXMgbm9kZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzXG4gIC8vIGZ1bmN0aW9uLlxuICB2YXIgbmVpZ2hib3JFZGdlcyA9IFtdO1xuICBuZWlnaGJvckVkZ2VzID0gbmVpZ2hib3JFZGdlcy5jb25jYXQobm9kZS5nZXRFZGdlcygpKTtcbiAgdmFyIGNoaWxkQ291bnQgPSBuZWlnaGJvckVkZ2VzLmxlbmd0aDtcblxuICBpZiAocGFyZW50T2ZOb2RlICE9IG51bGwpIHtcbiAgICBjaGlsZENvdW50LS07XG4gIH1cblxuICB2YXIgYnJhbmNoQ291bnQgPSAwO1xuXG4gIHZhciBpbmNFZGdlc0NvdW50ID0gbmVpZ2hib3JFZGdlcy5sZW5ndGg7XG4gIHZhciBzdGFydEluZGV4O1xuXG4gIHZhciBlZGdlcyA9IG5vZGUuZ2V0RWRnZXNCZXR3ZWVuKHBhcmVudE9mTm9kZSk7XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGVkZ2VzLCBwcnVuZSB0aGVtIHVudGlsIHRoZXJlIHJlbWFpbnMgb25seSBvbmVcbiAgLy8gZWRnZS5cbiAgd2hpbGUgKGVkZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAvL25laWdoYm9yRWRnZXMucmVtb3ZlKGVkZ2VzLnJlbW92ZSgwKSk7XG4gICAgdmFyIHRlbXAgPSBlZGdlc1swXTtcbiAgICBlZGdlcy5zcGxpY2UoMCwgMSk7XG4gICAgdmFyIGluZGV4ID0gbmVpZ2hib3JFZGdlcy5pbmRleE9mKHRlbXApO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBuZWlnaGJvckVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGluY0VkZ2VzQ291bnQtLTtcbiAgICBjaGlsZENvdW50LS07XG4gIH1cblxuICBpZiAocGFyZW50T2ZOb2RlICE9IG51bGwpIHtcbiAgICAvL2Fzc2VydCBlZGdlcy5sZW5ndGggPT0gMTtcbiAgICBzdGFydEluZGV4ID0gKG5laWdoYm9yRWRnZXMuaW5kZXhPZihlZGdlc1swXSkgKyAxKSAlIGluY0VkZ2VzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRJbmRleCA9IDA7XG4gIH1cblxuICB2YXIgc3RlcEFuZ2xlID0gTWF0aC5hYnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKSAvIGNoaWxkQ291bnQ7XG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGJyYW5jaENvdW50ICE9IGNoaWxkQ291bnQ7IGkgPSArK2kgJSBpbmNFZGdlc0NvdW50KSB7XG4gICAgdmFyIGN1cnJlbnROZWlnaGJvciA9IG5laWdoYm9yRWRnZXNbaV0uZ2V0T3RoZXJFbmQobm9kZSk7XG5cbiAgICAvLyBEb24ndCBiYWNrIHRyYXZlcnNlIHRvIHJvb3Qgbm9kZSBpbiBjdXJyZW50IHRyZWUuXG4gICAgaWYgKGN1cnJlbnROZWlnaGJvciA9PSBwYXJlbnRPZk5vZGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjaGlsZFN0YXJ0QW5nbGUgPSAoc3RhcnRBbmdsZSArIGJyYW5jaENvdW50ICogc3RlcEFuZ2xlKSAlIDM2MDtcbiAgICB2YXIgY2hpbGRFbmRBbmdsZSA9IChjaGlsZFN0YXJ0QW5nbGUgKyBzdGVwQW5nbGUpICUgMzYwO1xuXG4gICAgQ29TRUxheW91dC5icmFuY2hSYWRpYWxMYXlvdXQoY3VycmVudE5laWdoYm9yLCBub2RlLCBjaGlsZFN0YXJ0QW5nbGUsIGNoaWxkRW5kQW5nbGUsIGRpc3RhbmNlICsgcmFkaWFsU2VwYXJhdGlvbiwgcmFkaWFsU2VwYXJhdGlvbik7XG5cbiAgICBicmFuY2hDb3VudCsrO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0Lm1heERpYWdvbmFsSW5UcmVlID0gZnVuY3Rpb24gKHRyZWUpIHtcbiAgdmFyIG1heERpYWdvbmFsID0gSW50ZWdlci5NSU5fVkFMVUU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSB0cmVlW2ldO1xuICAgIHZhciBkaWFnb25hbCA9IG5vZGUuZ2V0RGlhZ29uYWwoKTtcblxuICAgIGlmIChkaWFnb25hbCA+IG1heERpYWdvbmFsKSB7XG4gICAgICBtYXhEaWFnb25hbCA9IGRpYWdvbmFsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXhEaWFnb25hbDtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gZm9ybXVsYSBpcyAyIHggKGxldmVsICsgMSkgeCBpZGVhbEVkZ2VMZW5ndGhcbiAgcmV0dXJuIDIgKiAodGhpcy5sZXZlbCArIDEpICogdGhpcy5pZGVhbEVkZ2VMZW5ndGg7XG59O1xuXG4vLyBUaWxpbmcgbWV0aG9kc1xuXG4vLyBHcm91cCB6ZXJvIGRlZ3JlZSBtZW1iZXJzIHdob3NlIHBhcmVudHMgYXJlIG5vdCB0byBiZSB0aWxlZCwgY3JlYXRlIGR1bW15IHBhcmVudHMgd2hlcmUgbmVlZGVkIGFuZCBmaWxsIG1lbWJlckdyb3VwcyBieSB0aGVpciBkdW1tcCBwYXJlbnQgaWQnc1xuQ29TRUxheW91dC5wcm90b3R5cGUuZ3JvdXBaZXJvRGVncmVlTWVtYmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICAvLyBhcnJheSBvZiBbcGFyZW50X2lkIHggb25lRGVncmVlTm9kZV9pZF1cbiAgdmFyIHRlbXBNZW1iZXJHcm91cHMgPSB7fTsgLy8gQSB0ZW1wb3JhcnkgbWFwIG9mIHBhcmVudCBub2RlIGFuZCBpdHMgemVybyBkZWdyZWUgbWVtYmVyc1xuICB0aGlzLm1lbWJlckdyb3VwcyA9IHt9OyAvLyBBIG1hcCBvZiBkdW1teSBwYXJlbnQgbm9kZSBhbmQgaXRzIHplcm8gZGVncmVlIG1lbWJlcnMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHRvIGJlIHRpbGVkXG4gIHRoaXMuaWRUb0R1bW15Tm9kZSA9IHt9OyAvLyBBIG1hcCBvZiBpZCB0byBkdW1teSBub2RlIFxuXG4gIHZhciB6ZXJvRGVncmVlID0gW107IC8vIExpc3Qgb2YgemVybyBkZWdyZWUgbm9kZXMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHRvIGJlIHRpbGVkXG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG5cbiAgLy8gRmlsbCB6ZXJvIGRlZ3JlZSBsaXN0XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGFsbE5vZGVzW2ldO1xuICAgIHZhciBwYXJlbnQgPSBub2RlLmdldFBhcmVudCgpO1xuICAgIC8vIElmIGEgbm9kZSBoYXMgemVybyBkZWdyZWUgYW5kIGl0cyBwYXJlbnQgaXMgbm90IHRvIGJlIHRpbGVkIGlmIGV4aXN0cyBhZGQgdGhhdCBub2RlIHRvIHplcm9EZWdyZXMgbGlzdFxuICAgIGlmICh0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4obm9kZSkgPT09IDAgJiYgKHBhcmVudC5pZCA9PSB1bmRlZmluZWQgfHwgIXRoaXMuZ2V0VG9CZVRpbGVkKHBhcmVudCkpKSB7XG4gICAgICB6ZXJvRGVncmVlLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbWFwIG9mIHBhcmVudCBub2RlIGFuZCBpdHMgemVybyBkZWdyZWUgbWVtYmVyc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHplcm9EZWdyZWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IHplcm9EZWdyZWVbaV07IC8vIFplcm8gZGVncmVlIG5vZGUgaXRzZWxmXG4gICAgdmFyIHBfaWQgPSBub2RlLmdldFBhcmVudCgpLmlkOyAvLyBQYXJlbnQgaWRcblxuICAgIGlmICh0eXBlb2YgdGVtcE1lbWJlckdyb3Vwc1twX2lkXSA9PT0gXCJ1bmRlZmluZWRcIikgdGVtcE1lbWJlckdyb3Vwc1twX2lkXSA9IFtdO1xuXG4gICAgdGVtcE1lbWJlckdyb3Vwc1twX2lkXSA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF0uY29uY2F0KG5vZGUpOyAvLyBQdXNoIG5vZGUgdG8gdGhlIGxpc3QgYmVsb25ncyB0byBpdHMgcGFyZW50IGluIHRlbXBNZW1iZXJHcm91cHNcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gbm9kZXMgYXQgYSBsZXZlbCwgY3JlYXRlIGEgZHVtbXkgY29tcG91bmQgZm9yIHRoZW1cbiAgT2JqZWN0LmtleXModGVtcE1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbiAocF9pZCkge1xuICAgIGlmICh0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdLmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBkdW1teUNvbXBvdW5kSWQgPSBcIkR1bW15Q29tcG91bmRfXCIgKyBwX2lkOyAvLyBUaGUgaWQgb2YgZHVtbXkgY29tcG91bmQgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIHNvb25cbiAgICAgIHNlbGYubWVtYmVyR3JvdXBzW2R1bW15Q29tcG91bmRJZF0gPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdOyAvLyBBZGQgZHVtbXkgY29tcG91bmQgdG8gbWVtYmVyR3JvdXBzXG5cbiAgICAgIHZhciBwYXJlbnQgPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdWzBdLmdldFBhcmVudCgpOyAvLyBUaGUgcGFyZW50IG9mIHplcm8gZGVncmVlIG5vZGVzIHdpbGwgYmUgdGhlIHBhcmVudCBvZiBuZXcgZHVtbXkgY29tcG91bmRcblxuICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgY29tcG91bmQgd2l0aCBjYWxjdWxhdGVkIGlkXG4gICAgICB2YXIgZHVtbXlDb21wb3VuZCA9IG5ldyBDb1NFTm9kZShzZWxmLmdyYXBoTWFuYWdlcik7XG4gICAgICBkdW1teUNvbXBvdW5kLmlkID0gZHVtbXlDb21wb3VuZElkO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nTGVmdCA9IHBhcmVudC5wYWRkaW5nTGVmdCB8fCAwO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nUmlnaHQgPSBwYXJlbnQucGFkZGluZ1JpZ2h0IHx8IDA7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdCb3R0b20gPSBwYXJlbnQucGFkZGluZ0JvdHRvbSB8fCAwO1xuICAgICAgZHVtbXlDb21wb3VuZC5wYWRkaW5nVG9wID0gcGFyZW50LnBhZGRpbmdUb3AgfHwgMDtcblxuICAgICAgc2VsZi5pZFRvRHVtbXlOb2RlW2R1bW15Q29tcG91bmRJZF0gPSBkdW1teUNvbXBvdW5kO1xuXG4gICAgICB2YXIgZHVtbXlQYXJlbnRHcmFwaCA9IHNlbGYuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKHNlbGYubmV3R3JhcGgoKSwgZHVtbXlDb21wb3VuZCk7XG4gICAgICB2YXIgcGFyZW50R3JhcGggPSBwYXJlbnQuZ2V0Q2hpbGQoKTtcblxuICAgICAgLy8gQWRkIGR1bW15IGNvbXBvdW5kIHRvIHBhcmVudCB0aGUgZ3JhcGhcbiAgICAgIHBhcmVudEdyYXBoLmFkZChkdW1teUNvbXBvdW5kKTtcblxuICAgICAgLy8gRm9yIGVhY2ggemVybyBkZWdyZWUgbm9kZSBpbiB0aGlzIGxldmVsIHJlbW92ZSBpdCBmcm9tIGl0cyBwYXJlbnQgZ3JhcGggYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGggb2YgZHVtbXkgcGFyZW50XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXBNZW1iZXJHcm91cHNbcF9pZF0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdW2ldO1xuXG4gICAgICAgIHBhcmVudEdyYXBoLnJlbW92ZShub2RlKTtcbiAgICAgICAgZHVtbXlQYXJlbnRHcmFwaC5hZGQobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2hpbGRHcmFwaE1hcCA9IHt9O1xuICB2YXIgaWRUb05vZGUgPSB7fTtcblxuICAvLyBHZXQgY29tcG91bmQgb3JkZXJpbmcgYnkgZmluZGluZyB0aGUgaW5uZXIgb25lIGZpcnN0XG4gIHRoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoOyBpKyspIHtcblxuICAgIGlkVG9Ob2RlW3RoaXMuY29tcG91bmRPcmRlcltpXS5pZF0gPSB0aGlzLmNvbXBvdW5kT3JkZXJbaV07XG4gICAgY2hpbGRHcmFwaE1hcFt0aGlzLmNvbXBvdW5kT3JkZXJbaV0uaWRdID0gW10uY29uY2F0KHRoaXMuY29tcG91bmRPcmRlcltpXS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpO1xuXG4gICAgLy8gUmVtb3ZlIGNoaWxkcmVuIG9mIGNvbXBvdW5kc1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh0aGlzLmNvbXBvdW5kT3JkZXJbaV0uZ2V0Q2hpbGQoKSk7XG4gICAgdGhpcy5jb21wb3VuZE9yZGVyW2ldLmNoaWxkID0gbnVsbDtcbiAgfVxuXG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKTtcblxuICAvLyBUaWxlIHRoZSByZW1vdmVkIGNoaWxkcmVuXG4gIHRoaXMudGlsZUNvbXBvdW5kTWVtYmVycyhjaGlsZEdyYXBoTWFwLCBpZFRvTm9kZSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jbGVhclplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0aWxlZFplcm9EZWdyZWVQYWNrID0gdGhpcy50aWxlZFplcm9EZWdyZWVQYWNrID0gW107XG5cbiAgT2JqZWN0LmtleXModGhpcy5tZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGNvbXBvdW5kTm9kZSA9IHNlbGYuaWRUb0R1bW15Tm9kZVtpZF07IC8vIEdldCB0aGUgZHVtbXkgY29tcG91bmRcblxuICAgIHRpbGVkWmVyb0RlZ3JlZVBhY2tbaWRdID0gc2VsZi50aWxlTm9kZXMoc2VsZi5tZW1iZXJHcm91cHNbaWRdLCBjb21wb3VuZE5vZGUucGFkZGluZ0xlZnQgKyBjb21wb3VuZE5vZGUucGFkZGluZ1JpZ2h0KTtcblxuICAgIC8vIFNldCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZHVtbXkgY29tcG91bmQgYXMgY2FsY3VsYXRlZFxuICAgIGNvbXBvdW5kTm9kZS5yZWN0LndpZHRoID0gdGlsZWRaZXJvRGVncmVlUGFja1tpZF0ud2lkdGg7XG4gICAgY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0ID0gdGlsZWRaZXJvRGVncmVlUGFja1tpZF0uaGVpZ2h0O1xuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSB0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbENvbXBvdW5kTm9kZSA9IHRoaXMuY29tcG91bmRPcmRlcltpXTtcbiAgICB2YXIgaWQgPSBsQ29tcG91bmROb2RlLmlkO1xuICAgIHZhciBob3Jpem9udGFsTWFyZ2luID0gbENvbXBvdW5kTm9kZS5wYWRkaW5nTGVmdDtcbiAgICB2YXIgdmVydGljYWxNYXJnaW4gPSBsQ29tcG91bmROb2RlLnBhZGRpbmdUb3A7XG5cbiAgICB0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tpZF0sIGxDb21wb3VuZE5vZGUucmVjdC54LCBsQ29tcG91bmROb2RlLnJlY3QueSwgaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRpbGVkUGFjayA9IHRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztcblxuICBPYmplY3Qua2V5cyh0aWxlZFBhY2spLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGNvbXBvdW5kTm9kZSA9IHNlbGYuaWRUb0R1bW15Tm9kZVtpZF07IC8vIEdldCB0aGUgZHVtbXkgY29tcG91bmQgYnkgaXRzIGlkXG4gICAgdmFyIGhvcml6b250YWxNYXJnaW4gPSBjb21wb3VuZE5vZGUucGFkZGluZ0xlZnQ7XG4gICAgdmFyIHZlcnRpY2FsTWFyZ2luID0gY29tcG91bmROb2RlLnBhZGRpbmdUb3A7XG5cbiAgICAvLyBBZGp1c3QgdGhlIHBvc2l0aW9ucyBvZiBub2RlcyB3cnQgaXRzIGNvbXBvdW5kXG4gICAgc2VsZi5hZGp1c3RMb2NhdGlvbnModGlsZWRQYWNrW2lkXSwgY29tcG91bmROb2RlLnJlY3QueCwgY29tcG91bmROb2RlLnJlY3QueSwgaG9yaXpvbnRhbE1hcmdpbiwgdmVydGljYWxNYXJnaW4pO1xuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFRvQmVUaWxlZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBpZCA9IG5vZGUuaWQ7XG4gIC8vZmlyc3RseSBjaGVjayB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICBpZiAodGhpcy50b0JlVGlsZWRbaWRdICE9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy50b0JlVGlsZWRbaWRdO1xuICB9XG5cbiAgLy9vbmx5IGNvbXBvdW5kIG5vZGVzIGFyZSB0byBiZSB0aWxlZFxuICB2YXIgY2hpbGRHcmFwaCA9IG5vZGUuZ2V0Q2hpbGQoKTtcbiAgaWYgKGNoaWxkR3JhcGggPT0gbnVsbCkge1xuICAgIHRoaXMudG9CZVRpbGVkW2lkXSA9IGZhbHNlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IGNoaWxkR3JhcGguZ2V0Tm9kZXMoKTsgLy8gR2V0IHRoZSBjaGlsZHJlbiBub2Rlc1xuXG4gIC8vYSBjb21wb3VuZCBub2RlIGlzIG5vdCB0byBiZSB0aWxlZCBpZiBhbGwgb2YgaXRzIGNvbXBvdW5kIGNoaWxkcmVuIGFyZSBub3QgdG8gYmUgdGlsZWRcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0aGVDaGlsZCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKHRoaXMuZ2V0Tm9kZURlZ3JlZSh0aGVDaGlsZCkgPiAwKSB7XG4gICAgICB0aGlzLnRvQmVUaWxlZFtpZF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvL3Bhc3MgdGhlIGNoaWxkcmVuIG5vdCBoYXZpbmcgdGhlIGNvbXBvdW5kIHN0cnVjdHVyZVxuICAgIGlmICh0aGVDaGlsZC5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICAgIHRoaXMudG9CZVRpbGVkW3RoZUNoaWxkLmlkXSA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdldFRvQmVUaWxlZCh0aGVDaGlsZCkpIHtcbiAgICAgIHRoaXMudG9CZVRpbGVkW2lkXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB0aGlzLnRvQmVUaWxlZFtpZF0gPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIEdldCBkZWdyZWUgb2YgYSBub2RlIGRlcGVuZGluZyBvZiBpdHMgZWRnZXMgYW5kIGluZGVwZW5kZW50IG9mIGl0cyBjaGlsZHJlblxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBpZCA9IG5vZGUuaWQ7XG4gIHZhciBlZGdlcyA9IG5vZGUuZ2V0RWRnZXMoKTtcbiAgdmFyIGRlZ3JlZSA9IDA7XG5cbiAgLy8gRm9yIHRoZSBlZGdlcyBjb25uZWN0ZWRcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgaWYgKGVkZ2UuZ2V0U291cmNlKCkuaWQgIT09IGVkZ2UuZ2V0VGFyZ2V0KCkuaWQpIHtcbiAgICAgIGRlZ3JlZSA9IGRlZ3JlZSArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWdyZWU7XG59O1xuXG4vLyBHZXQgZGVncmVlIG9mIGEgbm9kZSB3aXRoIGl0cyBjaGlsZHJlblxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBkZWdyZWUgPSB0aGlzLmdldE5vZGVEZWdyZWUobm9kZSk7XG4gIGlmIChub2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgIHJldHVybiBkZWdyZWU7XG4gIH1cbiAgdmFyIGNoaWxkcmVuID0gbm9kZS5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBkZWdyZWUgKz0gdGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKGNoaWxkKTtcbiAgfVxuICByZXR1cm4gZGVncmVlO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucGVyZm9ybURGU09uQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNvbXBvdW5kT3JkZXIgPSBbXTtcbiAgdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUyA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLmdldENoaWxkKCkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhjaGlsZC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRUb0JlVGlsZWQoY2hpbGQpKSB7XG4gICAgICB0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiogVGhpcyBtZXRob2QgcGxhY2VzIGVhY2ggemVybyBkZWdyZWUgbWVtYmVyIHdydCBnaXZlbiAoeCx5KSBjb29yZGluYXRlcyAodG9wIGxlZnQpLlxuKi9cbkNvU0VMYXlvdXQucHJvdG90eXBlLmFkanVzdExvY2F0aW9ucyA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24sIHgsIHksIGNvbXBvdW5kSG9yaXpvbnRhbE1hcmdpbiwgY29tcG91bmRWZXJ0aWNhbE1hcmdpbikge1xuICB4ICs9IGNvbXBvdW5kSG9yaXpvbnRhbE1hcmdpbjtcbiAgeSArPSBjb21wb3VuZFZlcnRpY2FsTWFyZ2luO1xuXG4gIHZhciBsZWZ0ID0geDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJvdyA9IG9yZ2FuaXphdGlvbi5yb3dzW2ldO1xuICAgIHggPSBsZWZ0O1xuICAgIHZhciBtYXhIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBsbm9kZSA9IHJvd1tqXTtcblxuICAgICAgbG5vZGUucmVjdC54ID0geDsgLy8gKyBsbm9kZS5yZWN0LndpZHRoIC8gMjtcbiAgICAgIGxub2RlLnJlY3QueSA9IHk7IC8vICsgbG5vZGUucmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgICB4ICs9IGxub2RlLnJlY3Qud2lkdGggKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmc7XG5cbiAgICAgIGlmIChsbm9kZS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gbG5vZGUucmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgeSArPSBtYXhIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzID0gZnVuY3Rpb24gKGNoaWxkR3JhcGhNYXAsIGlkVG9Ob2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy50aWxlZE1lbWJlclBhY2sgPSBbXTtcblxuICBPYmplY3Qua2V5cyhjaGlsZEdyYXBoTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIC8vIEdldCB0aGUgY29tcG91bmQgbm9kZVxuICAgIHZhciBjb21wb3VuZE5vZGUgPSBpZFRvTm9kZVtpZF07XG5cbiAgICBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0gPSBzZWxmLnRpbGVOb2RlcyhjaGlsZEdyYXBoTWFwW2lkXSwgY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0ICsgY29tcG91bmROb2RlLnBhZGRpbmdSaWdodCk7XG5cbiAgICBjb21wb3VuZE5vZGUucmVjdC53aWR0aCA9IHNlbGYudGlsZWRNZW1iZXJQYWNrW2lkXS53aWR0aDtcbiAgICBjb21wb3VuZE5vZGUucmVjdC5oZWlnaHQgPSBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0uaGVpZ2h0O1xuICB9KTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnRpbGVOb2RlcyA9IGZ1bmN0aW9uIChub2RlcywgbWluV2lkdGgpIHtcbiAgdmFyIHZlcnRpY2FsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw7XG4gIHZhciBob3Jpem9udGFsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTDtcbiAgdmFyIG9yZ2FuaXphdGlvbiA9IHtcbiAgICByb3dzOiBbXSxcbiAgICByb3dXaWR0aDogW10sXG4gICAgcm93SGVpZ2h0OiBbXSxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IG1pbldpZHRoLCAvLyBhc3N1bWUgbWluSGVpZ2h0IGVxdWFscyB0byBtaW5XaWR0aFxuICAgIHZlcnRpY2FsUGFkZGluZzogdmVydGljYWxQYWRkaW5nLFxuICAgIGhvcml6b250YWxQYWRkaW5nOiBob3Jpem9udGFsUGFkZGluZ1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG5vZGVzIGluIGFzY2VuZGluZyBvcmRlciBvZiB0aGVpciBhcmVhc1xuICBub2Rlcy5zb3J0KGZ1bmN0aW9uIChuMSwgbjIpIHtcbiAgICBpZiAobjEucmVjdC53aWR0aCAqIG4xLnJlY3QuaGVpZ2h0ID4gbjIucmVjdC53aWR0aCAqIG4yLnJlY3QuaGVpZ2h0KSByZXR1cm4gLTE7XG4gICAgaWYgKG4xLnJlY3Qud2lkdGggKiBuMS5yZWN0LmhlaWdodCA8IG4yLnJlY3Qud2lkdGggKiBuMi5yZWN0LmhlaWdodCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIC8vIENyZWF0ZSB0aGUgb3JnYW5pemF0aW9uIC0+IHRpbGUgbWVtYmVyc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaW5zZXJ0Tm9kZVRvUm93KG9yZ2FuaXphdGlvbiwgbE5vZGUsIDAsIG1pbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FuQWRkSG9yaXpvbnRhbChvcmdhbml6YXRpb24sIGxOb2RlLnJlY3Qud2lkdGgsIGxOb2RlLnJlY3QuaGVpZ2h0KSkge1xuICAgICAgdGhpcy5pbnNlcnROb2RlVG9Sb3cob3JnYW5pemF0aW9uLCBsTm9kZSwgdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KG9yZ2FuaXphdGlvbiksIG1pbldpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnNlcnROb2RlVG9Sb3cob3JnYW5pemF0aW9uLCBsTm9kZSwgb3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoLCBtaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaGlmdFRvTGFzdFJvdyhvcmdhbml6YXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuaXphdGlvbjtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmluc2VydE5vZGVUb1JvdyA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24sIG5vZGUsIHJvd0luZGV4LCBtaW5XaWR0aCkge1xuICB2YXIgbWluQ29tcG91bmRTaXplID0gbWluV2lkdGg7XG5cbiAgLy8gQWRkIG5ldyByb3cgaWYgbmVlZGVkXG4gIGlmIChyb3dJbmRleCA9PSBvcmdhbml6YXRpb24ucm93cy5sZW5ndGgpIHtcbiAgICB2YXIgc2Vjb25kRGltZW5zaW9uID0gW107XG5cbiAgICBvcmdhbml6YXRpb24ucm93cy5wdXNoKHNlY29uZERpbWVuc2lvbik7XG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoLnB1c2gobWluQ29tcG91bmRTaXplKTtcbiAgICBvcmdhbml6YXRpb24ucm93SGVpZ2h0LnB1c2goMCk7XG4gIH1cblxuICAvLyBVcGRhdGUgcm93IHdpZHRoXG4gIHZhciB3ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW3Jvd0luZGV4XSArIG5vZGUucmVjdC53aWR0aDtcblxuICBpZiAob3JnYW5pemF0aW9uLnJvd3Nbcm93SW5kZXhdLmxlbmd0aCA+IDApIHtcbiAgICB3ICs9IG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZztcbiAgfVxuXG4gIG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtyb3dJbmRleF0gPSB3O1xuICAvLyBVcGRhdGUgY29tcG91bmQgd2lkdGhcbiAgaWYgKG9yZ2FuaXphdGlvbi53aWR0aCA8IHcpIHtcbiAgICBvcmdhbml6YXRpb24ud2lkdGggPSB3O1xuICB9XG5cbiAgLy8gVXBkYXRlIGhlaWdodFxuICB2YXIgaCA9IG5vZGUucmVjdC5oZWlnaHQ7XG4gIGlmIChyb3dJbmRleCA+IDApIGggKz0gb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICB2YXIgZXh0cmFIZWlnaHQgPSAwO1xuICBpZiAoaCA+IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdKSB7XG4gICAgZXh0cmFIZWlnaHQgPSBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XTtcbiAgICBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XSA9IGg7XG4gICAgZXh0cmFIZWlnaHQgPSBvcmdhbml6YXRpb24ucm93SGVpZ2h0W3Jvd0luZGV4XSAtIGV4dHJhSGVpZ2h0O1xuICB9XG5cbiAgb3JnYW5pemF0aW9uLmhlaWdodCArPSBleHRyYUhlaWdodDtcblxuICAvLyBJbnNlcnQgbm9kZVxuICBvcmdhbml6YXRpb24ucm93c1tyb3dJbmRleF0ucHVzaChub2RlKTtcbn07XG5cbi8vU2NhbnMgdGhlIHJvd3Mgb2YgYW4gb3JnYW5pemF0aW9uIGFuZCByZXR1cm5zIHRoZSBvbmUgd2l0aCB0aGUgbWluIHdpZHRoXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgciA9IC0xO1xuICB2YXIgbWluID0gTnVtYmVyLk1BWF9WQUxVRTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXSA8IG1pbikge1xuICAgICAgciA9IGk7XG4gICAgICBtaW4gPSBvcmdhbml6YXRpb24ucm93V2lkdGhbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufTtcblxuLy9TY2FucyB0aGUgcm93cyBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHJldHVybnMgdGhlIG9uZSB3aXRoIHRoZSBtYXggd2lkdGhcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleCA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24pIHtcbiAgdmFyIHIgPSAtMTtcbiAgdmFyIG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmdhbml6YXRpb24ucm93cy5sZW5ndGg7IGkrKykge1xuXG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXSA+IG1heCkge1xuICAgICAgciA9IGk7XG4gICAgICBtYXggPSBvcmdhbml6YXRpb24ucm93V2lkdGhbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHI7XG59O1xuXG4vKipcbiogVGhpcyBtZXRob2QgY2hlY2tzIHdoZXRoZXIgYWRkaW5nIGV4dHJhIHdpZHRoIHRvIHRoZSBvcmdhbml6YXRpb24gdmlvbGF0ZXNcbiogdGhlIGFzcGVjdCByYXRpbygxKSBvciBub3QuXG4qL1xuQ29TRUxheW91dC5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChvcmdhbml6YXRpb24sIGV4dHJhV2lkdGgsIGV4dHJhSGVpZ2h0KSB7XG5cbiAgdmFyIHNyaSA9IHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChvcmdhbml6YXRpb24pO1xuXG4gIGlmIChzcmkgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbWluID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW3NyaV07XG5cbiAgaWYgKG1pbiArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZyArIGV4dHJhV2lkdGggPD0gb3JnYW5pemF0aW9uLndpZHRoKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgaERpZmYgPSAwO1xuXG4gIC8vIEFkZGluZyB0byBhbiBleGlzdGluZyByb3dcbiAgaWYgKG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbc3JpXSA8IGV4dHJhSGVpZ2h0KSB7XG4gICAgaWYgKHNyaSA+IDApIGhEaWZmID0gZXh0cmFIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nIC0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtzcmldO1xuICB9XG5cbiAgdmFyIGFkZF90b19yb3dfcmF0aW87XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBtaW4gPj0gZXh0cmFXaWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZykge1xuICAgIGFkZF90b19yb3dfcmF0aW8gPSAob3JnYW5pemF0aW9uLmhlaWdodCArIGhEaWZmKSAvIChtaW4gKyBleHRyYVdpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRfdG9fcm93X3JhdGlvID0gKG9yZ2FuaXphdGlvbi5oZWlnaHQgKyBoRGlmZikgLyBvcmdhbml6YXRpb24ud2lkdGg7XG4gIH1cblxuICAvLyBBZGRpbmcgYSBuZXcgcm93IGZvciB0aGlzIG5vZGVcbiAgaERpZmYgPSBleHRyYUhlaWdodCArIG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmc7XG4gIHZhciBhZGRfbmV3X3Jvd19yYXRpbztcbiAgaWYgKG9yZ2FuaXphdGlvbi53aWR0aCA8IGV4dHJhV2lkdGgpIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gZXh0cmFXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gb3JnYW5pemF0aW9uLndpZHRoO1xuICB9XG5cbiAgaWYgKGFkZF9uZXdfcm93X3JhdGlvIDwgMSkgYWRkX25ld19yb3dfcmF0aW8gPSAxIC8gYWRkX25ld19yb3dfcmF0aW87XG5cbiAgaWYgKGFkZF90b19yb3dfcmF0aW8gPCAxKSBhZGRfdG9fcm93X3JhdGlvID0gMSAvIGFkZF90b19yb3dfcmF0aW87XG5cbiAgcmV0dXJuIGFkZF90b19yb3dfcmF0aW8gPCBhZGRfbmV3X3Jvd19yYXRpbztcbn07XG5cbi8vSWYgbW92aW5nIHRoZSBsYXN0IG5vZGUgZnJvbSB0aGUgbG9uZ2VzdCByb3cgYW5kIGFkZGluZyBpdCB0byB0aGUgbGFzdFxuLy9yb3cgbWFrZXMgdGhlIGJvdW5kaW5nIGJveCBzbWFsbGVyLCBkbyBpdC5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgbG9uZ2VzdCA9IHRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KG9yZ2FuaXphdGlvbik7XG4gIHZhciBsYXN0ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoLmxlbmd0aCAtIDE7XG4gIHZhciByb3cgPSBvcmdhbml6YXRpb24ucm93c1tsb25nZXN0XTtcbiAgdmFyIG5vZGUgPSByb3dbcm93Lmxlbmd0aCAtIDFdO1xuXG4gIHZhciBkaWZmID0gbm9kZS53aWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZztcblxuICAvLyBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2Ugb24gdGhlIGxhc3Qgcm93XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPiBkaWZmICYmIGxvbmdlc3QgIT0gbGFzdCkge1xuICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsb25nZXN0IHJvd1xuICAgIHJvdy5zcGxpY2UoLTEsIDEpO1xuXG4gICAgLy8gUHVzaCBpdCB0byB0aGUgbGFzdCByb3dcbiAgICBvcmdhbml6YXRpb24ucm93c1tsYXN0XS5wdXNoKG5vZGUpO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdIC0gZGlmZjtcbiAgICBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gKyBkaWZmO1xuICAgIG9yZ2FuaXphdGlvbi53aWR0aCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgob3JnYW5pemF0aW9uKV07XG5cbiAgICAvLyBVcGRhdGUgaGVpZ2h0cyBvZiB0aGUgb3JnYW5pemF0aW9uXG4gICAgdmFyIG1heEhlaWdodCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dbaV0uaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSByb3dbaV0uaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAobG9uZ2VzdCA+IDApIG1heEhlaWdodCArPSBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuXG4gICAgdmFyIHByZXZUb3RhbCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbG9uZ2VzdF0gKyBvcmdhbml6YXRpb24ucm93SGVpZ2h0W2xhc3RdO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSA9IG1heEhlaWdodDtcbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA8IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZykgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA9IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICAgIHZhciBmaW5hbFRvdGFsID0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSArIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbGFzdF07XG4gICAgb3JnYW5pemF0aW9uLmhlaWdodCArPSBmaW5hbFRvdGFsIC0gcHJldlRvdGFsO1xuXG4gICAgdGhpcy5zaGlmdFRvTGFzdFJvdyhvcmdhbml6YXRpb24pO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChDb1NFQ29uc3RhbnRzLlRJTEUpIHtcbiAgICAvLyBGaW5kIHplcm8gZGVncmVlIG5vZGVzIGFuZCBjcmVhdGUgYSBjb21wb3VuZCBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpO1xuICAgIC8vIFRpbGUgYW5kIGNsZWFyIGNoaWxkcmVuIG9mIGVhY2ggY29tcG91bmRcbiAgICB0aGlzLmNsZWFyQ29tcG91bmRzKCk7XG4gICAgLy8gU2VwYXJhdGVseSB0aWxlIGFuZCBjbGVhciB6ZXJvIGRlZ3JlZSBub2RlcyBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoQ29TRUNvbnN0YW50cy5USUxFKSB7XG4gICAgdGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKTtcbiAgICB0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IFRyZWUgUmVkdWN0aW9uIG1ldGhvZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWR1Y2UgdHJlZXMgXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZWR1Y2VUcmVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBydW5lZE5vZGVzQWxsID0gW107XG4gIHZhciBjb250YWluc0xlYWYgPSB0cnVlO1xuICB2YXIgbm9kZTtcblxuICB3aGlsZSAoY29udGFpbnNMZWFmKSB7XG4gICAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcbiAgICB2YXIgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wID0gW107XG4gICAgY29udGFpbnNMZWFmID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5nZXRFZGdlcygpLmxlbmd0aCA9PSAxICYmICFub2RlLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoICYmIG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcC5wdXNoKFtub2RlLCBub2RlLmdldEVkZ2VzKClbMF0sIG5vZGUuZ2V0T3duZXIoKV0pO1xuICAgICAgICBjb250YWluc0xlYWYgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGFpbnNMZWFmID09IHRydWUpIHtcbiAgICAgIHZhciBwcnVuZWROb2Rlc0luU3RlcCA9IFtdO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcnVuZWROb2Rlc0luU3RlcFRlbXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXVswXS5nZXRFZGdlcygpLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgcHJ1bmVkTm9kZXNJblN0ZXAucHVzaChwcnVuZWROb2Rlc0luU3RlcFRlbXBbal0pO1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXVswXS5nZXRPd25lcigpLnJlbW92ZShwcnVuZWROb2Rlc0luU3RlcFRlbXBbal1bMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcnVuZWROb2Rlc0FsbC5wdXNoKHBydW5lZE5vZGVzSW5TdGVwKTtcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKTtcbiAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5wcnVuZWROb2Rlc0FsbCA9IHBydW5lZE5vZGVzQWxsO1xufTtcblxuLy8gR3JvdyB0cmVlIG9uZSBzdGVwIFxuQ29TRUxheW91dC5wcm90b3R5cGUuZ3Jvd1RyZWUgPSBmdW5jdGlvbiAocHJ1bmVkTm9kZXNBbGwpIHtcbiAgdmFyIGxlbmd0aE9mUHJ1bmVkTm9kZXNJblN0ZXAgPSBwcnVuZWROb2Rlc0FsbC5sZW5ndGg7XG4gIHZhciBwcnVuZWROb2Rlc0luU3RlcCA9IHBydW5lZE5vZGVzQWxsW2xlbmd0aE9mUHJ1bmVkTm9kZXNJblN0ZXAgLSAxXTtcblxuICB2YXIgbm9kZURhdGE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJ1bmVkTm9kZXNJblN0ZXAubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlRGF0YSA9IHBydW5lZE5vZGVzSW5TdGVwW2ldO1xuXG4gICAgdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKG5vZGVEYXRhKTtcblxuICAgIG5vZGVEYXRhWzJdLmFkZChub2RlRGF0YVswXSk7XG4gICAgbm9kZURhdGFbMl0uYWRkKG5vZGVEYXRhWzFdLCBub2RlRGF0YVsxXS5zb3VyY2UsIG5vZGVEYXRhWzFdLnRhcmdldCk7XG4gIH1cblxuICBwcnVuZWROb2Rlc0FsbC5zcGxpY2UocHJ1bmVkTm9kZXNBbGwubGVuZ3RoIC0gMSwgMSk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpO1xufTtcblxuLy8gRmluZCBhbiBhcHByb3ByaWF0ZSBwb3NpdGlvbiB0byByZXBsYWNlIHBydW5lZCBub2RlLCB0aGlzIG1ldGhvZCBjYW4gYmUgaW1wcm92ZWRcbkNvU0VMYXlvdXQucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGUgPSBmdW5jdGlvbiAobm9kZURhdGEpIHtcblxuICB2YXIgZ3JpZEZvclBydW5lZE5vZGU7XG4gIHZhciBub2RlVG9Db25uZWN0O1xuICB2YXIgcHJ1bmVkTm9kZSA9IG5vZGVEYXRhWzBdO1xuICBpZiAocHJ1bmVkTm9kZSA9PSBub2RlRGF0YVsxXS5zb3VyY2UpIHtcbiAgICBub2RlVG9Db25uZWN0ID0gbm9kZURhdGFbMV0udGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIG5vZGVUb0Nvbm5lY3QgPSBub2RlRGF0YVsxXS5zb3VyY2U7XG4gIH1cbiAgdmFyIHN0YXJ0R3JpZFggPSBub2RlVG9Db25uZWN0LnN0YXJ0WDtcbiAgdmFyIGZpbmlzaEdyaWRYID0gbm9kZVRvQ29ubmVjdC5maW5pc2hYO1xuICB2YXIgc3RhcnRHcmlkWSA9IG5vZGVUb0Nvbm5lY3Quc3RhcnRZO1xuICB2YXIgZmluaXNoR3JpZFkgPSBub2RlVG9Db25uZWN0LmZpbmlzaFk7XG5cbiAgdmFyIHVwTm9kZUNvdW50ID0gMDtcbiAgdmFyIGRvd25Ob2RlQ291bnQgPSAwO1xuICB2YXIgcmlnaHROb2RlQ291bnQgPSAwO1xuICB2YXIgbGVmdE5vZGVDb3VudCA9IDA7XG4gIHZhciBjb250cm9sUmVnaW9ucyA9IFt1cE5vZGVDb3VudCwgcmlnaHROb2RlQ291bnQsIGRvd25Ob2RlQ291bnQsIGxlZnROb2RlQ291bnRdO1xuXG4gIGlmIChzdGFydEdyaWRZID4gMCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRYOyBpIDw9IGZpbmlzaEdyaWRYOyBpKyspIHtcbiAgICAgIGNvbnRyb2xSZWdpb25zWzBdICs9IHRoaXMuZ3JpZFtpXVtzdGFydEdyaWRZIC0gMV0ubGVuZ3RoICsgdGhpcy5ncmlkW2ldW3N0YXJ0R3JpZFldLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG4gIGlmIChmaW5pc2hHcmlkWCA8IHRoaXMuZ3JpZC5sZW5ndGggLSAxKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFk7IGkgPD0gZmluaXNoR3JpZFk7IGkrKykge1xuICAgICAgY29udHJvbFJlZ2lvbnNbMV0gKz0gdGhpcy5ncmlkW2ZpbmlzaEdyaWRYICsgMV1baV0ubGVuZ3RoICsgdGhpcy5ncmlkW2ZpbmlzaEdyaWRYXVtpXS5sZW5ndGggLSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZmluaXNoR3JpZFkgPCB0aGlzLmdyaWRbMF0ubGVuZ3RoIC0gMSkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRYOyBpIDw9IGZpbmlzaEdyaWRYOyBpKyspIHtcbiAgICAgIGNvbnRyb2xSZWdpb25zWzJdICs9IHRoaXMuZ3JpZFtpXVtmaW5pc2hHcmlkWSArIDFdLmxlbmd0aCArIHRoaXMuZ3JpZFtpXVtmaW5pc2hHcmlkWV0ubGVuZ3RoIC0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXJ0R3JpZFggPiAwKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFk7IGkgPD0gZmluaXNoR3JpZFk7IGkrKykge1xuICAgICAgY29udHJvbFJlZ2lvbnNbM10gKz0gdGhpcy5ncmlkW3N0YXJ0R3JpZFggLSAxXVtpXS5sZW5ndGggKyB0aGlzLmdyaWRbc3RhcnRHcmlkWF1baV0ubGVuZ3RoIC0gMTtcbiAgICB9XG4gIH1cbiAgdmFyIG1pbiA9IEludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgbWluQ291bnQ7XG4gIHZhciBtaW5JbmRleDtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBjb250cm9sUmVnaW9ucy5sZW5ndGg7IGorKykge1xuICAgIGlmIChjb250cm9sUmVnaW9uc1tqXSA8IG1pbikge1xuICAgICAgbWluID0gY29udHJvbFJlZ2lvbnNbal07XG4gICAgICBtaW5Db3VudCA9IDE7XG4gICAgICBtaW5JbmRleCA9IGo7XG4gICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1tqXSA9PSBtaW4pIHtcbiAgICAgIG1pbkNvdW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1pbkNvdW50ID09IDMgJiYgbWluID09IDApIHtcbiAgICBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1sxXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzJdID09IDApIHtcbiAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzJdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzNdID09IDApIHtcbiAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWluQ291bnQgPT0gMiAmJiBtaW4gPT0gMCkge1xuICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKTtcbiAgICBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1sxXSA9PSAwKSB7XG4gICAgICA7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChtaW5Db3VudCA9PSA0ICYmIG1pbiA9PSAwKSB7XG4gICAgdmFyIHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDQpO1xuICAgIGdyaWRGb3JQcnVuZWROb2RlID0gcmFuZG9tO1xuICB9IGVsc2Uge1xuICAgIGdyaWRGb3JQcnVuZWROb2RlID0gbWluSW5kZXg7XG4gIH1cblxuICBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMCkge1xuICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSAtIG5vZGVUb0Nvbm5lY3QuZ2V0SGVpZ2h0KCkgLyAyIC0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAtIHBydW5lZE5vZGUuZ2V0SGVpZ2h0KCkgLyAyKTtcbiAgfSBlbHNlIGlmIChncmlkRm9yUHJ1bmVkTm9kZSA9PSAxKSB7XG4gICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCkgKyBub2RlVG9Db25uZWN0LmdldFdpZHRoKCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0V2lkdGgoKSAvIDIsIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpKTtcbiAgfSBlbHNlIGlmIChncmlkRm9yUHJ1bmVkTm9kZSA9PSAyKSB7XG4gICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCksIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpICsgbm9kZVRvQ29ubmVjdC5nZXRIZWlnaHQoKSAvIDIgKyBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIICsgcHJ1bmVkTm9kZS5nZXRIZWlnaHQoKSAvIDIpO1xuICB9IGVsc2Uge1xuICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpIC0gbm9kZVRvQ29ubmVjdC5nZXRXaWR0aCgpIC8gMiAtIEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggLSBwcnVuZWROb2RlLmdldFdpZHRoKCkgLyAyLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUxheW91dDtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBjb3NlQmFzZSA9IHt9O1xuXG5jb3NlQmFzZS5sYXlvdXRCYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbmNvc2VCYXNlLkNvU0VDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuY29zZUJhc2UuQ29TRUVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuY29zZUJhc2UuQ29TRUdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbmNvc2VCYXNlLkNvU0VHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuY29zZUJhc2UuQ29TRUxheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5jb3NlQmFzZS5Db1NFTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29zZUJhc2U7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pOyIsCiAgICAiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiY29zZS1iYXNlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImNvc2UtYmFzZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjeXRvc2NhcGVDb3NlQmlsa2VudFwiXSA9IGZhY3RvcnkocmVxdWlyZShcImNvc2UtYmFzZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiY3l0b3NjYXBlQ29zZUJpbGtlbnRcIl0gPSBmYWN0b3J5KHJvb3RbXCJjb3NlQmFzZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzBfXykge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCkubGF5b3V0QmFzZS5MYXlvdXRDb25zdGFudHM7XG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuRkRMYXlvdXRDb25zdGFudHM7XG52YXIgQ29TRUNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCkuQ29TRUNvbnN0YW50cztcbnZhciBDb1NFTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Db1NFTGF5b3V0O1xudmFyIENvU0VOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKS5Db1NFTm9kZTtcbnZhciBQb2ludEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuUG9pbnREO1xudmFyIERpbWVuc2lvbkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApLmxheW91dEJhc2UuRGltZW5zaW9uRDtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvLyBDYWxsZWQgb24gYGxheW91dHJlYWR5YFxuICByZWFkeTogZnVuY3Rpb24gcmVhZHkoKSB7fSxcbiAgLy8gQ2FsbGVkIG9uIGBsYXlvdXRzdG9wYFxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30sXG4gIC8vICdkcmFmdCcsICdkZWZhdWx0JyBvciAncHJvb2ZcIiBcbiAgLy8gLSAnZHJhZnQnIGZhc3QgY29vbGluZyByYXRlIFxuICAvLyAtICdkZWZhdWx0JyBtb2RlcmF0ZSBjb29saW5nIHJhdGUgXG4gIC8vIC0gXCJwcm9vZlwiIHNsb3cgY29vbGluZyByYXRlXG4gIHF1YWxpdHk6ICdkZWZhdWx0JyxcbiAgLy8gaW5jbHVkZSBsYWJlbHMgaW4gbm9kZSBkaW1lbnNpb25zXG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gIC8vIG51bWJlciBvZiB0aWNrcyBwZXIgZnJhbWU7IGhpZ2hlciBpcyBmYXN0ZXIgYnV0IG1vcmUgamVya3lcbiAgcmVmcmVzaDogMzAsXG4gIC8vIFdoZXRoZXIgdG8gZml0IHRoZSBuZXR3b3JrIHZpZXcgYWZ0ZXIgd2hlbiBkb25lXG4gIGZpdDogdHJ1ZSxcbiAgLy8gUGFkZGluZyBvbiBmaXRcbiAgcGFkZGluZzogMTAsXG4gIC8vIFdoZXRoZXIgdG8gZW5hYmxlIGluY3JlbWVudGFsIG1vZGVcbiAgcmFuZG9taXplOiB0cnVlLFxuICAvLyBOb2RlIHJlcHVsc2lvbiAobm9uIG92ZXJsYXBwaW5nKSBtdWx0aXBsaWVyXG4gIG5vZGVSZXB1bHNpb246IDQ1MDAsXG4gIC8vIElkZWFsIGVkZ2UgKG5vbiBuZXN0ZWQpIGxlbmd0aFxuICBpZGVhbEVkZ2VMZW5ndGg6IDUwLFxuICAvLyBEaXZpc29yIHRvIGNvbXB1dGUgZWRnZSBmb3JjZXNcbiAgZWRnZUVsYXN0aWNpdHk6IDAuNDUsXG4gIC8vIE5lc3RpbmcgZmFjdG9yIChtdWx0aXBsaWVyKSB0byBjb21wdXRlIGlkZWFsIGVkZ2UgbGVuZ3RoIGZvciBuZXN0ZWQgZWRnZXNcbiAgbmVzdGluZ0ZhY3RvcjogMC4xLFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudClcbiAgZ3Jhdml0eTogMC4yNSxcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtXG4gIG51bUl0ZXI6IDI1MDAsXG4gIC8vIEZvciBlbmFibGluZyB0aWxpbmdcbiAgdGlsZTogdHJ1ZSxcbiAgLy8gVHlwZSBvZiBsYXlvdXQgYW5pbWF0aW9uLiBUaGUgb3B0aW9uIHNldCBpcyB7J2R1cmluZycsICdlbmQnLCBmYWxzZX1cbiAgYW5pbWF0ZTogJ2VuZCcsXG4gIC8vIER1cmF0aW9uIGZvciBhbmltYXRlOmVuZFxuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBSZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgdGhlIHZlcnRpY2FsIHNwYWNlIHRvIHB1dCBiZXR3ZWVuIHRoZSB6ZXJvIGRlZ3JlZSBtZW1iZXJzIGR1cmluZyB0aGUgdGlsaW5nIG9wZXJhdGlvbihjYW4gYWxzbyBiZSBhIGZ1bmN0aW9uKVxuICB0aWxpbmdQYWRkaW5nVmVydGljYWw6IDEwLFxuICAvLyBSZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgdGhlIGhvcml6b250YWwgc3BhY2UgdG8gcHV0IGJldHdlZW4gdGhlIHplcm8gZGVncmVlIG1lbWJlcnMgZHVyaW5nIHRoZSB0aWxpbmcgb3BlcmF0aW9uKGNhbiBhbHNvIGJlIGEgZnVuY3Rpb24pXG4gIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgLy8gR3Jhdml0eSByYW5nZSAoY29uc3RhbnQpIGZvciBjb21wb3VuZHNcbiAgZ3Jhdml0eVJhbmdlQ29tcG91bmQ6IDEuNSxcbiAgLy8gR3Jhdml0eSBmb3JjZSAoY29uc3RhbnQpIGZvciBjb21wb3VuZHNcbiAgZ3Jhdml0eUNvbXBvdW5kOiAxLjAsXG4gIC8vIEdyYXZpdHkgcmFuZ2UgKGNvbnN0YW50KVxuICBncmF2aXR5UmFuZ2U6IDMuOCxcbiAgLy8gSW5pdGlhbCBjb29saW5nIGZhY3RvciBmb3IgaW5jcmVtZW50YWwgbGF5b3V0XG4gIGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOiAwLjVcbn07XG5cbmZ1bmN0aW9uIGV4dGVuZChkZWZhdWx0cywgb3B0aW9ucykge1xuICB2YXIgb2JqID0ge307XG5cbiAgZm9yICh2YXIgaSBpbiBkZWZhdWx0cykge1xuICAgIG9ialtpXSA9IGRlZmF1bHRzW2ldO1xuICB9XG5cbiAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgb2JqW2ldID0gb3B0aW9uc1tpXTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5mdW5jdGlvbiBfQ29TRUxheW91dChfb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoZGVmYXVsdHMsIF9vcHRpb25zKTtcbiAgZ2V0VXNlck9wdGlvbnModGhpcy5vcHRpb25zKTtcbn1cblxudmFyIGdldFVzZXJPcHRpb25zID0gZnVuY3Rpb24gZ2V0VXNlck9wdGlvbnMob3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5ub2RlUmVwdWxzaW9uICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEggPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCA9IG9wdGlvbnMubm9kZVJlcHVsc2lvbjtcbiAgaWYgKG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aDtcbiAgaWYgKG9wdGlvbnMuZWRnZUVsYXN0aWNpdHkgIT0gbnVsbCkgQ29TRUNvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIID0gb3B0aW9ucy5lZGdlRWxhc3RpY2l0eTtcbiAgaWYgKG9wdGlvbnMubmVzdGluZ0ZhY3RvciAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgPSBGRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gb3B0aW9ucy5uZXN0aW5nRmFjdG9yO1xuICBpZiAob3B0aW9ucy5ncmF2aXR5ICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5O1xuICBpZiAob3B0aW9ucy5udW1JdGVyICE9IG51bGwpIENvU0VDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSBGRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUyA9IG9wdGlvbnMubnVtSXRlcjtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eVJhbmdlICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZTtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5Q29tcG91bmQ7XG4gIGlmIChvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kO1xuICBpZiAob3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gb3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDtcblxuICBpZiAob3B0aW9ucy5xdWFsaXR5ID09ICdkcmFmdCcpIExheW91dENvbnN0YW50cy5RVUFMSVRZID0gMDtlbHNlIGlmIChvcHRpb25zLnF1YWxpdHkgPT0gJ3Byb29mJykgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAyO2Vsc2UgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAxO1xuXG4gIENvU0VDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gRkRMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gTGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IG9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzO1xuICBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSAhb3B0aW9ucy5yYW5kb21pemU7XG4gIENvU0VDb25zdGFudHMuQU5JTUFURSA9IEZETGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPSBMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9IG9wdGlvbnMuYW5pbWF0ZTtcbiAgQ29TRUNvbnN0YW50cy5USUxFID0gb3B0aW9ucy50aWxlO1xuICBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMID0gdHlwZW9mIG9wdGlvbnMudGlsaW5nUGFkZGluZ1ZlcnRpY2FsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpIDogb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gIENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCA9IHR5cGVvZiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCkgOiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsO1xufTtcblxuX0NvU0VMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlYWR5O1xuICB2YXIgZnJhbWVJZDtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBpZFRvTE5vZGUgPSB0aGlzLmlkVG9MTm9kZSA9IHt9O1xuICB2YXIgbGF5b3V0ID0gdGhpcy5sYXlvdXQgPSBuZXcgQ29TRUxheW91dCgpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgc2VsZi5zdG9wcGVkID0gZmFsc2U7XG5cbiAgdGhpcy5jeSA9IHRoaXMub3B0aW9ucy5jeTtcblxuICB0aGlzLmN5LnRyaWdnZXIoeyB0eXBlOiAnbGF5b3V0c3RhcnQnLCBsYXlvdXQ6IHRoaXMgfSk7XG5cbiAgdmFyIGdtID0gbGF5b3V0Lm5ld0dyYXBoTWFuYWdlcigpO1xuICB0aGlzLmdtID0gZ207XG5cbiAgdmFyIG5vZGVzID0gdGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKTtcbiAgdmFyIGVkZ2VzID0gdGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKTtcblxuICB0aGlzLnJvb3QgPSBnbS5hZGRSb290KCk7XG4gIHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsIHRoaXMuZ2V0VG9wTW9zdE5vZGVzKG5vZGVzKSwgbGF5b3V0KTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICB2YXIgc291cmNlTm9kZSA9IHRoaXMuaWRUb0xOb2RlW2VkZ2UuZGF0YShcInNvdXJjZVwiKV07XG4gICAgdmFyIHRhcmdldE5vZGUgPSB0aGlzLmlkVG9MTm9kZVtlZGdlLmRhdGEoXCJ0YXJnZXRcIildO1xuICAgIGlmIChzb3VyY2VOb2RlICE9PSB0YXJnZXROb2RlICYmIHNvdXJjZU5vZGUuZ2V0RWRnZXNCZXR3ZWVuKHRhcmdldE5vZGUpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB2YXIgZTEgPSBnbS5hZGQobGF5b3V0Lm5ld0VkZ2UoKSwgc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICBlMS5pZCA9IGVkZ2UuaWQoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gZ2V0UG9zaXRpb25zKGVsZSwgaSkge1xuICAgIGlmICh0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBlbGUgPSBpO1xuICAgIH1cbiAgICB2YXIgdGhlSWQgPSBlbGUuZGF0YSgnaWQnKTtcbiAgICB2YXIgbE5vZGUgPSBzZWxmLmlkVG9MTm9kZVt0aGVJZF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogbE5vZGUuZ2V0UmVjdCgpLmdldENlbnRlclgoKSxcbiAgICAgIHk6IGxOb2RlLmdldFJlY3QoKS5nZXRDZW50ZXJZKClcbiAgICB9O1xuICB9O1xuXG4gIC8qXG4gICAqIFJlcG9zaXRpb24gbm9kZXMgaW4gaXRlcmF0aW9ucyBhbmltYXRlZGx5XG4gICAqL1xuICB2YXIgaXRlcmF0ZUFuaW1hdGVkID0gZnVuY3Rpb24gaXRlcmF0ZUFuaW1hdGVkKCkge1xuICAgIC8vIFRoaWdzIHRvIHBlcmZvcm0gYWZ0ZXIgbm9kZXMgYXJlIHJlcG9zaXRpb25lZCBvbiBzY3JlZW5cbiAgICB2YXIgYWZ0ZXJSZXBvc2l0aW9uID0gZnVuY3Rpb24gYWZ0ZXJSZXBvc2l0aW9uKCkge1xuICAgICAgaWYgKG9wdGlvbnMuZml0KSB7XG4gICAgICAgIG9wdGlvbnMuY3kuZml0KG9wdGlvbnMuZWxlcywgb3B0aW9ucy5wYWRkaW5nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZWFkeSkge1xuICAgICAgICByZWFkeSA9IHRydWU7XG4gICAgICAgIHNlbGYuY3kub25lKCdsYXlvdXRyZWFkeScsIG9wdGlvbnMucmVhZHkpO1xuICAgICAgICBzZWxmLmN5LnRyaWdnZXIoeyB0eXBlOiAnbGF5b3V0cmVhZHknLCBsYXlvdXQ6IHNlbGYgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB0aWNrc1BlckZyYW1lID0gc2VsZi5vcHRpb25zLnJlZnJlc2g7XG4gICAgdmFyIGlzRG9uZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlja3NQZXJGcmFtZSAmJiAhaXNEb25lOyBpKyspIHtcbiAgICAgIGlzRG9uZSA9IHNlbGYuc3RvcHBlZCB8fCBzZWxmLmxheW91dC50aWNrKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbGF5b3V0IGlzIGRvbmVcbiAgICBpZiAoaXNEb25lKSB7XG4gICAgICAvLyBJZiB0aGUgbGF5b3V0IGlzIG5vdCBhIHN1YmxheW91dCBhbmQgaXQgaXMgc3VjY2Vzc2Z1bCBwZXJmb3JtIHBvc3QgbGF5b3V0LlxuICAgICAgaWYgKGxheW91dC5jaGVja0xheW91dFN1Y2Nlc3MoKSAmJiAhbGF5b3V0LmlzU3ViTGF5b3V0KSB7XG4gICAgICAgIGxheW91dC5kb1Bvc3RMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbGF5b3V0IGhhcyBhIHRpbGluZ1Bvc3RMYXlvdXQgZnVuY3Rpb24gcHJvcGVydHkgY2FsbCBpdC5cbiAgICAgIGlmIChsYXlvdXQudGlsaW5nUG9zdExheW91dCkge1xuICAgICAgICBsYXlvdXQudGlsaW5nUG9zdExheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBsYXlvdXQuaXNMYXlvdXRGaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgIHNlbGYub3B0aW9ucy5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGdldFBvc2l0aW9ucyk7XG5cbiAgICAgIGFmdGVyUmVwb3NpdGlvbigpO1xuXG4gICAgICAvLyB0cmlnZ2VyIGxheW91dHN0b3Agd2hlbiB0aGUgbGF5b3V0IHN0b3BzIChlLmcuIGZpbmlzaGVzKVxuICAgICAgc2VsZi5jeS5vbmUoJ2xheW91dHN0b3AnLCBzZWxmLm9wdGlvbnMuc3RvcCk7XG4gICAgICBzZWxmLmN5LnRyaWdnZXIoeyB0eXBlOiAnbGF5b3V0c3RvcCcsIGxheW91dDogc2VsZiB9KTtcblxuICAgICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVJZCk7XG4gICAgICB9XG5cbiAgICAgIHJlYWR5ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuaW1hdGlvbkRhdGEgPSBzZWxmLmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7IC8vIEdldCBwb3NpdGlvbnMgb2YgbGF5b3V0IG5vZGVzIG5vdGUgdGhhdCBhbGwgbm9kZXMgbWF5IG5vdCBiZSBsYXlvdXQgbm9kZXMgYmVjYXVzZSBvZiB0aWxpbmdcblxuICAgIC8vIFBvc2l0aW9uIG5vZGVzLCBmb3IgdGhlIG5vZGVzIHdob3NlIGlkIGRvZXMgbm90IGluY2x1ZGVkIGluIGRhdGEgKGJlY2F1c2UgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZWlyIHBhcmVudHMgYW5kIGluY2x1ZGVkIGluIGR1bW15IGNvbXBvdW5kcylcbiAgICAvLyB1c2UgcG9zaXRpb24gb2YgdGhlaXIgYW5jZXN0b3JzIG9yIGR1bW15IGFuY2VzdG9yc1xuICAgIG9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbGUgPSBpO1xuICAgICAgfVxuICAgICAgLy8gSWYgZWxlIGlzIGEgY29tcG91bmQgbm9kZSwgdGhlbiBpdHMgcG9zaXRpb24gd2lsbCBiZSBkZWZpbmVkIGJ5IGl0cyBjaGlsZHJlblxuICAgICAgaWYgKCFlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICB2YXIgdGhlSWQgPSBlbGUuaWQoKTtcbiAgICAgICAgdmFyIHBOb2RlID0gYW5pbWF0aW9uRGF0YVt0aGVJZF07XG4gICAgICAgIHZhciB0ZW1wID0gZWxlO1xuICAgICAgICAvLyBJZiBwTm9kZSBpcyB1bmRlZmluZWQgc2VhcmNoIHVudGlsIGZpbmRpbmcgcG9zaXRpb24gZGF0YSBvZiBpdHMgZmlyc3QgYW5jZXN0b3IgKEl0IG1heSBiZSBkdW1teSBhcyB3ZWxsKVxuICAgICAgICB3aGlsZSAocE5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgIHBOb2RlID0gYW5pbWF0aW9uRGF0YVt0ZW1wLmRhdGEoJ3BhcmVudCcpXSB8fCBhbmltYXRpb25EYXRhWydEdW1teUNvbXBvdW5kXycgKyB0ZW1wLmRhdGEoJ3BhcmVudCcpXTtcbiAgICAgICAgICBhbmltYXRpb25EYXRhW3RoZUlkXSA9IHBOb2RlO1xuICAgICAgICAgIHRlbXAgPSB0ZW1wLnBhcmVudCgpWzBdO1xuICAgICAgICAgIGlmICh0ZW1wID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHBOb2RlLngsXG4gICAgICAgICAgICB5OiBwTm9kZS55XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogZWxlLnBvc2l0aW9uKCd4JyksXG4gICAgICAgICAgICB5OiBlbGUucG9zaXRpb24oJ3knKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFmdGVyUmVwb3NpdGlvbigpO1xuXG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShpdGVyYXRlQW5pbWF0ZWQpO1xuICB9O1xuXG4gIC8qXG4gICogTGlzdGVuICdsYXlvdXRzdGFydGVkJyBldmVudCBhbmQgc3RhcnQgYW5pbWF0ZWQgaXRlcmF0aW9uIGlmIGFuaW1hdGUgb3B0aW9uIGlzICdkdXJpbmcnXG4gICovXG4gIGxheW91dC5hZGRMaXN0ZW5lcignbGF5b3V0c3RhcnRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VsZi5vcHRpb25zLmFuaW1hdGUgPT09ICdkdXJpbmcnKSB7XG4gICAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGl0ZXJhdGVBbmltYXRlZCk7XG4gICAgfVxuICB9KTtcblxuICBsYXlvdXQucnVuTGF5b3V0KCk7IC8vIFJ1biBjb3NlIGxheW91dFxuXG4gIC8qXG4gICAqIElmIGFuaW1hdGUgb3B0aW9uIGlzIG5vdCAnZHVyaW5nJyAoJ2VuZCcgb3IgZmFsc2UpIHBlcmZvcm0gdGhlc2UgaGVyZSAoSWYgaXQgaXMgJ2R1cmluZycgc2ltaWxhciB0aGluZ3MgYXJlIGFscmVhZHkgcGVyZm9ybWVkKVxuICAgKi9cbiAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRlICE9PSBcImR1cmluZ1wiKSB7XG4gICAgc2VsZi5vcHRpb25zLmVsZXMubm9kZXMoKS5ub3QoXCI6cGFyZW50XCIpLmxheW91dFBvc2l0aW9ucyhzZWxmLCBzZWxmLm9wdGlvbnMsIGdldFBvc2l0aW9ucyk7IC8vIFVzZSBsYXlvdXQgcG9zaXRpb25zIHRvIHJlcG9zaXRpb24gdGhlIG5vZGVzIGl0IGNvbnNpZGVycyB0aGUgb3B0aW9ucyBwYXJhbWV0ZXJcbiAgICByZWFkeSA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vL0dldCB0aGUgdG9wIG1vc3Qgb25lcyBvZiBhIGxpc3Qgb2Ygbm9kZXNcbl9Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgdmFyIG5vZGVzTWFwID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2Rlc01hcFtub2Rlc1tpXS5pZCgpXSA9IHRydWU7XG4gIH1cbiAgdmFyIHJvb3RzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUsIGkpIHtcbiAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZWxlID0gaTtcbiAgICB9XG4gICAgdmFyIHBhcmVudCA9IGVsZS5wYXJlbnQoKVswXTtcbiAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChub2Rlc01hcFtwYXJlbnQuaWQoKV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudCgpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJvb3RzO1xufTtcblxuX0NvU0VMYXlvdXQucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3QgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZHJlbiwgbGF5b3V0KSB7XG4gIHZhciBzaXplID0gY2hpbGRyZW4ubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIHZhciB0aGVDaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBjaGlsZHJlbl9vZl9jaGlsZHJlbiA9IHRoZUNoaWxkLmNoaWxkcmVuKCk7XG4gICAgdmFyIHRoZU5vZGU7XG5cbiAgICB2YXIgZGltZW5zaW9ucyA9IHRoZUNoaWxkLmxheW91dERpbWVuc2lvbnMoe1xuICAgICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiB0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzXG4gICAgfSk7XG5cbiAgICBpZiAodGhlQ2hpbGQub3V0ZXJXaWR0aCgpICE9IG51bGwgJiYgdGhlQ2hpbGQub3V0ZXJIZWlnaHQoKSAhPSBudWxsKSB7XG4gICAgICB0aGVOb2RlID0gcGFyZW50LmFkZChuZXcgQ29TRU5vZGUobGF5b3V0LmdyYXBoTWFuYWdlciwgbmV3IFBvaW50RCh0aGVDaGlsZC5wb3NpdGlvbigneCcpIC0gZGltZW5zaW9ucy53IC8gMiwgdGhlQ2hpbGQucG9zaXRpb24oJ3knKSAtIGRpbWVuc2lvbnMuaCAvIDIpLCBuZXcgRGltZW5zaW9uRChwYXJzZUZsb2F0KGRpbWVuc2lvbnMudyksIHBhcnNlRmxvYXQoZGltZW5zaW9ucy5oKSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKHRoaXMuZ3JhcGhNYW5hZ2VyKSk7XG4gICAgfVxuICAgIC8vIEF0dGFjaCBpZCB0byB0aGUgbGF5b3V0IG5vZGVcbiAgICB0aGVOb2RlLmlkID0gdGhlQ2hpbGQuZGF0YShcImlkXCIpO1xuICAgIC8vIEF0dGFjaCB0aGUgcGFkZGluZ3Mgb2YgY3kgbm9kZSB0byBsYXlvdXQgbm9kZVxuICAgIHRoZU5vZGUucGFkZGluZ0xlZnQgPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG4gICAgdGhlTm9kZS5wYWRkaW5nVG9wID0gcGFyc2VJbnQodGhlQ2hpbGQuY3NzKCdwYWRkaW5nJykpO1xuICAgIHRoZU5vZGUucGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQodGhlQ2hpbGQuY3NzKCdwYWRkaW5nJykpO1xuICAgIHRoZU5vZGUucGFkZGluZ0JvdHRvbSA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcblxuICAgIC8vQXR0YWNoIHRoZSBsYWJlbCBwcm9wZXJ0aWVzIHRvIGNvbXBvdW5kIGlmIGxhYmVscyB3aWxsIGJlIGluY2x1ZGVkIGluIG5vZGUgZGltZW5zaW9ucyAgXG4gICAgaWYgKHRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpIHtcbiAgICAgIGlmICh0aGVDaGlsZC5pc1BhcmVudCgpKSB7XG4gICAgICAgIHZhciBsYWJlbFdpZHRoID0gdGhlQ2hpbGQuYm91bmRpbmdCb3goeyBpbmNsdWRlTGFiZWxzOiB0cnVlLCBpbmNsdWRlTm9kZXM6IGZhbHNlIH0pLnc7XG4gICAgICAgIHZhciBsYWJlbEhlaWdodCA9IHRoZUNoaWxkLmJvdW5kaW5nQm94KHsgaW5jbHVkZUxhYmVsczogdHJ1ZSwgaW5jbHVkZU5vZGVzOiBmYWxzZSB9KS5oO1xuICAgICAgICB2YXIgbGFiZWxQb3MgPSB0aGVDaGlsZC5jc3MoXCJ0ZXh0LWhhbGlnblwiKTtcbiAgICAgICAgdGhlTm9kZS5sYWJlbFdpZHRoID0gbGFiZWxXaWR0aDtcbiAgICAgICAgdGhlTm9kZS5sYWJlbEhlaWdodCA9IGxhYmVsSGVpZ2h0O1xuICAgICAgICB0aGVOb2RlLmxhYmVsUG9zID0gbGFiZWxQb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWFwIHRoZSBsYXlvdXQgbm9kZVxuICAgIHRoaXMuaWRUb0xOb2RlW3RoZUNoaWxkLmRhdGEoXCJpZFwiKV0gPSB0aGVOb2RlO1xuXG4gICAgaWYgKGlzTmFOKHRoZU5vZGUucmVjdC54KSkge1xuICAgICAgdGhlTm9kZS5yZWN0LnggPSAwO1xuICAgIH1cblxuICAgIGlmIChpc05hTih0aGVOb2RlLnJlY3QueSkpIHtcbiAgICAgIHRoZU5vZGUucmVjdC55ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW5fb2ZfY2hpbGRyZW4gIT0gbnVsbCAmJiBjaGlsZHJlbl9vZl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGhlTmV3R3JhcGg7XG4gICAgICB0aGVOZXdHcmFwaCA9IGxheW91dC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQobGF5b3V0Lm5ld0dyYXBoKCksIHRoZU5vZGUpO1xuICAgICAgdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KHRoZU5ld0dyYXBoLCBjaGlsZHJlbl9vZl9jaGlsZHJlbiwgbGF5b3V0KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmIDogY2FsbGVkIG9uIGNvbnRpbnVvdXMgbGF5b3V0cyB0byBzdG9wIHRoZW0gYmVmb3JlIHRoZXkgZmluaXNoXG4gKi9cbl9Db1NFTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIHJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIoY3l0b3NjYXBlKSB7XG4gIC8vICB2YXIgTGF5b3V0ID0gZ2V0TGF5b3V0KCBjeXRvc2NhcGUgKTtcblxuICBjeXRvc2NhcGUoJ2xheW91dCcsICdjb3NlLWJpbGtlbnQnLCBfQ29TRUxheW91dCk7XG59O1xuXG4vLyBhdXRvIHJlZyBmb3IgZ2xvYmFsc1xuaWYgKHR5cGVvZiBjeXRvc2NhcGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJlZ2lzdGVyKGN5dG9zY2FwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pOyIsCiAgICAiaW1wb3J0IHtcbiAgY3JlYXRlVGV4dFxufSBmcm9tIFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCB7XG4gIHBhcnNlRm9udFNpemVcbn0gZnJvbSBcIi4vY2h1bmstMkVEVFdEWUkubWpzXCI7XG5pbXBvcnQge1xuICBzZWxlY3RTdmdFbGVtZW50XG59IGZyb20gXCIuL2NodW5rLUYyWEZOM0JZLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBkZWZhdWx0Q29uZmlnX2RlZmF1bHQsXG4gIGdldENvbmZpZzIgYXMgZ2V0Q29uZmlnLFxuICBsb2csXG4gIHNhbml0aXplVGV4dCxcbiAgc2V0dXBHcmFwaFZpZXdib3hcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9taW5kbWFwL3BhcnNlci9taW5kbWFwLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgNF0sICRWMSA9IFsxLCAxM10sICRWMiA9IFsxLCAxMl0sICRWMyA9IFsxLCAxNV0sICRWNCA9IFsxLCAxNl0sICRWNSA9IFsxLCAyMF0sICRWNiA9IFsxLCAxOV0sICRWNyA9IFs2LCA3LCA4XSwgJFY4ID0gWzEsIDI2XSwgJFY5ID0gWzEsIDI0XSwgJFZhID0gWzEsIDI1XSwgJFZiID0gWzYsIDcsIDExXSwgJFZjID0gWzEsIDYsIDEzLCAxNSwgMTYsIDE5LCAyMl0sICRWZCA9IFsxLCAzM10sICRWZSA9IFsxLCAzNF0sICRWZiA9IFsxLCA2LCA3LCAxMSwgMTMsIDE1LCAxNiwgMTksIDIyXTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInN0YXJ0XCI6IDMsIFwibWluZE1hcFwiOiA0LCBcInNwYWNlTGluZXNcIjogNSwgXCJTUEFDRUxJTkVcIjogNiwgXCJOTFwiOiA3LCBcIk1JTkRNQVBcIjogOCwgXCJkb2N1bWVudFwiOiA5LCBcInN0b3BcIjogMTAsIFwiRU9GXCI6IDExLCBcInN0YXRlbWVudFwiOiAxMiwgXCJTUEFDRUxJU1RcIjogMTMsIFwibm9kZVwiOiAxNCwgXCJJQ09OXCI6IDE1LCBcIkNMQVNTXCI6IDE2LCBcIm5vZGVXaXRoSWRcIjogMTcsIFwibm9kZVdpdGhvdXRJZFwiOiAxOCwgXCJOT0RFX0RTVEFSVFwiOiAxOSwgXCJOT0RFX0RFU0NSXCI6IDIwLCBcIk5PREVfREVORFwiOiAyMSwgXCJOT0RFX0lEXCI6IDIyLCBcIiRhY2NlcHRcIjogMCwgXCIkZW5kXCI6IDEgfSxcbiAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNjogXCJTUEFDRUxJTkVcIiwgNzogXCJOTFwiLCA4OiBcIk1JTkRNQVBcIiwgMTE6IFwiRU9GXCIsIDEzOiBcIlNQQUNFTElTVFwiLCAxNTogXCJJQ09OXCIsIDE2OiBcIkNMQVNTXCIsIDE5OiBcIk5PREVfRFNUQVJUXCIsIDIwOiBcIk5PREVfREVTQ1JcIiwgMjE6IFwiTk9ERV9ERU5EXCIsIDIyOiBcIk5PREVfSURcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCAxXSwgWzMsIDJdLCBbNSwgMV0sIFs1LCAyXSwgWzUsIDJdLCBbNCwgMl0sIFs0LCAzXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAxXSwgWzEwLCAyXSwgWzEwLCAyXSwgWzksIDNdLCBbOSwgMl0sIFsxMiwgMl0sIFsxMiwgMl0sIFsxMiwgMl0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxMiwgMV0sIFsxNCwgMV0sIFsxNCwgMV0sIFsxOCwgM10sIFsxNywgMV0sIFsxNywgNF1dLFxuICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJCkge1xuICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4geXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIlN0b3AgTkwgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIEVPRiBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIE5MMiBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdG9wIEVPRjIgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmluZm8oXCJOb2RlOiBcIiwgJCRbJDBdLmlkKTtcbiAgICAgICAgICB5eS5hZGROb2RlKCQkWyQwIC0gMV0ubGVuZ3RoLCAkJFskMF0uaWQsICQkWyQwXS5kZXNjciwgJCRbJDBdLnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiSWNvbjogXCIsICQkWyQwXSk7XG4gICAgICAgICAgeXkuZGVjb3JhdGVOb2RlKHsgaWNvbjogJCRbJDBdIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHl5LmRlY29yYXRlTm9kZSh7IGNsYXNzOiAkJFskMF0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTUEFDRUxJU1RcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJOb2RlOiBcIiwgJCRbJDBdLmlkKTtcbiAgICAgICAgICB5eS5hZGROb2RlKDAsICQkWyQwXS5pZCwgJCRbJDBdLmRlc2NyLCAkJFskMF0udHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgeXkuZGVjb3JhdGVOb2RlKHsgaWNvbjogJCRbJDBdIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBmb3VuZCAuLlwiLCAkJFskMCAtIDJdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkOiAkJFskMCAtIDFdLCBkZXNjcjogJCRbJDAgLSAxXSwgdHlwZTogeXkuZ2V0VHlwZSgkJFskMCAtIDJdLCAkJFskMF0pIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDBdLCBkZXNjcjogJCRbJDBdLCB0eXBlOiB5eS5ub2RlVHlwZS5ERUZBVUxUIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJub2RlIGZvdW5kIC4uXCIsICQkWyQwIC0gM10pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgaWQ6ICQkWyQwIC0gM10sIGRlc2NyOiAkJFskMCAtIDFdLCB0eXBlOiB5eS5nZXRUeXBlKCQkWyQwIC0gMl0sICQkWyQwXSkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgMzogMSwgNDogMiwgNTogMywgNjogWzEsIDVdLCA4OiAkVjAgfSwgeyAxOiBbM10gfSwgeyAxOiBbMiwgMV0gfSwgeyA0OiA2LCA2OiBbMSwgN10sIDc6IFsxLCA4XSwgODogJFYwIH0sIHsgNjogJFYxLCA3OiBbMSwgMTBdLCA5OiA5LCAxMjogMTEsIDEzOiAkVjIsIDE0OiAxNCwgMTU6ICRWMywgMTY6ICRWNCwgMTc6IDE3LCAxODogMTgsIDE5OiAkVjUsIDIyOiAkVjYgfSwgbygkVjcsIFsyLCAzXSksIHsgMTogWzIsIDJdIH0sIG8oJFY3LCBbMiwgNF0pLCBvKCRWNywgWzIsIDVdKSwgeyAxOiBbMiwgNl0sIDY6ICRWMSwgMTI6IDIxLCAxMzogJFYyLCAxNDogMTQsIDE1OiAkVjMsIDE2OiAkVjQsIDE3OiAxNywgMTg6IDE4LCAxOTogJFY1LCAyMjogJFY2IH0sIHsgNjogJFYxLCA5OiAyMiwgMTI6IDExLCAxMzogJFYyLCAxNDogMTQsIDE1OiAkVjMsIDE2OiAkVjQsIDE3OiAxNywgMTg6IDE4LCAxOTogJFY1LCAyMjogJFY2IH0sIHsgNjogJFY4LCA3OiAkVjksIDEwOiAyMywgMTE6ICRWYSB9LCBvKCRWYiwgWzIsIDIyXSwgeyAxNzogMTcsIDE4OiAxOCwgMTQ6IDI3LCAxNTogWzEsIDI4XSwgMTY6IFsxLCAyOV0sIDE5OiAkVjUsIDIyOiAkVjYgfSksIG8oJFZiLCBbMiwgMThdKSwgbygkVmIsIFsyLCAxOV0pLCBvKCRWYiwgWzIsIDIwXSksIG8oJFZiLCBbMiwgMjFdKSwgbygkVmIsIFsyLCAyM10pLCBvKCRWYiwgWzIsIDI0XSksIG8oJFZiLCBbMiwgMjZdLCB7IDE5OiBbMSwgMzBdIH0pLCB7IDIwOiBbMSwgMzFdIH0sIHsgNjogJFY4LCA3OiAkVjksIDEwOiAzMiwgMTE6ICRWYSB9LCB7IDE6IFsyLCA3XSwgNjogJFYxLCAxMjogMjEsIDEzOiAkVjIsIDE0OiAxNCwgMTU6ICRWMywgMTY6ICRWNCwgMTc6IDE3LCAxODogMTgsIDE5OiAkVjUsIDIyOiAkVjYgfSwgbygkVmMsIFsyLCAxNF0sIHsgNzogJFZkLCAxMTogJFZlIH0pLCBvKCRWZiwgWzIsIDhdKSwgbygkVmYsIFsyLCA5XSksIG8oJFZmLCBbMiwgMTBdKSwgbygkVmIsIFsyLCAxNV0pLCBvKCRWYiwgWzIsIDE2XSksIG8oJFZiLCBbMiwgMTddKSwgeyAyMDogWzEsIDM1XSB9LCB7IDIxOiBbMSwgMzZdIH0sIG8oJFZjLCBbMiwgMTNdLCB7IDc6ICRWZCwgMTE6ICRWZSB9KSwgbygkVmYsIFsyLCAxMV0pLCBvKCRWZiwgWzIsIDEyXSksIHsgMjE6IFsxLCAzN10gfSwgbygkVmIsIFsyLCAyNV0pLCBvKCRWYiwgWzIsIDI3XSldLFxuICAgIGRlZmF1bHRBY3Rpb25zOiB7IDI6IFsyLCAxXSwgNjogWzIsIDJdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHsgXCJjYXNlLWluc2Vuc2l0aXZlXCI6IHRydWUgfSxcbiAgICAgIHBlcmZvcm1BY3Rpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG4gICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7XG4gICAgICAgIHN3aXRjaCAoJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiRm91bmQgY29tbWVudFwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiQ0xBU1NcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkJlZ2luIGljb25cIik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiSUNPTlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiU1BBQ0VMSU5FXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiZW5kIGljb25cIik7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJFeHBsb2Rpbmcgbm9kZVwiKTtcbiAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwiQ2xvdWRcIik7XG4gICAgICAgICAgICB0aGlzLmJlZ2luKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAxOTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkV4cGxvc2lvbiBCYW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJDbG91ZCBCYW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIDEzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIHJldHVybiAyMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5TVFIyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVTQ1JcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJTdGFydGluZyBOU1RSXCIpO1xuICAgICAgICAgICAgdGhpcy5iZWdpbihcIk5TVFJcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJkZXNjcmlwdGlvbjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFU0NSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKSlcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kIClcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kIC4uLlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICgtXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJub2RlIGVuZCAoLVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLnRyYWNlKFwibm9kZSBlbmQgKChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIm5vZGUgZW5kICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkudHJhY2UoXCJMb25nIGRlc2NyaXB0aW9uOlwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS50cmFjZShcIkxvbmcgZGVzY3JpcHRpb246XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgICAgcnVsZXM6IFsvXig/OlxccyolJS4qKS9pLCAvXig/Om1pbmRtYXBcXGIpL2ksIC9eKD86Ojo6KS9pLCAvXig/Oi4rKS9pLCAvXig/OlxcbikvaSwgL14oPzo6Omljb25cXCgpL2ksIC9eKD86W1xcc10rW1xcbl0pL2ksIC9eKD86W1xcbl0rKS9pLCAvXig/OlteXFwpXSspL2ksIC9eKD86XFwpKS9pLCAvXig/Oi1cXCkpL2ksIC9eKD86XFwoLSkvaSwgL14oPzpcXClcXCkpL2ksIC9eKD86XFwpKS9pLCAvXig/OlxcKFxcKCkvaSwgL14oPzpcXHtcXHspL2ksIC9eKD86XFwoKS9pLCAvXig/OlxcWykvaSwgL14oPzpbXFxzXSspL2ksIC9eKD86W15cXChcXFtcXG5cXClcXHtcXH1dKykvaSwgL14oPzokKS9pLCAvXig/OltcIl1bYF0pL2ksIC9eKD86W15gXCJdKykvaSwgL14oPzpbYF1bXCJdKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W15cIl0rKS9pLCAvXig/OltcIl0pL2ksIC9eKD86W1xcKV1cXCkpL2ksIC9eKD86W1xcKV0pL2ksIC9eKD86W1xcXV0pL2ksIC9eKD86XFx9XFx9KS9pLCAvXig/OlxcKC0pL2ksIC9eKD86LVxcKSkvaSwgL14oPzpcXChcXCgpL2ksIC9eKD86XFwoKS9pLCAvXig/OlteXFwpXFxdXFwoXFx9XSspL2ksIC9eKD86LisoPyFcXChcXCgpKS9pXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJDTEFTU1wiOiB7IFwicnVsZXNcIjogWzMsIDRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklDT05cIjogeyBcInJ1bGVzXCI6IFs4LCA5XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOU1RSMlwiOiB7IFwicnVsZXNcIjogWzIyLCAyM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTlNUUlwiOiB7IFwicnVsZXNcIjogWzI1LCAyNl0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiTk9ERVwiOiB7IFwicnVsZXNcIjogWzIxLCAyNCwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCAyLCA1LCA2LCA3LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgbWluZG1hcF9kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvbWluZG1hcC9taW5kbWFwRGIudHNcbnZhciBub2RlcyA9IFtdO1xudmFyIGNudCA9IDA7XG52YXIgZWxlbWVudHMgPSB7fTtcbnZhciBjbGVhciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBub2RlcyA9IFtdO1xuICBjbnQgPSAwO1xuICBlbGVtZW50cyA9IHt9O1xufSwgXCJjbGVhclwiKTtcbnZhciBnZXRQYXJlbnQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGxldmVsKSB7XG4gIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChub2Rlc1tpXS5sZXZlbCA8IGxldmVsKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufSwgXCJnZXRQYXJlbnRcIik7XG52YXIgZ2V0TWluZG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IG5vZGVzWzBdIDogbnVsbDtcbn0sIFwiZ2V0TWluZG1hcFwiKTtcbnZhciBhZGROb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgobGV2ZWwsIGlkLCBkZXNjciwgdHlwZSkgPT4ge1xuICBsb2cuaW5mbyhcImFkZE5vZGVcIiwgbGV2ZWwsIGlkLCBkZXNjciwgdHlwZSk7XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgbGV0IHBhZGRpbmcgPSBjb25mLm1pbmRtYXA/LnBhZGRpbmcgPz8gZGVmYXVsdENvbmZpZ19kZWZhdWx0Lm1pbmRtYXAucGFkZGluZztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBub2RlVHlwZS5ST1VOREVEX1JFQ1Q6XG4gICAgY2FzZSBub2RlVHlwZS5SRUNUOlxuICAgIGNhc2Ugbm9kZVR5cGUuSEVYQUdPTjpcbiAgICAgIHBhZGRpbmcgKj0gMjtcbiAgfVxuICBjb25zdCBub2RlID0ge1xuICAgIGlkOiBjbnQrKyxcbiAgICBub2RlSWQ6IHNhbml0aXplVGV4dChpZCwgY29uZiksXG4gICAgbGV2ZWwsXG4gICAgZGVzY3I6IHNhbml0aXplVGV4dChkZXNjciwgY29uZiksXG4gICAgdHlwZSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgd2lkdGg6IGNvbmYubWluZG1hcD8ubWF4Tm9kZVdpZHRoID8/IGRlZmF1bHRDb25maWdfZGVmYXVsdC5taW5kbWFwLm1heE5vZGVXaWR0aCxcbiAgICBwYWRkaW5nXG4gIH07XG4gIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChsZXZlbCk7XG4gIGlmIChwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yIChcIicgKyBub2RlLmRlc2NyICsgJ1wiKSdcbiAgICAgICk7XG4gICAgfVxuICB9XG59LCBcImFkZE5vZGVcIik7XG52YXIgbm9kZVR5cGUgPSB7XG4gIERFRkFVTFQ6IDAsXG4gIE5PX0JPUkRFUjogMCxcbiAgUk9VTkRFRF9SRUNUOiAxLFxuICBSRUNUOiAyLFxuICBDSVJDTEU6IDMsXG4gIENMT1VEOiA0LFxuICBCQU5HOiA1LFxuICBIRVhBR09OOiA2XG59O1xudmFyIGdldFR5cGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdGFydFN0ciwgZW5kU3RyKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcIkluIGdldCB0eXBlXCIsIHN0YXJ0U3RyLCBlbmRTdHIpO1xuICBzd2l0Y2ggKHN0YXJ0U3RyKSB7XG4gICAgY2FzZSBcIltcIjpcbiAgICAgIHJldHVybiBub2RlVHlwZS5SRUNUO1xuICAgIGNhc2UgXCIoXCI6XG4gICAgICByZXR1cm4gZW5kU3RyID09PSBcIilcIiA/IG5vZGVUeXBlLlJPVU5ERURfUkVDVCA6IG5vZGVUeXBlLkNMT1VEO1xuICAgIGNhc2UgXCIoKFwiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkNJUkNMRTtcbiAgICBjYXNlIFwiKVwiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkNMT1VEO1xuICAgIGNhc2UgXCIpKVwiOlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkJBTkc7XG4gICAgY2FzZSBcInt7XCI6XG4gICAgICByZXR1cm4gbm9kZVR5cGUuSEVYQUdPTjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5vZGVUeXBlLkRFRkFVTFQ7XG4gIH1cbn0sIFwiZ2V0VHlwZVwiKTtcbnZhciBzZXRFbGVtZW50Rm9ySWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgZWxlbWVudCkgPT4ge1xuICBlbGVtZW50c1tpZF0gPSBlbGVtZW50O1xufSwgXCJzZXRFbGVtZW50Rm9ySWRcIik7XG52YXIgZGVjb3JhdGVOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZGVjb3JhdGlvbikgPT4ge1xuICBpZiAoIWRlY29yYXRpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGNvbnN0IG5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcbiAgaWYgKGRlY29yYXRpb24uaWNvbikge1xuICAgIG5vZGUuaWNvbiA9IHNhbml0aXplVGV4dChkZWNvcmF0aW9uLmljb24sIGNvbmZpZyk7XG4gIH1cbiAgaWYgKGRlY29yYXRpb24uY2xhc3MpIHtcbiAgICBub2RlLmNsYXNzID0gc2FuaXRpemVUZXh0KGRlY29yYXRpb24uY2xhc3MsIGNvbmZpZyk7XG4gIH1cbn0sIFwiZGVjb3JhdGVOb2RlXCIpO1xudmFyIHR5cGUyU3RyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHlwZSkgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIG5vZGVUeXBlLkRFRkFVTFQ6XG4gICAgICByZXR1cm4gXCJuby1ib3JkZXJcIjtcbiAgICBjYXNlIG5vZGVUeXBlLlJFQ1Q6XG4gICAgICByZXR1cm4gXCJyZWN0XCI7XG4gICAgY2FzZSBub2RlVHlwZS5ST1VOREVEX1JFQ1Q6XG4gICAgICByZXR1cm4gXCJyb3VuZGVkLXJlY3RcIjtcbiAgICBjYXNlIG5vZGVUeXBlLkNJUkNMRTpcbiAgICAgIHJldHVybiBcImNpcmNsZVwiO1xuICAgIGNhc2Ugbm9kZVR5cGUuQ0xPVUQ6XG4gICAgICByZXR1cm4gXCJjbG91ZFwiO1xuICAgIGNhc2Ugbm9kZVR5cGUuQkFORzpcbiAgICAgIHJldHVybiBcImJhbmdcIjtcbiAgICBjYXNlIG5vZGVUeXBlLkhFWEFHT046XG4gICAgICByZXR1cm4gXCJoZXhnb25cIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwibm8tYm9yZGVyXCI7XG4gIH1cbn0sIFwidHlwZTJTdHJcIik7XG52YXIgZ2V0TG9nZ2VyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBsb2csIFwiZ2V0TG9nZ2VyXCIpO1xudmFyIGdldEVsZW1lbnRCeUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoaWQpID0+IGVsZW1lbnRzW2lkXSwgXCJnZXRFbGVtZW50QnlJZFwiKTtcbnZhciBkYiA9IHtcbiAgY2xlYXIsXG4gIGFkZE5vZGUsXG4gIGdldE1pbmRtYXAsXG4gIG5vZGVUeXBlLFxuICBnZXRUeXBlLFxuICBzZXRFbGVtZW50Rm9ySWQsXG4gIGRlY29yYXRlTm9kZSxcbiAgdHlwZTJTdHIsXG4gIGdldExvZ2dlcixcbiAgZ2V0RWxlbWVudEJ5SWRcbn07XG52YXIgbWluZG1hcERiX2RlZmF1bHQgPSBkYjtcblxuLy8gc3JjL2RpYWdyYW1zL21pbmRtYXAvbWluZG1hcFJlbmRlcmVyLnRzXG5pbXBvcnQgY3l0b3NjYXBlIGZyb20gXCJjeXRvc2NhcGVcIjtcbmltcG9ydCBjb3NlQmlsa2VudCBmcm9tIFwiY3l0b3NjYXBlLWNvc2UtYmlsa2VudFwiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9taW5kbWFwL3N2Z0RyYXcudHNcbnZhciBNQVhfU0VDVElPTlMgPSAxMjtcbnZhciBkZWZhdWx0QmtnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkYjIsIGVsZW0sIG5vZGUsIHNlY3Rpb24pIHtcbiAgY29uc3QgcmQgPSA1O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAgJHtub2RlLmhlaWdodCAtIHJkfSB2JHstbm9kZS5oZWlnaHQgKyAyICogcmR9IHEwLC01IDUsLTUgaCR7bm9kZS53aWR0aCAtIDIgKiByZH0gcTUsMCA1LDUgdiR7bm9kZS5oZWlnaHQgLSByZH0gSDAgWmBcbiAgKTtcbiAgZWxlbS5hcHBlbmQoXCJsaW5lXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtbGluZS1cIiArIHNlY3Rpb24pLmF0dHIoXCJ4MVwiLCAwKS5hdHRyKFwieTFcIiwgbm9kZS5oZWlnaHQpLmF0dHIoXCJ4MlwiLCBub2RlLndpZHRoKS5hdHRyKFwieTJcIiwgbm9kZS5oZWlnaHQpO1xufSwgXCJkZWZhdWx0QmtnXCIpO1xudmFyIHJlY3RCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwgbm9kZSkge1xuICBlbGVtLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCkuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGgpO1xufSwgXCJyZWN0QmtnXCIpO1xudmFyIGNsb3VkQmtnID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkYjIsIGVsZW0sIG5vZGUpIHtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGg7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodDtcbiAgY29uc3QgcjEgPSAwLjE1ICogdztcbiAgY29uc3QgcjIgPSAwLjI1ICogdztcbiAgY29uc3QgcjMgPSAwLjM1ICogdztcbiAgY29uc3QgcjQgPSAwLjIgKiB3O1xuICBlbGVtLmFwcGVuZChcInBhdGhcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcbiAgICBcImRcIixcbiAgICBgTTAgMCBhJHtyMX0sJHtyMX0gMCAwLDEgJHt3ICogMC4yNX0sJHstMSAqIHcgKiAwLjF9XG4gICAgICBhJHtyM30sJHtyM30gMSAwLDEgJHt3ICogMC40fSwkey0xICogdyAqIDAuMX1cbiAgICAgIGEke3IyfSwke3IyfSAxIDAsMSAke3cgKiAwLjM1fSwkezEgKiB3ICogMC4yfVxuXG4gICAgICBhJHtyMX0sJHtyMX0gMSAwLDEgJHt3ICogMC4xNX0sJHsxICogaCAqIDAuMzV9XG4gICAgICBhJHtyNH0sJHtyNH0gMSAwLDEgJHstMSAqIHcgKiAwLjE1fSwkezEgKiBoICogMC42NX1cblxuICAgICAgYSR7cjJ9LCR7cjF9IDEgMCwxICR7LTEgKiB3ICogMC4yNX0sJHt3ICogMC4xNX1cbiAgICAgIGEke3IzfSwke3IzfSAxIDAsMSAkey0xICogdyAqIDAuNX0sJHswfVxuICAgICAgYSR7cjF9LCR7cjF9IDEgMCwxICR7LTEgKiB3ICogMC4yNX0sJHstMSAqIHcgKiAwLjE1fVxuXG4gICAgICBhJHtyMX0sJHtyMX0gMSAwLDEgJHstMSAqIHcgKiAwLjF9LCR7LTEgKiBoICogMC4zNX1cbiAgICAgIGEke3I0fSwke3I0fSAxIDAsMSAke3cgKiAwLjF9LCR7LTEgKiBoICogMC42NX1cblxuICAgIEgwIFYwIFpgXG4gICk7XG59LCBcImNsb3VkQmtnXCIpO1xudmFyIGJhbmdCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwgbm9kZSkge1xuICBjb25zdCB3ID0gbm9kZS53aWR0aDtcbiAgY29uc3QgaCA9IG5vZGUuaGVpZ2h0O1xuICBjb25zdCByID0gMC4xNSAqIHc7XG4gIGVsZW0uYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiaWRcIiwgXCJub2RlLVwiICsgbm9kZS5pZCkuYXR0cihcImNsYXNzXCIsIFwibm9kZS1ia2cgbm9kZS1cIiArIGRiMi50eXBlMlN0cihub2RlLnR5cGUpKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIGBNMCAwIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4yNX0sJHstMSAqIGggKiAwLjF9XG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7dyAqIDAuMjV9LCR7MH1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4yNX0sJHswfVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAke3cgKiAwLjI1fSwkezEgKiBoICogMC4xfVxuXG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7dyAqIDAuMTV9LCR7MSAqIGggKiAwLjMzfVxuICAgICAgYSR7ciAqIDAuOH0sJHtyICogMC44fSAxIDAsMCAkezB9LCR7MSAqIGggKiAwLjM0fVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMTV9LCR7MSAqIGggKiAwLjMzfVxuXG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7LTEgKiB3ICogMC4yNX0sJHtoICogMC4xNX1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHstMSAqIHcgKiAwLjI1fSwkezB9XG4gICAgICBhJHtyfSwke3J9IDEgMCwwICR7LTEgKiB3ICogMC4yNX0sJHswfVxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMjV9LCR7LTEgKiBoICogMC4xNX1cblxuICAgICAgYSR7cn0sJHtyfSAxIDAsMCAkey0xICogdyAqIDAuMX0sJHstMSAqIGggKiAwLjMzfVxuICAgICAgYSR7ciAqIDAuOH0sJHtyICogMC44fSAxIDAsMCAkezB9LCR7LTEgKiBoICogMC4zNH1cbiAgICAgIGEke3J9LCR7cn0gMSAwLDAgJHt3ICogMC4xfSwkey0xICogaCAqIDAuMzN9XG5cbiAgICBIMCBWMCBaYFxuICApO1xufSwgXCJiYW5nQmtnXCIpO1xudmFyIGNpcmNsZUJrZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGIyLCBlbGVtLCBub2RlKSB7XG4gIGVsZW0uYXBwZW5kKFwiY2lyY2xlXCIpLmF0dHIoXCJpZFwiLCBcIm5vZGUtXCIgKyBub2RlLmlkKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWJrZyBub2RlLVwiICsgZGIyLnR5cGUyU3RyKG5vZGUudHlwZSkpLmF0dHIoXCJyXCIsIG5vZGUud2lkdGggLyAyKTtcbn0sIFwiY2lyY2xlQmtnXCIpO1xuZnVuY3Rpb24gaW5zZXJ0UG9seWdvblNoYXBlKHBhcmVudCwgdywgaCwgcG9pbnRzLCBub2RlKSB7XG4gIHJldHVybiBwYXJlbnQuaW5zZXJ0KFwicG9seWdvblwiLCBcIjpmaXJzdC1jaGlsZFwiKS5hdHRyKFxuICAgIFwicG9pbnRzXCIsXG4gICAgcG9pbnRzLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gZC54ICsgXCIsXCIgKyBkLnk7XG4gICAgfSkuam9pbihcIiBcIilcbiAgKS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKG5vZGUud2lkdGggLSB3KSAvIDIgKyBcIiwgXCIgKyBoICsgXCIpXCIpO1xufVxuX19uYW1lKGluc2VydFBvbHlnb25TaGFwZSwgXCJpbnNlcnRQb2x5Z29uU2hhcGVcIik7XG52YXIgaGV4YWdvbkJrZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oX2RiLCBlbGVtLCBub2RlKSB7XG4gIGNvbnN0IGggPSBub2RlLmhlaWdodDtcbiAgY29uc3QgZiA9IDQ7XG4gIGNvbnN0IG0gPSBoIC8gZjtcbiAgY29uc3QgdyA9IG5vZGUud2lkdGggLSBub2RlLnBhZGRpbmcgKyAyICogbTtcbiAgY29uc3QgcG9pbnRzID0gW1xuICAgIHsgeDogbSwgeTogMCB9LFxuICAgIHsgeDogdyAtIG0sIHk6IDAgfSxcbiAgICB7IHg6IHcsIHk6IC1oIC8gMiB9LFxuICAgIHsgeDogdyAtIG0sIHk6IC1oIH0sXG4gICAgeyB4OiBtLCB5OiAtaCB9LFxuICAgIHsgeDogMCwgeTogLWggLyAyIH1cbiAgXTtcbiAgaW5zZXJ0UG9seWdvblNoYXBlKGVsZW0sIHcsIGgsIHBvaW50cywgbm9kZSk7XG59LCBcImhleGFnb25Ca2dcIik7XG52YXIgcm91bmRlZFJlY3RCa2cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwgbm9kZSkge1xuICBlbGVtLmFwcGVuZChcInJlY3RcIikuYXR0cihcImlkXCIsIFwibm9kZS1cIiArIG5vZGUuaWQpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnIG5vZGUtXCIgKyBkYjIudHlwZTJTdHIobm9kZS50eXBlKSkuYXR0cihcImhlaWdodFwiLCBub2RlLmhlaWdodCkuYXR0cihcInJ4XCIsIG5vZGUucGFkZGluZykuYXR0cihcInJ5XCIsIG5vZGUucGFkZGluZykuYXR0cihcIndpZHRoXCIsIG5vZGUud2lkdGgpO1xufSwgXCJyb3VuZGVkUmVjdEJrZ1wiKTtcbnZhciBkcmF3Tm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgZnVuY3Rpb24oZGIyLCBlbGVtLCBub2RlLCBmdWxsU2VjdGlvbiwgY29uZikge1xuICBjb25zdCBodG1sTGFiZWxzID0gY29uZi5odG1sTGFiZWxzO1xuICBjb25zdCBzZWN0aW9uID0gZnVsbFNlY3Rpb24gJSAoTUFYX1NFQ1RJT05TIC0gMSk7XG4gIGNvbnN0IG5vZGVFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICBub2RlLnNlY3Rpb24gPSBzZWN0aW9uO1xuICBsZXQgc2VjdGlvbkNsYXNzID0gXCJzZWN0aW9uLVwiICsgc2VjdGlvbjtcbiAgaWYgKHNlY3Rpb24gPCAwKSB7XG4gICAgc2VjdGlvbkNsYXNzICs9IFwiIHNlY3Rpb24tcm9vdFwiO1xuICB9XG4gIG5vZGVFbGVtLmF0dHIoXCJjbGFzc1wiLCAobm9kZS5jbGFzcyA/IG5vZGUuY2xhc3MgKyBcIiBcIiA6IFwiXCIpICsgXCJtaW5kbWFwLW5vZGUgXCIgKyBzZWN0aW9uQ2xhc3MpO1xuICBjb25zdCBia2dFbGVtID0gbm9kZUVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgY29uc3QgdGV4dEVsZW0gPSBub2RlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IG5vZGUuZGVzY3IucmVwbGFjZSgvKDxiclxcLyo+KS9nLCBcIlxcblwiKTtcbiAgYXdhaXQgY3JlYXRlVGV4dChcbiAgICB0ZXh0RWxlbSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICB7XG4gICAgICB1c2VIdG1sTGFiZWxzOiBodG1sTGFiZWxzLFxuICAgICAgd2lkdGg6IG5vZGUud2lkdGgsXG4gICAgICBjbGFzc2VzOiBcIm1pbmRtYXAtbm9kZS1sYWJlbFwiXG4gICAgfSxcbiAgICBjb25mXG4gICk7XG4gIGlmICghaHRtbExhYmVscykge1xuICAgIHRleHRFbGVtLmF0dHIoXCJkeVwiLCBcIjFlbVwiKS5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJkb21pbmFudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIik7XG4gIH1cbiAgY29uc3QgYmJveCA9IHRleHRFbGVtLm5vZGUoKS5nZXRCQm94KCk7XG4gIGNvbnN0IFtmb250U2l6ZV0gPSBwYXJzZUZvbnRTaXplKGNvbmYuZm9udFNpemUpO1xuICBub2RlLmhlaWdodCA9IGJib3guaGVpZ2h0ICsgZm9udFNpemUgKiAxLjEgKiAwLjUgKyBub2RlLnBhZGRpbmc7XG4gIG5vZGUud2lkdGggPSBiYm94LndpZHRoICsgMiAqIG5vZGUucGFkZGluZztcbiAgaWYgKG5vZGUuaWNvbikge1xuICAgIGlmIChub2RlLnR5cGUgPT09IGRiMi5ub2RlVHlwZS5DSVJDTEUpIHtcbiAgICAgIG5vZGUuaGVpZ2h0ICs9IDUwO1xuICAgICAgbm9kZS53aWR0aCArPSA1MDtcbiAgICAgIGNvbnN0IGljb24gPSBub2RlRWxlbS5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJoZWlnaHRcIiwgXCI1MHB4XCIpLmF0dHIoXCJ3aWR0aFwiLCBub2RlLndpZHRoKS5hdHRyKFwic3R5bGVcIiwgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO1xuICAgICAgaWNvbi5hcHBlbmQoXCJkaXZcIikuYXR0cihcImNsYXNzXCIsIFwiaWNvbi1jb250YWluZXJcIikuYXBwZW5kKFwiaVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWljb24tXCIgKyBzZWN0aW9uICsgXCIgXCIgKyBub2RlLmljb24pO1xuICAgICAgdGV4dEVsZW0uYXR0cihcbiAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyBub2RlLndpZHRoIC8gMiArIFwiLCBcIiArIChub2RlLmhlaWdodCAvIDIgLSAxLjUgKiBub2RlLnBhZGRpbmcpICsgXCIpXCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUud2lkdGggKz0gNTA7XG4gICAgICBjb25zdCBvcmdIZWlnaHQgPSBub2RlLmhlaWdodDtcbiAgICAgIG5vZGUuaGVpZ2h0ID0gTWF0aC5tYXgob3JnSGVpZ2h0LCA2MCk7XG4gICAgICBjb25zdCBoZWlnaHREaWZmID0gTWF0aC5hYnMobm9kZS5oZWlnaHQgLSBvcmdIZWlnaHQpO1xuICAgICAgY29uc3QgaWNvbiA9IG5vZGVFbGVtLmFwcGVuZChcImZvcmVpZ25PYmplY3RcIikuYXR0cihcIndpZHRoXCIsIFwiNjBweFwiKS5hdHRyKFwiaGVpZ2h0XCIsIG5vZGUuaGVpZ2h0KS5hdHRyKFwic3R5bGVcIiwgXCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDpcIiArIGhlaWdodERpZmYgLyAyICsgXCJweDtcIik7XG4gICAgICBpY29uLmFwcGVuZChcImRpdlwiKS5hdHRyKFwiY2xhc3NcIiwgXCJpY29uLWNvbnRhaW5lclwiKS5hcHBlbmQoXCJpXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtaWNvbi1cIiArIHNlY3Rpb24gKyBcIiBcIiArIG5vZGUuaWNvbik7XG4gICAgICB0ZXh0RWxlbS5hdHRyKFxuICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArICgyNSArIG5vZGUud2lkdGggLyAyKSArIFwiLCBcIiArIChoZWlnaHREaWZmIC8gMiArIG5vZGUucGFkZGluZyAvIDIpICsgXCIpXCJcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghaHRtbExhYmVscykge1xuICAgICAgY29uc3QgZHggPSBub2RlLndpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGR5ID0gbm9kZS5wYWRkaW5nIC8gMjtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwiLCBcIiArIGR5ICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkeCA9IChub2RlLndpZHRoIC0gYmJveC53aWR0aCkgLyAyO1xuICAgICAgY29uc3QgZHkgPSAobm9kZS5oZWlnaHQgLSBiYm94LmhlaWdodCkgLyAyO1xuICAgICAgdGV4dEVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCIsIFwiICsgZHkgKyBcIilcIik7XG4gICAgfVxuICB9XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBkYjIubm9kZVR5cGUuREVGQVVMVDpcbiAgICAgIGRlZmF1bHRCa2coZGIyLCBia2dFbGVtLCBub2RlLCBzZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZGIyLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpcbiAgICAgIHJvdW5kZWRSZWN0QmtnKGRiMiwgYmtnRWxlbSwgbm9kZSwgc2VjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRiMi5ub2RlVHlwZS5SRUNUOlxuICAgICAgcmVjdEJrZyhkYjIsIGJrZ0VsZW0sIG5vZGUsIHNlY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkYjIubm9kZVR5cGUuQ0lSQ0xFOlxuICAgICAgYmtnRWxlbS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbm9kZS53aWR0aCAvIDIgKyBcIiwgXCIgKyArbm9kZS5oZWlnaHQgLyAyICsgXCIpXCIpO1xuICAgICAgY2lyY2xlQmtnKGRiMiwgYmtnRWxlbSwgbm9kZSwgc2VjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRiMi5ub2RlVHlwZS5DTE9VRDpcbiAgICAgIGNsb3VkQmtnKGRiMiwgYmtnRWxlbSwgbm9kZSwgc2VjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGRiMi5ub2RlVHlwZS5CQU5HOlxuICAgICAgYmFuZ0JrZyhkYjIsIGJrZ0VsZW0sIG5vZGUsIHNlY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkYjIubm9kZVR5cGUuSEVYQUdPTjpcbiAgICAgIGhleGFnb25Ca2coZGIyLCBia2dFbGVtLCBub2RlLCBzZWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGRiMi5zZXRFbGVtZW50Rm9ySWQobm9kZS5pZCwgbm9kZUVsZW0pO1xuICByZXR1cm4gbm9kZS5oZWlnaHQ7XG59LCBcImRyYXdOb2RlXCIpO1xudmFyIHBvc2l0aW9uTm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGIyLCBub2RlKSB7XG4gIGNvbnN0IG5vZGVFbGVtID0gZGIyLmdldEVsZW1lbnRCeUlkKG5vZGUuaWQpO1xuICBjb25zdCB4ID0gbm9kZS54IHx8IDA7XG4gIGNvbnN0IHkgPSBub2RlLnkgfHwgMDtcbiAgbm9kZUVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHggKyBcIixcIiArIHkgKyBcIilcIik7XG59LCBcInBvc2l0aW9uTm9kZVwiKTtcblxuLy8gc3JjL2RpYWdyYW1zL21pbmRtYXAvbWluZG1hcFJlbmRlcmVyLnRzXG5jeXRvc2NhcGUudXNlKGNvc2VCaWxrZW50KTtcbmFzeW5jIGZ1bmN0aW9uIGRyYXdOb2RlcyhkYjIsIHN2ZywgbWluZG1hcCwgc2VjdGlvbiwgY29uZikge1xuICBhd2FpdCBkcmF3Tm9kZShkYjIsIHN2ZywgbWluZG1hcCwgc2VjdGlvbiwgY29uZik7XG4gIGlmIChtaW5kbWFwLmNoaWxkcmVuKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtaW5kbWFwLmNoaWxkcmVuLm1hcChcbiAgICAgICAgKGNoaWxkLCBpbmRleCkgPT4gZHJhd05vZGVzKGRiMiwgc3ZnLCBjaGlsZCwgc2VjdGlvbiA8IDAgPyBpbmRleCA6IHNlY3Rpb24sIGNvbmYpXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGRyYXdOb2RlcywgXCJkcmF3Tm9kZXNcIik7XG5mdW5jdGlvbiBkcmF3RWRnZXMoZWRnZXNFbCwgY3kpIHtcbiAgY3kuZWRnZXMoKS5tYXAoKGVkZ2UsIGlkKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGVkZ2UuZGF0YSgpO1xuICAgIGlmIChlZGdlWzBdLl9wcml2YXRlLmJvZHlCb3VuZHMpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICBsb2cudHJhY2UoXCJFZGdlOiBcIiwgaWQsIGRhdGEpO1xuICAgICAgZWRnZXNFbC5pbnNlcnQoXCJwYXRoXCIpLmF0dHIoXG4gICAgICAgIFwiZFwiLFxuICAgICAgICBgTSAke2JvdW5kcy5zdGFydFh9LCR7Ym91bmRzLnN0YXJ0WX0gTCAke2JvdW5kcy5taWRYfSwke2JvdW5kcy5taWRZfSBMJHtib3VuZHMuZW5kWH0sJHtib3VuZHMuZW5kWX0gYFxuICAgICAgKS5hdHRyKFwiY2xhc3NcIiwgXCJlZGdlIHNlY3Rpb24tZWRnZS1cIiArIGRhdGEuc2VjdGlvbiArIFwiIGVkZ2UtZGVwdGgtXCIgKyBkYXRhLmRlcHRoKTtcbiAgICB9XG4gIH0pO1xufVxuX19uYW1lKGRyYXdFZGdlcywgXCJkcmF3RWRnZXNcIik7XG5mdW5jdGlvbiBhZGROb2RlcyhtaW5kbWFwLCBjeSwgY29uZiwgbGV2ZWwpIHtcbiAgY3kuYWRkKHtcbiAgICBncm91cDogXCJub2Rlc1wiLFxuICAgIGRhdGE6IHtcbiAgICAgIGlkOiBtaW5kbWFwLmlkLnRvU3RyaW5nKCksXG4gICAgICBsYWJlbFRleHQ6IG1pbmRtYXAuZGVzY3IsXG4gICAgICBoZWlnaHQ6IG1pbmRtYXAuaGVpZ2h0LFxuICAgICAgd2lkdGg6IG1pbmRtYXAud2lkdGgsXG4gICAgICBsZXZlbCxcbiAgICAgIG5vZGVJZDogbWluZG1hcC5pZCxcbiAgICAgIHBhZGRpbmc6IG1pbmRtYXAucGFkZGluZyxcbiAgICAgIHR5cGU6IG1pbmRtYXAudHlwZVxuICAgIH0sXG4gICAgcG9zaXRpb246IHtcbiAgICAgIHg6IG1pbmRtYXAueCxcbiAgICAgIHk6IG1pbmRtYXAueVxuICAgIH1cbiAgfSk7XG4gIGlmIChtaW5kbWFwLmNoaWxkcmVuKSB7XG4gICAgbWluZG1hcC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgYWRkTm9kZXMoY2hpbGQsIGN5LCBjb25mLCBsZXZlbCArIDEpO1xuICAgICAgY3kuYWRkKHtcbiAgICAgICAgZ3JvdXA6IFwiZWRnZXNcIixcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGlkOiBgJHttaW5kbWFwLmlkfV8ke2NoaWxkLmlkfWAsXG4gICAgICAgICAgc291cmNlOiBtaW5kbWFwLmlkLFxuICAgICAgICAgIHRhcmdldDogY2hpbGQuaWQsXG4gICAgICAgICAgZGVwdGg6IGxldmVsLFxuICAgICAgICAgIHNlY3Rpb246IGNoaWxkLnNlY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbl9fbmFtZShhZGROb2RlcywgXCJhZGROb2Rlc1wiKTtcbmZ1bmN0aW9uIGxheW91dE1pbmRtYXAobm9kZSwgY29uZikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZW5kZXJFbCA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJpZFwiLCBcImN5XCIpLmF0dHIoXCJzdHlsZVwiLCBcImRpc3BsYXk6bm9uZVwiKTtcbiAgICBjb25zdCBjeSA9IGN5dG9zY2FwZSh7XG4gICAgICBjb250YWluZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3lcIiksXG4gICAgICAvLyBjb250YWluZXIgdG8gcmVuZGVyIGluXG4gICAgICBzdHlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwiZWRnZVwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBcImN1cnZlLXN0eWxlXCI6IFwiYmV6aWVyXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICByZW5kZXJFbC5yZW1vdmUoKTtcbiAgICBhZGROb2Rlcyhub2RlLCBjeSwgY29uZiwgMCk7XG4gICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgIG4ubGF5b3V0RGltZW5zaW9ucyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG4uZGF0YSgpO1xuICAgICAgICByZXR1cm4geyB3OiBkYXRhLndpZHRoLCBoOiBkYXRhLmhlaWdodCB9O1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBjeS5sYXlvdXQoe1xuICAgICAgbmFtZTogXCJjb3NlLWJpbGtlbnRcIixcbiAgICAgIC8vIEB0cy1pZ25vcmUgVHlwZXMgZm9yIGNvc2UtYmlsa2VudCBhcmUgbm90IGNvcnJlY3Q/XG4gICAgICBxdWFsaXR5OiBcInByb29mXCIsXG4gICAgICBzdHlsZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgYW5pbWF0ZTogZmFsc2VcbiAgICB9KS5ydW4oKTtcbiAgICBjeS5yZWFkeSgoZSkgPT4ge1xuICAgICAgbG9nLmluZm8oXCJSZWFkeVwiLCBlKTtcbiAgICAgIHJlc29sdmUoY3kpO1xuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShsYXlvdXRNaW5kbWFwLCBcImxheW91dE1pbmRtYXBcIik7XG5mdW5jdGlvbiBwb3NpdGlvbk5vZGVzKGRiMiwgY3kpIHtcbiAgY3kubm9kZXMoKS5tYXAoKG5vZGUsIGlkKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IG5vZGUuZGF0YSgpO1xuICAgIGRhdGEueCA9IG5vZGUucG9zaXRpb24oKS54O1xuICAgIGRhdGEueSA9IG5vZGUucG9zaXRpb24oKS55O1xuICAgIHBvc2l0aW9uTm9kZShkYjIsIGRhdGEpO1xuICAgIGNvbnN0IGVsID0gZGIyLmdldEVsZW1lbnRCeUlkKGRhdGEubm9kZUlkKTtcbiAgICBsb2cuaW5mbyhcIklkOlwiLCBpZCwgXCJQb3NpdGlvbjogKFwiLCBub2RlLnBvc2l0aW9uKCkueCwgXCIsIFwiLCBub2RlLnBvc2l0aW9uKCkueSwgXCIpXCIsIGRhdGEpO1xuICAgIGVsLmF0dHIoXG4gICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgYHRyYW5zbGF0ZSgke25vZGUucG9zaXRpb24oKS54IC0gZGF0YS53aWR0aCAvIDJ9LCAke25vZGUucG9zaXRpb24oKS55IC0gZGF0YS5oZWlnaHQgLyAyfSlgXG4gICAgKTtcbiAgICBlbC5hdHRyKFwiYXR0clwiLCBgYXBhLSR7aWR9KWApO1xuICB9KTtcbn1cbl9fbmFtZShwb3NpdGlvbk5vZGVzLCBcInBvc2l0aW9uTm9kZXNcIik7XG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikgPT4ge1xuICBsb2cuZGVidWcoXCJSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtXFxuXCIgKyB0ZXh0KTtcbiAgY29uc3QgZGIyID0gZGlhZ09iai5kYjtcbiAgY29uc3QgbW0gPSBkYjIuZ2V0TWluZG1hcCgpO1xuICBpZiAoIW1tKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNvbmYgPSBnZXRDb25maWcoKTtcbiAgY29uZi5odG1sTGFiZWxzID0gZmFsc2U7XG4gIGNvbnN0IHN2ZyA9IHNlbGVjdFN2Z0VsZW1lbnQoaWQpO1xuICBjb25zdCBlZGdlc0VsZW0gPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgZWRnZXNFbGVtLmF0dHIoXCJjbGFzc1wiLCBcIm1pbmRtYXAtZWRnZXNcIik7XG4gIGNvbnN0IG5vZGVzRWxlbSA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBub2Rlc0VsZW0uYXR0cihcImNsYXNzXCIsIFwibWluZG1hcC1ub2Rlc1wiKTtcbiAgYXdhaXQgZHJhd05vZGVzKGRiMiwgbm9kZXNFbGVtLCBtbSwgLTEsIGNvbmYpO1xuICBjb25zdCBjeSA9IGF3YWl0IGxheW91dE1pbmRtYXAobW0sIGNvbmYpO1xuICBkcmF3RWRnZXMoZWRnZXNFbGVtLCBjeSk7XG4gIHBvc2l0aW9uTm9kZXMoZGIyLCBjeSk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KFxuICAgIHZvaWQgMCxcbiAgICBzdmcsXG4gICAgY29uZi5taW5kbWFwPy5wYWRkaW5nID8/IGRlZmF1bHRDb25maWdfZGVmYXVsdC5taW5kbWFwLnBhZGRpbmcsXG4gICAgY29uZi5taW5kbWFwPy51c2VNYXhXaWR0aCA/PyBkZWZhdWx0Q29uZmlnX2RlZmF1bHQubWluZG1hcC51c2VNYXhXaWR0aFxuICApO1xufSwgXCJkcmF3XCIpO1xudmFyIG1pbmRtYXBSZW5kZXJlcl9kZWZhdWx0ID0ge1xuICBkcmF3XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvbWluZG1hcC9zdHlsZXMudHNcbmltcG9ydCB7IGRhcmtlbiwgbGlnaHRlbiwgaXNEYXJrIH0gZnJvbSBcImtocm9tYVwiO1xudmFyIGdlblNlY3Rpb25zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4ge1xuICBsZXQgc2VjdGlvbnMgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gb3B0aW9uc1tcImxpbmVDb2xvclwiICsgaV0gfHwgb3B0aW9uc1tcImNTY2FsZUludlwiICsgaV07XG4gICAgaWYgKGlzRGFyayhvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSkpIHtcbiAgICAgIG9wdGlvbnNbXCJsaW5lQ29sb3JcIiArIGldID0gbGlnaHRlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSA9IGRhcmtlbihvcHRpb25zW1wibGluZUNvbG9yXCIgKyBpXSwgMjApO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuVEhFTUVfQ09MT1JfTElNSVQ7IGkrKykge1xuICAgIGNvbnN0IHN3ID0gXCJcIiArICgxNyAtIDMgKiBpKTtcbiAgICBzZWN0aW9ucyArPSBgXG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gcmVjdCwgLnNlY3Rpb24tJHtpIC0gMX0gcGF0aCwgLnNlY3Rpb24tJHtpIC0gMX0gY2lyY2xlLCAuc2VjdGlvbi0ke2kgLSAxfSBwb2x5Z29uLCAuc2VjdGlvbi0ke2kgLSAxfSBwYXRoICB7XG4gICAgICBmaWxsOiAke29wdGlvbnNbXCJjU2NhbGVcIiArIGldfTtcbiAgICB9XG4gICAgLnNlY3Rpb24tJHtpIC0gMX0gdGV4dCB7XG4gICAgIGZpbGw6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5ub2RlLWljb24tJHtpIC0gMX0ge1xuICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgY29sb3I6ICR7b3B0aW9uc1tcImNTY2FsZUxhYmVsXCIgKyBpXX07XG4gICAgfVxuICAgIC5zZWN0aW9uLWVkZ2UtJHtpIC0gMX17XG4gICAgICBzdHJva2U6ICR7b3B0aW9uc1tcImNTY2FsZVwiICsgaV19O1xuICAgIH1cbiAgICAuZWRnZS1kZXB0aC0ke2kgLSAxfXtcbiAgICAgIHN0cm9rZS13aWR0aDogJHtzd307XG4gICAgfVxuICAgIC5zZWN0aW9uLSR7aSAtIDF9IGxpbmUge1xuICAgICAgc3Ryb2tlOiAke29wdGlvbnNbXCJjU2NhbGVJbnZcIiArIGldfSA7XG4gICAgICBzdHJva2Utd2lkdGg6IDM7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7XG4gICAgICBmaWxsOiBsaWdodGdyYXk7XG4gICAgfVxuICAgIC5kaXNhYmxlZCB0ZXh0IHtcbiAgICAgIGZpbGw6ICNlZmVmZWY7XG4gICAgfVxuICAgIGA7XG4gIH1cbiAgcmV0dXJuIHNlY3Rpb25zO1xufSwgXCJnZW5TZWN0aW9uc1wiKTtcbnZhciBnZXRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcHRpb25zKSA9PiBgXG4gIC5lZGdlIHtcbiAgICBzdHJva2Utd2lkdGg6IDM7XG4gIH1cbiAgJHtnZW5TZWN0aW9ucyhvcHRpb25zKX1cbiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0MH07XG4gIH1cbiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHtcbiAgICBmaWxsOiAke29wdGlvbnMuZ2l0QnJhbmNoTGFiZWwwfTtcbiAgfVxuICAuaWNvbi1jb250YWluZXIge1xuICAgIGhlaWdodDoxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuICAuZWRnZSB7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuICAubWluZG1hcC1ub2RlLWxhYmVsIHtcbiAgICBkeTogMWVtO1xuICAgIGFsaWdubWVudC1iYXNlbGluZTogbWlkZGxlO1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbmAsIFwiZ2V0U3R5bGVzXCIpO1xudmFyIHN0eWxlc19kZWZhdWx0ID0gZ2V0U3R5bGVzO1xuXG4vLyBzcmMvZGlhZ3JhbXMvbWluZG1hcC9taW5kbWFwLWRlZmluaXRpb24udHNcbnZhciBkaWFncmFtID0ge1xuICBkYjogbWluZG1hcERiX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBtaW5kbWFwUmVuZGVyZXJfZGVmYXVsdCxcbiAgcGFyc2VyOiBtaW5kbWFwX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLAogICAgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbFxuICAgICAgICAgICYmIChtaW4gPiB2YWx1ZSB8fCAobWluID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPj0gdmFsdWUpKSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pbjtcbn1cbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3VtKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG4iLAogICAgImltcG9ydCB7bWlufSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuZnVuY3Rpb24gdGFyZ2V0RGVwdGgoZCkge1xuICByZXR1cm4gZC50YXJnZXQuZGVwdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZGVwdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodChub2RlLCBuKSB7XG4gIHJldHVybiBuIC0gMSAtIG5vZGUuaGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVzdGlmeShub2RlLCBuKSB7XG4gIHJldHVybiBub2RlLnNvdXJjZUxpbmtzLmxlbmd0aCA/IG5vZGUuZGVwdGggOiBuIC0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbnRlcihub2RlKSB7XG4gIHJldHVybiBub2RlLnRhcmdldExpbmtzLmxlbmd0aCA/IG5vZGUuZGVwdGhcbiAgICAgIDogbm9kZS5zb3VyY2VMaW5rcy5sZW5ndGggPyBtaW4obm9kZS5zb3VyY2VMaW5rcywgdGFyZ2V0RGVwdGgpIC0gMVxuICAgICAgOiAwO1xufVxuIiwKICAgICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHttYXgsIG1pbiwgc3VtfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7anVzdGlmeX0gZnJvbSBcIi4vYWxpZ24uanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBhc2NlbmRpbmdTb3VyY2VCcmVhZHRoKGEsIGIpIHtcbiAgcmV0dXJuIGFzY2VuZGluZ0JyZWFkdGgoYS5zb3VyY2UsIGIuc291cmNlKSB8fCBhLmluZGV4IC0gYi5pbmRleDtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nVGFyZ2V0QnJlYWR0aChhLCBiKSB7XG4gIHJldHVybiBhc2NlbmRpbmdCcmVhZHRoKGEudGFyZ2V0LCBiLnRhcmdldCkgfHwgYS5pbmRleCAtIGIuaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0JyZWFkdGgoYSwgYikge1xuICByZXR1cm4gYS55MCAtIGIueTA7XG59XG5cbmZ1bmN0aW9uIHZhbHVlKGQpIHtcbiAgcmV0dXJuIGQudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRJZChkKSB7XG4gIHJldHVybiBkLmluZGV4O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Tm9kZXMoZ3JhcGgpIHtcbiAgcmV0dXJuIGdyYXBoLm5vZGVzO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0TGlua3MoZ3JhcGgpIHtcbiAgcmV0dXJuIGdyYXBoLmxpbmtzO1xufVxuXG5mdW5jdGlvbiBmaW5kKG5vZGVCeUlkLCBpZCkge1xuICBjb25zdCBub2RlID0gbm9kZUJ5SWQuZ2V0KGlkKTtcbiAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIiArIGlkKTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVMaW5rQnJlYWR0aHMoe25vZGVzfSkge1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBsZXQgeTAgPSBub2RlLnkwO1xuICAgIGxldCB5MSA9IHkwO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBub2RlLnNvdXJjZUxpbmtzKSB7XG4gICAgICBsaW5rLnkwID0geTAgKyBsaW5rLndpZHRoIC8gMjtcbiAgICAgIHkwICs9IGxpbmsud2lkdGg7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGluayBvZiBub2RlLnRhcmdldExpbmtzKSB7XG4gICAgICBsaW5rLnkxID0geTEgKyBsaW5rLndpZHRoIC8gMjtcbiAgICAgIHkxICs9IGxpbmsud2lkdGg7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNhbmtleSgpIHtcbiAgbGV0IHgwID0gMCwgeTAgPSAwLCB4MSA9IDEsIHkxID0gMTsgLy8gZXh0ZW50XG4gIGxldCBkeCA9IDI0OyAvLyBub2RlV2lkdGhcbiAgbGV0IGR5ID0gOCwgcHk7IC8vIG5vZGVQYWRkaW5nXG4gIGxldCBpZCA9IGRlZmF1bHRJZDtcbiAgbGV0IGFsaWduID0ganVzdGlmeTtcbiAgbGV0IHNvcnQ7XG4gIGxldCBsaW5rU29ydDtcbiAgbGV0IG5vZGVzID0gZGVmYXVsdE5vZGVzO1xuICBsZXQgbGlua3MgPSBkZWZhdWx0TGlua3M7XG4gIGxldCBpdGVyYXRpb25zID0gNjtcblxuICBmdW5jdGlvbiBzYW5rZXkoKSB7XG4gICAgY29uc3QgZ3JhcGggPSB7bm9kZXM6IG5vZGVzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyksIGxpbmtzOiBsaW5rcy5hcHBseShudWxsLCBhcmd1bWVudHMpfTtcbiAgICBjb21wdXRlTm9kZUxpbmtzKGdyYXBoKTtcbiAgICBjb21wdXRlTm9kZVZhbHVlcyhncmFwaCk7XG4gICAgY29tcHV0ZU5vZGVEZXB0aHMoZ3JhcGgpO1xuICAgIGNvbXB1dGVOb2RlSGVpZ2h0cyhncmFwaCk7XG4gICAgY29tcHV0ZU5vZGVCcmVhZHRocyhncmFwaCk7XG4gICAgY29tcHV0ZUxpbmtCcmVhZHRocyhncmFwaCk7XG4gICAgcmV0dXJuIGdyYXBoO1xuICB9XG5cbiAgc2Fua2V5LnVwZGF0ZSA9IGZ1bmN0aW9uKGdyYXBoKSB7XG4gICAgY29tcHV0ZUxpbmtCcmVhZHRocyhncmFwaCk7XG4gICAgcmV0dXJuIGdyYXBoO1xuICB9O1xuXG4gIHNhbmtleS5ub2RlSWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBzYW5rZXkpIDogaWQ7XG4gIH07XG5cbiAgc2Fua2V5Lm5vZGVBbGlnbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbGlnbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIHNhbmtleSkgOiBhbGlnbjtcbiAgfTtcblxuICBzYW5rZXkubm9kZVNvcnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydCA9IF8sIHNhbmtleSkgOiBzb3J0O1xuICB9O1xuXG4gIHNhbmtleS5ub2RlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZHggPSArXywgc2Fua2V5KSA6IGR4O1xuICB9O1xuXG4gIHNhbmtleS5ub2RlUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkeSA9IHB5ID0gK18sIHNhbmtleSkgOiBkeTtcbiAgfTtcblxuICBzYW5rZXkubm9kZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBzYW5rZXkpIDogbm9kZXM7XG4gIH07XG5cbiAgc2Fua2V5LmxpbmtzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGxpbmtzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgc2Fua2V5KSA6IGxpbmtzO1xuICB9O1xuXG4gIHNhbmtleS5saW5rU29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChsaW5rU29ydCA9IF8sIHNhbmtleSkgOiBsaW5rU29ydDtcbiAgfTtcblxuICBzYW5rZXkuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9IHkwID0gMCwgeDEgPSArX1swXSwgeTEgPSArX1sxXSwgc2Fua2V5KSA6IFt4MSAtIHgwLCB5MSAtIHkwXTtcbiAgfTtcblxuICBzYW5rZXkuZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gK19bMF1bMF0sIHgxID0gK19bMV1bMF0sIHkwID0gK19bMF1bMV0sIHkxID0gK19bMV1bMV0sIHNhbmtleSkgOiBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgfTtcblxuICBzYW5rZXkuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIHNhbmtleSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNvbXB1dGVOb2RlTGlua3Moe25vZGVzLCBsaW5rc30pIHtcbiAgICBmb3IgKGNvbnN0IFtpLCBub2RlXSBvZiBub2Rlcy5lbnRyaWVzKCkpIHtcbiAgICAgIG5vZGUuaW5kZXggPSBpO1xuICAgICAgbm9kZS5zb3VyY2VMaW5rcyA9IFtdO1xuICAgICAgbm9kZS50YXJnZXRMaW5rcyA9IFtdO1xuICAgIH1cbiAgICBjb25zdCBub2RlQnlJZCA9IG5ldyBNYXAobm9kZXMubWFwKChkLCBpKSA9PiBbaWQoZCwgaSwgbm9kZXMpLCBkXSkpO1xuICAgIGZvciAoY29uc3QgW2ksIGxpbmtdIG9mIGxpbmtzLmVudHJpZXMoKSkge1xuICAgICAgbGluay5pbmRleCA9IGk7XG4gICAgICBsZXQge3NvdXJjZSwgdGFyZ2V0fSA9IGxpbms7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIikgc291cmNlID0gbGluay5zb3VyY2UgPSBmaW5kKG5vZGVCeUlkLCBzb3VyY2UpO1xuICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHRhcmdldCA9IGxpbmsudGFyZ2V0ID0gZmluZChub2RlQnlJZCwgdGFyZ2V0KTtcbiAgICAgIHNvdXJjZS5zb3VyY2VMaW5rcy5wdXNoKGxpbmspO1xuICAgICAgdGFyZ2V0LnRhcmdldExpbmtzLnB1c2gobGluayk7XG4gICAgfVxuICAgIGlmIChsaW5rU29ydCAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHtzb3VyY2VMaW5rcywgdGFyZ2V0TGlua3N9IG9mIG5vZGVzKSB7XG4gICAgICAgIHNvdXJjZUxpbmtzLnNvcnQobGlua1NvcnQpO1xuICAgICAgICB0YXJnZXRMaW5rcy5zb3J0KGxpbmtTb3J0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlTm9kZVZhbHVlcyh7bm9kZXN9KSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBub2RlLnZhbHVlID0gbm9kZS5maXhlZFZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IE1hdGgubWF4KHN1bShub2RlLnNvdXJjZUxpbmtzLCB2YWx1ZSksIHN1bShub2RlLnRhcmdldExpbmtzLCB2YWx1ZSkpXG4gICAgICAgICAgOiBub2RlLmZpeGVkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVEZXB0aHMoe25vZGVzfSkge1xuICAgIGNvbnN0IG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgbGV0IGN1cnJlbnQgPSBuZXcgU2V0KG5vZGVzKTtcbiAgICBsZXQgbmV4dCA9IG5ldyBTZXQ7XG4gICAgbGV0IHggPSAwO1xuICAgIHdoaWxlIChjdXJyZW50LnNpemUpIHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjdXJyZW50KSB7XG4gICAgICAgIG5vZGUuZGVwdGggPSB4O1xuICAgICAgICBmb3IgKGNvbnN0IHt0YXJnZXR9IG9mIG5vZGUuc291cmNlTGlua3MpIHtcbiAgICAgICAgICBuZXh0LmFkZCh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKyt4ID4gbikgdGhyb3cgbmV3IEVycm9yKFwiY2lyY3VsYXIgbGlua1wiKTtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgICAgbmV4dCA9IG5ldyBTZXQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVIZWlnaHRzKHtub2Rlc30pIHtcbiAgICBjb25zdCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIGxldCBjdXJyZW50ID0gbmV3IFNldChub2Rlcyk7XG4gICAgbGV0IG5leHQgPSBuZXcgU2V0O1xuICAgIGxldCB4ID0gMDtcbiAgICB3aGlsZSAoY3VycmVudC5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgY3VycmVudCkge1xuICAgICAgICBub2RlLmhlaWdodCA9IHg7XG4gICAgICAgIGZvciAoY29uc3Qge3NvdXJjZX0gb2Ygbm9kZS50YXJnZXRMaW5rcykge1xuICAgICAgICAgIG5leHQuYWRkKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgrK3ggPiBuKSB0aHJvdyBuZXcgRXJyb3IoXCJjaXJjdWxhciBsaW5rXCIpO1xuICAgICAgY3VycmVudCA9IG5leHQ7XG4gICAgICBuZXh0ID0gbmV3IFNldDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlTm9kZUxheWVycyh7bm9kZXN9KSB7XG4gICAgY29uc3QgeCA9IG1heChub2RlcywgZCA9PiBkLmRlcHRoKSArIDE7XG4gICAgY29uc3Qga3ggPSAoeDEgLSB4MCAtIGR4KSAvICh4IC0gMSk7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheSh4KTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGNvbnN0IGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih4IC0gMSwgTWF0aC5mbG9vcihhbGlnbi5jYWxsKG51bGwsIG5vZGUsIHgpKSkpO1xuICAgICAgbm9kZS5sYXllciA9IGk7XG4gICAgICBub2RlLngwID0geDAgKyBpICoga3g7XG4gICAgICBub2RlLngxID0gbm9kZS54MCArIGR4O1xuICAgICAgaWYgKGNvbHVtbnNbaV0pIGNvbHVtbnNbaV0ucHVzaChub2RlKTtcbiAgICAgIGVsc2UgY29sdW1uc1tpXSA9IFtub2RlXTtcbiAgICB9XG4gICAgaWYgKHNvcnQpIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIGNvbHVtbi5zb3J0KHNvcnQpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVOb2RlQnJlYWR0aHMoY29sdW1ucykge1xuICAgIGNvbnN0IGt5ID0gbWluKGNvbHVtbnMsIGMgPT4gKHkxIC0geTAgLSAoYy5sZW5ndGggLSAxKSAqIHB5KSAvIHN1bShjLCB2YWx1ZSkpO1xuICAgIGZvciAoY29uc3Qgbm9kZXMgb2YgY29sdW1ucykge1xuICAgICAgbGV0IHkgPSB5MDtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBub2RlLnkwID0geTtcbiAgICAgICAgbm9kZS55MSA9IHkgKyBub2RlLnZhbHVlICoga3k7XG4gICAgICAgIHkgPSBub2RlLnkxICsgcHk7XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBub2RlLnNvdXJjZUxpbmtzKSB7XG4gICAgICAgICAgbGluay53aWR0aCA9IGxpbmsudmFsdWUgKiBreTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgeSA9ICh5MSAtIHkgKyBweSkgLyAobm9kZXMubGVuZ3RoICsgMSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgbm9kZS55MCArPSB5ICogKGkgKyAxKTtcbiAgICAgICAgbm9kZS55MSArPSB5ICogKGkgKyAxKTtcbiAgICAgIH1cbiAgICAgIHJlb3JkZXJMaW5rcyhub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU5vZGVCcmVhZHRocyhncmFwaCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb21wdXRlTm9kZUxheWVycyhncmFwaCk7XG4gICAgcHkgPSBNYXRoLm1pbihkeSwgKHkxIC0geTApIC8gKG1heChjb2x1bW5zLCBjID0+IGMubGVuZ3RoKSAtIDEpKTtcbiAgICBpbml0aWFsaXplTm9kZUJyZWFkdGhzKGNvbHVtbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgKytpKSB7XG4gICAgICBjb25zdCBhbHBoYSA9IE1hdGgucG93KDAuOTksIGkpO1xuICAgICAgY29uc3QgYmV0YSA9IE1hdGgubWF4KDEgLSBhbHBoYSwgKGkgKyAxKSAvIGl0ZXJhdGlvbnMpO1xuICAgICAgcmVsYXhSaWdodFRvTGVmdChjb2x1bW5zLCBhbHBoYSwgYmV0YSk7XG4gICAgICByZWxheExlZnRUb1JpZ2h0KGNvbHVtbnMsIGFscGhhLCBiZXRhKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXBvc2l0aW9uIGVhY2ggbm9kZSBiYXNlZCBvbiBpdHMgaW5jb21pbmcgKHRhcmdldCkgbGlua3MuXG4gIGZ1bmN0aW9uIHJlbGF4TGVmdFRvUmlnaHQoY29sdW1ucywgYWxwaGEsIGJldGEpIHtcbiAgICBmb3IgKGxldCBpID0gMSwgbiA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2ldO1xuICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgY29sdW1uKSB7XG4gICAgICAgIGxldCB5ID0gMDtcbiAgICAgICAgbGV0IHcgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHtzb3VyY2UsIHZhbHVlfSBvZiB0YXJnZXQudGFyZ2V0TGlua3MpIHtcbiAgICAgICAgICBsZXQgdiA9IHZhbHVlICogKHRhcmdldC5sYXllciAtIHNvdXJjZS5sYXllcik7XG4gICAgICAgICAgeSArPSB0YXJnZXRUb3Aoc291cmNlLCB0YXJnZXQpICogdjtcbiAgICAgICAgICB3ICs9IHY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEodyA+IDApKSBjb250aW51ZTtcbiAgICAgICAgbGV0IGR5ID0gKHkgLyB3IC0gdGFyZ2V0LnkwKSAqIGFscGhhO1xuICAgICAgICB0YXJnZXQueTAgKz0gZHk7XG4gICAgICAgIHRhcmdldC55MSArPSBkeTtcbiAgICAgICAgcmVvcmRlck5vZGVMaW5rcyh0YXJnZXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNvcnQgPT09IHVuZGVmaW5lZCkgY29sdW1uLnNvcnQoYXNjZW5kaW5nQnJlYWR0aCk7XG4gICAgICByZXNvbHZlQ29sbGlzaW9ucyhjb2x1bW4sIGJldGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlcG9zaXRpb24gZWFjaCBub2RlIGJhc2VkIG9uIGl0cyBvdXRnb2luZyAoc291cmNlKSBsaW5rcy5cbiAgZnVuY3Rpb24gcmVsYXhSaWdodFRvTGVmdChjb2x1bW5zLCBhbHBoYSwgYmV0YSkge1xuICAgIGZvciAobGV0IG4gPSBjb2x1bW5zLmxlbmd0aCwgaSA9IG4gLSAyOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpXTtcbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIGNvbHVtbikge1xuICAgICAgICBsZXQgeSA9IDA7XG4gICAgICAgIGxldCB3ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCB7dGFyZ2V0LCB2YWx1ZX0gb2Ygc291cmNlLnNvdXJjZUxpbmtzKSB7XG4gICAgICAgICAgbGV0IHYgPSB2YWx1ZSAqICh0YXJnZXQubGF5ZXIgLSBzb3VyY2UubGF5ZXIpO1xuICAgICAgICAgIHkgKz0gc291cmNlVG9wKHNvdXJjZSwgdGFyZ2V0KSAqIHY7XG4gICAgICAgICAgdyArPSB2O1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHcgPiAwKSkgY29udGludWU7XG4gICAgICAgIGxldCBkeSA9ICh5IC8gdyAtIHNvdXJjZS55MCkgKiBhbHBoYTtcbiAgICAgICAgc291cmNlLnkwICs9IGR5O1xuICAgICAgICBzb3VyY2UueTEgKz0gZHk7XG4gICAgICAgIHJlb3JkZXJOb2RlTGlua3Moc291cmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3J0ID09PSB1bmRlZmluZWQpIGNvbHVtbi5zb3J0KGFzY2VuZGluZ0JyZWFkdGgpO1xuICAgICAgcmVzb2x2ZUNvbGxpc2lvbnMoY29sdW1uLCBiZXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlQ29sbGlzaW9ucyhub2RlcywgYWxwaGEpIHtcbiAgICBjb25zdCBpID0gbm9kZXMubGVuZ3RoID4+IDE7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5vZGVzW2ldO1xuICAgIHJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3Aobm9kZXMsIHN1YmplY3QueTAgLSBweSwgaSAtIDEsIGFscGhhKTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tKG5vZGVzLCBzdWJqZWN0LnkxICsgcHksIGkgKyAxLCBhbHBoYSk7XG4gICAgcmVzb2x2ZUNvbGxpc2lvbnNCb3R0b21Ub1RvcChub2RlcywgeTEsIG5vZGVzLmxlbmd0aCAtIDEsIGFscGhhKTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tKG5vZGVzLCB5MCwgMCwgYWxwaGEpO1xuICB9XG5cbiAgLy8gUHVzaCBhbnkgb3ZlcmxhcHBpbmcgbm9kZXMgZG93bi5cbiAgZnVuY3Rpb24gcmVzb2x2ZUNvbGxpc2lvbnNUb3BUb0JvdHRvbShub2RlcywgeSwgaSwgYWxwaGEpIHtcbiAgICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG4gICAgICBjb25zdCBkeSA9ICh5IC0gbm9kZS55MCkgKiBhbHBoYTtcbiAgICAgIGlmIChkeSA+IDFlLTYpIG5vZGUueTAgKz0gZHksIG5vZGUueTEgKz0gZHk7XG4gICAgICB5ID0gbm9kZS55MSArIHB5O1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1c2ggYW55IG92ZXJsYXBwaW5nIG5vZGVzIHVwLlxuICBmdW5jdGlvbiByZXNvbHZlQ29sbGlzaW9uc0JvdHRvbVRvVG9wKG5vZGVzLCB5LCBpLCBhbHBoYSkge1xuICAgIGZvciAoOyBpID49IDA7IC0taSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgY29uc3QgZHkgPSAobm9kZS55MSAtIHkpICogYWxwaGE7XG4gICAgICBpZiAoZHkgPiAxZS02KSBub2RlLnkwIC09IGR5LCBub2RlLnkxIC09IGR5O1xuICAgICAgeSA9IG5vZGUueTAgLSBweTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW9yZGVyTm9kZUxpbmtzKHtzb3VyY2VMaW5rcywgdGFyZ2V0TGlua3N9KSB7XG4gICAgaWYgKGxpbmtTb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qge3NvdXJjZToge3NvdXJjZUxpbmtzfX0gb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgICAgc291cmNlTGlua3Muc29ydChhc2NlbmRpbmdUYXJnZXRCcmVhZHRoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qge3RhcmdldDoge3RhcmdldExpbmtzfX0gb2Ygc291cmNlTGlua3MpIHtcbiAgICAgICAgdGFyZ2V0TGlua3Muc29ydChhc2NlbmRpbmdTb3VyY2VCcmVhZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW9yZGVyTGlua3Mobm9kZXMpIHtcbiAgICBpZiAobGlua1NvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB7c291cmNlTGlua3MsIHRhcmdldExpbmtzfSBvZiBub2Rlcykge1xuICAgICAgICBzb3VyY2VMaW5rcy5zb3J0KGFzY2VuZGluZ1RhcmdldEJyZWFkdGgpO1xuICAgICAgICB0YXJnZXRMaW5rcy5zb3J0KGFzY2VuZGluZ1NvdXJjZUJyZWFkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHRhcmdldC55MCB0aGF0IHdvdWxkIHByb2R1Y2UgYW4gaWRlYWwgbGluayBmcm9tIHNvdXJjZSB0byB0YXJnZXQuXG4gIGZ1bmN0aW9uIHRhcmdldFRvcChzb3VyY2UsIHRhcmdldCkge1xuICAgIGxldCB5ID0gc291cmNlLnkwIC0gKHNvdXJjZS5zb3VyY2VMaW5rcy5sZW5ndGggLSAxKSAqIHB5IC8gMjtcbiAgICBmb3IgKGNvbnN0IHt0YXJnZXQ6IG5vZGUsIHdpZHRofSBvZiBzb3VyY2Uuc291cmNlTGlua3MpIHtcbiAgICAgIGlmIChub2RlID09PSB0YXJnZXQpIGJyZWFrO1xuICAgICAgeSArPSB3aWR0aCArIHB5O1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHtzb3VyY2U6IG5vZGUsIHdpZHRofSBvZiB0YXJnZXQudGFyZ2V0TGlua3MpIHtcbiAgICAgIGlmIChub2RlID09PSBzb3VyY2UpIGJyZWFrO1xuICAgICAgeSAtPSB3aWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBzb3VyY2UueTAgdGhhdCB3b3VsZCBwcm9kdWNlIGFuIGlkZWFsIGxpbmsgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0LlxuICBmdW5jdGlvbiBzb3VyY2VUb3Aoc291cmNlLCB0YXJnZXQpIHtcbiAgICBsZXQgeSA9IHRhcmdldC55MCAtICh0YXJnZXQudGFyZ2V0TGlua3MubGVuZ3RoIC0gMSkgKiBweSAvIDI7XG4gICAgZm9yIChjb25zdCB7c291cmNlOiBub2RlLCB3aWR0aH0gb2YgdGFyZ2V0LnRhcmdldExpbmtzKSB7XG4gICAgICBpZiAobm9kZSA9PT0gc291cmNlKSBicmVhaztcbiAgICAgIHkgKz0gd2lkdGggKyBweTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7dGFyZ2V0OiBub2RlLCB3aWR0aH0gb2Ygc291cmNlLnNvdXJjZUxpbmtzKSB7XG4gICAgICBpZiAobm9kZSA9PT0gdGFyZ2V0KSBicmVhaztcbiAgICAgIHkgLT0gd2lkdGg7XG4gICAgfVxuICAgIHJldHVybiB5O1xuICB9XG5cbiAgcmV0dXJuIHNhbmtleTtcbn1cbiIsCiAgICAidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcbiAgICB2YXIgZHggPSByICogTWF0aC5jb3MoYTApLFxuICAgICAgICBkeSA9IHIgKiBNYXRoLnNpbihhMCksXG4gICAgICAgIHgwID0geCArIGR4LFxuICAgICAgICB5MCA9IHkgKyBkeSxcbiAgICAgICAgY3cgPSAxIF4gY2N3LFxuICAgICAgICBkYSA9IGNjdyA/IGEwIC0gYTEgOiBhMSAtIGEwO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgwLHkwKSBub3QgY29pbmNpZGVudCB3aXRoIHRoZSBwcmV2aW91cyBwb2ludD8gTGluZSB0byAoeDAseTApLlxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuX3gxIC0geDApID4gZXBzaWxvbiB8fCBNYXRoLmFicyh0aGlzLl95MSAtIHkwKSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArIHgwICsgXCIsXCIgKyB5MDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBlbXB0eT8gV2XigJlyZSBkb25lLlxuICAgIGlmICghcikgcmV0dXJuO1xuXG4gICAgLy8gRG9lcyB0aGUgYW5nbGUgZ28gdGhlIHdyb25nIHdheT8gRmxpcCB0aGUgZGlyZWN0aW9uLlxuICAgIGlmIChkYSA8IDApIGRhID0gZGEgJSB0YXUgKyB0YXU7XG5cbiAgICAvLyBJcyB0aGlzIGEgY29tcGxldGUgY2lyY2xlPyBEcmF3IHR3byBhcmNzIHRvIGNvbXBsZXRlIHRoZSBjaXJjbGUuXG4gICAgaWYgKGRhID4gdGF1RXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAoeCAtIGR4KSArIFwiLFwiICsgKHkgLSBkeSkgKyBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geDApICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MCk7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgbm9uLWVtcHR5PyBEcmF3IGFuIGFyYyFcbiAgICBlbHNlIGlmIChkYSA+IGVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLFwiICsgKCsoZGEgPj0gcGkpKSArIFwiLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHggKyByICogTWF0aC5jb3MoYTEpKSArIFwiLFwiICsgKHRoaXMuX3kxID0geSArIHIgKiBNYXRoLnNpbihhMSkpO1xuICAgIH1cbiAgfSxcbiAgcmVjdDogZnVuY3Rpb24oeCwgeSwgdywgaCkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KSArIFwiaFwiICsgKCt3KSArIFwidlwiICsgKCtoKSArIFwiaFwiICsgKC13KSArIFwiWlwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcGF0aDtcbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbiIsCiAgICAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLAogICAgImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLAogICAgImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuLi9wb2ludC5qc1wiO1xuaW1wb3J0IHBvaW50UmFkaWFsIGZyb20gXCIuLi9wb2ludFJhZGlhbC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5rU291cmNlKGQpIHtcbiAgcmV0dXJuIGQuc291cmNlO1xufVxuXG5mdW5jdGlvbiBsaW5rVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIGQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBsaW5rKGN1cnZlKSB7XG4gIHZhciBzb3VyY2UgPSBsaW5rU291cmNlLFxuICAgICAgdGFyZ2V0ID0gbGlua1RhcmdldCxcbiAgICAgIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICB2YXIgYnVmZmVyLCBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBzID0gc291cmNlLmFwcGx5KHRoaXMsIGFyZ3YpLCB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICBjdXJ2ZShjb250ZXh0LCAreC5hcHBseSh0aGlzLCAoYXJndlswXSA9IHMsIGFyZ3YpKSwgK3kuYXBwbHkodGhpcywgYXJndiksICt4LmFwcGx5KHRoaXMsIChhcmd2WzBdID0gdCwgYXJndikpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5rLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCBsaW5rKSA6IHNvdXJjZTtcbiAgfTtcblxuICBsaW5rLnRhcmdldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXJnZXQgPSBfLCBsaW5rKSA6IHRhcmdldDtcbiAgfTtcblxuICBsaW5rLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5rKSA6IHg7XG4gIH07XG5cbiAgbGluay55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB5O1xuICB9O1xuXG4gIGxpbmsuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgbGluaykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUhvcml6b250YWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwID0gKHgwICsgeDEpIC8gMiwgeTAsIHgwLCB5MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gY3VydmVWZXJ0aWNhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICBjb250ZXh0LmJlemllckN1cnZlVG8oeDAsIHkwID0gKHkwICsgeTEpIC8gMiwgeDEsIHkwLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZVJhZGlhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcDAgPSBwb2ludFJhZGlhbCh4MCwgeTApLFxuICAgICAgcDEgPSBwb2ludFJhZGlhbCh4MCwgeTAgPSAoeTAgKyB5MSkgLyAyKSxcbiAgICAgIHAyID0gcG9pbnRSYWRpYWwoeDEsIHkwKSxcbiAgICAgIHAzID0gcG9pbnRSYWRpYWwoeDEsIHkxKTtcbiAgY29udGV4dC5tb3ZlVG8ocDBbMF0sIHAwWzFdKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAxWzBdLCBwMVsxXSwgcDJbMF0sIHAyWzFdLCBwM1swXSwgcDNbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0hvcml6b250YWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlSG9yaXpvbnRhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVmVydGljYWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlVmVydGljYWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1JhZGlhbCgpIHtcbiAgdmFyIGwgPSBsaW5rKGN1cnZlUmFkaWFsKTtcbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG4gIHJldHVybiBsO1xufVxuIiwKICAgICJleHBvcnQge2RlZmF1bHQgYXMgYXJjfSBmcm9tIFwiLi9hcmMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhcmVhfSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbGluZX0gZnJvbSBcIi4vbGluZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZX0gZnJvbSBcIi4vcGllLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxBcmVhfSBmcm9tIFwiLi9hcmVhUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbEFyZWEgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsaW5lUmFkaWFsLCBkZWZhdWx0IGFzIHJhZGlhbExpbmV9IGZyb20gXCIuL2xpbmVSYWRpYWwuanNcIjsgLy8gTm90ZTogcmFkaWFsTGluZSBpcyBkZXByZWNhdGVkIVxuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50UmFkaWFsfSBmcm9tIFwiLi9wb2ludFJhZGlhbC5qc1wiO1xuZXhwb3J0IHtsaW5rSG9yaXpvbnRhbCwgbGlua1ZlcnRpY2FsLCBsaW5rUmFkaWFsfSBmcm9tIFwiLi9saW5rL2luZGV4LmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2wsIHN5bWJvbHN9IGZyb20gXCIuL3N5bWJvbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENpcmNsZX0gZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbENyb3NzfSBmcm9tIFwiLi9zeW1ib2wvY3Jvc3MuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xEaWFtb25kfSBmcm9tIFwiLi9zeW1ib2wvZGlhbW9uZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFNxdWFyZX0gZnJvbSBcIi4vc3ltYm9sL3NxdWFyZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFN0YXJ9IGZyb20gXCIuL3N5bWJvbC9zdGFyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sVHJpYW5nbGV9IGZyb20gXCIuL3N5bWJvbC90cmlhbmdsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFd5ZX0gZnJvbSBcIi4vc3ltYm9sL3d5ZS5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vY3VydmUvYmFzaXNDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzT3Blbn0gZnJvbSBcIi4vY3VydmUvYmFzaXNPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc30gZnJvbSBcIi4vY3VydmUvYmFzaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJ1bmRsZX0gZnJvbSBcIi4vY3VydmUvYnVuZGxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21DbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21PcGVufSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbX0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTGluZWFyQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9saW5lYXJDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhcn0gZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5leHBvcnQge21vbm90b25lWCBhcyBjdXJ2ZU1vbm90b25lWCwgbW9ub3RvbmVZIGFzIGN1cnZlTW9ub3RvbmVZfSBmcm9tIFwiLi9jdXJ2ZS9tb25vdG9uZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTmF0dXJhbH0gZnJvbSBcIi4vY3VydmUvbmF0dXJhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlU3RlcCwgc3RlcEFmdGVyIGFzIGN1cnZlU3RlcEFmdGVyLCBzdGVwQmVmb3JlIGFzIGN1cnZlU3RlcEJlZm9yZX0gZnJvbSBcIi4vY3VydmUvc3RlcC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2t9IGZyb20gXCIuL3N0YWNrLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRFeHBhbmR9IGZyb20gXCIuL29mZnNldC9leHBhbmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldERpdmVyZ2luZ30gZnJvbSBcIi4vb2Zmc2V0L2RpdmVyZ2luZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0Tm9uZX0gZnJvbSBcIi4vb2Zmc2V0L25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldFNpbGhvdWV0dGV9IGZyb20gXCIuL29mZnNldC9zaWxob3VldHRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRXaWdnbGV9IGZyb20gXCIuL29mZnNldC93aWdnbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXBwZWFyYW5jZX0gZnJvbSBcIi4vb3JkZXIvYXBwZWFyYW5jZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJBc2NlbmRpbmd9IGZyb20gXCIuL29yZGVyL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJEZXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckluc2lkZU91dH0gZnJvbSBcIi4vb3JkZXIvaW5zaWRlT3V0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlck5vbmV9IGZyb20gXCIuL29yZGVyL25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyUmV2ZXJzZX0gZnJvbSBcIi4vb3JkZXIvcmV2ZXJzZS5qc1wiO1xuIiwKICAgICJpbXBvcnQge2xpbmtIb3Jpem9udGFsfSBmcm9tIFwiZDMtc2hhcGVcIjtcblxuZnVuY3Rpb24gaG9yaXpvbnRhbFNvdXJjZShkKSB7XG4gIHJldHVybiBbZC5zb3VyY2UueDEsIGQueTBdO1xufVxuXG5mdW5jdGlvbiBob3Jpem9udGFsVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIFtkLnRhcmdldC54MCwgZC55MV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbGlua0hvcml6b250YWwoKVxuICAgICAgLnNvdXJjZShob3Jpem9udGFsU291cmNlKVxuICAgICAgLnRhcmdldChob3Jpem9udGFsVGFyZ2V0KTtcbn1cbiIsCiAgICAiZXhwb3J0IHtkZWZhdWx0IGFzIHNhbmtleX0gZnJvbSBcIi4vc2Fua2V5LmpzXCI7XG5leHBvcnQge2NlbnRlciBhcyBzYW5rZXlDZW50ZXIsIGxlZnQgYXMgc2Fua2V5TGVmdCwgcmlnaHQgYXMgc2Fua2V5UmlnaHQsIGp1c3RpZnkgYXMgc2Fua2V5SnVzdGlmeX0gZnJvbSBcIi4vYWxpZ24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzYW5rZXlMaW5rSG9yaXpvbnRhbH0gZnJvbSBcIi4vc2Fua2V5TGlua0hvcml6b250YWwuanNcIjtcbiIsCiAgICAiaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGRlZmF1bHRDb25maWcyIGFzIGRlZmF1bHRDb25maWcsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnMiBhcyBnZXRDb25maWcsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIHNldHVwR3JhcGhWaWV3Ym94XG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2Fua2V5L3BhcnNlci9zYW5rZXkuamlzb25cbnZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG8gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGssIHYsIG8yLCBsKSB7XG4gICAgZm9yIChvMiA9IG8yIHx8IHt9LCBsID0gay5sZW5ndGg7IGwtLTsgbzJba1tsXV0gPSB2KSA7XG4gICAgcmV0dXJuIG8yO1xuICB9LCBcIm9cIiksICRWMCA9IFsxLCA5XSwgJFYxID0gWzEsIDEwXSwgJFYyID0gWzEsIDUsIDEwLCAxMl07XG4gIHZhciBwYXJzZXIyID0ge1xuICAgIHRyYWNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIH0sIFwidHJhY2VcIiksXG4gICAgeXk6IHt9LFxuICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJzdGFydFwiOiAzLCBcIlNBTktFWVwiOiA0LCBcIk5FV0xJTkVcIjogNSwgXCJjc3ZcIjogNiwgXCJvcHRfZW9mXCI6IDcsIFwicmVjb3JkXCI6IDgsIFwiY3N2X3RhaWxcIjogOSwgXCJFT0ZcIjogMTAsIFwiZmllbGRbc291cmNlXVwiOiAxMSwgXCJDT01NQVwiOiAxMiwgXCJmaWVsZFt0YXJnZXRdXCI6IDEzLCBcImZpZWxkW3ZhbHVlXVwiOiAxNCwgXCJmaWVsZFwiOiAxNSwgXCJlc2NhcGVkXCI6IDE2LCBcIm5vbl9lc2NhcGVkXCI6IDE3LCBcIkRRVU9URVwiOiAxOCwgXCJFU0NBUEVEX1RFWFRcIjogMTksIFwiTk9OX0VTQ0FQRURfVEVYVFwiOiAyMCwgXCIkYWNjZXB0XCI6IDAsIFwiJGVuZFwiOiAxIH0sXG4gICAgdGVybWluYWxzXzogeyAyOiBcImVycm9yXCIsIDQ6IFwiU0FOS0VZXCIsIDU6IFwiTkVXTElORVwiLCAxMDogXCJFT0ZcIiwgMTE6IFwiZmllbGRbc291cmNlXVwiLCAxMjogXCJDT01NQVwiLCAxMzogXCJmaWVsZFt0YXJnZXRdXCIsIDE0OiBcImZpZWxkW3ZhbHVlXVwiLCAxODogXCJEUVVPVEVcIiwgMTk6IFwiRVNDQVBFRF9URVhUXCIsIDIwOiBcIk5PTl9FU0NBUEVEX1RFWFRcIiB9LFxuICAgIHByb2R1Y3Rpb25zXzogWzAsIFszLCA0XSwgWzYsIDJdLCBbOSwgMl0sIFs5LCAwXSwgWzcsIDFdLCBbNywgMF0sIFs4LCA1XSwgWzE1LCAxXSwgWzE1LCAxXSwgWzE2LCAzXSwgWzE3LCAxXV0sXG4gICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LCB5eWxlbmcsIHl5bGluZW5vLCB5eSwgeXlzdGF0ZSwgJCQsIF8kKSB7XG4gICAgICB2YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuICAgICAgc3dpdGNoICh5eXN0YXRlKSB7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSB5eS5maW5kT3JDcmVhdGVOb2RlKCQkWyQwIC0gNF0udHJpbSgpLnJlcGxhY2VBbGwoJ1wiXCInLCAnXCInKSk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0geXkuZmluZE9yQ3JlYXRlTm9kZSgkJFskMCAtIDJdLnRyaW0oKS5yZXBsYWNlQWxsKCdcIlwiJywgJ1wiJykpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdCgkJFskMF0udHJpbSgpKTtcbiAgICAgICAgICB5eS5hZGRMaW5rKHNvdXJjZSwgdGFyZ2V0LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB0aGlzLiQgPSAkJFskMCAtIDFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sIFwiYW5vbnltb3VzXCIpLFxuICAgIHRhYmxlOiBbeyAzOiAxLCA0OiBbMSwgMl0gfSwgeyAxOiBbM10gfSwgeyA1OiBbMSwgM10gfSwgeyA2OiA0LCA4OiA1LCAxNTogNiwgMTY6IDcsIDE3OiA4LCAxODogJFYwLCAyMDogJFYxIH0sIHsgMTogWzIsIDZdLCA3OiAxMSwgMTA6IFsxLCAxMl0gfSwgbygkVjEsIFsyLCA0XSwgeyA5OiAxMywgNTogWzEsIDE0XSB9KSwgeyAxMjogWzEsIDE1XSB9LCBvKCRWMiwgWzIsIDhdKSwgbygkVjIsIFsyLCA5XSksIHsgMTk6IFsxLCAxNl0gfSwgbygkVjIsIFsyLCAxMV0pLCB7IDE6IFsyLCAxXSB9LCB7IDE6IFsyLCA1XSB9LCBvKCRWMSwgWzIsIDJdKSwgeyA2OiAxNywgODogNSwgMTU6IDYsIDE2OiA3LCAxNzogOCwgMTg6ICRWMCwgMjA6ICRWMSB9LCB7IDE1OiAxOCwgMTY6IDcsIDE3OiA4LCAxODogJFYwLCAyMDogJFYxIH0sIHsgMTg6IFsxLCAxOV0gfSwgbygkVjEsIFsyLCAzXSksIHsgMTI6IFsxLCAyMF0gfSwgbygkVjIsIFsyLCAxMF0pLCB7IDE1OiAyMSwgMTY6IDcsIDE3OiA4LCAxODogJFYwLCAyMDogJFYxIH0sIG8oWzEsIDUsIDEwXSwgWzIsIDddKV0sXG4gICAgZGVmYXVsdEFjdGlvbnM6IHsgMTE6IFsyLCAxXSwgMTI6IFsyLCA1XSB9LFxuICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgIGlmIChoYXNoLnJlY292ZXJhYmxlKSB7XG4gICAgICAgIHRoaXMudHJhY2Uoc3RyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB0c3RhY2sgPSBbXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgICAgdmFyIGFyZ3MgPSBsc3RhY2suc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGxleGVyMiA9IE9iamVjdC5jcmVhdGUodGhpcy5sZXhlcik7XG4gICAgICB2YXIgc2hhcmVkU3RhdGUgPSB7IHl5OiB7fSB9O1xuICAgICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICBzaGFyZWRTdGF0ZS55eVtrXSA9IHRoaXMueXlba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxleGVyMi5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgICAgc2hhcmVkU3RhdGUueXkubGV4ZXIgPSBsZXhlcjI7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5wYXJzZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBsZXhlcjIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbGV4ZXIyLnl5bGxvYyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICAgIHZhciByYW5nZXMgPSBsZXhlcjIub3B0aW9ucyAmJiBsZXhlcjIub3B0aW9ucy5yYW5nZXM7XG4gICAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBzaGFyZWRTdGF0ZS55eS5wYXJzZUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIH1cbiAgICAgIF9fbmFtZShwb3BTdGFjaywgXCJwb3BTdGFja1wiKTtcbiAgICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKSB8fCBsZXhlcjIubGV4KCkgfHwgRU9GO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHRzdGFjayA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSB0c3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgICAgX19uYW1lKGxleCwgXCJsZXhcIik7XG4gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiBURVJST1IpIHtcbiAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxleGVyMi5zaG93UG9zaXRpb24pIHtcbiAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyBsZXhlcjIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gRU9GID8gXCJlbmQgb2YgaW5wdXRcIiA6IFwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxleGVyMi5tYXRjaCxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lOiBsZXhlcjIueXlsaW5lbm8sXG4gICAgICAgICAgICBsb2M6IHl5bG9jLFxuICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2gobGV4ZXIyLnl5dGV4dCk7XG4gICAgICAgICAgICBsc3RhY2sucHVzaChsZXhlcjIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgIHl5bGVuZyA9IGxleGVyMi55eWxlbmc7XG4gICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyMi55eXRleHQ7XG4gICAgICAgICAgICAgIHl5bGluZW5vID0gbGV4ZXIyLnl5bGluZW5vO1xuICAgICAgICAgICAgICB5eWxvYyA9IGxleGVyMi55eWxsb2M7XG4gICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7XG4gICAgICAgICAgICAgIGZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh5eXZhbCwgW1xuICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgIHl5bGVuZyxcbiAgICAgICAgICAgICAgeXlsaW5lbm8sXG4gICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICBhY3Rpb25bMV0sXG4gICAgICAgICAgICAgIHZzdGFjayxcbiAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIFwicGFyc2VcIilcbiAgfTtcbiAgdmFyIGxleGVyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZXhlcjIgPSB7XG4gICAgICBFT0Y6IDEsXG4gICAgICBwYXJzZUVycm9yOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwYXJzZUVycm9yXCIpLFxuICAgICAgLy8gcmVzZXRzIHRoZSBsZXhlciwgc2V0cyBuZXcgaW5wdXRcbiAgICAgIHNldElucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gW1wiSU5JVElBTFwiXTtcbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgbGFzdF9saW5lOiAxLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwic2V0SW5wdXRcIiksXG4gICAgICAvLyBjb25zdW1lcyBhbmQgcmV0dXJucyBvbmUgY2hhciBmcm9tIHRoZSBpbnB1dFxuICAgICAgaW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2VbMV0rKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgICB9LCBcImlucHV0XCIpLFxuICAgICAgLy8gdW5zaGlmdHMgb25lIGNoYXIgKG9yIGEgc3RyaW5nKSBpbnRvIHRoZSBpbnB1dFxuICAgICAgdW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGggLSBsZW4pO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJ1bnB1dFwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBjYWNoZXMgbWF0Y2hlZCB0ZXh0IGFuZCBhcHBlbmRzIGl0IG9uIG5leHQgYWN0aW9uXG4gICAgICBtb3JlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcIm1vcmVcIiksXG4gICAgICAvLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxuICAgICAgcmVqZWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxcblwiICsgdGhpcy5zaG93UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgbGluZTogdGhpcy55eWxpbmVub1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJyZWplY3RcIiksXG4gICAgICAvLyByZXRhaW4gZmlyc3QgbiBjaGFyYWN0ZXJzIG9mIHRoZSBtYXRjaFxuICAgICAgbGVzczogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihuKSB7XG4gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICB9LCBcImxlc3NcIiksXG4gICAgICAvLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBwYXN0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyBcIi4uLlwiIDogXCJcIikgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgIH0sIFwicGFzdElucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICB1cGNvbWluZ0lucHV0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJ1cGNvbWluZ0lucHV0XCIpLFxuICAgICAgLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgc2hvd1Bvc2l0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYyArIFwiXlwiO1xuICAgICAgfSwgXCJzaG93UG9zaXRpb25cIiksXG4gICAgICAvLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbiAgICAgIHRlc3RfbWF0Y2g6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sIGxpbmVzLCBiYWNrdXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgYmFja3VwID0ge1xuICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICB5eWxsb2M6IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgICAgIGxhc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICBtYXRjaDogdGhpcy5tYXRjaCxcbiAgICAgICAgICAgIG1hdGNoZXM6IHRoaXMubWF0Y2hlcyxcbiAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgIHl5bGVuZzogdGhpcy55eWxlbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxuICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICBfaW5wdXQ6IHRoaXMuX2lucHV0LFxuICAgICAgICAgICAgeXk6IHRoaXMueXksXG4gICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgIGRvbmU6IHRoaXMuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmxhc3RfbGluZSxcbiAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIGluZGV4ZWRfcnVsZSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICBmb3IgKHZhciBrIGluIGJhY2t1cCkge1xuICAgICAgICAgICAgdGhpc1trXSA9IGJhY2t1cFtrXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sIFwidGVzdF9tYXRjaFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG4gICAgICBuZXh0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgIHRoaXMueXl0ZXh0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1hdGNoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2godGVtcE1hdGNoLCBydWxlc1tpXSk7XG4gICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYmFja3RyYWNrKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaChtYXRjaCwgcnVsZXNbaW5kZXhdKTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIiArICh0aGlzLnl5bGluZW5vICsgMSkgKyBcIi4gVW5yZWNvZ25pemVkIHRleHQuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibmV4dFwiKSxcbiAgICAgIC8vIHJldHVybiBuZXh0IG1hdGNoIHRoYXQgaGFzIGEgdG9rZW5cbiAgICAgIGxleDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIFwibGV4XCIpLFxuICAgICAgLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbiAgICAgIGJlZ2luOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH0sIFwiYmVnaW5cIiksXG4gICAgICAvLyBwb3AgdGhlIHByZXZpb3VzbHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZSBvZmYgdGhlIGNvbmRpdGlvbiBzdGFja1xuICAgICAgcG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHZhciBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxO1xuICAgICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJwb3BTdGF0ZVwiKSxcbiAgICAgIC8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG4gICAgICBfY3VycmVudFJ1bGVzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAmJiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1tcIklOSVRJQUxcIl0ucnVsZXM7XG4gICAgICAgIH1cbiAgICAgIH0sIFwiX2N1cnJlbnRSdWxlc1wiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbiAgICAgIHRvcFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRvcFN0YXRlKG4pIHtcbiAgICAgICAgbiA9IHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMSAtIE1hdGguYWJzKG4gfHwgMCk7XG4gICAgICAgIGlmIChuID49IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCJJTklUSUFMXCI7XG4gICAgICAgIH1cbiAgICAgIH0sIFwidG9wU3RhdGVcIiksXG4gICAgICAvLyBhbGlhcyBmb3IgYmVnaW4oY29uZGl0aW9uKVxuICAgICAgcHVzaFN0YXRlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHB1c2hTdGF0ZShjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgICAgfSwgXCJwdXNoU3RhdGVcIiksXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0ZXMgY3VycmVudGx5IG9uIHRoZSBzdGFja1xuICAgICAgc3RhdGVTdGFja1NpemU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gc3RhdGVTdGFja1NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIH0sIFwic3RhdGVTdGFja1NpemVcIiksXG4gICAgICBvcHRpb25zOiB7IFwiY2FzZS1pbnNlbnNpdGl2ZVwiOiB0cnVlIH0sXG4gICAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCkge1xuICAgICAgICB2YXIgWVlTVEFURSA9IFlZX1NUQVJUO1xuICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImNzdlwiKTtcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImVzY2FwZWRfdGV4dFwiKTtcbiAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiAyMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoXCJlc2NhcGVkX3RleHRcIik7XG4gICAgICAgICAgICByZXR1cm4gMTg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gMTk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSwgXCJhbm9ueW1vdXNcIiksXG4gICAgICBydWxlczogWy9eKD86c2Fua2V5LWJldGFcXGIpL2ksIC9eKD86JCkvaSwgL14oPzooKFxcdTAwMERcXHUwMDBBKXwoXFx1MDAwQSkpKS9pLCAvXig/OihcXHUwMDJDKSkvaSwgL14oPzooXFx1MDAyMikpL2ksIC9eKD86KFtcXHUwMDIwLVxcdTAwMjFcXHUwMDIzLVxcdTAwMkJcXHUwMDJELVxcdTAwN0VdKSopL2ksIC9eKD86KFxcdTAwMjIpKD8hKFxcdTAwMjIpKSkvaSwgL14oPzooKFtcXHUwMDIwLVxcdTAwMjFcXHUwMDIzLVxcdTAwMkJcXHUwMDJELVxcdTAwN0VdKXwoXFx1MDAyQyl8KFxcdTAwMEQpfChcXHUwMDBBKXwoXFx1MDAyMikoXFx1MDAyMikpKikvaV0sXG4gICAgICBjb25kaXRpb25zOiB7IFwiY3N2XCI6IHsgXCJydWxlc1wiOiBbMSwgMiwgMywgNCwgNSwgNiwgN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiZXNjYXBlZF90ZXh0XCI6IHsgXCJydWxlc1wiOiBbNiwgN10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDddLCBcImluY2x1c2l2ZVwiOiB0cnVlIH0gfVxuICAgIH07XG4gICAgcmV0dXJuIGxleGVyMjtcbiAgfSgpO1xuICBwYXJzZXIyLmxleGVyID0gbGV4ZXI7XG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICB0aGlzLnl5ID0ge307XG4gIH1cbiAgX19uYW1lKFBhcnNlciwgXCJQYXJzZXJcIik7XG4gIFBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXIyO1xuICBwYXJzZXIyLlBhcnNlciA9IFBhcnNlcjtcbiAgcmV0dXJuIG5ldyBQYXJzZXIoKTtcbn0oKTtcbnBhcnNlci5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2Fua2V5X2RlZmF1bHQgPSBwYXJzZXI7XG5cbi8vIHNyYy9kaWFncmFtcy9zYW5rZXkvc2Fua2V5REIudHNcbnZhciBsaW5rcyA9IFtdO1xudmFyIG5vZGVzID0gW107XG52YXIgbm9kZXNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBsaW5rcyA9IFtdO1xuICBub2RlcyA9IFtdO1xuICBub2Rlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGNsZWFyKCk7XG59LCBcImNsZWFyXCIpO1xudmFyIFNhbmtleUxpbmsgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSwgdGFyZ2V0LCB2YWx1ZSA9IDApIHtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJTYW5rZXlMaW5rXCIpO1xuICB9XG59O1xudmFyIGFkZExpbmsgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzb3VyY2UsIHRhcmdldCwgdmFsdWUpID0+IHtcbiAgbGlua3MucHVzaChuZXcgU2Fua2V5TGluayhzb3VyY2UsIHRhcmdldCwgdmFsdWUpKTtcbn0sIFwiYWRkTGlua1wiKTtcbnZhciBTYW5rZXlOb2RlID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihJRCkge1xuICAgIHRoaXMuSUQgPSBJRDtcbiAgfVxuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIlNhbmtleU5vZGVcIik7XG4gIH1cbn07XG52YXIgZmluZE9yQ3JlYXRlTm9kZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKElEKSA9PiB7XG4gIElEID0gY29tbW9uX2RlZmF1bHQuc2FuaXRpemVUZXh0KElELCBnZXRDb25maWcoKSk7XG4gIGxldCBub2RlID0gbm9kZXNNYXAuZ2V0KElEKTtcbiAgaWYgKG5vZGUgPT09IHZvaWQgMCkge1xuICAgIG5vZGUgPSBuZXcgU2Fua2V5Tm9kZShJRCk7XG4gICAgbm9kZXNNYXAuc2V0KElELCBub2RlKTtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2RlO1xufSwgXCJmaW5kT3JDcmVhdGVOb2RlXCIpO1xudmFyIGdldE5vZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBub2RlcywgXCJnZXROb2Rlc1wiKTtcbnZhciBnZXRMaW5rcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbGlua3MsIFwiZ2V0TGlua3NcIik7XG52YXIgZ2V0R3JhcGggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+ICh7XG4gIG5vZGVzOiBub2Rlcy5tYXAoKG5vZGUpID0+ICh7IGlkOiBub2RlLklEIH0pKSxcbiAgbGlua3M6IGxpbmtzLm1hcCgobGluaykgPT4gKHtcbiAgICBzb3VyY2U6IGxpbmsuc291cmNlLklELFxuICAgIHRhcmdldDogbGluay50YXJnZXQuSUQsXG4gICAgdmFsdWU6IGxpbmsudmFsdWVcbiAgfSkpXG59KSwgXCJnZXRHcmFwaFwiKTtcbnZhciBzYW5rZXlEQl9kZWZhdWx0ID0ge1xuICBub2Rlc01hcCxcbiAgZ2V0Q29uZmlnOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IGdldENvbmZpZygpLnNhbmtleSwgXCJnZXRDb25maWdcIiksXG4gIGdldE5vZGVzLFxuICBnZXRMaW5rcyxcbiAgZ2V0R3JhcGgsXG4gIGFkZExpbmssXG4gIGZpbmRPckNyZWF0ZU5vZGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXRBY2NUaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldERpYWdyYW1UaXRsZSxcbiAgY2xlYXI6IGNsZWFyMlxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NhbmtleS9zYW5rZXlSZW5kZXJlci50c1xuaW1wb3J0IHtcbiAgc2VsZWN0IGFzIGQzc2VsZWN0LFxuICBzY2FsZU9yZGluYWwgYXMgZDNzY2FsZU9yZGluYWwsXG4gIHNjaGVtZVRhYmxlYXUxMCBhcyBkM3NjaGVtZVRhYmxlYXUxMFxufSBmcm9tIFwiZDNcIjtcbmltcG9ydCB7XG4gIHNhbmtleSBhcyBkM1NhbmtleSxcbiAgc2Fua2V5TGlua0hvcml6b250YWwgYXMgZDNTYW5rZXlMaW5rSG9yaXpvbnRhbCxcbiAgc2Fua2V5TGVmdCBhcyBkM1NhbmtleUxlZnQsXG4gIHNhbmtleVJpZ2h0IGFzIGQzU2Fua2V5UmlnaHQsXG4gIHNhbmtleUNlbnRlciBhcyBkM1NhbmtleUNlbnRlcixcbiAgc2Fua2V5SnVzdGlmeSBhcyBkM1NhbmtleUp1c3RpZnlcbn0gZnJvbSBcImQzLXNhbmtleVwiO1xuXG4vLyBzcmMvcmVuZGVyaW5nLXV0aWwvdWlkLnRzXG52YXIgVWlkID0gY2xhc3MgX1VpZCB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiVWlkXCIpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gIH1cbiAgc3RhdGljIG5leHQobmFtZSkge1xuICAgIHJldHVybiBuZXcgX1VpZChuYW1lICsgKytfVWlkLmNvdW50KTtcbiAgfVxuICBjb25zdHJ1Y3RvcihpZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmhyZWYgPSBgIyR7aWR9YDtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gXCJ1cmwoXCIgKyB0aGlzLmhyZWYgKyBcIilcIjtcbiAgfVxufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NhbmtleS9zYW5rZXlSZW5kZXJlci50c1xudmFyIGFsaWdubWVudHNNYXAgPSB7XG4gIGxlZnQ6IGQzU2Fua2V5TGVmdCxcbiAgcmlnaHQ6IGQzU2Fua2V5UmlnaHQsXG4gIGNlbnRlcjogZDNTYW5rZXlDZW50ZXIsXG4gIGp1c3RpZnk6IGQzU2Fua2V5SnVzdGlmeVxufTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih0ZXh0LCBpZCwgX3ZlcnNpb24sIGRpYWdPYmopIHtcbiAgY29uc3QgeyBzZWN1cml0eUxldmVsLCBzYW5rZXk6IGNvbmYgfSA9IGdldENvbmZpZygpO1xuICBjb25zdCBkZWZhdWx0U2Fua2V5Q29uZmlnID0gZGVmYXVsdENvbmZpZy5zYW5rZXk7XG4gIGxldCBzYW5kYm94RWxlbWVudDtcbiAgaWYgKHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiKSB7XG4gICAgc2FuZGJveEVsZW1lbnQgPSBkM3NlbGVjdChcIiNpXCIgKyBpZCk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gZDNzZWxlY3Qoc2FuZGJveEVsZW1lbnQubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSkgOiBkM3NlbGVjdChcImJvZHlcIik7XG4gIGNvbnN0IHN2ZyA9IHNlY3VyaXR5TGV2ZWwgPT09IFwic2FuZGJveFwiID8gcm9vdC5zZWxlY3QoYFtpZD1cIiR7aWR9XCJdYCkgOiBkM3NlbGVjdChgW2lkPVwiJHtpZH1cIl1gKTtcbiAgY29uc3Qgd2lkdGggPSBjb25mPy53aWR0aCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBjb25mPy5oZWlnaHQgPz8gZGVmYXVsdFNhbmtleUNvbmZpZy53aWR0aDtcbiAgY29uc3QgdXNlTWF4V2lkdGggPSBjb25mPy51c2VNYXhXaWR0aCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLnVzZU1heFdpZHRoO1xuICBjb25zdCBub2RlQWxpZ25tZW50ID0gY29uZj8ubm9kZUFsaWdubWVudCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLm5vZGVBbGlnbm1lbnQ7XG4gIGNvbnN0IHByZWZpeCA9IGNvbmY/LnByZWZpeCA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLnByZWZpeDtcbiAgY29uc3Qgc3VmZml4ID0gY29uZj8uc3VmZml4ID8/IGRlZmF1bHRTYW5rZXlDb25maWcuc3VmZml4O1xuICBjb25zdCBzaG93VmFsdWVzID0gY29uZj8uc2hvd1ZhbHVlcyA/PyBkZWZhdWx0U2Fua2V5Q29uZmlnLnNob3dWYWx1ZXM7XG4gIGNvbnN0IGdyYXBoID0gZGlhZ09iai5kYi5nZXRHcmFwaCgpO1xuICBjb25zdCBub2RlQWxpZ24gPSBhbGlnbm1lbnRzTWFwW25vZGVBbGlnbm1lbnRdO1xuICBjb25zdCBub2RlV2lkdGggPSAxMDtcbiAgY29uc3Qgc2Fua2V5ID0gZDNTYW5rZXkoKS5ub2RlSWQoKGQpID0+IGQuaWQpLm5vZGVXaWR0aChub2RlV2lkdGgpLm5vZGVQYWRkaW5nKDEwICsgKHNob3dWYWx1ZXMgPyAxNSA6IDApKS5ub2RlQWxpZ24obm9kZUFsaWduKS5leHRlbnQoW1xuICAgIFswLCAwXSxcbiAgICBbd2lkdGgsIGhlaWdodF1cbiAgXSk7XG4gIHNhbmtleShncmFwaCk7XG4gIGNvbnN0IGNvbG9yU2NoZW1lID0gZDNzY2FsZU9yZGluYWwoZDNzY2hlbWVUYWJsZWF1MTApO1xuICBzdmcuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2Rlc1wiKS5zZWxlY3RBbGwoXCIubm9kZVwiKS5kYXRhKGdyYXBoLm5vZGVzKS5qb2luKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlXCIpLmF0dHIoXCJpZFwiLCAoZCkgPT4gKGQudWlkID0gVWlkLm5leHQoXCJub2RlLVwiKSkuaWQpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkge1xuICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIGQueDAgKyBcIixcIiArIGQueTAgKyBcIilcIjtcbiAgfSkuYXR0cihcInhcIiwgKGQpID0+IGQueDApLmF0dHIoXCJ5XCIsIChkKSA9PiBkLnkwKS5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJoZWlnaHRcIiwgKGQpID0+IHtcbiAgICByZXR1cm4gZC55MSAtIGQueTA7XG4gIH0pLmF0dHIoXCJ3aWR0aFwiLCAoZCkgPT4gZC54MSAtIGQueDApLmF0dHIoXCJmaWxsXCIsIChkKSA9PiBjb2xvclNjaGVtZShkLmlkKSk7XG4gIGNvbnN0IGdldFRleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh7IGlkOiBpZDIsIHZhbHVlIH0pID0+IHtcbiAgICBpZiAoIXNob3dWYWx1ZXMpIHtcbiAgICAgIHJldHVybiBpZDI7XG4gICAgfVxuICAgIHJldHVybiBgJHtpZDJ9XG4ke3ByZWZpeH0ke01hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwfSR7c3VmZml4fWA7XG4gIH0sIFwiZ2V0VGV4dFwiKTtcbiAgc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibm9kZS1sYWJlbHNcIikuYXR0cihcImZvbnQtZmFtaWx5XCIsIFwic2Fucy1zZXJpZlwiKS5hdHRyKFwiZm9udC1zaXplXCIsIDE0KS5zZWxlY3RBbGwoXCJ0ZXh0XCIpLmRhdGEoZ3JhcGgubm9kZXMpLmpvaW4oXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIChkKSA9PiBkLngwIDwgd2lkdGggLyAyID8gZC54MSArIDYgOiBkLngwIC0gNikuYXR0cihcInlcIiwgKGQpID0+IChkLnkxICsgZC55MCkgLyAyKS5hdHRyKFwiZHlcIiwgYCR7c2hvd1ZhbHVlcyA/IFwiMFwiIDogXCIwLjM1XCJ9ZW1gKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgKGQpID0+IGQueDAgPCB3aWR0aCAvIDIgPyBcInN0YXJ0XCIgOiBcImVuZFwiKS50ZXh0KGdldFRleHQpO1xuICBjb25zdCBsaW5rID0gc3ZnLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwibGlua3NcIikuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLmF0dHIoXCJzdHJva2Utb3BhY2l0eVwiLCAwLjUpLnNlbGVjdEFsbChcIi5saW5rXCIpLmRhdGEoZ3JhcGgubGlua3MpLmpvaW4oXCJnXCIpLmF0dHIoXCJjbGFzc1wiLCBcImxpbmtcIikuc3R5bGUoXCJtaXgtYmxlbmQtbW9kZVwiLCBcIm11bHRpcGx5XCIpO1xuICBjb25zdCBsaW5rQ29sb3IgPSBjb25mPy5saW5rQ29sb3IgPz8gXCJncmFkaWVudFwiO1xuICBpZiAobGlua0NvbG9yID09PSBcImdyYWRpZW50XCIpIHtcbiAgICBjb25zdCBncmFkaWVudCA9IGxpbmsuYXBwZW5kKFwibGluZWFyR3JhZGllbnRcIikuYXR0cihcImlkXCIsIChkKSA9PiAoZC51aWQgPSBVaWQubmV4dChcImxpbmVhckdyYWRpZW50LVwiKSkuaWQpLmF0dHIoXCJncmFkaWVudFVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIikuYXR0cihcIngxXCIsIChkKSA9PiBkLnNvdXJjZS54MSkuYXR0cihcIngyXCIsIChkKSA9PiBkLnRhcmdldC54MCk7XG4gICAgZ3JhZGllbnQuYXBwZW5kKFwic3RvcFwiKS5hdHRyKFwib2Zmc2V0XCIsIFwiMCVcIikuYXR0cihcInN0b3AtY29sb3JcIiwgKGQpID0+IGNvbG9yU2NoZW1lKGQuc291cmNlLmlkKSk7XG4gICAgZ3JhZGllbnQuYXBwZW5kKFwic3RvcFwiKS5hdHRyKFwib2Zmc2V0XCIsIFwiMTAwJVwiKS5hdHRyKFwic3RvcC1jb2xvclwiLCAoZCkgPT4gY29sb3JTY2hlbWUoZC50YXJnZXQuaWQpKTtcbiAgfVxuICBsZXQgY29sb3Jpbmc7XG4gIHN3aXRjaCAobGlua0NvbG9yKSB7XG4gICAgY2FzZSBcImdyYWRpZW50XCI6XG4gICAgICBjb2xvcmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGQpID0+IGQudWlkLCBcImNvbG9yaW5nXCIpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgY29sb3JpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkKSA9PiBjb2xvclNjaGVtZShkLnNvdXJjZS5pZCksIFwiY29sb3JpbmdcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGFyZ2V0XCI6XG4gICAgICBjb2xvcmluZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGQpID0+IGNvbG9yU2NoZW1lKGQudGFyZ2V0LmlkKSwgXCJjb2xvcmluZ1wiKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb2xvcmluZyA9IGxpbmtDb2xvcjtcbiAgfVxuICBsaW5rLmFwcGVuZChcInBhdGhcIikuYXR0cihcImRcIiwgZDNTYW5rZXlMaW5rSG9yaXpvbnRhbCgpKS5hdHRyKFwic3Ryb2tlXCIsIGNvbG9yaW5nKS5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIChkKSA9PiBNYXRoLm1heCgxLCBkLndpZHRoKSk7XG4gIHNldHVwR3JhcGhWaWV3Ym94KHZvaWQgMCwgc3ZnLCAwLCB1c2VNYXhXaWR0aCk7XG59LCBcImRyYXdcIik7XG52YXIgc2Fua2V5UmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhd1xufTtcblxuLy8gc3JjL2RpYWdyYW1zL3NhbmtleS9zYW5rZXlVdGlscy50c1xudmFyIHByZXBhcmVUZXh0Rm9yUGFyc2luZyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQpID0+IHtcbiAgY29uc3QgdGV4dFRvUGFyc2UgPSB0ZXh0LnJlcGxhY2VBbGwoL15bXlxcU1xcblxccl0rfFteXFxTXFxuXFxyXSskL2csIFwiXCIpLnJlcGxhY2VBbGwoLyhbXFxuXFxyXSkrL2csIFwiXFxuXCIpLnRyaW0oKTtcbiAgcmV0dXJuIHRleHRUb1BhcnNlO1xufSwgXCJwcmVwYXJlVGV4dEZvclBhcnNpbmdcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9zYW5rZXkvc2Fua2V5RGlhZ3JhbS50c1xudmFyIG9yaWdpbmFsUGFyc2UgPSBzYW5rZXlfZGVmYXVsdC5wYXJzZS5iaW5kKHNhbmtleV9kZWZhdWx0KTtcbnNhbmtleV9kZWZhdWx0LnBhcnNlID0gKHRleHQpID0+IG9yaWdpbmFsUGFyc2UocHJlcGFyZVRleHRGb3JQYXJzaW5nKHRleHQpKTtcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IHNhbmtleV9kZWZhdWx0LFxuICBkYjogc2Fua2V5REJfZGVmYXVsdCxcbiAgcmVuZGVyZXI6IHNhbmtleVJlbmRlcmVyX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICBwb3B1bGF0ZUNvbW1vbkRiXG59IGZyb20gXCIuL2NodW5rLU9RQ001TEhVLm1qc1wiO1xuaW1wb3J0IHtcbiAgY2xlYW5BbmRNZXJnZVxufSBmcm9tIFwiLi9jaHVuay0yRURUV0RZSS5tanNcIjtcbmltcG9ydCB7XG4gIHNlbGVjdFN2Z0VsZW1lbnRcbn0gZnJvbSBcIi4vY2h1bmstRjJYRk4zQlkubWpzXCI7XG5pbXBvcnQge1xuICBfX25hbWUsXG4gIGNsZWFyLFxuICBjb25maWd1cmVTdmdTaXplLFxuICBkZWZhdWx0Q29uZmlnX2RlZmF1bHQsXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBnZXRBY2NUaXRsZSxcbiAgZ2V0Q29uZmlnLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIGxvZyxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGVcbn0gZnJvbSBcIi4vY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9wYWNrZXQvZGIudHNcbnZhciBkZWZhdWx0UGFja2V0RGF0YSA9IHtcbiAgcGFja2V0OiBbXVxufTtcbnZhciBkYXRhID0gc3RydWN0dXJlZENsb25lKGRlZmF1bHRQYWNrZXREYXRhKTtcbnZhciBERUZBVUxUX1BBQ0tFVF9DT05GSUcgPSBkZWZhdWx0Q29uZmlnX2RlZmF1bHQucGFja2V0O1xudmFyIGdldENvbmZpZzIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgY29uc3QgY29uZmlnID0gY2xlYW5BbmRNZXJnZSh7XG4gICAgLi4uREVGQVVMVF9QQUNLRVRfQ09ORklHLFxuICAgIC4uLmdldENvbmZpZygpLnBhY2tldFxuICB9KTtcbiAgaWYgKGNvbmZpZy5zaG93Qml0cykge1xuICAgIGNvbmZpZy5wYWRkaW5nWSArPSAxMDtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufSwgXCJnZXRDb25maWdcIik7XG52YXIgZ2V0UGFja2V0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBkYXRhLnBhY2tldCwgXCJnZXRQYWNrZXRcIik7XG52YXIgcHVzaFdvcmQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh3b3JkKSA9PiB7XG4gIGlmICh3b3JkLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnBhY2tldC5wdXNoKHdvcmQpO1xuICB9XG59LCBcInB1c2hXb3JkXCIpO1xudmFyIGNsZWFyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBjbGVhcigpO1xuICBkYXRhID0gc3RydWN0dXJlZENsb25lKGRlZmF1bHRQYWNrZXREYXRhKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgZGIgPSB7XG4gIHB1c2hXb3JkLFxuICBnZXRQYWNrZXQsXG4gIGdldENvbmZpZzogZ2V0Q29uZmlnMixcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0QWNjVGl0bGUsXG4gIGdldEFjY1RpdGxlLFxuICBzZXREaWFncmFtVGl0bGUsXG4gIGdldERpYWdyYW1UaXRsZSxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIHNldEFjY0Rlc2NyaXB0aW9uXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGFja2V0L3BhcnNlci50c1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiQG1lcm1haWQtanMvcGFyc2VyXCI7XG52YXIgbWF4UGFja2V0U2l6ZSA9IDFlNDtcbnZhciBwb3B1bGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFzdCkgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIpO1xuICBsZXQgbGFzdEJ5dGUgPSAtMTtcbiAgbGV0IHdvcmQgPSBbXTtcbiAgbGV0IHJvdyA9IDE7XG4gIGNvbnN0IHsgYml0c1BlclJvdyB9ID0gZGIuZ2V0Q29uZmlnKCk7XG4gIGZvciAobGV0IHsgc3RhcnQsIGVuZCwgbGFiZWwgfSBvZiBhc3QuYmxvY2tzKSB7XG4gICAgaWYgKGVuZCAmJiBlbmQgPCBzdGFydCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYWNrZXQgYmxvY2sgJHtzdGFydH0gLSAke2VuZH0gaXMgaW52YWxpZC4gRW5kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHN0YXJ0LmApO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgIT09IGxhc3RCeXRlICsgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGFja2V0IGJsb2NrICR7c3RhcnR9IC0gJHtlbmQgPz8gc3RhcnR9IGlzIG5vdCBjb250aWd1b3VzLiBJdCBzaG91bGQgc3RhcnQgZnJvbSAke2xhc3RCeXRlICsgMX0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgbGFzdEJ5dGUgPSBlbmQgPz8gc3RhcnQ7XG4gICAgbG9nLmRlYnVnKGBQYWNrZXQgYmxvY2sgJHtzdGFydH0gLSAke2xhc3RCeXRlfSB3aXRoIGxhYmVsICR7bGFiZWx9YCk7XG4gICAgd2hpbGUgKHdvcmQubGVuZ3RoIDw9IGJpdHNQZXJSb3cgKyAxICYmIGRiLmdldFBhY2tldCgpLmxlbmd0aCA8IG1heFBhY2tldFNpemUpIHtcbiAgICAgIGNvbnN0IFtibG9jaywgbmV4dEJsb2NrXSA9IGdldE5leHRGaXR0aW5nQmxvY2soeyBzdGFydCwgZW5kLCBsYWJlbCB9LCByb3csIGJpdHNQZXJSb3cpO1xuICAgICAgd29yZC5wdXNoKGJsb2NrKTtcbiAgICAgIGlmIChibG9jay5lbmQgKyAxID09PSByb3cgKiBiaXRzUGVyUm93KSB7XG4gICAgICAgIGRiLnB1c2hXb3JkKHdvcmQpO1xuICAgICAgICB3b3JkID0gW107XG4gICAgICAgIHJvdysrO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXh0QmxvY2spIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAoeyBzdGFydCwgZW5kLCBsYWJlbCB9ID0gbmV4dEJsb2NrKTtcbiAgICB9XG4gIH1cbiAgZGIucHVzaFdvcmQod29yZCk7XG59LCBcInBvcHVsYXRlXCIpO1xudmFyIGdldE5leHRGaXR0aW5nQmxvY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChibG9jaywgcm93LCBiaXRzUGVyUm93KSA9PiB7XG4gIGlmIChibG9jay5lbmQgPT09IHZvaWQgMCkge1xuICAgIGJsb2NrLmVuZCA9IGJsb2NrLnN0YXJ0O1xuICB9XG4gIGlmIChibG9jay5zdGFydCA+IGJsb2NrLmVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHtibG9jay5zdGFydH0gaXMgZ3JlYXRlciB0aGFuIGJsb2NrIGVuZCAke2Jsb2NrLmVuZH0uYCk7XG4gIH1cbiAgaWYgKGJsb2NrLmVuZCArIDEgPD0gcm93ICogYml0c1BlclJvdykge1xuICAgIHJldHVybiBbYmxvY2ssIHZvaWQgMF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBzdGFydDogYmxvY2suc3RhcnQsXG4gICAgICBlbmQ6IHJvdyAqIGJpdHNQZXJSb3cgLSAxLFxuICAgICAgbGFiZWw6IGJsb2NrLmxhYmVsXG4gICAgfSxcbiAgICB7XG4gICAgICBzdGFydDogcm93ICogYml0c1BlclJvdyxcbiAgICAgIGVuZDogYmxvY2suZW5kLFxuICAgICAgbGFiZWw6IGJsb2NrLmxhYmVsXG4gICAgfVxuICBdO1xufSwgXCJnZXROZXh0Rml0dGluZ0Jsb2NrXCIpO1xudmFyIHBhcnNlciA9IHtcbiAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgY29uc3QgYXN0ID0gYXdhaXQgcGFyc2UoXCJwYWNrZXRcIiwgaW5wdXQpO1xuICAgIGxvZy5kZWJ1Zyhhc3QpO1xuICAgIHBvcHVsYXRlKGFzdCk7XG4gIH0sIFwicGFyc2VcIilcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9wYWNrZXQvcmVuZGVyZXIudHNcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoX3RleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ3JhbTIpID0+IHtcbiAgY29uc3QgZGIyID0gZGlhZ3JhbTIuZGI7XG4gIGNvbnN0IGNvbmZpZyA9IGRiMi5nZXRDb25maWcoKTtcbiAgY29uc3QgeyByb3dIZWlnaHQsIHBhZGRpbmdZLCBiaXRXaWR0aCwgYml0c1BlclJvdyB9ID0gY29uZmlnO1xuICBjb25zdCB3b3JkcyA9IGRiMi5nZXRQYWNrZXQoKTtcbiAgY29uc3QgdGl0bGUgPSBkYjIuZ2V0RGlhZ3JhbVRpdGxlKCk7XG4gIGNvbnN0IHRvdGFsUm93SGVpZ2h0ID0gcm93SGVpZ2h0ICsgcGFkZGluZ1k7XG4gIGNvbnN0IHN2Z0hlaWdodCA9IHRvdGFsUm93SGVpZ2h0ICogKHdvcmRzLmxlbmd0aCArIDEpIC0gKHRpdGxlID8gMCA6IHJvd0hlaWdodCk7XG4gIGNvbnN0IHN2Z1dpZHRoID0gYml0V2lkdGggKiBiaXRzUGVyUm93ICsgMjtcbiAgY29uc3Qgc3ZnID0gc2VsZWN0U3ZnRWxlbWVudChpZCk7XG4gIHN2Zy5hdHRyKFwidmlld2JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApO1xuICBjb25maWd1cmVTdmdTaXplKHN2Zywgc3ZnSGVpZ2h0LCBzdmdXaWR0aCwgY29uZmlnLnVzZU1heFdpZHRoKTtcbiAgZm9yIChjb25zdCBbd29yZCwgcGFja2V0XSBvZiB3b3Jkcy5lbnRyaWVzKCkpIHtcbiAgICBkcmF3V29yZChzdmcsIHBhY2tldCwgd29yZCwgY29uZmlnKTtcbiAgfVxuICBzdmcuYXBwZW5kKFwidGV4dFwiKS50ZXh0KHRpdGxlKS5hdHRyKFwieFwiLCBzdmdXaWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHN2Z0hlaWdodCAtIHRvdGFsUm93SGVpZ2h0IC8gMikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiY2xhc3NcIiwgXCJwYWNrZXRUaXRsZVwiKTtcbn0sIFwiZHJhd1wiKTtcbnZhciBkcmF3V29yZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Zywgd29yZCwgcm93TnVtYmVyLCB7IHJvd0hlaWdodCwgcGFkZGluZ1gsIHBhZGRpbmdZLCBiaXRXaWR0aCwgYml0c1BlclJvdywgc2hvd0JpdHMgfSkgPT4ge1xuICBjb25zdCBncm91cCA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBjb25zdCB3b3JkWSA9IHJvd051bWJlciAqIChyb3dIZWlnaHQgKyBwYWRkaW5nWSkgKyBwYWRkaW5nWTtcbiAgZm9yIChjb25zdCBibG9jayBvZiB3b3JkKSB7XG4gICAgY29uc3QgYmxvY2tYID0gYmxvY2suc3RhcnQgJSBiaXRzUGVyUm93ICogYml0V2lkdGggKyAxO1xuICAgIGNvbnN0IHdpZHRoID0gKGJsb2NrLmVuZCAtIGJsb2NrLnN0YXJ0ICsgMSkgKiBiaXRXaWR0aCAtIHBhZGRpbmdYO1xuICAgIGdyb3VwLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgYmxvY2tYKS5hdHRyKFwieVwiLCB3b3JkWSkuYXR0cihcIndpZHRoXCIsIHdpZHRoKS5hdHRyKFwiaGVpZ2h0XCIsIHJvd0hlaWdodCkuYXR0cihcImNsYXNzXCIsIFwicGFja2V0QmxvY2tcIik7XG4gICAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBibG9ja1ggKyB3aWR0aCAvIDIpLmF0dHIoXCJ5XCIsIHdvcmRZICsgcm93SGVpZ2h0IC8gMikuYXR0cihcImNsYXNzXCIsIFwicGFja2V0TGFiZWxcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KGJsb2NrLmxhYmVsKTtcbiAgICBpZiAoIXNob3dCaXRzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNTaW5nbGVCbG9jayA9IGJsb2NrLmVuZCA9PT0gYmxvY2suc3RhcnQ7XG4gICAgY29uc3QgYml0TnVtYmVyWSA9IHdvcmRZIC0gMjtcbiAgICBncm91cC5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJ4XCIsIGJsb2NrWCArIChpc1NpbmdsZUJsb2NrID8gd2lkdGggLyAyIDogMCkpLmF0dHIoXCJ5XCIsIGJpdE51bWJlclkpLmF0dHIoXCJjbGFzc1wiLCBcInBhY2tldEJ5dGUgc3RhcnRcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiYXV0b1wiKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgaXNTaW5nbGVCbG9jayA/IFwibWlkZGxlXCIgOiBcInN0YXJ0XCIpLnRleHQoYmxvY2suc3RhcnQpO1xuICAgIGlmICghaXNTaW5nbGVCbG9jaykge1xuICAgICAgZ3JvdXAuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwieFwiLCBibG9ja1ggKyB3aWR0aCkuYXR0cihcInlcIiwgYml0TnVtYmVyWSkuYXR0cihcImNsYXNzXCIsIFwicGFja2V0Qnl0ZSBlbmRcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiYXV0b1wiKS5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJlbmRcIikudGV4dChibG9jay5lbmQpO1xuICAgIH1cbiAgfVxufSwgXCJkcmF3V29yZFwiKTtcbnZhciByZW5kZXJlciA9IHsgZHJhdyB9O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGFja2V0L3N0eWxlcy50c1xudmFyIGRlZmF1bHRQYWNrZXRTdHlsZU9wdGlvbnMgPSB7XG4gIGJ5dGVGb250U2l6ZTogXCIxMHB4XCIsXG4gIHN0YXJ0Qnl0ZUNvbG9yOiBcImJsYWNrXCIsXG4gIGVuZEJ5dGVDb2xvcjogXCJibGFja1wiLFxuICBsYWJlbENvbG9yOiBcImJsYWNrXCIsXG4gIGxhYmVsRm9udFNpemU6IFwiMTJweFwiLFxuICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gIHRpdGxlRm9udFNpemU6IFwiMTRweFwiLFxuICBibG9ja1N0cm9rZUNvbG9yOiBcImJsYWNrXCIsXG4gIGJsb2NrU3Ryb2tlV2lkdGg6IFwiMVwiLFxuICBibG9ja0ZpbGxDb2xvcjogXCIjZWZlZmVmXCJcbn07XG52YXIgc3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeyBwYWNrZXQgfSA9IHt9KSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjbGVhbkFuZE1lcmdlKGRlZmF1bHRQYWNrZXRTdHlsZU9wdGlvbnMsIHBhY2tldCk7XG4gIHJldHVybiBgXG5cdC5wYWNrZXRCeXRlIHtcblx0XHRmb250LXNpemU6ICR7b3B0aW9ucy5ieXRlRm9udFNpemV9O1xuXHR9XG5cdC5wYWNrZXRCeXRlLnN0YXJ0IHtcblx0XHRmaWxsOiAke29wdGlvbnMuc3RhcnRCeXRlQ29sb3J9O1xuXHR9XG5cdC5wYWNrZXRCeXRlLmVuZCB7XG5cdFx0ZmlsbDogJHtvcHRpb25zLmVuZEJ5dGVDb2xvcn07XG5cdH1cblx0LnBhY2tldExhYmVsIHtcblx0XHRmaWxsOiAke29wdGlvbnMubGFiZWxDb2xvcn07XG5cdFx0Zm9udC1zaXplOiAke29wdGlvbnMubGFiZWxGb250U2l6ZX07XG5cdH1cblx0LnBhY2tldFRpdGxlIHtcblx0XHRmaWxsOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG5cdFx0Zm9udC1zaXplOiAke29wdGlvbnMudGl0bGVGb250U2l6ZX07XG5cdH1cblx0LnBhY2tldEJsb2NrIHtcblx0XHRzdHJva2U6ICR7b3B0aW9ucy5ibG9ja1N0cm9rZUNvbG9yfTtcblx0XHRzdHJva2Utd2lkdGg6ICR7b3B0aW9ucy5ibG9ja1N0cm9rZVdpZHRofTtcblx0XHRmaWxsOiAke29wdGlvbnMuYmxvY2tGaWxsQ29sb3J9O1xuXHR9XG5cdGA7XG59LCBcInN0eWxlc1wiKTtcblxuLy8gc3JjL2RpYWdyYW1zL3BhY2tldC9kaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlc1xufTtcbmV4cG9ydCB7XG4gIGRpYWdyYW1cbn07XG4iLAogICAgImltcG9ydCB7XG4gIGluc2VydEVkZ2UsXG4gIGluc2VydEVkZ2VMYWJlbCxcbiAgbWFya2Vyc19kZWZhdWx0LFxuICBwb3NpdGlvbkVkZ2VMYWJlbFxufSBmcm9tIFwiLi9jaHVuay1NS0FJRktXNS5tanNcIjtcbmltcG9ydCB7XG4gIGluc2VydE5vZGUsXG4gIHBvc2l0aW9uTm9kZVxufSBmcm9tIFwiLi9jaHVuay1HV0hNRERIQi5tanNcIjtcbmltcG9ydCBcIi4vY2h1bmstMjNBVE1aWFYubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLVpJNlYyVUUyLm1qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0U3R5bGVzRnJvbUFycmF5XG59IGZyb20gXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgX19uYW1lLFxuICBjbGVhcixcbiAgY29tbW9uX2RlZmF1bHQsXG4gIGNvbmZpZ3VyZVN2Z1NpemUsXG4gIGdldENvbmZpZyxcbiAgZ2V0Q29uZmlnMixcbiAgbG9nXG59IGZyb20gXCIuL2NodW5rLUlJS01RTElDLm1qc1wiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svcGFyc2VyL2Jsb2NrLmppc29uXG52YXIgcGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihrLCB2LCBvMiwgbCkge1xuICAgIGZvciAobzIgPSBvMiB8fCB7fSwgbCA9IGsubGVuZ3RoOyBsLS07IG8yW2tbbF1dID0gdikgO1xuICAgIHJldHVybiBvMjtcbiAgfSwgXCJvXCIpLCAkVjAgPSBbMSwgN10sICRWMSA9IFsxLCAxM10sICRWMiA9IFsxLCAxNF0sICRWMyA9IFsxLCAxNV0sICRWNCA9IFsxLCAxOV0sICRWNSA9IFsxLCAxNl0sICRWNiA9IFsxLCAxN10sICRWNyA9IFsxLCAxOF0sICRWOCA9IFs4LCAzMF0sICRWOSA9IFs4LCAyMSwgMjgsIDI5LCAzMCwgMzEsIDMyLCA0MCwgNDQsIDQ3XSwgJFZhID0gWzEsIDIzXSwgJFZiID0gWzEsIDI0XSwgJFZjID0gWzgsIDE1LCAxNiwgMjEsIDI4LCAyOSwgMzAsIDMxLCAzMiwgNDAsIDQ0LCA0N10sICRWZCA9IFs4LCAxNSwgMTYsIDIxLCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCA0MCwgNDQsIDQ3XSwgJFZlID0gWzEsIDQ5XTtcbiAgdmFyIHBhcnNlcjIgPSB7XG4gICAgdHJhY2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdHJhY2UoKSB7XG4gICAgfSwgXCJ0cmFjZVwiKSxcbiAgICB5eToge30sXG4gICAgc3ltYm9sc186IHsgXCJlcnJvclwiOiAyLCBcInNwYWNlTGluZXNcIjogMywgXCJTUEFDRUxJTkVcIjogNCwgXCJOTFwiOiA1LCBcInNlcGFyYXRvclwiOiA2LCBcIlNQQUNFXCI6IDcsIFwiRU9GXCI6IDgsIFwic3RhcnRcIjogOSwgXCJCTE9DS19ESUFHUkFNX0tFWVwiOiAxMCwgXCJkb2N1bWVudFwiOiAxMSwgXCJzdG9wXCI6IDEyLCBcInN0YXRlbWVudFwiOiAxMywgXCJsaW5rXCI6IDE0LCBcIkxJTktcIjogMTUsIFwiU1RBUlRfTElOS1wiOiAxNiwgXCJMSU5LX0xBQkVMXCI6IDE3LCBcIlNUUlwiOiAxOCwgXCJub2RlU3RhdGVtZW50XCI6IDE5LCBcImNvbHVtbnNTdGF0ZW1lbnRcIjogMjAsIFwiU1BBQ0VfQkxPQ0tcIjogMjEsIFwiYmxvY2tTdGF0ZW1lbnRcIjogMjIsIFwiY2xhc3NEZWZTdGF0ZW1lbnRcIjogMjMsIFwiY3NzQ2xhc3NTdGF0ZW1lbnRcIjogMjQsIFwic3R5bGVTdGF0ZW1lbnRcIjogMjUsIFwibm9kZVwiOiAyNiwgXCJTSVpFXCI6IDI3LCBcIkNPTFVNTlNcIjogMjgsIFwiaWQtYmxvY2tcIjogMjksIFwiZW5kXCI6IDMwLCBcImJsb2NrXCI6IDMxLCBcIk5PREVfSURcIjogMzIsIFwibm9kZVNoYXBlTkxhYmVsXCI6IDMzLCBcImRpckxpc3RcIjogMzQsIFwiRElSXCI6IDM1LCBcIk5PREVfRFNUQVJUXCI6IDM2LCBcIk5PREVfREVORFwiOiAzNywgXCJCTE9DS19BUlJPV19TVEFSVFwiOiAzOCwgXCJCTE9DS19BUlJPV19FTkRcIjogMzksIFwiY2xhc3NEZWZcIjogNDAsIFwiQ0xBU1NERUZfSURcIjogNDEsIFwiQ0xBU1NERUZfU1RZTEVPUFRTXCI6IDQyLCBcIkRFRkFVTFRcIjogNDMsIFwiY2xhc3NcIjogNDQsIFwiQ0xBU1NFTlRJVFlfSURTXCI6IDQ1LCBcIlNUWUxFQ0xBU1NcIjogNDYsIFwic3R5bGVcIjogNDcsIFwiU1RZTEVfRU5USVRZX0lEU1wiOiA0OCwgXCJTVFlMRV9ERUZJTklUSU9OX0RBVEFcIjogNDksIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgIHRlcm1pbmFsc186IHsgMjogXCJlcnJvclwiLCA0OiBcIlNQQUNFTElORVwiLCA1OiBcIk5MXCIsIDc6IFwiU1BBQ0VcIiwgODogXCJFT0ZcIiwgMTA6IFwiQkxPQ0tfRElBR1JBTV9LRVlcIiwgMTU6IFwiTElOS1wiLCAxNjogXCJTVEFSVF9MSU5LXCIsIDE3OiBcIkxJTktfTEFCRUxcIiwgMTg6IFwiU1RSXCIsIDIxOiBcIlNQQUNFX0JMT0NLXCIsIDI3OiBcIlNJWkVcIiwgMjg6IFwiQ09MVU1OU1wiLCAyOTogXCJpZC1ibG9ja1wiLCAzMDogXCJlbmRcIiwgMzE6IFwiYmxvY2tcIiwgMzI6IFwiTk9ERV9JRFwiLCAzNTogXCJESVJcIiwgMzY6IFwiTk9ERV9EU1RBUlRcIiwgMzc6IFwiTk9ERV9ERU5EXCIsIDM4OiBcIkJMT0NLX0FSUk9XX1NUQVJUXCIsIDM5OiBcIkJMT0NLX0FSUk9XX0VORFwiLCA0MDogXCJjbGFzc0RlZlwiLCA0MTogXCJDTEFTU0RFRl9JRFwiLCA0MjogXCJDTEFTU0RFRl9TVFlMRU9QVFNcIiwgNDM6IFwiREVGQVVMVFwiLCA0NDogXCJjbGFzc1wiLCA0NTogXCJDTEFTU0VOVElUWV9JRFNcIiwgNDY6IFwiU1RZTEVDTEFTU1wiLCA0NzogXCJzdHlsZVwiLCA0ODogXCJTVFlMRV9FTlRJVFlfSURTXCIsIDQ5OiBcIlNUWUxFX0RFRklOSVRJT05fREFUQVwiIH0sXG4gICAgcHJvZHVjdGlvbnNfOiBbMCwgWzMsIDFdLCBbMywgMl0sIFszLCAyXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzksIDNdLCBbMTIsIDFdLCBbMTIsIDFdLCBbMTIsIDJdLCBbMTIsIDJdLCBbMTEsIDFdLCBbMTEsIDJdLCBbMTQsIDFdLCBbMTQsIDRdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTMsIDFdLCBbMTksIDNdLCBbMTksIDJdLCBbMTksIDFdLCBbMjAsIDFdLCBbMjIsIDRdLCBbMjIsIDNdLCBbMjYsIDFdLCBbMjYsIDJdLCBbMzQsIDFdLCBbMzQsIDJdLCBbMzMsIDNdLCBbMzMsIDRdLCBbMjMsIDNdLCBbMjMsIDNdLCBbMjQsIDNdLCBbMjUsIDNdXSxcbiAgICBwZXJmb3JtQWN0aW9uOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcbiAgICAgIHZhciAkMCA9ICQkLmxlbmd0aCAtIDE7XG4gICAgICBzd2l0Y2ggKHl5c3RhdGUpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogc2VwYXJhdG9yIChOTCkgXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBzZXBhcmF0b3IgKFNwYWNlKSBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IGhpZXJhcmNoeTogXCIsICQkWyQwIC0gMV0pO1xuICAgICAgICAgIHl5LnNldEhpZXJhcmNoeSgkJFskMCAtIDFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiU3RvcCBOTCBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlN0b3AgRU9GIFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlN0b3AgTkwyIFwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlN0b3AgRU9GMiBcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBzdGF0ZW1lbnQ6IFwiLCAkJFskMF0pO1xuICAgICAgICAgIHR5cGVvZiAkJFskMF0ubGVuZ3RoID09PSBcIm51bWJlclwiID8gdGhpcy4kID0gJCRbJDBdIDogdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBzdGF0ZW1lbnQgIzI6IFwiLCAkJFskMCAtIDFdKTtcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXV0uY29uY2F0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBsaW5rOiBcIiwgJCRbJDBdLCB5eXRleHQpO1xuICAgICAgICAgIHRoaXMuJCA9IHsgZWRnZVR5cGVTdHI6ICQkWyQwXSwgbGFiZWw6IFwiXCIgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IExBQkVMIGxpbms6IFwiLCAkJFskMCAtIDNdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgZWRnZVR5cGVTdHI6ICQkWyQwXSwgbGFiZWw6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBjb25zdCBudW0gPSBwYXJzZUludCgkJFskMF0pO1xuICAgICAgICAgIGNvbnN0IHNwYWNlSWQgPSB5eS5nZW5lcmF0ZUlkKCk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogc3BhY2VJZCwgdHlwZTogXCJzcGFjZVwiLCBsYWJlbDogXCJcIiwgd2lkdGg6IG51bSwgY2hpbGRyZW46IFtdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiAobm9kZVN0YXRlbWVudCBsaW5rIG5vZGUpIFwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0sIFwiIHR5cGVzdHI6IFwiLCAkJFskMCAtIDFdLmVkZ2VUeXBlU3RyKTtcbiAgICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHl5LmVkZ2VTdHJUb0VkZ2VEYXRhKCQkWyQwIC0gMV0uZWRnZVR5cGVTdHIpO1xuICAgICAgICAgIHRoaXMuJCA9IFtcbiAgICAgICAgICAgIHsgaWQ6ICQkWyQwIC0gMl0uaWQsIGxhYmVsOiAkJFskMCAtIDJdLmxhYmVsLCB0eXBlOiAkJFskMCAtIDJdLnR5cGUsIGRpcmVjdGlvbnM6ICQkWyQwIC0gMl0uZGlyZWN0aW9ucyB9LFxuICAgICAgICAgICAgeyBpZDogJCRbJDAgLSAyXS5pZCArIFwiLVwiICsgJCRbJDBdLmlkLCBzdGFydDogJCRbJDAgLSAyXS5pZCwgZW5kOiAkJFskMF0uaWQsIGxhYmVsOiAkJFskMCAtIDFdLmxhYmVsLCB0eXBlOiBcImVkZ2VcIiwgZGlyZWN0aW9uczogJCRbJDBdLmRpcmVjdGlvbnMsIGFycm93VHlwZUVuZDogZWRnZURhdGEsIGFycm93VHlwZVN0YXJ0OiBcImFycm93X29wZW5cIiB9LFxuICAgICAgICAgICAgeyBpZDogJCRbJDBdLmlkLCBsYWJlbDogJCRbJDBdLmxhYmVsLCB0eXBlOiB5eS50eXBlU3RyMlR5cGUoJCRbJDBdLnR5cGVTdHIpLCBkaXJlY3Rpb25zOiAkJFskMF0uZGlyZWN0aW9ucyB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgXCIsICQkWyQwIC0gMV0sICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDAgLSAxXS5pZCwgbGFiZWw6ICQkWyQwIC0gMV0ubGFiZWwsIHR5cGU6IHl5LnR5cGVTdHIyVHlwZSgkJFskMCAtIDFdLnR5cGVTdHIpLCBkaXJlY3Rpb25zOiAkJFskMCAtIDFdLmRpcmVjdGlvbnMsIHdpZHRoSW5Db2x1bW5zOiBwYXJzZUludCgkJFskMF0sIDEwKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogbm9kZVN0YXRlbWVudCAobm9kZSkgXCIsICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0geyBpZDogJCRbJDBdLmlkLCBsYWJlbDogJCRbJDBdLmxhYmVsLCB0eXBlOiB5eS50eXBlU3RyMlR5cGUoJCRbJDBdLnR5cGVTdHIpLCBkaXJlY3Rpb25zOiAkJFskMF0uZGlyZWN0aW9ucywgd2lkdGhJbkNvbHVtbnM6IDEgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkFQQTEyM1wiLCB0aGlzID8gdGhpcyA6IFwibmFcIik7XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJDT0xVTU5TOiBcIiwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiY29sdW1uLXNldHRpbmdcIiwgY29sdW1uczogJCRbJDBdID09PSBcImF1dG9cIiA/IC0xIDogcGFyc2VJbnQoJCRbJDBdKSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogaWQtYmxvY2sgc3RhdGVtZW50IDogXCIsICQkWyQwIC0gMl0sICQkWyQwIC0gMV0pO1xuICAgICAgICAgIGNvbnN0IGlkMiA9IHl5LmdlbmVyYXRlSWQoKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IC4uLiQkWyQwIC0gMl0sIHR5cGU6IFwiY29tcG9zaXRlXCIsIGNoaWxkcmVuOiAkJFskMCAtIDFdIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBibG9ja1N0YXRlbWVudCA6IFwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIGNvbnN0IGlkID0geXkuZ2VuZXJhdGVJZCgpO1xuICAgICAgICAgIHRoaXMuJCA9IHsgaWQsIHR5cGU6IFwiY29tcG9zaXRlXCIsIGxhYmVsOiBcIlwiLCBjaGlsZHJlbjogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogbm9kZSAoTk9ERV9JRCBzZXBhcmF0b3IpOiBcIiwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSB7IGlkOiAkJFskMF0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6IFwiLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgaWQ6ICQkWyQwIC0gMV0sIGxhYmVsOiAkJFskMF0ubGFiZWwsIHR5cGVTdHI6ICQkWyQwXS50eXBlU3RyLCBkaXJlY3Rpb25zOiAkJFskMF0uZGlyZWN0aW9ucyB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiUnVsZTogZGlyTGlzdDogXCIsICQkWyQwXSk7XG4gICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBkaXJMaXN0OiBcIiwgJCRbJDAgLSAxXSwgJCRbJDBdKTtcbiAgICAgICAgICB0aGlzLiQgPSBbJCRbJDAgLSAxXV0uY29uY2F0KCQkWyQwXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJSdWxlOiBub2RlU2hhcGVOTGFiZWw6IFwiLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZVN0cjogJCRbJDAgLSAyXSArICQkWyQwXSwgbGFiZWw6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogXCIsICQkWyQwIC0gM10sICQkWyQwIC0gMl0sIFwiICMzOlwiLCAkJFskMCAtIDFdLCAkJFskMF0pO1xuICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZVN0cjogJCRbJDAgLSAzXSArICQkWyQwXSwgbGFiZWw6ICQkWyQwIC0gMl0sIGRpcmVjdGlvbnM6ICQkWyQwIC0gMV0gfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiY2xhc3NEZWZcIiwgaWQ6ICQkWyQwIC0gMV0udHJpbSgpLCBjc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYXBwbHlDbGFzc1wiLCBpZDogJCRbJDAgLSAxXS50cmltKCksIHN0eWxlQ2xhc3M6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6IFwiYXBwbHlTdHlsZXNcIiwgaWQ6ICQkWyQwIC0gMV0udHJpbSgpLCBzdHlsZXNTdHI6ICQkWyQwXS50cmltKCkgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LCBcImFub255bW91c1wiKSxcbiAgICB0YWJsZTogW3sgOTogMSwgMTA6IFsxLCAyXSB9LCB7IDE6IFszXSB9LCB7IDExOiAzLCAxMzogNCwgMTk6IDUsIDIwOiA2LCAyMTogJFYwLCAyMjogOCwgMjM6IDksIDI0OiAxMCwgMjU6IDExLCAyNjogMTIsIDI4OiAkVjEsIDI5OiAkVjIsIDMxOiAkVjMsIDMyOiAkVjQsIDQwOiAkVjUsIDQ0OiAkVjYsIDQ3OiAkVjcgfSwgeyA4OiBbMSwgMjBdIH0sIG8oJFY4LCBbMiwgMTJdLCB7IDEzOiA0LCAxOTogNSwgMjA6IDYsIDIyOiA4LCAyMzogOSwgMjQ6IDEwLCAyNTogMTEsIDI2OiAxMiwgMTE6IDIxLCAyMTogJFYwLCAyODogJFYxLCAyOTogJFYyLCAzMTogJFYzLCAzMjogJFY0LCA0MDogJFY1LCA0NDogJFY2LCA0NzogJFY3IH0pLCBvKCRWOSwgWzIsIDE2XSwgeyAxNDogMjIsIDE1OiAkVmEsIDE2OiAkVmIgfSksIG8oJFY5LCBbMiwgMTddKSwgbygkVjksIFsyLCAxOF0pLCBvKCRWOSwgWzIsIDE5XSksIG8oJFY5LCBbMiwgMjBdKSwgbygkVjksIFsyLCAyMV0pLCBvKCRWOSwgWzIsIDIyXSksIG8oJFZjLCBbMiwgMjVdLCB7IDI3OiBbMSwgMjVdIH0pLCBvKCRWOSwgWzIsIDI2XSksIHsgMTk6IDI2LCAyNjogMTIsIDMyOiAkVjQgfSwgeyAxMTogMjcsIDEzOiA0LCAxOTogNSwgMjA6IDYsIDIxOiAkVjAsIDIyOiA4LCAyMzogOSwgMjQ6IDEwLCAyNTogMTEsIDI2OiAxMiwgMjg6ICRWMSwgMjk6ICRWMiwgMzE6ICRWMywgMzI6ICRWNCwgNDA6ICRWNSwgNDQ6ICRWNiwgNDc6ICRWNyB9LCB7IDQxOiBbMSwgMjhdLCA0MzogWzEsIDI5XSB9LCB7IDQ1OiBbMSwgMzBdIH0sIHsgNDg6IFsxLCAzMV0gfSwgbygkVmQsIFsyLCAyOV0sIHsgMzM6IDMyLCAzNjogWzEsIDMzXSwgMzg6IFsxLCAzNF0gfSksIHsgMTogWzIsIDddIH0sIG8oJFY4LCBbMiwgMTNdKSwgeyAyNjogMzUsIDMyOiAkVjQgfSwgeyAzMjogWzIsIDE0XSB9LCB7IDE3OiBbMSwgMzZdIH0sIG8oJFZjLCBbMiwgMjRdKSwgeyAxMTogMzcsIDEzOiA0LCAxNDogMjIsIDE1OiAkVmEsIDE2OiAkVmIsIDE5OiA1LCAyMDogNiwgMjE6ICRWMCwgMjI6IDgsIDIzOiA5LCAyNDogMTAsIDI1OiAxMSwgMjY6IDEyLCAyODogJFYxLCAyOTogJFYyLCAzMTogJFYzLCAzMjogJFY0LCA0MDogJFY1LCA0NDogJFY2LCA0NzogJFY3IH0sIHsgMzA6IFsxLCAzOF0gfSwgeyA0MjogWzEsIDM5XSB9LCB7IDQyOiBbMSwgNDBdIH0sIHsgNDY6IFsxLCA0MV0gfSwgeyA0OTogWzEsIDQyXSB9LCBvKCRWZCwgWzIsIDMwXSksIHsgMTg6IFsxLCA0M10gfSwgeyAxODogWzEsIDQ0XSB9LCBvKCRWYywgWzIsIDIzXSksIHsgMTg6IFsxLCA0NV0gfSwgeyAzMDogWzEsIDQ2XSB9LCBvKCRWOSwgWzIsIDI4XSksIG8oJFY5LCBbMiwgMzVdKSwgbygkVjksIFsyLCAzNl0pLCBvKCRWOSwgWzIsIDM3XSksIG8oJFY5LCBbMiwgMzhdKSwgeyAzNzogWzEsIDQ3XSB9LCB7IDM0OiA0OCwgMzU6ICRWZSB9LCB7IDE1OiBbMSwgNTBdIH0sIG8oJFY5LCBbMiwgMjddKSwgbygkVmQsIFsyLCAzM10pLCB7IDM5OiBbMSwgNTFdIH0sIHsgMzQ6IDUyLCAzNTogJFZlLCAzOTogWzIsIDMxXSB9LCB7IDMyOiBbMiwgMTVdIH0sIG8oJFZkLCBbMiwgMzRdKSwgeyAzOTogWzIsIDMyXSB9XSxcbiAgICBkZWZhdWx0QWN0aW9uczogeyAyMDogWzIsIDddLCAyMzogWzIsIDE0XSwgNTA6IFsyLCAxNV0sIDUyOiBbMiwgMzJdIH0sXG4gICAgcGFyc2VFcnJvcjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKHN0cik7XG4gICAgICAgIGVycm9yLmhhc2ggPSBoYXNoO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgcGFyc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgICB2YXIgYXJncyA9IGxzdGFjay5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICB2YXIgbGV4ZXIyID0gT2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKTtcbiAgICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgICBmb3IgKHZhciBrIGluIHRoaXMueXkpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCBrKSkge1xuICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV4ZXIyLnNldElucHV0KGlucHV0LCBzaGFyZWRTdGF0ZS55eSk7XG4gICAgICBzaGFyZWRTdGF0ZS55eS5sZXhlciA9IGxleGVyMjtcbiAgICAgIHNoYXJlZFN0YXRlLnl5LnBhcnNlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIGxleGVyMi55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXhlcjIueXlsbG9jID0ge307XG4gICAgICB9XG4gICAgICB2YXIgeXlsb2MgPSBsZXhlcjIueXlsbG9jO1xuICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgdmFyIHJhbmdlcyA9IGxleGVyMi5vcHRpb25zICYmIGxleGVyMi5vcHRpb25zLnJhbmdlcztcbiAgICAgIGlmICh0eXBlb2Ygc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHtcbiAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47XG4gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuO1xuICAgICAgfVxuICAgICAgX19uYW1lKHBvcFN0YWNrLCBcInBvcFN0YWNrXCIpO1xuICAgICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gdHN0YWNrLnBvcCgpIHx8IGxleGVyMi5sZXgoKSB8fCBFT0Y7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAodG9rZW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgdHN0YWNrID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IHRzdGFjay5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgICBfX25hbWUobGV4LCBcImxleFwiKTtcbiAgICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICBleHBlY3RlZCA9IFtdO1xuICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV4ZXIyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIGxleGVyMi5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOiBVbmV4cGVjdGVkIFwiICsgKHN5bWJvbCA9PSBFT0YgPyBcImVuZCBvZiBpbnB1dFwiIDogXCInXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgdGV4dDogbGV4ZXIyLm1hdGNoLFxuICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgIGxpbmU6IGxleGVyMi55eWxpbmVubyxcbiAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlcjIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKGxleGVyMi55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIyLnl5bGVuZztcbiAgICAgICAgICAgICAgeXl0ZXh0ID0gbGV4ZXIyLnl5dGV4dDtcbiAgICAgICAgICAgICAgeXlsaW5lbm8gPSBsZXhlcjIueXlsaW5lbm87XG4gICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIyLnl5bGxvYztcbiAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVjb3ZlcmluZy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgZmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyYW5nZXMpIHtcbiAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbXG4gICAgICAgICAgICAgICAgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSxcbiAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHl5dmFsLCBbXG4gICAgICAgICAgICAgIHl5dGV4dCxcbiAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICB5eWxpbmVubyxcbiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUueXksXG4gICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgdnN0YWNrLFxuICAgICAgICAgICAgICBsc3RhY2tcbiAgICAgICAgICAgIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJwYXJzZVwiKVxuICB9O1xuICB2YXIgbGV4ZXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxleGVyMiA9IHtcbiAgICAgIEVPRjogMSxcbiAgICAgIHBhcnNlRXJyb3I6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgICB9LCBcInBhcnNlRXJyb3JcIiksXG4gICAgICAvLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuICAgICAgc2V0SW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oaW5wdXQsIHl5KSB7XG4gICAgICAgIHRoaXMueXkgPSB5eSB8fCB0aGlzLnl5IHx8IHt9O1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fYmFja3RyYWNrID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sgPSBbXCJJTklUSUFMXCJdO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICBmaXJzdF9saW5lOiAxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogMCxcbiAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgbGFzdF9jb2x1bW46IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSwgXCJzZXRJbnB1dFwiKSxcbiAgICAgIC8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG4gICAgICBpbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICAgIH0sIFwiaW5wdXRcIiksXG4gICAgICAvLyB1bnNoaWZ0cyBvbmUgY2hhciAob3IgYSBzdHJpbmcpIGludG8gdGhlIGlucHV0XG4gICAgICB1bnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbik7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInVucHV0XCIpLFxuICAgICAgLy8gV2hlbiBjYWxsZWQgZnJvbSBhY3Rpb24sIGNhY2hlcyBtYXRjaGVkIHRleHQgYW5kIGFwcGVuZHMgaXQgb24gbmV4dCBhY3Rpb25cbiAgICAgIG1vcmU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sIFwibW9yZVwiKSxcbiAgICAgIC8vIFdoZW4gY2FsbGVkIGZyb20gYWN0aW9uLCBzaWduYWxzIHRoZSBsZXhlciB0aGF0IHRoaXMgcnVsZSBmYWlscyB0byBtYXRjaCB0aGUgaW5wdXQsIHNvIHRoZSBuZXh0IG1hdGNoaW5nIHJ1bGUgKHJlZ2V4KSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICByZWplY3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKSB7XG4gICAgICAgICAgdGhpcy5fYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuXCIgKyB0aGlzLnNob3dQb3NpdGlvbigpLCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgICAgICBsaW5lOiB0aGlzLnl5bGluZW5vXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LCBcInJlamVjdFwiKSxcbiAgICAgIC8vIHJldGFpbiBmaXJzdCBuIGNoYXJhY3RlcnMgb2YgdGhlIG1hdGNoXG4gICAgICBsZXNzOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICAgIH0sIFwibGVzc1wiKSxcbiAgICAgIC8vIGRpc3BsYXlzIGFscmVhZHkgbWF0Y2hlZCBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHBhc3RJbnB1dDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgICAgfSwgXCJwYXN0SW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB1cGNvbWluZyBpbnB1dCwgaS5lLiBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHVwY29taW5nSW5wdXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHtcbiAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0Lmxlbmd0aCA+IDIwID8gXCIuLi5cIiA6IFwiXCIpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICB9LCBcInVwY29taW5nSW5wdXRcIiksXG4gICAgICAvLyBkaXNwbGF5cyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIHdoZXJlIHRoZSBsZXhpbmcgZXJyb3Igb2NjdXJyZWQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAgICBzaG93UG9zaXRpb246IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpO1xuICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSkuam9pbihcIi1cIik7XG4gICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICB9LCBcInNob3dQb3NpdGlvblwiKSxcbiAgICAgIC8vIHRlc3QgdGhlIGxleGVkIHRva2VuOiByZXR1cm4gRkFMU0Ugd2hlbiBub3QgYSBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiB0b2tlblxuICAgICAgdGVzdF9tYXRjaDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihtYXRjaCwgaW5kZXhlZF9ydWxlKSB7XG4gICAgICAgIHZhciB0b2tlbiwgbGluZXMsIGJhY2t1cDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICB5eWxpbmVubzogdGhpcy55eWxpbmVubyxcbiAgICAgICAgICAgIHl5bGxvYzoge1xuICAgICAgICAgICAgICBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMubGFzdF9saW5lLFxuICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeXl0ZXh0OiB0aGlzLnl5dGV4dCxcbiAgICAgICAgICAgIG1hdGNoOiB0aGlzLm1hdGNoLFxuICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgbWF0Y2hlZDogdGhpcy5tYXRjaGVkLFxuICAgICAgICAgICAgeXlsZW5nOiB0aGlzLnl5bGVuZyxcbiAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICBfbW9yZTogdGhpcy5fbW9yZSxcbiAgICAgICAgICAgIF9pbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgIGNvbmRpdGlvblN0YWNrOiB0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLFxuICAgICAgICAgICAgZG9uZTogdGhpcy5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgYmFja3VwLnl5bGxvYy5yYW5nZSA9IHRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55eWxsb2MgPSB7XG4gICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTtcbiAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgIGZvciAodmFyIGsgaW4gYmFja3VwKSB7XG4gICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSwgXCJ0ZXN0X21hdGNoXCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggaW4gaW5wdXRcbiAgICAgIG5leHQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkge1xuICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBpbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgdGhpcy55eXRleHQgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWF0Y2ggPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRva2VuID0gdGhpcy50ZXN0X21hdGNoKG1hdGNoLCBydWxlc1tpbmRleF0pO1xuICAgICAgICAgIGlmICh0b2tlbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKFwiTGV4aWNhbCBlcnJvciBvbiBsaW5lIFwiICsgKHRoaXMueXlsaW5lbm8gKyAxKSArIFwiLiBVbnJlY29nbml6ZWQgdGV4dC5cXG5cIiArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcbiAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJuZXh0XCIpLFxuICAgICAgLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxuICAgICAgbGV4OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgfVxuICAgICAgfSwgXCJsZXhcIiksXG4gICAgICAvLyBhY3RpdmF0ZXMgYSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIChwdXNoZXMgdGhlIG5ldyBsZXhlciBjb25kaXRpb24gc3RhdGUgb250byB0aGUgY29uZGl0aW9uIHN0YWNrKVxuICAgICAgYmVnaW46IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgfSwgXCJiZWdpblwiKSxcbiAgICAgIC8vIHBvcCB0aGUgcHJldmlvdXNseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9mZiB0aGUgY29uZGl0aW9uIHN0YWNrXG4gICAgICBwb3BTdGF0ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrWzBdO1xuICAgICAgICB9XG4gICAgICB9LCBcInBvcFN0YXRlXCIpLFxuICAgICAgLy8gcHJvZHVjZSB0aGUgbGV4ZXIgcnVsZSBzZXQgd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGVcbiAgICAgIF9jdXJyZW50UnVsZXM6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoICYmIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgICAgfSwgXCJfY3VycmVudFJ1bGVzXCIpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBjdXJyZW50bHkgYWN0aXZlIGxleGVyIGNvbmRpdGlvbiBzdGF0ZTsgd2hlbiBhbiBpbmRleCBhcmd1bWVudCBpcyBwcm92aWRlZCBpdCBwcm9kdWNlcyB0aGUgTi10aCBwcmV2aW91cyBjb25kaXRpb24gc3RhdGUsIGlmIGF2YWlsYWJsZVxuICAgICAgdG9wU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gdG9wU3RhdGUobikge1xuICAgICAgICBuID0gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxIC0gTWF0aC5hYnMobiB8fCAwKTtcbiAgICAgICAgaWYgKG4gPj0gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgICAgfSwgXCJ0b3BTdGF0ZVwiKSxcbiAgICAgIC8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG4gICAgICBwdXNoU3RhdGU6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHVzaFN0YXRlKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmJlZ2luKGNvbmRpdGlvbik7XG4gICAgICB9LCBcInB1c2hTdGF0ZVwiKSxcbiAgICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG4gICAgICBzdGF0ZVN0YWNrU2l6ZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgfSwgXCJzdGF0ZVN0YWNrU2l6ZVwiKSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgcGVyZm9ybUFjdGlvbjogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucywgWVlfU1RBUlQpIHtcbiAgICAgICAgdmFyIFlZU1RBVEUgPSBZWV9TVEFSVDtcbiAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJGb3VuZCBzcGFjZS1ibG9ja1wiKTtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiRm91bmQgbmwtYmxvY2tcIik7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkZvdW5kIHNwYWNlLWJsb2NrXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCIuXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJfXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gMjg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9jb2x1bW5zXFxzKy8sIFwiXCIpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJDT0xVTU5TIChMRVgpXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDI4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgcmV0dXJuIFwiTURfU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwic3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTEVYOiBQT1BQSU5HIFNUUjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMRVg6IFNUUiBlbmQ6XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiU1RSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvc3BhY2VcXDovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiU1BBQ0UgTlVNIChMRVgpXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDIxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIHl5Xy55eXRleHQgPSBcIjFcIjtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiQ09MVU1OUyAoTEVYKVwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAyMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICByZXR1cm4gNDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgcmV0dXJuIFwiTElOS1NUWUxFXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgcmV0dXJuIFwiSU5URVJQT0xBVEVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTREVGXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDQwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NERUZJRFwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIkRFRkFVTFRfQ0xBU1NERUZfSURcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkNMQVNTREVGSURcIik7XG4gICAgICAgICAgICByZXR1cm4gNDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiQ0xBU1NcIik7XG4gICAgICAgICAgICByZXR1cm4gNDQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJDTEFTU19TVFlMRVwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gNDY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJTVFlMRV9TVE1OVFwiKTtcbiAgICAgICAgICAgIHJldHVybiA0NztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIlNUWUxFX0RFRklOSVRJT05cIik7XG4gICAgICAgICAgICByZXR1cm4gNDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIDQ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiYWNjX3RpdGxlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwiYWNjX3RpdGxlX3ZhbHVlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJhY2NfZGVzY3JcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJhY2NfZGVzY3JfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcImFjY19kZXNjcl9tdWx0aWxpbmVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgIHJldHVybiBcImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICByZXR1cm4gMzA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICkpXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgtXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IC0pXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6ICgoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IF1dXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IChcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogXSlcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogL11cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogL11cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogKV1cIik7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTI6XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogKVwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBdPlwiKTtcbiAgICAgICAgICAgIHJldHVybiBcIk5PREVfREVORFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBdXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERU5EXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiAtKVwiKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleGE6ICgtXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4YTogKSlcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiApXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiAoKChcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYwOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiApXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2MTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4YTogKVwiKTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjI6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleGE6IClcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhjOiA+XCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4YTogKFtcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXhhOiApXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzA6XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJOT0RFXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDM2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTk9ERVwiKTtcbiAgICAgICAgICAgIHJldHVybiAzNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleGE6IFtcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIk5PREVcIik7XG4gICAgICAgICAgICByZXR1cm4gMzY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc0OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJCTE9DS19BUlJPV1wiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTEVYIEFSUiBTVEFSVFwiKTtcbiAgICAgICAgICAgIHJldHVybiAzODtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogTk9ERV9JRFwiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogRU9GXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc3OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJtZF9zdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgICAgcmV0dXJuIFwiTk9ERV9ERVNDUlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODE6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogU3RhcnRpbmcgc3RyaW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJpbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMRVggQVJSOiBTdGFydGluZyBzdHJpbmdcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcInN0cmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxFWDogTk9ERV9ERVNDUjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJOT0RFX0RFU0NSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDg0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMRVggUE9QUElOR1wiKTtcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogPT5CQUVcIik7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkFSUk9XX0RJUlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODY6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4IChyaWdodCk6IGRpcjpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4IChsZWZ0KTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODg6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4ICh4KTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgODk6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4ICh5KTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gXCJESVJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9eLFxccyovLCBcIlwiKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4ICh1cCk6XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiRElSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkxOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXixcXHMqLywgXCJcIik7XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleCAoZG93bik6XCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFwiRElSXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgeXlfLnl5dGV4dCA9IFwiXT5cIjtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4IChBUlJPV19ESVIgZW5kKTpcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJCTE9DS19BUlJPV19FTkRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogTElOS1wiLCBcIiNcIiArIHl5Xy55eXRleHQgKyBcIiNcIik7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk0OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDk3OlxuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IFNUQVJUX0xJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZShcIkxMQUJFTFwiKTtcbiAgICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgOTg6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogU1RBUlRfTElOS1wiLCB5eV8ueXl0ZXh0KTtcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwiTExBQkVMXCIpO1xuICAgICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5OTpcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBTVEFSVF9MSU5LXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJMTEFCRUxcIik7XG4gICAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKFwibWRfc3RyaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogU3RhcnRpbmcgc3RyaW5nXCIpO1xuICAgICAgICAgICAgdGhpcy5wdXNoU3RhdGUoXCJzdHJpbmdcIik7XG4gICAgICAgICAgICByZXR1cm4gXCJMSU5LX0xBQkVMXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBMSU5LXCIsIFwiI1wiICsgeXlfLnl5dGV4dCArIFwiI1wiKTtcbiAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTAzOlxuICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgeXkuZ2V0TG9nZ2VyKCkuZGVidWcoXCJMZXg6IExJTktcIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgIHl5LmdldExvZ2dlcigpLmRlYnVnKFwiTGV4OiBMSU5LXCIsIHl5Xy55eXRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDU6XG4gICAgICAgICAgICB5eS5nZXRMb2dnZXIoKS5kZWJ1ZyhcIkxleDogQ09MT05cIiwgeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zbGljZSgxKTtcbiAgICAgICAgICAgIHJldHVybiAyNztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9LCBcImFub255bW91c1wiKSxcbiAgICAgIHJ1bGVzOiBbL14oPzpibG9jay1iZXRhXFxiKS8sIC9eKD86YmxvY2tcXHMrKS8sIC9eKD86YmxvY2tcXG4rKS8sIC9eKD86YmxvY2s6KS8sIC9eKD86W1xcc10rKS8sIC9eKD86W1xcbl0rKS8sIC9eKD86KChcXHUwMDBEXFx1MDAwQSl8KFxcdTAwMEEpKSkvLCAvXig/OmNvbHVtbnNcXHMrYXV0b1xcYikvLCAvXig/OmNvbHVtbnNcXHMrW1xcZF0rKS8sIC9eKD86W1wiXVtgXSkvLCAvXig/OlteYFwiXSspLywgL14oPzpbYF1bXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OltcIl0pLywgL14oPzpbXlwiXSopLywgL14oPzpzcGFjZVs6XVxcZCspLywgL14oPzpzcGFjZVxcYikvLCAvXig/OmRlZmF1bHRcXGIpLywgL14oPzpsaW5rU3R5bGVcXGIpLywgL14oPzppbnRlcnBvbGF0ZVxcYikvLCAvXig/OmNsYXNzRGVmXFxzKykvLCAvXig/OkRFRkFVTFRcXHMrKS8sIC9eKD86XFx3K1xccyspLywgL14oPzpbXlxcbl0qKS8sIC9eKD86Y2xhc3NcXHMrKS8sIC9eKD86KFxcdyspKygoLFxccypcXHcrKSopKS8sIC9eKD86W15cXG5dKikvLCAvXig/OnN0eWxlXFxzKykvLCAvXig/OihcXHcrKSsoKCxcXHMqXFx3KykqKSkvLCAvXig/OlteXFxuXSopLywgL14oPzphY2NUaXRsZVxccyo6XFxzKikvLCAvXig/Oig/IVxcbnx8KSpbXlxcbl0qKS8sIC9eKD86YWNjRGVzY3JcXHMqOlxccyopLywgL14oPzooPyFcXG58fCkqW15cXG5dKikvLCAvXig/OmFjY0Rlc2NyXFxzKlxce1xccyopLywgL14oPzpbXFx9XSkvLCAvXig/OlteXFx9XSopLywgL14oPzplbmRcXGJcXHMqKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86XFwpXFwpXFwpKS8sIC9eKD86W1xcKV1cXCkpLywgL14oPzpcXH1cXH0pLywgL14oPzpcXH0pLywgL14oPzpcXCgtKS8sIC9eKD86LVxcKSkvLCAvXig/OlxcKFxcKCkvLCAvXig/OlxcXVxcXSkvLCAvXig/OlxcKCkvLCAvXig/OlxcXVxcKSkvLCAvXig/OlxcXFxcXF0pLywgL14oPzpcXC9cXF0pLywgL14oPzpcXClcXF0pLywgL14oPzpbXFwpXSkvLCAvXig/OlxcXT4pLywgL14oPzpbXFxdXSkvLCAvXig/Oi1cXCkpLywgL14oPzpcXCgtKS8sIC9eKD86XFwpXFwpKS8sIC9eKD86XFwpKS8sIC9eKD86XFwoXFwoXFwoKS8sIC9eKD86XFwoXFwoKS8sIC9eKD86XFx7XFx7KS8sIC9eKD86XFx7KS8sIC9eKD86PikvLCAvXig/OlxcKFxcWykvLCAvXig/OlxcKCkvLCAvXig/OlxcW1xcWykvLCAvXig/OlxcW1xcfCkvLCAvXig/OlxcW1xcKCkvLCAvXig/OlxcKVxcKVxcKSkvLCAvXig/OlxcW1xcXFwpLywgL14oPzpcXFtcXC8pLywgL14oPzpcXFtcXFxcKS8sIC9eKD86XFxbKS8sIC9eKD86PFxcWykvLCAvXig/OlteXFwoXFxbXFxuXFwtXFwpXFx7XFx9XFxzXFw8XFw+Ol0rKS8sIC9eKD86JCkvLCAvXig/OltcIl1bYF0pLywgL14oPzpbXCJdW2BdKS8sIC9eKD86W15gXCJdKykvLCAvXig/OltgXVtcIl0pLywgL14oPzpbXCJdKS8sIC9eKD86W1wiXSkvLCAvXig/OlteXCJdKykvLCAvXig/OltcIl0pLywgL14oPzpcXF0+XFxzKlxcKCkvLCAvXig/Oiw/XFxzKnJpZ2h0XFxzKikvLCAvXig/Oiw/XFxzKmxlZnRcXHMqKS8sIC9eKD86LD9cXHMqeFxccyopLywgL14oPzosP1xccyp5XFxzKikvLCAvXig/Oiw/XFxzKnVwXFxzKikvLCAvXig/Oiw/XFxzKmRvd25cXHMqKS8sIC9eKD86XFwpXFxzKikvLCAvXig/OlxccypbeG88XT8tLStbLXhvPl1cXHMqKS8sIC9eKD86XFxzKlt4bzxdPz09K1s9eG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/LT9cXC4rLVt4bz5dP1xccyopLywgL14oPzpcXHMqfn5bXFx+XStcXHMqKS8sIC9eKD86XFxzKlt4bzxdPy0tXFxzKikvLCAvXig/OlxccypbeG88XT89PVxccyopLywgL14oPzpcXHMqW3hvPF0/LVxcLlxccyopLywgL14oPzpbXCJdW2BdKS8sIC9eKD86W1wiXSkvLCAvXig/OlxccypbeG88XT8tLStbLXhvPl1cXHMqKS8sIC9eKD86XFxzKlt4bzxdPz09K1s9eG8+XVxccyopLywgL14oPzpcXHMqW3hvPF0/LT9cXC4rLVt4bz5dP1xccyopLywgL14oPzo6XFxkKykvXSxcbiAgICAgIGNvbmRpdGlvbnM6IHsgXCJTVFlMRV9ERUZJTklUSU9OXCI6IHsgXCJydWxlc1wiOiBbMjldLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIlNUWUxFX1NUTU5UXCI6IHsgXCJydWxlc1wiOiBbMjhdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTREVGSURcIjogeyBcInJ1bGVzXCI6IFsyM10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQ0xBU1NERUZcIjogeyBcInJ1bGVzXCI6IFsyMSwgMjJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTX1NUWUxFXCI6IHsgXCJydWxlc1wiOiBbMjZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkNMQVNTXCI6IHsgXCJydWxlc1wiOiBbMjVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIkxMQUJFTFwiOiB7IFwicnVsZXNcIjogWzEwMCwgMTAxLCAxMDIsIDEwMywgMTA0XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJBUlJPV19ESVJcIjogeyBcInJ1bGVzXCI6IFs4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5Ml0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiQkxPQ0tfQVJST1dcIjogeyBcInJ1bGVzXCI6IFs3NywgODIsIDg1XSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJOT0RFXCI6IHsgXCJydWxlc1wiOiBbMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA3OCwgODFdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIm1kX3N0cmluZ1wiOiB7IFwicnVsZXNcIjogWzEwLCAxMSwgNzksIDgwXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJzcGFjZVwiOiB7IFwicnVsZXNcIjogW10sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwic3RyaW5nXCI6IHsgXCJydWxlc1wiOiBbMTMsIDE0LCA4MywgODRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjcl9tdWx0aWxpbmVcIjogeyBcInJ1bGVzXCI6IFszNSwgMzZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImFjY19kZXNjclwiOiB7IFwicnVsZXNcIjogWzMzXSwgXCJpbmNsdXNpdmVcIjogZmFsc2UgfSwgXCJhY2NfdGl0bGVcIjogeyBcInJ1bGVzXCI6IFszMV0sIFwiaW5jbHVzaXZlXCI6IGZhbHNlIH0sIFwiSU5JVElBTFwiOiB7IFwicnVsZXNcIjogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEyLCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyNCwgMjcsIDMwLCAzMiwgMzQsIDM3LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwNV0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9XG4gICAgfTtcbiAgICByZXR1cm4gbGV4ZXIyO1xuICB9KCk7XG4gIHBhcnNlcjIubGV4ZXIgPSBsZXhlcjtcbiAgZnVuY3Rpb24gUGFyc2VyKCkge1xuICAgIHRoaXMueXkgPSB7fTtcbiAgfVxuICBfX25hbWUoUGFyc2VyLCBcIlBhcnNlclwiKTtcbiAgUGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjI7XG4gIHBhcnNlcjIuUGFyc2VyID0gUGFyc2VyO1xuICByZXR1cm4gbmV3IFBhcnNlcigpO1xufSgpO1xucGFyc2VyLnBhcnNlciA9IHBhcnNlcjtcbnZhciBibG9ja19kZWZhdWx0ID0gcGFyc2VyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svYmxvY2tEQi50c1xuaW1wb3J0IGNsb25lIGZyb20gXCJsb2Rhc2gtZXMvY2xvbmUuanNcIjtcbnZhciBibG9ja0RhdGFiYXNlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBlZGdlTGlzdCA9IFtdO1xudmFyIGVkZ2VDb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgQ09MT1JfS0VZV09SRCA9IFwiY29sb3JcIjtcbnZhciBGSUxMX0tFWVdPUkQgPSBcImZpbGxcIjtcbnZhciBCR19GSUxMID0gXCJiZ0ZpbGxcIjtcbnZhciBTVFlMRUNMQVNTX1NFUCA9IFwiLFwiO1xudmFyIGNvbmZpZyA9IGdldENvbmZpZzIoKTtcbnZhciBjbGFzc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBzYW5pdGl6ZVRleHQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IGNvbW1vbl9kZWZhdWx0LnNhbml0aXplVGV4dCh0eHQsIGNvbmZpZyksIFwic2FuaXRpemVUZXh0XCIpO1xudmFyIGFkZFN0eWxlQ2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGlkLCBzdHlsZUF0dHJpYnV0ZXMgPSBcIlwiKSB7XG4gIGxldCBmb3VuZENsYXNzID0gY2xhc3Nlcy5nZXQoaWQpO1xuICBpZiAoIWZvdW5kQ2xhc3MpIHtcbiAgICBmb3VuZENsYXNzID0geyBpZCwgc3R5bGVzOiBbXSwgdGV4dFN0eWxlczogW10gfTtcbiAgICBjbGFzc2VzLnNldChpZCwgZm91bmRDbGFzcyk7XG4gIH1cbiAgaWYgKHN0eWxlQXR0cmlidXRlcyAhPT0gdm9pZCAwICYmIHN0eWxlQXR0cmlidXRlcyAhPT0gbnVsbCkge1xuICAgIHN0eWxlQXR0cmlidXRlcy5zcGxpdChTVFlMRUNMQVNTX1NFUCkuZm9yRWFjaCgoYXR0cmliKSA9PiB7XG4gICAgICBjb25zdCBmaXhlZEF0dHJpYiA9IGF0dHJpYi5yZXBsYWNlKC8oW147XSopOy8sIFwiJDFcIikudHJpbSgpO1xuICAgICAgaWYgKFJlZ0V4cChDT0xPUl9LRVlXT1JEKS5leGVjKGF0dHJpYikpIHtcbiAgICAgICAgY29uc3QgbmV3U3R5bGUxID0gZml4ZWRBdHRyaWIucmVwbGFjZShGSUxMX0tFWVdPUkQsIEJHX0ZJTEwpO1xuICAgICAgICBjb25zdCBuZXdTdHlsZTIgPSBuZXdTdHlsZTEucmVwbGFjZShDT0xPUl9LRVlXT1JELCBGSUxMX0tFWVdPUkQpO1xuICAgICAgICBmb3VuZENsYXNzLnRleHRTdHlsZXMucHVzaChuZXdTdHlsZTIpO1xuICAgICAgfVxuICAgICAgZm91bmRDbGFzcy5zdHlsZXMucHVzaChmaXhlZEF0dHJpYik7XG4gICAgfSk7XG4gIH1cbn0sIFwiYWRkU3R5bGVDbGFzc1wiKTtcbnZhciBhZGRTdHlsZTJOb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihpZCwgc3R5bGVzID0gXCJcIikge1xuICBjb25zdCBmb3VuZEJsb2NrID0gYmxvY2tEYXRhYmFzZS5nZXQoaWQpO1xuICBpZiAoc3R5bGVzICE9PSB2b2lkIDAgJiYgc3R5bGVzICE9PSBudWxsKSB7XG4gICAgZm91bmRCbG9jay5zdHlsZXMgPSBzdHlsZXMuc3BsaXQoU1RZTEVDTEFTU19TRVApO1xuICB9XG59LCBcImFkZFN0eWxlMk5vZGVcIik7XG52YXIgc2V0Q3NzQ2xhc3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGl0ZW1JZHMsIGNzc0NsYXNzTmFtZSkge1xuICBpdGVtSWRzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7XG4gICAgbGV0IGZvdW5kQmxvY2sgPSBibG9ja0RhdGFiYXNlLmdldChpZCk7XG4gICAgaWYgKGZvdW5kQmxvY2sgPT09IHZvaWQgMCkge1xuICAgICAgY29uc3QgdHJpbW1lZElkID0gaWQudHJpbSgpO1xuICAgICAgZm91bmRCbG9jayA9IHsgaWQ6IHRyaW1tZWRJZCwgdHlwZTogXCJuYVwiLCBjaGlsZHJlbjogW10gfTtcbiAgICAgIGJsb2NrRGF0YWJhc2Uuc2V0KHRyaW1tZWRJZCwgZm91bmRCbG9jayk7XG4gICAgfVxuICAgIGlmICghZm91bmRCbG9jay5jbGFzc2VzKSB7XG4gICAgICBmb3VuZEJsb2NrLmNsYXNzZXMgPSBbXTtcbiAgICB9XG4gICAgZm91bmRCbG9jay5jbGFzc2VzLnB1c2goY3NzQ2xhc3NOYW1lKTtcbiAgfSk7XG59LCBcInNldENzc0NsYXNzXCIpO1xudmFyIHBvcHVsYXRlQmxvY2tEYXRhYmFzZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF9ibG9ja0xpc3QsIHBhcmVudCkgPT4ge1xuICBjb25zdCBibG9ja0xpc3QgPSBfYmxvY2tMaXN0LmZsYXQoKTtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja0xpc3QpIHtcbiAgICBpZiAoYmxvY2subGFiZWwpIHtcbiAgICAgIGJsb2NrLmxhYmVsID0gc2FuaXRpemVUZXh0KGJsb2NrLmxhYmVsKTtcbiAgICB9XG4gICAgaWYgKGJsb2NrLnR5cGUgPT09IFwiY2xhc3NEZWZcIikge1xuICAgICAgYWRkU3R5bGVDbGFzcyhibG9jay5pZCwgYmxvY2suY3NzKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJhcHBseUNsYXNzXCIpIHtcbiAgICAgIHNldENzc0NsYXNzKGJsb2NrLmlkLCBibG9jaz8uc3R5bGVDbGFzcyA/PyBcIlwiKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJhcHBseVN0eWxlc1wiKSB7XG4gICAgICBpZiAoYmxvY2s/LnN0eWxlc1N0cikge1xuICAgICAgICBhZGRTdHlsZTJOb2RlKGJsb2NrLmlkLCBibG9jaz8uc3R5bGVzU3RyKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJjb2x1bW4tc2V0dGluZ1wiKSB7XG4gICAgICBwYXJlbnQuY29sdW1ucyA9IGJsb2NrLmNvbHVtbnMgPz8gLTE7XG4gICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSBcImVkZ2VcIikge1xuICAgICAgY29uc3QgY291bnQgPSAoZWRnZUNvdW50LmdldChibG9jay5pZCkgPz8gMCkgKyAxO1xuICAgICAgZWRnZUNvdW50LnNldChibG9jay5pZCwgY291bnQpO1xuICAgICAgYmxvY2suaWQgPSBjb3VudCArIFwiLVwiICsgYmxvY2suaWQ7XG4gICAgICBlZGdlTGlzdC5wdXNoKGJsb2NrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFibG9jay5sYWJlbCkge1xuICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gXCJjb21wb3NpdGVcIikge1xuICAgICAgICAgIGJsb2NrLmxhYmVsID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBibG9jay5sYWJlbCA9IGJsb2NrLmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBleGlzdGluZ0Jsb2NrID0gYmxvY2tEYXRhYmFzZS5nZXQoYmxvY2suaWQpO1xuICAgICAgaWYgKGV4aXN0aW5nQmxvY2sgPT09IHZvaWQgMCkge1xuICAgICAgICBibG9ja0RhdGFiYXNlLnNldChibG9jay5pZCwgYmxvY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJsb2NrLnR5cGUgIT09IFwibmFcIikge1xuICAgICAgICAgIGV4aXN0aW5nQmxvY2sudHlwZSA9IGJsb2NrLnR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrLmxhYmVsICE9PSBibG9jay5pZCkge1xuICAgICAgICAgIGV4aXN0aW5nQmxvY2subGFiZWwgPSBibG9jay5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgICAgIHBvcHVsYXRlQmxvY2tEYXRhYmFzZShibG9jay5jaGlsZHJlbiwgYmxvY2spO1xuICAgICAgfVxuICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IFwic3BhY2VcIikge1xuICAgICAgICBjb25zdCB3ID0gYmxvY2sud2lkdGggPz8gMTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgICAgICBjb25zdCBuZXdCbG9jayA9IGNsb25lKGJsb2NrKTtcbiAgICAgICAgICBuZXdCbG9jay5pZCA9IG5ld0Jsb2NrLmlkICsgXCItXCIgKyBqO1xuICAgICAgICAgIGJsb2NrRGF0YWJhc2Uuc2V0KG5ld0Jsb2NrLmlkLCBuZXdCbG9jayk7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChuZXdCbG9jayk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdCbG9jayA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYmxvY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwYXJlbnQuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbn0sIFwicG9wdWxhdGVCbG9ja0RhdGFiYXNlXCIpO1xudmFyIGJsb2NrcyA9IFtdO1xudmFyIHJvb3RCbG9jayA9IHsgaWQ6IFwicm9vdFwiLCB0eXBlOiBcImNvbXBvc2l0ZVwiLCBjaGlsZHJlbjogW10sIGNvbHVtbnM6IC0xIH07XG52YXIgY2xlYXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGxvZy5kZWJ1ZyhcIkNsZWFyIGNhbGxlZFwiKTtcbiAgY2xlYXIoKTtcbiAgcm9vdEJsb2NrID0geyBpZDogXCJyb290XCIsIHR5cGU6IFwiY29tcG9zaXRlXCIsIGNoaWxkcmVuOiBbXSwgY29sdW1uczogLTEgfTtcbiAgYmxvY2tEYXRhYmFzZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtbXCJyb290XCIsIHJvb3RCbG9ja11dKTtcbiAgYmxvY2tzID0gW107XG4gIGNsYXNzZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBlZGdlTGlzdCA9IFtdO1xuICBlZGdlQ291bnQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xufSwgXCJjbGVhclwiKTtcbmZ1bmN0aW9uIHR5cGVTdHIyVHlwZSh0eXBlU3RyKSB7XG4gIGxvZy5kZWJ1ZyhcInR5cGVTdHIyVHlwZVwiLCB0eXBlU3RyKTtcbiAgc3dpdGNoICh0eXBlU3RyKSB7XG4gICAgY2FzZSBcIltdXCI6XG4gICAgICByZXR1cm4gXCJzcXVhcmVcIjtcbiAgICBjYXNlIFwiKClcIjpcbiAgICAgIGxvZy5kZWJ1ZyhcIndlIGhhdmUgYSByb3VuZFwiKTtcbiAgICAgIHJldHVybiBcInJvdW5kXCI7XG4gICAgY2FzZSBcIigoKSlcIjpcbiAgICAgIHJldHVybiBcImNpcmNsZVwiO1xuICAgIGNhc2UgXCI+XVwiOlxuICAgICAgcmV0dXJuIFwicmVjdF9sZWZ0X2ludl9hcnJvd1wiO1xuICAgIGNhc2UgXCJ7fVwiOlxuICAgICAgcmV0dXJuIFwiZGlhbW9uZFwiO1xuICAgIGNhc2UgXCJ7e319XCI6XG4gICAgICByZXR1cm4gXCJoZXhhZ29uXCI7XG4gICAgY2FzZSBcIihbXSlcIjpcbiAgICAgIHJldHVybiBcInN0YWRpdW1cIjtcbiAgICBjYXNlIFwiW1tdXVwiOlxuICAgICAgcmV0dXJuIFwic3Vicm91dGluZVwiO1xuICAgIGNhc2UgXCJbKCldXCI6XG4gICAgICByZXR1cm4gXCJjeWxpbmRlclwiO1xuICAgIGNhc2UgXCIoKCgpKSlcIjpcbiAgICAgIHJldHVybiBcImRvdWJsZWNpcmNsZVwiO1xuICAgIGNhc2UgXCJbLy9dXCI6XG4gICAgICByZXR1cm4gXCJsZWFuX3JpZ2h0XCI7XG4gICAgY2FzZSBcIltcXFxcXFxcXF1cIjpcbiAgICAgIHJldHVybiBcImxlYW5fbGVmdFwiO1xuICAgIGNhc2UgXCJbL1xcXFxdXCI6XG4gICAgICByZXR1cm4gXCJ0cmFwZXpvaWRcIjtcbiAgICBjYXNlIFwiW1xcXFwvXVwiOlxuICAgICAgcmV0dXJuIFwiaW52X3RyYXBlem9pZFwiO1xuICAgIGNhc2UgXCI8W10+XCI6XG4gICAgICByZXR1cm4gXCJibG9ja19hcnJvd1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJuYVwiO1xuICB9XG59XG5fX25hbWUodHlwZVN0cjJUeXBlLCBcInR5cGVTdHIyVHlwZVwiKTtcbmZ1bmN0aW9uIGVkZ2VUeXBlU3RyMlR5cGUodHlwZVN0cikge1xuICBsb2cuZGVidWcoXCJ0eXBlU3RyMlR5cGVcIiwgdHlwZVN0cik7XG4gIHN3aXRjaCAodHlwZVN0cikge1xuICAgIGNhc2UgXCI9PVwiOlxuICAgICAgcmV0dXJuIFwidGhpY2tcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwibm9ybWFsXCI7XG4gIH1cbn1cbl9fbmFtZShlZGdlVHlwZVN0cjJUeXBlLCBcImVkZ2VUeXBlU3RyMlR5cGVcIik7XG5mdW5jdGlvbiBlZGdlU3RyVG9FZGdlRGF0YSh0eXBlU3RyKSB7XG4gIHN3aXRjaCAodHlwZVN0ci50cmltKCkpIHtcbiAgICBjYXNlIFwiLS14XCI6XG4gICAgICByZXR1cm4gXCJhcnJvd19jcm9zc1wiO1xuICAgIGNhc2UgXCItLW9cIjpcbiAgICAgIHJldHVybiBcImFycm93X2NpcmNsZVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJhcnJvd19wb2ludFwiO1xuICB9XG59XG5fX25hbWUoZWRnZVN0clRvRWRnZURhdGEsIFwiZWRnZVN0clRvRWRnZURhdGFcIik7XG52YXIgY250ID0gMDtcbnZhciBnZW5lcmF0ZUlkID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIGNudCsrO1xuICByZXR1cm4gXCJpZC1cIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCAxMikgKyBcIi1cIiArIGNudDtcbn0sIFwiZ2VuZXJhdGVJZFwiKTtcbnZhciBzZXRIaWVyYXJjaHkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChibG9jaykgPT4ge1xuICByb290QmxvY2suY2hpbGRyZW4gPSBibG9jaztcbiAgcG9wdWxhdGVCbG9ja0RhdGFiYXNlKGJsb2NrLCByb290QmxvY2spO1xuICBibG9ja3MgPSByb290QmxvY2suY2hpbGRyZW47XG59LCBcInNldEhpZXJhcmNoeVwiKTtcbnZhciBnZXRDb2x1bW5zID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYmxvY2tJZCkgPT4ge1xuICBjb25zdCBibG9jayA9IGJsb2NrRGF0YWJhc2UuZ2V0KGJsb2NrSWQpO1xuICBpZiAoIWJsb2NrKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChibG9jay5jb2x1bW5zKSB7XG4gICAgcmV0dXJuIGJsb2NrLmNvbHVtbnM7XG4gIH1cbiAgaWYgKCFibG9jay5jaGlsZHJlbikge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gYmxvY2suY2hpbGRyZW4ubGVuZ3RoO1xufSwgXCJnZXRDb2x1bW5zXCIpO1xudmFyIGdldEJsb2Nrc0ZsYXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmV0dXJuIFsuLi5ibG9ja0RhdGFiYXNlLnZhbHVlcygpXTtcbn0sIFwiZ2V0QmxvY2tzRmxhdFwiKTtcbnZhciBnZXRCbG9ja3MgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgcmV0dXJuIGJsb2NrcyB8fCBbXTtcbn0sIFwiZ2V0QmxvY2tzXCIpO1xudmFyIGdldEVkZ2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gIHJldHVybiBlZGdlTGlzdDtcbn0sIFwiZ2V0RWRnZXNcIik7XG52YXIgZ2V0QmxvY2sgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4ge1xuICByZXR1cm4gYmxvY2tEYXRhYmFzZS5nZXQoaWQpO1xufSwgXCJnZXRCbG9ja1wiKTtcbnZhciBzZXRCbG9jayA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGJsb2NrKSA9PiB7XG4gIGJsb2NrRGF0YWJhc2Uuc2V0KGJsb2NrLmlkLCBibG9jayk7XG59LCBcInNldEJsb2NrXCIpO1xudmFyIGdldExvZ2dlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gY29uc29sZSwgXCJnZXRMb2dnZXJcIik7XG52YXIgZ2V0Q2xhc3NlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjbGFzc2VzO1xufSwgXCJnZXRDbGFzc2VzXCIpO1xudmFyIGRiID0ge1xuICBnZXRDb25maWc6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gZ2V0Q29uZmlnKCkuYmxvY2ssIFwiZ2V0Q29uZmlnXCIpLFxuICB0eXBlU3RyMlR5cGUsXG4gIGVkZ2VUeXBlU3RyMlR5cGUsXG4gIGVkZ2VTdHJUb0VkZ2VEYXRhLFxuICBnZXRMb2dnZXIsXG4gIGdldEJsb2Nrc0ZsYXQsXG4gIGdldEJsb2NrcyxcbiAgZ2V0RWRnZXMsXG4gIHNldEhpZXJhcmNoeSxcbiAgZ2V0QmxvY2ssXG4gIHNldEJsb2NrLFxuICBnZXRDb2x1bW5zLFxuICBnZXRDbGFzc2VzLFxuICBjbGVhcjogY2xlYXIyLFxuICBnZW5lcmF0ZUlkXG59O1xudmFyIGJsb2NrREJfZGVmYXVsdCA9IGRiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svc3R5bGVzLnRzXG5pbXBvcnQgKiBhcyBraHJvbWEgZnJvbSBcImtocm9tYVwiO1xudmFyIGZhZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb2xvciwgb3BhY2l0eSkgPT4ge1xuICBjb25zdCBjaGFubmVsMiA9IGtocm9tYS5jaGFubmVsO1xuICBjb25zdCByID0gY2hhbm5lbDIoY29sb3IsIFwiclwiKTtcbiAgY29uc3QgZyA9IGNoYW5uZWwyKGNvbG9yLCBcImdcIik7XG4gIGNvbnN0IGIgPSBjaGFubmVsMihjb2xvciwgXCJiXCIpO1xuICByZXR1cm4ga2hyb21hLnJnYmEociwgZywgYiwgb3BhY2l0eSk7XG59LCBcImZhZGVcIik7XG52YXIgZ2V0U3R5bGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3B0aW9ucykgPT4gYC5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICR7b3B0aW9ucy5mb250RmFtaWx5fTtcbiAgICBjb2xvcjogJHtvcHRpb25zLm5vZGVUZXh0Q29sb3IgfHwgb3B0aW9ucy50ZXh0Q29sb3J9O1xuICB9XG4gIC5jbHVzdGVyLWxhYmVsIHRleHQge1xuICAgIGZpbGw6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCBzcGFuLHAge1xuICAgIGNvbG9yOiAke29wdGlvbnMudGl0bGVDb2xvcn07XG4gIH1cblxuXG5cbiAgLmxhYmVsIHRleHQsc3BhbixwIHtcbiAgICBmaWxsOiAke29wdGlvbnMubm9kZVRleHRDb2xvciB8fCBvcHRpb25zLnRleHRDb2xvcn07XG4gICAgY29sb3I6ICR7b3B0aW9ucy5ub2RlVGV4dENvbG9yIHx8IG9wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuXG4gIC5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogJHtvcHRpb25zLm1haW5Ca2d9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLm5vZGVCb3JkZXJ9O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG4gIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgfVxuICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LW91dGVyLXRzcGFuIHtcbiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAvLyB9XG4gIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtaW5uZXItdHNwYW4ge1xuICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDtcbiAgLy8gfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hcnJvd2hlYWRDb2xvcn07XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmxpbmVDb2xvcn07XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAke29wdGlvbnMubGluZUNvbG9yfTtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgICAgZmlsbDogJHtvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmR9O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqL1xuICAubGFiZWxCa2cge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZmFkZShvcHRpb25zLmVkZ2VMYWJlbEJhY2tncm91bmQsIDAuNSl9O1xuICAgIC8vIGJhY2tncm91bmQtY29sb3I6XG4gIH1cblxuICAubm9kZSAuY2x1c3RlciB7XG4gICAgLy8gZmlsbDogJHtmYWRlKG9wdGlvbnMubWFpbkJrZywgMC41KX07XG4gICAgZmlsbDogJHtmYWRlKG9wdGlvbnMuY2x1c3RlckJrZywgMC41KX07XG4gICAgc3Ryb2tlOiAke2ZhZGUob3B0aW9ucy5jbHVzdGVyQm9yZGVyLCAwLjIpfTtcbiAgICBib3gtc2hhZG93OiByZ2JhKDUwLCA1MCwgOTMsIDAuMjUpIDBweCAxM3B4IDI3cHggLTVweCwgcmdiYSgwLCAwLCAwLCAwLjMpIDBweCA4cHggMTZweCAtOHB4O1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG5cbiAgLmNsdXN0ZXIgc3BhbixwIHtcbiAgICBjb2xvcjogJHtvcHRpb25zLnRpdGxlQ29sb3J9O1xuICB9XG4gIC8qIC5jbHVzdGVyIGRpdiB7XG4gICAgY29sb3I6ICR7b3B0aW9ucy50aXRsZUNvbG9yfTtcbiAgfSAqL1xuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJHtvcHRpb25zLmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAke29wdGlvbnMudGVydGlhcnlDb2xvcn07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtvcHRpb25zLmJvcmRlcjJ9O1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cblxuICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAke29wdGlvbnMudGV4dENvbG9yfTtcbiAgfVxuYCwgXCJnZXRTdHlsZXNcIik7XG52YXIgc3R5bGVzX2RlZmF1bHQgPSBnZXRTdHlsZXM7XG5cbi8vIHNyYy9kaWFncmFtcy9ibG9jay9ibG9ja1JlbmRlcmVyLnRzXG5pbXBvcnQgeyBzZWxlY3QgYXMgZDNzZWxlY3QgfSBmcm9tIFwiZDNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2Jsb2NrL2xheW91dC50c1xudmFyIHBhZGRpbmcgPSBnZXRDb25maWcyKCk/LmJsb2NrPy5wYWRkaW5nID8/IDg7XG5mdW5jdGlvbiBjYWxjdWxhdGVCbG9ja1Bvc2l0aW9uKGNvbHVtbnMsIHBvc2l0aW9uKSB7XG4gIGlmIChjb2x1bW5zID09PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1ucyBtdXN0IGJlIGFuIGludGVnZXIgIT09IDAuXCIpO1xuICB9XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIocG9zaXRpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zaXRpb24gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlwiICsgcG9zaXRpb24pO1xuICB9XG4gIGlmIChjb2x1bW5zIDwgMCkge1xuICAgIHJldHVybiB7IHB4OiBwb3NpdGlvbiwgcHk6IDAgfTtcbiAgfVxuICBpZiAoY29sdW1ucyA9PT0gMSkge1xuICAgIHJldHVybiB7IHB4OiAwLCBweTogcG9zaXRpb24gfTtcbiAgfVxuICBjb25zdCBweCA9IHBvc2l0aW9uICUgY29sdW1ucztcbiAgY29uc3QgcHkgPSBNYXRoLmZsb29yKHBvc2l0aW9uIC8gY29sdW1ucyk7XG4gIHJldHVybiB7IHB4LCBweSB9O1xufVxuX19uYW1lKGNhbGN1bGF0ZUJsb2NrUG9zaXRpb24sIFwiY2FsY3VsYXRlQmxvY2tQb3NpdGlvblwiKTtcbnZhciBnZXRNYXhDaGlsZFNpemUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChibG9jaykgPT4ge1xuICBsZXQgbWF4V2lkdGggPSAwO1xuICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgeCwgeSB9ID0gY2hpbGQuc2l6ZSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHg6IDAsIHk6IDAgfTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBcImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDpcIixcbiAgICAgIGNoaWxkLmlkLFxuICAgICAgXCJ3aWR0aDpcIixcbiAgICAgIHdpZHRoLFxuICAgICAgXCJoZWlnaHQ6XCIsXG4gICAgICBoZWlnaHQsXG4gICAgICBcIng6XCIsXG4gICAgICB4LFxuICAgICAgXCJ5OlwiLFxuICAgICAgeSxcbiAgICAgIGNoaWxkLnR5cGVcbiAgICApO1xuICAgIGlmIChjaGlsZC50eXBlID09PSBcInNwYWNlXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAod2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgbWF4V2lkdGggPSB3aWR0aCAvIChibG9jay53aWR0aEluQ29sdW1ucyA/PyAxKTtcbiAgICB9XG4gICAgaWYgKGhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgbWF4SGVpZ2h0ID0gaGVpZ2h0O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogbWF4V2lkdGgsIGhlaWdodDogbWF4SGVpZ2h0IH07XG59LCBcImdldE1heENoaWxkU2l6ZVwiKTtcbmZ1bmN0aW9uIHNldEJsb2NrU2l6ZXMoYmxvY2ssIGRiMiwgc2libGluZ1dpZHRoID0gMCwgc2libGluZ0hlaWdodCA9IDApIHtcbiAgbG9nLmRlYnVnKFxuICAgIFwic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpXCIsXG4gICAgYmxvY2suaWQsXG4gICAgYmxvY2s/LnNpemU/LngsXG4gICAgXCJibG9jayB3aWR0aCA9XCIsXG4gICAgYmxvY2s/LnNpemUsXG4gICAgXCJzaWVibGluZ1dpZHRoXCIsXG4gICAgc2libGluZ1dpZHRoXG4gICk7XG4gIGlmICghYmxvY2s/LnNpemU/LndpZHRoKSB7XG4gICAgYmxvY2suc2l6ZSA9IHtcbiAgICAgIHdpZHRoOiBzaWJsaW5nV2lkdGgsXG4gICAgICBoZWlnaHQ6IHNpYmxpbmdIZWlnaHQsXG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cbiAgbGV0IG1heFdpZHRoID0gMDtcbiAgbGV0IG1heEhlaWdodCA9IDA7XG4gIGlmIChibG9jay5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgYmxvY2suY2hpbGRyZW4pIHtcbiAgICAgIHNldEJsb2NrU2l6ZXMoY2hpbGQsIGRiMik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkU2l6ZSA9IGdldE1heENoaWxkU2l6ZShibG9jayk7XG4gICAgbWF4V2lkdGggPSBjaGlsZFNpemUud2lkdGg7XG4gICAgbWF4SGVpZ2h0ID0gY2hpbGRTaXplLmhlaWdodDtcbiAgICBsb2cuZGVidWcoXCJzZXRCbG9ja1NpemVzIGFiYzk1IG1heFdpZHRoIG9mXCIsIGJsb2NrLmlkLCBcIjpzIGNoaWxkcmVuIGlzIFwiLCBtYXhXaWR0aCwgbWF4SGVpZ2h0KTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY2hpbGQuc2l6ZSkge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke2Jsb2NrLmlkfSBpZD0ke2NoaWxkLmlkfSAke21heFdpZHRofSAke21heEhlaWdodH0gJHtKU09OLnN0cmluZ2lmeShjaGlsZC5zaXplKX1gXG4gICAgICAgICk7XG4gICAgICAgIGNoaWxkLnNpemUud2lkdGggPSBtYXhXaWR0aCAqIChjaGlsZC53aWR0aEluQ29sdW1ucyA/PyAxKSArIHBhZGRpbmcgKiAoKGNoaWxkLndpZHRoSW5Db2x1bW5zID8/IDEpIC0gMSk7XG4gICAgICAgIGNoaWxkLnNpemUuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICBjaGlsZC5zaXplLnggPSAwO1xuICAgICAgICBjaGlsZC5zaXplLnkgPSAwO1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYGFiYzk1IHVwZGF0aW5nIHNpemUgb2YgJHtibG9jay5pZH0gY2hpbGRyZW4gY2hpbGQ6JHtjaGlsZC5pZH0gbWF4V2lkdGg6JHttYXhXaWR0aH0gbWF4SGVpZ2h0OiR7bWF4SGVpZ2h0fWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgc2V0QmxvY2tTaXplcyhjaGlsZCwgZGIyLCBtYXhXaWR0aCwgbWF4SGVpZ2h0KTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1ucyA9IGJsb2NrLmNvbHVtbnMgPz8gLTE7XG4gICAgbGV0IG51bUl0ZW1zID0gMDtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgICBudW1JdGVtcyArPSBjaGlsZC53aWR0aEluQ29sdW1ucyA/PyAxO1xuICAgIH1cbiAgICBsZXQgeFNpemUgPSBibG9jay5jaGlsZHJlbi5sZW5ndGg7XG4gICAgaWYgKGNvbHVtbnMgPiAwICYmIGNvbHVtbnMgPCBudW1JdGVtcykge1xuICAgICAgeFNpemUgPSBjb2x1bW5zO1xuICAgIH1cbiAgICBjb25zdCB5U2l6ZSA9IE1hdGguY2VpbChudW1JdGVtcyAvIHhTaXplKTtcbiAgICBsZXQgd2lkdGggPSB4U2l6ZSAqIChtYXhXaWR0aCArIHBhZGRpbmcpICsgcGFkZGluZztcbiAgICBsZXQgaGVpZ2h0ID0geVNpemUgKiAobWF4SGVpZ2h0ICsgcGFkZGluZykgKyBwYWRkaW5nO1xuICAgIGlmICh3aWR0aCA8IHNpYmxpbmdXaWR0aCkge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgRGV0ZWN0ZWQgdG8gc21hbGwgc2llYmxpbmc6IGFiYzk1ICR7YmxvY2suaWR9IHNpZWJsaW5nV2lkdGggJHtzaWJsaW5nV2lkdGh9IHNpZWJsaW5nSGVpZ2h0ICR7c2libGluZ0hlaWdodH0gd2lkdGggJHt3aWR0aH1gXG4gICAgICApO1xuICAgICAgd2lkdGggPSBzaWJsaW5nV2lkdGg7XG4gICAgICBoZWlnaHQgPSBzaWJsaW5nSGVpZ2h0O1xuICAgICAgY29uc3QgY2hpbGRXaWR0aCA9IChzaWJsaW5nV2lkdGggLSB4U2l6ZSAqIHBhZGRpbmcgLSBwYWRkaW5nKSAvIHhTaXplO1xuICAgICAgY29uc3QgY2hpbGRIZWlnaHQgPSAoc2libGluZ0hlaWdodCAtIHlTaXplICogcGFkZGluZyAtIHBhZGRpbmcpIC8geVNpemU7XG4gICAgICBsb2cuZGVidWcoXCJTaXplIGluZGF0YSBhYmM4OFwiLCBibG9jay5pZCwgXCJjaGlsZFdpZHRoXCIsIGNoaWxkV2lkdGgsIFwibWF4V2lkdGhcIiwgbWF4V2lkdGgpO1xuICAgICAgbG9nLmRlYnVnKFwiU2l6ZSBpbmRhdGEgYWJjODhcIiwgYmxvY2suaWQsIFwiY2hpbGRIZWlnaHRcIiwgY2hpbGRIZWlnaHQsIFwibWF4SGVpZ2h0XCIsIG1heEhlaWdodCk7XG4gICAgICBsb2cuZGVidWcoXCJTaXplIGluZGF0YSBhYmM4OCB4U2l6ZVwiLCB4U2l6ZSwgXCJwYWRkaW5nXCIsIHBhZGRpbmcpO1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgICBpZiAoY2hpbGQuc2l6ZSkge1xuICAgICAgICAgIGNoaWxkLnNpemUud2lkdGggPSBjaGlsZFdpZHRoO1xuICAgICAgICAgIGNoaWxkLnNpemUuaGVpZ2h0ID0gY2hpbGRIZWlnaHQ7XG4gICAgICAgICAgY2hpbGQuc2l6ZS54ID0gMDtcbiAgICAgICAgICBjaGlsZC5zaXplLnkgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBhYmM5NSAoZmluYWxlIGNhbGMpICR7YmxvY2suaWR9IHhTaXplICR7eFNpemV9IHlTaXplICR7eVNpemV9IGNvbHVtbnMgJHtjb2x1bW5zfSR7YmxvY2suY2hpbGRyZW4ubGVuZ3RofSB3aWR0aD0ke01hdGgubWF4KHdpZHRoLCBibG9jay5zaXplPy53aWR0aCB8fCAwKX1gXG4gICAgKTtcbiAgICBpZiAod2lkdGggPCAoYmxvY2s/LnNpemU/LndpZHRoIHx8IDApKSB7XG4gICAgICB3aWR0aCA9IGJsb2NrPy5zaXplPy53aWR0aCB8fCAwO1xuICAgICAgY29uc3QgbnVtID0gY29sdW1ucyA+IDAgPyBNYXRoLm1pbihibG9jay5jaGlsZHJlbi5sZW5ndGgsIGNvbHVtbnMpIDogYmxvY2suY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgaWYgKG51bSA+IDApIHtcbiAgICAgICAgY29uc3QgY2hpbGRXaWR0aCA9ICh3aWR0aCAtIG51bSAqIHBhZGRpbmcgLSBwYWRkaW5nKSAvIG51bTtcbiAgICAgICAgbG9nLmRlYnVnKFwiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aFwiLCBibG9jay5pZCwgd2lkdGgsIGJsb2NrLnNpemU/LndpZHRoLCBjaGlsZFdpZHRoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChjaGlsZC5zaXplKSB7XG4gICAgICAgICAgICBjaGlsZC5zaXplLndpZHRoID0gY2hpbGRXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYmxvY2suc2l6ZSA9IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBcInNldEJsb2NrU2l6ZXMgYWJjOTQgKGRvbmUpXCIsXG4gICAgYmxvY2suaWQsXG4gICAgYmxvY2s/LnNpemU/LngsXG4gICAgYmxvY2s/LnNpemU/LndpZHRoLFxuICAgIGJsb2NrPy5zaXplPy55LFxuICAgIGJsb2NrPy5zaXplPy5oZWlnaHRcbiAgKTtcbn1cbl9fbmFtZShzZXRCbG9ja1NpemVzLCBcInNldEJsb2NrU2l6ZXNcIik7XG5mdW5jdGlvbiBsYXlvdXRCbG9ja3MoYmxvY2ssIGRiMikge1xuICBsb2cuZGVidWcoXG4gICAgYGFiYzg1IGxheW91dCBibG9ja3MgKD0+bGF5b3V0QmxvY2tzKSAke2Jsb2NrLmlkfSB4OiAke2Jsb2NrPy5zaXplPy54fSB5OiAke2Jsb2NrPy5zaXplPy55fSB3aWR0aDogJHtibG9jaz8uc2l6ZT8ud2lkdGh9YFxuICApO1xuICBjb25zdCBjb2x1bW5zID0gYmxvY2suY29sdW1ucyA/PyAtMTtcbiAgbG9nLmRlYnVnKFwibGF5b3V0QmxvY2tzIGNvbHVtbnMgYWJjOTVcIiwgYmxvY2suaWQsIFwiPT5cIiwgY29sdW1ucywgYmxvY2spO1xuICBpZiAoYmxvY2suY2hpbGRyZW4gJiYgLy8gZmluZCBtYXggd2lkdGggb2YgY2hpbGRyZW5cbiAgYmxvY2suY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHdpZHRoID0gYmxvY2s/LmNoaWxkcmVuWzBdPy5zaXplPy53aWR0aCA/PyAwO1xuICAgIGNvbnN0IHdpZHRoT2ZDaGlsZHJlbiA9IGJsb2NrLmNoaWxkcmVuLmxlbmd0aCAqIHdpZHRoICsgKGJsb2NrLmNoaWxkcmVuLmxlbmd0aCAtIDEpICogcGFkZGluZztcbiAgICBsb2cuZGVidWcoXCJ3aWR0aE9mQ2hpbGRyZW4gODhcIiwgd2lkdGhPZkNoaWxkcmVuLCBcInBvc1hcIik7XG4gICAgbGV0IGNvbHVtblBvcyA9IDA7XG4gICAgbG9nLmRlYnVnKFwiYWJjOTEgYmxvY2s/LnNpemU/LnhcIiwgYmxvY2suaWQsIGJsb2NrPy5zaXplPy54KTtcbiAgICBsZXQgc3RhcnRpbmdQb3NYID0gYmxvY2s/LnNpemU/LnggPyBibG9jaz8uc2l6ZT8ueCArICgtYmxvY2s/LnNpemU/LndpZHRoIC8gMiB8fCAwKSA6IC1wYWRkaW5nO1xuICAgIGxldCByb3dQb3MgPSAwO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgYmxvY2suY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGJsb2NrO1xuICAgICAgaWYgKCFjaGlsZC5zaXplKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB3aWR0aDogd2lkdGgyLCBoZWlnaHQgfSA9IGNoaWxkLnNpemU7XG4gICAgICBjb25zdCB7IHB4LCBweSB9ID0gY2FsY3VsYXRlQmxvY2tQb3NpdGlvbihjb2x1bW5zLCBjb2x1bW5Qb3MpO1xuICAgICAgaWYgKHB5ICE9IHJvd1Bvcykge1xuICAgICAgICByb3dQb3MgPSBweTtcbiAgICAgICAgc3RhcnRpbmdQb3NYID0gYmxvY2s/LnNpemU/LnggPyBibG9jaz8uc2l6ZT8ueCArICgtYmxvY2s/LnNpemU/LndpZHRoIC8gMiB8fCAwKSA6IC1wYWRkaW5nO1xuICAgICAgICBsb2cuZGVidWcoXCJOZXcgcm93IGluIGxheW91dCBmb3IgYmxvY2tcIiwgYmxvY2suaWQsIFwiIGFuZCBjaGlsZCBcIiwgY2hpbGQuaWQsIHJvd1Bvcyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7Y2hpbGQuaWR9IFBvczogJHtjb2x1bW5Qb3N9IChweCwgcHkpICR7cHh9LCR7cHl9ICgke3BhcmVudD8uc2l6ZT8ueH0sJHtwYXJlbnQ/LnNpemU/Lnl9KSBwYXJlbnQ6ICR7cGFyZW50LmlkfSB3aWR0aDogJHt3aWR0aDJ9JHtwYWRkaW5nfWBcbiAgICAgICk7XG4gICAgICBpZiAocGFyZW50LnNpemUpIHtcbiAgICAgICAgY29uc3QgaGFsZldpZHRoID0gd2lkdGgyIC8gMjtcbiAgICAgICAgY2hpbGQuc2l6ZS54ID0gc3RhcnRpbmdQb3NYICsgcGFkZGluZyArIGhhbGZXaWR0aDtcbiAgICAgICAgbG9nLmRlYnVnKFxuICAgICAgICAgIGBhYmM5MSBsYXlvdXQgYmxvY2tzIChjYWxjKSBweCwgcHlpZDoke2NoaWxkLmlkfSBzdGFydGluZ1Bvcz1YJHtzdGFydGluZ1Bvc1h9IG5ldyBzdGFydGluZ1Bvc1gke2NoaWxkLnNpemUueH0gJHtoYWxmV2lkdGh9IHBhZGRpbmc9JHtwYWRkaW5nfSB3aWR0aD0ke3dpZHRoMn0gaGFsZldpZHRoPSR7aGFsZldpZHRofSA9PiB4OiR7Y2hpbGQuc2l6ZS54fSB5OiR7Y2hpbGQuc2l6ZS55fSAke2NoaWxkLndpZHRoSW5Db2x1bW5zfSAod2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiAke3dpZHRoMiAqIChjaGlsZD8ud2lkdGhJbkNvbHVtbnMgPz8gMSkgLyAyfWBcbiAgICAgICAgKTtcbiAgICAgICAgc3RhcnRpbmdQb3NYID0gY2hpbGQuc2l6ZS54ICsgaGFsZldpZHRoO1xuICAgICAgICBjaGlsZC5zaXplLnkgPSBwYXJlbnQuc2l6ZS55IC0gcGFyZW50LnNpemUuaGVpZ2h0IC8gMiArIHB5ICogKGhlaWdodCArIHBhZGRpbmcpICsgaGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHtjaGlsZC5pZH1zdGFydGluZ1Bvc1gke3N0YXJ0aW5nUG9zWH0ke3BhZGRpbmd9JHtoYWxmV2lkdGh9PT54OiR7Y2hpbGQuc2l6ZS54fXk6JHtjaGlsZC5zaXplLnl9JHtjaGlsZC53aWR0aEluQ29sdW1uc30od2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiR7d2lkdGgyICogKGNoaWxkPy53aWR0aEluQ29sdW1ucyA/PyAxKSAvIDJ9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIGxheW91dEJsb2NrcyhjaGlsZCwgZGIyKTtcbiAgICAgIH1cbiAgICAgIGNvbHVtblBvcyArPSBjaGlsZD8ud2lkdGhJbkNvbHVtbnMgPz8gMTtcbiAgICAgIGxvZy5kZWJ1ZyhcImFiYzg4IGNvbHVtbnNQb3NcIiwgY2hpbGQsIGNvbHVtblBvcyk7XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhcbiAgICBgbGF5b3V0IGJsb2NrcyAoPD09bGF5b3V0QmxvY2tzKSAke2Jsb2NrLmlkfSB4OiAke2Jsb2NrPy5zaXplPy54fSB5OiAke2Jsb2NrPy5zaXplPy55fSB3aWR0aDogJHtibG9jaz8uc2l6ZT8ud2lkdGh9YFxuICApO1xufVxuX19uYW1lKGxheW91dEJsb2NrcywgXCJsYXlvdXRCbG9ja3NcIik7XG5mdW5jdGlvbiBmaW5kQm91bmRzKGJsb2NrLCB7IG1pblgsIG1pblksIG1heFgsIG1heFkgfSA9IHsgbWluWDogMCwgbWluWTogMCwgbWF4WDogMCwgbWF4WTogMCB9KSB7XG4gIGlmIChibG9jay5zaXplICYmIGJsb2NrLmlkICE9PSBcInJvb3RcIikge1xuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gYmxvY2suc2l6ZTtcbiAgICBpZiAoeCAtIHdpZHRoIC8gMiA8IG1pblgpIHtcbiAgICAgIG1pblggPSB4IC0gd2lkdGggLyAyO1xuICAgIH1cbiAgICBpZiAoeSAtIGhlaWdodCAvIDIgPCBtaW5ZKSB7XG4gICAgICBtaW5ZID0geSAtIGhlaWdodCAvIDI7XG4gICAgfVxuICAgIGlmICh4ICsgd2lkdGggLyAyID4gbWF4WCkge1xuICAgICAgbWF4WCA9IHggKyB3aWR0aCAvIDI7XG4gICAgfVxuICAgIGlmICh5ICsgaGVpZ2h0IC8gMiA+IG1heFkpIHtcbiAgICAgIG1heFkgPSB5ICsgaGVpZ2h0IC8gMjtcbiAgICB9XG4gIH1cbiAgaWYgKGJsb2NrLmNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBibG9jay5jaGlsZHJlbikge1xuICAgICAgKHsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSB9ID0gZmluZEJvdW5kcyhjaGlsZCwgeyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZIH0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSB9O1xufVxuX19uYW1lKGZpbmRCb3VuZHMsIFwiZmluZEJvdW5kc1wiKTtcbmZ1bmN0aW9uIGxheW91dChkYjIpIHtcbiAgY29uc3Qgcm9vdCA9IGRiMi5nZXRCbG9jayhcInJvb3RcIik7XG4gIGlmICghcm9vdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzZXRCbG9ja1NpemVzKHJvb3QsIGRiMiwgMCwgMCk7XG4gIGxheW91dEJsb2Nrcyhyb290LCBkYjIpO1xuICBsb2cuZGVidWcoXCJnZXRCbG9ja3NcIiwgSlNPTi5zdHJpbmdpZnkocm9vdCwgbnVsbCwgMikpO1xuICBjb25zdCB7IG1pblgsIG1pblksIG1heFgsIG1heFkgfSA9IGZpbmRCb3VuZHMocm9vdCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heFkgLSBtaW5ZO1xuICBjb25zdCB3aWR0aCA9IG1heFggLSBtaW5YO1xuICByZXR1cm4geyB4OiBtaW5YLCB5OiBtaW5ZLCB3aWR0aCwgaGVpZ2h0IH07XG59XG5fX25hbWUobGF5b3V0LCBcImxheW91dFwiKTtcblxuLy8gc3JjL2RpYWdyYW1zL2Jsb2NrL3JlbmRlckhlbHBlcnMudHNcbmltcG9ydCAqIGFzIGdyYXBobGliIGZyb20gXCJkYWdyZS1kMy1lcy9zcmMvZ3JhcGhsaWIvaW5kZXguanNcIjtcbmZ1bmN0aW9uIGdldE5vZGVGcm9tQmxvY2soYmxvY2ssIGRiMiwgcG9zaXRpb25lZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHZlcnRleCA9IGJsb2NrO1xuICBsZXQgY2xhc3NTdHIgPSBcImRlZmF1bHRcIjtcbiAgaWYgKCh2ZXJ0ZXg/LmNsYXNzZXM/Lmxlbmd0aCB8fCAwKSA+IDApIHtcbiAgICBjbGFzc1N0ciA9ICh2ZXJ0ZXg/LmNsYXNzZXMgPz8gW10pLmpvaW4oXCIgXCIpO1xuICB9XG4gIGNsYXNzU3RyID0gY2xhc3NTdHIgKyBcIiBmbG93Y2hhcnQtbGFiZWxcIjtcbiAgbGV0IHJhZGl1cyA9IDA7XG4gIGxldCBzaGFwZSA9IFwiXCI7XG4gIGxldCBwYWRkaW5nMjtcbiAgc3dpdGNoICh2ZXJ0ZXgudHlwZSkge1xuICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgcmFkaXVzID0gNTtcbiAgICAgIHNoYXBlID0gXCJyZWN0XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY29tcG9zaXRlXCI6XG4gICAgICByYWRpdXMgPSAwO1xuICAgICAgc2hhcGUgPSBcImNvbXBvc2l0ZVwiO1xuICAgICAgcGFkZGluZzIgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNxdWFyZVwiOlxuICAgICAgc2hhcGUgPSBcInJlY3RcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICBzaGFwZSA9IFwicXVlc3Rpb25cIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJoZXhhZ29uXCI6XG4gICAgICBzaGFwZSA9IFwiaGV4YWdvblwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJsb2NrX2Fycm93XCI6XG4gICAgICBzaGFwZSA9IFwiYmxvY2tfYXJyb3dcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJvZGRcIjpcbiAgICAgIHNoYXBlID0gXCJyZWN0X2xlZnRfaW52X2Fycm93XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGVhbl9yaWdodFwiOlxuICAgICAgc2hhcGUgPSBcImxlYW5fcmlnaHRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsZWFuX2xlZnRcIjpcbiAgICAgIHNoYXBlID0gXCJsZWFuX2xlZnRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0cmFwZXpvaWRcIjpcbiAgICAgIHNoYXBlID0gXCJ0cmFwZXpvaWRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJpbnZfdHJhcGV6b2lkXCI6XG4gICAgICBzaGFwZSA9IFwiaW52X3RyYXBlem9pZFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInJlY3RfbGVmdF9pbnZfYXJyb3dcIjpcbiAgICAgIHNoYXBlID0gXCJyZWN0X2xlZnRfaW52X2Fycm93XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICBzaGFwZSA9IFwiY2lyY2xlXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgc2hhcGUgPSBcImVsbGlwc2VcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzdGFkaXVtXCI6XG4gICAgICBzaGFwZSA9IFwic3RhZGl1bVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInN1YnJvdXRpbmVcIjpcbiAgICAgIHNoYXBlID0gXCJzdWJyb3V0aW5lXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3lsaW5kZXJcIjpcbiAgICAgIHNoYXBlID0gXCJjeWxpbmRlclwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImdyb3VwXCI6XG4gICAgICBzaGFwZSA9IFwicmVjdFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRvdWJsZWNpcmNsZVwiOlxuICAgICAgc2hhcGUgPSBcImRvdWJsZWNpcmNsZVwiO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHNoYXBlID0gXCJyZWN0XCI7XG4gIH1cbiAgY29uc3Qgc3R5bGVzID0gZ2V0U3R5bGVzRnJvbUFycmF5KHZlcnRleD8uc3R5bGVzID8/IFtdKTtcbiAgY29uc3QgdmVydGV4VGV4dCA9IHZlcnRleC5sYWJlbDtcbiAgY29uc3QgYm91bmRzID0gdmVydGV4LnNpemUgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB4OiAwLCB5OiAwIH07XG4gIGNvbnN0IG5vZGUgPSB7XG4gICAgbGFiZWxTdHlsZTogc3R5bGVzLmxhYmVsU3R5bGUsXG4gICAgc2hhcGUsXG4gICAgbGFiZWxUZXh0OiB2ZXJ0ZXhUZXh0LFxuICAgIHJ4OiByYWRpdXMsXG4gICAgcnk6IHJhZGl1cyxcbiAgICBjbGFzczogY2xhc3NTdHIsXG4gICAgc3R5bGU6IHN0eWxlcy5zdHlsZSxcbiAgICBpZDogdmVydGV4LmlkLFxuICAgIGRpcmVjdGlvbnM6IHZlcnRleC5kaXJlY3Rpb25zLFxuICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXG4gICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0LFxuICAgIHg6IGJvdW5kcy54LFxuICAgIHk6IGJvdW5kcy55LFxuICAgIHBvc2l0aW9uZWQsXG4gICAgaW50ZXJzZWN0OiB2b2lkIDAsXG4gICAgdHlwZTogdmVydGV4LnR5cGUsXG4gICAgcGFkZGluZzogcGFkZGluZzIgPz8gZ2V0Q29uZmlnKCk/LmJsb2NrPy5wYWRkaW5nID8/IDBcbiAgfTtcbiAgcmV0dXJuIG5vZGU7XG59XG5fX25hbWUoZ2V0Tm9kZUZyb21CbG9jaywgXCJnZXROb2RlRnJvbUJsb2NrXCIpO1xuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlQmxvY2tTaXplKGVsZW0sIGJsb2NrLCBkYjIpIHtcbiAgY29uc3Qgbm9kZSA9IGdldE5vZGVGcm9tQmxvY2soYmxvY2ssIGRiMiwgZmFsc2UpO1xuICBpZiAobm9kZS50eXBlID09PSBcImdyb3VwXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgbm9kZUVsID0gYXdhaXQgaW5zZXJ0Tm9kZShlbGVtLCBub2RlKTtcbiAgY29uc3QgYm91bmRpbmdCb3ggPSBub2RlRWwubm9kZSgpLmdldEJCb3goKTtcbiAgY29uc3Qgb2JqID0gZGIyLmdldEJsb2NrKG5vZGUuaWQpO1xuICBvYmouc2l6ZSA9IHsgd2lkdGg6IGJvdW5kaW5nQm94LndpZHRoLCBoZWlnaHQ6IGJvdW5kaW5nQm94LmhlaWdodCwgeDogMCwgeTogMCwgbm9kZTogbm9kZUVsIH07XG4gIGRiMi5zZXRCbG9jayhvYmopO1xuICBub2RlRWwucmVtb3ZlKCk7XG59XG5fX25hbWUoY2FsY3VsYXRlQmxvY2tTaXplLCBcImNhbGN1bGF0ZUJsb2NrU2l6ZVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGluc2VydEJsb2NrUG9zaXRpb25lZChlbGVtLCBibG9jaywgZGIyKSB7XG4gIGNvbnN0IG5vZGUgPSBnZXROb2RlRnJvbUJsb2NrKGJsb2NrLCBkYjIsIHRydWUpO1xuICBjb25zdCBvYmogPSBkYjIuZ2V0QmxvY2sobm9kZS5pZCk7XG4gIGlmIChvYmoudHlwZSAhPT0gXCJzcGFjZVwiKSB7XG4gICAgYXdhaXQgaW5zZXJ0Tm9kZShlbGVtLCBub2RlKTtcbiAgICBibG9jay5pbnRlcnNlY3QgPSBub2RlPy5pbnRlcnNlY3Q7XG4gICAgcG9zaXRpb25Ob2RlKG5vZGUpO1xuICB9XG59XG5fX25hbWUoaW5zZXJ0QmxvY2tQb3NpdGlvbmVkLCBcImluc2VydEJsb2NrUG9zaXRpb25lZFwiKTtcbmFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1PcGVyYXRpb25zKGVsZW0sIGJsb2NrczIsIGRiMiwgb3BlcmF0aW9uKSB7XG4gIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzMikge1xuICAgIGF3YWl0IG9wZXJhdGlvbihlbGVtLCBibG9jaywgZGIyKTtcbiAgICBpZiAoYmxvY2suY2hpbGRyZW4pIHtcbiAgICAgIGF3YWl0IHBlcmZvcm1PcGVyYXRpb25zKGVsZW0sIGJsb2NrLmNoaWxkcmVuLCBkYjIsIG9wZXJhdGlvbik7XG4gICAgfVxuICB9XG59XG5fX25hbWUocGVyZm9ybU9wZXJhdGlvbnMsIFwicGVyZm9ybU9wZXJhdGlvbnNcIik7XG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVCbG9ja1NpemVzKGVsZW0sIGJsb2NrczIsIGRiMikge1xuICBhd2FpdCBwZXJmb3JtT3BlcmF0aW9ucyhlbGVtLCBibG9ja3MyLCBkYjIsIGNhbGN1bGF0ZUJsb2NrU2l6ZSk7XG59XG5fX25hbWUoY2FsY3VsYXRlQmxvY2tTaXplcywgXCJjYWxjdWxhdGVCbG9ja1NpemVzXCIpO1xuYXN5bmMgZnVuY3Rpb24gaW5zZXJ0QmxvY2tzKGVsZW0sIGJsb2NrczIsIGRiMikge1xuICBhd2FpdCBwZXJmb3JtT3BlcmF0aW9ucyhlbGVtLCBibG9ja3MyLCBkYjIsIGluc2VydEJsb2NrUG9zaXRpb25lZCk7XG59XG5fX25hbWUoaW5zZXJ0QmxvY2tzLCBcImluc2VydEJsb2Nrc1wiKTtcbmFzeW5jIGZ1bmN0aW9uIGluc2VydEVkZ2VzKGVsZW0sIGVkZ2VzLCBibG9ja3MyLCBkYjIsIGlkKSB7XG4gIGNvbnN0IGcgPSBuZXcgZ3JhcGhsaWIuR3JhcGgoe1xuICAgIG11bHRpZ3JhcGg6IHRydWUsXG4gICAgY29tcG91bmQ6IHRydWVcbiAgfSk7XG4gIGcuc2V0R3JhcGgoe1xuICAgIHJhbmtkaXI6IFwiVEJcIixcbiAgICBub2Rlc2VwOiAxMCxcbiAgICByYW5rc2VwOiAxMCxcbiAgICBtYXJnaW54OiA4LFxuICAgIG1hcmdpbnk6IDhcbiAgfSk7XG4gIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzMikge1xuICAgIGlmIChibG9jay5zaXplKSB7XG4gICAgICBnLnNldE5vZGUoYmxvY2suaWQsIHtcbiAgICAgICAgd2lkdGg6IGJsb2NrLnNpemUud2lkdGgsXG4gICAgICAgIGhlaWdodDogYmxvY2suc2l6ZS5oZWlnaHQsXG4gICAgICAgIGludGVyc2VjdDogYmxvY2suaW50ZXJzZWN0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBlZGdlIG9mIGVkZ2VzKSB7XG4gICAgaWYgKGVkZ2Uuc3RhcnQgJiYgZWRnZS5lbmQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0QmxvY2sgPSBkYjIuZ2V0QmxvY2soZWRnZS5zdGFydCk7XG4gICAgICBjb25zdCBlbmRCbG9jayA9IGRiMi5nZXRCbG9jayhlZGdlLmVuZCk7XG4gICAgICBpZiAoc3RhcnRCbG9jaz8uc2l6ZSAmJiBlbmRCbG9jaz8uc2l6ZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHN0YXJ0QmxvY2suc2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQmxvY2suc2l6ZTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgICAgIHsgeDogc3RhcnQueCwgeTogc3RhcnQueSB9LFxuICAgICAgICAgIHsgeDogc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpIC8gMiwgeTogc3RhcnQueSArIChlbmQueSAtIHN0YXJ0LnkpIC8gMiB9LFxuICAgICAgICAgIHsgeDogZW5kLngsIHk6IGVuZC55IH1cbiAgICAgICAgXTtcbiAgICAgICAgaW5zZXJ0RWRnZShcbiAgICAgICAgICBlbGVtLFxuICAgICAgICAgIHsgdjogZWRnZS5zdGFydCwgdzogZWRnZS5lbmQsIG5hbWU6IGVkZ2UuaWQgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5lZGdlLFxuICAgICAgICAgICAgYXJyb3dUeXBlRW5kOiBlZGdlLmFycm93VHlwZUVuZCxcbiAgICAgICAgICAgIGFycm93VHlwZVN0YXJ0OiBlZGdlLmFycm93VHlwZVN0YXJ0LFxuICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgY2xhc3NlczogXCJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBcImJsb2NrXCIsXG4gICAgICAgICAgZyxcbiAgICAgICAgICBpZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZWRnZS5sYWJlbCkge1xuICAgICAgICAgIGF3YWl0IGluc2VydEVkZ2VMYWJlbChlbGVtLCB7XG4gICAgICAgICAgICAuLi5lZGdlLFxuICAgICAgICAgICAgbGFiZWw6IGVkZ2UubGFiZWwsXG4gICAgICAgICAgICBsYWJlbFN0eWxlOiBcInN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7XCIsXG4gICAgICAgICAgICBhcnJvd1R5cGVFbmQ6IGVkZ2UuYXJyb3dUeXBlRW5kLFxuICAgICAgICAgICAgYXJyb3dUeXBlU3RhcnQ6IGVkZ2UuYXJyb3dUeXBlU3RhcnQsXG4gICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICBjbGFzc2VzOiBcImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjFcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBvc2l0aW9uRWRnZUxhYmVsKFxuICAgICAgICAgICAgeyAuLi5lZGdlLCB4OiBwb2ludHNbMV0ueCwgeTogcG9pbnRzWzFdLnkgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxQYXRoOiBwb2ludHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5fX25hbWUoaW5zZXJ0RWRnZXMsIFwiaW5zZXJ0RWRnZXNcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9ibG9jay9ibG9ja1JlbmRlcmVyLnRzXG52YXIgZ2V0Q2xhc3NlczIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHRleHQsIGRpYWdPYmopIHtcbiAgcmV0dXJuIGRpYWdPYmouZGIuZ2V0Q2xhc3NlcygpO1xufSwgXCJnZXRDbGFzc2VzXCIpO1xudmFyIGRyYXcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKHRleHQsIGlkLCBfdmVyc2lvbiwgZGlhZ09iaikge1xuICBjb25zdCB7IHNlY3VyaXR5TGV2ZWwsIGJsb2NrOiBjb25mIH0gPSBnZXRDb25maWcoKTtcbiAgY29uc3QgZGIyID0gZGlhZ09iai5kYjtcbiAgbGV0IHNhbmRib3hFbGVtZW50O1xuICBpZiAoc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIpIHtcbiAgICBzYW5kYm94RWxlbWVudCA9IGQzc2VsZWN0KFwiI2lcIiArIGlkKTtcbiAgfVxuICBjb25zdCByb290ID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyBkM3NlbGVjdChzYW5kYm94RWxlbWVudC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSA6IGQzc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3Qgc3ZnID0gc2VjdXJpdHlMZXZlbCA9PT0gXCJzYW5kYm94XCIgPyByb290LnNlbGVjdChgW2lkPVwiJHtpZH1cIl1gKSA6IGQzc2VsZWN0KGBbaWQ9XCIke2lkfVwiXWApO1xuICBjb25zdCBtYXJrZXJzID0gW1wicG9pbnRcIiwgXCJjaXJjbGVcIiwgXCJjcm9zc1wiXTtcbiAgbWFya2Vyc19kZWZhdWx0KHN2ZywgbWFya2VycywgZGlhZ09iai50eXBlLCBpZCk7XG4gIGNvbnN0IGJsID0gZGIyLmdldEJsb2NrcygpO1xuICBjb25zdCBibEFyciA9IGRiMi5nZXRCbG9ja3NGbGF0KCk7XG4gIGNvbnN0IGVkZ2VzID0gZGIyLmdldEVkZ2VzKCk7XG4gIGNvbnN0IG5vZGVzID0gc3ZnLmluc2VydChcImdcIikuYXR0cihcImNsYXNzXCIsIFwiYmxvY2tcIik7XG4gIGF3YWl0IGNhbGN1bGF0ZUJsb2NrU2l6ZXMobm9kZXMsIGJsLCBkYjIpO1xuICBjb25zdCBib3VuZHMgPSBsYXlvdXQoZGIyKTtcbiAgYXdhaXQgaW5zZXJ0QmxvY2tzKG5vZGVzLCBibCwgZGIyKTtcbiAgYXdhaXQgaW5zZXJ0RWRnZXMobm9kZXMsIGVkZ2VzLCBibEFyciwgZGIyLCBpZCk7XG4gIGlmIChib3VuZHMpIHtcbiAgICBjb25zdCBib3VuZHMyID0gYm91bmRzO1xuICAgIGNvbnN0IG1hZ2ljRmFjdG9yID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCgwLjEyNSAqIChib3VuZHMyLndpZHRoIC8gYm91bmRzMi5oZWlnaHQpKSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzMi5oZWlnaHQgKyBtYWdpY0ZhY3RvciArIDEwO1xuICAgIGNvbnN0IHdpZHRoID0gYm91bmRzMi53aWR0aCArIDEwO1xuICAgIGNvbnN0IHsgdXNlTWF4V2lkdGggfSA9IGNvbmY7XG4gICAgY29uZmlndXJlU3ZnU2l6ZShzdmcsIGhlaWdodCwgd2lkdGgsICEhdXNlTWF4V2lkdGgpO1xuICAgIGxvZy5kZWJ1ZyhcIkhlcmUgQm91bmRzXCIsIGJvdW5kcywgYm91bmRzMik7XG4gICAgc3ZnLmF0dHIoXG4gICAgICBcInZpZXdCb3hcIixcbiAgICAgIGAke2JvdW5kczIueCAtIDV9ICR7Ym91bmRzMi55IC0gNX0gJHtib3VuZHMyLndpZHRoICsgMTB9ICR7Ym91bmRzMi5oZWlnaHQgKyAxMH1gXG4gICAgKTtcbiAgfVxufSwgXCJkcmF3XCIpO1xudmFyIGJsb2NrUmVuZGVyZXJfZGVmYXVsdCA9IHtcbiAgZHJhdyxcbiAgZ2V0Q2xhc3NlczogZ2V0Q2xhc3NlczJcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9ibG9jay9ibG9ja0RpYWdyYW0udHNcbnZhciBkaWFncmFtID0ge1xuICBwYXJzZXI6IGJsb2NrX2RlZmF1bHQsXG4gIGRiOiBibG9ja0RCX2RlZmF1bHQsXG4gIHJlbmRlcmVyOiBibG9ja1JlbmRlcmVyX2RlZmF1bHQsXG4gIHN0eWxlczogc3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJsYXlvdXRCYXNlXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImxheW91dEJhc2VcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyOCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIExheW91dENvbnN0YW50cygpIHt9XG5cbi8qKlxyXG4gKiBMYXlvdXQgUXVhbGl0eTogMDpkcmFmdCwgMTpkZWZhdWx0LCAyOnByb29mXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAxO1xuXG4vKipcclxuICogRGVmYXVsdCBwYXJhbWV0ZXJzXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCA9IGZhbHNlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBmYWxzZTtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQgPSB0cnVlO1xuTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQgPSBmYWxzZTtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QgPSA1MDtcbkxheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTID0gZmFsc2U7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBHZW5lcmFsIG90aGVyIGNvbnN0YW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qXHJcbiAqIE1hcmdpbnMgb2YgYSBncmFwaCB0byBiZSBhcHBsaWVkIG9uIGJvdWRpbmcgcmVjdGFuZ2xlIG9mIGl0cyBjb250ZW50cy4gV2VcclxuICogYXNzdW1lIG1hcmdpbnMgb24gYWxsIGZvdXIgc2lkZXMgdG8gYmUgdW5pZm9ybS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFQSF9NQVJHSU4gPSAxNTtcblxuLypcclxuICogV2hldGhlciB0byBjb25zaWRlciBsYWJlbHMgaW4gbm9kZSBkaW1lbnNpb25zIG9yIG5vdFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMgPSBmYWxzZTtcblxuLypcclxuICogRGVmYXVsdCBkaW1lbnNpb24gb2YgYSBub24tY29tcG91bmQgbm9kZS5cclxuICovXG5MYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRSA9IDQwO1xuXG4vKlxyXG4gKiBEZWZhdWx0IGRpbWVuc2lvbiBvZiBhIG5vbi1jb21wb3VuZCBub2RlLlxyXG4gKi9cbkxheW91dENvbnN0YW50cy5TSU1QTEVfTk9ERV9IQUxGX1NJWkUgPSBMYXlvdXRDb25zdGFudHMuU0lNUExFX05PREVfU0laRSAvIDI7XG5cbi8qXHJcbiAqIEVtcHR5IGNvbXBvdW5kIG5vZGUgc2l6ZS4gV2hlbiBhIGNvbXBvdW5kIG5vZGUgaXMgZW1wdHksIGl0cyBib3RoXHJcbiAqIGRpbWVuc2lvbnMgc2hvdWxkIGJlIG9mIHRoaXMgdmFsdWUuXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRSA9IDQwO1xuXG4vKlxyXG4gKiBNaW5pbXVtIGxlbmd0aCB0aGF0IGFuIGVkZ2Ugc2hvdWxkIHRha2UgZHVyaW5nIGxheW91dFxyXG4gKi9cbkxheW91dENvbnN0YW50cy5NSU5fRURHRV9MRU5HVEggPSAxO1xuXG4vKlxyXG4gKiBXb3JsZCBib3VuZGFyaWVzIHRoYXQgbGF5b3V0IG9wZXJhdGVzIG9uXHJcbiAqL1xuTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZID0gMTAwMDAwMDtcblxuLypcclxuICogV29ybGQgYm91bmRhcmllcyB0aGF0IHJhbmRvbSBwb3NpdGlvbmluZyBjYW4gYmUgcGVyZm9ybWVkIHdpdGhcclxuICovXG5MYXlvdXRDb25zdGFudHMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSAvIDEwMDA7XG5cbi8qXHJcbiAqIENvb3JkaW5hdGVzIG9mIHRoZSB3b3JsZCBjZW50ZXJcclxuICovXG5MYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggPSAxMjAwO1xuTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZID0gOTAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExheW91dENvbnN0YW50cztcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIElHZW9tZXRyeSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG5mdW5jdGlvbiBMRWRnZShzb3VyY2UsIHRhcmdldCwgdkVkZ2UpIHtcbiAgTEdyYXBoT2JqZWN0LmNhbGwodGhpcywgdkVkZ2UpO1xuXG4gIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0ID0gZmFsc2U7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdkVkZ2U7XG4gIHRoaXMuYmVuZHBvaW50cyA9IFtdO1xuICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbkxFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5cbmZvciAodmFyIHByb3AgaW4gTEdyYXBoT2JqZWN0KSB7XG4gIExFZGdlW3Byb3BdID0gTEdyYXBoT2JqZWN0W3Byb3BdO1xufVxuXG5MRWRnZS5wcm90b3R5cGUuZ2V0U291cmNlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2U7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy50YXJnZXQ7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuaXNJbnRlckdyYXBoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc0ludGVyR3JhcGg7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYmVuZHBvaW50cztcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRMY2EgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxjYTtcbn07XG5cbkxFZGdlLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc291cmNlSW5MY2E7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2EgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRhcmdldEluTGNhO1xufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldE90aGVyRW5kID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKHRoaXMuc291cmNlID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0O1xuICB9IGVsc2UgaWYgKHRoaXMudGFyZ2V0ID09PSBub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IFwiTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2VcIjtcbiAgfVxufTtcblxuTEVkZ2UucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaCA9IGZ1bmN0aW9uIChub2RlLCBncmFwaCkge1xuICB2YXIgb3RoZXJFbmQgPSB0aGlzLmdldE90aGVyRW5kKG5vZGUpO1xuICB2YXIgcm9vdCA9IGdyYXBoLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChvdGhlckVuZC5nZXRPd25lcigpID09IGdyYXBoKSB7XG4gICAgICByZXR1cm4gb3RoZXJFbmQ7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyRW5kLmdldE93bmVyKCkgPT0gcm9vdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgb3RoZXJFbmQgPSBvdGhlckVuZC5nZXRPd25lcigpLmdldFBhcmVudCgpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5MRWRnZS5wcm90b3R5cGUudXBkYXRlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2xpcFBvaW50Q29vcmRpbmF0ZXMgPSBuZXcgQXJyYXkoNCk7XG5cbiAgdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQgPSBJR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSwgdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLCBjbGlwUG9pbnRDb29yZGluYXRlcyk7XG5cbiAgaWYgKCF0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldCkge1xuICAgIHRoaXMubGVuZ3RoWCA9IGNsaXBQb2ludENvb3JkaW5hdGVzWzBdIC0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMl07XG4gICAgdGhpcy5sZW5ndGhZID0gY2xpcFBvaW50Q29vcmRpbmF0ZXNbMV0gLSBjbGlwUG9pbnRDb29yZGluYXRlc1szXTtcblxuICAgIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFgpIDwgMS4wKSB7XG4gICAgICB0aGlzLmxlbmd0aFggPSBJTWF0aC5zaWduKHRoaXMubGVuZ3RoWCk7XG4gICAgfVxuXG4gICAgaWYgKE1hdGguYWJzKHRoaXMubGVuZ3RoWSkgPCAxLjApIHtcbiAgICAgIHRoaXMubGVuZ3RoWSA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhZKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguc3FydCh0aGlzLmxlbmd0aFggKiB0aGlzLmxlbmd0aFggKyB0aGlzLmxlbmd0aFkgKiB0aGlzLmxlbmd0aFkpO1xuICB9XG59O1xuXG5MRWRnZS5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxlbmd0aFggPSB0aGlzLnRhcmdldC5nZXRDZW50ZXJYKCkgLSB0aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCk7XG4gIHRoaXMubGVuZ3RoWSA9IHRoaXMudGFyZ2V0LmdldENlbnRlclkoKSAtIHRoaXMuc291cmNlLmdldENlbnRlclkoKTtcblxuICBpZiAoTWF0aC5hYnModGhpcy5sZW5ndGhYKSA8IDEuMCkge1xuICAgIHRoaXMubGVuZ3RoWCA9IElNYXRoLnNpZ24odGhpcy5sZW5ndGhYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxlbmd0aFkpIDwgMS4wKSB7XG4gICAgdGhpcy5sZW5ndGhZID0gSU1hdGguc2lnbih0aGlzLmxlbmd0aFkpO1xuICB9XG5cbiAgdGhpcy5sZW5ndGggPSBNYXRoLnNxcnQodGhpcy5sZW5ndGhYICogdGhpcy5sZW5ndGhYICsgdGhpcy5sZW5ndGhZICogdGhpcy5sZW5ndGhZKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBMR3JhcGhPYmplY3QodkdyYXBoT2JqZWN0KSB7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdkdyYXBoT2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IExHcmFwaE9iamVjdDtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBMR3JhcGhPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIEludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBSZWN0YW5nbGVEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBSYW5kb21TZWVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuZnVuY3Rpb24gTE5vZGUoZ20sIGxvYywgc2l6ZSwgdk5vZGUpIHtcbiAgLy9BbHRlcm5hdGl2ZSBjb25zdHJ1Y3RvciAxIDogTE5vZGUoTEdyYXBoTWFuYWdlciBnbSwgUG9pbnQgbG9jLCBEaW1lbnNpb24gc2l6ZSwgT2JqZWN0IHZOb2RlKVxuICBpZiAoc2l6ZSA9PSBudWxsICYmIHZOb2RlID09IG51bGwpIHtcbiAgICB2Tm9kZSA9IGxvYztcbiAgfVxuXG4gIExHcmFwaE9iamVjdC5jYWxsKHRoaXMsIHZOb2RlKTtcblxuICAvL0FsdGVybmF0aXZlIGNvbnN0cnVjdG9yIDIgOiBMTm9kZShMYXlvdXQgbGF5b3V0LCBPYmplY3Qgdk5vZGUpXG4gIGlmIChnbS5ncmFwaE1hbmFnZXIgIT0gbnVsbCkgZ20gPSBnbS5ncmFwaE1hbmFnZXI7XG5cbiAgdGhpcy5lc3RpbWF0ZWRTaXplID0gSW50ZWdlci5NSU5fVkFMVUU7XG4gIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHRoaXMudkdyYXBoT2JqZWN0ID0gdk5vZGU7XG4gIHRoaXMuZWRnZXMgPSBbXTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcblxuICBpZiAoc2l6ZSAhPSBudWxsICYmIGxvYyAhPSBudWxsKSB0aGlzLnJlY3QgPSBuZXcgUmVjdGFuZ2xlRChsb2MueCwgbG9jLnksIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtlbHNlIHRoaXMucmVjdCA9IG5ldyBSZWN0YW5nbGVEKCk7XG59XG5cbkxOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE9iamVjdCkge1xuICBMTm9kZVtwcm9wXSA9IExHcmFwaE9iamVjdFtwcm9wXTtcbn1cblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5lZGdlcztcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2hpbGQ7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0T3duZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8vICBpZiAodGhpcy5vd25lciAhPSBudWxsKSB7XG4gIC8vICAgIGlmICghKHRoaXMub3duZXIgPT0gbnVsbCB8fCB0aGlzLm93bmVyLmdldE5vZGVzKCkuaW5kZXhPZih0aGlzKSA+IC0xKSkge1xuICAvLyAgICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICAvLyAgICB9XG4gIC8vICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0V2lkdGggPSBmdW5jdGlvbiAod2lkdGgpIHtcbiAgdGhpcy5yZWN0LndpZHRoID0gd2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbiAoaGVpZ2h0KSB7XG4gIHRoaXMucmVjdC5oZWlnaHQgPSBoZWlnaHQ7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Q2VudGVyWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXJZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRDZW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMucmVjdC54ICsgdGhpcy5yZWN0LndpZHRoIC8gMiwgdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC8gMik7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgUG9pbnREKHRoaXMucmVjdC54LCB0aGlzLnJlY3QueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0UmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXREaWFnb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGggKiB0aGlzLnJlY3Qud2lkdGggKyB0aGlzLnJlY3QuaGVpZ2h0ICogdGhpcy5yZWN0LmhlaWdodCk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgaGFsZiB0aGUgZGlhZ29uYWwgbGVuZ3RoIG9mIHRoaXMgbm9kZS5cbiAqL1xuTE5vZGUucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0ICogdGhpcy5yZWN0LmhlaWdodCArIHRoaXMucmVjdC53aWR0aCAqIHRoaXMucmVjdC53aWR0aCkgLyAyO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnNldFJlY3QgPSBmdW5jdGlvbiAodXBwZXJMZWZ0LCBkaW1lbnNpb24pIHtcbiAgdGhpcy5yZWN0LnggPSB1cHBlckxlZnQueDtcbiAgdGhpcy5yZWN0LnkgPSB1cHBlckxlZnQueTtcbiAgdGhpcy5yZWN0LndpZHRoID0gZGltZW5zaW9uLndpZHRoO1xuICB0aGlzLnJlY3QuaGVpZ2h0ID0gZGltZW5zaW9uLmhlaWdodDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zZXRDZW50ZXIgPSBmdW5jdGlvbiAoY3gsIGN5KSB7XG4gIHRoaXMucmVjdC54ID0gY3ggLSB0aGlzLnJlY3Qud2lkdGggLyAyO1xuICB0aGlzLnJlY3QueSA9IGN5IC0gdGhpcy5yZWN0LmhlaWdodCAvIDI7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuc2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoeCwgeSkge1xuICB0aGlzLnJlY3QueCA9IHg7XG4gIHRoaXMucmVjdC55ID0geTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5tb3ZlQnkgPSBmdW5jdGlvbiAoZHgsIGR5KSB7XG4gIHRoaXMucmVjdC54ICs9IGR4O1xuICB0aGlzLnJlY3QueSArPSBkeTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZSA9IGZ1bmN0aW9uICh0bykge1xuICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgdmFyIGVkZ2U7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmIChlZGdlLnRhcmdldCA9PSB0bykge1xuICAgICAgaWYgKGVkZ2Uuc291cmNlICE9IHNlbGYpIHRocm93IFwiSW5jb3JyZWN0IGVkZ2Ugc291cmNlIVwiO1xuXG4gICAgICBlZGdlTGlzdC5wdXNoKGVkZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEVkZ2VzQmV0d2VlbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICB2YXIgZWRnZUxpc3QgPSBbXTtcbiAgdmFyIGVkZ2U7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcblxuICAgIGlmICghKGVkZ2Uuc291cmNlID09IHNlbGYgfHwgZWRnZS50YXJnZXQgPT0gc2VsZikpIHRocm93IFwiSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXRcIjtcblxuICAgIGlmIChlZGdlLnRhcmdldCA9PSBvdGhlciB8fCBlZGdlLnNvdXJjZSA9PSBvdGhlcikge1xuICAgICAgZWRnZUxpc3QucHVzaChlZGdlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlZGdlTGlzdDtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbmVpZ2hib3JzID0gbmV3IFNldCgpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG5cbiAgICBpZiAoZWRnZS5zb3VyY2UgPT0gc2VsZikge1xuICAgICAgbmVpZ2hib3JzLmFkZChlZGdlLnRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlZGdlLnRhcmdldCAhPSBzZWxmKSB7XG4gICAgICAgIHRocm93IFwiSW5jb3JyZWN0IGluY2lkZW5jeSFcIjtcbiAgICAgIH1cblxuICAgICAgbmVpZ2hib3JzLmFkZChlZGdlLnNvdXJjZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbmVpZ2hib3JzO1xufTtcblxuTE5vZGUucHJvdG90eXBlLndpdGhDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHdpdGhOZWlnaGJvcnNMaXN0ID0gbmV3IFNldCgpO1xuICB2YXIgY2hpbGROb2RlO1xuICB2YXIgY2hpbGRyZW47XG5cbiAgd2l0aE5laWdoYm9yc0xpc3QuYWRkKHRoaXMpO1xuXG4gIGlmICh0aGlzLmNoaWxkICE9IG51bGwpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLmNoaWxkLmdldE5vZGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlID0gbm9kZXNbaV07XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkTm9kZS53aXRoQ2hpbGRyZW4oKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgd2l0aE5laWdoYm9yc0xpc3QuYWRkKG5vZGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhOZWlnaGJvcnNMaXN0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vT2ZDaGlsZHJlbiA9IDA7XG4gIHZhciBjaGlsZE5vZGU7XG5cbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIG5vT2ZDaGlsZHJlbiA9IDE7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5jaGlsZC5nZXROb2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICBub09mQ2hpbGRyZW4gKz0gY2hpbGROb2RlLmdldE5vT2ZDaGlsZHJlbigpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub09mQ2hpbGRyZW4gPT0gMCkge1xuICAgIG5vT2ZDaGlsZHJlbiA9IDE7XG4gIH1cbiAgcmV0dXJuIG5vT2ZDaGlsZHJlbjtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5lc3RpbWF0ZWRTaXplID09IEludGVnZXIuTUlOX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY2hpbGQgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemUgPSAodGhpcy5yZWN0LndpZHRoICsgdGhpcy5yZWN0LmhlaWdodCkgLyAyO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IHRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgICB0aGlzLnJlY3Qud2lkdGggPSB0aGlzLmVzdGltYXRlZFNpemU7XG4gICAgdGhpcy5yZWN0LmhlaWdodCA9IHRoaXMuZXN0aW1hdGVkU2l6ZTtcblxuICAgIHJldHVybiB0aGlzLmVzdGltYXRlZFNpemU7XG4gIH1cbn07XG5cbkxOb2RlLnByb3RvdHlwZS5zY2F0dGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmFuZG9tQ2VudGVyWDtcbiAgdmFyIHJhbmRvbUNlbnRlclk7XG5cbiAgdmFyIG1pblggPSAtTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHZhciBtYXhYID0gTGF5b3V0Q29uc3RhbnRzLklOSVRJQUxfV09STERfQk9VTkRBUlk7XG4gIHJhbmRvbUNlbnRlclggPSBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1ggKyBSYW5kb21TZWVkLm5leHREb3VibGUoKSAqIChtYXhYIC0gbWluWCkgKyBtaW5YO1xuXG4gIHZhciBtaW5ZID0gLUxheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1xuICB2YXIgbWF4WSA9IExheW91dENvbnN0YW50cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO1xuICByYW5kb21DZW50ZXJZID0gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0NFTlRFUl9ZICsgUmFuZG9tU2VlZC5uZXh0RG91YmxlKCkgKiAobWF4WSAtIG1pblkpICsgbWluWTtcblxuICB0aGlzLnJlY3QueCA9IHJhbmRvbUNlbnRlclg7XG4gIHRoaXMucmVjdC55ID0gcmFuZG9tQ2VudGVyWTtcbn07XG5cbkxOb2RlLnByb3RvdHlwZS51cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG4gIGlmICh0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGggIT0gMCkge1xuICAgIC8vIHdyYXAgdGhlIGNoaWxkcmVuIG5vZGVzIGJ5IHJlLWFycmFuZ2luZyB0aGUgYm91bmRhcmllc1xuICAgIHZhciBjaGlsZEdyYXBoID0gdGhpcy5nZXRDaGlsZCgpO1xuICAgIGNoaWxkR3JhcGgudXBkYXRlQm91bmRzKHRydWUpO1xuXG4gICAgdGhpcy5yZWN0LnggPSBjaGlsZEdyYXBoLmdldExlZnQoKTtcbiAgICB0aGlzLnJlY3QueSA9IGNoaWxkR3JhcGguZ2V0VG9wKCk7XG5cbiAgICB0aGlzLnNldFdpZHRoKGNoaWxkR3JhcGguZ2V0UmlnaHQoKSAtIGNoaWxkR3JhcGguZ2V0TGVmdCgpKTtcbiAgICB0aGlzLnNldEhlaWdodChjaGlsZEdyYXBoLmdldEJvdHRvbSgpIC0gY2hpbGRHcmFwaC5nZXRUb3AoKSk7XG5cbiAgICAvLyBVcGRhdGUgY29tcG91bmQgYm91bmRzIGNvbnNpZGVyaW5nIGl0cyBsYWJlbCBwcm9wZXJ0aWVzICAgIFxuICAgIGlmIChMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKSB7XG5cbiAgICAgIHZhciB3aWR0aCA9IGNoaWxkR3JhcGguZ2V0UmlnaHQoKSAtIGNoaWxkR3JhcGguZ2V0TGVmdCgpO1xuICAgICAgdmFyIGhlaWdodCA9IGNoaWxkR3JhcGguZ2V0Qm90dG9tKCkgLSBjaGlsZEdyYXBoLmdldFRvcCgpO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbFdpZHRoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImxlZnRcIikge1xuICAgICAgICAgIHRoaXMucmVjdC54IC09IHRoaXMubGFiZWxXaWR0aDtcbiAgICAgICAgICB0aGlzLnNldFdpZHRoKHdpZHRoICsgdGhpcy5sYWJlbFdpZHRoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImNlbnRlclwiICYmIHRoaXMubGFiZWxXaWR0aCA+IHdpZHRoKSB7XG4gICAgICAgICAgdGhpcy5yZWN0LnggLT0gKHRoaXMubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgICAgdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgIHRoaXMuc2V0V2lkdGgod2lkdGggKyB0aGlzLmxhYmVsV2lkdGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsUG9zVmVydGljYWwgPT0gXCJ0b3BcIikge1xuICAgICAgICAgIHRoaXMucmVjdC55IC09IHRoaXMubGFiZWxIZWlnaHQ7XG4gICAgICAgICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0ICsgdGhpcy5sYWJlbEhlaWdodCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFBvc1ZlcnRpY2FsID09IFwiY2VudGVyXCIgJiYgdGhpcy5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgIHRoaXMucmVjdC55IC09ICh0aGlzLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgICAgdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbFBvc1ZlcnRpY2FsID09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgICB0aGlzLnNldEhlaWdodChoZWlnaHQgKyB0aGlzLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuTE5vZGUucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoID09IEludGVnZXIuTUFYX1ZBTFVFKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cbiAgcmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoO1xufTtcblxuTE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0cmFucykge1xuICB2YXIgbGVmdCA9IHRoaXMucmVjdC54O1xuXG4gIGlmIChsZWZ0ID4gTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZKSB7XG4gICAgbGVmdCA9IExheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWTtcbiAgfSBlbHNlIGlmIChsZWZ0IDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIGxlZnQgPSAtTGF5b3V0Q29uc3RhbnRzLldPUkxEX0JPVU5EQVJZO1xuICB9XG5cbiAgdmFyIHRvcCA9IHRoaXMucmVjdC55O1xuXG4gIGlmICh0b3AgPiBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlkpIHtcbiAgICB0b3AgPSBMYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH0gZWxzZSBpZiAodG9wIDwgLUxheW91dENvbnN0YW50cy5XT1JMRF9CT1VOREFSWSkge1xuICAgIHRvcCA9IC1MYXlvdXRDb25zdGFudHMuV09STERfQk9VTkRBUlk7XG4gIH1cblxuICB2YXIgbGVmdFRvcCA9IG5ldyBQb2ludEQobGVmdCwgdG9wKTtcbiAgdmFyIHZMZWZ0VG9wID0gdHJhbnMuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGxlZnRUb3ApO1xuXG4gIHRoaXMuc2V0TG9jYXRpb24odkxlZnRUb3AueCwgdkxlZnRUb3AueSk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVjdC54O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnggKyB0aGlzLnJlY3Qud2lkdGg7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0VG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0Lnk7XG59O1xuXG5MTm9kZS5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yZWN0LnkgKyB0aGlzLnJlY3QuaGVpZ2h0O1xufTtcblxuTE5vZGUucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3duZXIgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3duZXIuZ2V0UGFyZW50KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExOb2RlO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0Q29uc3RhbnRzKCkge31cblxuLy9GRExheW91dENvbnN0YW50cyBpbmhlcml0cyBzdGF0aWMgcHJvcHMgaW4gTGF5b3V0Q29uc3RhbnRzXG5mb3IgKHZhciBwcm9wIGluIExheW91dENvbnN0YW50cykge1xuICBGRExheW91dENvbnN0YW50c1twcm9wXSA9IExheW91dENvbnN0YW50c1twcm9wXTtcbn1cblxuRkRMYXlvdXRDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSAyNTAwO1xuXG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIID0gNTA7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCA9IDAuNDU7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCA9IDQ1MDAuMDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCA9IDAuNDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCA9IDEuMDtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSAzLjg7XG5GRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SID0gMS41O1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04gPSB0cnVlO1xuRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OID0gdHJ1ZTtcbkZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgPSAwLjM7XG5GRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SID0gMC4zMztcbkZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCA9IDEwMDA7XG5GRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQgPSA1MDAwO1xuRkRMYXlvdXRDb25zdGFudHMuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMID0gMTAwLjA7XG5GRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlQgPSBGRExheW91dENvbnN0YW50cy5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwgKiAzO1xuRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDEwLjA7XG5GRExheW91dENvbnN0YW50cy5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QgPSAxMDA7XG5GRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gMC4xO1xuRkRMYXlvdXRDb25zdGFudHMuTUlOX0VER0VfTEVOR1RIID0gMTtcbkZETGF5b3V0Q29uc3RhbnRzLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EID0gMTA7XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXRDb25zdGFudHM7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBQb2ludEQoeCwgeSkge1xuICBpZiAoeCA9PSBudWxsICYmIHkgPT0gbnVsbCkge1xuICAgIHRoaXMueCA9IDA7XG4gICAgdGhpcy55ID0gMDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH1cbn1cblxuUG9pbnRELnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55O1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcbiAgdGhpcy54ID0geDtcbn07XG5cblBvaW50RC5wcm90b3R5cGUuc2V0WSA9IGZ1bmN0aW9uICh5KSB7XG4gIHRoaXMueSA9IHk7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLmdldERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHQpIHtcbiAgcmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueCAtIHB0LngsIHRoaXMueSAtIHB0LnkpO1xufTtcblxuUG9pbnRELnByb3RvdHlwZS5nZXRDb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFBvaW50RCh0aGlzLngsIHRoaXMueSk7XG59O1xuXG5Qb2ludEQucHJvdG90eXBlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChkaW0pIHtcbiAgdGhpcy54ICs9IGRpbS53aWR0aDtcbiAgdGhpcy55ICs9IGRpbS5oZWlnaHQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb2ludEQ7XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBMR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBMTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIFJlY3RhbmdsZUQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIExpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxuZnVuY3Rpb24gTEdyYXBoKHBhcmVudCwgb2JqMiwgdkdyYXBoKSB7XG4gIExHcmFwaE9iamVjdC5jYWxsKHRoaXMsIHZHcmFwaCk7XG4gIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IEludGVnZXIuTUlOX1ZBTFVFO1xuICB0aGlzLm1hcmdpbiA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVBIX01BUkdJTjtcbiAgdGhpcy5lZGdlcyA9IFtdO1xuICB0aGlzLm5vZGVzID0gW107XG4gIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgaWYgKG9iajIgIT0gbnVsbCAmJiBvYmoyIGluc3RhbmNlb2YgTEdyYXBoTWFuYWdlcikge1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gb2JqMjtcbiAgfSBlbHNlIGlmIChvYmoyICE9IG51bGwgJiYgb2JqMiBpbnN0YW5jZW9mIExheW91dCkge1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gb2JqMi5ncmFwaE1hbmFnZXI7XG4gIH1cbn1cblxuTEdyYXBoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoT2JqZWN0LnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE9iamVjdCkge1xuICBMR3JhcGhbcHJvcF0gPSBMR3JhcGhPYmplY3RbcHJvcF07XG59XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZWRnZXM7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGVmdDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0UmlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJpZ2h0O1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5nZXRUb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnRvcDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuZ2V0Qm90dG9tID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ib3R0b207XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmlzQ29ubmVjdGVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZDtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9iajEsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpIHtcbiAgaWYgKHNvdXJjZU5vZGUgPT0gbnVsbCAmJiB0YXJnZXROb2RlID09IG51bGwpIHtcbiAgICB2YXIgbmV3Tm9kZSA9IG9iajE7XG4gICAgaWYgKHRoaXMuZ3JhcGhNYW5hZ2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiR3JhcGggaGFzIG5vIGdyYXBoIG1nciFcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKG5ld05vZGUpID4gLTEpIHtcbiAgICAgIHRocm93IFwiTm9kZSBhbHJlYWR5IGluIGdyYXBoIVwiO1xuICAgIH1cbiAgICBuZXdOb2RlLm93bmVyID0gdGhpcztcbiAgICB0aGlzLmdldE5vZGVzKCkucHVzaChuZXdOb2RlKTtcblxuICAgIHJldHVybiBuZXdOb2RlO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXdFZGdlID0gb2JqMTtcbiAgICBpZiAoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihzb3VyY2VOb2RlKSA+IC0xICYmIHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHRhcmdldE5vZGUpID4gLTEpKSB7XG4gICAgICB0aHJvdyBcIlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoIVwiO1xuICAgIH1cblxuICAgIGlmICghKHNvdXJjZU5vZGUub3duZXIgPT0gdGFyZ2V0Tm9kZS5vd25lciAmJiBzb3VyY2VOb2RlLm93bmVyID09IHRoaXMpKSB7XG4gICAgICB0aHJvdyBcIkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCFcIjtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlTm9kZS5vd25lciAhPSB0YXJnZXROb2RlLm93bmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBzZXQgc291cmNlIGFuZCB0YXJnZXRcbiAgICBuZXdFZGdlLnNvdXJjZSA9IHNvdXJjZU5vZGU7XG4gICAgbmV3RWRnZS50YXJnZXQgPSB0YXJnZXROb2RlO1xuXG4gICAgLy8gc2V0IGFzIGludHJhLWdyYXBoIGVkZ2VcbiAgICBuZXdFZGdlLmlzSW50ZXJHcmFwaCA9IGZhbHNlO1xuXG4gICAgLy8gYWRkIHRvIGdyYXBoIGVkZ2UgbGlzdFxuICAgIHRoaXMuZ2V0RWRnZXMoKS5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgLy8gYWRkIHRvIGluY2lkZW5jeSBsaXN0c1xuICAgIHNvdXJjZU5vZGUuZWRnZXMucHVzaChuZXdFZGdlKTtcblxuICAgIGlmICh0YXJnZXROb2RlICE9IHNvdXJjZU5vZGUpIHtcbiAgICAgIHRhcmdldE5vZGUuZWRnZXMucHVzaChuZXdFZGdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RWRnZTtcbiAgfVxufTtcblxuTEdyYXBoLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBub2RlID0gb2JqO1xuICBpZiAob2JqIGluc3RhbmNlb2YgTE5vZGUpIHtcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIk5vZGUgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKCEobm9kZS5vd25lciAhPSBudWxsICYmIG5vZGUub3duZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiT3duZXIgZ3JhcGggaXMgaW52YWxpZCFcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JhcGhNYW5hZ2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IFwiT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkIVwiO1xuICAgIH1cbiAgICAvLyByZW1vdmUgaW5jaWRlbnQgZWRnZXMgZmlyc3QgKG1ha2UgYSBjb3B5IHRvIGRvIGl0IHNhZmVseSlcbiAgICB2YXIgZWRnZXNUb0JlUmVtb3ZlZCA9IG5vZGUuZWRnZXMuc2xpY2UoKTtcbiAgICB2YXIgZWRnZTtcbiAgICB2YXIgcyA9IGVkZ2VzVG9CZVJlbW92ZWQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBlZGdlID0gZWRnZXNUb0JlUmVtb3ZlZFtpXTtcblxuICAgICAgaWYgKGVkZ2UuaXNJbnRlckdyYXBoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShlZGdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkZ2Uuc291cmNlLm93bmVyLnJlbW92ZShlZGdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBub3cgdGhlIG5vZGUgaXRzZWxmXG4gICAgdmFyIGluZGV4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgdGhyb3cgXCJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhXCI7XG4gICAgfVxuXG4gICAgdGhpcy5ub2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExFZGdlKSB7XG4gICAgdmFyIGVkZ2UgPSBvYmo7XG4gICAgaWYgKGVkZ2UgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJFZGdlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghKGVkZ2Uuc291cmNlICE9IG51bGwgJiYgZWRnZS50YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCFcIjtcbiAgICB9XG4gICAgaWYgKCEoZWRnZS5zb3VyY2Uub3duZXIgIT0gbnVsbCAmJiBlZGdlLnRhcmdldC5vd25lciAhPSBudWxsICYmIGVkZ2Uuc291cmNlLm93bmVyID09IHRoaXMgJiYgZWRnZS50YXJnZXQub3duZXIgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCFcIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5kZXggPSBlZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIHZhciB0YXJnZXRJbmRleCA9IGVkZ2UudGFyZ2V0LmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKCEoc291cmNlSW5kZXggPiAtMSAmJiB0YXJnZXRJbmRleCA+IC0xKSkge1xuICAgICAgdGhyb3cgXCJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlIVwiO1xuICAgIH1cblxuICAgIGVkZ2Uuc291cmNlLmVkZ2VzLnNwbGljZShzb3VyY2VJbmRleCwgMSk7XG5cbiAgICBpZiAoZWRnZS50YXJnZXQgIT0gZWRnZS5zb3VyY2UpIHtcbiAgICAgIGVkZ2UudGFyZ2V0LmVkZ2VzLnNwbGljZSh0YXJnZXRJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gZWRnZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKGVkZ2UpO1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgdGhyb3cgXCJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhXCI7XG4gICAgfVxuXG4gICAgZWRnZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0b3AgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIGxlZnQgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIG5vZGVUb3A7XG4gIHZhciBub2RlTGVmdDtcbiAgdmFyIG1hcmdpbjtcblxuICB2YXIgbm9kZXMgPSB0aGlzLmdldE5vZGVzKCk7XG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG4gICAgbm9kZVRvcCA9IGxOb2RlLmdldFRvcCgpO1xuICAgIG5vZGVMZWZ0ID0gbE5vZGUuZ2V0TGVmdCgpO1xuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC8vIERvIHdlIGhhdmUgYW55IG5vZGVzIGluIHRoaXMgZ3JhcGg/XG4gIGlmICh0b3AgPT0gSW50ZWdlci5NQVhfVkFMVUUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChub2Rlc1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCAhPSB1bmRlZmluZWQpIHtcbiAgICBtYXJnaW4gPSBub2Rlc1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDtcbiAgfSBlbHNlIHtcbiAgICBtYXJnaW4gPSB0aGlzLm1hcmdpbjtcbiAgfVxuXG4gIHRoaXMubGVmdCA9IGxlZnQgLSBtYXJnaW47XG4gIHRoaXMudG9wID0gdG9wIC0gbWFyZ2luO1xuXG4gIC8vIEFwcGx5IHRoZSBtYXJnaW5zIGFuZCByZXR1cm4gdGhlIHJlc3VsdFxuICByZXR1cm4gbmV3IFBvaW50KHRoaXMubGVmdCwgdGhpcy50b3ApO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS51cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XG4gIC8vIGNhbGN1bGF0ZSBib3VuZHNcbiAgdmFyIGxlZnQgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHJpZ2h0ID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgdG9wID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBib3R0b20gPSAtSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBub2RlTGVmdDtcbiAgdmFyIG5vZGVSaWdodDtcbiAgdmFyIG5vZGVUb3A7XG4gIHZhciBub2RlQm90dG9tO1xuICB2YXIgbWFyZ2luO1xuXG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXM7XG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKHJlY3Vyc2l2ZSAmJiBsTm9kZS5jaGlsZCAhPSBudWxsKSB7XG4gICAgICBsTm9kZS51cGRhdGVCb3VuZHMoKTtcbiAgICB9XG4gICAgbm9kZUxlZnQgPSBsTm9kZS5nZXRMZWZ0KCk7XG4gICAgbm9kZVJpZ2h0ID0gbE5vZGUuZ2V0UmlnaHQoKTtcbiAgICBub2RlVG9wID0gbE5vZGUuZ2V0VG9wKCk7XG4gICAgbm9kZUJvdHRvbSA9IGxOb2RlLmdldEJvdHRvbSgpO1xuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cblxuICAgIGlmIChyaWdodCA8IG5vZGVSaWdodCkge1xuICAgICAgcmlnaHQgPSBub2RlUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbSA8IG5vZGVCb3R0b20pIHtcbiAgICAgIGJvdHRvbSA9IG5vZGVCb3R0b207XG4gICAgfVxuICB9XG5cbiAgdmFyIGJvdW5kaW5nUmVjdCA9IG5ldyBSZWN0YW5nbGVEKGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApO1xuICBpZiAobGVmdCA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkge1xuICAgIHRoaXMubGVmdCA9IHRoaXMucGFyZW50LmdldExlZnQoKTtcbiAgICB0aGlzLnJpZ2h0ID0gdGhpcy5wYXJlbnQuZ2V0UmlnaHQoKTtcbiAgICB0aGlzLnRvcCA9IHRoaXMucGFyZW50LmdldFRvcCgpO1xuICAgIHRoaXMuYm90dG9tID0gdGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCk7XG4gIH1cblxuICBpZiAobm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgbWFyZ2luID0gbm9kZXNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ7XG4gIH0gZWxzZSB7XG4gICAgbWFyZ2luID0gdGhpcy5tYXJnaW47XG4gIH1cblxuICB0aGlzLmxlZnQgPSBib3VuZGluZ1JlY3QueCAtIG1hcmdpbjtcbiAgdGhpcy5yaWdodCA9IGJvdW5kaW5nUmVjdC54ICsgYm91bmRpbmdSZWN0LndpZHRoICsgbWFyZ2luO1xuICB0aGlzLnRvcCA9IGJvdW5kaW5nUmVjdC55IC0gbWFyZ2luO1xuICB0aGlzLmJvdHRvbSA9IGJvdW5kaW5nUmVjdC55ICsgYm91bmRpbmdSZWN0LmhlaWdodCArIG1hcmdpbjtcbn07XG5cbkxHcmFwaC5jYWxjdWxhdGVCb3VuZHMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgdmFyIGxlZnQgPSBJbnRlZ2VyLk1BWF9WQUxVRTtcbiAgdmFyIHJpZ2h0ID0gLUludGVnZXIuTUFYX1ZBTFVFO1xuICB2YXIgdG9wID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBib3R0b20gPSAtSW50ZWdlci5NQVhfVkFMVUU7XG4gIHZhciBub2RlTGVmdDtcbiAgdmFyIG5vZGVSaWdodDtcbiAgdmFyIG5vZGVUb3A7XG4gIHZhciBub2RlQm90dG9tO1xuXG4gIHZhciBzID0gbm9kZXMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgdmFyIGxOb2RlID0gbm9kZXNbaV07XG4gICAgbm9kZUxlZnQgPSBsTm9kZS5nZXRMZWZ0KCk7XG4gICAgbm9kZVJpZ2h0ID0gbE5vZGUuZ2V0UmlnaHQoKTtcbiAgICBub2RlVG9wID0gbE5vZGUuZ2V0VG9wKCk7XG4gICAgbm9kZUJvdHRvbSA9IGxOb2RlLmdldEJvdHRvbSgpO1xuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cblxuICAgIGlmIChyaWdodCA8IG5vZGVSaWdodCkge1xuICAgICAgcmlnaHQgPSBub2RlUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbSA8IG5vZGVCb3R0b20pIHtcbiAgICAgIGJvdHRvbSA9IG5vZGVCb3R0b207XG4gICAgfVxuICB9XG5cbiAgdmFyIGJvdW5kaW5nUmVjdCA9IG5ldyBSZWN0YW5nbGVEKGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApO1xuXG4gIHJldHVybiBib3VuZGluZ1JlY3Q7XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMgPT0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpO1xuICB9XG59O1xuXG5MR3JhcGgucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmVzdGltYXRlZFNpemUgPT0gSW50ZWdlci5NSU5fVkFMVUUpIHtcbiAgICB0aHJvdyBcImFzc2VydCBmYWlsZWRcIjtcbiAgfVxuICByZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplO1xufTtcblxuTEdyYXBoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuICAgIHNpemUgKz0gbE5vZGUuY2FsY0VzdGltYXRlZFNpemUoKTtcbiAgfVxuXG4gIGlmIChzaXplID09IDApIHtcbiAgICB0aGlzLmVzdGltYXRlZFNpemUgPSBMYXlvdXRDb25zdGFudHMuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZXN0aW1hdGVkU2l6ZSA9IHNpemUgLyBNYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZTtcbn07XG5cbkxHcmFwaC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0aGlzLm5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHF1ZXVlID0gbmV3IExpbmtlZExpc3QoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciBjdXJyZW50Tm9kZSA9IHRoaXMubm9kZXNbMF07XG4gIHZhciBuZWlnaGJvckVkZ2VzO1xuICB2YXIgY3VycmVudE5laWdoYm9yO1xuICB2YXIgY2hpbGRyZW5PZk5vZGUgPSBjdXJyZW50Tm9kZS53aXRoQ2hpbGRyZW4oKTtcbiAgY2hpbGRyZW5PZk5vZGUuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgIHF1ZXVlLnB1c2gobm9kZSk7XG4gICAgdmlzaXRlZC5hZGQobm9kZSk7XG4gIH0pO1xuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgICBjdXJyZW50Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAvLyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoaXMgbm9kZVxuICAgIG5laWdoYm9yRWRnZXMgPSBjdXJyZW50Tm9kZS5nZXRFZGdlcygpO1xuICAgIHZhciBzaXplID0gbmVpZ2hib3JFZGdlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhciBuZWlnaGJvckVkZ2UgPSBuZWlnaGJvckVkZ2VzW2ldO1xuICAgICAgY3VycmVudE5laWdoYm9yID0gbmVpZ2hib3JFZGdlLmdldE90aGVyRW5kSW5HcmFwaChjdXJyZW50Tm9kZSwgdGhpcyk7XG5cbiAgICAgIC8vIEFkZCB1bnZpc2l0ZWQgbmVpZ2hib3JzIHRvIHRoZSBsaXN0IHRvIHZpc2l0XG4gICAgICBpZiAoY3VycmVudE5laWdoYm9yICE9IG51bGwgJiYgIXZpc2l0ZWQuaGFzKGN1cnJlbnROZWlnaGJvcikpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuT2ZOZWlnaGJvciA9IGN1cnJlbnROZWlnaGJvci53aXRoQ2hpbGRyZW4oKTtcblxuICAgICAgICBjaGlsZHJlbk9mTmVpZ2hib3IuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHF1ZXVlLnB1c2gobm9kZSk7XG4gICAgICAgICAgdmlzaXRlZC5hZGQobm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcblxuICBpZiAodmlzaXRlZC5zaXplID49IHRoaXMubm9kZXMubGVuZ3RoKSB7XG4gICAgdmFyIG5vT2ZWaXNpdGVkSW5UaGlzR3JhcGggPSAwO1xuXG4gICAgdmlzaXRlZC5mb3JFYWNoKGZ1bmN0aW9uICh2aXNpdGVkTm9kZSkge1xuICAgICAgaWYgKHZpc2l0ZWROb2RlLm93bmVyID09IHNlbGYpIHtcbiAgICAgICAgbm9PZlZpc2l0ZWRJblRoaXNHcmFwaCsrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG5vT2ZWaXNpdGVkSW5UaGlzR3JhcGggPT0gdGhpcy5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMR3JhcGg7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEdyYXBoO1xudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuZnVuY3Rpb24gTEdyYXBoTWFuYWdlcihsYXlvdXQpIHtcbiAgTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsgLy8gSXQgbWF5IGJlIGJldHRlciB0byBpbml0aWxpemUgdGhpcyBvdXQgb2YgdGhpcyBmdW5jdGlvbiBidXQgaXQgZ2l2ZXMgYW4gZXJyb3IgKFJpZ2h0LWhhbmQgc2lkZSBvZiAnaW5zdGFuY2VvZicgaXMgbm90IGNhbGxhYmxlKSBub3cuXG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuXG4gIHRoaXMuZ3JhcGhzID0gW107XG4gIHRoaXMuZWRnZXMgPSBbXTtcbn1cblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuYWRkUm9vdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5ncmFwaCA9IHRoaXMubGF5b3V0Lm5ld0dyYXBoKCk7XG4gIHZhciBubm9kZSA9IHRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCk7XG4gIHZhciByb290ID0gdGhpcy5hZGQobmdyYXBoLCBubm9kZSk7XG4gIHRoaXMuc2V0Um9vdEdyYXBoKHJvb3QpO1xuICByZXR1cm4gdGhpcy5yb290R3JhcGg7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmV3R3JhcGgsIHBhcmVudE5vZGUsIG5ld0VkZ2UsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpIHtcbiAgLy90aGVyZSBhcmUganVzdCAyIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGVuIGl0IGFkZHMgYW4gTEdyYXBoIGVsc2UgaXQgYWRkcyBhbiBMRWRnZVxuICBpZiAobmV3RWRnZSA9PSBudWxsICYmIHNvdXJjZU5vZGUgPT0gbnVsbCAmJiB0YXJnZXROb2RlID09IG51bGwpIHtcbiAgICBpZiAobmV3R3JhcGggPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJHcmFwaCBpcyBudWxsIVwiO1xuICAgIH1cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBcIlBhcmVudCBub2RlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyYXBocy5pbmRleE9mKG5ld0dyYXBoKSA+IC0xKSB7XG4gICAgICB0aHJvdyBcIkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhXCI7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaHMucHVzaChuZXdHcmFwaCk7XG5cbiAgICBpZiAobmV3R3JhcGgucGFyZW50ICE9IG51bGwpIHtcbiAgICAgIHRocm93IFwiQWxyZWFkeSBoYXMgYSBwYXJlbnQhXCI7XG4gICAgfVxuICAgIGlmIChwYXJlbnROb2RlLmNoaWxkICE9IG51bGwpIHtcbiAgICAgIHRocm93IFwiQWxyZWFkeSBoYXMgYSBjaGlsZCFcIjtcbiAgICB9XG5cbiAgICBuZXdHcmFwaC5wYXJlbnQgPSBwYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuY2hpbGQgPSBuZXdHcmFwaDtcblxuICAgIHJldHVybiBuZXdHcmFwaDtcbiAgfSBlbHNlIHtcbiAgICAvL2NoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnNcbiAgICB0YXJnZXROb2RlID0gbmV3RWRnZTtcbiAgICBzb3VyY2VOb2RlID0gcGFyZW50Tm9kZTtcbiAgICBuZXdFZGdlID0gbmV3R3JhcGg7XG4gICAgdmFyIHNvdXJjZUdyYXBoID0gc291cmNlTm9kZS5nZXRPd25lcigpO1xuICAgIHZhciB0YXJnZXRHcmFwaCA9IHRhcmdldE5vZGUuZ2V0T3duZXIoKTtcblxuICAgIGlmICghKHNvdXJjZUdyYXBoICE9IG51bGwgJiYgc291cmNlR3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgPT0gdGhpcykpIHtcbiAgICAgIHRocm93IFwiU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciFcIjtcbiAgICB9XG4gICAgaWYgKCEodGFyZ2V0R3JhcGggIT0gbnVsbCAmJiB0YXJnZXRHcmFwaC5nZXRHcmFwaE1hbmFnZXIoKSA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VHcmFwaCA9PSB0YXJnZXRHcmFwaCkge1xuICAgICAgbmV3RWRnZS5pc0ludGVyR3JhcGggPSBmYWxzZTtcbiAgICAgIHJldHVybiBzb3VyY2VHcmFwaC5hZGQobmV3RWRnZSwgc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0VkZ2UuaXNJbnRlckdyYXBoID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHNvdXJjZSBhbmQgdGFyZ2V0XG4gICAgICBuZXdFZGdlLnNvdXJjZSA9IHNvdXJjZU5vZGU7XG4gICAgICBuZXdFZGdlLnRhcmdldCA9IHRhcmdldE5vZGU7XG5cbiAgICAgIC8vIGFkZCBlZGdlIHRvIGludGVyLWdyYXBoIGVkZ2UgbGlzdFxuICAgICAgaWYgKHRoaXMuZWRnZXMuaW5kZXhPZihuZXdFZGdlKSA+IC0xKSB7XG4gICAgICAgIHRocm93IFwiRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCFcIjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgICAvLyBhZGQgZWRnZSB0byBzb3VyY2UgYW5kIHRhcmdldCBpbmNpZGVuY3kgbGlzdHNcbiAgICAgIGlmICghKG5ld0VkZ2Uuc291cmNlICE9IG51bGwgJiYgbmV3RWRnZS50YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgICAgdGhyb3cgXCJFZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghKG5ld0VkZ2Uuc291cmNlLmVkZ2VzLmluZGV4T2YobmV3RWRnZSkgPT0gLTEgJiYgbmV3RWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihuZXdFZGdlKSA9PSAtMSkpIHtcbiAgICAgICAgdGhyb3cgXCJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhXCI7XG4gICAgICB9XG5cbiAgICAgIG5ld0VkZ2Uuc291cmNlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgICBuZXdFZGdlLnRhcmdldC5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xuXG4gICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICB9XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChsT2JqKSB7XG4gIGlmIChsT2JqIGluc3RhbmNlb2YgTEdyYXBoKSB7XG4gICAgdmFyIGdyYXBoID0gbE9iajtcbiAgICBpZiAoZ3JhcGguZ2V0R3JhcGhNYW5hZ2VyKCkgIT0gdGhpcykge1xuICAgICAgdGhyb3cgXCJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3JcIjtcbiAgICB9XG4gICAgaWYgKCEoZ3JhcGggPT0gdGhpcy5yb290R3JhcGggfHwgZ3JhcGgucGFyZW50ICE9IG51bGwgJiYgZ3JhcGgucGFyZW50LmdyYXBoTWFuYWdlciA9PSB0aGlzKSkge1xuICAgICAgdGhyb3cgXCJJbnZhbGlkIHBhcmVudCBub2RlIVwiO1xuICAgIH1cblxuICAgIC8vIGZpcnN0IHRoZSBlZGdlcyAobWFrZSBhIGNvcHkgdG8gZG8gaXQgc2FmZWx5KVxuICAgIHZhciBlZGdlc1RvQmVSZW1vdmVkID0gW107XG5cbiAgICBlZGdlc1RvQmVSZW1vdmVkID0gZWRnZXNUb0JlUmVtb3ZlZC5jb25jYXQoZ3JhcGguZ2V0RWRnZXMoKSk7XG5cbiAgICB2YXIgZWRnZTtcbiAgICB2YXIgcyA9IGVkZ2VzVG9CZVJlbW92ZWQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBlZGdlID0gZWRnZXNUb0JlUmVtb3ZlZFtpXTtcbiAgICAgIGdyYXBoLnJlbW92ZShlZGdlKTtcbiAgICB9XG5cbiAgICAvLyB0aGVuIHRoZSBub2RlcyAobWFrZSBhIGNvcHkgdG8gZG8gaXQgc2FmZWx5KVxuICAgIHZhciBub2Rlc1RvQmVSZW1vdmVkID0gW107XG5cbiAgICBub2Rlc1RvQmVSZW1vdmVkID0gbm9kZXNUb0JlUmVtb3ZlZC5jb25jYXQoZ3JhcGguZ2V0Tm9kZXMoKSk7XG5cbiAgICB2YXIgbm9kZTtcbiAgICBzID0gbm9kZXNUb0JlUmVtb3ZlZC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1RvQmVSZW1vdmVkW2ldO1xuICAgICAgZ3JhcGgucmVtb3ZlKG5vZGUpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGdyYXBoIGlzIHRoZSByb290XG4gICAgaWYgKGdyYXBoID09IHRoaXMucm9vdEdyYXBoKSB7XG4gICAgICB0aGlzLnNldFJvb3RHcmFwaChudWxsKTtcbiAgICB9XG5cbiAgICAvLyBub3cgcmVtb3ZlIHRoZSBncmFwaCBpdHNlbGZcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdyYXBocy5pbmRleE9mKGdyYXBoKTtcbiAgICB0aGlzLmdyYXBocy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgLy8gYWxzbyByZXNldCB0aGUgcGFyZW50IG9mIHRoZSBncmFwaFxuICAgIGdyYXBoLnBhcmVudCA9IG51bGw7XG4gIH0gZWxzZSBpZiAobE9iaiBpbnN0YW5jZW9mIExFZGdlKSB7XG4gICAgZWRnZSA9IGxPYmo7XG4gICAgaWYgKGVkZ2UgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJFZGdlIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmICghZWRnZS5pc0ludGVyR3JhcGgpIHtcbiAgICAgIHRocm93IFwiTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhXCI7XG4gICAgfVxuICAgIGlmICghKGVkZ2Uuc291cmNlICE9IG51bGwgJiYgZWRnZS50YXJnZXQgIT0gbnVsbCkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCFcIjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgZWRnZSBmcm9tIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzJyBpbmNpZGVuY3kgbGlzdHNcblxuICAgIGlmICghKGVkZ2Uuc291cmNlLmVkZ2VzLmluZGV4T2YoZWRnZSkgIT0gLTEgJiYgZWRnZS50YXJnZXQuZWRnZXMuaW5kZXhPZihlZGdlKSAhPSAtMSkpIHtcbiAgICAgIHRocm93IFwiU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSFcIjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBlZGdlLnNvdXJjZS5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGVkZ2Uuc291cmNlLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBlZGdlLnRhcmdldC5lZGdlcy5pbmRleE9mKGVkZ2UpO1xuICAgIGVkZ2UudGFyZ2V0LmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAvLyByZW1vdmUgZWRnZSBmcm9tIG93bmVyIGdyYXBoIG1hbmFnZXIncyBpbnRlci1ncmFwaCBlZGdlIGxpc3RcblxuICAgIGlmICghKGVkZ2Uuc291cmNlLm93bmVyICE9IG51bGwgJiYgZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkgIT0gbnVsbCkpIHtcbiAgICAgIHRocm93IFwiRWRnZSBvd25lciBncmFwaCBvciBvd25lciBncmFwaCBtYW5hZ2VyIGlzIG51bGwhXCI7XG4gICAgfVxuICAgIGlmIChlZGdlLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGVkZ2UpID09IC0xKSB7XG4gICAgICB0aHJvdyBcIk5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0IVwiO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGVkZ2Uuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgZWRnZS5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUudXBkYXRlQm91bmRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHModHJ1ZSk7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRHcmFwaHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBocztcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldEFsbE5vZGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hbGxOb2RlcyA9PSBudWxsKSB7XG4gICAgdmFyIG5vZGVMaXN0ID0gW107XG4gICAgdmFyIGdyYXBocyA9IHRoaXMuZ2V0R3JhcGhzKCk7XG4gICAgdmFyIHMgPSBncmFwaHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICBub2RlTGlzdCA9IG5vZGVMaXN0LmNvbmNhdChncmFwaHNbaV0uZ2V0Tm9kZXMoKSk7XG4gICAgfVxuICAgIHRoaXMuYWxsTm9kZXMgPSBub2RlTGlzdDtcbiAgfVxuICByZXR1cm4gdGhpcy5hbGxOb2Rlcztcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLnJlc2V0QWxsTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWxsTm9kZXMgPSBudWxsO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUucmVzZXRBbGxFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hbGxFZGdlcyA9IG51bGw7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gbnVsbDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmdldEFsbEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5hbGxFZGdlcyA9PSBudWxsKSB7XG4gICAgdmFyIGVkZ2VMaXN0ID0gW107XG4gICAgdmFyIGdyYXBocyA9IHRoaXMuZ2V0R3JhcGhzKCk7XG4gICAgdmFyIHMgPSBncmFwaHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlTGlzdCA9IGVkZ2VMaXN0LmNvbmNhdChncmFwaHNbaV0uZ2V0RWRnZXMoKSk7XG4gICAgfVxuXG4gICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQodGhpcy5lZGdlcyk7XG5cbiAgICB0aGlzLmFsbEVkZ2VzID0gZWRnZUxpc3Q7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYWxsRWRnZXM7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb247XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiA9IGZ1bmN0aW9uIChub2RlTGlzdCkge1xuICBpZiAodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiAhPSBudWxsKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cblxuICB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gbm9kZUxpc3Q7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRSb290ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5yb290R3JhcGg7XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5zZXRSb290R3JhcGggPSBmdW5jdGlvbiAoZ3JhcGgpIHtcbiAgaWYgKGdyYXBoLmdldEdyYXBoTWFuYWdlcigpICE9IHRoaXMpIHtcbiAgICB0aHJvdyBcIlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyIVwiO1xuICB9XG5cbiAgdGhpcy5yb290R3JhcGggPSBncmFwaDtcbiAgLy8gcm9vdCBncmFwaCBtdXN0IGhhdmUgYSByb290IG5vZGUgYXNzb2NpYXRlZCB3aXRoIGl0IGZvciBjb252ZW5pZW5jZVxuICBpZiAoZ3JhcGgucGFyZW50ID09IG51bGwpIHtcbiAgICBncmFwaC5wYXJlbnQgPSB0aGlzLmxheW91dC5uZXdOb2RlKFwiUm9vdCBub2RlXCIpO1xuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5nZXRMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxheW91dDtcbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmlzT25lQW5jZXN0b3JPZk90aGVyID0gZnVuY3Rpb24gKGZpcnN0Tm9kZSwgc2Vjb25kTm9kZSkge1xuICBpZiAoIShmaXJzdE5vZGUgIT0gbnVsbCAmJiBzZWNvbmROb2RlICE9IG51bGwpKSB7XG4gICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gIH1cblxuICBpZiAoZmlyc3ROb2RlID09IHNlY29uZE5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJcyBzZWNvbmQgbm9kZSBhbiBhbmNlc3RvciBvZiB0aGUgZmlyc3Qgb25lP1xuICB2YXIgb3duZXJHcmFwaCA9IGZpcnN0Tm9kZS5nZXRPd25lcigpO1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBkbyB7XG4gICAgcGFyZW50Tm9kZSA9IG93bmVyR3JhcGguZ2V0UGFyZW50KCk7XG5cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFyZW50Tm9kZSA9PSBzZWNvbmROb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvd25lckdyYXBoID0gcGFyZW50Tm9kZS5nZXRPd25lcigpO1xuICAgIGlmIChvd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG4gIC8vIElzIGZpcnN0IG5vZGUgYW4gYW5jZXN0b3Igb2YgdGhlIHNlY29uZCBvbmU/XG4gIG93bmVyR3JhcGggPSBzZWNvbmROb2RlLmdldE93bmVyKCk7XG5cbiAgZG8ge1xuICAgIHBhcmVudE5vZGUgPSBvd25lckdyYXBoLmdldFBhcmVudCgpO1xuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudE5vZGUgPT0gZmlyc3ROb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvd25lckdyYXBoID0gcGFyZW50Tm9kZS5nZXRPd25lcigpO1xuICAgIGlmIChvd25lckdyYXBoID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVkZ2U7XG4gIHZhciBzb3VyY2VOb2RlO1xuICB2YXIgdGFyZ2V0Tm9kZTtcbiAgdmFyIHNvdXJjZUFuY2VzdG9yR3JhcGg7XG4gIHZhciB0YXJnZXRBbmNlc3RvckdyYXBoO1xuXG4gIHZhciBlZGdlcyA9IHRoaXMuZ2V0QWxsRWRnZXMoKTtcbiAgdmFyIHMgPSBlZGdlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgZWRnZSA9IGVkZ2VzW2ldO1xuXG4gICAgc291cmNlTm9kZSA9IGVkZ2Uuc291cmNlO1xuICAgIHRhcmdldE5vZGUgPSBlZGdlLnRhcmdldDtcbiAgICBlZGdlLmxjYSA9IG51bGw7XG4gICAgZWRnZS5zb3VyY2VJbkxjYSA9IHNvdXJjZU5vZGU7XG4gICAgZWRnZS50YXJnZXRJbkxjYSA9IHRhcmdldE5vZGU7XG5cbiAgICBpZiAoc291cmNlTm9kZSA9PSB0YXJnZXROb2RlKSB7XG4gICAgICBlZGdlLmxjYSA9IHNvdXJjZU5vZGUuZ2V0T3duZXIoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHNvdXJjZUFuY2VzdG9yR3JhcGggPSBzb3VyY2VOb2RlLmdldE93bmVyKCk7XG5cbiAgICB3aGlsZSAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgZWRnZS50YXJnZXRJbkxjYSA9IHRhcmdldE5vZGU7XG4gICAgICB0YXJnZXRBbmNlc3RvckdyYXBoID0gdGFyZ2V0Tm9kZS5nZXRPd25lcigpO1xuXG4gICAgICB3aGlsZSAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgICBpZiAodGFyZ2V0QW5jZXN0b3JHcmFwaCA9PSBzb3VyY2VBbmNlc3RvckdyYXBoKSB7XG4gICAgICAgICAgZWRnZS5sY2EgPSB0YXJnZXRBbmNlc3RvckdyYXBoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldEFuY2VzdG9yR3JhcGggPT0gdGhpcy5yb290R3JhcGgpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlZGdlLmxjYSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWRnZS50YXJnZXRJbkxjYSA9IHRhcmdldEFuY2VzdG9yR3JhcGguZ2V0UGFyZW50KCk7XG4gICAgICAgIHRhcmdldEFuY2VzdG9yR3JhcGggPSBlZGdlLnRhcmdldEluTGNhLmdldE93bmVyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2VBbmNlc3RvckdyYXBoID09IHRoaXMucm9vdEdyYXBoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgICBlZGdlLnNvdXJjZUluTGNhID0gc291cmNlQW5jZXN0b3JHcmFwaC5nZXRQYXJlbnQoKTtcbiAgICAgICAgc291cmNlQW5jZXN0b3JHcmFwaCA9IGVkZ2Uuc291cmNlSW5MY2EuZ2V0T3duZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWRnZS5sY2EgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgXCJhc3NlcnQgZmFpbGVkXCI7XG4gICAgfVxuICB9XG59O1xuXG5MR3JhcGhNYW5hZ2VyLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmdW5jdGlvbiAoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGlmIChmaXJzdE5vZGUgPT0gc2Vjb25kTm9kZSkge1xuICAgIHJldHVybiBmaXJzdE5vZGUuZ2V0T3duZXIoKTtcbiAgfVxuICB2YXIgZmlyc3RPd25lckdyYXBoID0gZmlyc3ROb2RlLmdldE93bmVyKCk7XG5cbiAgZG8ge1xuICAgIGlmIChmaXJzdE93bmVyR3JhcGggPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBzZWNvbmRPd25lckdyYXBoID0gc2Vjb25kTm9kZS5nZXRPd25lcigpO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKHNlY29uZE93bmVyR3JhcGggPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlY29uZE93bmVyR3JhcGggPT0gZmlyc3RPd25lckdyYXBoKSB7XG4gICAgICAgIHJldHVybiBzZWNvbmRPd25lckdyYXBoO1xuICAgICAgfVxuICAgICAgc2Vjb25kT3duZXJHcmFwaCA9IHNlY29uZE93bmVyR3JhcGguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIGZpcnN0T3duZXJHcmFwaCA9IGZpcnN0T3duZXJHcmFwaC5nZXRQYXJlbnQoKS5nZXRPd25lcigpO1xuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXR1cm4gZmlyc3RPd25lckdyYXBoO1xufTtcblxuTEdyYXBoTWFuYWdlci5wcm90b3R5cGUuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMgPSBmdW5jdGlvbiAoZ3JhcGgsIGRlcHRoKSB7XG4gIGlmIChncmFwaCA9PSBudWxsICYmIGRlcHRoID09IG51bGwpIHtcbiAgICBncmFwaCA9IHRoaXMucm9vdEdyYXBoO1xuICAgIGRlcHRoID0gMTtcbiAgfVxuICB2YXIgbm9kZTtcblxuICB2YXIgbm9kZXMgPSBncmFwaC5nZXROb2RlcygpO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICBub2RlID0gbm9kZXNbaV07XG4gICAgbm9kZS5pbmNsdXNpb25UcmVlRGVwdGggPSBkZXB0aDtcblxuICAgIGlmIChub2RlLmNoaWxkICE9IG51bGwpIHtcbiAgICAgIHRoaXMuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMobm9kZS5jaGlsZCwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH1cbn07XG5cbkxHcmFwaE1hbmFnZXIucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlO1xuICB2YXIgZWRnZXNUb1JlbW92ZSA9IFtdO1xuXG4gIHZhciBzID0gdGhpcy5lZGdlcy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgZWRnZSA9IHRoaXMuZWRnZXNbaV07XG5cbiAgICBpZiAodGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihlZGdlLnNvdXJjZSwgZWRnZS50YXJnZXQpKSB7XG4gICAgICBlZGdlc1RvUmVtb3ZlLnB1c2goZWRnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGludmFsaWQgZWRnZXMgZnJvbSBncmFwaCBtYW5hZ2VyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXNUb1JlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMucmVtb3ZlKGVkZ2VzVG9SZW1vdmVbaV0pO1xuICB9XG5cbiAgLy8gSW52YWxpZCBlZGdlcyBhcmUgY2xlYXJlZCwgc28gcmV0dXJuIGZhbHNlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTEdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8qKlxuICogVGhpcyBjbGFzcyBtYWludGFpbnMgYSBsaXN0IG9mIHN0YXRpYyBnZW9tZXRyeSByZWxhdGVkIHV0aWxpdHkgbWV0aG9kcy5cbiAqXG4gKlxuICogQ29weXJpZ2h0OiBpLVZpcyBSZXNlYXJjaCBHcm91cCwgQmlsa2VudCBVbml2ZXJzaXR5LCAyMDA3IC0gcHJlc2VudFxuICovXG5cbnZhciBQb2ludCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG5mdW5jdGlvbiBJR2VvbWV0cnkoKSB7fVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbGN1bGF0ZXMgKmhhbGYqIHRoZSBhbW91bnQgaW4geCBhbmQgeSBkaXJlY3Rpb25zIG9mIHRoZSB0d29cbiAqIGlucHV0IHJlY3RhbmdsZXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZW0ga2VlcGluZyB0aGVpciByZXNwZWN0aXZlXG4gKiBwb3NpdGlvbmluZywgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBpbiB0aGUgaW5wdXQgYXJyYXkuIEFuIGlucHV0XG4gKiBzZXBhcmF0aW9uIGJ1ZmZlciBhZGRlZCB0byB0aGUgYW1vdW50IGluIGJvdGggZGlyZWN0aW9ucy4gV2UgYXNzdW1lIHRoYXRcbiAqIHRoZSB0d28gcmVjdGFuZ2xlcyBkbyBpbnRlcnNlY3QuXG4gKi9cbklHZW9tZXRyeS5jYWxjU2VwYXJhdGlvbkFtb3VudCA9IGZ1bmN0aW9uIChyZWN0QSwgcmVjdEIsIG92ZXJsYXBBbW91bnQsIHNlcGFyYXRpb25CdWZmZXIpIHtcbiAgaWYgKCFyZWN0QS5pbnRlcnNlY3RzKHJlY3RCKSkge1xuICAgIHRocm93IFwiYXNzZXJ0IGZhaWxlZFwiO1xuICB9XG5cbiAgdmFyIGRpcmVjdGlvbnMgPSBuZXcgQXJyYXkoMik7XG5cbiAgdGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhyZWN0QSwgcmVjdEIsIGRpcmVjdGlvbnMpO1xuXG4gIG92ZXJsYXBBbW91bnRbMF0gPSBNYXRoLm1pbihyZWN0QS5nZXRSaWdodCgpLCByZWN0Qi5nZXRSaWdodCgpKSAtIE1hdGgubWF4KHJlY3RBLngsIHJlY3RCLngpO1xuICBvdmVybGFwQW1vdW50WzFdID0gTWF0aC5taW4ocmVjdEEuZ2V0Qm90dG9tKCksIHJlY3RCLmdldEJvdHRvbSgpKSAtIE1hdGgubWF4KHJlY3RBLnksIHJlY3RCLnkpO1xuXG4gIC8vIHVwZGF0ZSB0aGUgb3ZlcmxhcHBpbmcgYW1vdW50cyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgaWYgKHJlY3RBLmdldFgoKSA8PSByZWN0Qi5nZXRYKCkgJiYgcmVjdEEuZ2V0UmlnaHQoKSA+PSByZWN0Qi5nZXRSaWdodCgpKSB7XG4gICAgLyogQ2FzZSB4LjE6XG4gICAgKlxuICAgICogcmVjdEFcbiAgICAqIFx0fCAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICogXHR8ICAgICAgICBfX19fX19fX18gICAgICB8XG4gICAgKiBcdHwgICAgICAgIHwgICAgICAgfCAgICAgIHxcbiAgICAqIFx0fF9fX19fX19ffF9fX19fX198X19fX19ffFxuICAgICogXHRcdFx0IHwgICAgICAgfFxuICAgICogICAgICAgICAgIHwgICAgICAgfFxuICAgICogICAgICAgIHJlY3RCXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzBdICs9IE1hdGgubWluKHJlY3RCLmdldFgoKSAtIHJlY3RBLmdldFgoKSwgcmVjdEEuZ2V0UmlnaHQoKSAtIHJlY3RCLmdldFJpZ2h0KCkpO1xuICB9IGVsc2UgaWYgKHJlY3RCLmdldFgoKSA8PSByZWN0QS5nZXRYKCkgJiYgcmVjdEIuZ2V0UmlnaHQoKSA+PSByZWN0QS5nZXRSaWdodCgpKSB7XG4gICAgLyogQ2FzZSB4LjI6XG4gICAgKlxuICAgICogcmVjdEJcbiAgICAqIFx0fCAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICogXHR8ICAgICAgICBfX19fX19fX18gICAgICB8XG4gICAgKiBcdHwgICAgICAgIHwgICAgICAgfCAgICAgIHxcbiAgICAqIFx0fF9fX19fX19ffF9fX19fX198X19fX19ffFxuICAgICogXHRcdFx0IHwgICAgICAgfFxuICAgICogICAgICAgICAgIHwgICAgICAgfFxuICAgICogICAgICAgIHJlY3RBXG4gICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzBdICs9IE1hdGgubWluKHJlY3RBLmdldFgoKSAtIHJlY3RCLmdldFgoKSwgcmVjdEIuZ2V0UmlnaHQoKSAtIHJlY3RBLmdldFJpZ2h0KCkpO1xuICB9XG4gIGlmIChyZWN0QS5nZXRZKCkgPD0gcmVjdEIuZ2V0WSgpICYmIHJlY3RBLmdldEJvdHRvbSgpID49IHJlY3RCLmdldEJvdHRvbSgpKSB7XG4gICAgLyogQ2FzZSB5LjE6XG4gICAgICogICAgICAgICAgX19fX19fX18gcmVjdEFcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgIF9fX19fX3xfX19fICByZWN0QlxuICAgICAqICAgICAgICAgfCAgICB8XG4gICAgICogICAgICAgICB8ICAgIHxcbiAgICAgKiAgIF9fX19fX3xfX19ffFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfFxuICAgICAqICAgICAgICAgfF9fX19fX19fXG4gICAgICpcbiAgICAgKi9cbiAgICBvdmVybGFwQW1vdW50WzFdICs9IE1hdGgubWluKHJlY3RCLmdldFkoKSAtIHJlY3RBLmdldFkoKSwgcmVjdEEuZ2V0Qm90dG9tKCkgLSByZWN0Qi5nZXRCb3R0b20oKSk7XG4gIH0gZWxzZSBpZiAocmVjdEIuZ2V0WSgpIDw9IHJlY3RBLmdldFkoKSAmJiByZWN0Qi5nZXRCb3R0b20oKSA+PSByZWN0QS5nZXRCb3R0b20oKSkge1xuICAgIC8qIENhc2UgeS4yOlxuICAgICogICAgICAgICAgX19fX19fX18gcmVjdEJcbiAgICAqICAgICAgICAgfFxuICAgICogICAgICAgICB8XG4gICAgKiAgIF9fX19fX3xfX19fICByZWN0QVxuICAgICogICAgICAgICB8ICAgIHxcbiAgICAqICAgICAgICAgfCAgICB8XG4gICAgKiAgIF9fX19fX3xfX19ffFxuICAgICogICAgICAgICB8XG4gICAgKiAgICAgICAgIHxcbiAgICAqICAgICAgICAgfF9fX19fX19fXG4gICAgKlxuICAgICovXG4gICAgb3ZlcmxhcEFtb3VudFsxXSArPSBNYXRoLm1pbihyZWN0QS5nZXRZKCkgLSByZWN0Qi5nZXRZKCksIHJlY3RCLmdldEJvdHRvbSgpIC0gcmVjdEEuZ2V0Qm90dG9tKCkpO1xuICB9XG5cbiAgLy8gZmluZCBzbG9wZSBvZiB0aGUgbGluZSBwYXNzZXMgdHdvIGNlbnRlcnNcbiAgdmFyIHNsb3BlID0gTWF0aC5hYnMoKHJlY3RCLmdldENlbnRlclkoKSAtIHJlY3RBLmdldENlbnRlclkoKSkgLyAocmVjdEIuZ2V0Q2VudGVyWCgpIC0gcmVjdEEuZ2V0Q2VudGVyWCgpKSk7XG4gIC8vIGlmIGNlbnRlcnMgYXJlIG92ZXJsYXBwZWRcbiAgaWYgKHJlY3RCLmdldENlbnRlclkoKSA9PT0gcmVjdEEuZ2V0Q2VudGVyWSgpICYmIHJlY3RCLmdldENlbnRlclgoKSA9PT0gcmVjdEEuZ2V0Q2VudGVyWCgpKSB7XG4gICAgLy8gYXNzdW1lIHRoZSBzbG9wZSBpcyAxICg0NSBkZWdyZWUpXG4gICAgc2xvcGUgPSAxLjA7XG4gIH1cblxuICB2YXIgbW92ZUJ5WSA9IHNsb3BlICogb3ZlcmxhcEFtb3VudFswXTtcbiAgdmFyIG1vdmVCeVggPSBvdmVybGFwQW1vdW50WzFdIC8gc2xvcGU7XG4gIGlmIChvdmVybGFwQW1vdW50WzBdIDwgbW92ZUJ5WCkge1xuICAgIG1vdmVCeVggPSBvdmVybGFwQW1vdW50WzBdO1xuICB9IGVsc2Uge1xuICAgIG1vdmVCeVkgPSBvdmVybGFwQW1vdW50WzFdO1xuICB9XG4gIC8vIHJldHVybiBoYWxmIHRoZSBhbW91bnQgc28gdGhhdCBpZiBlYWNoIHJlY3RhbmdsZSBpcyBtb3ZlZCBieSB0aGVzZVxuICAvLyBhbW91bnRzIGluIG9wcG9zaXRlIGRpcmVjdGlvbnMsIG92ZXJsYXAgd2lsbCBiZSByZXNvbHZlZFxuICBvdmVybGFwQW1vdW50WzBdID0gLTEgKiBkaXJlY3Rpb25zWzBdICogKG1vdmVCeVggLyAyICsgc2VwYXJhdGlvbkJ1ZmZlcik7XG4gIG92ZXJsYXBBbW91bnRbMV0gPSAtMSAqIGRpcmVjdGlvbnNbMV0gKiAobW92ZUJ5WSAvIDIgKyBzZXBhcmF0aW9uQnVmZmVyKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZGVjaWRlcyB0aGUgc2VwYXJhdGlvbiBkaXJlY3Rpb24gb2Ygb3ZlcmxhcHBpbmcgbm9kZXNcbiAqXG4gKiBpZiBkaXJlY3Rpb25zWzBdID0gLTEsIHRoZW4gcmVjdEEgZ29lcyBsZWZ0XG4gKiBpZiBkaXJlY3Rpb25zWzBdID0gMSwgIHRoZW4gcmVjdEEgZ29lcyByaWdodFxuICogaWYgZGlyZWN0aW9uc1sxXSA9IC0xLCB0aGVuIHJlY3RBIGdvZXMgdXBcbiAqIGlmIGRpcmVjdGlvbnNbMV0gPSAxLCAgdGhlbiByZWN0QSBnb2VzIGRvd25cbiAqL1xuSUdlb21ldHJ5LmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzID0gZnVuY3Rpb24gKHJlY3RBLCByZWN0QiwgZGlyZWN0aW9ucykge1xuICBpZiAocmVjdEEuZ2V0Q2VudGVyWCgpIDwgcmVjdEIuZ2V0Q2VudGVyWCgpKSB7XG4gICAgZGlyZWN0aW9uc1swXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIGRpcmVjdGlvbnNbMF0gPSAxO1xuICB9XG5cbiAgaWYgKHJlY3RBLmdldENlbnRlclkoKSA8IHJlY3RCLmdldENlbnRlclkoKSkge1xuICAgIGRpcmVjdGlvbnNbMV0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICBkaXJlY3Rpb25zWzFdID0gMTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gKGNsaXBwaW5nKSBwb2ludHMgb2YgdGhlIHR3b1xuICogaW5wdXQgcmVjdGFuZ2xlcyB3aXRoIGxpbmUgc2VnbWVudCBkZWZpbmVkIGJ5IHRoZSBjZW50ZXJzIG9mIHRoZXNlIHR3b1xuICogcmVjdGFuZ2xlcy4gVGhlIGNsaXBwaW5nIHBvaW50cyBhcmUgc2F2ZWQgaW4gdGhlIGlucHV0IGRvdWJsZSBhcnJheSBhbmRcbiAqIHdoZXRoZXIgb3Igbm90IHRoZSB0d28gcmVjdGFuZ2xlcyBvdmVybGFwIGlzIHJldHVybmVkLlxuICovXG5JR2VvbWV0cnkuZ2V0SW50ZXJzZWN0aW9uMiA9IGZ1bmN0aW9uIChyZWN0QSwgcmVjdEIsIHJlc3VsdCkge1xuICAvL3Jlc3VsdFswLTFdIHdpbGwgY29udGFpbiBjbGlwUG9pbnQgb2YgcmVjdEEsIHJlc3VsdFsyLTNdIHdpbGwgY29udGFpbiBjbGlwUG9pbnQgb2YgcmVjdEJcbiAgdmFyIHAxeCA9IHJlY3RBLmdldENlbnRlclgoKTtcbiAgdmFyIHAxeSA9IHJlY3RBLmdldENlbnRlclkoKTtcbiAgdmFyIHAyeCA9IHJlY3RCLmdldENlbnRlclgoKTtcbiAgdmFyIHAyeSA9IHJlY3RCLmdldENlbnRlclkoKTtcblxuICAvL2lmIHR3byByZWN0YW5nbGVzIGludGVyc2VjdCwgdGhlbiBjbGlwcGluZyBwb2ludHMgYXJlIGNlbnRlcnNcbiAgaWYgKHJlY3RBLmludGVyc2VjdHMocmVjdEIpKSB7XG4gICAgcmVzdWx0WzBdID0gcDF4O1xuICAgIHJlc3VsdFsxXSA9IHAxeTtcbiAgICByZXN1bHRbMl0gPSBwMng7XG4gICAgcmVzdWx0WzNdID0gcDJ5O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vdmFyaWFibGVzIGZvciByZWN0QVxuICB2YXIgdG9wTGVmdEF4ID0gcmVjdEEuZ2V0WCgpO1xuICB2YXIgdG9wTGVmdEF5ID0gcmVjdEEuZ2V0WSgpO1xuICB2YXIgdG9wUmlnaHRBeCA9IHJlY3RBLmdldFJpZ2h0KCk7XG4gIHZhciBib3R0b21MZWZ0QXggPSByZWN0QS5nZXRYKCk7XG4gIHZhciBib3R0b21MZWZ0QXkgPSByZWN0QS5nZXRCb3R0b20oKTtcbiAgdmFyIGJvdHRvbVJpZ2h0QXggPSByZWN0QS5nZXRSaWdodCgpO1xuICB2YXIgaGFsZldpZHRoQSA9IHJlY3RBLmdldFdpZHRoSGFsZigpO1xuICB2YXIgaGFsZkhlaWdodEEgPSByZWN0QS5nZXRIZWlnaHRIYWxmKCk7XG4gIC8vdmFyaWFibGVzIGZvciByZWN0QlxuICB2YXIgdG9wTGVmdEJ4ID0gcmVjdEIuZ2V0WCgpO1xuICB2YXIgdG9wTGVmdEJ5ID0gcmVjdEIuZ2V0WSgpO1xuICB2YXIgdG9wUmlnaHRCeCA9IHJlY3RCLmdldFJpZ2h0KCk7XG4gIHZhciBib3R0b21MZWZ0QnggPSByZWN0Qi5nZXRYKCk7XG4gIHZhciBib3R0b21MZWZ0QnkgPSByZWN0Qi5nZXRCb3R0b20oKTtcbiAgdmFyIGJvdHRvbVJpZ2h0QnggPSByZWN0Qi5nZXRSaWdodCgpO1xuICB2YXIgaGFsZldpZHRoQiA9IHJlY3RCLmdldFdpZHRoSGFsZigpO1xuICB2YXIgaGFsZkhlaWdodEIgPSByZWN0Qi5nZXRIZWlnaHRIYWxmKCk7XG5cbiAgLy9mbGFnIHdoZXRoZXIgY2xpcHBpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICB2YXIgY2xpcFBvaW50QUZvdW5kID0gZmFsc2U7XG4gIHZhciBjbGlwUG9pbnRCRm91bmQgPSBmYWxzZTtcblxuICAvLyBsaW5lIGlzIHZlcnRpY2FsXG4gIGlmIChwMXggPT09IHAyeCkge1xuICAgIGlmIChwMXkgPiBwMnkpIHtcbiAgICAgIHJlc3VsdFswXSA9IHAxeDtcbiAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgIHJlc3VsdFsyXSA9IHAyeDtcbiAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHAxeSA8IHAyeSkge1xuICAgICAgcmVzdWx0WzBdID0gcDF4O1xuICAgICAgcmVzdWx0WzFdID0gYm90dG9tTGVmdEF5O1xuICAgICAgcmVzdWx0WzJdID0gcDJ4O1xuICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25vdCBsaW5lLCByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gbGluZSBpcyBob3Jpem9udGFsXG4gIGVsc2UgaWYgKHAxeSA9PT0gcDJ5KSB7XG4gICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgIHJlc3VsdFswXSA9IHRvcExlZnRBeDtcbiAgICAgICAgcmVzdWx0WzFdID0gcDF5O1xuICAgICAgICByZXN1bHRbMl0gPSB0b3BSaWdodEJ4O1xuICAgICAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocDF4IDwgcDJ4KSB7XG4gICAgICAgIHJlc3VsdFswXSA9IHRvcFJpZ2h0QXg7XG4gICAgICAgIHJlc3VsdFsxXSA9IHAxeTtcbiAgICAgICAgcmVzdWx0WzJdID0gdG9wTGVmdEJ4O1xuICAgICAgICByZXN1bHRbM10gPSBwMnk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vbm90IHZhbGlkIGxpbmUsIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL3Nsb3BlcyBvZiByZWN0QSdzIGFuZCByZWN0QidzIGRpYWdvbmFsc1xuICAgICAgdmFyIHNsb3BlQSA9IHJlY3RBLmhlaWdodCAvIHJlY3RBLndpZHRoO1xuICAgICAgdmFyIHNsb3BlQiA9IHJlY3RCLmhlaWdodCAvIHJlY3RCLndpZHRoO1xuXG4gICAgICAvL3Nsb3BlIG9mIGxpbmUgYmV0d2VlbiBjZW50ZXIgb2YgcmVjdEEgYW5kIGNlbnRlciBvZiByZWN0QlxuICAgICAgdmFyIHNsb3BlUHJpbWUgPSAocDJ5IC0gcDF5KSAvIChwMnggLSBwMXgpO1xuICAgICAgdmFyIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHZvaWQgMDtcbiAgICAgIHZhciBjYXJkaW5hbERpcmVjdGlvbkIgPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QXggPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QXkgPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QnggPSB2b2lkIDA7XG4gICAgICB2YXIgdGVtcFBvaW50QnkgPSB2b2lkIDA7XG5cbiAgICAgIC8vZGV0ZXJtaW5lIHdoZXRoZXIgY2xpcHBpbmcgcG9pbnQgaXMgdGhlIGNvcm5lciBvZiBub2RlQVxuICAgICAgaWYgKC1zbG9wZUEgPT09IHNsb3BlUHJpbWUpIHtcbiAgICAgICAgaWYgKHAxeCA+IHAyeCkge1xuICAgICAgICAgIHJlc3VsdFswXSA9IGJvdHRvbUxlZnRBeDtcbiAgICAgICAgICByZXN1bHRbMV0gPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgY2xpcFBvaW50QUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbMF0gPSB0b3BSaWdodEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsb3BlQSA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgICAgcmVzdWx0WzBdID0gdG9wTGVmdEF4O1xuICAgICAgICAgIHJlc3VsdFsxXSA9IHRvcExlZnRBeTtcbiAgICAgICAgICBjbGlwUG9pbnRBRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFswXSA9IGJvdHRvbVJpZ2h0QXg7XG4gICAgICAgICAgcmVzdWx0WzFdID0gYm90dG9tTGVmdEF5O1xuICAgICAgICAgIGNsaXBQb2ludEFGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9kZXRlcm1pbmUgd2hldGhlciBjbGlwcGluZyBwb2ludCBpcyB0aGUgY29ybmVyIG9mIG5vZGVCXG4gICAgICBpZiAoLXNsb3BlQiA9PT0gc2xvcGVQcmltZSkge1xuICAgICAgICBpZiAocDJ4ID4gcDF4KSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gYm90dG9tTGVmdEJ4O1xuICAgICAgICAgIHJlc3VsdFszXSA9IGJvdHRvbUxlZnRCeTtcbiAgICAgICAgICBjbGlwUG9pbnRCRm91bmQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFsyXSA9IHRvcFJpZ2h0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2xvcGVCID09PSBzbG9wZVByaW1lKSB7XG4gICAgICAgIGlmIChwMnggPiBwMXgpIHtcbiAgICAgICAgICByZXN1bHRbMl0gPSB0b3BMZWZ0Qng7XG4gICAgICAgICAgcmVzdWx0WzNdID0gdG9wTGVmdEJ5O1xuICAgICAgICAgIGNsaXBQb2ludEJGb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WzJdID0gYm90dG9tUmlnaHRCeDtcbiAgICAgICAgICByZXN1bHRbM10gPSBib3R0b21MZWZ0Qnk7XG4gICAgICAgICAgY2xpcFBvaW50QkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2lmIGJvdGggY2xpcHBpbmcgcG9pbnRzIGFyZSBjb3JuZXJzXG4gICAgICBpZiAoY2xpcFBvaW50QUZvdW5kICYmIGNsaXBQb2ludEJGb3VuZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vZGV0ZXJtaW5lIENhcmRpbmFsIERpcmVjdGlvbiBvZiByZWN0YW5nbGVzXG4gICAgICBpZiAocDF4ID4gcDJ4KSB7XG4gICAgICAgIGlmIChwMXkgPiBwMnkpIHtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkEgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQSwgc2xvcGVQcmltZSwgNCk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihzbG9wZUIsIHNsb3BlUHJpbWUsIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXNsb3BlQSwgc2xvcGVQcmltZSwgMyk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVCLCBzbG9wZVByaW1lLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAxeSA+IHAyeSkge1xuICAgICAgICAgIGNhcmRpbmFsRGlyZWN0aW9uQSA9IHRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLXNsb3BlQSwgc2xvcGVQcmltZSwgMSk7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtc2xvcGVCLCBzbG9wZVByaW1lLCAzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXJkaW5hbERpcmVjdGlvbkEgPSB0aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKHNsb3BlQSwgc2xvcGVQcmltZSwgMik7XG4gICAgICAgICAgY2FyZGluYWxEaXJlY3Rpb25CID0gdGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihzbG9wZUIsIHNsb3BlUHJpbWUsIDQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL2NhbGN1bGF0ZSBjbGlwcGluZyBQb2ludCBpZiBpdCBpcyBub3QgZm91bmQgYmVmb3JlXG4gICAgICBpZiAoIWNsaXBQb2ludEFGb3VuZCkge1xuICAgICAgICBzd2l0Y2ggKGNhcmRpbmFsRGlyZWN0aW9uQSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gdG9wTGVmdEF5O1xuICAgICAgICAgICAgdGVtcFBvaW50QXggPSBwMXggKyAtaGFsZkhlaWdodEEgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRlbXBQb2ludEF4ID0gYm90dG9tUmlnaHRBeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gcDF5ICsgaGFsZldpZHRoQSAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMF0gPSB0ZW1wUG9pbnRBeDtcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IHRlbXBQb2ludEF5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGVtcFBvaW50QXkgPSBib3R0b21MZWZ0QXk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IHAxeCArIGhhbGZIZWlnaHRBIC8gc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFswXSA9IHRlbXBQb2ludEF4O1xuICAgICAgICAgICAgcmVzdWx0WzFdID0gdGVtcFBvaW50QXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0ZW1wUG9pbnRBeCA9IGJvdHRvbUxlZnRBeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEF5ID0gcDF5ICsgLWhhbGZXaWR0aEEgKiBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzBdID0gdGVtcFBvaW50QXg7XG4gICAgICAgICAgICByZXN1bHRbMV0gPSB0ZW1wUG9pbnRBeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNsaXBQb2ludEJGb3VuZCkge1xuICAgICAgICBzd2l0Y2ggKGNhcmRpbmFsRGlyZWN0aW9uQikge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gdG9wTGVmdEJ5O1xuICAgICAgICAgICAgdGVtcFBvaW50QnggPSBwMnggKyAtaGFsZkhlaWdodEIgLyBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRlbXBQb2ludEJ4ID0gYm90dG9tUmlnaHRCeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gcDJ5ICsgaGFsZldpZHRoQiAqIHNsb3BlUHJpbWU7XG4gICAgICAgICAgICByZXN1bHRbMl0gPSB0ZW1wUG9pbnRCeDtcbiAgICAgICAgICAgIHJlc3VsdFszXSA9IHRlbXBQb2ludEJ5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGVtcFBvaW50QnkgPSBib3R0b21MZWZ0Qnk7XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IHAyeCArIGhhbGZIZWlnaHRCIC8gc2xvcGVQcmltZTtcbiAgICAgICAgICAgIHJlc3VsdFsyXSA9IHRlbXBQb2ludEJ4O1xuICAgICAgICAgICAgcmVzdWx0WzNdID0gdGVtcFBvaW50Qnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICB0ZW1wUG9pbnRCeCA9IGJvdHRvbUxlZnRCeDtcbiAgICAgICAgICAgIHRlbXBQb2ludEJ5ID0gcDJ5ICsgLWhhbGZXaWR0aEIgKiBzbG9wZVByaW1lO1xuICAgICAgICAgICAgcmVzdWx0WzJdID0gdGVtcFBvaW50Qng7XG4gICAgICAgICAgICByZXN1bHRbM10gPSB0ZW1wUG9pbnRCeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgaW4gd2hpY2ggY2FyZGluYWwgZGlyZWN0aW9uIGRvZXMgaW5wdXQgcG9pbnQgc3RheXNcbiAqIDE6IE5vcnRoXG4gKiAyOiBFYXN0XG4gKiAzOiBTb3V0aFxuICogNDogV2VzdFxuICovXG5JR2VvbWV0cnkuZ2V0Q2FyZGluYWxEaXJlY3Rpb24gPSBmdW5jdGlvbiAoc2xvcGUsIHNsb3BlUHJpbWUsIGxpbmUpIHtcbiAgaWYgKHNsb3BlID4gc2xvcGVQcmltZSkge1xuICAgIHJldHVybiBsaW5lO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxICsgbGluZSAlIDQ7XG4gIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gbGluZXMgZGVmaW5lZCBieVxuICogcG9pbnQgcGFpcnMgKHMxLHMyKSBhbmQgKGYxLGYyKS5cbiAqL1xuSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChzMSwgczIsIGYxLCBmMikge1xuICBpZiAoZjIgPT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoczEsIHMyLCBmMSk7XG4gIH1cblxuICB2YXIgeDEgPSBzMS54O1xuICB2YXIgeTEgPSBzMS55O1xuICB2YXIgeDIgPSBzMi54O1xuICB2YXIgeTIgPSBzMi55O1xuICB2YXIgeDMgPSBmMS54O1xuICB2YXIgeTMgPSBmMS55O1xuICB2YXIgeDQgPSBmMi54O1xuICB2YXIgeTQgPSBmMi55O1xuICB2YXIgeCA9IHZvaWQgMCxcbiAgICAgIHkgPSB2b2lkIDA7IC8vIGludGVyc2VjdGlvbiBwb2ludFxuICB2YXIgYTEgPSB2b2lkIDAsXG4gICAgICBhMiA9IHZvaWQgMCxcbiAgICAgIGIxID0gdm9pZCAwLFxuICAgICAgYjIgPSB2b2lkIDAsXG4gICAgICBjMSA9IHZvaWQgMCxcbiAgICAgIGMyID0gdm9pZCAwOyAvLyBjb2VmZmljaWVudHMgb2YgbGluZSBlcW5zLlxuICB2YXIgZGVub20gPSB2b2lkIDA7XG5cbiAgYTEgPSB5MiAtIHkxO1xuICBiMSA9IHgxIC0geDI7XG4gIGMxID0geDIgKiB5MSAtIHgxICogeTI7IC8vIHsgYTEqeCArIGIxKnkgKyBjMSA9IDAgaXMgbGluZSAxIH1cblxuICBhMiA9IHk0IC0geTM7XG4gIGIyID0geDMgLSB4NDtcbiAgYzIgPSB4NCAqIHkzIC0geDMgKiB5NDsgLy8geyBhMip4ICsgYjIqeSArIGMyID0gMCBpcyBsaW5lIDIgfVxuXG4gIGRlbm9tID0gYTEgKiBiMiAtIGEyICogYjE7XG5cbiAgaWYgKGRlbm9tID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB4ID0gKGIxICogYzIgLSBiMiAqIGMxKSAvIGRlbm9tO1xuICB5ID0gKGEyICogYzEgLSBhMSAqIGMyKSAvIGRlbm9tO1xuXG4gIHJldHVybiBuZXcgUG9pbnQoeCwgeSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBhbmdsZSBvZiB0aGUgdmVjdG9yIGZyb20gdGhlICsgeC1heGlzXG4gKiBpbiBjbG9ja3dpc2UgZGlyZWN0aW9uIChjb21wYXRpYmxlIHcvIEphdmEgY29vcmRpbmF0ZSBzeXN0ZW0hKS5cbiAqL1xuSUdlb21ldHJ5LmFuZ2xlT2ZWZWN0b3IgPSBmdW5jdGlvbiAoQ3gsIEN5LCBOeCwgTnkpIHtcbiAgdmFyIENfYW5nbGUgPSB2b2lkIDA7XG5cbiAgaWYgKEN4ICE9PSBOeCkge1xuICAgIENfYW5nbGUgPSBNYXRoLmF0YW4oKE55IC0gQ3kpIC8gKE54IC0gQ3gpKTtcblxuICAgIGlmIChOeCA8IEN4KSB7XG4gICAgICBDX2FuZ2xlICs9IE1hdGguUEk7XG4gICAgfSBlbHNlIGlmIChOeSA8IEN5KSB7XG4gICAgICBDX2FuZ2xlICs9IHRoaXMuVFdPX1BJO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOeSA8IEN5KSB7XG4gICAgQ19hbmdsZSA9IHRoaXMuT05FX0FORF9IQUxGX1BJOyAvLyAyNzAgZGVncmVlc1xuICB9IGVsc2Uge1xuICAgIENfYW5nbGUgPSB0aGlzLkhBTEZfUEk7IC8vIDkwIGRlZ3JlZXNcbiAgfVxuXG4gIHJldHVybiBDX2FuZ2xlO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gdHdvIGxpbmUgc2VnbWVudHMgKG9uZSB3aXRoIHBvaW50XG4gKiBwMSBhbmQgcDIsIHRoZSBvdGhlciB3aXRoIHBvaW50IHAzIGFuZCBwNCkgaW50ZXJzZWN0IGF0IGEgcG9pbnQgb3RoZXJcbiAqIHRoYW4gdGhlc2UgcG9pbnRzLlxuICovXG5JR2VvbWV0cnkuZG9JbnRlcnNlY3QgPSBmdW5jdGlvbiAocDEsIHAyLCBwMywgcDQpIHtcbiAgdmFyIGEgPSBwMS54O1xuICB2YXIgYiA9IHAxLnk7XG4gIHZhciBjID0gcDIueDtcbiAgdmFyIGQgPSBwMi55O1xuICB2YXIgcCA9IHAzLng7XG4gIHZhciBxID0gcDMueTtcbiAgdmFyIHIgPSBwNC54O1xuICB2YXIgcyA9IHA0Lnk7XG4gIHZhciBkZXQgPSAoYyAtIGEpICogKHMgLSBxKSAtIChyIC0gcCkgKiAoZCAtIGIpO1xuXG4gIGlmIChkZXQgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhbWJkYSA9ICgocyAtIHEpICogKHIgLSBhKSArIChwIC0gcikgKiAocyAtIGIpKSAvIGRldDtcbiAgICB2YXIgZ2FtbWEgPSAoKGIgLSBkKSAqIChyIC0gYSkgKyAoYyAtIGEpICogKHMgLSBiKSkgLyBkZXQ7XG4gICAgcmV0dXJuIDAgPCBsYW1iZGEgJiYgbGFtYmRhIDwgMSAmJiAwIDwgZ2FtbWEgJiYgZ2FtbWEgPCAxO1xuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBhbmQgY2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIFxuICogYSBsaW5lIHNlZ21lbnQgYW5kIGEgY2lyY2xlLlxuICovXG5JR2VvbWV0cnkuZmluZENpcmNsZUxpbmVJbnRlcnNlY3Rpb25zID0gZnVuY3Rpb24gKEV4LCBFeSwgTHgsIEx5LCBDeCwgQ3ksIHIpIHtcblxuICAvLyBFIGlzIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgcmF5LFxuICAvLyBMIGlzIHRoZSBlbmQgcG9pbnQgb2YgdGhlIHJheSxcbiAgLy8gQyBpcyB0aGUgY2VudGVyIG9mIHNwaGVyZSB5b3UncmUgdGVzdGluZyBhZ2FpbnN0XG4gIC8vIHIgaXMgdGhlIHJhZGl1cyBvZiB0aGF0IHNwaGVyZVxuXG4gIC8vIENvbXB1dGU6XG4gIC8vIGQgPSBMIC0gRSAoIERpcmVjdGlvbiB2ZWN0b3Igb2YgcmF5LCBmcm9tIHN0YXJ0IHRvIGVuZCApXG4gIC8vIGYgPSBFIC0gQyAoIFZlY3RvciBmcm9tIGNlbnRlciBzcGhlcmUgdG8gcmF5IHN0YXJ0IClcblxuICAvLyBUaGVuIHRoZSBpbnRlcnNlY3Rpb24gaXMgZm91bmQgYnkuLlxuICAvLyBQID0gRSArIHQgKiBkXG4gIC8vIFRoaXMgaXMgYSBwYXJhbWV0cmljIGVxdWF0aW9uOlxuICAvLyBQeCA9IEV4ICsgdGR4XG4gIC8vIFB5ID0gRXkgKyB0ZHlcblxuICAvLyBnZXQgYSwgYiwgYyB2YWx1ZXNcbiAgdmFyIGEgPSAoTHggLSBFeCkgKiAoTHggLSBFeCkgKyAoTHkgLSBFeSkgKiAoTHkgLSBFeSk7XG4gIHZhciBiID0gMiAqICgoRXggLSBDeCkgKiAoTHggLSBFeCkgKyAoRXkgLSBDeSkgKiAoTHkgLSBFeSkpO1xuICB2YXIgYyA9IChFeCAtIEN4KSAqIChFeCAtIEN4KSArIChFeSAtIEN5KSAqIChFeSAtIEN5KSAtIHIgKiByO1xuXG4gIC8vIGdldCBkaXNjcmltaW5hbnRcbiAgdmFyIGRpc2MgPSBiICogYiAtIDQgKiBhICogYztcbiAgaWYgKGRpc2MgPj0gMCkge1xuICAgIC8vIGluc2VydCBpbnRvIHF1YWRyYXRpYyBmb3JtdWxhXG4gICAgdmFyIHQxID0gKC1iICsgTWF0aC5zcXJ0KGIgKiBiIC0gNCAqIGEgKiBjKSkgLyAoMiAqIGEpO1xuICAgIHZhciB0MiA9ICgtYiAtIE1hdGguc3FydChiICogYiAtIDQgKiBhICogYykpIC8gKDIgKiBhKTtcbiAgICB2YXIgaW50ZXJzZWN0aW9ucyA9IG51bGw7XG4gICAgaWYgKHQxID49IDAgJiYgdDEgPD0gMSkge1xuICAgICAgLy8gdDEgaXMgdGhlIGludGVyc2VjdGlvbiwgYW5kIGl0J3MgY2xvc2VyIHRoYW4gdDJcbiAgICAgIC8vIChzaW5jZSB0MSB1c2VzIC1iIC0gZGlzY3JpbWluYW50KVxuICAgICAgLy8gSW1wYWxlLCBQb2tlXG4gICAgICByZXR1cm4gW3QxXTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHQxIGRpZG4ndCBpbnRlcnNlY3Qgc28gd2UgYXJlIGVpdGhlciBzdGFydGVkXG4gICAgLy8gaW5zaWRlIHRoZSBzcGhlcmUgb3IgY29tcGxldGVseSBwYXN0IGl0XG4gICAgaWYgKHQyID49IDAgJiYgdDIgPD0gMSkge1xuICAgICAgLy8gRXhpdFdvdW5kXG4gICAgICByZXR1cm4gW3QyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbiAgfSBlbHNlIHJldHVybiBudWxsO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IENsYXNzIENvbnN0YW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8qKlxuICogU29tZSB1c2VmdWwgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzXG4gKi9cbklHZW9tZXRyeS5IQUxGX1BJID0gMC41ICogTWF0aC5QSTtcbklHZW9tZXRyeS5PTkVfQU5EX0hBTEZfUEkgPSAxLjUgKiBNYXRoLlBJO1xuSUdlb21ldHJ5LlRXT19QSSA9IDIuMCAqIE1hdGguUEk7XG5JR2VvbWV0cnkuVEhSRUVfUEkgPSAzLjAgKiBNYXRoLlBJO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElHZW9tZXRyeTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIElNYXRoKCkge31cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzaWduIG9mIHRoZSBpbnB1dCB2YWx1ZS5cbiAqL1xuSU1hdGguc2lnbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5JTWF0aC5mbG9vciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5jZWlsKHZhbHVlKSA6IE1hdGguZmxvb3IodmFsdWUpO1xufTtcblxuSU1hdGguY2VpbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPCAwID8gTWF0aC5mbG9vcih2YWx1ZSkgOiBNYXRoLmNlaWwodmFsdWUpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJTWF0aDtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBJbnRlZ2VyKCkge31cblxuSW50ZWdlci5NQVhfVkFMVUUgPSAyMTQ3NDgzNjQ3O1xuSW50ZWdlci5NSU5fVkFMVUUgPSAtMjE0NzQ4MzY0ODtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlZ2VyO1xuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBub2RlRnJvbSA9IGZ1bmN0aW9uIG5vZGVGcm9tKHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgbmV4dDogbnVsbCwgcHJldjogbnVsbCB9O1xufTtcblxudmFyIGFkZCA9IGZ1bmN0aW9uIGFkZChwcmV2LCBub2RlLCBuZXh0LCBsaXN0KSB7XG4gIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgcHJldi5uZXh0ID0gbm9kZTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LmhlYWQgPSBub2RlO1xuICB9XG5cbiAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICBuZXh0LnByZXYgPSBub2RlO1xuICB9IGVsc2Uge1xuICAgIGxpc3QudGFpbCA9IG5vZGU7XG4gIH1cblxuICBub2RlLnByZXYgPSBwcmV2O1xuICBub2RlLm5leHQgPSBuZXh0O1xuXG4gIGxpc3QubGVuZ3RoKys7XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG52YXIgX3JlbW92ZSA9IGZ1bmN0aW9uIF9yZW1vdmUobm9kZSwgbGlzdCkge1xuICB2YXIgcHJldiA9IG5vZGUucHJldixcbiAgICAgIG5leHQgPSBub2RlLm5leHQ7XG5cblxuICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgIHByZXYubmV4dCA9IG5leHQ7XG4gIH0gZWxzZSB7XG4gICAgbGlzdC5oZWFkID0gbmV4dDtcbiAgfVxuXG4gIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgbmV4dC5wcmV2ID0gcHJldjtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LnRhaWwgPSBwcmV2O1xuICB9XG5cbiAgbm9kZS5wcmV2ID0gbm9kZS5uZXh0ID0gbnVsbDtcblxuICBsaXN0Lmxlbmd0aC0tO1xuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExpbmtlZExpc3QodmFscykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlua2VkTGlzdCk7XG5cbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuXG4gICAgaWYgKHZhbHMgIT0gbnVsbCkge1xuICAgICAgdmFscy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wdXNoKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExpbmtlZExpc3QsIFt7XG4gICAga2V5OiBcInNpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zZXJ0QmVmb3JlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydEJlZm9yZSh2YWwsIG90aGVyTm9kZSkge1xuICAgICAgcmV0dXJuIGFkZChvdGhlck5vZGUucHJldiwgbm9kZUZyb20odmFsKSwgb3RoZXJOb2RlLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zZXJ0QWZ0ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIodmFsLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLCBub2RlRnJvbSh2YWwpLCBvdGhlck5vZGUubmV4dCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydE5vZGVCZWZvcmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zZXJ0Tm9kZUJlZm9yZShuZXdOb2RlLCBvdGhlck5vZGUpIHtcbiAgICAgIHJldHVybiBhZGQob3RoZXJOb2RlLnByZXYsIG5ld05vZGUsIG90aGVyTm9kZSwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluc2VydE5vZGVBZnRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnNlcnROb2RlQWZ0ZXIobmV3Tm9kZSwgb3RoZXJOb2RlKSB7XG4gICAgICByZXR1cm4gYWRkKG90aGVyTm9kZSwgbmV3Tm9kZSwgb3RoZXJOb2RlLm5leHQsIHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2godmFsKSB7XG4gICAgICByZXR1cm4gYWRkKHRoaXMudGFpbCwgbm9kZUZyb20odmFsKSwgbnVsbCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5zaGlmdCh2YWwpIHtcbiAgICAgIHJldHVybiBhZGQobnVsbCwgbm9kZUZyb20odmFsKSwgdGhpcy5oZWFkLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gICAgICByZXR1cm4gX3JlbW92ZShub2RlLCB0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicG9wXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBvcCgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMudGFpbCwgdGhpcykudmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInBvcE5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcG9wTm9kZSgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMudGFpbCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgICAgcmV0dXJuIF9yZW1vdmUodGhpcy5oZWFkLCB0aGlzKS52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hpZnROb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNoaWZ0Tm9kZSgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlKHRoaXMuaGVhZCwgdGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldF9vYmplY3RfYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0X29iamVjdF9hdChpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDw9IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuaGVhZDtcbiAgICAgICAgd2hpbGUgKGkgPCBpbmRleCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRfb2JqZWN0X2F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldF9vYmplY3RfYXQoaW5kZXgsIHZhbHVlKSB7XG4gICAgICBpZiAoaW5kZXggPD0gdGhpcy5sZW5ndGgoKSkge1xuICAgICAgICB2YXIgaSA9IDE7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5oZWFkO1xuICAgICAgICB3aGlsZSAoaSA8IGluZGV4KSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaW5rZWRMaXN0O1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpbmtlZExpc3Q7XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuLypcclxuICpUaGlzIGNsYXNzIGlzIHRoZSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb2ludC5qYXZhIGNsYXNzIGluIGpka1xyXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHksIHApIHtcbiAgdGhpcy54ID0gbnVsbDtcbiAgdGhpcy55ID0gbnVsbDtcbiAgaWYgKHggPT0gbnVsbCAmJiB5ID09IG51bGwgJiYgcCA9PSBudWxsKSB7XG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09ICdudW1iZXInICYmIHR5cGVvZiB5ID09ICdudW1iZXInICYmIHAgPT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfSBlbHNlIGlmICh4LmNvbnN0cnVjdG9yLm5hbWUgPT0gJ1BvaW50JyAmJiB5ID09IG51bGwgJiYgcCA9PSBudWxsKSB7XG4gICAgcCA9IHg7XG4gICAgdGhpcy54ID0gcC54O1xuICAgIHRoaXMueSA9IHAueTtcbiAgfVxufVxuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy55O1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCBwKSB7XG4gIGlmICh4LmNvbnN0cnVjdG9yLm5hbWUgPT0gJ1BvaW50JyAmJiB5ID09IG51bGwgJiYgcCA9PSBudWxsKSB7XG4gICAgcCA9IHg7XG4gICAgdGhpcy5zZXRMb2NhdGlvbihwLngsIHAueSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHggPT0gJ251bWJlcicgJiYgdHlwZW9mIHkgPT0gJ251bWJlcicgJiYgcCA9PSBudWxsKSB7XG4gICAgLy9pZiBib3RoIHBhcmFtZXRlcnMgYXJlIGludGVnZXIganVzdCBtb3ZlICh4LHkpIGxvY2F0aW9uXG4gICAgaWYgKHBhcnNlSW50KHgpID09IHggJiYgcGFyc2VJbnQoeSkgPT0geSkge1xuICAgICAgdGhpcy5tb3ZlKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnggPSBNYXRoLmZsb29yKHggKyAwLjUpO1xuICAgICAgdGhpcy55ID0gTWF0aC5mbG9vcih5ICsgMC41KTtcbiAgICB9XG4gIH1cbn07XG5cblBvaW50LnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn07XG5cblBvaW50LnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAoZHgsIGR5KSB7XG4gIHRoaXMueCArPSBkeDtcbiAgdGhpcy55ICs9IGR5O1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgaWYgKG9iai5jb25zdHJ1Y3Rvci5uYW1lID09IFwiUG9pbnRcIikge1xuICAgIHZhciBwdCA9IG9iajtcbiAgICByZXR1cm4gdGhpcy54ID09IHB0LnggJiYgdGhpcy55ID09IHB0Lnk7XG4gIH1cbiAgcmV0dXJuIHRoaXMgPT0gb2JqO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IFBvaW50KCkuY29uc3RydWN0b3IubmFtZSArIFwiW3g9XCIgKyB0aGlzLnggKyBcIix5PVwiICsgdGhpcy55ICsgXCJdXCI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIFJlY3RhbmdsZUQoeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICB0aGlzLnggPSAwO1xuICB0aGlzLnkgPSAwO1xuICB0aGlzLndpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuXG4gIGlmICh4ICE9IG51bGwgJiYgeSAhPSBudWxsICYmIHdpZHRoICE9IG51bGwgJiYgaGVpZ2h0ICE9IG51bGwpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG59XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLng7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcbiAgdGhpcy54ID0geDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5zZXRZID0gZnVuY3Rpb24gKHkpIHtcbiAgdGhpcy55ID0geTtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKHdpZHRoKSB7XG4gIHRoaXMud2lkdGggPSB3aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24gKGhlaWdodCkge1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFJpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy54ICsgdGhpcy53aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldEJvdHRvbSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueSArIHRoaXMuaGVpZ2h0O1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uIChhKSB7XG4gIGlmICh0aGlzLmdldFJpZ2h0KCkgPCBhLngpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5nZXRCb3R0b20oKSA8IGEueSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhLmdldFJpZ2h0KCkgPCB0aGlzLngpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYS5nZXRCb3R0b20oKSA8IHRoaXMueSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0Q2VudGVyWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMueCArIHRoaXMud2lkdGggLyAyO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWluWCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0TWF4WCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpICsgdGhpcy53aWR0aDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldENlbnRlclkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnkgKyB0aGlzLmhlaWdodCAvIDI7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRNaW5ZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5nZXRZKCk7XG59O1xuXG5SZWN0YW5nbGVELnByb3RvdHlwZS5nZXRNYXhZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5nZXRZKCkgKyB0aGlzLmhlaWdodDtcbn07XG5cblJlY3RhbmdsZUQucHJvdG90eXBlLmdldFdpZHRoSGFsZiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMud2lkdGggLyAyO1xufTtcblxuUmVjdGFuZ2xlRC5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0IC8gMjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVjdGFuZ2xlRDtcblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIFVuaXF1ZUlER2VuZXJldG9yKCkge31cblxuVW5pcXVlSURHZW5lcmV0b3IubGFzdElEID0gMDtcblxuVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGlmIChVbmlxdWVJREdlbmVyZXRvci5pc1ByaW1pdGl2ZShvYmopKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICBpZiAob2JqLnVuaXF1ZUlEICE9IG51bGwpIHtcbiAgICByZXR1cm4gb2JqLnVuaXF1ZUlEO1xuICB9XG4gIG9iai51bmlxdWVJRCA9IFVuaXF1ZUlER2VuZXJldG9yLmdldFN0cmluZygpO1xuICBVbmlxdWVJREdlbmVyZXRvci5sYXN0SUQrKztcbiAgcmV0dXJuIG9iai51bmlxdWVJRDtcbn07XG5cblVuaXF1ZUlER2VuZXJldG9yLmdldFN0cmluZyA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaWQgPT0gbnVsbCkgaWQgPSBVbmlxdWVJREdlbmVyZXRvci5sYXN0SUQ7XG4gIHJldHVybiBcIk9iamVjdCNcIiArIGlkICsgXCJcIjtcbn07XG5cblVuaXF1ZUlER2VuZXJldG9yLmlzUHJpbWl0aXZlID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBhcmcgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihhcmcpO1xuICByZXR1cm4gYXJnID09IG51bGwgfHwgdHlwZSAhPSBcIm9iamVjdFwiICYmIHR5cGUgIT0gXCJmdW5jdGlvblwiO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBVbmlxdWVJREdlbmVyZXRvcjtcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cblxudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgTEdyYXBoTWFuYWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG52YXIgTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIExFZGdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIFBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgVHJhbnNmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgRW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG5mdW5jdGlvbiBMYXlvdXQoaXNSZW1vdGVVc2UpIHtcbiAgRW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIC8vTGF5b3V0IFF1YWxpdHk6IDA6ZHJhZnQsIDE6ZGVmYXVsdCwgMjpwcm9vZlxuICB0aGlzLmxheW91dFF1YWxpdHkgPSBMYXlvdXRDb25zdGFudHMuUVVBTElUWTtcbiAgLy9XaGV0aGVyIGxheW91dCBzaG91bGQgY3JlYXRlIGJlbmRwb2ludHMgYXMgbmVlZGVkIG9yIG5vdFxuICB0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO1xuICAvL1doZXRoZXIgbGF5b3V0IHNob3VsZCBiZSBpbmNyZW1lbnRhbCBvciBub3RcbiAgdGhpcy5pbmNyZW1lbnRhbCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMO1xuICAvL1doZXRoZXIgd2UgYW5pbWF0ZSBmcm9tIGJlZm9yZSB0byBhZnRlciBsYXlvdXQgbm9kZSBwb3NpdGlvbnNcbiAgdGhpcy5hbmltYXRpb25PbkxheW91dCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ7XG4gIC8vV2hldGhlciB3ZSBhbmltYXRlIHRoZSBsYXlvdXQgcHJvY2VzcyBvciBub3RcbiAgdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVDtcbiAgLy9OdW1iZXIgaXRlcmF0aW9ucyB0aGF0IHNob3VsZCBiZSBkb25lIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgYW5pbWF0aW9uc1xuICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q7XG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgb3Igbm90IGxlYWYgbm9kZXMgKG5vbi1jb21wb3VuZCBub2RlcykgYXJlIG9mIHVuaWZvcm0gc2l6ZXMuIFdoZW5cclxuICAgKiB0aGV5IGFyZSwgYm90aCBzcHJpbmcgYW5kIHJlcHVsc2lvbiBmb3JjZXMgYmV0d2VlbiB0d28gbGVhZiBub2RlcyBjYW4gYmVcclxuICAgKiBjYWxjdWxhdGVkIHdpdGhvdXQgdGhlIGV4cGVuc2l2ZSBjbGlwcGluZyBwb2ludCBjYWxjdWxhdGlvbnMsIHJlc3VsdGluZ1xyXG4gICAqIGluIG1ham9yIHNwZWVkLXVwLlxyXG4gICAqL1xuICB0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM7XG4gIC8qKlxyXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgY3JlYXRpb24gb2YgYmVuZHBvaW50cyBieSB1c2luZyBkdW1teSBub2RlcyBhbmQgZWRnZXMuXHJcbiAgICogTWFwcyBhbiBMRWRnZSB0byBpdHMgZHVtbXkgYmVuZHBvaW50IHBhdGguXHJcbiAgICovXG4gIHRoaXMuZWRnZVRvRHVtbXlOb2RlcyA9IG5ldyBNYXAoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBuZXcgTEdyYXBoTWFuYWdlcih0aGlzKTtcbiAgdGhpcy5pc0xheW91dEZpbmlzaGVkID0gZmFsc2U7XG4gIHRoaXMuaXNTdWJMYXlvdXQgPSBmYWxzZTtcbiAgdGhpcy5pc1JlbW90ZVVzZSA9IGZhbHNlO1xuXG4gIGlmIChpc1JlbW90ZVVzZSAhPSBudWxsKSB7XG4gICAgdGhpcy5pc1JlbW90ZVVzZSA9IGlzUmVtb3RlVXNlO1xuICB9XG59XG5cbkxheW91dC5SQU5ET01fU0VFRCA9IDE7XG5cbkxheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVtaXR0ZXIucHJvdG90eXBlKTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlcjtcbn07XG5cbkxheW91dC5wcm90b3R5cGUuZ2V0QWxsTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5nZXRBbGxFZGdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTtcbn07XG5cbkxheW91dC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZ20gPSBuZXcgTEdyYXBoTWFuYWdlcih0aGlzKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcbiAgcmV0dXJuIGdtO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdHcmFwaCA9IGZ1bmN0aW9uICh2R3JhcGgpIHtcbiAgcmV0dXJuIG5ldyBMR3JhcGgobnVsbCwgdGhpcy5ncmFwaE1hbmFnZXIsIHZHcmFwaCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLm5ld05vZGUgPSBmdW5jdGlvbiAodk5vZGUpIHtcbiAgcmV0dXJuIG5ldyBMTm9kZSh0aGlzLmdyYXBoTWFuYWdlciwgdk5vZGUpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5uZXdFZGdlID0gZnVuY3Rpb24gKHZFZGdlKSB7XG4gIHJldHVybiBuZXcgTEVkZ2UobnVsbCwgbnVsbCwgdkVkZ2UpO1xufTtcblxuTGF5b3V0LnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkgPT0gbnVsbCB8fCB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGggPT0gMCB8fCB0aGlzLmdyYXBoTWFuYWdlci5pbmNsdWRlc0ludmFsaWRFZGdlKCk7XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnJ1bkxheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5pc0xheW91dEZpbmlzaGVkID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMudGlsaW5nUHJlTGF5b3V0KSB7XG4gICAgdGhpcy50aWxpbmdQcmVMYXlvdXQoKTtcbiAgfVxuXG4gIHRoaXMuaW5pdFBhcmFtZXRlcnMoKTtcbiAgdmFyIGlzTGF5b3V0U3VjY2Vzc2Z1bGw7XG5cbiAgaWYgKHRoaXMuY2hlY2tMYXlvdXRTdWNjZXNzKCkpIHtcbiAgICBpc0xheW91dFN1Y2Nlc3NmdWxsID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgaXNMYXlvdXRTdWNjZXNzZnVsbCA9IHRoaXMubGF5b3V0KCk7XG4gIH1cblxuICBpZiAoTGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPT09ICdkdXJpbmcnKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhICdkdXJpbmcnIGxheW91dCBhbmltYXRpb24uIExheW91dCBpcyBub3QgZmluaXNoZWQgeWV0LiBcbiAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlc2UgaW4gaW5kZXguanMgd2hlbiBsYXlvdXQgaXMgcmVhbGx5IGZpbmlzaGVkLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0xheW91dFN1Y2Nlc3NmdWxsKSB7XG4gICAgaWYgKCF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgICB0aGlzLmRvUG9zdExheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnRpbGluZ1Bvc3RMYXlvdXQpIHtcbiAgICB0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKTtcbiAgfVxuXG4gIHRoaXMuaXNMYXlvdXRGaW5pc2hlZCA9IHRydWU7XG5cbiAgcmV0dXJuIGlzTGF5b3V0U3VjY2Vzc2Z1bGw7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIG9wZXJhdGlvbnMgcmVxdWlyZWQgYWZ0ZXIgbGF5b3V0LlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuZG9Qb3N0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICAvL2Fzc2VydCAhaXNTdWJMYXlvdXQgOiBcIlNob3VsZCBub3QgYmUgY2FsbGVkIG9uIHN1Yi1sYXlvdXQhXCI7XG4gIC8vIFByb3BhZ2F0ZSBnZW9tZXRyaWMgY2hhbmdlcyB0byB2LWxldmVsIG9iamVjdHNcbiAgaWYgKCF0aGlzLmluY3JlbWVudGFsKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0oKTtcbiAgfVxuICB0aGlzLnVwZGF0ZSgpO1xufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGdlb21ldHJ5IG9mIHRoZSB0YXJnZXQgZ3JhcGggYWNjb3JkaW5nIHRvXHJcbiAqIGNhbGN1bGF0ZWQgbGF5b3V0LlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUudXBkYXRlMiA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gdXBkYXRlIGJlbmQgcG9pbnRzXG4gIGlmICh0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQpIHtcbiAgICB0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpO1xuXG4gICAgLy8gcmVzZXQgYWxsIGVkZ2VzLCBzaW5jZSB0aGUgdG9wb2xvZ3kgaGFzIGNoYW5nZWRcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG4gIH1cblxuICAvLyBwZXJmb3JtIGVkZ2UsIG5vZGUgYW5kIHJvb3QgdXBkYXRlcyBpZiBsYXlvdXQgaXMgbm90IGNhbGxlZFxuICAvLyByZW1vdGVseVxuICBpZiAoIXRoaXMuaXNSZW1vdGVVc2UpIHtcbiAgICAvLyB1cGRhdGUgYWxsIGVkZ2VzXG4gICAgdmFyIGVkZ2U7XG4gICAgdmFyIGFsbEVkZ2VzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlZGdlID0gYWxsRWRnZXNbaV07XG4gICAgICAvLyAgICAgIHRoaXMudXBkYXRlKGVkZ2UpO1xuICAgIH1cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBub2Rlc1xuICAgIHZhciBub2RlO1xuICAgIHZhciBub2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIC8vICAgICAgdGhpcy51cGRhdGUobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHJvb3QgZ3JhcGhcbiAgICB0aGlzLnVwZGF0ZSh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpO1xuICB9XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgdGhpcy51cGRhdGUyKCk7XG4gIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTE5vZGUpIHtcbiAgICB2YXIgbm9kZSA9IG9iajtcbiAgICBpZiAobm9kZS5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgIC8vIHNpbmNlIG5vZGUgaXMgY29tcG91bmQsIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBjaGlsZCBub2Rlc1xuICAgICAgdmFyIG5vZGVzID0gbm9kZS5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHVwZGF0ZShub2Rlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGwtbGV2ZWwgbm9kZSBpcyBhc3NvY2lhdGVkIHdpdGggYSB2LWxldmVsIGdyYXBoIG9iamVjdCxcbiAgICAvLyB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdi1sZXZlbCBub2RlIGltcGxlbWVudHMgdGhlXG4gICAgLy8gaW50ZXJmYWNlIFVwZGF0YWJsZS5cbiAgICBpZiAobm9kZS52R3JhcGhPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gY2FzdCB0byBVcGRhdGFibGUgd2l0aG91dCBhbnkgdHlwZSBjaGVja1xuICAgICAgdmFyIHZOb2RlID0gbm9kZS52R3JhcGhPYmplY3Q7XG5cbiAgICAgIC8vIGNhbGwgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIGludGVyZmFjZVxuICAgICAgdk5vZGUudXBkYXRlKG5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMRWRnZSkge1xuICAgIHZhciBlZGdlID0gb2JqO1xuICAgIC8vIGlmIHRoZSBsLWxldmVsIGVkZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdi1sZXZlbCBncmFwaCBvYmplY3QsXG4gICAgLy8gdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHYtbGV2ZWwgZWRnZSBpbXBsZW1lbnRzIHRoZVxuICAgIC8vIGludGVyZmFjZSBVcGRhdGFibGUuXG5cbiAgICBpZiAoZWRnZS52R3JhcGhPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gY2FzdCB0byBVcGRhdGFibGUgd2l0aG91dCBhbnkgdHlwZSBjaGVja1xuICAgICAgdmFyIHZFZGdlID0gZWRnZS52R3JhcGhPYmplY3Q7XG5cbiAgICAgIC8vIGNhbGwgdGhlIHVwZGF0ZSBtZXRob2Qgb2YgdGhlIGludGVyZmFjZVxuICAgICAgdkVkZ2UudXBkYXRlKGVkZ2UpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMR3JhcGgpIHtcbiAgICB2YXIgZ3JhcGggPSBvYmo7XG4gICAgLy8gaWYgdGhlIGwtbGV2ZWwgZ3JhcGggaXMgYXNzb2NpYXRlZCB3aXRoIGEgdi1sZXZlbCBncmFwaCBvYmplY3QsXG4gICAgLy8gdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHYtbGV2ZWwgb2JqZWN0IGltcGxlbWVudHMgdGhlXG4gICAgLy8gaW50ZXJmYWNlIFVwZGF0YWJsZS5cblxuICAgIGlmIChncmFwaC52R3JhcGhPYmplY3QgIT0gbnVsbCkge1xuICAgICAgLy8gY2FzdCB0byBVcGRhdGFibGUgd2l0aG91dCBhbnkgdHlwZSBjaGVja1xuICAgICAgdmFyIHZHcmFwaCA9IGdyYXBoLnZHcmFwaE9iamVjdDtcblxuICAgICAgLy8gY2FsbCB0aGUgdXBkYXRlIG1ldGhvZCBvZiB0aGUgaW50ZXJmYWNlXG4gICAgICB2R3JhcGgudXBkYXRlKGdyYXBoKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBhbGwgbGF5b3V0IHBhcmFtZXRlcnMgdG8gZGVmYXVsdCB2YWx1ZXNcclxuICogZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgdGhpcy5sYXlvdXRRdWFsaXR5ID0gTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFk7XG4gICAgdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVDtcbiAgICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q7XG4gICAgdGhpcy5hbmltYXRpb25PbkxheW91dCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ7XG4gICAgdGhpcy5pbmNyZW1lbnRhbCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMO1xuICAgIHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7XG4gICAgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyA9IExheW91dENvbnN0YW50cy5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTO1xuICB9XG5cbiAgaWYgKHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0KSB7XG4gICAgdGhpcy5hbmltYXRpb25PbkxheW91dCA9IGZhbHNlO1xuICB9XG59O1xuXG5MYXlvdXQucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChuZXdMZWZ0VG9wKSB7XG4gIGlmIChuZXdMZWZ0VG9wID09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudHJhbnNmb3JtKG5ldyBQb2ludEQoMCwgMCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG9iamVjdCAoZnJvbSBFY2xpcHNlIHRvIGxheW91dCkuIFdoZW4gYW5cbiAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybSBpcyBhcHBsaWVkLCB3ZSBnZXQgdXBwZXItbGVmdCBjb29yZGluYXRlIG9mIHRoZVxuICAgIC8vIGRyYXdpbmcgb3IgdGhlIHJvb3QgZ3JhcGggYXQgZ2l2ZW4gaW5wdXQgY29vcmRpbmF0ZSAoc29tZSBtYXJnaW5zXG4gICAgLy8gYWxyZWFkeSBpbmNsdWRlZCBpbiBjYWxjdWxhdGlvbiBvZiBsZWZ0LXRvcCkuXG5cbiAgICB2YXIgdHJhbnMgPSBuZXcgVHJhbnNmb3JtKCk7XG4gICAgdmFyIGxlZnRUb3AgPSB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO1xuXG4gICAgaWYgKGxlZnRUb3AgIT0gbnVsbCkge1xuICAgICAgdHJhbnMuc2V0V29ybGRPcmdYKG5ld0xlZnRUb3AueCk7XG4gICAgICB0cmFucy5zZXRXb3JsZE9yZ1kobmV3TGVmdFRvcC55KTtcblxuICAgICAgdHJhbnMuc2V0RGV2aWNlT3JnWChsZWZ0VG9wLngpO1xuICAgICAgdHJhbnMuc2V0RGV2aWNlT3JnWShsZWZ0VG9wLnkpO1xuXG4gICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldEFsbE5vZGVzKCk7XG4gICAgICB2YXIgbm9kZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIG5vZGUudHJhbnNmb3JtKHRyYW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkxheW91dC5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5ID0gZnVuY3Rpb24gKGdyYXBoKSB7XG5cbiAgaWYgKGdyYXBoID09IHVuZGVmaW5lZCkge1xuICAgIC8vYXNzZXJ0ICF0aGlzLmluY3JlbWVudGFsO1xuICAgIHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKTtcbiAgICB0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHModHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxOb2RlO1xuICAgIHZhciBjaGlsZEdyYXBoO1xuXG4gICAgdmFyIG5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsTm9kZSA9IG5vZGVzW2ldO1xuICAgICAgY2hpbGRHcmFwaCA9IGxOb2RlLmdldENoaWxkKCk7XG5cbiAgICAgIGlmIChjaGlsZEdyYXBoID09IG51bGwpIHtcbiAgICAgICAgbE5vZGUuc2NhdHRlcigpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZEdyYXBoLmdldE5vZGVzKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbE5vZGUuc2NhdHRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoY2hpbGRHcmFwaCk7XG4gICAgICAgIGxOb2RlLnVwZGF0ZUJvdW5kcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHRyZWVzIHdoZXJlIGVhY2ggdHJlZSBpcyByZXByZXNlbnRlZCBhcyBhXHJcbiAqIGxpc3Qgb2YgbC1ub2Rlcy4gVGhlIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBzaXplIDAgd2hlbjpcclxuICogLSBUaGUgZ3JhcGggaXMgbm90IGZsYXQgb3JcclxuICogLSBPbmUgb2YgdGhlIGNvbXBvbmVudChzKSBvZiB0aGUgZ3JhcGggaXMgbm90IGEgdHJlZS5cclxuICovXG5MYXlvdXQucHJvdG90eXBlLmdldEZsYXRGb3Jlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBmbGF0Rm9yZXN0ID0gW107XG4gIHZhciBpc0ZvcmVzdCA9IHRydWU7XG5cbiAgLy8gUXVpY2sgcmVmZXJlbmNlIGZvciBhbGwgbm9kZXMgaW4gdGhlIGdyYXBoIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoXG4gIC8vIHRoaXMgbGF5b3V0LiBUaGUgbGlzdCBzaG91bGQgbm90IGJlIGNoYW5nZWQuXG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpO1xuXG4gIC8vIEZpcnN0IGJlIHN1cmUgdGhhdCB0aGUgZ3JhcGggaXMgZmxhdFxuICB2YXIgaXNGbGF0ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFsbE5vZGVzW2ldLmdldENoaWxkKCkgIT0gbnVsbCkge1xuICAgICAgaXNGbGF0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGVtcHR5IGZvcmVzdCBpZiB0aGUgZ3JhcGggaXMgbm90IGZsYXQuXG4gIGlmICghaXNGbGF0KSB7XG4gICAgcmV0dXJuIGZsYXRGb3Jlc3Q7XG4gIH1cblxuICAvLyBSdW4gQkZTIGZvciBlYWNoIGNvbXBvbmVudCBvZiB0aGUgZ3JhcGguXG5cbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciB0b0JlVmlzaXRlZCA9IFtdO1xuICB2YXIgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgdmFyIHVuUHJvY2Vzc2VkTm9kZXMgPSBbXTtcblxuICB1blByb2Nlc3NlZE5vZGVzID0gdW5Qcm9jZXNzZWROb2Rlcy5jb25jYXQoYWxsTm9kZXMpO1xuXG4gIC8vIEVhY2ggaXRlcmF0aW9uIG9mIHRoaXMgbG9vcCBmaW5kcyBhIGNvbXBvbmVudCBvZiB0aGUgZ3JhcGggYW5kXG4gIC8vIGRlY2lkZXMgd2hldGhlciBpdCBpcyBhIHRyZWUgb3Igbm90LiBJZiBpdCBpcyBhIHRyZWUsIGFkZHMgaXQgdG8gdGhlXG4gIC8vIGZvcmVzdCBhbmQgY29udGludWVkIHdpdGggdGhlIG5leHQgY29tcG9uZW50LlxuXG4gIHdoaWxlICh1blByb2Nlc3NlZE5vZGVzLmxlbmd0aCA+IDAgJiYgaXNGb3Jlc3QpIHtcbiAgICB0b0JlVmlzaXRlZC5wdXNoKHVuUHJvY2Vzc2VkTm9kZXNbMF0pO1xuXG4gICAgLy8gU3RhcnQgdGhlIEJGUy4gRWFjaCBpdGVyYXRpb24gb2YgdGhpcyBsb29wIHZpc2l0cyBhIG5vZGUgaW4gYVxuICAgIC8vIEJGUyBtYW5uZXIuXG4gICAgd2hpbGUgKHRvQmVWaXNpdGVkLmxlbmd0aCA+IDAgJiYgaXNGb3Jlc3QpIHtcbiAgICAgIC8vcG9vbCBvcGVyYXRpb25cbiAgICAgIHZhciBjdXJyZW50Tm9kZSA9IHRvQmVWaXNpdGVkWzBdO1xuICAgICAgdG9CZVZpc2l0ZWQuc3BsaWNlKDAsIDEpO1xuICAgICAgdmlzaXRlZC5hZGQoY3VycmVudE5vZGUpO1xuXG4gICAgICAvLyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoaXMgbm9kZVxuICAgICAgdmFyIG5laWdoYm9yRWRnZXMgPSBjdXJyZW50Tm9kZS5nZXRFZGdlcygpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5laWdoYm9yRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1cnJlbnROZWlnaGJvciA9IG5laWdoYm9yRWRnZXNbaV0uZ2V0T3RoZXJFbmQoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIC8vIElmIEJGUyBpcyBub3QgZ3Jvd2luZyBmcm9tIHRoaXMgbmVpZ2hib3IuXG4gICAgICAgIGlmIChwYXJlbnRzLmdldChjdXJyZW50Tm9kZSkgIT0gY3VycmVudE5laWdoYm9yKSB7XG4gICAgICAgICAgLy8gV2UgaGF2ZW4ndCBwcmV2aW91c2x5IHZpc2l0ZWQgdGhpcyBuZWlnaGJvci5cbiAgICAgICAgICBpZiAoIXZpc2l0ZWQuaGFzKGN1cnJlbnROZWlnaGJvcikpIHtcbiAgICAgICAgICAgIHRvQmVWaXNpdGVkLnB1c2goY3VycmVudE5laWdoYm9yKTtcbiAgICAgICAgICAgIHBhcmVudHMuc2V0KGN1cnJlbnROZWlnaGJvciwgY3VycmVudE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlIHByZXZpb3VzbHkgdmlzaXRlZCB0aGlzIG5laWdoYm9yIGFuZFxuICAgICAgICAgIC8vIHRoaXMgbmVpZ2hib3IgaXMgbm90IHBhcmVudCBvZiBjdXJyZW50Tm9kZSwgZ2l2ZW5cbiAgICAgICAgICAvLyBncmFwaCBjb250YWlucyBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB0cmVlLCBoZW5jZVxuICAgICAgICAgIC8vIGl0IGlzIG5vdCBhIGZvcmVzdC5cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaXNGb3Jlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgZ3JhcGggY29udGFpbnMgYSBjb21wb25lbnQgdGhhdCBpcyBub3QgYSB0cmVlLiBFbXB0eVxuICAgIC8vIHByZXZpb3VzbHkgZm91bmQgdHJlZXMuIFRoZSBtZXRob2Qgd2lsbCBlbmQuXG4gICAgaWYgKCFpc0ZvcmVzdCkge1xuICAgICAgZmxhdEZvcmVzdCA9IFtdO1xuICAgIH1cbiAgICAvLyBTYXZlIGN1cnJlbnRseSB2aXNpdGVkIG5vZGVzIGFzIGEgdHJlZSBpbiBvdXIgZm9yZXN0LiBSZXNldFxuICAgIC8vIHZpc2l0ZWQgYW5kIHBhcmVudHMgbGlzdHMuIENvbnRpbnVlIHdpdGggdGhlIG5leHQgY29tcG9uZW50IG9mXG4gICAgLy8gdGhlIGdyYXBoLCBpZiBhbnkuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB0ZW1wID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh2aXNpdGVkKSk7XG4gICAgICAgIGZsYXRGb3Jlc3QucHVzaCh0ZW1wKTtcbiAgICAgICAgLy9mbGF0Rm9yZXN0ID0gZmxhdEZvcmVzdC5jb25jYXQodGVtcCk7XG4gICAgICAgIC8vdW5Qcm9jZXNzZWROb2Rlcy5yZW1vdmVBbGwodmlzaXRlZCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVtcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRlbXBbaV07XG4gICAgICAgICAgdmFyIGluZGV4ID0gdW5Qcm9jZXNzZWROb2Rlcy5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdW5Qcm9jZXNzZWROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2aXNpdGVkID0gbmV3IFNldCgpO1xuICAgICAgICBwYXJlbnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZsYXRGb3Jlc3Q7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBkdW1teSBub2RlcyAoYW4gbC1sZXZlbCBub2RlIHdpdGggbWluaW1hbCBkaW1lbnNpb25zKVxyXG4gKiBmb3IgdGhlIGdpdmVuIGVkZ2UgKG9uZSBwZXIgYmVuZHBvaW50KS4gVGhlIGV4aXN0aW5nIGwtbGV2ZWwgc3RydWN0dXJlXHJcbiAqIGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXHJcbiAqL1xuTGF5b3V0LnByb3RvdHlwZS5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBkdW1teU5vZGVzID0gW107XG4gIHZhciBwcmV2ID0gZWRnZS5zb3VyY2U7XG5cbiAgdmFyIGdyYXBoID0gdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKGVkZ2Uuc291cmNlLCBlZGdlLnRhcmdldCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlLmJlbmRwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBjcmVhdGUgbmV3IGR1bW15IG5vZGVcbiAgICB2YXIgZHVtbXlOb2RlID0gdGhpcy5uZXdOb2RlKG51bGwpO1xuICAgIGR1bW15Tm9kZS5zZXRSZWN0KG5ldyBQb2ludCgwLCAwKSwgbmV3IERpbWVuc2lvbigxLCAxKSk7XG5cbiAgICBncmFwaC5hZGQoZHVtbXlOb2RlKTtcblxuICAgIC8vIGNyZWF0ZSBuZXcgZHVtbXkgZWRnZSBiZXR3ZWVuIHByZXYgYW5kIGR1bW15IG5vZGVcbiAgICB2YXIgZHVtbXlFZGdlID0gdGhpcy5uZXdFZGdlKG51bGwpO1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChkdW1teUVkZ2UsIHByZXYsIGR1bW15Tm9kZSk7XG5cbiAgICBkdW1teU5vZGVzLmFkZChkdW1teU5vZGUpO1xuICAgIHByZXYgPSBkdW1teU5vZGU7XG4gIH1cblxuICB2YXIgZHVtbXlFZGdlID0gdGhpcy5uZXdFZGdlKG51bGwpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5hZGQoZHVtbXlFZGdlLCBwcmV2LCBlZGdlLnRhcmdldCk7XG5cbiAgdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChlZGdlLCBkdW1teU5vZGVzKTtcblxuICAvLyByZW1vdmUgcmVhbCBlZGdlIGZyb20gZ3JhcGggbWFuYWdlciBpZiBpdCBpcyBpbnRlci1ncmFwaFxuICBpZiAoZWRnZS5pc0ludGVyR3JhcGgoKSkge1xuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShlZGdlKTtcbiAgfVxuICAvLyBlbHNlLCByZW1vdmUgdGhlIGVkZ2UgZnJvbSB0aGUgY3VycmVudCBncmFwaFxuICBlbHNlIHtcbiAgICAgIGdyYXBoLnJlbW92ZShlZGdlKTtcbiAgICB9XG5cbiAgcmV0dXJuIGR1bW15Tm9kZXM7XG59O1xuXG4vKipcclxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBiZW5kcG9pbnRzIGZvciBlZGdlcyBmcm9tIHRoZSBkdW1teSBub2Rlc1xyXG4gKiBhdCBsLWxldmVsLlxyXG4gKi9cbkxheW91dC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgZWRnZXMgPSBlZGdlcy5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7XG4gIGVkZ2VzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KGVkZ2VzKTtcblxuICBmb3IgKHZhciBrID0gMDsgayA8IGVkZ2VzLmxlbmd0aDsgaysrKSB7XG4gICAgdmFyIGxFZGdlID0gZWRnZXNba107XG5cbiAgICBpZiAobEVkZ2UuYmVuZHBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGF0aCA9IHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5nZXQobEVkZ2UpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGR1bW15Tm9kZSA9IHBhdGhbaV07XG4gICAgICAgIHZhciBwID0gbmV3IFBvaW50RChkdW1teU5vZGUuZ2V0Q2VudGVyWCgpLCBkdW1teU5vZGUuZ2V0Q2VudGVyWSgpKTtcblxuICAgICAgICAvLyB1cGRhdGUgYmVuZHBvaW50J3MgbG9jYXRpb24gYWNjb3JkaW5nIHRvIGR1bW15IG5vZGVcbiAgICAgICAgdmFyIGVicCA9IGxFZGdlLmJlbmRwb2ludHMuZ2V0KGkpO1xuICAgICAgICBlYnAueCA9IHAueDtcbiAgICAgICAgZWJwLnkgPSBwLnk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBkdW1teSBub2RlLCBkdW1teSBlZGdlcyBpbmNpZGVudCB3aXRoIHRoaXNcbiAgICAgICAgLy8gZHVtbXkgbm9kZSBpcyBhbHNvIHJlbW92ZWQgKHdpdGhpbiB0aGUgcmVtb3ZlIG1ldGhvZClcbiAgICAgICAgZHVtbXlOb2RlLmdldE93bmVyKCkucmVtb3ZlKGR1bW15Tm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0aGUgcmVhbCBlZGdlIHRvIGdyYXBoXG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5hZGQobEVkZ2UsIGxFZGdlLnNvdXJjZSwgbEVkZ2UudGFyZ2V0KTtcbiAgICB9XG4gIH1cbn07XG5cbkxheW91dC50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoc2xpZGVyVmFsdWUsIGRlZmF1bHRWYWx1ZSwgbWluRGl2LCBtYXhNdWwpIHtcbiAgaWYgKG1pbkRpdiAhPSB1bmRlZmluZWQgJiYgbWF4TXVsICE9IHVuZGVmaW5lZCkge1xuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChzbGlkZXJWYWx1ZSA8PSA1MCkge1xuICAgICAgdmFyIG1pblZhbHVlID0gZGVmYXVsdFZhbHVlIC8gbWluRGl2O1xuICAgICAgdmFsdWUgLT0gKGRlZmF1bHRWYWx1ZSAtIG1pblZhbHVlKSAvIDUwICogKDUwIC0gc2xpZGVyVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF4VmFsdWUgPSBkZWZhdWx0VmFsdWUgKiBtYXhNdWw7XG4gICAgICB2YWx1ZSArPSAobWF4VmFsdWUgLSBkZWZhdWx0VmFsdWUpIC8gNTAgKiAoc2xpZGVyVmFsdWUgLSA1MCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBhLCBiO1xuXG4gICAgaWYgKHNsaWRlclZhbHVlIDw9IDUwKSB7XG4gICAgICBhID0gOS4wICogZGVmYXVsdFZhbHVlIC8gNTAwLjA7XG4gICAgICBiID0gZGVmYXVsdFZhbHVlIC8gMTAuMDtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IDkuMCAqIGRlZmF1bHRWYWx1ZSAvIDUwLjA7XG4gICAgICBiID0gLTggKiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGEgKiBzbGlkZXJWYWx1ZSArIGI7XG4gIH1cbn07XG5cbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBmaW5kcyBhbmQgcmV0dXJucyB0aGUgY2VudGVyIG9mIHRoZSBnaXZlbiBub2RlcywgYXNzdW1pbmdcclxuICogdGhhdCB0aGUgZ2l2ZW4gbm9kZXMgZm9ybSBhIHRyZWUgaW4gdGhlbXNlbHZlcy5cclxuICovXG5MYXlvdXQuZmluZENlbnRlck9mVHJlZSA9IGZ1bmN0aW9uIChub2Rlcykge1xuICB2YXIgbGlzdCA9IFtdO1xuICBsaXN0ID0gbGlzdC5jb25jYXQobm9kZXMpO1xuXG4gIHZhciByZW1vdmVkTm9kZXMgPSBbXTtcbiAgdmFyIHJlbWFpbmluZ0RlZ3JlZXMgPSBuZXcgTWFwKCk7XG4gIHZhciBmb3VuZENlbnRlciA9IGZhbHNlO1xuICB2YXIgY2VudGVyTm9kZSA9IG51bGw7XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09IDEgfHwgbGlzdC5sZW5ndGggPT0gMikge1xuICAgIGZvdW5kQ2VudGVyID0gdHJ1ZTtcbiAgICBjZW50ZXJOb2RlID0gbGlzdFswXTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbGlzdFtpXTtcbiAgICB2YXIgZGVncmVlID0gbm9kZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTtcbiAgICByZW1haW5pbmdEZWdyZWVzLnNldChub2RlLCBub2RlLmdldE5laWdoYm9yc0xpc3QoKS5zaXplKTtcblxuICAgIGlmIChkZWdyZWUgPT0gMSkge1xuICAgICAgcmVtb3ZlZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRlbXBMaXN0ID0gW107XG4gIHRlbXBMaXN0ID0gdGVtcExpc3QuY29uY2F0KHJlbW92ZWROb2Rlcyk7XG5cbiAgd2hpbGUgKCFmb3VuZENlbnRlcikge1xuICAgIHZhciB0ZW1wTGlzdDIgPSBbXTtcbiAgICB0ZW1wTGlzdDIgPSB0ZW1wTGlzdDIuY29uY2F0KHRlbXBMaXN0KTtcbiAgICB0ZW1wTGlzdCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGxpc3RbaV07XG5cbiAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihub2RlKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5laWdoYm91cnMgPSBub2RlLmdldE5laWdoYm9yc0xpc3QoKTtcblxuICAgICAgbmVpZ2hib3Vycy5mb3JFYWNoKGZ1bmN0aW9uIChuZWlnaGJvdXIpIHtcbiAgICAgICAgaWYgKHJlbW92ZWROb2Rlcy5pbmRleE9mKG5laWdoYm91cikgPCAwKSB7XG4gICAgICAgICAgdmFyIG90aGVyRGVncmVlID0gcmVtYWluaW5nRGVncmVlcy5nZXQobmVpZ2hib3VyKTtcbiAgICAgICAgICB2YXIgbmV3RGVncmVlID0gb3RoZXJEZWdyZWUgLSAxO1xuXG4gICAgICAgICAgaWYgKG5ld0RlZ3JlZSA9PSAxKSB7XG4gICAgICAgICAgICB0ZW1wTGlzdC5wdXNoKG5laWdoYm91cik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVtYWluaW5nRGVncmVlcy5zZXQobmVpZ2hib3VyLCBuZXdEZWdyZWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVkTm9kZXMgPSByZW1vdmVkTm9kZXMuY29uY2F0KHRlbXBMaXN0KTtcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAxIHx8IGxpc3QubGVuZ3RoID09IDIpIHtcbiAgICAgIGZvdW5kQ2VudGVyID0gdHJ1ZTtcbiAgICAgIGNlbnRlck5vZGUgPSBsaXN0WzBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjZW50ZXJOb2RlO1xufTtcblxuLyoqXHJcbiAqIER1cmluZyB0aGUgY29hcnNlbmluZyBwcm9jZXNzLCB0aGlzIGxheW91dCBtYXkgYmUgcmVmZXJlbmNlZCBieSB0d28gZ3JhcGggbWFuYWdlcnNcclxuICogdGhpcyBzZXR0ZXIgZnVuY3Rpb24gZ3JhbnRzIGFjY2VzcyB0byBjaGFuZ2UgdGhlIGN1cnJlbnRseSBiZWluZyB1c2VkIGdyYXBoIG1hbmFnZXJcclxuICovXG5MYXlvdXQucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlciA9IGZ1bmN0aW9uIChnbSkge1xuICB0aGlzLmdyYXBoTWFuYWdlciA9IGdtO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXlvdXQ7XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gUmFuZG9tU2VlZCgpIHt9XG4vLyBhZGFwdGVkIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xOTMwMzcyNVxuUmFuZG9tU2VlZC5zZWVkID0gMTtcblJhbmRvbVNlZWQueCA9IDA7XG5cblJhbmRvbVNlZWQubmV4dERvdWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgUmFuZG9tU2VlZC54ID0gTWF0aC5zaW4oUmFuZG9tU2VlZC5zZWVkKyspICogMTAwMDA7XG4gIHJldHVybiBSYW5kb21TZWVkLnggLSBNYXRoLmZsb29yKFJhbmRvbVNlZWQueCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVNlZWQ7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIFBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybSh4LCB5KSB7XG4gIHRoaXMubHdvcmxkT3JnWCA9IDAuMDtcbiAgdGhpcy5sd29ybGRPcmdZID0gMC4wO1xuICB0aGlzLmxkZXZpY2VPcmdYID0gMC4wO1xuICB0aGlzLmxkZXZpY2VPcmdZID0gMC4wO1xuICB0aGlzLmx3b3JsZEV4dFggPSAxLjA7XG4gIHRoaXMubHdvcmxkRXh0WSA9IDEuMDtcbiAgdGhpcy5sZGV2aWNlRXh0WCA9IDEuMDtcbiAgdGhpcy5sZGV2aWNlRXh0WSA9IDEuMDtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZE9yZ1g7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkT3JnWCA9IGZ1bmN0aW9uICh3b3gpIHtcbiAgdGhpcy5sd29ybGRPcmdYID0gd294O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1kgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZE9yZ1k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkT3JnWSA9IGZ1bmN0aW9uICh3b3kpIHtcbiAgdGhpcy5sd29ybGRPcmdZID0gd295O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZEV4dFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZEV4dFg7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkRXh0WCA9IGZ1bmN0aW9uICh3ZXgpIHtcbiAgdGhpcy5sd29ybGRFeHRYID0gd2V4O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXRXb3JsZEV4dFkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmx3b3JsZEV4dFk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldFdvcmxkRXh0WSA9IGZ1bmN0aW9uICh3ZXkpIHtcbiAgdGhpcy5sd29ybGRFeHRZID0gd2V5O1xufTtcblxuLyogRGV2aWNlIHJlbGF0ZWQgKi9cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlT3JnWDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWCA9IGZ1bmN0aW9uIChkb3gpIHtcbiAgdGhpcy5sZGV2aWNlT3JnWCA9IGRveDtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubGRldmljZU9yZ1k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnNldERldmljZU9yZ1kgPSBmdW5jdGlvbiAoZG95KSB7XG4gIHRoaXMubGRldmljZU9yZ1kgPSBkb3k7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmdldERldmljZUV4dFggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxkZXZpY2VFeHRYO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYID0gZnVuY3Rpb24gKGRleCkge1xuICB0aGlzLmxkZXZpY2VFeHRYID0gZGV4O1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZGV2aWNlRXh0WTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WSA9IGZ1bmN0aW9uIChkZXkpIHtcbiAgdGhpcy5sZGV2aWNlRXh0WSA9IGRleTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUudHJhbnNmb3JtWCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciB4RGV2aWNlID0gMC4wO1xuICB2YXIgd29ybGRFeHRYID0gdGhpcy5sd29ybGRFeHRYO1xuICBpZiAod29ybGRFeHRYICE9IDAuMCkge1xuICAgIHhEZXZpY2UgPSB0aGlzLmxkZXZpY2VPcmdYICsgKHggLSB0aGlzLmx3b3JsZE9yZ1gpICogdGhpcy5sZGV2aWNlRXh0WCAvIHdvcmxkRXh0WDtcbiAgfVxuXG4gIHJldHVybiB4RGV2aWNlO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS50cmFuc2Zvcm1ZID0gZnVuY3Rpb24gKHkpIHtcbiAgdmFyIHlEZXZpY2UgPSAwLjA7XG4gIHZhciB3b3JsZEV4dFkgPSB0aGlzLmx3b3JsZEV4dFk7XG4gIGlmICh3b3JsZEV4dFkgIT0gMC4wKSB7XG4gICAgeURldmljZSA9IHRoaXMubGRldmljZU9yZ1kgKyAoeSAtIHRoaXMubHdvcmxkT3JnWSkgKiB0aGlzLmxkZXZpY2VFeHRZIC8gd29ybGRFeHRZO1xuICB9XG5cbiAgcmV0dXJuIHlEZXZpY2U7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIHhXb3JsZCA9IDAuMDtcbiAgdmFyIGRldmljZUV4dFggPSB0aGlzLmxkZXZpY2VFeHRYO1xuICBpZiAoZGV2aWNlRXh0WCAhPSAwLjApIHtcbiAgICB4V29ybGQgPSB0aGlzLmx3b3JsZE9yZ1ggKyAoeCAtIHRoaXMubGRldmljZU9yZ1gpICogdGhpcy5sd29ybGRFeHRYIC8gZGV2aWNlRXh0WDtcbiAgfVxuXG4gIHJldHVybiB4V29ybGQ7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZID0gZnVuY3Rpb24gKHkpIHtcbiAgdmFyIHlXb3JsZCA9IDAuMDtcbiAgdmFyIGRldmljZUV4dFkgPSB0aGlzLmxkZXZpY2VFeHRZO1xuICBpZiAoZGV2aWNlRXh0WSAhPSAwLjApIHtcbiAgICB5V29ybGQgPSB0aGlzLmx3b3JsZE9yZ1kgKyAoeSAtIHRoaXMubGRldmljZU9yZ1kpICogdGhpcy5sd29ybGRFeHRZIC8gZGV2aWNlRXh0WTtcbiAgfVxuICByZXR1cm4geVdvcmxkO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQgPSBmdW5jdGlvbiAoaW5Qb2ludCkge1xuICB2YXIgb3V0UG9pbnQgPSBuZXcgUG9pbnREKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoaW5Qb2ludC54KSwgdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShpblBvaW50LnkpKTtcbiAgcmV0dXJuIG91dFBvaW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XG5cbnZhciBMYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbnZhciBJR2VvbWV0cnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIElNYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuZnVuY3Rpb24gRkRMYXlvdXQoKSB7XG4gIExheW91dC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OO1xuICB0aGlzLmdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSDtcbiAgdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSDtcbiAgdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SO1xuICB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlID0gMy4wICogRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDEwMDtcbiAgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTDtcbiAgdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw7XG4gIHRoaXMudG90YWxEaXNwbGFjZW1lbnQgPSAwLjA7XG4gIHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQgPSAwLjA7XG4gIHRoaXMubWF4SXRlcmF0aW9ucyA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9JVEVSQVRJT05TO1xufVxuXG5GRExheW91dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExheW91dC5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExheW91dCkge1xuICBGRExheW91dFtwcm9wXSA9IExheW91dFtwcm9wXTtcbn1cblxuRkRMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuICBMYXlvdXQucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcywgYXJndW1lbnRzKTtcblxuICB0aGlzLnRvdGFsSXRlcmF0aW9ucyA9IDA7XG4gIHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID0gMDtcblxuICB0aGlzLnVzZUZSR3JpZFZhcmlhbnQgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT047XG5cbiAgdGhpcy5ncmlkID0gW107XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlO1xuICB2YXIgb3JpZ2luYWxJZGVhbExlbmd0aDtcbiAgdmFyIGxjYURlcHRoO1xuICB2YXIgc291cmNlO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgc2l6ZU9mU291cmNlSW5MY2E7XG4gIHZhciBzaXplT2ZUYXJnZXRJbkxjYTtcblxuICB2YXIgYWxsRWRnZXMgPSB0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICBlZGdlID0gYWxsRWRnZXNbaV07XG5cbiAgICBvcmlnaW5hbElkZWFsTGVuZ3RoID0gZWRnZS5pZGVhbExlbmd0aDtcblxuICAgIGlmIChlZGdlLmlzSW50ZXJHcmFwaCkge1xuICAgICAgc291cmNlID0gZWRnZS5nZXRTb3VyY2UoKTtcbiAgICAgIHRhcmdldCA9IGVkZ2UuZ2V0VGFyZ2V0KCk7XG5cbiAgICAgIHNpemVPZlNvdXJjZUluTGNhID0gZWRnZS5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKTtcbiAgICAgIHNpemVPZlRhcmdldEluTGNhID0gZWRnZS5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKTtcblxuICAgICAgaWYgKHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbikge1xuICAgICAgICBlZGdlLmlkZWFsTGVuZ3RoICs9IHNpemVPZlNvdXJjZUluTGNhICsgc2l6ZU9mVGFyZ2V0SW5MY2EgLSAyICogTGF5b3V0Q29uc3RhbnRzLlNJTVBMRV9OT0RFX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIGxjYURlcHRoID0gZWRnZS5nZXRMY2EoKS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKTtcblxuICAgICAgZWRnZS5pZGVhbExlbmd0aCArPSBvcmlnaW5hbElkZWFsTGVuZ3RoICogRkRMYXlvdXRDb25zdGFudHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUiAqIChzb3VyY2UuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkgKyB0YXJnZXQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkgLSAyICogbGNhRGVwdGgpO1xuICAgIH1cbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlciA9IGZ1bmN0aW9uICgpIHtcblxuICB2YXIgcyA9IHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7XG4gIGlmICh0aGlzLmluY3JlbWVudGFsKSB7XG4gICAgaWYgKHMgPiBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIHtcbiAgICAgIHRoaXMuY29vbGluZ0ZhY3RvciA9IE1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciAqIEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsIHRoaXMuY29vbGluZ0ZhY3RvciAtIChzIC0gRkRMYXlvdXRDb25zdGFudHMuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSAvIChGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpICogdGhpcy5jb29saW5nRmFjdG9yICogKDEgLSBGRExheW91dENvbnN0YW50cy5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk7XG4gICAgfVxuICAgIHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudCA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocyA+IEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkge1xuICAgICAgdGhpcy5jb29saW5nRmFjdG9yID0gTWF0aC5tYXgoRkRMYXlvdXRDb25zdGFudHMuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwgMS4wIC0gKHMgLSBGRExheW91dENvbnN0YW50cy5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpIC8gKEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVCAtIEZETGF5b3V0Q29uc3RhbnRzLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkgKiAoMSAtIEZETGF5b3V0Q29uc3RhbnRzLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb29saW5nRmFjdG9yID0gMS4wO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yID0gdGhpcy5jb29saW5nRmFjdG9yO1xuICAgIHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudCA9IEZETGF5b3V0Q29uc3RhbnRzLk1BWF9OT0RFX0RJU1BMQUNFTUVOVDtcbiAgfVxuXG4gIHRoaXMubWF4SXRlcmF0aW9ucyA9IE1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGggKiA1LCB0aGlzLm1heEl0ZXJhdGlvbnMpO1xuXG4gIC8vIFJlYXNzaWduIHRoaXMgYXR0cmlidXRlIGJ5IHVzaW5nIG5ldyBjb25zdGFudCB2YWx1ZVxuICB0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUgPSAzLjAgKiBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC8gMTAwO1xuICB0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkID0gdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlICogdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDtcblxuICB0aGlzLnJlcHVsc2lvblJhbmdlID0gdGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKTtcbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbEVkZ2VzID0gdGhpcy5nZXRBbGxFZGdlcygpO1xuICB2YXIgZWRnZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxFZGdlcy5sZW5ndGg7IGkrKykge1xuICAgIGVkZ2UgPSBsRWRnZXNbaV07XG5cbiAgICB0aGlzLmNhbGNTcHJpbmdGb3JjZShlZGdlLCBlZGdlLmlkZWFsTGVuZ3RoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBncmlkVXBkYXRlQWxsb3dlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgdmFyIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBpLCBqO1xuICB2YXIgbm9kZUEsIG5vZGVCO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgcHJvY2Vzc2VkTm9kZVNldDtcblxuICBpZiAodGhpcy51c2VGUkdyaWRWYXJpYW50KSB7XG4gICAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCkge1xuICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc2VkTm9kZVNldCA9IG5ldyBTZXQoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gZWFjaCBub2RlcyBhbmQgaXRzIHN1cnJvdW5kaW5nXG4gICAgZm9yIChpID0gMDsgaSA8IGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZUEgPSBsTm9kZXNbaV07XG4gICAgICB0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShub2RlQSwgcHJvY2Vzc2VkTm9kZVNldCwgZ3JpZFVwZGF0ZUFsbG93ZWQsIGZvcmNlVG9Ob2RlU3Vycm91bmRpbmdVcGRhdGUpO1xuICAgICAgcHJvY2Vzc2VkTm9kZVNldC5hZGQobm9kZUEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlQSA9IGxOb2Rlc1tpXTtcblxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZUIgPSBsTm9kZXNbal07XG5cbiAgICAgICAgLy8gSWYgYm90aCBub2RlcyBhcmUgbm90IG1lbWJlcnMgb2YgdGhlIHNhbWUgZ3JhcGgsIHNraXAuXG4gICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKG5vZGVBLCBub2RlQik7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2Uobm9kZSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5tb3ZlTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsTm9kZXMgPSB0aGlzLmdldEFsbE5vZGVzKCk7XG4gIHZhciBub2RlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLm1vdmUoKTtcbiAgfVxufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZSA9IGZ1bmN0aW9uIChlZGdlLCBpZGVhbExlbmd0aCkge1xuICB2YXIgc291cmNlTm9kZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gIHZhciB0YXJnZXROb2RlID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICB2YXIgbGVuZ3RoO1xuICB2YXIgc3ByaW5nRm9yY2U7XG4gIHZhciBzcHJpbmdGb3JjZVg7XG4gIHZhciBzcHJpbmdGb3JjZVk7XG5cbiAgLy8gVXBkYXRlIGVkZ2UgbGVuZ3RoXG4gIGlmICh0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzICYmIHNvdXJjZU5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsICYmIHRhcmdldE5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgZWRnZS51cGRhdGVMZW5ndGhTaW1wbGUoKTtcbiAgfSBlbHNlIHtcbiAgICBlZGdlLnVwZGF0ZUxlbmd0aCgpO1xuXG4gICAgaWYgKGVkZ2UuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbGVuZ3RoID0gZWRnZS5nZXRMZW5ndGgoKTtcblxuICBpZiAobGVuZ3RoID09IDApIHJldHVybjtcblxuICAvLyBDYWxjdWxhdGUgc3ByaW5nIGZvcmNlc1xuICBzcHJpbmdGb3JjZSA9IGVkZ2UuZWRnZUVsYXN0aWNpdHkgKiAobGVuZ3RoIC0gaWRlYWxMZW5ndGgpO1xuXG4gIC8vIFByb2plY3QgZm9yY2Ugb250byB4IGFuZCB5IGF4ZXNcbiAgc3ByaW5nRm9yY2VYID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhYIC8gbGVuZ3RoKTtcbiAgc3ByaW5nRm9yY2VZID0gc3ByaW5nRm9yY2UgKiAoZWRnZS5sZW5ndGhZIC8gbGVuZ3RoKTtcblxuICAvLyBBcHBseSBmb3JjZXMgb24gdGhlIGVuZCBub2Rlc1xuICBzb3VyY2VOb2RlLnNwcmluZ0ZvcmNlWCArPSBzcHJpbmdGb3JjZVg7XG4gIHNvdXJjZU5vZGUuc3ByaW5nRm9yY2VZICs9IHNwcmluZ0ZvcmNlWTtcbiAgdGFyZ2V0Tm9kZS5zcHJpbmdGb3JjZVggLT0gc3ByaW5nRm9yY2VYO1xuICB0YXJnZXROb2RlLnNwcmluZ0ZvcmNlWSAtPSBzcHJpbmdGb3JjZVk7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICB2YXIgcmVjdEEgPSBub2RlQS5nZXRSZWN0KCk7XG4gIHZhciByZWN0QiA9IG5vZGVCLmdldFJlY3QoKTtcbiAgdmFyIG92ZXJsYXBBbW91bnQgPSBuZXcgQXJyYXkoMik7XG4gIHZhciBjbGlwUG9pbnRzID0gbmV3IEFycmF5KDQpO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgZGlzdGFuY2VTcXVhcmVkO1xuICB2YXIgZGlzdGFuY2U7XG4gIHZhciByZXB1bHNpb25Gb3JjZTtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWDtcbiAgdmFyIHJlcHVsc2lvbkZvcmNlWTtcblxuICBpZiAocmVjdEEuaW50ZXJzZWN0cyhyZWN0QikpIC8vIHR3byBub2RlcyBvdmVybGFwXG4gICAge1xuICAgICAgLy8gY2FsY3VsYXRlIHNlcGFyYXRpb24gYW1vdW50IGluIHggYW5kIHkgZGlyZWN0aW9uc1xuICAgICAgSUdlb21ldHJ5LmNhbGNTZXBhcmF0aW9uQW1vdW50KHJlY3RBLCByZWN0Qiwgb3ZlcmxhcEFtb3VudCwgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAvIDIuMCk7XG5cbiAgICAgIHJlcHVsc2lvbkZvcmNlWCA9IDIgKiBvdmVybGFwQW1vdW50WzBdO1xuICAgICAgcmVwdWxzaW9uRm9yY2VZID0gMiAqIG92ZXJsYXBBbW91bnRbMV07XG5cbiAgICAgIHZhciBjaGlsZHJlbkNvbnN0YW50ID0gbm9kZUEubm9PZkNoaWxkcmVuICogbm9kZUIubm9PZkNoaWxkcmVuIC8gKG5vZGVBLm5vT2ZDaGlsZHJlbiArIG5vZGVCLm5vT2ZDaGlsZHJlbik7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzXG4gICAgICBub2RlQS5yZXB1bHNpb25Gb3JjZVggLT0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSBjaGlsZHJlbkNvbnN0YW50ICogcmVwdWxzaW9uRm9yY2VZO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VYICs9IGNoaWxkcmVuQ29uc3RhbnQgKiByZXB1bHNpb25Gb3JjZVg7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVkgKz0gY2hpbGRyZW5Db25zdGFudCAqIHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9IGVsc2UgLy8gbm8gb3ZlcmxhcFxuICAgIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBkaXN0YW5jZVxuXG4gICAgICBpZiAodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyAmJiBub2RlQS5nZXRDaGlsZCgpID09IG51bGwgJiYgbm9kZUIuZ2V0Q2hpbGQoKSA9PSBudWxsKSAvLyBzaW1wbHkgYmFzZSByZXB1bHNpb24gb24gZGlzdGFuY2Ugb2Ygbm9kZSBjZW50ZXJzXG4gICAgICAgIHtcbiAgICAgICAgICBkaXN0YW5jZVggPSByZWN0Qi5nZXRDZW50ZXJYKCkgLSByZWN0QS5nZXRDZW50ZXJYKCk7XG4gICAgICAgICAgZGlzdGFuY2VZID0gcmVjdEIuZ2V0Q2VudGVyWSgpIC0gcmVjdEEuZ2V0Q2VudGVyWSgpO1xuICAgICAgICB9IGVsc2UgLy8gdXNlIGNsaXBwaW5nIHBvaW50c1xuICAgICAgICB7XG4gICAgICAgICAgSUdlb21ldHJ5LmdldEludGVyc2VjdGlvbihyZWN0QSwgcmVjdEIsIGNsaXBQb2ludHMpO1xuXG4gICAgICAgICAgZGlzdGFuY2VYID0gY2xpcFBvaW50c1syXSAtIGNsaXBQb2ludHNbMF07XG4gICAgICAgICAgZGlzdGFuY2VZID0gY2xpcFBvaW50c1szXSAtIGNsaXBQb2ludHNbMV07XG4gICAgICAgIH1cblxuICAgICAgLy8gTm8gcmVwdWxzaW9uIHJhbmdlLiBGUiBncmlkIHZhcmlhbnQgc2hvdWxkIHRha2UgY2FyZSBvZiB0aGlzLlxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlWCkgPCBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QpIHtcbiAgICAgICAgZGlzdGFuY2VYID0gSU1hdGguc2lnbihkaXN0YW5jZVgpICogRkRMYXlvdXRDb25zdGFudHMuTUlOX1JFUFVMU0lPTl9ESVNUO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VZKSA8IEZETGF5b3V0Q29uc3RhbnRzLk1JTl9SRVBVTFNJT05fRElTVCkge1xuICAgICAgICBkaXN0YW5jZVkgPSBJTWF0aC5zaWduKGRpc3RhbmNlWSkgKiBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1Q7XG4gICAgICB9XG5cbiAgICAgIGRpc3RhbmNlU3F1YXJlZCA9IGRpc3RhbmNlWCAqIGRpc3RhbmNlWCArIGRpc3RhbmNlWSAqIGRpc3RhbmNlWTtcbiAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRpc3RhbmNlU3F1YXJlZCk7XG5cbiAgICAgIC8vIEhlcmUgd2UgdXNlIGhhbGYgb2YgdGhlIG5vZGVzJyByZXB1bHNpb24gdmFsdWVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICByZXB1bHNpb25Gb3JjZSA9IChub2RlQS5ub2RlUmVwdWxzaW9uIC8gMiArIG5vZGVCLm5vZGVSZXB1bHNpb24gLyAyKSAqIG5vZGVBLm5vT2ZDaGlsZHJlbiAqIG5vZGVCLm5vT2ZDaGlsZHJlbiAvIGRpc3RhbmNlU3F1YXJlZDtcblxuICAgICAgLy8gUHJvamVjdCBmb3JjZSBvbnRvIHggYW5kIHkgYXhlc1xuICAgICAgcmVwdWxzaW9uRm9yY2VYID0gcmVwdWxzaW9uRm9yY2UgKiBkaXN0YW5jZVggLyBkaXN0YW5jZTtcbiAgICAgIHJlcHVsc2lvbkZvcmNlWSA9IHJlcHVsc2lvbkZvcmNlICogZGlzdGFuY2VZIC8gZGlzdGFuY2U7XG5cbiAgICAgIC8vIEFwcGx5IGZvcmNlcyBvbiB0aGUgdHdvIG5vZGVzICAgIFxuICAgICAgbm9kZUEucmVwdWxzaW9uRm9yY2VYIC09IHJlcHVsc2lvbkZvcmNlWDtcbiAgICAgIG5vZGVBLnJlcHVsc2lvbkZvcmNlWSAtPSByZXB1bHNpb25Gb3JjZVk7XG4gICAgICBub2RlQi5yZXB1bHNpb25Gb3JjZVggKz0gcmVwdWxzaW9uRm9yY2VYO1xuICAgICAgbm9kZUIucmVwdWxzaW9uRm9yY2VZICs9IHJlcHVsc2lvbkZvcmNlWTtcbiAgICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciBvd25lckdyYXBoO1xuICB2YXIgb3duZXJDZW50ZXJYO1xuICB2YXIgb3duZXJDZW50ZXJZO1xuICB2YXIgZGlzdGFuY2VYO1xuICB2YXIgZGlzdGFuY2VZO1xuICB2YXIgYWJzRGlzdGFuY2VYO1xuICB2YXIgYWJzRGlzdGFuY2VZO1xuICB2YXIgZXN0aW1hdGVkU2l6ZTtcbiAgb3duZXJHcmFwaCA9IG5vZGUuZ2V0T3duZXIoKTtcblxuICBvd25lckNlbnRlclggPSAob3duZXJHcmFwaC5nZXRSaWdodCgpICsgb3duZXJHcmFwaC5nZXRMZWZ0KCkpIC8gMjtcbiAgb3duZXJDZW50ZXJZID0gKG93bmVyR3JhcGguZ2V0VG9wKCkgKyBvd25lckdyYXBoLmdldEJvdHRvbSgpKSAvIDI7XG4gIGRpc3RhbmNlWCA9IG5vZGUuZ2V0Q2VudGVyWCgpIC0gb3duZXJDZW50ZXJYO1xuICBkaXN0YW5jZVkgPSBub2RlLmdldENlbnRlclkoKSAtIG93bmVyQ2VudGVyWTtcbiAgYWJzRGlzdGFuY2VYID0gTWF0aC5hYnMoZGlzdGFuY2VYKSArIG5vZGUuZ2V0V2lkdGgoKSAvIDI7XG4gIGFic0Rpc3RhbmNlWSA9IE1hdGguYWJzKGRpc3RhbmNlWSkgKyBub2RlLmdldEhlaWdodCgpIC8gMjtcblxuICBpZiAobm9kZS5nZXRPd25lcigpID09IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSkgLy8gaW4gdGhlIHJvb3QgZ3JhcGhcbiAgICB7XG4gICAgICBlc3RpbWF0ZWRTaXplID0gb3duZXJHcmFwaC5nZXRFc3RpbWF0ZWRTaXplKCkgKiB0aGlzLmdyYXZpdHlSYW5nZUZhY3RvcjtcblxuICAgICAgaWYgKGFic0Rpc3RhbmNlWCA+IGVzdGltYXRlZFNpemUgfHwgYWJzRGlzdGFuY2VZID4gZXN0aW1hdGVkU2l6ZSkge1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VYID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VYO1xuICAgICAgICBub2RlLmdyYXZpdGF0aW9uRm9yY2VZID0gLXRoaXMuZ3Jhdml0eUNvbnN0YW50ICogZGlzdGFuY2VZO1xuICAgICAgfVxuICAgIH0gZWxzZSAvLyBpbnNpZGUgYSBjb21wb3VuZFxuICAgIHtcbiAgICAgIGVzdGltYXRlZFNpemUgPSBvd25lckdyYXBoLmdldEVzdGltYXRlZFNpemUoKSAqIHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I7XG5cbiAgICAgIGlmIChhYnNEaXN0YW5jZVggPiBlc3RpbWF0ZWRTaXplIHx8IGFic0Rpc3RhbmNlWSA+IGVzdGltYXRlZFNpemUpIHtcbiAgICAgICAgbm9kZS5ncmF2aXRhdGlvbkZvcmNlWCA9IC10aGlzLmdyYXZpdHlDb25zdGFudCAqIGRpc3RhbmNlWCAqIHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ7XG4gICAgICAgIG5vZGUuZ3Jhdml0YXRpb25Gb3JjZVkgPSAtdGhpcy5ncmF2aXR5Q29uc3RhbnQgKiBkaXN0YW5jZVkgKiB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50O1xuICAgICAgfVxuICAgIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5pc0NvbnZlcmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNvbnZlcmdlZDtcbiAgdmFyIG9zY2lsYXRpbmcgPSBmYWxzZTtcblxuICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgPiB0aGlzLm1heEl0ZXJhdGlvbnMgLyAzKSB7XG4gICAgb3NjaWxhdGluZyA9IE1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQgLSB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KSA8IDI7XG4gIH1cblxuICBjb252ZXJnZWQgPSB0aGlzLnRvdGFsRGlzcGxhY2VtZW50IDwgdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZDtcblxuICB0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50ID0gdGhpcy50b3RhbERpc3BsYWNlbWVudDtcblxuICByZXR1cm4gY29udmVyZ2VkIHx8IG9zY2lsYXRpbmc7XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0ICYmICF0aGlzLmlzU3ViTGF5b3V0KSB7XG4gICAgaWYgKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zID09IHRoaXMuYW5pbWF0aW9uUGVyaW9kKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrO1xuICAgIH1cbiAgfVxufTtcblxuLy9UaGlzIG1ldGhvZCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gKHdlaWdodCkgZm9yIGFsbCBub2Rlc1xuRkRMYXlvdXQucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICBub2RlLm5vT2ZDaGlsZHJlbiA9IG5vZGUuZ2V0Tm9PZkNoaWxkcmVuKCk7XG4gIH1cbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWN0aW9uOiBGUi1HcmlkIFZhcmlhbnQgUmVwdWxzaW9uIEZvcmNlIENhbGN1bGF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY0dyaWQgPSBmdW5jdGlvbiAoZ3JhcGgpIHtcblxuICB2YXIgc2l6ZVggPSAwO1xuICB2YXIgc2l6ZVkgPSAwO1xuXG4gIHNpemVYID0gcGFyc2VJbnQoTWF0aC5jZWlsKChncmFwaC5nZXRSaWdodCgpIC0gZ3JhcGguZ2V0TGVmdCgpKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc2l6ZVkgPSBwYXJzZUludChNYXRoLmNlaWwoKGdyYXBoLmdldEJvdHRvbSgpIC0gZ3JhcGguZ2V0VG9wKCkpIC8gdGhpcy5yZXB1bHNpb25SYW5nZSkpO1xuXG4gIHZhciBncmlkID0gbmV3IEFycmF5KHNpemVYKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemVYOyBpKyspIHtcbiAgICBncmlkW2ldID0gbmV3IEFycmF5KHNpemVZKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZVg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZVk7IGorKykge1xuICAgICAgZ3JpZFtpXVtqXSA9IG5ldyBBcnJheSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncmlkO1xufTtcblxuRkRMYXlvdXQucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQgPSBmdW5jdGlvbiAodiwgbGVmdCwgdG9wKSB7XG5cbiAgdmFyIHN0YXJ0WCA9IDA7XG4gIHZhciBmaW5pc2hYID0gMDtcbiAgdmFyIHN0YXJ0WSA9IDA7XG4gIHZhciBmaW5pc2hZID0gMDtcblxuICBzdGFydFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS54IC0gbGVmdCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFggPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS53aWR0aCArIHYuZ2V0UmVjdCgpLnggLSBsZWZ0KSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcbiAgc3RhcnRZID0gcGFyc2VJbnQoTWF0aC5mbG9vcigodi5nZXRSZWN0KCkueSAtIHRvcCkgLyB0aGlzLnJlcHVsc2lvblJhbmdlKSk7XG4gIGZpbmlzaFkgPSBwYXJzZUludChNYXRoLmZsb29yKCh2LmdldFJlY3QoKS5oZWlnaHQgKyB2LmdldFJlY3QoKS55IC0gdG9wKSAvIHRoaXMucmVwdWxzaW9uUmFuZ2UpKTtcblxuICBmb3IgKHZhciBpID0gc3RhcnRYOyBpIDw9IGZpbmlzaFg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSBzdGFydFk7IGogPD0gZmluaXNoWTsgaisrKSB7XG4gICAgICB0aGlzLmdyaWRbaV1bal0ucHVzaCh2KTtcbiAgICAgIHYuc2V0R3JpZENvb3JkaW5hdGVzKHN0YXJ0WCwgZmluaXNoWCwgc3RhcnRZLCBmaW5pc2hZKTtcbiAgICB9XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS51cGRhdGVHcmlkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaTtcbiAgdmFyIG5vZGVBO1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuXG4gIHRoaXMuZ3JpZCA9IHRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKTtcblxuICAvLyBwdXQgYWxsIG5vZGVzIHRvIHByb3BlciBncmlkIGNlbGxzXG4gIGZvciAoaSA9IDA7IGkgPCBsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlQSA9IGxOb2Rlc1tpXTtcbiAgICB0aGlzLmFkZE5vZGVUb0dyaWQobm9kZUEsIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSk7XG4gIH1cbn07XG5cbkZETGF5b3V0LnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUgPSBmdW5jdGlvbiAobm9kZUEsIHByb2Nlc3NlZE5vZGVTZXQsIGdyaWRVcGRhdGVBbGxvd2VkLCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG5cbiAgaWYgKHRoaXMudG90YWxJdGVyYXRpb25zICUgRkRMYXlvdXRDb25zdGFudHMuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0QgPT0gMSAmJiBncmlkVXBkYXRlQWxsb3dlZCB8fCBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlKSB7XG4gICAgdmFyIHN1cnJvdW5kaW5nID0gbmV3IFNldCgpO1xuICAgIG5vZGVBLnN1cnJvdW5kaW5nID0gbmV3IEFycmF5KCk7XG4gICAgdmFyIG5vZGVCO1xuICAgIHZhciBncmlkID0gdGhpcy5ncmlkO1xuXG4gICAgZm9yICh2YXIgaSA9IG5vZGVBLnN0YXJ0WCAtIDE7IGkgPCBub2RlQS5maW5pc2hYICsgMjsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gbm9kZUEuc3RhcnRZIC0gMTsgaiA8IG5vZGVBLmZpbmlzaFkgKyAyOyBqKyspIHtcbiAgICAgICAgaWYgKCEoaSA8IDAgfHwgaiA8IDAgfHwgaSA+PSBncmlkLmxlbmd0aCB8fCBqID49IGdyaWRbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZ3JpZFtpXVtqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbm9kZUIgPSBncmlkW2ldW2pdW2tdO1xuXG4gICAgICAgICAgICAvLyBJZiBib3RoIG5vZGVzIGFyZSBub3QgbWVtYmVycyBvZiB0aGUgc2FtZSBncmFwaCwgXG4gICAgICAgICAgICAvLyBvciBib3RoIG5vZGVzIGFyZSB0aGUgc2FtZSwgc2tpcC5cbiAgICAgICAgICAgIGlmIChub2RlQS5nZXRPd25lcigpICE9IG5vZGVCLmdldE93bmVyKCkgfHwgbm9kZUEgPT0gbm9kZUIpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZXB1bHNpb24gZm9yY2UgYmV0d2VlblxuICAgICAgICAgICAgLy8gbm9kZUEgYW5kIG5vZGVCIGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZFxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWROb2RlU2V0Lmhhcyhub2RlQikgJiYgIXN1cnJvdW5kaW5nLmhhcyhub2RlQikpIHtcbiAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlWCA9IE1hdGguYWJzKG5vZGVBLmdldENlbnRlclgoKSAtIG5vZGVCLmdldENlbnRlclgoKSkgLSAobm9kZUEuZ2V0V2lkdGgoKSAvIDIgKyBub2RlQi5nZXRXaWR0aCgpIC8gMik7XG4gICAgICAgICAgICAgIHZhciBkaXN0YW5jZVkgPSBNYXRoLmFicyhub2RlQS5nZXRDZW50ZXJZKCkgLSBub2RlQi5nZXRDZW50ZXJZKCkpIC0gKG5vZGVBLmdldEhlaWdodCgpIC8gMiArIG5vZGVCLmdldEhlaWdodCgpIC8gMik7XG5cbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCIFxuICAgICAgICAgICAgICAvLyBpcyBsZXNzIHRoZW4gY2FsY3VsYXRpb24gcmFuZ2VcbiAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlWCA8PSB0aGlzLnJlcHVsc2lvblJhbmdlICYmIGRpc3RhbmNlWSA8PSB0aGlzLnJlcHVsc2lvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy90aGVuIGFkZCBub2RlQiB0byBzdXJyb3VuZGluZyBvZiBub2RlQVxuICAgICAgICAgICAgICAgIHN1cnJvdW5kaW5nLmFkZChub2RlQik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlQS5zdXJyb3VuZGluZyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3Vycm91bmRpbmcpKTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgbm9kZUEuc3Vycm91bmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShub2RlQSwgbm9kZUEuc3Vycm91bmRpbmdbaV0pO1xuICB9XG59O1xuXG5GRExheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gMC4wO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dDtcblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuZnVuY3Rpb24gRkRMYXlvdXRFZGdlKHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSkge1xuICBMRWRnZS5jYWxsKHRoaXMsIHNvdXJjZSwgdGFyZ2V0LCB2RWRnZSk7XG5cbiAgLy8gSWRlYWwgbGVuZ3RoIGFuZCBlbGFzdGljaXR5IHZhbHVlIGZvciB0aGlzIGVkZ2VcbiAgdGhpcy5pZGVhbExlbmd0aCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG4gIHRoaXMuZWRnZUVsYXN0aWNpdHkgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSDtcbn1cblxuRkRMYXlvdXRFZGdlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEVkZ2UucHJvdG90eXBlKTtcblxuZm9yICh2YXIgcHJvcCBpbiBMRWRnZSkge1xuICBGRExheW91dEVkZ2VbcHJvcF0gPSBMRWRnZVtwcm9wXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGRExheW91dEVkZ2U7XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIExOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbmZ1bmN0aW9uIEZETGF5b3V0Tm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICAvLyBhbHRlcm5hdGl2ZSBjb25zdHJ1Y3RvciBpcyBoYW5kbGVkIGluc2lkZSBMTm9kZVxuICBMTm9kZS5jYWxsKHRoaXMsIGdtLCBsb2MsIHNpemUsIHZOb2RlKTtcblxuICAvLyBSZXB1bHNpb24gdmFsdWUgb2YgdGhpcyBub2RlXG4gIHRoaXMubm9kZVJlcHVsc2lvbiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIO1xuXG4gIC8vU3ByaW5nLCByZXB1bHNpb24gYW5kIGdyYXZpdGF0aW9uYWwgZm9yY2VzIGFjdGluZyBvbiB0aGlzIG5vZGVcbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIC8vQW1vdW50IGJ5IHdoaWNoIHRoaXMgbm9kZSBpcyB0byBiZSBtb3ZlZCBpbiB0aGlzIGl0ZXJhdGlvblxuICB0aGlzLmRpc3BsYWNlbWVudFggPSAwO1xuICB0aGlzLmRpc3BsYWNlbWVudFkgPSAwO1xuXG4gIC8vU3RhcnQgYW5kIGZpbmlzaCBncmlkIGNvb3JkaW5hdGVzIHRoYXQgdGhpcyBub2RlIGlzIGZhbGxlbiBpbnRvXG4gIHRoaXMuc3RhcnRYID0gMDtcbiAgdGhpcy5maW5pc2hYID0gMDtcbiAgdGhpcy5zdGFydFkgPSAwO1xuICB0aGlzLmZpbmlzaFkgPSAwO1xuXG4gIC8vR2VvbWV0cmljIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgdGhpcy5zdXJyb3VuZGluZyA9IFtdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMTm9kZS5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIExOb2RlKSB7XG4gIEZETGF5b3V0Tm9kZVtwcm9wXSA9IExOb2RlW3Byb3BdO1xufVxuXG5GRExheW91dE5vZGUucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcyA9IGZ1bmN0aW9uIChfc3RhcnRYLCBfZmluaXNoWCwgX3N0YXJ0WSwgX2ZpbmlzaFkpIHtcbiAgdGhpcy5zdGFydFggPSBfc3RhcnRYO1xuICB0aGlzLmZpbmlzaFggPSBfZmluaXNoWDtcbiAgdGhpcy5zdGFydFkgPSBfc3RhcnRZO1xuICB0aGlzLmZpbmlzaFkgPSBfZmluaXNoWTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRkRMYXlvdXROb2RlO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIERpbWVuc2lvbkQod2lkdGgsIGhlaWdodCkge1xuICB0aGlzLndpZHRoID0gMDtcbiAgdGhpcy5oZWlnaHQgPSAwO1xuICBpZiAod2lkdGggIT09IG51bGwgJiYgaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB9XG59XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy53aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLnNldFdpZHRoID0gZnVuY3Rpb24gKHdpZHRoKSB7XG4gIHRoaXMud2lkdGggPSB3aWR0aDtcbn07XG5cbkRpbWVuc2lvbkQucHJvdG90eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xufTtcblxuRGltZW5zaW9uRC5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24gKGhlaWdodCkge1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGltZW5zaW9uRDtcblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaE1hcCgpIHtcbiAgdGhpcy5tYXAgPSB7fTtcbiAgdGhpcy5rZXlzID0gW107XG59XG5cbkhhc2hNYXAucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHZhciB0aGVJZCA9IFVuaXF1ZUlER2VuZXJldG9yLmNyZWF0ZUlEKGtleSk7XG4gIGlmICghdGhpcy5jb250YWlucyh0aGVJZCkpIHtcbiAgICB0aGlzLm1hcFt0aGVJZF0gPSB2YWx1ZTtcbiAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuICB9XG59O1xuXG5IYXNoTWFwLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW2tleV0gIT0gbnVsbDtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgdmFyIHRoZUlkID0gVW5pcXVlSURHZW5lcmV0b3IuY3JlYXRlSUQoa2V5KTtcbiAgcmV0dXJuIHRoaXMubWFwW3RoZUlkXTtcbn07XG5cbkhhc2hNYXAucHJvdG90eXBlLmtleVNldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMua2V5cztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaE1hcDtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG52YXIgVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuZnVuY3Rpb24gSGFzaFNldCgpIHtcbiAgdGhpcy5zZXQgPSB7fTtcbn1cbjtcblxuSGFzaFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgdGhlSWQgPSBVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopO1xuICBpZiAoIXRoaXMuY29udGFpbnModGhlSWQpKSB0aGlzLnNldFt0aGVJZF0gPSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGRlbGV0ZSB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXTtcbn07XG5cbkhhc2hTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNldCA9IHt9O1xufTtcblxuSGFzaFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0aGlzLnNldFtVbmlxdWVJREdlbmVyZXRvci5jcmVhdGVJRChvYmopXSA9PSBvYmo7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zaXplKCkgPT09IDA7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aDtcbn07XG5cbi8vY29uY2F0cyB0aGlzLnNldCB0byB0aGUgZ2l2ZW4gbGlzdFxuSGFzaFNldC5wcm90b3R5cGUuYWRkQWxsVG8gPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2V0KTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdC5wdXNoKHRoaXMuc2V0W2tleXNbaV1dKTtcbiAgfVxufTtcblxuSGFzaFNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGg7XG59O1xuXG5IYXNoU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbiAobGlzdCkge1xuICB2YXIgcyA9IGxpc3QubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgIHZhciB2ID0gbGlzdFtpXTtcbiAgICB0aGlzLmFkZCh2KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoU2V0O1xuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbi8vIFNvbWUgbWF0cml4ICgxZCBhbmQgMmQgYXJyYXkpIG9wZXJhdGlvbnNcbmZ1bmN0aW9uIE1hdHJpeCgpIHt9XG5cbi8qKlxuICogbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gKiBhcnJheTEsIGFycmF5MiBhbmQgcmVzdWx0IGFyZSAyZCBhcnJheXNcbiAqL1xuTWF0cml4Lm11bHRNYXQgPSBmdW5jdGlvbiAoYXJyYXkxLCBhcnJheTIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gW107XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheTJbMF0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJlc3VsdFtpXVtqXSA9IDA7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFycmF5MVswXS5sZW5ndGg7IGsrKykge1xuICAgICAgICByZXN1bHRbaV1bal0gKz0gYXJyYXkxW2ldW2tdICogYXJyYXkyW2tdW2pdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBtYXRyaXggdHJhbnNwb3NlXG4gKiBhcnJheSBhbmQgcmVzdWx0IGFyZSAyZCBhcnJheXNcbiAqL1xuTWF0cml4LnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheVswXS5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJlc3VsdFtpXVtqXSA9IGFycmF5W2pdW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIG11bHRpcGx5IGFycmF5IHdpdGggY29uc3RhbnRcbiAqIGFycmF5IGFuZCByZXN1bHQgYXJlIDFkIGFycmF5c1xuICovXG5NYXRyaXgubXVsdENvbnMgPSBmdW5jdGlvbiAoYXJyYXksIGNvbnN0YW50KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gYXJyYXlbaV0gKiBjb25zdGFudDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIHN1YnN0cmFjdCB0d28gYXJyYXlzXG4gKiBhcnJheTEsIGFycmF5MiBhbmQgcmVzdWx0IGFyZSAxZCBhcnJheXNcbiAqL1xuTWF0cml4Lm1pbnVzT3AgPSBmdW5jdGlvbiAoYXJyYXkxLCBhcnJheTIpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0W2ldID0gYXJyYXkxW2ldIC0gYXJyYXkyW2ldO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogZG90IHByb2R1Y3Qgb2YgdHdvIGFycmF5cyB3aXRoIHNhbWUgc2l6ZVxuICogYXJyYXkxIGFuZCBhcnJheTIgYXJlIDFkIGFycmF5c1xuICovXG5NYXRyaXguZG90UHJvZHVjdCA9IGZ1bmN0aW9uIChhcnJheTEsIGFycmF5Mikge1xuICB2YXIgcHJvZHVjdCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICBwcm9kdWN0ICs9IGFycmF5MVtpXSAqIGFycmF5MltpXTtcbiAgfVxuXG4gIHJldHVybiBwcm9kdWN0O1xufTtcblxuLyoqXG4gKiBtYWduaXR1ZGUgb2YgYW4gYXJyYXlcbiAqIGFycmF5IGlzIDFkIGFycmF5XG4gKi9cbk1hdHJpeC5tYWcgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRvdFByb2R1Y3QoYXJyYXksIGFycmF5KSk7XG59O1xuXG4vKipcbiAqIG5vcm1hbGl6YXRpb24gb2YgYW4gYXJyYXlcbiAqIGFycmF5IGFuZCByZXN1bHQgYXJlIDFkIGFycmF5XG4gKi9cbk1hdHJpeC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgbWFnbml0dWRlID0gdGhpcy5tYWcoYXJyYXkpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHRbaV0gPSBhcnJheVtpXSAvIG1hZ25pdHVkZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIG11bHRpcGx5IGFuIGFycmF5IHdpdGggY2VudGVyaW5nIG1hdHJpeFxuICogYXJyYXkgYW5kIHJlc3VsdCBhcmUgMWQgYXJyYXlcbiAqL1xuTWF0cml4Lm11bHRHYW1tYSA9IGZ1bmN0aW9uIChhcnJheSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBzdW0gPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBzdW0gKz0gYXJyYXlbaV07XG4gIH1cblxuICBzdW0gKj0gLTEgLyBhcnJheS5sZW5ndGg7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFycmF5Lmxlbmd0aDsgX2krKykge1xuICAgIHJlc3VsdFtfaV0gPSBzdW0gKyBhcnJheVtfaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogYSBzcGVjaWFsIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuICogcmVzdWx0ID0gMC41ICogQyAqIElOViAqIENeVCAqIGFycmF5XG4gKiBhcnJheSBhbmQgcmVzdWx0IGFyZSAxZCwgQyBhbmQgSU5WIGFyZSAyZCBhcnJheXNcbiAqL1xuTWF0cml4Lm11bHRMID0gZnVuY3Rpb24gKGFycmF5LCBDLCBJTlYpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgdGVtcDEgPSBbXTtcbiAgdmFyIHRlbXAyID0gW107XG5cbiAgLy8gbXVsdGlwbHkgYnkgQ15UXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQ1swXS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgQy5sZW5ndGg7IGorKykge1xuICAgICAgc3VtICs9IC0wLjUgKiBDW2pdW2ldICogYXJyYXlbal07XG4gICAgfVxuICAgIHRlbXAxW2ldID0gc3VtO1xuICB9XG4gIC8vIG11bHRpcGx5IHRoZSByZXN1bHQgYnkgSU5WXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IElOVi5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIF9zdW0gPSAwO1xuICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBJTlYubGVuZ3RoOyBfaisrKSB7XG4gICAgICBfc3VtICs9IElOVltfaTJdW19qXSAqIHRlbXAxW19qXTtcbiAgICB9XG4gICAgdGVtcDJbX2kyXSA9IF9zdW07XG4gIH1cbiAgLy8gbXVsdGlwbHkgdGhlIHJlc3VsdCBieSBDXG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IEMubGVuZ3RoOyBfaTMrKykge1xuICAgIHZhciBfc3VtMiA9IDA7XG4gICAgZm9yICh2YXIgX2oyID0gMDsgX2oyIDwgQ1swXS5sZW5ndGg7IF9qMisrKSB7XG4gICAgICBfc3VtMiArPSBDW19pM11bX2oyXSAqIHRlbXAyW19qMl07XG4gICAgfVxuICAgIHJlc3VsdFtfaTNdID0gX3N1bTI7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRyaXg7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiBBIGNsYXNzaWMgUXVpY2tzb3J0IGFsZ29yaXRobSB3aXRoIEhvYXJlJ3MgcGFydGl0aW9uXG4gKiAtIFdvcmtzIGFsc28gb24gTGlua2VkTGlzdCBvYmplY3RzXG4gKlxuICogQ29weXJpZ2h0OiBpLVZpcyBSZXNlYXJjaCBHcm91cCwgQmlsa2VudCBVbml2ZXJzaXR5LCAyMDA3IC0gcHJlc2VudFxuICovXG5cbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbnZhciBRdWlja3NvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUXVpY2tzb3J0KEEsIGNvbXBhcmVGdW5jdGlvbikge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUXVpY2tzb3J0KTtcblxuICAgICAgICBpZiAoY29tcGFyZUZ1bmN0aW9uICE9PSBudWxsIHx8IGNvbXBhcmVGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB0aGlzLmNvbXBhcmVGdW5jdGlvbiA9IHRoaXMuX2RlZmF1bHRDb21wYXJlRnVuY3Rpb247XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKEEgaW5zdGFuY2VvZiBMaW5rZWRMaXN0KSBsZW5ndGggPSBBLnNpemUoKTtlbHNlIGxlbmd0aCA9IEEubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuX3F1aWNrc29ydChBLCAwLCBsZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoUXVpY2tzb3J0LCBbe1xuICAgICAgICBrZXk6ICdfcXVpY2tzb3J0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9xdWlja3NvcnQoQSwgcCwgcikge1xuICAgICAgICAgICAgaWYgKHAgPCByKSB7XG4gICAgICAgICAgICAgICAgdmFyIHEgPSB0aGlzLl9wYXJ0aXRpb24oQSwgcCwgcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcXVpY2tzb3J0KEEsIHAsIHEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3F1aWNrc29ydChBLCBxICsgMSwgcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19wYXJ0aXRpb24nLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnRpdGlvbihBLCBwLCByKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHRoaXMuX2dldChBLCBwKTtcbiAgICAgICAgICAgIHZhciBpID0gcDtcbiAgICAgICAgICAgIHZhciBqID0gcjtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuY29tcGFyZUZ1bmN0aW9uKHgsIHRoaXMuX2dldChBLCBqKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgICAgIH13aGlsZSAodGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KEEsIGkpLCB4KSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfWlmIChpIDwgaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zd2FwKEEsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIGo7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19nZXQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldChvYmplY3QsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTGlua2VkTGlzdCkgcmV0dXJuIG9iamVjdC5nZXRfb2JqZWN0X2F0KGluZGV4KTtlbHNlIHJldHVybiBvYmplY3RbaW5kZXhdO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfc2V0JyxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXQob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBMaW5rZWRMaXN0KSBvYmplY3Quc2V0X29iamVjdF9hdChpbmRleCwgdmFsdWUpO2Vsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfc3dhcCcsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc3dhcChBLCBpLCBqKSB7XG4gICAgICAgICAgICB2YXIgdGVtcCA9IHRoaXMuX2dldChBLCBpKTtcbiAgICAgICAgICAgIHRoaXMuX3NldChBLCBpLCB0aGlzLl9nZXQoQSwgaikpO1xuICAgICAgICAgICAgdGhpcy5fc2V0KEEsIGosIHRlbXApO1xuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfZGVmYXVsdENvbXBhcmVGdW5jdGlvbicsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVmYXVsdENvbXBhcmVGdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYiA+IGE7XG4gICAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gUXVpY2tzb3J0O1xufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1aWNrc29ydDtcblxuLyoqKi8gfSksXG4vKiAyNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vLyBTaW5ndWxhciBWYWx1ZSBEZWNvbXBvc2l0aW9uIGltcGxlbWVudGF0aW9uXG5mdW5jdGlvbiBTVkQoKSB7fTtcblxuLyogQmVsb3cgc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbiAoc3ZkKSBjb2RlIGluY2x1ZGluZyBoeXBvdCBmdW5jdGlvbiBpcyBhZG9wdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2RyYWdvbmZseS1haS9KYW1hSlNcbiAgIFNvbWUgY2hhbmdlcyBhcmUgYXBwbGllZCB0byBtYWtlIHRoZSBjb2RlIGNvbXBhdGlibGUgd2l0aCB0aGUgZmNvc2UgY29kZSBhbmQgdG8gbWFrZSBpdCBpbmRlcGVuZGVudCBmcm9tIEphbWEuXG4gICBJbnB1dCBtYXRyaXggaXMgY2hhbmdlZCB0byBhIDJEIGFycmF5IGluc3RlYWQgb2YgSmFtYSBtYXRyaXguIE1hdHJpeCBkaW1lbnNpb25zIGFyZSB0YWtlbiBhY2NvcmRpbmcgdG8gMkQgYXJyYXkgaW5zdGVhZCBvZiB1c2luZyBKYW1hIGZ1bmN0aW9ucy5cbiAgIEFuIG9iamVjdCB0aGF0IGluY2x1ZGVzIHNpbmd1bGFyIHZhbHVlIGNvbXBvbmVudHMgaXMgY3JlYXRlZCBmb3IgcmV0dXJuLiBcbiAgIFRoZSB0eXBlcyBvZiBpbnB1dCBwYXJhbWV0ZXJzIG9mIHRoZSBoeXBvdCBmdW5jdGlvbiBhcmUgcmVtb3ZlZC4gXG4gICBsZXQgaXMgdXNlZCBpbnN0ZWFkIG9mIHZhciBmb3IgdGhlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLlxuKi9cbi8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDRcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9cblxuICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICBcIkxpY2Vuc2VcIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sXG4gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgICAgXCJMaWNlbnNvclwiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieVxuICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgICBcIkxlZ2FsIEVudGl0eVwiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGxcbiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb25cbiAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sXG4gICAgICBcImNvbnRyb2xcIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZVxuICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3JcbiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZVxuICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgICAgXCJZb3VcIiAob3IgXCJZb3VyXCIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHlcbiAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIFwiU291cmNlXCIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsXG4gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uXG4gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG4gICAgICBcIk9iamVjdFwiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0XG4gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sXG4gICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuXG5cbiAgICAgIFwiV29ya1wiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3JcbiAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGFcbiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29ya1xuICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS5cblxuICAgICAgXCJEZXJpdmF0aXZlIFdvcmtzXCIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0XG4gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlXG4gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zXG4gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3Nlc1xuICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluXG4gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsXG4gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG4gICAgICBcIkNvbnRyaWJ1dGlvblwiIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nXG4gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zXG4gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHlcbiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXJcbiAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZlxuICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwic3VibWl0dGVkXCJcbiAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnRcbiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvXG4gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLFxuICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGVcbiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dFxuICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2VcbiAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzIFwiTm90IGEgQ29udHJpYnV0aW9uLlwiXG5cbiAgICAgIFwiQ29udHJpYnV0b3JcIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHlcbiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZFxuICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuXG5cbiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLFxuICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGVcbiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLFxuICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlXG4gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLlxuXG4gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcbiAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCxcbiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlXG4gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSxcbiAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLFxuICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGVcbiAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyXG4gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpXG4gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdVxuICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGFcbiAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmtcbiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0XG4gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzXG4gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGVcbiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC5cblxuICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGVcbiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dFxuICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3VcbiAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvclxuICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kXG5cbiAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXNcbiAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmRcblxuICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzXG4gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZFxuICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssXG4gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZlxuICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmRcblxuICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgXCJOT1RJQ0VcIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHNcbiAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0XG4gICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkXG4gICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90XG4gICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lXG4gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWRcbiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yXG4gICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsXG4gICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZFxuICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50c1xuICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmRcbiAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvblxuICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlXG4gICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkXG4gICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkXG4gICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmRcbiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnNcbiAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3JcbiAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLFxuICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoXG4gICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsXG4gICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmtcbiAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG4gICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy5cbiAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnlcbiAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkXG4gICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuXG5cbiAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGVcbiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvcixcbiAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZVxuICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuXG5cbiAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvclxuICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaFxuICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvclxuICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnNcbiAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEFcbiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZVxuICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55XG4gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LFxuICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsXG4gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseVxuICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmVcbiAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCxcbiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYVxuICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZVxuICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLFxuICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGxcbiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3JcbiAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZ1xuICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlcixcbiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksXG4gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpc1xuICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHlcbiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmXG4gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksXG4gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHlcbiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb25cbiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LlxuXG4gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLlxuXG4gICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZ1xuICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgXCJ7fVwiXG4gICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZVxuICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGVcbiAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYVxuICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZVxuICAgICAgc2FtZSBcInByaW50ZWQgcGFnZVwiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXJcbiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy5cblxuICAgQ29weXJpZ2h0IHt5eXl5fSB7bmFtZSBvZiBjb3B5cmlnaHQgb3duZXJ9XG5cbiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuU1ZELnN2ZCA9IGZ1bmN0aW9uIChBKSB7XG4gIHRoaXMuVSA9IG51bGw7XG4gIHRoaXMuViA9IG51bGw7XG4gIHRoaXMucyA9IG51bGw7XG4gIHRoaXMubSA9IDA7XG4gIHRoaXMubiA9IDA7XG4gIHRoaXMubSA9IEEubGVuZ3RoO1xuICB0aGlzLm4gPSBBWzBdLmxlbmd0aDtcbiAgdmFyIG51ID0gTWF0aC5taW4odGhpcy5tLCB0aGlzLm4pO1xuICB0aGlzLnMgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBhID0gW107XG4gICAgd2hpbGUgKHMtLSA+IDApIHtcbiAgICAgIGEucHVzaCgwKTtcbiAgICB9cmV0dXJuIGE7XG4gIH0oTWF0aC5taW4odGhpcy5tICsgMSwgdGhpcy5uKSk7XG4gIHRoaXMuVSA9IGZ1bmN0aW9uIChkaW1zKSB7XG4gICAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gYWxsb2NhdGUoZGltcykge1xuICAgICAgaWYgKGRpbXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaW1zWzBdOyBpKyspIHtcbiAgICAgICAgICBhcnJheS5wdXNoKGFsbG9jYXRlKGRpbXMuc2xpY2UoMSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gYWxsb2NhdGUoZGltcyk7XG4gIH0oW3RoaXMubSwgbnVdKTtcbiAgdGhpcy5WID0gZnVuY3Rpb24gKGRpbXMpIHtcbiAgICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiBhbGxvY2F0ZShkaW1zKSB7XG4gICAgICBpZiAoZGltcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpbXNbMF07IGkrKykge1xuICAgICAgICAgIGFycmF5LnB1c2goYWxsb2NhdGUoZGltcy5zbGljZSgxKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBhbGxvY2F0ZShkaW1zKTtcbiAgfShbdGhpcy5uLCB0aGlzLm5dKTtcbiAgdmFyIGUgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBhID0gW107XG4gICAgd2hpbGUgKHMtLSA+IDApIHtcbiAgICAgIGEucHVzaCgwKTtcbiAgICB9cmV0dXJuIGE7XG4gIH0odGhpcy5uKTtcbiAgdmFyIHdvcmsgPSBmdW5jdGlvbiAocykge1xuICAgIHZhciBhID0gW107XG4gICAgd2hpbGUgKHMtLSA+IDApIHtcbiAgICAgIGEucHVzaCgwKTtcbiAgICB9cmV0dXJuIGE7XG4gIH0odGhpcy5tKTtcbiAgdmFyIHdhbnR1ID0gdHJ1ZTtcbiAgdmFyIHdhbnR2ID0gdHJ1ZTtcbiAgdmFyIG5jdCA9IE1hdGgubWluKHRoaXMubSAtIDEsIHRoaXMubik7XG4gIHZhciBucnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLm4gLSAyLCB0aGlzLm0pKTtcbiAgZm9yICh2YXIgayA9IDA7IGsgPCBNYXRoLm1heChuY3QsIG5ydCk7IGsrKykge1xuICAgIGlmIChrIDwgbmN0KSB7XG4gICAgICB0aGlzLnNba10gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCB0aGlzLm07IGkrKykge1xuICAgICAgICB0aGlzLnNba10gPSBTVkQuaHlwb3QodGhpcy5zW2tdLCBBW2ldW2tdKTtcbiAgICAgIH1cbiAgICAgIDtcbiAgICAgIGlmICh0aGlzLnNba10gIT09IDAuMCkge1xuICAgICAgICBpZiAoQVtrXVtrXSA8IDAuMCkge1xuICAgICAgICAgIHRoaXMuc1trXSA9IC10aGlzLnNba107XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgX2kgPSBrOyBfaSA8IHRoaXMubTsgX2krKykge1xuICAgICAgICAgIEFbX2ldW2tdIC89IHRoaXMuc1trXTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIEFba11ba10gKz0gMS4wO1xuICAgICAgfVxuICAgICAgdGhpcy5zW2tdID0gLXRoaXMuc1trXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IGsgKyAxOyBqIDwgdGhpcy5uOyBqKyspIHtcbiAgICAgIGlmIChmdW5jdGlvbiAobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIGxocyAmJiByaHM7XG4gICAgICB9KGsgPCBuY3QsIHRoaXMuc1trXSAhPT0gMC4wKSkge1xuICAgICAgICB2YXIgdCA9IDA7XG4gICAgICAgIGZvciAodmFyIF9pMiA9IGs7IF9pMiA8IHRoaXMubTsgX2kyKyspIHtcbiAgICAgICAgICB0ICs9IEFbX2kyXVtrXSAqIEFbX2kyXVtqXTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIHQgPSAtdCAvIEFba11ba107XG4gICAgICAgIGZvciAodmFyIF9pMyA9IGs7IF9pMyA8IHRoaXMubTsgX2kzKyspIHtcbiAgICAgICAgICBBW19pM11bal0gKz0gdCAqIEFbX2kzXVtrXTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICB9XG4gICAgICBlW2pdID0gQVtrXVtqXTtcbiAgICB9XG4gICAgO1xuICAgIGlmIChmdW5jdGlvbiAobGhzLCByaHMpIHtcbiAgICAgIHJldHVybiBsaHMgJiYgcmhzO1xuICAgIH0od2FudHUsIGsgPCBuY3QpKSB7XG4gICAgICBmb3IgKHZhciBfaTQgPSBrOyBfaTQgPCB0aGlzLm07IF9pNCsrKSB7XG4gICAgICAgIHRoaXMuVVtfaTRdW2tdID0gQVtfaTRdW2tdO1xuICAgICAgfVxuICAgICAgO1xuICAgIH1cbiAgICBpZiAoayA8IG5ydCkge1xuICAgICAgZVtrXSA9IDA7XG4gICAgICBmb3IgKHZhciBfaTUgPSBrICsgMTsgX2k1IDwgdGhpcy5uOyBfaTUrKykge1xuICAgICAgICBlW2tdID0gU1ZELmh5cG90KGVba10sIGVbX2k1XSk7XG4gICAgICB9XG4gICAgICA7XG4gICAgICBpZiAoZVtrXSAhPT0gMC4wKSB7XG4gICAgICAgIGlmIChlW2sgKyAxXSA8IDAuMCkge1xuICAgICAgICAgIGVba10gPSAtZVtrXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBfaTYgPSBrICsgMTsgX2k2IDwgdGhpcy5uOyBfaTYrKykge1xuICAgICAgICAgIGVbX2k2XSAvPSBlW2tdO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgZVtrICsgMV0gKz0gMS4wO1xuICAgICAgfVxuICAgICAgZVtrXSA9IC1lW2tdO1xuICAgICAgaWYgKGZ1bmN0aW9uIChsaHMsIHJocykge1xuICAgICAgICByZXR1cm4gbGhzICYmIHJocztcbiAgICAgIH0oayArIDEgPCB0aGlzLm0sIGVba10gIT09IDAuMCkpIHtcbiAgICAgICAgZm9yICh2YXIgX2k3ID0gayArIDE7IF9pNyA8IHRoaXMubTsgX2k3KyspIHtcbiAgICAgICAgICB3b3JrW19pN10gPSAwLjA7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICBmb3IgKHZhciBfaiA9IGsgKyAxOyBfaiA8IHRoaXMubjsgX2orKykge1xuICAgICAgICAgIGZvciAodmFyIF9pOCA9IGsgKyAxOyBfaTggPCB0aGlzLm07IF9pOCsrKSB7XG4gICAgICAgICAgICB3b3JrW19pOF0gKz0gZVtfal0gKiBBW19pOF1bX2pdO1xuICAgICAgICAgIH1cbiAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICBmb3IgKHZhciBfajIgPSBrICsgMTsgX2oyIDwgdGhpcy5uOyBfajIrKykge1xuICAgICAgICAgIHZhciBfdCA9IC1lW19qMl0gLyBlW2sgKyAxXTtcbiAgICAgICAgICBmb3IgKHZhciBfaTkgPSBrICsgMTsgX2k5IDwgdGhpcy5tOyBfaTkrKykge1xuICAgICAgICAgICAgQVtfaTldW19qMl0gKz0gX3QgKiB3b3JrW19pOV07XG4gICAgICAgICAgfVxuICAgICAgICAgIDtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICB9XG4gICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgZm9yICh2YXIgX2kxMCA9IGsgKyAxOyBfaTEwIDwgdGhpcy5uOyBfaTEwKyspIHtcbiAgICAgICAgICB0aGlzLlZbX2kxMF1ba10gPSBlW19pMTBdO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIHAgPSBNYXRoLm1pbih0aGlzLm4sIHRoaXMubSArIDEpO1xuICBpZiAobmN0IDwgdGhpcy5uKSB7XG4gICAgdGhpcy5zW25jdF0gPSBBW25jdF1bbmN0XTtcbiAgfVxuICBpZiAodGhpcy5tIDwgcCkge1xuICAgIHRoaXMuc1twIC0gMV0gPSAwLjA7XG4gIH1cbiAgaWYgKG5ydCArIDEgPCBwKSB7XG4gICAgZVtucnRdID0gQVtucnRdW3AgLSAxXTtcbiAgfVxuICBlW3AgLSAxXSA9IDAuMDtcbiAgaWYgKHdhbnR1KSB7XG4gICAgZm9yICh2YXIgX2ozID0gbmN0OyBfajMgPCBudTsgX2ozKyspIHtcbiAgICAgIGZvciAodmFyIF9pMTEgPSAwOyBfaTExIDwgdGhpcy5tOyBfaTExKyspIHtcbiAgICAgICAgdGhpcy5VW19pMTFdW19qM10gPSAwLjA7XG4gICAgICB9XG4gICAgICA7XG4gICAgICB0aGlzLlVbX2ozXVtfajNdID0gMS4wO1xuICAgIH07XG4gICAgZm9yICh2YXIgX2sgPSBuY3QgLSAxOyBfayA+PSAwOyBfay0tKSB7XG4gICAgICBpZiAodGhpcy5zW19rXSAhPT0gMC4wKSB7XG4gICAgICAgIGZvciAodmFyIF9qNCA9IF9rICsgMTsgX2o0IDwgbnU7IF9qNCsrKSB7XG4gICAgICAgICAgdmFyIF90MiA9IDA7XG4gICAgICAgICAgZm9yICh2YXIgX2kxMiA9IF9rOyBfaTEyIDwgdGhpcy5tOyBfaTEyKyspIHtcbiAgICAgICAgICAgIF90MiArPSB0aGlzLlVbX2kxMl1bX2tdICogdGhpcy5VW19pMTJdW19qNF07XG4gICAgICAgICAgfTtcbiAgICAgICAgICBfdDIgPSAtX3QyIC8gdGhpcy5VW19rXVtfa107XG4gICAgICAgICAgZm9yICh2YXIgX2kxMyA9IF9rOyBfaTEzIDwgdGhpcy5tOyBfaTEzKyspIHtcbiAgICAgICAgICAgIHRoaXMuVVtfaTEzXVtfajRdICs9IF90MiAqIHRoaXMuVVtfaTEzXVtfa107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgX2kxNCA9IF9rOyBfaTE0IDwgdGhpcy5tOyBfaTE0KyspIHtcbiAgICAgICAgICB0aGlzLlVbX2kxNF1bX2tdID0gLXRoaXMuVVtfaTE0XVtfa107XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuVVtfa11bX2tdID0gMS4wICsgdGhpcy5VW19rXVtfa107XG4gICAgICAgIGZvciAodmFyIF9pMTUgPSAwOyBfaTE1IDwgX2sgLSAxOyBfaTE1KyspIHtcbiAgICAgICAgICB0aGlzLlVbX2kxNV1bX2tdID0gMC4wO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgX2kxNiA9IDA7IF9pMTYgPCB0aGlzLm07IF9pMTYrKykge1xuICAgICAgICAgIHRoaXMuVVtfaTE2XVtfa10gPSAwLjA7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuVVtfa11bX2tdID0gMS4wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgaWYgKHdhbnR2KSB7XG4gICAgZm9yICh2YXIgX2syID0gdGhpcy5uIC0gMTsgX2syID49IDA7IF9rMi0tKSB7XG4gICAgICBpZiAoZnVuY3Rpb24gKGxocywgcmhzKSB7XG4gICAgICAgIHJldHVybiBsaHMgJiYgcmhzO1xuICAgICAgfShfazIgPCBucnQsIGVbX2syXSAhPT0gMC4wKSkge1xuICAgICAgICBmb3IgKHZhciBfajUgPSBfazIgKyAxOyBfajUgPCBudTsgX2o1KyspIHtcbiAgICAgICAgICB2YXIgX3QzID0gMDtcbiAgICAgICAgICBmb3IgKHZhciBfaTE3ID0gX2syICsgMTsgX2kxNyA8IHRoaXMubjsgX2kxNysrKSB7XG4gICAgICAgICAgICBfdDMgKz0gdGhpcy5WW19pMTddW19rMl0gKiB0aGlzLlZbX2kxN11bX2o1XTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIF90MyA9IC1fdDMgLyB0aGlzLlZbX2syICsgMV1bX2syXTtcbiAgICAgICAgICBmb3IgKHZhciBfaTE4ID0gX2syICsgMTsgX2kxOCA8IHRoaXMubjsgX2kxOCsrKSB7XG4gICAgICAgICAgICB0aGlzLlZbX2kxOF1bX2o1XSArPSBfdDMgKiB0aGlzLlZbX2kxOF1bX2syXTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgX2kxOSA9IDA7IF9pMTkgPCB0aGlzLm47IF9pMTkrKykge1xuICAgICAgICB0aGlzLlZbX2kxOV1bX2syXSA9IDAuMDtcbiAgICAgIH07XG4gICAgICB0aGlzLlZbX2syXVtfazJdID0gMS4wO1xuICAgIH07XG4gIH1cbiAgdmFyIHBwID0gcCAtIDE7XG4gIHZhciBpdGVyID0gMDtcbiAgdmFyIGVwcyA9IE1hdGgucG93KDIuMCwgLTUyLjApO1xuICB2YXIgdGlueSA9IE1hdGgucG93KDIuMCwgLTk2Ni4wKTtcbiAgd2hpbGUgKHAgPiAwKSB7XG4gICAgdmFyIF9rMyA9IHZvaWQgMDtcbiAgICB2YXIga2FzZSA9IHZvaWQgMDtcbiAgICBmb3IgKF9rMyA9IHAgLSAyOyBfazMgPj0gLTE7IF9rMy0tKSB7XG4gICAgICBpZiAoX2szID09PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChNYXRoLmFicyhlW19rM10pIDw9IHRpbnkgKyBlcHMgKiAoTWF0aC5hYnModGhpcy5zW19rM10pICsgTWF0aC5hYnModGhpcy5zW19rMyArIDFdKSkpIHtcbiAgICAgICAgZVtfazNdID0gMC4wO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChfazMgPT09IHAgLSAyKSB7XG4gICAgICBrYXNlID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtzID0gdm9pZCAwO1xuICAgICAgZm9yIChrcyA9IHAgLSAxOyBrcyA+PSBfazM7IGtzLS0pIHtcbiAgICAgICAgaWYgKGtzID09PSBfazMpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX3Q0ID0gKGtzICE9PSBwID8gTWF0aC5hYnMoZVtrc10pIDogMC4wKSArIChrcyAhPT0gX2szICsgMSA/IE1hdGguYWJzKGVba3MgLSAxXSkgOiAwLjApO1xuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5zW2tzXSkgPD0gdGlueSArIGVwcyAqIF90NCkge1xuICAgICAgICAgIHRoaXMuc1trc10gPSAwLjA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoa3MgPT09IF9rMykge1xuICAgICAgICBrYXNlID0gMztcbiAgICAgIH0gZWxzZSBpZiAoa3MgPT09IHAgLSAxKSB7XG4gICAgICAgIGthc2UgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2FzZSA9IDI7XG4gICAgICAgIF9rMyA9IGtzO1xuICAgICAgfVxuICAgIH1cbiAgICBfazMrKztcbiAgICBzd2l0Y2ggKGthc2UpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBmID0gZVtwIC0gMl07XG4gICAgICAgICAgZVtwIC0gMl0gPSAwLjA7XG4gICAgICAgICAgZm9yICh2YXIgX2o2ID0gcCAtIDI7IF9qNiA+PSBfazM7IF9qNi0tKSB7XG4gICAgICAgICAgICB2YXIgX3Q1ID0gU1ZELmh5cG90KHRoaXMuc1tfajZdLCBmKTtcbiAgICAgICAgICAgIHZhciBjcyA9IHRoaXMuc1tfajZdIC8gX3Q1O1xuICAgICAgICAgICAgdmFyIHNuID0gZiAvIF90NTtcbiAgICAgICAgICAgIHRoaXMuc1tfajZdID0gX3Q1O1xuICAgICAgICAgICAgaWYgKF9qNiAhPT0gX2szKSB7XG4gICAgICAgICAgICAgIGYgPSAtc24gKiBlW19qNiAtIDFdO1xuICAgICAgICAgICAgICBlW19qNiAtIDFdID0gY3MgKiBlW19qNiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIF9pMjAgPSAwOyBfaTIwIDwgdGhpcy5uOyBfaTIwKyspIHtcbiAgICAgICAgICAgICAgICBfdDUgPSBjcyAqIHRoaXMuVltfaTIwXVtfajZdICsgc24gKiB0aGlzLlZbX2kyMF1bcCAtIDFdO1xuICAgICAgICAgICAgICAgIHRoaXMuVltfaTIwXVtwIC0gMV0gPSAtc24gKiB0aGlzLlZbX2kyMF1bX2o2XSArIGNzICogdGhpcy5WW19pMjBdW3AgLSAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlZbX2kyMF1bX2o2XSA9IF90NTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZiA9IGVbX2szIC0gMV07XG4gICAgICAgICAgZVtfazMgLSAxXSA9IDAuMDtcbiAgICAgICAgICBmb3IgKHZhciBfajcgPSBfazM7IF9qNyA8IHA7IF9qNysrKSB7XG4gICAgICAgICAgICB2YXIgX3Q2ID0gU1ZELmh5cG90KHRoaXMuc1tfajddLCBfZik7XG4gICAgICAgICAgICB2YXIgX2NzID0gdGhpcy5zW19qN10gLyBfdDY7XG4gICAgICAgICAgICB2YXIgX3NuID0gX2YgLyBfdDY7XG4gICAgICAgICAgICB0aGlzLnNbX2o3XSA9IF90NjtcbiAgICAgICAgICAgIF9mID0gLV9zbiAqIGVbX2o3XTtcbiAgICAgICAgICAgIGVbX2o3XSA9IF9jcyAqIGVbX2o3XTtcbiAgICAgICAgICAgIGlmICh3YW50dSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTIxID0gMDsgX2kyMSA8IHRoaXMubTsgX2kyMSsrKSB7XG4gICAgICAgICAgICAgICAgX3Q2ID0gX2NzICogdGhpcy5VW19pMjFdW19qN10gKyBfc24gKiB0aGlzLlVbX2kyMV1bX2szIC0gMV07XG4gICAgICAgICAgICAgICAgdGhpcy5VW19pMjFdW19rMyAtIDFdID0gLV9zbiAqIHRoaXMuVVtfaTIxXVtfajddICsgX2NzICogdGhpcy5VW19pMjFdW19rMyAtIDFdO1xuICAgICAgICAgICAgICAgIHRoaXMuVVtfaTIxXVtfajddID0gX3Q2O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHNjYWxlID0gTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5hYnModGhpcy5zW3AgLSAxXSksIE1hdGguYWJzKHRoaXMuc1twIC0gMl0pKSwgTWF0aC5hYnMoZVtwIC0gMl0pKSwgTWF0aC5hYnModGhpcy5zW19rM10pKSwgTWF0aC5hYnMoZVtfazNdKSk7XG4gICAgICAgICAgdmFyIHNwID0gdGhpcy5zW3AgLSAxXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBzcG0xID0gdGhpcy5zW3AgLSAyXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBlcG0xID0gZVtwIC0gMl0gLyBzY2FsZTtcbiAgICAgICAgICB2YXIgc2sgPSB0aGlzLnNbX2szXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBlayA9IGVbX2szXSAvIHNjYWxlO1xuICAgICAgICAgIHZhciBiID0gKChzcG0xICsgc3ApICogKHNwbTEgLSBzcCkgKyBlcG0xICogZXBtMSkgLyAyLjA7XG4gICAgICAgICAgdmFyIGMgPSBzcCAqIGVwbTEgKiAoc3AgKiBlcG0xKTtcbiAgICAgICAgICB2YXIgc2hpZnQgPSAwLjA7XG4gICAgICAgICAgaWYgKGZ1bmN0aW9uIChsaHMsIHJocykge1xuICAgICAgICAgICAgcmV0dXJuIGxocyB8fCByaHM7XG4gICAgICAgICAgfShiICE9PSAwLjAsIGMgIT09IDAuMCkpIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gTWF0aC5zcXJ0KGIgKiBiICsgYyk7XG4gICAgICAgICAgICBpZiAoYiA8IDAuMCkge1xuICAgICAgICAgICAgICBzaGlmdCA9IC1zaGlmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoaWZ0ID0gYyAvIChiICsgc2hpZnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX2YyID0gKHNrICsgc3ApICogKHNrIC0gc3ApICsgc2hpZnQ7XG4gICAgICAgICAgdmFyIGcgPSBzayAqIGVrO1xuICAgICAgICAgIGZvciAodmFyIF9qOCA9IF9rMzsgX2o4IDwgcCAtIDE7IF9qOCsrKSB7XG4gICAgICAgICAgICB2YXIgX3Q3ID0gU1ZELmh5cG90KF9mMiwgZyk7XG4gICAgICAgICAgICB2YXIgX2NzMiA9IF9mMiAvIF90NztcbiAgICAgICAgICAgIHZhciBfc24yID0gZyAvIF90NztcbiAgICAgICAgICAgIGlmIChfajggIT09IF9rMykge1xuICAgICAgICAgICAgICBlW19qOCAtIDFdID0gX3Q3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2YyID0gX2NzMiAqIHRoaXMuc1tfajhdICsgX3NuMiAqIGVbX2o4XTtcbiAgICAgICAgICAgIGVbX2o4XSA9IF9jczIgKiBlW19qOF0gLSBfc24yICogdGhpcy5zW19qOF07XG4gICAgICAgICAgICBnID0gX3NuMiAqIHRoaXMuc1tfajggKyAxXTtcbiAgICAgICAgICAgIHRoaXMuc1tfajggKyAxXSA9IF9jczIgKiB0aGlzLnNbX2o4ICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHYpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgX2kyMiA9IDA7IF9pMjIgPCB0aGlzLm47IF9pMjIrKykge1xuICAgICAgICAgICAgICAgIF90NyA9IF9jczIgKiB0aGlzLlZbX2kyMl1bX2o4XSArIF9zbjIgKiB0aGlzLlZbX2kyMl1bX2o4ICsgMV07XG4gICAgICAgICAgICAgICAgdGhpcy5WW19pMjJdW19qOCArIDFdID0gLV9zbjIgKiB0aGlzLlZbX2kyMl1bX2o4XSArIF9jczIgKiB0aGlzLlZbX2kyMl1bX2o4ICsgMV07XG4gICAgICAgICAgICAgICAgdGhpcy5WW19pMjJdW19qOF0gPSBfdDc7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdDcgPSBTVkQuaHlwb3QoX2YyLCBnKTtcbiAgICAgICAgICAgIF9jczIgPSBfZjIgLyBfdDc7XG4gICAgICAgICAgICBfc24yID0gZyAvIF90NztcbiAgICAgICAgICAgIHRoaXMuc1tfajhdID0gX3Q3O1xuICAgICAgICAgICAgX2YyID0gX2NzMiAqIGVbX2o4XSArIF9zbjIgKiB0aGlzLnNbX2o4ICsgMV07XG4gICAgICAgICAgICB0aGlzLnNbX2o4ICsgMV0gPSAtX3NuMiAqIGVbX2o4XSArIF9jczIgKiB0aGlzLnNbX2o4ICsgMV07XG4gICAgICAgICAgICBnID0gX3NuMiAqIGVbX2o4ICsgMV07XG4gICAgICAgICAgICBlW19qOCArIDFdID0gX2NzMiAqIGVbX2o4ICsgMV07XG4gICAgICAgICAgICBpZiAod2FudHUgJiYgX2o4IDwgdGhpcy5tIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTIzID0gMDsgX2kyMyA8IHRoaXMubTsgX2kyMysrKSB7XG4gICAgICAgICAgICAgICAgX3Q3ID0gX2NzMiAqIHRoaXMuVVtfaTIzXVtfajhdICsgX3NuMiAqIHRoaXMuVVtfaTIzXVtfajggKyAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyM11bX2o4ICsgMV0gPSAtX3NuMiAqIHRoaXMuVVtfaTIzXVtfajhdICsgX2NzMiAqIHRoaXMuVVtfaTIzXVtfajggKyAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyM11bX2o4XSA9IF90NztcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVbcCAtIDJdID0gX2YyO1xuICAgICAgICAgIGl0ZXIgPSBpdGVyICsgMTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGhpcy5zW19rM10gPD0gMC4wKSB7XG4gICAgICAgICAgICB0aGlzLnNbX2szXSA9IHRoaXMuc1tfazNdIDwgMC4wID8gLXRoaXMuc1tfazNdIDogMC4wO1xuICAgICAgICAgICAgaWYgKHdhbnR2KSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIF9pMjQgPSAwOyBfaTI0IDw9IHBwOyBfaTI0KyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLlZbX2kyNF1bX2szXSA9IC10aGlzLlZbX2kyNF1bX2szXTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKF9rMyA8IHBwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zW19rM10gPj0gdGhpcy5zW19rMyArIDFdKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF90OCA9IHRoaXMuc1tfazNdO1xuICAgICAgICAgICAgdGhpcy5zW19rM10gPSB0aGlzLnNbX2szICsgMV07XG4gICAgICAgICAgICB0aGlzLnNbX2szICsgMV0gPSBfdDg7XG4gICAgICAgICAgICBpZiAod2FudHYgJiYgX2szIDwgdGhpcy5uIC0gMSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBfaTI1ID0gMDsgX2kyNSA8IHRoaXMubjsgX2kyNSsrKSB7XG4gICAgICAgICAgICAgICAgX3Q4ID0gdGhpcy5WW19pMjVdW19rMyArIDFdO1xuICAgICAgICAgICAgICAgIHRoaXMuVltfaTI1XVtfazMgKyAxXSA9IHRoaXMuVltfaTI1XVtfazNdO1xuICAgICAgICAgICAgICAgIHRoaXMuVltfaTI1XVtfazNdID0gX3Q4O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhbnR1ICYmIF9rMyA8IHRoaXMubSAtIDEpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgX2kyNiA9IDA7IF9pMjYgPCB0aGlzLm07IF9pMjYrKykge1xuICAgICAgICAgICAgICAgIF90OCA9IHRoaXMuVVtfaTI2XVtfazMgKyAxXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyNl1bX2szICsgMV0gPSB0aGlzLlVbX2kyNl1bX2szXTtcbiAgICAgICAgICAgICAgICB0aGlzLlVbX2kyNl1bX2szXSA9IF90ODtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9rMysrO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaXRlciA9IDA7XG4gICAgICAgICAgcC0tO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG4gIHZhciByZXN1bHQgPSB7IFU6IHRoaXMuVSwgVjogdGhpcy5WLCBTOiB0aGlzLnMgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIHNxcnQoYV4yICsgYl4yKSB3aXRob3V0IHVuZGVyL292ZXJmbG93LlxuU1ZELmh5cG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIHIgPSB2b2lkIDA7XG4gIGlmIChNYXRoLmFicyhhKSA+IE1hdGguYWJzKGIpKSB7XG4gICAgciA9IGIgLyBhO1xuICAgIHIgPSBNYXRoLmFicyhhKSAqIE1hdGguc3FydCgxICsgciAqIHIpO1xuICB9IGVsc2UgaWYgKGIgIT0gMCkge1xuICAgIHIgPSBhIC8gYjtcbiAgICByID0gTWF0aC5hYnMoYikgKiBNYXRoLnNxcnQoMSArIHIgKiByKTtcbiAgfSBlbHNlIHtcbiAgICByID0gMC4wO1xuICB9XG4gIHJldHVybiByO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTVkQ7XG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuLyoqXG4gKiAgIE5lZWRsZW1hbi1XdW5zY2ggYWxnb3JpdGhtIGlzIGFuIHByb2NlZHVyZSB0byBjb21wdXRlIHRoZSBvcHRpbWFsIGdsb2JhbCBhbGlnbm1lbnQgb2YgdHdvIHN0cmluZ1xuICogICBzZXF1ZW5jZXMgYnkgUy5CLk5lZWRsZW1hbiBhbmQgQy5ELld1bnNjaCAoMTk3MCkuXG4gKlxuICogICBBc2lkZSBmcm9tIHRoZSBpbnB1dHMsIHlvdSBjYW4gYXNzaWduIHRoZSBzY29yZXMgZm9yLFxuICogICAtIE1hdGNoOiBUaGUgdHdvIGNoYXJhY3RlcnMgYXQgdGhlIGN1cnJlbnQgaW5kZXggYXJlIHNhbWUuXG4gKiAgIC0gTWlzbWF0Y2g6IFRoZSB0d28gY2hhcmFjdGVycyBhdCB0aGUgY3VycmVudCBpbmRleCBhcmUgZGlmZmVyZW50LlxuICogICAtIEluc2VydGlvbi9EZWxldGlvbihnYXBzKTogVGhlIGJlc3QgYWxpZ25tZW50IGludm9sdmVzIG9uZSBsZXR0ZXIgYWxpZ25pbmcgdG8gYSBnYXAgaW4gdGhlIG90aGVyIHN0cmluZy5cbiAqL1xuXG52YXIgTmVlZGxlbWFuV3Vuc2NoID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5lZWRsZW1hbld1bnNjaChzZXF1ZW5jZTEsIHNlcXVlbmNlMikge1xuICAgICAgICB2YXIgbWF0Y2hfc2NvcmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gICAgICAgIHZhciBtaXNtYXRjaF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAtMTtcbiAgICAgICAgdmFyIGdhcF9wZW5hbHR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAtMTtcblxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmVlZGxlbWFuV3Vuc2NoKTtcblxuICAgICAgICB0aGlzLnNlcXVlbmNlMSA9IHNlcXVlbmNlMTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZTIgPSBzZXF1ZW5jZTI7XG4gICAgICAgIHRoaXMubWF0Y2hfc2NvcmUgPSBtYXRjaF9zY29yZTtcbiAgICAgICAgdGhpcy5taXNtYXRjaF9wZW5hbHR5ID0gbWlzbWF0Y2hfcGVuYWx0eTtcbiAgICAgICAgdGhpcy5nYXBfcGVuYWx0eSA9IGdhcF9wZW5hbHR5O1xuXG4gICAgICAgIC8vIEp1c3QgdGhlIHJlbW92ZSByZWR1bmRhbmN5XG4gICAgICAgIHRoaXMuaU1heCA9IHNlcXVlbmNlMS5sZW5ndGggKyAxO1xuICAgICAgICB0aGlzLmpNYXggPSBzZXF1ZW5jZTIubGVuZ3RoICsgMTtcblxuICAgICAgICAvLyBHcmlkIG1hdHJpeCBvZiBzY29yZXNcbiAgICAgICAgdGhpcy5ncmlkID0gbmV3IEFycmF5KHRoaXMuaU1heCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pTWF4OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFtpXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkW2ldW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNlYmFjayBtYXRyaXggKDJEIGFycmF5LCBlYWNoIGNlbGwgaXMgYW4gYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgZm9yIFtgRGlhZ2AsIGBVcGAsIGBMZWZ0YF0gcG9zaXRpb25zKVxuICAgICAgICB0aGlzLnRyYWNlYmFja0dyaWQgPSBuZXcgQXJyYXkodGhpcy5pTWF4KTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHRoaXMuaU1heDsgX2krKykge1xuICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXSA9IG5ldyBBcnJheSh0aGlzLmpNYXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgdGhpcy5qTWF4OyBfaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pXVtfal0gPSBbbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgYWxpZ25lZCBzZXF1ZW5jZXMgKHJldHVybiBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzKVxuICAgICAgICB0aGlzLmFsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAvLyBGaW5hbCBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgdGhpcy5zY29yZSA9IC0xO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzY29yZXMgYW5kIHRyYWNlYmFja3NcbiAgICAgICAgdGhpcy5jb21wdXRlR3JpZHMoKTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ2xhc3MoTmVlZGxlbWFuV3Vuc2NoLCBbe1xuICAgICAgICBrZXk6IFwiZ2V0U2NvcmVcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNjb3JlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NvcmU7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJnZXRBbGlnbm1lbnRzXCIsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbm1lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpZ25tZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gZHluYW1pYyBwcm9ncmFtbWluZyBwcm9jZWR1cmVcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImNvbXB1dGVHcmlkc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcHV0ZUdyaWRzKCkge1xuICAgICAgICAgICAgLy8gRmlsbCBpbiB0aGUgZmlyc3Qgcm93XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuak1heDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkWzBdW2pdID0gdGhpcy5ncmlkWzBdW2ogLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkWzBdW2pdID0gW2ZhbHNlLCBmYWxzZSwgdHJ1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGZpcnN0IGNvbHVtblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLmlNYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtpXVswXSA9IHRoaXMuZ3JpZFtpIC0gMV1bMF0gKyB0aGlzLmdhcF9wZW5hbHR5O1xuICAgICAgICAgICAgICAgIHRoaXMudHJhY2ViYWNrR3JpZFtpXVswXSA9IFtmYWxzZSwgdHJ1ZSwgZmFsc2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGaWxsIHRoZSByZXN0IG9mIHRoZSBncmlkXG4gICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAxOyBfaTIgPCB0aGlzLmlNYXg7IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2oyID0gMTsgX2oyIDwgdGhpcy5qTWF4OyBfajIrKykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBtYXggc2NvcmUocykgYW1vbmcgW2BEaWFnYCwgYFVwYCwgYExlZnRgXVxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlhZyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VxdWVuY2UxW19pMiAtIDFdID09PSB0aGlzLnNlcXVlbmNlMltfajIgLSAxXSkgZGlhZyA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajIgLSAxXSArIHRoaXMubWF0Y2hfc2NvcmU7ZWxzZSBkaWFnID0gdGhpcy5ncmlkW19pMiAtIDFdW19qMiAtIDFdICsgdGhpcy5taXNtYXRjaF9wZW5hbHR5O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cCA9IHRoaXMuZ3JpZFtfaTIgLSAxXVtfajJdICsgdGhpcy5nYXBfcGVuYWx0eTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlzLmdyaWRbX2kyXVtfajIgLSAxXSArIHRoaXMuZ2FwX3BlbmFsdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIG11bHRpcGxlIG1heCB2YWx1ZXMsIGNhcHR1cmUgdGhlbSBmb3IgbXVsdGlwbGUgcGF0aHNcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heE9mID0gW2RpYWcsIHVwLCBsZWZ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhtYXhPZik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIEdyaWRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFtfaTJdW19qMl0gPSBtYXhPZltpbmRpY2VzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFjZWJhY2tHcmlkW19pMl1bX2oyXSA9IFtpbmRpY2VzLmluY2x1ZGVzKDApLCBpbmRpY2VzLmluY2x1ZGVzKDEpLCBpbmRpY2VzLmluY2x1ZGVzKDIpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGlnbm1lbnQgc2NvcmVcbiAgICAgICAgICAgIHRoaXMuc2NvcmUgPSB0aGlzLmdyaWRbdGhpcy5pTWF4IC0gMV1bdGhpcy5qTWF4IC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXRzIGFsbCBwb3NzaWJsZSB2YWxpZCBzZXF1ZW5jZSBjb21iaW5hdGlvbnNcblxuICAgIH0sIHtcbiAgICAgICAga2V5OiBcImFsaWdubWVudFRyYWNlYmFja1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWxpZ25tZW50VHJhY2ViYWNrKCkge1xuICAgICAgICAgICAgdmFyIGluUHJvY2Vzc0FsaWdubWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLCB0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLFxuICAgICAgICAgICAgICAgIHNlcTE6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2VxMjogXCJcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChpblByb2Nlc3NBbGlnbm1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBpblByb2Nlc3NBbGlnbm1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25zID0gdGhpcy50cmFjZWJhY2tHcmlkW2N1cnJlbnQucG9zWzBdXVtjdXJyZW50LnBvc1sxXV07XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSAtIDEsIGN1cnJlbnQucG9zWzFdIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogdGhpcy5zZXF1ZW5jZTJbY3VycmVudC5wb3NbMV0gLSAxXSArIGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5wdXNoKHsgcG9zOiBbY3VycmVudC5wb3NbMF0gLSAxLCBjdXJyZW50LnBvc1sxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXExOiB0aGlzLnNlcXVlbmNlMVtjdXJyZW50LnBvc1swXSAtIDFdICsgY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMjogJy0nICsgY3VycmVudC5zZXEyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uc1syXSkge1xuICAgICAgICAgICAgICAgICAgICBpblByb2Nlc3NBbGlnbm1lbnRzLnB1c2goeyBwb3M6IFtjdXJyZW50LnBvc1swXSwgY3VycmVudC5wb3NbMV0gLSAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTE6ICctJyArIGN1cnJlbnQuc2VxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTI6IHRoaXMuc2VxdWVuY2UyW2N1cnJlbnQucG9zWzFdIC0gMV0gKyBjdXJyZW50LnNlcTJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucG9zWzBdID09PSAwICYmIGN1cnJlbnQucG9zWzFdID09PSAwKSB0aGlzLmFsaWdubWVudHMucHVzaCh7IHNlcXVlbmNlMTogY3VycmVudC5zZXExLFxuICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTI6IGN1cnJlbnQuc2VxMlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaW5Qcm9jZXNzQWxpZ25tZW50cy5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGlnbm1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGVscGVyIEZ1bmN0aW9uc1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6IFwiZ2V0QWxsSW5kZXhlc1wiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxsSW5kZXhlcyhhcnIsIHZhbCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICAgICAgICBpID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKGkgPSBhcnIuaW5kZXhPZih2YWwsIGkgKyAxKSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGtleTogXCJhcnJheUFsbE1heEluZGV4ZXNcIixcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFycmF5QWxsTWF4SW5kZXhlcyhhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyhhcnJheSwgTWF0aC5tYXguYXBwbHkobnVsbCwgYXJyYXkpKTtcbiAgICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBOZWVkbGVtYW5XdW5zY2g7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTmVlZGxlbWFuV3Vuc2NoO1xuXG4vKioqLyB9KSxcbi8qIDI4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBsYXlvdXRCYXNlID0gZnVuY3Rpb24gbGF5b3V0QmFzZSgpIHtcbiAgcmV0dXJuO1xufTtcblxubGF5b3V0QmFzZS5GRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5sYXlvdXRCYXNlLkZETGF5b3V0RWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xubGF5b3V0QmFzZS5GRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbmxheW91dEJhc2UuRGltZW5zaW9uRCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xubGF5b3V0QmFzZS5IYXNoTWFwID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5sYXlvdXRCYXNlLkhhc2hTZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcbmxheW91dEJhc2UuSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbmxheW91dEJhc2UuSU1hdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xubGF5b3V0QmFzZS5JbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5sYXlvdXRCYXNlLlBvaW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5sYXlvdXRCYXNlLlBvaW50RCA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5sYXlvdXRCYXNlLlJhbmRvbVNlZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbmxheW91dEJhc2UuUmVjdGFuZ2xlRCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xubGF5b3V0QmFzZS5UcmFuc2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbmxheW91dEJhc2UuVW5pcXVlSURHZW5lcmV0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbmxheW91dEJhc2UuUXVpY2tzb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5sYXlvdXRCYXNlLkxpbmtlZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbmxheW91dEJhc2UuTEdyYXBoT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbmxheW91dEJhc2UuTEdyYXBoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmxheW91dEJhc2UuTEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xubGF5b3V0QmFzZS5MR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbmxheW91dEJhc2UuTE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xubGF5b3V0QmFzZS5MYXlvdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbmxheW91dEJhc2UuTmVlZGxlbWFuV3Vuc2NoID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG5sYXlvdXRCYXNlLk1hdHJpeCA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xubGF5b3V0QmFzZS5TVkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcblxubW9kdWxlLmV4cG9ydHMgPSBsYXlvdXRCYXNlO1xuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmZ1bmN0aW9uIEVtaXR0ZXIoKSB7XG4gIHRoaXMubGlzdGVuZXJzID0gW107XG59XG5cbnZhciBwID0gRW1pdHRlci5wcm90b3R5cGU7XG5cbnAuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG4gIHRoaXMubGlzdGVuZXJzLnB1c2goe1xuICAgIGV2ZW50OiBldmVudCxcbiAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgfSk7XG59O1xuXG5wLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gdGhpcy5saXN0ZW5lcnMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsID0gdGhpcy5saXN0ZW5lcnNbaV07XG5cbiAgICBpZiAobC5ldmVudCA9PT0gZXZlbnQgJiYgbC5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cbn07XG5cbnAuZW1pdCA9IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGwgPSB0aGlzLmxpc3RlbmVyc1tpXTtcblxuICAgIGlmIChldmVudCA9PT0gbC5ldmVudCkge1xuICAgICAgbC5jYWxsYmFjayhkYXRhKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7IiwKICAgICIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJsYXlvdXQtYmFzZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJsYXlvdXQtYmFzZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJjb3NlQmFzZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImxheW91dC1iYXNlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjb3NlQmFzZVwiXSA9IGZhY3Rvcnkocm9vdFtcImxheW91dEJhc2VcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNTUxX18pIHtcbnJldHVybiAvKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdFwidXNlIHN0cmljdFwiO1xuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XG5cbi8qKiovIDQ1OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIGNvc2VCYXNlID0ge307XG5cbmNvc2VCYXNlLmxheW91dEJhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSk7XG5jb3NlQmFzZS5Db1NFQ29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDYpO1xuY29zZUJhc2UuQ29TRUVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2Nyk7XG5jb3NlQmFzZS5Db1NFR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4MCk7XG5jb3NlQmFzZS5Db1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NzgpO1xuY29zZUJhc2UuQ29TRUxheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oNzY1KTtcbmNvc2VCYXNlLkNvU0VOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OTEpO1xuY29zZUJhc2UuQ29uc3RyYWludEhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwMik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29zZUJhc2U7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4MDY6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG52YXIgRkRMYXlvdXRDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuRkRMYXlvdXRDb25zdGFudHM7XG5cbmZ1bmN0aW9uIENvU0VDb25zdGFudHMoKSB7fVxuXG4vL0NvU0VDb25zdGFudHMgaW5oZXJpdHMgc3RhdGljIHByb3BzIGluIEZETGF5b3V0Q29uc3RhbnRzXG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0Q29uc3RhbnRzKSB7XG4gIENvU0VDb25zdGFudHNbcHJvcF0gPSBGRExheW91dENvbnN0YW50c1twcm9wXTtcbn1cblxuQ29TRUNvbnN0YW50cy5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HID0gZmFsc2U7XG5Db1NFQ29uc3RhbnRzLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04gPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIO1xuQ29TRUNvbnN0YW50cy5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OID0gNjA7XG5Db1NFQ29uc3RhbnRzLlRJTEUgPSB0cnVlO1xuQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19WRVJUSUNBTCA9IDEwO1xuQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMID0gMTA7XG5Db1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gdHJ1ZTtcbkNvU0VDb25zdGFudHMuRU5GT1JDRV9DT05TVFJBSU5UUyA9IHRydWU7XG5Db1NFQ29uc3RhbnRzLkFQUExZX0xBWU9VVCA9IHRydWU7XG5Db1NFQ29uc3RhbnRzLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTID0gdHJ1ZTtcbkNvU0VDb25zdGFudHMuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwgPSB0cnVlOyAvLyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UgaWYgdGhlcmUgd2lsbCBiZSBhIGNvbnN0cmFpbnRcbi8vIFRoaXMgY29uc3RhbnQgaXMgZm9yIGRpZmZlcmVudGlhdGluZyB3aGV0aGVyIGFjdHVhbCBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgdXNlcyBjb3NlLWJhc2Ugd2FudHMgdG8gYXBwbHkgb25seSBpbmNyZW1lbnRhbCBsYXlvdXQgb3IgXG4vLyBhbiBpbmNyZW1lbnRhbCBsYXlvdXQgb24gdG9wIG9mIGEgcmFuZG9taXplZCBsYXlvdXQuIElmIGl0IGlzIG9ubHkgaW5jcmVtZW50YWwgbGF5b3V0LCB0aGVuIHRoaXMgY29uc3RhbnQgc2hvdWxkIGJlIHRydWUuXG5Db1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwgPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUw7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUNvbnN0YW50cztcblxuLyoqKi8gfSksXG5cbi8qKiovIDc2Nzpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBGRExheW91dEVkZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuRkRMYXlvdXRFZGdlO1xuXG5mdW5jdGlvbiBDb1NFRWRnZShzb3VyY2UsIHRhcmdldCwgdkVkZ2UpIHtcbiAgRkRMYXlvdXRFZGdlLmNhbGwodGhpcywgc291cmNlLCB0YXJnZXQsIHZFZGdlKTtcbn1cblxuQ29TRUVkZ2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShGRExheW91dEVkZ2UucHJvdG90eXBlKTtcbmZvciAodmFyIHByb3AgaW4gRkRMYXlvdXRFZGdlKSB7XG4gIENvU0VFZGdlW3Byb3BdID0gRkRMYXlvdXRFZGdlW3Byb3BdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvU0VFZGdlO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODgwOlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIExHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5MR3JhcGg7XG5cbmZ1bmN0aW9uIENvU0VHcmFwaChwYXJlbnQsIGdyYXBoTWdyLCB2R3JhcGgpIHtcbiAgTEdyYXBoLmNhbGwodGhpcywgcGFyZW50LCBncmFwaE1nciwgdkdyYXBoKTtcbn1cblxuQ29TRUdyYXBoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTEdyYXBoLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaCkge1xuICBDb1NFR3JhcGhbcHJvcF0gPSBMR3JhcGhbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTc4OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIExHcmFwaE1hbmFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuTEdyYXBoTWFuYWdlcjtcblxuZnVuY3Rpb24gQ29TRUdyYXBoTWFuYWdlcihsYXlvdXQpIHtcbiAgTEdyYXBoTWFuYWdlci5jYWxsKHRoaXMsIGxheW91dCk7XG59XG5cbkNvU0VHcmFwaE1hbmFnZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMR3JhcGhNYW5hZ2VyLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIExHcmFwaE1hbmFnZXIpIHtcbiAgQ29TRUdyYXBoTWFuYWdlcltwcm9wXSA9IExHcmFwaE1hbmFnZXJbcHJvcF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUdyYXBoTWFuYWdlcjtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc2NTpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBGRExheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5GRExheW91dDtcbnZhciBDb1NFR3JhcGhNYW5hZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NzgpO1xudmFyIENvU0VHcmFwaCA9IF9fd2VicGFja19yZXF1aXJlX18oODgwKTtcbnZhciBDb1NFTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oOTkxKTtcbnZhciBDb1NFRWRnZSA9IF9fd2VicGFja19yZXF1aXJlX18oNzY3KTtcbnZhciBDb1NFQ29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MDYpO1xudmFyIENvbnN0cmFpbnRIYW5kbGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MDIpO1xudmFyIEZETGF5b3V0Q29uc3RhbnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5MYXlvdXRDb25zdGFudHM7XG52YXIgUG9pbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuUG9pbnQ7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLlBvaW50RDtcbnZhciBEaW1lbnNpb25EID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkRpbWVuc2lvbkQ7XG52YXIgTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkxheW91dDtcbnZhciBJbnRlZ2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkludGVnZXI7XG52YXIgSUdlb21ldHJ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLklHZW9tZXRyeTtcbnZhciBMR3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuTEdyYXBoO1xudmFyIFRyYW5zZm9ybSA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5UcmFuc2Zvcm07XG52YXIgTGlua2VkTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTUxKS5MaW5rZWRMaXN0O1xuXG5mdW5jdGlvbiBDb1NFTGF5b3V0KCkge1xuICBGRExheW91dC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudG9CZVRpbGVkID0ge307IC8vIE1lbW9yaXplIGlmIGEgbm9kZSBpcyB0byBiZSB0aWxlZCBvciBpcyB0aWxlZFxuICB0aGlzLmNvbnN0cmFpbnRzID0ge307IC8vIGtlZXAgbGF5b3V0IGNvbnN0cmFpbnRzXG59XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShGRExheW91dC5wcm90b3R5cGUpO1xuXG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0KSB7XG4gIENvU0VMYXlvdXRbcHJvcF0gPSBGRExheW91dFtwcm9wXTtcbn1cblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZ20gPSBuZXcgQ29TRUdyYXBoTWFuYWdlcih0aGlzKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIgPSBnbTtcbiAgcmV0dXJuIGdtO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3R3JhcGggPSBmdW5jdGlvbiAodkdyYXBoKSB7XG4gIHJldHVybiBuZXcgQ29TRUdyYXBoKG51bGwsIHRoaXMuZ3JhcGhNYW5hZ2VyLCB2R3JhcGgpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUubmV3Tm9kZSA9IGZ1bmN0aW9uICh2Tm9kZSkge1xuICByZXR1cm4gbmV3IENvU0VOb2RlKHRoaXMuZ3JhcGhNYW5hZ2VyLCB2Tm9kZSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5uZXdFZGdlID0gZnVuY3Rpb24gKHZFZGdlKSB7XG4gIHJldHVybiBuZXcgQ29TRUVkZ2UobnVsbCwgbnVsbCwgdkVkZ2UpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIEZETGF5b3V0LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmICghdGhpcy5pc1N1YkxheW91dCkge1xuICAgIGlmIChDb1NFQ29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPCAxMCkge1xuICAgICAgdGhpcy5pZGVhbEVkZ2VMZW5ndGggPSAxMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pZGVhbEVkZ2VMZW5ndGggPSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG4gICAgfVxuXG4gICAgdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uID0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTjtcbiAgICB0aGlzLmdyYXZpdHlDb25zdGFudCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSDtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50ID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIO1xuICAgIHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcbiAgICB0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUjtcblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdHJlZSByZWR1Y3Rpb24gc3VwcG9ydFxuICAgIHRoaXMucHJ1bmVkTm9kZXNBbGwgPSBbXTtcbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyA9IDA7XG4gICAgdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMgPSAwO1xuICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNHcm93dGhGaW5pc2hlZCA9IGZhbHNlO1xuICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBDb1NFIHJlbGF0ZWQgcGFyYW1ldGVycyB1c2VkIGJ5IHNwcmluZyBlbWJlZGRlci5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlciA9IGZ1bmN0aW9uICgpIHtcbiAgRkRMYXlvdXQucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlci5jYWxsKHRoaXMpO1xuXG4gIC8vIHZhcmlhYmxlcyBmb3IgY29vbGluZ1xuICB0aGlzLmNvb2xpbmdDeWNsZSA9IDA7XG4gIHRoaXMubWF4Q29vbGluZ0N5Y2xlID0gdGhpcy5tYXhJdGVyYXRpb25zIC8gRkRMYXlvdXRDb25zdGFudHMuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EO1xuICB0aGlzLmZpbmFsVGVtcGVyYXR1cmUgPSAwLjA0O1xuICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IDE7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjcmVhdGVCZW5kc0FzTmVlZGVkID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtcbiAgaWYgKGNyZWF0ZUJlbmRzQXNOZWVkZWQpIHtcbiAgICB0aGlzLmNyZWF0ZUJlbmRwb2ludHMoKTtcbiAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG4gIH1cblxuICB0aGlzLmxldmVsID0gMDtcbiAgcmV0dXJuIHRoaXMuY2xhc3NpY0xheW91dCgpO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2xhc3NpY0xheW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5ub2Rlc1dpdGhHcmF2aXR5ID0gdGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSk7XG4gIHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCk7XG4gIHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCk7XG4gIHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKTtcblxuICBpZiAoIXRoaXMuaW5jcmVtZW50YWwpIHtcbiAgICB2YXIgZm9yZXN0ID0gdGhpcy5nZXRGbGF0Rm9yZXN0KCk7XG5cbiAgICAvLyBUaGUgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5b3V0IGlzIGZsYXQgYW5kIGEgZm9yZXN0XG4gICAgaWYgKGZvcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShmb3Jlc3QpO1xuICAgIH1cbiAgICAvLyBUaGUgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5b3V0IGlzIG5vdCBmbGF0IG9yIGEgZm9yZXN0XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFJlZHVjZSB0aGUgdHJlZXMgd2hlbiBpbmNyZW1lbnRhbCBtb2RlIGlzIG5vdCBlbmFibGVkIGFuZCBncmFwaCBpcyBub3QgYSBmb3Jlc3QgXG4gICAgICAgIHRoaXMucmVkdWNlVHJlZXMoKTtcbiAgICAgICAgLy8gVXBkYXRlIG5vZGVzIHRoYXQgZ3Jhdml0eSB3aWxsIGJlIGFwcGxpZWRcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO1xuICAgICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSB0aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIGFsbE5vZGVzLmhhcyh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGludGVyc2VjdGlvbik7XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKTtcbiAgICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCkge1xuICAgICAgLy8gUmVkdWNlIHRoZSB0cmVlcyBpbiBpbmNyZW1lbnRhbCBtb2RlIGlmIG9ubHkgdGhpcyBjb25zdGFudCBpcyBzZXQgdG8gdHJ1ZSBcbiAgICAgIHRoaXMucmVkdWNlVHJlZXMoKTtcbiAgICAgIC8vIFVwZGF0ZSBub2RlcyB0aGF0IGdyYXZpdHkgd2lsbCBiZSBhcHBsaWVkXG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICB2YXIgYWxsTm9kZXMgPSBuZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSk7XG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gdGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihpbnRlcnNlY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh0aGlzLmNvbnN0cmFpbnRzKS5sZW5ndGggPiAwKSB7XG4gICAgQ29uc3RyYWludEhhbmRsZXIuaGFuZGxlQ29uc3RyYWludHModGhpcyk7XG4gICAgdGhpcy5pbml0Q29uc3RyYWludFZhcmlhYmxlcygpO1xuICB9XG5cbiAgdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKTtcbiAgaWYgKENvU0VDb25zdGFudHMuQVBQTFlfTEFZT1VUKSB7XG4gICAgdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWNrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnRvdGFsSXRlcmF0aW9ucysrO1xuXG4gIGlmICh0aGlzLnRvdGFsSXRlcmF0aW9ucyA9PT0gdGhpcy5tYXhJdGVyYXRpb25zICYmICF0aGlzLmlzVHJlZUdyb3dpbmcgJiYgIXRoaXMuaXNHcm93dGhGaW5pc2hlZCkge1xuICAgIGlmICh0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnRvdGFsSXRlcmF0aW9ucyAlIEZETGF5b3V0Q29uc3RhbnRzLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCA9PSAwICYmICF0aGlzLmlzVHJlZUdyb3dpbmcgJiYgIXRoaXMuaXNHcm93dGhGaW5pc2hlZCkge1xuICAgIGlmICh0aGlzLmlzQ29udmVyZ2VkKCkpIHtcbiAgICAgIGlmICh0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5pc1RyZWVHcm93aW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29vbGluZ0N5Y2xlKys7XG5cbiAgICBpZiAodGhpcy5sYXlvdXRRdWFsaXR5ID09IDApIHtcbiAgICAgIC8vIHF1YWxpdHkgLSBcImRyYWZ0XCJcbiAgICAgIHRoaXMuY29vbGluZ0FkanVzdGVyID0gdGhpcy5jb29saW5nQ3ljbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxheW91dFF1YWxpdHkgPT0gMSkge1xuICAgICAgLy8gcXVhbGl0eSAtIFwiZGVmYXVsdFwiXG4gICAgICB0aGlzLmNvb2xpbmdBZGp1c3RlciA9IHRoaXMuY29vbGluZ0N5Y2xlIC8gMztcbiAgICB9XG5cbiAgICAvLyBjb29saW5nIHNjaGVkdWxlIGlzIGJhc2VkIG9uIGh0dHA6Ly93d3cuYnRsdWtlLmNvbS9zaW1hbmYxLmh0bWwgLT4gY29vbGluZyBzY2hlZHVsZSAzXG4gICAgdGhpcy5jb29saW5nRmFjdG9yID0gTWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciAtIE1hdGgucG93KHRoaXMuY29vbGluZ0N5Y2xlLCBNYXRoLmxvZygxMDAgKiAodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3RvciAtIHRoaXMuZmluYWxUZW1wZXJhdHVyZSkpIC8gTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKSAvIDEwMCAqIHRoaXMuY29vbGluZ0FkanVzdGVyLCB0aGlzLmZpbmFsVGVtcGVyYXR1cmUpO1xuICAgIHRoaXMuYW5pbWF0aW9uUGVyaW9kID0gTWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCAqIE1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKTtcbiAgfVxuICAvLyBPcGVyYXRpb25zIHdoaWxlIHRyZWUgaXMgZ3Jvd2luZyBhZ2FpbiBcbiAgaWYgKHRoaXMuaXNUcmVlR3Jvd2luZykge1xuICAgIGlmICh0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyAlIDEwID09IDApIHtcbiAgICAgIGlmICh0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCgpO1xuICAgICAgICB0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpO1xuICAgICAgICAvLyBVcGRhdGUgbm9kZXMgdGhhdCBncmF2aXR5IHdpbGwgYmUgYXBwbGllZFxuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IHRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4gYWxsTm9kZXMuaGFzKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oaW50ZXJzZWN0aW9uKTtcblxuICAgICAgICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkKCk7XG4gICAgICAgIGlmIChDb1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwpIHRoaXMuY29vbGluZ0ZhY3RvciA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgLyAyO2Vsc2UgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNUcmVlR3Jvd2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR3Jvd3RoRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrO1xuICB9XG4gIC8vIE9wZXJhdGlvbnMgYWZ0ZXIgZ3Jvd3RoIGlzIGZpbmlzaGVkXG4gIGlmICh0aGlzLmlzR3Jvd3RoRmluaXNoZWQpIHtcbiAgICBpZiAodGhpcy5pc0NvbnZlcmdlZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zICUgMTAgPT0gMCkge1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUdyaWQoKTtcbiAgICB9XG4gICAgaWYgKENvU0VDb25zdGFudHMuUFVSRV9JTkNSRU1FTlRBTCkgdGhpcy5jb29saW5nRmFjdG9yID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCAvIDIgKiAoKDEwMCAtIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKSAvIDEwMCk7ZWxzZSB0aGlzLmNvb2xpbmdGYWN0b3IgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMICogKCgxMDAgLSB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykgLyAxMDApO1xuICAgIHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKys7XG4gIH1cblxuICB2YXIgZ3JpZFVwZGF0ZUFsbG93ZWQgPSAhdGhpcy5pc1RyZWVHcm93aW5nICYmICF0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7XG4gIHZhciBmb3JjZVRvTm9kZVN1cnJvdW5kaW5nVXBkYXRlID0gdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMgJSAxMCA9PSAxICYmIHRoaXMuaXNUcmVlR3Jvd2luZyB8fCB0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyAlIDEwID09IDEgJiYgdGhpcy5pc0dyb3d0aEZpbmlzaGVkO1xuXG4gIHRoaXMudG90YWxEaXNwbGFjZW1lbnQgPSAwO1xuICB0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKTtcbiAgdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCk7XG4gIHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhncmlkVXBkYXRlQWxsb3dlZCwgZm9yY2VUb05vZGVTdXJyb3VuZGluZ1VwZGF0ZSk7XG4gIHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKTtcbiAgdGhpcy5tb3ZlTm9kZXMoKTtcbiAgdGhpcy5hbmltYXRlKCk7XG5cbiAgcmV0dXJuIGZhbHNlOyAvLyBMYXlvdXQgaXMgbm90IGVuZGVkIHlldCByZXR1cm4gZmFsc2Vcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gIHZhciBwRGF0YSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlY3QgPSBhbGxOb2Rlc1tpXS5yZWN0O1xuICAgIHZhciBpZCA9IGFsbE5vZGVzW2ldLmlkO1xuICAgIHBEYXRhW2lkXSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHg6IHJlY3QuZ2V0Q2VudGVyWCgpLFxuICAgICAgeTogcmVjdC5nZXRDZW50ZXJZKCksXG4gICAgICB3OiByZWN0LndpZHRoLFxuICAgICAgaDogcmVjdC5oZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHBEYXRhO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCA9IDI1O1xuICB0aGlzLmFuaW1hdGlvblBlcmlvZCA9IHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDtcbiAgdmFyIGxheW91dEVuZGVkID0gZmFsc2U7XG5cbiAgLy8gSWYgYW1pbmF0ZSBvcHRpb24gaXMgJ2R1cmluZycgc2lnbmFsIHRoYXQgbGF5b3V0IGlzIHN1cHBvc2VkIHRvIHN0YXJ0IGl0ZXJhdGluZ1xuICBpZiAoRkRMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9PT0gJ2R1cmluZycpIHtcbiAgICB0aGlzLmVtaXQoJ2xheW91dHN0YXJ0ZWQnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbWluYXRlIG9wdGlvbiBpcyAnZHVyaW5nJyB0aWNrKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24gaW5kZXguanNcbiAgICB3aGlsZSAoIWxheW91dEVuZGVkKSB7XG4gICAgICBsYXlvdXRFbmRlZCA9IHRoaXMudGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpO1xuICB9XG59O1xuXG4vLyBvdmVycmlkZXMgbW92ZU5vZGVzIG1ldGhvZCBpbiBGRExheW91dFxuQ29TRUxheW91dC5wcm90b3R5cGUubW92ZU5vZGVzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbE5vZGVzID0gdGhpcy5nZXRBbGxOb2RlcygpO1xuICB2YXIgbm9kZTtcblxuICAvLyBjYWxjdWxhdGUgZGlzcGxhY2VtZW50IGZvciBlYWNoIG5vZGUgXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLmNhbGN1bGF0ZURpc3BsYWNlbWVudCgpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYWNlbWVudHMoKTtcbiAgfVxuXG4gIC8vIG1vdmUgZWFjaCBub2RlXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IGxOb2Rlc1tpXTtcbiAgICBub2RlLm1vdmUoKTtcbiAgfVxufTtcblxuLy8gY29uc3RyYWludCByZWxhdGVkIG1ldGhvZHM6IGluaXRDb25zdHJhaW50VmFyaWFibGVzIGFuZCB1cGRhdGVEaXNwbGFjZW1lbnRzXG5cbi8vIGluaXRpYWxpemUgY29uc3RyYWludCByZWxhdGVkIHZhcmlhYmxlc1xuQ29TRUxheW91dC5wcm90b3R5cGUuaW5pdENvbnN0cmFpbnRWYXJpYWJsZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5pZFRvTm9kZU1hcCA9IG5ldyBNYXAoKTtcbiAgdGhpcy5maXhlZE5vZGVTZXQgPSBuZXcgU2V0KCk7XG5cbiAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcblxuICAvLyBmaWxsIGlkVG9Ob2RlTWFwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGFsbE5vZGVzW2ldO1xuICAgIHRoaXMuaWRUb05vZGVNYXAuc2V0KG5vZGUuaWQsIG5vZGUpO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIGZpeGVkIG5vZGUgd2VpZ2h0IGZvciBnaXZlbiBjb21wb3VuZCBub2RlXG4gIHZhciBjYWxjdWxhdGVDb21wb3VuZFdlaWdodCA9IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvdW5kV2VpZ2h0KGNvbXBvdW5kTm9kZSkge1xuICAgIHZhciBub2RlcyA9IGNvbXBvdW5kTm9kZS5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIGZpeGVkTm9kZVdlaWdodCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWxmLmZpeGVkTm9kZVNldC5oYXMobm9kZS5pZCkpIHtcbiAgICAgICAgICBmaXhlZE5vZGVXZWlnaHQgKz0gMTAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhlZE5vZGVXZWlnaHQgKz0gY2FsY3VsYXRlQ29tcG91bmRXZWlnaHQobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXhlZE5vZGVXZWlnaHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCkge1xuICAgIC8vIGZpbGwgZml4ZWROb2RlU2V0XG4gICAgdGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG4gICAgICBzZWxmLmZpeGVkTm9kZVNldC5hZGQobm9kZURhdGEubm9kZUlkKTtcbiAgICB9KTtcblxuICAgIC8vIGFzc2lnbiBmaXhlZCBub2RlIHdlaWdodHMgdG8gY29tcG91bmRzIGlmIHRoZXkgY29udGFpbiBmaXhlZCBub2Rlc1xuICAgIHZhciBhbGxOb2RlcyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCk7XG4gICAgdmFyIG5vZGU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5nZXRDaGlsZCgpICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGZpeGVkTm9kZVdlaWdodCA9IGNhbGN1bGF0ZUNvbXBvdW5kV2VpZ2h0KG5vZGUpO1xuICAgICAgICBpZiAoZml4ZWROb2RlV2VpZ2h0ID4gMCkge1xuICAgICAgICAgIG5vZGUuZml4ZWROb2RlV2VpZ2h0ID0gZml4ZWROb2RlV2VpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgdmFyIG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdmFyIG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5maXhlZE5vZGVzT25Ib3Jpem9udGFsID0gbmV3IFNldCgpO1xuICAgIHRoaXMuZml4ZWROb2Rlc09uVmVydGljYWwgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBmaWxsIG1hcHMgYW5kIHNldHNcbiAgICB0aGlzLmZpeGVkTm9kZVNldC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgIHNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQobm9kZUlkKTtcbiAgICAgIHNlbGYuZml4ZWROb2Rlc09uVmVydGljYWwuYWRkKG5vZGVJZCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKSB7XG4gICAgICAgIHZhciB2ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNhbEFsaWdubWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgaSwgW10pO1xuICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50W2ldLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQobm9kZUlkLCBcImR1bW15XCIgKyBpKTtcbiAgICAgICAgICAgIHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoXCJkdW1teVwiICsgaSkucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuZml4ZWROb2RlU2V0Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgIHNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoXCJkdW1teVwiICsgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCkge1xuICAgICAgICB2YXIgaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvcml6b250YWxBbGlnbm1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgaSwgW10pO1xuICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnRbaV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KG5vZGVJZCwgXCJkdW1teVwiICsgaSk7XG4gICAgICAgICAgICBzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoXCJkdW1teVwiICsgaSkucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuZml4ZWROb2RlU2V0Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgIHNlbGYuZml4ZWROb2Rlc09uVmVydGljYWwuYWRkKFwiZHVtbXlcIiArIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKENvU0VDb25zdGFudHMuUkVMQVhfTU9WRU1FTlRfT05fQ09OU1RSQUlOVFMpIHtcblxuICAgICAgdGhpcy5zaHVmZmxlID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICAgIHZhciBqLCB4LCBpO1xuICAgICAgICBmb3IgKGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDIgKiBhcnJheS5sZW5ndGggLyAzOyBpLS0pIHtcbiAgICAgICAgICBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XG4gICAgICAgICAgeCA9IGFycmF5W2ldO1xuICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07XG4gICAgICAgICAgYXJyYXlbal0gPSB4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbCA9IFtdO1xuICAgICAgdGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbCA9IFtdO1xuICAgICAgdGhpcy5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbCA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwgPSBuZXcgTWFwKCk7XG5cbiAgICAgIC8vIGZpbGwgYXJyYXlzIGFuZCBtYXBzXG4gICAgICB0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LmxlZnQpIHtcbiAgICAgICAgICB2YXIgbm9kZUlkTGVmdCA9IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQubGVmdCkgPyBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChjb25zdHJhaW50LmxlZnQpIDogY29uc3RyYWludC5sZWZ0O1xuICAgICAgICAgIHZhciBub2RlSWRSaWdodCA9IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQucmlnaHQpID8gbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC5yaWdodCkgOiBjb25zdHJhaW50LnJpZ2h0O1xuXG4gICAgICAgICAgaWYgKCFzZWxmLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuaW5jbHVkZXMobm9kZUlkTGVmdCkpIHtcbiAgICAgICAgICAgIHNlbGYubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKG5vZGVJZExlZnQpO1xuICAgICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChub2RlSWRMZWZ0LCBbXSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhub2RlSWRMZWZ0KSkge1xuICAgICAgICAgICAgICBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KG5vZGVJZExlZnQsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkTGVmdClbMF0pLmdldENlbnRlclgoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KG5vZGVJZExlZnQsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZExlZnQpLmdldENlbnRlclgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZi5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKG5vZGVJZFJpZ2h0KSkge1xuICAgICAgICAgICAgc2VsZi5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLnB1c2gobm9kZUlkUmlnaHQpO1xuICAgICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChub2RlSWRSaWdodCwgW10pO1xuICAgICAgICAgICAgaWYgKHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMobm9kZUlkUmlnaHQpKSB7XG4gICAgICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQobm9kZUlkUmlnaHQsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkUmlnaHQpWzBdKS5nZXRDZW50ZXJYKCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChub2RlSWRSaWdodCwgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkUmlnaHQpLmdldENlbnRlclgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChub2RlSWRMZWZ0KS5wdXNoKHsgcmlnaHQ6IG5vZGVJZFJpZ2h0LCBnYXA6IGNvbnN0cmFpbnQuZ2FwIH0pO1xuICAgICAgICAgIHNlbGYubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5nZXQobm9kZUlkUmlnaHQpLnB1c2goeyBsZWZ0OiBub2RlSWRMZWZ0LCBnYXA6IGNvbnN0cmFpbnQuZ2FwIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBub2RlSWRUb3AgPSBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQudG9wKSA/IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC50b3ApIDogY29uc3RyYWludC50b3A7XG4gICAgICAgICAgdmFyIG5vZGVJZEJvdHRvbSA9IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoY29uc3RyYWludC5ib3R0b20pID8gbm9kZVRvRHVtbXlGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChjb25zdHJhaW50LmJvdHRvbSkgOiBjb25zdHJhaW50LmJvdHRvbTtcblxuICAgICAgICAgIGlmICghc2VsZi5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyhub2RlSWRUb3ApKSB7XG4gICAgICAgICAgICBzZWxmLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLnB1c2gobm9kZUlkVG9wKTtcbiAgICAgICAgICAgIHNlbGYubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuc2V0KG5vZGVJZFRvcCwgW10pO1xuICAgICAgICAgICAgaWYgKHNlbGYuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhub2RlSWRUb3ApKSB7XG4gICAgICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KG5vZGVJZFRvcCwgc2VsZi5pZFRvTm9kZU1hcC5nZXQoc2VsZi5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5vZGVJZFRvcClbMF0pLmdldENlbnRlclkoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChub2RlSWRUb3AsIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZFRvcCkuZ2V0Q2VudGVyWSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZWxmLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKG5vZGVJZEJvdHRvbSkpIHtcbiAgICAgICAgICAgIHNlbGYubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChub2RlSWRCb3R0b20pO1xuICAgICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5zZXQobm9kZUlkQm90dG9tLCBbXSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKG5vZGVJZEJvdHRvbSkpIHtcbiAgICAgICAgICAgICAgc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQobm9kZUlkQm90dG9tLCBzZWxmLmlkVG9Ob2RlTWFwLmdldChzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkQm90dG9tKVswXSkuZ2V0Q2VudGVyWSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KG5vZGVJZEJvdHRvbSwgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkQm90dG9tKS5nZXRDZW50ZXJZKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLmdldChub2RlSWRUb3ApLnB1c2goeyBib3R0b206IG5vZGVJZEJvdHRvbSwgZ2FwOiBjb25zdHJhaW50LmdhcCB9KTtcbiAgICAgICAgICBzZWxmLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLmdldChub2RlSWRCb3R0b20pLnB1c2goeyB0b3A6IG5vZGVJZFRvcCwgZ2FwOiBjb25zdHJhaW50LmdhcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdWJHcmFwaE9uSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTsgLy8gc3ViZ3JhcGggZnJvbSB2ZXJ0aWNhbCBSUCBjb25zdHJhaW50c1xuICAgICAgdmFyIHN1YkdyYXBoT25WZXJ0aWNhbCA9IG5ldyBNYXAoKTsgLy8gc3ViZ3JhcGggZnJvbSB2ZXJ0aWNhbCBSUCBjb25zdHJhaW50c1xuXG4gICAgICAvLyBjb25zdHJ1Y3Qgc3ViZ3JhcGhzIGZyb20gcmVsYXRpdmUgcGxhY2VtZW50IGNvbnN0cmFpbnRzIFxuICAgICAgdGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAoY29uc3RyYWludCkge1xuICAgICAgICBpZiAoY29uc3RyYWludC5sZWZ0KSB7XG4gICAgICAgICAgdmFyIGxlZnQgPSBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb25zdHJhaW50LmxlZnQpID8gbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC5sZWZ0KSA6IGNvbnN0cmFpbnQubGVmdDtcbiAgICAgICAgICB2YXIgcmlnaHQgPSBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb25zdHJhaW50LnJpZ2h0KSA/IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGNvbnN0cmFpbnQucmlnaHQpIDogY29uc3RyYWludC5yaWdodDtcbiAgICAgICAgICBpZiAoc3ViR3JhcGhPbkhvcml6b250YWwuaGFzKGxlZnQpKSB7XG4gICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5nZXQobGVmdCkucHVzaChyaWdodCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YkdyYXBoT25Ib3Jpem9udGFsLnNldChsZWZ0LCBbcmlnaHRdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1YkdyYXBoT25Ib3Jpem9udGFsLmhhcyhyaWdodCkpIHtcbiAgICAgICAgICAgIHN1YkdyYXBoT25Ib3Jpem9udGFsLmdldChyaWdodCkucHVzaChsZWZ0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViR3JhcGhPbkhvcml6b250YWwuc2V0KHJpZ2h0LCBbbGVmdF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdG9wID0gbm9kZVRvRHVtbXlGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhjb25zdHJhaW50LnRvcCkgPyBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNvbnN0cmFpbnQudG9wKSA6IGNvbnN0cmFpbnQudG9wO1xuICAgICAgICAgIHZhciBib3R0b20gPSBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbnN0cmFpbnQuYm90dG9tKSA/IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoY29uc3RyYWludC5ib3R0b20pIDogY29uc3RyYWludC5ib3R0b207XG4gICAgICAgICAgaWYgKHN1YkdyYXBoT25WZXJ0aWNhbC5oYXModG9wKSkge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLmdldCh0b3ApLnB1c2goYm90dG9tKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLnNldCh0b3AsIFtib3R0b21dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1YkdyYXBoT25WZXJ0aWNhbC5oYXMoYm90dG9tKSkge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLmdldChib3R0b20pLnB1c2godG9wKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLnNldChib3R0b20sIFt0b3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgY29tcG9uZW50cyBmcm9tIGEgZ2l2ZW4gZ3JhcGggXG4gICAgICAvLyBhbHNvIHJldHVybnMgYW4gYXJyYXkgdGhhdCBrZWVwcyB3aGV0aGVyIGVhY2ggY29tcG9uZW50IGNvbnRhaW5zIGZpeGVkIG5vZGVcbiAgICAgIHZhciBjb25zdHJ1Y3RDb21wb25lbnRzID0gZnVuY3Rpb24gY29uc3RydWN0Q29tcG9uZW50cyhncmFwaCwgZml4ZWROb2Rlcykge1xuICAgICAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICB2YXIgaXNGaXhlZCA9IFtdO1xuICAgICAgICB2YXIgcXVldWUgPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcblxuICAgICAgICBncmFwaC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzW2NvdW50XSA9IFtdO1xuICAgICAgICAgICAgaXNGaXhlZFtjb3VudF0gPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Tm9kZSA9IGtleTtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgdmlzaXRlZC5hZGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgY29tcG9uZW50c1tjb3VudF0ucHVzaChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGlmIChmaXhlZE5vZGVzLmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBpc0ZpeGVkW2NvdW50XSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIG5laWdoYm9ycyA9IGdyYXBoLmdldChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgIG5laWdoYm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChuZWlnaGJvcikge1xuICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMobmVpZ2hib3IpKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKG5laWdoYm9yKTtcbiAgICAgICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbY291bnRdLnB1c2gobmVpZ2hib3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgY29tcG9uZW50czogY29tcG9uZW50cywgaXNGaXhlZDogaXNGaXhlZCB9O1xuICAgICAgfTtcblxuICAgICAgdmFyIHJlc3VsdE9uSG9yaXpvbnRhbCA9IGNvbnN0cnVjdENvbXBvbmVudHMoc3ViR3JhcGhPbkhvcml6b250YWwsIHNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbCk7XG4gICAgICB0aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWwgPSByZXN1bHRPbkhvcml6b250YWwuY29tcG9uZW50cztcbiAgICAgIHRoaXMuZml4ZWRDb21wb25lbnRzT25Ib3Jpem9udGFsID0gcmVzdWx0T25Ib3Jpem9udGFsLmlzRml4ZWQ7XG4gICAgICB2YXIgcmVzdWx0T25WZXJ0aWNhbCA9IGNvbnN0cnVjdENvbXBvbmVudHMoc3ViR3JhcGhPblZlcnRpY2FsLCBzZWxmLmZpeGVkTm9kZXNPblZlcnRpY2FsKTtcbiAgICAgIHRoaXMuY29tcG9uZW50c09uVmVydGljYWwgPSByZXN1bHRPblZlcnRpY2FsLmNvbXBvbmVudHM7XG4gICAgICB0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWwgPSByZXN1bHRPblZlcnRpY2FsLmlzRml4ZWQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyB1cGRhdGVzIG5vZGUgZGlzcGxhY2VtZW50cyBiYXNlZCBvbiBjb25zdHJhaW50c1xuQ29TRUxheW91dC5wcm90b3R5cGUudXBkYXRlRGlzcGxhY2VtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50KSB7XG4gICAgdGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhKSB7XG4gICAgICB2YXIgZml4ZWROb2RlID0gc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZURhdGEubm9kZUlkKTtcbiAgICAgIGZpeGVkTm9kZS5kaXNwbGFjZW1lbnRYID0gMDtcbiAgICAgIGZpeGVkTm9kZS5kaXNwbGFjZW1lbnRZID0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKSB7XG4gICAgICB2YXIgYWxsVmVydGljYWxBbGlnbm1lbnRzID0gdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxWZXJ0aWNhbEFsaWdubWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRvdGFsRGlzcGxhY2VtZW50WCA9IDA7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWxsVmVydGljYWxBbGlnbm1lbnRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZml4ZWROb2RlU2V0LmhhcyhhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV1bal0pKSB7XG4gICAgICAgICAgICB0b3RhbERpc3BsYWNlbWVudFggPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvdGFsRGlzcGxhY2VtZW50WCArPSB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV1bal0pLmRpc3BsYWNlbWVudFg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGF2ZXJhZ2VEaXNwbGFjZW1lbnRYID0gdG90YWxEaXNwbGFjZW1lbnRYIC8gYWxsVmVydGljYWxBbGlnbm1lbnRzW2ldLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxWZXJ0aWNhbEFsaWdubWVudHNbaV1bal0pLmRpc3BsYWNlbWVudFggPSBhdmVyYWdlRGlzcGxhY2VtZW50WDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpIHtcbiAgICAgIHZhciBhbGxIb3Jpem9udGFsQWxpZ25tZW50cyA9IHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxIb3Jpem9udGFsQWxpZ25tZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdG90YWxEaXNwbGFjZW1lbnRZID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmICh0aGlzLmZpeGVkTm9kZVNldC5oYXMoYWxsSG9yaXpvbnRhbEFsaWdubWVudHNbaV1bal0pKSB7XG4gICAgICAgICAgICB0b3RhbERpc3BsYWNlbWVudFkgPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvdGFsRGlzcGxhY2VtZW50WSArPSB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXVtqXSkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYXZlcmFnZURpc3BsYWNlbWVudFkgPSB0b3RhbERpc3BsYWNlbWVudFkgLyBhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXS5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWxsSG9yaXpvbnRhbEFsaWdubWVudHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChhbGxIb3Jpem9udGFsQWxpZ25tZW50c1tpXVtqXSkuZGlzcGxhY2VtZW50WSA9IGF2ZXJhZ2VEaXNwbGFjZW1lbnRZO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG5cbiAgICBpZiAoQ29TRUNvbnN0YW50cy5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUykge1xuICAgICAgLy8gc2h1ZmZsZSBhcnJheSB0byByYW5kb21pemUgbm9kZSBwcm9jZXNzaW5nIG9yZGVyXG4gICAgICBpZiAodGhpcy50b3RhbEl0ZXJhdGlvbnMgJSAxMCA9PSAwKSB7XG4gICAgICAgIHRoaXMuc2h1ZmZsZSh0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwpO1xuICAgICAgICB0aGlzLnNodWZmbGUodGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgaWYgKCFzZWxmLmZpeGVkTm9kZXNPbkhvcml6b250YWwuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICB2YXIgZGlzcGxhY2VtZW50ID0gMDtcbiAgICAgICAgICBpZiAoc2VsZi5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSBzZWxmLmlkVG9Ob2RlTWFwLmdldChzZWxmLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KG5vZGVJZClbMF0pLmRpc3BsYWNlbWVudFg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9IHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChub2RlSWQpLmZvckVhY2goZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgICAgIGlmIChjb25zdHJhaW50LnJpZ2h0KSB7XG4gICAgICAgICAgICAgIHZhciBkaWZmID0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChjb25zdHJhaW50LnJpZ2h0KSAtIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQobm9kZUlkKSAtIGRpc3BsYWNlbWVudDtcbiAgICAgICAgICAgICAgaWYgKGRpZmYgPCBjb25zdHJhaW50LmdhcCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYWNlbWVudCAtPSBjb25zdHJhaW50LmdhcCAtIGRpZmY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBkaWZmID0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChub2RlSWQpIC0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChjb25zdHJhaW50LmxlZnQpICsgZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICBpZiAoZGlmZiA8IGNvbnN0cmFpbnQuZ2FwKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50ICs9IGNvbnN0cmFpbnQuZ2FwIC0gZGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQobm9kZUlkLCBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuZ2V0KG5vZGVJZCkgKyBkaXNwbGFjZW1lbnQpO1xuICAgICAgICAgIGlmIChzZWxmLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgIHNlbGYuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRYID0gZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WCA9IGRpc3BsYWNlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICBpZiAoIXNlbGYuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMobm9kZUlkKSkge1xuICAgICAgICAgIHZhciBkaXNwbGFjZW1lbnQgPSAwO1xuICAgICAgICAgIGlmIChzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMobm9kZUlkKSkge1xuICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gc2VsZi5pZFRvTm9kZU1hcC5nZXQoc2VsZi5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5vZGVJZClbMF0pLmRpc3BsYWNlbWVudFk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9IHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgdmFyIGRpZmYgPSBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChjb25zdHJhaW50LmJvdHRvbSkgLSBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChub2RlSWQpIC0gZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICBpZiAoZGlmZiA8IGNvbnN0cmFpbnQuZ2FwKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50IC09IGNvbnN0cmFpbnQuZ2FwIC0gZGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGRpZmYgPSBzZWxmLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChub2RlSWQpIC0gc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoY29uc3RyYWludC50b3ApICsgZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICBpZiAoZGlmZiA8IGNvbnN0cmFpbnQuZ2FwKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50ICs9IGNvbnN0cmFpbnQuZ2FwIC0gZGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlbGYubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KG5vZGVJZCwgc2VsZi5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQobm9kZUlkKSArIGRpc3BsYWNlbWVudCk7XG4gICAgICAgICAgaWYgKHNlbGYuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICBzZWxmLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRZID0gZGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WSA9IGRpc3BsYWNlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsW2ldO1xuICAgICAgICBpZiAodGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWxbaV0pIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbXBvbmVudC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoY29tcG9uZW50W2pdKSkge1xuICAgICAgICAgICAgICB0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGNvbXBvbmVudFtqXSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRYID0gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChjb21wb25lbnRbal0pLmRpc3BsYWNlbWVudFggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb21wb25lbnRbal0pKSB7XG4gICAgICAgICAgICAgIHZhciBhY3R1YWxOb2RlcyA9IHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29tcG9uZW50W2pdKTtcbiAgICAgICAgICAgICAgc3VtICs9IGFjdHVhbE5vZGVzLmxlbmd0aCAqIHRoaXMuaWRUb05vZGVNYXAuZ2V0KGFjdHVhbE5vZGVzWzBdKS5kaXNwbGFjZW1lbnRYO1xuICAgICAgICAgICAgICBjb3VudCArPSBhY3R1YWxOb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdW0gKz0gdGhpcy5pZFRvTm9kZU1hcC5nZXQoY29tcG9uZW50W2pdKS5kaXNwbGFjZW1lbnRYO1xuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYXZlcmFnZURpc3BsYWNlbWVudCA9IHN1bSAvIGNvdW50O1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyhjb21wb25lbnRbal0pKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY29tcG9uZW50W2pdKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlkVG9Ob2RlTWFwLmdldChub2RlSWQpLmRpc3BsYWNlbWVudFggPSBhdmVyYWdlRGlzcGxhY2VtZW50O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaWRUb05vZGVNYXAuZ2V0KGNvbXBvbmVudFtqXSkuZGlzcGxhY2VtZW50WCA9IGF2ZXJhZ2VEaXNwbGFjZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbFtpXTtcbiAgICAgICAgaWYgKHRoaXMuZml4ZWRDb21wb25lbnRzT25WZXJ0aWNhbFtpXSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbXBvbmVudFtqXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNvbXBvbmVudFtqXSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pZFRvTm9kZU1hcC5nZXQobm9kZUlkKS5kaXNwbGFjZW1lbnRZID0gMDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlkVG9Ob2RlTWFwLmdldChjb21wb25lbnRbal0pLmRpc3BsYWNlbWVudFkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3VtID0gMDtcbiAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKGNvbXBvbmVudFtqXSkpIHtcbiAgICAgICAgICAgICAgdmFyIGFjdHVhbE5vZGVzID0gdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNvbXBvbmVudFtqXSk7XG4gICAgICAgICAgICAgIHN1bSArPSBhY3R1YWxOb2Rlcy5sZW5ndGggKiB0aGlzLmlkVG9Ob2RlTWFwLmdldChhY3R1YWxOb2Rlc1swXSkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgICAgICAgY291bnQgKz0gYWN0dWFsTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3VtICs9IHRoaXMuaWRUb05vZGVNYXAuZ2V0KGNvbXBvbmVudFtqXSkuZGlzcGxhY2VtZW50WTtcbiAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGF2ZXJhZ2VEaXNwbGFjZW1lbnQgPSBzdW0gLyBjb3VudDtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbXBvbmVudC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50Lmhhcyhjb21wb25lbnRbal0pKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChjb21wb25lbnRbal0pLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaWRUb05vZGVNYXAuZ2V0KG5vZGVJZCkuZGlzcGxhY2VtZW50WSA9IGF2ZXJhZ2VEaXNwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pZFRvTm9kZU1hcC5nZXQoY29tcG9uZW50W2pdKS5kaXNwbGFjZW1lbnRZID0gYXZlcmFnZURpc3BsYWNlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlTGlzdCA9IFtdO1xuICB2YXIgZ3JhcGg7XG5cbiAgdmFyIGdyYXBocyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBocygpO1xuICB2YXIgc2l6ZSA9IGdyYXBocy5sZW5ndGg7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgZ3JhcGggPSBncmFwaHNbaV07XG5cbiAgICBncmFwaC51cGRhdGVDb25uZWN0ZWQoKTtcblxuICAgIGlmICghZ3JhcGguaXNDb25uZWN0ZWQpIHtcbiAgICAgIG5vZGVMaXN0ID0gbm9kZUxpc3QuY29uY2F0KGdyYXBoLmdldE5vZGVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlTGlzdDtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlZGdlcyA9IFtdO1xuICBlZGdlcyA9IGVkZ2VzLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuXG4gICAgaWYgKCF2aXNpdGVkLmhhcyhlZGdlKSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVkZ2UuZ2V0U291cmNlKCk7XG4gICAgICB2YXIgdGFyZ2V0ID0gZWRnZS5nZXRUYXJnZXQoKTtcblxuICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpIHtcbiAgICAgICAgZWRnZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgUG9pbnREKCkpO1xuICAgICAgICBlZGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBQb2ludEQoKSk7XG4gICAgICAgIHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoZWRnZSk7XG4gICAgICAgIHZpc2l0ZWQuYWRkKGVkZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVkZ2VMaXN0ID0gW107XG5cbiAgICAgICAgZWRnZUxpc3QgPSBlZGdlTGlzdC5jb25jYXQoc291cmNlLmdldEVkZ2VMaXN0VG9Ob2RlKHRhcmdldCkpO1xuICAgICAgICBlZGdlTGlzdCA9IGVkZ2VMaXN0LmNvbmNhdCh0YXJnZXQuZ2V0RWRnZUxpc3RUb05vZGUoc291cmNlKSk7XG5cbiAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhlZGdlTGlzdFswXSkpIHtcbiAgICAgICAgICBpZiAoZWRnZUxpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgZWRnZUxpc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgdmFyIG11bHRpRWRnZSA9IGVkZ2VMaXN0W2tdO1xuICAgICAgICAgICAgICBtdWx0aUVkZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IFBvaW50RCgpKTtcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhtdWx0aUVkZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlZGdlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICB2aXNpdGVkLmFkZChlZGdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2aXNpdGVkLnNpemUgPT0gZWRnZXMubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseSA9IGZ1bmN0aW9uIChmb3Jlc3QpIHtcbiAgLy8gV2UgdGlsZSB0aGUgdHJlZXMgdG8gYSBncmlkIHJvdyBieSByb3c7IGZpcnN0IHRyZWUgc3RhcnRzIGF0ICgwLDApXG4gIHZhciBjdXJyZW50U3RhcnRpbmdQb2ludCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgdmFyIG51bWJlck9mQ29sdW1ucyA9IE1hdGguY2VpbChNYXRoLnNxcnQoZm9yZXN0Lmxlbmd0aCkpO1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGN1cnJlbnRZID0gMDtcbiAgdmFyIGN1cnJlbnRYID0gMDtcbiAgdmFyIHBvaW50ID0gbmV3IFBvaW50RCgwLCAwKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmVzdC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICUgbnVtYmVyT2ZDb2x1bW5zID09IDApIHtcbiAgICAgIC8vIFN0YXJ0IG9mIGEgbmV3IHJvdywgbWFrZSB0aGUgeCBjb29yZGluYXRlIDAsIGluY3JlbWVudCB0aGVcbiAgICAgIC8vIHkgY29vcmRpbmF0ZSB3aXRoIHRoZSBtYXggaGVpZ2h0IG9mIHRoZSBwcmV2aW91cyByb3dcbiAgICAgIGN1cnJlbnRYID0gMDtcbiAgICAgIGN1cnJlbnRZID0gaGVpZ2h0O1xuXG4gICAgICBpZiAoaSAhPSAwKSB7XG4gICAgICAgIGN1cnJlbnRZICs9IENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTjtcbiAgICAgIH1cblxuICAgICAgaGVpZ2h0ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgdHJlZSA9IGZvcmVzdFtpXTtcblxuICAgIC8vIEZpbmQgdGhlIGNlbnRlciBvZiB0aGUgdHJlZVxuICAgIHZhciBjZW50ZXJOb2RlID0gTGF5b3V0LmZpbmRDZW50ZXJPZlRyZWUodHJlZSk7XG5cbiAgICAvLyBTZXQgdGhlIHN0YXJpbmcgcG9pbnQgb2YgdGhlIG5leHQgdHJlZVxuICAgIGN1cnJlbnRTdGFydGluZ1BvaW50LnggPSBjdXJyZW50WDtcbiAgICBjdXJyZW50U3RhcnRpbmdQb2ludC55ID0gY3VycmVudFk7XG5cbiAgICAvLyBEbyBhIHJhZGlhbCBsYXlvdXQgc3RhcnRpbmcgd2l0aCB0aGUgY2VudGVyXG4gICAgcG9pbnQgPSBDb1NFTGF5b3V0LnJhZGlhbExheW91dCh0cmVlLCBjZW50ZXJOb2RlLCBjdXJyZW50U3RhcnRpbmdQb2ludCk7XG5cbiAgICBpZiAocG9pbnQueSA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihwb2ludC55KTtcbiAgICB9XG5cbiAgICBjdXJyZW50WCA9IE1hdGguZmxvb3IocG9pbnQueCArIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTik7XG4gIH1cblxuICB0aGlzLnRyYW5zZm9ybShuZXcgUG9pbnREKExheW91dENvbnN0YW50cy5XT1JMRF9DRU5URVJfWCAtIHBvaW50LnggLyAyLCBMYXlvdXRDb25zdGFudHMuV09STERfQ0VOVEVSX1kgLSBwb2ludC55IC8gMikpO1xufTtcblxuQ29TRUxheW91dC5yYWRpYWxMYXlvdXQgPSBmdW5jdGlvbiAodHJlZSwgY2VudGVyTm9kZSwgc3RhcnRpbmdQb2ludCkge1xuICB2YXIgcmFkaWFsU2VwID0gTWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZSh0cmVlKSwgQ29TRUNvbnN0YW50cy5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTtcbiAgQ29TRUxheW91dC5icmFuY2hSYWRpYWxMYXlvdXQoY2VudGVyTm9kZSwgbnVsbCwgMCwgMzU5LCAwLCByYWRpYWxTZXApO1xuICB2YXIgYm91bmRzID0gTEdyYXBoLmNhbGN1bGF0ZUJvdW5kcyh0cmVlKTtcblxuICB2YXIgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSgpO1xuICB0cmFuc2Zvcm0uc2V0RGV2aWNlT3JnWChib3VuZHMuZ2V0TWluWCgpKTtcbiAgdHJhbnNmb3JtLnNldERldmljZU9yZ1koYm91bmRzLmdldE1pblkoKSk7XG4gIHRyYW5zZm9ybS5zZXRXb3JsZE9yZ1goc3RhcnRpbmdQb2ludC54KTtcbiAgdHJhbnNmb3JtLnNldFdvcmxkT3JnWShzdGFydGluZ1BvaW50LnkpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gdHJlZVtpXTtcbiAgICBub2RlLnRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICB9XG5cbiAgdmFyIGJvdHRvbVJpZ2h0ID0gbmV3IFBvaW50RChib3VuZHMuZ2V0TWF4WCgpLCBib3VuZHMuZ2V0TWF4WSgpKTtcblxuICByZXR1cm4gdHJhbnNmb3JtLmludmVyc2VUcmFuc2Zvcm1Qb2ludChib3R0b21SaWdodCk7XG59O1xuXG5Db1NFTGF5b3V0LmJyYW5jaFJhZGlhbExheW91dCA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRPZk5vZGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBkaXN0YW5jZSwgcmFkaWFsU2VwYXJhdGlvbikge1xuICAvLyBGaXJzdCwgcG9zaXRpb24gdGhpcyBub2RlIGJ5IGZpbmRpbmcgaXRzIGFuZ2xlLlxuICB2YXIgaGFsZkludGVydmFsID0gKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSArIDEpIC8gMjtcblxuICBpZiAoaGFsZkludGVydmFsIDwgMCkge1xuICAgIGhhbGZJbnRlcnZhbCArPSAxODA7XG4gIH1cblxuICB2YXIgbm9kZUFuZ2xlID0gKGhhbGZJbnRlcnZhbCArIHN0YXJ0QW5nbGUpICUgMzYwO1xuICB2YXIgdGV0YSA9IG5vZGVBbmdsZSAqIElHZW9tZXRyeS5UV09fUEkgLyAzNjA7XG5cbiAgLy8gTWFrZSBwb2xhciB0byBqYXZhIGNvcmRpbmF0ZSBjb252ZXJzaW9uLlxuICB2YXIgY29zX3RldGEgPSBNYXRoLmNvcyh0ZXRhKTtcbiAgdmFyIHhfID0gZGlzdGFuY2UgKiBNYXRoLmNvcyh0ZXRhKTtcbiAgdmFyIHlfID0gZGlzdGFuY2UgKiBNYXRoLnNpbih0ZXRhKTtcblxuICBub2RlLnNldENlbnRlcih4XywgeV8pO1xuXG4gIC8vIFRyYXZlcnNlIGFsbCBuZWlnaGJvcnMgb2YgdGhpcyBub2RlIGFuZCByZWN1cnNpdmVseSBjYWxsIHRoaXNcbiAgLy8gZnVuY3Rpb24uXG4gIHZhciBuZWlnaGJvckVkZ2VzID0gW107XG4gIG5laWdoYm9yRWRnZXMgPSBuZWlnaGJvckVkZ2VzLmNvbmNhdChub2RlLmdldEVkZ2VzKCkpO1xuICB2YXIgY2hpbGRDb3VudCA9IG5laWdoYm9yRWRnZXMubGVuZ3RoO1xuXG4gIGlmIChwYXJlbnRPZk5vZGUgIT0gbnVsbCkge1xuICAgIGNoaWxkQ291bnQtLTtcbiAgfVxuXG4gIHZhciBicmFuY2hDb3VudCA9IDA7XG5cbiAgdmFyIGluY0VkZ2VzQ291bnQgPSBuZWlnaGJvckVkZ2VzLmxlbmd0aDtcbiAgdmFyIHN0YXJ0SW5kZXg7XG5cbiAgdmFyIGVkZ2VzID0gbm9kZS5nZXRFZGdlc0JldHdlZW4ocGFyZW50T2ZOb2RlKTtcblxuICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWRnZXMsIHBydW5lIHRoZW0gdW50aWwgdGhlcmUgcmVtYWlucyBvbmx5IG9uZVxuICAvLyBlZGdlLlxuICB3aGlsZSAoZWRnZXMubGVuZ3RoID4gMSkge1xuICAgIC8vbmVpZ2hib3JFZGdlcy5yZW1vdmUoZWRnZXMucmVtb3ZlKDApKTtcbiAgICB2YXIgdGVtcCA9IGVkZ2VzWzBdO1xuICAgIGVkZ2VzLnNwbGljZSgwLCAxKTtcbiAgICB2YXIgaW5kZXggPSBuZWlnaGJvckVkZ2VzLmluZGV4T2YodGVtcCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIG5laWdoYm9yRWRnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaW5jRWRnZXNDb3VudC0tO1xuICAgIGNoaWxkQ291bnQtLTtcbiAgfVxuXG4gIGlmIChwYXJlbnRPZk5vZGUgIT0gbnVsbCkge1xuICAgIC8vYXNzZXJ0IGVkZ2VzLmxlbmd0aCA9PSAxO1xuICAgIHN0YXJ0SW5kZXggPSAobmVpZ2hib3JFZGdlcy5pbmRleE9mKGVkZ2VzWzBdKSArIDEpICUgaW5jRWRnZXNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBzdGFydEluZGV4ID0gMDtcbiAgfVxuXG4gIHZhciBzdGVwQW5nbGUgPSBNYXRoLmFicyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC8gY2hpbGRDb3VudDtcblxuICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgYnJhbmNoQ291bnQgIT0gY2hpbGRDb3VudDsgaSA9ICsraSAlIGluY0VkZ2VzQ291bnQpIHtcbiAgICB2YXIgY3VycmVudE5laWdoYm9yID0gbmVpZ2hib3JFZGdlc1tpXS5nZXRPdGhlckVuZChub2RlKTtcblxuICAgIC8vIERvbid0IGJhY2sgdHJhdmVyc2UgdG8gcm9vdCBub2RlIGluIGN1cnJlbnQgdHJlZS5cbiAgICBpZiAoY3VycmVudE5laWdoYm9yID09IHBhcmVudE9mTm9kZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkU3RhcnRBbmdsZSA9IChzdGFydEFuZ2xlICsgYnJhbmNoQ291bnQgKiBzdGVwQW5nbGUpICUgMzYwO1xuICAgIHZhciBjaGlsZEVuZEFuZ2xlID0gKGNoaWxkU3RhcnRBbmdsZSArIHN0ZXBBbmdsZSkgJSAzNjA7XG5cbiAgICBDb1NFTGF5b3V0LmJyYW5jaFJhZGlhbExheW91dChjdXJyZW50TmVpZ2hib3IsIG5vZGUsIGNoaWxkU3RhcnRBbmdsZSwgY2hpbGRFbmRBbmdsZSwgZGlzdGFuY2UgKyByYWRpYWxTZXBhcmF0aW9uLCByYWRpYWxTZXBhcmF0aW9uKTtcblxuICAgIGJyYW5jaENvdW50Kys7XG4gIH1cbn07XG5cbkNvU0VMYXlvdXQubWF4RGlhZ29uYWxJblRyZWUgPSBmdW5jdGlvbiAodHJlZSkge1xuICB2YXIgbWF4RGlhZ29uYWwgPSBJbnRlZ2VyLk1JTl9WQUxVRTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IHRyZWVbaV07XG4gICAgdmFyIGRpYWdvbmFsID0gbm9kZS5nZXREaWFnb25hbCgpO1xuXG4gICAgaWYgKGRpYWdvbmFsID4gbWF4RGlhZ29uYWwpIHtcbiAgICAgIG1heERpYWdvbmFsID0gZGlhZ29uYWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heERpYWdvbmFsO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICAvLyBmb3JtdWxhIGlzIDIgeCAobGV2ZWwgKyAxKSB4IGlkZWFsRWRnZUxlbmd0aFxuICByZXR1cm4gMiAqICh0aGlzLmxldmVsICsgMSkgKiB0aGlzLmlkZWFsRWRnZUxlbmd0aDtcbn07XG5cbi8vIFRpbGluZyBtZXRob2RzXG5cbi8vIEdyb3VwIHplcm8gZGVncmVlIG1lbWJlcnMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHRvIGJlIHRpbGVkLCBjcmVhdGUgZHVtbXkgcGFyZW50cyB3aGVyZSBuZWVkZWQgYW5kIGZpbGwgbWVtYmVyR3JvdXBzIGJ5IHRoZWlyIGR1bW1wIHBhcmVudCBpZCdzXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIC8vIGFycmF5IG9mIFtwYXJlbnRfaWQgeCBvbmVEZWdyZWVOb2RlX2lkXVxuICB2YXIgdGVtcE1lbWJlckdyb3VwcyA9IHt9OyAvLyBBIHRlbXBvcmFyeSBtYXAgb2YgcGFyZW50IG5vZGUgYW5kIGl0cyB6ZXJvIGRlZ3JlZSBtZW1iZXJzXG4gIHRoaXMubWVtYmVyR3JvdXBzID0ge307IC8vIEEgbWFwIG9mIGR1bW15IHBhcmVudCBub2RlIGFuZCBpdHMgemVybyBkZWdyZWUgbWVtYmVycyB3aG9zZSBwYXJlbnRzIGFyZSBub3QgdG8gYmUgdGlsZWRcbiAgdGhpcy5pZFRvRHVtbXlOb2RlID0ge307IC8vIEEgbWFwIG9mIGlkIHRvIGR1bW15IG5vZGUgXG5cbiAgdmFyIHplcm9EZWdyZWUgPSBbXTsgLy8gTGlzdCBvZiB6ZXJvIGRlZ3JlZSBub2RlcyB3aG9zZSBwYXJlbnRzIGFyZSBub3QgdG8gYmUgdGlsZWRcbiAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcblxuICAvLyBGaWxsIHplcm8gZGVncmVlIGxpc3RcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgdmFyIHBhcmVudCA9IG5vZGUuZ2V0UGFyZW50KCk7XG4gICAgLy8gSWYgYSBub2RlIGhhcyB6ZXJvIGRlZ3JlZSBhbmQgaXRzIHBhcmVudCBpcyBub3QgdG8gYmUgdGlsZWQgaWYgZXhpc3RzIGFkZCB0aGF0IG5vZGUgdG8gemVyb0RlZ3JlcyBsaXN0XG4gICAgaWYgKHRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihub2RlKSA9PT0gMCAmJiAocGFyZW50LmlkID09IHVuZGVmaW5lZCB8fCAhdGhpcy5nZXRUb0JlVGlsZWQocGFyZW50KSkpIHtcbiAgICAgIHplcm9EZWdyZWUucHVzaChub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgYSBtYXAgb2YgcGFyZW50IG5vZGUgYW5kIGl0cyB6ZXJvIGRlZ3JlZSBtZW1iZXJzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgemVyb0RlZ3JlZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gemVyb0RlZ3JlZVtpXTsgLy8gWmVybyBkZWdyZWUgbm9kZSBpdHNlbGZcbiAgICB2YXIgcF9pZCA9IG5vZGUuZ2V0UGFyZW50KCkuaWQ7IC8vIFBhcmVudCBpZFxuXG4gICAgaWYgKHR5cGVvZiB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdID09PSBcInVuZGVmaW5lZFwiKSB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdID0gW107XG5cbiAgICB0ZW1wTWVtYmVyR3JvdXBzW3BfaWRdID0gdGVtcE1lbWJlckdyb3Vwc1twX2lkXS5jb25jYXQobm9kZSk7IC8vIFB1c2ggbm9kZSB0byB0aGUgbGlzdCBiZWxvbmdzIHRvIGl0cyBwYXJlbnQgaW4gdGVtcE1lbWJlckdyb3Vwc1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBub2RlcyBhdCBhIGxldmVsLCBjcmVhdGUgYSBkdW1teSBjb21wb3VuZCBmb3IgdGhlbVxuICBPYmplY3Qua2V5cyh0ZW1wTWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uIChwX2lkKSB7XG4gICAgaWYgKHRlbXBNZW1iZXJHcm91cHNbcF9pZF0ubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGR1bW15Q29tcG91bmRJZCA9IFwiRHVtbXlDb21wb3VuZF9cIiArIHBfaWQ7IC8vIFRoZSBpZCBvZiBkdW1teSBjb21wb3VuZCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgc29vblxuICAgICAgc2VsZi5tZW1iZXJHcm91cHNbZHVtbXlDb21wb3VuZElkXSA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF07IC8vIEFkZCBkdW1teSBjb21wb3VuZCB0byBtZW1iZXJHcm91cHNcblxuICAgICAgdmFyIHBhcmVudCA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF1bMF0uZ2V0UGFyZW50KCk7IC8vIFRoZSBwYXJlbnQgb2YgemVybyBkZWdyZWUgbm9kZXMgd2lsbCBiZSB0aGUgcGFyZW50IG9mIG5ldyBkdW1teSBjb21wb3VuZFxuXG4gICAgICAvLyBDcmVhdGUgYSBkdW1teSBjb21wb3VuZCB3aXRoIGNhbGN1bGF0ZWQgaWRcbiAgICAgIHZhciBkdW1teUNvbXBvdW5kID0gbmV3IENvU0VOb2RlKHNlbGYuZ3JhcGhNYW5hZ2VyKTtcbiAgICAgIGR1bW15Q29tcG91bmQuaWQgPSBkdW1teUNvbXBvdW5kSWQ7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdMZWZ0ID0gcGFyZW50LnBhZGRpbmdMZWZ0IHx8IDA7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdSaWdodCA9IHBhcmVudC5wYWRkaW5nUmlnaHQgfHwgMDtcbiAgICAgIGR1bW15Q29tcG91bmQucGFkZGluZ0JvdHRvbSA9IHBhcmVudC5wYWRkaW5nQm90dG9tIHx8IDA7XG4gICAgICBkdW1teUNvbXBvdW5kLnBhZGRpbmdUb3AgPSBwYXJlbnQucGFkZGluZ1RvcCB8fCAwO1xuXG4gICAgICBzZWxmLmlkVG9EdW1teU5vZGVbZHVtbXlDb21wb3VuZElkXSA9IGR1bW15Q29tcG91bmQ7XG5cbiAgICAgIHZhciBkdW1teVBhcmVudEdyYXBoID0gc2VsZi5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoc2VsZi5uZXdHcmFwaCgpLCBkdW1teUNvbXBvdW5kKTtcbiAgICAgIHZhciBwYXJlbnRHcmFwaCA9IHBhcmVudC5nZXRDaGlsZCgpO1xuXG4gICAgICAvLyBBZGQgZHVtbXkgY29tcG91bmQgdG8gcGFyZW50IHRoZSBncmFwaFxuICAgICAgcGFyZW50R3JhcGguYWRkKGR1bW15Q29tcG91bmQpO1xuXG4gICAgICAvLyBGb3IgZWFjaCB6ZXJvIGRlZ3JlZSBub2RlIGluIHRoaXMgbGV2ZWwgcmVtb3ZlIGl0IGZyb20gaXRzIHBhcmVudCBncmFwaCBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaCBvZiBkdW1teSBwYXJlbnRcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVtcE1lbWJlckdyb3Vwc1twX2lkXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IHRlbXBNZW1iZXJHcm91cHNbcF9pZF1baV07XG5cbiAgICAgICAgcGFyZW50R3JhcGgucmVtb3ZlKG5vZGUpO1xuICAgICAgICBkdW1teVBhcmVudEdyYXBoLmFkZChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaGlsZEdyYXBoTWFwID0ge307XG4gIHZhciBpZFRvTm9kZSA9IHt9O1xuXG4gIC8vIEdldCBjb21wb3VuZCBvcmRlcmluZyBieSBmaW5kaW5nIHRoZSBpbm5lciBvbmUgZmlyc3RcbiAgdGhpcy5wZXJmb3JtREZTT25Db21wb3VuZHMoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcG91bmRPcmRlci5sZW5ndGg7IGkrKykge1xuXG4gICAgaWRUb05vZGVbdGhpcy5jb21wb3VuZE9yZGVyW2ldLmlkXSA9IHRoaXMuY29tcG91bmRPcmRlcltpXTtcbiAgICBjaGlsZEdyYXBoTWFwW3RoaXMuY29tcG91bmRPcmRlcltpXS5pZF0gPSBbXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW2ldLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSk7XG5cbiAgICAvLyBSZW1vdmUgY2hpbGRyZW4gb2YgY29tcG91bmRzXG4gICAgdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltpXS5nZXRDaGlsZCgpKTtcbiAgICB0aGlzLmNvbXBvdW5kT3JkZXJbaV0uY2hpbGQgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpO1xuXG4gIC8vIFRpbGUgdGhlIHJlbW92ZWQgY2hpbGRyZW5cbiAgdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKGNoaWxkR3JhcGhNYXAsIGlkVG9Ob2RlKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRpbGVkWmVyb0RlZ3JlZVBhY2sgPSB0aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2sgPSBbXTtcblxuICBPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgY29tcG91bmROb2RlID0gc2VsZi5pZFRvRHVtbXlOb2RlW2lkXTsgLy8gR2V0IHRoZSBkdW1teSBjb21wb3VuZFxuXG4gICAgdGlsZWRaZXJvRGVncmVlUGFja1tpZF0gPSBzZWxmLnRpbGVOb2RlcyhzZWxmLm1lbWJlckdyb3Vwc1tpZF0sIGNvbXBvdW5kTm9kZS5wYWRkaW5nTGVmdCArIGNvbXBvdW5kTm9kZS5wYWRkaW5nUmlnaHQpO1xuXG4gICAgLy8gU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBkdW1teSBjb21wb3VuZCBhcyBjYWxjdWxhdGVkXG4gICAgY29tcG91bmROb2RlLnJlY3Qud2lkdGggPSB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS53aWR0aDtcbiAgICBjb21wb3VuZE5vZGUucmVjdC5oZWlnaHQgPSB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS5oZWlnaHQ7XG4gICAgY29tcG91bmROb2RlLnNldENlbnRlcih0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS5jZW50ZXJYLCB0aWxlZFplcm9EZWdyZWVQYWNrW2lkXS5jZW50ZXJZKTtcblxuICAgIC8vIGNvbXBvdW5kIGxlZnQgYW5kIHRvcCBtYXJnaW5ncyBmb3IgbGFiZWxzXG4gICAgLy8gd2hlbiBub2RlIGxhYmVscyBhcmUgaW5jbHVkZWQsIHRoZXNlIHZhbHVlcyBtYXkgYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYmVsb3cgYW5kIGFyZSB1c2VkIGluIHRpbGluZ1Bvc3RMYXlvdXQsXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgc3RheSBhcyB6ZXJvXG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luTGVmdCA9IDA7XG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luVG9wID0gMDtcblxuICAgIC8vIFVwZGF0ZSBjb21wb3VuZCBib3VuZHMgY29uc2lkZXJpbmcgaXRzIGxhYmVsIHByb3BlcnRpZXMgYW5kIHNldCBsYWJlbCBtYXJnaW5zIGZvciBsZWZ0IGFuZCB0b3BcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpIHtcblxuICAgICAgdmFyIHdpZHRoID0gY29tcG91bmROb2RlLnJlY3Qud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0O1xuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsV2lkdGgpIHtcbiAgICAgICAgaWYgKGNvbXBvdW5kTm9kZS5sYWJlbFBvc0hvcml6b250YWwgPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gY29tcG91bmROb2RlLmxhYmVsV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IChjb21wb3VuZE5vZGUubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldFdpZHRoKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcInRvcFwiKSB7XG4gICAgICAgICAgY29tcG91bmROb2RlLnJlY3QueSAtPSBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQ7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldEhlaWdodChoZWlnaHQgKyBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQpO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5sYWJlbE1hcmdpblRvcCA9IGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5yZWN0LnkgLT0gKGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5Ub3AgPSAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zVmVydGljYWwgPT0gXCJib3R0b21cIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoaGVpZ2h0ICsgY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gdGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxDb21wb3VuZE5vZGUgPSB0aGlzLmNvbXBvdW5kT3JkZXJbaV07XG4gICAgdmFyIGlkID0gbENvbXBvdW5kTm9kZS5pZDtcbiAgICB2YXIgaG9yaXpvbnRhbE1hcmdpbiA9IGxDb21wb3VuZE5vZGUucGFkZGluZ0xlZnQ7XG4gICAgdmFyIHZlcnRpY2FsTWFyZ2luID0gbENvbXBvdW5kTm9kZS5wYWRkaW5nVG9wO1xuICAgIHZhciBsYWJlbE1hcmdpbkxlZnQgPSBsQ29tcG91bmROb2RlLmxhYmVsTWFyZ2luTGVmdDtcbiAgICB2YXIgbGFiZWxNYXJnaW5Ub3AgPSBsQ29tcG91bmROb2RlLmxhYmVsTWFyZ2luVG9wO1xuXG4gICAgdGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbaWRdLCBsQ29tcG91bmROb2RlLnJlY3QueCwgbENvbXBvdW5kTm9kZS5yZWN0LnksIGhvcml6b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luLCBsYWJlbE1hcmdpbkxlZnQsIGxhYmVsTWFyZ2luVG9wKTtcbiAgfVxufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciB0aWxlZFBhY2sgPSB0aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s7XG5cbiAgT2JqZWN0LmtleXModGlsZWRQYWNrKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBjb21wb3VuZE5vZGUgPSBzZWxmLmlkVG9EdW1teU5vZGVbaWRdOyAvLyBHZXQgdGhlIGR1bW15IGNvbXBvdW5kIGJ5IGl0cyBpZFxuICAgIHZhciBob3Jpem9udGFsTWFyZ2luID0gY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0O1xuICAgIHZhciB2ZXJ0aWNhbE1hcmdpbiA9IGNvbXBvdW5kTm9kZS5wYWRkaW5nVG9wO1xuICAgIHZhciBsYWJlbE1hcmdpbkxlZnQgPSBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0O1xuICAgIHZhciBsYWJlbE1hcmdpblRvcCA9IGNvbXBvdW5kTm9kZS5sYWJlbE1hcmdpblRvcDtcblxuICAgIC8vIEFkanVzdCB0aGUgcG9zaXRpb25zIG9mIG5vZGVzIHdydCBpdHMgY29tcG91bmRcbiAgICBzZWxmLmFkanVzdExvY2F0aW9ucyh0aWxlZFBhY2tbaWRdLCBjb21wb3VuZE5vZGUucmVjdC54LCBjb21wb3VuZE5vZGUucmVjdC55LCBob3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbiwgbGFiZWxNYXJnaW5MZWZ0LCBsYWJlbE1hcmdpblRvcCk7XG4gIH0pO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0VG9CZVRpbGVkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGlkID0gbm9kZS5pZDtcbiAgLy9maXJzdGx5IGNoZWNrIHRoZSBwcmV2aW91cyByZXN1bHRzXG4gIGlmICh0aGlzLnRvQmVUaWxlZFtpZF0gIT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLnRvQmVUaWxlZFtpZF07XG4gIH1cblxuICAvL29ubHkgY29tcG91bmQgbm9kZXMgYXJlIHRvIGJlIHRpbGVkXG4gIHZhciBjaGlsZEdyYXBoID0gbm9kZS5nZXRDaGlsZCgpO1xuICBpZiAoY2hpbGRHcmFwaCA9PSBudWxsKSB7XG4gICAgdGhpcy50b0JlVGlsZWRbaWRdID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gY2hpbGRHcmFwaC5nZXROb2RlcygpOyAvLyBHZXQgdGhlIGNoaWxkcmVuIG5vZGVzXG5cbiAgLy9hIGNvbXBvdW5kIG5vZGUgaXMgbm90IHRvIGJlIHRpbGVkIGlmIGFsbCBvZiBpdHMgY29tcG91bmQgY2hpbGRyZW4gYXJlIG5vdCB0byBiZSB0aWxlZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRoZUNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAodGhpcy5nZXROb2RlRGVncmVlKHRoZUNoaWxkKSA+IDApIHtcbiAgICAgIHRoaXMudG9CZVRpbGVkW2lkXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vcGFzcyB0aGUgY2hpbGRyZW4gbm90IGhhdmluZyB0aGUgY29tcG91bmQgc3RydWN0dXJlXG4gICAgaWYgKHRoZUNoaWxkLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgICAgdGhpcy50b0JlVGlsZWRbdGhlQ2hpbGQuaWRdID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZ2V0VG9CZVRpbGVkKHRoZUNoaWxkKSkge1xuICAgICAgdGhpcy50b0JlVGlsZWRbaWRdID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHRoaXMudG9CZVRpbGVkW2lkXSA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gR2V0IGRlZ3JlZSBvZiBhIG5vZGUgZGVwZW5kaW5nIG9mIGl0cyBlZGdlcyBhbmQgaW5kZXBlbmRlbnQgb2YgaXRzIGNoaWxkcmVuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGlkID0gbm9kZS5pZDtcbiAgdmFyIGVkZ2VzID0gbm9kZS5nZXRFZGdlcygpO1xuICB2YXIgZGVncmVlID0gMDtcblxuICAvLyBGb3IgdGhlIGVkZ2VzIGNvbm5lY3RlZFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICBpZiAoZWRnZS5nZXRTb3VyY2UoKS5pZCAhPT0gZWRnZS5nZXRUYXJnZXQoKS5pZCkge1xuICAgICAgZGVncmVlID0gZGVncmVlICsgMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZ3JlZTtcbn07XG5cbi8vIEdldCBkZWdyZWUgb2YgYSBub2RlIHdpdGggaXRzIGNoaWxkcmVuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGRlZ3JlZSA9IHRoaXMuZ2V0Tm9kZURlZ3JlZShub2RlKTtcbiAgaWYgKG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZ3JlZTtcbiAgfVxuICB2YXIgY2hpbGRyZW4gPSBub2RlLmdldENoaWxkKCkuZ2V0Tm9kZXMoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGRlZ3JlZSArPSB0aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oY2hpbGQpO1xuICB9XG4gIHJldHVybiBkZWdyZWU7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY29tcG91bmRPcmRlciA9IFtdO1xuICB0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKTtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoY2hpbGQuZ2V0Q2hpbGQoKSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKGNoaWxkLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFRvQmVUaWxlZChjaGlsZCkpIHtcbiAgICAgIHRoaXMuY29tcG91bmRPcmRlci5wdXNoKGNoaWxkKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuKiBUaGlzIG1ldGhvZCBwbGFjZXMgZWFjaCB6ZXJvIGRlZ3JlZSBtZW1iZXIgd3J0IGdpdmVuICh4LHkpIGNvb3JkaW5hdGVzICh0b3AgbGVmdCkuXG4qL1xuQ29TRUxheW91dC5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbiwgeCwgeSwgY29tcG91bmRIb3Jpem9udGFsTWFyZ2luLCBjb21wb3VuZFZlcnRpY2FsTWFyZ2luLCBjb21wb3VuZExhYmVsTWFyZ2luTGVmdCwgY29tcG91bmRMYWJlbE1hcmdpblRvcCkge1xuICB4ICs9IGNvbXBvdW5kSG9yaXpvbnRhbE1hcmdpbiArIGNvbXBvdW5kTGFiZWxNYXJnaW5MZWZ0O1xuICB5ICs9IGNvbXBvdW5kVmVydGljYWxNYXJnaW4gKyBjb21wb3VuZExhYmVsTWFyZ2luVG9wO1xuXG4gIHZhciBsZWZ0ID0geDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJvdyA9IG9yZ2FuaXphdGlvbi5yb3dzW2ldO1xuICAgIHggPSBsZWZ0O1xuICAgIHZhciBtYXhIZWlnaHQgPSAwO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBsbm9kZSA9IHJvd1tqXTtcblxuICAgICAgbG5vZGUucmVjdC54ID0geDsgLy8gKyBsbm9kZS5yZWN0LndpZHRoIC8gMjtcbiAgICAgIGxub2RlLnJlY3QueSA9IHk7IC8vICsgbG5vZGUucmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgICB4ICs9IGxub2RlLnJlY3Qud2lkdGggKyBvcmdhbml6YXRpb24uaG9yaXpvbnRhbFBhZGRpbmc7XG5cbiAgICAgIGlmIChsbm9kZS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gbG5vZGUucmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgeSArPSBtYXhIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzID0gZnVuY3Rpb24gKGNoaWxkR3JhcGhNYXAsIGlkVG9Ob2RlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy50aWxlZE1lbWJlclBhY2sgPSBbXTtcblxuICBPYmplY3Qua2V5cyhjaGlsZEdyYXBoTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgIC8vIEdldCB0aGUgY29tcG91bmQgbm9kZVxuICAgIHZhciBjb21wb3VuZE5vZGUgPSBpZFRvTm9kZVtpZF07XG5cbiAgICBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0gPSBzZWxmLnRpbGVOb2RlcyhjaGlsZEdyYXBoTWFwW2lkXSwgY29tcG91bmROb2RlLnBhZGRpbmdMZWZ0ICsgY29tcG91bmROb2RlLnBhZGRpbmdSaWdodCk7XG5cbiAgICBjb21wb3VuZE5vZGUucmVjdC53aWR0aCA9IHNlbGYudGlsZWRNZW1iZXJQYWNrW2lkXS53aWR0aDtcbiAgICBjb21wb3VuZE5vZGUucmVjdC5oZWlnaHQgPSBzZWxmLnRpbGVkTWVtYmVyUGFja1tpZF0uaGVpZ2h0O1xuICAgIGNvbXBvdW5kTm9kZS5zZXRDZW50ZXIoc2VsZi50aWxlZE1lbWJlclBhY2tbaWRdLmNlbnRlclgsIHNlbGYudGlsZWRNZW1iZXJQYWNrW2lkXS5jZW50ZXJZKTtcblxuICAgIC8vIGNvbXBvdW5kIGxlZnQgYW5kIHRvcCBtYXJnaW5ncyBmb3IgbGFiZWxzXG4gICAgLy8gd2hlbiBub2RlIGxhYmVscyBhcmUgaW5jbHVkZWQsIHRoZXNlIHZhbHVlcyBtYXkgYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYmVsb3cgYW5kIGFyZSB1c2VkIGluIHRpbGluZ1Bvc3RMYXlvdXQsXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgc3RheSBhcyB6ZXJvXG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luTGVmdCA9IDA7XG4gICAgY29tcG91bmROb2RlLmxhYmVsTWFyZ2luVG9wID0gMDtcblxuICAgIC8vIFVwZGF0ZSBjb21wb3VuZCBib3VuZHMgY29uc2lkZXJpbmcgaXRzIGxhYmVsIHByb3BlcnRpZXMgYW5kIHNldCBsYWJlbCBtYXJnaW5zIGZvciBsZWZ0IGFuZCB0b3BcbiAgICBpZiAoQ29TRUNvbnN0YW50cy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpIHtcblxuICAgICAgdmFyIHdpZHRoID0gY29tcG91bmROb2RlLnJlY3Qud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gY29tcG91bmROb2RlLnJlY3QuaGVpZ2h0O1xuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsV2lkdGgpIHtcbiAgICAgICAgaWYgKGNvbXBvdW5kTm9kZS5sYWJlbFBvc0hvcml6b250YWwgPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gY29tcG91bmROb2RlLmxhYmVsV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zSG9yaXpvbnRhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgICBjb21wb3VuZE5vZGUucmVjdC54IC09IChjb21wb3VuZE5vZGUubGFiZWxXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldFdpZHRoKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5MZWZ0ID0gKGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRXaWR0aCh3aWR0aCArIGNvbXBvdW5kTm9kZS5sYWJlbFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcInRvcFwiKSB7XG4gICAgICAgICAgY29tcG91bmROb2RlLnJlY3QueSAtPSBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQ7XG4gICAgICAgICAgY29tcG91bmROb2RlLnNldEhlaWdodChoZWlnaHQgKyBjb21wb3VuZE5vZGUubGFiZWxIZWlnaHQpO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5sYWJlbE1hcmdpblRvcCA9IGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb3VuZE5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcImNlbnRlclwiICYmIGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5yZWN0LnkgLT0gKGNvbXBvdW5kTm9kZS5sYWJlbEhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgICBjb21wb3VuZE5vZGUubGFiZWxNYXJnaW5Ub3AgPSAoY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG91bmROb2RlLmxhYmVsUG9zVmVydGljYWwgPT0gXCJib3R0b21cIikge1xuICAgICAgICAgIGNvbXBvdW5kTm9kZS5zZXRIZWlnaHQoaGVpZ2h0ICsgY29tcG91bmROb2RlLmxhYmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxlTm9kZXMgPSBmdW5jdGlvbiAobm9kZXMsIG1pbldpZHRoKSB7XG4gIHZhciBob3Jpem9udGFsT3JnID0gdGhpcy50aWxlTm9kZXNCeUZhdm9yaW5nRGltKG5vZGVzLCBtaW5XaWR0aCwgdHJ1ZSk7XG4gIHZhciB2ZXJ0aWNhbE9yZyA9IHRoaXMudGlsZU5vZGVzQnlGYXZvcmluZ0RpbShub2RlcywgbWluV2lkdGgsIGZhbHNlKTtcblxuICB2YXIgaG9yaXpvbnRhbFJhdGlvID0gdGhpcy5nZXRPcmdSYXRpbyhob3Jpem9udGFsT3JnKTtcbiAgdmFyIHZlcnRpY2FsUmF0aW8gPSB0aGlzLmdldE9yZ1JhdGlvKHZlcnRpY2FsT3JnKTtcbiAgdmFyIGJlc3RPcmc7XG5cbiAgLy8gdGhlIGJlc3QgcmF0aW8gaXMgdGhlIG9uZSB0aGF0IGlzIGNsb3NlciB0byAxIHNpbmNlIHRoZSByYXRpb3MgYXJlIGFscmVhZHkgbm9ybWFsaXplZFxuICAvLyBhbmQgdGhlIGJlc3Qgb3JnYW5pemF0aW9uIGlzIHRoZSBvbmUgdGhhdCBoYXMgdGhlIGJlc3QgcmF0aW9cbiAgaWYgKHZlcnRpY2FsUmF0aW8gPCBob3Jpem9udGFsUmF0aW8pIHtcbiAgICBiZXN0T3JnID0gdmVydGljYWxPcmc7XG4gIH0gZWxzZSB7XG4gICAgYmVzdE9yZyA9IGhvcml6b250YWxPcmc7XG4gIH1cblxuICByZXR1cm4gYmVzdE9yZztcbn07XG5cbi8vIGdldCB0aGUgd2lkdGgvaGVpZ2h0IHJhdGlvIG9mIHRoZSBvcmdhbml6YXRpb24gdGhhdCBpcyBub3JtYWxpemVkIHNvIHRoYXQgaXQgd2lsbCBub3QgYmUgbGVzcyB0aGFuIDFcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldE9yZ1JhdGlvID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICAvLyBnZXQgZGltZW5zaW9ucyBhbmQgY2FsY3VsYXRlIHRoZSBpbml0aWFsIHJhdGlvXG4gIHZhciB3aWR0aCA9IG9yZ2FuaXphdGlvbi53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9yZ2FuaXphdGlvbi5oZWlnaHQ7XG4gIHZhciByYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuXG4gIC8vIGlmIHRoZSBpbml0aWFsIHJhdGlvIGlzIGxlc3MgdGhlbiAxIHRoZW4gaW52ZXJzZSBpdFxuICBpZiAocmF0aW8gPCAxKSB7XG4gICAgcmF0aW8gPSAxIC8gcmF0aW87XG4gIH1cblxuICAvLyByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcmF0aW9cbiAgcmV0dXJuIHJhdGlvO1xufTtcblxuLypcbiAqIENhbGN1bGF0ZXMgdGhlIGlkZWFsIHdpZHRoIGZvciB0aGUgcm93cy4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0XG4gKiBlYWNoIG5vZGUgaGFzIHRoZSBzYW1lIHNpemVzIGFuZCBjYWxjdWxhdGVzIHRoZSBpZGVhbCByb3cgd2lkdGggdGhhdFxuICogYXBwcm94aW1hdGVzIGEgc3F1YXJlIHNoYXBlZCBjb21wbGV4IGFjY29yZGluZ2x5LiBIb3dldmVyLCBzaW5jZSBub2RlcyB3b3VsZFxuICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgc29tZSByb3dzIHdvdWxkIGhhdmUgZGlmZmVyZW50IHNpemVzIGFuZCB0aGUgcmVzdWx0aW5nXG4gKiBzaGFwZSB3b3VsZCBub3QgYmUgYW4gZXhhY3Qgc3F1YXJlLlxuICovXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYWxjSWRlYWxSb3dXaWR0aCA9IGZ1bmN0aW9uIChtZW1iZXJzLCBmYXZvckhvcml6b250YWxEaW0pIHtcbiAgLy8gVG8gYXBwcm94aW1hdGUgYSBzcXVhcmUgc2hhcGVkIGNvbXBsZXggd2UgbmVlZCB0byBtYWtlIGNvbXBsZXggd2lkdGggZXF1YWwgdG8gY29tcGxleCBoZWlnaHQuXG4gIC8vIFRvIGFjaGlldmUgdGhpcyB3ZSBuZWVkIHRvIHNvbHZlIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24gc3lzdGVtIGZvciBoYzpcbiAgLy8gKHggKyBieCkgKiBoYyAtIGJ4ID0gKHkgKyBieSkgKiB2YyAtIGJ5LCBoYyAqIHZjID0gblxuICAvLyB3aGVyZSB4IGlzIHRoZSBhdmFyYWdlIHdpZHRoIG9mIHRoZSBub2RlcywgeSBpcyB0aGUgYXZhcmFnZSBoZWlnaHQgb2Ygbm9kZXNcbiAgLy8gYnggYW5kIGJ5IGFyZSB0aGUgYnVmZmVyIHNpemVzIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpbWVuc2lvbnMgYWNjb3JkaW5nbHksXG4gIC8vIGhjIGFuZCB2YyBhcmUgdGhlIG51bWJlciBvZiByb3dzIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpbWVuc2lvbnNcbiAgLy8gbiBpcyBudW1iZXIgb2YgbWVtYmVycy5cblxuICB2YXIgdmVydGljYWxQYWRkaW5nID0gQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19WRVJUSUNBTDtcbiAgdmFyIGhvcml6b250YWxQYWRkaW5nID0gQ29TRUNvbnN0YW50cy5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMO1xuXG4gIC8vIG51bWJlciBvZiBtZW1iZXJzXG4gIHZhciBtZW1iZXJzU2l6ZSA9IG1lbWJlcnMubGVuZ3RoO1xuXG4gIC8vIHN1bSBvZiB0aGUgd2lkdGggb2YgYWxsIG1lbWJlcnNcbiAgdmFyIHRvdGFsV2lkdGggPSAwO1xuXG4gIC8vIHN1bSBvZiB0aGUgaGVpZ2h0IG9mIGFsbCBtZW1iZXJzXG4gIHZhciB0b3RhbEhlaWdodCA9IDA7XG5cbiAgdmFyIG1heFdpZHRoID0gMDtcblxuICAvLyB0cmF2ZXJzZSBhbGwgbWVtYmVycyB0byBjYWxjdWxhdGUgdG90YWwgd2lkdGggYW5kIHRvdGFsIGhlaWdodCBhbmQgZ2V0IHRoZSBtYXhpbXVtIG1lbWJlcnMgd2lkdGhcbiAgbWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdG90YWxXaWR0aCArPSBub2RlLmdldFdpZHRoKCk7XG4gICAgdG90YWxIZWlnaHQgKz0gbm9kZS5nZXRIZWlnaHQoKTtcblxuICAgIGlmIChub2RlLmdldFdpZHRoKCkgPiBtYXhXaWR0aCkge1xuICAgICAgbWF4V2lkdGggPSBub2RlLmdldFdpZHRoKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdmVyYWdlIHdpZHRoIG9mIHRoZSBtZW1iZXJzXG4gIHZhciBhdmVyYWdlV2lkdGggPSB0b3RhbFdpZHRoIC8gbWVtYmVyc1NpemU7XG5cbiAgLy8gYXZlcmFnZSBoZWlnaHQgb2YgdGhlIG1lbWJlcnNcbiAgdmFyIGF2ZXJhZ2VIZWlnaHQgPSB0b3RhbEhlaWdodCAvIG1lbWJlcnNTaXplO1xuXG4gIC8vIHNvbHZpbmcgdGhlIGluaXRpYWwgZXF1YXRpb24gc3lzdGVtIGZvciB0aGUgaGMgeWllbGRzIHRoZSBmb2xsb3dpbmcgc2Vjb25kIGRlZ3JlZSBlcXVhdGlvbjpcbiAgLy8gaGNeMiAqICh4K2J4KSArIGhjICogKGJ5IC0gYngpIC0gbiAqICh5ICsgYnkpID0gMFxuXG4gIC8vIHRoZSBkZWx0YSB2YWx1ZSB0byBzb2x2ZSB0aGUgZXF1YXRpb24gYWJvdmUgZm9yIGhjXG4gIHZhciBkZWx0YSA9IE1hdGgucG93KHZlcnRpY2FsUGFkZGluZyAtIGhvcml6b250YWxQYWRkaW5nLCAyKSArIDQgKiAoYXZlcmFnZVdpZHRoICsgaG9yaXpvbnRhbFBhZGRpbmcpICogKGF2ZXJhZ2VIZWlnaHQgKyB2ZXJ0aWNhbFBhZGRpbmcpICogbWVtYmVyc1NpemU7XG5cbiAgLy8gc29sdmUgdGhlIGVxdWF0aW9uIHVzaW5nIGRlbHRhIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBjb3VudFxuICAvLyB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhbiBpZGVhbCByb3dcbiAgdmFyIGhvcml6b250YWxDb3VudERvdWJsZSA9IChob3Jpem9udGFsUGFkZGluZyAtIHZlcnRpY2FsUGFkZGluZyArIE1hdGguc3FydChkZWx0YSkpIC8gKDIgKiAoYXZlcmFnZVdpZHRoICsgaG9yaXpvbnRhbFBhZGRpbmcpKTtcbiAgLy8gcm91bmQgdGhlIGNhbGN1bGF0ZWQgaG9yaXpvbnRhbCBjb3VudCB1cCBvciBkb3duIGFjY29yZGluZyB0byB0aGUgZmF2b3JlZCBkaW1lbnNpb25cbiAgdmFyIGhvcml6b250YWxDb3VudDtcblxuICBpZiAoZmF2b3JIb3Jpem9udGFsRGltKSB7XG4gICAgaG9yaXpvbnRhbENvdW50ID0gTWF0aC5jZWlsKGhvcml6b250YWxDb3VudERvdWJsZSk7XG4gICAgLy8gaWYgaG9yaXpvbnRhbENvdW50IGNvdW50IGlzIG5vdCBhIGZsb2F0IHZhbHVlIHRoZW4gYm90aCBvZiByb3VuZGluZyB0byBmbG9vciBhbmQgY2VpbFxuICAgIC8vIHdpbGwgeWllbGQgdGhlIHNhbWUgdmFsdWVzLiBJbnN0ZWFkIG9mIHJlcGVhdGluZyB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0cnkgZ29pbmcgdXBcbiAgICAvLyB3aGlsZSBmYXZvcmluZyBob3Jpem9udGFsIGRpbWVuc2lvbiBpbiBzdWNoIGNhc2VzXG4gICAgaWYgKGhvcml6b250YWxDb3VudCA9PSBob3Jpem9udGFsQ291bnREb3VibGUpIHtcbiAgICAgIGhvcml6b250YWxDb3VudCsrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBob3Jpem9udGFsQ291bnQgPSBNYXRoLmZsb29yKGhvcml6b250YWxDb3VudERvdWJsZSk7XG4gIH1cblxuICAvLyBpZGVhbCB3aWR0aCB0byBiZSBjYWxjdWxhdGVkXG4gIHZhciBpZGVhbFdpZHRoID0gaG9yaXpvbnRhbENvdW50ICogKGF2ZXJhZ2VXaWR0aCArIGhvcml6b250YWxQYWRkaW5nKSAtIGhvcml6b250YWxQYWRkaW5nO1xuXG4gIC8vIGlmIG1heCB3aWR0aCBpcyBiaWdnZXIgdGhhbiBjYWxjdWxhdGVkIGlkZWFsIHdpZHRoIHJlc2V0IGlkZWFsIHdpZHRoIHRvIGl0XG4gIGlmIChtYXhXaWR0aCA+IGlkZWFsV2lkdGgpIHtcbiAgICBpZGVhbFdpZHRoID0gbWF4V2lkdGg7XG4gIH1cblxuICAvLyBhZGQgdGhlIGxlZnQtcmlnaHQgbWFyZ2lucyB0byB0aGUgaWRlYWwgcm93IHdpZHRoXG4gIGlkZWFsV2lkdGggKz0gaG9yaXpvbnRhbFBhZGRpbmcgKiAyO1xuXG4gIC8vIHJldHVybiB0aGUgaWRlYWwgcm93IHdpZHRoMVxuICByZXR1cm4gaWRlYWxXaWR0aDtcbn07XG5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0gPSBmdW5jdGlvbiAobm9kZXMsIG1pbldpZHRoLCBmYXZvckhvcml6b250YWxEaW0pIHtcbiAgdmFyIHZlcnRpY2FsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw7XG4gIHZhciBob3Jpem9udGFsUGFkZGluZyA9IENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTDtcbiAgdmFyIHRpbGluZ0NvbXBhcmVCeSA9IENvU0VDb25zdGFudHMuVElMSU5HX0NPTVBBUkVfQlk7XG4gIHZhciBvcmdhbml6YXRpb24gPSB7XG4gICAgcm93czogW10sXG4gICAgcm93V2lkdGg6IFtdLFxuICAgIHJvd0hlaWdodDogW10sXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiBtaW5XaWR0aCwgLy8gYXNzdW1lIG1pbkhlaWdodCBlcXVhbHMgdG8gbWluV2lkdGhcbiAgICB2ZXJ0aWNhbFBhZGRpbmc6IHZlcnRpY2FsUGFkZGluZyxcbiAgICBob3Jpem9udGFsUGFkZGluZzogaG9yaXpvbnRhbFBhZGRpbmcsXG4gICAgY2VudGVyWDogMCxcbiAgICBjZW50ZXJZOiAwXG4gIH07XG5cbiAgaWYgKHRpbGluZ0NvbXBhcmVCeSkge1xuICAgIG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoID0gdGhpcy5jYWxjSWRlYWxSb3dXaWR0aChub2RlcywgZmF2b3JIb3Jpem9udGFsRGltKTtcbiAgfVxuXG4gIHZhciBnZXROb2RlQXJlYSA9IGZ1bmN0aW9uIGdldE5vZGVBcmVhKG4pIHtcbiAgICByZXR1cm4gbi5yZWN0LndpZHRoICogbi5yZWN0LmhlaWdodDtcbiAgfTtcblxuICB2YXIgYXJlYUNvbXBhcmVGY24gPSBmdW5jdGlvbiBhcmVhQ29tcGFyZUZjbihuMSwgbjIpIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUFyZWEobjIpIC0gZ2V0Tm9kZUFyZWEobjEpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG5vZGVzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlaXIgYXJlYXNcbiAgbm9kZXMuc29ydChmdW5jdGlvbiAobjEsIG4yKSB7XG4gICAgdmFyIGNtcEJ5ID0gYXJlYUNvbXBhcmVGY247XG4gICAgaWYgKG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoKSB7XG4gICAgICBjbXBCeSA9IHRpbGluZ0NvbXBhcmVCeTtcbiAgICAgIHJldHVybiBjbXBCeShuMS5pZCwgbjIuaWQpO1xuICAgIH1cbiAgICByZXR1cm4gY21wQnkobjEsIG4yKTtcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBvcmdhbml6YXRpb24gLT4gY2FsY3VsYXRlIGNvbXBvdW5kIGNlbnRlclxuICB2YXIgc3VtQ2VudGVyWCA9IDA7XG4gIHZhciBzdW1DZW50ZXJZID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgc3VtQ2VudGVyWCArPSBsTm9kZS5nZXRDZW50ZXJYKCk7XG4gICAgc3VtQ2VudGVyWSArPSBsTm9kZS5nZXRDZW50ZXJZKCk7XG4gIH1cblxuICBvcmdhbml6YXRpb24uY2VudGVyWCA9IHN1bUNlbnRlclggLyBub2Rlcy5sZW5ndGg7XG4gIG9yZ2FuaXphdGlvbi5jZW50ZXJZID0gc3VtQ2VudGVyWSAvIG5vZGVzLmxlbmd0aDtcblxuICAvLyBDcmVhdGUgdGhlIG9yZ2FuaXphdGlvbiAtPiB0aWxlIG1lbWJlcnNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsTm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCAwLCBtaW5XaWR0aCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNhbkFkZEhvcml6b250YWwob3JnYW5pemF0aW9uLCBsTm9kZS5yZWN0LndpZHRoLCBsTm9kZS5yZWN0LmhlaWdodCkpIHtcbiAgICAgIHZhciByb3dJbmRleCA9IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoIW9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoKSB7XG4gICAgICAgIHJvd0luZGV4ID0gdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KG9yZ2FuaXphdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCByb3dJbmRleCwgbWluV2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluc2VydE5vZGVUb1Jvdyhvcmdhbml6YXRpb24sIGxOb2RlLCBvcmdhbml6YXRpb24ucm93cy5sZW5ndGgsIG1pbldpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNoaWZ0VG9MYXN0Um93KG9yZ2FuaXphdGlvbik7XG4gIH1cblxuICByZXR1cm4gb3JnYW5pemF0aW9uO1xufTtcblxuQ29TRUxheW91dC5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbiwgbm9kZSwgcm93SW5kZXgsIG1pbldpZHRoKSB7XG4gIHZhciBtaW5Db21wb3VuZFNpemUgPSBtaW5XaWR0aDtcblxuICAvLyBBZGQgbmV3IHJvdyBpZiBuZWVkZWRcbiAgaWYgKHJvd0luZGV4ID09IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCkge1xuICAgIHZhciBzZWNvbmREaW1lbnNpb24gPSBbXTtcblxuICAgIG9yZ2FuaXphdGlvbi5yb3dzLnB1c2goc2Vjb25kRGltZW5zaW9uKTtcbiAgICBvcmdhbml6YXRpb24ucm93V2lkdGgucHVzaChtaW5Db21wb3VuZFNpemUpO1xuICAgIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHQucHVzaCgwKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSByb3cgd2lkdGhcbiAgdmFyIHcgPSBvcmdhbml6YXRpb24ucm93V2lkdGhbcm93SW5kZXhdICsgbm9kZS5yZWN0LndpZHRoO1xuXG4gIGlmIChvcmdhbml6YXRpb24ucm93c1tyb3dJbmRleF0ubGVuZ3RoID4gMCkge1xuICAgIHcgKz0gb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nO1xuICB9XG5cbiAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW3Jvd0luZGV4XSA9IHc7XG4gIC8vIFVwZGF0ZSBjb21wb3VuZCB3aWR0aFxuICBpZiAob3JnYW5pemF0aW9uLndpZHRoIDwgdykge1xuICAgIG9yZ2FuaXphdGlvbi53aWR0aCA9IHc7XG4gIH1cblxuICAvLyBVcGRhdGUgaGVpZ2h0XG4gIHZhciBoID0gbm9kZS5yZWN0LmhlaWdodDtcbiAgaWYgKHJvd0luZGV4ID4gMCkgaCArPSBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuXG4gIHZhciBleHRyYUhlaWdodCA9IDA7XG4gIGlmIChoID4gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtyb3dJbmRleF0pIHtcbiAgICBleHRyYUhlaWdodCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdO1xuICAgIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdID0gaDtcbiAgICBleHRyYUhlaWdodCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbcm93SW5kZXhdIC0gZXh0cmFIZWlnaHQ7XG4gIH1cblxuICBvcmdhbml6YXRpb24uaGVpZ2h0ICs9IGV4dHJhSGVpZ2h0O1xuXG4gIC8vIEluc2VydCBub2RlXG4gIG9yZ2FuaXphdGlvbi5yb3dzW3Jvd0luZGV4XS5wdXNoKG5vZGUpO1xufTtcblxuLy9TY2FucyB0aGUgcm93cyBvZiBhbiBvcmdhbml6YXRpb24gYW5kIHJldHVybnMgdGhlIG9uZSB3aXRoIHRoZSBtaW4gd2lkdGhcbkNvU0VMYXlvdXQucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXggPSBmdW5jdGlvbiAob3JnYW5pemF0aW9uKSB7XG4gIHZhciByID0gLTE7XG4gIHZhciBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgb3JnYW5pemF0aW9uLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd1dpZHRoW2ldIDwgbWluKSB7XG4gICAgICByID0gaTtcbiAgICAgIG1pbiA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59O1xuXG4vL1NjYW5zIHRoZSByb3dzIG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgcmV0dXJucyB0aGUgb25lIHdpdGggdGhlIG1heCB3aWR0aFxuQ29TRUxheW91dC5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgciA9IC0xO1xuICB2YXIgbWF4ID0gTnVtYmVyLk1JTl9WQUxVRTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd1dpZHRoW2ldID4gbWF4KSB7XG4gICAgICByID0gaTtcbiAgICAgIG1heCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn07XG5cbi8qKlxuKiBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciBhZGRpbmcgZXh0cmEgd2lkdGggdG8gdGhlIG9yZ2FuaXphdGlvbiB2aW9sYXRlc1xuKiB0aGUgYXNwZWN0IHJhdGlvKDEpIG9yIG5vdC5cbiovXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbiwgZXh0cmFXaWR0aCwgZXh0cmFIZWlnaHQpIHtcblxuICAvLyBpZiB0aGVyZSBpcyBhbiBpZGVhbCByb3cgd2lkdGggc3BlY2lmaWVkIHVzZSBpdCBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBhc3BlY3QgcmF0aW9cbiAgaWYgKG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoKSB7XG4gICAgdmFyIGxhc3RSb3dJbmRleCA9IG9yZ2FuaXphdGlvbi5yb3dzLmxlbmd0aCAtIDE7XG4gICAgdmFyIGxhc3RSb3dXaWR0aCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtsYXN0Um93SW5kZXhdO1xuXG4gICAgLy8gY2hlY2sgYW5kIHJldHVybiBpZiBpZGVhbCByb3cgd2lkdGggd2lsbCBiZSBleGNlZWQgaWYgdGhlIG5vZGUgaXMgYWRkZWQgdG8gdGhlIHJvd1xuICAgIHJldHVybiBsYXN0Um93V2lkdGggKyBleHRyYVdpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nIDw9IG9yZ2FuaXphdGlvbi5pZGVhbFJvd1dpZHRoO1xuICB9XG5cbiAgdmFyIHNyaSA9IHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChvcmdhbml6YXRpb24pO1xuXG4gIGlmIChzcmkgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbWluID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW3NyaV07XG5cbiAgaWYgKG1pbiArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZyArIGV4dHJhV2lkdGggPD0gb3JnYW5pemF0aW9uLndpZHRoKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgaERpZmYgPSAwO1xuXG4gIC8vIEFkZGluZyB0byBhbiBleGlzdGluZyByb3dcbiAgaWYgKG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbc3JpXSA8IGV4dHJhSGVpZ2h0KSB7XG4gICAgaWYgKHNyaSA+IDApIGhEaWZmID0gZXh0cmFIZWlnaHQgKyBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nIC0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtzcmldO1xuICB9XG5cbiAgdmFyIGFkZF90b19yb3dfcmF0aW87XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBtaW4gPj0gZXh0cmFXaWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZykge1xuICAgIGFkZF90b19yb3dfcmF0aW8gPSAob3JnYW5pemF0aW9uLmhlaWdodCArIGhEaWZmKSAvIChtaW4gKyBleHRyYVdpZHRoICsgb3JnYW5pemF0aW9uLmhvcml6b250YWxQYWRkaW5nKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRfdG9fcm93X3JhdGlvID0gKG9yZ2FuaXphdGlvbi5oZWlnaHQgKyBoRGlmZikgLyBvcmdhbml6YXRpb24ud2lkdGg7XG4gIH1cblxuICAvLyBBZGRpbmcgYSBuZXcgcm93IGZvciB0aGlzIG5vZGVcbiAgaERpZmYgPSBleHRyYUhlaWdodCArIG9yZ2FuaXphdGlvbi52ZXJ0aWNhbFBhZGRpbmc7XG4gIHZhciBhZGRfbmV3X3Jvd19yYXRpbztcbiAgaWYgKG9yZ2FuaXphdGlvbi53aWR0aCA8IGV4dHJhV2lkdGgpIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gZXh0cmFXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICBhZGRfbmV3X3Jvd19yYXRpbyA9IChvcmdhbml6YXRpb24uaGVpZ2h0ICsgaERpZmYpIC8gb3JnYW5pemF0aW9uLndpZHRoO1xuICB9XG5cbiAgaWYgKGFkZF9uZXdfcm93X3JhdGlvIDwgMSkgYWRkX25ld19yb3dfcmF0aW8gPSAxIC8gYWRkX25ld19yb3dfcmF0aW87XG5cbiAgaWYgKGFkZF90b19yb3dfcmF0aW8gPCAxKSBhZGRfdG9fcm93X3JhdGlvID0gMSAvIGFkZF90b19yb3dfcmF0aW87XG5cbiAgcmV0dXJuIGFkZF90b19yb3dfcmF0aW8gPCBhZGRfbmV3X3Jvd19yYXRpbztcbn07XG5cbi8vSWYgbW92aW5nIHRoZSBsYXN0IG5vZGUgZnJvbSB0aGUgbG9uZ2VzdCByb3cgYW5kIGFkZGluZyBpdCB0byB0aGUgbGFzdFxuLy9yb3cgbWFrZXMgdGhlIGJvdW5kaW5nIGJveCBzbWFsbGVyLCBkbyBpdC5cbkNvU0VMYXlvdXQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93ID0gZnVuY3Rpb24gKG9yZ2FuaXphdGlvbikge1xuICB2YXIgbG9uZ2VzdCA9IHRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KG9yZ2FuaXphdGlvbik7XG4gIHZhciBsYXN0ID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoLmxlbmd0aCAtIDE7XG4gIHZhciByb3cgPSBvcmdhbml6YXRpb24ucm93c1tsb25nZXN0XTtcbiAgdmFyIG5vZGUgPSByb3dbcm93Lmxlbmd0aCAtIDFdO1xuXG4gIHZhciBkaWZmID0gbm9kZS53aWR0aCArIG9yZ2FuaXphdGlvbi5ob3Jpem9udGFsUGFkZGluZztcblxuICAvLyBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2Ugb24gdGhlIGxhc3Qgcm93XG4gIGlmIChvcmdhbml6YXRpb24ud2lkdGggLSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPiBkaWZmICYmIGxvbmdlc3QgIT0gbGFzdCkge1xuICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsb25nZXN0IHJvd1xuICAgIHJvdy5zcGxpY2UoLTEsIDEpO1xuXG4gICAgLy8gUHVzaCBpdCB0byB0aGUgbGFzdCByb3dcbiAgICBvcmdhbml6YXRpb24ucm93c1tsYXN0XS5wdXNoKG5vZGUpO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdID0gb3JnYW5pemF0aW9uLnJvd1dpZHRoW2xvbmdlc3RdIC0gZGlmZjtcbiAgICBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gPSBvcmdhbml6YXRpb24ucm93V2lkdGhbbGFzdF0gKyBkaWZmO1xuICAgIG9yZ2FuaXphdGlvbi53aWR0aCA9IG9yZ2FuaXphdGlvbi5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgob3JnYW5pemF0aW9uKV07XG5cbiAgICAvLyBVcGRhdGUgaGVpZ2h0cyBvZiB0aGUgb3JnYW5pemF0aW9uXG4gICAgdmFyIG1heEhlaWdodCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dbaV0uaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSByb3dbaV0uaGVpZ2h0O1xuICAgIH1cbiAgICBpZiAobG9uZ2VzdCA+IDApIG1heEhlaWdodCArPSBvcmdhbml6YXRpb24udmVydGljYWxQYWRkaW5nO1xuXG4gICAgdmFyIHByZXZUb3RhbCA9IG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbG9uZ2VzdF0gKyBvcmdhbml6YXRpb24ucm93SGVpZ2h0W2xhc3RdO1xuXG4gICAgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSA9IG1heEhlaWdodDtcbiAgICBpZiAob3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA8IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZykgb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsYXN0XSA9IG5vZGUuaGVpZ2h0ICsgb3JnYW5pemF0aW9uLnZlcnRpY2FsUGFkZGluZztcblxuICAgIHZhciBmaW5hbFRvdGFsID0gb3JnYW5pemF0aW9uLnJvd0hlaWdodFtsb25nZXN0XSArIG9yZ2FuaXphdGlvbi5yb3dIZWlnaHRbbGFzdF07XG4gICAgb3JnYW5pemF0aW9uLmhlaWdodCArPSBmaW5hbFRvdGFsIC0gcHJldlRvdGFsO1xuXG4gICAgdGhpcy5zaGlmdFRvTGFzdFJvdyhvcmdhbml6YXRpb24pO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChDb1NFQ29uc3RhbnRzLlRJTEUpIHtcbiAgICAvLyBGaW5kIHplcm8gZGVncmVlIG5vZGVzIGFuZCBjcmVhdGUgYSBjb21wb3VuZCBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpO1xuICAgIC8vIFRpbGUgYW5kIGNsZWFyIGNoaWxkcmVuIG9mIGVhY2ggY29tcG91bmRcbiAgICB0aGlzLmNsZWFyQ29tcG91bmRzKCk7XG4gICAgLy8gU2VwYXJhdGVseSB0aWxlIGFuZCBjbGVhciB6ZXJvIGRlZ3JlZSBub2RlcyBmb3IgZWFjaCBsZXZlbFxuICAgIHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpO1xuICB9XG59O1xuXG5Db1NFTGF5b3V0LnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoQ29TRUNvbnN0YW50cy5USUxFKSB7XG4gICAgdGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKTtcbiAgICB0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKTtcbiAgfVxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlY3Rpb246IFRyZWUgUmVkdWN0aW9uIG1ldGhvZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWR1Y2UgdHJlZXMgXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5yZWR1Y2VUcmVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBydW5lZE5vZGVzQWxsID0gW107XG4gIHZhciBjb250YWluc0xlYWYgPSB0cnVlO1xuICB2YXIgbm9kZTtcblxuICB3aGlsZSAoY29udGFpbnNMZWFmKSB7XG4gICAgdmFyIGFsbE5vZGVzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKTtcbiAgICB2YXIgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wID0gW107XG4gICAgY29udGFpbnNMZWFmID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5nZXRFZGdlcygpLmxlbmd0aCA9PSAxICYmICFub2RlLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoICYmIG5vZGUuZ2V0Q2hpbGQoKSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChDb1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwpIHtcbiAgICAgICAgICB2YXIgb3RoZXJFbmQgPSBub2RlLmdldEVkZ2VzKClbMF0uZ2V0T3RoZXJFbmQobm9kZSk7XG4gICAgICAgICAgdmFyIHJlbGF0aXZlUG9zaXRpb24gPSBuZXcgRGltZW5zaW9uRChub2RlLmdldENlbnRlclgoKSAtIG90aGVyRW5kLmdldENlbnRlclgoKSwgbm9kZS5nZXRDZW50ZXJZKCkgLSBvdGhlckVuZC5nZXRDZW50ZXJZKCkpO1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcC5wdXNoKFtub2RlLCBub2RlLmdldEVkZ2VzKClbMF0sIG5vZGUuZ2V0T3duZXIoKSwgcmVsYXRpdmVQb3NpdGlvbl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBydW5lZE5vZGVzSW5TdGVwVGVtcC5wdXNoKFtub2RlLCBub2RlLmdldEVkZ2VzKClbMF0sIG5vZGUuZ2V0T3duZXIoKV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5zTGVhZiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb250YWluc0xlYWYgPT0gdHJ1ZSkge1xuICAgICAgdmFyIHBydW5lZE5vZGVzSW5TdGVwID0gW107XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBydW5lZE5vZGVzSW5TdGVwVGVtcC5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocHJ1bmVkTm9kZXNJblN0ZXBUZW1wW2pdWzBdLmdldEVkZ2VzKCkubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBwcnVuZWROb2Rlc0luU3RlcC5wdXNoKHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXSk7XG4gICAgICAgICAgcHJ1bmVkTm9kZXNJblN0ZXBUZW1wW2pdWzBdLmdldE93bmVyKCkucmVtb3ZlKHBydW5lZE5vZGVzSW5TdGVwVGVtcFtqXVswXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBydW5lZE5vZGVzQWxsLnB1c2gocHJ1bmVkTm9kZXNJblN0ZXApO1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpO1xuICAgICAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpO1xuICAgIH1cbiAgfVxuICB0aGlzLnBydW5lZE5vZGVzQWxsID0gcHJ1bmVkTm9kZXNBbGw7XG59O1xuXG4vLyBHcm93IHRyZWUgb25lIHN0ZXAgXG5Db1NFTGF5b3V0LnByb3RvdHlwZS5ncm93VHJlZSA9IGZ1bmN0aW9uIChwcnVuZWROb2Rlc0FsbCkge1xuICB2YXIgbGVuZ3RoT2ZQcnVuZWROb2Rlc0luU3RlcCA9IHBydW5lZE5vZGVzQWxsLmxlbmd0aDtcbiAgdmFyIHBydW5lZE5vZGVzSW5TdGVwID0gcHJ1bmVkTm9kZXNBbGxbbGVuZ3RoT2ZQcnVuZWROb2Rlc0luU3RlcCAtIDFdO1xuXG4gIHZhciBub2RlRGF0YTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcnVuZWROb2Rlc0luU3RlcC5sZW5ndGg7IGkrKykge1xuICAgIG5vZGVEYXRhID0gcHJ1bmVkTm9kZXNJblN0ZXBbaV07XG5cbiAgICB0aGlzLmZpbmRQbGFjZWZvclBydW5lZE5vZGUobm9kZURhdGEpO1xuXG4gICAgbm9kZURhdGFbMl0uYWRkKG5vZGVEYXRhWzBdKTtcbiAgICBub2RlRGF0YVsyXS5hZGQobm9kZURhdGFbMV0sIG5vZGVEYXRhWzFdLnNvdXJjZSwgbm9kZURhdGFbMV0udGFyZ2V0KTtcbiAgfVxuXG4gIHBydW5lZE5vZGVzQWxsLnNwbGljZShwcnVuZWROb2Rlc0FsbC5sZW5ndGggLSAxLCAxKTtcbiAgdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpO1xuICB0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCk7XG59O1xuXG4vLyBGaW5kIGFuIGFwcHJvcHJpYXRlIHBvc2l0aW9uIHRvIHJlcGxhY2UgcHJ1bmVkIG5vZGUsIHRoaXMgbWV0aG9kIGNhbiBiZSBpbXByb3ZlZFxuQ29TRUxheW91dC5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZSA9IGZ1bmN0aW9uIChub2RlRGF0YSkge1xuXG4gIHZhciBncmlkRm9yUHJ1bmVkTm9kZTtcbiAgdmFyIG5vZGVUb0Nvbm5lY3Q7XG4gIHZhciBwcnVuZWROb2RlID0gbm9kZURhdGFbMF07XG4gIGlmIChwcnVuZWROb2RlID09IG5vZGVEYXRhWzFdLnNvdXJjZSkge1xuICAgIG5vZGVUb0Nvbm5lY3QgPSBub2RlRGF0YVsxXS50YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgbm9kZVRvQ29ubmVjdCA9IG5vZGVEYXRhWzFdLnNvdXJjZTtcbiAgfVxuXG4gIGlmIChDb1NFQ29uc3RhbnRzLlBVUkVfSU5DUkVNRU5UQUwpIHtcbiAgICBwcnVuZWROb2RlLnNldENlbnRlcihub2RlVG9Db25uZWN0LmdldENlbnRlclgoKSArIG5vZGVEYXRhWzNdLmdldFdpZHRoKCksIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpICsgbm9kZURhdGFbM10uZ2V0SGVpZ2h0KCkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzdGFydEdyaWRYID0gbm9kZVRvQ29ubmVjdC5zdGFydFg7XG4gICAgdmFyIGZpbmlzaEdyaWRYID0gbm9kZVRvQ29ubmVjdC5maW5pc2hYO1xuICAgIHZhciBzdGFydEdyaWRZID0gbm9kZVRvQ29ubmVjdC5zdGFydFk7XG4gICAgdmFyIGZpbmlzaEdyaWRZID0gbm9kZVRvQ29ubmVjdC5maW5pc2hZO1xuXG4gICAgdmFyIHVwTm9kZUNvdW50ID0gMDtcbiAgICB2YXIgZG93bk5vZGVDb3VudCA9IDA7XG4gICAgdmFyIHJpZ2h0Tm9kZUNvdW50ID0gMDtcbiAgICB2YXIgbGVmdE5vZGVDb3VudCA9IDA7XG4gICAgdmFyIGNvbnRyb2xSZWdpb25zID0gW3VwTm9kZUNvdW50LCByaWdodE5vZGVDb3VudCwgZG93bk5vZGVDb3VudCwgbGVmdE5vZGVDb3VudF07XG5cbiAgICBpZiAoc3RhcnRHcmlkWSA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRYOyBpIDw9IGZpbmlzaEdyaWRYOyBpKyspIHtcbiAgICAgICAgY29udHJvbFJlZ2lvbnNbMF0gKz0gdGhpcy5ncmlkW2ldW3N0YXJ0R3JpZFkgLSAxXS5sZW5ndGggKyB0aGlzLmdyaWRbaV1bc3RhcnRHcmlkWV0ubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbmlzaEdyaWRYIDwgdGhpcy5ncmlkLmxlbmd0aCAtIDEpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzdGFydEdyaWRZOyBpIDw9IGZpbmlzaEdyaWRZOyBpKyspIHtcbiAgICAgICAgY29udHJvbFJlZ2lvbnNbMV0gKz0gdGhpcy5ncmlkW2ZpbmlzaEdyaWRYICsgMV1baV0ubGVuZ3RoICsgdGhpcy5ncmlkW2ZpbmlzaEdyaWRYXVtpXS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmluaXNoR3JpZFkgPCB0aGlzLmdyaWRbMF0ubGVuZ3RoIC0gMSkge1xuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFg7IGkgPD0gZmluaXNoR3JpZFg7IGkrKykge1xuICAgICAgICBjb250cm9sUmVnaW9uc1syXSArPSB0aGlzLmdyaWRbaV1bZmluaXNoR3JpZFkgKyAxXS5sZW5ndGggKyB0aGlzLmdyaWRbaV1bZmluaXNoR3JpZFldLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFydEdyaWRYID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0R3JpZFk7IGkgPD0gZmluaXNoR3JpZFk7IGkrKykge1xuICAgICAgICBjb250cm9sUmVnaW9uc1szXSArPSB0aGlzLmdyaWRbc3RhcnRHcmlkWCAtIDFdW2ldLmxlbmd0aCArIHRoaXMuZ3JpZFtzdGFydEdyaWRYXVtpXS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbWluID0gSW50ZWdlci5NQVhfVkFMVUU7XG4gICAgdmFyIG1pbkNvdW50O1xuICAgIHZhciBtaW5JbmRleDtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRyb2xSZWdpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoY29udHJvbFJlZ2lvbnNbal0gPCBtaW4pIHtcbiAgICAgICAgbWluID0gY29udHJvbFJlZ2lvbnNbal07XG4gICAgICAgIG1pbkNvdW50ID0gMTtcbiAgICAgICAgbWluSW5kZXggPSBqO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1tqXSA9PSBtaW4pIHtcbiAgICAgICAgbWluQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWluQ291bnQgPT0gMyAmJiBtaW4gPT0gMCkge1xuICAgICAgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMV0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1syXSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbFJlZ2lvbnNbMF0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1sxXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzNdID09IDApIHtcbiAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAwO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzJdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDM7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCAmJiBjb250cm9sUmVnaW9uc1szXSA9PSAwKSB7XG4gICAgICAgIGdyaWRGb3JQcnVuZWROb2RlID0gMjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1pbkNvdW50ID09IDIgJiYgbWluID09IDApIHtcbiAgICAgIHZhciByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKTtcbiAgICAgIGlmIChjb250cm9sUmVnaW9uc1swXSA9PSAwICYmIGNvbnRyb2xSZWdpb25zWzFdID09IDApIHtcbiAgICAgICAgO1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzBdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbMl0gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xSZWdpb25zWzFdID09IDAgJiYgY29udHJvbFJlZ2lvbnNbM10gPT0gMCkge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmFuZG9tID09IDApIHtcbiAgICAgICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtaW5Db3VudCA9PSA0ICYmIG1pbiA9PSAwKSB7XG4gICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCk7XG4gICAgICBncmlkRm9yUHJ1bmVkTm9kZSA9IHJhbmRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEZvclBydW5lZE5vZGUgPSBtaW5JbmRleDtcbiAgICB9XG5cbiAgICBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMCkge1xuICAgICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCksIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpIC0gbm9kZVRvQ29ubmVjdC5nZXRIZWlnaHQoKSAvIDIgLSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC0gcHJ1bmVkTm9kZS5nZXRIZWlnaHQoKSAvIDIpO1xuICAgIH0gZWxzZSBpZiAoZ3JpZEZvclBydW5lZE5vZGUgPT0gMSkge1xuICAgICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCkgKyBub2RlVG9Db25uZWN0LmdldFdpZHRoKCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0V2lkdGgoKSAvIDIsIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpKTtcbiAgICB9IGVsc2UgaWYgKGdyaWRGb3JQcnVuZWROb2RlID09IDIpIHtcbiAgICAgIHBydW5lZE5vZGUuc2V0Q2VudGVyKG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWCgpLCBub2RlVG9Db25uZWN0LmdldENlbnRlclkoKSArIG5vZGVUb0Nvbm5lY3QuZ2V0SGVpZ2h0KCkgLyAyICsgRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIHBydW5lZE5vZGUuZ2V0SGVpZ2h0KCkgLyAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJ1bmVkTm9kZS5zZXRDZW50ZXIobm9kZVRvQ29ubmVjdC5nZXRDZW50ZXJYKCkgLSBub2RlVG9Db25uZWN0LmdldFdpZHRoKCkgLyAyIC0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCAtIHBydW5lZE5vZGUuZ2V0V2lkdGgoKSAvIDIsIG5vZGVUb0Nvbm5lY3QuZ2V0Q2VudGVyWSgpKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29TRUxheW91dDtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk5MTpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBGRExheW91dE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuRkRMYXlvdXROb2RlO1xudmFyIElNYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLklNYXRoO1xuXG5mdW5jdGlvbiBDb1NFTm9kZShnbSwgbG9jLCBzaXplLCB2Tm9kZSkge1xuICBGRExheW91dE5vZGUuY2FsbCh0aGlzLCBnbSwgbG9jLCBzaXplLCB2Tm9kZSk7XG59XG5cbkNvU0VOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRkRMYXlvdXROb2RlLnByb3RvdHlwZSk7XG5mb3IgKHZhciBwcm9wIGluIEZETGF5b3V0Tm9kZSkge1xuICBDb1NFTm9kZVtwcm9wXSA9IEZETGF5b3V0Tm9kZVtwcm9wXTtcbn1cblxuQ29TRU5vZGUucHJvdG90eXBlLmNhbGN1bGF0ZURpc3BsYWNlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxheW91dCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO1xuICAvLyB0aGlzIGNoZWNrIGlzIGZvciBjb21wb3VuZCBub2RlcyB0aGF0IGNvbnRhaW4gZml4ZWQgbm9kZXNcbiAgaWYgKHRoaXMuZ2V0Q2hpbGQoKSAhPSBudWxsICYmIHRoaXMuZml4ZWROb2RlV2VpZ2h0KSB7XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRYICs9IGxheW91dC5jb29saW5nRmFjdG9yICogKHRoaXMuc3ByaW5nRm9yY2VYICsgdGhpcy5yZXB1bHNpb25Gb3JjZVggKyB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKSAvIHRoaXMuZml4ZWROb2RlV2VpZ2h0O1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WSArPSBsYXlvdXQuY29vbGluZ0ZhY3RvciAqICh0aGlzLnNwcmluZ0ZvcmNlWSArIHRoaXMucmVwdWxzaW9uRm9yY2VZICsgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkgLyB0aGlzLmZpeGVkTm9kZVdlaWdodDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRpc3BsYWNlbWVudFggKz0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiAodGhpcy5zcHJpbmdGb3JjZVggKyB0aGlzLnJlcHVsc2lvbkZvcmNlWCArIHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpIC8gdGhpcy5ub09mQ2hpbGRyZW47XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRZICs9IGxheW91dC5jb29saW5nRmFjdG9yICogKHRoaXMuc3ByaW5nRm9yY2VZICsgdGhpcy5yZXB1bHNpb25Gb3JjZVkgKyB0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKSAvIHRoaXMubm9PZkNoaWxkcmVuO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkgPiBsYXlvdXQuY29vbGluZ0ZhY3RvciAqIGxheW91dC5tYXhOb2RlRGlzcGxhY2VtZW50KSB7XG4gICAgdGhpcy5kaXNwbGFjZW1lbnRYID0gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCAqIElNYXRoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpID4gbGF5b3V0LmNvb2xpbmdGYWN0b3IgKiBsYXlvdXQubWF4Tm9kZURpc3BsYWNlbWVudCkge1xuICAgIHRoaXMuZGlzcGxhY2VtZW50WSA9IGxheW91dC5jb29saW5nRmFjdG9yICogbGF5b3V0Lm1heE5vZGVEaXNwbGFjZW1lbnQgKiBJTWF0aC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSk7XG4gIH1cblxuICAvLyBub24tZW1wdHkgY29tcG91bmQgbm9kZSwgcHJvcG9nYXRlIG1vdmVtZW50IHRvIGNoaWxkcmVuIGFzIHdlbGxcbiAgaWYgKHRoaXMuY2hpbGQgJiYgdGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuICB9XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbiA9IGZ1bmN0aW9uIChkWCwgZFkpIHtcbiAgdmFyIG5vZGVzID0gdGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCk7XG4gIHZhciBub2RlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgIGlmIChub2RlLmdldENoaWxkKCkgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRYICs9IGRYO1xuICAgICAgbm9kZS5kaXNwbGFjZW1lbnRZICs9IGRZO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4oZFgsIGRZKTtcbiAgICB9XG4gIH1cbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5tb3ZlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbGF5b3V0ID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7XG5cbiAgLy8gYSBzaW1wbGUgbm9kZSBvciBhbiBlbXB0eSBjb21wb3VuZCBub2RlLCBtb3ZlIGl0XG4gIGlmICh0aGlzLmNoaWxkID09IG51bGwgfHwgdGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLCB0aGlzLmRpc3BsYWNlbWVudFkpO1xuXG4gICAgbGF5b3V0LnRvdGFsRGlzcGxhY2VtZW50ICs9IE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkgKyBNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpO1xuICB9XG5cbiAgdGhpcy5zcHJpbmdGb3JjZVggPSAwO1xuICB0aGlzLnNwcmluZ0ZvcmNlWSA9IDA7XG4gIHRoaXMucmVwdWxzaW9uRm9yY2VYID0gMDtcbiAgdGhpcy5yZXB1bHNpb25Gb3JjZVkgPSAwO1xuICB0aGlzLmdyYXZpdGF0aW9uRm9yY2VYID0gMDtcbiAgdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSA9IDA7XG4gIHRoaXMuZGlzcGxhY2VtZW50WCA9IDA7XG4gIHRoaXMuZGlzcGxhY2VtZW50WSA9IDA7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuc2V0UHJlZDEgPSBmdW5jdGlvbiAocHJlZDEpIHtcbiAgdGhpcy5wcmVkMSA9IHByZWQxO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmdldFByZWQxID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcHJlZDE7XG59O1xuXG5Db1NFTm9kZS5wcm90b3R5cGUuZ2V0UHJlZDIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwcmVkMjtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXROZXh0ID0gZnVuY3Rpb24gKG5leHQpIHtcbiAgdGhpcy5uZXh0ID0gbmV4dDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5nZXROZXh0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV4dDtcbn07XG5cbkNvU0VOb2RlLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQgPSBmdW5jdGlvbiAocHJvY2Vzc2VkKSB7XG4gIHRoaXMucHJvY2Vzc2VkID0gcHJvY2Vzc2VkO1xufTtcblxuQ29TRU5vZGUucHJvdG90eXBlLmlzUHJvY2Vzc2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcHJvY2Vzc2VkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb1NFTm9kZTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDkwMjpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxuXG52YXIgQ29TRUNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oODA2KTtcbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLkxpbmtlZExpc3Q7XG52YXIgTWF0cml4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NTEpLk1hdHJpeDtcbnZhciBTVkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1MSkuU1ZEO1xuXG5mdW5jdGlvbiBDb25zdHJhaW50SGFuZGxlcigpIHt9XG5cbkNvbnN0cmFpbnRIYW5kbGVyLmhhbmRsZUNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKGxheW91dCkge1xuICAvLyAgbGV0IGxheW91dCA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO1xuXG4gIC8vIGdldCBjb25zdHJhaW50cyBmcm9tIGxheW91dFxuICB2YXIgY29uc3RyYWludHMgPSB7fTtcbiAgY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCA9IGxheW91dC5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50O1xuICBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50ID0gbGF5b3V0LmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQ7XG4gIGNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCA9IGxheW91dC5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7XG5cbiAgdmFyIGlkVG9Ob2RlTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbm9kZUluZGV4ZXMgPSBuZXcgTWFwKCk7XG4gIHZhciB4Q29vcmRzID0gW107XG4gIHZhciB5Q29vcmRzID0gW107XG5cbiAgdmFyIGFsbE5vZGVzID0gbGF5b3V0LmdldEFsbE5vZGVzKCk7XG4gIHZhciBpbmRleCA9IDA7XG4gIC8vIGZpbGwgaW5kZXggbWFwIGFuZCBjb29yZGluYXRlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAobm9kZS5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICAgIG5vZGVJbmRleGVzLnNldChub2RlLmlkLCBpbmRleCsrKTtcbiAgICAgIHhDb29yZHMucHVzaChub2RlLmdldENlbnRlclgoKSk7XG4gICAgICB5Q29vcmRzLnB1c2gobm9kZS5nZXRDZW50ZXJZKCkpO1xuICAgICAgaWRUb05vZGVNYXAuc2V0KG5vZGUuaWQsIG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZXJlIGV4aXN0cyByZWxhdGl2ZSBwbGFjZW1lbnQgY29uc3RyYWludCB3aXRob3V0IGdhcCB2YWx1ZSwgc2V0IGl0IHRvIGRlZmF1bHQgXG4gIGlmIChjb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpIHtcbiAgICBjb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAoY29uc3RyYWludCkge1xuICAgICAgaWYgKCFjb25zdHJhaW50LmdhcCAmJiBjb25zdHJhaW50LmdhcCAhPSAwKSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LmxlZnQpIHtcbiAgICAgICAgICBjb25zdHJhaW50LmdhcCA9IENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCArIGlkVG9Ob2RlTWFwLmdldChjb25zdHJhaW50LmxlZnQpLmdldFdpZHRoKCkgLyAyICsgaWRUb05vZGVNYXAuZ2V0KGNvbnN0cmFpbnQucmlnaHQpLmdldFdpZHRoKCkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0cmFpbnQuZ2FwID0gQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIICsgaWRUb05vZGVNYXAuZ2V0KGNvbnN0cmFpbnQudG9wKS5nZXRIZWlnaHQoKSAvIDIgKyBpZFRvTm9kZU1hcC5nZXQoY29uc3RyYWludC5ib3R0b20pLmdldEhlaWdodCgpIC8gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyogYXV4aWxpYXJ5IGZ1bmN0aW9ucyAqL1xuXG4gIC8vIGNhbGN1bGF0ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHBvc2l0aW9uIG9iamVjdHNcbiAgdmFyIGNhbGN1bGF0ZVBvc2l0aW9uRGlmZiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVBvc2l0aW9uRGlmZihwb3MxLCBwb3MyKSB7XG4gICAgcmV0dXJuIHsgeDogcG9zMS54IC0gcG9zMi54LCB5OiBwb3MxLnkgLSBwb3MyLnkgfTtcbiAgfTtcblxuICAvLyBjYWxjdWxhdGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgbm9kZXNcbiAgdmFyIGNhbGN1bGF0ZUF2Z1Bvc2l0aW9uID0gZnVuY3Rpb24gY2FsY3VsYXRlQXZnUG9zaXRpb24obm9kZUlkU2V0KSB7XG4gICAgdmFyIHhQb3NTdW0gPSAwO1xuICAgIHZhciB5UG9zU3VtID0gMDtcbiAgICBub2RlSWRTZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICB4UG9zU3VtICs9IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldO1xuICAgICAgeVBvc1N1bSArPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHg6IHhQb3NTdW0gLyBub2RlSWRTZXQuc2l6ZSwgeTogeVBvc1N1bSAvIG5vZGVJZFNldC5zaXplIH07XG4gIH07XG5cbiAgLy8gZmluZCBhbiBhcHByb3ByaWF0ZSBwb3NpdGlvbmluZyBmb3IgdGhlIG5vZGVzIGluIGEgZ2l2ZW4gZ3JhcGggYWNjb3JkaW5nIHRvIHJlbGF0aXZlIHBsYWNlbWVudCBjb25zdHJhaW50c1xuICAvLyB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgdGhlIGZpeGVkIG5vZGVzIGFuZCBhbGlnbm1lbnQgY29uc3RyYWludHMgaW50byBhY2NvdW50XG4gIC8vIGdyYXBoOiBkYWcgdG8gYmUgZXZhbHVhdGVkLCBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIiwgXG4gIC8vIGZpeGVkTm9kZXM6IHNldCBvZiBmaXhlZCBub2RlcyB0byBjb25zaWRlciBkdXJpbmcgZXZhbHVhdGlvbiwgZHVtbXlQb3NpdGlvbnM6IGFwcHJvcHJpYXRlIGNvb3JkaW5hdGVzIG9mIHRoZSBkdW1teSBub2RlcyAgXG4gIHZhciBmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50ID0gZnVuY3Rpb24gZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChncmFwaCwgZGlyZWN0aW9uLCBmaXhlZE5vZGVzLCBkdW1teVBvc2l0aW9ucywgY29tcG9uZW50U291cmNlcykge1xuXG4gICAgLy8gZmluZCB1bmlvbiBvZiB0d28gc2V0c1xuICAgIGZ1bmN0aW9uIHNldFVuaW9uKHNldEEsIHNldEIpIHtcbiAgICAgIHZhciB1bmlvbiA9IG5ldyBTZXQoc2V0QSk7XG4gICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG4gICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gc2V0QltTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgICAgICB2YXIgZWxlbSA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgdW5pb24uYWRkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuaW9uO1xuICAgIH1cblxuICAgIC8vIGZpbmQgaW5kZWdyZWUgY291bnQgZm9yIGVhY2ggbm9kZVxuICAgIHZhciBpbkRlZ3JlZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBncmFwaC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpbkRlZ3JlZXMuc2V0KGtleSwgMCk7XG4gICAgfSk7XG4gICAgZ3JhcGguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoYWRqYWNlbnQpIHtcbiAgICAgICAgaW5EZWdyZWVzLnNldChhZGphY2VudC5pZCwgaW5EZWdyZWVzLmdldChhZGphY2VudC5pZCkgKyAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIHBvc2l0aW9uTWFwID0gbmV3IE1hcCgpOyAvLyBrZWVwcyB0aGUgcG9zaXRpb24gZm9yIGVhY2ggbm9kZVxuICAgIHZhciBwYXN0TWFwID0gbmV3IE1hcCgpOyAvLyBrZWVwcyB0aGUgcHJlZGVjZXNzb3JzKHBhc3QpIG9mIGEgbm9kZVxuICAgIHZhciBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0KCk7XG4gICAgaW5EZWdyZWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSAwKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goa2V5KTtcbiAgICAgICAgaWYgKCFmaXhlZE5vZGVzKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KGtleSwgbm9kZUluZGV4ZXMuaGFzKGtleSkgPyB4Q29vcmRzW25vZGVJbmRleGVzLmdldChrZXkpXSA6IGR1bW15UG9zaXRpb25zLmdldChrZXkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KGtleSwgbm9kZUluZGV4ZXMuaGFzKGtleSkgPyB5Q29vcmRzW25vZGVJbmRleGVzLmdldChrZXkpXSA6IGR1bW15UG9zaXRpb25zLmdldChrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc2l0aW9uTWFwLnNldChrZXksIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICB9XG4gICAgICBpZiAoZml4ZWROb2Rlcykge1xuICAgICAgICBwYXN0TWFwLnNldChrZXksIG5ldyBTZXQoW2tleV0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGFsaWduIHNvdXJjZXMgb2YgZWFjaCBjb21wb25lbnQgaW4gZW5mb3JjZW1lbnQgcGhhc2VcbiAgICBpZiAoZml4ZWROb2Rlcykge1xuICAgICAgY29tcG9uZW50U291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGZpeGVkSWRzID0gW107XG4gICAgICAgIGNvbXBvbmVudC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICBpZiAoZml4ZWROb2Rlcy5oYXMobm9kZUlkKSkge1xuICAgICAgICAgICAgZml4ZWRJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmaXhlZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICAgICAgICBmaXhlZElkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaXhlZElkKSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChmaXhlZElkLCBub2RlSW5kZXhlcy5oYXMoZml4ZWRJZCkgPyB4Q29vcmRzW25vZGVJbmRleGVzLmdldChmaXhlZElkKV0gOiBkdW1teVBvc2l0aW9ucy5nZXQoZml4ZWRJZCkpO1xuICAgICAgICAgICAgICBwb3NpdGlvbiArPSBwb3NpdGlvbk1hcC5nZXQoZml4ZWRJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwb3NpdGlvbk1hcC5zZXQoZml4ZWRJZCwgbm9kZUluZGV4ZXMuaGFzKGZpeGVkSWQpID8geUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQoZml4ZWRJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KGZpeGVkSWQpKTtcbiAgICAgICAgICAgICAgcG9zaXRpb24gKz0gcG9zaXRpb25NYXAuZ2V0KGZpeGVkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLyBmaXhlZElkcy5sZW5ndGg7XG4gICAgICAgICAgY29tcG9uZW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgaWYgKCFmaXhlZE5vZGVzLmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChub2RlSWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX3Bvc2l0aW9uID0gMDtcbiAgICAgICAgICBjb21wb25lbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIF9wb3NpdGlvbiArPSBub2RlSW5kZXhlcy5oYXMobm9kZUlkKSA/IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KG5vZGVJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfcG9zaXRpb24gKz0gbm9kZUluZGV4ZXMuaGFzKG5vZGVJZCkgPyB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXSA6IGR1bW15UG9zaXRpb25zLmdldChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9wb3NpdGlvbiA9IF9wb3NpdGlvbiAvIGNvbXBvbmVudC5sZW5ndGg7XG4gICAgICAgICAgY29tcG9uZW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KG5vZGVJZCwgX3Bvc2l0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXNcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgdmFyIGN1cnJlbnROb2RlID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIHZhciBuZWlnaGJvcnMgPSBncmFwaC5nZXQoY3VycmVudE5vZGUpO1xuICAgICAgbmVpZ2hib3JzLmZvckVhY2goZnVuY3Rpb24gKG5laWdoYm9yKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbk1hcC5nZXQobmVpZ2hib3IuaWQpIDwgcG9zaXRpb25NYXAuZ2V0KGN1cnJlbnROb2RlKSArIG5laWdoYm9yLmdhcCkge1xuICAgICAgICAgIGlmIChmaXhlZE5vZGVzICYmIGZpeGVkTm9kZXMuaGFzKG5laWdoYm9yLmlkKSkge1xuICAgICAgICAgICAgdmFyIGZpeGVkUG9zaXRpb24gPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIGZpeGVkUG9zaXRpb24gPSBub2RlSW5kZXhlcy5oYXMobmVpZ2hib3IuaWQpID8geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobmVpZ2hib3IuaWQpXSA6IGR1bW15UG9zaXRpb25zLmdldChuZWlnaGJvci5pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaXhlZFBvc2l0aW9uID0gbm9kZUluZGV4ZXMuaGFzKG5laWdoYm9yLmlkKSA/IHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5laWdoYm9yLmlkKV0gOiBkdW1teVBvc2l0aW9ucy5nZXQobmVpZ2hib3IuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KG5laWdoYm9yLmlkLCBmaXhlZFBvc2l0aW9uKTsgLy8gVE9ETzogbWF5IGRvIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgICAgIGlmIChmaXhlZFBvc2l0aW9uIDwgcG9zaXRpb25NYXAuZ2V0KGN1cnJlbnROb2RlKSArIG5laWdoYm9yLmdhcCkge1xuICAgICAgICAgICAgICB2YXIgZGlmZiA9IHBvc2l0aW9uTWFwLmdldChjdXJyZW50Tm9kZSkgKyBuZWlnaGJvci5nYXAgLSBmaXhlZFBvc2l0aW9uO1xuICAgICAgICAgICAgICBwYXN0TWFwLmdldChjdXJyZW50Tm9kZSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KG5vZGVJZCwgcG9zaXRpb25NYXAuZ2V0KG5vZGVJZCkgLSBkaWZmKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uTWFwLnNldChuZWlnaGJvci5pZCwgcG9zaXRpb25NYXAuZ2V0KGN1cnJlbnROb2RlKSArIG5laWdoYm9yLmdhcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluRGVncmVlcy5zZXQobmVpZ2hib3IuaWQsIGluRGVncmVlcy5nZXQobmVpZ2hib3IuaWQpIC0gMSk7XG4gICAgICAgIGlmIChpbkRlZ3JlZXMuZ2V0KG5laWdoYm9yLmlkKSA9PSAwKSB7XG4gICAgICAgICAgcXVldWUucHVzaChuZWlnaGJvci5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpeGVkTm9kZXMpIHtcbiAgICAgICAgICBwYXN0TWFwLnNldChuZWlnaGJvci5pZCwgc2V0VW5pb24ocGFzdE1hcC5nZXQoY3VycmVudE5vZGUpLCBwYXN0TWFwLmdldChuZWlnaGJvci5pZCkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT0gMCkge1xuICAgICAgX2xvb3AoKTtcbiAgICB9XG5cbiAgICAvLyByZWFkanVzdCBwb3NpdGlvbiBvZiB0aGUgbm9kZXMgYWZ0ZXIgZW5mb3JjZW1lbnRcbiAgICBpZiAoZml4ZWROb2Rlcykge1xuICAgICAgLy8gZmluZCBpbmRlZ3JlZSBjb3VudCBmb3IgZWFjaCBub2RlXG4gICAgICB2YXIgc2lua05vZGVzID0gbmV3IFNldCgpO1xuXG4gICAgICBncmFwaC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHNpbmtOb2Rlcy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBfY29tcG9uZW50cyA9IFtdO1xuICAgICAgcGFzdE1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChzaW5rTm9kZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICB2YXIgaXNGaXhlZENvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG4gICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAyOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlKSB7XG4gICAgICAgICAgICAgIHZhciBub2RlSWQgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgICAgICAgICAgaWYgKGZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgICAgICBpc0ZpeGVkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcbiAgICAgICAgICAgIF9pdGVyYXRvckVycm9yMiA9IGVycjtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikge1xuICAgICAgICAgICAgICAgIF9pdGVyYXRvcjIucmV0dXJuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWlzRml4ZWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBpc0V4aXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgZXhpc3RBdCA9IHZvaWQgMDtcbiAgICAgICAgICAgIF9jb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5oYXMoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh2YWx1ZSkpWzBdKSkge1xuICAgICAgICAgICAgICAgIGlzRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGV4aXN0QXQgPSBpbmRleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzRXhpc3QpIHtcbiAgICAgICAgICAgICAgX2NvbXBvbmVudHMucHVzaChuZXcgU2V0KHZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50c1tleGlzdEF0XS5hZGQoZWxlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgX2NvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50LCBpbmRleCkge1xuICAgICAgICB2YXIgbWluQmVmb3JlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB2YXIgbWluQWZ0ZXIgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHZhciBtYXhCZWZvcmUgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHZhciBtYXhBZnRlciA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IzID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gY29tcG9uZW50W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAzOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlKSB7XG4gICAgICAgICAgICB2YXIgbm9kZUlkID0gX3N0ZXAzLnZhbHVlO1xuXG4gICAgICAgICAgICB2YXIgcG9zQmVmb3JlID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICBwb3NCZWZvcmUgPSBub2RlSW5kZXhlcy5oYXMobm9kZUlkKSA/IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KG5vZGVJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwb3NCZWZvcmUgPSBub2RlSW5kZXhlcy5oYXMobm9kZUlkKSA/IHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldIDogZHVtbXlQb3NpdGlvbnMuZ2V0KG5vZGVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcG9zQWZ0ZXIgPSBwb3NpdGlvbk1hcC5nZXQobm9kZUlkKTtcbiAgICAgICAgICAgIGlmIChwb3NCZWZvcmUgPCBtaW5CZWZvcmUpIHtcbiAgICAgICAgICAgICAgbWluQmVmb3JlID0gcG9zQmVmb3JlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvc0JlZm9yZSA+IG1heEJlZm9yZSkge1xuICAgICAgICAgICAgICBtYXhCZWZvcmUgPSBwb3NCZWZvcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zQWZ0ZXIgPCBtaW5BZnRlcikge1xuICAgICAgICAgICAgICBtaW5BZnRlciA9IHBvc0FmdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBvc0FmdGVyID4gbWF4QWZ0ZXIpIHtcbiAgICAgICAgICAgICAgbWF4QWZ0ZXIgPSBwb3NBZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG4gICAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7XG4gICAgICAgICAgICAgIF9pdGVyYXRvcjMucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWZmID0gKG1pbkJlZm9yZSArIG1heEJlZm9yZSkgLyAyIC0gKG1pbkFmdGVyICsgbWF4QWZ0ZXIpIC8gMjtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gY29tcG9uZW50W1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA0OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gKF9zdGVwNCA9IF9pdGVyYXRvcjQubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlKSB7XG4gICAgICAgICAgICB2YXIgX25vZGVJZCA9IF9zdGVwNC52YWx1ZTtcblxuICAgICAgICAgICAgcG9zaXRpb25NYXAuc2V0KF9ub2RlSWQsIHBvc2l0aW9uTWFwLmdldChfbm9kZUlkKSArIGRpZmYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gdHJ1ZTtcbiAgICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgJiYgX2l0ZXJhdG9yNC5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5yZXR1cm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yNCkge1xuICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb25NYXA7XG4gIH07XG5cbiAgLy8gZmluZCB0cmFuc2Zvcm1hdGlvbiBiYXNlZCBvbiByZWwuIHBsYWNlbWVudCBjb25zdHJhaW50cyBpZiB0aGVyZSBhcmUgYm90aCBhbGlnbm1lbnQgYW5kIHJlbC4gcGxhY2VtZW50IGNvbnN0cmFpbnRzXG4gIC8vIG9yIGlmIHRoZXJlIGFyZSBvbmx5IHJlbC4gcGxhY2VtZW50IGNvbnRyYWludHMgd2hlcmUgdGhlIGxhcmdlc3QgY29tcG9uZW50IGlzbid0IHN1ZmZpY2llbnRseSBsYXJnZVxuICB2YXIgYXBwbHlSZWZsZWN0aW9uRm9yUmVsYXRpdmVQbGFjZW1lbnQgPSBmdW5jdGlvbiBhcHBseVJlZmxlY3Rpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnRzKSB7XG4gICAgLy8gdmFyaWFibGVzIHRvIGNvdW50IHZvdGVzXG4gICAgdmFyIHJlZmxlY3RPblkgPSAwLFxuICAgICAgICBub3RSZWZsZWN0T25ZID0gMDtcbiAgICB2YXIgcmVmbGVjdE9uWCA9IDAsXG4gICAgICAgIG5vdFJlZmxlY3RPblggPSAwO1xuXG4gICAgcmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJhaW50KSB7XG4gICAgICBpZiAoY29uc3RyYWludC5sZWZ0KSB7XG4gICAgICAgIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGNvbnN0cmFpbnQubGVmdCldIC0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQoY29uc3RyYWludC5yaWdodCldID49IDAgPyByZWZsZWN0T25ZKysgOiBub3RSZWZsZWN0T25ZKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5Q29vcmRzW25vZGVJbmRleGVzLmdldChjb25zdHJhaW50LnRvcCldIC0geUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQoY29uc3RyYWludC5ib3R0b20pXSA+PSAwID8gcmVmbGVjdE9uWCsrIDogbm90UmVmbGVjdE9uWCsrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlZmxlY3RPblkgPiBub3RSZWZsZWN0T25ZICYmIHJlZmxlY3RPblggPiBub3RSZWZsZWN0T25YKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZUluZGV4ZXMuc2l6ZTsgX2krKykge1xuICAgICAgICB4Q29vcmRzW19pXSA9IC0xICogeENvb3Jkc1tfaV07XG4gICAgICAgIHlDb29yZHNbX2ldID0gLTEgKiB5Q29vcmRzW19pXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3RPblkgPiBub3RSZWZsZWN0T25ZKSB7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlSW5kZXhlcy5zaXplOyBfaTIrKykge1xuICAgICAgICB4Q29vcmRzW19pMl0gPSAtMSAqIHhDb29yZHNbX2kyXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZmxlY3RPblggPiBub3RSZWZsZWN0T25YKSB7XG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBub2RlSW5kZXhlcy5zaXplOyBfaTMrKykge1xuICAgICAgICB5Q29vcmRzW19pM10gPSAtMSAqIHlDb29yZHNbX2kzXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gZmluZCB3ZWFrbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gdW5kaXJlY3RlZCBncmFwaFxuICB2YXIgZmluZENvbXBvbmVudHMgPSBmdW5jdGlvbiBmaW5kQ29tcG9uZW50cyhncmFwaCkge1xuICAgIC8vIGZpbmQgd2Vha2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGluIGRhZ1xuICAgIHZhciBjb21wb25lbnRzID0gW107XG4gICAgdmFyIHF1ZXVlID0gbmV3IExpbmtlZExpc3QoKTtcbiAgICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgZ3JhcGguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbXBvbmVudHNbY291bnRdID0gW107XG4gICAgICAgIHZhciBfY3VycmVudE5vZGUgPSBrZXk7XG4gICAgICAgIHF1ZXVlLnB1c2goX2N1cnJlbnROb2RlKTtcbiAgICAgICAgdmlzaXRlZC5hZGQoX2N1cnJlbnROb2RlKTtcbiAgICAgICAgY29tcG9uZW50c1tjb3VudF0ucHVzaChfY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgIF9jdXJyZW50Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgdmFyIG5laWdoYm9ycyA9IGdyYXBoLmdldChfY3VycmVudE5vZGUpO1xuICAgICAgICAgIG5laWdoYm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChuZWlnaGJvcikge1xuICAgICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhuZWlnaGJvci5pZCkpIHtcbiAgICAgICAgICAgICAgcXVldWUucHVzaChuZWlnaGJvci5pZCk7XG4gICAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5laWdoYm9yLmlkKTtcbiAgICAgICAgICAgICAgY29tcG9uZW50c1tjb3VudF0ucHVzaChuZWlnaGJvci5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbiAgfTtcblxuICAvLyByZXR1cm4gdW5kaXJlY3RlZCB2ZXJzaW9uIG9mIGdpdmVuIGRhZ1xuICB2YXIgZGFnVG9VbmRpcmVjdGVkID0gZnVuY3Rpb24gZGFnVG9VbmRpcmVjdGVkKGRhZykge1xuICAgIHZhciB1bmRpcmVjdGVkID0gbmV3IE1hcCgpO1xuXG4gICAgZGFnLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHVuZGlyZWN0ZWQuc2V0KGtleSwgW10pO1xuICAgIH0pO1xuXG4gICAgZGFnLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGFkamFjZW50KSB7XG4gICAgICAgIHVuZGlyZWN0ZWQuZ2V0KGtleSkucHVzaChhZGphY2VudCk7XG4gICAgICAgIHVuZGlyZWN0ZWQuZ2V0KGFkamFjZW50LmlkKS5wdXNoKHsgaWQ6IGtleSwgZ2FwOiBhZGphY2VudC5nYXAsIGRpcmVjdGlvbjogYWRqYWNlbnQuZGlyZWN0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5kaXJlY3RlZDtcbiAgfTtcblxuICAvLyByZXR1cm4gcmV2ZXJzZWQgKGRpcmVjdGlvbnMgaW52ZXJ0ZWQpIHZlcnNpb24gb2YgZ2l2ZW4gZGFnXG4gIHZhciBkYWdUb1JldmVyc2VkID0gZnVuY3Rpb24gZGFnVG9SZXZlcnNlZChkYWcpIHtcbiAgICB2YXIgcmV2ZXJzZWQgPSBuZXcgTWFwKCk7XG5cbiAgICBkYWcuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgcmV2ZXJzZWQuc2V0KGtleSwgW10pO1xuICAgIH0pO1xuXG4gICAgZGFnLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGFkamFjZW50KSB7XG4gICAgICAgIHJldmVyc2VkLmdldChhZGphY2VudC5pZCkucHVzaCh7IGlkOiBrZXksIGdhcDogYWRqYWNlbnQuZ2FwLCBkaXJlY3Rpb246IGFkamFjZW50LmRpcmVjdGlvbiB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJldmVyc2VkO1xuICB9O1xuXG4gIC8qKioqICBhcHBseSB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgaW5pdGlhbCBkcmFmdCBsYXlvdXQgdG8gYmV0dGVyIGFsaWduIHdpdGggY29uc3RyYWluZWQgbm9kZXMgKioqKi9cbiAgLy8gc29sdmUgdGhlIE9ydGhvZ29uYWwgUHJvY3J1c3RlYW4gUHJvYmxlbSB0byByb3RhdGUgYW5kL29yIHJlZmxlY3QgaW5pdGlhbCBkcmFmdCBsYXlvdXRcbiAgLy8gaGVyZSB3ZSBmb2xsb3cgdGhlIHNvbHV0aW9uIGluIENoYXB0ZXIgMjAuMiBvZiBCb3JnLCBJLiAmIEdyb2VuZW4sIFAuICgyMDA1KSBNb2Rlcm4gTXVsdGlkaW1lbnNpb25hbCBTY2FsaW5nOiBUaGVvcnkgYW5kIEFwcGxpY2F0aW9ucyBcblxuICAvKiBjb25zdHJ1Y3Qgc291cmNlIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbnMgKi9cblxuICB2YXIgdGFyZ2V0TWF0cml4ID0gW107IC8vIEEgLSB0YXJnZXQgY29uZmlndXJhdGlvblxuICB2YXIgc291cmNlTWF0cml4ID0gW107IC8vIEIgLSBzb3VyY2UgY29uZmlndXJhdGlvbiBcbiAgdmFyIHN0YW5kYXJkVHJhbnNmb3JtYXRpb24gPSBmYWxzZTsgLy8gZmFsc2UgZm9yIG5vIHRyYW5zZm9ybWF0aW9uLCB0cnVlIGZvciBzdGFuZGFydCAoUHJvY3J1c3RlcykgdHJhbnNmb3JtYXRpb24gKHJvdGF0aW9uIGFuZC9vciByZWZsZWN0aW9uKVxuICB2YXIgcmVmbGVjdGlvblR5cGUgPSBmYWxzZTsgLy8gZmFsc2UvdHJ1ZSBmb3IgcmVmbGVjdGlvbiBjaGVjaywgJ3JlZmxlY3RPblgnLCAncmVmbGVjdE9uWScgb3IgJ3JlZmxlY3RPbkJvdGgnIGZvciByZWZsZWN0aW9uIHR5cGUgaWYgbmVjZXNzYXJ5XG4gIHZhciBmaXhlZE5vZGVzID0gbmV3IFNldCgpO1xuICB2YXIgZGFnID0gbmV3IE1hcCgpOyAvLyBhZGphY2VuY3kgbGlzdCB0byBrZWVwIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKGRhZykgdGhhdCBjb25zaXN0cyBvZiByZWxhdGl2ZSBwbGFjZW1lbnQgY29uc3RyYWludHNcbiAgdmFyIGRhZ1VuZGlyZWN0ZWQgPSBuZXcgTWFwKCk7IC8vIHVuZGlyZWN0ZWQgdmVyc2lvbiBvZiB0aGUgZGFnXG4gIHZhciBjb21wb25lbnRzID0gW107IC8vIHdlYWtseSBjb25uZWN0ZWQgY29tcG9uZW50c1xuXG4gIC8vIGZpbGwgZml4ZWROb2RlcyBjb2xsZWN0aW9uIHRvIHVzZSBsYXRlclxuICBpZiAoY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCkge1xuICAgIGNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZURhdGEpIHtcbiAgICAgIGZpeGVkTm9kZXMuYWRkKG5vZGVEYXRhLm5vZGVJZCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb25zdHJ1Y3QgZGFnIGZyb20gcmVsYXRpdmUgcGxhY2VtZW50IGNvbnN0cmFpbnRzIFxuICBpZiAoY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgLy8gY29uc3RydWN0IGJvdGggZGlyZWN0ZWQgYW5kIHVuZGlyZWN0ZWQgdmVyc2lvbiBvZiB0aGUgZGFnXG4gICAgY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKGNvbnN0cmFpbnQpIHtcbiAgICAgIGlmIChjb25zdHJhaW50LmxlZnQpIHtcbiAgICAgICAgaWYgKGRhZy5oYXMoY29uc3RyYWludC5sZWZ0KSkge1xuICAgICAgICAgIGRhZy5nZXQoY29uc3RyYWludC5sZWZ0KS5wdXNoKHsgaWQ6IGNvbnN0cmFpbnQucmlnaHQsIGdhcDogY29uc3RyYWludC5nYXAsIGRpcmVjdGlvbjogXCJob3Jpem9udGFsXCIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGFnLnNldChjb25zdHJhaW50LmxlZnQsIFt7IGlkOiBjb25zdHJhaW50LnJpZ2h0LCBnYXA6IGNvbnN0cmFpbnQuZ2FwLCBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhZy5oYXMoY29uc3RyYWludC5yaWdodCkpIHtcbiAgICAgICAgICBkYWcuc2V0KGNvbnN0cmFpbnQucmlnaHQsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRhZy5oYXMoY29uc3RyYWludC50b3ApKSB7XG4gICAgICAgICAgZGFnLmdldChjb25zdHJhaW50LnRvcCkucHVzaCh7IGlkOiBjb25zdHJhaW50LmJvdHRvbSwgZ2FwOiBjb25zdHJhaW50LmdhcCwgZGlyZWN0aW9uOiBcInZlcnRpY2FsXCIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGFnLnNldChjb25zdHJhaW50LnRvcCwgW3sgaWQ6IGNvbnN0cmFpbnQuYm90dG9tLCBnYXA6IGNvbnN0cmFpbnQuZ2FwLCBkaXJlY3Rpb246IFwidmVydGljYWxcIiB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYWcuaGFzKGNvbnN0cmFpbnQuYm90dG9tKSkge1xuICAgICAgICAgIGRhZy5zZXQoY29uc3RyYWludC5ib3R0b20sIFtdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGFnVW5kaXJlY3RlZCA9IGRhZ1RvVW5kaXJlY3RlZChkYWcpO1xuICAgIGNvbXBvbmVudHMgPSBmaW5kQ29tcG9uZW50cyhkYWdVbmRpcmVjdGVkKTtcbiAgfVxuXG4gIGlmIChDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HKSB7XG4gICAgLy8gZmlyc3QgY2hlY2sgZml4ZWQgbm9kZSBjb25zdHJhaW50XG4gICAgaWYgKGNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQgJiYgY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVEYXRhLCBpKSB7XG4gICAgICAgIHRhcmdldE1hdHJpeFtpXSA9IFtub2RlRGF0YS5wb3NpdGlvbi54LCBub2RlRGF0YS5wb3NpdGlvbi55XTtcbiAgICAgICAgc291cmNlTWF0cml4W2ldID0gW3hDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVEYXRhLm5vZGVJZCldLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlRGF0YS5ub2RlSWQpXV07XG4gICAgICB9KTtcbiAgICAgIHN0YW5kYXJkVHJhbnNmb3JtYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gdGhlbiBjaGVjayBhbGlnbm1lbnQgY29uc3RyYWludFxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCkge1xuICAgICAgICAgIHZhciB2ZXJ0aWNhbEFsaWduID0gY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbDtcblxuICAgICAgICAgIHZhciBfbG9vcDIgPSBmdW5jdGlvbiBfbG9vcDIoX2k0KSB7XG4gICAgICAgICAgICB2YXIgYWxpZ25tZW50U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdmVydGljYWxBbGlnbltfaTRdLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgICBhbGlnbm1lbnRTZXQuYWRkKG5vZGVJZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0KFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYWxpZ25tZW50U2V0KSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaXhlZE5vZGVzLmhhcyh4KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHZhciB4UG9zID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5zaXplID4gMCkgeFBvcyA9IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGludGVyc2VjdGlvbi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTtlbHNlIHhQb3MgPSBjYWxjdWxhdGVBdmdQb3NpdGlvbihhbGlnbm1lbnRTZXQpLng7XG5cbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25bX2k0XS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0TWF0cml4W2NvdW50XSA9IFt4UG9zLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXV07XG4gICAgICAgICAgICAgIHNvdXJjZU1hdHJpeFtjb3VudF0gPSBbeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV0sIHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldXTtcbiAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCB2ZXJ0aWNhbEFsaWduLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgICAgICAgIF9sb29wMihfaTQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFuZGFyZFRyYW5zZm9ybWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgdmFyIGhvcml6b250YWxBbGlnbiA9IGNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbDtcblxuICAgICAgICAgIHZhciBfbG9vcDMgPSBmdW5jdGlvbiBfbG9vcDMoX2k1KSB7XG4gICAgICAgICAgICB2YXIgYWxpZ25tZW50U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduW19pNV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgIGFsaWdubWVudFNldC5hZGQobm9kZUlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGlnbm1lbnRTZXQpKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpeGVkTm9kZXMuaGFzKHgpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdmFyIHlQb3MgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uLnNpemUgPiAwKSB5UG9zID0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQoaW50ZXJzZWN0aW9uLnZhbHVlcygpLm5leHQoKS52YWx1ZSldO2Vsc2UgeVBvcyA9IGNhbGN1bGF0ZUF2Z1Bvc2l0aW9uKGFsaWdubWVudFNldCkueTtcblxuICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduW19pNV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgIHRhcmdldE1hdHJpeFtjb3VudF0gPSBbeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV0sIHlQb3NdO1xuICAgICAgICAgICAgICBzb3VyY2VNYXRyaXhbY291bnRdID0gW3hDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXV07XG4gICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgaG9yaXpvbnRhbEFsaWduLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgICAgICAgIF9sb29wMyhfaTUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFuZGFyZFRyYW5zZm9ybWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgICAgICAgcmVmbGVjdGlvblR5cGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0gZWxzZSBpZiAoY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgICAvLyBmaW5hbGx5IGNoZWNrIHJlbGF0aXZlIHBsYWNlbWVudCBjb25zdHJhaW50XG4gICAgICAvLyBmaW5kIGxhcmdlc3QgY29tcG9uZW50IGluIGRhZ1xuICAgICAgdmFyIGxhcmdlc3RDb21wb25lbnRTaXplID0gMDtcbiAgICAgIHZhciBsYXJnZXN0Q29tcG9uZW50SW5kZXggPSAwO1xuICAgICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgY29tcG9uZW50cy5sZW5ndGg7IF9pNisrKSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzW19pNl0ubGVuZ3RoID4gbGFyZ2VzdENvbXBvbmVudFNpemUpIHtcbiAgICAgICAgICBsYXJnZXN0Q29tcG9uZW50U2l6ZSA9IGNvbXBvbmVudHNbX2k2XS5sZW5ndGg7XG4gICAgICAgICAgbGFyZ2VzdENvbXBvbmVudEluZGV4ID0gX2k2O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBsYXJnZXN0IGNvbXBvbmVudCBpc24ndCBkb21pbmFudCwgdGhlbiB0YWtlIHRoZSB2b3RlcyBmb3IgcmVmbGVjdGlvblxuICAgICAgaWYgKGxhcmdlc3RDb21wb25lbnRTaXplIDwgZGFnVW5kaXJlY3RlZC5zaXplIC8gMikge1xuICAgICAgICBhcHBseVJlZmxlY3Rpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChjb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpO1xuICAgICAgICBzdGFuZGFyZFRyYW5zZm9ybWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHJlZmxlY3Rpb25UeXBlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1c2UgbGFyZ2VzdCBjb21wb25lbnQgZm9yIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgIC8vIGNvbnN0cnVjdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzdWJncmFwaHMgaW4gdGhlIGxhcmdlc3QgY29tcG9uZW50XG4gICAgICAgIHZhciBzdWJHcmFwaE9uSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIHN1YkdyYXBoT25WZXJ0aWNhbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRzSW5sYXJnZXN0Q29tcG9uZW50ID0gW107XG5cbiAgICAgICAgY29tcG9uZW50c1tsYXJnZXN0Q29tcG9uZW50SW5kZXhdLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgIGRhZy5nZXQobm9kZUlkKS5mb3JFYWNoKGZ1bmN0aW9uIChhZGphY2VudCkge1xuICAgICAgICAgICAgaWYgKGFkamFjZW50LmRpcmVjdGlvbiA9PSBcImhvcml6b250YWxcIikge1xuICAgICAgICAgICAgICBpZiAoc3ViR3JhcGhPbkhvcml6b250YWwuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5nZXQobm9kZUlkKS5wdXNoKGFkamFjZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5zZXQobm9kZUlkLCBbYWRqYWNlbnRdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIXN1YkdyYXBoT25Ib3Jpem9udGFsLmhhcyhhZGphY2VudC5pZCkpIHtcbiAgICAgICAgICAgICAgICBzdWJHcmFwaE9uSG9yaXpvbnRhbC5zZXQoYWRqYWNlbnQuaWQsIFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdHJhaW50c0lubGFyZ2VzdENvbXBvbmVudC5wdXNoKHsgbGVmdDogbm9kZUlkLCByaWdodDogYWRqYWNlbnQuaWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoc3ViR3JhcGhPblZlcnRpY2FsLmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLmdldChub2RlSWQpLnB1c2goYWRqYWNlbnQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YkdyYXBoT25WZXJ0aWNhbC5zZXQobm9kZUlkLCBbYWRqYWNlbnRdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIXN1YkdyYXBoT25WZXJ0aWNhbC5oYXMoYWRqYWNlbnQuaWQpKSB7XG4gICAgICAgICAgICAgICAgc3ViR3JhcGhPblZlcnRpY2FsLnNldChhZGphY2VudC5pZCwgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzSW5sYXJnZXN0Q29tcG9uZW50LnB1c2goeyB0b3A6IG5vZGVJZCwgYm90dG9tOiBhZGphY2VudC5pZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXBwbHlSZWZsZWN0aW9uRm9yUmVsYXRpdmVQbGFjZW1lbnQoY29uc3RyYWludHNJbmxhcmdlc3RDb21wb25lbnQpO1xuICAgICAgICByZWZsZWN0aW9uVHlwZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSBhcHByb3ByaWF0ZSBwb3NpdGlvbmluZyBmb3Igc3ViZ3JhcGhzXG4gICAgICAgIHZhciBwb3NpdGlvbk1hcEhvcml6b250YWwgPSBmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50KHN1YkdyYXBoT25Ib3Jpem9udGFsLCBcImhvcml6b250YWxcIik7XG4gICAgICAgIHZhciBwb3NpdGlvbk1hcFZlcnRpY2FsID0gZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChzdWJHcmFwaE9uVmVydGljYWwsIFwidmVydGljYWxcIik7XG5cbiAgICAgICAgLy8gY29uc3RydWN0IHNvdXJjZSBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29tcG9uZW50c1tsYXJnZXN0Q29tcG9uZW50SW5kZXhdLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCwgaSkge1xuICAgICAgICAgIHNvdXJjZU1hdHJpeFtpXSA9IFt4Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXSwgeUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV1dO1xuICAgICAgICAgIHRhcmdldE1hdHJpeFtpXSA9IFtdO1xuICAgICAgICAgIGlmIChwb3NpdGlvbk1hcEhvcml6b250YWwuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgIHRhcmdldE1hdHJpeFtpXVswXSA9IHBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQobm9kZUlkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0TWF0cml4W2ldWzBdID0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZUlkKV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3NpdGlvbk1hcFZlcnRpY2FsLmhhcyhub2RlSWQpKSB7XG4gICAgICAgICAgICB0YXJnZXRNYXRyaXhbaV1bMV0gPSBwb3NpdGlvbk1hcFZlcnRpY2FsLmdldChub2RlSWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRNYXRyaXhbaV1bMV0gPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YW5kYXJkVHJhbnNmb3JtYXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHRyYW5zZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB0aGVuIGNhbGN1bGF0ZSBhbmQgYXBwbHkgdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gICAgaWYgKHN0YW5kYXJkVHJhbnNmb3JtYXRpb24pIHtcbiAgICAgIC8qIGNhbGN1bGF0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKi9cbiAgICAgIHZhciB0cmFuc2Zvcm1hdGlvbk1hdHJpeCA9IHZvaWQgMDtcbiAgICAgIHZhciB0YXJnZXRNYXRyaXhUcmFuc3Bvc2UgPSBNYXRyaXgudHJhbnNwb3NlKHRhcmdldE1hdHJpeCk7IC8vIEEnXG4gICAgICB2YXIgc291cmNlTWF0cml4VHJhbnNwb3NlID0gTWF0cml4LnRyYW5zcG9zZShzb3VyY2VNYXRyaXgpOyAvLyBCJ1xuXG4gICAgICAvLyBjZW50cmFsaXplIHRyYW5zcG9zZSBtYXRyaWNlc1xuICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgdGFyZ2V0TWF0cml4VHJhbnNwb3NlLmxlbmd0aDsgX2k3KyspIHtcbiAgICAgICAgdGFyZ2V0TWF0cml4VHJhbnNwb3NlW19pN10gPSBNYXRyaXgubXVsdEdhbW1hKHRhcmdldE1hdHJpeFRyYW5zcG9zZVtfaTddKTtcbiAgICAgICAgc291cmNlTWF0cml4VHJhbnNwb3NlW19pN10gPSBNYXRyaXgubXVsdEdhbW1hKHNvdXJjZU1hdHJpeFRyYW5zcG9zZVtfaTddKTtcbiAgICAgIH1cblxuICAgICAgLy8gZG8gYWN0dWFsIGNhbGN1bGF0aW9uIGZvciB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgIHZhciB0ZW1wTWF0cml4ID0gTWF0cml4Lm11bHRNYXQodGFyZ2V0TWF0cml4VHJhbnNwb3NlLCBNYXRyaXgudHJhbnNwb3NlKHNvdXJjZU1hdHJpeFRyYW5zcG9zZSkpOyAvLyB0ZW1wTWF0cml4ID0gQSdCXG4gICAgICB2YXIgU1ZEUmVzdWx0ID0gU1ZELnN2ZCh0ZW1wTWF0cml4KTsgLy8gU1ZEKEEnQikgPSBVU1YnLCBzdmQgZnVuY3Rpb24gcmV0dXJucyBVLCBTIGFuZCBWIFxuICAgICAgdHJhbnNmb3JtYXRpb25NYXRyaXggPSBNYXRyaXgubXVsdE1hdChTVkRSZXN1bHQuViwgTWF0cml4LnRyYW5zcG9zZShTVkRSZXN1bHQuVSkpOyAvLyB0cmFuc2Zvcm1hdGlvbk1hdHJpeCA9IFQgPSBWVSdcblxuICAgICAgLyogYXBwbHkgZm91bmQgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIG9idGFpbiBmaW5hbCBkcmFmdCBsYXlvdXQgKi9cbiAgICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IG5vZGVJbmRleGVzLnNpemU7IF9pOCsrKSB7XG4gICAgICAgIHZhciB0ZW1wMSA9IFt4Q29vcmRzW19pOF0sIHlDb29yZHNbX2k4XV07XG4gICAgICAgIHZhciB0ZW1wMiA9IFt0cmFuc2Zvcm1hdGlvbk1hdHJpeFswXVswXSwgdHJhbnNmb3JtYXRpb25NYXRyaXhbMV1bMF1dO1xuICAgICAgICB2YXIgdGVtcDMgPSBbdHJhbnNmb3JtYXRpb25NYXRyaXhbMF1bMV0sIHRyYW5zZm9ybWF0aW9uTWF0cml4WzFdWzFdXTtcbiAgICAgICAgeENvb3Jkc1tfaThdID0gTWF0cml4LmRvdFByb2R1Y3QodGVtcDEsIHRlbXAyKTtcbiAgICAgICAgeUNvb3Jkc1tfaThdID0gTWF0cml4LmRvdFByb2R1Y3QodGVtcDEsIHRlbXAzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXBwbGllZCBvbmx5IGJvdGggYWxpZ25tZW50IGFuZCByZWwuIHBsYWNlbWVudCBjb25zdHJhaW50cyBleGlzdFxuICAgICAgaWYgKHJlZmxlY3Rpb25UeXBlKSB7XG4gICAgICAgIGFwcGx5UmVmbGVjdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50KGNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKENvU0VDb25zdGFudHMuRU5GT1JDRV9DT05TVFJBSU5UUykge1xuICAgIC8qKioqICBlbmZvcmNlIGNvbnN0cmFpbnRzIG9uIHRoZSB0cmFuc2Zvcm1lZCBkcmFmdCBsYXlvdXQgKioqKi9cblxuICAgIC8qIGZpcnN0IGVuZm9yY2UgZml4ZWQgbm9kZSBjb25zdHJhaW50ICovXG5cbiAgICBpZiAoY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCAmJiBjb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0cmFuc2xhdGlvbkFtb3VudCA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlRGF0YSwgaSkge1xuICAgICAgICB2YXIgcG9zSW5UaGVvcnkgPSB7IHg6IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVEYXRhLm5vZGVJZCldLCB5OiB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlRGF0YS5ub2RlSWQpXSB9O1xuICAgICAgICB2YXIgcG9zRGVzaXJlZCA9IG5vZGVEYXRhLnBvc2l0aW9uO1xuICAgICAgICB2YXIgcG9zRGlmZiA9IGNhbGN1bGF0ZVBvc2l0aW9uRGlmZihwb3NEZXNpcmVkLCBwb3NJblRoZW9yeSk7XG4gICAgICAgIHRyYW5zbGF0aW9uQW1vdW50LnggKz0gcG9zRGlmZi54O1xuICAgICAgICB0cmFuc2xhdGlvbkFtb3VudC55ICs9IHBvc0RpZmYueTtcbiAgICAgIH0pO1xuICAgICAgdHJhbnNsYXRpb25BbW91bnQueCAvPSBjb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aDtcbiAgICAgIHRyYW5zbGF0aW9uQW1vdW50LnkgLz0gY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg7XG5cbiAgICAgIHhDb29yZHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgeENvb3Jkc1tpXSArPSB0cmFuc2xhdGlvbkFtb3VudC54O1xuICAgICAgfSk7XG5cbiAgICAgIHlDb29yZHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgeUNvb3Jkc1tpXSArPSB0cmFuc2xhdGlvbkFtb3VudC55O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZURhdGEpIHtcbiAgICAgICAgeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZURhdGEubm9kZUlkKV0gPSBub2RlRGF0YS5wb3NpdGlvbi54O1xuICAgICAgICB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlRGF0YS5ub2RlSWQpXSA9IG5vZGVEYXRhLnBvc2l0aW9uLnk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiB0aGVuIGVuZm9yY2UgYWxpZ25tZW50IGNvbnN0cmFpbnQgKi9cblxuICAgIGlmIChjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KSB7XG4gICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCkge1xuICAgICAgICB2YXIgeEFsaWduID0gY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbDtcblxuICAgICAgICB2YXIgX2xvb3A0ID0gZnVuY3Rpb24gX2xvb3A0KF9pOSkge1xuICAgICAgICAgIHZhciBhbGlnbm1lbnRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgeEFsaWduW19pOV0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBhbGlnbm1lbnRTZXQuYWRkKG5vZGVJZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGlnbm1lbnRTZXQpKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXhlZE5vZGVzLmhhcyh4KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdmFyIHhQb3MgPSB2b2lkIDA7XG4gICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5zaXplID4gMCkgeFBvcyA9IHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGludGVyc2VjdGlvbi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTtlbHNlIHhQb3MgPSBjYWxjdWxhdGVBdmdQb3NpdGlvbihhbGlnbm1lbnRTZXQpLng7XG5cbiAgICAgICAgICBhbGlnbm1lbnRTZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAoIWZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldID0geFBvcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCB4QWxpZ24ubGVuZ3RoOyBfaTkrKykge1xuICAgICAgICAgIF9sb29wNChfaTkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKSB7XG4gICAgICAgIHZhciB5QWxpZ24gPSBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWw7XG5cbiAgICAgICAgdmFyIF9sb29wNSA9IGZ1bmN0aW9uIF9sb29wNShfaTEwKSB7XG4gICAgICAgICAgdmFyIGFsaWdubWVudFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB5QWxpZ25bX2kxMF0uZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBhbGlnbm1lbnRTZXQuYWRkKG5vZGVJZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBTZXQoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhbGlnbm1lbnRTZXQpKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXhlZE5vZGVzLmhhcyh4KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdmFyIHlQb3MgPSB2b2lkIDA7XG4gICAgICAgICAgaWYgKGludGVyc2VjdGlvbi5zaXplID4gMCkgeVBvcyA9IHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGludGVyc2VjdGlvbi52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTtlbHNlIHlQb3MgPSBjYWxjdWxhdGVBdmdQb3NpdGlvbihhbGlnbm1lbnRTZXQpLnk7XG5cbiAgICAgICAgICBhbGlnbm1lbnRTZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAoIWZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldID0geVBvcztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBfaTEwID0gMDsgX2kxMCA8IHlBbGlnbi5sZW5ndGg7IF9pMTArKykge1xuICAgICAgICAgIF9sb29wNShfaTEwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGZpbmFsbHkgZW5mb3JjZSByZWxhdGl2ZSBwbGFjZW1lbnQgY29uc3RyYWludCAqL1xuXG4gICAgaWYgKGNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCkge1xuICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBkdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50ID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50ID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgZHVtbXlQb3NpdGlvbnNGb3JWZXJ0aWNhbEFsaWdubWVudCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGR1bW15UG9zaXRpb25zRm9ySG9yaXpvbnRhbEFsaWdubWVudCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGZpeGVkTm9kZXNPbkhvcml6b250YWwgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBmaXhlZE5vZGVzT25WZXJ0aWNhbCA9IG5ldyBTZXQoKTtcblxuICAgICAgICAvLyBmaWxsIG1hcHMgYW5kIHNldHMgICAgICBcbiAgICAgICAgZml4ZWROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICBmaXhlZE5vZGVzT25Ib3Jpem9udGFsLmFkZChub2RlSWQpO1xuICAgICAgICAgIGZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZChub2RlSWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgICAgIGlmIChjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB2YXIgdmVydGljYWxBbGlnbm1lbnQgPSBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsO1xuXG4gICAgICAgICAgICB2YXIgX2xvb3A2ID0gZnVuY3Rpb24gX2xvb3A2KF9pMTEpIHtcbiAgICAgICAgICAgICAgZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgX2kxMSwgW10pO1xuICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudFtfaTExXS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgICBub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50LnNldChub2RlSWQsIFwiZHVtbXlcIiArIF9pMTEpO1xuICAgICAgICAgICAgICAgIGR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KFwiZHVtbXlcIiArIF9pMTEpLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoZml4ZWROb2Rlcy5oYXMobm9kZUlkKSkge1xuICAgICAgICAgICAgICAgICAgZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoXCJkdW1teVwiICsgX2kxMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZHVtbXlQb3NpdGlvbnNGb3JWZXJ0aWNhbEFsaWdubWVudC5zZXQoXCJkdW1teVwiICsgX2kxMSwgeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQodmVydGljYWxBbGlnbm1lbnRbX2kxMV1bMF0pXSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaTExID0gMDsgX2kxMSA8IHZlcnRpY2FsQWxpZ25tZW50Lmxlbmd0aDsgX2kxMSsrKSB7XG4gICAgICAgICAgICAgIF9sb29wNihfaTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdmFyIGhvcml6b250YWxBbGlnbm1lbnQgPSBjb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWw7XG5cbiAgICAgICAgICAgIHZhciBfbG9vcDcgPSBmdW5jdGlvbiBfbG9vcDcoX2kxMikge1xuICAgICAgICAgICAgICBkdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KFwiZHVtbXlcIiArIF9pMTIsIFtdKTtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudFtfaTEyXS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlSWQpIHtcbiAgICAgICAgICAgICAgICBub2RlVG9EdW1teUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KG5vZGVJZCwgXCJkdW1teVwiICsgX2kxMik7XG4gICAgICAgICAgICAgICAgZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChcImR1bW15XCIgKyBfaTEyKS5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpeGVkTm9kZXMuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgICAgICAgICAgIGZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZChcImR1bW15XCIgKyBfaTEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkdW1teVBvc2l0aW9uc0Zvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KFwiZHVtbXlcIiArIF9pMTIsIHlDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGhvcml6b250YWxBbGlnbm1lbnRbX2kxMl1bMF0pXSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaTEyID0gMDsgX2kxMiA8IGhvcml6b250YWxBbGlnbm1lbnQubGVuZ3RoOyBfaTEyKyspIHtcbiAgICAgICAgICAgICAgX2xvb3A3KF9pMTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnN0cnVjdCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBkYWdzIChzdWJncmFwaHMpIGZyb20gb3ZlcmFsbCBkYWdcbiAgICAgICAgdmFyIGRhZ09uSG9yaXpvbnRhbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGRhZ09uVmVydGljYWwgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgdmFyIF9sb29wOCA9IGZ1bmN0aW9uIF9sb29wOChub2RlSWQpIHtcbiAgICAgICAgICBkYWcuZ2V0KG5vZGVJZCkuZm9yRWFjaChmdW5jdGlvbiAoYWRqYWNlbnQpIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2VJZCA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKGFkamFjZW50W1wiZGlyZWN0aW9uXCJdID09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUlkID0gbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQobm9kZUlkKSA/IG5vZGVUb0R1bW15Rm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KG5vZGVJZCkgOiBub2RlSWQ7XG4gICAgICAgICAgICAgIGlmIChub2RlVG9EdW1teUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChhZGphY2VudC5pZCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0geyBpZDogbm9kZVRvRHVtbXlGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoYWRqYWNlbnQuaWQpLCBnYXA6IGFkamFjZW50LmdhcCwgZGlyZWN0aW9uOiBhZGphY2VudC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gYWRqYWNlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhZ09uSG9yaXpvbnRhbC5oYXMoc291cmNlSWQpKSB7XG4gICAgICAgICAgICAgICAgZGFnT25Ib3Jpem9udGFsLmdldChzb3VyY2VJZCkucHVzaCh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYWdPbkhvcml6b250YWwuc2V0KHNvdXJjZUlkLCBbdGFyZ2V0Tm9kZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghZGFnT25Ib3Jpem9udGFsLmhhcyh0YXJnZXROb2RlLmlkKSkge1xuICAgICAgICAgICAgICAgIGRhZ09uSG9yaXpvbnRhbC5zZXQodGFyZ2V0Tm9kZS5pZCwgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzb3VyY2VJZCA9IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkKSA/IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobm9kZUlkKSA6IG5vZGVJZDtcbiAgICAgICAgICAgICAgaWYgKG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoYWRqYWNlbnQuaWQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IHsgaWQ6IG5vZGVUb0R1bW15Rm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoYWRqYWNlbnQuaWQpLCBnYXA6IGFkamFjZW50LmdhcCwgZGlyZWN0aW9uOiBhZGphY2VudC5kaXJlY3Rpb24gfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlID0gYWRqYWNlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhZ09uVmVydGljYWwuaGFzKHNvdXJjZUlkKSkge1xuICAgICAgICAgICAgICAgIGRhZ09uVmVydGljYWwuZ2V0KHNvdXJjZUlkKS5wdXNoKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhZ09uVmVydGljYWwuc2V0KHNvdXJjZUlkLCBbdGFyZ2V0Tm9kZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghZGFnT25WZXJ0aWNhbC5oYXModGFyZ2V0Tm9kZS5pZCkpIHtcbiAgICAgICAgICAgICAgICBkYWdPblZlcnRpY2FsLnNldCh0YXJnZXROb2RlLmlkLCBbXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I1ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I1ID0gZGFnLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwNTsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IChfc3RlcDUgPSBfaXRlcmF0b3I1Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFyIG5vZGVJZCA9IF9zdGVwNS52YWx1ZTtcblxuICAgICAgICAgICAgX2xvb3A4KG5vZGVJZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluZCBzb3VyY2Ugbm9kZXMgb2YgZWFjaCBjb21wb25lbnQgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGFnc1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjUgPSB0cnVlO1xuICAgICAgICAgIF9pdGVyYXRvckVycm9yNSA9IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSAmJiBfaXRlcmF0b3I1LnJldHVybikge1xuICAgICAgICAgICAgICBfaXRlcmF0b3I1LnJldHVybigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3I1KSB7XG4gICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdW5kaXJlY3RlZE9uSG9yaXpvbnRhbCA9IGRhZ1RvVW5kaXJlY3RlZChkYWdPbkhvcml6b250YWwpO1xuICAgICAgICB2YXIgdW5kaXJlY3RlZE9uVmVydGljYWwgPSBkYWdUb1VuZGlyZWN0ZWQoZGFnT25WZXJ0aWNhbCk7XG4gICAgICAgIHZhciBjb21wb25lbnRzT25Ib3Jpem9udGFsID0gZmluZENvbXBvbmVudHModW5kaXJlY3RlZE9uSG9yaXpvbnRhbCk7XG4gICAgICAgIHZhciBjb21wb25lbnRzT25WZXJ0aWNhbCA9IGZpbmRDb21wb25lbnRzKHVuZGlyZWN0ZWRPblZlcnRpY2FsKTtcbiAgICAgICAgdmFyIHJldmVyc2VkRGFnT25Ib3Jpem9udGFsID0gZGFnVG9SZXZlcnNlZChkYWdPbkhvcml6b250YWwpO1xuICAgICAgICB2YXIgcmV2ZXJzZWREYWdPblZlcnRpY2FsID0gZGFnVG9SZXZlcnNlZChkYWdPblZlcnRpY2FsKTtcbiAgICAgICAgdmFyIGNvbXBvbmVudFNvdXJjZXNPbkhvcml6b250YWwgPSBbXTtcbiAgICAgICAgdmFyIGNvbXBvbmVudFNvdXJjZXNPblZlcnRpY2FsID0gW107XG5cbiAgICAgICAgY29tcG9uZW50c09uSG9yaXpvbnRhbC5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgY29tcG9uZW50U291cmNlc09uSG9yaXpvbnRhbFtpbmRleF0gPSBbXTtcbiAgICAgICAgICBjb21wb25lbnQuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAocmV2ZXJzZWREYWdPbkhvcml6b250YWwuZ2V0KG5vZGVJZCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50U291cmNlc09uSG9yaXpvbnRhbFtpbmRleF0ucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21wb25lbnRzT25WZXJ0aWNhbC5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgY29tcG9uZW50U291cmNlc09uVmVydGljYWxbaW5kZXhdID0gW107XG4gICAgICAgICAgY29tcG9uZW50LmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgaWYgKHJldmVyc2VkRGFnT25WZXJ0aWNhbC5nZXQobm9kZUlkKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICBjb21wb25lbnRTb3VyY2VzT25WZXJ0aWNhbFtpbmRleF0ucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgYXBwcm9wcmlhdGUgcG9zaXRpb25pbmcgZm9yIHN1YmdyYXBoc1xuICAgICAgICB2YXIgcG9zaXRpb25NYXBIb3Jpem9udGFsID0gZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudChkYWdPbkhvcml6b250YWwsIFwiaG9yaXpvbnRhbFwiLCBmaXhlZE5vZGVzT25Ib3Jpem9udGFsLCBkdW1teVBvc2l0aW9uc0ZvclZlcnRpY2FsQWxpZ25tZW50LCBjb21wb25lbnRTb3VyY2VzT25Ib3Jpem9udGFsKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uTWFwVmVydGljYWwgPSBmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50KGRhZ09uVmVydGljYWwsIFwidmVydGljYWxcIiwgZml4ZWROb2Rlc09uVmVydGljYWwsIGR1bW15UG9zaXRpb25zRm9ySG9yaXpvbnRhbEFsaWdubWVudCwgY29tcG9uZW50U291cmNlc09uVmVydGljYWwpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnMgb2YgdGhlIG5vZGVzIGJhc2VkIG9uIHJlbGF0aXZlIHBsYWNlbWVudCBjb25zdHJhaW50c1xuXG4gICAgICAgIHZhciBfbG9vcDkgPSBmdW5jdGlvbiBfbG9vcDkoa2V5KSB7XG4gICAgICAgICAgaWYgKGR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIGR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZUlkKSB7XG4gICAgICAgICAgICAgIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KG5vZGVJZCldID0gcG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhDb29yZHNbbm9kZUluZGV4ZXMuZ2V0KGtleSldID0gcG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I2ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjYgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I2ID0gcG9zaXRpb25NYXBIb3Jpem9udGFsLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwNjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiA9IChfc3RlcDYgPSBfaXRlcmF0b3I2Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IF9zdGVwNi52YWx1ZTtcblxuICAgICAgICAgICAgX2xvb3A5KGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjYgPSB0cnVlO1xuICAgICAgICAgIF9pdGVyYXRvckVycm9yNiA9IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiAmJiBfaXRlcmF0b3I2LnJldHVybikge1xuICAgICAgICAgICAgICBfaXRlcmF0b3I2LnJldHVybigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3I2KSB7XG4gICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2xvb3AxMCA9IGZ1bmN0aW9uIF9sb29wMTAoa2V5KSB7XG4gICAgICAgICAgaWYgKGR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoa2V5KSkge1xuICAgICAgICAgICAgZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChrZXkpLmZvckVhY2goZnVuY3Rpb24gKG5vZGVJZCkge1xuICAgICAgICAgICAgICB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlSWQpXSA9IHBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQoa2V5KV0gPSBwb3NpdGlvbk1hcFZlcnRpY2FsLmdldChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSB0cnVlO1xuICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3I3ID0gZmFsc2U7XG4gICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjcgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I3ID0gcG9zaXRpb25NYXBWZXJ0aWNhbC5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDc7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSAoX3N0ZXA3ID0gX2l0ZXJhdG9yNy5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNyA9IHRydWUpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDcudmFsdWU7XG5cbiAgICAgICAgICAgIF9sb29wMTAoa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNyA9IHRydWU7XG4gICAgICAgICAgX2l0ZXJhdG9yRXJyb3I3ID0gZXJyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ICYmIF9pdGVyYXRvcjcucmV0dXJuKSB7XG4gICAgICAgICAgICAgIF9pdGVyYXRvcjcucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjcpIHtcbiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9XG4gIH1cblxuICAvLyBhc3NpZ24gbmV3IGNvb3JkaW5hdGVzIHRvIG5vZGVzIGFmdGVyIGNvbnN0cmFpbnQgaGFuZGxpbmdcbiAgZm9yICh2YXIgX2kxMyA9IDA7IF9pMTMgPCBhbGxOb2Rlcy5sZW5ndGg7IF9pMTMrKykge1xuICAgIHZhciBfbm9kZSA9IGFsbE5vZGVzW19pMTNdO1xuICAgIGlmIChfbm9kZS5nZXRDaGlsZCgpID09IG51bGwpIHtcbiAgICAgIF9ub2RlLnNldENlbnRlcih4Q29vcmRzW25vZGVJbmRleGVzLmdldChfbm9kZS5pZCldLCB5Q29vcmRzW25vZGVJbmRleGVzLmdldChfbm9kZS5pZCldKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uc3RyYWludEhhbmRsZXI7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1NTE6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzU1MV9fO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gc3RhcnR1cFxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xuLyoqKioqKi8gfSkoKVxuO1xufSk7IiwKICAgICIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJjb3NlLWJhc2VcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiY29zZS1iYXNlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImN5dG9zY2FwZUZjb3NlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwiY29zZS1iYXNlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJjeXRvc2NhcGVGY29zZVwiXSA9IGZhY3Rvcnkocm9vdFtcImNvc2VCYXNlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzE0MF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKCgpID0+IHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHRcInVzZSBzdHJpY3RcIjtcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xuXG4vKioqLyA2NTg6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5cblxuLy8gU2ltcGxlLCBpbnRlcm5hbCBPYmplY3QuYXNzaWduKCkgcG9seWZpbGwgZm9yIG9wdGlvbnMgb2JqZWN0cyBldGMuXG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiAhPSBudWxsID8gT2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCkgOiBmdW5jdGlvbiAodGd0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzcmNzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNyY3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgc3Jjcy5mb3JFYWNoKGZ1bmN0aW9uIChzcmMpIHtcbiAgICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiB0Z3Rba10gPSBzcmNba107XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0Z3Q7XG59O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTQ4OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIF9zbGljZWRUb0FycmF5ID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH0gfTsgfSgpO1xuXG4vKlxuICogQXV4aWxpYXJ5IGZ1bmN0aW9uc1xuICovXG5cbnZhciBMaW5rZWRMaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLmxheW91dEJhc2UuTGlua2VkTGlzdDtcblxudmFyIGF1eGlsaWFyeSA9IHt9O1xuXG4vLyBnZXQgdGhlIHRvcCBtb3N0IG5vZGVzXG5hdXhpbGlhcnkuZ2V0VG9wTW9zdE5vZGVzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gIHZhciBub2Rlc01hcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbm9kZXNNYXBbbm9kZXNbaV0uaWQoKV0gPSB0cnVlO1xuICB9XG4gIHZhciByb290cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgaWYgKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGVsZSA9IGk7XG4gICAgfVxuICAgIHZhciBwYXJlbnQgPSBlbGUucGFyZW50KClbMF07XG4gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICBpZiAobm9kZXNNYXBbcGFyZW50LmlkKCldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiByb290cztcbn07XG5cbi8vIGZpbmQgZGlzY29ubmVjdGVkIGNvbXBvbmVudHMgYW5kIGNyZWF0ZSBkdW1teSBub2RlcyB0aGF0IGNvbm5lY3QgdGhlbVxuYXV4aWxpYXJ5LmNvbm5lY3RDb21wb25lbnRzID0gZnVuY3Rpb24gKGN5LCBlbGVzLCB0b3BNb3N0Tm9kZXMsIGR1bW15Tm9kZXMpIHtcbiAgdmFyIHF1ZXVlID0gbmV3IExpbmtlZExpc3QoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciB2aXNpdGVkVG9wTW9zdE5vZGVzID0gW107XG4gIHZhciBjdXJyZW50TmVpZ2hib3IgPSB2b2lkIDA7XG4gIHZhciBtaW5EZWdyZWVOb2RlID0gdm9pZCAwO1xuICB2YXIgbWluRGVncmVlID0gdm9pZCAwO1xuXG4gIHZhciBpc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB2YXIgY291bnQgPSAxO1xuICB2YXIgbm9kZXNDb25uZWN0ZWRUb0R1bW15ID0gW107XG4gIHZhciBjb21wb25lbnRzID0gW107XG5cbiAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgdmFyIGNtcHQgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgY29tcG9uZW50cy5wdXNoKGNtcHQpO1xuXG4gICAgdmFyIGN1cnJlbnROb2RlID0gdG9wTW9zdE5vZGVzWzBdO1xuICAgIHZhciBjaGlsZHJlbk9mQ3VycmVudE5vZGUgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgY2hpbGRyZW5PZkN1cnJlbnROb2RlLm1lcmdlKGN1cnJlbnROb2RlKS5tZXJnZShjdXJyZW50Tm9kZS5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbihlbGVzKSk7XG4gICAgdmlzaXRlZFRvcE1vc3ROb2Rlcy5wdXNoKGN1cnJlbnROb2RlKTtcblxuICAgIGNoaWxkcmVuT2ZDdXJyZW50Tm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBxdWV1ZS5wdXNoKG5vZGUpO1xuICAgICAgdmlzaXRlZC5hZGQobm9kZSk7XG4gICAgICBjbXB0Lm1lcmdlKG5vZGUpO1xuICAgIH0pO1xuXG4gICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMigpIHtcbiAgICAgIGN1cnJlbnROb2RlID0gcXVldWUuc2hpZnQoKTtcblxuICAgICAgLy8gVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGlzIG5vZGVcbiAgICAgIHZhciBuZWlnaGJvck5vZGVzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgY3VycmVudE5vZGUubmVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChlbGVzLmludGVyc2VjdGlvbihjdXJyZW50Tm9kZS5lZGdlc1dpdGgobm9kZSkpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBuZWlnaGJvck5vZGVzLm1lcmdlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWlnaGJvck5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZWlnaGJvck5vZGUgPSBuZWlnaGJvck5vZGVzW2ldO1xuICAgICAgICBjdXJyZW50TmVpZ2hib3IgPSB0b3BNb3N0Tm9kZXMuaW50ZXJzZWN0aW9uKG5laWdoYm9yTm9kZS51bmlvbihuZWlnaGJvck5vZGUuYW5jZXN0b3JzKCkpKTtcbiAgICAgICAgaWYgKGN1cnJlbnROZWlnaGJvciAhPSBudWxsICYmICF2aXNpdGVkLmhhcyhjdXJyZW50TmVpZ2hib3JbMF0pKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuT2ZOZWlnaGJvciA9IGN1cnJlbnROZWlnaGJvci51bmlvbihjdXJyZW50TmVpZ2hib3IuZGVzY2VuZGFudHMoKSk7XG5cbiAgICAgICAgICBjaGlsZHJlbk9mTmVpZ2hib3IuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcXVldWUucHVzaChub2RlKTtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKG5vZGUpO1xuICAgICAgICAgICAgY21wdC5tZXJnZShub2RlKTtcbiAgICAgICAgICAgIGlmICh0b3BNb3N0Tm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgIHZpc2l0ZWRUb3BNb3N0Tm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoICE9IDApIHtcbiAgICAgIF9sb29wMigpO1xuICAgIH1cblxuICAgIGNtcHQuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgZWxlcy5pbnRlcnNlY3Rpb24obm9kZS5jb25uZWN0ZWRFZGdlcygpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vIGNvbm5lY3RlZEVkZ2VzKCkgdXN1YWxseSBjYWNoZWRcbiAgICAgICAgaWYgKGNtcHQuaGFzKGUuc291cmNlKCkpICYmIGNtcHQuaGFzKGUudGFyZ2V0KCkpKSB7XG4gICAgICAgICAgLy8gaGFzKCkgaXMgY2hlYXBcbiAgICAgICAgICBjbXB0Lm1lcmdlKGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh2aXNpdGVkVG9wTW9zdE5vZGVzLmxlbmd0aCA9PSB0b3BNb3N0Tm9kZXMubGVuZ3RoKSB7XG4gICAgICBpc0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0Nvbm5lY3RlZCB8fCBpc0Nvbm5lY3RlZCAmJiBjb3VudCA+IDEpIHtcbiAgICAgIG1pbkRlZ3JlZU5vZGUgPSB2aXNpdGVkVG9wTW9zdE5vZGVzWzBdO1xuICAgICAgbWluRGVncmVlID0gbWluRGVncmVlTm9kZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtcbiAgICAgIHZpc2l0ZWRUb3BNb3N0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCA8IG1pbkRlZ3JlZSkge1xuICAgICAgICAgIG1pbkRlZ3JlZSA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg7XG4gICAgICAgICAgbWluRGVncmVlTm9kZSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbm9kZXNDb25uZWN0ZWRUb0R1bW15LnB1c2gobWluRGVncmVlTm9kZS5pZCgpKTtcbiAgICAgIC8vIFRPIERPOiBDaGVjayBlZmZpY2llbmN5IG9mIHRoaXMgcGFydFxuICAgICAgdmFyIHRlbXAgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICB0ZW1wLm1lcmdlKHZpc2l0ZWRUb3BNb3N0Tm9kZXNbMF0pO1xuICAgICAgdmlzaXRlZFRvcE1vc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHRlbXAubWVyZ2Uobm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHZpc2l0ZWRUb3BNb3N0Tm9kZXMgPSBbXTtcbiAgICAgIHRvcE1vc3ROb2RlcyA9IHRvcE1vc3ROb2Rlcy5kaWZmZXJlbmNlKHRlbXApO1xuICAgICAgY291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgZG8ge1xuICAgIF9sb29wKCk7XG4gIH0gd2hpbGUgKCFpc0Nvbm5lY3RlZCk7XG5cbiAgaWYgKGR1bW15Tm9kZXMpIHtcbiAgICBpZiAobm9kZXNDb25uZWN0ZWRUb0R1bW15Lmxlbmd0aCA+IDApIHtcbiAgICAgIGR1bW15Tm9kZXMuc2V0KCdkdW1teScgKyAoZHVtbXlOb2Rlcy5zaXplICsgMSksIG5vZGVzQ29ubmVjdGVkVG9EdW1teSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wb25lbnRzO1xufTtcblxuLy8gcmVsb2NhdGVzIGNvbXBvbmVudFJlc3VsdCB0byBvcmlnaW5hbENlbnRlciBpZiB0aGVyZSBpcyBubyBmaXhlZE5vZGVDb25zdHJhaW50XG5hdXhpbGlhcnkucmVsb2NhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxDZW50ZXIsIGNvbXBvbmVudFJlc3VsdCwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMuZml4ZWROb2RlQ29uc3RyYWludCkge1xuICAgIHZhciBtaW5YQ29vcmQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgdmFyIG1heFhDb29yZCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgbWluWUNvb3JkID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIHZhciBtYXhZQ29vcmQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIpIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSBjdXJyZW50IGJvdW5kaW5nIGJveFxuICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IGNvbXBvbmVudFJlc3VsdC5ub2RlSW5kZXhlc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgICAgICB2YXIgX3JlZiA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMik7XG5cbiAgICAgICAgICB2YXIga2V5ID0gX3JlZjJbMF07XG4gICAgICAgICAgdmFyIHZhbHVlID0gX3JlZjJbMV07XG5cbiAgICAgICAgICB2YXIgY3lOb2RlID0gb3B0aW9ucy5jeS5nZXRFbGVtZW50QnlJZChrZXkpO1xuICAgICAgICAgIGlmIChjeU5vZGUpIHtcbiAgICAgICAgICAgIHZhciBub2RlQkIgPSBjeU5vZGUuYm91bmRpbmdCb3goKTtcbiAgICAgICAgICAgIHZhciBsZWZ0WCA9IGNvbXBvbmVudFJlc3VsdC54Q29vcmRzW3ZhbHVlXSAtIG5vZGVCQi53IC8gMjtcbiAgICAgICAgICAgIHZhciByaWdodFggPSBjb21wb25lbnRSZXN1bHQueENvb3Jkc1t2YWx1ZV0gKyBub2RlQkIudyAvIDI7XG4gICAgICAgICAgICB2YXIgdG9wWSA9IGNvbXBvbmVudFJlc3VsdC55Q29vcmRzW3ZhbHVlXSAtIG5vZGVCQi5oIC8gMjtcbiAgICAgICAgICAgIHZhciBib3R0b21ZID0gY29tcG9uZW50UmVzdWx0LnlDb29yZHNbdmFsdWVdICsgbm9kZUJCLmggLyAyO1xuXG4gICAgICAgICAgICBpZiAobGVmdFggPCBtaW5YQ29vcmQpIG1pblhDb29yZCA9IGxlZnRYO1xuICAgICAgICAgICAgaWYgKHJpZ2h0WCA+IG1heFhDb29yZCkgbWF4WENvb3JkID0gcmlnaHRYO1xuICAgICAgICAgICAgaWYgKHRvcFkgPCBtaW5ZQ29vcmQpIG1pbllDb29yZCA9IHRvcFk7XG4gICAgICAgICAgICBpZiAoYm90dG9tWSA+IG1heFlDb29yZCkgbWF4WUNvb3JkID0gYm90dG9tWTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBhbmQgb3JpZ2luYWwgY2VudGVyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRpZmZPblggPSBvcmlnaW5hbENlbnRlci54IC0gKG1heFhDb29yZCArIG1pblhDb29yZCkgLyAyO1xuICAgICAgdmFyIGRpZmZPblkgPSBvcmlnaW5hbENlbnRlci55IC0gKG1heFlDb29yZCArIG1pbllDb29yZCkgLyAyO1xuICAgICAgLy8gbW92ZSBjb21wb25lbnQgdG8gb3JpZ2luYWwgY2VudGVyXG4gICAgICBjb21wb25lbnRSZXN1bHQueENvb3JkcyA9IGNvbXBvbmVudFJlc3VsdC54Q29vcmRzLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCArIGRpZmZPblg7XG4gICAgICB9KTtcbiAgICAgIGNvbXBvbmVudFJlc3VsdC55Q29vcmRzID0gY29tcG9uZW50UmVzdWx0LnlDb29yZHMubWFwKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgIHJldHVybiB5ICsgZGlmZk9uWTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjYWxjdWxhdGUgY3VycmVudCBib3VuZGluZyBib3hcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudFJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgbm9kZSA9IGNvbXBvbmVudFJlc3VsdFtpdGVtXTtcbiAgICAgICAgdmFyIGxlZnRYID0gbm9kZS5nZXRSZWN0KCkueDtcbiAgICAgICAgdmFyIHJpZ2h0WCA9IG5vZGUuZ2V0UmVjdCgpLnggKyBub2RlLmdldFJlY3QoKS53aWR0aDtcbiAgICAgICAgdmFyIHRvcFkgPSBub2RlLmdldFJlY3QoKS55O1xuICAgICAgICB2YXIgYm90dG9tWSA9IG5vZGUuZ2V0UmVjdCgpLnkgKyBub2RlLmdldFJlY3QoKS5oZWlnaHQ7XG5cbiAgICAgICAgaWYgKGxlZnRYIDwgbWluWENvb3JkKSBtaW5YQ29vcmQgPSBsZWZ0WDtcbiAgICAgICAgaWYgKHJpZ2h0WCA+IG1heFhDb29yZCkgbWF4WENvb3JkID0gcmlnaHRYO1xuICAgICAgICBpZiAodG9wWSA8IG1pbllDb29yZCkgbWluWUNvb3JkID0gdG9wWTtcbiAgICAgICAgaWYgKGJvdHRvbVkgPiBtYXhZQ29vcmQpIG1heFlDb29yZCA9IGJvdHRvbVk7XG4gICAgICB9KTtcbiAgICAgIC8vIGZpbmQgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgYW5kIG9yaWdpbmFsIGNlbnRlclxuICAgICAgdmFyIF9kaWZmT25YID0gb3JpZ2luYWxDZW50ZXIueCAtIChtYXhYQ29vcmQgKyBtaW5YQ29vcmQpIC8gMjtcbiAgICAgIHZhciBfZGlmZk9uWSA9IG9yaWdpbmFsQ2VudGVyLnkgLSAobWF4WUNvb3JkICsgbWluWUNvb3JkKSAvIDI7XG4gICAgICAvLyBtb3ZlIGNvbXBvbmVudCB0byBvcmlnaW5hbCBjZW50ZXJcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudFJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgbm9kZSA9IGNvbXBvbmVudFJlc3VsdFtpdGVtXTtcbiAgICAgICAgbm9kZS5zZXRDZW50ZXIobm9kZS5nZXRDZW50ZXJYKCkgKyBfZGlmZk9uWCwgbm9kZS5nZXRDZW50ZXJZKCkgKyBfZGlmZk9uWSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbmF1eGlsaWFyeS5jYWxjQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgeENvb3JkcywgeUNvb3Jkcywgbm9kZUluZGV4ZXMpIHtcbiAgLy8gY2FsY3VsYXRlIGJvdW5kc1xuICB2YXIgbGVmdCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICB2YXIgcmlnaHQgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcbiAgdmFyIHRvcCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICB2YXIgYm90dG9tID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gIHZhciBub2RlTGVmdCA9IHZvaWQgMDtcbiAgdmFyIG5vZGVSaWdodCA9IHZvaWQgMDtcbiAgdmFyIG5vZGVUb3AgPSB2b2lkIDA7XG4gIHZhciBub2RlQm90dG9tID0gdm9pZCAwO1xuXG4gIHZhciBub2RlcyA9IHBhcmVudE5vZGUuZGVzY2VuZGFudHMoKS5ub3QoXCI6cGFyZW50XCIpO1xuICB2YXIgcyA9IG5vZGVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgbm9kZUxlZnQgPSB4Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlLmlkKCkpXSAtIG5vZGUud2lkdGgoKSAvIDI7XG4gICAgbm9kZVJpZ2h0ID0geENvb3Jkc1tub2RlSW5kZXhlcy5nZXQobm9kZS5pZCgpKV0gKyBub2RlLndpZHRoKCkgLyAyO1xuICAgIG5vZGVUb3AgPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlLmlkKCkpXSAtIG5vZGUuaGVpZ2h0KCkgLyAyO1xuICAgIG5vZGVCb3R0b20gPSB5Q29vcmRzW25vZGVJbmRleGVzLmdldChub2RlLmlkKCkpXSArIG5vZGUuaGVpZ2h0KCkgLyAyO1xuXG4gICAgaWYgKGxlZnQgPiBub2RlTGVmdCkge1xuICAgICAgbGVmdCA9IG5vZGVMZWZ0O1xuICAgIH1cblxuICAgIGlmIChyaWdodCA8IG5vZGVSaWdodCkge1xuICAgICAgcmlnaHQgPSBub2RlUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKHRvcCA+IG5vZGVUb3ApIHtcbiAgICAgIHRvcCA9IG5vZGVUb3A7XG4gICAgfVxuXG4gICAgaWYgKGJvdHRvbSA8IG5vZGVCb3R0b20pIHtcbiAgICAgIGJvdHRvbSA9IG5vZGVCb3R0b207XG4gICAgfVxuICB9XG5cbiAgdmFyIGJvdW5kaW5nQm94ID0ge307XG4gIGJvdW5kaW5nQm94LnRvcExlZnRYID0gbGVmdDtcbiAgYm91bmRpbmdCb3gudG9wTGVmdFkgPSB0b3A7XG4gIGJvdW5kaW5nQm94LndpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICBib3VuZGluZ0JveC5oZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gIHJldHVybiBib3VuZGluZ0JveDtcbn07XG5cbi8vIFRoaXMgZnVuY3Rpb24gZmluZHMgYW5kIHJldHVybnMgcGFyZW50IG5vZGVzIHdob3NlIGFsbCBjaGlsZHJlbiBhcmUgaGlkZGVuXG5hdXhpbGlhcnkuY2FsY1BhcmVudHNXaXRob3V0Q2hpbGRyZW4gPSBmdW5jdGlvbiAoY3ksIGVsZXMpIHtcbiAgdmFyIHBhcmVudHNXaXRob3V0Q2hpbGRyZW4gPSBjeS5jb2xsZWN0aW9uKCk7XG4gIGVsZXMubm9kZXMoJzpwYXJlbnQnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICB2YXIgY2hlY2sgPSBmYWxzZTtcbiAgICBwYXJlbnQuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLmNzcygnZGlzcGxheScpICE9ICdub25lJykge1xuICAgICAgICBjaGVjayA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFjaGVjaykge1xuICAgICAgcGFyZW50c1dpdGhvdXRDaGlsZHJlbi5tZXJnZShwYXJlbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmVudHNXaXRob3V0Q2hpbGRyZW47XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF1eGlsaWFyeTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgxNjpcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcblxuXG5cbi8qKlxuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBvc3Rwcm9jZXNzaW5nIHBhcnQgdGhhdCBhcHBsaWVzIENvU0UgbGF5b3V0IG92ZXIgdGhlIHNwZWN0cmFsIGxheW91dFxuKi9cblxudmFyIGF1eCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ4KTtcbnZhciBDb1NFTGF5b3V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLkNvU0VMYXlvdXQ7XG52YXIgQ29TRU5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkuQ29TRU5vZGU7XG52YXIgUG9pbnREID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLmxheW91dEJhc2UuUG9pbnREO1xudmFyIERpbWVuc2lvbkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkubGF5b3V0QmFzZS5EaW1lbnNpb25EO1xudmFyIExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cztcbnZhciBGRExheW91dENvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzO1xudmFyIENvU0VDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkuQ29TRUNvbnN0YW50cztcblxuLy8gbWFpbiBmdW5jdGlvbiB0aGF0IGNvc2UgbGF5b3V0IGlzIHByb2Nlc3NlZFxudmFyIGNvc2VMYXlvdXQgPSBmdW5jdGlvbiBjb3NlTGF5b3V0KG9wdGlvbnMsIHNwZWN0cmFsUmVzdWx0KSB7XG5cbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKTtcbiAgdmFyIGVkZ2VzID0gZWxlcy5lZGdlcygpO1xuXG4gIHZhciBub2RlSW5kZXhlcyA9IHZvaWQgMDtcbiAgdmFyIHhDb29yZHMgPSB2b2lkIDA7XG4gIHZhciB5Q29vcmRzID0gdm9pZCAwO1xuICB2YXIgaWRUb0xOb2RlID0ge307XG5cbiAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgbm9kZUluZGV4ZXMgPSBzcGVjdHJhbFJlc3VsdFtcIm5vZGVJbmRleGVzXCJdO1xuICAgIHhDb29yZHMgPSBzcGVjdHJhbFJlc3VsdFtcInhDb29yZHNcIl07XG4gICAgeUNvb3JkcyA9IHNwZWN0cmFsUmVzdWx0W1wieUNvb3Jkc1wiXTtcbiAgfVxuXG4gIHZhciBpc0ZuID0gZnVuY3Rpb24gaXNGbihmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbic7XG4gIH07XG5cbiAgdmFyIG9wdEZuID0gZnVuY3Rpb24gb3B0Rm4ob3B0LCBlbGUpIHtcbiAgICBpZiAoaXNGbihvcHQpKSB7XG4gICAgICByZXR1cm4gb3B0KGVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHQ7XG4gICAgfVxuICB9O1xuXG4gIC8qKioqIFBvc3Rwcm9jZXNzaW5nIGZ1bmN0aW9ucyAqKioqL1xuXG4gIHZhciBwYXJlbnRzV2l0aG91dENoaWxkcmVuID0gYXV4LmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKGN5LCBlbGVzKTtcblxuICAvLyB0cmFuc2ZlciBjeXRvc2NhcGUgbm9kZXMgdG8gY29zZSBub2Rlc1xuICB2YXIgcHJvY2Vzc0NoaWxkcmVuTGlzdCA9IGZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbkxpc3QocGFyZW50LCBjaGlsZHJlbiwgbGF5b3V0LCBvcHRpb25zKSB7XG4gICAgdmFyIHNpemUgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhciB0aGVDaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGNoaWxkcmVuX29mX2NoaWxkcmVuID0gbnVsbDtcbiAgICAgIGlmICh0aGVDaGlsZC5pbnRlcnNlY3Rpb24ocGFyZW50c1dpdGhvdXRDaGlsZHJlbikubGVuZ3RoID09IDApIHtcbiAgICAgICAgY2hpbGRyZW5fb2ZfY2hpbGRyZW4gPSB0aGVDaGlsZC5jaGlsZHJlbigpO1xuICAgICAgfVxuICAgICAgdmFyIHRoZU5vZGUgPSB2b2lkIDA7XG5cbiAgICAgIHZhciBkaW1lbnNpb25zID0gdGhlQ2hpbGQubGF5b3V0RGltZW5zaW9ucyh7XG4gICAgICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogb3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHNcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhlQ2hpbGQub3V0ZXJXaWR0aCgpICE9IG51bGwgJiYgdGhlQ2hpbGQub3V0ZXJIZWlnaHQoKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnJhbmRvbWl6ZSkge1xuICAgICAgICAgIGlmICghdGhlQ2hpbGQuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQoeENvb3Jkc1tub2RlSW5kZXhlcy5nZXQodGhlQ2hpbGQuaWQoKSldIC0gZGltZW5zaW9ucy53IC8gMiwgeUNvb3Jkc1tub2RlSW5kZXhlcy5nZXQodGhlQ2hpbGQuaWQoKSldIC0gZGltZW5zaW9ucy5oIC8gMiksIG5ldyBEaW1lbnNpb25EKHBhcnNlRmxvYXQoZGltZW5zaW9ucy53KSwgcGFyc2VGbG9hdChkaW1lbnNpb25zLmgpKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50SW5mbyA9IGF1eC5jYWxjQm91bmRpbmdCb3godGhlQ2hpbGQsIHhDb29yZHMsIHlDb29yZHMsIG5vZGVJbmRleGVzKTtcbiAgICAgICAgICAgIGlmICh0aGVDaGlsZC5pbnRlcnNlY3Rpb24ocGFyZW50c1dpdGhvdXRDaGlsZHJlbikubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQocGFyZW50SW5mby50b3BMZWZ0WCwgcGFyZW50SW5mby50b3BMZWZ0WSksIG5ldyBEaW1lbnNpb25EKHBhcmVudEluZm8ud2lkdGgsIHBhcmVudEluZm8uaGVpZ2h0KSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gZm9yIHRoZSBwYXJlbnRzV2l0aG91dENoaWxkcmVuXG4gICAgICAgICAgICAgIHRoZU5vZGUgPSBwYXJlbnQuYWRkKG5ldyBDb1NFTm9kZShsYXlvdXQuZ3JhcGhNYW5hZ2VyLCBuZXcgUG9pbnREKHBhcmVudEluZm8udG9wTGVmdFgsIHBhcmVudEluZm8udG9wTGVmdFkpLCBuZXcgRGltZW5zaW9uRChwYXJzZUZsb2F0KGRpbWVuc2lvbnMudyksIHBhcnNlRmxvYXQoZGltZW5zaW9ucy5oKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhlTm9kZSA9IHBhcmVudC5hZGQobmV3IENvU0VOb2RlKGxheW91dC5ncmFwaE1hbmFnZXIsIG5ldyBQb2ludEQodGhlQ2hpbGQucG9zaXRpb24oJ3gnKSAtIGRpbWVuc2lvbnMudyAvIDIsIHRoZUNoaWxkLnBvc2l0aW9uKCd5JykgLSBkaW1lbnNpb25zLmggLyAyKSwgbmV3IERpbWVuc2lvbkQocGFyc2VGbG9hdChkaW1lbnNpb25zLncpLCBwYXJzZUZsb2F0KGRpbWVuc2lvbnMuaCkpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoZU5vZGUgPSBwYXJlbnQuYWRkKG5ldyBDb1NFTm9kZSh0aGlzLmdyYXBoTWFuYWdlcikpO1xuICAgICAgfVxuICAgICAgLy8gQXR0YWNoIGlkIHRvIHRoZSBsYXlvdXQgbm9kZSBhbmQgcmVwdWxzaW9uIHZhbHVlXG4gICAgICB0aGVOb2RlLmlkID0gdGhlQ2hpbGQuZGF0YShcImlkXCIpO1xuICAgICAgdGhlTm9kZS5ub2RlUmVwdWxzaW9uID0gb3B0Rm4ob3B0aW9ucy5ub2RlUmVwdWxzaW9uLCB0aGVDaGlsZCk7XG4gICAgICAvLyBBdHRhY2ggdGhlIHBhZGRpbmdzIG9mIGN5IG5vZGUgdG8gbGF5b3V0IG5vZGVcbiAgICAgIHRoZU5vZGUucGFkZGluZ0xlZnQgPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG4gICAgICB0aGVOb2RlLnBhZGRpbmdUb3AgPSBwYXJzZUludCh0aGVDaGlsZC5jc3MoJ3BhZGRpbmcnKSk7XG4gICAgICB0aGVOb2RlLnBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcbiAgICAgIHRoZU5vZGUucGFkZGluZ0JvdHRvbSA9IHBhcnNlSW50KHRoZUNoaWxkLmNzcygncGFkZGluZycpKTtcblxuICAgICAgLy9BdHRhY2ggdGhlIGxhYmVsIHByb3BlcnRpZXMgdG8gYm90aCBjb21wb3VuZCBhbmQgc2ltcGxlIG5vZGVzIGlmIGxhYmVscyB3aWxsIGJlIGluY2x1ZGVkIGluIG5vZGUgZGltZW5zaW9uc1xuICAgICAgLy9UaGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgdXNlZCB3aGlsZSB1cGRhdGluZyBib3VuZHMgb2YgY29tcG91bmRzIGR1cmluZyBpdGVyYXRpb25zIG9yIHRpbGluZ1xuICAgICAgLy9hbmQgd2lsbCBiZSB1c2VkIGZvciBzaW1wbGUgbm9kZXMgd2hpbGUgdHJhbnNmZXJyaW5nIGZpbmFsIHBvc2l0aW9ucyB0byBjeXRvc2NhcGVcbiAgICAgIGlmIChvcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscykge1xuICAgICAgICB0aGVOb2RlLmxhYmVsV2lkdGggPSB0aGVDaGlsZC5ib3VuZGluZ0JveCh7IGluY2x1ZGVMYWJlbHM6IHRydWUsIGluY2x1ZGVOb2RlczogZmFsc2UsIGluY2x1ZGVPdmVybGF5czogZmFsc2UgfSkudztcbiAgICAgICAgdGhlTm9kZS5sYWJlbEhlaWdodCA9IHRoZUNoaWxkLmJvdW5kaW5nQm94KHsgaW5jbHVkZUxhYmVsczogdHJ1ZSwgaW5jbHVkZU5vZGVzOiBmYWxzZSwgaW5jbHVkZU92ZXJsYXlzOiBmYWxzZSB9KS5oO1xuICAgICAgICB0aGVOb2RlLmxhYmVsUG9zVmVydGljYWwgPSB0aGVDaGlsZC5jc3MoXCJ0ZXh0LXZhbGlnblwiKTtcbiAgICAgICAgdGhlTm9kZS5sYWJlbFBvc0hvcml6b250YWwgPSB0aGVDaGlsZC5jc3MoXCJ0ZXh0LWhhbGlnblwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFwIHRoZSBsYXlvdXQgbm9kZVxuICAgICAgaWRUb0xOb2RlW3RoZUNoaWxkLmRhdGEoXCJpZFwiKV0gPSB0aGVOb2RlO1xuXG4gICAgICBpZiAoaXNOYU4odGhlTm9kZS5yZWN0LngpKSB7XG4gICAgICAgIHRoZU5vZGUucmVjdC54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmFOKHRoZU5vZGUucmVjdC55KSkge1xuICAgICAgICB0aGVOb2RlLnJlY3QueSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZHJlbl9vZl9jaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuX29mX2NoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRoZU5ld0dyYXBoID0gdm9pZCAwO1xuICAgICAgICB0aGVOZXdHcmFwaCA9IGxheW91dC5nZXRHcmFwaE1hbmFnZXIoKS5hZGQobGF5b3V0Lm5ld0dyYXBoKCksIHRoZU5vZGUpO1xuICAgICAgICBwcm9jZXNzQ2hpbGRyZW5MaXN0KHRoZU5ld0dyYXBoLCBjaGlsZHJlbl9vZl9jaGlsZHJlbiwgbGF5b3V0LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gdHJhbnNmZXIgY3l0b3NjYXBlIGVkZ2VzIHRvIGNvc2UgZWRnZXNcbiAgdmFyIHByb2Nlc3NFZGdlcyA9IGZ1bmN0aW9uIHByb2Nlc3NFZGdlcyhsYXlvdXQsIGdtLCBlZGdlcykge1xuICAgIHZhciBpZGVhbExlbmd0aFRvdGFsID0gMDtcbiAgICB2YXIgZWRnZUNvdW50ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgdmFyIHNvdXJjZU5vZGUgPSBpZFRvTE5vZGVbZWRnZS5kYXRhKFwic291cmNlXCIpXTtcbiAgICAgIHZhciB0YXJnZXROb2RlID0gaWRUb0xOb2RlW2VkZ2UuZGF0YShcInRhcmdldFwiKV07XG4gICAgICBpZiAoc291cmNlTm9kZSAmJiB0YXJnZXROb2RlICYmIHNvdXJjZU5vZGUgIT09IHRhcmdldE5vZGUgJiYgc291cmNlTm9kZS5nZXRFZGdlc0JldHdlZW4odGFyZ2V0Tm9kZSkubGVuZ3RoID09IDApIHtcbiAgICAgICAgdmFyIGUxID0gZ20uYWRkKGxheW91dC5uZXdFZGdlKCksIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUpO1xuICAgICAgICBlMS5pZCA9IGVkZ2UuaWQoKTtcbiAgICAgICAgZTEuaWRlYWxMZW5ndGggPSBvcHRGbihvcHRpb25zLmlkZWFsRWRnZUxlbmd0aCwgZWRnZSk7XG4gICAgICAgIGUxLmVkZ2VFbGFzdGljaXR5ID0gb3B0Rm4ob3B0aW9ucy5lZGdlRWxhc3RpY2l0eSwgZWRnZSk7XG4gICAgICAgIGlkZWFsTGVuZ3RoVG90YWwgKz0gZTEuaWRlYWxMZW5ndGg7XG4gICAgICAgIGVkZ2VDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaWRlYWwgZWRnZSBsZW5ndGggY29uc3RhbnQgd2l0aCB0aGUgYXZnLiBpZGVhbCBsZW5ndGggdmFsdWUgYWZ0ZXIgcHJvY2Vzc2luZyBlZGdlc1xuICAgIC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gZWRnZSwgdXNlIG90aGVyIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucy5pZGVhbEVkZ2VMZW5ndGggIT0gbnVsbCkge1xuICAgICAgaWYgKGVkZ2VDb3VudCA+IDApIENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBpZGVhbExlbmd0aFRvdGFsIC8gZWRnZUNvdW50O2Vsc2UgaWYgKCFpc0ZuKG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoKSkgLy8gaW4gY2FzZSB0aGVyZSBpcyBubyBlZGdlLCBidXQgb3B0aW9uIGdpdmVzIGEgdmFsdWUgdG8gdXNlXG4gICAgICAgIENvU0VDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEggPSBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aDtlbHNlIC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gZWRnZSBhbmQgd2UgY2Fubm90IGdldCBhIHZhbHVlIGZyb20gb3B0aW9uIChiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbilcbiAgICAgICAgQ29TRUNvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9FREdFX0xFTkdUSCA9IDUwO1xuICAgICAgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlc2UgY29uc3RhbnQgdmFsdWVzIGJhc2VkIG9uIHRoZSBpZGVhbCBlZGdlIGxlbmd0aCBjb25zdGFudFxuICAgICAgQ29TRUNvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QgPSBGRExheW91dENvbnN0YW50cy5NSU5fUkVQVUxTSU9OX0RJU1QgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0VER0VfTEVOR1RIIC8gMTAuMDtcbiAgICAgIENvU0VDb25zdGFudHMuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfRURHRV9MRU5HVEg7XG4gICAgfVxuICB9O1xuXG4gIC8vIHRyYW5zZmVyIGN5dG9zY2FwZSBjb25zdHJhaW50cyB0byBjb3NlIGxheW91dFxuICB2YXIgcHJvY2Vzc0NvbnN0cmFpbnRzID0gZnVuY3Rpb24gcHJvY2Vzc0NvbnN0cmFpbnRzKGxheW91dCwgb3B0aW9ucykge1xuICAgIC8vIGdldCBub2RlcyB0byBiZSBmaXhlZFxuICAgIGlmIChvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQpIHtcbiAgICAgIGxheW91dC5jb25zdHJhaW50c1tcImZpeGVkTm9kZUNvbnN0cmFpbnRcIl0gPSBvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQ7XG4gICAgfVxuICAgIC8vIGdldCBub2RlcyB0byBiZSBhbGlnbmVkXG4gICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgbGF5b3V0LmNvbnN0cmFpbnRzW1wiYWxpZ25tZW50Q29uc3RyYWludFwiXSA9IG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludDtcbiAgICB9XG4gICAgLy8gZ2V0IG5vZGVzIHRvIGJlIHJlbGF0aXZlbHkgcGxhY2VkXG4gICAgaWYgKG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KSB7XG4gICAgICBsYXlvdXQuY29uc3RyYWludHNbXCJyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnRcIl0gPSBvcHRpb25zLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDtcbiAgICB9XG4gIH07XG5cbiAgLyoqKiogQXBwbHkgcG9zdHByb2Nlc3NpbmcgKioqKi9cbiAgaWYgKG9wdGlvbnMubmVzdGluZ0ZhY3RvciAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IgPSBGRExheW91dENvbnN0YW50cy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SID0gb3B0aW9ucy5uZXN0aW5nRmFjdG9yO1xuICBpZiAob3B0aW9ucy5ncmF2aXR5ICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5O1xuICBpZiAob3B0aW9ucy5udW1JdGVyICE9IG51bGwpIENvU0VDb25zdGFudHMuTUFYX0lURVJBVElPTlMgPSBGRExheW91dENvbnN0YW50cy5NQVhfSVRFUkFUSU9OUyA9IG9wdGlvbnMubnVtSXRlcjtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eVJhbmdlICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZTtcbiAgaWYgKG9wdGlvbnMuZ3Jhdml0eUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gRkRMYXlvdXRDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIID0gb3B0aW9ucy5ncmF2aXR5Q29tcG91bmQ7XG4gIGlmIChvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kICE9IG51bGwpIENvU0VDb25zdGFudHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUiA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IgPSBvcHRpb25zLmdyYXZpdHlSYW5nZUNvbXBvdW5kO1xuICBpZiAob3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCAhPSBudWxsKSBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMID0gb3B0aW9ucy5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDtcblxuICBpZiAob3B0aW9ucy50aWxpbmdDb21wYXJlQnkgIT0gbnVsbCkgQ29TRUNvbnN0YW50cy5USUxJTkdfQ09NUEFSRV9CWSA9IG9wdGlvbnMudGlsaW5nQ29tcGFyZUJ5O1xuXG4gIGlmIChvcHRpb25zLnF1YWxpdHkgPT0gJ3Byb29mJykgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAyO2Vsc2UgTGF5b3V0Q29uc3RhbnRzLlFVQUxJVFkgPSAwO1xuXG4gIENvU0VDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gRkRMYXlvdXRDb25zdGFudHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTID0gTGF5b3V0Q29uc3RhbnRzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyA9IG9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzO1xuICBDb1NFQ29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBGRExheW91dENvbnN0YW50cy5ERUZBVUxUX0lOQ1JFTUVOVEFMID0gTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSAhb3B0aW9ucy5yYW5kb21pemU7XG4gIENvU0VDb25zdGFudHMuQU5JTUFURSA9IEZETGF5b3V0Q29uc3RhbnRzLkFOSU1BVEUgPSBMYXlvdXRDb25zdGFudHMuQU5JTUFURSA9IG9wdGlvbnMuYW5pbWF0ZTtcbiAgQ29TRUNvbnN0YW50cy5USUxFID0gb3B0aW9ucy50aWxlO1xuICBDb1NFQ29uc3RhbnRzLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMID0gdHlwZW9mIG9wdGlvbnMudGlsaW5nUGFkZGluZ1ZlcnRpY2FsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpIDogb3B0aW9ucy50aWxpbmdQYWRkaW5nVmVydGljYWw7XG4gIENvU0VDb25zdGFudHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCA9IHR5cGVvZiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCkgOiBvcHRpb25zLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsO1xuXG4gIENvU0VDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IEZETGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfSU5DUkVNRU5UQUwgPSBMYXlvdXRDb25zdGFudHMuREVGQVVMVF9JTkNSRU1FTlRBTCA9IHRydWU7XG4gIENvU0VDb25zdGFudHMuUFVSRV9JTkNSRU1FTlRBTCA9ICFvcHRpb25zLnJhbmRvbWl6ZTtcbiAgTGF5b3V0Q29uc3RhbnRzLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMgPSBvcHRpb25zLnVuaWZvcm1Ob2RlRGltZW5zaW9ucztcblxuICAvLyBUaGlzIHBhcnQgaXMgZm9yIGRlYnVnL2RlbW8gcHVycG9zZVxuICBpZiAob3B0aW9ucy5zdGVwID09IFwidHJhbnNmb3JtZWRcIikge1xuICAgIENvU0VDb25zdGFudHMuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkcgPSB0cnVlO1xuICAgIENvU0VDb25zdGFudHMuRU5GT1JDRV9DT05TVFJBSU5UUyA9IGZhbHNlO1xuICAgIENvU0VDb25zdGFudHMuQVBQTFlfTEFZT1VUID0gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMuc3RlcCA9PSBcImVuZm9yY2VkXCIpIHtcbiAgICBDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5FTkZPUkNFX0NPTlNUUkFJTlRTID0gdHJ1ZTtcbiAgICBDb1NFQ29uc3RhbnRzLkFQUExZX0xBWU9VVCA9IGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zLnN0ZXAgPT0gXCJjb3NlXCIpIHtcbiAgICBDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5FTkZPUkNFX0NPTlNUUkFJTlRTID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5BUFBMWV9MQVlPVVQgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLnN0ZXAgPT0gXCJhbGxcIikge1xuICAgIGlmIChvcHRpb25zLnJhbmRvbWl6ZSkgQ29TRUNvbnN0YW50cy5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORyA9IHRydWU7ZWxzZSBDb1NFQ29uc3RhbnRzLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HID0gZmFsc2U7XG4gICAgQ29TRUNvbnN0YW50cy5FTkZPUkNFX0NPTlNUUkFJTlRTID0gdHJ1ZTtcbiAgICBDb1NFQ29uc3RhbnRzLkFQUExZX0xBWU9VVCA9IHRydWU7XG4gIH1cblxuICBpZiAob3B0aW9ucy5maXhlZE5vZGVDb25zdHJhaW50IHx8IG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludCB8fCBvcHRpb25zLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCkge1xuICAgIENvU0VDb25zdGFudHMuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBDb1NFQ29uc3RhbnRzLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjb3NlTGF5b3V0ID0gbmV3IENvU0VMYXlvdXQoKTtcbiAgdmFyIGdtID0gY29zZUxheW91dC5uZXdHcmFwaE1hbmFnZXIoKTtcblxuICBwcm9jZXNzQ2hpbGRyZW5MaXN0KGdtLmFkZFJvb3QoKSwgYXV4LmdldFRvcE1vc3ROb2Rlcyhub2RlcyksIGNvc2VMYXlvdXQsIG9wdGlvbnMpO1xuICBwcm9jZXNzRWRnZXMoY29zZUxheW91dCwgZ20sIGVkZ2VzKTtcbiAgcHJvY2Vzc0NvbnN0cmFpbnRzKGNvc2VMYXlvdXQsIG9wdGlvbnMpO1xuXG4gIGNvc2VMYXlvdXQucnVuTGF5b3V0KCk7XG5cbiAgcmV0dXJuIGlkVG9MTm9kZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geyBjb3NlTGF5b3V0OiBjb3NlTGF5b3V0IH07XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMTI6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4vKipcbiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmY29zZSBsYXlvdXQgYWxnb3JpdGhtXG4qL1xuXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NTgpO1xudmFyIGF1eCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ4KTtcblxudmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NTcpLFxuICAgIHNwZWN0cmFsTGF5b3V0ID0gX3JlcXVpcmUuc3BlY3RyYWxMYXlvdXQ7XG5cbnZhciBfcmVxdWlyZTIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxNiksXG4gICAgY29zZUxheW91dCA9IF9yZXF1aXJlMi5jb3NlTGF5b3V0O1xuXG52YXIgZGVmYXVsdHMgPSBPYmplY3QuZnJlZXplKHtcblxuICAvLyAnZHJhZnQnLCAnZGVmYXVsdCcgb3IgJ3Byb29mJyBcbiAgLy8gLSAnZHJhZnQnIG9ubHkgYXBwbGllcyBzcGVjdHJhbCBsYXlvdXQgXG4gIC8vIC0gJ2RlZmF1bHQnIGltcHJvdmVzIHRoZSBxdWFsaXR5IHdpdGggc3Vic2VxdWVudCBDb1NFIGxheW91dCAoZmFzdCBjb29saW5nIHJhdGUpXG4gIC8vIC0gJ3Byb29mJyBpbXByb3ZlcyB0aGUgcXVhbGl0eSB3aXRoIHN1YnNlcXVlbnQgQ29TRSBsYXlvdXQgKHNsb3cgY29vbGluZyByYXRlKSBcbiAgcXVhbGl0eTogXCJkZWZhdWx0XCIsXG4gIC8vIFVzZSByYW5kb20gbm9kZSBwb3NpdGlvbnMgYXQgYmVnaW5uaW5nIG9mIGxheW91dFxuICAvLyBpZiB0aGlzIGlzIHNldCB0byBmYWxzZSwgdGhlbiBxdWFsaXR5IG9wdGlvbiBtdXN0IGJlIFwicHJvb2ZcIlxuICByYW5kb21pemU6IHRydWUsXG4gIC8vIFdoZXRoZXIgb3Igbm90IHRvIGFuaW1hdGUgdGhlIGxheW91dFxuICBhbmltYXRlOiB0cnVlLFxuICAvLyBEdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMsIGlmIGVuYWJsZWRcbiAgYW5pbWF0aW9uRHVyYXRpb246IDEwMDAsXG4gIC8vIEVhc2luZyBvZiBhbmltYXRpb24sIGlmIGVuYWJsZWRcbiAgYW5pbWF0aW9uRWFzaW5nOiB1bmRlZmluZWQsXG4gIC8vIEZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIHJlcG9zaXRpb25lZCBub2Rlc1xuICBmaXQ6IHRydWUsXG4gIC8vIFBhZGRpbmcgYXJvdW5kIGxheW91dFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gV2hldGhlciB0byBpbmNsdWRlIGxhYmVscyBpbiBub2RlIGRpbWVuc2lvbnMuIFZhbGlkIGluIFwicHJvb2ZcIiBxdWFsaXR5XG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gIC8vIFdoZXRoZXIgb3Igbm90IHNpbXBsZSBub2RlcyAobm9uLWNvbXBvdW5kIG5vZGVzKSBhcmUgb2YgdW5pZm9ybSBkaW1lbnNpb25zXG4gIHVuaWZvcm1Ob2RlRGltZW5zaW9uczogZmFsc2UsXG4gIC8vIFdoZXRoZXIgdG8gcGFjayBkaXNjb25uZWN0ZWQgY29tcG9uZW50cyAtIHZhbGlkIG9ubHkgaWYgcmFuZG9taXplOiB0cnVlXG4gIHBhY2tDb21wb25lbnRzOiB0cnVlLFxuICAvLyBMYXlvdXQgc3RlcCAtIGFsbCwgdHJhbnNmb3JtZWQsIGVuZm9yY2VkLCBjb3NlIC0gZm9yIGRlYnVnIHB1cnBvc2Ugb25seVxuICBzdGVwOiBcImFsbFwiLFxuXG4gIC8qIHNwZWN0cmFsIGxheW91dCBvcHRpb25zICovXG5cbiAgLy8gRmFsc2UgZm9yIHJhbmRvbSwgdHJ1ZSBmb3IgZ3JlZWR5XG4gIHNhbXBsaW5nVHlwZTogdHJ1ZSxcbiAgLy8gU2FtcGxlIHNpemUgdG8gY29uc3RydWN0IGRpc3RhbmNlIG1hdHJpeFxuICBzYW1wbGVTaXplOiAyNSxcbiAgLy8gU2VwYXJhdGlvbiBhbW91bnQgYmV0d2VlbiBub2Rlc1xuICBub2RlU2VwYXJhdGlvbjogNzUsXG4gIC8vIFBvd2VyIGl0ZXJhdGlvbiB0b2xlcmFuY2VcbiAgcGlUb2w6IDAuMDAwMDAwMSxcblxuICAvKiBDb1NFIGxheW91dCBvcHRpb25zICovXG5cbiAgLy8gTm9kZSByZXB1bHNpb24gKG5vbiBvdmVybGFwcGluZykgbXVsdGlwbGllclxuICBub2RlUmVwdWxzaW9uOiBmdW5jdGlvbiBub2RlUmVwdWxzaW9uKG5vZGUpIHtcbiAgICByZXR1cm4gNDUwMDtcbiAgfSxcbiAgLy8gSWRlYWwgZWRnZSAobm9uIG5lc3RlZCkgbGVuZ3RoXG4gIGlkZWFsRWRnZUxlbmd0aDogZnVuY3Rpb24gaWRlYWxFZGdlTGVuZ3RoKGVkZ2UpIHtcbiAgICByZXR1cm4gNTA7XG4gIH0sXG4gIC8vIERpdmlzb3IgdG8gY29tcHV0ZSBlZGdlIGZvcmNlc1xuICBlZGdlRWxhc3RpY2l0eTogZnVuY3Rpb24gZWRnZUVsYXN0aWNpdHkoZWRnZSkge1xuICAgIHJldHVybiAwLjQ1O1xuICB9LFxuICAvLyBOZXN0aW5nIGZhY3RvciAobXVsdGlwbGllcikgdG8gY29tcHV0ZSBpZGVhbCBlZGdlIGxlbmd0aCBmb3IgbmVzdGVkIGVkZ2VzXG4gIG5lc3RpbmdGYWN0b3I6IDAuMSxcbiAgLy8gR3Jhdml0eSBmb3JjZSAoY29uc3RhbnQpXG4gIGdyYXZpdHk6IDAuMjUsXG4gIC8vIE1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybVxuICBudW1JdGVyOiAyNTAwLFxuICAvLyBGb3IgZW5hYmxpbmcgdGlsaW5nXG4gIHRpbGU6IHRydWUsXG4gIC8vIFRoZSBmdW5jdGlvbiB0aGF0IHNwZWNpZmllcyB0aGUgY3JpdGVyaWEgZm9yIGNvbXBhcmluZyBub2RlcyB3aGlsZSBzb3J0aW5nIHRoZW0gZHVyaW5nIHRpbGluZyBvcGVyYXRpb24uXG4gIC8vIFRha2VzIHRoZSBub2RlIGlkIGFzIGEgcGFyYW1ldGVyIGFuZCB0aGUgZGVmYXVsdCB0aWxpbmcgb3BlcmF0aW9uIGlzIHBlcmZvbWVkIHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldC5cbiAgdGlsaW5nQ29tcGFyZUJ5OiB1bmRlZmluZWQsXG4gIC8vIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiB0aGUgdmVydGljYWwgc3BhY2UgdG8gcHV0IGJldHdlZW4gdGhlIHplcm8gZGVncmVlIG1lbWJlcnMgZHVyaW5nIHRoZSB0aWxpbmcgb3BlcmF0aW9uKGNhbiBhbHNvIGJlIGEgZnVuY3Rpb24pXG4gIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogMTAsXG4gIC8vIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiB0aGUgaG9yaXpvbnRhbCBzcGFjZSB0byBwdXQgYmV0d2VlbiB0aGUgemVybyBkZWdyZWUgbWVtYmVycyBkdXJpbmcgdGhlIHRpbGluZyBvcGVyYXRpb24oY2FuIGFsc28gYmUgYSBmdW5jdGlvbilcbiAgdGlsaW5nUGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAvLyBHcmF2aXR5IHJhbmdlIChjb25zdGFudCkgZm9yIGNvbXBvdW5kc1xuICBncmF2aXR5UmFuZ2VDb21wb3VuZDogMS41LFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudCkgZm9yIGNvbXBvdW5kc1xuICBncmF2aXR5Q29tcG91bmQ6IDEuMCxcbiAgLy8gR3Jhdml0eSByYW5nZSAoY29uc3RhbnQpXG4gIGdyYXZpdHlSYW5nZTogMy44LFxuICAvLyBJbml0aWFsIGNvb2xpbmcgZmFjdG9yIGZvciBpbmNyZW1lbnRhbCBsYXlvdXQgIFxuICBpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDogMC4zLFxuXG4gIC8qIGNvbnN0cmFpbnQgb3B0aW9ucyAqL1xuXG4gIC8vIEZpeCByZXF1aXJlZCBub2RlcyB0byBwcmVkZWZpbmVkIHBvc2l0aW9uc1xuICAvLyBbe25vZGVJZDogJ24xJywgcG9zaXRpb246IHt4OiAxMDAsIHk6IDIwMH0sIHsuLi59XVxuICBmaXhlZE5vZGVDb25zdHJhaW50OiB1bmRlZmluZWQsXG4gIC8vIEFsaWduIHJlcXVpcmVkIG5vZGVzIGluIHZlcnRpY2FsL2hvcml6b250YWwgZGlyZWN0aW9uXG4gIC8vIHt2ZXJ0aWNhbDogW1snbjEnLCAnbjInKV0sIFsnbjMnLCAnbjQnXV0sIGhvcml6b250YWw6IFsnbjInLCAnbjQnXX1cbiAgYWxpZ25tZW50Q29uc3RyYWludDogdW5kZWZpbmVkLFxuICAvLyBQbGFjZSB0d28gbm9kZXMgcmVsYXRpdmVseSBpbiB2ZXJ0aWNhbC9ob3Jpem9udGFsIGRpcmVjdGlvbiBcbiAgLy8gW3t0b3A6ICduMScsIGJvdHRvbTogJ24yJywgZ2FwOiAxMDB9LCB7bGVmdDogJ24zJywgcmlnaHQ6ICduNCcsIGdhcDogNzV9XVxuICByZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6IHVuZGVmaW5lZCxcblxuICAvKiBsYXlvdXQgZXZlbnQgY2FsbGJhY2tzICovXG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LCAvLyBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30gLy8gb24gbGF5b3V0c3RvcFxufSk7XG5cbnZhciBMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIExheW91dChvcHRpb25zKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExheW91dCk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMYXlvdXQsIFt7XG4gICAga2V5OiAncnVuJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcnVuKCkge1xuICAgICAgdmFyIGxheW91dCA9IHRoaXM7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBjeSA9IG9wdGlvbnMuY3k7XG4gICAgICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcblxuICAgICAgdmFyIHNwZWN0cmFsUmVzdWx0ID0gW107XG4gICAgICB2YXIgeENvb3JkcyA9IHZvaWQgMDtcbiAgICAgIHZhciB5Q29vcmRzID0gdm9pZCAwO1xuICAgICAgdmFyIGNvc2VSZXN1bHQgPSBbXTtcbiAgICAgIHZhciBjb21wb25lbnRzID0gdm9pZCAwO1xuICAgICAgdmFyIGNvbXBvbmVudENlbnRlcnMgPSBbXTtcblxuICAgICAgLy8gYmFzaWMgdmFsaWRpdHkgY2hlY2sgZm9yIGNvbnN0cmFpbnQgaW5wdXRzIFxuICAgICAgaWYgKG9wdGlvbnMuZml4ZWROb2RlQ29uc3RyYWludCAmJiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5maXhlZE5vZGVDb25zdHJhaW50KSB8fCBvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoID09IDApKSB7XG4gICAgICAgIG9wdGlvbnMuZml4ZWROb2RlQ29uc3RyYWludCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludCkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsICYmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpIHx8IG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbC5sZW5ndGggPT0gMCkpIHtcbiAgICAgICAgICBvcHRpb25zLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsICYmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCkgfHwgb3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwubGVuZ3RoID09IDApKSB7XG4gICAgICAgICAgb3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50ICYmICghQXJyYXkuaXNBcnJheShvcHRpb25zLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCkgfHwgb3B0aW9ucy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQubGVuZ3RoID09IDApKSB7XG4gICAgICAgIG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBhbnkgY29uc3RyYWludCBleGlzdHMsIHNldCBzb21lIG9wdGlvbnNcbiAgICAgIHZhciBjb25zdHJhaW50RXhpc3QgPSBvcHRpb25zLmZpeGVkTm9kZUNvbnN0cmFpbnQgfHwgb3B0aW9ucy5hbGlnbm1lbnRDb25zdHJhaW50IHx8IG9wdGlvbnMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50O1xuICAgICAgaWYgKGNvbnN0cmFpbnRFeGlzdCkge1xuICAgICAgICAvLyBjb25zdHJhaW50cyB3b3JrIHdpdGggdGhlc2Ugb3B0aW9uc1xuICAgICAgICBvcHRpb25zLnRpbGUgPSBmYWxzZTtcbiAgICAgICAgb3B0aW9ucy5wYWNrQ29tcG9uZW50cyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWNpZGUgY29tcG9uZW50IHBhY2tpbmcgaXMgZW5hYmxlZCBvciBub3RcbiAgICAgIHZhciBsYXlVdGlsID0gdm9pZCAwO1xuICAgICAgdmFyIHBhY2tpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBpZiAoY3kubGF5b3V0VXRpbGl0aWVzICYmIG9wdGlvbnMucGFja0NvbXBvbmVudHMpIHtcbiAgICAgICAgbGF5VXRpbCA9IGN5LmxheW91dFV0aWxpdGllcyhcImdldFwiKTtcbiAgICAgICAgaWYgKCFsYXlVdGlsKSBsYXlVdGlsID0gY3kubGF5b3V0VXRpbGl0aWVzKCk7XG4gICAgICAgIHBhY2tpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZXMubm9kZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGlmIHBhY2tpbmcgaXMgbm90IGVuYWJsZWQsIHBlcmZvcm0gbGF5b3V0IG9uIHRoZSB3aG9sZSBncmFwaFxuICAgICAgICBpZiAoIXBhY2tpbmdFbmFibGVkKSB7XG4gICAgICAgICAgLy8gc3RvcmUgY29tcG9uZW50IGNlbnRlclxuICAgICAgICAgIHZhciBib3VuZGluZ0JveCA9IG9wdGlvbnMuZWxlcy5ib3VuZGluZ0JveCgpO1xuICAgICAgICAgIGNvbXBvbmVudENlbnRlcnMucHVzaCh7IHg6IGJvdW5kaW5nQm94LngxICsgYm91bmRpbmdCb3gudyAvIDIsIHk6IGJvdW5kaW5nQm94LnkxICsgYm91bmRpbmdCb3guaCAvIDIgfSk7XG4gICAgICAgICAgLy8gYXBwbHkgc3BlY3RyYWwgbGF5b3V0XG4gICAgICAgICAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gc3BlY3RyYWxMYXlvdXQob3B0aW9ucyk7XG4gICAgICAgICAgICBzcGVjdHJhbFJlc3VsdC5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGx5IGNvc2UgbGF5b3V0IGFzIHBvc3Rwcm9jZXNzaW5nXG4gICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRlZmF1bHRcIiB8fCBvcHRpb25zLnF1YWxpdHkgPT0gXCJwcm9vZlwiKSB7XG4gICAgICAgICAgICBjb3NlUmVzdWx0LnB1c2goY29zZUxheW91dChvcHRpb25zLCBzcGVjdHJhbFJlc3VsdFswXSkpO1xuICAgICAgICAgICAgYXV4LnJlbG9jYXRlQ29tcG9uZW50KGNvbXBvbmVudENlbnRlcnNbMF0sIGNvc2VSZXN1bHRbMF0sIG9wdGlvbnMpOyAvLyByZWxvY2F0ZSBjZW50ZXIgdG8gb3JpZ2luYWwgcG9zaXRpb25cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXV4LnJlbG9jYXRlQ29tcG9uZW50KGNvbXBvbmVudENlbnRlcnNbMF0sIHNwZWN0cmFsUmVzdWx0WzBdLCBvcHRpb25zKTsgLy8gcmVsb2NhdGUgY2VudGVyIHRvIG9yaWdpbmFsIHBvc2l0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHBhY2tpbmcgaXMgZW5hYmxlZFxuICAgICAgICAgIHZhciB0b3BNb3N0Tm9kZXMgPSBhdXguZ2V0VG9wTW9zdE5vZGVzKG9wdGlvbnMuZWxlcy5ub2RlcygpKTtcbiAgICAgICAgICBjb21wb25lbnRzID0gYXV4LmNvbm5lY3RDb21wb25lbnRzKGN5LCBvcHRpb25zLmVsZXMsIHRvcE1vc3ROb2Rlcyk7XG4gICAgICAgICAgLy8gc3RvcmUgY29tcG9uZW50IGNlbnRlcnNcbiAgICAgICAgICBjb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gY29tcG9uZW50LmJvdW5kaW5nQm94KCk7XG4gICAgICAgICAgICBjb21wb25lbnRDZW50ZXJzLnB1c2goeyB4OiBib3VuZGluZ0JveC54MSArIGJvdW5kaW5nQm94LncgLyAyLCB5OiBib3VuZGluZ0JveC55MSArIGJvdW5kaW5nQm94LmggLyAyIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy9zZW5kIGVhY2ggY29tcG9uZW50IHRvIHNwZWN0cmFsIGxheW91dCBpZiByYW5kb21pemVkXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICBvcHRpb25zLmVsZXMgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICAgIHNwZWN0cmFsUmVzdWx0LnB1c2goc3BlY3RyYWxMYXlvdXQob3B0aW9ucykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRlZmF1bHRcIiB8fCBvcHRpb25zLnF1YWxpdHkgPT0gXCJwcm9vZlwiKSB7XG4gICAgICAgICAgICB2YXIgdG9CZVRpbGVkTm9kZXMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aWxlKSB7XG4gICAgICAgICAgICAgIC8vIGJlaGF2ZSBub2RlcyB0byBiZSB0aWxlZCBhcyBvbmUgY29tcG9uZW50XG4gICAgICAgICAgICAgIHZhciBub2RlSW5kZXhlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgdmFyIF94Q29vcmRzID0gW107XG4gICAgICAgICAgICAgIHZhciBfeUNvb3JkcyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICAgICAgICB2YXIgdGVtcFNwZWN0cmFsUmVzdWx0ID0geyBub2RlSW5kZXhlczogbm9kZUluZGV4ZXMsIHhDb29yZHM6IF94Q29vcmRzLCB5Q29vcmRzOiBfeUNvb3JkcyB9O1xuICAgICAgICAgICAgICB2YXIgaW5kZXhlc1RvQmVEZWxldGVkID0gW107XG4gICAgICAgICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZWRnZXMoKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICB0b0JlVGlsZWROb2Rlcy5tZXJnZShjb21wb25lbnQubm9kZXMoKVtpXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5pc1BhcmVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNwZWN0cmFsUmVzdWx0Lm5vZGVJbmRleGVzLnNldChjb21wb25lbnQubm9kZXMoKVtpXS5pZCgpLCBjb3VudCsrKTtcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wU3BlY3RyYWxSZXN1bHQueENvb3Jkcy5wdXNoKGNvbXBvbmVudC5ub2RlcygpWzBdLnBvc2l0aW9uKCkueCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNwZWN0cmFsUmVzdWx0LnlDb29yZHMucHVzaChjb21wb25lbnQubm9kZXMoKVswXS5wb3NpdGlvbigpLnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGluZGV4ZXNUb0JlRGVsZXRlZC5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAodG9CZVRpbGVkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHZhciBfYm91bmRpbmdCb3ggPSB0b0JlVGlsZWROb2Rlcy5ib3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudENlbnRlcnMucHVzaCh7IHg6IF9ib3VuZGluZ0JveC54MSArIF9ib3VuZGluZ0JveC53IC8gMiwgeTogX2JvdW5kaW5nQm94LnkxICsgX2JvdW5kaW5nQm94LmggLyAyIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaCh0b0JlVGlsZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgc3BlY3RyYWxSZXN1bHQucHVzaCh0ZW1wU3BlY3RyYWxSZXN1bHQpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleGVzVG9CZURlbGV0ZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuc3BsaWNlKGluZGV4ZXNUb0JlRGVsZXRlZFtpXSwgMSk7XG4gICAgICAgICAgICAgICAgICBzcGVjdHJhbFJlc3VsdC5zcGxpY2UoaW5kZXhlc1RvQmVEZWxldGVkW2ldLCAxKTtcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudENlbnRlcnMuc3BsaWNlKGluZGV4ZXNUb0JlRGVsZXRlZFtpXSwgMSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgIC8vIHNlbmQgZWFjaCBjb21wb25lbnQgdG8gY29zZSBsYXlvdXRcbiAgICAgICAgICAgICAgb3B0aW9ucy5lbGVzID0gY29tcG9uZW50O1xuICAgICAgICAgICAgICBjb3NlUmVzdWx0LnB1c2goY29zZUxheW91dChvcHRpb25zLCBzcGVjdHJhbFJlc3VsdFtpbmRleF0pKTtcbiAgICAgICAgICAgICAgYXV4LnJlbG9jYXRlQ29tcG9uZW50KGNvbXBvbmVudENlbnRlcnNbaW5kZXhdLCBjb3NlUmVzdWx0W2luZGV4XSwgb3B0aW9ucyk7IC8vIHJlbG9jYXRlIGNlbnRlciB0byBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICBhdXgucmVsb2NhdGVDb21wb25lbnQoY29tcG9uZW50Q2VudGVyc1tpbmRleF0sIHNwZWN0cmFsUmVzdWx0W2luZGV4XSwgb3B0aW9ucyk7IC8vIHJlbG9jYXRlIGNlbnRlciB0byBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcGFja2luZ1xuICAgICAgICAgIHZhciBjb21wb25lbnRzRXZhbHVhdGVkID0gbmV3IFNldCgpO1xuICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhciBzdWJncmFwaHMgPSBbXTtcbiAgICAgICAgICAgIHZhciBoaWRkZW5FbGVzID0gZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZWxlLmNzcygnZGlzcGxheScpID09ICdub25lJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wb25lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgIHZhciBub2RlSW5kZXhlcyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIpIHtcbiAgICAgICAgICAgICAgICBub2RlSW5kZXhlcyA9IHNwZWN0cmFsUmVzdWx0W2luZGV4XS5ub2RlSW5kZXhlcztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb21wb25lbnQubm9kZXMoKS5ub3QoaGlkZGVuRWxlcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBzdWJncmFwaCA9IHt9O1xuICAgICAgICAgICAgICAgIHN1YmdyYXBoLmVkZ2VzID0gW107XG4gICAgICAgICAgICAgICAgc3ViZ3JhcGgubm9kZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5ub2RlcygpLm5vdChoaWRkZW5FbGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5xdWFsaXR5ID09IFwiZHJhZnRcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IG5vZGVJbmRleGVzLmdldChub2RlLmlkKCkpO1xuICAgICAgICAgICAgICAgICAgICAgIHN1YmdyYXBoLm5vZGVzLnB1c2goeyB4OiBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueENvb3Jkc1tub2RlSW5kZXhdIC0gbm9kZS5ib3VuZGluZ2JveCgpLncgLyAyLCB5OiBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkc1tub2RlSW5kZXhdIC0gbm9kZS5ib3VuZGluZ2JveCgpLmggLyAyLCB3aWR0aDogbm9kZS5ib3VuZGluZ2JveCgpLncsIGhlaWdodDogbm9kZS5ib3VuZGluZ2JveCgpLmggfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudEluZm8gPSBhdXguY2FsY0JvdW5kaW5nQm94KG5vZGUsIHNwZWN0cmFsUmVzdWx0W2luZGV4XS54Q29vcmRzLCBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkcywgbm9kZUluZGV4ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgIHN1YmdyYXBoLm5vZGVzLnB1c2goeyB4OiBwYXJlbnRJbmZvLnRvcExlZnRYLCB5OiBwYXJlbnRJbmZvLnRvcExlZnRZLCB3aWR0aDogcGFyZW50SW5mby53aWR0aCwgaGVpZ2h0OiBwYXJlbnRJbmZvLmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvc2VSZXN1bHRbaW5kZXhdW25vZGUuaWQoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJncmFwaC5ub2Rlcy5wdXNoKHsgeDogY29zZVJlc3VsdFtpbmRleF1bbm9kZS5pZCgpXS5nZXRMZWZ0KCksIHk6IGNvc2VSZXN1bHRbaW5kZXhdW25vZGUuaWQoKV0uZ2V0VG9wKCksIHdpZHRoOiBjb3NlUmVzdWx0W2luZGV4XVtub2RlLmlkKCldLmdldFdpZHRoKCksIGhlaWdodDogY29zZVJlc3VsdFtpbmRleF1bbm9kZS5pZCgpXS5nZXRIZWlnaHQoKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGVkZ2UudGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNzcyhcImRpc3BsYXlcIikgIT0gXCJub25lXCIgJiYgdGFyZ2V0LmNzcyhcImRpc3BsYXlcIikgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTm9kZUluZGV4ID0gbm9kZUluZGV4ZXMuZ2V0KHNvdXJjZS5pZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZUluZGV4ID0gbm9kZUluZGV4ZXMuZ2V0KHRhcmdldC5pZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlQ2VudGVyID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldENlbnRlciA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudEluZm8gPSBhdXguY2FsY0JvdW5kaW5nQm94KHNvdXJjZSwgc3BlY3RyYWxSZXN1bHRbaW5kZXhdLnhDb29yZHMsIHNwZWN0cmFsUmVzdWx0W2luZGV4XS55Q29vcmRzLCBub2RlSW5kZXhlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VDZW50ZXIucHVzaChwYXJlbnRJbmZvLnRvcExlZnRYICsgcGFyZW50SW5mby53aWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2VudGVyLnB1c2gocGFyZW50SW5mby50b3BMZWZ0WSArIHBhcmVudEluZm8uaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNlbnRlci5wdXNoKHNwZWN0cmFsUmVzdWx0W2luZGV4XS54Q29vcmRzW3NvdXJjZU5vZGVJbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2VudGVyLnB1c2goc3BlY3RyYWxSZXN1bHRbaW5kZXhdLnlDb29yZHNbc291cmNlTm9kZUluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJlbnRJbmZvID0gYXV4LmNhbGNCb3VuZGluZ0JveCh0YXJnZXQsIHNwZWN0cmFsUmVzdWx0W2luZGV4XS54Q29vcmRzLCBzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkcywgbm9kZUluZGV4ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2VudGVyLnB1c2goX3BhcmVudEluZm8udG9wTGVmdFggKyBfcGFyZW50SW5mby53aWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2VudGVyLnB1c2goX3BhcmVudEluZm8udG9wTGVmdFkgKyBfcGFyZW50SW5mby5oZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2VudGVyLnB1c2goc3BlY3RyYWxSZXN1bHRbaW5kZXhdLnhDb29yZHNbdGFyZ2V0Tm9kZUluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDZW50ZXIucHVzaChzcGVjdHJhbFJlc3VsdFtpbmRleF0ueUNvb3Jkc1t0YXJnZXROb2RlSW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgc3ViZ3JhcGguZWRnZXMucHVzaCh7IHN0YXJ0WDogc291cmNlQ2VudGVyWzBdLCBzdGFydFk6IHNvdXJjZUNlbnRlclsxXSwgZW5kWDogdGFyZ2V0Q2VudGVyWzBdLCBlbmRZOiB0YXJnZXRDZW50ZXJbMV0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvc2VSZXN1bHRbaW5kZXhdW3NvdXJjZS5pZCgpXSAmJiBjb3NlUmVzdWx0W2luZGV4XVt0YXJnZXQuaWQoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmdyYXBoLmVkZ2VzLnB1c2goeyBzdGFydFg6IGNvc2VSZXN1bHRbaW5kZXhdW3NvdXJjZS5pZCgpXS5nZXRDZW50ZXJYKCksIHN0YXJ0WTogY29zZVJlc3VsdFtpbmRleF1bc291cmNlLmlkKCldLmdldENlbnRlclkoKSwgZW5kWDogY29zZVJlc3VsdFtpbmRleF1bdGFyZ2V0LmlkKCldLmdldENlbnRlclgoKSwgZW5kWTogY29zZVJlc3VsdFtpbmRleF1bdGFyZ2V0LmlkKCldLmdldENlbnRlclkoKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViZ3JhcGgubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgc3ViZ3JhcGhzLnB1c2goc3ViZ3JhcGgpO1xuICAgICAgICAgICAgICAgICAgY29tcG9uZW50c0V2YWx1YXRlZC5hZGQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2hpZnRSZXN1bHQgPSBsYXlVdGlsLnBhY2tDb21wb25lbnRzKHN1YmdyYXBocywgb3B0aW9ucy5yYW5kb21pemUpLnNoaWZ0cztcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnF1YWxpdHkgPT0gXCJkcmFmdFwiKSB7XG4gICAgICAgICAgICAgIHNwZWN0cmFsUmVzdWx0LmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3WENvb3JkcyA9IHJlc3VsdC54Q29vcmRzLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyBzaGlmdFJlc3VsdFtpbmRleF0uZHg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1lDb29yZHMgPSByZXN1bHQueUNvb3Jkcy5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB5ICsgc2hpZnRSZXN1bHRbaW5kZXhdLmR5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC54Q29vcmRzID0gbmV3WENvb3JkcztcbiAgICAgICAgICAgICAgICByZXN1bHQueUNvb3JkcyA9IG5ld1lDb29yZHM7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF9jb3VudCA9IDA7XG4gICAgICAgICAgICAgIGNvbXBvbmVudHNFdmFsdWF0ZWQuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb3NlUmVzdWx0W2luZGV4XSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgdmFyIG5vZGVSZWN0YW5nbGUgPSBjb3NlUmVzdWx0W2luZGV4XVtpdGVtXTtcbiAgICAgICAgICAgICAgICAgIG5vZGVSZWN0YW5nbGUuc2V0Q2VudGVyKG5vZGVSZWN0YW5nbGUuZ2V0Q2VudGVyWCgpICsgc2hpZnRSZXN1bHRbX2NvdW50XS5keCwgbm9kZVJlY3RhbmdsZS5nZXRDZW50ZXJZKCkgKyBzaGlmdFJlc3VsdFtfY291bnRdLmR5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBfY291bnQrKztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBlYWNoIGVsZW1lbnQncyBjYWxjdWxhdGVkIHBvc2l0aW9uXG4gICAgICB2YXIgZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gZ2V0UG9zaXRpb25zKGVsZSwgaSkge1xuICAgICAgICBpZiAob3B0aW9ucy5xdWFsaXR5ID09IFwiZGVmYXVsdFwiIHx8IG9wdGlvbnMucXVhbGl0eSA9PSBcInByb29mXCIpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZWxlID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHBvcyA9IHZvaWQgMDtcbiAgICAgICAgICB2YXIgbm9kZSA9IHZvaWQgMDtcbiAgICAgICAgICB2YXIgdGhlSWQgPSBlbGUuZGF0YSgnaWQnKTtcbiAgICAgICAgICBjb3NlUmVzdWx0LmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHRoZUlkIGluIHJlc3VsdCkge1xuICAgICAgICAgICAgICBwb3MgPSB7IHg6IHJlc3VsdFt0aGVJZF0uZ2V0UmVjdCgpLmdldENlbnRlclgoKSwgeTogcmVzdWx0W3RoZUlkXS5nZXRSZWN0KCkuZ2V0Q2VudGVyWSgpIH07XG4gICAgICAgICAgICAgIG5vZGUgPSByZXN1bHRbdGhlSWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChvcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscykge1xuICAgICAgICAgICAgaWYgKG5vZGUubGFiZWxXaWR0aCkge1xuICAgICAgICAgICAgICBpZiAobm9kZS5sYWJlbFBvc0hvcml6b250YWwgPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgICAgICBwb3MueCArPSBub2RlLmxhYmVsV2lkdGggLyAyO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGFiZWxQb3NIb3Jpem9udGFsID09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgICAgIHBvcy54IC09IG5vZGUubGFiZWxXaWR0aCAvIDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmxhYmVsSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmxhYmVsUG9zVmVydGljYWwgPT0gXCJ0b3BcIikge1xuICAgICAgICAgICAgICAgIHBvcy55ICs9IG5vZGUubGFiZWxIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGFiZWxQb3NWZXJ0aWNhbCA9PSBcImJvdHRvbVwiKSB7XG4gICAgICAgICAgICAgICAgcG9zLnkgLT0gbm9kZS5sYWJlbEhlaWdodCAvIDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBvcyA9PSB1bmRlZmluZWQpIHBvcyA9IHsgeDogZWxlLnBvc2l0aW9uKFwieFwiKSwgeTogZWxlLnBvc2l0aW9uKFwieVwiKSB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBwb3MueCxcbiAgICAgICAgICAgIHk6IHBvcy55XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX3BvcyA9IHZvaWQgMDtcbiAgICAgICAgICBzcGVjdHJhbFJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHJlc3VsdC5ub2RlSW5kZXhlcy5nZXQoZWxlLmlkKCkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBfcG9zID0geyB4OiByZXN1bHQueENvb3Jkc1tpbmRleF0sIHk6IHJlc3VsdC55Q29vcmRzW2luZGV4XSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChfcG9zID09IHVuZGVmaW5lZCkgX3BvcyA9IHsgeDogZWxlLnBvc2l0aW9uKFwieFwiKSwgeTogZWxlLnBvc2l0aW9uKFwieVwiKSB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBfcG9zLngsXG4gICAgICAgICAgICB5OiBfcG9zLnlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBxdWFsaXR5ID0gXCJkcmFmdFwiIGFuZCByYW5kb21pemUgPSBmYWxzZSBhcmUgY29udHJhZGljdGl2ZSBzbyBpbiB0aGF0IGNhc2UgcG9zaXRpb25zIGRvbid0IGNoYW5nZVxuICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRlZmF1bHRcIiB8fCBvcHRpb25zLnF1YWxpdHkgPT0gXCJwcm9vZlwiIHx8IG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgICAgIC8vIHRyYW5zZmVyIGNhbGN1bGF0ZWQgcG9zaXRpb25zIHRvIG5vZGVzIChwb3NpdGlvbnMgb2Ygb25seSBzaW1wbGUgbm9kZXMgYXJlIGV2YWx1YXRlZCwgY29tcG91bmRzIGFyZSBwb3NpdGlvbmVkIGF1dG9tYXRpY2FsbHkpXG4gICAgICAgIHZhciBwYXJlbnRzV2l0aG91dENoaWxkcmVuID0gYXV4LmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKGN5LCBlbGVzKTtcbiAgICAgICAgdmFyIF9oaWRkZW5FbGVzID0gZWxlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy5lbGVzID0gZWxlcy5ub3QoX2hpZGRlbkVsZXMpO1xuXG4gICAgICAgIGVsZXMubm9kZXMoKS5ub3QoXCI6cGFyZW50XCIpLm5vdChfaGlkZGVuRWxlcykubGF5b3V0UG9zaXRpb25zKGxheW91dCwgb3B0aW9ucywgZ2V0UG9zaXRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW50c1dpdGhvdXRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGFyZW50c1dpdGhvdXRDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgIGVsZS5wb3NpdGlvbihnZXRQb3NpdGlvbnMoZWxlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSWYgcmFuZG9taXplIG9wdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gcXVhbGl0eSBvcHRpb24gbXVzdCBiZSAnZGVmYXVsdCcgb3IgJ3Byb29mJy5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIExheW91dDtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXlvdXQ7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2NTc6XG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG4vKipcbiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzcGVjdHJhbCBsYXlvdXQgdGhhdCBpcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZmNvc2UgbGF5b3V0IGFsZ29yaXRobVxuKi9cblxudmFyIGF1eCA9IF9fd2VicGFja19yZXF1aXJlX18oNTQ4KTtcbnZhciBNYXRyaXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCkubGF5b3V0QmFzZS5NYXRyaXg7XG52YXIgU1ZEID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLmxheW91dEJhc2UuU1ZEO1xuXG4vLyBtYWluIGZ1bmN0aW9uIHRoYXQgc3BlY3RyYWwgbGF5b3V0IGlzIHByb2Nlc3NlZFxudmFyIHNwZWN0cmFsTGF5b3V0ID0gZnVuY3Rpb24gc3BlY3RyYWxMYXlvdXQob3B0aW9ucykge1xuXG4gIHZhciBjeSA9IG9wdGlvbnMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgbm9kZXMgPSBlbGVzLm5vZGVzKCk7XG4gIHZhciBwYXJlbnROb2RlcyA9IGVsZXMubm9kZXMoXCI6cGFyZW50XCIpO1xuXG4gIHZhciBkdW1teU5vZGVzID0gbmV3IE1hcCgpOyAvLyBtYXAgdG8ga2VlcCBkdW1teSBub2RlcyBhbmQgdGhlaXIgbmVpZ2hib3JzXG4gIHZhciBub2RlSW5kZXhlcyA9IG5ldyBNYXAoKTsgLy8gbWFwIHRvIGtlZXAgaW5kZXhlcyB0byBub2Rlc1xuICB2YXIgcGFyZW50Q2hpbGRNYXAgPSBuZXcgTWFwKCk7IC8vIG1hcHBpbmcgYnR3LiBjb21wb3VuZCBhbmQgaXRzIHJlcHJlc2VudGF0aXZlIG5vZGUgXG4gIHZhciBhbGxOb2Rlc05laWdoYm9yaG9vZCA9IFtdOyAvLyBhcnJheSB0byBrZWVwIG5laWdoYm9yaG9vZCBvZiBhbGwgbm9kZXNcbiAgdmFyIHhDb29yZHMgPSBbXTtcbiAgdmFyIHlDb29yZHMgPSBbXTtcblxuICB2YXIgc2FtcGxlc0NvbHVtbiA9IFtdOyAvLyBzYW1wbGVkIHZlcnRpY2VzXG4gIHZhciBtaW5EaXN0YW5jZXNDb2x1bW4gPSBbXTtcbiAgdmFyIEMgPSBbXTsgLy8gY29sdW1uIHNhbXBsaW5nIG1hdHJpeFxuICB2YXIgUEhJID0gW107IC8vIGludGVyc2VjdGlvbiBvZiBjb2x1bW4gYW5kIHJvdyBzYW1wbGluZyBtYXRyaWNlcyBcbiAgdmFyIElOViA9IFtdOyAvLyBpbnZlcnNlIG9mIFBISSBcblxuICB2YXIgZmlyc3RTYW1wbGUgPSB2b2lkIDA7IC8vIHRoZSBmaXJzdCBzYW1wbGVkIG5vZGVcbiAgdmFyIG5vZGVTaXplID0gdm9pZCAwO1xuXG4gIHZhciBpbmZpbml0eSA9IDEwMDAwMDAwMDtcbiAgdmFyIHNtYWxsID0gMC4wMDAwMDAwMDE7XG5cbiAgdmFyIHBpVG9sID0gb3B0aW9ucy5waVRvbDtcbiAgdmFyIHNhbXBsaW5nVHlwZSA9IG9wdGlvbnMuc2FtcGxpbmdUeXBlOyAvLyBmYWxzZSBmb3IgcmFuZG9tLCB0cnVlIGZvciBncmVlZHlcbiAgdmFyIG5vZGVTZXBhcmF0aW9uID0gb3B0aW9ucy5ub2RlU2VwYXJhdGlvbjtcbiAgdmFyIHNhbXBsZVNpemUgPSB2b2lkIDA7XG5cbiAgLyoqKiogU3BlY3RyYWwtcHJlcHJvY2Vzc2luZyBmdW5jdGlvbnMgKioqKi9cblxuICAvKioqKiBTcGVjdHJhbCBsYXlvdXQgZnVuY3Rpb25zICoqKiovXG5cbiAgLy8gZGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgdG8gYmUgc2FtcGxlZFxuICB2YXIgcmFuZG9tU2FtcGxlQ1IgPSBmdW5jdGlvbiByYW5kb21TYW1wbGVDUigpIHtcbiAgICB2YXIgc2FtcGxlID0gMDtcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBmbGFnID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoY291bnQgPCBzYW1wbGVTaXplKSB7XG4gICAgICBzYW1wbGUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub2RlU2l6ZSk7XG5cbiAgICAgIGZsYWcgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBpZiAoc2FtcGxlc0NvbHVtbltpXSA9PSBzYW1wbGUpIHtcbiAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZsYWcpIHtcbiAgICAgICAgc2FtcGxlc0NvbHVtbltjb3VudF0gPSBzYW1wbGU7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gdGFrZXMgdGhlIGluZGV4IG9mIHRoZSBub2RlKHBpdm90KSB0byBpbml0aWF0ZSBCRlMgYXMgYSBwYXJhbWV0ZXJcbiAgdmFyIEJGUyA9IGZ1bmN0aW9uIEJGUyhwaXZvdCwgaW5kZXgsIHNhbXBsaW5nTWV0aG9kKSB7XG4gICAgdmFyIHBhdGggPSBbXTsgLy8gdGhlIGZyb250IG9mIHRoZSBwYXRoXG4gICAgdmFyIGZyb250ID0gMDsgLy8gdGhlIGJhY2sgb2YgdGhlIHBhdGhcbiAgICB2YXIgYmFjayA9IDA7XG4gICAgdmFyIGN1cnJlbnQgPSAwO1xuICAgIHZhciB0ZW1wID0gdm9pZCAwO1xuICAgIHZhciBkaXN0YW5jZSA9IFtdO1xuXG4gICAgdmFyIG1heF9kaXN0ID0gMDsgLy8gdGhlIGZ1cnRoZXN0IG5vZGUgdG8gYmUgcmV0dXJuZWRcbiAgICB2YXIgbWF4X2luZCA9IDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVTaXplOyBpKyspIHtcbiAgICAgIGRpc3RhbmNlW2ldID0gaW5maW5pdHk7XG4gICAgfVxuXG4gICAgcGF0aFtiYWNrXSA9IHBpdm90O1xuICAgIGRpc3RhbmNlW3Bpdm90XSA9IDA7XG5cbiAgICB3aGlsZSAoYmFjayA+PSBmcm9udCkge1xuICAgICAgY3VycmVudCA9IHBhdGhbZnJvbnQrK107XG4gICAgICB2YXIgbmVpZ2hib3JzID0gYWxsTm9kZXNOZWlnaGJvcmhvb2RbY3VycmVudF07XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmVpZ2hib3JzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB0ZW1wID0gbm9kZUluZGV4ZXMuZ2V0KG5laWdoYm9yc1tfaV0pO1xuICAgICAgICBpZiAoZGlzdGFuY2VbdGVtcF0gPT0gaW5maW5pdHkpIHtcbiAgICAgICAgICBkaXN0YW5jZVt0ZW1wXSA9IGRpc3RhbmNlW2N1cnJlbnRdICsgMTtcbiAgICAgICAgICBwYXRoWysrYmFja10gPSB0ZW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBDW2N1cnJlbnRdW2luZGV4XSA9IGRpc3RhbmNlW2N1cnJlbnRdICogbm9kZVNlcGFyYXRpb247XG4gICAgfVxuXG4gICAgaWYgKHNhbXBsaW5nTWV0aG9kKSB7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlU2l6ZTsgX2kyKyspIHtcbiAgICAgICAgaWYgKENbX2kyXVtpbmRleF0gPCBtaW5EaXN0YW5jZXNDb2x1bW5bX2kyXSkgbWluRGlzdGFuY2VzQ29sdW1uW19pMl0gPSBDW19pMl1baW5kZXhdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBub2RlU2l6ZTsgX2kzKyspIHtcbiAgICAgICAgaWYgKG1pbkRpc3RhbmNlc0NvbHVtbltfaTNdID4gbWF4X2Rpc3QpIHtcbiAgICAgICAgICBtYXhfZGlzdCA9IG1pbkRpc3RhbmNlc0NvbHVtbltfaTNdO1xuICAgICAgICAgIG1heF9pbmQgPSBfaTM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1heF9pbmQ7XG4gIH07XG5cbiAgLy8gYXBwbHkgQkZTIHRvIGFsbCBub2RlcyBvciBzZWxlY3RlZCBzYW1wbGVzXG4gIHZhciBhbGxCRlMgPSBmdW5jdGlvbiBhbGxCRlMoc2FtcGxpbmdNZXRob2QpIHtcblxuICAgIHZhciBzYW1wbGUgPSB2b2lkIDA7XG5cbiAgICBpZiAoIXNhbXBsaW5nTWV0aG9kKSB7XG4gICAgICByYW5kb21TYW1wbGVDUigpO1xuXG4gICAgICAvLyBjYWxsIEJGU1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcbiAgICAgICAgQkZTKHNhbXBsZXNDb2x1bW5baV0sIGksIHNhbXBsaW5nTWV0aG9kLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNhbXBsZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vZGVTaXplKTtcbiAgICAgIGZpcnN0U2FtcGxlID0gc2FtcGxlO1xuXG4gICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBub2RlU2l6ZTsgX2k0KyspIHtcbiAgICAgICAgbWluRGlzdGFuY2VzQ29sdW1uW19pNF0gPSBpbmZpbml0eTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgc2FtcGxlU2l6ZTsgX2k1KyspIHtcbiAgICAgICAgc2FtcGxlc0NvbHVtbltfaTVdID0gc2FtcGxlO1xuICAgICAgICBzYW1wbGUgPSBCRlMoc2FtcGxlLCBfaTUsIHNhbXBsaW5nTWV0aG9kKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtIHRoZSBzcXVhcmVkIGRpc3RhbmNlcyBmb3IgQ1xuICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IG5vZGVTaXplOyBfaTYrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzYW1wbGVTaXplOyBqKyspIHtcbiAgICAgICAgQ1tfaTZdW2pdICo9IENbX2k2XVtqXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtIFBISVxuICAgIGZvciAodmFyIF9pNyA9IDA7IF9pNyA8IHNhbXBsZVNpemU7IF9pNysrKSB7XG4gICAgICBQSElbX2k3XSA9IFtdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IHNhbXBsZVNpemU7IF9pOCsrKSB7XG4gICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgc2FtcGxlU2l6ZTsgX2orKykge1xuICAgICAgICBQSElbX2k4XVtfal0gPSBDW3NhbXBsZXNDb2x1bW5bX2pdXVtfaThdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBwZXJmb3JtIHRoZSBTVkQgYWxnb3JpdGhtIGFuZCBhcHBseSBhIHJlZ3VsYXJpemF0aW9uIHN0ZXBcbiAgdmFyIHNhbXBsZSA9IGZ1bmN0aW9uIHNhbXBsZSgpIHtcblxuICAgIHZhciBTVkRSZXN1bHQgPSBTVkQuc3ZkKFBISSk7XG5cbiAgICB2YXIgYV9xID0gU1ZEUmVzdWx0LlM7XG4gICAgdmFyIGFfdSA9IFNWRFJlc3VsdC5VO1xuICAgIHZhciBhX3YgPSBTVkRSZXN1bHQuVjtcblxuICAgIHZhciBtYXhfcyA9IGFfcVswXSAqIGFfcVswXSAqIGFfcVswXTtcblxuICAgIHZhciBhX1NpZyA9IFtdO1xuXG4gICAgLy8gIHJlZ3VsYXJpemF0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcbiAgICAgIGFfU2lnW2ldID0gW107XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNhbXBsZVNpemU7IGorKykge1xuICAgICAgICBhX1NpZ1tpXVtqXSA9IDA7XG4gICAgICAgIGlmIChpID09IGopIHtcbiAgICAgICAgICBhX1NpZ1tpXVtqXSA9IGFfcVtpXSAvIChhX3FbaV0gKiBhX3FbaV0gKyBtYXhfcyAvIChhX3FbaV0gKiBhX3FbaV0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIElOViA9IE1hdHJpeC5tdWx0TWF0KE1hdHJpeC5tdWx0TWF0KGFfdiwgYV9TaWcpLCBNYXRyaXgudHJhbnNwb3NlKGFfdSkpO1xuICB9O1xuXG4gIC8vIGNhbGN1bGF0ZSBmaW5hbCBjb29yZGluYXRlcyBcbiAgdmFyIHBvd2VySXRlcmF0aW9uID0gZnVuY3Rpb24gcG93ZXJJdGVyYXRpb24oKSB7XG4gICAgLy8gdHdvIGxhcmdlc3QgZWlnZW52YWx1ZXNcbiAgICB2YXIgdGhldGExID0gdm9pZCAwO1xuICAgIHZhciB0aGV0YTIgPSB2b2lkIDA7XG5cbiAgICAvLyBpbml0aWFsIGd1ZXNzZXMgZm9yIGVpZ2VudmVjdG9yc1xuICAgIHZhciBZMSA9IFtdO1xuICAgIHZhciBZMiA9IFtdO1xuXG4gICAgdmFyIFYxID0gW107XG4gICAgdmFyIFYyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVTaXplOyBpKyspIHtcbiAgICAgIFkxW2ldID0gTWF0aC5yYW5kb20oKTtcbiAgICAgIFkyW2ldID0gTWF0aC5yYW5kb20oKTtcbiAgICB9XG5cbiAgICBZMSA9IE1hdHJpeC5ub3JtYWxpemUoWTEpO1xuICAgIFkyID0gTWF0cml4Lm5vcm1hbGl6ZShZMik7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIC8vIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGltcHJvdmVtZW50IHJhdGlvIGluIHBvd2VyIGl0ZXJhdGlvblxuICAgIHZhciBjdXJyZW50ID0gc21hbGw7XG4gICAgdmFyIHByZXZpb3VzID0gc21hbGw7XG5cbiAgICB2YXIgdGVtcCA9IHZvaWQgMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb3VudCsrO1xuXG4gICAgICBmb3IgKHZhciBfaTkgPSAwOyBfaTkgPCBub2RlU2l6ZTsgX2k5KyspIHtcbiAgICAgICAgVjFbX2k5XSA9IFkxW19pOV07XG4gICAgICB9XG5cbiAgICAgIFkxID0gTWF0cml4Lm11bHRHYW1tYShNYXRyaXgubXVsdEwoTWF0cml4Lm11bHRHYW1tYShWMSksIEMsIElOVikpO1xuICAgICAgdGhldGExID0gTWF0cml4LmRvdFByb2R1Y3QoVjEsIFkxKTtcbiAgICAgIFkxID0gTWF0cml4Lm5vcm1hbGl6ZShZMSk7XG5cbiAgICAgIGN1cnJlbnQgPSBNYXRyaXguZG90UHJvZHVjdChWMSwgWTEpO1xuXG4gICAgICB0ZW1wID0gTWF0aC5hYnMoY3VycmVudCAvIHByZXZpb3VzKTtcblxuICAgICAgaWYgKHRlbXAgPD0gMSArIHBpVG9sICYmIHRlbXAgPj0gMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pMTAgPSAwOyBfaTEwIDwgbm9kZVNpemU7IF9pMTArKykge1xuICAgICAgVjFbX2kxMF0gPSBZMVtfaTEwXTtcbiAgICB9XG5cbiAgICBjb3VudCA9IDA7XG4gICAgcHJldmlvdXMgPSBzbWFsbDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY291bnQrKztcblxuICAgICAgZm9yICh2YXIgX2kxMSA9IDA7IF9pMTEgPCBub2RlU2l6ZTsgX2kxMSsrKSB7XG4gICAgICAgIFYyW19pMTFdID0gWTJbX2kxMV07XG4gICAgICB9XG5cbiAgICAgIFYyID0gTWF0cml4Lm1pbnVzT3AoVjIsIE1hdHJpeC5tdWx0Q29ucyhWMSwgTWF0cml4LmRvdFByb2R1Y3QoVjEsIFYyKSkpO1xuICAgICAgWTIgPSBNYXRyaXgubXVsdEdhbW1hKE1hdHJpeC5tdWx0TChNYXRyaXgubXVsdEdhbW1hKFYyKSwgQywgSU5WKSk7XG4gICAgICB0aGV0YTIgPSBNYXRyaXguZG90UHJvZHVjdChWMiwgWTIpO1xuICAgICAgWTIgPSBNYXRyaXgubm9ybWFsaXplKFkyKTtcblxuICAgICAgY3VycmVudCA9IE1hdHJpeC5kb3RQcm9kdWN0KFYyLCBZMik7XG5cbiAgICAgIHRlbXAgPSBNYXRoLmFicyhjdXJyZW50IC8gcHJldmlvdXMpO1xuXG4gICAgICBpZiAodGVtcCA8PSAxICsgcGlUb2wgJiYgdGVtcCA+PSAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kxMiA9IDA7IF9pMTIgPCBub2RlU2l6ZTsgX2kxMisrKSB7XG4gICAgICBWMltfaTEyXSA9IFkyW19pMTJdO1xuICAgIH1cblxuICAgIC8vIHRoZXRhMSBub3cgY29udGFpbnMgZG9taW5hbnQgZWlnZW52YWx1ZVxuICAgIC8vIHRoZXRhMiBub3cgY29udGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IGVpZ2VudmFsdWVcbiAgICAvLyBWMSBub3cgY29udGFpbnMgdGhldGExJ3MgZWlnZW52ZWN0b3JcbiAgICAvLyBWMiBub3cgY29udGFpbnMgdGhldGEyJ3MgZWlnZW52ZWN0b3JcblxuICAgIC8vcG9wdWxhdGUgdGhlIHR3byB2ZWN0b3JzXG4gICAgeENvb3JkcyA9IE1hdHJpeC5tdWx0Q29ucyhWMSwgTWF0aC5zcXJ0KE1hdGguYWJzKHRoZXRhMSkpKTtcbiAgICB5Q29vcmRzID0gTWF0cml4Lm11bHRDb25zKFYyLCBNYXRoLnNxcnQoTWF0aC5hYnModGhldGEyKSkpO1xuICB9O1xuXG4gIC8qKioqIFByZXBhcmF0aW9uIGZvciBzcGVjdHJhbCBsYXlvdXQgKFByZXByb2Nlc3NpbmcpICoqKiovXG5cbiAgLy8gY29ubmVjdCBkaXNjb25uZWN0ZWQgY29tcG9uZW50cyAoZmlyc3QgdG9wIGxldmVsLCB0aGVuIGluc2lkZSBvZiBlYWNoIGNvbXBvdW5kIG5vZGUpXG4gIGF1eC5jb25uZWN0Q29tcG9uZW50cyhjeSwgZWxlcywgYXV4LmdldFRvcE1vc3ROb2Rlcyhub2RlcyksIGR1bW15Tm9kZXMpO1xuXG4gIHBhcmVudE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIGF1eC5jb25uZWN0Q29tcG9uZW50cyhjeSwgZWxlcywgYXV4LmdldFRvcE1vc3ROb2RlcyhlbGUuZGVzY2VuZGFudHMoKS5pbnRlcnNlY3Rpb24oZWxlcykpLCBkdW1teU5vZGVzKTtcbiAgfSk7XG5cbiAgLy8gYXNzaWduIGluZGV4ZXMgdG8gbm9kZXMgKGZpcnN0IHJlYWwsIHRoZW4gZHVtbXkgbm9kZXMpXG4gIHZhciBpbmRleCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIW5vZGVzW2ldLmlzUGFyZW50KCkpIHtcbiAgICAgIG5vZGVJbmRleGVzLnNldChub2Rlc1tpXS5pZCgpLCBpbmRleCsrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG4gIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBkdW1teU5vZGVzLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTtcblxuICAgICAgbm9kZUluZGV4ZXMuc2V0KGtleSwgaW5kZXgrKyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFudGlhdGUgdGhlIG5laWdoYm9yaG9vZCBtYXRyaXhcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgIF9pdGVyYXRvckVycm9yID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikge1xuICAgICAgICBfaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikge1xuICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfaTEzID0gMDsgX2kxMyA8IG5vZGVJbmRleGVzLnNpemU7IF9pMTMrKykge1xuICAgIGFsbE5vZGVzTmVpZ2hib3Job29kW19pMTNdID0gW107XG4gIH1cblxuICAvLyBmb3JtIGEgcGFyZW50LWNoaWxkIG1hcCB0byBrZWVwIHJlcHJlc2VudGF0aXZlIG5vZGUgb2YgZWFjaCBjb21wb3VuZCBub2RlICBcbiAgcGFyZW50Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZWxlLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKGVsZXMpO1xuXG4gICAgLy8gICAgICBsZXQgcmFuZG9tID0gMDtcbiAgICB3aGlsZSAoY2hpbGRyZW4ubm9kZXMoXCI6Y2hpbGRsZXNzXCIpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvLyAgICAgICAgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hpbGRyZW4ubm9kZXMoKS5sZW5ndGgpOyAvLyBpZiBhbGwgY2hpbGRyZW4gYXJlIGNvbXBvdW5kIHRoZW4gcHJvY2VlZCByYW5kb21seVxuICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5ub2RlcygpWzBdLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKGVsZXMpO1xuICAgIH1cbiAgICAvLyAgc2VsZWN0IHRoZSByZXByZXNlbnRhdGl2ZSBub2RlIC0gd2UgY2FuIGFwcGx5IGRpZmZlcmVudCBtZXRob2RzIGhlcmVcbiAgICAvLyAgICAgIHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoaWxkcmVuLm5vZGVzKFwiOmNoaWxkbGVzc1wiKS5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIG1pbiA9IGNoaWxkcmVuLm5vZGVzKFwiOmNoaWxkbGVzc1wiKVswXS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtcbiAgICBjaGlsZHJlbi5ub2RlcyhcIjpjaGlsZGxlc3NcIikuZm9yRWFjaChmdW5jdGlvbiAoZWxlMiwgaSkge1xuICAgICAgaWYgKGVsZTIuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPCBtaW4pIHtcbiAgICAgICAgbWluID0gZWxlMi5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHBhcmVudENoaWxkTWFwLnNldChlbGUuaWQoKSwgY2hpbGRyZW4ubm9kZXMoXCI6Y2hpbGRsZXNzXCIpW2luZGV4XS5pZCgpKTtcbiAgfSk7XG5cbiAgLy8gYWRkIG5laWdoYm9yaG9vZCByZWxhdGlvbnMgKGZpcnN0IHJlYWwsIHRoZW4gZHVtbXkgbm9kZXMpXG4gIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBlbGVJbmRleCA9IHZvaWQgMDtcblxuICAgIGlmIChlbGUuaXNQYXJlbnQoKSkgZWxlSW5kZXggPSBub2RlSW5kZXhlcy5nZXQocGFyZW50Q2hpbGRNYXAuZ2V0KGVsZS5pZCgpKSk7ZWxzZSBlbGVJbmRleCA9IG5vZGVJbmRleGVzLmdldChlbGUuaWQoKSk7XG5cbiAgICBlbGUubmVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAoZWxlcy5pbnRlcnNlY3Rpb24oZWxlLmVkZ2VzV2l0aChub2RlKSkubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAobm9kZS5pc1BhcmVudCgpKSBhbGxOb2Rlc05laWdoYm9yaG9vZFtlbGVJbmRleF0ucHVzaChwYXJlbnRDaGlsZE1hcC5nZXQobm9kZS5pZCgpKSk7ZWxzZSBhbGxOb2Rlc05laWdoYm9yaG9vZFtlbGVJbmRleF0ucHVzaChub2RlLmlkKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfa2V5KSB7XG4gICAgdmFyIGVsZUluZGV4ID0gbm9kZUluZGV4ZXMuZ2V0KF9rZXkpO1xuICAgIHZhciBkaXNjb25uZWN0ZWRJZCA9IHZvaWQgMDtcbiAgICBkdW1teU5vZGVzLmdldChfa2V5KS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgaWYgKGN5LmdldEVsZW1lbnRCeUlkKGlkKS5pc1BhcmVudCgpKSBkaXNjb25uZWN0ZWRJZCA9IHBhcmVudENoaWxkTWFwLmdldChpZCk7ZWxzZSBkaXNjb25uZWN0ZWRJZCA9IGlkO1xuXG4gICAgICBhbGxOb2Rlc05laWdoYm9yaG9vZFtlbGVJbmRleF0ucHVzaChkaXNjb25uZWN0ZWRJZCk7XG4gICAgICBhbGxOb2Rlc05laWdoYm9yaG9vZFtub2RlSW5kZXhlcy5nZXQoZGlzY29ubmVjdGVkSWQpXS5wdXNoKF9rZXkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG4gIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcbiAgdmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAodmFyIF9pdGVyYXRvcjIgPSBkdW1teU5vZGVzLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZSkge1xuICAgICAgdmFyIF9rZXkgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgIF9sb29wKF9rZXkpO1xuICAgIH1cblxuICAgIC8vIG5vZGVTaXplIG5vdyBvbmx5IGNvbnNpZGVycyB0aGUgc2l6ZSBvZiB0cmFuc2Zvcm1lZCBncmFwaFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuICAgIF9pdGVyYXRvckVycm9yMiA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikge1xuICAgICAgICBfaXRlcmF0b3IyLnJldHVybigpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyKSB7XG4gICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBub2RlU2l6ZSA9IG5vZGVJbmRleGVzLnNpemU7XG5cbiAgdmFyIHNwZWN0cmFsUmVzdWx0ID0gdm9pZCAwO1xuXG4gIC8vIElmIG51bWJlciBvZiBub2RlcyBpbiB0cmFuc2Zvcm1lZCBncmFwaCBpcyAxIG9yIDIsIGVpdGhlciBTVkQgb3IgcG93ZXJJdGVyYXRpb24gY2F1c2VzIHByb2JsZW1cbiAgLy8gU28gc2tpcCBzcGVjdHJhbCBhbmQgbGF5b3V0IHRoZSBncmFwaCB3aXRoIGNvc2VcbiAgaWYgKG5vZGVTaXplID4gMikge1xuICAgIC8vIGlmICMgb2Ygbm9kZXMgaW4gdHJhbnNmb3JtZWQgZ3JhcGggaXMgc21hbGxlciB0aGFuIHNhbXBsZSBzaXplLFxuICAgIC8vIHRoZW4gdXNlICMgb2Ygbm9kZXMgYXMgc2FtcGxlIHNpemVcbiAgICBzYW1wbGVTaXplID0gbm9kZVNpemUgPCBvcHRpb25zLnNhbXBsZVNpemUgPyBub2RlU2l6ZSA6IG9wdGlvbnMuc2FtcGxlU2l6ZTtcblxuICAgIC8vIGluc3RhbnRpYXRlcyB0aGUgcGFydGlhbCBtYXRyaWNlcyB0aGF0IHdpbGwgYmUgdXNlZCBpbiBzcGVjdHJhbCBsYXlvdXRcbiAgICBmb3IgKHZhciBfaTE0ID0gMDsgX2kxNCA8IG5vZGVTaXplOyBfaTE0KyspIHtcbiAgICAgIENbX2kxNF0gPSBbXTtcbiAgICB9XG4gICAgZm9yICh2YXIgX2kxNSA9IDA7IF9pMTUgPCBzYW1wbGVTaXplOyBfaTE1KyspIHtcbiAgICAgIElOVltfaTE1XSA9IFtdO1xuICAgIH1cblxuICAgIC8qKioqIEFwcGx5IHNwZWN0cmFsIGxheW91dCAqKioqL1xuXG4gICAgaWYgKG9wdGlvbnMucXVhbGl0eSA9PSBcImRyYWZ0XCIgfHwgb3B0aW9ucy5zdGVwID09IFwiYWxsXCIpIHtcbiAgICAgIGFsbEJGUyhzYW1wbGluZ1R5cGUpO1xuICAgICAgc2FtcGxlKCk7XG4gICAgICBwb3dlckl0ZXJhdGlvbigpO1xuXG4gICAgICBzcGVjdHJhbFJlc3VsdCA9IHsgbm9kZUluZGV4ZXM6IG5vZGVJbmRleGVzLCB4Q29vcmRzOiB4Q29vcmRzLCB5Q29vcmRzOiB5Q29vcmRzIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVJbmRleGVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgeENvb3Jkcy5wdXNoKGN5LmdldEVsZW1lbnRCeUlkKGtleSkucG9zaXRpb24oXCJ4XCIpKTtcbiAgICAgICAgeUNvb3Jkcy5wdXNoKGN5LmdldEVsZW1lbnRCeUlkKGtleSkucG9zaXRpb24oXCJ5XCIpKTtcbiAgICAgIH0pO1xuICAgICAgc3BlY3RyYWxSZXN1bHQgPSB7IG5vZGVJbmRleGVzOiBub2RlSW5kZXhlcywgeENvb3JkczogeENvb3JkcywgeUNvb3JkczogeUNvb3JkcyB9O1xuICAgIH1cbiAgICByZXR1cm4gc3BlY3RyYWxSZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gbm9kZUluZGV4ZXMua2V5cygpO1xuICAgIHZhciBmaXJzdE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChpdGVyYXRvci5uZXh0KCkudmFsdWUpO1xuICAgIHZhciBmaXJzdE5vZGVQb3MgPSBmaXJzdE5vZGUucG9zaXRpb24oKTtcbiAgICB2YXIgZmlyc3ROb2RlV2lkdGggPSBmaXJzdE5vZGUub3V0ZXJXaWR0aCgpO1xuICAgIHhDb29yZHMucHVzaChmaXJzdE5vZGVQb3MueCk7XG4gICAgeUNvb3Jkcy5wdXNoKGZpcnN0Tm9kZVBvcy55KTtcbiAgICBpZiAobm9kZVNpemUgPT0gMikge1xuICAgICAgdmFyIHNlY29uZE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChpdGVyYXRvci5uZXh0KCkudmFsdWUpO1xuICAgICAgdmFyIHNlY29uZE5vZGVXaWR0aCA9IHNlY29uZE5vZGUub3V0ZXJXaWR0aCgpO1xuICAgICAgeENvb3Jkcy5wdXNoKGZpcnN0Tm9kZVBvcy54ICsgZmlyc3ROb2RlV2lkdGggLyAyICsgc2Vjb25kTm9kZVdpZHRoIC8gMiArIG9wdGlvbnMuaWRlYWxFZGdlTGVuZ3RoKTtcbiAgICAgIHlDb29yZHMucHVzaChmaXJzdE5vZGVQb3MueSk7XG4gICAgfVxuXG4gICAgc3BlY3RyYWxSZXN1bHQgPSB7IG5vZGVJbmRleGVzOiBub2RlSW5kZXhlcywgeENvb3JkczogeENvb3JkcywgeUNvb3JkczogeUNvb3JkcyB9O1xuICAgIHJldHVybiBzcGVjdHJhbFJlc3VsdDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7IHNwZWN0cmFsTGF5b3V0OiBzcGVjdHJhbExheW91dCB9O1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTc5OlxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xuXG5cblxudmFyIGltcGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XG5cbi8vIHJlZ2lzdGVycyB0aGUgZXh0ZW5zaW9uIG9uIGEgY3l0b3NjYXBlIGxpYiByZWZcbnZhciByZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyKGN5dG9zY2FwZSkge1xuICBpZiAoIWN5dG9zY2FwZSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBjYW4ndCByZWdpc3RlciBpZiBjeXRvc2NhcGUgdW5zcGVjaWZpZWRcblxuICBjeXRvc2NhcGUoJ2xheW91dCcsICdmY29zZScsIGltcGwpOyAvLyByZWdpc3RlciB3aXRoIGN5dG9zY2FwZS5qc1xufTtcblxuaWYgKHR5cGVvZiBjeXRvc2NhcGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIGV4cG9zZSB0byBnbG9iYWwgY3l0b3NjYXBlIChpLmUuIHdpbmRvdy5jeXRvc2NhcGUpXG4gIHJlZ2lzdGVyKGN5dG9zY2FwZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXI7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDA6XG4vKioqLyAoKG1vZHVsZSkgPT4ge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzE0MF9fO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gc3RhcnR1cFxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3OSk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX2V4cG9ydHNfXztcbi8qKioqKiovIH0pKClcbjtcbn0pOyIsCiAgICAiaW1wb3J0IHtcbiAgZ2V0SWNvblNWRyxcbiAgcmVnaXN0ZXJJY29uUGFja3MsXG4gIHVua25vd25JY29uXG59IGZyb20gXCIuL2NodW5rLUwyQ0pPWVdFLm1qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlVGV4dFxufSBmcm9tIFwiLi9jaHVuay1aSTZWMlVFMi5tanNcIjtcbmltcG9ydCB7XG4gIHBvcHVsYXRlQ29tbW9uRGJcbn0gZnJvbSBcIi4vY2h1bmstT1FDTTVMSFUubWpzXCI7XG5pbXBvcnQge1xuICBJbXBlcmF0aXZlU3RhdGVcbn0gZnJvbSBcIi4vY2h1bmstMlJZUTNRVEIubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVuay1GMlhGTjNCWS5tanNcIjtcbmltcG9ydCB7XG4gIF9fbmFtZSxcbiAgY2xlYXIsXG4gIGRlZmF1bHRDb25maWdfZGVmYXVsdCxcbiAgZ2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY1RpdGxlLFxuICBnZXRDb25maWcyIGFzIGdldENvbmZpZyxcbiAgZ2V0RGlhZ3JhbVRpdGxlLFxuICBsb2csXG4gIHNldEFjY0Rlc2NyaXB0aW9uLFxuICBzZXRBY2NUaXRsZSxcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBzZXR1cEdyYXBoVmlld2JveFxufSBmcm9tIFwiLi9jaHVuay1JSUtNUUxJQy5tanNcIjtcblxuLy8gc3JjL2RpYWdyYW1zL2FyY2hpdGVjdHVyZS9hcmNoaXRlY3R1cmVQYXJzZXIudHNcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIkBtZXJtYWlkLWpzL3BhcnNlclwiO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVR5cGVzLnRzXG52YXIgQXJjaGl0ZWN0dXJlRGlyZWN0aW9uTmFtZSA9IHtcbiAgTDogXCJsZWZ0XCIsXG4gIFI6IFwicmlnaHRcIixcbiAgVDogXCJ0b3BcIixcbiAgQjogXCJib3R0b21cIlxufTtcbnZhciBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvdyA9IHtcbiAgTDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2NhbGUpID0+IGAke3NjYWxlfSwke3NjYWxlIC8gMn0gMCwke3NjYWxlfSAwLDBgLCBcIkxcIiksXG4gIFI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHNjYWxlKSA9PiBgMCwke3NjYWxlIC8gMn0gJHtzY2FsZX0sMCAke3NjYWxlfSwke3NjYWxlfWAsIFwiUlwiKSxcbiAgVDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc2NhbGUpID0+IGAwLDAgJHtzY2FsZX0sMCAke3NjYWxlIC8gMn0sJHtzY2FsZX1gLCBcIlRcIiksXG4gIEI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHNjYWxlKSA9PiBgJHtzY2FsZSAvIDJ9LDAgJHtzY2FsZX0sJHtzY2FsZX0gMCwke3NjYWxlfWAsIFwiQlwiKVxufTtcbnZhciBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1NoaWZ0ID0ge1xuICBMOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKChvcmlnLCBhcnJvd1NpemUpID0+IG9yaWcgLSBhcnJvd1NpemUgKyAyLCBcIkxcIiksXG4gIFI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9yaWcsIF9hcnJvd1NpemUpID0+IG9yaWcgLSAyLCBcIlJcIiksXG4gIFQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9yaWcsIGFycm93U2l6ZSkgPT4gb3JpZyAtIGFycm93U2l6ZSArIDIsIFwiVFwiKSxcbiAgQjogLyogQF9fUFVSRV9fICovIF9fbmFtZSgob3JpZywgX2Fycm93U2l6ZSkgPT4gb3JpZyAtIDIsIFwiQlwiKVxufTtcbnZhciBnZXRPcHBvc2l0ZUFyY2hpdGVjdHVyZURpcmVjdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICBpZiAoaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHgpKSB7XG4gICAgcmV0dXJuIHggPT09IFwiTFwiID8gXCJSXCIgOiBcIkxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geCA9PT0gXCJUXCIgPyBcIkJcIiA6IFwiVFwiO1xuICB9XG59LCBcImdldE9wcG9zaXRlQXJjaGl0ZWN0dXJlRGlyZWN0aW9uXCIpO1xudmFyIGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih4KSB7XG4gIGNvbnN0IHRlbXAgPSB4O1xuICByZXR1cm4gdGVtcCA9PT0gXCJMXCIgfHwgdGVtcCA9PT0gXCJSXCIgfHwgdGVtcCA9PT0gXCJUXCIgfHwgdGVtcCA9PT0gXCJCXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uXCIpO1xudmFyIGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICBjb25zdCB0ZW1wID0geDtcbiAgcmV0dXJuIHRlbXAgPT09IFwiTFwiIHx8IHRlbXAgPT09IFwiUlwiO1xufSwgXCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhcIik7XG52YXIgaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25ZID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih4KSB7XG4gIGNvbnN0IHRlbXAgPSB4O1xuICByZXR1cm4gdGVtcCA9PT0gXCJUXCIgfHwgdGVtcCA9PT0gXCJCXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWVwiKTtcbnZhciBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhZID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihhLCBiKSB7XG4gIGNvbnN0IGFYX2JZID0gaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKGEpICYmIGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWShiKTtcbiAgY29uc3QgYVlfYlggPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkoYSkgJiYgaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKGIpO1xuICByZXR1cm4gYVhfYlkgfHwgYVlfYlg7XG59LCBcImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlcIik7XG52YXIgaXNBcmNoaXRlY3R1cmVQYWlyWFkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHBhaXIpIHtcbiAgY29uc3QgbGhzID0gcGFpclswXTtcbiAgY29uc3QgcmhzID0gcGFpclsxXTtcbiAgY29uc3QgYVhfYlkgPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgobGhzKSAmJiBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkocmhzKTtcbiAgY29uc3QgYVlfYlggPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkobGhzKSAmJiBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgocmhzKTtcbiAgcmV0dXJuIGFYX2JZIHx8IGFZX2JYO1xufSwgXCJpc0FyY2hpdGVjdHVyZVBhaXJYWVwiKTtcbnZhciBpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCAhPT0gXCJMTFwiICYmIHggIT09IFwiUlJcIiAmJiB4ICE9PSBcIlRUXCIgJiYgeCAhPT0gXCJCQlwiO1xufSwgXCJpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpclwiKTtcbnZhciBnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihzb3VyY2VEaXIsIHRhcmdldERpcikge1xuICBjb25zdCBwYWlyID0gYCR7c291cmNlRGlyfSR7dGFyZ2V0RGlyfWA7XG4gIHJldHVybiBpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpcihwYWlyKSA/IHBhaXIgOiB2b2lkIDA7XG59LCBcImdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXJcIik7XG52YXIgc2hpZnRQb3NpdGlvbkJ5QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oW3gsIHldLCBwYWlyKSB7XG4gIGNvbnN0IGxocyA9IHBhaXJbMF07XG4gIGNvbnN0IHJocyA9IHBhaXJbMV07XG4gIGlmIChpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgobGhzKSkge1xuICAgIGlmIChpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkocmhzKSkge1xuICAgICAgcmV0dXJuIFt4ICsgKGxocyA9PT0gXCJMXCIgPyAtMSA6IDEpLCB5ICsgKHJocyA9PT0gXCJUXCIgPyAxIDogLTEpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFt4ICsgKGxocyA9PT0gXCJMXCIgPyAtMSA6IDEpLCB5XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWChyaHMpKSB7XG4gICAgICByZXR1cm4gW3ggKyAocmhzID09PSBcIkxcIiA/IDEgOiAtMSksIHkgKyAobGhzID09PSBcIlRcIiA/IDEgOiAtMSldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3gsIHkgKyAobGhzID09PSBcIlRcIiA/IDEgOiAtMSldO1xuICAgIH1cbiAgfVxufSwgXCJzaGlmdFBvc2l0aW9uQnlBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyXCIpO1xudmFyIGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblhZRmFjdG9ycyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ocGFpcikge1xuICBpZiAocGFpciA9PT0gXCJMVFwiIHx8IHBhaXIgPT09IFwiVExcIikge1xuICAgIHJldHVybiBbMSwgMV07XG4gIH0gZWxzZSBpZiAocGFpciA9PT0gXCJCTFwiIHx8IHBhaXIgPT09IFwiTEJcIikge1xuICAgIHJldHVybiBbMSwgLTFdO1xuICB9IGVsc2UgaWYgKHBhaXIgPT09IFwiQlJcIiB8fCBwYWlyID09PSBcIlJCXCIpIHtcbiAgICByZXR1cm4gWy0xLCAtMV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFstMSwgMV07XG4gIH1cbn0sIFwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlGYWN0b3JzXCIpO1xudmFyIGlzQXJjaGl0ZWN0dXJlU2VydmljZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeCkge1xuICBjb25zdCB0ZW1wID0geDtcbiAgcmV0dXJuIHRlbXAudHlwZSA9PT0gXCJzZXJ2aWNlXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlU2VydmljZVwiKTtcbnZhciBpc0FyY2hpdGVjdHVyZUp1bmN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih4KSB7XG4gIGNvbnN0IHRlbXAgPSB4O1xuICByZXR1cm4gdGVtcC50eXBlID09PSBcImp1bmN0aW9uXCI7XG59LCBcImlzQXJjaGl0ZWN0dXJlSnVuY3Rpb25cIik7XG52YXIgZWRnZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChlZGdlKSA9PiB7XG4gIHJldHVybiBlZGdlLmRhdGEoKTtcbn0sIFwiZWRnZURhdGFcIik7XG52YXIgbm9kZURhdGEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChub2RlKSA9PiB7XG4gIHJldHVybiBub2RlLmRhdGEoKTtcbn0sIFwibm9kZURhdGFcIik7XG5cbi8vIHNyYy9kaWFncmFtcy9hcmNoaXRlY3R1cmUvYXJjaGl0ZWN0dXJlRGIudHNcbnZhciBERUZBVUxUX0FSQ0hJVEVDVFVSRV9DT05GSUcgPSBkZWZhdWx0Q29uZmlnX2RlZmF1bHQuYXJjaGl0ZWN0dXJlO1xudmFyIHN0YXRlID0gbmV3IEltcGVyYXRpdmVTdGF0ZSgoKSA9PiAoe1xuICBub2Rlczoge30sXG4gIGdyb3Vwczoge30sXG4gIGVkZ2VzOiBbXSxcbiAgcmVnaXN0ZXJlZElkczoge30sXG4gIGNvbmZpZzogREVGQVVMVF9BUkNISVRFQ1RVUkVfQ09ORklHLFxuICBkYXRhU3RydWN0dXJlczogdm9pZCAwLFxuICBlbGVtZW50czoge31cbn0pKTtcbnZhciBjbGVhcjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgc3RhdGUucmVzZXQoKTtcbiAgY2xlYXIoKTtcbn0sIFwiY2xlYXJcIik7XG52YXIgYWRkU2VydmljZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oe1xuICBpZCxcbiAgaWNvbixcbiAgaW46IHBhcmVudCxcbiAgdGl0bGUsXG4gIGljb25UZXh0XG59KSB7XG4gIGlmIChzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHNlcnZpY2UgaWQgWyR7aWR9XSBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyICR7c3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW2lkXX1gXG4gICAgKTtcbiAgfVxuICBpZiAocGFyZW50ICE9PSB2b2lkIDApIHtcbiAgICBpZiAoaWQgPT09IHBhcmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHtpZH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3BhcmVudF0gPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIHNlcnZpY2UgWyR7aWR9XSdzIHBhcmVudCBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIGNyZWF0ZWQgYmVmb3JlIHRoaXMgc2VydmljZWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcGFyZW50XSA9PT0gXCJub2RlXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7aWR9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdID0gXCJub2RlXCI7XG4gIHN0YXRlLnJlY29yZHMubm9kZXNbaWRdID0ge1xuICAgIGlkLFxuICAgIHR5cGU6IFwic2VydmljZVwiLFxuICAgIGljb24sXG4gICAgaWNvblRleHQsXG4gICAgdGl0bGUsXG4gICAgZWRnZXM6IFtdLFxuICAgIGluOiBwYXJlbnRcbiAgfTtcbn0sIFwiYWRkU2VydmljZVwiKTtcbnZhciBnZXRTZXJ2aWNlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoaXNBcmNoaXRlY3R1cmVTZXJ2aWNlKSwgXCJnZXRTZXJ2aWNlc1wiKTtcbnZhciBhZGRKdW5jdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeyBpZCwgaW46IHBhcmVudCB9KSB7XG4gIHN0YXRlLnJlY29yZHMucmVnaXN0ZXJlZElkc1tpZF0gPSBcIm5vZGVcIjtcbiAgc3RhdGUucmVjb3Jkcy5ub2Rlc1tpZF0gPSB7XG4gICAgaWQsXG4gICAgdHlwZTogXCJqdW5jdGlvblwiLFxuICAgIGVkZ2VzOiBbXSxcbiAgICBpbjogcGFyZW50XG4gIH07XG59LCBcImFkZEp1bmN0aW9uXCIpO1xudmFyIGdldEp1bmN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoaXNBcmNoaXRlY3R1cmVKdW5jdGlvbiksIFwiZ2V0SnVuY3Rpb25zXCIpO1xudmFyIGdldE5vZGVzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBPYmplY3QudmFsdWVzKHN0YXRlLnJlY29yZHMubm9kZXMpLCBcImdldE5vZGVzXCIpO1xudmFyIGdldE5vZGUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCkgPT4gc3RhdGUucmVjb3Jkcy5ub2Rlc1tpZF0sIFwiZ2V0Tm9kZVwiKTtcbnZhciBhZGRHcm91cCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oeyBpZCwgaWNvbiwgaW46IHBhcmVudCwgdGl0bGUgfSkge1xuICBpZiAoc3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW2lkXSAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBncm91cCBpZCBbJHtpZH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHtzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdfWBcbiAgICApO1xuICB9XG4gIGlmIChwYXJlbnQgIT09IHZvaWQgMCkge1xuICAgIGlmIChpZCA9PT0gcGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHtpZH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3BhcmVudF0gPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGdyb3VwIFske2lkfV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIGdyb3VwYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLnJlY29yZHMucmVnaXN0ZXJlZElkc1twYXJlbnRdID09PSBcIm5vZGVcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7aWR9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbaWRdID0gXCJncm91cFwiO1xuICBzdGF0ZS5yZWNvcmRzLmdyb3Vwc1tpZF0gPSB7XG4gICAgaWQsXG4gICAgaWNvbixcbiAgICB0aXRsZSxcbiAgICBpbjogcGFyZW50XG4gIH07XG59LCBcImFkZEdyb3VwXCIpO1xudmFyIGdldEdyb3VwcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzdGF0ZS5yZWNvcmRzLmdyb3Vwcyk7XG59LCBcImdldEdyb3Vwc1wiKTtcbnZhciBhZGRFZGdlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbih7XG4gIGxoc0lkLFxuICByaHNJZCxcbiAgbGhzRGlyLFxuICByaHNEaXIsXG4gIGxoc0ludG8sXG4gIHJoc0ludG8sXG4gIGxoc0dyb3VwLFxuICByaHNHcm91cCxcbiAgdGl0bGVcbn0pIHtcbiAgaWYgKCFpc0FyY2hpdGVjdHVyZURpcmVjdGlvbihsaHNEaXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciBsZWZ0IGhhbmQgc2lkZSBvZiBlZGdlICR7bGhzSWR9LS0ke3Joc0lkfS4gRXhwZWN0ZWQgKEwsUixULEIpIGdvdCAke2xoc0Rpcn1gXG4gICAgKTtcbiAgfVxuICBpZiAoIWlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uKHJoc0RpcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkaXJlY3Rpb24gZ2l2ZW4gZm9yIHJpZ2h0IGhhbmQgc2lkZSBvZiBlZGdlICR7bGhzSWR9LS0ke3Joc0lkfS4gRXhwZWN0ZWQgKEwsUixULEIpIGdvdCAke3Joc0Rpcn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdGUucmVjb3Jkcy5ub2Rlc1tsaHNJZF0gPT09IHZvaWQgMCAmJiBzdGF0ZS5yZWNvcmRzLmdyb3Vwc1tsaHNJZF0gPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgbGVmdC1oYW5kIGlkIFske2xoc0lkfV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0gPT09IHZvaWQgMCAmJiBzdGF0ZS5yZWNvcmRzLmdyb3Vwc1tsaHNJZF0gPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtyaHNJZH1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYFxuICAgICk7XG4gIH1cbiAgY29uc3QgbGhzR3JvdXBJZCA9IHN0YXRlLnJlY29yZHMubm9kZXNbbGhzSWRdLmluO1xuICBjb25zdCByaHNHcm91cElkID0gc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0uaW47XG4gIGlmIChsaHNHcm91cCAmJiBsaHNHcm91cElkICYmIHJoc0dyb3VwSWQgJiYgbGhzR3JvdXBJZCA9PSByaHNHcm91cElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBsZWZ0LWhhbmQgaWQgWyR7bGhzSWR9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gXG4gICAgKTtcbiAgfVxuICBpZiAocmhzR3JvdXAgJiYgbGhzR3JvdXBJZCAmJiByaHNHcm91cElkICYmIGxoc0dyb3VwSWQgPT0gcmhzR3JvdXBJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtyaHNJZH1dIGlzIG1vZGlmaWVkIHRvIHRyYXZlcnNlIHRoZSBncm91cCBib3VuZGFyeSwgYnV0IHRoZSBlZGdlIGRvZXMgbm90IHBhc3MgdGhyb3VnaCB0d28gZ3JvdXBzLmBcbiAgICApO1xuICB9XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgbGhzSWQsXG4gICAgbGhzRGlyLFxuICAgIGxoc0ludG8sXG4gICAgbGhzR3JvdXAsXG4gICAgcmhzSWQsXG4gICAgcmhzRGlyLFxuICAgIHJoc0ludG8sXG4gICAgcmhzR3JvdXAsXG4gICAgdGl0bGVcbiAgfTtcbiAgc3RhdGUucmVjb3Jkcy5lZGdlcy5wdXNoKGVkZ2UpO1xuICBpZiAoc3RhdGUucmVjb3Jkcy5ub2Rlc1tsaHNJZF0gJiYgc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0pIHtcbiAgICBzdGF0ZS5yZWNvcmRzLm5vZGVzW2xoc0lkXS5lZGdlcy5wdXNoKHN0YXRlLnJlY29yZHMuZWRnZXNbc3RhdGUucmVjb3Jkcy5lZGdlcy5sZW5ndGggLSAxXSk7XG4gICAgc3RhdGUucmVjb3Jkcy5ub2Rlc1tyaHNJZF0uZWRnZXMucHVzaChzdGF0ZS5yZWNvcmRzLmVkZ2VzW3N0YXRlLnJlY29yZHMuZWRnZXMubGVuZ3RoIC0gMV0pO1xuICB9XG59LCBcImFkZEVkZ2VcIik7XG52YXIgZ2V0RWRnZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHN0YXRlLnJlY29yZHMuZWRnZXMsIFwiZ2V0RWRnZXNcIik7XG52YXIgZ2V0RGF0YVN0cnVjdHVyZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgaWYgKHN0YXRlLnJlY29yZHMuZGF0YVN0cnVjdHVyZXMgPT09IHZvaWQgMCkge1xuICAgIGNvbnN0IGFkakxpc3QgPSBPYmplY3QuZW50cmllcyhzdGF0ZS5yZWNvcmRzLm5vZGVzKS5yZWR1Y2UoKHByZXZPdXRlciwgW2lkLCBzZXJ2aWNlXSkgPT4ge1xuICAgICAgcHJldk91dGVyW2lkXSA9IHNlcnZpY2UuZWRnZXMucmVkdWNlKChwcmV2SW5uZXIsIGVkZ2UpID0+IHtcbiAgICAgICAgaWYgKGVkZ2UubGhzSWQgPT09IGlkKSB7XG4gICAgICAgICAgY29uc3QgcGFpciA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIoZWRnZS5saHNEaXIsIGVkZ2UucmhzRGlyKTtcbiAgICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgcHJldklubmVyW3BhaXJdID0gZWRnZS5yaHNJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGFpciA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIoZWRnZS5yaHNEaXIsIGVkZ2UubGhzRGlyKTtcbiAgICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgcHJldklubmVyW3BhaXJdID0gZWRnZS5saHNJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZJbm5lcjtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBwcmV2T3V0ZXI7XG4gICAgfSwge30pO1xuICAgIGNvbnN0IGZpcnN0SWQgPSBPYmplY3Qua2V5cyhhZGpMaXN0KVswXTtcbiAgICBjb25zdCB2aXNpdGVkID0geyBbZmlyc3RJZF06IDEgfTtcbiAgICBjb25zdCBub3RWaXNpdGVkID0gT2JqZWN0LmtleXMoYWRqTGlzdCkucmVkdWNlKFxuICAgICAgKHByZXYsIGlkKSA9PiBpZCA9PT0gZmlyc3RJZCA/IHByZXYgOiB7IC4uLnByZXYsIFtpZF06IDEgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBCRlMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChzdGFydGluZ0lkKSA9PiB7XG4gICAgICBjb25zdCBzcGF0aWFsTWFwID0geyBbc3RhcnRpbmdJZF06IFswLCAwXSB9O1xuICAgICAgY29uc3QgcXVldWUgPSBbc3RhcnRpbmdJZF07XG4gICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBpZCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIHZpc2l0ZWRbaWRdID0gMTtcbiAgICAgICAgICBkZWxldGUgbm90VmlzaXRlZFtpZF07XG4gICAgICAgICAgY29uc3QgYWRqID0gYWRqTGlzdFtpZF07XG4gICAgICAgICAgY29uc3QgW3Bvc1gsIHBvc1ldID0gc3BhdGlhbE1hcFtpZF07XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoYWRqKS5mb3JFYWNoKChbZGlyLCByaHNJZF0pID0+IHtcbiAgICAgICAgICAgIGlmICghdmlzaXRlZFtyaHNJZF0pIHtcbiAgICAgICAgICAgICAgc3BhdGlhbE1hcFtyaHNJZF0gPSBzaGlmdFBvc2l0aW9uQnlBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyKFxuICAgICAgICAgICAgICAgIFtwb3NYLCBwb3NZXSxcbiAgICAgICAgICAgICAgICBkaXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcXVldWUucHVzaChyaHNJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzcGF0aWFsTWFwO1xuICAgIH0sIFwiQkZTXCIpO1xuICAgIGNvbnN0IHNwYXRpYWxNYXBzID0gW0JGUyhmaXJzdElkKV07XG4gICAgd2hpbGUgKE9iamVjdC5rZXlzKG5vdFZpc2l0ZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwYXRpYWxNYXBzLnB1c2goQkZTKE9iamVjdC5rZXlzKG5vdFZpc2l0ZWQpWzBdKSk7XG4gICAgfVxuICAgIHN0YXRlLnJlY29yZHMuZGF0YVN0cnVjdHVyZXMgPSB7XG4gICAgICBhZGpMaXN0LFxuICAgICAgc3BhdGlhbE1hcHNcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdGF0ZS5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzO1xufSwgXCJnZXREYXRhU3RydWN0dXJlc1wiKTtcbnZhciBzZXRFbGVtZW50Rm9ySWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChpZCwgZWxlbWVudCkgPT4ge1xuICBzdGF0ZS5yZWNvcmRzLmVsZW1lbnRzW2lkXSA9IGVsZW1lbnQ7XG59LCBcInNldEVsZW1lbnRGb3JJZFwiKTtcbnZhciBnZXRFbGVtZW50QnlJZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkKSA9PiBzdGF0ZS5yZWNvcmRzLmVsZW1lbnRzW2lkXSwgXCJnZXRFbGVtZW50QnlJZFwiKTtcbnZhciBkYiA9IHtcbiAgY2xlYXI6IGNsZWFyMixcbiAgc2V0RGlhZ3JhbVRpdGxlLFxuICBnZXREaWFncmFtVGl0bGUsXG4gIHNldEFjY1RpdGxlLFxuICBnZXRBY2NUaXRsZSxcbiAgc2V0QWNjRGVzY3JpcHRpb24sXG4gIGdldEFjY0Rlc2NyaXB0aW9uLFxuICBhZGRTZXJ2aWNlLFxuICBnZXRTZXJ2aWNlcyxcbiAgYWRkSnVuY3Rpb24sXG4gIGdldEp1bmN0aW9ucyxcbiAgZ2V0Tm9kZXMsXG4gIGdldE5vZGUsXG4gIGFkZEdyb3VwLFxuICBnZXRHcm91cHMsXG4gIGFkZEVkZ2UsXG4gIGdldEVkZ2VzLFxuICBzZXRFbGVtZW50Rm9ySWQsXG4gIGdldEVsZW1lbnRCeUlkLFxuICBnZXREYXRhU3RydWN0dXJlc1xufTtcbmZ1bmN0aW9uIGdldENvbmZpZ0ZpZWxkKGZpZWxkKSB7XG4gIGNvbnN0IGFyY2ggPSBnZXRDb25maWcoKS5hcmNoaXRlY3R1cmU7XG4gIGlmIChhcmNoPy5bZmllbGRdKSB7XG4gICAgcmV0dXJuIGFyY2hbZmllbGRdO1xuICB9XG4gIHJldHVybiBERUZBVUxUX0FSQ0hJVEVDVFVSRV9DT05GSUdbZmllbGRdO1xufVxuX19uYW1lKGdldENvbmZpZ0ZpZWxkLCBcImdldENvbmZpZ0ZpZWxkXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVBhcnNlci50c1xudmFyIHBvcHVsYXRlRGIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhc3QsIGRiMikgPT4ge1xuICBwb3B1bGF0ZUNvbW1vbkRiKGFzdCwgZGIyKTtcbiAgYXN0Lmdyb3Vwcy5tYXAoZGIyLmFkZEdyb3VwKTtcbiAgYXN0LnNlcnZpY2VzLm1hcCgoc2VydmljZSkgPT4gZGIyLmFkZFNlcnZpY2UoeyAuLi5zZXJ2aWNlLCB0eXBlOiBcInNlcnZpY2VcIiB9KSk7XG4gIGFzdC5qdW5jdGlvbnMubWFwKChzZXJ2aWNlKSA9PiBkYjIuYWRkSnVuY3Rpb24oeyAuLi5zZXJ2aWNlLCB0eXBlOiBcImp1bmN0aW9uXCIgfSkpO1xuICBhc3QuZWRnZXMubWFwKGRiMi5hZGRFZGdlKTtcbn0sIFwicG9wdWxhdGVEYlwiKTtcbnZhciBwYXJzZXIgPSB7XG4gIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHBhcnNlKFwiYXJjaGl0ZWN0dXJlXCIsIGlucHV0KTtcbiAgICBsb2cuZGVidWcoYXN0KTtcbiAgICBwb3B1bGF0ZURiKGFzdCwgZGIpO1xuICB9LCBcInBhcnNlXCIpXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVN0eWxlcy50c1xudmFyIGdldFN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKG9wdGlvbnMpID0+IGBcbiAgLmVkZ2Uge1xuICAgIHN0cm9rZS13aWR0aDogJHtvcHRpb25zLmFyY2hFZGdlV2lkdGh9O1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFyY2hFZGdlQ29sb3J9O1xuICAgIGZpbGw6IG5vbmU7XG4gIH1cblxuICAuYXJyb3cge1xuICAgIGZpbGw6ICR7b3B0aW9ucy5hcmNoRWRnZUFycm93Q29sb3J9O1xuICB9XG5cbiAgLm5vZGUtYmtnIHtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogJHtvcHRpb25zLmFyY2hHcm91cEJvcmRlckNvbG9yfTtcbiAgICBzdHJva2Utd2lkdGg6ICR7b3B0aW9ucy5hcmNoR3JvdXBCb3JkZXJXaWR0aH07XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODtcbiAgfVxuICAubm9kZS1pY29uLXRleHQge1xuICAgIGRpc3BsYXk6IGZsZXg7IFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgXG4gIC5ub2RlLWljb24tdGV4dCA+IGRpdiB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgbWFyZ2luOiAxcHg7XG4gICAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB9XG5gLCBcImdldFN0eWxlc1wiKTtcbnZhciBhcmNoaXRlY3R1cmVTdHlsZXNfZGVmYXVsdCA9IGdldFN0eWxlcztcblxuLy8gc3JjL2RpYWdyYW1zL2FyY2hpdGVjdHVyZS9hcmNoaXRlY3R1cmVSZW5kZXJlci50c1xuaW1wb3J0IGN5dG9zY2FwZSBmcm9tIFwiY3l0b3NjYXBlXCI7XG5pbXBvcnQgZmNvc2UgZnJvbSBcImN5dG9zY2FwZS1mY29zZVwiO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5cbi8vIHNyYy9kaWFncmFtcy9hcmNoaXRlY3R1cmUvYXJjaGl0ZWN0dXJlSWNvbnMudHNcbnZhciB3cmFwSWNvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGljb24pID0+IHtcbiAgcmV0dXJuIGA8Zz48cmVjdCB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBzdHlsZT1cImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4O1wiLz4ke2ljb259PC9nPmA7XG59LCBcIndyYXBJY29uXCIpO1xudmFyIGFyY2hpdGVjdHVyZUljb25zID0ge1xuICBwcmVmaXg6IFwibWVybWFpZC1hcmNoaXRlY3R1cmVcIixcbiAgaGVpZ2h0OiA4MCxcbiAgd2lkdGg6IDgwLFxuICBpY29uczoge1xuICAgIGRhdGFiYXNlOiB7XG4gICAgICBib2R5OiB3cmFwSWNvbihcbiAgICAgICAgJzxwYXRoIGlkPVwiYlwiIGRhdGEtbmFtZT1cIjRcIiBkPVwibTIwLDU3Ljg2YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNFwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48cGF0aCBpZD1cImNcIiBkYXRhLW5hbWU9XCIzXCIgZD1cIm0yMCw0NS45NWMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTRcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PHBhdGggaWQ9XCJkXCIgZGF0YS1uYW1lPVwiMlwiIGQ9XCJtMjAsMzQuMDVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxlbGxpcHNlIGlkPVwiZVwiIGRhdGEtbmFtZT1cIjFcIiBjeD1cIjQwXCIgY3k9XCIyMi4xNFwiIHJ4PVwiMjBcIiByeT1cIjcuMTRcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGxpbmUgeDE9XCIyMFwiIHkxPVwiNTcuODZcIiB4Mj1cIjIwXCIgeTI9XCIyMi4xNFwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48bGluZSB4MT1cIjYwXCIgeTE9XCI1Ny44NlwiIHgyPVwiNjBcIiB5Mj1cIjIyLjE0XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPidcbiAgICAgIClcbiAgICB9LFxuICAgIHNlcnZlcjoge1xuICAgICAgYm9keTogd3JhcEljb24oXG4gICAgICAgICc8cmVjdCB4PVwiMTcuNVwiIHk9XCIxNy41XCIgd2lkdGg9XCI0NVwiIGhlaWdodD1cIjQ1XCIgcng9XCIyXCIgcnk9XCIyXCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxsaW5lIHgxPVwiMTcuNVwiIHkxPVwiMzIuNVwiIHgyPVwiNjIuNVwiIHkyPVwiMzIuNVwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48bGluZSB4MT1cIjE3LjVcIiB5MT1cIjQ3LjVcIiB4Mj1cIjYyLjVcIiB5Mj1cIjQ3LjVcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGc+PHBhdGggZD1cIm01Ni4yNSwyNWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVpcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4O1wiLz48cGF0aCBkPVwibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WlwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjwvZz48Zz48cGF0aCBkPVwibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WlwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7XCIvPjxwYXRoIGQ9XCJtNTYuMjUsNDBjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaXCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PC9nPjxnPjxwYXRoIGQ9XCJtNTYuMjUsNTVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaXCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2Utd2lkdGg6IDBweDtcIi8+PHBhdGggZD1cIm01Ni4yNSw1NWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVpcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48L2c+PGc+PGNpcmNsZSBjeD1cIjMyLjVcIiBjeT1cIjI1XCIgcj1cIi43NVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjxjaXJjbGUgY3g9XCIyNy41XCIgY3k9XCIyNVwiIHI9XCIuNzVcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48Y2lyY2xlIGN4PVwiMjIuNVwiIGN5PVwiMjVcIiByPVwiLjc1XCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PC9nPjxnPjxjaXJjbGUgY3g9XCIzMi41XCIgY3k9XCI0MFwiIHI9XCIuNzVcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48Y2lyY2xlIGN4PVwiMjcuNVwiIGN5PVwiNDBcIiByPVwiLjc1XCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PGNpcmNsZSBjeD1cIjIyLjVcIiBjeT1cIjQwXCIgcj1cIi43NVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjwvZz48Zz48Y2lyY2xlIGN4PVwiMzIuNVwiIGN5PVwiNTVcIiByPVwiLjc1XCIgc3R5bGU9XCJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDtcIi8+PGNpcmNsZSBjeD1cIjI3LjVcIiBjeT1cIjU1XCIgcj1cIi43NVwiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7XCIvPjxjaXJjbGUgY3g9XCIyMi41XCIgY3k9XCI1NVwiIHI9XCIuNzVcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwO1wiLz48L2c+J1xuICAgICAgKVxuICAgIH0sXG4gICAgZGlzazoge1xuICAgICAgYm9keTogd3JhcEljb24oXG4gICAgICAgICc8cmVjdCB4PVwiMjBcIiB5PVwiMTVcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNTBcIiByeD1cIjFcIiByeT1cIjFcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCIyNFwiIGN5PVwiMTkuMTdcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCI1NlwiIGN5PVwiMTkuMTdcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCIyNFwiIGN5PVwiNjAuODNcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCI1NlwiIGN5PVwiNjAuODNcIiByeD1cIi44XCIgcnk9XCIuODNcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGVsbGlwc2UgY3g9XCI0MFwiIGN5PVwiMzMuNzVcIiByeD1cIjE0XCIgcnk9XCIxNC41OFwiIHN0eWxlPVwiZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48ZWxsaXBzZSBjeD1cIjQwXCIgY3k9XCIzMy43NVwiIHJ4PVwiNFwiIHJ5PVwiNC4xN1wiIHN0eWxlPVwiZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4O1wiLz48cGF0aCBkPVwibTM3LjUxLDQyLjUybC00LjgzLDEzLjIyYy0uMjYuNzEtMS4xLDEuMDItMS43Ni42NGwtNC4xOC0yLjQyYy0uNjYtLjM4LS44MS0xLjI2LS4zMy0xLjg0bDkuMDEtMTAuOGMuODgtMS4wNSwyLjU2LS4wOCwyLjA5LDEuMlpcIiBzdHlsZT1cImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4O1wiLz4nXG4gICAgICApXG4gICAgfSxcbiAgICBpbnRlcm5ldDoge1xuICAgICAgYm9keTogd3JhcEljb24oXG4gICAgICAgICc8Y2lyY2xlIGN4PVwiNDBcIiBjeT1cIjQwXCIgcj1cIjIyLjVcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGxpbmUgeDE9XCI0MFwiIHkxPVwiMTcuNVwiIHgyPVwiNDBcIiB5Mj1cIjYyLjVcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PGxpbmUgeDE9XCIxNy41XCIgeTE9XCI0MFwiIHgyPVwiNjIuNVwiIHkyPVwiNDBcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+PHBhdGggZD1cIm0zOS45OSwxNy41MWMtMTUuMjgsMTEuMS0xNS4yOCwzMy44OCwwLDQ0Ljk4XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxwYXRoIGQ9XCJtNDAuMDEsMTcuNTFjMTUuMjgsMTEuMSwxNS4yOCwzMy44OCwwLDQ0Ljk4XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxsaW5lIHgxPVwiMTkuNzVcIiB5MT1cIjMwLjFcIiB4Mj1cIjYwLjI1XCIgeTI9XCIzMC4xXCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPjxsaW5lIHgxPVwiMTkuNzVcIiB5MT1cIjQ5LjlcIiB4Mj1cIjYwLjI1XCIgeTI9XCI0OS45XCIgc3R5bGU9XCJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7XCIvPidcbiAgICAgIClcbiAgICB9LFxuICAgIGNsb3VkOiB7XG4gICAgICBib2R5OiB3cmFwSWNvbihcbiAgICAgICAgJzxwYXRoIGQ9XCJtNjUsNDcuNWMwLDIuNzYtMi4yNCw1LTUsNUgyMGMtMi43NiwwLTUtMi4yNC01LTUsMC0xLjg3LDEuMDMtMy41MSwyLjU2LTQuMzYtLjA0LS4yMS0uMDYtLjQyLS4wNi0uNjQsMC0yLjYsMi40OC00Ljc0LDUuNjUtNC45NywxLjY1LTQuNTEsNi4zNC03Ljc2LDExLjg1LTcuNzYuODYsMCwxLjY5LjA4LDIuNS4yMywyLjA5LTEuNTcsNC42OS0yLjUsNy41LTIuNSw2LjEsMCwxMS4xOSw0LjM4LDEyLjI4LDEwLjE3LDIuMTQuNTYsMy43MiwyLjUxLDMuNzIsNC44MywwLC4wMywwLC4wNy0uMDEuMSwyLjI5LjQ2LDQuMDEsMi40OCw0LjAxLDQuOVpcIiBzdHlsZT1cImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDtcIi8+J1xuICAgICAgKVxuICAgIH0sXG4gICAgdW5rbm93bjogdW5rbm93bkljb24sXG4gICAgYmxhbms6IHtcbiAgICAgIGJvZHk6IHdyYXBJY29uKFwiXCIpXG4gICAgfVxuICB9XG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL3N2Z0RyYXcudHNcbnZhciBkcmF3RWRnZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGVkZ2VzRWwsIGN5KSB7XG4gIGNvbnN0IHBhZGRpbmcgPSBnZXRDb25maWdGaWVsZChcInBhZGRpbmdcIik7XG4gIGNvbnN0IGljb25TaXplID0gZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKTtcbiAgY29uc3QgaGFsZkljb25TaXplID0gaWNvblNpemUgLyAyO1xuICBjb25zdCBhcnJvd1NpemUgPSBpY29uU2l6ZSAvIDY7XG4gIGNvbnN0IGhhbGZBcnJvd1NpemUgPSBhcnJvd1NpemUgLyAyO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBjeS5lZGdlcygpLm1hcChhc3luYyAoZWRnZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHNvdXJjZURpcixcbiAgICAgICAgc291cmNlQXJyb3csXG4gICAgICAgIHNvdXJjZUdyb3VwLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRhcmdldERpcixcbiAgICAgICAgdGFyZ2V0QXJyb3csXG4gICAgICAgIHRhcmdldEdyb3VwLFxuICAgICAgICBsYWJlbFxuICAgICAgfSA9IGVkZ2VEYXRhKGVkZ2UpO1xuICAgICAgbGV0IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSA9IGVkZ2VbMF0uc291cmNlRW5kcG9pbnQoKTtcbiAgICAgIGNvbnN0IHsgeDogbWlkWCwgeTogbWlkWSB9ID0gZWRnZVswXS5taWRwb2ludCgpO1xuICAgICAgbGV0IHsgeDogZW5kWCwgeTogZW5kWSB9ID0gZWRnZVswXS50YXJnZXRFbmRwb2ludCgpO1xuICAgICAgY29uc3QgZ3JvdXBFZGdlU2hpZnQgPSBwYWRkaW5nICsgNDtcbiAgICAgIGlmIChzb3VyY2VHcm91cCkge1xuICAgICAgICBpZiAoaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHNvdXJjZURpcikpIHtcbiAgICAgICAgICBzdGFydFggKz0gc291cmNlRGlyID09PSBcIkxcIiA/IC1ncm91cEVkZ2VTaGlmdCA6IGdyb3VwRWRnZVNoaWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0WSArPSBzb3VyY2VEaXIgPT09IFwiVFwiID8gLWdyb3VwRWRnZVNoaWZ0IDogZ3JvdXBFZGdlU2hpZnQgKyAxODtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgodGFyZ2V0RGlyKSkge1xuICAgICAgICAgIGVuZFggKz0gdGFyZ2V0RGlyID09PSBcIkxcIiA/IC1ncm91cEVkZ2VTaGlmdCA6IGdyb3VwRWRnZVNoaWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZFkgKz0gdGFyZ2V0RGlyID09PSBcIlRcIiA/IC1ncm91cEVkZ2VTaGlmdCA6IGdyb3VwRWRnZVNoaWZ0ICsgMTg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlR3JvdXAgJiYgZGIuZ2V0Tm9kZShzb3VyY2UpPy50eXBlID09PSBcImp1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWChzb3VyY2VEaXIpKSB7XG4gICAgICAgICAgc3RhcnRYICs9IHNvdXJjZURpciA9PT0gXCJMXCIgPyBoYWxmSWNvblNpemUgOiAtaGFsZkljb25TaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0WSArPSBzb3VyY2VEaXIgPT09IFwiVFwiID8gaGFsZkljb25TaXplIDogLWhhbGZJY29uU2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0YXJnZXRHcm91cCAmJiBkYi5nZXROb2RlKHRhcmdldCk/LnR5cGUgPT09IFwianVuY3Rpb25cIikge1xuICAgICAgICBpZiAoaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHRhcmdldERpcikpIHtcbiAgICAgICAgICBlbmRYICs9IHRhcmdldERpciA9PT0gXCJMXCIgPyBoYWxmSWNvblNpemUgOiAtaGFsZkljb25TaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZFkgKz0gdGFyZ2V0RGlyID09PSBcIlRcIiA/IGhhbGZJY29uU2l6ZSA6IC1oYWxmSWNvblNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoKSB7XG4gICAgICAgIGNvbnN0IGcgPSBlZGdlc0VsLmluc2VydChcImdcIik7XG4gICAgICAgIGcuaW5zZXJ0KFwicGF0aFwiKS5hdHRyKFwiZFwiLCBgTSAke3N0YXJ0WH0sJHtzdGFydFl9IEwgJHttaWRYfSwke21pZFl9IEwke2VuZFh9LCR7ZW5kWX0gYCkuYXR0cihcImNsYXNzXCIsIFwiZWRnZVwiKTtcbiAgICAgICAgaWYgKHNvdXJjZUFycm93KSB7XG4gICAgICAgICAgY29uc3QgeFNoaWZ0ID0gaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHNvdXJjZURpcikgPyBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1NoaWZ0W3NvdXJjZURpcl0oc3RhcnRYLCBhcnJvd1NpemUpIDogc3RhcnRYIC0gaGFsZkFycm93U2l6ZTtcbiAgICAgICAgICBjb25zdCB5U2hpZnQgPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkoc291cmNlRGlyKSA/IEFyY2hpdGVjdHVyZURpcmVjdGlvbkFycm93U2hpZnRbc291cmNlRGlyXShzdGFydFksIGFycm93U2l6ZSkgOiBzdGFydFkgLSBoYWxmQXJyb3dTaXplO1xuICAgICAgICAgIGcuaW5zZXJ0KFwicG9seWdvblwiKS5hdHRyKFwicG9pbnRzXCIsIEFyY2hpdGVjdHVyZURpcmVjdGlvbkFycm93W3NvdXJjZURpcl0oYXJyb3dTaXplKSkuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7eFNoaWZ0fSwke3lTaGlmdH0pYCkuYXR0cihcImNsYXNzXCIsIFwiYXJyb3dcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldEFycm93KSB7XG4gICAgICAgICAgY29uc3QgeFNoaWZ0ID0gaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YKHRhcmdldERpcikgPyBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1NoaWZ0W3RhcmdldERpcl0oZW5kWCwgYXJyb3dTaXplKSA6IGVuZFggLSBoYWxmQXJyb3dTaXplO1xuICAgICAgICAgIGNvbnN0IHlTaGlmdCA9IGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWSh0YXJnZXREaXIpID8gQXJjaGl0ZWN0dXJlRGlyZWN0aW9uQXJyb3dTaGlmdFt0YXJnZXREaXJdKGVuZFksIGFycm93U2l6ZSkgOiBlbmRZIC0gaGFsZkFycm93U2l6ZTtcbiAgICAgICAgICBnLmluc2VydChcInBvbHlnb25cIikuYXR0cihcInBvaW50c1wiLCBBcmNoaXRlY3R1cmVEaXJlY3Rpb25BcnJvd1t0YXJnZXREaXJdKGFycm93U2l6ZSkpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3hTaGlmdH0sJHt5U2hpZnR9KWApLmF0dHIoXCJjbGFzc1wiLCBcImFycm93XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPSAhaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YWShzb3VyY2VEaXIsIHRhcmdldERpcikgPyBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgoc291cmNlRGlyKSA/IFwiWFwiIDogXCJZXCIgOiBcIlhZXCI7XG4gICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICBpZiAoYXhpcyA9PT0gXCJYXCIpIHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5hYnMoc3RhcnRYIC0gZW5kWCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSBcIllcIikge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyhzdGFydFkgLSBlbmRZKSAvIDEuNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyhzdGFydFggLSBlbmRYKSAvIDI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZy5hcHBlbmQoXCJnXCIpO1xuICAgICAgICAgIGF3YWl0IGNyZWF0ZVRleHQoXG4gICAgICAgICAgICB0ZXh0RWxlbSxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1c2VIdG1sTGFiZWxzOiBmYWxzZSxcbiAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgIGNsYXNzZXM6IFwiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWxcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldENvbmZpZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0ZXh0RWxlbS5hdHRyKFwiZHlcIiwgXCIxZW1cIikuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKS5hdHRyKFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpO1xuICAgICAgICAgIGlmIChheGlzID09PSBcIlhcIikge1xuICAgICAgICAgICAgdGV4dEVsZW0uYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIG1pZFggKyBcIiwgXCIgKyBtaWRZICsgXCIpXCIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gXCJZXCIpIHtcbiAgICAgICAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBtaWRYICsgXCIsIFwiICsgbWlkWSArIFwiKSByb3RhdGUoLTkwKVwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGF4aXMgPT09IFwiWFlcIikge1xuICAgICAgICAgICAgY29uc3QgcGFpciA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIoc291cmNlRGlyLCB0YXJnZXREaXIpO1xuICAgICAgICAgICAgaWYgKHBhaXIgJiYgaXNBcmNoaXRlY3R1cmVQYWlyWFkocGFpcikpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmJveE9yaWcgPSB0ZXh0RWxlbS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGdldEFyY2hpdGVjdHVyZURpcmVjdGlvblhZRmFjdG9ycyhwYWlyKTtcbiAgICAgICAgICAgICAgdGV4dEVsZW0uYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiYXV0b1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGByb3RhdGUoJHstMSAqIHggKiB5ICogNDV9KWApO1xuICAgICAgICAgICAgICBjb25zdCBiYm94TmV3ID0gdGV4dEVsZW0ubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICB0ZXh0RWxlbS5hdHRyKFxuICAgICAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke21pZFh9LCAke21pZFkgLSBiYm94T3JpZy5oZWlnaHQgLyAyfSkgXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlKCR7eCAqIGJib3hOZXcud2lkdGggLyAyfSwgJHt5ICogYmJveE5ldy5oZWlnaHQgLyAyfSkgXG4gICAgICAgICAgICAgICAgcm90YXRlKCR7LTEgKiB4ICogeSAqIDQ1fSwgMCwgJHtiYm94T3JpZy5oZWlnaHQgLyAyfSlcbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG59LCBcImRyYXdFZGdlc1wiKTtcbnZhciBkcmF3R3JvdXBzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihncm91cHNFbCwgY3kpIHtcbiAgY29uc3QgcGFkZGluZyA9IGdldENvbmZpZ0ZpZWxkKFwicGFkZGluZ1wiKTtcbiAgY29uc3QgZ3JvdXBJY29uU2l6ZSA9IHBhZGRpbmcgKiAwLjc1O1xuICBjb25zdCBmb250U2l6ZSA9IGdldENvbmZpZ0ZpZWxkKFwiZm9udFNpemVcIik7XG4gIGNvbnN0IGljb25TaXplID0gZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKTtcbiAgY29uc3QgaGFsZkljb25TaXplID0gaWNvblNpemUgLyAyO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBjeS5ub2RlcygpLm1hcChhc3luYyAobm9kZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IG5vZGVEYXRhKG5vZGUpO1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gXCJncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IHsgaCwgdywgeDEsIHkxIH0gPSBub2RlLmJvdW5kaW5nQm94KCk7XG4gICAgICAgIGdyb3Vwc0VsLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgeDEgKyBoYWxmSWNvblNpemUpLmF0dHIoXCJ5XCIsIHkxICsgaGFsZkljb25TaXplKS5hdHRyKFwid2lkdGhcIiwgdykuYXR0cihcImhlaWdodFwiLCBoKS5hdHRyKFwiY2xhc3NcIiwgXCJub2RlLWJrZ1wiKTtcbiAgICAgICAgY29uc3QgZ3JvdXBMYWJlbENvbnRhaW5lciA9IGdyb3Vwc0VsLmFwcGVuZChcImdcIik7XG4gICAgICAgIGxldCBzaGlmdGVkWDEgPSB4MTtcbiAgICAgICAgbGV0IHNoaWZ0ZWRZMSA9IHkxO1xuICAgICAgICBpZiAoZGF0YS5pY29uKSB7XG4gICAgICAgICAgY29uc3QgYmtnRWxlbSA9IGdyb3VwTGFiZWxDb250YWluZXIuYXBwZW5kKFwiZ1wiKTtcbiAgICAgICAgICBia2dFbGVtLmh0bWwoXG4gICAgICAgICAgICBgPGc+JHthd2FpdCBnZXRJY29uU1ZHKGRhdGEuaWNvbiwgeyBoZWlnaHQ6IGdyb3VwSWNvblNpemUsIHdpZHRoOiBncm91cEljb25TaXplLCBmYWxsYmFja1ByZWZpeDogYXJjaGl0ZWN0dXJlSWNvbnMucHJlZml4IH0pfTwvZz5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBia2dFbGVtLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyAoc2hpZnRlZFgxICsgaGFsZkljb25TaXplICsgMSkgKyBcIiwgXCIgKyAoc2hpZnRlZFkxICsgaGFsZkljb25TaXplICsgMSkgKyBcIilcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgc2hpZnRlZFgxICs9IGdyb3VwSWNvblNpemU7XG4gICAgICAgICAgc2hpZnRlZFkxICs9IGZvbnRTaXplIC8gMiAtIDEgLSAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmxhYmVsKSB7XG4gICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBncm91cExhYmVsQ29udGFpbmVyLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgYXdhaXQgY3JlYXRlVGV4dChcbiAgICAgICAgICAgIHRleHRFbGVtLFxuICAgICAgICAgICAgZGF0YS5sYWJlbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdXNlSHRtbExhYmVsczogZmFsc2UsXG4gICAgICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgICAgICBjbGFzc2VzOiBcImFyY2hpdGVjdHVyZS1zZXJ2aWNlLWxhYmVsXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRDb25maWcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGV4dEVsZW0uYXR0cihcImR5XCIsIFwiMWVtXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwic3RhcnRcIikuYXR0cihcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIik7XG4gICAgICAgICAgdGV4dEVsZW0uYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArIChzaGlmdGVkWDEgKyBoYWxmSWNvblNpemUgKyA0KSArIFwiLCBcIiArIChzaGlmdGVkWTEgKyBoYWxmSWNvblNpemUgKyAyKSArIFwiKVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG59LCBcImRyYXdHcm91cHNcIik7XG52YXIgZHJhd1NlcnZpY2VzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihkYjIsIGVsZW0sIHNlcnZpY2VzKSB7XG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBzZXJ2aWNlcykge1xuICAgIGNvbnN0IHNlcnZpY2VFbGVtID0gZWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgIGNvbnN0IGljb25TaXplID0gZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKTtcbiAgICBpZiAoc2VydmljZS50aXRsZSkge1xuICAgICAgY29uc3QgdGV4dEVsZW0gPSBzZXJ2aWNlRWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgICAgYXdhaXQgY3JlYXRlVGV4dChcbiAgICAgICAgdGV4dEVsZW0sXG4gICAgICAgIHNlcnZpY2UudGl0bGUsXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VIdG1sTGFiZWxzOiBmYWxzZSxcbiAgICAgICAgICB3aWR0aDogaWNvblNpemUgKiAxLjUsXG4gICAgICAgICAgY2xhc3NlczogXCJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbFwiXG4gICAgICAgIH0sXG4gICAgICAgIGdldENvbmZpZygpXG4gICAgICApO1xuICAgICAgdGV4dEVsZW0uYXR0cihcImR5XCIsIFwiMWVtXCIpLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIikuYXR0cihcImRvbWluYW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKTtcbiAgICAgIHRleHRFbGVtLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBpY29uU2l6ZSAvIDIgKyBcIiwgXCIgKyBpY29uU2l6ZSArIFwiKVwiKTtcbiAgICB9XG4gICAgY29uc3QgYmtnRWxlbSA9IHNlcnZpY2VFbGVtLmFwcGVuZChcImdcIik7XG4gICAgaWYgKHNlcnZpY2UuaWNvbikge1xuICAgICAgYmtnRWxlbS5odG1sKFxuICAgICAgICBgPGc+JHthd2FpdCBnZXRJY29uU1ZHKHNlcnZpY2UuaWNvbiwgeyBoZWlnaHQ6IGljb25TaXplLCB3aWR0aDogaWNvblNpemUsIGZhbGxiYWNrUHJlZml4OiBhcmNoaXRlY3R1cmVJY29ucy5wcmVmaXggfSl9PC9nPmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzZXJ2aWNlLmljb25UZXh0KSB7XG4gICAgICBia2dFbGVtLmh0bWwoXG4gICAgICAgIGA8Zz4ke2F3YWl0IGdldEljb25TVkcoXCJibGFua1wiLCB7IGhlaWdodDogaWNvblNpemUsIHdpZHRoOiBpY29uU2l6ZSwgZmFsbGJhY2tQcmVmaXg6IGFyY2hpdGVjdHVyZUljb25zLnByZWZpeCB9KX08L2c+YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRleHRFbGVtQ29udGFpbmVyID0gYmtnRWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgICAgY29uc3QgZm8gPSB0ZXh0RWxlbUNvbnRhaW5lci5hcHBlbmQoXCJmb3JlaWduT2JqZWN0XCIpLmF0dHIoXCJ3aWR0aFwiLCBpY29uU2l6ZSkuYXR0cihcImhlaWdodFwiLCBpY29uU2l6ZSk7XG4gICAgICBjb25zdCBkaXZFbGVtID0gZm8uYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtaWNvbi10ZXh0XCIpLmF0dHIoXCJzdHlsZVwiLCBgaGVpZ2h0OiAke2ljb25TaXplfXB4O2ApLmFwcGVuZChcImRpdlwiKS5odG1sKHNlcnZpY2UuaWNvblRleHQpO1xuICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUludChcbiAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZGl2RWxlbS5ub2RlKCksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJmb250LXNpemVcIikucmVwbGFjZSgvXFxEL2csIFwiXCIpXG4gICAgICApID8/IDE2O1xuICAgICAgZGl2RWxlbS5hdHRyKFwic3R5bGVcIiwgYC13ZWJraXQtbGluZS1jbGFtcDogJHtNYXRoLmZsb29yKChpY29uU2l6ZSAtIDIpIC8gZm9udFNpemUpfTtgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmtnRWxlbS5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcIm5vZGUtYmtnXCIpLmF0dHIoXCJpZFwiLCBcIm5vZGUtXCIgKyBzZXJ2aWNlLmlkKS5hdHRyKFxuICAgICAgICBcImRcIixcbiAgICAgICAgYE0wICR7aWNvblNpemV9IHYkey1pY29uU2l6ZX0gcTAsLTUgNSwtNSBoJHtpY29uU2l6ZX0gcTUsMCA1LDUgdiR7aWNvblNpemV9IEgwIFpgXG4gICAgICApO1xuICAgIH1cbiAgICBzZXJ2aWNlRWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhcmNoaXRlY3R1cmUtc2VydmljZVwiKTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNlcnZpY2VFbGVtLl9ncm91cHNbMF1bMF0uZ2V0QkJveCgpO1xuICAgIHNlcnZpY2Uud2lkdGggPSB3aWR0aDtcbiAgICBzZXJ2aWNlLmhlaWdodCA9IGhlaWdodDtcbiAgICBkYjIuc2V0RWxlbWVudEZvcklkKHNlcnZpY2UuaWQsIHNlcnZpY2VFbGVtKTtcbiAgfVxuICByZXR1cm4gMDtcbn0sIFwiZHJhd1NlcnZpY2VzXCIpO1xudmFyIGRyYXdKdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRiMiwgZWxlbSwganVuY3Rpb25zKSB7XG4gIGp1bmN0aW9ucy5mb3JFYWNoKChqdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IGp1bmN0aW9uRWxlbSA9IGVsZW0uYXBwZW5kKFwiZ1wiKTtcbiAgICBjb25zdCBpY29uU2l6ZSA9IGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIik7XG4gICAgY29uc3QgYmtnRWxlbSA9IGp1bmN0aW9uRWxlbS5hcHBlbmQoXCJnXCIpO1xuICAgIGJrZ0VsZW0uYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwiaWRcIiwgXCJub2RlLVwiICsganVuY3Rpb24uaWQpLmF0dHIoXCJmaWxsLW9wYWNpdHlcIiwgXCIwXCIpLmF0dHIoXCJ3aWR0aFwiLCBpY29uU2l6ZSkuYXR0cihcImhlaWdodFwiLCBpY29uU2l6ZSk7XG4gICAganVuY3Rpb25FbGVtLmF0dHIoXCJjbGFzc1wiLCBcImFyY2hpdGVjdHVyZS1qdW5jdGlvblwiKTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGp1bmN0aW9uRWxlbS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtcbiAgICBqdW5jdGlvbkVsZW0ud2lkdGggPSB3aWR0aDtcbiAgICBqdW5jdGlvbkVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGRiMi5zZXRFbGVtZW50Rm9ySWQoanVuY3Rpb24uaWQsIGp1bmN0aW9uRWxlbSk7XG4gIH0pO1xufSwgXCJkcmF3SnVuY3Rpb25zXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZVJlbmRlcmVyLnRzXG5yZWdpc3Rlckljb25QYWNrcyhbXG4gIHtcbiAgICBuYW1lOiBhcmNoaXRlY3R1cmVJY29ucy5wcmVmaXgsXG4gICAgaWNvbnM6IGFyY2hpdGVjdHVyZUljb25zXG4gIH1cbl0pO1xuY3l0b3NjYXBlLnVzZShmY29zZSk7XG5mdW5jdGlvbiBhZGRTZXJ2aWNlcyhzZXJ2aWNlcywgY3kpIHtcbiAgc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgIGN5LmFkZCh7XG4gICAgICBncm91cDogXCJub2Rlc1wiLFxuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiBcInNlcnZpY2VcIixcbiAgICAgICAgaWQ6IHNlcnZpY2UuaWQsXG4gICAgICAgIGljb246IHNlcnZpY2UuaWNvbixcbiAgICAgICAgbGFiZWw6IHNlcnZpY2UudGl0bGUsXG4gICAgICAgIHBhcmVudDogc2VydmljZS5pbixcbiAgICAgICAgd2lkdGg6IGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIiksXG4gICAgICAgIGhlaWdodDogZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKVxuICAgICAgfSxcbiAgICAgIGNsYXNzZXM6IFwibm9kZS1zZXJ2aWNlXCJcbiAgICB9KTtcbiAgfSk7XG59XG5fX25hbWUoYWRkU2VydmljZXMsIFwiYWRkU2VydmljZXNcIik7XG5mdW5jdGlvbiBhZGRKdW5jdGlvbnMoanVuY3Rpb25zLCBjeSkge1xuICBqdW5jdGlvbnMuZm9yRWFjaCgoanVuY3Rpb24pID0+IHtcbiAgICBjeS5hZGQoe1xuICAgICAgZ3JvdXA6IFwibm9kZXNcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdHlwZTogXCJqdW5jdGlvblwiLFxuICAgICAgICBpZDoganVuY3Rpb24uaWQsXG4gICAgICAgIHBhcmVudDoganVuY3Rpb24uaW4sXG4gICAgICAgIHdpZHRoOiBnZXRDb25maWdGaWVsZChcImljb25TaXplXCIpLFxuICAgICAgICBoZWlnaHQ6IGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIilcbiAgICAgIH0sXG4gICAgICBjbGFzc2VzOiBcIm5vZGUtanVuY3Rpb25cIlxuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShhZGRKdW5jdGlvbnMsIFwiYWRkSnVuY3Rpb25zXCIpO1xuZnVuY3Rpb24gcG9zaXRpb25Ob2RlcyhkYjIsIGN5KSB7XG4gIGN5Lm5vZGVzKCkubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IG5vZGVEYXRhKG5vZGUpO1xuICAgIGlmIChkYXRhLnR5cGUgPT09IFwiZ3JvdXBcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhLnggPSBub2RlLnBvc2l0aW9uKCkueDtcbiAgICBkYXRhLnkgPSBub2RlLnBvc2l0aW9uKCkueTtcbiAgICBjb25zdCBub2RlRWxlbSA9IGRiMi5nZXRFbGVtZW50QnlJZChkYXRhLmlkKTtcbiAgICBub2RlRWxlbS5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgKGRhdGEueCB8fCAwKSArIFwiLFwiICsgKGRhdGEueSB8fCAwKSArIFwiKVwiKTtcbiAgfSk7XG59XG5fX25hbWUocG9zaXRpb25Ob2RlcywgXCJwb3NpdGlvbk5vZGVzXCIpO1xuZnVuY3Rpb24gYWRkR3JvdXBzKGdyb3VwcywgY3kpIHtcbiAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgY3kuYWRkKHtcbiAgICAgIGdyb3VwOiBcIm5vZGVzXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHR5cGU6IFwiZ3JvdXBcIixcbiAgICAgICAgaWQ6IGdyb3VwLmlkLFxuICAgICAgICBpY29uOiBncm91cC5pY29uLFxuICAgICAgICBsYWJlbDogZ3JvdXAudGl0bGUsXG4gICAgICAgIHBhcmVudDogZ3JvdXAuaW5cbiAgICAgIH0sXG4gICAgICBjbGFzc2VzOiBcIm5vZGUtZ3JvdXBcIlxuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShhZGRHcm91cHMsIFwiYWRkR3JvdXBzXCIpO1xuZnVuY3Rpb24gYWRkRWRnZXMoZWRnZXMsIGN5KSB7XG4gIGVkZ2VzLmZvckVhY2goKHBhcnNlZEVkZ2UpID0+IHtcbiAgICBjb25zdCB7IGxoc0lkLCByaHNJZCwgbGhzSW50bywgbGhzR3JvdXAsIHJoc0ludG8sIGxoc0RpciwgcmhzRGlyLCByaHNHcm91cCwgdGl0bGUgfSA9IHBhcnNlZEVkZ2U7XG4gICAgY29uc3QgZWRnZVR5cGUgPSBpc0FyY2hpdGVjdHVyZURpcmVjdGlvblhZKHBhcnNlZEVkZ2UubGhzRGlyLCBwYXJzZWRFZGdlLnJoc0RpcikgPyBcInNlZ21lbnRzXCIgOiBcInN0cmFpZ2h0XCI7XG4gICAgY29uc3QgZWRnZSA9IHtcbiAgICAgIGlkOiBgJHtsaHNJZH0tJHtyaHNJZH1gLFxuICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgc291cmNlOiBsaHNJZCxcbiAgICAgIHNvdXJjZURpcjogbGhzRGlyLFxuICAgICAgc291cmNlQXJyb3c6IGxoc0ludG8sXG4gICAgICBzb3VyY2VHcm91cDogbGhzR3JvdXAsXG4gICAgICBzb3VyY2VFbmRwb2ludDogbGhzRGlyID09PSBcIkxcIiA/IFwiMCA1MCVcIiA6IGxoc0RpciA9PT0gXCJSXCIgPyBcIjEwMCUgNTAlXCIgOiBsaHNEaXIgPT09IFwiVFwiID8gXCI1MCUgMFwiIDogXCI1MCUgMTAwJVwiLFxuICAgICAgdGFyZ2V0OiByaHNJZCxcbiAgICAgIHRhcmdldERpcjogcmhzRGlyLFxuICAgICAgdGFyZ2V0QXJyb3c6IHJoc0ludG8sXG4gICAgICB0YXJnZXRHcm91cDogcmhzR3JvdXAsXG4gICAgICB0YXJnZXRFbmRwb2ludDogcmhzRGlyID09PSBcIkxcIiA/IFwiMCA1MCVcIiA6IHJoc0RpciA9PT0gXCJSXCIgPyBcIjEwMCUgNTAlXCIgOiByaHNEaXIgPT09IFwiVFwiID8gXCI1MCUgMFwiIDogXCI1MCUgMTAwJVwiXG4gICAgfTtcbiAgICBjeS5hZGQoe1xuICAgICAgZ3JvdXA6IFwiZWRnZXNcIixcbiAgICAgIGRhdGE6IGVkZ2UsXG4gICAgICBjbGFzc2VzOiBlZGdlVHlwZVxuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShhZGRFZGdlcywgXCJhZGRFZGdlc1wiKTtcbmZ1bmN0aW9uIGdldEFsaWdubWVudHMoc3BhdGlhbE1hcHMpIHtcbiAgY29uc3QgYWxpZ25tZW50cyA9IHNwYXRpYWxNYXBzLm1hcCgoc3BhdGlhbE1hcCkgPT4ge1xuICAgIGNvbnN0IGhvcml6b250YWxBbGlnbm1lbnRzID0ge307XG4gICAgY29uc3QgdmVydGljYWxBbGlnbm1lbnRzID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMoc3BhdGlhbE1hcCkuZm9yRWFjaCgoW2lkLCBbeCwgeV1dKSA9PiB7XG4gICAgICBpZiAoIWhvcml6b250YWxBbGlnbm1lbnRzW3ldKSB7XG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnRzW3ldID0gW107XG4gICAgICB9XG4gICAgICBpZiAoIXZlcnRpY2FsQWxpZ25tZW50c1t4XSkge1xuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudHNbeF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGhvcml6b250YWxBbGlnbm1lbnRzW3ldLnB1c2goaWQpO1xuICAgICAgdmVydGljYWxBbGlnbm1lbnRzW3hdLnB1c2goaWQpO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBob3JpejogT2JqZWN0LnZhbHVlcyhob3Jpem9udGFsQWxpZ25tZW50cykuZmlsdGVyKChhcnIpID0+IGFyci5sZW5ndGggPiAxKSxcbiAgICAgIHZlcnQ6IE9iamVjdC52YWx1ZXModmVydGljYWxBbGlnbm1lbnRzKS5maWx0ZXIoKGFycikgPT4gYXJyLmxlbmd0aCA+IDEpXG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IFtob3Jpem9udGFsLCB2ZXJ0aWNhbF0gPSBhbGlnbm1lbnRzLnJlZHVjZShcbiAgICAoW3ByZXZIb3JpeiwgcHJldlZlcnRdLCB7IGhvcml6LCB2ZXJ0IH0pID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFsuLi5wcmV2SG9yaXosIC4uLmhvcml6XSxcbiAgICAgICAgWy4uLnByZXZWZXJ0LCAuLi52ZXJ0XVxuICAgICAgXTtcbiAgICB9LFxuICAgIFtbXSwgW11dXG4gICk7XG4gIHJldHVybiB7XG4gICAgaG9yaXpvbnRhbCxcbiAgICB2ZXJ0aWNhbFxuICB9O1xufVxuX19uYW1lKGdldEFsaWdubWVudHMsIFwiZ2V0QWxpZ25tZW50c1wiKTtcbmZ1bmN0aW9uIGdldFJlbGF0aXZlQ29uc3RyYWludHMoc3BhdGlhbE1hcHMpIHtcbiAgY29uc3QgcmVsYXRpdmVDb25zdHJhaW50cyA9IFtdO1xuICBjb25zdCBwb3NUb1N0ciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBvcykgPT4gYCR7cG9zWzBdfSwke3Bvc1sxXX1gLCBcInBvc1RvU3RyXCIpO1xuICBjb25zdCBzdHJUb1BvcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHBvcykgPT4gcG9zLnNwbGl0KFwiLFwiKS5tYXAoKHApID0+IHBhcnNlSW50KHApKSwgXCJzdHJUb1Bvc1wiKTtcbiAgc3BhdGlhbE1hcHMuZm9yRWFjaCgoc3BhdGlhbE1hcCkgPT4ge1xuICAgIGNvbnN0IGludlNwYXRpYWxNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhzcGF0aWFsTWFwKS5tYXAoKFtpZCwgcG9zXSkgPT4gW3Bvc1RvU3RyKHBvcyksIGlkXSlcbiAgICApO1xuICAgIGNvbnN0IHF1ZXVlID0gW3Bvc1RvU3RyKFswLCAwXSldO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSB7fTtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0ge1xuICAgICAgTDogWy0xLCAwXSxcbiAgICAgIFI6IFsxLCAwXSxcbiAgICAgIFQ6IFswLCAxXSxcbiAgICAgIEI6IFswLCAtMV1cbiAgICB9O1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIGlmIChjdXJyKSB7XG4gICAgICAgIHZpc2l0ZWRbY3Vycl0gPSAxO1xuICAgICAgICBjb25zdCBjdXJySWQgPSBpbnZTcGF0aWFsTWFwW2N1cnJdO1xuICAgICAgICBpZiAoY3VycklkKSB7XG4gICAgICAgICAgY29uc3QgY3VyclBvcyA9IHN0clRvUG9zKGN1cnIpO1xuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRpcmVjdGlvbnMpLmZvckVhY2goKFtkaXIsIHNoaWZ0XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UG9zID0gcG9zVG9TdHIoW2N1cnJQb3NbMF0gKyBzaGlmdFswXSwgY3VyclBvc1sxXSArIHNoaWZ0WzFdXSk7XG4gICAgICAgICAgICBjb25zdCBuZXdJZCA9IGludlNwYXRpYWxNYXBbbmV3UG9zXTtcbiAgICAgICAgICAgIGlmIChuZXdJZCAmJiAhdmlzaXRlZFtuZXdQb3NdKSB7XG4gICAgICAgICAgICAgIHF1ZXVlLnB1c2gobmV3UG9zKTtcbiAgICAgICAgICAgICAgcmVsYXRpdmVDb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBbQXJjaGl0ZWN0dXJlRGlyZWN0aW9uTmFtZVtkaXJdXTogbmV3SWQsXG4gICAgICAgICAgICAgICAgW0FyY2hpdGVjdHVyZURpcmVjdGlvbk5hbWVbZ2V0T3Bwb3NpdGVBcmNoaXRlY3R1cmVEaXJlY3Rpb24oZGlyKV1dOiBjdXJySWQsXG4gICAgICAgICAgICAgICAgZ2FwOiAxLjUgKiBnZXRDb25maWdGaWVsZChcImljb25TaXplXCIpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlbGF0aXZlQ29uc3RyYWludHM7XG59XG5fX25hbWUoZ2V0UmVsYXRpdmVDb25zdHJhaW50cywgXCJnZXRSZWxhdGl2ZUNvbnN0cmFpbnRzXCIpO1xuZnVuY3Rpb24gbGF5b3V0QXJjaGl0ZWN0dXJlKHNlcnZpY2VzLCBqdW5jdGlvbnMsIGdyb3VwcywgZWRnZXMsIHsgc3BhdGlhbE1hcHMgfSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZW5kZXJFbCA9IHNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwiZGl2XCIpLmF0dHIoXCJpZFwiLCBcImN5XCIpLmF0dHIoXCJzdHlsZVwiLCBcImRpc3BsYXk6bm9uZVwiKTtcbiAgICBjb25zdCBjeSA9IGN5dG9zY2FwZSh7XG4gICAgICBjb250YWluZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3lcIiksXG4gICAgICBzdHlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwiZWRnZVwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBcImN1cnZlLXN0eWxlXCI6IFwic3RyYWlnaHRcIixcbiAgICAgICAgICAgIGxhYmVsOiBcImRhdGEobGFiZWwpXCIsXG4gICAgICAgICAgICBcInNvdXJjZS1lbmRwb2ludFwiOiBcImRhdGEoc291cmNlRW5kcG9pbnQpXCIsXG4gICAgICAgICAgICBcInRhcmdldC1lbmRwb2ludFwiOiBcImRhdGEodGFyZ2V0RW5kcG9pbnQpXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RvcjogXCJlZGdlLnNlZ21lbnRzXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwiY3VydmUtc3R5bGVcIjogXCJzZWdtZW50c1wiLFxuICAgICAgICAgICAgXCJzZWdtZW50LXdlaWdodHNcIjogXCIwXCIsXG4gICAgICAgICAgICBcInNlZ21lbnQtZGlzdGFuY2VzXCI6IFswLjVdLFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBJbmNvcnJlY3QgbGlicmFyeSB0eXBlc1xuICAgICAgICAgICAgXCJlZGdlLWRpc3RhbmNlc1wiOiBcImVuZHBvaW50c1wiLFxuICAgICAgICAgICAgXCJzb3VyY2UtZW5kcG9pbnRcIjogXCJkYXRhKHNvdXJjZUVuZHBvaW50KVwiLFxuICAgICAgICAgICAgXCJ0YXJnZXQtZW5kcG9pbnRcIjogXCJkYXRhKHRhcmdldEVuZHBvaW50KVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwibm9kZVwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIEluY29ycmVjdCBsaWJyYXJ5IHR5cGVzXG4gICAgICAgICAgICBcImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzXCI6IFwiaW5jbHVkZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwibm9kZVtsYWJlbF1cIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJ0ZXh0LXZhbGlnblwiOiBcImJvdHRvbVwiLFxuICAgICAgICAgICAgXCJ0ZXh0LWhhbGlnblwiOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgXCJmb250LXNpemVcIjogYCR7Z2V0Q29uZmlnRmllbGQoXCJmb250U2l6ZVwiKX1weGBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzZWxlY3RvcjogXCIubm9kZS1zZXJ2aWNlXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcImRhdGEobGFiZWwpXCIsXG4gICAgICAgICAgICB3aWR0aDogXCJkYXRhKHdpZHRoKVwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcImRhdGEoaGVpZ2h0KVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VsZWN0b3I6IFwiLm5vZGUtanVuY3Rpb25cIixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgd2lkdGg6IFwiZGF0YSh3aWR0aClcIixcbiAgICAgICAgICAgIGhlaWdodDogXCJkYXRhKGhlaWdodClcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNlbGVjdG9yOiBcIi5ub2RlLWdyb3VwXCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgSW5jb3JyZWN0IGxpYnJhcnkgdHlwZXNcbiAgICAgICAgICAgIHBhZGRpbmc6IGAke2dldENvbmZpZ0ZpZWxkKFwicGFkZGluZ1wiKX1weGBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICByZW5kZXJFbC5yZW1vdmUoKTtcbiAgICBhZGRHcm91cHMoZ3JvdXBzLCBjeSk7XG4gICAgYWRkU2VydmljZXMoc2VydmljZXMsIGN5KTtcbiAgICBhZGRKdW5jdGlvbnMoanVuY3Rpb25zLCBjeSk7XG4gICAgYWRkRWRnZXMoZWRnZXMsIGN5KTtcbiAgICBjb25zdCBhbGlnbm1lbnRDb25zdHJhaW50ID0gZ2V0QWxpZ25tZW50cyhzcGF0aWFsTWFwcyk7XG4gICAgY29uc3QgcmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50ID0gZ2V0UmVsYXRpdmVDb25zdHJhaW50cyhzcGF0aWFsTWFwcyk7XG4gICAgY29uc3QgbGF5b3V0ID0gY3kubGF5b3V0KHtcbiAgICAgIG5hbWU6IFwiZmNvc2VcIixcbiAgICAgIHF1YWxpdHk6IFwicHJvb2ZcIixcbiAgICAgIHN0eWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICBhbmltYXRlOiBmYWxzZSxcbiAgICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2UsXG4gICAgICAvLyBBZGp1c3QgdGhlIGVkZ2UgcGFyYW1ldGVycyBpZiBpdCBwYXNzZXMgdGhyb3VnaCB0aGUgYm9yZGVyIG9mIGEgZ3JvdXBcbiAgICAgIC8vIEhhY2t5IGZpeCBmb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9pVmlzLWF0LUJpbGtlbnQvY3l0b3NjYXBlLmpzLWZjb3NlL2lzc3Vlcy82N1xuICAgICAgaWRlYWxFZGdlTGVuZ3RoKGVkZ2UpIHtcbiAgICAgICAgY29uc3QgW25vZGVBLCBub2RlQl0gPSBlZGdlLmNvbm5lY3RlZE5vZGVzKCk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRBIH0gPSBub2RlRGF0YShub2RlQSk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRCIH0gPSBub2RlRGF0YShub2RlQik7XG4gICAgICAgIGNvbnN0IGVsYXN0aWNpdHkgPSBwYXJlbnRBID09PSBwYXJlbnRCID8gMS41ICogZ2V0Q29uZmlnRmllbGQoXCJpY29uU2l6ZVwiKSA6IDAuNSAqIGdldENvbmZpZ0ZpZWxkKFwiaWNvblNpemVcIik7XG4gICAgICAgIHJldHVybiBlbGFzdGljaXR5O1xuICAgICAgfSxcbiAgICAgIGVkZ2VFbGFzdGljaXR5KGVkZ2UpIHtcbiAgICAgICAgY29uc3QgW25vZGVBLCBub2RlQl0gPSBlZGdlLmNvbm5lY3RlZE5vZGVzKCk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRBIH0gPSBub2RlRGF0YShub2RlQSk7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50OiBwYXJlbnRCIH0gPSBub2RlRGF0YShub2RlQik7XG4gICAgICAgIGNvbnN0IGVsYXN0aWNpdHkgPSBwYXJlbnRBID09PSBwYXJlbnRCID8gMC40NSA6IDFlLTM7XG4gICAgICAgIHJldHVybiBlbGFzdGljaXR5O1xuICAgICAgfSxcbiAgICAgIGFsaWdubWVudENvbnN0cmFpbnQsXG4gICAgICByZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnRcbiAgICB9KTtcbiAgICBsYXlvdXQub25lKFwibGF5b3V0c3RvcFwiLCAoKSA9PiB7XG4gICAgICBmdW5jdGlvbiBnZXRTZWdtZW50V2VpZ2h0cyhzb3VyY2UsIHRhcmdldCwgcG9pbnRYLCBwb2ludFkpIHtcbiAgICAgICAgbGV0IFcsIEQ7XG4gICAgICAgIGNvbnN0IHsgeDogc1gsIHk6IHNZIH0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHsgeDogdFgsIHk6IHRZIH0gPSB0YXJnZXQ7XG4gICAgICAgIEQgPSAocG9pbnRZIC0gc1kgKyAoc1ggLSBwb2ludFgpICogKHNZIC0gdFkpIC8gKHNYIC0gdFgpKSAvIE1hdGguc3FydCgxICsgTWF0aC5wb3coKHNZIC0gdFkpIC8gKHNYIC0gdFgpLCAyKSk7XG4gICAgICAgIFcgPSBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnRZIC0gc1ksIDIpICsgTWF0aC5wb3cocG9pbnRYIC0gc1gsIDIpIC0gTWF0aC5wb3coRCwgMikpO1xuICAgICAgICBjb25zdCBkaXN0QUIgPSBNYXRoLnNxcnQoTWF0aC5wb3codFggLSBzWCwgMikgKyBNYXRoLnBvdyh0WSAtIHNZLCAyKSk7XG4gICAgICAgIFcgPSBXIC8gZGlzdEFCO1xuICAgICAgICBsZXQgZGVsdGExID0gKHRYIC0gc1gpICogKHBvaW50WSAtIHNZKSAtICh0WSAtIHNZKSAqIChwb2ludFggLSBzWCk7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgIGNhc2UgZGVsdGExID49IDA6XG4gICAgICAgICAgICBkZWx0YTEgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBkZWx0YTEgPCAwOlxuICAgICAgICAgICAgZGVsdGExID0gLTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGVsdGEyID0gKHRYIC0gc1gpICogKHBvaW50WCAtIHNYKSArICh0WSAtIHNZKSAqIChwb2ludFkgLSBzWSk7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgIGNhc2UgZGVsdGEyID49IDA6XG4gICAgICAgICAgICBkZWx0YTIgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBkZWx0YTIgPCAwOlxuICAgICAgICAgICAgZGVsdGEyID0gLTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBEID0gTWF0aC5hYnMoRCkgKiBkZWx0YTE7XG4gICAgICAgIFcgPSBXICogZGVsdGEyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3RhbmNlczogRCxcbiAgICAgICAgICB3ZWlnaHRzOiBXXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBfX25hbWUoZ2V0U2VnbWVudFdlaWdodHMsIFwiZ2V0U2VnbWVudFdlaWdodHNcIik7XG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2YgT2JqZWN0LnZhbHVlcyhjeS5lZGdlcygpKSkge1xuICAgICAgICBpZiAoZWRnZS5kYXRhPy4oKSkge1xuICAgICAgICAgIGNvbnN0IHsgeDogc1gsIHk6IHNZIH0gPSBlZGdlLnNvdXJjZSgpLnBvc2l0aW9uKCk7XG4gICAgICAgICAgY29uc3QgeyB4OiB0WCwgeTogdFkgfSA9IGVkZ2UudGFyZ2V0KCkucG9zaXRpb24oKTtcbiAgICAgICAgICBpZiAoc1ggIT09IHRYICYmIHNZICE9PSB0WSkge1xuICAgICAgICAgICAgY29uc3Qgc0VQID0gZWRnZS5zb3VyY2VFbmRwb2ludCgpO1xuICAgICAgICAgICAgY29uc3QgdEVQID0gZWRnZS50YXJnZXRFbmRwb2ludCgpO1xuICAgICAgICAgICAgY29uc3QgeyBzb3VyY2VEaXIgfSA9IGVkZ2VEYXRhKGVkZ2UpO1xuICAgICAgICAgICAgY29uc3QgW3BvaW50WCwgcG9pbnRZXSA9IGlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWShzb3VyY2VEaXIpID8gW3NFUC54LCB0RVAueV0gOiBbdEVQLngsIHNFUC55XTtcbiAgICAgICAgICAgIGNvbnN0IHsgd2VpZ2h0cywgZGlzdGFuY2VzIH0gPSBnZXRTZWdtZW50V2VpZ2h0cyhzRVAsIHRFUCwgcG9pbnRYLCBwb2ludFkpO1xuICAgICAgICAgICAgZWRnZS5zdHlsZShcInNlZ21lbnQtZGlzdGFuY2VzXCIsIGRpc3RhbmNlcyk7XG4gICAgICAgICAgICBlZGdlLnN0eWxlKFwic2VnbWVudC13ZWlnaHRzXCIsIHdlaWdodHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3kuZW5kQmF0Y2goKTtcbiAgICAgIGxheW91dC5ydW4oKTtcbiAgICB9KTtcbiAgICBsYXlvdXQucnVuKCk7XG4gICAgY3kucmVhZHkoKGUpID0+IHtcbiAgICAgIGxvZy5pbmZvKFwiUmVhZHlcIiwgZSk7XG4gICAgICByZXNvbHZlKGN5KTtcbiAgICB9KTtcbiAgfSk7XG59XG5fX25hbWUobGF5b3V0QXJjaGl0ZWN0dXJlLCBcImxheW91dEFyY2hpdGVjdHVyZVwiKTtcbnZhciBkcmF3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAodGV4dCwgaWQsIF92ZXJzaW9uLCBkaWFnT2JqKSA9PiB7XG4gIGNvbnN0IGRiMiA9IGRpYWdPYmouZGI7XG4gIGNvbnN0IHNlcnZpY2VzID0gZGIyLmdldFNlcnZpY2VzKCk7XG4gIGNvbnN0IGp1bmN0aW9ucyA9IGRiMi5nZXRKdW5jdGlvbnMoKTtcbiAgY29uc3QgZ3JvdXBzID0gZGIyLmdldEdyb3VwcygpO1xuICBjb25zdCBlZGdlcyA9IGRiMi5nZXRFZGdlcygpO1xuICBjb25zdCBkcyA9IGRiMi5nZXREYXRhU3RydWN0dXJlcygpO1xuICBjb25zdCBzdmcgPSBzZWxlY3RTdmdFbGVtZW50KGlkKTtcbiAgY29uc3QgZWRnZXNFbGVtID0gc3ZnLmFwcGVuZChcImdcIik7XG4gIGVkZ2VzRWxlbS5hdHRyKFwiY2xhc3NcIiwgXCJhcmNoaXRlY3R1cmUtZWRnZXNcIik7XG4gIGNvbnN0IHNlcnZpY2VzRWxlbSA9IHN2Zy5hcHBlbmQoXCJnXCIpO1xuICBzZXJ2aWNlc0VsZW0uYXR0cihcImNsYXNzXCIsIFwiYXJjaGl0ZWN0dXJlLXNlcnZpY2VzXCIpO1xuICBjb25zdCBncm91cEVsZW0gPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgZ3JvdXBFbGVtLmF0dHIoXCJjbGFzc1wiLCBcImFyY2hpdGVjdHVyZS1ncm91cHNcIik7XG4gIGF3YWl0IGRyYXdTZXJ2aWNlcyhkYjIsIHNlcnZpY2VzRWxlbSwgc2VydmljZXMpO1xuICBkcmF3SnVuY3Rpb25zKGRiMiwgc2VydmljZXNFbGVtLCBqdW5jdGlvbnMpO1xuICBjb25zdCBjeSA9IGF3YWl0IGxheW91dEFyY2hpdGVjdHVyZShzZXJ2aWNlcywganVuY3Rpb25zLCBncm91cHMsIGVkZ2VzLCBkcyk7XG4gIGF3YWl0IGRyYXdFZGdlcyhlZGdlc0VsZW0sIGN5KTtcbiAgYXdhaXQgZHJhd0dyb3Vwcyhncm91cEVsZW0sIGN5KTtcbiAgcG9zaXRpb25Ob2RlcyhkYjIsIGN5KTtcbiAgc2V0dXBHcmFwaFZpZXdib3godm9pZCAwLCBzdmcsIGdldENvbmZpZ0ZpZWxkKFwicGFkZGluZ1wiKSwgZ2V0Q29uZmlnRmllbGQoXCJ1c2VNYXhXaWR0aFwiKSk7XG59LCBcImRyYXdcIik7XG52YXIgcmVuZGVyZXIgPSB7IGRyYXcgfTtcblxuLy8gc3JjL2RpYWdyYW1zL2FyY2hpdGVjdHVyZS9hcmNoaXRlY3R1cmVEaWFncmFtLnRzXG52YXIgZGlhZ3JhbSA9IHtcbiAgcGFyc2VyLFxuICBkYixcbiAgcmVuZGVyZXIsXG4gIHN0eWxlczogYXJjaGl0ZWN0dXJlU3R5bGVzX2RlZmF1bHRcbn07XG5leHBvcnQge1xuICBkaWFncmFtXG59O1xuIiwKICAgICJpbXBvcnQge1xuICByZWdpc3Rlckljb25QYWNrc1xufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUwyQ0pPWVdFLm1qc1wiO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXJMYXlvdXRMb2FkZXJzXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstWkFOUVdORUgubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstUk9LWVVWQ1UubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstMjNBVE1aWFYubWpzXCI7XG5pbXBvcnQgXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstWkk2VjJVRTIubWpzXCI7XG5pbXBvcnQge1xuICBjbGVhbkFuZE1lcmdlLFxuICBkZWNvZGVFbnRpdGllcyxcbiAgZW5jb2RlRW50aXRpZXMsXG4gIGlzRGV0YWlsZWRFcnJvcixcbiAgcmVtb3ZlRGlyZWN0aXZlcyxcbiAgdXRpbHNfZGVmYXVsdFxufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLTJFRFRXRFlJLm1qc1wiO1xuaW1wb3J0IHtcbiAgdmVyc2lvblxufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUJGU0kyUTdSLm1qc1wiO1xuaW1wb3J0IHtcbiAgc2VsZWN0U3ZnRWxlbWVudFxufSBmcm9tIFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2NodW5rLUYyWEZOM0JZLm1qc1wiO1xuaW1wb3J0IHtcbiAgVW5rbm93bkRpYWdyYW1FcnJvcixcbiAgX19uYW1lLFxuICBhZGREaXJlY3RpdmUsXG4gIGFzc2lnbldpdGhEZXB0aF9kZWZhdWx0LFxuICBjb25maWd1cmVTdmdTaXplLFxuICBkZWZhdWx0Q29uZmlnLFxuICBkZXRlY3RUeXBlLFxuICBkZXRlY3RvcnMsXG4gIGV2YWx1YXRlLFxuICBmcm9udE1hdHRlclJlZ2V4LFxuICBnZXRDb25maWcsXG4gIGdldERpYWdyYW0sXG4gIGdldERpYWdyYW1Mb2FkZXIsXG4gIGdldFNpdGVDb25maWcsXG4gIGxvZyxcbiAgcmVnaXN0ZXJEaWFncmFtLFxuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyxcbiAgcmVzZXQsXG4gIHNhdmVDb25maWdGcm9tSW5pdGlhbGl6ZSxcbiAgc2V0Q29uZmlnLFxuICBzZXRMb2dMZXZlbCxcbiAgc2V0U2l0ZUNvbmZpZyxcbiAgc3R5bGVzX2RlZmF1bHQsXG4gIHRoZW1lc19kZWZhdWx0LFxuICB1cGRhdGVTaXRlQ29uZmlnXG59IGZyb20gXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2h1bmstSUlLTVFMSUMubWpzXCI7XG5cbi8vIHNyYy9tZXJtYWlkLnRzXG5pbXBvcnQgeyBkZWRlbnQgfSBmcm9tIFwidHMtZGVkZW50XCI7XG5cbi8vIHNyYy9kaWFncmFtcy9jNC9jNERldGVjdG9yLnRzXG52YXIgaWQgPSBcImM0XCI7XG52YXIgZGV0ZWN0b3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvYzREaWFncmFtLVRIQURHS0RQLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4gPSB7XG4gIGlkLFxuICBkZXRlY3RvcixcbiAgbG9hZGVyXG59O1xudmFyIGM0RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjtcblxuLy8gc3JjL2RpYWdyYW1zL2Zsb3djaGFydC9mbG93RGV0ZWN0b3IudHNcbnZhciBpZDIgPSBcImZsb3djaGFydFwiO1xudmFyIGRldGVjdG9yMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCwgY29uZmlnKSA9PiB7XG4gIGlmIChjb25maWc/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyID09PSBcImRhZ3JlLXdyYXBwZXJcIiB8fCBjb25maWc/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyID09PSBcImVsa1wiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAvXlxccypncmFwaC8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9mbG93RGlhZ3JhbS00NE5PQU1LVS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDIsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4yID0ge1xuICBpZDogaWQyLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IyLFxuICBsb2FkZXI6IGxvYWRlcjJcbn07XG52YXIgZmxvd0RldGVjdG9yX2RlZmF1bHQgPSBwbHVnaW4yO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZmxvd2NoYXJ0L2Zsb3dEZXRlY3Rvci12Mi50c1xudmFyIGlkMyA9IFwiZmxvd2NoYXJ0LXYyXCI7XG52YXIgZGV0ZWN0b3IzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBjb25maWcpID0+IHtcbiAgaWYgKGNvbmZpZz8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtZDNcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoY29uZmlnPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlciA9PT0gXCJlbGtcIikge1xuICAgIGNvbmZpZy5sYXlvdXQgPSBcImVsa1wiO1xuICB9XG4gIGlmICgvXlxccypncmFwaC8udGVzdCh0eHQpICYmIGNvbmZpZz8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIC9eXFxzKmZsb3djaGFydC8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9mbG93RGlhZ3JhbS00NE5PQU1LVS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDMsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4zID0ge1xuICBpZDogaWQzLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IzLFxuICBsb2FkZXI6IGxvYWRlcjNcbn07XG52YXIgZmxvd0RldGVjdG9yX3YyX2RlZmF1bHQgPSBwbHVnaW4zO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZXIvZXJEZXRlY3Rvci50c1xudmFyIGlkNCA9IFwiZXJcIjtcbnZhciBkZXRlY3RvcjQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKmVyRGlhZ3JhbS8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXI0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9lckRpYWdyYW0tNjJDQlFWNVkubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQ0LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luNCA9IHtcbiAgaWQ6IGlkNCxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yNCxcbiAgbG9hZGVyOiBsb2FkZXI0XG59O1xudmFyIGVyRGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjQ7XG5cbi8vIHNyYy9kaWFncmFtcy9naXQvZ2l0R3JhcGhEZXRlY3Rvci50c1xudmFyIGlkNSA9IFwiZ2l0R3JhcGhcIjtcbnZhciBkZXRlY3RvcjUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKmdpdEdyYXBoLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2dpdEdyYXBoRGlhZ3JhbS1VTDVVRktEUi5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDUsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW41ID0ge1xuICBpZDogaWQ1LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I1LFxuICBsb2FkZXI6IGxvYWRlcjVcbn07XG52YXIgZ2l0R3JhcGhEZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luNTtcblxuLy8gc3JjL2RpYWdyYW1zL2dhbnR0L2dhbnR0RGV0ZWN0b3IudHNcbnZhciBpZDYgPSBcImdhbnR0XCI7XG52YXIgZGV0ZWN0b3I2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypnYW50dC8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXI2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9nYW50dERpYWdyYW0tQVNFSVE0UDUubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQ2LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luNiA9IHtcbiAgaWQ6IGlkNixcbiAgZGV0ZWN0b3I6IGRldGVjdG9yNixcbiAgbG9hZGVyOiBsb2FkZXI2XG59O1xudmFyIGdhbnR0RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjY7XG5cbi8vIHNyYy9kaWFncmFtcy9pbmZvL2luZm9EZXRlY3Rvci50c1xudmFyIGlkNyA9IFwiaW5mb1wiO1xudmFyIGRldGVjdG9yNyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqaW5mby8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXI3ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9pbmZvRGlhZ3JhbS1ZR0pUUDZBQS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDcsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBpbmZvID0ge1xuICBpZDogaWQ3LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I3LFxuICBsb2FkZXI6IGxvYWRlcjdcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9waWUvcGllRGV0ZWN0b3IudHNcbnZhciBpZDggPSBcInBpZVwiO1xudmFyIGRldGVjdG9yOCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqcGllLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjggPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3BpZURpYWdyYW0tT1pYNlhINU0ubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQ4LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGllID0ge1xuICBpZDogaWQ4LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I4LFxuICBsb2FkZXI6IGxvYWRlcjhcbn07XG5cbi8vIHNyYy9kaWFncmFtcy9xdWFkcmFudC1jaGFydC9xdWFkcmFudERldGVjdG9yLnRzXG52YXIgaWQ5ID0gXCJxdWFkcmFudENoYXJ0XCI7XG52YXIgZGV0ZWN0b3I5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypxdWFkcmFudENoYXJ0Ly50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3F1YWRyYW50RGlhZ3JhbS1WRzM0REdLQy5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDksIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW43ID0ge1xuICBpZDogaWQ5LFxuICBkZXRlY3RvcjogZGV0ZWN0b3I5LFxuICBsb2FkZXI6IGxvYWRlcjlcbn07XG52YXIgcXVhZHJhbnREZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luNztcblxuLy8gc3JjL2RpYWdyYW1zL3h5Y2hhcnQveHljaGFydERldGVjdG9yLnRzXG52YXIgaWQxMCA9IFwieHljaGFydFwiO1xudmFyIGRldGVjdG9yMTAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKnh5Y2hhcnQtYmV0YS8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIxMCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUveHljaGFydERpYWdyYW0tVE1UN05MQk4ubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxMCwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjggPSB7XG4gIGlkOiBpZDEwLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IxMCxcbiAgbG9hZGVyOiBsb2FkZXIxMFxufTtcbnZhciB4eWNoYXJ0RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjg7XG5cbi8vIHNyYy9kaWFncmFtcy9yZXF1aXJlbWVudC9yZXF1aXJlbWVudERldGVjdG9yLnRzXG52YXIgaWQxMSA9IFwicmVxdWlyZW1lbnRcIjtcbnZhciBkZXRlY3RvcjExID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3JlcXVpcmVtZW50RGlhZ3JhbS1GUFpCNklKSS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDExLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luOSA9IHtcbiAgaWQ6IGlkMTEsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjExLFxuICBsb2FkZXI6IGxvYWRlcjExXG59O1xudmFyIHJlcXVpcmVtZW50RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjk7XG5cbi8vIHNyYy9kaWFncmFtcy9zZXF1ZW5jZS9zZXF1ZW5jZURldGVjdG9yLnRzXG52YXIgaWQxMiA9IFwic2VxdWVuY2VcIjtcbnZhciBkZXRlY3RvcjEyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0KSA9PiB7XG4gIHJldHVybiAvXlxccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3NlcXVlbmNlRGlhZ3JhbS1LN1U3VTJQVS5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDEyLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luMTAgPSB7XG4gIGlkOiBpZDEyLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IxMixcbiAgbG9hZGVyOiBsb2FkZXIxMlxufTtcbnZhciBzZXF1ZW5jZURldGVjdG9yX2RlZmF1bHQgPSBwbHVnaW4xMDtcblxuLy8gc3JjL2RpYWdyYW1zL2NsYXNzL2NsYXNzRGV0ZWN0b3IudHNcbnZhciBpZDEzID0gXCJjbGFzc1wiO1xudmFyIGRldGVjdG9yMTMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQsIGNvbmZpZykgPT4ge1xuICBpZiAoY29uZmlnPy5jbGFzcz8uZGVmYXVsdFJlbmRlcmVyID09PSBcImRhZ3JlLXdyYXBwZXJcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gL15cXHMqY2xhc3NEaWFncmFtLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjEzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9jbGFzc0RpYWdyYW0tNEJIWUlLNEkubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxMywgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjExID0ge1xuICBpZDogaWQxMyxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMTMsXG4gIGxvYWRlcjogbG9hZGVyMTNcbn07XG52YXIgY2xhc3NEZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luMTE7XG5cbi8vIHNyYy9kaWFncmFtcy9jbGFzcy9jbGFzc0RldGVjdG9yLVYyLnRzXG52YXIgaWQxNCA9IFwiY2xhc3NEaWFncmFtXCI7XG52YXIgZGV0ZWN0b3IxNCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCwgY29uZmlnKSA9PiB7XG4gIGlmICgvXlxccypjbGFzc0RpYWdyYW0vLnRlc3QodHh0KSAmJiBjb25maWc/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIC9eXFxzKmNsYXNzRGlhZ3JhbS12Mi8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIxNCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvY2xhc3NEaWFncmFtLXYyLVNQWTZWMzJPLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMTQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4xMiA9IHtcbiAgaWQ6IGlkMTQsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjE0LFxuICBsb2FkZXI6IGxvYWRlcjE0XG59O1xudmFyIGNsYXNzRGV0ZWN0b3JfVjJfZGVmYXVsdCA9IHBsdWdpbjEyO1xuXG4vLyBzcmMvZGlhZ3JhbXMvc3RhdGUvc3RhdGVEZXRlY3Rvci50c1xudmFyIGlkMTUgPSBcInN0YXRlXCI7XG52YXIgZGV0ZWN0b3IxNSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCwgY29uZmlnKSA9PiB7XG4gIGlmIChjb25maWc/LnN0YXRlPy5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZGFncmUtd3JhcHBlclwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAvXlxccypzdGF0ZURpYWdyYW0vLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3N0YXRlRGlhZ3JhbS1XRzc2RVdQSy5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDE1LCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luMTMgPSB7XG4gIGlkOiBpZDE1LFxuICBkZXRlY3RvcjogZGV0ZWN0b3IxNSxcbiAgbG9hZGVyOiBsb2FkZXIxNVxufTtcbnZhciBzdGF0ZURldGVjdG9yX2RlZmF1bHQgPSBwbHVnaW4xMztcblxuLy8gc3JjL2RpYWdyYW1zL3N0YXRlL3N0YXRlRGV0ZWN0b3ItVjIudHNcbnZhciBpZDE2ID0gXCJzdGF0ZURpYWdyYW1cIjtcbnZhciBkZXRlY3RvcjE2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBjb25maWcpID0+IHtcbiAgaWYgKC9eXFxzKnN0YXRlRGlhZ3JhbS12Mi8udGVzdCh0eHQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKC9eXFxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0eHQpICYmIGNvbmZpZz8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlciA9PT0gXCJkYWdyZS13cmFwcGVyXCIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjE2ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9zdGF0ZURpYWdyYW0tdjItS1I0WFRRTFcubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxNiwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjE0ID0ge1xuICBpZDogaWQxNixcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMTYsXG4gIGxvYWRlcjogbG9hZGVyMTZcbn07XG52YXIgc3RhdGVEZXRlY3Rvcl9WMl9kZWZhdWx0ID0gcGx1Z2luMTQ7XG5cbi8vIHNyYy9kaWFncmFtcy91c2VyLWpvdXJuZXkvam91cm5leURldGVjdG9yLnRzXG52YXIgaWQxNyA9IFwiam91cm5leVwiO1xudmFyIGRldGVjdG9yMTcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKmpvdXJuZXkvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMTcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2pvdXJuZXlEaWFncmFtLUc1TEM3VzJLLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMTcsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4xNSA9IHtcbiAgaWQ6IGlkMTcsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjE3LFxuICBsb2FkZXI6IGxvYWRlcjE3XG59O1xudmFyIGpvdXJuZXlEZXRlY3Rvcl9kZWZhdWx0ID0gcGx1Z2luMTU7XG5cbi8vIHNyYy9kaWFncmFtcy9lcnJvci9lcnJvclJlbmRlcmVyLnRzXG52YXIgZHJhdyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKF90ZXh0LCBpZDI1LCB2ZXJzaW9uMikgPT4ge1xuICBsb2cuZGVidWcoXCJyZW5kZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3JcXG5cIik7XG4gIGNvbnN0IHN2ZyA9IHNlbGVjdFN2Z0VsZW1lbnQoaWQyNSk7XG4gIGNvbnN0IGcgPSBzdmcuYXBwZW5kKFwiZ1wiKTtcbiAgc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIFwiMCAwIDI0MTIgNTEyXCIpO1xuICBjb25maWd1cmVTdmdTaXplKHN2ZywgMTAwLCA1MTIsIHRydWUpO1xuICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2elwiXG4gICk7XG4gIGcuYXBwZW5kKFwicGF0aFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlcnJvci1pY29uXCIpLmF0dHIoXG4gICAgXCJkXCIsXG4gICAgXCJtNDU5LjAyLDE0OC45OGMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNiwxNmMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi4wMDEtMTZ6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJwYXRoXCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLWljb25cIikuYXR0cihcbiAgICBcImRcIixcbiAgICBcIm00OTYsOTYuNTg2aC0zMmMtOC44NDQsMC0xNiw3LjE2NC0xNiwxNiAwLDguODM2IDcuMTU2LDE2IDE2LDE2aDMyYzguODQ0LDAgMTYtNy4xNjQgMTYtMTYgMC04LjgzNi03LjE1Ni0xNi0xNi0xNnpcIlxuICApO1xuICBnLmFwcGVuZChcInBhdGhcIikuYXR0cihcImNsYXNzXCIsIFwiZXJyb3ItaWNvblwiKS5hdHRyKFxuICAgIFwiZFwiLFxuICAgIFwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6XCJcbiAgKTtcbiAgZy5hcHBlbmQoXCJ0ZXh0XCIpLmF0dHIoXCJjbGFzc1wiLCBcImVycm9yLXRleHRcIikuYXR0cihcInhcIiwgMTQ0MCkuYXR0cihcInlcIiwgMjUwKS5hdHRyKFwiZm9udC1zaXplXCIsIFwiMTUwcHhcIikuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKS50ZXh0KFwiU3ludGF4IGVycm9yIGluIHRleHRcIik7XG4gIGcuYXBwZW5kKFwidGV4dFwiKS5hdHRyKFwiY2xhc3NcIiwgXCJlcnJvci10ZXh0XCIpLmF0dHIoXCJ4XCIsIDEyNTApLmF0dHIoXCJ5XCIsIDQwMCkuYXR0cihcImZvbnQtc2l6ZVwiLCBcIjEwMHB4XCIpLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIikudGV4dChgbWVybWFpZCB2ZXJzaW9uICR7dmVyc2lvbjJ9YCk7XG59LCBcImRyYXdcIik7XG52YXIgcmVuZGVyZXIgPSB7IGRyYXcgfTtcbnZhciBlcnJvclJlbmRlcmVyX2RlZmF1bHQgPSByZW5kZXJlcjtcblxuLy8gc3JjL2RpYWdyYW1zL2Vycm9yL2Vycm9yRGlhZ3JhbS50c1xudmFyIGRpYWdyYW0gPSB7XG4gIGRiOiB7fSxcbiAgcmVuZGVyZXIsXG4gIHBhcnNlcjoge1xuICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9LCBcInBhcnNlXCIpXG4gIH1cbn07XG52YXIgZXJyb3JEaWFncmFtX2RlZmF1bHQgPSBkaWFncmFtO1xuXG4vLyBzcmMvZGlhZ3JhbXMvZmxvd2NoYXJ0L2Vsay9kZXRlY3Rvci50c1xudmFyIGlkMTggPSBcImZsb3djaGFydC1lbGtcIjtcbnZhciBkZXRlY3RvcjE4ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodHh0LCBjb25maWcgPSB7fSkgPT4ge1xuICBpZiAoXG4gICAgLy8gSWYgZGlhZ3JhbSBleHBsaWNpdGx5IHN0YXRlcyBmbG93Y2hhcnQtZWxrXG4gICAgL15cXHMqZmxvd2NoYXJ0LWVsay8udGVzdCh0eHQpIHx8IC8vIElmIGEgZmxvd2NoYXJ0L2dyYXBoIGRpYWdyYW0gaGFzIHRoZWlyIGRlZmF1bHQgcmVuZGVyZXIgc2V0IHRvIGVsa1xuICAgIC9eXFxzKmZsb3djaGFydHxncmFwaC8udGVzdCh0eHQpICYmIGNvbmZpZz8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXIgPT09IFwiZWxrXCJcbiAgKSB7XG4gICAgY29uZmlnLmxheW91dCA9IFwiZWxrXCI7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIxOCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvZmxvd0RpYWdyYW0tNDROT0FNS1UubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQxOCwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjE2ID0ge1xuICBpZDogaWQxOCxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMTgsXG4gIGxvYWRlcjogbG9hZGVyMThcbn07XG52YXIgZGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjE2O1xuXG4vLyBzcmMvZGlhZ3JhbXMvdGltZWxpbmUvZGV0ZWN0b3IudHNcbnZhciBpZDE5ID0gXCJ0aW1lbGluZVwiO1xudmFyIGRldGVjdG9yMTkgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKnRpbWVsaW5lLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjE5ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS90aW1lbGluZS1kZWZpbml0aW9uLUtZUUFJWlVYLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMTksIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4xNyA9IHtcbiAgaWQ6IGlkMTksXG4gIGRldGVjdG9yOiBkZXRlY3RvcjE5LFxuICBsb2FkZXI6IGxvYWRlcjE5XG59O1xudmFyIGRldGVjdG9yX2RlZmF1bHQyID0gcGx1Z2luMTc7XG5cbi8vIHNyYy9kaWFncmFtcy9taW5kbWFwL2RldGVjdG9yLnRzXG52YXIgaWQyMCA9IFwibWluZG1hcFwiO1xudmFyIGRldGVjdG9yMjAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh0eHQpID0+IHtcbiAgcmV0dXJuIC9eXFxzKm1pbmRtYXAvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMjAgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL21pbmRtYXAtZGVmaW5pdGlvbi0yNkZXRUU3SC5tanNcIik7XG4gIHJldHVybiB7IGlkOiBpZDIwLCBkaWFncmFtOiBkaWFncmFtMiB9O1xufSwgXCJsb2FkZXJcIik7XG52YXIgcGx1Z2luMTggPSB7XG4gIGlkOiBpZDIwLFxuICBkZXRlY3RvcjogZGV0ZWN0b3IyMCxcbiAgbG9hZGVyOiBsb2FkZXIyMFxufTtcbnZhciBkZXRlY3Rvcl9kZWZhdWx0MyA9IHBsdWdpbjE4O1xuXG4vLyBzcmMvZGlhZ3JhbXMvc2Fua2V5L3NhbmtleURldGVjdG9yLnRzXG52YXIgaWQyMSA9IFwic2Fua2V5XCI7XG52YXIgZGV0ZWN0b3IyMSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqc2Fua2V5LWJldGEvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMjEgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL3NhbmtleURpYWdyYW0tS01NUURMNUsubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQyMSwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBsdWdpbjE5ID0ge1xuICBpZDogaWQyMSxcbiAgZGV0ZWN0b3I6IGRldGVjdG9yMjEsXG4gIGxvYWRlcjogbG9hZGVyMjFcbn07XG52YXIgc2Fua2V5RGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjE5O1xuXG4vLyBzcmMvZGlhZ3JhbXMvcGFja2V0L2RldGVjdG9yLnRzXG52YXIgaWQyMiA9IFwicGFja2V0XCI7XG52YXIgZGV0ZWN0b3IyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqcGFja2V0LWJldGEvLnRlc3QodHh0KTtcbn0sIFwiZGV0ZWN0b3JcIik7XG52YXIgbG9hZGVyMjIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jICgpID0+IHtcbiAgY29uc3QgeyBkaWFncmFtOiBkaWFncmFtMiB9ID0gYXdhaXQgaW1wb3J0KFwiLi9jaHVua3MvbWVybWFpZC5jb3JlL2RpYWdyYW0tUVM1R1ZMVVgubWpzXCIpO1xuICByZXR1cm4geyBpZDogaWQyMiwgZGlhZ3JhbTogZGlhZ3JhbTIgfTtcbn0sIFwibG9hZGVyXCIpO1xudmFyIHBhY2tldCA9IHtcbiAgaWQ6IGlkMjIsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjIyLFxuICBsb2FkZXI6IGxvYWRlcjIyXG59O1xuXG4vLyBzcmMvZGlhZ3JhbXMvYmxvY2svYmxvY2tEZXRlY3Rvci50c1xudmFyIGlkMjMgPSBcImJsb2NrXCI7XG52YXIgZGV0ZWN0b3IyMyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqYmxvY2stYmV0YS8udGVzdCh0eHQpO1xufSwgXCJkZXRlY3RvclwiKTtcbnZhciBsb2FkZXIyMyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2NodW5rcy9tZXJtYWlkLmNvcmUvYmxvY2tEaWFncmFtLVNMRVlOVU5OLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMjMsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBwbHVnaW4yMCA9IHtcbiAgaWQ6IGlkMjMsXG4gIGRldGVjdG9yOiBkZXRlY3RvcjIzLFxuICBsb2FkZXI6IGxvYWRlcjIzXG59O1xudmFyIGJsb2NrRGV0ZWN0b3JfZGVmYXVsdCA9IHBsdWdpbjIwO1xuXG4vLyBzcmMvZGlhZ3JhbXMvYXJjaGl0ZWN0dXJlL2FyY2hpdGVjdHVyZURldGVjdG9yLnRzXG52YXIgaWQyNCA9IFwiYXJjaGl0ZWN0dXJlXCI7XG52YXIgZGV0ZWN0b3IyNCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHR4dCkgPT4ge1xuICByZXR1cm4gL15cXHMqYXJjaGl0ZWN0dXJlLy50ZXN0KHR4dCk7XG59LCBcImRldGVjdG9yXCIpO1xudmFyIGxvYWRlcjI0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHsgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGltcG9ydChcIi4vY2h1bmtzL21lcm1haWQuY29yZS9hcmNoaXRlY3R1cmVEaWFncmFtLVdRR0xLQ1NDLm1qc1wiKTtcbiAgcmV0dXJuIHsgaWQ6IGlkMjQsIGRpYWdyYW06IGRpYWdyYW0yIH07XG59LCBcImxvYWRlclwiKTtcbnZhciBhcmNoaXRlY3R1cmUgPSB7XG4gIGlkOiBpZDI0LFxuICBkZXRlY3RvcjogZGV0ZWN0b3IyNCxcbiAgbG9hZGVyOiBsb2FkZXIyNFxufTtcbnZhciBhcmNoaXRlY3R1cmVEZXRlY3Rvcl9kZWZhdWx0ID0gYXJjaGl0ZWN0dXJlO1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZGlhZ3JhbS1vcmNoZXN0cmF0aW9uLnRzXG52YXIgaGFzTG9hZGVkRGlhZ3JhbXMgPSBmYWxzZTtcbnZhciBhZGREaWFncmFtcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICBpZiAoaGFzTG9hZGVkRGlhZ3JhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFzTG9hZGVkRGlhZ3JhbXMgPSB0cnVlO1xuICByZWdpc3RlckRpYWdyYW0oXCJlcnJvclwiLCBlcnJvckRpYWdyYW1fZGVmYXVsdCwgKHRleHQpID0+IHtcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gXCJlcnJvclwiO1xuICB9KTtcbiAgcmVnaXN0ZXJEaWFncmFtKFxuICAgIFwiLS0tXCIsXG4gICAgLy8gLS0tIGRpYWdyYW0gdHlwZSBtYXkgYXBwZWFyIGlmIFlBTUwgZnJvbnQtbWF0dGVyIGlzIG5vdCBwYXJzZWQgY29ycmVjdGx5XG4gICAge1xuICAgICAgZGI6IHtcbiAgICAgICAgY2xlYXI6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4ge1xuICAgICAgICB9LCBcImNsZWFyXCIpXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7fSxcbiAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB1c2VkXG4gICAgICByZW5kZXJlcjoge1xuICAgICAgICBkcmF3OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgICAgfSwgXCJkcmF3XCIpXG4gICAgICB9LFxuICAgICAgcGFyc2VyOiB7XG4gICAgICAgIHBhcnNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkRpYWdyYW1zIGJlZ2lubmluZyB3aXRoIC0tLSBhcmUgbm90IHZhbGlkLiBJZiB5b3Ugd2VyZSB0cnlpbmcgdG8gdXNlIGEgWUFNTCBmcm9udC1tYXR0ZXIsIHBsZWFzZSBlbnN1cmUgdGhhdCB5b3UndmUgY29ycmVjdGx5IG9wZW5lZCBhbmQgY2xvc2VkIHRoZSBZQU1MIGZyb250LW1hdHRlciB3aXRoIHVuLWluZGVudGVkIGAtLS1gIGJsb2Nrc1wiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgXCJwYXJzZVwiKVxuICAgICAgfSxcbiAgICAgIGluaXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gbnVsbCwgXCJpbml0XCIpXG4gICAgICAvLyBubyBvcFxuICAgIH0sXG4gICAgKHRleHQpID0+IHtcbiAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aChcIi0tLVwiKTtcbiAgICB9XG4gICk7XG4gIHJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zKFxuICAgIGM0RGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBjbGFzc0RldGVjdG9yX1YyX2RlZmF1bHQsXG4gICAgY2xhc3NEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGVyRGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBnYW50dERldGVjdG9yX2RlZmF1bHQsXG4gICAgaW5mbyxcbiAgICBwaWUsXG4gICAgcmVxdWlyZW1lbnREZXRlY3Rvcl9kZWZhdWx0LFxuICAgIHNlcXVlbmNlRGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBkZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGZsb3dEZXRlY3Rvcl92Ml9kZWZhdWx0LFxuICAgIGZsb3dEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGRldGVjdG9yX2RlZmF1bHQzLFxuICAgIGRldGVjdG9yX2RlZmF1bHQyLFxuICAgIGdpdEdyYXBoRGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBzdGF0ZURldGVjdG9yX1YyX2RlZmF1bHQsXG4gICAgc3RhdGVEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIGpvdXJuZXlEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIHF1YWRyYW50RGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBzYW5rZXlEZXRlY3Rvcl9kZWZhdWx0LFxuICAgIHBhY2tldCxcbiAgICB4eWNoYXJ0RGV0ZWN0b3JfZGVmYXVsdCxcbiAgICBibG9ja0RldGVjdG9yX2RlZmF1bHQsXG4gICAgYXJjaGl0ZWN0dXJlRGV0ZWN0b3JfZGVmYXVsdFxuICApO1xufSwgXCJhZGREaWFncmFtc1wiKTtcblxuLy8gc3JjL2RpYWdyYW0tYXBpL2xvYWREaWFncmFtLnRzXG52YXIgbG9hZFJlZ2lzdGVyZWREaWFncmFtcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBsb2cuZGVidWcoYExvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtc2ApO1xuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgIE9iamVjdC5lbnRyaWVzKGRldGVjdG9ycykubWFwKGFzeW5jIChba2V5LCB7IGRldGVjdG9yOiBkZXRlY3RvcjI1LCBsb2FkZXI6IGxvYWRlcjI2IH1dKSA9PiB7XG4gICAgICBpZiAobG9hZGVyMjYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBnZXREaWFncmFtKGtleSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRpYWdyYW06IGRpYWdyYW0yLCBpZDogaWQyNSB9ID0gYXdhaXQgbG9hZGVyMjYoKTtcbiAgICAgICAgICAgIHJlZ2lzdGVyRGlhZ3JhbShpZDI1LCBkaWFncmFtMiwgZGV0ZWN0b3IyNSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtrZXl9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKTtcbiAgICAgICAgICAgIGRlbGV0ZSBkZXRlY3RvcnNba2V5XTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICApO1xuICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpO1xuICBpZiAoZmFpbGVkLmxlbmd0aCA+IDApIHtcbiAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7ZmFpbGVkLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtcbiAgICBmb3IgKGNvbnN0IHJlcyBvZiBmYWlsZWQpIHtcbiAgICAgIGxvZy5lcnJvcihyZXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7ZmFpbGVkLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtcbiAgfVxufSwgXCJsb2FkUmVnaXN0ZXJlZERpYWdyYW1zXCIpO1xuXG4vLyBzcmMvbWVybWFpZEFQSS50c1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSBcImQzXCI7XG5pbXBvcnQgeyBjb21waWxlLCBzZXJpYWxpemUsIHN0cmluZ2lmeSB9IGZyb20gXCJzdHlsaXNcIjtcbmltcG9ydCBET01QdXJpZnkgZnJvbSBcImRvbXB1cmlmeVwiO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSBcImxvZGFzaC1lcy9pc0VtcHR5LmpzXCI7XG5cbi8vIHNyYy9hY2Nlc3NpYmlsaXR5LnRzXG52YXIgU1ZHX1JPTEUgPSBcImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50XCI7XG5mdW5jdGlvbiBzZXRBMTF5RGlhZ3JhbUluZm8oc3ZnLCBkaWFncmFtVHlwZSkge1xuICBzdmcuYXR0cihcInJvbGVcIiwgU1ZHX1JPTEUpO1xuICBpZiAoZGlhZ3JhbVR5cGUgIT09IFwiXCIpIHtcbiAgICBzdmcuYXR0cihcImFyaWEtcm9sZWRlc2NyaXB0aW9uXCIsIGRpYWdyYW1UeXBlKTtcbiAgfVxufVxuX19uYW1lKHNldEExMXlEaWFncmFtSW5mbywgXCJzZXRBMTF5RGlhZ3JhbUluZm9cIik7XG5mdW5jdGlvbiBhZGRTVkdhMTF5VGl0bGVEZXNjcmlwdGlvbihzdmcsIGExMXlUaXRsZSwgYTExeURlc2MsIGJhc2VJZCkge1xuICBpZiAoc3ZnLmluc2VydCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhMTF5RGVzYykge1xuICAgIGNvbnN0IGRlc2NJZCA9IGBjaGFydC1kZXNjLSR7YmFzZUlkfWA7XG4gICAgc3ZnLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NJZCk7XG4gICAgc3ZnLmluc2VydChcImRlc2NcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImlkXCIsIGRlc2NJZCkudGV4dChhMTF5RGVzYyk7XG4gIH1cbiAgaWYgKGExMXlUaXRsZSkge1xuICAgIGNvbnN0IHRpdGxlSWQgPSBgY2hhcnQtdGl0bGUtJHtiYXNlSWR9YDtcbiAgICBzdmcuYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLCB0aXRsZUlkKTtcbiAgICBzdmcuaW5zZXJ0KFwidGl0bGVcIiwgXCI6Zmlyc3QtY2hpbGRcIikuYXR0cihcImlkXCIsIHRpdGxlSWQpLnRleHQoYTExeVRpdGxlKTtcbiAgfVxufVxuX19uYW1lKGFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uLCBcImFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uXCIpO1xuXG4vLyBzcmMvRGlhZ3JhbS50c1xudmFyIERpYWdyYW0gPSBjbGFzcyBfRGlhZ3JhbSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUyLCB0ZXh0LCBkYiwgcGFyc2VyLCByZW5kZXJlcjIpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlMjtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuZGIgPSBkYjtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXIyO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiRGlhZ3JhbVwiKTtcbiAgfVxuICBzdGF0aWMgYXN5bmMgZnJvbVRleHQodGV4dCwgbWV0YWRhdGEgPSB7fSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHR5cGUyID0gZGV0ZWN0VHlwZSh0ZXh0LCBjb25maWcpO1xuICAgIHRleHQgPSBlbmNvZGVFbnRpdGllcyh0ZXh0KSArIFwiXFxuXCI7XG4gICAgdHJ5IHtcbiAgICAgIGdldERpYWdyYW0odHlwZTIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgbG9hZGVyMjYgPSBnZXREaWFncmFtTG9hZGVyKHR5cGUyKTtcbiAgICAgIGlmICghbG9hZGVyMjYpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVua25vd25EaWFncmFtRXJyb3IoYERpYWdyYW0gJHt0eXBlMn0gbm90IGZvdW5kLmApO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBpZDogaWQyNSwgZGlhZ3JhbTogZGlhZ3JhbTIgfSA9IGF3YWl0IGxvYWRlcjI2KCk7XG4gICAgICByZWdpc3RlckRpYWdyYW0oaWQyNSwgZGlhZ3JhbTIpO1xuICAgIH1cbiAgICBjb25zdCB7IGRiLCBwYXJzZXIsIHJlbmRlcmVyOiByZW5kZXJlcjIsIGluaXQ6IGluaXQyIH0gPSBnZXREaWFncmFtKHR5cGUyKTtcbiAgICBpZiAocGFyc2VyLnBhcnNlcikge1xuICAgICAgcGFyc2VyLnBhcnNlci55eSA9IGRiO1xuICAgIH1cbiAgICBkYi5jbGVhcj8uKCk7XG4gICAgaW5pdDI/Lihjb25maWcpO1xuICAgIGlmIChtZXRhZGF0YS50aXRsZSkge1xuICAgICAgZGIuc2V0RGlhZ3JhbVRpdGxlPy4obWV0YWRhdGEudGl0bGUpO1xuICAgIH1cbiAgICBhd2FpdCBwYXJzZXIucGFyc2UodGV4dCk7XG4gICAgcmV0dXJuIG5ldyBfRGlhZ3JhbSh0eXBlMiwgdGV4dCwgZGIsIHBhcnNlciwgcmVuZGVyZXIyKTtcbiAgfVxuICBhc3luYyByZW5kZXIoaWQyNSwgdmVyc2lvbjIpIHtcbiAgICBhd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LCBpZDI1LCB2ZXJzaW9uMiwgdGhpcyk7XG4gIH1cbiAgZ2V0UGFyc2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlcjtcbiAgfVxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbn07XG5cbi8vIHNyYy9pbnRlcmFjdGlvbkRiLnRzXG52YXIgaW50ZXJhY3Rpb25GdW5jdGlvbnMgPSBbXTtcbnZhciBhdHRhY2hGdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgaW50ZXJhY3Rpb25GdW5jdGlvbnMuZm9yRWFjaCgoZikgPT4ge1xuICAgIGYoKTtcbiAgfSk7XG4gIGludGVyYWN0aW9uRnVuY3Rpb25zID0gW107XG59LCBcImF0dGFjaEZ1bmN0aW9uc1wiKTtcblxuLy8gc3JjL2RpYWdyYW0tYXBpL2NvbW1lbnRzLnRzXG52YXIgY2xlYW51cENvbW1lbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodGV4dCkgPT4ge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9eXFxzKiUlKD8heylbXlxcbl0rXFxuPy9nbSwgXCJcIikudHJpbVN0YXJ0KCk7XG59LCBcImNsZWFudXBDb21tZW50c1wiKTtcblxuLy8gLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxANC4xLjAvbm9kZV9tb2R1bGVzL2pzLXlhbWwvZGlzdC9qcy15YW1sLm1qc1xuZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8IHN1YmplY3QgPT09IG51bGw7XG59XG5fX25hbWUoaXNOb3RoaW5nLCBcImlzTm90aGluZ1wiKTtcbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSBcIm9iamVjdFwiICYmIHN1YmplY3QgIT09IG51bGw7XG59XG5fX25hbWUoaXNPYmplY3QsIFwiaXNPYmplY3RcIik7XG5mdW5jdGlvbiB0b0FycmF5KHNlcXVlbmNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlO1xuICBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSByZXR1cm4gW107XG4gIHJldHVybiBbc2VxdWVuY2VdO1xufVxuX19uYW1lKHRvQXJyYXksIFwidG9BcnJheVwiKTtcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIgaW5kZXgsIGxlbmd0aCwga2V5LCBzb3VyY2VLZXlzO1xuICBpZiAoc291cmNlKSB7XG4gICAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAga2V5ID0gc291cmNlS2V5c1tpbmRleF07XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuX19uYW1lKGV4dGVuZCwgXCJleHRlbmRcIik7XG5mdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBjb3VudCkge1xuICB2YXIgcmVzdWx0ID0gXCJcIiwgY3ljbGU7XG4gIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSArPSAxKSB7XG4gICAgcmVzdWx0ICs9IHN0cmluZztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKHJlcGVhdCwgXCJyZXBlYXRcIik7XG5mdW5jdGlvbiBpc05lZ2F0aXZlWmVybyhudW1iZXIpIHtcbiAgcmV0dXJuIG51bWJlciA9PT0gMCAmJiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IDEgLyBudW1iZXI7XG59XG5fX25hbWUoaXNOZWdhdGl2ZVplcm8sIFwiaXNOZWdhdGl2ZVplcm9cIik7XG52YXIgaXNOb3RoaW5nXzEgPSBpc05vdGhpbmc7XG52YXIgaXNPYmplY3RfMSA9IGlzT2JqZWN0O1xudmFyIHRvQXJyYXlfMSA9IHRvQXJyYXk7XG52YXIgcmVwZWF0XzEgPSByZXBlYXQ7XG52YXIgaXNOZWdhdGl2ZVplcm9fMSA9IGlzTmVnYXRpdmVaZXJvO1xudmFyIGV4dGVuZF8xID0gZXh0ZW5kO1xudmFyIGNvbW1vbiA9IHtcbiAgaXNOb3RoaW5nOiBpc05vdGhpbmdfMSxcbiAgaXNPYmplY3Q6IGlzT2JqZWN0XzEsXG4gIHRvQXJyYXk6IHRvQXJyYXlfMSxcbiAgcmVwZWF0OiByZXBlYXRfMSxcbiAgaXNOZWdhdGl2ZVplcm86IGlzTmVnYXRpdmVaZXJvXzEsXG4gIGV4dGVuZDogZXh0ZW5kXzFcbn07XG5mdW5jdGlvbiBmb3JtYXRFcnJvcihleGNlcHRpb24yLCBjb21wYWN0KSB7XG4gIHZhciB3aGVyZSA9IFwiXCIsIG1lc3NhZ2UgPSBleGNlcHRpb24yLnJlYXNvbiB8fCBcIih1bmtub3duIHJlYXNvbilcIjtcbiAgaWYgKCFleGNlcHRpb24yLm1hcmspIHJldHVybiBtZXNzYWdlO1xuICBpZiAoZXhjZXB0aW9uMi5tYXJrLm5hbWUpIHtcbiAgICB3aGVyZSArPSAnaW4gXCInICsgZXhjZXB0aW9uMi5tYXJrLm5hbWUgKyAnXCIgJztcbiAgfVxuICB3aGVyZSArPSBcIihcIiArIChleGNlcHRpb24yLm1hcmsubGluZSArIDEpICsgXCI6XCIgKyAoZXhjZXB0aW9uMi5tYXJrLmNvbHVtbiArIDEpICsgXCIpXCI7XG4gIGlmICghY29tcGFjdCAmJiBleGNlcHRpb24yLm1hcmsuc25pcHBldCkge1xuICAgIHdoZXJlICs9IFwiXFxuXFxuXCIgKyBleGNlcHRpb24yLm1hcmsuc25pcHBldDtcbiAgfVxuICByZXR1cm4gbWVzc2FnZSArIFwiIFwiICsgd2hlcmU7XG59XG5fX25hbWUoZm9ybWF0RXJyb3IsIFwiZm9ybWF0RXJyb3JcIik7XG5mdW5jdGlvbiBZQU1MRXhjZXB0aW9uJDEocmVhc29uLCBtYXJrKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG4gIHRoaXMubmFtZSA9IFwiWUFNTEV4Y2VwdGlvblwiO1xuICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgdGhpcy5tYXJrID0gbWFyaztcbiAgdGhpcy5tZXNzYWdlID0gZm9ybWF0RXJyb3IodGhpcywgZmFsc2UpO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgfHwgXCJcIjtcbiAgfVxufVxuX19uYW1lKFlBTUxFeGNlcHRpb24kMSwgXCJZQU1MRXhjZXB0aW9uJDFcIik7XG5ZQU1MRXhjZXB0aW9uJDEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuWUFNTEV4Y2VwdGlvbiQxLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFlBTUxFeGNlcHRpb24kMTtcbllBTUxFeGNlcHRpb24kMS5wcm90b3R5cGUudG9TdHJpbmcgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHRvU3RyaW5nKGNvbXBhY3QpIHtcbiAgcmV0dXJuIHRoaXMubmFtZSArIFwiOiBcIiArIGZvcm1hdEVycm9yKHRoaXMsIGNvbXBhY3QpO1xufSwgXCJ0b1N0cmluZ1wiKTtcbnZhciBleGNlcHRpb24gPSBZQU1MRXhjZXB0aW9uJDE7XG5mdW5jdGlvbiBnZXRMaW5lKGJ1ZmZlciwgbGluZVN0YXJ0LCBsaW5lRW5kLCBwb3NpdGlvbiwgbWF4TGluZUxlbmd0aCkge1xuICB2YXIgaGVhZCA9IFwiXCI7XG4gIHZhciB0YWlsID0gXCJcIjtcbiAgdmFyIG1heEhhbGZMZW5ndGggPSBNYXRoLmZsb29yKG1heExpbmVMZW5ndGggLyAyKSAtIDE7XG4gIGlmIChwb3NpdGlvbiAtIGxpbmVTdGFydCA+IG1heEhhbGZMZW5ndGgpIHtcbiAgICBoZWFkID0gXCIgLi4uIFwiO1xuICAgIGxpbmVTdGFydCA9IHBvc2l0aW9uIC0gbWF4SGFsZkxlbmd0aCArIGhlYWQubGVuZ3RoO1xuICB9XG4gIGlmIChsaW5lRW5kIC0gcG9zaXRpb24gPiBtYXhIYWxmTGVuZ3RoKSB7XG4gICAgdGFpbCA9IFwiIC4uLlwiO1xuICAgIGxpbmVFbmQgPSBwb3NpdGlvbiArIG1heEhhbGZMZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0cjogaGVhZCArIGJ1ZmZlci5zbGljZShsaW5lU3RhcnQsIGxpbmVFbmQpLnJlcGxhY2UoL1xcdC9nLCBcIlxcdTIxOTJcIikgKyB0YWlsLFxuICAgIHBvczogcG9zaXRpb24gLSBsaW5lU3RhcnQgKyBoZWFkLmxlbmd0aFxuICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uXG4gIH07XG59XG5fX25hbWUoZ2V0TGluZSwgXCJnZXRMaW5lXCIpO1xuZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBtYXgpIHtcbiAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoXCIgXCIsIG1heCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufVxuX19uYW1lKHBhZFN0YXJ0LCBcInBhZFN0YXJ0XCIpO1xuZnVuY3Rpb24gbWFrZVNuaXBwZXQobWFyaywgb3B0aW9ucykge1xuICBvcHRpb25zID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zIHx8IG51bGwpO1xuICBpZiAoIW1hcmsuYnVmZmVyKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFvcHRpb25zLm1heExlbmd0aCkgb3B0aW9ucy5tYXhMZW5ndGggPSA3OTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluZGVudCAhPT0gXCJudW1iZXJcIikgb3B0aW9ucy5pbmRlbnQgPSAxO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNCZWZvcmUgIT09IFwibnVtYmVyXCIpIG9wdGlvbnMubGluZXNCZWZvcmUgPSAzO1xuICBpZiAodHlwZW9mIG9wdGlvbnMubGluZXNBZnRlciAhPT0gXCJudW1iZXJcIikgb3B0aW9ucy5saW5lc0FmdGVyID0gMjtcbiAgdmFyIHJlID0gL1xccj9cXG58XFxyfFxcMC9nO1xuICB2YXIgbGluZVN0YXJ0cyA9IFswXTtcbiAgdmFyIGxpbmVFbmRzID0gW107XG4gIHZhciBtYXRjaDtcbiAgdmFyIGZvdW5kTGluZU5vID0gLTE7XG4gIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMobWFyay5idWZmZXIpKSB7XG4gICAgbGluZUVuZHMucHVzaChtYXRjaC5pbmRleCk7XG4gICAgbGluZVN0YXJ0cy5wdXNoKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICBpZiAobWFyay5wb3NpdGlvbiA8PSBtYXRjaC5pbmRleCAmJiBmb3VuZExpbmVObyA8IDApIHtcbiAgICAgIGZvdW5kTGluZU5vID0gbGluZVN0YXJ0cy5sZW5ndGggLSAyO1xuICAgIH1cbiAgfVxuICBpZiAoZm91bmRMaW5lTm8gPCAwKSBmb3VuZExpbmVObyA9IGxpbmVTdGFydHMubGVuZ3RoIC0gMTtcbiAgdmFyIHJlc3VsdCA9IFwiXCIsIGksIGxpbmU7XG4gIHZhciBsaW5lTm9MZW5ndGggPSBNYXRoLm1pbihtYXJrLmxpbmUgKyBvcHRpb25zLmxpbmVzQWZ0ZXIsIGxpbmVFbmRzLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBtYXhMaW5lTGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggLSAob3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzKTtcbiAgZm9yIChpID0gMTsgaSA8PSBvcHRpb25zLmxpbmVzQmVmb3JlOyBpKyspIHtcbiAgICBpZiAoZm91bmRMaW5lTm8gLSBpIDwgMCkgYnJlYWs7XG4gICAgbGluZSA9IGdldExpbmUoXG4gICAgICBtYXJrLmJ1ZmZlcixcbiAgICAgIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gLSBpXSxcbiAgICAgIGxpbmVFbmRzW2ZvdW5kTGluZU5vIC0gaV0sXG4gICAgICBtYXJrLnBvc2l0aW9uIC0gKGxpbmVTdGFydHNbZm91bmRMaW5lTm9dIC0gbGluZVN0YXJ0c1tmb3VuZExpbmVObyAtIGldKSxcbiAgICAgIG1heExpbmVMZW5ndGhcbiAgICApO1xuICAgIHJlc3VsdCA9IGNvbW1vbi5yZXBlYXQoXCIgXCIsIG9wdGlvbnMuaW5kZW50KSArIHBhZFN0YXJ0KChtYXJrLmxpbmUgLSBpICsgMSkudG9TdHJpbmcoKSwgbGluZU5vTGVuZ3RoKSArIFwiIHwgXCIgKyBsaW5lLnN0ciArIFwiXFxuXCIgKyByZXN1bHQ7XG4gIH1cbiAgbGluZSA9IGdldExpbmUobWFyay5idWZmZXIsIGxpbmVTdGFydHNbZm91bmRMaW5lTm9dLCBsaW5lRW5kc1tmb3VuZExpbmVOb10sIG1hcmsucG9zaXRpb24sIG1heExpbmVMZW5ndGgpO1xuICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIiBcIiwgb3B0aW9ucy5pbmRlbnQpICsgcGFkU3RhcnQoKG1hcmsubGluZSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgKyBcIiB8IFwiICsgbGluZS5zdHIgKyBcIlxcblwiO1xuICByZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIi1cIiwgb3B0aW9ucy5pbmRlbnQgKyBsaW5lTm9MZW5ndGggKyAzICsgbGluZS5wb3MpICsgXCJeXFxuXCI7XG4gIGZvciAoaSA9IDE7IGkgPD0gb3B0aW9ucy5saW5lc0FmdGVyOyBpKyspIHtcbiAgICBpZiAoZm91bmRMaW5lTm8gKyBpID49IGxpbmVFbmRzLmxlbmd0aCkgYnJlYWs7XG4gICAgbGluZSA9IGdldExpbmUoXG4gICAgICBtYXJrLmJ1ZmZlcixcbiAgICAgIGxpbmVTdGFydHNbZm91bmRMaW5lTm8gKyBpXSxcbiAgICAgIGxpbmVFbmRzW2ZvdW5kTGluZU5vICsgaV0sXG4gICAgICBtYXJrLnBvc2l0aW9uIC0gKGxpbmVTdGFydHNbZm91bmRMaW5lTm9dIC0gbGluZVN0YXJ0c1tmb3VuZExpbmVObyArIGldKSxcbiAgICAgIG1heExpbmVMZW5ndGhcbiAgICApO1xuICAgIHJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiIFwiLCBvcHRpb25zLmluZGVudCkgKyBwYWRTdGFydCgobWFyay5saW5lICsgaSArIDEpLnRvU3RyaW5nKCksIGxpbmVOb0xlbmd0aCkgKyBcIiB8IFwiICsgbGluZS5zdHIgKyBcIlxcblwiO1xuICB9XG4gIHJldHVybiByZXN1bHQucmVwbGFjZSgvXFxuJC8sIFwiXCIpO1xufVxuX19uYW1lKG1ha2VTbmlwcGV0LCBcIm1ha2VTbmlwcGV0XCIpO1xudmFyIHNuaXBwZXQgPSBtYWtlU25pcHBldDtcbnZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbXG4gIFwia2luZFwiLFxuICBcIm11bHRpXCIsXG4gIFwicmVzb2x2ZVwiLFxuICBcImNvbnN0cnVjdFwiLFxuICBcImluc3RhbmNlT2ZcIixcbiAgXCJwcmVkaWNhdGVcIixcbiAgXCJyZXByZXNlbnRcIixcbiAgXCJyZXByZXNlbnROYW1lXCIsXG4gIFwiZGVmYXVsdFN0eWxlXCIsXG4gIFwic3R5bGVBbGlhc2VzXCJcbl07XG52YXIgWUFNTF9OT0RFX0tJTkRTID0gW1xuICBcInNjYWxhclwiLFxuICBcInNlcXVlbmNlXCIsXG4gIFwibWFwcGluZ1wiXG5dO1xuZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXAyKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1hcDIgIT09IG51bGwpIHtcbiAgICBPYmplY3Qua2V5cyhtYXAyKS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICBtYXAyW3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7XG4gICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShjb21waWxlU3R5bGVBbGlhc2VzLCBcImNvbXBpbGVTdHlsZUFsaWFzZXNcIik7XG5mdW5jdGlvbiBUeXBlJDEodGFnLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKCdVbmtub3duIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gICAgfVxuICB9KTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2luZCA9IG9wdGlvbnNbXCJraW5kXCJdIHx8IG51bGw7XG4gIHRoaXMucmVzb2x2ZSA9IG9wdGlvbnNbXCJyZXNvbHZlXCJdIHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnNbXCJjb25zdHJ1Y3RcIl0gfHwgZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuICB0aGlzLmluc3RhbmNlT2YgPSBvcHRpb25zW1wiaW5zdGFuY2VPZlwiXSB8fCBudWxsO1xuICB0aGlzLnByZWRpY2F0ZSA9IG9wdGlvbnNbXCJwcmVkaWNhdGVcIl0gfHwgbnVsbDtcbiAgdGhpcy5yZXByZXNlbnQgPSBvcHRpb25zW1wicmVwcmVzZW50XCJdIHx8IG51bGw7XG4gIHRoaXMucmVwcmVzZW50TmFtZSA9IG9wdGlvbnNbXCJyZXByZXNlbnROYW1lXCJdIHx8IG51bGw7XG4gIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9uc1tcImRlZmF1bHRTdHlsZVwiXSB8fCBudWxsO1xuICB0aGlzLm11bHRpID0gb3B0aW9uc1tcIm11bHRpXCJdIHx8IGZhbHNlO1xuICB0aGlzLnN0eWxlQWxpYXNlcyA9IGNvbXBpbGVTdHlsZUFsaWFzZXMob3B0aW9uc1tcInN0eWxlQWxpYXNlc1wiXSB8fCBudWxsKTtcbiAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbignVW5rbm93biBraW5kIFwiJyArIHRoaXMua2luZCArICdcIiBpcyBzcGVjaWZpZWQgZm9yIFwiJyArIHRhZyArICdcIiBZQU1MIHR5cGUuJyk7XG4gIH1cbn1cbl9fbmFtZShUeXBlJDEsIFwiVHlwZSQxXCIpO1xudmFyIHR5cGUgPSBUeXBlJDE7XG5mdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEyLCBuYW1lKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgc2NoZW1hMltuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRUeXBlKSB7XG4gICAgdmFyIG5ld0luZGV4ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICByZXN1bHQuZm9yRWFjaChmdW5jdGlvbihwcmV2aW91c1R5cGUsIHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChwcmV2aW91c1R5cGUudGFnID09PSBjdXJyZW50VHlwZS50YWcgJiYgcHJldmlvdXNUeXBlLmtpbmQgPT09IGN1cnJlbnRUeXBlLmtpbmQgJiYgcHJldmlvdXNUeXBlLm11bHRpID09PSBjdXJyZW50VHlwZS5tdWx0aSkge1xuICAgICAgICBuZXdJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0W25ld0luZGV4XSA9IGN1cnJlbnRUeXBlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShjb21waWxlTGlzdCwgXCJjb21waWxlTGlzdFwiKTtcbmZ1bmN0aW9uIGNvbXBpbGVNYXAoKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgc2NhbGFyOiB7fSxcbiAgICBzZXF1ZW5jZToge30sXG4gICAgbWFwcGluZzoge30sXG4gICAgZmFsbGJhY2s6IHt9LFxuICAgIG11bHRpOiB7XG4gICAgICBzY2FsYXI6IFtdLFxuICAgICAgc2VxdWVuY2U6IFtdLFxuICAgICAgbWFwcGluZzogW10sXG4gICAgICBmYWxsYmFjazogW11cbiAgICB9XG4gIH0sIGluZGV4LCBsZW5ndGg7XG4gIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGUyKSB7XG4gICAgaWYgKHR5cGUyLm11bHRpKSB7XG4gICAgICByZXN1bHQubXVsdGlbdHlwZTIua2luZF0ucHVzaCh0eXBlMik7XG4gICAgICByZXN1bHQubXVsdGlbXCJmYWxsYmFja1wiXS5wdXNoKHR5cGUyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3R5cGUyLmtpbmRdW3R5cGUyLnRhZ10gPSByZXN1bHRbXCJmYWxsYmFja1wiXVt0eXBlMi50YWddID0gdHlwZTI7XG4gICAgfVxuICB9XG4gIF9fbmFtZShjb2xsZWN0VHlwZSwgXCJjb2xsZWN0VHlwZVwiKTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgYXJndW1lbnRzW2luZGV4XS5mb3JFYWNoKGNvbGxlY3RUeXBlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKGNvbXBpbGVNYXAsIFwiY29tcGlsZU1hcFwiKTtcbmZ1bmN0aW9uIFNjaGVtYSQxKGRlZmluaXRpb24pIHtcbiAgcmV0dXJuIHRoaXMuZXh0ZW5kKGRlZmluaXRpb24pO1xufVxuX19uYW1lKFNjaGVtYSQxLCBcIlNjaGVtYSQxXCIpO1xuU2NoZW1hJDEucHJvdG90eXBlLmV4dGVuZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZXh0ZW5kMihkZWZpbml0aW9uKSB7XG4gIHZhciBpbXBsaWNpdCA9IFtdO1xuICB2YXIgZXhwbGljaXQgPSBbXTtcbiAgaWYgKGRlZmluaXRpb24gaW5zdGFuY2VvZiB0eXBlKSB7XG4gICAgZXhwbGljaXQucHVzaChkZWZpbml0aW9uKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlZmluaXRpb24pKSB7XG4gICAgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbik7XG4gIH0gZWxzZSBpZiAoZGVmaW5pdGlvbiAmJiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uLmltcGxpY2l0KSB8fCBBcnJheS5pc0FycmF5KGRlZmluaXRpb24uZXhwbGljaXQpKSkge1xuICAgIGlmIChkZWZpbml0aW9uLmltcGxpY2l0KSBpbXBsaWNpdCA9IGltcGxpY2l0LmNvbmNhdChkZWZpbml0aW9uLmltcGxpY2l0KTtcbiAgICBpZiAoZGVmaW5pdGlvbi5leHBsaWNpdCkgZXhwbGljaXQgPSBleHBsaWNpdC5jb25jYXQoZGVmaW5pdGlvbi5leHBsaWNpdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSlcIik7XG4gIH1cbiAgaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC5cIik7XG4gICAgfVxuICAgIGlmICh0eXBlJDEubG9hZEtpbmQgJiYgdHlwZSQxLmxvYWRLaW5kICE9PSBcInNjYWxhclwiKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZSQxLm11bHRpKSB7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC5cIik7XG4gICAgfVxuICB9KTtcbiAgZXhwbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlJDEpIHtcbiAgICBpZiAoISh0eXBlJDEgaW5zdGFuY2VvZiB0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC5cIik7XG4gICAgfVxuICB9KTtcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUoU2NoZW1hJDEucHJvdG90eXBlKTtcbiAgcmVzdWx0LmltcGxpY2l0ID0gKHRoaXMuaW1wbGljaXQgfHwgW10pLmNvbmNhdChpbXBsaWNpdCk7XG4gIHJlc3VsdC5leHBsaWNpdCA9ICh0aGlzLmV4cGxpY2l0IHx8IFtdKS5jb25jYXQoZXhwbGljaXQpO1xuICByZXN1bHQuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHJlc3VsdCwgXCJpbXBsaWNpdFwiKTtcbiAgcmVzdWx0LmNvbXBpbGVkRXhwbGljaXQgPSBjb21waWxlTGlzdChyZXN1bHQsIFwiZXhwbGljaXRcIik7XG4gIHJlc3VsdC5jb21waWxlZFR5cGVNYXAgPSBjb21waWxlTWFwKHJlc3VsdC5jb21waWxlZEltcGxpY2l0LCByZXN1bHQuY29tcGlsZWRFeHBsaWNpdCk7XG4gIHJldHVybiByZXN1bHQ7XG59LCBcImV4dGVuZFwiKTtcbnZhciBzY2hlbWEgPSBTY2hlbWEkMTtcbnZhciBzdHIgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOnN0clwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIGNvbnN0cnVjdDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogXCJcIjtcbiAgfSwgXCJjb25zdHJ1Y3RcIilcbn0pO1xudmFyIHNlcSA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6c2VxXCIsIHtcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICBjb25zdHJ1Y3Q6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdO1xuICB9LCBcImNvbnN0cnVjdFwiKVxufSk7XG52YXIgbWFwID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjptYXBcIiwge1xuICBraW5kOiBcIm1hcHBpbmdcIixcbiAgY29uc3RydWN0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTtcbiAgfSwgXCJjb25zdHJ1Y3RcIilcbn0pO1xudmFyIGZhaWxzYWZlID0gbmV3IHNjaGVtYSh7XG4gIGV4cGxpY2l0OiBbXG4gICAgc3RyLFxuICAgIHNlcSxcbiAgICBtYXBcbiAgXVxufSk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aDtcbiAgcmV0dXJuIG1heCA9PT0gMSAmJiBkYXRhID09PSBcIn5cIiB8fCBtYXggPT09IDQgJiYgKGRhdGEgPT09IFwibnVsbFwiIHx8IGRhdGEgPT09IFwiTnVsbFwiIHx8IGRhdGEgPT09IFwiTlVMTFwiKTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbE51bGwsIFwicmVzb2x2ZVlhbWxOdWxsXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuX19uYW1lKGNvbnN0cnVjdFlhbWxOdWxsLCBcImNvbnN0cnVjdFlhbWxOdWxsXCIpO1xuZnVuY3Rpb24gaXNOdWxsKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09PSBudWxsO1xufVxuX19uYW1lKGlzTnVsbCwgXCJpc051bGxcIik7XG52YXIgX251bGwgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOm51bGxcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIHByZWRpY2F0ZTogaXNOdWxsLFxuICByZXByZXNlbnQ6IHtcbiAgICBjYW5vbmljYWw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJ+XCI7XG4gICAgfSwgXCJjYW5vbmljYWxcIiksXG4gICAgbG93ZXJjYXNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIH0sIFwibG93ZXJjYXNlXCIpLFxuICAgIHVwcGVyY2FzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIk5VTExcIjtcbiAgICB9LCBcInVwcGVyY2FzZVwiKSxcbiAgICBjYW1lbGNhc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJOdWxsXCI7XG4gICAgfSwgXCJjYW1lbGNhc2VcIiksXG4gICAgZW1wdHk6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9LCBcImVtcHR5XCIpXG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIlxufSk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbEJvb2xlYW4oZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGg7XG4gIHJldHVybiBtYXggPT09IDQgJiYgKGRhdGEgPT09IFwidHJ1ZVwiIHx8IGRhdGEgPT09IFwiVHJ1ZVwiIHx8IGRhdGEgPT09IFwiVFJVRVwiKSB8fCBtYXggPT09IDUgJiYgKGRhdGEgPT09IFwiZmFsc2VcIiB8fCBkYXRhID09PSBcIkZhbHNlXCIgfHwgZGF0YSA9PT0gXCJGQUxTRVwiKTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbEJvb2xlYW4sIFwicmVzb2x2ZVlhbWxCb29sZWFuXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YSkge1xuICByZXR1cm4gZGF0YSA9PT0gXCJ0cnVlXCIgfHwgZGF0YSA9PT0gXCJUcnVlXCIgfHwgZGF0YSA9PT0gXCJUUlVFXCI7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbEJvb2xlYW4sIFwiY29uc3RydWN0WWFtbEJvb2xlYW5cIik7XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IEJvb2xlYW5dXCI7XG59XG5fX25hbWUoaXNCb29sZWFuLCBcImlzQm9vbGVhblwiKTtcbnZhciBib29sID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sXCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCb29sZWFuLFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLFxuICBwcmVkaWNhdGU6IGlzQm9vbGVhbixcbiAgcmVwcmVzZW50OiB7XG4gICAgbG93ZXJjYXNlOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIH0sIFwibG93ZXJjYXNlXCIpLFxuICAgIHVwcGVyY2FzZTogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPyBcIlRSVUVcIiA6IFwiRkFMU0VcIjtcbiAgICB9LCBcInVwcGVyY2FzZVwiKSxcbiAgICBjYW1lbGNhc2U6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID8gXCJUcnVlXCIgOiBcIkZhbHNlXCI7XG4gICAgfSwgXCJjYW1lbGNhc2VcIilcbiAgfSxcbiAgZGVmYXVsdFN0eWxlOiBcImxvd2VyY2FzZVwiXG59KTtcbmZ1bmN0aW9uIGlzSGV4Q29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTcgfHwgNjUgPD0gYyAmJiBjIDw9IDcwIHx8IDk3IDw9IGMgJiYgYyA8PSAxMDI7XG59XG5fX25hbWUoaXNIZXhDb2RlLCBcImlzSGV4Q29kZVwiKTtcbmZ1bmN0aW9uIGlzT2N0Q29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTU7XG59XG5fX25hbWUoaXNPY3RDb2RlLCBcImlzT2N0Q29kZVwiKTtcbmZ1bmN0aW9uIGlzRGVjQ29kZShjKSB7XG4gIHJldHVybiA0OCA8PSBjICYmIGMgPD0gNTc7XG59XG5fX25hbWUoaXNEZWNDb2RlLCBcImlzRGVjQ29kZVwiKTtcbmZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBtYXggPSBkYXRhLmxlbmd0aCwgaW5kZXggPSAwLCBoYXNEaWdpdHMgPSBmYWxzZSwgY2g7XG4gIGlmICghbWF4KSByZXR1cm4gZmFsc2U7XG4gIGNoID0gZGF0YVtpbmRleF07XG4gIGlmIChjaCA9PT0gXCItXCIgfHwgY2ggPT09IFwiK1wiKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG4gIGlmIChjaCA9PT0gXCIwXCIpIHtcbiAgICBpZiAoaW5kZXggKyAxID09PSBtYXgpIHJldHVybiB0cnVlO1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcbiAgICBpZiAoY2ggPT09IFwiYlwiKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCJfXCIpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY2ggIT09IFwiMFwiICYmIGNoICE9PSBcIjFcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gXCJfXCI7XG4gICAgfVxuICAgIGlmIChjaCA9PT0gXCJ4XCIpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKGNoID09PSBcIl9cIikgY29udGludWU7XG4gICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSBcIl9cIjtcbiAgICB9XG4gICAgaWYgKGNoID09PSBcIm9cIikge1xuICAgICAgaW5kZXgrKztcbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09IFwiX1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cbiAgfVxuICBpZiAoY2ggPT09IFwiX1wiKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgIGNoID0gZGF0YVtpbmRleF07XG4gICAgaWYgKGNoID09PSBcIl9cIikgY29udGludWU7XG4gICAgaWYgKCFpc0RlY0NvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWhhc0RpZ2l0cyB8fCBjaCA9PT0gXCJfXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUocmVzb2x2ZVlhbWxJbnRlZ2VyLCBcInJlc29sdmVZYW1sSW50ZWdlclwiKTtcbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxJbnRlZ2VyKGRhdGEpIHtcbiAgdmFyIHZhbHVlID0gZGF0YSwgc2lnbiA9IDEsIGNoO1xuICBpZiAodmFsdWUuaW5kZXhPZihcIl9cIikgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9fL2csIFwiXCIpO1xuICB9XG4gIGNoID0gdmFsdWVbMF07XG4gIGlmIChjaCA9PT0gXCItXCIgfHwgY2ggPT09IFwiK1wiKSB7XG4gICAgaWYgKGNoID09PSBcIi1cIikgc2lnbiA9IC0xO1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgY2ggPSB2YWx1ZVswXTtcbiAgfVxuICBpZiAodmFsdWUgPT09IFwiMFwiKSByZXR1cm4gMDtcbiAgaWYgKGNoID09PSBcIjBcIikge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJiXCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDIpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJ4XCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDE2KTtcbiAgICBpZiAodmFsdWVbMV0gPT09IFwib1wiKSByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCA4KTtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbEludGVnZXIsIFwiY29uc3RydWN0WWFtbEludGVnZXJcIik7XG5mdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IE51bWJlcl1cIiAmJiAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpO1xufVxuX19uYW1lKGlzSW50ZWdlciwgXCJpc0ludGVnZXJcIik7XG52YXIgaW50ID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEludGVnZXIsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICBiaW5hcnk6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID49IDAgPyBcIjBiXCIgKyBvYmoudG9TdHJpbmcoMikgOiBcIi0wYlwiICsgb2JqLnRvU3RyaW5nKDIpLnNsaWNlKDEpO1xuICAgIH0sIFwiYmluYXJ5XCIpLFxuICAgIG9jdGFsOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA+PSAwID8gXCIwb1wiICsgb2JqLnRvU3RyaW5nKDgpIDogXCItMG9cIiArIG9iai50b1N0cmluZyg4KS5zbGljZSgxKTtcbiAgICB9LCBcIm9jdGFsXCIpLFxuICAgIGRlY2ltYWw6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTtcbiAgICB9LCBcImRlY2ltYWxcIiksXG4gICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICAgIGhleGFkZWNpbWFsOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA+PSAwID8gXCIweFwiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogXCItMHhcIiArIG9iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKTtcbiAgICB9LCBcImhleGFkZWNpbWFsXCIpXG4gIH0sXG4gIGRlZmF1bHRTdHlsZTogXCJkZWNpbWFsXCIsXG4gIHN0eWxlQWxpYXNlczoge1xuICAgIGJpbmFyeTogWzIsIFwiYmluXCJdLFxuICAgIG9jdGFsOiBbOCwgXCJvY3RcIl0sXG4gICAgZGVjaW1hbDogWzEwLCBcImRlY1wiXSxcbiAgICBoZXhhZGVjaW1hbDogWzE2LCBcImhleFwiXVxuICB9XG59KTtcbnZhciBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICAvLyAyLjVlNCwgMi41IGFuZCBpbnRlZ2Vyc1xuICBcIl4oPzpbLStdPyg/OlswLTldWzAtOV9dKikoPzpcXFxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcXFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFxcXC4oPzppbmZ8SW5mfElORil8XFxcXC4oPzpuYW58TmFOfE5BTikpJFwiXG4pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxGbG9hdChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHwgLy8gUXVpY2sgaGFjayB0byBub3QgYWxsb3cgaW50ZWdlcnMgZW5kIHdpdGggYF9gXG4gIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWRcbiAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSBcIl9cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbEZsb2F0LCBcInJlc29sdmVZYW1sRmxvYXRcIik7XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkge1xuICB2YXIgdmFsdWUsIHNpZ247XG4gIHZhbHVlID0gZGF0YS5yZXBsYWNlKC9fL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHNpZ24gPSB2YWx1ZVswXSA9PT0gXCItXCIgPyAtMSA6IDE7XG4gIGlmIChcIistXCIuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkge1xuICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBcIi5pbmZcIikge1xuICAgIHJldHVybiBzaWduID09PSAxID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIi5uYW5cIikge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlLCAxMCk7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbEZsb2F0LCBcImNvbnN0cnVjdFlhbWxGbG9hdFwiKTtcbnZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvO1xuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHtcbiAgdmFyIHJlcztcbiAgaWYgKGlzTmFOKG9iamVjdCkpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5uYW5cIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLk5BTlwiO1xuICAgICAgY2FzZSBcImNhbWVsY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuTmFOXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBcImxvd2VyY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuaW5mXCI7XG4gICAgICBjYXNlIFwidXBwZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5JTkZcIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLkluZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgXCJsb3dlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5pbmZcIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5JTkZcIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5JbmZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHtcbiAgICByZXR1cm4gXCItMC4wXCI7XG4gIH1cbiAgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTtcbiAgcmV0dXJuIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QudGVzdChyZXMpID8gcmVzLnJlcGxhY2UoXCJlXCIsIFwiLmVcIikgOiByZXM7XG59XG5fX25hbWUocmVwcmVzZW50WWFtbEZsb2F0LCBcInJlcHJlc2VudFlhbWxGbG9hdFwiKTtcbmZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IE51bWJlcl1cIiAmJiAob2JqZWN0ICUgMSAhPT0gMCB8fCBjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSk7XG59XG5fX25hbWUoaXNGbG9hdCwgXCJpc0Zsb2F0XCIpO1xudmFyIGZsb2F0ID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBwcmVkaWNhdGU6IGlzRmxvYXQsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6IFwibG93ZXJjYXNlXCJcbn0pO1xudmFyIGpzb24gPSBmYWlsc2FmZS5leHRlbmQoe1xuICBpbXBsaWNpdDogW1xuICAgIF9udWxsLFxuICAgIGJvb2wsXG4gICAgaW50LFxuICAgIGZsb2F0XG4gIF1cbn0pO1xudmFyIGNvcmUgPSBqc29uO1xudmFyIFlBTUxfREFURV9SRUdFWFAgPSBuZXcgUmVnRXhwKFxuICBcIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkXCJcbik7XG52YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgXCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFxcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXFxcLihbMC05XSopKT8oPzpbIFxcXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JFwiXG4pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKHJlc29sdmVZYW1sVGltZXN0YW1wLCBcInJlc29sdmVZYW1sVGltZXN0YW1wXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7XG4gIHZhciBtYXRjaCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uID0gMCwgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7XG4gIG1hdGNoID0gWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpO1xuICBpZiAobWF0Y2ggPT09IG51bGwpIG1hdGNoID0gWUFNTF9USU1FU1RBTVBfUkVHRVhQLmV4ZWMoZGF0YSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiRGF0ZSByZXNvbHZlIGVycm9yXCIpO1xuICB5ZWFyID0gK21hdGNoWzFdO1xuICBtb250aCA9ICttYXRjaFsyXSAtIDE7XG4gIGRheSA9ICttYXRjaFszXTtcbiAgaWYgKCFtYXRjaFs0XSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5KSk7XG4gIH1cbiAgaG91ciA9ICttYXRjaFs0XTtcbiAgbWludXRlID0gK21hdGNoWzVdO1xuICBzZWNvbmQgPSArbWF0Y2hbNl07XG4gIGlmIChtYXRjaFs3XSkge1xuICAgIGZyYWN0aW9uID0gbWF0Y2hbN10uc2xpY2UoMCwgMyk7XG4gICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHtcbiAgICAgIGZyYWN0aW9uICs9IFwiMFwiO1xuICAgIH1cbiAgICBmcmFjdGlvbiA9ICtmcmFjdGlvbjtcbiAgfVxuICBpZiAobWF0Y2hbOV0pIHtcbiAgICB0el9ob3VyID0gK21hdGNoWzEwXTtcbiAgICB0el9taW51dGUgPSArKG1hdGNoWzExXSB8fCAwKTtcbiAgICBkZWx0YSA9ICh0el9ob3VyICogNjAgKyB0el9taW51dGUpICogNmU0O1xuICAgIGlmIChtYXRjaFs5XSA9PT0gXCItXCIpIGRlbHRhID0gLWRlbHRhO1xuICB9XG4gIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTtcbiAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7XG4gIHJldHVybiBkYXRlO1xufVxuX19uYW1lKGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsIFwiY29uc3RydWN0WWFtbFRpbWVzdGFtcFwiKTtcbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbn1cbl9fbmFtZShyZXByZXNlbnRZYW1sVGltZXN0YW1wLCBcInJlcHJlc2VudFlhbWxUaW1lc3RhbXBcIik7XG52YXIgdGltZXN0YW1wID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXBcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcCxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sVGltZXN0YW1wLFxuICBpbnN0YW5jZU9mOiBEYXRlLFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXBcbn0pO1xuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7XG4gIHJldHVybiBkYXRhID09PSBcIjw8XCIgfHwgZGF0YSA9PT0gbnVsbDtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbE1lcmdlLCBcInJlc29sdmVZYW1sTWVyZ2VcIik7XG52YXIgbWVyZ2UgPSBuZXcgdHlwZShcInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlXCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZVxufSk7XG52YXIgQkFTRTY0X01BUCA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHJcIjtcbmZ1bmN0aW9uIHJlc29sdmVZYW1sQmluYXJ5KGRhdGEpIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgdmFyIGNvZGUsIGlkeCwgYml0bGVuID0gMCwgbWF4ID0gZGF0YS5sZW5ndGgsIG1hcDIgPSBCQVNFNjRfTUFQO1xuICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBjb2RlID0gbWFwMi5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpO1xuICAgIGlmIChjb2RlID4gNjQpIGNvbnRpbnVlO1xuICAgIGlmIChjb2RlIDwgMCkgcmV0dXJuIGZhbHNlO1xuICAgIGJpdGxlbiArPSA2O1xuICB9XG4gIHJldHVybiBiaXRsZW4gJSA4ID09PSAwO1xufVxuX19uYW1lKHJlc29sdmVZYW1sQmluYXJ5LCBcInJlc29sdmVZYW1sQmluYXJ5XCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJpbmFyeShkYXRhKSB7XG4gIHZhciBpZHgsIHRhaWxiaXRzLCBpbnB1dCA9IGRhdGEucmVwbGFjZSgvW1xcclxcbj1dL2csIFwiXCIpLCBtYXggPSBpbnB1dC5sZW5ndGgsIG1hcDIgPSBCQVNFNjRfTUFQLCBiaXRzID0gMCwgcmVzdWx0ID0gW107XG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkge1xuICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxNiAmIDI1NSk7XG4gICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpO1xuICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7XG4gICAgfVxuICAgIGJpdHMgPSBiaXRzIDw8IDYgfCBtYXAyLmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpO1xuICB9XG4gIHRhaWxiaXRzID0gbWF4ICUgNCAqIDY7XG4gIGlmICh0YWlsYml0cyA9PT0gMCkge1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpO1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7XG4gICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7XG4gIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7XG4gICAgcmVzdWx0LnB1c2goYml0cyA+PiAxMCAmIDI1NSk7XG4gICAgcmVzdWx0LnB1c2goYml0cyA+PiAyICYgMjU1KTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHtcbiAgICByZXN1bHQucHVzaChiaXRzID4+IDQgJiAyNTUpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpO1xufVxuX19uYW1lKGNvbnN0cnVjdFlhbWxCaW5hcnksIFwiY29uc3RydWN0WWFtbEJpbmFyeVwiKTtcbmZ1bmN0aW9uIHJlcHJlc2VudFlhbWxCaW5hcnkob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBcIlwiLCBiaXRzID0gMCwgaWR4LCB0YWlsLCBtYXggPSBvYmplY3QubGVuZ3RoLCBtYXAyID0gQkFTRTY0X01BUDtcbiAgZm9yIChpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7XG4gICAgaWYgKGlkeCAlIDMgPT09IDAgJiYgaWR4KSB7XG4gICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDE4ICYgNjNdO1xuICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMiAmIDYzXTtcbiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gNiAmIDYzXTtcbiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgJiA2M107XG4gICAgfVxuICAgIGJpdHMgPSAoYml0cyA8PCA4KSArIG9iamVjdFtpZHhdO1xuICB9XG4gIHRhaWwgPSBtYXggJSAzO1xuICBpZiAodGFpbCA9PT0gMCkge1xuICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gMTggJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMiAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDYgJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyAmIDYzXTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMCAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDQgJiA2M107XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA8PCAyICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyWzY0XTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7XG4gICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAyICYgNjNdO1xuICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPDwgNCAmIDYzXTtcbiAgICByZXN1bHQgKz0gbWFwMls2NF07XG4gICAgcmVzdWx0ICs9IG1hcDJbNjRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUocmVwcmVzZW50WWFtbEJpbmFyeSwgXCJyZXByZXNlbnRZYW1sQmluYXJ5XCIpO1xuZnVuY3Rpb24gaXNCaW5hcnkob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCI7XG59XG5fX25hbWUoaXNCaW5hcnksIFwiaXNCaW5hcnlcIik7XG52YXIgYmluYXJ5ID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnlcIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LFxuICBwcmVkaWNhdGU6IGlzQmluYXJ5LFxuICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnlcbn0pO1xudmFyIF9oYXNPd25Qcm9wZXJ0eSQzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfdG9TdHJpbmckMiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5mdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4LCBsZW5ndGgsIHBhaXIsIHBhaXJLZXksIHBhaXJIYXNLZXksIG9iamVjdCA9IGRhdGE7XG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIHBhaXJIYXNLZXkgPSBmYWxzZTtcbiAgICBpZiAoX3RvU3RyaW5nJDIuY2FsbChwYWlyKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAocGFpcktleSBpbiBwYWlyKSB7XG4gICAgICBpZiAoX2hhc093blByb3BlcnR5JDMuY2FsbChwYWlyLCBwYWlyS2V5KSkge1xuICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwYWlySGFzS2V5KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpIG9iamVjdEtleXMucHVzaChwYWlyS2V5KTtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbE9tYXAsIFwicmVzb2x2ZVlhbWxPbWFwXCIpO1xuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTtcbn1cbl9fbmFtZShjb25zdHJ1Y3RZYW1sT21hcCwgXCJjb25zdHJ1Y3RZYW1sT21hcFwiKTtcbnZhciBvbWFwID0gbmV3IHR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXCIsIHtcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXBcbn0pO1xudmFyIF90b1N0cmluZyQxID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCBwYWlyLCBrZXlzLCByZXN1bHQsIG9iamVjdCA9IGRhdGE7XG4gIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpciA9IG9iamVjdFtpbmRleF07XG4gICAgaWYgKF90b1N0cmluZyQxLmNhbGwocGFpcikgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHJldHVybiBmYWxzZTtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgcmVzdWx0W2luZGV4XSA9IFtrZXlzWzBdLCBwYWlyW2tleXNbMF1dXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZXNvbHZlWWFtbFBhaXJzLCBcInJlc29sdmVZYW1sUGFpcnNcIik7XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkge1xuICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICB2YXIgaW5kZXgsIGxlbmd0aCwgcGFpciwga2V5cywgcmVzdWx0LCBvYmplY3QgPSBkYXRhO1xuICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7XG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXIgPSBvYmplY3RbaW5kZXhdO1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcbiAgICByZXN1bHRbaW5kZXhdID0gW2tleXNbMF0sIHBhaXJba2V5c1swXV1dO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoY29uc3RydWN0WWFtbFBhaXJzLCBcImNvbnN0cnVjdFlhbWxQYWlyc1wiKTtcbnZhciBwYWlycyA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcIiwge1xuICBraW5kOiBcInNlcXVlbmNlXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsXG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzXG59KTtcbnZhciBfaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiByZXNvbHZlWWFtbFNldChkYXRhKSB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIGtleSwgb2JqZWN0ID0gZGF0YTtcbiAgZm9yIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eSQyLmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICBpZiAob2JqZWN0W2tleV0gIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUocmVzb2x2ZVlhbWxTZXQsIFwicmVzb2x2ZVlhbWxTZXRcIik7XG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5fX25hbWUoY29uc3RydWN0WWFtbFNldCwgXCJjb25zdHJ1Y3RZYW1sU2V0XCIpO1xudmFyIHNldCA9IG5ldyB0eXBlKFwidGFnOnlhbWwub3JnLDIwMDI6c2V0XCIsIHtcbiAga2luZDogXCJtYXBwaW5nXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxTZXRcbn0pO1xudmFyIF9kZWZhdWx0ID0gY29yZS5leHRlbmQoe1xuICBpbXBsaWNpdDogW1xuICAgIHRpbWVzdGFtcCxcbiAgICBtZXJnZVxuICBdLFxuICBleHBsaWNpdDogW1xuICAgIGJpbmFyeSxcbiAgICBvbWFwLFxuICAgIHBhaXJzLFxuICAgIHNldFxuICBdXG59KTtcbnZhciBfaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgQ09OVEVYVF9GTE9XX0lOID0gMTtcbnZhciBDT05URVhUX0ZMT1dfT1VUID0gMjtcbnZhciBDT05URVhUX0JMT0NLX0lOID0gMztcbnZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7XG52YXIgQ0hPTVBJTkdfQ0xJUCA9IDE7XG52YXIgQ0hPTVBJTkdfU1RSSVAgPSAyO1xudmFyIENIT01QSU5HX0tFRVAgPSAzO1xudmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSA9IC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbnZhciBQQVRURVJOX05PTl9BU0NJSV9MSU5FX0JSRUFLUyA9IC9bXFx4ODVcXHUyMDI4XFx1MjAyOV0vO1xudmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTID0gL1ssXFxbXFxdXFx7XFx9XS87XG52YXIgUEFUVEVSTl9UQUdfSEFORExFID0gL14oPzohfCEhfCFbYS16XFwtXSshKSQvaTtcbnZhciBQQVRURVJOX1RBR19VUkkgPSAvXig/OiF8W14sXFxbXFxdXFx7XFx9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelxcLSM7XFwvXFw/OkAmPVxcK1xcJCxfXFwuIX5cXConXFwoXFwpXFxbXFxdXSkqJC9pO1xuZnVuY3Rpb24gX2NsYXNzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5fX25hbWUoX2NsYXNzLCBcIl9jbGFzc1wiKTtcbmZ1bmN0aW9uIGlzX0VPTChjKSB7XG4gIHJldHVybiBjID09PSAxMCB8fCBjID09PSAxMztcbn1cbl9fbmFtZShpc19FT0wsIFwiaXNfRU9MXCIpO1xuZnVuY3Rpb24gaXNfV0hJVEVfU1BBQ0UoYykge1xuICByZXR1cm4gYyA9PT0gOSB8fCBjID09PSAzMjtcbn1cbl9fbmFtZShpc19XSElURV9TUEFDRSwgXCJpc19XSElURV9TUEFDRVwiKTtcbmZ1bmN0aW9uIGlzX1dTX09SX0VPTChjKSB7XG4gIHJldHVybiBjID09PSA5IHx8IGMgPT09IDMyIHx8IGMgPT09IDEwIHx8IGMgPT09IDEzO1xufVxuX19uYW1lKGlzX1dTX09SX0VPTCwgXCJpc19XU19PUl9FT0xcIik7XG5mdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjKSB7XG4gIHJldHVybiBjID09PSA0NCB8fCBjID09PSA5MSB8fCBjID09PSA5MyB8fCBjID09PSAxMjMgfHwgYyA9PT0gMTI1O1xufVxuX19uYW1lKGlzX0ZMT1dfSU5ESUNBVE9SLCBcImlzX0ZMT1dfSU5ESUNBVE9SXCIpO1xuZnVuY3Rpb24gZnJvbUhleENvZGUoYykge1xuICB2YXIgbGM7XG4gIGlmICg0OCA8PSBjICYmIGMgPD0gNTcpIHtcbiAgICByZXR1cm4gYyAtIDQ4O1xuICB9XG4gIGxjID0gYyB8IDMyO1xuICBpZiAoOTcgPD0gbGMgJiYgbGMgPD0gMTAyKSB7XG4gICAgcmV0dXJuIGxjIC0gOTcgKyAxMDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5fX25hbWUoZnJvbUhleENvZGUsIFwiZnJvbUhleENvZGVcIik7XG5mdW5jdGlvbiBlc2NhcGVkSGV4TGVuKGMpIHtcbiAgaWYgKGMgPT09IDEyMCkge1xuICAgIHJldHVybiAyO1xuICB9XG4gIGlmIChjID09PSAxMTcpIHtcbiAgICByZXR1cm4gNDtcbiAgfVxuICBpZiAoYyA9PT0gODUpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICByZXR1cm4gMDtcbn1cbl9fbmFtZShlc2NhcGVkSGV4TGVuLCBcImVzY2FwZWRIZXhMZW5cIik7XG5mdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYykge1xuICBpZiAoNDggPD0gYyAmJiBjIDw9IDU3KSB7XG4gICAgcmV0dXJuIGMgLSA0ODtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5fX25hbWUoZnJvbURlY2ltYWxDb2RlLCBcImZyb21EZWNpbWFsQ29kZVwiKTtcbmZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGMpIHtcbiAgcmV0dXJuIGMgPT09IDQ4ID8gXCJcXDBcIiA6IGMgPT09IDk3ID8gXCJcXHgwN1wiIDogYyA9PT0gOTggPyBcIlxcYlwiIDogYyA9PT0gMTE2ID8gXCJcdFwiIDogYyA9PT0gOSA/IFwiXHRcIiA6IGMgPT09IDExMCA/IFwiXFxuXCIgOiBjID09PSAxMTggPyBcIlxcdlwiIDogYyA9PT0gMTAyID8gXCJcXGZcIiA6IGMgPT09IDExNCA/IFwiXFxyXCIgOiBjID09PSAxMDEgPyBcIlxceDFCXCIgOiBjID09PSAzMiA/IFwiIFwiIDogYyA9PT0gMzQgPyAnXCInIDogYyA9PT0gNDcgPyBcIi9cIiA6IGMgPT09IDkyID8gXCJcXFxcXCIgOiBjID09PSA3OCA/IFwiXFx4ODVcIiA6IGMgPT09IDk1ID8gXCJcXHhBMFwiIDogYyA9PT0gNzYgPyBcIlxcdTIwMjhcIiA6IGMgPT09IDgwID8gXCJcXHUyMDI5XCIgOiBcIlwiO1xufVxuX19uYW1lKHNpbXBsZUVzY2FwZVNlcXVlbmNlLCBcInNpbXBsZUVzY2FwZVNlcXVlbmNlXCIpO1xuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYykge1xuICBpZiAoYyA8PSA2NTUzNSkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgIChjIC0gNjU1MzYgPj4gMTApICsgNTUyOTYsXG4gICAgKGMgLSA2NTUzNiAmIDEwMjMpICsgNTYzMjBcbiAgKTtcbn1cbl9fbmFtZShjaGFyRnJvbUNvZGVwb2ludCwgXCJjaGFyRnJvbUNvZGVwb2ludFwiKTtcbnZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpO1xudmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpO1xuZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gIHNpbXBsZUVzY2FwZUNoZWNrW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSkgPyAxIDogMDtcbiAgc2ltcGxlRXNjYXBlTWFwW2ldID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaSk7XG59XG52YXIgaTtcbmZ1bmN0aW9uIFN0YXRlJDEoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICB0aGlzLmZpbGVuYW1lID0gb3B0aW9uc1tcImZpbGVuYW1lXCJdIHx8IG51bGw7XG4gIHRoaXMuc2NoZW1hID0gb3B0aW9uc1tcInNjaGVtYVwiXSB8fCBfZGVmYXVsdDtcbiAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zW1wib25XYXJuaW5nXCJdIHx8IG51bGw7XG4gIHRoaXMubGVnYWN5ID0gb3B0aW9uc1tcImxlZ2FjeVwiXSB8fCBmYWxzZTtcbiAgdGhpcy5qc29uID0gb3B0aW9uc1tcImpzb25cIl0gfHwgZmFsc2U7XG4gIHRoaXMubGlzdGVuZXIgPSBvcHRpb25zW1wibGlzdGVuZXJcIl0gfHwgbnVsbDtcbiAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDtcbiAgdGhpcy50eXBlTWFwID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwO1xuICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgdGhpcy5wb3NpdGlvbiA9IDA7XG4gIHRoaXMubGluZSA9IDA7XG4gIHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgdGhpcy5saW5lSW5kZW50ID0gMDtcbiAgdGhpcy5maXJzdFRhYkluTGluZSA9IC0xO1xuICB0aGlzLmRvY3VtZW50cyA9IFtdO1xufVxuX19uYW1lKFN0YXRlJDEsIFwiU3RhdGUkMVwiKTtcbmZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdmFyIG1hcmsgPSB7XG4gICAgbmFtZTogc3RhdGUuZmlsZW5hbWUsXG4gICAgYnVmZmVyOiBzdGF0ZS5pbnB1dC5zbGljZSgwLCAtMSksXG4gICAgLy8gb21pdCB0cmFpbGluZyBcXDBcbiAgICBwb3NpdGlvbjogc3RhdGUucG9zaXRpb24sXG4gICAgbGluZTogc3RhdGUubGluZSxcbiAgICBjb2x1bW46IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0XG4gIH07XG4gIG1hcmsuc25pcHBldCA9IHNuaXBwZXQobWFyayk7XG4gIHJldHVybiBuZXcgZXhjZXB0aW9uKG1lc3NhZ2UsIG1hcmspO1xufVxuX19uYW1lKGdlbmVyYXRlRXJyb3IsIFwiZ2VuZXJhdGVFcnJvclwiKTtcbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGUsIG1lc3NhZ2UpIHtcbiAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSk7XG59XG5fX25hbWUodGhyb3dFcnJvciwgXCJ0aHJvd0Vycm9yXCIpO1xuZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlLCBtZXNzYWdlKSB7XG4gIGlmIChzdGF0ZS5vbldhcm5pbmcpIHtcbiAgICBzdGF0ZS5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSk7XG4gIH1cbn1cbl9fbmFtZSh0aHJvd1dhcm5pbmcsIFwidGhyb3dXYXJuaW5nXCIpO1xudmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0ge1xuICBZQU1MOiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcbiAgICB2YXIgbWF0Y2gsIG1ham9yLCBtaW5vcjtcbiAgICBpZiAoc3RhdGUudmVyc2lvbiAhPT0gbnVsbCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50XCIpO1xuICAgIH1cbiAgICBtYXRjaCA9IC9eKFswLTldKylcXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSk7XG4gICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlXCIpO1xuICAgIH1cbiAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuICAgIGlmIChtYWpvciAhPT0gMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFwiKTtcbiAgICB9XG4gICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07XG4gICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gbWlub3IgPCAyO1xuICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikge1xuICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCBcInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcIik7XG4gICAgfVxuICB9LCBcImhhbmRsZVlhbWxEaXJlY3RpdmVcIiksXG4gIFRBRzogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHtcbiAgICB2YXIgaGFuZGxlLCBwcmVmaXg7XG4gICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHNcIik7XG4gICAgfVxuICAgIGhhbmRsZSA9IGFyZ3NbMF07XG4gICAgcHJlZml4ID0gYXJnc1sxXTtcbiAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKHN0YXRlLnRhZ01hcCwgaGFuZGxlKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yIFwiJyArIGhhbmRsZSArICdcIiB0YWcgaGFuZGxlJyk7XG4gICAgfVxuICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmVcIik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBwcmVmaXggPSBkZWNvZGVVUklDb21wb25lbnQocHJlZml4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6IFwiICsgcHJlZml4KTtcbiAgICB9XG4gICAgc3RhdGUudGFnTWFwW2hhbmRsZV0gPSBwcmVmaXg7XG4gIH0sIFwiaGFuZGxlVGFnRGlyZWN0aXZlXCIpXG59O1xuZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUsIHN0YXJ0LCBlbmQsIGNoZWNrSnNvbikge1xuICB2YXIgX3Bvc2l0aW9uLCBfbGVuZ3RoLCBfY2hhcmFjdGVyLCBfcmVzdWx0O1xuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgaWYgKGNoZWNrSnNvbikge1xuICAgICAgZm9yIChfcG9zaXRpb24gPSAwLCBfbGVuZ3RoID0gX3Jlc3VsdC5sZW5ndGg7IF9wb3NpdGlvbiA8IF9sZW5ndGg7IF9wb3NpdGlvbiArPSAxKSB7XG4gICAgICAgIF9jaGFyYWN0ZXIgPSBfcmVzdWx0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcbiAgICAgICAgaWYgKCEoX2NoYXJhY3RlciA9PT0gOSB8fCAzMiA8PSBfY2hhcmFjdGVyICYmIF9jaGFyYWN0ZXIgPD0gMTExNDExMSkpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChfcmVzdWx0KSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVyc1wiKTtcbiAgICB9XG4gICAgc3RhdGUucmVzdWx0ICs9IF9yZXN1bHQ7XG4gIH1cbn1cbl9fbmFtZShjYXB0dXJlU2VnbWVudCwgXCJjYXB0dXJlU2VnbWVudFwiKTtcbmZ1bmN0aW9uIG1lcmdlTWFwcGluZ3Moc3RhdGUsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykge1xuICB2YXIgc291cmNlS2V5cywga2V5LCBpbmRleCwgcXVhbnRpdHk7XG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlXCIpO1xuICB9XG4gIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICBmb3IgKGluZGV4ID0gMCwgcXVhbnRpdHkgPSBzb3VyY2VLZXlzLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaW5kZXhdO1xuICAgIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChkZXN0aW5hdGlvbiwga2V5KSkge1xuICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgb3ZlcnJpZGFibGVLZXlzW2tleV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuX19uYW1lKG1lcmdlTWFwcGluZ3MsIFwibWVyZ2VNYXBwaW5nc1wiKTtcbmZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIHN0YXJ0TGluZSwgc3RhcnRMaW5lU3RhcnQsIHN0YXJ0UG9zKSB7XG4gIHZhciBpbmRleCwgcXVhbnRpdHk7XG4gIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGUpKSB7XG4gICAga2V5Tm9kZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGtleU5vZGUpO1xuICAgIGZvciAoaW5kZXggPSAwLCBxdWFudGl0eSA9IGtleU5vZGUubGVuZ3RoOyBpbmRleCA8IHF1YW50aXR5OyBpbmRleCArPSAxKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlW2luZGV4XSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBrZXlOb2RlID09PSBcIm9iamVjdFwiICYmIF9jbGFzcyhrZXlOb2RlW2luZGV4XSkgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgICAga2V5Tm9kZVtpbmRleF0gPSBcIltvYmplY3QgT2JqZWN0XVwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09IFwib2JqZWN0XCIgJiYgX2NsYXNzKGtleU5vZGUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG4gICAga2V5Tm9kZSA9IFwiW29iamVjdCBPYmplY3RdXCI7XG4gIH1cbiAga2V5Tm9kZSA9IFN0cmluZyhrZXlOb2RlKTtcbiAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHtcbiAgICBfcmVzdWx0ID0ge307XG4gIH1cbiAgaWYgKGtleVRhZyA9PT0gXCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZVwiKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXggKz0gMSkge1xuICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghc3RhdGUuanNvbiAmJiAhX2hhc093blByb3BlcnR5JDEuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmIF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHtcbiAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTtcbiAgICAgIHN0YXRlLmxpbmVTdGFydCA9IHN0YXJ0TGluZVN0YXJ0IHx8IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIik7XG4gICAgfVxuICAgIGlmIChrZXlOb2RlID09PSBcIl9fcHJvdG9fX1wiKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdmFsdWVOb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdFtrZXlOb2RlXSA9IHZhbHVlTm9kZTtcbiAgICB9XG4gICAgZGVsZXRlIG92ZXJyaWRhYmxlS2V5c1trZXlOb2RlXTtcbiAgfVxuICByZXR1cm4gX3Jlc3VsdDtcbn1cbl9fbmFtZShzdG9yZU1hcHBpbmdQYWlyLCBcInN0b3JlTWFwcGluZ1BhaXJcIik7XG5mdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlKSB7XG4gIHZhciBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoID09PSAxMCkge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDEzKSB7XG4gICAgc3RhdGUucG9zaXRpb24rKztcbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDEwKSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImEgbGluZSBicmVhayBpcyBleHBlY3RlZFwiKTtcbiAgfVxuICBzdGF0ZS5saW5lICs9IDE7XG4gIHN0YXRlLmxpbmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uO1xuICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IC0xO1xufVxuX19uYW1lKHJlYWRMaW5lQnJlYWssIFwicmVhZExpbmVCcmVha1wiKTtcbmZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7XG4gIHZhciBsaW5lQnJlYWtzID0gMCwgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgaWYgKGNoID09PSA5ICYmIHN0YXRlLmZpcnN0VGFiSW5MaW5lID09PSAtMSkge1xuICAgICAgICBzdGF0ZS5maXJzdFRhYkluTGluZSA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cbiAgICBpZiAoYWxsb3dDb21tZW50cyAmJiBjaCA9PT0gMzUpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfSB3aGlsZSAoY2ggIT09IDEwICYmIGNoICE9PSAxMyAmJiBjaCAhPT0gMCk7XG4gICAgfVxuICAgIGlmIChpc19FT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBsaW5lQnJlYWtzKys7XG4gICAgICBzdGF0ZS5saW5lSW5kZW50ID0gMDtcbiAgICAgIHdoaWxlIChjaCA9PT0gMzIpIHtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2hlY2tJbmRlbnQgIT09IC0xICYmIGxpbmVCcmVha3MgIT09IDAgJiYgc3RhdGUubGluZUluZGVudCA8IGNoZWNrSW5kZW50KSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCBcImRlZmljaWVudCBpbmRlbnRhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cbl9fbmFtZShza2lwU2VwYXJhdGlvblNwYWNlLCBcInNraXBTZXBhcmF0aW9uU3BhY2VcIik7XG5mdW5jdGlvbiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7XG4gIGlmICgoY2ggPT09IDQ1IHx8IGNoID09PSA0NikgJiYgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiYgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMikpIHtcbiAgICBfcG9zaXRpb24gKz0gMztcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcbiAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZSh0ZXN0RG9jdW1lbnRTZXBhcmF0b3IsIFwidGVzdERvY3VtZW50U2VwYXJhdG9yXCIpO1xuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9IFwiIFwiO1xuICB9IGVsc2UgaWYgKGNvdW50ID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGNvdW50IC0gMSk7XG4gIH1cbn1cbl9fbmFtZSh3cml0ZUZvbGRlZExpbmVzLCBcIndyaXRlRm9sZGVkTGluZXNcIik7XG5mdW5jdGlvbiByZWFkUGxhaW5TY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQsIHdpdGhpbkZsb3dDb2xsZWN0aW9uKSB7XG4gIHZhciBwcmVjZWRpbmcsIGZvbGxvd2luZywgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoYXNQZW5kaW5nQ29udGVudCwgX2xpbmUsIF9saW5lU3RhcnQsIF9saW5lSW5kZW50LCBfa2luZCA9IHN0YXRlLmtpbmQsIF9yZXN1bHQgPSBzdGF0ZS5yZXN1bHQsIGNoO1xuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICBpZiAoaXNfV1NfT1JfRU9MKGNoKSB8fCBpc19GTE9XX0lORElDQVRPUihjaCkgfHwgY2ggPT09IDM1IHx8IGNoID09PSAzOCB8fCBjaCA9PT0gNDIgfHwgY2ggPT09IDMzIHx8IGNoID09PSAxMjQgfHwgY2ggPT09IDYyIHx8IGNoID09PSAzOSB8fCBjaCA9PT0gMzQgfHwgY2ggPT09IDM3IHx8IGNoID09PSA2NCB8fCBjaCA9PT0gOTYpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGNoID09PSA2MyB8fCBjaCA9PT0gNDUpIHtcbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSA1OCkge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gMzUpIHtcbiAgICAgIHByZWNlZGluZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gLSAxKTtcbiAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihjaCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgX2xpbmUgPSBzdGF0ZS5saW5lO1xuICAgICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCAtMSk7XG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7XG4gICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7XG4gICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBzdGF0ZS5saW5lIC0gX2xpbmUpO1xuICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgfVxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gIGlmIChzdGF0ZS5yZXN1bHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzdGF0ZS5raW5kID0gX2tpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShyZWFkUGxhaW5TY2FsYXIsIFwicmVhZFBsYWluU2NhbGFyXCIpO1xuZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2gsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzOSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGF0ZS5raW5kID0gXCJzY2FsYXJcIjtcbiAgc3RhdGUucmVzdWx0ID0gXCJcIjtcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAzOSkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgaWYgKGNoID09PSAzOSkge1xuICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuICB0aHJvd0Vycm9yKHN0YXRlLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXJcIik7XG59XG5fX25hbWUocmVhZFNpbmdsZVF1b3RlZFNjYWxhciwgXCJyZWFkU2luZ2xlUXVvdGVkU2NhbGFyXCIpO1xuZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkge1xuICB2YXIgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoZXhMZW5ndGgsIGhleFJlc3VsdCwgdG1wLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzNCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGF0ZS5raW5kID0gXCJzY2FsYXJcIjtcbiAgc3RhdGUucmVzdWx0ID0gXCJcIjtcbiAgc3RhdGUucG9zaXRpb24rKztcbiAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAzNCkge1xuICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpO1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBpZiAoaXNfRU9MKGNoKSkge1xuICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCBmYWxzZSwgbm9kZUluZGVudCk7XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoXSkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGVzY2FwZWRIZXhMZW4oY2gpKSA+IDApIHtcbiAgICAgICAgaGV4TGVuZ3RoID0gdG1wO1xuICAgICAgICBoZXhSZXN1bHQgPSAwO1xuICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHtcbiAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY2hhckZyb21Db2RlcG9pbnQoaGV4UmVzdWx0KTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5rbm93biBlc2NhcGUgc2VxdWVuY2VcIik7XG4gICAgICB9XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuICB0aHJvd0Vycm9yKHN0YXRlLCBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXJcIik7XG59XG5fX25hbWUocmVhZERvdWJsZVF1b3RlZFNjYWxhciwgXCJyZWFkRG91YmxlUXVvdGVkU2NhbGFyXCIpO1xuZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciByZWFkTmV4dCA9IHRydWUsIF9saW5lLCBfbGluZVN0YXJ0LCBfcG9zLCBfdGFnID0gc3RhdGUudGFnLCBfcmVzdWx0LCBfYW5jaG9yID0gc3RhdGUuYW5jaG9yLCBmb2xsb3dpbmcsIHRlcm1pbmF0b3IsIGlzUGFpciwgaXNFeHBsaWNpdFBhaXIsIGlzTWFwcGluZywgb3ZlcnJpZGFibGVLZXlzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIGtleU5vZGUsIGtleVRhZywgdmFsdWVOb2RlLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoID09PSA5MSkge1xuICAgIHRlcm1pbmF0b3IgPSA5MztcbiAgICBpc01hcHBpbmcgPSBmYWxzZTtcbiAgICBfcmVzdWx0ID0gW107XG4gIH0gZWxzZSBpZiAoY2ggPT09IDEyMykge1xuICAgIHRlcm1pbmF0b3IgPSAxMjU7XG4gICAgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgICBfcmVzdWx0ID0ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB3aGlsZSAoY2ggIT09IDApIHtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/IFwibWFwcGluZ1wiIDogXCJzZXF1ZW5jZVwiO1xuICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDQ0KSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHRoZSBub2RlIGNvbnRlbnQsIGJ1dCBmb3VuZCAnLCdcIik7XG4gICAgfVxuICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gZmFsc2U7XG4gICAgaWYgKGNoID09PSA2Mykge1xuICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpO1xuICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9saW5lID0gc3RhdGUubGluZTtcbiAgICBfbGluZVN0YXJ0ID0gc3RhdGUubGluZVN0YXJ0O1xuICAgIF9wb3MgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoKGlzRXhwbGljaXRQYWlyIHx8IHN0YXRlLmxpbmUgPT09IF9saW5lKSAmJiBjaCA9PT0gNTgpIHtcbiAgICAgIGlzUGFpciA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gICAgaWYgKGlzTWFwcGluZykge1xuICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7XG4gICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgbnVsbCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9saW5lU3RhcnQsIF9wb3MpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3Jlc3VsdC5wdXNoKGtleU5vZGUpO1xuICAgIH1cbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIGlmIChjaCA9PT0gNDQpIHtcbiAgICAgIHJlYWROZXh0ID0gdHJ1ZTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhZE5leHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvblwiKTtcbn1cbl9fbmFtZShyZWFkRmxvd0NvbGxlY3Rpb24sIFwicmVhZEZsb3dDb2xsZWN0aW9uXCIpO1xuZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBjYXB0dXJlU3RhcnQsIGZvbGRpbmcsIGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCwgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSwgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSwgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsIGVtcHR5TGluZXMgPSAwLCBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLCB0bXAsIGNoO1xuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICBpZiAoY2ggPT09IDEyNCkge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gNjIpIHtcbiAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoY2ggPT09IDQzIHx8IGNoID09PSA0NSkge1xuICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7XG4gICAgICAgIGNob21waW5nID0gY2ggPT09IDQzID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgaWYgKHRtcCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmVcIik7XG4gICAgICB9IGVsc2UgaWYgKCFkZXRlY3RlZEluZGVudCkge1xuICAgICAgICB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCArIHRtcCAtIDE7XG4gICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7XG4gICAgZG8ge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7XG4gICAgaWYgKGNoID09PSAzNSkge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9IHdoaWxlICghaXNfRU9MKGNoKSAmJiBjaCAhPT0gMCk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgd2hpbGUgKCghZGV0ZWN0ZWRJbmRlbnQgfHwgc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmIGNoID09PSAzMikge1xuICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cbiAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlLmxpbmVJbmRlbnQgPiB0ZXh0SW5kZW50KSB7XG4gICAgICB0ZXh0SW5kZW50ID0gc3RhdGUubGluZUluZGVudDtcbiAgICB9XG4gICAgaWYgKGlzX0VPTChjaCkpIHtcbiAgICAgIGVtcHR5TGluZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHtcbiAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGNob21waW5nID09PSBDSE9NUElOR19DTElQKSB7XG4gICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkge1xuICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBcIlxcblwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGZvbGRpbmcpIHtcbiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHtcbiAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGVtcHR5TGluZXMgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lcyA9PT0gMCkge1xuICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHtcbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gXCIgXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGVtcHR5TGluZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcIlxcblwiLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7XG4gICAgfVxuICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTtcbiAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgZW1wdHlMaW5lcyA9IDA7XG4gICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgd2hpbGUgKCFpc19FT0woY2gpICYmIGNoICE9PSAwKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUocmVhZEJsb2NrU2NhbGFyLCBcInJlYWRCbG9ja1NjYWxhclwiKTtcbmZ1bmN0aW9uIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBub2RlSW5kZW50KSB7XG4gIHZhciBfbGluZSwgX3RhZyA9IHN0YXRlLnRhZywgX2FuY2hvciA9IHN0YXRlLmFuY2hvciwgX3Jlc3VsdCA9IFtdLCBmb2xsb3dpbmcsIGRldGVjdGVkID0gZmFsc2UsIGNoO1xuICBpZiAoc3RhdGUuZmlyc3RUYWJJbkxpbmUgIT09IC0xKSByZXR1cm4gZmFsc2U7XG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7XG4gIH1cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkge1xuICAgICAgc3RhdGUucG9zaXRpb24gPSBzdGF0ZS5maXJzdFRhYkluTGluZTtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvblwiKTtcbiAgICB9XG4gICAgaWYgKGNoICE9PSA0NSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcbiAgICBpZiAoIWlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPD0gbm9kZUluZGVudCkge1xuICAgICAgICBfcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfSU4sIGZhbHNlLCB0cnVlKTtcbiAgICBfcmVzdWx0LnB1c2goc3RhdGUucmVzdWx0KTtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiBjaCAhPT0gMCkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeVwiKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUudGFnID0gX3RhZztcbiAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yO1xuICAgIHN0YXRlLmtpbmQgPSBcInNlcXVlbmNlXCI7XG4gICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUocmVhZEJsb2NrU2VxdWVuY2UsIFwicmVhZEJsb2NrU2VxdWVuY2VcIik7XG5mdW5jdGlvbiByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBub2RlSW5kZW50LCBmbG93SW5kZW50KSB7XG4gIHZhciBmb2xsb3dpbmcsIGFsbG93Q29tcGFjdCwgX2xpbmUsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zLCBfdGFnID0gc3RhdGUudGFnLCBfYW5jaG9yID0gc3RhdGUuYW5jaG9yLCBfcmVzdWx0ID0ge30sIG92ZXJyaWRhYmxlS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCBrZXlUYWcgPSBudWxsLCBrZXlOb2RlID0gbnVsbCwgdmFsdWVOb2RlID0gbnVsbCwgYXRFeHBsaWNpdEtleSA9IGZhbHNlLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDtcbiAgaWYgKHN0YXRlLmZpcnN0VGFiSW5MaW5lICE9PSAtMSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBfcmVzdWx0O1xuICB9XG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmICghYXRFeHBsaWNpdEtleSAmJiBzdGF0ZS5maXJzdFRhYkluTGluZSAhPT0gLTEpIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhdGUuZmlyc3RUYWJJbkxpbmU7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb25cIik7XG4gICAgfVxuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcbiAgICBfbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgaWYgKChjaCA9PT0gNjMgfHwgY2ggPT09IDU4KSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkge1xuICAgICAgaWYgKGNoID09PSA2Mykge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsLCBfa2V5TGluZSwgX2tleUxpbmVTdGFydCwgX2tleVBvcyk7XG4gICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wb3NpdGlvbiArPSAxO1xuICAgICAgY2ggPSBmb2xsb3dpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgIF9rZXlMaW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7XG4gICAgICBfa2V5UG9zID0gc3RhdGUucG9zaXRpb247XG4gICAgICBpZiAoIWNvbXBvc2VOb2RlKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09IDU4KSB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmdcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgICAgICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnRhZyA9IF90YWc7XG4gICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHtcbiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIF9rZXlMaW5lID0gc3RhdGUubGluZTtcbiAgICAgICAgX2tleUxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgICAgX2tleVBvcyA9IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWF0RXhwbGljaXRLZXkpIHtcbiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2tleUxpbmUsIF9rZXlMaW5lU3RhcnQsIF9rZXlQb3MpO1xuICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIGlmICgoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIGNoICE9PSAwKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnlcIik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwsIF9rZXlMaW5lLCBfa2V5TGluZVN0YXJ0LCBfa2V5UG9zKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICBzdGF0ZS50YWcgPSBfdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7XG4gICAgc3RhdGUua2luZCA9IFwibWFwcGluZ1wiO1xuICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGRldGVjdGVkO1xufVxuX19uYW1lKHJlYWRCbG9ja01hcHBpbmcsIFwicmVhZEJsb2NrTWFwcGluZ1wiKTtcbmZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkge1xuICB2YXIgX3Bvc2l0aW9uLCBpc1ZlcmJhdGltID0gZmFsc2UsIGlzTmFtZWQgPSBmYWxzZSwgdGFnSGFuZGxlLCB0YWdOYW1lLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSAzMykgcmV0dXJuIGZhbHNlO1xuICBpZiAoc3RhdGUudGFnICE9PSBudWxsKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eVwiKTtcbiAgfVxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIGlmIChjaCA9PT0gNjApIHtcbiAgICBpc1ZlcmJhdGltID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDMzKSB7XG4gICAgaXNOYW1lZCA9IHRydWU7XG4gICAgdGFnSGFuZGxlID0gXCIhIVwiO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICB0YWdIYW5kbGUgPSBcIiFcIjtcbiAgfVxuICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgY2ggIT09IDYyKTtcbiAgICBpZiAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGgpIHtcbiAgICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZ1wiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICBpZiAoY2ggPT09IDMzKSB7XG4gICAgICAgIGlmICghaXNOYW1lZCkge1xuICAgICAgICAgIHRhZ0hhbmRsZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlLnBvc2l0aW9uICsgMSk7XG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc05hbWVkID0gdHJ1ZTtcbiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBpZiAoUEFUVEVSTl9GTE9XX0lORElDQVRPUlMudGVzdCh0YWdOYW1lKSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuICB9XG4gIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiBcIiArIHRhZ05hbWUpO1xuICB9XG4gIHRyeSB7XG4gICAgdGFnTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudCh0YWdOYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJ0YWcgbmFtZSBpcyBtYWxmb3JtZWQ6IFwiICsgdGFnTmFtZSk7XG4gIH1cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBzdGF0ZS50YWcgPSB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eSQxLmNhbGwoc3RhdGUudGFnTWFwLCB0YWdIYW5kbGUpKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gXCIhXCIpIHtcbiAgICBzdGF0ZS50YWcgPSBcIiFcIiArIHRhZ05hbWU7XG4gIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSBcIiEhXCIpIHtcbiAgICBzdGF0ZS50YWcgPSBcInRhZzp5YW1sLm9yZywyMDAyOlwiICsgdGFnTmFtZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlIFwiJyArIHRhZ0hhbmRsZSArICdcIicpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKHJlYWRUYWdQcm9wZXJ0eSwgXCJyZWFkVGFnUHJvcGVydHlcIik7XG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHtcbiAgdmFyIF9wb3NpdGlvbiwgY2g7XG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gIGlmIChjaCAhPT0gMzgpIHJldHVybiBmYWxzZTtcbiAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsIFwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5XCIpO1xuICB9XG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICB9XG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7XG4gICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIpO1xuICB9XG4gIHN0YXRlLmFuY2hvciA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShyZWFkQW5jaG9yUHJvcGVydHksIFwicmVhZEFuY2hvclByb3BlcnR5XCIpO1xuZnVuY3Rpb24gcmVhZEFsaWFzKHN0YXRlKSB7XG4gIHZhciBfcG9zaXRpb24sIGFsaWFzLCBjaDtcbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgaWYgKGNoICE9PSA0MikgcmV0dXJuIGZhbHNlO1xuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkgJiYgIWlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsIFwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIpO1xuICB9XG4gIGFsaWFzID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIGlmICghX2hhc093blByb3BlcnR5JDEuY2FsbChzdGF0ZS5hbmNob3JNYXAsIGFsaWFzKSkge1xuICAgIHRocm93RXJyb3Ioc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgXCInICsgYWxpYXMgKyAnXCInKTtcbiAgfVxuICBzdGF0ZS5yZXN1bHQgPSBzdGF0ZS5hbmNob3JNYXBbYWxpYXNdO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKHJlYWRBbGlhcywgXCJyZWFkQWxpYXNcIik7XG5mdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZSwgcGFyZW50SW5kZW50LCBub2RlQ29udGV4dCwgYWxsb3dUb1NlZWssIGFsbG93Q29tcGFjdCkge1xuICB2YXIgYWxsb3dCbG9ja1N0eWxlcywgYWxsb3dCbG9ja1NjYWxhcnMsIGFsbG93QmxvY2tDb2xsZWN0aW9ucywgaW5kZW50U3RhdHVzID0gMSwgYXROZXdMaW5lID0gZmFsc2UsIGhhc0NvbnRlbnQgPSBmYWxzZSwgdHlwZUluZGV4LCB0eXBlUXVhbnRpdHksIHR5cGVMaXN0LCB0eXBlMiwgZmxvd0luZGVudCwgYmxvY2tJbmRlbnQ7XG4gIGlmIChzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKFwib3BlblwiLCBzdGF0ZSk7XG4gIH1cbiAgc3RhdGUudGFnID0gbnVsbDtcbiAgc3RhdGUuYW5jaG9yID0gbnVsbDtcbiAgc3RhdGUua2luZCA9IG51bGw7XG4gIHN0YXRlLnJlc3VsdCA9IG51bGw7XG4gIGFsbG93QmxvY2tTdHlsZXMgPSBhbGxvd0Jsb2NrU2NhbGFycyA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0JMT0NLX0lOID09PSBub2RlQ29udGV4dDtcbiAgaWYgKGFsbG93VG9TZWVrKSB7XG4gICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgYXROZXdMaW5lID0gdHJ1ZTtcbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgIGluZGVudFN0YXR1cyA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICAgIGluZGVudFN0YXR1cyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7XG4gICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDtcbiAgfVxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTtcbiAgICB9XG4gICAgYmxvY2tJbmRlbnQgPSBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydDtcbiAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpIHx8IHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkgfHwgcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBmbG93SW5kZW50KSkge1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8IHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpIHx8IHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlKSkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwgfHwgc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZWFkUGxhaW5TY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQpKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGUudGFnID0gXCI/XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICBoYXNDb250ZW50ID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBibG9ja0luZGVudCk7XG4gICAgfVxuICB9XG4gIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHtcbiAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RhdGUudGFnID09PSBcIj9cIikge1xuICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUua2luZCAhPT0gXCJzY2FsYXJcIikge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgXCJzY2FsYXJcIiwgbm90IFwiJyArIHN0YXRlLmtpbmQgKyAnXCInKTtcbiAgICB9XG4gICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgdHlwZTIgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzW3R5cGVJbmRleF07XG4gICAgICBpZiAodHlwZTIucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUyLmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpO1xuICAgICAgICBzdGF0ZS50YWcgPSB0eXBlMi50YWc7XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RhdGUudGFnICE9PSBcIiFcIikge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKHN0YXRlLnR5cGVNYXBbc3RhdGUua2luZCB8fCBcImZhbGxiYWNrXCJdLCBzdGF0ZS50YWcpKSB7XG4gICAgICB0eXBlMiA9IHN0YXRlLnR5cGVNYXBbc3RhdGUua2luZCB8fCBcImZhbGxiYWNrXCJdW3N0YXRlLnRhZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUyID0gbnVsbDtcbiAgICAgIHR5cGVMaXN0ID0gc3RhdGUudHlwZU1hcC5tdWx0aVtzdGF0ZS5raW5kIHx8IFwiZmFsbGJhY2tcIl07XG4gICAgICBmb3IgKHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHR5cGVMaXN0Lmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkge1xuICAgICAgICBpZiAoc3RhdGUudGFnLnNsaWNlKDAsIHR5cGVMaXN0W3R5cGVJbmRleF0udGFnLmxlbmd0aCkgPT09IHR5cGVMaXN0W3R5cGVJbmRleF0udGFnKSB7XG4gICAgICAgICAgdHlwZTIgPSB0eXBlTGlzdFt0eXBlSW5kZXhdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdHlwZTIpIHtcbiAgICAgIHRocm93RXJyb3Ioc3RhdGUsIFwidW5rbm93biB0YWcgITxcIiArIHN0YXRlLnRhZyArIFwiPlwiKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlMi5raW5kICE9PSBzdGF0ZS5raW5kKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8XCIgKyBzdGF0ZS50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSBcIicgKyB0eXBlMi5raW5kICsgJ1wiLCBub3QgXCInICsgc3RhdGUua2luZCArICdcIicpO1xuICAgIH1cbiAgICBpZiAoIXR5cGUyLnJlc29sdmUoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpKSB7XG4gICAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8XCIgKyBzdGF0ZS50YWcgKyBcIj4gZXhwbGljaXQgdGFnXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlMi5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0LCBzdGF0ZS50YWcpO1xuICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0YXRlLmxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgc3RhdGUubGlzdGVuZXIoXCJjbG9zZVwiLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cbl9fbmFtZShjb21wb3NlTm9kZSwgXCJjb21wb3NlTm9kZVwiKTtcbmZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZSkge1xuICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlLnBvc2l0aW9uLCBfcG9zaXRpb24sIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MsIGhhc0RpcmVjdGl2ZXMgPSBmYWxzZSwgY2g7XG4gIHN0YXRlLnZlcnNpb24gPSBudWxsO1xuICBzdGF0ZS5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZS5sZWdhY3k7XG4gIHN0YXRlLnRhZ01hcCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdGF0ZS5hbmNob3JNYXAgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gMCB8fCBjaCAhPT0gMzcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG4gICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG4gICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3dFcnJvcihzdGF0ZSwgXCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGhcIik7XG4gICAgfVxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09IDM1KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIH0gd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNfRU9MKGNoKSkgYnJlYWs7XG4gICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkge1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgICBkaXJlY3RpdmVBcmdzLnB1c2goc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbikpO1xuICAgIH1cbiAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUpO1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkkMS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkge1xuICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIGRpcmVjdGl2ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIicgKyBkaXJlY3RpdmVOYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IDAgJiYgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDQ1ICYmIHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKSA9PT0gNDUgJiYgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDIpID09PSA0NSkge1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWRcIik7XG4gIH1cbiAgY29tcG9zZU5vZGUoc3RhdGUsIHN0YXRlLmxpbmVJbmRlbnQgLSAxLCBDT05URVhUX0JMT0NLX09VVCwgZmFsc2UsIHRydWUpO1xuICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiYgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdChzdGF0ZS5pbnB1dC5zbGljZShkb2N1bWVudFN0YXJ0LCBzdGF0ZS5wb3NpdGlvbikpKSB7XG4gICAgdGhyb3dXYXJuaW5nKHN0YXRlLCBcIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudFwiKTtcbiAgfVxuICBzdGF0ZS5kb2N1bWVudHMucHVzaChzdGF0ZS5yZXN1bHQpO1xuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpKSB7XG4gICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSA0Nikge1xuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCAtIDEpIHtcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybjtcbiAgfVxufVxuX19uYW1lKHJlYWREb2N1bWVudCwgXCJyZWFkRG9jdW1lbnRcIik7XG5mdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7XG4gIGlucHV0ID0gU3RyaW5nKGlucHV0KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmIChpbnB1dC5sZW5ndGggIT09IDApIHtcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMTAgJiYgaW5wdXQuY2hhckNvZGVBdChpbnB1dC5sZW5ndGggLSAxKSAhPT0gMTMpIHtcbiAgICAgIGlucHV0ICs9IFwiXFxuXCI7XG4gICAgfVxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KDApID09PSA2NTI3OSkge1xuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgICB9XG4gIH1cbiAgdmFyIHN0YXRlID0gbmV3IFN0YXRlJDEoaW5wdXQsIG9wdGlvbnMpO1xuICB2YXIgbnVsbHBvcyA9IGlucHV0LmluZGV4T2YoXCJcXDBcIik7XG4gIGlmIChudWxscG9zICE9PSAtMSkge1xuICAgIHN0YXRlLnBvc2l0aW9uID0gbnVsbHBvcztcbiAgICB0aHJvd0Vycm9yKHN0YXRlLCBcIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dFwiKTtcbiAgfVxuICBzdGF0ZS5pbnB1dCArPSBcIlxcMFwiO1xuICB3aGlsZSAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDMyKSB7XG4gICAgc3RhdGUubGluZUluZGVudCArPSAxO1xuICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gIH1cbiAgd2hpbGUgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoIC0gMSkge1xuICAgIHJlYWREb2N1bWVudChzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmRvY3VtZW50cztcbn1cbl9fbmFtZShsb2FkRG9jdW1lbnRzLCBcImxvYWREb2N1bWVudHNcIik7XG5mdW5jdGlvbiBsb2FkQWxsJDEoaW5wdXQsIGl0ZXJhdG9yLCBvcHRpb25zKSB7XG4gIGlmIChpdGVyYXRvciAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlcmF0b3IgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9wdGlvbnMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBvcHRpb25zID0gaXRlcmF0b3I7XG4gICAgaXRlcmF0b3IgPSBudWxsO1xuICB9XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcbiAgaWYgKHR5cGVvZiBpdGVyYXRvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50cztcbiAgfVxuICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgaXRlcmF0b3IoZG9jdW1lbnRzW2luZGV4XSk7XG4gIH1cbn1cbl9fbmFtZShsb2FkQWxsJDEsIFwibG9hZEFsbCQxXCIpO1xuZnVuY3Rpb24gbG9hZCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTtcbiAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRzWzBdO1xuICB9XG4gIHRocm93IG5ldyBleGNlcHRpb24oXCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZVwiKTtcbn1cbl9fbmFtZShsb2FkJDEsIFwibG9hZCQxXCIpO1xudmFyIGxvYWRBbGxfMSA9IGxvYWRBbGwkMTtcbnZhciBsb2FkXzEgPSBsb2FkJDE7XG52YXIgbG9hZGVyMjUgPSB7XG4gIGxvYWRBbGw6IGxvYWRBbGxfMSxcbiAgbG9hZDogbG9hZF8xXG59O1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBDSEFSX0JPTSA9IDY1Mjc5O1xudmFyIENIQVJfVEFCID0gOTtcbnZhciBDSEFSX0xJTkVfRkVFRCA9IDEwO1xudmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOID0gMTM7XG52YXIgQ0hBUl9TUEFDRSA9IDMyO1xudmFyIENIQVJfRVhDTEFNQVRJT04gPSAzMztcbnZhciBDSEFSX0RPVUJMRV9RVU9URSA9IDM0O1xudmFyIENIQVJfU0hBUlAgPSAzNTtcbnZhciBDSEFSX1BFUkNFTlQgPSAzNztcbnZhciBDSEFSX0FNUEVSU0FORCA9IDM4O1xudmFyIENIQVJfU0lOR0xFX1FVT1RFID0gMzk7XG52YXIgQ0hBUl9BU1RFUklTSyA9IDQyO1xudmFyIENIQVJfQ09NTUEgPSA0NDtcbnZhciBDSEFSX01JTlVTID0gNDU7XG52YXIgQ0hBUl9DT0xPTiA9IDU4O1xudmFyIENIQVJfRVFVQUxTID0gNjE7XG52YXIgQ0hBUl9HUkVBVEVSX1RIQU4gPSA2MjtcbnZhciBDSEFSX1FVRVNUSU9OID0gNjM7XG52YXIgQ0hBUl9DT01NRVJDSUFMX0FUID0gNjQ7XG52YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gOTE7XG52YXIgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDkzO1xudmFyIENIQVJfR1JBVkVfQUNDRU5UID0gOTY7XG52YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7XG52YXIgQ0hBUl9WRVJUSUNBTF9MSU5FID0gMTI0O1xudmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCA9IDEyNTtcbnZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307XG5FU0NBUEVfU0VRVUVOQ0VTWzBdID0gXCJcXFxcMFwiO1xuRVNDQVBFX1NFUVVFTkNFU1s3XSA9IFwiXFxcXGFcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbOF0gPSBcIlxcXFxiXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzldID0gXCJcXFxcdFwiO1xuRVNDQVBFX1NFUVVFTkNFU1sxMF0gPSBcIlxcXFxuXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzExXSA9IFwiXFxcXHZcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMTJdID0gXCJcXFxcZlwiO1xuRVNDQVBFX1NFUVVFTkNFU1sxM10gPSBcIlxcXFxyXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzI3XSA9IFwiXFxcXGVcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMzRdID0gJ1xcXFxcIic7XG5FU0NBUEVfU0VRVUVOQ0VTWzkyXSA9IFwiXFxcXFxcXFxcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMTMzXSA9IFwiXFxcXE5cIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMTYwXSA9IFwiXFxcXF9cIjtcbkVTQ0FQRV9TRVFVRU5DRVNbODIzMl0gPSBcIlxcXFxMXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzgyMzNdID0gXCJcXFxcUFwiO1xudmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gW1xuICBcInlcIixcbiAgXCJZXCIsXG4gIFwieWVzXCIsXG4gIFwiWWVzXCIsXG4gIFwiWUVTXCIsXG4gIFwib25cIixcbiAgXCJPblwiLFxuICBcIk9OXCIsXG4gIFwiblwiLFxuICBcIk5cIixcbiAgXCJub1wiLFxuICBcIk5vXCIsXG4gIFwiTk9cIixcbiAgXCJvZmZcIixcbiAgXCJPZmZcIixcbiAgXCJPRkZcIlxuXTtcbnZhciBERVBSRUNBVEVEX0JBU0U2MF9TWU5UQVggPSAvXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcXC5bMC05X10qKT8kLztcbmZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEyLCBtYXAyKSB7XG4gIHZhciByZXN1bHQsIGtleXMsIGluZGV4LCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGUyO1xuICBpZiAobWFwMiA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICByZXN1bHQgPSB7fTtcbiAga2V5cyA9IE9iamVjdC5rZXlzKG1hcDIpO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwMlt0YWddKTtcbiAgICBpZiAodGFnLnNsaWNlKDAsIDIpID09PSBcIiEhXCIpIHtcbiAgICAgIHRhZyA9IFwidGFnOnlhbWwub3JnLDIwMDI6XCIgKyB0YWcuc2xpY2UoMik7XG4gICAgfVxuICAgIHR5cGUyID0gc2NoZW1hMi5jb21waWxlZFR5cGVNYXBbXCJmYWxsYmFja1wiXVt0YWddO1xuICAgIGlmICh0eXBlMiAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlMi5zdHlsZUFsaWFzZXMsIHN0eWxlKSkge1xuICAgICAgc3R5bGUgPSB0eXBlMi5zdHlsZUFsaWFzZXNbc3R5bGVdO1xuICAgIH1cbiAgICByZXN1bHRbdGFnXSA9IHN0eWxlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoY29tcGlsZVN0eWxlTWFwLCBcImNvbXBpbGVTdHlsZU1hcFwiKTtcbmZ1bmN0aW9uIGVuY29kZUhleChjaGFyYWN0ZXIpIHtcbiAgdmFyIHN0cmluZywgaGFuZGxlLCBsZW5ndGg7XG4gIHN0cmluZyA9IGNoYXJhY3Rlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgaWYgKGNoYXJhY3RlciA8PSAyNTUpIHtcbiAgICBoYW5kbGUgPSBcInhcIjtcbiAgICBsZW5ndGggPSAyO1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSA2NTUzNSkge1xuICAgIGhhbmRsZSA9IFwidVwiO1xuICAgIGxlbmd0aCA9IDQ7XG4gIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDQyOTQ5NjcyOTUpIHtcbiAgICBoYW5kbGUgPSBcIlVcIjtcbiAgICBsZW5ndGggPSA4O1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBleGNlcHRpb24oXCJjb2RlIHBvaW50IHdpdGhpbiBhIHN0cmluZyBtYXkgbm90IGJlIGdyZWF0ZXIgdGhhbiAweEZGRkZGRkZGXCIpO1xuICB9XG4gIHJldHVybiBcIlxcXFxcIiArIGhhbmRsZSArIGNvbW1vbi5yZXBlYXQoXCIwXCIsIGxlbmd0aCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufVxuX19uYW1lKGVuY29kZUhleCwgXCJlbmNvZGVIZXhcIik7XG52YXIgUVVPVElOR19UWVBFX1NJTkdMRSA9IDE7XG52YXIgUVVPVElOR19UWVBFX0RPVUJMRSA9IDI7XG5mdW5jdGlvbiBTdGF0ZShvcHRpb25zKSB7XG4gIHRoaXMuc2NoZW1hID0gb3B0aW9uc1tcInNjaGVtYVwiXSB8fCBfZGVmYXVsdDtcbiAgdGhpcy5pbmRlbnQgPSBNYXRoLm1heCgxLCBvcHRpb25zW1wiaW5kZW50XCJdIHx8IDIpO1xuICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBvcHRpb25zW1wibm9BcnJheUluZGVudFwiXSB8fCBmYWxzZTtcbiAgdGhpcy5za2lwSW52YWxpZCA9IG9wdGlvbnNbXCJza2lwSW52YWxpZFwiXSB8fCBmYWxzZTtcbiAgdGhpcy5mbG93TGV2ZWwgPSBjb21tb24uaXNOb3RoaW5nKG9wdGlvbnNbXCJmbG93TGV2ZWxcIl0pID8gLTEgOiBvcHRpb25zW1wiZmxvd0xldmVsXCJdO1xuICB0aGlzLnN0eWxlTWFwID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hLCBvcHRpb25zW1wic3R5bGVzXCJdIHx8IG51bGwpO1xuICB0aGlzLnNvcnRLZXlzID0gb3B0aW9uc1tcInNvcnRLZXlzXCJdIHx8IGZhbHNlO1xuICB0aGlzLmxpbmVXaWR0aCA9IG9wdGlvbnNbXCJsaW5lV2lkdGhcIl0gfHwgODA7XG4gIHRoaXMubm9SZWZzID0gb3B0aW9uc1tcIm5vUmVmc1wiXSB8fCBmYWxzZTtcbiAgdGhpcy5ub0NvbXBhdE1vZGUgPSBvcHRpb25zW1wibm9Db21wYXRNb2RlXCJdIHx8IGZhbHNlO1xuICB0aGlzLmNvbmRlbnNlRmxvdyA9IG9wdGlvbnNbXCJjb25kZW5zZUZsb3dcIl0gfHwgZmFsc2U7XG4gIHRoaXMucXVvdGluZ1R5cGUgPSBvcHRpb25zW1wicXVvdGluZ1R5cGVcIl0gPT09ICdcIicgPyBRVU9USU5HX1RZUEVfRE9VQkxFIDogUVVPVElOR19UWVBFX1NJTkdMRTtcbiAgdGhpcy5mb3JjZVF1b3RlcyA9IG9wdGlvbnNbXCJmb3JjZVF1b3Rlc1wiXSB8fCBmYWxzZTtcbiAgdGhpcy5yZXBsYWNlciA9IHR5cGVvZiBvcHRpb25zW1wicmVwbGFjZXJcIl0gPT09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnNbXCJyZXBsYWNlclwiXSA6IG51bGw7XG4gIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7XG4gIHRoaXMuZXhwbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQ7XG4gIHRoaXMudGFnID0gbnVsbDtcbiAgdGhpcy5yZXN1bHQgPSBcIlwiO1xuICB0aGlzLmR1cGxpY2F0ZXMgPSBbXTtcbiAgdGhpcy51c2VkRHVwbGljYXRlcyA9IG51bGw7XG59XG5fX25hbWUoU3RhdGUsIFwiU3RhdGVcIik7XG5mdW5jdGlvbiBpbmRlbnRTdHJpbmcoc3RyaW5nLCBzcGFjZXMpIHtcbiAgdmFyIGluZCA9IGNvbW1vbi5yZXBlYXQoXCIgXCIsIHNwYWNlcyksIHBvc2l0aW9uID0gMCwgbmV4dCA9IC0xLCByZXN1bHQgPSBcIlwiLCBsaW5lLCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICBuZXh0ID0gc3RyaW5nLmluZGV4T2YoXCJcXG5cIiwgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG4gICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09IFwiXFxuXCIpIHJlc3VsdCArPSBpbmQ7XG4gICAgcmVzdWx0ICs9IGxpbmU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShpbmRlbnRTdHJpbmcsIFwiaW5kZW50U3RyaW5nXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpIHtcbiAgcmV0dXJuIFwiXFxuXCIgKyBjb21tb24ucmVwZWF0KFwiIFwiLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCk7XG59XG5fX25hbWUoZ2VuZXJhdGVOZXh0TGluZSwgXCJnZW5lcmF0ZU5leHRMaW5lXCIpO1xuZnVuY3Rpb24gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHIyKSB7XG4gIHZhciBpbmRleCwgbGVuZ3RoLCB0eXBlMjtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUyID0gc3RhdGUuaW1wbGljaXRUeXBlc1tpbmRleF07XG4gICAgaWYgKHR5cGUyLnJlc29sdmUoc3RyMikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUodGVzdEltcGxpY2l0UmVzb2x2aW5nLCBcInRlc3RJbXBsaWNpdFJlc29sdmluZ1wiKTtcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKSB7XG4gIHJldHVybiBjID09PSBDSEFSX1NQQUNFIHx8IGMgPT09IENIQVJfVEFCO1xufVxuX19uYW1lKGlzV2hpdGVzcGFjZSwgXCJpc1doaXRlc3BhY2VcIik7XG5mdW5jdGlvbiBpc1ByaW50YWJsZShjKSB7XG4gIHJldHVybiAzMiA8PSBjICYmIGMgPD0gMTI2IHx8IDE2MSA8PSBjICYmIGMgPD0gNTUyOTUgJiYgYyAhPT0gODIzMiAmJiBjICE9PSA4MjMzIHx8IDU3MzQ0IDw9IGMgJiYgYyA8PSA2NTUzMyAmJiBjICE9PSBDSEFSX0JPTSB8fCA2NTUzNiA8PSBjICYmIGMgPD0gMTExNDExMTtcbn1cbl9fbmFtZShpc1ByaW50YWJsZSwgXCJpc1ByaW50YWJsZVwiKTtcbmZ1bmN0aW9uIGlzTnNDaGFyT3JXaGl0ZXNwYWNlKGMpIHtcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NICYmIGMgIT09IENIQVJfQ0FSUklBR0VfUkVUVVJOICYmIGMgIT09IENIQVJfTElORV9GRUVEO1xufVxuX19uYW1lKGlzTnNDaGFyT3JXaGl0ZXNwYWNlLCBcImlzTnNDaGFyT3JXaGl0ZXNwYWNlXCIpO1xuZnVuY3Rpb24gaXNQbGFpblNhZmUoYywgcHJldiwgaW5ibG9jaykge1xuICB2YXIgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlID0gaXNOc0NoYXJPcldoaXRlc3BhY2UoYyk7XG4gIHZhciBjSXNOc0NoYXIgPSBjSXNOc0NoYXJPcldoaXRlc3BhY2UgJiYgIWlzV2hpdGVzcGFjZShjKTtcbiAgcmV0dXJuIChcbiAgICAvLyBucy1wbGFpbi1zYWZlXG4gICAgKGluYmxvY2sgPyAoXG4gICAgICAvLyBjID0gZmxvdy1pblxuICAgICAgY0lzTnNDaGFyT3JXaGl0ZXNwYWNlXG4gICAgKSA6IGNJc05zQ2hhck9yV2hpdGVzcGFjZSAmJiBjICE9PSBDSEFSX0NPTU1BICYmIGMgIT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAmJiBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMgIT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkgJiYgYyAhPT0gQ0hBUl9TSEFSUCAmJiAhKHByZXYgPT09IENIQVJfQ09MT04gJiYgIWNJc05zQ2hhcikgfHwgaXNOc0NoYXJPcldoaXRlc3BhY2UocHJldikgJiYgIWlzV2hpdGVzcGFjZShwcmV2KSAmJiBjID09PSBDSEFSX1NIQVJQIHx8IHByZXYgPT09IENIQVJfQ09MT04gJiYgY0lzTnNDaGFyXG4gICk7XG59XG5fX25hbWUoaXNQbGFpblNhZmUsIFwiaXNQbGFpblNhZmVcIik7XG5mdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMpIHtcbiAgcmV0dXJuIGlzUHJpbnRhYmxlKGMpICYmIGMgIT09IENIQVJfQk9NICYmICFpc1doaXRlc3BhY2UoYykgJiYgYyAhPT0gQ0hBUl9NSU5VUyAmJiBjICE9PSBDSEFSX1FVRVNUSU9OICYmIGMgIT09IENIQVJfQ09MT04gJiYgYyAhPT0gQ0hBUl9DT01NQSAmJiBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYyAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjICE9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAmJiBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYyAhPT0gQ0hBUl9TSEFSUCAmJiBjICE9PSBDSEFSX0FNUEVSU0FORCAmJiBjICE9PSBDSEFSX0FTVEVSSVNLICYmIGMgIT09IENIQVJfRVhDTEFNQVRJT04gJiYgYyAhPT0gQ0hBUl9WRVJUSUNBTF9MSU5FICYmIGMgIT09IENIQVJfRVFVQUxTICYmIGMgIT09IENIQVJfR1JFQVRFUl9USEFOICYmIGMgIT09IENIQVJfU0lOR0xFX1FVT1RFICYmIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmIGMgIT09IENIQVJfUEVSQ0VOVCAmJiBjICE9PSBDSEFSX0NPTU1FUkNJQUxfQVQgJiYgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7XG59XG5fX25hbWUoaXNQbGFpblNhZmVGaXJzdCwgXCJpc1BsYWluU2FmZUZpcnN0XCIpO1xuZnVuY3Rpb24gaXNQbGFpblNhZmVMYXN0KGMpIHtcbiAgcmV0dXJuICFpc1doaXRlc3BhY2UoYykgJiYgYyAhPT0gQ0hBUl9DT0xPTjtcbn1cbl9fbmFtZShpc1BsYWluU2FmZUxhc3QsIFwiaXNQbGFpblNhZmVMYXN0XCIpO1xuZnVuY3Rpb24gY29kZVBvaW50QXQoc3RyaW5nLCBwb3MpIHtcbiAgdmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQocG9zKSwgc2Vjb25kO1xuICBpZiAoZmlyc3QgPj0gNTUyOTYgJiYgZmlyc3QgPD0gNTYzMTkgJiYgcG9zICsgMSA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICBzZWNvbmQgPSBzdHJpbmcuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoc2Vjb25kID49IDU2MzIwICYmIHNlY29uZCA8PSA1NzM0Mykge1xuICAgICAgcmV0dXJuIChmaXJzdCAtIDU1Mjk2KSAqIDEwMjQgKyBzZWNvbmQgLSA1NjMyMCArIDY1NTM2O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5fX25hbWUoY29kZVBvaW50QXQsIFwiY29kZVBvaW50QXRcIik7XG5mdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykge1xuICB2YXIgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cbl9fbmFtZShuZWVkSW5kZW50SW5kaWNhdG9yLCBcIm5lZWRJbmRlbnRJbmRpY2F0b3JcIik7XG52YXIgU1RZTEVfUExBSU4gPSAxO1xudmFyIFNUWUxFX1NJTkdMRSA9IDI7XG52YXIgU1RZTEVfTElURVJBTCA9IDM7XG52YXIgU1RZTEVfRk9MREVEID0gNDtcbnZhciBTVFlMRV9ET1VCTEUgPSA1O1xuZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCwgdGVzdEFtYmlndW91c1R5cGUsIHF1b3RpbmdUeXBlLCBmb3JjZVF1b3RlcywgaW5ibG9jaykge1xuICB2YXIgaTtcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgcHJldkNoYXIgPSBudWxsO1xuICB2YXIgaGFzTGluZUJyZWFrID0gZmFsc2U7XG4gIHZhciBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZTtcbiAgdmFyIHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xO1xuICB2YXIgcHJldmlvdXNMaW5lQnJlYWsgPSAtMTtcbiAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChjb2RlUG9pbnRBdChzdHJpbmcsIDApKSAmJiBpc1BsYWluU2FmZUxhc3QoY29kZVBvaW50QXQoc3RyaW5nLCBzdHJpbmcubGVuZ3RoIC0gMSkpO1xuICBpZiAoc2luZ2xlTGluZU9ubHkgfHwgZm9yY2VRdW90ZXMpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgY2hhciA+PSA2NTUzNiA/IGkgKz0gMiA6IGkrKykge1xuICAgICAgY2hhciA9IGNvZGVQb2ludEF0KHN0cmluZywgaSk7XG4gICAgICBpZiAoIWlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gICAgICB9XG4gICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZDaGFyLCBpbmJsb2NrKTtcbiAgICAgIHByZXZDaGFyID0gY2hhcjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGNoYXIgPj0gNjU1MzYgPyBpICs9IDIgOiBpKyspIHtcbiAgICAgIGNoYXIgPSBjb2RlUG9pbnRBdChzdHJpbmcsIGkpO1xuICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7XG4gICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IC8vIEZvbGRhYmxlIGxpbmUgPSB0b28gbG9uZywgYW5kIG5vdCBtb3JlLWluZGVudGVkLlxuICAgICAgICAgIGkgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiYgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09IFwiIFwiO1xuICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaXNQcmludGFibGUoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTtcbiAgICAgIH1cbiAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhciwgcHJldkNoYXIsIGluYmxvY2spO1xuICAgICAgcHJldkNoYXIgPSBjaGFyO1xuICAgIH1cbiAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgc2hvdWxkVHJhY2tXaWR0aCAmJiAoaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJiBzdHJpbmdbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gXCIgXCIpO1xuICB9XG4gIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHtcbiAgICBpZiAocGxhaW4gJiYgIWZvcmNlUXVvdGVzICYmICF0ZXN0QW1iaWd1b3VzVHlwZShzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gU1RZTEVfUExBSU47XG4gICAgfVxuICAgIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbiAgfVxuICBpZiAoaW5kZW50UGVyTGV2ZWwgPiA5ICYmIG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSkge1xuICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gIH1cbiAgaWYgKCFmb3JjZVF1b3Rlcykge1xuICAgIHJldHVybiBoYXNGb2xkYWJsZUxpbmUgPyBTVFlMRV9GT0xERUQgOiBTVFlMRV9MSVRFUkFMO1xuICB9XG4gIHJldHVybiBxdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/IFNUWUxFX0RPVUJMRSA6IFNUWUxFX1NJTkdMRTtcbn1cbl9fbmFtZShjaG9vc2VTY2FsYXJTdHlsZSwgXCJjaG9vc2VTY2FsYXJTdHlsZVwiKTtcbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmcsIGxldmVsLCBpc2tleSwgaW5ibG9jaykge1xuICBzdGF0ZS5kdW1wID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZS5xdW90aW5nVHlwZSA9PT0gUVVPVElOR19UWVBFX0RPVUJMRSA/ICdcIlwiJyA6IFwiJydcIjtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5ub0NvbXBhdE1vZGUpIHtcbiAgICAgIGlmIChERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZykgIT09IC0xIHx8IERFUFJFQ0FURURfQkFTRTYwX1NZTlRBWC50ZXN0KHN0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnF1b3RpbmdUeXBlID09PSBRVU9USU5HX1RZUEVfRE9VQkxFID8gJ1wiJyArIHN0cmluZyArICdcIicgOiBcIidcIiArIHN0cmluZyArIFwiJ1wiO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5kZW50ID0gc3RhdGUuaW5kZW50ICogTWF0aC5tYXgoMSwgbGV2ZWwpO1xuICAgIHZhciBsaW5lV2lkdGggPSBzdGF0ZS5saW5lV2lkdGggPT09IC0xID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50KTtcbiAgICB2YXIgc2luZ2xlTGluZU9ubHkgPSBpc2tleSB8fCBzdGF0ZS5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZS5mbG93TGV2ZWw7XG4gICAgZnVuY3Rpb24gdGVzdEFtYmlndWl0eShzdHJpbmcyKSB7XG4gICAgICByZXR1cm4gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHJpbmcyKTtcbiAgICB9XG4gICAgX19uYW1lKHRlc3RBbWJpZ3VpdHksIFwidGVzdEFtYmlndWl0eVwiKTtcbiAgICBzd2l0Y2ggKGNob29zZVNjYWxhclN0eWxlKFxuICAgICAgc3RyaW5nLFxuICAgICAgc2luZ2xlTGluZU9ubHksXG4gICAgICBzdGF0ZS5pbmRlbnQsXG4gICAgICBsaW5lV2lkdGgsXG4gICAgICB0ZXN0QW1iaWd1aXR5LFxuICAgICAgc3RhdGUucXVvdGluZ1R5cGUsXG4gICAgICBzdGF0ZS5mb3JjZVF1b3RlcyAmJiAhaXNrZXksXG4gICAgICBpbmJsb2NrXG4gICAgKSkge1xuICAgICAgY2FzZSBTVFlMRV9QTEFJTjpcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOlxuICAgICAgICByZXR1cm4gXCInXCIgKyBzdHJpbmcucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6XG4gICAgICAgIHJldHVybiBcInxcIiArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KSArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCkpO1xuICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6XG4gICAgICAgIHJldHVybiBcIj5cIiArIGJsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KSArIGRyb3BFbmRpbmdOZXdsaW5lKGluZGVudFN0cmluZyhmb2xkU3RyaW5nKHN0cmluZywgbGluZVdpZHRoKSwgaW5kZW50KSk7XG4gICAgICBjYXNlIFNUWUxFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nKSArICdcIic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGVcIik7XG4gICAgfVxuICB9KCk7XG59XG5fX25hbWUod3JpdGVTY2FsYXIsIFwid3JpdGVTY2FsYXJcIik7XG5mdW5jdGlvbiBibG9ja0hlYWRlcihzdHJpbmcsIGluZGVudFBlckxldmVsKSB7XG4gIHZhciBpbmRlbnRJbmRpY2F0b3IgPSBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykgPyBTdHJpbmcoaW5kZW50UGVyTGV2ZWwpIDogXCJcIjtcbiAgdmFyIGNsaXAgPSBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSBcIlxcblwiO1xuICB2YXIga2VlcCA9IGNsaXAgJiYgKHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMl0gPT09IFwiXFxuXCIgfHwgc3RyaW5nID09PSBcIlxcblwiKTtcbiAgdmFyIGNob21wID0ga2VlcCA/IFwiK1wiIDogY2xpcCA/IFwiXCIgOiBcIi1cIjtcbiAgcmV0dXJuIGluZGVudEluZGljYXRvciArIGNob21wICsgXCJcXG5cIjtcbn1cbl9fbmFtZShibG9ja0hlYWRlciwgXCJibG9ja0hlYWRlclwiKTtcbmZ1bmN0aW9uIGRyb3BFbmRpbmdOZXdsaW5lKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nW3N0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJcXG5cIiA/IHN0cmluZy5zbGljZSgwLCAtMSkgOiBzdHJpbmc7XG59XG5fX25hbWUoZHJvcEVuZGluZ05ld2xpbmUsIFwiZHJvcEVuZGluZ05ld2xpbmVcIik7XG5mdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZywgd2lkdGgpIHtcbiAgdmFyIGxpbmVSZSA9IC8oXFxuKykoW15cXG5dKikvZztcbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuZXh0TEYgPSBzdHJpbmcuaW5kZXhPZihcIlxcblwiKTtcbiAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nLmxlbmd0aDtcbiAgICBsaW5lUmUubGFzdEluZGV4ID0gbmV4dExGO1xuICAgIHJldHVybiBmb2xkTGluZShzdHJpbmcuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpO1xuICB9KCk7XG4gIHZhciBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nWzBdID09PSBcIlxcblwiIHx8IHN0cmluZ1swXSA9PT0gXCIgXCI7XG4gIHZhciBtb3JlSW5kZW50ZWQ7XG4gIHZhciBtYXRjaDtcbiAgd2hpbGUgKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkge1xuICAgIHZhciBwcmVmaXggPSBtYXRjaFsxXSwgbGluZSA9IG1hdGNoWzJdO1xuICAgIG1vcmVJbmRlbnRlZCA9IGxpbmVbMF0gPT09IFwiIFwiO1xuICAgIHJlc3VsdCArPSBwcmVmaXggKyAoIXByZXZNb3JlSW5kZW50ZWQgJiYgIW1vcmVJbmRlbnRlZCAmJiBsaW5lICE9PSBcIlwiID8gXCJcXG5cIiA6IFwiXCIpICsgZm9sZExpbmUobGluZSwgd2lkdGgpO1xuICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShmb2xkU3RyaW5nLCBcImZvbGRTdHJpbmdcIik7XG5mdW5jdGlvbiBmb2xkTGluZShsaW5lLCB3aWR0aCkge1xuICBpZiAobGluZSA9PT0gXCJcIiB8fCBsaW5lWzBdID09PSBcIiBcIikgcmV0dXJuIGxpbmU7XG4gIHZhciBicmVha1JlID0gLyBbXiBdL2c7XG4gIHZhciBtYXRjaDtcbiAgdmFyIHN0YXJ0ID0gMCwgZW5kLCBjdXJyID0gMCwgbmV4dCA9IDA7XG4gIHZhciByZXN1bHQgPSBcIlwiO1xuICB3aGlsZSAobWF0Y2ggPSBicmVha1JlLmV4ZWMobGluZSkpIHtcbiAgICBuZXh0ID0gbWF0Y2guaW5kZXg7XG4gICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7XG4gICAgICBlbmQgPSBjdXJyID4gc3RhcnQgPyBjdXJyIDogbmV4dDtcbiAgICAgIHJlc3VsdCArPSBcIlxcblwiICsgbGluZS5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIHN0YXJ0ID0gZW5kICsgMTtcbiAgICB9XG4gICAgY3VyciA9IG5leHQ7XG4gIH1cbiAgcmVzdWx0ICs9IFwiXFxuXCI7XG4gIGlmIChsaW5lLmxlbmd0aCAtIHN0YXJ0ID4gd2lkdGggJiYgY3VyciA+IHN0YXJ0KSB7XG4gICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQsIGN1cnIpICsgXCJcXG5cIiArIGxpbmUuc2xpY2UoY3VyciArIDEpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LnNsaWNlKDEpO1xufVxuX19uYW1lKGZvbGRMaW5lLCBcImZvbGRMaW5lXCIpO1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gXCJcIjtcbiAgdmFyIGNoYXIgPSAwO1xuICB2YXIgZXNjYXBlU2VxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGNoYXIgPj0gNjU1MzYgPyBpICs9IDIgOiBpKyspIHtcbiAgICBjaGFyID0gY29kZVBvaW50QXQoc3RyaW5nLCBpKTtcbiAgICBlc2NhcGVTZXEgPSBFU0NBUEVfU0VRVUVOQ0VTW2NoYXJdO1xuICAgIGlmICghZXNjYXBlU2VxICYmIGlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nW2ldO1xuICAgICAgaWYgKGNoYXIgPj0gNjU1MzYpIHJlc3VsdCArPSBzdHJpbmdbaSArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgKz0gZXNjYXBlU2VxIHx8IGVuY29kZUhleChjaGFyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShlc2NhcGVTdHJpbmcsIFwiZXNjYXBlU3RyaW5nXCIpO1xuZnVuY3Rpb24gd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSBcIlwiLCBfdGFnID0gc3RhdGUudGFnLCBpbmRleCwgbGVuZ3RoLCB2YWx1ZTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgdmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgU3RyaW5nKGluZGV4KSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgdmFsdWUsIGZhbHNlLCBmYWxzZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiICYmIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG51bGwsIGZhbHNlLCBmYWxzZSkpIHtcbiAgICAgIGlmIChfcmVzdWx0ICE9PSBcIlwiKSBfcmVzdWx0ICs9IFwiLFwiICsgKCFzdGF0ZS5jb25kZW5zZUZsb3cgPyBcIiBcIiA6IFwiXCIpO1xuICAgICAgX3Jlc3VsdCArPSBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gXCJbXCIgKyBfcmVzdWx0ICsgXCJdXCI7XG59XG5fX25hbWUod3JpdGVGbG93U2VxdWVuY2UsIFwid3JpdGVGbG93U2VxdWVuY2VcIik7XG5mdW5jdGlvbiB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHtcbiAgdmFyIF9yZXN1bHQgPSBcIlwiLCBfdGFnID0gc3RhdGUudGFnLCBpbmRleCwgbGVuZ3RoLCB2YWx1ZTtcbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdmFsdWUgPSBvYmplY3RbaW5kZXhdO1xuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgdmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgU3RyaW5nKGluZGV4KSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIHZhbHVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiICYmIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBudWxsLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkpIHtcbiAgICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSBcIlwiKSB7XG4gICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBfcmVzdWx0ICs9IFwiLVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdCArPSBcIi0gXCI7XG4gICAgICB9XG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSBfcmVzdWx0IHx8IFwiW11cIjtcbn1cbl9fbmFtZSh3cml0ZUJsb2NrU2VxdWVuY2UsIFwid3JpdGVCbG9ja1NlcXVlbmNlXCIpO1xuZnVuY3Rpb24gd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCkge1xuICB2YXIgX3Jlc3VsdCA9IFwiXCIsIF90YWcgPSBzdGF0ZS50YWcsIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLCBpbmRleCwgbGVuZ3RoLCBvYmplY3RLZXksIG9iamVjdFZhbHVlLCBwYWlyQnVmZmVyO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgcGFpckJ1ZmZlciA9IFwiXCI7XG4gICAgaWYgKF9yZXN1bHQgIT09IFwiXCIpIHBhaXJCdWZmZXIgKz0gXCIsIFwiO1xuICAgIGlmIChzdGF0ZS5jb25kZW5zZUZsb3cpIHBhaXJCdWZmZXIgKz0gJ1wiJztcbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuICAgIGlmIChzdGF0ZS5yZXBsYWNlcikge1xuICAgICAgb2JqZWN0VmFsdWUgPSBzdGF0ZS5yZXBsYWNlci5jYWxsKG9iamVjdCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSk7XG4gICAgfVxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSBcIj8gXCI7XG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiBcIlwiKSArIFwiOlwiICsgKHN0YXRlLmNvbmRlbnNlRmxvdyA/IFwiXCIgOiBcIiBcIik7XG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcbiAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7XG4gIH1cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IFwie1wiICsgX3Jlc3VsdCArIFwifVwiO1xufVxuX19uYW1lKHdyaXRlRmxvd01hcHBpbmcsIFwid3JpdGVGbG93TWFwcGluZ1wiKTtcbmZ1bmN0aW9uIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7XG4gIHZhciBfcmVzdWx0ID0gXCJcIiwgX3RhZyA9IHN0YXRlLnRhZywgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksIGluZGV4LCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIGV4cGxpY2l0UGFpciwgcGFpckJ1ZmZlcjtcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpO1xuICB9IGVsc2UgaWYgKHN0YXRlLnNvcnRLZXlzKSB7XG4gICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcInNvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHBhaXJCdWZmZXIgPSBcIlwiO1xuICAgIGlmICghY29tcGFjdCB8fCBfcmVzdWx0ICE9PSBcIlwiKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG4gICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleF07XG4gICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTtcbiAgICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICAgIG9iamVjdFZhbHVlID0gc3RhdGUucmVwbGFjZXIuY2FsbChvYmplY3QsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RLZXksIHRydWUsIHRydWUsIHRydWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZXhwbGljaXRQYWlyID0gc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gXCI/XCIgfHwgc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQ7XG4gICAgaWYgKGV4cGxpY2l0UGFpcikge1xuICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICBwYWlyQnVmZmVyICs9IFwiP1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFpckJ1ZmZlciArPSBcIj8gXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcbiAgICBpZiAoZXhwbGljaXRQYWlyKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0VmFsdWUsIHRydWUsIGV4cGxpY2l0UGFpcikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IFwiOlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYWlyQnVmZmVyICs9IFwiOiBcIjtcbiAgICB9XG4gICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wO1xuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gX3Jlc3VsdCB8fCBcInt9XCI7XG59XG5fX25hbWUod3JpdGVCbG9ja01hcHBpbmcsIFwid3JpdGVCbG9ja01hcHBpbmdcIik7XG5mdW5jdGlvbiBkZXRlY3RUeXBlMihzdGF0ZSwgb2JqZWN0LCBleHBsaWNpdCkge1xuICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4LCBsZW5ndGgsIHR5cGUyLCBzdHlsZTtcbiAgdHlwZUxpc3QgPSBleHBsaWNpdCA/IHN0YXRlLmV4cGxpY2l0VHlwZXMgOiBzdGF0ZS5pbXBsaWNpdFR5cGVzO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUyID0gdHlwZUxpc3RbaW5kZXhdO1xuICAgIGlmICgodHlwZTIuaW5zdGFuY2VPZiB8fCB0eXBlMi5wcmVkaWNhdGUpICYmICghdHlwZTIuaW5zdGFuY2VPZiB8fCB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmIG9iamVjdCBpbnN0YW5jZW9mIHR5cGUyLmluc3RhbmNlT2YpICYmICghdHlwZTIucHJlZGljYXRlIHx8IHR5cGUyLnByZWRpY2F0ZShvYmplY3QpKSkge1xuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGlmICh0eXBlMi5tdWx0aSAmJiB0eXBlMi5yZXByZXNlbnROYW1lKSB7XG4gICAgICAgICAgc3RhdGUudGFnID0gdHlwZTIucmVwcmVzZW50TmFtZShvYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUyLnRhZztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudGFnID0gXCI/XCI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZTIucmVwcmVzZW50KSB7XG4gICAgICAgIHN0eWxlID0gc3RhdGUuc3R5bGVNYXBbdHlwZTIudGFnXSB8fCB0eXBlMi5kZWZhdWx0U3R5bGU7XG4gICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbCh0eXBlMi5yZXByZXNlbnQpID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgICAgICBfcmVzdWx0ID0gdHlwZTIucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGUyLnJlcHJlc2VudCwgc3R5bGUpKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9IHR5cGUyLnJlcHJlc2VudFtzdHlsZV0ob2JqZWN0LCBzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IGV4Y2VwdGlvbihcIiE8XCIgKyB0eXBlMi50YWcgKyAnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgXCInICsgc3R5bGUgKyAnXCIgc3R5bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoZGV0ZWN0VHlwZTIsIFwiZGV0ZWN0VHlwZVwiKTtcbmZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5LCBpc2Jsb2Nrc2VxKSB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG4gIGlmICghZGV0ZWN0VHlwZTIoc3RhdGUsIG9iamVjdCwgZmFsc2UpKSB7XG4gICAgZGV0ZWN0VHlwZTIoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cbiAgdmFyIHR5cGUyID0gX3RvU3RyaW5nLmNhbGwoc3RhdGUuZHVtcCk7XG4gIHZhciBpbmJsb2NrID0gYmxvY2s7XG4gIHZhciB0YWdTdHI7XG4gIGlmIChibG9jaykge1xuICAgIGJsb2NrID0gc3RhdGUuZmxvd0xldmVsIDwgMCB8fCBzdGF0ZS5mbG93TGV2ZWwgPiBsZXZlbDtcbiAgfVxuICB2YXIgb2JqZWN0T3JBcnJheSA9IHR5cGUyID09PSBcIltvYmplY3QgT2JqZWN0XVwiIHx8IHR5cGUyID09PSBcIltvYmplY3QgQXJyYXldXCIsIGR1cGxpY2F0ZUluZGV4LCBkdXBsaWNhdGU7XG4gIGlmIChvYmplY3RPckFycmF5KSB7XG4gICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7XG4gIH1cbiAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09IFwiP1wiIHx8IGR1cGxpY2F0ZSB8fCBzdGF0ZS5pbmRlbnQgIT09IDIgJiYgbGV2ZWwgPiAwKSB7XG4gICAgY29tcGFjdCA9IGZhbHNlO1xuICB9XG4gIGlmIChkdXBsaWNhdGUgJiYgc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgc3RhdGUuZHVtcCA9IFwiKnJlZl9cIiArIGR1cGxpY2F0ZUluZGV4O1xuICB9IGVsc2Uge1xuICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7XG4gICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZTIgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgIGlmIChibG9jayAmJiBPYmplY3Qua2V5cyhzdGF0ZS5kdW1wKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSBcIiZyZWZfXCIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSBcIiZyZWZfXCIgKyBkdXBsaWNhdGVJbmRleCArIFwiIFwiICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZTIgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgaWYgKGJsb2NrICYmIHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGlmIChzdGF0ZS5ub0FycmF5SW5kZW50ICYmICFpc2Jsb2Nrc2VxICYmIGxldmVsID4gMCkge1xuICAgICAgICAgIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwgLSAxLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9IFwiJnJlZl9cIiArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wKTtcbiAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgIHN0YXRlLmR1bXAgPSBcIiZyZWZfXCIgKyBkdXBsaWNhdGVJbmRleCArIFwiIFwiICsgc3RhdGUuZHVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZTIgPT09IFwiW29iamVjdCBTdHJpbmddXCIpIHtcbiAgICAgIGlmIChzdGF0ZS50YWcgIT09IFwiP1wiKSB7XG4gICAgICAgIHdyaXRlU2NhbGFyKHN0YXRlLCBzdGF0ZS5kdW1wLCBsZXZlbCwgaXNrZXksIGluYmxvY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZTIgPT09IFwiW29iamVjdCBVbmRlZmluZWRdXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBuZXcgZXhjZXB0aW9uKFwidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgXCIgKyB0eXBlMik7XG4gICAgfVxuICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSBcIj9cIikge1xuICAgICAgdGFnU3RyID0gZW5jb2RlVVJJKFxuICAgICAgICBzdGF0ZS50YWdbMF0gPT09IFwiIVwiID8gc3RhdGUudGFnLnNsaWNlKDEpIDogc3RhdGUudGFnXG4gICAgICApLnJlcGxhY2UoLyEvZywgXCIlMjFcIik7XG4gICAgICBpZiAoc3RhdGUudGFnWzBdID09PSBcIiFcIikge1xuICAgICAgICB0YWdTdHIgPSBcIiFcIiArIHRhZ1N0cjtcbiAgICAgIH0gZWxzZSBpZiAodGFnU3RyLnNsaWNlKDAsIDE4KSA9PT0gXCJ0YWc6eWFtbC5vcmcsMjAwMjpcIikge1xuICAgICAgICB0YWdTdHIgPSBcIiEhXCIgKyB0YWdTdHIuc2xpY2UoMTgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnU3RyID0gXCIhPFwiICsgdGFnU3RyICsgXCI+XCI7XG4gICAgICB9XG4gICAgICBzdGF0ZS5kdW1wID0gdGFnU3RyICsgXCIgXCIgKyBzdGF0ZS5kdW1wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZSh3cml0ZU5vZGUsIFwid3JpdGVOb2RlXCIpO1xuZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlKSB7XG4gIHZhciBvYmplY3RzID0gW10sIGR1cGxpY2F0ZXNJbmRleGVzID0gW10sIGluZGV4LCBsZW5ndGg7XG4gIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZHVwbGljYXRlc0luZGV4ZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHN0YXRlLmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4XV0pO1xuICB9XG4gIHN0YXRlLnVzZWREdXBsaWNhdGVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG59XG5fX25hbWUoZ2V0RHVwbGljYXRlUmVmZXJlbmNlcywgXCJnZXREdXBsaWNhdGVSZWZlcmVuY2VzXCIpO1xuZnVuY3Rpb24gaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcykge1xuICB2YXIgb2JqZWN0S2V5TGlzdCwgaW5kZXgsIGxlbmd0aDtcbiAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgaW5kZXggPSBvYmplY3RzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoZHVwbGljYXRlc0luZGV4ZXMuaW5kZXhPZihpbmRleCkgPT09IC0xKSB7XG4gICAgICAgIGR1cGxpY2F0ZXNJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4XSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtvYmplY3RLZXlMaXN0W2luZGV4XV0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuX19uYW1lKGluc3BlY3ROb2RlLCBcImluc3BlY3ROb2RlXCIpO1xuZnVuY3Rpb24gZHVtcCQxKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7XG4gIGlmICghc3RhdGUubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7XG4gIHZhciB2YWx1ZSA9IGlucHV0O1xuICBpZiAoc3RhdGUucmVwbGFjZXIpIHtcbiAgICB2YWx1ZSA9IHN0YXRlLnJlcGxhY2VyLmNhbGwoeyBcIlwiOiB2YWx1ZSB9LCBcIlwiLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgMCwgdmFsdWUsIHRydWUsIHRydWUpKSByZXR1cm4gc3RhdGUuZHVtcCArIFwiXFxuXCI7XG4gIHJldHVybiBcIlwiO1xufVxuX19uYW1lKGR1bXAkMSwgXCJkdW1wJDFcIik7XG52YXIgZHVtcF8xID0gZHVtcCQxO1xudmFyIGR1bXBlciA9IHtcbiAgZHVtcDogZHVtcF8xXG59O1xuZnVuY3Rpb24gcmVuYW1lZChmcm9tLCB0bykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRnVuY3Rpb24geWFtbC5cIiArIGZyb20gKyBcIiBpcyByZW1vdmVkIGluIGpzLXlhbWwgNC4gVXNlIHlhbWwuXCIgKyB0byArIFwiIGluc3RlYWQsIHdoaWNoIGlzIG5vdyBzYWZlIGJ5IGRlZmF1bHQuXCIpO1xuICB9O1xufVxuX19uYW1lKHJlbmFtZWQsIFwicmVuYW1lZFwiKTtcbnZhciBKU09OX1NDSEVNQSA9IGpzb247XG52YXIgbG9hZCA9IGxvYWRlcjI1LmxvYWQ7XG52YXIgbG9hZEFsbCA9IGxvYWRlcjI1LmxvYWRBbGw7XG52YXIgZHVtcCA9IGR1bXBlci5kdW1wO1xudmFyIHNhZmVMb2FkID0gcmVuYW1lZChcInNhZmVMb2FkXCIsIFwibG9hZFwiKTtcbnZhciBzYWZlTG9hZEFsbCA9IHJlbmFtZWQoXCJzYWZlTG9hZEFsbFwiLCBcImxvYWRBbGxcIik7XG52YXIgc2FmZUR1bXAgPSByZW5hbWVkKFwic2FmZUR1bXBcIiwgXCJkdW1wXCIpO1xuXG4vLyBzcmMvZGlhZ3JhbS1hcGkvZnJvbnRtYXR0ZXIudHNcbmZ1bmN0aW9uIGV4dHJhY3RGcm9udE1hdHRlcih0ZXh0KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKGZyb250TWF0dGVyUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dCxcbiAgICAgIG1ldGFkYXRhOiB7fVxuICAgIH07XG4gIH1cbiAgbGV0IHBhcnNlZCA9IGxvYWQobWF0Y2hlc1sxXSwge1xuICAgIC8vIFRvIHN1cHBvcnQgY29uZmlnLCB3ZSBuZWVkIEpTT04gc2NoZW1hLlxuICAgIC8vIGh0dHBzOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDMyMzFcbiAgICBzY2hlbWE6IEpTT05fU0NIRU1BXG4gIH0pID8/IHt9O1xuICBwYXJzZWQgPSB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWQgOiB7fTtcbiAgY29uc3QgbWV0YWRhdGEgPSB7fTtcbiAgaWYgKHBhcnNlZC5kaXNwbGF5TW9kZSkge1xuICAgIG1ldGFkYXRhLmRpc3BsYXlNb2RlID0gcGFyc2VkLmRpc3BsYXlNb2RlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHBhcnNlZC50aXRsZSkge1xuICAgIG1ldGFkYXRhLnRpdGxlID0gcGFyc2VkLnRpdGxlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHBhcnNlZC5jb25maWcpIHtcbiAgICBtZXRhZGF0YS5jb25maWcgPSBwYXJzZWQuY29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgdGV4dDogdGV4dC5zbGljZShtYXRjaGVzWzBdLmxlbmd0aCksXG4gICAgbWV0YWRhdGFcbiAgfTtcbn1cbl9fbmFtZShleHRyYWN0RnJvbnRNYXR0ZXIsIFwiZXh0cmFjdEZyb250TWF0dGVyXCIpO1xuXG4vLyBzcmMvcHJlcHJvY2Vzcy50c1xudmFyIGNsZWFudXBUZXh0ID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29kZSkgPT4ge1xuICByZXR1cm4gY29kZS5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLnJlcGxhY2UoXG4gICAgLzwoXFx3KykoW14+XSopPi9nLFxuICAgIChtYXRjaCwgdGFnLCBhdHRyaWJ1dGVzKSA9PiBcIjxcIiArIHRhZyArIGF0dHJpYnV0ZXMucmVwbGFjZSgvPVwiKFteXCJdKilcIi9nLCBcIj0nJDEnXCIpICsgXCI+XCJcbiAgKTtcbn0sIFwiY2xlYW51cFRleHRcIik7XG52YXIgcHJvY2Vzc0Zyb250bWF0dGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoY29kZSkgPT4ge1xuICBjb25zdCB7IHRleHQsIG1ldGFkYXRhIH0gPSBleHRyYWN0RnJvbnRNYXR0ZXIoY29kZSk7XG4gIGNvbnN0IHsgZGlzcGxheU1vZGUsIHRpdGxlLCBjb25maWcgPSB7fSB9ID0gbWV0YWRhdGE7XG4gIGlmIChkaXNwbGF5TW9kZSkge1xuICAgIGlmICghY29uZmlnLmdhbnR0KSB7XG4gICAgICBjb25maWcuZ2FudHQgPSB7fTtcbiAgICB9XG4gICAgY29uZmlnLmdhbnR0LmRpc3BsYXlNb2RlID0gZGlzcGxheU1vZGU7XG4gIH1cbiAgcmV0dXJuIHsgdGl0bGUsIGNvbmZpZywgdGV4dCB9O1xufSwgXCJwcm9jZXNzRnJvbnRtYXR0ZXJcIik7XG52YXIgcHJvY2Vzc0RpcmVjdGl2ZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb2RlKSA9PiB7XG4gIGNvbnN0IGluaXREaXJlY3RpdmUgPSB1dGlsc19kZWZhdWx0LmRldGVjdEluaXQoY29kZSkgPz8ge307XG4gIGNvbnN0IHdyYXBEaXJlY3RpdmVzID0gdXRpbHNfZGVmYXVsdC5kZXRlY3REaXJlY3RpdmUoY29kZSwgXCJ3cmFwXCIpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh3cmFwRGlyZWN0aXZlcykpIHtcbiAgICBpbml0RGlyZWN0aXZlLndyYXAgPSB3cmFwRGlyZWN0aXZlcy5zb21lKCh7IHR5cGU6IHR5cGUyIH0pID0+IHR5cGUyID09PSBcIndyYXBcIik7XG4gIH0gZWxzZSBpZiAod3JhcERpcmVjdGl2ZXM/LnR5cGUgPT09IFwid3JhcFwiKSB7XG4gICAgaW5pdERpcmVjdGl2ZS53cmFwID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRleHQ6IHJlbW92ZURpcmVjdGl2ZXMoY29kZSksXG4gICAgZGlyZWN0aXZlOiBpbml0RGlyZWN0aXZlXG4gIH07XG59LCBcInByb2Nlc3NEaXJlY3RpdmVzXCIpO1xuZnVuY3Rpb24gcHJlcHJvY2Vzc0RpYWdyYW0oY29kZSkge1xuICBjb25zdCBjbGVhbmVkQ29kZSA9IGNsZWFudXBUZXh0KGNvZGUpO1xuICBjb25zdCBmcm9udE1hdHRlclJlc3VsdCA9IHByb2Nlc3NGcm9udG1hdHRlcihjbGVhbmVkQ29kZSk7XG4gIGNvbnN0IGRpcmVjdGl2ZVJlc3VsdCA9IHByb2Nlc3NEaXJlY3RpdmVzKGZyb250TWF0dGVyUmVzdWx0LnRleHQpO1xuICBjb25zdCBjb25maWcgPSBjbGVhbkFuZE1lcmdlKGZyb250TWF0dGVyUmVzdWx0LmNvbmZpZywgZGlyZWN0aXZlUmVzdWx0LmRpcmVjdGl2ZSk7XG4gIGNvZGUgPSBjbGVhbnVwQ29tbWVudHMoZGlyZWN0aXZlUmVzdWx0LnRleHQpO1xuICByZXR1cm4ge1xuICAgIGNvZGUsXG4gICAgdGl0bGU6IGZyb250TWF0dGVyUmVzdWx0LnRpdGxlLFxuICAgIGNvbmZpZ1xuICB9O1xufVxuX19uYW1lKHByZXByb2Nlc3NEaWFncmFtLCBcInByZXByb2Nlc3NEaWFncmFtXCIpO1xuXG4vLyBzcmMvdXRpbHMvYmFzZTY0LnRzXG5mdW5jdGlvbiB0b0Jhc2U2NChzdHIyKSB7XG4gIGNvbnN0IHV0ZjhCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIyKTtcbiAgY29uc3QgdXRmOFN0ciA9IEFycmF5LmZyb20odXRmOEJ5dGVzLCAoYnl0ZSkgPT4gU3RyaW5nLmZyb21Db2RlUG9pbnQoYnl0ZSkpLmpvaW4oXCJcIik7XG4gIHJldHVybiBidG9hKHV0ZjhTdHIpO1xufVxuX19uYW1lKHRvQmFzZTY0LCBcInRvQmFzZTY0XCIpO1xuXG4vLyBzcmMvbWVybWFpZEFQSS50c1xudmFyIE1BWF9URVhUTEVOR1RIID0gNWU0O1xudmFyIE1BWF9URVhUTEVOR1RIX0VYQ0VFREVEX01TRyA9IFwiZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYVwiO1xudmFyIFNFQ1VSSVRZX0xWTF9TQU5EQk9YID0gXCJzYW5kYm94XCI7XG52YXIgU0VDVVJJVFlfTFZMX0xPT1NFID0gXCJsb29zZVwiO1xudmFyIFhNTE5TX1NWR19TVEQgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG52YXIgWE1MTlNfWExJTktfU1REID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG52YXIgWE1MTlNfWEhUTUxfU1REID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG52YXIgSUZSQU1FX1dJRFRIID0gXCIxMDAlXCI7XG52YXIgSUZSQU1FX0hFSUdIVCA9IFwiMTAwJVwiO1xudmFyIElGUkFNRV9TVFlMRVMgPSBcImJvcmRlcjowO21hcmdpbjowO1wiO1xudmFyIElGUkFNRV9CT0RZX1NUWUxFID0gXCJtYXJnaW46MFwiO1xudmFyIElGUkFNRV9TQU5EQk9YX09QVFMgPSBcImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHNcIjtcbnZhciBJRlJBTUVfTk9UX1NVUFBPUlRFRF9NU0cgPSAnVGhlIFwiaWZyYW1lXCIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLic7XG52YXIgRE9NUFVSSUZZX1RBR1MgPSBbXCJmb3JlaWdub2JqZWN0XCJdO1xudmFyIERPTVBVUklGWV9BVFRSID0gW1wiZG9taW5hbnQtYmFzZWxpbmVcIl07XG5mdW5jdGlvbiBwcm9jZXNzQW5kU2V0Q29uZmlncyh0ZXh0KSB7XG4gIGNvbnN0IHByb2Nlc3NlZCA9IHByZXByb2Nlc3NEaWFncmFtKHRleHQpO1xuICByZXNldCgpO1xuICBhZGREaXJlY3RpdmUocHJvY2Vzc2VkLmNvbmZpZyA/PyB7fSk7XG4gIHJldHVybiBwcm9jZXNzZWQ7XG59XG5fX25hbWUocHJvY2Vzc0FuZFNldENvbmZpZ3MsIFwicHJvY2Vzc0FuZFNldENvbmZpZ3NcIik7XG5hc3luYyBmdW5jdGlvbiBwYXJzZSh0ZXh0LCBwYXJzZU9wdGlvbnMpIHtcbiAgYWRkRGlhZ3JhbXMoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGNvZGUgfSA9IHByb2Nlc3NBbmRTZXRDb25maWdzKHRleHQpO1xuICAgIGNvbnN0IGRpYWdyYW0yID0gYXdhaXQgZ2V0RGlhZ3JhbUZyb21UZXh0KGNvZGUpO1xuICAgIHJldHVybiB7IGRpYWdyYW1UeXBlOiBkaWFncmFtMi50eXBlIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHBhcnNlT3B0aW9ucz8uc3VwcHJlc3NFcnJvcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbl9fbmFtZShwYXJzZSwgXCJwYXJzZVwiKTtcbnZhciBjc3NJbXBvcnRhbnRTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjc3NDbGFzcywgZWxlbWVudCwgY3NzQ2xhc3NlcyA9IFtdKSA9PiB7XG4gIHJldHVybiBgXG4uJHtjc3NDbGFzc30gJHtlbGVtZW50fSB7ICR7Y3NzQ2xhc3Nlcy5qb2luKFwiICFpbXBvcnRhbnQ7IFwiKX0gIWltcG9ydGFudDsgfWA7XG59LCBcImNzc0ltcG9ydGFudFN0eWxlc1wiKTtcbnZhciBjcmVhdGVDc3NTdHlsZXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChjb25maWcsIGNsYXNzRGVmcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpID0+IHtcbiAgbGV0IGNzc1N0eWxlcyA9IFwiXCI7XG4gIGlmIChjb25maWcudGhlbWVDU1MgIT09IHZvaWQgMCkge1xuICAgIGNzc1N0eWxlcyArPSBgXG4ke2NvbmZpZy50aGVtZUNTU31gO1xuICB9XG4gIGlmIChjb25maWcuZm9udEZhbWlseSAhPT0gdm9pZCAwKSB7XG4gICAgY3NzU3R5bGVzICs9IGBcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke2NvbmZpZy5mb250RmFtaWx5fX1gO1xuICB9XG4gIGlmIChjb25maWcuYWx0Rm9udEZhbWlseSAhPT0gdm9pZCAwKSB7XG4gICAgY3NzU3R5bGVzICs9IGBcbjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHtjb25maWcuYWx0Rm9udEZhbWlseX19YDtcbiAgfVxuICBpZiAoY2xhc3NEZWZzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgY29uc3QgaHRtbExhYmVscyA9IGNvbmZpZy5odG1sTGFiZWxzID8/IGNvbmZpZy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHM7XG4gICAgY29uc3QgY3NzSHRtbEVsZW1lbnRzID0gW1wiPiAqXCIsIFwic3BhblwiXTtcbiAgICBjb25zdCBjc3NTaGFwZUVsZW1lbnRzID0gW1wicmVjdFwiLCBcInBvbHlnb25cIiwgXCJlbGxpcHNlXCIsIFwiY2lyY2xlXCIsIFwicGF0aFwiXTtcbiAgICBjb25zdCBjc3NFbGVtZW50cyA9IGh0bWxMYWJlbHMgPyBjc3NIdG1sRWxlbWVudHMgOiBjc3NTaGFwZUVsZW1lbnRzO1xuICAgIGNsYXNzRGVmcy5mb3JFYWNoKChzdHlsZUNsYXNzRGVmKSA9PiB7XG4gICAgICBpZiAoIWlzRW1wdHkoc3R5bGVDbGFzc0RlZi5zdHlsZXMpKSB7XG4gICAgICAgIGNzc0VsZW1lbnRzLmZvckVhY2goKGNzc0VsZW1lbnQpID0+IHtcbiAgICAgICAgICBjc3NTdHlsZXMgKz0gY3NzSW1wb3J0YW50U3R5bGVzKHN0eWxlQ2xhc3NEZWYuaWQsIGNzc0VsZW1lbnQsIHN0eWxlQ2xhc3NEZWYuc3R5bGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzRW1wdHkoc3R5bGVDbGFzc0RlZi50ZXh0U3R5bGVzKSkge1xuICAgICAgICBjc3NTdHlsZXMgKz0gY3NzSW1wb3J0YW50U3R5bGVzKFxuICAgICAgICAgIHN0eWxlQ2xhc3NEZWYuaWQsXG4gICAgICAgICAgXCJ0c3BhblwiLFxuICAgICAgICAgIChzdHlsZUNsYXNzRGVmPy50ZXh0U3R5bGVzIHx8IFtdKS5tYXAoKHMpID0+IHMucmVwbGFjZShcImNvbG9yXCIsIFwiZmlsbFwiKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY3NzU3R5bGVzO1xufSwgXCJjcmVhdGVDc3NTdHlsZXNcIik7XG52YXIgY3JlYXRlVXNlclN0eWxlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGNvbmZpZywgZ3JhcGhUeXBlLCBjbGFzc0RlZnMsIHN2Z0lkKSA9PiB7XG4gIGNvbnN0IHVzZXJDU1NzdHlsZXMgPSBjcmVhdGVDc3NTdHlsZXMoY29uZmlnLCBjbGFzc0RlZnMpO1xuICBjb25zdCBhbGxTdHlsZXMgPSBzdHlsZXNfZGVmYXVsdChncmFwaFR5cGUsIHVzZXJDU1NzdHlsZXMsIGNvbmZpZy50aGVtZVZhcmlhYmxlcyk7XG4gIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShgJHtzdmdJZH17JHthbGxTdHlsZXN9fWApLCBzdHJpbmdpZnkpO1xufSwgXCJjcmVhdGVVc2VyU3R5bGVzXCIpO1xudmFyIGNsZWFuVXBTdmdDb2RlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoc3ZnQ29kZSA9IFwiXCIsIGluU2FuZGJveE1vZGUsIHVzZUFycm93TWFya2VyVXJscykgPT4ge1xuICBsZXQgY2xlYW5lZFVwU3ZnID0gc3ZnQ29kZTtcbiAgaWYgKCF1c2VBcnJvd01hcmtlclVybHMgJiYgIWluU2FuZGJveE1vZGUpIHtcbiAgICBjbGVhbmVkVXBTdmcgPSBjbGVhbmVkVXBTdmcucmVwbGFjZShcbiAgICAgIC9tYXJrZXItZW5kPVwidXJsXFwoW1xcZCsuLzo9P0EtWmEtei1dKj8jL2csXG4gICAgICAnbWFya2VyLWVuZD1cInVybCgjJ1xuICAgICk7XG4gIH1cbiAgY2xlYW5lZFVwU3ZnID0gZGVjb2RlRW50aXRpZXMoY2xlYW5lZFVwU3ZnKTtcbiAgY2xlYW5lZFVwU3ZnID0gY2xlYW5lZFVwU3ZnLnJlcGxhY2UoLzxicj4vZywgXCI8YnIvPlwiKTtcbiAgcmV0dXJuIGNsZWFuZWRVcFN2Zztcbn0sIFwiY2xlYW5VcFN2Z0NvZGVcIik7XG52YXIgcHV0SW50b0lGcmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHN2Z0NvZGUgPSBcIlwiLCBzdmdFbGVtZW50KSA9PiB7XG4gIGNvbnN0IGhlaWdodCA9IHN2Z0VsZW1lbnQ/LnZpZXdCb3g/LmJhc2VWYWw/LmhlaWdodCA/IHN2Z0VsZW1lbnQudmlld0JveC5iYXNlVmFsLmhlaWdodCArIFwicHhcIiA6IElGUkFNRV9IRUlHSFQ7XG4gIGNvbnN0IGJhc2U2NGVuY29kZWRTcmMgPSB0b0Jhc2U2NChgPGJvZHkgc3R5bGU9XCIke0lGUkFNRV9CT0RZX1NUWUxFfVwiPiR7c3ZnQ29kZX08L2JvZHk+YCk7XG4gIHJldHVybiBgPGlmcmFtZSBzdHlsZT1cIndpZHRoOiR7SUZSQU1FX1dJRFRIfTtoZWlnaHQ6JHtoZWlnaHR9OyR7SUZSQU1FX1NUWUxFU31cIiBzcmM9XCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PVVURi04O2Jhc2U2NCwke2Jhc2U2NGVuY29kZWRTcmN9XCIgc2FuZGJveD1cIiR7SUZSQU1FX1NBTkRCT1hfT1BUU31cIj5cbiAgJHtJRlJBTUVfTk9UX1NVUFBPUlRFRF9NU0d9XG48L2lmcmFtZT5gO1xufSwgXCJwdXRJbnRvSUZyYW1lXCIpO1xudmFyIGFwcGVuZERpdlN2Z0cgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChwYXJlbnRSb290LCBpZDI1LCBlbmNsb3NpbmdEaXZJZCwgZGl2U3R5bGUsIHN2Z1hsaW5rKSA9PiB7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdiA9IHBhcmVudFJvb3QuYXBwZW5kKFwiZGl2XCIpO1xuICBlbmNsb3NpbmdEaXYuYXR0cihcImlkXCIsIGVuY2xvc2luZ0RpdklkKTtcbiAgaWYgKGRpdlN0eWxlKSB7XG4gICAgZW5jbG9zaW5nRGl2LmF0dHIoXCJzdHlsZVwiLCBkaXZTdHlsZSk7XG4gIH1cbiAgY29uc3Qgc3ZnTm9kZSA9IGVuY2xvc2luZ0Rpdi5hcHBlbmQoXCJzdmdcIikuYXR0cihcImlkXCIsIGlkMjUpLmF0dHIoXCJ3aWR0aFwiLCBcIjEwMCVcIikuYXR0cihcInhtbG5zXCIsIFhNTE5TX1NWR19TVEQpO1xuICBpZiAoc3ZnWGxpbmspIHtcbiAgICBzdmdOb2RlLmF0dHIoXCJ4bWxuczp4bGlua1wiLCBzdmdYbGluayk7XG4gIH1cbiAgc3ZnTm9kZS5hcHBlbmQoXCJnXCIpO1xuICByZXR1cm4gcGFyZW50Um9vdDtcbn0sIFwiYXBwZW5kRGl2U3ZnR1wiKTtcbmZ1bmN0aW9uIHNhbmRib3hlZElmcmFtZShwYXJlbnROb2RlLCBpRnJhbWVJZCkge1xuICByZXR1cm4gcGFyZW50Tm9kZS5hcHBlbmQoXCJpZnJhbWVcIikuYXR0cihcImlkXCIsIGlGcmFtZUlkKS5hdHRyKFwic3R5bGVcIiwgXCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiKS5hdHRyKFwic2FuZGJveFwiLCBcIlwiKTtcbn1cbl9fbmFtZShzYW5kYm94ZWRJZnJhbWUsIFwic2FuZGJveGVkSWZyYW1lXCIpO1xudmFyIHJlbW92ZUV4aXN0aW5nRWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChkb2MsIGlkMjUsIGRpdklkLCBpRnJhbWVJZCkgPT4ge1xuICBkb2MuZ2V0RWxlbWVudEJ5SWQoaWQyNSk/LnJlbW92ZSgpO1xuICBkb2MuZ2V0RWxlbWVudEJ5SWQoZGl2SWQpPy5yZW1vdmUoKTtcbiAgZG9jLmdldEVsZW1lbnRCeUlkKGlGcmFtZUlkKT8ucmVtb3ZlKCk7XG59LCBcInJlbW92ZUV4aXN0aW5nRWxlbWVudHNcIik7XG52YXIgcmVuZGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbihpZDI1LCB0ZXh0LCBzdmdDb250YWluaW5nRWxlbWVudCkge1xuICBhZGREaWFncmFtcygpO1xuICBjb25zdCBwcm9jZXNzZWQgPSBwcm9jZXNzQW5kU2V0Q29uZmlncyh0ZXh0KTtcbiAgdGV4dCA9IHByb2Nlc3NlZC5jb2RlO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nLmRlYnVnKGNvbmZpZyk7XG4gIGlmICh0ZXh0Lmxlbmd0aCA+IChjb25maWc/Lm1heFRleHRTaXplID8/IE1BWF9URVhUTEVOR1RIKSkge1xuICAgIHRleHQgPSBNQVhfVEVYVExFTkdUSF9FWENFRURFRF9NU0c7XG4gIH1cbiAgY29uc3QgaWRTZWxlY3RvciA9IFwiI1wiICsgaWQyNTtcbiAgY29uc3QgaUZyYW1lSUQgPSBcImlcIiArIGlkMjU7XG4gIGNvbnN0IGlGcmFtZUlEX3NlbGVjdG9yID0gXCIjXCIgKyBpRnJhbWVJRDtcbiAgY29uc3QgZW5jbG9zaW5nRGl2SUQgPSBcImRcIiArIGlkMjU7XG4gIGNvbnN0IGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yID0gXCIjXCIgKyBlbmNsb3NpbmdEaXZJRDtcbiAgY29uc3QgcmVtb3ZlVGVtcEVsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gICAgY29uc3QgdG1wRWxlbWVudFNlbGVjdG9yID0gaXNTYW5kYm94ZWQgPyBpRnJhbWVJRF9zZWxlY3RvciA6IGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yO1xuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3QodG1wRWxlbWVudFNlbGVjdG9yKS5ub2RlKCk7XG4gICAgaWYgKG5vZGUgJiYgXCJyZW1vdmVcIiBpbiBub2RlKSB7XG4gICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbiAgfSwgXCJyZW1vdmVUZW1wRWxlbWVudHNcIik7XG4gIGxldCByb290ID0gc2VsZWN0KFwiYm9keVwiKTtcbiAgY29uc3QgaXNTYW5kYm94ZWQgPSBjb25maWcuc2VjdXJpdHlMZXZlbCA9PT0gU0VDVVJJVFlfTFZMX1NBTkRCT1g7XG4gIGNvbnN0IGlzTG9vc2VTZWN1cml0eUxldmVsID0gY29uZmlnLnNlY3VyaXR5TGV2ZWwgPT09IFNFQ1VSSVRZX0xWTF9MT09TRTtcbiAgY29uc3QgZm9udEZhbWlseSA9IGNvbmZpZy5mb250RmFtaWx5O1xuICBpZiAoc3ZnQ29udGFpbmluZ0VsZW1lbnQgIT09IHZvaWQgMCkge1xuICAgIGlmIChzdmdDb250YWluaW5nRWxlbWVudCkge1xuICAgICAgc3ZnQ29udGFpbmluZ0VsZW1lbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9XG4gICAgaWYgKGlzU2FuZGJveGVkKSB7XG4gICAgICBjb25zdCBpZnJhbWUgPSBzYW5kYm94ZWRJZnJhbWUoc2VsZWN0KHN2Z0NvbnRhaW5pbmdFbGVtZW50KSwgaUZyYW1lSUQpO1xuICAgICAgcm9vdCA9IHNlbGVjdChpZnJhbWUubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk7XG4gICAgICByb290Lm5vZGUoKS5zdHlsZS5tYXJnaW4gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290ID0gc2VsZWN0KHN2Z0NvbnRhaW5pbmdFbGVtZW50KTtcbiAgICB9XG4gICAgYXBwZW5kRGl2U3ZnRyhyb290LCBpZDI1LCBlbmNsb3NpbmdEaXZJRCwgYGZvbnQtZmFtaWx5OiAke2ZvbnRGYW1pbHl9YCwgWE1MTlNfWExJTktfU1REKTtcbiAgfSBlbHNlIHtcbiAgICByZW1vdmVFeGlzdGluZ0VsZW1lbnRzKGRvY3VtZW50LCBpZDI1LCBlbmNsb3NpbmdEaXZJRCwgaUZyYW1lSUQpO1xuICAgIGlmIChpc1NhbmRib3hlZCkge1xuICAgICAgY29uc3QgaWZyYW1lID0gc2FuZGJveGVkSWZyYW1lKHNlbGVjdChcImJvZHlcIiksIGlGcmFtZUlEKTtcbiAgICAgIHJvb3QgPSBzZWxlY3QoaWZyYW1lLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpO1xuICAgICAgcm9vdC5ub2RlKCkuc3R5bGUubWFyZ2luID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdCA9IHNlbGVjdChcImJvZHlcIik7XG4gICAgfVxuICAgIGFwcGVuZERpdlN2Z0cocm9vdCwgaWQyNSwgZW5jbG9zaW5nRGl2SUQpO1xuICB9XG4gIGxldCBkaWFnO1xuICBsZXQgcGFyc2VFbmNvdW50ZXJlZEV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBkaWFnID0gYXdhaXQgRGlhZ3JhbS5mcm9tVGV4dCh0ZXh0LCB7IHRpdGxlOiBwcm9jZXNzZWQudGl0bGUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGNvbmZpZy5zdXBwcmVzc0Vycm9yUmVuZGVyaW5nKSB7XG4gICAgICByZW1vdmVUZW1wRWxlbWVudHMoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBkaWFnID0gYXdhaXQgRGlhZ3JhbS5mcm9tVGV4dChcImVycm9yXCIpO1xuICAgIHBhcnNlRW5jb3VudGVyZWRFeGNlcHRpb24gPSBlcnJvcjtcbiAgfVxuICBjb25zdCBlbGVtZW50ID0gcm9vdC5zZWxlY3QoZW5jbG9zaW5nRGl2SURfc2VsZWN0b3IpLm5vZGUoKTtcbiAgY29uc3QgZGlhZ3JhbVR5cGUgPSBkaWFnLnR5cGU7XG4gIGNvbnN0IHN2ZyA9IGVsZW1lbnQuZmlyc3RDaGlsZDtcbiAgY29uc3QgZmlyc3RDaGlsZCA9IHN2Zy5maXJzdENoaWxkO1xuICBjb25zdCBkaWFncmFtQ2xhc3NEZWZzID0gZGlhZy5yZW5kZXJlci5nZXRDbGFzc2VzPy4odGV4dCwgZGlhZyk7XG4gIGNvbnN0IHJ1bGVzID0gY3JlYXRlVXNlclN0eWxlcyhjb25maWcsIGRpYWdyYW1UeXBlLCBkaWFncmFtQ2xhc3NEZWZzLCBpZFNlbGVjdG9yKTtcbiAgY29uc3Qgc3R5bGUxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBzdHlsZTEuaW5uZXJIVE1MID0gcnVsZXM7XG4gIHN2Zy5pbnNlcnRCZWZvcmUoc3R5bGUxLCBmaXJzdENoaWxkKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBkaWFnLnJlbmRlcmVyLmRyYXcodGV4dCwgaWQyNSwgdmVyc2lvbiwgZGlhZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoY29uZmlnLnN1cHByZXNzRXJyb3JSZW5kZXJpbmcpIHtcbiAgICAgIHJlbW92ZVRlbXBFbGVtZW50cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvclJlbmRlcmVyX2RlZmF1bHQuZHJhdyh0ZXh0LCBpZDI1LCB2ZXJzaW9uKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuICBjb25zdCBzdmdOb2RlID0gcm9vdC5zZWxlY3QoYCR7ZW5jbG9zaW5nRGl2SURfc2VsZWN0b3J9IHN2Z2ApO1xuICBjb25zdCBhMTF5VGl0bGUgPSBkaWFnLmRiLmdldEFjY1RpdGxlPy4oKTtcbiAgY29uc3QgYTExeURlc2NyID0gZGlhZy5kYi5nZXRBY2NEZXNjcmlwdGlvbj8uKCk7XG4gIGFkZEExMXlJbmZvKGRpYWdyYW1UeXBlLCBzdmdOb2RlLCBhMTF5VGl0bGUsIGExMXlEZXNjcik7XG4gIHJvb3Quc2VsZWN0KGBbaWQ9XCIke2lkMjV9XCJdYCkuc2VsZWN0QWxsKFwiZm9yZWlnbm9iamVjdCA+ICpcIikuYXR0cihcInhtbG5zXCIsIFhNTE5TX1hIVE1MX1NURCk7XG4gIGxldCBzdmdDb2RlID0gcm9vdC5zZWxlY3QoZW5jbG9zaW5nRGl2SURfc2VsZWN0b3IpLm5vZGUoKS5pbm5lckhUTUw7XG4gIGxvZy5kZWJ1ZyhcImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlXCIsIGNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlKTtcbiAgc3ZnQ29kZSA9IGNsZWFuVXBTdmdDb2RlKHN2Z0NvZGUsIGlzU2FuZGJveGVkLCBldmFsdWF0ZShjb25maWcuYXJyb3dNYXJrZXJBYnNvbHV0ZSkpO1xuICBpZiAoaXNTYW5kYm94ZWQpIHtcbiAgICBjb25zdCBzdmdFbCA9IHJvb3Quc2VsZWN0KGVuY2xvc2luZ0RpdklEX3NlbGVjdG9yICsgXCIgc3ZnXCIpLm5vZGUoKTtcbiAgICBzdmdDb2RlID0gcHV0SW50b0lGcmFtZShzdmdDb2RlLCBzdmdFbCk7XG4gIH0gZWxzZSBpZiAoIWlzTG9vc2VTZWN1cml0eUxldmVsKSB7XG4gICAgc3ZnQ29kZSA9IERPTVB1cmlmeS5zYW5pdGl6ZShzdmdDb2RlLCB7XG4gICAgICBBRERfVEFHUzogRE9NUFVSSUZZX1RBR1MsXG4gICAgICBBRERfQVRUUjogRE9NUFVSSUZZX0FUVFJcbiAgICB9KTtcbiAgfVxuICBhdHRhY2hGdW5jdGlvbnMoKTtcbiAgaWYgKHBhcnNlRW5jb3VudGVyZWRFeGNlcHRpb24pIHtcbiAgICB0aHJvdyBwYXJzZUVuY291bnRlcmVkRXhjZXB0aW9uO1xuICB9XG4gIHJlbW92ZVRlbXBFbGVtZW50cygpO1xuICByZXR1cm4ge1xuICAgIGRpYWdyYW1UeXBlLFxuICAgIHN2Zzogc3ZnQ29kZSxcbiAgICBiaW5kRnVuY3Rpb25zOiBkaWFnLmRiLmJpbmRGdW5jdGlvbnNcbiAgfTtcbn0sIFwicmVuZGVyXCIpO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZSh1c2VyT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBhc3NpZ25XaXRoRGVwdGhfZGVmYXVsdCh7fSwgdXNlck9wdGlvbnMpO1xuICBpZiAob3B0aW9ucz8uZm9udEZhbWlseSAmJiAhb3B0aW9ucy50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSkge1xuICAgIGlmICghb3B0aW9ucy50aGVtZVZhcmlhYmxlcykge1xuICAgICAgb3B0aW9ucy50aGVtZVZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkgPSBvcHRpb25zLmZvbnRGYW1pbHk7XG4gIH1cbiAgc2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplKG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucz8udGhlbWUgJiYgb3B0aW9ucy50aGVtZSBpbiB0aGVtZXNfZGVmYXVsdCkge1xuICAgIG9wdGlvbnMudGhlbWVWYXJpYWJsZXMgPSB0aGVtZXNfZGVmYXVsdFtvcHRpb25zLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhcbiAgICAgIG9wdGlvbnMudGhlbWVWYXJpYWJsZXNcbiAgICApO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLnRoZW1lVmFyaWFibGVzID0gdGhlbWVzX2RlZmF1bHQuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcyhvcHRpb25zLnRoZW1lVmFyaWFibGVzKTtcbiAgfVxuICBjb25zdCBjb25maWcgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIiA/IHNldFNpdGVDb25maWcob3B0aW9ucykgOiBnZXRTaXRlQ29uZmlnKCk7XG4gIHNldExvZ0xldmVsKGNvbmZpZy5sb2dMZXZlbCk7XG4gIGFkZERpYWdyYW1zKCk7XG59XG5fX25hbWUoaW5pdGlhbGl6ZSwgXCJpbml0aWFsaXplXCIpO1xudmFyIGdldERpYWdyYW1Gcm9tVGV4dCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHRleHQsIG1ldGFkYXRhID0ge30pID0+IHtcbiAgY29uc3QgeyBjb2RlIH0gPSBwcmVwcm9jZXNzRGlhZ3JhbSh0ZXh0KTtcbiAgcmV0dXJuIERpYWdyYW0uZnJvbVRleHQoY29kZSwgbWV0YWRhdGEpO1xufSwgXCJnZXREaWFncmFtRnJvbVRleHRcIik7XG5mdW5jdGlvbiBhZGRBMTF5SW5mbyhkaWFncmFtVHlwZSwgc3ZnTm9kZSwgYTExeVRpdGxlLCBhMTF5RGVzY3IpIHtcbiAgc2V0QTExeURpYWdyYW1JbmZvKHN2Z05vZGUsIGRpYWdyYW1UeXBlKTtcbiAgYWRkU1ZHYTExeVRpdGxlRGVzY3JpcHRpb24oc3ZnTm9kZSwgYTExeVRpdGxlLCBhMTF5RGVzY3IsIHN2Z05vZGUuYXR0cihcImlkXCIpKTtcbn1cbl9fbmFtZShhZGRBMTF5SW5mbywgXCJhZGRBMTF5SW5mb1wiKTtcbnZhciBtZXJtYWlkQVBJID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlbmRlcixcbiAgcGFyc2UsXG4gIGdldERpYWdyYW1Gcm9tVGV4dCxcbiAgaW5pdGlhbGl6ZSxcbiAgZ2V0Q29uZmlnLFxuICBzZXRDb25maWcsXG4gIGdldFNpdGVDb25maWcsXG4gIHVwZGF0ZVNpdGVDb25maWcsXG4gIHJlc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IHtcbiAgICByZXNldCgpO1xuICB9LCBcInJlc2V0XCIpLFxuICBnbG9iYWxSZXNldDogLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiB7XG4gICAgcmVzZXQoZGVmYXVsdENvbmZpZyk7XG4gIH0sIFwiZ2xvYmFsUmVzZXRcIiksXG4gIGRlZmF1bHRDb25maWdcbn0pO1xuc2V0TG9nTGV2ZWwoZ2V0Q29uZmlnKCkubG9nTGV2ZWwpO1xucmVzZXQoZ2V0Q29uZmlnKCkpO1xuXG4vLyBzcmMvbWVybWFpZC50c1xudmFyIGhhbmRsZUVycm9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoZXJyb3IsIGVycm9ycywgcGFyc2VFcnJvcikgPT4ge1xuICBsb2cud2FybihlcnJvcik7XG4gIGlmIChpc0RldGFpbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgIHBhcnNlRXJyb3IoZXJyb3Iuc3RyLCBlcnJvci5oYXNoKTtcbiAgICB9XG4gICAgZXJyb3JzLnB1c2goeyAuLi5lcnJvciwgbWVzc2FnZTogZXJyb3Iuc3RyLCBlcnJvciB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgcGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIHN0cjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgaGFzaDogZXJyb3IubmFtZSxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSwgXCJoYW5kbGVFcnJvclwiKTtcbnZhciBydW4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKG9wdGlvbnMgPSB7XG4gIHF1ZXJ5U2VsZWN0b3I6IFwiLm1lcm1haWRcIlxufSkge1xuICB0cnkge1xuICAgIGF3YWl0IHJ1blRocm93c0Vycm9ycyhvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChpc0RldGFpbGVkRXJyb3IoZSkpIHtcbiAgICAgIGxvZy5lcnJvcihlLnN0cik7XG4gICAgfVxuICAgIGlmIChtZXJtYWlkLnBhcnNlRXJyb3IpIHtcbiAgICAgIG1lcm1haWQucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLnN1cHByZXNzRXJyb3JzKSB7XG4gICAgICBsb2cuZXJyb3IoXCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnNcIik7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufSwgXCJydW5cIik7XG52YXIgcnVuVGhyb3dzRXJyb3JzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShhc3luYyBmdW5jdGlvbih7IHBvc3RSZW5kZXJDYWxsYmFjaywgcXVlcnlTZWxlY3Rvciwgbm9kZXMgfSA9IHtcbiAgcXVlcnlTZWxlY3RvcjogXCIubWVybWFpZFwiXG59KSB7XG4gIGNvbnN0IGNvbmYgPSBtZXJtYWlkQVBJLmdldENvbmZpZygpO1xuICBsb2cuZGVidWcoYCR7IXBvc3RSZW5kZXJDYWxsYmFjayA/IFwiTm8gXCIgOiBcIlwifUNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kYCk7XG4gIGxldCBub2Rlc1RvUHJvY2VzcztcbiAgaWYgKG5vZGVzKSB7XG4gICAgbm9kZXNUb1Byb2Nlc3MgPSBub2RlcztcbiAgfSBlbHNlIGlmIChxdWVyeVNlbGVjdG9yKSB7XG4gICAgbm9kZXNUb1Byb2Nlc3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5U2VsZWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZFwiKTtcbiAgfVxuICBsb2cuZGVidWcoYEZvdW5kICR7bm9kZXNUb1Byb2Nlc3MubGVuZ3RofSBkaWFncmFtc2ApO1xuICBpZiAoY29uZj8uc3RhcnRPbkxvYWQgIT09IHZvaWQgMCkge1xuICAgIGxvZy5kZWJ1ZyhcIlN0YXJ0IE9uIExvYWQ6IFwiICsgY29uZj8uc3RhcnRPbkxvYWQpO1xuICAgIG1lcm1haWRBUEkudXBkYXRlU2l0ZUNvbmZpZyh7IHN0YXJ0T25Mb2FkOiBjb25mPy5zdGFydE9uTG9hZCB9KTtcbiAgfVxuICBjb25zdCBpZEdlbmVyYXRvciA9IG5ldyB1dGlsc19kZWZhdWx0LkluaXRJREdlbmVyYXRvcihjb25mLmRldGVybWluaXN0aWNJZHMsIGNvbmYuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7XG4gIGxldCB0eHQ7XG4gIGNvbnN0IGVycm9ycyA9IFtdO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgQXJyYXkuZnJvbShub2Rlc1RvUHJvY2VzcykpIHtcbiAgICBsb2cuaW5mbyhcIlJlbmRlcmluZyBkaWFncmFtOiBcIiArIGVsZW1lbnQuaWQpO1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtcHJvY2Vzc2VkXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXByb2Nlc3NlZFwiLCBcInRydWVcIik7XG4gICAgY29uc3QgaWQyNSA9IGBtZXJtYWlkLSR7aWRHZW5lcmF0b3IubmV4dCgpfWA7XG4gICAgdHh0ID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgdHh0ID0gZGVkZW50KHV0aWxzX2RlZmF1bHQuZW50aXR5RGVjb2RlKHR4dCkpLnRyaW0oKS5yZXBsYWNlKC88YnJcXHMqXFwvPz4vZ2ksIFwiPGJyLz5cIik7XG4gICAgY29uc3QgaW5pdDIgPSB1dGlsc19kZWZhdWx0LmRldGVjdEluaXQodHh0KTtcbiAgICBpZiAoaW5pdDIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogXCIsIGluaXQyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc3ZnLCBiaW5kRnVuY3Rpb25zIH0gPSBhd2FpdCByZW5kZXIyKGlkMjUsIHR4dCwgZWxlbWVudCk7XG4gICAgICBlbGVtZW50LmlubmVySFRNTCA9IHN2ZztcbiAgICAgIGlmIChwb3N0UmVuZGVyQ2FsbGJhY2spIHtcbiAgICAgICAgYXdhaXQgcG9zdFJlbmRlckNhbGxiYWNrKGlkMjUpO1xuICAgICAgfVxuICAgICAgaWYgKGJpbmRGdW5jdGlvbnMpIHtcbiAgICAgICAgYmluZEZ1bmN0aW9ucyhlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIGVycm9ycywgbWVybWFpZC5wYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgZXJyb3JzWzBdO1xuICB9XG59LCBcInJ1blRocm93c0Vycm9yc1wiKTtcbnZhciBpbml0aWFsaXplMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oY29uZmlnKSB7XG4gIG1lcm1haWRBUEkuaW5pdGlhbGl6ZShjb25maWcpO1xufSwgXCJpbml0aWFsaXplXCIpO1xudmFyIGluaXQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIGZ1bmN0aW9uKGNvbmZpZywgbm9kZXMsIGNhbGxiYWNrKSB7XG4gIGxvZy53YXJuKFwibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuXCIpO1xuICBpZiAoY29uZmlnKSB7XG4gICAgaW5pdGlhbGl6ZTIoY29uZmlnKTtcbiAgfVxuICBjb25zdCBydW5PcHRpb25zID0geyBwb3N0UmVuZGVyQ2FsbGJhY2s6IGNhbGxiYWNrLCBxdWVyeVNlbGVjdG9yOiBcIi5tZXJtYWlkXCIgfTtcbiAgaWYgKHR5cGVvZiBub2RlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJ1bk9wdGlvbnMucXVlcnlTZWxlY3RvciA9IG5vZGVzO1xuICB9IGVsc2UgaWYgKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubm9kZXMgPSBbbm9kZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBydW5PcHRpb25zLm5vZGVzID0gbm9kZXM7XG4gICAgfVxuICB9XG4gIGF3YWl0IHJ1bihydW5PcHRpb25zKTtcbn0sIFwiaW5pdFwiKTtcbnZhciByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGFzeW5jIChkaWFncmFtcywge1xuICBsYXp5TG9hZCA9IHRydWVcbn0gPSB7fSkgPT4ge1xuICBhZGREaWFncmFtcygpO1xuICByZWdpc3RlckxhenlMb2FkZWREaWFncmFtcyguLi5kaWFncmFtcyk7XG4gIGlmIChsYXp5TG9hZCA9PT0gZmFsc2UpIHtcbiAgICBhd2FpdCBsb2FkUmVnaXN0ZXJlZERpYWdyYW1zKCk7XG4gIH1cbn0sIFwicmVnaXN0ZXJFeHRlcm5hbERpYWdyYW1zXCIpO1xudmFyIGNvbnRlbnRMb2FkZWQgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICBpZiAobWVybWFpZC5zdGFydE9uTG9hZCkge1xuICAgIGNvbnN0IHsgc3RhcnRPbkxvYWQgfSA9IG1lcm1haWRBUEkuZ2V0Q29uZmlnKCk7XG4gICAgaWYgKHN0YXJ0T25Mb2FkKSB7XG4gICAgICBtZXJtYWlkLnJ1bigpLmNhdGNoKChlcnIpID0+IGxvZy5lcnJvcihcIk1lcm1haWQgZmFpbGVkIHRvIGluaXRpYWxpemVcIiwgZXJyKSk7XG4gICAgfVxuICB9XG59LCBcImNvbnRlbnRMb2FkZWRcIik7XG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBjb250ZW50TG9hZGVkLCBmYWxzZSk7XG59XG52YXIgc2V0UGFyc2VFcnJvckhhbmRsZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKHBhcnNlRXJyb3JIYW5kbGVyKSB7XG4gIG1lcm1haWQucGFyc2VFcnJvciA9IHBhcnNlRXJyb3JIYW5kbGVyO1xufSwgXCJzZXRQYXJzZUVycm9ySGFuZGxlclwiKTtcbnZhciBleGVjdXRpb25RdWV1ZSA9IFtdO1xudmFyIGV4ZWN1dGlvblF1ZXVlUnVubmluZyA9IGZhbHNlO1xudmFyIGV4ZWN1dGVRdWV1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKCkgPT4ge1xuICBpZiAoZXhlY3V0aW9uUXVldWVSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV4ZWN1dGlvblF1ZXVlUnVubmluZyA9IHRydWU7XG4gIHdoaWxlIChleGVjdXRpb25RdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZiA9IGV4ZWN1dGlvblF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKGYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGYoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKFwiRXJyb3IgZXhlY3V0aW5nIHF1ZXVlXCIsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBleGVjdXRpb25RdWV1ZVJ1bm5pbmcgPSBmYWxzZTtcbn0sIFwiZXhlY3V0ZVF1ZXVlXCIpO1xudmFyIHBhcnNlMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoYXN5bmMgKHRleHQsIHBhcnNlT3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBlcmZvcm1DYWxsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIG1lcm1haWRBUEkucGFyc2UodGV4dCwgcGFyc2VPcHRpb25zKS50aGVuKFxuICAgICAgICAocikgPT4ge1xuICAgICAgICAgIHJlcyhyKTtcbiAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICB9LFxuICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihcIkVycm9yIHBhcnNpbmdcIiwgZSk7XG4gICAgICAgICAgbWVybWFpZC5wYXJzZUVycm9yPy4oZSk7XG4gICAgICAgICAgcmVqKGUpO1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KSwgXCJwZXJmb3JtQ2FsbFwiKTtcbiAgICBleGVjdXRpb25RdWV1ZS5wdXNoKHBlcmZvcm1DYWxsKTtcbiAgICBleGVjdXRlUXVldWUoKS5jYXRjaChyZWplY3QpO1xuICB9KTtcbn0sIFwicGFyc2VcIik7XG52YXIgcmVuZGVyMiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGlkMjUsIHRleHQsIGNvbnRhaW5lcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBlcmZvcm1DYWxsID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIG1lcm1haWRBUEkucmVuZGVyKGlkMjUsIHRleHQsIGNvbnRhaW5lcikudGhlbihcbiAgICAgICAgKHIpID0+IHtcbiAgICAgICAgICByZXMocik7XG4gICAgICAgICAgcmVzb2x2ZShyKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGUpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJFcnJvciBwYXJzaW5nXCIsIGUpO1xuICAgICAgICAgIG1lcm1haWQucGFyc2VFcnJvcj8uKGUpO1xuICAgICAgICAgIHJlaihlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSksIFwicGVyZm9ybUNhbGxcIik7XG4gICAgZXhlY3V0aW9uUXVldWUucHVzaChwZXJmb3JtQ2FsbCk7XG4gICAgZXhlY3V0ZVF1ZXVlKCkuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG59LCBcInJlbmRlclwiKTtcbnZhciBtZXJtYWlkID0ge1xuICBzdGFydE9uTG9hZDogdHJ1ZSxcbiAgbWVybWFpZEFQSSxcbiAgcGFyc2U6IHBhcnNlMixcbiAgcmVuZGVyOiByZW5kZXIyLFxuICBpbml0LFxuICBydW4sXG4gIHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyxcbiAgcmVnaXN0ZXJMYXlvdXRMb2FkZXJzLFxuICBpbml0aWFsaXplOiBpbml0aWFsaXplMixcbiAgcGFyc2VFcnJvcjogdm9pZCAwLFxuICBjb250ZW50TG9hZGVkLFxuICBzZXRQYXJzZUVycm9ySGFuZGxlcixcbiAgZGV0ZWN0VHlwZSxcbiAgcmVnaXN0ZXJJY29uUGFja3Ncbn07XG52YXIgbWVybWFpZF9kZWZhdWx0ID0gbWVybWFpZDtcbmV4cG9ydCB7XG4gIG1lcm1haWRfZGVmYXVsdCBhcyBkZWZhdWx0XG59O1xuLyohIENoZWNrIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovXG4vKiFcbiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvblxuICovXG4vKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOlxuXG5qcy15YW1sL2Rpc3QvanMteWFtbC5tanM6XG4gICgqISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKilcbiovXG4iLAogICAgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuZXhwb3J0IHZhciBTQ09QRSA9ICdAc2NvcGUnXG4iLAogICAgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoLCBwb3NpdGlvbikge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlciAoYXJyYXksIHBhdHRlcm4pIHtcblx0cmV0dXJuIGFycmF5LmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuICFtYXRjaCh2YWx1ZSwgcGF0dGVybikgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7b2JqZWN0W119IHNpYmxpbmdzXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCwgc2libGluZ3MpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnLCBzaWJsaW5nczogc2libGluZ3N9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCwgcm9vdC5zaWJsaW5ncyksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaWZ0IChyb290KSB7XG5cdHdoaWxlIChyb290LnJvb3QpXG5cdFx0cm9vdCA9IGNvcHkocm9vdC5yb290LCB7Y2hpbGRyZW46IFtyb290XX0pXG5cblx0YXBwZW5kKHJvb3QsIHJvb3Quc2libGluZ3MpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwKICAgICJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgdG9rZW4sIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicsIGFicyhpbmRleCA/IHBvaW50c1tpbmRleCAtIDFdIDogMCkpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50LCBkZWNsYXJhdGlvbnMpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRpZiAoKHRva2VuKHByZXZpb3VzIHx8IDEpID09IDUgfHwgdG9rZW4ocGVlaygpIHx8IDEpID09IDUpICYmIHN0cmxlbihjaGFyYWN0ZXJzKSAmJiBzdWJzdHIoY2hhcmFjdGVycywgLTEsIHZvaWQgMCkgIT09ICcgJykgY2hhcmFjdGVycyArPSAnICdcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGggfHwgKHZhcmlhYmxlID09PSAwICYmIHByZXZpb3VzID09PSA0NykpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSwgZGVjbGFyYXRpb25zKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiwgZGVjbGFyYXRpb25zKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoLCBydWxlc2V0cyksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCwgY2hpbGRyZW4pLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoLCBzaWJsaW5ncykge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCwgc2libGluZ3MpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHNpYmxpbmdzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBzaWJsaW5ncykge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwLCBzaWJsaW5ncylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgsIHNpYmxpbmdzKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgsIHNpYmxpbmdzKVxufVxuIiwKICAgICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBpZiAoIXN0cmxlbihlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJykpKSByZXR1cm4gJydcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsCiAgICAiaW1wb3J0IG1lcm1haWQgZnJvbSBcIm1lcm1haWRcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkai1vbmxvYWRcIiwgKCkgPT4ge1xuICBjb25zdCBJU19EQVJLX01PREUgPVxuICAgIHdpbmRvdy5tYXRjaE1lZGlhICYmXG4gICAgd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpLm1hdGNoZXM7XG5cbiAgLy8gUmVwbGFjZSBhbGwgPHByZT48Y29kZSBjbGFzcz1cImxhbmd1YWdlLW1lcm1haWRcIj4uLi48L2NvZGU+PC9wcmU+IHdpdGgganVzdCA8cHJlIGNsYXNzPVwibWVybWFpZFwiPjwvcHJlPlxuICBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZSBjb2RlLmxhbmd1YWdlLW1lcm1haWRcIildLm1hcCgoY29kZUVsKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gY29kZUVsLnBhcmVudEVsZW1lbnQhO1xuICAgIHBhcmVudC5pbm5lckhUTUwgPSBjb2RlRWwuaW5uZXJIVE1MO1xuICAgIHBhcmVudC5jbGFzc05hbWUgPSBcImxhbmd1YWdlLW1lcm1haWRcIjtcbiAgfSk7XG5cbiAgbWVybWFpZC5pbml0aWFsaXplKHtcbiAgICB0aGVtZTogSVNfREFSS19NT0RFID8gXCJkYXJrXCIgOiBcImRlZmF1bHRcIixcbiAgICBkYXJrTW9kZTogSVNfREFSS19NT0RFLFxuICB9KTtcblxuICBtZXJtYWlkLnJ1bih7IHF1ZXJ5U2VsZWN0b3I6IFwiLmxhbmd1YWdlLW1lcm1haWRcIiB9KTtcbn0pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIml2QkFBQSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBaUIsSUFBakIsaUJBQThDLElBQXBCLFlBQTJCLEdBQU8sUUFBUSxFQUFFLFNBQXFCLFFBQW5CLFlBQTJCLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxTQUFzQixZQUFwQixZQUErQixXQUFXLEdBQUcsTUFBTSxNQUFNLEVBQUUsSUFBRyxXQUFjLEVBQUUsQ0FBYyxJQUFJLEVBQUUsS0FBSSxFQUFFLE1BQUksRUFBRSxRQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSw2RkFBNkYsRUFBRSxzRkFBc0YsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLDJEQUEyRCxNQUFNLEdBQUcsRUFBRSxPQUFPLHdGQUF3RixNQUFNLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUcsR0FBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxRQUFRLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBZ0IsSUFBSixPQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxpQkFBaUIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLGFBQWEsTUFBTSxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQW9CLEdBQWpCLFNBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksU0FBbUIsR0FBakIsU0FBbUIsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsVUFBVSxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBUSxLQUFKLEVBQWEsSUFBSixHQUFFLEVBQU0sR0FBVSxJQUFQLEtBQVMsT0FBTyxJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksS0FBSyxHQUFHLGFBQWEsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsVUFBb0IsR0FBakIsV0FBcUIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLGdCQUFnQixFQUFFLENBQUMsT0FBUSxLQUFLLEdBQUcsU0FBUyxJQUFJLEdBQUksRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sS0FBSyxRQUFRLEVBQUUsSUFBRyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEtBQUssR0FBRyxRQUFRLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sS0FBSyxHQUFHLE1BQU0sSUFBSSxPQUFPLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFFLEtBQUssUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLGVBQWUsQ0FBQyxVQUFVLE9BQU8sS0FBSyxNQUFNLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGVBQWUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBUSxJQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLFFBQVEsRUFBRSxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxXQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxFQUFFLFFBQVEsVUFBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sV0FBVyxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sS0FBSyxPQUFPLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sT0FBTyxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxNQUFNLE9BQU8sR0FBRSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsTUFBTSxPQUFPLE9BQU8sR0FBRSxFQUFFLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxNQUFNLEtBQUssT0FBTyxHQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sTUFBTSxPQUFPLEdBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxPQUFPLE9BQU8sRUFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxPQUFPLEVBQUUsRUFBRSxNQUFNLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLE1BQU0sT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFHLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLE1BQU8sS0FBSSxLQUFLLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLFVBQVUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFPLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxTQUFNLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxZQUFZLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUMsT0FBTyxLQUFLLEdBQUcsWUFBWSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLEtB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S0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLE1BQU8sTUFBTyxFQUFHLElBQUksRUFDaEMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUMvQixNQUFPLENBQUMsRUFBRyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDL0IsTUFBTyxDQUFDLEVBQUcsSUFBSyxFQUFHLEVBQUcsT0FBTyxFQUM3QixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNoQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDOUIsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDOUIsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsQ0FBRyxFQUNqQyxPQUFRLENBQUMsT0FBUSxNQUFPLEVBQUcsRUFBRyxDQUFHLEVBQ2pDLE9BQVEsQ0FBQyxPQUFRLE1BQU8sRUFBRyxFQUFHLENBQUcsRUFDakMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsT0FBUSxNQUFPLEVBQUcsRUFBRyxDQUFHLEVBQ2pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDcEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxPQUFRLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxHQUFHLEVBQzVCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxPQUFRLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDaEMsT0FBUSxDQUFDLEVBQUcsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLE9BQU8sRUFDdEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDaEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbkMsUUFBUyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLENBQzNDLEVBQ0Esc0JBQXVCLENBQ3JCLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLFFBQVMsUUFBUyxPQUFRLFFBQVMsT0FBTyxFQUNqRCxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNsRCxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsTUFBTSxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE1BQU0sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLFFBQVMsT0FBTyxFQUMxQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE1BQU0sRUFDM0MsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNsRCxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksQ0FDMUIsRUFDQSxrQkFBbUIsQ0FDakIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsTUFBTSxFQUMvQixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDaEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxRQUFTLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDbEMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsUUFBUyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sQ0FDckMsRUFDQSxZQUFhLENBQ1gsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ2pDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQzNCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDL0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUN2QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQzNDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEtBQU0sUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNsQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3RDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3RDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN0QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDdEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ2hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ25DLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxLQUFLLEVBQ2hDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN2QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3ZDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDdkMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzlDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN2QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDdkMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3ZDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUN2QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUMvQixPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsUUFBUyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDL0IsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUMsQ0FDckMsRUFDQSxrQkFBbUIsQ0FDakIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxLQUFNLENBQUMsUUFBUyxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3pDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLFNBQVUsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLE9BQVEsRUFBRyxPQUFPLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUNyQyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDekMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLE1BQU8sRUFBRyxPQUFPLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDekMsTUFBTyxDQUFDLFFBQVMsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUM1QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLE1BQU8sRUFBRyxPQUFPLEVBQzNDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxLQUFNLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDMUMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLE1BQU8sRUFBRyxPQUFPLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsTUFBTyxFQUFHLE9BQU8sRUFDckMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUMzQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxDQUMxQyxFQUNBLGNBQWUsQ0FDYixLQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3ZCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDekMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLFFBQVMsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUMzQyxLQUFNLENBQUMsU0FBVSxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxPQUFRLEVBQUcsT0FBTyxFQUNyQyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN6QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDbkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsSUFBSSxFQUNuQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDcEMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQzFDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDcEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDMUMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQ3BDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUMxQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLE9BQVEsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxDQUNwQyxFQUNBLGVBQWdCLENBQ2QsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxHQUFHLEVBQy9CLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxHQUFHLEVBQ3pCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLE9BQVEsT0FBUSxFQUFHLEVBQUcsT0FBTyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsSUFBSSxFQUNuQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLEVBQUcsSUFBSSxFQUNqQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEtBQU0sUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEtBQU0sUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNoQyxNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3hCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDOUIsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNoQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3BDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDOUMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDcEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxHQUFHLEVBQzlCLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDcEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDcEMsT0FBUSxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsQ0FBRyxFQUNoQyxPQUFRLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ2xDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxDQUFHLEVBQ2hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsTUFBTSxFQUM3QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDakMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLE9BQU8sRUFDdEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDOUIsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ3JDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsSUFBSyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUM5QixPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDOUMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLE9BQVEsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxDQUFHLEVBQ2xDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLENBQUcsRUFDbEMsT0FBUSxDQUFDLE9BQVEsT0FBUSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsT0FBUSxPQUFRLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxPQUFRLE9BQVEsRUFBRyxFQUFHLE9BQU8sRUFDdEMsT0FBUSxDQUFDLE9BQVEsT0FBUSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxNQUFPLEtBQU0sRUFBRyxFQUFHLEtBQUssRUFDakMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDckMsT0FBUSxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsR0FBRyxFQUNoQyxPQUFRLENBQUMsS0FBTSxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ2pDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLEtBQU0sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNqQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLENBQUcsRUFDckMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsQ0FBRyxFQUNyQyxPQUFRLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ2xDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNyQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUMvQixPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDeEMsUUFBUyxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLFFBQVMsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsUUFBUyxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxRQUFTLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ25DLFFBQVMsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsUUFBUyxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxRQUFTLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ25DLFFBQVMsQ0FBQyxNQUFPLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbkMsUUFBUyxDQUFDLE1BQU8sTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNuQyxRQUFTLENBQUMsTUFBTyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ25DLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDaEMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN6QyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3pDLFFBQVMsQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLENBQUMsQ0FDckMsRUFDQSxrQkFBbUIsQ0FDakIsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsTUFBTSxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsTUFBTSxFQUNoQyxNQUFPLENBQUMsUUFBUyxRQUFTLE9BQVEsRUFBRyxPQUFPLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUN0QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsTUFBTSxFQUN0QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUN6QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsS0FBSyxFQUNyQyxPQUFRLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxNQUFNLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsUUFBUyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNuQyxRQUFTLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLENBQzNDLEVBQ0EsY0FBZSxDQUNiLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxJQUFJLEVBQ25DLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE1BQU0sRUFDM0MsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxNQUFNLEVBQzNDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM1QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDNUMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDbkQsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNuRCxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQ25ELE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNuRCxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxLQUFNLFFBQVMsT0FBTyxFQUMxQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxNQUFNLEVBQzVDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsT0FBUSxRQUFTLE1BQU0sRUFDM0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUNuRCxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxNQUFNLEVBQ2xELE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDbkQsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLFFBQVMsTUFBTSxFQUNsRCxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQ25ELE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxPQUFRLFFBQVMsT0FBTyxFQUM1QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDN0MsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM3QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsUUFBUyxPQUFPLEVBQ25ELE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsUUFBUyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxFQUM5QyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsUUFBUyxNQUFNLEVBQ3ZDLFFBQVMsQ0FBQyxFQUFHLFFBQVMsRUFBRyxRQUFTLE9BQU8sRUFDekMsUUFBUyxDQUFDLFFBQVMsUUFBUyxFQUFHLFFBQVMsT0FBTyxDQUNqRCxFQUNBLGlCQUFrQixDQUNoQixLQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3ZCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLElBQUksRUFDaEMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLEtBQU0sRUFBRyxFQUFHLElBQUksRUFDMUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzdCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDN0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM3QixLQUFNLENBQUMsS0FBTSxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLElBQUksRUFDMUMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDekMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsS0FBTSxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDOUIsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLElBQUksRUFDOUIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsSUFBSSxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxJQUFJLEVBQzlCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxJQUFJLEVBQ3JDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxDQUNwQyxFQUNBLG1CQUFvQixDQUNsQixLQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxJQUFJLEVBQ3ZCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzVDLEtBQU0sQ0FBQyxRQUFTLEtBQU0sUUFBUyxFQUFHLEdBQUcsRUFDckMsS0FBTSxDQUFDLFFBQVMsS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN6QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLEtBQU0sUUFBUyxFQUFHLEdBQUcsRUFDL0IsS0FBTSxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxLQUFNLENBQUMsTUFBTyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNsQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ2xDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsTUFBTyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzFDLEtBQU0sQ0FBQyxNQUFPLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdkMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLE1BQU8sUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUMxQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxNQUFNLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsT0FBTyxFQUNyQyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsS0FBTSxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxPQUFRLEVBQUcsR0FBRyxFQUNqQyxLQUFNLENBQUMsS0FBTSxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3JDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDekMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxRQUFTLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDNUMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLE9BQU8sRUFDdEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDN0MsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsS0FBTSxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ3RDLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDeEIsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNuQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLEVBQUcsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQzdDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsT0FBUSxFQUFHLEdBQUcsRUFDbEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNuQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLEVBQ25DLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDbkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDcEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsQ0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDeEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxHQUFHLENBQ3RDLEVBQ0Esb0JBQXFCLENBQ25CLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBQUksRUFDdkIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdEMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUMvQixLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsS0FBTSxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsR0FBRyxFQUN6QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxNQUFPLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDNUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM1QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxNQUFPLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDcEMsS0FBTSxDQUFDLE1BQU8sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNqQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsTUFBTyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE1BQU0sRUFDL0IsS0FBTSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN0QyxLQUFNLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3RDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxNQUFPLEVBQUcsT0FBTyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxLQUFNLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDaEMsS0FBTSxDQUFDLEtBQU0sS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzVCLEtBQU0sQ0FBQyxLQUFNLFFBQVMsUUFBUyxFQUFHLEdBQUcsRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNoQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2hDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDaEMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUN6QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsUUFBUyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUN2QyxNQUFPLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxPQUFPLEVBQ3ZDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsUUFBUyxRQUFTLEVBQUcsT0FBTyxFQUM3QyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxLQUFNLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDaEMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDdkMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxHQUFHLEVBQzdCLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEdBQUcsRUFDN0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsR0FBRyxFQUM3QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxPQUFPLEVBQ2pDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDakMsT0FBUSxDQUFDLEVBQUcsUUFBUyxRQUFTLEVBQUcsR0FBRyxFQUNwQyxPQUFRLENBQUMsRUFBRyxRQUFTLFFBQVMsRUFBRyxDQUFHLEVBQ3BDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFH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QUFHLE9BQU8sRUFDakMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsT0FBTyxFQUNqQyxPQUFRLENBQUMsU0FBVSxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQU8sSUFBSyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsUUFBTyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsQ0FBRyxFQUNqQyxPQUFRLENBQUMsU0FBVSxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3ZDLE9BQVEsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsTUFBTyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxPQUFRLENBQUMsTUFBTyxNQUFPLFFBQVMsRUFBRyxPQUFPLEVBQzFDLE9BQVEsQ0FBQyxNQUFPLE1BQU8sUUFBUyxFQUFHLE9BQU8sRUFDMUMsT0FBUSxDQUFDLFFBQVMsTUFBTyxRQUFTLEVBQUcsT0FBTyxFQUM1QyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFNBQVUsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN2QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFBUyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFBUyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLENBQ3hDLEVBQ0EsZ0JBQWlCLENBQ2YsS0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN2QixLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxLQUFNLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ25DLEtBQU0sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDbkMsS0FBTSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNuQyxNQUFPLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3BDLE1BQU8sQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDcEMsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFBSSxFQUN4QixNQUFPLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxDQUFHLEVBQzFCLE1BQU8sQ0FBQyxFQUFHLEtBQU0sRUFBRyxFQUFHLENBQUcsRUFDMUIsTUFBTyxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsQ0FBRyxFQUMxQixNQUFPLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxDQUFHLEVBQzFCLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLENBQUcsRUFDakMsT0FBUSxDQUFDLFFBQVMsS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUMzQyxPQUFRLENBQUMsTUFBTyxLQUFNLFFBQVMsRUFBRyxPQUFPLEVBQ3pDLE9BQVEsQ0FBQyxNQUFPLEtBQU0sUUFBUyxFQUFHLE9BQU8sRUFDekMsT0FBUSxDQUFDLFFBQVMsS0FBTSxRQUFTLEVBQUcsT0FBTyxFQUMzQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3JDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsUUFBUyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFB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QUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLFFBQVMsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxPQUFRLENBQUMsUUFBUyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLFFBQVMsTUFBTyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxPQUFRLENBQUMsUUFBUyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsUUFBUyxNQUFPLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLE9BQVEsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdkMsT0FBUSxDQUFDLFFBQVMsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN0QyxPQUFRLENBQUMsUUFBTyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLEtBQU0sRUFBRyxFQUFHLE9BQU8sRUFDckMsT0FBUSxDQUFDLFFBQVMsRUFBRyxFQUFHLEVBQUcsT0FBTyxFQUNsQyxPQUFRLENBQUMsRUFBRyxJQUFLLEVBQUcsRUFBRyxPQUFPLEVBQzlCLE9BQVEsQ0FBQyxRQUFPLElBQUssRUFBRyxFQUFHLE9BQU8sRUFDbEMsT0FBUSxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUNyQyxPQUFRLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxPQUFPLEVBQ2xDLE9BQVEsQ0FBQyxRQUFTLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDdEMsUUFBUyxDQUFDLFFBQVMsS0FBTSxFQUFHLEVBQUcsT0FBTyxFQUN0QyxRQUFTLENBQUMsUUFBUyxLQUFNLEVBQUcsRUFBRyxPQUFPLEVBQ3RDLFFBQVMsQ0FBQyxTQUFVLE1BQU8sRUFBRyxFQUFHLE9BQU8sRUFDeEMsUUFBUyxDQUFDLFNBQVUsTUFBTyxFQUFHLEVBQUcsT0FBTyxFQUN4QyxRQUFTLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxJQUFJLEVBQzdCLFFBQVMsQ0FBQyxFQUFHLEtBQU0sRUFBRyxFQUFHLElBQUksRUFDN0IsUUFBUyxDQUFDLEVBQUcsS0FBTSxFQUFHLEVBQUcsSUFBSSxFQUM3QixRQUFTLENBQUMsRUFBRyxLQUFNLEVBQUcsRUFBRyxJQUFJLENBQy9CLEVBQ0EscUJBQXNCLENBQ3BCLEtBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEtBQUssRUFDeEIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLEtBQU0sQ0FBQyxRQUFTLE1BQU8sRUFBRyxFQUFHLEtBQUssRUFDbEMsS0FBTSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxLQUFNLENBQUMsRUFBRyxNQUFPLEVBQUcsRUFBRyxLQUFLLEVBQzVCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLFNBQVUsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxLQUFNLENBQUMsU0FBVSxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLEtBQU0sQ0FBQyxTQUFVLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3BDLEtBQU0sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDcEMsS0FBTSxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNwQyxLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxRQUFTLEVBQUcsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixLQUFNLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQzlCLEtBQU0sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDOUIsS0FBTSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUM5QixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxNQUFPLENBQUMsUUFBUyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ3JDLE1BQU8sQ0FBQyxRQUFTLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDckMsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEtBQUssRUFDekIsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsUUFBUyxFQUFHLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLFFBQVMsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNyQyxNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsTUFBTyxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUMvQixNQUFPLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQy9CLE1BQU8sQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDL0IsT0FBUSxDQUFDLEVBQUcsUUFBUyxFQUFHLEVBQUcsS0FBSyxFQUNoQyxPQUFRLENBQUMsRUFBRyxRQUFTLEVBQUcsRUFBRyxLQUFLLEVBQ2hDLE9BQVEsQ0FBQyxFQUFHLFFBQVMsRUFBRyxFQUFHLEtBQUssRUFDaEMsT0FBUSxDQUFDLFFBQVMs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Q3ZELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxTQUFVLEVBQUksRUFDdEQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFNBQVUsRUFBSSxFQUN0RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsUUFBUyxFQUFJLEVBQ3JELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxRQUFRLEVBQ2hELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxXQUFZLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxRQUFTLEVBQUksRUFDckQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLE9BQVEsRUFBSSxFQUNwRCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsT0FBUSxFQUFJLEVBQ3BELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxVQUFXLEVBQUksRUFDdkQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFlBQVksRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxVQUFXLEVBQUksRUFDdkQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFVBQVcsRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsT0FBUSxFQUFJLEVBQ3BELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxXQUFZLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFVBQVcsRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxRQUFRLEVBRWhELEVBQWEsRUFBTSxHQUFNLEdBQU8sSUFBVSxTQUFTLEVBQ25ELEVBQWEsRUFBTSxHQUFNLEdBQU8sU0FBVSxTQUFTLEVBRW5ELEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBVSxLQUFLLEVBQ2pELEVBQWEsR0FBTSxHQUFNLEdBQVMsSUFBVSxLQUFLLEVBQ2pELEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBVSxLQUFLLEVBQ2pELEVBQWEsR0FBTSxHQUFNLEdBQVMsSUFBVSxLQUFLLEVBQ2pELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFdBQVksRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsU0FBVSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxXQUFZLEVBQUksRUFDNUQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsU0FBVSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxRQUFTLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFlBQWEsRUFBSSxFQUM3RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsYUFBYyxFQUFJLEVBQzlELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxPQUFRLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsZ0JBQWlCLEVBQUksRUFDakUsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQVEsRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsY0FBZSxFQUFJLEVBQy9ELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxPQUFRLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLGNBQWUsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBTSxHQUFTLE9BQVUsTUFBTyxFQUFJLEVBQ3ZELEVBQWEsR0FBTSxHQUFNLEdBQVMsT0FBVSxLQUFLLEVBQ2pELEVBQWEsRUFBTSxHQUFNLEdBQVMsT0FBVSxNQUFPLEVBQUksRUFDdkQsRUFBYSxHQUFNLEdBQU0sR0FBUyxPQUFVLEtBQUssRUFFakQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQU8sRUFDbkQsRUFBYSxHQUFNLEdBQU0sR0FBUyxTQUFVLE9BQU8sRUFDbkQsRUFBYSxHQUFNLEdBQU0sR0FBUyxTQUFVLGNBQWMsRUFDMUQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVEsRUFDcEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVEsRUFDcEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxTQUFVLGlCQUFpQixFQUU3RCxFQUFhLEVBQU0sR0FBTSxHQUFPLFNBQVUsZUFBZ0IsRUFBSSxFQUM5RCxFQUFhLEVBQU0sR0FBTSxHQUFNLFNBQVUsZUFBZ0IsRUFBSSxFQUM3RCxFQUFhLEVBQU0sR0FBTSxHQUFPLFNBQVUsV0FBWSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFNLEdBQU0sU0FBVSxXQUFZLEVBQUksRUFFekQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLE9BQVEsRUFBSSxFQUNwRCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxVQUFXLEVBQUksRUFDdkQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFVBQVcsRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsT0FBTyxFQUMvQyxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxZQUFhLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsV0FBVyxFQUNuRCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsT0FBUSxFQUFJLEVBQ3BELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxTQUFTLEVBQ2pELEVBQWEsRUFBTSxHQUFNLEdBQUssSUFBVSxPQUFPLEVBRy9DLEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxrQkFBbUIsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsY0FBZSxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxrQkFBbUIsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsbUJBQW9CLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDNUQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLG1CQUFvQixFQUFJLEVBQ2hFLEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxtQkFBb0IsRUFBSSxFQUNoRSxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsdUJBQXdCLEVBQUksRUFDcEUsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLG1CQUFvQixFQUFJLEVBQ2hFLEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSx1QkFBd0IsRUFBSSxFQUNwRSxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxZQUFhLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLGtCQUFtQixFQUFJLEVBQy9ELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxtQkFBb0IsRUFBSSxFQUNoRSxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3pELEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxrQkFBbUIsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsbUJBQW9CLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFlBQWEsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsb0JBQXFCLEVBQUksRUFDakUsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLHFCQUFzQixFQUFJLEVBQ2xFLEVBQWEsRUFBTSxHQUFNLEdBQUssU0FBVSxZQUFhLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLHNCQUF1QixFQUFJLEVBRW5FLEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxVQUFXLEVBQUksRUFFdEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWMsRUFDckQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFVBQVUsRUFDakQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFNBQVUsRUFBSSxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3RELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFjLEVBQ3JELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxVQUFXLEVBQUksRUFDdEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGFBQWMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBRXRELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxZQUFhLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGFBQWMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsZ0JBQWlCLEVBQUksRUFDNUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFNBQVUsRUFBSSxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsY0FBYyxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsU0FBVSxFQUFJLEVBQ3JELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxXQUFZLEVBQUksRUFDdkQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsaUJBQWlCLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxvQkFBcUIsRUFBSSxFQUNoRSxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsY0FBZSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxpQkFBaUIsRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGtCQUFrQixFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsU0FBVSxFQUFJLEVBQ3JELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFjLEVBQ3JELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxVQUFVLEVBQ2pELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxTQUFVLEVBQUksRUFDckQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFVBQVcsRUFBSSxFQUN0RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsY0FBYyxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3RELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFVBQVcsRUFBSSxFQUV0RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGdCQUFpQixFQUFJLEVBRTVELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxVQUFXLEVBQUksRUFDdEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG1CQUFtQixFQUMxRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsY0FBZSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxXQUFZLEVBQUksRUFDdkQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGtCQUFrQixFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUscUJBQXNCLEVBQUksRUFDakUsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWUsRUFDdEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWUsRUFBSSxFQUMxRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsaUJBQWlCLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxrQkFBa0IsRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsYUFBYyxFQUFJLEVBQ3pELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWUsRUFDdEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFNBQVMsRUFDaEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFNBQVMsRUFFaEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGdCQUFpQixFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxnQkFBaUIsRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsb0JBQXFCLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG9CQUFxQixFQUFJLEVBRWhFLEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFlLEVBQ3RELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxVQUFVLEVBQ3JELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxnQkFBZ0IsRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLFdBQVcsRUFDdEQsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLFlBQVksRUFDdkQsRUFBYSxFQUFNLEdBQUssR0FBUyxPQUFVLFlBQVksRUFDdkQsRUFBYSxHQUFNLEdBQUssR0FBUyxPQUFVLFlBQVksRUFDdkQsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLGtCQUFtQixFQUFJLEVBQ2xFLEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxXQUFXLEVBQ3RELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxPQUFPLEVBQ2xELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxTQUFVLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLFNBQVUsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsYUFBYSxFQUN4RCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsaUJBQWlCLEVBQzVELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxxQkFBcUIsRUFDaEUsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLGVBQWUsRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLGdCQUFnQixFQUMzRCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsV0FBVyxFQUN0RCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsbUJBQW9CLEVBQUksRUFDbkUsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLGVBQWdCLEVBQUksRUFFL0QsRUFBYSxFQUFNLEdBQUssR0FBUyxPQUFVLFFBQVMsRUFBSSxFQUN4RCxFQUFhLEdBQU0sR0FBTSxHQUFTLE9BQVUsTUFBUSxFQUNwRCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsVUFBVSxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsWUFBWSxFQUN2RCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsVUFBVSxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsT0FBTyxFQUNsRCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsV0FBVyxFQUV0RCxFQUFhLEVBQU0sR0FBSyxHQUFTLE9BQVUsUUFBUyxFQUFJLEVBQ3hELEVBQWEsR0FBTSxHQUFLLEdBQVMsT0FBVSxRQUFTLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLGNBQWUsRUFBSSxFQUM5RCxFQUFhLEdBQU0sR0FBSyxHQUFTLFNBQVUsYUFBYSxFQUV4RCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsU0FBVSxFQUFJLEVBQ3pELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxXQUFZLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUUxRCxFQUFhLEVBQU0sR0FBSyxHQUFTLFNBQVUsWUFBYSxFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFLLEdBQVMsU0FBVSxZQUFZLEVBRXZELEVBQWEsRUFBTSxHQUFLLEdBQU0sU0FBVSxjQUFlLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBTyxTQUFVLGNBQWUsRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBSyxHQUFNLFNBQVUsY0FBZSxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQU8sU0FBVSxjQUFlLEVBQUksRUFFNUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFNBQVUsRUFBSSxFQUNyRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsYUFBYyxFQUFJLEVBQ3pELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxnQkFBaUIsRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFdBQVcsRUFDbEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFFBQVMsRUFBSSxFQUNwRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFlLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFlBQVksRUFDbkQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGlCQUFrQixFQUFJLEVBQzdELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxrQkFBbUIsRUFBSSxFQUM5RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFlLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWUsRUFBSSxFQUMxRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGdCQUFpQixFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxnQkFBaUIsRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxtQkFBbUIsRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGtCQUFrQixFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3RELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxXQUFZLEVBQUksRUFDdkQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWMsRUFDckQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWMsRUFDckQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxTQUFVLEVBQUksRUFDckQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGFBQWMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsZUFBZ0IsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFlLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFVBQVUsRUFDakQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFFBQVMsRUFBSSxFQUNwRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFlLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxjQUFlLEVBQUksRUFDMUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFlBQVksRUFDbkQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWUsRUFDdEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWUsRUFBSSxFQUMxRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGdCQUFpQixFQUFJLEVBQzVELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxnQkFBaUIsRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxvQkFBb0IsRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG1CQUFtQixFQUMxRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBQ3RELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxZQUFZLEVBQ25ELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxpQkFBaUIsRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFlBQWEsRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsY0FBZSxFQUFJLEVBQzFELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFhLEVBQ3BELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxxQkFBcUIsRUFHNUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGNBQWUsRUFBSSxFQUMxRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsZUFBZSxFQUN0RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsc0JBQXNCLEVBRzdELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxZQUFhLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFVBQVUsRUFDakQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFNBQVMsRUFDaEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLE9BQU8sRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLE9BQU8sRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFVBQVcsRUFBSSxFQUN0RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsUUFBUSxFQUNoRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsVUFBVyxFQUFJLEVBRXRELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxZQUFhLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGlCQUFpQixFQUN4RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsUUFBUyxFQUFJLEVBQ3BELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxRQUFTLEVBQUksRUFDcEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG1CQUFvQixFQUFJLEVBQy9ELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFlBQWEsRUFBSSxFQUN4RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsa0JBQW1CLEVBQUksRUFDOUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLFdBQVksRUFBSSxFQUN2RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBWSxFQUFJLEVBQ3ZELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxtQkFBb0IsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsb0JBQXFCLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGFBQWMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsZ0JBQWlCLEVBQUksRUFDNUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWdCLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGFBQWEsRUFDcEQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGFBQWMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsYUFBYSxFQUNwRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsYUFBYSxFQUNwRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsYUFBYyxFQUFJLEVBSXpELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxtQkFBb0IsRUFBSSxFQUUvRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsa0JBQW1CLEVBQUksRUFDOUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG1CQUFvQixFQUFJLEVBQy9ELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxvQkFBcUIsRUFBSSxFQUNoRSxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsZUFBZ0IsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUscUJBQXNCLEVBQUksRUFDakUsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGtCQUFtQixFQUFJLEVBQzlELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxrQkFBbUIsRUFBSSxFQUM5RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsc0JBQXVCLEVBQUksRUFDbEUsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG1CQUFvQixFQUFJLEVBRS9ELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxvQkFBcUIsRUFBSSxFQUNoRSxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsUUFBUyxFQUFJLEVBQ3BELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxlQUFnQixFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxrQkFBbUIsRUFBSSxFQUM5RCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsb0JBQXFCLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQU0sR0FBSyxTQUFVLFdBQVksRUFBSSxFQUV4RCxFQUFhLEVBQU0sR0FBTSxHQUFLLFNBQVUsWUFBYSxFQUFJLEVBRXpELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxhQUFjLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLHdCQUF5QixFQUFJLEVBQ3BFLEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxxQkFBc0IsRUFBSSxFQUNqRSxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsb0JBQXFCLEVBQUksRUFDaEUsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLHNCQUF1QixFQUFJLEVBQ2xFLEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxtQkFBb0IsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsbUJBQW9CLEVBQUksRUFDL0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLG9CQUFxQixFQUFJLEVBRWhFLEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxxQkFBc0IsRUFBSSxFQUNqRSxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsUUFBUyxFQUFJLEVBQ3BELEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxtQkFBb0IsRUFBSSxFQUMvRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsbUJBQW9CLEVBQUksRUFDL0QsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLHFCQUFzQixFQUFJLEVBQ2pFLEVBQWEsRUFBTSxHQUFLLEdBQUssU0FBVSxvQkFBcUIsRUFBSSxFQUNoRSxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsV0FBVyxFQUNsRCxFQUFhLEVBQU0sR0FBSyxHQUFLLFNBQVUsZ0JBQWlCLEVBQUksRUFDNUQsRUFBYSxFQUFNLEdBQUssR0FBSyxTQUFVLGVBQWUsRUFDdEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLEdBQUcsRUFDL0MsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLGNBQWMsRUFDckQsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLEtBQUssRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLGtCQUFrQixFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFNBQVMsRUFDckQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFlBQVksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxVQUFXLEVBQUksRUFDM0QsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFdBQVksRUFBSSxFQUM1RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsT0FBUSxFQUFJLEVBQ3hELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxPQUFRLEVBQUksRUFDeEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFVBQVcsRUFBSSxFQUMzRCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsWUFBYSxFQUFJLEVBQzdELEVBQWEsRUFBTSxHQUFNLEdBQVMsU0FBVSxRQUFTLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLFFBQVMsRUFBSSxFQUN6RCxFQUFhLEVBQU0sR0FBTSxHQUFTLFNBQVUsVUFBVyxFQUFJLEVBQzNELEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsSUFBSyxRQUFRLEVBQy9DLEVBQWEsRUFBTSxHQUFNLEdBQVMsT0FBVSxRQUFTLEVBQUksRUFDekQsRUFBYSxFQUFNLEdBQU0sR0FBUyxPQUFVLFFBQVEsRUFDcEQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9BQU8sRUFDbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxTQUFVLE9B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LEdBQUksRUFBRSxFQU0xQyxJQUFTLEdBQUssRUFBRyxHQUFLLEdBQVksT0FBUSxLQUNwQyxHQUFNLEdBQVksT0FBTyxFQUFFLEVBRS9CLEVBQWEsR0FBTSxHQUFNLEdBQVMsR0FBSyxFQUFHLEVBTTVDLElBQVMsR0FBTSxFQUFHLEdBQU0sR0FBUSxPQUFRLEtBQ2xDLEdBQU8sR0FBUSxPQUFPLEVBQUcsRUFFN0IsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQUksRUFDNUMsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQUksRUFJOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFFOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxHQUFNLEdBQUssR0FBUyxJQUFLLFFBQVEsRUFDOUMsRUFBYSxFQUFNLEdBQU0sR0FBUyxJQUFLLFFBQVEsRUFFL0MsRUFBYSxHQUFNLEdBQU0sR0FBUyxJQUFLLFFBQVEsRUFRL0MsSUFBUyxHQUFNLEVBQUcsR0FBTSxHQUFRLE9BQVEsS0EyQ3RDLEdBMUNJLEdBQU8sR0FBUSxPQUFPLEVBQUcsRUFLN0IsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFFNUMsR0FBTSxHQUdSLEdBQVcsT0FBTyxhQUFhLE1BQVEsTUFBUyxFQUFHLEVBRW5ELEVBQWEsRUFBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBQ2hELEVBQWEsR0FBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBQ2hELEdBQVcsT0FBTyxhQUFhLE1BQVEsTUFBUyxFQUFHLEVBRW5ELEVBQWEsRUFBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBQ2hELEVBQWEsR0FBTSxHQUFNLEdBQVMsR0FBTSxFQUFRLEVBTXBELEdBQVcsT0FBTyxhQUFhLE1BQVEsS0FBTSxFQUU3QyxFQUFhLEVBQU0sR0FBTSxHQUFTLElBQUssRUFBUSxFQUMvQyxFQUFhLEdBQU0sR0FBTSxHQUFTLElBQUssRUFBUSxFQUUvQyxJQUFTLEdBQU0sRUFBRyxHQUFNLEdBQUksS0FDdEIsR0FBTyxHQUFJLFNBQVMsRUFFeEIsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsR0FBVyxPQUFPLGFBQWEsTUFBUSxNQUFTLEVBQUcsRUFFbkQsRUFBYSxFQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFDaEQsRUFBYSxHQUFNLEdBQU0sR0FBUyxHQUFNLEVBQVEsRUFTbEQsSUFBUyxHQUFNLEVBQUcsR0FBTSxH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VixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osT0FBSSxJQUNKLE9BQUksSUFDSixPQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBSSxJQUNKLFNBQUksSUFDSixTQUFJLElBQ0osU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLElBQ1YsU0FBVSxJQUNWLFNBQVUsSUFDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFNBQVUsUUFDWixDQUFDLEVBSUcsR0FBaUIsQ0FDbkIsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFNBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxNQUNSLEtBQVEsU0FDVixFQUNBLFNBQUksQ0FDRixLQUFRLE9BQ1IsS0FBUSxRQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFNBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxNQUNSLEtBQVEsT0FDVixFQUNBLFNBQUksQ0FDRixLQUFRLE1BQ1IsS0FBUSxTQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFNBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxNQUNSLEtBQVEsT0FDVixFQUNBLFNBQUksQ0FDRixLQUFRLE1BQ1IsS0FBUSxPQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsTUFDUixLQUFRLFlBQ1YsRUFDQSxTQUFJLENBQ0YsS0FBUSxLQUNWLEVBQ0EsU0FBSSxDQUNGLEtBQVEsS0FDVixDQUNGLEVBQ0ksR0FBaUIsQ0FDbkIsT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLGdCQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixPQUFJLFVBQ0osT0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxnQkFDSixTQUFJLGdCQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksZ0JBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixPQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLE9BQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxVQUNKLFNBQUksVUFDSixTQUFJLFVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNKLFNBQUksZUFDSixTQUFJLGVBQ0osU0FBSSxlQUNK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QUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxFQUNsQyxLQUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxFQUNsQyxLQUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxFQUNsQyxLQUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxFQUNsQyxLQUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxFQUNsQyxLQUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxFQUNsQyxLQUFLLEtBQU8sR0FBUyxLQUFLLEtBQU0sRUFBRSxNQUVsQyxNQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUNqQyxLQUFLLEtBQU8sR0FBUSxLQUFLLEtBQU0sRUFBRSxFQUVuQyxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQVEsR0FBUSxLQUFLLElBQUksRUFBRyxFQUFFLEVBQzdELEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLElBQUksRUFDaEQsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssSUFBSSxFQUNoRCxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQVEsS0FBSyxJQUFJLEVBQ2hELEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLElBQUksRUFDaEQsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssSUFBSSxFQUNoRCxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQVEsS0FBSyxJQUFJLEVBQ2hELEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLElBQUksRUFDaEQsS0FBSyxnQkFBa0IsS0FBSyxp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USxLQUFLLGFBQWMsQ0FBRSxFQUFHLEVBQUcsQ0FBQyxFQUM3RCxLQUFLLEtBQU8sS0FBSyxNQUFRLEdBQVEsS0FBSyxhQUFjLENBQUUsRUFBRyxHQUFJLENBQUMsRUFDMUQsS0FBSyxTQUNQLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLEVBQ2xDLEtBQUssS0FBTyxHQUFTLEtBQUssS0FBTSxFQUFFLE1BRWxDLE1BQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBQ2pDLEtBQUssS0FBTyxHQUFRLEtBQUssS0FBTSxFQUFFLEVBRW5DLEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLElBQUksRUFDaEQsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssSUFBSSxFQUNoRCxLQUFLLFFBQVUsS0FBSyxTQUFXLEdBQVEsS0FBSyxJQUFJLEVBQ2hELEtBQUssUUFBVSxLQUFLLFNBQVcsR0FBUSxLQUFLLElBQUksRUFDaEQsS0FBSyxRQUFVLEtBQUssU0FBVyxHQUFRLEtBQUssSUFBSSxFQUNoRCxLQUFLLFFBQVUs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QUFLLEdBQ0wsRUFBSyxHQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssR0FDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssRUFDTCxFQUFLLEVBQ0wsRUFBSyxHQUNMLEVBQUssR0FDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLEtBQ0wsRUFBSyxLQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLElBQUssRUFDUCxFQUVJLEVBQWEsQ0FDZixFQUFLLEVBQ0wsRUFBSyxFQUNMLEVBQUssR0FDTCxFQUFLLEVBQ0wsRUFBSyxLQUNMLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxHQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxFQUNMLEVBQUssRUFDTCxFQUFLLEdBQ0wsRUFBSyxHQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssS0FDTCxFQUFLLEtBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsSUFBSyxFQUNQLEVBRUksRUFBUyxDQUNYLEVBQUssRUFDTCxFQUFLLEVBQ0wsRUFBSyxFQUNMLEVBQUssRUFDTCxFQUFLLEVBQ0wsRUFBSyxHQUNMLEVBQUssR0FDTCxFQUFLLElBQ0wsRUFBSyxHQUNMLEVBQUssR0FDTCxFQUFLLEdBQ0wsRUFBSyxHQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLEVBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxJQUNMLEVBQUssSUFDTCxFQUFLLElBQ0wsRUFBSyxFQUNMLEVBQUssRUFDTCxF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QUFLLENBQUUsRUFBSSxHQUFLLEVBQUssRUFBSyxFQUFLLENBQUUsRUFBRSxFQUFJLENBQUMsRUFDaEcsRUFBSyxHQUFLLEdBQUcsR0FBSyxHQUFHLEdBQUssR0FBRyxHQUFLLEdBQUcsRUFBRSxFQUMzQyxFQUFNLEdBQUksR0FBSyxFQUFLLElBQU8sRUFBSyxFQUFFLEVBQ2xDLEVBQU0sR0FBSSxHQUFLLEVBQUssSUFBTyxFQUFLLEVBQUUsTUFFbEMsR0FBTSxFQUFNLEVBTWxCLEtBQU0sRUFBTSxJQUFVLEVBQVEsT0FBTyxFQUFLLENBQUcsVUFHcEMsRUFBTSxHQU9iLEdBTkEsRUFBSyxHQUFlLEVBQUssRUFBSyxFQUFLLEVBQUssRUFBSSxFQUFLLENBQUUsRUFDbkQsRUFBSyxHQUFlLEVBQUssRUFBSyxFQUFLLEVBQUssRUFBSSxFQUFLLENBQUUsRUFFbkQsRUFBUSxPQUFPLEVBQUcsR0FBSyxFQUFHLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBRyxFQUd6QyxFQUFNLEVBQUksRUFBUSxJQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsRUFBRyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsR0FBSSxDQUFFLE1BSTVGLEdBQVEsSUFBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBTSxFQUFHLElBQUssRUFBRyxHQUFHLEVBQUcsR0FBTSxFQUFHLElBQUssRUFBRyxHQUFHLEdBQUksQ0FBRSxFQUNoRixFQUFRLElBQUksRUFBRyxFQUFHLEVBQUksR0FBTSxFQUFHLEdBQUssRUFBRyxJQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUcsRUFBRyxHQUFNLEVBQUcsR0FBSyxFQUFHLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBRyxHQUFJLENBQUUsRUFDdkcsRUFBUSxJQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsRUFBRyxHQUFNLEVBQUcsSUFBSyxFQUFHLEdBQUcsR0FBSSxDQUFFLE1BSy9FLEdBQVEsT0FB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LEVBQUUsUUFBUSx3QkFBeUIsRUFBRSxFQUFFLFFBQVEsZ0JBQWlCLEVBQUUsRUFBRSxRQUFRLFVBQVcsT0FBTyxFQUM1SixHQUFPLENBQVEsRUFBRSxPQUFPLE1BQU0sRUFBRSxLQUFLLFFBQVMsQ0FBa0IsRUFFbEUsT0FBTyxJQUVSLFlBQVksSUM3VWYsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLFdBQXFCLEVBQUUsR0FBRyxJQUF0QixTQUF5QixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBVSxLQUFLLEVBQUUsR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxHQUFHLEVBQUUsT0FBTyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUyxLQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFRLE9BQUssRUFBRSxLQUFLLE1BQU0sRUFBRyxFQUFFLEVBQUUsS0FBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFFLEdBQU8sSUFBSixHQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxNQUFNLE1BQU0sRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVMsS0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQVEsRUFBRSxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVUsS0FBSyxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUyxLQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsSUFBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxHQUFHLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsTUFBYSxFQUFFLEVBQUUsY0FBWixNQUFrQyxJQUFKLE9BQVcsT0FBRSxFQUFFLEtBQUssSUFBSSxLQUFLLE9BQU8sR0FBRyxNQUFLLEVBQUUsR0FBRyxJQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUE2UyxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQUssS0FBSyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQTh2RixTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksTUFBTSxLQUFVLElBQUwsSUFBUSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSw2REFBNkQsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRSxLQUFLLEdBQUcsV0FBVyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFFLEVBQUUsRUFBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFXLElBQVIsTUFBVSxDQUFDLEdBQVMsRUFBRSxPQUFSLEtBQW9CLEVBQUUsT0FBUixJQUFhLE9BQU8sR0FBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVUsSUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFFLEdBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLE1BQU0sSUFBSSxNQUFNLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRSxFQUFFLEVBQUMsRUFBRSxNQUFNLElBQUksTUFBTSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxVQUFvQixHQUFFLElBQW5CLFNBQXNCLE1BQU0sSUFBSSxNQUFNLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQVMsSUFBTixNQUFVLEVBQUUsS0FBVyxJQUFOLE1BQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLE9BQU8sT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsVUFBVSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxVQUFVLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxRQUFRLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLE9BQU8sT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQUFBTSxJQUFOLEtBQWUsSUFBTixLQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEFBQU0sSUFBTixLQUFlLElBQU4sS0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQU8sSUFBSixHQUFXLElBQUosRUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsSUFBSSxHQUFHLElBQUksRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZ0JBQWlCLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEtBQUssYUFBYSxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssYUFBYSxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsbUJBQUksRUFBRSxFQUFFLEVBQUUsbUJBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBeU8sU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsRUFBRSxPQUFXLElBQUosRUFBTSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sU0FBbUIsRUFBRSxHQUFHLElBQXRCLFNBQXlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFJLEVBQUUsV0FBVyxHQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxHQUFHLEVBQUUsSUFBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSSxFQUFFLFdBQVcsR0FBRSxDQUFDLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxBQUFTLEVBQUUsS0FBWCxRQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsQUFBUyxFQUFFLEtBQVgsUUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLE9BQU8sSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssS0FBSyxJQUFJLEVBQUUsZUFBZSxFQUFFLGVBQWUsS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLGFBQWEsT0FBTyxHQUFHLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEdBQUUsSUFBRyxHQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBd0IsRUFBRSxZQUFOLEVBQWdCLENBQUMsTUFBTSxHQUFHLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxlQUFlLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxPQUFPLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxHQUFHLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsVUFBVSxJQUFJLEdBQUUsR0FBRyxPQUFPLE9BQU8sU0FBUyxHQUFFLEtBQUssR0FBRSxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUcsVUFBVSxjQUFjLEdBQUUsS0FBSyxHQUFFLEdBQUcsSUFBSSxHQUFFLENBQUMsR0FBRyxVQUFVLE9BQU8sR0FBRSxLQUFLLEdBQUUsR0FBRyxJQUFJLEdBQUUsQ0FBQyxHQUFHLFVBQVUsU0FBUyxHQUFFLEtBQUssR0FBRSxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUcsVUFBVSxjQUFjLEdBQUUsS0FBSyxHQUFFLEdBQUcsSUFBSSxHQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsVUFBVSxHQUFFLEtBQUssR0FBRSxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUcsT0FBTyxHQUFFLElBQUksRUFBRSxHQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFnQixPQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLElBQUksR0FBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxLQUFLLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxHQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBRyxXQUFVLEVBQUUsU0FBUyxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFHLElBQUcsR0FBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFdBQVcsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQU8sRUFBRSxTQUFOLEVBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBUSxDQUFJLElBQUosR0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsV0FBVyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQU8sSUFBSixHQUFPLEVBQUUsS0FBSyxHQUFHLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQU8sRUFBRSxZQUFOLEVBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRSxJQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUcsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFHLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBRyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFFLElBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEdBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixHQUFHLEVBQUUscUJBQXFCLEdBQUcsR0FBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxBQUFJLElBQUosRUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLEtBQUssQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLElBQUksTUFBTSwwQ0FBMEMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQU8sSUFBSixFQUFNLEVBQUUsS0FBSyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsR0FBTyxJQUFKLEVBQU0sT0FBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE9BQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEtBQUssS0FBSyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFPLEdBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFXLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBN0MsR0FBZ0QsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUF4RCxHQUEyRCxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQW5FLEdBQXNFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBOUUsR0FBaUYsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUF6RixHQUE0RixFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQXBHLEdBQXVHLEVBQUUsR0FBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsRUFBRSxLQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUE1eWdCLE1BQU0sRUFBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxjQUFjLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxhQUFhLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxPQUFPLGNBQWMsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQStuQixNQUFNLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxZQUFZLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLFlBQVksR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssT0FBTyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLGFBQWEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxhQUFhLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUyxLQUFHLENBQUMsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRyxLQUFLLE9BQU8sY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssYUFBYSxJQUFJLEtBQUssWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUyxLQUFHLENBQUMsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxPQUFPLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBSSxFQUFFLEVBQUUsQ0FBWSxNQUFNLEVBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLFlBQVMsS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLFdBQU0sS0FBSyxPQUFPLEVBQUUsQ0FBOHhhLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLE9BQU8sWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEtBQUksZUFBZSxFQUFFLFVBQVUsVUFBVSxXQUFXLEdBQUcsYUFBYSxJQUFJLFdBQVcsR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxLQUFLLEVBQUUsbUJBQW1CLEdBQUcsdUJBQXVCLEdBQUcsaUJBQWlCLEdBQUcsdUJBQXVCLEdBQUUsRUFBRSxLQUFLLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxPQUFPLFVBQVUsS0FBSyxlQUFlLEtBQUssR0FBRyxLQUFLLE9BQU8sT0FBTyxTQUFVLFFBQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEtBQUssT0FBTyxFQUFFLFVBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssZUFBZSxDQUFDLEVBQUUsS0FBSyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxBQUFVLEVBQUUsWUFBWixRQUFzQixFQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBYSxFQUFFLFlBQVosUUFBc0IsQ0FBQyxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFPLEdBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQWEsRUFBRSxZQUFaLFFBQXNCLENBQUMsTUFBTSxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsTUFBTSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFPLEdBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUUsS0FBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLEdBQWEsRUFBRSxZQUFaLFFBQXNCLENBQUMsTUFBTSxFQUFFLEdBQUUsRUFBRSxPQUFPLE9BQU8sT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxLQUFLLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLFNBQW1CLEVBQUUsR0FBRyxJQUF0QixTQUF5QixDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBTSxFQUFFLFNBQU4sRUFBYSxFQUFFLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFpQixFQUFFLFlBQVosUUFBc0IsRUFBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksUUFBUSxNQUFNLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxFQUFFLFFBQVEsVUFBVSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBc0IsRUFBRSxPQUFsQixlQUF3QixFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLE9BQU8sT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBVSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBYSxFQUFFLFlBQVosUUFBc0IsR0FBTyxFQUFFLFNBQU4sRUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFFLEVBQUUsT0FBTyxPQUFPLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxXQUFXLElBQUksS0FBSyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTyxHQUFFLEtBQUssR0FBRSxFQUFFLENBQUMsQ0FBQyxNQUFPLEdBQUUsS0FBSyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxRQUFTLEtBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxTQUFtQixHQUFqQixVQUFvQixHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUssTUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxRQUFRLE9BQU8sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxXQUFXLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLFNBQVMsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEtBQUssZUFBZSxFQUFFLENBQUMsRUFBRSxRQUFVLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLE9BQU8sRUFBRSxVQUFVLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxZQUFZLEVBQUUsWUFBWSxLQUFLLEVBQUUsRUFBRSxVQUFVLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxPQUFPLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLGFBQWEsRUFBRSxLQUFLLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsWUFBWSxHQUFHLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQVEsQ0FBQyxFQUFFLElBQVEsSUFBSixHQUFnQixFQUFFLEtBQVgsTUFBYyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFLEtBQUssSUFBSSxLQUFLLE9BQU8sV0FBVyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxLQUFLLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxRQUFRLHdCQUF3QixRQUFVLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBcUIsRUFBRSxTQUFYLE9BQWtCLGNBQWMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixLQUFLLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFZLEVBQUUsUUFBWixTQUErQixFQUFFLFFBQWQsV0FBOEIsRUFBRSxRQUFYLE9BQWlCLFVBQVUsVUFBVSxLQUFLLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssS0FBSyxhQUFhLEtBQUssV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssZUFBZSxFQUFFLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBVSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sU0FBbUIsR0FBakIsVUFBb0IsR0FBRyxFQUFFLEVBQUUsS0FBSyxJQUFLLE1BQUksRUFBRSxRQUFRLENBQUMsQ0FBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsUUFBUSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxXQUFXLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEFBQWEsRUFBRSxPQUFmLFdBQW9CLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQU0sVUFBUyxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLEtBQUssSUFBSSxlQUFlLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUF1QyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxLQUFLLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxJQUFJLGVBQWUsT0FBTyxTQUFTLEVBQUUsRUFBRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsd0JBQXdCLFFBQVUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssT0FBTyxFQUFFLFVBQVUsT0FBTyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxlQUFlLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxhQUFhLE9BQU8sTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxtQkFBbUIsRUFBRSxlQUFlLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxvQkFBb0IsR0FBRyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsV0FBVyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLE1BQU0sRUFBRSxFQUFFLGFBQWEsZUFBZSxHQUFHLEVBQUUsRUFBRSxhQUFhLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBWSxFQUFFLFFBQVosU0FBK0IsRUFBRSxRQUFkLFdBQXFCLEVBQUUsYUFBYSxZQUFZLFNBQVMsRUFBRSxVQUFVLGFBQWEsRUFBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLEdBQUcsTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLElBQUksS0FBSyxVQUFVLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxhQUFhLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLE9BQU8sTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsbUJBQW1CLEVBQUUsYUFBYSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsb0JBQW9CLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxLQUFNLFVBQVMsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLGlCQUFpQixFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksZUFBZSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEtB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LEVBQUksS0FBSyxJQUFJLEVBQWEsRUFBSSxFQUFZLENBQUMsRUFDakQsR0FBSSxLQUFLLElBQUksRUFBSSxFQUFhLENBQUMsRUFBSSxFQUFJLEtBQUssSUFBSSxFQUFJLEVBQWEsQ0FBQyxFQUFJLEVBQUcsQ0FDdkUsSUFBSSxFQUFJLEVBQVksRUFBSSxFQUFhLEVBQUksRUFBYSxFQUFJLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBYSxFQUN2RixFQUFJLEVBQUksRUFBSSxFQUNaLE1BQU0sRUFBTSxDQUNWLEVBQUcsRUFBWSxFQUFJLEVBQWEsRUFBSSxFQUFZLEVBQUksRUFBSSxFQUFZLEVBQUksRUFBSSxFQUM1RSxFQUFHLEVBQVksRUFBSSxFQUFhLEVBQUksRUFBWSxFQUFJLEVBQUksRUFBSSxFQUFZLEVBQUksRUFBSSxDQUNsRixFQUNBLEdBQUksSUFBTSxFQUNSLEVBQUksRUFBSSxFQUFhLEVBQ3JCLEVBQUksRUFBSSxFQUFhLEVBRXZCLEdBQUksSUFBTSxFQUNSLEVBQUksRUFBSSxFQUFhLEVBRXZCLEdBQUksSUFBTSxFQUNSLEVBQUksRUFBSSxFQUFhLEVBR3ZCLE9BREEsRUFBSSxNQUFNLDRCQUE0QixRQUFRLFFBQVEsUUFBUSxJQUFLLENBQUcsRUFDL0QsTUFDRixDQUNMLEdBQUksRUFBWSxFQUFJLEVBQWEsRUFDL0IsRUFBSSxFQUFhLEVBQUksRUFBSSxNQUV6QixHQUFJLEVBQUksRUFBSSxFQUFhLEVBRTNCLElBQUksRUFBSSxFQUFJLEVBQUksRUFDWixFQUFLLEVBQVksRUFBSSxFQUFhLEVBQUksRUFBWSxFQUFJLEVBQUksRUFBSSxFQUFZLEVBQUksRUFBSSxFQUNsRixFQUFLLEVBQVksRUFBSSxFQUFhLEVBQUksRUFBWSxFQUFJLEVBQUksRUFBWSxFQUFJLEVBRTlFLEdBREEsRUFBSSxNQUFNLHVCQUF1QixRQUFRLFFBQVEsUUFBUSxJQUFLLENBQUUsS0FBSSxJQUFHLENBQUMsRUFDcEUsSUFBTSxFQUNSLEVBQUssRUFBYSxFQUNsQixFQUFLLEVBQWEsRUFFcEIsR0FBSSxJQUFNLEVB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QUUsT0FBUSxLQUFLLEVBQUcsR0FBRSxLQUFNLElBQ2xELE9BQU8sR0FDTixHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxHQUFNLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxF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QUksWUFBYSxHQUFJLGtCQUFtQixHQUFJLG1CQUFvQixHQUFJLHVCQUF3QixHQUFJLE1BQU8sR0FBSSxVQUFXLEdBQUksWUFBYSxHQUFJLFlBQWEsR0FBSSxpQkFBa0IsRUFDdHJDLGFBQWMsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsRUFDcnJCLGNBQStCLFdBQWdCLEVBQVMsQ0FBQyxHQUFRLEVBQVEsR0FBVSxHQUFJLEdBQVMsR0FBSSxHQUFJLENBQ3RHLElBQUksR0FBSyxHQUFHLE9BQVMsRUFDckIsT0FBUSxRQUNELEdBQ0gsR0FBRyxhQUFhLElBQUksRUFDcEIsVUFDRyxHQUNILEdBQUcsYUFBYSxJQUFJLEVBQ3BC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RUFBRyxHQUFJLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxFQUFJLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsQ0FBQyxFQUN6NU8sZUFBZ0IsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLElBQUssQ0FBQyxFQUFHLENBQUMsRUFBRyxJQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsSUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUNqSyxXQUE0QixXQUFnQixFQUFVLENBQUMsR0FBSyxFQUFNLENBQ2hFLEdBQUksRUFBSyxZQUNQLEtBQUssTUFBTSxFQUFHLE1BQ1QsQ0FDTCxJQUFJLEdBQVEsSUFBSSxNQUFNLEVBQUcsRUFF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LFVBQWEsRUFBTSxFQUFHLGlCQUFvQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsZ0JBQW1CLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEVBQUcsVUFBYSxFQUFNLEVBQUcsSUFBTyxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsT0FBVSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsT0FBVSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsS0FBUSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLGlCQUFvQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsY0FBaUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGdCQUFtQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsYUFBZ0IsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLG1CQUFzQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsb0JBQXVCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxpQkFBb0IsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGNBQWlCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxnQkFBbUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGFBQWdCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxnQkFBbUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsU0FBWSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsaUJBQW9CLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxjQUFpQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsV0FBYyxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsYUFBZ0IsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE9BQVUsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFdBQWMsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE9BQVUsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFFBQVcsQ0FBRSxNQUFTLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssQ0FBRSxDQUMz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LEVBQUcsQ0FBRSxFQUNiLENBQUUsRUFBRyxFQUFPLEdBQUksQ0FBTyxDQUN6QixFQUVGLEdBQUksRUFBVyxJQUFJLE9BQU8sRUFDeEIsTUFBTyxDQUNMLENBQUUsRUFBRyxFQUFVLEdBQUksQ0FBUSxFQUMzQixDQUFFLEVBQUcsRUFBVSxHQUFJLENBQVEsRUFDM0IsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLENBQVEsRUFDbkMsQ0FBRSxFQUFHLEVBQVEsRUFBVSxFQUFHLENBQUUsRUFDNUIsQ0FBRSxFQUFHLEVBQU8sR0FBSSxFQUFTLENBQUUsRUFDM0IsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLENBQU8sRUFDbEMsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUU1QyxDQUFFLEVBQUcsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUNwQyxDQUFFLEVBQUcsRUFBVSxHQUFJLEVBQVMsQ0FBUSxDQUN0QyxFQUVGLEdBQUksRUFBVyxJQUFJLE1BQU0sRUFDdkIsTUFBTyxDQUNMLENBQUUsRUFBRyxFQUFVLEVBQUcsQ0FBRSxFQUNwQixDQUFFLEVBQUcsRUFBVSxHQUFJLENBQVEsRUFFM0IsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLENBQVEsRUFDbkMsQ0FBRSxFQUFHLEVBQVEsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUM1QyxDQUFFLEVBQUcsRUFBVSxHQUFJLEVBQVMsQ0FBUSxFQUNwQyxDQUFFLEVBQUcsRUFBVSxHQUFJLENBQU8sRUFDMUIsQ0FBRSxFQUFHLEVBQUcsR0FBSSxFQUFTLENBQUUsQ0FDekIsRUFFRixHQUFJLEVBQVcsSUFBSSxJQUFJLEVBQ3JCLE1BQU8sQ0FFTCxDQUFFLEVBQUcsRUFBVSxHQUFJLENBQVEsRUFFM0IsQ0FBRSxFQUFHLEVBQVUsR0FBSSxFQUFTLENBQVEsRUFDcEMsQ0FBRSxFQUFHLEVBQUcsR0FBSSxFQUFTLENBQVEsRUFFN0IsQ0FBRSxFQUFHLEVBQVEsRUFBRyxHQUFJLENBQU8sRUFDM0IsQ0FBRSxFQUFHLEVBQU8sR0FBSSxFQUFTLENBQVEs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QUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsR0FBTSxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEVBQUUsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsR0FBSSxJQUFLLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLEdBQU8sQ0FBQyxHQUFJLEdBQUcsRUFBRyxHQUFPLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTyxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFPLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBRyxFQUFHLEdBQU8sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxF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QyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLElBQUssQ0FBQyxFQUFHLENBQUMsSUFBSyxDQUFDLEVBQUcsQ0FBQyxJQUFLLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FB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QUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksVUFBVSxFQUMvQyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksT0FBTyxFQUM1QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksU0FBUyxFQUM5QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksU0FBUyxFQUM5QyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksS0FBSyxFQUMxQyxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksV0FBVyxFQUNoRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksZUFBZSxFQUNwRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksWUFBWSxFQUNqRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFVBQVUsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksV0FBVyxFQUNoRCxVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsSUFDWixHQUFHLFVBQVUsR0FBRyxHQUFHLEVBQ25CLFVBQ0csSUFDSCxHQUFHLEdBQUssR0FBRyxLQUFPLEdBQUcsSUFDckIsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixVQUNHLFFBQ0EsSUFDSCxHQUFHLEdBQUss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QUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsUUFBUSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssRUFBRSxFQUNqQyxHQUFHLFdBQVcsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQ2hDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsUUFBUSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDekMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxRQUFRLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUN6QyxHQUFHLFdBQVcsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEVBQUUsRUFDcEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxRQUFRLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUM3QixVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFFBQVEsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEVBQUUsRUFDakMsR0FBRyxXQUFXLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBRyxFQUNoQyxVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLFFBQVEsR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFLLEdBQUksR0FBRyxHQUFHLEVBQ3pDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsUUFBUSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDekMsR0FBRyxXQUFXLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxFQUFFLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsVUFBVSxHQUFHLEdBQUssR0FBUyxPQUFRLE9BQUcsR0FBRyxHQUFHLEVBQy9DLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBSyxFQUFFLEVBQUcsR0FBRyxHQUFHLEVBQ2xDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsV0FBVyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDaEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLEdBQUssRUFBRSxFQUFHLEdBQUcsR0FBSyxFQUFFLEVBQ2pELEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBSyxFQUFFLEVBQUcsR0FBRyxHQUFHLEVBQ2xDLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLEdBQUcsc0JBQXNCLEdBQUcsR0FBSyxHQUFJLEdBQUcsR0FBSyxFQUFFLEVBQy9DLEdBQUcsV0FBVyxHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDaEMsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLEdBQUssRUFBRSxFQUFHLEdBQUcsR0FBRyxFQUM3QyxVQUNHLEtBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxHQUNqQixHQUFHLHNCQUFzQixHQUFHLEdBQUssR0FBSSxHQUFHLEdBQUcsRUFDM0MsVUFDRyxTQUNBLEtBQ0gsS0FBSyxFQUFJLENBQUMsR0FBRyxHQUFHLEVBQ2hCLFVBQ0csU0FDQSxLQUNILEdBQUcsR0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQ3RCLEtBQUssRUFBSSxHQUFHLEdBQUssR0FDakIsVUFDRyxLQUNILEtBQUssRUFBSSxHQUFHLEdBQUssR0FBSyxHQUFHLElBQ3pCLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxJQUNaLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQUssR0FBSyxHQUFHLElBQzlCLFVBQ0csS0FDSCxLQUFLLEVBQUksR0FBRyxHQUFLLEdBQUssR0FBSyxHQUFHLElBQzlCLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csS0FDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFFBRUgsV0FBVyxFQUNkLE1BQU8sQ0FBQyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUcsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBRyxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFHLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUcsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBRyxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBRyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFLLElBQUssR0FBSyxJQUFLLEdBQUssSUFBSyxFQUFHLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLElBQUssSUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLElBQUssR0FBSyxJQUFLLEVBQUksRUFBRyxFQUFFLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBTSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksSUFBSyxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsRUFBRSxHQUFNLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSyxDQUFDLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxJQUFLLElBQUssSUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksRUFBSyxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLElBQUssSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFJLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsSUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxJQUFLLElBQUssR0FBSyxJQUFLLEVBQUksRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQU0sR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLElBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLElBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLElBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssSUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxJQUFLLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxHQUFNLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLEdBQU0sR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsRUFBRSxHQUFNLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFJLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxHQUFNLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLElBQUssSUFBSyxDQUFDLEVBQUcsR0FBRyxFQUFHLElBQUssR0FBTSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssQ0FBQyxFQUFHLEdBQUcsRUFBRyxJQUFLLEdBQU0sSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLElBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxHQUFJLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxJQUFLLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUksSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxDQUFJLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLElBQUssRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLElBQUssR0FBSSxHQUFNLEdBQUksR0FBTSxHQUFJLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLEVBQUssQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLEVBQUssQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLElBQUssRUFBSyxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxJQUFLLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssQ0FBSSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLElBQUssR0FBTSxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxJQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssR0FBSyxJQUFLLEVBQUcsRUFBRyxDQUFFLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLElBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssRUFBRyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssRUFBSyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsSUFBSyxJQUFLLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsSUFBSyxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSyxJQUFLLEdBQUssSUFBSyxFQUFJLENBQUMsRUFBRyxFQUFFLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxDQUFFLElBQUssSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEdBQUssSUFBSyxHQUFLLElBQUssRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQU0sR0FBSSxJQUFLLElBQUssR0FBTSxJQUFLLEdBQU0sSUFBSyxFQUFLLEVBQUcsQ0FBRSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssR0FBSSxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLEVBQUssSUFBSyxFQUFLLElBQUssRUFBSyxJQUFLLENBQUksRUFBRyxDQUFFLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxDQUFFLEdBQUksR0FBTSxHQUFJLEdBQU0sR0FBSSxHQUFNLEdBQUksSUFBSyxJQUFLLEdBQU0sSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQU0sSUFBSyxHQUFNLElBQUssR0FBTSxJQUFLLEVBQUssRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsQ0FBRSxJQUFLLEVBQUssQ0FBQyxFQUFHLEVBQUUsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLENBQUUsSUFBSyxFQUFLLENBQUMsQ0FBQyxFQUMxK1osZUFBZ0IsQ0FBQyxFQUNqQixXQUE0QixXQUFnQixFQUFVLENBQUMsR0FBSyxHQUFNLENBQ2hFLEdBQUksR0FBSyxZQUNQLEtBQUssTUFBTSxFQUFHLE1BQ1QsQ0FDTCxJQUFJLEdBQVEsSUFBSSxNQUFNLEVBQUcsRUFFekIsTUFEQSxHQUFNLEtBQU8sR0FDUCxLQUVQLFlBQVksRUFDZixN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QUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLElBRUgsT0FEQSxLQUFLLFVBQVUsTUFBTSxFQUNkLEdBQ1AsVUFDRyxJQUNILE1BQU8sUUFFSixJQUVILE9BREEsS0FBSyxVQUFVLE1BQU0sRUFDZCxHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssU0FBUyxFQUNQLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxVQUFVLE1BQU0sRUFDZCxHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssU0FBUyxFQUNQLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxVQUFVLE1BQU0sRUFDZCxHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssU0FBUyxFQUNQLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLElBQ0gsTUFBTyxTQUVKLElBRUgsT0FEQSxLQUFLLFVBQVUsVUFBVSxFQUNsQixHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssVUFBVSxVQUFVLEVBQ2xCLEdBQ1AsVUFDRyxJQUNILE1BQU8sU0FFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sVUFFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sU0FFSixJQUNILE1BQU8sU0FFSixJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sU0FFSixJQUNILE1BQU8sU0FFSixJQUNILE1BQU8sU0FFSixLQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLEtBRUgsT0FEQSxLQUFLLFVBQVUsTUFBTSxFQUNkLEdBQ1AsVUFDRyxLQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLEtBRUgsT0FEQSxLQUFLLFVBQVUsTUFBTSxFQUNkLEdBQ1AsVUFDRyxLQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLEtBRUgsT0FEQSxLQUFLLFVBQVUsTUFBTSxFQUNkLEdBQ1AsVUFDRyxLQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLEtBRUgsT0FEQSxLQUFLLFVBQVUsTUFBTSxFQUNkLEdBQ1AsVUFDRyxLQUNILE1BQU8sV0FFSixLQUNILE1BQU8sWUFFSixLQUNILE1BQU8sT0FFSixLQUNILE1BQU8sUUFFSixLQUNILE1BQU8sTUFHVixXQUFXLEVBQ2QsTUFBTyxDQUFDLHVCQUF3Qix1QkFBd0IsdUJBQXdCLHVCQUF3Qix3QkFBeUIsWUFBYSxjQUFlLGlCQUFrQixpQkFBa0IsVUFBVyxhQUFjLFVBQVcsYUFBYyxjQUFlLGNBQWUsY0FBZSxhQUFjLFdBQVksV0FBWSxlQUFnQixpQkFBa0IsbUJBQW9CLHFCQUFzQixrQkFBbUIsZUFBZ0IsZ0JBQWlCLGtCQUFtQixjQUFlLGdCQUFpQix1QkFBd0IsZUFBZ0IsbUJBQW9CLGtCQUFtQixnQkFBaUIsZUFBZ0IsZ0JBQWlCLGlCQUFrQixjQUFlLHFCQUFzQixlQUFnQixlQUFnQixlQUFnQixlQUFnQixlQUFnQixlQUFnQixZQUFhLFlBQWEsYUFBYyxjQUFlLDhCQUErQiw4QkFBK0IsOEJBQStCLDhCQUErQixjQUFlLFNBQVUsV0FBWSxTQUFVLFNBQVUsU0FBVSxTQUFVLFVBQVcsNkJBQThCLHNCQUF1QixvQkFBcUIsNkJBQThCLHNCQUF1QixrQkFBbUIsZ0NBQWlDLHVCQUF3QixvQkFBcUIscUJBQXNCLGtCQUFtQiw0QkFBNkIsV0FBWSxZQUFhLFlBQWEsWUFBYSxZQUFhLFlBQWEsU0FBVSxZQUFhLFlBQWEsY0FBZSxjQUFlLHNCQUF1QixrQkFBbUIsOENBQStDLFlBQWEsWUFBYSxTQUFVLFNBQVUsVUFBVyxZQUFhLFdBQVksVUFBVyxTQUFVLFNBQVUsNkRBQThELFNBQVUscXhJQUFzeEksVUFBVyxVQUFXLFVBQVcsVUFBVyxVQUFXLFVBQVcsWUFBYSxVQUFXLDRCQUE2QixTQUFVLGdCQUFpQixVQUFXLFFBQVEsRUFDOXBNLFdBQVksQ0FBRSxhQUFnQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsYUFBZ0IsQ0FBRSxNQUFTLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsS0FBUSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxNQUFTLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxlQUFrQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsY0FBaUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLFNBQVksQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLFNBQVksQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsWUFBZSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsS0FBUSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLElBQU8sQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxHQUFHLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssR0FBRyxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUcsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxH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TUFBTSxFQUFJLElBQUksWUFBWSxFQUFFLEVBRTVCLFFBQVMsRUFBSSxFQUFHLEVBQUksS0FBTSxFQUN4QixFQUFFLEdBQUssRUFBRSxHQUFHLEdBR2QsUUFBUyxFQUFJLEdBQUksRUFBSSxLQUFNLEVBQ3pCLEVBQUUsR0FBSyxHQUFLLEVBQUUsRUFBSSxHQUFLLEVBQUUsRUFBSSxHQUFLLEVBQUUsRUFBSSxJQUFNLEVBQUUsRUFBSSxJQUFLLENBQUMsRUFHNUQsSUFBSSxFQUFJLEVBQUUsR0FDTixFQUFJLEVBQUUsR0FDTixFQUFJLEVBQUUsR0FDTixFQUFJLEVBQUUsR0FDTixFQUFJLEVBQUUsR0FFVixRQUFTLEVBQUksRUFBRyxFQUFJLEtBQU0sRUFBRyxDQUMzQixNQUFNLEVBQUksS0FBSyxNQUFNLEVBQUksRUFBRSxFQUNyQixFQUFJLEdBQUssRUFBRyxDQUFDLEVBQUksSUFBRSxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUksRUFBSSxFQUFFLEdBQUssRUFBRSxLQUFPLEVBQzNELEVBQUksRUFDSixFQUFJLEVBQ0osRUFBSSxHQUFLLEVBQUcsRUFBRSxJQUFNLEVBQ3BCLEVBQUksRUFDSixFQUFJLEVBR04sRUFBRSxHQUFLLEVBQUUsR0FBSyxJQUFNLEVBQ3BCLEVBQUUsR0FBSyxFQUFFLEdBQUssSUFBTSxFQUNwQixFQUFFLEdBQUssRUFBRSxHQUFLLElBQU0sRUFDcEIsRUFBRSxHQUFLLEVBQUUsR0FBSyxJQUFNLEVBQ3BCLEVBQUUsR0FBSyxFQUFFLEdBQUssSUFBTSxFQUd0QixNQUFPLENBQUMsRUFBRSxJQUFNLEdBQUssSUFBTSxFQUFFLElBQU0sR0FBSyxJQUFNLEVBQUUsSUFBTSxFQUFJLElBQU0sRUFBRSxHQUFLLElBQU0sRUFBRSxJQUFNLEdBQUssSUFBTSxFQUFFLElBQU0sR0FBSyxJQUFNLEVBQUUsSUFBTSxFQUFJLElBQU0sRUFBRSxHQUFLLElBQU0sRUFBRSxJQUFNLEdBQUssSUFBTSxFQUFFLElBQU0sR0FBSyxJQUFNLEVBQUUsSUFBTSxFQUFJLElBQU0sRUFBRSxHQUFLLElB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LENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxDQUFDLEVBQ2pZLGNBQStCLFdBQWdCLENBQVMsQ0FBQyxFQUFRLEVBQVEsRUFBVSxFQUFJLEVBQVMsRUFBSSxFQUFJLENBQ3RHLElBQUksRUFBSyxFQUFHLE9BQVMsRUFDckIsT0FBUSxPQUNELEdBQ0gsVUFDRyxHQUNILEtBQUssRUFBSSxDQUFDLEVBQ1YsVUFDRyxHQUNILEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxFQUFHLEVBQ3RCLEtBQUssRUFBSSxFQUFHLEVBQUssR0FDakIsVUFDRyxPQUNBLEdBQ0gsS0FBSyxFQUFJLEVBQUcsR0FDWixVQUNHLE9BQ0EsR0FDSCxLQUFLLEVBQUksQ0FBQyxFQUNWLFVBQ0csR0FDSCxFQUFHLFVBQVUsRUFBRyxFQUFLLEVBQUUsRUFDdkIsRUFBRyxV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QUFHLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLENBQUMsR0FBSSxFQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxH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RUFBRyxDQUFPLEVBRXRELE1BQU0sQ0FBQyxFQUFtQixDQUN0QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELE9BQU8sQ0FBQyxFQUFtQixDQUN2QixPQUFPLEtBQUssZUFBZSxFQUFtQixDQUFDLEVBRW5ELEVBQUUsQ0FBQyxFQUFZLENBQ1gsT0FBTyxLQUFLLFdBQVcsRUFBWSxDQUFDLEVBRXhDLEdBQUcsQ0FBQyxFQUFZLENBQ1osT0FBTyxLQUFLLFdBQVcsRUFBWSxDQUFDLEVBRXhDLEdBQUcsQ0FBQyxFQUFZLENBQ1osT0FBTyxLQUFLLFdBQVcsRUFBWSxDQUFDLEVBRXhDLEdBQUcsQ0FBQyxFQUFZLENBQ1osT0FBTyxLQUFLLFdBQVcsRUFBWSxDQUFDLEVBRXhDLEdBQUcsQ0FBQyxFQUFZLENBQ1osT0FBTyxLQUFLLFdBQVcsRUFBWSxDQUFDLEVBRXhDLEdBQUcsQ0FBQyxFQUFZLENBQ1osT0FBTyxLQUFLLFdBQVcsRUFBWSxDQUFDLEVBRXhDLEdBQUcsQ0FBQyxFQUFZLENBQ1osT0FBTyxLQUFLLFdBQVcsRUFB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QU8sQUFBSyxJQUFMLEtBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFRLElBQUwsR0FBWSxJQUFMLEdBQU8sRUFBRSxFQUFNLElBQUosSUFBUSxFQUFFLEdBQVEsSUFBTCxLQUFTLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFXLElBQUwsSUFBYSxJQUFMLElBQVksSUFBSixHQUFXLElBQUosR0FBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEdBQVUsSUFBUCxhQUEyQixHQUFqQixTQUFtQixNQUFNLElBQUksVUFBVSwwRUFBMEUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBTyxFQUFFLFNBQU4sRUFBYSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFPLElBQUwsR0FBTyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBUyxFQUFFLEVBQUUsV0FBVyxDQUFDLEtBQXRCLEdBQXlCLEFBQUssSUFBTCxLQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBUSxJQUFMLEdBQVksSUFBTCxHQUFPLEVBQUUsRUFBTSxJQUFKLElBQVEsRUFBRSxHQUFRLElBQUwsS0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBVyxJQUFMLElBQWEsSUFBTCxJQUFZLElBQUosR0FBVyxJQUFKLEdBQU8sSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQU8sSUFBTCxLQUFTLEVBQUUsS0FBSyxFQUFFLEtBQVMsSUFBSixHQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBUSxJQUFKLEdBQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFZLElBQUosT0FBTSxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxlQUFlLEVBQUUs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QUFZLElBQUosT0FBTSxFQUFFLEtBQUssS0FBWSxJQUFQLE9BQVcsRUFBRSxHQUFZLElBQUosT0FBTSxFQUFFLEtBQUssTUFBYSxJQUFQLE9BQVcsRUFBRSxHQUFZLElBQUosT0FBTSxFQUFFLEtBQUssU0FBZ0IsSUFBUCxPQUFXLEVBQUUsR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssU0FBUyxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUyxNQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFTLEtBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxBQUFLLElBQUwsSUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLE9BQU8sSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFTLEtBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLFdBQVksT0FBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFPLE9BQUUsTUFBTSxVQUFVLENBQUMsQ0FBQyxXQUFXLEtBQUssUUFBUSxRQUFTLE9BQU0sRUFBRSxDQUFDLE9BQU8sS0FBSyxVQUFVLEtBQUssUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssUUFBUSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEtBQUssVUFBVSxFQUFFLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxHQUFHLEtBQUssYUFBYSxFQUFFLFNBQVMsS0FBSyxZQUFZLEtBQUssT0FBTyxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssU0FBUyxFQUFFLE9BQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxFQUFFLFVBQVUsS0FBSyxXQUFXLEtBQUssUUFBUSxFQUFFLE1BQU0sS0FBSyxPQUFPLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQVMsSUFBTCxJQUFhLElBQUwsSUFBYSxJQUFMLElBQWMsSUFBTixLQUFTLEdBQVEsSUFBTCxJQUFRLEdBQVEsSUFBTCxJQUFRLEdBQVEsSUFBTCxJQUFRLEdBQVEsSUFBTCxHQUFPLEFBQUssSUFBTCxLQUFTLEdBQUcsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBYSxJQUFKLFNBQVEsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQUFBUyxJQUFKLFNBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxBQUFTLElBQUosUUFBWSxJQUFMLEtBQVMsR0FBRyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBUSxJQUFMLEtBQVMsRUFBRSxJQUFJLE9BQVcsSUFBTCxLQUFTLEdBQUcsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBWSxJQUFKLE9BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEFBQUssSUFBTCxJQUFhLElBQUwsSUFBaUIsSUFBSixTQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFhLElBQUosU0FBUSxHQUFHLEVBQUUsSUFBSSxPQUFnQixJQUFKLE9BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxPQUFPLEdBQVksRUFBRSxTQUFYLE9BQWtCLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBWSxFQUFFLEtBQUssV0FBVyxDQUFDLElBQXhCLEtBQTRCLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxXQUFXLENBQUMsR0FBRyxNQUFXLEVBQUUsS0FBSyxXQUFXLENBQUMsSUFBeEIsR0FBMEIsRUFBRSxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBWSxJQUFULFVBQWMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsR0FBUSxJQUFMLEdBQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBTyxJQUFMLEdBQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsWUFBWSxHQUFHLEVBQU8sSUFBTCxHQUFPLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEdBQVEsRUFBRSxXQUFXLENBQUMsSUFBbkIsSUFBMkIsRUFBRSxXQUFXLENBQUMsSUFBbkIsR0FBcUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxPQUFPLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsR0FBUSxFQUFFLFdBQVcsQ0FBQyxJQUFuQixHQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFHLE9BQU8sYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLG1CQUFtQixDQUFDLE9BQUUsQ0FBTSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFF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UyxJQUFxQixHQUFXLFlBQ3pDLEVBQVMsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQWUsQ0FBQyxFQUFFLEtBQUssS0FBTSxFQUFlLENBQUMsRUFBRSxLQUFLLElBQUssRUFBRSxFQUFFLEtBQUssUUFBUyxVQUFVLEVBQVEsTUFBTSxHQUFXLEVBQ25KLEVBQVMsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFLLElBQUksRUFBRSxLQUFLLE9BQVEsTUFBTSxFQUFFLEtBQUssUUFBUyxVQUFVLEVBQVEsTUFBTSxHQUFXLEVBQ2xMLEVBQVMsT0FBTyxRQUFRLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFLLElBQUksRUFBRSxLQUFLLE9BQVEsTUFBTSxFQUFFLEtBQUssUUFBUyxVQUFVLEVBQVEsTUFBTSxHQUFXLEVBQ2xMLEVBQVMsT0FBTyxNQUFNLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQWUsQ0FBQyxFQUFFLEtBQUssS0FBTSxFQUFlLEVBQUksQ0FBQyxFQUFFLEtBQUssU0FBVSxNQUFNLEVBQUUsS0FBSyxRQUFTLFVBQVUsRUFBUSxNQUFNLEdBQVcsRUFDaE8sRUFBUyxPQUFPLE1BQU0sRUFBRSxLQUFLLEtBQU0sRUFBZSxFQUFJLENBQUMsRUFBRSxLQUFLLEtBQU0sRUFBZSxFQUFJLENBQUMsRUFBRSxLQUFLLEtBQU0sRUFBZSxDQUFDLEVBQUUsS0FBSyxLQUFNLEVBQWUsRUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFVLE1BQU0sRUFBRSxLQUFLLFFBQVMsVUFBVSxFQUFRLE1BQU0sR0FBVyxNQUMzTixDQUNMLE1BQU0sRUFBUyxFQUFTLE9BQU8sUUFBUSxFQUt2QyxHQUpBLEVBQU8sS0FBSyxLQUFNLEVBQWUs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VSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBUSxLQUFVLEVBQUcsS0FBSyxLQUFPLEtBQVMsRUFBRyxFQUFJLE9BQVksS0FBUyxFQUFHLEVBQUksS0FBVSxLQUFRLEVBQVEsS0FBVSxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsUUFFdkssR0FBZ0IsR0FBVSxJQUFJLEVBQVEsTUFBTSxHQUFHLE1BQy9DLEVBQVUsS0FBSyxFQUFHLEtBQUssRUFBRyxPQUFPLEVBQVEsS0FBVSxFQUFHLEtBQUssS0FBUSxLQUFTLEVBQUcsRUFBSSxPQUFZLEtBQVMsRUFBRyxFQUFJLEtBQVUsS0FBTyxFQUFRLEtBQVUsRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLFlBR3JLLEVBQUcsRUFBSSxFQUFHLEVBQ1osRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQVEsS0FBVSxLQUFPLEVBQUcsRUFBSSxLQUFVLE9BQVcsRUFBRyxFQUFJLEtBQVUsS0FBUyxLQUFRLEVBQUcsS0FBSyxFQUFRLE9BQVksRUFBRyxLQUFLLEVBQUcsUUFFdkssR0FBZ0IsR0FBVSxJQUFJLEVBQVEsTUFBTSxHQUFHLE1BQy9DLEVBQVUsS0FBSyxFQUFHLEtBQUssRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFRLEtBQVUsS0FBUSxFQUFHLEVBQUksS0FBVSxPQUFXLEVBQUcsRUFBSSxLQUFVLEtBQVMsS0FBTyxFQUFHLEtBQUssRUFBUSxPQUFZLEVBQUcsS0FBSyxFQUFHLFlBSTNLLEVBQU0sb0JBQ04sRUFBTyxvQkFDUCxFQUFTLEdBQ1QsRUFBUyxHQUNMLEtBQVEsS0FBTSxDQUNoQixHQUFJLEVBQUcsRUFBSSxFQUFHLEVBQ1osR0FBSSxFQUFRLE9BQVMsR0FBVyxPQUFTLEVBQVEsS0FBTyxFQUFRLFFBQVEsR0FDdEUsRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsRUFBSSxLQUFVLEtBQU8sRUFBRyxFQUFJLEtBQVUsRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLFFBRXZHLEdBQVUsS0FBSyxFQUFHLEtBQUssRUFBRyxPQUFPLEVBQUcsRUFBSSxLQUFVLEVBQUcsS0FBSyxLQUFRLEVBQUcsS0FBSyxFQUFHLEVBQUksT0FBWSxFQUFHLEtBQUssRUFBRyxJQUc1RyxHQUFJLEVBQUcsRUFBSSxFQUFHLEVBS1osR0FKQSxFQUFNLG9CQUNOLEVBQU8sb0JBQ1AsRUFBUyxHQUNULEVBQVMsR0FDTCxFQUFRLE9BQVMsR0FBVyxPQUFTLEVBQVEsS0FBTyxFQUFRLFFBQVEsR0FDdEUsRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsRUFBSSxLQUFVLEtBQVEsRUFBRyxFQUFJLEtBQVUsRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLFFBRXhHLEdBQVUsS0FBSyxFQUFHLEtBQUssRUFBRyxPQUFPLEVBQUcsRUFBSSxLQUFVLEVBQUcsS0FBSyxLQUFPLEVBQUcsS0FBSyxFQUFHLEVBQUksT0FBWSxFQUFHLEtBQUssRUFBRyxJQUczRyxHQUFJLEVBQUcsSUFBTSxFQUFHLEVBQ2QsRUFBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsWUFFckMsS0FBUSxLQUFNLENBQ3ZCLEdBQUksRUFBRyxFQUFJLEVBQUcsRUFDWixHQUFJLEVBQVEsT0FBUyxHQUFXLE9BQVMsRUFBUSxLQUFPLEVBQVEsUUFBUSxHQUN0RSxFQUFVLEtBQUssRUFBRyxLQUFLLEVBQUcsT0FBTyxFQUFHLEtBQUssRUFBRyxFQUFJLEtBQVUsS0FBUSxFQUFHLEVBQUksS0FBVSxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsUUFFeEcsR0FBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxFQUFJLEtBQVUsRUFBRyxLQUFLLEtBQU8sRUFBRyxLQUFLLEVBQUcsRUFBSSxPQUFZLEVBQUcsS0FBSyxFQUFHLElBRzNHLEdBQUksRUFBRyxFQUFJLEVBQUcsRUFLWixHQUpBLEVBQU0sb0JBQ04sRUFBTyxvQkFDUCxFQUFTLEdBQ1QsRUFBUyxHQUNMLEVBQVEsT0FBUyxHQUFXLE9BQVMsRUFBUSxLQUFPLEVBQVEsUUFBUSxHQUN0RSxFQUFVLEtBQUssRUFBRyxLQUFLLEVBQUcsT0FBTyxFQUFHLEtBQUssRUFBRyxFQUFJLEtBQVUsS0FBTyxFQUFHLEVBQUksS0FBVSxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsUUFFdkcsR0FBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxFQUFJLEtBQVUsRUFBRyxLQUFLLEtBQU8sRUFBRyxLQUFLLEVBQUcsRUFBSSxPQUFZLEVBQUcsS0FBSyxFQUFHLElBRzNHLEdBQUksRUFBRyxJQUFNLEVBQUcsRUFDZCxFQUFVLEtBQUssRUFBRyxLQUFLLEVBQUcsT0FBTyxFQUFHLEtBQUssRUFBRyxRQUV6QyxDQUNMLEdBQUksRUFBRyxFQUFJLEVBQUcsRUFDWixHQUFJLEVBQVEsT0FBUyxHQUFXLE9BQVMsRUFBUSxLQUFPLEVBQVEsUUFBUSxHQUN0RSxFQUFVLEtBQUssRUFBRyxLQUFLLEVBQUcsT0FBTyxFQUFHLEVBQUksS0FBVSxFQUFHLEtBQUssS0FBUSxFQUFHLEtBQUssRUFBRyxFQUFJLE9BQVksRUFBRyxLQUFLLEVBQUcsUUFFeEcsR0FBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsRUFBSSxLQUFVLEtBQU8sRUFBRyxFQUFJLEtBQVUsRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLElBRzNHLEdBQUksRUFBRyxFQUFJLEVBQUcsRUFDWixHQUFJLEVBQVEsT0FBUyxHQUFXLE9BQVMsRUFBUSxLQUFPLEVBQVEsUUFBUSxHQUN0RSxFQUFVLEtBQUssRUFBRyxLQUFLLEVBQUcsT0FBTyxFQUFHLEVBQUksS0FBVSxFQUFHLEtBQUssS0FBTyxFQUFHLEtBQUssRUFBRyxFQUFJLE9BQVksRUFBRyxLQUFLLEVBQUcsUUFFdkcsR0FBVSxLQUFLLEVBQUcsS0FBSyxFQUFHLE9BQU8sRUFBRyxLQUFLLEVBQUcsRUFBSSxLQUFVLEtBQVEsRUFBRyxFQUFJLEtBQVUsRUFBRyxPQUFPLEVBQUcsS0FBSyxFQUFHLElBRzVHLEdB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QUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxPQUFVLFVBQVUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTyxHQUFFLEdBQVMsSUFBTixJQUFRLE1BQU8sR0FBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLE9BQVcsSUFBSixFQUFNLEVBQVEsRUFBRSxLQUFSLEtBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsUUFBUSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBWSxHQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLGFBQWEsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxhQUFhLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxTQUFTLEVBQUUsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGFBQWEsR0FBRyxFQUFFLFlBQWEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLFFBQVEsR0FBRyxFQUFFLEVBQUUsUUFBUSw0Q0FBNkMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLHlDQUEwQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLFdBQVcsRUFBRSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFVBQW9CLEdBQWpCLFNBQW1CLEdBQUcsRUFBRSxXQUFXLENBQUMsSUFBUSxNQUFKLEVBQWMsT0FBSixHQUFFLEVBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsR0FBWSxJQUFKLE9BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFTLElBQUwsS0FBUyxFQUFFLE1BQU0sVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLG1CQUFtQixJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFRLEtBQUosRUFBYSxJQUFKLEVBQVksS0FBSixHQUFOLEVBQWUsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxVQUFvQixHQUFqQixTQUFtQixDQUFDLElBQUksRUFBTyxFQUFFLEtBQVAsR0FBVSxFQUFPLEVBQUUsS0FBUCxHQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLFFBQVEsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxLQUFLLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxNQUFZLElBQU4sSUFBUSxLQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxHQUFFLEVBQUUsSUFBSSxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUUsR0FBRSxHQUFHLEVBQUUsR0FBRSxHQUFHLEVBQUUsR0FBRSxJQUFHLEVBQUUsR0FBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFHLEVBQUUsT0FBTyxJQUFHLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBQyxDQUFDLEdBQUcsR0FBRSxJQUFJLEtBQUssRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBQyxFQUFFLElBQUksR0FBRSxFQUFFLEVBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsVUFBUyxHQUFOLENBQVMsT0FBTyxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFRLElBQUwsS0FBUyxLQUFLLEdBQUcsS0FBSyxPQUFPLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEtB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LEdBQ2pCLEVBQUcsY0FBYyxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDL0MsRUFBRyxRQUFRLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBSyxFQUFFLEVBQ2pDLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQ2pCLEVBQUcsUUFBUSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDN0IsVUFDRyxRQUNBLElBQ0gsS0FBSyxFQUFJLEVBQUcsRUFBSyxHQUFLLElBQU0sRUFBRyxHQUMvQixVQUNHLFFBQ0EsUUFDQSxJQUNILEtBQUssRUFBSSxFQUFHLEVBQUssR0FBSyxJQUFNLEVBQUcsRUFBSyxHQUFLLElBQU0sRUFBRyxHQUNsRCxVQUNHLFFBQ0EsSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQUssSUFBTSxFQUFHLEVBQUssR0FBSyxJQUFNLEVBQUcsRUFBSyxHQUFLLElBQU0sRUFBRyxHQUNyRSxRQUVILFdBQVcsRUFDZCxNQUFPLENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxD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O0FBQUEsY0FZTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQU1ILEVBQVE7QUFBQSxZQUNmLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FZTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFtQlYsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU1SLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWFSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVIsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFXUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFPUixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVYsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFVUixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFPVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FVTixFQUFRO0FBQUEsWUFDVixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQVFSLEVBQVE7QUFBQTtBQUFBO0FB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QTkzQ0osS0F3dkJBLEtBd2tCQSxLQTl5Q0ksV0FBaUIsRUFBRyxDQUN0QixJQUFJLEVBQW9CLFVBQWUsQ0FBQyxHQUFHLEdBQUcsR0FBSSxHQUFHLENBQ25ELElBQUssR0FBSyxJQUFNLENBQUMsRUFBRyxHQUFJLEdBQUUsT0FBUSxLQUFLLEdBQUcsR0FBRSxLQUFNLElBQ2xELE9BQU8sSUFDTixHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUUsRUFB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QUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsRUFDL3VCLGNBQStCLFdBQWdCLEVBQVMsQ0FBQyxHQUFRLEdBQVEsR0FBVSxHQUFJLEdBQVMsR0FBSSxHQUFJLENBQ3RHLElBQUksR0FBSyxHQUFHLE9BQVMsRUFDckIsT0FBUSxRQUNELElBQ0gsS0FBSyxFQUFJLEdBQUcsSUFDWixVQUNHLElBQ0gsS0FBSyxFQUFJLEdBQUcsR0FBSyxH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QUFHLElBQzlCLFFBRUgsV0FBVyxFQUNkLE1BQU8sQ0FBQyxDQUFFLEdBQUksRUFBSyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBRSxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsR0FBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUcsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxHQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxHQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFJLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEVBQUcsR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssRUFBRyxHQUFLLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEdBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSyxFQUFHLEdBQUssRUFBRyxHQUFLLEVBQUcsR0FBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSSxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksR0FBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssRUFBRyxHQUFLLEVBQUcs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Q0FBQyxFQUFHLEVBQUcsRUFBSSxFQUFHLENBQ25ELElBQUssRUFBSyxHQUFNLENBQUMsRUFBRyxFQUFJLEVBQUUsT0FBUSxJQUFLLEVBQUcsRUFBRSxJQUFNLEdBQ2xELE9BQU8sR0FDTixHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FB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RyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sRUFBRyxHQUFLLEtBQU0sTUFBTyxFQUN0QyxVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxFQUFHLEdBQUssS0FBTSxVQUFXLEVBQzFDLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxHQUNaLFVBQ0csSUFDSCxLQUFLLEVBQUksRUFBRyxFQUFLLEdBQUssR0FBSyxFQUFHLEdBQzlCLFFBRUgsV0FBVyxFQUNkLE1BQU8sQ0FBQyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcs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RUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBSyxFQUFHLGVBQWtCLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQUssRUFBRyxvQkFBdUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxDQUFDLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFFB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LENBQ3RCLElBQUksRUFBb0IsVUFBZSxDQUFDLEdBQUcsRUFBRyxFQUFJLEVBQUcsQ0FDbkQsSUFBSyxFQUFLLEdBQU0sQ0FBQyxFQUFHLEVBQUksR0FBRSxPQUFRLElBQUssRUFBRyxHQUFFLElBQU0sR0FDbEQsT0FBTyxHQUNOLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcs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Q0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUks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QyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEdBQUksRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUssRUFBRyxHQUFJLEVBQUcsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxJQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsRUFBSyxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDdHBILGVBQWdCLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUs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S0FRQSxLQUdBLEtBS0EsS0F3a0RBLEtBR0EsY0FyakRJLFdBQWlCLEVBQUcsQ0FDdEIsSUFBSSxFQUFvQixVQUFlLENBQUMsRUFBRyxFQUFHLEVBQUksR0FBRyxDQUNuRCxJQUFLLEVBQUssR0FBTSxDQUFDLEVBQUcsR0FBSSxFQUFFLE9BQVEsS0FBSyxFQUFHLEVBQUUsS0FBTSxHQUNsRCxPQUFPLEdBQ04sR0FBRyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxH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QyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsQ0FBQyxFQUNuckIsY0FBK0IsV0FBZ0IsQ0FBUyxDQUFDLEVBQVEsRUFBUSxHQUFVLEdBQUksR0FBUyxHQUFJLEdBQUksQ0FDdEcsSUFBSSxHQUFLLEdBQUcsT0FBUyxFQUNyQixPQUFRLFFBQ0QsR0FFSCxPQURBLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFDUixHQUFHLElBQ1YsVUFDRyxPQUNBLEdBQ0gsS0FBSyxFQUFJLENBQUMsRUFDVixVQUNHLE9BQ0EsSUFDSCxHQUFHLEdBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUN0QixLQUFLLEVBQUksR0FBRyxHQUFLLEdBQ2pCLFVBQ0csT0FDQSxPQUNBLFFBQ0Es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R0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQUssQ0FBRSxFQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBSSxFQUFHLEVBQUUsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsR0FBSSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsRUFBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEdBQUksSUFBSyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsR0FBSSxJQUFLLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLElBQUssR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEdBQUksSUFBSyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLElBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxFQUFHLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLElBQUssR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxJQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLEVBQUssQ0FBRSxFQUFHLElBQUssR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssRUFBSyxDQUFFLEVBQUcsSUFBSyxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxJQUFLLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUs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QUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLEVBQU0sQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEVBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxFQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsRUFBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFNLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBTSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRSxFQUFHLEdBQU0sQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFFLEVBQUcsR0FBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUUsRUFBRyxHQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUN2bUMsR0FBVSxDQUNaLE1BQXVCLFdBQWdCLEVBQUssRUFBRyxHQUM1QyxPQUFPLEVBQ1YsR0FBSSxDQUFDLEVBQ0wsU0FBVSxDQUFFLE1BQVMsRUFBRyxNQUFTLEVBQUcsV0FBYyxFQUFHLFdBQWMsRUFBRyxZQUFlLEVBQUcsY0FBaUIsRUFBRyxRQUFXLEVBQUcsSUFBTyxFQUFHLFVBQWEsR0FBSSxXQUFjLEdBQUksSUFBTyxHQUFJLElBQU8sR0FBSSxJQUFPLEdBQUksY0FBaUIsR0FBSSxjQUFpQixHQUFJLFVBQWEsR0FBSSxpQkFBb0IsR0FBSSxZQUFlLEdBQUksa0JBQXFCLEdBQUksTUFBUyxHQUFJLG1CQUFzQixHQUFJLGVBQWtCLEdBQUksZ0JBQW1CLEdBQUksb0JBQXVCLEdBQUksZUFBa0IsR0FBSSxlQUFrQixHQUFJLGtCQUFxQixHQUFJLGNBQWlCLEdBQUksVUFBYSxHQUFJLFVBQWEsR0FBSSxnQkFBbUIsR0FBSSxVQUFhLEdBQUksZ0JBQW1CLEdBQUksMEJBQTZCLEdBQUksb0JBQXVCLEdBQUksYUFBZ0IsR0FBSSxnQkFBbUIsR0FBSSxZQUFlLEdBQUksVUFBYSxHQUFJLGdCQUFtQixHQUFJLGdCQUFtQixHQUFJLFFBQVcsR0FBSSxNQUFTLEdBQUksaUJBQW9CLEdBQUksZUFBa0IsR0FBSSxPQUFVLEdBQUksVUFBYSxHQUFJLFNBQVksR0FBSSxTQUFZLEdBQUksU0FBWSxHQUFJLEtBQVEsR0FBSSxhQUFnQixHQUFJLGFBQWdCLEdBQUksYUFBZ0IsR0FBSSxhQUFnQixHQUFJLGFBQWdCLEdBQUksU0FBWSxHQUFJLFlBQWUsR0FBSSxVQUFhLEdBQUksWUFBZSxHQUFJLFdBQWMsR0FBSSxTQUFZLEdBQUksS0FBUSxHQUFJLFlBQWUsR0FBSSxTQUFZLEdBQUksS0FBUSxHQUFJLFlBQWUsR0FBSSxNQUFTLEdBQUksY0FBaUIsR0FBSSxjQUFpQixHQUFJLEtBQVEsR0FBSSxNQUFTLEdBQUksTUFBUyxHQUFJLFVBQWEsR0FBSSxTQUFZLEdBQUksTUFBUyxHQUFJLE1BQVMsR0FBSSxlQUFrQixHQUFJLElBQU8sR0FBSSxNQUFTLEdBQUksS0FBUSxHQUFJLE1BQVMsR0FBSSxLQUFRLEdBQUksSUFBTyxHQUFJLGFBQWdCLEdBQUksVUFBYSxHQUFJLGdCQUFtQixHQUFJLGdCQUFtQixHQUFJLFNBQVksR0FBSSxPQUFVLEdBQUksS0FBTSxHQUFJLEtBQU0sR0FBSSxRQUFXLEdBQUksTUFBUyxHQUFJLFNBQVksR0FBSSxhQUFnQixHQUFJLFdBQWMsR0FBSSxRQUFXLEVBQUcsS0FBUSxDQUFFLEVBQy9zRCxXQUFZLENBQUUsRUFBRyxRQUFTLEVBQUcsZ0JBQWlCLEVBQUcsVUFBVyxFQUFHLE1BQU8sR0FBSSxNQUFPLEdBQUksTUFBTyxHQUFJLE1BQU8sR0FBSSxjQUFlLEdBQUksUUFBUyxHQUFJLFlBQWEsR0FBSSxrQkFBbUIsR0FBSSxZQUFhLEdBQUksa0JBQW1CLEdBQUksNEJBQTZCLEdBQUksZUFBZ0IsR0FBSSxjQUFlLEdBQUksWUFBYSxHQUFJLGtCQUFtQixHQUFJLFFBQVMsR0FBSSxtQkFBb0IsR0FBSSxpQkFBa0IsR0FBSSxTQUFVLEdBQUksWUFBYSxHQUFJLFdBQVksR0FBSSxPQUFRLEdBQUksZUFBZ0IsR0FBSSxlQUFnQixHQUFJLGVBQWdCLEdBQUksZUFBZ0IsR0FBSSxjQUFlLEdBQUksWUFBYSxHQUFJLGNBQWUsR0FBSSxhQUFjLEdBQUksV0FBWSxHQUFJLE9BQVEsR0FBSSxjQUFlLEdBQUksV0FBWSxHQUFJLE9BQVEsR0FBSSxjQUFlLEdBQUksUUFBUyxHQUFJLGdCQUFpQixHQUFJLGdCQUFpQixHQUFJLE9BQVEsR0FBSSxRQUFTLEdBQUksUUFBUyxHQUFJLFdBQVksR0FBSSxRQUFTLEdBQUksTUFBTyxHQUFJLFFBQVMsR0FBSSxPQUFRLEdBQUksUUFBUyxHQUFJLE9BQVEsR0FBSSxNQUFPLEdBQUksa0JBQW1CLEdBQUksV0FBWSxHQUFJLFNBQVUsR0FBSSxLQUFNLEdBQUksS0FBTSxHQUFJLFVBQVcsR0FBSSxRQUFTLEdBQUksV0FBWSxHQUFJLGVBQWdCLEdBQUksWUFBYSxFQUNoaEMsYUFBYyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxH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RUFBRyxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksRUFBSyxHQUFJLEVBQUcsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsR0FBRyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUssR0FBSSxHQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEdBQUcsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLElBQUssR0FBSSxFQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLEVBQUcsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLElBQUssR0FBSSxFQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsRUFBRyxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxJQUFLLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxHQUFHLENBQUUsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEdBQUcsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsR0FBRyxDQUFFLENBQUMsRUFBRyxFQUFFLEdBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksSUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUssR0FBSSxHQUFLLEdBQUksRUFBSSxDQUFDLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDNy9LLGVBQWdCLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxJQUFLLENBQUMsRUFBRyxDQUFDLEVBQUcsSUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLElBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUN0SCxXQUE0QixXQUFnQixFQUFVLENBQUMsR0FBSyxHQUFNLENBQ2hFLEdBQUksR0FBSyxZQUNQLEtBQUssTUFBTSxFQUFHLE1BQ1QsQ0FDTCxJQUFJLEVBQVEsSUFBSSxNQUFNLEVBQUcsRUFFekIsTUFEQSxFQUFNLEtBQU8sR0FDUCxJQUVQLFlBQVksRUFDZixNQUF1QixXQUFnQixFQUFLLENBQUMsR0FBTyxDQUNsRCxJQUFJLEdBQU8sS0FBTSxFQUFRLENBQUMsQ0FBQyxFQUFHLEdBQVMsQ0FBQyxFQUFHLEdBQVMsQ0FBQyxJQUFJLEVBQUcsR0FBUyxDQUFDLEVBQUcsR0FBUSxLQUFLLE1BQU8sR0FBUyxHQUFJLEdBQVcsRUFBRyxHQUFTLEVBQUcsR0FBYSxFQUFHLEdBQVMsRUFBRyxHQUFNLEVBQ2xLLEdBQU8sR0FBTyxNQUFNLEtBQUssVUFBVyxDQUFDLEVBQ3JDLEdBQVMsT0FBTyxPQUFPLEtBQUssS0FBSyxFQUNqQyxHQUFjLENBQUUsR0FBSSxDQUFDLENBQUUsRUFDM0IsUUFBUyxNQUFLLEtBQUssR0FDakIsR0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUssR0FBSSxFQUFDLEVBQ2pELEdBQVksR0FBRyxJQUFLLEtBQUssR0FBRyxJQU1oQyxHQUhBLEdBQU8sU0FBUyxHQUFPLEdBQVksRUFBRSxFQUNyQyxHQUFZLEdBQUcsTUFBUSxHQUN2QixHQUFZLEdBQUcsT0FBUyxZQUNiLEdBQU8sUUFBVSxZQUMxQixHQUFPLE9BQVMsQ0FBQyxFQUVuQixJQUFJLEdBQVEsR0FBTyxPQUNuQixHQUFPLEtBQUssRUFBSyxFQUNqQixJQUFJLEdBQVMsR0FBTyxTQUFXLEdBQU8sUUFBUSxPQUM5QyxVQUFXLEdBQVksR0FBRyxhQUFlLFdBQ3ZDLEtBQUssV0FBYSxHQUFZLEdBQUcsZUFFakMsTUFBSyxXQUFhLE9BQU8sZUFBZSxJQUFJLEVBQUUsV0FFaEQsU0FBUyxFQUFRLENBQUMsR0FBRyxDQUNuQixFQUFNLE9BQVMsRUFBTSxPQUFTLEVBQUksR0FDbEMsR0FBTyxPQUFTLEdBQU8sT0FBUyxHQUNoQyxHQUFPLE9BQVMsR0FBTyxPQUFTLEdBRWxDLEVBQU8sR0FBVSxVQUFVLEVBQzNCLFNBQVMsRUFBRyxFQUFHLENBQ2IsSUFBSSxHQUNJLEdBQU8sSUFBSSxHQUFLLEdBQU8sSUFBSSxHQUFLLEdBQ3hDLFVBQVcsS0FBVSxTQUFVLENBQzdCLEdBQUksY0FBaUIsTUFDbkIsR0FBUyxHQUNULEdBQVEsR0FBTyxJQUFJLEVBRXJCLEdBQVEsR0FBSyxTQUFTLEtBQVUsR0FFbEMsT0FBTyxHQUVULEVBQU8sR0FBSyxLQUFLLEVBQ2pCLElBQUksR0FBUSxHQUFnQixHQUFPLEdBQVEsR0FBRyxHQUFHLEdBQVEsQ0FBQyxFQUFHLEdBQUcsR0FBSyxHQUFVLEdBQy9FLE1BQU8sR0FBTSxDQUVYLEdBREEsR0FBUSxFQUFNLEVBQU0sT0FBUyxHQUN6QixLQUFLLGVBQWUsSUFDdEIsR0FBUyxLQUFLLGVBQWUsUUFDeEIsQ0FDTCxHQUFJLEtBQVcsYUFBZSxJQUFVLFlBQ3RDLEdBQVMsR0FBSSxFQUVmLEdBQVMsR0FBTSxLQUFVLEdBQU0sSUFBTyxJQUV4QyxVQUFXLEtBQVcsY0FBZ0IsR0FBTyxTQUFXLEdBQU8sR0FBSSxDQUNqRSxJQUFJLEdBQVMsR0FDYixHQUFXLENBQUMsRUFDWixJQUFLLE1BQUssR0FBTSxJQUNkLEdBQUksS0FBSyxXQUFXLEtBQU0sR0FBSSxHQUM1QixHQUFTLEtBQUssSUFBTSxLQUFLLFdBQVcsSUFBSyxHQUFHLEVBR2hELEdBQUksR0FBTyxhQUNULEdBQVMsd0JBQTBCLEdBQVcsR0FBSyxNQUFRLEdBQU8sYUFBYSxFQUFJLGVBQWlCLEdBQVMsS0FBSyxJQUFJLEVBQUksV0FBYSxLQUFLLFdBQVcsS0FBVyxJQUFVLFFBRTVLLElBQVMsd0JBQTBCLEdBQVcsR0FBSyxpQkFBbUIsSUFBVSxHQUFNLGVBQWlCLEtBQU8sS0FBSyxXQUFXLEtBQVcsSUFBVSxLQUVySixLQUFLLFdBQVcsR0FBUSxDQUN0QixLQUFNLEdBQU8sTUFDYixNQUFPLEtBQUssV0FBVyxLQUFXLEdBQ2xDLEtBQU0sR0FBTyxTQUNiLElBQUssR0FDTCxXQUNGLENBQUMsRUFFSCxHQUFJLEdBQU8sYUFBYyxPQUFTLEdBQU8sT0FBUyxFQUNoRCxNQUFNLElBQUksTUFBTSxvREFBc0QsR0FBUSxZQUFjLEVBQU0sRUFFcEcsT0FBUSxHQUFPLFFBQ1IsR0FNSCxHQUxBLEVBQU0sS0FBSyxFQUFNLEVBQ2pCLEdBQU8sS0FBSyxHQUFPLE1BQU0sRUFDekIsR0FBTyxLQUFLLEdBQU8sTUFBTSxFQUN6QixFQUFNLEtBQUssR0FBTyxFQUFFLEVBQ3BCLEdBQVMsTUFDSixJQUtILEdBSkEsR0FBUyxHQUFPLE9BQ2hCLEdBQVMsR0FBTyxPQUNoQixHQUFXLEdBQU8sU0FDbEIsR0FBUSxHQUFPLE9BQ1gsR0FBYSxFQUNmLFNBR0YsSUFBUyxHQUNULEdBQWlCLEtBRW5CLFVBQ0csR0FTSCxHQVJBLEdBQU0sS0FBSyxhQUFhLEdBQU8sSUFBSSxHQUNuQyxHQUFNLEVBQUksR0FBTyxHQUFPLE9BQVMsSUFDakMsR0FBTSxHQUFLLENBQ1QsV0FBWSxHQUFPLEdBQU8sUUFBVSxJQUFPLElBQUksV0FDL0MsVUFBVyxHQUFPLEdBQU8sT0FBUyxHQUFHLFVBQ3JDLGFBQWMsR0FBTyxHQUFPLFFBQVUsSUFBTyxJQUFJLGFBQ2pELFlBQWEsR0FBTyxHQUFPLE9BQVMsR0FBRyxXQUN6QyxFQUNJLEdBQ0YsR0FBTSxHQUFHLE1BQVEsQ0FDZixHQUFPLEdBQU8sUUFBVSxJQUFPLElBQUksTUFBTSxHQUN6QyxHQUFPLEdBQU8sT0FBUyxHQUFHLE1BQU0sRUFDbEMsRUFXRixHQVRBLEdBQUksS0FBSyxjQUFjLE1BQU0sR0FBTyxDQUNsQyxHQUNBLEdBQ0EsR0FDQSxHQUFZLEdBQ1osR0FBTyxHQUNQLEdBQ0EsRUFDRixFQUFFLE9BQU8sRUFBSSxDQUFDLFNBQ0gsS0FBTSxZQUNmLE9BQU8sR0FFVCxHQUFJLEdBQ0YsRUFBUSxFQUFNLE1BQU0sRUFBRyxHQUFLLEdBQU0sQ0FBQyxFQUNuQyxHQUFTLEdBQU8sTUFBTSxFQUFHLEdBQUssRUFBRyxFQUNqQyxHQUFTLEdBQU8sTUFBTSxFQUFHLEdBQUssRUFBRyxFQUVuQyxFQUFNLEtBQUssS0FBSyxhQUFhLEdBQU8sSUFBSSxFQUFFLEVBQzFDLEdBQU8sS0FBSyxHQUFNLENBQUMsRUFDbkIsR0FBTyxLQUFLLEdBQU0sRUFBRSxFQUNwQixHQUFXLEdBQU0sRUFBTSxFQUFNLE9BQVMsSUFBSSxFQUFNLEVBQU0sT0FBUyxJQUMvRCxFQUFNLEtBQUssRUFBUSxFQUNuQixVQUNHLEdBQ0gsTUFBTyxJQUdiLE1BQU8sSUFDTixPQUFPLENBQ1osRUFDSSxXQUFnQyxFQUFHLENBQ3JDLElBQUksR0FBUyxDQUNYLElBQUssRUFDTCxXQUE0QixXQUFnQixFQUFVLENBQUMsR0FBSyxFQUFNLENBQ2hFLEdBQUksS0FBSyxHQUFHLE9BQ1YsS0FBSyxHQUFHLE9BQU8sV0FBVyxHQUFLLENBQUksTUFFbkMsT0FBTSxJQUFJLE1BQU0sRUFBRyxHQUVwQixZQUFZLEVBRWYsU0FBMEIsVUFBZSxDQUFDLEdBQU8sR0FBSSxDQWFuRCxHQVpBLEtBQUssR0FBSyxJQUFNLEtBQUssSUFBTSxDQUFDLEVBQzVCLEtBQUssT0FBUyxHQUNkLEtBQUssTUFBUSxLQUFLLFdBQWEsS0FBSyxLQUFPLEdBQzNDLEtBQUssU0FBVyxLQUFLLE9BQVMsRUFDOUIsS0FBSyxPQUFTLEtBQUssUUFBVSxLQUFLLE1BQVEsR0FDMUMsS0FBSyxlQUFpQixDQUFDLFNBQVMsRUFDaEMsS0FBSyxPQUFTLENBQ1osV0FBWSxFQUNaLGFBQWMsRUFDZCxVQUFXLEVBQ1gsWUFBYSxDQUNmLEVBQ0ksS0FBSyxRQUFRLE9BQ2YsS0FBSyxPQUFPLE1BQVEsQ0FBQyxFQUFHLENBQUMsRUFHM0IsT0FEQSxLQUFLLE9BQVMsRUFDUCxNQUNOLFVBQVUsRUFFYixNQUF1QixVQUFlLEVBQUcsQ0FDdkMsSUFBSSxHQUFLLEtBQUssT0FBTyxHQUNyQixLQUFLLFFBQVUsR0FDZixLQUFLLFNBQ0wsS0FBSyxTQUNMLEtBQUssT0FBUyxHQUNkLEtBQUssU0FBVyxHQUNoQixJQUFJLEdBQVEsR0FBRyxNQUFNLGlCQUFpQixFQUN0QyxHQUFJLEdBQ0YsS0FBSyxXQUNMLEtBQUssT0FBTyxnQkFFWixNQUFLLE9BQU8sY0FFZCxHQUFJLEtBQUssUUFBUSxPQUNmLEtBQUssT0FBTyxNQUFNLEtBR3BCLE9BREEsS0FBSyxPQUFTLEtBQUssT0FBTyxNQUFNLENBQUMsRUFDMUIsSUFDTixPQUFPLEVBRVYsTUFBdUIsVUFBZSxDQUFDLEdBQUksQ0FDekMsSUFBSSxHQUFNLEdBQUcsT0FDVCxFQUFRLEdBQUcsTUFBTSxlQUFlLEVBQ3BDLEtBQUssT0FBUyxHQUFLLEtBQUssT0FDeEIsS0FBSyxPQUFTLEtBQUssT0FBTyxPQUFPLEVBQUcsS0FBSyxPQUFPLE9BQVMsRUFBRyxFQUM1RCxLQUFLLFFBQVUsR0FDZixJQUFJLEdBQVcsS0FBSyxNQUFNLE1BQU0sZUFBZSxFQUcvQyxHQUZBLEtBQUssTUFBUSxLQUFLLE1BQU0sT0FBTyxFQUFHLEtBQUssTUFBTSxPQUFTLENBQUMsRUFDdkQsS0FBSyxRQUFVLEtBQUssUUFBUSxPQUFPLEVBQUcsS0FBSyxRQUFRLE9BQVMsQ0FBQyxFQUN6RCxFQUFNLE9BQVMsRUFDakIsS0FBSyxVQUFZLEVBQU0sT0FBUyxFQUVsQyxJQUFJLEdBQUksS0FBSyxPQUFPLE1BT3BCLEdBTkEsS0FBSyxPQUFTLENBQ1osV0FBWSxLQUFLLE9BQU8sV0FDeEIsVUFBVyxLQUFLLFNBQVcsRUFDM0IsYUFBYyxLQUFLLE9BQU8sYUFDMUIsWUFBYSxHQUFTLEVBQU0sU0FBVyxHQUFTLE9BQVMsS0FBSyxPQUFPLGFBQWUsR0FBSyxHQUFTLEdBQVMsT0FBUyxFQUFNLFFBQVEsT0FBUyxFQUFNLEdBQUcsT0FBUyxLQUFLLE9BQU8sYUFBZSxFQUMxTCxFQUNJLEtBQUssUUFBUSxPQUNmLEtBQUssT0FBTyxNQUFRLENBQUMsR0FBRSxHQUFJLEdBQUUsR0FBSyxLQUFLLE9BQVMsRUFBRyxFQUdyRCxPQURBLEtBQUssT0FBUyxLQUFLLE9BQU8sT0FDbkIsTUFDTixPQUFPLEVBRVYsS0FBc0IsVUFBZSxFQUFHLENBRXRDLE9BREEsS0FBSyxNQUFRLEdBQ04sTUFDTixNQUFNLEVBRVQsT0FBd0IsVUFBZSxFQUFHLENBQ3hDLEdBQUksS0FBSyxRQUFRLGdCQUNmLEtBQUssV0FBYSxPQUVsQixRQUFPLEtBQUssV0FBVywwQkFBNEIsS0FBSyxTQUFXLEdBQUssbUlBQXFJLEtBQUssYUFBYSxFQUFHLENBQ2hPLEtBQU0sR0FDTixNQUFPLEtBQ1AsS0FBTSxLQUFLLFFBQ2IsQ0FBQyxFQUVILE9BQU8sTUFDTixRQUFRLEVBRVgsS0FBc0IsVUFBZSxDQUFDLEdBQUcsQ0FDdkMsS0FBSyxNQUFNLEtBQUssTUFBTSxNQUFNLEVBQUMsQ0FBQyxHQUM3QixNQUFNLEVBRVQsVUFBMkIsVUFBZSxFQUFHLENBQzNDLElBQUksR0FBTyxLQUFLLFFBQVEsT0FBTyxFQUFHLEtBQUssUUFBUSxPQUFTLEtBQUssTUFBTSxNQUFNLEVBQ3pFLE9BQVEsR0FBSyxPQUFTLEdBQUssTUFBUSxJQUFNLEdBQUssT0FBTyxHQUFHLEVBQUUsUUFBUSxNQUFPLEVBQUUsR0FDMUUsV0FBVyxFQUVkLGNBQStCLFVBQWUsRUFBRyxDQUMvQyxJQUFJLEdBQU8sS0FBSyxNQUNoQixHQUFJLEdBQUssT0FBUyxHQUNoQixJQUFRLEtBQUssT0FBTyxPQUFPLEVBQUcsR0FBSyxHQUFLLE1BQU0sRUFFaEQsT0FBUSxHQUFLLE9BQU8sRUFBRyxFQUFFLEdBQUssR0FBSyxPQUFTLEdBQUssTUFBUSxLQUFLLFFBQVEsTUFBTyxFQUFFLEdBQzlFLGVBQWUsRUFFbEIsYUFBOEIsVUFBZSxFQUFHLENBQzlDLElBQUksR0FBTSxLQUFLLFVBQVUsRUFDckIsR0FBSSxJQUFJLE1BQU0sR0FBSSxPQUFTLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFDMUMsT0FBTyxHQUFNLEtBQUssY0FBYyxFQUFJLEtBQU8sR0FBSSxLQUM5QyxjQUFjLEVBRWpCLFdBQTRCLFVBQWUsQ0FBQyxHQUFPLEdBQWMsQ0FDL0QsSUFBSSxFQUFPLEdBQU8sR0FDbEIsR0FBSSxLQUFLLFFBQVEsaUJBcUJmLEdBcEJBLEdBQVMsQ0FDUCxTQUFVLEtBQUssU0FDZixPQUFRLENBQ04sV0FBWSxLQUFLLE9BQU8sV0FDeEIsVUFBVyxLQUFLLFVBQ2hCLGFBQWMsS0FBSyxPQUFPLGFBQzFCLFlBQWEsS0FBSyxPQUFPLFdBQzNCLEVBQ0EsT0FBUSxLQUFLLE9BQ2IsTUFBTyxLQUFLLE1BQ1osUUFBUyxLQUFLLFFBQ2QsUUFBUyxLQUFLLFFBQ2QsT0FBUSxLQUFLLE9BQ2IsT0FBUSxLQUFLLE9BQ2IsTUFBTyxLQUFLLE1BQ1osT0FBUSxLQUFLLE9BQ2IsR0FBSSxLQUFLLEdBQ1QsZUFBZ0IsS0FBSyxlQUFlLE1BQU0sQ0FBQyxFQUMzQyxLQUFNLEtBQUssSUFDYixFQUNJLEtBQUssUUFBUSxPQUNmLEdBQU8sT0FBTyxNQUFRLEtBQUssT0FBTyxNQUFNLE1BQU0sQ0FBQyxFQUluRCxHQURBLEdBQVEsR0FBTSxHQUFHLE1BQU0saUJBQWlCLEVBQ3BDLEdBQ0YsS0FBSyxVQUFZLEdBQU0sT0FZekIsR0FWQSxLQUFLLE9BQVMsQ0FDWixXQUFZLEtBQUssT0FBTyxVQUN4QixVQUFXLEtBQUssU0FBVyxFQUMzQixhQUFjLEtBQUssT0FBTyxZQUMxQixZQUFhLEdBQVEsR0FBTSxHQUFNLE9BQVMsR0FBRyxPQUFTLEdBQU0sR0FBTSxPQUFTLEdBQUcsTUFBTSxRQUFRLEVBQUUsR0FBRyxPQUFTLEtBQUssT0FBTyxZQUFjLEdBQU0sR0FBRyxNQUMvSSxFQUNBLEtBQUssUUFBVSxHQUFNLEdBQ3JCLEtBQUssT0FBUyxHQUFNLEdBQ3BCLEtBQUssUUFBVSxHQUNmLEtBQUssT0FBUyxLQUFLLE9BQU8sT0FDdEIsS0FBSyxRQUFRLE9BQ2YsS0FBSyxPQUFPLE1BQVEsQ0FBQyxLQUFLLE9BQVEsS0FBSyxRQUFVLEtBQUssTUFBTSxFQU85RCxHQUxBLEtBQUssTUFBUSxHQUNiLEtBQUssV0FBYSxHQUNsQixLQUFLLE9BQVMsS0FBSyxPQUFPLE1BQU0sR0FBTSxHQUFHLE1BQU0sRUFDL0MsS0FBSyxTQUFXLEdBQU0sR0FDdEIsRUFBUSxLQUFLLGNBQWMsS0FBSyxLQUFNLEtBQUssR0FBSSxLQUFNLEdBQWMsS0FBSyxlQUFlLEtBQUssZUFBZSxPQUFTLEVBQUUsRUFDbEgsS0FBSyxNQUFRLEtBQUssT0FDcEIsS0FBSyxLQUFPLEdBRWQsR0FBSSxFQUNGLE9BQU8sVUFDRSxLQUFLLFdBQVksQ0FDMUIsUUFBUyxNQUFLLEdBQ1osS0FBSyxJQUFLLEdBQU8sSUFFbkIsTUFBTyxHQUVULE1BQU8sSUFDTixZQUFZLEVBRWYsS0FBc0IsVUFBZSxFQUFHLENBQ3RDLEdBQUksS0FBSyxLQUNQLE9BQU8sS0FBSyxJQUVkLElBQUssS0FBSyxPQUNSLEtBQUssS0FBTyxHQUVkLElBQUksR0FBTyxHQUFPLEVBQVcsR0FDN0IsSUFBSyxLQUFLLE1BQ1IsS0FBSyxPQUFTLEdBQ2QsS0FBSyxNQUFRLEdBRWYsSUFBSSxHQUFRLEtBQUssY0FBYyxFQUMvQixRQUFTLEdBQUksRUFBRyxHQUFJLEdBQU0sT0FBUSxLQUVoQyxHQURBLEVBQVksS0FBSyxPQUFPLE1BQU0sS0FBSyxNQUFNLEdBQU0sSUFBRyxFQUM5QyxLQUFlLElBQVMsRUFBVSxHQUFHLE9BQVMsR0FBTSxHQUFHLFNBR3pELEdBRkEsR0FBUSxFQUNSLEdBQVEsR0FDSixLQUFLLFFBQVEsZ0JBRWYsR0FEQSxHQUFRLEtBQUssV0FBVyxFQUFXLEdBQU0sR0FBRSxFQUN2QyxLQUFVLEdBQ1osT0FBTyxXQUNFLEtBQUssV0FBWSxDQUMxQixHQUFRLEdBQ1IsYUFFQSxPQUFPLFlBRUMsS0FBSyxRQUFRLEtBQ3ZCLE1BSU4sR0FBSSxHQUFPLENBRVQsR0FEQSxHQUFRLEtBQUssV0FBVyxHQUFPLEdBQU0sR0FBTSxFQUN2QyxLQUFVLEdBQ1osT0FBTyxHQUVULE1BQU8sR0FFVCxHQUFJLEtBQUssU0FBVyxHQUNsQixPQUFPLEtBQUssUUFFWixRQUFPLEtBQUssV0FBVywwQkFBNEIsS0FBSyxTQUFXLEdBQUsseUJBQTJCLEtBQUssYUFBYSxFQUFHLENBQ3RILEtBQU0sR0FDTixNQUFPLEtBQ1AsS0FBTSxLQUFLLFFBQ2IsQ0FBQyxHQUVGLE1BQU0sRUFFVCxJQUFxQixXQUFnQixFQUFHLEVBQUcsQ0FDekMsSUFBSSxHQUFJLEtBQUssS0FBSyxFQUNsQixHQUFJLEdBQ0YsT0FBTyxPQUVQLFFBQU8sS0FBSyxJQUFJLEdBRWpCLEtBQUssRUFFUixNQUF1QixXQUFnQixFQUFLLENBQUMsR0FBVyxDQUN0RCxLQUFLLGVBQWUsS0FBSyxFQUFTLEdBQ2pDLE9BQU8sRUFFVixTQUEwQixXQUFnQixFQUFRLEVBQUcsQ0FDbkQsSUFBSSxHQUFJLEtBQUssZUFBZSxPQUFTLEVBQ3JDLEdBQUksR0FBSSxFQUNOLE9BQU8sS0FBSyxlQUFlLElBQUksTUFFL0IsUUFBTyxLQUFLLGVBQWUsSUFFNUIsVUFBVSxFQUViLGNBQStCLFdBQWdCLEVBQWEsRUFBRyxDQUM3RCxHQUFJLEtBQUssZUFBZSxRQUFVLEtBQUssZUFBZSxLQUFLLGVBQWUsT0FBUyxHQUNqRixPQUFPLEtBQUssV0FBVyxLQUFLLGVBQWUsS0FBSyxlQUFlLE9BQVMsSUFBSSxVQUU1RSxRQUFPLEtBQUssV0FBVyxRQUFXLE9BRW5DLGVBQWUsRUFFbEIsU0FBMEIsV0FBZ0IsRUFBUSxDQUFDLEdBQUcsQ0FFcEQsR0FEQSxHQUFJLEtBQUssZUFBZSxPQUFTLEVBQUksS0FBSyxJQUFJLElBQUssQ0FBQyxFQUNoRCxJQUFLLEVBQ1AsT0FBTyxLQUFLLGVBQWUsUUFFM0IsT0FBTyxXQUVSLFVBQVUsRUFFYixVQUEyQixXQUFnQixFQUFTLENBQUMsR0FBVyxDQUM5RCxLQUFLLE1BQU0sRUFBUyxHQUNuQixXQUFXLEVBRWQsZUFBZ0MsV0FBZ0IsRUFBYyxFQUFHLENBQy9ELE9BQU8sS0FBSyxlQUFlLFFBQzFCLGdCQUFnQixFQUNuQixRQUFTLENBQUMsRUFDVixjQUErQixXQUFnQixFQUFTLENBQUMsR0FBSSxFQUFLLEdBQTJCLEdBQVUsQ0FDckcsSUFBSSxHQUFVLEdBQ2QsT0FBUSxRQUNELEdBQ0gsTUFBTyxRQUVKLEdBQ0gsTUFBTyxRQUVKLEdBQ0gsTUFBTyxRQUVKLEdBQ0gsTUFBTyxRQUVKLEdBQ0gsVUFDRyxHQUNILFVBQ0csR0FFSCxPQURBLEtBQUssTUFBTSxXQUFXLEVBQ2YsR0FDUCxVQUNHLEdBRUgsT0FEQSxLQUFLLFNBQVMsRUFDUCxrQkFDUCxVQUNHLEdBRUgsT0FEQSxLQUFLLE1BQU0sV0FBVyxFQUNmLEdBQ1AsVUFDRyxHQUVILE9BREEsS0FBSyxTQUFTLEVBQ1Asa0JBQ1AsVUFDRyxJQUNILEtBQUssTUFBTSxxQkFBcUIsRUFDaEMsVUFDRyxJQUNILEtBQUssU0FBUyxFQUNkLFVBQ0csSUFDSCxNQUFPLGdDQUVKLElBQ0gsTUFBTyxPQUVKLElBQ0gsVUFDRyxJQUNILE1BQU8sT0FFSixJQUNILE1BQU8sT0FFSixJQUNILE1BQU8saUJBRUosSUFDSCxLQUFLLE1BQU0sZUFBZSxFQUMxQixVQUNHLElBQ0gsS0FBSyxTQUFTLEVBQ2QsVUFDRyxJQUNILEtBQUssU0FBUyxFQUNkLEtBQUssTUFBTSxlQUFlLEVBQzFCLFVBQ0csSUFDSCxNQUFPLFFBRUosSUFDSCxLQUFLLFNBQVMsRUFDZCxVQUNHLElBQ0gsTUFBTyxRQUVKLElBQ0gsS0FBSyxTQUFTLEVBQ2QsVUFDRyxJQUNILE1BQU8sVUFFSixJQUNILEtBQUssTUFBTSxRQUFRLEVBQ25CLFVBQ0csSUFDSCxNQUFPLFFBRUosSUFFSCxPQURBLEtBQUssTUFBTSxXQUFXLEVBQ2YsR0FDUCxVQUNHLElBRUgsT0FEQSxLQUFLLFNBQVMsRUFDUCxFQUNQLFVBQ0csSUFDSCxVQUNHLElBRUgsT0FEQSxLQUFLLE1BQU0sZ0JBQWdCLEVBQ3BCLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLElBQ0gsTUFBTyxvQkFFSixJQUNILE1BQU8sT0FFSixJQUNILFVBQ0csSUFDSCxNQUFPLGlCQUVKLElBRUgsT0FEQSxLQUFLLE1BQU0sT0FBTyxFQUNYLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsRUFDUCxVQUNHLElBQ0gsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLElBRUgsT0FEQSxLQUFLLE1BQU0sWUFBWSxFQUNoQixHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssU0FBUyxFQUNQLEdBQ1AsVUFDRyxJQUNILE1BQU8sb0JBRUosSUFDSCxNQUFPLGlCQUVKLElBQ0gsTUFBTyxxQkFFSixJQUNILFVBQ0csSUFDSCxNQUFPLGFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxLQUFLLFNBQVMsRUFDZCxVQUNHLElBQ0gsTUFBTyxrQkFFSixJQUNILEtBQUssTUFBTSxTQUFTLEVBQ3BCLFVBQ0csSUFDSCxLQUFLLFNBQVMsRUFDZCxVQUNHLElBQ0gsTUFBTyxpQkFFSixJQUNILEtBQUssTUFBTSxVQUFVLEVBQ3JCLFVBQ0csSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFVBRUosSUFDSCxNQUFPLFdBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLGFBRUosSUFDSCxNQUFPLGFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLFFBRUosSUFDSCxNQUFPLGtCQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxRQUVKLElBQ0gsTUFBTyxLQUdWLFdBQVcsRUFDZCxNQUFPLENBQUMsOEJBQStCLDhCQUErQiw4QkFBK0IsOEJBQStCLGdDQUFpQyx3QkFBeUIsdUJBQXdCLHVCQUF3Qix1QkFBd0IsdUJBQXdCLHdCQUF5QixZQUFhLGNBQWUsbUJBQW9CLFdBQVkseUJBQTBCLHNCQUF1QixjQUFlLGlCQUFrQixpQkFBa0IsVUFBVyxhQUFjLFVBQVcsYUFBYyxXQUFZLGFBQWMsV0FBWSxlQUFnQixtQkFBb0IsbUJBQW9CLFdBQVksV0FBWSxXQUFZLFNBQVUsbUJBQW9CLFdBQVksY0FBZSxlQUFnQixtQkFBb0IsV0FBWSxXQUFZLFdBQVksV0FBWSxTQUFVLGNBQWUsV0FBWSxZQUFhLGdCQUFpQixrQkFBbUIsa0JBQW1CLGNBQWUsZUFBZ0Isa0JBQW1CLGNBQWUsVUFBVyxVQUFXLGNBQWUsV0FBWSxhQUFjLFNBQVUsV0FBWSxhQUFjLFdBQVksZUFBZ0IsZ0JBQWlCLGlCQUFrQixjQUFlLGNBQWUsY0FBZSxZQUFhLFlBQWEsYUFBYyxjQUFlLGVBQWdCLFVBQVcsWUFBYSxvQkFBcUIsWUFBYSxTQUFVLFVBQVcsVUFBVyxTQUFVLFNBQVUsU0FBVSxTQUFVLFNBQVUsU0FBVSxTQUFVLFdBQVksVUFBVyxVQUFXLDJCQUE0QixjQUFlLHF4SUFBc3hJLFVBQVcsVUFBVyxRQUFRLEVBQ3p2TCxXQUFZLENBQUUsaUJBQWtCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxhQUFjLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxvQkFBdUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsY0FBaUIsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLGNBQWlCLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLEtBQVEsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsT0FBVSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxTQUFZLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxPQUFVLENBQUUsTUFBUyxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJ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aUJBQ0Esa0JBQ0EsZUFDRixFQUdJLElBQTRCLEVBQU8sQ0FBQyxJQUFZO0FBQUEsVUFDMUMsRUFBUSxZQUFjLEVBQVE7QUFBQTtBQUFBLGlCQUV2QixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FVZCxFQUFRO0FBQUE7QUFBQTtBQUFBLFVBR1QsRUFBUTtBQUFBO0FBQUE7QUFBQSxVQUdSLEVBQVE7QUFBQTtBQUFBO0FBQUEsZ0JBR0YsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFXWixFQUFRO0FBQUEsY0FDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVYsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVNWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUlSLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU9WLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBS1IsRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWNWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBS1YsRUFBUTtBQUFBLFlBQ04sRUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFLVixFQUFRO0FBQUEsWUFDTixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUtWLEVBQVE7QUFBQSxZQUNOLEVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFNUixFQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBTVIsRUFBUTtBQUFBO0FBQUE7QUFB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QyxFQUFHLENBQUMsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLEVBQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsRUFBTSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUUsRUFBRyxFQUFNLENBQUMsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FB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SyxFQUFJLENBQUUsS0FBTSxRQUFTLEdBQUksRUFBRyxFQUFLLEdBQUcsS0FBSyxFQUFHLEtBQU0sQ0FBRSxTQUFVLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxLQUFNLEVBQUcsR0FBSSxLQUFLLENBQUUsQ0FBRSxFQUM1RyxVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsR0FBSSxLQUFLLEVBQ3JCLEVBQUcsWUFBWSxLQUFLLENBQUMsRUFDckIsVUFDRyxRQUNBLElBQ0gsS0FBSyxFQUFJLEVBQUcsR0FBSSxLQUFLLEVBQ3JCLEVBQUcsa0JBQWtCLEtBQUssQ0FBQyxFQUMzQixVQUNHLFFBQ0EsSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLFdBQVksR0FBSSxFQUFHLEVBQUssR0FBRyxLQUFLLEVBQUcsUUFBUyxFQUFHLEdBQUksS0FBSyxDQUFFLEVBQzNFLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLFFBQVMsR0FBSSxFQUFHLEVBQUssR0FBRyxLQUFLLEVBQUcsV0FBWSxFQUFHLEdBQUksS0FBSyxDQUFFLEVBQzNFLFVBQ0csSUFDSCxLQUFLLEVBQUksQ0FBRSxLQUFNLGFBQWMsR0FBSSxFQUFHLEVBQUssR0FBRyxLQUFLLEVBQUcsV0FBWSxFQUFHLEdBQUksS0FBSyxDQUFFLEVBQ2hGLFVBQ0csSUFDSCxFQUFHLGFBQWEsSUFBSSxFQUNwQixLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csSUFDSCxFQUFHLGFBQWEsSUFBSSxFQUNwQixLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csSUFDSCxFQUFHLGFBQWEsSUFBSSxFQUNwQixLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csSUFDSCxFQUFHLGFBQWEsSUFBSSxFQUNwQixLQUFLLEVBQUksQ0FBRSxLQUFNLE1BQU8sTUFBTyxJQUFLLEVBQ3BDLFVBQ0csUUFDQSxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sUUFBUyxHQUFJLEVBQUcsR0FBSSxLQUFLLEVBQUcsS0FBTSxVQUFXLFlBQWEsRUFBRyxFQUM5RSxVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxRQUFTLEdBQUksRUFBRyxFQUFLLEdBQUcsS0FBSyxFQUFHLFFBQVMsQ0FBQyxFQUFHLEdBQUksS0FBSyxDQUFDLEVBQUcsS0FBTSxVQUFXLFlBQWEsRUFBRyxFQUM1RyxVQUNHLElBQ0gsS0FBSyxFQUFJLENBQUUsS0FBTSxRQUFTLEdBQUksRUFBRyxFQUFLLEdBQUcsS0FBSyxFQUFHLFFBQVMsQ0FBQyxFQUFHLEdBQUksS0FBSyxDQUFDLEVBQUcsS0FBTSxVQUFXLFlBQWEsRUFBRyxFQUM1RyxRQUVILFdBQVcsRUFDZCxNQUFPLENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLENBQUksRUFBRyxDQUFFLEVBQUcsQ0FBQyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFHLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxDQUFJLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsRUFBSyxDQUFFLEVBQUcsQ0FBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxFQUFLLENBQUUsRUFBRyxFQUFHLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdB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TSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsUUFBVyxDQUFFLE1BQVMsQ0FBQyxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsS0FBUSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLG1CQUFzQixDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLGdCQUFtQixDQUFFLE1BQVMsQ0FBQyxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFlBQWUsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFdBQWMsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFNBQVksQ0FBRSxNQUFTLENBQUMsR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsb0JBQXVCLENBQUUsTUFBUyxDQUFDLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLFVBQWEsQ0FBRSxNQUFTLENBQUMsRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLE1BQVMsQ0FBRSxNQUFTLENBQUMsRUFBRyxVQUFhLEVBQU0sRUFBRyxTQUFZLENBQUUsTUFBUyxDQUFDLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxhQUFnQixDQUFFLE1BQVMsQ0FBQyxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxXQUFjLENBQUUsTUFBUyxDQUFDLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxD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LENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBRSxFQUFHLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFD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QUFHLEVBQUcsRUFBRyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQ3BqQixlQUFnQixDQUFDLEVBQ2pCLFdB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TyxLQUFLLEtBQUssRUFBSSxLQUFLLEtBQUssQ0FBSSxDQUFDLEVBQ3BDLEVBQU0sRUFBTSxLQUFLLEtBQUssQ0FBQyxFQUN2QixFQUFPLElBQU0sRUFBUSxFQUFNLEtBQUssSUFBSSxFQUFPLENBQUcsRUFDOUMsRUFBTyxJQUFNLEVBQVEsRUFBTSxLQUFLLEtBQUssRUFBTyxFQUFNLEtBQUssSUFBTSxDQUFHLEVBQ2hFLEVBQU8sSUFBTSxFQUFRLEVBQU0sS0FBSyxLQUFLLEVBQU8sRUFBTSxLQUFLLElBQU0sQ0FBRyxFQUNoRSxRQUVFLGFBQW1DLENBQXVCLENBQUMsRUFBRyxFQUFHLEVBQUksRUFBSSxFQUFJLEVBQUksRUFBSSxFQUFJLENBUTNGLElBQUksRUFBSSxFQUFNLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFLLEVBQUssRUFBSyxFQUFLLEVBQUksRUFBSyxFQUFLLEVBQUksRUFBSyxFQUFLLEVBQUksRUFBSyxFQUFLLEVBQUksRUFBSyxFQUFLLEVBQUssRUFDN0osRUFBSSxFQUFVLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFDakosRUFBSSxFQUFVLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFLLEVBQUssRUFBSyxFQUFJLEVBQUksRUFBSyxFQUFLLEVBQUksRUFBSyxFQUFJLEVBQUssRUFBSSxFQUFJLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSyxFQUFLLEVBQUssRUFBSyxFQUFJLEVBQUksRUFBSyxFQUFLLEVBQUksRUFBSyxFQUFJLEVBQUssRUFDNUssRUFBSSxFQUFNLEVBQUssRUFBSyxFQUFLLEVBQUssRUFBSyxFQUFJLEVBQUssRUFBSSxFQUFLLEVBQUssRUFBSyxFQUFLLEVB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QVUsV0FDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsRUFFdkIsRUFBRyxDQUNELFNBQVUsUUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBUSxFQUFJLFFBQVEsRUFFeEIsRUFBRyxDQUNELFNBQVUsV0FDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsRUFFdkIsRUFBRyxDQUNELFNBQVUsVUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBUSxFQUFJLFFBQVEsRUFFeEIsRUFBRyxDQUNELFNBQVUsYUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFVBQVUsRUFFekIsRUFBRyxDQUNELFNBQVUsZUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBUSxFQUFJLFVBQVUsRUFFMUIsRUFBRyxDQUNELFNBQVUsWUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFNBQVMsRUFFeEIsRUFBRyxDQUNELFNBQVUsY0FDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBUSxFQUFJLFNBQVMsRUFFekIsRUFBRyxDQUNELFNBQVUsVUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFNBQVMsRUFFeEIsRUFBRyxDQUNELFNBQVUsYUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFlBQVksRUFFM0IsRUFBRyxDQUNELFNBQVUsU0FDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsRUFFdkIsRUFBRyxDQUNELFNBQVUsVUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFNBQVMsRUFFeEIsRUFBRyxDQUNELFNBQVUsYUFDVixpQkFBa0IsQ0FBTyxDQUFDLEVBQUssQ0FDN0IsT0FBTyxFQUFJLFFBQVEsRUFFdkIsRUFBRyxDQUNELFNBQVUs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LEdBQUksRUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsRUFBSyxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxFQUFHLEdBQUksRUFBSyxHQUFJLENBQUksQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsRUFBRyxFQUFLLEVBQUcsRUFBSyxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsRUFBRyxFQUFLLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxFQUFHLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLENBQUMsRUFDdnFDLGVBQWdCLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxF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LFdBQVcsS0FBTSxHQUFHLENBQUMsRUFDcEUsRUFBUSxXQUFXLEVBQUcsR0FBSSxLQUFLLENBQUMsRUFDdEMsRUFBRyxRQUFRLEVBQVEsRUFBUSxDQUFLLEVBQ2hDLFVBQ0csT0FDQSxPQUNBLElBQ0gsS0FBSyxFQUFJLEVBQUcsR0FDWixVQUNHLElBQ0gsS0FBSyxFQUFJLEVBQUcsRUFBSyxHQUNqQixRQUVILFdBQVcsRUFDZCxNQUFPLENBQUMsQ0FBRSxFQUFHLEVBQUcsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsQ0FBQyxDQUFFLEVBQUcsQ0FBRSxFQUFHLENBQUMsRUFBRyxDQUFDLENBQUUsRUFBRyxDQUFFLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLEVBQUcsR0FBSSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEVBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFFLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUs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RyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxFQUFHLENBQUMsR0FBSSxDQUFDLEVBQUcsQ0FBQyxHQUFJLENBQUMsRUFBRyxDQUFDLEdBQUksQ0FBQyxDQUFDLEVBQy9WLGNBQStCLFdBQWdCLENBQVMsQ0FBQyxFQUFRLEVBQVEsRUFBVSxFQUFJLEVBQVMsRUFBSSxFQUFJLENBQ3RHLElBQUksRUFBSyxFQUFHLE9BQVMsRUFDckIsT0FBUSxPQUNELEdBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsRUFDNUMsVUFDRyxHQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLEVBQy9DLFVBQ0csR0FDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixFQUM3QyxVQUNHLEdBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxvQkFBcUIsRUFBRyxFQUFLLEVBQUUsRUFDcEQsRUFBRyxhQUFhLEVBQUcsRUFBSyxFQUFFLEVBQzFCLFVBQ0csR0FDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLFVBQVUsRUFDL0IsVUFDRyxHQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sV0FBVyxFQUNoQyxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxXQUFXLEVBQ2hDLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLFlBQVksRUFDakMsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sb0JBQXFCLEVBQUcsRUFBRyxTQUN6QyxFQUFHLEdBQUksU0FBVyxTQUFXLEtBQUssRUFBSSxFQUFHLEdBQU0sS0FBSyxFQUFJLENBQUMsRUFBRyxFQUFHLEVBQ3RFLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLHVCQUF3QixFQUFHLEVBQUssRUFBRSxFQUN2RCxLQUFLLEVBQUksQ0FBQyxFQUFHLEVBQUssRUFBRSxFQUFFLE9BQU8sRUFBRyxFQUFHLEVBQ25DLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLGVBQWdCLEVBQUcsR0FBSyxDQUFNLEVBQ25ELEtBQUssRUFBSSxDQUFFLFlBQWEsRUFBRyxHQUFLLE1BQU8sRUFBRyxFQUMxQyxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxxQkFBc0IsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFHLEVBQ3pFLEtBQUssRUFBSSxDQUFFLFlBQWEsRUFBRyxHQUFLLE1BQU8sRUFBRyxFQUFLLEVBQUcsRUFDbEQsVUFDRyxJQUNILE1BQU0sRUFBTSxTQUFTLEVBQUcsRUFBRyxFQUNyQixFQUFVLEVBQUcsV0FBVyxFQUM5QixLQUFLLEVBQUksQ0FBRSxHQUFJLEVBQVMsS0FBTSxRQUFTLE1BQU8sR0FBSSxNQUFPLEVBQUssU0FBVSxDQUFDLENBQUUsRUFDM0UsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sbUNBQW9DLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBSyxHQUFJLEVBQUcsR0FBSyxhQUFjLEVBQUcsRUFBSyxHQUFHLFdBQVcsRUFDN0gsTUFBTSxFQUFXLEVBQUcsa0JBQWtCLEVBQUcsRUFBSyxHQUFHLFdBQVcsRUFDNUQsS0FBSyxFQUFJLENBQ1AsQ0FBRSxHQUFJLEVBQUcsRUFBSyxHQUFHLEdBQUksTUFBTyxFQUFHLEVBQUssR0FBRyxNQUFPLEtBQU0sRUFBRyxFQUFLLEdBQUcsS0FBTSxXQUFZLEVBQUcsRUFBSyxHQUFHLFVBQVcsRUFDdkcsQ0FBRSxHQUFJLEVBQUcsRUFBSyxHQUFHLEdBQUssSUFBTSxFQUFHLEdBQUksR0FBSSxNQUFPLEVBQUcsRUFBSyxHQUFHLEdBQUksSUFBSyxFQUFHLEdBQUksR0FBSSxNQUFPLEVBQUcsRUFBSyxHQUFHLE1BQU8sS0FBTSxPQUFRLFdBQVksRUFBRyxHQUFJLFdBQVksYUFBYyxFQUFVLGVBQWdCLFlBQWEsRUFDeE0sQ0FBRSxHQUFJLEVBQUcsR0FBSSxHQUFJLE1BQU8sRUFBRyxHQUFJLE1BQU8sS0FBTSxFQUFHLGFBQWEsRUFBRyxHQUFJLE9BQU8sRUFBRyxXQUFZLEVBQUcsR0FBSSxVQUFXLENBQzdHLEVBQ0EsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0seUNBQTBDLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBRyxFQUNqRixLQUFLLEVBQUksQ0FBRSxHQUFJLEVBQUcsRUFBSyxHQUFHLEdBQUksTUFBTyxFQUFHLEVBQUssR0FBRyxNQUFPLEtBQU0sRUFBRyxhQUFhLEVBQUcsRUFBSyxHQUFHLE9BQU8sRUFBRyxXQUFZLEVBQUcsRUFBSyxHQUFHLFdBQVksZUFBZ0IsU0FBUyxFQUFHLEdBQUssRUFBRSxDQUFFLEVBQzFLLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLDhCQUErQixFQUFHLEVBQUcsRUFDMUQsS0FBSyxFQUFJLENBQUUsR0FBSSxFQUFHLEdBQUksR0FBSSxNQUFPLEVBQUcsR0FBSSxNQUFPLEtBQU0sRUFBRyxhQUFhLEVBQUcsR0FBSSxPQUFPLEVBQUcsV0FBWSxFQUFHLEdBQUksV0FBWSxlQUFnQixDQUFFLEVBQ3ZJLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLFNBQVUsS0FBTyxLQUFPLElBQUksRUFDakQsRUFBRyxVQUFVLEVBQUUsTUFBTSxZQUFhLEVBQUcsRUFBRyxFQUN4QyxLQUFLLEVBQUksQ0FBRSxLQUFNLGlCQUFrQixRQUFTLEVBQUcsS0FBUSxPQUFTLEdBQUssU0FBUyxFQUFHLEVBQUcsQ0FBRSxFQUN0RixVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSw4QkFBK0IsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEVBQUUsRUFDMUUsTUFBTSxFQUFNLEVBQUcsV0FBVyxFQUMxQixLQUFLLEVBQUksSUFBSyxFQUFHLEVBQUssR0FBSSxLQUFNLFlBQWEsU0FBVSxFQUFHLEVBQUssRUFBRyxFQUNsRSxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSwwQkFBMkIsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFHLEVBQzlFLE1BQU0sRUFBSyxFQUFHLFdBQVcsRUFDekIsS0FBSyxFQUFJLENBQUUsS0FBSSxLQUFNLFlBQWEsTUFBTyxHQUFJLFNBQVUsRUFBRyxFQUFLLEVBQUcsRUFDbEUsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sbUNBQW9DLEVBQUcsRUFBRyxFQUMvRCxLQUFLLEVBQUksQ0FBRSxHQUFJLEVBQUcsRUFBSSxFQUN0QixVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxtREFBb0QsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFHLEVBQzNGLEtBQUssRUFBSSxDQUFFLEdBQUksRUFBRyxFQUFLLEdBQUksTUFBTyxFQUFHLEdBQUksTUFBTyxRQUFTLEVBQUcsR0FBSSxRQUFTLFdBQVksRUFBRyxHQUFJLFVBQVcsRUFDdkcsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sa0JBQW1CLEVBQUcsRUFBRyxFQUM5QyxLQUFLLEVBQUksQ0FBQyxFQUFHLEVBQUcsRUFDaEIsVUFDRyxJQUNILEVBQUcsVUFBVSxFQUFFLE1BQU0sa0JBQW1CLEVBQUcsRUFBSyxHQUFJLEVBQUcsRUFBRyxFQUMxRCxLQUFLLEVBQUksQ0FBQyxFQUFHLEVBQUssRUFBRSxFQUFFLE9BQU8sRUFBRyxFQUFHLEVBQ25DLFVBQ0csSUFDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLDBCQUEyQixFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDOUUsS0FBSyxFQUFJLENBQUUsUUFBUyxFQUFHLEVBQUssR0FBSyxFQUFHLEdBQUssTUFBTyxFQUFHLEVBQUssRUFBRyxFQUMzRCxVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxzQ0FBdUMsRUFBRyxFQUFLLEdBQUksRUFBRyxFQUFLLEdBQUksT0FBUSxFQUFHLEVBQUssR0FBSSxFQUFHLEVBQUcsRUFDOUcsS0FBSyxFQUFJLENBQUUsUUFBUyxFQUFHLEVBQUssR0FBSyxFQUFHLEdBQUssTUFBTyxFQUFHLEVBQUssR0FBSSxXQUFZLEVBQUcsRUFBSyxFQUFHLEVBQ25GLFVBQ0csUUFDQSxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sV0FBWSxHQUFJLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxJQUFLLEVBQUcsR0FBSSxLQUFLLENBQUUsRUFDdkUsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sYUFBYyxHQUFJLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxXQUFZLEVBQUcsR0FBSSxLQUFLLENBQUUsRUFDaEYsVUFDRyxJQUNILEtBQUssRUFBSSxDQUFFLEtBQU0sY0FBZSxHQUFJLEVBQUcsRUFBSyxHQUFHLEtBQUssRUFBRyxVQUFXLEVBQUcsR0FBSSxLQUFLLENBQUUsRUFDaEYsUUFFSCxXQUFXLEVBQ2QsTUFBTyxDQUFDLENBQUUsRUFBRyxFQUFHLEdBQUksQ0FBQyxFQUFHLENBQUMsQ0FBRSxFQUFHLENBQUUsRUFBRyxDQUFDLENBQUMsQ0FBRSxFQUFHLENBQUUsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBSyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksQ0FBSSxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBRSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFJLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFLLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUUsR0FBSSxHQUFJLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsQ0FBQyxFQUFHLENBQUUsRUFBRyxDQUFDLEVBQUcsQ0FBQyxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUssR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLENBQUksRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxDQUFFLEdBQUksQ0FBQyxFQUFHLEVBQUUsQ0FBRSxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsRUFBRSxFQUFLLENBQUMsRUFBRyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLEdBQUksR0FBSSxDQUFJLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUUsRUFBSyxDQUFDLEVBQUcsRUFBRSxDQUFDLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxDQUFFLEdBQUksR0FBSSxHQUFJLEVBQUssR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQUcsQ0FBRSxHQUFJLENBQUMsRUFBRyxFQUFFLENBQUUsRUFBRyxFQUFFLEVBQUssQ0FBQyxFQUFHLEVBQUUsQ0FBQyxFQUFHLENBQUUsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLENBQUMsRUFDampELGVBQWdCLENBQUUsR0FBSSxDQUFDLEVBQUcsQ0FBQyxFQUFHLEdBQUksQ0FBQyxFQUFHLEVBQUUsRUFBRyxHQUFJLENBQUMsRUFBRyxFQUFFLEVBQUcsR0FBSSxDQUFDLEVBQUcsRUFBRSxDQUFFLEVBQ3BFLFdBQTRCLFdBQWdCLENBQVUsQ0FBQyxFQUFLLEVBQU0sQ0FDaEUsR0FBSSxFQUFLLFlBQ1AsS0FBSyxNQUFNLENBQUcsTUFDVCxDQUNMLElBQUksRUFBUSxJQUFJLE1BQU0sQ0FBRyxFQUV6QixNQURBLEVBQU0sS0FBTyxFQUNQLElBRVAsWUFBWSxFQUNmLE1BQXVCLFdBQWdCLENBQUssQ0FBQyxFQUFPLENBQ2xELElBQUksRUFBTyxLQUFNLEVBQVEsQ0FBQyxDQUFDLEVBQUcsRUFBUyxDQUFDLEVBQUcsRUFBUyxDQUFDLElBQUksRUFBRyxFQUFTLENBQUMsRUFBRyxFQUFRLEtBQUssTUFBTyxFQUFTLEdBQUksRUFBVyxFQUFHLEVBQVMsRUFBRyxFQUFhLEVBQUcsRUFBUyxFQUFHLEVBQU0sRUFDbEssRUFBTyxFQUFPLE1BQU0sS0FBSyxVQUFXLENBQUMsRUFDckMsRUFBUyxPQUFPLE9BQU8sS0FBSyxLQUFLLEVBQ2pDLEVBQWMsQ0FBRSxHQUFJLENBQUMsQ0FBRSxFQUMzQixRQUFTLEtBQUssS0FBSyxHQUNqQixHQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssS0FBSyxHQUFJLENBQUMsRUFDakQsRUFBWSxHQUFHLEdBQUssS0FBSyxHQUFHLEdBTWhDLEdBSEEsRUFBTyxTQUFTLEVBQU8sRUFBWSxFQUFFLEVBQ3JDLEVBQVksR0FBRyxNQUFRLEVBQ3ZCLEVBQVksR0FBRyxPQUFTLFlBQ2IsRUFBTyxRQUFVLFlBQzFCLEVBQU8sT0FBUyxDQUFDLEVBRW5CLElBQUksRUFBUSxFQUFPLE9BQ25CLEVBQU8sS0FBSyxDQUFLLEVBQ2pCLElBQUksRUFBUyxFQUFPLFNBQVcsRUFBTyxRQUFRLE9BQzlDLFVBQVcsRUFBWSxHQUFHLGFBQWUsV0FDdkMsS0FBSyxXQUFhLEVBQVksR0FBRyxlQUVqQyxNQUFLLFdBQWEsT0FBTyxlQUFlLElBQUksRUFBRSxXQUVoRCxTQUFTLENBQVEsQ0FBQyxHQUFHLENBQ25CLEVBQU0sT0FBUyxFQUFNLE9BQVMsRUFBSSxHQUNsQyxFQUFPLE9BQVMsRUFBTyxPQUFTLEdBQ2hDLEVBQU8sT0FBUyxFQUFPLE9BQVMsR0FFbEMsRUFBTyxFQUFVLFVBQVUsRUFDM0IsU0FBUyxDQUFHLEVBQUcsQ0FDYixJQUFJLEdBQ0ksRUFBTyxJQUFJLEdBQUssRUFBTyxJQUFJLEdBQUssRUFDeEMsVUFBVyxLQUFVLFNBQVUsQ0FDN0IsR0FBSSxjQUFpQixNQUNuQixFQUFTLEdBQ1QsR0FBUSxFQUFPLElBQUksRUFFckIsR0FBUSxFQUFLLFNBQVMsS0FBVSxHQUVsQyxPQUFPLEdBRVQsRUFBTyxFQUFLLEtBQUssRUFDakIsSUFBSSxHQUFRLEVBQWdCLEVBQU8sRUFBUSxFQUFHLEVBQUcsRUFBUSxDQUFDLEVBQUcsR0FBRyxHQUFLLEdBQVUsR0FDL0UsTUFBTyxHQUFNLENBRVgsR0FEQSxFQUFRLEVBQU0sRUFBTSxPQUFTLEdBQ3pCLEtBQUssZUFBZSxHQUN0QixFQUFTLEtBQUssZUFBZSxPQUN4QixDQUNMLEdBQUksS0FBVyxhQUFlLElBQVUsWUFDdEMsR0FBUyxFQUFJLEVBRWYsRUFBUyxFQUFNLElBQVUsRUFBTSxHQUFPLElBRXhDLFVBQVcsSUFBVyxjQUFnQixFQUFPLFNBQVcsRUFBTyxHQUFJLENBQ2pFLElBQUksR0FBUyxHQUNiLEdBQVcsQ0FBQyxFQUNaLElBQUssTUFBSyxFQUFNLEdBQ2QsR0FBSSxLQUFLLFdBQVcsS0FBTSxHQUFJLEVBQzVCLEdBQVMsS0FBSyxJQUFNLEtBQUssV0FBVyxJQUFLLEdBQUcsRUFHaEQsR0FBSSxFQUFPLGFBQ1QsR0FBUyx3QkFBMEIsRUFBVyxHQUFLLE1BQVEsRUFBTyxhQUFhLEVBQUksZUFBaUIsR0FBUyxLQUFLLElBQUksRUFBSSxXQUFhLEtBQUssV0FBVyxLQUFXLElBQVUsUUFFNUssSUFBUyx3QkFBMEIsRUFBVyxHQUFLLGlCQUFtQixJQUFVLEVBQU0sZUFBaUIsS0FBTyxLQUFLLFdBQVcsS0FBVyxJQUFVLEtBRXJKLEtBQUssV0FBVyxHQUFRLENBQ3RCLEtBQU0sRUFBTyxNQUNiLE1BQU8sS0FBSyxXQUFXLEtBQVcsR0FDbEMsS0FBTSxFQUFPLFNBQ2IsSUFBSyxFQUNMLFdBQ0YsQ0FBQyxFQUVILEdBQUksRUFBTyxhQUFjLE9BQVMsRUFBTyxPQUFTLEVBQ2hELE1BQU0sSUFBSSxNQUFNLG9EQUFzRCxFQUFRLFlBQWMsRUFBTSxFQUVwRyxPQUFRLEVBQU8sUUFDUixHQU1ILEdBTEEsRUFBTSxLQUFLLEVBQU0sRUFDakIsRUFBTyxLQUFLLEVBQU8sTUFBTSxFQUN6QixFQUFPLEtBQUssRUFBTyxNQUFNLEVBQ3pCLEVBQU0sS0FBSyxFQUFPLEVBQUUsRUFDcEIsR0FBUyxNQUNKLEdBS0gsR0FKQSxFQUFTLEVBQU8sT0FDaEIsRUFBUyxFQUFPLE9BQ2hCLEVBQVcsRUFBTyxTQUNsQixFQUFRLEVBQU8sT0FDWCxFQUFhLEVBQ2YsUUFHRixJQUFTLEVBQ1QsRUFBaUIsS0FFbkIsVUFDRyxHQVNILEdBUkEsR0FBTSxLQUFLLGFBQWEsRUFBTyxJQUFJLEdBQ25DLEVBQU0sRUFBSSxFQUFPLEVBQU8sT0FBUyxJQUNqQyxFQUFNLEdBQUssQ0FDVCxXQUFZLEVBQU8sRUFBTyxRQUFVLElBQU8sSUFBSSxXQUMvQyxVQUFXLEVBQU8sRUFBTyxPQUFTLEdBQUcsVUFDckMsYUFBYyxFQUFPLEVBQU8sUUFBVSxJQUFPLElBQUksYUFDakQsWUFBYSxFQUFPLEVBQU8sT0FBUyxHQUFHLFdBQ3pDLEVBQ0ksRUFDRixFQUFNLEdBQUcsTUFBUSxDQUNmLEVBQU8sRUFBTyxRQUFVLElBQU8sSUFBSSxNQUFNLEdBQ3pDLEVBQU8sRUFBTyxPQUFTLEdBQUcsTUFBTSxFQUNsQyxFQVdGLEdBVEEsRUFBSSxLQUFLLGNBQWMsTUFBTSxFQUFPLENBQ2xDLEVBQ0EsRUFDQSxFQUNBLEVBQVksR0FDWixFQUFPLEdBQ1AsRUFDQSxDQUNGLEVBQUUsT0FBTyxDQUFJLENBQUMsU0FDSCxJQUFNLFlBQ2YsT0FBTyxFQUVULEdBQUksR0FDRixFQUFRLEVBQU0sTUFBTSxFQUFHLEdBQUssR0FBTSxDQUFDLEVBQ25DLEVBQVMsRUFBTyxNQUFNLEVBQUcsR0FBSyxFQUFHLEVBQ2pDLEVBQVMsRUFBTyxNQUFNLEVBQUcsR0FBSyxFQUFHLEVBRW5DLEVBQU0sS0FBSyxLQUFLLGFBQWEsRUFBTyxJQUFJLEVBQUUsRUFDMUMsRUFBTyxLQUFLLEVBQU0sQ0FBQyxFQUNuQixFQUFPLEtBQUssRUFBTSxFQUFFLEVBQ3BCLEdBQVcsRUFBTSxFQUFNLEVBQU0sT0FBUyxJQUFJLEVBQU0sRUFBTSxPQUFTLElBQy9ELEVBQU0sS0FBSyxFQUFRLEVBQ25CLFVBQ0csR0FDSCxNQUFPLElBR2IsTUFBTyxJQUNOLE9BQU8sQ0FDWixFQUNJLFVBQWdDLEVBQUcsQ0FDckMsSUFBSSxFQUFTLENBQ1gsSUFBSyxFQUNMLFdBQTRCLFdBQWdCLENBQVUsQ0FBQyxFQUFLLEVBQU0sQ0FDaEUsR0FBSSxLQUFLLEdBQUcsT0FDVixLQUFLLEdBQUcsT0FBTyxXQUFXLEVBQUssQ0FBSSxNQUVuQyxPQUFNLElBQUksTUFBTSxDQUFHLEdBRXBCLFlBQVksRUFFZixTQUEwQixVQUFlLENBQUMsRUFBTyxFQUFJLENBYW5ELEdBWkEsS0FBSyxHQUFLLEdBQU0sS0FBSyxJQUFNLENBQUMsRUFDNUIsS0FBSyxPQUFTLEVBQ2QsS0FBSyxNQUFRLEtBQUssV0FBYSxLQUFLLEtBQU8sR0FDM0MsS0FBSyxTQUFXLEtBQUssT0FBUyxFQUM5QixLQUFLLE9BQVMsS0FBSyxRQUFVLEtBQUssTUFBUSxHQUMxQyxLQUFLLGVBQWlCLENBQUMsU0FBUyxFQUNoQyxLQUFLLE9BQVMsQ0FDWixXQUFZLEVBQ1osYUFBYyxFQUNkLFVBQVcsRUFDWCxZQUFhLENBQ2YsRUFDSSxLQUFLLFFBQVEsT0FDZixLQUFLLE9BQU8sTUFBUSxDQUFDLEVBQUcsQ0FBQyxFQUczQixPQURBLEtBQUssT0FBUyxFQUNQLE1BQ04sVUFBVSxFQUViLE1BQXVCLFVBQWUsRUFBRyxDQUN2QyxJQUFJLEVBQUssS0FBSyxPQUFPLEdBQ3JCLEtBQUssUUFBVSxFQUNmLEtBQUssU0FDTCxLQUFLLFNBQ0wsS0FBSyxPQUFTLEVBQ2QsS0FBSyxTQUFXLEVBQ2hCLElBQUksRUFBUSxFQUFHLE1BQU0saUJBQWlCLEVBQ3RDLEdBQUksRUFDRixLQUFLLFdBQ0wsS0FBSyxPQUFPLGdCQUVaLE1BQUssT0FBTyxjQUVkLEdBQUksS0FBSyxRQUFRLE9BQ2YsS0FBSyxPQUFPLE1BQU0sS0FHcEIsT0FEQSxLQUFLLE9BQVMsS0FBSyxPQUFPLE1BQU0sQ0FBQyxFQUMxQixHQUNOLE9BQU8sRUFFVixNQUF1QixVQUFlLENBQUMsRUFBSSxDQUN6QyxJQUFJLEVBQU0sRUFBRyxPQUNULEVBQVEsRUFBRyxNQUFNLGVBQWUsRUFDcEMsS0FBSyxPQUFTLEVBQUssS0FBSyxPQUN4QixLQUFLLE9BQVMsS0FBSyxPQUFPLE9BQU8sRUFBRyxLQUFLLE9BQU8sT0FBUyxDQUFHLEVBQzVELEtBQUssUUFBVSxFQUNmLElBQUksRUFBVyxLQUFLLE1BQU0sTUFBTSxlQUFlLEVBRy9DLEdBRkEsS0FBSyxNQUFRLEtBQUssTUFBTSxPQUFPLEVBQUcsS0FBSyxNQUFNLE9BQVMsQ0FBQyxFQUN2RCxLQUFLLFFBQVUsS0FBSyxRQUFRLE9BQU8sRUFBRyxLQUFLLFFBQVEsT0FBUyxDQUFDLEVBQ3pELEVBQU0sT0FBUyxFQUNqQixLQUFLLFVBQVksRUFBTSxPQUFTLEVBRWxDLElBQUksRUFBSSxLQUFLLE9BQU8sTUFPcEIsR0FOQSxLQUFLLE9BQVMsQ0FDWixXQUFZLEtBQUssT0FBTyxXQUN4QixVQUFXLEtBQUssU0FBVyxFQUMzQixhQUFjLEtBQUssT0FBTyxhQUMxQixZQUFhLEdBQVMsRUFBTSxTQUFXLEVBQVMsT0FBUyxLQUFLLE9BQU8sYUFBZSxHQUFLLEVBQVMsRUFBUyxPQUFTLEVBQU0sUUFBUSxPQUFTLEVBQU0sR0FBRyxPQUFTLEtBQUssT0FBTyxhQUFlLENBQzFMLEVBQ0ksS0FBSyxRQUFRLE9BQ2YsS0FBSyxPQUFPLE1BQVEsQ0FBQyxFQUFFLEdBQUksRUFBRSxHQUFLLEtBQUssT0FBUyxDQUFHLEVBR3JELE9BREEsS0FBSyxPQUFTLEtBQUssT0FBTyxPQUNuQixNQUNOLE9BQU8sRUFFVixLQUFzQixVQUFlLEVBQUcsQ0FFdEMsT0FEQSxLQUFLLE1BQVEsR0FDTixNQUNOLE1BQU0sRUFFVCxPQUF3QixVQUFlLEVBQUcsQ0FDeEMsR0FBSSxLQUFLLFFBQVEsZ0JBQ2YsS0FBSyxXQUFhLE9BRWxCLFFBQU8sS0FBSyxXQUFXLDBCQUE0QixLQUFLLFNBQVcsR0FBSyxtSUFBcUksS0FBSyxhQUFhLEVBQUcsQ0FDaE8sS0FBTSxHQUNOLE1BQU8sS0FDUCxLQUFNLEtBQUssUUFDYixDQUFDLEVBRUgsT0FBTyxNQUNOLFFBQVEsRUFFWCxLQUFzQixVQUFlLENBQUMsRUFBRyxDQUN2QyxLQUFLLE1BQU0sS0FBSyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEdBQzdCLE1BQU0sRUFFVCxVQUEyQixVQUFlLEVBQUcsQ0FDM0MsSUFBSSxFQUFPLEtBQUssUUFBUSxPQUFPLEVBQUcsS0FBSyxRQUFRLE9BQVMsS0FBSyxNQUFNLE1BQU0sRUFDekUsT0FBUSxFQUFLLE9BQVMsR0FBSyxNQUFRLElBQU0sRUFBSyxPQUFPLEdBQUcsRUFBRSxRQUFRLE1BQU8sRUFBRSxHQUMxRSxXQUFXLEVBRWQsY0FBK0IsVUFBZSxFQUFHLENBQy9DLElBQUksRUFBTyxLQUFLLE1BQ2hCLEdBQUksRUFBSyxPQUFTLEdBQ2hCLEdBQVEsS0FBSyxPQUFPLE9BQU8sRUFBRyxHQUFLLEVBQUssTUFBTSxFQUVoRCxPQUFRLEVBQUssT0FBTyxFQUFHLEVBQUUsR0FBSyxFQUFLLE9BQVMsR0FBSyxNQUFRLEtBQUssUUFBUSxNQUFPLEVBQUUsR0FDOUUsZUFBZSxFQUVsQixhQUE4QixVQUFlLEVBQUcsQ0FDOUMsSUFBSSxFQUFNLEtBQUssVUFBVSxFQUNyQixFQUFJLElBQUksTUFBTSxFQUFJLE9BQVMsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUMxQyxPQUFPLEVBQU0sS0FBSyxjQUFjLEVBQUksS0FBTyxFQUFJLEtBQzlDLGNBQWMsRUFFakIsV0FBNEIsVUFBZSxDQUFDLEVBQU8sRUFBYyxDQUMvRCxJQUFJLEVBQU8sRUFBTyxFQUNsQixHQUFJLEtBQUssUUFBUSxpQkFxQmYsR0FwQkEsRUFBUyxDQUNQLFNBQVUsS0FBSyxTQUNmLE9BQVEsQ0FDTixXQUFZLEtBQUssT0FBTyxXQUN4QixVQUFXLEtBQUssVUFDaEIsYUFBYyxLQUFLLE9BQU8sYUFDMUIsWUFBYSxLQUFLLE9BQU8sV0FDM0IsRUFDQSxPQUFRLEtBQUssT0FDYixNQUFPLEtBQUssTUFDWixRQUFTLEtBQUssUUFDZCxRQUFTLEtBQUssUUFDZCxPQUFRLEtBQUssT0FDYixPQUFRLEtBQUssT0FDYixNQUFPLEtBQUssTUFDWixPQUFRLEtBQUssT0FDYixHQUFJLEtBQUssR0FDVCxlQUFnQixLQUFLLGVBQWUsTUFBTSxDQUFDLEVBQzNDLEtBQU0sS0FBSyxJQUNiLEVBQ0ksS0FBSyxRQUFRLE9BQ2YsRUFBTyxPQUFPLE1BQVEsS0FBSyxPQUFPLE1BQU0sTUFBTSxDQUFDLEVBSW5ELEdBREEsRUFBUSxFQUFNLEdBQUcsTUFBTSxpQkFBaUIsRUFDcEMsRUFDRixLQUFLLFVBQVksRUFBTSxPQVl6QixHQVZBLEtBQUssT0FBUyxDQUNaLFdBQVksS0FBSyxPQUFPLFVBQ3hCLFVBQVcsS0FBSyxTQUFXLEVBQzNCLGFBQWMsS0FBSyxPQUFPLFlBQzFCLFlBQWEsRUFBUSxFQUFNLEVBQU0sT0FBUyxHQUFHLE9BQVMsRUFBTSxFQUFNLE9BQVMsR0FBRyxNQUFNLFFBQVEsRUFBRSxHQUFHLE9BQVMsS0FBSyxPQUFPLFlBQWMsRUFBTSxHQUFHLE1BQy9JLEVBQ0EsS0FBSyxRQUFVLEVBQU0sR0FDckIsS0FBSyxPQUFTLEVBQU0sR0FDcEIsS0FBSyxRQUFVLEVBQ2YsS0FBSyxPQUFTLEtBQUssT0FBTyxPQUN0QixLQUFLLFFBQVEsT0FDZixLQUFLLE9BQU8sTUFBUSxDQUFDLEtBQUssT0FBUSxLQUFLLFFBQVUsS0FBSyxNQUFNLEVBTzlELEdBTEEsS0FBSyxNQUFRLEdBQ2IsS0FBSyxXQUFhLEdBQ2xCLEtBQUssT0FBUyxLQUFLLE9BQU8sTUFBTSxFQUFNLEdBQUcsTUFBTSxFQUMvQyxLQUFLLFNBQVcsRUFBTSxHQUN0QixFQUFRLEtBQUssY0FBYyxLQUFLLEtBQU0sS0FBSyxHQUFJLEtBQU0sRUFBYyxLQUFLLGVBQWUsS0FBSyxlQUFlLE9BQVMsRUFBRSxFQUNsSCxLQUFLLE1BQVEsS0FBSyxPQUNwQixLQUFLLEtBQU8sR0FFZCxHQUFJLEVBQ0YsT0FBTyxVQUNFLEtBQUssV0FBWSxDQUMxQixRQUFTLEtBQUssRUFDWixLQUFLLEdBQUssRUFBTyxHQUVuQixNQUFPLEdBRVQsTUFBTyxJQUNOLFlBQVksRUFFZixLQUFzQixVQUFlLEVBQUcsQ0FDdEMsR0FBSSxLQUFLLEtBQ1AsT0FBTyxLQUFLLElBRWQsSUFBSyxLQUFLLE9BQ1IsS0FBSyxLQUFPLEdBRWQsSUFBSSxFQUFPLEVBQU8sRUFBVyxFQUM3QixJQUFLLEtBQUssTUFDUixLQUFLLE9BQVMsR0FDZCxLQUFLLE1BQVEsR0FFZixJQUFJLEVBQVEsS0FBSyxjQUFjLEVBQy9CLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBRWhDLEdBREEsRUFBWSxLQUFLLE9BQU8sTUFBTSxLQUFLLE1BQU0sRUFBTSxHQUFHLEVBQzlDLEtBQWUsR0FBUyxFQUFVLEdBQUcsT0FBUyxFQUFNLEdBQUcsU0FHekQsR0FGQSxFQUFRLEVBQ1IsRUFBUSxFQUNKLEtBQUssUUFBUSxnQkFFZixHQURBLEVBQVEsS0FBSyxXQUFXLEVBQVcsRUFBTSxFQUFFLEVBQ3ZDLElBQVUsR0FDWixPQUFPLFVBQ0UsS0FBSyxXQUFZLENBQzFCLEVBQVEsR0FDUixhQUVBLE9BQU8sWUFFQyxLQUFLLFFBQVEsS0FDdkIsTUFJTixHQUFJLEVBQU8sQ0FFVCxHQURBLEVBQVEsS0FBSyxXQUFXLEVBQU8sRUFBTSxFQUFNLEVBQ3ZDLElBQVUsR0FDWixPQUFPLEVBRVQsTUFBTyxHQUVULEdBQUksS0FBSyxTQUFXLEdBQ2xCLE9BQU8sS0FBSyxRQUVaLFFBQU8sS0FBSyxXQUFXLDBCQUE0QixLQUFLLFNBQVcsR0FBSyx5QkFBMkIsS0FBSyxhQUFhLEVBQUcsQ0FDdEgsS0FBTSxHQUNOLE1BQU8sS0FDUCxLQUFNLEtBQUssUUFDYixDQUFDLEdBRUYsTUFBTSxFQUVULElBQXFCLFdBQWdCLENBQUcsRUFBRyxDQUN6QyxJQUFJLEVBQUksS0FBSyxLQUFLLEVBQ2xCLEdBQUksRUFDRixPQUFPLE1BRVAsUUFBTyxLQUFLLElBQUksR0FFakIsS0FBSyxFQUVSLE1BQXVCLFdBQWdCLENBQUssQ0FBQyxFQUFXLENBQ3RELEtBQUssZUFBZSxLQUFLLENBQVMsR0FDakMsT0FBTyxFQUVWLFNBQTBCLFdBQWdCLENBQVEsRUFBRyxDQUNuRCxJQUFJLEVBQUksS0FBSyxlQUFlLE9BQVMsRUFDckMsR0FBSSxFQUFJLEVBQ04sT0FBTyxLQUFLLGVBQWUsSUFBSSxNQUUvQixRQUFPLEtBQUssZUFBZSxJQUU1QixVQUFVLEVBRWIsY0FBK0IsV0FBZ0IsQ0FBYSxFQUFHLENBQzdELEdBQUksS0FBSyxlQUFlLFFBQVUsS0FBSyxlQUFlLEtBQUssZUFBZSxPQUFTLEdBQ2pGLE9BQU8sS0FBSyxXQUFXLEtBQUssZUFBZSxLQUFLLGVBQWUsT0FBUyxJQUFJLFVBRTVFLFFBQU8sS0FBSyxXQUFXLFFBQVcsT0FFbkMsZUFBZSxFQUVsQixTQUEwQixXQUFnQixDQUFRLENBQUMsRUFBRyxDQUVwRCxHQURBLEVBQUksS0FBSyxlQUFlLE9BQVMsRUFBSSxLQUFLLElBQUksR0FBSyxDQUFDLEVBQ2hELEdBQUssRUFDUCxPQUFPLEtBQUssZUFBZSxPQUUzQixPQUFPLFdBRVIsVUFBVSxFQUViLFVBQTJCLFdBQWdCLENBQVMsQ0FBQyxFQUFXLENBQzlELEtBQUssTUFBTSxDQUFTLEdBQ25CLFdBQVcsRUFFZCxlQUFnQyxXQUFnQixDQUFjLEVBQUcsQ0FDL0QsT0FBTyxLQUFLLGVBQWUsUUFDMUIsZ0JBQWdCLEVBQ25CLFFBQVMsQ0FBQyxFQUNWLGNBQStCLFdBQWdCLENBQVMsQ0FBQyxFQUFJLEVBQUssRUFBMkIsRUFBVSxDQUNyRyxJQUFJLEVBQVUsRUFDZCxPQUFRLE9BQ0QsR0FDSCxNQUFPLFFBRUosR0FFSCxPQURBLEVBQUcsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLEVBQ2pDLEdBQ1AsVUFDRyxHQUVILE9BREEsRUFBRyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsRUFDOUIsR0FDUCxVQUNHLEdBRUgsT0FEQSxFQUFHLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixFQUNqQyxHQUNQLFVBQ0csR0FDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLElBQUssRUFBSSxNQUFNLEVBQ3BDLFVBQ0csR0FDSCxFQUFHLFVBQVUsRUFBRSxNQUFNLElBQUssRUFBSSxNQUFNLEVBQ3BDLFVBQ0csR0FDSCxNQUFPLE9BRUosR0FFSCxPQURBLEVBQUksT0FBUyxHQUNOLEdBQ1AsVUFDRyxHQUdILE9BRkEsRUFBSSxPQUFTLEVBQUksT0FBTyxRQUFRLGFBQWMsRUFBRSxFQUNoRCxFQUFHLFVBQVUsRUFBRSxNQUFNLGdCQUFpQixFQUFJLE1BQU0sRUFDekMsR0FDUCxVQUNHLEdBQ0gsS0FBSyxVQUFVLFdBQVcsRUFDMUIsVUFDRyxJQUNILE1BQU8sYUFFSixJQUNILEtBQUssU0FBUyxFQUNkLFVBQ0csSUFDSCxLQUFLLFVBQVUsUUFBUSxFQUN2QixVQUNHLElBQ0gsRUFBRyxVQUFVLEVBQUUsTUFBTSxvQkFBcUIsRUFBSSxNQUFNLEVBQ3BELEtBQUssU0FBUyxFQUNkLFVBQ0csSUFFSCxPQURBLEVBQUcsVUFBVSxFQUFFLE1BQU0sZ0JBQWlCLEVBQUksTUFBTSxFQUN6QyxNQUNQLFVBQ0csSUFHSCxPQUZBLEVBQUksT0FBUyxFQUFJLE9BQU8sUUFBUSxVQUFXLEVBQUUsRUFDN0MsRUFBRyxVQUFVLEVBQUUsTUFBTSxrQkFBbUIsRUFBSSxNQUFNLEVBQzNDLEdBQ1AsVUFDRyxJQUdILE9BRkEsRUFBSSxPQUFTLElBQ2IsRUFBRyxVQUFVLEVBQUUsTUFBTSxnQkFBaUIsRUFBSSxNQUFNLEVBQ3pDLEdBQ1AsVUFDRyxJQUNILE1BQU8sUUFFSixJQUNILE1BQU8sZ0JBRUosSUFDSCxNQUFPLGtCQUVKLElBRUgsT0FEQSxLQUFLLFVBQVUsVUFBVSxFQUNsQixHQUNQLFVBQ0csSUFHSCxPQUZBLEtBQUssU0FBUyxFQUNkLEtBQUssVUFBVSxZQUFZLEVBQ3BCLHNCQUNQLFVBQ0csSUFHSCxPQUZBLEtBQUssU0FBUyxFQUNkLEtBQUssVUFBVSxZQUFZLEVBQ3BCLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxTQUFTLEVBQ1AsR0FDUCxVQUNHLElBRUgsT0FEQSxLQUFLLFVBQVUsT0FBTyxFQUNmLEdBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsS0FBSyxVQUFVLGFBQWEsRUFDckIsR0FDUCxVQUNHLElBRUgsT0FEQSxLQUFLLFNBQVMsRUFDUCxHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssVUFBVSxhQUFhLEVBQ3JCLEdBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsS0FBSyxVQUFVLGtCQUFrQixFQUMxQixHQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssU0FBUyxFQUNQLEdBQ1AsVUFDRyxJQUVILE9BREEsS0FBSyxVQUFVLFdBQVcsRUFDbkIsWUFDUCxVQUNHLElBRUgsT0FEQSxLQUFLLFNBQVMsRUFDUCxrQkFDUCxVQUNHLElBRUgsT0FEQSxLQUFLLFVBQVUsV0FBVyxFQUNuQixZQUNQLFVBQ0csSUFFSCxPQURBLEtBQUssU0FBUyxFQUNQLGtCQUNQLFVBQ0csSUFDSCxLQUFLLFVBQVUscUJBQXFCLEVBQ3BDLFVBQ0csSUFDSCxLQUFLLFNBQVMsRUFDZCxVQUNHLElBQ0gsTUFBTyxnQ0FFSixJQUNILE1BQU8sUUFFSixJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQ3RCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQ3RCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxTQUFTLEVBQ3ZCLFlBQ1AsVUFDRyxJQUdILE9BRkEsS0FBSyxTQUFTLEVBQ2QsRUFBRyxVQUFVLEVBQUUsTUFBTSxRQUFRLEVB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UyxDQUFDLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsS0FBUSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsVUFBYSxDQUFFLE1BQVMsQ0FBQyxHQUFJLEdBQUksR0FBSSxFQUFFLEVBQUcsVUFBYSxFQUFNLEVBQUcsTUFBUyxDQUFFLE1BQVMsQ0FBQyxFQUFHLFVBQWEsRUFBTSxFQUFHLE9BQVUsQ0FBRSxNQUFTLENBQUMsR0FBSSxHQUFJLEdBQUksRUFBRSxFQUFHLFVBQWEsRUFBTSxFQUFHLG9CQUF1QixDQUFFLE1BQVMsQ0FBQyxHQUFJLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxVQUFhLENBQUUsTUFBUyxDQUFDLEVBQUUsRUFBRyxVQUFhLEVBQU0sRUFBRyxRQUFXLENBQUUsTUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBRyxFQUFHLFVBQWEsRUFBSyxDQUFFLENBQ3R1QyxFQUNBLE9BQU8sR0FDUCxFQUNGLEVBQVEsTUFBUSxFQUNoQixTQUFTLENBQU0sRUFBRyxDQUNoQixLQUFLLEdBQUssQ0FBQyxFQUtiLE9BSEEsRUFBTyxFQUFRLFFBQVEsRUFDdkIsRUFBTyxV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QUssS0FBSyxFQUFFLElBQU8sR0FDbkIsR0FBSyxHQUFJLEdBRWIsR0FEQSxLQUFLLEVBQUUsSUFBTyxHQUNWLEtBQVEsR0FDVixJQUFLLEdBQUssRUFBRSxHQUFNLEdBQ2xCLEVBQUUsR0FBTSxHQUFLLEdBQUssRUFBRSxHQUFNLEdBRTVCLEdBQUksRUFDRixRQUFTLEdBQU8sRUFBRyxHQUFPLEtBQUssRUFBRyxLQUNoQyxHQUFNLEdBQUssS0FBSyxFQUFFLElBQU0sSUFBTyxHQUFLLEtBQUssRUFBRSxJQUFNLEVBQUksR0FDckQsS0FBSyxFQUFFLElBQU0sRUFBSSxJQUFNLEdBQUssS0FBSyxFQUFFLElBQU0sSUFBTyxHQUFLLEtBQUssRUFBRSxJQUFNLEVBQUksR0FDdEUsS0FBSyxFQUFFLElBQU0sSUFBTyxHQUk1QixDQUNBLFVBQ0csR0FDSCxDQUNFLElBQUksR0FBSyxFQUFFLEdBQU0sR0FDakIsRUFBRSxHQUFNLEdBQUssRUFDYixRQUFTLEVBQU0sR0FBSyxFQUFNLEVBQUcsSUFBTyxDQUNsQyxJQUFJLEdBQU0sRUFBSSxNQUFNLEtBQUssRUFBRSxHQUFNLEVBQUUsRUFDL0IsR0FBTSxLQUFLLEVBQUUsR0FBTyxHQUNwQixHQUFNLEdBQUssR0FJZixHQUhBLEtBQUssRUFBRSxHQUFPLEdBQ2QsSUFBTSxHQUFNLEVBQUUsR0FDZCxFQUFFLEdBQU8sR0FBTSxFQUFFLEdBQ2IsRUFDRixRQUFTLEdBQU8sRUFBRyxHQUFPLEtBQUssRUFBRyxLQUNoQyxHQUFNLEdBQU0sS0FBSyxFQUFFLElBQU0sR0FBTyxHQUFNLEtBQUssRUFBRSxJQUFNLEdBQU0sR0FDekQsS0FBSyxFQUFFLElBQU0sR0FBTSxJQUFNLEdBQU0sS0FBSyxFQUFFLElBQU0sR0FBTyxHQUFNLEtBQUssRUFBRSxJQUFNLEdBQU0sR0FDNUUsS0FBSyxFQUFFLElBQU0sR0FBTyxHQUk1QixDQUNBLFVBQ0csR0FDSCxDQUNFLElBQUksR0FBUSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtB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LElBQXlCLEVBQU8sTUFBTyxFQUFNLElBQWlCLENBQ2hFLE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBUyxJQUFXLENBQ3RDLE1BQU0sRUFBOEIsRUFBTyxJQUFNLElBQUksUUFBUSxDQUFDLEVBQUssSUFBUSxDQUN6RSxHQUFXLE1BQU0sRUFBTSxDQUFZLEVBQUUsS0FDbkMsQ0FBQyxJQUFNLENBQ0wsRUFBSSxDQUFDLEVBQ0wsRUFBUSxDQUFDLEdBRVgsQ0FBQyxJQUFNLENBQ0wsRUFBSSxNQUFNLGdCQUFpQixDQUFDLEVBQzVCLEdBQVEsYUFBYSxDQUFDLEVBQ3RCLEVBQUksQ0FBQyxFQUNMLEVBQU8sQ0FBQyxFQUVaLEVBQ0QsRUFBRyxhQUFhLEVBQ2pCLEdBQWUsS0FBSyxDQUFXLEVBQy9CLElBQWEsRUFBRSxNQUFNLENBQU0sRUFDNUIsR0FDQSxPQUFPLEVBQ04sSUFBMEIsRUFBTyxDQUFDLEVBQU0sRUFBTSxJQUFjLENBQzlELE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBUyxJQUFXLENBQ3RDLE1BQU0sRUFBOEIsRUFBTyxJQUFNLElBQUksUUFBUSxDQUFDLEVBQUssSUFBUSxDQUN6RSxHQUFXLE9BQU8sRUFBTSxFQUFNLENBQVMsRUFBRSxLQUN2QyxDQUFDLElBQU0sQ0FDTCxFQUFJLENBQUMsRUFDTCxFQUFRLENBQUMsR0FFWCxDQUFDLElBQU0sQ0FDTCxFQUFJLE1BQU0sZ0JBQWlCLENBQUMsRUFDNUIsR0FBUSxhQUFhLENBQUMsRUFDdEIsRUFBSSxDQUFDLEVBQ0wsRUFBTyxDQUFDLEVBRVosRUFDRCxFQUFHLGFBQWEsRUFDakIsR0FBZSxLQUFLLENBQVcsRUFDL0IsSUFBYSxFQUFFLE1BQU0sQ0FBTSxFQUM1QixHQUNBLFFBQVEsRUFDUCxHQUFVLENBQ1osWUFBYSxHQUNiLGNBQ0EsTUFBTyxJQUNQLE9BQVEsSUFDUixTQUNBLFFBQ0EsNkJBQ0EseUJBQ0EsV0FBWSxJQUNaLFdBQWlCLE9BQ2pCLGtCQUNBLHlCQUNBLGNBQ0Esb0JBQ0YsRUFDSSxHQUFrQixHQWF0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7RU0zNUhBLE9BQU8saUJBQWlCLFlBQWEsSUFBTSxDQUN6QyxNQUFNLEVBQ0osT0FBTyxZQUNQLE9BQU8sV0FBVyw4QkFBOEIsRUFBRSxRQUdwRCxDQUFDLEdBQUcsU0FBUyxpQkFBaUIsMkJBQTJCLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBVyxDQUMxRSxNQUFNLEVBQVMsRUFBTyxjQUN0QixFQUFPLFVBQVksRUFBTyxVQUMxQixFQUFPLFVBQVksbUJBQ3BCLEVBRUQsR0FBUSxXQUFXLENBQ2pCLE1BQU8sRUFBZSxPQUFTLFVBQy9CLFNBQVUsQ0FDWixDQUFDLEVBRUQsR0FBUSxJQUFJLENBQUUsY0FBZSxtQkFBb0IsQ0FBQyxFQUNuRCIsCiAgImRlYnVnSWQiOiAiNTAzNjdEMzdGQjZBRjc3ODY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0= diff --git a/templates/html/static/search.js b/templates/html/static/search.js index 8f866fc..213f1b6 100644 --- a/templates/html/static/search.js +++ b/templates/html/static/search.js @@ -1,42 +1,42 @@ -var e=Object.create;var{getPrototypeOf:GG,defineProperty:m,getOwnPropertyNames:QG}=Object;var UG=Object.prototype.hasOwnProperty;var XG=(Q,G,U)=>{U=Q!=null?e(GG(Q)):{};const X=G||!Q||!Q.__esModule?m(U,"default",{value:Q,enumerable:!0}):U;for(let Y of QG(Q))if(!UG.call(X,Y))m(X,Y,{get:()=>Q[Y],enumerable:!0});return X};var YG=(Q,G)=>()=>(G||Q((G={exports:{}}).exports,G),G.exports);var s=YG((u,d)=>{(function(){var Q=function(G){var U=new Q.Builder;return U.pipeline.add(Q.trimmer,Q.stopWordFilter,Q.stemmer),U.searchPipeline.add(Q.stemmer),G.call(U,U),U.build()};Q.version="2.3.9";/*! +var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames}=Object;var __hasOwnProp=Object.prototype.hasOwnProperty;var __toESM=(mod,isNodeMode,target)=>{target=mod!=null?__create(__getProtoOf(mod)):{};const to=isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target;for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:()=>mod[key],enumerable:!0});return to};var __commonJS=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports);var require_lunr=__commonJS((exports,module)=>{(function(){var lunr=function(config){var builder=new lunr.Builder;return builder.pipeline.add(lunr.trimmer,lunr.stopWordFilter,lunr.stemmer),builder.searchPipeline.add(lunr.stemmer),config.call(builder,builder),builder.build()};lunr.version="2.3.9";/*! * lunr.utils * Copyright (C) 2020 Oliver Nightingale - */Q.utils={},Q.utils.warn=function(G){return function(U){if(G.console&&console.warn)console.warn(U)}}(this),Q.utils.asString=function(G){if(G===void 0||G===null)return"";else return G.toString()},Q.utils.clone=function(G){if(G===null||G===void 0)return G;var U=Object.create(null),X=Object.keys(G);for(var Y=0;Y0){var z=Q.utils.clone(U)||{};z.position=[A,J],z.index=Z.length,Z.push(new Q.Token(X.slice(A,$),z))}A=$+1}}return Z},Q.tokenizer.separator=/[\s\-]+/;/*! + */lunr.tokenizer=function(obj,metadata){if(obj==null||obj==null)return[];if(Array.isArray(obj))return obj.map(function(t){return new lunr.Token(lunr.utils.asString(t).toLowerCase(),lunr.utils.clone(metadata))});var str=obj.toString().toLowerCase(),len=str.length,tokens=[];for(var sliceEnd=0,sliceStart=0;sliceEnd<=len;sliceEnd++){var char=str.charAt(sliceEnd),sliceLength=sliceEnd-sliceStart;if(char.match(lunr.tokenizer.separator)||sliceEnd==len){if(sliceLength>0){var tokenMetadata=lunr.utils.clone(metadata)||{};tokenMetadata.position=[sliceStart,sliceLength],tokenMetadata.index=tokens.length,tokens.push(new lunr.Token(str.slice(sliceStart,sliceEnd),tokenMetadata))}sliceStart=sliceEnd+1}}return tokens},lunr.tokenizer.separator=/[\s\-]+/;/*! * lunr.Pipeline * Copyright (C) 2020 Oliver Nightingale - */Q.Pipeline=function(){this._stack=[]},Q.Pipeline.registeredFunctions=Object.create(null),Q.Pipeline.registerFunction=function(G,U){if(U in this.registeredFunctions)Q.utils.warn("Overwriting existing registered function: "+U);G.label=U,Q.Pipeline.registeredFunctions[G.label]=G},Q.Pipeline.warnIfFunctionNotRegistered=function(G){var U=G.label&&G.label in this.registeredFunctions;if(!U)Q.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",G)},Q.Pipeline.load=function(G){var U=new Q.Pipeline;return G.forEach(function(X){var Y=Q.Pipeline.registeredFunctions[X];if(Y)U.add(Y);else throw new Error("Cannot load unregistered function: "+X)}),U},Q.Pipeline.prototype.add=function(){var G=Array.prototype.slice.call(arguments);G.forEach(function(U){Q.Pipeline.warnIfFunctionNotRegistered(U),this._stack.push(U)},this)},Q.Pipeline.prototype.after=function(G,U){Q.Pipeline.warnIfFunctionNotRegistered(U);var X=this._stack.indexOf(G);if(X==-1)throw new Error("Cannot find existingFn");X=X+1,this._stack.splice(X,0,U)},Q.Pipeline.prototype.before=function(G,U){Q.Pipeline.warnIfFunctionNotRegistered(U);var X=this._stack.indexOf(G);if(X==-1)throw new Error("Cannot find existingFn");this._stack.splice(X,0,U)},Q.Pipeline.prototype.remove=function(G){var U=this._stack.indexOf(G);if(U==-1)return;this._stack.splice(U,1)},Q.Pipeline.prototype.run=function(G){var U=this._stack.length;for(var X=0;X1){if($G)X=Z;if($==G)break;Y=X-U,Z=U+Math.floor(Y/2),$=this.elements[Z*2]}if($==G)return Z*2;if($>G)return Z*2;if($O)z+=2;else if(A==O)U+=X[J+1]*Y[z+1],J+=2,z+=2;return U},Q.Vector.prototype.similarity=function(G){return this.dot(G)/this.magnitude()||0},Q.Vector.prototype.toArray=function(){var G=new Array(this.elements.length/2);for(var U=1,X=0;U1){if(pivotIndexindex)end=pivotPoint;if(pivotIndex==index)break;sliceLength=end-start,pivotPoint=start+Math.floor(sliceLength/2),pivotIndex=this.elements[pivotPoint*2]}if(pivotIndex==index)return pivotPoint*2;if(pivotIndex>index)return pivotPoint*2;if(pivotIndexbVal)j+=2;else if(aVal==bVal)dotProduct+=a[i+1]*b[j+1],i+=2,j+=2;return dotProduct},lunr.Vector.prototype.similarity=function(otherVector){return this.dot(otherVector)/this.magnitude()||0},lunr.Vector.prototype.toArray=function(){var output=new Array(this.elements.length/2);for(var i=1,j=0;i0){var $=Z.str.charAt(0),A;if($ in Z.node.edges)A=Z.node.edges[$];else A=new Q.TokenSet,Z.node.edges[$]=A;if(Z.str.length==1)A.final=!0;Y.push({node:A,editsRemaining:Z.editsRemaining,str:Z.str.slice(1)})}if(Z.editsRemaining==0)continue;if("*"in Z.node.edges)var O=Z.node.edges["*"];else{var O=new Q.TokenSet;Z.node.edges["*"]=O}if(Z.str.length==0)O.final=!0;if(Y.push({node:O,editsRemaining:Z.editsRemaining-1,str:Z.str}),Z.str.length>1)Y.push({node:Z.node,editsRemaining:Z.editsRemaining-1,str:Z.str.slice(1)});if(Z.str.length==1)Z.node.final=!0;if(Z.str.length>=1){if("*"in Z.node.edges)var J=Z.node.edges["*"];else{var J=new Q.TokenSet;Z.node.edges["*"]=J}if(Z.str.length==1)J.final=!0;Y.push({node:J,editsRemaining:Z.editsRemaining-1,str:Z.str.slice(1)})}if(Z.str.length>1){var z=Z.str.charAt(0),D=Z.str.charAt(1),C;if(D in Z.node.edges)C=Z.node.edges[D];else C=new Q.TokenSet,Z.node.edges[D]=C;if(Z.str.length==1)C.final=!0;Y.push({node:C,editsRemaining:Z.editsRemaining-1,str:z+Z.str.slice(2)})}}return X},Q.TokenSet.fromString=function(G){var U=new Q.TokenSet,X=U;for(var Y=0,Z=G.length;Y=G;U--){var X=this.uncheckedNodes[U],Y=X.child.toString();if(Y in this.minimizedNodes)X.parent.edges[X.char]=this.minimizedNodes[Y];else X.child._str=Y,this.minimizedNodes[Y]=X.child;this.uncheckedNodes.pop()}};/*! + */lunr.TokenSet=function(){this.final=!1,this.edges={},this.id=lunr.TokenSet._nextId,lunr.TokenSet._nextId+=1},lunr.TokenSet._nextId=1,lunr.TokenSet.fromArray=function(arr){var builder=new lunr.TokenSet.Builder;for(var i=0,len=arr.length;i0){var char=frame.str.charAt(0),noEditNode;if(char in frame.node.edges)noEditNode=frame.node.edges[char];else noEditNode=new lunr.TokenSet,frame.node.edges[char]=noEditNode;if(frame.str.length==1)noEditNode.final=!0;stack.push({node:noEditNode,editsRemaining:frame.editsRemaining,str:frame.str.slice(1)})}if(frame.editsRemaining==0)continue;if("*"in frame.node.edges)var insertionNode=frame.node.edges["*"];else{var insertionNode=new lunr.TokenSet;frame.node.edges["*"]=insertionNode}if(frame.str.length==0)insertionNode.final=!0;if(stack.push({node:insertionNode,editsRemaining:frame.editsRemaining-1,str:frame.str}),frame.str.length>1)stack.push({node:frame.node,editsRemaining:frame.editsRemaining-1,str:frame.str.slice(1)});if(frame.str.length==1)frame.node.final=!0;if(frame.str.length>=1){if("*"in frame.node.edges)var substitutionNode=frame.node.edges["*"];else{var substitutionNode=new lunr.TokenSet;frame.node.edges["*"]=substitutionNode}if(frame.str.length==1)substitutionNode.final=!0;stack.push({node:substitutionNode,editsRemaining:frame.editsRemaining-1,str:frame.str.slice(1)})}if(frame.str.length>1){var charA=frame.str.charAt(0),charB=frame.str.charAt(1),transposeNode;if(charB in frame.node.edges)transposeNode=frame.node.edges[charB];else transposeNode=new lunr.TokenSet,frame.node.edges[charB]=transposeNode;if(frame.str.length==1)transposeNode.final=!0;stack.push({node:transposeNode,editsRemaining:frame.editsRemaining-1,str:charA+frame.str.slice(2)})}}return root},lunr.TokenSet.fromString=function(str){var node=new lunr.TokenSet,root=node;for(var i=0,len=str.length;i=downTo;i--){var node=this.uncheckedNodes[i],childKey=node.child.toString();if(childKey in this.minimizedNodes)node.parent.edges[node.char]=this.minimizedNodes[childKey];else node.child._str=childKey,this.minimizedNodes[childKey]=node.child;this.uncheckedNodes.pop()}};/*! * lunr.Index * Copyright (C) 2020 Oliver Nightingale - */Q.Index=function(G){this.invertedIndex=G.invertedIndex,this.fieldVectors=G.fieldVectors,this.tokenSet=G.tokenSet,this.fields=G.fields,this.pipeline=G.pipeline},Q.Index.prototype.search=function(G){return this.query(function(U){var X=new Q.QueryParser(G,U);X.parse()})},Q.Index.prototype.query=function(G){var U=new Q.Query(this.fields),X=Object.create(null),Y=Object.create(null),Z=Object.create(null),$=Object.create(null),A=Object.create(null);for(var O=0;O1)this._b=1;else this._b=G},Q.Builder.prototype.k1=function(G){this._k1=G},Q.Builder.prototype.add=function(G,U){var X=G[this._ref],Y=Object.keys(this._fields);this._documents[X]=U||{},this.documentCount+=1;for(var Z=0;Z=this.length)return Q.QueryLexer.EOS;var G=this.str.charAt(this.pos);return this.pos+=1,G},Q.QueryLexer.prototype.width=function(){return this.pos-this.start},Q.QueryLexer.prototype.ignore=function(){if(this.start==this.pos)this.pos+=1;this.start=this.pos},Q.QueryLexer.prototype.backup=function(){this.pos-=1},Q.QueryLexer.prototype.acceptDigitRun=function(){var G,U;do G=this.next(),U=G.charCodeAt(0);while(U>47&&U<58);if(G!=Q.QueryLexer.EOS)this.backup()},Q.QueryLexer.prototype.more=function(){return this.pos1)G.backup(),G.emit(Q.QueryLexer.TERM);if(G.ignore(),G.more())return Q.QueryLexer.lexText},Q.QueryLexer.lexEditDistance=function(G){return G.ignore(),G.acceptDigitRun(),G.emit(Q.QueryLexer.EDIT_DISTANCE),Q.QueryLexer.lexText},Q.QueryLexer.lexBoost=function(G){return G.ignore(),G.acceptDigitRun(),G.emit(Q.QueryLexer.BOOST),Q.QueryLexer.lexText},Q.QueryLexer.lexEOS=function(G){if(G.width()>0)G.emit(Q.QueryLexer.TERM)},Q.QueryLexer.termSeparator=Q.tokenizer.separator,Q.QueryLexer.lexText=function(G){while(!0){var U=G.next();if(U==Q.QueryLexer.EOS)return Q.QueryLexer.lexEOS;if(U.charCodeAt(0)==92){G.escapeCharacter();continue}if(U==":")return Q.QueryLexer.lexField;if(U=="~"){if(G.backup(),G.width()>0)G.emit(Q.QueryLexer.TERM);return Q.QueryLexer.lexEditDistance}if(U=="^"){if(G.backup(),G.width()>0)G.emit(Q.QueryLexer.TERM);return Q.QueryLexer.lexBoost}if(U=="+"&&G.width()===1)return G.emit(Q.QueryLexer.PRESENCE),Q.QueryLexer.lexText;if(U=="-"&&G.width()===1)return G.emit(Q.QueryLexer.PRESENCE),Q.QueryLexer.lexText;if(U.match(Q.QueryLexer.termSeparator))return Q.QueryLexer.lexTerm}},Q.QueryParser=function(G,U){this.lexer=new Q.QueryLexer(G),this.query=U,this.currentClause={},this.lexemeIdx=0},Q.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;var G=Q.QueryParser.parseClause;while(G)G=G(this);return this.query},Q.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},Q.QueryParser.prototype.consumeLexeme=function(){var G=this.peekLexeme();return this.lexemeIdx+=1,G},Q.QueryParser.prototype.nextClause=function(){var G=this.currentClause;this.query.clause(G),this.currentClause={}},Q.QueryParser.parseClause=function(G){var U=G.peekLexeme();if(U==null)return;switch(U.type){case Q.QueryLexer.PRESENCE:return Q.QueryParser.parsePresence;case Q.QueryLexer.FIELD:return Q.QueryParser.parseField;case Q.QueryLexer.TERM:return Q.QueryParser.parseTerm;default:var X="expected either a field or a term, found "+U.type;if(U.str.length>=1)X+=" with value '"+U.str+"'";throw new Q.QueryParseError(X,U.start,U.end)}},Q.QueryParser.parsePresence=function(G){var U=G.consumeLexeme();if(U==null)return;switch(U.str){case"-":G.currentClause.presence=Q.Query.presence.PROHIBITED;break;case"+":G.currentClause.presence=Q.Query.presence.REQUIRED;break;default:var X="unrecognised presence operator'"+U.str+"'";throw new Q.QueryParseError(X,U.start,U.end)}var Y=G.peekLexeme();if(Y==null){var X="expecting term or field, found nothing";throw new Q.QueryParseError(X,U.start,U.end)}switch(Y.type){case Q.QueryLexer.FIELD:return Q.QueryParser.parseField;case Q.QueryLexer.TERM:return Q.QueryParser.parseTerm;default:var X="expecting term or field, found '"+Y.type+"'";throw new Q.QueryParseError(X,Y.start,Y.end)}},Q.QueryParser.parseField=function(G){var U=G.consumeLexeme();if(U==null)return;if(G.query.allFields.indexOf(U.str)==-1){var X=G.query.allFields.map(function($){return"'"+$+"'"}).join(", "),Y="unrecognised field '"+U.str+"', possible fields: "+X;throw new Q.QueryParseError(Y,U.start,U.end)}G.currentClause.fields=[U.str];var Z=G.peekLexeme();if(Z==null){var Y="expecting term, found nothing";throw new Q.QueryParseError(Y,U.start,U.end)}switch(Z.type){case Q.QueryLexer.TERM:return Q.QueryParser.parseTerm;default:var Y="expecting term, found '"+Z.type+"'";throw new Q.QueryParseError(Y,Z.start,Z.end)}},Q.QueryParser.parseTerm=function(G){var U=G.consumeLexeme();if(U==null)return;if(G.currentClause.term=U.str.toLowerCase(),U.str.indexOf("*")!=-1)G.currentClause.usePipeline=!1;var X=G.peekLexeme();if(X==null){G.nextClause();return}switch(X.type){case Q.QueryLexer.TERM:return G.nextClause(),Q.QueryParser.parseTerm;case Q.QueryLexer.FIELD:return G.nextClause(),Q.QueryParser.parseField;case Q.QueryLexer.EDIT_DISTANCE:return Q.QueryParser.parseEditDistance;case Q.QueryLexer.BOOST:return Q.QueryParser.parseBoost;case Q.QueryLexer.PRESENCE:return G.nextClause(),Q.QueryParser.parsePresence;default:var Y="Unexpected lexeme type '"+X.type+"'";throw new Q.QueryParseError(Y,X.start,X.end)}},Q.QueryParser.parseEditDistance=function(G){var U=G.consumeLexeme();if(U==null)return;var X=parseInt(U.str,10);if(isNaN(X)){var Y="edit distance must be numeric";throw new Q.QueryParseError(Y,U.start,U.end)}G.currentClause.editDistance=X;var Z=G.peekLexeme();if(Z==null){G.nextClause();return}switch(Z.type){case Q.QueryLexer.TERM:return G.nextClause(),Q.QueryParser.parseTerm;case Q.QueryLexer.FIELD:return G.nextClause(),Q.QueryParser.parseField;case Q.QueryLexer.EDIT_DISTANCE:return Q.QueryParser.parseEditDistance;case Q.QueryLexer.BOOST:return Q.QueryParser.parseBoost;case Q.QueryLexer.PRESENCE:return G.nextClause(),Q.QueryParser.parsePresence;default:var Y="Unexpected lexeme type '"+Z.type+"'";throw new Q.QueryParseError(Y,Z.start,Z.end)}},Q.QueryParser.parseBoost=function(G){var U=G.consumeLexeme();if(U==null)return;var X=parseInt(U.str,10);if(isNaN(X)){var Y="boost must be numeric";throw new Q.QueryParseError(Y,U.start,U.end)}G.currentClause.boost=X;var Z=G.peekLexeme();if(Z==null){G.nextClause();return}switch(Z.type){case Q.QueryLexer.TERM:return G.nextClause(),Q.QueryParser.parseTerm;case Q.QueryLexer.FIELD:return G.nextClause(),Q.QueryParser.parseField;case Q.QueryLexer.EDIT_DISTANCE:return Q.QueryParser.parseEditDistance;case Q.QueryLexer.BOOST:return Q.QueryParser.parseBoost;case Q.QueryLexer.PRESENCE:return G.nextClause(),Q.QueryParser.parsePresence;default:var Y="Unexpected lexeme type '"+Z.type+"'";throw new Q.QueryParseError(Y,Z.start,Z.end)}},function(G,U){if(typeof define==="function"&&define.amd)define(U);else if(typeof u==="object")d.exports=U();else G.lunr=U()}(this,function(){return Q})})()});var o=XG(s(),1);function ZG(Q,G,U,X){if(!U.trim().length){X.innerHTML='
Type a search into the box.
';return}const Y=G.query(function(Z){Z.term(U,{boost:100,usePipeline:!0}),Z.term(U,{boost:10,usePipeline:!1,wildcard:o.default.Query.wildcard.TRAILING}),Z.term(U,{boost:1,editDistance:1})});if(!Y.length){X.innerHTML='
No results found.
';return}X.innerHTML=Y.map((Z)=>$G(Z,Q[Z.ref])).join("\n")}function $G(Q,G){const U=Q.matchData.metadata;return` - -

${i(G.name,"name",U,!1)}

-
${i(G.text,"text",U,!0)}
- `}function i(Q,G,U,X){const Y=new Array;let Z=new Array;for(let O of Object.values(U)){if(!O[G])continue;Z=Z.concat(O[G].position)}Z.sort((O,J)=>O[0]-J[0]);let $=0;function A(){if($>=Q.length)return null;const O=Q.indexOf("\n",$),J=$;let z="";if(O>=0)z=Q.slice($,O),$=O+1;else z=Q.slice($),$=Q.length;return{startInclusive:J,endExclusive:$,text:z}}if(X){let O=A();while(O){const J=Z.filter((z)=>z[0]>=O.startInclusive&&z[0]${a(O,J)}`);O=A()}}else Y.push(a({startInclusive:0,endExclusive:Q.length,text:Q},Z));return Y.join("\n")}function a(Q,G){const U=new Array;let X=0;for(let[Y,Z]of G){const $=Y-Q.startInclusive;if($>X)U.push(Q.text.slice(X,$));U.push(""),U.push(Q.text.slice($,$+Z)),U.push(""),X=$+Z}if(X{const Q=document.querySelector("#dj-search-input");if(!Q)return;const G=document.querySelector("#dj-search-menu-results");if(!G)return;const U=document.querySelector("#dj-search-menu");if(!U)return;document.querySelectorAll(".DJSearchMenu_FlexContainer").forEach((J)=>{J.addEventListener("click",(z)=>{if(z.target!==J)return;U.hidePopover()})});const X=window;if(!X.djSearchIndex){console.warn("Search index not found");return}const Y=X.djSearchIndex,Z={},$=o.default(function(){this.ref("url"),this.field("name"),this.field("text"),this.field("url"),this.metadataWhitelist=["position"];for(let J of Y)this.add(J),Z[J.url]=J});function A(J,z,D=!1,C){let T=null;return function(){let P=this,F=arguments,W=function(){if(T=null,!D)J.apply(P,F)},K=D&&!T;if(clearTimeout(T),T=setTimeout(W,z),C)C();if(K)J.apply(P,F)}}const O=A((J)=>{ZG(Z,$,J,G)},500);Q.addEventListener("input",(J)=>{O(J.target.value)}),document.querySelector(".DJOpenSearchButton").addEventListener("click",(J)=>{return J.preventDefault(),U.showPopover(),Q.focus(),!0}),window.addEventListener("keydown",(J)=>{if(U.matches(":popover-open"))return;if(J.key==="/")U.showPopover(),Q.focus(),J.preventDefault()}),window.addEventListener("keydown",(J)=>{if(J.key==="Escape")U.hidePopover()})}); + */lunr.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=lunr.tokenizer,this.pipeline=new lunr.Pipeline,this.searchPipeline=new lunr.Pipeline,this.documentCount=0,this._b=0.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},lunr.Builder.prototype.ref=function(ref){this._ref=ref},lunr.Builder.prototype.field=function(fieldName,attributes){if(/\//.test(fieldName))throw new RangeError("Field '"+fieldName+"' contains illegal character '/'");this._fields[fieldName]=attributes||{}},lunr.Builder.prototype.b=function(number){if(number<0)this._b=0;else if(number>1)this._b=1;else this._b=number},lunr.Builder.prototype.k1=function(number){this._k1=number},lunr.Builder.prototype.add=function(doc,attributes){var docRef=doc[this._ref],fields=Object.keys(this._fields);this._documents[docRef]=attributes||{},this.documentCount+=1;for(var i=0;i=this.length)return lunr.QueryLexer.EOS;var char=this.str.charAt(this.pos);return this.pos+=1,char},lunr.QueryLexer.prototype.width=function(){return this.pos-this.start},lunr.QueryLexer.prototype.ignore=function(){if(this.start==this.pos)this.pos+=1;this.start=this.pos},lunr.QueryLexer.prototype.backup=function(){this.pos-=1},lunr.QueryLexer.prototype.acceptDigitRun=function(){var char,charCode;do char=this.next(),charCode=char.charCodeAt(0);while(charCode>47&&charCode<58);if(char!=lunr.QueryLexer.EOS)this.backup()},lunr.QueryLexer.prototype.more=function(){return this.pos1)lexer.backup(),lexer.emit(lunr.QueryLexer.TERM);if(lexer.ignore(),lexer.more())return lunr.QueryLexer.lexText},lunr.QueryLexer.lexEditDistance=function(lexer){return lexer.ignore(),lexer.acceptDigitRun(),lexer.emit(lunr.QueryLexer.EDIT_DISTANCE),lunr.QueryLexer.lexText},lunr.QueryLexer.lexBoost=function(lexer){return lexer.ignore(),lexer.acceptDigitRun(),lexer.emit(lunr.QueryLexer.BOOST),lunr.QueryLexer.lexText},lunr.QueryLexer.lexEOS=function(lexer){if(lexer.width()>0)lexer.emit(lunr.QueryLexer.TERM)},lunr.QueryLexer.termSeparator=lunr.tokenizer.separator,lunr.QueryLexer.lexText=function(lexer){while(!0){var char=lexer.next();if(char==lunr.QueryLexer.EOS)return lunr.QueryLexer.lexEOS;if(char.charCodeAt(0)==92){lexer.escapeCharacter();continue}if(char==":")return lunr.QueryLexer.lexField;if(char=="~"){if(lexer.backup(),lexer.width()>0)lexer.emit(lunr.QueryLexer.TERM);return lunr.QueryLexer.lexEditDistance}if(char=="^"){if(lexer.backup(),lexer.width()>0)lexer.emit(lunr.QueryLexer.TERM);return lunr.QueryLexer.lexBoost}if(char=="+"&&lexer.width()===1)return lexer.emit(lunr.QueryLexer.PRESENCE),lunr.QueryLexer.lexText;if(char=="-"&&lexer.width()===1)return lexer.emit(lunr.QueryLexer.PRESENCE),lunr.QueryLexer.lexText;if(char.match(lunr.QueryLexer.termSeparator))return lunr.QueryLexer.lexTerm}},lunr.QueryParser=function(str,query){this.lexer=new lunr.QueryLexer(str),this.query=query,this.currentClause={},this.lexemeIdx=0},lunr.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;var state=lunr.QueryParser.parseClause;while(state)state=state(this);return this.query},lunr.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},lunr.QueryParser.prototype.consumeLexeme=function(){var lexeme=this.peekLexeme();return this.lexemeIdx+=1,lexeme},lunr.QueryParser.prototype.nextClause=function(){var completedClause=this.currentClause;this.query.clause(completedClause),this.currentClause={}},lunr.QueryParser.parseClause=function(parser){var lexeme=parser.peekLexeme();if(lexeme==null)return;switch(lexeme.type){case lunr.QueryLexer.PRESENCE:return lunr.QueryParser.parsePresence;case lunr.QueryLexer.FIELD:return lunr.QueryParser.parseField;case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:var errorMessage="expected either a field or a term, found "+lexeme.type;if(lexeme.str.length>=1)errorMessage+=" with value '"+lexeme.str+"'";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}},lunr.QueryParser.parsePresence=function(parser){var lexeme=parser.consumeLexeme();if(lexeme==null)return;switch(lexeme.str){case"-":parser.currentClause.presence=lunr.Query.presence.PROHIBITED;break;case"+":parser.currentClause.presence=lunr.Query.presence.REQUIRED;break;default:var errorMessage="unrecognised presence operator'"+lexeme.str+"'";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}var nextLexeme=parser.peekLexeme();if(nextLexeme==null){var errorMessage="expecting term or field, found nothing";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}switch(nextLexeme.type){case lunr.QueryLexer.FIELD:return lunr.QueryParser.parseField;case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:var errorMessage="expecting term or field, found '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},lunr.QueryParser.parseField=function(parser){var lexeme=parser.consumeLexeme();if(lexeme==null)return;if(parser.query.allFields.indexOf(lexeme.str)==-1){var possibleFields=parser.query.allFields.map(function(f){return"'"+f+"'"}).join(", "),errorMessage="unrecognised field '"+lexeme.str+"', possible fields: "+possibleFields;throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.fields=[lexeme.str];var nextLexeme=parser.peekLexeme();if(nextLexeme==null){var errorMessage="expecting term, found nothing";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}switch(nextLexeme.type){case lunr.QueryLexer.TERM:return lunr.QueryParser.parseTerm;default:var errorMessage="expecting term, found '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},lunr.QueryParser.parseTerm=function(parser){var lexeme=parser.consumeLexeme();if(lexeme==null)return;if(parser.currentClause.term=lexeme.str.toLowerCase(),lexeme.str.indexOf("*")!=-1)parser.currentClause.usePipeline=!1;var nextLexeme=parser.peekLexeme();if(nextLexeme==null){parser.nextClause();return}switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:var errorMessage="Unexpected lexeme type '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},lunr.QueryParser.parseEditDistance=function(parser){var lexeme=parser.consumeLexeme();if(lexeme==null)return;var editDistance=parseInt(lexeme.str,10);if(isNaN(editDistance)){var errorMessage="edit distance must be numeric";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.editDistance=editDistance;var nextLexeme=parser.peekLexeme();if(nextLexeme==null){parser.nextClause();return}switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:var errorMessage="Unexpected lexeme type '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},lunr.QueryParser.parseBoost=function(parser){var lexeme=parser.consumeLexeme();if(lexeme==null)return;var boost=parseInt(lexeme.str,10);if(isNaN(boost)){var errorMessage="boost must be numeric";throw new lunr.QueryParseError(errorMessage,lexeme.start,lexeme.end)}parser.currentClause.boost=boost;var nextLexeme=parser.peekLexeme();if(nextLexeme==null){parser.nextClause();return}switch(nextLexeme.type){case lunr.QueryLexer.TERM:return parser.nextClause(),lunr.QueryParser.parseTerm;case lunr.QueryLexer.FIELD:return parser.nextClause(),lunr.QueryParser.parseField;case lunr.QueryLexer.EDIT_DISTANCE:return lunr.QueryParser.parseEditDistance;case lunr.QueryLexer.BOOST:return lunr.QueryParser.parseBoost;case lunr.QueryLexer.PRESENCE:return parser.nextClause(),lunr.QueryParser.parsePresence;default:var errorMessage="Unexpected lexeme type '"+nextLexeme.type+"'";throw new lunr.QueryParseError(errorMessage,nextLexeme.start,nextLexeme.end)}},function(root,factory){if(typeof define==="function"&&define.amd)define(factory);else if(typeof exports==="object")module.exports=factory();else root.lunr=factory()}(this,function(){return lunr})})()});var import_lunr=__toESM(require_lunr(),1);function doSearch(docsByRef,l,query,resultEl){if(!query.trim().length){resultEl.innerHTML='
Type a search into the box.
';return}const results=l.query(function(q){q.term(query,{boost:100,usePipeline:!0}),q.term(query,{boost:10,usePipeline:!1,wildcard:import_lunr.default.Query.wildcard.TRAILING}),q.term(query,{boost:1,editDistance:1})});if(!results.length){resultEl.innerHTML='
No results found.
';return}resultEl.innerHTML=results.map((r)=>buildResultHTML(r,docsByRef[r.ref])).join("\n")}function buildResultHTML(result,doc){const metadata=result.matchData.metadata;return` +
+

${buildHighlightedTermsHTML(doc.name,"name",metadata,!1)}

+
${buildHighlightedTermsHTML(doc.text,"text",metadata,!0)}
+ `}function buildHighlightedTermsHTML(text,metadataKey,metadata,useParagraphs){const result=new Array;let positions=new Array;for(let termMetadata of Object.values(metadata)){if(!termMetadata[metadataKey])continue;positions=positions.concat(termMetadata[metadataKey].position)}positions.sort((a,b)=>a[0]-b[0]);let textIndex=0;function getNextLine(){if(textIndex>=text.length)return null;const lbIndex=text.indexOf("\n",textIndex),originalTextIndex=textIndex;let substring="";if(lbIndex>=0)substring=text.slice(textIndex,lbIndex),textIndex=lbIndex+1;else substring=text.slice(textIndex),textIndex=text.length;return{startInclusive:originalTextIndex,endExclusive:textIndex,text:substring}}if(useParagraphs){let nextLine=getNextLine();while(nextLine){const relevantPositions=positions.filter((pos)=>pos[0]>=nextLine.startInclusive&&pos[0]${lineToHTML(nextLine,relevantPositions)}`);nextLine=getNextLine()}}else result.push(lineToHTML({startInclusive:0,endExclusive:text.length,text},positions));return result.join("\n")}function lineToHTML(line,positions){const result=new Array;let lastPlainIndex=0;for(let[start,len]of positions){const localStart=start-line.startInclusive;if(localStart>lastPlainIndex)result.push(line.text.slice(lastPlainIndex,localStart));result.push(""),result.push(line.text.slice(localStart,localStart+len)),result.push(""),lastPlainIndex=localStart+len}if(lastPlainIndex{const inputEl=document.querySelector("#dj-search-input");if(!inputEl)return;const resultEl=document.querySelector("#dj-search-menu-results");if(!resultEl)return;const popoverEl=document.querySelector("#dj-search-menu");if(!popoverEl)return;document.querySelectorAll(".DJSearchMenu_FlexContainer").forEach((flexEl)=>{flexEl.addEventListener("click",(e)=>{if(e.target!==flexEl)return;popoverEl.hidePopover()})});const win=window;if(!win.djSearchIndex){console.warn("Search index not found");return}const searchIndex=win.djSearchIndex,docsByRef={},l=import_lunr.default(function(){this.ref("url"),this.field("name"),this.field("text"),this.field("url"),this.metadataWhitelist=["position"];for(let doc of searchIndex)this.add(doc),docsByRef[doc.url]=doc});function debounce(func,wait,immediate=!1,alwaysImmediateCallback){let timeout=null;return function(){let context=this,args=arguments,later=function(){if(timeout=null,!immediate)func.apply(context,args)},callNow=immediate&&!timeout;if(clearTimeout(timeout),timeout=setTimeout(later,wait),alwaysImmediateCallback)alwaysImmediateCallback();if(callNow)func.apply(context,args)}}const debouncedSearcher=debounce((query)=>{doSearch(docsByRef,l,query,resultEl)},500);inputEl.addEventListener("input",(e)=>{debouncedSearcher(e.target.value)}),document.querySelector(".DJOpenSearchButton").addEventListener("click",(e)=>{return e.preventDefault(),popoverEl.showPopover(),inputEl.focus(),!0}),window.addEventListener("keydown",(e)=>{if(popoverEl.matches(":popover-open"))return;if(e.key==="/")popoverEl.showPopover(),inputEl.focus(),e.preventDefault()}),window.addEventListener("keydown",(e)=>{if(e.key==="Escape")popoverEl.hidePopover()})}); -//# debugId=D94A4ABCF1A4B16864756E2164756E21 -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2x1bnIvbHVuci5qcyIsICJzcmMvY2xpZW50anMvc2VhcmNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogbHVuciAtIGh0dHA6Ly9sdW5yanMuY29tIC0gQSBiaXQgbGlrZSBTb2xyLCBidXQgbXVjaCBzbWFsbGVyIGFuZCBub3QgYXMgYnJpZ2h0IC0gMi4zLjlcbiAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb25maWd1cmluZyBhbmQgY29uc3RydWN0aW5nXG4gICAqIGEgbmV3IGx1bnIgSW5kZXguXG4gICAqXG4gICAqIEEgbHVuci5CdWlsZGVyIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIHRoZSBwaXBlbGluZSBzZXR1cFxuICAgKiB3aXRoIGEgdHJpbW1lciwgc3RvcCB3b3JkIGZpbHRlciBhbmQgc3RlbW1lci5cbiAgICpcbiAgICogVGhpcyBidWlsZGVyIG9iamVjdCBpcyB5aWVsZGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uXG4gICAqIHRoYXQgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLCBhbGxvd2luZyB0aGUgbGlzdCBvZiBmaWVsZHNcbiAgICogYW5kIG90aGVyIGJ1aWxkZXIgcGFyYW1ldGVycyB0byBiZSBjdXN0b21pc2VkLlxuICAgKlxuICAgKiBBbGwgZG9jdW1lbnRzIF9tdXN0XyBiZSBhZGRlZCB3aXRoaW4gdGhlIHBhc3NlZCBjb25maWcgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHZhciBpZHggPSBsdW5yKGZ1bmN0aW9uICgpIHtcbiAgICogICB0aGlzLmZpZWxkKCd0aXRsZScpXG4gICAqICAgdGhpcy5maWVsZCgnYm9keScpXG4gICAqICAgdGhpcy5yZWYoJ2lkJylcbiAgICpcbiAgICogICBkb2N1bWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9jKSB7XG4gICAqICAgICB0aGlzLmFkZChkb2MpXG4gICAqICAgfSwgdGhpcylcbiAgICogfSlcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgbHVuci5CdWlsZGVyfVxuICAgKiBAc2VlIHtAbGluayBsdW5yLlBpcGVsaW5lfVxuICAgKiBAc2VlIHtAbGluayBsdW5yLnRyaW1tZXJ9XG4gICAqIEBzZWUge0BsaW5rIGx1bnIuc3RvcFdvcmRGaWx0ZXJ9XG4gICAqIEBzZWUge0BsaW5rIGx1bnIuc3RlbW1lcn1cbiAgICogQG5hbWVzcGFjZSB7ZnVuY3Rpb259IGx1bnJcbiAgICovXG4gIHZhciBsdW5yID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHZhciBidWlsZGVyID0gbmV3IGx1bnIuQnVpbGRlcigpO1xuXG4gICAgYnVpbGRlci5waXBlbGluZS5hZGQobHVuci50cmltbWVyLCBsdW5yLnN0b3BXb3JkRmlsdGVyLCBsdW5yLnN0ZW1tZXIpO1xuXG4gICAgYnVpbGRlci5zZWFyY2hQaXBlbGluZS5hZGQobHVuci5zdGVtbWVyKTtcblxuICAgIGNvbmZpZy5jYWxsKGJ1aWxkZXIsIGJ1aWxkZXIpO1xuICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7XG4gIH07XG5cbiAgbHVuci52ZXJzaW9uID0gXCIyLjMuOVwiO1xuICAvKiFcbiAgICogbHVuci51dGlsc1xuICAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgT2xpdmVyIE5pZ2h0aW5nYWxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBIG5hbWVzcGFjZSBjb250YWluaW5nIHV0aWxzIGZvciB0aGUgcmVzdCBvZiB0aGUgbHVuciBsaWJyYXJ5XG4gICAqIEBuYW1lc3BhY2UgbHVuci51dGlsc1xuICAgKi9cbiAgbHVuci51dGlscyA9IHt9O1xuXG4gIC8qKlxuICAgKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZC5cbiAgICogQG1lbWJlck9mIGx1bnIudXRpbHNcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBsdW5yLnV0aWxzLndhcm4gPSAoZnVuY3Rpb24gKGdsb2JhbCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGlmIChnbG9iYWwuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIH0pKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIG9iamVjdCB0byBhIHN0cmluZy5cbiAgICpcbiAgICogSW4gdGhlIGNhc2Ugb2YgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB0aGUgZnVuY3Rpb24gcmV0dXJuc1xuICAgKiB0aGUgZW1wdHkgc3RyaW5nLCBpbiBhbGwgb3RoZXIgY2FzZXMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nXG4gICAqIGB0b1N0cmluZ2Agb24gdGhlIHBhc3NlZCBvYmplY3QgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QW55fSBvYmogVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkIG9iamVjdC5cbiAgICogQG1lbWJlck9mIGx1bnIudXRpbHNcbiAgICovXG4gIGx1bnIudXRpbHMuYXNTdHJpbmcgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaiA9PT0gdm9pZCAwIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENsb25lcyBhbiBvYmplY3QuXG4gICAqXG4gICAqIFdpbGwgY3JlYXRlIGEgY29weSBvZiBhbiBleGlzdGluZyBvYmplY3Qgc3VjaCB0aGF0IGFueSBtdXRhdGlvbnNcbiAgICogb24gdGhlIGNvcHkgY2Fubm90IGFmZmVjdCB0aGUgb3JpZ2luYWwuXG4gICAqXG4gICAqIE9ubHkgc2hhbGxvdyBvYmplY3RzIGFyZSBzdXBwb3J0ZWQsIHBhc3NpbmcgYSBuZXN0ZWQgb2JqZWN0IHRvIHRoaXNcbiAgICogZnVuY3Rpb24gd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICpcbiAgICogT2JqZWN0cyB3aXRoIHByaW1pdGl2ZXMsIGFuZCBhcnJheXMgb2YgcHJpbWl0aXZlcyBhcmUgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAqIEByZXR1cm4ge09iamVjdH0gYSBjbG9uZSBvZiB0aGUgcGFzc2VkIG9iamVjdC5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSB3aGVuIGEgbmVzdGVkIG9iamVjdCBpcyBwYXNzZWQuXG4gICAqIEBtZW1iZXJPZiBVdGlsc1xuICAgKi9cbiAgbHVuci51dGlscy5jbG9uZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHZhciBjbG9uZSA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV0sXG4gICAgICAgIHZhbCA9IG9ialtrZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGNsb25lW2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgIHR5cGVvZiB2YWwgPT09IFwiYm9vbGVhblwiXG4gICAgICApIHtcbiAgICAgICAgY2xvbmVba2V5XSA9IHZhbDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiY2xvbmUgaXMgbm90IGRlZXAgYW5kIGRvZXMgbm90IHN1cHBvcnQgbmVzdGVkIG9iamVjdHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH07XG4gIGx1bnIuRmllbGRSZWYgPSBmdW5jdGlvbiAoZG9jUmVmLCBmaWVsZE5hbWUsIHN0cmluZ1ZhbHVlKSB7XG4gICAgdGhpcy5kb2NSZWYgPSBkb2NSZWY7XG4gICAgdGhpcy5maWVsZE5hbWUgPSBmaWVsZE5hbWU7XG4gICAgdGhpcy5fc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgfTtcblxuICBsdW5yLkZpZWxkUmVmLmpvaW5lciA9IFwiL1wiO1xuXG4gIGx1bnIuRmllbGRSZWYuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzKSB7XG4gICAgdmFyIG4gPSBzLmluZGV4T2YobHVuci5GaWVsZFJlZi5qb2luZXIpO1xuXG4gICAgaWYgKG4gPT09IC0xKSB7XG4gICAgICB0aHJvdyBcIm1hbGZvcm1lZCBmaWVsZCByZWYgc3RyaW5nXCI7XG4gICAgfVxuXG4gICAgdmFyIGZpZWxkUmVmID0gcy5zbGljZSgwLCBuKSxcbiAgICAgIGRvY1JlZiA9IHMuc2xpY2UobiArIDEpO1xuXG4gICAgcmV0dXJuIG5ldyBsdW5yLkZpZWxkUmVmKGRvY1JlZiwgZmllbGRSZWYsIHMpO1xuICB9O1xuXG4gIGx1bnIuRmllbGRSZWYucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9zdHJpbmdWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3N0cmluZ1ZhbHVlID0gdGhpcy5maWVsZE5hbWUgKyBsdW5yLkZpZWxkUmVmLmpvaW5lciArIHRoaXMuZG9jUmVmO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpbmdWYWx1ZTtcbiAgfTtcbiAgLyohXG4gICAqIGx1bnIuU2V0XG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEEgbHVuciBzZXQuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgbHVuci5TZXQgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHtcbiAgICB0aGlzLmVsZW1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmIChlbGVtZW50cykge1xuICAgICAgdGhpcy5sZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW2VsZW1lbnRzW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgY29tcGxldGUgc2V0IHRoYXQgY29udGFpbnMgYWxsIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7bHVuci5TZXR9XG4gICAqL1xuICBsdW5yLlNldC5jb21wbGV0ZSA9IHtcbiAgICBpbnRlcnNlY3Q6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0sXG5cbiAgICB1bmlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBBbiBlbXB0eSBzZXQgdGhhdCBjb250YWlucyBubyBlbGVtZW50cy5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2x1bnIuU2V0fVxuICAgKi9cbiAgbHVuci5TZXQuZW1wdHkgPSB7XG4gICAgaW50ZXJzZWN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgdW5pb246IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0sXG5cbiAgICBjb250YWluczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHNldCBjb250YWlucyB0aGUgc3BlY2lmaWVkIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIE9iamVjdCB3aG9zZSBwcmVzZW5jZSBpbiB0aGlzIHNldCBpcyB0byBiZSB0ZXN0ZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBvYmplY3QuXG4gICAqL1xuICBsdW5yLlNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuICEhdGhpcy5lbGVtZW50c1tvYmplY3RdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIHByZXNlbnQgaW4gYm90aFxuICAgKiB0aGlzIHNldCBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5TZXR9IG90aGVyIC0gc2V0IHRvIGludGVyc2VjdCB3aXRoIHRoaXMgc2V0LlxuICAgKiBAcmV0dXJucyB7bHVuci5TZXR9IGEgbmV3IHNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqL1xuXG4gIGx1bnIuU2V0LnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICB2YXIgYSxcbiAgICAgIGIsXG4gICAgICBlbGVtZW50cyxcbiAgICAgIGludGVyc2VjdGlvbiA9IFtdO1xuXG4gICAgaWYgKG90aGVyID09PSBsdW5yLlNldC5jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyID09PSBsdW5yLlNldC5lbXB0eSkge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA8IG90aGVyLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gb3RoZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBvdGhlcjtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGVsZW1lbnRzID0gT2JqZWN0LmtleXMoYS5lbGVtZW50cyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsZW1lbnQgaW4gYi5lbGVtZW50cykge1xuICAgICAgICBpbnRlcnNlY3Rpb24ucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGx1bnIuU2V0KGludGVyc2VjdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgc2V0IGNvbWJpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5TZXR9IG90aGVyIC0gc2V0IHRvIHVuaW9uIHdpdGggdGhpcyBzZXQuXG4gICAqIEByZXR1cm4ge2x1bnIuU2V0fSBhIG5ldyBzZXQgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqL1xuXG4gIGx1bnIuU2V0LnByb3RvdHlwZS51bmlvbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmIChvdGhlciA9PT0gbHVuci5TZXQuY29tcGxldGUpIHtcbiAgICAgIHJldHVybiBsdW5yLlNldC5jb21wbGV0ZTtcbiAgICB9XG5cbiAgICBpZiAob3RoZXIgPT09IGx1bnIuU2V0LmVtcHR5KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGx1bnIuU2V0KFxuICAgICAgT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuY29uY2F0KE9iamVjdC5rZXlzKG90aGVyLmVsZW1lbnRzKSlcbiAgICApO1xuICB9O1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGludmVyc2UgZG9jdW1lbnQgZnJlcXVlbmN5IGZvclxuICAgKiBhIHBvc3RpbmcuIFRoaXMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIGJ1aWxkZXIgYW5kIHRoZSBpbmRleFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcG9zdGluZyAtIFRoZSBwb3N0aW5nIGZvciBhIGdpdmVuIHRlcm1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRvY3VtZW50Q291bnQgLSBUaGUgdG90YWwgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICovXG4gIGx1bnIuaWRmID0gZnVuY3Rpb24gKHBvc3RpbmcsIGRvY3VtZW50Q291bnQpIHtcbiAgICB2YXIgZG9jdW1lbnRzV2l0aFRlcm0gPSAwO1xuXG4gICAgZm9yICh2YXIgZmllbGROYW1lIGluIHBvc3RpbmcpIHtcbiAgICAgIGlmIChmaWVsZE5hbWUgPT0gXCJfaW5kZXhcIikgY29udGludWU7IC8vIElnbm9yZSB0aGUgdGVybSBpbmRleCwgaXRzIG5vdCBhIGZpZWxkXG4gICAgICBkb2N1bWVudHNXaXRoVGVybSArPSBPYmplY3Qua2V5cyhwb3N0aW5nW2ZpZWxkTmFtZV0pLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgeCA9XG4gICAgICAoZG9jdW1lbnRDb3VudCAtIGRvY3VtZW50c1dpdGhUZXJtICsgMC41KSAvIChkb2N1bWVudHNXaXRoVGVybSArIDAuNSk7XG5cbiAgICByZXR1cm4gTWF0aC5sb2coMSArIE1hdGguYWJzKHgpKTtcbiAgfTtcblxuICAvKipcbiAgICogQSB0b2tlbiB3cmFwcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRva2VuXG4gICAqIGFzIGl0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZSB0ZXh0IHByb2Nlc3NpbmcgcGlwZWxpbmUuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cj0nJ10gLSBUaGUgc3RyaW5nIHRva2VuIGJlaW5nIHdyYXBwZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbbWV0YWRhdGE9e31dIC0gTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4uXG4gICAqL1xuICBsdW5yLlRva2VuID0gZnVuY3Rpb24gKHN0ciwgbWV0YWRhdGEpIHtcbiAgICB0aGlzLnN0ciA9IHN0ciB8fCBcIlwiO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YSB8fCB7fTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9rZW4gc3RyaW5nIHRoYXQgaXMgYmVpbmcgd3JhcHBlZCBieSB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGx1bnIuVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnN0cjtcbiAgfTtcblxuICAvKipcbiAgICogQSB0b2tlbiB1cGRhdGUgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHVwZGF0aW5nIG9yIG9wdGlvbmFsbHlcbiAgICogd2hlbiBjbG9uaW5nIGEgdG9rZW4uXG4gICAqXG4gICAqIEBjYWxsYmFjayBsdW5yLlRva2VufnVwZGF0ZUZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0b2tlbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gQWxsIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuLlxuICAgKi9cblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gdGhlIHdyYXBwZWQgc3RyaW5nIHRva2VuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0b2tlbi51cGRhdGUoZnVuY3Rpb24gKHN0ciwgbWV0YWRhdGEpIHtcbiAgICogICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKClcbiAgICogfSlcbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlRva2VufnVwZGF0ZUZ1bmN0aW9ufSBmbiAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gdGhlIHRva2VuIHN0cmluZy5cbiAgICogQHJldHVybnMge2x1bnIuVG9rZW59XG4gICAqL1xuICBsdW5yLlRva2VuLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLnN0ciA9IGZuKHRoaXMuc3RyLCB0aGlzLm1ldGFkYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgdG9rZW4uIE9wdGlvbmFsbHkgYSBmdW5jdGlvbiBjYW4gYmVcbiAgICogYXBwbGllZCB0byB0aGUgY2xvbmVkIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuVG9rZW5+dXBkYXRlRnVuY3Rpb259IFtmbl0gLSBBbiBvcHRpb25hbCBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgY2xvbmVkIHRva2VuLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlbn1cbiAgICovXG4gIGx1bnIuVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgZm4gPVxuICAgICAgZm4gfHxcbiAgICAgIGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfTtcbiAgICByZXR1cm4gbmV3IGx1bnIuVG9rZW4oZm4odGhpcy5zdHIsIHRoaXMubWV0YWRhdGEpLCB0aGlzLm1ldGFkYXRhKTtcbiAgfTtcbiAgLyohXG4gICAqIGx1bnIudG9rZW5pemVyXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gZm9yIHNwbGl0dGluZyBhIHN0cmluZyBpbnRvIHRva2VucyByZWFkeSB0byBiZSBpbnNlcnRlZCBpbnRvXG4gICAqIHRoZSBzZWFyY2ggaW5kZXguIFVzZXMgYGx1bnIudG9rZW5pemVyLnNlcGFyYXRvcmAgdG8gc3BsaXQgc3RyaW5ncywgY2hhbmdlXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSBob3cgc3RyaW5ncyBhcmUgc3BsaXQgaW50byB0b2tlbnMuXG4gICAqXG4gICAqIFRoaXMgdG9rZW5pemVyIHdpbGwgY29udmVydCBpdHMgcGFyYW1ldGVyIHRvIGEgc3RyaW5nIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYCBhbmRcbiAgICogdGhlbiB3aWxsIHNwbGl0IHRoaXMgc3RyaW5nIG9uIHRoZSBjaGFyYWN0ZXIgaW4gYGx1bnIudG9rZW5pemVyLnNlcGFyYXRvcmAuXG4gICAqIEFycmF5cyB3aWxsIGhhdmUgdGhlaXIgZWxlbWVudHMgY29udmVydGVkIHRvIHN0cmluZ3MgYW5kIHdyYXBwZWQgaW4gYSBsdW5yLlRva2VuLlxuICAgKlxuICAgKiBPcHRpb25hbCBtZXRhZGF0YSBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0b2tlbml6ZXIsIHRoaXMgbWV0YWRhdGEgd2lsbCBiZSBjbG9uZWQgYW5kXG4gICAqIGFkZGVkIGFzIG1ldGFkYXRhIHRvIGV2ZXJ5IHRva2VuIHRoYXQgaXMgY3JlYXRlZCBmcm9tIHRoZSBvYmplY3QgdG8gYmUgdG9rZW5pemVkLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7PyhzdHJpbmd8b2JqZWN0fG9iamVjdFtdKX0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IGludG8gdG9rZW5zXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWV0YWRhdGEgLSBPcHRpb25hbCBtZXRhZGF0YSB0byBhc3NvY2lhdGUgd2l0aCBldmVyeSB0b2tlblxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlbltdfVxuICAgKiBAc2VlIHtAbGluayBsdW5yLlBpcGVsaW5lfVxuICAgKi9cbiAgbHVuci50b2tlbml6ZXIgPSBmdW5jdGlvbiAob2JqLCBtZXRhZGF0YSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBsdW5yLlRva2VuKFxuICAgICAgICAgIGx1bnIudXRpbHMuYXNTdHJpbmcodCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBsdW5yLnV0aWxzLmNsb25lKG1ldGFkYXRhKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IG9iai50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoLFxuICAgICAgdG9rZW5zID0gW107XG5cbiAgICBmb3IgKHZhciBzbGljZUVuZCA9IDAsIHNsaWNlU3RhcnQgPSAwOyBzbGljZUVuZCA8PSBsZW47IHNsaWNlRW5kKyspIHtcbiAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJBdChzbGljZUVuZCksXG4gICAgICAgIHNsaWNlTGVuZ3RoID0gc2xpY2VFbmQgLSBzbGljZVN0YXJ0O1xuXG4gICAgICBpZiAoY2hhci5tYXRjaChsdW5yLnRva2VuaXplci5zZXBhcmF0b3IpIHx8IHNsaWNlRW5kID09IGxlbikge1xuICAgICAgICBpZiAoc2xpY2VMZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHRva2VuTWV0YWRhdGEgPSBsdW5yLnV0aWxzLmNsb25lKG1ldGFkYXRhKSB8fCB7fTtcbiAgICAgICAgICB0b2tlbk1ldGFkYXRhW1wicG9zaXRpb25cIl0gPSBbc2xpY2VTdGFydCwgc2xpY2VMZW5ndGhdO1xuICAgICAgICAgIHRva2VuTWV0YWRhdGFbXCJpbmRleFwiXSA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICAgICAgICB0b2tlbnMucHVzaChcbiAgICAgICAgICAgIG5ldyBsdW5yLlRva2VuKHN0ci5zbGljZShzbGljZVN0YXJ0LCBzbGljZUVuZCksIHRva2VuTWV0YWRhdGEpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNsaWNlU3RhcnQgPSBzbGljZUVuZCArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHNlcGFyYXRvciB1c2VkIHRvIHNwbGl0IGEgc3RyaW5nIGludG8gdG9rZW5zLiBPdmVycmlkZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mXG4gICAqIGBsdW5yLnRva2VuaXplcmAgYmVoYXZpb3VyIHdoZW4gdG9rZW5pemluZyBzdHJpbmdzLiBCeSBkZWZhdWx0IHRoaXMgc3BsaXRzIG9uIHdoaXRlc3BhY2UgYW5kIGh5cGhlbnMuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHNlZSBsdW5yLnRva2VuaXplclxuICAgKi9cbiAgbHVuci50b2tlbml6ZXIuc2VwYXJhdG9yID0gL1tcXHNcXC1dKy87XG4gIC8qIVxuICAgKiBsdW5yLlBpcGVsaW5lXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuUGlwZWxpbmVzIG1haW50YWluIGFuIG9yZGVyZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gYmUgYXBwbGllZCB0byBhbGxcbiAgICogdG9rZW5zIGluIGRvY3VtZW50cyBlbnRlcmluZyB0aGUgc2VhcmNoIGluZGV4IGFuZCBxdWVyaWVzIGJlaW5nIHJhbiBhZ2FpbnN0XG4gICAqIHRoZSBpbmRleC5cbiAgICpcbiAgICogQW4gaW5zdGFuY2Ugb2YgbHVuci5JbmRleCBjcmVhdGVkIHdpdGggdGhlIGx1bnIgc2hvcnRjdXQgd2lsbCBjb250YWluIGFcbiAgICogcGlwZWxpbmUgd2l0aCBhIHN0b3Agd29yZCBmaWx0ZXIgYW5kIGFuIEVuZ2xpc2ggbGFuZ3VhZ2Ugc3RlbW1lci4gRXh0cmFcbiAgICogZnVuY3Rpb25zIGNhbiBiZSBhZGRlZCBiZWZvcmUgb3IgYWZ0ZXIgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBvciB0aGVzZVxuICAgKiBkZWZhdWx0IGZ1bmN0aW9ucyBjYW4gYmUgcmVtb3ZlZC5cbiAgICpcbiAgICogV2hlbiBydW4gdGhlIHBpcGVsaW5lIHdpbGwgY2FsbCBlYWNoIGZ1bmN0aW9uIGluIHR1cm4sIHBhc3NpbmcgYSB0b2tlbiwgdGhlXG4gICAqIGluZGV4IG9mIHRoYXQgdG9rZW4gaW4gdGhlIG9yaWdpbmFsIGxpc3Qgb2YgYWxsIHRva2VucyBhbmQgZmluYWxseSBhIGxpc3Qgb2ZcbiAgICogYWxsIHRoZSBvcmlnaW5hbCB0b2tlbnMuXG4gICAqXG4gICAqIFRoZSBvdXRwdXQgb2YgZnVuY3Rpb25zIGluIHRoZSBwaXBlbGluZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbmV4dCBmdW5jdGlvblxuICAgKiBpbiB0aGUgcGlwZWxpbmUuIFRvIGV4Y2x1ZGUgYSB0b2tlbiBmcm9tIGVudGVyaW5nIHRoZSBpbmRleCB0aGUgZnVuY3Rpb25cbiAgICogc2hvdWxkIHJldHVybiB1bmRlZmluZWQsIHRoZSByZXN0IG9mIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBiZSBjYWxsZWQgd2l0aFxuICAgKiB0aGlzIHRva2VuLlxuICAgKlxuICAgKiBGb3Igc2VyaWFsaXNhdGlvbiBvZiBwaXBlbGluZXMgdG8gd29yaywgYWxsIGZ1bmN0aW9ucyB1c2VkIGluIGFuIGluc3RhbmNlIG9mXG4gICAqIGEgcGlwZWxpbmUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCBsdW5yLlBpcGVsaW5lLiBSZWdpc3RlcmVkIGZ1bmN0aW9ucyBjYW5cbiAgICogdGhlbiBiZSBsb2FkZWQuIElmIHRyeWluZyB0byBsb2FkIGEgc2VyaWFsaXNlZCBwaXBlbGluZSB0aGF0IHVzZXMgZnVuY3Rpb25zXG4gICAqIHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBJZiBub3QgcGxhbm5pbmcgb24gc2VyaWFsaXNpbmcgdGhlIHBpcGVsaW5lIHRoZW4gcmVnaXN0ZXJpbmcgcGlwZWxpbmUgZnVuY3Rpb25zXG4gICAqIGlzIG5vdCBuZWNlc3NhcnkuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgbHVuci5QaXBlbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdGFjayA9IFtdO1xuICB9O1xuXG4gIGx1bnIuUGlwZWxpbmUucmVnaXN0ZXJlZEZ1bmN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLyoqXG4gICAqIEEgcGlwZWxpbmUgZnVuY3Rpb24gbWFwcyBsdW5yLlRva2VuIHRvIGx1bnIuVG9rZW4uIEEgbHVuci5Ub2tlbiBjb250YWlucyB0aGUgdG9rZW5cbiAgICogc3RyaW5nIGFzIHdlbGwgYXMgYWxsIGtub3duIG1ldGFkYXRhLiBBIHBpcGVsaW5lIGZ1bmN0aW9uIGNhbiBtdXRhdGUgdGhlIHRva2VuIHN0cmluZ1xuICAgKiBvciBtdXRhdGUgKG9yIGFkZCkgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gdG9rZW4uXG4gICAqXG4gICAqIEEgcGlwZWxpbmUgZnVuY3Rpb24gY2FuIGluZGljYXRlIHRoYXQgdGhlIHBhc3NlZCB0b2tlbiBzaG91bGQgYmUgZGlzY2FyZGVkIGJ5IHJldHVybmluZ1xuICAgKiBudWxsLCB1bmRlZmluZWQgb3IgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIHRva2VuIHdpbGwgbm90IGJlIHBhc3NlZCB0byBhbnkgZG93bnN0cmVhbSBwaXBlbGluZVxuICAgKiBmdW5jdGlvbnMgYW5kIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBpbmRleC5cbiAgICpcbiAgICogTXVsdGlwbGUgdG9rZW5zIGNhbiBiZSByZXR1cm5lZCBieSByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdG9rZW5zLiBFYWNoIHRva2VuIHdpbGwgYmUgcGFzc2VkXG4gICAqIHRvIGFueSBkb3duc3RyZWFtIHBpcGVsaW5lIGZ1bmN0aW9ucyBhbmQgYWxsIHdpbGwgcmV0dXJuZWQgdG9rZW5zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGluZGV4LlxuICAgKlxuICAgKiBBbnkgbnVtYmVyIG9mIHBpcGVsaW5lIGZ1bmN0aW9ucyBtYXkgYmUgY2hhaW5lZCB0b2dldGhlciB1c2luZyBhIGx1bnIuUGlwZWxpbmUuXG4gICAqXG4gICAqIEBpbnRlcmZhY2UgbHVuci5QaXBlbGluZUZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7bHVuci5Ub2tlbn0gdG9rZW4gLSBBIHRva2VuIGZyb20gdGhlIGRvY3VtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgLSBUaGUgaW5kZXggb2YgdGhpcyB0b2tlbiBpbiB0aGUgY29tcGxldGUgbGlzdCBvZiB0b2tlbnMgZm9yIHRoaXMgZG9jdW1lbnQvZmllbGQuXG4gICAqIEBwYXJhbSB7bHVuci5Ub2tlbltdfSB0b2tlbnMgLSBBbGwgdG9rZW5zIGZvciB0aGlzIGRvY3VtZW50L2ZpZWxkLlxuICAgKiBAcmV0dXJucyB7KD9sdW5yLlRva2VufGx1bnIuVG9rZW5bXSl9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHdpdGggdGhlIHBpcGVsaW5lLlxuICAgKlxuICAgKiBGdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgcGlwZWxpbmUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaWYgdGhlIHBpcGVsaW5lXG4gICAqIG5lZWRzIHRvIGJlIHNlcmlhbGlzZWQsIG9yIGEgc2VyaWFsaXNlZCBwaXBlbGluZSBuZWVkcyB0byBiZSBsb2FkZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgZnVuY3Rpb24gZG9lcyBub3QgYWRkIGl0IHRvIGEgcGlwZWxpbmUsIGZ1bmN0aW9ucyBtdXN0IHN0aWxsIGJlXG4gICAqIGFkZGVkIHRvIGluc3RhbmNlcyBvZiB0aGUgcGlwZWxpbmUgZm9yIHRoZW0gdG8gYmUgdXNlZCB3aGVuIHJ1bm5pbmcgYSBwaXBlbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIGZvci5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIC0gVGhlIGxhYmVsIHRvIHJlZ2lzdGVyIHRoaXMgZnVuY3Rpb24gd2l0aFxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5yZWdpc3RlckZ1bmN0aW9uID0gZnVuY3Rpb24gKGZuLCBsYWJlbCkge1xuICAgIGlmIChsYWJlbCBpbiB0aGlzLnJlZ2lzdGVyZWRGdW5jdGlvbnMpIHtcbiAgICAgIGx1bnIudXRpbHMud2FybihcIk92ZXJ3cml0aW5nIGV4aXN0aW5nIHJlZ2lzdGVyZWQgZnVuY3Rpb246IFwiICsgbGFiZWwpO1xuICAgIH1cblxuICAgIGZuLmxhYmVsID0gbGFiZWw7XG4gICAgbHVuci5QaXBlbGluZS5yZWdpc3RlcmVkRnVuY3Rpb25zW2ZuLmxhYmVsXSA9IGZuO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IHJlZ2lzdGVyZWQgYXMgYSBQaXBlbGluZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIGZvci5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGx1bnIuUGlwZWxpbmUud2FybklmRnVuY3Rpb25Ob3RSZWdpc3RlcmVkID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIGlzUmVnaXN0ZXJlZCA9IGZuLmxhYmVsICYmIGZuLmxhYmVsIGluIHRoaXMucmVnaXN0ZXJlZEZ1bmN0aW9ucztcblxuICAgIGlmICghaXNSZWdpc3RlcmVkKSB7XG4gICAgICBsdW5yLnV0aWxzLndhcm4oXG4gICAgICAgIFwiRnVuY3Rpb24gaXMgbm90IHJlZ2lzdGVyZWQgd2l0aCBwaXBlbGluZS4gVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgd2hlbiBzZXJpYWxpc2luZyB0aGUgaW5kZXguXFxuXCIsXG4gICAgICAgIGZuXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTG9hZHMgYSBwcmV2aW91c2x5IHNlcmlhbGlzZWQgcGlwZWxpbmUuXG4gICAqXG4gICAqIEFsbCBmdW5jdGlvbnMgdG8gYmUgbG9hZGVkIG11c3QgYWxyZWFkeSBiZSByZWdpc3RlcmVkIHdpdGggbHVuci5QaXBlbGluZS5cbiAgICogSWYgYW55IGZ1bmN0aW9uIGZyb20gdGhlIHNlcmlhbGlzZWQgZGF0YSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCB0aGVuIGFuXG4gICAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2VyaWFsaXNlZCAtIFRoZSBzZXJpYWxpc2VkIHBpcGVsaW5lIHRvIGxvYWQuXG4gICAqIEByZXR1cm5zIHtsdW5yLlBpcGVsaW5lfVxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5sb2FkID0gZnVuY3Rpb24gKHNlcmlhbGlzZWQpIHtcbiAgICB2YXIgcGlwZWxpbmUgPSBuZXcgbHVuci5QaXBlbGluZSgpO1xuXG4gICAgc2VyaWFsaXNlZC5mb3JFYWNoKGZ1bmN0aW9uIChmbk5hbWUpIHtcbiAgICAgIHZhciBmbiA9IGx1bnIuUGlwZWxpbmUucmVnaXN0ZXJlZEZ1bmN0aW9uc1tmbk5hbWVdO1xuXG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgcGlwZWxpbmUuYWRkKGZuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIHVucmVnaXN0ZXJlZCBmdW5jdGlvbjogXCIgKyBmbk5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBpcGVsaW5lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGVuZCBvZiB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIExvZ3MgYSB3YXJuaW5nIGlmIHRoZSBmdW5jdGlvbiBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb25bXX0gZnVuY3Rpb25zIC0gQW55IG51bWJlciBvZiBmdW5jdGlvbnMgdG8gYWRkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZm5zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgbHVuci5QaXBlbGluZS53YXJuSWZGdW5jdGlvbk5vdFJlZ2lzdGVyZWQoZm4pO1xuICAgICAgdGhpcy5fc3RhY2sucHVzaChmbik7XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzaW5nbGUgZnVuY3Rpb24gYWZ0ZXIgYSBmdW5jdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZVxuICAgKiBwaXBlbGluZS5cbiAgICpcbiAgICogTG9ncyBhIHdhcm5pbmcgaWYgdGhlIGZ1bmN0aW9uIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn0gZXhpc3RpbmdGbiAtIEEgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSB7bHVuci5QaXBlbGluZUZ1bmN0aW9ufSBuZXdGbiAtIFRoZSBuZXcgZnVuY3Rpb24gdG8gYWRkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLmFmdGVyID0gZnVuY3Rpb24gKGV4aXN0aW5nRm4sIG5ld0ZuKSB7XG4gICAgbHVuci5QaXBlbGluZS53YXJuSWZGdW5jdGlvbk5vdFJlZ2lzdGVyZWQobmV3Rm4pO1xuXG4gICAgdmFyIHBvcyA9IHRoaXMuX3N0YWNrLmluZGV4T2YoZXhpc3RpbmdGbik7XG4gICAgaWYgKHBvcyA9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgZXhpc3RpbmdGblwiKTtcbiAgICB9XG5cbiAgICBwb3MgPSBwb3MgKyAxO1xuICAgIHRoaXMuX3N0YWNrLnNwbGljZShwb3MsIDAsIG5ld0ZuKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHNpbmdsZSBmdW5jdGlvbiBiZWZvcmUgYSBmdW5jdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZVxuICAgKiBwaXBlbGluZS5cbiAgICpcbiAgICogTG9ncyBhIHdhcm5pbmcgaWYgdGhlIGZ1bmN0aW9uIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn0gZXhpc3RpbmdGbiAtIEEgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSB7bHVuci5QaXBlbGluZUZ1bmN0aW9ufSBuZXdGbiAtIFRoZSBuZXcgZnVuY3Rpb24gdG8gYWRkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLmJlZm9yZSA9IGZ1bmN0aW9uIChleGlzdGluZ0ZuLCBuZXdGbikge1xuICAgIGx1bnIuUGlwZWxpbmUud2FybklmRnVuY3Rpb25Ob3RSZWdpc3RlcmVkKG5ld0ZuKTtcblxuICAgIHZhciBwb3MgPSB0aGlzLl9zdGFjay5pbmRleE9mKGV4aXN0aW5nRm4pO1xuICAgIGlmIChwb3MgPT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIGV4aXN0aW5nRm5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2suc3BsaWNlKHBvcywgMCwgbmV3Rm4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZnVuY3Rpb24gZnJvbSB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5QaXBlbGluZUZ1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHBvcyA9IHRoaXMuX3N0YWNrLmluZGV4T2YoZm4pO1xuICAgIGlmIChwb3MgPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGFjay5zcGxpY2UocG9zLCAxKTtcbiAgfTtcblxuICAvKipcbiAgICogUnVucyB0aGUgY3VycmVudCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IG1ha2UgdXAgdGhlIHBpcGVsaW5lIGFnYWluc3QgdGhlXG4gICAqIHBhc3NlZCB0b2tlbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHRva2VucyBUaGUgdG9rZW5zIHRvIHJ1biB0aHJvdWdoIHRoZSBwaXBlbGluZS5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKHRva2Vucykge1xuICAgIHZhciBzdGFja0xlbmd0aCA9IHRoaXMuX3N0YWNrLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2tMZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZuID0gdGhpcy5fc3RhY2tbaV07XG4gICAgICB2YXIgbWVtbyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZm4odG9rZW5zW2pdLCBqLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgfHwgcmVzdWx0ID09PSBcIlwiKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZXN1bHQubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG1lbW8ucHVzaChyZXN1bHRba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZW1vLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0b2tlbnMgPSBtZW1vO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgcGFzc2luZyBhIHN0cmluZyB0aHJvdWdoIGEgcGlwZWxpbmUgYW5kIGdldHRpbmdcbiAgICogc3RyaW5ncyBvdXQuIFRoaXMgbWV0aG9kIHRha2VzIGNhcmUgb2Ygd3JhcHBpbmcgdGhlIHBhc3NlZCBzdHJpbmcgaW4gYVxuICAgKiB0b2tlbiBhbmQgbWFwcGluZyB0aGUgcmVzdWx0aW5nIHRva2VucyBiYWNrIHRvIHN0cmluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHBhc3MgdGhyb3VnaCB0aGUgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWV0YWRhdGEgLSBPcHRpb25hbCBtZXRhZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdG9rZW5cbiAgICogcGFzc2VkIHRvIHRoZSBwaXBlbGluZS5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5wcm90b3R5cGUucnVuU3RyaW5nID0gZnVuY3Rpb24gKHN0ciwgbWV0YWRhdGEpIHtcbiAgICB2YXIgdG9rZW4gPSBuZXcgbHVuci5Ub2tlbihzdHIsIG1ldGFkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLnJ1bihbdG9rZW5dKS5tYXAoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgcGlwZWxpbmUgYnkgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIHByb2Nlc3NvcnMuXG4gICAqXG4gICAqL1xuICBsdW5yLlBpcGVsaW5lLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdGFjayA9IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBpcGVsaW5lIHJlYWR5IGZvciBzZXJpYWxpc2F0aW9uLlxuICAgKlxuICAgKiBMb2dzIGEgd2FybmluZyBpZiB0aGUgZnVuY3Rpb24gaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2subWFwKGZ1bmN0aW9uIChmbikge1xuICAgICAgbHVuci5QaXBlbGluZS53YXJuSWZGdW5jdGlvbk5vdFJlZ2lzdGVyZWQoZm4pO1xuXG4gICAgICByZXR1cm4gZm4ubGFiZWw7XG4gICAgfSk7XG4gIH07XG4gIC8qIVxuICAgKiBsdW5yLlZlY3RvclxuICAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgT2xpdmVyIE5pZ2h0aW5nYWxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBIHZlY3RvciBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgdmVjdG9yIHNwYWNlIG9mIGRvY3VtZW50cyBhbmQgcXVlcmllcy4gVGhlc2VcbiAgICogdmVjdG9ycyBzdXBwb3J0IG9wZXJhdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gdHdvIGRvY3VtZW50cyBvclxuICAgKiBhIGRvY3VtZW50IGFuZCBhIHF1ZXJ5LlxuICAgKlxuICAgKiBOb3JtYWxseSBubyBwYXJhbWV0ZXJzIGFyZSByZXF1aXJlZCBmb3IgaW5pdGlhbGl6aW5nIGEgdmVjdG9yLCBidXQgaW4gdGhlIGNhc2Ugb2ZcbiAgICogbG9hZGluZyBhIHByZXZpb3VzbHkgZHVtcGVkIHZlY3RvciB0aGUgcmF3IGVsZW1lbnRzIGNhbiBiZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zIHZlY3RvcnMgYXJlIGltcGxlbWVudGVkIHdpdGggYSBmbGF0IGFycmF5LCB3aGVyZSBhbiBlbGVtZW50c1xuICAgKiBpbmRleCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBpdHMgdmFsdWUuIEUuZy4gW2luZGV4LCB2YWx1ZSwgaW5kZXgsIHZhbHVlXS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIHVuZGVybHlpbmcgYXJyYXkgdG8gYmUgYXMgc3BhcnNlIGFzIHBvc3NpYmxlIGFuZCBzdGlsbCBvZmZlciBkZWNlbnRcbiAgICogcGVyZm9ybWFuY2Ugd2hlbiBiZWluZyB1c2VkIGZvciB2ZWN0b3IgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gW2VsZW1lbnRzXSAtIFRoZSBmbGF0IGxpc3Qgb2YgZWxlbWVudCBpbmRleCBhbmQgZWxlbWVudCB2YWx1ZSBwYWlycy5cbiAgICovXG4gIGx1bnIuVmVjdG9yID0gZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgdGhpcy5fbWFnbml0dWRlID0gMDtcbiAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHMgfHwgW107XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgdmVjdG9yIHRvIGluc2VydCBhIGdpdmVuIGluZGV4LlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBpbnNlcnQgYW5kIHVwc2VydC4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBpbmRleGVzIHRoZW5cbiAgICogdGhlIHBvc2l0aW9uIGlzIHJldHVybmVkIGFzIGlmIHRoZSB2YWx1ZSBmb3IgdGhhdCBpbmRleCB3ZXJlIHRvIGJlIHVwZGF0ZWQsIGJ1dCBpdFxuICAgKiBpcyB0aGUgY2FsbGVycyByZXNwb25zaWJpbGl0eSB0byBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgZHVwbGljYXRlIGF0IHRoYXQgaW5kZXhcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGluc2VydElkeCAtIFRoZSBpbmRleCBhdCB3aGljaCB0aGUgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQuXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqL1xuICBsdW5yLlZlY3Rvci5wcm90b3R5cGUucG9zaXRpb25Gb3JJbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIC8vIEZvciBhbiBlbXB0eSB2ZWN0b3IgdGhlIHR1cGxlIGNhbiBiZSBpbnNlcnRlZCBhdCB0aGUgYmVnaW5uaW5nXG4gICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IDAsXG4gICAgICBlbmQgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAvIDIsXG4gICAgICBzbGljZUxlbmd0aCA9IGVuZCAtIHN0YXJ0LFxuICAgICAgcGl2b3RQb2ludCA9IE1hdGguZmxvb3Ioc2xpY2VMZW5ndGggLyAyKSxcbiAgICAgIHBpdm90SW5kZXggPSB0aGlzLmVsZW1lbnRzW3Bpdm90UG9pbnQgKiAyXTtcblxuICAgIHdoaWxlIChzbGljZUxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChwaXZvdEluZGV4IDwgaW5kZXgpIHtcbiAgICAgICAgc3RhcnQgPSBwaXZvdFBvaW50O1xuICAgICAgfVxuXG4gICAgICBpZiAocGl2b3RJbmRleCA+IGluZGV4KSB7XG4gICAgICAgIGVuZCA9IHBpdm90UG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwaXZvdEluZGV4ID09IGluZGV4KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzbGljZUxlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgcGl2b3RQb2ludCA9IHN0YXJ0ICsgTWF0aC5mbG9vcihzbGljZUxlbmd0aCAvIDIpO1xuICAgICAgcGl2b3RJbmRleCA9IHRoaXMuZWxlbWVudHNbcGl2b3RQb2ludCAqIDJdO1xuICAgIH1cblxuICAgIGlmIChwaXZvdEluZGV4ID09IGluZGV4KSB7XG4gICAgICByZXR1cm4gcGl2b3RQb2ludCAqIDI7XG4gICAgfVxuXG4gICAgaWYgKHBpdm90SW5kZXggPiBpbmRleCkge1xuICAgICAgcmV0dXJuIHBpdm90UG9pbnQgKiAyO1xuICAgIH1cblxuICAgIGlmIChwaXZvdEluZGV4IDwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAocGl2b3RQb2ludCArIDEpICogMjtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYW4gZWxlbWVudCBhdCBhbiBpbmRleCB3aXRoaW4gdGhlIHZlY3Rvci5cbiAgICpcbiAgICogRG9lcyBub3QgYWxsb3cgZHVwbGljYXRlcywgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVudHJ5XG4gICAqIGZvciB0aGlzIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaW5zZXJ0SWR4IC0gVGhlIGluZGV4IGF0IHdoaWNoIHRoZSBlbGVtZW50IHNob3VsZCBiZSBpbnNlcnRlZC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbCAtIFRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSB2ZWN0b3IuXG4gICAqL1xuICBsdW5yLlZlY3Rvci5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKGluc2VydElkeCwgdmFsKSB7XG4gICAgdGhpcy51cHNlcnQoaW5zZXJ0SWR4LCB2YWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IFwiZHVwbGljYXRlIGluZGV4XCI7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluc2VydHMgb3IgdXBkYXRlcyBhbiBleGlzdGluZyBpbmRleCB3aXRoaW4gdGhlIHZlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGluc2VydElkeCAtIFRoZSBpbmRleCBhdCB3aGljaCB0aGUgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWwgLSBUaGUgdmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgdmVjdG9yLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIHVwZGF0ZXMsIHRoZSBleGlzdGluZyB2YWx1ZSBhbmQgdGhlXG4gICAqIHJlcXVlc3RlZCB2YWx1ZSBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50c1xuICAgKi9cbiAgbHVuci5WZWN0b3IucHJvdG90eXBlLnVwc2VydCA9IGZ1bmN0aW9uIChpbnNlcnRJZHgsIHZhbCwgZm4pIHtcbiAgICB0aGlzLl9tYWduaXR1ZGUgPSAwO1xuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25Gb3JJbmRleChpbnNlcnRJZHgpO1xuXG4gICAgaWYgKHRoaXMuZWxlbWVudHNbcG9zaXRpb25dID09IGluc2VydElkeCkge1xuICAgICAgdGhpcy5lbGVtZW50c1twb3NpdGlvbiArIDFdID0gZm4odGhpcy5lbGVtZW50c1twb3NpdGlvbiArIDFdLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShwb3NpdGlvbiwgMCwgaW5zZXJ0SWR4LCB2YWwpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbWFnbml0dWRlIG9mIHRoaXMgdmVjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TnVtYmVyfVxuICAgKi9cbiAgbHVuci5WZWN0b3IucHJvdG90eXBlLm1hZ25pdHVkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fbWFnbml0dWRlKSByZXR1cm4gdGhpcy5fbWFnbml0dWRlO1xuXG4gICAgdmFyIHN1bU9mU3F1YXJlcyA9IDAsXG4gICAgICBlbGVtZW50c0xlbmd0aCA9IHRoaXMuZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBlbGVtZW50c0xlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgdmFsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHN1bU9mU3F1YXJlcyArPSB2YWwgKiB2YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLl9tYWduaXR1ZGUgPSBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHRoaXMgdmVjdG9yIGFuZCBhbm90aGVyIHZlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlZlY3Rvcn0gb3RoZXJWZWN0b3IgLSBUaGUgdmVjdG9yIHRvIGNvbXB1dGUgdGhlIGRvdCBwcm9kdWN0IHdpdGguXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqL1xuICBsdW5yLlZlY3Rvci5wcm90b3R5cGUuZG90ID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7XG4gICAgdmFyIGRvdFByb2R1Y3QgPSAwLFxuICAgICAgYSA9IHRoaXMuZWxlbWVudHMsXG4gICAgICBiID0gb3RoZXJWZWN0b3IuZWxlbWVudHMsXG4gICAgICBhTGVuID0gYS5sZW5ndGgsXG4gICAgICBiTGVuID0gYi5sZW5ndGgsXG4gICAgICBhVmFsID0gMCxcbiAgICAgIGJWYWwgPSAwLFxuICAgICAgaSA9IDAsXG4gICAgICBqID0gMDtcblxuICAgIHdoaWxlIChpIDwgYUxlbiAmJiBqIDwgYkxlbikge1xuICAgICAgKGFWYWwgPSBhW2ldKSwgKGJWYWwgPSBiW2pdKTtcbiAgICAgIGlmIChhVmFsIDwgYlZhbCkge1xuICAgICAgICBpICs9IDI7XG4gICAgICB9IGVsc2UgaWYgKGFWYWwgPiBiVmFsKSB7XG4gICAgICAgIGogKz0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYVZhbCA9PSBiVmFsKSB7XG4gICAgICAgIGRvdFByb2R1Y3QgKz0gYVtpICsgMV0gKiBiW2ogKyAxXTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBqICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvdFByb2R1Y3Q7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIHZlY3RvciBhbmQgYW5vdGhlciB2ZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5WZWN0b3J9IG90aGVyVmVjdG9yIC0gVGhlIG90aGVyIHZlY3RvciB0byBjYWxjdWxhdGUgdGhlXG4gICAqIHNpbWlsYXJpdHkgd2l0aC5cbiAgICogQHJldHVybnMge051bWJlcn1cbiAgICovXG4gIGx1bnIuVmVjdG9yLnByb3RvdHlwZS5zaW1pbGFyaXR5ID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZG90KG90aGVyVmVjdG9yKSAvIHRoaXMubWFnbml0dWRlKCkgfHwgMDtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHZlY3RvciB0byBhbiBhcnJheSBvZiB0aGUgZWxlbWVudHMgd2l0aGluIHRoZSB2ZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJbXX1cbiAgICovXG4gIGx1bnIuVmVjdG9yLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvdXRwdXQgPSBuZXcgQXJyYXkodGhpcy5lbGVtZW50cy5sZW5ndGggLyAyKTtcblxuICAgIGZvciAodmFyIGkgPSAxLCBqID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICs9IDIsIGorKykge1xuICAgICAgb3V0cHV0W2pdID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIEpTT04gc2VyaWFsaXphYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJbXX1cbiAgICovXG4gIGx1bnIuVmVjdG9yLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHM7XG4gIH07XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIVxuICAgKiBsdW5yLnN0ZW1tZXJcbiAgICogQ29weXJpZ2h0IChDKSAyMDIwIE9saXZlciBOaWdodGluZ2FsZVxuICAgKiBJbmNsdWRlcyBjb2RlIGZyb20gLSBodHRwOi8vdGFydGFydXMub3JnL35tYXJ0aW4vUG9ydGVyU3RlbW1lci9qcy50eHRcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuc3RlbW1lciBpcyBhbiBlbmdsaXNoIGxhbmd1YWdlIHN0ZW1tZXIsIHRoaXMgaXMgYSBKYXZhU2NyaXB0XG4gICAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0ZXJTdGVtbWVyIHRha2VuIGZyb20gaHR0cDovL3RhcnRhcnVzLm9yZy9+bWFydGluXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQGltcGxlbWVudHMge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn1cbiAgICogQHBhcmFtIHtsdW5yLlRva2VufSB0b2tlbiAtIFRoZSBzdHJpbmcgdG8gc3RlbVxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlbn1cbiAgICogQHNlZSB7QGxpbmsgbHVuci5QaXBlbGluZX1cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBsdW5yLnN0ZW1tZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGVwMmxpc3QgPSB7XG4gICAgICAgIGF0aW9uYWw6IFwiYXRlXCIsXG4gICAgICAgIHRpb25hbDogXCJ0aW9uXCIsXG4gICAgICAgIGVuY2k6IFwiZW5jZVwiLFxuICAgICAgICBhbmNpOiBcImFuY2VcIixcbiAgICAgICAgaXplcjogXCJpemVcIixcbiAgICAgICAgYmxpOiBcImJsZVwiLFxuICAgICAgICBhbGxpOiBcImFsXCIsXG4gICAgICAgIGVudGxpOiBcImVudFwiLFxuICAgICAgICBlbGk6IFwiZVwiLFxuICAgICAgICBvdXNsaTogXCJvdXNcIixcbiAgICAgICAgaXphdGlvbjogXCJpemVcIixcbiAgICAgICAgYXRpb246IFwiYXRlXCIsXG4gICAgICAgIGF0b3I6IFwiYXRlXCIsXG4gICAgICAgIGFsaXNtOiBcImFsXCIsXG4gICAgICAgIGl2ZW5lc3M6IFwiaXZlXCIsXG4gICAgICAgIGZ1bG5lc3M6IFwiZnVsXCIsXG4gICAgICAgIG91c25lc3M6IFwib3VzXCIsXG4gICAgICAgIGFsaXRpOiBcImFsXCIsXG4gICAgICAgIGl2aXRpOiBcIml2ZVwiLFxuICAgICAgICBiaWxpdGk6IFwiYmxlXCIsXG4gICAgICAgIGxvZ2k6IFwibG9nXCIsXG4gICAgICB9LFxuICAgICAgc3RlcDNsaXN0ID0ge1xuICAgICAgICBpY2F0ZTogXCJpY1wiLFxuICAgICAgICBhdGl2ZTogXCJcIixcbiAgICAgICAgYWxpemU6IFwiYWxcIixcbiAgICAgICAgaWNpdGk6IFwiaWNcIixcbiAgICAgICAgaWNhbDogXCJpY1wiLFxuICAgICAgICBmdWw6IFwiXCIsXG4gICAgICAgIG5lc3M6IFwiXCIsXG4gICAgICB9LFxuICAgICAgYyA9IFwiW15hZWlvdV1cIiwgLy8gY29uc29uYW50XG4gICAgICB2ID0gXCJbYWVpb3V5XVwiLCAvLyB2b3dlbFxuICAgICAgQyA9IGMgKyBcIlteYWVpb3V5XSpcIiwgLy8gY29uc29uYW50IHNlcXVlbmNlXG4gICAgICBWID0gdiArIFwiW2FlaW91XSpcIiwgLy8gdm93ZWwgc2VxdWVuY2VcbiAgICAgIG1ncjAgPSBcIl4oXCIgKyBDICsgXCIpP1wiICsgViArIEMsIC8vIFtDXVZDLi4uIGlzIG0+MFxuICAgICAgbWVxMSA9IFwiXihcIiArIEMgKyBcIik/XCIgKyBWICsgQyArIFwiKFwiICsgViArIFwiKT8kXCIsIC8vIFtDXVZDW1ZdIGlzIG09MVxuICAgICAgbWdyMSA9IFwiXihcIiArIEMgKyBcIik/XCIgKyBWICsgQyArIFYgKyBDLCAvLyBbQ11WQ1ZDLi4uIGlzIG0+MVxuICAgICAgc192ID0gXCJeKFwiICsgQyArIFwiKT9cIiArIHY7IC8vIHZvd2VsIGluIHN0ZW1cblxuICAgIHZhciByZV9tZ3IwID0gbmV3IFJlZ0V4cChtZ3IwKTtcbiAgICB2YXIgcmVfbWdyMSA9IG5ldyBSZWdFeHAobWdyMSk7XG4gICAgdmFyIHJlX21lcTEgPSBuZXcgUmVnRXhwKG1lcTEpO1xuICAgIHZhciByZV9zX3YgPSBuZXcgUmVnRXhwKHNfdik7XG5cbiAgICB2YXIgcmVfMWEgPSAvXiguKz8pKHNzfGkpZXMkLztcbiAgICB2YXIgcmUyXzFhID0gL14oLis/KShbXnNdKXMkLztcbiAgICB2YXIgcmVfMWIgPSAvXiguKz8pZWVkJC87XG4gICAgdmFyIHJlMl8xYiA9IC9eKC4rPykoZWR8aW5nKSQvO1xuICAgIHZhciByZV8xYl8yID0gLy4kLztcbiAgICB2YXIgcmUyXzFiXzIgPSAvKGF0fGJsfGl6KSQvO1xuICAgIHZhciByZTNfMWJfMiA9IG5ldyBSZWdFeHAoXCIoW15hZWlvdXlsc3pdKVxcXFwxJFwiKTtcbiAgICB2YXIgcmU0XzFiXzIgPSBuZXcgUmVnRXhwKFwiXlwiICsgQyArIHYgKyBcIlteYWVpb3V3eHldJFwiKTtcblxuICAgIHZhciByZV8xYyA9IC9eKC4rP1teYWVpb3VdKXkkLztcbiAgICB2YXIgcmVfMiA9XG4gICAgICAvXiguKz8pKGF0aW9uYWx8dGlvbmFsfGVuY2l8YW5jaXxpemVyfGJsaXxhbGxpfGVudGxpfGVsaXxvdXNsaXxpemF0aW9ufGF0aW9ufGF0b3J8YWxpc218aXZlbmVzc3xmdWxuZXNzfG91c25lc3N8YWxpdGl8aXZpdGl8YmlsaXRpfGxvZ2kpJC87XG5cbiAgICB2YXIgcmVfMyA9IC9eKC4rPykoaWNhdGV8YXRpdmV8YWxpemV8aWNpdGl8aWNhbHxmdWx8bmVzcykkLztcblxuICAgIHZhciByZV80ID1cbiAgICAgIC9eKC4rPykoYWx8YW5jZXxlbmNlfGVyfGljfGFibGV8aWJsZXxhbnR8ZW1lbnR8bWVudHxlbnR8b3V8aXNtfGF0ZXxpdGl8b3VzfGl2ZXxpemUpJC87XG4gICAgdmFyIHJlMl80ID0gL14oLis/KShzfHQpKGlvbikkLztcblxuICAgIHZhciByZV81ID0gL14oLis/KWUkLztcbiAgICB2YXIgcmVfNV8xID0gL2xsJC87XG4gICAgdmFyIHJlM181ID0gbmV3IFJlZ0V4cChcIl5cIiArIEMgKyB2ICsgXCJbXmFlaW91d3h5XSRcIik7XG5cbiAgICB2YXIgcG9ydGVyU3RlbW1lciA9IGZ1bmN0aW9uIHBvcnRlclN0ZW1tZXIodykge1xuICAgICAgdmFyIHN0ZW0sIHN1ZmZpeCwgZmlyc3RjaCwgcmUsIHJlMiwgcmUzLCByZTQ7XG5cbiAgICAgIGlmICh3Lmxlbmd0aCA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHc7XG4gICAgICB9XG5cbiAgICAgIGZpcnN0Y2ggPSB3LnN1YnN0cigwLCAxKTtcbiAgICAgIGlmIChmaXJzdGNoID09IFwieVwiKSB7XG4gICAgICAgIHcgPSBmaXJzdGNoLnRvVXBwZXJDYXNlKCkgKyB3LnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAxYVxuICAgICAgcmUgPSByZV8xYTtcbiAgICAgIHJlMiA9IHJlMl8xYTtcblxuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdyA9IHcucmVwbGFjZShyZSwgXCIkMSQyXCIpO1xuICAgICAgfSBlbHNlIGlmIChyZTIudGVzdCh3KSkge1xuICAgICAgICB3ID0gdy5yZXBsYWNlKHJlMiwgXCIkMSQyXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDFiXG4gICAgICByZSA9IHJlXzFiO1xuICAgICAgcmUyID0gcmUyXzFiO1xuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUuZXhlYyh3KTtcbiAgICAgICAgcmUgPSByZV9tZ3IwO1xuICAgICAgICBpZiAocmUudGVzdChmcFsxXSkpIHtcbiAgICAgICAgICByZSA9IHJlXzFiXzI7XG4gICAgICAgICAgdyA9IHcucmVwbGFjZShyZSwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmUyLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUyLmV4ZWModyk7XG4gICAgICAgIHN0ZW0gPSBmcFsxXTtcbiAgICAgICAgcmUyID0gcmVfc192O1xuICAgICAgICBpZiAocmUyLnRlc3Qoc3RlbSkpIHtcbiAgICAgICAgICB3ID0gc3RlbTtcbiAgICAgICAgICByZTIgPSByZTJfMWJfMjtcbiAgICAgICAgICByZTMgPSByZTNfMWJfMjtcbiAgICAgICAgICByZTQgPSByZTRfMWJfMjtcbiAgICAgICAgICBpZiAocmUyLnRlc3QodykpIHtcbiAgICAgICAgICAgIHcgPSB3ICsgXCJlXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZTMudGVzdCh3KSkge1xuICAgICAgICAgICAgcmUgPSByZV8xYl8yO1xuICAgICAgICAgICAgdyA9IHcucmVwbGFjZShyZSwgXCJcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZTQudGVzdCh3KSkge1xuICAgICAgICAgICAgdyA9IHcgKyBcImVcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAxYyAtIHJlcGxhY2Ugc3VmZml4IHkgb3IgWSBieSBpIGlmIHByZWNlZGVkIGJ5IGEgbm9uLXZvd2VsIHdoaWNoIGlzIG5vdCB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSB3b3JkIChzbyBjcnkgLT4gY3JpLCBieSAtPiBieSwgc2F5IC0+IHNheSlcbiAgICAgIHJlID0gcmVfMWM7XG4gICAgICBpZiAocmUudGVzdCh3KSkge1xuICAgICAgICB2YXIgZnAgPSByZS5leGVjKHcpO1xuICAgICAgICBzdGVtID0gZnBbMV07XG4gICAgICAgIHcgPSBzdGVtICsgXCJpXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0ZXAgMlxuICAgICAgcmUgPSByZV8yO1xuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUuZXhlYyh3KTtcbiAgICAgICAgc3RlbSA9IGZwWzFdO1xuICAgICAgICBzdWZmaXggPSBmcFsyXTtcbiAgICAgICAgcmUgPSByZV9tZ3IwO1xuICAgICAgICBpZiAocmUudGVzdChzdGVtKSkge1xuICAgICAgICAgIHcgPSBzdGVtICsgc3RlcDJsaXN0W3N1ZmZpeF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAzXG4gICAgICByZSA9IHJlXzM7XG4gICAgICBpZiAocmUudGVzdCh3KSkge1xuICAgICAgICB2YXIgZnAgPSByZS5leGVjKHcpO1xuICAgICAgICBzdGVtID0gZnBbMV07XG4gICAgICAgIHN1ZmZpeCA9IGZwWzJdO1xuICAgICAgICByZSA9IHJlX21ncjA7XG4gICAgICAgIGlmIChyZS50ZXN0KHN0ZW0pKSB7XG4gICAgICAgICAgdyA9IHN0ZW0gKyBzdGVwM2xpc3Rbc3VmZml4XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDRcbiAgICAgIHJlID0gcmVfNDtcbiAgICAgIHJlMiA9IHJlMl80O1xuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUuZXhlYyh3KTtcbiAgICAgICAgc3RlbSA9IGZwWzFdO1xuICAgICAgICByZSA9IHJlX21ncjE7XG4gICAgICAgIGlmIChyZS50ZXN0KHN0ZW0pKSB7XG4gICAgICAgICAgdyA9IHN0ZW07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmUyLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUyLmV4ZWModyk7XG4gICAgICAgIHN0ZW0gPSBmcFsxXSArIGZwWzJdO1xuICAgICAgICByZTIgPSByZV9tZ3IxO1xuICAgICAgICBpZiAocmUyLnRlc3Qoc3RlbSkpIHtcbiAgICAgICAgICB3ID0gc3RlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDVcbiAgICAgIHJlID0gcmVfNTtcbiAgICAgIGlmIChyZS50ZXN0KHcpKSB7XG4gICAgICAgIHZhciBmcCA9IHJlLmV4ZWModyk7XG4gICAgICAgIHN0ZW0gPSBmcFsxXTtcbiAgICAgICAgcmUgPSByZV9tZ3IxO1xuICAgICAgICByZTIgPSByZV9tZXExO1xuICAgICAgICByZTMgPSByZTNfNTtcbiAgICAgICAgaWYgKHJlLnRlc3Qoc3RlbSkgfHwgKHJlMi50ZXN0KHN0ZW0pICYmICFyZTMudGVzdChzdGVtKSkpIHtcbiAgICAgICAgICB3ID0gc3RlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZSA9IHJlXzVfMTtcbiAgICAgIHJlMiA9IHJlX21ncjE7XG4gICAgICBpZiAocmUudGVzdCh3KSAmJiByZTIudGVzdCh3KSkge1xuICAgICAgICByZSA9IHJlXzFiXzI7XG4gICAgICAgIHcgPSB3LnJlcGxhY2UocmUsIFwiXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBhbmQgdHVybiBpbml0aWFsIFkgYmFjayB0byB5XG5cbiAgICAgIGlmIChmaXJzdGNoID09IFwieVwiKSB7XG4gICAgICAgIHcgPSBmaXJzdGNoLnRvTG93ZXJDYXNlKCkgKyB3LnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHc7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgIHJldHVybiB0b2tlbi51cGRhdGUocG9ydGVyU3RlbW1lcik7XG4gICAgfTtcbiAgfSkoKTtcblxuICBsdW5yLlBpcGVsaW5lLnJlZ2lzdGVyRnVuY3Rpb24obHVuci5zdGVtbWVyLCBcInN0ZW1tZXJcIik7XG4gIC8qIVxuICAgKiBsdW5yLnN0b3BXb3JkRmlsdGVyXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuZ2VuZXJhdGVTdG9wV29yZEZpbHRlciBidWlsZHMgYSBzdG9wV29yZEZpbHRlciBmdW5jdGlvbiBmcm9tIHRoZSBwcm92aWRlZFxuICAgKiBsaXN0IG9mIHN0b3Agd29yZHMuXG4gICAqXG4gICAqIFRoZSBidWlsdCBpbiBsdW5yLnN0b3BXb3JkRmlsdGVyIGlzIGJ1aWx0IHVzaW5nIHRoaXMgZ2VuZXJhdG9yIGFuZCBjYW4gYmUgdXNlZFxuICAgKiB0byBnZW5lcmF0ZSBjdXN0b20gc3RvcFdvcmRGaWx0ZXJzIGZvciBhcHBsaWNhdGlvbnMgb3Igbm9uIEVuZ2xpc2ggbGFuZ3VhZ2VzLlxuICAgKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheX0gdG9rZW4gVGhlIHRva2VuIHRvIHBhc3MgdGhyb3VnaCB0aGUgZmlsdGVyXG4gICAqIEByZXR1cm5zIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb259XG4gICAqIEBzZWUgbHVuci5QaXBlbGluZVxuICAgKiBAc2VlIGx1bnIuc3RvcFdvcmRGaWx0ZXJcbiAgICovXG4gIGx1bnIuZ2VuZXJhdGVTdG9wV29yZEZpbHRlciA9IGZ1bmN0aW9uIChzdG9wV29yZHMpIHtcbiAgICB2YXIgd29yZHMgPSBzdG9wV29yZHMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBzdG9wV29yZCkge1xuICAgICAgbWVtb1tzdG9wV29yZF0gPSBzdG9wV29yZDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgIGlmICh0b2tlbiAmJiB3b3Jkc1t0b2tlbi50b1N0cmluZygpXSAhPT0gdG9rZW4udG9TdHJpbmcoKSkgcmV0dXJuIHRva2VuO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIGx1bnIuc3RvcFdvcmRGaWx0ZXIgaXMgYW4gRW5nbGlzaCBsYW5ndWFnZSBzdG9wIHdvcmQgbGlzdCBmaWx0ZXIsIGFueSB3b3Jkc1xuICAgKiBjb250YWluZWQgaW4gdGhlIGxpc3Qgd2lsbCBub3QgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGZpbHRlci5cbiAgICpcbiAgICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIHRoZSBQaXBlbGluZS4gSWYgdGhlIHRva2VuIGRvZXMgbm90IHBhc3MgdGhlXG4gICAqIGZpbHRlciB0aGVuIHVuZGVmaW5lZCB3aWxsIGJlIHJldHVybmVkLlxuICAgKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGltcGxlbWVudHMge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn1cbiAgICogQHBhcmFtcyB7bHVuci5Ub2tlbn0gdG9rZW4gLSBBIHRva2VuIHRvIGNoZWNrIGZvciBiZWluZyBhIHN0b3Agd29yZC5cbiAgICogQHJldHVybnMge2x1bnIuVG9rZW59XG4gICAqIEBzZWUge0BsaW5rIGx1bnIuUGlwZWxpbmV9XG4gICAqL1xuICBsdW5yLnN0b3BXb3JkRmlsdGVyID0gbHVuci5nZW5lcmF0ZVN0b3BXb3JkRmlsdGVyKFtcbiAgICBcImFcIixcbiAgICBcImFibGVcIixcbiAgICBcImFib3V0XCIsXG4gICAgXCJhY3Jvc3NcIixcbiAgICBcImFmdGVyXCIsXG4gICAgXCJhbGxcIixcbiAgICBcImFsbW9zdFwiLFxuICAgIFwiYWxzb1wiLFxuICAgIFwiYW1cIixcbiAgICBcImFtb25nXCIsXG4gICAgXCJhblwiLFxuICAgIFwiYW5kXCIsXG4gICAgXCJhbnlcIixcbiAgICBcImFyZVwiLFxuICAgIFwiYXNcIixcbiAgICBcImF0XCIsXG4gICAgXCJiZVwiLFxuICAgIFwiYmVjYXVzZVwiLFxuICAgIFwiYmVlblwiLFxuICAgIFwiYnV0XCIsXG4gICAgXCJieVwiLFxuICAgIFwiY2FuXCIsXG4gICAgXCJjYW5ub3RcIixcbiAgICBcImNvdWxkXCIsXG4gICAgXCJkZWFyXCIsXG4gICAgXCJkaWRcIixcbiAgICBcImRvXCIsXG4gICAgXCJkb2VzXCIsXG4gICAgXCJlaXRoZXJcIixcbiAgICBcImVsc2VcIixcbiAgICBcImV2ZXJcIixcbiAgICBcImV2ZXJ5XCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZyb21cIixcbiAgICBcImdldFwiLFxuICAgIFwiZ290XCIsXG4gICAgXCJoYWRcIixcbiAgICBcImhhc1wiLFxuICAgIFwiaGF2ZVwiLFxuICAgIFwiaGVcIixcbiAgICBcImhlclwiLFxuICAgIFwiaGVyc1wiLFxuICAgIFwiaGltXCIsXG4gICAgXCJoaXNcIixcbiAgICBcImhvd1wiLFxuICAgIFwiaG93ZXZlclwiLFxuICAgIFwiaVwiLFxuICAgIFwiaWZcIixcbiAgICBcImluXCIsXG4gICAgXCJpbnRvXCIsXG4gICAgXCJpc1wiLFxuICAgIFwiaXRcIixcbiAgICBcIml0c1wiLFxuICAgIFwianVzdFwiLFxuICAgIFwibGVhc3RcIixcbiAgICBcImxldFwiLFxuICAgIFwibGlrZVwiLFxuICAgIFwibGlrZWx5XCIsXG4gICAgXCJtYXlcIixcbiAgICBcIm1lXCIsXG4gICAgXCJtaWdodFwiLFxuICAgIFwibW9zdFwiLFxuICAgIFwibXVzdFwiLFxuICAgIFwibXlcIixcbiAgICBcIm5laXRoZXJcIixcbiAgICBcIm5vXCIsXG4gICAgXCJub3JcIixcbiAgICBcIm5vdFwiLFxuICAgIFwib2ZcIixcbiAgICBcIm9mZlwiLFxuICAgIFwib2Z0ZW5cIixcbiAgICBcIm9uXCIsXG4gICAgXCJvbmx5XCIsXG4gICAgXCJvclwiLFxuICAgIFwib3RoZXJcIixcbiAgICBcIm91clwiLFxuICAgIFwib3duXCIsXG4gICAgXCJyYXRoZXJcIixcbiAgICBcInNhaWRcIixcbiAgICBcInNheVwiLFxuICAgIFwic2F5c1wiLFxuICAgIFwic2hlXCIsXG4gICAgXCJzaG91bGRcIixcbiAgICBcInNpbmNlXCIsXG4gICAgXCJzb1wiLFxuICAgIFwic29tZVwiLFxuICAgIFwidGhhblwiLFxuICAgIFwidGhhdFwiLFxuICAgIFwidGhlXCIsXG4gICAgXCJ0aGVpclwiLFxuICAgIFwidGhlbVwiLFxuICAgIFwidGhlblwiLFxuICAgIFwidGhlcmVcIixcbiAgICBcInRoZXNlXCIsXG4gICAgXCJ0aGV5XCIsXG4gICAgXCJ0aGlzXCIsXG4gICAgXCJ0aXNcIixcbiAgICBcInRvXCIsXG4gICAgXCJ0b29cIixcbiAgICBcInR3YXNcIixcbiAgICBcInVzXCIsXG4gICAgXCJ3YW50c1wiLFxuICAgIFwid2FzXCIsXG4gICAgXCJ3ZVwiLFxuICAgIFwid2VyZVwiLFxuICAgIFwid2hhdFwiLFxuICAgIFwid2hlblwiLFxuICAgIFwid2hlcmVcIixcbiAgICBcIndoaWNoXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwid2hvXCIsXG4gICAgXCJ3aG9tXCIsXG4gICAgXCJ3aHlcIixcbiAgICBcIndpbGxcIixcbiAgICBcIndpdGhcIixcbiAgICBcIndvdWxkXCIsXG4gICAgXCJ5ZXRcIixcbiAgICBcInlvdVwiLFxuICAgIFwieW91clwiLFxuICBdKTtcblxuICBsdW5yLlBpcGVsaW5lLnJlZ2lzdGVyRnVuY3Rpb24obHVuci5zdG9wV29yZEZpbHRlciwgXCJzdG9wV29yZEZpbHRlclwiKTtcbiAgLyohXG4gICAqIGx1bnIudHJpbW1lclxuICAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgT2xpdmVyIE5pZ2h0aW5nYWxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBsdW5yLnRyaW1tZXIgaXMgYSBwaXBlbGluZSBmdW5jdGlvbiBmb3IgdHJpbW1pbmcgbm9uIHdvcmRcbiAgICogY2hhcmFjdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0b2tlbnMgYmVmb3JlIHRoZXlcbiAgICogZW50ZXIgdGhlIGluZGV4LlxuICAgKlxuICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIG1heSBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbiBsYXRpblxuICAgKiBjaGFyYWN0ZXJzIGFuZCBzaG91bGQgZWl0aGVyIGJlIHJlbW92ZWQgb3IgYWRhcHRlZCBmb3IgdXNlXG4gICAqIHdpdGggbGFuZ3VhZ2VzIHdpdGggbm9uLWxhdGluIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQGltcGxlbWVudHMge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn1cbiAgICogQHBhcmFtIHtsdW5yLlRva2VufSB0b2tlbiBUaGUgdG9rZW4gdG8gcGFzcyB0aHJvdWdoIHRoZSBmaWx0ZXJcbiAgICogQHJldHVybnMge2x1bnIuVG9rZW59XG4gICAqIEBzZWUgbHVuci5QaXBlbGluZVxuICAgKi9cbiAgbHVuci50cmltbWVyID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgcmV0dXJuIHRva2VuLnVwZGF0ZShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXlxcVysvLCBcIlwiKS5yZXBsYWNlKC9cXFcrJC8sIFwiXCIpO1xuICAgIH0pO1xuICB9O1xuXG4gIGx1bnIuUGlwZWxpbmUucmVnaXN0ZXJGdW5jdGlvbihsdW5yLnRyaW1tZXIsIFwidHJpbW1lclwiKTtcbiAgLyohXG4gICAqIGx1bnIuVG9rZW5TZXRcbiAgICogQ29weXJpZ2h0IChDKSAyMDIwIE9saXZlciBOaWdodGluZ2FsZVxuICAgKi9cblxuICAvKipcbiAgICogQSB0b2tlbiBzZXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgdW5pcXVlIGxpc3Qgb2YgYWxsIHRva2Vuc1xuICAgKiB3aXRoaW4gYW4gaW5kZXguIFRva2VuIHNldHMgYXJlIGFsc28gdXNlZCB0byByZXByZXNlbnQgYW5cbiAgICogaW5jb21pbmcgcXVlcnkgdG8gdGhlIGluZGV4LCB0aGlzIHF1ZXJ5IHRva2VuIHNldCBhbmQgaW5kZXhcbiAgICogdG9rZW4gc2V0IGFyZSB0aGVuIGludGVyc2VjdGVkIHRvIGZpbmQgd2hpY2ggdG9rZW5zIHRvIGxvb2tcbiAgICogdXAgaW4gdGhlIGludmVydGVkIGluZGV4LlxuICAgKlxuICAgKiBBIHRva2VuIHNldCBjYW4gaG9sZCBtdWx0aXBsZSB0b2tlbnMsIGFzIGluIHRoZSBjYXNlIG9mIHRoZVxuICAgKiBpbmRleCB0b2tlbiBzZXQsIG9yIGl0IGNhbiBob2xkIGEgc2luZ2xlIHRva2VuIGFzIGluIHRoZVxuICAgKiBjYXNlIG9mIGEgc2ltcGxlIHF1ZXJ5IHRva2VuIHNldC5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5IHRva2VuIHNldHMgYXJlIHVzZWQgdG8gcGVyZm9ybSB3aWxkY2FyZCBtYXRjaGluZy5cbiAgICogTGVhZGluZywgY29udGFpbmVkIGFuZCB0cmFpbGluZyB3aWxkY2FyZHMgYXJlIHN1cHBvcnRlZCwgYW5kXG4gICAqIGZyb20gdGhpcyBlZGl0IGRpc3RhbmNlIG1hdGNoaW5nIGNhbiBhbHNvIGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBUb2tlbiBzZXRzIGFyZSBpbXBsZW1lbnRlZCBhcyBhIG1pbmltYWwgZmluaXRlIHN0YXRlIGF1dG9tYXRhLFxuICAgKiB3aGVyZSBib3RoIGNvbW1vbiBwcmVmaXhlcyBhbmQgc3VmZml4ZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRva2Vucy5cbiAgICogVGhpcyBoZWxwcyB0byByZWR1Y2UgdGhlIHNwYWNlIHVzZWQgZm9yIHN0b3JpbmcgdGhlIHRva2VuIHNldC5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBsdW5yLlRva2VuU2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZmluYWwgPSBmYWxzZTtcbiAgICB0aGlzLmVkZ2VzID0ge307XG4gICAgdGhpcy5pZCA9IGx1bnIuVG9rZW5TZXQuX25leHRJZDtcbiAgICBsdW5yLlRva2VuU2V0Ll9uZXh0SWQgKz0gMTtcbiAgfTtcblxuICAvKipcbiAgICogS2VlcHMgdHJhY2sgb2YgdGhlIG5leHQsIGF1dG8gaW5jcmVtZW50LCBpZGVudGlmaWVyIHRvIGFzc2lnblxuICAgKiB0byBhIG5ldyB0b2tlblNldC5cbiAgICpcbiAgICogVG9rZW5TZXRzIHJlcXVpcmUgYSB1bmlxdWUgaWRlbnRpZmllciB0byBiZSBjb3JyZWN0bHkgbWluaW1pc2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbHVuci5Ub2tlblNldC5fbmV4dElkID0gMTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRva2VuU2V0IGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHNvcnRlZCBhcnJheSBvZiB3b3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gYXJyIC0gQSBzb3J0ZWQgYXJyYXkgb2Ygc3RyaW5ncyB0byBjcmVhdGUgdGhlIHNldCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlblNldH1cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBpbnB1dCBhcnJheSBpcyBub3Qgc29ydGVkLlxuICAgKi9cbiAgbHVuci5Ub2tlblNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gICAgdmFyIGJ1aWxkZXIgPSBuZXcgbHVuci5Ub2tlblNldC5CdWlsZGVyKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBidWlsZGVyLmluc2VydChhcnJbaV0pO1xuICAgIH1cblxuICAgIGJ1aWxkZXIuZmluaXNoKCk7XG4gICAgcmV0dXJuIGJ1aWxkZXIucm9vdDtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRva2VuIHNldCBmcm9tIGEgcXVlcnkgY2xhdXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2xhdXNlIC0gQSBzaW5nbGUgY2xhdXNlIGZyb20gbHVuci5RdWVyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXVzZS50ZXJtIC0gVGhlIHF1ZXJ5IGNsYXVzZSB0ZXJtLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NsYXVzZS5lZGl0RGlzdGFuY2VdIC0gVGhlIG9wdGlvbmFsIGVkaXQgZGlzdGFuY2UgZm9yIHRoZSB0ZXJtLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlblNldH1cbiAgICovXG4gIGx1bnIuVG9rZW5TZXQuZnJvbUNsYXVzZSA9IGZ1bmN0aW9uIChjbGF1c2UpIHtcbiAgICBpZiAoXCJlZGl0RGlzdGFuY2VcIiBpbiBjbGF1c2UpIHtcbiAgICAgIHJldHVybiBsdW5yLlRva2VuU2V0LmZyb21GdXp6eVN0cmluZyhjbGF1c2UudGVybSwgY2xhdXNlLmVkaXREaXN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsdW5yLlRva2VuU2V0LmZyb21TdHJpbmcoY2xhdXNlLnRlcm0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRva2VuIHNldCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWRcbiAgICogZWRpdCBkaXN0YW5jZS5cbiAgICpcbiAgICogSW5zZXJ0aW9ucywgZGVsZXRpb25zLCBzdWJzdGl0dXRpb25zIGFuZCB0cmFuc3Bvc2l0aW9ucyBhcmUgZWFjaFxuICAgKiB0cmVhdGVkIGFzIGFuIGVkaXQgZGlzdGFuY2Ugb2YgMS5cbiAgICpcbiAgICogSW5jcmVhc2luZyB0aGUgYWxsb3dlZCBlZGl0IGRpc3RhbmNlIHdpbGwgaGF2ZSBhIGRyYW1hdGljIGltcGFjdFxuICAgKiBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgYm90aCBjcmVhdGluZyBhbmQgaW50ZXJzZWN0aW5nIHRoZXNlIFRva2VuU2V0cy5cbiAgICogSXQgaXMgYWR2aXNlZCB0byBrZWVwIHRoZSBlZGl0IGRpc3RhbmNlIGxlc3MgdGhhbiAzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBjcmVhdGUgdGhlIHRva2VuIHNldCBmcm9tLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZWRpdERpc3RhbmNlIC0gVGhlIGFsbG93ZWQgZWRpdCBkaXN0YW5jZSB0byBtYXRjaC5cbiAgICogQHJldHVybnMge2x1bnIuVmVjdG9yfVxuICAgKi9cbiAgbHVuci5Ub2tlblNldC5mcm9tRnV6enlTdHJpbmcgPSBmdW5jdGlvbiAoc3RyLCBlZGl0RGlzdGFuY2UpIHtcbiAgICB2YXIgcm9vdCA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG5cbiAgICB2YXIgc3RhY2sgPSBbXG4gICAgICB7XG4gICAgICAgIG5vZGU6IHJvb3QsXG4gICAgICAgIGVkaXRzUmVtYWluaW5nOiBlZGl0RGlzdGFuY2UsXG4gICAgICAgIHN0cjogc3RyLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgdmFyIGZyYW1lID0gc3RhY2sucG9wKCk7XG5cbiAgICAgIC8vIG5vIGVkaXRcbiAgICAgIGlmIChmcmFtZS5zdHIubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgY2hhciA9IGZyYW1lLnN0ci5jaGFyQXQoMCksXG4gICAgICAgICAgbm9FZGl0Tm9kZTtcblxuICAgICAgICBpZiAoY2hhciBpbiBmcmFtZS5ub2RlLmVkZ2VzKSB7XG4gICAgICAgICAgbm9FZGl0Tm9kZSA9IGZyYW1lLm5vZGUuZWRnZXNbY2hhcl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9FZGl0Tm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG4gICAgICAgICAgZnJhbWUubm9kZS5lZGdlc1tjaGFyXSA9IG5vRWRpdE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhbWUuc3RyLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgbm9FZGl0Tm9kZS5maW5hbCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBub2RlOiBub0VkaXROb2RlLFxuICAgICAgICAgIGVkaXRzUmVtYWluaW5nOiBmcmFtZS5lZGl0c1JlbWFpbmluZyxcbiAgICAgICAgICBzdHI6IGZyYW1lLnN0ci5zbGljZSgxKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmcmFtZS5lZGl0c1JlbWFpbmluZyA9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpbnNlcnRpb25cbiAgICAgIGlmIChcIipcIiBpbiBmcmFtZS5ub2RlLmVkZ2VzKSB7XG4gICAgICAgIHZhciBpbnNlcnRpb25Ob2RlID0gZnJhbWUubm9kZS5lZGdlc1tcIipcIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW5zZXJ0aW9uTm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG4gICAgICAgIGZyYW1lLm5vZGUuZWRnZXNbXCIqXCJdID0gaW5zZXJ0aW9uTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPT0gMCkge1xuICAgICAgICBpbnNlcnRpb25Ob2RlLmZpbmFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgIG5vZGU6IGluc2VydGlvbk5vZGUsXG4gICAgICAgIGVkaXRzUmVtYWluaW5nOiBmcmFtZS5lZGl0c1JlbWFpbmluZyAtIDEsXG4gICAgICAgIHN0cjogZnJhbWUuc3RyLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIGRlbGV0aW9uXG4gICAgICAvLyBjYW4gb25seSBkbyBhIGRlbGV0aW9uIGlmIHdlIGhhdmUgZW5vdWdoIGVkaXRzIHJlbWFpbmluZ1xuICAgICAgLy8gYW5kIGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGxlZnQgdG8gZGVsZXRlIGluIHRoZSBzdHJpbmdcbiAgICAgIGlmIChmcmFtZS5zdHIubGVuZ3RoID4gMSkge1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBub2RlOiBmcmFtZS5ub2RlLFxuICAgICAgICAgIGVkaXRzUmVtYWluaW5nOiBmcmFtZS5lZGl0c1JlbWFpbmluZyAtIDEsXG4gICAgICAgICAgc3RyOiBmcmFtZS5zdHIuc2xpY2UoMSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWxldGlvblxuICAgICAgLy8ganVzdCByZW1vdmluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RyXG4gICAgICBpZiAoZnJhbWUuc3RyLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGZyYW1lLm5vZGUuZmluYWwgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBzdWJzdGl0dXRpb25cbiAgICAgIC8vIGNhbiBvbmx5IGRvIGEgc3Vic3RpdHV0aW9uIGlmIHdlIGhhdmUgZW5vdWdoIGVkaXRzIHJlbWFpbmluZ1xuICAgICAgLy8gYW5kIGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGxlZnQgdG8gc3Vic3RpdHV0ZVxuICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPj0gMSkge1xuICAgICAgICBpZiAoXCIqXCIgaW4gZnJhbWUubm9kZS5lZGdlcykge1xuICAgICAgICAgIHZhciBzdWJzdGl0dXRpb25Ob2RlID0gZnJhbWUubm9kZS5lZGdlc1tcIipcIl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHN1YnN0aXR1dGlvbk5vZGUgPSBuZXcgbHVuci5Ub2tlblNldCgpO1xuICAgICAgICAgIGZyYW1lLm5vZGUuZWRnZXNbXCIqXCJdID0gc3Vic3RpdHV0aW9uTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFtZS5zdHIubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlLmZpbmFsID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIG5vZGU6IHN1YnN0aXR1dGlvbk5vZGUsXG4gICAgICAgICAgZWRpdHNSZW1haW5pbmc6IGZyYW1lLmVkaXRzUmVtYWluaW5nIC0gMSxcbiAgICAgICAgICBzdHI6IGZyYW1lLnN0ci5zbGljZSgxKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIC8vIGNhbiBvbmx5IGRvIGEgdHJhbnNwb3NpdGlvbiBpZiB0aGVyZSBhcmUgZWRpdHMgcmVtYWluaW5nXG4gICAgICAvLyBhbmQgdGhlcmUgYXJlIGVub3VnaCBjaGFyYWN0ZXJzIHRvIHRyYW5zcG9zZVxuICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBjaGFyQSA9IGZyYW1lLnN0ci5jaGFyQXQoMCksXG4gICAgICAgICAgY2hhckIgPSBmcmFtZS5zdHIuY2hhckF0KDEpLFxuICAgICAgICAgIHRyYW5zcG9zZU5vZGU7XG5cbiAgICAgICAgaWYgKGNoYXJCIGluIGZyYW1lLm5vZGUuZWRnZXMpIHtcbiAgICAgICAgICB0cmFuc3Bvc2VOb2RlID0gZnJhbWUubm9kZS5lZGdlc1tjaGFyQl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNwb3NlTm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG4gICAgICAgICAgZnJhbWUubm9kZS5lZGdlc1tjaGFyQl0gPSB0cmFuc3Bvc2VOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIHRyYW5zcG9zZU5vZGUuZmluYWwgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgbm9kZTogdHJhbnNwb3NlTm9kZSxcbiAgICAgICAgICBlZGl0c1JlbWFpbmluZzogZnJhbWUuZWRpdHNSZW1haW5pbmcgLSAxLFxuICAgICAgICAgIHN0cjogY2hhckEgKyBmcmFtZS5zdHIuc2xpY2UoMiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVG9rZW5TZXQgZnJvbSBhIHN0cmluZy5cbiAgICpcbiAgICogVGhlIHN0cmluZyBtYXkgY29udGFpbiBvbmUgb3IgbW9yZSB3aWxkY2FyZCBjaGFyYWN0ZXJzICgqKVxuICAgKiB0aGF0IHdpbGwgYWxsb3cgd2lsZGNhcmQgbWF0Y2hpbmcgd2hlbiBpbnRlcnNlY3Rpbmcgd2l0aFxuICAgKiBhbm90aGVyIFRva2VuU2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBjcmVhdGUgYSBUb2tlblNldCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlblNldH1cbiAgICovXG4gIGx1bnIuVG9rZW5TZXQuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCksXG4gICAgICByb290ID0gbm9kZTtcblxuICAgIC8qXG4gICAgICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgY2hhcmFjdGVycyB3aXRoaW4gdGhlIHBhc3NlZCBzdHJpbmdcbiAgICAgKiBhcHBlbmRpbmcgYSBub2RlIGZvciBlYWNoIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqIFdoZW4gYSB3aWxkY2FyZCBjaGFyYWN0ZXIgaXMgZm91bmQgdGhlbiBhIHNlbGZcbiAgICAgKiByZWZlcmVuY2luZyBlZGdlIGlzIGludHJvZHVjZWQgdG8gY29udGludWFsbHkgbWF0Y2hcbiAgICAgKiBhbnkgbnVtYmVyIG9mIGFueSBjaGFyYWN0ZXJzLlxuICAgICAqL1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjaGFyID0gc3RyW2ldLFxuICAgICAgICBmaW5hbCA9IGkgPT0gbGVuIC0gMTtcblxuICAgICAgaWYgKGNoYXIgPT0gXCIqXCIpIHtcbiAgICAgICAgbm9kZS5lZGdlc1tjaGFyXSA9IG5vZGU7XG4gICAgICAgIG5vZGUuZmluYWwgPSBmaW5hbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXh0ID0gbmV3IGx1bnIuVG9rZW5TZXQoKTtcbiAgICAgICAgbmV4dC5maW5hbCA9IGZpbmFsO1xuXG4gICAgICAgIG5vZGUuZWRnZXNbY2hhcl0gPSBuZXh0O1xuICAgICAgICBub2RlID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhpcyBUb2tlblNldCBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICogY29udGFpbmVkIHdpdGhpbiB0aGUgVG9rZW5TZXQuXG4gICAqXG4gICAqIFRoaXMgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgb24gYSBUb2tlblNldCB0aGF0XG4gICAqIGNvbnRhaW5zIHdpbGRjYXJkcywgaW4gdGhlc2UgY2FzZXMgdGhlIHJlc3VsdHMgYXJlXG4gICAqIHVuZGVmaW5lZCBhbmQgYXJlIGxpa2VseSB0byBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBsdW5yLlRva2VuU2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3b3JkcyA9IFtdO1xuXG4gICAgdmFyIHN0YWNrID0gW1xuICAgICAge1xuICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIG5vZGU6IHRoaXMsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICB2YXIgZnJhbWUgPSBzdGFjay5wb3AoKSxcbiAgICAgICAgZWRnZXMgPSBPYmplY3Qua2V5cyhmcmFtZS5ub2RlLmVkZ2VzKSxcbiAgICAgICAgbGVuID0gZWRnZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoZnJhbWUubm9kZS5maW5hbCkge1xuICAgICAgICAvKiBJbiBTYWZhcmksIGF0IHRoaXMgcG9pbnQgdGhlIHByZWZpeCBpcyBzb21ldGltZXMgY29ycnVwdGVkLCBzZWU6XG4gICAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9vbGl2ZXJubi9sdW5yLmpzL2lzc3Vlcy8yNzkgQ2FsbGluZyBhbnlcbiAgICAgICAgICogU3RyaW5nLnByb3RvdHlwZSBtZXRob2QgZm9yY2VzIFNhZmFyaSB0byBcImNhc3RcIiB0aGlzIHN0cmluZyB0byB3aGF0XG4gICAgICAgICAqIGl0J3Mgc3VwcG9zZWQgdG8gYmUsIGZpeGluZyB0aGUgYnVnLiAqL1xuICAgICAgICBmcmFtZS5wcmVmaXguY2hhckF0KDApO1xuICAgICAgICB3b3Jkcy5wdXNoKGZyYW1lLnByZWZpeCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcblxuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBwcmVmaXg6IGZyYW1lLnByZWZpeC5jb25jYXQoZWRnZSksXG4gICAgICAgICAgbm9kZTogZnJhbWUubm9kZS5lZGdlc1tlZGdlXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBUb2tlblNldC5cbiAgICpcbiAgICogVGhpcyBpcyBpbnRlbmRlZCB0byBhbGxvdyBUb2tlblNldHMgdG8gYmUgdXNlZCBhcyBrZXlzXG4gICAqIGluIG9iamVjdHMsIGxhcmdlbHkgdG8gYWlkIHRoZSBjb25zdHJ1Y3Rpb24gYW5kIG1pbmltaXNhdGlvblxuICAgKiBvZiBhIFRva2VuU2V0LiBBcyBzdWNoIGl0IGlzIG5vdCBkZXNpZ25lZCB0byBiZSBhIGh1bWFuXG4gICAqIGZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUb2tlblNldC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGx1bnIuVG9rZW5TZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIE5PVEU6IFVzaW5nIE9iamVjdC5rZXlzIGhlcmUgYXMgdGhpcy5lZGdlcyBpcyB2ZXJ5IGxpa2VseVxuICAgIC8vIHRvIGVudGVyICdoYXNoLW1vZGUnIHdpdGggbWFueSBrZXlzIGJlaW5nIGFkZGVkXG4gICAgLy9cbiAgICAvLyBhdm9pZGluZyBhIGZvci1pbiBsb29wIGhlcmUgYXMgaXQgbGVhZHMgdG8gdGhlIGZ1bmN0aW9uXG4gICAgLy8gYmVpbmcgZGUtb3B0aW1pc2VkIChhdCBsZWFzdCBpbiBWOCkuIEZyb20gc29tZSBzaW1wbGVcbiAgICAvLyBiZW5jaG1hcmtzIHRoZSBwZXJmb3JtYW5jZSBpcyBjb21wYXJhYmxlLCBidXQgYWxsb3dpbmdcbiAgICAvLyBWOCB0byBvcHRpbWl6ZSBtYXkgbWVhbiBlYXN5IHBlcmZvcm1hbmNlIHdpbnMgaW4gdGhlIGZ1dHVyZS5cblxuICAgIGlmICh0aGlzLl9zdHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdHI7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHRoaXMuZmluYWwgPyBcIjFcIiA6IFwiMFwiLFxuICAgICAgbGFiZWxzID0gT2JqZWN0LmtleXModGhpcy5lZGdlcykuc29ydCgpLFxuICAgICAgbGVuID0gbGFiZWxzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBsYWJlbCA9IGxhYmVsc1tpXSxcbiAgICAgICAgbm9kZSA9IHRoaXMuZWRnZXNbbGFiZWxdO1xuXG4gICAgICBzdHIgPSBzdHIgKyBsYWJlbCArIG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBUb2tlblNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAgICogdGhpcyBUb2tlblNldCBhbmQgdGhlIHBhc3NlZCBUb2tlblNldC5cbiAgICpcbiAgICogVGhpcyBpbnRlcnNlY3Rpb24gd2lsbCB0YWtlIGludG8gYWNjb3VudCBhbnkgd2lsZGNhcmRzXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFRva2VuU2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuVG9rZW5TZXR9IGIgLSBBbiBvdGhlciBUb2tlblNldCB0byBpbnRlcnNlY3Qgd2l0aC5cbiAgICogQHJldHVybnMge2x1bnIuVG9rZW5TZXR9XG4gICAqL1xuICBsdW5yLlRva2VuU2V0LnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAoYikge1xuICAgIHZhciBvdXRwdXQgPSBuZXcgbHVuci5Ub2tlblNldCgpLFxuICAgICAgZnJhbWUgPSB1bmRlZmluZWQ7XG5cbiAgICB2YXIgc3RhY2sgPSBbXG4gICAgICB7XG4gICAgICAgIHFOb2RlOiBiLFxuICAgICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgIGZyYW1lID0gc3RhY2sucG9wKCk7XG5cbiAgICAgIC8vIE5PVEU6IEFzIHdpdGggdGhlICN0b1N0cmluZyBtZXRob2QsIHdlIGFyZSB1c2luZ1xuICAgICAgLy8gT2JqZWN0LmtleXMgYW5kIGEgZm9yIGxvb3AgaW5zdGVhZCBvZiBhIGZvci1pbiBsb29wXG4gICAgICAvLyBhcyBib3RoIG9mIHRoZXNlIG9iamVjdHMgZW50ZXIgJ2hhc2gnIG1vZGUsIGNhdXNpbmdcbiAgICAgIC8vIHRoZSBmdW5jdGlvbiB0byBiZSBkZS1vcHRpbWlzZWQgaW4gVjhcbiAgICAgIHZhciBxRWRnZXMgPSBPYmplY3Qua2V5cyhmcmFtZS5xTm9kZS5lZGdlcyksXG4gICAgICAgIHFMZW4gPSBxRWRnZXMubGVuZ3RoLFxuICAgICAgICBuRWRnZXMgPSBPYmplY3Qua2V5cyhmcmFtZS5ub2RlLmVkZ2VzKSxcbiAgICAgICAgbkxlbiA9IG5FZGdlcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIHEgPSAwOyBxIDwgcUxlbjsgcSsrKSB7XG4gICAgICAgIHZhciBxRWRnZSA9IHFFZGdlc1txXTtcblxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5MZW47IG4rKykge1xuICAgICAgICAgIHZhciBuRWRnZSA9IG5FZGdlc1tuXTtcblxuICAgICAgICAgIGlmIChuRWRnZSA9PSBxRWRnZSB8fCBxRWRnZSA9PSBcIipcIikge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBmcmFtZS5ub2RlLmVkZ2VzW25FZGdlXSxcbiAgICAgICAgICAgICAgcU5vZGUgPSBmcmFtZS5xTm9kZS5lZGdlc1txRWRnZV0sXG4gICAgICAgICAgICAgIGZpbmFsID0gbm9kZS5maW5hbCAmJiBxTm9kZS5maW5hbCxcbiAgICAgICAgICAgICAgbmV4dCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKG5FZGdlIGluIGZyYW1lLm91dHB1dC5lZGdlcykge1xuICAgICAgICAgICAgICAvLyBhbiBlZGdlIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGNoYXJhY3RlclxuICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBub2RlLCBqdXN0IHNldCB0aGUgZmluYWxpdHlcbiAgICAgICAgICAgICAgLy8gYml0IHVubGVzcyB0aGlzIG5vZGUgaXMgYWxyZWFkeSBmaW5hbFxuICAgICAgICAgICAgICBuZXh0ID0gZnJhbWUub3V0cHV0LmVkZ2VzW25FZGdlXTtcbiAgICAgICAgICAgICAgbmV4dC5maW5hbCA9IG5leHQuZmluYWwgfHwgZmluYWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBubyBlZGdlIGV4aXN0cyB5ZXQsIG11c3QgY3JlYXRlIG9uZVxuICAgICAgICAgICAgICAvLyBzZXQgdGhlIGZpbmFsaXR5IGJpdCBhbmQgaW5zZXJ0IGl0XG4gICAgICAgICAgICAgIC8vIGludG8gdGhlIG91dHB1dFxuICAgICAgICAgICAgICBuZXh0ID0gbmV3IGx1bnIuVG9rZW5TZXQoKTtcbiAgICAgICAgICAgICAgbmV4dC5maW5hbCA9IGZpbmFsO1xuICAgICAgICAgICAgICBmcmFtZS5vdXRwdXQuZWRnZXNbbkVkZ2VdID0gbmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHFOb2RlOiBxTm9kZSxcbiAgICAgICAgICAgICAgb3V0cHV0OiBuZXh0LFxuICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbiAgbHVuci5Ub2tlblNldC5CdWlsZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucHJldmlvdXNXb3JkID0gXCJcIjtcbiAgICB0aGlzLnJvb3QgPSBuZXcgbHVuci5Ub2tlblNldCgpO1xuICAgIHRoaXMudW5jaGVja2VkTm9kZXMgPSBbXTtcbiAgICB0aGlzLm1pbmltaXplZE5vZGVzID0ge307XG4gIH07XG5cbiAgbHVuci5Ub2tlblNldC5CdWlsZGVyLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAod29yZCkge1xuICAgIHZhciBub2RlLFxuICAgICAgY29tbW9uUHJlZml4ID0gMDtcblxuICAgIGlmICh3b3JkIDwgdGhpcy5wcmV2aW91c1dvcmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk91dCBvZiBvcmRlciB3b3JkIGluc2VydGlvblwiKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmQubGVuZ3RoICYmIGkgPCB0aGlzLnByZXZpb3VzV29yZC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHdvcmRbaV0gIT0gdGhpcy5wcmV2aW91c1dvcmRbaV0pIGJyZWFrO1xuICAgICAgY29tbW9uUHJlZml4Kys7XG4gICAgfVxuXG4gICAgdGhpcy5taW5pbWl6ZShjb21tb25QcmVmaXgpO1xuXG4gICAgaWYgKHRoaXMudW5jaGVja2VkTm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIG5vZGUgPSB0aGlzLnJvb3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSB0aGlzLnVuY2hlY2tlZE5vZGVzW3RoaXMudW5jaGVja2VkTm9kZXMubGVuZ3RoIC0gMV0uY2hpbGQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGNvbW1vblByZWZpeDsgaSA8IHdvcmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXh0Tm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCksXG4gICAgICAgIGNoYXIgPSB3b3JkW2ldO1xuXG4gICAgICBub2RlLmVkZ2VzW2NoYXJdID0gbmV4dE5vZGU7XG5cbiAgICAgIHRoaXMudW5jaGVja2VkTm9kZXMucHVzaCh7XG4gICAgICAgIHBhcmVudDogbm9kZSxcbiAgICAgICAgY2hhcjogY2hhcixcbiAgICAgICAgY2hpbGQ6IG5leHROb2RlLFxuICAgICAgfSk7XG5cbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmZpbmFsID0gdHJ1ZTtcbiAgICB0aGlzLnByZXZpb3VzV29yZCA9IHdvcmQ7XG4gIH07XG5cbiAgbHVuci5Ub2tlblNldC5CdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5taW5pbWl6ZSgwKTtcbiAgfTtcblxuICBsdW5yLlRva2VuU2V0LkJ1aWxkZXIucHJvdG90eXBlLm1pbmltaXplID0gZnVuY3Rpb24gKGRvd25Ubykge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLnVuY2hlY2tlZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gZG93blRvOyBpLS0pIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy51bmNoZWNrZWROb2Rlc1tpXSxcbiAgICAgICAgY2hpbGRLZXkgPSBub2RlLmNoaWxkLnRvU3RyaW5nKCk7XG5cbiAgICAgIGlmIChjaGlsZEtleSBpbiB0aGlzLm1pbmltaXplZE5vZGVzKSB7XG4gICAgICAgIG5vZGUucGFyZW50LmVkZ2VzW25vZGUuY2hhcl0gPSB0aGlzLm1pbmltaXplZE5vZGVzW2NoaWxkS2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENhY2hlIHRoZSBrZXkgZm9yIHRoaXMgbm9kZSBzaW5jZVxuICAgICAgICAvLyB3ZSBrbm93IGl0IGNhbid0IGNoYW5nZSBhbnltb3JlXG4gICAgICAgIG5vZGUuY2hpbGQuX3N0ciA9IGNoaWxkS2V5O1xuXG4gICAgICAgIHRoaXMubWluaW1pemVkTm9kZXNbY2hpbGRLZXldID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmNoZWNrZWROb2Rlcy5wb3AoKTtcbiAgICB9XG4gIH07XG4gIC8qIVxuICAgKiBsdW5yLkluZGV4XG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEFuIGluZGV4IGNvbnRhaW5zIHRoZSBidWlsdCBpbmRleCBvZiBhbGwgZG9jdW1lbnRzIGFuZCBwcm92aWRlcyBhIHF1ZXJ5IGludGVyZmFjZVxuICAgKiB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIFVzdWFsbHkgaW5zdGFuY2VzIG9mIGx1bnIuSW5kZXggd2lsbCBub3QgYmUgY3JlYXRlZCB1c2luZyB0aGlzIGNvbnN0cnVjdG9yLCBpbnN0ZWFkXG4gICAqIGx1bnIuQnVpbGRlciBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3QgbmV3IGluZGV4ZXMsIG9yIGx1bnIuSW5kZXgubG9hZCBzaG91bGQgYmVcbiAgICogdXNlZCB0byBsb2FkIHByZXZpb3VzbHkgYnVpbHQgYW5kIHNlcmlhbGl6ZWQgaW5kZXhlcy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAtIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBidWlsdCBzZWFyY2ggaW5kZXguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycy5pbnZlcnRlZEluZGV4IC0gQW4gaW5kZXggb2YgdGVybS9maWVsZCB0byBkb2N1bWVudCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgbHVuci5WZWN0b3I+fSBhdHRycy5maWVsZFZlY3RvcnMgLSBGaWVsZCB2ZWN0b3JzXG4gICAqIEBwYXJhbSB7bHVuci5Ub2tlblNldH0gYXR0cnMudG9rZW5TZXQgLSBBbiBzZXQgb2YgYWxsIGNvcnB1cyB0b2tlbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGF0dHJzLmZpZWxkcyAtIFRoZSBuYW1lcyBvZiBpbmRleGVkIGRvY3VtZW50IGZpZWxkcy5cbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lfSBhdHRycy5waXBlbGluZSAtIFRoZSBwaXBlbGluZSB0byB1c2UgZm9yIHNlYXJjaCB0ZXJtcy5cbiAgICovXG4gIGx1bnIuSW5kZXggPSBmdW5jdGlvbiAoYXR0cnMpIHtcbiAgICB0aGlzLmludmVydGVkSW5kZXggPSBhdHRycy5pbnZlcnRlZEluZGV4O1xuICAgIHRoaXMuZmllbGRWZWN0b3JzID0gYXR0cnMuZmllbGRWZWN0b3JzO1xuICAgIHRoaXMudG9rZW5TZXQgPSBhdHRycy50b2tlblNldDtcbiAgICB0aGlzLmZpZWxkcyA9IGF0dHJzLmZpZWxkcztcbiAgICB0aGlzLnBpcGVsaW5lID0gYXR0cnMucGlwZWxpbmU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcmVzdWx0IGNvbnRhaW5zIGRldGFpbHMgb2YgYSBkb2N1bWVudCBtYXRjaGluZyBhIHNlYXJjaCBxdWVyeS5cbiAgICogQHR5cGVkZWYge09iamVjdH0gbHVuci5JbmRleH5SZXN1bHRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZiAtIFRoZSByZWZlcmVuY2Ugb2YgdGhlIGRvY3VtZW50IHRoaXMgcmVzdWx0IHJlcHJlc2VudHMuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY29yZSAtIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSByZXByZXNlbnRpbmcgaG93IHNpbWlsYXIgdGhpcyBkb2N1bWVudCBpcyB0byB0aGUgcXVlcnkuXG4gICAqIEBwcm9wZXJ0eSB7bHVuci5NYXRjaERhdGF9IG1hdGNoRGF0YSAtIENvbnRhaW5zIG1ldGFkYXRhIGFib3V0IHRoaXMgbWF0Y2ggaW5jbHVkaW5nIHdoaWNoIHRlcm0ocykgY2F1c2VkIHRoZSBtYXRjaC5cbiAgICovXG5cbiAgLyoqXG4gICAqIEFsdGhvdWdoIGx1bnIgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIHF1ZXJpZXMgdXNpbmcgbHVuci5RdWVyeSwgaXQgYWxzbyBwcm92aWRlcyBhIHNpbXBsZVxuICAgKiBxdWVyeSBsYW5ndWFnZSB3aGljaCBpdHNlbGYgaXMgcGFyc2VkIGludG8gYW4gaW5zdGFuY2Ugb2YgbHVuci5RdWVyeS5cbiAgICpcbiAgICogRm9yIHByb2dyYW1tYXRpY2FsbHkgYnVpbGRpbmcgcXVlcmllcyBpdCBpcyBhZHZpc2VkIHRvIGRpcmVjdGx5IHVzZSBsdW5yLlF1ZXJ5LCB0aGUgcXVlcnkgbGFuZ3VhZ2VcbiAgICogaXMgYmVzdCB1c2VkIGZvciBodW1hbiBlbnRlcmVkIHRleHQgcmF0aGVyIHRoYW4gcHJvZ3JhbSBnZW5lcmF0ZWQgdGV4dC5cbiAgICpcbiAgICogQXQgaXRzIHNpbXBsZXN0IHF1ZXJpZXMgY2FuIGp1c3QgYmUgYSBzaW5nbGUgdGVybSwgZS5nLiBgaGVsbG9gLCBtdWx0aXBsZSB0ZXJtcyBhcmUgYWxzbyBzdXBwb3J0ZWRcbiAgICogYW5kIHdpbGwgYmUgY29tYmluZWQgd2l0aCBPUiwgZS5nIGBoZWxsbyB3b3JsZGAgd2lsbCBtYXRjaCBkb2N1bWVudHMgdGhhdCBjb250YWluIGVpdGhlciAnaGVsbG8nXG4gICAqIG9yICd3b3JsZCcsIHRob3VnaCB0aG9zZSB0aGF0IGNvbnRhaW4gYm90aCB3aWxsIHJhbmsgaGlnaGVyIGluIHRoZSByZXN1bHRzLlxuICAgKlxuICAgKiBXaWxkY2FyZHMgY2FuIGJlIGluY2x1ZGVkIGluIHRlcm1zIHRvIG1hdGNoIG9uZSBvciBtb3JlIHVuc3BlY2lmaWVkIGNoYXJhY3RlcnMsIHRoZXNlIHdpbGRjYXJkcyBjYW5cbiAgICogYmUgaW5zZXJ0ZWQgYW55d2hlcmUgd2l0aGluIHRoZSB0ZXJtLCBhbmQgbW9yZSB0aGFuIG9uZSB3aWxkY2FyZCBjYW4gZXhpc3QgaW4gYSBzaW5nbGUgdGVybS4gQWRkaW5nXG4gICAqIHdpbGRjYXJkcyB3aWxsIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIHRoYXQgd2lsbCBiZSBmb3VuZCBidXQgY2FuIGFsc28gaGF2ZSBhIG5lZ2F0aXZlXG4gICAqIGltcGFjdCBvbiBxdWVyeSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIHdpbGRjYXJkcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgdGVybS5cbiAgICpcbiAgICogVGVybXMgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gc3BlY2lmaWMgZmllbGRzLCBlLmcuIGB0aXRsZTpoZWxsb2AsIG9ubHkgZG9jdW1lbnRzIHdpdGggdGhlIHRlcm1cbiAgICogaGVsbG8gaW4gdGhlIHRpdGxlIGZpZWxkIHdpbGwgbWF0Y2ggdGhpcyBxdWVyeS4gVXNpbmcgYSBmaWVsZCBub3QgcHJlc2VudCBpbiB0aGUgaW5kZXggd2lsbCBsZWFkXG4gICAqIHRvIGFuIGVycm9yIGJlaW5nIHRocm93bi5cbiAgICpcbiAgICogTW9kaWZpZXJzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIHRlcm1zLCBsdW5yIHN1cHBvcnRzIGVkaXQgZGlzdGFuY2UgYW5kIGJvb3N0IG1vZGlmaWVycyBvbiB0ZXJtcy4gQSB0ZXJtXG4gICAqIGJvb3N0IHdpbGwgbWFrZSBkb2N1bWVudHMgbWF0Y2hpbmcgdGhhdCB0ZXJtIHNjb3JlIGhpZ2hlciwgZS5nLiBgZm9vXjVgLiBFZGl0IGRpc3RhbmNlIGlzIGFsc28gc3VwcG9ydGVkXG4gICAqIHRvIHByb3ZpZGUgZnV6enkgbWF0Y2hpbmcsIGUuZy4gJ2hlbGxvfjInIHdpbGwgbWF0Y2ggZG9jdW1lbnRzIHdpdGggaGVsbG8gd2l0aCBhbiBlZGl0IGRpc3RhbmNlIG9mIDIuXG4gICAqIEF2b2lkIGxhcmdlIHZhbHVlcyBmb3IgZWRpdCBkaXN0YW5jZSB0byBpbXByb3ZlIHF1ZXJ5IHBlcmZvcm1hbmNlLlxuICAgKlxuICAgKiBFYWNoIHRlcm0gYWxzbyBzdXBwb3J0cyBhIHByZXNlbmNlIG1vZGlmaWVyLiBCeSBkZWZhdWx0IGEgdGVybSdzIHByZXNlbmNlIGluIGRvY3VtZW50IGlzIG9wdGlvbmFsLCBob3dldmVyXG4gICAqIHRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gZWl0aGVyIHJlcXVpcmVkIG9yIHByb2hpYml0ZWQuIEZvciBhIHRlcm0ncyBwcmVzZW5jZSB0byBiZSByZXF1aXJlZCBpbiBhIGRvY3VtZW50IHRoZVxuICAgKiB0ZXJtIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIGEgJysnLCBlLmcuIGArZm9vIGJhcmAgaXMgYSBzZWFyY2ggZm9yIGRvY3VtZW50cyB0aGF0IG11c3QgY29udGFpbiAnZm9vJyBhbmRcbiAgICogb3B0aW9uYWxseSBjb250YWluICdiYXInLiBDb252ZXJzZWx5IGEgbGVhZGluZyAnLScgc2V0cyB0aGUgdGVybXMgcHJlc2VuY2UgdG8gcHJvaGliaXRlZCwgaS5lLiBpdCBtdXN0IG5vdFxuICAgKiBhcHBlYXIgaW4gYSBkb2N1bWVudCwgZS5nLiBgLWZvbyBiYXJgIGlzIGEgc2VhcmNoIGZvciBkb2N1bWVudHMgdGhhdCBkbyBub3QgY29udGFpbiAnZm9vJyBidXQgbWF5IGNvbnRhaW4gJ2JhcicuXG4gICAqXG4gICAqIFRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgJ1xcJyBjYW4gYmUgdXNlZCwgdGhpcyBhbGxvd3Mgc2VhcmNoZXMgdG8gaW5jbHVkZVxuICAgKiBjaGFyYWN0ZXJzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29uc2lkZXJlZCBtb2RpZmllcnMsIGUuZy4gYGZvb1xcfjJgIHdpbGwgc2VhcmNoIGZvciBhIHRlcm0gXCJmb29+MlwiIGluc3RlYWRcbiAgICogb2YgYXR0ZW1wdGluZyB0byBhcHBseSBhIGJvb3N0IG9mIDIgdG8gdGhlIHNlYXJjaCB0ZXJtIFwiZm9vXCIuXG4gICAqXG4gICAqIEB0eXBlZGVmIHtzdHJpbmd9IGx1bnIuSW5kZXh+UXVlcnlTdHJpbmdcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+U2ltcGxlIHNpbmdsZSB0ZXJtIHF1ZXJ5PC9jYXB0aW9uPlxuICAgKiBoZWxsb1xuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5NdWx0aXBsZSB0ZXJtIHF1ZXJ5PC9jYXB0aW9uPlxuICAgKiBoZWxsbyB3b3JsZFxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj50ZXJtIHNjb3BlZCB0byBhIGZpZWxkPC9jYXB0aW9uPlxuICAgKiB0aXRsZTpoZWxsb1xuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj50ZXJtIHdpdGggYSBib29zdCBvZiAxMDwvY2FwdGlvbj5cbiAgICogaGVsbG9eMTBcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+dGVybSB3aXRoIGFuIGVkaXQgZGlzdGFuY2Ugb2YgMjwvY2FwdGlvbj5cbiAgICogaGVsbG9+MlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj50ZXJtcyB3aXRoIHByZXNlbmNlIG1vZGlmaWVyczwvY2FwdGlvbj5cbiAgICogLWZvbyArYmFyIGJhelxuICAgKi9cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBzZWFyY2ggYWdhaW5zdCB0aGUgaW5kZXggdXNpbmcgbHVuciBxdWVyeSBzeW50YXguXG4gICAqXG4gICAqIFJlc3VsdHMgd2lsbCBiZSByZXR1cm5lZCBzb3J0ZWQgYnkgdGhlaXIgc2NvcmUsIHRoZSBtb3N0IHJlbGV2YW50IHJlc3VsdHNcbiAgICogd2lsbCBiZSByZXR1cm5lZCBmaXJzdC4gIEZvciBkZXRhaWxzIG9uIGhvdyB0aGUgc2NvcmUgaXMgY2FsY3VsYXRlZCwgcGxlYXNlIHNlZVxuICAgKiB0aGUge0BsaW5rIGh0dHBzOi8vbHVucmpzLmNvbS9ndWlkZXMvc2VhcmNoaW5nLmh0bWwjc2NvcmluZ3xndWlkZX0uXG4gICAqXG4gICAqIEZvciBtb3JlIHByb2dyYW1tYXRpYyBxdWVyeWluZyB1c2UgbHVuci5JbmRleCNxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLkluZGV4flF1ZXJ5U3RyaW5nfSBxdWVyeVN0cmluZyAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsdW5yIHF1ZXJ5LlxuICAgKiBAdGhyb3dzIHtsdW5yLlF1ZXJ5UGFyc2VFcnJvcn0gSWYgdGhlIHBhc3NlZCBxdWVyeSBzdHJpbmcgY2Fubm90IGJlIHBhcnNlZC5cbiAgICogQHJldHVybnMge2x1bnIuSW5kZXh+UmVzdWx0W119XG4gICAqL1xuICBsdW5yLkluZGV4LnByb3RvdHlwZS5zZWFyY2ggPSBmdW5jdGlvbiAocXVlcnlTdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHZhciBwYXJzZXIgPSBuZXcgbHVuci5RdWVyeVBhcnNlcihxdWVyeVN0cmluZywgcXVlcnkpO1xuICAgICAgcGFyc2VyLnBhcnNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcXVlcnkgYnVpbGRlciBjYWxsYmFjayBwcm92aWRlcyBhIHF1ZXJ5IG9iamVjdCB0byBiZSB1c2VkIHRvIGV4cHJlc3NcbiAgICogdGhlIHF1ZXJ5IHRvIHBlcmZvcm0gb24gdGhlIGluZGV4LlxuICAgKlxuICAgKiBAY2FsbGJhY2sgbHVuci5JbmRleH5xdWVyeUJ1aWxkZXJcbiAgICogQHBhcmFtIHtsdW5yLlF1ZXJ5fSBxdWVyeSAtIFRoZSBxdWVyeSBvYmplY3QgdG8gYnVpbGQgdXAuXG4gICAqIEB0aGlzIGx1bnIuUXVlcnlcbiAgICovXG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgcXVlcnkgYWdhaW5zdCB0aGUgaW5kZXggdXNpbmcgdGhlIHlpZWxkZWQgbHVuci5RdWVyeSBvYmplY3QuXG4gICAqXG4gICAqIElmIHBlcmZvcm1pbmcgcHJvZ3JhbW1hdGljIHF1ZXJpZXMgYWdhaW5zdCB0aGUgaW5kZXgsIHRoaXMgbWV0aG9kIGlzIHByZWZlcnJlZFxuICAgKiBvdmVyIGx1bnIuSW5kZXgjc2VhcmNoIHNvIGFzIHRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIHF1ZXJ5IHBhcnNpbmcgb3ZlcmhlYWQuXG4gICAqXG4gICAqIEEgcXVlcnkgb2JqZWN0IGlzIHlpZWxkZWQgdG8gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvXG4gICAqIGV4cHJlc3MgdGhlIHF1ZXJ5IHRvIGJlIHJ1biBhZ2FpbnN0IHRoZSBpbmRleC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBjYWxsYmFjayBwYXJhbWV0ZXIgaXQgaXMgX25vdF8gYW5cbiAgICogYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgdGhlIGNhbGxiYWNrIGlzIGp1c3QgeWllbGRlZCBhIHF1ZXJ5IG9iamVjdCB0byBiZVxuICAgKiBjdXN0b21pemVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuSW5kZXh+cXVlcnlCdWlsZGVyfSBmbiAtIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBxdWVyeS5cbiAgICogQHJldHVybnMge2x1bnIuSW5kZXh+UmVzdWx0W119XG4gICAqL1xuICBsdW5yLkluZGV4LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChmbikge1xuICAgIC8vIGZvciBlYWNoIHF1ZXJ5IGNsYXVzZVxuICAgIC8vICogcHJvY2VzcyB0ZXJtc1xuICAgIC8vICogZXhwYW5kIHRlcm1zIGZyb20gdG9rZW4gc2V0XG4gICAgLy8gKiBmaW5kIG1hdGNoaW5nIGRvY3VtZW50cyBhbmQgbWV0YWRhdGFcbiAgICAvLyAqIGdldCBkb2N1bWVudCB2ZWN0b3JzXG4gICAgLy8gKiBzY29yZSBkb2N1bWVudHNcblxuICAgIHZhciBxdWVyeSA9IG5ldyBsdW5yLlF1ZXJ5KHRoaXMuZmllbGRzKSxcbiAgICAgIG1hdGNoaW5nRmllbGRzID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIHF1ZXJ5VmVjdG9ycyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB0ZXJtRmllbGRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICByZXF1aXJlZE1hdGNoZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgcHJvaGliaXRlZE1hdGNoZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgLypcbiAgICAgKiBUbyBzdXBwb3J0IGZpZWxkIGxldmVsIGJvb3N0cyBhIHF1ZXJ5IHZlY3RvciBpcyBjcmVhdGVkIHBlclxuICAgICAqIGZpZWxkLiBBbiBlbXB0eSB2ZWN0b3IgaXMgZWFnZXJseSBjcmVhdGVkIHRvIHN1cHBvcnQgbmVnYXRlZFxuICAgICAqIHF1ZXJpZXMuXG4gICAgICovXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlcnlWZWN0b3JzW3RoaXMuZmllbGRzW2ldXSA9IG5ldyBsdW5yLlZlY3RvcigpO1xuICAgIH1cblxuICAgIGZuLmNhbGwocXVlcnksIHF1ZXJ5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnkuY2xhdXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLypcbiAgICAgICAqIFVubGVzcyB0aGUgcGlwZWxpbmUgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIHRoaXMgdGVybSwgd2hpY2ggaXNcbiAgICAgICAqIHRoZSBjYXNlIGZvciB0ZXJtcyB3aXRoIHdpbGRjYXJkcywgd2UgbmVlZCB0byBwYXNzIHRoZSBjbGF1c2VcbiAgICAgICAqIHRlcm0gdGhyb3VnaCB0aGUgc2VhcmNoIHBpcGVsaW5lLiBBIHBpcGVsaW5lIHJldHVybnMgYW4gYXJyYXlcbiAgICAgICAqIG9mIHByb2Nlc3NlZCB0ZXJtcy4gUGlwZWxpbmUgZnVuY3Rpb25zIG1heSBleHBhbmQgdGhlIHBhc3NlZFxuICAgICAgICogdGVybSwgd2hpY2ggbWVhbnMgd2UgbWF5IGVuZCB1cCBwZXJmb3JtaW5nIG11bHRpcGxlIGluZGV4IGxvb2t1cHNcbiAgICAgICAqIGZvciBhIHNpbmdsZSBxdWVyeSB0ZXJtLlxuICAgICAgICovXG4gICAgICB2YXIgY2xhdXNlID0gcXVlcnkuY2xhdXNlc1tpXSxcbiAgICAgICAgdGVybXMgPSBudWxsLFxuICAgICAgICBjbGF1c2VNYXRjaGVzID0gbHVuci5TZXQuZW1wdHk7XG5cbiAgICAgIGlmIChjbGF1c2UudXNlUGlwZWxpbmUpIHtcbiAgICAgICAgdGVybXMgPSB0aGlzLnBpcGVsaW5lLnJ1blN0cmluZyhjbGF1c2UudGVybSwge1xuICAgICAgICAgIGZpZWxkczogY2xhdXNlLmZpZWxkcyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtcyA9IFtjbGF1c2UudGVybV07XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgdGVybXMubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgdmFyIHRlcm0gPSB0ZXJtc1ttXTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBFYWNoIHRlcm0gcmV0dXJuZWQgZnJvbSB0aGUgcGlwZWxpbmUgbmVlZHMgdG8gdXNlIHRoZSBzYW1lIHF1ZXJ5XG4gICAgICAgICAqIGNsYXVzZSBvYmplY3QsIGUuZy4gdGhlIHNhbWUgYm9vc3QgYW5kIG9yIGVkaXQgZGlzdGFuY2UuIFRoZVxuICAgICAgICAgKiBzaW1wbGVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byByZS11c2UgdGhlIGNsYXVzZSBvYmplY3QgYnV0IG11dGF0ZVxuICAgICAgICAgKiBpdHMgdGVybSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGNsYXVzZS50ZXJtID0gdGVybTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBGcm9tIHRoZSB0ZXJtIGluIHRoZSBjbGF1c2Ugd2UgY3JlYXRlIGEgdG9rZW4gc2V0IHdoaWNoIHdpbGwgdGhlblxuICAgICAgICAgKiBiZSB1c2VkIHRvIGludGVyc2VjdCB0aGUgaW5kZXhlcyB0b2tlbiBzZXQgdG8gZ2V0IGEgbGlzdCBvZiB0ZXJtc1xuICAgICAgICAgKiB0byBsb29rdXAgaW4gdGhlIGludmVydGVkIGluZGV4XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdGVybVRva2VuU2V0ID0gbHVuci5Ub2tlblNldC5mcm9tQ2xhdXNlKGNsYXVzZSksXG4gICAgICAgICAgZXhwYW5kZWRUZXJtcyA9IHRoaXMudG9rZW5TZXQuaW50ZXJzZWN0KHRlcm1Ub2tlblNldCkudG9BcnJheSgpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIGEgdGVybSBtYXJrZWQgYXMgcmVxdWlyZWQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRva2VuU2V0IGl0IGlzXG4gICAgICAgICAqIGltcG9zc2libGUgZm9yIHRoZSBzZWFyY2ggdG8gcmV0dXJuIGFueSBtYXRjaGVzLiBXZSBzZXQgYWxsIHRoZSBmaWVsZFxuICAgICAgICAgKiBzY29wZWQgcmVxdWlyZWQgbWF0Y2hlcyBzZXQgdG8gZW1wdHkgYW5kIHN0b3AgZXhhbWluaW5nIGFueSBmdXJ0aGVyXG4gICAgICAgICAqIGNsYXVzZXMuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXhwYW5kZWRUZXJtcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBjbGF1c2UucHJlc2VuY2UgPT09IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjbGF1c2UuZmllbGRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSBjbGF1c2UuZmllbGRzW2tdO1xuICAgICAgICAgICAgcmVxdWlyZWRNYXRjaGVzW2ZpZWxkXSA9IGx1bnIuU2V0LmVtcHR5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBleHBhbmRlZFRlcm1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBGb3IgZWFjaCB0ZXJtIGdldCB0aGUgcG9zdGluZyBhbmQgdGVybUluZGV4LCB0aGlzIGlzIHJlcXVpcmVkIGZvclxuICAgICAgICAgICAqIGJ1aWxkaW5nIHRoZSBxdWVyeSB2ZWN0b3IuXG4gICAgICAgICAgICovXG4gICAgICAgICAgdmFyIGV4cGFuZGVkVGVybSA9IGV4cGFuZGVkVGVybXNbal0sXG4gICAgICAgICAgICBwb3N0aW5nID0gdGhpcy5pbnZlcnRlZEluZGV4W2V4cGFuZGVkVGVybV0sXG4gICAgICAgICAgICB0ZXJtSW5kZXggPSBwb3N0aW5nLl9pbmRleDtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2xhdXNlLmZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIEZvciBlYWNoIGZpZWxkIHRoYXQgdGhpcyBxdWVyeSB0ZXJtIGlzIHNjb3BlZCBieSAoYnkgZGVmYXVsdFxuICAgICAgICAgICAgICogYWxsIGZpZWxkcyBhcmUgaW4gc2NvcGUpIHdlIG5lZWQgdG8gZ2V0IGFsbCB0aGUgZG9jdW1lbnQgcmVmc1xuICAgICAgICAgICAgICogdGhhdCBoYXZlIHRoaXMgdGVybSBpbiB0aGF0IGZpZWxkLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBwb3N0aW5nIGlzIHRoZSBlbnRyeSBpbiB0aGUgaW52ZXJ0ZWRJbmRleCBmb3IgdGhlIG1hdGNoaW5nXG4gICAgICAgICAgICAgKiB0ZXJtIGZyb20gYWJvdmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBmaWVsZCA9IGNsYXVzZS5maWVsZHNba10sXG4gICAgICAgICAgICAgIGZpZWxkUG9zdGluZyA9IHBvc3RpbmdbZmllbGRdLFxuICAgICAgICAgICAgICBtYXRjaGluZ0RvY3VtZW50UmVmcyA9IE9iamVjdC5rZXlzKGZpZWxkUG9zdGluZyksXG4gICAgICAgICAgICAgIHRlcm1GaWVsZCA9IGV4cGFuZGVkVGVybSArIFwiL1wiICsgZmllbGQsXG4gICAgICAgICAgICAgIG1hdGNoaW5nRG9jdW1lbnRzU2V0ID0gbmV3IGx1bnIuU2V0KG1hdGNoaW5nRG9jdW1lbnRSZWZzKTtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIGlmIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHRlcm0gaXMgcmVxdWlyZWQgZW5zdXJlIHRoYXQgdGhlIG1hdGNoaW5nXG4gICAgICAgICAgICAgKiBkb2N1bWVudHMgYXJlIGFkZGVkIHRvIHRoZSBzZXQgb2YgcmVxdWlyZWQgbWF0Y2hlcyBmb3IgdGhpcyBjbGF1c2UuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoY2xhdXNlLnByZXNlbmNlID09IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRUQpIHtcbiAgICAgICAgICAgICAgY2xhdXNlTWF0Y2hlcyA9IGNsYXVzZU1hdGNoZXMudW5pb24obWF0Y2hpbmdEb2N1bWVudHNTZXQpO1xuXG4gICAgICAgICAgICAgIGlmIChyZXF1aXJlZE1hdGNoZXNbZmllbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZE1hdGNoZXNbZmllbGRdID0gbHVuci5TZXQuY29tcGxldGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIGlmIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHRlcm0gaXMgcHJvaGliaXRlZCBlbnN1cmUgdGhhdCB0aGUgbWF0Y2hpbmdcbiAgICAgICAgICAgICAqIGRvY3VtZW50cyBhcmUgYWRkZWQgdG8gdGhlIHNldCBvZiBwcm9oaWJpdGVkIG1hdGNoZXMgZm9yIHRoaXMgZmllbGQsXG4gICAgICAgICAgICAgKiBjcmVhdGluZyB0aGF0IHNldCBpZiBpdCBkb2VzIG5vdCB5ZXQgZXhpc3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChjbGF1c2UucHJlc2VuY2UgPT0gbHVuci5RdWVyeS5wcmVzZW5jZS5QUk9ISUJJVEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHByb2hpYml0ZWRNYXRjaGVzW2ZpZWxkXSA9IGx1bnIuU2V0LmVtcHR5O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcHJvaGliaXRlZE1hdGNoZXNbZmllbGRdID1cbiAgICAgICAgICAgICAgICBwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF0udW5pb24obWF0Y2hpbmdEb2N1bWVudHNTZXQpO1xuXG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIFByb2hpYml0ZWQgbWF0Y2hlcyBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIHF1ZXJ5IHZlY3RvciB1c2VkIGZvclxuICAgICAgICAgICAgICAgKiBzaW1pbGFyaXR5IHNjb3JpbmcgYW5kIG5vIG1ldGFkYXRhIHNob3VsZCBiZSBleHRyYWN0ZWQgc28gd2UgY29udGludWVcbiAgICAgICAgICAgICAgICogdG8gdGhlIG5leHQgZmllbGRcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogVGhlIHF1ZXJ5IGZpZWxkIHZlY3RvciBpcyBwb3B1bGF0ZWQgdXNpbmcgdGhlIHRlcm1JbmRleCBmb3VuZCBmb3JcbiAgICAgICAgICAgICAqIHRoZSB0ZXJtIGFuZCBhIHVuaXQgdmFsdWUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYm9vc3QgYXBwbGllZC5cbiAgICAgICAgICAgICAqIFVzaW5nIHVwc2VydCBiZWNhdXNlIHRoZXJlIGNvdWxkIGFscmVhZHkgYmUgYW4gZW50cnkgaW4gdGhlIHZlY3RvclxuICAgICAgICAgICAgICogZm9yIHRoZSB0ZXJtIHdlIGFyZSB3b3JraW5nIHdpdGguIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGFkZCB0aGUgc2NvcmVzXG4gICAgICAgICAgICAgKiB0b2dldGhlci5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcXVlcnlWZWN0b3JzW2ZpZWxkXS51cHNlcnQoXG4gICAgICAgICAgICAgIHRlcm1JbmRleCxcbiAgICAgICAgICAgICAgY2xhdXNlLmJvb3N0LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyB0ZXJtLCBmaWVsZCBjb21ibyB0aGVuIHdlJ3ZlIGFscmVhZHkgY29sbGVjdGVkXG4gICAgICAgICAgICAgKiB0aGUgbWF0Y2hpbmcgZG9jdW1lbnRzIGFuZCBtZXRhZGF0YSwgbm8gbmVlZCB0byBnbyB0aHJvdWdoIGFsbCB0aGF0IGFnYWluXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0ZXJtRmllbGRDYWNoZVt0ZXJtRmllbGRdKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG1hdGNoaW5nRG9jdW1lbnRSZWZzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIEFsbCBtZXRhZGF0YSBmb3IgdGhpcyB0ZXJtL2ZpZWxkL2RvY3VtZW50IHRyaXBsZVxuICAgICAgICAgICAgICAgKiBhcmUgdGhlbiBleHRyYWN0ZWQgYW5kIGNvbGxlY3RlZCBpbnRvIGFuIGluc3RhbmNlXG4gICAgICAgICAgICAgICAqIG9mIGx1bnIuTWF0Y2hEYXRhIHJlYWR5IHRvIGJlIHJldHVybmVkIGluIHRoZSBxdWVyeVxuICAgICAgICAgICAgICAgKiByZXN1bHRzXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmdEb2N1bWVudFJlZiA9IG1hdGNoaW5nRG9jdW1lbnRSZWZzW2xdLFxuICAgICAgICAgICAgICAgIG1hdGNoaW5nRmllbGRSZWYgPSBuZXcgbHVuci5GaWVsZFJlZihcbiAgICAgICAgICAgICAgICAgIG1hdGNoaW5nRG9jdW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgICBmaWVsZFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEgPSBmaWVsZFBvc3RpbmdbbWF0Y2hpbmdEb2N1bWVudFJlZl0sXG4gICAgICAgICAgICAgICAgZmllbGRNYXRjaDtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGZpZWxkTWF0Y2ggPSBtYXRjaGluZ0ZpZWxkc1ttYXRjaGluZ0ZpZWxkUmVmXSkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0ZpZWxkc1ttYXRjaGluZ0ZpZWxkUmVmXSA9IG5ldyBsdW5yLk1hdGNoRGF0YShcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkVGVybSxcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkTWF0Y2guYWRkKGV4cGFuZGVkVGVybSwgZmllbGQsIG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZXJtRmllbGRDYWNoZVt0ZXJtRmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJZiB0aGUgcHJlc2VuY2Ugd2FzIHJlcXVpcmVkIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSByZXF1aXJlZE1hdGNoZXMgZmllbGQgc2V0cy5cbiAgICAgICAqIFdlIGRvIHRoaXMgYWZ0ZXIgYWxsIGZpZWxkcyBmb3IgdGhlIHRlcm0gaGF2ZSBjb2xsZWN0ZWQgdGhlaXIgbWF0Y2hlcyBiZWNhdXNlXG4gICAgICAgKiB0aGUgY2xhdXNlIHRlcm1zIHByZXNlbmNlIGlzIHJlcXVpcmVkIGluIF9hbnlfIG9mIHRoZSBmaWVsZHMgbm90IF9hbGxfIG9mIHRoZVxuICAgICAgICogZmllbGRzLlxuICAgICAgICovXG4gICAgICBpZiAoY2xhdXNlLnByZXNlbmNlID09PSBsdW5yLlF1ZXJ5LnByZXNlbmNlLlJFUVVJUkVEKSB7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2xhdXNlLmZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGNsYXVzZS5maWVsZHNba107XG4gICAgICAgICAgcmVxdWlyZWRNYXRjaGVzW2ZpZWxkXSA9XG4gICAgICAgICAgICByZXF1aXJlZE1hdGNoZXNbZmllbGRdLmludGVyc2VjdChjbGF1c2VNYXRjaGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5lZWQgdG8gY29tYmluZSB0aGUgZmllbGQgc2NvcGVkIHJlcXVpcmVkIGFuZCBwcm9oaWJpdGVkXG4gICAgICogbWF0Y2hpbmcgZG9jdW1lbnRzIGludG8gYSBnbG9iYWwgc2V0IG9mIHJlcXVpcmVkIGFuZCBwcm9oaWJpdGVkXG4gICAgICogbWF0Y2hlc1xuICAgICAqL1xuICAgIHZhciBhbGxSZXF1aXJlZE1hdGNoZXMgPSBsdW5yLlNldC5jb21wbGV0ZSxcbiAgICAgIGFsbFByb2hpYml0ZWRNYXRjaGVzID0gbHVuci5TZXQuZW1wdHk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGQgPSB0aGlzLmZpZWxkc1tpXTtcblxuICAgICAgaWYgKHJlcXVpcmVkTWF0Y2hlc1tmaWVsZF0pIHtcbiAgICAgICAgYWxsUmVxdWlyZWRNYXRjaGVzID0gYWxsUmVxdWlyZWRNYXRjaGVzLmludGVyc2VjdChcbiAgICAgICAgICByZXF1aXJlZE1hdGNoZXNbZmllbGRdXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF0pIHtcbiAgICAgICAgYWxsUHJvaGliaXRlZE1hdGNoZXMgPSBhbGxQcm9oaWJpdGVkTWF0Y2hlcy51bmlvbihcbiAgICAgICAgICBwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hpbmdGaWVsZFJlZnMgPSBPYmplY3Qua2V5cyhtYXRjaGluZ0ZpZWxkcyksXG4gICAgICByZXN1bHRzID0gW10sXG4gICAgICBtYXRjaGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIC8qXG4gICAgICogSWYgdGhlIHF1ZXJ5IGlzIG5lZ2F0ZWQgKGNvbnRhaW5zIG9ubHkgcHJvaGliaXRlZCB0ZXJtcylcbiAgICAgKiB3ZSBuZWVkIHRvIGdldCBfYWxsXyBmaWVsZFJlZnMgY3VycmVudGx5IGV4aXN0aW5nIGluIHRoZVxuICAgICAqIGluZGV4LiBUaGlzIGlzIG9ubHkgZG9uZSB3aGVuIHdlIGtub3cgdGhhdCB0aGUgcXVlcnkgaXNcbiAgICAgKiBlbnRpcmVseSBwcm9oaWJpdGVkIHRlcm1zIHRvIGF2b2lkIGFueSBjb3N0IG9mIGdldHRpbmcgYWxsXG4gICAgICogZmllbGRSZWZzIHVubmVjZXNzYXJpbHkuXG4gICAgICpcbiAgICAgKiBBZGRpdGlvbmFsbHksIGJsYW5rIE1hdGNoRGF0YSBtdXN0IGJlIGNyZWF0ZWQgdG8gY29ycmVjdGx5XG4gICAgICogcG9wdWxhdGUgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaWYgKHF1ZXJ5LmlzTmVnYXRlZCgpKSB7XG4gICAgICBtYXRjaGluZ0ZpZWxkUmVmcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRWZWN0b3JzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGluZ0ZpZWxkUmVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbWF0Y2hpbmdGaWVsZFJlZiA9IG1hdGNoaW5nRmllbGRSZWZzW2ldO1xuICAgICAgICB2YXIgZmllbGRSZWYgPSBsdW5yLkZpZWxkUmVmLmZyb21TdHJpbmcobWF0Y2hpbmdGaWVsZFJlZik7XG4gICAgICAgIG1hdGNoaW5nRmllbGRzW21hdGNoaW5nRmllbGRSZWZdID0gbmV3IGx1bnIuTWF0Y2hEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGluZ0ZpZWxkUmVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgLypcbiAgICAgICAqIEN1cnJlbnRseSB3ZSBoYXZlIGRvY3VtZW50IGZpZWxkcyB0aGF0IG1hdGNoIHRoZSBxdWVyeSwgYnV0IHdlXG4gICAgICAgKiBuZWVkIHRvIHJldHVybiBkb2N1bWVudHMuIFRoZSBtYXRjaERhdGEgYW5kIHNjb3JlcyBhcmUgY29tYmluZWRcbiAgICAgICAqIGZyb20gbXVsdGlwbGUgZmllbGRzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAgICAqXG4gICAgICAgKiBTY29yZXMgYXJlIGNhbGN1bGF0ZWQgYnkgZmllbGQsIHVzaW5nIHRoZSBxdWVyeSB2ZWN0b3JzIGNyZWF0ZWRcbiAgICAgICAqIGFib3ZlLCBhbmQgY29tYmluZWQgaW50byBhIGZpbmFsIGRvY3VtZW50IHNjb3JlIHVzaW5nIGFkZGl0aW9uLlxuICAgICAgICovXG4gICAgICB2YXIgZmllbGRSZWYgPSBsdW5yLkZpZWxkUmVmLmZyb21TdHJpbmcobWF0Y2hpbmdGaWVsZFJlZnNbaV0pLFxuICAgICAgICBkb2NSZWYgPSBmaWVsZFJlZi5kb2NSZWY7XG5cbiAgICAgIGlmICghYWxsUmVxdWlyZWRNYXRjaGVzLmNvbnRhaW5zKGRvY1JlZikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxQcm9oaWJpdGVkTWF0Y2hlcy5jb250YWlucyhkb2NSZWYpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmllbGRWZWN0b3IgPSB0aGlzLmZpZWxkVmVjdG9yc1tmaWVsZFJlZl0sXG4gICAgICAgIHNjb3JlID0gcXVlcnlWZWN0b3JzW2ZpZWxkUmVmLmZpZWxkTmFtZV0uc2ltaWxhcml0eShmaWVsZFZlY3RvciksXG4gICAgICAgIGRvY01hdGNoO1xuXG4gICAgICBpZiAoKGRvY01hdGNoID0gbWF0Y2hlc1tkb2NSZWZdKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY01hdGNoLnNjb3JlICs9IHNjb3JlO1xuICAgICAgICBkb2NNYXRjaC5tYXRjaERhdGEuY29tYmluZShtYXRjaGluZ0ZpZWxkc1tmaWVsZFJlZl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICAgIHJlZjogZG9jUmVmLFxuICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICBtYXRjaERhdGE6IG1hdGNoaW5nRmllbGRzW2ZpZWxkUmVmXSxcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlc1tkb2NSZWZdID0gbWF0Y2g7XG4gICAgICAgIHJlc3VsdHMucHVzaChtYXRjaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBTb3J0IHRoZSByZXN1bHRzIG9iamVjdHMgYnkgc2NvcmUsIGhpZ2hlc3QgZmlyc3QuXG4gICAgICovXG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIuc2NvcmUgLSBhLnNjb3JlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgaW5kZXggZm9yIEpTT04gc2VyaWFsaXphdGlvbi5cbiAgICpcbiAgICogVGhlIHNjaGVtYSBmb3IgdGhpcyBKU09OIGJsb2Igd2lsbCBiZSBkZXNjcmliZWQgaW4gYVxuICAgKiBzZXBhcmF0ZSBKU09OIHNjaGVtYSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgbHVuci5JbmRleC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnZlcnRlZEluZGV4ID0gT2JqZWN0LmtleXModGhpcy5pbnZlcnRlZEluZGV4KVxuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcChmdW5jdGlvbiAodGVybSkge1xuICAgICAgICByZXR1cm4gW3Rlcm0sIHRoaXMuaW52ZXJ0ZWRJbmRleFt0ZXJtXV07XG4gICAgICB9LCB0aGlzKTtcblxuICAgIHZhciBmaWVsZFZlY3RvcnMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkVmVjdG9ycykubWFwKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHJldHVybiBbcmVmLCB0aGlzLmZpZWxkVmVjdG9yc1tyZWZdLnRvSlNPTigpXTtcbiAgICB9LCB0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiBsdW5yLnZlcnNpb24sXG4gICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLFxuICAgICAgZmllbGRWZWN0b3JzOiBmaWVsZFZlY3RvcnMsXG4gICAgICBpbnZlcnRlZEluZGV4OiBpbnZlcnRlZEluZGV4LFxuICAgICAgcGlwZWxpbmU6IHRoaXMucGlwZWxpbmUudG9KU09OKCksXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogTG9hZHMgYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgbHVuci5JbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2VyaWFsaXplZEluZGV4IC0gQSBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgbHVuci5JbmRleFxuICAgKiBAcmV0dXJucyB7bHVuci5JbmRleH1cbiAgICovXG4gIGx1bnIuSW5kZXgubG9hZCA9IGZ1bmN0aW9uIChzZXJpYWxpemVkSW5kZXgpIHtcbiAgICB2YXIgYXR0cnMgPSB7fSxcbiAgICAgIGZpZWxkVmVjdG9ycyA9IHt9LFxuICAgICAgc2VyaWFsaXplZFZlY3RvcnMgPSBzZXJpYWxpemVkSW5kZXguZmllbGRWZWN0b3JzLFxuICAgICAgaW52ZXJ0ZWRJbmRleCA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBzZXJpYWxpemVkSW52ZXJ0ZWRJbmRleCA9IHNlcmlhbGl6ZWRJbmRleC5pbnZlcnRlZEluZGV4LFxuICAgICAgdG9rZW5TZXRCdWlsZGVyID0gbmV3IGx1bnIuVG9rZW5TZXQuQnVpbGRlcigpLFxuICAgICAgcGlwZWxpbmUgPSBsdW5yLlBpcGVsaW5lLmxvYWQoc2VyaWFsaXplZEluZGV4LnBpcGVsaW5lKTtcblxuICAgIGlmIChzZXJpYWxpemVkSW5kZXgudmVyc2lvbiAhPSBsdW5yLnZlcnNpb24pIHtcbiAgICAgIGx1bnIudXRpbHMud2FybihcbiAgICAgICAgXCJWZXJzaW9uIG1pc21hdGNoIHdoZW4gbG9hZGluZyBzZXJpYWxpc2VkIGluZGV4LiBDdXJyZW50IHZlcnNpb24gb2YgbHVuciAnXCIgK1xuICAgICAgICAgIGx1bnIudmVyc2lvbiArXG4gICAgICAgICAgXCInIGRvZXMgbm90IG1hdGNoIHNlcmlhbGl6ZWQgaW5kZXggJ1wiICtcbiAgICAgICAgICBzZXJpYWxpemVkSW5kZXgudmVyc2lvbiArXG4gICAgICAgICAgXCInXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkVmVjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHR1cGxlID0gc2VyaWFsaXplZFZlY3RvcnNbaV0sXG4gICAgICAgIHJlZiA9IHR1cGxlWzBdLFxuICAgICAgICBlbGVtZW50cyA9IHR1cGxlWzFdO1xuXG4gICAgICBmaWVsZFZlY3RvcnNbcmVmXSA9IG5ldyBsdW5yLlZlY3RvcihlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkSW52ZXJ0ZWRJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHR1cGxlID0gc2VyaWFsaXplZEludmVydGVkSW5kZXhbaV0sXG4gICAgICAgIHRlcm0gPSB0dXBsZVswXSxcbiAgICAgICAgcG9zdGluZyA9IHR1cGxlWzFdO1xuXG4gICAgICB0b2tlblNldEJ1aWxkZXIuaW5zZXJ0KHRlcm0pO1xuICAgICAgaW52ZXJ0ZWRJbmRleFt0ZXJtXSA9IHBvc3Rpbmc7XG4gICAgfVxuXG4gICAgdG9rZW5TZXRCdWlsZGVyLmZpbmlzaCgpO1xuXG4gICAgYXR0cnMuZmllbGRzID0gc2VyaWFsaXplZEluZGV4LmZpZWxkcztcblxuICAgIGF0dHJzLmZpZWxkVmVjdG9ycyA9IGZpZWxkVmVjdG9ycztcbiAgICBhdHRycy5pbnZlcnRlZEluZGV4ID0gaW52ZXJ0ZWRJbmRleDtcbiAgICBhdHRycy50b2tlblNldCA9IHRva2VuU2V0QnVpbGRlci5yb290O1xuICAgIGF0dHJzLnBpcGVsaW5lID0gcGlwZWxpbmU7XG5cbiAgICByZXR1cm4gbmV3IGx1bnIuSW5kZXgoYXR0cnMpO1xuICB9O1xuICAvKiFcbiAgICogbHVuci5CdWlsZGVyXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuQnVpbGRlciBwZXJmb3JtcyBpbmRleGluZyBvbiBhIHNldCBvZiBkb2N1bWVudHMgYW5kXG4gICAqIHJldHVybnMgaW5zdGFuY2VzIG9mIGx1bnIuSW5kZXggcmVhZHkgZm9yIHF1ZXJ5aW5nLlxuICAgKlxuICAgKiBBbGwgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5kZXggaXMgZG9uZSB2aWEgdGhlIGJ1aWxkZXIsIHRoZVxuICAgKiBmaWVsZHMgdG8gaW5kZXgsIHRoZSBkb2N1bWVudCByZWZlcmVuY2UsIHRoZSB0ZXh0IHByb2Nlc3NpbmdcbiAgICogcGlwZWxpbmUgYW5kIGRvY3VtZW50IHNjb3JpbmcgcGFyYW1ldGVycyBhcmUgYWxsIHNldCBvbiB0aGVcbiAgICogYnVpbGRlciBiZWZvcmUgaW5kZXhpbmcuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gX3JlZiAtIEludGVybmFsIHJlZmVyZW5jZSB0byB0aGUgZG9jdW1lbnQgcmVmZXJlbmNlIGZpZWxkLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBfZmllbGRzIC0gSW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCBmaWVsZHMgdG8gaW5kZXguXG4gICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBpbnZlcnRlZEluZGV4IC0gVGhlIGludmVydGVkIGluZGV4IG1hcHMgdGVybXMgdG8gZG9jdW1lbnQgZmllbGRzLlxuICAgKiBAcHJvcGVydHkge29iamVjdH0gZG9jdW1lbnRUZXJtRnJlcXVlbmNpZXMgLSBLZWVwcyB0cmFjayBvZiBkb2N1bWVudCB0ZXJtIGZyZXF1ZW5jaWVzLlxuICAgKiBAcHJvcGVydHkge29iamVjdH0gZG9jdW1lbnRMZW5ndGhzIC0gS2VlcHMgdHJhY2sgb2YgdGhlIGxlbmd0aCBvZiBkb2N1bWVudHMgYWRkZWQgdG8gdGhlIGluZGV4LlxuICAgKiBAcHJvcGVydHkge2x1bnIudG9rZW5pemVyfSB0b2tlbml6ZXIgLSBGdW5jdGlvbiBmb3Igc3BsaXR0aW5nIHN0cmluZ3MgaW50byB0b2tlbnMgZm9yIGluZGV4aW5nLlxuICAgKiBAcHJvcGVydHkge2x1bnIuUGlwZWxpbmV9IHBpcGVsaW5lIC0gVGhlIHBpcGVsaW5lIHBlcmZvcm1zIHRleHQgcHJvY2Vzc2luZyBvbiB0b2tlbnMgYmVmb3JlIGluZGV4aW5nLlxuICAgKiBAcHJvcGVydHkge2x1bnIuUGlwZWxpbmV9IHNlYXJjaFBpcGVsaW5lIC0gQSBwaXBlbGluZSBmb3IgcHJvY2Vzc2luZyBzZWFyY2ggdGVybXMgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBpbmRleC5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGRvY3VtZW50Q291bnQgLSBLZWVwcyB0cmFjayBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGRvY3VtZW50cyBpbmRleGVkLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gX2IgLSBBIHBhcmFtZXRlciB0byBjb250cm9sIGZpZWxkIGxlbmd0aCBub3JtYWxpemF0aW9uLCBzZXR0aW5nIHRoaXMgdG8gMCBkaXNhYmxlZCBub3JtYWxpemF0aW9uLCAxIGZ1bGx5IG5vcm1hbGl6ZXMgZmllbGQgbGVuZ3RocywgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMC43NS5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9rMSAtIEEgcGFyYW1ldGVyIHRvIGNvbnRyb2wgaG93IHF1aWNrbHkgYW4gaW5jcmVhc2UgaW4gdGVybSBmcmVxdWVuY3kgcmVzdWx0cyBpbiB0ZXJtIGZyZXF1ZW5jeSBzYXR1cmF0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjIuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0ZXJtSW5kZXggLSBBIGNvdW50ZXIgaW5jcmVtZW50ZWQgZm9yIGVhY2ggdW5pcXVlIHRlcm0sIHVzZWQgdG8gaWRlbnRpZnkgYSB0ZXJtcyBwb3NpdGlvbiBpbiB0aGUgdmVjdG9yIHNwYWNlLlxuICAgKiBAcHJvcGVydHkge2FycmF5fSBtZXRhZGF0YVdoaXRlbGlzdCAtIEEgbGlzdCBvZiBtZXRhZGF0YSBrZXlzIHRoYXQgaGF2ZSBiZWVuIHdoaXRlbGlzdGVkIGZvciBlbnRyeSBpbiB0aGUgaW5kZXguXG4gICAqL1xuICBsdW5yLkJ1aWxkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fcmVmID0gXCJpZFwiO1xuICAgIHRoaXMuX2ZpZWxkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZG9jdW1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmludmVydGVkSW5kZXggPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuZmllbGRUZXJtRnJlcXVlbmNpZXMgPSB7fTtcbiAgICB0aGlzLmZpZWxkTGVuZ3RocyA9IHt9O1xuICAgIHRoaXMudG9rZW5pemVyID0gbHVuci50b2tlbml6ZXI7XG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBsdW5yLlBpcGVsaW5lKCk7XG4gICAgdGhpcy5zZWFyY2hQaXBlbGluZSA9IG5ldyBsdW5yLlBpcGVsaW5lKCk7XG4gICAgdGhpcy5kb2N1bWVudENvdW50ID0gMDtcbiAgICB0aGlzLl9iID0gMC43NTtcbiAgICB0aGlzLl9rMSA9IDEuMjtcbiAgICB0aGlzLnRlcm1JbmRleCA9IDA7XG4gICAgdGhpcy5tZXRhZGF0YVdoaXRlbGlzdCA9IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkb2N1bWVudCBmaWVsZCB1c2VkIGFzIHRoZSBkb2N1bWVudCByZWZlcmVuY2UuIEV2ZXJ5IGRvY3VtZW50IG11c3QgaGF2ZSB0aGlzIGZpZWxkLlxuICAgKiBUaGUgdHlwZSBvZiB0aGlzIGZpZWxkIGluIHRoZSBkb2N1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcsIGlmIGl0IGlzIG5vdCBhIHN0cmluZyBpdCB3aWxsIGJlXG4gICAqIGNvZXJjZWQgaW50byBhIHN0cmluZyBieSBjYWxsaW5nIHRvU3RyaW5nLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCByZWYgaXMgJ2lkJy5cbiAgICpcbiAgICogVGhlIHJlZiBzaG91bGQgX25vdF8gYmUgY2hhbmdlZCBkdXJpbmcgaW5kZXhpbmcsIGl0IHNob3VsZCBiZSBzZXQgYmVmb3JlIGFueSBkb2N1bWVudHMgYXJlXG4gICAqIGFkZGVkIHRvIHRoZSBpbmRleC4gQ2hhbmdpbmcgaXQgZHVyaW5nIGluZGV4aW5nIGNhbiBsZWFkIHRvIGluY29uc2lzdGVudCByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIC0gVGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSBmaWVsZCBpbiB0aGUgZG9jdW1lbnQuXG4gICAqL1xuICBsdW5yLkJ1aWxkZXIucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICB0aGlzLl9yZWYgPSByZWY7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3QgYSBmaWVsZCBmcm9tIGEgZG9jdW1lbnQuXG4gICAqXG4gICAqIEx1bnIgZXhwZWN0cyBhIGZpZWxkIHRvIGJlIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBkb2N1bWVudCwgaWYgaG93ZXZlciB0aGUgZmllbGRcbiAgICogaXMgZGVlcGx5IG5lc3RlZCB3aXRoaW4gYSBkb2N1bWVudCBhbiBleHRyYWN0b3IgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXh0cmFjdFxuICAgKiB0aGUgcmlnaHQgZmllbGQgZm9yIGluZGV4aW5nLlxuICAgKlxuICAgKiBAY2FsbGJhY2sgZmllbGRFeHRyYWN0b3JcbiAgICogQHBhcmFtIHtvYmplY3R9IGRvYyAtIFRoZSBkb2N1bWVudCBiZWluZyBhZGRlZCB0byB0aGUgaW5kZXguXG4gICAqIEByZXR1cm5zIHs/KHN0cmluZ3xvYmplY3R8b2JqZWN0W10pfSBvYmogLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBpbmRleGVkIGZvciB0aGlzIGZpZWxkLlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeHRyYWN0aW5nIGEgbmVzdGVkIGZpZWxkPC9jYXB0aW9uPlxuICAgKiBmdW5jdGlvbiAoZG9jKSB7IHJldHVybiBkb2MubmVzdGVkLmZpZWxkIH1cbiAgICovXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBmaWVsZCB0byB0aGUgbGlzdCBvZiBkb2N1bWVudCBmaWVsZHMgdGhhdCB3aWxsIGJlIGluZGV4ZWQuIEV2ZXJ5IGRvY3VtZW50IGJlaW5nXG4gICAqIGluZGV4ZWQgc2hvdWxkIGhhdmUgdGhpcyBmaWVsZC4gTnVsbCB2YWx1ZXMgZm9yIHRoaXMgZmllbGQgaW4gaW5kZXhlZCBkb2N1bWVudHMgd2lsbFxuICAgKiBub3QgY2F1c2UgZXJyb3JzIGJ1dCB3aWxsIGxpbWl0IHRoZSBjaGFuY2Ugb2YgdGhhdCBkb2N1bWVudCBiZWluZyByZXRyaWV2ZWQgYnkgc2VhcmNoZXMuXG4gICAqXG4gICAqIEFsbCBmaWVsZHMgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhZGRpbmcgZG9jdW1lbnRzIHRvIHRoZSBpbmRleC4gQWRkaW5nIGZpZWxkcyBhZnRlclxuICAgKiBhIGRvY3VtZW50IGhhcyBiZWVuIGluZGV4ZWQgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiBhbHJlYWR5IGluZGV4ZWQgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBGaWVsZHMgY2FuIGJlIGJvb3N0ZWQgYXQgYnVpbGQgdGltZS4gVGhpcyBhbGxvd3MgdGVybXMgd2l0aGluIHRoYXQgZmllbGQgdG8gaGF2ZSBtb3JlXG4gICAqIGltcG9ydGFuY2Ugd2hlbiByYW5raW5nIHNlYXJjaCByZXN1bHRzLiBVc2UgYSBmaWVsZCBib29zdCB0byBzcGVjaWZ5IHRoYXQgbWF0Y2hlcyB3aXRoaW5cbiAgICogb25lIGZpZWxkIGFyZSBtb3JlIGltcG9ydGFudCB0aGFuIG90aGVyIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIFRoZSBuYW1lIG9mIGEgZmllbGQgdG8gaW5kZXggaW4gYWxsIGRvY3VtZW50cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGF0dHJpYnV0ZXMgLSBPcHRpb25hbCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2F0dHJpYnV0ZXMuYm9vc3Q9MV0gLSBCb29zdCBhcHBsaWVkIHRvIGFsbCB0ZXJtcyB3aXRoaW4gdGhpcyBmaWVsZC5cbiAgICogQHBhcmFtIHtmaWVsZEV4dHJhY3Rvcn0gW2F0dHJpYnV0ZXMuZXh0cmFjdG9yXSAtIEZ1bmN0aW9uIHRvIGV4dHJhY3QgYSBmaWVsZCBmcm9tIGEgZG9jdW1lbnQuXG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZpZWxkTmFtZSBjYW5ub3QgY29udGFpbiB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzICcvJ1xuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5maWVsZCA9IGZ1bmN0aW9uIChmaWVsZE5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoL1xcLy8udGVzdChmaWVsZE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgXCJGaWVsZCAnXCIgKyBmaWVsZE5hbWUgKyBcIicgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXIgJy8nXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmllbGRzW2ZpZWxkTmFtZV0gPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIHBhcmFtZXRlciB0byB0dW5lIHRoZSBhbW91bnQgb2YgZmllbGQgbGVuZ3RoIG5vcm1hbGlzYXRpb24gdGhhdCBpcyBhcHBsaWVkIHdoZW5cbiAgICogY2FsY3VsYXRpbmcgcmVsZXZhbmNlIHNjb3Jlcy4gQSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBkaXNhYmxlIGFueSBub3JtYWxpc2F0aW9uXG4gICAqIGFuZCBhIHZhbHVlIG9mIDEgd2lsbCBmdWxseSBub3JtYWxpc2UgZmllbGQgbGVuZ3Rocy4gVGhlIGRlZmF1bHQgaXMgMC43NS4gVmFsdWVzIG9mIGJcbiAgICogd2lsbCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSAwIC0gMS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoaXMgdHVuaW5nIHBhcmFtZXRlci5cbiAgICovXG4gIGx1bnIuQnVpbGRlci5wcm90b3R5cGUuYiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgdGhpcy5fYiA9IDA7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPiAxKSB7XG4gICAgICB0aGlzLl9iID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYiA9IG51bWJlcjtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcGFyYW1ldGVyIHRoYXQgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoIGEgcmlzZSBpbiB0ZXJtIGZyZXF1ZW5jeSByZXN1bHRzIGluIHRlcm1cbiAgICogZnJlcXVlbmN5IHNhdHVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuMi4gU2V0dGluZyB0aGlzIHRvIGEgaGlnaGVyIHZhbHVlIHdpbGwgZ2l2ZVxuICAgKiBzbG93ZXIgc2F0dXJhdGlvbiBsZXZlbHMsIGEgbG93ZXIgdmFsdWUgd2lsbCByZXN1bHQgaW4gcXVpY2tlciBzYXR1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIC0gVGhlIHZhbHVlIHRvIHNldCBmb3IgdGhpcyB0dW5pbmcgcGFyYW1ldGVyLlxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5rMSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICB0aGlzLl9rMSA9IG51bWJlcjtcbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIGRvY3VtZW50IHRvIHRoZSBpbmRleC5cbiAgICpcbiAgICogQmVmb3JlIGFkZGluZyBmaWVsZHMgdG8gdGhlIGluZGV4IHRoZSBpbmRleCBzaG91bGQgaGF2ZSBiZWVuIGZ1bGx5IHNldHVwLCB3aXRoIHRoZSBkb2N1bWVudFxuICAgKiByZWYgYW5kIGFsbCBmaWVsZHMgdG8gaW5kZXggYWxyZWFkeSBoYXZpbmcgYmVlbiBzcGVjaWZpZWQuXG4gICAqXG4gICAqIFRoZSBkb2N1bWVudCBtdXN0IGhhdmUgYSBmaWVsZCBuYW1lIGFzIHNwZWNpZmllZCBieSB0aGUgcmVmIChieSBkZWZhdWx0IHRoaXMgaXMgJ2lkJykgYW5kXG4gICAqIGl0IHNob3VsZCBoYXZlIGFsbCBmaWVsZHMgZGVmaW5lZCBmb3IgaW5kZXhpbmcsIHRob3VnaCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBub3RcbiAgICogY2F1c2UgZXJyb3JzLlxuICAgKlxuICAgKiBFbnRpcmUgZG9jdW1lbnRzIGNhbiBiZSBib29zdGVkIGF0IGJ1aWxkIHRpbWUuIEFwcGx5aW5nIGEgYm9vc3QgdG8gYSBkb2N1bWVudCBpbmRpY2F0ZXMgdGhhdFxuICAgKiB0aGlzIGRvY3VtZW50IHNob3VsZCByYW5rIGhpZ2hlciBpbiBzZWFyY2ggcmVzdWx0cyB0aGFuIG90aGVyIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRvYyAtIFRoZSBkb2N1bWVudCB0byBhZGQgdG8gdGhlIGluZGV4LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXR0cmlidXRlcyAtIE9wdGlvbmFsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXR0cmlidXRlcy5ib29zdD0xXSAtIEJvb3N0IGFwcGxpZWQgdG8gYWxsIHRlcm1zIHdpdGhpbiB0aGlzIGRvY3VtZW50LlxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZG9jLCBhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIGRvY1JlZiA9IGRvY1t0aGlzLl9yZWZdLFxuICAgICAgZmllbGRzID0gT2JqZWN0LmtleXModGhpcy5fZmllbGRzKTtcblxuICAgIHRoaXMuX2RvY3VtZW50c1tkb2NSZWZdID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgICB0aGlzLmRvY3VtZW50Q291bnQgKz0gMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGROYW1lID0gZmllbGRzW2ldLFxuICAgICAgICBleHRyYWN0b3IgPSB0aGlzLl9maWVsZHNbZmllbGROYW1lXS5leHRyYWN0b3IsXG4gICAgICAgIGZpZWxkID0gZXh0cmFjdG9yID8gZXh0cmFjdG9yKGRvYykgOiBkb2NbZmllbGROYW1lXSxcbiAgICAgICAgdG9rZW5zID0gdGhpcy50b2tlbml6ZXIoZmllbGQsIHtcbiAgICAgICAgICBmaWVsZHM6IFtmaWVsZE5hbWVdLFxuICAgICAgICB9KSxcbiAgICAgICAgdGVybXMgPSB0aGlzLnBpcGVsaW5lLnJ1bih0b2tlbnMpLFxuICAgICAgICBmaWVsZFJlZiA9IG5ldyBsdW5yLkZpZWxkUmVmKGRvY1JlZiwgZmllbGROYW1lKSxcbiAgICAgICAgZmllbGRUZXJtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIHRoaXMuZmllbGRUZXJtRnJlcXVlbmNpZXNbZmllbGRSZWZdID0gZmllbGRUZXJtcztcbiAgICAgIHRoaXMuZmllbGRMZW5ndGhzW2ZpZWxkUmVmXSA9IDA7XG5cbiAgICAgIC8vIHN0b3JlIHRoZSBsZW5ndGggb2YgdGhpcyBmaWVsZCBmb3IgdGhpcyBkb2N1bWVudFxuICAgICAgdGhpcy5maWVsZExlbmd0aHNbZmllbGRSZWZdICs9IHRlcm1zLmxlbmd0aDtcblxuICAgICAgLy8gY2FsY3VsYXRlIHRlcm0gZnJlcXVlbmNpZXMgZm9yIHRoaXMgZmllbGRcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGVybXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHRlcm0gPSB0ZXJtc1tqXTtcblxuICAgICAgICBpZiAoZmllbGRUZXJtc1t0ZXJtXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWVsZFRlcm1zW3Rlcm1dID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkVGVybXNbdGVybV0gKz0gMTtcblxuICAgICAgICAvLyBhZGQgdG8gaW52ZXJ0ZWQgaW5kZXhcbiAgICAgICAgLy8gY3JlYXRlIGFuIGluaXRpYWwgcG9zdGluZyBpZiBvbmUgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAodGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwb3N0aW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBwb3N0aW5nW1wiX2luZGV4XCJdID0gdGhpcy50ZXJtSW5kZXg7XG4gICAgICAgICAgdGhpcy50ZXJtSW5kZXggKz0gMTtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZmllbGRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBwb3N0aW5nW2ZpZWxkc1trXV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaW52ZXJ0ZWRJbmRleFt0ZXJtXSA9IHBvc3Rpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgYW4gZW50cnkgZm9yIHRoaXMgdGVybS9maWVsZE5hbWUvZG9jUmVmIHRvIHRoZSBpbnZlcnRlZEluZGV4XG4gICAgICAgIGlmICh0aGlzLmludmVydGVkSW5kZXhbdGVybV1bZmllbGROYW1lXVtkb2NSZWZdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW52ZXJ0ZWRJbmRleFt0ZXJtXVtmaWVsZE5hbWVdW2RvY1JlZl0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcmUgYWxsIHdoaXRlbGlzdGVkIG1ldGFkYXRhIGFib3V0IHRoaXMgdG9rZW4gaW4gdGhlXG4gICAgICAgIC8vIGludmVydGVkIGluZGV4XG4gICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy5tZXRhZGF0YVdoaXRlbGlzdC5sZW5ndGg7IGwrKykge1xuICAgICAgICAgIHZhciBtZXRhZGF0YUtleSA9IHRoaXMubWV0YWRhdGFXaGl0ZWxpc3RbbF0sXG4gICAgICAgICAgICBtZXRhZGF0YSA9IHRlcm0ubWV0YWRhdGFbbWV0YWRhdGFLZXldO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dW2ZpZWxkTmFtZV1bZG9jUmVmXVttZXRhZGF0YUtleV0gPT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dW2ZpZWxkTmFtZV1bZG9jUmVmXVttZXRhZGF0YUtleV0gPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmludmVydGVkSW5kZXhbdGVybV1bZmllbGROYW1lXVtkb2NSZWZdW21ldGFkYXRhS2V5XS5wdXNoKFxuICAgICAgICAgICAgbWV0YWRhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBhdmVyYWdlIGRvY3VtZW50IGxlbmd0aCBmb3IgdGhpcyBpbmRleFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5jYWxjdWxhdGVBdmVyYWdlRmllbGRMZW5ndGhzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmaWVsZFJlZnMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkTGVuZ3RocyksXG4gICAgICBudW1iZXJPZkZpZWxkcyA9IGZpZWxkUmVmcy5sZW5ndGgsXG4gICAgICBhY2N1bXVsYXRvciA9IHt9LFxuICAgICAgZG9jdW1lbnRzV2l0aEZpZWxkID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRmllbGRzOyBpKyspIHtcbiAgICAgIHZhciBmaWVsZFJlZiA9IGx1bnIuRmllbGRSZWYuZnJvbVN0cmluZyhmaWVsZFJlZnNbaV0pLFxuICAgICAgICBmaWVsZCA9IGZpZWxkUmVmLmZpZWxkTmFtZTtcblxuICAgICAgZG9jdW1lbnRzV2l0aEZpZWxkW2ZpZWxkXSB8fCAoZG9jdW1lbnRzV2l0aEZpZWxkW2ZpZWxkXSA9IDApO1xuICAgICAgZG9jdW1lbnRzV2l0aEZpZWxkW2ZpZWxkXSArPSAxO1xuXG4gICAgICBhY2N1bXVsYXRvcltmaWVsZF0gfHwgKGFjY3VtdWxhdG9yW2ZpZWxkXSA9IDApO1xuICAgICAgYWNjdW11bGF0b3JbZmllbGRdICs9IHRoaXMuZmllbGRMZW5ndGhzW2ZpZWxkUmVmXTtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gT2JqZWN0LmtleXModGhpcy5fZmllbGRzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGROYW1lID0gZmllbGRzW2ldO1xuICAgICAgYWNjdW11bGF0b3JbZmllbGROYW1lXSA9XG4gICAgICAgIGFjY3VtdWxhdG9yW2ZpZWxkTmFtZV0gLyBkb2N1bWVudHNXaXRoRmllbGRbZmllbGROYW1lXTtcbiAgICB9XG5cbiAgICB0aGlzLmF2ZXJhZ2VGaWVsZExlbmd0aCA9IGFjY3VtdWxhdG9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSB2ZWN0b3Igc3BhY2UgbW9kZWwgb2YgZXZlcnkgZG9jdW1lbnQgdXNpbmcgbHVuci5WZWN0b3JcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGx1bnIuQnVpbGRlci5wcm90b3R5cGUuY3JlYXRlRmllbGRWZWN0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmaWVsZFZlY3RvcnMgPSB7fSxcbiAgICAgIGZpZWxkUmVmcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRUZXJtRnJlcXVlbmNpZXMpLFxuICAgICAgZmllbGRSZWZzTGVuZ3RoID0gZmllbGRSZWZzLmxlbmd0aCxcbiAgICAgIHRlcm1JZGZDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkUmVmc0xlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGRSZWYgPSBsdW5yLkZpZWxkUmVmLmZyb21TdHJpbmcoZmllbGRSZWZzW2ldKSxcbiAgICAgICAgZmllbGROYW1lID0gZmllbGRSZWYuZmllbGROYW1lLFxuICAgICAgICBmaWVsZExlbmd0aCA9IHRoaXMuZmllbGRMZW5ndGhzW2ZpZWxkUmVmXSxcbiAgICAgICAgZmllbGRWZWN0b3IgPSBuZXcgbHVuci5WZWN0b3IoKSxcbiAgICAgICAgdGVybUZyZXF1ZW5jaWVzID0gdGhpcy5maWVsZFRlcm1GcmVxdWVuY2llc1tmaWVsZFJlZl0sXG4gICAgICAgIHRlcm1zID0gT2JqZWN0LmtleXModGVybUZyZXF1ZW5jaWVzKSxcbiAgICAgICAgdGVybXNMZW5ndGggPSB0ZXJtcy5sZW5ndGg7XG5cbiAgICAgIHZhciBmaWVsZEJvb3N0ID0gdGhpcy5fZmllbGRzW2ZpZWxkTmFtZV0uYm9vc3QgfHwgMSxcbiAgICAgICAgZG9jQm9vc3QgPSB0aGlzLl9kb2N1bWVudHNbZmllbGRSZWYuZG9jUmVmXS5ib29zdCB8fCAxO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRlcm1zTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHRlcm0gPSB0ZXJtc1tqXSxcbiAgICAgICAgICB0ZiA9IHRlcm1GcmVxdWVuY2llc1t0ZXJtXSxcbiAgICAgICAgICB0ZXJtSW5kZXggPSB0aGlzLmludmVydGVkSW5kZXhbdGVybV0uX2luZGV4LFxuICAgICAgICAgIGlkZixcbiAgICAgICAgICBzY29yZSxcbiAgICAgICAgICBzY29yZVdpdGhQcmVjaXNpb247XG5cbiAgICAgICAgaWYgKHRlcm1JZGZDYWNoZVt0ZXJtXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWRmID0gbHVuci5pZGYodGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dLCB0aGlzLmRvY3VtZW50Q291bnQpO1xuICAgICAgICAgIHRlcm1JZGZDYWNoZVt0ZXJtXSA9IGlkZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZGYgPSB0ZXJtSWRmQ2FjaGVbdGVybV07XG4gICAgICAgIH1cblxuICAgICAgICBzY29yZSA9XG4gICAgICAgICAgKGlkZiAqICgodGhpcy5fazEgKyAxKSAqIHRmKSkgL1xuICAgICAgICAgICh0aGlzLl9rMSAqXG4gICAgICAgICAgICAoMSAtXG4gICAgICAgICAgICAgIHRoaXMuX2IgK1xuICAgICAgICAgICAgICB0aGlzLl9iICogKGZpZWxkTGVuZ3RoIC8gdGhpcy5hdmVyYWdlRmllbGRMZW5ndGhbZmllbGROYW1lXSkpICtcbiAgICAgICAgICAgIHRmKTtcbiAgICAgICAgc2NvcmUgKj0gZmllbGRCb29zdDtcbiAgICAgICAgc2NvcmUgKj0gZG9jQm9vc3Q7XG4gICAgICAgIHNjb3JlV2l0aFByZWNpc2lvbiA9IE1hdGgucm91bmQoc2NvcmUgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIC8vIENvbnZlcnRzIDEuMjM0NTY3ODkgdG8gMS4yMzQuXG4gICAgICAgIC8vIFJlZHVjaW5nIHRoZSBwcmVjaXNpb24gc28gdGhhdCB0aGUgdmVjdG9ycyB0YWtlIHVwIGxlc3NcbiAgICAgICAgLy8gc3BhY2Ugd2hlbiBzZXJpYWxpc2VkLiBEb2luZyBpdCBub3cgc28gdGhhdCB0aGV5IGJlaGF2ZVxuICAgICAgICAvLyB0aGUgc2FtZSBiZWZvcmUgYW5kIGFmdGVyIHNlcmlhbGlzYXRpb24uIEFsc28sIHRoaXMgaXNcbiAgICAgICAgLy8gdGhlIGZhc3Rlc3QgYXBwcm9hY2ggdG8gcmVkdWNpbmcgYSBudW1iZXIncyBwcmVjaXNpb24gaW5cbiAgICAgICAgLy8gSmF2YVNjcmlwdC5cblxuICAgICAgICBmaWVsZFZlY3Rvci5pbnNlcnQodGVybUluZGV4LCBzY29yZVdpdGhQcmVjaXNpb24pO1xuICAgICAgfVxuXG4gICAgICBmaWVsZFZlY3RvcnNbZmllbGRSZWZdID0gZmllbGRWZWN0b3I7XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZFZlY3RvcnMgPSBmaWVsZFZlY3RvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0b2tlbiBzZXQgb2YgYWxsIHRva2VucyBpbiB0aGUgaW5kZXggdXNpbmcgbHVuci5Ub2tlblNldFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVUb2tlblNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRva2VuU2V0ID0gbHVuci5Ub2tlblNldC5mcm9tQXJyYXkoXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmludmVydGVkSW5kZXgpLnNvcnQoKVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgaW5kZXgsIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGx1bnIuSW5kZXguXG4gICAqXG4gICAqIFRoaXMgY29tcGxldGVzIHRoZSBpbmRleGluZyBwcm9jZXNzIGFuZCBzaG91bGQgb25seSBiZSBjYWxsZWRcbiAgICogb25jZSBhbGwgZG9jdW1lbnRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtsdW5yLkluZGV4fVxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZUF2ZXJhZ2VGaWVsZExlbmd0aHMoKTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkVmVjdG9ycygpO1xuICAgIHRoaXMuY3JlYXRlVG9rZW5TZXQoKTtcblxuICAgIHJldHVybiBuZXcgbHVuci5JbmRleCh7XG4gICAgICBpbnZlcnRlZEluZGV4OiB0aGlzLmludmVydGVkSW5kZXgsXG4gICAgICBmaWVsZFZlY3RvcnM6IHRoaXMuZmllbGRWZWN0b3JzLFxuICAgICAgdG9rZW5TZXQ6IHRoaXMudG9rZW5TZXQsXG4gICAgICBmaWVsZHM6IE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkcyksXG4gICAgICBwaXBlbGluZTogdGhpcy5zZWFyY2hQaXBlbGluZSxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQXBwbGllcyBhIHBsdWdpbiB0byB0aGUgaW5kZXggYnVpbGRlci5cbiAgICpcbiAgICogQSBwbHVnaW4gaXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBidWlsZGVyIGFzIGl0cyBjb250ZXh0LlxuICAgKiBQbHVnaW5zIGNhbiBiZSB1c2VkIHRvIGN1c3RvbWlzZSBvciBleHRlbmQgdGhlIGJlaGF2aW91ciBvZiB0aGUgaW5kZXhcbiAgICogaW4gc29tZSB3YXkuIEEgcGx1Z2luIGlzIGp1c3QgYSBmdW5jdGlvbiwgdGhhdCBlbmNhcHN1bGF0ZWQgdGhlIGN1c3RvbVxuICAgKiBiZWhhdmlvdXIgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB3aGVuIGJ1aWxkaW5nIHRoZSBpbmRleC5cbiAgICpcbiAgICogVGhlIHBsdWdpbiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBidWlsZGVyIGFzIGl0cyBhcmd1bWVudCwgYWRkaXRpb25hbFxuICAgKiBhcmd1bWVudHMgY2FuIGFsc28gYmUgcGFzc2VkIHdoZW4gY2FsbGluZyB1c2UuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZFxuICAgKiB3aXRoIHRoZSBpbmRleCBidWlsZGVyIGFzIGl0cyBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwbHVnaW4gVGhlIHBsdWdpbiB0byBhcHBseS5cbiAgICovXG4gIGx1bnIuQnVpbGRlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGFuZCBjb2xsZWN0cyBtZXRhZGF0YSBhYm91dCBhIG1hdGNoaW5nIGRvY3VtZW50LlxuICAgKiBBIHNpbmdsZSBpbnN0YW5jZSBvZiBsdW5yLk1hdGNoRGF0YSBpcyByZXR1cm5lZCBhcyBwYXJ0IG9mIGV2ZXJ5XG4gICAqIGx1bnIuSW5kZXh+UmVzdWx0LlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlcm0gLSBUaGUgdGVybSB0aGlzIG1hdGNoIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIFRoZSBmaWVsZCBpbiB3aGljaCB0aGUgdGVybSB3YXMgZm91bmRcbiAgICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIHJlY29yZGVkIGFib3V0IHRoaXMgdGVybSBpbiB0aGlzIGZpZWxkXG4gICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtZXRhZGF0YSAtIEEgY2xvbmVkIGNvbGxlY3Rpb24gb2YgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuXG4gICAqIEBzZWUge0BsaW5rIGx1bnIuSW5kZXh+UmVzdWx0fVxuICAgKi9cbiAgbHVuci5NYXRjaERhdGEgPSBmdW5jdGlvbiAodGVybSwgZmllbGQsIG1ldGFkYXRhKSB7XG4gICAgdmFyIGNsb25lZE1ldGFkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIG1ldGFkYXRhS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhIHx8IHt9KTtcblxuICAgIC8vIENsb25pbmcgdGhlIG1ldGFkYXRhIHRvIHByZXZlbnQgdGhlIG9yaWdpbmFsXG4gICAgLy8gYmVpbmcgbXV0YXRlZCBkdXJpbmcgbWF0Y2ggZGF0YSBjb21iaW5hdGlvbi5cbiAgICAvLyBNZXRhZGF0YSBpcyBrZXB0IGluIGFuIGFycmF5IHdpdGhpbiB0aGUgaW52ZXJ0ZWRcbiAgICAvLyBpbmRleCBzbyBjbG9uaW5nIHRoZSBkYXRhIGNhbiBiZSBkb25lIHdpdGhcbiAgICAvLyBBcnJheSNzbGljZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YWRhdGFLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gbWV0YWRhdGFLZXlzW2ldO1xuICAgICAgY2xvbmVkTWV0YWRhdGFba2V5XSA9IG1ldGFkYXRhW2tleV0uc2xpY2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0ZXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWV0YWRhdGFbdGVybV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5tZXRhZGF0YVt0ZXJtXVtmaWVsZF0gPSBjbG9uZWRNZXRhZGF0YTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFuIGluc3RhbmNlIG9mIGx1bnIuTWF0Y2hEYXRhIHdpbGwgYmUgY3JlYXRlZCBmb3IgZXZlcnkgdGVybSB0aGF0IG1hdGNoZXMgYVxuICAgKiBkb2N1bWVudC4gSG93ZXZlciBvbmx5IG9uZSBpbnN0YW5jZSBpcyByZXF1aXJlZCBpbiBhIGx1bnIuSW5kZXh+UmVzdWx0LiBUaGlzXG4gICAqIG1ldGhvZCBjb21iaW5lcyBtZXRhZGF0YSBmcm9tIGFub3RoZXIgaW5zdGFuY2Ugb2YgbHVuci5NYXRjaERhdGEgd2l0aCB0aGlzXG4gICAqIG9iamVjdHMgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5NYXRjaERhdGF9IG90aGVyTWF0Y2hEYXRhIC0gQW5vdGhlciBpbnN0YW5jZSBvZiBtYXRjaCBkYXRhIHRvIG1lcmdlIHdpdGggdGhpcyBvbmUuXG4gICAqIEBzZWUge0BsaW5rIGx1bnIuSW5kZXh+UmVzdWx0fVxuICAgKi9cbiAgbHVuci5NYXRjaERhdGEucHJvdG90eXBlLmNvbWJpbmUgPSBmdW5jdGlvbiAob3RoZXJNYXRjaERhdGEpIHtcbiAgICB2YXIgdGVybXMgPSBPYmplY3Qua2V5cyhvdGhlck1hdGNoRGF0YS5tZXRhZGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGVybSA9IHRlcm1zW2ldLFxuICAgICAgICBmaWVsZHMgPSBPYmplY3Qua2V5cyhvdGhlck1hdGNoRGF0YS5tZXRhZGF0YVt0ZXJtXSk7XG5cbiAgICAgIGlmICh0aGlzLm1ldGFkYXRhW3Rlcm1dID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmaWVsZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2pdLFxuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhvdGhlck1hdGNoRGF0YS5tZXRhZGF0YVt0ZXJtXVtmaWVsZF0pO1xuXG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1trXTtcblxuICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YVt0ZXJtXVtmaWVsZF1ba2V5XSA9XG4gICAgICAgICAgICAgIG90aGVyTWF0Y2hEYXRhLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldID0gdGhpcy5tZXRhZGF0YVt0ZXJtXVtmaWVsZF1bXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXS5jb25jYXQob3RoZXJNYXRjaERhdGEubWV0YWRhdGFbdGVybV1bZmllbGRdW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIG1ldGFkYXRhIGZvciBhIHRlcm0vZmllbGQgcGFpciB0byB0aGlzIGluc3RhbmNlIG9mIG1hdGNoIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXJtIC0gVGhlIHRlcm0gdGhpcyBtYXRjaCBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgLSBUaGUgZmllbGQgaW4gd2hpY2ggdGhlIHRlcm0gd2FzIGZvdW5kXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YSAtIFRoZSBtZXRhZGF0YSByZWNvcmRlZCBhYm91dCB0aGlzIHRlcm0gaW4gdGhpcyBmaWVsZFxuICAgKi9cbiAgbHVuci5NYXRjaERhdGEucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZXJtLCBmaWVsZCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoISh0ZXJtIGluIHRoaXMubWV0YWRhdGEpKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdID0gbWV0YWRhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmllbGQgaW4gdGhpcy5tZXRhZGF0YVt0ZXJtXSkpIHtcbiAgICAgIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdID0gbWV0YWRhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG1ldGFkYXRhS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YWRhdGFLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gbWV0YWRhdGFLZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5IGluIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdW2tleV0gPSB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtcbiAgICAgICAgICBrZXlcbiAgICAgICAgXS5jb25jYXQobWV0YWRhdGFba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldID0gbWV0YWRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBBIGx1bnIuUXVlcnkgcHJvdmlkZXMgYSBwcm9ncmFtbWF0aWMgd2F5IG9mIGRlZmluaW5nIHF1ZXJpZXMgdG8gYmUgcGVyZm9ybWVkXG4gICAqIGFnYWluc3QgYSB7QGxpbmsgbHVuci5JbmRleH0uXG4gICAqXG4gICAqIFByZWZlciBjb25zdHJ1Y3RpbmcgYSBsdW5yLlF1ZXJ5IHVzaW5nIHRoZSB7QGxpbmsgbHVuci5JbmRleCNxdWVyeX0gbWV0aG9kXG4gICAqIHNvIHRoZSBxdWVyeSBvYmplY3QgaXMgcHJlLWluaXRpYWxpemVkIHdpdGggdGhlIHJpZ2h0IGluZGV4IGZpZWxkcy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwcm9wZXJ0eSB7bHVuci5RdWVyeX5DbGF1c2VbXX0gY2xhdXNlcyAtIEFuIGFycmF5IG9mIHF1ZXJ5IGNsYXVzZXMuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGFsbEZpZWxkcyAtIEFuIGFycmF5IG9mIGFsbCBhdmFpbGFibGUgZmllbGRzIGluIGEgbHVuci5JbmRleC5cbiAgICovXG4gIGx1bnIuUXVlcnkgPSBmdW5jdGlvbiAoYWxsRmllbGRzKSB7XG4gICAgdGhpcy5jbGF1c2VzID0gW107XG4gICAgdGhpcy5hbGxGaWVsZHMgPSBhbGxGaWVsZHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnN0YW50cyBmb3IgaW5kaWNhdGluZyB3aGF0IGtpbmQgb2YgYXV0b21hdGljIHdpbGRjYXJkIGluc2VydGlvbiB3aWxsIGJlIHVzZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYSBxdWVyeSBjbGF1c2UuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIHdpbGRjYXJkcyB0byBiZSBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSB0ZXJtIHdpdGhvdXQgaGF2aW5nIHRvIG1hbnVhbGx5IGRvIGFueSBzdHJpbmdcbiAgICogY29uY2F0ZW5hdGlvbi5cbiAgICpcbiAgICogVGhlIHdpbGRjYXJkIGNvbnN0YW50cyBjYW4gYmUgYml0d2lzZSBjb21iaW5lZCB0byBzZWxlY3QgYm90aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aWxkY2FyZHMuXG4gICAqXG4gICAqIEBjb25zdGFudFxuICAgKiBAZGVmYXVsdFxuICAgKiBAcHJvcGVydHkge251bWJlcn0gd2lsZGNhcmQuTk9ORSAtIFRoZSB0ZXJtIHdpbGwgaGF2ZSBubyB3aWxkY2FyZHMgaW5zZXJ0ZWQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWxkY2FyZC5MRUFESU5HIC0gUHJlcGVuZCB0aGUgdGVybSB3aXRoIGEgd2lsZGNhcmQsIHVubGVzcyBhIGxlYWRpbmcgd2lsZGNhcmQgYWxyZWFkeSBleGlzdHNcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHdpbGRjYXJkLlRSQUlMSU5HIC0gQXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIHRlcm0sIHVubGVzcyBhIHRyYWlsaW5nIHdpbGRjYXJkIGFscmVhZHkgZXhpc3RzXG4gICAqIEBzZWUgbHVuci5RdWVyeX5DbGF1c2VcbiAgICogQHNlZSBsdW5yLlF1ZXJ5I2NsYXVzZVxuICAgKiBAc2VlIGx1bnIuUXVlcnkjdGVybVxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5xdWVyeSB0ZXJtIHdpdGggdHJhaWxpbmcgd2lsZGNhcmQ8L2NhcHRpb24+XG4gICAqIHF1ZXJ5LnRlcm0oJ2ZvbycsIHsgd2lsZGNhcmQ6IGx1bnIuUXVlcnkud2lsZGNhcmQuVFJBSUxJTkcgfSlcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+cXVlcnkgdGVybSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdpbGRjYXJkPC9jYXB0aW9uPlxuICAgKiBxdWVyeS50ZXJtKCdmb28nLCB7XG4gICAqICAgd2lsZGNhcmQ6IGx1bnIuUXVlcnkud2lsZGNhcmQuTEVBRElORyB8IGx1bnIuUXVlcnkud2lsZGNhcmQuVFJBSUxJTkdcbiAgICogfSlcbiAgICovXG5cbiAgbHVuci5RdWVyeS53aWxkY2FyZCA9IG5ldyBTdHJpbmcoXCIqXCIpO1xuICBsdW5yLlF1ZXJ5LndpbGRjYXJkLk5PTkUgPSAwO1xuICBsdW5yLlF1ZXJ5LndpbGRjYXJkLkxFQURJTkcgPSAxO1xuICBsdW5yLlF1ZXJ5LndpbGRjYXJkLlRSQUlMSU5HID0gMjtcblxuICAvKipcbiAgICogQ29uc3RhbnRzIGZvciBpbmRpY2F0aW5nIHdoYXQga2luZCBvZiBwcmVzZW5jZSBhIHRlcm0gbXVzdCBoYXZlIGluIG1hdGNoaW5nIGRvY3VtZW50cy5cbiAgICpcbiAgICogQGNvbnN0YW50XG4gICAqIEBlbnVtIHtudW1iZXJ9XG4gICAqIEBzZWUgbHVuci5RdWVyeX5DbGF1c2VcbiAgICogQHNlZSBsdW5yLlF1ZXJ5I2NsYXVzZVxuICAgKiBAc2VlIGx1bnIuUXVlcnkjdGVybVxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5xdWVyeSB0ZXJtIHdpdGggcmVxdWlyZWQgcHJlc2VuY2U8L2NhcHRpb24+XG4gICAqIHF1ZXJ5LnRlcm0oJ2ZvbycsIHsgcHJlc2VuY2U6IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRUQgfSlcbiAgICovXG4gIGx1bnIuUXVlcnkucHJlc2VuY2UgPSB7XG4gICAgLyoqXG4gICAgICogVGVybSdzIHByZXNlbmNlIGluIGEgZG9jdW1lbnQgaXMgb3B0aW9uYWwsIHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgICovXG4gICAgT1BUSU9OQUw6IDEsXG5cbiAgICAvKipcbiAgICAgKiBUZXJtJ3MgcHJlc2VuY2UgaW4gYSBkb2N1bWVudCBpcyByZXF1aXJlZCwgZG9jdW1lbnRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbiAgICAgKiB0aGlzIHRlcm0gd2lsbCBub3QgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgUkVRVUlSRUQ6IDIsXG5cbiAgICAvKipcbiAgICAgKiBUZXJtJ3MgcHJlc2VuY2UgaW4gYSBkb2N1bWVudCBpcyBwcm9oaWJpdGVkLCBkb2N1bWVudHMgdGhhdCBkbyBjb250YWluXG4gICAgICogdGhpcyB0ZXJtIHdpbGwgbm90IGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIFBST0hJQklURUQ6IDMsXG4gIH07XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNsYXVzZSBpbiBhIHtAbGluayBsdW5yLlF1ZXJ5fSBjb250YWlucyBhIHRlcm0gYW5kIGRldGFpbHMgb24gaG93IHRvXG4gICAqIG1hdGNoIHRoYXQgdGVybSBhZ2FpbnN0IGEge0BsaW5rIGx1bnIuSW5kZXh9LlxuICAgKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBsdW5yLlF1ZXJ5fkNsYXVzZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBmaWVsZHMgLSBUaGUgZmllbGRzIGluIGFuIGluZGV4IHRoaXMgY2xhdXNlIHNob3VsZCBiZSBtYXRjaGVkIGFnYWluc3QuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYm9vc3Q9MV0gLSBBbnkgYm9vc3QgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB3aGVuIG1hdGNoaW5nIHRoaXMgY2xhdXNlLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW2VkaXREaXN0YW5jZV0gLSBXaGV0aGVyIHRoZSB0ZXJtIHNob3VsZCBoYXZlIGZ1enp5IG1hdGNoaW5nIGFwcGxpZWQsIGFuZCBob3cgZnV6enkgdGhlIG1hdGNoIHNob3VsZCBiZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlUGlwZWxpbmVdIC0gV2hldGhlciB0aGUgdGVybSBzaG91bGQgYmUgcGFzc2VkIHRocm91Z2ggdGhlIHNlYXJjaCBwaXBlbGluZS5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWxkY2FyZD1sdW5yLlF1ZXJ5LndpbGRjYXJkLk5PTkVdIC0gV2hldGhlciB0aGUgdGVybSBzaG91bGQgaGF2ZSB3aWxkY2FyZHMgYXBwZW5kZWQgb3IgcHJlcGVuZGVkLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW3ByZXNlbmNlPWx1bnIuUXVlcnkucHJlc2VuY2UuT1BUSU9OQUxdIC0gVGhlIHRlcm1zIHByZXNlbmNlIGluIGFueSBtYXRjaGluZyBkb2N1bWVudHMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIGx1bnIuUXVlcnl+Q2xhdXNlfSB0byB0aGlzIHF1ZXJ5LlxuICAgKlxuICAgKiBVbmxlc3MgdGhlIGNsYXVzZSBjb250YWlucyB0aGUgZmllbGRzIHRvIGJlIG1hdGNoZWQgYWxsIGZpZWxkcyB3aWxsIGJlIG1hdGNoZWQuIEluIGFkZGl0aW9uXG4gICAqIGEgZGVmYXVsdCBib29zdCBvZiAxIGlzIGFwcGxpZWQgdG8gdGhlIGNsYXVzZS5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlF1ZXJ5fkNsYXVzZX0gY2xhdXNlIC0gVGhlIGNsYXVzZSB0byBhZGQgdG8gdGhpcyBxdWVyeS5cbiAgICogQHNlZSBsdW5yLlF1ZXJ5fkNsYXVzZVxuICAgKiBAcmV0dXJucyB7bHVuci5RdWVyeX1cbiAgICovXG4gIGx1bnIuUXVlcnkucHJvdG90eXBlLmNsYXVzZSA9IGZ1bmN0aW9uIChjbGF1c2UpIHtcbiAgICBpZiAoIShcImZpZWxkc1wiIGluIGNsYXVzZSkpIHtcbiAgICAgIGNsYXVzZS5maWVsZHMgPSB0aGlzLmFsbEZpZWxkcztcbiAgICB9XG5cbiAgICBpZiAoIShcImJvb3N0XCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLmJvb3N0ID0gMTtcbiAgICB9XG5cbiAgICBpZiAoIShcInVzZVBpcGVsaW5lXCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLnVzZVBpcGVsaW5lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIShcIndpbGRjYXJkXCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLndpbGRjYXJkID0gbHVuci5RdWVyeS53aWxkY2FyZC5OT05FO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNsYXVzZS53aWxkY2FyZCAmIGx1bnIuUXVlcnkud2lsZGNhcmQuTEVBRElORyAmJlxuICAgICAgY2xhdXNlLnRlcm0uY2hhckF0KDApICE9IGx1bnIuUXVlcnkud2lsZGNhcmRcbiAgICApIHtcbiAgICAgIGNsYXVzZS50ZXJtID0gXCIqXCIgKyBjbGF1c2UudGVybTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjbGF1c2Uud2lsZGNhcmQgJiBsdW5yLlF1ZXJ5LndpbGRjYXJkLlRSQUlMSU5HICYmXG4gICAgICBjbGF1c2UudGVybS5zbGljZSgtMSkgIT0gbHVuci5RdWVyeS53aWxkY2FyZFxuICAgICkge1xuICAgICAgY2xhdXNlLnRlcm0gPSBcIlwiICsgY2xhdXNlLnRlcm0gKyBcIipcIjtcbiAgICB9XG5cbiAgICBpZiAoIShcInByZXNlbmNlXCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLnByZXNlbmNlID0gbHVuci5RdWVyeS5wcmVzZW5jZS5PUFRJT05BTDtcbiAgICB9XG5cbiAgICB0aGlzLmNsYXVzZXMucHVzaChjbGF1c2UpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgbmVnYXRlZCBxdWVyeSBpcyBvbmUgaW4gd2hpY2ggZXZlcnkgY2xhdXNlIGhhcyBhIHByZXNlbmNlIG9mXG4gICAqIHByb2hpYml0ZWQuIFRoZXNlIHF1ZXJpZXMgcmVxdWlyZSBzb21lIHNwZWNpYWwgcHJvY2Vzc2luZyB0byByZXR1cm5cbiAgICogdGhlIGV4cGVjdGVkIHJlc3VsdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIGx1bnIuUXVlcnkucHJvdG90eXBlLmlzTmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2xhdXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2xhdXNlc1tpXS5wcmVzZW5jZSAhPSBsdW5yLlF1ZXJ5LnByZXNlbmNlLlBST0hJQklURUQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgdGVybSB0byB0aGUgY3VycmVudCBxdWVyeSwgdW5kZXIgdGhlIGNvdmVycyB0aGlzIHdpbGwgY3JlYXRlIGEge0BsaW5rIGx1bnIuUXVlcnl+Q2xhdXNlfVxuICAgKiB0byB0aGUgbGlzdCBvZiBjbGF1c2VzIHRoYXQgbWFrZSB1cCB0aGlzIHF1ZXJ5LlxuICAgKlxuICAgKiBUaGUgdGVybSBpcyB1c2VkIGFzIGlzLCBpLmUuIG5vIHRva2VuaXphdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBieSB0aGlzIG1ldGhvZC4gSW5zdGVhZCBjb252ZXJzaW9uXG4gICAqIHRvIGEgdG9rZW4gb3IgdG9rZW4tbGlrZSBzdHJpbmcgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIFRoZSB0ZXJtIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYC4gTXVsdGlwbGUgdGVybXMgY2FuIGJlIHBhc3NlZCBhcyBhblxuICAgKiBhcnJheSwgZWFjaCB0ZXJtIGluIHRoZSBhcnJheSB3aWxsIHNoYXJlIHRoZSBzYW1lIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fG9iamVjdFtdfSB0ZXJtIC0gVGhlIHRlcm0ocykgdG8gYWRkIHRvIHRoZSBxdWVyeS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBxdWVyeSBjbGF1c2UuXG4gICAqIEByZXR1cm5zIHtsdW5yLlF1ZXJ5fVxuICAgKiBAc2VlIGx1bnIuUXVlcnkjY2xhdXNlXG4gICAqIEBzZWUgbHVuci5RdWVyeX5DbGF1c2VcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+YWRkaW5nIGEgc2luZ2xlIHRlcm0gdG8gYSBxdWVyeTwvY2FwdGlvbj5cbiAgICogcXVlcnkudGVybShcImZvb1wiKVxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5hZGRpbmcgYSBzaW5nbGUgdGVybSB0byBhIHF1ZXJ5IGFuZCBzcGVjaWZ5aW5nIHNlYXJjaCBmaWVsZHMsIHRlcm0gYm9vc3QgYW5kIGF1dG9tYXRpYyB0cmFpbGluZyB3aWxkY2FyZDwvY2FwdGlvbj5cbiAgICogcXVlcnkudGVybShcImZvb1wiLCB7XG4gICAqICAgZmllbGRzOiBbXCJ0aXRsZVwiXSxcbiAgICogICBib29zdDogMTAsXG4gICAqICAgd2lsZGNhcmQ6IGx1bnIuUXVlcnkud2lsZGNhcmQuVFJBSUxJTkdcbiAgICogfSlcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+dXNpbmcgbHVuci50b2tlbml6ZXIgdG8gY29udmVydCBhIHN0cmluZyB0byB0b2tlbnMgYmVmb3JlIHVzaW5nIHRoZW0gYXMgdGVybXM8L2NhcHRpb24+XG4gICAqIHF1ZXJ5LnRlcm0obHVuci50b2tlbml6ZXIoXCJmb28gYmFyXCIpKVxuICAgKi9cbiAgbHVuci5RdWVyeS5wcm90b3R5cGUudGVybSA9IGZ1bmN0aW9uICh0ZXJtLCBvcHRpb25zKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGVybSkpIHtcbiAgICAgIHRlcm0uZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICB0aGlzLnRlcm0odCwgbHVuci51dGlscy5jbG9uZShvcHRpb25zKSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjbGF1c2UgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNsYXVzZS50ZXJtID0gdGVybS50b1N0cmluZygpO1xuXG4gICAgdGhpcy5jbGF1c2UoY2xhdXNlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBsdW5yLlF1ZXJ5UGFyc2VFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5uYW1lID0gXCJRdWVyeVBhcnNlRXJyb3JcIjtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgbHVuci5RdWVyeUxleGVyID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHRoaXMubGV4ZW1lcyA9IFtdO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMubGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5zdGFydCA9IDA7XG4gICAgdGhpcy5lc2NhcGVDaGFyUG9zaXRpb25zID0gW107XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlID0gbHVuci5RdWVyeUxleGVyLmxleFRleHQ7XG5cbiAgICB3aGlsZSAoc3RhdGUpIHtcbiAgICAgIHN0YXRlID0gc3RhdGUodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUuc2xpY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN1YlNsaWNlcyA9IFtdLFxuICAgICAgc2xpY2VTdGFydCA9IHRoaXMuc3RhcnQsXG4gICAgICBzbGljZUVuZCA9IHRoaXMucG9zO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVzY2FwZUNoYXJQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNsaWNlRW5kID0gdGhpcy5lc2NhcGVDaGFyUG9zaXRpb25zW2ldO1xuICAgICAgc3ViU2xpY2VzLnB1c2godGhpcy5zdHIuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpKTtcbiAgICAgIHNsaWNlU3RhcnQgPSBzbGljZUVuZCArIDE7XG4gICAgfVxuXG4gICAgc3ViU2xpY2VzLnB1c2godGhpcy5zdHIuc2xpY2Uoc2xpY2VTdGFydCwgdGhpcy5wb3MpKTtcbiAgICB0aGlzLmVzY2FwZUNoYXJQb3NpdGlvbnMubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiBzdWJTbGljZXMuam9pbihcIlwiKTtcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRoaXMubGV4ZW1lcy5wdXNoKHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBzdHI6IHRoaXMuc2xpY2VTdHJpbmcoKSxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLnBvcyxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIucHJvdG90eXBlLmVzY2FwZUNoYXJhY3RlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVzY2FwZUNoYXJQb3NpdGlvbnMucHVzaCh0aGlzLnBvcyAtIDEpO1xuICAgIHRoaXMucG9zICs9IDE7XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5FT1M7XG4gICAgfVxuXG4gICAgdmFyIGNoYXIgPSB0aGlzLnN0ci5jaGFyQXQodGhpcy5wb3MpO1xuICAgIHRoaXMucG9zICs9IDE7XG4gICAgcmV0dXJuIGNoYXI7XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLnByb3RvdHlwZS53aWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wb3MgLSB0aGlzLnN0YXJ0O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUuaWdub3JlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ID09IHRoaXMucG9zKSB7XG4gICAgICB0aGlzLnBvcyArPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIucHJvdG90eXBlLmJhY2t1cCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvcyAtPSAxO1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUuYWNjZXB0RGlnaXRSdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYXIsIGNoYXJDb2RlO1xuXG4gICAgZG8ge1xuICAgICAgY2hhciA9IHRoaXMubmV4dCgpO1xuICAgICAgY2hhckNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgfSB3aGlsZSAoY2hhckNvZGUgPiA0NyAmJiBjaGFyQ29kZSA8IDU4KTtcblxuICAgIGlmIChjaGFyICE9IGx1bnIuUXVlcnlMZXhlci5FT1MpIHtcbiAgICAgIHRoaXMuYmFja3VwKCk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUubW9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wb3MgPCB0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIuRU9TID0gXCJFT1NcIjtcbiAgbHVuci5RdWVyeUxleGVyLkZJRUxEID0gXCJGSUVMRFwiO1xuICBsdW5yLlF1ZXJ5TGV4ZXIuVEVSTSA9IFwiVEVSTVwiO1xuICBsdW5yLlF1ZXJ5TGV4ZXIuRURJVF9ESVNUQU5DRSA9IFwiRURJVF9ESVNUQU5DRVwiO1xuICBsdW5yLlF1ZXJ5TGV4ZXIuQk9PU1QgPSBcIkJPT1NUXCI7XG4gIGx1bnIuUXVlcnlMZXhlci5QUkVTRU5DRSA9IFwiUFJFU0VOQ0VcIjtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIubGV4RmllbGQgPSBmdW5jdGlvbiAobGV4ZXIpIHtcbiAgICBsZXhlci5iYWNrdXAoKTtcbiAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5GSUVMRCk7XG4gICAgbGV4ZXIuaWdub3JlKCk7XG4gICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5sZXhUZXJtID0gZnVuY3Rpb24gKGxleGVyKSB7XG4gICAgaWYgKGxleGVyLndpZHRoKCkgPiAxKSB7XG4gICAgICBsZXhlci5iYWNrdXAoKTtcbiAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlRFUk0pO1xuICAgIH1cblxuICAgIGxleGVyLmlnbm9yZSgpO1xuXG4gICAgaWYgKGxleGVyLm1vcmUoKSkge1xuICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIubGV4RWRpdERpc3RhbmNlID0gZnVuY3Rpb24gKGxleGVyKSB7XG4gICAgbGV4ZXIuaWdub3JlKCk7XG4gICAgbGV4ZXIuYWNjZXB0RGlnaXRSdW4oKTtcbiAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5FRElUX0RJU1RBTkNFKTtcbiAgICByZXR1cm4gbHVuci5RdWVyeUxleGVyLmxleFRleHQ7XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLmxleEJvb3N0ID0gZnVuY3Rpb24gKGxleGVyKSB7XG4gICAgbGV4ZXIuaWdub3JlKCk7XG4gICAgbGV4ZXIuYWNjZXB0RGlnaXRSdW4oKTtcbiAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5CT09TVCk7XG4gICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5sZXhFT1MgPSBmdW5jdGlvbiAobGV4ZXIpIHtcbiAgICBpZiAobGV4ZXIud2lkdGgoKSA+IDApIHtcbiAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlRFUk0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBUaGlzIG1hdGNoZXMgdGhlIHNlcGFyYXRvciB1c2VkIHdoZW4gdG9rZW5pc2luZyBmaWVsZHNcbiAgLy8gd2l0aGluIGEgZG9jdW1lbnQuIFRoZXNlIHNob3VsZCBtYXRjaCBvdGhlcndpc2UgaXQgaXNcbiAgLy8gbm90IHBvc3NpYmxlIHRvIHNlYXJjaCBmb3Igc29tZSB0b2tlbnMgd2l0aGluIGEgZG9jdW1lbnQuXG4gIC8vXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byBjaGFuZ2UgdGhlIHNlcGFyYXRvciBvbiB0aGVcbiAgLy8gdG9rZW5pemVyIHNvIGl0IF9taWdodF8gY2xhc2ggd2l0aCBhbnkgb3RoZXIgb2YgdGhlIHNwZWNpYWxcbiAgLy8gY2hhcmFjdGVycyBhbHJlYWR5IHVzZWQgd2l0aGluIHRoZSBzZWFyY2ggc3RyaW5nLCBlLmcuIDouXG4gIC8vXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHNlcGFyYXRvciBpblxuICAvLyBzdWNoIGEgd2F5IHRoYXQgbWFrZXMgc29tZSB3b3JkcyB1bnNlYXJjaGFibGUgdXNpbmcgYSBzZWFyY2hcbiAgLy8gc3RyaW5nLlxuICBsdW5yLlF1ZXJ5TGV4ZXIudGVybVNlcGFyYXRvciA9IGx1bnIudG9rZW5pemVyLnNlcGFyYXRvcjtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIubGV4VGV4dCA9IGZ1bmN0aW9uIChsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgY2hhciA9IGxleGVyLm5leHQoKTtcblxuICAgICAgaWYgKGNoYXIgPT0gbHVuci5RdWVyeUxleGVyLkVPUykge1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeUxleGVyLmxleEVPUztcbiAgICAgIH1cblxuICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlciBpcyAnXFwnXG4gICAgICBpZiAoY2hhci5jaGFyQ29kZUF0KDApID09IDkyKSB7XG4gICAgICAgIGxleGVyLmVzY2FwZUNoYXJhY3RlcigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhGaWVsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT0gXCJ+XCIpIHtcbiAgICAgICAgbGV4ZXIuYmFja3VwKCk7XG4gICAgICAgIGlmIChsZXhlci53aWR0aCgpID4gMCkge1xuICAgICAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlRFUk0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5TGV4ZXIubGV4RWRpdERpc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciA9PSBcIl5cIikge1xuICAgICAgICBsZXhlci5iYWNrdXAoKTtcbiAgICAgICAgaWYgKGxleGVyLndpZHRoKCkgPiAwKSB7XG4gICAgICAgICAgbGV4ZXIuZW1pdChsdW5yLlF1ZXJ5TGV4ZXIuVEVSTSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhCb29zdDtcbiAgICAgIH1cblxuICAgICAgLy8gXCIrXCIgaW5kaWNhdGVzIHRlcm0gcHJlc2VuY2UgaXMgcmVxdWlyZWRcbiAgICAgIC8vIGNoZWNraW5nIGZvciBsZW5ndGggdG8gZW5zdXJlIHRoYXQgb25seVxuICAgICAgLy8gbGVhZGluZyBcIitcIiBhcmUgY29uc2lkZXJlZFxuICAgICAgaWYgKGNoYXIgPT0gXCIrXCIgJiYgbGV4ZXIud2lkdGgoKSA9PT0gMSkge1xuICAgICAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5QUkVTRU5DRSk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5TGV4ZXIubGV4VGV4dDtcbiAgICAgIH1cblxuICAgICAgLy8gXCItXCIgaW5kaWNhdGVzIHRlcm0gcHJlc2VuY2UgaXMgcHJvaGliaXRlZFxuICAgICAgLy8gY2hlY2tpbmcgZm9yIGxlbmd0aCB0byBlbnN1cmUgdGhhdCBvbmx5XG4gICAgICAvLyBsZWFkaW5nIFwiLVwiIGFyZSBjb25zaWRlcmVkXG4gICAgICBpZiAoY2hhciA9PSBcIi1cIiAmJiBsZXhlci53aWR0aCgpID09PSAxKSB7XG4gICAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlBSRVNFTkNFKTtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhci5tYXRjaChsdW5yLlF1ZXJ5TGV4ZXIudGVybVNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXJtO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VyID0gZnVuY3Rpb24gKHN0ciwgcXVlcnkpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IGx1bnIuUXVlcnlMZXhlcihzdHIpO1xuICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRDbGF1c2UgPSB7fTtcbiAgICB0aGlzLmxleGVtZUlkeCA9IDA7XG4gIH07XG5cbiAgbHVuci5RdWVyeVBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sZXhlci5ydW4oKTtcbiAgICB0aGlzLmxleGVtZXMgPSB0aGlzLmxleGVyLmxleGVtZXM7XG5cbiAgICB2YXIgc3RhdGUgPSBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlQ2xhdXNlO1xuXG4gICAgd2hpbGUgKHN0YXRlKSB7XG4gICAgICBzdGF0ZSA9IHN0YXRlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucHJvdG90eXBlLnBlZWtMZXhlbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGV4ZW1lc1t0aGlzLmxleGVtZUlkeF07XG4gIH07XG5cbiAgbHVuci5RdWVyeVBhcnNlci5wcm90b3R5cGUuY29uc3VtZUxleGVtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGV4ZW1lID0gdGhpcy5wZWVrTGV4ZW1lKCk7XG4gICAgdGhpcy5sZXhlbWVJZHggKz0gMTtcbiAgICByZXR1cm4gbGV4ZW1lO1xuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucHJvdG90eXBlLm5leHRDbGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbXBsZXRlZENsYXVzZSA9IHRoaXMuY3VycmVudENsYXVzZTtcbiAgICB0aGlzLnF1ZXJ5LmNsYXVzZShjb21wbGV0ZWRDbGF1c2UpO1xuICAgIHRoaXMuY3VycmVudENsYXVzZSA9IHt9O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VDbGF1c2UgPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgdmFyIGxleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlBSRVNFTkNFOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVByZXNlbmNlO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRklFTEQ6XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlRmllbGQ7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5URVJNOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVRlcm07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICBcImV4cGVjdGVkIGVpdGhlciBhIGZpZWxkIG9yIGEgdGVybSwgZm91bmQgXCIgKyBsZXhlbWUudHlwZTtcblxuICAgICAgICBpZiAobGV4ZW1lLnN0ci5sZW5ndGggPj0gMSkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlICdcIiArIGxleGVtZS5zdHIgKyBcIidcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihlcnJvck1lc3NhZ2UsIGxleGVtZS5zdGFydCwgbGV4ZW1lLmVuZCk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VQcmVzZW5jZSA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChsZXhlbWUuc3RyKSB7XG4gICAgICBjYXNlIFwiLVwiOlxuICAgICAgICBwYXJzZXIuY3VycmVudENsYXVzZS5wcmVzZW5jZSA9IGx1bnIuUXVlcnkucHJlc2VuY2UuUFJPSElCSVRFRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiK1wiOlxuICAgICAgICBwYXJzZXIuY3VycmVudENsYXVzZS5wcmVzZW5jZSA9IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwidW5yZWNvZ25pc2VkIHByZXNlbmNlIG9wZXJhdG9yJ1wiICsgbGV4ZW1lLnN0ciArIFwiJ1wiO1xuICAgICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoZXJyb3JNZXNzYWdlLCBsZXhlbWUuc3RhcnQsIGxleGVtZS5lbmQpO1xuICAgIH1cblxuICAgIHZhciBuZXh0TGV4ZW1lID0gcGFyc2VyLnBlZWtMZXhlbWUoKTtcblxuICAgIGlmIChuZXh0TGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiZXhwZWN0aW5nIHRlcm0gb3IgZmllbGQsIGZvdW5kIG5vdGhpbmdcIjtcbiAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihlcnJvck1lc3NhZ2UsIGxleGVtZS5zdGFydCwgbGV4ZW1lLmVuZCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChuZXh0TGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkZJRUxEOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUZpZWxkO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuVEVSTTpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VUZXJtO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgXCJleHBlY3RpbmcgdGVybSBvciBmaWVsZCwgZm91bmQgJ1wiICsgbmV4dExleGVtZS50eXBlICsgXCInXCI7XG4gICAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgbmV4dExleGVtZS5zdGFydCxcbiAgICAgICAgICBuZXh0TGV4ZW1lLmVuZFxuICAgICAgICApO1xuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlRmllbGQgPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgdmFyIGxleGVtZSA9IHBhcnNlci5jb25zdW1lTGV4ZW1lKCk7XG5cbiAgICBpZiAobGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJzZXIucXVlcnkuYWxsRmllbGRzLmluZGV4T2YobGV4ZW1lLnN0cikgPT0gLTEpIHtcbiAgICAgIHZhciBwb3NzaWJsZUZpZWxkcyA9IHBhcnNlci5xdWVyeS5hbGxGaWVsZHNcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICByZXR1cm4gXCInXCIgKyBmICsgXCInXCI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgIFwidW5yZWNvZ25pc2VkIGZpZWxkICdcIiArXG4gICAgICAgICAgbGV4ZW1lLnN0ciArXG4gICAgICAgICAgXCInLCBwb3NzaWJsZSBmaWVsZHM6IFwiICtcbiAgICAgICAgICBwb3NzaWJsZUZpZWxkcztcblxuICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKGVycm9yTWVzc2FnZSwgbGV4ZW1lLnN0YXJ0LCBsZXhlbWUuZW5kKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuY3VycmVudENsYXVzZS5maWVsZHMgPSBbbGV4ZW1lLnN0cl07XG5cbiAgICB2YXIgbmV4dExleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobmV4dExleGVtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBcImV4cGVjdGluZyB0ZXJtLCBmb3VuZCBub3RoaW5nXCI7XG4gICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoZXJyb3JNZXNzYWdlLCBsZXhlbWUuc3RhcnQsIGxleGVtZS5lbmQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobmV4dExleGVtZS50eXBlKSB7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5URVJNOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVRlcm07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gXCJleHBlY3RpbmcgdGVybSwgZm91bmQgJ1wiICsgbmV4dExleGVtZS50eXBlICsgXCInXCI7XG4gICAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgbmV4dExleGVtZS5zdGFydCxcbiAgICAgICAgICBuZXh0TGV4ZW1lLmVuZFxuICAgICAgICApO1xuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlVGVybSA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyc2VyLmN1cnJlbnRDbGF1c2UudGVybSA9IGxleGVtZS5zdHIudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsZXhlbWUuc3RyLmluZGV4T2YoXCIqXCIpICE9IC0xKSB7XG4gICAgICBwYXJzZXIuY3VycmVudENsYXVzZS51c2VQaXBlbGluZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBuZXh0TGV4ZW1lID0gcGFyc2VyLnBlZWtMZXhlbWUoKTtcblxuICAgIGlmIChuZXh0TGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VyLm5leHRDbGF1c2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5leHRMZXhlbWUudHlwZSkge1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuVEVSTTpcbiAgICAgICAgcGFyc2VyLm5leHRDbGF1c2UoKTtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VUZXJtO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRklFTEQ6XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlRmllbGQ7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5FRElUX0RJU1RBTkNFOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUVkaXREaXN0YW5jZTtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkJPT1NUOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUJvb3N0O1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuUFJFU0VOQ0U6XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlUHJlc2VuY2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmV4cGVjdGVkIGxleGVtZSB0eXBlICdcIiArIG5leHRMZXhlbWUudHlwZSArIFwiJ1wiO1xuICAgICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIG5leHRMZXhlbWUuc3RhcnQsXG4gICAgICAgICAgbmV4dExleGVtZS5lbmRcbiAgICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgbHVuci5RdWVyeVBhcnNlci5wYXJzZUVkaXREaXN0YW5jZSA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVkaXREaXN0YW5jZSA9IHBhcnNlSW50KGxleGVtZS5zdHIsIDEwKTtcblxuICAgIGlmIChpc05hTihlZGl0RGlzdGFuY2UpKSB7XG4gICAgICB2YXIgZXJyb3JNZXNzYWdlID0gXCJlZGl0IGRpc3RhbmNlIG11c3QgYmUgbnVtZXJpY1wiO1xuICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKGVycm9yTWVzc2FnZSwgbGV4ZW1lLnN0YXJ0LCBsZXhlbWUuZW5kKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuY3VycmVudENsYXVzZS5lZGl0RGlzdGFuY2UgPSBlZGl0RGlzdGFuY2U7XG5cbiAgICB2YXIgbmV4dExleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobmV4dExleGVtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChuZXh0TGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlRFUk06XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlVGVybTtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkZJRUxEOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUZpZWxkO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRURJVF9ESVNUQU5DRTpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VFZGl0RGlzdGFuY2U7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5CT09TVDpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VCb29zdDtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlBSRVNFTkNFOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVByZXNlbmNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiVW5leHBlY3RlZCBsZXhlbWUgdHlwZSAnXCIgKyBuZXh0TGV4ZW1lLnR5cGUgKyBcIidcIjtcbiAgICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKFxuICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICBuZXh0TGV4ZW1lLnN0YXJ0LFxuICAgICAgICAgIG5leHRMZXhlbWUuZW5kXG4gICAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VCb29zdCA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJvb3N0ID0gcGFyc2VJbnQobGV4ZW1lLnN0ciwgMTApO1xuXG4gICAgaWYgKGlzTmFOKGJvb3N0KSkge1xuICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiYm9vc3QgbXVzdCBiZSBudW1lcmljXCI7XG4gICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoZXJyb3JNZXNzYWdlLCBsZXhlbWUuc3RhcnQsIGxleGVtZS5lbmQpO1xuICAgIH1cblxuICAgIHBhcnNlci5jdXJyZW50Q2xhdXNlLmJvb3N0ID0gYm9vc3Q7XG5cbiAgICB2YXIgbmV4dExleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobmV4dExleGVtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChuZXh0TGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlRFUk06XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlVGVybTtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkZJRUxEOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUZpZWxkO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRURJVF9ESVNUQU5DRTpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VFZGl0RGlzdGFuY2U7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5CT09TVDpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VCb29zdDtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlBSRVNFTkNFOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVByZXNlbmNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiVW5leHBlY3RlZCBsZXhlbWUgdHlwZSAnXCIgKyBuZXh0TGV4ZW1lLnR5cGUgKyBcIidcIjtcbiAgICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKFxuICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICBuZXh0TGV4ZW1lLnN0YXJ0LFxuICAgICAgICAgIG5leHRMZXhlbWUuZW5kXG4gICAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBleHBvcnQgdGhlIG1vZHVsZSB2aWEgQU1ELCBDb21tb25KUyBvciBhcyBhIGJyb3dzZXIgZ2xvYmFsXG4gICAqIEV4cG9ydCBjb2RlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZC9ibG9iL21hc3Rlci9yZXR1cm5FeHBvcnRzLmpzXG4gICAqL1xuICAoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvKipcbiAgICAgICAqIE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxuICAgICAgICogb25seSBDb21tb25KUy1saWtlIGVudmlyb21lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcbiAgICAgICAqIGxpa2UgTm9kZS5cbiAgICAgICAqL1xuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgICByb290Lmx1bnIgPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogSnVzdCByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBleHBvcnQuXG4gICAgICogVGhpcyBleGFtcGxlIHJldHVybnMgYW4gb2JqZWN0LCBidXQgdGhlIG1vZHVsZVxuICAgICAqIGNhbiByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgZXhwb3J0ZWQgdmFsdWUuXG4gICAgICovXG4gICAgcmV0dXJuIGx1bnI7XG4gIH0pO1xufSkoKTtcbiIsCiAgICAiaW1wb3J0IGx1bnIgZnJvbSBcImx1bnJcIjtcblxuLyoqXG4gKiBUaGlzIGlzIGEgbG90IG9mIGhhY2t5IGJ1bGxzaGl0LiBUaGUgbWFpbiB0aGluZyBpcyB0aGVyZSdzIGEgcG9wb3ZlciBlbGVtZW50LCBhIGRlYm91bmNlZCBpbnB1dFxuICogZmllbGQsIGEgc2VhcmNoIGZ1bmN0aW9uLCBhbmQgYSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBhbiBIVE1MIHN0cmluZyB0byBwbG9wIGludG8gdGhlIHJlc3VsdHMuXG4gKi9cblxuaW50ZXJmYWNlIE1hdGNoRGF0YSB7XG4gIG1ldGFkYXRhOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxrZXlvZiBTZWFyY2hEb2MsIHsgcG9zaXRpb246IFtudW1iZXIsIG51bWJlcl1bXSB9PlxuICA+O1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoRG9jIHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBkb1NlYXJjaChcbiAgZG9jc0J5UmVmOiBSZWNvcmQ8c3RyaW5nLCBTZWFyY2hEb2M+LFxuICBsOiBsdW5yLkluZGV4LFxuICBxdWVyeTogc3RyaW5nLFxuICByZXN1bHRFbDogSFRNTERpdkVsZW1lbnRcbikge1xuICBpZiAoIXF1ZXJ5LnRyaW0oKS5sZW5ndGgpIHtcbiAgICByZXN1bHRFbC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cIkRKU2VhcmNoUmVzdWx0c19FbXB0eSBtLW5vcXVlcnlcIj5UeXBlIGEgc2VhcmNoIGludG8gdGhlIGJveC48L2Rpdj5gO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gbC5xdWVyeShmdW5jdGlvbiAocSkge1xuICAgIHEudGVybShxdWVyeSwgeyBib29zdDogMTAwLCB1c2VQaXBlbGluZTogdHJ1ZSB9KTtcbiAgICBxLnRlcm0ocXVlcnksIHtcbiAgICAgIGJvb3N0OiAxMCxcbiAgICAgIHVzZVBpcGVsaW5lOiBmYWxzZSxcbiAgICAgIHdpbGRjYXJkOiBsdW5yLlF1ZXJ5LndpbGRjYXJkLlRSQUlMSU5HLFxuICAgIH0pO1xuICAgIHEudGVybShxdWVyeSwgeyBib29zdDogMSwgZWRpdERpc3RhbmNlOiAxIH0pO1xuICB9KTtcblxuICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9XCJESlNlYXJjaFJlc3VsdHNfRW1wdHkgbS1ub3Jlc3VsdHNcIj5ObyByZXN1bHRzIGZvdW5kLjwvZGl2PmA7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVzdWx0RWwuaW5uZXJIVE1MID0gcmVzdWx0c1xuICAgIC5tYXAoKHIpID0+IGJ1aWxkUmVzdWx0SFRNTChyLCBkb2NzQnlSZWZbci5yZWZdKSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZXN1bHRIVE1MKHJlc3VsdDogbHVuci5JbmRleC5SZXN1bHQsIGRvYzogU2VhcmNoRG9jKTogc3RyaW5nIHtcbiAgY29uc3QgbWV0YWRhdGEgPSAocmVzdWx0Lm1hdGNoRGF0YSBhcyBNYXRjaERhdGEpLm1ldGFkYXRhO1xuICByZXR1cm4gYFxuICA8YSBjbGFzcz1cIkRKU2VhcmNoUmVzdWx0XCIgdGFiaW5kZXg9XCIwXCIgaHJlZj1cIiR7ZG9jLnVybH1cIj5cbiAgICA8aDE+JHtidWlsZEhpZ2hsaWdodGVkVGVybXNIVE1MKGRvYy5uYW1lLCBcIm5hbWVcIiwgbWV0YWRhdGEsIGZhbHNlKX08L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJESlNlYXJjaFJlc3VsdF9UZXh0XCI+JHtidWlsZEhpZ2hsaWdodGVkVGVybXNIVE1MKFxuICAgICAgZG9jLnRleHQsXG4gICAgICBcInRleHRcIixcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdHJ1ZVxuICAgICl9PC9kaXY+XG4gIDwvZGl2PmA7XG59XG5cbmludGVyZmFjZSBTdWJzdHJpbmdMaW5lIHtcbiAgc3RhcnRJbmNsdXNpdmU6IG51bWJlcjtcbiAgZW5kRXhjbHVzaXZlOiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gYnVpbGRIaWdobGlnaHRlZFRlcm1zSFRNTChcbiAgdGV4dDogc3RyaW5nLFxuICBtZXRhZGF0YUtleToga2V5b2YgU2VhcmNoRG9jLFxuICBtZXRhZGF0YTogTWF0Y2hEYXRhW1wibWV0YWRhdGFcIl0sIC8vIHRlcm06IGZpZWxkOiBwb3NpdGlvbltdXG4gIHVzZVBhcmFncmFwaHM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGxldCBwb3NpdGlvbnMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcblxuICBmb3IgKGNvbnN0IHRlcm1NZXRhZGF0YSBvZiBPYmplY3QudmFsdWVzKG1ldGFkYXRhKSkge1xuICAgIGlmICghdGVybU1ldGFkYXRhW21ldGFkYXRhS2V5XSkgY29udGludWU7XG4gICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdCh0ZXJtTWV0YWRhdGFbbWV0YWRhdGFLZXldLnBvc2l0aW9uKTtcbiAgfVxuICBwb3NpdGlvbnMuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pO1xuXG4gIGxldCB0ZXh0SW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIGdldE5leHRMaW5lKCk6IG51bGwgfCBTdWJzdHJpbmdMaW5lIHtcbiAgICBpZiAodGV4dEluZGV4ID49IHRleHQubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsYkluZGV4ID0gdGV4dC5pbmRleE9mKFwiXFxuXCIsIHRleHRJbmRleCk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0SW5kZXggPSB0ZXh0SW5kZXg7XG4gICAgbGV0IHN1YnN0cmluZyA9IFwiXCI7XG4gICAgaWYgKGxiSW5kZXggPj0gMCkge1xuICAgICAgc3Vic3RyaW5nID0gdGV4dC5zbGljZSh0ZXh0SW5kZXgsIGxiSW5kZXgpO1xuICAgICAgdGV4dEluZGV4ID0gbGJJbmRleCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YnN0cmluZyA9IHRleHQuc2xpY2UodGV4dEluZGV4KTtcbiAgICAgIHRleHRJbmRleCA9IHRleHQubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRJbmNsdXNpdmU6IG9yaWdpbmFsVGV4dEluZGV4LFxuICAgICAgZW5kRXhjbHVzaXZlOiB0ZXh0SW5kZXgsXG4gICAgICB0ZXh0OiBzdWJzdHJpbmcsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh1c2VQYXJhZ3JhcGhzKSB7XG4gICAgbGV0IG5leHRMaW5lID0gZ2V0TmV4dExpbmUoKTtcbiAgICB3aGlsZSAobmV4dExpbmUpIHtcbiAgICAgIC8vIFdBUk5JTkc6IE5eMiBBTEdPUklUSE0hXG4gICAgICBjb25zdCByZWxldmFudFBvc2l0aW9ucyA9IHBvc2l0aW9ucy5maWx0ZXIoXG4gICAgICAgIChwb3MpID0+XG4gICAgICAgICAgcG9zWzBdID49IG5leHRMaW5lIS5zdGFydEluY2x1c2l2ZSAmJiBwb3NbMF0gPCBuZXh0TGluZSEuZW5kRXhjbHVzaXZlXG4gICAgICApO1xuICAgICAgaWYgKHJlbGV2YW50UG9zaXRpb25zLmxlbmd0aClcbiAgICAgICAgcmVzdWx0LnB1c2goYDxwPiR7bGluZVRvSFRNTChuZXh0TGluZSwgcmVsZXZhbnRQb3NpdGlvbnMpfWApO1xuICAgICAgbmV4dExpbmUgPSBnZXROZXh0TGluZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucHVzaChcbiAgICAgIGxpbmVUb0hUTUwoXG4gICAgICAgIHsgc3RhcnRJbmNsdXNpdmU6IDAsIGVuZEV4Y2x1c2l2ZTogdGV4dC5sZW5ndGgsIHRleHQgfSxcbiAgICAgICAgcG9zaXRpb25zXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gbGluZVRvSFRNTChcbiAgbGluZTogU3Vic3RyaW5nTGluZSxcbiAgcG9zaXRpb25zOiBbbnVtYmVyLCBudW1iZXJdW11cbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgbGV0IGxhc3RQbGFpbkluZGV4ID0gMDtcblxuICBmb3IgKGNvbnN0IFtzdGFydCwgbGVuXSBvZiBwb3NpdGlvbnMpIHtcbiAgICBjb25zdCBsb2NhbFN0YXJ0ID0gc3RhcnQgLSBsaW5lLnN0YXJ0SW5jbHVzaXZlO1xuICAgIGlmIChsb2NhbFN0YXJ0ID4gbGFzdFBsYWluSW5kZXgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGxpbmUudGV4dC5zbGljZShsYXN0UGxhaW5JbmRleCwgbG9jYWxTdGFydCkpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChcIjxtYXJrPlwiKTtcbiAgICByZXN1bHQucHVzaChsaW5lLnRleHQuc2xpY2UobG9jYWxTdGFydCwgbG9jYWxTdGFydCArIGxlbikpO1xuICAgIHJlc3VsdC5wdXNoKFwiPC9tYXJrPlwiKTtcbiAgICBsYXN0UGxhaW5JbmRleCA9IGxvY2FsU3RhcnQgKyBsZW47XG4gIH1cblxuICBpZiAobGFzdFBsYWluSW5kZXggPCBsaW5lLnRleHQubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnB1c2gobGluZS50ZXh0LnNsaWNlKGxhc3RQbGFpbkluZGV4KSk7XG4gIH1cblxuICBpZiAoIXJlc3VsdC5sZW5ndGgpIHJldHVybiBcIlwiO1xuXG4gIHJldHVybiByZXN1bHQuam9pbihcIlwiKTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkai1vbmxvYWRcIiwgKCkgPT4ge1xuICBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICBcIiNkai1zZWFyY2gtaW5wdXRcIlxuICApIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICBpZiAoIWlucHV0RWwpIHJldHVybjtcblxuICBjb25zdCByZXN1bHRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgXCIjZGotc2VhcmNoLW1lbnUtcmVzdWx0c1wiXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xuICBpZiAoIXJlc3VsdEVsKSByZXR1cm47XG5cbiAgY29uc3QgcG9wb3ZlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICBcIiNkai1zZWFyY2gtbWVudVwiXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xuICBpZiAoIXBvcG92ZXJFbCkgcmV0dXJuO1xuXG4gIC8vIFRoZSBmbGV4IGNvbnRhaW5lciBzZWVtcyB0byBwcmV2ZW50IHRoZSBiYWNrZHJvcCBmcm9tIGdldHRpbmcgY2xpY2sgZXZlbnRzLiA6LShcbiAgLy8gU28ganVzdCBjbG9zZSB0aGUgZGFtbiB0aGluZyBvbiBjbGljay5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ESlNlYXJjaE1lbnVfRmxleENvbnRhaW5lclwiKS5mb3JFYWNoKChmbGV4RWwpID0+IHtcbiAgICBmbGV4RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICBpZiAoZS50YXJnZXQgIT09IGZsZXhFbCkgcmV0dXJuO1xuICAgICAgcG9wb3ZlckVsLmhpZGVQb3BvdmVyKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB7XG4gICAgZGpTZWFyY2hJbmRleD86IHsgbmFtZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IHVybDogc3RyaW5nIH1bXTtcbiAgfTtcbiAgaWYgKCF3aW4uZGpTZWFyY2hJbmRleCkge1xuICAgIGNvbnNvbGUud2FybihcIlNlYXJjaCBpbmRleCBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlYXJjaEluZGV4ID0gd2luLmRqU2VhcmNoSW5kZXg7XG5cbiAgY29uc3QgZG9jc0J5UmVmOiBSZWNvcmQ8c3RyaW5nLCBTZWFyY2hEb2M+ID0ge307XG5cbiAgY29uc3QgbCA9IGx1bnIoZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVmKFwidXJsXCIpO1xuICAgIHRoaXMuZmllbGQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZmllbGQoXCJ0ZXh0XCIpO1xuICAgIHRoaXMuZmllbGQoXCJ1cmxcIik7XG5cbiAgICB0aGlzLm1ldGFkYXRhV2hpdGVsaXN0ID0gW1wicG9zaXRpb25cIl07XG5cbiAgICBmb3IgKGNvbnN0IGRvYyBvZiBzZWFyY2hJbmRleCkge1xuICAgICAgdGhpcy5hZGQoZG9jKTtcbiAgICAgIGRvY3NCeVJlZltkb2MudXJsXSA9IGRvYztcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGRlYm91bmNlKFxuICAgIGZ1bmM6IEZ1bmN0aW9uLFxuICAgIHdhaXQ6IG51bWJlcixcbiAgICBpbW1lZGlhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBhbHdheXNJbW1lZGlhdGVDYWxsYmFjaz86ICgpID0+IHZvaWRcbiAgKTogdHlwZW9mIGZ1bmMge1xuICAgIGxldCB0aW1lb3V0OiBhbnkgfCBudWxsID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHVua25vd24pIHtcbiAgICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICAgIGxldCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgbGV0IGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9O1xuICAgICAgbGV0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCEpO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGFsd2F5c0ltbWVkaWF0ZUNhbGxiYWNrKSBhbHdheXNJbW1lZGlhdGVDYWxsYmFjaygpO1xuICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaGVyID0gZGVib3VuY2UoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICBkb1NlYXJjaChkb2NzQnlSZWYsIGwsIHF1ZXJ5LCByZXN1bHRFbCk7XG4gIH0sIDUwMCk7XG5cbiAgLy8gdXNlICdpbnB1dCcgZm9yIGtleXN0cm9rZXMsICdjaGFuZ2UnIGZvciBlbnRlciBvciB1bmZvY3VzXG4gIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgZGVib3VuY2VkU2VhcmNoZXIoKGUudGFyZ2V0ISBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gIH0pO1xuXG4gIChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLkRKT3BlblNlYXJjaEJ1dHRvblwiKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnRcbiAgKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgcG9wb3ZlckVsLnNob3dQb3BvdmVyKCk7XG4gICAgaW5wdXRFbC5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcbiAgICBpZiAocG9wb3ZlckVsLm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47XG4gICAgaWYgKGUua2V5ID09PSBcIi9cIikge1xuICAgICAgcG9wb3ZlckVsLnNob3dQb3BvdmVyKCk7XG4gICAgICBpbnB1dEVsLmZvY3VzKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9KTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBwb3BvdmVyRWwuaGlkZVBvcG92ZXIo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 +//# debugId=9838CAA419E2646E64756E2164756E21 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2x1bnIvbHVuci5qcyIsICJzcmMvY2xpZW50anMvc2VhcmNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogbHVuciAtIGh0dHA6Ly9sdW5yanMuY29tIC0gQSBiaXQgbGlrZSBTb2xyLCBidXQgbXVjaCBzbWFsbGVyIGFuZCBub3QgYXMgYnJpZ2h0IC0gMi4zLjlcbiAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb25maWd1cmluZyBhbmQgY29uc3RydWN0aW5nXG4gICAqIGEgbmV3IGx1bnIgSW5kZXguXG4gICAqXG4gICAqIEEgbHVuci5CdWlsZGVyIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIHRoZSBwaXBlbGluZSBzZXR1cFxuICAgKiB3aXRoIGEgdHJpbW1lciwgc3RvcCB3b3JkIGZpbHRlciBhbmQgc3RlbW1lci5cbiAgICpcbiAgICogVGhpcyBidWlsZGVyIG9iamVjdCBpcyB5aWVsZGVkIHRvIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uXG4gICAqIHRoYXQgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLCBhbGxvd2luZyB0aGUgbGlzdCBvZiBmaWVsZHNcbiAgICogYW5kIG90aGVyIGJ1aWxkZXIgcGFyYW1ldGVycyB0byBiZSBjdXN0b21pc2VkLlxuICAgKlxuICAgKiBBbGwgZG9jdW1lbnRzIF9tdXN0XyBiZSBhZGRlZCB3aXRoaW4gdGhlIHBhc3NlZCBjb25maWcgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHZhciBpZHggPSBsdW5yKGZ1bmN0aW9uICgpIHtcbiAgICogICB0aGlzLmZpZWxkKCd0aXRsZScpXG4gICAqICAgdGhpcy5maWVsZCgnYm9keScpXG4gICAqICAgdGhpcy5yZWYoJ2lkJylcbiAgICpcbiAgICogICBkb2N1bWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9jKSB7XG4gICAqICAgICB0aGlzLmFkZChkb2MpXG4gICAqICAgfSwgdGhpcylcbiAgICogfSlcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgbHVuci5CdWlsZGVyfVxuICAgKiBAc2VlIHtAbGluayBsdW5yLlBpcGVsaW5lfVxuICAgKiBAc2VlIHtAbGluayBsdW5yLnRyaW1tZXJ9XG4gICAqIEBzZWUge0BsaW5rIGx1bnIuc3RvcFdvcmRGaWx0ZXJ9XG4gICAqIEBzZWUge0BsaW5rIGx1bnIuc3RlbW1lcn1cbiAgICogQG5hbWVzcGFjZSB7ZnVuY3Rpb259IGx1bnJcbiAgICovXG4gIHZhciBsdW5yID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHZhciBidWlsZGVyID0gbmV3IGx1bnIuQnVpbGRlcigpO1xuXG4gICAgYnVpbGRlci5waXBlbGluZS5hZGQobHVuci50cmltbWVyLCBsdW5yLnN0b3BXb3JkRmlsdGVyLCBsdW5yLnN0ZW1tZXIpO1xuXG4gICAgYnVpbGRlci5zZWFyY2hQaXBlbGluZS5hZGQobHVuci5zdGVtbWVyKTtcblxuICAgIGNvbmZpZy5jYWxsKGJ1aWxkZXIsIGJ1aWxkZXIpO1xuICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7XG4gIH07XG5cbiAgbHVuci52ZXJzaW9uID0gXCIyLjMuOVwiO1xuICAvKiFcbiAgICogbHVuci51dGlsc1xuICAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgT2xpdmVyIE5pZ2h0aW5nYWxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBIG5hbWVzcGFjZSBjb250YWluaW5nIHV0aWxzIGZvciB0aGUgcmVzdCBvZiB0aGUgbHVuciBsaWJyYXJ5XG4gICAqIEBuYW1lc3BhY2UgbHVuci51dGlsc1xuICAgKi9cbiAgbHVuci51dGlscyA9IHt9O1xuXG4gIC8qKlxuICAgKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZC5cbiAgICogQG1lbWJlck9mIGx1bnIudXRpbHNcbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBsdW5yLnV0aWxzLndhcm4gPSAoZnVuY3Rpb24gKGdsb2JhbCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgIGlmIChnbG9iYWwuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIH0pKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIG9iamVjdCB0byBhIHN0cmluZy5cbiAgICpcbiAgICogSW4gdGhlIGNhc2Ugb2YgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB0aGUgZnVuY3Rpb24gcmV0dXJuc1xuICAgKiB0aGUgZW1wdHkgc3RyaW5nLCBpbiBhbGwgb3RoZXIgY2FzZXMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nXG4gICAqIGB0b1N0cmluZ2Agb24gdGhlIHBhc3NlZCBvYmplY3QgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QW55fSBvYmogVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkIG9iamVjdC5cbiAgICogQG1lbWJlck9mIGx1bnIudXRpbHNcbiAgICovXG4gIGx1bnIudXRpbHMuYXNTdHJpbmcgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaiA9PT0gdm9pZCAwIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENsb25lcyBhbiBvYmplY3QuXG4gICAqXG4gICAqIFdpbGwgY3JlYXRlIGEgY29weSBvZiBhbiBleGlzdGluZyBvYmplY3Qgc3VjaCB0aGF0IGFueSBtdXRhdGlvbnNcbiAgICogb24gdGhlIGNvcHkgY2Fubm90IGFmZmVjdCB0aGUgb3JpZ2luYWwuXG4gICAqXG4gICAqIE9ubHkgc2hhbGxvdyBvYmplY3RzIGFyZSBzdXBwb3J0ZWQsIHBhc3NpbmcgYSBuZXN0ZWQgb2JqZWN0IHRvIHRoaXNcbiAgICogZnVuY3Rpb24gd2lsbCBjYXVzZSBhIFR5cGVFcnJvci5cbiAgICpcbiAgICogT2JqZWN0cyB3aXRoIHByaW1pdGl2ZXMsIGFuZCBhcnJheXMgb2YgcHJpbWl0aXZlcyBhcmUgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAqIEByZXR1cm4ge09iamVjdH0gYSBjbG9uZSBvZiB0aGUgcGFzc2VkIG9iamVjdC5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSB3aGVuIGEgbmVzdGVkIG9iamVjdCBpcyBwYXNzZWQuXG4gICAqIEBtZW1iZXJPZiBVdGlsc1xuICAgKi9cbiAgbHVuci51dGlscy5jbG9uZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHZhciBjbG9uZSA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV0sXG4gICAgICAgIHZhbCA9IG9ialtrZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGNsb25lW2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgIHR5cGVvZiB2YWwgPT09IFwiYm9vbGVhblwiXG4gICAgICApIHtcbiAgICAgICAgY2xvbmVba2V5XSA9IHZhbDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiY2xvbmUgaXMgbm90IGRlZXAgYW5kIGRvZXMgbm90IHN1cHBvcnQgbmVzdGVkIG9iamVjdHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH07XG4gIGx1bnIuRmllbGRSZWYgPSBmdW5jdGlvbiAoZG9jUmVmLCBmaWVsZE5hbWUsIHN0cmluZ1ZhbHVlKSB7XG4gICAgdGhpcy5kb2NSZWYgPSBkb2NSZWY7XG4gICAgdGhpcy5maWVsZE5hbWUgPSBmaWVsZE5hbWU7XG4gICAgdGhpcy5fc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgfTtcblxuICBsdW5yLkZpZWxkUmVmLmpvaW5lciA9IFwiL1wiO1xuXG4gIGx1bnIuRmllbGRSZWYuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzKSB7XG4gICAgdmFyIG4gPSBzLmluZGV4T2YobHVuci5GaWVsZFJlZi5qb2luZXIpO1xuXG4gICAgaWYgKG4gPT09IC0xKSB7XG4gICAgICB0aHJvdyBcIm1hbGZvcm1lZCBmaWVsZCByZWYgc3RyaW5nXCI7XG4gICAgfVxuXG4gICAgdmFyIGZpZWxkUmVmID0gcy5zbGljZSgwLCBuKSxcbiAgICAgIGRvY1JlZiA9IHMuc2xpY2UobiArIDEpO1xuXG4gICAgcmV0dXJuIG5ldyBsdW5yLkZpZWxkUmVmKGRvY1JlZiwgZmllbGRSZWYsIHMpO1xuICB9O1xuXG4gIGx1bnIuRmllbGRSZWYucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9zdHJpbmdWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3N0cmluZ1ZhbHVlID0gdGhpcy5maWVsZE5hbWUgKyBsdW5yLkZpZWxkUmVmLmpvaW5lciArIHRoaXMuZG9jUmVmO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpbmdWYWx1ZTtcbiAgfTtcbiAgLyohXG4gICAqIGx1bnIuU2V0XG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEEgbHVuciBzZXQuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgbHVuci5TZXQgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHtcbiAgICB0aGlzLmVsZW1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmIChlbGVtZW50cykge1xuICAgICAgdGhpcy5sZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW2VsZW1lbnRzW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgY29tcGxldGUgc2V0IHRoYXQgY29udGFpbnMgYWxsIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7bHVuci5TZXR9XG4gICAqL1xuICBsdW5yLlNldC5jb21wbGV0ZSA9IHtcbiAgICBpbnRlcnNlY3Q6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0sXG5cbiAgICB1bmlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBBbiBlbXB0eSBzZXQgdGhhdCBjb250YWlucyBubyBlbGVtZW50cy5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2x1bnIuU2V0fVxuICAgKi9cbiAgbHVuci5TZXQuZW1wdHkgPSB7XG4gICAgaW50ZXJzZWN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgdW5pb246IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0sXG5cbiAgICBjb250YWluczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHNldCBjb250YWlucyB0aGUgc3BlY2lmaWVkIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIE9iamVjdCB3aG9zZSBwcmVzZW5jZSBpbiB0aGlzIHNldCBpcyB0byBiZSB0ZXN0ZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgdGhpcyBzZXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBvYmplY3QuXG4gICAqL1xuICBsdW5yLlNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuICEhdGhpcy5lbGVtZW50c1tvYmplY3RdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIHByZXNlbnQgaW4gYm90aFxuICAgKiB0aGlzIHNldCBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5TZXR9IG90aGVyIC0gc2V0IHRvIGludGVyc2VjdCB3aXRoIHRoaXMgc2V0LlxuICAgKiBAcmV0dXJucyB7bHVuci5TZXR9IGEgbmV3IHNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqL1xuXG4gIGx1bnIuU2V0LnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICB2YXIgYSxcbiAgICAgIGIsXG4gICAgICBlbGVtZW50cyxcbiAgICAgIGludGVyc2VjdGlvbiA9IFtdO1xuXG4gICAgaWYgKG90aGVyID09PSBsdW5yLlNldC5jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyID09PSBsdW5yLlNldC5lbXB0eSkge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA8IG90aGVyLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gb3RoZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBvdGhlcjtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGVsZW1lbnRzID0gT2JqZWN0LmtleXMoYS5lbGVtZW50cyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsZW1lbnQgaW4gYi5lbGVtZW50cykge1xuICAgICAgICBpbnRlcnNlY3Rpb24ucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGx1bnIuU2V0KGludGVyc2VjdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgc2V0IGNvbWJpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5TZXR9IG90aGVyIC0gc2V0IHRvIHVuaW9uIHdpdGggdGhpcyBzZXQuXG4gICAqIEByZXR1cm4ge2x1bnIuU2V0fSBhIG5ldyBzZXQgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBzZXQuXG4gICAqL1xuXG4gIGx1bnIuU2V0LnByb3RvdHlwZS51bmlvbiA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmIChvdGhlciA9PT0gbHVuci5TZXQuY29tcGxldGUpIHtcbiAgICAgIHJldHVybiBsdW5yLlNldC5jb21wbGV0ZTtcbiAgICB9XG5cbiAgICBpZiAob3RoZXIgPT09IGx1bnIuU2V0LmVtcHR5KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGx1bnIuU2V0KFxuICAgICAgT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuY29uY2F0KE9iamVjdC5rZXlzKG90aGVyLmVsZW1lbnRzKSlcbiAgICApO1xuICB9O1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGludmVyc2UgZG9jdW1lbnQgZnJlcXVlbmN5IGZvclxuICAgKiBhIHBvc3RpbmcuIFRoaXMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIGJ1aWxkZXIgYW5kIHRoZSBpbmRleFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcG9zdGluZyAtIFRoZSBwb3N0aW5nIGZvciBhIGdpdmVuIHRlcm1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRvY3VtZW50Q291bnQgLSBUaGUgdG90YWwgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICovXG4gIGx1bnIuaWRmID0gZnVuY3Rpb24gKHBvc3RpbmcsIGRvY3VtZW50Q291bnQpIHtcbiAgICB2YXIgZG9jdW1lbnRzV2l0aFRlcm0gPSAwO1xuXG4gICAgZm9yICh2YXIgZmllbGROYW1lIGluIHBvc3RpbmcpIHtcbiAgICAgIGlmIChmaWVsZE5hbWUgPT0gXCJfaW5kZXhcIikgY29udGludWU7IC8vIElnbm9yZSB0aGUgdGVybSBpbmRleCwgaXRzIG5vdCBhIGZpZWxkXG4gICAgICBkb2N1bWVudHNXaXRoVGVybSArPSBPYmplY3Qua2V5cyhwb3N0aW5nW2ZpZWxkTmFtZV0pLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgeCA9XG4gICAgICAoZG9jdW1lbnRDb3VudCAtIGRvY3VtZW50c1dpdGhUZXJtICsgMC41KSAvIChkb2N1bWVudHNXaXRoVGVybSArIDAuNSk7XG5cbiAgICByZXR1cm4gTWF0aC5sb2coMSArIE1hdGguYWJzKHgpKTtcbiAgfTtcblxuICAvKipcbiAgICogQSB0b2tlbiB3cmFwcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRva2VuXG4gICAqIGFzIGl0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZSB0ZXh0IHByb2Nlc3NpbmcgcGlwZWxpbmUuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cj0nJ10gLSBUaGUgc3RyaW5nIHRva2VuIGJlaW5nIHdyYXBwZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbbWV0YWRhdGE9e31dIC0gTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4uXG4gICAqL1xuICBsdW5yLlRva2VuID0gZnVuY3Rpb24gKHN0ciwgbWV0YWRhdGEpIHtcbiAgICB0aGlzLnN0ciA9IHN0ciB8fCBcIlwiO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YSB8fCB7fTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9rZW4gc3RyaW5nIHRoYXQgaXMgYmVpbmcgd3JhcHBlZCBieSB0aGlzIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGx1bnIuVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnN0cjtcbiAgfTtcblxuICAvKipcbiAgICogQSB0b2tlbiB1cGRhdGUgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHVwZGF0aW5nIG9yIG9wdGlvbmFsbHlcbiAgICogd2hlbiBjbG9uaW5nIGEgdG9rZW4uXG4gICAqXG4gICAqIEBjYWxsYmFjayBsdW5yLlRva2VufnVwZGF0ZUZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0b2tlbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhIC0gQWxsIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuLlxuICAgKi9cblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gdGhlIHdyYXBwZWQgc3RyaW5nIHRva2VuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0b2tlbi51cGRhdGUoZnVuY3Rpb24gKHN0ciwgbWV0YWRhdGEpIHtcbiAgICogICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKClcbiAgICogfSlcbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlRva2VufnVwZGF0ZUZ1bmN0aW9ufSBmbiAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gdGhlIHRva2VuIHN0cmluZy5cbiAgICogQHJldHVybnMge2x1bnIuVG9rZW59XG4gICAqL1xuICBsdW5yLlRva2VuLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB0aGlzLnN0ciA9IGZuKHRoaXMuc3RyLCB0aGlzLm1ldGFkYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoaXMgdG9rZW4uIE9wdGlvbmFsbHkgYSBmdW5jdGlvbiBjYW4gYmVcbiAgICogYXBwbGllZCB0byB0aGUgY2xvbmVkIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuVG9rZW5+dXBkYXRlRnVuY3Rpb259IFtmbl0gLSBBbiBvcHRpb25hbCBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgY2xvbmVkIHRva2VuLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlbn1cbiAgICovXG4gIGx1bnIuVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgZm4gPVxuICAgICAgZm4gfHxcbiAgICAgIGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfTtcbiAgICByZXR1cm4gbmV3IGx1bnIuVG9rZW4oZm4odGhpcy5zdHIsIHRoaXMubWV0YWRhdGEpLCB0aGlzLm1ldGFkYXRhKTtcbiAgfTtcbiAgLyohXG4gICAqIGx1bnIudG9rZW5pemVyXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gZm9yIHNwbGl0dGluZyBhIHN0cmluZyBpbnRvIHRva2VucyByZWFkeSB0byBiZSBpbnNlcnRlZCBpbnRvXG4gICAqIHRoZSBzZWFyY2ggaW5kZXguIFVzZXMgYGx1bnIudG9rZW5pemVyLnNlcGFyYXRvcmAgdG8gc3BsaXQgc3RyaW5ncywgY2hhbmdlXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSBob3cgc3RyaW5ncyBhcmUgc3BsaXQgaW50byB0b2tlbnMuXG4gICAqXG4gICAqIFRoaXMgdG9rZW5pemVyIHdpbGwgY29udmVydCBpdHMgcGFyYW1ldGVyIHRvIGEgc3RyaW5nIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYCBhbmRcbiAgICogdGhlbiB3aWxsIHNwbGl0IHRoaXMgc3RyaW5nIG9uIHRoZSBjaGFyYWN0ZXIgaW4gYGx1bnIudG9rZW5pemVyLnNlcGFyYXRvcmAuXG4gICAqIEFycmF5cyB3aWxsIGhhdmUgdGhlaXIgZWxlbWVudHMgY29udmVydGVkIHRvIHN0cmluZ3MgYW5kIHdyYXBwZWQgaW4gYSBsdW5yLlRva2VuLlxuICAgKlxuICAgKiBPcHRpb25hbCBtZXRhZGF0YSBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0b2tlbml6ZXIsIHRoaXMgbWV0YWRhdGEgd2lsbCBiZSBjbG9uZWQgYW5kXG4gICAqIGFkZGVkIGFzIG1ldGFkYXRhIHRvIGV2ZXJ5IHRva2VuIHRoYXQgaXMgY3JlYXRlZCBmcm9tIHRoZSBvYmplY3QgdG8gYmUgdG9rZW5pemVkLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7PyhzdHJpbmd8b2JqZWN0fG9iamVjdFtdKX0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IGludG8gdG9rZW5zXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWV0YWRhdGEgLSBPcHRpb25hbCBtZXRhZGF0YSB0byBhc3NvY2lhdGUgd2l0aCBldmVyeSB0b2tlblxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlbltdfVxuICAgKiBAc2VlIHtAbGluayBsdW5yLlBpcGVsaW5lfVxuICAgKi9cbiAgbHVuci50b2tlbml6ZXIgPSBmdW5jdGlvbiAob2JqLCBtZXRhZGF0YSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuIG9iai5tYXAoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBsdW5yLlRva2VuKFxuICAgICAgICAgIGx1bnIudXRpbHMuYXNTdHJpbmcodCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBsdW5yLnV0aWxzLmNsb25lKG1ldGFkYXRhKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IG9iai50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoLFxuICAgICAgdG9rZW5zID0gW107XG5cbiAgICBmb3IgKHZhciBzbGljZUVuZCA9IDAsIHNsaWNlU3RhcnQgPSAwOyBzbGljZUVuZCA8PSBsZW47IHNsaWNlRW5kKyspIHtcbiAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJBdChzbGljZUVuZCksXG4gICAgICAgIHNsaWNlTGVuZ3RoID0gc2xpY2VFbmQgLSBzbGljZVN0YXJ0O1xuXG4gICAgICBpZiAoY2hhci5tYXRjaChsdW5yLnRva2VuaXplci5zZXBhcmF0b3IpIHx8IHNsaWNlRW5kID09IGxlbikge1xuICAgICAgICBpZiAoc2xpY2VMZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHRva2VuTWV0YWRhdGEgPSBsdW5yLnV0aWxzLmNsb25lKG1ldGFkYXRhKSB8fCB7fTtcbiAgICAgICAgICB0b2tlbk1ldGFkYXRhW1wicG9zaXRpb25cIl0gPSBbc2xpY2VTdGFydCwgc2xpY2VMZW5ndGhdO1xuICAgICAgICAgIHRva2VuTWV0YWRhdGFbXCJpbmRleFwiXSA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICAgICAgICB0b2tlbnMucHVzaChcbiAgICAgICAgICAgIG5ldyBsdW5yLlRva2VuKHN0ci5zbGljZShzbGljZVN0YXJ0LCBzbGljZUVuZCksIHRva2VuTWV0YWRhdGEpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNsaWNlU3RhcnQgPSBzbGljZUVuZCArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHNlcGFyYXRvciB1c2VkIHRvIHNwbGl0IGEgc3RyaW5nIGludG8gdG9rZW5zLiBPdmVycmlkZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mXG4gICAqIGBsdW5yLnRva2VuaXplcmAgYmVoYXZpb3VyIHdoZW4gdG9rZW5pemluZyBzdHJpbmdzLiBCeSBkZWZhdWx0IHRoaXMgc3BsaXRzIG9uIHdoaXRlc3BhY2UgYW5kIGh5cGhlbnMuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHNlZSBsdW5yLnRva2VuaXplclxuICAgKi9cbiAgbHVuci50b2tlbml6ZXIuc2VwYXJhdG9yID0gL1tcXHNcXC1dKy87XG4gIC8qIVxuICAgKiBsdW5yLlBpcGVsaW5lXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuUGlwZWxpbmVzIG1haW50YWluIGFuIG9yZGVyZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gYmUgYXBwbGllZCB0byBhbGxcbiAgICogdG9rZW5zIGluIGRvY3VtZW50cyBlbnRlcmluZyB0aGUgc2VhcmNoIGluZGV4IGFuZCBxdWVyaWVzIGJlaW5nIHJhbiBhZ2FpbnN0XG4gICAqIHRoZSBpbmRleC5cbiAgICpcbiAgICogQW4gaW5zdGFuY2Ugb2YgbHVuci5JbmRleCBjcmVhdGVkIHdpdGggdGhlIGx1bnIgc2hvcnRjdXQgd2lsbCBjb250YWluIGFcbiAgICogcGlwZWxpbmUgd2l0aCBhIHN0b3Agd29yZCBmaWx0ZXIgYW5kIGFuIEVuZ2xpc2ggbGFuZ3VhZ2Ugc3RlbW1lci4gRXh0cmFcbiAgICogZnVuY3Rpb25zIGNhbiBiZSBhZGRlZCBiZWZvcmUgb3IgYWZ0ZXIgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBvciB0aGVzZVxuICAgKiBkZWZhdWx0IGZ1bmN0aW9ucyBjYW4gYmUgcmVtb3ZlZC5cbiAgICpcbiAgICogV2hlbiBydW4gdGhlIHBpcGVsaW5lIHdpbGwgY2FsbCBlYWNoIGZ1bmN0aW9uIGluIHR1cm4sIHBhc3NpbmcgYSB0b2tlbiwgdGhlXG4gICAqIGluZGV4IG9mIHRoYXQgdG9rZW4gaW4gdGhlIG9yaWdpbmFsIGxpc3Qgb2YgYWxsIHRva2VucyBhbmQgZmluYWxseSBhIGxpc3Qgb2ZcbiAgICogYWxsIHRoZSBvcmlnaW5hbCB0b2tlbnMuXG4gICAqXG4gICAqIFRoZSBvdXRwdXQgb2YgZnVuY3Rpb25zIGluIHRoZSBwaXBlbGluZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbmV4dCBmdW5jdGlvblxuICAgKiBpbiB0aGUgcGlwZWxpbmUuIFRvIGV4Y2x1ZGUgYSB0b2tlbiBmcm9tIGVudGVyaW5nIHRoZSBpbmRleCB0aGUgZnVuY3Rpb25cbiAgICogc2hvdWxkIHJldHVybiB1bmRlZmluZWQsIHRoZSByZXN0IG9mIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBiZSBjYWxsZWQgd2l0aFxuICAgKiB0aGlzIHRva2VuLlxuICAgKlxuICAgKiBGb3Igc2VyaWFsaXNhdGlvbiBvZiBwaXBlbGluZXMgdG8gd29yaywgYWxsIGZ1bmN0aW9ucyB1c2VkIGluIGFuIGluc3RhbmNlIG9mXG4gICAqIGEgcGlwZWxpbmUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCBsdW5yLlBpcGVsaW5lLiBSZWdpc3RlcmVkIGZ1bmN0aW9ucyBjYW5cbiAgICogdGhlbiBiZSBsb2FkZWQuIElmIHRyeWluZyB0byBsb2FkIGEgc2VyaWFsaXNlZCBwaXBlbGluZSB0aGF0IHVzZXMgZnVuY3Rpb25zXG4gICAqIHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBJZiBub3QgcGxhbm5pbmcgb24gc2VyaWFsaXNpbmcgdGhlIHBpcGVsaW5lIHRoZW4gcmVnaXN0ZXJpbmcgcGlwZWxpbmUgZnVuY3Rpb25zXG4gICAqIGlzIG5vdCBuZWNlc3NhcnkuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgbHVuci5QaXBlbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdGFjayA9IFtdO1xuICB9O1xuXG4gIGx1bnIuUGlwZWxpbmUucmVnaXN0ZXJlZEZ1bmN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLyoqXG4gICAqIEEgcGlwZWxpbmUgZnVuY3Rpb24gbWFwcyBsdW5yLlRva2VuIHRvIGx1bnIuVG9rZW4uIEEgbHVuci5Ub2tlbiBjb250YWlucyB0aGUgdG9rZW5cbiAgICogc3RyaW5nIGFzIHdlbGwgYXMgYWxsIGtub3duIG1ldGFkYXRhLiBBIHBpcGVsaW5lIGZ1bmN0aW9uIGNhbiBtdXRhdGUgdGhlIHRva2VuIHN0cmluZ1xuICAgKiBvciBtdXRhdGUgKG9yIGFkZCkgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gdG9rZW4uXG4gICAqXG4gICAqIEEgcGlwZWxpbmUgZnVuY3Rpb24gY2FuIGluZGljYXRlIHRoYXQgdGhlIHBhc3NlZCB0b2tlbiBzaG91bGQgYmUgZGlzY2FyZGVkIGJ5IHJldHVybmluZ1xuICAgKiBudWxsLCB1bmRlZmluZWQgb3IgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIHRva2VuIHdpbGwgbm90IGJlIHBhc3NlZCB0byBhbnkgZG93bnN0cmVhbSBwaXBlbGluZVxuICAgKiBmdW5jdGlvbnMgYW5kIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBpbmRleC5cbiAgICpcbiAgICogTXVsdGlwbGUgdG9rZW5zIGNhbiBiZSByZXR1cm5lZCBieSByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdG9rZW5zLiBFYWNoIHRva2VuIHdpbGwgYmUgcGFzc2VkXG4gICAqIHRvIGFueSBkb3duc3RyZWFtIHBpcGVsaW5lIGZ1bmN0aW9ucyBhbmQgYWxsIHdpbGwgcmV0dXJuZWQgdG9rZW5zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGluZGV4LlxuICAgKlxuICAgKiBBbnkgbnVtYmVyIG9mIHBpcGVsaW5lIGZ1bmN0aW9ucyBtYXkgYmUgY2hhaW5lZCB0b2dldGhlciB1c2luZyBhIGx1bnIuUGlwZWxpbmUuXG4gICAqXG4gICAqIEBpbnRlcmZhY2UgbHVuci5QaXBlbGluZUZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7bHVuci5Ub2tlbn0gdG9rZW4gLSBBIHRva2VuIGZyb20gdGhlIGRvY3VtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgLSBUaGUgaW5kZXggb2YgdGhpcyB0b2tlbiBpbiB0aGUgY29tcGxldGUgbGlzdCBvZiB0b2tlbnMgZm9yIHRoaXMgZG9jdW1lbnQvZmllbGQuXG4gICAqIEBwYXJhbSB7bHVuci5Ub2tlbltdfSB0b2tlbnMgLSBBbGwgdG9rZW5zIGZvciB0aGlzIGRvY3VtZW50L2ZpZWxkLlxuICAgKiBAcmV0dXJucyB7KD9sdW5yLlRva2VufGx1bnIuVG9rZW5bXSl9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHdpdGggdGhlIHBpcGVsaW5lLlxuICAgKlxuICAgKiBGdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgcGlwZWxpbmUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaWYgdGhlIHBpcGVsaW5lXG4gICAqIG5lZWRzIHRvIGJlIHNlcmlhbGlzZWQsIG9yIGEgc2VyaWFsaXNlZCBwaXBlbGluZSBuZWVkcyB0byBiZSBsb2FkZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgZnVuY3Rpb24gZG9lcyBub3QgYWRkIGl0IHRvIGEgcGlwZWxpbmUsIGZ1bmN0aW9ucyBtdXN0IHN0aWxsIGJlXG4gICAqIGFkZGVkIHRvIGluc3RhbmNlcyBvZiB0aGUgcGlwZWxpbmUgZm9yIHRoZW0gdG8gYmUgdXNlZCB3aGVuIHJ1bm5pbmcgYSBwaXBlbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIGZvci5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIC0gVGhlIGxhYmVsIHRvIHJlZ2lzdGVyIHRoaXMgZnVuY3Rpb24gd2l0aFxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5yZWdpc3RlckZ1bmN0aW9uID0gZnVuY3Rpb24gKGZuLCBsYWJlbCkge1xuICAgIGlmIChsYWJlbCBpbiB0aGlzLnJlZ2lzdGVyZWRGdW5jdGlvbnMpIHtcbiAgICAgIGx1bnIudXRpbHMud2FybihcIk92ZXJ3cml0aW5nIGV4aXN0aW5nIHJlZ2lzdGVyZWQgZnVuY3Rpb246IFwiICsgbGFiZWwpO1xuICAgIH1cblxuICAgIGZuLmxhYmVsID0gbGFiZWw7XG4gICAgbHVuci5QaXBlbGluZS5yZWdpc3RlcmVkRnVuY3Rpb25zW2ZuLmxhYmVsXSA9IGZuO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IHJlZ2lzdGVyZWQgYXMgYSBQaXBlbGluZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIGZvci5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGx1bnIuUGlwZWxpbmUud2FybklmRnVuY3Rpb25Ob3RSZWdpc3RlcmVkID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIGlzUmVnaXN0ZXJlZCA9IGZuLmxhYmVsICYmIGZuLmxhYmVsIGluIHRoaXMucmVnaXN0ZXJlZEZ1bmN0aW9ucztcblxuICAgIGlmICghaXNSZWdpc3RlcmVkKSB7XG4gICAgICBsdW5yLnV0aWxzLndhcm4oXG4gICAgICAgIFwiRnVuY3Rpb24gaXMgbm90IHJlZ2lzdGVyZWQgd2l0aCBwaXBlbGluZS4gVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgd2hlbiBzZXJpYWxpc2luZyB0aGUgaW5kZXguXFxuXCIsXG4gICAgICAgIGZuXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTG9hZHMgYSBwcmV2aW91c2x5IHNlcmlhbGlzZWQgcGlwZWxpbmUuXG4gICAqXG4gICAqIEFsbCBmdW5jdGlvbnMgdG8gYmUgbG9hZGVkIG11c3QgYWxyZWFkeSBiZSByZWdpc3RlcmVkIHdpdGggbHVuci5QaXBlbGluZS5cbiAgICogSWYgYW55IGZ1bmN0aW9uIGZyb20gdGhlIHNlcmlhbGlzZWQgZGF0YSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCB0aGVuIGFuXG4gICAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2VyaWFsaXNlZCAtIFRoZSBzZXJpYWxpc2VkIHBpcGVsaW5lIHRvIGxvYWQuXG4gICAqIEByZXR1cm5zIHtsdW5yLlBpcGVsaW5lfVxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5sb2FkID0gZnVuY3Rpb24gKHNlcmlhbGlzZWQpIHtcbiAgICB2YXIgcGlwZWxpbmUgPSBuZXcgbHVuci5QaXBlbGluZSgpO1xuXG4gICAgc2VyaWFsaXNlZC5mb3JFYWNoKGZ1bmN0aW9uIChmbk5hbWUpIHtcbiAgICAgIHZhciBmbiA9IGx1bnIuUGlwZWxpbmUucmVnaXN0ZXJlZEZ1bmN0aW9uc1tmbk5hbWVdO1xuXG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgcGlwZWxpbmUuYWRkKGZuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIHVucmVnaXN0ZXJlZCBmdW5jdGlvbjogXCIgKyBmbk5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBpcGVsaW5lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGVuZCBvZiB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIExvZ3MgYSB3YXJuaW5nIGlmIHRoZSBmdW5jdGlvbiBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb25bXX0gZnVuY3Rpb25zIC0gQW55IG51bWJlciBvZiBmdW5jdGlvbnMgdG8gYWRkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZm5zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgbHVuci5QaXBlbGluZS53YXJuSWZGdW5jdGlvbk5vdFJlZ2lzdGVyZWQoZm4pO1xuICAgICAgdGhpcy5fc3RhY2sucHVzaChmbik7XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzaW5nbGUgZnVuY3Rpb24gYWZ0ZXIgYSBmdW5jdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZVxuICAgKiBwaXBlbGluZS5cbiAgICpcbiAgICogTG9ncyBhIHdhcm5pbmcgaWYgdGhlIGZ1bmN0aW9uIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn0gZXhpc3RpbmdGbiAtIEEgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSB7bHVuci5QaXBlbGluZUZ1bmN0aW9ufSBuZXdGbiAtIFRoZSBuZXcgZnVuY3Rpb24gdG8gYWRkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLmFmdGVyID0gZnVuY3Rpb24gKGV4aXN0aW5nRm4sIG5ld0ZuKSB7XG4gICAgbHVuci5QaXBlbGluZS53YXJuSWZGdW5jdGlvbk5vdFJlZ2lzdGVyZWQobmV3Rm4pO1xuXG4gICAgdmFyIHBvcyA9IHRoaXMuX3N0YWNrLmluZGV4T2YoZXhpc3RpbmdGbik7XG4gICAgaWYgKHBvcyA9PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgZXhpc3RpbmdGblwiKTtcbiAgICB9XG5cbiAgICBwb3MgPSBwb3MgKyAxO1xuICAgIHRoaXMuX3N0YWNrLnNwbGljZShwb3MsIDAsIG5ld0ZuKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHNpbmdsZSBmdW5jdGlvbiBiZWZvcmUgYSBmdW5jdGlvbiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZVxuICAgKiBwaXBlbGluZS5cbiAgICpcbiAgICogTG9ncyBhIHdhcm5pbmcgaWYgdGhlIGZ1bmN0aW9uIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn0gZXhpc3RpbmdGbiAtIEEgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSB7bHVuci5QaXBlbGluZUZ1bmN0aW9ufSBuZXdGbiAtIFRoZSBuZXcgZnVuY3Rpb24gdG8gYWRkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLmJlZm9yZSA9IGZ1bmN0aW9uIChleGlzdGluZ0ZuLCBuZXdGbikge1xuICAgIGx1bnIuUGlwZWxpbmUud2FybklmRnVuY3Rpb25Ob3RSZWdpc3RlcmVkKG5ld0ZuKTtcblxuICAgIHZhciBwb3MgPSB0aGlzLl9zdGFjay5pbmRleE9mKGV4aXN0aW5nRm4pO1xuICAgIGlmIChwb3MgPT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIGV4aXN0aW5nRm5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2suc3BsaWNlKHBvcywgMCwgbmV3Rm4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZnVuY3Rpb24gZnJvbSB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5QaXBlbGluZUZ1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHBvcyA9IHRoaXMuX3N0YWNrLmluZGV4T2YoZm4pO1xuICAgIGlmIChwb3MgPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGFjay5zcGxpY2UocG9zLCAxKTtcbiAgfTtcblxuICAvKipcbiAgICogUnVucyB0aGUgY3VycmVudCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IG1ha2UgdXAgdGhlIHBpcGVsaW5lIGFnYWluc3QgdGhlXG4gICAqIHBhc3NlZCB0b2tlbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHRva2VucyBUaGUgdG9rZW5zIHRvIHJ1biB0aHJvdWdoIHRoZSBwaXBlbGluZS5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKHRva2Vucykge1xuICAgIHZhciBzdGFja0xlbmd0aCA9IHRoaXMuX3N0YWNrLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2tMZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZuID0gdGhpcy5fc3RhY2tbaV07XG4gICAgICB2YXIgbWVtbyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZm4odG9rZW5zW2pdLCBqLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgfHwgcmVzdWx0ID09PSBcIlwiKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZXN1bHQubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG1lbW8ucHVzaChyZXN1bHRba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZW1vLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0b2tlbnMgPSBtZW1vO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgcGFzc2luZyBhIHN0cmluZyB0aHJvdWdoIGEgcGlwZWxpbmUgYW5kIGdldHRpbmdcbiAgICogc3RyaW5ncyBvdXQuIFRoaXMgbWV0aG9kIHRha2VzIGNhcmUgb2Ygd3JhcHBpbmcgdGhlIHBhc3NlZCBzdHJpbmcgaW4gYVxuICAgKiB0b2tlbiBhbmQgbWFwcGluZyB0aGUgcmVzdWx0aW5nIHRva2VucyBiYWNrIHRvIHN0cmluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHBhc3MgdGhyb3VnaCB0aGUgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWV0YWRhdGEgLSBPcHRpb25hbCBtZXRhZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdG9rZW5cbiAgICogcGFzc2VkIHRvIHRoZSBwaXBlbGluZS5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgbHVuci5QaXBlbGluZS5wcm90b3R5cGUucnVuU3RyaW5nID0gZnVuY3Rpb24gKHN0ciwgbWV0YWRhdGEpIHtcbiAgICB2YXIgdG9rZW4gPSBuZXcgbHVuci5Ub2tlbihzdHIsIG1ldGFkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLnJ1bihbdG9rZW5dKS5tYXAoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgcGlwZWxpbmUgYnkgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIHByb2Nlc3NvcnMuXG4gICAqXG4gICAqL1xuICBsdW5yLlBpcGVsaW5lLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdGFjayA9IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBpcGVsaW5lIHJlYWR5IGZvciBzZXJpYWxpc2F0aW9uLlxuICAgKlxuICAgKiBMb2dzIGEgd2FybmluZyBpZiB0aGUgZnVuY3Rpb24gaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGx1bnIuUGlwZWxpbmUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2subWFwKGZ1bmN0aW9uIChmbikge1xuICAgICAgbHVuci5QaXBlbGluZS53YXJuSWZGdW5jdGlvbk5vdFJlZ2lzdGVyZWQoZm4pO1xuXG4gICAgICByZXR1cm4gZm4ubGFiZWw7XG4gICAgfSk7XG4gIH07XG4gIC8qIVxuICAgKiBsdW5yLlZlY3RvclxuICAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgT2xpdmVyIE5pZ2h0aW5nYWxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBIHZlY3RvciBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgdmVjdG9yIHNwYWNlIG9mIGRvY3VtZW50cyBhbmQgcXVlcmllcy4gVGhlc2VcbiAgICogdmVjdG9ycyBzdXBwb3J0IG9wZXJhdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gdHdvIGRvY3VtZW50cyBvclxuICAgKiBhIGRvY3VtZW50IGFuZCBhIHF1ZXJ5LlxuICAgKlxuICAgKiBOb3JtYWxseSBubyBwYXJhbWV0ZXJzIGFyZSByZXF1aXJlZCBmb3IgaW5pdGlhbGl6aW5nIGEgdmVjdG9yLCBidXQgaW4gdGhlIGNhc2Ugb2ZcbiAgICogbG9hZGluZyBhIHByZXZpb3VzbHkgZHVtcGVkIHZlY3RvciB0aGUgcmF3IGVsZW1lbnRzIGNhbiBiZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zIHZlY3RvcnMgYXJlIGltcGxlbWVudGVkIHdpdGggYSBmbGF0IGFycmF5LCB3aGVyZSBhbiBlbGVtZW50c1xuICAgKiBpbmRleCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBpdHMgdmFsdWUuIEUuZy4gW2luZGV4LCB2YWx1ZSwgaW5kZXgsIHZhbHVlXS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIHVuZGVybHlpbmcgYXJyYXkgdG8gYmUgYXMgc3BhcnNlIGFzIHBvc3NpYmxlIGFuZCBzdGlsbCBvZmZlciBkZWNlbnRcbiAgICogcGVyZm9ybWFuY2Ugd2hlbiBiZWluZyB1c2VkIGZvciB2ZWN0b3IgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gW2VsZW1lbnRzXSAtIFRoZSBmbGF0IGxpc3Qgb2YgZWxlbWVudCBpbmRleCBhbmQgZWxlbWVudCB2YWx1ZSBwYWlycy5cbiAgICovXG4gIGx1bnIuVmVjdG9yID0gZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgdGhpcy5fbWFnbml0dWRlID0gMDtcbiAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHMgfHwgW107XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgdmVjdG9yIHRvIGluc2VydCBhIGdpdmVuIGluZGV4LlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBpbnNlcnQgYW5kIHVwc2VydC4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBpbmRleGVzIHRoZW5cbiAgICogdGhlIHBvc2l0aW9uIGlzIHJldHVybmVkIGFzIGlmIHRoZSB2YWx1ZSBmb3IgdGhhdCBpbmRleCB3ZXJlIHRvIGJlIHVwZGF0ZWQsIGJ1dCBpdFxuICAgKiBpcyB0aGUgY2FsbGVycyByZXNwb25zaWJpbGl0eSB0byBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgZHVwbGljYXRlIGF0IHRoYXQgaW5kZXhcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGluc2VydElkeCAtIFRoZSBpbmRleCBhdCB3aGljaCB0aGUgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQuXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqL1xuICBsdW5yLlZlY3Rvci5wcm90b3R5cGUucG9zaXRpb25Gb3JJbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIC8vIEZvciBhbiBlbXB0eSB2ZWN0b3IgdGhlIHR1cGxlIGNhbiBiZSBpbnNlcnRlZCBhdCB0aGUgYmVnaW5uaW5nXG4gICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IDAsXG4gICAgICBlbmQgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAvIDIsXG4gICAgICBzbGljZUxlbmd0aCA9IGVuZCAtIHN0YXJ0LFxuICAgICAgcGl2b3RQb2ludCA9IE1hdGguZmxvb3Ioc2xpY2VMZW5ndGggLyAyKSxcbiAgICAgIHBpdm90SW5kZXggPSB0aGlzLmVsZW1lbnRzW3Bpdm90UG9pbnQgKiAyXTtcblxuICAgIHdoaWxlIChzbGljZUxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChwaXZvdEluZGV4IDwgaW5kZXgpIHtcbiAgICAgICAgc3RhcnQgPSBwaXZvdFBvaW50O1xuICAgICAgfVxuXG4gICAgICBpZiAocGl2b3RJbmRleCA+IGluZGV4KSB7XG4gICAgICAgIGVuZCA9IHBpdm90UG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwaXZvdEluZGV4ID09IGluZGV4KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzbGljZUxlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgcGl2b3RQb2ludCA9IHN0YXJ0ICsgTWF0aC5mbG9vcihzbGljZUxlbmd0aCAvIDIpO1xuICAgICAgcGl2b3RJbmRleCA9IHRoaXMuZWxlbWVudHNbcGl2b3RQb2ludCAqIDJdO1xuICAgIH1cblxuICAgIGlmIChwaXZvdEluZGV4ID09IGluZGV4KSB7XG4gICAgICByZXR1cm4gcGl2b3RQb2ludCAqIDI7XG4gICAgfVxuXG4gICAgaWYgKHBpdm90SW5kZXggPiBpbmRleCkge1xuICAgICAgcmV0dXJuIHBpdm90UG9pbnQgKiAyO1xuICAgIH1cblxuICAgIGlmIChwaXZvdEluZGV4IDwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAocGl2b3RQb2ludCArIDEpICogMjtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYW4gZWxlbWVudCBhdCBhbiBpbmRleCB3aXRoaW4gdGhlIHZlY3Rvci5cbiAgICpcbiAgICogRG9lcyBub3QgYWxsb3cgZHVwbGljYXRlcywgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVudHJ5XG4gICAqIGZvciB0aGlzIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaW5zZXJ0SWR4IC0gVGhlIGluZGV4IGF0IHdoaWNoIHRoZSBlbGVtZW50IHNob3VsZCBiZSBpbnNlcnRlZC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbCAtIFRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSB2ZWN0b3IuXG4gICAqL1xuICBsdW5yLlZlY3Rvci5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKGluc2VydElkeCwgdmFsKSB7XG4gICAgdGhpcy51cHNlcnQoaW5zZXJ0SWR4LCB2YWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IFwiZHVwbGljYXRlIGluZGV4XCI7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluc2VydHMgb3IgdXBkYXRlcyBhbiBleGlzdGluZyBpbmRleCB3aXRoaW4gdGhlIHZlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGluc2VydElkeCAtIFRoZSBpbmRleCBhdCB3aGljaCB0aGUgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWwgLSBUaGUgdmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgdmVjdG9yLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIHVwZGF0ZXMsIHRoZSBleGlzdGluZyB2YWx1ZSBhbmQgdGhlXG4gICAqIHJlcXVlc3RlZCB2YWx1ZSBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50c1xuICAgKi9cbiAgbHVuci5WZWN0b3IucHJvdG90eXBlLnVwc2VydCA9IGZ1bmN0aW9uIChpbnNlcnRJZHgsIHZhbCwgZm4pIHtcbiAgICB0aGlzLl9tYWduaXR1ZGUgPSAwO1xuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25Gb3JJbmRleChpbnNlcnRJZHgpO1xuXG4gICAgaWYgKHRoaXMuZWxlbWVudHNbcG9zaXRpb25dID09IGluc2VydElkeCkge1xuICAgICAgdGhpcy5lbGVtZW50c1twb3NpdGlvbiArIDFdID0gZm4odGhpcy5lbGVtZW50c1twb3NpdGlvbiArIDFdLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShwb3NpdGlvbiwgMCwgaW5zZXJ0SWR4LCB2YWwpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbWFnbml0dWRlIG9mIHRoaXMgdmVjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TnVtYmVyfVxuICAgKi9cbiAgbHVuci5WZWN0b3IucHJvdG90eXBlLm1hZ25pdHVkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fbWFnbml0dWRlKSByZXR1cm4gdGhpcy5fbWFnbml0dWRlO1xuXG4gICAgdmFyIHN1bU9mU3F1YXJlcyA9IDAsXG4gICAgICBlbGVtZW50c0xlbmd0aCA9IHRoaXMuZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBlbGVtZW50c0xlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgdmFsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHN1bU9mU3F1YXJlcyArPSB2YWwgKiB2YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLl9tYWduaXR1ZGUgPSBNYXRoLnNxcnQoc3VtT2ZTcXVhcmVzKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHRoaXMgdmVjdG9yIGFuZCBhbm90aGVyIHZlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlZlY3Rvcn0gb3RoZXJWZWN0b3IgLSBUaGUgdmVjdG9yIHRvIGNvbXB1dGUgdGhlIGRvdCBwcm9kdWN0IHdpdGguXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqL1xuICBsdW5yLlZlY3Rvci5wcm90b3R5cGUuZG90ID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7XG4gICAgdmFyIGRvdFByb2R1Y3QgPSAwLFxuICAgICAgYSA9IHRoaXMuZWxlbWVudHMsXG4gICAgICBiID0gb3RoZXJWZWN0b3IuZWxlbWVudHMsXG4gICAgICBhTGVuID0gYS5sZW5ndGgsXG4gICAgICBiTGVuID0gYi5sZW5ndGgsXG4gICAgICBhVmFsID0gMCxcbiAgICAgIGJWYWwgPSAwLFxuICAgICAgaSA9IDAsXG4gICAgICBqID0gMDtcblxuICAgIHdoaWxlIChpIDwgYUxlbiAmJiBqIDwgYkxlbikge1xuICAgICAgKGFWYWwgPSBhW2ldKSwgKGJWYWwgPSBiW2pdKTtcbiAgICAgIGlmIChhVmFsIDwgYlZhbCkge1xuICAgICAgICBpICs9IDI7XG4gICAgICB9IGVsc2UgaWYgKGFWYWwgPiBiVmFsKSB7XG4gICAgICAgIGogKz0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYVZhbCA9PSBiVmFsKSB7XG4gICAgICAgIGRvdFByb2R1Y3QgKz0gYVtpICsgMV0gKiBiW2ogKyAxXTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBqICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvdFByb2R1Y3Q7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIHZlY3RvciBhbmQgYW5vdGhlciB2ZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5WZWN0b3J9IG90aGVyVmVjdG9yIC0gVGhlIG90aGVyIHZlY3RvciB0byBjYWxjdWxhdGUgdGhlXG4gICAqIHNpbWlsYXJpdHkgd2l0aC5cbiAgICogQHJldHVybnMge051bWJlcn1cbiAgICovXG4gIGx1bnIuVmVjdG9yLnByb3RvdHlwZS5zaW1pbGFyaXR5ID0gZnVuY3Rpb24gKG90aGVyVmVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZG90KG90aGVyVmVjdG9yKSAvIHRoaXMubWFnbml0dWRlKCkgfHwgMDtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHZlY3RvciB0byBhbiBhcnJheSBvZiB0aGUgZWxlbWVudHMgd2l0aGluIHRoZSB2ZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJbXX1cbiAgICovXG4gIGx1bnIuVmVjdG9yLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvdXRwdXQgPSBuZXcgQXJyYXkodGhpcy5lbGVtZW50cy5sZW5ndGggLyAyKTtcblxuICAgIGZvciAodmFyIGkgPSAxLCBqID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpICs9IDIsIGorKykge1xuICAgICAgb3V0cHV0W2pdID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIEpTT04gc2VyaWFsaXphYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJbXX1cbiAgICovXG4gIGx1bnIuVmVjdG9yLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHM7XG4gIH07XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8qIVxuICAgKiBsdW5yLnN0ZW1tZXJcbiAgICogQ29weXJpZ2h0IChDKSAyMDIwIE9saXZlciBOaWdodGluZ2FsZVxuICAgKiBJbmNsdWRlcyBjb2RlIGZyb20gLSBodHRwOi8vdGFydGFydXMub3JnL35tYXJ0aW4vUG9ydGVyU3RlbW1lci9qcy50eHRcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuc3RlbW1lciBpcyBhbiBlbmdsaXNoIGxhbmd1YWdlIHN0ZW1tZXIsIHRoaXMgaXMgYSBKYXZhU2NyaXB0XG4gICAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0ZXJTdGVtbWVyIHRha2VuIGZyb20gaHR0cDovL3RhcnRhcnVzLm9yZy9+bWFydGluXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQGltcGxlbWVudHMge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn1cbiAgICogQHBhcmFtIHtsdW5yLlRva2VufSB0b2tlbiAtIFRoZSBzdHJpbmcgdG8gc3RlbVxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlbn1cbiAgICogQHNlZSB7QGxpbmsgbHVuci5QaXBlbGluZX1cbiAgICogQGZ1bmN0aW9uXG4gICAqL1xuICBsdW5yLnN0ZW1tZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGVwMmxpc3QgPSB7XG4gICAgICAgIGF0aW9uYWw6IFwiYXRlXCIsXG4gICAgICAgIHRpb25hbDogXCJ0aW9uXCIsXG4gICAgICAgIGVuY2k6IFwiZW5jZVwiLFxuICAgICAgICBhbmNpOiBcImFuY2VcIixcbiAgICAgICAgaXplcjogXCJpemVcIixcbiAgICAgICAgYmxpOiBcImJsZVwiLFxuICAgICAgICBhbGxpOiBcImFsXCIsXG4gICAgICAgIGVudGxpOiBcImVudFwiLFxuICAgICAgICBlbGk6IFwiZVwiLFxuICAgICAgICBvdXNsaTogXCJvdXNcIixcbiAgICAgICAgaXphdGlvbjogXCJpemVcIixcbiAgICAgICAgYXRpb246IFwiYXRlXCIsXG4gICAgICAgIGF0b3I6IFwiYXRlXCIsXG4gICAgICAgIGFsaXNtOiBcImFsXCIsXG4gICAgICAgIGl2ZW5lc3M6IFwiaXZlXCIsXG4gICAgICAgIGZ1bG5lc3M6IFwiZnVsXCIsXG4gICAgICAgIG91c25lc3M6IFwib3VzXCIsXG4gICAgICAgIGFsaXRpOiBcImFsXCIsXG4gICAgICAgIGl2aXRpOiBcIml2ZVwiLFxuICAgICAgICBiaWxpdGk6IFwiYmxlXCIsXG4gICAgICAgIGxvZ2k6IFwibG9nXCIsXG4gICAgICB9LFxuICAgICAgc3RlcDNsaXN0ID0ge1xuICAgICAgICBpY2F0ZTogXCJpY1wiLFxuICAgICAgICBhdGl2ZTogXCJcIixcbiAgICAgICAgYWxpemU6IFwiYWxcIixcbiAgICAgICAgaWNpdGk6IFwiaWNcIixcbiAgICAgICAgaWNhbDogXCJpY1wiLFxuICAgICAgICBmdWw6IFwiXCIsXG4gICAgICAgIG5lc3M6IFwiXCIsXG4gICAgICB9LFxuICAgICAgYyA9IFwiW15hZWlvdV1cIiwgLy8gY29uc29uYW50XG4gICAgICB2ID0gXCJbYWVpb3V5XVwiLCAvLyB2b3dlbFxuICAgICAgQyA9IGMgKyBcIlteYWVpb3V5XSpcIiwgLy8gY29uc29uYW50IHNlcXVlbmNlXG4gICAgICBWID0gdiArIFwiW2FlaW91XSpcIiwgLy8gdm93ZWwgc2VxdWVuY2VcbiAgICAgIG1ncjAgPSBcIl4oXCIgKyBDICsgXCIpP1wiICsgViArIEMsIC8vIFtDXVZDLi4uIGlzIG0+MFxuICAgICAgbWVxMSA9IFwiXihcIiArIEMgKyBcIik/XCIgKyBWICsgQyArIFwiKFwiICsgViArIFwiKT8kXCIsIC8vIFtDXVZDW1ZdIGlzIG09MVxuICAgICAgbWdyMSA9IFwiXihcIiArIEMgKyBcIik/XCIgKyBWICsgQyArIFYgKyBDLCAvLyBbQ11WQ1ZDLi4uIGlzIG0+MVxuICAgICAgc192ID0gXCJeKFwiICsgQyArIFwiKT9cIiArIHY7IC8vIHZvd2VsIGluIHN0ZW1cblxuICAgIHZhciByZV9tZ3IwID0gbmV3IFJlZ0V4cChtZ3IwKTtcbiAgICB2YXIgcmVfbWdyMSA9IG5ldyBSZWdFeHAobWdyMSk7XG4gICAgdmFyIHJlX21lcTEgPSBuZXcgUmVnRXhwKG1lcTEpO1xuICAgIHZhciByZV9zX3YgPSBuZXcgUmVnRXhwKHNfdik7XG5cbiAgICB2YXIgcmVfMWEgPSAvXiguKz8pKHNzfGkpZXMkLztcbiAgICB2YXIgcmUyXzFhID0gL14oLis/KShbXnNdKXMkLztcbiAgICB2YXIgcmVfMWIgPSAvXiguKz8pZWVkJC87XG4gICAgdmFyIHJlMl8xYiA9IC9eKC4rPykoZWR8aW5nKSQvO1xuICAgIHZhciByZV8xYl8yID0gLy4kLztcbiAgICB2YXIgcmUyXzFiXzIgPSAvKGF0fGJsfGl6KSQvO1xuICAgIHZhciByZTNfMWJfMiA9IG5ldyBSZWdFeHAoXCIoW15hZWlvdXlsc3pdKVxcXFwxJFwiKTtcbiAgICB2YXIgcmU0XzFiXzIgPSBuZXcgUmVnRXhwKFwiXlwiICsgQyArIHYgKyBcIlteYWVpb3V3eHldJFwiKTtcblxuICAgIHZhciByZV8xYyA9IC9eKC4rP1teYWVpb3VdKXkkLztcbiAgICB2YXIgcmVfMiA9XG4gICAgICAvXiguKz8pKGF0aW9uYWx8dGlvbmFsfGVuY2l8YW5jaXxpemVyfGJsaXxhbGxpfGVudGxpfGVsaXxvdXNsaXxpemF0aW9ufGF0aW9ufGF0b3J8YWxpc218aXZlbmVzc3xmdWxuZXNzfG91c25lc3N8YWxpdGl8aXZpdGl8YmlsaXRpfGxvZ2kpJC87XG5cbiAgICB2YXIgcmVfMyA9IC9eKC4rPykoaWNhdGV8YXRpdmV8YWxpemV8aWNpdGl8aWNhbHxmdWx8bmVzcykkLztcblxuICAgIHZhciByZV80ID1cbiAgICAgIC9eKC4rPykoYWx8YW5jZXxlbmNlfGVyfGljfGFibGV8aWJsZXxhbnR8ZW1lbnR8bWVudHxlbnR8b3V8aXNtfGF0ZXxpdGl8b3VzfGl2ZXxpemUpJC87XG4gICAgdmFyIHJlMl80ID0gL14oLis/KShzfHQpKGlvbikkLztcblxuICAgIHZhciByZV81ID0gL14oLis/KWUkLztcbiAgICB2YXIgcmVfNV8xID0gL2xsJC87XG4gICAgdmFyIHJlM181ID0gbmV3IFJlZ0V4cChcIl5cIiArIEMgKyB2ICsgXCJbXmFlaW91d3h5XSRcIik7XG5cbiAgICB2YXIgcG9ydGVyU3RlbW1lciA9IGZ1bmN0aW9uIHBvcnRlclN0ZW1tZXIodykge1xuICAgICAgdmFyIHN0ZW0sIHN1ZmZpeCwgZmlyc3RjaCwgcmUsIHJlMiwgcmUzLCByZTQ7XG5cbiAgICAgIGlmICh3Lmxlbmd0aCA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHc7XG4gICAgICB9XG5cbiAgICAgIGZpcnN0Y2ggPSB3LnN1YnN0cigwLCAxKTtcbiAgICAgIGlmIChmaXJzdGNoID09IFwieVwiKSB7XG4gICAgICAgIHcgPSBmaXJzdGNoLnRvVXBwZXJDYXNlKCkgKyB3LnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAxYVxuICAgICAgcmUgPSByZV8xYTtcbiAgICAgIHJlMiA9IHJlMl8xYTtcblxuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdyA9IHcucmVwbGFjZShyZSwgXCIkMSQyXCIpO1xuICAgICAgfSBlbHNlIGlmIChyZTIudGVzdCh3KSkge1xuICAgICAgICB3ID0gdy5yZXBsYWNlKHJlMiwgXCIkMSQyXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDFiXG4gICAgICByZSA9IHJlXzFiO1xuICAgICAgcmUyID0gcmUyXzFiO1xuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUuZXhlYyh3KTtcbiAgICAgICAgcmUgPSByZV9tZ3IwO1xuICAgICAgICBpZiAocmUudGVzdChmcFsxXSkpIHtcbiAgICAgICAgICByZSA9IHJlXzFiXzI7XG4gICAgICAgICAgdyA9IHcucmVwbGFjZShyZSwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmUyLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUyLmV4ZWModyk7XG4gICAgICAgIHN0ZW0gPSBmcFsxXTtcbiAgICAgICAgcmUyID0gcmVfc192O1xuICAgICAgICBpZiAocmUyLnRlc3Qoc3RlbSkpIHtcbiAgICAgICAgICB3ID0gc3RlbTtcbiAgICAgICAgICByZTIgPSByZTJfMWJfMjtcbiAgICAgICAgICByZTMgPSByZTNfMWJfMjtcbiAgICAgICAgICByZTQgPSByZTRfMWJfMjtcbiAgICAgICAgICBpZiAocmUyLnRlc3QodykpIHtcbiAgICAgICAgICAgIHcgPSB3ICsgXCJlXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZTMudGVzdCh3KSkge1xuICAgICAgICAgICAgcmUgPSByZV8xYl8yO1xuICAgICAgICAgICAgdyA9IHcucmVwbGFjZShyZSwgXCJcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZTQudGVzdCh3KSkge1xuICAgICAgICAgICAgdyA9IHcgKyBcImVcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAxYyAtIHJlcGxhY2Ugc3VmZml4IHkgb3IgWSBieSBpIGlmIHByZWNlZGVkIGJ5IGEgbm9uLXZvd2VsIHdoaWNoIGlzIG5vdCB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSB3b3JkIChzbyBjcnkgLT4gY3JpLCBieSAtPiBieSwgc2F5IC0+IHNheSlcbiAgICAgIHJlID0gcmVfMWM7XG4gICAgICBpZiAocmUudGVzdCh3KSkge1xuICAgICAgICB2YXIgZnAgPSByZS5leGVjKHcpO1xuICAgICAgICBzdGVtID0gZnBbMV07XG4gICAgICAgIHcgPSBzdGVtICsgXCJpXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0ZXAgMlxuICAgICAgcmUgPSByZV8yO1xuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUuZXhlYyh3KTtcbiAgICAgICAgc3RlbSA9IGZwWzFdO1xuICAgICAgICBzdWZmaXggPSBmcFsyXTtcbiAgICAgICAgcmUgPSByZV9tZ3IwO1xuICAgICAgICBpZiAocmUudGVzdChzdGVtKSkge1xuICAgICAgICAgIHcgPSBzdGVtICsgc3RlcDJsaXN0W3N1ZmZpeF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAzXG4gICAgICByZSA9IHJlXzM7XG4gICAgICBpZiAocmUudGVzdCh3KSkge1xuICAgICAgICB2YXIgZnAgPSByZS5leGVjKHcpO1xuICAgICAgICBzdGVtID0gZnBbMV07XG4gICAgICAgIHN1ZmZpeCA9IGZwWzJdO1xuICAgICAgICByZSA9IHJlX21ncjA7XG4gICAgICAgIGlmIChyZS50ZXN0KHN0ZW0pKSB7XG4gICAgICAgICAgdyA9IHN0ZW0gKyBzdGVwM2xpc3Rbc3VmZml4XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDRcbiAgICAgIHJlID0gcmVfNDtcbiAgICAgIHJlMiA9IHJlMl80O1xuICAgICAgaWYgKHJlLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUuZXhlYyh3KTtcbiAgICAgICAgc3RlbSA9IGZwWzFdO1xuICAgICAgICByZSA9IHJlX21ncjE7XG4gICAgICAgIGlmIChyZS50ZXN0KHN0ZW0pKSB7XG4gICAgICAgICAgdyA9IHN0ZW07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmUyLnRlc3QodykpIHtcbiAgICAgICAgdmFyIGZwID0gcmUyLmV4ZWModyk7XG4gICAgICAgIHN0ZW0gPSBmcFsxXSArIGZwWzJdO1xuICAgICAgICByZTIgPSByZV9tZ3IxO1xuICAgICAgICBpZiAocmUyLnRlc3Qoc3RlbSkpIHtcbiAgICAgICAgICB3ID0gc3RlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDVcbiAgICAgIHJlID0gcmVfNTtcbiAgICAgIGlmIChyZS50ZXN0KHcpKSB7XG4gICAgICAgIHZhciBmcCA9IHJlLmV4ZWModyk7XG4gICAgICAgIHN0ZW0gPSBmcFsxXTtcbiAgICAgICAgcmUgPSByZV9tZ3IxO1xuICAgICAgICByZTIgPSByZV9tZXExO1xuICAgICAgICByZTMgPSByZTNfNTtcbiAgICAgICAgaWYgKHJlLnRlc3Qoc3RlbSkgfHwgKHJlMi50ZXN0KHN0ZW0pICYmICFyZTMudGVzdChzdGVtKSkpIHtcbiAgICAgICAgICB3ID0gc3RlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZSA9IHJlXzVfMTtcbiAgICAgIHJlMiA9IHJlX21ncjE7XG4gICAgICBpZiAocmUudGVzdCh3KSAmJiByZTIudGVzdCh3KSkge1xuICAgICAgICByZSA9IHJlXzFiXzI7XG4gICAgICAgIHcgPSB3LnJlcGxhY2UocmUsIFwiXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBhbmQgdHVybiBpbml0aWFsIFkgYmFjayB0byB5XG5cbiAgICAgIGlmIChmaXJzdGNoID09IFwieVwiKSB7XG4gICAgICAgIHcgPSBmaXJzdGNoLnRvTG93ZXJDYXNlKCkgKyB3LnN1YnN0cigxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHc7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgIHJldHVybiB0b2tlbi51cGRhdGUocG9ydGVyU3RlbW1lcik7XG4gICAgfTtcbiAgfSkoKTtcblxuICBsdW5yLlBpcGVsaW5lLnJlZ2lzdGVyRnVuY3Rpb24obHVuci5zdGVtbWVyLCBcInN0ZW1tZXJcIik7XG4gIC8qIVxuICAgKiBsdW5yLnN0b3BXb3JkRmlsdGVyXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuZ2VuZXJhdGVTdG9wV29yZEZpbHRlciBidWlsZHMgYSBzdG9wV29yZEZpbHRlciBmdW5jdGlvbiBmcm9tIHRoZSBwcm92aWRlZFxuICAgKiBsaXN0IG9mIHN0b3Agd29yZHMuXG4gICAqXG4gICAqIFRoZSBidWlsdCBpbiBsdW5yLnN0b3BXb3JkRmlsdGVyIGlzIGJ1aWx0IHVzaW5nIHRoaXMgZ2VuZXJhdG9yIGFuZCBjYW4gYmUgdXNlZFxuICAgKiB0byBnZW5lcmF0ZSBjdXN0b20gc3RvcFdvcmRGaWx0ZXJzIGZvciBhcHBsaWNhdGlvbnMgb3Igbm9uIEVuZ2xpc2ggbGFuZ3VhZ2VzLlxuICAgKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheX0gdG9rZW4gVGhlIHRva2VuIHRvIHBhc3MgdGhyb3VnaCB0aGUgZmlsdGVyXG4gICAqIEByZXR1cm5zIHtsdW5yLlBpcGVsaW5lRnVuY3Rpb259XG4gICAqIEBzZWUgbHVuci5QaXBlbGluZVxuICAgKiBAc2VlIGx1bnIuc3RvcFdvcmRGaWx0ZXJcbiAgICovXG4gIGx1bnIuZ2VuZXJhdGVTdG9wV29yZEZpbHRlciA9IGZ1bmN0aW9uIChzdG9wV29yZHMpIHtcbiAgICB2YXIgd29yZHMgPSBzdG9wV29yZHMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBzdG9wV29yZCkge1xuICAgICAgbWVtb1tzdG9wV29yZF0gPSBzdG9wV29yZDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgIGlmICh0b2tlbiAmJiB3b3Jkc1t0b2tlbi50b1N0cmluZygpXSAhPT0gdG9rZW4udG9TdHJpbmcoKSkgcmV0dXJuIHRva2VuO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIGx1bnIuc3RvcFdvcmRGaWx0ZXIgaXMgYW4gRW5nbGlzaCBsYW5ndWFnZSBzdG9wIHdvcmQgbGlzdCBmaWx0ZXIsIGFueSB3b3Jkc1xuICAgKiBjb250YWluZWQgaW4gdGhlIGxpc3Qgd2lsbCBub3QgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGZpbHRlci5cbiAgICpcbiAgICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIHRoZSBQaXBlbGluZS4gSWYgdGhlIHRva2VuIGRvZXMgbm90IHBhc3MgdGhlXG4gICAqIGZpbHRlciB0aGVuIHVuZGVmaW5lZCB3aWxsIGJlIHJldHVybmVkLlxuICAgKlxuICAgKiBAZnVuY3Rpb25cbiAgICogQGltcGxlbWVudHMge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn1cbiAgICogQHBhcmFtcyB7bHVuci5Ub2tlbn0gdG9rZW4gLSBBIHRva2VuIHRvIGNoZWNrIGZvciBiZWluZyBhIHN0b3Agd29yZC5cbiAgICogQHJldHVybnMge2x1bnIuVG9rZW59XG4gICAqIEBzZWUge0BsaW5rIGx1bnIuUGlwZWxpbmV9XG4gICAqL1xuICBsdW5yLnN0b3BXb3JkRmlsdGVyID0gbHVuci5nZW5lcmF0ZVN0b3BXb3JkRmlsdGVyKFtcbiAgICBcImFcIixcbiAgICBcImFibGVcIixcbiAgICBcImFib3V0XCIsXG4gICAgXCJhY3Jvc3NcIixcbiAgICBcImFmdGVyXCIsXG4gICAgXCJhbGxcIixcbiAgICBcImFsbW9zdFwiLFxuICAgIFwiYWxzb1wiLFxuICAgIFwiYW1cIixcbiAgICBcImFtb25nXCIsXG4gICAgXCJhblwiLFxuICAgIFwiYW5kXCIsXG4gICAgXCJhbnlcIixcbiAgICBcImFyZVwiLFxuICAgIFwiYXNcIixcbiAgICBcImF0XCIsXG4gICAgXCJiZVwiLFxuICAgIFwiYmVjYXVzZVwiLFxuICAgIFwiYmVlblwiLFxuICAgIFwiYnV0XCIsXG4gICAgXCJieVwiLFxuICAgIFwiY2FuXCIsXG4gICAgXCJjYW5ub3RcIixcbiAgICBcImNvdWxkXCIsXG4gICAgXCJkZWFyXCIsXG4gICAgXCJkaWRcIixcbiAgICBcImRvXCIsXG4gICAgXCJkb2VzXCIsXG4gICAgXCJlaXRoZXJcIixcbiAgICBcImVsc2VcIixcbiAgICBcImV2ZXJcIixcbiAgICBcImV2ZXJ5XCIsXG4gICAgXCJmb3JcIixcbiAgICBcImZyb21cIixcbiAgICBcImdldFwiLFxuICAgIFwiZ290XCIsXG4gICAgXCJoYWRcIixcbiAgICBcImhhc1wiLFxuICAgIFwiaGF2ZVwiLFxuICAgIFwiaGVcIixcbiAgICBcImhlclwiLFxuICAgIFwiaGVyc1wiLFxuICAgIFwiaGltXCIsXG4gICAgXCJoaXNcIixcbiAgICBcImhvd1wiLFxuICAgIFwiaG93ZXZlclwiLFxuICAgIFwiaVwiLFxuICAgIFwiaWZcIixcbiAgICBcImluXCIsXG4gICAgXCJpbnRvXCIsXG4gICAgXCJpc1wiLFxuICAgIFwiaXRcIixcbiAgICBcIml0c1wiLFxuICAgIFwianVzdFwiLFxuICAgIFwibGVhc3RcIixcbiAgICBcImxldFwiLFxuICAgIFwibGlrZVwiLFxuICAgIFwibGlrZWx5XCIsXG4gICAgXCJtYXlcIixcbiAgICBcIm1lXCIsXG4gICAgXCJtaWdodFwiLFxuICAgIFwibW9zdFwiLFxuICAgIFwibXVzdFwiLFxuICAgIFwibXlcIixcbiAgICBcIm5laXRoZXJcIixcbiAgICBcIm5vXCIsXG4gICAgXCJub3JcIixcbiAgICBcIm5vdFwiLFxuICAgIFwib2ZcIixcbiAgICBcIm9mZlwiLFxuICAgIFwib2Z0ZW5cIixcbiAgICBcIm9uXCIsXG4gICAgXCJvbmx5XCIsXG4gICAgXCJvclwiLFxuICAgIFwib3RoZXJcIixcbiAgICBcIm91clwiLFxuICAgIFwib3duXCIsXG4gICAgXCJyYXRoZXJcIixcbiAgICBcInNhaWRcIixcbiAgICBcInNheVwiLFxuICAgIFwic2F5c1wiLFxuICAgIFwic2hlXCIsXG4gICAgXCJzaG91bGRcIixcbiAgICBcInNpbmNlXCIsXG4gICAgXCJzb1wiLFxuICAgIFwic29tZVwiLFxuICAgIFwidGhhblwiLFxuICAgIFwidGhhdFwiLFxuICAgIFwidGhlXCIsXG4gICAgXCJ0aGVpclwiLFxuICAgIFwidGhlbVwiLFxuICAgIFwidGhlblwiLFxuICAgIFwidGhlcmVcIixcbiAgICBcInRoZXNlXCIsXG4gICAgXCJ0aGV5XCIsXG4gICAgXCJ0aGlzXCIsXG4gICAgXCJ0aXNcIixcbiAgICBcInRvXCIsXG4gICAgXCJ0b29cIixcbiAgICBcInR3YXNcIixcbiAgICBcInVzXCIsXG4gICAgXCJ3YW50c1wiLFxuICAgIFwid2FzXCIsXG4gICAgXCJ3ZVwiLFxuICAgIFwid2VyZVwiLFxuICAgIFwid2hhdFwiLFxuICAgIFwid2hlblwiLFxuICAgIFwid2hlcmVcIixcbiAgICBcIndoaWNoXCIsXG4gICAgXCJ3aGlsZVwiLFxuICAgIFwid2hvXCIsXG4gICAgXCJ3aG9tXCIsXG4gICAgXCJ3aHlcIixcbiAgICBcIndpbGxcIixcbiAgICBcIndpdGhcIixcbiAgICBcIndvdWxkXCIsXG4gICAgXCJ5ZXRcIixcbiAgICBcInlvdVwiLFxuICAgIFwieW91clwiLFxuICBdKTtcblxuICBsdW5yLlBpcGVsaW5lLnJlZ2lzdGVyRnVuY3Rpb24obHVuci5zdG9wV29yZEZpbHRlciwgXCJzdG9wV29yZEZpbHRlclwiKTtcbiAgLyohXG4gICAqIGx1bnIudHJpbW1lclxuICAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgT2xpdmVyIE5pZ2h0aW5nYWxlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBsdW5yLnRyaW1tZXIgaXMgYSBwaXBlbGluZSBmdW5jdGlvbiBmb3IgdHJpbW1pbmcgbm9uIHdvcmRcbiAgICogY2hhcmFjdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0b2tlbnMgYmVmb3JlIHRoZXlcbiAgICogZW50ZXIgdGhlIGluZGV4LlxuICAgKlxuICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIG1heSBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbiBsYXRpblxuICAgKiBjaGFyYWN0ZXJzIGFuZCBzaG91bGQgZWl0aGVyIGJlIHJlbW92ZWQgb3IgYWRhcHRlZCBmb3IgdXNlXG4gICAqIHdpdGggbGFuZ3VhZ2VzIHdpdGggbm9uLWxhdGluIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQGltcGxlbWVudHMge2x1bnIuUGlwZWxpbmVGdW5jdGlvbn1cbiAgICogQHBhcmFtIHtsdW5yLlRva2VufSB0b2tlbiBUaGUgdG9rZW4gdG8gcGFzcyB0aHJvdWdoIHRoZSBmaWx0ZXJcbiAgICogQHJldHVybnMge2x1bnIuVG9rZW59XG4gICAqIEBzZWUgbHVuci5QaXBlbGluZVxuICAgKi9cbiAgbHVuci50cmltbWVyID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgcmV0dXJuIHRva2VuLnVwZGF0ZShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXlxcVysvLCBcIlwiKS5yZXBsYWNlKC9cXFcrJC8sIFwiXCIpO1xuICAgIH0pO1xuICB9O1xuXG4gIGx1bnIuUGlwZWxpbmUucmVnaXN0ZXJGdW5jdGlvbihsdW5yLnRyaW1tZXIsIFwidHJpbW1lclwiKTtcbiAgLyohXG4gICAqIGx1bnIuVG9rZW5TZXRcbiAgICogQ29weXJpZ2h0IChDKSAyMDIwIE9saXZlciBOaWdodGluZ2FsZVxuICAgKi9cblxuICAvKipcbiAgICogQSB0b2tlbiBzZXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgdW5pcXVlIGxpc3Qgb2YgYWxsIHRva2Vuc1xuICAgKiB3aXRoaW4gYW4gaW5kZXguIFRva2VuIHNldHMgYXJlIGFsc28gdXNlZCB0byByZXByZXNlbnQgYW5cbiAgICogaW5jb21pbmcgcXVlcnkgdG8gdGhlIGluZGV4LCB0aGlzIHF1ZXJ5IHRva2VuIHNldCBhbmQgaW5kZXhcbiAgICogdG9rZW4gc2V0IGFyZSB0aGVuIGludGVyc2VjdGVkIHRvIGZpbmQgd2hpY2ggdG9rZW5zIHRvIGxvb2tcbiAgICogdXAgaW4gdGhlIGludmVydGVkIGluZGV4LlxuICAgKlxuICAgKiBBIHRva2VuIHNldCBjYW4gaG9sZCBtdWx0aXBsZSB0b2tlbnMsIGFzIGluIHRoZSBjYXNlIG9mIHRoZVxuICAgKiBpbmRleCB0b2tlbiBzZXQsIG9yIGl0IGNhbiBob2xkIGEgc2luZ2xlIHRva2VuIGFzIGluIHRoZVxuICAgKiBjYXNlIG9mIGEgc2ltcGxlIHF1ZXJ5IHRva2VuIHNldC5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5IHRva2VuIHNldHMgYXJlIHVzZWQgdG8gcGVyZm9ybSB3aWxkY2FyZCBtYXRjaGluZy5cbiAgICogTGVhZGluZywgY29udGFpbmVkIGFuZCB0cmFpbGluZyB3aWxkY2FyZHMgYXJlIHN1cHBvcnRlZCwgYW5kXG4gICAqIGZyb20gdGhpcyBlZGl0IGRpc3RhbmNlIG1hdGNoaW5nIGNhbiBhbHNvIGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBUb2tlbiBzZXRzIGFyZSBpbXBsZW1lbnRlZCBhcyBhIG1pbmltYWwgZmluaXRlIHN0YXRlIGF1dG9tYXRhLFxuICAgKiB3aGVyZSBib3RoIGNvbW1vbiBwcmVmaXhlcyBhbmQgc3VmZml4ZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRva2Vucy5cbiAgICogVGhpcyBoZWxwcyB0byByZWR1Y2UgdGhlIHNwYWNlIHVzZWQgZm9yIHN0b3JpbmcgdGhlIHRva2VuIHNldC5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBsdW5yLlRva2VuU2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZmluYWwgPSBmYWxzZTtcbiAgICB0aGlzLmVkZ2VzID0ge307XG4gICAgdGhpcy5pZCA9IGx1bnIuVG9rZW5TZXQuX25leHRJZDtcbiAgICBsdW5yLlRva2VuU2V0Ll9uZXh0SWQgKz0gMTtcbiAgfTtcblxuICAvKipcbiAgICogS2VlcHMgdHJhY2sgb2YgdGhlIG5leHQsIGF1dG8gaW5jcmVtZW50LCBpZGVudGlmaWVyIHRvIGFzc2lnblxuICAgKiB0byBhIG5ldyB0b2tlblNldC5cbiAgICpcbiAgICogVG9rZW5TZXRzIHJlcXVpcmUgYSB1bmlxdWUgaWRlbnRpZmllciB0byBiZSBjb3JyZWN0bHkgbWluaW1pc2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbHVuci5Ub2tlblNldC5fbmV4dElkID0gMTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRva2VuU2V0IGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHNvcnRlZCBhcnJheSBvZiB3b3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gYXJyIC0gQSBzb3J0ZWQgYXJyYXkgb2Ygc3RyaW5ncyB0byBjcmVhdGUgdGhlIHNldCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlblNldH1cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBpbnB1dCBhcnJheSBpcyBub3Qgc29ydGVkLlxuICAgKi9cbiAgbHVuci5Ub2tlblNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gICAgdmFyIGJ1aWxkZXIgPSBuZXcgbHVuci5Ub2tlblNldC5CdWlsZGVyKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBidWlsZGVyLmluc2VydChhcnJbaV0pO1xuICAgIH1cblxuICAgIGJ1aWxkZXIuZmluaXNoKCk7XG4gICAgcmV0dXJuIGJ1aWxkZXIucm9vdDtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRva2VuIHNldCBmcm9tIGEgcXVlcnkgY2xhdXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2xhdXNlIC0gQSBzaW5nbGUgY2xhdXNlIGZyb20gbHVuci5RdWVyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXVzZS50ZXJtIC0gVGhlIHF1ZXJ5IGNsYXVzZSB0ZXJtLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NsYXVzZS5lZGl0RGlzdGFuY2VdIC0gVGhlIG9wdGlvbmFsIGVkaXQgZGlzdGFuY2UgZm9yIHRoZSB0ZXJtLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlblNldH1cbiAgICovXG4gIGx1bnIuVG9rZW5TZXQuZnJvbUNsYXVzZSA9IGZ1bmN0aW9uIChjbGF1c2UpIHtcbiAgICBpZiAoXCJlZGl0RGlzdGFuY2VcIiBpbiBjbGF1c2UpIHtcbiAgICAgIHJldHVybiBsdW5yLlRva2VuU2V0LmZyb21GdXp6eVN0cmluZyhjbGF1c2UudGVybSwgY2xhdXNlLmVkaXREaXN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsdW5yLlRva2VuU2V0LmZyb21TdHJpbmcoY2xhdXNlLnRlcm0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRva2VuIHNldCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWRcbiAgICogZWRpdCBkaXN0YW5jZS5cbiAgICpcbiAgICogSW5zZXJ0aW9ucywgZGVsZXRpb25zLCBzdWJzdGl0dXRpb25zIGFuZCB0cmFuc3Bvc2l0aW9ucyBhcmUgZWFjaFxuICAgKiB0cmVhdGVkIGFzIGFuIGVkaXQgZGlzdGFuY2Ugb2YgMS5cbiAgICpcbiAgICogSW5jcmVhc2luZyB0aGUgYWxsb3dlZCBlZGl0IGRpc3RhbmNlIHdpbGwgaGF2ZSBhIGRyYW1hdGljIGltcGFjdFxuICAgKiBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgYm90aCBjcmVhdGluZyBhbmQgaW50ZXJzZWN0aW5nIHRoZXNlIFRva2VuU2V0cy5cbiAgICogSXQgaXMgYWR2aXNlZCB0byBrZWVwIHRoZSBlZGl0IGRpc3RhbmNlIGxlc3MgdGhhbiAzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBjcmVhdGUgdGhlIHRva2VuIHNldCBmcm9tLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZWRpdERpc3RhbmNlIC0gVGhlIGFsbG93ZWQgZWRpdCBkaXN0YW5jZSB0byBtYXRjaC5cbiAgICogQHJldHVybnMge2x1bnIuVmVjdG9yfVxuICAgKi9cbiAgbHVuci5Ub2tlblNldC5mcm9tRnV6enlTdHJpbmcgPSBmdW5jdGlvbiAoc3RyLCBlZGl0RGlzdGFuY2UpIHtcbiAgICB2YXIgcm9vdCA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG5cbiAgICB2YXIgc3RhY2sgPSBbXG4gICAgICB7XG4gICAgICAgIG5vZGU6IHJvb3QsXG4gICAgICAgIGVkaXRzUmVtYWluaW5nOiBlZGl0RGlzdGFuY2UsXG4gICAgICAgIHN0cjogc3RyLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgdmFyIGZyYW1lID0gc3RhY2sucG9wKCk7XG5cbiAgICAgIC8vIG5vIGVkaXRcbiAgICAgIGlmIChmcmFtZS5zdHIubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgY2hhciA9IGZyYW1lLnN0ci5jaGFyQXQoMCksXG4gICAgICAgICAgbm9FZGl0Tm9kZTtcblxuICAgICAgICBpZiAoY2hhciBpbiBmcmFtZS5ub2RlLmVkZ2VzKSB7XG4gICAgICAgICAgbm9FZGl0Tm9kZSA9IGZyYW1lLm5vZGUuZWRnZXNbY2hhcl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9FZGl0Tm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG4gICAgICAgICAgZnJhbWUubm9kZS5lZGdlc1tjaGFyXSA9IG5vRWRpdE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhbWUuc3RyLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgbm9FZGl0Tm9kZS5maW5hbCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBub2RlOiBub0VkaXROb2RlLFxuICAgICAgICAgIGVkaXRzUmVtYWluaW5nOiBmcmFtZS5lZGl0c1JlbWFpbmluZyxcbiAgICAgICAgICBzdHI6IGZyYW1lLnN0ci5zbGljZSgxKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmcmFtZS5lZGl0c1JlbWFpbmluZyA9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpbnNlcnRpb25cbiAgICAgIGlmIChcIipcIiBpbiBmcmFtZS5ub2RlLmVkZ2VzKSB7XG4gICAgICAgIHZhciBpbnNlcnRpb25Ob2RlID0gZnJhbWUubm9kZS5lZGdlc1tcIipcIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW5zZXJ0aW9uTm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG4gICAgICAgIGZyYW1lLm5vZGUuZWRnZXNbXCIqXCJdID0gaW5zZXJ0aW9uTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPT0gMCkge1xuICAgICAgICBpbnNlcnRpb25Ob2RlLmZpbmFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgIG5vZGU6IGluc2VydGlvbk5vZGUsXG4gICAgICAgIGVkaXRzUmVtYWluaW5nOiBmcmFtZS5lZGl0c1JlbWFpbmluZyAtIDEsXG4gICAgICAgIHN0cjogZnJhbWUuc3RyLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIGRlbGV0aW9uXG4gICAgICAvLyBjYW4gb25seSBkbyBhIGRlbGV0aW9uIGlmIHdlIGhhdmUgZW5vdWdoIGVkaXRzIHJlbWFpbmluZ1xuICAgICAgLy8gYW5kIGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGxlZnQgdG8gZGVsZXRlIGluIHRoZSBzdHJpbmdcbiAgICAgIGlmIChmcmFtZS5zdHIubGVuZ3RoID4gMSkge1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBub2RlOiBmcmFtZS5ub2RlLFxuICAgICAgICAgIGVkaXRzUmVtYWluaW5nOiBmcmFtZS5lZGl0c1JlbWFpbmluZyAtIDEsXG4gICAgICAgICAgc3RyOiBmcmFtZS5zdHIuc2xpY2UoMSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWxldGlvblxuICAgICAgLy8ganVzdCByZW1vdmluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RyXG4gICAgICBpZiAoZnJhbWUuc3RyLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGZyYW1lLm5vZGUuZmluYWwgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBzdWJzdGl0dXRpb25cbiAgICAgIC8vIGNhbiBvbmx5IGRvIGEgc3Vic3RpdHV0aW9uIGlmIHdlIGhhdmUgZW5vdWdoIGVkaXRzIHJlbWFpbmluZ1xuICAgICAgLy8gYW5kIGlmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIGxlZnQgdG8gc3Vic3RpdHV0ZVxuICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPj0gMSkge1xuICAgICAgICBpZiAoXCIqXCIgaW4gZnJhbWUubm9kZS5lZGdlcykge1xuICAgICAgICAgIHZhciBzdWJzdGl0dXRpb25Ob2RlID0gZnJhbWUubm9kZS5lZGdlc1tcIipcIl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHN1YnN0aXR1dGlvbk5vZGUgPSBuZXcgbHVuci5Ub2tlblNldCgpO1xuICAgICAgICAgIGZyYW1lLm5vZGUuZWRnZXNbXCIqXCJdID0gc3Vic3RpdHV0aW9uTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmFtZS5zdHIubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlLmZpbmFsID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIG5vZGU6IHN1YnN0aXR1dGlvbk5vZGUsXG4gICAgICAgICAgZWRpdHNSZW1haW5pbmc6IGZyYW1lLmVkaXRzUmVtYWluaW5nIC0gMSxcbiAgICAgICAgICBzdHI6IGZyYW1lLnN0ci5zbGljZSgxKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIC8vIGNhbiBvbmx5IGRvIGEgdHJhbnNwb3NpdGlvbiBpZiB0aGVyZSBhcmUgZWRpdHMgcmVtYWluaW5nXG4gICAgICAvLyBhbmQgdGhlcmUgYXJlIGVub3VnaCBjaGFyYWN0ZXJzIHRvIHRyYW5zcG9zZVxuICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBjaGFyQSA9IGZyYW1lLnN0ci5jaGFyQXQoMCksXG4gICAgICAgICAgY2hhckIgPSBmcmFtZS5zdHIuY2hhckF0KDEpLFxuICAgICAgICAgIHRyYW5zcG9zZU5vZGU7XG5cbiAgICAgICAgaWYgKGNoYXJCIGluIGZyYW1lLm5vZGUuZWRnZXMpIHtcbiAgICAgICAgICB0cmFuc3Bvc2VOb2RlID0gZnJhbWUubm9kZS5lZGdlc1tjaGFyQl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNwb3NlTm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCk7XG4gICAgICAgICAgZnJhbWUubm9kZS5lZGdlc1tjaGFyQl0gPSB0cmFuc3Bvc2VOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYW1lLnN0ci5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIHRyYW5zcG9zZU5vZGUuZmluYWwgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgbm9kZTogdHJhbnNwb3NlTm9kZSxcbiAgICAgICAgICBlZGl0c1JlbWFpbmluZzogZnJhbWUuZWRpdHNSZW1haW5pbmcgLSAxLFxuICAgICAgICAgIHN0cjogY2hhckEgKyBmcmFtZS5zdHIuc2xpY2UoMiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVG9rZW5TZXQgZnJvbSBhIHN0cmluZy5cbiAgICpcbiAgICogVGhlIHN0cmluZyBtYXkgY29udGFpbiBvbmUgb3IgbW9yZSB3aWxkY2FyZCBjaGFyYWN0ZXJzICgqKVxuICAgKiB0aGF0IHdpbGwgYWxsb3cgd2lsZGNhcmQgbWF0Y2hpbmcgd2hlbiBpbnRlcnNlY3Rpbmcgd2l0aFxuICAgKiBhbm90aGVyIFRva2VuU2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBjcmVhdGUgYSBUb2tlblNldCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bHVuci5Ub2tlblNldH1cbiAgICovXG4gIGx1bnIuVG9rZW5TZXQuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCksXG4gICAgICByb290ID0gbm9kZTtcblxuICAgIC8qXG4gICAgICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgY2hhcmFjdGVycyB3aXRoaW4gdGhlIHBhc3NlZCBzdHJpbmdcbiAgICAgKiBhcHBlbmRpbmcgYSBub2RlIGZvciBlYWNoIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqIFdoZW4gYSB3aWxkY2FyZCBjaGFyYWN0ZXIgaXMgZm91bmQgdGhlbiBhIHNlbGZcbiAgICAgKiByZWZlcmVuY2luZyBlZGdlIGlzIGludHJvZHVjZWQgdG8gY29udGludWFsbHkgbWF0Y2hcbiAgICAgKiBhbnkgbnVtYmVyIG9mIGFueSBjaGFyYWN0ZXJzLlxuICAgICAqL1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjaGFyID0gc3RyW2ldLFxuICAgICAgICBmaW5hbCA9IGkgPT0gbGVuIC0gMTtcblxuICAgICAgaWYgKGNoYXIgPT0gXCIqXCIpIHtcbiAgICAgICAgbm9kZS5lZGdlc1tjaGFyXSA9IG5vZGU7XG4gICAgICAgIG5vZGUuZmluYWwgPSBmaW5hbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuZXh0ID0gbmV3IGx1bnIuVG9rZW5TZXQoKTtcbiAgICAgICAgbmV4dC5maW5hbCA9IGZpbmFsO1xuXG4gICAgICAgIG5vZGUuZWRnZXNbY2hhcl0gPSBuZXh0O1xuICAgICAgICBub2RlID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhpcyBUb2tlblNldCBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3NcbiAgICogY29udGFpbmVkIHdpdGhpbiB0aGUgVG9rZW5TZXQuXG4gICAqXG4gICAqIFRoaXMgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgb24gYSBUb2tlblNldCB0aGF0XG4gICAqIGNvbnRhaW5zIHdpbGRjYXJkcywgaW4gdGhlc2UgY2FzZXMgdGhlIHJlc3VsdHMgYXJlXG4gICAqIHVuZGVmaW5lZCBhbmQgYXJlIGxpa2VseSB0byBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBsdW5yLlRva2VuU2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3b3JkcyA9IFtdO1xuXG4gICAgdmFyIHN0YWNrID0gW1xuICAgICAge1xuICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIG5vZGU6IHRoaXMsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICB2YXIgZnJhbWUgPSBzdGFjay5wb3AoKSxcbiAgICAgICAgZWRnZXMgPSBPYmplY3Qua2V5cyhmcmFtZS5ub2RlLmVkZ2VzKSxcbiAgICAgICAgbGVuID0gZWRnZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoZnJhbWUubm9kZS5maW5hbCkge1xuICAgICAgICAvKiBJbiBTYWZhcmksIGF0IHRoaXMgcG9pbnQgdGhlIHByZWZpeCBpcyBzb21ldGltZXMgY29ycnVwdGVkLCBzZWU6XG4gICAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9vbGl2ZXJubi9sdW5yLmpzL2lzc3Vlcy8yNzkgQ2FsbGluZyBhbnlcbiAgICAgICAgICogU3RyaW5nLnByb3RvdHlwZSBtZXRob2QgZm9yY2VzIFNhZmFyaSB0byBcImNhc3RcIiB0aGlzIHN0cmluZyB0byB3aGF0XG4gICAgICAgICAqIGl0J3Mgc3VwcG9zZWQgdG8gYmUsIGZpeGluZyB0aGUgYnVnLiAqL1xuICAgICAgICBmcmFtZS5wcmVmaXguY2hhckF0KDApO1xuICAgICAgICB3b3Jkcy5wdXNoKGZyYW1lLnByZWZpeCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcblxuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBwcmVmaXg6IGZyYW1lLnByZWZpeC5jb25jYXQoZWRnZSksXG4gICAgICAgICAgbm9kZTogZnJhbWUubm9kZS5lZGdlc1tlZGdlXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBUb2tlblNldC5cbiAgICpcbiAgICogVGhpcyBpcyBpbnRlbmRlZCB0byBhbGxvdyBUb2tlblNldHMgdG8gYmUgdXNlZCBhcyBrZXlzXG4gICAqIGluIG9iamVjdHMsIGxhcmdlbHkgdG8gYWlkIHRoZSBjb25zdHJ1Y3Rpb24gYW5kIG1pbmltaXNhdGlvblxuICAgKiBvZiBhIFRva2VuU2V0LiBBcyBzdWNoIGl0IGlzIG5vdCBkZXNpZ25lZCB0byBiZSBhIGh1bWFuXG4gICAqIGZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUb2tlblNldC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGx1bnIuVG9rZW5TZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIE5PVEU6IFVzaW5nIE9iamVjdC5rZXlzIGhlcmUgYXMgdGhpcy5lZGdlcyBpcyB2ZXJ5IGxpa2VseVxuICAgIC8vIHRvIGVudGVyICdoYXNoLW1vZGUnIHdpdGggbWFueSBrZXlzIGJlaW5nIGFkZGVkXG4gICAgLy9cbiAgICAvLyBhdm9pZGluZyBhIGZvci1pbiBsb29wIGhlcmUgYXMgaXQgbGVhZHMgdG8gdGhlIGZ1bmN0aW9uXG4gICAgLy8gYmVpbmcgZGUtb3B0aW1pc2VkIChhdCBsZWFzdCBpbiBWOCkuIEZyb20gc29tZSBzaW1wbGVcbiAgICAvLyBiZW5jaG1hcmtzIHRoZSBwZXJmb3JtYW5jZSBpcyBjb21wYXJhYmxlLCBidXQgYWxsb3dpbmdcbiAgICAvLyBWOCB0byBvcHRpbWl6ZSBtYXkgbWVhbiBlYXN5IHBlcmZvcm1hbmNlIHdpbnMgaW4gdGhlIGZ1dHVyZS5cblxuICAgIGlmICh0aGlzLl9zdHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdHI7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHRoaXMuZmluYWwgPyBcIjFcIiA6IFwiMFwiLFxuICAgICAgbGFiZWxzID0gT2JqZWN0LmtleXModGhpcy5lZGdlcykuc29ydCgpLFxuICAgICAgbGVuID0gbGFiZWxzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBsYWJlbCA9IGxhYmVsc1tpXSxcbiAgICAgICAgbm9kZSA9IHRoaXMuZWRnZXNbbGFiZWxdO1xuXG4gICAgICBzdHIgPSBzdHIgKyBsYWJlbCArIG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBUb2tlblNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAgICogdGhpcyBUb2tlblNldCBhbmQgdGhlIHBhc3NlZCBUb2tlblNldC5cbiAgICpcbiAgICogVGhpcyBpbnRlcnNlY3Rpb24gd2lsbCB0YWtlIGludG8gYWNjb3VudCBhbnkgd2lsZGNhcmRzXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFRva2VuU2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuVG9rZW5TZXR9IGIgLSBBbiBvdGhlciBUb2tlblNldCB0byBpbnRlcnNlY3Qgd2l0aC5cbiAgICogQHJldHVybnMge2x1bnIuVG9rZW5TZXR9XG4gICAqL1xuICBsdW5yLlRva2VuU2V0LnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAoYikge1xuICAgIHZhciBvdXRwdXQgPSBuZXcgbHVuci5Ub2tlblNldCgpLFxuICAgICAgZnJhbWUgPSB1bmRlZmluZWQ7XG5cbiAgICB2YXIgc3RhY2sgPSBbXG4gICAgICB7XG4gICAgICAgIHFOb2RlOiBiLFxuICAgICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgIGZyYW1lID0gc3RhY2sucG9wKCk7XG5cbiAgICAgIC8vIE5PVEU6IEFzIHdpdGggdGhlICN0b1N0cmluZyBtZXRob2QsIHdlIGFyZSB1c2luZ1xuICAgICAgLy8gT2JqZWN0LmtleXMgYW5kIGEgZm9yIGxvb3AgaW5zdGVhZCBvZiBhIGZvci1pbiBsb29wXG4gICAgICAvLyBhcyBib3RoIG9mIHRoZXNlIG9iamVjdHMgZW50ZXIgJ2hhc2gnIG1vZGUsIGNhdXNpbmdcbiAgICAgIC8vIHRoZSBmdW5jdGlvbiB0byBiZSBkZS1vcHRpbWlzZWQgaW4gVjhcbiAgICAgIHZhciBxRWRnZXMgPSBPYmplY3Qua2V5cyhmcmFtZS5xTm9kZS5lZGdlcyksXG4gICAgICAgIHFMZW4gPSBxRWRnZXMubGVuZ3RoLFxuICAgICAgICBuRWRnZXMgPSBPYmplY3Qua2V5cyhmcmFtZS5ub2RlLmVkZ2VzKSxcbiAgICAgICAgbkxlbiA9IG5FZGdlcy5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIHEgPSAwOyBxIDwgcUxlbjsgcSsrKSB7XG4gICAgICAgIHZhciBxRWRnZSA9IHFFZGdlc1txXTtcblxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5MZW47IG4rKykge1xuICAgICAgICAgIHZhciBuRWRnZSA9IG5FZGdlc1tuXTtcblxuICAgICAgICAgIGlmIChuRWRnZSA9PSBxRWRnZSB8fCBxRWRnZSA9PSBcIipcIikge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBmcmFtZS5ub2RlLmVkZ2VzW25FZGdlXSxcbiAgICAgICAgICAgICAgcU5vZGUgPSBmcmFtZS5xTm9kZS5lZGdlc1txRWRnZV0sXG4gICAgICAgICAgICAgIGZpbmFsID0gbm9kZS5maW5hbCAmJiBxTm9kZS5maW5hbCxcbiAgICAgICAgICAgICAgbmV4dCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKG5FZGdlIGluIGZyYW1lLm91dHB1dC5lZGdlcykge1xuICAgICAgICAgICAgICAvLyBhbiBlZGdlIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGNoYXJhY3RlclxuICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBub2RlLCBqdXN0IHNldCB0aGUgZmluYWxpdHlcbiAgICAgICAgICAgICAgLy8gYml0IHVubGVzcyB0aGlzIG5vZGUgaXMgYWxyZWFkeSBmaW5hbFxuICAgICAgICAgICAgICBuZXh0ID0gZnJhbWUub3V0cHV0LmVkZ2VzW25FZGdlXTtcbiAgICAgICAgICAgICAgbmV4dC5maW5hbCA9IG5leHQuZmluYWwgfHwgZmluYWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBubyBlZGdlIGV4aXN0cyB5ZXQsIG11c3QgY3JlYXRlIG9uZVxuICAgICAgICAgICAgICAvLyBzZXQgdGhlIGZpbmFsaXR5IGJpdCBhbmQgaW5zZXJ0IGl0XG4gICAgICAgICAgICAgIC8vIGludG8gdGhlIG91dHB1dFxuICAgICAgICAgICAgICBuZXh0ID0gbmV3IGx1bnIuVG9rZW5TZXQoKTtcbiAgICAgICAgICAgICAgbmV4dC5maW5hbCA9IGZpbmFsO1xuICAgICAgICAgICAgICBmcmFtZS5vdXRwdXQuZWRnZXNbbkVkZ2VdID0gbmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHFOb2RlOiBxTm9kZSxcbiAgICAgICAgICAgICAgb3V0cHV0OiBuZXh0LFxuICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbiAgbHVuci5Ub2tlblNldC5CdWlsZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucHJldmlvdXNXb3JkID0gXCJcIjtcbiAgICB0aGlzLnJvb3QgPSBuZXcgbHVuci5Ub2tlblNldCgpO1xuICAgIHRoaXMudW5jaGVja2VkTm9kZXMgPSBbXTtcbiAgICB0aGlzLm1pbmltaXplZE5vZGVzID0ge307XG4gIH07XG5cbiAgbHVuci5Ub2tlblNldC5CdWlsZGVyLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAod29yZCkge1xuICAgIHZhciBub2RlLFxuICAgICAgY29tbW9uUHJlZml4ID0gMDtcblxuICAgIGlmICh3b3JkIDwgdGhpcy5wcmV2aW91c1dvcmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk91dCBvZiBvcmRlciB3b3JkIGluc2VydGlvblwiKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmQubGVuZ3RoICYmIGkgPCB0aGlzLnByZXZpb3VzV29yZC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHdvcmRbaV0gIT0gdGhpcy5wcmV2aW91c1dvcmRbaV0pIGJyZWFrO1xuICAgICAgY29tbW9uUHJlZml4Kys7XG4gICAgfVxuXG4gICAgdGhpcy5taW5pbWl6ZShjb21tb25QcmVmaXgpO1xuXG4gICAgaWYgKHRoaXMudW5jaGVja2VkTm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIG5vZGUgPSB0aGlzLnJvb3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSB0aGlzLnVuY2hlY2tlZE5vZGVzW3RoaXMudW5jaGVja2VkTm9kZXMubGVuZ3RoIC0gMV0uY2hpbGQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGNvbW1vblByZWZpeDsgaSA8IHdvcmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXh0Tm9kZSA9IG5ldyBsdW5yLlRva2VuU2V0KCksXG4gICAgICAgIGNoYXIgPSB3b3JkW2ldO1xuXG4gICAgICBub2RlLmVkZ2VzW2NoYXJdID0gbmV4dE5vZGU7XG5cbiAgICAgIHRoaXMudW5jaGVja2VkTm9kZXMucHVzaCh7XG4gICAgICAgIHBhcmVudDogbm9kZSxcbiAgICAgICAgY2hhcjogY2hhcixcbiAgICAgICAgY2hpbGQ6IG5leHROb2RlLFxuICAgICAgfSk7XG5cbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmZpbmFsID0gdHJ1ZTtcbiAgICB0aGlzLnByZXZpb3VzV29yZCA9IHdvcmQ7XG4gIH07XG5cbiAgbHVuci5Ub2tlblNldC5CdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5taW5pbWl6ZSgwKTtcbiAgfTtcblxuICBsdW5yLlRva2VuU2V0LkJ1aWxkZXIucHJvdG90eXBlLm1pbmltaXplID0gZnVuY3Rpb24gKGRvd25Ubykge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLnVuY2hlY2tlZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gZG93blRvOyBpLS0pIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy51bmNoZWNrZWROb2Rlc1tpXSxcbiAgICAgICAgY2hpbGRLZXkgPSBub2RlLmNoaWxkLnRvU3RyaW5nKCk7XG5cbiAgICAgIGlmIChjaGlsZEtleSBpbiB0aGlzLm1pbmltaXplZE5vZGVzKSB7XG4gICAgICAgIG5vZGUucGFyZW50LmVkZ2VzW25vZGUuY2hhcl0gPSB0aGlzLm1pbmltaXplZE5vZGVzW2NoaWxkS2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENhY2hlIHRoZSBrZXkgZm9yIHRoaXMgbm9kZSBzaW5jZVxuICAgICAgICAvLyB3ZSBrbm93IGl0IGNhbid0IGNoYW5nZSBhbnltb3JlXG4gICAgICAgIG5vZGUuY2hpbGQuX3N0ciA9IGNoaWxkS2V5O1xuXG4gICAgICAgIHRoaXMubWluaW1pemVkTm9kZXNbY2hpbGRLZXldID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy51bmNoZWNrZWROb2Rlcy5wb3AoKTtcbiAgICB9XG4gIH07XG4gIC8qIVxuICAgKiBsdW5yLkluZGV4XG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEFuIGluZGV4IGNvbnRhaW5zIHRoZSBidWlsdCBpbmRleCBvZiBhbGwgZG9jdW1lbnRzIGFuZCBwcm92aWRlcyBhIHF1ZXJ5IGludGVyZmFjZVxuICAgKiB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIFVzdWFsbHkgaW5zdGFuY2VzIG9mIGx1bnIuSW5kZXggd2lsbCBub3QgYmUgY3JlYXRlZCB1c2luZyB0aGlzIGNvbnN0cnVjdG9yLCBpbnN0ZWFkXG4gICAqIGx1bnIuQnVpbGRlciBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3QgbmV3IGluZGV4ZXMsIG9yIGx1bnIuSW5kZXgubG9hZCBzaG91bGQgYmVcbiAgICogdXNlZCB0byBsb2FkIHByZXZpb3VzbHkgYnVpbHQgYW5kIHNlcmlhbGl6ZWQgaW5kZXhlcy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyAtIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBidWlsdCBzZWFyY2ggaW5kZXguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycy5pbnZlcnRlZEluZGV4IC0gQW4gaW5kZXggb2YgdGVybS9maWVsZCB0byBkb2N1bWVudCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgbHVuci5WZWN0b3I+fSBhdHRycy5maWVsZFZlY3RvcnMgLSBGaWVsZCB2ZWN0b3JzXG4gICAqIEBwYXJhbSB7bHVuci5Ub2tlblNldH0gYXR0cnMudG9rZW5TZXQgLSBBbiBzZXQgb2YgYWxsIGNvcnB1cyB0b2tlbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGF0dHJzLmZpZWxkcyAtIFRoZSBuYW1lcyBvZiBpbmRleGVkIGRvY3VtZW50IGZpZWxkcy5cbiAgICogQHBhcmFtIHtsdW5yLlBpcGVsaW5lfSBhdHRycy5waXBlbGluZSAtIFRoZSBwaXBlbGluZSB0byB1c2UgZm9yIHNlYXJjaCB0ZXJtcy5cbiAgICovXG4gIGx1bnIuSW5kZXggPSBmdW5jdGlvbiAoYXR0cnMpIHtcbiAgICB0aGlzLmludmVydGVkSW5kZXggPSBhdHRycy5pbnZlcnRlZEluZGV4O1xuICAgIHRoaXMuZmllbGRWZWN0b3JzID0gYXR0cnMuZmllbGRWZWN0b3JzO1xuICAgIHRoaXMudG9rZW5TZXQgPSBhdHRycy50b2tlblNldDtcbiAgICB0aGlzLmZpZWxkcyA9IGF0dHJzLmZpZWxkcztcbiAgICB0aGlzLnBpcGVsaW5lID0gYXR0cnMucGlwZWxpbmU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcmVzdWx0IGNvbnRhaW5zIGRldGFpbHMgb2YgYSBkb2N1bWVudCBtYXRjaGluZyBhIHNlYXJjaCBxdWVyeS5cbiAgICogQHR5cGVkZWYge09iamVjdH0gbHVuci5JbmRleH5SZXN1bHRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZiAtIFRoZSByZWZlcmVuY2Ugb2YgdGhlIGRvY3VtZW50IHRoaXMgcmVzdWx0IHJlcHJlc2VudHMuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY29yZSAtIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSByZXByZXNlbnRpbmcgaG93IHNpbWlsYXIgdGhpcyBkb2N1bWVudCBpcyB0byB0aGUgcXVlcnkuXG4gICAqIEBwcm9wZXJ0eSB7bHVuci5NYXRjaERhdGF9IG1hdGNoRGF0YSAtIENvbnRhaW5zIG1ldGFkYXRhIGFib3V0IHRoaXMgbWF0Y2ggaW5jbHVkaW5nIHdoaWNoIHRlcm0ocykgY2F1c2VkIHRoZSBtYXRjaC5cbiAgICovXG5cbiAgLyoqXG4gICAqIEFsdGhvdWdoIGx1bnIgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIHF1ZXJpZXMgdXNpbmcgbHVuci5RdWVyeSwgaXQgYWxzbyBwcm92aWRlcyBhIHNpbXBsZVxuICAgKiBxdWVyeSBsYW5ndWFnZSB3aGljaCBpdHNlbGYgaXMgcGFyc2VkIGludG8gYW4gaW5zdGFuY2Ugb2YgbHVuci5RdWVyeS5cbiAgICpcbiAgICogRm9yIHByb2dyYW1tYXRpY2FsbHkgYnVpbGRpbmcgcXVlcmllcyBpdCBpcyBhZHZpc2VkIHRvIGRpcmVjdGx5IHVzZSBsdW5yLlF1ZXJ5LCB0aGUgcXVlcnkgbGFuZ3VhZ2VcbiAgICogaXMgYmVzdCB1c2VkIGZvciBodW1hbiBlbnRlcmVkIHRleHQgcmF0aGVyIHRoYW4gcHJvZ3JhbSBnZW5lcmF0ZWQgdGV4dC5cbiAgICpcbiAgICogQXQgaXRzIHNpbXBsZXN0IHF1ZXJpZXMgY2FuIGp1c3QgYmUgYSBzaW5nbGUgdGVybSwgZS5nLiBgaGVsbG9gLCBtdWx0aXBsZSB0ZXJtcyBhcmUgYWxzbyBzdXBwb3J0ZWRcbiAgICogYW5kIHdpbGwgYmUgY29tYmluZWQgd2l0aCBPUiwgZS5nIGBoZWxsbyB3b3JsZGAgd2lsbCBtYXRjaCBkb2N1bWVudHMgdGhhdCBjb250YWluIGVpdGhlciAnaGVsbG8nXG4gICAqIG9yICd3b3JsZCcsIHRob3VnaCB0aG9zZSB0aGF0IGNvbnRhaW4gYm90aCB3aWxsIHJhbmsgaGlnaGVyIGluIHRoZSByZXN1bHRzLlxuICAgKlxuICAgKiBXaWxkY2FyZHMgY2FuIGJlIGluY2x1ZGVkIGluIHRlcm1zIHRvIG1hdGNoIG9uZSBvciBtb3JlIHVuc3BlY2lmaWVkIGNoYXJhY3RlcnMsIHRoZXNlIHdpbGRjYXJkcyBjYW5cbiAgICogYmUgaW5zZXJ0ZWQgYW55d2hlcmUgd2l0aGluIHRoZSB0ZXJtLCBhbmQgbW9yZSB0aGFuIG9uZSB3aWxkY2FyZCBjYW4gZXhpc3QgaW4gYSBzaW5nbGUgdGVybS4gQWRkaW5nXG4gICAqIHdpbGRjYXJkcyB3aWxsIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIHRoYXQgd2lsbCBiZSBmb3VuZCBidXQgY2FuIGFsc28gaGF2ZSBhIG5lZ2F0aXZlXG4gICAqIGltcGFjdCBvbiBxdWVyeSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSB3aXRoIHdpbGRjYXJkcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgdGVybS5cbiAgICpcbiAgICogVGVybXMgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gc3BlY2lmaWMgZmllbGRzLCBlLmcuIGB0aXRsZTpoZWxsb2AsIG9ubHkgZG9jdW1lbnRzIHdpdGggdGhlIHRlcm1cbiAgICogaGVsbG8gaW4gdGhlIHRpdGxlIGZpZWxkIHdpbGwgbWF0Y2ggdGhpcyBxdWVyeS4gVXNpbmcgYSBmaWVsZCBub3QgcHJlc2VudCBpbiB0aGUgaW5kZXggd2lsbCBsZWFkXG4gICAqIHRvIGFuIGVycm9yIGJlaW5nIHRocm93bi5cbiAgICpcbiAgICogTW9kaWZpZXJzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIHRlcm1zLCBsdW5yIHN1cHBvcnRzIGVkaXQgZGlzdGFuY2UgYW5kIGJvb3N0IG1vZGlmaWVycyBvbiB0ZXJtcy4gQSB0ZXJtXG4gICAqIGJvb3N0IHdpbGwgbWFrZSBkb2N1bWVudHMgbWF0Y2hpbmcgdGhhdCB0ZXJtIHNjb3JlIGhpZ2hlciwgZS5nLiBgZm9vXjVgLiBFZGl0IGRpc3RhbmNlIGlzIGFsc28gc3VwcG9ydGVkXG4gICAqIHRvIHByb3ZpZGUgZnV6enkgbWF0Y2hpbmcsIGUuZy4gJ2hlbGxvfjInIHdpbGwgbWF0Y2ggZG9jdW1lbnRzIHdpdGggaGVsbG8gd2l0aCBhbiBlZGl0IGRpc3RhbmNlIG9mIDIuXG4gICAqIEF2b2lkIGxhcmdlIHZhbHVlcyBmb3IgZWRpdCBkaXN0YW5jZSB0byBpbXByb3ZlIHF1ZXJ5IHBlcmZvcm1hbmNlLlxuICAgKlxuICAgKiBFYWNoIHRlcm0gYWxzbyBzdXBwb3J0cyBhIHByZXNlbmNlIG1vZGlmaWVyLiBCeSBkZWZhdWx0IGEgdGVybSdzIHByZXNlbmNlIGluIGRvY3VtZW50IGlzIG9wdGlvbmFsLCBob3dldmVyXG4gICAqIHRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gZWl0aGVyIHJlcXVpcmVkIG9yIHByb2hpYml0ZWQuIEZvciBhIHRlcm0ncyBwcmVzZW5jZSB0byBiZSByZXF1aXJlZCBpbiBhIGRvY3VtZW50IHRoZVxuICAgKiB0ZXJtIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIGEgJysnLCBlLmcuIGArZm9vIGJhcmAgaXMgYSBzZWFyY2ggZm9yIGRvY3VtZW50cyB0aGF0IG11c3QgY29udGFpbiAnZm9vJyBhbmRcbiAgICogb3B0aW9uYWxseSBjb250YWluICdiYXInLiBDb252ZXJzZWx5IGEgbGVhZGluZyAnLScgc2V0cyB0aGUgdGVybXMgcHJlc2VuY2UgdG8gcHJvaGliaXRlZCwgaS5lLiBpdCBtdXN0IG5vdFxuICAgKiBhcHBlYXIgaW4gYSBkb2N1bWVudCwgZS5nLiBgLWZvbyBiYXJgIGlzIGEgc2VhcmNoIGZvciBkb2N1bWVudHMgdGhhdCBkbyBub3QgY29udGFpbiAnZm9vJyBidXQgbWF5IGNvbnRhaW4gJ2JhcicuXG4gICAqXG4gICAqIFRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgJ1xcJyBjYW4gYmUgdXNlZCwgdGhpcyBhbGxvd3Mgc2VhcmNoZXMgdG8gaW5jbHVkZVxuICAgKiBjaGFyYWN0ZXJzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29uc2lkZXJlZCBtb2RpZmllcnMsIGUuZy4gYGZvb1xcfjJgIHdpbGwgc2VhcmNoIGZvciBhIHRlcm0gXCJmb29+MlwiIGluc3RlYWRcbiAgICogb2YgYXR0ZW1wdGluZyB0byBhcHBseSBhIGJvb3N0IG9mIDIgdG8gdGhlIHNlYXJjaCB0ZXJtIFwiZm9vXCIuXG4gICAqXG4gICAqIEB0eXBlZGVmIHtzdHJpbmd9IGx1bnIuSW5kZXh+UXVlcnlTdHJpbmdcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+U2ltcGxlIHNpbmdsZSB0ZXJtIHF1ZXJ5PC9jYXB0aW9uPlxuICAgKiBoZWxsb1xuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5NdWx0aXBsZSB0ZXJtIHF1ZXJ5PC9jYXB0aW9uPlxuICAgKiBoZWxsbyB3b3JsZFxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj50ZXJtIHNjb3BlZCB0byBhIGZpZWxkPC9jYXB0aW9uPlxuICAgKiB0aXRsZTpoZWxsb1xuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj50ZXJtIHdpdGggYSBib29zdCBvZiAxMDwvY2FwdGlvbj5cbiAgICogaGVsbG9eMTBcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+dGVybSB3aXRoIGFuIGVkaXQgZGlzdGFuY2Ugb2YgMjwvY2FwdGlvbj5cbiAgICogaGVsbG9+MlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj50ZXJtcyB3aXRoIHByZXNlbmNlIG1vZGlmaWVyczwvY2FwdGlvbj5cbiAgICogLWZvbyArYmFyIGJhelxuICAgKi9cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBzZWFyY2ggYWdhaW5zdCB0aGUgaW5kZXggdXNpbmcgbHVuciBxdWVyeSBzeW50YXguXG4gICAqXG4gICAqIFJlc3VsdHMgd2lsbCBiZSByZXR1cm5lZCBzb3J0ZWQgYnkgdGhlaXIgc2NvcmUsIHRoZSBtb3N0IHJlbGV2YW50IHJlc3VsdHNcbiAgICogd2lsbCBiZSByZXR1cm5lZCBmaXJzdC4gIEZvciBkZXRhaWxzIG9uIGhvdyB0aGUgc2NvcmUgaXMgY2FsY3VsYXRlZCwgcGxlYXNlIHNlZVxuICAgKiB0aGUge0BsaW5rIGh0dHBzOi8vbHVucmpzLmNvbS9ndWlkZXMvc2VhcmNoaW5nLmh0bWwjc2NvcmluZ3xndWlkZX0uXG4gICAqXG4gICAqIEZvciBtb3JlIHByb2dyYW1tYXRpYyBxdWVyeWluZyB1c2UgbHVuci5JbmRleCNxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLkluZGV4flF1ZXJ5U3RyaW5nfSBxdWVyeVN0cmluZyAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsdW5yIHF1ZXJ5LlxuICAgKiBAdGhyb3dzIHtsdW5yLlF1ZXJ5UGFyc2VFcnJvcn0gSWYgdGhlIHBhc3NlZCBxdWVyeSBzdHJpbmcgY2Fubm90IGJlIHBhcnNlZC5cbiAgICogQHJldHVybnMge2x1bnIuSW5kZXh+UmVzdWx0W119XG4gICAqL1xuICBsdW5yLkluZGV4LnByb3RvdHlwZS5zZWFyY2ggPSBmdW5jdGlvbiAocXVlcnlTdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHZhciBwYXJzZXIgPSBuZXcgbHVuci5RdWVyeVBhcnNlcihxdWVyeVN0cmluZywgcXVlcnkpO1xuICAgICAgcGFyc2VyLnBhcnNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcXVlcnkgYnVpbGRlciBjYWxsYmFjayBwcm92aWRlcyBhIHF1ZXJ5IG9iamVjdCB0byBiZSB1c2VkIHRvIGV4cHJlc3NcbiAgICogdGhlIHF1ZXJ5IHRvIHBlcmZvcm0gb24gdGhlIGluZGV4LlxuICAgKlxuICAgKiBAY2FsbGJhY2sgbHVuci5JbmRleH5xdWVyeUJ1aWxkZXJcbiAgICogQHBhcmFtIHtsdW5yLlF1ZXJ5fSBxdWVyeSAtIFRoZSBxdWVyeSBvYmplY3QgdG8gYnVpbGQgdXAuXG4gICAqIEB0aGlzIGx1bnIuUXVlcnlcbiAgICovXG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgcXVlcnkgYWdhaW5zdCB0aGUgaW5kZXggdXNpbmcgdGhlIHlpZWxkZWQgbHVuci5RdWVyeSBvYmplY3QuXG4gICAqXG4gICAqIElmIHBlcmZvcm1pbmcgcHJvZ3JhbW1hdGljIHF1ZXJpZXMgYWdhaW5zdCB0aGUgaW5kZXgsIHRoaXMgbWV0aG9kIGlzIHByZWZlcnJlZFxuICAgKiBvdmVyIGx1bnIuSW5kZXgjc2VhcmNoIHNvIGFzIHRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIHF1ZXJ5IHBhcnNpbmcgb3ZlcmhlYWQuXG4gICAqXG4gICAqIEEgcXVlcnkgb2JqZWN0IGlzIHlpZWxkZWQgdG8gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvXG4gICAqIGV4cHJlc3MgdGhlIHF1ZXJ5IHRvIGJlIHJ1biBhZ2FpbnN0IHRoZSBpbmRleC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBjYWxsYmFjayBwYXJhbWV0ZXIgaXQgaXMgX25vdF8gYW5cbiAgICogYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgdGhlIGNhbGxiYWNrIGlzIGp1c3QgeWllbGRlZCBhIHF1ZXJ5IG9iamVjdCB0byBiZVxuICAgKiBjdXN0b21pemVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2x1bnIuSW5kZXh+cXVlcnlCdWlsZGVyfSBmbiAtIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBxdWVyeS5cbiAgICogQHJldHVybnMge2x1bnIuSW5kZXh+UmVzdWx0W119XG4gICAqL1xuICBsdW5yLkluZGV4LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uIChmbikge1xuICAgIC8vIGZvciBlYWNoIHF1ZXJ5IGNsYXVzZVxuICAgIC8vICogcHJvY2VzcyB0ZXJtc1xuICAgIC8vICogZXhwYW5kIHRlcm1zIGZyb20gdG9rZW4gc2V0XG4gICAgLy8gKiBmaW5kIG1hdGNoaW5nIGRvY3VtZW50cyBhbmQgbWV0YWRhdGFcbiAgICAvLyAqIGdldCBkb2N1bWVudCB2ZWN0b3JzXG4gICAgLy8gKiBzY29yZSBkb2N1bWVudHNcblxuICAgIHZhciBxdWVyeSA9IG5ldyBsdW5yLlF1ZXJ5KHRoaXMuZmllbGRzKSxcbiAgICAgIG1hdGNoaW5nRmllbGRzID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIHF1ZXJ5VmVjdG9ycyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB0ZXJtRmllbGRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICByZXF1aXJlZE1hdGNoZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgcHJvaGliaXRlZE1hdGNoZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgLypcbiAgICAgKiBUbyBzdXBwb3J0IGZpZWxkIGxldmVsIGJvb3N0cyBhIHF1ZXJ5IHZlY3RvciBpcyBjcmVhdGVkIHBlclxuICAgICAqIGZpZWxkLiBBbiBlbXB0eSB2ZWN0b3IgaXMgZWFnZXJseSBjcmVhdGVkIHRvIHN1cHBvcnQgbmVnYXRlZFxuICAgICAqIHF1ZXJpZXMuXG4gICAgICovXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlcnlWZWN0b3JzW3RoaXMuZmllbGRzW2ldXSA9IG5ldyBsdW5yLlZlY3RvcigpO1xuICAgIH1cblxuICAgIGZuLmNhbGwocXVlcnksIHF1ZXJ5KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnkuY2xhdXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLypcbiAgICAgICAqIFVubGVzcyB0aGUgcGlwZWxpbmUgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIHRoaXMgdGVybSwgd2hpY2ggaXNcbiAgICAgICAqIHRoZSBjYXNlIGZvciB0ZXJtcyB3aXRoIHdpbGRjYXJkcywgd2UgbmVlZCB0byBwYXNzIHRoZSBjbGF1c2VcbiAgICAgICAqIHRlcm0gdGhyb3VnaCB0aGUgc2VhcmNoIHBpcGVsaW5lLiBBIHBpcGVsaW5lIHJldHVybnMgYW4gYXJyYXlcbiAgICAgICAqIG9mIHByb2Nlc3NlZCB0ZXJtcy4gUGlwZWxpbmUgZnVuY3Rpb25zIG1heSBleHBhbmQgdGhlIHBhc3NlZFxuICAgICAgICogdGVybSwgd2hpY2ggbWVhbnMgd2UgbWF5IGVuZCB1cCBwZXJmb3JtaW5nIG11bHRpcGxlIGluZGV4IGxvb2t1cHNcbiAgICAgICAqIGZvciBhIHNpbmdsZSBxdWVyeSB0ZXJtLlxuICAgICAgICovXG4gICAgICB2YXIgY2xhdXNlID0gcXVlcnkuY2xhdXNlc1tpXSxcbiAgICAgICAgdGVybXMgPSBudWxsLFxuICAgICAgICBjbGF1c2VNYXRjaGVzID0gbHVuci5TZXQuZW1wdHk7XG5cbiAgICAgIGlmIChjbGF1c2UudXNlUGlwZWxpbmUpIHtcbiAgICAgICAgdGVybXMgPSB0aGlzLnBpcGVsaW5lLnJ1blN0cmluZyhjbGF1c2UudGVybSwge1xuICAgICAgICAgIGZpZWxkczogY2xhdXNlLmZpZWxkcyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtcyA9IFtjbGF1c2UudGVybV07XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgdGVybXMubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgdmFyIHRlcm0gPSB0ZXJtc1ttXTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBFYWNoIHRlcm0gcmV0dXJuZWQgZnJvbSB0aGUgcGlwZWxpbmUgbmVlZHMgdG8gdXNlIHRoZSBzYW1lIHF1ZXJ5XG4gICAgICAgICAqIGNsYXVzZSBvYmplY3QsIGUuZy4gdGhlIHNhbWUgYm9vc3QgYW5kIG9yIGVkaXQgZGlzdGFuY2UuIFRoZVxuICAgICAgICAgKiBzaW1wbGVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byByZS11c2UgdGhlIGNsYXVzZSBvYmplY3QgYnV0IG11dGF0ZVxuICAgICAgICAgKiBpdHMgdGVybSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIGNsYXVzZS50ZXJtID0gdGVybTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBGcm9tIHRoZSB0ZXJtIGluIHRoZSBjbGF1c2Ugd2UgY3JlYXRlIGEgdG9rZW4gc2V0IHdoaWNoIHdpbGwgdGhlblxuICAgICAgICAgKiBiZSB1c2VkIHRvIGludGVyc2VjdCB0aGUgaW5kZXhlcyB0b2tlbiBzZXQgdG8gZ2V0IGEgbGlzdCBvZiB0ZXJtc1xuICAgICAgICAgKiB0byBsb29rdXAgaW4gdGhlIGludmVydGVkIGluZGV4XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdGVybVRva2VuU2V0ID0gbHVuci5Ub2tlblNldC5mcm9tQ2xhdXNlKGNsYXVzZSksXG4gICAgICAgICAgZXhwYW5kZWRUZXJtcyA9IHRoaXMudG9rZW5TZXQuaW50ZXJzZWN0KHRlcm1Ub2tlblNldCkudG9BcnJheSgpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIGEgdGVybSBtYXJrZWQgYXMgcmVxdWlyZWQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRva2VuU2V0IGl0IGlzXG4gICAgICAgICAqIGltcG9zc2libGUgZm9yIHRoZSBzZWFyY2ggdG8gcmV0dXJuIGFueSBtYXRjaGVzLiBXZSBzZXQgYWxsIHRoZSBmaWVsZFxuICAgICAgICAgKiBzY29wZWQgcmVxdWlyZWQgbWF0Y2hlcyBzZXQgdG8gZW1wdHkgYW5kIHN0b3AgZXhhbWluaW5nIGFueSBmdXJ0aGVyXG4gICAgICAgICAqIGNsYXVzZXMuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXhwYW5kZWRUZXJtcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBjbGF1c2UucHJlc2VuY2UgPT09IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjbGF1c2UuZmllbGRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSBjbGF1c2UuZmllbGRzW2tdO1xuICAgICAgICAgICAgcmVxdWlyZWRNYXRjaGVzW2ZpZWxkXSA9IGx1bnIuU2V0LmVtcHR5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBleHBhbmRlZFRlcm1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBGb3IgZWFjaCB0ZXJtIGdldCB0aGUgcG9zdGluZyBhbmQgdGVybUluZGV4LCB0aGlzIGlzIHJlcXVpcmVkIGZvclxuICAgICAgICAgICAqIGJ1aWxkaW5nIHRoZSBxdWVyeSB2ZWN0b3IuXG4gICAgICAgICAgICovXG4gICAgICAgICAgdmFyIGV4cGFuZGVkVGVybSA9IGV4cGFuZGVkVGVybXNbal0sXG4gICAgICAgICAgICBwb3N0aW5nID0gdGhpcy5pbnZlcnRlZEluZGV4W2V4cGFuZGVkVGVybV0sXG4gICAgICAgICAgICB0ZXJtSW5kZXggPSBwb3N0aW5nLl9pbmRleDtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2xhdXNlLmZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIEZvciBlYWNoIGZpZWxkIHRoYXQgdGhpcyBxdWVyeSB0ZXJtIGlzIHNjb3BlZCBieSAoYnkgZGVmYXVsdFxuICAgICAgICAgICAgICogYWxsIGZpZWxkcyBhcmUgaW4gc2NvcGUpIHdlIG5lZWQgdG8gZ2V0IGFsbCB0aGUgZG9jdW1lbnQgcmVmc1xuICAgICAgICAgICAgICogdGhhdCBoYXZlIHRoaXMgdGVybSBpbiB0aGF0IGZpZWxkLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBwb3N0aW5nIGlzIHRoZSBlbnRyeSBpbiB0aGUgaW52ZXJ0ZWRJbmRleCBmb3IgdGhlIG1hdGNoaW5nXG4gICAgICAgICAgICAgKiB0ZXJtIGZyb20gYWJvdmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBmaWVsZCA9IGNsYXVzZS5maWVsZHNba10sXG4gICAgICAgICAgICAgIGZpZWxkUG9zdGluZyA9IHBvc3RpbmdbZmllbGRdLFxuICAgICAgICAgICAgICBtYXRjaGluZ0RvY3VtZW50UmVmcyA9IE9iamVjdC5rZXlzKGZpZWxkUG9zdGluZyksXG4gICAgICAgICAgICAgIHRlcm1GaWVsZCA9IGV4cGFuZGVkVGVybSArIFwiL1wiICsgZmllbGQsXG4gICAgICAgICAgICAgIG1hdGNoaW5nRG9jdW1lbnRzU2V0ID0gbmV3IGx1bnIuU2V0KG1hdGNoaW5nRG9jdW1lbnRSZWZzKTtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIGlmIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHRlcm0gaXMgcmVxdWlyZWQgZW5zdXJlIHRoYXQgdGhlIG1hdGNoaW5nXG4gICAgICAgICAgICAgKiBkb2N1bWVudHMgYXJlIGFkZGVkIHRvIHRoZSBzZXQgb2YgcmVxdWlyZWQgbWF0Y2hlcyBmb3IgdGhpcyBjbGF1c2UuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoY2xhdXNlLnByZXNlbmNlID09IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRUQpIHtcbiAgICAgICAgICAgICAgY2xhdXNlTWF0Y2hlcyA9IGNsYXVzZU1hdGNoZXMudW5pb24obWF0Y2hpbmdEb2N1bWVudHNTZXQpO1xuXG4gICAgICAgICAgICAgIGlmIChyZXF1aXJlZE1hdGNoZXNbZmllbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZE1hdGNoZXNbZmllbGRdID0gbHVuci5TZXQuY29tcGxldGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIGlmIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHRlcm0gaXMgcHJvaGliaXRlZCBlbnN1cmUgdGhhdCB0aGUgbWF0Y2hpbmdcbiAgICAgICAgICAgICAqIGRvY3VtZW50cyBhcmUgYWRkZWQgdG8gdGhlIHNldCBvZiBwcm9oaWJpdGVkIG1hdGNoZXMgZm9yIHRoaXMgZmllbGQsXG4gICAgICAgICAgICAgKiBjcmVhdGluZyB0aGF0IHNldCBpZiBpdCBkb2VzIG5vdCB5ZXQgZXhpc3QuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChjbGF1c2UucHJlc2VuY2UgPT0gbHVuci5RdWVyeS5wcmVzZW5jZS5QUk9ISUJJVEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHByb2hpYml0ZWRNYXRjaGVzW2ZpZWxkXSA9IGx1bnIuU2V0LmVtcHR5O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcHJvaGliaXRlZE1hdGNoZXNbZmllbGRdID1cbiAgICAgICAgICAgICAgICBwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF0udW5pb24obWF0Y2hpbmdEb2N1bWVudHNTZXQpO1xuXG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIFByb2hpYml0ZWQgbWF0Y2hlcyBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIHF1ZXJ5IHZlY3RvciB1c2VkIGZvclxuICAgICAgICAgICAgICAgKiBzaW1pbGFyaXR5IHNjb3JpbmcgYW5kIG5vIG1ldGFkYXRhIHNob3VsZCBiZSBleHRyYWN0ZWQgc28gd2UgY29udGludWVcbiAgICAgICAgICAgICAgICogdG8gdGhlIG5leHQgZmllbGRcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogVGhlIHF1ZXJ5IGZpZWxkIHZlY3RvciBpcyBwb3B1bGF0ZWQgdXNpbmcgdGhlIHRlcm1JbmRleCBmb3VuZCBmb3JcbiAgICAgICAgICAgICAqIHRoZSB0ZXJtIGFuZCBhIHVuaXQgdmFsdWUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYm9vc3QgYXBwbGllZC5cbiAgICAgICAgICAgICAqIFVzaW5nIHVwc2VydCBiZWNhdXNlIHRoZXJlIGNvdWxkIGFscmVhZHkgYmUgYW4gZW50cnkgaW4gdGhlIHZlY3RvclxuICAgICAgICAgICAgICogZm9yIHRoZSB0ZXJtIHdlIGFyZSB3b3JraW5nIHdpdGguIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGFkZCB0aGUgc2NvcmVzXG4gICAgICAgICAgICAgKiB0b2dldGhlci5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcXVlcnlWZWN0b3JzW2ZpZWxkXS51cHNlcnQoXG4gICAgICAgICAgICAgIHRlcm1JbmRleCxcbiAgICAgICAgICAgICAgY2xhdXNlLmJvb3N0LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyB0ZXJtLCBmaWVsZCBjb21ibyB0aGVuIHdlJ3ZlIGFscmVhZHkgY29sbGVjdGVkXG4gICAgICAgICAgICAgKiB0aGUgbWF0Y2hpbmcgZG9jdW1lbnRzIGFuZCBtZXRhZGF0YSwgbm8gbmVlZCB0byBnbyB0aHJvdWdoIGFsbCB0aGF0IGFnYWluXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0ZXJtRmllbGRDYWNoZVt0ZXJtRmllbGRdKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IG1hdGNoaW5nRG9jdW1lbnRSZWZzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAqIEFsbCBtZXRhZGF0YSBmb3IgdGhpcyB0ZXJtL2ZpZWxkL2RvY3VtZW50IHRyaXBsZVxuICAgICAgICAgICAgICAgKiBhcmUgdGhlbiBleHRyYWN0ZWQgYW5kIGNvbGxlY3RlZCBpbnRvIGFuIGluc3RhbmNlXG4gICAgICAgICAgICAgICAqIG9mIGx1bnIuTWF0Y2hEYXRhIHJlYWR5IHRvIGJlIHJldHVybmVkIGluIHRoZSBxdWVyeVxuICAgICAgICAgICAgICAgKiByZXN1bHRzXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmdEb2N1bWVudFJlZiA9IG1hdGNoaW5nRG9jdW1lbnRSZWZzW2xdLFxuICAgICAgICAgICAgICAgIG1hdGNoaW5nRmllbGRSZWYgPSBuZXcgbHVuci5GaWVsZFJlZihcbiAgICAgICAgICAgICAgICAgIG1hdGNoaW5nRG9jdW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgICBmaWVsZFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEgPSBmaWVsZFBvc3RpbmdbbWF0Y2hpbmdEb2N1bWVudFJlZl0sXG4gICAgICAgICAgICAgICAgZmllbGRNYXRjaDtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGZpZWxkTWF0Y2ggPSBtYXRjaGluZ0ZpZWxkc1ttYXRjaGluZ0ZpZWxkUmVmXSkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaGluZ0ZpZWxkc1ttYXRjaGluZ0ZpZWxkUmVmXSA9IG5ldyBsdW5yLk1hdGNoRGF0YShcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkVGVybSxcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkTWF0Y2guYWRkKGV4cGFuZGVkVGVybSwgZmllbGQsIG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZXJtRmllbGRDYWNoZVt0ZXJtRmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBJZiB0aGUgcHJlc2VuY2Ugd2FzIHJlcXVpcmVkIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSByZXF1aXJlZE1hdGNoZXMgZmllbGQgc2V0cy5cbiAgICAgICAqIFdlIGRvIHRoaXMgYWZ0ZXIgYWxsIGZpZWxkcyBmb3IgdGhlIHRlcm0gaGF2ZSBjb2xsZWN0ZWQgdGhlaXIgbWF0Y2hlcyBiZWNhdXNlXG4gICAgICAgKiB0aGUgY2xhdXNlIHRlcm1zIHByZXNlbmNlIGlzIHJlcXVpcmVkIGluIF9hbnlfIG9mIHRoZSBmaWVsZHMgbm90IF9hbGxfIG9mIHRoZVxuICAgICAgICogZmllbGRzLlxuICAgICAgICovXG4gICAgICBpZiAoY2xhdXNlLnByZXNlbmNlID09PSBsdW5yLlF1ZXJ5LnByZXNlbmNlLlJFUVVJUkVEKSB7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2xhdXNlLmZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGNsYXVzZS5maWVsZHNba107XG4gICAgICAgICAgcmVxdWlyZWRNYXRjaGVzW2ZpZWxkXSA9XG4gICAgICAgICAgICByZXF1aXJlZE1hdGNoZXNbZmllbGRdLmludGVyc2VjdChjbGF1c2VNYXRjaGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5lZWQgdG8gY29tYmluZSB0aGUgZmllbGQgc2NvcGVkIHJlcXVpcmVkIGFuZCBwcm9oaWJpdGVkXG4gICAgICogbWF0Y2hpbmcgZG9jdW1lbnRzIGludG8gYSBnbG9iYWwgc2V0IG9mIHJlcXVpcmVkIGFuZCBwcm9oaWJpdGVkXG4gICAgICogbWF0Y2hlc1xuICAgICAqL1xuICAgIHZhciBhbGxSZXF1aXJlZE1hdGNoZXMgPSBsdW5yLlNldC5jb21wbGV0ZSxcbiAgICAgIGFsbFByb2hpYml0ZWRNYXRjaGVzID0gbHVuci5TZXQuZW1wdHk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGQgPSB0aGlzLmZpZWxkc1tpXTtcblxuICAgICAgaWYgKHJlcXVpcmVkTWF0Y2hlc1tmaWVsZF0pIHtcbiAgICAgICAgYWxsUmVxdWlyZWRNYXRjaGVzID0gYWxsUmVxdWlyZWRNYXRjaGVzLmludGVyc2VjdChcbiAgICAgICAgICByZXF1aXJlZE1hdGNoZXNbZmllbGRdXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF0pIHtcbiAgICAgICAgYWxsUHJvaGliaXRlZE1hdGNoZXMgPSBhbGxQcm9oaWJpdGVkTWF0Y2hlcy51bmlvbihcbiAgICAgICAgICBwcm9oaWJpdGVkTWF0Y2hlc1tmaWVsZF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hpbmdGaWVsZFJlZnMgPSBPYmplY3Qua2V5cyhtYXRjaGluZ0ZpZWxkcyksXG4gICAgICByZXN1bHRzID0gW10sXG4gICAgICBtYXRjaGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIC8qXG4gICAgICogSWYgdGhlIHF1ZXJ5IGlzIG5lZ2F0ZWQgKGNvbnRhaW5zIG9ubHkgcHJvaGliaXRlZCB0ZXJtcylcbiAgICAgKiB3ZSBuZWVkIHRvIGdldCBfYWxsXyBmaWVsZFJlZnMgY3VycmVudGx5IGV4aXN0aW5nIGluIHRoZVxuICAgICAqIGluZGV4LiBUaGlzIGlzIG9ubHkgZG9uZSB3aGVuIHdlIGtub3cgdGhhdCB0aGUgcXVlcnkgaXNcbiAgICAgKiBlbnRpcmVseSBwcm9oaWJpdGVkIHRlcm1zIHRvIGF2b2lkIGFueSBjb3N0IG9mIGdldHRpbmcgYWxsXG4gICAgICogZmllbGRSZWZzIHVubmVjZXNzYXJpbHkuXG4gICAgICpcbiAgICAgKiBBZGRpdGlvbmFsbHksIGJsYW5rIE1hdGNoRGF0YSBtdXN0IGJlIGNyZWF0ZWQgdG8gY29ycmVjdGx5XG4gICAgICogcG9wdWxhdGUgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaWYgKHF1ZXJ5LmlzTmVnYXRlZCgpKSB7XG4gICAgICBtYXRjaGluZ0ZpZWxkUmVmcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRWZWN0b3JzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGluZ0ZpZWxkUmVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbWF0Y2hpbmdGaWVsZFJlZiA9IG1hdGNoaW5nRmllbGRSZWZzW2ldO1xuICAgICAgICB2YXIgZmllbGRSZWYgPSBsdW5yLkZpZWxkUmVmLmZyb21TdHJpbmcobWF0Y2hpbmdGaWVsZFJlZik7XG4gICAgICAgIG1hdGNoaW5nRmllbGRzW21hdGNoaW5nRmllbGRSZWZdID0gbmV3IGx1bnIuTWF0Y2hEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGluZ0ZpZWxkUmVmcy5sZW5ndGg7IGkrKykge1xuICAgICAgLypcbiAgICAgICAqIEN1cnJlbnRseSB3ZSBoYXZlIGRvY3VtZW50IGZpZWxkcyB0aGF0IG1hdGNoIHRoZSBxdWVyeSwgYnV0IHdlXG4gICAgICAgKiBuZWVkIHRvIHJldHVybiBkb2N1bWVudHMuIFRoZSBtYXRjaERhdGEgYW5kIHNjb3JlcyBhcmUgY29tYmluZWRcbiAgICAgICAqIGZyb20gbXVsdGlwbGUgZmllbGRzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAgICAqXG4gICAgICAgKiBTY29yZXMgYXJlIGNhbGN1bGF0ZWQgYnkgZmllbGQsIHVzaW5nIHRoZSBxdWVyeSB2ZWN0b3JzIGNyZWF0ZWRcbiAgICAgICAqIGFib3ZlLCBhbmQgY29tYmluZWQgaW50byBhIGZpbmFsIGRvY3VtZW50IHNjb3JlIHVzaW5nIGFkZGl0aW9uLlxuICAgICAgICovXG4gICAgICB2YXIgZmllbGRSZWYgPSBsdW5yLkZpZWxkUmVmLmZyb21TdHJpbmcobWF0Y2hpbmdGaWVsZFJlZnNbaV0pLFxuICAgICAgICBkb2NSZWYgPSBmaWVsZFJlZi5kb2NSZWY7XG5cbiAgICAgIGlmICghYWxsUmVxdWlyZWRNYXRjaGVzLmNvbnRhaW5zKGRvY1JlZikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxQcm9oaWJpdGVkTWF0Y2hlcy5jb250YWlucyhkb2NSZWYpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmllbGRWZWN0b3IgPSB0aGlzLmZpZWxkVmVjdG9yc1tmaWVsZFJlZl0sXG4gICAgICAgIHNjb3JlID0gcXVlcnlWZWN0b3JzW2ZpZWxkUmVmLmZpZWxkTmFtZV0uc2ltaWxhcml0eShmaWVsZFZlY3RvciksXG4gICAgICAgIGRvY01hdGNoO1xuXG4gICAgICBpZiAoKGRvY01hdGNoID0gbWF0Y2hlc1tkb2NSZWZdKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY01hdGNoLnNjb3JlICs9IHNjb3JlO1xuICAgICAgICBkb2NNYXRjaC5tYXRjaERhdGEuY29tYmluZShtYXRjaGluZ0ZpZWxkc1tmaWVsZFJlZl0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICAgIHJlZjogZG9jUmVmLFxuICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICBtYXRjaERhdGE6IG1hdGNoaW5nRmllbGRzW2ZpZWxkUmVmXSxcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlc1tkb2NSZWZdID0gbWF0Y2g7XG4gICAgICAgIHJlc3VsdHMucHVzaChtYXRjaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBTb3J0IHRoZSByZXN1bHRzIG9iamVjdHMgYnkgc2NvcmUsIGhpZ2hlc3QgZmlyc3QuXG4gICAgICovXG4gICAgcmV0dXJuIHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGIuc2NvcmUgLSBhLnNjb3JlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgaW5kZXggZm9yIEpTT04gc2VyaWFsaXphdGlvbi5cbiAgICpcbiAgICogVGhlIHNjaGVtYSBmb3IgdGhpcyBKU09OIGJsb2Igd2lsbCBiZSBkZXNjcmliZWQgaW4gYVxuICAgKiBzZXBhcmF0ZSBKU09OIHNjaGVtYSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgbHVuci5JbmRleC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnZlcnRlZEluZGV4ID0gT2JqZWN0LmtleXModGhpcy5pbnZlcnRlZEluZGV4KVxuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcChmdW5jdGlvbiAodGVybSkge1xuICAgICAgICByZXR1cm4gW3Rlcm0sIHRoaXMuaW52ZXJ0ZWRJbmRleFt0ZXJtXV07XG4gICAgICB9LCB0aGlzKTtcblxuICAgIHZhciBmaWVsZFZlY3RvcnMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkVmVjdG9ycykubWFwKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHJldHVybiBbcmVmLCB0aGlzLmZpZWxkVmVjdG9yc1tyZWZdLnRvSlNPTigpXTtcbiAgICB9LCB0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiBsdW5yLnZlcnNpb24sXG4gICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLFxuICAgICAgZmllbGRWZWN0b3JzOiBmaWVsZFZlY3RvcnMsXG4gICAgICBpbnZlcnRlZEluZGV4OiBpbnZlcnRlZEluZGV4LFxuICAgICAgcGlwZWxpbmU6IHRoaXMucGlwZWxpbmUudG9KU09OKCksXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogTG9hZHMgYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgbHVuci5JbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc2VyaWFsaXplZEluZGV4IC0gQSBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgbHVuci5JbmRleFxuICAgKiBAcmV0dXJucyB7bHVuci5JbmRleH1cbiAgICovXG4gIGx1bnIuSW5kZXgubG9hZCA9IGZ1bmN0aW9uIChzZXJpYWxpemVkSW5kZXgpIHtcbiAgICB2YXIgYXR0cnMgPSB7fSxcbiAgICAgIGZpZWxkVmVjdG9ycyA9IHt9LFxuICAgICAgc2VyaWFsaXplZFZlY3RvcnMgPSBzZXJpYWxpemVkSW5kZXguZmllbGRWZWN0b3JzLFxuICAgICAgaW52ZXJ0ZWRJbmRleCA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBzZXJpYWxpemVkSW52ZXJ0ZWRJbmRleCA9IHNlcmlhbGl6ZWRJbmRleC5pbnZlcnRlZEluZGV4LFxuICAgICAgdG9rZW5TZXRCdWlsZGVyID0gbmV3IGx1bnIuVG9rZW5TZXQuQnVpbGRlcigpLFxuICAgICAgcGlwZWxpbmUgPSBsdW5yLlBpcGVsaW5lLmxvYWQoc2VyaWFsaXplZEluZGV4LnBpcGVsaW5lKTtcblxuICAgIGlmIChzZXJpYWxpemVkSW5kZXgudmVyc2lvbiAhPSBsdW5yLnZlcnNpb24pIHtcbiAgICAgIGx1bnIudXRpbHMud2FybihcbiAgICAgICAgXCJWZXJzaW9uIG1pc21hdGNoIHdoZW4gbG9hZGluZyBzZXJpYWxpc2VkIGluZGV4LiBDdXJyZW50IHZlcnNpb24gb2YgbHVuciAnXCIgK1xuICAgICAgICAgIGx1bnIudmVyc2lvbiArXG4gICAgICAgICAgXCInIGRvZXMgbm90IG1hdGNoIHNlcmlhbGl6ZWQgaW5kZXggJ1wiICtcbiAgICAgICAgICBzZXJpYWxpemVkSW5kZXgudmVyc2lvbiArXG4gICAgICAgICAgXCInXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkVmVjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHR1cGxlID0gc2VyaWFsaXplZFZlY3RvcnNbaV0sXG4gICAgICAgIHJlZiA9IHR1cGxlWzBdLFxuICAgICAgICBlbGVtZW50cyA9IHR1cGxlWzFdO1xuXG4gICAgICBmaWVsZFZlY3RvcnNbcmVmXSA9IG5ldyBsdW5yLlZlY3RvcihlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkSW52ZXJ0ZWRJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHR1cGxlID0gc2VyaWFsaXplZEludmVydGVkSW5kZXhbaV0sXG4gICAgICAgIHRlcm0gPSB0dXBsZVswXSxcbiAgICAgICAgcG9zdGluZyA9IHR1cGxlWzFdO1xuXG4gICAgICB0b2tlblNldEJ1aWxkZXIuaW5zZXJ0KHRlcm0pO1xuICAgICAgaW52ZXJ0ZWRJbmRleFt0ZXJtXSA9IHBvc3Rpbmc7XG4gICAgfVxuXG4gICAgdG9rZW5TZXRCdWlsZGVyLmZpbmlzaCgpO1xuXG4gICAgYXR0cnMuZmllbGRzID0gc2VyaWFsaXplZEluZGV4LmZpZWxkcztcblxuICAgIGF0dHJzLmZpZWxkVmVjdG9ycyA9IGZpZWxkVmVjdG9ycztcbiAgICBhdHRycy5pbnZlcnRlZEluZGV4ID0gaW52ZXJ0ZWRJbmRleDtcbiAgICBhdHRycy50b2tlblNldCA9IHRva2VuU2V0QnVpbGRlci5yb290O1xuICAgIGF0dHJzLnBpcGVsaW5lID0gcGlwZWxpbmU7XG5cbiAgICByZXR1cm4gbmV3IGx1bnIuSW5kZXgoYXR0cnMpO1xuICB9O1xuICAvKiFcbiAgICogbHVuci5CdWlsZGVyXG4gICAqIENvcHlyaWdodCAoQykgMjAyMCBPbGl2ZXIgTmlnaHRpbmdhbGVcbiAgICovXG5cbiAgLyoqXG4gICAqIGx1bnIuQnVpbGRlciBwZXJmb3JtcyBpbmRleGluZyBvbiBhIHNldCBvZiBkb2N1bWVudHMgYW5kXG4gICAqIHJldHVybnMgaW5zdGFuY2VzIG9mIGx1bnIuSW5kZXggcmVhZHkgZm9yIHF1ZXJ5aW5nLlxuICAgKlxuICAgKiBBbGwgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5kZXggaXMgZG9uZSB2aWEgdGhlIGJ1aWxkZXIsIHRoZVxuICAgKiBmaWVsZHMgdG8gaW5kZXgsIHRoZSBkb2N1bWVudCByZWZlcmVuY2UsIHRoZSB0ZXh0IHByb2Nlc3NpbmdcbiAgICogcGlwZWxpbmUgYW5kIGRvY3VtZW50IHNjb3JpbmcgcGFyYW1ldGVycyBhcmUgYWxsIHNldCBvbiB0aGVcbiAgICogYnVpbGRlciBiZWZvcmUgaW5kZXhpbmcuXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gX3JlZiAtIEludGVybmFsIHJlZmVyZW5jZSB0byB0aGUgZG9jdW1lbnQgcmVmZXJlbmNlIGZpZWxkLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBfZmllbGRzIC0gSW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCBmaWVsZHMgdG8gaW5kZXguXG4gICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBpbnZlcnRlZEluZGV4IC0gVGhlIGludmVydGVkIGluZGV4IG1hcHMgdGVybXMgdG8gZG9jdW1lbnQgZmllbGRzLlxuICAgKiBAcHJvcGVydHkge29iamVjdH0gZG9jdW1lbnRUZXJtRnJlcXVlbmNpZXMgLSBLZWVwcyB0cmFjayBvZiBkb2N1bWVudCB0ZXJtIGZyZXF1ZW5jaWVzLlxuICAgKiBAcHJvcGVydHkge29iamVjdH0gZG9jdW1lbnRMZW5ndGhzIC0gS2VlcHMgdHJhY2sgb2YgdGhlIGxlbmd0aCBvZiBkb2N1bWVudHMgYWRkZWQgdG8gdGhlIGluZGV4LlxuICAgKiBAcHJvcGVydHkge2x1bnIudG9rZW5pemVyfSB0b2tlbml6ZXIgLSBGdW5jdGlvbiBmb3Igc3BsaXR0aW5nIHN0cmluZ3MgaW50byB0b2tlbnMgZm9yIGluZGV4aW5nLlxuICAgKiBAcHJvcGVydHkge2x1bnIuUGlwZWxpbmV9IHBpcGVsaW5lIC0gVGhlIHBpcGVsaW5lIHBlcmZvcm1zIHRleHQgcHJvY2Vzc2luZyBvbiB0b2tlbnMgYmVmb3JlIGluZGV4aW5nLlxuICAgKiBAcHJvcGVydHkge2x1bnIuUGlwZWxpbmV9IHNlYXJjaFBpcGVsaW5lIC0gQSBwaXBlbGluZSBmb3IgcHJvY2Vzc2luZyBzZWFyY2ggdGVybXMgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBpbmRleC5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGRvY3VtZW50Q291bnQgLSBLZWVwcyB0cmFjayBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGRvY3VtZW50cyBpbmRleGVkLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gX2IgLSBBIHBhcmFtZXRlciB0byBjb250cm9sIGZpZWxkIGxlbmd0aCBub3JtYWxpemF0aW9uLCBzZXR0aW5nIHRoaXMgdG8gMCBkaXNhYmxlZCBub3JtYWxpemF0aW9uLCAxIGZ1bGx5IG5vcm1hbGl6ZXMgZmllbGQgbGVuZ3RocywgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMC43NS5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9rMSAtIEEgcGFyYW1ldGVyIHRvIGNvbnRyb2wgaG93IHF1aWNrbHkgYW4gaW5jcmVhc2UgaW4gdGVybSBmcmVxdWVuY3kgcmVzdWx0cyBpbiB0ZXJtIGZyZXF1ZW5jeSBzYXR1cmF0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjIuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0ZXJtSW5kZXggLSBBIGNvdW50ZXIgaW5jcmVtZW50ZWQgZm9yIGVhY2ggdW5pcXVlIHRlcm0sIHVzZWQgdG8gaWRlbnRpZnkgYSB0ZXJtcyBwb3NpdGlvbiBpbiB0aGUgdmVjdG9yIHNwYWNlLlxuICAgKiBAcHJvcGVydHkge2FycmF5fSBtZXRhZGF0YVdoaXRlbGlzdCAtIEEgbGlzdCBvZiBtZXRhZGF0YSBrZXlzIHRoYXQgaGF2ZSBiZWVuIHdoaXRlbGlzdGVkIGZvciBlbnRyeSBpbiB0aGUgaW5kZXguXG4gICAqL1xuICBsdW5yLkJ1aWxkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fcmVmID0gXCJpZFwiO1xuICAgIHRoaXMuX2ZpZWxkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZG9jdW1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmludmVydGVkSW5kZXggPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuZmllbGRUZXJtRnJlcXVlbmNpZXMgPSB7fTtcbiAgICB0aGlzLmZpZWxkTGVuZ3RocyA9IHt9O1xuICAgIHRoaXMudG9rZW5pemVyID0gbHVuci50b2tlbml6ZXI7XG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBsdW5yLlBpcGVsaW5lKCk7XG4gICAgdGhpcy5zZWFyY2hQaXBlbGluZSA9IG5ldyBsdW5yLlBpcGVsaW5lKCk7XG4gICAgdGhpcy5kb2N1bWVudENvdW50ID0gMDtcbiAgICB0aGlzLl9iID0gMC43NTtcbiAgICB0aGlzLl9rMSA9IDEuMjtcbiAgICB0aGlzLnRlcm1JbmRleCA9IDA7XG4gICAgdGhpcy5tZXRhZGF0YVdoaXRlbGlzdCA9IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkb2N1bWVudCBmaWVsZCB1c2VkIGFzIHRoZSBkb2N1bWVudCByZWZlcmVuY2UuIEV2ZXJ5IGRvY3VtZW50IG11c3QgaGF2ZSB0aGlzIGZpZWxkLlxuICAgKiBUaGUgdHlwZSBvZiB0aGlzIGZpZWxkIGluIHRoZSBkb2N1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcsIGlmIGl0IGlzIG5vdCBhIHN0cmluZyBpdCB3aWxsIGJlXG4gICAqIGNvZXJjZWQgaW50byBhIHN0cmluZyBieSBjYWxsaW5nIHRvU3RyaW5nLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCByZWYgaXMgJ2lkJy5cbiAgICpcbiAgICogVGhlIHJlZiBzaG91bGQgX25vdF8gYmUgY2hhbmdlZCBkdXJpbmcgaW5kZXhpbmcsIGl0IHNob3VsZCBiZSBzZXQgYmVmb3JlIGFueSBkb2N1bWVudHMgYXJlXG4gICAqIGFkZGVkIHRvIHRoZSBpbmRleC4gQ2hhbmdpbmcgaXQgZHVyaW5nIGluZGV4aW5nIGNhbiBsZWFkIHRvIGluY29uc2lzdGVudCByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIC0gVGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSBmaWVsZCBpbiB0aGUgZG9jdW1lbnQuXG4gICAqL1xuICBsdW5yLkJ1aWxkZXIucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICB0aGlzLl9yZWYgPSByZWY7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3QgYSBmaWVsZCBmcm9tIGEgZG9jdW1lbnQuXG4gICAqXG4gICAqIEx1bnIgZXhwZWN0cyBhIGZpZWxkIHRvIGJlIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBkb2N1bWVudCwgaWYgaG93ZXZlciB0aGUgZmllbGRcbiAgICogaXMgZGVlcGx5IG5lc3RlZCB3aXRoaW4gYSBkb2N1bWVudCBhbiBleHRyYWN0b3IgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXh0cmFjdFxuICAgKiB0aGUgcmlnaHQgZmllbGQgZm9yIGluZGV4aW5nLlxuICAgKlxuICAgKiBAY2FsbGJhY2sgZmllbGRFeHRyYWN0b3JcbiAgICogQHBhcmFtIHtvYmplY3R9IGRvYyAtIFRoZSBkb2N1bWVudCBiZWluZyBhZGRlZCB0byB0aGUgaW5kZXguXG4gICAqIEByZXR1cm5zIHs/KHN0cmluZ3xvYmplY3R8b2JqZWN0W10pfSBvYmogLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBpbmRleGVkIGZvciB0aGlzIGZpZWxkLlxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeHRyYWN0aW5nIGEgbmVzdGVkIGZpZWxkPC9jYXB0aW9uPlxuICAgKiBmdW5jdGlvbiAoZG9jKSB7IHJldHVybiBkb2MubmVzdGVkLmZpZWxkIH1cbiAgICovXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBmaWVsZCB0byB0aGUgbGlzdCBvZiBkb2N1bWVudCBmaWVsZHMgdGhhdCB3aWxsIGJlIGluZGV4ZWQuIEV2ZXJ5IGRvY3VtZW50IGJlaW5nXG4gICAqIGluZGV4ZWQgc2hvdWxkIGhhdmUgdGhpcyBmaWVsZC4gTnVsbCB2YWx1ZXMgZm9yIHRoaXMgZmllbGQgaW4gaW5kZXhlZCBkb2N1bWVudHMgd2lsbFxuICAgKiBub3QgY2F1c2UgZXJyb3JzIGJ1dCB3aWxsIGxpbWl0IHRoZSBjaGFuY2Ugb2YgdGhhdCBkb2N1bWVudCBiZWluZyByZXRyaWV2ZWQgYnkgc2VhcmNoZXMuXG4gICAqXG4gICAqIEFsbCBmaWVsZHMgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhZGRpbmcgZG9jdW1lbnRzIHRvIHRoZSBpbmRleC4gQWRkaW5nIGZpZWxkcyBhZnRlclxuICAgKiBhIGRvY3VtZW50IGhhcyBiZWVuIGluZGV4ZWQgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiBhbHJlYWR5IGluZGV4ZWQgZG9jdW1lbnRzLlxuICAgKlxuICAgKiBGaWVsZHMgY2FuIGJlIGJvb3N0ZWQgYXQgYnVpbGQgdGltZS4gVGhpcyBhbGxvd3MgdGVybXMgd2l0aGluIHRoYXQgZmllbGQgdG8gaGF2ZSBtb3JlXG4gICAqIGltcG9ydGFuY2Ugd2hlbiByYW5raW5nIHNlYXJjaCByZXN1bHRzLiBVc2UgYSBmaWVsZCBib29zdCB0byBzcGVjaWZ5IHRoYXQgbWF0Y2hlcyB3aXRoaW5cbiAgICogb25lIGZpZWxkIGFyZSBtb3JlIGltcG9ydGFudCB0aGFuIG90aGVyIGZpZWxkcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIFRoZSBuYW1lIG9mIGEgZmllbGQgdG8gaW5kZXggaW4gYWxsIGRvY3VtZW50cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGF0dHJpYnV0ZXMgLSBPcHRpb25hbCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2F0dHJpYnV0ZXMuYm9vc3Q9MV0gLSBCb29zdCBhcHBsaWVkIHRvIGFsbCB0ZXJtcyB3aXRoaW4gdGhpcyBmaWVsZC5cbiAgICogQHBhcmFtIHtmaWVsZEV4dHJhY3Rvcn0gW2F0dHJpYnV0ZXMuZXh0cmFjdG9yXSAtIEZ1bmN0aW9uIHRvIGV4dHJhY3QgYSBmaWVsZCBmcm9tIGEgZG9jdW1lbnQuXG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGZpZWxkTmFtZSBjYW5ub3QgY29udGFpbiB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzICcvJ1xuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5maWVsZCA9IGZ1bmN0aW9uIChmaWVsZE5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoL1xcLy8udGVzdChmaWVsZE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgXCJGaWVsZCAnXCIgKyBmaWVsZE5hbWUgKyBcIicgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXIgJy8nXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmllbGRzW2ZpZWxkTmFtZV0gPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIHBhcmFtZXRlciB0byB0dW5lIHRoZSBhbW91bnQgb2YgZmllbGQgbGVuZ3RoIG5vcm1hbGlzYXRpb24gdGhhdCBpcyBhcHBsaWVkIHdoZW5cbiAgICogY2FsY3VsYXRpbmcgcmVsZXZhbmNlIHNjb3Jlcy4gQSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBkaXNhYmxlIGFueSBub3JtYWxpc2F0aW9uXG4gICAqIGFuZCBhIHZhbHVlIG9mIDEgd2lsbCBmdWxseSBub3JtYWxpc2UgZmllbGQgbGVuZ3Rocy4gVGhlIGRlZmF1bHQgaXMgMC43NS4gVmFsdWVzIG9mIGJcbiAgICogd2lsbCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSAwIC0gMS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoaXMgdHVuaW5nIHBhcmFtZXRlci5cbiAgICovXG4gIGx1bnIuQnVpbGRlci5wcm90b3R5cGUuYiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgdGhpcy5fYiA9IDA7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPiAxKSB7XG4gICAgICB0aGlzLl9iID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYiA9IG51bWJlcjtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgcGFyYW1ldGVyIHRoYXQgY29udHJvbHMgdGhlIHNwZWVkIGF0IHdoaWNoIGEgcmlzZSBpbiB0ZXJtIGZyZXF1ZW5jeSByZXN1bHRzIGluIHRlcm1cbiAgICogZnJlcXVlbmN5IHNhdHVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuMi4gU2V0dGluZyB0aGlzIHRvIGEgaGlnaGVyIHZhbHVlIHdpbGwgZ2l2ZVxuICAgKiBzbG93ZXIgc2F0dXJhdGlvbiBsZXZlbHMsIGEgbG93ZXIgdmFsdWUgd2lsbCByZXN1bHQgaW4gcXVpY2tlciBzYXR1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIC0gVGhlIHZhbHVlIHRvIHNldCBmb3IgdGhpcyB0dW5pbmcgcGFyYW1ldGVyLlxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5rMSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICB0aGlzLl9rMSA9IG51bWJlcjtcbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIGRvY3VtZW50IHRvIHRoZSBpbmRleC5cbiAgICpcbiAgICogQmVmb3JlIGFkZGluZyBmaWVsZHMgdG8gdGhlIGluZGV4IHRoZSBpbmRleCBzaG91bGQgaGF2ZSBiZWVuIGZ1bGx5IHNldHVwLCB3aXRoIHRoZSBkb2N1bWVudFxuICAgKiByZWYgYW5kIGFsbCBmaWVsZHMgdG8gaW5kZXggYWxyZWFkeSBoYXZpbmcgYmVlbiBzcGVjaWZpZWQuXG4gICAqXG4gICAqIFRoZSBkb2N1bWVudCBtdXN0IGhhdmUgYSBmaWVsZCBuYW1lIGFzIHNwZWNpZmllZCBieSB0aGUgcmVmIChieSBkZWZhdWx0IHRoaXMgaXMgJ2lkJykgYW5kXG4gICAqIGl0IHNob3VsZCBoYXZlIGFsbCBmaWVsZHMgZGVmaW5lZCBmb3IgaW5kZXhpbmcsIHRob3VnaCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBub3RcbiAgICogY2F1c2UgZXJyb3JzLlxuICAgKlxuICAgKiBFbnRpcmUgZG9jdW1lbnRzIGNhbiBiZSBib29zdGVkIGF0IGJ1aWxkIHRpbWUuIEFwcGx5aW5nIGEgYm9vc3QgdG8gYSBkb2N1bWVudCBpbmRpY2F0ZXMgdGhhdFxuICAgKiB0aGlzIGRvY3VtZW50IHNob3VsZCByYW5rIGhpZ2hlciBpbiBzZWFyY2ggcmVzdWx0cyB0aGFuIG90aGVyIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRvYyAtIFRoZSBkb2N1bWVudCB0byBhZGQgdG8gdGhlIGluZGV4LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXR0cmlidXRlcyAtIE9wdGlvbmFsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXR0cmlidXRlcy5ib29zdD0xXSAtIEJvb3N0IGFwcGxpZWQgdG8gYWxsIHRlcm1zIHdpdGhpbiB0aGlzIGRvY3VtZW50LlxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZG9jLCBhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIGRvY1JlZiA9IGRvY1t0aGlzLl9yZWZdLFxuICAgICAgZmllbGRzID0gT2JqZWN0LmtleXModGhpcy5fZmllbGRzKTtcblxuICAgIHRoaXMuX2RvY3VtZW50c1tkb2NSZWZdID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgICB0aGlzLmRvY3VtZW50Q291bnQgKz0gMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGROYW1lID0gZmllbGRzW2ldLFxuICAgICAgICBleHRyYWN0b3IgPSB0aGlzLl9maWVsZHNbZmllbGROYW1lXS5leHRyYWN0b3IsXG4gICAgICAgIGZpZWxkID0gZXh0cmFjdG9yID8gZXh0cmFjdG9yKGRvYykgOiBkb2NbZmllbGROYW1lXSxcbiAgICAgICAgdG9rZW5zID0gdGhpcy50b2tlbml6ZXIoZmllbGQsIHtcbiAgICAgICAgICBmaWVsZHM6IFtmaWVsZE5hbWVdLFxuICAgICAgICB9KSxcbiAgICAgICAgdGVybXMgPSB0aGlzLnBpcGVsaW5lLnJ1bih0b2tlbnMpLFxuICAgICAgICBmaWVsZFJlZiA9IG5ldyBsdW5yLkZpZWxkUmVmKGRvY1JlZiwgZmllbGROYW1lKSxcbiAgICAgICAgZmllbGRUZXJtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIHRoaXMuZmllbGRUZXJtRnJlcXVlbmNpZXNbZmllbGRSZWZdID0gZmllbGRUZXJtcztcbiAgICAgIHRoaXMuZmllbGRMZW5ndGhzW2ZpZWxkUmVmXSA9IDA7XG5cbiAgICAgIC8vIHN0b3JlIHRoZSBsZW5ndGggb2YgdGhpcyBmaWVsZCBmb3IgdGhpcyBkb2N1bWVudFxuICAgICAgdGhpcy5maWVsZExlbmd0aHNbZmllbGRSZWZdICs9IHRlcm1zLmxlbmd0aDtcblxuICAgICAgLy8gY2FsY3VsYXRlIHRlcm0gZnJlcXVlbmNpZXMgZm9yIHRoaXMgZmllbGRcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGVybXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHRlcm0gPSB0ZXJtc1tqXTtcblxuICAgICAgICBpZiAoZmllbGRUZXJtc1t0ZXJtXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWVsZFRlcm1zW3Rlcm1dID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkVGVybXNbdGVybV0gKz0gMTtcblxuICAgICAgICAvLyBhZGQgdG8gaW52ZXJ0ZWQgaW5kZXhcbiAgICAgICAgLy8gY3JlYXRlIGFuIGluaXRpYWwgcG9zdGluZyBpZiBvbmUgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAodGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwb3N0aW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBwb3N0aW5nW1wiX2luZGV4XCJdID0gdGhpcy50ZXJtSW5kZXg7XG4gICAgICAgICAgdGhpcy50ZXJtSW5kZXggKz0gMTtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZmllbGRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBwb3N0aW5nW2ZpZWxkc1trXV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaW52ZXJ0ZWRJbmRleFt0ZXJtXSA9IHBvc3Rpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgYW4gZW50cnkgZm9yIHRoaXMgdGVybS9maWVsZE5hbWUvZG9jUmVmIHRvIHRoZSBpbnZlcnRlZEluZGV4XG4gICAgICAgIGlmICh0aGlzLmludmVydGVkSW5kZXhbdGVybV1bZmllbGROYW1lXVtkb2NSZWZdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaW52ZXJ0ZWRJbmRleFt0ZXJtXVtmaWVsZE5hbWVdW2RvY1JlZl0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcmUgYWxsIHdoaXRlbGlzdGVkIG1ldGFkYXRhIGFib3V0IHRoaXMgdG9rZW4gaW4gdGhlXG4gICAgICAgIC8vIGludmVydGVkIGluZGV4XG4gICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgdGhpcy5tZXRhZGF0YVdoaXRlbGlzdC5sZW5ndGg7IGwrKykge1xuICAgICAgICAgIHZhciBtZXRhZGF0YUtleSA9IHRoaXMubWV0YWRhdGFXaGl0ZWxpc3RbbF0sXG4gICAgICAgICAgICBtZXRhZGF0YSA9IHRlcm0ubWV0YWRhdGFbbWV0YWRhdGFLZXldO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dW2ZpZWxkTmFtZV1bZG9jUmVmXVttZXRhZGF0YUtleV0gPT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dW2ZpZWxkTmFtZV1bZG9jUmVmXVttZXRhZGF0YUtleV0gPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmludmVydGVkSW5kZXhbdGVybV1bZmllbGROYW1lXVtkb2NSZWZdW21ldGFkYXRhS2V5XS5wdXNoKFxuICAgICAgICAgICAgbWV0YWRhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBhdmVyYWdlIGRvY3VtZW50IGxlbmd0aCBmb3IgdGhpcyBpbmRleFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5jYWxjdWxhdGVBdmVyYWdlRmllbGRMZW5ndGhzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmaWVsZFJlZnMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkTGVuZ3RocyksXG4gICAgICBudW1iZXJPZkZpZWxkcyA9IGZpZWxkUmVmcy5sZW5ndGgsXG4gICAgICBhY2N1bXVsYXRvciA9IHt9LFxuICAgICAgZG9jdW1lbnRzV2l0aEZpZWxkID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRmllbGRzOyBpKyspIHtcbiAgICAgIHZhciBmaWVsZFJlZiA9IGx1bnIuRmllbGRSZWYuZnJvbVN0cmluZyhmaWVsZFJlZnNbaV0pLFxuICAgICAgICBmaWVsZCA9IGZpZWxkUmVmLmZpZWxkTmFtZTtcblxuICAgICAgZG9jdW1lbnRzV2l0aEZpZWxkW2ZpZWxkXSB8fCAoZG9jdW1lbnRzV2l0aEZpZWxkW2ZpZWxkXSA9IDApO1xuICAgICAgZG9jdW1lbnRzV2l0aEZpZWxkW2ZpZWxkXSArPSAxO1xuXG4gICAgICBhY2N1bXVsYXRvcltmaWVsZF0gfHwgKGFjY3VtdWxhdG9yW2ZpZWxkXSA9IDApO1xuICAgICAgYWNjdW11bGF0b3JbZmllbGRdICs9IHRoaXMuZmllbGRMZW5ndGhzW2ZpZWxkUmVmXTtcbiAgICB9XG5cbiAgICB2YXIgZmllbGRzID0gT2JqZWN0LmtleXModGhpcy5fZmllbGRzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGROYW1lID0gZmllbGRzW2ldO1xuICAgICAgYWNjdW11bGF0b3JbZmllbGROYW1lXSA9XG4gICAgICAgIGFjY3VtdWxhdG9yW2ZpZWxkTmFtZV0gLyBkb2N1bWVudHNXaXRoRmllbGRbZmllbGROYW1lXTtcbiAgICB9XG5cbiAgICB0aGlzLmF2ZXJhZ2VGaWVsZExlbmd0aCA9IGFjY3VtdWxhdG9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSB2ZWN0b3Igc3BhY2UgbW9kZWwgb2YgZXZlcnkgZG9jdW1lbnQgdXNpbmcgbHVuci5WZWN0b3JcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGx1bnIuQnVpbGRlci5wcm90b3R5cGUuY3JlYXRlRmllbGRWZWN0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmaWVsZFZlY3RvcnMgPSB7fSxcbiAgICAgIGZpZWxkUmVmcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRUZXJtRnJlcXVlbmNpZXMpLFxuICAgICAgZmllbGRSZWZzTGVuZ3RoID0gZmllbGRSZWZzLmxlbmd0aCxcbiAgICAgIHRlcm1JZGZDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkUmVmc0xlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZmllbGRSZWYgPSBsdW5yLkZpZWxkUmVmLmZyb21TdHJpbmcoZmllbGRSZWZzW2ldKSxcbiAgICAgICAgZmllbGROYW1lID0gZmllbGRSZWYuZmllbGROYW1lLFxuICAgICAgICBmaWVsZExlbmd0aCA9IHRoaXMuZmllbGRMZW5ndGhzW2ZpZWxkUmVmXSxcbiAgICAgICAgZmllbGRWZWN0b3IgPSBuZXcgbHVuci5WZWN0b3IoKSxcbiAgICAgICAgdGVybUZyZXF1ZW5jaWVzID0gdGhpcy5maWVsZFRlcm1GcmVxdWVuY2llc1tmaWVsZFJlZl0sXG4gICAgICAgIHRlcm1zID0gT2JqZWN0LmtleXModGVybUZyZXF1ZW5jaWVzKSxcbiAgICAgICAgdGVybXNMZW5ndGggPSB0ZXJtcy5sZW5ndGg7XG5cbiAgICAgIHZhciBmaWVsZEJvb3N0ID0gdGhpcy5fZmllbGRzW2ZpZWxkTmFtZV0uYm9vc3QgfHwgMSxcbiAgICAgICAgZG9jQm9vc3QgPSB0aGlzLl9kb2N1bWVudHNbZmllbGRSZWYuZG9jUmVmXS5ib29zdCB8fCAxO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRlcm1zTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHRlcm0gPSB0ZXJtc1tqXSxcbiAgICAgICAgICB0ZiA9IHRlcm1GcmVxdWVuY2llc1t0ZXJtXSxcbiAgICAgICAgICB0ZXJtSW5kZXggPSB0aGlzLmludmVydGVkSW5kZXhbdGVybV0uX2luZGV4LFxuICAgICAgICAgIGlkZixcbiAgICAgICAgICBzY29yZSxcbiAgICAgICAgICBzY29yZVdpdGhQcmVjaXNpb247XG5cbiAgICAgICAgaWYgKHRlcm1JZGZDYWNoZVt0ZXJtXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWRmID0gbHVuci5pZGYodGhpcy5pbnZlcnRlZEluZGV4W3Rlcm1dLCB0aGlzLmRvY3VtZW50Q291bnQpO1xuICAgICAgICAgIHRlcm1JZGZDYWNoZVt0ZXJtXSA9IGlkZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZGYgPSB0ZXJtSWRmQ2FjaGVbdGVybV07XG4gICAgICAgIH1cblxuICAgICAgICBzY29yZSA9XG4gICAgICAgICAgKGlkZiAqICgodGhpcy5fazEgKyAxKSAqIHRmKSkgL1xuICAgICAgICAgICh0aGlzLl9rMSAqXG4gICAgICAgICAgICAoMSAtXG4gICAgICAgICAgICAgIHRoaXMuX2IgK1xuICAgICAgICAgICAgICB0aGlzLl9iICogKGZpZWxkTGVuZ3RoIC8gdGhpcy5hdmVyYWdlRmllbGRMZW5ndGhbZmllbGROYW1lXSkpICtcbiAgICAgICAgICAgIHRmKTtcbiAgICAgICAgc2NvcmUgKj0gZmllbGRCb29zdDtcbiAgICAgICAgc2NvcmUgKj0gZG9jQm9vc3Q7XG4gICAgICAgIHNjb3JlV2l0aFByZWNpc2lvbiA9IE1hdGgucm91bmQoc2NvcmUgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIC8vIENvbnZlcnRzIDEuMjM0NTY3ODkgdG8gMS4yMzQuXG4gICAgICAgIC8vIFJlZHVjaW5nIHRoZSBwcmVjaXNpb24gc28gdGhhdCB0aGUgdmVjdG9ycyB0YWtlIHVwIGxlc3NcbiAgICAgICAgLy8gc3BhY2Ugd2hlbiBzZXJpYWxpc2VkLiBEb2luZyBpdCBub3cgc28gdGhhdCB0aGV5IGJlaGF2ZVxuICAgICAgICAvLyB0aGUgc2FtZSBiZWZvcmUgYW5kIGFmdGVyIHNlcmlhbGlzYXRpb24uIEFsc28sIHRoaXMgaXNcbiAgICAgICAgLy8gdGhlIGZhc3Rlc3QgYXBwcm9hY2ggdG8gcmVkdWNpbmcgYSBudW1iZXIncyBwcmVjaXNpb24gaW5cbiAgICAgICAgLy8gSmF2YVNjcmlwdC5cblxuICAgICAgICBmaWVsZFZlY3Rvci5pbnNlcnQodGVybUluZGV4LCBzY29yZVdpdGhQcmVjaXNpb24pO1xuICAgICAgfVxuXG4gICAgICBmaWVsZFZlY3RvcnNbZmllbGRSZWZdID0gZmllbGRWZWN0b3I7XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZFZlY3RvcnMgPSBmaWVsZFZlY3RvcnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0b2tlbiBzZXQgb2YgYWxsIHRva2VucyBpbiB0aGUgaW5kZXggdXNpbmcgbHVuci5Ub2tlblNldFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVUb2tlblNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRva2VuU2V0ID0gbHVuci5Ub2tlblNldC5mcm9tQXJyYXkoXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmludmVydGVkSW5kZXgpLnNvcnQoKVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgaW5kZXgsIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGx1bnIuSW5kZXguXG4gICAqXG4gICAqIFRoaXMgY29tcGxldGVzIHRoZSBpbmRleGluZyBwcm9jZXNzIGFuZCBzaG91bGQgb25seSBiZSBjYWxsZWRcbiAgICogb25jZSBhbGwgZG9jdW1lbnRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtsdW5yLkluZGV4fVxuICAgKi9cbiAgbHVuci5CdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZUF2ZXJhZ2VGaWVsZExlbmd0aHMoKTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkVmVjdG9ycygpO1xuICAgIHRoaXMuY3JlYXRlVG9rZW5TZXQoKTtcblxuICAgIHJldHVybiBuZXcgbHVuci5JbmRleCh7XG4gICAgICBpbnZlcnRlZEluZGV4OiB0aGlzLmludmVydGVkSW5kZXgsXG4gICAgICBmaWVsZFZlY3RvcnM6IHRoaXMuZmllbGRWZWN0b3JzLFxuICAgICAgdG9rZW5TZXQ6IHRoaXMudG9rZW5TZXQsXG4gICAgICBmaWVsZHM6IE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkcyksXG4gICAgICBwaXBlbGluZTogdGhpcy5zZWFyY2hQaXBlbGluZSxcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQXBwbGllcyBhIHBsdWdpbiB0byB0aGUgaW5kZXggYnVpbGRlci5cbiAgICpcbiAgICogQSBwbHVnaW4gaXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBidWlsZGVyIGFzIGl0cyBjb250ZXh0LlxuICAgKiBQbHVnaW5zIGNhbiBiZSB1c2VkIHRvIGN1c3RvbWlzZSBvciBleHRlbmQgdGhlIGJlaGF2aW91ciBvZiB0aGUgaW5kZXhcbiAgICogaW4gc29tZSB3YXkuIEEgcGx1Z2luIGlzIGp1c3QgYSBmdW5jdGlvbiwgdGhhdCBlbmNhcHN1bGF0ZWQgdGhlIGN1c3RvbVxuICAgKiBiZWhhdmlvdXIgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB3aGVuIGJ1aWxkaW5nIHRoZSBpbmRleC5cbiAgICpcbiAgICogVGhlIHBsdWdpbiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBidWlsZGVyIGFzIGl0cyBhcmd1bWVudCwgYWRkaXRpb25hbFxuICAgKiBhcmd1bWVudHMgY2FuIGFsc28gYmUgcGFzc2VkIHdoZW4gY2FsbGluZyB1c2UuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZFxuICAgKiB3aXRoIHRoZSBpbmRleCBidWlsZGVyIGFzIGl0cyBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwbHVnaW4gVGhlIHBsdWdpbiB0byBhcHBseS5cbiAgICovXG4gIGx1bnIuQnVpbGRlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGFuZCBjb2xsZWN0cyBtZXRhZGF0YSBhYm91dCBhIG1hdGNoaW5nIGRvY3VtZW50LlxuICAgKiBBIHNpbmdsZSBpbnN0YW5jZSBvZiBsdW5yLk1hdGNoRGF0YSBpcyByZXR1cm5lZCBhcyBwYXJ0IG9mIGV2ZXJ5XG4gICAqIGx1bnIuSW5kZXh+UmVzdWx0LlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlcm0gLSBUaGUgdGVybSB0aGlzIG1hdGNoIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIFRoZSBmaWVsZCBpbiB3aGljaCB0aGUgdGVybSB3YXMgZm91bmRcbiAgICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIHJlY29yZGVkIGFib3V0IHRoaXMgdGVybSBpbiB0aGlzIGZpZWxkXG4gICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtZXRhZGF0YSAtIEEgY2xvbmVkIGNvbGxlY3Rpb24gb2YgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuXG4gICAqIEBzZWUge0BsaW5rIGx1bnIuSW5kZXh+UmVzdWx0fVxuICAgKi9cbiAgbHVuci5NYXRjaERhdGEgPSBmdW5jdGlvbiAodGVybSwgZmllbGQsIG1ldGFkYXRhKSB7XG4gICAgdmFyIGNsb25lZE1ldGFkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIG1ldGFkYXRhS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhIHx8IHt9KTtcblxuICAgIC8vIENsb25pbmcgdGhlIG1ldGFkYXRhIHRvIHByZXZlbnQgdGhlIG9yaWdpbmFsXG4gICAgLy8gYmVpbmcgbXV0YXRlZCBkdXJpbmcgbWF0Y2ggZGF0YSBjb21iaW5hdGlvbi5cbiAgICAvLyBNZXRhZGF0YSBpcyBrZXB0IGluIGFuIGFycmF5IHdpdGhpbiB0aGUgaW52ZXJ0ZWRcbiAgICAvLyBpbmRleCBzbyBjbG9uaW5nIHRoZSBkYXRhIGNhbiBiZSBkb25lIHdpdGhcbiAgICAvLyBBcnJheSNzbGljZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YWRhdGFLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gbWV0YWRhdGFLZXlzW2ldO1xuICAgICAgY2xvbmVkTWV0YWRhdGFba2V5XSA9IG1ldGFkYXRhW2tleV0uc2xpY2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0ZXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWV0YWRhdGFbdGVybV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5tZXRhZGF0YVt0ZXJtXVtmaWVsZF0gPSBjbG9uZWRNZXRhZGF0YTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFuIGluc3RhbmNlIG9mIGx1bnIuTWF0Y2hEYXRhIHdpbGwgYmUgY3JlYXRlZCBmb3IgZXZlcnkgdGVybSB0aGF0IG1hdGNoZXMgYVxuICAgKiBkb2N1bWVudC4gSG93ZXZlciBvbmx5IG9uZSBpbnN0YW5jZSBpcyByZXF1aXJlZCBpbiBhIGx1bnIuSW5kZXh+UmVzdWx0LiBUaGlzXG4gICAqIG1ldGhvZCBjb21iaW5lcyBtZXRhZGF0YSBmcm9tIGFub3RoZXIgaW5zdGFuY2Ugb2YgbHVuci5NYXRjaERhdGEgd2l0aCB0aGlzXG4gICAqIG9iamVjdHMgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bHVuci5NYXRjaERhdGF9IG90aGVyTWF0Y2hEYXRhIC0gQW5vdGhlciBpbnN0YW5jZSBvZiBtYXRjaCBkYXRhIHRvIG1lcmdlIHdpdGggdGhpcyBvbmUuXG4gICAqIEBzZWUge0BsaW5rIGx1bnIuSW5kZXh+UmVzdWx0fVxuICAgKi9cbiAgbHVuci5NYXRjaERhdGEucHJvdG90eXBlLmNvbWJpbmUgPSBmdW5jdGlvbiAob3RoZXJNYXRjaERhdGEpIHtcbiAgICB2YXIgdGVybXMgPSBPYmplY3Qua2V5cyhvdGhlck1hdGNoRGF0YS5tZXRhZGF0YSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGVybSA9IHRlcm1zW2ldLFxuICAgICAgICBmaWVsZHMgPSBPYmplY3Qua2V5cyhvdGhlck1hdGNoRGF0YS5tZXRhZGF0YVt0ZXJtXSk7XG5cbiAgICAgIGlmICh0aGlzLm1ldGFkYXRhW3Rlcm1dID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmaWVsZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2pdLFxuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhvdGhlck1hdGNoRGF0YS5tZXRhZGF0YVt0ZXJtXVtmaWVsZF0pO1xuXG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1trXTtcblxuICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YVt0ZXJtXVtmaWVsZF1ba2V5XSA9XG4gICAgICAgICAgICAgIG90aGVyTWF0Y2hEYXRhLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldID0gdGhpcy5tZXRhZGF0YVt0ZXJtXVtmaWVsZF1bXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXS5jb25jYXQob3RoZXJNYXRjaERhdGEubWV0YWRhdGFbdGVybV1bZmllbGRdW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIG1ldGFkYXRhIGZvciBhIHRlcm0vZmllbGQgcGFpciB0byB0aGlzIGluc3RhbmNlIG9mIG1hdGNoIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXJtIC0gVGhlIHRlcm0gdGhpcyBtYXRjaCBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgLSBUaGUgZmllbGQgaW4gd2hpY2ggdGhlIHRlcm0gd2FzIGZvdW5kXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YSAtIFRoZSBtZXRhZGF0YSByZWNvcmRlZCBhYm91dCB0aGlzIHRlcm0gaW4gdGhpcyBmaWVsZFxuICAgKi9cbiAgbHVuci5NYXRjaERhdGEucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZXJtLCBmaWVsZCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoISh0ZXJtIGluIHRoaXMubWV0YWRhdGEpKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdID0gbWV0YWRhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmllbGQgaW4gdGhpcy5tZXRhZGF0YVt0ZXJtXSkpIHtcbiAgICAgIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdID0gbWV0YWRhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG1ldGFkYXRhS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YWRhdGFLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gbWV0YWRhdGFLZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5IGluIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGFbdGVybV1bZmllbGRdW2tleV0gPSB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtcbiAgICAgICAgICBrZXlcbiAgICAgICAgXS5jb25jYXQobWV0YWRhdGFba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1ldGFkYXRhW3Rlcm1dW2ZpZWxkXVtrZXldID0gbWV0YWRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBBIGx1bnIuUXVlcnkgcHJvdmlkZXMgYSBwcm9ncmFtbWF0aWMgd2F5IG9mIGRlZmluaW5nIHF1ZXJpZXMgdG8gYmUgcGVyZm9ybWVkXG4gICAqIGFnYWluc3QgYSB7QGxpbmsgbHVuci5JbmRleH0uXG4gICAqXG4gICAqIFByZWZlciBjb25zdHJ1Y3RpbmcgYSBsdW5yLlF1ZXJ5IHVzaW5nIHRoZSB7QGxpbmsgbHVuci5JbmRleCNxdWVyeX0gbWV0aG9kXG4gICAqIHNvIHRoZSBxdWVyeSBvYmplY3QgaXMgcHJlLWluaXRpYWxpemVkIHdpdGggdGhlIHJpZ2h0IGluZGV4IGZpZWxkcy5cbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwcm9wZXJ0eSB7bHVuci5RdWVyeX5DbGF1c2VbXX0gY2xhdXNlcyAtIEFuIGFycmF5IG9mIHF1ZXJ5IGNsYXVzZXMuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGFsbEZpZWxkcyAtIEFuIGFycmF5IG9mIGFsbCBhdmFpbGFibGUgZmllbGRzIGluIGEgbHVuci5JbmRleC5cbiAgICovXG4gIGx1bnIuUXVlcnkgPSBmdW5jdGlvbiAoYWxsRmllbGRzKSB7XG4gICAgdGhpcy5jbGF1c2VzID0gW107XG4gICAgdGhpcy5hbGxGaWVsZHMgPSBhbGxGaWVsZHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnN0YW50cyBmb3IgaW5kaWNhdGluZyB3aGF0IGtpbmQgb2YgYXV0b21hdGljIHdpbGRjYXJkIGluc2VydGlvbiB3aWxsIGJlIHVzZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYSBxdWVyeSBjbGF1c2UuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIHdpbGRjYXJkcyB0byBiZSBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSB0ZXJtIHdpdGhvdXQgaGF2aW5nIHRvIG1hbnVhbGx5IGRvIGFueSBzdHJpbmdcbiAgICogY29uY2F0ZW5hdGlvbi5cbiAgICpcbiAgICogVGhlIHdpbGRjYXJkIGNvbnN0YW50cyBjYW4gYmUgYml0d2lzZSBjb21iaW5lZCB0byBzZWxlY3QgYm90aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aWxkY2FyZHMuXG4gICAqXG4gICAqIEBjb25zdGFudFxuICAgKiBAZGVmYXVsdFxuICAgKiBAcHJvcGVydHkge251bWJlcn0gd2lsZGNhcmQuTk9ORSAtIFRoZSB0ZXJtIHdpbGwgaGF2ZSBubyB3aWxkY2FyZHMgaW5zZXJ0ZWQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWxkY2FyZC5MRUFESU5HIC0gUHJlcGVuZCB0aGUgdGVybSB3aXRoIGEgd2lsZGNhcmQsIHVubGVzcyBhIGxlYWRpbmcgd2lsZGNhcmQgYWxyZWFkeSBleGlzdHNcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHdpbGRjYXJkLlRSQUlMSU5HIC0gQXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIHRlcm0sIHVubGVzcyBhIHRyYWlsaW5nIHdpbGRjYXJkIGFscmVhZHkgZXhpc3RzXG4gICAqIEBzZWUgbHVuci5RdWVyeX5DbGF1c2VcbiAgICogQHNlZSBsdW5yLlF1ZXJ5I2NsYXVzZVxuICAgKiBAc2VlIGx1bnIuUXVlcnkjdGVybVxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5xdWVyeSB0ZXJtIHdpdGggdHJhaWxpbmcgd2lsZGNhcmQ8L2NhcHRpb24+XG4gICAqIHF1ZXJ5LnRlcm0oJ2ZvbycsIHsgd2lsZGNhcmQ6IGx1bnIuUXVlcnkud2lsZGNhcmQuVFJBSUxJTkcgfSlcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+cXVlcnkgdGVybSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdpbGRjYXJkPC9jYXB0aW9uPlxuICAgKiBxdWVyeS50ZXJtKCdmb28nLCB7XG4gICAqICAgd2lsZGNhcmQ6IGx1bnIuUXVlcnkud2lsZGNhcmQuTEVBRElORyB8IGx1bnIuUXVlcnkud2lsZGNhcmQuVFJBSUxJTkdcbiAgICogfSlcbiAgICovXG5cbiAgbHVuci5RdWVyeS53aWxkY2FyZCA9IG5ldyBTdHJpbmcoXCIqXCIpO1xuICBsdW5yLlF1ZXJ5LndpbGRjYXJkLk5PTkUgPSAwO1xuICBsdW5yLlF1ZXJ5LndpbGRjYXJkLkxFQURJTkcgPSAxO1xuICBsdW5yLlF1ZXJ5LndpbGRjYXJkLlRSQUlMSU5HID0gMjtcblxuICAvKipcbiAgICogQ29uc3RhbnRzIGZvciBpbmRpY2F0aW5nIHdoYXQga2luZCBvZiBwcmVzZW5jZSBhIHRlcm0gbXVzdCBoYXZlIGluIG1hdGNoaW5nIGRvY3VtZW50cy5cbiAgICpcbiAgICogQGNvbnN0YW50XG4gICAqIEBlbnVtIHtudW1iZXJ9XG4gICAqIEBzZWUgbHVuci5RdWVyeX5DbGF1c2VcbiAgICogQHNlZSBsdW5yLlF1ZXJ5I2NsYXVzZVxuICAgKiBAc2VlIGx1bnIuUXVlcnkjdGVybVxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5xdWVyeSB0ZXJtIHdpdGggcmVxdWlyZWQgcHJlc2VuY2U8L2NhcHRpb24+XG4gICAqIHF1ZXJ5LnRlcm0oJ2ZvbycsIHsgcHJlc2VuY2U6IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRUQgfSlcbiAgICovXG4gIGx1bnIuUXVlcnkucHJlc2VuY2UgPSB7XG4gICAgLyoqXG4gICAgICogVGVybSdzIHByZXNlbmNlIGluIGEgZG9jdW1lbnQgaXMgb3B0aW9uYWwsIHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgICovXG4gICAgT1BUSU9OQUw6IDEsXG5cbiAgICAvKipcbiAgICAgKiBUZXJtJ3MgcHJlc2VuY2UgaW4gYSBkb2N1bWVudCBpcyByZXF1aXJlZCwgZG9jdW1lbnRzIHRoYXQgZG8gbm90IGNvbnRhaW5cbiAgICAgKiB0aGlzIHRlcm0gd2lsbCBub3QgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgUkVRVUlSRUQ6IDIsXG5cbiAgICAvKipcbiAgICAgKiBUZXJtJ3MgcHJlc2VuY2UgaW4gYSBkb2N1bWVudCBpcyBwcm9oaWJpdGVkLCBkb2N1bWVudHMgdGhhdCBkbyBjb250YWluXG4gICAgICogdGhpcyB0ZXJtIHdpbGwgbm90IGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIFBST0hJQklURUQ6IDMsXG4gIH07XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNsYXVzZSBpbiBhIHtAbGluayBsdW5yLlF1ZXJ5fSBjb250YWlucyBhIHRlcm0gYW5kIGRldGFpbHMgb24gaG93IHRvXG4gICAqIG1hdGNoIHRoYXQgdGVybSBhZ2FpbnN0IGEge0BsaW5rIGx1bnIuSW5kZXh9LlxuICAgKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBsdW5yLlF1ZXJ5fkNsYXVzZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ1tdfSBmaWVsZHMgLSBUaGUgZmllbGRzIGluIGFuIGluZGV4IHRoaXMgY2xhdXNlIHNob3VsZCBiZSBtYXRjaGVkIGFnYWluc3QuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYm9vc3Q9MV0gLSBBbnkgYm9vc3QgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB3aGVuIG1hdGNoaW5nIHRoaXMgY2xhdXNlLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW2VkaXREaXN0YW5jZV0gLSBXaGV0aGVyIHRoZSB0ZXJtIHNob3VsZCBoYXZlIGZ1enp5IG1hdGNoaW5nIGFwcGxpZWQsIGFuZCBob3cgZnV6enkgdGhlIG1hdGNoIHNob3VsZCBiZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlUGlwZWxpbmVdIC0gV2hldGhlciB0aGUgdGVybSBzaG91bGQgYmUgcGFzc2VkIHRocm91Z2ggdGhlIHNlYXJjaCBwaXBlbGluZS5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWxkY2FyZD1sdW5yLlF1ZXJ5LndpbGRjYXJkLk5PTkVdIC0gV2hldGhlciB0aGUgdGVybSBzaG91bGQgaGF2ZSB3aWxkY2FyZHMgYXBwZW5kZWQgb3IgcHJlcGVuZGVkLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW3ByZXNlbmNlPWx1bnIuUXVlcnkucHJlc2VuY2UuT1BUSU9OQUxdIC0gVGhlIHRlcm1zIHByZXNlbmNlIGluIGFueSBtYXRjaGluZyBkb2N1bWVudHMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIGx1bnIuUXVlcnl+Q2xhdXNlfSB0byB0aGlzIHF1ZXJ5LlxuICAgKlxuICAgKiBVbmxlc3MgdGhlIGNsYXVzZSBjb250YWlucyB0aGUgZmllbGRzIHRvIGJlIG1hdGNoZWQgYWxsIGZpZWxkcyB3aWxsIGJlIG1hdGNoZWQuIEluIGFkZGl0aW9uXG4gICAqIGEgZGVmYXVsdCBib29zdCBvZiAxIGlzIGFwcGxpZWQgdG8gdGhlIGNsYXVzZS5cbiAgICpcbiAgICogQHBhcmFtIHtsdW5yLlF1ZXJ5fkNsYXVzZX0gY2xhdXNlIC0gVGhlIGNsYXVzZSB0byBhZGQgdG8gdGhpcyBxdWVyeS5cbiAgICogQHNlZSBsdW5yLlF1ZXJ5fkNsYXVzZVxuICAgKiBAcmV0dXJucyB7bHVuci5RdWVyeX1cbiAgICovXG4gIGx1bnIuUXVlcnkucHJvdG90eXBlLmNsYXVzZSA9IGZ1bmN0aW9uIChjbGF1c2UpIHtcbiAgICBpZiAoIShcImZpZWxkc1wiIGluIGNsYXVzZSkpIHtcbiAgICAgIGNsYXVzZS5maWVsZHMgPSB0aGlzLmFsbEZpZWxkcztcbiAgICB9XG5cbiAgICBpZiAoIShcImJvb3N0XCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLmJvb3N0ID0gMTtcbiAgICB9XG5cbiAgICBpZiAoIShcInVzZVBpcGVsaW5lXCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLnVzZVBpcGVsaW5lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIShcIndpbGRjYXJkXCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLndpbGRjYXJkID0gbHVuci5RdWVyeS53aWxkY2FyZC5OT05FO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNsYXVzZS53aWxkY2FyZCAmIGx1bnIuUXVlcnkud2lsZGNhcmQuTEVBRElORyAmJlxuICAgICAgY2xhdXNlLnRlcm0uY2hhckF0KDApICE9IGx1bnIuUXVlcnkud2lsZGNhcmRcbiAgICApIHtcbiAgICAgIGNsYXVzZS50ZXJtID0gXCIqXCIgKyBjbGF1c2UudGVybTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjbGF1c2Uud2lsZGNhcmQgJiBsdW5yLlF1ZXJ5LndpbGRjYXJkLlRSQUlMSU5HICYmXG4gICAgICBjbGF1c2UudGVybS5zbGljZSgtMSkgIT0gbHVuci5RdWVyeS53aWxkY2FyZFxuICAgICkge1xuICAgICAgY2xhdXNlLnRlcm0gPSBcIlwiICsgY2xhdXNlLnRlcm0gKyBcIipcIjtcbiAgICB9XG5cbiAgICBpZiAoIShcInByZXNlbmNlXCIgaW4gY2xhdXNlKSkge1xuICAgICAgY2xhdXNlLnByZXNlbmNlID0gbHVuci5RdWVyeS5wcmVzZW5jZS5PUFRJT05BTDtcbiAgICB9XG5cbiAgICB0aGlzLmNsYXVzZXMucHVzaChjbGF1c2UpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgbmVnYXRlZCBxdWVyeSBpcyBvbmUgaW4gd2hpY2ggZXZlcnkgY2xhdXNlIGhhcyBhIHByZXNlbmNlIG9mXG4gICAqIHByb2hpYml0ZWQuIFRoZXNlIHF1ZXJpZXMgcmVxdWlyZSBzb21lIHNwZWNpYWwgcHJvY2Vzc2luZyB0byByZXR1cm5cbiAgICogdGhlIGV4cGVjdGVkIHJlc3VsdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIGx1bnIuUXVlcnkucHJvdG90eXBlLmlzTmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2xhdXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2xhdXNlc1tpXS5wcmVzZW5jZSAhPSBsdW5yLlF1ZXJ5LnByZXNlbmNlLlBST0hJQklURUQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgdGVybSB0byB0aGUgY3VycmVudCBxdWVyeSwgdW5kZXIgdGhlIGNvdmVycyB0aGlzIHdpbGwgY3JlYXRlIGEge0BsaW5rIGx1bnIuUXVlcnl+Q2xhdXNlfVxuICAgKiB0byB0aGUgbGlzdCBvZiBjbGF1c2VzIHRoYXQgbWFrZSB1cCB0aGlzIHF1ZXJ5LlxuICAgKlxuICAgKiBUaGUgdGVybSBpcyB1c2VkIGFzIGlzLCBpLmUuIG5vIHRva2VuaXphdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBieSB0aGlzIG1ldGhvZC4gSW5zdGVhZCBjb252ZXJzaW9uXG4gICAqIHRvIGEgdG9rZW4gb3IgdG9rZW4tbGlrZSBzdHJpbmcgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIFRoZSB0ZXJtIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYC4gTXVsdGlwbGUgdGVybXMgY2FuIGJlIHBhc3NlZCBhcyBhblxuICAgKiBhcnJheSwgZWFjaCB0ZXJtIGluIHRoZSBhcnJheSB3aWxsIHNoYXJlIHRoZSBzYW1lIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fG9iamVjdFtdfSB0ZXJtIC0gVGhlIHRlcm0ocykgdG8gYWRkIHRvIHRoZSBxdWVyeS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBxdWVyeSBjbGF1c2UuXG4gICAqIEByZXR1cm5zIHtsdW5yLlF1ZXJ5fVxuICAgKiBAc2VlIGx1bnIuUXVlcnkjY2xhdXNlXG4gICAqIEBzZWUgbHVuci5RdWVyeX5DbGF1c2VcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+YWRkaW5nIGEgc2luZ2xlIHRlcm0gdG8gYSBxdWVyeTwvY2FwdGlvbj5cbiAgICogcXVlcnkudGVybShcImZvb1wiKVxuICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5hZGRpbmcgYSBzaW5nbGUgdGVybSB0byBhIHF1ZXJ5IGFuZCBzcGVjaWZ5aW5nIHNlYXJjaCBmaWVsZHMsIHRlcm0gYm9vc3QgYW5kIGF1dG9tYXRpYyB0cmFpbGluZyB3aWxkY2FyZDwvY2FwdGlvbj5cbiAgICogcXVlcnkudGVybShcImZvb1wiLCB7XG4gICAqICAgZmllbGRzOiBbXCJ0aXRsZVwiXSxcbiAgICogICBib29zdDogMTAsXG4gICAqICAgd2lsZGNhcmQ6IGx1bnIuUXVlcnkud2lsZGNhcmQuVFJBSUxJTkdcbiAgICogfSlcbiAgICogQGV4YW1wbGUgPGNhcHRpb24+dXNpbmcgbHVuci50b2tlbml6ZXIgdG8gY29udmVydCBhIHN0cmluZyB0byB0b2tlbnMgYmVmb3JlIHVzaW5nIHRoZW0gYXMgdGVybXM8L2NhcHRpb24+XG4gICAqIHF1ZXJ5LnRlcm0obHVuci50b2tlbml6ZXIoXCJmb28gYmFyXCIpKVxuICAgKi9cbiAgbHVuci5RdWVyeS5wcm90b3R5cGUudGVybSA9IGZ1bmN0aW9uICh0ZXJtLCBvcHRpb25zKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGVybSkpIHtcbiAgICAgIHRlcm0uZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICB0aGlzLnRlcm0odCwgbHVuci51dGlscy5jbG9uZShvcHRpb25zKSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjbGF1c2UgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNsYXVzZS50ZXJtID0gdGVybS50b1N0cmluZygpO1xuXG4gICAgdGhpcy5jbGF1c2UoY2xhdXNlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBsdW5yLlF1ZXJ5UGFyc2VFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5uYW1lID0gXCJRdWVyeVBhcnNlRXJyb3JcIjtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgbHVuci5RdWVyeUxleGVyID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHRoaXMubGV4ZW1lcyA9IFtdO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMubGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5zdGFydCA9IDA7XG4gICAgdGhpcy5lc2NhcGVDaGFyUG9zaXRpb25zID0gW107XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlID0gbHVuci5RdWVyeUxleGVyLmxleFRleHQ7XG5cbiAgICB3aGlsZSAoc3RhdGUpIHtcbiAgICAgIHN0YXRlID0gc3RhdGUodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUuc2xpY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN1YlNsaWNlcyA9IFtdLFxuICAgICAgc2xpY2VTdGFydCA9IHRoaXMuc3RhcnQsXG4gICAgICBzbGljZUVuZCA9IHRoaXMucG9zO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVzY2FwZUNoYXJQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNsaWNlRW5kID0gdGhpcy5lc2NhcGVDaGFyUG9zaXRpb25zW2ldO1xuICAgICAgc3ViU2xpY2VzLnB1c2godGhpcy5zdHIuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpKTtcbiAgICAgIHNsaWNlU3RhcnQgPSBzbGljZUVuZCArIDE7XG4gICAgfVxuXG4gICAgc3ViU2xpY2VzLnB1c2godGhpcy5zdHIuc2xpY2Uoc2xpY2VTdGFydCwgdGhpcy5wb3MpKTtcbiAgICB0aGlzLmVzY2FwZUNoYXJQb3NpdGlvbnMubGVuZ3RoID0gMDtcblxuICAgIHJldHVybiBzdWJTbGljZXMuam9pbihcIlwiKTtcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRoaXMubGV4ZW1lcy5wdXNoKHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBzdHI6IHRoaXMuc2xpY2VTdHJpbmcoKSxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLnBvcyxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIucHJvdG90eXBlLmVzY2FwZUNoYXJhY3RlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVzY2FwZUNoYXJQb3NpdGlvbnMucHVzaCh0aGlzLnBvcyAtIDEpO1xuICAgIHRoaXMucG9zICs9IDE7XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5FT1M7XG4gICAgfVxuXG4gICAgdmFyIGNoYXIgPSB0aGlzLnN0ci5jaGFyQXQodGhpcy5wb3MpO1xuICAgIHRoaXMucG9zICs9IDE7XG4gICAgcmV0dXJuIGNoYXI7XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLnByb3RvdHlwZS53aWR0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wb3MgLSB0aGlzLnN0YXJ0O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUuaWdub3JlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ID09IHRoaXMucG9zKSB7XG4gICAgICB0aGlzLnBvcyArPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIucHJvdG90eXBlLmJhY2t1cCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvcyAtPSAxO1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUuYWNjZXB0RGlnaXRSdW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYXIsIGNoYXJDb2RlO1xuXG4gICAgZG8ge1xuICAgICAgY2hhciA9IHRoaXMubmV4dCgpO1xuICAgICAgY2hhckNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgfSB3aGlsZSAoY2hhckNvZGUgPiA0NyAmJiBjaGFyQ29kZSA8IDU4KTtcblxuICAgIGlmIChjaGFyICE9IGx1bnIuUXVlcnlMZXhlci5FT1MpIHtcbiAgICAgIHRoaXMuYmFja3VwKCk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5wcm90b3R5cGUubW9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wb3MgPCB0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIuRU9TID0gXCJFT1NcIjtcbiAgbHVuci5RdWVyeUxleGVyLkZJRUxEID0gXCJGSUVMRFwiO1xuICBsdW5yLlF1ZXJ5TGV4ZXIuVEVSTSA9IFwiVEVSTVwiO1xuICBsdW5yLlF1ZXJ5TGV4ZXIuRURJVF9ESVNUQU5DRSA9IFwiRURJVF9ESVNUQU5DRVwiO1xuICBsdW5yLlF1ZXJ5TGV4ZXIuQk9PU1QgPSBcIkJPT1NUXCI7XG4gIGx1bnIuUXVlcnlMZXhlci5QUkVTRU5DRSA9IFwiUFJFU0VOQ0VcIjtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIubGV4RmllbGQgPSBmdW5jdGlvbiAobGV4ZXIpIHtcbiAgICBsZXhlci5iYWNrdXAoKTtcbiAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5GSUVMRCk7XG4gICAgbGV4ZXIuaWdub3JlKCk7XG4gICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5sZXhUZXJtID0gZnVuY3Rpb24gKGxleGVyKSB7XG4gICAgaWYgKGxleGVyLndpZHRoKCkgPiAxKSB7XG4gICAgICBsZXhlci5iYWNrdXAoKTtcbiAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlRFUk0pO1xuICAgIH1cblxuICAgIGxleGVyLmlnbm9yZSgpO1xuXG4gICAgaWYgKGxleGVyLm1vcmUoKSkge1xuICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIubGV4RWRpdERpc3RhbmNlID0gZnVuY3Rpb24gKGxleGVyKSB7XG4gICAgbGV4ZXIuaWdub3JlKCk7XG4gICAgbGV4ZXIuYWNjZXB0RGlnaXRSdW4oKTtcbiAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5FRElUX0RJU1RBTkNFKTtcbiAgICByZXR1cm4gbHVuci5RdWVyeUxleGVyLmxleFRleHQ7XG4gIH07XG5cbiAgbHVuci5RdWVyeUxleGVyLmxleEJvb3N0ID0gZnVuY3Rpb24gKGxleGVyKSB7XG4gICAgbGV4ZXIuaWdub3JlKCk7XG4gICAgbGV4ZXIuYWNjZXB0RGlnaXRSdW4oKTtcbiAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5CT09TVCk7XG4gICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlMZXhlci5sZXhFT1MgPSBmdW5jdGlvbiAobGV4ZXIpIHtcbiAgICBpZiAobGV4ZXIud2lkdGgoKSA+IDApIHtcbiAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlRFUk0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBUaGlzIG1hdGNoZXMgdGhlIHNlcGFyYXRvciB1c2VkIHdoZW4gdG9rZW5pc2luZyBmaWVsZHNcbiAgLy8gd2l0aGluIGEgZG9jdW1lbnQuIFRoZXNlIHNob3VsZCBtYXRjaCBvdGhlcndpc2UgaXQgaXNcbiAgLy8gbm90IHBvc3NpYmxlIHRvIHNlYXJjaCBmb3Igc29tZSB0b2tlbnMgd2l0aGluIGEgZG9jdW1lbnQuXG4gIC8vXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byBjaGFuZ2UgdGhlIHNlcGFyYXRvciBvbiB0aGVcbiAgLy8gdG9rZW5pemVyIHNvIGl0IF9taWdodF8gY2xhc2ggd2l0aCBhbnkgb3RoZXIgb2YgdGhlIHNwZWNpYWxcbiAgLy8gY2hhcmFjdGVycyBhbHJlYWR5IHVzZWQgd2l0aGluIHRoZSBzZWFyY2ggc3RyaW5nLCBlLmcuIDouXG4gIC8vXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHNlcGFyYXRvciBpblxuICAvLyBzdWNoIGEgd2F5IHRoYXQgbWFrZXMgc29tZSB3b3JkcyB1bnNlYXJjaGFibGUgdXNpbmcgYSBzZWFyY2hcbiAgLy8gc3RyaW5nLlxuICBsdW5yLlF1ZXJ5TGV4ZXIudGVybVNlcGFyYXRvciA9IGx1bnIudG9rZW5pemVyLnNlcGFyYXRvcjtcblxuICBsdW5yLlF1ZXJ5TGV4ZXIubGV4VGV4dCA9IGZ1bmN0aW9uIChsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgY2hhciA9IGxleGVyLm5leHQoKTtcblxuICAgICAgaWYgKGNoYXIgPT0gbHVuci5RdWVyeUxleGVyLkVPUykge1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeUxleGVyLmxleEVPUztcbiAgICAgIH1cblxuICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlciBpcyAnXFwnXG4gICAgICBpZiAoY2hhci5jaGFyQ29kZUF0KDApID09IDkyKSB7XG4gICAgICAgIGxleGVyLmVzY2FwZUNoYXJhY3RlcigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhGaWVsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXIgPT0gXCJ+XCIpIHtcbiAgICAgICAgbGV4ZXIuYmFja3VwKCk7XG4gICAgICAgIGlmIChsZXhlci53aWR0aCgpID4gMCkge1xuICAgICAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlRFUk0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5TGV4ZXIubGV4RWRpdERpc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhciA9PSBcIl5cIikge1xuICAgICAgICBsZXhlci5iYWNrdXAoKTtcbiAgICAgICAgaWYgKGxleGVyLndpZHRoKCkgPiAwKSB7XG4gICAgICAgICAgbGV4ZXIuZW1pdChsdW5yLlF1ZXJ5TGV4ZXIuVEVSTSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhCb29zdDtcbiAgICAgIH1cblxuICAgICAgLy8gXCIrXCIgaW5kaWNhdGVzIHRlcm0gcHJlc2VuY2UgaXMgcmVxdWlyZWRcbiAgICAgIC8vIGNoZWNraW5nIGZvciBsZW5ndGggdG8gZW5zdXJlIHRoYXQgb25seVxuICAgICAgLy8gbGVhZGluZyBcIitcIiBhcmUgY29uc2lkZXJlZFxuICAgICAgaWYgKGNoYXIgPT0gXCIrXCIgJiYgbGV4ZXIud2lkdGgoKSA9PT0gMSkge1xuICAgICAgICBsZXhlci5lbWl0KGx1bnIuUXVlcnlMZXhlci5QUkVTRU5DRSk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5TGV4ZXIubGV4VGV4dDtcbiAgICAgIH1cblxuICAgICAgLy8gXCItXCIgaW5kaWNhdGVzIHRlcm0gcHJlc2VuY2UgaXMgcHJvaGliaXRlZFxuICAgICAgLy8gY2hlY2tpbmcgZm9yIGxlbmd0aCB0byBlbnN1cmUgdGhhdCBvbmx5XG4gICAgICAvLyBsZWFkaW5nIFwiLVwiIGFyZSBjb25zaWRlcmVkXG4gICAgICBpZiAoY2hhciA9PSBcIi1cIiAmJiBsZXhlci53aWR0aCgpID09PSAxKSB7XG4gICAgICAgIGxleGVyLmVtaXQobHVuci5RdWVyeUxleGVyLlBSRVNFTkNFKTtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXh0O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhci5tYXRjaChsdW5yLlF1ZXJ5TGV4ZXIudGVybVNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlMZXhlci5sZXhUZXJtO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VyID0gZnVuY3Rpb24gKHN0ciwgcXVlcnkpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IGx1bnIuUXVlcnlMZXhlcihzdHIpO1xuICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRDbGF1c2UgPSB7fTtcbiAgICB0aGlzLmxleGVtZUlkeCA9IDA7XG4gIH07XG5cbiAgbHVuci5RdWVyeVBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sZXhlci5ydW4oKTtcbiAgICB0aGlzLmxleGVtZXMgPSB0aGlzLmxleGVyLmxleGVtZXM7XG5cbiAgICB2YXIgc3RhdGUgPSBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlQ2xhdXNlO1xuXG4gICAgd2hpbGUgKHN0YXRlKSB7XG4gICAgICBzdGF0ZSA9IHN0YXRlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucHJvdG90eXBlLnBlZWtMZXhlbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGV4ZW1lc1t0aGlzLmxleGVtZUlkeF07XG4gIH07XG5cbiAgbHVuci5RdWVyeVBhcnNlci5wcm90b3R5cGUuY29uc3VtZUxleGVtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGV4ZW1lID0gdGhpcy5wZWVrTGV4ZW1lKCk7XG4gICAgdGhpcy5sZXhlbWVJZHggKz0gMTtcbiAgICByZXR1cm4gbGV4ZW1lO1xuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucHJvdG90eXBlLm5leHRDbGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbXBsZXRlZENsYXVzZSA9IHRoaXMuY3VycmVudENsYXVzZTtcbiAgICB0aGlzLnF1ZXJ5LmNsYXVzZShjb21wbGV0ZWRDbGF1c2UpO1xuICAgIHRoaXMuY3VycmVudENsYXVzZSA9IHt9O1xuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VDbGF1c2UgPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgdmFyIGxleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlBSRVNFTkNFOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVByZXNlbmNlO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRklFTEQ6XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlRmllbGQ7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5URVJNOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVRlcm07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICBcImV4cGVjdGVkIGVpdGhlciBhIGZpZWxkIG9yIGEgdGVybSwgZm91bmQgXCIgKyBsZXhlbWUudHlwZTtcblxuICAgICAgICBpZiAobGV4ZW1lLnN0ci5sZW5ndGggPj0gMSkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlICdcIiArIGxleGVtZS5zdHIgKyBcIidcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihlcnJvck1lc3NhZ2UsIGxleGVtZS5zdGFydCwgbGV4ZW1lLmVuZCk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VQcmVzZW5jZSA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChsZXhlbWUuc3RyKSB7XG4gICAgICBjYXNlIFwiLVwiOlxuICAgICAgICBwYXJzZXIuY3VycmVudENsYXVzZS5wcmVzZW5jZSA9IGx1bnIuUXVlcnkucHJlc2VuY2UuUFJPSElCSVRFRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiK1wiOlxuICAgICAgICBwYXJzZXIuY3VycmVudENsYXVzZS5wcmVzZW5jZSA9IGx1bnIuUXVlcnkucHJlc2VuY2UuUkVRVUlSRUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwidW5yZWNvZ25pc2VkIHByZXNlbmNlIG9wZXJhdG9yJ1wiICsgbGV4ZW1lLnN0ciArIFwiJ1wiO1xuICAgICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoZXJyb3JNZXNzYWdlLCBsZXhlbWUuc3RhcnQsIGxleGVtZS5lbmQpO1xuICAgIH1cblxuICAgIHZhciBuZXh0TGV4ZW1lID0gcGFyc2VyLnBlZWtMZXhlbWUoKTtcblxuICAgIGlmIChuZXh0TGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiZXhwZWN0aW5nIHRlcm0gb3IgZmllbGQsIGZvdW5kIG5vdGhpbmdcIjtcbiAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihlcnJvck1lc3NhZ2UsIGxleGVtZS5zdGFydCwgbGV4ZW1lLmVuZCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChuZXh0TGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkZJRUxEOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUZpZWxkO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuVEVSTTpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VUZXJtO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgXCJleHBlY3RpbmcgdGVybSBvciBmaWVsZCwgZm91bmQgJ1wiICsgbmV4dExleGVtZS50eXBlICsgXCInXCI7XG4gICAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgbmV4dExleGVtZS5zdGFydCxcbiAgICAgICAgICBuZXh0TGV4ZW1lLmVuZFxuICAgICAgICApO1xuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlRmllbGQgPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgdmFyIGxleGVtZSA9IHBhcnNlci5jb25zdW1lTGV4ZW1lKCk7XG5cbiAgICBpZiAobGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYXJzZXIucXVlcnkuYWxsRmllbGRzLmluZGV4T2YobGV4ZW1lLnN0cikgPT0gLTEpIHtcbiAgICAgIHZhciBwb3NzaWJsZUZpZWxkcyA9IHBhcnNlci5xdWVyeS5hbGxGaWVsZHNcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICByZXR1cm4gXCInXCIgKyBmICsgXCInXCI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpLFxuICAgICAgICBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgIFwidW5yZWNvZ25pc2VkIGZpZWxkICdcIiArXG4gICAgICAgICAgbGV4ZW1lLnN0ciArXG4gICAgICAgICAgXCInLCBwb3NzaWJsZSBmaWVsZHM6IFwiICtcbiAgICAgICAgICBwb3NzaWJsZUZpZWxkcztcblxuICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKGVycm9yTWVzc2FnZSwgbGV4ZW1lLnN0YXJ0LCBsZXhlbWUuZW5kKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuY3VycmVudENsYXVzZS5maWVsZHMgPSBbbGV4ZW1lLnN0cl07XG5cbiAgICB2YXIgbmV4dExleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobmV4dExleGVtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBcImV4cGVjdGluZyB0ZXJtLCBmb3VuZCBub3RoaW5nXCI7XG4gICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoZXJyb3JNZXNzYWdlLCBsZXhlbWUuc3RhcnQsIGxleGVtZS5lbmQpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobmV4dExleGVtZS50eXBlKSB7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5URVJNOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVRlcm07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gXCJleHBlY3RpbmcgdGVybSwgZm91bmQgJ1wiICsgbmV4dExleGVtZS50eXBlICsgXCInXCI7XG4gICAgICAgIHRocm93IG5ldyBsdW5yLlF1ZXJ5UGFyc2VFcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgbmV4dExleGVtZS5zdGFydCxcbiAgICAgICAgICBuZXh0TGV4ZW1lLmVuZFxuICAgICAgICApO1xuICAgIH1cbiAgfTtcblxuICBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlVGVybSA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyc2VyLmN1cnJlbnRDbGF1c2UudGVybSA9IGxleGVtZS5zdHIudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsZXhlbWUuc3RyLmluZGV4T2YoXCIqXCIpICE9IC0xKSB7XG4gICAgICBwYXJzZXIuY3VycmVudENsYXVzZS51c2VQaXBlbGluZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBuZXh0TGV4ZW1lID0gcGFyc2VyLnBlZWtMZXhlbWUoKTtcblxuICAgIGlmIChuZXh0TGV4ZW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VyLm5leHRDbGF1c2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5leHRMZXhlbWUudHlwZSkge1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuVEVSTTpcbiAgICAgICAgcGFyc2VyLm5leHRDbGF1c2UoKTtcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VUZXJtO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRklFTEQ6XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlRmllbGQ7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5FRElUX0RJU1RBTkNFOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUVkaXREaXN0YW5jZTtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkJPT1NUOlxuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUJvb3N0O1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuUFJFU0VOQ0U6XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlUHJlc2VuY2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmV4cGVjdGVkIGxleGVtZSB0eXBlICdcIiArIG5leHRMZXhlbWUudHlwZSArIFwiJ1wiO1xuICAgICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIG5leHRMZXhlbWUuc3RhcnQsXG4gICAgICAgICAgbmV4dExleGVtZS5lbmRcbiAgICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgbHVuci5RdWVyeVBhcnNlci5wYXJzZUVkaXREaXN0YW5jZSA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVkaXREaXN0YW5jZSA9IHBhcnNlSW50KGxleGVtZS5zdHIsIDEwKTtcblxuICAgIGlmIChpc05hTihlZGl0RGlzdGFuY2UpKSB7XG4gICAgICB2YXIgZXJyb3JNZXNzYWdlID0gXCJlZGl0IGRpc3RhbmNlIG11c3QgYmUgbnVtZXJpY1wiO1xuICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKGVycm9yTWVzc2FnZSwgbGV4ZW1lLnN0YXJ0LCBsZXhlbWUuZW5kKTtcbiAgICB9XG5cbiAgICBwYXJzZXIuY3VycmVudENsYXVzZS5lZGl0RGlzdGFuY2UgPSBlZGl0RGlzdGFuY2U7XG5cbiAgICB2YXIgbmV4dExleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobmV4dExleGVtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChuZXh0TGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlRFUk06XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlVGVybTtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkZJRUxEOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUZpZWxkO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRURJVF9ESVNUQU5DRTpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VFZGl0RGlzdGFuY2U7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5CT09TVDpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VCb29zdDtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlBSRVNFTkNFOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVByZXNlbmNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiVW5leHBlY3RlZCBsZXhlbWUgdHlwZSAnXCIgKyBuZXh0TGV4ZW1lLnR5cGUgKyBcIidcIjtcbiAgICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKFxuICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICBuZXh0TGV4ZW1lLnN0YXJ0LFxuICAgICAgICAgIG5leHRMZXhlbWUuZW5kXG4gICAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VCb29zdCA9IGZ1bmN0aW9uIChwYXJzZXIpIHtcbiAgICB2YXIgbGV4ZW1lID0gcGFyc2VyLmNvbnN1bWVMZXhlbWUoKTtcblxuICAgIGlmIChsZXhlbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJvb3N0ID0gcGFyc2VJbnQobGV4ZW1lLnN0ciwgMTApO1xuXG4gICAgaWYgKGlzTmFOKGJvb3N0KSkge1xuICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiYm9vc3QgbXVzdCBiZSBudW1lcmljXCI7XG4gICAgICB0aHJvdyBuZXcgbHVuci5RdWVyeVBhcnNlRXJyb3IoZXJyb3JNZXNzYWdlLCBsZXhlbWUuc3RhcnQsIGxleGVtZS5lbmQpO1xuICAgIH1cblxuICAgIHBhcnNlci5jdXJyZW50Q2xhdXNlLmJvb3N0ID0gYm9vc3Q7XG5cbiAgICB2YXIgbmV4dExleGVtZSA9IHBhcnNlci5wZWVrTGV4ZW1lKCk7XG5cbiAgICBpZiAobmV4dExleGVtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChuZXh0TGV4ZW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlRFUk06XG4gICAgICAgIHBhcnNlci5uZXh0Q2xhdXNlKCk7XG4gICAgICAgIHJldHVybiBsdW5yLlF1ZXJ5UGFyc2VyLnBhcnNlVGVybTtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLkZJRUxEOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZUZpZWxkO1xuICAgICAgY2FzZSBsdW5yLlF1ZXJ5TGV4ZXIuRURJVF9ESVNUQU5DRTpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VFZGl0RGlzdGFuY2U7XG4gICAgICBjYXNlIGx1bnIuUXVlcnlMZXhlci5CT09TVDpcbiAgICAgICAgcmV0dXJuIGx1bnIuUXVlcnlQYXJzZXIucGFyc2VCb29zdDtcbiAgICAgIGNhc2UgbHVuci5RdWVyeUxleGVyLlBSRVNFTkNFOlxuICAgICAgICBwYXJzZXIubmV4dENsYXVzZSgpO1xuICAgICAgICByZXR1cm4gbHVuci5RdWVyeVBhcnNlci5wYXJzZVByZXNlbmNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFwiVW5leHBlY3RlZCBsZXhlbWUgdHlwZSAnXCIgKyBuZXh0TGV4ZW1lLnR5cGUgKyBcIidcIjtcbiAgICAgICAgdGhyb3cgbmV3IGx1bnIuUXVlcnlQYXJzZUVycm9yKFxuICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICBuZXh0TGV4ZW1lLnN0YXJ0LFxuICAgICAgICAgIG5leHRMZXhlbWUuZW5kXG4gICAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBleHBvcnQgdGhlIG1vZHVsZSB2aWEgQU1ELCBDb21tb25KUyBvciBhcyBhIGJyb3dzZXIgZ2xvYmFsXG4gICAqIEV4cG9ydCBjb2RlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZC9ibG9iL21hc3Rlci9yZXR1cm5FeHBvcnRzLmpzXG4gICAqL1xuICAoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvKipcbiAgICAgICAqIE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxuICAgICAgICogb25seSBDb21tb25KUy1saWtlIGVudmlyb21lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcbiAgICAgICAqIGxpa2UgTm9kZS5cbiAgICAgICAqL1xuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgICByb290Lmx1bnIgPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogSnVzdCByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBleHBvcnQuXG4gICAgICogVGhpcyBleGFtcGxlIHJldHVybnMgYW4gb2JqZWN0LCBidXQgdGhlIG1vZHVsZVxuICAgICAqIGNhbiByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgZXhwb3J0ZWQgdmFsdWUuXG4gICAgICovXG4gICAgcmV0dXJuIGx1bnI7XG4gIH0pO1xufSkoKTtcbiIsCiAgICAiaW1wb3J0IGx1bnIgZnJvbSBcImx1bnJcIjtcblxuLyoqXG4gKiBUaGlzIGlzIGEgbG90IG9mIGhhY2t5IGJ1bGxzaGl0LiBUaGUgbWFpbiB0aGluZyBpcyB0aGVyZSdzIGEgcG9wb3ZlciBlbGVtZW50LCBhIGRlYm91bmNlZCBpbnB1dFxuICogZmllbGQsIGEgc2VhcmNoIGZ1bmN0aW9uLCBhbmQgYSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBhbiBIVE1MIHN0cmluZyB0byBwbG9wIGludG8gdGhlIHJlc3VsdHMuXG4gKi9cblxuaW50ZXJmYWNlIE1hdGNoRGF0YSB7XG4gIG1ldGFkYXRhOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxrZXlvZiBTZWFyY2hEb2MsIHsgcG9zaXRpb246IFtudW1iZXIsIG51bWJlcl1bXSB9PlxuICA+O1xufVxuXG5pbnRlcmZhY2UgU2VhcmNoRG9jIHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBkb1NlYXJjaChcbiAgZG9jc0J5UmVmOiBSZWNvcmQ8c3RyaW5nLCBTZWFyY2hEb2M+LFxuICBsOiBsdW5yLkluZGV4LFxuICBxdWVyeTogc3RyaW5nLFxuICByZXN1bHRFbDogSFRNTERpdkVsZW1lbnRcbikge1xuICBpZiAoIXF1ZXJ5LnRyaW0oKS5sZW5ndGgpIHtcbiAgICByZXN1bHRFbC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cIkRKU2VhcmNoUmVzdWx0c19FbXB0eSBtLW5vcXVlcnlcIj5UeXBlIGEgc2VhcmNoIGludG8gdGhlIGJveC48L2Rpdj5gO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByZXN1bHRzID0gbC5xdWVyeShmdW5jdGlvbiAocSkge1xuICAgIHEudGVybShxdWVyeSwgeyBib29zdDogMTAwLCB1c2VQaXBlbGluZTogdHJ1ZSB9KTtcbiAgICBxLnRlcm0ocXVlcnksIHtcbiAgICAgIGJvb3N0OiAxMCxcbiAgICAgIHVzZVBpcGVsaW5lOiBmYWxzZSxcbiAgICAgIHdpbGRjYXJkOiBsdW5yLlF1ZXJ5LndpbGRjYXJkLlRSQUlMSU5HLFxuICAgIH0pO1xuICAgIHEudGVybShxdWVyeSwgeyBib29zdDogMSwgZWRpdERpc3RhbmNlOiAxIH0pO1xuICB9KTtcblxuICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9XCJESlNlYXJjaFJlc3VsdHNfRW1wdHkgbS1ub3Jlc3VsdHNcIj5ObyByZXN1bHRzIGZvdW5kLjwvZGl2PmA7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVzdWx0RWwuaW5uZXJIVE1MID0gcmVzdWx0c1xuICAgIC5tYXAoKHIpID0+IGJ1aWxkUmVzdWx0SFRNTChyLCBkb2NzQnlSZWZbci5yZWZdKSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZXN1bHRIVE1MKHJlc3VsdDogbHVuci5JbmRleC5SZXN1bHQsIGRvYzogU2VhcmNoRG9jKTogc3RyaW5nIHtcbiAgY29uc3QgbWV0YWRhdGEgPSAocmVzdWx0Lm1hdGNoRGF0YSBhcyBNYXRjaERhdGEpLm1ldGFkYXRhO1xuICByZXR1cm4gYFxuICA8YSBjbGFzcz1cIkRKU2VhcmNoUmVzdWx0XCIgdGFiaW5kZXg9XCIwXCIgaHJlZj1cIiR7ZG9jLnVybH1cIj5cbiAgICA8aDE+JHtidWlsZEhpZ2hsaWdodGVkVGVybXNIVE1MKGRvYy5uYW1lLCBcIm5hbWVcIiwgbWV0YWRhdGEsIGZhbHNlKX08L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJESlNlYXJjaFJlc3VsdF9UZXh0XCI+JHtidWlsZEhpZ2hsaWdodGVkVGVybXNIVE1MKFxuICAgICAgZG9jLnRleHQsXG4gICAgICBcInRleHRcIixcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgdHJ1ZVxuICAgICl9PC9kaXY+XG4gIDwvZGl2PmA7XG59XG5cbmludGVyZmFjZSBTdWJzdHJpbmdMaW5lIHtcbiAgc3RhcnRJbmNsdXNpdmU6IG51bWJlcjtcbiAgZW5kRXhjbHVzaXZlOiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gYnVpbGRIaWdobGlnaHRlZFRlcm1zSFRNTChcbiAgdGV4dDogc3RyaW5nLFxuICBtZXRhZGF0YUtleToga2V5b2YgU2VhcmNoRG9jLFxuICBtZXRhZGF0YTogTWF0Y2hEYXRhW1wibWV0YWRhdGFcIl0sIC8vIHRlcm06IGZpZWxkOiBwb3NpdGlvbltdXG4gIHVzZVBhcmFncmFwaHM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGxldCBwb3NpdGlvbnMgPSBuZXcgQXJyYXk8W251bWJlciwgbnVtYmVyXT4oKTtcblxuICBmb3IgKGNvbnN0IHRlcm1NZXRhZGF0YSBvZiBPYmplY3QudmFsdWVzKG1ldGFkYXRhKSkge1xuICAgIGlmICghdGVybU1ldGFkYXRhW21ldGFkYXRhS2V5XSkgY29udGludWU7XG4gICAgcG9zaXRpb25zID0gcG9zaXRpb25zLmNvbmNhdCh0ZXJtTWV0YWRhdGFbbWV0YWRhdGFLZXldLnBvc2l0aW9uKTtcbiAgfVxuICBwb3NpdGlvbnMuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pO1xuXG4gIGxldCB0ZXh0SW5kZXggPSAwO1xuXG4gIGZ1bmN0aW9uIGdldE5leHRMaW5lKCk6IG51bGwgfCBTdWJzdHJpbmdMaW5lIHtcbiAgICBpZiAodGV4dEluZGV4ID49IHRleHQubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsYkluZGV4ID0gdGV4dC5pbmRleE9mKFwiXFxuXCIsIHRleHRJbmRleCk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZXh0SW5kZXggPSB0ZXh0SW5kZXg7XG4gICAgbGV0IHN1YnN0cmluZyA9IFwiXCI7XG4gICAgaWYgKGxiSW5kZXggPj0gMCkge1xuICAgICAgc3Vic3RyaW5nID0gdGV4dC5zbGljZSh0ZXh0SW5kZXgsIGxiSW5kZXgpO1xuICAgICAgdGV4dEluZGV4ID0gbGJJbmRleCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YnN0cmluZyA9IHRleHQuc2xpY2UodGV4dEluZGV4KTtcbiAgICAgIHRleHRJbmRleCA9IHRleHQubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRJbmNsdXNpdmU6IG9yaWdpbmFsVGV4dEluZGV4LFxuICAgICAgZW5kRXhjbHVzaXZlOiB0ZXh0SW5kZXgsXG4gICAgICB0ZXh0OiBzdWJzdHJpbmcsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh1c2VQYXJhZ3JhcGhzKSB7XG4gICAgbGV0IG5leHRMaW5lID0gZ2V0TmV4dExpbmUoKTtcbiAgICB3aGlsZSAobmV4dExpbmUpIHtcbiAgICAgIC8vIFdBUk5JTkc6IE5eMiBBTEdPUklUSE0hXG4gICAgICBjb25zdCByZWxldmFudFBvc2l0aW9ucyA9IHBvc2l0aW9ucy5maWx0ZXIoXG4gICAgICAgIChwb3MpID0+XG4gICAgICAgICAgcG9zWzBdID49IG5leHRMaW5lIS5zdGFydEluY2x1c2l2ZSAmJiBwb3NbMF0gPCBuZXh0TGluZSEuZW5kRXhjbHVzaXZlXG4gICAgICApO1xuICAgICAgaWYgKHJlbGV2YW50UG9zaXRpb25zLmxlbmd0aClcbiAgICAgICAgcmVzdWx0LnB1c2goYDxwPiR7bGluZVRvSFRNTChuZXh0TGluZSwgcmVsZXZhbnRQb3NpdGlvbnMpfWApO1xuICAgICAgbmV4dExpbmUgPSBnZXROZXh0TGluZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucHVzaChcbiAgICAgIGxpbmVUb0hUTUwoXG4gICAgICAgIHsgc3RhcnRJbmNsdXNpdmU6IDAsIGVuZEV4Y2x1c2l2ZTogdGV4dC5sZW5ndGgsIHRleHQgfSxcbiAgICAgICAgcG9zaXRpb25zXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gbGluZVRvSFRNTChcbiAgbGluZTogU3Vic3RyaW5nTGluZSxcbiAgcG9zaXRpb25zOiBbbnVtYmVyLCBudW1iZXJdW11cbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgbGV0IGxhc3RQbGFpbkluZGV4ID0gMDtcblxuICBmb3IgKGNvbnN0IFtzdGFydCwgbGVuXSBvZiBwb3NpdGlvbnMpIHtcbiAgICBjb25zdCBsb2NhbFN0YXJ0ID0gc3RhcnQgLSBsaW5lLnN0YXJ0SW5jbHVzaXZlO1xuICAgIGlmIChsb2NhbFN0YXJ0ID4gbGFzdFBsYWluSW5kZXgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGxpbmUudGV4dC5zbGljZShsYXN0UGxhaW5JbmRleCwgbG9jYWxTdGFydCkpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChcIjxtYXJrPlwiKTtcbiAgICByZXN1bHQucHVzaChsaW5lLnRleHQuc2xpY2UobG9jYWxTdGFydCwgbG9jYWxTdGFydCArIGxlbikpO1xuICAgIHJlc3VsdC5wdXNoKFwiPC9tYXJrPlwiKTtcbiAgICBsYXN0UGxhaW5JbmRleCA9IGxvY2FsU3RhcnQgKyBsZW47XG4gIH1cblxuICBpZiAobGFzdFBsYWluSW5kZXggPCBsaW5lLnRleHQubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnB1c2gobGluZS50ZXh0LnNsaWNlKGxhc3RQbGFpbkluZGV4KSk7XG4gIH1cblxuICBpZiAoIXJlc3VsdC5sZW5ndGgpIHJldHVybiBcIlwiO1xuXG4gIHJldHVybiByZXN1bHQuam9pbihcIlwiKTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkai1vbmxvYWRcIiwgKCkgPT4ge1xuICBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICBcIiNkai1zZWFyY2gtaW5wdXRcIlxuICApIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICBpZiAoIWlucHV0RWwpIHJldHVybjtcblxuICBjb25zdCByZXN1bHRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgXCIjZGotc2VhcmNoLW1lbnUtcmVzdWx0c1wiXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xuICBpZiAoIXJlc3VsdEVsKSByZXR1cm47XG5cbiAgY29uc3QgcG9wb3ZlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICBcIiNkai1zZWFyY2gtbWVudVwiXG4gICkhIGFzIEhUTUxEaXZFbGVtZW50O1xuICBpZiAoIXBvcG92ZXJFbCkgcmV0dXJuO1xuXG4gIC8vIFRoZSBmbGV4IGNvbnRhaW5lciBzZWVtcyB0byBwcmV2ZW50IHRoZSBiYWNrZHJvcCBmcm9tIGdldHRpbmcgY2xpY2sgZXZlbnRzLiA6LShcbiAgLy8gU28ganVzdCBjbG9zZSB0aGUgZGFtbiB0aGluZyBvbiBjbGljay5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ESlNlYXJjaE1lbnVfRmxleENvbnRhaW5lclwiKS5mb3JFYWNoKChmbGV4RWwpID0+IHtcbiAgICBmbGV4RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICBpZiAoZS50YXJnZXQgIT09IGZsZXhFbCkgcmV0dXJuO1xuICAgICAgcG9wb3ZlckVsLmhpZGVQb3BvdmVyKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB7XG4gICAgZGpTZWFyY2hJbmRleD86IHsgbmFtZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IHVybDogc3RyaW5nIH1bXTtcbiAgfTtcbiAgaWYgKCF3aW4uZGpTZWFyY2hJbmRleCkge1xuICAgIGNvbnNvbGUud2FybihcIlNlYXJjaCBpbmRleCBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlYXJjaEluZGV4ID0gd2luLmRqU2VhcmNoSW5kZXg7XG5cbiAgY29uc3QgZG9jc0J5UmVmOiBSZWNvcmQ8c3RyaW5nLCBTZWFyY2hEb2M+ID0ge307XG5cbiAgY29uc3QgbCA9IGx1bnIoZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVmKFwidXJsXCIpO1xuICAgIHRoaXMuZmllbGQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZmllbGQoXCJ0ZXh0XCIpO1xuICAgIHRoaXMuZmllbGQoXCJ1cmxcIik7XG5cbiAgICB0aGlzLm1ldGFkYXRhV2hpdGVsaXN0ID0gW1wicG9zaXRpb25cIl07XG5cbiAgICBmb3IgKGNvbnN0IGRvYyBvZiBzZWFyY2hJbmRleCkge1xuICAgICAgdGhpcy5hZGQoZG9jKTtcbiAgICAgIGRvY3NCeVJlZltkb2MudXJsXSA9IGRvYztcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGRlYm91bmNlKFxuICAgIGZ1bmM6IEZ1bmN0aW9uLFxuICAgIHdhaXQ6IG51bWJlcixcbiAgICBpbW1lZGlhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBhbHdheXNJbW1lZGlhdGVDYWxsYmFjaz86ICgpID0+IHZvaWRcbiAgKTogdHlwZW9mIGZ1bmMge1xuICAgIGxldCB0aW1lb3V0OiBhbnkgfCBudWxsID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHVua25vd24pIHtcbiAgICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICAgIGxldCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgbGV0IGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9O1xuICAgICAgbGV0IGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCEpO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGFsd2F5c0ltbWVkaWF0ZUNhbGxiYWNrKSBhbHdheXNJbW1lZGlhdGVDYWxsYmFjaygpO1xuICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaGVyID0gZGVib3VuY2UoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICBkb1NlYXJjaChkb2NzQnlSZWYsIGwsIHF1ZXJ5LCByZXN1bHRFbCk7XG4gIH0sIDUwMCk7XG5cbiAgLy8gdXNlICdpbnB1dCcgZm9yIGtleXN0cm9rZXMsICdjaGFuZ2UnIGZvciBlbnRlciBvciB1bmZvY3VzXG4gIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgZGVib3VuY2VkU2VhcmNoZXIoKGUudGFyZ2V0ISBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gIH0pO1xuXG4gIChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLkRKT3BlblNlYXJjaEJ1dHRvblwiKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnRcbiAgKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgcG9wb3ZlckVsLnNob3dQb3BvdmVyKCk7XG4gICAgaW5wdXRFbC5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcbiAgICBpZiAocG9wb3ZlckVsLm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSByZXR1cm47XG4gICAgaWYgKGUua2V5ID09PSBcIi9cIikge1xuICAgICAgcG9wb3ZlckVsLnNob3dQb3BvdmVyKCk7XG4gICAgICBpbnB1dEVsLmZvY3VzKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9KTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBwb3BvdmVyRWwuaGlkZVBvcG92ZXIo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